Subject: [PATCH] Built motion from commit 06df96e on branch develop.

From: Motion Team <[email-masked]>
Date: Fri, 4 Dec 2015 11:09:15 +0100

---
 package.json                                       |  137 +
 public/.htaccess                                   |  543 +
 public/app/0e6d6720.vendor.js                      |   84 +
 public/app/16e12937.vendor.css                     |   27 +
 public/app/5c053d28.app.js                         |   43 +
 public/app/808268be.app.css                        |    1 +
 public/assets/css/common.css                       |   25 +
 public/assets/css/global/components.css            |12681 ++++++
 public/assets/css/global/custom-whirly.css         |   57 +
 public/assets/css/global/custom.css                |  291 +
 public/assets/css/global/darkblue.css              |  921 +
 public/assets/css/global/google-open-sans.css      |  284 +
 public/assets/css/global/layout.css                | 2630 ++
 public/assets/css/global/plugins.css               | 2320 ++
 public/assets/css/global/strap-docs.min.css        |    9 +
 public/assets/css/global/strap.min.css             |   18 +
 public/assets/css/inbox.css                        |  487 +
 public/assets/css/login-soft.css                   |  171 +
 public/assets/css/login.css                        |  242 +
 public/assets/css/portfolio.css                    |  123 +
 public/assets/css/profile-old.css                  |  332 +
 public/assets/css/profile.css                      |  175 +
 public/assets/css/smart_table.css                  |   36 +
 public/assets/css/tasks.css                        |   81 +
 public/assets/css/timeline.css                     |  189 +
 public/assets/css/todo.css                         |  307 +
 public/assets/fonts/FontAwesome.otf                |  Bin 0 -> 106260 bytes
 public/assets/fonts/Simple-Line-Icons.eot          |  Bin 0 -> 53572 bytes
 public/assets/fonts/Simple-Line-Icons.svg          |  211 +
 public/assets/fonts/Simple-Line-Icons.ttf          |  Bin 0 -> 53368 bytes
 public/assets/fonts/Simple-Line-Icons.woff         |  Bin 0 -> 53444 bytes
 public/assets/fonts/Simple-Line-Icons.woff2        |  Bin 0 -> 26384 bytes
 public/assets/fonts/fontawesome-webfont.eot        |  Bin 0 -> 68875 bytes
 public/assets/fonts/fontawesome-webfont.svg        |  640 +
 public/assets/fonts/fontawesome-webfont.ttf        |  Bin 0 -> 138204 bytes
 public/assets/fonts/fontawesome-webfont.woff       |  Bin 0 -> 81284 bytes
 public/assets/fonts/fontawesome-webfont.woff2      |  Bin 0 -> 64464 bytes
 .../assets/fonts/glyphicons-halflings-regular.eot  |  Bin 0 -> 20127 bytes
 .../assets/fonts/glyphicons-halflings-regular.svg  |  288 +
 .../assets/fonts/glyphicons-halflings-regular.ttf  |  Bin 0 -> 45404 bytes
 .../assets/fonts/glyphicons-halflings-regular.woff |  Bin 0 -> 23424 bytes
 .../fonts/glyphicons-halflings-regular.woff2       |  Bin 0 -> 18028 bytes
 .../apple/apple-touch-icon-114x114-precomposed.png |  Bin 0 -> 13581 bytes
 .../apple/apple-touch-icon-144x144-precomposed.png |  Bin 0 -> 13580 bytes
 .../apple/apple-touch-icon-57x57-precomposed.png   |  Bin 0 -> 13599 bytes
 .../apple/apple-touch-icon-72x72-precomposed.png   |  Bin 0 -> 13547 bytes
 .../images/apple/apple-touch-icon-precomposed.png  |  Bin 0 -> 13558 bytes
 public/assets/images/apple/apple-touch-icon.png    |  Bin 0 -> 13606 bytes
 public/assets/images/apple/splash.png              |  Bin 0 -> 32559 bytes
 public/assets/images/apple/splash2x.png            |  Bin 0 -> 73469 bytes
 public/assets/images/avatars/avatar.png            |  Bin 0 -> 2016 bytes
 public/assets/images/bg-white-lock.png             |  Bin 0 -> 137 bytes
 .../assets/images/browsers/chrome/chrome_16x16.png |  Bin 0 -> 930 bytes
 .../images/browsers/firefox/firefox_16x16.png      |  Bin 0 -> 960 bytes
 .../internet-explorer/internet-explorer_16x16.png  |  Bin 0 -> 914 bytes
 .../assets/images/browsers/safari/safari_16x16.png |  Bin 0 -> 925 bytes
 public/assets/images/clarotech_original.jpg        |  Bin 0 -> 75977 bytes
 public/assets/images/flags/en_EN.png               |  Bin 0 -> 599 bytes
 public/assets/images/flags/it.png                  |  Bin 0 -> 420 bytes
 public/assets/images/flags/us.png                  |  Bin 0 -> 609 bytes
 public/assets/images/icon-color-close.png          |  Bin 0 -> 1031 bytes
 public/assets/images/icon-color.png                |  Bin 0 -> 1240 bytes
 public/assets/images/icons/facebook.png            |  Bin 0 -> 8825 bytes
 public/assets/images/icons/github.png              |  Bin 0 -> 10410 bytes
 public/assets/images/icons/google.png              |  Bin 0 -> 7968 bytes
 public/assets/images/icons/twitter.png             |  Bin 0 -> 8340 bytes
 public/assets/images/loaders/loader.gif            |  Bin 0 -> 9315 bytes
 public/assets/images/loading-spinner-blue.gif      |  Bin 0 -> 5200 bytes
 public/assets/images/loading-spinner-grey.gif      |  Bin 0 -> 5203 bytes
 public/assets/images/loading.gif                   |  Bin 0 -> 2906 bytes
 public/assets/images/logo-big.png                  |  Bin 0 -> 9967 bytes
 public/assets/images/logo.png                      |  Bin 0 -> 2754 bytes
 public/assets/images/mCSB_buttons.png              |  Bin 0 -> 2998 bytes
 public/assets/images/media/account.png             |  Bin 0 -> 20593 bytes
 public/assets/images/media/automation.png          |  Bin 0 -> 16093 bytes
 public/assets/images/media/channels/chat64.png     |  Bin 0 -> 1312 bytes
 public/assets/images/media/channels/mail64.png     |  Bin 0 -> 1481 bytes
 .../images/media/channels/screen_monitor_64.png    |  Bin 0 -> 430 bytes
 .../assets/images/media/channels/telephone124.png  |  Bin 0 -> 1092 bytes
 public/assets/images/media/context.png             |  Bin 0 -> 12545 bytes
 public/assets/images/media/dashboard.png           |  Bin 0 -> 8730 bytes
 public/assets/images/media/inboundroute.png        |  Bin 0 -> 3943 bytes
 public/assets/images/media/internalroute.png       |  Bin 0 -> 14978 bytes
 public/assets/images/media/interval.png            |  Bin 0 -> 17427 bytes
 public/assets/images/media/moh.png                 |  Bin 0 -> 12712 bytes
 public/assets/images/media/no-pic.png              |  Bin 0 -> 3595 bytes
 public/assets/images/media/odbc.png                |  Bin 0 -> 20192 bytes
 public/assets/images/media/outboundroute.png       |  Bin 0 -> 3999 bytes
 public/assets/images/media/queue.png               |  Bin 0 -> 24648 bytes
 public/assets/images/media/realtime.png            |  Bin 0 -> 12740 bytes
 public/assets/images/media/stage.png               |  Bin 0 -> 11360 bytes
 public/assets/images/media/statistics.png          |  Bin 0 -> 24292 bytes
 public/assets/images/media/team.png                |  Bin 0 -> 26479 bytes
 public/assets/images/media/template.png            |  Bin 0 -> 14035 bytes
 public/assets/images/media/trigger.png             |  Bin 0 -> 16383 bytes
 public/assets/images/media/trunk.png               |  Bin 0 -> 15684 bytes
 public/assets/images/media/variable.png            |  Bin 0 -> 14636 bytes
 public/assets/images/media/voicemail.png           |  Bin 0 -> 16330 bytes
 public/assets/images/media/website.png             |  Bin 0 -> 17639 bytes
 public/assets/images/media/zendesk.png             |  Bin 0 -> 11964 bytes
 public/assets/images/note_placeholder.png          |  Bin 0 -> 33879 bytes
 .../assets/images/portlet-collapse-icon-white.png  |  Bin 0 -> 240 bytes
 public/assets/images/portlet-collapse-icon.png     |  Bin 0 -> 269 bytes
 public/assets/images/portlet-config-icon-white.png |  Bin 0 -> 320 bytes
 public/assets/images/portlet-config-icon.png       |  Bin 0 -> 330 bytes
 public/assets/images/portlet-expand-icon.png       |  Bin 0 -> 256 bytes
 public/assets/images/portlet-reload-icon-white.png |  Bin 0 -> 324 bytes
 public/assets/images/portlet-reload-icon.png       |  Bin 0 -> 345 bytes
 public/assets/images/portlet-remove-icon-white.png |  Bin 0 -> 260 bytes
 public/assets/images/portlet-remove-icon.png       |  Bin 0 -> 312 bytes
 public/assets/images/preview_snippet.png           |  Bin 0 -> 21233 bytes
 public/assets/images/profile_user.jpg              |  Bin 0 -> 79986 bytes
 public/assets/images/remove-icon-small.png         |  Bin 0 -> 193 bytes
 .../sidebar_inline_toggler_icon_darkblue.jpg       |  Bin 0 -> 1084 bytes
 .../images/sidebar_toggler_icon_darkblue.png       |  Bin 0 -> 135 bytes
 public/assets/images/social/facebook.png           |  Bin 0 -> 2973 bytes
 public/assets/images/social/googleplus.png         |  Bin 0 -> 1236 bytes
 public/assets/images/social/linkedin.png           |  Bin 0 -> 3004 bytes
 public/assets/images/social/twitter.png            |  Bin 0 -> 3055 bytes
 public/assets/images/social/youtube.png            |  Bin 0 -> 3300 bytes
 public/assets/images/sort_asc.png                  |  Bin 0 -> 1118 bytes
 public/assets/images/sort_desc.png                 |  Bin 0 -> 1127 bytes
 .../images/sprites/glyphicons-halflings-white.png  |  Bin 0 -> 8777 bytes
 .../assets/images/sprites/glyphicons-halflings.png |  Bin 0 -> 12799 bytes
 public/assets/images/syncfusion-icons-white.png    |  Bin 0 -> 5550 bytes
 public/assets/images/syncfusion-icons.png          |  Bin 0 -> 8143 bytes
 public/assets/images/xcally.png                    |  Bin 0 -> 26191 bytes
 public/assets/languages/locale-en_EN.json          |  744 +
 public/assets/languages/locale-it.json             |  746 +
 .../angular-elastic-builder-back/.bower.json       |   32 +
 .../angular-elastic-builder-back/LICENSE.md        |    9 +
 .../plugins/angular-elastic-builder-back/README.md |  141 +
 .../angular-elastic-builder-back/bower.json        |   21 +
 .../dist/angular-elastic-builder.js                |  608 +
 .../dist/angular-elastic-builder.min.js            |    1 +
 .../examples/index.html                            |   32 +
 .../angular-elastic-builder-back/examples/index.js |   12 +
 .../examples/js/exampleApp.js                      |   76 +
 .../angular-elastic-builder-back/gulpfile.js       |   76 +
 .../angular-elastic-builder-back/package.json      |   30 +
 .../angular-elastic-builder-back/screenshot.png    |  Bin 0 -> 46022 bytes
 .../src/directives/BuilderDirective.js             |   84 +
 .../src/directives/Chooser.js                      |   49 +
 .../src/directives/Group.js                        |   57 +
 .../src/directives/Rule.js                         |   45 +
 .../src/directives/RuleTypes.js                    |   61 +
 .../angular-elastic-builder-back/src/module.js     |   16 +
 .../src/services/GroupClassHelper.js               |   28 +
 .../src/services/QueryService.js                   |  240 +
 .../src/tmpl/BuilderDirective.html                 |   20 +
 .../src/tmpl/ChooserDirective.html                 |   11 +
 .../src/tmpl/ElasticBuilderTemplates.js            |   10 +
 .../src/tmpl/GroupDirective.html                   |   35 +
 .../src/tmpl/RuleDirective.html                    |   14 +
 .../src/tmpl/types/Boolean.html                    |   10 +
 .../src/tmpl/types/Date.html                       |   10 +
 .../src/tmpl/types/Multi.html                      |    8 +
 .../src/tmpl/types/Number.html                     |   24 +
 .../src/tmpl/types/Select.html                     |   35 +
 .../src/tmpl/types/Term.html                       |   21 +
 .../plugins/angular-elastic-builder/.bower.json    |   32 +
 .../plugins/angular-elastic-builder/LICENSE.md     |    9 +
 .../plugins/angular-elastic-builder/README.md      |  141 +
 .../plugins/angular-elastic-builder/bower.json     |   21 +
 .../dist/angular-elastic-builder.js                |  590 +
 .../dist/angular-elastic-builder.min.js            |    1 +
 .../dist/angular-elastic-builder_old.js            |  589 +
 .../angular-elastic-builder/examples/index.html    |   32 +
 .../angular-elastic-builder/examples/index.js      |   12 +
 .../examples/js/exampleApp.js                      |   76 +
 .../plugins/angular-elastic-builder/gulpfile.js    |   76 +
 .../plugins/angular-elastic-builder/package.json   |   30 +
 .../plugins/angular-elastic-builder/screenshot.png |  Bin 0 -> 46022 bytes
 .../src/directives/BuilderDirective.js             |   84 +
 .../src/directives/Chooser.js                      |   47 +
 .../src/directives/Group.js                        |   57 +
 .../angular-elastic-builder/src/directives/Rule.js |   45 +
 .../src/directives/RuleTypes.js                    |   59 +
 .../plugins/angular-elastic-builder/src/module.js  |   16 +
 .../src/services/GroupClassHelper.js               |   28 +
 .../src/services/QueryService.js                   |  226 +
 .../src/tmpl/BuilderDirective.html                 |   52 +
 .../src/tmpl/ChooserDirective.html                 |   29 +
 .../src/tmpl/ElasticBuilderTemplates.js            |   10 +
 .../src/tmpl/GroupDirective.html                   |   65 +
 .../src/tmpl/RuleDirective.html                    |   34 +
 .../src/tmpl/types/Boolean.html                    |   10 +
 .../src/tmpl/types/Date.html                       |   10 +
 .../src/tmpl/types/Multi.html                      |   31 +
 .../src/tmpl/types/Multiterm.html                  |    9 +
 .../src/tmpl/types/Number.html                     |   27 +
 .../src/tmpl/types/Term.html                       |   44 +
 public/assets/plugins/angular-pdf/.bower.json      |   26 +
 public/assets/plugins/angular-pdf/CONTRIBUTING.md  |   25 +
 public/assets/plugins/angular-pdf/Gruntfile.js     |  144 +
 public/assets/plugins/angular-pdf/LICENSE          |   21 +
 public/assets/plugins/angular-pdf/bower.json       |   16 +
 .../assets/plugins/angular-pdf/dist/angular-pdf.js |  142 +
 .../plugins/angular-pdf/dist/angular-pdf.min.js    |    2 +
 .../assets/plugins/angular-pdf/example/index.html  |   29 +
 .../angular-pdf/example/js/controllers/docCtrl.js  |   25 +
 .../example/js/directives/angular-pdf.js           |  137 +
 .../angular-pdf/example/js/lib/angular.min.js      |  251 +
 .../angular-pdf/example/js/lib/angular.min.js.map  |    8 +
 .../plugins/angular-pdf/example/js/lib/pdf.js      | 8021 ++++
 .../angular-pdf/example/js/lib/pdf.worker.js       |39372 +++++++++++++++++++
 .../angular-pdf/example/partials/viewer.html       |   13 +
 .../pdf/4e99fa5a-1d29-4bf8-a083-48ab91f9a623.pdf   |  Bin 0 -> 12350 bytes
 .../plugins/angular-pdf/example/pdf/relativity.pdf |  Bin 0 -> 409413 bytes
 .../assets/plugins/angular-pdf/example/style.css   |    8 +
 public/assets/plugins/angular-pdf/ng-pdf.gif       |  Bin 0 -> 1458242 bytes
 public/assets/plugins/angular-pdf/readme.md        |  219 +
 .../bootstrap-fileinput/bootstrap-fileinput.css    |  110 +
 .../bootstrap-fileinput/bootstrap-fileinput.js     |  198 +
 .../assets/plugins/jquery-multi-select/LICENSE.txt |   13 +
 .../plugins/jquery-multi-select/README.markdown    |    3 +
 .../jquery-multi-select/css/multi-select.css       |   98 +
 .../plugins/jquery-multi-select/img/switch.png     |  Bin 0 -> 236 bytes
 .../jquery-multi-select/img/switch_original.png    |  Bin 0 -> 3080 bytes
 .../jquery-multi-select/js/jquery.multi-select.js  |  532 +
 public/assets/plugins/jquery.sparkline.min.js      |    5 +
 public/assets/plugins/mxgraph/css/common.css       |  152 +
 public/assets/plugins/mxgraph/css/explorer.css     |   15 +
 public/assets/plugins/mxgraph/images/1x1.png       |  Bin 0 -> 95 bytes
 public/assets/plugins/mxgraph/images/checkmark.gif |  Bin 0 -> 1253 bytes
 public/assets/plugins/mxgraph/images/clear.gif     |  Bin 0 -> 1114 bytes
 public/assets/plugins/mxgraph/images/close.png     |  Bin 0 -> 118 bytes
 public/assets/plugins/mxgraph/images/collapsed.gif |  Bin 0 -> 67 bytes
 public/assets/plugins/mxgraph/images/connector.png |  Bin 0 -> 250 bytes
 public/assets/plugins/mxgraph/images/expanded.gif  |  Bin 0 -> 64 bytes
 .../plugins/mxgraph/images/google-drive-20x20.png  |  Bin 0 -> 1736 bytes
 public/assets/plugins/mxgraph/images/grid.gif      |  Bin 0 -> 56 bytes
 .../assets/plugins/mxgraph/images/logo-small.gif   |  Bin 0 -> 1340 bytes
 public/assets/plugins/mxgraph/images/logo.png      |  Bin 0 -> 2935 bytes
 public/assets/plugins/mxgraph/images/nocolor.png   |  Bin 0 -> 948 bytes
 public/assets/plugins/mxgraph/images/submenu.gif   |  Bin 0 -> 56 bytes
 public/assets/plugins/mxgraph/images/tooltip.png   |  Bin 0 -> 1006 bytes
 .../plugins/mxgraph/images/touch-connector.png     |  Bin 0 -> 2489 bytes
 .../assets/plugins/mxgraph/images/touch-handle.png |  Bin 0 -> 1617 bytes
 .../plugins/mxgraph/images/touch-submenu.png       |  Bin 0 -> 1046 bytes
 .../assets/plugins/mxgraph/images/transparent.gif  |  Bin 0 -> 90 bytes
 .../mxgraph/images/web/drawio-cloud-edit.png       |  Bin 0 -> 57767 bytes
 .../plugins/mxgraph/images/web/drawio-drive.png    |  Bin 0 -> 26388 bytes
 .../mxgraph/images/web/drawio-free-edit.png        |  Bin 0 -> 25466 bytes
 .../plugins/mxgraph/images/web/drawio-github.png   |  Bin 0 -> 23387 bytes
 .../plugins/mxgraph/images/web/drawio-menu.png     |  Bin 0 -> 22691 bytes
 .../mxgraph/images/web/drawio-puzzle-edit.png      |  Bin 0 -> 19961 bytes
 .../mxgraph/images/web/drawio-source-edit.png      |  Bin 0 -> 50031 bytes
 .../plugins/mxgraph/images/web/drawioscreen.png    |  Bin 0 -> 196129 bytes
 .../images/web/glyphicons_362_google+_alt.png      |  Bin 0 -> 1165 bytes
 .../mxgraph/images/web/glyphicons_381_github.png   |  Bin 0 -> 1085 bytes
 .../mxgraph/images/web/glyphicons_390_facebook.png |  Bin 0 -> 1024 bytes
 .../mxgraph/images/web/glyphicons_392_twitter.png  |  Bin 0 -> 1126 bytes
 public/assets/plugins/mxgraph/js/Actions.js        |  631 +
 public/assets/plugins/mxgraph/js/Dialogs.js        |  949 +
 public/assets/plugins/mxgraph/js/Editor.js         | 1033 +
 public/assets/plugins/mxgraph/js/EditorUi.js       | 1317 +
 public/assets/plugins/mxgraph/js/Graph.js          |  748 +
 public/assets/plugins/mxgraph/js/Menus.js          |  716 +
 public/assets/plugins/mxgraph/js/Shapes.js         | 1234 +
 public/assets/plugins/mxgraph/js/Sidebar.js        |  903 +
 public/assets/plugins/mxgraph/js/Toolbar.js        |  407 +
 public/assets/plugins/mxgraph/js/custom.js         |  270 +
 public/assets/plugins/mxgraph/js/mxClient.js       |18397 +++++++++
 public/assets/plugins/mxgraph/resources/dia.txt    |  255 +
 public/assets/plugins/mxgraph/resources/dia_am.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_ar.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_bg.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_bn.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_bs.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_ca.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_cs.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_da.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_de.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_el.txt |  255 +
 .../assets/plugins/mxgraph/resources/dia_es-AR.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_es.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_et.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_fa.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_fi.txt |  255 +
 .../assets/plugins/mxgraph/resources/dia_fil.txt   |  255 +
 public/assets/plugins/mxgraph/resources/dia_fr.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_gu.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_he.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_hi.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_hr.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_hu.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_id.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_it.txt |  385 +
 public/assets/plugins/mxgraph/resources/dia_ja.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_kn.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_ko.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_lt.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_lv.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_ml.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_mr.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_ms.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_nl.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_no.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_pl.txt |  255 +
 .../assets/plugins/mxgraph/resources/dia_pt-br.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_pt.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_ro.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_ru.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_sk.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_sl.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_sr.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_sv.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_sw.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_ta.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_te.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_th.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_tr.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_uk.txt |  255 +
 public/assets/plugins/mxgraph/resources/dia_zh.txt |  255 +
 .../assets/plugins/mxgraph/resources/help_it.html  |   10 +
 .../stencils/call_management/answer_128x128.png    |  Bin 0 -> 5966 bytes
 .../stencils/call_management/callback_128x128.png  |  Bin 0 -> 2377 bytes
 .../stencils/call_management/dial_128x128.png      |  Bin 0 -> 5782 bytes
 .../stencils/call_management/ext_dial_128x128.png  |  Bin 0 -> 5385 bytes
 .../stencils/call_management/hangup_128x128.png    |  Bin 0 -> 7477 bytes
 .../stencils/call_management/queue_128x128.png     |  Bin 0 -> 6290 bytes
 .../stencils/call_management/voicemail_128x128.png |  Bin 0 -> 7469 bytes
 .../mxgraph/stencils/callflow/gotoc_128x128.png    |  Bin 0 -> 5581 bytes
 .../mxgraph/stencils/callflow/gotoif_128x128.png   |  Bin 0 -> 7130 bytes
 .../stencils/callflow/gotoifmultitime_128x128.png  |  Bin 0 -> 9851 bytes
 .../stencils/callflow/gotoiftime_128x128.png       |  Bin 0 -> 7388 bytes
 .../mxgraph/stencils/callflow/vswitch_128x128.png  |  Bin 0 -> 5410 bytes
 .../plugins/mxgraph/stencils/entry/end_128x128.png |  Bin 0 -> 6551 bytes
 .../mxgraph/stencils/entry/finally_128x128.png     |  Bin 0 -> 7568 bytes
 .../mxgraph/stencils/entry/start_128x128.png       |  Bin 0 -> 5631 bytes
 public/assets/plugins/mxgraph/stencils/general.xml |   58 +
 .../mxgraph/stencils/general/agi_128x128.png       |  Bin 0 -> 4113 bytes
 .../stencils/general/custom_app_128x128.png        |  Bin 0 -> 5273 bytes
 .../mxgraph/stencils/general/noop_128x128.png      |  Bin 0 -> 5933 bytes
 .../stencils/general/subproject_128x128.png        |  Bin 0 -> 5143 bytes
 .../mxgraph/stencils/general/system_128x128.png    |  Bin 0 -> 5866 bytes
 .../stencils/integration_server/asr_128x128.png    |  Bin 0 -> 9355 bytes
 .../integration_server/database_128x128.png        |  Bin 0 -> 5900 bytes
 .../integration_server/ispeechasr_128x128.png      |  Bin 0 -> 4918 bytes
 .../stencils/playback/background_128x128.png       |  Bin 0 -> 6874 bytes
 .../stencils/playback/getdigits_128x128.png        |  Bin 0 -> 4864 bytes
 .../stencils/playback/ispeechtts_128x128.png       |  Bin 0 -> 4830 bytes
 .../mxgraph/stencils/playback/menu_128x128.png     |  Bin 0 -> 5010 bytes
 .../mxgraph/stencils/playback/playback_128x128.png |  Bin 0 -> 4903 bytes
 .../stencils/playback/saydigits_128x128.png        |  Bin 0 -> 6105 bytes
 .../stencils/playback/saynumber_128x128.png        |  Bin 0 -> 7097 bytes
 .../stencils/playback/sayphonetic_128x128.png      |  Bin 0 -> 6642 bytes
 .../mxgraph/stencils/playback/tts_128x128.png      |  Bin 0 -> 5600 bytes
 .../mxgraph/stencils/recording/record_128x128.png  |  Bin 0 -> 5155 bytes
 .../mxgraph/stencils/stats/goal_128x128.png        |  Bin 0 -> 5807 bytes
 .../mxgraph/stencils/stats/queuelog_128x128.png    |  Bin 0 -> 4347 bytes
 .../mxgraph/stencils/variable/math_128x128.png     |  Bin 0 -> 6286 bytes
 .../mxgraph/stencils/variable/set_128x128.png      |  Bin 0 -> 5854 bytes
 public/assets/plugins/mxgraph/styles/custom.css    |   45 +
 .../assets/plugins/mxgraph/styles/default-old.xml  |  109 +
 public/assets/plugins/mxgraph/styles/default.xml   |  230 +
 .../plugins/mxgraph/styles/grapheditor-ie6.css     |   23 +
 .../assets/plugins/mxgraph/styles/grapheditor.css  |  382 +
 public/assets/plugins/mxgraph/styles/ie6.min.css   |    1 +
 .../plugins/mxgraph/styles/manual-colors.css       |   69 +
 .../plugins/mxgraph/styles/manual-styles.css       |  255 +
 public/assets/plugins/mxgraph/styles/sprites.png   |  Bin 0 -> 6286 bytes
 .../assets/plugins/mxgraph/styles/thumb_horz.png   |  Bin 0 -> 113 bytes
 .../plugins/mxgraph/styles/thumb_vertical.png      |  Bin 0 -> 122 bytes
 .../plugins/mxgraph/styles/web/bootstrap-extra.css |  510 +
 .../mxgraph/styles/web/bootstrap-responsive.css    |  808 +
 .../styles/web/bootstrap-responsive.min.css        |    9 +
 .../plugins/mxgraph/styles/web/bootstrap.css       | 4960 +++
 .../plugins/mxgraph/styles/web/bootstrap.min.css   |    9 +
 .../styles/web/font-awesome/font-awesome-ie7.css   |  645 +
 .../styles/web/font-awesome/font-awesome.css       |  303 +
 .../styles/web/font-awesome/font/README.TXT        |    8 +
 .../web/font-awesome/font/fontawesome-webfont.eot  |  Bin 0 -> 38708 bytes
 .../web/font-awesome/font/fontawesome-webfont.svg  |  255 +
 .../web/font-awesome/font/fontawesome-webfont.ttf  |  Bin 0 -> 68476 bytes
 .../web/font-awesome/font/fontawesome-webfont.woff |  Bin 0 -> 41752 bytes
 .../plugins/mxgraph/styles/web/static.min.css      |    1 +
 .../mxgraph/styles/web/static.uncompressed.css     |  107 +
 .../plugins/mxgraph/templates/images/aws1.png      |  Bin 0 -> 14950 bytes
 .../plugins/mxgraph/templates/images/bpmn1.png     |  Bin 0 -> 12907 bytes
 .../plugins/mxgraph/templates/images/compare1.png  |  Bin 0 -> 11640 bytes
 .../mxgraph/templates/images/flowchart1.png        |  Bin 0 -> 13007 bytes
 .../mxgraph/templates/images/flowchart2.png        |  Bin 0 -> 6606 bytes
 .../plugins/mxgraph/templates/images/gantt1.png    |  Bin 0 -> 15699 bytes
 .../plugins/mxgraph/templates/images/lean1.png     |  Bin 0 -> 17148 bytes
 .../plugins/mxgraph/templates/images/mindmap1.png  |  Bin 0 -> 30976 bytes
 .../plugins/mxgraph/templates/images/orgchart1.png |  Bin 0 -> 17824 bytes
 .../plugins/mxgraph/templates/images/orgchart2.png |  Bin 0 -> 14114 bytes
 .../plugins/mxgraph/templates/images/package1.png  |  Bin 0 -> 12484 bytes
 .../plugins/mxgraph/templates/images/pid1.png      |  Bin 0 -> 12276 bytes
 .../mxgraph/templates/images/plcladder1.png        |  Bin 0 -> 3315 bytes
 .../plugins/mxgraph/templates/images/seqdiag1.png  |  Bin 0 -> 10392 bytes
 .../plugins/mxgraph/templates/images/sitemap1.png  |  Bin 0 -> 18466 bytes
 .../plugins/mxgraph/templates/images/socnet1.png   |  Bin 0 -> 19817 bytes
 .../plugins/mxgraph/templates/images/stardelta.png |  Bin 0 -> 7197 bytes
 .../mxgraph/templates/images/statemachine1.png     |  Bin 0 -> 15022 bytes
 .../plugins/mxgraph/templates/images/uml1.png      |  Bin 0 -> 6388 bytes
 .../plugins/mxgraph/templates/images/usecase1.png  |  Bin 0 -> 25313 bytes
 .../plugins/mxgraph/templates/images/venn1.png     |  Bin 0 -> 9761 bytes
 .../plugins/mxgraph/templates/images/wf1.png       |  Bin 0 -> 7413 bytes
 .../assets/plugins/mxgraph/templates/xml/aws1.xml  |    1 +
 .../assets/plugins/mxgraph/templates/xml/bpmn1.xml |    1 +
 .../plugins/mxgraph/templates/xml/compare1.xml     |    1 +
 .../plugins/mxgraph/templates/xml/flowchart1.xml   |    1 +
 .../plugins/mxgraph/templates/xml/flowchart2.xml   |    1 +
 .../plugins/mxgraph/templates/xml/gantt1.xml       |    1 +
 .../assets/plugins/mxgraph/templates/xml/lean1.xml |    1 +
 .../plugins/mxgraph/templates/xml/mindmap1.xml     |    1 +
 .../plugins/mxgraph/templates/xml/orgchart1.xml    |    1 +
 .../plugins/mxgraph/templates/xml/orgchart2.xml    |    1 +
 .../plugins/mxgraph/templates/xml/package1.xml     |    1 +
 .../assets/plugins/mxgraph/templates/xml/pid1.xml  |    1 +
 .../plugins/mxgraph/templates/xml/plcladder1.xml   |    1 +
 .../plugins/mxgraph/templates/xml/seqdiag1.xml     |    1 +
 .../plugins/mxgraph/templates/xml/sitemap1.xml     |    1 +
 .../plugins/mxgraph/templates/xml/socnet1.xml      |    1 +
 .../plugins/mxgraph/templates/xml/stardelta.xml    |    1 +
 .../mxgraph/templates/xml/statemachine1.xml        |    1 +
 .../assets/plugins/mxgraph/templates/xml/uml1.xml  |    1 +
 .../plugins/mxgraph/templates/xml/usecase1.xml     |    1 +
 .../assets/plugins/mxgraph/templates/xml/venn1.xml |    1 +
 .../assets/plugins/mxgraph/templates/xml/wf1.xml   |    1 +
 public/assets/plugins/ui-select/select.min.css     |  221 +
 public/assets/plugins/ui-select/select.min.js      | 2050 +
 public/assets/scripts/charts-flotcharts.js         |  899 +
 public/assets/scripts/components-dropdowns.js      |  464 +
 public/assets/scripts/datatable.js                 |  318 +
 public/assets/scripts/form-wizard-agent.js         |  254 +
 public/assets/scripts/global/layout.js             |  608 +
 public/assets/scripts/global/metronic.js           |  953 +
 public/assets/scripts/inbox-fax.js                 |  332 +
 public/assets/scripts/inbox.js                     |  335 +
 public/assets/scripts/index.js                     |  645 +
 .../assets/scripts/jquery-ui-1.10.3.custom.min.js  |    7 +
 public/assets/scripts/jquery.cokie.min.js          |    9 +
 public/assets/scripts/jquery.sparkline.min.js      |    5 +
 public/assets/scripts/login-soft.js                |  249 +
 public/assets/scripts/portfolio.js                 |   12 +
 public/assets/scripts/profile.js                   |   77 +
 public/assets/scripts/table-ajax.js                |   82 +
 public/assets/scripts/tasks.js                     |   19 +
 public/bower_components/Chart.js/Chart.js          | 3477 ++
 public/bower_components/Sortable/Sortable.js       | 1144 +
 .../bower_components/Sortable/knockout-sortable.js |  161 +
 public/bower_components/Sortable/ng-sortable.js    |  185 +
 .../Sortable/react-sortable-mixin.js               |  157 +
 .../adf-structures-base/adf-structures-base.js     |  116 +
 .../adf-widget-clock/adf-widget-clock.css          |   11 +
 .../adf-widget-clock/adf-widget-clock.js           |   67 +
 .../adf-widget-iframe/adf-widget-iframe.css        |    6 +
 .../adf-widget-iframe/adf-widget-iframe.js         |   28 +
 .../angular-animate/angular-animate.js             | 3930 ++
 .../angular-audio/angular.audio.js                 |  490 +
 .../bootstrap-colorpicker-module.js                |  567 +
 .../angular-bootstrap-colorpicker/colorpicker.css  |  169 +
 .../angular-bootstrap-contextmenu/contextMenu.js   |   89 +
 .../angular-bootstrap-switch.js                    |  252 +
 .../angular-bootstrap/ui-bootstrap-tpls.js         | 8503 ++++
 .../angular-chart.js/angular-chart.css             |   49 +
 .../angular-chart.js/angular-chart.js              |  360 +
 .../angular-cookies/angular-cookies.js             |  321 +
 .../angular-dashboard-framework.css                |   83 +
 .../angular-dashboard-framework.js                 | 1241 +
 .../angular-file-upload/angular-file-upload.min.js |    7 +
 .../angular-filter/angular-filter.min.js           |    6 +
 .../angular-local-storage/angular-local-storage.js |  449 +
 public/bower_components/angular-md5/angular-md5.js |  208 +
 .../angular-mocks/angular-mocks.js                 | 2471 ++
 .../angular-notification/angular-notification.js   |  170 +
 .../angular-resource/angular-resource.js           |  684 +
 .../angular-sanitize/angular-sanitize.js           |  683 +
 .../angular-scenario/angular-scenario.js           |40439 ++++++++++++++++++++
 .../angular-smart-table/smart-table.js             |  527 +
 .../bower_components/angular-socket-io/socket.js   |  103 +
 .../angular-toastr/angular-toastr.css              |  203 +
 .../angular-toastr/angular-toastr.tpls.js          |  485 +
 .../angular-touch/angular-touch.js                 |  628 +
 .../angular-translate-loader-static-files.js       |  114 +
 .../angular-translate-storage-cookie.js            |   97 +
 .../angular-translate-storage-local.js             |  123 +
 .../angular-translate/angular-translate.js         | 2904 ++
 .../bower_components/angular-truncate/truncate.js  |   49 +
 .../angular-ui-notification.min.css                |    8 +
 .../angular-ui-notification.min.js                 |    8 +
 .../angular-ui-router/angular-ui-router.js         | 4370 +++
 .../angular-ui-sortable/sortable.js                |  361 +
 .../angular-wizard/angular-wizard.min.css          |    1 +
 .../angular-wizard/angular-wizard.min.js           |    7 +
 .../angular-xeditable/xeditable.css                |    7 +
 .../angular-xeditable/xeditable.js                 | 2227 ++
 public/bower_components/angular/angular.js         |29018 ++++++++++++++
 public/bower_components/animate.css/animate.css    | 3272 ++
 public/bower_components/blockUI/jquery.blockUI.js  |  620 +
 .../bootstrap-hover-dropdown.js                    |  124 +
 .../bootstrap-select/bootstrap-select.css          |  272 +
 .../bootstrap-select/bootstrap-select.js           | 1660 +
 .../bootstrap-select/bootstrap-select.less         |  343 +
 .../bootstrap-switch/bootstrap-switch.css          |  196 +
 .../bootstrap-switch/bootstrap-switch.js           |  710 +
 public/bower_components/bootstrap/bootstrap.js     | 2363 ++
 public/bower_components/bootstrap/bootstrap.less   |   56 +
 .../checklist-model/checklist-model.js             |  134 +
 public/bower_components/css-spinners/atebits.css   |  306 +
 public/bower_components/css-spinners/ball.css      |  373 +
 public/bower_components/css-spinners/circles.css   |   71 +
 public/bower_components/css-spinners/dots.css      |  196 +
 public/bower_components/css-spinners/flower.css    |   69 +
 public/bower_components/css-spinners/gauge.css     |  277 +
 public/bower_components/css-spinners/heartbeat.css |  125 +
 public/bower_components/css-spinners/hexdots.css   |  196 +
 .../bower_components/css-spinners/hole-pulse.css   |   60 +
 .../css-spinners/inner-circles.css                 |   97 +
 .../bower_components/css-spinners/plus-loader.css  |   69 +
 public/bower_components/css-spinners/plus.css      |  671 +
 public/bower_components/css-spinners/pong.css      |  274 +
 public/bower_components/css-spinners/pulse.css     |   60 +
 .../bower_components/css-spinners/refreshing.css   |   64 +
 public/bower_components/css-spinners/spinner.css   |   53 +
 public/bower_components/css-spinners/spinners.css  | 3382 ++
 public/bower_components/css-spinners/spinners.scss |   19 +
 .../css-spinners/three-quarters.css                |   50 +
 public/bower_components/css-spinners/throbber.css  |   67 +
 public/bower_components/css-spinners/timer.css     |   90 +
 public/bower_components/css-spinners/whirly.css    |   57 +
 public/bower_components/css-spinners/wobblebar.css |  269 +
 public/bower_components/es5-shim/es5-shim.js       | 1613 +
 .../font-awesome/font-awesome.less                 |   17 +
 .../font-awesome/font-awesome.scss                 |   17 +
 public/bower_components/highlightjs/default.css    |  155 +
 .../bower_components/highlightjs/highlight.pack.js |13562 +++++++
 .../jquery-backstretch/jquery.backstretch.js       |  377 +
 .../jquery-cookie/jquery.cookie.js                 |  117 +
 public/bower_components/jquery-migrate/.bower.json |   14 +
 public/bower_components/jquery-migrate/README.md   |   12 +
 .../bower_components/jquery-migrate/component.json |    4 +
 .../jquery-migrate/jquery-migrate.js               |  521 +
 .../jquery-migrate/jquery-migrate.min.js           |    2 +
 .../jquery-mousewheel/jquery.mousewheel.js         |  221 +
 .../bower_components/jquery-slimscroll/.bower.json |   14 +
 .../bower_components/jquery-slimscroll/README.md   |    8 +
 .../examples/allow-page-scroll.html                |   94 +
 .../jquery-slimscroll/examples/chaining.html       |   80 +
 .../examples/disable-fade-out.html                 |   94 +
 .../examples/dynamic-content.html                  |   81 +
 .../jquery-slimscroll/examples/height-width.html   |  125 +
 .../jquery-slimscroll/examples/index.html          |    9 +
 .../examples/libs/prettify/prettify.css            |   52 +
 .../examples/libs/prettify/prettify.js             | 1477 +
 .../jquery-slimscroll/examples/mouse-wheel.html    |   99 +
 .../examples/multiple-elements.html                |  120 +
 .../jquery-slimscroll/examples/navigation.html     |   30 +
 .../jquery-slimscroll/examples/nested.html         |   82 +
 .../examples/programmatic-scrolling.html           |  138 +
 .../jquery-slimscroll/examples/rail.html           |  190 +
 .../jquery-slimscroll/examples/scroll-events.html  |   88 +
 .../jquery-slimscroll/examples/scrollbar.html      |  189 +
 .../jquery-slimscroll/examples/start-position.html |  100 +
 .../jquery-slimscroll/examples/style.css           |   13 +
 .../jquery-slimscroll/jquery.slimscroll.js         |  474 +
 .../jquery-slimscroll/jquery.slimscroll.min.js     |   16 +
 .../jquery-slimscroll/package.json                 |   31 +
 public/bower_components/jquery-ui/jquery-ui.js     |16617 ++++++++
 .../jquery-validation/jquery.validate.js           | 1398 +
 .../jquery.actual/jquery.actual.js                 |  107 +
 public/bower_components/jquery/jquery.js           | 9210 +++++
 public/bower_components/json3/json3.js             |  902 +
 public/bower_components/lodash/lodash.js           |12352 ++++++
 .../jquery.mCustomScrollbar.css                    | 1267 +
 .../jquery.mCustomScrollbar.js                     | 2425 ++
 .../mCSB_buttons.png                               |  Bin 0 -> 2998 bytes
 public/bower_components/moment/moment.js           | 3195 ++
 public/bower_components/ng-csv/ng-csv.min.js       |    2 +
 public/bower_components/ng-emoticons/emojis.png    |  Bin 0 -> 792641 bytes
 public/bower_components/ng-emoticons/[email-masked] |  Bin 0 -> 2366542 bytes
 public/bower_components/ng-emoticons/emoticons.eot |  Bin 0 -> 13168 bytes
 public/bower_components/ng-emoticons/emoticons.svg |   44 +
 public/bower_components/ng-emoticons/emoticons.ttf |  Bin 0 -> 13004 bytes
 .../bower_components/ng-emoticons/emoticons.woff   |  Bin 0 -> 13080 bytes
 public/bower_components/ng-emoticons/loader.svg    |   17 +
 .../bower_components/ng-emoticons/ng-emoticons.css | 3843 ++
 .../bower_components/ng-emoticons/ng-emoticons.js  |  547 +
 .../ng-remote-validate/ngRemoteValidate.js         |  165 +
 .../ng-scrollbars/scrollbars.min.js                |    1 +
 .../ng-slide-down/ng-slide-down.js                 |  109 +
 .../ngInfiniteScroll/ng-infinite-scroll.js         |   61 +
 public/bower_components/ngmap/ng-map.js            | 2776 ++
 public/bower_components/oclazyload/ocLazyLoad.js   | 1338 +
 public/bower_components/pdfjs-dist/pdf.js          | 8268 ++++
 public/bower_components/pdfjs-dist/pdf.worker.js   |39826 +++++++++++++++++++
 .../bower_components/rangy/rangy-classapplier.js   | 1103 +
 public/bower_components/rangy/rangy-core.js        | 3845 ++
 public/bower_components/rangy/rangy-highlighter.js |  620 +
 .../rangy/rangy-selectionsaverestore.js            |  252 +
 public/bower_components/rangy/rangy-serializer.js  |  314 +
 public/bower_components/rangy/rangy-textrange.js   | 1930 +
 public/bower_components/select2/core.scss          |   48 +
 public/bower_components/select2/select2.js         | 5570 +++
 .../simple-line-icons/Simple-Line-Icons.eot        |  Bin 0 -> 53572 bytes
 .../simple-line-icons/Simple-Line-Icons.svg        |  211 +
 .../simple-line-icons/Simple-Line-Icons.ttf        |  Bin 0 -> 53368 bytes
 .../simple-line-icons/Simple-Line-Icons.woff       |  Bin 0 -> 53444 bytes
 .../simple-line-icons/Simple-Line-Icons.woff2      |  Bin 0 -> 26384 bytes
 .../simple-line-icons/simple-line-icons.css        |  758 +
 .../simple-line-icons/simple-line-icons.less       |  952 +
 .../simple-line-icons/simple-line-icons.scss       |  949 +
 public/bower_components/sprintf/sprintf.js         |  208 +
 .../textAngular/textAngular-sanitize.js            |  783 +
 .../bower_components/textAngular/textAngular.css   |  193 +
 public/bower_components/textAngular/textAngular.js | 3068 ++
 .../textAngular/textAngularSetup.js                |  834 +
 .../time-elements/time-elements.js                 |  525 +
 public/bower_components/ui-navbar/ui-navbar.js     |   63 +
 public/bower_components/ui-select/select.css       |  267 +
 public/bower_components/ui-select/select.js        | 1926 +
 .../webcomponentsjs/webcomponents.js               | 7177 ++++
 public/favicon.ico                                 |  Bin 0 -> 1150 bytes
 public/index.html                                  |   74 +
 public/robots.txt                                  |    3 +
 release-notes/changelog_0.0.1.txt                  |   57 +
 server/api/agent/agent.controller.js               |  279 +
 server/api/agent/agent.socket.js                   |   33 +
 server/api/agent/agent.spec.js                     |   20 +
 server/api/agent/index.js                          |   21 +
 server/api/ami/ami.ami.js                          |   37 +
 server/api/ami/ami.controller.js                   |  101 +
 server/api/ami/ami.socket.js                       |   24 +
 server/api/ami/ami.spec.js                         |   20 +
 server/api/ami/index.js                            |   16 +
 server/api/automation/automation.controller.js     |  168 +
 server/api/automation/automation.socket.js         |   24 +
 server/api/automation/automation.spec.js           |   20 +
 server/api/automation/index.js                     |   17 +
 .../business_action/business_action.controller.js  |   94 +
 .../api/business_action/business_action.socket.js  |   24 +
 server/api/business_action/business_action.spec.js |   20 +
 server/api/business_action/index.js                |   15 +
 .../business_condition.controller.js               |   93 +
 .../business_condition.socket.js                   |   24 +
 .../business_condition/business_condition.spec.js  |   20 +
 server/api/business_condition/index.js             |   15 +
 .../chat_application.controller.js                 |  105 +
 .../chat_application/chat_application.socket.js    |   24 +
 .../api/chat_application/chat_application.spec.js  |   20 +
 server/api/chat_application/index.js               |   15 +
 server/api/chat_enquiry/enquiry.controller.js      |   99 +
 server/api/chat_enquiry/enquiry.socket.js          |   24 +
 server/api/chat_enquiry/enquiry.spec.js            |   20 +
 server/api/chat_enquiry/index.js                   |   15 +
 server/api/chat_message/chat_message.controller.js |  269 +
 server/api/chat_message/chat_message.socket.js     |   77 +
 server/api/chat_message/chat_message.spec.js       |   20 +
 server/api/chat_message/index.js                   |   16 +
 server/api/chat_queue/chat_queue.controller.js     |  240 +
 server/api/chat_queue/chat_queue.socket.js         |   24 +
 server/api/chat_queue/chat_queue.spec.js           |   20 +
 server/api/chat_queue/index.js                     |   20 +
 server/api/chat_room/chat_room.controller.js       |  459 +
 server/api/chat_room/chat_room.controller.js.back  |  286 +
 server/api/chat_room/chat_room.socket.js           |   30 +
 server/api/chat_room/chat_room.spec.js             |   20 +
 server/api/chat_room/index.js                      |   20 +
 server/api/chat_visitor/chat_visitor.controller.js |   94 +
 server/api/chat_visitor/chat_visitor.socket.js     |   27 +
 server/api/chat_visitor/chat_visitor.spec.js       |   20 +
 server/api/chat_visitor/index.js                   |   15 +
 server/api/chat_website/chat_website.controller.js |  281 +
 server/api/chat_website/chat_website.socket.js     |   24 +
 server/api/chat_website/chat_website.spec.js       |   20 +
 server/api/chat_website/index.js                   |   19 +
 server/api/contact/contact.controller.js           |   85 +
 server/api/contact/contact.model.js                |   13 +
 server/api/contact/contact.socket.js               |   24 +
 server/api/contact/contact.spec.js                 |   20 +
 server/api/contact/index.js                        |   15 +
 server/api/dashboard/dashboard.controller.js       |  178 +
 server/api/dashboard/dashboard.socket.js           |   27 +
 server/api/dashboard/dashboard.spec.js             |   20 +
 server/api/dashboard/index.js                      |   18 +
 server/api/event/event.controller.js               |  119 +
 server/api/event/event.socket.js                   |   36 +
 server/api/event/event.spec.js                     |   20 +
 server/api/event/index.js                          |   16 +
 server/api/fax_account/fax_account.controller.js   |  374 +
 server/api/fax_account/fax_account.socket.js       |   24 +
 server/api/fax_account/fax_account.spec.js         |   20 +
 server/api/fax_account/index.js                    |   17 +
 .../fax_application/fax_application.controller.js  |   94 +
 .../api/fax_application/fax_application.socket.js  |   24 +
 server/api/fax_application/fax_application.spec.js |   20 +
 server/api/fax_application/index.js                |   15 +
 .../fax_business_automation.controller.js          |  204 +
 .../fax_business_automation.socket.js              |   27 +
 .../fax_business_automation.spec.js                |   20 +
 server/api/fax_business_automation/index.js        |   15 +
 server/api/fax_message/fax_message.ami.js          |   64 +
 server/api/fax_message/fax_message.controller.js   |  422 +
 server/api/fax_message/fax_message.socket.js       |   85 +
 server/api/fax_message/fax_message.spec.js         |   20 +
 server/api/fax_message/index.js                    |   16 +
 server/api/fax_queue/fax_queue.controller.js       |  222 +
 server/api/fax_queue/fax_queue.socket.js           |   24 +
 server/api/fax_queue/fax_queue.spec.js             |   20 +
 server/api/fax_queue/index.js                      |   18 +
 server/api/fax_room/fax_room.controller.js         |  151 +
 server/api/fax_room/fax_room.kue.js                |   64 +
 server/api/fax_room/fax_room.socket.js             |   24 +
 server/api/fax_room/fax_room.spec.js               |   20 +
 server/api/fax_room/index.js                       |   16 +
 server/api/integration/index.js                    |   15 +
 server/api/integration/integration.controller.js   |  177 +
 server/api/integration/integration.socket.js       |   24 +
 server/api/integration/integration.spec.js         |   20 +
 server/api/interval/index.js                       |   18 +
 server/api/interval/interval.controller.js         |  324 +
 server/api/interval/interval.socket.js             |   31 +
 server/api/interval/interval.spec.js               |   20 +
 server/api/mail_account/index.js                   |   18 +
 server/api/mail_account/mail_account.controller.js |  327 +
 server/api/mail_account/mail_account.socket.js     |   27 +
 server/api/mail_account/mail_account.spec.js       |   20 +
 server/api/mail_application/index.js               |   15 +
 .../mail_application.controller.js                 |  111 +
 .../mail_application/mail_application.socket.js    |   24 +
 .../api/mail_application/mail_application.spec.js  |   20 +
 server/api/mail_attachment/index.js                |   15 +
 .../mail_attachment/mail_attachment.controller.js  |   87 +
 .../api/mail_attachment/mail_attachment.socket.js  |   24 +
 server/api/mail_attachment/mail_attachment.spec.js |   20 +
 server/api/mail_business_automation/index.js       |   16 +
 .../mail_business_automation.controller.js         |  218 +
 .../mail_business_automation.socket.js             |   28 +
 .../mail_business_automation.spec.js               |   20 +
 server/api/mail_message/index.js                   |   20 +
 server/api/mail_message/mail_message.controller.js |  271 +
 server/api/mail_message/mail_message.socket.js     |   34 +
 server/api/mail_message/mail_message.spec.js       |   20 +
 server/api/mail_queue/index.js                     |   18 +
 server/api/mail_queue/mail_queue.controller.js     |  216 +
 server/api/mail_queue/mail_queue.socket.js         |   30 +
 server/api/mail_queue/mail_queue.spec.js           |   20 +
 server/api/mail_room/index.js                      |   17 +
 server/api/mail_room/mail_room.controller.js       |  205 +
 server/api/mail_room/mail_room.kue.js              |   66 +
 server/api/mail_room/mail_room.socket.js           |   48 +
 server/api/mail_room/mail_room.spec.js             |   20 +
 server/api/mail_server_in/index.js                 |   15 +
 .../mail_server_in/mail_server_in.controller.js    |   85 +
 server/api/mail_server_in/mail_server_in.socket.js |   27 +
 server/api/mail_server_in/mail_server_in.spec.js   |   20 +
 server/api/mail_server_out/index.js                |   15 +
 .../mail_server_out/mail_server_out.controller.js  |   96 +
 .../api/mail_server_out/mail_server_out.socket.js  |   26 +
 server/api/mail_server_out/mail_server_out.spec.js |   20 +
 server/api/mail_template/index.js                  |   15 +
 .../api/mail_template/mail_template.controller.js  |  158 +
 server/api/mail_template/mail_template.socket.js   |   24 +
 server/api/mail_template/mail_template.spec.js     |   20 +
 server/api/module/index.js                         |   15 +
 server/api/module/module.controller.js             |   92 +
 server/api/module/module.socket.js                 |   24 +
 server/api/module/module.spec.js                   |   20 +
 server/api/module/setting/index.js                 |   15 +
 server/api/module/setting/setting.controller.js    |  110 +
 server/api/module/setting/setting.socket.js        |   24 +
 server/api/module/setting/setting.spec.js          |   20 +
 server/api/motionbar/index.js                      |   11 +
 server/api/motionbar/motionbar.controller.js       |   32 +
 server/api/motionbar/motionbar.socket.js           |   27 +
 server/api/motionbar/motionbar.spec.js             |   20 +
 server/api/report_agent/index.js                   |   15 +
 server/api/report_agent/report_agent.controller.js |   93 +
 server/api/report_agent/report_agent.socket.js     |   50 +
 server/api/report_chat/index.js                    |   15 +
 server/api/report_chat/report_chat.controller.js   |   98 +
 server/api/report_chat/report_chat.socket.js       |   35 +
 server/api/report_chat/report_chat.spec.js         |   20 +
 server/api/report_chat_session/index.js            |   15 +
 .../report_chat_session.controller.js              |   93 +
 .../report_chat_session.socket.js                  |   27 +
 .../report_chat_session.spec.js                    |   20 +
 server/api/report_mail/index.js                    |   15 +
 server/api/report_mail/report_mail.controller.js   |   93 +
 server/api/report_mail/report_mail.socket.js       |   35 +
 server/api/report_mail/report_mail.spec.js         |   20 +
 server/api/report_mail_session/index.js            |   15 +
 .../report_mail_session.controller.js              |   93 +
 .../report_mail_session.socket.js                  |   27 +
 .../report_mail_session.spec.js                    |   20 +
 server/api/report_queue/index.js                   |   15 +
 server/api/report_queue/report_queue.controller.js |   93 +
 server/api/report_queue/report_queue.socket.js     |   29 +
 server/api/setting/index.js                        |   17 +
 server/api/setting/setting.controller.js           |  140 +
 server/api/setting/setting.socket.js               |   24 +
 server/api/setting/setting.spec.js                 |   20 +
 server/api/square_odbc/index.js                    |   17 +
 server/api/square_odbc/square_odbc.controller.js   |  209 +
 server/api/square_odbc/square_odbc.socket.js       |   24 +
 server/api/square_odbc/square_odbc.spec.js         |   20 +
 server/api/square_project/index.js                 |   19 +
 .../square_project/square_project.controller.js    |  211 +
 server/api/square_project/square_project.socket.js |   27 +
 server/api/square_project/square_project.spec.js   |   20 +
 server/api/team/index.js                           |   19 +
 server/api/team/team.controller.js                 |  232 +
 server/api/team/team.socket.js                     |   27 +
 server/api/team/team.spec.js                       |   20 +
 server/api/thing/index.js                          |   15 +
 server/api/thing/thing.controller.js               |   98 +
 server/api/thing/thing.socket.js                   |   27 +
 server/api/thing/thing.spec.js                     |   20 +
 server/api/trigger/index.js                        |   17 +
 server/api/trigger/trigger.controller.js           |  168 +
 server/api/trigger/trigger.socket.js               |   24 +
 server/api/trigger/trigger.spec.js                 |   20 +
 server/api/trunk/index.js                          |   18 +
 server/api/trunk/trunk.ami.js                      |   90 +
 server/api/trunk/trunk.controller.js               |  298 +
 server/api/trunk/trunk.socket.js                   |   24 +
 server/api/trunk/trunk.spec.js                     |   20 +
 server/api/upload/index.js                         |   17 +
 server/api/upload/upload.controller.js             |  269 +
 server/api/upload/upload.socket.js                 |   24 +
 server/api/upload/upload.spec.js                   |   20 +
 server/api/user/index.js                           |   25 +
 server/api/user/user.ami.js                        |   71 +
 server/api/user/user.controller.js                 |  447 +
 server/api/user/user.socket.js                     |   31 +
 server/api/user/user.spec.js                       |   20 +
 server/api/user_has_chat_queue/index.js            |   15 +
 .../user_has_chat_queue.controller.js              |  103 +
 .../user_has_chat_queue.socket.js                  |   24 +
 .../user_has_chat_queue.spec.js                    |   20 +
 server/api/user_has_chat_room/index.js             |   16 +
 .../user_has_chat_room.controller.js               |   96 +
 .../user_has_chat_room.socket.js                   |   48 +
 .../user_has_chat_room/user_has_chat_room.spec.js  |   20 +
 server/api/user_has_fax_queue/index.js             |   15 +
 .../user_has_fax_queue.controller.js               |  103 +
 .../user_has_fax_queue.socket.js                   |   30 +
 .../user_has_fax_queue/user_has_fax_queue.spec.js  |   20 +
 server/api/user_has_mail_queue/index.js            |   15 +
 .../user_has_mail_queue.controller.js              |   95 +
 .../user_has_mail_queue.socket.js                  |   34 +
 .../user_has_mail_queue.spec.js                    |   20 +
 server/api/user_has_team/index.js                  |   15 +
 .../api/user_has_team/user_has_team.controller.js  |   96 +
 server/api/user_has_team/user_has_team.model.js    |   13 +
 server/api/user_has_team/user_has_team.socket.js   |   24 +
 server/api/user_has_team/user_has_team.spec.js     |   20 +
 server/api/user_has_voice_queue/index.js           |   15 +
 .../user_has_voice_queue.controller.js             |   98 +
 .../user_has_voice_queue.socket.js                 |   41 +
 .../user_has_voice_queue.spec.js                   |   20 +
 server/api/variable/index.js                       |   18 +
 server/api/variable/variable.controller.js         |  220 +
 server/api/variable/variable.socket.js             |   24 +
 server/api/variable/variable.spec.js               |   20 +
 server/api/voice_context/index.js                  |   16 +
 server/api/voice_context/voice_context.ami.js      |   71 +
 .../api/voice_context/voice_context.controller.js  |  282 +
 server/api/voice_context/voice_context.socket.js   |   24 +
 server/api/voice_context/voice_context.spec.js     |   20 +
 server/api/voice_extension/index.js                |   22 +
 .../voice_extension/voice_extension.controller.js  | 1382 +
 .../api/voice_extension/voice_extension.socket.js  |   34 +
 server/api/voice_extension/voice_extension.spec.js |   20 +
 server/api/voice_musiconhold/index.js              |   21 +
 .../voice_musiconhold.controller.js                |  357 +
 .../voice_musiconhold/voice_musiconhold.socket.js  |   24 +
 .../voice_musiconhold/voice_musiconhold.spec.js    |   20 +
 server/api/voice_queue/index.js                    |   19 +
 server/api/voice_queue/voice_queue.controller.js   |  339 +
 server/api/voice_queue/voice_queue.socket.js       |   24 +
 server/api/voice_queue/voice_queue.spec.js         |   20 +
 server/api/voice_voicemail/index.js                |   21 +
 .../voice_voicemail/voice_voicemail.controller.js  |  298 +
 .../api/voice_voicemail/voice_voicemail.socket.js  |   39 +
 server/api/voice_voicemail/voice_voicemail.spec.js |   20 +
 server/api/widget/index.js                         |   19 +
 server/api/widget/widget.controller.js             |  181 +
 server/api/widget/widget.spec.js                   |   20 +
 server/api/xchatty/index.js                        |   29 +
 server/api/xchatty/xchatty.controller.js           |  548 +
 server/api/xchatty/xchatty.socket.js               |   24 +
 server/api/xchatty/xchatty.spec.js                 |   20 +
 server/api/zendesk_account/index.js                |   19 +
 .../zendesk_account/zendesk_account.controller.js  |  225 +
 .../api/zendesk_account/zendesk_account.socket.js  |   24 +
 server/api/zendesk_account/zendesk_account.spec.js |   20 +
 server/api/zendesk_configuration/index.js          |   16 +
 .../zendesk_configuration.controller.js            |  129 +
 .../zendesk_configuration.socket.js                |   24 +
 .../zendesk_configuration.spec.js                  |   20 +
 server/api/zendesk_field/index.js                  |   18 +
 .../api/zendesk_field/zendesk_field.controller.js  |  121 +
 server/api/zendesk_field/zendesk_field.socket.js   |   24 +
 server/api/zendesk_field/zendesk_field.spec.js     |   20 +
 server/api/zendesk_text/index.js                   |   15 +
 server/api/zendesk_text/zendesk_text.controller.js |   93 +
 server/api/zendesk_text/zendesk_text.socket.js     |   24 +
 server/api/zendesk_text/zendesk_text.spec.js       |   20 +
 server/app.js                                      |  177 +
 server/auth/auth.service.js                        |   90 +
 server/auth/facebook/index.js                      |   21 +
 server/auth/facebook/passport.js                   |   37 +
 server/auth/google/index.js                        |   24 +
 server/auth/google/passport.js                     |   33 +
 server/auth/index.js                               |   22 +
 server/auth/local/index.js                         |   92 +
 server/auth/local/local.ami.js                     |   51 +
 server/auth/local/passport.js                      |   96 +
 server/auth/twitter/index.js                       |   20 +
 server/auth/twitter/passport.js                    |   35 +
 server/components/errors/index.js                  |   20 +
 .../xchatty/assets/common/in_progress.gif          |  Bin 0 -> 404 bytes
 .../components/xchatty/assets/common/loading.gif   |  Bin 0 -> 673 bytes
 .../assets/common/logo-clientengage-large.png      |  Bin 0 -> 12368 bytes
 .../xchatty/assets/common/logo-clientengage.png    |  Bin 0 -> 2177 bytes
 server/components/xchatty/assets/icons/accept.png  |  Bin 0 -> 781 bytes
 server/components/xchatty/assets/icons/add.png     |  Bin 0 -> 733 bytes
 .../xchatty/assets/icons/arrow_refresh.png         |  Bin 0 -> 685 bytes
 server/components/xchatty/assets/icons/attach.png  |  Bin 0 -> 391 bytes
 server/components/xchatty/assets/icons/bell.png    |  Bin 0 -> 789 bytes
 .../components/xchatty/assets/icons/bin_closed.png |  Bin 0 -> 363 bytes
 .../xchatty/assets/icons/bullet_arrow_down.png     |  Bin 0 -> 201 bytes
 .../xchatty/assets/icons/bullet_arrow_up.png       |  Bin 0 -> 201 bytes
 .../xchatty/assets/icons/bullet_green.png          |  Bin 0 -> 295 bytes
 .../components/xchatty/assets/icons/bullet_red.png |  Bin 0 -> 287 bytes
 .../xchatty/assets/icons/bullet_star.png           |  Bin 0 -> 331 bytes
 .../xchatty/assets/icons/bullet_toggle_minus.png   |  Bin 0 -> 207 bytes
 .../xchatty/assets/icons/bullet_toggle_plus.png    |  Bin 0 -> 209 bytes
 server/components/xchatty/assets/icons/cancel.png  |  Bin 0 -> 587 bytes
 .../xchatty/assets/icons/chart_curve.png           |  Bin 0 -> 710 bytes
 server/components/xchatty/assets/icons/clock.png   |  Bin 0 -> 882 bytes
 server/components/xchatty/assets/icons/cog.png     |  Bin 0 -> 512 bytes
 server/components/xchatty/assets/icons/comment.png |  Bin 0 -> 413 bytes
 .../xchatty/assets/icons/comment_add.png           |  Bin 0 -> 530 bytes
 .../xchatty/assets/icons/comments_add.png          |  Bin 0 -> 648 bytes
 .../xchatty/assets/icons/control_pause.png         |  Bin 0 -> 598 bytes
 .../xchatty/assets/icons/database_key.png          |  Bin 0 -> 764 bytes
 server/components/xchatty/assets/icons/date.png    |  Bin 0 -> 626 bytes
 .../components/xchatty/assets/icons/date_next.png  |  Bin 0 -> 688 bytes
 .../xchatty/assets/icons/date_previous.png         |  Bin 0 -> 720 bytes
 server/components/xchatty/assets/icons/delete.png  |  Bin 0 -> 715 bytes
 server/components/xchatty/assets/icons/disk.png    |  Bin 0 -> 620 bytes
 .../components/xchatty/assets/icons/door_out.png   |  Bin 0 -> 688 bytes
 server/components/xchatty/assets/icons/email.png   |  Bin 0 -> 641 bytes
 server/components/xchatty/assets/icons/error.png   |  Bin 0 -> 666 bytes
 .../xchatty/assets/icons/exclamation.png           |  Bin 0 -> 701 bytes
 server/components/xchatty/assets/icons/eye.png     |  Bin 0 -> 750 bytes
 server/components/xchatty/assets/icons/film.png    |  Bin 0 -> 653 bytes
 .../components/xchatty/assets/icons/folder_go.png  |  Bin 0 -> 694 bytes
 .../xchatty/assets/icons/folder_user.png           |  Bin 0 -> 730 bytes
 .../xchatty/assets/icons/folder_wrench.png         |  Bin 0 -> 740 bytes
 server/components/xchatty/assets/icons/group.png   |  Bin 0 -> 753 bytes
 server/components/xchatty/assets/icons/help.png    |  Bin 0 -> 786 bytes
 .../xchatty/assets/icons/information.png           |  Bin 0 -> 778 bytes
 server/components/xchatty/assets/icons/key.png     |  Bin 0 -> 612 bytes
 server/components/xchatty/assets/icons/layout.png  |  Bin 0 -> 480 bytes
 .../xchatty/assets/icons/layout_content.png        |  Bin 0 -> 519 bytes
 .../xchatty/assets/icons/layout_link.png           |  Bin 0 -> 660 bytes
 .../components/xchatty/assets/icons/lightning.png  |  Bin 0 -> 634 bytes
 server/components/xchatty/assets/icons/link_go.png |  Bin 0 -> 655 bytes
 server/components/xchatty/assets/icons/lock.png    |  Bin 0 -> 749 bytes
 .../components/xchatty/assets/icons/magnifier.png  |  Bin 0 -> 615 bytes
 server/components/xchatty/assets/icons/music.png   |  Bin 0 -> 385 bytes
 server/components/xchatty/assets/icons/new.png     |  Bin 0 -> 378 bytes
 .../components/xchatty/assets/icons/page_white.png |  Bin 0 -> 294 bytes
 .../xchatty/assets/icons/page_white_acrobat.png    |  Bin 0 -> 591 bytes
 .../xchatty/assets/icons/page_white_camera.png     |  Bin 0 -> 656 bytes
 .../xchatty/assets/icons/page_white_compressed.png |  Bin 0 -> 724 bytes
 .../xchatty/assets/icons/page_white_excel.png      |  Bin 0 -> 663 bytes
 .../xchatty/assets/icons/page_white_picture.png    |  Bin 0 -> 650 bytes
 .../xchatty/assets/icons/page_white_powerpoint.png |  Bin 0 -> 588 bytes
 .../xchatty/assets/icons/page_white_text.png       |  Bin 0 -> 342 bytes
 .../xchatty/assets/icons/page_white_word.png       |  Bin 0 -> 651 bytes
 server/components/xchatty/assets/icons/pencil.png  |  Bin 0 -> 450 bytes
 server/components/xchatty/assets/icons/readme.txt  |   22 +
 server/components/xchatty/assets/icons/report.png  |  Bin 0 -> 649 bytes
 .../components/xchatty/assets/icons/report_add.png |  Bin 0 -> 714 bytes
 .../components/xchatty/assets/icons/report_go.png  |  Bin 0 -> 756 bytes
 .../xchatty/assets/icons/script_code.png           |  Bin 0 -> 859 bytes
 server/components/xchatty/assets/icons/star.png    |  Bin 0 -> 670 bytes
 server/components/xchatty/assets/icons/table.png   |  Bin 0 -> 566 bytes
 .../components/xchatty/assets/icons/table_gear.png |  Bin 0 -> 714 bytes
 .../components/xchatty/assets/icons/table_go.png   |  Bin 0 -> 683 bytes
 .../xchatty/assets/icons/textfield_delete.png      |  Bin 0 -> 335 bytes
 server/components/xchatty/assets/icons/tick.png    |  Bin 0 -> 537 bytes
 server/components/xchatty/assets/icons/time.png    |  Bin 0 -> 793 bytes
 .../xchatty/assets/icons/timeline_marker.png       |  Bin 0 -> 327 bytes
 server/components/xchatty/assets/icons/vcard.png   |  Bin 0 -> 533 bytes
 .../xchatty/assets/icons/wrench_orange.png         |  Bin 0 -> 584 bytes
 .../xchatty/assets/images/bullet_clock.png         |  Bin 0 -> 413 bytes
 .../xchatty/assets/images/bullet_pencil.png        |  Bin 0 -> 458 bytes
 .../xchatty/assets/images/bullet_tick.png          |  Bin 0 -> 252 bytes
 .../xchatty/assets/images/icon_visitorchat.png     |  Bin 0 -> 432 bytes
 .../components/xchatty/assets/images/loading.gif   |  Bin 0 -> 2906 bytes
 server/components/xchatty/assets/js/jquery.min.js  |    5 +
 .../xchatty/assets/notification/xc_blubb.mp3       |  Bin 0 -> 5913 bytes
 .../xchatty/assets/notification/xc_blubb.ogg       |  Bin 0 -> 9616 bytes
 .../xchatty/assets/notification/xc_blubb.wav       |  Bin 0 -> 53294 bytes
 .../components/xchatty/assets/smilies/biggrin.png  |  Bin 0 -> 1983 bytes
 .../components/xchatty/assets/smilies/confused.png |  Bin 0 -> 1988 bytes
 server/components/xchatty/assets/smilies/cool.png  |  Bin 0 -> 1942 bytes
 server/components/xchatty/assets/smilies/cry.png   |  Bin 0 -> 2058 bytes
 server/components/xchatty/assets/smilies/eek.png   |  Bin 0 -> 1722 bytes
 server/components/xchatty/assets/smilies/evil.png  |  Bin 0 -> 1999 bytes
 server/components/xchatty/assets/smilies/like.png  |  Bin 0 -> 1894 bytes
 server/components/xchatty/assets/smilies/lol.png   |  Bin 0 -> 1993 bytes
 server/components/xchatty/assets/smilies/love.png  |  Bin 0 -> 1963 bytes
 server/components/xchatty/assets/smilies/mad.png   |  Bin 0 -> 1985 bytes
 .../components/xchatty/assets/smilies/mrgreen.png  |  Bin 0 -> 1965 bytes
 .../components/xchatty/assets/smilies/neutral.png  |  Bin 0 -> 1977 bytes
 .../components/xchatty/assets/smilies/question.png |  Bin 0 -> 1956 bytes
 server/components/xchatty/assets/smilies/razz.png  |  Bin 0 -> 1982 bytes
 .../components/xchatty/assets/smilies/redface.png  |  Bin 0 -> 1890 bytes
 .../components/xchatty/assets/smilies/rolleyes.png |  Bin 0 -> 1976 bytes
 server/components/xchatty/assets/smilies/sad.png   |  Bin 0 -> 1987 bytes
 server/components/xchatty/assets/smilies/smile.png |  Bin 0 -> 1984 bytes
 .../xchatty/assets/smilies/surprised.png           |  Bin 0 -> 1976 bytes
 .../xchatty/assets/smilies/thumbdown.png           |  Bin 0 -> 1693 bytes
 .../components/xchatty/assets/smilies/thumbup.png  |  Bin 0 -> 1680 bytes
 .../components/xchatty/assets/smilies/twisted.png  |  Bin 0 -> 1985 bytes
 server/components/xchatty/assets/smilies/wink.png  |  Bin 0 -> 1989 bytes
 .../styles/backgrounds/vc_background_black.png     |  Bin 0 -> 4379 bytes
 .../styles/backgrounds/vc_background_blue.png      |  Bin 0 -> 3746 bytes
 .../styles/backgrounds/vc_background_green.png     |  Bin 0 -> 3701 bytes
 .../styles/backgrounds/vc_background_red.png       |  Bin 0 -> 3712 bytes
 .../components/xchatty/assets/styles/loading.gif   |  Bin 0 -> 579 bytes
 server/components/xchatty/index.js                 |   14 +
 server/components/xchatty/snippet.html             |   12 +
 server/components/xchatty/xchatty.css              |  495 +
 server/components/xchatty/xchatty.js               | 1455 +
 server/config/agi.js                               | 1175 +
 server/config/agi_scripts/googletts.agi            |  315 +
 server/config/agi_scripts/ispeech-asr.agi          |  317 +
 server/config/agi_scripts/ispeech-tts.agi          |  252 +
 server/config/ami/acw.js                           |  118 +
 server/config/ami/agent.js                         |   95 +
 server/config/ami/call.js                          |   21 +
 server/config/ami/dial.js                          |   41 +
 server/config/ami/index.js                         |  171 +
 server/config/ami/member.js                        |  106 +
 server/config/ami/queue_caller.js                  |   57 +
 server/config/ami/queue_member.js                  |   59 +
 server/config/autodialer/index.js                  |  125 +
 server/config/autodialer/process.js                |   26 +
 server/config/automations/fax.js                   |  171 +
 server/config/automations/mail.js                  |  171 +
 server/config/environment/config.json              |   26 +
 server/config/environment/development.js           |   18 +
 server/config/environment/index.js                 |   80 +
 server/config/environment/production.js            |   22 +
 server/config/environment/test.js                  |   16 +
 server/config/express.js                           |   72 +
 server/config/fax.js                               |  240 +
 server/config/history.js                           |  234 +
 server/config/imap.js                              |  387 +
 server/config/integration.js                       |   24 +
 server/config/kue.chat.js                          |  559 +
 server/config/kue.fax.js                           |  316 +
 server/config/kue.mail.js                          |  501 +
 server/config/local.env.sample.js                  |   23 +
 server/config/logger.js                            |  120 +
 server/config/seed.js                              | 1073 +
 server/config/smtp.js                              |  349 +
 server/config/socketio.js                          |  174 +
 server/config/triggers/mail.js                     |  156 +
 server/files/asterisk/sip_xcally_contexts.conf     |    8 +
 server/files/asterisk/sip_xcally_trunks.conf       |   24 +
 server/files/geoip/17monipdb.dat                   |  Bin 0 -> 1556587 bytes
 server/files/geoip/IP.class.php                    |  109 +
 server/files/geoip/readme.txt                      |  232 +
 server/files/images/avatar5.png                    |  Bin 0 -> 106631 bytes
 server/files/images/customer.png                   |  Bin 0 -> 2016 bytes
 server/files/images/userpic.png                    |  Bin 0 -> 26191 bytes
 server/files/images/userpic.png.old.png            |  Bin 0 -> 64555 bytes
 server/files/integrations/zendesk/app.js           |    5 +
 server/files/integrations/zendesk/manifest.json    |    6 +
 server/files/sounds/converted/8dml2nHgdylpQdAb.wav |  Bin 0 -> 658604 bytes
 server/files/sounds/converted/DqcAGJTcbebQu5PW.wav |  Bin 0 -> 658604 bytes
 server/files/sounds/original/8dml2nHgdylpQdAb.wav  |  Bin 0 -> 658604 bytes
 server/files/sounds/original/DqcAGJTcbebQu5PW.wav  |  Bin 0 -> 658604 bytes
 server/migrations/20151202190300-test.js           |   34 +
 server/models/asterisk_manager.js                  |   19 +
 server/models/asterisk_manager_interface.js        |   24 +
 server/models/autodialer_contact.js                |   15 +
 server/models/autodialer_process.js                |   53 +
 server/models/automation.js                        |   24 +
 server/models/business_action.js                   |   29 +
 server/models/business_condition.js                |   35 +
 server/models/channel.js                           |   46 +
 server/models/chat_application.js                  |   30 +
 server/models/chat_enquiry.js                      |   22 +
 server/models/chat_message.js                      |   29 +
 server/models/chat_queue.js                        |   30 +
 server/models/chat_room.js                         |   38 +
 server/models/chat_visitor.js                      |   40 +
 server/models/chat_website.js                      |   87 +
 server/models/contact.js                           |   23 +
 server/models/dashboard.js                         |   62 +
 server/models/event.js                             |   45 +
 server/models/fax_account.js                       |   40 +
 server/models/fax_application.js                   |   33 +
 server/models/fax_business_automation.js           |   32 +
 server/models/fax_message.js                       |   63 +
 server/models/fax_queue.js                         |   32 +
 server/models/fax_room.js                          |   25 +
 server/models/history/report_agent_history.js      |   67 +
 server/models/history/report_call_history.js       |   41 +
 server/models/history/report_dial_history.js       |   42 +
 server/models/history/report_member_history.js     |   23 +
 server/models/history/report_queue_history.js      |   39 +
 server/models/index.js                             |   67 +
 server/models/integration.js                       |   55 +
 server/models/interval.js                          |  661 +
 server/models/mail_account.js                      |   32 +
 server/models/mail_application.js                  |   30 +
 server/models/mail_attachment.js                   |   30 +
 server/models/mail_automation.js                   |   23 +
 server/models/mail_business_automation.js          |   32 +
 server/models/mail_message.js                      |   53 +
 server/models/mail_queue.js                        |   30 +
 server/models/mail_room.js                         |   32 +
 server/models/mail_server_in.js                    |   45 +
 server/models/mail_server_out.js                   |   26 +
 server/models/mail_template.js                     |   24 +
 server/models/mail_trigger.js                      |   23 +
 server/models/module.js                            |   27 +
 server/models/motionbar.js                         |   32 +
 server/models/report_agent.js                      |   71 +
 server/models/report_call.js                       |   40 +
 server/models/report_chat.js                       |   48 +
 server/models/report_chat_session.js               |   32 +
 server/models/report_dial.js                       |   44 +
 server/models/report_mail.js                       |   47 +
 server/models/report_mail_session.js               |   31 +
 server/models/report_member.js                     |   25 +
 server/models/report_queue.js                      |   41 +
 server/models/report_square.js                     |   89 +
 server/models/report_square_detail.js              |   25 +
 server/models/settings.js                          |   52 +
 server/models/square_odbc.js                       |   23 +
 server/models/square_project.js                    |   28 +
 server/models/team.js                              |   32 +
 server/models/trigger.js                           |   24 +
 server/models/trunk.js                             |  341 +
 server/models/upload.js                            |   38 +
 server/models/user.js                              |  575 +
 server/models/user_has_chat_queue.js               |   14 +
 server/models/user_has_chat_room.js                |   19 +
 server/models/user_has_fax_queue.js                |   14 +
 server/models/user_has_mail_queue.js               |   14 +
 server/models/user_has_team.js                     |   14 +
 server/models/user_has_voice_queue.js              |  116 +
 server/models/variable.js                          |   23 +
 server/models/voice_context.js                     |   25 +
 server/models/voice_extension.js                   |  164 +
 server/models/voice_musiconhold.js                 |   64 +
 server/models/voice_queue.js                       |  294 +
 server/models/voice_voicemail.js                   |  144 +
 server/models/voice_voicemail_messages.js          |   67 +
 server/models/zendesk_account.js                   |   32 +
 server/models/zendesk_configuration.js             |   20 +
 server/models/zendesk_field.js                     |   18 +
 server/models/zendesk_text.js                      |   20 +
 server/routes.js                                   |  122 +
 server/views/404.html                              |  157 +
 1170 files changed, 451007 insertions(+), 0 deletions(-)
 delete mode 100644 README.md
 create mode 100644 package.json
 create mode 100644 public/.htaccess
 create mode 100644 public/app/0e6d6720.vendor.js
 create mode 100644 public/app/16e12937.vendor.css
 create mode 100644 public/app/5c053d28.app.js
 create mode 100644 public/app/808268be.app.css
 create mode 100644 public/assets/css/common.css
 create mode 100644 public/assets/css/global/components.css
 create mode 100644 public/assets/css/global/custom-whirly.css
 create mode 100644 public/assets/css/global/custom.css
 create mode 100644 public/assets/css/global/darkblue.css
 create mode 100644 public/assets/css/global/google-open-sans.css
 create mode 100644 public/assets/css/global/layout.css
 create mode 100644 public/assets/css/global/plugins.css
 create mode 100644 public/assets/css/global/strap-docs.min.css
 create mode 100644 public/assets/css/global/strap.min.css
 create mode 100644 public/assets/css/inbox.css
 create mode 100644 public/assets/css/login-soft.css
 create mode 100644 public/assets/css/login.css
 create mode 100644 public/assets/css/portfolio.css
 create mode 100644 public/assets/css/profile-old.css
 create mode 100644 public/assets/css/profile.css
 create mode 100644 public/assets/css/smart_table.css
 create mode 100644 public/assets/css/tasks.css
 create mode 100644 public/assets/css/timeline.css
 create mode 100644 public/assets/css/todo.css
 create mode 100644 public/assets/fonts/FontAwesome.otf
 create mode 100644 public/assets/fonts/Simple-Line-Icons.eot
 create mode 100644 public/assets/fonts/Simple-Line-Icons.svg
 create mode 100644 public/assets/fonts/Simple-Line-Icons.ttf
 create mode 100644 public/assets/fonts/Simple-Line-Icons.woff
 create mode 100644 public/assets/fonts/Simple-Line-Icons.woff2
 create mode 100644 public/assets/fonts/fontawesome-webfont.eot
 create mode 100644 public/assets/fonts/fontawesome-webfont.svg
 create mode 100644 public/assets/fonts/fontawesome-webfont.ttf
 create mode 100644 public/assets/fonts/fontawesome-webfont.woff
 create mode 100644 public/assets/fonts/fontawesome-webfont.woff2
 create mode 100644 public/assets/fonts/glyphicons-halflings-regular.eot
 create mode 100644 public/assets/fonts/glyphicons-halflings-regular.svg
 create mode 100644 public/assets/fonts/glyphicons-halflings-regular.ttf
 create mode 100644 public/assets/fonts/glyphicons-halflings-regular.woff
 create mode 100644 public/assets/fonts/glyphicons-halflings-regular.woff2
 create mode 100644 public/assets/images/apple/apple-touch-icon-114x114-precomposed.png
 create mode 100644 public/assets/images/apple/apple-touch-icon-144x144-precomposed.png
 create mode 100644 public/assets/images/apple/apple-touch-icon-57x57-precomposed.png
 create mode 100644 public/assets/images/apple/apple-touch-icon-72x72-precomposed.png
 create mode 100644 public/assets/images/apple/apple-touch-icon-precomposed.png
 create mode 100644 public/assets/images/apple/apple-touch-icon.png
 create mode 100644 public/assets/images/apple/splash.png
 create mode 100644 public/assets/images/apple/splash2x.png
 create mode 100644 public/assets/images/avatars/avatar.png
 create mode 100644 public/assets/images/bg-white-lock.png
 create mode 100644 public/assets/images/browsers/chrome/chrome_16x16.png
 create mode 100644 public/assets/images/browsers/firefox/firefox_16x16.png
 create mode 100644 public/assets/images/browsers/internet-explorer/internet-explorer_16x16.png
 create mode 100644 public/assets/images/browsers/safari/safari_16x16.png
 create mode 100644 public/assets/images/clarotech_original.jpg
 create mode 100644 public/assets/images/flags/en_EN.png
 create mode 100644 public/assets/images/flags/it.png
 create mode 100644 public/assets/images/flags/us.png
 create mode 100644 public/assets/images/icon-color-close.png
 create mode 100644 public/assets/images/icon-color.png
 create mode 100644 public/assets/images/icons/facebook.png
 create mode 100644 public/assets/images/icons/github.png
 create mode 100644 public/assets/images/icons/google.png
 create mode 100644 public/assets/images/icons/twitter.png
 create mode 100644 public/assets/images/loaders/loader.gif
 create mode 100644 public/assets/images/loading-spinner-blue.gif
 create mode 100644 public/assets/images/loading-spinner-grey.gif
 create mode 100644 public/assets/images/loading.gif
 create mode 100644 public/assets/images/logo-big.png
 create mode 100644 public/assets/images/logo.png
 create mode 100644 public/assets/images/mCSB_buttons.png
 create mode 100644 public/assets/images/media/account.png
 create mode 100644 public/assets/images/media/automation.png
 create mode 100644 public/assets/images/media/channels/chat64.png
 create mode 100644 public/assets/images/media/channels/mail64.png
 create mode 100644 public/assets/images/media/channels/screen_monitor_64.png
 create mode 100644 public/assets/images/media/channels/telephone124.png
 create mode 100644 public/assets/images/media/context.png
 create mode 100644 public/assets/images/media/dashboard.png
 create mode 100644 public/assets/images/media/inboundroute.png
 create mode 100644 public/assets/images/media/internalroute.png
 create mode 100644 public/assets/images/media/interval.png
 create mode 100644 public/assets/images/media/moh.png
 create mode 100644 public/assets/images/media/no-pic.png
 create mode 100644 public/assets/images/media/odbc.png
 create mode 100644 public/assets/images/media/outboundroute.png
 create mode 100644 public/assets/images/media/queue.png
 create mode 100644 public/assets/images/media/realtime.png
 create mode 100644 public/assets/images/media/stage.png
 create mode 100644 public/assets/images/media/statistics.png
 create mode 100644 public/assets/images/media/team.png
 create mode 100644 public/assets/images/media/template.png
 create mode 100644 public/assets/images/media/trigger.png
 create mode 100644 public/assets/images/media/trunk.png
 create mode 100644 public/assets/images/media/variable.png
 create mode 100644 public/assets/images/media/voicemail.png
 create mode 100644 public/assets/images/media/website.png
 create mode 100644 public/assets/images/media/zendesk.png
 create mode 100644 public/assets/images/note_placeholder.png
 create mode 100644 public/assets/images/portlet-collapse-icon-white.png
 create mode 100644 public/assets/images/portlet-collapse-icon.png
 create mode 100644 public/assets/images/portlet-config-icon-white.png
 create mode 100644 public/assets/images/portlet-config-icon.png
 create mode 100644 public/assets/images/portlet-expand-icon.png
 create mode 100644 public/assets/images/portlet-reload-icon-white.png
 create mode 100644 public/assets/images/portlet-reload-icon.png
 create mode 100644 public/assets/images/portlet-remove-icon-white.png
 create mode 100644 public/assets/images/portlet-remove-icon.png
 create mode 100644 public/assets/images/preview_snippet.png
 create mode 100644 public/assets/images/profile_user.jpg
 create mode 100644 public/assets/images/remove-icon-small.png
 create mode 100644 public/assets/images/sidebar_inline_toggler_icon_darkblue.jpg
 create mode 100644 public/assets/images/sidebar_toggler_icon_darkblue.png
 create mode 100644 public/assets/images/social/facebook.png
 create mode 100644 public/assets/images/social/googleplus.png
 create mode 100644 public/assets/images/social/linkedin.png
 create mode 100644 public/assets/images/social/twitter.png
 create mode 100644 public/assets/images/social/youtube.png
 create mode 100644 public/assets/images/sort_asc.png
 create mode 100644 public/assets/images/sort_desc.png
 create mode 100644 public/assets/images/sprites/glyphicons-halflings-white.png
 create mode 100644 public/assets/images/sprites/glyphicons-halflings.png
 create mode 100644 public/assets/images/syncfusion-icons-white.png
 create mode 100644 public/assets/images/syncfusion-icons.png
 create mode 100644 public/assets/images/xcally.png
 create mode 100644 public/assets/languages/locale-en_EN.json
 create mode 100644 public/assets/languages/locale-it.json
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/.bower.json
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/LICENSE.md
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/README.md
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/bower.json
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/dist/angular-elastic-builder.js
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/dist/angular-elastic-builder.min.js
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/examples/index.html
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/examples/index.js
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/examples/js/exampleApp.js
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/gulpfile.js
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/package.json
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/screenshot.png
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/directives/BuilderDirective.js
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/directives/Chooser.js
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/directives/Group.js
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/directives/Rule.js
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/directives/RuleTypes.js
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/module.js
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/services/GroupClassHelper.js
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/services/QueryService.js
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/tmpl/BuilderDirective.html
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/tmpl/ChooserDirective.html
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/tmpl/ElasticBuilderTemplates.js
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/tmpl/GroupDirective.html
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/tmpl/RuleDirective.html
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Boolean.html
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Date.html
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Multi.html
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Number.html
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Select.html
 create mode 100644 public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Term.html
 create mode 100644 public/assets/plugins/angular-elastic-builder/.bower.json
 create mode 100644 public/assets/plugins/angular-elastic-builder/LICENSE.md
 create mode 100644 public/assets/plugins/angular-elastic-builder/README.md
 create mode 100644 public/assets/plugins/angular-elastic-builder/bower.json
 create mode 100644 public/assets/plugins/angular-elastic-builder/dist/angular-elastic-builder.js
 create mode 100644 public/assets/plugins/angular-elastic-builder/dist/angular-elastic-builder.min.js
 create mode 100644 public/assets/plugins/angular-elastic-builder/dist/angular-elastic-builder_old.js
 create mode 100644 public/assets/plugins/angular-elastic-builder/examples/index.html
 create mode 100644 public/assets/plugins/angular-elastic-builder/examples/index.js
 create mode 100644 public/assets/plugins/angular-elastic-builder/examples/js/exampleApp.js
 create mode 100644 public/assets/plugins/angular-elastic-builder/gulpfile.js
 create mode 100644 public/assets/plugins/angular-elastic-builder/package.json
 create mode 100644 public/assets/plugins/angular-elastic-builder/screenshot.png
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/directives/BuilderDirective.js
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/directives/Chooser.js
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/directives/Group.js
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/directives/Rule.js
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/directives/RuleTypes.js
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/module.js
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/services/GroupClassHelper.js
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/services/QueryService.js
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/tmpl/BuilderDirective.html
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/tmpl/ChooserDirective.html
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/tmpl/ElasticBuilderTemplates.js
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/tmpl/GroupDirective.html
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/tmpl/RuleDirective.html
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/tmpl/types/Boolean.html
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/tmpl/types/Date.html
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/tmpl/types/Multi.html
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/tmpl/types/Multiterm.html
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/tmpl/types/Number.html
 create mode 100644 public/assets/plugins/angular-elastic-builder/src/tmpl/types/Term.html
 create mode 100644 public/assets/plugins/angular-pdf/.bower.json
 create mode 100644 public/assets/plugins/angular-pdf/CONTRIBUTING.md
 create mode 100644 public/assets/plugins/angular-pdf/Gruntfile.js
 create mode 100644 public/assets/plugins/angular-pdf/LICENSE
 create mode 100644 public/assets/plugins/angular-pdf/bower.json
 create mode 100644 public/assets/plugins/angular-pdf/dist/angular-pdf.js
 create mode 100644 public/assets/plugins/angular-pdf/dist/angular-pdf.min.js
 create mode 100644 public/assets/plugins/angular-pdf/example/index.html
 create mode 100644 public/assets/plugins/angular-pdf/example/js/controllers/docCtrl.js
 create mode 100644 public/assets/plugins/angular-pdf/example/js/directives/angular-pdf.js
 create mode 100644 public/assets/plugins/angular-pdf/example/js/lib/angular.min.js
 create mode 100644 public/assets/plugins/angular-pdf/example/js/lib/angular.min.js.map
 create mode 100644 public/assets/plugins/angular-pdf/example/js/lib/pdf.js
 create mode 100644 public/assets/plugins/angular-pdf/example/js/lib/pdf.worker.js
 create mode 100644 public/assets/plugins/angular-pdf/example/partials/viewer.html
 create mode 100644 public/assets/plugins/angular-pdf/example/pdf/4e99fa5a-1d29-4bf8-a083-48ab91f9a623.pdf
 create mode 100644 public/assets/plugins/angular-pdf/example/pdf/relativity.pdf
 create mode 100644 public/assets/plugins/angular-pdf/example/style.css
 create mode 100644 public/assets/plugins/angular-pdf/ng-pdf.gif
 create mode 100644 public/assets/plugins/angular-pdf/readme.md
 create mode 100644 public/assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css
 create mode 100644 public/assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js
 create mode 100644 public/assets/plugins/jquery-multi-select/LICENSE.txt
 create mode 100644 public/assets/plugins/jquery-multi-select/README.markdown
 create mode 100644 public/assets/plugins/jquery-multi-select/css/multi-select.css
 create mode 100644 public/assets/plugins/jquery-multi-select/img/switch.png
 create mode 100644 public/assets/plugins/jquery-multi-select/img/switch_original.png
 create mode 100644 public/assets/plugins/jquery-multi-select/js/jquery.multi-select.js
 create mode 100644 public/assets/plugins/jquery.sparkline.min.js
 create mode 100644 public/assets/plugins/mxgraph/css/common.css
 create mode 100644 public/assets/plugins/mxgraph/css/explorer.css
 create mode 100644 public/assets/plugins/mxgraph/images/1x1.png
 create mode 100644 public/assets/plugins/mxgraph/images/checkmark.gif
 create mode 100644 public/assets/plugins/mxgraph/images/clear.gif
 create mode 100644 public/assets/plugins/mxgraph/images/close.png
 create mode 100644 public/assets/plugins/mxgraph/images/collapsed.gif
 create mode 100644 public/assets/plugins/mxgraph/images/connector.png
 create mode 100644 public/assets/plugins/mxgraph/images/expanded.gif
 create mode 100644 public/assets/plugins/mxgraph/images/google-drive-20x20.png
 create mode 100644 public/assets/plugins/mxgraph/images/grid.gif
 create mode 100644 public/assets/plugins/mxgraph/images/logo-small.gif
 create mode 100644 public/assets/plugins/mxgraph/images/logo.png
 create mode 100644 public/assets/plugins/mxgraph/images/nocolor.png
 create mode 100644 public/assets/plugins/mxgraph/images/submenu.gif
 create mode 100644 public/assets/plugins/mxgraph/images/tooltip.png
 create mode 100644 public/assets/plugins/mxgraph/images/touch-connector.png
 create mode 100644 public/assets/plugins/mxgraph/images/touch-handle.png
 create mode 100644 public/assets/plugins/mxgraph/images/touch-submenu.png
 create mode 100644 public/assets/plugins/mxgraph/images/transparent.gif
 create mode 100644 public/assets/plugins/mxgraph/images/web/drawio-cloud-edit.png
 create mode 100644 public/assets/plugins/mxgraph/images/web/drawio-drive.png
 create mode 100644 public/assets/plugins/mxgraph/images/web/drawio-free-edit.png
 create mode 100644 public/assets/plugins/mxgraph/images/web/drawio-github.png
 create mode 100644 public/assets/plugins/mxgraph/images/web/drawio-menu.png
 create mode 100644 public/assets/plugins/mxgraph/images/web/drawio-puzzle-edit.png
 create mode 100644 public/assets/plugins/mxgraph/images/web/drawio-source-edit.png
 create mode 100644 public/assets/plugins/mxgraph/images/web/drawioscreen.png
 create mode 100644 public/assets/plugins/mxgraph/images/web/glyphicons_362_google+_alt.png
 create mode 100644 public/assets/plugins/mxgraph/images/web/glyphicons_381_github.png
 create mode 100644 public/assets/plugins/mxgraph/images/web/glyphicons_390_facebook.png
 create mode 100644 public/assets/plugins/mxgraph/images/web/glyphicons_392_twitter.png
 create mode 100644 public/assets/plugins/mxgraph/js/Actions.js
 create mode 100644 public/assets/plugins/mxgraph/js/Dialogs.js
 create mode 100644 public/assets/plugins/mxgraph/js/Editor.js
 create mode 100644 public/assets/plugins/mxgraph/js/EditorUi.js
 create mode 100644 public/assets/plugins/mxgraph/js/Graph.js
 create mode 100644 public/assets/plugins/mxgraph/js/Menus.js
 create mode 100644 public/assets/plugins/mxgraph/js/Shapes.js
 create mode 100644 public/assets/plugins/mxgraph/js/Sidebar.js
 create mode 100644 public/assets/plugins/mxgraph/js/Toolbar.js
 create mode 100644 public/assets/plugins/mxgraph/js/custom.js
 create mode 100644 public/assets/plugins/mxgraph/js/mxClient.js
 create mode 100644 public/assets/plugins/mxgraph/resources/dia.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_am.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_ar.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_bg.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_bn.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_bs.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_ca.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_cs.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_da.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_de.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_el.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_es-AR.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_es.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_et.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_fa.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_fi.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_fil.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_fr.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_gu.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_he.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_hi.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_hr.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_hu.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_id.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_it.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_ja.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_kn.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_ko.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_lt.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_lv.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_ml.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_mr.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_ms.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_nl.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_no.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_pl.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_pt-br.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_pt.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_ro.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_ru.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_sk.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_sl.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_sr.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_sv.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_sw.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_ta.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_te.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_th.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_tr.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_uk.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/dia_zh.txt
 create mode 100644 public/assets/plugins/mxgraph/resources/help_it.html
 create mode 100644 public/assets/plugins/mxgraph/stencils/call_management/answer_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/call_management/callback_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/call_management/dial_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/call_management/ext_dial_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/call_management/hangup_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/call_management/queue_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/call_management/voicemail_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/callflow/gotoc_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/callflow/gotoif_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/callflow/gotoifmultitime_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/callflow/gotoiftime_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/callflow/vswitch_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/entry/end_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/entry/finally_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/entry/start_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/general.xml
 create mode 100644 public/assets/plugins/mxgraph/stencils/general/agi_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/general/custom_app_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/general/noop_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/general/subproject_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/general/system_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/integration_server/asr_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/integration_server/database_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/integration_server/ispeechasr_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/playback/background_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/playback/getdigits_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/playback/ispeechtts_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/playback/menu_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/playback/playback_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/playback/saydigits_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/playback/saynumber_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/playback/sayphonetic_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/playback/tts_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/recording/record_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/stats/goal_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/stats/queuelog_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/variable/math_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/stencils/variable/set_128x128.png
 create mode 100644 public/assets/plugins/mxgraph/styles/custom.css
 create mode 100644 public/assets/plugins/mxgraph/styles/default-old.xml
 create mode 100644 public/assets/plugins/mxgraph/styles/default.xml
 create mode 100644 public/assets/plugins/mxgraph/styles/grapheditor-ie6.css
 create mode 100644 public/assets/plugins/mxgraph/styles/grapheditor.css
 create mode 100644 public/assets/plugins/mxgraph/styles/ie6.min.css
 create mode 100644 public/assets/plugins/mxgraph/styles/manual-colors.css
 create mode 100644 public/assets/plugins/mxgraph/styles/manual-styles.css
 create mode 100644 public/assets/plugins/mxgraph/styles/sprites.png
 create mode 100644 public/assets/plugins/mxgraph/styles/thumb_horz.png
 create mode 100644 public/assets/plugins/mxgraph/styles/thumb_vertical.png
 create mode 100644 public/assets/plugins/mxgraph/styles/web/bootstrap-extra.css
 create mode 100644 public/assets/plugins/mxgraph/styles/web/bootstrap-responsive.css
 create mode 100644 public/assets/plugins/mxgraph/styles/web/bootstrap-responsive.min.css
 create mode 100644 public/assets/plugins/mxgraph/styles/web/bootstrap.css
 create mode 100644 public/assets/plugins/mxgraph/styles/web/bootstrap.min.css
 create mode 100644 public/assets/plugins/mxgraph/styles/web/font-awesome/font-awesome-ie7.css
 create mode 100644 public/assets/plugins/mxgraph/styles/web/font-awesome/font-awesome.css
 create mode 100644 public/assets/plugins/mxgraph/styles/web/font-awesome/font/README.TXT
 create mode 100644 public/assets/plugins/mxgraph/styles/web/font-awesome/font/fontawesome-webfont.eot
 create mode 100644 public/assets/plugins/mxgraph/styles/web/font-awesome/font/fontawesome-webfont.svg
 create mode 100644 public/assets/plugins/mxgraph/styles/web/font-awesome/font/fontawesome-webfont.ttf
 create mode 100644 public/assets/plugins/mxgraph/styles/web/font-awesome/font/fontawesome-webfont.woff
 create mode 100644 public/assets/plugins/mxgraph/styles/web/static.min.css
 create mode 100644 public/assets/plugins/mxgraph/styles/web/static.uncompressed.css
 create mode 100644 public/assets/plugins/mxgraph/templates/images/aws1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/bpmn1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/compare1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/flowchart1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/flowchart2.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/gantt1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/lean1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/mindmap1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/orgchart1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/orgchart2.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/package1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/pid1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/plcladder1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/seqdiag1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/sitemap1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/socnet1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/stardelta.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/statemachine1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/uml1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/usecase1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/venn1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/images/wf1.png
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/aws1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/bpmn1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/compare1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/flowchart1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/flowchart2.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/gantt1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/lean1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/mindmap1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/orgchart1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/orgchart2.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/package1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/pid1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/plcladder1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/seqdiag1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/sitemap1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/socnet1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/stardelta.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/statemachine1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/uml1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/usecase1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/venn1.xml
 create mode 100644 public/assets/plugins/mxgraph/templates/xml/wf1.xml
 create mode 100644 public/assets/plugins/ui-select/select.min.css
 create mode 100644 public/assets/plugins/ui-select/select.min.js
 create mode 100644 public/assets/scripts/charts-flotcharts.js
 create mode 100644 public/assets/scripts/components-dropdowns.js
 create mode 100644 public/assets/scripts/datatable.js
 create mode 100644 public/assets/scripts/form-wizard-agent.js
 create mode 100644 public/assets/scripts/global/layout.js
 create mode 100644 public/assets/scripts/global/metronic.js
 create mode 100644 public/assets/scripts/inbox-fax.js
 create mode 100644 public/assets/scripts/inbox.js
 create mode 100644 public/assets/scripts/index.js
 create mode 100644 public/assets/scripts/jquery-ui-1.10.3.custom.min.js
 create mode 100644 public/assets/scripts/jquery.cokie.min.js
 create mode 100644 public/assets/scripts/jquery.sparkline.min.js
 create mode 100644 public/assets/scripts/login-soft.js
 create mode 100644 public/assets/scripts/portfolio.js
 create mode 100644 public/assets/scripts/profile.js
 create mode 100644 public/assets/scripts/table-ajax.js
 create mode 100644 public/assets/scripts/tasks.js
 create mode 100644 public/bower_components/Chart.js/Chart.js
 create mode 100644 public/bower_components/Sortable/Sortable.js
 create mode 100644 public/bower_components/Sortable/knockout-sortable.js
 create mode 100644 public/bower_components/Sortable/ng-sortable.js
 create mode 100644 public/bower_components/Sortable/react-sortable-mixin.js
 create mode 100644 public/bower_components/adf-structures-base/adf-structures-base.js
 create mode 100644 public/bower_components/adf-widget-clock/adf-widget-clock.css
 create mode 100644 public/bower_components/adf-widget-clock/adf-widget-clock.js
 create mode 100644 public/bower_components/adf-widget-iframe/adf-widget-iframe.css
 create mode 100644 public/bower_components/adf-widget-iframe/adf-widget-iframe.js
 create mode 100644 public/bower_components/angular-animate/angular-animate.js
 create mode 100644 public/bower_components/angular-audio/angular.audio.js
 create mode 100644 public/bower_components/angular-bootstrap-colorpicker/bootstrap-colorpicker-module.js
 create mode 100644 public/bower_components/angular-bootstrap-colorpicker/colorpicker.css
 create mode 100644 public/bower_components/angular-bootstrap-contextmenu/contextMenu.js
 create mode 100644 public/bower_components/angular-bootstrap-switch/angular-bootstrap-switch.js
 create mode 100644 public/bower_components/angular-bootstrap/ui-bootstrap-tpls.js
 create mode 100644 public/bower_components/angular-chart.js/angular-chart.css
 create mode 100644 public/bower_components/angular-chart.js/angular-chart.js
 create mode 100644 public/bower_components/angular-cookies/angular-cookies.js
 create mode 100644 public/bower_components/angular-dashboard-framework/angular-dashboard-framework.css
 create mode 100644 public/bower_components/angular-dashboard-framework/angular-dashboard-framework.js
 create mode 100644 public/bower_components/angular-file-upload/angular-file-upload.min.js
 create mode 100644 public/bower_components/angular-filter/angular-filter.min.js
 create mode 100644 public/bower_components/angular-local-storage/angular-local-storage.js
 create mode 100644 public/bower_components/angular-md5/angular-md5.js
 create mode 100644 public/bower_components/angular-mocks/angular-mocks.js
 create mode 100644 public/bower_components/angular-notification/angular-notification.js
 create mode 100644 public/bower_components/angular-resource/angular-resource.js
 create mode 100644 public/bower_components/angular-sanitize/angular-sanitize.js
 create mode 100644 public/bower_components/angular-scenario/angular-scenario.js
 create mode 100644 public/bower_components/angular-smart-table/smart-table.js
 create mode 100644 public/bower_components/angular-socket-io/socket.js
 create mode 100644 public/bower_components/angular-toastr/angular-toastr.css
 create mode 100644 public/bower_components/angular-toastr/angular-toastr.tpls.js
 create mode 100644 public/bower_components/angular-touch/angular-touch.js
 create mode 100644 public/bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.js
 create mode 100644 public/bower_components/angular-translate-storage-cookie/angular-translate-storage-cookie.js
 create mode 100644 public/bower_components/angular-translate-storage-local/angular-translate-storage-local.js
 create mode 100644 public/bower_components/angular-translate/angular-translate.js
 create mode 100644 public/bower_components/angular-truncate/truncate.js
 create mode 100644 public/bower_components/angular-ui-notification/angular-ui-notification.min.css
 create mode 100644 public/bower_components/angular-ui-notification/angular-ui-notification.min.js
 create mode 100644 public/bower_components/angular-ui-router/angular-ui-router.js
 create mode 100644 public/bower_components/angular-ui-sortable/sortable.js
 create mode 100644 public/bower_components/angular-wizard/angular-wizard.min.css
 create mode 100644 public/bower_components/angular-wizard/angular-wizard.min.js
 create mode 100644 public/bower_components/angular-xeditable/xeditable.css
 create mode 100644 public/bower_components/angular-xeditable/xeditable.js
 create mode 100644 public/bower_components/angular/angular.js
 create mode 100644 public/bower_components/animate.css/animate.css
 create mode 100644 public/bower_components/blockUI/jquery.blockUI.js
 create mode 100644 public/bower_components/bootstrap-hover-dropdown/bootstrap-hover-dropdown.js
 create mode 100644 public/bower_components/bootstrap-select/bootstrap-select.css
 create mode 100644 public/bower_components/bootstrap-select/bootstrap-select.js
 create mode 100644 public/bower_components/bootstrap-select/bootstrap-select.less
 create mode 100644 public/bower_components/bootstrap-switch/bootstrap-switch.css
 create mode 100644 public/bower_components/bootstrap-switch/bootstrap-switch.js
 create mode 100644 public/bower_components/bootstrap/bootstrap.js
 create mode 100644 public/bower_components/bootstrap/bootstrap.less
 create mode 100644 public/bower_components/checklist-model/checklist-model.js
 create mode 100644 public/bower_components/css-spinners/atebits.css
 create mode 100644 public/bower_components/css-spinners/ball.css
 create mode 100644 public/bower_components/css-spinners/circles.css
 create mode 100644 public/bower_components/css-spinners/dots.css
 create mode 100644 public/bower_components/css-spinners/flower.css
 create mode 100644 public/bower_components/css-spinners/gauge.css
 create mode 100644 public/bower_components/css-spinners/heartbeat.css
 create mode 100644 public/bower_components/css-spinners/hexdots.css
 create mode 100644 public/bower_components/css-spinners/hole-pulse.css
 create mode 100644 public/bower_components/css-spinners/inner-circles.css
 create mode 100644 public/bower_components/css-spinners/plus-loader.css
 create mode 100644 public/bower_components/css-spinners/plus.css
 create mode 100644 public/bower_components/css-spinners/pong.css
 create mode 100644 public/bower_components/css-spinners/pulse.css
 create mode 100644 public/bower_components/css-spinners/refreshing.css
 create mode 100644 public/bower_components/css-spinners/spinner.css
 create mode 100644 public/bower_components/css-spinners/spinners.css
 create mode 100644 public/bower_components/css-spinners/spinners.scss
 create mode 100644 public/bower_components/css-spinners/three-quarters.css
 create mode 100644 public/bower_components/css-spinners/throbber.css
 create mode 100644 public/bower_components/css-spinners/timer.css
 create mode 100644 public/bower_components/css-spinners/whirly.css
 create mode 100644 public/bower_components/css-spinners/wobblebar.css
 create mode 100644 public/bower_components/es5-shim/es5-shim.js
 create mode 100644 public/bower_components/font-awesome/font-awesome.less
 create mode 100644 public/bower_components/font-awesome/font-awesome.scss
 create mode 100644 public/bower_components/highlightjs/default.css
 create mode 100644 public/bower_components/highlightjs/highlight.pack.js
 create mode 100644 public/bower_components/jquery-backstretch/jquery.backstretch.js
 create mode 100644 public/bower_components/jquery-cookie/jquery.cookie.js
 create mode 100644 public/bower_components/jquery-migrate/.bower.json
 create mode 100644 public/bower_components/jquery-migrate/README.md
 create mode 100644 public/bower_components/jquery-migrate/component.json
 create mode 100644 public/bower_components/jquery-migrate/jquery-migrate.js
 create mode 100644 public/bower_components/jquery-migrate/jquery-migrate.min.js
 create mode 100644 public/bower_components/jquery-mousewheel/jquery.mousewheel.js
 create mode 100644 public/bower_components/jquery-slimscroll/.bower.json
 create mode 100644 public/bower_components/jquery-slimscroll/README.md
 create mode 100644 public/bower_components/jquery-slimscroll/examples/allow-page-scroll.html
 create mode 100644 public/bower_components/jquery-slimscroll/examples/chaining.html
 create mode 100644 public/bower_components/jquery-slimscroll/examples/disable-fade-out.html
 create mode 100644 public/bower_components/jquery-slimscroll/examples/dynamic-content.html
 create mode 100644 public/bower_components/jquery-slimscroll/examples/height-width.html
 create mode 100644 public/bower_components/jquery-slimscroll/examples/index.html
 create mode 100644 public/bower_components/jquery-slimscroll/examples/libs/prettify/prettify.css
 create mode 100644 public/bower_components/jquery-slimscroll/examples/libs/prettify/prettify.js
 create mode 100644 public/bower_components/jquery-slimscroll/examples/mouse-wheel.html
 create mode 100644 public/bower_components/jquery-slimscroll/examples/multiple-elements.html
 create mode 100644 public/bower_components/jquery-slimscroll/examples/navigation.html
 create mode 100644 public/bower_components/jquery-slimscroll/examples/nested.html
 create mode 100644 public/bower_components/jquery-slimscroll/examples/programmatic-scrolling.html
 create mode 100644 public/bower_components/jquery-slimscroll/examples/rail.html
 create mode 100644 public/bower_components/jquery-slimscroll/examples/scroll-events.html
 create mode 100644 public/bower_components/jquery-slimscroll/examples/scrollbar.html
 create mode 100644 public/bower_components/jquery-slimscroll/examples/start-position.html
 create mode 100644 public/bower_components/jquery-slimscroll/examples/style.css
 create mode 100644 public/bower_components/jquery-slimscroll/jquery.slimscroll.js
 create mode 100644 public/bower_components/jquery-slimscroll/jquery.slimscroll.min.js
 create mode 100644 public/bower_components/jquery-slimscroll/package.json
 create mode 100644 public/bower_components/jquery-ui/jquery-ui.js
 create mode 100644 public/bower_components/jquery-validation/jquery.validate.js
 create mode 100644 public/bower_components/jquery.actual/jquery.actual.js
 create mode 100644 public/bower_components/jquery/jquery.js
 create mode 100644 public/bower_components/json3/json3.js
 create mode 100644 public/bower_components/lodash/lodash.js
 create mode 100644 public/bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.css
 create mode 100644 public/bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.js
 create mode 100644 public/bower_components/malihu-custom-scrollbar-plugin/mCSB_buttons.png
 create mode 100644 public/bower_components/moment/moment.js
 create mode 100644 public/bower_components/ng-csv/ng-csv.min.js
 create mode 100644 public/bower_components/ng-emoticons/emojis.png
 create mode 100644 public/bower_components/ng-emoticons/[email-masked]
 create mode 100644 public/bower_components/ng-emoticons/emoticons.eot
 create mode 100644 public/bower_components/ng-emoticons/emoticons.svg
 create mode 100644 public/bower_components/ng-emoticons/emoticons.ttf
 create mode 100644 public/bower_components/ng-emoticons/emoticons.woff
 create mode 100644 public/bower_components/ng-emoticons/loader.svg
 create mode 100644 public/bower_components/ng-emoticons/ng-emoticons.css
 create mode 100644 public/bower_components/ng-emoticons/ng-emoticons.js
 create mode 100644 public/bower_components/ng-remote-validate/ngRemoteValidate.js
 create mode 100644 public/bower_components/ng-scrollbars/scrollbars.min.js
 create mode 100644 public/bower_components/ng-slide-down/ng-slide-down.js
 create mode 100644 public/bower_components/ngInfiniteScroll/ng-infinite-scroll.js
 create mode 100644 public/bower_components/ngmap/ng-map.js
 create mode 100644 public/bower_components/oclazyload/ocLazyLoad.js
 create mode 100644 public/bower_components/pdfjs-dist/pdf.js
 create mode 100644 public/bower_components/pdfjs-dist/pdf.worker.js
 create mode 100644 public/bower_components/rangy/rangy-classapplier.js
 create mode 100644 public/bower_components/rangy/rangy-core.js
 create mode 100644 public/bower_components/rangy/rangy-highlighter.js
 create mode 100644 public/bower_components/rangy/rangy-selectionsaverestore.js
 create mode 100644 public/bower_components/rangy/rangy-serializer.js
 create mode 100644 public/bower_components/rangy/rangy-textrange.js
 create mode 100644 public/bower_components/select2/core.scss
 create mode 100644 public/bower_components/select2/select2.js
 create mode 100644 public/bower_components/simple-line-icons/Simple-Line-Icons.eot
 create mode 100644 public/bower_components/simple-line-icons/Simple-Line-Icons.svg
 create mode 100644 public/bower_components/simple-line-icons/Simple-Line-Icons.ttf
 create mode 100644 public/bower_components/simple-line-icons/Simple-Line-Icons.woff
 create mode 100644 public/bower_components/simple-line-icons/Simple-Line-Icons.woff2
 create mode 100644 public/bower_components/simple-line-icons/simple-line-icons.css
 create mode 100644 public/bower_components/simple-line-icons/simple-line-icons.less
 create mode 100644 public/bower_components/simple-line-icons/simple-line-icons.scss
 create mode 100644 public/bower_components/sprintf/sprintf.js
 create mode 100644 public/bower_components/textAngular/textAngular-sanitize.js
 create mode 100644 public/bower_components/textAngular/textAngular.css
 create mode 100644 public/bower_components/textAngular/textAngular.js
 create mode 100644 public/bower_components/textAngular/textAngularSetup.js
 create mode 100644 public/bower_components/time-elements/time-elements.js
 create mode 100644 public/bower_components/ui-navbar/ui-navbar.js
 create mode 100644 public/bower_components/ui-select/select.css
 create mode 100644 public/bower_components/ui-select/select.js
 create mode 100644 public/bower_components/webcomponentsjs/webcomponents.js
 create mode 100644 public/favicon.ico
 create mode 100644 public/index.html
 create mode 100644 public/robots.txt
 create mode 100644 release-notes/changelog_0.0.1.txt
 create mode 100644 server/api/agent/agent.controller.js
 create mode 100644 server/api/agent/agent.socket.js
 create mode 100644 server/api/agent/agent.spec.js
 create mode 100644 server/api/agent/index.js
 create mode 100644 server/api/ami/ami.ami.js
 create mode 100644 server/api/ami/ami.controller.js
 create mode 100644 server/api/ami/ami.socket.js
 create mode 100644 server/api/ami/ami.spec.js
 create mode 100644 server/api/ami/index.js
 create mode 100644 server/api/automation/automation.controller.js
 create mode 100644 server/api/automation/automation.socket.js
 create mode 100644 server/api/automation/automation.spec.js
 create mode 100644 server/api/automation/index.js
 create mode 100644 server/api/business_action/business_action.controller.js
 create mode 100644 server/api/business_action/business_action.socket.js
 create mode 100644 server/api/business_action/business_action.spec.js
 create mode 100644 server/api/business_action/index.js
 create mode 100644 server/api/business_condition/business_condition.controller.js
 create mode 100644 server/api/business_condition/business_condition.socket.js
 create mode 100644 server/api/business_condition/business_condition.spec.js
 create mode 100644 server/api/business_condition/index.js
 create mode 100644 server/api/chat_application/chat_application.controller.js
 create mode 100644 server/api/chat_application/chat_application.socket.js
 create mode 100644 server/api/chat_application/chat_application.spec.js
 create mode 100644 server/api/chat_application/index.js
 create mode 100644 server/api/chat_enquiry/enquiry.controller.js
 create mode 100644 server/api/chat_enquiry/enquiry.socket.js
 create mode 100644 server/api/chat_enquiry/enquiry.spec.js
 create mode 100644 server/api/chat_enquiry/index.js
 create mode 100644 server/api/chat_message/chat_message.controller.js
 create mode 100644 server/api/chat_message/chat_message.socket.js
 create mode 100644 server/api/chat_message/chat_message.spec.js
 create mode 100644 server/api/chat_message/index.js
 create mode 100644 server/api/chat_queue/chat_queue.controller.js
 create mode 100644 server/api/chat_queue/chat_queue.socket.js
 create mode 100644 server/api/chat_queue/chat_queue.spec.js
 create mode 100644 server/api/chat_queue/index.js
 create mode 100644 server/api/chat_room/chat_room.controller.js
 create mode 100644 server/api/chat_room/chat_room.controller.js.back
 create mode 100644 server/api/chat_room/chat_room.socket.js
 create mode 100644 server/api/chat_room/chat_room.spec.js
 create mode 100644 server/api/chat_room/index.js
 create mode 100644 server/api/chat_visitor/chat_visitor.controller.js
 create mode 100644 server/api/chat_visitor/chat_visitor.socket.js
 create mode 100644 server/api/chat_visitor/chat_visitor.spec.js
 create mode 100644 server/api/chat_visitor/index.js
 create mode 100644 server/api/chat_website/chat_website.controller.js
 create mode 100644 server/api/chat_website/chat_website.socket.js
 create mode 100644 server/api/chat_website/chat_website.spec.js
 create mode 100644 server/api/chat_website/index.js
 create mode 100644 server/api/contact/contact.controller.js
 create mode 100644 server/api/contact/contact.model.js
 create mode 100644 server/api/contact/contact.socket.js
 create mode 100644 server/api/contact/contact.spec.js
 create mode 100644 server/api/contact/index.js
 create mode 100644 server/api/dashboard/dashboard.controller.js
 create mode 100644 server/api/dashboard/dashboard.socket.js
 create mode 100644 server/api/dashboard/dashboard.spec.js
 create mode 100644 server/api/dashboard/index.js
 create mode 100644 server/api/event/event.controller.js
 create mode 100644 server/api/event/event.socket.js
 create mode 100644 server/api/event/event.spec.js
 create mode 100644 server/api/event/index.js
 create mode 100644 server/api/fax_account/fax_account.controller.js
 create mode 100644 server/api/fax_account/fax_account.socket.js
 create mode 100644 server/api/fax_account/fax_account.spec.js
 create mode 100644 server/api/fax_account/index.js
 create mode 100644 server/api/fax_application/fax_application.controller.js
 create mode 100644 server/api/fax_application/fax_application.socket.js
 create mode 100644 server/api/fax_application/fax_application.spec.js
 create mode 100644 server/api/fax_application/index.js
 create mode 100644 server/api/fax_business_automation/fax_business_automation.controller.js
 create mode 100644 server/api/fax_business_automation/fax_business_automation.socket.js
 create mode 100644 server/api/fax_business_automation/fax_business_automation.spec.js
 create mode 100644 server/api/fax_business_automation/index.js
 create mode 100644 server/api/fax_message/fax_message.ami.js
 create mode 100644 server/api/fax_message/fax_message.controller.js
 create mode 100644 server/api/fax_message/fax_message.socket.js
 create mode 100644 server/api/fax_message/fax_message.spec.js
 create mode 100644 server/api/fax_message/index.js
 create mode 100644 server/api/fax_queue/fax_queue.controller.js
 create mode 100644 server/api/fax_queue/fax_queue.socket.js
 create mode 100644 server/api/fax_queue/fax_queue.spec.js
 create mode 100644 server/api/fax_queue/index.js
 create mode 100644 server/api/fax_room/fax_room.controller.js
 create mode 100644 server/api/fax_room/fax_room.kue.js
 create mode 100644 server/api/fax_room/fax_room.socket.js
 create mode 100644 server/api/fax_room/fax_room.spec.js
 create mode 100644 server/api/fax_room/index.js
 create mode 100644 server/api/integration/index.js
 create mode 100644 server/api/integration/integration.controller.js
 create mode 100644 server/api/integration/integration.socket.js
 create mode 100644 server/api/integration/integration.spec.js
 create mode 100644 server/api/interval/index.js
 create mode 100644 server/api/interval/interval.controller.js
 create mode 100644 server/api/interval/interval.socket.js
 create mode 100644 server/api/interval/interval.spec.js
 create mode 100644 server/api/mail_account/index.js
 create mode 100644 server/api/mail_account/mail_account.controller.js
 create mode 100644 server/api/mail_account/mail_account.socket.js
 create mode 100644 server/api/mail_account/mail_account.spec.js
 create mode 100644 server/api/mail_application/index.js
 create mode 100644 server/api/mail_application/mail_application.controller.js
 create mode 100644 server/api/mail_application/mail_application.socket.js
 create mode 100644 server/api/mail_application/mail_application.spec.js
 create mode 100644 server/api/mail_attachment/index.js
 create mode 100644 server/api/mail_attachment/mail_attachment.controller.js
 create mode 100644 server/api/mail_attachment/mail_attachment.socket.js
 create mode 100644 server/api/mail_attachment/mail_attachment.spec.js
 create mode 100644 server/api/mail_business_automation/index.js
 create mode 100644 server/api/mail_business_automation/mail_business_automation.controller.js
 create mode 100644 server/api/mail_business_automation/mail_business_automation.socket.js
 create mode 100644 server/api/mail_business_automation/mail_business_automation.spec.js
 create mode 100644 server/api/mail_message/index.js
 create mode 100644 server/api/mail_message/mail_message.controller.js
 create mode 100644 server/api/mail_message/mail_message.socket.js
 create mode 100644 server/api/mail_message/mail_message.spec.js
 create mode 100644 server/api/mail_queue/index.js
 create mode 100644 server/api/mail_queue/mail_queue.controller.js
 create mode 100644 server/api/mail_queue/mail_queue.socket.js
 create mode 100644 server/api/mail_queue/mail_queue.spec.js
 create mode 100644 server/api/mail_room/index.js
 create mode 100644 server/api/mail_room/mail_room.controller.js
 create mode 100644 server/api/mail_room/mail_room.kue.js
 create mode 100644 server/api/mail_room/mail_room.socket.js
 create mode 100644 server/api/mail_room/mail_room.spec.js
 create mode 100644 server/api/mail_server_in/index.js
 create mode 100644 server/api/mail_server_in/mail_server_in.controller.js
 create mode 100644 server/api/mail_server_in/mail_server_in.socket.js
 create mode 100644 server/api/mail_server_in/mail_server_in.spec.js
 create mode 100644 server/api/mail_server_out/index.js
 create mode 100644 server/api/mail_server_out/mail_server_out.controller.js
 create mode 100644 server/api/mail_server_out/mail_server_out.socket.js
 create mode 100644 server/api/mail_server_out/mail_server_out.spec.js
 create mode 100644 server/api/mail_template/index.js
 create mode 100644 server/api/mail_template/mail_template.controller.js
 create mode 100644 server/api/mail_template/mail_template.socket.js
 create mode 100644 server/api/mail_template/mail_template.spec.js
 create mode 100644 server/api/module/index.js
 create mode 100644 server/api/module/module.controller.js
 create mode 100644 server/api/module/module.socket.js
 create mode 100644 server/api/module/module.spec.js
 create mode 100644 server/api/module/setting/index.js
 create mode 100644 server/api/module/setting/setting.controller.js
 create mode 100644 server/api/module/setting/setting.socket.js
 create mode 100644 server/api/module/setting/setting.spec.js
 create mode 100644 server/api/motionbar/index.js
 create mode 100644 server/api/motionbar/motionbar.controller.js
 create mode 100644 server/api/motionbar/motionbar.socket.js
 create mode 100644 server/api/motionbar/motionbar.spec.js
 create mode 100644 server/api/report_agent/index.js
 create mode 100644 server/api/report_agent/report_agent.controller.js
 create mode 100644 server/api/report_agent/report_agent.socket.js
 create mode 100644 server/api/report_chat/index.js
 create mode 100644 server/api/report_chat/report_chat.controller.js
 create mode 100644 server/api/report_chat/report_chat.socket.js
 create mode 100644 server/api/report_chat/report_chat.spec.js
 create mode 100644 server/api/report_chat_session/index.js
 create mode 100644 server/api/report_chat_session/report_chat_session.controller.js
 create mode 100644 server/api/report_chat_session/report_chat_session.socket.js
 create mode 100644 server/api/report_chat_session/report_chat_session.spec.js
 create mode 100644 server/api/report_mail/index.js
 create mode 100644 server/api/report_mail/report_mail.controller.js
 create mode 100644 server/api/report_mail/report_mail.socket.js
 create mode 100644 server/api/report_mail/report_mail.spec.js
 create mode 100644 server/api/report_mail_session/index.js
 create mode 100644 server/api/report_mail_session/report_mail_session.controller.js
 create mode 100644 server/api/report_mail_session/report_mail_session.socket.js
 create mode 100644 server/api/report_mail_session/report_mail_session.spec.js
 create mode 100644 server/api/report_queue/index.js
 create mode 100644 server/api/report_queue/report_queue.controller.js
 create mode 100644 server/api/report_queue/report_queue.socket.js
 create mode 100644 server/api/setting/index.js
 create mode 100644 server/api/setting/setting.controller.js
 create mode 100644 server/api/setting/setting.socket.js
 create mode 100644 server/api/setting/setting.spec.js
 create mode 100644 server/api/square_odbc/index.js
 create mode 100644 server/api/square_odbc/square_odbc.controller.js
 create mode 100644 server/api/square_odbc/square_odbc.socket.js
 create mode 100644 server/api/square_odbc/square_odbc.spec.js
 create mode 100644 server/api/square_project/index.js
 create mode 100644 server/api/square_project/square_project.controller.js
 create mode 100644 server/api/square_project/square_project.socket.js
 create mode 100644 server/api/square_project/square_project.spec.js
 create mode 100644 server/api/team/index.js
 create mode 100644 server/api/team/team.controller.js
 create mode 100644 server/api/team/team.socket.js
 create mode 100644 server/api/team/team.spec.js
 create mode 100644 server/api/thing/index.js
 create mode 100644 server/api/thing/thing.controller.js
 create mode 100644 server/api/thing/thing.socket.js
 create mode 100644 server/api/thing/thing.spec.js
 create mode 100644 server/api/trigger/index.js
 create mode 100644 server/api/trigger/trigger.controller.js
 create mode 100644 server/api/trigger/trigger.socket.js
 create mode 100644 server/api/trigger/trigger.spec.js
 create mode 100644 server/api/trunk/index.js
 create mode 100644 server/api/trunk/trunk.ami.js
 create mode 100644 server/api/trunk/trunk.controller.js
 create mode 100644 server/api/trunk/trunk.socket.js
 create mode 100644 server/api/trunk/trunk.spec.js
 create mode 100644 server/api/upload/index.js
 create mode 100644 server/api/upload/upload.controller.js
 create mode 100644 server/api/upload/upload.socket.js
 create mode 100644 server/api/upload/upload.spec.js
 create mode 100644 server/api/user/index.js
 create mode 100644 server/api/user/user.ami.js
 create mode 100644 server/api/user/user.controller.js
 create mode 100644 server/api/user/user.socket.js
 create mode 100644 server/api/user/user.spec.js
 create mode 100644 server/api/user_has_chat_queue/index.js
 create mode 100644 server/api/user_has_chat_queue/user_has_chat_queue.controller.js
 create mode 100644 server/api/user_has_chat_queue/user_has_chat_queue.socket.js
 create mode 100644 server/api/user_has_chat_queue/user_has_chat_queue.spec.js
 create mode 100644 server/api/user_has_chat_room/index.js
 create mode 100644 server/api/user_has_chat_room/user_has_chat_room.controller.js
 create mode 100644 server/api/user_has_chat_room/user_has_chat_room.socket.js
 create mode 100644 server/api/user_has_chat_room/user_has_chat_room.spec.js
 create mode 100644 server/api/user_has_fax_queue/index.js
 create mode 100644 server/api/user_has_fax_queue/user_has_fax_queue.controller.js
 create mode 100644 server/api/user_has_fax_queue/user_has_fax_queue.socket.js
 create mode 100644 server/api/user_has_fax_queue/user_has_fax_queue.spec.js
 create mode 100644 server/api/user_has_mail_queue/index.js
 create mode 100644 server/api/user_has_mail_queue/user_has_mail_queue.controller.js
 create mode 100644 server/api/user_has_mail_queue/user_has_mail_queue.socket.js
 create mode 100644 server/api/user_has_mail_queue/user_has_mail_queue.spec.js
 create mode 100644 server/api/user_has_team/index.js
 create mode 100644 server/api/user_has_team/user_has_team.controller.js
 create mode 100644 server/api/user_has_team/user_has_team.model.js
 create mode 100644 server/api/user_has_team/user_has_team.socket.js
 create mode 100644 server/api/user_has_team/user_has_team.spec.js
 create mode 100644 server/api/user_has_voice_queue/index.js
 create mode 100644 server/api/user_has_voice_queue/user_has_voice_queue.controller.js
 create mode 100644 server/api/user_has_voice_queue/user_has_voice_queue.socket.js
 create mode 100644 server/api/user_has_voice_queue/user_has_voice_queue.spec.js
 create mode 100644 server/api/variable/index.js
 create mode 100644 server/api/variable/variable.controller.js
 create mode 100644 server/api/variable/variable.socket.js
 create mode 100644 server/api/variable/variable.spec.js
 create mode 100644 server/api/voice_context/index.js
 create mode 100644 server/api/voice_context/voice_context.ami.js
 create mode 100644 server/api/voice_context/voice_context.controller.js
 create mode 100644 server/api/voice_context/voice_context.socket.js
 create mode 100644 server/api/voice_context/voice_context.spec.js
 create mode 100644 server/api/voice_extension/index.js
 create mode 100644 server/api/voice_extension/voice_extension.controller.js
 create mode 100644 server/api/voice_extension/voice_extension.socket.js
 create mode 100644 server/api/voice_extension/voice_extension.spec.js
 create mode 100644 server/api/voice_musiconhold/index.js
 create mode 100644 server/api/voice_musiconhold/voice_musiconhold.controller.js
 create mode 100644 server/api/voice_musiconhold/voice_musiconhold.socket.js
 create mode 100644 server/api/voice_musiconhold/voice_musiconhold.spec.js
 create mode 100644 server/api/voice_queue/index.js
 create mode 100644 server/api/voice_queue/voice_queue.controller.js
 create mode 100644 server/api/voice_queue/voice_queue.socket.js
 create mode 100644 server/api/voice_queue/voice_queue.spec.js
 create mode 100644 server/api/voice_voicemail/index.js
 create mode 100644 server/api/voice_voicemail/voice_voicemail.controller.js
 create mode 100644 server/api/voice_voicemail/voice_voicemail.socket.js
 create mode 100644 server/api/voice_voicemail/voice_voicemail.spec.js
 create mode 100644 server/api/widget/index.js
 create mode 100644 server/api/widget/widget.controller.js
 create mode 100644 server/api/widget/widget.spec.js
 create mode 100644 server/api/xchatty/index.js
 create mode 100644 server/api/xchatty/xchatty.controller.js
 create mode 100644 server/api/xchatty/xchatty.socket.js
 create mode 100644 server/api/xchatty/xchatty.spec.js
 create mode 100644 server/api/zendesk_account/index.js
 create mode 100644 server/api/zendesk_account/zendesk_account.controller.js
 create mode 100644 server/api/zendesk_account/zendesk_account.socket.js
 create mode 100644 server/api/zendesk_account/zendesk_account.spec.js
 create mode 100644 server/api/zendesk_configuration/index.js
 create mode 100644 server/api/zendesk_configuration/zendesk_configuration.controller.js
 create mode 100644 server/api/zendesk_configuration/zendesk_configuration.socket.js
 create mode 100644 server/api/zendesk_configuration/zendesk_configuration.spec.js
 create mode 100644 server/api/zendesk_field/index.js
 create mode 100644 server/api/zendesk_field/zendesk_field.controller.js
 create mode 100644 server/api/zendesk_field/zendesk_field.socket.js
 create mode 100644 server/api/zendesk_field/zendesk_field.spec.js
 create mode 100644 server/api/zendesk_text/index.js
 create mode 100644 server/api/zendesk_text/zendesk_text.controller.js
 create mode 100644 server/api/zendesk_text/zendesk_text.socket.js
 create mode 100644 server/api/zendesk_text/zendesk_text.spec.js
 create mode 100644 server/app.js
 create mode 100644 server/auth/auth.service.js
 create mode 100644 server/auth/facebook/index.js
 create mode 100644 server/auth/facebook/passport.js
 create mode 100644 server/auth/google/index.js
 create mode 100644 server/auth/google/passport.js
 create mode 100644 server/auth/index.js
 create mode 100644 server/auth/local/index.js
 create mode 100644 server/auth/local/local.ami.js
 create mode 100644 server/auth/local/passport.js
 create mode 100644 server/auth/twitter/index.js
 create mode 100644 server/auth/twitter/passport.js
 create mode 100644 server/components/errors/index.js
 create mode 100644 server/components/xchatty/assets/common/in_progress.gif
 create mode 100644 server/components/xchatty/assets/common/loading.gif
 create mode 100644 server/components/xchatty/assets/common/logo-clientengage-large.png
 create mode 100644 server/components/xchatty/assets/common/logo-clientengage.png
 create mode 100644 server/components/xchatty/assets/icons/accept.png
 create mode 100644 server/components/xchatty/assets/icons/add.png
 create mode 100644 server/components/xchatty/assets/icons/arrow_refresh.png
 create mode 100644 server/components/xchatty/assets/icons/attach.png
 create mode 100644 server/components/xchatty/assets/icons/bell.png
 create mode 100644 server/components/xchatty/assets/icons/bin_closed.png
 create mode 100644 server/components/xchatty/assets/icons/bullet_arrow_down.png
 create mode 100644 server/components/xchatty/assets/icons/bullet_arrow_up.png
 create mode 100644 server/components/xchatty/assets/icons/bullet_green.png
 create mode 100644 server/components/xchatty/assets/icons/bullet_red.png
 create mode 100644 server/components/xchatty/assets/icons/bullet_star.png
 create mode 100644 server/components/xchatty/assets/icons/bullet_toggle_minus.png
 create mode 100644 server/components/xchatty/assets/icons/bullet_toggle_plus.png
 create mode 100644 server/components/xchatty/assets/icons/cancel.png
 create mode 100644 server/components/xchatty/assets/icons/chart_curve.png
 create mode 100644 server/components/xchatty/assets/icons/clock.png
 create mode 100644 server/components/xchatty/assets/icons/cog.png
 create mode 100644 server/components/xchatty/assets/icons/comment.png
 create mode 100644 server/components/xchatty/assets/icons/comment_add.png
 create mode 100644 server/components/xchatty/assets/icons/comments_add.png
 create mode 100644 server/components/xchatty/assets/icons/control_pause.png
 create mode 100644 server/components/xchatty/assets/icons/database_key.png
 create mode 100644 server/components/xchatty/assets/icons/date.png
 create mode 100644 server/components/xchatty/assets/icons/date_next.png
 create mode 100644 server/components/xchatty/assets/icons/date_previous.png
 create mode 100644 server/components/xchatty/assets/icons/delete.png
 create mode 100644 server/components/xchatty/assets/icons/disk.png
 create mode 100644 server/components/xchatty/assets/icons/door_out.png
 create mode 100644 server/components/xchatty/assets/icons/email.png
 create mode 100644 server/components/xchatty/assets/icons/error.png
 create mode 100644 server/components/xchatty/assets/icons/exclamation.png
 create mode 100644 server/components/xchatty/assets/icons/eye.png
 create mode 100644 server/components/xchatty/assets/icons/film.png
 create mode 100644 server/components/xchatty/assets/icons/folder_go.png
 create mode 100644 server/components/xchatty/assets/icons/folder_user.png
 create mode 100644 server/components/xchatty/assets/icons/folder_wrench.png
 create mode 100644 server/components/xchatty/assets/icons/group.png
 create mode 100644 server/components/xchatty/assets/icons/help.png
 create mode 100644 server/components/xchatty/assets/icons/information.png
 create mode 100644 server/components/xchatty/assets/icons/key.png
 create mode 100644 server/components/xchatty/assets/icons/layout.png
 create mode 100644 server/components/xchatty/assets/icons/layout_content.png
 create mode 100644 server/components/xchatty/assets/icons/layout_link.png
 create mode 100644 server/components/xchatty/assets/icons/lightning.png
 create mode 100644 server/components/xchatty/assets/icons/link_go.png
 create mode 100644 server/components/xchatty/assets/icons/lock.png
 create mode 100644 server/components/xchatty/assets/icons/magnifier.png
 create mode 100644 server/components/xchatty/assets/icons/music.png
 create mode 100644 server/components/xchatty/assets/icons/new.png
 create mode 100644 server/components/xchatty/assets/icons/page_white.png
 create mode 100644 server/components/xchatty/assets/icons/page_white_acrobat.png
 create mode 100644 server/components/xchatty/assets/icons/page_white_camera.png
 create mode 100644 server/components/xchatty/assets/icons/page_white_compressed.png
 create mode 100644 server/components/xchatty/assets/icons/page_white_excel.png
 create mode 100644 server/components/xchatty/assets/icons/page_white_picture.png
 create mode 100644 server/components/xchatty/assets/icons/page_white_powerpoint.png
 create mode 100644 server/components/xchatty/assets/icons/page_white_text.png
 create mode 100644 server/components/xchatty/assets/icons/page_white_word.png
 create mode 100644 server/components/xchatty/assets/icons/pencil.png
 create mode 100644 server/components/xchatty/assets/icons/readme.txt
 create mode 100644 server/components/xchatty/assets/icons/report.png
 create mode 100644 server/components/xchatty/assets/icons/report_add.png
 create mode 100644 server/components/xchatty/assets/icons/report_go.png
 create mode 100644 server/components/xchatty/assets/icons/script_code.png
 create mode 100644 server/components/xchatty/assets/icons/star.png
 create mode 100644 server/components/xchatty/assets/icons/table.png
 create mode 100644 server/components/xchatty/assets/icons/table_gear.png
 create mode 100644 server/components/xchatty/assets/icons/table_go.png
 create mode 100644 server/components/xchatty/assets/icons/textfield_delete.png
 create mode 100644 server/components/xchatty/assets/icons/tick.png
 create mode 100644 server/components/xchatty/assets/icons/time.png
 create mode 100644 server/components/xchatty/assets/icons/timeline_marker.png
 create mode 100644 server/components/xchatty/assets/icons/vcard.png
 create mode 100644 server/components/xchatty/assets/icons/wrench_orange.png
 create mode 100644 server/components/xchatty/assets/images/bullet_clock.png
 create mode 100644 server/components/xchatty/assets/images/bullet_pencil.png
 create mode 100644 server/components/xchatty/assets/images/bullet_tick.png
 create mode 100644 server/components/xchatty/assets/images/icon_visitorchat.png
 create mode 100644 server/components/xchatty/assets/images/loading.gif
 create mode 100644 server/components/xchatty/assets/js/jquery.min.js
 create mode 100644 server/components/xchatty/assets/notification/xc_blubb.mp3
 create mode 100644 server/components/xchatty/assets/notification/xc_blubb.ogg
 create mode 100644 server/components/xchatty/assets/notification/xc_blubb.wav
 create mode 100644 server/components/xchatty/assets/smilies/biggrin.png
 create mode 100644 server/components/xchatty/assets/smilies/confused.png
 create mode 100644 server/components/xchatty/assets/smilies/cool.png
 create mode 100644 server/components/xchatty/assets/smilies/cry.png
 create mode 100644 server/components/xchatty/assets/smilies/eek.png
 create mode 100644 server/components/xchatty/assets/smilies/evil.png
 create mode 100644 server/components/xchatty/assets/smilies/like.png
 create mode 100644 server/components/xchatty/assets/smilies/lol.png
 create mode 100644 server/components/xchatty/assets/smilies/love.png
 create mode 100644 server/components/xchatty/assets/smilies/mad.png
 create mode 100644 server/components/xchatty/assets/smilies/mrgreen.png
 create mode 100644 server/components/xchatty/assets/smilies/neutral.png
 create mode 100644 server/components/xchatty/assets/smilies/question.png
 create mode 100644 server/components/xchatty/assets/smilies/razz.png
 create mode 100644 server/components/xchatty/assets/smilies/redface.png
 create mode 100644 server/components/xchatty/assets/smilies/rolleyes.png
 create mode 100644 server/components/xchatty/assets/smilies/sad.png
 create mode 100644 server/components/xchatty/assets/smilies/smile.png
 create mode 100644 server/components/xchatty/assets/smilies/surprised.png
 create mode 100644 server/components/xchatty/assets/smilies/thumbdown.png
 create mode 100644 server/components/xchatty/assets/smilies/thumbup.png
 create mode 100644 server/components/xchatty/assets/smilies/twisted.png
 create mode 100644 server/components/xchatty/assets/smilies/wink.png
 create mode 100644 server/components/xchatty/assets/styles/backgrounds/vc_background_black.png
 create mode 100644 server/components/xchatty/assets/styles/backgrounds/vc_background_blue.png
 create mode 100644 server/components/xchatty/assets/styles/backgrounds/vc_background_green.png
 create mode 100644 server/components/xchatty/assets/styles/backgrounds/vc_background_red.png
 create mode 100644 server/components/xchatty/assets/styles/loading.gif
 create mode 100644 server/components/xchatty/index.js
 create mode 100644 server/components/xchatty/snippet.html
 create mode 100644 server/components/xchatty/xchatty.css
 create mode 100644 server/components/xchatty/xchatty.js
 create mode 100644 server/config/agi.js
 create mode 100644 server/config/agi_scripts/googletts.agi
 create mode 100644 server/config/agi_scripts/ispeech-asr.agi
 create mode 100644 server/config/agi_scripts/ispeech-tts.agi
 create mode 100644 server/config/ami/acw.js
 create mode 100644 server/config/ami/agent.js
 create mode 100644 server/config/ami/call.js
 create mode 100644 server/config/ami/dial.js
 create mode 100644 server/config/ami/index.js
 create mode 100644 server/config/ami/member.js
 create mode 100644 server/config/ami/queue_caller.js
 create mode 100644 server/config/ami/queue_member.js
 create mode 100644 server/config/analytics.js
 create mode 100644 server/config/autodialer/index.js
 create mode 100644 server/config/autodialer/process.js
 create mode 100644 server/config/automations/fax.js
 create mode 100644 server/config/automations/mail.js
 create mode 100644 server/config/environment/config.json
 create mode 100644 server/config/environment/development.js
 create mode 100644 server/config/environment/index.js
 create mode 100644 server/config/environment/production.js
 create mode 100644 server/config/environment/test.js
 create mode 100644 server/config/express.js
 create mode 100644 server/config/fax.js
 create mode 100644 server/config/history.js
 create mode 100644 server/config/imap.js
 create mode 100644 server/config/integration.js
 create mode 100644 server/config/kue.chat.js
 create mode 100644 server/config/kue.fax.js
 create mode 100644 server/config/kue.mail.js
 create mode 100644 server/config/local.env.sample.js
 create mode 100644 server/config/logger.js
 create mode 100644 server/config/seed.js
 create mode 100644 server/config/smtp.js
 create mode 100644 server/config/socketio.js
 create mode 100644 server/config/triggers/mail.js
 create mode 100644 server/files/asterisk/sip_xcally_contexts.conf
 create mode 100644 server/files/asterisk/sip_xcally_registers.conf
 create mode 100644 server/files/asterisk/sip_xcally_trunks.conf
 create mode 100644 server/files/geoip/17monipdb.dat
 create mode 100644 server/files/geoip/IP.class.php
 create mode 100644 server/files/geoip/readme.txt
 create mode 100644 server/files/images/avatar5.png
 create mode 100644 server/files/images/customer.png
 create mode 100644 server/files/images/userpic.png
 create mode 100644 server/files/images/userpic.png.old.png
 create mode 100644 server/files/integrations/zendesk/app.js
 create mode 100644 server/files/integrations/zendesk/manifest.json
 create mode 100644 server/files/sounds/converted/8dml2nHgdylpQdAb.wav
 create mode 100644 server/files/sounds/converted/DqcAGJTcbebQu5PW.wav
 create mode 100644 server/files/sounds/original/8dml2nHgdylpQdAb.wav
 create mode 100644 server/files/sounds/original/DqcAGJTcbebQu5PW.wav
 create mode 100644 server/migrations/20151202190300-test.js
 create mode 100644 server/models/asterisk_manager.js
 create mode 100644 server/models/asterisk_manager_interface.js
 create mode 100644 server/models/autodialer_contact.js
 create mode 100644 server/models/autodialer_process.js
 create mode 100644 server/models/automation.js
 create mode 100644 server/models/business_action.js
 create mode 100644 server/models/business_condition.js
 create mode 100644 server/models/channel.js
 create mode 100644 server/models/chat_application.js
 create mode 100644 server/models/chat_enquiry.js
 create mode 100644 server/models/chat_message.js
 create mode 100644 server/models/chat_queue.js
 create mode 100644 server/models/chat_room.js
 create mode 100644 server/models/chat_visitor.js
 create mode 100644 server/models/chat_website.js
 create mode 100644 server/models/contact.js
 create mode 100644 server/models/dashboard.js
 create mode 100644 server/models/event.js
 create mode 100644 server/models/fax_account.js
 create mode 100644 server/models/fax_application.js
 create mode 100644 server/models/fax_business_automation.js
 create mode 100644 server/models/fax_message.js
 create mode 100644 server/models/fax_queue.js
 create mode 100644 server/models/fax_room.js
 create mode 100644 server/models/history/report_agent_history.js
 create mode 100644 server/models/history/report_call_history.js
 create mode 100644 server/models/history/report_dial_history.js
 create mode 100644 server/models/history/report_member_history.js
 create mode 100644 server/models/history/report_queue_history.js
 create mode 100644 server/models/index.js
 create mode 100644 server/models/integration.js
 create mode 100644 server/models/interval.js
 create mode 100644 server/models/mail_account.js
 create mode 100644 server/models/mail_application.js
 create mode 100644 server/models/mail_attachment.js
 create mode 100644 server/models/mail_automation.js
 create mode 100644 server/models/mail_business_automation.js
 create mode 100644 server/models/mail_message.js
 create mode 100644 server/models/mail_queue.js
 create mode 100644 server/models/mail_room.js
 create mode 100644 server/models/mail_server_in.js
 create mode 100644 server/models/mail_server_out.js
 create mode 100644 server/models/mail_template.js
 create mode 100644 server/models/mail_trigger.js
 create mode 100644 server/models/module.js
 create mode 100644 server/models/motionbar.js
 create mode 100644 server/models/report_agent.js
 create mode 100644 server/models/report_call.js
 create mode 100644 server/models/report_chat.js
 create mode 100644 server/models/report_chat_session.js
 create mode 100644 server/models/report_dial.js
 create mode 100644 server/models/report_mail.js
 create mode 100644 server/models/report_mail_session.js
 create mode 100644 server/models/report_member.js
 create mode 100644 server/models/report_queue.js
 create mode 100644 server/models/report_square.js
 create mode 100644 server/models/report_square_detail.js
 create mode 100644 server/models/settings.js
 create mode 100644 server/models/square_odbc.js
 create mode 100644 server/models/square_project.js
 create mode 100644 server/models/team.js
 create mode 100644 server/models/trigger.js
 create mode 100644 server/models/trunk.js
 create mode 100644 server/models/upload.js
 create mode 100644 server/models/user.js
 create mode 100644 server/models/user_has_chat_queue.js
 create mode 100644 server/models/user_has_chat_room.js
 create mode 100644 server/models/user_has_fax_queue.js
 create mode 100644 server/models/user_has_mail_queue.js
 create mode 100644 server/models/user_has_team.js
 create mode 100644 server/models/user_has_voice_queue.js
 create mode 100644 server/models/variable.js
 create mode 100644 server/models/voice_context.js
 create mode 100644 server/models/voice_extension.js
 create mode 100644 server/models/voice_musiconhold.js
 create mode 100644 server/models/voice_queue.js
 create mode 100644 server/models/voice_voicemail.js
 create mode 100644 server/models/voice_voicemail_messages.js
 create mode 100644 server/models/zendesk_account.js
 create mode 100644 server/models/zendesk_configuration.js
 create mode 100644 server/models/zendesk_field.js
 create mode 100644 server/models/zendesk_text.js
 create mode 100644 server/routes.js
 create mode 100644 server/views/404.html

diff --git a/README.md b/README.md
deleted file mode 100644
index e69de29..0000000
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..5191bf8
--- /dev/null
+++ b/package.json
@@ -0,0 +1,137 @@
+{
+  "name": "motion",
+  "version": "0.0.2",
+  "main": "server/app.js",
+  "dependencies": {
+    "accept-language-parser": "^1.0.2",
+    "adm-zip": "^0.4.7",
+    "agi": "0.0.4",
+    "asterisk-manager": "^0.1.15",
+    "async": "^1.5.0",
+    "body-parser": "~1.14.1",
+    "composable-middleware": "^0.3.0",
+    "compression": "~1.6.0",
+    "connect-flash": "^0.1.1",
+    "cookie-parser": "~1.4.0",
+    "cron": "^1.0.9",
+    "ejs": "^2.3.4",
+    "errorhandler": "~1.4.2",
+    "express": "^4.13.3",
+    "express-jwt": "^3.3.0",
+    "express-mysql-session": "^0.4.3",
+    "express-session": "~1.12.1",
+    "file-base64": "^1.0.0",
+    "formidable": "^1.0.17",
+    "fs-extra": "^0.26.2",
+    "generator-adf-widget": "^0.3.2",
+    "geoip-lite": "^1.1.6",
+    "html-pdf": "^1.4.0",
+    "html-to-text": "^1.5.0",
+    "ipaddr.js": "^1.0.4",
+    "jsmin": "^1.0.1",
+    "jsonwebtoken": "^5.4.1",
+    "kue": "^0.10.4",
+    "lodash": "^3.0.0",
+    "mail-listener2": "^0.1.8",
+    "md5": "2.x",
+    "method-override": "~2.3.5",
+    "moment": "^2.10.6",
+    "morgan": "~1.6.1",
+    "mustache": "^2.2.0",
+    "mysql": "^2.9.0",
+    "node-uuid": "^1.4.7",
+    "node-zendesk": "^1.1.5",
+    "nodemailer": "^1.10.0",
+    "nodemailer-smtp-transport": "^1.0.4",
+    "odbc": "^1.2.1",
+    "passport": "~0.3.2",
+    "passport-facebook": "latest",
+    "passport-google-oauth": "latest",
+    "passport-local": "~1.0.0",
+    "passport-twitter": "latest",
+    "phantomjs": "^1.9.19",
+    "remove": "^0.1.5",
+    "sequelize": "^3.14.1",
+    "serve-favicon": "~2.3.0",
+    "shelljs": "^0.5.3",
+    "simple-random": "^1.0.3",
+    "socket.io": "^1.3.7",
+    "socket.io-client": "^1.3.7",
+    "socketio-jwt": "^4.3.3",
+    "sox": "^0.1.0",
+    "spindrift": "0.0.6",
+    "string-to-json": "^0.1.0",
+    "tiff-to-png": "^1.0.2",
+    "to-csv": "^0.1.0",
+    "ua-parser-js": "^0.7.9",
+    "upload-file": "^1.2.0",
+    "wait.for": "^0.6.6",
+    "xml2js": "^0.4.15",
+    "yo": "^1.5.0"
+  },
+  "devDependencies": {
+    "connect-livereload": "~0.5.3",
+    "grunt": "~0.4.5",
+    "grunt-angular-templates": "^0.5.7",
+    "grunt-asset-injector": "^0.1.0",
+    "grunt-autoprefixer": "3.0.0",
+    "grunt-build-control": "DaftMonk/grunt-build-control",
+    "grunt-changelog": "^0.3.1",
+    "grunt-concurrent": "~2.0.0",
+    "grunt-contrib-clean": "~0.6.0",
+    "grunt-contrib-concat": "~0.5.1",
+    "grunt-contrib-copy": "~0.8.0",
+    "grunt-contrib-cssmin": "~0.12.3",
+    "grunt-contrib-htmlmin": "~0.4.0",
+    "grunt-contrib-imagemin": "~0.9.4",
+    "grunt-contrib-jshint": "~0.11.2",
+    "grunt-contrib-uglify": "~0.9.1",
+    "grunt-contrib-watch": "~0.6.1",
+    "grunt-dom-munger": "^3.4.0",
+    "grunt-env": "~0.4.4",
+    "grunt-express-server": "~0.5.1",
+    "grunt-google-cdn": "~0.4.3",
+    "grunt-karma": "~0.12.0",
+    "grunt-mocha-test": "~0.12.7",
+    "grunt-newer": "~1.1.1",
+    "grunt-ng-annotate": "^1.0.1",
+    "grunt-node-inspector": ">=0.2.0",
+    "grunt-nodemon": "~0.4.0",
+    "grunt-open": "~0.2.3",
+    "grunt-protractor-runner": "^2.0.0",
+    "grunt-rev": "~0.1.0",
+    "grunt-svgmin": "~2.0.1",
+    "grunt-usemin": "~3.0.0",
+    "grunt-version": "^1.0.0",
+    "grunt-wiredep": "~2.0.0",
+    "jit-grunt": "^0.9.1",
+    "jshint-stylish": "~2.0.1",
+    "karma": "~0.13.2",
+    "karma-chrome-launcher": "~0.2.0",
+    "karma-coffee-preprocessor": "~0.3.0",
+    "karma-firefox-launcher": "~0.1.6",
+    "karma-html2js-preprocessor": "~0.1.0",
+    "karma-jade-preprocessor": "0.0.11",
+    "karma-jasmine": "~0.3.6",
+    "karma-ng-html2js-preprocessor": "~0.1.2",
+    "karma-ng-jade2js-preprocessor": "^0.2.0",
+    "karma-ng-scenario": "~0.1.0",
+    "karma-phantomjs-launcher": "~0.2.0",
+    "karma-requirejs": "~0.2.2",
+    "karma-script-launcher": "~0.1.0",
+    "open": "~0.0.5",
+    "requirejs": "~2.1.19",
+    "should": "~7.0.2",
+    "supertest": "~1.0.1",
+    "time-grunt": "~1.2.1"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "scripts": {
+    "start": "node server/app.js",
+    "test": "grunt test",
+    "update-webdriver": "node node_modules/grunt-protractor-runner/node_modules/protractor/bin/webdriver-manager update"
+  },
+  "private": true
+}
diff --git a/public/.htaccess b/public/.htaccess
new file mode 100644
index 0000000..cb84cb9
--- /dev/null
+++ b/public/.htaccess
@@ -0,0 +1,543 @@
+# Apache Configuration File
+
+# (!) Using `.htaccess` files slows down Apache, therefore, if you have access
+# to the main server config file (usually called `httpd.conf`), you should add
+# this logic there: http://httpd.apache.org/docs/current/howto/htaccess.html.
+
+# ##############################################################################
+# # CROSS-ORIGIN RESOURCE SHARING (CORS)                                       #
+# ##############################################################################
+
+# ------------------------------------------------------------------------------
+# | Cross-domain AJAX requests                                                 |
+# ------------------------------------------------------------------------------
+
+# Enable cross-origin AJAX requests.
+# http://code.google.com/p/html5security/wiki/CrossOriginRequestSecurity
+# http://enable-cors.org/
+
+# <IfModule mod_headers.c>
+#    Header set Access-Control-Allow-Origin "*"
+# </IfModule>
+
+# ------------------------------------------------------------------------------
+# | CORS-enabled images                                                        |
+# ------------------------------------------------------------------------------
+
+# Send the CORS header for images when browsers request it.
+# https://developer.mozilla.org/en/CORS_Enabled_Image
+# http://blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html
+# http://hacks.mozilla.org/2011/11/using-cors-to-load-webgl-textures-from-cross-domain-images/
+
+<IfModule mod_setenvif.c>
+    <IfModule mod_headers.c>
+        <FilesMatch "\.(gif|ico|jpe?g|png|svg|svgz|webp)$">
+            SetEnvIf Origin ":" IS_CORS
+            Header set Access-Control-Allow-Origin "*" env=IS_CORS
+        </FilesMatch>
+    </IfModule>
+</IfModule>
+
+# ------------------------------------------------------------------------------
+# | Web fonts access                                                           |
+# ------------------------------------------------------------------------------
+
+# Allow access from all domains for web fonts
+
+<IfModule mod_headers.c>
+    <FilesMatch "\.(eot|font.css|otf|ttc|ttf|woff)$">
+        Header set Access-Control-Allow-Origin "*"
+    </FilesMatch>
+</IfModule>
+
+
+# ##############################################################################
+# # ERRORS                                                                     #
+# ##############################################################################
+
+# ------------------------------------------------------------------------------
+# | 404 error prevention for non-existing redirected folders                   |
+# ------------------------------------------------------------------------------
+
+# Prevent Apache from returning a 404 error for a rewrite if a directory
+# with the same name does not exist.
+# http://httpd.apache.org/docs/current/content-negotiation.html#multiviews
+# http://www.webmasterworld.com/apache/3808792.htm
+
+Options -MultiViews
+
+# ------------------------------------------------------------------------------
+# | Custom error messages / pages                                              |
+# ------------------------------------------------------------------------------
+
+# You can customize what Apache returns to the client in case of an error (see
+# http://httpd.apache.org/docs/current/mod/core.html#errordocument), e.g.:
+
+ErrorDocument 404 /404.html
+
+
+# ##############################################################################
+# # INTERNET EXPLORER                                                          #
+# ##############################################################################
+
+# ------------------------------------------------------------------------------
+# | Better website experience                                                  |
+# ------------------------------------------------------------------------------
+
+# Force IE to render pages in the highest available mode in the various
+# cases when it may not: http://hsivonen.iki.fi/doctype/ie-mode.pdf.
+
+<IfModule mod_headers.c>
+    Header set X-UA-Compatible "IE=edge"
+    # `mod_headers` can't match based on the content-type, however, we only
+    # want to send this header for HTML pages and not for the other resources
+    <FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webapp|webm|webp|woff|xml|xpi)$">
+        Header unset X-UA-Compatible
+    </FilesMatch>
+</IfModule>
+
+# ------------------------------------------------------------------------------
+# | Cookie setting from iframes                                                |
+# ------------------------------------------------------------------------------
+
+# Allow cookies to be set from iframes in IE.
+
+# <IfModule mod_headers.c>
+#   Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""
+# </IfModule>
+
+# ------------------------------------------------------------------------------
+# | Screen flicker                                                             |
+# ------------------------------------------------------------------------------
+
+# Stop screen flicker in IE on CSS rollovers (this only works in
+# combination with the `ExpiresByType` directives for images from below).
+
+# BrowserMatch "MSIE" brokenvary=1
+# BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
+# BrowserMatch "Opera" !brokenvary
+# SetEnvIf brokenvary 1 force-no-vary
+
+
+# ##############################################################################
+# # MIME TYPES AND ENCODING                                                    #
+# ##############################################################################
+
+# ------------------------------------------------------------------------------
+# | Proper MIME types for all files                                            |
+# ------------------------------------------------------------------------------
+
+<IfModule mod_mime.c>
+
+  # Audio
+    AddType audio/mp4                                   m4a f4a f4b
+    AddType audio/ogg                                   oga ogg
+
+  # JavaScript
+    # Normalize to standard type (it's sniffed in IE anyways):
+    # http://tools.ietf.org/html/rfc4329#section-7.2
+    AddType application/javascript                      js jsonp
+    AddType application/json                            json
+
+  # Video
+    AddType video/mp4                                   mp4 m4v f4v f4p
+    AddType video/ogg                                   ogv
+    AddType video/webm                                  webm
+    AddType video/x-flv                                 flv
+
+  # Web fonts
+    AddType application/font-woff                       woff
+    AddType application/vnd.ms-fontobject               eot
+
+    # Browsers usually ignore the font MIME types and sniff the content,
+    # however, Chrome shows a warning if other MIME types are used for the
+    # following fonts.
+    AddType application/x-font-ttf                      ttc ttf
+    AddType font/opentype                               otf
+
+    # Make SVGZ fonts work on iPad:
+    # https://twitter.com/FontSquirrel/status/14855840545
+    AddType     image/svg+xml                           svg svgz
+    AddEncoding gzip                                    svgz
+
+  # Other
+    AddType application/octet-stream                    safariextz
+    AddType application/x-chrome-extension              crx
+    AddType application/x-opera-extension               oex
+    AddType application/x-shockwave-flash               swf
+    AddType application/x-web-app-manifest+json         webapp
+    AddType application/x-xpinstall                     xpi
+    AddType application/xml                             atom rdf rss xml
+    AddType image/webp                                  webp
+    AddType image/x-icon                                ico
+    AddType text/cache-manifest                         appcache manifest
+    AddType text/vtt                                    vtt
+    AddType text/x-component                            htc
+    AddType text/x-vcard                                vcf
+
+</IfModule>
+
+# ------------------------------------------------------------------------------
+# | UTF-8 encoding                                                             |
+# ------------------------------------------------------------------------------
+
+# Use UTF-8 encoding for anything served as `text/html` or `text/plain`.
+AddDefaultCharset utf-8
+
+# Force UTF-8 for certain file formats.
+<IfModule mod_mime.c>
+    AddCharset utf-8 .atom .css .js .json .rss .vtt .webapp .xml
+</IfModule>
+
+
+# ##############################################################################
+# # URL REWRITES                                                               #
+# ##############################################################################
+
+# ------------------------------------------------------------------------------
+# | Rewrite engine                                                             |
+# ------------------------------------------------------------------------------
+
+# Turning on the rewrite engine and enabling the `FollowSymLinks` option is
+# necessary for the following directives to work.
+
+# If your web host doesn't allow the `FollowSymlinks` option, you may need to
+# comment it out and use `Options +SymLinksIfOwnerMatch` but, be aware of the
+# performance impact: http://httpd.apache.org/docs/current/misc/perf-tuning.html#symlinks
+
+# Also, some cloud hosting services require `RewriteBase` to be set:
+# http://www.rackspace.com/knowledge_center/frequently-asked-question/why-is-mod-rewrite-not-working-on-my-site
+
+<IfModule mod_rewrite.c>
+    Options +FollowSymlinks
+  # Options +SymLinksIfOwnerMatch
+    RewriteEngine On
+  # RewriteBase /
+</IfModule>
+
+# ------------------------------------------------------------------------------
+# | Suppressing / Forcing the "www." at the beginning of URLs                  |
+# ------------------------------------------------------------------------------
+
+# The same content should never be available under two different URLs especially
+# not with and without "www." at the beginning. This can cause SEO problems
+# (duplicate content), therefore, you should choose one of the alternatives and
+# redirect the other one.
+
+# By default option 1 (no "www.") is activated:
+# http://no-www.org/faq.php?q=class_b
+
+# If you'd prefer to use option 2, just comment out all the lines from option 1
+# and uncomment the ones from option 2.
+
+# IMPORTANT: NEVER USE BOTH RULES AT THE SAME TIME!
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+# Option 1: rewrite www.example.com → example.com
+
+<IfModule mod_rewrite.c>
+    RewriteCond %{HTTPS} !=on
+    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
+    RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
+</IfModule>
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+# Option 2: rewrite example.com → www.example.com
+
+# Be aware that the following might not be a good idea if you use "real"
+# subdomains for certain parts of your website.
+
+# <IfModule mod_rewrite.c>
+#    RewriteCond %{HTTPS} !=on
+#    RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
+#    RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
+# </IfModule>
+
+
+# ##############################################################################
+# # SECURITY                                                                   #
+# ##############################################################################
+
+# ------------------------------------------------------------------------------
+# | Content Security Policy (CSP)                                              |
+# ------------------------------------------------------------------------------
+
+# You can mitigate the risk of cross-site scripting and other content-injection
+# attacks by setting a Content Security Policy which whitelists trusted sources
+# of content for your site.
+
+# The example header below allows ONLY scripts that are loaded from the current
+# site's origin (no inline scripts, no CDN, etc). This almost certainly won't
+# work as-is for your site!
+
+# To get all the details you'll need to craft a reasonable policy for your site,
+# read: http://html5rocks.com/en/tutorials/security/content-security-policy (or
+# see the specification: http://w3.org/TR/CSP).
+
+# <IfModule mod_headers.c>
+#    Header set Content-Security-Policy "script-src 'self'; object-src 'self'"
+#    <FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webapp|webm|webp|woff|xml|xpi)$">
+#        Header unset Content-Security-Policy
+#    </FilesMatch>
+# </IfModule>
+
+# ------------------------------------------------------------------------------
+# | File access                                                                |
+# ------------------------------------------------------------------------------
+
+# Block access to directories without a default document.
+# Usually you should leave this uncommented because you shouldn't allow anyone
+# to surf through every directory on your server (which may includes rather
+# private places like the CMS's directories).
+
+<IfModule mod_autoindex.c>
+    Options -Indexes
+</IfModule>
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+# Block access to hidden files and directories.
+# This includes directories used by version control systems such as Git and SVN.
+
+<IfModule mod_rewrite.c>
+    RewriteCond %{SCRIPT_FILENAME} -d [OR]
+    RewriteCond %{SCRIPT_FILENAME} -f
+    RewriteRule "(^|/)\." - [F]
+</IfModule>
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+# Block access to backup and source files.
+# These files may be left by some text editors and can pose a great security
+# danger when anyone has access to them.
+
+<FilesMatch "(^#.*#|\.(bak|config|dist|fla|inc|ini|log|psd|sh|sql|sw[op])|~)$">
+    Order allow,deny
+    Deny from all
+    Satisfy All
+</FilesMatch>
+
+# ------------------------------------------------------------------------------
+# | Secure Sockets Layer (SSL)                                                 |
+# ------------------------------------------------------------------------------
+
+# Rewrite secure requests properly to prevent SSL certificate warnings, e.g.:
+# prevent `https://www.example.com` when your certificate only allows
+# `https://secure.example.com`.
+
+# <IfModule mod_rewrite.c>
+#    RewriteCond %{SERVER_PORT} !^443
+#    RewriteRule ^ https://example-domain-please-change-me.com%{REQUEST_URI} [R=301,L]
+# </IfModule>
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+# Force client-side SSL redirection.
+
+# If a user types "example.com" in his browser, the above rule will redirect him
+# to the secure version of the site. That still leaves a window of opportunity
+# (the initial HTTP connection) for an attacker to downgrade or redirect the
+# request. The following header ensures that browser will ONLY connect to your
+# server via HTTPS, regardless of what the users type in the address bar.
+# http://www.html5rocks.com/en/tutorials/security/transport-layer-security/
+
+# <IfModule mod_headers.c>
+#    Header set Strict-Transport-Security max-age=16070400;
+# </IfModule>
+
+# ------------------------------------------------------------------------------
+# | Server software information                                                |
+# ------------------------------------------------------------------------------
+
+# Avoid displaying the exact Apache version number, the description of the
+# generic OS-type and the information about Apache's compiled-in modules.
+
+# ADD THIS DIRECTIVE IN THE `httpd.conf` AS IT WILL NOT WORK IN THE `.htaccess`!
+
+# ServerTokens Prod
+
+
+# ##############################################################################
+# # WEB PERFORMANCE                                                            #
+# ##############################################################################
+
+# ------------------------------------------------------------------------------
+# | Compression                                                                |
+# ------------------------------------------------------------------------------
+
+<IfModule mod_deflate.c>
+
+    # Force compression for mangled headers.
+    # http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping
+    <IfModule mod_setenvif.c>
+        <IfModule mod_headers.c>
+            SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
+            RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
+        </IfModule>
+    </IfModule>
+
+    # Compress all output labeled with one of the following MIME-types
+    # (for Apache versions below 2.3.7, you don't need to enable `mod_filter`
+    #  and can remove the `<IfModule mod_filter.c>` and `</IfModule>` lines
+    #  as `AddOutputFilterByType` is still in the core directives).
+    <IfModule mod_filter.c>
+        AddOutputFilterByType DEFLATE application/atom+xml \
+                                      application/javascript \
+                                      application/json \
+                                      application/rss+xml \
+                                      application/vnd.ms-fontobject \
+                                      application/x-font-ttf \
+                                      application/x-web-app-manifest+json \
+                                      application/xhtml+xml \
+                                      application/xml \
+                                      font/opentype \
+                                      image/svg+xml \
+                                      image/x-icon \
+                                      text/css \
+                                      text/html \
+                                      text/plain \
+                                      text/x-component \
+                                      text/xml
+    </IfModule>
+
+</IfModule>
+
+# ------------------------------------------------------------------------------
+# | Content transformations                                                    |
+# ------------------------------------------------------------------------------
+
+# Prevent some of the mobile network providers from modifying the content of
+# your site: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.5.
+
+# <IfModule mod_headers.c>
+#    Header set Cache-Control "no-transform"
+# </IfModule>
+
+# ------------------------------------------------------------------------------
+# | ETag removal                                                               |
+# ------------------------------------------------------------------------------
+
+# Since we're sending far-future expires headers (see below), ETags can
+# be removed: http://developer.yahoo.com/performance/rules.html#etags.
+
+# `FileETag None` is not enough for every server.
+<IfModule mod_headers.c>
+    Header unset ETag
+</IfModule>
+
+FileETag None
+
+# ------------------------------------------------------------------------------
+# | Expires headers (for better cache control)                                 |
+# ------------------------------------------------------------------------------
+
+# The following expires headers are set pretty far in the future. If you don't
+# control versioning with filename-based cache busting, consider lowering the
+# cache time for resources like CSS and JS to something like 1 week.
+
+<IfModule mod_expires.c>
+
+    ExpiresActive on
+    ExpiresDefault                                      "access plus 1 month"
+
+  # CSS
+    ExpiresByType text/css                              "access plus 1 year"
+
+  # Data interchange
+    ExpiresByType application/json                      "access plus 0 seconds"
+    ExpiresByType application/xml                       "access plus 0 seconds"
+    ExpiresByType text/xml                              "access plus 0 seconds"
+
+  # Favicon (cannot be renamed!)
+    ExpiresByType image/x-icon                          "access plus 1 week"
+
+  # HTML components (HTCs)
+    ExpiresByType text/x-component                      "access plus 1 month"
+
+  # HTML
+    ExpiresByType text/html                             "access plus 0 seconds"
+
+  # JavaScript
+    ExpiresByType application/javascript                "access plus 1 year"
+
+  # Manifest files
+    ExpiresByType application/x-web-app-manifest+json   "access plus 0 seconds"
+    ExpiresByType text/cache-manifest                   "access plus 0 seconds"
+
+  # Media
+    ExpiresByType audio/ogg                             "access plus 1 month"
+    ExpiresByType image/gif                             "access plus 1 month"
+    ExpiresByType image/jpeg                            "access plus 1 month"
+    ExpiresByType image/png                             "access plus 1 month"
+    ExpiresByType video/mp4                             "access plus 1 month"
+    ExpiresByType video/ogg                             "access plus 1 month"
+    ExpiresByType video/webm                            "access plus 1 month"
+
+  # Web feeds
+    ExpiresByType application/atom+xml                  "access plus 1 hour"
+    ExpiresByType application/rss+xml                   "access plus 1 hour"
+
+  # Web fonts
+    ExpiresByType application/font-woff                 "access plus 1 month"
+    ExpiresByType application/vnd.ms-fontobject         "access plus 1 month"
+    ExpiresByType application/x-font-ttf                "access plus 1 month"
+    ExpiresByType font/opentype                         "access plus 1 month"
+    ExpiresByType image/svg+xml                         "access plus 1 month"
+
+</IfModule>
+
+# ------------------------------------------------------------------------------
+# | Filename-based cache busting                                               |
+# ------------------------------------------------------------------------------
+
+# If you're not using a build process to manage your filename version revving,
+# you might want to consider enabling the following directives to route all
+# requests such as `/css/style.12345.css` to `/css/style.css`.
+
+# To understand why this is important and a better idea than `*.css?v231`, read:
+# http://stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring
+
+# <IfModule mod_rewrite.c>
+#    RewriteCond %{REQUEST_FILENAME} !-f
+#    RewriteCond %{REQUEST_FILENAME} !-d
+#    RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ $1.$3 [L]
+# </IfModule>
+
+# ------------------------------------------------------------------------------
+# | File concatenation                                                         |
+# ------------------------------------------------------------------------------
+
+# Allow concatenation from within specific CSS and JS files, e.g.:
+# Inside of `script.combined.js` you could have
+#   <!--#include file="libs/jquery.js" -->
+#   <!--#include file="plugins/jquery.idletimer.js" -->
+# and they would be included into this single file.
+
+# <IfModule mod_include.c>
+#    <FilesMatch "\.combined\.js$">
+#        Options +Includes
+#        AddOutputFilterByType INCLUDES application/javascript application/json
+#        SetOutputFilter INCLUDES
+#    </FilesMatch>
+#    <FilesMatch "\.combined\.css$">
+#        Options +Includes
+#        AddOutputFilterByType INCLUDES text/css
+#        SetOutputFilter INCLUDES
+#    </FilesMatch>
+# </IfModule>
+
+# ------------------------------------------------------------------------------
+# | Persistent connections                                                     |
+# ------------------------------------------------------------------------------
+
+# Allow multiple requests to be sent over the same TCP connection:
+# http://httpd.apache.org/docs/current/en/mod/core.html#keepalive.
+
+# Enable if you serve a lot of static content but, be aware of the
+# possible disadvantages!
+
+# <IfModule mod_headers.c>
+#    Header set Connection Keep-Alive
+# </IfModule>
diff --git a/public/app/0e6d6720.vendor.js b/public/app/0e6d6720.vendor.js
new file mode 100644
index 0000000..34a55a5
--- /dev/null
+++ b/public/app/0e6d6720.vendor.js
@@ -0,0 +1,84 @@
+function $notificationProvider(){function a(a,c,d){function e(c,d){function f(){d=angular.extend({focusWindowOnClick:!0},b.options||{},d);try{g.baseNotification=new a.Notification(c,d)}catch(e){return}d.delay&&setTimeout(angular.bind(g,g.close),d.delay),d.focusWindowOnClick&&g.$on("click",function(){a.focus()}),g._events.forEach(function(a){g.$on.apply(g,a)}),g._events=[]}if(!a.Notification)return!1;d=d||{};var g=this;return this._events=[],"granted"===a.Notification.permission?f():void("denied"!==a.Notification.permission&&e.requestPermission().then(f))}function f(a,b){return new e(a,b)}return e.prototype.$on=function(a,b){function d(){var a=arguments;c.$apply(function(){b.apply(e,a)})}var e=this;return this.baseNotification?(this.baseNotification.addEventListener(a,d),function(){this.baseNotification.removeListener(event,d)}):this._events.push([a,b])},e.prototype.close=function(){this.baseNotification&&this.baseNotification.close()},e.requestPermission=function(){return d(function(b,c){return a.Notification?void a.Notification.requestPermission(function(c){a.Notification.permission=a.Notification.permission||c,b(a.Notification.permission)}):c()})},f.requestPermission=e.requestPermission,f}var b=this;this.$get=["$window","$rootScope","$q",a],this.setOptions=function(a){this.options=a}}function wizardButtonDirective(a){angular.module("mgo-angular-wizard").directive(a,function(){return{restrict:"A",replace:!1,require:"^wizard",link:function(b,c,d,e){c.on("click",function(c){c.preventDefault(),b.$apply(function(){b.$eval(d[a]),e[a.replace("wz","").toLowerCase()]()})})}}})}function validElementString(a){try{return 0!==angular.element(a).length}catch(b){return!1}}function registerTextAngularTool(a,b){if(!a||""===a||taTools.hasOwnProperty(a))throw"textAngular Error: A unique name is required for a Tool Definition";if(b.display&&(""===b.display||!validElementString(b.display))||!b.display&&!b.buttontext&&!b.iconclass)throw'textAngular Error: Tool Definition for "'+a+'" does not have a valid display/iconclass/buttontext value';taTools[a]=b}if(function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){function c(a){var b="length"in a&&a.length,c=_.type(a);return"function"===c||_.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}function d(a,b,c){if(_.isFunction(b))return _.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return _.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(ha.test(b))return _.filter(b,a,c);b=_.filter(b,a)}return _.grep(a,function(a){return U.call(b,a)>=0!==c})}function e(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function f(a){var b=oa[a]={};return _.each(a.match(na)||[],function(a,c){b[c]=!0}),b}function g(){Z.removeEventListener("DOMContentLoaded",g,!1),a.removeEventListener("load",g,!1),_.ready()}function h(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=_.expando+h.uid++}function i(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(ua,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:ta.test(c)?_.parseJSON(c):c}catch(e){}sa.set(a,b,c)}else c=void 0;return c}function j(){return!0}function k(){return!1}function l(){try{return Z.activeElement}catch(a){}}function m(a,b){return _.nodeName(a,"table")&&_.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function n(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function o(a){var b=Ka.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function p(a,b){for(var c=0,d=a.length;d>c;c++)ra.set(a[c],"globalEval",!b||ra.get(b[c],"globalEval"))}function q(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(ra.hasData(a)&&(f=ra.access(a),g=ra.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)_.event.add(b,e,j[e][c])}sa.hasData(a)&&(h=sa.access(a),i=_.extend({},h),sa.set(b,i))}}function r(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&_.nodeName(a,b)?_.merge([a],c):c}function s(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ya.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function t(b,c){var d,e=_(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:_.css(e[0],"display");return e.detach(),f}function u(a){var b=Z,c=Oa[a];return c||(c=t(a,b),"none"!==c&&c||(Na=(Na||_("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=Na[0].contentDocument,b.write(),b.close(),c=t(a,b),Na.detach()),Oa[a]=c),c}function v(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||_.contains(a.ownerDocument,a)||(g=_.style(a,b)),Qa.test(g)&&Pa.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function w(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}function x(a,b){if(b in a)return b;for(var c=b[0].toUpperCase()+b.slice(1),d=b,e=Xa.length;e--;)if(b=Xa[e]+c,b in a)return b;return d}function y(a,b,c){var d=Ta.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function z(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=_.css(a,c+wa[f],!0,e)),d?("content"===c&&(g-=_.css(a,"padding"+wa[f],!0,e)),"margin"!==c&&(g-=_.css(a,"border"+wa[f]+"Width",!0,e))):(g+=_.css(a,"padding"+wa[f],!0,e),"padding"!==c&&(g+=_.css(a,"border"+wa[f]+"Width",!0,e)));return g}function A(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g="border-box"===_.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=v(a,b,f),(0>e||null==e)&&(e=a.style[b]),Qa.test(e))return e;d=g&&(Y.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+z(a,b,c||(g?"border":"content"),d,f)+"px"}function B(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=ra.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&xa(d)&&(f[g]=ra.access(d,"olddisplay",u(d.nodeName)))):(e=xa(d),"none"===c&&e||ra.set(d,"olddisplay",e?c:_.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function C(a,b,c,d,e){return new C.prototype.init(a,b,c,d,e)}function D(){return setTimeout(function(){Ya=void 0}),Ya=_.now()}function E(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=wa[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function F(a,b,c){for(var d,e=(cb[b]||[]).concat(cb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function G(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},n=a.style,o=a.nodeType&&xa(a),p=ra.get(a,"fxshow");c.queue||(h=_._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,_.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[n.overflow,n.overflowX,n.overflowY],j=_.css(a,"display"),k="none"===j?ra.get(a,"olddisplay")||u(a.nodeName):j,"inline"===k&&"none"===_.css(a,"float")&&(n.display="inline-block")),c.overflow&&(n.overflow="hidden",l.always(function(){n.overflow=c.overflow[0],n.overflowX=c.overflow[1],n.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],$a.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(o?"hide":"show")){if("show"!==e||!p||void 0===p[d])continue;o=!0}m[d]=p&&p[d]||_.style(a,d)}else j=void 0;if(_.isEmptyObject(m))"inline"===("none"===j?u(a.nodeName):j)&&(n.display=j);else{p?"hidden"in p&&(o=p.hidden):p=ra.access(a,"fxshow",{}),f&&(p.hidden=!o),o?_(a).show():l.done(function(){_(a).hide()}),l.done(function(){var b;ra.remove(a,"fxshow");for(b in m)_.style(a,b,m[b])});for(d in m)g=F(o?p[d]:0,d,l),d in p||(p[d]=g.start,o&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function H(a,b){var c,d,e,f,g;for(c in a)if(d=_.camelCase(c),e=b[d],f=a[c],_.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=_.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function I(a,b,c){var d,e,f=0,g=bb.length,h=_.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Ya||D(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:_.extend({},b),opts:_.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Ya||D(),duration:c.duration,tweens:[],createTween:function(b,c){var d=_.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(H(k,j.opts.specialEasing);g>f;f++)if(d=bb[f].call(j,a,k,j.opts))return d;return _.map(k,F,j),_.isFunction(j.opts.start)&&j.opts.start.call(a,j),_.fx.timer(_.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function J(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(na)||[];if(_.isFunction(c))for(;d=f[e++];)"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function K(a,b,c,d){function e(h){var i;return f[h]=!0,_.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||g||f[j]?g?!(i=j):void 0:(b.dataTypes.unshift(j),e(j),!1)}),i}var f={},g=a===tb;return e(b.dataTypes[0])||!f["*"]&&e("*")}function L(a,b){var c,d,e=_.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&_.extend(!0,a,d),a}function M(a,b,c){for(var d,e,f,g,h=a.contents,i=a.dataTypes;"*"===i[0];)i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function N(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];for(f=k.shift();f;)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}function O(a,b,c,d){var e;if(_.isArray(b))_.each(b,function(b,e){c||yb.test(a)?d(a,e):O(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==_.type(b))d(a,b);else for(e in b)O(a+"["+e+"]",b[e],c,d)}function P(a){return _.isWindow(a)?a:9===a.nodeType&&a.defaultView}var Q=[],R=Q.slice,S=Q.concat,T=Q.push,U=Q.indexOf,V={},W=V.toString,X=V.hasOwnProperty,Y={},Z=a.document,$="2.1.4",_=function(a,b){return new _.fn.init(a,b)},aa=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,ba=/^-ms-/,ca=/-([\da-z])/gi,da=function(a,b){return b.toUpperCase()};_.fn=_.prototype={jquery:$,constructor:_,selector:"",length:0,toArray:function(){return R.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:R.call(this)},pushStack:function(a){var b=_.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return _.each(this,a,b)},map:function(a){return this.pushStack(_.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(R.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:T,sort:Q.sort,splice:Q.splice},_.extend=_.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||_.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(_.isPlainObject(d)||(e=_.isArray(d)))?(e?(e=!1,f=c&&_.isArray(c)?c:[]):f=c&&_.isPlainObject(c)?c:{},g[b]=_.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},_.extend({expando:"jQuery"+($+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===_.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!_.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==_.type(a)||a.nodeType||_.isWindow(a)?!1:a.constructor&&!X.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?V[W.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=_.trim(a),a&&(1===a.indexOf("use strict")?(b=Z.createElement("script"),b.text=a,Z.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(ba,"ms-").replace(ca,da)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,d){var e,f=0,g=a.length,h=c(a);if(d){if(h)for(;g>f&&(e=b.apply(a[f],d),e!==!1);f++);else for(f in a)if(e=b.apply(a[f],d),e===!1)break}else if(h)for(;g>f&&(e=b.call(a[f],f,a[f]),e!==!1);f++);else for(f in a)if(e=b.call(a[f],f,a[f]),e===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(aa,"")},makeArray:function(a,b){var d=b||[];return null!=a&&(c(Object(a))?_.merge(d,"string"==typeof a?[a]:a):T.call(d,a)),d},inArray:function(a,b,c){return null==b?-1:U.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,d){var e,f=0,g=a.length,h=c(a),i=[];if(h)for(;g>f;f++)e=b(a[f],f,d),null!=e&&i.push(e);else for(f in a)e=b(a[f],f,d),null!=e&&i.push(e);return S.apply([],i)},guid:1,proxy:function(a,b){var c,d,e;return"string"==typeof b&&(c=a[b],b=a,a=c),_.isFunction(a)?(d=R.call(arguments,2),e=function(){return a.apply(b||this,d.concat(R.call(arguments)))},e.guid=a.guid=a.guid||_.guid++,e):void 0},now:Date.now,support:Y}),_.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){V["[object "+b+"]"]=b.toLowerCase()});var ea=function(a){function b(a,b,c,d){var e,f,g,h,i,j,l,n,o,p;if((b?b.ownerDocument||b:O)!==G&&F(b),b=b||G,c=c||[],h=b.nodeType,"string"!=typeof a||!a||1!==h&&9!==h&&11!==h)return c;if(!d&&I){if(11!==h&&(e=sa.exec(a)))if(g=e[1]){if(9===h){if(f=b.getElementById(g),!f||!f.parentNode)return c;if(f.id===g)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(g))&&M(b,f)&&f.id===g)return c.push(f),c}else{if(e[2])return $.apply(c,b.getElementsByTagName(a)),c;if((g=e[3])&&v.getElementsByClassName)return $.apply(c,b.getElementsByClassName(g)),c}if(v.qsa&&(!J||!J.test(a))){if(n=l=N,o=b,p=1!==h&&a,1===h&&"object"!==b.nodeName.toLowerCase()){for(j=z(a),(l=b.getAttribute("id"))?n=l.replace(ua,"\\$&"):b.setAttribute("id",n),n="[id='"+n+"'] ",i=j.length;i--;)j[i]=n+m(j[i]);o=ta.test(a)&&k(b.parentNode)||b,p=j.join(",")}if(p)try{return $.apply(c,o.querySelectorAll(p)),c}catch(q){}finally{l||b.removeAttribute("id")}}}return B(a.replace(ia,"$1"),b,c,d)}function c(){function a(c,d){return b.push(c+" ")>w.cacheLength&&delete a[b.shift()],a[c+" "]=d}var b=[];return a}function d(a){return a[N]=!0,a}function e(a){var b=G.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function f(a,b){for(var c=a.split("|"),d=a.length;d--;)w.attrHandle[c[d]]=b}function g(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||V)-(~a.sourceIndex||V);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function h(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function i(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function j(a){return d(function(b){return b=+b,d(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function k(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}function l(){}function m(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function n(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=Q++;return b.first?function(b,c,f){for(;b=b[d];)if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[P,f];if(g){for(;b=b[d];)if((1===b.nodeType||e)&&a(b,c,g))return!0}else for(;b=b[d];)if(1===b.nodeType||e){if(i=b[N]||(b[N]={}),(h=i[d])&&h[0]===P&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function o(a){return a.length>1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function p(a,c,d){for(var e=0,f=c.length;f>e;e++)b(a,c[e],d);return d}function q(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function r(a,b,c,e,f,g){return e&&!e[N]&&(e=r(e)),f&&!f[N]&&(f=r(f,g)),d(function(d,g,h,i){var j,k,l,m=[],n=[],o=g.length,r=d||p(b||"*",h.nodeType?[h]:h,[]),s=!a||!d&&b?r:q(r,m,a,h,i),t=c?f||(d?a:o||e)?[]:g:s;if(c&&c(s,t,h,i),e)for(j=q(t,n),e(j,[],h,i),k=j.length;k--;)(l=j[k])&&(t[n[k]]=!(s[n[k]]=l));if(d){if(f||a){if(f){for(j=[],k=t.length;k--;)(l=t[k])&&j.push(s[k]=l);f(null,t=[],j,i)}for(k=t.length;k--;)(l=t[k])&&(j=f?aa(d,l):m[k])>-1&&(d[j]=!(g[j]=l))}}else t=q(t===g?t.splice(o,t.length):t),f?f(null,g,t,i):$.apply(g,t)})}function s(a){for(var b,c,d,e=a.length,f=w.relative[a[0].type],g=f||w.relative[" "],h=f?1:0,i=n(function(a){return a===b},g,!0),j=n(function(a){return aa(b,a)>-1},g,!0),k=[function(a,c,d){var e=!f&&(d||c!==C)||((b=c).nodeType?i(a,c,d):j(a,c,d));return b=null,e}];e>h;h++)if(c=w.relative[a[h].type])k=[n(o(k),c)];else{if(c=w.filter[a[h].type].apply(null,a[h].matches),c[N]){for(d=++h;e>d&&!w.relative[a[d].type];d++);return r(h>1&&o(k),h>1&&m(a.slice(0,h-1).concat({value:" "===a[h-2].type?"*":""})).replace(ia,"$1"),c,d>h&&s(a.slice(h,d)),e>d&&s(a=a.slice(d)),e>d&&m(a))}k.push(c)}return o(k)}function t(a,c){var e=c.length>0,f=a.length>0,g=function(d,g,h,i,j){var k,l,m,n=0,o="0",p=d&&[],r=[],s=C,t=d||f&&w.find.TAG("*",j),u=P+=null==s?1:Math.random()||.1,v=t.length;for(j&&(C=g!==G&&g);o!==v&&null!=(k=t[o]);o++){if(f&&k){for(l=0;m=a[l++];)if(m(k,g,h)){i.push(k);break}j&&(P=u)}e&&((k=!m&&k)&&n--,d&&p.push(k))}if(n+=o,e&&o!==n){for(l=0;m=c[l++];)m(p,r,g,h);if(d){if(n>0)for(;o--;)p[o]||r[o]||(r[o]=Y.call(i));r=q(r)}$.apply(i,r),j&&!d&&r.length>0&&n+c.length>1&&b.uniqueSort(i)}return j&&(P=u,C=s),p};return e?d(g):g}var u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N="sizzle"+1*new Date,O=a.document,P=0,Q=0,R=c(),S=c(),T=c(),U=function(a,b){return a===b&&(E=!0),0},V=1<<31,W={}.hasOwnProperty,X=[],Y=X.pop,Z=X.push,$=X.push,_=X.slice,aa=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},ba="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ca="[\\x20\\t\\r\\n\\f]",da="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ea=da.replace("w","w#"),fa="\\["+ca+"*("+da+")(?:"+ca+"*([*^$|!~]?=)"+ca+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ea+"))|)"+ca+"*\\]",ga=":("+da+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+fa+")*)|.*)\\)|)",ha=new RegExp(ca+"+","g"),ia=new RegExp("^"+ca+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ca+"+$","g"),ja=new RegExp("^"+ca+"*,"+ca+"*"),ka=new RegExp("^"+ca+"*([>+~]|"+ca+")"+ca+"*"),la=new RegExp("="+ca+"*([^\\]'\"]*?)"+ca+"*\\]","g"),ma=new RegExp(ga),na=new RegExp("^"+ea+"$"),oa={ID:new RegExp("^#("+da+")"),CLASS:new RegExp("^\\.("+da+")"),TAG:new RegExp("^("+da.replace("w","w*")+")"),ATTR:new RegExp("^"+fa),PSEUDO:new RegExp("^"+ga),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ca+"*(even|odd|(([+-]|)(\\d*)n|)"+ca+"*(?:([+-]|)"+ca+"*(\\d+)|))"+ca+"*\\)|)","i"),bool:new RegExp("^(?:"+ba+")$","i"),needsContext:new RegExp("^"+ca+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ca+"*((?:-\\d)?\\d*)"+ca+"*\\)|)(?=[^-]|$)","i")},pa=/^(?:input|select|textarea|button)$/i,qa=/^h\d$/i,ra=/^[^{]+\{\s*\[native \w/,sa=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ta=/[+~]/,ua=/'|\\/g,va=new RegExp("\\\\([\\da-f]{1,6}"+ca+"?|("+ca+")|.)","ig"),wa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},xa=function(){F()};try{$.apply(X=_.call(O.childNodes),O.childNodes),X[O.childNodes.length].nodeType}catch(ya){$={apply:X.length?function(a,b){Z.apply(a,_.call(b))}:function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}v=b.support={},y=b.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},F=b.setDocument=function(a){var b,c,d=a?a.ownerDocument||a:O;return d!==G&&9===d.nodeType&&d.documentElement?(G=d,H=d.documentElement,c=d.defaultView,c&&c!==c.top&&(c.addEventListener?c.addEventListener("unload",xa,!1):c.attachEvent&&c.attachEvent("onunload",xa)),I=!y(d),v.attributes=e(function(a){return a.className="i",!a.getAttribute("className")}),v.getElementsByTagName=e(function(a){return a.appendChild(d.createComment("")),!a.getElementsByTagName("*").length}),v.getElementsByClassName=ra.test(d.getElementsByClassName),v.getById=e(function(a){return H.appendChild(a).id=N,!d.getElementsByName||!d.getElementsByName(N).length}),v.getById?(w.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&I){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},w.filter.ID=function(a){var b=a.replace(va,wa);return function(a){return a.getAttribute("id")===b}}):(delete w.find.ID,w.filter.ID=function(a){var b=a.replace(va,wa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),w.find.TAG=v.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):v.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},w.find.CLASS=v.getElementsByClassName&&function(a,b){return I?b.getElementsByClassName(a):void 0},K=[],J=[],(v.qsa=ra.test(d.querySelectorAll))&&(e(function(a){H.appendChild(a).innerHTML="<a id='"+N+"'></a><select id='"+N+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&J.push("[*^$]="+ca+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||J.push("\\["+ca+"*(?:value|"+ba+")"),a.querySelectorAll("[id~="+N+"-]").length||J.push("~="),a.querySelectorAll(":checked").length||J.push(":checked"),a.querySelectorAll("a#"+N+"+*").length||J.push(".#.+[+~]")}),e(function(a){var b=d.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&J.push("name"+ca+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||J.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),J.push(",.*:")})),(v.matchesSelector=ra.test(L=H.matches||H.webkitMatchesSelector||H.mozMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&e(function(a){v.disconnectedMatch=L.call(a,"div"),L.call(a,"[s!='']:x"),K.push("!=",ga)}),J=J.length&&new RegExp(J.join("|")),K=K.length&&new RegExp(K.join("|")),b=ra.test(H.compareDocumentPosition),M=b||ra.test(H.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},U=b?function(a,b){if(a===b)return E=!0,0;var c=!a.compareDocumentPosition-!b.compareDocumentPosition;return c?c:(c=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&c||!v.sortDetached&&b.compareDocumentPosition(a)===c?a===d||a.ownerDocument===O&&M(O,a)?-1:b===d||b.ownerDocument===O&&M(O,b)?1:D?aa(D,a)-aa(D,b):0:4&c?-1:1)}:function(a,b){if(a===b)return E=!0,0;var c,e=0,f=a.parentNode,h=b.parentNode,i=[a],j=[b];if(!f||!h)return a===d?-1:b===d?1:f?-1:h?1:D?aa(D,a)-aa(D,b):0;if(f===h)return g(a,b);for(c=a;c=c.parentNode;)i.unshift(c);for(c=b;c=c.parentNode;)j.unshift(c);for(;i[e]===j[e];)e++;return e?g(i[e],j[e]):i[e]===O?-1:j[e]===O?1:0},d):G},b.matches=function(a,c){return b(a,null,null,c)},b.matchesSelector=function(a,c){if((a.ownerDocument||a)!==G&&F(a),c=c.replace(la,"='$1']"),v.matchesSelector&&I&&(!K||!K.test(c))&&(!J||!J.test(c)))try{var d=L.call(a,c);if(d||v.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return b(c,G,null,[a]).length>0},b.contains=function(a,b){return(a.ownerDocument||a)!==G&&F(a),M(a,b)},b.attr=function(a,b){(a.ownerDocument||a)!==G&&F(a);var c=w.attrHandle[b.toLowerCase()],d=c&&W.call(w.attrHandle,b.toLowerCase())?c(a,b,!I):void 0;return void 0!==d?d:v.attributes||!I?a.getAttribute(b):(d=a.getAttributeNode(b))&&d.specified?d.value:null},b.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},b.uniqueSort=function(a){var b,c=[],d=0,e=0;if(E=!v.detectDuplicates,D=!v.sortStable&&a.slice(0),a.sort(U),E){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return D=null,a},x=b.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(1===e||9===e||11===e){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=x(a)}else if(3===e||4===e)return a.nodeValue}else for(;b=a[d++];)c+=x(b);return c},w=b.selectors={cacheLength:50,createPseudo:d,match:oa,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(va,wa),a[3]=(a[3]||a[4]||a[5]||"").replace(va,wa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||b.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&b.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return oa.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&ma.test(c)&&(b=z(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(va,wa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=R[a+" "];return b||(b=new RegExp("(^|"+ca+")"+a+"("+ca+"|$)"))&&R(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,c,d){return function(e){var f=b.attr(e,a);return null==f?"!="===c:c?(f+="","="===c?f===d:"!="===c?f!==d:"^="===c?d&&0===f.indexOf(d):"*="===c?d&&f.indexOf(d)>-1:"$="===c?d&&f.slice(-d.length)===d:"~="===c?(" "+f.replace(ha," ")+" ").indexOf(d)>-1:"|="===c?f===d||f.slice(0,d.length+1)===d+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){for(;p;){for(l=b;l=l[p];)if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){for(k=q[N]||(q[N]={}),j=k[a]||[],n=j[0]===P&&j[1],m=j[0]===P&&j[2],l=n&&q.childNodes[n];l=++n&&l&&l[p]||(m=n=0)||o.pop();)if(1===l.nodeType&&++m&&l===b){k[a]=[P,n,m];break}}else if(s&&(j=(b[N]||(b[N]={}))[a])&&j[0]===P)m=j[1];else for(;(l=++n&&l&&l[p]||(m=n=0)||o.pop())&&((h?l.nodeName.toLowerCase()!==r:1!==l.nodeType)||!++m||(s&&((l[N]||(l[N]={}))[a]=[P,m]),l!==b)););return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,c){var e,f=w.pseudos[a]||w.setFilters[a.toLowerCase()]||b.error("unsupported pseudo: "+a);return f[N]?f(c):f.length>1?(e=[a,a,"",c],w.setFilters.hasOwnProperty(a.toLowerCase())?d(function(a,b){for(var d,e=f(a,c),g=e.length;g--;)d=aa(a,e[g]),a[d]=!(b[d]=e[g])}):function(a){return f(a,0,e)}):f}},pseudos:{not:d(function(a){var b=[],c=[],e=A(a.replace(ia,"$1"));return e[N]?d(function(a,b,c,d){for(var f,g=e(a,null,d,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,d,f){return b[0]=a,e(b,null,f,c),b[0]=null,!c.pop()}}),has:d(function(a){return function(c){return b(a,c).length>0}}),contains:d(function(a){return a=a.replace(va,wa),function(b){return(b.textContent||b.innerText||x(b)).indexOf(a)>-1}}),lang:d(function(a){return na.test(a||"")||b.error("unsupported lang: "+a),a=a.replace(va,wa).toLowerCase(),function(b){var c;do if(c=I?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===H},focus:function(a){return a===G.activeElement&&(!G.hasFocus||G.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!w.pseudos.empty(a)},header:function(a){return qa.test(a.nodeName)},input:function(a){return pa.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:j(function(){return[0]}),last:j(function(a,b){return[b-1]}),eq:j(function(a,b,c){return[0>c?c+b:c]}),even:j(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:j(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:j(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:j(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},w.pseudos.nth=w.pseudos.eq;for(u in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[u]=h(u);for(u in{submit:!0,reset:!0})w.pseudos[u]=i(u);return l.prototype=w.filters=w.pseudos,w.setFilters=new l,z=b.tokenize=function(a,c){var d,e,f,g,h,i,j,k=S[a+" "];if(k)return c?0:k.slice(0);for(h=a,i=[],j=w.preFilter;h;){(!d||(e=ja.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),d=!1,(e=ka.exec(h))&&(d=e.shift(),f.push({value:d,type:e[0].replace(ia," ")}),h=h.slice(d.length));for(g in w.filter)!(e=oa[g].exec(h))||j[g]&&!(e=j[g](e))||(d=e.shift(),f.push({value:d,type:g,matches:e}),h=h.slice(d.length));if(!d)break}return c?h.length:h?b.error(a):S(a,i).slice(0)},A=b.compile=function(a,b){
+var c,d=[],e=[],f=T[a+" "];if(!f){for(b||(b=z(a)),c=b.length;c--;)f=s(b[c]),f[N]?d.push(f):e.push(f);f=T(a,t(e,d)),f.selector=a}return f},B=b.select=function(a,b,c,d){var e,f,g,h,i,j="function"==typeof a&&a,l=!d&&z(a=j.selector||a);if(c=c||[],1===l.length){if(f=l[0]=l[0].slice(0),f.length>2&&"ID"===(g=f[0]).type&&v.getById&&9===b.nodeType&&I&&w.relative[f[1].type]){if(b=(w.find.ID(g.matches[0].replace(va,wa),b)||[])[0],!b)return c;j&&(b=b.parentNode),a=a.slice(f.shift().value.length)}for(e=oa.needsContext.test(a)?0:f.length;e--&&(g=f[e],!w.relative[h=g.type]);)if((i=w.find[h])&&(d=i(g.matches[0].replace(va,wa),ta.test(f[0].type)&&k(b.parentNode)||b))){if(f.splice(e,1),a=d.length&&m(f),!a)return $.apply(c,d),c;break}}return(j||A(a,l))(d,b,!I,c,ta.test(a)&&k(b.parentNode)||b),c},v.sortStable=N.split("").sort(U).join("")===N,v.detectDuplicates=!!E,F(),v.sortDetached=e(function(a){return 1&a.compareDocumentPosition(G.createElement("div"))}),e(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||f("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),v.attributes&&e(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||f("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),e(function(a){return null==a.getAttribute("disabled")})||f(ba,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),b}(a);_.find=ea,_.expr=ea.selectors,_.expr[":"]=_.expr.pseudos,_.unique=ea.uniqueSort,_.text=ea.getText,_.isXMLDoc=ea.isXML,_.contains=ea.contains;var fa=_.expr.match.needsContext,ga=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,ha=/^.[^:#\[\.,]*$/;_.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?_.find.matchesSelector(d,a)?[d]:[]:_.find.matches(a,_.grep(b,function(a){return 1===a.nodeType}))},_.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(_(a).filter(function(){for(b=0;c>b;b++)if(_.contains(e[b],this))return!0}));for(b=0;c>b;b++)_.find(a,e[b],d);return d=this.pushStack(c>1?_.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(d(this,a||[],!1))},not:function(a){return this.pushStack(d(this,a||[],!0))},is:function(a){return!!d(this,"string"==typeof a&&fa.test(a)?_(a):a||[],!1).length}});var ia,ja=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,ka=_.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:ja.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||ia).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof _?b[0]:b,_.merge(this,_.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:Z,!0)),ga.test(c[1])&&_.isPlainObject(b))for(c in b)_.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=Z.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=Z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):_.isFunction(a)?"undefined"!=typeof ia.ready?ia.ready(a):a(_):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),_.makeArray(a,this))};ka.prototype=_.fn,ia=_(Z);var la=/^(?:parents|prev(?:Until|All))/,ma={children:!0,contents:!0,next:!0,prev:!0};_.extend({dir:function(a,b,c){for(var d=[],e=void 0!==c;(a=a[b])&&9!==a.nodeType;)if(1===a.nodeType){if(e&&_(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),_.fn.extend({has:function(a){var b=_(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(_.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=fa.test(a)||"string"!=typeof a?_(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&_.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?_.unique(f):f)},index:function(a){return a?"string"==typeof a?U.call(_(a),this[0]):U.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(_.unique(_.merge(this.get(),_(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}}),_.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return _.dir(a,"parentNode")},parentsUntil:function(a,b,c){return _.dir(a,"parentNode",c)},next:function(a){return e(a,"nextSibling")},prev:function(a){return e(a,"previousSibling")},nextAll:function(a){return _.dir(a,"nextSibling")},prevAll:function(a){return _.dir(a,"previousSibling")},nextUntil:function(a,b,c){return _.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return _.dir(a,"previousSibling",c)},siblings:function(a){return _.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return _.sibling(a.firstChild)},contents:function(a){return a.contentDocument||_.merge([],a.childNodes)}},function(a,b){_.fn[a]=function(c,d){var e=_.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=_.filter(d,e)),this.length>1&&(ma[a]||_.unique(e),la.test(a)&&e.reverse()),this.pushStack(e)}});var na=/\S+/g,oa={};_.Callbacks=function(a){a="string"==typeof a?oa[a]||f(a):_.extend({},a);var b,c,d,e,g,h,i=[],j=!a.once&&[],k=function(f){for(b=a.memory&&f,c=!0,h=e||0,e=0,g=i.length,d=!0;i&&g>h;h++)if(i[h].apply(f[0],f[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,i&&(j?j.length&&k(j.shift()):b?i=[]:l.disable())},l={add:function(){if(i){var c=i.length;!function f(b){_.each(b,function(b,c){var d=_.type(c);"function"===d?a.unique&&l.has(c)||i.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),d?g=i.length:b&&(e=c,k(b))}return this},remove:function(){return i&&_.each(arguments,function(a,b){for(var c;(c=_.inArray(b,i,c))>-1;)i.splice(c,1),d&&(g>=c&&g--,h>=c&&h--)}),this},has:function(a){return a?_.inArray(a,i)>-1:!(!i||!i.length)},empty:function(){return i=[],g=0,this},disable:function(){return i=j=b=void 0,this},disabled:function(){return!i},lock:function(){return j=void 0,b||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return!i||c&&!j||(b=b||[],b=[a,b.slice?b.slice():b],d?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!c}};return l},_.extend({Deferred:function(a){var b=[["resolve","done",_.Callbacks("once memory"),"resolved"],["reject","fail",_.Callbacks("once memory"),"rejected"],["notify","progress",_.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return _.Deferred(function(c){_.each(b,function(b,f){var g=_.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&_.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?_.extend(a,d):d}},e={};return d.pipe=d.then,_.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b,c,d,e=0,f=R.call(arguments),g=f.length,h=1!==g||a&&_.isFunction(a.promise)?g:0,i=1===h?a:_.Deferred(),j=function(a,c,d){return function(e){c[a]=this,d[a]=arguments.length>1?R.call(arguments):e,d===b?i.notifyWith(c,d):--h||i.resolveWith(c,d)}};if(g>1)for(b=new Array(g),c=new Array(g),d=new Array(g);g>e;e++)f[e]&&_.isFunction(f[e].promise)?f[e].promise().done(j(e,d,f)).fail(i.reject).progress(j(e,c,b)):--h;return h||i.resolveWith(d,f),i.promise()}});var pa;_.fn.ready=function(a){return _.ready.promise().done(a),this},_.extend({isReady:!1,readyWait:1,holdReady:function(a){a?_.readyWait++:_.ready(!0)},ready:function(a){(a===!0?--_.readyWait:_.isReady)||(_.isReady=!0,a!==!0&&--_.readyWait>0||(pa.resolveWith(Z,[_]),_.fn.triggerHandler&&(_(Z).triggerHandler("ready"),_(Z).off("ready"))))}}),_.ready.promise=function(b){return pa||(pa=_.Deferred(),"complete"===Z.readyState?setTimeout(_.ready):(Z.addEventListener("DOMContentLoaded",g,!1),a.addEventListener("load",g,!1))),pa.promise(b)},_.ready.promise();var qa=_.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===_.type(c)){e=!0;for(h in c)_.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,_.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(_(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};_.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType},h.uid=1,h.accepts=_.acceptData,h.prototype={key:function(a){if(!h.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=h.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,_.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(_.isEmptyObject(f))_.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,_.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{_.isArray(b)?d=b.concat(b.map(_.camelCase)):(e=_.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(na)||[])),c=d.length;for(;c--;)delete g[d[c]]}},hasData:function(a){return!_.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var ra=new h,sa=new h,ta=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ua=/([A-Z])/g;_.extend({hasData:function(a){return sa.hasData(a)||ra.hasData(a)},data:function(a,b,c){return sa.access(a,b,c)},removeData:function(a,b){sa.remove(a,b)},_data:function(a,b,c){return ra.access(a,b,c)},_removeData:function(a,b){ra.remove(a,b)}}),_.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=sa.get(f),1===f.nodeType&&!ra.get(f,"hasDataAttrs"))){for(c=g.length;c--;)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=_.camelCase(d.slice(5)),i(f,d,e[d])));ra.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){sa.set(this,a)}):qa(this,function(b){var c,d=_.camelCase(a);if(f&&void 0===b){if(c=sa.get(f,a),void 0!==c)return c;if(c=sa.get(f,d),void 0!==c)return c;if(c=i(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=sa.get(this,d);sa.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&sa.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){sa.remove(this,a)})}}),_.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=ra.get(a,b),c&&(!d||_.isArray(c)?d=ra.access(a,b,_.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=_.queue(a,b),d=c.length,e=c.shift(),f=_._queueHooks(a,b),g=function(){_.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return ra.get(a,c)||ra.access(a,c,{empty:_.Callbacks("once memory").add(function(){ra.remove(a,[b+"queue",c])})})}}),_.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?_.queue(this[0],a):void 0===b?this:this.each(function(){var c=_.queue(this,a,b);_._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&_.dequeue(this,a)})},dequeue:function(a){return this.each(function(){_.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=_.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};for("string"!=typeof a&&(b=a,a=void 0),a=a||"fx";g--;)c=ra.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var va=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,wa=["Top","Right","Bottom","Left"],xa=function(a,b){return a=b||a,"none"===_.css(a,"display")||!_.contains(a.ownerDocument,a)},ya=/^(?:checkbox|radio)$/i;!function(){var a=Z.createDocumentFragment(),b=a.appendChild(Z.createElement("div")),c=Z.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),Y.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",Y.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var za="undefined";Y.focusinBubbles="onfocusin"in a;var Aa=/^key/,Ba=/^(?:mouse|pointer|contextmenu)|click/,Ca=/^(?:focusinfocus|focusoutblur)$/,Da=/^([^.]*)(?:\.(.+)|)$/;_.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=ra.get(a);if(q)for(c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=_.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return typeof _!==za&&_.event.triggered!==b.type?_.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(na)||[""],j=b.length;j--;)h=Da.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=_.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=_.event.special[n]||{},k=_.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&_.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),_.event.global[n]=!0)},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=ra.hasData(a)&&ra.get(a);if(q&&(i=q.events)){for(b=(b||"").match(na)||[""],j=b.length;j--;)if(h=Da.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){for(l=_.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;f--;)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||_.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)_.event.remove(a,n+b[j],c,d,!0);_.isEmptyObject(i)&&(delete q.handle,ra.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,j,k,l,m=[d||Z],n=X.call(b,"type")?b.type:b,o=X.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||Z,3!==d.nodeType&&8!==d.nodeType&&!Ca.test(n+_.event.triggered)&&(n.indexOf(".")>=0&&(o=n.split("."),n=o.shift(),o.sort()),j=n.indexOf(":")<0&&"on"+n,b=b[_.expando]?b:new _.Event(n,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=o.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:_.makeArray(c,[b]),l=_.event.special[n]||{},e||!l.trigger||l.trigger.apply(d,c)!==!1)){if(!e&&!l.noBubble&&!_.isWindow(d)){for(i=l.delegateType||n,Ca.test(i+n)||(g=g.parentNode);g;g=g.parentNode)m.push(g),h=g;h===(d.ownerDocument||Z)&&m.push(h.defaultView||h.parentWindow||a)}for(f=0;(g=m[f++])&&!b.isPropagationStopped();)b.type=f>1?i:l.bindType||n,k=(ra.get(g,"events")||{})[b.type]&&ra.get(g,"handle"),k&&k.apply(g,c),k=j&&g[j],k&&k.apply&&_.acceptData(g)&&(b.result=k.apply(g,c),b.result===!1&&b.preventDefault());return b.type=n,e||b.isDefaultPrevented()||l._default&&l._default.apply(m.pop(),c)!==!1||!_.acceptData(d)||j&&_.isFunction(d[n])&&!_.isWindow(d)&&(h=d[j],h&&(d[j]=null),_.event.triggered=n,d[n](),_.event.triggered=void 0,h&&(d[j]=h)),b.result}},dispatch:function(a){a=_.event.fix(a);var b,c,d,e,f,g=[],h=R.call(arguments),i=(ra.get(this,"events")||{})[a.type]||[],j=_.event.special[a.type]||{};if(h[0]=a,a.delegateTarget=this,!j.preDispatch||j.preDispatch.call(this,a)!==!1){for(g=_.event.handlers.call(this,a,i),b=0;(e=g[b++])&&!a.isPropagationStopped();)for(a.currentTarget=e.elem,c=0;(f=e.handlers[c++])&&!a.isImmediatePropagationStopped();)(!a.namespace_re||a.namespace_re.test(f.namespace))&&(a.handleObj=f,a.data=f.data,d=((_.event.special[f.origType]||{}).handle||f.handler).apply(e.elem,h),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()));return j.postDispatch&&j.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?_(e,this).index(i)>=0:_.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||Z,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[_.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];for(g||(this.fixHooks[e]=g=Ba.test(e)?this.mouseHooks:Aa.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new _.Event(f),b=d.length;b--;)c=d[b],a[c]=f[c];return a.target||(a.target=Z),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==l()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===l()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&_.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return _.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=_.extend(new _.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?_.event.trigger(e,null,b):_.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},_.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},_.Event=function(a,b){return this instanceof _.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?j:k):this.type=a,b&&_.extend(this,b),this.timeStamp=a&&a.timeStamp||_.now(),void(this[_.expando]=!0)):new _.Event(a,b)},_.Event.prototype={isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=j,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=j,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=j,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},_.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){_.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!_.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),Y.focusinBubbles||_.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){_.event.simulate(b,a.target,_.event.fix(a),!0)};_.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=ra.access(d,b);e||d.addEventListener(a,c,!0),ra.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=ra.access(d,b)-1;e?ra.access(d,b,e):(d.removeEventListener(a,c,!0),ra.remove(d,b))}}}),_.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=k;else if(!d)return this;return 1===e&&(f=d,d=function(a){return _().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=_.guid++)),this.each(function(){_.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,_(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=k),this.each(function(){_.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){_.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?_.event.trigger(a,b,c,!0):void 0}});var Ea=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Fa=/<([\w:]+)/,Ga=/<|&#?\w+;/,Ha=/<(?:script|style|link)/i,Ia=/checked\s*(?:[^=]|=\s*.checked.)/i,Ja=/^$|\/(?:java|ecma)script/i,Ka=/^true\/(.*)/,La=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};Ma.optgroup=Ma.option,Ma.tbody=Ma.tfoot=Ma.colgroup=Ma.caption=Ma.thead,Ma.th=Ma.td,_.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=_.contains(a.ownerDocument,a);if(!(Y.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||_.isXMLDoc(a)))for(g=r(h),f=r(a),d=0,e=f.length;e>d;d++)s(f[d],g[d]);if(b)if(c)for(f=f||r(a),g=g||r(h),d=0,e=f.length;e>d;d++)q(f[d],g[d]);else q(a,h);return g=r(h,"script"),g.length>0&&p(g,!i&&r(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,n=a.length;n>m;m++)if(e=a[m],e||0===e)if("object"===_.type(e))_.merge(l,e.nodeType?[e]:e);else if(Ga.test(e)){for(f=f||k.appendChild(b.createElement("div")),g=(Fa.exec(e)||["",""])[1].toLowerCase(),h=Ma[g]||Ma._default,f.innerHTML=h[1]+e.replace(Ea,"<$1></$2>")+h[2],j=h[0];j--;)f=f.lastChild;_.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));for(k.textContent="",m=0;e=l[m++];)if((!d||-1===_.inArray(e,d))&&(i=_.contains(e.ownerDocument,e),f=r(k.appendChild(e),"script"),i&&p(f),c))for(j=0;e=f[j++];)Ja.test(e.type||"")&&c.push(e);return k},cleanData:function(a){for(var b,c,d,e,f=_.event.special,g=0;void 0!==(c=a[g]);g++){if(_.acceptData(c)&&(e=c[ra.expando],e&&(b=ra.cache[e]))){if(b.events)for(d in b.events)f[d]?_.event.remove(c,d):_.removeEvent(c,d,b.handle);ra.cache[e]&&delete ra.cache[e]}delete sa.cache[c[sa.expando]]}}}),_.fn.extend({text:function(a){return qa(this,function(a){return void 0===a?_.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=m(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=m(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?_.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||_.cleanData(r(c)),c.parentNode&&(b&&_.contains(c.ownerDocument,c)&&p(r(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(_.cleanData(r(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return _.clone(this,a,b)})},html:function(a){return qa(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Ha.test(a)&&!Ma[(Fa.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ea,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(_.cleanData(r(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,_.cleanData(r(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=S.apply([],a);var c,d,e,f,g,h,i=0,j=this.length,k=this,l=j-1,m=a[0],p=_.isFunction(m);if(p||j>1&&"string"==typeof m&&!Y.checkClone&&Ia.test(m))return this.each(function(c){var d=k.eq(c);p&&(a[0]=m.call(this,c,d.html())),d.domManip(a,b)});if(j&&(c=_.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(e=_.map(r(c,"script"),n),f=e.length;j>i;i++)g=c,i!==l&&(g=_.clone(g,!0,!0),f&&_.merge(e,r(g,"script"))),b.call(this[i],g,i);if(f)for(h=e[e.length-1].ownerDocument,_.map(e,o),i=0;f>i;i++)g=e[i],Ja.test(g.type||"")&&!ra.access(g,"globalEval")&&_.contains(h,g)&&(g.src?_._evalUrl&&_._evalUrl(g.src):_.globalEval(g.textContent.replace(La,"")))}return this}}),_.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){_.fn[a]=function(a){for(var c,d=[],e=_(a),f=e.length-1,g=0;f>=g;g++)c=g===f?this:this.clone(!0),_(e[g])[b](c),T.apply(d,c.get());return this.pushStack(d)}});var Na,Oa={},Pa=/^margin/,Qa=new RegExp("^("+va+")(?!px)[a-z%]+$","i"),Ra=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};!function(){function b(){g.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",g.innerHTML="",e.appendChild(f);var b=a.getComputedStyle(g,null);c="1%"!==b.top,d="4px"===b.width,e.removeChild(f)}var c,d,e=Z.documentElement,f=Z.createElement("div"),g=Z.createElement("div");g.style&&(g.style.backgroundClip="content-box",g.cloneNode(!0).style.backgroundClip="",Y.clearCloneStyle="content-box"===g.style.backgroundClip,f.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",f.appendChild(g),a.getComputedStyle&&_.extend(Y,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return null==d&&b(),d},reliableMarginRight:function(){var b,c=g.appendChild(Z.createElement("div"));return c.style.cssText=g.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",g.style.width="1px",e.appendChild(f),b=!parseFloat(a.getComputedStyle(c,null).marginRight),e.removeChild(f),g.removeChild(c),b}}))}(),_.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Sa=/^(none|table(?!-c[ea]).+)/,Ta=new RegExp("^("+va+")(.*)$","i"),Ua=new RegExp("^([+-])=("+va+")","i"),Va={position:"absolute",visibility:"hidden",display:"block"},Wa={letterSpacing:"0",fontWeight:"400"},Xa=["Webkit","O","Moz","ms"];_.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=v(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=_.camelCase(b),i=a.style;return b=_.cssProps[h]||(_.cssProps[h]=x(i,h)),g=_.cssHooks[b]||_.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Ua.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(_.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||_.cssNumber[h]||(c+="px"),Y.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=_.camelCase(b);return b=_.cssProps[h]||(_.cssProps[h]=x(a.style,h)),g=_.cssHooks[b]||_.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=v(a,b,d)),"normal"===e&&b in Wa&&(e=Wa[b]),""===c||c?(f=parseFloat(e),c===!0||_.isNumeric(f)?f||0:e):e}}),_.each(["height","width"],function(a,b){_.cssHooks[b]={get:function(a,c,d){return c?Sa.test(_.css(a,"display"))&&0===a.offsetWidth?_.swap(a,Va,function(){return A(a,b,d)}):A(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return y(a,c,d?z(a,b,d,"border-box"===_.css(a,"boxSizing",!1,e),e):0)}}}),_.cssHooks.marginRight=w(Y.reliableMarginRight,function(a,b){return b?_.swap(a,{display:"inline-block"},v,[a,"marginRight"]):void 0}),_.each({margin:"",padding:"",border:"Width"},function(a,b){_.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+wa[d]+b]=f[d]||f[d-2]||f[0];return e}},Pa.test(a)||(_.cssHooks[a+b].set=y)}),_.fn.extend({css:function(a,b){return qa(this,function(a,b,c){var d,e,f={},g=0;if(_.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=_.css(a,b[g],!1,d);return f}return void 0!==c?_.style(a,b,c):_.css(a,b)},a,b,arguments.length>1)},show:function(){return B(this,!0)},hide:function(){return B(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){xa(this)?_(this).show():_(this).hide()})}}),_.Tween=C,C.prototype={constructor:C,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(_.cssNumber[c]?"":"px")},cur:function(){var a=C.propHooks[this.prop];return a&&a.get?a.get(this):C.propHooks._default.get(this)},run:function(a){var b,c=C.propHooks[this.prop];return this.options.duration?this.pos=b=_.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):C.propHooks._default.set(this),this}},C.prototype.init.prototype=C.prototype,C.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=_.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){_.fx.step[a.prop]?_.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[_.cssProps[a.prop]]||_.cssHooks[a.prop])?_.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},C.propHooks.scrollTop=C.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},_.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},_.fx=C.prototype.init,_.fx.step={};var Ya,Za,$a=/^(?:toggle|show|hide)$/,_a=new RegExp("^(?:([+-])=|)("+va+")([a-z%]*)$","i"),ab=/queueHooks$/,bb=[G],cb={
+"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=_a.exec(b),f=e&&e[3]||(_.cssNumber[a]?"":"px"),g=(_.cssNumber[a]||"px"!==f&&+d)&&_a.exec(_.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,_.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};_.Animation=_.extend(I,{tweener:function(a,b){_.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],cb[c]=cb[c]||[],cb[c].unshift(b)},prefilter:function(a,b){b?bb.unshift(a):bb.push(a)}}),_.speed=function(a,b,c){var d=a&&"object"==typeof a?_.extend({},a):{complete:c||!c&&b||_.isFunction(a)&&a,duration:a,easing:c&&b||b&&!_.isFunction(b)&&b};return d.duration=_.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in _.fx.speeds?_.fx.speeds[d.duration]:_.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){_.isFunction(d.old)&&d.old.call(this),d.queue&&_.dequeue(this,d.queue)},d},_.fn.extend({fadeTo:function(a,b,c,d){return this.filter(xa).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=_.isEmptyObject(a),f=_.speed(b,c,d),g=function(){var b=I(this,_.extend({},a),f);(e||ra.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=_.timers,g=ra.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&ab.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&_.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=ra.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=_.timers,g=d?d.length:0;for(c.finish=!0,_.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),_.each(["toggle","show","hide"],function(a,b){var c=_.fn[b];_.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(E(b,!0),a,d,e)}}),_.each({slideDown:E("show"),slideUp:E("hide"),slideToggle:E("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){_.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),_.timers=[],_.fx.tick=function(){var a,b=0,c=_.timers;for(Ya=_.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||_.fx.stop(),Ya=void 0},_.fx.timer=function(a){_.timers.push(a),a()?_.fx.start():_.timers.pop()},_.fx.interval=13,_.fx.start=function(){Za||(Za=setInterval(_.fx.tick,_.fx.interval))},_.fx.stop=function(){clearInterval(Za),Za=null},_.fx.speeds={slow:600,fast:200,_default:400},_.fn.delay=function(a,b){return a=_.fx?_.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=Z.createElement("input"),b=Z.createElement("select"),c=b.appendChild(Z.createElement("option"));a.type="checkbox",Y.checkOn=""!==a.value,Y.optSelected=c.selected,b.disabled=!0,Y.optDisabled=!c.disabled,a=Z.createElement("input"),a.value="t",a.type="radio",Y.radioValue="t"===a.value}();var db,eb,fb=_.expr.attrHandle;_.fn.extend({attr:function(a,b){return qa(this,_.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){_.removeAttr(this,a)})}}),_.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===za?_.prop(a,b,c):(1===f&&_.isXMLDoc(a)||(b=b.toLowerCase(),d=_.attrHooks[b]||(_.expr.match.bool.test(b)?eb:db)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=_.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void _.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(na);if(f&&1===a.nodeType)for(;c=f[e++];)d=_.propFix[c]||c,_.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!Y.radioValue&&"radio"===b&&_.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),eb={set:function(a,b,c){return b===!1?_.removeAttr(a,c):a.setAttribute(c,c),c}},_.each(_.expr.match.bool.source.match(/\w+/g),function(a,b){var c=fb[b]||_.find.attr;fb[b]=function(a,b,d){var e,f;return d||(f=fb[b],fb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,fb[b]=f),e}});var gb=/^(?:input|select|textarea|button)$/i;_.fn.extend({prop:function(a,b){return qa(this,_.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[_.propFix[a]||a]})}}),_.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!_.isXMLDoc(a),f&&(b=_.propFix[b]||b,e=_.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||gb.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),Y.optSelected||(_.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),_.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){_.propFix[this.toLowerCase()]=this});var hb=/[\t\r\n\f]/g;_.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(_.isFunction(a))return this.each(function(b){_(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(na)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(hb," "):" ")){for(f=0;e=b[f++];)d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=_.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(_.isFunction(a))return this.each(function(b){_(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(na)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(hb," "):"")){for(f=0;e=b[f++];)for(;d.indexOf(" "+e+" ")>=0;)d=d.replace(" "+e+" "," ");g=a?_.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):_.isFunction(a)?this.each(function(c){_(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if("string"===c)for(var b,d=0,e=_(this),f=a.match(na)||[];b=f[d++];)e.hasClass(b)?e.removeClass(b):e.addClass(b);else(c===za||"boolean"===c)&&(this.className&&ra.set(this,"__className__",this.className),this.className=this.className||a===!1?"":ra.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(hb," ").indexOf(b)>=0)return!0;return!1}});var ib=/\r/g;_.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=_.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,_(this).val()):a,null==e?e="":"number"==typeof e?e+="":_.isArray(e)&&(e=_.map(e,function(a){return null==a?"":a+""})),b=_.valHooks[this.type]||_.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=_.valHooks[e.type]||_.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(ib,""):null==c?"":c)}}}),_.extend({valHooks:{option:{get:function(a){var b=_.find.attr(a,"value");return null!=b?b:_.trim(_.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(Y.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!_.nodeName(c.parentNode,"optgroup"))){if(b=_(c).val(),f)return b;g.push(b)}return g},set:function(a,b){for(var c,d,e=a.options,f=_.makeArray(b),g=e.length;g--;)d=e[g],(d.selected=_.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),_.each(["radio","checkbox"],function(){_.valHooks[this]={set:function(a,b){return _.isArray(b)?a.checked=_.inArray(_(a).val(),b)>=0:void 0}},Y.checkOn||(_.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),_.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){_.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),_.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var jb=_.now(),kb=/\?/;_.parseJSON=function(a){return JSON.parse(a+"")},_.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&_.error("Invalid XML: "+a),b};var lb=/#.*$/,mb=/([?&])_=[^&]*/,nb=/^(.*?):[ \t]*([^\r\n]*)$/gm,ob=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,pb=/^(?:GET|HEAD)$/,qb=/^\/\//,rb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,sb={},tb={},ub="*/".concat("*"),vb=a.location.href,wb=rb.exec(vb.toLowerCase())||[];_.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:vb,type:"GET",isLocal:ob.test(wb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":ub,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":_.parseJSON,"text xml":_.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?L(L(a,_.ajaxSettings),b):L(_.ajaxSettings,a)},ajaxPrefilter:J(sb),ajaxTransport:J(tb),ajax:function(a,b){function c(a,b,c,g){var i,k,r,s,u,w=b;2!==t&&(t=2,h&&clearTimeout(h),d=void 0,f=g||"",v.readyState=a>0?4:0,i=a>=200&&300>a||304===a,c&&(s=M(l,v,c)),s=N(l,s,v,i),i?(l.ifModified&&(u=v.getResponseHeader("Last-Modified"),u&&(_.lastModified[e]=u),u=v.getResponseHeader("etag"),u&&(_.etag[e]=u)),204===a||"HEAD"===l.type?w="nocontent":304===a?w="notmodified":(w=s.state,k=s.data,r=s.error,i=!r)):(r=w,(a||!w)&&(w="error",0>a&&(a=0))),v.status=a,v.statusText=(b||w)+"",i?o.resolveWith(m,[k,w,v]):o.rejectWith(m,[v,w,r]),v.statusCode(q),q=void 0,j&&n.trigger(i?"ajaxSuccess":"ajaxError",[v,l,i?k:r]),p.fireWith(m,[v,w]),j&&(n.trigger("ajaxComplete",[v,l]),--_.active||_.event.trigger("ajaxStop")))}"object"==typeof a&&(b=a,a=void 0),b=b||{};var d,e,f,g,h,i,j,k,l=_.ajaxSetup({},b),m=l.context||l,n=l.context&&(m.nodeType||m.jquery)?_(m):_.event,o=_.Deferred(),p=_.Callbacks("once memory"),q=l.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!g)for(g={};b=nb.exec(f);)g[b[1].toLowerCase()]=b[2];b=g[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return d&&d.abort(b),c(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,l.url=((a||l.url||vb)+"").replace(lb,"").replace(qb,wb[1]+"//"),l.type=b.method||b.type||l.method||l.type,l.dataTypes=_.trim(l.dataType||"*").toLowerCase().match(na)||[""],null==l.crossDomain&&(i=rb.exec(l.url.toLowerCase()),l.crossDomain=!(!i||i[1]===wb[1]&&i[2]===wb[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(wb[3]||("http:"===wb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=_.param(l.data,l.traditional)),K(sb,l,b,v),2===t)return v;j=_.event&&l.global,j&&0===_.active++&&_.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!pb.test(l.type),e=l.url,l.hasContent||(l.data&&(e=l.url+=(kb.test(e)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=mb.test(e)?e.replace(mb,"$1_="+jb++):e+(kb.test(e)?"&":"?")+"_="+jb++)),l.ifModified&&(_.lastModified[e]&&v.setRequestHeader("If-Modified-Since",_.lastModified[e]),_.etag[e]&&v.setRequestHeader("If-None-Match",_.etag[e])),(l.data&&l.hasContent&&l.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",l.contentType),v.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+ub+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)v.setRequestHeader(k,l.headers[k]);if(l.beforeSend&&(l.beforeSend.call(m,v,l)===!1||2===t))return v.abort();u="abort";for(k in{success:1,error:1,complete:1})v[k](l[k]);if(d=K(tb,l,b,v)){v.readyState=1,j&&n.trigger("ajaxSend",[v,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){v.abort("timeout")},l.timeout));try{t=1,d.send(r,c)}catch(w){if(!(2>t))throw w;c(-1,w)}}else c(-1,"No Transport");return v},getJSON:function(a,b,c){return _.get(a,b,c,"json")},getScript:function(a,b){return _.get(a,void 0,b,"script")}}),_.each(["get","post"],function(a,b){_[b]=function(a,c,d,e){return _.isFunction(c)&&(e=e||d,d=c,c=void 0),_.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),_._evalUrl=function(a){return _.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},_.fn.extend({wrapAll:function(a){var b;return _.isFunction(a)?this.each(function(b){_(this).wrapAll(a.call(this,b))}):(this[0]&&(b=_(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){for(var a=this;a.firstElementChild;)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return _.isFunction(a)?this.each(function(b){_(this).wrapInner(a.call(this,b))}):this.each(function(){var b=_(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=_.isFunction(a);return this.each(function(c){_(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){_.nodeName(this,"body")||_(this).replaceWith(this.childNodes)}).end()}}),_.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},_.expr.filters.visible=function(a){return!_.expr.filters.hidden(a)};var xb=/%20/g,yb=/\[\]$/,zb=/\r?\n/g,Ab=/^(?:submit|button|image|reset|file)$/i,Bb=/^(?:input|select|textarea|keygen)/i;_.param=function(a,b){var c,d=[],e=function(a,b){b=_.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=_.ajaxSettings&&_.ajaxSettings.traditional),_.isArray(a)||a.jquery&&!_.isPlainObject(a))_.each(a,function(){e(this.name,this.value)});else for(c in a)O(c,a[c],b,e);return d.join("&").replace(xb,"+")},_.fn.extend({serialize:function(){return _.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=_.prop(this,"elements");return a?_.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!_(this).is(":disabled")&&Bb.test(this.nodeName)&&!Ab.test(a)&&(this.checked||!ya.test(a))}).map(function(a,b){var c=_(this).val();return null==c?null:_.isArray(c)?_.map(c,function(a){return{name:b.name,value:a.replace(zb,"\r\n")}}):{name:b.name,value:c.replace(zb,"\r\n")}}).get()}}),_.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cb=0,Db={},Eb={0:200,1223:204},Fb=_.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Db)Db[a]()}),Y.cors=!!Fb&&"withCredentials"in Fb,Y.ajax=Fb=!!Fb,_.ajaxTransport(function(a){var b;return Y.cors||Fb&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Db[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Eb[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Db[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),_.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return _.globalEval(a),a}}}),_.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),_.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=_("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),Z.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gb=[],Hb=/(=)\?(?=&|$)|\?\?/;_.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gb.pop()||_.expando+"_"+jb++;return this[a]=!0,a}}),_.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hb.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hb.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=_.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hb,"$1"+e):b.jsonp!==!1&&(b.url+=(kb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||_.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gb.push(e)),g&&_.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),_.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||Z;var d=ga.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=_.buildFragment([a],b,e),e&&e.length&&_(e).remove(),_.merge([],d.childNodes))};var Ib=_.fn.load;_.fn.load=function(a,b,c){if("string"!=typeof a&&Ib)return Ib.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=_.trim(a.slice(h)),a=a.slice(0,h)),_.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&_.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?_("<div>").append(_.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},_.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){_.fn[b]=function(a){return this.on(b,a)}}),_.expr.filters.animated=function(a){return _.grep(_.timers,function(b){return a===b.elem}).length};var Jb=a.document.documentElement;_.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=_.css(a,"position"),l=_(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=_.css(a,"top"),i=_.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),_.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},_.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){_.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,_.contains(b,d)?(typeof d.getBoundingClientRect!==za&&(e=d.getBoundingClientRect()),c=P(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===_.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),_.nodeName(a[0],"html")||(d=a.offset()),d.top+=_.css(a[0],"borderTopWidth",!0),d.left+=_.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-_.css(c,"marginTop",!0),left:b.left-d.left-_.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||Jb;a&&!_.nodeName(a,"html")&&"static"===_.css(a,"position");)a=a.offsetParent;return a||Jb})}}),_.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;_.fn[b]=function(e){return qa(this,function(b,e,f){var g=P(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),_.each(["top","left"],function(a,b){_.cssHooks[b]=w(Y.pixelPosition,function(a,c){return c?(c=v(a,b),Qa.test(c)?_(a).position()[b]+"px":c):void 0})}),_.each({Height:"height",Width:"width"},function(a,b){_.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){_.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return qa(this,function(b,c,d){var e;return _.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?_.css(b,c,g):_.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),_.fn.size=function(){return this.length},_.fn.andSelf=_.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return _});var Kb=a.jQuery,Lb=a.$;return _.noConflict=function(b){return a.$===_&&(a.$=Lb),b&&a.jQuery===_&&(a.jQuery=Kb),_},typeof b===za&&(a.jQuery=a.$=_),_}),function(a,b,c){"use strict";function d(a,b){return b=b||Error,function(){var c,d,e=2,f=arguments,g=f[0],h="["+(a?a+":":"")+g+"] ",i=f[1];for(h+=i.replace(/\{\d+\}/g,function(a){var b=+a.slice(1,-1),c=b+e;return c<f.length?ta(f[c]):a}),h+="\nhttp://errors.angularjs.org/1.4.8/"+(a?a+"/":"")+g,d=e,c="?";d<f.length;d++,c="&")h+=c+"p"+(d-e)+"="+encodeURIComponent(ta(f[d]));return new b(h)}}function e(a){if(null==a||C(a))return!1;if(Od(a)||x(a)||Cd&&a instanceof Cd)return!0;var b="length"in Object(a)&&a.length;return y(b)&&(b>=0&&b-1 in a||"function"==typeof a.item)}function f(a,b,c){var d,g;if(a)if(A(a))for(d in a)"prototype"==d||"length"==d||"name"==d||a.hasOwnProperty&&!a.hasOwnProperty(d)||b.call(c,a[d],d,a);else if(Od(a)||e(a)){var h="object"!=typeof a;for(d=0,g=a.length;g>d;d++)(h||d in a)&&b.call(c,a[d],d,a)}else if(a.forEach&&a.forEach!==f)a.forEach(b,c,a);else if(w(a))for(d in a)b.call(c,a[d],d,a);else if("function"==typeof a.hasOwnProperty)for(d in a)a.hasOwnProperty(d)&&b.call(c,a[d],d,a);else for(d in a)xd.call(a,d)&&b.call(c,a[d],d,a);return a}function g(a,b,c){for(var d=Object.keys(a).sort(),e=0;e<d.length;e++)b.call(c,a[d[e]],d[e]);return d}function h(a){return function(b,c){a(c,b)}}function i(){return++Md}function j(a,b){b?a.$$hashKey=b:delete a.$$hashKey}function k(a,b,c){for(var d=a.$$hashKey,e=0,f=b.length;f>e;++e){var g=b[e];if(v(g)||A(g))for(var h=Object.keys(g),i=0,l=h.length;l>i;i++){var m=h[i],n=g[m];c&&v(n)?z(n)?a[m]=new Date(n.valueOf()):B(n)?a[m]=new RegExp(n):n.nodeName?a[m]=n.cloneNode(!0):K(n)?a[m]=n.clone():(v(a[m])||(a[m]=Od(n)?[]:{}),k(a[m],[n],!0)):a[m]=n}}return j(a,d),a}function l(a){return k(a,Fd.call(arguments,1),!1)}function m(a){return k(a,Fd.call(arguments,1),!0)}function n(a){return parseInt(a,10)}function o(a,b){return l(Object.create(a),b)}function p(){}function q(a){return a}function r(a){return function(){return a}}function s(a){return A(a.toString)&&a.toString!==Id}function t(a){return"undefined"==typeof a}function u(a){return"undefined"!=typeof a}function v(a){return null!==a&&"object"==typeof a}function w(a){return null!==a&&"object"==typeof a&&!Jd(a)}function x(a){return"string"==typeof a}function y(a){return"number"==typeof a}function z(a){return"[object Date]"===Id.call(a)}function A(a){return"function"==typeof a}function B(a){return"[object RegExp]"===Id.call(a)}function C(a){return a&&a.window===a}function D(a){return a&&a.$evalAsync&&a.$watch}function E(a){return"[object File]"===Id.call(a)}function F(a){return"[object FormData]"===Id.call(a)}function G(a){return"[object Blob]"===Id.call(a)}function H(a){return"boolean"==typeof a}function I(a){return a&&A(a.then)}function J(a){return a&&y(a.length)&&Pd.test(Id.call(a))}function K(a){return!(!a||!(a.nodeName||a.prop&&a.attr&&a.find))}function L(a){var b,c={},d=a.split(",");for(b=0;b<d.length;b++)c[d[b]]=!0;return c}function M(a){return wd(a.nodeName||a[0]&&a[0].nodeName)}function N(a,b){var c=a.indexOf(b);return c>=0&&a.splice(c,1),c}function O(a,b){function c(a,b){var c,e=b.$$hashKey;if(Od(a))for(var f=0,g=a.length;g>f;f++)b.push(d(a[f]));else if(w(a))for(c in a)b[c]=d(a[c]);else if(a&&"function"==typeof a.hasOwnProperty)for(c in a)a.hasOwnProperty(c)&&(b[c]=d(a[c]));else for(c in a)xd.call(a,c)&&(b[c]=d(a[c]));return j(b,e),b}function d(a){if(!v(a))return a;var b=e.indexOf(a);if(-1!==b)return g[b];if(C(a)||D(a))throw Kd("cpws","Can't copy! Making copies of Window or Scope instances is not supported.");var d,f=!1;return Od(a)?(d=[],f=!0):J(a)?d=new a.constructor(a):z(a)?d=new Date(a.getTime()):B(a)?(d=new RegExp(a.source,a.toString().match(/[^\/]*$/)[0]),d.lastIndex=a.lastIndex):A(a.cloneNode)?d=a.cloneNode(!0):(d=Object.create(Jd(a)),f=!0),e.push(a),g.push(d),f?c(a,d):d}var e=[],g=[];if(b){if(J(b))throw Kd("cpta","Can't copy! TypedArray destination cannot be mutated.");if(a===b)throw Kd("cpi","Can't copy! Source and destination are identical.");return Od(b)?b.length=0:f(b,function(a,c){"$$hashKey"!==c&&delete b[c]}),e.push(a),g.push(b),c(a,b)}return d(a)}function P(a,b){if(Od(a)){b=b||[];for(var c=0,d=a.length;d>c;c++)b[c]=a[c]}else if(v(a)){b=b||{};for(var e in a)("$"!==e.charAt(0)||"$"!==e.charAt(1))&&(b[e]=a[e])}return b||a}function Q(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var c,d,e,f=typeof a,g=typeof b;if(f==g&&"object"==f){if(!Od(a)){if(z(a))return z(b)?Q(a.getTime(),b.getTime()):!1;if(B(a))return B(b)?a.toString()==b.toString():!1;if(D(a)||D(b)||C(a)||C(b)||Od(b)||z(b)||B(b))return!1;e=qa();for(d in a)if("$"!==d.charAt(0)&&!A(a[d])){if(!Q(a[d],b[d]))return!1;e[d]=!0}for(d in b)if(!(d in e)&&"$"!==d.charAt(0)&&u(b[d])&&!A(b[d]))return!1;return!0}if(!Od(b))return!1;if((c=a.length)==b.length){for(d=0;c>d;d++)if(!Q(a[d],b[d]))return!1;return!0}}return!1}function R(a,b,c){return a.concat(Fd.call(b,c))}function S(a,b){return Fd.call(a,b||0)}function T(a,b){var c=arguments.length>2?S(arguments,2):[];return!A(b)||b instanceof RegExp?b:c.length?function(){return arguments.length?b.apply(a,R(c,arguments,0)):b.apply(a,c)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function U(a,d){var e=d;return"string"==typeof a&&"$"===a.charAt(0)&&"$"===a.charAt(1)?e=c:C(d)?e="$WINDOW":d&&b===d?e="$DOCUMENT":D(d)&&(e="$SCOPE"),e}function V(a,b){return"undefined"==typeof a?c:(y(b)||(b=b?2:null),JSON.stringify(a,U,b))}function W(a){return x(a)?JSON.parse(a):a}function X(a,b){var c=Date.parse("Jan 01, 1970 00:00:00 "+a)/6e4;return isNaN(c)?b:c}function Y(a,b){return a=new Date(a.getTime()),a.setMinutes(a.getMinutes()+b),a}function Z(a,b,c){c=c?-1:1;var d=X(b,a.getTimezoneOffset());return Y(a,c*(d-a.getTimezoneOffset()))}function $(a){a=Cd(a).clone();try{a.empty()}catch(b){}var c=Cd("<div>").append(a).html();try{return a[0].nodeType===Zd?wd(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+wd(b)})}catch(b){return wd(c)}}function _(a){try{return decodeURIComponent(a)}catch(b){}}function aa(a){var b={};return f((a||"").split("&"),function(a){var c,d,e;a&&(d=a=a.replace(/\+/g,"%20"),c=a.indexOf("="),-1!==c&&(d=a.substring(0,c),e=a.substring(c+1)),d=_(d),u(d)&&(e=u(e)?_(e):!0,xd.call(b,d)?Od(b[d])?b[d].push(e):b[d]=[b[d],e]:b[d]=e))}),b}function ba(a){var b=[];return f(a,function(a,c){Od(a)?f(a,function(a){b.push(da(c,!0)+(a===!0?"":"="+da(a,!0)))}):b.push(da(c,!0)+(a===!0?"":"="+da(a,!0)))}),b.length?b.join("&"):""}function ca(a){return da(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function da(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function ea(a,b){var c,d,e=Ud.length;for(d=0;e>d;++d)if(c=Ud[d]+b,x(c=a.getAttribute(c)))return c;return null}function fa(a,b){var c,d,e={};f(Ud,function(b){var e=b+"app";!c&&a.hasAttribute&&a.hasAttribute(e)&&(c=a,d=a.getAttribute(e))}),f(Ud,function(b){var e,f=b+"app";!c&&(e=a.querySelector("["+f.replace(":","\\:")+"]"))&&(c=e,d=e.getAttribute(f))}),c&&(e.strictDi=null!==ea(c,"strict-di"),b(c,d?[d]:[],e))}function ga(c,d,e){v(e)||(e={});var g={strictDi:!1};e=l(g,e);var h=function(){if(c=Cd(c),c.injector()){var a=c[0]===b?"document":$(c);throw Kd("btstrpd","App Already Bootstrapped with this Element '{0}'",a.replace(/</,"&lt;").replace(/>/,"&gt;"))}d=d||[],d.unshift(["$provide",function(a){a.value("$rootElement",c)}]),e.debugInfoEnabled&&d.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]),d.unshift("ng");var f=ab(d,e.strictDi);return f.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d),c(b)(a)})}]),f},i=/^NG_ENABLE_DEBUG_INFO!/,j=/^NG_DEFER_BOOTSTRAP!/;return a&&i.test(a.name)&&(e.debugInfoEnabled=!0,a.name=a.name.replace(i,"")),a&&!j.test(a.name)?h():(a.name=a.name.replace(j,""),Ld.resumeBootstrap=function(a){return f(a,function(a){d.push(a)}),h()},void(A(Ld.resumeDeferredBootstrap)&&Ld.resumeDeferredBootstrap()))}function ha(){a.name="NG_ENABLE_DEBUG_INFO!"+a.name,a.location.reload()}function ia(a){var b=Ld.element(a).injector();if(!b)throw Kd("test","no injector found for element argument to getTestability");return b.get("$$testability")}function ja(a,b){return b=b||"_",a.replace(Vd,function(a,c){return(c?b:"")+a.toLowerCase()})}function ka(){var b;if(!Wd){var d=Td();Dd=t(d)?a.jQuery:d?a[d]:c,Dd&&Dd.fn.on?(Cd=Dd,l(Dd.fn,{scope:qe.scope,isolateScope:qe.isolateScope,controller:qe.controller,injector:qe.injector,inheritedData:qe.inheritedData}),b=Dd.cleanData,Dd.cleanData=function(a){var c;if(Nd)Nd=!1;else for(var d,e=0;null!=(d=a[e]);e++)c=Dd._data(d,"events"),c&&c.$destroy&&Dd(d).triggerHandler("$destroy");b(a)}):Cd=Ca,Ld.element=Cd,Wd=!0}}function la(a,b,c){if(!a)throw Kd("areq","Argument '{0}' is {1}",b||"?",c||"required");return a}function ma(a,b,c){return c&&Od(a)&&(a=a[a.length-1]),la(A(a),b,"not a function, got "+(a&&"object"==typeof a?a.constructor.name||"Object":typeof a)),a}function na(a,b){if("hasOwnProperty"===a)throw Kd("badname","hasOwnProperty is not a valid {0} name",b)}function oa(a,b,c){if(!b)return a;for(var d,e=b.split("."),f=a,g=e.length,h=0;g>h;h++)d=e[h],a&&(a=(f=a)[d]);return!c&&A(a)?T(f,a):a}function pa(a){for(var b,c=a[0],d=a[a.length-1],e=1;c!==d&&(c=c.nextSibling);e++)(b||a[e]!==c)&&(b||(b=Cd(Fd.call(a,0,e))),b.push(c));return b||a}function qa(){return Object.create(null)}function ra(a){function b(a,b,c){return a[b]||(a[b]=c())}var c=d("$injector"),e=d("ng"),f=b(a,"angular",Object);return f.$$minErr=f.$$minErr||d,b(f,"module",function(){var a={};return function(d,f,g){var h=function(a,b){if("hasOwnProperty"===a)throw e("badname","hasOwnProperty is not a valid {0} name",b)};return h(d,"module"),f&&a.hasOwnProperty(d)&&(a[d]=null),
+b(a,d,function(){function a(a,b,c,d){return d||(d=e),function(){return d[c||"push"]([a,b,arguments]),k}}function b(a,b){return function(c,f){return f&&A(f)&&(f.$$moduleName=d),e.push([a,b,arguments]),k}}if(!f)throw c("nomod","Module '{0}' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.",d);var e=[],h=[],i=[],j=a("$injector","invoke","push",h),k={_invokeQueue:e,_configBlocks:h,_runBlocks:i,requires:f,name:d,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),decorator:b("$provide","decorator"),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),config:j,run:function(a){return i.push(a),this}};return g&&j(g),k})}})}function sa(a){var b=[];return JSON.stringify(a,function(a,c){if(c=U(a,c),v(c)){if(b.indexOf(c)>=0)return"...";b.push(c)}return c})}function ta(a){return"function"==typeof a?a.toString().replace(/ \{[\s\S]*$/,""):t(a)?"undefined":"string"!=typeof a?sa(a):a}function ua(b){l(b,{bootstrap:ga,copy:O,extend:l,merge:m,equals:Q,element:Cd,forEach:f,injector:ab,noop:p,bind:T,toJson:V,fromJson:W,identity:q,isUndefined:t,isDefined:u,isString:x,isFunction:A,isObject:v,isNumber:y,isElement:K,isArray:Od,version:be,isDate:z,lowercase:wd,uppercase:yd,callbacks:{counter:0},getTestability:ia,$$minErr:d,$$csp:Sd,reloadWithDebugInfo:ha}),(Ed=ra(a))("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:sc}),a.provider("$compile",kb).directive({a:rf,input:If,textarea:If,form:wf,script:Ag,select:Dg,style:Fg,option:Eg,ngBind:Lf,ngBindHtml:Nf,ngBindTemplate:Mf,ngClass:Pf,ngClassEven:Rf,ngClassOdd:Qf,ngCloak:Sf,ngController:Tf,ngForm:xf,ngHide:ug,ngIf:Wf,ngInclude:Xf,ngInit:Zf,ngNonBindable:lg,ngPluralize:pg,ngRepeat:qg,ngShow:tg,ngStyle:vg,ngSwitch:wg,ngSwitchWhen:xg,ngSwitchDefault:yg,ngOptions:og,ngTransclude:zg,ngModel:ig,ngList:$f,ngChange:Of,pattern:Hg,ngPattern:Hg,required:Gg,ngRequired:Gg,minlength:Jg,ngMinlength:Jg,maxlength:Ig,ngMaxlength:Ig,ngValue:Kf,ngModelOptions:kg}).directive({ngInclude:Yf}).directive(sf).directive(Uf),a.provider({$anchorScroll:bb,$animate:Fe,$animateCss:Ge,$$animateQueue:Ee,$$AnimateRunner:De,$browser:hb,$cacheFactory:ib,$controller:pb,$document:qb,$exceptionHandler:rb,$filter:Gc,$$forceReflow:Le,$interpolate:Fb,$interval:Gb,$http:Bb,$httpParamSerializer:tb,$httpParamSerializerJQLike:ub,$httpBackend:Db,$xhrFactory:Cb,$location:Ub,$log:Vb,$parse:mc,$rootScope:rc,$q:nc,$$q:oc,$sce:wc,$sceDelegate:vc,$sniffer:xc,$templateCache:jb,$templateRequest:yc,$$testability:zc,$timeout:Ac,$window:Dc,$$rAF:qc,$$jqLite:Xa,$$HashMap:ue,$$cookieReader:Fc})}])}function va(){return++de}function wa(a){return a.replace(ge,function(a,b,c,d){return d?c.toUpperCase():c}).replace(he,"Moz$1")}function xa(a){return!le.test(a)}function ya(a){var b=a.nodeType;return b===Xd||!b||b===_d}function za(a){for(var b in ce[a.ng339])return!0;return!1}function Aa(a,b){var c,d,e,g,h=b.createDocumentFragment(),i=[];if(xa(a))i.push(b.createTextNode(a));else{for(c=c||h.appendChild(b.createElement("div")),d=(me.exec(a)||["",""])[1].toLowerCase(),e=oe[d]||oe._default,c.innerHTML=e[1]+a.replace(ne,"<$1></$2>")+e[2],g=e[0];g--;)c=c.lastChild;i=R(i,c.childNodes),c=h.firstChild,c.textContent=""}return h.textContent="",h.innerHTML="",f(i,function(a){h.appendChild(a)}),h}function Ba(a,c){c=c||b;var d;return(d=ke.exec(a))?[c.createElement(d[1])]:(d=Aa(a,c))?d.childNodes:[]}function Ca(a){if(a instanceof Ca)return a;var b;if(x(a)&&(a=Qd(a),b=!0),!(this instanceof Ca)){if(b&&"<"!=a.charAt(0))throw je("nosel","Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element");return new Ca(a)}b?Ma(this,Ba(a)):Ma(this,a)}function Da(a){return a.cloneNode(!0)}function Ea(a,b){if(b||Ga(a),a.querySelectorAll)for(var c=a.querySelectorAll("*"),d=0,e=c.length;e>d;d++)Ga(c[d])}function Fa(a,b,c,d){if(u(d))throw je("offargs","jqLite#off() does not support the `selector` argument");var e=Ha(a),g=e&&e.events,h=e&&e.handle;if(h)if(b){var i=function(b){var d=g[b];u(c)&&N(d||[],c),u(c)&&d&&d.length>0||(fe(a,b,h),delete g[b])};f(b.split(" "),function(a){i(a),ie[a]&&i(ie[a])})}else for(b in g)"$destroy"!==b&&fe(a,b,h),delete g[b]}function Ga(a,b){var d=a.ng339,e=d&&ce[d];if(e){if(b)return void delete e.data[b];e.handle&&(e.events.$destroy&&e.handle({},"$destroy"),Fa(a)),delete ce[d],a.ng339=c}}function Ha(a,b){var d=a.ng339,e=d&&ce[d];return b&&!e&&(a.ng339=d=va(),e=ce[d]={events:{},data:{},handle:c}),e}function Ia(a,b,c){if(ya(a)){var d=u(c),e=!d&&b&&!v(b),f=!b,g=Ha(a,!e),h=g&&g.data;if(d)h[b]=c;else{if(f)return h;if(e)return h&&h[b];l(h,b)}}}function Ja(a,b){return a.getAttribute?(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" ")>-1:!1}function Ka(a,b){b&&a.setAttribute&&f(b.split(" "),function(b){a.setAttribute("class",Qd((" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+Qd(b)+" "," ")))})}function La(a,b){if(b&&a.setAttribute){var c=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");f(b.split(" "),function(a){a=Qd(a),-1===c.indexOf(" "+a+" ")&&(c+=a+" ")}),a.setAttribute("class",Qd(c))}}function Ma(a,b){if(b)if(b.nodeType)a[a.length++]=b;else{var c=b.length;if("number"==typeof c&&b.window!==b){if(c)for(var d=0;c>d;d++)a[a.length++]=b[d]}else a[a.length++]=b}}function Na(a,b){return Oa(a,"$"+(b||"ngController")+"Controller")}function Oa(a,b,c){a.nodeType==_d&&(a=a.documentElement);for(var d=Od(b)?b:[b];a;){for(var e=0,f=d.length;f>e;e++)if(u(c=Cd.data(a,d[e])))return c;a=a.parentNode||a.nodeType===ae&&a.host}}function Pa(a){for(Ea(a,!0);a.firstChild;)a.removeChild(a.firstChild)}function Qa(a,b){b||Ea(a);var c=a.parentNode;c&&c.removeChild(a)}function Ra(b,c){c=c||a,"complete"===c.document.readyState?c.setTimeout(b):Cd(c).on("load",b)}function Sa(a,b){var c=re[b.toLowerCase()];return c&&se[M(a)]&&c}function Ta(a){return te[a]}function Ua(a,b){var c=function(c,d){c.isDefaultPrevented=function(){return c.defaultPrevented};var e=b[d||c.type],f=e?e.length:0;if(f){if(t(c.immediatePropagationStopped)){var g=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0,c.stopPropagation&&c.stopPropagation(),g&&g.call(c)}}c.isImmediatePropagationStopped=function(){return c.immediatePropagationStopped===!0};var h=e.specialHandlerWrapper||Va;f>1&&(e=P(e));for(var i=0;f>i;i++)c.isImmediatePropagationStopped()||h(a,c,e[i])}};return c.elem=a,c}function Va(a,b,c){c.call(a,b)}function Wa(a,b,c){var d=b.relatedTarget;(!d||d!==a&&!pe.call(a,d))&&c.call(a,b)}function Xa(){this.$get=function(){return l(Ca,{hasClass:function(a,b){return a.attr&&(a=a[0]),Ja(a,b)},addClass:function(a,b){return a.attr&&(a=a[0]),La(a,b)},removeClass:function(a,b){return a.attr&&(a=a[0]),Ka(a,b)}})}}function Ya(a,b){var c=a&&a.$$hashKey;if(c)return"function"==typeof c&&(c=a.$$hashKey()),c;var d=typeof a;return c="function"==d||"object"==d&&null!==a?a.$$hashKey=d+":"+(b||i)():d+":"+a}function Za(a,b){if(b){var c=0;this.nextUid=function(){return++c}}f(a,this.put,this)}function $a(a){var b=a.toString().replace(ye,""),c=b.match(ve);return c?"function("+(c[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function _a(a,b,c){var d,e,g,h;if("function"==typeof a){if(!(d=a.$inject)){if(d=[],a.length){if(b)throw x(c)&&c||(c=a.name||$a(a)),ze("strictdi","{0} is not using explicit annotation and cannot be invoked in strict mode",c);e=a.toString().replace(ye,""),g=e.match(ve),f(g[1].split(we),function(a){a.replace(xe,function(a,b,c){d.push(c)})})}a.$inject=d}}else Od(a)?(h=a.length-1,ma(a[h],"fn"),d=a.slice(0,h)):ma(a,"fn",!0);return d}function ab(a,b){function d(a){return function(b,c){return v(b)?void f(b,h(a)):a(b,c)}}function e(a,b){if(na(a,"service"),(A(b)||Od(b))&&(b=y.instantiate(b)),!b.$get)throw ze("pget","Provider '{0}' must define $get factory method.",a);return w[a+q]=b}function g(a,b){return function(){var c=B.invoke(b,this);if(t(c))throw ze("undef","Provider '{0}' must return a value from $get factory method.",a);return c}}function i(a,b,c){return e(a,{$get:c!==!1?g(a,b):b})}function j(a,b){return i(a,["$injector",function(a){return a.instantiate(b)}])}function k(a,b){return i(a,r(b),!1)}function l(a,b){na(a,"constant"),w[a]=b,z[a]=b}function m(a,b){var c=y.get(a+q),d=c.$get;c.$get=function(){var a=B.invoke(d,c);return B.invoke(b,null,{$delegate:a})}}function n(a){la(t(a)||Od(a),"modulesToLoad","not an array");var b,c=[];return f(a,function(a){function d(a){var b,c;for(b=0,c=a.length;c>b;b++){var d=a[b],e=y.get(d[0]);e[d[1]].apply(e,d[2])}}if(!u.get(a)){u.put(a,!0);try{x(a)?(b=Ed(a),c=c.concat(n(b.requires)).concat(b._runBlocks),d(b._invokeQueue),d(b._configBlocks)):A(a)?c.push(y.invoke(a)):Od(a)?c.push(y.invoke(a)):ma(a,"module")}catch(e){throw Od(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),ze("modulerr","Failed to instantiate module {0} due to:\n{1}",a,e.stack||e.message||e)}}}),c}function o(a,c){function d(b,d){if(a.hasOwnProperty(b)){if(a[b]===p)throw ze("cdep","Circular dependency found: {0}",b+" <- "+s.join(" <- "));return a[b]}try{return s.unshift(b),a[b]=p,a[b]=c(b,d)}catch(e){throw a[b]===p&&delete a[b],e}finally{s.shift()}}function e(a,c,e,f){"string"==typeof e&&(f=e,e=null);var g,h,i,j=[],k=ab.$$annotate(a,b,f);for(h=0,g=k.length;g>h;h++){if(i=k[h],"string"!=typeof i)throw ze("itkn","Incorrect injection token! Expected service name as string, got {0}",i);j.push(e&&e.hasOwnProperty(i)?e[i]:d(i,f))}return Od(a)&&(a=a[g]),a.apply(c,j)}function f(a,b,c){var d=Object.create((Od(a)?a[a.length-1]:a).prototype||null),f=e(a,d,b,c);return v(f)||A(f)?f:d}return{invoke:e,instantiate:f,get:d,annotate:ab.$$annotate,has:function(b){return w.hasOwnProperty(b+q)||a.hasOwnProperty(b)}}}b=b===!0;var p={},q="Provider",s=[],u=new Za([],!0),w={$provide:{provider:d(e),factory:d(i),service:d(j),value:d(k),constant:d(l),decorator:m}},y=w.$injector=o(w,function(a,b){throw Ld.isString(b)&&s.push(b),ze("unpr","Unknown provider: {0}",s.join(" <- "))}),z={},B=z.$injector=o(z,function(a,b){var d=y.get(a+q,b);return B.invoke(d.$get,d,c,a)});return f(n(a),function(a){a&&B.invoke(a)}),B}function bb(){var a=!0;this.disableAutoScrolling=function(){a=!1},this.$get=["$window","$location","$rootScope",function(b,c,d){function e(a){var b=null;return Array.prototype.some.call(a,function(a){return"a"===M(a)?(b=a,!0):void 0}),b}function f(){var a=h.yOffset;if(A(a))a=a();else if(K(a)){var c=a[0],d=b.getComputedStyle(c);a="fixed"!==d.position?0:c.getBoundingClientRect().bottom}else y(a)||(a=0);return a}function g(a){if(a){a.scrollIntoView();var c=f();if(c){var d=a.getBoundingClientRect().top;b.scrollBy(0,d-c)}}else b.scrollTo(0,0)}function h(a){a=x(a)?a:c.hash();var b;a?(b=i.getElementById(a))?g(b):(b=e(i.getElementsByName(a)))?g(b):"top"===a&&g(null):g(null)}var i=b.document;return a&&d.$watch(function(){return c.hash()},function(a,b){(a!==b||""!==a)&&Ra(function(){d.$evalAsync(h)})}),h}]}function cb(a,b){return a||b?a?b?(Od(a)&&(a=a.join(" ")),Od(b)&&(b=b.join(" ")),a+" "+b):a:b:""}function db(a){for(var b=0;b<a.length;b++){var c=a[b];if(c.nodeType===Be)return c}}function eb(a){x(a)&&(a=a.split(" "));var b=qa();return f(a,function(a){a.length&&(b[a]=!0)}),b}function fb(a){return v(a)?a:{}}function gb(a,b,c,d){function e(a){try{a.apply(null,S(arguments,1))}finally{if(s--,0===s)for(;u.length;)try{u.pop()()}catch(b){c.error(b)}}}function g(a){var b=a.indexOf("#");return-1===b?"":a.substr(b)}function h(){z=null,j(),k()}function i(){try{return n.state}catch(a){}}function j(){v=i(),v=t(v)?null:v,Q(v,C)&&(v=C),C=v}function k(){(x!==l.url()||w!==v)&&(x=l.url(),w=v,f(A,function(a){a(l.url(),v)}))}var l=this,m=(b[0],a.location),n=a.history,o=a.setTimeout,q=a.clearTimeout,r={};l.isMock=!1;var s=0,u=[];l.$$completeOutstandingRequest=e,l.$$incOutstandingRequestCount=function(){s++},l.notifyWhenNoOutstandingRequests=function(a){0===s?a():u.push(a)};var v,w,x=m.href,y=b.find("base"),z=null;j(),w=v,l.url=function(b,c,e){if(t(e)&&(e=null),m!==a.location&&(m=a.location),n!==a.history&&(n=a.history),b){var f=w===e;if(x===b&&(!d.history||f))return l;var h=x&&Lb(x)===Lb(b);return x=b,w=e,!d.history||h&&f?((!h||z)&&(z=b),c?m.replace(b):h?m.hash=g(b):m.href=b,m.href!==b&&(z=b)):(n[c?"replaceState":"pushState"](e,"",b),j(),w=v),l}return z||m.href.replace(/%27/g,"'")},l.state=function(){return v};var A=[],B=!1,C=null;l.onUrlChange=function(b){return B||(d.history&&Cd(a).on("popstate",h),Cd(a).on("hashchange",h),B=!0),A.push(b),b},l.$$applicationDestroyed=function(){Cd(a).off("hashchange popstate",h)},l.$$checkUrlChange=k,l.baseHref=function(){var a=y.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""},l.defer=function(a,b){var c;return s++,c=o(function(){delete r[c],e(a)},b||0),r[c]=!0,c},l.defer.cancel=function(a){return r[a]?(delete r[a],q(a),e(p),!0):!1}}function hb(){this.$get=["$window","$log","$sniffer","$document",function(a,b,c,d){return new gb(a,d,b,c)}]}function ib(){this.$get=function(){function a(a,c){function e(a){a!=m&&(n?n==a&&(n=a.n):n=a,f(a.n,a.p),f(a,m),m=a,m.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw d("$cacheFactory")("iid","CacheId '{0}' is already taken!",a);var g=0,h=l({},c,{id:a}),i=qa(),j=c&&c.capacity||Number.MAX_VALUE,k=qa(),m=null,n=null;return b[a]={put:function(a,b){if(!t(b)){if(j<Number.MAX_VALUE){var c=k[a]||(k[a]={key:a});e(c)}return a in i||g++,i[a]=b,g>j&&this.remove(n.key),b}},get:function(a){if(j<Number.MAX_VALUE){var b=k[a];if(!b)return;e(b)}return i[a]},remove:function(a){if(j<Number.MAX_VALUE){var b=k[a];if(!b)return;b==m&&(m=b.p),b==n&&(n=b.n),f(b.n,b.p),delete k[a]}a in i&&(delete i[a],g--)},removeAll:function(){i=qa(),g=0,k=qa(),m=n=null},destroy:function(){i=null,h=null,k=null,delete b[a]},info:function(){return l({},h,{size:g})}}}var b={};return a.info=function(){var a={};return f(b,function(b,c){a[c]=b.info()}),a},a.get=function(a){return b[a]},a}}function jb(){this.$get=["$cacheFactory",function(a){return a("templates")}]}function kb(a,d){function e(a,b,c){var d=/^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/,e={};return f(a,function(a,f){var g=a.match(d);if(!g)throw He("iscp","Invalid {3} for directive '{0}'. Definition: {... {1}: '{2}' ...}",b,f,a,c?"controller bindings definition":"isolate scope definition");e[f]={mode:g[1][0],collection:"*"===g[2],optional:"?"===g[3],attrName:g[4]||f}}),e}function g(a,b){var c={isolateScope:null,bindToController:null};if(v(a.scope)&&(a.bindToController===!0?(c.bindToController=e(a.scope,b,!0),c.isolateScope={}):c.isolateScope=e(a.scope,b,!1)),v(a.bindToController)&&(c.bindToController=e(a.bindToController,b,!0)),v(c.bindToController)){var d=a.controller,f=a.controllerAs;if(!d)throw He("noctrl","Cannot bind to controller without directive '{0}'s controller.",b);if(!ob(d,f))throw He("noident","Cannot bind to controller without identifier for directive '{0}'.",b)}return c}function i(a){var b=a.charAt(0);if(!b||b!==wd(b))throw He("baddir","Directive name '{0}' is invalid. The first character must be a lowercase letter",a);if(a!==a.trim())throw He("baddir","Directive name '{0}' is invalid. The name should not contain leading or trailing whitespaces",a)}var j={},k="Directive",m=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,n=/(([\w\-]+)(?:\:([^;]+))?;?)/,s=L("ngSrc,ngSrcset,src,srcset"),w=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,y=/^(on[a-z]+|formaction)$/;this.directive=function B(b,c){return na(b,"directive"),x(b)?(i(b),la(c,"directiveFactory"),j.hasOwnProperty(b)||(j[b]=[],a.factory(b+k,["$injector","$exceptionHandler",function(a,c){var d=[];return f(j[b],function(e,f){try{var h=a.invoke(e);A(h)?h={compile:r(h)}:!h.compile&&h.link&&(h.compile=r(h.link)),h.priority=h.priority||0,h.index=f,h.name=h.name||b,h.require=h.require||h.controller&&h.name,h.restrict=h.restrict||"EA";var i=h.$$bindings=g(h,h.name);v(i.isolateScope)&&(h.$$isolateBindings=i.isolateScope),h.$$moduleName=e.$$moduleName,d.push(h)}catch(j){c(j)}}),d}])),j[b].push(c)):f(b,h(B)),this},this.aHrefSanitizationWhitelist=function(a){return u(a)?(d.aHrefSanitizationWhitelist(a),this):d.aHrefSanitizationWhitelist()},this.imgSrcSanitizationWhitelist=function(a){return u(a)?(d.imgSrcSanitizationWhitelist(a),this):d.imgSrcSanitizationWhitelist()};var z=!0;this.debugInfoEnabled=function(a){return u(a)?(z=a,this):z},this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,d,e,g,h,i,r,u,B,C,E){function F(a,b){try{a.addClass(b)}catch(c){}}function G(a,b,c,d,e){a instanceof Cd||(a=Cd(a)),f(a,function(b,c){b.nodeType==Zd&&b.nodeValue.match(/\S+/)&&(a[c]=Cd(b).wrap("<span></span>").parent()[0])});var g=I(a,b,a,c,d,e);G.$$addScopeClass(a);var h=null;return function(b,c,d){la(b,"scope"),e&&e.needsNewScope&&(b=b.$parent.$new()),d=d||{};var f=d.parentBoundTranscludeFn,i=d.transcludeControllers,j=d.futureParentElement;f&&f.$$boundTransclude&&(f=f.$$boundTransclude),h||(h=H(j));var k;if(k="html"!==h?Cd(_(h,Cd("<div>").append(a).html())):c?qe.clone.call(a):a,i)for(var l in i)k.data("$"+l+"Controller",i[l].instance);return G.$$addScopeInfo(k,b),c&&c(k,b),g&&g(b,k,k,f),k}}function H(a){var b=a&&a[0];return b&&"foreignobject"!==M(b)&&b.toString().match(/SVG/)?"svg":"html"}function I(a,b,d,e,f,g){function h(a,d,e,f){var g,h,i,j,k,l,m,n,q;if(o){var r=d.length;for(q=new Array(r),k=0;k<p.length;k+=3)m=p[k],q[m]=d[m]}else q=d;for(k=0,l=p.length;l>k;)i=q[p[k++]],g=p[k++],h=p[k++],g?(g.scope?(j=a.$new(),G.$$addScopeInfo(Cd(i),j)):j=a,n=g.transcludeOnThisElement?J(a,g.transclude,f):!g.templateOnThisElement&&f?f:!f&&b?J(a,b):null,g(h,j,i,e,n)):h&&h(a,i.childNodes,c,f)}for(var i,j,k,l,m,n,o,p=[],q=0;q<a.length;q++)i=new ga,j=K(a[q],[],i,0===q?e:c,f),k=j.length?P(j,a[q],i,b,d,null,[],[],g):null,k&&k.scope&&G.$$addScopeClass(i.$$element),m=k&&k.terminal||!(l=a[q].childNodes)||!l.length?null:I(l,k?(k.transcludeOnThisElement||!k.templateOnThisElement)&&k.transclude:b),(k||m)&&(p.push(q,k,m),n=!0,o=o||k),g=null;return n?h:null}function J(a,b,c){var d=function(d,e,f,g,h){return d||(d=a.$new(!1,h),d.$$transcluded=!0),b(d,e,{parentBoundTranscludeFn:c,transcludeControllers:f,futureParentElement:g})};return d}function K(a,b,c,d,e){var f,g,h=a.nodeType,i=c.$attr;switch(h){case Xd:T(b,lb(M(a)),"E",d,e);for(var j,k,l,o,p,q,r=a.attributes,s=0,t=r&&r.length;t>s;s++){var u=!1,w=!1;j=r[s],k=j.name,p=Qd(j.value),o=lb(k),(q=ma.test(o))&&(k=k.replace(Ie,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()}));var y=o.match(na);y&&U(y[1])&&(u=k,w=k.substr(0,k.length-5)+"end",k=k.substr(0,k.length-6)),l=lb(k.toLowerCase()),i[l]=k,(q||!c.hasOwnProperty(l))&&(c[l]=p,Sa(a,l)&&(c[l]=!0)),ba(a,b,p,l,q),T(b,l,"A",d,e,u,w)}if(g=a.className,v(g)&&(g=g.animVal),x(g)&&""!==g)for(;f=n.exec(g);)l=lb(f[2]),T(b,l,"C",d,e)&&(c[l]=Qd(f[3])),g=g.substr(f.index+f[0].length);break;case Zd:if(11===Bd)for(;a.parentNode&&a.nextSibling&&a.nextSibling.nodeType===Zd;)a.nodeValue=a.nodeValue+a.nextSibling.nodeValue,a.parentNode.removeChild(a.nextSibling);Z(b,a.nodeValue);break;case $d:try{f=m.exec(a.nodeValue),f&&(l=lb(f[1]),T(b,l,"M",d,e)&&(c[l]=Qd(f[2])))}catch(z){}}return b.sort(X),b}function L(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw He("uterdir","Unterminated attribute, found '{0}' but no matching '{1}' found.",b,c);a.nodeType==Xd&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--),d.push(a),a=a.nextSibling}while(e>0)}else d.push(a);return Cd(d)}function O(a,b,c){return function(d,e,f,g,h){return e=L(e[0],b,c),a(d,e,f,g,h)}}function P(a,d,f,g,h,j,k,l,m){function n(a,b,c,d){a&&(c&&(a=O(a,c,d)),a.require=r.require,a.directiveName=s,(E===r||r.$$isolateScope)&&(a=da(a,{isolateScope:!0})),k.push(a)),b&&(c&&(b=O(b,c,d)),b.require=r.require,b.directiveName=s,(E===r||r.$$isolateScope)&&(b=da(b,{isolateScope:!0})),l.push(b))}function o(a,b,c,d){var e;if(x(b)){var f=b.match(w),g=b.substring(f[0].length),h=f[1]||f[3],i="?"===f[2];if("^^"===h?c=c.parent():(e=d&&d[g],e=e&&e.instance),!e){var j="$"+g+"Controller";e=h?c.inheritedData(j):c.data(j)}if(!e&&!i)throw He("ctreq","Controller '{0}', required by directive '{1}', can't be found!",g,a)}else if(Od(b)){e=[];for(var k=0,l=b.length;l>k;k++)e[k]=o(a,b[k],c,d)}return e||null}function p(a,b,c,d,e,f){var g=qa();for(var h in d){var j=d[h],k={$scope:j===E||j.$$isolateScope?e:f,$element:a,$attrs:b,$transclude:c},l=j.controller;"@"==l&&(l=b[j.name]);var m=i(l,k,!0,j.controllerAs);g[j.name]=m,M||a.data("$"+j.name+"Controller",m.instance)}return g}function q(a,b,e,g,h){function i(a,b,d){var e;return D(a)||(d=b,b=a,a=c),M&&(e=q),d||(d=M?s.parent():s),h(a,b,e,d,H)}var j,m,n,q,r,s,t,u,v;d===e?(t=f,s=f.$$element):(s=Cd(e),t=new ga(s,f)),n=b,E?m=b.$new(!0):B&&(n=b.$parent),h&&(r=i,r.$$boundTransclude=h),C&&(q=p(s,t,r,C,m,b)),E&&(G.$$addScopeInfo(s,m,!0,!(F&&(F===E||F===E.$$originalDirective))),G.$$addScopeClass(s,!0),m.$$isolateBindings=E.$$isolateBindings,u=fa(b,t,m,m.$$isolateBindings,E),u&&m.$on("$destroy",u));for(var w in q){var x=C[w],y=q[w],z=x.$$bindings.bindToController;y.identifier&&z&&(v=fa(n,t,y.instance,z,x));var A=y();A!==y.instance&&(y.instance=A,s.data("$"+x.name+"Controller",A),v&&v(),v=fa(n,t,y.instance,z,x))}for(T=0,U=k.length;U>T;T++)j=k[T],ea(j,j.isolateScope?m:b,s,t,j.require&&o(j.directiveName,j.require,s,q),r);var H=b;for(E&&(E.template||null===E.templateUrl)&&(H=m),a&&a(H,e.childNodes,c,h),T=l.length-1;T>=0;T--)j=l[T],ea(j,j.isolateScope?m:b,s,t,j.require&&o(j.directiveName,j.require,s,q),r)}m=m||{};for(var r,s,t,u,y,z=-Number.MAX_VALUE,B=m.newScopeDirective,C=m.controllerDirectives,E=m.newIsolateScopeDirective,F=m.templateDirective,H=m.nonTlbTranscludeDirective,I=!1,J=!1,M=m.hasElementTranscludeDirective,N=f.$$element=Cd(d),P=j,Q=g,T=0,U=a.length;U>T;T++){r=a[T];var X=r.$$start,Z=r.$$end;if(X&&(N=L(d,X,Z)),t=c,z>r.priority)break;if((y=r.scope)&&(r.templateUrl||(v(y)?(Y("new/isolated scope",E||B,r,N),E=r):Y("new/isolated scope",E,r,N)),B=B||r),s=r.name,!r.templateUrl&&r.controller&&(y=r.controller,C=C||qa(),Y("'"+s+"' controller",C[s],r,N),C[s]=r),(y=r.transclude)&&(I=!0,r.$$tlb||(Y("transclusion",H,r,N),H=r),"element"==y?(M=!0,z=r.priority,t=N,N=f.$$element=Cd(b.createComment(" "+s+": "+f[s]+" ")),d=N[0],ca(h,S(t),d),Q=G(t,g,z,P&&P.name,{nonTlbTranscludeDirective:H})):(t=Cd(Da(d)).contents(),N.empty(),Q=G(t,g,c,c,{needsNewScope:r.$$isolateScope||r.$$newScope}))),r.template)if(J=!0,Y("template",F,r,N),F=r,y=A(r.template)?r.template(N,f):r.template,y=ka(y),r.replace){if(P=r,t=xa(y)?[]:nb(_(r.templateNamespace,Qd(y))),d=t[0],1!=t.length||d.nodeType!==Xd)throw He("tplrt","Template for directive '{0}' must have exactly one root element. {1}",s,"");ca(h,N,d);var aa={$attr:{}},ba=K(d,[],aa),ha=a.splice(T+1,a.length-(T+1));(E||B)&&R(ba,E,B),a=a.concat(ba).concat(ha),V(f,aa),U=a.length}else N.html(y);if(r.templateUrl)J=!0,Y("template",F,r,N),F=r,r.replace&&(P=r),q=W(a.splice(T,a.length-T),N,f,h,I&&Q,k,l,{controllerDirectives:C,newScopeDirective:B!==r&&B,newIsolateScopeDirective:E,templateDirective:F,nonTlbTranscludeDirective:H}),U=a.length;else if(r.compile)try{u=r.compile(N,f,Q),A(u)?n(null,u,X,Z):u&&n(u.pre,u.post,X,Z)}catch(ia){e(ia,$(N))}r.terminal&&(q.terminal=!0,z=Math.max(z,r.priority))}return q.scope=B&&B.scope===!0,q.transcludeOnThisElement=I,q.templateOnThisElement=J,q.transclude=Q,m.hasElementTranscludeDirective=M,q}function R(a,b,c){for(var d=0,e=a.length;e>d;d++)a[d]=o(a[d],{$$isolateScope:b,$$newScope:c})}function T(b,c,d,f,g,h,i){if(c===g)return null;var l=null;if(j.hasOwnProperty(c))for(var m,n=a.get(c+k),p=0,q=n.length;q>p;p++)try{m=n[p],(t(f)||f>m.priority)&&-1!=m.restrict.indexOf(d)&&(h&&(m=o(m,{$$start:h,$$end:i})),b.push(m),l=m)}catch(r){e(r)}return l}function U(b){if(j.hasOwnProperty(b))for(var c,d=a.get(b+k),e=0,f=d.length;f>e;e++)if(c=d[e],c.multiElement)return!0;return!1}function V(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;f(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))}),f(b,function(b,f){"class"==f?(F(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function W(a,b,c,d,e,h,i,j){var k,l,m=[],n=b[0],p=a.shift(),q=o(p,{templateUrl:null,transclude:null,replace:null,$$originalDirective:p}),r=A(p.templateUrl)?p.templateUrl(b,c):p.templateUrl,s=p.templateNamespace;return b.empty(),g(r).then(function(g){var o,t,u,w;if(g=ka(g),p.replace){if(u=xa(g)?[]:nb(_(s,Qd(g))),o=u[0],1!=u.length||o.nodeType!==Xd)throw He("tplrt","Template for directive '{0}' must have exactly one root element. {1}",p.name,r);t={$attr:{}},ca(d,b,o);var x=K(o,[],t);v(p.scope)&&R(x,!0),a=x.concat(a),V(c,t)}else o=n,b.html(g);for(a.unshift(q),k=P(a,o,c,e,b,p,h,i,j),f(d,function(a,c){a==o&&(d[c]=b[0])}),l=I(b[0].childNodes,e);m.length;){var y=m.shift(),z=m.shift(),A=m.shift(),B=m.shift(),C=b[0];if(!y.$$destroyed){if(z!==n){var D=z.className;j.hasElementTranscludeDirective&&p.replace||(C=Da(o)),ca(A,Cd(z),C),F(Cd(C),D)}w=k.transcludeOnThisElement?J(y,k.transclude,B):B,k(l,y,C,d,w)}}m=null}),function(a,b,c,d,e){var f=e;b.$$destroyed||(m?m.push(b,c,d,f):(k.transcludeOnThisElement&&(f=J(b,k.transclude,e)),k(l,b,c,d,f)))}}function X(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function Y(a,b,c,d){function e(a){return a?" (module: "+a+")":""}if(b)throw He("multidir","Multiple directives [{0}{1}, {2}{3}] asking for {4} on: {5}",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),a,$(d))}function Z(a,b){var c=d(b,!0);c&&a.push({priority:0,compile:function(a){var b=a.parent(),d=!!b.length;return d&&G.$$addBindingClass(b),function(a,b){var e=b.parent();d||G.$$addBindingClass(e),G.$$addBindingInfo(e,c.expressions),a.$watch(c,function(a){b[0].nodeValue=a})}}})}function _(a,c){switch(a=wd(a||"html")){case"svg":case"math":var d=b.createElement("div");return d.innerHTML="<"+a+">"+c+"</"+a+">",d.childNodes[0].childNodes;default:return c}}function aa(a,b){if("srcdoc"==b)return B.HTML;var c=M(a);return"xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b)?B.RESOURCE_URL:void 0}function ba(a,b,c,e,f){var g=aa(a,e);f=s[e]||f;var h=d(c,!0,g,f);if(h){if("multiple"===e&&"select"===M(a))throw He("selmulti","Binding to the 'multiple' attribute is not supported. Element: {0}",$(a));b.push({priority:100,compile:function(){return{pre:function(a,b,i){var j=i.$$observers||(i.$$observers=qa());if(y.test(e))throw He("nodomevents","Interpolations for HTML DOM event attributes are disallowed.  Please use the ng- versions (such as ng-click instead of onclick) instead.");var k=i[e];k!==c&&(h=k&&d(k,!0,g,f),c=k),h&&(i[e]=h(a),(j[e]||(j[e]=[])).$$inter=!0,(i.$$observers&&i.$$observers[e].$$scope||a).$watch(h,function(a,b){"class"===e&&a!=b?i.$updateClass(a,b):i.$set(e,a)}))}}}})}}function ca(a,c,d){var e,f,g=c[0],h=c.length,i=g.parentNode;if(a)for(e=0,f=a.length;f>e;e++)if(a[e]==g){a[e++]=d;for(var j=e,k=j+h-1,l=a.length;l>j;j++,k++)l>k?a[j]=a[k]:delete a[j];a.length-=h-1,a.context===g&&(a.context=d);break}i&&i.replaceChild(d,g);var m=b.createDocumentFragment();m.appendChild(g),Cd.hasData(g)&&(Cd.data(d,Cd.data(g)),Dd?(Nd=!0,Dd.cleanData([g])):delete Cd.cache[g[Cd.expando]]);for(var n=1,o=c.length;o>n;n++){var p=c[n];Cd(p).remove(),m.appendChild(p),delete c[n]}c[0]=d,c.length=1}function da(a,b){return l(function(){return a.apply(null,arguments)},a,b)}function ea(a,b,c,d,f,g){try{a(b,c,d,f,g)}catch(h){e(h,$(c))}}function fa(a,b,c,e,g){var i=[];return f(e,function(e,f){var j,k,l,m,n=e.attrName,o=e.optional,q=e.mode;switch(q){case"@":o||xd.call(b,n)||(c[f]=b[n]=void 0),b.$observe(n,function(a){x(a)&&(c[f]=a)}),b.$$observers[n].$$scope=a,x(b[n])&&(c[f]=d(b[n])(a));break;case"=":if(!xd.call(b,n)){if(o)break;b[n]=void 0}if(o&&!b[n])break;k=h(b[n]),m=k.literal?Q:function(a,b){return a===b||a!==a&&b!==b},l=k.assign||function(){throw j=c[f]=k(a),He("nonassign","Expression '{0}' used with directive '{1}' is non-assignable!",b[n],g.name)},j=c[f]=k(a);var r=function(b){return m(b,c[f])||(m(b,j)?l(a,b=c[f]):c[f]=b),j=b};r.$stateful=!0;var s;s=e.collection?a.$watchCollection(b[n],r):a.$watch(h(b[n],r),null,k.literal),i.push(s);break;case"&":if(k=b.hasOwnProperty(n)?h(b[n]):p,k===p&&o)break;c[f]=function(b){return k(a,b)}}}),i.length&&function(){for(var a=0,b=i.length;b>a;++a)i[a]()}}var ga=function(a,b){if(b){var c,d,e,f=Object.keys(b);for(c=0,d=f.length;d>c;c++)e=f[c],this[e]=b[e]}else this.$attr={};this.$$element=a};ga.prototype={$normalize:lb,$addClass:function(a){a&&a.length>0&&C.addClass(this.$$element,a)},$removeClass:function(a){a&&a.length>0&&C.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=mb(a,b);c&&c.length&&C.addClass(this.$$element,c);var d=mb(b,a);d&&d.length&&C.removeClass(this.$$element,d)},$set:function(a,b,c,d){var g,h=this.$$element[0],i=Sa(h,a),j=Ta(a),k=a;if(i?(this.$$element.prop(a,b),d=i):j&&(this[j]=b,k=j),this[a]=b,d?this.$attr[a]=d:(d=this.$attr[a],d||(this.$attr[a]=d=ja(a,"-"))),g=M(this.$$element),"a"===g&&"href"===a||"img"===g&&"src"===a)this[a]=b=E(b,"src"===a);else if("img"===g&&"srcset"===a){for(var l="",m=Qd(b),n=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,o=/\s/.test(m)?n:/(,)/,p=m.split(o),q=Math.floor(p.length/2),r=0;q>r;r++){var s=2*r;l+=E(Qd(p[s]),!0),l+=" "+Qd(p[s+1])}var u=Qd(p[2*r]).split(/\s/);l+=E(Qd(u[0]),!0),2===u.length&&(l+=" "+Qd(u[1])),this[a]=b=l}c!==!1&&(null===b||t(b)?this.$$element.removeAttr(d):this.$$element.attr(d,b));var v=this.$$observers;v&&f(v[k],function(a){try{a(b)}catch(c){e(c)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=qa()),e=d[a]||(d[a]=[]);return e.push(b),r.$evalAsync(function(){e.$$inter||!c.hasOwnProperty(a)||t(c[a])||b(c[a])}),function(){N(e,b)}}};var ha=d.startSymbol(),ia=d.endSymbol(),ka="{{"==ha||"}}"==ia?q:function(a){return a.replace(/\{\{/g,ha).replace(/}}/g,ia)},ma=/^ngAttr[A-Z]/,na=/^(.+)Start$/;return G.$$addBindingInfo=z?function(a,b){var c=a.data("$binding")||[];Od(b)?c=c.concat(b):c.push(b),a.data("$binding",c)}:p,G.$$addBindingClass=z?function(a){F(a,"ng-binding")}:p,G.$$addScopeInfo=z?function(a,b,c,d){var e=c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope";a.data(e,b)}:p,G.$$addScopeClass=z?function(a,b){F(a,b?"ng-isolate-scope":"ng-scope")}:p,G}]}function lb(a){return wa(a.replace(Ie,""))}function mb(a,b){var c="",d=a.split(/\s+/),e=b.split(/\s+/);a:for(var f=0;f<d.length;f++){for(var g=d[f],h=0;h<e.length;h++)if(g==e[h])continue a;c+=(c.length>0?" ":"")+g}return c}function nb(a){a=Cd(a);var b=a.length;if(1>=b)return a;for(;b--;){var c=a[b];c.nodeType===$d&&Gd.call(a,b,1)}return a}function ob(a,b){if(b&&x(b))return b;if(x(a)){var c=Ke.exec(a);if(c)return c[3]}}function pb(){var a={},b=!1;this.register=function(b,c){na(b,"controller"),v(b)?l(a,b):a[b]=c},this.allowGlobals=function(){b=!0},this.$get=["$injector","$window",function(e,f){function g(a,b,c,e){if(!a||!v(a.$scope))throw d("$controller")("noscp","Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.",e,b);a.$scope[b]=c}return function(d,h,i,j){var k,m,n,o;if(i=i===!0,j&&x(j)&&(o=j),x(d)){if(m=d.match(Ke),!m)throw Je("ctrlfmt","Badly formed controller string '{0}'. Must match `__name__ as __id__` or `__name__`.",d);n=m[1],o=o||m[3],d=a.hasOwnProperty(n)?a[n]:oa(h.$scope,n,!0)||(b?oa(f,n,!0):c),ma(d,n,!0)}if(i){var p=(Od(d)?d[d.length-1]:d).prototype;k=Object.create(p||null),o&&g(h,o,k,n||d.name);var q;return q=l(function(){var a=e.invoke(d,k,h,n);return a!==k&&(v(a)||A(a))&&(k=a,o&&g(h,o,k,n||d.name)),k},{instance:k,identifier:o})}return k=e.instantiate(d,h,n),o&&g(h,o,k,n||d.name),
+k}}]}function qb(){this.$get=["$window",function(a){return Cd(a.document)}]}function rb(){this.$get=["$log",function(a){return function(b,c){a.error.apply(a,arguments)}}]}function sb(a){return v(a)?z(a)?a.toISOString():V(a):a}function tb(){this.$get=function(){return function(a){if(!a)return"";var b=[];return g(a,function(a,c){null===a||t(a)||(Od(a)?f(a,function(a,d){b.push(da(c)+"="+da(sb(a)))}):b.push(da(c)+"="+da(sb(a))))}),b.join("&")}}}function ub(){this.$get=function(){return function(a){function b(a,d,e){null===a||t(a)||(Od(a)?f(a,function(a,c){b(a,d+"["+(v(a)?c:"")+"]")}):v(a)&&!z(a)?g(a,function(a,c){b(a,d+(e?"":"[")+c+(e?"":"]"))}):c.push(da(d)+"="+da(sb(a))))}if(!a)return"";var c=[];return b(a,"",!0),c.join("&")}}}function vb(a,b){if(x(a)){var c=a.replace(Qe,"").trim();if(c){var d=b("Content-Type");(d&&0===d.indexOf(Me)||wb(c))&&(a=W(c))}}return a}function wb(a){var b=a.match(Oe);return b&&Pe[b[0]].test(a)}function xb(a){function b(a,b){a&&(d[a]=d[a]?d[a]+", "+b:b)}var c,d=qa();return x(a)?f(a.split("\n"),function(a){c=a.indexOf(":"),b(wd(Qd(a.substr(0,c))),Qd(a.substr(c+1)))}):v(a)&&f(a,function(a,c){b(wd(c),Qd(a))}),d}function yb(a){var b;return function(c){if(b||(b=xb(a)),c){var d=b[wd(c)];return void 0===d&&(d=null),d}return b}}function zb(a,b,c,d){return A(d)?d(a,b,c):(f(d,function(d){a=d(a,b,c)}),a)}function Ab(a){return a>=200&&300>a}function Bb(){var a=this.defaults={transformResponse:[vb],transformRequest:[function(a){return!v(a)||E(a)||G(a)||F(a)?a:V(a)}],headers:{common:{Accept:"application/json, text/plain, */*"},post:P(Ne),put:P(Ne),patch:P(Ne)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer"},b=!1;this.useApplyAsync=function(a){return u(a)?(b=!!a,this):b};var e=!0;this.useLegacyPromiseExtensions=function(a){return u(a)?(e=!!a,this):e};var g=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector",function(h,i,j,k,m,n){function o(b){function g(a){var b=l({},a);return b.data=zb(a.data,a.headers,a.status,j.transformResponse),Ab(a.status)?b:m.reject(b)}function h(a,b){var c,d={};return f(a,function(a,e){A(a)?(c=a(b),null!=c&&(d[e]=c)):d[e]=a}),d}function i(b){var c,d,e,f=a.headers,g=l({},b.headers);f=l({},f.common,f[wd(b.method)]);a:for(c in f){d=wd(c);for(e in g)if(wd(e)===d)continue a;g[c]=f[c]}return h(g,P(b))}if(!Ld.isObject(b))throw d("$http")("badreq","Http request configuration must be an object.  Received: {0}",b);var j=l({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer},b);j.headers=i(b),j.method=yd(j.method),j.paramSerializer=x(j.paramSerializer)?n.get(j.paramSerializer):j.paramSerializer;var k=function(b){var d=b.headers,e=zb(b.data,yb(d),c,b.transformRequest);return t(e)&&f(d,function(a,b){"content-type"===wd(b)&&delete d[b]}),t(b.withCredentials)&&!t(a.withCredentials)&&(b.withCredentials=a.withCredentials),r(b,e).then(g,g)},o=[k,c],p=m.when(j);for(f(y,function(a){(a.request||a.requestError)&&o.unshift(a.request,a.requestError),(a.response||a.responseError)&&o.push(a.response,a.responseError)});o.length;){var q=o.shift(),s=o.shift();p=p.then(q,s)}return e?(p.success=function(a){return ma(a,"fn"),p.then(function(b){a(b.data,b.status,b.headers,j)}),p},p.error=function(a){return ma(a,"fn"),p.then(null,function(b){a(b.data,b.status,b.headers,j)}),p}):(p.success=Se("success"),p.error=Se("error")),p}function p(a){f(arguments,function(a){o[a]=function(b,c){return o(l({},c||{},{method:a,url:b}))}})}function q(a){f(arguments,function(a){o[a]=function(b,c,d){return o(l({},d||{},{method:a,url:b,data:c}))}})}function r(d,e){function f(a,c,d,e){function f(){g(c,a,d,e)}n&&(Ab(a)?n.put(y,[a,c,xb(d),e]):n.remove(y)),b?k.$applyAsync(f):(f(),k.$$phase||k.$apply())}function g(a,b,c,e){b=b>=-1?b:0,(Ab(b)?q.resolve:q.reject)({data:a,status:b,headers:yb(c),config:d,statusText:e})}function j(a){g(a.data,a.status,P(a.headers()),a.statusText)}function l(){var a=o.pendingRequests.indexOf(d);-1!==a&&o.pendingRequests.splice(a,1)}var n,p,q=m.defer(),r=q.promise,x=d.headers,y=s(d.url,d.paramSerializer(d.params));if(o.pendingRequests.push(d),r.then(l,l),!d.cache&&!a.cache||d.cache===!1||"GET"!==d.method&&"JSONP"!==d.method||(n=v(d.cache)?d.cache:v(a.cache)?a.cache:w),n&&(p=n.get(y),u(p)?I(p)?p.then(j,j):Od(p)?g(p[1],p[0],P(p[2]),p[3]):g(p,200,{},"OK"):n.put(y,r)),t(p)){var z=Cc(d.url)?i()[d.xsrfCookieName||a.xsrfCookieName]:c;z&&(x[d.xsrfHeaderName||a.xsrfHeaderName]=z),h(d.method,y,e,f,x,d.timeout,d.withCredentials,d.responseType)}return r}function s(a,b){return b.length>0&&(a+=(-1==a.indexOf("?")?"?":"&")+b),a}var w=j("$http");a.paramSerializer=x(a.paramSerializer)?n.get(a.paramSerializer):a.paramSerializer;var y=[];return f(g,function(a){y.unshift(x(a)?n.get(a):n.invoke(a))}),o.pendingRequests=[],p("get","delete","head","jsonp"),q("post","put","patch"),o.defaults=a,o}]}function Cb(){this.$get=function(){return function(){return new a.XMLHttpRequest}}}function Db(){this.$get=["$browser","$window","$document","$xhrFactory",function(a,b,c,d){return Eb(a,d,a.defer,b.angular.callbacks,c[0])}]}function Eb(a,b,c,d,e){function g(a,b,c){var f=e.createElement("script"),g=null;return f.type="text/javascript",f.src=a,f.async=!0,g=function(a){fe(f,"load",g),fe(f,"error",g),e.body.removeChild(f),f=null;var h=-1,i="unknown";a&&("load"!==a.type||d[b].called||(a={type:"error"}),i=a.type,h="error"===a.type?404:200),c&&c(h,i)},ee(f,"load",g),ee(f,"error",g),e.body.appendChild(f),g}return function(e,h,i,j,k,l,m,n){function o(){s&&s(),v&&v.abort()}function q(b,d,e,f,g){u(y)&&c.cancel(y),s=v=null,b(d,e,f,g),a.$$completeOutstandingRequest(p)}if(a.$$incOutstandingRequestCount(),h=h||a.url(),"jsonp"==wd(e)){var r="_"+(d.counter++).toString(36);d[r]=function(a){d[r].data=a,d[r].called=!0};var s=g(h.replace("JSON_CALLBACK","angular.callbacks."+r),r,function(a,b){q(j,a,d[r].data,"",b),d[r]=p})}else{var v=b(e,h);v.open(e,h,!0),f(k,function(a,b){u(a)&&v.setRequestHeader(b,a)}),v.onload=function(){var a=v.statusText||"",b="response"in v?v.response:v.responseText,c=1223===v.status?204:v.status;0===c&&(c=b?200:"file"==Bc(h).protocol?404:0),q(j,c,b,v.getAllResponseHeaders(),a)};var w=function(){q(j,-1,null,null,"")};if(v.onerror=w,v.onabort=w,m&&(v.withCredentials=!0),n)try{v.responseType=n}catch(x){if("json"!==n)throw x}v.send(t(i)?null:i)}if(l>0)var y=c(o,l);else I(l)&&l.then(o)}}function Fb(){var a="{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a},this.endSymbol=function(a){return a?(b=a,this):b},this.$get=["$parse","$exceptionHandler","$sce",function(c,d,e){function f(a){return"\\\\\\"+a}function g(c){return c.replace(m,a).replace(n,b)}function h(a){if(null==a)return"";switch(typeof a){case"string":break;case"number":a=""+a;break;default:a=V(a)}return a}function i(f,i,m,n){function o(a){try{return a=C(a),n&&!u(a)?a:h(a)}catch(b){d(Te.interr(f,b))}}n=!!n;for(var p,q,r,s=0,v=[],w=[],x=f.length,y=[],z=[];x>s;){if(-1==(p=f.indexOf(a,s))||-1==(q=f.indexOf(b,p+j))){s!==x&&y.push(g(f.substring(s)));break}s!==p&&y.push(g(f.substring(s,p))),r=f.substring(p+j,q),v.push(r),w.push(c(r,o)),s=q+k,z.push(y.length),y.push("")}if(m&&y.length>1&&Te.throwNoconcat(f),!i||v.length){var B=function(a){for(var b=0,c=v.length;c>b;b++){if(n&&t(a[b]))return;y[z[b]]=a[b]}return y.join("")},C=function(a){return m?e.getTrusted(m,a):e.valueOf(a)};return l(function(a){var b=0,c=v.length,e=new Array(c);try{for(;c>b;b++)e[b]=w[b](a);return B(e)}catch(g){d(Te.interr(f,g))}},{exp:f,expressions:v,$$watchDelegate:function(a,b){var c;return a.$watchGroup(w,function(d,e){var f=B(d);A(b)&&b.call(this,f,d!==e?c:f,a),c=f})}})}}var j=a.length,k=b.length,m=new RegExp(a.replace(/./g,f),"g"),n=new RegExp(b.replace(/./g,f),"g");return i.startSymbol=function(){return a},i.endSymbol=function(){return b},i}]}function Gb(){this.$get=["$rootScope","$window","$q","$$q",function(a,b,c,d){function e(e,g,h,i){var j=arguments.length>4,k=j?S(arguments,4):[],l=b.setInterval,m=b.clearInterval,n=0,o=u(i)&&!i,p=(o?d:c).defer(),q=p.promise;return h=u(h)?h:0,q.then(null,null,j?function(){e.apply(null,k)}:e),q.$$intervalId=l(function(){p.notify(n++),h>0&&n>=h&&(p.resolve(n),m(q.$$intervalId),delete f[q.$$intervalId]),o||a.$apply()},g),f[q.$$intervalId]=p,q}var f={};return e.cancel=function(a){return a&&a.$$intervalId in f?(f[a.$$intervalId].reject("canceled"),b.clearInterval(a.$$intervalId),delete f[a.$$intervalId],!0):!1},e}]}function Hb(a){for(var b=a.split("/"),c=b.length;c--;)b[c]=ca(b[c]);return b.join("/")}function Ib(a,b){var c=Bc(a);b.$$protocol=c.protocol,b.$$host=c.hostname,b.$$port=n(c.port)||Ve[c.protocol]||null}function Jb(a,b){var c="/"!==a.charAt(0);c&&(a="/"+a);var d=Bc(a);b.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)?d.pathname.substring(1):d.pathname),b.$$search=aa(d.search),b.$$hash=decodeURIComponent(d.hash),b.$$path&&"/"!=b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function Kb(a,b){return 0===b.indexOf(a)?b.substr(a.length):void 0}function Lb(a){var b=a.indexOf("#");return-1==b?a:a.substr(0,b)}function Mb(a){return a.replace(/(#.+)|#$/,"$1")}function Nb(a){return a.substr(0,Lb(a).lastIndexOf("/")+1)}function Ob(a){return a.substring(0,a.indexOf("/",a.indexOf("//")+2))}function Pb(a,b,c){this.$$html5=!0,c=c||"",Ib(a,this),this.$$parse=function(a){var c=Kb(b,a);if(!x(c))throw We("ipthprfx",'Invalid url "{0}", missing path prefix "{1}".',a,b);Jb(c,this),this.$$path||(this.$$path="/"),this.$$compose()},this.$$compose=function(){var a=ba(this.$$search),c=this.$$hash?"#"+ca(this.$$hash):"";this.$$url=Hb(this.$$path)+(a?"?"+a:"")+c,this.$$absUrl=b+this.$$url.substr(1)},this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g,h;return u(f=Kb(a,d))?(g=f,h=u(f=Kb(c,f))?b+(Kb("/",f)||f):a+g):u(f=Kb(b,d))?h=b+f:b==d+"/"&&(h=b),h&&this.$$parse(h),!!h}}function Qb(a,b,c){Ib(a,this),this.$$parse=function(d){function e(a,b,c){var d,e=/^\/[A-Z]:(\/.*)/;return 0===b.indexOf(c)&&(b=b.replace(c,"")),e.exec(b)?a:(d=e.exec(a),d?d[1]:a)}var f,g=Kb(a,d)||Kb(b,d);t(g)||"#"!==g.charAt(0)?this.$$html5?f=g:(f="",t(g)&&(a=d,this.replace())):(f=Kb(c,g),t(f)&&(f=g)),Jb(f,this),this.$$path=e(this.$$path,f,a),this.$$compose()},this.$$compose=function(){var b=ba(this.$$search),d=this.$$hash?"#"+ca(this.$$hash):"";this.$$url=Hb(this.$$path)+(b?"?"+b:"")+d,this.$$absUrl=a+(this.$$url?c+this.$$url:"")},this.$$parseLinkUrl=function(b,c){return Lb(a)==Lb(b)?(this.$$parse(b),!0):!1}}function Rb(a,b,c){this.$$html5=!0,Qb.apply(this,arguments),this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;return a==Lb(d)?f=d:(g=Kb(b,d))?f=a+c+g:b===d+"/"&&(f=b),f&&this.$$parse(f),!!f},this.$$compose=function(){var b=ba(this.$$search),d=this.$$hash?"#"+ca(this.$$hash):"";this.$$url=Hb(this.$$path)+(b?"?"+b:"")+d,this.$$absUrl=a+c+this.$$url}}function Sb(a){return function(){return this[a]}}function Tb(a,b){return function(c){return t(c)?this[a]:(this[a]=b(c),this.$$compose(),this)}}function Ub(){var a="",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return u(b)?(a=b,this):a},this.html5Mode=function(a){return H(a)?(b.enabled=a,this):v(a)?(H(a.enabled)&&(b.enabled=a.enabled),H(a.requireBase)&&(b.requireBase=a.requireBase),H(a.rewriteLinks)&&(b.rewriteLinks=a.rewriteLinks),this):b},this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(c,d,e,f,g){function h(a,b,c){var e=j.url(),f=j.$$state;try{d.url(a,b,c),j.$$state=d.state()}catch(g){throw j.url(e),j.$$state=f,g}}function i(a,b){c.$broadcast("$locationChangeSuccess",j.absUrl(),a,j.$$state,b)}var j,k,l,m=d.baseHref(),n=d.url();if(b.enabled){if(!m&&b.requireBase)throw We("nobase","$location in HTML5 mode requires a <base> tag to be present!");l=Ob(n)+(m||"/"),k=e.history?Pb:Rb}else l=Lb(n),k=Qb;var o=Nb(l);j=new k(l,o,"#"+a),j.$$parseLinkUrl(n,n),j.$$state=d.state();var p=/^\s*(javascript|mailto):/i;f.on("click",function(a){if(b.rewriteLinks&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!=a.which&&2!=a.button){for(var e=Cd(a.target);"a"!==M(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),i=e.attr("href")||e.attr("xlink:href");v(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=Bc(h.animVal).href),p.test(h)||!h||e.attr("target")||a.isDefaultPrevented()||j.$$parseLinkUrl(h,i)&&(a.preventDefault(),j.absUrl()!=d.url()&&(c.$apply(),g.angular["ff-684208-preventDefault"]=!0))}}),Mb(j.absUrl())!=Mb(n)&&d.url(j.absUrl(),!0);var q=!0;return d.onUrlChange(function(a,b){return t(Kb(o,a))?void(g.location.href=a):(c.$evalAsync(function(){var d,e=j.absUrl(),f=j.$$state;a=Mb(a),j.$$parse(a),j.$$state=b,d=c.$broadcast("$locationChangeStart",a,e,b,f).defaultPrevented,j.absUrl()===a&&(d?(j.$$parse(e),j.$$state=f,h(e,!1,f)):(q=!1,i(e,f)))}),void(c.$$phase||c.$digest()))}),c.$watch(function(){var a=Mb(d.url()),b=Mb(j.absUrl()),f=d.state(),g=j.$$replace,k=a!==b||j.$$html5&&e.history&&f!==j.$$state;(q||k)&&(q=!1,c.$evalAsync(function(){var b=j.absUrl(),d=c.$broadcast("$locationChangeStart",b,a,j.$$state,f).defaultPrevented;j.absUrl()===b&&(d?(j.$$parse(a),j.$$state=f):(k&&h(b,g,f===j.$$state?null:j.$$state),i(a,f)))})),j.$$replace=!1}),j}]}function Vb(){var a=!0,b=this;this.debugEnabled=function(b){return u(b)?(a=b,this):a},this.$get=["$window",function(c){function d(a){return a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line)),a}function e(a){var b=c.console||{},e=b[a]||b.log||p,g=!1;try{g=!!e.apply}catch(h){}return g?function(){var a=[];return f(arguments,function(b){a.push(d(b))}),e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function Wb(a,b){if("__defineGetter__"===a||"__defineSetter__"===a||"__lookupGetter__"===a||"__lookupSetter__"===a||"__proto__"===a)throw Ye("isecfld","Attempting to access a disallowed field in Angular expressions! Expression: {0}",b);return a}function Xb(a,b){if(a+="",!x(a))throw Ye("iseccst","Cannot convert object to primitive value! Expression: {0}",b);return a}function Yb(a,b){if(a){if(a.constructor===a)throw Ye("isecfn","Referencing Function in Angular expressions is disallowed! Expression: {0}",b);if(a.window===a)throw Ye("isecwindow","Referencing the Window in Angular expressions is disallowed! Expression: {0}",b);if(a.children&&(a.nodeName||a.prop&&a.attr&&a.find))throw Ye("isecdom","Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}",b);if(a===Object)throw Ye("isecobj","Referencing Object in Angular expressions is disallowed! Expression: {0}",b)}return a}function Zb(a,b){if(a){if(a.constructor===a)throw Ye("isecfn","Referencing Function in Angular expressions is disallowed! Expression: {0}",b);if(a===Ze||a===$e||a===_e)throw Ye("isecff","Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}",b)}}function $b(a,b){if(a&&(a===0..constructor||a===(!1).constructor||a==="".constructor||a==={}.constructor||a===[].constructor||a===Function.constructor))throw Ye("isecaf","Assigning to a constructor is disallowed! Expression: {0}",b)}function _b(a,b){return"undefined"!=typeof a?a:b}function ac(a,b){return"undefined"==typeof a?b:"undefined"==typeof b?a:a+b}function bc(a,b){var c=a(b);return!c.$stateful}function cc(a,b){var c,d;switch(a.type){case df.Program:c=!0,f(a.body,function(a){cc(a.expression,b),c=c&&a.expression.constant}),a.constant=c;break;case df.Literal:a.constant=!0,a.toWatch=[];break;case df.UnaryExpression:cc(a.argument,b),a.constant=a.argument.constant,a.toWatch=a.argument.toWatch;break;case df.BinaryExpression:cc(a.left,b),cc(a.right,b),a.constant=a.left.constant&&a.right.constant,a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case df.LogicalExpression:cc(a.left,b),cc(a.right,b),a.constant=a.left.constant&&a.right.constant,a.toWatch=a.constant?[]:[a];break;case df.ConditionalExpression:cc(a.test,b),cc(a.alternate,b),cc(a.consequent,b),a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant,a.toWatch=a.constant?[]:[a];break;case df.Identifier:a.constant=!1,a.toWatch=[a];break;case df.MemberExpression:cc(a.object,b),a.computed&&cc(a.property,b),a.constant=a.object.constant&&(!a.computed||a.property.constant),a.toWatch=[a];break;case df.CallExpression:c=a.filter?bc(b,a.callee.name):!1,d=[],f(a.arguments,function(a){cc(a,b),c=c&&a.constant,a.constant||d.push.apply(d,a.toWatch)}),a.constant=c,a.toWatch=a.filter&&bc(b,a.callee.name)?d:[a];break;case df.AssignmentExpression:cc(a.left,b),cc(a.right,b),a.constant=a.left.constant&&a.right.constant,a.toWatch=[a];break;case df.ArrayExpression:c=!0,d=[],f(a.elements,function(a){cc(a,b),c=c&&a.constant,a.constant||d.push.apply(d,a.toWatch)}),a.constant=c,a.toWatch=d;break;case df.ObjectExpression:c=!0,d=[],f(a.properties,function(a){cc(a.value,b),c=c&&a.value.constant,a.value.constant||d.push.apply(d,a.value.toWatch)}),a.constant=c,a.toWatch=d;break;case df.ThisExpression:a.constant=!1,a.toWatch=[]}}function dc(a){if(1==a.length){var b=a[0].expression,d=b.toWatch;return 1!==d.length?d:d[0]!==b?d:c}}function ec(a){return a.type===df.Identifier||a.type===df.MemberExpression}function fc(a){return 1===a.body.length&&ec(a.body[0].expression)?{type:df.AssignmentExpression,left:a.body[0].expression,right:{type:df.NGValueParameter},operator:"="}:void 0}function gc(a){return 0===a.body.length||1===a.body.length&&(a.body[0].expression.type===df.Literal||a.body[0].expression.type===df.ArrayExpression||a.body[0].expression.type===df.ObjectExpression)}function hc(a){return a.constant}function ic(a,b){this.astBuilder=a,this.$filter=b}function jc(a,b){this.astBuilder=a,this.$filter=b}function kc(a){return"constructor"==a}function lc(a){return A(a.valueOf)?a.valueOf():ff.call(a)}function mc(){var a=qa(),b=qa();this.$get=["$filter",function(d){function e(a,b){return null==a||null==b?a===b:"object"==typeof a&&(a=lc(a),"object"==typeof a)?!1:a===b||a!==a&&b!==b}function g(a,b,d,f,g){var h,i=f.inputs;if(1===i.length){var j=e;return i=i[0],a.$watch(function(a){var b=i(a);return e(b,j)||(h=f(a,c,c,[b]),j=b&&lc(b)),h},b,d,g)}for(var k=[],l=[],m=0,n=i.length;n>m;m++)k[m]=e,l[m]=null;return a.$watch(function(a){for(var b=!1,d=0,g=i.length;g>d;d++){var j=i[d](a);(b||(b=!e(j,k[d])))&&(l[d]=j,k[d]=j&&lc(j))}return b&&(h=f(a,c,c,l)),h},b,d,g)}function h(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a,A(b)&&b.apply(this,arguments),u(a)&&d.$$postDigest(function(){u(f)&&e()})},c)}function i(a,b,c,d){function e(a){var b=!0;return f(a,function(a){u(a)||(b=!1)}),b}var g,h;return g=a.$watch(function(a){return d(a)},function(a,c,d){h=a,A(b)&&b.call(this,a,c,d),e(a)&&d.$$postDigest(function(){e(h)&&g()})},c)}function j(a,b,c,d){var e;return e=a.$watch(function(a){return d(a)},function(a,c,d){A(b)&&b.apply(this,arguments),e()},c)}function k(a,b){if(!b)return a;var c=a.$$watchDelegate,d=!1,e=c!==i&&c!==h,f=e?function(c,e,f,g){var h=d&&g?g[0]:a(c,e,f,g);return b(h,c,e)}:function(c,d,e,f){var g=a(c,d,e,f),h=b(g,c,d);return u(g)?h:g};return a.$$watchDelegate&&a.$$watchDelegate!==g?f.$$watchDelegate=a.$$watchDelegate:b.$stateful||(f.$$watchDelegate=g,d=!a.inputs,f.inputs=a.inputs?a.inputs:[a]),f}var l=Sd().noUnsafeEval,m={csp:l,expensiveChecks:!1},n={csp:l,expensiveChecks:!0};return function(c,e,f){var l,o,q;switch(typeof c){case"string":c=c.trim(),q=c;var r=f?b:a;if(l=r[q],!l){":"===c.charAt(0)&&":"===c.charAt(1)&&(o=!0,c=c.substring(2));var s=f?n:m,t=new cf(s),u=new ef(t,d,s);l=u.parse(c),l.constant?l.$$watchDelegate=j:o?l.$$watchDelegate=l.literal?i:h:l.inputs&&(l.$$watchDelegate=g),r[q]=l}return k(l,e);case"function":return k(c,e);default:return p}}}]}function nc(){this.$get=["$rootScope","$exceptionHandler",function(a,b){return pc(function(b){a.$evalAsync(b)},b)}]}function oc(){this.$get=["$browser","$exceptionHandler",function(a,b){return pc(function(b){a.defer(b)},b)}]}function pc(a,b){function e(a,b,c){function d(b){return function(c){e||(e=!0,b.call(a,c))}}var e=!1;return[d(b),d(c)]}function g(){this.$$state={status:0}}function h(a,b){return function(c){b.call(a,c)}}function i(a){var d,e,f;f=a.pending,a.processScheduled=!1,a.pending=c;for(var g=0,h=f.length;h>g;++g){e=f[g][0],d=f[g][a.status];try{A(d)?e.resolve(d(a.value)):1===a.status?e.resolve(a.value):e.reject(a.value)}catch(i){e.reject(i),b(i)}}}function j(b){!b.processScheduled&&b.pending&&(b.processScheduled=!0,a(function(){i(b)}))}function k(){this.promise=new g,this.resolve=h(this,this.resolve),this.reject=h(this,this.reject),this.notify=h(this,this.notify)}function m(a){var b=new k,c=0,d=Od(a)?[]:{};return f(a,function(a,e){c++,s(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})}),0===c&&b.resolve(d),b.promise}var n=d("$q",TypeError),o=function(){return new k};l(g.prototype,{then:function(a,b,c){if(t(a)&&t(b)&&t(c))return this;var d=new k;return this.$$state.pending=this.$$state.pending||[],this.$$state.pending.push([d,a,b,c]),this.$$state.status>0&&j(this.$$state),d.promise},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return r(b,!0,a)},function(b){return r(b,!1,a)},b)}}),l(k.prototype,{resolve:function(a){this.promise.$$state.status||(a===this.promise?this.$$reject(n("qcycle","Expected promise to be resolved with value other than itself '{0}'",a)):this.$$resolve(a))},$$resolve:function(a){var c,d;d=e(this,this.$$resolve,this.$$reject);try{(v(a)||A(a))&&(c=a&&a.then),A(c)?(this.promise.$$state.status=-1,c.call(a,d[0],d[1],this.notify)):(this.promise.$$state.value=a,this.promise.$$state.status=1,j(this.promise.$$state))}catch(f){d[1](f),b(f)}},reject:function(a){this.promise.$$state.status||this.$$reject(a)},$$reject:function(a){this.promise.$$state.value=a,this.promise.$$state.status=2,j(this.promise.$$state)},notify:function(c){var d=this.promise.$$state.pending;this.promise.$$state.status<=0&&d&&d.length&&a(function(){for(var a,e,f=0,g=d.length;g>f;f++){e=d[f][0],a=d[f][3];try{e.notify(A(a)?a(c):c)}catch(h){b(h)}}})}});var p=function(a){var b=new k;return b.reject(a),b.promise},q=function(a,b){var c=new k;return b?c.resolve(a):c.reject(a),c.promise},r=function(a,b,c){var d=null;try{A(c)&&(d=c())}catch(e){return q(e,!1)}return I(d)?d.then(function(){return q(a,b)},function(a){return q(a,!1)}):q(a,b)},s=function(a,b,c,d){var e=new k;return e.resolve(a),e.promise.then(b,c,d)},u=s,w=function x(a){function b(a){d.resolve(a)}function c(a){d.reject(a)}if(!A(a))throw n("norslvr","Expected resolverFn, got '{0}'",a);if(!(this instanceof x))return new x(a);var d=new k;return a(b,c),d.promise};return w.defer=o,w.reject=p,w.when=s,w.resolve=u,w.all=m,w}function qc(){this.$get=["$window","$timeout",function(a,b){var c=a.requestAnimationFrame||a.webkitRequestAnimationFrame,d=a.cancelAnimationFrame||a.webkitCancelAnimationFrame||a.webkitCancelRequestAnimationFrame,e=!!c,f=e?function(a){var b=c(a);return function(){d(b)}}:function(a){var c=b(a,16.66,!1);return function(){b.cancel(c)}};return f.supported=e,f}]}function rc(){function a(a){function b(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null,this.$$listeners={},this.$$listenerCount={},this.$$watchersCount=0,this.$id=i(),this.$$ChildScope=null}return b.prototype=a,b}var b=10,c=d("$rootScope"),g=null,h=null;this.digestTtl=function(a){return arguments.length&&(b=a),b},this.$get=["$injector","$exceptionHandler","$parse","$browser",function(d,j,k,l){function m(a){a.currentScope.$$destroyed=!0}function n(a){9===Bd&&(a.$$childHead&&n(a.$$childHead),a.$$nextSibling&&n(a.$$nextSibling)),a.$parent=a.$$nextSibling=a.$$prevSibling=a.$$childHead=a.$$childTail=a.$root=a.$$watchers=null}function o(){this.$id=i(),this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null,this.$root=this,this.$$destroyed=!1,this.$$listeners={},this.$$listenerCount={},this.$$watchersCount=0,this.$$isolateBindings=null}function q(a){if(z.$$phase)throw c("inprog","{0} already in progress",z.$$phase);z.$$phase=a}function r(){z.$$phase=null}function s(a,b){do a.$$watchersCount+=b;while(a=a.$parent)}function u(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function w(){}function x(){for(;D.length;)try{D.shift()()}catch(a){j(a)}h=null}function y(){null===h&&(h=l.defer(function(){z.$apply(x)}))}o.prototype={constructor:o,$new:function(b,c){var d;return c=c||this,b?(d=new o,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=a(this)),d=new this.$$ChildScope),d.$parent=c,d.$$prevSibling=c.$$childTail,c.$$childHead?(c.$$childTail.$$nextSibling=d,c.$$childTail=d):c.$$childHead=c.$$childTail=d,(b||c!=this)&&d.$on("$destroy",m),d},$watch:function(a,b,c,d){var e=k(a);if(e.$$watchDelegate)return e.$$watchDelegate(this,b,c,e,a);var f=this,h=f.$$watchers,i={fn:b,last:w,get:e,exp:d||a,eq:!!c};return g=null,A(b)||(i.fn=p),h||(h=f.$$watchers=[]),h.unshift(i),s(this,1),function(){N(h,i)>=0&&s(f,-1),g=null}},$watchGroup:function(a,b){function c(){i=!1,j?(j=!1,b(e,e,h)):b(e,d,h)}var d=new Array(a.length),e=new Array(a.length),g=[],h=this,i=!1,j=!0;if(!a.length){var k=!0;return h.$evalAsync(function(){k&&b(e,e,h)}),function(){k=!1}}return 1===a.length?this.$watch(a[0],function(a,c,f){e[0]=a,d[0]=c,b(e,a===c?e:d,f)}):(f(a,function(a,b){var f=h.$watch(a,function(a,f){e[b]=a,d[b]=f,i||(i=!0,h.$evalAsync(c))});g.push(f)}),function(){for(;g.length;)g.shift()()})},$watchCollection:function(a,b){function c(a){f=a;var b,c,d,h,i;if(!t(f)){if(v(f))if(e(f)){g!==n&&(g=n,q=g.length=0,l++),b=f.length,q!==b&&(l++,g.length=q=b);for(var j=0;b>j;j++)i=g[j],h=f[j],d=i!==i&&h!==h,d||i===h||(l++,g[j]=h)}else{g!==o&&(g=o={},q=0,l++),b=0;for(c in f)xd.call(f,c)&&(b++,h=f[c],i=g[c],c in g?(d=i!==i&&h!==h,d||i===h||(l++,g[c]=h)):(q++,g[c]=h,l++));if(q>b){l++;for(c in g)xd.call(f,c)||(q--,delete g[c])}}else g!==f&&(g=f,l++);return l}}function d(){if(p?(p=!1,b(f,f,i)):b(f,h,i),j)if(v(f))if(e(f)){h=new Array(f.length);for(var a=0;a<f.length;a++)h[a]=f[a]}else{h={};for(var c in f)xd.call(f,c)&&(h[c]=f[c])}else h=f}c.$stateful=!0;var f,g,h,i=this,j=b.length>1,l=0,m=k(a,c),n=[],o={},p=!0,q=0;return this.$watch(m,d)},$digest:function(){var a,d,e,f,i,k,m,n,o,p,s=b,t=this,u=[];q("$digest"),l.$$checkUrlChange(),this===z&&null!==h&&(l.defer.cancel(h),x()),g=null;do{for(k=!1,n=t;B.length;){try{p=B.shift(),p.scope.$eval(p.expression,p.locals)}catch(v){j(v)}g=null}a:do{if(f=n.$$watchers)for(i=f.length;i--;)try{if(a=f[i])if((d=a.get(n))===(e=a.last)||(a.eq?Q(d,e):"number"==typeof d&&"number"==typeof e&&isNaN(d)&&isNaN(e))){if(a===g){k=!1;break a}}else k=!0,g=a,a.last=a.eq?O(d,null):d,a.fn(d,e===w?d:e,n),5>s&&(o=4-s,u[o]||(u[o]=[]),u[o].push({msg:A(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):a.exp,newVal:d,oldVal:e}))}catch(v){j(v)}if(!(m=n.$$watchersCount&&n.$$childHead||n!==t&&n.$$nextSibling))for(;n!==t&&!(m=n.$$nextSibling);)n=n.$parent}while(n=m);if((k||B.length)&&!s--)throw r(),c("infdig","{0} $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: {1}",b,u)}while(k||B.length);for(r();C.length;)try{C.shift()()}catch(v){j(v)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy"),this.$$destroyed=!0,this===z&&l.$$applicationDestroyed(),s(this,-this.$$watchersCount);for(var b in this.$$listenerCount)u(this,this.$$listenerCount[b],b);a&&a.$$childHead==this&&(a.$$childHead=this.$$nextSibling),a&&a.$$childTail==this&&(a.$$childTail=this.$$prevSibling),this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling),this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling),this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=p,this.$on=this.$watch=this.$watchGroup=function(){return p},this.$$listeners={},this.$$nextSibling=null,n(this)}},$eval:function(a,b){return k(a)(this,b)},$evalAsync:function(a,b){z.$$phase||B.length||l.defer(function(){B.length&&z.$digest()}),B.push({scope:this,expression:a,locals:b})},$$postDigest:function(a){C.push(a)},$apply:function(a){try{q("$apply");try{return this.$eval(a)}finally{r()}}catch(b){j(b)}finally{try{z.$digest()}catch(b){throw j(b),b}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&D.push(b),y()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]),c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,u(e,1,a))}},$emit:function(a,b){var c,d,e,f=[],g=this,h=!1,i={name:a,targetScope:g,stopPropagation:function(){h=!0},preventDefault:function(){i.defaultPrevented=!0},defaultPrevented:!1},k=R([i],arguments,1);do{for(c=g.$$listeners[a]||f,i.currentScope=g,d=0,e=c.length;e>d;d++)if(c[d])try{c[d].apply(null,k)}catch(l){j(l)}else c.splice(d,1),d--,e--;if(h)return i.currentScope=null,i;g=g.$parent}while(g);return i.currentScope=null,i},$broadcast:function(a,b){var c=this,d=c,e=c,f={name:a,targetScope:c,preventDefault:function(){f.defaultPrevented=!0},defaultPrevented:!1};if(!c.$$listenerCount[a])return f;for(var g,h,i,k=R([f],arguments,1);d=e;){for(f.currentScope=d,g=d.$$listeners[a]||[],h=0,i=g.length;i>h;h++)if(g[h])try{g[h].apply(null,k)}catch(l){j(l)}else g.splice(h,1),h--,i--;if(!(e=d.$$listenerCount[a]&&d.$$childHead||d!==c&&d.$$nextSibling))for(;d!==c&&!(e=d.$$nextSibling);)d=d.$parent}return f.currentScope=null,f}};var z=new o,B=z.$$asyncQueue=[],C=z.$$postDigestQueue=[],D=z.$$applyAsyncQueue=[];return z}]}function sc(){var a=/^\s*(https?|ftp|mailto|tel|file):/,b=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(b){return u(b)?(a=b,this):a},this.imgSrcSanitizationWhitelist=function(a){return u(a)?(b=a,this):b},this.$get=function(){return function(c,d){var e,f=d?b:a;return e=Bc(c).href,""===e||e.match(f)?c:"unsafe:"+e}}}function tc(a){if("self"===a)return a;if(x(a)){if(a.indexOf("***")>-1)throw gf("iwcard","Illegal sequence *** in string matcher.  String: {0}",a);return a=Rd(a).replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*"),new RegExp("^"+a+"$")}if(B(a))return new RegExp("^"+a.source+"$");throw gf("imatcher",'Matchers may only be "self", string patterns or RegExp objects')}function uc(a){var b=[];return u(a)&&f(a,function(a){b.push(tc(a))}),b}function vc(){this.SCE_CONTEXTS=hf;var a=["self"],b=[];this.resourceUrlWhitelist=function(b){return arguments.length&&(a=uc(b)),a},this.resourceUrlBlacklist=function(a){return arguments.length&&(b=uc(a)),b},this.$get=["$injector",function(c){function d(a,b){return"self"===a?Cc(b):!!a.exec(b.href)}function e(c){var e,f,g=Bc(c.toString()),h=!1;for(e=0,f=a.length;f>e;e++)if(d(a[e],g)){h=!0;break}if(h)for(e=0,f=b.length;f>e;e++)if(d(b[e],g)){h=!1;break}return h}function f(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};return a&&(b.prototype=new a),b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()},b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()},b}function g(a,b){var c=l.hasOwnProperty(a)?l[a]:null;if(!c)throw gf("icontext","Attempted to trust a value in invalid context. Context: {0}; Value: {1}",a,b);if(null===b||t(b)||""===b)return b;if("string"!=typeof b)throw gf("itype","Attempted to trust a non-string value in a content requiring a string: Context: {0}",a);return new c(b)}function h(a){return a instanceof k?a.$$unwrapTrustedValue():a}function i(a,b){if(null===b||t(b)||""===b)return b;var c=l.hasOwnProperty(a)?l[a]:null;if(c&&b instanceof c)return b.$$unwrapTrustedValue();if(a===hf.RESOURCE_URL){if(e(b))return b;throw gf("insecurl","Blocked loading resource from url not allowed by $sceDelegate policy.  URL: {0}",b.toString());
+}if(a===hf.HTML)return j(b);throw gf("unsafe","Attempting to use an unsafe value in a safe context.")}var j=function(a){throw gf("unsafe","Attempting to use an unsafe value in a safe context.")};c.has("$sanitize")&&(j=c.get("$sanitize"));var k=f(),l={};return l[hf.HTML]=f(k),l[hf.CSS]=f(k),l[hf.URL]=f(k),l[hf.JS]=f(k),l[hf.RESOURCE_URL]=f(l[hf.URL]),{trustAs:g,getTrusted:i,valueOf:h}}]}function wc(){var a=!0;this.enabled=function(b){return arguments.length&&(a=!!b),a},this.$get=["$parse","$sceDelegate",function(b,c){if(a&&8>Bd)throw gf("iequirks","Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks mode.  You can fix this by adding the text <!doctype html> to the top of your HTML document.  See http://docs.angularjs.org/api/ng.$sce for more information.");var d=P(hf);d.isEnabled=function(){return a},d.trustAs=c.trustAs,d.getTrusted=c.getTrusted,d.valueOf=c.valueOf,a||(d.trustAs=d.getTrusted=function(a,b){return b},d.valueOf=q),d.parseAs=function(a,c){var e=b(c);return e.literal&&e.constant?e:b(c,function(b){return d.getTrusted(a,b)})};var e=d.parseAs,g=d.getTrusted,h=d.trustAs;return f(hf,function(a,b){var c=wd(b);d[wa("parse_as_"+c)]=function(b){return e(a,b)},d[wa("get_trusted_"+c)]=function(b){return g(a,b)},d[wa("trust_as_"+c)]=function(b){return h(a,b)}}),d}]}function xc(){this.$get=["$window","$document",function(a,b){var c,d,e={},f=n((/android (\d+)/.exec(wd((a.navigator||{}).userAgent))||[])[1]),g=/Boxee/i.test((a.navigator||{}).userAgent),h=b[0]||{},i=/^(Moz|webkit|ms)(?=[A-Z])/,j=h.body&&h.body.style,k=!1,l=!1;if(j){for(var m in j)if(d=i.exec(m)){c=d[0],c=c.substr(0,1).toUpperCase()+c.substr(1);break}c||(c="WebkitOpacity"in j&&"webkit"),k=!!("transition"in j||c+"Transition"in j),l=!!("animation"in j||c+"Animation"in j),!f||k&&l||(k=x(j.webkitTransition),l=x(j.webkitAnimation))}return{history:!(!a.history||!a.history.pushState||4>f||g),hasEvent:function(a){if("input"===a&&11>=Bd)return!1;if(t(e[a])){var b=h.createElement("div");e[a]="on"+a in b}return e[a]},csp:Sd(),vendorPrefix:c,transitions:k,animations:l,android:f}}]}function yc(){this.$get=["$templateCache","$http","$q","$sce",function(a,b,c,d){function e(f,g){function h(a){if(!g)throw He("tpload","Failed to load template: {0} (HTTP status: {1} {2})",f,a.status,a.statusText);return c.reject(a)}e.totalPendingRequests++,x(f)&&a.get(f)||(f=d.getTrustedResourceUrl(f));var i=b.defaults&&b.defaults.transformResponse;Od(i)?i=i.filter(function(a){return a!==vb}):i===vb&&(i=null);var j={cache:a,transformResponse:i};return b.get(f,j)["finally"](function(){e.totalPendingRequests--}).then(function(b){return a.put(f,b.data),b.data},h)}return e.totalPendingRequests=0,e}]}function zc(){this.$get=["$rootScope","$browser","$location",function(a,b,c){var d={};return d.findBindings=function(a,b,c){var d=a.getElementsByClassName("ng-binding"),e=[];return f(d,function(a){var d=Ld.element(a).data("$binding");d&&f(d,function(d){if(c){var f=new RegExp("(^|\\s)"+Rd(b)+"(\\s|\\||$)");f.test(d)&&e.push(a)}else-1!=d.indexOf(b)&&e.push(a)})}),e},d.findModels=function(a,b,c){for(var d=["ng-","data-ng-","ng\\:"],e=0;e<d.length;++e){var f=c?"=":"*=",g="["+d[e]+"model"+f+'"'+b+'"]',h=a.querySelectorAll(g);if(h.length)return h}},d.getLocation=function(){return c.url()},d.setLocation=function(b){b!==c.url()&&(c.url(b),a.$digest())},d.whenStable=function(a){b.notifyWhenNoOutstandingRequests(a)},d}]}function Ac(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",function(a,b,c,d,e){function f(f,h,i){A(f)||(i=h,h=f,f=p);var j,k=S(arguments,3),l=u(i)&&!i,m=(l?d:c).defer(),n=m.promise;return j=b.defer(function(){try{m.resolve(f.apply(null,k))}catch(b){m.reject(b),e(b)}finally{delete g[n.$$timeoutId]}l||a.$apply()},h),n.$$timeoutId=j,g[j]=m,n}var g={};return f.cancel=function(a){return a&&a.$$timeoutId in g?(g[a.$$timeoutId].reject("canceled"),delete g[a.$$timeoutId],b.defer.cancel(a.$$timeoutId)):!1},f}]}function Bc(a){var b=a;return Bd&&(jf.setAttribute("href",b),b=jf.href),jf.setAttribute("href",b),{href:jf.href,protocol:jf.protocol?jf.protocol.replace(/:$/,""):"",host:jf.host,search:jf.search?jf.search.replace(/^\?/,""):"",hash:jf.hash?jf.hash.replace(/^#/,""):"",hostname:jf.hostname,port:jf.port,pathname:"/"===jf.pathname.charAt(0)?jf.pathname:"/"+jf.pathname}}function Cc(a){var b=x(a)?Bc(a):a;return b.protocol===kf.protocol&&b.host===kf.host}function Dc(){this.$get=r(a)}function Ec(a){function b(a){try{return decodeURIComponent(a)}catch(b){return a}}var c=a[0]||{},d={},e="";return function(){var a,f,g,h,i,j=c.cookie||"";if(j!==e)for(e=j,a=e.split("; "),d={},g=0;g<a.length;g++)f=a[g],h=f.indexOf("="),h>0&&(i=b(f.substring(0,h)),t(d[i])&&(d[i]=b(f.substring(h+1))));return d}}function Fc(){this.$get=Ec}function Gc(a){function b(d,e){if(v(d)){var g={};return f(d,function(a,c){g[c]=b(c,a)}),g}return a.factory(d+c,e)}var c="Filter";this.register=b,this.$get=["$injector",function(a){return function(b){return a.get(b+c)}}],b("currency",Lc),b("date",Yc),b("filter",Hc),b("json",Zc),b("limitTo",$c),b("lowercase",pf),b("number",Mc),b("orderBy",_c),b("uppercase",qf)}function Hc(){return function(a,b,c){if(!e(a)){if(null==a)return a;throw d("filter")("notarray","Expected array but received: {0}",a)}var f,g,h=Kc(b);switch(h){case"function":f=b;break;case"boolean":case"null":case"number":case"string":g=!0;case"object":f=Ic(b,c,g);break;default:return a}return Array.prototype.filter.call(a,f)}}function Ic(a,b,c){var d,e=v(a)&&"$"in a;return b===!0?b=Q:A(b)||(b=function(a,b){return t(a)?!1:null===a||null===b?a===b:v(b)||v(a)&&!s(a)?!1:(a=wd(""+a),b=wd(""+b),-1!==a.indexOf(b))}),d=function(d){return e&&!v(d)?Jc(d,a.$,b,!1):Jc(d,a,b,c)}}function Jc(a,b,c,d,e){var f=Kc(a),g=Kc(b);if("string"===g&&"!"===b.charAt(0))return!Jc(a,b.substring(1),c,d);if(Od(a))return a.some(function(a){return Jc(a,b,c,d)});switch(f){case"object":var h;if(d){for(h in a)if("$"!==h.charAt(0)&&Jc(a[h],b,c,!0))return!0;return e?!1:Jc(a,b,c,!1)}if("object"===g){for(h in b){var i=b[h];if(!A(i)&&!t(i)){var j="$"===h,k=j?a:a[h];if(!Jc(k,i,c,j,j))return!1}}return!0}return c(a,b);case"function":return!1;default:return c(a,b)}}function Kc(a){return null===a?"null":typeof a}function Lc(a){var b=a.NUMBER_FORMATS;return function(a,c,d){return t(c)&&(c=b.CURRENCY_SYM),t(d)&&(d=b.PATTERNS[1].maxFrac),null==a?a:Nc(a,b.PATTERNS[1],b.GROUP_SEP,b.DECIMAL_SEP,d).replace(/\u00A4/g,c)}}function Mc(a){var b=a.NUMBER_FORMATS;return function(a,c){return null==a?a:Nc(a,b.PATTERNS[0],b.GROUP_SEP,b.DECIMAL_SEP,c)}}function Nc(a,b,c,d,e){if(v(a))return"";var f=0>a;a=Math.abs(a);var g=a===1/0;if(!g&&!isFinite(a))return"";var h=a+"",i="",j=!1,k=[];if(g&&(i="∞"),!g&&-1!==h.indexOf("e")){var l=h.match(/([\d\.]+)e(-?)(\d+)/);l&&"-"==l[2]&&l[3]>e+1?a=0:(i=h,j=!0)}if(g||j)e>0&&1>a&&(i=a.toFixed(e),a=parseFloat(i),i=i.replace(lf,d));else{var m=(h.split(lf)[1]||"").length;t(e)&&(e=Math.min(Math.max(b.minFrac,m),b.maxFrac)),a=+(Math.round(+(a.toString()+"e"+e)).toString()+"e"+-e);var n=(""+a).split(lf),o=n[0];n=n[1]||"";var p,q=0,r=b.lgSize,s=b.gSize;if(o.length>=r+s)for(q=o.length-r,p=0;q>p;p++)(q-p)%s===0&&0!==p&&(i+=c),i+=o.charAt(p);for(p=q;p<o.length;p++)(o.length-p)%r===0&&0!==p&&(i+=c),i+=o.charAt(p);for(;n.length<e;)n+="0";e&&"0"!==e&&(i+=d+n.substr(0,e))}return 0===a&&(f=!1),k.push(f?b.negPre:b.posPre,i,f?b.negSuf:b.posSuf),k.join("")}function Oc(a,b,c){var d="";for(0>a&&(d="-",a=-a),a=""+a;a.length<b;)a="0"+a;return c&&(a=a.substr(a.length-b)),d+a}function Pc(a,b,c,d){return c=c||0,function(e){var f=e["get"+a]();return(c>0||f>-c)&&(f+=c),0===f&&-12==c&&(f=12),Oc(f,b,d)}}function Qc(a,b){return function(c,d){var e=c["get"+a](),f=yd(b?"SHORT"+a:a);return d[f][e]}}function Rc(a,b,c){var d=-1*c,e=d>=0?"+":"";return e+=Oc(Math[d>0?"floor":"ceil"](d/60),2)+Oc(Math.abs(d%60),2)}function Sc(a){var b=new Date(a,0,1).getDay();return new Date(a,0,(4>=b?5:12)-b)}function Tc(a){return new Date(a.getFullYear(),a.getMonth(),a.getDate()+(4-a.getDay()))}function Uc(a){return function(b){var c=Sc(b.getFullYear()),d=Tc(b),e=+d-+c,f=1+Math.round(e/6048e5);return Oc(f,a)}}function Vc(a,b){return a.getHours()<12?b.AMPMS[0]:b.AMPMS[1]}function Wc(a,b){return a.getFullYear()<=0?b.ERAS[0]:b.ERAS[1]}function Xc(a,b){return a.getFullYear()<=0?b.ERANAMES[0]:b.ERANAMES[1]}function Yc(a){function b(a){var b;if(b=a.match(c)){var d=new Date(0),e=0,f=0,g=b[8]?d.setUTCFullYear:d.setFullYear,h=b[8]?d.setUTCHours:d.setHours;b[9]&&(e=n(b[9]+b[10]),f=n(b[9]+b[11])),g.call(d,n(b[1]),n(b[2])-1,n(b[3]));var i=n(b[4]||0)-e,j=n(b[5]||0)-f,k=n(b[6]||0),l=Math.round(1e3*parseFloat("0."+(b[7]||0)));return h.call(d,i,j,k,l),d}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,d,e){var g,h,i="",j=[];if(d=d||"mediumDate",d=a.DATETIME_FORMATS[d]||d,x(c)&&(c=of.test(c)?n(c):b(c)),y(c)&&(c=new Date(c)),!z(c)||!isFinite(c.getTime()))return c;for(;d;)h=nf.exec(d),h?(j=R(j,h,1),d=j.pop()):(j.push(d),d=null);var k=c.getTimezoneOffset();return e&&(k=X(e,c.getTimezoneOffset()),c=Z(c,e,!0)),f(j,function(b){g=mf[b],i+=g?g(c,a.DATETIME_FORMATS,k):b.replace(/(^'|'$)/g,"").replace(/''/g,"'")}),i}}function Zc(){return function(a,b){return t(b)&&(b=2),V(a,b)}}function $c(){return function(a,b,c){return b=Math.abs(Number(b))===1/0?Number(b):n(b),isNaN(b)?a:(y(a)&&(a=a.toString()),Od(a)||x(a)?(c=!c||isNaN(c)?0:n(c),c=0>c?Math.max(0,a.length+c):c,b>=0?a.slice(c,c+b):0===c?a.slice(b,a.length):a.slice(Math.max(0,c+b),c)):a)}}function _c(a){function b(b,c){return c=c?-1:1,b.map(function(b){var d=1,e=q;if(A(b))e=b;else if(x(b)&&(("+"==b.charAt(0)||"-"==b.charAt(0))&&(d="-"==b.charAt(0)?-1:1,b=b.substring(1)),""!==b&&(e=a(b),e.constant))){var f=e();e=function(a){return a[f]}}return{get:e,descending:d*c}})}function c(a){switch(typeof a){case"number":case"boolean":case"string":return!0;default:return!1}}function d(a,b){return"function"==typeof a.valueOf&&(a=a.valueOf(),c(a))?a:s(a)&&(a=a.toString(),c(a))?a:b}function f(a,b){var c=typeof a;return null===a?(c="string",a="null"):"string"===c?a=a.toLowerCase():"object"===c&&(a=d(a,b)),{value:a,type:c}}function g(a,b){var c=0;return a.type===b.type?a.value!==b.value&&(c=a.value<b.value?-1:1):c=a.type<b.type?-1:1,c}return function(a,c,d){function h(a,b){return{value:a,predicateValues:j.map(function(c){return f(c.get(a),b)})}}function i(a,b){for(var c=0,d=0,e=j.length;e>d&&!(c=g(a.predicateValues[d],b.predicateValues[d])*j[d].descending);++d);return c}if(!e(a))return a;Od(c)||(c=[c]),0===c.length&&(c=["+"]);var j=b(c,d);j.push({get:function(){return{}},descending:d?-1:1});var k=Array.prototype.map.call(a,h);return k.sort(i),a=k.map(function(a){return a.value})}}function ad(a){return A(a)&&(a={link:a}),a.restrict=a.restrict||"AC",r(a)}function bd(a,b){a.$name=b}function cd(a,b,d,e,g){var h=this,i=[];h.$error={},h.$$success={},h.$pending=c,h.$name=g(b.name||b.ngForm||"")(d),h.$dirty=!1,h.$pristine=!0,h.$valid=!0,h.$invalid=!1,h.$submitted=!1,h.$$parentForm=tf,h.$rollbackViewValue=function(){f(i,function(a){a.$rollbackViewValue()})},h.$commitViewValue=function(){f(i,function(a){a.$commitViewValue()})},h.$addControl=function(a){na(a.$name,"input"),i.push(a),a.$name&&(h[a.$name]=a),a.$$parentForm=h},h.$$renameControl=function(a,b){var c=a.$name;h[c]===a&&delete h[c],h[b]=a,a.$name=b},h.$removeControl=function(a){a.$name&&h[a.$name]===a&&delete h[a.$name],f(h.$pending,function(b,c){h.$setValidity(c,null,a)}),f(h.$error,function(b,c){h.$setValidity(c,null,a)}),f(h.$$success,function(b,c){h.$setValidity(c,null,a)}),N(i,a),a.$$parentForm=tf},rd({ctrl:this,$element:a,set:function(a,b,c){var d=a[b];if(d){var e=d.indexOf(c);-1===e&&d.push(c)}else a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(N(d,c),0===d.length&&delete a[b])},$animate:e}),h.$setDirty=function(){e.removeClass(a,bg),e.addClass(a,cg),h.$dirty=!0,h.$pristine=!1,h.$$parentForm.$setDirty()},h.$setPristine=function(){e.setClass(a,bg,cg+" "+uf),h.$dirty=!1,h.$pristine=!0,h.$submitted=!1,f(i,function(a){a.$setPristine()})},h.$setUntouched=function(){f(i,function(a){a.$setUntouched()})},h.$setSubmitted=function(){e.addClass(a,uf),h.$submitted=!0,h.$$parentForm.$setSubmitted()}}function dd(a){a.$formatters.push(function(b){return a.$isEmpty(b)?b:b.toString()})}function ed(a,b,c,d,e,f){fd(a,b,c,d,e,f),dd(d)}function fd(a,b,c,d,e,f){var g=wd(b[0].type);if(!e.android){var h=!1;b.on("compositionstart",function(a){h=!0}),b.on("compositionend",function(){h=!1,i()})}var i=function(a){if(j&&(f.defer.cancel(j),j=null),!h){var e=b.val(),i=a&&a.type;"password"===g||c.ngTrim&&"false"===c.ngTrim||(e=Qd(e)),(d.$viewValue!==e||""===e&&d.$$hasNativeValidators)&&d.$setViewValue(e,i)}};if(e.hasEvent("input"))b.on("input",i);else{var j,k=function(a,b,c){j||(j=f.defer(function(){j=null,b&&b.value===c||i(a)}))};b.on("keydown",function(a){var b=a.keyCode;91===b||b>15&&19>b||b>=37&&40>=b||k(a,this,this.value)}),e.hasEvent("paste")&&b.on("paste cut",k)}b.on("change",i),d.$render=function(){var a=d.$isEmpty(d.$viewValue)?"":d.$viewValue;b.val()!==a&&b.val(a)}}function gd(a,b){if(z(a))return a;if(x(a)){Ef.lastIndex=0;var c=Ef.exec(a);if(c){var d=+c[1],e=+c[2],f=0,g=0,h=0,i=0,j=Sc(d),k=7*(e-1);return b&&(f=b.getHours(),g=b.getMinutes(),h=b.getSeconds(),i=b.getMilliseconds()),new Date(d,0,j.getDate()+k,f,g,h,i)}}return NaN}function hd(a,b){return function(c,d){var e,g;if(z(c))return c;if(x(c)){if('"'==c.charAt(0)&&'"'==c.charAt(c.length-1)&&(c=c.substring(1,c.length-1)),yf.test(c))return new Date(c);if(a.lastIndex=0,e=a.exec(c))return e.shift(),g=d?{yyyy:d.getFullYear(),MM:d.getMonth()+1,dd:d.getDate(),HH:d.getHours(),mm:d.getMinutes(),ss:d.getSeconds(),sss:d.getMilliseconds()/1e3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},f(e,function(a,c){c<b.length&&(g[b[c]]=+a)}),new Date(g.yyyy,g.MM-1,g.dd,g.HH,g.mm,g.ss||0,1e3*g.sss||0)}return NaN}}function id(a,b,d,e){return function(f,g,h,i,j,k,l){function m(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function n(a){return u(a)&&!z(a)?d(a)||c:a}jd(f,g,h,i),fd(f,g,h,i,j,k);var o,p=i&&i.$options&&i.$options.timezone;if(i.$$parserName=a,i.$parsers.push(function(a){if(i.$isEmpty(a))return null;if(b.test(a)){var e=d(a,o);return p&&(e=Z(e,p)),e}return c}),i.$formatters.push(function(a){if(a&&!z(a))throw gg("datefmt","Expected `{0}` to be a date",a);return m(a)?(o=a,o&&p&&(o=Z(o,p,!0)),l("date")(a,e,p)):(o=null,"")}),u(h.min)||h.ngMin){var q;i.$validators.min=function(a){return!m(a)||t(q)||d(a)>=q},h.$observe("min",function(a){q=n(a),i.$validate()})}if(u(h.max)||h.ngMax){var r;i.$validators.max=function(a){return!m(a)||t(r)||d(a)<=r},h.$observe("max",function(a){r=n(a),i.$validate()})}}}function jd(a,b,d,e){var f=b[0],g=e.$$hasNativeValidators=v(f.validity);g&&e.$parsers.push(function(a){var d=b.prop(vd)||{};return d.badInput&&!d.typeMismatch?c:a})}function kd(a,b,d,e,f,g){if(jd(a,b,d,e),fd(a,b,d,e,f,g),e.$$parserName="number",e.$parsers.push(function(a){return e.$isEmpty(a)?null:Bf.test(a)?parseFloat(a):c}),e.$formatters.push(function(a){if(!e.$isEmpty(a)){if(!y(a))throw gg("numfmt","Expected `{0}` to be a number",a);a=a.toString()}return a}),u(d.min)||d.ngMin){var h;e.$validators.min=function(a){return e.$isEmpty(a)||t(h)||a>=h},d.$observe("min",function(a){u(a)&&!y(a)&&(a=parseFloat(a,10)),h=y(a)&&!isNaN(a)?a:c,e.$validate()})}if(u(d.max)||d.ngMax){var i;e.$validators.max=function(a){return e.$isEmpty(a)||t(i)||i>=a},d.$observe("max",function(a){u(a)&&!y(a)&&(a=parseFloat(a,10)),i=y(a)&&!isNaN(a)?a:c,e.$validate()})}}function ld(a,b,c,d,e,f){fd(a,b,c,d,e,f),dd(d),d.$$parserName="url",d.$validators.url=function(a,b){var c=a||b;return d.$isEmpty(c)||zf.test(c)}}function md(a,b,c,d,e,f){fd(a,b,c,d,e,f),dd(d),d.$$parserName="email",d.$validators.email=function(a,b){var c=a||b;return d.$isEmpty(c)||Af.test(c)}}function nd(a,b,c,d){t(c.name)&&b.attr("name",i());var e=function(a){b[0].checked&&d.$setViewValue(c.value,a&&a.type)};b.on("click",e),d.$render=function(){var a=c.value;b[0].checked=a==d.$viewValue},c.$observe("value",d.$render)}function od(a,b,c,d,e){var f;if(u(d)){if(f=a(d),!f.constant)throw gg("constexpr","Expected constant expression for `{0}`, but saw `{1}`.",c,d);return f(b)}return e}function pd(a,b,c,d,e,f,g,h){var i=od(h,a,"ngTrueValue",c.ngTrueValue,!0),j=od(h,a,"ngFalseValue",c.ngFalseValue,!1),k=function(a){d.$setViewValue(b[0].checked,a&&a.type)};b.on("click",k),d.$render=function(){b[0].checked=d.$viewValue},d.$isEmpty=function(a){return a===!1},d.$formatters.push(function(a){return Q(a,i)}),d.$parsers.push(function(a){return a?i:j})}function qd(a,b){return a="ngClass"+a,["$animate",function(c){function d(a,b){var c=[];a:for(var d=0;d<a.length;d++){for(var e=a[d],f=0;f<b.length;f++)if(e==b[f])continue a;c.push(e)}return c}function e(a){var b=[];return Od(a)?(f(a,function(a){b=b.concat(e(a))}),b):x(a)?a.split(" "):v(a)?(f(a,function(a,c){a&&(b=b.concat(c.split(" ")))}),b):a}return{restrict:"AC",link:function(g,h,i){function j(a){var b=l(a,1);i.$addClass(b)}function k(a){var b=l(a,-1);i.$removeClass(b)}function l(a,b){var c=h.data("$classCounts")||qa(),d=[];return f(a,function(a){(b>0||c[a])&&(c[a]=(c[a]||0)+b,c[a]===+(b>0)&&d.push(a))}),h.data("$classCounts",c),d.join(" ")}function m(a,b){var e=d(b,a),f=d(a,b);e=l(e,1),f=l(f,-1),e&&e.length&&c.addClass(h,e),f&&f.length&&c.removeClass(h,f)}function n(a){if(b===!0||g.$index%2===b){var c=e(a||[]);if(o){if(!Q(a,o)){var d=e(o);m(d,c)}}else j(c)}o=P(a)}var o;g.$watch(i[a],n,!0),i.$observe("class",function(b){n(g.$eval(i[a]))}),"ngClass"!==a&&g.$watch("$index",function(c,d){var f=1&c;if(f!==(1&d)){var h=e(g.$eval(i[a]));f===b?j(h):k(h)}})}}}]}function rd(a){function b(a,b,i){t(b)?d("$pending",a,i):e("$pending",a,i),H(b)?b?(l(h.$error,a,i),k(h.$$success,a,i)):(k(h.$error,a,i),l(h.$$success,a,i)):(l(h.$error,a,i),l(h.$$success,a,i)),h.$pending?(f(fg,!0),h.$valid=h.$invalid=c,g("",null)):(f(fg,!1),h.$valid=sd(h.$error),h.$invalid=!h.$valid,g("",h.$valid));var j;j=h.$pending&&h.$pending[a]?c:h.$error[a]?!1:h.$$success[a]?!0:null,g(a,j),h.$$parentForm.$setValidity(a,j,h)}function d(a,b,c){h[a]||(h[a]={}),k(h[a],b,c)}function e(a,b,d){h[a]&&l(h[a],b,d),sd(h[a])&&(h[a]=c)}function f(a,b){b&&!j[a]?(m.addClass(i,a),j[a]=!0):!b&&j[a]&&(m.removeClass(i,a),j[a]=!1)}function g(a,b){a=a?"-"+ja(a,"-"):"",f(_f+a,b===!0),f(ag+a,b===!1)}var h=a.ctrl,i=a.$element,j={},k=a.set,l=a.unset,m=a.$animate;j[ag]=!(j[_f]=i.hasClass(_f)),h.$setValidity=b}function sd(a){if(a)for(var b in a)if(a.hasOwnProperty(b))return!1;return!0}function td(a){a[0].hasAttribute("selected")&&(a[0].selected=!0)}var ud=/^\/(.+)\/([a-z]*)$/,vd="validity",wd=function(a){return x(a)?a.toLowerCase():a},xd=Object.prototype.hasOwnProperty,yd=function(a){return x(a)?a.toUpperCase():a},zd=function(a){return x(a)?a.replace(/[A-Z]/g,function(a){return String.fromCharCode(32|a.charCodeAt(0))}):a},Ad=function(a){return x(a)?a.replace(/[a-z]/g,function(a){return String.fromCharCode(-33&a.charCodeAt(0))}):a};"i"!=="I".toLowerCase()&&(wd=zd,yd=Ad);var Bd,Cd,Dd,Ed,Fd=[].slice,Gd=[].splice,Hd=[].push,Id=Object.prototype.toString,Jd=Object.getPrototypeOf,Kd=d("ng"),Ld=a.angular||(a.angular={}),Md=0;Bd=b.documentMode,p.$inject=[],q.$inject=[];var Nd,Od=Array.isArray,Pd=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array\]$/,Qd=function(a){return x(a)?a.trim():a},Rd=function(a){return a.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},Sd=function(){function a(){try{return new Function(""),!1}catch(a){return!0}}if(!u(Sd.rules)){var c=b.querySelector("[ng-csp]")||b.querySelector("[data-ng-csp]");if(c){var d=c.getAttribute("ng-csp")||c.getAttribute("data-ng-csp");Sd.rules={noUnsafeEval:!d||-1!==d.indexOf("no-unsafe-eval"),noInlineStyle:!d||-1!==d.indexOf("no-inline-style")}}else Sd.rules={noUnsafeEval:a(),noInlineStyle:!1}}return Sd.rules},Td=function(){if(u(Td.name_))return Td.name_;var a,c,d,e,f=Ud.length;for(c=0;f>c;++c)if(d=Ud[c],a=b.querySelector("["+d.replace(":","\\:")+"jq]")){e=a.getAttribute(d+"jq");break}return Td.name_=e},Ud=["ng-","data-ng-","ng:","x-ng-"],Vd=/[A-Z]/g,Wd=!1,Xd=1,Yd=2,Zd=3,$d=8,_d=9,ae=11,be={full:"1.4.8",major:1,minor:4,dot:8,codeName:"ice-manipulation"};Ca.expando="ng339";var ce=Ca.cache={},de=1,ee=function(a,b,c){a.addEventListener(b,c,!1)},fe=function(a,b,c){a.removeEventListener(b,c,!1)};Ca._data=function(a){return this.cache[a[this.expando]]||{}};var ge=/([\:\-\_]+(.))/g,he=/^moz([A-Z])/,ie={mouseleave:"mouseout",mouseenter:"mouseover"},je=d("jqLite"),ke=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,le=/<|&#?\w+;/,me=/<([\w:-]+)/,ne=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,oe={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};oe.optgroup=oe.option,oe.tbody=oe.tfoot=oe.colgroup=oe.caption=oe.thead,oe.th=oe.td;var pe=Node.prototype.contains||function(a){return!!(16&this.compareDocumentPosition(a))},qe=Ca.prototype={ready:function(c){function d(){e||(e=!0,c())}var e=!1;"complete"===b.readyState?setTimeout(d):(this.on("DOMContentLoaded",d),Ca(a).on("load",d))},toString:function(){var a=[];return f(this,function(b){a.push(""+b)}),"["+a.join(", ")+"]"},eq:function(a){return Cd(a>=0?this[a]:this[this.length+a])},length:0,push:Hd,sort:[].sort,splice:[].splice},re={};f("multiple,selected,checked,disabled,readOnly,required,open".split(","),function(a){re[wd(a)]=a});var se={};f("input,select,option,textarea,button,form,details".split(","),function(a){se[a]=!0});var te={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};f({data:Ia,removeData:Ga,hasData:za},function(a,b){Ca[b]=a}),f({data:Ia,inheritedData:Oa,scope:function(a){return Cd.data(a,"$scope")||Oa(a.parentNode||a,["$isolateScope","$scope"])},isolateScope:function(a){return Cd.data(a,"$isolateScope")||Cd.data(a,"$isolateScopeNoTemplate")},controller:Na,injector:function(a){return Oa(a,"$injector")},removeAttr:function(a,b){a.removeAttribute(b)},hasClass:Ja,css:function(a,b,c){return b=wa(b),u(c)?void(a.style[b]=c):a.style[b]},attr:function(a,b,d){var e=a.nodeType;if(e!==Zd&&e!==Yd&&e!==$d){var f=wd(b);if(re[f]){if(!u(d))return a[b]||(a.attributes.getNamedItem(b)||p).specified?f:c;d?(a[b]=!0,a.setAttribute(b,f)):(a[b]=!1,a.removeAttribute(f))}else if(u(d))a.setAttribute(b,d);else if(a.getAttribute){var g=a.getAttribute(b,2);return null===g?c:g}}},prop:function(a,b,c){return u(c)?void(a[b]=c):a[b]},text:function(){function a(a,b){if(t(b)){var c=a.nodeType;return c===Xd||c===Zd?a.textContent:""}a.textContent=b}return a.$dv="",a}(),val:function(a,b){if(t(b)){if(a.multiple&&"select"===M(a)){var c=[];return f(a.options,function(a){a.selected&&c.push(a.value||a.text)}),0===c.length?null:c}return a.value}a.value=b},html:function(a,b){return t(b)?a.innerHTML:(Ea(a,!0),void(a.innerHTML=b))},empty:Pa},function(a,b){Ca.prototype[b]=function(b,c){var d,e,f=this.length;if(a!==Pa&&t(2==a.length&&a!==Ja&&a!==Na?b:c)){if(v(b)){for(d=0;f>d;d++)if(a===Ia)a(this[d],b);else for(e in b)a(this[d],e,b[e]);return this}for(var g=a.$dv,h=t(g)?Math.min(f,1):f,i=0;h>i;i++){var j=a(this[i],b,c);g=g?g+j:j}return g}for(d=0;f>d;d++)a(this[d],b,c);return this}}),f({removeData:Ga,on:function(a,b,d,e){if(u(e))throw je("onargs","jqLite#on() does not support the `selector` or `eventData` parameters");if(ya(a)){var f=Ha(a,!0),g=f.events,h=f.handle;h||(h=f.handle=Ua(a,g));for(var i=b.indexOf(" ")>=0?b.split(" "):[b],j=i.length,k=function(b,c,e){var f=g[b];f||(f=g[b]=[],f.specialHandlerWrapper=c,"$destroy"===b||e||ee(a,b,h)),f.push(d)};j--;)b=i[j],ie[b]?(k(ie[b],Wa),k(b,c,!0)):k(b)}},off:Fa,one:function(a,b,c){a=Cd(a),a.on(b,function d(){a.off(b,c),a.off(b,d)}),a.on(b,c)},replaceWith:function(a,b){var c,d=a.parentNode;Ea(a),f(new Ca(b),function(b){c?d.insertBefore(b,c.nextSibling):d.replaceChild(b,a),c=b})},children:function(a){var b=[];return f(a.childNodes,function(a){a.nodeType===Xd&&b.push(a)}),b},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,b){var c=a.nodeType;if(c===Xd||c===ae){b=new Ca(b);for(var d=0,e=b.length;e>d;d++){var f=b[d];a.appendChild(f)}}},prepend:function(a,b){if(a.nodeType===Xd){var c=a.firstChild;f(new Ca(b),function(b){a.insertBefore(b,c)})}},wrap:function(a,b){b=Cd(b).eq(0).clone()[0];var c=a.parentNode;c&&c.replaceChild(b,a),b.appendChild(a)},remove:Qa,detach:function(a){Qa(a,!0)},after:function(a,b){var c=a,d=a.parentNode;b=new Ca(b);for(var e=0,f=b.length;f>e;e++){var g=b[e];d.insertBefore(g,c.nextSibling),c=g}},addClass:La,removeClass:Ka,toggleClass:function(a,b,c){b&&f(b.split(" "),function(b){var d=c;t(d)&&(d=!Ja(a,b)),(d?La:Ka)(a,b)})},parent:function(a){var b=a.parentNode;return b&&b.nodeType!==ae?b:null},next:function(a){return a.nextElementSibling},find:function(a,b){return a.getElementsByTagName?a.getElementsByTagName(b):[]},clone:Da,triggerHandler:function(a,b,c){var d,e,g,h=b.type||b,i=Ha(a),j=i&&i.events,k=j&&j[h];k&&(d={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return this.defaultPrevented===!0},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return this.immediatePropagationStopped===!0},stopPropagation:p,type:h,target:a},b.type&&(d=l(d,b)),e=P(k),g=c?[d].concat(c):[d],f(e,function(b){d.isImmediatePropagationStopped()||b.apply(a,g)}))}},function(a,b){Ca.prototype[b]=function(b,c,d){for(var e,f=0,g=this.length;g>f;f++)t(e)?(e=a(this[f],b,c,d),u(e)&&(e=Cd(e))):Ma(e,a(this[f],b,c,d));return u(e)?e:this},Ca.prototype.bind=Ca.prototype.on,Ca.prototype.unbind=Ca.prototype.off}),Za.prototype={put:function(a,b){this[Ya(a,this.nextUid)]=b},get:function(a){return this[Ya(a,this.nextUid)]},remove:function(a){var b=this[a=Ya(a,this.nextUid)];return delete this[a],b}};var ue=[function(){this.$get=[function(){return Za}]}],ve=/^[^\(]*\(\s*([^\)]*)\)/m,we=/,/,xe=/^\s*(_?)(\S+?)\1\s*$/,ye=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,ze=d("$injector");ab.$$annotate=_a;var Ae=d("$animate"),Be=1,Ce="ng-animate",De=function(){this.$get=["$q","$$rAF",function(a,b){function c(){}return c.all=p,c.chain=p,c.prototype={end:p,cancel:p,resume:p,pause:p,complete:p,then:function(c,d){return a(function(a){b(function(){a()})}).then(c,d)}},c}]},Ee=function(){var a=new Za,b=[];this.$get=["$$AnimateRunner","$rootScope",function(c,d){function e(a,b,c){var d=!1;return b&&(b=x(b)?b.split(" "):Od(b)?b:[],f(b,function(b){b&&(d=!0,a[b]=c)})),d}function g(){f(b,function(b){var c=a.get(b);if(c){var d=eb(b.attr("class")),e="",g="";f(c,function(a,b){var c=!!d[b];a!==c&&(a?e+=(e.length?" ":"")+b:g+=(g.length?" ":"")+b)}),f(b,function(a){e&&La(a,e),g&&Ka(a,g)}),a.remove(b)}}),b.length=0}function h(c,f,h){var i=a.get(c)||{},j=e(i,f,!0),k=e(i,h,!1);(j||k)&&(a.put(c,i),b.push(c),1===b.length&&d.$$postDigest(g))}return{enabled:p,on:p,off:p,pin:p,push:function(a,b,d,e){return e&&e(),d=d||{},d.from&&a.css(d.from),d.to&&a.css(d.to),(d.addClass||d.removeClass)&&h(a,d.addClass,d.removeClass),new c}}}]},Fe=["$provide",function(a){var b=this;this.$$registeredAnimations=Object.create(null),this.register=function(c,d){if(c&&"."!==c.charAt(0))throw Ae("notcsel","Expecting class selector starting with '.' got '{0}'.",c);var e=c+"-animation";b.$$registeredAnimations[c.substr(1)]=e,a.factory(e,d)},this.classNameFilter=function(a){if(1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null,this.$$classNameFilter)){var b=new RegExp("(\\s+|\\/)"+Ce+"(\\s+|\\/)");if(b.test(this.$$classNameFilter.toString()))throw Ae("nongcls",'$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the "{0}" CSS class.',Ce)}return this.$$classNameFilter},this.$get=["$$animateQueue",function(a){function b(a,b,c){if(c){var d=db(c);!d||d.parentNode||d.previousElementSibling||(c=null)}c?c.after(a):b.prepend(a)}return{on:a.on,off:a.off,pin:a.pin,enabled:a.enabled,cancel:function(a){a.end&&a.end()},enter:function(c,d,e,f){return d=d&&Cd(d),e=e&&Cd(e),d=d||e.parent(),b(c,d,e),a.push(c,"enter",fb(f))},move:function(c,d,e,f){return d=d&&Cd(d),e=e&&Cd(e),d=d||e.parent(),b(c,d,e),a.push(c,"move",fb(f))},leave:function(b,c){return a.push(b,"leave",fb(c),function(){b.remove()})},addClass:function(b,c,d){return d=fb(d),d.addClass=cb(d.addclass,c),a.push(b,"addClass",d)},removeClass:function(b,c,d){return d=fb(d),d.removeClass=cb(d.removeClass,c),a.push(b,"removeClass",d)},setClass:function(b,c,d,e){return e=fb(e),e.addClass=cb(e.addClass,c),e.removeClass=cb(e.removeClass,d),a.push(b,"setClass",e)},animate:function(b,c,d,e,f){return f=fb(f),f.from=f.from?l(f.from,c):c,f.to=f.to?l(f.to,d):d,e=e||"ng-inline-animate",f.tempClasses=cb(f.tempClasses,e),a.push(b,"animate",f)}}}]}],Ge=function(){this.$get=["$$rAF","$q",function(a,b){var c=function(){};return c.prototype={done:function(a){this.defer&&this.defer[a===!0?"reject":"resolve"]()},end:function(){this.done()},cancel:function(){this.done(!0)},getPromise:function(){return this.defer||(this.defer=b.defer()),this.defer.promise},then:function(a,b){return this.getPromise().then(a,b)},"catch":function(a){return this.getPromise()["catch"](a)},"finally":function(a){return this.getPromise()["finally"](a)}},function(b,d){function e(){return a(function(){f(),g||h.done(),g=!0}),h}function f(){d.addClass&&(b.addClass(d.addClass),d.addClass=null),d.removeClass&&(b.removeClass(d.removeClass),d.removeClass=null),d.to&&(b.css(d.to),d.to=null)}d.cleanupStyles&&(d.from=d.to=null),d.from&&(b.css(d.from),d.from=null);var g,h=new c;return{start:e,end:e}}}]},He=d("$compile");kb.$inject=["$provide","$$sanitizeUriProvider"];var Ie=/^((?:x|data)[\:\-_])/i,Je=d("$controller"),Ke=/^(\S+)(\s+as\s+(\w+))?$/,Le=function(){this.$get=["$document",function(a){return function(b){return b?!b.nodeType&&b instanceof Cd&&(b=b[0]):b=a[0].body,b.offsetWidth+1}}]},Me="application/json",Ne={"Content-Type":Me+";charset=utf-8"},Oe=/^\[|^\{(?!\{)/,Pe={"[":/]$/,"{":/}$/},Qe=/^\)\]\}',?\n/,Re=d("$http"),Se=function(a){return function(){throw Re("legacy","The method `{0}` on the promise returned from `$http` has been disabled.",a)}},Te=Ld.$interpolateMinErr=d("$interpolate");Te.throwNoconcat=function(a){throw Te("noconcat","Error while interpolating: {0}\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required.  See http://docs.angularjs.org/api/ng.$sce",a)},Te.interr=function(a,b){return Te("interr","Can't interpolate: {0}\n{1}",a,b.toString())};var Ue=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,Ve={http:80,https:443,ftp:21},We=d("$location"),Xe={$$html5:!1,$$replace:!1,absUrl:Sb("$$absUrl"),url:function(a){if(t(a))return this.$$url;var b=Ue.exec(a);return(b[1]||""===a)&&this.path(decodeURIComponent(b[1])),(b[2]||b[1]||""===a)&&this.search(b[3]||""),this.hash(b[5]||""),this},protocol:Sb("$$protocol"),host:Sb("$$host"),port:Sb("$$port"),path:Tb("$$path",function(a){return a=null!==a?a.toString():"","/"==a.charAt(0)?a:"/"+a}),search:function(a,b){switch(arguments.length){case 0:return this.$$search;case 1:if(x(a)||y(a))a=a.toString(),this.$$search=aa(a);else{if(!v(a))throw We("isrcharg","The first argument of the `$location#search()` call must be a string or an object.");a=O(a,{}),f(a,function(b,c){null==b&&delete a[c]}),this.$$search=a}break;default:t(b)||null===b?delete this.$$search[a]:this.$$search[a]=b}return this.$$compose(),this},hash:Tb("$$hash",function(a){return null!==a?a.toString():""}),replace:function(){return this.$$replace=!0,this}};f([Rb,Qb,Pb],function(a){a.prototype=Object.create(Xe),a.prototype.state=function(b){if(!arguments.length)return this.$$state;if(a!==Pb||!this.$$html5)throw We("nostate","History API state support is available only in HTML5 mode and only in browsers supporting HTML5 History API");return this.$$state=t(b)?null:b,
+this}});var Ye=d("$parse"),Ze=Function.prototype.call,$e=Function.prototype.apply,_e=Function.prototype.bind,af=qa();f("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),function(a){af[a]=!0});var bf={n:"\n",f:"\f",r:"\r",t:"	",v:"\x0B","'":"'",'"':'"'},cf=function(a){this.options=a};cf.prototype={constructor:cf,lex:function(a){for(this.text=a,this.index=0,this.tokens=[];this.index<this.text.length;){var b=this.text.charAt(this.index);if('"'===b||"'"===b)this.readString(b);else if(this.isNumber(b)||"."===b&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdent(b))this.readIdent();else if(this.is(b,"(){}[].,;:?"))this.tokens.push({index:this.index,text:b}),this.index++;else if(this.isWhitespace(b))this.index++;else{var c=b+this.peek(),d=c+this.peek(2),e=af[b],f=af[c],g=af[d];if(e||f||g){var h=g?d:f?c:b;this.tokens.push({index:this.index,text:h,operator:!0}),this.index+=h.length}else this.throwError("Unexpected next character ",this.index,this.index+1)}}return this.tokens},is:function(a,b){return-1!==b.indexOf(a)},peek:function(a){var b=a||1;return this.index+b<this.text.length?this.text.charAt(this.index+b):!1},isNumber:function(a){return a>="0"&&"9">=a&&"string"==typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"	"===a||"\n"===a||"\x0B"===a||" "===a},isIdent:function(a){return a>="a"&&"z">=a||a>="A"&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,b,c){c=c||this.index;var d=u(b)?"s "+b+"-"+this.index+" ["+this.text.substring(b,c)+"]":" "+c;throw Ye("lexerr","Lexer Error: {0} at column{1} in expression [{2}].",a,d,this.text)},readNumber:function(){for(var a="",b=this.index;this.index<this.text.length;){var c=wd(this.text.charAt(this.index));if("."==c||this.isNumber(c))a+=c;else{var d=this.peek();if("e"==c&&this.isExpOperator(d))a+=c;else if(this.isExpOperator(c)&&d&&this.isNumber(d)&&"e"==a.charAt(a.length-1))a+=c;else{if(!this.isExpOperator(c)||d&&this.isNumber(d)||"e"!=a.charAt(a.length-1))break;this.throwError("Invalid exponent")}}this.index++}this.tokens.push({index:b,text:a,constant:!0,value:Number(a)})},readIdent:function(){for(var a=this.index;this.index<this.text.length;){var b=this.text.charAt(this.index);if(!this.isIdent(b)&&!this.isNumber(b))break;this.index++}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var b=this.index;this.index++;for(var c="",d=a,e=!1;this.index<this.text.length;){var f=this.text.charAt(this.index);if(d+=f,e){if("u"===f){var g=this.text.substring(this.index+1,this.index+5);g.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+g+"]"),this.index+=4,c+=String.fromCharCode(parseInt(g,16))}else{var h=bf[f];c+=h||f}e=!1}else if("\\"===f)e=!0;else{if(f===a)return this.index++,void this.tokens.push({index:b,text:d,constant:!0,value:c});c+=f}this.index++}this.throwError("Unterminated quote",b)}};var df=function(a,b){this.lexer=a,this.options=b};df.Program="Program",df.ExpressionStatement="ExpressionStatement",df.AssignmentExpression="AssignmentExpression",df.ConditionalExpression="ConditionalExpression",df.LogicalExpression="LogicalExpression",df.BinaryExpression="BinaryExpression",df.UnaryExpression="UnaryExpression",df.CallExpression="CallExpression",df.MemberExpression="MemberExpression",df.Identifier="Identifier",df.Literal="Literal",df.ArrayExpression="ArrayExpression",df.Property="Property",df.ObjectExpression="ObjectExpression",df.ThisExpression="ThisExpression",df.NGValueParameter="NGValueParameter",df.prototype={ast:function(a){this.text=a,this.tokens=this.lexer.lex(a);var b=this.program();return 0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]),b},program:function(){for(var a=[];;)if(this.tokens.length>0&&!this.peek("}",")",";","]")&&a.push(this.expressionStatement()),!this.expect(";"))return{type:df.Program,body:a}},expressionStatement:function(){return{type:df.ExpressionStatement,expression:this.filterChain()}},filterChain:function(){for(var a,b=this.expression();a=this.expect("|");)b=this.filter(b);return b},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary();return this.expect("=")&&(a={type:df.AssignmentExpression,left:a,right:this.assignment(),operator:"="}),a},ternary:function(){var a,b,c=this.logicalOR();return this.expect("?")&&(a=this.expression(),this.consume(":"))?(b=this.expression(),{type:df.ConditionalExpression,test:c,alternate:a,consequent:b}):c},logicalOR:function(){for(var a=this.logicalAND();this.expect("||");)a={type:df.LogicalExpression,operator:"||",left:a,right:this.logicalAND()};return a},logicalAND:function(){for(var a=this.equality();this.expect("&&");)a={type:df.LogicalExpression,operator:"&&",left:a,right:this.equality()};return a},equality:function(){for(var a,b=this.relational();a=this.expect("==","!=","===","!==");)b={type:df.BinaryExpression,operator:a.text,left:b,right:this.relational()};return b},relational:function(){for(var a,b=this.additive();a=this.expect("<",">","<=",">=");)b={type:df.BinaryExpression,operator:a.text,left:b,right:this.additive()};return b},additive:function(){for(var a,b=this.multiplicative();a=this.expect("+","-");)b={type:df.BinaryExpression,operator:a.text,left:b,right:this.multiplicative()};return b},multiplicative:function(){for(var a,b=this.unary();a=this.expect("*","/","%");)b={type:df.BinaryExpression,operator:a.text,left:b,right:this.unary()};return b},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:df.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.constants.hasOwnProperty(this.peek().text)?a=O(this.constants[this.consume().text]):this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",this.peek());for(var b;b=this.expect("(","[",".");)"("===b.text?(a={type:df.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):"["===b.text?(a={type:df.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===b.text?a={type:df.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){for(var b=[a],c={type:df.CallExpression,callee:this.identifier(),arguments:b,filter:!0};this.expect(":");)b.push(this.expression());return c},parseArguments:function(){var a=[];if(")"!==this.peekToken().text)do a.push(this.expression());while(this.expect(","));return a},identifier:function(){var a=this.consume();return a.identifier||this.throwError("is not a valid identifier",a),{type:df.Identifier,name:a.text}},constant:function(){return{type:df.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text)do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","));return this.consume("]"),{type:df.ArrayExpression,elements:a}},object:function(){var a,b=[];if("}"!==this.peekToken().text)do{if(this.peek("}"))break;a={type:df.Property,kind:"init"},this.peek().constant?a.key=this.constant():this.peek().identifier?a.key=this.identifier():this.throwError("invalid key",this.peek()),this.consume(":"),a.value=this.expression(),b.push(a)}while(this.expect(","));return this.consume("}"),{type:df.ObjectExpression,properties:b}},throwError:function(a,b){throw Ye("syntax","Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].",b.text,a,b.index+1,this.text,this.text.substring(b.index))},consume:function(a){if(0===this.tokens.length)throw Ye("ueoe","Unexpected end of expression: {0}",this.text);var b=this.expect(a);return b||this.throwError("is unexpected, expecting ["+a+"]",this.peek()),b},peekToken:function(){if(0===this.tokens.length)throw Ye("ueoe","Unexpected end of expression: {0}",this.text);return this.tokens[0]},peek:function(a,b,c,d){return this.peekAhead(0,a,b,c,d)},peekAhead:function(a,b,c,d,e){if(this.tokens.length>a){var f=this.tokens[a],g=f.text;if(g===b||g===c||g===d||g===e||!b&&!c&&!d&&!e)return f}return!1},expect:function(a,b,c,d){var e=this.peek(a,b,c,d);return e?(this.tokens.shift(),e):!1},constants:{"true":{type:df.Literal,value:!0},"false":{type:df.Literal,value:!1},"null":{type:df.Literal,value:null},undefined:{type:df.Literal,value:c},"this":{type:df.ThisExpression}}},ic.prototype={compile:function(a,b){var d=this,e=this.astBuilder.ast(a);this.state={nextId:0,filters:{},expensiveChecks:b,fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]},cc(e,d.$filter);var g,h="";if(this.stage="assign",g=fc(e)){this.state.computing="assign";var i=this.nextId();this.recurse(g,i),this.return_(i),h="fn.assign="+this.generateFunction("assign","s,v,l")}var j=dc(e.body);d.stage="inputs",f(j,function(a,b){var c="fn"+b;d.state[c]={vars:[],body:[],own:{}},d.state.computing=c;var e=d.nextId();d.recurse(a,e),d.return_(e),d.state.inputs.push(c),a.watchId=b}),this.state.computing="fn",this.stage="main",this.recurse(e);var k='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+h+this.watchFns()+"return fn;",l=new Function("$filter","ensureSafeMemberName","ensureSafeObject","ensureSafeFunction","getStringValue","ensureSafeAssignContext","ifDefined","plus","text",k)(this.$filter,Wb,Yb,Zb,Xb,$b,_b,ac,a);return this.state=this.stage=c,l.literal=gc(e),l.constant=hc(e),l},USE:"use",STRICT:"strict",watchFns:function(){var a=[],b=this.state.inputs,c=this;return f(b,function(b){a.push("var "+b+"="+c.generateFunction(b,"s"))}),b.length&&a.push("fn.inputs=["+b.join(",")+"];"),a.join("")},generateFunction:function(a,b){return"function("+b+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],b=this;return f(this.state.filters,function(c,d){a.push(c+"=$filter("+b.escape(d)+")")}),a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,b,d,e,g,h){var i,j,k,l,m=this;if(e=e||p,!h&&u(a.watchId))return b=b||this.nextId(),void this.if_("i",this.lazyAssign(b,this.computedMember("i",a.watchId)),this.lazyRecurse(a,b,d,e,g,!0));switch(a.type){case df.Program:f(a.body,function(b,d){m.recurse(b.expression,c,c,function(a){j=a}),d!==a.body.length-1?m.current().body.push(j,";"):m.return_(j)});break;case df.Literal:l=this.escape(a.value),this.assign(b,l),e(l);break;case df.UnaryExpression:this.recurse(a.argument,c,c,function(a){j=a}),l=a.operator+"("+this.ifDefined(j,0)+")",this.assign(b,l),e(l);break;case df.BinaryExpression:this.recurse(a.left,c,c,function(a){i=a}),this.recurse(a.right,c,c,function(a){j=a}),l="+"===a.operator?this.plus(i,j):"-"===a.operator?this.ifDefined(i,0)+a.operator+this.ifDefined(j,0):"("+i+")"+a.operator+"("+j+")",this.assign(b,l),e(l);break;case df.LogicalExpression:b=b||this.nextId(),m.recurse(a.left,b),m.if_("&&"===a.operator?b:m.not(b),m.lazyRecurse(a.right,b)),e(b);break;case df.ConditionalExpression:b=b||this.nextId(),m.recurse(a.test,b),m.if_(b,m.lazyRecurse(a.alternate,b),m.lazyRecurse(a.consequent,b)),e(b);break;case df.Identifier:b=b||this.nextId(),d&&(d.context="inputs"===m.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",a.name)+"?l:s"),d.computed=!1,d.name=a.name),Wb(a.name),m.if_("inputs"===m.stage||m.not(m.getHasOwnProperty("l",a.name)),function(){m.if_("inputs"===m.stage||"s",function(){g&&1!==g&&m.if_(m.not(m.nonComputedMember("s",a.name)),m.lazyAssign(m.nonComputedMember("s",a.name),"{}")),m.assign(b,m.nonComputedMember("s",a.name))})},b&&m.lazyAssign(b,m.nonComputedMember("l",a.name))),(m.state.expensiveChecks||kc(a.name))&&m.addEnsureSafeObject(b),e(b);break;case df.MemberExpression:i=d&&(d.context=this.nextId())||this.nextId(),b=b||this.nextId(),m.recurse(a.object,i,c,function(){m.if_(m.notNull(i),function(){a.computed?(j=m.nextId(),m.recurse(a.property,j),m.getStringValue(j),m.addEnsureSafeMemberName(j),g&&1!==g&&m.if_(m.not(m.computedMember(i,j)),m.lazyAssign(m.computedMember(i,j),"{}")),l=m.ensureSafeObject(m.computedMember(i,j)),m.assign(b,l),d&&(d.computed=!0,d.name=j)):(Wb(a.property.name),g&&1!==g&&m.if_(m.not(m.nonComputedMember(i,a.property.name)),m.lazyAssign(m.nonComputedMember(i,a.property.name),"{}")),l=m.nonComputedMember(i,a.property.name),(m.state.expensiveChecks||kc(a.property.name))&&(l=m.ensureSafeObject(l)),m.assign(b,l),d&&(d.computed=!1,d.name=a.property.name))},function(){m.assign(b,"undefined")}),e(b)},!!g);break;case df.CallExpression:b=b||this.nextId(),a.filter?(j=m.filter(a.callee.name),k=[],f(a.arguments,function(a){var b=m.nextId();m.recurse(a,b),k.push(b)}),l=j+"("+k.join(",")+")",m.assign(b,l),e(b)):(j=m.nextId(),i={},k=[],m.recurse(a.callee,j,i,function(){m.if_(m.notNull(j),function(){m.addEnsureSafeFunction(j),f(a.arguments,function(a){m.recurse(a,m.nextId(),c,function(a){k.push(m.ensureSafeObject(a))})}),i.name?(m.state.expensiveChecks||m.addEnsureSafeObject(i.context),l=m.member(i.context,i.name,i.computed)+"("+k.join(",")+")"):l=j+"("+k.join(",")+")",l=m.ensureSafeObject(l),m.assign(b,l)},function(){m.assign(b,"undefined")}),e(b)}));break;case df.AssignmentExpression:if(j=this.nextId(),i={},!ec(a.left))throw Ye("lval","Trying to assing a value to a non l-value");this.recurse(a.left,c,i,function(){m.if_(m.notNull(i.context),function(){m.recurse(a.right,j),m.addEnsureSafeObject(m.member(i.context,i.name,i.computed)),m.addEnsureSafeAssignContext(i.context),l=m.member(i.context,i.name,i.computed)+a.operator+j,m.assign(b,l),e(b||l)})},1);break;case df.ArrayExpression:k=[],f(a.elements,function(a){m.recurse(a,m.nextId(),c,function(a){k.push(a)})}),l="["+k.join(",")+"]",this.assign(b,l),e(l);break;case df.ObjectExpression:k=[],f(a.properties,function(a){m.recurse(a.value,m.nextId(),c,function(b){k.push(m.escape(a.key.type===df.Identifier?a.key.name:""+a.key.value)+":"+b)})}),l="{"+k.join(",")+"}",this.assign(b,l),e(l);break;case df.ThisExpression:this.assign(b,"s"),e("s");break;case df.NGValueParameter:this.assign(b,"v"),e("v")}},getHasOwnProperty:function(a,b){var c=a+"."+b,d=this.current().own;return d.hasOwnProperty(c)||(d[c]=this.nextId(!1,a+"&&("+this.escape(b)+" in "+a+")")),d[c]},assign:function(a,b){return a?(this.current().body.push(a,"=",b,";"),a):void 0},filter:function(a){return this.state.filters.hasOwnProperty(a)||(this.state.filters[a]=this.nextId(!0)),this.state.filters[a]},ifDefined:function(a,b){return"ifDefined("+a+","+this.escape(b)+")"},plus:function(a,b){return"plus("+a+","+b+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,b,c){if(a===!0)b();else{var d=this.current().body;d.push("if(",a,"){"),b(),d.push("}"),c&&(d.push("else{"),c(),d.push("}"))}},not:function(a){return"!("+a+")"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,b){return a+"."+b},computedMember:function(a,b){return a+"["+b+"]"},member:function(a,b,c){return c?this.computedMember(a,b):this.nonComputedMember(a,b)},addEnsureSafeObject:function(a){this.current().body.push(this.ensureSafeObject(a),";")},addEnsureSafeMemberName:function(a){this.current().body.push(this.ensureSafeMemberName(a),";")},addEnsureSafeFunction:function(a){this.current().body.push(this.ensureSafeFunction(a),";")},addEnsureSafeAssignContext:function(a){this.current().body.push(this.ensureSafeAssignContext(a),";")},ensureSafeObject:function(a){return"ensureSafeObject("+a+",text)"},ensureSafeMemberName:function(a){return"ensureSafeMemberName("+a+",text)"},ensureSafeFunction:function(a){return"ensureSafeFunction("+a+",text)"},getStringValue:function(a){this.assign(a,"getStringValue("+a+",text)")},ensureSafeAssignContext:function(a){return"ensureSafeAssignContext("+a+",text)"},lazyRecurse:function(a,b,c,d,e,f){var g=this;return function(){g.recurse(a,b,c,d,e,f)}},lazyAssign:function(a,b){var c=this;return function(){c.assign(a,b)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(x(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+"'";if(y(a))return a.toString();if(a===!0)return"true";if(a===!1)return"false";if(null===a)return"null";if("undefined"==typeof a)return"undefined";throw Ye("esc","IMPOSSIBLE")},nextId:function(a,b){var c="v"+this.state.nextId++;return a||this.current().vars.push(c+(b?"="+b:"")),c},current:function(){return this.state[this.state.computing]}},jc.prototype={compile:function(a,b){var c=this,d=this.astBuilder.ast(a);this.expression=a,this.expensiveChecks=b,cc(d,c.$filter);var e,g;(e=fc(d))&&(g=this.recurse(e));var h,i=dc(d.body);i&&(h=[],f(i,function(a,b){var d=c.recurse(a);a.input=d,h.push(d),a.watchId=b}));var j=[];f(d.body,function(a){j.push(c.recurse(a.expression))});var k=0===d.body.length?function(){}:1===d.body.length?j[0]:function(a,b){var c;return f(j,function(d){c=d(a,b)}),c};return g&&(k.assign=function(a,b,c){return g(a,c,b)}),h&&(k.inputs=h),k.literal=gc(d),k.constant=hc(d),k},recurse:function(a,b,d){var e,g,h,i=this;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case df.Literal:return this.value(a.value,b);case df.UnaryExpression:return g=this.recurse(a.argument),this["unary"+a.operator](g,b);case df.BinaryExpression:return e=this.recurse(a.left),g=this.recurse(a.right),this["binary"+a.operator](e,g,b);case df.LogicalExpression:return e=this.recurse(a.left),g=this.recurse(a.right),this["binary"+a.operator](e,g,b);case df.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),b);case df.Identifier:return Wb(a.name,i.expression),i.identifier(a.name,i.expensiveChecks||kc(a.name),b,d,i.expression);case df.MemberExpression:return e=this.recurse(a.object,!1,!!d),a.computed||(Wb(a.property.name,i.expression),g=a.property.name),a.computed&&(g=this.recurse(a.property)),a.computed?this.computedMember(e,g,b,d,i.expression):this.nonComputedMember(e,g,i.expensiveChecks,b,d,i.expression);case df.CallExpression:return h=[],f(a.arguments,function(a){h.push(i.recurse(a))}),a.filter&&(g=this.$filter(a.callee.name)),a.filter||(g=this.recurse(a.callee,!0)),a.filter?function(a,d,e,f){for(var i=[],j=0;j<h.length;++j)i.push(h[j](a,d,e,f));var k=g.apply(c,i,f);return b?{context:c,name:c,value:k}:k}:function(a,c,d,e){var f,j=g(a,c,d,e);if(null!=j.value){Yb(j.context,i.expression),Zb(j.value,i.expression);for(var k=[],l=0;l<h.length;++l)k.push(Yb(h[l](a,c,d,e),i.expression));f=Yb(j.value.apply(j.context,k),i.expression)}return b?{value:f}:f};case df.AssignmentExpression:return e=this.recurse(a.left,!0,1),g=this.recurse(a.right),function(a,c,d,f){var h=e(a,c,d,f),j=g(a,c,d,f);return Yb(h.value,i.expression),$b(h.context),h.context[h.name]=j,b?{value:j}:j};case df.ArrayExpression:return h=[],f(a.elements,function(a){h.push(i.recurse(a))}),function(a,c,d,e){for(var f=[],g=0;g<h.length;++g)f.push(h[g](a,c,d,e));return b?{value:f}:f};case df.ObjectExpression:return h=[],f(a.properties,function(a){h.push({key:a.key.type===df.Identifier?a.key.name:""+a.key.value,value:i.recurse(a.value)})}),function(a,c,d,e){for(var f={},g=0;g<h.length;++g)f[h[g].key]=h[g].value(a,c,d,e);return b?{value:f}:f};case df.ThisExpression:return function(a){return b?{value:a}:a};case df.NGValueParameter:return function(a,c,d,e){return b?{value:d}:d}}},"unary+":function(a,b){return function(c,d,e,f){var g=a(c,d,e,f);return g=u(g)?+g:0,b?{value:g}:g}},"unary-":function(a,b){return function(c,d,e,f){var g=a(c,d,e,f);return g=u(g)?-g:0,b?{value:g}:g}},"unary!":function(a,b){return function(c,d,e,f){var g=!a(c,d,e,f);return b?{value:g}:g}},"binary+":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g),i=b(d,e,f,g),j=ac(h,i);return c?{value:j}:j}},"binary-":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g),i=b(d,e,f,g),j=(u(h)?h:0)-(u(i)?i:0);return c?{value:j}:j}},"binary*":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)*b(d,e,f,g);return c?{value:h}:h}},"binary/":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)/b(d,e,f,g);return c?{value:h}:h}},"binary%":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)%b(d,e,f,g);return c?{value:h}:h}},"binary===":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)===b(d,e,f,g);return c?{value:h}:h}},"binary!==":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)!==b(d,e,f,g);return c?{value:h}:h}},"binary==":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)==b(d,e,f,g);return c?{value:h}:h}},"binary!=":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)!=b(d,e,f,g);return c?{value:h}:h}},"binary<":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)<b(d,e,f,g);return c?{value:h}:h}},"binary>":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)>b(d,e,f,g);return c?{value:h}:h}},"binary<=":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)<=b(d,e,f,g);return c?{value:h}:h}},"binary>=":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)>=b(d,e,f,g);return c?{value:h}:h}},"binary&&":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)&&b(d,e,f,g);return c?{value:h}:h}},"binary||":function(a,b,c){return function(d,e,f,g){var h=a(d,e,f,g)||b(d,e,f,g);return c?{value:h}:h}},"ternary?:":function(a,b,c,d){return function(e,f,g,h){var i=a(e,f,g,h)?b(e,f,g,h):c(e,f,g,h);return d?{value:i}:i}},value:function(a,b){return function(){return b?{context:c,name:c,value:a}:a}},identifier:function(a,b,d,e,f){return function(g,h,i,j){var k=h&&a in h?h:g;e&&1!==e&&k&&!k[a]&&(k[a]={});var l=k?k[a]:c;return b&&Yb(l,f),d?{context:k,name:a,value:l}:l}},computedMember:function(a,b,c,d,e){return function(f,g,h,i){var j,k,l=a(f,g,h,i);return null!=l&&(j=b(f,g,h,i),j=Xb(j),Wb(j,e),d&&1!==d&&l&&!l[j]&&(l[j]={}),k=l[j],Yb(k,e)),c?{context:l,name:j,value:k}:k}},nonComputedMember:function(a,b,d,e,f,g){return function(h,i,j,k){var l=a(h,i,j,k);f&&1!==f&&l&&!l[b]&&(l[b]={});var m=null!=l?l[b]:c;return(d||kc(b))&&Yb(m,g),e?{context:l,name:b,value:m}:m}},inputs:function(a,b){return function(c,d,e,f){return f?f[b]:a(c,d,e)}}};var ef=function(a,b,c){this.lexer=a,this.$filter=b,this.options=c,this.ast=new df(this.lexer),this.astCompiler=c.csp?new jc(this.ast,b):new ic(this.ast,b)};ef.prototype={constructor:ef,parse:function(a){return this.astCompiler.compile(a,this.options.expensiveChecks)}};var ff=(qa(),qa(),Object.prototype.valueOf),gf=d("$sce"),hf={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},He=d("$compile"),jf=b.createElement("a"),kf=Bc(a.location.href);Ec.$inject=["$document"],Gc.$inject=["$provide"],Lc.$inject=["$locale"],Mc.$inject=["$locale"];var lf=".",mf={yyyy:Pc("FullYear",4),yy:Pc("FullYear",2,0,!0),y:Pc("FullYear",1),MMMM:Qc("Month"),MMM:Qc("Month",!0),MM:Pc("Month",2,1),M:Pc("Month",1,1),dd:Pc("Date",2),d:Pc("Date",1),HH:Pc("Hours",2),H:Pc("Hours",1),hh:Pc("Hours",2,-12),h:Pc("Hours",1,-12),mm:Pc("Minutes",2),m:Pc("Minutes",1),ss:Pc("Seconds",2),s:Pc("Seconds",1),sss:Pc("Milliseconds",3),EEEE:Qc("Day"),EEE:Qc("Day",!0),a:Vc,Z:Rc,ww:Uc(2),w:Uc(1),G:Wc,GG:Wc,GGG:Wc,GGGG:Xc},nf=/((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,of=/^\-?\d+$/;Yc.$inject=["$locale"];var pf=r(wd),qf=r(yd);_c.$inject=["$parse"];var rf=r({restrict:"E",compile:function(a,b){return b.href||b.xlinkHref?void 0:function(a,b){if("a"===b[0].nodeName.toLowerCase()){var c="[object SVGAnimatedString]"===Id.call(b.prop("href"))?"xlink:href":"href";b.on("click",function(a){b.attr(c)||a.preventDefault()})}}}}),sf={};f(re,function(a,b){function c(a,c,e){a.$watch(e[d],function(a){e.$set(b,!!a)})}if("multiple"!=a){var d=lb("ng-"+b),e=c;"checked"===a&&(e=function(a,b,e){e.ngModel!==e[d]&&c(a,b,e)}),sf[d]=function(){return{restrict:"A",priority:100,link:e}}}}),f(te,function(a,b){sf[b]=function(){return{priority:100,link:function(a,c,d){if("ngPattern"===b&&"/"==d.ngPattern.charAt(0)){var e=d.ngPattern.match(ud);if(e)return void d.$set("ngPattern",new RegExp(e[1],e[2]))}a.$watch(d[b],function(a){d.$set(b,a)})}}}}),f(["src","srcset","href"],function(a){var b=lb("ng-"+a);sf[b]=function(){return{priority:99,link:function(c,d,e){var f=a,g=a;"href"===a&&"[object SVGAnimatedString]"===Id.call(d.prop("href"))&&(g="xlinkHref",e.$attr[g]="xlink:href",f=null),e.$observe(b,function(b){return b?(e.$set(g,b),void(Bd&&f&&d.prop(f,e[g]))):void("href"===a&&e.$set(g,null))})}}}});var tf={$addControl:p,$$renameControl:bd,$removeControl:p,$setValidity:p,$setDirty:p,$setPristine:p,$setSubmitted:p},uf="ng-submitted";cd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var vf=function(a){return["$timeout","$parse",function(b,d){function e(a){return""===a?d('this[""]').assign:d(a).assign||p}var f={name:"form",restrict:a?"EAC":"E",require:["form","^^?form"],controller:cd,compile:function(d,f){d.addClass(bg).addClass(_f);var g=f.name?"name":a&&f.ngForm?"ngForm":!1;return{pre:function(a,d,f,h){var i=h[0];if(!("action"in f)){var j=function(b){a.$apply(function(){i.$commitViewValue(),i.$setSubmitted()}),b.preventDefault()};ee(d[0],"submit",j),d.on("$destroy",function(){b(function(){fe(d[0],"submit",j)},0,!1)})}var k=h[1]||i.$$parentForm;k.$addControl(i);var m=g?e(i.$name):p;g&&(m(a,i),f.$observe(g,function(b){i.$name!==b&&(m(a,c),i.$$parentForm.$$renameControl(i,b),(m=e(i.$name))(a,i))})),d.on("$destroy",function(){i.$$parentForm.$removeControl(i),m(a,c),l(i,tf)})}}}};return f}]},wf=vf(),xf=vf(!0),yf=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,zf=/^[A-Za-z][A-Za-z\d.+-]*:\/*(?:\w+(?::\w+)?@)?[^\s\/]+(?::\d+)?(?:\/[\w#!:.?+=&%@\-\/]*)?$/,Af=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,Bf=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,Cf=/^(\d{4})-(\d{2})-(\d{2})$/,Df=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Ef=/^(\d{4})-W(\d\d)$/,Ff=/^(\d{4})-(\d\d)$/,Gf=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Hf={text:ed,date:id("date",Cf,hd(Cf,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":id("datetimelocal",Df,hd(Df,["yyyy","MM","dd","HH","mm","ss","sss"]),"yyyy-MM-ddTHH:mm:ss.sss"),time:id("time",Gf,hd(Gf,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:id("week",Ef,gd,"yyyy-Www"),month:id("month",Ff,hd(Ff,["yyyy","MM"]),"yyyy-MM"),number:kd,url:ld,email:md,radio:nd,checkbox:pd,hidden:p,button:p,submit:p,reset:p,file:p},If=["$browser","$sniffer","$filter","$parse",function(a,b,c,d){return{restrict:"E",require:["?ngModel"],link:{pre:function(e,f,g,h){h[0]&&(Hf[wd(g.type)]||Hf.text)(e,f,g,h[0],b,a,c,d)}}}}],Jf=/^(true|false|\d+)$/,Kf=function(){return{restrict:"A",priority:100,compile:function(a,b){return Jf.test(b.ngValue)?function(a,b,c){c.$set("value",a.$eval(c.ngValue))}:function(a,b,c){a.$watch(c.ngValue,function(a){c.$set("value",a)})}}}},Lf=["$compile",function(a){return{restrict:"AC",compile:function(b){return a.$$addBindingClass(b),function(b,c,d){a.$$addBindingInfo(c,d.ngBind),c=c[0],b.$watch(d.ngBind,function(a){c.textContent=t(a)?"":a})}}}}],Mf=["$interpolate","$compile",function(a,b){return{compile:function(c){return b.$$addBindingClass(c),function(c,d,e){var f=a(d.attr(e.$attr.ngBindTemplate));b.$$addBindingInfo(d,f.expressions),d=d[0],e.$observe("ngBindTemplate",function(a){d.textContent=t(a)?"":a})}}}}],Nf=["$sce","$parse","$compile",function(a,b,c){return{restrict:"A",compile:function(d,e){var f=b(e.ngBindHtml),g=b(e.ngBindHtml,function(a){return(a||"").toString()});return c.$$addBindingClass(d),function(b,d,e){c.$$addBindingInfo(d,e.ngBindHtml),b.$watch(g,function(){d.html(a.getTrustedHtml(f(b))||"")})}}}}],Of=r({restrict:"A",require:"ngModel",link:function(a,b,c,d){d.$viewChangeListeners.push(function(){a.$eval(c.ngChange)})}}),Pf=qd("",!0),Qf=qd("Odd",0),Rf=qd("Even",1),Sf=ad({compile:function(a,b){b.$set("ngCloak",c),a.removeClass("ng-cloak")}}),Tf=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Uf={},Vf={blur:!0,focus:!0};f("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var b=lb("ng-"+a);Uf[b]=["$parse","$rootScope",function(c,d){return{restrict:"A",compile:function(e,f){var g=c(f[b],null,!0);return function(b,c){c.on(a,function(c){var e=function(){g(b,{$event:c})};Vf[a]&&d.$$phase?b.$evalAsync(e):b.$apply(e)})}}}}]});var Wf=["$animate",function(a){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var h,i,j;c.$watch(e.ngIf,function(c){c?i||g(function(c,f){i=f,c[c.length++]=b.createComment(" end ngIf: "+e.ngIf+" "),h={clone:c},a.enter(c,d.parent(),d)}):(j&&(j.remove(),j=null),i&&(i.$destroy(),i=null),h&&(j=pa(h.clone),a.leave(j).then(function(){j=null}),h=null))})}}}],Xf=["$templateRequest","$anchorScroll","$animate",function(a,b,c){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:Ld.noop,compile:function(d,e){var f=e.ngInclude||e.src,g=e.onload||"",h=e.autoscroll;return function(d,e,i,j,k){var l,m,n,o=0,p=function(){m&&(m.remove(),m=null),l&&(l.$destroy(),l=null),n&&(c.leave(n).then(function(){m=null}),m=n,n=null)};d.$watch(f,function(f){var i=function(){!u(h)||h&&!d.$eval(h)||b()},m=++o;f?(a(f,!0).then(function(a){if(m===o){var b=d.$new();j.template=a;var h=k(b,function(a){p(),c.enter(a,null,e).then(i)});l=b,n=h,l.$emit("$includeContentLoaded",f),d.$eval(g)}},function(){m===o&&(p(),d.$emit("$includeContentError",f))}),d.$emit("$includeContentRequested",f)):(p(),j.template=null)})}}}}],Yf=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,f){return/SVG/.test(d[0].toString())?(d.empty(),void a(Aa(f.template,b).childNodes)(c,function(a){d.append(a)},{futureParentElement:d})):(d.html(f.template),void a(d.contents())(c))}}}],Zf=ad({priority:450,compile:function(){return{pre:function(a,b,c){a.$eval(c.ngInit)}}}}),$f=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,b,d,e){var g=b.attr(d.$attr.ngList)||", ",h="false"!==d.ngTrim,i=h?Qd(g):g,j=function(a){if(!t(a)){var b=[];return a&&f(a.split(i),function(a){a&&b.push(h?Qd(a):a)}),b}};e.$parsers.push(j),e.$formatters.push(function(a){return Od(a)?a.join(g):c}),e.$isEmpty=function(a){return!a||!a.length}}}},_f="ng-valid",ag="ng-invalid",bg="ng-pristine",cg="ng-dirty",dg="ng-untouched",eg="ng-touched",fg="ng-pending",gg=d("ngModel"),hg=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,b,d,e,g,h,i,j,k,l){this.$viewValue=Number.NaN,this.$modelValue=Number.NaN,this.$$rawModelValue=c,this.$validators={},this.$asyncValidators={},this.$parsers=[],this.$formatters=[],this.$viewChangeListeners=[],this.$untouched=!0,this.$touched=!1,this.$pristine=!0,this.$dirty=!1,this.$valid=!0,this.$invalid=!1,this.$error={},this.$$success={},this.$pending=c,this.$name=l(d.name||"",!1)(a),this.$$parentForm=tf;var m,n=g(d.ngModel),o=n.assign,q=n,r=o,s=null,v=this;this.$$setOptions=function(a){if(v.$options=a,a&&a.getterSetter){var b=g(d.ngModel+"()"),c=g(d.ngModel+"($$$p)");q=function(a){var c=n(a);return A(c)&&(c=b(a)),c},r=function(a,b){A(n(a))?c(a,{$$$p:v.$modelValue}):o(a,v.$modelValue)}}else if(!n.assign)throw gg("nonassign","Expression '{0}' is non-assignable. Element: {1}",d.ngModel,$(e))},this.$render=p,this.$isEmpty=function(a){return t(a)||""===a||null===a||a!==a};var w=0;rd({ctrl:this,$element:e,set:function(a,b){a[b]=!0},unset:function(a,b){delete a[b]},$animate:h}),this.$setPristine=function(){v.$dirty=!1,v.$pristine=!0,h.removeClass(e,cg),h.addClass(e,bg)},this.$setDirty=function(){v.$dirty=!0,v.$pristine=!1,h.removeClass(e,bg),h.addClass(e,cg),v.$$parentForm.$setDirty()},this.$setUntouched=function(){v.$touched=!1,
+v.$untouched=!0,h.setClass(e,dg,eg)},this.$setTouched=function(){v.$touched=!0,v.$untouched=!1,h.setClass(e,eg,dg)},this.$rollbackViewValue=function(){i.cancel(s),v.$viewValue=v.$$lastCommittedViewValue,v.$render()},this.$validate=function(){if(!y(v.$modelValue)||!isNaN(v.$modelValue)){var a=v.$$lastCommittedViewValue,b=v.$$rawModelValue,d=v.$valid,e=v.$modelValue,f=v.$options&&v.$options.allowInvalid;v.$$runValidators(b,a,function(a){f||d===a||(v.$modelValue=a?b:c,v.$modelValue!==e&&v.$$writeModelToScope())})}},this.$$runValidators=function(a,b,d){function e(){var a=v.$$parserName||"parse";return t(m)?(i(a,null),!0):(m||(f(v.$validators,function(a,b){i(b,null)}),f(v.$asyncValidators,function(a,b){i(b,null)})),i(a,m),m)}function g(){var c=!0;return f(v.$validators,function(d,e){var f=d(a,b);c=c&&f,i(e,f)}),c?!0:(f(v.$asyncValidators,function(a,b){i(b,null)}),!1)}function h(){var d=[],e=!0;f(v.$asyncValidators,function(f,g){var h=f(a,b);if(!I(h))throw gg("$asyncValidators","Expected asynchronous validator to return a promise but got '{0}' instead.",h);i(g,c),d.push(h.then(function(){i(g,!0)},function(a){e=!1,i(g,!1)}))}),d.length?k.all(d).then(function(){j(e)},p):j(!0)}function i(a,b){l===w&&v.$setValidity(a,b)}function j(a){l===w&&d(a)}w++;var l=w;return e()&&g()?void h():void j(!1)},this.$commitViewValue=function(){var a=v.$viewValue;i.cancel(s),(v.$$lastCommittedViewValue!==a||""===a&&v.$$hasNativeValidators)&&(v.$$lastCommittedViewValue=a,v.$pristine&&this.$setDirty(),this.$$parseAndValidate())},this.$$parseAndValidate=function(){function b(){v.$modelValue!==g&&v.$$writeModelToScope()}var d=v.$$lastCommittedViewValue,e=d;if(m=t(e)?c:!0)for(var f=0;f<v.$parsers.length;f++)if(e=v.$parsers[f](e),t(e)){m=!1;break}y(v.$modelValue)&&isNaN(v.$modelValue)&&(v.$modelValue=q(a));var g=v.$modelValue,h=v.$options&&v.$options.allowInvalid;v.$$rawModelValue=e,h&&(v.$modelValue=e,b()),v.$$runValidators(e,v.$$lastCommittedViewValue,function(a){h||(v.$modelValue=a?e:c,b())})},this.$$writeModelToScope=function(){r(a,v.$modelValue),f(v.$viewChangeListeners,function(a){try{a()}catch(c){b(c)}})},this.$setViewValue=function(a,b){v.$viewValue=a,(!v.$options||v.$options.updateOnDefault)&&v.$$debounceViewValueCommit(b)},this.$$debounceViewValueCommit=function(b){var c,d=0,e=v.$options;e&&u(e.debounce)&&(c=e.debounce,y(c)?d=c:y(c[b])?d=c[b]:y(c["default"])&&(d=c["default"])),i.cancel(s),d?s=i(function(){v.$commitViewValue()},d):j.$$phase?v.$commitViewValue():a.$apply(function(){v.$commitViewValue()})},a.$watch(function(){var b=q(a);if(b!==v.$modelValue&&(v.$modelValue===v.$modelValue||b===b)){v.$modelValue=v.$$rawModelValue=b,m=c;for(var d=v.$formatters,e=d.length,f=b;e--;)f=d[e](f);v.$viewValue!==f&&(v.$viewValue=v.$$lastCommittedViewValue=f,v.$render(),v.$$runValidators(b,f,p))}return b})}],ig=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:hg,priority:1,compile:function(b){return b.addClass(bg).addClass(dg).addClass(_f),{pre:function(a,b,c,d){var e=d[0],f=d[1]||e.$$parentForm;e.$$setOptions(d[2]&&d[2].$options),f.$addControl(e),c.$observe("name",function(a){e.$name!==a&&e.$$parentForm.$$renameControl(e,a)}),a.$on("$destroy",function(){e.$$parentForm.$removeControl(e)})},post:function(b,c,d,e){var f=e[0];f.$options&&f.$options.updateOn&&c.on(f.$options.updateOn,function(a){f.$$debounceViewValueCommit(a&&a.type)}),c.on("blur",function(c){f.$touched||(a.$$phase?b.$evalAsync(f.$setTouched):b.$apply(f.$setTouched))})}}}}}],jg=/(\s+|^)default(\s+|$)/,kg=function(){return{restrict:"A",controller:["$scope","$attrs",function(a,b){var c=this;this.$options=O(a.$eval(b.ngModelOptions)),u(this.$options.updateOn)?(this.$options.updateOnDefault=!1,this.$options.updateOn=Qd(this.$options.updateOn.replace(jg,function(){return c.$options.updateOnDefault=!0," "}))):this.$options.updateOnDefault=!0}]}},lg=ad({terminal:!0,priority:1e3}),mg=d("ngOptions"),ng=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,og=["$compile","$parse",function(a,c){function d(a,b,d){function f(a,b,c,d,e){this.selectValue=a,this.viewValue=b,this.label=c,this.group=d,this.disabled=e}function g(a){var b;if(!j&&e(a))b=a;else{b=[];for(var c in a)a.hasOwnProperty(c)&&"$"!==c.charAt(0)&&b.push(c)}return b}var h=a.match(ng);if(!h)throw mg("iexp","Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}",a,$(b));var i=h[5]||h[7],j=h[6],k=/ as /.test(h[0])&&h[1],l=h[9],m=c(h[2]?h[1]:i),n=k&&c(k),o=n||m,p=l&&c(l),q=l?function(a,b){return p(d,b)}:function(a){return Ya(a)},r=function(a,b){return q(a,x(a,b))},s=c(h[2]||h[1]),t=c(h[3]||""),u=c(h[4]||""),v=c(h[8]),w={},x=j?function(a,b){return w[j]=b,w[i]=a,w}:function(a){return w[i]=a,w};return{trackBy:l,getTrackByValue:r,getWatchables:c(v,function(a){var b=[];a=a||[];for(var c=g(a),e=c.length,f=0;e>f;f++){var i=a===c?f:c[f],j=(a[i],x(a[i],i)),k=q(a[i],j);if(b.push(k),h[2]||h[1]){var l=s(d,j);b.push(l)}if(h[4]){var m=u(d,j);b.push(m)}}return b}),getOptions:function(){for(var a=[],b={},c=v(d)||[],e=g(c),h=e.length,i=0;h>i;i++){var j=c===e?i:e[i],k=c[j],m=x(k,j),n=o(d,m),p=q(n,m),w=s(d,m),y=t(d,m),z=u(d,m),A=new f(p,n,w,y,z);a.push(A),b[p]=A}return{items:a,selectValueMap:b,getOptionFromViewValue:function(a){return b[r(a)]},getViewValueFromOption:function(a){return l?Ld.copy(a.viewValue):a.viewValue}}}}}function g(b,c,e,g){function j(a,b){a.element=b,b.disabled=a.disabled,a.label!==b.label&&(b.label=a.label,b.textContent=a.label),a.value!==b.value&&(b.value=a.selectValue)}function k(a,b,c,d){var e;return b&&wd(b.nodeName)===c?e=b:(e=d.cloneNode(!1),b?a.insertBefore(e,b):a.appendChild(e)),e}function l(a){for(var b;a;)b=a.nextSibling,Qa(a),a=b}function m(a){var b=p&&p[0],c=w&&w[0];if(b||c)for(;a&&(a===b||a===c||a.nodeType===$d||""===a.value);)a=a.nextSibling;return a}function n(){var a=x&&q.readValue();x=y.getOptions();var b={},d=c[0].firstChild;if(v&&c.prepend(p),d=m(d),x.items.forEach(function(a){var e,f,g;a.group?(e=b[a.group],e||(f=k(c[0],d,"optgroup",i),d=f.nextSibling,f.label=a.group,e=b[a.group]={groupElement:f,currentOptionElement:f.firstChild}),g=k(e.groupElement,e.currentOptionElement,"option",h),j(a,g),e.currentOptionElement=g.nextSibling):(g=k(c[0],d,"option",h),j(a,g),d=g.nextSibling)}),Object.keys(b).forEach(function(a){l(b[a].currentOptionElement)}),l(d),o.$render(),!o.$isEmpty(a)){var e=q.readValue();(y.trackBy?Q(a,e):a===e)||(o.$setViewValue(e),o.$render())}}var o=g[1];if(o){for(var p,q=g[0],r=e.multiple,s=0,t=c.children(),u=t.length;u>s;s++)if(""===t[s].value){p=t.eq(s);break}var v=!!p,w=Cd(h.cloneNode(!1));w.val("?");var x,y=d(e.ngOptions,c,b),z=function(){v||c.prepend(p),c.val(""),p.prop("selected",!0),p.attr("selected",!0)},A=function(){v||p.remove()},B=function(){c.prepend(w),c.val("?"),w.prop("selected",!0),w.attr("selected",!0)},C=function(){w.remove()};r?(o.$isEmpty=function(a){return!a||0===a.length},q.writeValue=function(a){x.items.forEach(function(a){a.element.selected=!1}),a&&a.forEach(function(a){var b=x.getOptionFromViewValue(a);b&&!b.disabled&&(b.element.selected=!0)})},q.readValue=function(){var a=c.val()||[],b=[];return f(a,function(a){var c=x.selectValueMap[a];c&&!c.disabled&&b.push(x.getViewValueFromOption(c))}),b},y.trackBy&&b.$watchCollection(function(){return Od(o.$viewValue)?o.$viewValue.map(function(a){return y.getTrackByValue(a)}):void 0},function(){o.$render()})):(q.writeValue=function(a){var b=x.getOptionFromViewValue(a);b&&!b.disabled?c[0].value!==b.selectValue&&(C(),A(),c[0].value=b.selectValue,b.element.selected=!0,b.element.setAttribute("selected","selected")):null===a||v?(C(),z()):(A(),B())},q.readValue=function(){var a=x.selectValueMap[c.val()];return a&&!a.disabled?(A(),C(),x.getViewValueFromOption(a)):null},y.trackBy&&b.$watch(function(){return y.getTrackByValue(o.$viewValue)},function(){o.$render()})),v?(p.remove(),a(p)(b),p.removeClass("ng-scope")):p=Cd(h.cloneNode(!1)),n(),b.$watchCollection(y.getWatchables,n)}}var h=b.createElement("option"),i=b.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","?ngModel"],link:{pre:function(a,b,c,d){d[0].registerOption=p},post:g}}}],pg=["$locale","$interpolate","$log",function(a,b,c){var d=/{}/g,e=/^when(Minus)?(.+)$/;return{link:function(g,h,i){function j(a){h.text(a||"")}var k,l=i.count,m=i.$attr.when&&h.attr(i.$attr.when),n=i.offset||0,o=g.$eval(m)||{},q={},r=b.startSymbol(),s=b.endSymbol(),u=r+l+"-"+n+s,v=Ld.noop;f(i,function(a,b){var c=e.exec(b);if(c){var d=(c[1]?"-":"")+wd(c[2]);o[d]=h.attr(i.$attr[b])}}),f(o,function(a,c){q[c]=b(a.replace(d,u))}),g.$watch(l,function(b){var d=parseFloat(b),e=isNaN(d);if(e||d in o||(d=a.pluralCat(d-n)),d!==k&&!(e&&y(k)&&isNaN(k))){v();var f=q[d];t(f)?(null!=b&&c.debug("ngPluralize: no rule defined for '"+d+"' in "+m),v=p,j()):v=g.$watch(f,j),k=d}})}}}],qg=["$parse","$animate",function(a,g){var h="$$NG_REMOVED",i=d("ngRepeat"),j=function(a,b,c,d,e,f,g){a[c]=d,e&&(a[e]=f),a.$index=b,a.$first=0===b,a.$last=b===g-1,a.$middle=!(a.$first||a.$last),a.$odd=!(a.$even=0===(1&b))},k=function(a){return a.clone[0]},l=function(a){return a.clone[a.clone.length-1]};return{restrict:"A",multiElement:!0,transclude:"element",priority:1e3,terminal:!0,$$tlb:!0,compile:function(d,m){var n=m.ngRepeat,o=b.createComment(" end ngRepeat: "+n+" "),p=n.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!p)throw i("iexp","Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.",n);var q=p[1],r=p[2],s=p[3],t=p[4];if(p=q.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/),!p)throw i("iidexp","'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.",q);var u=p[3]||p[1],v=p[2];if(s&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(s)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(s)))throw i("badident","alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.",s);var w,x,y,z,A={$id:Ya};return t?w=a(t):(y=function(a,b){return Ya(b)},z=function(a){return a}),function(a,b,d,m,p){w&&(x=function(b,c,d){return v&&(A[v]=b),A[u]=c,A.$index=d,w(a,A)});var q=qa();a.$watchCollection(r,function(d){var m,r,t,w,A,B,C,D,E,F,G,H,I=b[0],J=qa();if(s&&(a[s]=d),e(d))E=d,D=x||y;else{D=x||z,E=[];for(var K in d)xd.call(d,K)&&"$"!==K.charAt(0)&&E.push(K)}for(w=E.length,G=new Array(w),m=0;w>m;m++)if(A=d===E?m:E[m],B=d[A],C=D(A,B,m),q[C])F=q[C],delete q[C],J[C]=F,G[m]=F;else{if(J[C])throw f(G,function(a){a&&a.scope&&(q[a.id]=a)}),i("dupes","Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}",n,C,B);G[m]={id:C,scope:c,clone:c},J[C]=!0}for(var L in q){if(F=q[L],H=pa(F.clone),g.leave(H),H[0].parentNode)for(m=0,r=H.length;r>m;m++)H[m][h]=!0;F.scope.$destroy()}for(m=0;w>m;m++)if(A=d===E?m:E[m],B=d[A],F=G[m],F.scope){t=I;do t=t.nextSibling;while(t&&t[h]);k(F)!=t&&g.move(pa(F.clone),null,Cd(I)),I=l(F),j(F.scope,m,u,B,v,A,w)}else p(function(a,b){F.scope=b;var c=o.cloneNode(!1);a[a.length++]=c,g.enter(a,null,Cd(I)),I=c,F.clone=a,J[F.id]=F,j(F.scope,m,u,B,v,A,w)});q=J})}}}}],rg="ng-hide",sg="ng-hide-animate",tg=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,c,d){b.$watch(d.ngShow,function(b){a[b?"removeClass":"addClass"](c,rg,{tempClasses:sg})})}}}],ug=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,c,d){b.$watch(d.ngHide,function(b){a[b?"addClass":"removeClass"](c,rg,{tempClasses:sg})})}}}],vg=ad(function(a,b,c){a.$watch(c.ngStyle,function(a,c){c&&a!==c&&f(c,function(a,c){b.css(c,"")}),a&&b.css(a)},!0)}),wg=["$animate",function(a){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(c,d,e,g){var h=e.ngSwitch||e.on,i=[],j=[],k=[],l=[],m=function(a,b){return function(){a.splice(b,1)}};c.$watch(h,function(c){var d,e;for(d=0,e=k.length;e>d;++d)a.cancel(k[d]);for(k.length=0,d=0,e=l.length;e>d;++d){var h=pa(j[d].clone);l[d].$destroy();var n=k[d]=a.leave(h);n.then(m(k,d))}j.length=0,l.length=0,(i=g.cases["!"+c]||g.cases["?"])&&f(i,function(c){c.transclude(function(d,e){l.push(e);var f=c.element;d[d.length++]=b.createComment(" end ngSwitchWhen: ");var g={clone:d};j.push(g),a.enter(d,f.parent(),f)})})})}}}],xg=ad({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,c,d,e){d.cases["!"+c.ngSwitchWhen]=d.cases["!"+c.ngSwitchWhen]||[],d.cases["!"+c.ngSwitchWhen].push({transclude:e,element:b})}}),yg=ad({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,c,d,e){d.cases["?"]=d.cases["?"]||[],d.cases["?"].push({transclude:e,element:b})}}),zg=ad({restrict:"EAC",link:function(a,b,c,e,f){if(!f)throw d("ngTransclude")("orphan","Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: {0}",$(b));f(function(a){b.empty(),b.append(a)})}}),Ag=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(b,c){if("text/ng-template"==c.type){var d=c.id,e=b[0].text;a.put(d,e)}}}}],Bg={$setViewValue:p,$render:p},Cg=["$element","$scope","$attrs",function(a,d,e){var f=this,g=new Za;f.ngModelCtrl=Bg,f.unknownOption=Cd(b.createElement("option")),f.renderUnknownOption=function(b){var c="? "+Ya(b)+" ?";f.unknownOption.val(c),a.prepend(f.unknownOption),a.val(c)},d.$on("$destroy",function(){f.renderUnknownOption=p}),f.removeUnknownOption=function(){f.unknownOption.parent()&&f.unknownOption.remove()},f.readValue=function(){return f.removeUnknownOption(),a.val()},f.writeValue=function(b){f.hasOption(b)?(f.removeUnknownOption(),a.val(b),""===b&&f.emptyOption.prop("selected",!0)):null==b&&f.emptyOption?(f.removeUnknownOption(),a.val("")):f.renderUnknownOption(b)},f.addOption=function(a,b){na(a,'"option value"'),""===a&&(f.emptyOption=b);var c=g.get(a)||0;g.put(a,c+1),f.ngModelCtrl.$render(),td(b)},f.removeOption=function(a){var b=g.get(a);b&&(1===b?(g.remove(a),""===a&&(f.emptyOption=c)):g.put(a,b-1))},f.hasOption=function(a){return!!g.get(a)},f.registerOption=function(a,b,c,d,e){if(d){var g;c.$observe("value",function(a){u(g)&&f.removeOption(g),g=a,f.addOption(a,b)})}else e?a.$watch(e,function(a,d){c.$set("value",a),d!==a&&f.removeOption(d),f.addOption(a,b)}):f.addOption(c.value,b);b.on("$destroy",function(){f.removeOption(c.value),f.ngModelCtrl.$render()})}}],Dg=function(){function a(a,b,c,d){var e=d[1];if(e){var g=d[0];if(g.ngModelCtrl=e,e.$render=function(){g.writeValue(e.$viewValue)},b.on("change",function(){a.$apply(function(){e.$setViewValue(g.readValue())})}),c.multiple){g.readValue=function(){var a=[];return f(b.find("option"),function(b){b.selected&&a.push(b.value)}),a},g.writeValue=function(a){var c=new Za(a);f(b.find("option"),function(a){a.selected=u(c.get(a.value))})};var h,i=NaN;a.$watch(function(){i!==e.$viewValue||Q(h,e.$viewValue)||(h=P(e.$viewValue),e.$render()),i=e.$viewValue}),e.$isEmpty=function(a){return!a||0===a.length}}}}return{restrict:"E",require:["select","?ngModel"],controller:Cg,priority:1,link:{pre:a}}},Eg=["$interpolate",function(a){return{restrict:"E",priority:100,compile:function(b,c){if(u(c.value))var d=a(c.value,!0);else{var e=a(b.text(),!0);e||c.$set("value",b.text())}return function(a,b,c){var f="$selectController",g=b.parent(),h=g.data(f)||g.parent().data(f);h&&h.registerOption(a,b,c,d,e)}}}}],Fg=r({restrict:"E",terminal:!1}),Gg=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,c,d){d&&(c.required=!0,d.$validators.required=function(a,b){return!c.required||!d.$isEmpty(b)},c.$observe("required",function(){d.$validate()}))}}},Hg=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,e,f){if(f){var g,h=e.ngPattern||e.pattern;e.$observe("pattern",function(a){if(x(a)&&a.length>0&&(a=new RegExp("^"+a+"$")),a&&!a.test)throw d("ngPattern")("noregexp","Expected {0} to be a RegExp but was {1}. Element: {2}",h,a,$(b));g=a||c,f.$validate()}),f.$validators.pattern=function(a,b){return f.$isEmpty(b)||t(g)||g.test(b)}}}}},Ig=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,c,d){if(d){var e=-1;c.$observe("maxlength",function(a){var b=n(a);e=isNaN(b)?-1:b,d.$validate()}),d.$validators.maxlength=function(a,b){return 0>e||d.$isEmpty(b)||b.length<=e}}}}},Jg=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,c,d){if(d){var e=0;c.$observe("minlength",function(a){e=n(a)||0,d.$validate()}),d.$validators.minlength=function(a,b){return d.$isEmpty(b)||b.length>=e}}}}};return a.angular.bootstrap?void console.log("WARNING: Tried to load angular more than once."):(ka(),ua(Ld),Ld.module("ngLocale",[],["$provide",function(a){function b(a){a+="";var b=a.indexOf(".");return-1==b?0:a.length-b-1}function d(a,d){var e=d;c===e&&(e=Math.min(b(a),3));var f=Math.pow(10,e),g=(a*f|0)%f;return{v:e,f:g}}var e={ZERO:"zero",ONE:"one",TWO:"two",FEW:"few",MANY:"many",OTHER:"other"};a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:["January","February","March","April","May","June","July","August","September","October","November","December"],SHORTDAY:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],SHORTMONTH:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-¤",negSuf:"",posPre:"¤",posSuf:""}]},id:"en-us",pluralCat:function(a,b){var c=0|a,f=d(a,b);return 1==c&&0==f.v?e.ONE:e.OTHER}})}]),void Cd(b).ready(function(){fa(b,ga)}))}(window,document),!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>'),angular.module("ui.bootstrap",["ui.bootstrap.tpls","ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.dropdown","ui.bootstrap.stackedMap","ui.bootstrap.modal","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.typeahead"]),angular.module("ui.bootstrap.tpls",["template/accordion/accordion-group.html","template/accordion/accordion.html","template/alert/alert.html","template/carousel/carousel.html","template/carousel/slide.html","template/datepicker/datepicker.html","template/datepicker/day.html","template/datepicker/month.html","template/datepicker/popup.html","template/datepicker/year.html","template/modal/backdrop.html","template/modal/window.html","template/pagination/pager.html","template/pagination/pagination.html","template/tooltip/tooltip-html-popup.html","template/tooltip/tooltip-popup.html","template/tooltip/tooltip-template-popup.html","template/popover/popover-html.html","template/popover/popover-template.html","template/popover/popover.html","template/progressbar/bar.html","template/progressbar/progress.html","template/progressbar/progressbar.html","template/rating/rating.html","template/tabs/tab.html","template/tabs/tabset.html","template/timepicker/timepicker.html","template/typeahead/typeahead-match.html","template/typeahead/typeahead-popup.html"]),angular.module("ui.bootstrap.collapse",[]).directive("uibCollapse",["$animate","$injector",function(a,b){var c=b.has("$animateCss")?b.get("$animateCss"):null;return{link:function(b,d,e){function f(){d.removeClass("collapse").addClass("collapsing").attr("aria-expanded",!0).attr("aria-hidden",!1),c?c(d,{addClass:"in",easing:"ease",to:{height:d[0].scrollHeight+"px"}}).start()["finally"](g):a.addClass(d,"in",{to:{height:d[0].scrollHeight+"px"}}).then(g)}function g(){d.removeClass("collapsing").addClass("collapse").css({height:"auto"})}function h(){return d.hasClass("collapse")||d.hasClass("in")?(d.css({height:d[0].scrollHeight+"px"}).removeClass("collapse").addClass("collapsing").attr("aria-expanded",!1).attr("aria-hidden",!0),void(c?c(d,{removeClass:"in",to:{height:"0"}}).start()["finally"](i):a.removeClass(d,"in",{to:{height:"0"}}).then(i))):i()}function i(){d.css({height:"0"}),d.removeClass("collapsing").addClass("collapse")}b.$watch(e.uibCollapse,function(a){a?h():f()})}}}]),angular.module("ui.bootstrap.collapse").value("$collapseSuppressWarning",!1).directive("collapse",["$animate","$injector","$log","$collapseSuppressWarning",function(a,b,c,d){var e=b.has("$animateCss")?b.get("$animateCss"):null;return{link:function(b,f,g){function h(){f.removeClass("collapse").addClass("collapsing").attr("aria-expanded",!0).attr("aria-hidden",!1),e?e(f,{easing:"ease",to:{height:f[0].scrollHeight+"px"}}).start().done(i):a.animate(f,{},{height:f[0].scrollHeight+"px"}).then(i)}function i(){f.removeClass("collapsing").addClass("collapse in").css({height:"auto"})}function j(){return f.hasClass("collapse")||f.hasClass("in")?(f.css({height:f[0].scrollHeight+"px"}).removeClass("collapse in").addClass("collapsing").attr("aria-expanded",!1).attr("aria-hidden",!0),void(e?e(f,{to:{height:"0"}}).start().done(k):a.animate(f,{},{height:"0"}).then(k))):k()}function k(){f.css({height:"0"}),f.removeClass("collapsing").addClass("collapse")}d||c.warn("collapse is now deprecated. Use uib-collapse instead."),b.$watch(g.collapse,function(a){a?j():h()})}}}]),angular.module("ui.bootstrap.accordion",["ui.bootstrap.collapse"]).constant("uibAccordionConfig",{closeOthers:!0}).controller("UibAccordionController",["$scope","$attrs","uibAccordionConfig",function(a,b,c){this.groups=[],this.closeOthers=function(d){var e=angular.isDefined(b.closeOthers)?a.$eval(b.closeOthers):c.closeOthers;e&&angular.forEach(this.groups,function(a){a!==d&&(a.isOpen=!1)})},this.addGroup=function(a){var b=this;this.groups.push(a),a.$on("$destroy",function(c){b.removeGroup(a)})},this.removeGroup=function(a){var b=this.groups.indexOf(a);-1!==b&&this.groups.splice(b,1)}}]).directive("uibAccordion",function(){return{controller:"UibAccordionController",controllerAs:"accordion",transclude:!0,templateUrl:function(a,b){return b.templateUrl||"template/accordion/accordion.html"}}}).directive("uibAccordionGroup",function(){return{require:"^uibAccordion",transclude:!0,replace:!0,templateUrl:function(a,b){return b.templateUrl||"template/accordion/accordion-group.html"},scope:{heading:"@",isOpen:"=?",isDisabled:"=?"},controller:function(){this.setHeading=function(a){this.heading=a}},link:function(a,b,c,d){d.addGroup(a),a.openClass=c.openClass||"panel-open",a.panelClass=c.panelClass,a.$watch("isOpen",function(c){b.toggleClass(a.openClass,!!c),c&&d.closeOthers(a)}),a.toggleOpen=function(b){a.isDisabled||b&&32!==b.which||(a.isOpen=!a.isOpen)}}}}).directive("uibAccordionHeading",function(){return{transclude:!0,template:"",replace:!0,require:"^uibAccordionGroup",link:function(a,b,c,d,e){d.setHeading(e(a,angular.noop))}}}).directive("uibAccordionTransclude",function(){return{require:["?^uibAccordionGroup","?^accordionGroup"],link:function(a,b,c,d){d=d[0]?d[0]:d[1],a.$watch(function(){return d[c.uibAccordionTransclude]},function(a){a&&(b.find("span").html(""),b.find("span").append(a))})}}}),angular.module("ui.bootstrap.accordion").value("$accordionSuppressWarning",!1).controller("AccordionController",["$scope","$attrs","$controller","$log","$accordionSuppressWarning",function(a,b,c,d,e){e||d.warn("AccordionController is now deprecated. Use UibAccordionController instead."),angular.extend(this,c("UibAccordionController",{$scope:a,$attrs:b}))}]).directive("accordion",["$log","$accordionSuppressWarning",function(a,b){return{restrict:"EA",controller:"AccordionController",controllerAs:"accordion",transclude:!0,replace:!1,templateUrl:function(a,b){return b.templateUrl||"template/accordion/accordion.html"},link:function(){b||a.warn("accordion is now deprecated. Use uib-accordion instead.")}}}]).directive("accordionGroup",["$log","$accordionSuppressWarning",function(a,b){return{require:"^accordion",restrict:"EA",transclude:!0,replace:!0,templateUrl:function(a,b){return b.templateUrl||"template/accordion/accordion-group.html"},scope:{heading:"@",isOpen:"=?",isDisabled:"=?"},controller:function(){this.setHeading=function(a){this.heading=a}},link:function(c,d,e,f){b||a.warn("accordion-group is now deprecated. Use uib-accordion-group instead."),f.addGroup(c),c.openClass=e.openClass||"panel-open",c.panelClass=e.panelClass,c.$watch("isOpen",function(a){d.toggleClass(c.openClass,!!a),a&&f.closeOthers(c)}),c.toggleOpen=function(a){c.isDisabled||a&&32!==a.which||(c.isOpen=!c.isOpen)}}}}]).directive("accordionHeading",["$log","$accordionSuppressWarning",function(a,b){return{restrict:"EA",transclude:!0,template:"",replace:!0,require:"^accordionGroup",link:function(c,d,e,f,g){b||a.warn("accordion-heading is now deprecated. Use uib-accordion-heading instead."),f.setHeading(g(c,angular.noop))}}}]).directive("accordionTransclude",["$log","$accordionSuppressWarning",function(a,b){return{require:"^accordionGroup",link:function(c,d,e,f){b||a.warn("accordion-transclude is now deprecated. Use uib-accordion-transclude instead."),c.$watch(function(){return f[e.accordionTransclude]},function(a){a&&(d.find("span").html(""),d.find("span").append(a))})}}}]),angular.module("ui.bootstrap.alert",[]).controller("UibAlertController",["$scope","$attrs","$interpolate","$timeout",function(a,b,c,d){a.closeable=!!b.close;var e=angular.isDefined(b.dismissOnTimeout)?c(b.dismissOnTimeout)(a.$parent):null;e&&d(function(){a.close()},parseInt(e,10))}]).directive("uibAlert",function(){return{controller:"UibAlertController",controllerAs:"alert",templateUrl:function(a,b){return b.templateUrl||"template/alert/alert.html"},transclude:!0,replace:!0,scope:{type:"@",close:"&"}}}),angular.module("ui.bootstrap.alert").value("$alertSuppressWarning",!1).controller("AlertController",["$scope","$attrs","$controller","$log","$alertSuppressWarning",function(a,b,c,d,e){e||d.warn("AlertController is now deprecated. Use UibAlertController instead."),angular.extend(this,c("UibAlertController",{$scope:a,$attrs:b}))}]).directive("alert",["$log","$alertSuppressWarning",function(a,b){return{controller:"AlertController",controllerAs:"alert",templateUrl:function(a,b){return b.templateUrl||"template/alert/alert.html"},transclude:!0,replace:!0,scope:{type:"@",close:"&"},link:function(){b||a.warn("alert is now deprecated. Use uib-alert instead.")}}}]),angular.module("ui.bootstrap.buttons",[]).constant("uibButtonConfig",{activeClass:"active",toggleEvent:"click"}).controller("UibButtonsController",["uibButtonConfig",function(a){this.activeClass=a.activeClass||"active",this.toggleEvent=a.toggleEvent||"click"}]).directive("uibBtnRadio",function(){return{require:["uibBtnRadio","ngModel"],controller:"UibButtonsController",controllerAs:"buttons",link:function(a,b,c,d){var e=d[0],f=d[1];b.find("input").css({display:"none"}),f.$render=function(){b.toggleClass(e.activeClass,angular.equals(f.$modelValue,a.$eval(c.uibBtnRadio)))},b.on(e.toggleEvent,function(){if(!c.disabled){var d=b.hasClass(e.activeClass);(!d||angular.isDefined(c.uncheckable))&&a.$apply(function(){f.$setViewValue(d?null:a.$eval(c.uibBtnRadio)),f.$render()})}})}}}).directive("uibBtnCheckbox",function(){return{require:["uibBtnCheckbox","ngModel"],controller:"UibButtonsController",controllerAs:"button",link:function(a,b,c,d){function e(){return g(c.btnCheckboxTrue,!0)}function f(){return g(c.btnCheckboxFalse,!1)}function g(b,c){return angular.isDefined(b)?a.$eval(b):c}var h=d[0],i=d[1];b.find("input").css({display:"none"}),i.$render=function(){b.toggleClass(h.activeClass,angular.equals(i.$modelValue,e()))},b.on(h.toggleEvent,function(){c.disabled||a.$apply(function(){i.$setViewValue(b.hasClass(h.activeClass)?f():e()),i.$render()})})}}}),angular.module("ui.bootstrap.buttons").value("$buttonsSuppressWarning",!1).controller("ButtonsController",["$controller","$log","$buttonsSuppressWarning",function(a,b,c){c||b.warn("ButtonsController is now deprecated. Use UibButtonsController instead."),angular.extend(this,a("UibButtonsController"))}]).directive("btnRadio",["$log","$buttonsSuppressWarning",function(a,b){return{require:["btnRadio","ngModel"],controller:"ButtonsController",controllerAs:"buttons",link:function(c,d,e,f){b||a.warn("btn-radio is now deprecated. Use uib-btn-radio instead.");var g=f[0],h=f[1];d.find("input").css({display:"none"}),h.$render=function(){d.toggleClass(g.activeClass,angular.equals(h.$modelValue,c.$eval(e.btnRadio)))},d.bind(g.toggleEvent,function(){if(!e.disabled){var a=d.hasClass(g.activeClass);(!a||angular.isDefined(e.uncheckable))&&c.$apply(function(){h.$setViewValue(a?null:c.$eval(e.btnRadio)),h.$render()})}})}}}]).directive("btnCheckbox",["$document","$log","$buttonsSuppressWarning",function(a,b,c){return{require:["btnCheckbox","ngModel"],controller:"ButtonsController",controllerAs:"button",link:function(d,e,f,g){function h(){return j(f.btnCheckboxTrue,!0)}function i(){return j(f.btnCheckboxFalse,!1)}function j(a,b){var c=d.$eval(a);return angular.isDefined(c)?c:b}c||b.warn("btn-checkbox is now deprecated. Use uib-btn-checkbox instead.");var k=g[0],l=g[1];e.find("input").css({display:"none"}),l.$render=function(){e.toggleClass(k.activeClass,angular.equals(l.$modelValue,h()))},e.bind(k.toggleEvent,function(){f.disabled||d.$apply(function(){l.$setViewValue(e.hasClass(k.activeClass)?i():h()),l.$render()})}),e.on("keypress",function(b){f.disabled||32!==b.which||a[0].activeElement!==e[0]||d.$apply(function(){l.$setViewValue(e.hasClass(k.activeClass)?i():h()),l.$render()})})}}}]),angular.module("ui.bootstrap.carousel",[]).controller("UibCarouselController",["$scope","$element","$interval","$animate",function(a,b,c,d){function e(b,c,e){s||(angular.extend(b,{direction:e,active:!0}),angular.extend(m.currentSlide||{},{direction:e,active:!1}),d.enabled()&&!a.noTransition&&!a.$currentTransition&&b.$element&&m.slides.length>1&&(b.$element.data(q,b.direction),m.currentSlide&&m.currentSlide.$element&&m.currentSlide.$element.data(q,b.direction),a.$currentTransition=!0,o?d.on("addClass",b.$element,function(b,c){"close"===c&&(a.$currentTransition=null,d.off("addClass",b))}):b.$element.one("$animate:close",function(){a.$currentTransition=null})),m.currentSlide=b,r=c,g())}function f(a){if(angular.isUndefined(n[a].index))return n[a];var b;n.length;for(b=0;b<n.length;++b)if(n[b].index==a)return n[b]}function g(){h();var b=+a.interval;!isNaN(b)&&b>0&&(k=c(i,b))}function h(){k&&(c.cancel(k),k=null)}function i(){var b=+a.interval;l&&!isNaN(b)&&b>0&&n.length?a.next():a.pause()}function j(b){b.length||(a.$currentTransition=null)}var k,l,m=this,n=m.slides=a.slides=[],o=angular.version.minor>=4,p="uib-noTransition",q="uib-slideDirection",r=-1;m.currentSlide=null;var s=!1;m.select=a.select=function(b,c){var d=a.indexOfSlide(b);void 0===c&&(c=d>m.getCurrentIndex()?"next":"prev"),b&&b!==m.currentSlide&&!a.$currentTransition&&e(b,d,c)},a.$on("$destroy",function(){s=!0}),m.getCurrentIndex=function(){return m.currentSlide&&angular.isDefined(m.currentSlide.index)?+m.currentSlide.index:r;
+},a.indexOfSlide=function(a){return angular.isDefined(a.index)?+a.index:n.indexOf(a)},a.next=function(){var b=(m.getCurrentIndex()+1)%n.length;return 0===b&&a.noWrap()?void a.pause():m.select(f(b),"next")},a.prev=function(){var b=m.getCurrentIndex()-1<0?n.length-1:m.getCurrentIndex()-1;return a.noWrap()&&b===n.length-1?void a.pause():m.select(f(b),"prev")},a.isActive=function(a){return m.currentSlide===a},a.$watch("interval",g),a.$watchCollection("slides",j),a.$on("$destroy",h),a.play=function(){l||(l=!0,g())},a.pause=function(){a.noPause||(l=!1,h())},m.addSlide=function(b,c){b.$element=c,n.push(b),1===n.length||b.active?(m.select(n[n.length-1]),1===n.length&&a.play()):b.active=!1},m.removeSlide=function(a){angular.isDefined(a.index)&&n.sort(function(a,b){return+a.index>+b.index});var b=n.indexOf(a);n.splice(b,1),n.length>0&&a.active?b>=n.length?m.select(n[b-1]):m.select(n[b]):r>b&&r--,0===n.length&&(m.currentSlide=null)},a.$watch("noTransition",function(a){b.data(p,a)})}]).directive("uibCarousel",[function(){return{transclude:!0,replace:!0,controller:"UibCarouselController",controllerAs:"carousel",require:"carousel",templateUrl:function(a,b){return b.templateUrl||"template/carousel/carousel.html"},scope:{interval:"=",noTransition:"=",noPause:"=",noWrap:"&"}}}]).directive("uibSlide",function(){return{require:"^uibCarousel",restrict:"EA",transclude:!0,replace:!0,templateUrl:function(a,b){return b.templateUrl||"template/carousel/slide.html"},scope:{active:"=?",actual:"=?",index:"=?"},link:function(a,b,c,d){d.addSlide(a,b),a.$on("$destroy",function(){d.removeSlide(a)}),a.$watch("active",function(b){b&&d.select(a)})}}}).animation(".item",["$injector","$animate",function(a,b){function c(a,b,c){a.removeClass(b),c&&c()}var d="uib-noTransition",e="uib-slideDirection",f=null;return a.has("$animateCss")&&(f=a.get("$animateCss")),{beforeAddClass:function(a,g,h){if("active"==g&&a.parent()&&a.parent().parent()&&!a.parent().parent().data(d)){var i=!1,j=a.data(e),k="next"==j?"left":"right",l=c.bind(this,a,k+" "+j,h);return a.addClass(j),f?f(a,{addClass:k}).start().done(l):b.addClass(a,k).then(function(){i||l(),h()}),function(){i=!0}}h()},beforeRemoveClass:function(a,g,h){if("active"===g&&a.parent()&&a.parent().parent()&&!a.parent().parent().data(d)){var i=!1,j=a.data(e),k="next"==j?"left":"right",l=c.bind(this,a,k,h);return f?f(a,{addClass:k}).start().done(l):b.addClass(a,k).then(function(){i||l(),h()}),function(){i=!0}}h()}}}]),angular.module("ui.bootstrap.carousel").value("$carouselSuppressWarning",!1).controller("CarouselController",["$scope","$element","$controller","$log","$carouselSuppressWarning",function(a,b,c,d,e){e||d.warn("CarouselController is now deprecated. Use UibCarouselController instead."),angular.extend(this,c("UibCarouselController",{$scope:a,$element:b}))}]).directive("carousel",["$log","$carouselSuppressWarning",function(a,b){return{transclude:!0,replace:!0,controller:"CarouselController",controllerAs:"carousel",require:"carousel",templateUrl:function(a,b){return b.templateUrl||"template/carousel/carousel.html"},scope:{interval:"=",noTransition:"=",noPause:"=",noWrap:"&"},link:function(){b||a.warn("carousel is now deprecated. Use uib-carousel instead.")}}}]).directive("slide",["$log","$carouselSuppressWarning",function(a,b){return{require:"^carousel",transclude:!0,replace:!0,templateUrl:function(a,b){return b.templateUrl||"template/carousel/slide.html"},scope:{active:"=?",actual:"=?",index:"=?"},link:function(c,d,e,f){b||a.warn("slide is now deprecated. Use uib-slide instead."),f.addSlide(c,d),c.$on("$destroy",function(){f.removeSlide(c)}),c.$watch("active",function(a){a&&f.select(c)})}}}]),angular.module("ui.bootstrap.dateparser",[]).service("uibDateParser",["$log","$locale","orderByFilter",function(a,b,c){function d(a){var b=[],d=a.split("");return angular.forEach(g,function(c,e){var f=a.indexOf(e);if(f>-1){a=a.split(""),d[f]="("+c.regex+")",a[f]="$";for(var g=f+1,h=f+e.length;h>g;g++)d[g]="",a[g]="$";a=a.join(""),b.push({index:f,apply:c.apply})}}),{regex:new RegExp("^"+d.join("")+"$"),map:c(b,"index")}}function e(a,b,c){return 1>c?!1:1===b&&c>28?29===c&&(a%4===0&&a%100!==0||a%400===0):3===b||5===b||8===b||10===b?31>c:!0}var f,g,h=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;this.init=function(){f=b.id,this.parsers={},g={yyyy:{regex:"\\d{4}",apply:function(a){this.year=+a}},yy:{regex:"\\d{2}",apply:function(a){this.year=+a+2e3}},y:{regex:"\\d{1,4}",apply:function(a){this.year=+a}},MMMM:{regex:b.DATETIME_FORMATS.MONTH.join("|"),apply:function(a){this.month=b.DATETIME_FORMATS.MONTH.indexOf(a)}},MMM:{regex:b.DATETIME_FORMATS.SHORTMONTH.join("|"),apply:function(a){this.month=b.DATETIME_FORMATS.SHORTMONTH.indexOf(a)}},MM:{regex:"0[1-9]|1[0-2]",apply:function(a){this.month=a-1}},M:{regex:"[1-9]|1[0-2]",apply:function(a){this.month=a-1}},dd:{regex:"[0-2][0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a}},d:{regex:"[1-2]?[0-9]{1}|3[0-1]{1}",apply:function(a){this.date=+a}},EEEE:{regex:b.DATETIME_FORMATS.DAY.join("|")},EEE:{regex:b.DATETIME_FORMATS.SHORTDAY.join("|")},HH:{regex:"(?:0|1)[0-9]|2[0-3]",apply:function(a){this.hours=+a}},hh:{regex:"0[0-9]|1[0-2]",apply:function(a){this.hours=+a}},H:{regex:"1?[0-9]|2[0-3]",apply:function(a){this.hours=+a}},h:{regex:"[0-9]|1[0-2]",apply:function(a){this.hours=+a}},mm:{regex:"[0-5][0-9]",apply:function(a){this.minutes=+a}},m:{regex:"[0-9]|[1-5][0-9]",apply:function(a){this.minutes=+a}},sss:{regex:"[0-9][0-9][0-9]",apply:function(a){this.milliseconds=+a}},ss:{regex:"[0-5][0-9]",apply:function(a){this.seconds=+a}},s:{regex:"[0-9]|[1-5][0-9]",apply:function(a){this.seconds=+a}},a:{regex:b.DATETIME_FORMATS.AMPMS.join("|"),apply:function(a){12===this.hours&&(this.hours=0),"PM"===a&&(this.hours+=12)}}}},this.init(),this.parse=function(c,g,i){if(!angular.isString(c)||!g)return c;g=b.DATETIME_FORMATS[g]||g,g=g.replace(h,"\\$&"),b.id!==f&&this.init(),this.parsers[g]||(this.parsers[g]=d(g));var j=this.parsers[g],k=j.regex,l=j.map,m=c.match(k);if(m&&m.length){var n,o;angular.isDate(i)&&!isNaN(i.getTime())?n={year:i.getFullYear(),month:i.getMonth(),date:i.getDate(),hours:i.getHours(),minutes:i.getMinutes(),seconds:i.getSeconds(),milliseconds:i.getMilliseconds()}:(i&&a.warn("dateparser:","baseDate is not a valid date"),n={year:1900,month:0,date:1,hours:0,minutes:0,seconds:0,milliseconds:0});for(var p=1,q=m.length;q>p;p++){var r=l[p-1];r.apply&&r.apply.call(n,m[p])}return e(n.year,n.month,n.date)&&(angular.isDate(i)&&!isNaN(i.getTime())?(o=new Date(i),o.setFullYear(n.year,n.month,n.date,n.hours,n.minutes,n.seconds,n.milliseconds||0)):o=new Date(n.year,n.month,n.date,n.hours,n.minutes,n.seconds,n.milliseconds||0)),o}}}]),angular.module("ui.bootstrap.dateparser").value("$dateParserSuppressWarning",!1).service("dateParser",["$log","$dateParserSuppressWarning","uibDateParser",function(a,b,c){b||a.warn("dateParser is now deprecated. Use uibDateParser instead."),angular.extend(this,c)}]),angular.module("ui.bootstrap.position",[]).factory("$uibPosition",["$document","$window",function(a,b){function c(a,c){return a.currentStyle?a.currentStyle[c]:b.getComputedStyle?b.getComputedStyle(a)[c]:a.style[c]}function d(a){return"static"===(c(a,"position")||"static")}var e=function(b){for(var c=a[0],e=b.offsetParent||c;e&&e!==c&&d(e);)e=e.offsetParent;return e||c};return{position:function(b){var c=this.offset(b),d={top:0,left:0},f=e(b[0]);f!=a[0]&&(d=this.offset(angular.element(f)),d.top+=f.clientTop-f.scrollTop,d.left+=f.clientLeft-f.scrollLeft);var g=b[0].getBoundingClientRect();return{width:g.width||b.prop("offsetWidth"),height:g.height||b.prop("offsetHeight"),top:c.top-d.top,left:c.left-d.left}},offset:function(c){var d=c[0].getBoundingClientRect();return{width:d.width||c.prop("offsetWidth"),height:d.height||c.prop("offsetHeight"),top:d.top+(b.pageYOffset||a[0].documentElement.scrollTop),left:d.left+(b.pageXOffset||a[0].documentElement.scrollLeft)}},positionElements:function(a,b,c,d){var e,f,g,h,i=c.split("-"),j=i[0],k=i[1]||"center";e=d?this.offset(a):this.position(a),f=b.prop("offsetWidth"),g=b.prop("offsetHeight");var l={center:function(){return e.left+e.width/2-f/2},left:function(){return e.left},right:function(){return e.left+e.width}},m={center:function(){return e.top+e.height/2-g/2},top:function(){return e.top},bottom:function(){return e.top+e.height}};switch(j){case"right":h={top:m[k](),left:l[j]()};break;case"left":h={top:m[k](),left:e.left-f};break;case"bottom":h={top:m[j](),left:l[k]()};break;default:h={top:e.top-g,left:l[k]()}}return h}}}]),angular.module("ui.bootstrap.position").value("$positionSuppressWarning",!1).service("$position",["$log","$positionSuppressWarning","$uibPosition",function(a,b,c){b||a.warn("$position is now deprecated. Use $uibPosition instead."),angular.extend(this,c)}]),angular.module("ui.bootstrap.datepicker",["ui.bootstrap.dateparser","ui.bootstrap.position"]).value("$datepickerSuppressError",!1).constant("uibDatepickerConfig",{formatDay:"dd",formatMonth:"MMMM",formatYear:"yyyy",formatDayHeader:"EEE",formatDayTitle:"MMMM yyyy",formatMonthTitle:"yyyy",datepickerMode:"day",minMode:"day",maxMode:"year",showWeeks:!0,startingDay:0,yearRange:20,minDate:null,maxDate:null,shortcutPropagation:!1}).controller("UibDatepickerController",["$scope","$attrs","$parse","$interpolate","$log","dateFilter","uibDatepickerConfig","$datepickerSuppressError",function(a,b,c,d,e,f,g,h){var i=this,j={$setViewValue:angular.noop};this.modes=["day","month","year"],angular.forEach(["formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","showWeeks","startingDay","yearRange","shortcutPropagation"],function(c,e){i[c]=angular.isDefined(b[c])?6>e?d(b[c])(a.$parent):a.$parent.$eval(b[c]):g[c]}),angular.forEach(["minDate","maxDate"],function(d){b[d]?a.$parent.$watch(c(b[d]),function(a){i[d]=a?new Date(a):null,i.refreshView()}):i[d]=g[d]?new Date(g[d]):null}),angular.forEach(["minMode","maxMode"],function(d){b[d]?a.$parent.$watch(c(b[d]),function(c){i[d]=angular.isDefined(c)?c:b[d],a[d]=i[d],("minMode"==d&&i.modes.indexOf(a.datepickerMode)<i.modes.indexOf(i[d])||"maxMode"==d&&i.modes.indexOf(a.datepickerMode)>i.modes.indexOf(i[d]))&&(a.datepickerMode=i[d])}):(i[d]=g[d]||null,a[d]=i[d])}),a.datepickerMode=a.datepickerMode||g.datepickerMode,a.uniqueId="datepicker-"+a.$id+"-"+Math.floor(1e4*Math.random()),angular.isDefined(b.initDate)?(this.activeDate=a.$parent.$eval(b.initDate)||new Date,a.$parent.$watch(b.initDate,function(a){a&&(j.$isEmpty(j.$modelValue)||j.$invalid)&&(i.activeDate=a,i.refreshView())})):this.activeDate=new Date,a.isActive=function(b){return 0===i.compare(b.date,i.activeDate)?(a.activeDateId=b.uid,!0):!1},this.init=function(a){j=a,j.$render=function(){i.render()}},this.render=function(){if(j.$viewValue){var a=new Date(j.$viewValue),b=!isNaN(a);b?this.activeDate=a:h||e.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')}this.refreshView()},this.refreshView=function(){if(this.element){this._refreshView();var a=j.$viewValue?new Date(j.$viewValue):null;j.$setValidity("dateDisabled",!a||this.element&&!this.isDisabled(a))}},this.createDateObject=function(a,b){var c=j.$viewValue?new Date(j.$viewValue):null;return{date:a,label:f(a,b),selected:c&&0===this.compare(a,c),disabled:this.isDisabled(a),current:0===this.compare(a,new Date),customClass:this.customClass(a)}},this.isDisabled=function(c){return this.minDate&&this.compare(c,this.minDate)<0||this.maxDate&&this.compare(c,this.maxDate)>0||b.dateDisabled&&a.dateDisabled({date:c,mode:a.datepickerMode})},this.customClass=function(b){return a.customClass({date:b,mode:a.datepickerMode})},this.split=function(a,b){for(var c=[];a.length>0;)c.push(a.splice(0,b));return c},a.select=function(b){if(a.datepickerMode===i.minMode){var c=j.$viewValue?new Date(j.$viewValue):new Date(0,0,0,0,0,0,0);c.setFullYear(b.getFullYear(),b.getMonth(),b.getDate()),j.$setViewValue(c),j.$render()}else i.activeDate=b,a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)-1]},a.move=function(a){var b=i.activeDate.getFullYear()+a*(i.step.years||0),c=i.activeDate.getMonth()+a*(i.step.months||0);i.activeDate.setFullYear(b,c,1),i.refreshView()},a.toggleMode=function(b){b=b||1,a.datepickerMode===i.maxMode&&1===b||a.datepickerMode===i.minMode&&-1===b||(a.datepickerMode=i.modes[i.modes.indexOf(a.datepickerMode)+b])},a.keys={13:"enter",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down"};var k=function(){i.element[0].focus()};a.$on("uib:datepicker.focus",k),a.keydown=function(b){var c=a.keys[b.which];if(c&&!b.shiftKey&&!b.altKey)if(b.preventDefault(),i.shortcutPropagation||b.stopPropagation(),"enter"===c||"space"===c){if(i.isDisabled(i.activeDate))return;a.select(i.activeDate)}else!b.ctrlKey||"up"!==c&&"down"!==c?(i.handleKeyDown(c,b),i.refreshView()):a.toggleMode("up"===c?1:-1)}}]).controller("UibDaypickerController",["$scope","$element","dateFilter",function(a,b,c){function d(a,b){return 1!==b||a%4!==0||a%100===0&&a%400!==0?f[b]:29}function e(a){var b=new Date(a);b.setDate(b.getDate()+4-(b.getDay()||7));var c=b.getTime();return b.setMonth(0),b.setDate(1),Math.floor(Math.round((c-b)/864e5)/7)+1}var f=[31,28,31,30,31,30,31,31,30,31,30,31];this.step={months:1},this.element=b,this.init=function(b){angular.extend(b,this),a.showWeeks=b.showWeeks,b.refreshView()},this.getDates=function(a,b){for(var c,d=new Array(b),e=new Date(a),f=0;b>f;)c=new Date(e),d[f++]=c,e.setDate(e.getDate()+1);return d},this._refreshView=function(){var b=this.activeDate.getFullYear(),d=this.activeDate.getMonth(),f=new Date(this.activeDate);f.setFullYear(b,d,1);var g=this.startingDay-f.getDay(),h=g>0?7-g:-g,i=new Date(f);h>0&&i.setDate(-h+1);for(var j=this.getDates(i,42),k=0;42>k;k++)j[k]=angular.extend(this.createDateObject(j[k],this.formatDay),{secondary:j[k].getMonth()!==d,uid:a.uniqueId+"-"+k});a.labels=new Array(7);for(var l=0;7>l;l++)a.labels[l]={abbr:c(j[l].date,this.formatDayHeader),full:c(j[l].date,"EEEE")};if(a.title=c(this.activeDate,this.formatDayTitle),a.rows=this.split(j,7),a.showWeeks){a.weekNumbers=[];for(var m=(11-this.startingDay)%7,n=a.rows.length,o=0;n>o;o++)a.weekNumbers.push(e(a.rows[o][m].date))}},this.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth(),a.getDate())-new Date(b.getFullYear(),b.getMonth(),b.getDate())},this.handleKeyDown=function(a,b){var c=this.activeDate.getDate();if("left"===a)c-=1;else if("up"===a)c-=7;else if("right"===a)c+=1;else if("down"===a)c+=7;else if("pageup"===a||"pagedown"===a){var e=this.activeDate.getMonth()+("pageup"===a?-1:1);this.activeDate.setMonth(e,1),c=Math.min(d(this.activeDate.getFullYear(),this.activeDate.getMonth()),c)}else"home"===a?c=1:"end"===a&&(c=d(this.activeDate.getFullYear(),this.activeDate.getMonth()));this.activeDate.setDate(c)}}]).controller("UibMonthpickerController",["$scope","$element","dateFilter",function(a,b,c){this.step={years:1},this.element=b,this.init=function(a){angular.extend(a,this),a.refreshView()},this._refreshView=function(){for(var b,d=new Array(12),e=this.activeDate.getFullYear(),f=0;12>f;f++)b=new Date(this.activeDate),b.setFullYear(e,f,1),d[f]=angular.extend(this.createDateObject(b,this.formatMonth),{uid:a.uniqueId+"-"+f});a.title=c(this.activeDate,this.formatMonthTitle),a.rows=this.split(d,3)},this.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth())-new Date(b.getFullYear(),b.getMonth())},this.handleKeyDown=function(a,b){var c=this.activeDate.getMonth();if("left"===a)c-=1;else if("up"===a)c-=3;else if("right"===a)c+=1;else if("down"===a)c+=3;else if("pageup"===a||"pagedown"===a){var d=this.activeDate.getFullYear()+("pageup"===a?-1:1);this.activeDate.setFullYear(d)}else"home"===a?c=0:"end"===a&&(c=11);this.activeDate.setMonth(c)}}]).controller("UibYearpickerController",["$scope","$element","dateFilter",function(a,b,c){function d(a){return parseInt((a-1)/e,10)*e+1}var e;this.element=b,this.yearpickerInit=function(){e=this.yearRange,this.step={years:e}},this._refreshView=function(){for(var b,c=new Array(e),f=0,g=d(this.activeDate.getFullYear());e>f;f++)b=new Date(this.activeDate),b.setFullYear(g+f,0,1),c[f]=angular.extend(this.createDateObject(b,this.formatYear),{uid:a.uniqueId+"-"+f});a.title=[c[0].label,c[e-1].label].join(" - "),a.rows=this.split(c,5)},this.compare=function(a,b){return a.getFullYear()-b.getFullYear()},this.handleKeyDown=function(a,b){var c=this.activeDate.getFullYear();"left"===a?c-=1:"up"===a?c-=5:"right"===a?c+=1:"down"===a?c+=5:"pageup"===a||"pagedown"===a?c+=("pageup"===a?-1:1)*this.step.years:"home"===a?c=d(this.activeDate.getFullYear()):"end"===a&&(c=d(this.activeDate.getFullYear())+e-1),this.activeDate.setFullYear(c)}}]).directive("uibDatepicker",function(){return{replace:!0,templateUrl:function(a,b){return b.templateUrl||"template/datepicker/datepicker.html"},scope:{datepickerMode:"=?",dateDisabled:"&",customClass:"&",shortcutPropagation:"&?"},require:["uibDatepicker","^ngModel"],controller:"UibDatepickerController",controllerAs:"datepicker",link:function(a,b,c,d){var e=d[0],f=d[1];e.init(f)}}}).directive("uibDaypicker",function(){return{replace:!0,templateUrl:function(a,b){return b.templateUrl||"template/datepicker/day.html"},require:["^?uibDatepicker","uibDaypicker","^?datepicker"],controller:"UibDaypickerController",link:function(a,b,c,d){var e=d[0]||d[2],f=d[1];f.init(e)}}}).directive("uibMonthpicker",function(){return{replace:!0,templateUrl:function(a,b){return b.templateUrl||"template/datepicker/month.html"},require:["^?uibDatepicker","uibMonthpicker","^?datepicker"],controller:"UibMonthpickerController",link:function(a,b,c,d){var e=d[0]||d[2],f=d[1];f.init(e)}}}).directive("uibYearpicker",function(){return{replace:!0,templateUrl:function(a,b){return b.templateUrl||"template/datepicker/year.html"},require:["^?uibDatepicker","uibYearpicker","^?datepicker"],controller:"UibYearpickerController",link:function(a,b,c,d){var e=d[0]||d[2];angular.extend(e,d[1]),e.yearpickerInit(),e.refreshView()}}}).constant("uibDatepickerPopupConfig",{datepickerPopup:"yyyy-MM-dd",datepickerPopupTemplateUrl:"template/datepicker/popup.html",datepickerTemplateUrl:"template/datepicker/datepicker.html",html5Types:{date:"yyyy-MM-dd","datetime-local":"yyyy-MM-ddTHH:mm:ss.sss",month:"yyyy-MM"},currentText:"Today",clearText:"Clear",closeText:"Done",closeOnDateSelection:!0,appendToBody:!1,showButtonBar:!0,onOpenFocus:!0}).controller("UibDatepickerPopupController",["$scope","$element","$attrs","$compile","$parse","$document","$rootScope","$uibPosition","dateFilter","uibDateParser","uibDatepickerPopupConfig","$timeout",function(a,b,c,d,e,f,g,h,i,j,k,l){function m(a){return a.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()})}function n(b){angular.isNumber(b)&&(b=new Date(b));{if(!b)return null;if(angular.isDate(b)&&!isNaN(b))return b;if(angular.isString(b)){var c=j.parse(b,r,a.date);return isNaN(c)?void 0:c}}}function o(a,b){var d=a||b;if(!c.ngRequired&&!d)return!0;if(angular.isNumber(d)&&(d=new Date(d)),d){if(angular.isDate(d)&&!isNaN(d))return!0;if(angular.isString(d)){var e=j.parse(d,r);return!isNaN(e)}return!1}return!0}function p(c){var d=A[0],e=b[0].contains(c.target),f=void 0!==d.contains&&d.contains(c.target);!a.isOpen||e||f||a.$apply(function(){a.isOpen=!1})}function q(c){27===c.which&&a.isOpen?(c.preventDefault(),c.stopPropagation(),a.$apply(function(){a.isOpen=!1}),b[0].focus()):40!==c.which||a.isOpen||(c.preventDefault(),c.stopPropagation(),a.$apply(function(){a.isOpen=!0}))}var r,s,t,u,v,w,x,y,z,A,B={},C=!1;a.watchData={},this.init=function(h){if(z=h,s=angular.isDefined(c.closeOnDateSelection)?a.$parent.$eval(c.closeOnDateSelection):k.closeOnDateSelection,t=angular.isDefined(c.datepickerAppendToBody)?a.$parent.$eval(c.datepickerAppendToBody):k.appendToBody,u=angular.isDefined(c.onOpenFocus)?a.$parent.$eval(c.onOpenFocus):k.onOpenFocus,v=angular.isDefined(c.datepickerPopupTemplateUrl)?c.datepickerPopupTemplateUrl:k.datepickerPopupTemplateUrl,w=angular.isDefined(c.datepickerTemplateUrl)?c.datepickerTemplateUrl:k.datepickerTemplateUrl,a.showButtonBar=angular.isDefined(c.showButtonBar)?a.$parent.$eval(c.showButtonBar):k.showButtonBar,k.html5Types[c.type]?(r=k.html5Types[c.type],C=!0):(r=c.datepickerPopup||c.uibDatepickerPopup||k.datepickerPopup,c.$observe("uibDatepickerPopup",function(a,b){var c=a||k.datepickerPopup;if(c!==r&&(r=c,z.$modelValue=null,!r))throw new Error("uibDatepickerPopup must have a date format specified.")})),!r)throw new Error("uibDatepickerPopup must have a date format specified.");if(C&&c.datepickerPopup)throw new Error("HTML5 date input types do not support custom formats.");if(x=angular.element("<div uib-datepicker-popup-wrap><div uib-datepicker></div></div>"),x.attr({"ng-model":"date","ng-change":"dateSelection(date)","template-url":v}),y=angular.element(x.children()[0]),y.attr("template-url",w),C&&"month"===c.type&&(y.attr("datepicker-mode",'"month"'),y.attr("min-mode","month")),c.datepickerOptions){var l=a.$parent.$eval(c.datepickerOptions);l&&l.initDate&&(a.initDate=l.initDate,y.attr("init-date","initDate"),delete l.initDate),angular.forEach(l,function(a,b){y.attr(m(b),a)})}angular.forEach(["minMode","maxMode","minDate","maxDate","datepickerMode","initDate","shortcutPropagation"],function(b){if(c[b]){var d=e(c[b]);if(a.$parent.$watch(d,function(c){a.watchData[b]=c,("minDate"===b||"maxDate"===b)&&(B[b]=new Date(c))}),y.attr(m(b),"watchData."+b),"datepickerMode"===b){var f=d.assign;a.$watch("watchData."+b,function(b,c){angular.isFunction(f)&&b!==c&&f(a.$parent,b)})}}}),c.dateDisabled&&y.attr("date-disabled","dateDisabled({ date: date, mode: mode })"),c.showWeeks&&y.attr("show-weeks",c.showWeeks),c.customClass&&y.attr("custom-class","customClass({ date: date, mode: mode })"),C?z.$formatters.push(function(b){return a.date=b,b}):(z.$$parserName="date",z.$validators.date=o,z.$parsers.unshift(n),z.$formatters.push(function(b){return a.date=b,z.$isEmpty(b)?b:i(b,r)})),z.$viewChangeListeners.push(function(){a.date=j.parse(z.$viewValue,r,a.date)}),b.bind("keydown",q),A=d(x)(a),x.remove(),t?f.find("body").append(A):b.after(A),a.$on("$destroy",function(){a.isOpen===!0&&(g.$$phase||a.$apply(function(){a.isOpen=!1})),A.remove(),b.unbind("keydown",q),f.unbind("click",p)})},a.getText=function(b){return a[b+"Text"]||k[b+"Text"]},a.isDisabled=function(b){return"today"===b&&(b=new Date),a.watchData.minDate&&a.compare(b,B.minDate)<0||a.watchData.maxDate&&a.compare(b,B.maxDate)>0},a.compare=function(a,b){return new Date(a.getFullYear(),a.getMonth(),a.getDate())-new Date(b.getFullYear(),b.getMonth(),b.getDate())},a.dateSelection=function(c){angular.isDefined(c)&&(a.date=c);var d=a.date?i(a.date,r):null;b.val(d),z.$setViewValue(d),s&&(a.isOpen=!1,b[0].focus())},a.keydown=function(c){27===c.which&&(a.isOpen=!1,b[0].focus())},a.select=function(b){if("today"===b){var c=new Date;angular.isDate(a.date)?(b=new Date(a.date),b.setFullYear(c.getFullYear(),c.getMonth(),c.getDate())):b=new Date(c.setHours(0,0,0,0))}a.dateSelection(b)},a.close=function(){a.isOpen=!1,b[0].focus()},a.$watch("isOpen",function(c){c?(a.position=t?h.offset(b):h.position(b),a.position.top=a.position.top+b.prop("offsetHeight"),l(function(){u&&a.$broadcast("uib:datepicker.focus"),f.bind("click",p)},0,!1)):f.unbind("click",p)})}]).directive("uibDatepickerPopup",function(){return{require:["ngModel","uibDatepickerPopup"],controller:"UibDatepickerPopupController",scope:{isOpen:"=?",currentText:"@",clearText:"@",closeText:"@",dateDisabled:"&",customClass:"&"},link:function(a,b,c,d){var e=d[0],f=d[1];f.init(e)}}}).directive("uibDatepickerPopupWrap",function(){return{replace:!0,transclude:!0,templateUrl:function(a,b){return b.templateUrl||"template/datepicker/popup.html"}}}),angular.module("ui.bootstrap.datepicker").value("$datepickerSuppressWarning",!1).controller("DatepickerController",["$scope","$attrs","$parse","$interpolate","$log","dateFilter","uibDatepickerConfig","$datepickerSuppressError","$datepickerSuppressWarning",function(a,b,c,d,e,f,g,h,i){i||e.warn("DatepickerController is now deprecated. Use UibDatepickerController instead.");var j=this,k={$setViewValue:angular.noop};this.modes=["day","month","year"],angular.forEach(["formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","formatMonthTitle","showWeeks","startingDay","yearRange","shortcutPropagation"],function(c,e){j[c]=angular.isDefined(b[c])?6>e?d(b[c])(a.$parent):a.$parent.$eval(b[c]):g[c]}),angular.forEach(["minDate","maxDate"],function(d){b[d]?a.$parent.$watch(c(b[d]),function(a){j[d]=a?new Date(a):null,j.refreshView()}):j[d]=g[d]?new Date(g[d]):null}),angular.forEach(["minMode","maxMode"],function(d){b[d]?a.$parent.$watch(c(b[d]),function(c){j[d]=angular.isDefined(c)?c:b[d],a[d]=j[d],("minMode"==d&&j.modes.indexOf(a.datepickerMode)<j.modes.indexOf(j[d])||"maxMode"==d&&j.modes.indexOf(a.datepickerMode)>j.modes.indexOf(j[d]))&&(a.datepickerMode=j[d])}):(j[d]=g[d]||null,a[d]=j[d])}),a.datepickerMode=a.datepickerMode||g.datepickerMode,a.uniqueId="datepicker-"+a.$id+"-"+Math.floor(1e4*Math.random()),angular.isDefined(b.initDate)?(this.activeDate=a.$parent.$eval(b.initDate)||new Date,a.$parent.$watch(b.initDate,function(a){a&&(k.$isEmpty(k.$modelValue)||k.$invalid)&&(j.activeDate=a,j.refreshView())})):this.activeDate=new Date,a.isActive=function(b){return 0===j.compare(b.date,j.activeDate)?(a.activeDateId=b.uid,!0):!1},this.init=function(a){k=a,k.$render=function(){j.render()}},this.render=function(){if(k.$viewValue){var a=new Date(k.$viewValue),b=!isNaN(a);b?this.activeDate=a:h||e.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')}this.refreshView()},this.refreshView=function(){if(this.element){this._refreshView();var a=k.$viewValue?new Date(k.$viewValue):null;k.$setValidity("dateDisabled",!a||this.element&&!this.isDisabled(a))}},this.createDateObject=function(a,b){var c=k.$viewValue?new Date(k.$viewValue):null;return{date:a,label:f(a,b),selected:c&&0===this.compare(a,c),disabled:this.isDisabled(a),current:0===this.compare(a,new Date),customClass:this.customClass(a)}},this.isDisabled=function(c){return this.minDate&&this.compare(c,this.minDate)<0||this.maxDate&&this.compare(c,this.maxDate)>0||b.dateDisabled&&a.dateDisabled({date:c,mode:a.datepickerMode})},this.customClass=function(b){return a.customClass({date:b,mode:a.datepickerMode})},this.split=function(a,b){for(var c=[];a.length>0;)c.push(a.splice(0,b));return c},this.fixTimeZone=function(a){var b=a.getHours();a.setHours(23===b?b+2:0)},a.select=function(b){if(a.datepickerMode===j.minMode){var c=k.$viewValue?new Date(k.$viewValue):new Date(0,0,0,0,0,0,0);c.setFullYear(b.getFullYear(),b.getMonth(),b.getDate()),k.$setViewValue(c),k.$render()}else j.activeDate=b,a.datepickerMode=j.modes[j.modes.indexOf(a.datepickerMode)-1]},a.move=function(a){var b=j.activeDate.getFullYear()+a*(j.step.years||0),c=j.activeDate.getMonth()+a*(j.step.months||0);j.activeDate.setFullYear(b,c,1),j.refreshView()},a.toggleMode=function(b){b=b||1,a.datepickerMode===j.maxMode&&1===b||a.datepickerMode===j.minMode&&-1===b||(a.datepickerMode=j.modes[j.modes.indexOf(a.datepickerMode)+b])},a.keys={13:"enter",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down"};var l=function(){j.element[0].focus()};a.$on("uib:datepicker.focus",l),a.keydown=function(b){var c=a.keys[b.which];if(c&&!b.shiftKey&&!b.altKey)if(b.preventDefault(),j.shortcutPropagation||b.stopPropagation(),"enter"===c||"space"===c){if(j.isDisabled(j.activeDate))return;a.select(j.activeDate)}else!b.ctrlKey||"up"!==c&&"down"!==c?(j.handleKeyDown(c,b),j.refreshView()):a.toggleMode("up"===c?1:-1)}}]).directive("datepicker",["$log","$datepickerSuppressWarning",function(a,b){return{replace:!0,templateUrl:function(a,b){return b.templateUrl||"template/datepicker/datepicker.html"},scope:{datepickerMode:"=?",dateDisabled:"&",customClass:"&",shortcutPropagation:"&?"},require:["datepicker","^ngModel"],controller:"DatepickerController",controllerAs:"datepicker",link:function(c,d,e,f){b||a.warn("datepicker is now deprecated. Use uib-datepicker instead.");var g=f[0],h=f[1];g.init(h)}}}]).directive("daypicker",["$log","$datepickerSuppressWarning",function(a,b){return{replace:!0,templateUrl:"template/datepicker/day.html",require:["^datepicker","daypicker"],controller:"UibDaypickerController",link:function(c,d,e,f){b||a.warn("daypicker is now deprecated. Use uib-daypicker instead.");var g=f[0],h=f[1];h.init(g)}}}]).directive("monthpicker",["$log","$datepickerSuppressWarning",function(a,b){return{replace:!0,templateUrl:"template/datepicker/month.html",require:["^datepicker","monthpicker"],controller:"UibMonthpickerController",link:function(c,d,e,f){b||a.warn("monthpicker is now deprecated. Use uib-monthpicker instead.");var g=f[0],h=f[1];h.init(g)}}}]).directive("yearpicker",["$log","$datepickerSuppressWarning",function(a,b){return{replace:!0,templateUrl:"template/datepicker/year.html",require:["^datepicker","yearpicker"],controller:"UibYearpickerController",link:function(c,d,e,f){b||a.warn("yearpicker is now deprecated. Use uib-yearpicker instead.");var g=f[0];angular.extend(g,f[1]),g.yearpickerInit(),g.refreshView()}}}]).directive("datepickerPopup",["$log","$datepickerSuppressWarning",function(a,b){return{require:["ngModel","datepickerPopup"],controller:"UibDatepickerPopupController",scope:{isOpen:"=?",currentText:"@",clearText:"@",closeText:"@",dateDisabled:"&",customClass:"&"},link:function(c,d,e,f){b||a.warn("datepicker-popup is now deprecated. Use uib-datepicker-popup instead.");var g=f[0],h=f[1];h.init(g)}}}]).directive("datepickerPopupWrap",["$log","$datepickerSuppressWarning",function(a,b){return{replace:!0,transclude:!0,templateUrl:function(a,b){return b.templateUrl||"template/datepicker/popup.html"},link:function(){b||a.warn("datepicker-popup-wrap is now deprecated. Use uib-datepicker-popup-wrap instead.")}}}]),angular.module("ui.bootstrap.dropdown",["ui.bootstrap.position"]).constant("uibDropdownConfig",{openClass:"open"}).service("uibDropdownService",["$document","$rootScope",function(a,b){var c=null;this.open=function(b){c||(a.bind("click",d),a.bind("keydown",e)),c&&c!==b&&(c.isOpen=!1),c=b},this.close=function(b){c===b&&(c=null,a.unbind("click",d),a.unbind("keydown",e))};var d=function(a){if(c&&(!a||"disabled"!==c.getAutoClose())){var d=c.getToggleElement();if(!(a&&d&&d[0].contains(a.target))){var e=c.getDropdownElement();a&&"outsideClick"===c.getAutoClose()&&e&&e[0].contains(a.target)||(c.isOpen=!1,b.$$phase||c.$apply())}}},e=function(a){27===a.which?(c.focusToggleElement(),d()):c.isKeynavEnabled()&&/(38|40)/.test(a.which)&&c.isOpen&&(a.preventDefault(),a.stopPropagation(),c.focusDropdownEntry(a.which))}}]).controller("UibDropdownController",["$scope","$element","$attrs","$parse","uibDropdownConfig","uibDropdownService","$animate","$uibPosition","$document","$compile","$templateRequest",function(a,b,c,d,e,f,g,h,i,j,k){var l,m,n=this,o=a.$new(),p=e.openClass,q=angular.noop,r=c.onToggle?d(c.onToggle):angular.noop,s=!1,t=!1;b.addClass("dropdown"),this.init=function(){c.isOpen&&(m=d(c.isOpen),q=m.assign,a.$watch(m,function(a){o.isOpen=!!a})),s=angular.isDefined(c.dropdownAppendToBody),t=angular.isDefined(c.uibKeyboardNav),s&&n.dropdownMenu&&(i.find("body").append(n.dropdownMenu),b.on("$destroy",function(){n.dropdownMenu.remove()}))},this.toggle=function(a){return o.isOpen=arguments.length?!!a:!o.isOpen},this.isOpen=function(){return o.isOpen},o.getToggleElement=function(){return n.toggleElement},o.getAutoClose=function(){return c.autoClose||"always"},o.getElement=function(){return b},o.isKeynavEnabled=function(){return t},o.focusDropdownEntry=function(a){var c=n.dropdownMenu?angular.element(n.dropdownMenu).find("a"):angular.element(b).find("ul").eq(0).find("a");switch(a){case 40:angular.isNumber(n.selectedOption)?n.selectedOption=n.selectedOption===c.length-1?n.selectedOption:n.selectedOption+1:n.selectedOption=0;
+break;case 38:angular.isNumber(n.selectedOption)?n.selectedOption=0===n.selectedOption?0:n.selectedOption-1:n.selectedOption=c.length-1}c[n.selectedOption].focus()},o.getDropdownElement=function(){return n.dropdownMenu},o.focusToggleElement=function(){n.toggleElement&&n.toggleElement[0].focus()},o.$watch("isOpen",function(c,d){if(s&&n.dropdownMenu){var e=h.positionElements(b,n.dropdownMenu,"bottom-left",!0),i={top:e.top+"px",display:c?"block":"none"},m=n.dropdownMenu.hasClass("dropdown-menu-right");m?(i.left="auto",i.right=window.innerWidth-(e.left+b.prop("offsetWidth"))+"px"):(i.left=e.left+"px",i.right="auto"),n.dropdownMenu.css(i)}if(g[c?"addClass":"removeClass"](b,p).then(function(){angular.isDefined(c)&&c!==d&&r(a,{open:!!c})}),c)n.dropdownMenuTemplateUrl&&k(n.dropdownMenuTemplateUrl).then(function(a){l=o.$new(),j(a.trim())(l,function(a){var b=a;n.dropdownMenu.replaceWith(b),n.dropdownMenu=b})}),o.focusToggleElement(),f.open(o);else{if(n.dropdownMenuTemplateUrl){l&&l.$destroy();var t=angular.element('<ul class="dropdown-menu"></ul>');n.dropdownMenu.replaceWith(t),n.dropdownMenu=t}f.close(o),n.selectedOption=null}angular.isFunction(q)&&q(a,c)}),a.$on("$locationChangeSuccess",function(){"disabled"!==o.getAutoClose()&&(o.isOpen=!1)});var u=a.$on("$destroy",function(){o.$destroy()});o.$on("$destroy",u)}]).directive("uibDropdown",function(){return{controller:"UibDropdownController",link:function(a,b,c,d){d.init()}}}).directive("uibDropdownMenu",function(){return{restrict:"AC",require:"?^uibDropdown",link:function(a,b,c,d){if(d&&!angular.isDefined(c.dropdownNested)){b.addClass("dropdown-menu");var e=c.templateUrl;e&&(d.dropdownMenuTemplateUrl=e),d.dropdownMenu||(d.dropdownMenu=b)}}}}).directive("uibKeyboardNav",function(){return{restrict:"A",require:"?^uibDropdown",link:function(a,b,c,d){b.bind("keydown",function(a){if(-1!==[38,40].indexOf(a.which)){a.preventDefault(),a.stopPropagation();var b=d.dropdownMenu.find("a");switch(a.which){case 40:angular.isNumber(d.selectedOption)?d.selectedOption=d.selectedOption===b.length-1?d.selectedOption:d.selectedOption+1:d.selectedOption=0;break;case 38:angular.isNumber(d.selectedOption)?d.selectedOption=0===d.selectedOption?0:d.selectedOption-1:d.selectedOption=b.length-1}b[d.selectedOption].focus()}})}}}).directive("uibDropdownToggle",function(){return{require:"?^uibDropdown",link:function(a,b,c,d){if(d){b.addClass("dropdown-toggle"),d.toggleElement=b;var e=function(e){e.preventDefault(),b.hasClass("disabled")||c.disabled||a.$apply(function(){d.toggle()})};b.bind("click",e),b.attr({"aria-haspopup":!0,"aria-expanded":!1}),a.$watch(d.isOpen,function(a){b.attr("aria-expanded",!!a)}),a.$on("$destroy",function(){b.unbind("click",e)})}}}}),angular.module("ui.bootstrap.dropdown").value("$dropdownSuppressWarning",!1).service("dropdownService",["$log","$dropdownSuppressWarning","uibDropdownService",function(a,b,c){b||a.warn("dropdownService is now deprecated. Use uibDropdownService instead."),angular.extend(this,c)}]).controller("DropdownController",["$scope","$element","$attrs","$parse","uibDropdownConfig","uibDropdownService","$animate","$uibPosition","$document","$compile","$templateRequest","$log","$dropdownSuppressWarning",function(a,b,c,d,e,f,g,h,i,j,k,l,m){m||l.warn("DropdownController is now deprecated. Use UibDropdownController instead.");var n,o,p=this,q=a.$new(),r=e.openClass,s=angular.noop,t=c.onToggle?d(c.onToggle):angular.noop,u=!1,v=!1;b.addClass("dropdown"),this.init=function(){c.isOpen&&(o=d(c.isOpen),s=o.assign,a.$watch(o,function(a){q.isOpen=!!a})),u=angular.isDefined(c.dropdownAppendToBody),v=angular.isDefined(c.uibKeyboardNav),u&&p.dropdownMenu&&(i.find("body").append(p.dropdownMenu),b.on("$destroy",function(){p.dropdownMenu.remove()}))},this.toggle=function(a){return q.isOpen=arguments.length?!!a:!q.isOpen},this.isOpen=function(){return q.isOpen},q.getToggleElement=function(){return p.toggleElement},q.getAutoClose=function(){return c.autoClose||"always"},q.getElement=function(){return b},q.isKeynavEnabled=function(){return v},q.focusDropdownEntry=function(a){var c=p.dropdownMenu?angular.element(p.dropdownMenu).find("a"):angular.element(b).find("ul").eq(0).find("a");switch(a){case 40:angular.isNumber(p.selectedOption)?p.selectedOption=p.selectedOption===c.length-1?p.selectedOption:p.selectedOption+1:p.selectedOption=0;break;case 38:angular.isNumber(p.selectedOption)?p.selectedOption=0===p.selectedOption?0:p.selectedOption-1:p.selectedOption=c.length-1}c[p.selectedOption].focus()},q.getDropdownElement=function(){return p.dropdownMenu},q.focusToggleElement=function(){p.toggleElement&&p.toggleElement[0].focus()},q.$watch("isOpen",function(c,d){if(u&&p.dropdownMenu){var e=h.positionElements(b,p.dropdownMenu,"bottom-left",!0),i={top:e.top+"px",display:c?"block":"none"},l=p.dropdownMenu.hasClass("dropdown-menu-right");l?(i.left="auto",i.right=window.innerWidth-(e.left+b.prop("offsetWidth"))+"px"):(i.left=e.left+"px",i.right="auto"),p.dropdownMenu.css(i)}if(g[c?"addClass":"removeClass"](b,r).then(function(){angular.isDefined(c)&&c!==d&&t(a,{open:!!c})}),c)p.dropdownMenuTemplateUrl&&k(p.dropdownMenuTemplateUrl).then(function(a){n=q.$new(),j(a.trim())(n,function(a){var b=a;p.dropdownMenu.replaceWith(b),p.dropdownMenu=b})}),q.focusToggleElement(),f.open(q);else{if(p.dropdownMenuTemplateUrl){n&&n.$destroy();var m=angular.element('<ul class="dropdown-menu"></ul>');p.dropdownMenu.replaceWith(m),p.dropdownMenu=m}f.close(q),p.selectedOption=null}angular.isFunction(s)&&s(a,c)}),a.$on("$locationChangeSuccess",function(){"disabled"!==q.getAutoClose()&&(q.isOpen=!1)});var w=a.$on("$destroy",function(){q.$destroy()});q.$on("$destroy",w)}]).directive("dropdown",["$log","$dropdownSuppressWarning",function(a,b){return{controller:"DropdownController",link:function(c,d,e,f){b||a.warn("dropdown is now deprecated. Use uib-dropdown instead."),f.init()}}}]).directive("dropdownMenu",["$log","$dropdownSuppressWarning",function(a,b){return{restrict:"AC",require:"?^dropdown",link:function(c,d,e,f){if(f&&!angular.isDefined(e.dropdownNested)){b||a.warn("dropdown-menu is now deprecated. Use uib-dropdown-menu instead."),d.addClass("dropdown-menu");var g=e.templateUrl;g&&(f.dropdownMenuTemplateUrl=g),f.dropdownMenu||(f.dropdownMenu=d)}}}}]).directive("keyboardNav",["$log","$dropdownSuppressWarning",function(a,b){return{restrict:"A",require:"?^dropdown",link:function(c,d,e,f){b||a.warn("keyboard-nav is now deprecated. Use uib-keyboard-nav instead."),d.bind("keydown",function(a){if(-1!==[38,40].indexOf(a.which)){a.preventDefault(),a.stopPropagation();var b=f.dropdownMenu.find("a");switch(a.which){case 40:angular.isNumber(f.selectedOption)?f.selectedOption=f.selectedOption===b.length-1?f.selectedOption:f.selectedOption+1:f.selectedOption=0;break;case 38:angular.isNumber(f.selectedOption)?f.selectedOption=0===f.selectedOption?0:f.selectedOption-1:f.selectedOption=b.length-1}b[f.selectedOption].focus()}})}}}]).directive("dropdownToggle",["$log","$dropdownSuppressWarning",function(a,b){return{require:"?^dropdown",link:function(c,d,e,f){if(b||a.warn("dropdown-toggle is now deprecated. Use uib-dropdown-toggle instead."),f){d.addClass("dropdown-toggle"),f.toggleElement=d;var g=function(a){a.preventDefault(),d.hasClass("disabled")||e.disabled||c.$apply(function(){f.toggle()})};d.bind("click",g),d.attr({"aria-haspopup":!0,"aria-expanded":!1}),c.$watch(f.isOpen,function(a){d.attr("aria-expanded",!!a)}),c.$on("$destroy",function(){d.unbind("click",g)})}}}}]),angular.module("ui.bootstrap.stackedMap",[]).factory("$$stackedMap",function(){return{createNew:function(){var a=[];return{add:function(b,c){a.push({key:b,value:c})},get:function(b){for(var c=0;c<a.length;c++)if(b==a[c].key)return a[c]},keys:function(){for(var b=[],c=0;c<a.length;c++)b.push(a[c].key);return b},top:function(){return a[a.length-1]},remove:function(b){for(var c=-1,d=0;d<a.length;d++)if(b==a[d].key){c=d;break}return a.splice(c,1)[0]},removeTop:function(){return a.splice(a.length-1,1)[0]},length:function(){return a.length}}}}}),angular.module("ui.bootstrap.modal",["ui.bootstrap.stackedMap"]).factory("$$multiMap",function(){return{createNew:function(){var a={};return{entries:function(){return Object.keys(a).map(function(b){return{key:b,value:a[b]}})},get:function(b){return a[b]},hasKey:function(b){return!!a[b]},keys:function(){return Object.keys(a)},put:function(b,c){a[b]||(a[b]=[]),a[b].push(c)},remove:function(b,c){var d=a[b];if(d){var e=d.indexOf(c);-1!==e&&d.splice(e,1),d.length||delete a[b]}}}}}}).directive("uibModalBackdrop",["$animate","$injector","$uibModalStack",function(a,b,c){function d(b,d,f){d.addClass("modal-backdrop"),f.modalInClass&&(e?e(d,{addClass:f.modalInClass}).start():a.addClass(d,f.modalInClass),b.$on(c.NOW_CLOSING_EVENT,function(b,c){var g=c();e?e(d,{removeClass:f.modalInClass}).start().then(g):a.removeClass(d,f.modalInClass).then(g)}))}var e=null;return b.has("$animateCss")&&(e=b.get("$animateCss")),{replace:!0,templateUrl:"template/modal/backdrop.html",compile:function(a,b){return a.addClass(b.backdropClass),d}}}]).directive("uibModalWindow",["$uibModalStack","$q","$animate","$injector",function(a,b,c,d){var e=null;return d.has("$animateCss")&&(e=d.get("$animateCss")),{scope:{index:"@"},replace:!0,transclude:!0,templateUrl:function(a,b){return b.templateUrl||"template/modal/window.html"},link:function(d,f,g){f.addClass(g.windowClass||""),f.addClass(g.windowTopClass||""),d.size=g.size,d.close=function(b){var c=a.getTop();c&&c.value.backdrop&&"static"!==c.value.backdrop&&b.target===b.currentTarget&&(b.preventDefault(),b.stopPropagation(),a.dismiss(c.key,"backdrop click"))},f.on("click",d.close),d.$isRendered=!0;var h=b.defer();g.$observe("modalRender",function(a){"true"==a&&h.resolve()}),h.promise.then(function(){var h=null;g.modalInClass&&(h=e?e(f,{addClass:g.modalInClass}).start():c.addClass(f,g.modalInClass),d.$on(a.NOW_CLOSING_EVENT,function(a,b){var d=b();e?e(f,{removeClass:g.modalInClass}).start().then(d):c.removeClass(f,g.modalInClass).then(d)})),b.when(h).then(function(){var a=f[0].querySelector("[autofocus]");a?a.focus():f[0].focus()});var i=a.getTop();i&&a.modalRendered(i.key)})}}}]).directive("uibModalAnimationClass",function(){return{compile:function(a,b){b.modalAnimation&&a.addClass(b.uibModalAnimationClass)}}}).directive("uibModalTransclude",function(){return{link:function(a,b,c,d,e){e(a.$parent,function(a){b.empty(),b.append(a)})}}}).factory("$uibModalStack",["$animate","$timeout","$document","$compile","$rootScope","$q","$injector","$$multiMap","$$stackedMap",function(a,b,c,d,e,f,g,h,i){function j(){for(var a=-1,b=u.keys(),c=0;c<b.length;c++)u.get(b[c]).value.backdrop&&(a=c);return a}function k(a,b){var d=c.find("body").eq(0),e=u.get(a).value;u.remove(a),n(e.modalDomEl,e.modalScope,function(){var b=e.openedClass||t;v.remove(b,a),d.toggleClass(b,v.hasKey(b)),l(!0)}),m(),b&&b.focus?b.focus():d.focus()}function l(a){var b;u.length()>0&&(b=u.top().value,b.modalDomEl.toggleClass(b.windowTopClass||"",a))}function m(){if(q&&-1==j()){var a=r;n(q,r,function(){a=null}),q=void 0,r=void 0}}function n(b,c,d){function e(){e.done||(e.done=!0,p?p(b,{event:"leave"}).start().then(function(){b.remove()}):a.leave(b),c.$destroy(),d&&d())}var g,h=null,i=function(){return g||(g=f.defer(),h=g.promise),function(){g.resolve()}};return c.$broadcast(w.NOW_CLOSING_EVENT,i),f.when(h).then(e)}function o(a,b,c){return!a.value.modalScope.$broadcast("modal.closing",b,c).defaultPrevented}var p=null;g.has("$animateCss")&&(p=g.get("$animateCss"));var q,r,s,t="modal-open",u=i.createNew(),v=h.createNew(),w={NOW_CLOSING_EVENT:"modal.stack.now-closing"},x=0,y="a[href], area[href], input:not([disabled]), button:not([disabled]),select:not([disabled]), textarea:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable=true]";return e.$watch(j,function(a){r&&(r.index=a)}),c.bind("keydown",function(a){if(a.isDefaultPrevented())return a;var b=u.top();if(b&&b.value.keyboard)switch(a.which){case 27:a.preventDefault(),e.$apply(function(){w.dismiss(b.key,"escape key press")});break;case 9:w.loadFocusElementList(b);var c=!1;a.shiftKey?w.isFocusInFirstItem(a)&&(c=w.focusLastFocusableElement()):w.isFocusInLastItem(a)&&(c=w.focusFirstFocusableElement()),c&&(a.preventDefault(),a.stopPropagation())}}),w.open=function(a,b){var f=c[0].activeElement,g=b.openedClass||t;l(!1),u.add(a,{deferred:b.deferred,renderDeferred:b.renderDeferred,modalScope:b.scope,backdrop:b.backdrop,keyboard:b.keyboard,openedClass:b.openedClass,windowTopClass:b.windowTopClass}),v.put(g,a);var h=c.find("body").eq(0),i=j();if(i>=0&&!q){r=e.$new(!0),r.index=i;var k=angular.element('<div uib-modal-backdrop="modal-backdrop"></div>');k.attr("backdrop-class",b.backdropClass),b.animation&&k.attr("modal-animation","true"),q=d(k)(r),h.append(q)}var m=angular.element('<div uib-modal-window="modal-window"></div>');m.attr({"template-url":b.windowTemplateUrl,"window-class":b.windowClass,"window-top-class":b.windowTopClass,size:b.size,index:u.length()-1,animate:"animate"}).html(b.content),b.animation&&m.attr("modal-animation","true");var n=d(m)(b.scope);u.top().value.modalDomEl=n,u.top().value.modalOpener=f,h.append(n),h.addClass(g),w.clearFocusListCache()},w.close=function(a,b){var c=u.get(a);return c&&o(c,b,!0)?(c.value.modalScope.$$uibDestructionScheduled=!0,c.value.deferred.resolve(b),k(a,c.value.modalOpener),!0):!c},w.dismiss=function(a,b){var c=u.get(a);return c&&o(c,b,!1)?(c.value.modalScope.$$uibDestructionScheduled=!0,c.value.deferred.reject(b),k(a,c.value.modalOpener),!0):!c},w.dismissAll=function(a){for(var b=this.getTop();b&&this.dismiss(b.key,a);)b=this.getTop()},w.getTop=function(){return u.top()},w.modalRendered=function(a){var b=u.get(a);b&&b.value.renderDeferred.resolve()},w.focusFirstFocusableElement=function(){return s.length>0?(s[0].focus(),!0):!1},w.focusLastFocusableElement=function(){return s.length>0?(s[s.length-1].focus(),!0):!1},w.isFocusInFirstItem=function(a){return s.length>0?(a.target||a.srcElement)==s[0]:!1},w.isFocusInLastItem=function(a){return s.length>0?(a.target||a.srcElement)==s[s.length-1]:!1},w.clearFocusListCache=function(){s=[],x=0},w.loadFocusElementList=function(a){if((void 0===s||!s.length)&&a){var b=a.value.modalDomEl;b&&b.length&&(s=b[0].querySelectorAll(y))}},w}]).provider("$uibModal",function(){var a={options:{animation:!0,backdrop:!0,keyboard:!0},$get:["$injector","$rootScope","$q","$templateRequest","$controller","$uibModalStack","$modalSuppressWarning","$log",function(b,c,d,e,f,g,h,i){function j(a){return a.template?d.when(a.template):e(angular.isFunction(a.templateUrl)?a.templateUrl():a.templateUrl)}function k(a){var c=[];return angular.forEach(a,function(a){angular.isFunction(a)||angular.isArray(a)?c.push(d.when(b.invoke(a))):angular.isString(a)?c.push(d.when(b.get(a))):c.push(d.when(a))}),c}var l={},m=null;return l.getPromiseChain=function(){return m},l.open=function(b){function e(){return r}var l=d.defer(),n=d.defer(),o=d.defer(),p={result:l.promise,opened:n.promise,rendered:o.promise,close:function(a){return g.close(p,a)},dismiss:function(a){return g.dismiss(p,a)}};if(b=angular.extend({},a.options,b),b.resolve=b.resolve||{},!b.template&&!b.templateUrl)throw new Error("One of template or templateUrl options is required.");var q,r=d.all([j(b)].concat(k(b.resolve)));return q=m=d.all([m]).then(e,e).then(function(a){var d=(b.scope||c).$new();d.$close=p.close,d.$dismiss=p.dismiss,d.$on("$destroy",function(){d.$$uibDestructionScheduled||d.$dismiss("$uibUnscheduledDestruction")});var e,j={},k=1;b.controller&&(j.$scope=d,j.$uibModalInstance=p,Object.defineProperty(j,"$modalInstance",{get:function(){return h||i.warn("$modalInstance is now deprecated. Use $uibModalInstance instead."),p}}),angular.forEach(b.resolve,function(b,c){j[c]=a[k++]}),e=f(b.controller,j),b.controllerAs&&(b.bindToController&&angular.extend(e,d),d[b.controllerAs]=e)),g.open(p,{scope:d,deferred:l,renderDeferred:o,content:a[0],animation:b.animation,backdrop:b.backdrop,keyboard:b.keyboard,backdropClass:b.backdropClass,windowTopClass:b.windowTopClass,windowClass:b.windowClass,windowTemplateUrl:b.windowTemplateUrl,size:b.size,openedClass:b.openedClass}),n.resolve(!0)},function(a){n.reject(a),l.reject(a)})["finally"](function(){m===q&&(m=null)}),p},l}]};return a}),angular.module("ui.bootstrap.modal").value("$modalSuppressWarning",!1).directive("modalBackdrop",["$animate","$injector","$modalStack","$log","$modalSuppressWarning",function(a,b,c,d,e){function f(b,f,h){e||d.warn("modal-backdrop is now deprecated. Use uib-modal-backdrop instead."),f.addClass("modal-backdrop"),h.modalInClass&&(g?g(f,{addClass:h.modalInClass}).start():a.addClass(f,h.modalInClass),b.$on(c.NOW_CLOSING_EVENT,function(b,c){var d=c();g?g(f,{removeClass:h.modalInClass}).start().then(d):a.removeClass(f,h.modalInClass).then(d)}))}var g=null;return b.has("$animateCss")&&(g=b.get("$animateCss")),{replace:!0,templateUrl:"template/modal/backdrop.html",compile:function(a,b){return a.addClass(b.backdropClass),f}}}]).directive("modalWindow",["$modalStack","$q","$animate","$injector","$log","$modalSuppressWarning",function(a,b,c,d,e,f){var g=null;return d.has("$animateCss")&&(g=d.get("$animateCss")),{scope:{index:"@"},replace:!0,transclude:!0,templateUrl:function(a,b){return b.templateUrl||"template/modal/window.html"},link:function(d,h,i){f||e.warn("modal-window is now deprecated. Use uib-modal-window instead."),h.addClass(i.windowClass||""),h.addClass(i.windowTopClass||""),d.size=i.size,d.close=function(b){var c=a.getTop();c&&c.value.backdrop&&"static"!==c.value.backdrop&&b.target===b.currentTarget&&(b.preventDefault(),b.stopPropagation(),a.dismiss(c.key,"backdrop click"))},h.on("click",d.close),d.$isRendered=!0;var j=b.defer();i.$observe("modalRender",function(a){"true"==a&&j.resolve()}),j.promise.then(function(){var e=null;i.modalInClass&&(e=g?g(h,{addClass:i.modalInClass}).start():c.addClass(h,i.modalInClass),d.$on(a.NOW_CLOSING_EVENT,function(a,b){var d=b();g?g(h,{removeClass:i.modalInClass}).start().then(d):c.removeClass(h,i.modalInClass).then(d)})),b.when(e).then(function(){var a=h[0].querySelector("[autofocus]");a?a.focus():h[0].focus()});var f=a.getTop();f&&a.modalRendered(f.key)})}}}]).directive("modalAnimationClass",["$log","$modalSuppressWarning",function(a,b){return{compile:function(c,d){b||a.warn("modal-animation-class is now deprecated. Use uib-modal-animation-class instead."),d.modalAnimation&&c.addClass(d.modalAnimationClass)}}}]).directive("modalTransclude",["$log","$modalSuppressWarning",function(a,b){return{link:function(c,d,e,f,g){b||a.warn("modal-transclude is now deprecated. Use uib-modal-transclude instead."),g(c.$parent,function(a){d.empty(),d.append(a)})}}}]).service("$modalStack",["$animate","$timeout","$document","$compile","$rootScope","$q","$injector","$$multiMap","$$stackedMap","$uibModalStack","$log","$modalSuppressWarning",function(a,b,c,d,e,f,g,h,i,j,k,l){l||k.warn("$modalStack is now deprecated. Use $uibModalStack instead."),angular.extend(this,j)}]).provider("$modal",["$uibModalProvider",function(a){angular.extend(this,a),this.$get=["$injector","$log","$modalSuppressWarning",function(b,c,d){return d||c.warn("$modal is now deprecated. Use $uibModal instead."),b.invoke(a.$get)}]}]),angular.module("ui.bootstrap.pagination",[]).controller("UibPaginationController",["$scope","$attrs","$parse",function(a,b,c){var d=this,e={$setViewValue:angular.noop},f=b.numPages?c(b.numPages).assign:angular.noop;this.init=function(g,h){e=g,this.config=h,e.$render=function(){d.render()},b.itemsPerPage?a.$parent.$watch(c(b.itemsPerPage),function(b){d.itemsPerPage=parseInt(b,10),a.totalPages=d.calculateTotalPages()}):this.itemsPerPage=h.itemsPerPage,a.$watch("totalItems",function(){a.totalPages=d.calculateTotalPages()}),a.$watch("totalPages",function(b){f(a.$parent,b),a.page>b?a.selectPage(b):e.$render()})},this.calculateTotalPages=function(){var b=this.itemsPerPage<1?1:Math.ceil(a.totalItems/this.itemsPerPage);return Math.max(b||0,1)},this.render=function(){a.page=parseInt(e.$viewValue,10)||1},a.selectPage=function(b,c){c&&c.preventDefault();var d=!a.ngDisabled||!c;d&&a.page!==b&&b>0&&b<=a.totalPages&&(c&&c.target&&c.target.blur(),e.$setViewValue(b),e.$render())},a.getText=function(b){return a[b+"Text"]||d.config[b+"Text"]},a.noPrevious=function(){return 1===a.page},a.noNext=function(){return a.page===a.totalPages}}]).constant("uibPaginationConfig",{itemsPerPage:10,boundaryLinks:!1,directionLinks:!0,firstText:"First",previousText:"Previous",nextText:"Next",lastText:"Last",rotate:!0}).directive("uibPagination",["$parse","uibPaginationConfig",function(a,b){return{restrict:"EA",scope:{totalItems:"=",firstText:"@",previousText:"@",nextText:"@",lastText:"@",ngDisabled:"="},require:["uibPagination","?ngModel"],controller:"UibPaginationController",controllerAs:"pagination",templateUrl:function(a,b){return b.templateUrl||"template/pagination/pagination.html"},replace:!0,link:function(c,d,e,f){function g(a,b,c){return{number:a,text:b,active:c}}function h(a,b){var c=[],d=1,e=b,f=angular.isDefined(k)&&b>k;f&&(l?(d=Math.max(a-Math.floor(k/2),1),e=d+k-1,e>b&&(e=b,d=e-k+1)):(d=(Math.ceil(a/k)-1)*k+1,e=Math.min(d+k-1,b)));for(var h=d;e>=h;h++){var i=g(h,h,h===a);c.push(i)}if(f&&!l){if(d>1){var j=g(d-1,"...",!1);c.unshift(j)}if(b>e){var m=g(e+1,"...",!1);c.push(m)}}return c}var i=f[0],j=f[1];if(j){var k=angular.isDefined(e.maxSize)?c.$parent.$eval(e.maxSize):b.maxSize,l=angular.isDefined(e.rotate)?c.$parent.$eval(e.rotate):b.rotate;c.boundaryLinks=angular.isDefined(e.boundaryLinks)?c.$parent.$eval(e.boundaryLinks):b.boundaryLinks,c.directionLinks=angular.isDefined(e.directionLinks)?c.$parent.$eval(e.directionLinks):b.directionLinks,i.init(j,b),e.maxSize&&c.$parent.$watch(a(e.maxSize),function(a){k=parseInt(a,10),i.render()});var m=i.render;i.render=function(){m(),c.page>0&&c.page<=c.totalPages&&(c.pages=h(c.page,c.totalPages))}}}}}]).constant("uibPagerConfig",{itemsPerPage:10,previousText:"« Previous",nextText:"Next »",align:!0}).directive("uibPager",["uibPagerConfig",function(a){return{restrict:"EA",scope:{totalItems:"=",previousText:"@",nextText:"@",ngDisabled:"="},require:["uibPager","?ngModel"],controller:"UibPaginationController",controllerAs:"pagination",templateUrl:function(a,b){return b.templateUrl||"template/pagination/pager.html"},replace:!0,link:function(b,c,d,e){var f=e[0],g=e[1];g&&(b.align=angular.isDefined(d.align)?b.$parent.$eval(d.align):a.align,f.init(g,a))}}}]),angular.module("ui.bootstrap.pagination").value("$paginationSuppressWarning",!1).controller("PaginationController",["$scope","$attrs","$parse","$log","$paginationSuppressWarning",function(a,b,c,d,e){e||d.warn("PaginationController is now deprecated. Use UibPaginationController instead.");var f=this,g={$setViewValue:angular.noop},h=b.numPages?c(b.numPages).assign:angular.noop;this.init=function(d,e){g=d,this.config=e,g.$render=function(){f.render()},b.itemsPerPage?a.$parent.$watch(c(b.itemsPerPage),function(b){f.itemsPerPage=parseInt(b,10),a.totalPages=f.calculateTotalPages()}):this.itemsPerPage=e.itemsPerPage,a.$watch("totalItems",function(){a.totalPages=f.calculateTotalPages()}),a.$watch("totalPages",function(b){h(a.$parent,b),a.page>b?a.selectPage(b):g.$render()})},this.calculateTotalPages=function(){var b=this.itemsPerPage<1?1:Math.ceil(a.totalItems/this.itemsPerPage);return Math.max(b||0,1)},this.render=function(){a.page=parseInt(g.$viewValue,10)||1},a.selectPage=function(b,c){c&&c.preventDefault();var d=!a.ngDisabled||!c;d&&a.page!==b&&b>0&&b<=a.totalPages&&(c&&c.target&&c.target.blur(),g.$setViewValue(b),g.$render())},a.getText=function(b){return a[b+"Text"]||f.config[b+"Text"]},a.noPrevious=function(){return 1===a.page},a.noNext=function(){return a.page===a.totalPages}}]).directive("pagination",["$parse","uibPaginationConfig","$log","$paginationSuppressWarning",function(a,b,c,d){return{restrict:"EA",scope:{totalItems:"=",firstText:"@",previousText:"@",nextText:"@",lastText:"@",ngDisabled:"="},require:["pagination","?ngModel"],controller:"PaginationController",controllerAs:"pagination",templateUrl:function(a,b){return b.templateUrl||"template/pagination/pagination.html"},replace:!0,link:function(e,f,g,h){function i(a,b,c){return{number:a,text:b,active:c}}function j(a,b){var c=[],d=1,e=b,f=angular.isDefined(m)&&b>m;f&&(n?(d=Math.max(a-Math.floor(m/2),1),e=d+m-1,e>b&&(e=b,d=e-m+1)):(d=(Math.ceil(a/m)-1)*m+1,e=Math.min(d+m-1,b)));for(var g=d;e>=g;g++){var h=i(g,g,g===a);c.push(h)}if(f&&!n){if(d>1){var j=i(d-1,"...",!1);c.unshift(j)}if(b>e){var k=i(e+1,"...",!1);c.push(k)}}return c}d||c.warn("pagination is now deprecated. Use uib-pagination instead.");var k=h[0],l=h[1];if(l){var m=angular.isDefined(g.maxSize)?e.$parent.$eval(g.maxSize):b.maxSize,n=angular.isDefined(g.rotate)?e.$parent.$eval(g.rotate):b.rotate;e.boundaryLinks=angular.isDefined(g.boundaryLinks)?e.$parent.$eval(g.boundaryLinks):b.boundaryLinks,e.directionLinks=angular.isDefined(g.directionLinks)?e.$parent.$eval(g.directionLinks):b.directionLinks,k.init(l,b),g.maxSize&&e.$parent.$watch(a(g.maxSize),function(a){m=parseInt(a,10),k.render()});var o=k.render;k.render=function(){o(),e.page>0&&e.page<=e.totalPages&&(e.pages=j(e.page,e.totalPages))}}}}}]).directive("pager",["uibPagerConfig","$log","$paginationSuppressWarning",function(a,b,c){return{restrict:"EA",scope:{totalItems:"=",previousText:"@",nextText:"@",ngDisabled:"="},require:["pager","?ngModel"],controller:"PaginationController",controllerAs:"pagination",templateUrl:function(a,b){return b.templateUrl||"template/pagination/pager.html"},replace:!0,link:function(d,e,f,g){c||b.warn("pager is now deprecated. Use uib-pager instead.");var h=g[0],i=g[1];i&&(d.align=angular.isDefined(f.align)?d.$parent.$eval(f.align):a.align,h.init(i,a))}}}]),angular.module("ui.bootstrap.tooltip",["ui.bootstrap.position","ui.bootstrap.stackedMap"]).provider("$uibTooltip",function(){function a(a){var b=/[A-Z]/g,c="-";return a.replace(b,function(a,b){return(b?c:"")+a.toLowerCase()})}var b={placement:"top",animation:!0,popupDelay:0,popupCloseDelay:0,useContentExp:!1},c={mouseenter:"mouseleave",click:"click",focus:"blur",none:""},d={};this.options=function(a){angular.extend(d,a)},this.setTriggers=function(a){angular.extend(c,a)},this.$get=["$window","$compile","$timeout","$document","$uibPosition","$interpolate","$rootScope","$parse","$$stackedMap",function(e,f,g,h,i,j,k,l,m){var n=m.createNew();return h.on("keypress",function(a){if(27===a.which){var b=n.top();b&&(b.value.close(),n.removeTop(),b=null)}}),function(e,k,m,o){function p(a){var b=(a||o.trigger||m).split(" "),d=b.map(function(a){return c[a]||a});return{show:b,hide:d}}o=angular.extend({},b,d,o);var q=a(e),r=j.startSymbol(),s=j.endSymbol(),t="<div "+q+'-popup title="'+r+"title"+s+'" '+(o.useContentExp?'content-exp="contentExp()" ':'content="'+r+"content"+s+'" ')+'placement="'+r+"placement"+s+'" popup-class="'+r+"popupClass"+s+'" animation="animation" is-open="isOpen"origin-scope="origScope" style="visibility: hidden; display: block; top: -9999px; left: -9999px;"></div>';return{compile:function(a,b){var c=f(t);return function(a,b,d,f){function j(){L.isOpen?q():m()}function m(){(!K||a.$eval(d[k+"Enable"]))&&(u(),x(),L.popupDelay?F||(F=g(r,L.popupDelay,!1)):r())}function q(){s(),L.popupCloseDelay?G||(G=g(t,L.popupCloseDelay,!1)):t()}function r(){return s(),u(),L.content?(v(),void L.$evalAsync(function(){L.isOpen=!0,y(!0),Q()})):angular.noop}function s(){F&&(g.cancel(F),F=null),H&&(g.cancel(H),H=null)}function t(){s(),u(),L&&L.$evalAsync(function(){L.isOpen=!1,y(!1),L.animation?E||(E=g(w,150,!1)):w()})}function u(){G&&(g.cancel(G),G=null),E&&(g.cancel(E),E=null)}function v(){C||(D=L.$new(),C=c(D,function(a){I?h.find("body").append(a):b.after(a)}),z())}function w(){A(),E=null,C&&(C.remove(),C=null),D&&(D.$destroy(),D=null)}function x(){L.title=d[k+"Title"],O?L.content=O(a):L.content=d[e],L.popupClass=d[k+"Class"],L.placement=angular.isDefined(d[k+"Placement"])?d[k+"Placement"]:o.placement;var b=parseInt(d[k+"PopupDelay"],10),c=parseInt(d[k+"PopupCloseDelay"],10);L.popupDelay=isNaN(b)?o.popupDelay:b,L.popupCloseDelay=isNaN(c)?o.popupCloseDelay:c}function y(b){N&&angular.isFunction(N.assign)&&N.assign(a,b)}function z(){P.length=0,O?(P.push(a.$watch(O,function(a){L.content=a,!a&&L.isOpen&&t()})),P.push(D.$watch(function(){M||(M=!0,D.$$postDigest(function(){M=!1,L&&L.isOpen&&Q()}))}))):P.push(d.$observe(e,function(a){L.content=a,!a&&L.isOpen?t():Q()})),P.push(d.$observe(k+"Title",function(a){L.title=a,L.isOpen&&Q()})),P.push(d.$observe(k+"Placement",function(a){L.placement=a?a:o.placement,L.isOpen&&Q()}))}function A(){P.length&&(angular.forEach(P,function(a){a()}),P.length=0)}function B(){var a=d[k+"Trigger"];R(),J=p(a),"none"!==J.show&&J.show.forEach(function(a,c){a===J.hide[c]?b[0].addEventListener(a,j):a&&(b[0].addEventListener(a,m),J.hide[c].split(" ").forEach(function(a){b[0].addEventListener(a,q)})),b.on("keypress",function(a){27===a.which&&q()})})}var C,D,E,F,G,H,I=angular.isDefined(o.appendToBody)?o.appendToBody:!1,J=p(void 0),K=angular.isDefined(d[k+"Enable"]),L=a.$new(!0),M=!1,N=angular.isDefined(d[k+"IsOpen"])?l(d[k+"IsOpen"]):!1,O=o.useContentExp?l(d[e]):!1,P=[],Q=function(){C&&C.html()&&(H||(H=g(function(){C.css({top:0,left:0});var a=i.positionElements(b,C,L.placement,I);a.top+="px",a.left+="px",a.visibility="visible",C.css(a),H=null},0,!1)))};L.origScope=a,L.isOpen=!1,n.add(L,{close:t}),L.contentExp=function(){return L.content},d.$observe("disabled",function(a){a&&s(),a&&L.isOpen&&t()}),N&&a.$watch(N,function(a){L&&!a===L.isOpen&&j()});var R=function(){J.show.forEach(function(a){b.unbind(a,m)}),J.hide.forEach(function(a){a.split(" ").forEach(function(a){b[0].removeEventListener(a,q)})})};B();var S=a.$eval(d[k+"Animation"]);L.animation=angular.isDefined(S)?!!S:o.animation;var T=a.$eval(d[k+"AppendToBody"]);I=angular.isDefined(T)?T:I,I&&a.$on("$locationChangeSuccess",function(){L.isOpen&&t()}),a.$on("$destroy",function(){s(),u(),R(),w(),n.remove(L),L=null})}}}}}]}).directive("uibTooltipTemplateTransclude",["$animate","$sce","$compile","$templateRequest",function(a,b,c,d){return{link:function(e,f,g){var h,i,j,k=e.$eval(g.tooltipTemplateTranscludeScope),l=0,m=function(){i&&(i.remove(),i=null),h&&(h.$destroy(),h=null),j&&(a.leave(j).then(function(){i=null}),i=j,j=null)};e.$watch(b.parseAsResourceUrl(g.uibTooltipTemplateTransclude),function(b){var g=++l;b?(d(b,!0).then(function(d){if(g===l){var e=k.$new(),i=d,n=c(i)(e,function(b){m(),a.enter(b,f)});h=e,j=n,h.$emit("$includeContentLoaded",b)}},function(){g===l&&(m(),e.$emit("$includeContentError",b))}),e.$emit("$includeContentRequested",b)):m()}),e.$on("$destroy",m)}}}]).directive("uibTooltipClasses",function(){return{restrict:"A",link:function(a,b,c){a.placement&&b.addClass(a.placement),a.popupClass&&b.addClass(a.popupClass),a.animation()&&b.addClass(c.tooltipAnimationClass)}}}).directive("uibTooltipPopup",function(){return{replace:!0,scope:{content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-popup.html",link:function(a,b){b.addClass("tooltip")}}}).directive("uibTooltip",["$uibTooltip",function(a){return a("uibTooltip","tooltip","mouseenter")}]).directive("uibTooltipTemplatePopup",function(){return{replace:!0,scope:{contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&",originScope:"&"},templateUrl:"template/tooltip/tooltip-template-popup.html",link:function(a,b){b.addClass("tooltip")}}}).directive("uibTooltipTemplate",["$uibTooltip",function(a){return a("uibTooltipTemplate","tooltip","mouseenter",{useContentExp:!0})}]).directive("uibTooltipHtmlPopup",function(){return{replace:!0,scope:{contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-html-popup.html",link:function(a,b){b.addClass("tooltip")}}}).directive("uibTooltipHtml",["$uibTooltip",function(a){return a("uibTooltipHtml","tooltip","mouseenter",{useContentExp:!0
+})}]),angular.module("ui.bootstrap.tooltip").value("$tooltipSuppressWarning",!1).provider("$tooltip",["$uibTooltipProvider",function(a){angular.extend(this,a),this.$get=["$log","$tooltipSuppressWarning","$injector",function(b,c,d){return c||b.warn("$tooltip is now deprecated. Use $uibTooltip instead."),d.invoke(a.$get)}]}]).directive("tooltipTemplateTransclude",["$animate","$sce","$compile","$templateRequest","$log","$tooltipSuppressWarning",function(a,b,c,d,e,f){return{link:function(g,h,i){f||e.warn("tooltip-template-transclude is now deprecated. Use uib-tooltip-template-transclude instead.");var j,k,l,m=g.$eval(i.tooltipTemplateTranscludeScope),n=0,o=function(){k&&(k.remove(),k=null),j&&(j.$destroy(),j=null),l&&(a.leave(l).then(function(){k=null}),k=l,l=null)};g.$watch(b.parseAsResourceUrl(i.tooltipTemplateTransclude),function(b){var e=++n;b?(d(b,!0).then(function(d){if(e===n){var f=m.$new(),g=d,i=c(g)(f,function(b){o(),a.enter(b,h)});j=f,l=i,j.$emit("$includeContentLoaded",b)}},function(){e===n&&(o(),g.$emit("$includeContentError",b))}),g.$emit("$includeContentRequested",b)):o()}),g.$on("$destroy",o)}}}]).directive("tooltipClasses",["$log","$tooltipSuppressWarning",function(a,b){return{restrict:"A",link:function(c,d,e){b||a.warn("tooltip-classes is now deprecated. Use uib-tooltip-classes instead."),c.placement&&d.addClass(c.placement),c.popupClass&&d.addClass(c.popupClass),c.animation()&&d.addClass(e.tooltipAnimationClass)}}}]).directive("tooltipPopup",["$log","$tooltipSuppressWarning",function(a,b){return{replace:!0,scope:{content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-popup.html",link:function(c,d){b||a.warn("tooltip-popup is now deprecated. Use uib-tooltip-popup instead."),d.addClass("tooltip")}}}]).directive("tooltip",["$tooltip",function(a){return a("tooltip","tooltip","mouseenter")}]).directive("tooltipTemplatePopup",["$log","$tooltipSuppressWarning",function(a,b){return{replace:!0,scope:{contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&",originScope:"&"},templateUrl:"template/tooltip/tooltip-template-popup.html",link:function(c,d){b||a.warn("tooltip-template-popup is now deprecated. Use uib-tooltip-template-popup instead."),d.addClass("tooltip")}}}]).directive("tooltipTemplate",["$tooltip",function(a){return a("tooltipTemplate","tooltip","mouseenter",{useContentExp:!0})}]).directive("tooltipHtmlPopup",["$log","$tooltipSuppressWarning",function(a,b){return{replace:!0,scope:{contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/tooltip/tooltip-html-popup.html",link:function(c,d){b||a.warn("tooltip-html-popup is now deprecated. Use uib-tooltip-html-popup instead."),d.addClass("tooltip")}}}]).directive("tooltipHtml",["$tooltip",function(a){return a("tooltipHtml","tooltip","mouseenter",{useContentExp:!0})}]),angular.module("ui.bootstrap.popover",["ui.bootstrap.tooltip"]).directive("uibPopoverTemplatePopup",function(){return{replace:!0,scope:{title:"@",contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&",originScope:"&"},templateUrl:"template/popover/popover-template.html",link:function(a,b){b.addClass("popover")}}}).directive("uibPopoverTemplate",["$uibTooltip",function(a){return a("uibPopoverTemplate","popover","click",{useContentExp:!0})}]).directive("uibPopoverHtmlPopup",function(){return{replace:!0,scope:{contentExp:"&",title:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/popover/popover-html.html",link:function(a,b){b.addClass("popover")}}}).directive("uibPopoverHtml",["$uibTooltip",function(a){return a("uibPopoverHtml","popover","click",{useContentExp:!0})}]).directive("uibPopoverPopup",function(){return{replace:!0,scope:{title:"@",content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/popover/popover.html",link:function(a,b){b.addClass("popover")}}}).directive("uibPopover",["$uibTooltip",function(a){return a("uibPopover","popover","click")}]),angular.module("ui.bootstrap.popover").value("$popoverSuppressWarning",!1).directive("popoverTemplatePopup",["$log","$popoverSuppressWarning",function(a,b){return{replace:!0,scope:{title:"@",contentExp:"&",placement:"@",popupClass:"@",animation:"&",isOpen:"&",originScope:"&"},templateUrl:"template/popover/popover-template.html",link:function(c,d){b||a.warn("popover-template-popup is now deprecated. Use uib-popover-template-popup instead."),d.addClass("popover")}}}]).directive("popoverTemplate",["$tooltip",function(a){return a("popoverTemplate","popover","click",{useContentExp:!0})}]).directive("popoverHtmlPopup",["$log","$popoverSuppressWarning",function(a,b){return{replace:!0,scope:{contentExp:"&",title:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/popover/popover-html.html",link:function(c,d){b||a.warn("popover-html-popup is now deprecated. Use uib-popover-html-popup instead."),d.addClass("popover")}}}]).directive("popoverHtml",["$tooltip",function(a){return a("popoverHtml","popover","click",{useContentExp:!0})}]).directive("popoverPopup",["$log","$popoverSuppressWarning",function(a,b){return{replace:!0,scope:{title:"@",content:"@",placement:"@",popupClass:"@",animation:"&",isOpen:"&"},templateUrl:"template/popover/popover.html",link:function(c,d){b||a.warn("popover-popup is now deprecated. Use uib-popover-popup instead."),d.addClass("popover")}}}]).directive("popover",["$tooltip",function(a){return a("popover","popover","click")}]),angular.module("ui.bootstrap.progressbar",[]).constant("uibProgressConfig",{animate:!0,max:100}).controller("UibProgressController",["$scope","$attrs","uibProgressConfig",function(a,b,c){var d=this,e=angular.isDefined(b.animate)?a.$parent.$eval(b.animate):c.animate;this.bars=[],a.max=angular.isDefined(a.max)?a.max:c.max,this.addBar=function(b,c,f){e||c.css({transition:"none"}),this.bars.push(b),b.max=a.max,b.title=f&&angular.isDefined(f.title)?f.title:"progressbar",b.$watch("value",function(a){b.recalculatePercentage()}),b.recalculatePercentage=function(){var a=d.bars.reduce(function(a,b){return b.percent=+(100*b.value/b.max).toFixed(2),a+b.percent},0);a>100&&(b.percent-=a-100)},b.$on("$destroy",function(){c=null,d.removeBar(b)})},this.removeBar=function(a){this.bars.splice(this.bars.indexOf(a),1),this.bars.forEach(function(a){a.recalculatePercentage()})},a.$watch("max",function(b){d.bars.forEach(function(b){b.max=a.max,b.recalculatePercentage()})})}]).directive("uibProgress",function(){return{replace:!0,transclude:!0,controller:"UibProgressController",require:"uibProgress",scope:{max:"=?"},templateUrl:"template/progressbar/progress.html"}}).directive("uibBar",function(){return{replace:!0,transclude:!0,require:"^uibProgress",scope:{value:"=",type:"@"},templateUrl:"template/progressbar/bar.html",link:function(a,b,c,d){d.addBar(a,b,c)}}}).directive("uibProgressbar",function(){return{replace:!0,transclude:!0,controller:"UibProgressController",scope:{value:"=",max:"=?",type:"@"},templateUrl:"template/progressbar/progressbar.html",link:function(a,b,c,d){d.addBar(a,angular.element(b.children()[0]),{title:c.title})}}}),angular.module("ui.bootstrap.progressbar").value("$progressSuppressWarning",!1).controller("ProgressController",["$scope","$attrs","uibProgressConfig","$log","$progressSuppressWarning",function(a,b,c,d,e){e||d.warn("ProgressController is now deprecated. Use UibProgressController instead.");var f=this,g=angular.isDefined(b.animate)?a.$parent.$eval(b.animate):c.animate;this.bars=[],a.max=angular.isDefined(a.max)?a.max:c.max,this.addBar=function(b,c,d){g||c.css({transition:"none"}),this.bars.push(b),b.max=a.max,b.title=d&&angular.isDefined(d.title)?d.title:"progressbar",b.$watch("value",function(a){b.recalculatePercentage()}),b.recalculatePercentage=function(){b.percent=+(100*b.value/b.max).toFixed(2);var a=f.bars.reduce(function(a,b){return a+b.percent},0);a>100&&(b.percent-=a-100)},b.$on("$destroy",function(){c=null,f.removeBar(b)})},this.removeBar=function(a){this.bars.splice(this.bars.indexOf(a),1)},a.$watch("max",function(b){f.bars.forEach(function(b){b.max=a.max,b.recalculatePercentage()})})}]).directive("progress",["$log","$progressSuppressWarning",function(a,b){return{replace:!0,transclude:!0,controller:"ProgressController",require:"progress",scope:{max:"=?",title:"@?"},templateUrl:"template/progressbar/progress.html",link:function(){b||a.warn("progress is now deprecated. Use uib-progress instead.")}}}]).directive("bar",["$log","$progressSuppressWarning",function(a,b){return{replace:!0,transclude:!0,require:"^progress",scope:{value:"=",type:"@"},templateUrl:"template/progressbar/bar.html",link:function(c,d,e,f){b||a.warn("bar is now deprecated. Use uib-bar instead."),f.addBar(c,d)}}}]).directive("progressbar",["$log","$progressSuppressWarning",function(a,b){return{replace:!0,transclude:!0,controller:"ProgressController",scope:{value:"=",max:"=?",type:"@"},templateUrl:"template/progressbar/progressbar.html",link:function(c,d,e,f){b||a.warn("progressbar is now deprecated. Use uib-progressbar instead."),f.addBar(c,angular.element(d.children()[0]),{title:e.title})}}}]),angular.module("ui.bootstrap.rating",[]).constant("uibRatingConfig",{max:5,stateOn:null,stateOff:null,titles:["one","two","three","four","five"]}).controller("UibRatingController",["$scope","$attrs","uibRatingConfig",function(a,b,c){var d={$setViewValue:angular.noop};this.init=function(e){d=e,d.$render=this.render,d.$formatters.push(function(a){return angular.isNumber(a)&&a<<0!==a&&(a=Math.round(a)),a}),this.stateOn=angular.isDefined(b.stateOn)?a.$parent.$eval(b.stateOn):c.stateOn,this.stateOff=angular.isDefined(b.stateOff)?a.$parent.$eval(b.stateOff):c.stateOff;var f=angular.isDefined(b.titles)?a.$parent.$eval(b.titles):c.titles;this.titles=angular.isArray(f)&&f.length>0?f:c.titles;var g=angular.isDefined(b.ratingStates)?a.$parent.$eval(b.ratingStates):new Array(angular.isDefined(b.max)?a.$parent.$eval(b.max):c.max);a.range=this.buildTemplateObjects(g)},this.buildTemplateObjects=function(a){for(var b=0,c=a.length;c>b;b++)a[b]=angular.extend({index:b},{stateOn:this.stateOn,stateOff:this.stateOff,title:this.getTitle(b)},a[b]);return a},this.getTitle=function(a){return a>=this.titles.length?a+1:this.titles[a]},a.rate=function(b){!a.readonly&&b>=0&&b<=a.range.length&&(d.$setViewValue(d.$viewValue===b?0:b),d.$render())},a.enter=function(b){a.readonly||(a.value=b),a.onHover({value:b})},a.reset=function(){a.value=d.$viewValue,a.onLeave()},a.onKeydown=function(b){/(37|38|39|40)/.test(b.which)&&(b.preventDefault(),b.stopPropagation(),a.rate(a.value+(38===b.which||39===b.which?1:-1)))},this.render=function(){a.value=d.$viewValue}}]).directive("uibRating",function(){return{require:["uibRating","ngModel"],scope:{readonly:"=?",onHover:"&",onLeave:"&"},controller:"UibRatingController",templateUrl:"template/rating/rating.html",replace:!0,link:function(a,b,c,d){var e=d[0],f=d[1];e.init(f)}}}),angular.module("ui.bootstrap.rating").value("$ratingSuppressWarning",!1).controller("RatingController",["$scope","$attrs","$controller","$log","$ratingSuppressWarning",function(a,b,c,d,e){e||d.warn("RatingController is now deprecated. Use UibRatingController instead."),angular.extend(this,c("UibRatingController",{$scope:a,$attrs:b}))}]).directive("rating",["$log","$ratingSuppressWarning",function(a,b){return{require:["rating","ngModel"],scope:{readonly:"=?",onHover:"&",onLeave:"&"},controller:"RatingController",templateUrl:"template/rating/rating.html",replace:!0,link:function(c,d,e,f){b||a.warn("rating is now deprecated. Use uib-rating instead.");var g=f[0],h=f[1];g.init(h)}}}]),angular.module("ui.bootstrap.tabs",[]).controller("UibTabsetController",["$scope",function(a){var b=this,c=b.tabs=a.tabs=[];b.select=function(a){angular.forEach(c,function(b){b.active&&b!==a&&(b.active=!1,b.onDeselect(),a.selectCalled=!1)}),a.active=!0,a.selectCalled||(a.onSelect(),a.selectCalled=!0)},b.addTab=function(a){c.push(a),1===c.length&&a.active!==!1?a.active=!0:a.active?b.select(a):a.active=!1},b.removeTab=function(a){var e=c.indexOf(a);if(a.active&&c.length>1&&!d){var f=e==c.length-1?e-1:e+1;b.select(c[f])}c.splice(e,1)};var d;a.$on("$destroy",function(){d=!0})}]).directive("uibTabset",function(){return{restrict:"EA",transclude:!0,replace:!0,scope:{type:"@"},controller:"UibTabsetController",templateUrl:"template/tabs/tabset.html",link:function(a,b,c){a.vertical=angular.isDefined(c.vertical)?a.$parent.$eval(c.vertical):!1,a.justified=angular.isDefined(c.justified)?a.$parent.$eval(c.justified):!1}}}).directive("uibTab",["$parse",function(a){return{require:"^uibTabset",restrict:"EA",replace:!0,templateUrl:"template/tabs/tab.html",transclude:!0,scope:{active:"=?",heading:"@",onSelect:"&select",onDeselect:"&deselect"},controller:function(){},link:function(b,c,d,e,f){b.$watch("active",function(a){a&&e.select(b)}),b.disabled=!1,d.disable&&b.$parent.$watch(a(d.disable),function(a){b.disabled=!!a}),b.select=function(){b.disabled||(b.active=!0)},e.addTab(b),b.$on("$destroy",function(){e.removeTab(b)}),b.$transcludeFn=f}}}]).directive("uibTabHeadingTransclude",function(){return{restrict:"A",require:["?^uibTab","?^tab"],link:function(a,b){a.$watch("headingElement",function(a){a&&(b.html(""),b.append(a))})}}}).directive("uibTabContentTransclude",function(){function a(a){return a.tagName&&(a.hasAttribute("tab-heading")||a.hasAttribute("data-tab-heading")||a.hasAttribute("x-tab-heading")||a.hasAttribute("uib-tab-heading")||a.hasAttribute("data-uib-tab-heading")||a.hasAttribute("x-uib-tab-heading")||"tab-heading"===a.tagName.toLowerCase()||"data-tab-heading"===a.tagName.toLowerCase()||"x-tab-heading"===a.tagName.toLowerCase()||"uib-tab-heading"===a.tagName.toLowerCase()||"data-uib-tab-heading"===a.tagName.toLowerCase()||"x-uib-tab-heading"===a.tagName.toLowerCase())}return{restrict:"A",require:["?^uibTabset","?^tabset"],link:function(b,c,d){var e=b.$eval(d.uibTabContentTransclude);e.$transcludeFn(e.$parent,function(b){angular.forEach(b,function(b){a(b)?e.headingElement=b:c.append(b)})})}}}),angular.module("ui.bootstrap.tabs").value("$tabsSuppressWarning",!1).controller("TabsetController",["$scope","$controller","$log","$tabsSuppressWarning",function(a,b,c,d){d||c.warn("TabsetController is now deprecated. Use UibTabsetController instead."),angular.extend(this,b("UibTabsetController",{$scope:a}))}]).directive("tabset",["$log","$tabsSuppressWarning",function(a,b){return{restrict:"EA",transclude:!0,replace:!0,scope:{type:"@"},controller:"TabsetController",templateUrl:"template/tabs/tabset.html",link:function(c,d,e){b||a.warn("tabset is now deprecated. Use uib-tabset instead."),c.vertical=angular.isDefined(e.vertical)?c.$parent.$eval(e.vertical):!1,c.justified=angular.isDefined(e.justified)?c.$parent.$eval(e.justified):!1}}}]).directive("tab",["$parse","$log","$tabsSuppressWarning",function(a,b,c){return{require:"^tabset",restrict:"EA",replace:!0,templateUrl:"template/tabs/tab.html",transclude:!0,scope:{active:"=?",heading:"@",onSelect:"&select",onDeselect:"&deselect"},controller:function(){},link:function(d,e,f,g,h){c||b.warn("tab is now deprecated. Use uib-tab instead."),d.$watch("active",function(a){a&&g.select(d)}),d.disabled=!1,f.disable&&d.$parent.$watch(a(f.disable),function(a){d.disabled=!!a}),d.select=function(){d.disabled||(d.active=!0)},g.addTab(d),d.$on("$destroy",function(){g.removeTab(d)}),d.$transcludeFn=h}}}]).directive("tabHeadingTransclude",["$log","$tabsSuppressWarning",function(a,b){return{restrict:"A",require:"^tab",link:function(c,d){b||a.warn("tab-heading-transclude is now deprecated. Use uib-tab-heading-transclude instead."),c.$watch("headingElement",function(a){a&&(d.html(""),d.append(a))})}}}]).directive("tabContentTransclude",["$log","$tabsSuppressWarning",function(a,b){function c(a){return a.tagName&&(a.hasAttribute("tab-heading")||a.hasAttribute("data-tab-heading")||a.hasAttribute("x-tab-heading")||"tab-heading"===a.tagName.toLowerCase()||"data-tab-heading"===a.tagName.toLowerCase()||"x-tab-heading"===a.tagName.toLowerCase())}return{restrict:"A",require:"^tabset",link:function(d,e,f){b||a.warn("tab-content-transclude is now deprecated. Use uib-tab-content-transclude instead.");var g=d.$eval(f.tabContentTransclude);g.$transcludeFn(g.$parent,function(a){angular.forEach(a,function(a){c(a)?g.headingElement=a:e.append(a)})})}}}]),angular.module("ui.bootstrap.timepicker",[]).constant("uibTimepickerConfig",{hourStep:1,minuteStep:1,showMeridian:!0,meridians:null,readonlyInput:!1,mousewheel:!0,arrowkeys:!0,showSpinners:!0}).controller("UibTimepickerController",["$scope","$element","$attrs","$parse","$log","$locale","uibTimepickerConfig",function(a,b,c,d,e,f,g){function h(){var b=parseInt(a.hours,10),c=a.showMeridian?b>0&&13>b:b>=0&&24>b;return c?(a.showMeridian&&(12===b&&(b=0),a.meridian===r[1]&&(b+=12)),b):void 0}function i(){var b=parseInt(a.minutes,10);return b>=0&&60>b?b:void 0}function j(a){return angular.isDefined(a)&&a.toString().length<2?"0"+a:a.toString()}function k(a){l(),q.$setViewValue(new Date(p)),m(a)}function l(){q.$setValidity("time",!0),a.invalidHours=!1,a.invalidMinutes=!1}function m(b){var c=p.getHours(),d=p.getMinutes();a.showMeridian&&(c=0===c||12===c?12:c%12),a.hours="h"===b?c:j(c),"m"!==b&&(a.minutes=j(d)),a.meridian=p.getHours()<12?r[0]:r[1]}function n(a,b){var c=new Date(a.getTime()+6e4*b),d=new Date(a);return d.setHours(c.getHours(),c.getMinutes()),d}function o(a){p=n(p,a),k()}var p=new Date,q={$setViewValue:angular.noop},r=angular.isDefined(c.meridians)?a.$parent.$eval(c.meridians):g.meridians||f.DATETIME_FORMATS.AMPMS;a.tabindex=angular.isDefined(c.tabindex)?c.tabindex:0,b.removeAttr("tabindex"),this.init=function(b,d){q=b,q.$render=this.render,q.$formatters.unshift(function(a){return a?new Date(a):null});var e=d.eq(0),f=d.eq(1),h=angular.isDefined(c.mousewheel)?a.$parent.$eval(c.mousewheel):g.mousewheel;h&&this.setupMousewheelEvents(e,f);var i=angular.isDefined(c.arrowkeys)?a.$parent.$eval(c.arrowkeys):g.arrowkeys;i&&this.setupArrowkeyEvents(e,f),a.readonlyInput=angular.isDefined(c.readonlyInput)?a.$parent.$eval(c.readonlyInput):g.readonlyInput,this.setupInputEvents(e,f)};var s=g.hourStep;c.hourStep&&a.$parent.$watch(d(c.hourStep),function(a){s=parseInt(a,10)});var t=g.minuteStep;c.minuteStep&&a.$parent.$watch(d(c.minuteStep),function(a){t=parseInt(a,10)});var u;a.$parent.$watch(d(c.min),function(a){var b=new Date(a);u=isNaN(b)?void 0:b});var v;a.$parent.$watch(d(c.max),function(a){var b=new Date(a);v=isNaN(b)?void 0:b}),a.noIncrementHours=function(){var a=n(p,60*s);return a>v||p>a&&u>a},a.noDecrementHours=function(){var a=n(p,60*-s);return u>a||a>p&&a>v},a.noIncrementMinutes=function(){var a=n(p,t);return a>v||p>a&&u>a},a.noDecrementMinutes=function(){var a=n(p,-t);return u>a||a>p&&a>v},a.noToggleMeridian=function(){return p.getHours()<13?n(p,720)>v:n(p,-720)<u},a.showMeridian=g.showMeridian,c.showMeridian&&a.$parent.$watch(d(c.showMeridian),function(b){if(a.showMeridian=!!b,q.$error.time){var c=h(),d=i();angular.isDefined(c)&&angular.isDefined(d)&&(p.setHours(c),k())}else m()}),this.setupMousewheelEvents=function(b,c){var d=function(a){a.originalEvent&&(a=a.originalEvent);var b=a.wheelDelta?a.wheelDelta:-a.deltaY;return a.detail||b>0};b.bind("mousewheel wheel",function(b){a.$apply(d(b)?a.incrementHours():a.decrementHours()),b.preventDefault()}),c.bind("mousewheel wheel",function(b){a.$apply(d(b)?a.incrementMinutes():a.decrementMinutes()),b.preventDefault()})},this.setupArrowkeyEvents=function(b,c){b.bind("keydown",function(b){38===b.which?(b.preventDefault(),a.incrementHours(),a.$apply()):40===b.which&&(b.preventDefault(),a.decrementHours(),a.$apply())}),c.bind("keydown",function(b){38===b.which?(b.preventDefault(),a.incrementMinutes(),a.$apply()):40===b.which&&(b.preventDefault(),a.decrementMinutes(),a.$apply())})},this.setupInputEvents=function(b,c){if(a.readonlyInput)return a.updateHours=angular.noop,void(a.updateMinutes=angular.noop);var d=function(b,c){q.$setViewValue(null),q.$setValidity("time",!1),angular.isDefined(b)&&(a.invalidHours=b),angular.isDefined(c)&&(a.invalidMinutes=c)};a.updateHours=function(){var a=h(),b=i();angular.isDefined(a)&&angular.isDefined(b)?(p.setHours(a),u>p||p>v?d(!0):k("h")):d(!0)},b.bind("blur",function(b){!a.invalidHours&&a.hours<10&&a.$apply(function(){a.hours=j(a.hours)})}),a.updateMinutes=function(){var a=i(),b=h();angular.isDefined(a)&&angular.isDefined(b)?(p.setMinutes(a),u>p||p>v?d(void 0,!0):k("m")):d(void 0,!0)},c.bind("blur",function(b){!a.invalidMinutes&&a.minutes<10&&a.$apply(function(){a.minutes=j(a.minutes)})})},this.render=function(){var b=q.$viewValue;isNaN(b)?(q.$setValidity("time",!1),e.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.')):(b&&(p=b),u>p||p>v?(q.$setValidity("time",!1),a.invalidHours=!0,a.invalidMinutes=!0):l(),m())},a.showSpinners=angular.isDefined(c.showSpinners)?a.$parent.$eval(c.showSpinners):g.showSpinners,a.incrementHours=function(){a.noIncrementHours()||o(60*s)},a.decrementHours=function(){a.noDecrementHours()||o(60*-s)},a.incrementMinutes=function(){a.noIncrementMinutes()||o(t)},a.decrementMinutes=function(){a.noDecrementMinutes()||o(-t)},a.toggleMeridian=function(){a.noToggleMeridian()||o(720*(p.getHours()<12?1:-1))}}]).directive("uibTimepicker",function(){return{restrict:"EA",require:["uibTimepicker","?^ngModel"],controller:"UibTimepickerController",controllerAs:"timepicker",replace:!0,scope:{},templateUrl:function(a,b){return b.templateUrl||"template/timepicker/timepicker.html"},link:function(a,b,c,d){var e=d[0],f=d[1];f&&e.init(f,b.find("input"))}}}),angular.module("ui.bootstrap.timepicker").value("$timepickerSuppressWarning",!1).controller("TimepickerController",["$scope","$element","$attrs","$controller","$log","$timepickerSuppressWarning",function(a,b,c,d,e,f){f||e.warn("TimepickerController is now deprecated. Use UibTimepickerController instead."),angular.extend(this,d("UibTimepickerController",{$scope:a,$element:b,$attrs:c}))}]).directive("timepicker",["$log","$timepickerSuppressWarning",function(a,b){return{restrict:"EA",require:["timepicker","?^ngModel"],controller:"TimepickerController",controllerAs:"timepicker",replace:!0,scope:{},templateUrl:function(a,b){return b.templateUrl||"template/timepicker/timepicker.html"},link:function(c,d,e,f){b||a.warn("timepicker is now deprecated. Use uib-timepicker instead.");var g=f[0],h=f[1];h&&g.init(h,d.find("input"))}}}]),angular.module("ui.bootstrap.typeahead",["ui.bootstrap.position"]).factory("uibTypeaheadParser",["$parse",function(a){var b=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/;return{parse:function(c){var d=c.match(b);if(!d)throw new Error('Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_" but got "'+c+'".');return{itemName:d[3],source:a(d[4]),viewMapper:a(d[2]||d[1]),modelMapper:a(d[1])}}}}]).controller("UibTypeaheadController",["$scope","$element","$attrs","$compile","$parse","$q","$timeout","$document","$window","$rootScope","$uibPosition","uibTypeaheadParser",function(a,b,c,d,e,f,g,h,i,j,k,l){function m(){K.moveInProgress||(K.moveInProgress=!0,K.$digest()),S&&g.cancel(S),S=g(function(){K.matches.length&&n(),K.moveInProgress=!1},r)}function n(){K.position=C?k.offset(b):k.position(b),K.position.top+=b.prop("offsetHeight")}var o,p,q=[9,13,27,38,40],r=200,s=a.$eval(c.typeaheadMinLength);s||0===s||(s=1);var t,u,v=a.$eval(c.typeaheadWaitMs)||0,w=a.$eval(c.typeaheadEditable)!==!1,x=e(c.typeaheadLoading).assign||angular.noop,y=e(c.typeaheadOnSelect),z=angular.isDefined(c.typeaheadSelectOnBlur)?a.$eval(c.typeaheadSelectOnBlur):!1,A=e(c.typeaheadNoResults).assign||angular.noop,B=c.typeaheadInputFormatter?e(c.typeaheadInputFormatter):void 0,C=c.typeaheadAppendToBody?a.$eval(c.typeaheadAppendToBody):!1,D=c.typeaheadAppendToElementId||!1,E=a.$eval(c.typeaheadFocusFirst)!==!1,F=c.typeaheadSelectOnExact?a.$eval(c.typeaheadSelectOnExact):!1,G=e(c.ngModel),H=e(c.ngModel+"($$$p)"),I=function(b,c){return angular.isFunction(G(a))&&p&&p.$options&&p.$options.getterSetter?H(b,{$$$p:c}):G.assign(b,c)},J=l.parse(c.uibTypeahead),K=a.$new(),L=a.$on("$destroy",function(){K.$destroy()});K.$on("$destroy",L);var M="typeahead-"+K.$id+"-"+Math.floor(1e4*Math.random());b.attr({"aria-autocomplete":"list","aria-expanded":!1,"aria-owns":M});var N=angular.element("<div uib-typeahead-popup></div>");N.attr({id:M,matches:"matches",active:"activeIdx",select:"select(activeIdx)","move-in-progress":"moveInProgress",query:"query",position:"position"}),angular.isDefined(c.typeaheadTemplateUrl)&&N.attr("template-url",c.typeaheadTemplateUrl),angular.isDefined(c.typeaheadPopupTemplateUrl)&&N.attr("popup-template-url",c.typeaheadPopupTemplateUrl);var O=function(){K.matches=[],K.activeIdx=-1,b.attr("aria-expanded",!1)},P=function(a){return M+"-option-"+a};K.$watch("activeIdx",function(a){0>a?b.removeAttr("aria-activedescendant"):b.attr("aria-activedescendant",P(a))});var Q=function(a,b){return K.matches.length>b&&a?a.toUpperCase()===K.matches[b].label.toUpperCase():!1},R=function(c){var d={$viewValue:c};x(a,!0),A(a,!1),f.when(J.source(a,d)).then(function(e){var f=c===o.$viewValue;if(f&&t)if(e&&e.length>0){K.activeIdx=E?0:-1,A(a,!1),K.matches.length=0;for(var g=0;g<e.length;g++)d[J.itemName]=e[g],K.matches.push({id:P(g),label:J.viewMapper(K,d),model:e[g]});K.query=c,n(),b.attr("aria-expanded",!0),F&&1===K.matches.length&&Q(c,0)&&K.select(0)}else O(),A(a,!0);f&&x(a,!1)},function(){O(),x(a,!1),A(a,!0)})};C&&(angular.element(i).bind("resize",m),h.find("body").bind("scroll",m));var S;K.moveInProgress=!1,K.query=void 0;var T,U=function(a){T=g(function(){R(a)},v)},V=function(){T&&g.cancel(T)};O(),K.select=function(d){var e,f,h={};u=!0,h[J.itemName]=f=K.matches[d].model,e=J.modelMapper(a,h),I(a,e),o.$setValidity("editable",!0),o.$setValidity("parse",!0),y(a,{$item:f,$model:e,$label:J.viewMapper(a,h)}),O(),K.$eval(c.typeaheadFocusOnSelect)!==!1&&g(function(){b[0].focus()},0,!1)},b.bind("keydown",function(a){if(0!==K.matches.length&&-1!==q.indexOf(a.which)){if(-1===K.activeIdx&&(9===a.which||13===a.which))return O(),void K.$digest();a.preventDefault(),40===a.which?(K.activeIdx=(K.activeIdx+1)%K.matches.length,K.$digest()):38===a.which?(K.activeIdx=(K.activeIdx>0?K.activeIdx:K.matches.length)-1,K.$digest()):13===a.which||9===a.which?K.$apply(function(){K.select(K.activeIdx)}):27===a.which&&(a.stopPropagation(),O(),K.$digest())}}),b.bind("blur",function(){z&&K.matches.length&&-1!==K.activeIdx&&!u&&(u=!0,K.$apply(function(){K.select(K.activeIdx)})),t=!1,u=!1});var W=function(a){b[0]!==a.target&&3!==a.which&&0!==K.matches.length&&(O(),j.$$phase||K.$digest())};h.bind("click",W),a.$on("$destroy",function(){h.unbind("click",W),(C||D)&&X.remove(),C&&(angular.element(i).unbind("resize",m),h.find("body").unbind("scroll",m)),N.remove()});var X=d(N)(K);C?h.find("body").append(X):D!==!1?angular.element(h[0].getElementById(D)).append(X):b.after(X),this.init=function(b,c){o=b,p=c,o.$parsers.unshift(function(b){return t=!0,0===s||b&&b.length>=s?v>0?(V(),U(b)):R(b):(x(a,!1),V(),O()),w?b:b?void o.$setValidity("editable",!1):(o.$setValidity("editable",!0),null)}),o.$formatters.push(function(b){var c,d,e={};return w||o.$setValidity("editable",!0),B?(e.$model=b,B(a,e)):(e[J.itemName]=b,c=J.viewMapper(a,e),e[J.itemName]=void 0,d=J.viewMapper(a,e),c!==d?c:b)})}}]).directive("uibTypeahead",function(){return{controller:"UibTypeaheadController",require:["ngModel","^?ngModelOptions","uibTypeahead"],link:function(a,b,c,d){d[2].init(d[0],d[1])}}}).directive("uibTypeaheadPopup",function(){return{scope:{matches:"=",query:"=",active:"=",position:"&",moveInProgress:"=",select:"&"},replace:!0,templateUrl:function(a,b){return b.popupTemplateUrl||"template/typeahead/typeahead-popup.html"},link:function(a,b,c){a.templateUrl=c.templateUrl,a.isOpen=function(){return a.matches.length>0},a.isActive=function(b){return a.active==b},a.selectActive=function(b){a.active=b},a.selectMatch=function(b){a.select({activeIdx:b})}}}}).directive("uibTypeaheadMatch",["$templateRequest","$compile","$parse",function(a,b,c){return{scope:{index:"=",match:"=",query:"="},link:function(d,e,f){var g=c(f.templateUrl)(d.$parent)||"template/typeahead/typeahead-match.html";a(g).then(function(a){b(a.trim())(d,function(a){e.replaceWith(a)})})}}}]).filter("uibTypeaheadHighlight",["$sce","$injector","$log",function(a,b,c){function d(a){return a.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}function e(a){return/<.*>/g.test(a)}var f;return f=b.has("$sanitize"),function(b,g){return!f&&e(b)&&c.warn("Unsafe use of typeahead please use ngSanitize"),b=g?(""+b).replace(new RegExp(d(g),"gi"),"<strong>$&</strong>"):b,f||(b=a.trustAsHtml(b)),b}}]),angular.module("ui.bootstrap.typeahead").value("$typeaheadSuppressWarning",!1).service("typeaheadParser",["$parse","uibTypeaheadParser","$log","$typeaheadSuppressWarning",function(a,b,c,d){return d||c.warn("typeaheadParser is now deprecated. Use uibTypeaheadParser instead."),b}]).directive("typeahead",["$compile","$parse","$q","$timeout","$document","$window","$rootScope","$uibPosition","typeaheadParser","$log","$typeaheadSuppressWarning",function(a,b,c,d,e,f,g,h,i,j,k){var l=[9,13,27,38,40],m=200;return{require:["ngModel","^?ngModelOptions"],link:function(n,o,p,q){function r(){N.moveInProgress||(N.moveInProgress=!0,N.$digest()),V&&d.cancel(V),V=d(function(){N.matches.length&&s(),N.moveInProgress=!1},m)}function s(){N.position=F?h.offset(o):h.position(o),N.position.top+=o.prop("offsetHeight")}k||j.warn("typeahead is now deprecated. Use uib-typeahead instead.");var t=q[0],u=q[1],v=n.$eval(p.typeaheadMinLength);v||0===v||(v=1);var w,x,y=n.$eval(p.typeaheadWaitMs)||0,z=n.$eval(p.typeaheadEditable)!==!1,A=b(p.typeaheadLoading).assign||angular.noop,B=b(p.typeaheadOnSelect),C=angular.isDefined(p.typeaheadSelectOnBlur)?n.$eval(p.typeaheadSelectOnBlur):!1,D=b(p.typeaheadNoResults).assign||angular.noop,E=p.typeaheadInputFormatter?b(p.typeaheadInputFormatter):void 0,F=p.typeaheadAppendToBody?n.$eval(p.typeaheadAppendToBody):!1,G=p.typeaheadAppendToElementId||!1,H=n.$eval(p.typeaheadFocusFirst)!==!1,I=p.typeaheadSelectOnExact?n.$eval(p.typeaheadSelectOnExact):!1,J=b(p.ngModel),K=b(p.ngModel+"($$$p)"),L=function(a,b){return angular.isFunction(J(n))&&u&&u.$options&&u.$options.getterSetter?K(a,{$$$p:b}):J.assign(a,b)},M=i.parse(p.typeahead),N=n.$new(),O=n.$on("$destroy",function(){N.$destroy()});N.$on("$destroy",O);var P="typeahead-"+N.$id+"-"+Math.floor(1e4*Math.random());o.attr({"aria-autocomplete":"list","aria-expanded":!1,"aria-owns":P});var Q=angular.element("<div typeahead-popup></div>");Q.attr({id:P,matches:"matches",active:"activeIdx",select:"select(activeIdx)","move-in-progress":"moveInProgress",query:"query",position:"position"}),angular.isDefined(p.typeaheadTemplateUrl)&&Q.attr("template-url",p.typeaheadTemplateUrl),angular.isDefined(p.typeaheadPopupTemplateUrl)&&Q.attr("popup-template-url",p.typeaheadPopupTemplateUrl);var R=function(){N.matches=[],N.activeIdx=-1,o.attr("aria-expanded",!1)},S=function(a){return P+"-option-"+a};N.$watch("activeIdx",function(a){0>a?o.removeAttr("aria-activedescendant"):o.attr("aria-activedescendant",S(a))});var T=function(a,b){return N.matches.length>b&&a?a.toUpperCase()===N.matches[b].label.toUpperCase():!1},U=function(a){var b={$viewValue:a};A(n,!0),D(n,!1),c.when(M.source(n,b)).then(function(c){var d=a===t.$viewValue;if(d&&w)if(c&&c.length>0){N.activeIdx=H?0:-1,D(n,!1),N.matches.length=0;for(var e=0;e<c.length;e++)b[M.itemName]=c[e],N.matches.push({id:S(e),label:M.viewMapper(N,b),model:c[e]});N.query=a,s(),o.attr("aria-expanded",!0),I&&1===N.matches.length&&T(a,0)&&N.select(0)}else R(),D(n,!0);d&&A(n,!1)},function(){R(),A(n,!1),D(n,!0)})};F&&(angular.element(f).bind("resize",r),e.find("body").bind("scroll",r));var V;N.moveInProgress=!1,
+R(),N.query=void 0;var W,X=function(a){W=d(function(){U(a)},y)},Y=function(){W&&d.cancel(W)};t.$parsers.unshift(function(a){return w=!0,0===v||a&&a.length>=v?y>0?(Y(),X(a)):U(a):(A(n,!1),Y(),R()),z?a:a?void t.$setValidity("editable",!1):(t.$setValidity("editable",!0),null)}),t.$formatters.push(function(a){var b,c,d={};return z||t.$setValidity("editable",!0),E?(d.$model=a,E(n,d)):(d[M.itemName]=a,b=M.viewMapper(n,d),d[M.itemName]=void 0,c=M.viewMapper(n,d),b!==c?b:a)}),N.select=function(a){var b,c,e={};x=!0,e[M.itemName]=c=N.matches[a].model,b=M.modelMapper(n,e),L(n,b),t.$setValidity("editable",!0),t.$setValidity("parse",!0),B(n,{$item:c,$model:b,$label:M.viewMapper(n,e)}),R(),N.$eval(p.typeaheadFocusOnSelect)!==!1&&d(function(){o[0].focus()},0,!1)},o.bind("keydown",function(a){if(0!==N.matches.length&&-1!==l.indexOf(a.which)){if(-1===N.activeIdx&&(9===a.which||13===a.which))return R(),void N.$digest();a.preventDefault(),40===a.which?(N.activeIdx=(N.activeIdx+1)%N.matches.length,N.$digest()):38===a.which?(N.activeIdx=(N.activeIdx>0?N.activeIdx:N.matches.length)-1,N.$digest()):13===a.which||9===a.which?N.$apply(function(){N.select(N.activeIdx)}):27===a.which&&(a.stopPropagation(),R(),N.$digest())}}),o.bind("blur",function(){C&&N.matches.length&&-1!==N.activeIdx&&!x&&(x=!0,N.$apply(function(){N.select(N.activeIdx)})),w=!1,x=!1});var Z=function(a){o[0]!==a.target&&3!==a.which&&0!==N.matches.length&&(R(),g.$$phase||N.$digest())};e.bind("click",Z),n.$on("$destroy",function(){e.unbind("click",Z),(F||G)&&$.remove(),F&&(angular.element(f).unbind("resize",r),e.find("body").unbind("scroll",r)),Q.remove()});var $=a(Q)(N);F?e.find("body").append($):G!==!1?angular.element(e[0].getElementById(G)).append($):o.after($)}}}]).directive("typeaheadPopup",["$typeaheadSuppressWarning","$log",function(a,b){return{scope:{matches:"=",query:"=",active:"=",position:"&",moveInProgress:"=",select:"&"},replace:!0,templateUrl:function(a,b){return b.popupTemplateUrl||"template/typeahead/typeahead-popup.html"},link:function(c,d,e){a||b.warn("typeahead-popup is now deprecated. Use uib-typeahead-popup instead."),c.templateUrl=e.templateUrl,c.isOpen=function(){return c.matches.length>0},c.isActive=function(a){return c.active==a},c.selectActive=function(a){c.active=a},c.selectMatch=function(a){c.select({activeIdx:a})}}}}]).directive("typeaheadMatch",["$templateRequest","$compile","$parse","$typeaheadSuppressWarning","$log",function(a,b,c,d,e){return{restrict:"EA",scope:{index:"=",match:"=",query:"="},link:function(f,g,h){d||e.warn("typeahead-match is now deprecated. Use uib-typeahead-match instead.");var i=c(h.templateUrl)(f.$parent)||"template/typeahead/typeahead-match.html";a(i).then(function(a){b(a.trim())(f,function(a){g.replaceWith(a)})})}}}]).filter("typeaheadHighlight",["$sce","$injector","$log","$typeaheadSuppressWarning",function(a,b,c,d){function e(a){return a.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}function f(a){return/<.*>/g.test(a)}var g;return g=b.has("$sanitize"),function(b,h){return d||c.warn("typeaheadHighlight is now deprecated. Use uibTypeaheadHighlight instead."),!g&&f(b)&&c.warn("Unsafe use of typeahead please use ngSanitize"),b=h?(""+b).replace(new RegExp(e(h),"gi"),"<strong>$&</strong>"):b,g||(b=a.trustAsHtml(b)),b}}]),angular.module("template/accordion/accordion-group.html",[]).run(["$templateCache",function(a){a.put("template/accordion/accordion-group.html",'<div class="panel {{panelClass || \'panel-default\'}}">\n  <div class="panel-heading" ng-keypress="toggleOpen($event)">\n    <h4 class="panel-title">\n      <a href tabindex="0" class="accordion-toggle" ng-click="toggleOpen()" uib-accordion-transclude="heading"><span ng-class="{\'text-muted\': isDisabled}">{{heading}}</span></a>\n    </h4>\n  </div>\n  <div class="panel-collapse collapse" uib-collapse="!isOpen">\n	  <div class="panel-body" ng-transclude></div>\n  </div>\n</div>\n')}]),angular.module("template/accordion/accordion.html",[]).run(["$templateCache",function(a){a.put("template/accordion/accordion.html",'<div class="panel-group" ng-transclude></div>')}]),angular.module("template/alert/alert.html",[]).run(["$templateCache",function(a){a.put("template/alert/alert.html",'<div class="alert" ng-class="[\'alert-\' + (type || \'warning\'), closeable ? \'alert-dismissible\' : null]" role="alert">\n    <button ng-show="closeable" type="button" class="close" ng-click="close({$event: $event})">\n        <span aria-hidden="true">&times;</span>\n        <span class="sr-only">Close</span>\n    </button>\n    <div ng-transclude></div>\n</div>\n')}]),angular.module("template/carousel/carousel.html",[]).run(["$templateCache",function(a){a.put("template/carousel/carousel.html",'<div ng-mouseenter="pause()" ng-mouseleave="play()" class="carousel" ng-swipe-right="prev()" ng-swipe-left="next()">\n  <div class="carousel-inner" ng-transclude></div>\n  <a role="button" href class="left carousel-control" ng-click="prev()" ng-show="slides.length > 1">\n    <span aria-hidden="true" class="glyphicon glyphicon-chevron-left"></span>\n    <span class="sr-only">previous</span>\n  </a>\n  <a role="button" href class="right carousel-control" ng-click="next()" ng-show="slides.length > 1">\n    <span aria-hidden="true" class="glyphicon glyphicon-chevron-right"></span>\n    <span class="sr-only">next</span>\n  </a>\n  <ol class="carousel-indicators" ng-show="slides.length > 1">\n    <li ng-repeat="slide in slides | orderBy:indexOfSlide track by $index" ng-class="{ active: isActive(slide) }" ng-click="select(slide)">\n      <span class="sr-only">slide {{ $index + 1 }} of {{ slides.length }}<span ng-if="isActive(slide)">, currently active</span></span>\n    </li>\n  </ol>\n</div>')}]),angular.module("template/carousel/slide.html",[]).run(["$templateCache",function(a){a.put("template/carousel/slide.html",'<div ng-class="{\n    \'active\': active\n  }" class="item text-center" ng-transclude></div>\n')}]),angular.module("template/datepicker/datepicker.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/datepicker.html",'<div ng-switch="datepickerMode" role="application" ng-keydown="keydown($event)">\n  <uib-daypicker ng-switch-when="day" tabindex="0"></uib-daypicker>\n  <uib-monthpicker ng-switch-when="month" tabindex="0"></uib-monthpicker>\n  <uib-yearpicker ng-switch-when="year" tabindex="0"></uib-yearpicker>\n</div>')}]),angular.module("template/datepicker/day.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/day.html",'<table role="grid" aria-labelledby="{{::uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n  <thead>\n    <tr>\n      <th><button type="button" class="btn btn-default btn-sm pull-left" ng-click="move(-1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-left"></i></button></th>\n      <th colspan="{{::5 + showWeeks}}"><button id="{{::uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm" ng-click="toggleMode()" ng-disabled="datepickerMode === maxMode" tabindex="-1" style="width:100%;"><strong>{{title}}</strong></button></th>\n      <th><button type="button" class="btn btn-default btn-sm pull-right" ng-click="move(1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-right"></i></button></th>\n    </tr>\n    <tr>\n      <th ng-if="showWeeks" class="text-center"></th>\n      <th ng-repeat="label in ::labels track by $index" class="text-center"><small aria-label="{{::label.full}}">{{::label.abbr}}</small></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr ng-repeat="row in rows track by $index">\n      <td ng-if="showWeeks" class="text-center h6"><em>{{ weekNumbers[$index] }}</em></td>\n      <td ng-repeat="dt in row track by dt.date" class="text-center" role="gridcell" id="{{::dt.uid}}" ng-class="::dt.customClass">\n        <button type="button" style="min-width:100%;" class="btn btn-default btn-sm" ng-class="{\'btn-info\': dt.selected, active: isActive(dt)}" ng-click="select(dt.date)" ng-disabled="dt.disabled" tabindex="-1"><span ng-class="::{\'text-muted\': dt.secondary, \'text-info\': dt.current}">{{::dt.label}}</span></button>\n      </td>\n    </tr>\n  </tbody>\n</table>\n')}]),angular.module("template/datepicker/month.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/month.html",'<table role="grid" aria-labelledby="{{::uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n  <thead>\n    <tr>\n      <th><button type="button" class="btn btn-default btn-sm pull-left" ng-click="move(-1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-left"></i></button></th>\n      <th><button id="{{::uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm" ng-click="toggleMode()" ng-disabled="datepickerMode === maxMode" tabindex="-1" style="width:100%;"><strong>{{title}}</strong></button></th>\n      <th><button type="button" class="btn btn-default btn-sm pull-right" ng-click="move(1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-right"></i></button></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr ng-repeat="row in rows track by $index">\n      <td ng-repeat="dt in row track by dt.date" class="text-center" role="gridcell" id="{{::dt.uid}}" ng-class="::dt.customClass">\n        <button type="button" style="min-width:100%;" class="btn btn-default" ng-class="{\'btn-info\': dt.selected, active: isActive(dt)}" ng-click="select(dt.date)" ng-disabled="dt.disabled" tabindex="-1"><span ng-class="::{\'text-info\': dt.current}">{{::dt.label}}</span></button>\n      </td>\n    </tr>\n  </tbody>\n</table>\n')}]),angular.module("template/datepicker/popup.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/popup.html",'<ul class="dropdown-menu" dropdown-nested ng-if="isOpen" style="display: block" ng-style="{top: position.top+\'px\', left: position.left+\'px\'}" ng-keydown="keydown($event)" ng-click="$event.stopPropagation()">\n	<li ng-transclude></li>\n	<li ng-if="showButtonBar" style="padding:10px 9px 2px">\n		<span class="btn-group pull-left">\n			<button type="button" class="btn btn-sm btn-info" ng-click="select(\'today\')" ng-disabled="isDisabled(\'today\')">{{ getText(\'current\') }}</button>\n			<button type="button" class="btn btn-sm btn-danger" ng-click="select(null)">{{ getText(\'clear\') }}</button>\n		</span>\n		<button type="button" class="btn btn-sm btn-success pull-right" ng-click="close()">{{ getText(\'close\') }}</button>\n	</li>\n</ul>\n')}]),angular.module("template/datepicker/year.html",[]).run(["$templateCache",function(a){a.put("template/datepicker/year.html",'<table role="grid" aria-labelledby="{{::uniqueId}}-title" aria-activedescendant="{{activeDateId}}">\n  <thead>\n    <tr>\n      <th><button type="button" class="btn btn-default btn-sm pull-left" ng-click="move(-1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-left"></i></button></th>\n      <th colspan="3"><button id="{{::uniqueId}}-title" role="heading" aria-live="assertive" aria-atomic="true" type="button" class="btn btn-default btn-sm" ng-click="toggleMode()" ng-disabled="datepickerMode === maxMode" tabindex="-1" style="width:100%;"><strong>{{title}}</strong></button></th>\n      <th><button type="button" class="btn btn-default btn-sm pull-right" ng-click="move(1)" tabindex="-1"><i class="glyphicon glyphicon-chevron-right"></i></button></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr ng-repeat="row in rows track by $index">\n      <td ng-repeat="dt in row track by dt.date" class="text-center" role="gridcell" id="{{::dt.uid}}" ng-class="::dt.customClass">\n        <button type="button" style="min-width:100%;" class="btn btn-default" ng-class="{\'btn-info\': dt.selected, active: isActive(dt)}" ng-click="select(dt.date)" ng-disabled="dt.disabled" tabindex="-1"><span ng-class="::{\'text-info\': dt.current}">{{::dt.label}}</span></button>\n      </td>\n    </tr>\n  </tbody>\n</table>\n')}]),angular.module("template/modal/backdrop.html",[]).run(["$templateCache",function(a){a.put("template/modal/backdrop.html",'<div uib-modal-animation-class="fade"\n     modal-in-class="in"\n     ng-style="{\'z-index\': 1040 + (index && 1 || 0) + index*10}"\n></div>\n')}]),angular.module("template/modal/window.html",[]).run(["$templateCache",function(a){a.put("template/modal/window.html",'<div modal-render="{{$isRendered}}" tabindex="-1" role="dialog" class="modal"\n    uib-modal-animation-class="fade"\n    modal-in-class="in"\n    ng-style="{\'z-index\': 1050 + index*10, display: \'block\'}">\n    <div class="modal-dialog" ng-class="size ? \'modal-\' + size : \'\'"><div class="modal-content" uib-modal-transclude></div></div>\n</div>\n')}]),angular.module("template/pagination/pager.html",[]).run(["$templateCache",function(a){a.put("template/pagination/pager.html",'<ul class="pager">\n  <li ng-class="{disabled: noPrevious()||ngDisabled, previous: align}"><a href ng-click="selectPage(page - 1, $event)">{{::getText(\'previous\')}}</a></li>\n  <li ng-class="{disabled: noNext()||ngDisabled, next: align}"><a href ng-click="selectPage(page + 1, $event)">{{::getText(\'next\')}}</a></li>\n</ul>\n')}]),angular.module("template/pagination/pagination.html",[]).run(["$templateCache",function(a){a.put("template/pagination/pagination.html",'<ul class="pagination">\n  <li ng-if="::boundaryLinks" ng-class="{disabled: noPrevious()||ngDisabled}" class="pagination-first"><a href ng-click="selectPage(1, $event)">{{::getText(\'first\')}}</a></li>\n  <li ng-if="::directionLinks" ng-class="{disabled: noPrevious()||ngDisabled}" class="pagination-prev"><a href ng-click="selectPage(page - 1, $event)">{{::getText(\'previous\')}}</a></li>\n  <li ng-repeat="page in pages track by $index" ng-class="{active: page.active,disabled: ngDisabled&&!page.active}" class="pagination-page"><a href ng-click="selectPage(page.number, $event)">{{page.text}}</a></li>\n  <li ng-if="::directionLinks" ng-class="{disabled: noNext()||ngDisabled}" class="pagination-next"><a href ng-click="selectPage(page + 1, $event)">{{::getText(\'next\')}}</a></li>\n  <li ng-if="::boundaryLinks" ng-class="{disabled: noNext()||ngDisabled}" class="pagination-last"><a href ng-click="selectPage(totalPages, $event)">{{::getText(\'last\')}}</a></li>\n</ul>\n')}]),angular.module("template/tooltip/tooltip-html-popup.html",[]).run(["$templateCache",function(a){a.put("template/tooltip/tooltip-html-popup.html",'<div\n  tooltip-animation-class="fade"\n  uib-tooltip-classes\n  ng-class="{ in: isOpen() }">\n  <div class="tooltip-arrow"></div>\n  <div class="tooltip-inner" ng-bind-html="contentExp()"></div>\n</div>\n')}]),angular.module("template/tooltip/tooltip-popup.html",[]).run(["$templateCache",function(a){a.put("template/tooltip/tooltip-popup.html",'<div\n  tooltip-animation-class="fade"\n  uib-tooltip-classes\n  ng-class="{ in: isOpen() }">\n  <div class="tooltip-arrow"></div>\n  <div class="tooltip-inner" ng-bind="content"></div>\n</div>\n')}]),angular.module("template/tooltip/tooltip-template-popup.html",[]).run(["$templateCache",function(a){a.put("template/tooltip/tooltip-template-popup.html",'<div\n  tooltip-animation-class="fade"\n  uib-tooltip-classes\n  ng-class="{ in: isOpen() }">\n  <div class="tooltip-arrow"></div>\n  <div class="tooltip-inner"\n    uib-tooltip-template-transclude="contentExp()"\n    tooltip-template-transclude-scope="originScope()"></div>\n</div>\n')}]),angular.module("template/popover/popover-html.html",[]).run(["$templateCache",function(a){a.put("template/popover/popover-html.html",'<div tooltip-animation-class="fade"\n  uib-tooltip-classes\n  ng-class="{ in: isOpen() }">\n  <div class="arrow"></div>\n\n  <div class="popover-inner">\n      <h3 class="popover-title" ng-bind="title" ng-if="title"></h3>\n      <div class="popover-content" ng-bind-html="contentExp()"></div>\n  </div>\n</div>\n')}]),angular.module("template/popover/popover-template.html",[]).run(["$templateCache",function(a){a.put("template/popover/popover-template.html",'<div tooltip-animation-class="fade"\n  uib-tooltip-classes\n  ng-class="{ in: isOpen() }">\n  <div class="arrow"></div>\n\n  <div class="popover-inner">\n      <h3 class="popover-title" ng-bind="title" ng-if="title"></h3>\n      <div class="popover-content"\n        uib-tooltip-template-transclude="contentExp()"\n        tooltip-template-transclude-scope="originScope()"></div>\n  </div>\n</div>\n')}]),angular.module("template/popover/popover.html",[]).run(["$templateCache",function(a){a.put("template/popover/popover.html",'<div tooltip-animation-class="fade"\n  uib-tooltip-classes\n  ng-class="{ in: isOpen() }">\n  <div class="arrow"></div>\n\n  <div class="popover-inner">\n      <h3 class="popover-title" ng-bind="title" ng-if="title"></h3>\n      <div class="popover-content" ng-bind="content"></div>\n  </div>\n</div>\n')}]),angular.module("template/progressbar/bar.html",[]).run(["$templateCache",function(a){a.put("template/progressbar/bar.html",'<div class="progress-bar" ng-class="type && \'progress-bar-\' + type" role="progressbar" aria-valuenow="{{value}}" aria-valuemin="0" aria-valuemax="{{max}}" ng-style="{width: (percent < 100 ? percent : 100) + \'%\'}" aria-valuetext="{{percent | number:0}}%" aria-labelledby="{{::title}}" style="min-width: 0;" ng-transclude></div>\n')}]),angular.module("template/progressbar/progress.html",[]).run(["$templateCache",function(a){a.put("template/progressbar/progress.html",'<div class="progress" ng-transclude aria-labelledby="{{::title}}"></div>')}]),angular.module("template/progressbar/progressbar.html",[]).run(["$templateCache",function(a){a.put("template/progressbar/progressbar.html",'<div class="progress">\n  <div class="progress-bar" ng-class="type && \'progress-bar-\' + type" role="progressbar" aria-valuenow="{{value}}" aria-valuemin="0" aria-valuemax="{{max}}" ng-style="{width: (percent < 100 ? percent : 100) + \'%\'}" aria-valuetext="{{percent | number:0}}%" aria-labelledby="{{::title}}" style="min-width: 0;" ng-transclude></div>\n</div>\n')}]),angular.module("template/rating/rating.html",[]).run(["$templateCache",function(a){a.put("template/rating/rating.html",'<span ng-mouseleave="reset()" ng-keydown="onKeydown($event)" tabindex="0" role="slider" aria-valuemin="0" aria-valuemax="{{range.length}}" aria-valuenow="{{value}}">\n    <span ng-repeat-start="r in range track by $index" class="sr-only">({{ $index < value ? \'*\' : \' \' }})</span>\n    <i ng-repeat-end ng-mouseenter="enter($index + 1)" ng-click="rate($index + 1)" class="glyphicon" ng-class="$index < value && (r.stateOn || \'glyphicon-star\') || (r.stateOff || \'glyphicon-star-empty\')" ng-attr-title="{{r.title}}" aria-valuetext="{{r.title}}"></i>\n</span>\n')}]),angular.module("template/tabs/tab.html",[]).run(["$templateCache",function(a){a.put("template/tabs/tab.html",'<li ng-class="{active: active, disabled: disabled}">\n  <a href ng-click="select()" uib-tab-heading-transclude>{{heading}}</a>\n</li>\n')}]),angular.module("template/tabs/tabset.html",[]).run(["$templateCache",function(a){a.put("template/tabs/tabset.html",'<div>\n  <ul class="nav nav-{{type || \'tabs\'}}" ng-class="{\'nav-stacked\': vertical, \'nav-justified\': justified}" ng-transclude></ul>\n  <div class="tab-content">\n    <div class="tab-pane" \n         ng-repeat="tab in tabs" \n         ng-class="{active: tab.active}"\n         uib-tab-content-transclude="tab">\n    </div>\n  </div>\n</div>\n')}]),angular.module("template/timepicker/timepicker.html",[]).run(["$templateCache",function(a){a.put("template/timepicker/timepicker.html",'<table>\n  <tbody>\n    <tr class="text-center" ng-show="::showSpinners">\n      <td><a ng-click="incrementHours()" ng-class="{disabled: noIncrementHours()}" class="btn btn-link" ng-disabled="noIncrementHours()" tabindex="{{::tabindex}}"><span class="glyphicon glyphicon-chevron-up"></span></a></td>\n      <td>&nbsp;</td>\n      <td><a ng-click="incrementMinutes()" ng-class="{disabled: noIncrementMinutes()}" class="btn btn-link" ng-disabled="noIncrementMinutes()" tabindex="{{::tabindex}}"><span class="glyphicon glyphicon-chevron-up"></span></a></td>\n      <td ng-show="showMeridian"></td>\n    </tr>\n    <tr>\n      <td class="form-group" ng-class="{\'has-error\': invalidHours}">\n        <input style="width:50px;" type="text" ng-model="hours" ng-change="updateHours()" class="form-control text-center" ng-readonly="::readonlyInput" maxlength="2" tabindex="{{::tabindex}}">\n      </td>\n      <td>:</td>\n      <td class="form-group" ng-class="{\'has-error\': invalidMinutes}">\n        <input style="width:50px;" type="text" ng-model="minutes" ng-change="updateMinutes()" class="form-control text-center" ng-readonly="::readonlyInput" maxlength="2" tabindex="{{::tabindex}}">\n      </td>\n      <td ng-show="showMeridian"><button type="button" ng-class="{disabled: noToggleMeridian()}" class="btn btn-default text-center" ng-click="toggleMeridian()" ng-disabled="noToggleMeridian()" tabindex="{{::tabindex}}">{{meridian}}</button></td>\n    </tr>\n    <tr class="text-center" ng-show="::showSpinners">\n      <td><a ng-click="decrementHours()" ng-class="{disabled: noDecrementHours()}" class="btn btn-link" ng-disabled="noDecrementHours()" tabindex="{{::tabindex}}"><span class="glyphicon glyphicon-chevron-down"></span></a></td>\n      <td>&nbsp;</td>\n      <td><a ng-click="decrementMinutes()" ng-class="{disabled: noDecrementMinutes()}" class="btn btn-link" ng-disabled="noDecrementMinutes()" tabindex="{{::tabindex}}"><span class="glyphicon glyphicon-chevron-down"></span></a></td>\n      <td ng-show="showMeridian"></td>\n    </tr>\n  </tbody>\n</table>\n')}]),angular.module("template/typeahead/typeahead-match.html",[]).run(["$templateCache",function(a){a.put("template/typeahead/typeahead-match.html",'<a href tabindex="-1" ng-bind-html="match.label | uibTypeaheadHighlight:query"></a>\n')}]),angular.module("template/typeahead/typeahead-popup.html",[]).run(["$templateCache",function(a){a.put("template/typeahead/typeahead-popup.html",'<ul class="dropdown-menu" ng-show="isOpen() && !moveInProgress" ng-style="{top: position().top+\'px\', left: position().left+\'px\'}" style="display: block;" role="listbox" aria-hidden="{{!isOpen()}}">\n    <li ng-repeat="match in matches track by $index" ng-class="{active: isActive($index) }" ng-mouseenter="selectActive($index)" ng-click="selectMatch($index)" role="option" id="{{::match.id}}">\n        <div uib-typeahead-match index="$index" match="match" query="query" template-url="templateUrl"></div>\n    </li>\n</ul>\n')}]),!angular.$$csp()&&angular.element(document).find("head").prepend('<style type="text/css">.ng-animate.item:not(.left):not(.right){-webkit-transition:0s ease-in-out left;transition:0s ease-in-out left}</style>'),"undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.5",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.5",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.5",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),
+this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger("hidden.bs.dropdown",f))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.5",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.5",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.5",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.5",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.5",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.5",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery),function(a){"use strict";"function"==typeof define&&define.amd?define(a):"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=a():"undefined"!=typeof Package?Sortable=a():window.Sortable=a()}(function(){"use strict";function a(a,b){this.el=a,this.options=b=s({},b),a[J]=this;var d={group:Math.random(),sort:!0,disabled:!1,store:null,handle:null,scroll:!0,scrollSensitivity:30,scrollSpeed:10,draggable:/[uo]l/i.test(a.nodeName)?"li":">*",ghostClass:"sortable-ghost",ignore:"a, img",filter:null,animation:0,setData:function(a,b){a.setData("Text",b.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0};for(var e in d)!(e in b)&&(b[e]=d[e]);var g=b.group;g&&"object"==typeof g||(g=b.group={name:g}),["pull","put"].forEach(function(a){a in g||(g[a]=!0)}),b.groups=" "+g.name+(g.put.join?" "+g.put.join(" "):"")+" ";for(var h in this)"_"===h.charAt(0)&&(this[h]=c(this,this[h]));f(a,"mousedown",this._onTapStart),f(a,"touchstart",this._onTapStart),f(a,"dragover",this),f(a,"dragenter",this),R.push(this._onDragOver),b.store&&this.sort(b.store.get(this))}function b(a){v&&v.state!==a&&(i(v,"display",a?"none":""),!a&&v.state&&w.insertBefore(v,t),v.state=a)}function c(a,b){var c=Q.call(arguments,2);return b.bind?b.bind.apply(b,[a].concat(c)):function(){return b.apply(a,c.concat(Q.call(arguments)))}}function d(a,b,c){if(a){c=c||L,b=b.split(".");var d=b.shift().toUpperCase(),e=new RegExp("\\s("+b.join("|")+")(?=\\s)","g");do if(">*"===d&&a.parentNode===c||(""===d||a.nodeName.toUpperCase()==d)&&(!b.length||((" "+a.className+" ").match(e)||[]).length==b.length))return a;while(a!==c&&(a=a.parentNode))}return null}function e(a){a.dataTransfer.dropEffect="move",a.preventDefault()}function f(a,b,c){a.addEventListener(b,c,!1)}function g(a,b,c){a.removeEventListener(b,c,!1)}function h(a,b,c){if(a)if(a.classList)a.classList[c?"add":"remove"](b);else{var d=(" "+a.className+" ").replace(I," ").replace(" "+b+" "," ");a.className=(d+(c?" "+b:"")).replace(I," ")}}function i(a,b,c){var d=a&&a.style;if(d){if(void 0===c)return L.defaultView&&L.defaultView.getComputedStyle?c=L.defaultView.getComputedStyle(a,""):a.currentStyle&&(c=a.currentStyle),void 0===b?c:c[b];b in d||(b="-webkit-"+b),d[b]=c+("string"==typeof c?"":"px")}}function j(a,b,c){if(a){var d=a.getElementsByTagName(b),e=0,f=d.length;if(c)for(;f>e;e++)c(d[e],e);return d}return[]}function k(a,b,c,d,e,f,g){var h=L.createEvent("Event"),i=(a||b[J]).options,j="on"+c.charAt(0).toUpperCase()+c.substr(1);h.initEvent(c,!0,!0),h.to=b,h.from=e||b,h.item=d||b,h.clone=v,h.oldIndex=f,h.newIndex=g,b.dispatchEvent(h),i[j]&&i[j].call(a,h)}function l(a,b,c,d,e,f){var g,h,i=a[J],j=i.options.onMove;return j&&(g=L.createEvent("Event"),g.initEvent("move",!0,!0),g.to=b,g.from=a,g.dragged=c,g.draggedRect=d,g.related=e||b,g.relatedRect=f||b.getBoundingClientRect(),h=j.call(i,g)),h}function m(a){a.draggable=!1}function n(){O=!1}function o(a,b){var c=a.lastElementChild,d=c.getBoundingClientRect();return b.clientY-(d.top+d.height)>5&&c}function p(a){for(var b=a.tagName+a.className+a.src+a.href+a.textContent,c=b.length,d=0;c--;)d+=b.charCodeAt(c);return d.toString(36)}function q(a){for(var b=0;a&&(a=a.previousElementSibling);)"TEMPLATE"!==a.nodeName.toUpperCase()&&b++;return b}function r(a,b){var c,d;return function(){void 0===c&&(c=arguments,d=this,setTimeout(function(){1===c.length?a.call(d,c[0]):a.apply(d,c),c=void 0},b))}}function s(a,b){if(a&&b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}var t,u,v,w,x,y,z,A,B,C,D,E,F,G,H={},I=/\s+/g,J="Sortable"+(new Date).getTime(),K=window,L=K.document,M=K.parseInt,N=!!("draggable"in L.createElement("div")),O=!1,P=Math.abs,Q=[].slice,R=[],S=r(function(a,b,c){if(c&&b.scroll){var d,e,f,g,h=b.scrollSensitivity,i=b.scrollSpeed,j=a.clientX,k=a.clientY,l=window.innerWidth,m=window.innerHeight;if(z!==c&&(y=b.scroll,z=c,y===!0)){y=c;do if(y.offsetWidth<y.scrollWidth||y.offsetHeight<y.scrollHeight)break;while(y=y.parentNode)}y&&(d=y,e=y.getBoundingClientRect(),f=(P(e.right-j)<=h)-(P(e.left-j)<=h),g=(P(e.bottom-k)<=h)-(P(e.top-k)<=h)),f||g||(f=(h>=l-j)-(h>=j),g=(h>=m-k)-(h>=k),(f||g)&&(d=K)),(H.vx!==f||H.vy!==g||H.el!==d)&&(H.el=d,H.vx=f,H.vy=g,clearInterval(H.pid),d&&(H.pid=setInterval(function(){d===K?K.scrollTo(K.pageXOffset+f*i,K.pageYOffset+g*i):(g&&(d.scrollTop+=g*i),f&&(d.scrollLeft+=f*i))},24)))}},30);return a.prototype={constructor:a,_onTapStart:function(a){var b=this,c=this.el,e=this.options,f=a.type,g=a.touches&&a.touches[0],h=(g||a).target,i=h,j=e.filter;if(!("mousedown"===f&&0!==a.button||e.disabled)&&(h=d(h,e.draggable,c))){if(C=q(h),
+"function"==typeof j){if(j.call(this,a,h,this))return k(b,i,"filter",h,c,C),void a.preventDefault()}else if(j&&(j=j.split(",").some(function(a){return a=d(i,a.trim(),c),a?(k(b,a,"filter",h,c,C),!0):void 0})))return void a.preventDefault();(!e.handle||d(i,e.handle,c))&&this._prepareDragStart(a,g,h)}},_prepareDragStart:function(a,b,c){var d,e=this,g=e.el,h=e.options,i=g.ownerDocument;c&&!t&&c.parentNode===g&&(F=a,w=g,t=c,x=t.nextSibling,E=h.group,d=function(){e._disableDelayedDrag(),t.draggable=!0,h.ignore.split(",").forEach(function(a){j(t,a.trim(),m)}),e._triggerDragStart(b)},f(i,"mouseup",e._onDrop),f(i,"touchend",e._onDrop),f(i,"touchcancel",e._onDrop),h.delay?(f(i,"mousemove",e._disableDelayedDrag),f(i,"touchmove",e._disableDelayedDrag),e._dragStartTimer=setTimeout(d,h.delay)):d())},_disableDelayedDrag:function(){var a=this.el.ownerDocument;clearTimeout(this._dragStartTimer),g(a,"mousemove",this._disableDelayedDrag),g(a,"touchmove",this._disableDelayedDrag)},_triggerDragStart:function(a){a?(F={target:t,clientX:a.clientX,clientY:a.clientY},this._onDragStart(F,"touch")):N?(f(t,"dragend",this),f(w,"dragstart",this._onDragStart)):this._onDragStart(F,!0);try{L.selection?L.selection.empty():window.getSelection().removeAllRanges()}catch(b){}},_dragStarted:function(){w&&t&&(h(t,this.options.ghostClass,!0),a.active=this,k(this,w,"start",t,w,C))},_emulateDragOver:function(){if(G){i(u,"display","none");var a=L.elementFromPoint(G.clientX,G.clientY),b=a,c=" "+this.options.group.name,d=R.length;if(b)do{if(b[J]&&b[J].options.groups.indexOf(c)>-1){for(;d--;)R[d]({clientX:G.clientX,clientY:G.clientY,target:a,rootEl:b});break}a=b}while(b=b.parentNode);i(u,"display","")}},_onTouchMove:function(a){if(F){var b=a.touches?a.touches[0]:a,c=b.clientX-F.clientX,d=b.clientY-F.clientY,e=a.touches?"translate3d("+c+"px,"+d+"px,0)":"translate("+c+"px,"+d+"px)";G=b,i(u,"webkitTransform",e),i(u,"mozTransform",e),i(u,"msTransform",e),i(u,"transform",e),a.preventDefault()}},_onDragStart:function(a,b){var c=a.dataTransfer,d=this.options;if(this._offUpEvents(),"clone"==E.pull&&(v=t.cloneNode(!0),i(v,"display","none"),w.insertBefore(v,t)),b){var e,g=t.getBoundingClientRect(),h=i(t);u=t.cloneNode(!0),i(u,"top",g.top-M(h.marginTop,10)),i(u,"left",g.left-M(h.marginLeft,10)),i(u,"width",g.width),i(u,"height",g.height),i(u,"opacity","0.8"),i(u,"position","fixed"),i(u,"zIndex","100000"),w.appendChild(u),e=u.getBoundingClientRect(),i(u,"width",2*g.width-e.width),i(u,"height",2*g.height-e.height),"touch"===b?(f(L,"touchmove",this._onTouchMove),f(L,"touchend",this._onDrop),f(L,"touchcancel",this._onDrop)):(f(L,"mousemove",this._onTouchMove),f(L,"mouseup",this._onDrop)),this._loopId=setInterval(this._emulateDragOver,150)}else c&&(c.effectAllowed="move",d.setData&&d.setData.call(this,c,t)),f(L,"drop",this);setTimeout(this._dragStarted,0)},_onDragOver:function(a){var c,e,f,g=this.el,h=this.options,j=h.group,k=j.put,m=E===j,p=h.sort;if(void 0!==a.preventDefault&&(a.preventDefault(),!h.dragoverBubble&&a.stopPropagation()),E&&!h.disabled&&(m?p||(f=!w.contains(t)):E.pull&&k&&(E.name===j.name||k.indexOf&&~k.indexOf(E.name)))&&(void 0===a.rootEl||a.rootEl===this.el)){if(S(a,h,this.el),O)return;if(c=d(a.target,h.draggable,g),e=t.getBoundingClientRect(),f)return b(!0),void(v||x?w.insertBefore(t,v||x):p||w.appendChild(t));if(0===g.children.length||g.children[0]===u||g===a.target&&(c=o(g,a))){if(c){if(c.animated)return;r=c.getBoundingClientRect()}b(m),l(w,g,t,e,c,r)!==!1&&(g.appendChild(t),this._animate(e,t),c&&this._animate(r,c))}else if(c&&!c.animated&&c!==t&&void 0!==c.parentNode[J]){A!==c&&(A=c,B=i(c));var q,r=c.getBoundingClientRect(),s=r.right-r.left,y=r.bottom-r.top,z=/left|right|inline/.test(B.cssFloat+B.display),C=c.offsetWidth>t.offsetWidth,D=c.offsetHeight>t.offsetHeight,F=(z?(a.clientX-r.left)/s:(a.clientY-r.top)/y)>.5,G=c.nextElementSibling,H=l(w,g,t,e,c,r);H!==!1&&(O=!0,setTimeout(n,30),b(m),q=1===H||-1===H?1===H:z?c.previousElementSibling===t&&!C||F&&C:G!==t&&!D||F&&D,q&&!G?g.appendChild(t):c.parentNode.insertBefore(t,q?G:c),this._animate(e,t),this._animate(r,c))}}},_animate:function(a,b){var c=this.options.animation;if(c){var d=b.getBoundingClientRect();i(b,"transition","none"),i(b,"transform","translate3d("+(a.left-d.left)+"px,"+(a.top-d.top)+"px,0)"),b.offsetWidth,i(b,"transition","all "+c+"ms"),i(b,"transform","translate3d(0,0,0)"),clearTimeout(b.animated),b.animated=setTimeout(function(){i(b,"transition",""),i(b,"transform",""),b.animated=!1},c)}},_offUpEvents:function(){var a=this.el.ownerDocument;g(L,"touchmove",this._onTouchMove),g(a,"mouseup",this._onDrop),g(a,"touchend",this._onDrop),g(a,"touchcancel",this._onDrop)},_onDrop:function(b){var c=this.el,d=this.options;clearInterval(this._loopId),clearInterval(H.pid),clearTimeout(this._dragStartTimer),g(L,"drop",this),g(L,"mousemove",this._onTouchMove),g(c,"dragstart",this._onDragStart),this._offUpEvents(),b&&(b.preventDefault(),!d.dropBubble&&b.stopPropagation(),u&&u.parentNode.removeChild(u),t&&(g(t,"dragend",this),m(t),h(t,this.options.ghostClass,!1),w!==t.parentNode?(D=q(t),k(null,t.parentNode,"sort",t,w,C,D),k(this,w,"sort",t,w,C,D),k(null,t.parentNode,"add",t,w,C,D),k(this,w,"remove",t,w,C,D)):(v&&v.parentNode.removeChild(v),t.nextSibling!==x&&(D=q(t),k(this,w,"update",t,w,C,D),k(this,w,"sort",t,w,C,D))),a.active&&(k(this,w,"end",t,w,C,D),this.save())),w=t=u=x=v=y=z=F=G=A=B=E=a.active=null)},handleEvent:function(a){var b=a.type;"dragover"===b||"dragenter"===b?t&&(this._onDragOver(a),e(a)):("drop"===b||"dragend"===b)&&this._onDrop(a)},toArray:function(){for(var a,b=[],c=this.el.children,e=0,f=c.length,g=this.options;f>e;e++)a=c[e],d(a,g.draggable,this.el)&&b.push(a.getAttribute(g.dataIdAttr)||p(a));return b},sort:function(a){var b={},c=this.el;this.toArray().forEach(function(a,e){var f=c.children[e];d(f,this.options.draggable,c)&&(b[a]=f)},this),a.forEach(function(a){b[a]&&(c.removeChild(b[a]),c.appendChild(b[a]))})},save:function(){var a=this.options.store;a&&a.set(this)},closest:function(a,b){return d(a,b||this.options.draggable,this.el)},option:function(a,b){var c=this.options;return void 0===b?c[a]:void(c[a]=b)},destroy:function(){var a=this.el;a[J]=null,g(a,"mousedown",this._onTapStart),g(a,"touchstart",this._onTapStart),g(a,"dragover",this),g(a,"dragenter",this),Array.prototype.forEach.call(a.querySelectorAll("[draggable]"),function(a){a.removeAttribute("draggable")}),R.splice(R.indexOf(this._onDragOver),1),this._onDrop(),this.el=a=null}},a.utils={on:f,off:g,css:i,find:j,bind:c,is:function(a,b){return!!d(a,b,a)},extend:s,throttle:r,closest:d,toggleClass:h,index:q},a.version="1.2.1",a.create=function(b,c){return new a(b,c)},a}),function(a){"use strict";window.angular&&window.Sortable?a(angular,Sortable):"function"==typeof define&&define.amd&&define(["angular","./Sortable"],a)}(function(a,b){"use strict";a.module("ng-sortable",[]).constant("ngSortableVersion","0.3.7").constant("ngSortableConfig",{}).directive("ngSortable",["$parse","ngSortableConfig",function(c,d){function e(b){var d=a.element(b).scope(),e=[].filter.call(b.childNodes,function(a){return 8===a.nodeType&&-1!==a.nodeValue.indexOf("ngRepeat:")})[0];if(!e)return null;e=e.nodeValue.match(/ngRepeat:\s*(?:\(.*?,\s*)?([^\s)]+)[\s)]+in\s+([^\s|]+)/);var f=c(e[1]),g=c(e[2]);return{item:function(b){return f(a.element(b).scope())},items:function(){return g(d)}}}var f,g;return{restrict:"AC",scope:{ngSortable:"=?"},link:function(c,h,i){function j(a,b){var c="on"+a.type.charAt(0).toUpperCase()+a.type.substr(1);n[c]&&n[c]({model:b||o&&o.item(a.item),models:o&&o.items(),oldIndex:a.oldIndex,newIndex:a.newIndex})}function k(b){if(o){var d=b.oldIndex,h=b.newIndex,i=o.items();if(m!==b.from){var j=e(b.from),k=j.items();d=k.indexOf(j.item(b.item)),f=k[d],b.clone?(b.from.removeChild(b.clone),f=a.copy(f)):k.splice(d,1),i.splice(h,0,f),b.from.insertBefore(b.item,g)}else i.splice(h,0,i.splice(d,1)[0]);c.$apply()}}var l,m=h[0],n=a.extend(c.ngSortable||{},d),o=e(m),p=[];l=b.create(m,Object.keys(n).reduce(function(a,b){return a[b]=a[b]||n[b],a},{onStart:function(a){g=a.item.nextSibling,j(a),c.$apply()},onEnd:function(a){j(a,f),c.$apply()},onAdd:function(a){k(a),j(a,f),c.$apply()},onUpdate:function(a){k(a),j(a)},onRemove:function(a){j(a,f)},onSort:function(a){j(a)}})),h.on("$destroy",function(){a.forEach(p,function(a){a()}),l.destroy(),p=null,l=null,g=null}),a.forEach(["sort","disabled","draggable","handle","animation","onStart","onEnd","onAdd","onUpdate","onRemove","onSort"],function(a){p.push(c.$watch("ngSortable."+a,function(b){void 0!==b&&(n[a]=b,/^on[A-Z]/.test(a)||l.option(a,b))}))})}}}])}),function(a){"use strict";"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=a(require("./Sortable")):"function"==typeof define&&define.amd?define(["./Sortable"],a):window.SortableMixin=a(Sortable)}(function(a){"use strict";function b(a){return a.sortableOptions&&a.sortableOptions.model||g.model}function c(a){var c=b(a),d=a.state&&a.state[c]||a.props[c];return d.slice()}function d(a,b){for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}var e,f,g={ref:"list",model:"items",animation:100,onStart:"handleStart",onEnd:"handleEnd",onAdd:"handleAdd",onUpdate:"handleUpdate",onRemove:"handleRemove",onSort:"handleSort",onFilter:"handleFilter"},h={sortableMixinVersion:"0.1.0",_sortableInstance:null,componentDidMount:function(){var h=d(d({},g),this.sortableOptions||{}),i=d({},h),j=function(a,b){var c=this[h[a]];c&&c.call(this,b,this._sortableInstance)}.bind(this);"onStart onEnd onAdd onSort onUpdate onRemove onFilter".split(" ").forEach(function(a){i[a]=function(d){if("onStart"===a)e=d.item.nextElementSibling,f=this;else if("onAdd"===a||"onUpdate"===a){d.from.insertBefore(d.item,e);var g,h,i={},k={},l=d.oldIndex,m=d.newIndex,n=c(this);"onAdd"===a?(g=c(f),h=g.splice(l,1)[0],n.splice(m,0,h),k[b(f)]=g):n.splice(m,0,n.splice(l,1)[0]),i[b(this)]=n,this.setState(i),this!==f&&f.setState(k)}setTimeout(function(){j(a,d)},0)}.bind(this)},this),this._sortableInstance=a.create((this.refs[h.ref]||this).getDOMNode(),i)},componentWillReceiveProps:function(a){var c={},d=b(this),e=a[d];e&&(c[d]=e,this.setState(c))},componentWillUnmount:function(){this._sortableInstance.destroy(),this._sortableInstance=null}};return h}),function(a,b){"use strict";angular.module("adf",["adf.provider","ui.bootstrap"]).value("adfTemplatePath","../src/templates/").value("rowTemplate",'<adf-dashboard-row row="row" adf-model="adfModel" options="options" edit-mode="editMode" ng-repeat="row in column.rows" />').value("columnTemplate",'<adf-dashboard-column column="column" adf-model="adfModel" options="options" edit-mode="editMode" ng-repeat="column in row.columns" />').value("adfVersion","0.10.0"),angular.module("adf").directive("adfDashboardColumn",["$log","$compile","adfTemplatePath","rowTemplate","dashboard",function(a,b,c,d,e){function f(a,b,c){var d=b.widgets;a.$apply(function(){d.splice(c.newIndex,0,d.splice(c.oldIndex,1)[0])})}function g(a,b){for(var c=null,d=0;d<a.widgets.length;d++){var e=a.widgets[d];if(e.wid===b){c=e;break}}return c}function h(a,b){for(var c=null,d=0;d<a.rows.length;d++){for(var e=a.rows[d],f=0;f<e.columns.length;f++){var g=e.columns[f];if(g.cid===b){c=g;break}g.rows&&(c=h(g,b))}if(c)break}return c}function i(a){var b=a.getAttribute("adf-id");return b?parseInt(b):-1}function j(b,c,d,e){var f=i(e.from),j=h(c,f);if(j){var k=i(e.item),l=g(j,k);l?b.$apply(function(){d.widgets||(d.widgets=[]),d.widgets.splice(e.newIndex,0,l)}):a.warn("could not find widget with id "+k)}else a.warn("could not find column with id "+f)}function k(a,b,c){a.$apply(function(){b.widgets.splice(c.oldIndex,1)})}function l(a,b,c,d){var e=b[0],g=Sortable.create(e,{group:"widgets",handle:".adf-move",ghostClass:"placeholder",animation:150,onAdd:function(b){j(a,c,d,b)},onRemove:function(b){k(a,d,b)},onUpdate:function(b){f(a,d,b)}});b.on("$destroy",function(){g.destroy()})}return{restrict:"E",replace:!0,scope:{column:"=",editMode:"=",adfModel:"=",options:"="},templateUrl:c+"dashboard-column.html",link:function(a,c){var f=a.column;f.cid||(f.cid=e.id()),angular.isDefined(f.rows)&&angular.isArray(f.rows)?b(d)(a,function(a){c.append(a)}):l(a,c,a.adfModel,f)}}}]),angular.module("adf").directive("adfDashboard",["$rootScope","$log","$modal","dashboard","adfTemplatePath",function(a,b,c,d,e){function f(a){switch(angular.isDefined(a)?a.toLowerCase():null){case"true":case"yes":case"1":return!0;case"false":case"no":case"0":case null:return!1;default:return Boolean(a)}}function g(a,b){if(a.widgets&&a.widgets.length>0)for(var c=a.widgets.shift();c;)b.widgets.push(c),c=a.widgets.shift()}function h(a,b,c){return c=c||0,angular.isDefined(a.rows)&&angular.forEach(a.rows,function(a){angular.forEach(a.columns,function(a){a.widgets||(a.widgets=[]),angular.isDefined(b[c])&&(angular.isDefined(a.rows)||(g(b[c],a),c++)),c=h(a,b,c)})}),c}function i(a,b){return b=b||[],angular.isDefined(a.rows)&&angular.forEach(a.rows,function(a){angular.forEach(a.columns,function(a){b.push(a),i(a,b)})}),b}function j(a,b){var c=i(a),d=0;for(a.rows=angular.copy(b.rows);d<c.length;)d=h(a,c,d)}function k(a){var b={},c=d.widgets[a].config;return c&&(b=angular.copy(c)),b}function l(a){var c=null;if(!angular.isArray(a.rows))return b.error("model does not have any rows"),null;for(var d=0;d<a.rows.length;d++){var e=a.rows[d];if(angular.isArray(e.columns))for(var f=0;f<e.columns.length;f++){var g=e.columns[f];if(!g.rows){c=g;break}}if(c)break}return c}function m(a,c){if(a){var d=l(a);d?(d.widgets||(d.widgets=[]),d.widgets.unshift(c)):b.error("could not find first widget column")}else b.error("model is undefined")}return{replace:!0,restrict:"EA",transclude:!1,scope:{structure:"@",name:"@",collapsible:"@",editable:"@",maximizable:"@",adfModel:"=",adfWidgetFilter:"="},controller:["$scope",function(f){var g={},h={},i=null,l={},n=f.name;f.$watch("adfModel",function(a,c){(null!==c||null===a&&null===c)&&(g=f.adfModel,i=f.adfWidgetFilter,g&&g.rows||(l=f.structure,h=d.structures[l],h?(g?g.rows=angular.copy(h).rows:g=angular.copy(h),g.structure=l):b.error("could not find structure "+l)),g?(g.title||(g.title="Dashboard"),g.titleTemplateUrl||(g.titleTemplateUrl=e+"dashboard-title.html"),f.model=g):b.error("could not find or create model"))},!0),f.editMode=!1,f.editClass="",f.toggleEditMode=function(){f.editMode=!f.editMode,f.editMode&&(f.modelCopy=angular.copy(f.adfModel,{})),f.editMode||a.$broadcast("adfDashboardChanged",n,g)},f.collapseAll=function(b){a.$broadcast("adfDashboardCollapseExapand",{collapseExpandStatus:b})},f.cancelEditMode=function(){f.editMode=!1,f.modelCopy=angular.copy(f.modelCopy,f.adfModel),a.$broadcast("adfDashboardEditsCancelled")},f.editDashboardDialog=function(){var a=f.$new();a.copy={title:g.title},a.structures=d.structures;var h=c.open({scope:a,templateUrl:e+"dashboard-edit.html",backdrop:"static"});f.changeStructure=function(a,c){b.info("change structure to "+a),j(g,c)},a.closeDialog=function(){g.title=a.copy.title,h.close(),a.$destroy()}},f.addWidgetDialog=function(){var b,g=f.$new(),h=f.model;angular.isFunction(i)?(b={},angular.forEach(d.widgets,function(a,c){i(a,c,h)&&(b[c]=a)})):b=d.widgets,g.widgets=b;var j={scope:g,templateUrl:e+"widget-add.html",backdrop:"static"},l=c.open(j);g.addWidget=function(b){var c={type:b,config:k(b)};m(h,c),a.$broadcast("adfWidgetAdded",n,h,c),l.close(),g.$destroy()},g.closeDialog=function(){l.close(),g.$destroy()}}}],link:function(a,b,c){var d={name:c.name,editable:!0,enableConfirmDelete:f(c.enableconfirmdelete),maximizable:f(c.maximizable),collapsible:f(c.collapsible)};angular.isDefined(c.editable)&&(d.editable=f(c.editable)),a.options=d},templateUrl:e+"dashboard.html"}}]),angular.module("adf.provider",[]).provider("dashboard",function(){var a={},b="",c={},d='<div class="alert alert-danger">{}</div>',e='      <div class="progress progress-striped active">\n        <div class="progress-bar" role="progressbar" style="width: 100%">\n          <span class="sr-only">loading ...</span>\n        </div>\n      </div>';this.widget=function(b,c){var d=angular.extend({reload:!1},c);if(d.edit){var e={reload:!0};angular.extend(e,d.edit),d.edit=e}return a[b]=d,this},this.widgetsPath=function(a){return b=a,this},this.structure=function(a,b){return c[a]=b,this},this.messageTemplate=function(a){return d=a,this},this.loadingTemplate=function(a){return e=a,this},this.$get=function(){var f=0;return{widgets:a,widgetsPath:b,structures:c,messageTemplate:d,loadingTemplate:e,id:function(){return++f}}}}),angular.module("adf").directive("adfDashboardRow",["$compile","adfTemplatePath","columnTemplate",function(a,b,c){return{restrict:"E",replace:!0,scope:{row:"=",adfModel:"=",editMode:"=",options:"="},templateUrl:b+"dashboard-row.html",link:function(b,d){angular.isDefined(b.row.columns)&&angular.isArray(b.row.columns)&&a(c)(b,function(a){d.append(a)})}}}]),angular.module("adf").directive("adfWidgetContent",["$log","$q","$sce","$http","$templateCache","$compile","$controller","$injector","dashboard",function(a,b,c,d,e,f,g,h,i){function j(a){var b=a;return a.indexOf("{widgetsPath}")>=0&&(b=a.replace("{widgetsPath}",i.widgetsPath).replace("//","/"),0===b.indexOf("/")&&(b=b.substring(1))),b}function k(a){var f=b.defer();if(a.template)f.resolve(a.template);else if(a.templateUrl){var g=e.get(a.templateUrl);if(g)f.resolve(g);else{var h=c.getTrustedResourceUrl(j(a.templateUrl));d.get(h).success(function(b){e.put(a.templateUrl,b),f.resolve(b)}).error(function(){f.reject("could not load template")})}}return f.promise}function l(c,d,e){var j=c.model,l=c.content;d.html(i.loadingTemplate);var m=c.$new();j.config||(j.config={}),m.config=j.config;var n={$scope:m,widget:j,config:j.config},o={};return o.$tpl=k(l),l.resolve&&angular.forEach(l.resolve,function(a,b){angular.isString(a)?o[b]=h.get(a):o[b]=h.invoke(a,a,n)}),b.all(o).then(function(a){angular.extend(a,n);var b=a.$tpl;if(d.html(b),l.controller){var c=g(l.controller,a);l.controllerAs&&(m[l.controllerAs]=c),d.children().data("$ngControllerController",c)}f(d.contents())(m)},function(b){var c="Could not resolve all promises";b&&(c+=": "+b),a.warn(c),d.html(i.messageTemplate.replace(/{}/g,c))}),e&&e.$destroy(),m}return{replace:!0,restrict:"EA",transclude:!1,scope:{model:"=",content:"="},link:function(a,b){var c=l(a,b,null);a.$on("widgetConfigChanged",function(){c=l(a,b,c)}),a.$on("widgetReload",function(){c=l(a,b,c)})}}}]),angular.module("adf").directive("adfWidget",["$log","$modal","dashboard","adfTemplatePath",function(a,b,c,d){function e(b){var e=b.definition;if(e){var f=c.widgets[e.type];if(f){e.title||(e.title=f.title),e.titleTemplateUrl||(e.titleTemplateUrl=d+"widget-title.html"),e.wid||(e.wid=c.id()),b.widget=angular.copy(f);var g=e.config;g?angular.isString(g)&&(g=angular.fromJson(g)):g={},b.config=g,b.widgetState||(b.widgetState={},b.widgetState.isCollapsed=!1)}else a.warn("could not find widget "+e.type)}else a.debug("definition not specified, widget was probably removed")}function f(c,e){var f=c.definition;if(f){var g=function(){var a=c.col;if(a){var b=a.widgets.indexOf(f);b>=0&&a.widgets.splice(b,1)}e.remove()};c.remove=function(){if(c.options.enableConfirmDelete){var a=c.$new(),e=d+"widget-delete.html";f.deleteTemplateUrl&&(adfEditTemplatePath=f.deleteTemplateUrl);var h={scope:a,templateUrl:e,backdrop:"static"},i=b.open(h);a.closeDialog=function(){i.close(),a.$destroy()},a.deleteDialog=function(){g(),a.closeDialog()}}else g()},c.reload=function(){c.$broadcast("widgetReload")},c.edit=function(){var a=c.$new();a.definition=angular.copy(f);var e={scope:a,templateUrl:d+"widget-edit.html",backdrop:"static"},g=b.open(e);a.closeDialog=function(){g.close(),a.$destroy();var b=c.widget;b.edit&&b.edit.reload&&c.$broadcast("widgetConfigChanged")},a.saveDialog=function(){f.title=a.definition.title,angular.extend(f.config,a.definition.config),a.closeDialog()}}}else a.debug("widget not found")}return{replace:!0,restrict:"EA",transclude:!1,templateUrl:d+"widget.html",scope:{definition:"=",col:"=column",editMode:"=",options:"=",widgetState:"="},controller:["$scope",function(a){a.$on("adfDashboardCollapseExapand",function(b,c){a.widgetState.isCollapsed=c.collapseExpandStatus}),a.openFullScreen=function(){var c=a.definition,e=a.$new(),f={scope:e,templateUrl:d+"widget-fullscreen.html",size:c.modalSize||"lg",backdrop:"static",windowClass:c.fullScreen?"dashboard-modal widget-fullscreen":"dashboard-modal"},g=b.open(f);e.closeDialog=function(){g.close(),e.$destroy()}}}],compile:function(){return{pre:e,post:f}}}}]),angular.module("adf").run(["$templateCache",function(a){a.put("../src/templates/dashboard-column.html",'<div adf-id={{column.cid}} class=column ng-class=column.styleClass ng-model=column.widgets> <adf-widget ng-repeat="definition in column.widgets" definition=definition column=column edit-mode=editMode options=options widget-state=widgetState>  </adf-widget></div> '),a.put("../src/templates/dashboard-edit.html",'<div class=modal-header> <button type=button class=close ng-click=closeDialog() aria-hidden=true>&times;</button> <h4 class=modal-title>Edit Dashboard</h4> </div> <div class=modal-body> <form role=form> <div class=form-group> <label for=dashboardTitle>Title</label> <input type=text class=form-control id=dashboardTitle ng-model=copy.title required> </div> <div class=form-group> <label>Structure</label> <div class=radio ng-repeat="(key, structure) in structures"> <label> <input type=radio value={{key}} ng-model=model.structure ng-change="changeStructure(key, structure)"> {{key}} </label> </div> </div> </form> </div> <div class=modal-footer> <button type=button class="btn btn-primary" ng-click=closeDialog()>Close</button> </div> '),a.put("../src/templates/dashboard-row.html","<div class=row ng-class=row.styleClass>  </div> "),a.put("../src/templates/dashboard-title.html",'<h1> {{model.title}} <span style="font-size: 16px" class=pull-right> <a href ng-if=editMode title="add new widget" ng-click=addWidgetDialog()> <i class="glyphicon glyphicon-plus-sign"></i> </a> <a href ng-if=editMode title="edit dashboard" ng-click=editDashboardDialog()> <i class="glyphicon glyphicon-cog"></i> </a> <a href ng-if=options.editable title="{{editMode ? \'save changes\' : \'enable edit mode\'}}" ng-click=toggleEditMode()> <i class=glyphicon x-ng-class="{\'glyphicon-edit\' : !editMode, \'glyphicon-save\' : editMode}"></i> </a> <a href ng-if=editMode title="undo changes" ng-click=cancelEditMode()> <i class="glyphicon glyphicon-repeat adf-flip"></i> </a> </span> </h1> '),a.put("../src/templates/dashboard.html",'<div class=dashboard-container> <div ng-include src=model.titleTemplateUrl></div> <div class=dashboard x-ng-class="{\'edit\' : editMode}"> <adf-dashboard-row row=row adf-model=model options=options ng-repeat="row in model.rows" edit-mode=editMode> </adf-dashboard-row></div> </div> '),a.put("../src/templates/widget-add.html",'<div class=modal-header> <button type=button class=close ng-click=closeDialog() aria-hidden=true>&times;</button> <h4 class=modal-title>Add new widget</h4> </div> <div class=modal-body> <div style="display: inline-block;"> <dl class=dl-horizontal> <dt ng-repeat-start="(key, widget) in widgets"> <a href ng-click=addWidget(key)> {{widget.title}} </a> </dt> <dd ng-repeat-end ng-if=widget.description> {{widget.description}} </dd> </dl> </div> </div> <div class=modal-footer> <button type=button class="btn btn-primary" ng-click=closeDialog()>Close</button> </div>'),a.put("../src/templates/widget-delete.html",'<div class=modal-header> <h4 class=modal-title>Delete {{widget.title}}</h4> </div> <div class=modal-body> <form role=form> <div class=form-group> <label for=widgetTitle>Are you sure you want to delete this widget ?</label> </div> </form> </div> <div class=modal-footer> <button type=button class="btn btn-default" ng-click=closeDialog()>Close</button> <button type=button class="btn btn-primary" ng-click=deleteDialog()>Delete</button> </div> '),a.put("../src/templates/widget-edit.html",'<div class=modal-header> <button type=button class=close ng-click=closeDialog() aria-hidden=true>&times;</button> <h4 class=modal-title>{{widget.title}}</h4> </div> <div class=modal-body> <form role=form> <div class=form-group> <label for=widgetTitle>Title</label> <input type=text class=form-control id=widgetTitle ng-model=definition.title placeholder="Enter title" required> </div> </form> <div ng-if=widget.edit> <adf-widget-content model=definition content=widget.edit> </adf-widget-content></div> </div> <div class=modal-footer> <button type=button class="btn btn-default" ng-click=closeDialog()>Cancel</button> <button type=button class="btn btn-primary" ng-click=saveDialog()>Apply</button> </div> '),a.put("../src/templates/widget-fullscreen.html",'<div class=modal-header> <div class="pull-right widget-icons"> <a href title="Reload Widget Content" ng-if=widget.reload ng-click=reload()> <i class="glyphicon glyphicon-refresh"></i> </a> <a href title=close ng-click=closeDialog()> <i class="glyphicon glyphicon-remove"></i> </a> </div> <h4 class=modal-title>{{definition.title}}</h4> </div> <div class=modal-body> <adf-widget-content model=definition content=widget> </adf-widget-content></div> <div class=modal-footer> <button type=button class="btn btn-primary" ng-click=closeDialog()>Close</button> </div> '),a.put("../src/templates/widget-title.html",'<h3 class=panel-title> {{definition.title}} <span class=pull-right> <a href title="reload widget content" ng-if=widget.reload ng-click=reload()> <i class="glyphicon glyphicon-refresh"></i> </a>  <a href title="change widget location" class=adf-move ng-if=editMode> <i class="glyphicon glyphicon-move"></i> </a>  <a href title="collapse widget" ng-show="options.collapsible && !widgetState.isCollapsed" ng-click="widgetState.isCollapsed = !widgetState.isCollapsed"> <i class="glyphicon glyphicon-minus"></i> </a>  <a href title="expand widget" ng-show="options.collapsible && widgetState.isCollapsed" ng-click="widgetState.isCollapsed = !widgetState.isCollapsed"> <i class="glyphicon glyphicon-plus"></i> </a>  <a href title="edit widget configuration" ng-click=edit() ng-if=editMode> <i class="glyphicon glyphicon-cog"></i> </a> <a href title="fullscreen widget" ng-click=openFullScreen() ng-show=options.maximizable> <i class="glyphicon glyphicon-fullscreen"></i> </a>  <a href title="remove widget" ng-click=remove() ng-if=editMode> <i class="glyphicon glyphicon-remove"></i> </a> </span> </h3> '),a.put("../src/templates/widget.html",'<div adf-id={{definition.wid}} adf-widget-type={{definition.type}} class="widget panel panel-default"> <div class="panel-heading clearfix"> <div ng-include src=definition.titleTemplateUrl></div> </div> <div class=panel-body collapse=widgetState.isCollapsed> <adf-widget-content model=definition content=widget> </adf-widget-content></div> </div> ')}])}(window),angular.module("adf.structures.base",["adf"]).config(["dashboardProvider",function(a){a.structure("6-6",{rows:[{columns:[{styleClass:"col-md-6"},{styleClass:"col-md-6"}]}]}).structure("4-8",{rows:[{columns:[{styleClass:"col-md-4",widgets:[]},{styleClass:"col-md-8",widgets:[]}]}]}).structure("12/4-4-4",{rows:[{columns:[{styleClass:"col-md-12"}]},{columns:[{styleClass:"col-md-4"},{styleClass:"col-md-4"},{styleClass:"col-md-4"}]}]}).structure("12/6-6",{rows:[{columns:[{styleClass:"col-md-12"}]},{columns:[{styleClass:"col-md-6"},{styleClass:"col-md-6"}]}]}).structure("12/6-6/12",{rows:[{columns:[{styleClass:"col-md-12"}]},{columns:[{styleClass:"col-md-6"},{styleClass:"col-md-6"}]},{columns:[{styleClass:"col-md-12"}]}]}).structure("3-9 (12/6-6)",{rows:[{columns:[{styleClass:"col-md-3"},{styleClass:"col-md-9",rows:[{columns:[{styleClass:"col-md-12"}]},{columns:[{styleClass:"col-md-6"},{styleClass:"col-md-6"}]}]}]}]})}]),function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.moment=b()}(this,function(){"use strict";function a(){return Hc.apply(null,arguments)}function b(a){Hc=a}function c(a){return"[object Array]"===Object.prototype.toString.call(a)}function d(a){return a instanceof Date||"[object Date]"===Object.prototype.toString.call(a)}function e(a,b){var c,d=[];for(c=0;c<a.length;++c)d.push(b(a[c],c));return d}function f(a,b){return Object.prototype.hasOwnProperty.call(a,b)}function g(a,b){for(var c in b)f(b,c)&&(a[c]=b[c]);return f(b,"toString")&&(a.toString=b.toString),f(b,"valueOf")&&(a.valueOf=b.valueOf),a}function h(a,b,c,d){return Ca(a,b,c,d,!0).utc()}function i(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1}}function j(a){return null==a._pf&&(a._pf=i()),a._pf}function k(a){if(null==a._isValid){var b=j(a);a._isValid=!(isNaN(a._d.getTime())||!(b.overflow<0)||b.empty||b.invalidMonth||b.invalidWeekday||b.nullInput||b.invalidFormat||b.userInvalidated),a._strict&&(a._isValid=a._isValid&&0===b.charsLeftOver&&0===b.unusedTokens.length&&void 0===b.bigHour)}return a._isValid}function l(a){var b=h(NaN);return null!=a?g(j(b),a):j(b).userInvalidated=!0,b}function m(a,b){var c,d,e;if("undefined"!=typeof b._isAMomentObject&&(a._isAMomentObject=b._isAMomentObject),"undefined"!=typeof b._i&&(a._i=b._i),"undefined"!=typeof b._f&&(a._f=b._f),"undefined"!=typeof b._l&&(a._l=b._l),"undefined"!=typeof b._strict&&(a._strict=b._strict),"undefined"!=typeof b._tzm&&(a._tzm=b._tzm),"undefined"!=typeof b._isUTC&&(a._isUTC=b._isUTC),"undefined"!=typeof b._offset&&(a._offset=b._offset),"undefined"!=typeof b._pf&&(a._pf=j(b)),"undefined"!=typeof b._locale&&(a._locale=b._locale),Jc.length>0)for(c in Jc)d=Jc[c],e=b[d],"undefined"!=typeof e&&(a[d]=e);return a}function n(b){m(this,b),this._d=new Date(null!=b._d?b._d.getTime():NaN),Kc===!1&&(Kc=!0,a.updateOffset(this),Kc=!1)}function o(a){return a instanceof n||null!=a&&null!=a._isAMomentObject}function p(a){return 0>a?Math.ceil(a):Math.floor(a)}function q(a){var b=+a,c=0;return 0!==b&&isFinite(b)&&(c=p(b)),c}function r(a,b,c){var d,e=Math.min(a.length,b.length),f=Math.abs(a.length-b.length),g=0;for(d=0;e>d;d++)(c&&a[d]!==b[d]||!c&&q(a[d])!==q(b[d]))&&g++;return g+f}function s(){}function t(a){return a?a.toLowerCase().replace("_","-"):a}function u(a){for(var b,c,d,e,f=0;f<a.length;){for(e=t(a[f]).split("-"),b=e.length,c=t(a[f+1]),c=c?c.split("-"):null;b>0;){if(d=v(e.slice(0,b).join("-")))return d;if(c&&c.length>=b&&r(e,c,!0)>=b-1)break;b--}f++}return null}function v(a){var b=null;if(!Lc[a]&&"undefined"!=typeof module&&module&&module.exports)try{b=Ic._abbr,require("./locale/"+a),w(b)}catch(c){}return Lc[a]}function w(a,b){var c;return a&&(c="undefined"==typeof b?y(a):x(a,b),c&&(Ic=c)),Ic._abbr}function x(a,b){return null!==b?(b.abbr=a,Lc[a]=Lc[a]||new s,Lc[a].set(b),w(a),Lc[a]):(delete Lc[a],null)}function y(a){var b;if(a&&a._locale&&a._locale._abbr&&(a=a._locale._abbr),!a)return Ic;if(!c(a)){if(b=v(a))return b;a=[a]}return u(a)}function z(a,b){var c=a.toLowerCase();Mc[c]=Mc[c+"s"]=Mc[b]=a}function A(a){return"string"==typeof a?Mc[a]||Mc[a.toLowerCase()]:void 0}function B(a){var b,c,d={};for(c in a)f(a,c)&&(b=A(c),b&&(d[b]=a[c]));return d}function C(b,c){return function(d){return null!=d?(E(this,b,d),a.updateOffset(this,c),this):D(this,b)}}function D(a,b){return a._d["get"+(a._isUTC?"UTC":"")+b]()}function E(a,b,c){return a._d["set"+(a._isUTC?"UTC":"")+b](c)}function F(a,b){var c;if("object"==typeof a)for(c in a)this.set(c,a[c]);else if(a=A(a),"function"==typeof this[a])return this[a](b);return this}function G(a,b,c){var d=""+Math.abs(a),e=b-d.length,f=a>=0;return(f?c?"+":"":"-")+Math.pow(10,Math.max(0,e)).toString().substr(1)+d}function H(a,b,c,d){var e=d;"string"==typeof d&&(e=function(){return this[d]()}),a&&(Qc[a]=e),b&&(Qc[b[0]]=function(){return G(e.apply(this,arguments),b[1],b[2])}),c&&(Qc[c]=function(){return this.localeData().ordinal(e.apply(this,arguments),a)})}function I(a){return a.match(/\[[\s\S]/)?a.replace(/^\[|\]$/g,""):a.replace(/\\/g,"")}function J(a){
+var b,c,d=a.match(Nc);for(b=0,c=d.length;c>b;b++)Qc[d[b]]?d[b]=Qc[d[b]]:d[b]=I(d[b]);return function(e){var f="";for(b=0;c>b;b++)f+=d[b]instanceof Function?d[b].call(e,a):d[b];return f}}function K(a,b){return a.isValid()?(b=L(b,a.localeData()),Pc[b]=Pc[b]||J(b),Pc[b](a)):a.localeData().invalidDate()}function L(a,b){function c(a){return b.longDateFormat(a)||a}var d=5;for(Oc.lastIndex=0;d>=0&&Oc.test(a);)a=a.replace(Oc,c),Oc.lastIndex=0,d-=1;return a}function M(a){return"function"==typeof a&&"[object Function]"===Object.prototype.toString.call(a)}function N(a,b,c){dd[a]=M(b)?b:function(a){return a&&c?c:b}}function O(a,b){return f(dd,a)?dd[a](b._strict,b._locale):new RegExp(P(a))}function P(a){return a.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(a,b,c,d,e){return b||c||d||e}).replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function Q(a,b){var c,d=b;for("string"==typeof a&&(a=[a]),"number"==typeof b&&(d=function(a,c){c[b]=q(a)}),c=0;c<a.length;c++)ed[a[c]]=d}function R(a,b){Q(a,function(a,c,d,e){d._w=d._w||{},b(a,d._w,d,e)})}function S(a,b,c){null!=b&&f(ed,a)&&ed[a](b,c._a,c,a)}function T(a,b){return new Date(Date.UTC(a,b+1,0)).getUTCDate()}function U(a){return this._months[a.month()]}function V(a){return this._monthsShort[a.month()]}function W(a,b,c){var d,e,f;for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),d=0;12>d;d++){if(e=h([2e3,d]),c&&!this._longMonthsParse[d]&&(this._longMonthsParse[d]=new RegExp("^"+this.months(e,"").replace(".","")+"$","i"),this._shortMonthsParse[d]=new RegExp("^"+this.monthsShort(e,"").replace(".","")+"$","i")),c||this._monthsParse[d]||(f="^"+this.months(e,"")+"|^"+this.monthsShort(e,""),this._monthsParse[d]=new RegExp(f.replace(".",""),"i")),c&&"MMMM"===b&&this._longMonthsParse[d].test(a))return d;if(c&&"MMM"===b&&this._shortMonthsParse[d].test(a))return d;if(!c&&this._monthsParse[d].test(a))return d}}function X(a,b){var c;return"string"==typeof b&&(b=a.localeData().monthsParse(b),"number"!=typeof b)?a:(c=Math.min(a.date(),T(a.year(),b)),a._d["set"+(a._isUTC?"UTC":"")+"Month"](b,c),a)}function Y(b){return null!=b?(X(this,b),a.updateOffset(this,!0),this):D(this,"Month")}function Z(){return T(this.year(),this.month())}function $(a){var b,c=a._a;return c&&-2===j(a).overflow&&(b=c[gd]<0||c[gd]>11?gd:c[hd]<1||c[hd]>T(c[fd],c[gd])?hd:c[id]<0||c[id]>24||24===c[id]&&(0!==c[jd]||0!==c[kd]||0!==c[ld])?id:c[jd]<0||c[jd]>59?jd:c[kd]<0||c[kd]>59?kd:c[ld]<0||c[ld]>999?ld:-1,j(a)._overflowDayOfYear&&(fd>b||b>hd)&&(b=hd),j(a).overflow=b),a}function _(b){a.suppressDeprecationWarnings===!1&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+b)}function aa(a,b){var c=!0;return g(function(){return c&&(_(a+"\n"+(new Error).stack),c=!1),b.apply(this,arguments)},b)}function ba(a,b){od[a]||(_(b),od[a]=!0)}function ca(a){var b,c,d=a._i,e=pd.exec(d);if(e){for(j(a).iso=!0,b=0,c=qd.length;c>b;b++)if(qd[b][1].exec(d)){a._f=qd[b][0];break}for(b=0,c=rd.length;c>b;b++)if(rd[b][1].exec(d)){a._f+=(e[6]||" ")+rd[b][0];break}d.match(ad)&&(a._f+="Z"),va(a)}else a._isValid=!1}function da(b){var c=sd.exec(b._i);return null!==c?void(b._d=new Date(+c[1])):(ca(b),void(b._isValid===!1&&(delete b._isValid,a.createFromInputFallback(b))))}function ea(a,b,c,d,e,f,g){var h=new Date(a,b,c,d,e,f,g);return 1970>a&&h.setFullYear(a),h}function fa(a){var b=new Date(Date.UTC.apply(null,arguments));return 1970>a&&b.setUTCFullYear(a),b}function ga(a){return ha(a)?366:365}function ha(a){return a%4===0&&a%100!==0||a%400===0}function ia(){return ha(this.year())}function ja(a,b,c){var d,e=c-b,f=c-a.day();return f>e&&(f-=7),e-7>f&&(f+=7),d=Da(a).add(f,"d"),{week:Math.ceil(d.dayOfYear()/7),year:d.year()}}function ka(a){return ja(a,this._week.dow,this._week.doy).week}function la(){return this._week.dow}function ma(){return this._week.doy}function na(a){var b=this.localeData().week(this);return null==a?b:this.add(7*(a-b),"d")}function oa(a){var b=ja(this,1,4).week;return null==a?b:this.add(7*(a-b),"d")}function pa(a,b,c,d,e){var f,g=6+e-d,h=fa(a,0,1+g),i=h.getUTCDay();return e>i&&(i+=7),c=null!=c?1*c:e,f=1+g+7*(b-1)-i+c,{year:f>0?a:a-1,dayOfYear:f>0?f:ga(a-1)+f}}function qa(a){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==a?b:this.add(a-b,"d")}function ra(a,b,c){return null!=a?a:null!=b?b:c}function sa(a){var b=new Date;return a._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}function ta(a){var b,c,d,e,f=[];if(!a._d){for(d=sa(a),a._w&&null==a._a[hd]&&null==a._a[gd]&&ua(a),a._dayOfYear&&(e=ra(a._a[fd],d[fd]),a._dayOfYear>ga(e)&&(j(a)._overflowDayOfYear=!0),c=fa(e,0,a._dayOfYear),a._a[gd]=c.getUTCMonth(),a._a[hd]=c.getUTCDate()),b=0;3>b&&null==a._a[b];++b)a._a[b]=f[b]=d[b];for(;7>b;b++)a._a[b]=f[b]=null==a._a[b]?2===b?1:0:a._a[b];24===a._a[id]&&0===a._a[jd]&&0===a._a[kd]&&0===a._a[ld]&&(a._nextDay=!0,a._a[id]=0),a._d=(a._useUTC?fa:ea).apply(null,f),null!=a._tzm&&a._d.setUTCMinutes(a._d.getUTCMinutes()-a._tzm),a._nextDay&&(a._a[id]=24)}}function ua(a){var b,c,d,e,f,g,h;b=a._w,null!=b.GG||null!=b.W||null!=b.E?(f=1,g=4,c=ra(b.GG,a._a[fd],ja(Da(),1,4).year),d=ra(b.W,1),e=ra(b.E,1)):(f=a._locale._week.dow,g=a._locale._week.doy,c=ra(b.gg,a._a[fd],ja(Da(),f,g).year),d=ra(b.w,1),null!=b.d?(e=b.d,f>e&&++d):e=null!=b.e?b.e+f:f),h=pa(c,d,e,g,f),a._a[fd]=h.year,a._dayOfYear=h.dayOfYear}function va(b){if(b._f===a.ISO_8601)return void ca(b);b._a=[],j(b).empty=!0;var c,d,e,f,g,h=""+b._i,i=h.length,k=0;for(e=L(b._f,b._locale).match(Nc)||[],c=0;c<e.length;c++)f=e[c],d=(h.match(O(f,b))||[])[0],d&&(g=h.substr(0,h.indexOf(d)),g.length>0&&j(b).unusedInput.push(g),h=h.slice(h.indexOf(d)+d.length),k+=d.length),Qc[f]?(d?j(b).empty=!1:j(b).unusedTokens.push(f),S(f,d,b)):b._strict&&!d&&j(b).unusedTokens.push(f);j(b).charsLeftOver=i-k,h.length>0&&j(b).unusedInput.push(h),j(b).bigHour===!0&&b._a[id]<=12&&b._a[id]>0&&(j(b).bigHour=void 0),b._a[id]=wa(b._locale,b._a[id],b._meridiem),ta(b),$(b)}function wa(a,b,c){var d;return null==c?b:null!=a.meridiemHour?a.meridiemHour(b,c):null!=a.isPM?(d=a.isPM(c),d&&12>b&&(b+=12),d||12!==b||(b=0),b):b}function xa(a){var b,c,d,e,f;if(0===a._f.length)return j(a).invalidFormat=!0,void(a._d=new Date(NaN));for(e=0;e<a._f.length;e++)f=0,b=m({},a),null!=a._useUTC&&(b._useUTC=a._useUTC),b._f=a._f[e],va(b),k(b)&&(f+=j(b).charsLeftOver,f+=10*j(b).unusedTokens.length,j(b).score=f,(null==d||d>f)&&(d=f,c=b));g(a,c||b)}function ya(a){if(!a._d){var b=B(a._i);a._a=[b.year,b.month,b.day||b.date,b.hour,b.minute,b.second,b.millisecond],ta(a)}}function za(a){var b=new n($(Aa(a)));return b._nextDay&&(b.add(1,"d"),b._nextDay=void 0),b}function Aa(a){var b=a._i,e=a._f;return a._locale=a._locale||y(a._l),null===b||void 0===e&&""===b?l({nullInput:!0}):("string"==typeof b&&(a._i=b=a._locale.preparse(b)),o(b)?new n($(b)):(c(e)?xa(a):e?va(a):d(b)?a._d=b:Ba(a),a))}function Ba(b){var f=b._i;void 0===f?b._d=new Date:d(f)?b._d=new Date(+f):"string"==typeof f?da(b):c(f)?(b._a=e(f.slice(0),function(a){return parseInt(a,10)}),ta(b)):"object"==typeof f?ya(b):"number"==typeof f?b._d=new Date(f):a.createFromInputFallback(b)}function Ca(a,b,c,d,e){var f={};return"boolean"==typeof c&&(d=c,c=void 0),f._isAMomentObject=!0,f._useUTC=f._isUTC=e,f._l=c,f._i=a,f._f=b,f._strict=d,za(f)}function Da(a,b,c,d){return Ca(a,b,c,d,!1)}function Ea(a,b){var d,e;if(1===b.length&&c(b[0])&&(b=b[0]),!b.length)return Da();for(d=b[0],e=1;e<b.length;++e)(!b[e].isValid()||b[e][a](d))&&(d=b[e]);return d}function Fa(){var a=[].slice.call(arguments,0);return Ea("isBefore",a)}function Ga(){var a=[].slice.call(arguments,0);return Ea("isAfter",a)}function Ha(a){var b=B(a),c=b.year||0,d=b.quarter||0,e=b.month||0,f=b.week||0,g=b.day||0,h=b.hour||0,i=b.minute||0,j=b.second||0,k=b.millisecond||0;this._milliseconds=+k+1e3*j+6e4*i+36e5*h,this._days=+g+7*f,this._months=+e+3*d+12*c,this._data={},this._locale=y(),this._bubble()}function Ia(a){return a instanceof Ha}function Ja(a,b){H(a,0,0,function(){var a=this.utcOffset(),c="+";return 0>a&&(a=-a,c="-"),c+G(~~(a/60),2)+b+G(~~a%60,2)})}function Ka(a){var b=(a||"").match(ad)||[],c=b[b.length-1]||[],d=(c+"").match(xd)||["-",0,0],e=+(60*d[1])+q(d[2]);return"+"===d[0]?e:-e}function La(b,c){var e,f;return c._isUTC?(e=c.clone(),f=(o(b)||d(b)?+b:+Da(b))-+e,e._d.setTime(+e._d+f),a.updateOffset(e,!1),e):Da(b).local()}function Ma(a){return 15*-Math.round(a._d.getTimezoneOffset()/15)}function Na(b,c){var d,e=this._offset||0;return null!=b?("string"==typeof b&&(b=Ka(b)),Math.abs(b)<16&&(b=60*b),!this._isUTC&&c&&(d=Ma(this)),this._offset=b,this._isUTC=!0,null!=d&&this.add(d,"m"),e!==b&&(!c||this._changeInProgress?bb(this,Ya(b-e,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,a.updateOffset(this,!0),this._changeInProgress=null)),this):this._isUTC?e:Ma(this)}function Oa(a,b){return null!=a?("string"!=typeof a&&(a=-a),this.utcOffset(a,b),this):-this.utcOffset()}function Pa(a){return this.utcOffset(0,a)}function Qa(a){return this._isUTC&&(this.utcOffset(0,a),this._isUTC=!1,a&&this.subtract(Ma(this),"m")),this}function Ra(){return this._tzm?this.utcOffset(this._tzm):"string"==typeof this._i&&this.utcOffset(Ka(this._i)),this}function Sa(a){return a=a?Da(a).utcOffset():0,(this.utcOffset()-a)%60===0}function Ta(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Ua(){if("undefined"!=typeof this._isDSTShifted)return this._isDSTShifted;var a={};if(m(a,this),a=Aa(a),a._a){var b=a._isUTC?h(a._a):Da(a._a);this._isDSTShifted=this.isValid()&&r(a._a,b.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function Va(){return!this._isUTC}function Wa(){return this._isUTC}function Xa(){return this._isUTC&&0===this._offset}function Ya(a,b){var c,d,e,g=a,h=null;return Ia(a)?g={ms:a._milliseconds,d:a._days,M:a._months}:"number"==typeof a?(g={},b?g[b]=a:g.milliseconds=a):(h=yd.exec(a))?(c="-"===h[1]?-1:1,g={y:0,d:q(h[hd])*c,h:q(h[id])*c,m:q(h[jd])*c,s:q(h[kd])*c,ms:q(h[ld])*c}):(h=zd.exec(a))?(c="-"===h[1]?-1:1,g={y:Za(h[2],c),M:Za(h[3],c),d:Za(h[4],c),h:Za(h[5],c),m:Za(h[6],c),s:Za(h[7],c),w:Za(h[8],c)}):null==g?g={}:"object"==typeof g&&("from"in g||"to"in g)&&(e=_a(Da(g.from),Da(g.to)),g={},g.ms=e.milliseconds,g.M=e.months),d=new Ha(g),Ia(a)&&f(a,"_locale")&&(d._locale=a._locale),d}function Za(a,b){var c=a&&parseFloat(a.replace(",","."));return(isNaN(c)?0:c)*b}function $a(a,b){var c={milliseconds:0,months:0};return c.months=b.month()-a.month()+12*(b.year()-a.year()),a.clone().add(c.months,"M").isAfter(b)&&--c.months,c.milliseconds=+b-+a.clone().add(c.months,"M"),c}function _a(a,b){var c;return b=La(b,a),a.isBefore(b)?c=$a(a,b):(c=$a(b,a),c.milliseconds=-c.milliseconds,c.months=-c.months),c}function ab(a,b){return function(c,d){var e,f;return null===d||isNaN(+d)||(ba(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period)."),f=c,c=d,d=f),c="string"==typeof c?+c:c,e=Ya(c,d),bb(this,e,a),this}}function bb(b,c,d,e){var f=c._milliseconds,g=c._days,h=c._months;e=null==e?!0:e,f&&b._d.setTime(+b._d+f*d),g&&E(b,"Date",D(b,"Date")+g*d),h&&X(b,D(b,"Month")+h*d),e&&a.updateOffset(b,g||h)}function cb(a,b){var c=a||Da(),d=La(c,this).startOf("day"),e=this.diff(d,"days",!0),f=-6>e?"sameElse":-1>e?"lastWeek":0>e?"lastDay":1>e?"sameDay":2>e?"nextDay":7>e?"nextWeek":"sameElse";return this.format(b&&b[f]||this.localeData().calendar(f,this,Da(c)))}function db(){return new n(this)}function eb(a,b){var c;return b=A("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=o(a)?a:Da(a),+this>+a):(c=o(a)?+a:+Da(a),c<+this.clone().startOf(b))}function fb(a,b){var c;return b=A("undefined"!=typeof b?b:"millisecond"),"millisecond"===b?(a=o(a)?a:Da(a),+a>+this):(c=o(a)?+a:+Da(a),+this.clone().endOf(b)<c)}function gb(a,b,c){return this.isAfter(a,c)&&this.isBefore(b,c)}function hb(a,b){var c;return b=A(b||"millisecond"),"millisecond"===b?(a=o(a)?a:Da(a),+this===+a):(c=+Da(a),+this.clone().startOf(b)<=c&&c<=+this.clone().endOf(b))}function ib(a,b,c){var d,e,f=La(a,this),g=6e4*(f.utcOffset()-this.utcOffset());return b=A(b),"year"===b||"month"===b||"quarter"===b?(e=jb(this,f),"quarter"===b?e/=3:"year"===b&&(e/=12)):(d=this-f,e="second"===b?d/1e3:"minute"===b?d/6e4:"hour"===b?d/36e5:"day"===b?(d-g)/864e5:"week"===b?(d-g)/6048e5:d),c?e:p(e)}function jb(a,b){var c,d,e=12*(b.year()-a.year())+(b.month()-a.month()),f=a.clone().add(e,"months");return 0>b-f?(c=a.clone().add(e-1,"months"),d=(b-f)/(f-c)):(c=a.clone().add(e+1,"months"),d=(b-f)/(c-f)),-(e+d)}function kb(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function lb(){var a=this.clone().utc();return 0<a.year()&&a.year()<=9999?"function"==typeof Date.prototype.toISOString?this.toDate().toISOString():K(a,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):K(a,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function mb(b){var c=K(this,b||a.defaultFormat);return this.localeData().postformat(c)}function nb(a,b){return this.isValid()?Ya({to:this,from:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function ob(a){return this.from(Da(),a)}function pb(a,b){return this.isValid()?Ya({from:this,to:a}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()}function qb(a){return this.to(Da(),a)}function rb(a){var b;return void 0===a?this._locale._abbr:(b=y(a),null!=b&&(this._locale=b),this)}function sb(){return this._locale}function tb(a){switch(a=A(a)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===a&&this.weekday(0),"isoWeek"===a&&this.isoWeekday(1),"quarter"===a&&this.month(3*Math.floor(this.month()/3)),this}function ub(a){return a=A(a),void 0===a||"millisecond"===a?this:this.startOf(a).add(1,"isoWeek"===a?"week":a).subtract(1,"ms")}function vb(){return+this._d-6e4*(this._offset||0)}function wb(){return Math.floor(+this/1e3)}function xb(){return this._offset?new Date(+this):this._d}function yb(){var a=this;return[a.year(),a.month(),a.date(),a.hour(),a.minute(),a.second(),a.millisecond()]}function zb(){var a=this;return{years:a.year(),months:a.month(),date:a.date(),hours:a.hours(),minutes:a.minutes(),seconds:a.seconds(),milliseconds:a.milliseconds()}}function Ab(){return k(this)}function Bb(){return g({},j(this))}function Cb(){return j(this).overflow}function Db(a,b){H(0,[a,a.length],0,b)}function Eb(a,b,c){return ja(Da([a,11,31+b-c]),b,c).week}function Fb(a){var b=ja(this,this.localeData()._week.dow,this.localeData()._week.doy).year;return null==a?b:this.add(a-b,"y")}function Gb(a){var b=ja(this,1,4).year;return null==a?b:this.add(a-b,"y")}function Hb(){return Eb(this.year(),1,4)}function Ib(){var a=this.localeData()._week;return Eb(this.year(),a.dow,a.doy)}function Jb(a){return null==a?Math.ceil((this.month()+1)/3):this.month(3*(a-1)+this.month()%3)}function Kb(a,b){return"string"!=typeof a?a:isNaN(a)?(a=b.weekdaysParse(a),"number"==typeof a?a:null):parseInt(a,10)}function Lb(a){return this._weekdays[a.day()]}function Mb(a){return this._weekdaysShort[a.day()]}function Nb(a){return this._weekdaysMin[a.day()]}function Ob(a){var b,c,d;for(this._weekdaysParse=this._weekdaysParse||[],b=0;7>b;b++)if(this._weekdaysParse[b]||(c=Da([2e3,1]).day(b),d="^"+this.weekdays(c,"")+"|^"+this.weekdaysShort(c,"")+"|^"+this.weekdaysMin(c,""),this._weekdaysParse[b]=new RegExp(d.replace(".",""),"i")),this._weekdaysParse[b].test(a))return b}function Pb(a){var b=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=a?(a=Kb(a,this.localeData()),this.add(a-b,"d")):b}function Qb(a){var b=(this.day()+7-this.localeData()._week.dow)%7;return null==a?b:this.add(a-b,"d")}function Rb(a){return null==a?this.day()||7:this.day(this.day()%7?a:a-7)}function Sb(a,b){H(a,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function Tb(a,b){return b._meridiemParse}function Ub(a){return"p"===(a+"").toLowerCase().charAt(0)}function Vb(a,b,c){return a>11?c?"pm":"PM":c?"am":"AM"}function Wb(a,b){b[ld]=q(1e3*("0."+a))}function Xb(){return this._isUTC?"UTC":""}function Yb(){return this._isUTC?"Coordinated Universal Time":""}function Zb(a){return Da(1e3*a)}function $b(){return Da.apply(null,arguments).parseZone()}function _b(a,b,c){var d=this._calendar[a];return"function"==typeof d?d.call(b,c):d}function ac(a){var b=this._longDateFormat[a],c=this._longDateFormat[a.toUpperCase()];return b||!c?b:(this._longDateFormat[a]=c.replace(/MMMM|MM|DD|dddd/g,function(a){return a.slice(1)}),this._longDateFormat[a])}function bc(){return this._invalidDate}function cc(a){return this._ordinal.replace("%d",a)}function dc(a){return a}function ec(a,b,c,d){var e=this._relativeTime[c];return"function"==typeof e?e(a,b,c,d):e.replace(/%d/i,a)}function fc(a,b){var c=this._relativeTime[a>0?"future":"past"];return"function"==typeof c?c(b):c.replace(/%s/i,b)}function gc(a){var b,c;for(c in a)b=a[c],"function"==typeof b?this[c]=b:this["_"+c]=b;this._ordinalParseLenient=new RegExp(this._ordinalParse.source+"|"+/\d{1,2}/.source)}function hc(a,b,c,d){var e=y(),f=h().set(d,b);return e[c](f,a)}function ic(a,b,c,d,e){if("number"==typeof a&&(b=a,a=void 0),a=a||"",null!=b)return hc(a,b,c,e);var f,g=[];for(f=0;d>f;f++)g[f]=hc(a,f,c,e);return g}function jc(a,b){return ic(a,b,"months",12,"month")}function kc(a,b){return ic(a,b,"monthsShort",12,"month")}function lc(a,b){return ic(a,b,"weekdays",7,"day")}function mc(a,b){return ic(a,b,"weekdaysShort",7,"day")}function nc(a,b){return ic(a,b,"weekdaysMin",7,"day")}function oc(){var a=this._data;return this._milliseconds=Wd(this._milliseconds),this._days=Wd(this._days),this._months=Wd(this._months),a.milliseconds=Wd(a.milliseconds),a.seconds=Wd(a.seconds),a.minutes=Wd(a.minutes),a.hours=Wd(a.hours),a.months=Wd(a.months),a.years=Wd(a.years),this}function pc(a,b,c,d){var e=Ya(b,c);return a._milliseconds+=d*e._milliseconds,a._days+=d*e._days,a._months+=d*e._months,a._bubble()}function qc(a,b){return pc(this,a,b,1)}function rc(a,b){return pc(this,a,b,-1)}function sc(a){return 0>a?Math.floor(a):Math.ceil(a)}function tc(){var a,b,c,d,e,f=this._milliseconds,g=this._days,h=this._months,i=this._data;return f>=0&&g>=0&&h>=0||0>=f&&0>=g&&0>=h||(f+=864e5*sc(vc(h)+g),g=0,h=0),i.milliseconds=f%1e3,a=p(f/1e3),i.seconds=a%60,b=p(a/60),i.minutes=b%60,c=p(b/60),i.hours=c%24,g+=p(c/24),e=p(uc(g)),h+=e,g-=sc(vc(e)),d=p(h/12),h%=12,i.days=g,i.months=h,i.years=d,this}function uc(a){return 4800*a/146097}function vc(a){return 146097*a/4800}function wc(a){var b,c,d=this._milliseconds;if(a=A(a),"month"===a||"year"===a)return b=this._days+d/864e5,c=this._months+uc(b),"month"===a?c:c/12;switch(b=this._days+Math.round(vc(this._months)),a){case"week":return b/7+d/6048e5;case"day":return b+d/864e5;case"hour":return 24*b+d/36e5;case"minute":return 1440*b+d/6e4;case"second":return 86400*b+d/1e3;case"millisecond":return Math.floor(864e5*b)+d;default:throw new Error("Unknown unit "+a)}}function xc(){return this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*q(this._months/12)}function yc(a){return function(){return this.as(a)}}function zc(a){return a=A(a),this[a+"s"]()}function Ac(a){return function(){return this._data[a]}}function Bc(){return p(this.days()/7)}function Cc(a,b,c,d,e){return e.relativeTime(b||1,!!c,a,d)}function Dc(a,b,c){var d=Ya(a).abs(),e=ke(d.as("s")),f=ke(d.as("m")),g=ke(d.as("h")),h=ke(d.as("d")),i=ke(d.as("M")),j=ke(d.as("y")),k=e<le.s&&["s",e]||1===f&&["m"]||f<le.m&&["mm",f]||1===g&&["h"]||g<le.h&&["hh",g]||1===h&&["d"]||h<le.d&&["dd",h]||1===i&&["M"]||i<le.M&&["MM",i]||1===j&&["y"]||["yy",j];return k[2]=b,k[3]=+a>0,k[4]=c,Cc.apply(null,k)}function Ec(a,b){return void 0===le[a]?!1:void 0===b?le[a]:(le[a]=b,!0)}function Fc(a){var b=this.localeData(),c=Dc(this,!a,b);return a&&(c=b.pastFuture(+this,c)),b.postformat(c)}function Gc(){var a,b,c,d=me(this._milliseconds)/1e3,e=me(this._days),f=me(this._months);a=p(d/60),b=p(a/60),d%=60,a%=60,c=p(f/12),f%=12;var g=c,h=f,i=e,j=b,k=a,l=d,m=this.asSeconds();return m?(0>m?"-":"")+"P"+(g?g+"Y":"")+(h?h+"M":"")+(i?i+"D":"")+(j||k||l?"T":"")+(j?j+"H":"")+(k?k+"M":"")+(l?l+"S":""):"P0D"}var Hc,Ic,Jc=a.momentProperties=[],Kc=!1,Lc={},Mc={},Nc=/(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Oc=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Pc={},Qc={},Rc=/\d/,Sc=/\d\d/,Tc=/\d{3}/,Uc=/\d{4}/,Vc=/[+-]?\d{6}/,Wc=/\d\d?/,Xc=/\d{1,3}/,Yc=/\d{1,4}/,Zc=/[+-]?\d{1,6}/,$c=/\d+/,_c=/[+-]?\d+/,ad=/Z|[+-]\d\d:?\d\d/gi,bd=/[+-]?\d+(\.\d{1,3})?/,cd=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,dd={},ed={},fd=0,gd=1,hd=2,id=3,jd=4,kd=5,ld=6;H("M",["MM",2],"Mo",function(){return this.month()+1}),H("MMM",0,0,function(a){return this.localeData().monthsShort(this,a)}),H("MMMM",0,0,function(a){return this.localeData().months(this,a)}),z("month","M"),N("M",Wc),N("MM",Wc,Sc),N("MMM",cd),N("MMMM",cd),Q(["M","MM"],function(a,b){b[gd]=q(a)-1}),Q(["MMM","MMMM"],function(a,b,c,d){var e=c._locale.monthsParse(a,d,c._strict);null!=e?b[gd]=e:j(c).invalidMonth=a});var md="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),nd="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),od={};a.suppressDeprecationWarnings=!1;var pd=/^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,qd=[["YYYYYY-MM-DD",/[+-]\d{6}-\d{2}-\d{2}/],["YYYY-MM-DD",/\d{4}-\d{2}-\d{2}/],["GGGG-[W]WW-E",/\d{4}-W\d{2}-\d/],["GGGG-[W]WW",/\d{4}-W\d{2}/],["YYYY-DDD",/\d{4}-\d{3}/]],rd=[["HH:mm:ss.SSSS",/(T| )\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss",/(T| )\d\d:\d\d:\d\d/],["HH:mm",/(T| )\d\d:\d\d/],["HH",/(T| )\d\d/]],sd=/^\/?Date\((\-?\d+)/i;a.createFromInputFallback=aa("moment construction falls back to js Date. This is discouraged and will be removed in upcoming major release. Please refer to https://github.com/moment/moment/issues/1407 for more info.",function(a){a._d=new Date(a._i+(a._useUTC?" UTC":""))}),H(0,["YY",2],0,function(){return this.year()%100}),H(0,["YYYY",4],0,"year"),H(0,["YYYYY",5],0,"year"),H(0,["YYYYYY",6,!0],0,"year"),z("year","y"),N("Y",_c),N("YY",Wc,Sc),N("YYYY",Yc,Uc),N("YYYYY",Zc,Vc),N("YYYYYY",Zc,Vc),Q(["YYYYY","YYYYYY"],fd),Q("YYYY",function(b,c){c[fd]=2===b.length?a.parseTwoDigitYear(b):q(b)}),Q("YY",function(b,c){c[fd]=a.parseTwoDigitYear(b)}),a.parseTwoDigitYear=function(a){return q(a)+(q(a)>68?1900:2e3)};var td=C("FullYear",!1);H("w",["ww",2],"wo","week"),H("W",["WW",2],"Wo","isoWeek"),z("week","w"),z("isoWeek","W"),N("w",Wc),N("ww",Wc,Sc),N("W",Wc),N("WW",Wc,Sc),R(["w","ww","W","WW"],function(a,b,c,d){b[d.substr(0,1)]=q(a)});var ud={dow:0,doy:6};H("DDD",["DDDD",3],"DDDo","dayOfYear"),z("dayOfYear","DDD"),N("DDD",Xc),N("DDDD",Tc),Q(["DDD","DDDD"],function(a,b,c){c._dayOfYear=q(a)}),a.ISO_8601=function(){};var vd=aa("moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548",function(){var a=Da.apply(null,arguments);return this>a?this:a}),wd=aa("moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548",function(){var a=Da.apply(null,arguments);return a>this?this:a});Ja("Z",":"),Ja("ZZ",""),N("Z",ad),N("ZZ",ad),Q(["Z","ZZ"],function(a,b,c){c._useUTC=!0,c._tzm=Ka(a)});var xd=/([\+\-]|\d\d)/gi;a.updateOffset=function(){};var yd=/(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/,zd=/^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;Ya.fn=Ha.prototype;var Ad=ab(1,"add"),Bd=ab(-1,"subtract");a.defaultFormat="YYYY-MM-DDTHH:mm:ssZ";var Cd=aa("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(a){return void 0===a?this.localeData():this.locale(a)});H(0,["gg",2],0,function(){return this.weekYear()%100}),H(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Db("gggg","weekYear"),Db("ggggg","weekYear"),Db("GGGG","isoWeekYear"),Db("GGGGG","isoWeekYear"),z("weekYear","gg"),z("isoWeekYear","GG"),N("G",_c),N("g",_c),N("GG",Wc,Sc),N("gg",Wc,Sc),N("GGGG",Yc,Uc),N("gggg",Yc,Uc),N("GGGGG",Zc,Vc),N("ggggg",Zc,Vc),R(["gggg","ggggg","GGGG","GGGGG"],function(a,b,c,d){b[d.substr(0,2)]=q(a)}),R(["gg","GG"],function(b,c,d,e){c[e]=a.parseTwoDigitYear(b)}),H("Q",0,0,"quarter"),z("quarter","Q"),N("Q",Rc),Q("Q",function(a,b){b[gd]=3*(q(a)-1)}),H("D",["DD",2],"Do","date"),z("date","D"),N("D",Wc),N("DD",Wc,Sc),N("Do",function(a,b){return a?b._ordinalParse:b._ordinalParseLenient}),Q(["D","DD"],hd),Q("Do",function(a,b){b[hd]=q(a.match(Wc)[0],10)});var Dd=C("Date",!0);H("d",0,"do","day"),H("dd",0,0,function(a){return this.localeData().weekdaysMin(this,a)}),H("ddd",0,0,function(a){return this.localeData().weekdaysShort(this,a)}),H("dddd",0,0,function(a){return this.localeData().weekdays(this,a)}),H("e",0,0,"weekday"),H("E",0,0,"isoWeekday"),z("day","d"),z("weekday","e"),z("isoWeekday","E"),N("d",Wc),N("e",Wc),N("E",Wc),N("dd",cd),N("ddd",cd),N("dddd",cd),R(["dd","ddd","dddd"],function(a,b,c){var d=c._locale.weekdaysParse(a);null!=d?b.d=d:j(c).invalidWeekday=a}),R(["d","e","E"],function(a,b,c,d){b[d]=q(a)});var Ed="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Fd="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Gd="Su_Mo_Tu_We_Th_Fr_Sa".split("_");H("H",["HH",2],0,"hour"),H("h",["hh",2],0,function(){return this.hours()%12||12}),Sb("a",!0),Sb("A",!1),z("hour","h"),N("a",Tb),N("A",Tb),N("H",Wc),N("h",Wc),N("HH",Wc,Sc),N("hh",Wc,Sc),Q(["H","HH"],id),Q(["a","A"],function(a,b,c){c._isPm=c._locale.isPM(a),c._meridiem=a}),Q(["h","hh"],function(a,b,c){b[id]=q(a),j(c).bigHour=!0});var Hd=/[ap]\.?m?\.?/i,Id=C("Hours",!0);H("m",["mm",2],0,"minute"),z("minute","m"),N("m",Wc),N("mm",Wc,Sc),Q(["m","mm"],jd);var Jd=C("Minutes",!1);H("s",["ss",2],0,"second"),z("second","s"),N("s",Wc),N("ss",Wc,Sc),Q(["s","ss"],kd);var Kd=C("Seconds",!1);H("S",0,0,function(){return~~(this.millisecond()/100)}),H(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),H(0,["SSS",3],0,"millisecond"),H(0,["SSSS",4],0,function(){return 10*this.millisecond()}),H(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),H(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),H(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),H(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),H(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),z("millisecond","ms"),N("S",Xc,Rc),N("SS",Xc,Sc),N("SSS",Xc,Tc);var Ld;for(Ld="SSSS";Ld.length<=9;Ld+="S")N(Ld,$c);for(Ld="S";Ld.length<=9;Ld+="S")Q(Ld,Wb);var Md=C("Milliseconds",!1);H("z",0,0,"zoneAbbr"),H("zz",0,0,"zoneName");var Nd=n.prototype;Nd.add=Ad,Nd.calendar=cb,Nd.clone=db,Nd.diff=ib,Nd.endOf=ub,Nd.format=mb,Nd.from=nb,Nd.fromNow=ob,Nd.to=pb,Nd.toNow=qb,Nd.get=F,Nd.invalidAt=Cb,Nd.isAfter=eb,Nd.isBefore=fb,Nd.isBetween=gb,Nd.isSame=hb,Nd.isValid=Ab,Nd.lang=Cd,Nd.locale=rb,Nd.localeData=sb,Nd.max=wd,Nd.min=vd,Nd.parsingFlags=Bb,Nd.set=F,Nd.startOf=tb,Nd.subtract=Bd,Nd.toArray=yb,Nd.toObject=zb,Nd.toDate=xb,Nd.toISOString=lb,Nd.toJSON=lb,Nd.toString=kb,Nd.unix=wb,Nd.valueOf=vb,Nd.year=td,Nd.isLeapYear=ia,Nd.weekYear=Fb,Nd.isoWeekYear=Gb,Nd.quarter=Nd.quarters=Jb,Nd.month=Y,Nd.daysInMonth=Z,Nd.week=Nd.weeks=na,Nd.isoWeek=Nd.isoWeeks=oa,Nd.weeksInYear=Ib,Nd.isoWeeksInYear=Hb,Nd.date=Dd,Nd.day=Nd.days=Pb,Nd.weekday=Qb,Nd.isoWeekday=Rb,Nd.dayOfYear=qa,Nd.hour=Nd.hours=Id,Nd.minute=Nd.minutes=Jd,Nd.second=Nd.seconds=Kd,Nd.millisecond=Nd.milliseconds=Md,Nd.utcOffset=Na,Nd.utc=Pa,Nd.local=Qa,Nd.parseZone=Ra,Nd.hasAlignedHourOffset=Sa,Nd.isDST=Ta,Nd.isDSTShifted=Ua,Nd.isLocal=Va,Nd.isUtcOffset=Wa,Nd.isUtc=Xa,Nd.isUTC=Xa,Nd.zoneAbbr=Xb,Nd.zoneName=Yb,Nd.dates=aa("dates accessor is deprecated. Use date instead.",Dd),Nd.months=aa("months accessor is deprecated. Use month instead",Y),Nd.years=aa("years accessor is deprecated. Use year instead",td),Nd.zone=aa("moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779",Oa);var Od=Nd,Pd={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Qd={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},Rd="Invalid date",Sd="%d",Td=/\d{1,2}/,Ud={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},Vd=s.prototype;Vd._calendar=Pd,Vd.calendar=_b,Vd._longDateFormat=Qd,Vd.longDateFormat=ac,Vd._invalidDate=Rd,Vd.invalidDate=bc,Vd._ordinal=Sd,Vd.ordinal=cc,Vd._ordinalParse=Td,Vd.preparse=dc,Vd.postformat=dc,Vd._relativeTime=Ud,Vd.relativeTime=ec,Vd.pastFuture=fc,Vd.set=gc,Vd.months=U,Vd._months=md,Vd.monthsShort=V,Vd._monthsShort=nd,Vd.monthsParse=W,Vd.week=ka,Vd._week=ud,Vd.firstDayOfYear=ma,Vd.firstDayOfWeek=la,Vd.weekdays=Lb,Vd._weekdays=Ed,Vd.weekdaysMin=Nb,Vd._weekdaysMin=Gd,Vd.weekdaysShort=Mb,Vd._weekdaysShort=Fd,Vd.weekdaysParse=Ob,Vd.isPM=Ub,Vd._meridiemParse=Hd,Vd.meridiem=Vb,w("en",{ordinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(a){var b=a%10,c=1===q(a%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th";return a+c}}),a.lang=aa("moment.lang is deprecated. Use moment.locale instead.",w),a.langData=aa("moment.langData is deprecated. Use moment.localeData instead.",y);var Wd=Math.abs,Xd=yc("ms"),Yd=yc("s"),Zd=yc("m"),$d=yc("h"),_d=yc("d"),ae=yc("w"),be=yc("M"),ce=yc("y"),de=Ac("milliseconds"),ee=Ac("seconds"),fe=Ac("minutes"),ge=Ac("hours"),he=Ac("days"),ie=Ac("months"),je=Ac("years"),ke=Math.round,le={s:45,m:45,h:22,d:26,M:11},me=Math.abs,ne=Ha.prototype;ne.abs=oc,ne.add=qc,ne.subtract=rc,ne.as=wc,ne.asMilliseconds=Xd,ne.asSeconds=Yd,ne.asMinutes=Zd,ne.asHours=$d,ne.asDays=_d,ne.asWeeks=ae,ne.asMonths=be,ne.asYears=ce,ne.valueOf=xc,ne._bubble=tc,ne.get=zc,ne.milliseconds=de,ne.seconds=ee,ne.minutes=fe,ne.hours=ge,ne.days=he,ne.weeks=Bc,ne.months=ie,ne.years=je,ne.humanize=Fc,ne.toISOString=Gc,ne.toString=Gc,ne.toJSON=Gc,ne.locale=rb,ne.localeData=sb,ne.toIsoString=aa("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",Gc),ne.lang=Cd,H("X",0,0,"unix"),H("x",0,0,"valueOf"),N("x",_c),N("X",bd),Q("X",function(a,b,c){c._d=new Date(1e3*parseFloat(a,10))}),Q("x",function(a,b,c){c._d=new Date(q(a))}),a.version="2.10.6",b(Da),a.fn=Od,a.min=Fa,a.max=Ga,a.utc=h,a.unix=Zb,a.months=jc,a.isDate=d,a.locale=w,a.invalid=l,a.duration=Ya,a.isMoment=o,a.weekdays=lc,a.parseZone=$b,a.localeData=y,a.isDuration=Ia,a.monthsShort=kc,a.weekdaysMin=nc,a.defineLocale=x,a.weekdaysShort=mc,a.normalizeUnits=A,a.relativeTimeThreshold=Ec;var oe=a;return oe}),function(a,b){"use strict";angular.module("adf.widget.clock",["adf.provider"]).config(["dashboardProvider",function(a){a.widget("clock",{title:"Clock",description:"Displays date and time",templateUrl:"{widgetsPath}/clock/src/view.html",controller:"clockController",controllerAs:"clock",config:{timePattern:"HH:mm:ss",datePattern:"YYYY-MM-DD"},edit:{templateUrl:"{widgetsPath}/clock/src/edit.html"}})}]).controller("clockController",["$scope","$interval","config",function(a,b,c){function d(){var a=new moment;e.time=a.format(c.timePattern),e.date=a.format(c.datePattern)}var e=this;d();var f=b(d,1e3);a.$on("$destroy",function(){b.cancel(f)})}]),angular.module("adf.widget.clock").run(["$templateCache",function(a){a.put("{widgetsPath}/clock/src/edit.html",'<form role=form><div class=form-group><label for=time>Time pattern</label> <input type=text class=form-control id=time ng-model=config.timePattern></div><div class=form-group><label for=date>Date pattern</label> <input type=text class=form-control id=date ng-model=config.datePattern></div><p class=text-info>For the list of possible patterns, please have a look at <a target=_blank href="http://momentjs.com/docs/#/displaying/">moment.js documentation</a></p></form>'),
+a.put("{widgetsPath}/clock/src/view.html","<div class=clock><div class=clock-time>{{clock.time}}</div><div class=clock-date>{{clock.date}}</div></div>")}])}(window),function(a,b){"use strict";angular.module("adf.widget.iframe",["adf.provider"]).config(["dashboardProvider",function(a){a.widget("iframe",{title:"iframe",description:"Embed an external page into the dashboard",templateUrl:"{widgetsPath}/iframe/src/view.html",controller:"iframeController",controllerAs:"iframe",edit:{templateUrl:"{widgetsPath}/iframe/src/edit.html"},config:{height:"420px"}})}]).controller("iframeController",["$sce","config",function(a,b){b.url&&(this.url=a.trustAsResourceUrl(b.url))}]),angular.module("adf.widget.iframe").run(["$templateCache",function(a){a.put("{widgetsPath}/iframe/src/edit.html","<form role=form><div class=form-group><label for=url>URL</label> <input type=url class=form-control id=url ng-model=config.url placeholder=http://www.example.com></div><div class=form-group><label for=url>Height</label> <input type=text class=form-control id=url ng-model=config.height></div></form>"),a.put("{widgetsPath}/iframe/src/view.html",'<div><div class="alert alert-info" ng-if=!config.url>Please insert a url in the widget configuration</div><iframe ng-if=iframe.url class=adf-iframe style="height: {{config.height}}" src={{iframe.url}}></iframe></div>')}])}(window),function(a,b,c){"use strict";function d(a,b,c){if(!a)throw ngMinErr("areq","Argument '{0}' is {1}",b||"?",c||"required");return a}function e(a,b){return a||b?a?b?(Q(a)&&(a=a.join(" ")),Q(b)&&(b=b.join(" ")),a+" "+b):a:b:""}function f(a){var b={};return a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from),b}function g(a,b,c){var d="";return a=Q(a)?a:a&&R(a)&&a.length?a.split(/\s+/):[],P(a,function(a,e){a&&a.length>0&&(d+=e>0?" ":"",d+=c?b+a:a+b)}),d}function h(a,b){var c=a.indexOf(b);b>=0&&a.splice(c,1)}function i(a){if(a instanceof O)switch(a.length){case 0:return[];case 1:if(a[0].nodeType===X)return a;break;default:return O(j(a))}return a.nodeType===X?O(a):void 0}function j(a){if(!a[0])return a;for(var b=0;b<a.length;b++){var c=a[b];if(c.nodeType==X)return c}}function k(a,b,c){P(b,function(b){a.addClass(b,c)})}function l(a,b,c){P(b,function(b){a.removeClass(b,c)})}function m(a){return function(b,c){c.addClass&&(k(a,b,c.addClass),c.addClass=null),c.removeClass&&(l(a,b,c.removeClass),c.removeClass=null)}}function n(a){if(a=a||{},!a.$$prepared){var b=a.domOperation||M;a.domOperation=function(){a.$$domOperationFired=!0,b(),b=M},a.$$prepared=!0}return a}function o(a,b){p(a,b),q(a,b)}function p(a,b){b.from&&(a.css(b.from),b.from=null)}function q(a,b){b.to&&(a.css(b.to),b.to=null)}function r(a,b,c){var d=(b.addClass||"")+" "+(c.addClass||""),e=(b.removeClass||"")+" "+(c.removeClass||""),f=s(a.attr("class"),d,e);c.preparationClasses&&(b.preparationClasses=z(c.preparationClasses,b.preparationClasses),delete c.preparationClasses);var g=b.domOperation!==M?b.domOperation:null;return N(b,c),g&&(b.domOperation=g),f.addClass?b.addClass=f.addClass:b.addClass=null,f.removeClass?b.removeClass=f.removeClass:b.removeClass=null,b}function s(a,b,c){function d(a){R(a)&&(a=a.split(" "));var b={};return P(a,function(a){a.length&&(b[a]=!0)}),b}var e=1,f=-1,g={};a=d(a),b=d(b),P(b,function(a,b){g[b]=e}),c=d(c),P(c,function(a,b){g[b]=g[b]===e?null:f});var h={addClass:"",removeClass:""};return P(g,function(b,c){var d,g;b===e?(d="addClass",g=!a[c]):b===f&&(d="removeClass",g=a[c]),g&&(h[d].length&&(h[d]+=" "),h[d]+=c)}),h}function t(a){return a instanceof b.element?a[0]:a}function u(a,b,c){var d="";b&&(d=g(b,$,!0)),c.addClass&&(d=z(d,g(c.addClass,Y))),c.removeClass&&(d=z(d,g(c.removeClass,Z))),d.length&&(c.preparationClasses=d,a.addClass(d))}function v(a,b){b.preparationClasses&&(a.removeClass(b.preparationClasses),b.preparationClasses=null),b.activeClasses&&(a.removeClass(b.activeClasses),b.activeClasses=null)}function w(a,b){var c=b?"-"+b+"s":"";return y(a,[ma,c]),[ma,c]}function x(a,b){var c=b?"paused":"",d=K+ia;return y(a,[d,c]),[d,c]}function y(a,b){var c=b[0],d=b[1];a.style[c]=d}function z(a,b){return a?b?a+" "+b:a:b}function A(a){return[la,a+"s"]}function B(a,b){var c=b?ka:ma;return[c,a+"s"]}function C(a,b,c){var d=Object.create(null),e=a.getComputedStyle(b)||{};return P(c,function(a,b){var c=e[a];if(c){var f=c.charAt(0);("-"===f||"+"===f||f>=0)&&(c=D(c)),0===c&&(c=null),d[b]=c}}),d}function D(a){var b=0,c=a.split(/\s*,\s*/);return P(c,function(a){"s"==a.charAt(a.length-1)&&(a=a.substring(0,a.length-1)),a=parseFloat(a)||0,b=b?Math.max(a,b):a}),b}function E(a){return 0===a||null!=a}function F(a,b){var c=I,d=a+"s";return b?c+=da:d+=" linear all",[c,d]}function G(){var a=Object.create(null);return{flush:function(){a=Object.create(null)},count:function(b){var c=a[b];return c?c.total:0},get:function(b){var c=a[b];return c&&c.value},put:function(b,c){a[b]?a[b].total++:a[b]={total:1,value:c}}}}function H(a,b,c){P(c,function(c){a[c]=U(a[c])?a[c]:b.style.getPropertyValue(c)})}var I,J,K,L,M=b.noop,N=b.extend,O=b.element,P=b.forEach,Q=b.isArray,R=b.isString,S=b.isObject,T=b.isUndefined,U=b.isDefined,V=b.isFunction,W=b.isElement,X=1,Y="-add",Z="-remove",$="ng-",_="-active",aa="ng-animate",ba="$$ngAnimateChildren",ca="";T(a.ontransitionend)&&U(a.onwebkittransitionend)?(ca="-webkit-",I="WebkitTransition",J="webkitTransitionEnd transitionend"):(I="transition",J="transitionend"),T(a.onanimationend)&&U(a.onwebkitanimationend)?(ca="-webkit-",K="WebkitAnimation",L="webkitAnimationEnd animationend"):(K="animation",L="animationend");var da="Duration",ea="Property",fa="Delay",ga="TimingFunction",ha="IterationCount",ia="PlayState",ja=9999,ka=K+fa,la=K+da,ma=I+fa,na=I+da,oa=["$$rAF",function(a){function b(a){d=d.concat(a),c()}function c(){if(d.length){for(var b=d.shift(),f=0;f<b.length;f++)b[f]();e||a(function(){e||c()})}}var d,e;return d=b.queue=[],b.waitUntilQuiet=function(b){e&&e(),e=a(function(){e=null,b(),c()})},b}],pa=[function(){return function(a,c,d){var e=d.ngAnimateChildren;b.isString(e)&&0===e.length?c.data(ba,!0):d.$observe("ngAnimateChildren",function(a){a="on"===a||"true"===a,c.data(ba,a)})}}],qa="$$animateCss",ra=1e3,sa=3,ta=1.5,ua={transitionDuration:na,transitionDelay:ma,transitionProperty:I+ea,animationDuration:la,animationDelay:ka,animationIterationCount:K+ha},va={transitionDuration:na,transitionDelay:ma,animationDuration:la,animationDelay:ka},wa=["$animateProvider",function(a){var b=G(),c=G();this.$get=["$window","$$jqLite","$$AnimateRunner","$timeout","$$forceReflow","$sniffer","$$rAFScheduler","$animate",function(a,d,e,i,j,k,l,r){function s(a,b){var c="$$ngAnimateParentKey",d=a.parentNode,e=d[c]||(d[c]=++N);return e+"-"+a.getAttribute("class")+"-"+b}function u(c,d,e,f){var g=b.get(e);return g||(g=C(a,c,f),"infinite"===g.animationIterationCount&&(g.animationIterationCount=1)),b.put(e,g),g}function v(e,f,h,i){var j;if(b.count(h)>0&&(j=c.get(h),!j)){var k=g(f,"-stagger");d.addClass(e,k),j=C(a,e,i),j.animationDuration=Math.max(j.animationDuration,0),j.transitionDuration=Math.max(j.transitionDuration,0),d.removeClass(e,k),c.put(h,j)}return j||{}}function z(a){O.push(a),l.waitUntilQuiet(function(){b.flush(),c.flush();for(var a=j(),d=0;d<O.length;d++)O[d](a);O.length=0})}function D(a,b,c){var d=u(a,b,c,ua),e=d.animationDelay,f=d.transitionDelay;return d.maxDelay=e&&f?Math.max(e,f):e||f,d.maxDuration=Math.max(d.animationDuration*d.animationIterationCount,d.transitionDuration),d}var G=m(d),N=0,O=[];return function(a,c){function j(){m()}function l(){m(!0)}function m(b){S||U&&T||(S=!0,T=!1,c.$$skipPreparationClasses||d.removeClass(a,na),d.removeClass(a,pa),x(R,!1),w(R,!1),P(da,function(a){R.style[a[0]]=""}),G(a,c),o(a,c),Object.keys(O).length&&P(O,function(a,b){a?R.style.setProperty(b,a):R.style.removeProperty(b)}),c.onDone&&c.onDone(),V&&V.complete(!b))}function u(a){Ia.blockTransition&&w(R,a),Ia.blockKeyframeAnimation&&x(R,!!a)}function C(){return V=new e({end:j,cancel:l}),z(M),m(),{$$willAnimate:!1,start:function(){return V},end:j}}function N(){function b(){if(!S){if(u(!1),P(da,function(a){var b=a[0],c=a[1];R.style[b]=c}),G(a,c),d.addClass(a,pa),Ia.recalculateTimingStyles){if(oa=R.className+" "+na,xa=s(R,oa),Ga=D(R,oa,xa),Ha=Ga.maxDelay,X=Math.max(Ha,0),ba=Ga.maxDuration,0===ba)return void m();Ia.hasTransitions=Ga.transitionDuration>0,Ia.hasAnimations=Ga.animationDuration>0}if(Ia.applyAnimationDelay&&(Ha="boolean"!=typeof c.delay&&E(c.delay)?parseFloat(c.delay):Ha,X=Math.max(Ha,0),Ga.animationDelay=Ha,Ja=B(Ha,!0),da.push(Ja),R.style[Ja[0]]=Ja[1]),aa=X*ra,ca=ba*ra,c.easing){var b,h=c.easing;Ia.hasTransitions&&(b=I+ga,da.push([b,h]),R.style[b]=h),Ia.hasAnimations&&(b=K+ga,da.push([b,h]),R.style[b]=h)}Ga.transitionDuration&&j.push(J),Ga.animationDuration&&j.push(L),g=Date.now();var k=aa+ta*ca,l=g+k,n=a.data(qa)||[],o=!0;if(n.length){var p=n[0];o=l>p.expectedEndTime,o?i.cancel(p.timer):n.push(m)}if(o){var r=i(e,k,!1);n[0]={timer:r,expectedEndTime:l},n.push(m),a.data(qa,n)}a.on(j.join(" "),f),c.to&&(c.cleanupStyles&&H(O,R,Object.keys(c.to)),q(a,c))}}function e(){var b=a.data(qa);if(b){for(var c=1;c<b.length;c++)b[c]();a.removeData(qa)}}function f(a){a.stopPropagation();var b=a.originalEvent||a,c=b.$manualTimeStamp||b.timeStamp||Date.now(),d=parseFloat(b.elapsedTime.toFixed(sa));Math.max(c-g,0)>=aa&&d>=ba&&(U=!0,m())}if(!S){if(!R.parentNode)return void m();var g,j=[],k=function(a){if(U)T&&a&&(T=!1,m());else if(T=!a,Ga.animationDuration){var b=x(R,T);T?da.push(b):h(da,b)}},l=Ea>0&&(Ga.transitionDuration&&0===ya.transitionDuration||Ga.animationDuration&&0===ya.animationDuration)&&Math.max(ya.animationDelay,ya.transitionDelay);l?i(b,Math.floor(l*Ea*ra),!1):b(),W.resume=function(){k(!0)},W.pause=function(){k(!1)}}}var O={},R=t(a);if(!R||!R.parentNode||!r.enabled())return C();c=n(c);var S,T,U,V,W,X,aa,ba,ca,da=[],fa=a.attr("class"),ha=f(c);if(0===c.duration||!k.animations&&!k.transitions)return C();var ia=c.event&&Q(c.event)?c.event.join(" "):c.event,ka=ia&&c.structural,la="",ma="";ka?la=g(ia,$,!0):ia&&(la=ia),c.addClass&&(ma+=g(c.addClass,Y)),c.removeClass&&(ma.length&&(ma+=" "),ma+=g(c.removeClass,Z)),c.applyClassesEarly&&ma.length&&G(a,c);var na=[la,ma].join(" ").trim(),oa=fa+" "+na,pa=g(na,_),ua=ha.to&&Object.keys(ha.to).length>0,wa=(c.keyframeStyle||"").length>0;if(!wa&&!ua&&!na)return C();var xa,ya;if(c.stagger>0){var za=parseFloat(c.stagger);ya={transitionDelay:za,animationDelay:za,transitionDuration:0,animationDuration:0}}else xa=s(R,oa),ya=v(R,na,xa,va);c.$$skipPreparationClasses||d.addClass(a,na);var Aa;if(c.transitionStyle){var Ba=[I,c.transitionStyle];y(R,Ba),da.push(Ba)}if(c.duration>=0){Aa=R.style[I].length>0;var Ca=F(c.duration,Aa);y(R,Ca),da.push(Ca)}if(c.keyframeStyle){var Da=[K,c.keyframeStyle];y(R,Da),da.push(Da)}var Ea=ya?c.staggerIndex>=0?c.staggerIndex:b.count(xa):0,Fa=0===Ea;Fa&&!c.skipBlocking&&w(R,ja);var Ga=D(R,oa,xa),Ha=Ga.maxDelay;X=Math.max(Ha,0),ba=Ga.maxDuration;var Ia={};if(Ia.hasTransitions=Ga.transitionDuration>0,Ia.hasAnimations=Ga.animationDuration>0,Ia.hasTransitionAll=Ia.hasTransitions&&"all"==Ga.transitionProperty,Ia.applyTransitionDuration=ua&&(Ia.hasTransitions&&!Ia.hasTransitionAll||Ia.hasAnimations&&!Ia.hasTransitions),Ia.applyAnimationDuration=c.duration&&Ia.hasAnimations,Ia.applyTransitionDelay=E(c.delay)&&(Ia.applyTransitionDuration||Ia.hasTransitions),Ia.applyAnimationDelay=E(c.delay)&&Ia.hasAnimations,Ia.recalculateTimingStyles=ma.length>0,(Ia.applyTransitionDuration||Ia.applyAnimationDuration)&&(ba=c.duration?parseFloat(c.duration):ba,Ia.applyTransitionDuration&&(Ia.hasTransitions=!0,Ga.transitionDuration=ba,Aa=R.style[I+ea].length>0,da.push(F(ba,Aa))),Ia.applyAnimationDuration&&(Ia.hasAnimations=!0,Ga.animationDuration=ba,da.push(A(ba)))),0===ba&&!Ia.recalculateTimingStyles)return C();if(null!=c.delay){var Ja=parseFloat(c.delay);Ia.applyTransitionDelay&&da.push(B(Ja)),Ia.applyAnimationDelay&&da.push(B(Ja,!0))}return null==c.duration&&Ga.transitionDuration>0&&(Ia.recalculateTimingStyles=Ia.recalculateTimingStyles||Fa),aa=X*ra,ca=ba*ra,c.skipBlocking||(Ia.blockTransition=Ga.transitionDuration>0,Ia.blockKeyframeAnimation=Ga.animationDuration>0&&ya.animationDelay>0&&0===ya.animationDuration),c.from&&(c.cleanupStyles&&H(O,R,Object.keys(c.from)),p(a,c)),Ia.blockTransition||Ia.blockKeyframeAnimation?u(ba):c.skipBlocking||w(R,!1),{$$willAnimate:!0,end:j,start:function(){return S?void 0:(W={end:j,cancel:l,resume:null,pause:null},V=new e(W),z(N),V)}}}}]}],xa=["$$animationProvider",function(a){function b(a){return a.parentNode&&11===a.parentNode.nodeType}a.drivers.push("$$animateCssDriver");var c="ng-animate-shim",d="ng-anchor",e="ng-anchor-out",f="ng-anchor-in";this.$get=["$animateCss","$rootScope","$$AnimateRunner","$rootElement","$sniffer","$$jqLite","$document",function(a,g,h,i,j,k,l){function n(a){return a.replace(/\bng-\S+\b/g,"")}function o(a,b){return R(a)&&(a=a.split(" ")),R(b)&&(b=b.split(" ")),a.filter(function(a){return-1===b.indexOf(a)}).join(" ")}function p(b,g,i){function j(a){var b={},c=t(a).getBoundingClientRect();return P(["width","height","top","left"],function(a){var d=c[a];switch(a){case"top":d+=s.scrollTop;break;case"left":d+=s.scrollLeft}b[a]=Math.floor(d)+"px"}),b}function k(){var b=a(q,{addClass:e,delay:!0,from:j(g)});return b.$$willAnimate?b:null}function l(a){return a.attr("class")||""}function m(){var b=n(l(i)),c=o(b,r),d=o(r,b),g=a(q,{to:j(i),addClass:f+" "+c,removeClass:e+" "+d,delay:!0});return g.$$willAnimate?g:null}function p(){q.remove(),g.removeClass(c),i.removeClass(c)}var q=O(t(g).cloneNode(!0)),r=n(l(q));g.addClass(c),i.addClass(c),q.addClass(d),v.append(q);var u,w=k();if(!w&&(u=m(),!u))return p();var x=w||u;return{start:function(){function a(){c&&c.end()}var b,c=x.start();return c.done(function(){return c=null,!u&&(u=m())?(c=u.start(),c.done(function(){c=null,p(),b.complete()}),c):(p(),void b.complete())}),b=new h({end:a,cancel:a})}}}function q(a,b,c,d){var e=r(a,M),f=r(b,M),g=[];return P(d,function(a){var b=a.out,d=a["in"],e=p(c,b,d);e&&g.push(e)}),e||f||0!==g.length?{start:function(){function a(){P(b,function(a){a.end()})}var b=[];e&&b.push(e.start()),f&&b.push(f.start()),P(g,function(a){b.push(a.start())});var c=new h({end:a,cancel:a});return h.all(b,function(a){c.complete(a)}),c}}:void 0}function r(b){var c=b.element,d=b.options||{};b.structural&&(d.event=b.event,d.structural=!0,d.applyClassesEarly=!0,"leave"===b.event&&(d.onDone=d.domOperation)),d.preparationClasses&&(d.event=z(d.event,d.preparationClasses));var e=a(c,d);return e.$$willAnimate?e:null}if(!j.animations&&!j.transitions)return M;var s=l[0].body,u=t(i),v=O(b(u)||s.contains(u)?u:s);m(k);return function(a){return a.from&&a.to?q(a.from,a.to,a.classes,a.anchors):r(a)}}]}],ya=["$animateProvider",function(a){this.$get=["$injector","$$AnimateRunner","$$jqLite",function(b,c,d){function e(c){c=Q(c)?c:c.split(" ");for(var d=[],e={},f=0;f<c.length;f++){var g=c[f],h=a.$$registeredAnimations[g];h&&!e[g]&&(d.push(b.get(h)),e[g]=!0)}return d}var f=m(d);return function(a,b,d,g){function h(){g.domOperation(),f(a,g)}function i(a,b,d,e,f){var g;switch(d){case"animate":g=[b,e.from,e.to,f];break;case"setClass":g=[b,p,q,f];break;case"addClass":g=[b,p,f];break;case"removeClass":g=[b,q,f];break;default:g=[b,f]}g.push(e);var h=a.apply(a,g);if(h)if(V(h.start)&&(h=h.start()),h instanceof c)h.done(f);else if(V(h))return h;return M}function j(a,b,d,e,f){var g=[];return P(e,function(e){var h=e[f];h&&g.push(function(){var e,f,g=!1,j=function(a){g||(g=!0,(f||M)(a),e.complete(!a))};return e=new c({end:function(){j()},cancel:function(){j(!0)}}),f=i(h,a,b,d,function(a){var b=a===!1;j(b)}),e})}),g}function k(a,b,d,e,f){var g=j(a,b,d,e,f);if(0===g.length){var h,i;"beforeSetClass"===f?(h=j(a,"removeClass",d,e,"beforeRemoveClass"),i=j(a,"addClass",d,e,"beforeAddClass")):"setClass"===f&&(h=j(a,"removeClass",d,e,"removeClass"),i=j(a,"addClass",d,e,"addClass")),h&&(g=g.concat(h)),i&&(g=g.concat(i))}if(0!==g.length)return function(a){var b=[];return g.length&&P(g,function(a){b.push(a())}),b.length?c.all(b,a):a(),function(a){P(b,function(b){a?b.cancel():b.end()})}}}3===arguments.length&&S(d)&&(g=d,d=null),g=n(g),d||(d=a.attr("class")||"",g.addClass&&(d+=" "+g.addClass),g.removeClass&&(d+=" "+g.removeClass));var l,m,p=g.addClass,q=g.removeClass,r=e(d);if(r.length){var s,t;"leave"==b?(t="leave",s="afterLeave"):(t="before"+b.charAt(0).toUpperCase()+b.substr(1),s=b),"enter"!==b&&"move"!==b&&(l=k(a,b,g,r,t)),m=k(a,b,g,r,s)}return l||m?{start:function(){function b(b){i=!0,h(),o(a,g),j.complete(b)}function d(a){i||((e||M)(a),b(a))}var e,f=[];l&&f.push(function(a){e=l(a)}),f.length?f.push(function(a){h(),a(!0)}):h(),m&&f.push(function(a){e=m(a)});var i=!1,j=new c({end:function(){d()},cancel:function(){d(!0)}});return c.chain(f,b),j}}:void 0}}]}],za=["$$animationProvider",function(a){a.drivers.push("$$animateJsDriver"),this.$get=["$$animateJs","$$AnimateRunner",function(a,b){function c(b){var c=b.element,d=b.event,e=b.options,f=b.classes;return a(c,d,f,e)}return function(a){if(a.from&&a.to){var d=c(a.from),e=c(a.to);if(!d&&!e)return;return{start:function(){function a(){return function(){P(f,function(a){a.end()})}}function c(a){g.complete(a)}var f=[];d&&f.push(d.start()),e&&f.push(e.start()),b.all(f,c);var g=new b({end:a(),cancel:a()});return g}}}return c(a)}}]}],Aa="data-ng-animate",Ba="$ngAnimatePin",Ca=["$animateProvider",function(a){function b(a,b,c,d){return g[a].some(function(a){return a(b,c,d)})}function c(a,b){a=a||{};var c=(a.addClass||"").length>0,d=(a.removeClass||"").length>0;return b?c&&d:c||d}var e=1,f=2,g=this.rules={skip:[],cancel:[],join:[]};g.join.push(function(a,b,d){return!b.structural&&c(b.options)}),g.skip.push(function(a,b,d){return!b.structural&&!c(b.options)}),g.skip.push(function(a,b,c){return"leave"==c.event&&b.structural}),g.skip.push(function(a,b,c){return c.structural&&c.state===f&&!b.structural}),g.cancel.push(function(a,b,c){return c.structural&&b.structural}),g.cancel.push(function(a,b,c){return c.state===f&&b.structural}),g.cancel.push(function(a,b,c){var d=b.options,e=c.options;return d.addClass&&d.addClass===e.removeClass||d.removeClass&&d.removeClass===e.addClass}),this.$get=["$$rAF","$rootScope","$rootElement","$document","$$HashMap","$$animation","$$AnimateRunner","$templateRequest","$$jqLite","$$forceReflow",function(g,h,k,l,p,q,s,w,x,y){function z(){var a=!1;return function(b){a?b():h.$$postDigest(function(){a=!0,b()})}}function A(a,b){return r(a,b,{})}function B(a,b,c){var d=t(b),e=t(a),f=[],g=M[c];return g&&P(g,function(a){a.node.contains(d)?f.push(a.callback):"leave"===c&&a.node.contains(e)&&f.push(a.callback)}),f}function C(a,d,j){function k(b,c,d,e){x(function(){var b=B(p,a,c);b.length&&g(function(){P(b,function(b){b(a,d,e)})})}),b.progress(c,d,e)}function l(b){v(a,j),Z(a,j),o(a,j),j.domOperation(),w.complete(!b)}var m,p;a=i(a),a&&(m=t(a),p=a.parent()),j=n(j);var w=new s,x=z();if(Q(j.addClass)&&(j.addClass=j.addClass.join(" ")),j.addClass&&!R(j.addClass)&&(j.addClass=null),Q(j.removeClass)&&(j.removeClass=j.removeClass.join(" ")),j.removeClass&&!R(j.removeClass)&&(j.removeClass=null),j.from&&!S(j.from)&&(j.from=null),j.to&&!S(j.to)&&(j.to=null),!m)return l(),w;var y=[m.className,j.addClass,j.removeClass].join(" ");if(!Y(y))return l(),w;var C=["enter","move","leave"].indexOf(d)>=0,F=!K||J.get(m),L=!F&&I.get(m)||{},M=!!L.state;if(F||M&&L.state==e||(F=!G(a,p,d)),F)return l(),w;C&&D(a);var N={structural:C,element:a,event:d,close:l,options:j,runner:w};if(M){var O=b("skip",a,N,L);if(O)return L.state===f?(l(),w):(r(a,L.options,j),L.runner);var T=b("cancel",a,N,L);if(T)if(L.state===f)L.runner.end();else{if(!L.structural)return r(a,L.options,N.options),L.runner;L.close()}else{var U=b("join",a,N,L);if(U){if(L.state!==f)return u(a,C?d:null,j),d=N.event=L.event,j=r(a,L.options,N.options),L.runner;A(a,j)}}}else A(a,j);var V=N.structural;if(V||(V="animate"===N.event&&Object.keys(N.options.to||{}).length>0||c(N.options)),!V)return l(),E(a),w;var W=(L.counter||0)+1;return N.counter=W,H(a,e,N),h.$$postDigest(function(){var b=I.get(m),e=!b;b=b||{};var g=a.parent()||[],h=g.length>0&&("animate"===b.event||b.structural||c(b.options));if(e||b.counter!==W||!h)return e&&(Z(a,j),o(a,j)),(e||C&&b.event!==d)&&(j.domOperation(),w.end()),void(h||E(a));d=!b.structural&&c(b.options,!0)?"setClass":b.event,H(a,f);var i=q(a,d,b.options);i.done(function(b){l(!b);var c=I.get(m);c&&c.counter===W&&E(t(a)),k(w,d,"close",{})}),w.setHost(i),k(w,d,"start",{})}),w}function D(a){var b=t(a),c=b.querySelectorAll("["+Aa+"]");P(c,function(a){var b=parseInt(a.getAttribute(Aa)),c=I.get(a);switch(b){case f:c.runner.end();case e:c&&I.remove(a)}})}function E(a){var b=t(a);b.removeAttribute(Aa),I.remove(b)}function F(a,b){return t(a)===t(b)}function G(a,b,c){var d,e=O(l[0].body),f=F(a,e)||"HTML"===a[0].nodeName,g=F(a,k),h=!1,i=a.data(Ba);for(i&&(b=i);b&&b.length;){g||(g=F(b,k));var j=b[0];if(j.nodeType!==X)break;var m=I.get(j)||{};if(h||(h=m.structural||J.get(j)),T(d)||d===!0){var n=b.data(ba);U(n)&&(d=n)}if(h&&d===!1)break;g||(g=F(b,k),g||(i=b.data(Ba),i&&(b=i))),f||(f=F(b,e)),b=b.parent()}var o=!h||d;return o&&g&&f}function H(a,b,c){c=c||{},c.state=b;var d=t(a);d.setAttribute(Aa,b);var e=I.get(d),f=e?N(e,c):c;I.put(d,f)}var I=new p,J=new p,K=null,L=h.$watch(function(){return 0===w.totalPendingRequests},function(a){a&&(L(),h.$$postDigest(function(){h.$$postDigest(function(){null===K&&(K=!0)})}))}),M={},V=a.classNameFilter(),Y=V?function(a){return V.test(a)}:function(){return!0},Z=m(x);return{on:function(a,b,c){var d=j(b);M[a]=M[a]||[],M[a].push({node:d,callback:c})},off:function(a,b,c){function d(a,b,c){var d=j(b);return a.filter(function(a){var b=a.node===d&&(!c||a.callback===c);return!b})}var e=M[a];e&&(M[a]=1===arguments.length?null:d(e,b,c))},pin:function(a,b){d(W(a),"element","not an element"),d(W(b),"parentElement","not an element"),a.data(Ba,b)},push:function(a,b,c,d){return c=c||{},c.domOperation=d,C(a,b,c)},enabled:function(a,b){var c=arguments.length;if(0===c)b=!!K;else{var d=W(a);if(d){var e=t(a),f=J.get(e);1===c?b=!f:(b=!!b,b?f&&J.remove(e):J.put(e,!0))}else b=K=!!a}return b}}}]}],Da=["$$rAF",function(a){function b(b){c.push(b),c.length>1||a(function(){for(var a=0;a<c.length;a++)c[a]();c=[]})}var c=[];return function(){var a=!1;return b(function(){a=!0}),function(c){a?c():b(c)}}}],Ea=["$q","$sniffer","$$animateAsyncRun",function(a,b,c){function d(a){this.setHost(a),this._doneCallbacks=[],this._runInAnimationFrame=c(),this._state=0}var e=0,f=1,g=2;return d.chain=function(a,b){function c(){return d===a.length?void b(!0):void a[d](function(a){return a===!1?void b(!1):(d++,void c())})}var d=0;c()},d.all=function(a,b){function c(c){e=e&&c,++d===a.length&&b(e)}var d=0,e=!0;P(a,function(a){a.done(c)})},d.prototype={setHost:function(a){this.host=a||{}},done:function(a){this._state===g?a():this._doneCallbacks.push(a)},progress:M,getPromise:function(){if(!this.promise){var b=this;this.promise=a(function(a,c){b.done(function(b){b===!1?c():a()})})}return this.promise},then:function(a,b){return this.getPromise().then(a,b)},"catch":function(a){return this.getPromise()["catch"](a)},"finally":function(a){return this.getPromise()["finally"](a)},pause:function(){this.host.pause&&this.host.pause()},resume:function(){this.host.resume&&this.host.resume()},end:function(){this.host.end&&this.host.end(),this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel(),this._resolve(!1)},complete:function(a){var b=this;b._state===e&&(b._state=f,b._runInAnimationFrame(function(){b._resolve(a)}))},_resolve:function(a){this._state!==g&&(P(this._doneCallbacks,function(b){b(a)}),this._doneCallbacks.length=0,this._state=g)}},d}],Fa=["$animateProvider",function(a){function b(a,b){a.data(h,b)}function c(a){a.removeData(h)}function d(a){return a.data(h)}var f="ng-animate-ref",g=this.drivers=[],h="$$animationRunner";this.$get=["$$jqLite","$rootScope","$injector","$$AnimateRunner","$$HashMap","$$rAFScheduler",function(a,h,i,j,k,l){function p(a){function b(a){if(a.processed)return a;a.processed=!0;var c=a.domNode,d=c.parentNode;f.put(c,a);for(var g;d;){if(g=f.get(d)){g.processed||(g=b(g));break}d=d.parentNode}return(g||e).children.push(a),a}function c(a){var b,c=[],d=[];for(b=0;b<a.children.length;b++)d.push(a.children[b]);var e=d.length,f=0,g=[];for(b=0;b<d.length;b++){var h=d[b];0>=e&&(e=f,f=0,c.push(g),g=[]),g.push(h.fn),h.children.forEach(function(a){f++,d.push(a)}),e--}return g.length&&c.push(g),c}var d,e={children:[]},f=new k;for(d=0;d<a.length;d++){var g=a[d];f.put(g.domNode,a[d]={domNode:g.domNode,fn:g.fn,children:[]})}for(d=0;d<a.length;d++)b(a[d]);return c(e)}var q=[],r=m(a);return function(k,m,s){function u(a){var b="["+f+"]",c=a.hasAttribute(f)?[a]:a.querySelectorAll(b),d=[];return P(c,function(a){var b=a.getAttribute(f);b&&b.length&&d.push(a)}),d}function v(a){var b=[],c={};P(a,function(a,d){var e=a.element,g=t(e),h=a.event,i=["enter","move"].indexOf(h)>=0,j=a.structural?u(g):[];if(j.length){var k=i?"to":"from";P(j,function(a){var b=a.getAttribute(f);c[b]=c[b]||{},c[b][k]={animationID:d,element:O(a)}})}else b.push(a)});var d={},e={};return P(c,function(c,f){var g=c.from,h=c.to;if(!g||!h){var i=g?g.animationID:h.animationID,j=i.toString();return void(d[j]||(d[j]=!0,b.push(a[i])))}var k=a[g.animationID],l=a[h.animationID],m=g.animationID.toString();if(!e[m]){var n=e[m]={structural:!0,beforeStart:function(){k.beforeStart(),l.beforeStart()},close:function(){k.close(),l.close()},classes:w(k.classes,l.classes),from:k,to:l,anchors:[]};n.classes.length?b.push(n):(b.push(k),b.push(l))}e[m].anchors.push({out:g.element,"in":h.element})}),b}function w(a,b){a=a.split(" "),b=b.split(" ");for(var c=[],d=0;d<a.length;d++){var e=a[d];if("ng-"!==e.substring(0,3))for(var f=0;f<b.length;f++)if(e===b[f]){c.push(e);break}}return c.join(" ")}function x(a){for(var b=g.length-1;b>=0;b--){var c=g[b];if(i.has(c)){var d=i.get(c),e=d(a);if(e)return e}}}function y(){k.addClass(aa),F&&a.addClass(k,F)}function z(a,b){function c(a){d(a).setHost(b)}a.from&&a.to?(c(a.from.element),c(a.to.element)):c(a.element)}function A(){var a=d(k);!a||"leave"===m&&s.$$domOperationFired||a.end()}function B(b){k.off("$destroy",A),c(k),r(k,s),o(k,s),s.domOperation(),F&&a.removeClass(k,F),k.removeClass(aa),D.complete(!b)}s=n(s);var C=["enter","move","leave"].indexOf(m)>=0,D=new j({end:function(){B()},cancel:function(){B(!0)}});if(!g.length)return B(),D;b(k,D);var E=e(k.attr("class"),e(s.addClass,s.removeClass)),F=s.tempClasses;return F&&(E+=" "+F,s.tempClasses=null),q.push({element:k,classes:E,event:m,structural:C,options:s,beforeStart:y,close:B}),k.on("$destroy",A),q.length>1?D:(h.$$postDigest(function(){var a=[];P(q,function(b){d(b.element)?a.push(b):b.close()}),q.length=0;var b=v(a),c=[];P(b,function(a){c.push({domNode:t(a.from?a.from.element:a.element),fn:function(){a.beforeStart();var b,c=a.close,e=a.anchors?a.from.element||a.to.element:a.element;if(d(e)){var f=x(a);f&&(b=f.start)}if(b){var g=b();g.done(function(a){c(!a)}),z(a,g)}else c()}})}),l(p(c))}),D)}}]}];b.module("ngAnimate",[]).directive("ngAnimateChildren",pa).factory("$$rAFScheduler",oa).factory("$$AnimateRunner",Ea).factory("$$animateAsyncRun",Da).provider("$$animateQueue",Ca).provider("$$animation",Fa).provider("$animateCss",wa).provider("$$animateCssDriver",xa).provider("$$animateJs",ya).provider("$$animateJsDriver",za)}(window,window.angular),angular.module("colorpicker.module",[]).factory("Helper",function(){"use strict";return{closestSlider:function(a){var b=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.msMatchesSelector;return b.bind(a)("I")?a.parentNode:a},getOffset:function(a,b){for(var c=0,d=0,e=a.getBoundingClientRect();a&&!isNaN(a.offsetLeft)&&!isNaN(a.offsetTop);)b||"BODY"!==a.tagName?(c+=a.scrollLeft,d+=a.scrollTop):(c+=document.documentElement.scrollLeft||a.scrollLeft,d+=document.documentElement.scrollTop||a.scrollTop),a=a.offsetParent;return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset,scrollX:c,scrollY:d}},stringParsers:[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,parse:function(a){return[a[1],a[2],a[3],a[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,parse:function(a){return[2.55*a[1],2.55*a[2],2.55*a[3],a[4]]}},{re:/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,parse:function(a){return[parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16)]}},{re:/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/,parse:function(a){return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)]}}]}}).factory("Color",["Helper",function(a){"use strict";return{value:{h:1,s:1,b:1,a:1},rgb:function(){var a=this.toRGB();return"rgb("+a.r+","+a.g+","+a.b+")"},rgba:function(){var a=this.toRGB();return"rgba("+a.r+","+a.g+","+a.b+","+a.a+")"},hex:function(){return this.toHex()},RGBtoHSB:function(a,b,c,d){a/=255,b/=255,c/=255;var e,f,g,h;return g=Math.max(a,b,c),h=g-Math.min(a,b,c),e=0===h?null:g===a?(b-c)/h:g===b?(c-a)/h+2:(a-b)/h+4,e=(e+360)%6*60/360,f=0===h?0:h/g,{h:e||1,s:f,b:g,a:d||1}},setColor:function(b){b=b.toLowerCase();for(var c in a.stringParsers)if(a.stringParsers.hasOwnProperty(c)){var d=a.stringParsers[c],e=d.re.exec(b),f=e&&d.parse(e);if(f)return this.value=this.RGBtoHSB.apply(null,f),!1}},setHue:function(a){this.value.h=1-a},setSaturation:function(a){this.value.s=a},setLightness:function(a){this.value.b=1-a},setAlpha:function(a){this.value.a=parseInt(100*(1-a),10)/100},toRGB:function(a,b,c,d){a||(a=this.value.h,b=this.value.s,c=this.value.b),a*=360;var e,f,g,h,i;return a=a%360/60,i=c*b,h=i*(1-Math.abs(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a],{r:Math.round(255*e),g:Math.round(255*f),b:Math.round(255*g),a:d||this.value.a}},toHex:function(a,b,c,d){var e=this.toRGB(a,b,c,d);return"#"+(1<<24|parseInt(e.r,10)<<16|parseInt(e.g,10)<<8|parseInt(e.b,10)).toString(16).substr(1)}}}]).factory("Slider",["Helper",function(a){"use strict";var b={maxLeft:0,maxTop:0,callLeft:null,callTop:null,knob:{top:0,left:0}},c={};return{getSlider:function(){return b},getLeftPosition:function(a){return Math.max(0,Math.min(b.maxLeft,b.left+((a.pageX||c.left)-c.left)))},getTopPosition:function(a){return Math.max(0,Math.min(b.maxTop,b.top+((a.pageY||c.top)-c.top)))},setSlider:function(d,e){var f=a.closestSlider(d.target),g=a.getOffset(f,e),h=f.getBoundingClientRect(),i=d.clientX-h.left,j=d.clientY-h.top;b.knob=f.children[0].style,b.left=d.pageX-g.left-window.pageXOffset+g.scrollX,b.top=d.pageY-g.top-window.pageYOffset+g.scrollY,c={left:d.pageX-(i-b.left),top:d.pageY-(j-b.top)}},setSaturation:function(a,c){b={maxLeft:100,maxTop:100,callLeft:"setSaturation",callTop:"setLightness"},this.setSlider(a,c)},setHue:function(a,c){b={maxLeft:0,maxTop:100,callLeft:!1,callTop:"setHue"},this.setSlider(a,c)},setAlpha:function(a,c){b={maxLeft:0,maxTop:100,callLeft:!1,callTop:"setAlpha"},this.setSlider(a,c)},setKnob:function(a,c){b.knob.top=a+"px",b.knob.left=c+"px"}}}]).directive("colorpicker",["$document","$compile","Color","Slider","Helper",function(a,b,c,d,e){"use strict";return{require:"?ngModel",restrict:"A",link:function(f,g,h,i){var j,k=h.colorpicker?h.colorpicker:"hex",l=angular.isDefined(h.colorpickerPosition)?h.colorpickerPosition:"bottom",m=angular.isDefined(h.colorpickerInline)?h.colorpickerInline:!1,n=angular.isDefined(h.colorpickerFixedPosition)?h.colorpickerFixedPosition:!1,o=angular.isDefined(h.colorpickerParent)?g.parent():angular.element(document.body),p=angular.isDefined(h.colorpickerWithInput)?h.colorpickerWithInput:!1,q=p?'<input type="text" name="colorpicker-input" spellcheck="false">':"",r=m?"":'<button type="button" class="close close-colorpicker">&times;</button>',s='<div class="colorpicker dropdown"><div class="dropdown-menu"><colorpicker-saturation><i></i></colorpicker-saturation><colorpicker-hue><i></i></colorpicker-hue><colorpicker-alpha><i></i></colorpicker-alpha><colorpicker-preview></colorpicker-preview>'+q+r+"</div></div>",t=angular.element(s),u=c,v=t.find("colorpicker-hue"),w=t.find("colorpicker-saturation"),x=t.find("colorpicker-preview"),y=t.find("i");
+if(b(t)(f),p){var z=t.find("input");z.on("mousedown",function(a){a.stopPropagation()}).on("keyup",function(){var a=this.value;g.val(a),i&&i.$modelValue!==a&&(f.$apply(i.$setViewValue(a)),E(!0))})}var A=function(){a.on("mousemove",C),a.on("mouseup",D)};"rgba"===k&&(t.addClass("alpha"),j=t.find("colorpicker-alpha"),j.on("click",function(a){d.setAlpha(a,n),C(a)}).on("mousedown",function(a){d.setAlpha(a,n),A()}).on("mouseup",function(a){I("colorpicker-selected-alpha")})),v.on("click",function(a){d.setHue(a,n),C(a)}).on("mousedown",function(a){d.setHue(a,n),A()}).on("mouseup",function(a){I("colorpicker-selected-hue")}),w.on("click",function(a){d.setSaturation(a,n),C(a),angular.isDefined(h.colorpickerCloseOnSelect)&&J()}).on("mousedown",function(a){d.setSaturation(a,n),A()}).on("mouseup",function(a){I("colorpicker-selected-saturation")}),n&&t.addClass("colorpicker-fixed-position"),t.addClass("colorpicker-position-"+l),"true"===m&&t.addClass("colorpicker-inline"),o.append(t),i&&(i.$render=function(){g.val(i.$viewValue)}),g.on("blur keyup change",function(){E()}),g.on("$destroy",function(){t.remove()});var B=function(){try{x.css("backgroundColor",u[k]())}catch(a){x.css("backgroundColor",u.toHex())}w.css("backgroundColor",u.toHex(u.value.h,1,1,1)),"rgba"===k&&(j.css.backgroundColor=u.toHex())},C=function(a){var b=d.getLeftPosition(a),c=d.getTopPosition(a),e=d.getSlider();d.setKnob(c,b),e.callLeft&&u[e.callLeft].call(u,b/100),e.callTop&&u[e.callTop].call(u,c/100),B();var h=u[k]();return g.val(h),i&&f.$apply(i.$setViewValue(h)),p&&z.val(h),!1},D=function(){I("colorpicker-selected"),a.off("mousemove",C),a.off("mouseup",D)},E=function(a){u.setColor(g.val()),p&&!a&&z.val(g.val()),y.eq(0).css({left:100*u.value.s+"px",top:100-100*u.value.b+"px"}),y.eq(1).css("top",100*(1-u.value.h)+"px"),y.eq(2).css("top",100*(1-u.value.a)+"px"),B()},F=function(){var a,b=e.getOffset(g[0]);return angular.isDefined(h.colorpickerParent)&&(b.left=0,b.top=0),"top"===l?a={top:b.top-147,left:b.left}:"right"===l?a={top:b.top,left:b.left+126}:"bottom"===l?a={top:b.top+g[0].offsetHeight+2,left:b.left}:"left"===l&&(a={top:b.top,left:b.left-150}),{top:a.top+"px",left:a.left+"px"}},G=function(){J()},H=function(){t.hasClass("colorpicker-visible")||(E(),t.addClass("colorpicker-visible").css(F()),I("colorpicker-shown"),m===!1&&a.on("mousedown",G),h.colorpickerIsOpen&&(f[h.colorpickerIsOpen]=!0,f.$$phase||f.$digest()))};m===!1?g.on("click",H):H(),t.on("mousedown",function(a){a.stopPropagation(),a.preventDefault()});var I=function(a){i&&f.$emit(a,{name:h.ngModel,value:i.$modelValue})},J=function(){t.hasClass("colorpicker-visible")&&(t.removeClass("colorpicker-visible"),I("colorpicker-closed"),a.off("mousedown",G),h.colorpickerIsOpen&&(f[h.colorpickerIsOpen]=!1,f.$$phase||f.$digest()))};t.find("button").on("click",function(){J()}),h.colorpickerIsOpen&&f.$watch(h.colorpickerIsOpen,function(a){a===!0?H():a===!1&&J()})}}}]),angular.module("ui.bootstrap.contextMenu",[]).directive("contextMenu",["$parse",function(a){var b=function(a,b,c,d){if(!e)var e=angular.element;e(b.currentTarget).addClass("context");var f=e("<div>");f.addClass("dropdown clearfix");var g=e("<ul>");g.addClass("dropdown-menu"),g.attr({role:"menu"}),g.css({display:"block",position:"absolute",left:b.pageX+"px",top:b.pageY+"px"}),angular.forEach(c,function(c,h){var i=e("<li>");if(null===c)i.addClass("divider");else{var j=e("<a>");j.attr({tabindex:"-1",href:"#"});var k="string"==typeof c[0]?c[0]:c[0].call(a,a,b,d);j.text(k),i.append(j);var l=angular.isDefined(c[2])?c[2].call(a,a,b,k,d):!0;l?i.on("click",function(g){g.preventDefault(),a.$apply(function(){e(b.currentTarget).removeClass("context"),f.remove(),c[1].call(a,a,b,d)})}):(i.on("click",function(a){a.preventDefault()}),i.addClass("disabled"))}g.append(i)}),f.append(g);var h=Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight);f.css({width:"100%",height:h+"px",position:"absolute",top:0,left:0,zIndex:9999}),e(document).find("body").append(f),f.on("mousedown",function(a){e(a.target).hasClass("dropdown")&&(e(b.currentTarget).removeClass("context"),f.remove())}).on("contextmenu",function(a){e(a.currentTarget).removeClass("context"),a.preventDefault(),f.remove()})};return function(a,c,d){c.on("contextmenu",function(c){c.stopPropagation(),a.$apply(function(){c.preventDefault();var e=a.$eval(d.contextMenu),f=a.$eval(d.model);if(!(e instanceof Array))throw'"'+d.contextMenu+'" not an array';0!==e.length&&b(a,c,e,f)})})}}]),function(){var a=[].slice;!function(b,c){"use strict";var d;return d=function(){function a(a,c){null==c&&(c={}),this.$element=b(a),this.options=b.extend({},b.fn.bootstrapSwitch.defaults,{state:this.$element.is(":checked"),size:this.$element.data("size"),animate:this.$element.data("animate"),disabled:this.$element.is(":disabled"),readonly:this.$element.is("[readonly]"),indeterminate:this.$element.data("indeterminate"),inverse:this.$element.data("inverse"),radioAllOff:this.$element.data("radio-all-off"),onColor:this.$element.data("on-color"),offColor:this.$element.data("off-color"),onText:this.$element.data("on-text"),offText:this.$element.data("off-text"),labelText:this.$element.data("label-text"),handleWidth:this.$element.data("handle-width"),labelWidth:this.$element.data("label-width"),baseClass:this.$element.data("base-class"),wrapperClass:this.$element.data("wrapper-class")},c),this.$wrapper=b("<div>",{"class":function(a){return function(){var b;return b=[""+a.options.baseClass].concat(a._getClasses(a.options.wrapperClass)),b.push(a.options.state?""+a.options.baseClass+"-on":""+a.options.baseClass+"-off"),null!=a.options.size&&b.push(""+a.options.baseClass+"-"+a.options.size),a.options.disabled&&b.push(""+a.options.baseClass+"-disabled"),a.options.readonly&&b.push(""+a.options.baseClass+"-readonly"),a.options.indeterminate&&b.push(""+a.options.baseClass+"-indeterminate"),a.options.inverse&&b.push(""+a.options.baseClass+"-inverse"),a.$element.attr("id")&&b.push(""+a.options.baseClass+"-id-"+a.$element.attr("id")),b.join(" ")}}(this)()}),this.$container=b("<div>",{"class":""+this.options.baseClass+"-container"}),this.$on=b("<span>",{html:this.options.onText,"class":""+this.options.baseClass+"-handle-on "+this.options.baseClass+"-"+this.options.onColor}),this.$off=b("<span>",{html:this.options.offText,"class":""+this.options.baseClass+"-handle-off "+this.options.baseClass+"-"+this.options.offColor}),this.$label=b("<span>",{html:this.options.labelText,"class":""+this.options.baseClass+"-label"}),this.$element.on("init.bootstrapSwitch",function(b){return function(){return b.options.onInit.apply(a,arguments)}}(this)),this.$element.on("switchChange.bootstrapSwitch",function(b){return function(){return b.options.onSwitchChange.apply(a,arguments)}}(this)),this.$container=this.$element.wrap(this.$container).parent(),this.$wrapper=this.$container.wrap(this.$wrapper).parent(),this.$element.before(this.options.inverse?this.$off:this.$on).before(this.$label).before(this.options.inverse?this.$on:this.$off),this.options.indeterminate&&this.$element.prop("indeterminate",!0),this._init(),this._elementHandlers(),this._handleHandlers(),this._labelHandlers(),this._formHandler(),this._externalLabelHandler(),this.$element.trigger("init.bootstrapSwitch")}return a.prototype._constructor=a,a.prototype.state=function(a,b){return"undefined"==typeof a?this.options.state:this.options.disabled||this.options.readonly?this.$element:this.options.state&&!this.options.radioAllOff&&this.$element.is(":radio")?this.$element:(this.options.indeterminate&&this.indeterminate(!1),a=!!a,this.$element.prop("checked",a).trigger("change.bootstrapSwitch",b),this.$element)},a.prototype.toggleState=function(a){return this.options.disabled||this.options.readonly?this.$element:this.options.indeterminate?(this.indeterminate(!1),this.state(!0)):this.$element.prop("checked",!this.options.state).trigger("change.bootstrapSwitch",a)},a.prototype.size=function(a){return"undefined"==typeof a?this.options.size:(null!=this.options.size&&this.$wrapper.removeClass(""+this.options.baseClass+"-"+this.options.size),a&&this.$wrapper.addClass(""+this.options.baseClass+"-"+a),this._width(),this._containerPosition(),this.options.size=a,this.$element)},a.prototype.animate=function(a){return"undefined"==typeof a?this.options.animate:(a=!!a,a===this.options.animate?this.$element:this.toggleAnimate())},a.prototype.toggleAnimate=function(){return this.options.animate=!this.options.animate,this.$wrapper.toggleClass(""+this.options.baseClass+"-animate"),this.$element},a.prototype.disabled=function(a){return"undefined"==typeof a?this.options.disabled:(a=!!a,a===this.options.disabled?this.$element:this.toggleDisabled())},a.prototype.toggleDisabled=function(){return this.options.disabled=!this.options.disabled,this.$element.prop("disabled",this.options.disabled),this.$wrapper.toggleClass(""+this.options.baseClass+"-disabled"),this.$element},a.prototype.readonly=function(a){return"undefined"==typeof a?this.options.readonly:(a=!!a,a===this.options.readonly?this.$element:this.toggleReadonly())},a.prototype.toggleReadonly=function(){return this.options.readonly=!this.options.readonly,this.$element.prop("readonly",this.options.readonly),this.$wrapper.toggleClass(""+this.options.baseClass+"-readonly"),this.$element},a.prototype.indeterminate=function(a){return"undefined"==typeof a?this.options.indeterminate:(a=!!a,a===this.options.indeterminate?this.$element:this.toggleIndeterminate())},a.prototype.toggleIndeterminate=function(){return this.options.indeterminate=!this.options.indeterminate,this.$element.prop("indeterminate",this.options.indeterminate),this.$wrapper.toggleClass(""+this.options.baseClass+"-indeterminate"),this._containerPosition(),this.$element},a.prototype.inverse=function(a){return"undefined"==typeof a?this.options.inverse:(a=!!a,a===this.options.inverse?this.$element:this.toggleInverse())},a.prototype.toggleInverse=function(){var a,b;return this.$wrapper.toggleClass(""+this.options.baseClass+"-inverse"),b=this.$on.clone(!0),a=this.$off.clone(!0),this.$on.replaceWith(a),this.$off.replaceWith(b),this.$on=a,this.$off=b,this.options.inverse=!this.options.inverse,this.$element},a.prototype.onColor=function(a){var b;return b=this.options.onColor,"undefined"==typeof a?b:(null!=b&&this.$on.removeClass(""+this.options.baseClass+"-"+b),this.$on.addClass(""+this.options.baseClass+"-"+a),this.options.onColor=a,this.$element)},a.prototype.offColor=function(a){var b;return b=this.options.offColor,"undefined"==typeof a?b:(null!=b&&this.$off.removeClass(""+this.options.baseClass+"-"+b),this.$off.addClass(""+this.options.baseClass+"-"+a),this.options.offColor=a,this.$element)},a.prototype.onText=function(a){return"undefined"==typeof a?this.options.onText:(this.$on.html(a),this._width(),this._containerPosition(),this.options.onText=a,this.$element)},a.prototype.offText=function(a){return"undefined"==typeof a?this.options.offText:(this.$off.html(a),this._width(),this._containerPosition(),this.options.offText=a,this.$element)},a.prototype.labelText=function(a){return"undefined"==typeof a?this.options.labelText:(this.$label.html(a),this._width(),this.options.labelText=a,this.$element)},a.prototype.handleWidth=function(a){return"undefined"==typeof a?this.options.handleWidth:(this.options.handleWidth=a,this._width(),this._containerPosition(),this.$element)},a.prototype.labelWidth=function(a){return"undefined"==typeof a?this.options.labelWidth:(this.options.labelWidth=a,this._width(),this._containerPosition(),this.$element)},a.prototype.baseClass=function(a){return this.options.baseClass},a.prototype.wrapperClass=function(a){return"undefined"==typeof a?this.options.wrapperClass:(a||(a=b.fn.bootstrapSwitch.defaults.wrapperClass),this.$wrapper.removeClass(this._getClasses(this.options.wrapperClass).join(" ")),this.$wrapper.addClass(this._getClasses(a).join(" ")),this.options.wrapperClass=a,this.$element)},a.prototype.radioAllOff=function(a){return"undefined"==typeof a?this.options.radioAllOff:(a=!!a,a===this.options.radioAllOff?this.$element:(this.options.radioAllOff=a,this.$element))},a.prototype.onInit=function(a){return"undefined"==typeof a?this.options.onInit:(a||(a=b.fn.bootstrapSwitch.defaults.onInit),this.options.onInit=a,this.$element)},a.prototype.onSwitchChange=function(a){return"undefined"==typeof a?this.options.onSwitchChange:(a||(a=b.fn.bootstrapSwitch.defaults.onSwitchChange),this.options.onSwitchChange=a,this.$element)},a.prototype.destroy=function(){var a;return a=this.$element.closest("form"),a.length&&a.off("reset.bootstrapSwitch").removeData("bootstrap-switch"),this.$container.children().not(this.$element).remove(),this.$element.unwrap().unwrap().off(".bootstrapSwitch").removeData("bootstrap-switch"),this.$element},a.prototype._width=function(){var a,b;return a=this.$on.add(this.$off),a.add(this.$label).css("width",""),b="auto"===this.options.handleWidth?Math.max(this.$on.width(),this.$off.width()):this.options.handleWidth,a.width(b),this.$label.width(function(a){return function(c,d){return"auto"!==a.options.labelWidth?a.options.labelWidth:b>d?b:d}}(this)),this._handleWidth=this.$on.outerWidth(),this._labelWidth=this.$label.outerWidth(),this.$container.width(2*this._handleWidth+this._labelWidth),this.$wrapper.width(this._handleWidth+this._labelWidth)},a.prototype._containerPosition=function(a,b){return null==a&&(a=this.options.state),this.$container.css("margin-left",function(b){return function(){var c;return c=[0,"-"+b._handleWidth+"px"],b.options.indeterminate?"-"+b._handleWidth/2+"px":a?b.options.inverse?c[1]:c[0]:b.options.inverse?c[0]:c[1]}}(this)),b?setTimeout(function(){return b()},50):void 0},a.prototype._init=function(){var a,b;return a=function(a){return function(){return a._width(),a._containerPosition(null,function(){return a.options.animate?a.$wrapper.addClass(""+a.options.baseClass+"-animate"):void 0})}}(this),this.$wrapper.is(":visible")?a():b=c.setInterval(function(d){return function(){return d.$wrapper.is(":visible")?(a(),c.clearInterval(b)):void 0}}(this),50)},a.prototype._elementHandlers=function(){return this.$element.on({"change.bootstrapSwitch":function(a){return function(c,d){var e;return c.preventDefault(),c.stopImmediatePropagation(),e=a.$element.is(":checked"),a._containerPosition(e),e!==a.options.state?(a.options.state=e,a.$wrapper.toggleClass(""+a.options.baseClass+"-off").toggleClass(""+a.options.baseClass+"-on"),d?void 0:(a.$element.is(":radio")&&b("[name='"+a.$element.attr("name")+"']").not(a.$element).prop("checked",!1).trigger("change.bootstrapSwitch",!0),a.$element.trigger("switchChange.bootstrapSwitch",[e]))):void 0}}(this),"focus.bootstrapSwitch":function(a){return function(b){return b.preventDefault(),a.$wrapper.addClass(""+a.options.baseClass+"-focused")}}(this),"blur.bootstrapSwitch":function(a){return function(b){return b.preventDefault(),a.$wrapper.removeClass(""+a.options.baseClass+"-focused")}}(this),"keydown.bootstrapSwitch":function(a){return function(b){if(b.which&&!a.options.disabled&&!a.options.readonly)switch(b.which){case 37:return b.preventDefault(),b.stopImmediatePropagation(),a.state(!1);case 39:return b.preventDefault(),b.stopImmediatePropagation(),a.state(!0)}}}(this)})},a.prototype._handleHandlers=function(){return this.$on.on("click.bootstrapSwitch",function(a){return function(b){return b.preventDefault(),b.stopPropagation(),a.state(!1),a.$element.trigger("focus.bootstrapSwitch")}}(this)),this.$off.on("click.bootstrapSwitch",function(a){return function(b){return b.preventDefault(),b.stopPropagation(),a.state(!0),a.$element.trigger("focus.bootstrapSwitch")}}(this))},a.prototype._labelHandlers=function(){return this.$label.on({"mousedown.bootstrapSwitch touchstart.bootstrapSwitch":function(a){return function(b){return a._dragStart||a.options.disabled||a.options.readonly?void 0:(b.preventDefault(),b.stopPropagation(),a._dragStart=(b.pageX||b.originalEvent.touches[0].pageX)-parseInt(a.$container.css("margin-left"),10),a.options.animate&&a.$wrapper.removeClass(""+a.options.baseClass+"-animate"),a.$element.trigger("focus.bootstrapSwitch"))}}(this),"mousemove.bootstrapSwitch touchmove.bootstrapSwitch":function(a){return function(b){var c;if(null!=a._dragStart&&(b.preventDefault(),c=(b.pageX||b.originalEvent.touches[0].pageX)-a._dragStart,!(c<-a._handleWidth||c>0)))return a._dragEnd=c,a.$container.css("margin-left",""+a._dragEnd+"px")}}(this),"mouseup.bootstrapSwitch touchend.bootstrapSwitch":function(a){return function(b){var c;if(a._dragStart)return b.preventDefault(),a.options.animate&&a.$wrapper.addClass(""+a.options.baseClass+"-animate"),a._dragEnd?(c=a._dragEnd>-(a._handleWidth/2),a._dragEnd=!1,a.state(a.options.inverse?!c:c)):a.state(!a.options.state),a._dragStart=!1}}(this),"mouseleave.bootstrapSwitch":function(a){return function(b){return a.$label.trigger("mouseup.bootstrapSwitch")}}(this)})},a.prototype._externalLabelHandler=function(){var a;return a=this.$element.closest("label"),a.on("click",function(b){return function(c){return c.preventDefault(),c.stopImmediatePropagation(),c.target===a[0]?b.toggleState():void 0}}(this))},a.prototype._formHandler=function(){var a;return a=this.$element.closest("form"),a.data("bootstrap-switch")?void 0:a.on("reset.bootstrapSwitch",function(){return c.setTimeout(function(){return a.find("input").filter(function(){return b(this).data("bootstrap-switch")}).each(function(){return b(this).bootstrapSwitch("state",this.checked)})},1)}).data("bootstrap-switch",!0)},a.prototype._getClasses=function(a){var c,d,e,f;if(!b.isArray(a))return[""+this.options.baseClass+"-"+a];for(d=[],e=0,f=a.length;f>e;e++)c=a[e],d.push(""+this.options.baseClass+"-"+c);return d},a}(),b.fn.bootstrapSwitch=function(){var c,e,f;return e=arguments[0],c=2<=arguments.length?a.call(arguments,1):[],f=this,this.each(function(){var a,g;return a=b(this),g=a.data("bootstrap-switch"),g||a.data("bootstrap-switch",g=new d(this,e)),"string"==typeof e?f=g[e].apply(g,c):void 0}),f},b.fn.bootstrapSwitch.Constructor=d,b.fn.bootstrapSwitch.defaults={state:!0,size:null,animate:!0,disabled:!1,readonly:!1,indeterminate:!1,inverse:!1,radioAllOff:!1,onColor:"primary",offColor:"default",onText:"ON",offText:"OFF",labelText:"&nbsp;",handleWidth:"auto",labelWidth:"auto",baseClass:"bootstrap-switch",wrapperClass:"wrapper",onInit:function(){},onSwitchChange:function(){}}}(window.jQuery,window)}.call(this),function(){"use strict";angular.module("frapontillo.bootstrap-switch",[]),angular.module("frapontillo.bootstrap-switch").directive("bsSwitch",["$parse","$timeout",function(a,b){return{restrict:"A",require:"ngModel",link:function(c,d,e,f){var g=!1,h=function(){if("radio"===e.type)return e.value||a(e.ngValue)(c)||!0;var b=a(e.ngTrueValue)(c);return angular.isUndefined(b)&&(b=!0),b},i=function(a){return c.$eval(a)===!0},j=function(a){return a===!0||"true"===a||!a},k=function(a){return a?a:void 0},l=function(a){var b={switchRadioOff:j,switchActive:function(a){return!j(a)},switchAnimate:j,switchLabel:function(a){return a?a:"&nbsp;"},switchIcon:function(a){return a?"<span class='"+a+"'></span>":void 0},switchWrapper:function(a){return a||"wrapper"},switchInverse:i,switchReadonly:i},c=b[a]||k;return c(e[a])},m=function(a,b,c){if(g){var d=l(c);a.bootstrapSwitch(b,d)}},n=function(){m(d,"disabled","switchActive")},o=function(){if(!g){var a=f.$modelValue===h();g=!g,d.bootstrapSwitch({radioAllOff:l("switchRadioOff"),disabled:l("switchActive"),state:a,onText:l("switchOnText"),offText:l("switchOffText"),onColor:l("switchOnColor"),offColor:l("switchOffColor"),animate:l("switchAnimate"),size:l("switchSize"),labelText:l(e.switchLabel?"switchLabel":"switchIcon"),wrapperClass:l("switchWrapper"),handleWidth:l("switchHandleWidth"),labelWidth:l("switchLabelWidth"),inverse:l("switchInverse"),readonly:l("switchReadonly")}),"radio"===e.type?f.$setViewValue(f.$modelValue):f.$setViewValue(a)}},p=function(){function a(){return f.$modelValue}e.$observe("switchActive",function(a){var c=j(a);c?n(c):b(function(){n(c)})}),c.$watch(a,function(a){o(),void 0!==a?d.bootstrapSwitch("state",a===h(),!1):d.bootstrapSwitch("toggleIndeterminate",!0,!1)},!0);var g={switchRadioOff:"radioAllOff",switchOnText:"onText",switchOffText:"offText",switchOnColor:"onColor",switchOffColor:"offColor",switchAnimate:"animate",switchSize:"size",switchLabel:"labelText",switchIcon:"labelText",switchWrapper:"wrapperClass",switchHandleWidth:"handleWidth",switchLabelWidth:"labelWidth",switchInverse:"inverse",switchReadonly:"readonly"},i=function(a,b){return function(){e.$observe(a,function(){m(d,b[a],a)})}};for(var k in g)e.$observe(k,i(k,g))},q=function(){"radio"===e.type?d.on("change.bootstrapSwitch",function(a){f.$modelValue===f.$viewValue&&a.target.checked!==$(a.target).bootstrapSwitch("state")&&(a.target.checked?f.$setViewValue(h()):h()===f.$viewValue&&f.$setViewValue(void 0))}):d.on("switchChange.bootstrapSwitch",function(a){f.$setViewValue(a.target.checked)})};q(),p(),c.$on("$destroy",function(){d.bootstrapSwitch("destroy")})}}}]).directive("bsSwitch",function(){return{restrict:"E",require:"ngModel",template:"<input bs-switch>",replace:!0}})}(),function(){"use strict";var a=this,b=a.Chart,c=function(a){this.canvas=a.canvas,this.ctx=a;var b=function(a,b){return a["offset"+b]?a["offset"+b]:document.defaultView.getComputedStyle(a).getPropertyValue(b)},c=this.width=b(a.canvas,"Width"),e=this.height=b(a.canvas,"Height");a.canvas.width=c,a.canvas.height=e;var c=this.width=a.canvas.width,e=this.height=a.canvas.height;return this.aspectRatio=this.width/this.height,d.retinaScale(this),this};c.defaults={global:{animation:!0,animationSteps:60,animationEasing:"easeOutQuart",showScale:!0,scaleOverride:!1,scaleSteps:null,scaleStepWidth:null,scaleStartValue:null,scaleLineColor:"rgba(0,0,0,.1)",scaleLineWidth:1,scaleShowLabels:!0,scaleLabel:"<%=value%>",scaleIntegersOnly:!0,scaleBeginAtZero:!1,scaleFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",scaleFontSize:12,scaleFontStyle:"normal",scaleFontColor:"#666",responsive:!1,maintainAspectRatio:!0,showTooltips:!0,customTooltips:!1,tooltipEvents:["mousemove","touchstart","touchmove","mouseout"],tooltipFillColor:"rgba(0,0,0,0.8)",tooltipFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",tooltipFontSize:14,tooltipFontStyle:"normal",tooltipFontColor:"#fff",tooltipTitleFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",tooltipTitleFontSize:14,tooltipTitleFontStyle:"bold",tooltipTitleFontColor:"#fff",tooltipYPadding:6,tooltipXPadding:6,tooltipCaretSize:8,tooltipCornerRadius:6,tooltipXOffset:10,tooltipTemplate:"<%if (label){%><%=label%>: <%}%><%= value %>",multiTooltipTemplate:"<%= value %>",multiTooltipKeyBackground:"#fff",onAnimationProgress:function(){},onAnimationComplete:function(){}}},c.types={};var d=c.helpers={},e=d.each=function(a,b,c){var d=Array.prototype.slice.call(arguments,3);if(a)if(a.length===+a.length){var e;for(e=0;e<a.length;e++)b.apply(c,[a[e],e].concat(d))}else for(var f in a)b.apply(c,[a[f],f].concat(d))},f=d.clone=function(a){var b={};return e(a,function(c,d){a.hasOwnProperty(d)&&(b[d]=c)}),b},g=d.extend=function(a){return e(Array.prototype.slice.call(arguments,1),function(b){e(b,function(c,d){b.hasOwnProperty(d)&&(a[d]=c)})}),a},h=d.merge=function(a,b){var c=Array.prototype.slice.call(arguments,0);return c.unshift({}),g.apply(null,c)},i=d.indexOf=function(a,b){if(Array.prototype.indexOf)return a.indexOf(b);for(var c=0;c<a.length;c++)if(a[c]===b)return c;return-1},j=(d.where=function(a,b){var c=[];return d.each(a,function(a){b(a)&&c.push(a)}),c},d.findNextWhere=function(a,b,c){c||(c=-1);for(var d=c+1;d<a.length;d++){var e=a[d];if(b(e))return e}},d.findPreviousWhere=function(a,b,c){c||(c=a.length);for(var d=c-1;d>=0;d--){var e=a[d];if(b(e))return e}},d.inherits=function(a){var b=this,c=a&&a.hasOwnProperty("constructor")?a.constructor:function(){return b.apply(this,arguments)},d=function(){this.constructor=c};return d.prototype=b.prototype,c.prototype=new d,c.extend=j,a&&g(c.prototype,a),c.__super__=b.prototype,c}),k=d.noop=function(){},l=d.uid=function(){var a=0;return function(){return"chart-"+a++}}(),m=d.warn=function(a){window.console&&"function"==typeof window.console.warn&&console.warn(a)},n=d.amd="function"==typeof define&&define.amd,o=d.isNumber=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},p=d.max=function(a){return Math.max.apply(Math,a)},q=d.min=function(a){return Math.min.apply(Math,a)},r=(d.cap=function(a,b,c){if(o(b)){if(a>b)return b}else if(o(c)&&c>a)return c;return a},d.getDecimalPlaces=function(a){return a%1!==0&&o(a)?a.toString().split(".")[1].length:0}),s=d.radians=function(a){return a*(Math.PI/180)},t=(d.getAngleFromPoint=function(a,b){var c=b.x-a.x,d=b.y-a.y,e=Math.sqrt(c*c+d*d),f=2*Math.PI+Math.atan2(d,c);return 0>c&&0>d&&(f+=2*Math.PI),{angle:f,distance:e}},d.aliasPixel=function(a){return a%2===0?0:.5}),u=(d.splineCurve=function(a,b,c,d){var e=Math.sqrt(Math.pow(b.x-a.x,2)+Math.pow(b.y-a.y,2)),f=Math.sqrt(Math.pow(c.x-b.x,2)+Math.pow(c.y-b.y,2)),g=d*e/(e+f),h=d*f/(e+f);return{inner:{x:b.x-g*(c.x-a.x),y:b.y-g*(c.y-a.y)},outer:{x:b.x+h*(c.x-a.x),y:b.y+h*(c.y-a.y)}}},d.calculateOrderOfMagnitude=function(a){return Math.floor(Math.log(a)/Math.LN10)}),v=(d.calculateScaleRange=function(a,b,c,d,e){var f=2,g=Math.floor(b/(1.5*c)),h=f>=g,i=p(a),j=q(a);i===j&&(i+=.5,j>=.5&&!d?j-=.5:i+=.5);for(var k=Math.abs(i-j),l=u(k),m=Math.ceil(i/(1*Math.pow(10,l)))*Math.pow(10,l),n=d?0:Math.floor(j/(1*Math.pow(10,l)))*Math.pow(10,l),o=m-n,r=Math.pow(10,l),s=Math.round(o/r);(s>g||g>2*s)&&!h;)if(s>g)r*=2,s=Math.round(o/r),s%1!==0&&(h=!0);else if(e&&l>=0){if(r/2%1!==0)break;r/=2,s=Math.round(o/r)}else r/=2,s=Math.round(o/r);return h&&(s=f,r=o/s),{steps:s,stepValue:r,min:n,max:n+s*r}},d.template=function(a,b){function c(a,b){var c=/\W/.test(a)?new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+a.replace(/[\r\t\n]/g," ").split("<%").join("	").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split("	").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');"):d[a]=d[a];return b?c(b):c}if(a instanceof Function)return a(b);var d={};return c(a,b)}),w=(d.generateLabels=function(a,b,c,d){var f=new Array(b);return labelTemplateString&&e(f,function(b,e){f[e]=v(a,{value:c+d*(e+1)})}),f},d.easingEffects={linear:function(a){return a},easeInQuad:function(a){return a*a},easeOutQuad:function(a){return-1*a*(a-2)},easeInOutQuad:function(a){return(a/=.5)<1?.5*a*a:-0.5*(--a*(a-2)-1)},easeInCubic:function(a){return a*a*a},easeOutCubic:function(a){return 1*((a=a/1-1)*a*a+1)},easeInOutCubic:function(a){return(a/=.5)<1?.5*a*a*a:.5*((a-=2)*a*a+2)},easeInQuart:function(a){return a*a*a*a},easeOutQuart:function(a){return-1*((a=a/1-1)*a*a*a-1)},easeInOutQuart:function(a){return(a/=.5)<1?.5*a*a*a*a:-0.5*((a-=2)*a*a*a-2)},easeInQuint:function(a){return 1*(a/=1)*a*a*a*a},easeOutQuint:function(a){return 1*((a=a/1-1)*a*a*a*a+1)},easeInOutQuint:function(a){return(a/=.5)<1?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)},easeInSine:function(a){return-1*Math.cos(a/1*(Math.PI/2))+1},easeOutSine:function(a){return 1*Math.sin(a/1*(Math.PI/2))},easeInOutSine:function(a){return-0.5*(Math.cos(Math.PI*a/1)-1)},easeInExpo:function(a){return 0===a?1:1*Math.pow(2,10*(a/1-1))},easeOutExpo:function(a){return 1===a?1:1*(-Math.pow(2,-10*a/1)+1)},easeInOutExpo:function(a){return 0===a?0:1===a?1:(a/=.5)<1?.5*Math.pow(2,10*(a-1)):.5*(-Math.pow(2,-10*--a)+2)},easeInCirc:function(a){return a>=1?a:-1*(Math.sqrt(1-(a/=1)*a)-1)},easeOutCirc:function(a){return 1*Math.sqrt(1-(a=a/1-1)*a)},easeInOutCirc:function(a){return(a/=.5)<1?-0.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)},easeInElastic:function(a){var b=1.70158,c=0,d=1;return 0===a?0:1==(a/=1)?1:(c||(c=.3),d<Math.abs(1)?(d=1,b=c/4):b=c/(2*Math.PI)*Math.asin(1/d),-(d*Math.pow(2,10*(a-=1))*Math.sin((1*a-b)*(2*Math.PI)/c)))},easeOutElastic:function(a){var b=1.70158,c=0,d=1;return 0===a?0:1==(a/=1)?1:(c||(c=.3),d<Math.abs(1)?(d=1,b=c/4):b=c/(2*Math.PI)*Math.asin(1/d),d*Math.pow(2,-10*a)*Math.sin((1*a-b)*(2*Math.PI)/c)+1)},easeInOutElastic:function(a){var b=1.70158,c=0,d=1;return 0===a?0:2==(a/=.5)?1:(c||(c=1*(.3*1.5)),d<Math.abs(1)?(d=1,b=c/4):b=c/(2*Math.PI)*Math.asin(1/d),1>a?-.5*(d*Math.pow(2,10*(a-=1))*Math.sin((1*a-b)*(2*Math.PI)/c)):d*Math.pow(2,-10*(a-=1))*Math.sin((1*a-b)*(2*Math.PI)/c)*.5+1)},easeInBack:function(a){var b=1.70158;return 1*(a/=1)*a*((b+1)*a-b)},easeOutBack:function(a){var b=1.70158;return 1*((a=a/1-1)*a*((b+1)*a+b)+1)},easeInOutBack:function(a){var b=1.70158;return(a/=.5)<1?.5*(a*a*(((b*=1.525)+1)*a-b)):.5*((a-=2)*a*(((b*=1.525)+1)*a+b)+2)},easeInBounce:function(a){return 1-w.easeOutBounce(1-a)},easeOutBounce:function(a){return(a/=1)<1/2.75?1*(7.5625*a*a):2/2.75>a?1*(7.5625*(a-=1.5/2.75)*a+.75):2.5/2.75>a?1*(7.5625*(a-=2.25/2.75)*a+.9375):1*(7.5625*(a-=2.625/2.75)*a+.984375)},easeInOutBounce:function(a){return.5>a?.5*w.easeInBounce(2*a):.5*w.easeOutBounce(2*a-1)+.5}}),x=d.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1e3/60)}}(),y=d.cancelAnimFrame=function(){return window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||window.oCancelAnimationFrame||window.msCancelAnimationFrame||function(a){return window.clearTimeout(a,1e3/60)}}(),z=(d.animationLoop=function(a,b,c,d,e,f){var g=0,h=w[c]||w.linear,i=function(){g++;var c=g/b,j=h(c);a.call(f,j,c,g),d.call(f,j,c),b>g?f.animationFrame=x(i):e.apply(f)};x(i)},d.getRelativePosition=function(a){var b,c,d=a.originalEvent||a,e=a.currentTarget||a.srcElement,f=e.getBoundingClientRect();return d.touches?(b=d.touches[0].clientX-f.left,c=d.touches[0].clientY-f.top):(b=d.clientX-f.left,c=d.clientY-f.top),{x:b,y:c}},d.addEvent=function(a,b,c){a.addEventListener?a.addEventListener(b,c):a.attachEvent?a.attachEvent("on"+b,c):a["on"+b]=c}),A=d.removeEvent=function(a,b,c){a.removeEventListener?a.removeEventListener(b,c,!1):a.detachEvent?a.detachEvent("on"+b,c):a["on"+b]=k},B=(d.bindEvents=function(a,b,c){a.events||(a.events={}),e(b,function(b){a.events[b]=function(){c.apply(a,arguments)},z(a.chart.canvas,b,a.events[b])})},d.unbindEvents=function(a,b){e(b,function(b,c){A(a.chart.canvas,c,b)})}),C=d.getMaximumWidth=function(a){var b=a.parentNode;return b.clientWidth},D=d.getMaximumHeight=function(a){var b=a.parentNode;return b.clientHeight},E=(d.getMaximumSize=d.getMaximumWidth,d.retinaScale=function(a){var b=a.ctx,c=a.canvas.width,d=a.canvas.height;window.devicePixelRatio&&(b.canvas.style.width=c+"px",b.canvas.style.height=d+"px",b.canvas.height=d*window.devicePixelRatio,b.canvas.width=c*window.devicePixelRatio,b.scale(window.devicePixelRatio,window.devicePixelRatio))}),F=d.clear=function(a){a.ctx.clearRect(0,0,a.width,a.height)},G=d.fontString=function(a,b,c){return b+" "+a+"px "+c},H=d.longestText=function(a,b,c){a.font=b;var d=0;return e(c,function(b){var c=a.measureText(b).width;d=c>d?c:d}),d},I=d.drawRoundedRectangle=function(a,b,c,d,e,f){a.beginPath(),a.moveTo(b+f,c),a.lineTo(b+d-f,c),a.quadraticCurveTo(b+d,c,b+d,c+f),a.lineTo(b+d,c+e-f),a.quadraticCurveTo(b+d,c+e,b+d-f,c+e),a.lineTo(b+f,c+e),a.quadraticCurveTo(b,c+e,b,c+e-f),a.lineTo(b,c+f),a.quadraticCurveTo(b,c,b+f,c),a.closePath()};c.instances={},c.Type=function(a,b,d){this.options=b,this.chart=d,this.id=l(),c.instances[this.id]=this,b.responsive&&this.resize(),this.initialize.call(this,a)},g(c.Type.prototype,{initialize:function(){return this},clear:function(){return F(this.chart),this},stop:function(){return y(this.animationFrame),this},resize:function(a){this.stop();var b=this.chart.canvas,c=C(this.chart.canvas),d=this.options.maintainAspectRatio?c/this.chart.aspectRatio:D(this.chart.canvas);
+return b.width=this.chart.width=c,b.height=this.chart.height=d,E(this.chart),"function"==typeof a&&a.apply(this,Array.prototype.slice.call(arguments,1)),this},reflow:k,render:function(a){return a&&this.reflow(),this.options.animation&&!a?d.animationLoop(this.draw,this.options.animationSteps,this.options.animationEasing,this.options.onAnimationProgress,this.options.onAnimationComplete,this):(this.draw(),this.options.onAnimationComplete.call(this)),this},generateLegend:function(){return v(this.options.legendTemplate,this)},destroy:function(){this.clear(),B(this,this.events);var a=this.chart.canvas;a.width=this.chart.width,a.height=this.chart.height,a.style.removeProperty?(a.style.removeProperty("width"),a.style.removeProperty("height")):(a.style.removeAttribute("width"),a.style.removeAttribute("height")),delete c.instances[this.id]},showTooltip:function(a,b){"undefined"==typeof this.activeElements&&(this.activeElements=[]);var f=function(a){var b=!1;return a.length!==this.activeElements.length?b=!0:(e(a,function(a,c){a!==this.activeElements[c]&&(b=!0)},this),b)}.call(this,a);if(f||b){if(this.activeElements=a,this.draw(),this.options.customTooltips&&this.options.customTooltips(!1),a.length>0)if(this.datasets&&this.datasets.length>1){for(var g,h,j=this.datasets.length-1;j>=0&&(g=this.datasets[j].points||this.datasets[j].bars||this.datasets[j].segments,h=i(g,a[0]),-1===h);j--);var k=[],l=[],m=function(a){var b,c,e,f,g,i=[],j=[],m=[];return d.each(this.datasets,function(a){b=a.points||a.bars||a.segments,b[h]&&b[h].hasValue()&&i.push(b[h])}),d.each(i,function(a){j.push(a.x),m.push(a.y),k.push(d.template(this.options.multiTooltipTemplate,a)),l.push({fill:a._saved.fillColor||a.fillColor,stroke:a._saved.strokeColor||a.strokeColor})},this),g=q(m),e=p(m),f=q(j),c=p(j),{x:f>this.chart.width/2?f:c,y:(g+e)/2}}.call(this,h);new c.MultiTooltip({x:m.x,y:m.y,xPadding:this.options.tooltipXPadding,yPadding:this.options.tooltipYPadding,xOffset:this.options.tooltipXOffset,fillColor:this.options.tooltipFillColor,textColor:this.options.tooltipFontColor,fontFamily:this.options.tooltipFontFamily,fontStyle:this.options.tooltipFontStyle,fontSize:this.options.tooltipFontSize,titleTextColor:this.options.tooltipTitleFontColor,titleFontFamily:this.options.tooltipTitleFontFamily,titleFontStyle:this.options.tooltipTitleFontStyle,titleFontSize:this.options.tooltipTitleFontSize,cornerRadius:this.options.tooltipCornerRadius,labels:k,legendColors:l,legendColorBackground:this.options.multiTooltipKeyBackground,title:a[0].label,chart:this.chart,ctx:this.chart.ctx,custom:this.options.customTooltips}).draw()}else e(a,function(a){var b=a.tooltipPosition();new c.Tooltip({x:Math.round(b.x),y:Math.round(b.y),xPadding:this.options.tooltipXPadding,yPadding:this.options.tooltipYPadding,fillColor:this.options.tooltipFillColor,textColor:this.options.tooltipFontColor,fontFamily:this.options.tooltipFontFamily,fontStyle:this.options.tooltipFontStyle,fontSize:this.options.tooltipFontSize,caretHeight:this.options.tooltipCaretSize,cornerRadius:this.options.tooltipCornerRadius,text:v(this.options.tooltipTemplate,a),chart:this.chart,custom:this.options.customTooltips}).draw()},this);return this}},toBase64Image:function(){return this.chart.canvas.toDataURL.apply(this.chart.canvas,arguments)}}),c.Type.extend=function(a){var b=this,d=function(){return b.apply(this,arguments)};if(d.prototype=f(b.prototype),g(d.prototype,a),d.extend=c.Type.extend,a.name||b.prototype.name){var e=a.name||b.prototype.name,i=c.defaults[b.prototype.name]?f(c.defaults[b.prototype.name]):{};c.defaults[e]=g(i,a.defaults),c.types[e]=d,c.prototype[e]=function(a,b){var f=h(c.defaults.global,c.defaults[e],b||{});return new d(a,f,this)}}else m("Name not provided for this chart, so it hasn't been registered");return b},c.Element=function(a){g(this,a),this.initialize.apply(this,arguments),this.save()},g(c.Element.prototype,{initialize:function(){},restore:function(a){return a?e(a,function(a){this[a]=this._saved[a]},this):g(this,this._saved),this},save:function(){return this._saved=f(this),delete this._saved._saved,this},update:function(a){return e(a,function(a,b){this._saved[b]=this[b],this[b]=a},this),this},transition:function(a,b){return e(a,function(a,c){this[c]=(a-this._saved[c])*b+this._saved[c]},this),this},tooltipPosition:function(){return{x:this.x,y:this.y}},hasValue:function(){return o(this.value)}}),c.Element.extend=j,c.Point=c.Element.extend({display:!0,inRange:function(a,b){var c=this.hitDetectionRadius+this.radius;return Math.pow(a-this.x,2)+Math.pow(b-this.y,2)<Math.pow(c,2)},draw:function(){if(this.display){var a=this.ctx;a.beginPath(),a.arc(this.x,this.y,this.radius,0,2*Math.PI),a.closePath(),a.strokeStyle=this.strokeColor,a.lineWidth=this.strokeWidth,a.fillStyle=this.fillColor,a.fill(),a.stroke()}}}),c.Arc=c.Element.extend({inRange:function(a,b){var c=d.getAngleFromPoint(this,{x:a,y:b}),e=c.angle>=this.startAngle&&c.angle<=this.endAngle,f=c.distance>=this.innerRadius&&c.distance<=this.outerRadius;return e&&f},tooltipPosition:function(){var a=this.startAngle+(this.endAngle-this.startAngle)/2,b=(this.outerRadius-this.innerRadius)/2+this.innerRadius;return{x:this.x+Math.cos(a)*b,y:this.y+Math.sin(a)*b}},draw:function(a){var b=this.ctx;b.beginPath(),b.arc(this.x,this.y,this.outerRadius,this.startAngle,this.endAngle),b.arc(this.x,this.y,this.innerRadius,this.endAngle,this.startAngle,!0),b.closePath(),b.strokeStyle=this.strokeColor,b.lineWidth=this.strokeWidth,b.fillStyle=this.fillColor,b.fill(),b.lineJoin="bevel",this.showStroke&&b.stroke()}}),c.Rectangle=c.Element.extend({draw:function(){var a=this.ctx,b=this.width/2,c=this.x-b,d=this.x+b,e=this.base-(this.base-this.y),f=this.strokeWidth/2;this.showStroke&&(c+=f,d-=f,e+=f),a.beginPath(),a.fillStyle=this.fillColor,a.strokeStyle=this.strokeColor,a.lineWidth=this.strokeWidth,a.moveTo(c,this.base),a.lineTo(c,e),a.lineTo(d,e),a.lineTo(d,this.base),a.fill(),this.showStroke&&a.stroke()},height:function(){return this.base-this.y},inRange:function(a,b){return a>=this.x-this.width/2&&a<=this.x+this.width/2&&b>=this.y&&b<=this.base}}),c.Tooltip=c.Element.extend({draw:function(){var a=this.chart.ctx;a.font=G(this.fontSize,this.fontStyle,this.fontFamily),this.xAlign="center",this.yAlign="above";var b=this.caretPadding=2,c=a.measureText(this.text).width+2*this.xPadding,d=this.fontSize+2*this.yPadding,e=d+this.caretHeight+b;this.x+c/2>this.chart.width?this.xAlign="left":this.x-c/2<0&&(this.xAlign="right"),this.y-e<0&&(this.yAlign="below");var f=this.x-c/2,g=this.y-e;if(a.fillStyle=this.fillColor,this.custom)this.custom(this);else{switch(this.yAlign){case"above":a.beginPath(),a.moveTo(this.x,this.y-b),a.lineTo(this.x+this.caretHeight,this.y-(b+this.caretHeight)),a.lineTo(this.x-this.caretHeight,this.y-(b+this.caretHeight)),a.closePath(),a.fill();break;case"below":g=this.y+b+this.caretHeight,a.beginPath(),a.moveTo(this.x,this.y+b),a.lineTo(this.x+this.caretHeight,this.y+b+this.caretHeight),a.lineTo(this.x-this.caretHeight,this.y+b+this.caretHeight),a.closePath(),a.fill()}switch(this.xAlign){case"left":f=this.x-c+(this.cornerRadius+this.caretHeight);break;case"right":f=this.x-(this.cornerRadius+this.caretHeight)}I(a,f,g,c,d,this.cornerRadius),a.fill(),a.fillStyle=this.textColor,a.textAlign="center",a.textBaseline="middle",a.fillText(this.text,f+c/2,g+d/2)}}}),c.MultiTooltip=c.Element.extend({initialize:function(){this.font=G(this.fontSize,this.fontStyle,this.fontFamily),this.titleFont=G(this.titleFontSize,this.titleFontStyle,this.titleFontFamily),this.height=this.labels.length*this.fontSize+(this.labels.length-1)*(this.fontSize/2)+2*this.yPadding+1.5*this.titleFontSize,this.ctx.font=this.titleFont;var a=this.ctx.measureText(this.title).width,b=H(this.ctx,this.font,this.labels)+this.fontSize+3,c=p([b,a]);this.width=c+2*this.xPadding;var d=this.height/2;this.y-d<0?this.y=d:this.y+d>this.chart.height&&(this.y=this.chart.height-d),this.x>this.chart.width/2?this.x-=this.xOffset+this.width:this.x+=this.xOffset},getLineHeight:function(a){var b=this.y-this.height/2+this.yPadding,c=a-1;return 0===a?b+this.titleFontSize/2:b+(1.5*this.fontSize*c+this.fontSize/2)+1.5*this.titleFontSize},draw:function(){if(this.custom)this.custom(this);else{I(this.ctx,this.x,this.y-this.height/2,this.width,this.height,this.cornerRadius);var a=this.ctx;a.fillStyle=this.fillColor,a.fill(),a.closePath(),a.textAlign="left",a.textBaseline="middle",a.fillStyle=this.titleTextColor,a.font=this.titleFont,a.fillText(this.title,this.x+this.xPadding,this.getLineHeight(0)),a.font=this.font,d.each(this.labels,function(b,c){a.fillStyle=this.textColor,a.fillText(b,this.x+this.xPadding+this.fontSize+3,this.getLineHeight(c+1)),a.fillStyle=this.legendColorBackground,a.fillRect(this.x+this.xPadding,this.getLineHeight(c+1)-this.fontSize/2,this.fontSize,this.fontSize),a.fillStyle=this.legendColors[c].fill,a.fillRect(this.x+this.xPadding,this.getLineHeight(c+1)-this.fontSize/2,this.fontSize,this.fontSize)},this)}}}),c.Scale=c.Element.extend({initialize:function(){this.fit()},buildYLabels:function(){this.yLabels=[];for(var a=r(this.stepValue),b=0;b<=this.steps;b++)this.yLabels.push(v(this.templateString,{value:(this.min+b*this.stepValue).toFixed(a)}));this.yLabelWidth=this.display&&this.showLabels?H(this.ctx,this.font,this.yLabels):0},addXLabel:function(a){this.xLabels.push(a),this.valuesCount++,this.fit()},removeXLabel:function(){this.xLabels.shift(),this.valuesCount--,this.fit()},fit:function(){this.startPoint=this.display?this.fontSize:0,this.endPoint=this.display?this.height-1.5*this.fontSize-5:this.height,this.startPoint+=this.padding,this.endPoint-=this.padding;var a,b=this.endPoint-this.startPoint;for(this.calculateYRange(b),this.buildYLabels(),this.calculateXLabelRotation();b>this.endPoint-this.startPoint;)b=this.endPoint-this.startPoint,a=this.yLabelWidth,this.calculateYRange(b),this.buildYLabels(),a<this.yLabelWidth&&this.calculateXLabelRotation()},calculateXLabelRotation:function(){this.ctx.font=this.font;var a,b,c=this.ctx.measureText(this.xLabels[0]).width,d=this.ctx.measureText(this.xLabels[this.xLabels.length-1]).width;if(this.xScalePaddingRight=d/2+3,this.xScalePaddingLeft=c/2>this.yLabelWidth+10?c/2:this.yLabelWidth+10,this.xLabelRotation=0,this.display){var e,f=H(this.ctx,this.font,this.xLabels);this.xLabelWidth=f;for(var g=Math.floor(this.calculateX(1)-this.calculateX(0))-6;this.xLabelWidth>g&&0===this.xLabelRotation||this.xLabelWidth>g&&this.xLabelRotation<=90&&this.xLabelRotation>0;)e=Math.cos(s(this.xLabelRotation)),a=e*c,b=e*d,a+this.fontSize/2>this.yLabelWidth+8&&(this.xScalePaddingLeft=a+this.fontSize/2),this.xScalePaddingRight=this.fontSize/2,this.xLabelRotation++,this.xLabelWidth=e*f;this.xLabelRotation>0&&(this.endPoint-=Math.sin(s(this.xLabelRotation))*f+3)}else this.xLabelWidth=0,this.xScalePaddingRight=this.padding,this.xScalePaddingLeft=this.padding},calculateYRange:k,drawingArea:function(){return this.startPoint-this.endPoint},calculateY:function(a){var b=this.drawingArea()/(this.min-this.max);return this.endPoint-b*(a-this.min)},calculateX:function(a){var b=(this.xLabelRotation>0,this.width-(this.xScalePaddingLeft+this.xScalePaddingRight)),c=b/Math.max(this.valuesCount-(this.offsetGridLines?0:1),1),d=c*a+this.xScalePaddingLeft;return this.offsetGridLines&&(d+=c/2),Math.round(d)},update:function(a){d.extend(this,a),this.fit()},draw:function(){var a=this.ctx,b=(this.endPoint-this.startPoint)/this.steps,c=Math.round(this.xScalePaddingLeft);this.display&&(a.fillStyle=this.textColor,a.font=this.font,e(this.yLabels,function(e,f){var g=this.endPoint-b*f,h=Math.round(g),i=this.showHorizontalLines;a.textAlign="right",a.textBaseline="middle",this.showLabels&&a.fillText(e,c-10,g),0!==f||i||(i=!0),i&&a.beginPath(),f>0?(a.lineWidth=this.gridLineWidth,a.strokeStyle=this.gridLineColor):(a.lineWidth=this.lineWidth,a.strokeStyle=this.lineColor),h+=d.aliasPixel(a.lineWidth),i&&(a.moveTo(c,h),a.lineTo(this.width,h),a.stroke(),a.closePath()),a.lineWidth=this.lineWidth,a.strokeStyle=this.lineColor,a.beginPath(),a.moveTo(c-5,h),a.lineTo(c,h),a.stroke(),a.closePath()},this),e(this.xLabels,function(b,c){var d=this.calculateX(c)+t(this.lineWidth),e=this.calculateX(c-(this.offsetGridLines?.5:0))+t(this.lineWidth),f=this.xLabelRotation>0,g=this.showVerticalLines;0!==c||g||(g=!0),g&&a.beginPath(),c>0?(a.lineWidth=this.gridLineWidth,a.strokeStyle=this.gridLineColor):(a.lineWidth=this.lineWidth,a.strokeStyle=this.lineColor),g&&(a.moveTo(e,this.endPoint),a.lineTo(e,this.startPoint-3),a.stroke(),a.closePath()),a.lineWidth=this.lineWidth,a.strokeStyle=this.lineColor,a.beginPath(),a.moveTo(e,this.endPoint),a.lineTo(e,this.endPoint+5),a.stroke(),a.closePath(),a.save(),a.translate(d,f?this.endPoint+12:this.endPoint+8),a.rotate(-1*s(this.xLabelRotation)),a.font=this.font,a.textAlign=f?"right":"center",a.textBaseline=f?"middle":"top",a.fillText(b,0,0),a.restore()},this))}}),c.RadialScale=c.Element.extend({initialize:function(){this.size=q([this.height,this.width]),this.drawingArea=this.display?this.size/2-(this.fontSize/2+this.backdropPaddingY):this.size/2},calculateCenterOffset:function(a){var b=this.drawingArea/(this.max-this.min);return(a-this.min)*b},update:function(){this.lineArc?this.drawingArea=this.display?this.size/2-(this.fontSize/2+this.backdropPaddingY):this.size/2:this.setScaleSize(),this.buildYLabels()},buildYLabels:function(){this.yLabels=[];for(var a=r(this.stepValue),b=0;b<=this.steps;b++)this.yLabels.push(v(this.templateString,{value:(this.min+b*this.stepValue).toFixed(a)}))},getCircumference:function(){return 2*Math.PI/this.valuesCount},setScaleSize:function(){var a,b,c,d,e,f,g,h,i,j,k,l,m=q([this.height/2-this.pointLabelFontSize-5,this.width/2]),n=this.width,p=0;for(this.ctx.font=G(this.pointLabelFontSize,this.pointLabelFontStyle,this.pointLabelFontFamily),b=0;b<this.valuesCount;b++)a=this.getPointPosition(b,m),c=this.ctx.measureText(v(this.templateString,{value:this.labels[b]})).width+5,0===b||b===this.valuesCount/2?(d=c/2,a.x+d>n&&(n=a.x+d,e=b),a.x-d<p&&(p=a.x-d,g=b)):b<this.valuesCount/2?a.x+c>n&&(n=a.x+c,e=b):b>this.valuesCount/2&&a.x-c<p&&(p=a.x-c,g=b);i=p,j=Math.ceil(n-this.width),f=this.getIndexAngle(e),h=this.getIndexAngle(g),k=j/Math.sin(f+Math.PI/2),l=i/Math.sin(h+Math.PI/2),k=o(k)?k:0,l=o(l)?l:0,this.drawingArea=m-(l+k)/2,this.setCenterPoint(l,k)},setCenterPoint:function(a,b){var c=this.width-b-this.drawingArea,d=a+this.drawingArea;this.xCenter=(d+c)/2,this.yCenter=this.height/2},getIndexAngle:function(a){var b=2*Math.PI/this.valuesCount;return a*b-Math.PI/2},getPointPosition:function(a,b){var c=this.getIndexAngle(a);return{x:Math.cos(c)*b+this.xCenter,y:Math.sin(c)*b+this.yCenter}},draw:function(){if(this.display){var a=this.ctx;if(e(this.yLabels,function(b,c){if(c>0){var d,e=c*(this.drawingArea/this.steps),f=this.yCenter-e;if(this.lineWidth>0)if(a.strokeStyle=this.lineColor,a.lineWidth=this.lineWidth,this.lineArc)a.beginPath(),a.arc(this.xCenter,this.yCenter,e,0,2*Math.PI),a.closePath(),a.stroke();else{a.beginPath();for(var g=0;g<this.valuesCount;g++)d=this.getPointPosition(g,this.calculateCenterOffset(this.min+c*this.stepValue)),0===g?a.moveTo(d.x,d.y):a.lineTo(d.x,d.y);a.closePath(),a.stroke()}if(this.showLabels){if(a.font=G(this.fontSize,this.fontStyle,this.fontFamily),this.showLabelBackdrop){var h=a.measureText(b).width;a.fillStyle=this.backdropColor,a.fillRect(this.xCenter-h/2-this.backdropPaddingX,f-this.fontSize/2-this.backdropPaddingY,h+2*this.backdropPaddingX,this.fontSize+2*this.backdropPaddingY)}a.textAlign="center",a.textBaseline="middle",a.fillStyle=this.fontColor,a.fillText(b,this.xCenter,f)}}},this),!this.lineArc){a.lineWidth=this.angleLineWidth,a.strokeStyle=this.angleLineColor;for(var b=this.valuesCount-1;b>=0;b--){if(this.angleLineWidth>0){var c=this.getPointPosition(b,this.calculateCenterOffset(this.max));a.beginPath(),a.moveTo(this.xCenter,this.yCenter),a.lineTo(c.x,c.y),a.stroke(),a.closePath()}var d=this.getPointPosition(b,this.calculateCenterOffset(this.max)+5);a.font=G(this.pointLabelFontSize,this.pointLabelFontStyle,this.pointLabelFontFamily),a.fillStyle=this.pointLabelFontColor;var f=this.labels.length,g=this.labels.length/2,h=g/2,i=h>b||b>f-h,j=b===h||b===f-h;0===b?a.textAlign="center":b===g?a.textAlign="center":g>b?a.textAlign="left":a.textAlign="right",j?a.textBaseline="middle":i?a.textBaseline="bottom":a.textBaseline="top",a.fillText(this.labels[b],d.x,d.y)}}}}}),d.addEvent(window,"resize",function(){var a;return function(){clearTimeout(a),a=setTimeout(function(){e(c.instances,function(a){a.options.responsive&&a.resize(a.render,!0)})},50)}}()),n?define(function(){return c}):"object"==typeof module&&module.exports&&(module.exports=c),a.Chart=c,c.noConflict=function(){return a.Chart=b,c}}.call(this),function(){"use strict";var a=this,b=a.Chart,c=b.helpers,d={scaleBeginAtZero:!0,scaleShowGridLines:!0,scaleGridLineColor:"rgba(0,0,0,.05)",scaleGridLineWidth:1,scaleShowHorizontalLines:!0,scaleShowVerticalLines:!0,barShowStroke:!0,barStrokeWidth:2,barValueSpacing:5,barDatasetSpacing:1,legendTemplate:'<ul class="<%=name.toLowerCase()%>-legend"><% for (var i=0; i<datasets.length; i++){%><li><span style="background-color:<%=datasets[i].fillColor%>"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>'};b.Type.extend({name:"Bar",defaults:d,initialize:function(a){var d=this.options;this.ScaleClass=b.Scale.extend({offsetGridLines:!0,calculateBarX:function(a,b,c){var e=this.calculateBaseWidth(),f=this.calculateX(c)-e/2,g=this.calculateBarWidth(a);return f+g*b+b*d.barDatasetSpacing+g/2},calculateBaseWidth:function(){return this.calculateX(1)-this.calculateX(0)-2*d.barValueSpacing},calculateBarWidth:function(a){var b=this.calculateBaseWidth()-(a-1)*d.barDatasetSpacing;return b/a}}),this.datasets=[],this.options.showTooltips&&c.bindEvents(this,this.options.tooltipEvents,function(a){var b="mouseout"!==a.type?this.getBarsAtEvent(a):[];this.eachBars(function(a){a.restore(["fillColor","strokeColor"])}),c.each(b,function(a){a.fillColor=a.highlightFill,a.strokeColor=a.highlightStroke}),this.showTooltip(b)}),this.BarClass=b.Rectangle.extend({strokeWidth:this.options.barStrokeWidth,showStroke:this.options.barShowStroke,ctx:this.chart.ctx}),c.each(a.datasets,function(b,d){var e={label:b.label||null,fillColor:b.fillColor,strokeColor:b.strokeColor,bars:[]};this.datasets.push(e),c.each(b.data,function(c,d){e.bars.push(new this.BarClass({value:c,label:a.labels[d],datasetLabel:b.label,strokeColor:b.strokeColor,fillColor:b.fillColor,highlightFill:b.highlightFill||b.fillColor,highlightStroke:b.highlightStroke||b.strokeColor}))},this)},this),this.buildScale(a.labels),this.BarClass.prototype.base=this.scale.endPoint,this.eachBars(function(a,b,d){c.extend(a,{width:this.scale.calculateBarWidth(this.datasets.length),x:this.scale.calculateBarX(this.datasets.length,d,b),y:this.scale.endPoint}),a.save()},this),this.render()},update:function(){this.scale.update(),c.each(this.activeElements,function(a){a.restore(["fillColor","strokeColor"])}),this.eachBars(function(a){a.save()}),this.render()},eachBars:function(a){c.each(this.datasets,function(b,d){c.each(b.bars,a,this,d)},this)},getBarsAtEvent:function(a){for(var b,d=[],e=c.getRelativePosition(a),f=function(a){d.push(a.bars[b])},g=0;g<this.datasets.length;g++)for(b=0;b<this.datasets[g].bars.length;b++)if(this.datasets[g].bars[b].inRange(e.x,e.y))return c.each(this.datasets,f),d;return d},buildScale:function(a){var b=this,d=function(){var a=[];return b.eachBars(function(b){a.push(b.value)}),a},e={templateString:this.options.scaleLabel,height:this.chart.height,width:this.chart.width,ctx:this.chart.ctx,textColor:this.options.scaleFontColor,fontSize:this.options.scaleFontSize,fontStyle:this.options.scaleFontStyle,fontFamily:this.options.scaleFontFamily,valuesCount:a.length,beginAtZero:this.options.scaleBeginAtZero,integersOnly:this.options.scaleIntegersOnly,calculateYRange:function(a){var b=c.calculateScaleRange(d(),a,this.fontSize,this.beginAtZero,this.integersOnly);c.extend(this,b)},xLabels:a,font:c.fontString(this.options.scaleFontSize,this.options.scaleFontStyle,this.options.scaleFontFamily),lineWidth:this.options.scaleLineWidth,lineColor:this.options.scaleLineColor,showHorizontalLines:this.options.scaleShowHorizontalLines,showVerticalLines:this.options.scaleShowVerticalLines,gridLineWidth:this.options.scaleShowGridLines?this.options.scaleGridLineWidth:0,gridLineColor:this.options.scaleShowGridLines?this.options.scaleGridLineColor:"rgba(0,0,0,0)",padding:this.options.showScale?0:this.options.barShowStroke?this.options.barStrokeWidth:0,showLabels:this.options.scaleShowLabels,display:this.options.showScale};this.options.scaleOverride&&c.extend(e,{calculateYRange:c.noop,steps:this.options.scaleSteps,stepValue:this.options.scaleStepWidth,min:this.options.scaleStartValue,max:this.options.scaleStartValue+this.options.scaleSteps*this.options.scaleStepWidth}),this.scale=new this.ScaleClass(e)},addData:function(a,b){c.each(a,function(a,c){this.datasets[c].bars.push(new this.BarClass({value:a,label:b,x:this.scale.calculateBarX(this.datasets.length,c,this.scale.valuesCount+1),y:this.scale.endPoint,width:this.scale.calculateBarWidth(this.datasets.length),base:this.scale.endPoint,strokeColor:this.datasets[c].strokeColor,fillColor:this.datasets[c].fillColor}))},this),this.scale.addXLabel(b),this.update()},removeData:function(){this.scale.removeXLabel(),c.each(this.datasets,function(a){a.bars.shift()},this),this.update()},reflow:function(){c.extend(this.BarClass.prototype,{y:this.scale.endPoint,base:this.scale.endPoint});var a=c.extend({height:this.chart.height,width:this.chart.width});this.scale.update(a)},draw:function(a){var b=a||1;this.clear();this.chart.ctx;this.scale.draw(b),c.each(this.datasets,function(a,d){c.each(a.bars,function(a,c){a.hasValue()&&(a.base=this.scale.endPoint,a.transition({x:this.scale.calculateBarX(this.datasets.length,d,c),y:this.scale.calculateY(a.value),width:this.scale.calculateBarWidth(this.datasets.length)},b).draw())},this)},this)}})}.call(this),function(){"use strict";var a=this,b=a.Chart,c=b.helpers,d={segmentShowStroke:!0,segmentStrokeColor:"#fff",segmentStrokeWidth:2,percentageInnerCutout:50,animationSteps:100,animationEasing:"easeOutBounce",animateRotate:!0,animateScale:!1,legendTemplate:'<ul class="<%=name.toLowerCase()%>-legend"><% for (var i=0; i<segments.length; i++){%><li><span style="background-color:<%=segments[i].fillColor%>"></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>'};b.Type.extend({name:"Doughnut",defaults:d,initialize:function(a){this.segments=[],this.outerRadius=(c.min([this.chart.width,this.chart.height])-this.options.segmentStrokeWidth/2)/2,this.SegmentArc=b.Arc.extend({ctx:this.chart.ctx,x:this.chart.width/2,y:this.chart.height/2}),this.options.showTooltips&&c.bindEvents(this,this.options.tooltipEvents,function(a){var b="mouseout"!==a.type?this.getSegmentsAtEvent(a):[];c.each(this.segments,function(a){a.restore(["fillColor"])}),c.each(b,function(a){a.fillColor=a.highlightColor}),this.showTooltip(b)}),this.calculateTotal(a),c.each(a,function(a,b){this.addData(a,b,!0)},this),this.render()},getSegmentsAtEvent:function(a){var b=[],d=c.getRelativePosition(a);return c.each(this.segments,function(a){a.inRange(d.x,d.y)&&b.push(a)},this),b},addData:function(a,b,c){var d=b||this.segments.length;this.segments.splice(d,0,new this.SegmentArc({value:a.value,outerRadius:this.options.animateScale?0:this.outerRadius,innerRadius:this.options.animateScale?0:this.outerRadius/100*this.options.percentageInnerCutout,fillColor:a.color,highlightColor:a.highlight||a.color,showStroke:this.options.segmentShowStroke,strokeWidth:this.options.segmentStrokeWidth,strokeColor:this.options.segmentStrokeColor,startAngle:1.5*Math.PI,circumference:this.options.animateRotate?0:this.calculateCircumference(a.value),label:a.label})),c||(this.reflow(),this.update())},calculateCircumference:function(a){return 2*Math.PI*(Math.abs(a)/this.total)},calculateTotal:function(a){this.total=0,c.each(a,function(a){this.total+=Math.abs(a.value)},this)},update:function(){this.calculateTotal(this.segments),c.each(this.activeElements,function(a){a.restore(["fillColor"])}),c.each(this.segments,function(a){a.save()}),this.render()},removeData:function(a){var b=c.isNumber(a)?a:this.segments.length-1;this.segments.splice(b,1),this.reflow(),this.update()},reflow:function(){c.extend(this.SegmentArc.prototype,{x:this.chart.width/2,y:this.chart.height/2}),this.outerRadius=(c.min([this.chart.width,this.chart.height])-this.options.segmentStrokeWidth/2)/2,c.each(this.segments,function(a){a.update({outerRadius:this.outerRadius,innerRadius:this.outerRadius/100*this.options.percentageInnerCutout})},this)},draw:function(a){var b=a?a:1;this.clear(),c.each(this.segments,function(a,c){a.transition({circumference:this.calculateCircumference(a.value),outerRadius:this.outerRadius,innerRadius:this.outerRadius/100*this.options.percentageInnerCutout},b),a.endAngle=a.startAngle+a.circumference,a.draw(),0===c&&(a.startAngle=1.5*Math.PI),c<this.segments.length-1&&(this.segments[c+1].startAngle=a.endAngle)},this)}}),b.types.Doughnut.extend({name:"Pie",defaults:c.merge(d,{percentageInnerCutout:0})})}.call(this),function(){"use strict";var a=this,b=a.Chart,c=b.helpers,d={scaleShowGridLines:!0,scaleGridLineColor:"rgba(0,0,0,.05)",scaleGridLineWidth:1,scaleShowHorizontalLines:!0,scaleShowVerticalLines:!0,bezierCurve:!0,bezierCurveTension:.4,pointDot:!0,pointDotRadius:4,pointDotStrokeWidth:1,pointHitDetectionRadius:20,datasetStroke:!0,datasetStrokeWidth:2,datasetFill:!0,legendTemplate:'<ul class="<%=name.toLowerCase()%>-legend"><% for (var i=0; i<datasets.length; i++){%><li><span style="background-color:<%=datasets[i].strokeColor%>"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>'};b.Type.extend({name:"Line",defaults:d,initialize:function(a){this.PointClass=b.Point.extend({strokeWidth:this.options.pointDotStrokeWidth,radius:this.options.pointDotRadius,display:this.options.pointDot,hitDetectionRadius:this.options.pointHitDetectionRadius,ctx:this.chart.ctx,inRange:function(a){return Math.pow(a-this.x,2)<Math.pow(this.radius+this.hitDetectionRadius,2)}}),this.datasets=[],this.options.showTooltips&&c.bindEvents(this,this.options.tooltipEvents,function(a){var b="mouseout"!==a.type?this.getPointsAtEvent(a):[];this.eachPoints(function(a){a.restore(["fillColor","strokeColor"])}),c.each(b,function(a){a.fillColor=a.highlightFill,a.strokeColor=a.highlightStroke}),this.showTooltip(b)}),c.each(a.datasets,function(b){var d={label:b.label||null,fillColor:b.fillColor,strokeColor:b.strokeColor,pointColor:b.pointColor,pointStrokeColor:b.pointStrokeColor,points:[]};this.datasets.push(d),c.each(b.data,function(c,e){d.points.push(new this.PointClass({value:c,label:a.labels[e],datasetLabel:b.label,strokeColor:b.pointStrokeColor,fillColor:b.pointColor,highlightFill:b.pointHighlightFill||b.pointColor,highlightStroke:b.pointHighlightStroke||b.pointStrokeColor}))},this),this.buildScale(a.labels),this.eachPoints(function(a,b){c.extend(a,{x:this.scale.calculateX(b),y:this.scale.endPoint}),a.save()},this)},this),this.render()},update:function(){this.scale.update(),c.each(this.activeElements,function(a){a.restore(["fillColor","strokeColor"])}),this.eachPoints(function(a){a.save()}),this.render()},eachPoints:function(a){c.each(this.datasets,function(b){c.each(b.points,a,this)},this)},getPointsAtEvent:function(a){var b=[],d=c.getRelativePosition(a);return c.each(this.datasets,function(a){c.each(a.points,function(a){a.inRange(d.x,d.y)&&b.push(a)})},this),b},buildScale:function(a){var d=this,e=function(){var a=[];return d.eachPoints(function(b){a.push(b.value)}),a},f={templateString:this.options.scaleLabel,height:this.chart.height,width:this.chart.width,ctx:this.chart.ctx,textColor:this.options.scaleFontColor,fontSize:this.options.scaleFontSize,fontStyle:this.options.scaleFontStyle,fontFamily:this.options.scaleFontFamily,valuesCount:a.length,beginAtZero:this.options.scaleBeginAtZero,integersOnly:this.options.scaleIntegersOnly,calculateYRange:function(a){var b=c.calculateScaleRange(e(),a,this.fontSize,this.beginAtZero,this.integersOnly);c.extend(this,b)},xLabels:a,font:c.fontString(this.options.scaleFontSize,this.options.scaleFontStyle,this.options.scaleFontFamily),lineWidth:this.options.scaleLineWidth,lineColor:this.options.scaleLineColor,showHorizontalLines:this.options.scaleShowHorizontalLines,showVerticalLines:this.options.scaleShowVerticalLines,gridLineWidth:this.options.scaleShowGridLines?this.options.scaleGridLineWidth:0,gridLineColor:this.options.scaleShowGridLines?this.options.scaleGridLineColor:"rgba(0,0,0,0)",padding:this.options.showScale?0:this.options.pointDotRadius+this.options.pointDotStrokeWidth,showLabels:this.options.scaleShowLabels,display:this.options.showScale};this.options.scaleOverride&&c.extend(f,{calculateYRange:c.noop,steps:this.options.scaleSteps,stepValue:this.options.scaleStepWidth,min:this.options.scaleStartValue,max:this.options.scaleStartValue+this.options.scaleSteps*this.options.scaleStepWidth}),this.scale=new b.Scale(f)},addData:function(a,b){c.each(a,function(a,c){this.datasets[c].points.push(new this.PointClass({value:a,label:b,x:this.scale.calculateX(this.scale.valuesCount+1),y:this.scale.endPoint,strokeColor:this.datasets[c].pointStrokeColor,fillColor:this.datasets[c].pointColor}))},this),this.scale.addXLabel(b),this.update()},removeData:function(){this.scale.removeXLabel(),c.each(this.datasets,function(a){a.points.shift()},this),this.update()},reflow:function(){var a=c.extend({height:this.chart.height,width:this.chart.width});this.scale.update(a)},draw:function(a){var b=a||1;this.clear();var d=this.chart.ctx,e=function(a){return null!==a.value},f=function(a,b,d){return c.findNextWhere(b,e,d)||a},g=function(a,b,d){return c.findPreviousWhere(b,e,d)||a};this.scale.draw(b),c.each(this.datasets,function(a){var h=c.where(a.points,e);c.each(a.points,function(a,c){a.hasValue()&&a.transition({y:this.scale.calculateY(a.value),x:this.scale.calculateX(c)},b)},this),this.options.bezierCurve&&c.each(h,function(a,b){var d=b>0&&b<h.length-1?this.options.bezierCurveTension:0;a.controlPoints=c.splineCurve(g(a,h,b),a,f(a,h,b),d),a.controlPoints.outer.y>this.scale.endPoint?a.controlPoints.outer.y=this.scale.endPoint:a.controlPoints.outer.y<this.scale.startPoint&&(a.controlPoints.outer.y=this.scale.startPoint),a.controlPoints.inner.y>this.scale.endPoint?a.controlPoints.inner.y=this.scale.endPoint:a.controlPoints.inner.y<this.scale.startPoint&&(a.controlPoints.inner.y=this.scale.startPoint)},this),d.lineWidth=this.options.datasetStrokeWidth,d.strokeStyle=a.strokeColor,d.beginPath(),c.each(h,function(a,b){if(0===b)d.moveTo(a.x,a.y);else if(this.options.bezierCurve){var c=g(a,h,b);d.bezierCurveTo(c.controlPoints.outer.x,c.controlPoints.outer.y,a.controlPoints.inner.x,a.controlPoints.inner.y,a.x,a.y)}else d.lineTo(a.x,a.y)},this),d.stroke(),this.options.datasetFill&&h.length>0&&(d.lineTo(h[h.length-1].x,this.scale.endPoint),d.lineTo(h[0].x,this.scale.endPoint),d.fillStyle=a.fillColor,d.closePath(),d.fill()),c.each(h,function(a){a.draw()})},this)}})}.call(this),function(){"use strict";var a=this,b=a.Chart,c=b.helpers,d={scaleShowLabelBackdrop:!0,scaleBackdropColor:"rgba(255,255,255,0.75)",scaleBeginAtZero:!0,scaleBackdropPaddingY:2,scaleBackdropPaddingX:2,scaleShowLine:!0,segmentShowStroke:!0,segmentStrokeColor:"#fff",segmentStrokeWidth:2,animationSteps:100,animationEasing:"easeOutBounce",animateRotate:!0,animateScale:!1,legendTemplate:'<ul class="<%=name.toLowerCase()%>-legend"><% for (var i=0; i<segments.length; i++){%><li><span style="background-color:<%=segments[i].fillColor%>"></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>'};b.Type.extend({name:"PolarArea",defaults:d,initialize:function(a){this.segments=[],this.SegmentArc=b.Arc.extend({showStroke:this.options.segmentShowStroke,
+strokeWidth:this.options.segmentStrokeWidth,strokeColor:this.options.segmentStrokeColor,ctx:this.chart.ctx,innerRadius:0,x:this.chart.width/2,y:this.chart.height/2}),this.scale=new b.RadialScale({display:this.options.showScale,fontStyle:this.options.scaleFontStyle,fontSize:this.options.scaleFontSize,fontFamily:this.options.scaleFontFamily,fontColor:this.options.scaleFontColor,showLabels:this.options.scaleShowLabels,showLabelBackdrop:this.options.scaleShowLabelBackdrop,backdropColor:this.options.scaleBackdropColor,backdropPaddingY:this.options.scaleBackdropPaddingY,backdropPaddingX:this.options.scaleBackdropPaddingX,lineWidth:this.options.scaleShowLine?this.options.scaleLineWidth:0,lineColor:this.options.scaleLineColor,lineArc:!0,width:this.chart.width,height:this.chart.height,xCenter:this.chart.width/2,yCenter:this.chart.height/2,ctx:this.chart.ctx,templateString:this.options.scaleLabel,valuesCount:a.length}),this.updateScaleRange(a),this.scale.update(),c.each(a,function(a,b){this.addData(a,b,!0)},this),this.options.showTooltips&&c.bindEvents(this,this.options.tooltipEvents,function(a){var b="mouseout"!==a.type?this.getSegmentsAtEvent(a):[];c.each(this.segments,function(a){a.restore(["fillColor"])}),c.each(b,function(a){a.fillColor=a.highlightColor}),this.showTooltip(b)}),this.render()},getSegmentsAtEvent:function(a){var b=[],d=c.getRelativePosition(a);return c.each(this.segments,function(a){a.inRange(d.x,d.y)&&b.push(a)},this),b},addData:function(a,b,c){var d=b||this.segments.length;this.segments.splice(d,0,new this.SegmentArc({fillColor:a.color,highlightColor:a.highlight||a.color,label:a.label,value:a.value,outerRadius:this.options.animateScale?0:this.scale.calculateCenterOffset(a.value),circumference:this.options.animateRotate?0:this.scale.getCircumference(),startAngle:1.5*Math.PI})),c||(this.reflow(),this.update())},removeData:function(a){var b=c.isNumber(a)?a:this.segments.length-1;this.segments.splice(b,1),this.reflow(),this.update()},calculateTotal:function(a){this.total=0,c.each(a,function(a){this.total+=a.value},this),this.scale.valuesCount=this.segments.length},updateScaleRange:function(a){var b=[];c.each(a,function(a){b.push(a.value)});var d=this.options.scaleOverride?{steps:this.options.scaleSteps,stepValue:this.options.scaleStepWidth,min:this.options.scaleStartValue,max:this.options.scaleStartValue+this.options.scaleSteps*this.options.scaleStepWidth}:c.calculateScaleRange(b,c.min([this.chart.width,this.chart.height])/2,this.options.scaleFontSize,this.options.scaleBeginAtZero,this.options.scaleIntegersOnly);c.extend(this.scale,d,{size:c.min([this.chart.width,this.chart.height]),xCenter:this.chart.width/2,yCenter:this.chart.height/2})},update:function(){this.calculateTotal(this.segments),c.each(this.segments,function(a){a.save()}),this.reflow(),this.render()},reflow:function(){c.extend(this.SegmentArc.prototype,{x:this.chart.width/2,y:this.chart.height/2}),this.updateScaleRange(this.segments),this.scale.update(),c.extend(this.scale,{xCenter:this.chart.width/2,yCenter:this.chart.height/2}),c.each(this.segments,function(a){a.update({outerRadius:this.scale.calculateCenterOffset(a.value)})},this)},draw:function(a){var b=a||1;this.clear(),c.each(this.segments,function(a,c){a.transition({circumference:this.scale.getCircumference(),outerRadius:this.scale.calculateCenterOffset(a.value)},b),a.endAngle=a.startAngle+a.circumference,0===c&&(a.startAngle=1.5*Math.PI),c<this.segments.length-1&&(this.segments[c+1].startAngle=a.endAngle),a.draw()},this),this.scale.draw()}})}.call(this),function(){"use strict";var a=this,b=a.Chart,c=b.helpers;b.Type.extend({name:"Radar",defaults:{scaleShowLine:!0,angleShowLineOut:!0,scaleShowLabels:!1,scaleBeginAtZero:!0,angleLineColor:"rgba(0,0,0,.1)",angleLineWidth:1,pointLabelFontFamily:"'Arial'",pointLabelFontStyle:"normal",pointLabelFontSize:10,pointLabelFontColor:"#666",pointDot:!0,pointDotRadius:3,pointDotStrokeWidth:1,pointHitDetectionRadius:20,datasetStroke:!0,datasetStrokeWidth:2,datasetFill:!0,legendTemplate:'<ul class="<%=name.toLowerCase()%>-legend"><% for (var i=0; i<datasets.length; i++){%><li><span style="background-color:<%=datasets[i].strokeColor%>"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>'},initialize:function(a){this.PointClass=b.Point.extend({strokeWidth:this.options.pointDotStrokeWidth,radius:this.options.pointDotRadius,display:this.options.pointDot,hitDetectionRadius:this.options.pointHitDetectionRadius,ctx:this.chart.ctx}),this.datasets=[],this.buildScale(a),this.options.showTooltips&&c.bindEvents(this,this.options.tooltipEvents,function(a){var b="mouseout"!==a.type?this.getPointsAtEvent(a):[];this.eachPoints(function(a){a.restore(["fillColor","strokeColor"])}),c.each(b,function(a){a.fillColor=a.highlightFill,a.strokeColor=a.highlightStroke}),this.showTooltip(b)}),c.each(a.datasets,function(b){var d={label:b.label||null,fillColor:b.fillColor,strokeColor:b.strokeColor,pointColor:b.pointColor,pointStrokeColor:b.pointStrokeColor,points:[]};this.datasets.push(d),c.each(b.data,function(c,e){var f;this.scale.animation||(f=this.scale.getPointPosition(e,this.scale.calculateCenterOffset(c))),d.points.push(new this.PointClass({value:c,label:a.labels[e],datasetLabel:b.label,x:this.options.animation?this.scale.xCenter:f.x,y:this.options.animation?this.scale.yCenter:f.y,strokeColor:b.pointStrokeColor,fillColor:b.pointColor,highlightFill:b.pointHighlightFill||b.pointColor,highlightStroke:b.pointHighlightStroke||b.pointStrokeColor}))},this)},this),this.render()},eachPoints:function(a){c.each(this.datasets,function(b){c.each(b.points,a,this)},this)},getPointsAtEvent:function(a){var b=c.getRelativePosition(a),d=c.getAngleFromPoint({x:this.scale.xCenter,y:this.scale.yCenter},b),e=2*Math.PI/this.scale.valuesCount,f=Math.round((d.angle-1.5*Math.PI)/e),g=[];return(f>=this.scale.valuesCount||0>f)&&(f=0),d.distance<=this.scale.drawingArea&&c.each(this.datasets,function(a){g.push(a.points[f])}),g},buildScale:function(a){this.scale=new b.RadialScale({display:this.options.showScale,fontStyle:this.options.scaleFontStyle,fontSize:this.options.scaleFontSize,fontFamily:this.options.scaleFontFamily,fontColor:this.options.scaleFontColor,showLabels:this.options.scaleShowLabels,showLabelBackdrop:this.options.scaleShowLabelBackdrop,backdropColor:this.options.scaleBackdropColor,backdropPaddingY:this.options.scaleBackdropPaddingY,backdropPaddingX:this.options.scaleBackdropPaddingX,lineWidth:this.options.scaleShowLine?this.options.scaleLineWidth:0,lineColor:this.options.scaleLineColor,angleLineColor:this.options.angleLineColor,angleLineWidth:this.options.angleShowLineOut?this.options.angleLineWidth:0,pointLabelFontColor:this.options.pointLabelFontColor,pointLabelFontSize:this.options.pointLabelFontSize,pointLabelFontFamily:this.options.pointLabelFontFamily,pointLabelFontStyle:this.options.pointLabelFontStyle,height:this.chart.height,width:this.chart.width,xCenter:this.chart.width/2,yCenter:this.chart.height/2,ctx:this.chart.ctx,templateString:this.options.scaleLabel,labels:a.labels,valuesCount:a.datasets[0].data.length}),this.scale.setScaleSize(),this.updateScaleRange(a.datasets),this.scale.buildYLabels()},updateScaleRange:function(a){var b=function(){var b=[];return c.each(a,function(a){a.data?b=b.concat(a.data):c.each(a.points,function(a){b.push(a.value)})}),b}(),d=this.options.scaleOverride?{steps:this.options.scaleSteps,stepValue:this.options.scaleStepWidth,min:this.options.scaleStartValue,max:this.options.scaleStartValue+this.options.scaleSteps*this.options.scaleStepWidth}:c.calculateScaleRange(b,c.min([this.chart.width,this.chart.height])/2,this.options.scaleFontSize,this.options.scaleBeginAtZero,this.options.scaleIntegersOnly);c.extend(this.scale,d)},addData:function(a,b){this.scale.valuesCount++,c.each(a,function(a,c){var d=this.scale.getPointPosition(this.scale.valuesCount,this.scale.calculateCenterOffset(a));this.datasets[c].points.push(new this.PointClass({value:a,label:b,x:d.x,y:d.y,strokeColor:this.datasets[c].pointStrokeColor,fillColor:this.datasets[c].pointColor}))},this),this.scale.labels.push(b),this.reflow(),this.update()},removeData:function(){this.scale.valuesCount--,this.scale.labels.shift(),c.each(this.datasets,function(a){a.points.shift()},this),this.reflow(),this.update()},update:function(){this.eachPoints(function(a){a.save()}),this.reflow(),this.render()},reflow:function(){c.extend(this.scale,{width:this.chart.width,height:this.chart.height,size:c.min([this.chart.width,this.chart.height]),xCenter:this.chart.width/2,yCenter:this.chart.height/2}),this.updateScaleRange(this.datasets),this.scale.setScaleSize(),this.scale.buildYLabels()},draw:function(a){var b=a||1,d=this.chart.ctx;this.clear(),this.scale.draw(),c.each(this.datasets,function(a){c.each(a.points,function(a,c){a.hasValue()&&a.transition(this.scale.getPointPosition(c,this.scale.calculateCenterOffset(a.value)),b)},this),d.lineWidth=this.options.datasetStrokeWidth,d.strokeStyle=a.strokeColor,d.beginPath(),c.each(a.points,function(a,b){0===b?d.moveTo(a.x,a.y):d.lineTo(a.x,a.y)},this),d.closePath(),d.stroke(),d.fillStyle=a.fillColor,d.fill(),c.each(a.points,function(a){a.hasValue()&&a.draw()})},this)}})}.call(this),function(a){"use strict";"object"==typeof exports?module.exports=a(angular,require("chart.js")):"function"==typeof define&&define.amd?define(["angular","chart"],a):a(angular,Chart)}(function(a,b){"use strict";function c(){var c={},d={Chart:b,getOptions:function(b){var d=b&&c[b]||{};return a.extend({},c,d)}};this.setOptions=function(b,d){return d?void(c[b]=a.extend(c[b]||{},d)):(d=b,void(c=a.extend(c,d)))},this.$get=function(){return d}}function d(c,d){function f(a,b){return a&&b&&a.length&&b.length?Array.isArray(a[0])?a.length===b.length&&a.every(function(a,c){return a.length===b[c].length}):b.reduce(g,0)>0?a.length===b.length:!1:!1}function g(a,b){return a+b}function h(b,c,d,e){var f=null;return function(g){var h=c.getPointsAtEvent||c.getBarsAtEvent||c.getSegmentsAtEvent;if(h){var i=h.call(c,g);(e===!1||a.equals(f,i)===!1)&&(f=i,b[d](i,g),b.$apply())}}}function i(d,e){for(var f=a.copy(e.colours||c.getOptions(d).colours||b.defaults.global.colours);f.length<e.data.length;)f.push(e.getColour());return f.map(j)}function j(a){return"object"==typeof a&&null!==a?a:"string"==typeof a&&"#"===a[0]?l(o(a.substr(1))):k()}function k(){var a=[m(0,255),m(0,255),m(0,255)];return l(a)}function l(a){return{fillColor:n(a,.2),strokeColor:n(a,1),pointColor:n(a,1),pointStrokeColor:"#fff",pointHighlightFill:"#fff",pointHighlightStroke:n(a,.8)}}function m(a,b){return Math.floor(Math.random()*(b-a+1))+a}function n(a,b){return e?"rgb("+a.join(",")+")":"rgba("+a.concat(b).join(",")+")"}function o(a){var b=parseInt(a,16),c=b>>16&255,d=b>>8&255,e=255&b;return[c,d,e]}function p(b,c,d,e){return{labels:b,datasets:c.map(function(b,c){return a.extend({},e[c],{label:d[c],data:b})})}}function q(b,c,d){return b.map(function(b,e){return a.extend({},d[e],{label:b,value:c[e],color:d[e].strokeColor,highlight:d[e].pointHighlightStroke})})}function r(a,b){var c=a.parent(),d=c.find("chart-legend"),e="<chart-legend>"+b.generateLegend()+"</chart-legend>";d.length?d.replaceWith(e):c.append(e)}function s(a,b,c,d){Array.isArray(c.data[0])?a.datasets.forEach(function(a,c){(a.points||a.bars).forEach(function(a,d){a.value=b[c][d]})}):a.segments.forEach(function(a,c){a.value=b[c]}),a.update(),c.$emit("update",a),c.legend&&"false"!==c.legend&&r(d,a)}function t(a){return!a||Array.isArray(a)&&!a.length||"object"==typeof a&&!Object.keys(a).length}function u(d,e){var f=a.extend({},b.defaults.global,c.getOptions(d),e.options);return f.responsive}return function(b){return{restrict:"CA",scope:{data:"=?",labels:"=?",options:"=?",series:"=?",colours:"=?",getColour:"=?",chartType:"=",legend:"@",click:"=?",hover:"=?",chartData:"=?",chartLabels:"=?",chartOptions:"=?",chartSeries:"=?",chartColours:"=?",chartLegend:"@",chartClick:"=?",chartHover:"=?"},link:function(g,j){function l(a,b){g.$watch(a,function(a){"undefined"!=typeof a&&(g[b]=a)})}function m(c,d){if(!t(c)&&!a.equals(c,d)){var e=b||g.chartType;e&&(v&&v.destroy(),n(e))}}function n(b){if(u(b,g)&&0===j[0].clientHeight&&0===w.clientHeight)return d(function(){n(b)},50,!1);if(g.data&&g.data.length){g.getColour="function"==typeof g.getColour?g.getColour:k,g.colours=i(b,g);var e=j[0],f=e.getContext("2d"),l=Array.isArray(g.data[0])?p(g.labels,g.data,g.series||[],g.colours):q(g.labels,g.data,g.colours),m=a.extend({},c.getOptions(b),g.options);v=new c.Chart(f)[b](l,m),g.$emit("create",v),e.onclick=g.click?h(g,v,"click",!1):a.noop,e.onmousemove=g.hover?h(g,v,"hover",!0):a.noop,g.legend&&"false"!==g.legend&&r(j,v)}}function o(a){if("undefined"!=typeof console&&"test"!==c.getOptions().env){var b="function"==typeof console.warn?console.warn:console.log;g[a]&&b.call(console,'"%s" is deprecated and will be removed in a future version. Please use "chart-%s" instead.',a,a)}}var v,w=document.createElement("div");w.className="chart-container",j.replaceWith(w),w.appendChild(j[0]),e&&window.G_vmlCanvasManager.initElement(j[0]),["data","labels","options","series","colours","legend","click","hover"].forEach(o),l("chartData","data"),l("chartLabels","labels"),l("chartOptions","options"),l("chartSeries","series"),l("chartColours","colours"),l("chartLegend","legend"),l("chartClick","click"),l("chartHover","hover"),g.$watch("data",function(a,c){if(a&&a.length&&(!Array.isArray(a[0])||a[0].length)){var d=b||g.chartType;if(d){if(v){if(f(a,c))return s(v,a,g,j);v.destroy()}n(d)}}},!0),g.$watch("series",m,!0),g.$watch("labels",m,!0),g.$watch("options",m,!0),g.$watch("colours",m,!0),g.$watch("chartType",function(b,c){t(b)||a.equals(b,c)||(v&&v.destroy(),n(b))}),g.$on("$destroy",function(){v&&v.destroy()})}}}}b.defaults.global.responsive=!0,b.defaults.global.multiTooltipTemplate="<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>",b.defaults.global.colours=["#97BBCD","#DCDCDC","#F7464A","#46BFBD","#FDB45C","#949FB1","#4D5360"];var e="object"==typeof window.G_vmlCanvasManager&&null!==window.G_vmlCanvasManager&&"function"==typeof window.G_vmlCanvasManager.initElement;return e&&(b.defaults.global.animation=!1),a.module("chart.js",[]).provider("ChartJs",c).factory("ChartJsFactory",["ChartJs","$timeout",d]).directive("chartBase",["ChartJsFactory",function(a){return new a}]).directive("chartLine",["ChartJsFactory",function(a){return new a("Line")}]).directive("chartBar",["ChartJsFactory",function(a){return new a("Bar")}]).directive("chartRadar",["ChartJsFactory",function(a){return new a("Radar")}]).directive("chartDoughnut",["ChartJsFactory",function(a){return new a("Doughnut")}]).directive("chartPie",["ChartJsFactory",function(a){return new a("Pie")}]).directive("chartPolarArea",["ChartJsFactory",function(a){return new a("PolarArea")}])}),function(a,b,c){"use strict";function d(a,c,d){function e(a,d,e){var g,h;e=e||{},h=e.expires,g=b.isDefined(e.path)?e.path:f,b.isUndefined(d)&&(h="Thu, 01 Jan 1970 00:00:00 GMT",d=""),b.isString(h)&&(h=new Date(h));var i=encodeURIComponent(a)+"="+encodeURIComponent(d);i+=g?";path="+g:"",i+=e.domain?";domain="+e.domain:"",i+=h?";expires="+h.toUTCString():"",i+=e.secure?";secure":"";var j=i.length+1;return j>4096&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+j+" > 4096 bytes)!"),i}var f=d.baseHref(),g=a[0];return function(a,b,c){g.cookie=e(a,b,c)}}b.module("ngCookies",["ng"]).provider("$cookies",[function(){function a(a){return a?b.extend({},d,a):d}var d=this.defaults={};this.$get=["$$cookieReader","$$cookieWriter",function(d,e){return{get:function(a){return d()[a]},getObject:function(a){var c=this.get(a);return c?b.fromJson(c):c},getAll:function(){return d()},put:function(b,c,d){e(b,c,a(d))},putObject:function(a,c,d){this.put(a,b.toJson(c),d)},remove:function(b,d){e(b,c,a(d))}}}]}]),b.module("ngCookies").factory("$cookieStore",["$cookies",function(a){return{get:function(b){return a.getObject(b)},put:function(b,c){a.putObject(b,c)},remove:function(b){a.remove(b)}}}]),d.$inject=["$document","$log","$browser"],b.module("ngCookies").provider("$$cookieWriter",function(){this.$get=d})}(window,window.angular),!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):"object"==typeof exports?exports["angular-file-upload"]=b():a["angular-file-upload"]=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";var d=function(a){return a&&a.__esModule?a["default"]:a},e=d(c(2)),f=d(c(3)),g=d(c(4)),h=d(c(5)),i=d(c(6)),j=d(c(7)),k=d(c(1)),l=d(c(8)),m=d(c(9)),n=d(c(10)),o=d(c(11)),p=d(c(12));angular.module(e.name,[]).value("fileUploaderOptions",f).factory("FileUploader",g).factory("FileLikeObject",h).factory("FileItem",i).factory("FileDirective",j).factory("FileSelect",k).factory("FileDrop",l).factory("FileOver",m).directive("nvFileSelect",n).directive("nvFileDrop",o).directive("nvFileOver",p).run(["FileUploader","FileLikeObject","FileItem","FileDirective","FileSelect","FileDrop","FileOver",function(a,b,c,d,e,f,g){a.FileLikeObject=b,a.FileItem=c,a.FileDirective=d,a.FileSelect=e,a.FileDrop=f,a.FileOver=g}])},function(a,b,c){"use strict";var d=function(a){return a&&a.__esModule?a["default"]:a},e=function(){function a(a,b){for(var c in b){var d=b[c];d.configurable=!0,d.value&&(d.writable=!0)}Object.defineProperties(a,b)}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),f=function j(a,b,c){var d=Object.getOwnPropertyDescriptor(a,b);if(void 0===d){var e=Object.getPrototypeOf(a);return null===e?void 0:j(e,b,c)}if("value"in d&&d.writable)return d.value;var f=d.get;return void 0===f?void 0:f.call(c)},g=function(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(a.__proto__=b)},h=function(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")},i=(d(c(2)),angular.extend);a.exports=function(a){var b=function(a){function b(a){h(this,b);var c=i(a,{events:{$destroy:"destroy",change:"onChange"},prop:"select"});f(Object.getPrototypeOf(b.prototype),"constructor",this).call(this,c),this.uploader.isHTML5||this.element.removeAttr("multiple"),this.element.prop("value",null)}return g(b,a),e(b,{getOptions:{value:function(){}},getFilters:{value:function(){}},isEmptyAfterSelection:{value:function(){return!!this.element.attr("multiple")}},onChange:{value:function(){var a=this.uploader.isHTML5?this.element[0].files:this.element[0],b=this.getOptions(),c=this.getFilters();this.uploader.isHTML5||this.destroy(),this.uploader.addToQueue(a,b,c),this.isEmptyAfterSelection()&&(this.element.prop("value",null),this.element.replaceWith(this.element=this.element.clone(!0)))}}}),b}(a);return b},a.exports.$inject=["FileDirective"]},function(a,b){a.exports={name:"angularFileUpload"}},function(a,b){"use strict";a.exports={url:"/",alias:"file",headers:{},queue:[],progress:0,autoUpload:!1,removeAfterUpload:!1,method:"POST",filters:[],formData:[],queueLimit:Number.MAX_VALUE,withCredentials:!1}},function(a,b,c){"use strict";var d=function(a){return a&&a.__esModule?a["default"]:a},e=function(){function a(a,b){for(var c in b){var d=b[c];d.configurable=!0,d.value&&(d.writable=!0)}Object.defineProperties(a,b)}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),f=function(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")},g=(d(c(2)),angular.copy),h=angular.extend,i=angular.forEach,j=angular.isObject,k=angular.isNumber,l=angular.isDefined,m=angular.isArray,n=angular.element;a.exports=function(a,b,c,d,o,p){var q=d.File,r=d.FormData,s=function(){function d(b){f(this,d);var c=g(a);h(this,c,b,{isUploading:!1,_nextIndex:0,_failFilterIndex:-1,_directives:{select:[],drop:[],over:[]}}),this.filters.unshift({name:"queueLimit",fn:this._queueLimitFilter}),this.filters.unshift({name:"folder",fn:this._folderFilter})}return e(d,{addToQueue:{value:function(a,b,c){var d=this,e=this.isArrayLikeObject(a)?a:[a],f=this._getFilters(c),g=this.queue.length,h=[];i(e,function(a){var c=new o(a);if(d._isValidFile(c,f,b)){var e=new p(d,a,b);h.push(e),d.queue.push(e),d._onAfterAddingFile(e)}else{var g=f[d._failFilterIndex];d._onWhenAddingFileFailed(c,g,b)}}),this.queue.length!==g&&(this._onAfterAddingAll(h),this.progress=this._getTotalProgress()),this._render(),this.autoUpload&&this.uploadAll()}},removeFromQueue:{value:function(a){var b=this.getIndexOfItem(a),c=this.queue[b];c.isUploading&&c.cancel(),this.queue.splice(b,1),c._destroy(),this.progress=this._getTotalProgress()}},clearQueue:{value:function(){for(;this.queue.length;)this.queue[0].remove();this.progress=0}},uploadItem:{value:function(a){var b=this.getIndexOfItem(a),c=this.queue[b],d=this.isHTML5?"_xhrTransport":"_iframeTransport";c._prepareToUploading(),this.isUploading||(this.isUploading=!0,this[d](c))}},cancelItem:{value:function(a){var b=this.getIndexOfItem(a),c=this.queue[b],d=this.isHTML5?"_xhr":"_form";c&&c.isUploading&&c[d].abort()}},uploadAll:{value:function(){var a=this.getNotUploadedItems().filter(function(a){return!a.isUploading});a.length&&(i(a,function(a){return a._prepareToUploading()}),a[0].upload())}},cancelAll:{value:function(){var a=this.getNotUploadedItems();i(a,function(a){return a.cancel()})}},isFile:{value:function(a){return this.constructor.isFile(a)}},isFileLikeObject:{value:function(a){return this.constructor.isFileLikeObject(a)}},isArrayLikeObject:{value:function(a){return this.constructor.isArrayLikeObject(a)}},getIndexOfItem:{value:function(a){return k(a)?a:this.queue.indexOf(a)}},getNotUploadedItems:{value:function(){return this.queue.filter(function(a){return!a.isUploaded})}},getReadyItems:{value:function(){return this.queue.filter(function(a){return a.isReady&&!a.isUploading}).sort(function(a,b){return a.index-b.index})}},destroy:{value:function(){var a=this;i(this._directives,function(b){i(a._directives[b],function(a){a.destroy()})})}},onAfterAddingAll:{value:function(a){}},onAfterAddingFile:{value:function(a){}},onWhenAddingFileFailed:{value:function(a,b,c){}},onBeforeUploadItem:{value:function(a){}},onProgressItem:{value:function(a,b){}},onProgressAll:{value:function(a){}},onSuccessItem:{value:function(a,b,c,d){}},onErrorItem:{value:function(a,b,c,d){}},onCancelItem:{value:function(a,b,c,d){}},onCompleteItem:{value:function(a,b,c,d){}},onCompleteAll:{value:function(){}},_getTotalProgress:{value:function(a){if(this.removeAfterUpload)return a||0;var b=this.getNotUploadedItems().length,c=b?this.queue.length-b:this.queue.length,d=100/this.queue.length,e=(a||0)*d/100;return Math.round(c*d+e)}},_getFilters:{value:function(a){if(!a)return this.filters;if(m(a))return a;var b=a.match(/[^\s,]+/g);return this.filters.filter(function(a){return-1!==b.indexOf(a.name)})}},_render:{value:function(){b.$$phase||b.$apply()}},_folderFilter:{value:function(a){return!(!a.size&&!a.type)}},_queueLimitFilter:{value:function(){return this.queue.length<this.queueLimit}},_isValidFile:{value:function(a,b,c){var d=this;return this._failFilterIndex=-1,b.length?b.every(function(b){return d._failFilterIndex++,b.fn.call(d,a,c)}):!0}},_isSuccessCode:{value:function(a){return a>=200&&300>a||304===a}},_transformResponse:{value:function(a,b){var d=this._headersGetter(b);return i(c.defaults.transformResponse,function(b){a=b(a,d)}),a}},_parseHeaders:{value:function(a){var b,c,d,e={};return a?(i(a.split("\n"),function(a){d=a.indexOf(":"),b=a.slice(0,d).trim().toLowerCase(),c=a.slice(d+1).trim(),b&&(e[b]=e[b]?e[b]+", "+c:c)}),e):e}},_headersGetter:{value:function(a){return function(b){return b?a[b.toLowerCase()]||null:a}}},_xhrTransport:{value:function(a){var b=this,c=a._xhr=new XMLHttpRequest,d=new r;if(this._onBeforeUploadItem(a),i(a.formData,function(a){i(a,function(a,b){d.append(b,a)})}),"number"!=typeof a._file.size)throw new TypeError("The file specified is no longer valid");d.append(a.alias,a._file,a.file.name),c.upload.onprogress=function(c){var d=Math.round(c.lengthComputable?100*c.loaded/c.total:0);b._onProgressItem(a,d)},c.onload=function(){var d=b._parseHeaders(c.getAllResponseHeaders()),e=b._transformResponse(c.response,d),f=b._isSuccessCode(c.status)?"Success":"Error",g="_on"+f+"Item";b[g](a,e,c.status,d),b._onCompleteItem(a,e,c.status,d)},c.onerror=function(){var d=b._parseHeaders(c.getAllResponseHeaders()),e=b._transformResponse(c.response,d);b._onErrorItem(a,e,c.status,d),b._onCompleteItem(a,e,c.status,d)},c.onabort=function(){var d=b._parseHeaders(c.getAllResponseHeaders()),e=b._transformResponse(c.response,d);b._onCancelItem(a,e,c.status,d),b._onCompleteItem(a,e,c.status,d)},c.open(a.method,a.url,!0),c.withCredentials=a.withCredentials,i(a.headers,function(a,b){c.setRequestHeader(b,a)}),c.send(d),this._render()}},_iframeTransport:{value:function(a){var b=this,c=n('<form style="display: none;" />'),d=n('<iframe name="iframeTransport'+Date.now()+'">'),e=a._input;a._form&&a._form.replaceWith(e),a._form=c,this._onBeforeUploadItem(a),e.prop("name",a.alias),i(a.formData,function(a){i(a,function(a,b){var d=n('<input type="hidden" name="'+b+'" />');d.val(a),c.append(d)})}),c.prop({action:a.url,method:"POST",target:d.prop("name"),enctype:"multipart/form-data",encoding:"multipart/form-data"}),d.bind("load",function(){var c="",e=200;try{c=d[0].contentDocument.body.innerHTML}catch(f){e=500}var g={response:c,status:e,dummy:!0},h={},i=b._transformResponse(g.response,h);b._onSuccessItem(a,i,g.status,h),b._onCompleteItem(a,i,g.status,h)}),c.abort=function(){var f,g={status:0,dummy:!0},h={};d.unbind("load").prop("src","javascript:false;"),c.replaceWith(e),b._onCancelItem(a,f,g.status,h),b._onCompleteItem(a,f,g.status,h)},e.after(c),c.append(e).append(d),c[0].submit(),this._render()}},_onWhenAddingFileFailed:{value:function(a,b,c){this.onWhenAddingFileFailed(a,b,c)}},_onAfterAddingFile:{value:function(a){this.onAfterAddingFile(a)}},_onAfterAddingAll:{value:function(a){this.onAfterAddingAll(a)}},_onBeforeUploadItem:{value:function(a){a._onBeforeUpload(),this.onBeforeUploadItem(a)}},_onProgressItem:{value:function(a,b){var c=this._getTotalProgress(b);this.progress=c,a._onProgress(b),this.onProgressItem(a,b),this.onProgressAll(c),this._render()}},_onSuccessItem:{value:function(a,b,c,d){a._onSuccess(b,c,d),this.onSuccessItem(a,b,c,d)}},_onErrorItem:{value:function(a,b,c,d){a._onError(b,c,d),this.onErrorItem(a,b,c,d)}},_onCancelItem:{value:function(a,b,c,d){a._onCancel(b,c,d),this.onCancelItem(a,b,c,d)}},_onCompleteItem:{value:function(a,b,c,d){a._onComplete(b,c,d),this.onCompleteItem(a,b,c,d);var e=this.getReadyItems()[0];return this.isUploading=!1,l(e)?void e.upload():(this.onCompleteAll(),this.progress=this._getTotalProgress(),void this._render())}}},{isFile:{value:function(a){return q&&a instanceof q}},isFileLikeObject:{value:function(a){return a instanceof o}},isArrayLikeObject:{value:function(a){return j(a)&&"length"in a}},inherit:{value:function(a,b){a.prototype=Object.create(b.prototype),a.prototype.constructor=a,a.super_=b}}}),d}();return s.prototype.isHTML5=!(!q||!r),s.isHTML5=s.prototype.isHTML5,s},a.exports.$inject=["fileUploaderOptions","$rootScope","$http","$window","FileLikeObject","FileItem"]},function(a,b,c){"use strict";var d=function(a){return a&&a.__esModule?a["default"]:a},e=function(){function a(a,b){for(var c in b){var d=b[c];d.configurable=!0,d.value&&(d.writable=!0)}Object.defineProperties(a,b)}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),f=function(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")},g=(d(c(2)),angular.copy),h=angular.isElement,i=angular.isString;a.exports=function(){var a=function(){function a(b){f(this,a);var c=h(b),d=c?b.value:b,e=i(d)?"FakePath":"Object",g="_createFrom"+e;this[g](d)}return e(a,{_createFromFakePath:{value:function(a){this.lastModifiedDate=null,this.size=null,this.type="like/"+a.slice(a.lastIndexOf(".")+1).toLowerCase(),this.name=a.slice(a.lastIndexOf("/")+a.lastIndexOf("\\")+2)}},_createFromObject:{value:function(a){this.lastModifiedDate=g(a.lastModifiedDate),this.size=a.size,this.type=a.type,this.name=a.name}}}),a}();return a},a.exports.$inject=[]},function(a,b,c){"use strict";var d=function(a){return a&&a.__esModule?a["default"]:a},e=function(){function a(a,b){for(var c in b){var d=b[c];d.configurable=!0,d.value&&(d.writable=!0)}Object.defineProperties(a,b)}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),f=function(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")},g=(d(c(2)),angular.copy),h=angular.extend,i=angular.element,j=angular.isElement;a.exports=function(a,b){var c=function(){function c(a,d,e){f(this,c);var k=j(d),l=k?i(d):null,m=k?null:d;h(this,{url:a.url,alias:a.alias,headers:g(a.headers),formData:g(a.formData),removeAfterUpload:a.removeAfterUpload,withCredentials:a.withCredentials,method:a.method},e,{uploader:a,file:new b(d),isReady:!1,isUploading:!1,isUploaded:!1,isSuccess:!1,isCancel:!1,isError:!1,progress:0,index:null,_file:m,_input:l}),l&&this._replaceNode(l)}return e(c,{upload:{value:function(){try{this.uploader.uploadItem(this)}catch(a){this.uploader._onCompleteItem(this,"",0,[]),this.uploader._onErrorItem(this,"",0,[])}}},cancel:{value:function(){this.uploader.cancelItem(this)}},remove:{value:function(){this.uploader.removeFromQueue(this)}},onBeforeUpload:{value:function(){}},onProgress:{value:function(a){}},onSuccess:{value:function(a,b,c){}},onError:{value:function(a,b,c){}},onCancel:{value:function(a,b,c){}},onComplete:{value:function(a,b,c){}},_onBeforeUpload:{value:function(){this.isReady=!0,this.isUploading=!0,this.isUploaded=!1,this.isSuccess=!1,this.isCancel=!1,this.isError=!1,this.progress=0,this.onBeforeUpload()}},_onProgress:{value:function(a){this.progress=a,this.onProgress(a)}},_onSuccess:{value:function(a,b,c){this.isReady=!1,this.isUploading=!1,this.isUploaded=!0,this.isSuccess=!0,this.isCancel=!1,this.isError=!1,this.progress=100,this.index=null,this.onSuccess(a,b,c)}},_onError:{value:function(a,b,c){this.isReady=!1,this.isUploading=!1,this.isUploaded=!0,this.isSuccess=!1,this.isCancel=!1,this.isError=!0,this.progress=0,this.index=null,this.onError(a,b,c)}},_onCancel:{value:function(a,b,c){this.isReady=!1,this.isUploading=!1,this.isUploaded=!1,this.isSuccess=!1,this.isCancel=!0,this.isError=!1,this.progress=0,this.index=null,this.onCancel(a,b,c)}},_onComplete:{value:function(a,b,c){this.onComplete(a,b,c),this.removeAfterUpload&&this.remove()}},_destroy:{value:function(){this._input&&this._input.remove(),this._form&&this._form.remove(),delete this._form,delete this._input}},_prepareToUploading:{value:function(){this.index=this.index||++this.uploader._nextIndex,this.isReady=!0}},_replaceNode:{value:function(b){var c=a(b.clone())(b.scope());c.prop("value",null),b.css("display","none"),b.after(c)}}}),c}();return c},a.exports.$inject=["$compile","FileLikeObject"]},function(a,b,c){"use strict";var d=function(a){return a&&a.__esModule?a["default"]:a},e=function(){function a(a,b){for(var c in b){var d=b[c];d.configurable=!0,d.value&&(d.writable=!0)}Object.defineProperties(a,b)}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),f=function(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")},g=(d(c(2)),angular.extend);a.exports=function(){var a=function(){function a(b){f(this,a),g(this,b),this.uploader._directives[this.prop].push(this),this._saveLinks(),this.bind()}return e(a,{bind:{value:function(){for(var a in this.events){var b=this.events[a];this.element.bind(a,this[b])}}},unbind:{value:function(){for(var a in this.events)this.element.unbind(a,this.events[a])}},destroy:{value:function(){
+var a=this.uploader._directives[this.prop].indexOf(this);this.uploader._directives[this.prop].splice(a,1),this.unbind()}},_saveLinks:{value:function(){for(var a in this.events){var b=this.events[a];this[b]=this[b].bind(this)}}}}),a}();return a.prototype.events={},a},a.exports.$inject=[]},function(a,b,c){"use strict";var d=function(a){return a&&a.__esModule?a["default"]:a},e=function(){function a(a,b){for(var c in b){var d=b[c];d.configurable=!0,d.value&&(d.writable=!0)}Object.defineProperties(a,b)}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),f=function k(a,b,c){var d=Object.getOwnPropertyDescriptor(a,b);if(void 0===d){var e=Object.getPrototypeOf(a);return null===e?void 0:k(e,b,c)}if("value"in d&&d.writable)return d.value;var f=d.get;return void 0===f?void 0:f.call(c)},g=function(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(a.__proto__=b)},h=function(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")},i=(d(c(2)),angular.extend),j=angular.forEach;a.exports=function(a){var b=function(a){function b(a){h(this,b);var c=i(a,{events:{$destroy:"destroy",drop:"onDrop",dragover:"onDragOver",dragleave:"onDragLeave"},prop:"drop"});f(Object.getPrototypeOf(b.prototype),"constructor",this).call(this,c)}return g(b,a),e(b,{getOptions:{value:function(){}},getFilters:{value:function(){}},onDrop:{value:function(a){var b=this._getTransfer(a);if(b){var c=this.getOptions(),d=this.getFilters();this._preventAndStop(a),j(this.uploader._directives.over,this._removeOverClass,this),this.uploader.addToQueue(b.files,c,d)}}},onDragOver:{value:function(a){var b=this._getTransfer(a);this._haveFiles(b.types)&&(b.dropEffect="copy",this._preventAndStop(a),j(this.uploader._directives.over,this._addOverClass,this))}},onDragLeave:{value:function(a){a.currentTarget!==this.element[0]&&(this._preventAndStop(a),j(this.uploader._directives.over,this._removeOverClass,this))}},_getTransfer:{value:function(a){return a.dataTransfer?a.dataTransfer:a.originalEvent.dataTransfer}},_preventAndStop:{value:function(a){a.preventDefault(),a.stopPropagation()}},_haveFiles:{value:function(a){return a?a.indexOf?-1!==a.indexOf("Files"):a.contains?a.contains("Files"):!1:!1}},_addOverClass:{value:function(a){a.addOverClass()}},_removeOverClass:{value:function(a){a.removeOverClass()}}}),b}(a);return b},a.exports.$inject=["FileDirective"]},function(a,b,c){"use strict";var d=function(a){return a&&a.__esModule?a["default"]:a},e=function(){function a(a,b){for(var c in b){var d=b[c];d.configurable=!0,d.value&&(d.writable=!0)}Object.defineProperties(a,b)}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),f=function j(a,b,c){var d=Object.getOwnPropertyDescriptor(a,b);if(void 0===d){var e=Object.getPrototypeOf(a);return null===e?void 0:j(e,b,c)}if("value"in d&&d.writable)return d.value;var f=d.get;return void 0===f?void 0:f.call(c)},g=function(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(a.__proto__=b)},h=function(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")},i=(d(c(2)),angular.extend);a.exports=function(a){var b=function(a){function b(a){h(this,b);var c=i(a,{events:{$destroy:"destroy"},prop:"over",overClass:"nv-file-over"});f(Object.getPrototypeOf(b.prototype),"constructor",this).call(this,c)}return g(b,a),e(b,{addOverClass:{value:function(){this.element.addClass(this.getOverClass())}},removeOverClass:{value:function(){this.element.removeClass(this.getOverClass())}},getOverClass:{value:function(){return this.overClass}}}),b}(a);return b},a.exports.$inject=["FileDirective"]},function(a,b,c){"use strict";var d=function(a){return a&&a.__esModule?a["default"]:a};d(c(2)),a.exports=function(a,b,c){return{link:function(d,e,f){var g=d.$eval(f.uploader);if(!(g instanceof b))throw new TypeError('"Uploader" must be an instance of FileUploader');var h=new c({uploader:g,element:e});h.getOptions=a(f.options).bind(h,d),h.getFilters=function(){return f.filters}}}},a.exports.$inject=["$parse","FileUploader","FileSelect"]},function(a,b,c){"use strict";var d=function(a){return a&&a.__esModule?a["default"]:a};d(c(2)),a.exports=function(a,b,c){return{link:function(d,e,f){var g=d.$eval(f.uploader);if(!(g instanceof b))throw new TypeError('"Uploader" must be an instance of FileUploader');if(g.isHTML5){var h=new c({uploader:g,element:e});h.getOptions=a(f.options).bind(h,d),h.getFilters=function(){return f.filters}}}}},a.exports.$inject=["$parse","FileUploader","FileDrop"]},function(a,b,c){"use strict";var d=function(a){return a&&a.__esModule?a["default"]:a};d(c(2)),a.exports=function(a,b){return{link:function(c,d,e){var f=c.$eval(e.uploader);if(!(f instanceof a))throw new TypeError('"Uploader" must be an instance of FileUploader');var g=new b({uploader:f,element:d});g.getOverClass=function(){return e.overClass||g.overClass}}}},a.exports.$inject=["FileUploader","FileOver"]}])}),!function(a,b,c){"use strict";function d(a){return D(a)?a:Object.keys(a).map(function(b){return a[b]})}function e(a){return null===a}function f(a,b){var d=Object.keys(a);return-1==d.map(function(d){return b[d]!==c&&b[d]==a[d]}).indexOf(!1)}function g(a,b){if(""===b)return a;var c=a.indexOf(b.charAt(0));return-1===c?!1:g(a.substr(c+1),b.substr(1))}function h(a,b,c){var d=0;return a.filter(function(a){var e=x(c)?b>d&&c(a):b>d;return d=e?d+1:d,e})}function i(a,b,c){return c.round(a*c.pow(10,b))/c.pow(10,b)}function j(a,b,c){b=b||[];var d=Object.keys(a);return d.forEach(function(d){if(C(a[d])&&!D(a[d])){var e=c?c+"."+d:c;j(a[d],b,e||d)}else{var f=c?c+"."+d:d;b.push(f)}}),b}function k(a){return a&&a.$evalAsync&&a.$watch}function l(){return function(a,b){return a>b}}function m(){return function(a,b){return a>=b}}function n(){return function(a,b){return b>a}}function o(){return function(a,b){return b>=a}}function p(){return function(a,b){return a==b}}function q(){return function(a,b){return a!=b}}function r(){return function(a,b){return a===b}}function s(){return function(a,b){return a!==b}}function t(a){return function(b,c){return b=C(b)?d(b):b,!D(b)||y(c)?!1:b.some(function(b){return C(b)||z(c)?a(c)(b):b===c})}}function u(a,b){return b=b||0,b>=a.length?a:D(a[b])?u(a.slice(0,b).concat(a[b],a.slice(b+1)),b):u(a,b+1)}function v(a){return function(b,c){function e(a,b){return y(b)?!1:a.some(function(a){return H(a,b)})}if(b=C(b)?d(b):b,!D(b))return b;var f=[],g=a(c);return y(c)?b.filter(function(a,b,c){return c.indexOf(a)===b}):b.filter(function(a){var b=g(a);return e(f,b)?!1:(f.push(b),!0)})}}function w(a,b,c){return b?a+c+w(a,--b,c):a}var x=b.isDefined,y=b.isUndefined,z=b.isFunction,A=b.isString,B=b.isNumber,C=b.isObject,D=b.isArray,E=b.forEach,F=b.extend,G=b.copy,H=b.equals;String.prototype.contains||(String.prototype.contains=function(){return-1!==String.prototype.indexOf.apply(this,arguments)}),b.module("a8m.angular",[]).filter("isUndefined",function(){return function(a){return b.isUndefined(a)}}).filter("isDefined",function(){return function(a){return b.isDefined(a)}}).filter("isFunction",function(){return function(a){return b.isFunction(a)}}).filter("isString",function(){return function(a){return b.isString(a)}}).filter("isNumber",function(){return function(a){return b.isNumber(a)}}).filter("isArray",function(){return function(a){return b.isArray(a)}}).filter("isObject",function(){return function(a){return b.isObject(a)}}).filter("isEqual",function(){return function(a,c){return b.equals(a,c)}}),b.module("a8m.conditions",[]).filter({isGreaterThan:l,">":l,isGreaterThanOrEqualTo:m,">=":m,isLessThan:n,"<":n,isLessThanOrEqualTo:o,"<=":o,isEqualTo:p,"==":p,isNotEqualTo:q,"!=":q,isIdenticalTo:r,"===":r,isNotIdenticalTo:s,"!==":s}),b.module("a8m.is-null",[]).filter("isNull",function(){return function(a){return e(a)}}),b.module("a8m.after-where",[]).filter("afterWhere",function(){return function(a,b){if(a=C(a)?d(a):a,!D(a)||y(b))return a;var c=a.map(function(a){return f(b,a)}).indexOf(!0);return a.slice(-1===c?0:c)}}),b.module("a8m.after",[]).filter("after",function(){return function(a,b){return a=C(a)?d(a):a,D(a)?a.slice(b):a}}),b.module("a8m.before-where",[]).filter("beforeWhere",function(){return function(a,b){if(a=C(a)?d(a):a,!D(a)||y(b))return a;var c=a.map(function(a){return f(b,a)}).indexOf(!0);return a.slice(0,-1===c?a.length:++c)}}),b.module("a8m.before",[]).filter("before",function(){return function(a,b){return a=C(a)?d(a):a,D(a)?a.slice(0,b?--b:b):a}}),b.module("a8m.chunk-by",["a8m.filter-watcher"]).filter("chunkBy",["filterWatcher",function(a){return function(b,c,d){function e(a,b){for(var c=[];a--;)c[a]=b;return c}function f(a,b,c){return D(a)?a.map(function(a,d,f){return d*=b,a=f.slice(d,d+b),!y(c)&&a.length<b?a.concat(e(b-a.length,c)):a}).slice(0,Math.ceil(a.length/b)):a}return a.isMemoized("chunkBy",arguments)||a.memoize("chunkBy",arguments,this,f(b,c,d))}}]),b.module("a8m.concat",[]).filter("concat",[function(){return function(a,b){if(y(b))return a;if(D(a))return C(b)?a.concat(d(b)):a.concat(b);if(C(a)){var c=d(a);return C(b)?c.concat(d(b)):c.concat(b)}return a}}]),b.module("a8m.contains",[]).filter({contains:["$parse",t],some:["$parse",t]}),b.module("a8m.count-by",[]).filter("countBy",["$parse",function(a){return function(b,c){var e,f={},g=a(c);return b=C(b)?d(b):b,!D(b)||y(c)?b:(b.forEach(function(a){e=g(a),f[e]||(f[e]=0),f[e]++}),f)}}]),b.module("a8m.defaults",[]).filter("defaults",["$parse",function(a){return function(b,c){if(b=C(b)?d(b):b,!D(b)||!C(c))return b;var e=j(c);return b.forEach(function(b){e.forEach(function(d){var e=a(d),f=e.assign;y(e(b))&&f(b,e(c))})}),b}}]),b.module("a8m.every",[]).filter("every",["$parse",function(a){return function(b,c){return b=C(b)?d(b):b,!D(b)||y(c)?!0:b.every(function(b){return C(b)||z(c)?a(c)(b):b===c})}}]),b.module("a8m.filter-by",[]).filter("filterBy",["$parse",function(a){return function(b,e,f){var g;return f=A(f)||B(f)?String(f).toLowerCase():c,b=C(b)?d(b):b,!D(b)||y(f)?b:b.filter(function(b){return e.some(function(c){if(~c.indexOf("+")){var d=c.replace(new RegExp("\\s","g"),"").split("+");g=d.reduce(function(c,d,e){return 1===e?a(c)(b)+" "+a(d)(b):c+" "+a(d)(b)})}else g=a(c)(b);return A(g)||B(g)?String(g).toLowerCase().contains(f):!1})})}}]),b.module("a8m.first",[]).filter("first",["$parse",function(a){return function(b){var e,f,g;return b=C(b)?d(b):b,D(b)?(g=Array.prototype.slice.call(arguments,1),e=B(g[0])?g[0]:1,f=B(g[0])?B(g[1])?c:g[1]:g[0],g.length?h(b,e,f?a(f):f):b[0]):b}}]),b.module("a8m.flatten",[]).filter("flatten",function(){return function(a,b){return b=b||!1,a=C(a)?d(a):a,D(a)?b?[].concat.apply([],a):u(a,0):a}}),b.module("a8m.fuzzy-by",[]).filter("fuzzyBy",["$parse",function(a){return function(b,c,e,f){var h,i,j=f||!1;return b=C(b)?d(b):b,!D(b)||y(c)||y(e)?b:(i=a(c),b.filter(function(a){return h=i(a),A(h)?(h=j?h:h.toLowerCase(),e=j?e:e.toLowerCase(),g(h,e)!==!1):!1}))}}]),b.module("a8m.fuzzy",[]).filter("fuzzy",function(){return function(a,b,c){function e(a,b){var c,d,e=Object.keys(a);return 0<e.filter(function(e){return c=a[e],d?!0:A(c)?(c=f?c:c.toLowerCase(),d=g(c,b)!==!1):!1}).length}var f=c||!1;return a=C(a)?d(a):a,!D(a)||y(b)?a:(b=f?b:b.toLowerCase(),a.filter(function(a){return A(a)?(a=f?a:a.toLowerCase(),g(a,b)!==!1):C(a)?e(a,b):!1}))}}),b.module("a8m.group-by",["a8m.filter-watcher"]).filter("groupBy",["$parse","filterWatcher",function(a,b){return function(c,d){function e(a,b){var c,d={};return E(a,function(a){c=b(a),d[c]||(d[c]=[]),d[c].push(a)}),d}return!C(c)||y(d)?c:b.isMemoized("groupBy",arguments)||b.memoize("groupBy",arguments,this,e(c,a(d)))}}]),b.module("a8m.is-empty",[]).filter("isEmpty",function(){return function(a){return C(a)?!d(a).length:!a.length}}),b.module("a8m.join",[]).filter("join",function(){return function(a,b){return y(a)||!D(a)?a:(y(b)&&(b=" "),a.join(b))}}),b.module("a8m.last",[]).filter("last",["$parse",function(a){return function(b){var e,f,g,i=G(b);return i=C(i)?d(i):i,D(i)?(g=Array.prototype.slice.call(arguments,1),e=B(g[0])?g[0]:1,f=B(g[0])?B(g[1])?c:g[1]:g[0],g.length?h(i.reverse(),e,f?a(f):f).reverse():i[i.length-1]):i}}]),b.module("a8m.map",[]).filter("map",["$parse",function(a){return function(b,c){return b=C(b)?d(b):b,!D(b)||y(c)?b:b.map(function(b){return a(c)(b)})}}]),b.module("a8m.omit",[]).filter("omit",["$parse",function(a){return function(b,c){return b=C(b)?d(b):b,!D(b)||y(c)?b:b.filter(function(b){return!a(c)(b)})}}]),b.module("a8m.pick",[]).filter("pick",["$parse",function(a){return function(b,c){return b=C(b)?d(b):b,!D(b)||y(c)?b:b.filter(function(b){return a(c)(b)})}}]),b.module("a8m.range",[]).filter("range",function(){return function(a,b){for(var c=0;c<parseInt(b);c++)a.push(c);return a}}),b.module("a8m.remove-with",[]).filter("removeWith",function(){return function(a,b){return y(b)?a:(a=C(a)?d(a):a,a.filter(function(a){return!f(b,a)}))}}),b.module("a8m.remove",[]).filter("remove",function(){return function(a){a=C(a)?d(a):a;var b=Array.prototype.slice.call(arguments,1);return D(a)?a.filter(function(a){return!b.some(function(b){return H(b,a)})}):a}}),b.module("a8m.reverse",[]).filter("reverse",[function(){return function(a){return a=C(a)?d(a):a,A(a)?a.split("").reverse().join(""):D(a)?a.slice().reverse():a}}]),b.module("a8m.search-field",[]).filter("searchField",["$parse",function(a){return function(b){var c,e;b=C(b)?d(b):b;var f=Array.prototype.slice.call(arguments,1);return D(b)&&f.length?b.map(function(b){return e=f.map(function(d){return(c=a(d))(b)}).join(" "),F(b,{searchField:e})}):b}}]),b.module("a8m.to-array",[]).filter("toArray",function(){return function(a,b){return C(a)?b?Object.keys(a).map(function(b){return F(a[b],{$key:b})}):d(a):a}}),b.module("a8m.unique",[]).filter({unique:["$parse",v],uniq:["$parse",v]}),b.module("a8m.where",[]).filter("where",function(){return function(a,b){return y(b)?a:(a=C(a)?d(a):a,a.filter(function(a){return f(b,a)}))}}),b.module("a8m.xor",[]).filter("xor",["$parse",function(a){return function(b,c,e){function f(b,c){var d=a(e);return c.some(function(a){return e?H(d(a),d(b)):H(a,b)})}return e=e||!1,b=C(b)?d(b):b,c=C(c)?d(c):c,D(b)&&D(c)?b.concat(c).filter(function(a){return!(f(a,b)&&f(a,c))}):b}}]),b.module("a8m.math.byteFmt",["a8m.math"]).filter("byteFmt",["$math",function(a){return function(b,c){return B(c)&&isFinite(c)&&c%1===0&&c>=0&&B(b)&&isFinite(b)?1024>b?i(b,c,a)+" B":1048576>b?i(b/1024,c,a)+" KB":1073741824>b?i(b/1048576,c,a)+" MB":i(b/1073741824,c,a)+" GB":"NaN"}}]),b.module("a8m.math.degrees",["a8m.math"]).filter("degrees",["$math",function(a){return function(b,c){if(B(c)&&isFinite(c)&&c%1===0&&c>=0&&B(b)&&isFinite(b)){var d=180*b/a.PI;return a.round(d*a.pow(10,c))/a.pow(10,c)}return"NaN"}}]),b.module("a8m.math.kbFmt",["a8m.math"]).filter("kbFmt",["$math",function(a){return function(b,c){return B(c)&&isFinite(c)&&c%1===0&&c>=0&&B(b)&&isFinite(b)?1024>b?i(b,c,a)+" KB":1048576>b?i(b/1024,c,a)+" MB":i(b/1048576,c,a)+" GB":"NaN"}}]),b.module("a8m.math",[]).factory("$math",["$window",function(a){return a.Math}]),b.module("a8m.math.max",["a8m.math"]).filter("max",["$math","$parse",function(a,b){function c(c,d){var e=c.map(function(a){return b(d)(a)});return e.indexOf(a.max.apply(a,e))}return function(b,d){return D(b)?y(d)?a.max.apply(a,b):b[c(b,d)]:b}}]),b.module("a8m.math.min",["a8m.math"]).filter("min",["$math","$parse",function(a,b){function c(c,d){var e=c.map(function(a){return b(d)(a)});return e.indexOf(a.min.apply(a,e))}return function(b,d){return D(b)?y(d)?a.min.apply(a,b):b[c(b,d)]:b}}]),b.module("a8m.math.percent",["a8m.math"]).filter("percent",["$math","$window",function(a,b){return function(c,d,e){var f=A(c)?b.Number(c):c;return d=d||100,e=e||!1,!B(f)||b.isNaN(f)?c:e?a.round(f/d*100):f/d*100}}]),b.module("a8m.math.radians",["a8m.math"]).filter("radians",["$math",function(a){return function(b,c){if(B(c)&&isFinite(c)&&c%1===0&&c>=0&&B(b)&&isFinite(b)){var d=3.14159265359*b/180;return a.round(d*a.pow(10,c))/a.pow(10,c)}return"NaN"}}]),b.module("a8m.math.radix",[]).filter("radix",function(){return function(a,b){var c=/^[2-9]$|^[1-2]\d$|^3[0-6]$/;return B(a)&&c.test(b)?a.toString(b).toUpperCase():a}}),b.module("a8m.math.shortFmt",["a8m.math"]).filter("shortFmt",["$math",function(a){return function(b,c){return B(c)&&isFinite(c)&&c%1===0&&c>=0&&B(b)&&isFinite(b)?1e3>b?b:1e6>b?i(b/1e3,c,a)+" K":1e9>b?i(b/1e6,c,a)+" M":i(b/1e9,c,a)+" B":"NaN"}}]),b.module("a8m.math.sum",[]).filter("sum",function(){return function(a,b){return D(a)?a.reduce(function(a,b){return a+b},b||0):a}}),b.module("a8m.ends-with",[]).filter("endsWith",function(){return function(a,b,c){var d,e=c||!1;return!A(a)||y(b)?a:(a=e?a:a.toLowerCase(),d=a.length-b.length,-1!==a.indexOf(e?b:b.toLowerCase(),d))}}),b.module("a8m.latinize",[]).filter("latinize",[function(){function a(a){return a.replace(/[^\u0000-\u007E]/g,function(a){return c[a]||a})}for(var b=[{base:"A",letters:"AⒶＡÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",letters:"Ꜳ"},{base:"AE",letters:"ÆǼǢ"},{base:"AO",letters:"Ꜵ"},{base:"AU",letters:"Ꜷ"},{base:"AV",letters:"ꜸꜺ"},{base:"AY",letters:"Ꜽ"},{base:"B",letters:"BⒷＢḂḄḆɃƂƁ"},{base:"C",letters:"CⒸＣĆĈĊČÇḈƇȻꜾ"},{base:"D",letters:"DⒹＤḊĎḌḐḒḎĐƋƊƉꝹ"},{base:"DZ",letters:"ǱǄ"},{base:"Dz",letters:"ǲǅ"},{base:"E",letters:"EⒺＥÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎ"},{base:"F",letters:"FⒻＦḞƑꝻ"},{base:"G",letters:"GⒼＧǴĜḠĞĠǦĢǤƓꞠꝽꝾ"},{base:"H",letters:"HⒽＨĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",letters:"IⒾＩÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ"},{base:"J",letters:"JⒿＪĴɈ"},{base:"K",letters:"KⓀＫḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",letters:"LⓁＬĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",letters:"Ǉ"},{base:"Lj",letters:"ǈ"},{base:"M",letters:"MⓂＭḾṀṂⱮƜ"},{base:"N",letters:"NⓃＮǸŃÑṄŇṆŅṊṈȠƝꞐꞤ"},{base:"NJ",letters:"Ǌ"},{base:"Nj",letters:"ǋ"},{base:"O",letters:"OⓄＯÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ"},{base:"OI",letters:"Ƣ"},{base:"OO",letters:"Ꝏ"},{base:"OU",letters:"Ȣ"},{base:"OE",letters:"Œ"},{base:"oe",letters:"œ"},{base:"P",letters:"PⓅＰṔṖƤⱣꝐꝒꝔ"},{base:"Q",letters:"QⓆＱꝖꝘɊ"},{base:"R",letters:"RⓇＲŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",letters:"SⓈＳẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",letters:"TⓉＴṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"TZ",letters:"Ꜩ"},{base:"U",letters:"UⓊＵÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",letters:"VⓋＶṼṾƲꝞɅ"},{base:"VY",letters:"Ꝡ"},{base:"W",letters:"WⓌＷẀẂŴẆẄẈⱲ"},{base:"X",letters:"XⓍＸẊẌ"},{base:"Y",letters:"YⓎＹỲÝŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",letters:"ZⓏＺŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",letters:"aⓐａẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ"},{base:"aa",letters:"ꜳ"},{base:"ae",letters:"æǽǣ"},{base:"ao",letters:"ꜵ"},{base:"au",letters:"ꜷ"},{base:"av",letters:"ꜹꜻ"},{base:"ay",letters:"ꜽ"},{base:"b",letters:"bⓑｂḃḅḇƀƃɓ"},{base:"c",letters:"cⓒｃćĉċčçḉƈȼꜿↄ"},{base:"d",letters:"dⓓｄḋďḍḑḓḏđƌɖɗꝺ"},{base:"dz",letters:"ǳǆ"},{base:"e",letters:"eⓔｅèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ"},{base:"f",letters:"fⓕｆḟƒꝼ"},{base:"g",letters:"gⓖｇǵĝḡğġǧģǥɠꞡᵹꝿ"},{base:"h",letters:"hⓗｈĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",letters:"ƕ"},{base:"i",letters:"iⓘｉìíîĩīĭïḯỉǐȉȋịįḭɨı"},{base:"j",letters:"jⓙｊĵǰɉ"},{base:"k",letters:"kⓚｋḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",letters:"lⓛｌŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ"},{base:"lj",letters:"ǉ"},{base:"m",letters:"mⓜｍḿṁṃɱɯ"},{base:"n",letters:"nⓝｎǹńñṅňṇņṋṉƞɲŉꞑꞥ"},{base:"nj",letters:"ǌ"},{base:"o",letters:"oⓞｏòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔꝋꝍɵ"},{base:"oi",letters:"ƣ"},{base:"ou",letters:"ȣ"},{base:"oo",letters:"ꝏ"},{base:"p",letters:"pⓟｐṕṗƥᵽꝑꝓꝕ"},{base:"q",letters:"qⓠｑɋꝗꝙ"},{base:"r",letters:"rⓡｒŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",letters:"sⓢｓßśṥŝṡšṧṣṩșşȿꞩꞅẛ"},{base:"t",letters:"tⓣｔṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"tz",letters:"ꜩ"},{base:"u",letters:"uⓤｕùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",letters:"vⓥｖṽṿʋꝟʌ"},{base:"vy",letters:"ꝡ"},{base:"w",letters:"wⓦｗẁẃŵẇẅẘẉⱳ"},{base:"x",letters:"xⓧｘẋẍ"},{base:"y",letters:"yⓨｙỳýŷỹȳẏÿỷẙỵƴɏỿ"},{base:"z",letters:"zⓩｚźẑżžẓẕƶȥɀⱬꝣ"}],c={},d=0;d<b.length;d++)for(var e=b[d].letters.split(""),f=0;f<e.length;f++)c[e[f]]=b[d].base;return function(b){return A(b)?a(b):b}}]),b.module("a8m.ltrim",[]).filter("ltrim",function(){return function(a,b){var c=b||"\\s";return A(a)?a.replace(new RegExp("^"+c+"+"),""):a}}),b.module("a8m.match",[]).filter("match",function(){return function(a,b,c){var d=new RegExp(b,c);return A(a)?a.match(d):null}}),b.module("a8m.repeat",[]).filter("repeat",[function(){return function(a,b,c){var d=~~b;return A(a)&&d?w(a,--b,c||""):a}}]),b.module("a8m.rtrim",[]).filter("rtrim",function(){return function(a,b){var c=b||"\\s";return A(a)?a.replace(new RegExp(c+"+$"),""):a}}),b.module("a8m.slugify",[]).filter("slugify",[function(){return function(a,b){var c=y(b)?"-":b;return A(a)?a.toLowerCase().replace(/\s+/g,c):a}}]),b.module("a8m.starts-with",[]).filter("startsWith",function(){return function(a,b,c){var d=c||!1;return!A(a)||y(b)?a:(a=d?a:a.toLowerCase(),!a.indexOf(d?b:b.toLowerCase()))}}),b.module("a8m.stringular",[]).filter("stringular",function(){return function(a){var b=Array.prototype.slice.call(arguments,1);return a.replace(/{(\d+)}/g,function(a,c){return y(b[c])?a:b[c]})}}),b.module("a8m.strip-tags",[]).filter("stripTags",function(){return function(a){return A(a)?a.replace(/<\S[^><]*>/g,""):a}}),b.module("a8m.test",[]).filter("test",function(){return function(a,b,c){var d=new RegExp(b,c);return A(a)?d.test(a):a}}),b.module("a8m.trim",[]).filter("trim",function(){return function(a,b){var c=b||"\\s";return A(a)?a.replace(new RegExp("^"+c+"+|"+c+"+$","g"),""):a}}),b.module("a8m.truncate",[]).filter("truncate",function(){return function(a,b,c,d){return b=y(b)?a.length:b,d=d||!1,c=c||"",!A(a)||a.length<=b?a:a.substring(0,d?-1===a.indexOf(" ",b)?a.length:a.indexOf(" ",b):b)+c}}),b.module("a8m.ucfirst",[]).filter("ucfirst",[function(){return function(a){return A(a)?a.split(" ").map(function(a){return a.charAt(0).toUpperCase()+a.substring(1)}).join(" "):a}}]),b.module("a8m.uri-component-encode",[]).filter("uriComponentEncode",["$window",function(a){return function(b){return A(b)?a.encodeURIComponent(b):b}}]),b.module("a8m.uri-encode",[]).filter("uriEncode",["$window",function(a){return function(b){return A(b)?a.encodeURI(b):b}}]),b.module("a8m.wrap",[]).filter("wrap",function(){return function(a,b,c){return A(a)&&x(b)?[b,a,c||b].join(""):a}}),b.module("a8m.filter-watcher",[]).provider("filterWatcher",function(){this.$get=["$window","$rootScope",function(a,b){function c(b,c){function d(){var b=[];return function(c,d){if(C(d)&&!e(d)){if(~b.indexOf(d))return"[Circular]";b.push(d)}return a==d?"$WINDOW":a.document==d?"$DOCUMENT":k(d)?"$SCOPE":d}}return[b,JSON.stringify(c,d())].join("#").replace(/"/g,"")}function d(a){var b=a.targetScope.$id;E(l[b],function(a){delete j[a]}),delete l[b]}function f(){m(function(){b.$$phase||(j={})},2e3)}function g(a,b){var c=a.$id;return y(l[c])&&(a.$on("$destroy",d),l[c]=[]),l[c].push(b)}function h(a,b){var d=c(a,b);return j[d]}function i(a,b,d,e){var h=c(a,b);return j[h]=e,k(d)?g(d,h):f(),e}var j={},l={},m=a.setTimeout;return{isMemoized:h,memoize:i}}]}),b.module("angular.filter",["a8m.ucfirst","a8m.uri-encode","a8m.uri-component-encode","a8m.slugify","a8m.latinize","a8m.strip-tags","a8m.stringular","a8m.truncate","a8m.starts-with","a8m.ends-with","a8m.wrap","a8m.trim","a8m.ltrim","a8m.rtrim","a8m.repeat","a8m.test","a8m.match","a8m.to-array","a8m.concat","a8m.contains","a8m.unique","a8m.is-empty","a8m.after","a8m.after-where","a8m.before","a8m.before-where","a8m.defaults","a8m.where","a8m.reverse","a8m.remove","a8m.remove-with","a8m.group-by","a8m.count-by","a8m.chunk-by","a8m.search-field","a8m.fuzzy-by","a8m.fuzzy","a8m.omit","a8m.pick","a8m.every","a8m.filter-by","a8m.xor","a8m.map","a8m.first","a8m.last","a8m.flatten","a8m.join","a8m.range","a8m.math","a8m.math.max","a8m.math.min","a8m.math.percent","a8m.math.radix","a8m.math.sum","a8m.math.degrees","a8m.math.radians","a8m.math.byteFmt","a8m.math.kbFmt","a8m.math.shortFmt","a8m.angular","a8m.conditions","a8m.is-null","a8m.filter-watcher"])}(window,window.angular),function(a,b,c){"use strict";var d=b.isDefined,e=b.isUndefined,f=b.isNumber,g=b.isObject,h=b.isArray,i=b.extend,j=b.toJson,k=b.module("LocalStorageModule",[]);k.provider("localStorageService",function(){this.prefix="ls",this.storageType="localStorage",this.cookie={expiry:30,path:"/"},this.notify={setItem:!0,removeItem:!1},this.setPrefix=function(a){return this.prefix=a,this},this.setStorageType=function(a){return this.storageType=a,this},this.setStorageCookie=function(a,b){return this.cookie.expiry=a,this.cookie.path=b,this},this.setStorageCookieDomain=function(a){return this.cookie.domain=a,this},this.setNotify=function(a,b){return this.notify={setItem:a,removeItem:b},this},this.$get=["$rootScope","$window","$document","$parse",function(a,b,c,k){var l,m=this,n=m.prefix,o=m.cookie,p=m.notify,q=m.storageType;c?c[0]&&(c=c[0]):c=document,"."!==n.substr(-1)&&(n=n?n+".":"");var r=function(a){return n+a},s=function(){try{var c=q in b&&null!==b[q],d=r("__"+Math.round(1e7*Math.random()));return c&&(l=b[q],l.setItem(d,""),l.removeItem(d)),c}catch(e){return q="cookie",a.$broadcast("LocalStorageModule.notification.error",e.message),!1}}(),t=function(b,c){if(c=e(c)?null:j(c),!s||"cookie"===m.storageType)return s||a.$broadcast("LocalStorageModule.notification.warning","LOCAL_STORAGE_NOT_SUPPORTED"),p.setItem&&a.$broadcast("LocalStorageModule.notification.setitem",{key:b,newvalue:c,storageType:"cookie"}),z(b,c);try{l&&l.setItem(r(b),c),p.setItem&&a.$broadcast("LocalStorageModule.notification.setitem",{key:b,newvalue:c,storageType:m.storageType})}catch(d){return a.$broadcast("LocalStorageModule.notification.error",d.message),z(b,c)}return!0},u=function(b){if(!s||"cookie"===m.storageType)return s||a.$broadcast("LocalStorageModule.notification.warning","LOCAL_STORAGE_NOT_SUPPORTED"),A(b);var c=l?l.getItem(r(b)):null;if(!c||"null"===c)return null;try{return JSON.parse(c)}catch(d){return c}},v=function(){var b,c;for(b=0;b<arguments.length;b++)if(c=arguments[b],s&&"cookie"!==m.storageType)try{l.removeItem(r(c)),p.removeItem&&a.$broadcast("LocalStorageModule.notification.removeitem",{key:c,storageType:m.storageType})}catch(d){a.$broadcast("LocalStorageModule.notification.error",d.message),B(c)}else s||a.$broadcast("LocalStorageModule.notification.warning","LOCAL_STORAGE_NOT_SUPPORTED"),p.removeItem&&a.$broadcast("LocalStorageModule.notification.removeitem",{key:c,storageType:"cookie"}),B(c)},w=function(){if(!s)return a.$broadcast("LocalStorageModule.notification.warning","LOCAL_STORAGE_NOT_SUPPORTED"),!1;var b=n.length,c=[];for(var d in l)if(d.substr(0,b)===n)try{c.push(d.substr(b))}catch(e){return a.$broadcast("LocalStorageModule.notification.error",e.Description),[]}return c},x=function(b){var c=n?new RegExp("^"+n):new RegExp,d=b?new RegExp(b):new RegExp;if(!s||"cookie"===m.storageType)return s||a.$broadcast("LocalStorageModule.notification.warning","LOCAL_STORAGE_NOT_SUPPORTED"),C();var e=n.length;for(var f in l)if(c.test(f)&&d.test(f.substr(e)))try{v(f.substr(e))}catch(g){return a.$broadcast("LocalStorageModule.notification.error",g.message),C()}return!0},y=function(){try{return b.navigator.cookieEnabled||"cookie"in c&&(c.cookie.length>0||(c.cookie="test").indexOf.call(c.cookie,"test")>-1)}catch(d){return a.$broadcast("LocalStorageModule.notification.error",d.message),!1}}(),z=function(b,d,i){if(e(d))return!1;if((h(d)||g(d))&&(d=j(d)),!y)return a.$broadcast("LocalStorageModule.notification.error","COOKIES_NOT_SUPPORTED"),!1;try{var k="",l=new Date,m="";if(null===d?(l.setTime(l.getTime()+-864e5),k="; expires="+l.toGMTString(),d=""):f(i)&&0!==i?(l.setTime(l.getTime()+24*i*60*60*1e3),k="; expires="+l.toGMTString()):0!==o.expiry&&(l.setTime(l.getTime()+24*o.expiry*60*60*1e3),k="; expires="+l.toGMTString()),b){var n="; path="+o.path;o.domain&&(m="; domain="+o.domain),c.cookie=r(b)+"="+encodeURIComponent(d)+k+n+m}}catch(p){return a.$broadcast("LocalStorageModule.notification.error",p.message),!1}return!0},A=function(b){if(!y)return a.$broadcast("LocalStorageModule.notification.error","COOKIES_NOT_SUPPORTED"),!1;for(var d=c.cookie&&c.cookie.split(";")||[],e=0;e<d.length;e++){for(var f=d[e];" "===f.charAt(0);)f=f.substring(1,f.length);if(0===f.indexOf(r(b)+"=")){var g=decodeURIComponent(f.substring(n.length+b.length+1,f.length));try{return JSON.parse(g)}catch(h){return g}}}return null},B=function(a){z(a,null)},C=function(){for(var a=null,b=n.length,d=c.cookie.split(";"),e=0;e<d.length;e++){for(a=d[e];" "===a.charAt(0);)a=a.substring(1,a.length);var f=a.substring(b,a.indexOf("="));B(f)}},D=function(){return q},E=function(a,b,c,e){e=e||b;var f=u(e);return null===f&&d(c)?f=c:g(f)&&g(c)&&(f=i(c,f)),k(b).assign(a,f),a.$watch(b,function(a){t(e,a)},g(a[b]))},F=function(){for(var a=0,c=b[q],d=0;d<c.length;d++)0===c.key(d).indexOf(n)&&a++;return a};return{isSupported:s,getStorageType:D,set:t,add:t,get:u,keys:w,remove:v,clearAll:x,bind:E,deriveKey:r,length:F,cookie:{isSupported:y,set:z,add:z,get:A,remove:B,clearAll:C}}}]})}(window,window.angular),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="angular-md5"),function(a){a.module("angular-md5",["gdi2290.md5"]),a.module("ngMd5",["gdi2290.md5"]),a.module("gdi2290.md5",["gdi2290.gravatar-filter","gdi2290.md5-service","gdi2290.md5-filter"]),a.module("gdi2290.gravatar-filter",[]).filter("gravatar",["md5",function(a){var b={};return function(c,d){return b[c]||(d=d?a.createHash(d.toString().toLowerCase()):"",b[c]=c?a.createHash(c.toString().toLowerCase()):d),b[c]}}]),a.module("gdi2290.md5-filter",[]).filter("md5",["md5",function(a){return function(b){return b?a.createHash(b.toString().toLowerCase()):b}}]),a.module("gdi2290.md5-service",[]).factory("md5",[function(){var a={createHash:function(a){if(null===a)return null;var b,c,d,e,f,g,h,i,j,k,l=function(a,b){return a<<b|a>>>32-b},m=function(a,b){var c,d,e,f,g;return e=2147483648&a,f=2147483648&b,c=1073741824&a,d=1073741824&b,g=(1073741823&a)+(1073741823&b),c&d?2147483648^g^e^f:c|d?1073741824&g?3221225472^g^e^f:1073741824^g^e^f:g^e^f},n=function(a,b,c){return a&b|~a&c},o=function(a,b,c){return a&c|b&~c},p=function(a,b,c){return a^b^c},q=function(a,b,c){return b^(a|~c)},r=function(a,b,c,d,e,f,g){return a=m(a,m(m(n(b,c,d),e),g)),m(l(a,f),b)},s=function(a,b,c,d,e,f,g){return a=m(a,m(m(o(b,c,d),e),g)),m(l(a,f),b)},t=function(a,b,c,d,e,f,g){return a=m(a,m(m(p(b,c,d),e),g)),m(l(a,f),b)},u=function(a,b,c,d,e,f,g){return a=m(a,m(m(q(b,c,d),e),g)),m(l(a,f),b)},v=function(a){for(var b,c=a.length,d=c+8,e=(d-d%64)/64,f=16*(e+1),g=new Array(f-1),h=0,i=0;c>i;)b=(i-i%4)/4,h=i%4*8,g[b]=g[b]|a.charCodeAt(i)<<h,i++;return b=(i-i%4)/4,h=i%4*8,g[b]=g[b]|128<<h,g[f-2]=c<<3,g[f-1]=c>>>29,g},w=function(a){var b,c,d="",e="";for(c=0;3>=c;c++)b=a>>>8*c&255,e="0"+b.toString(16),d+=e.substr(e.length-2,2);return d},x=[],y=7,z=12,A=17,B=22,C=5,D=9,E=14,F=20,G=4,H=11,I=16,J=23,K=6,L=10,M=15,N=21;for(x=v(a),h=1732584193,i=4023233417,j=2562383102,k=271733878,b=x.length,c=0;b>c;c+=16)d=h,e=i,f=j,g=k,h=r(h,i,j,k,x[c+0],y,3614090360),k=r(k,h,i,j,x[c+1],z,3905402710),j=r(j,k,h,i,x[c+2],A,606105819),i=r(i,j,k,h,x[c+3],B,3250441966),h=r(h,i,j,k,x[c+4],y,4118548399),k=r(k,h,i,j,x[c+5],z,1200080426),j=r(j,k,h,i,x[c+6],A,2821735955),i=r(i,j,k,h,x[c+7],B,4249261313),h=r(h,i,j,k,x[c+8],y,1770035416),k=r(k,h,i,j,x[c+9],z,2336552879),j=r(j,k,h,i,x[c+10],A,4294925233),i=r(i,j,k,h,x[c+11],B,2304563134),h=r(h,i,j,k,x[c+12],y,1804603682),k=r(k,h,i,j,x[c+13],z,4254626195),j=r(j,k,h,i,x[c+14],A,2792965006),i=r(i,j,k,h,x[c+15],B,1236535329),h=s(h,i,j,k,x[c+1],C,4129170786),k=s(k,h,i,j,x[c+6],D,3225465664),j=s(j,k,h,i,x[c+11],E,643717713),i=s(i,j,k,h,x[c+0],F,3921069994),h=s(h,i,j,k,x[c+5],C,3593408605),k=s(k,h,i,j,x[c+10],D,38016083),j=s(j,k,h,i,x[c+15],E,3634488961),i=s(i,j,k,h,x[c+4],F,3889429448),h=s(h,i,j,k,x[c+9],C,568446438),k=s(k,h,i,j,x[c+14],D,3275163606),j=s(j,k,h,i,x[c+3],E,4107603335),i=s(i,j,k,h,x[c+8],F,1163531501),
+h=s(h,i,j,k,x[c+13],C,2850285829),k=s(k,h,i,j,x[c+2],D,4243563512),j=s(j,k,h,i,x[c+7],E,1735328473),i=s(i,j,k,h,x[c+12],F,2368359562),h=t(h,i,j,k,x[c+5],G,4294588738),k=t(k,h,i,j,x[c+8],H,2272392833),j=t(j,k,h,i,x[c+11],I,1839030562),i=t(i,j,k,h,x[c+14],J,4259657740),h=t(h,i,j,k,x[c+1],G,2763975236),k=t(k,h,i,j,x[c+4],H,1272893353),j=t(j,k,h,i,x[c+7],I,4139469664),i=t(i,j,k,h,x[c+10],J,3200236656),h=t(h,i,j,k,x[c+13],G,681279174),k=t(k,h,i,j,x[c+0],H,3936430074),j=t(j,k,h,i,x[c+3],I,3572445317),i=t(i,j,k,h,x[c+6],J,76029189),h=t(h,i,j,k,x[c+9],G,3654602809),k=t(k,h,i,j,x[c+12],H,3873151461),j=t(j,k,h,i,x[c+15],I,530742520),i=t(i,j,k,h,x[c+2],J,3299628645),h=u(h,i,j,k,x[c+0],K,4096336452),k=u(k,h,i,j,x[c+7],L,1126891415),j=u(j,k,h,i,x[c+14],M,2878612391),i=u(i,j,k,h,x[c+5],N,4237533241),h=u(h,i,j,k,x[c+12],K,1700485571),k=u(k,h,i,j,x[c+3],L,2399980690),j=u(j,k,h,i,x[c+10],M,4293915773),i=u(i,j,k,h,x[c+1],N,2240044497),h=u(h,i,j,k,x[c+8],K,1873313359),k=u(k,h,i,j,x[c+15],L,4264355552),j=u(j,k,h,i,x[c+6],M,2734768916),i=u(i,j,k,h,x[c+13],N,1309151649),h=u(h,i,j,k,x[c+4],K,4149444226),k=u(k,h,i,j,x[c+11],L,3174756917),j=u(j,k,h,i,x[c+2],M,718787259),i=u(i,j,k,h,x[c+9],N,3951481745),h=m(h,d),i=m(i,e),j=m(j,f),k=m(k,g);var O=w(h)+w(i)+w(j)+w(k);return O.toLowerCase()}};return a}])}(angular),angular.module("notification",[]).provider("$notification",$notificationProvider),function(a,b,c){"use strict";function d(a){return null!=a&&""!==a&&"hasOwnProperty"!==a&&h.test("."+a)}function e(a,e){if(!d(e))throw g("badmember",'Dotted member path "@{0}" is invalid.',e);for(var f=e.split("."),h=0,i=f.length;i>h&&b.isDefined(a);h++){var j=f[h];a=null!==a?a[j]:c}return a}function f(a,c){c=c||{},b.forEach(c,function(a,b){delete c[b]});for(var d in a)!a.hasOwnProperty(d)||"$"===d.charAt(0)&&"$"===d.charAt(1)||(c[d]=a[d]);return c}var g=b.$$minErr("$resource"),h=/^(\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;b.module("ngResource",["ng"]).provider("$resource",function(){var a=/^https?:\/\/[^\/]*/,d=this;this.defaults={stripTrailingSlashes:!0,actions:{get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}}},this.$get=["$http","$q",function(h,i){function j(a){return k(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function k(a,b){return encodeURIComponent(a).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,b?"%20":"+")}function l(a,b){this.template=a,this.defaults=p({},d.defaults,b),this.urlParams={}}function m(a,j,k,s){function t(a,b){var c={};return b=p({},j,b),o(b,function(b,d){r(b)&&(b=b()),c[d]=b&&b.charAt&&"@"==b.charAt(0)?e(a,b.substr(1)):b}),c}function u(a){return a.resource}function v(a){f(a||{},this)}var w=new l(a,s);return k=p({},d.defaults.actions,k),v.prototype.toJSON=function(){var a=p({},this);return delete a.$promise,delete a.$resolved,a},o(k,function(a,d){var e=/^(POST|PUT|PATCH)$/i.test(a.method);v[d]=function(j,k,l,m){var s,x,y,z={};switch(arguments.length){case 4:y=m,x=l;case 3:case 2:if(!r(k)){z=j,s=k,x=l;break}if(r(j)){x=j,y=k;break}x=k,y=l;case 1:r(j)?x=j:e?s=j:z=j;break;case 0:break;default:throw g("badargs","Expected up to 4 arguments [params, data, success, error], got {0} arguments",arguments.length)}var A=this instanceof v,B=A?s:a.isArray?[]:new v(s),C={},D=a.interceptor&&a.interceptor.response||u,E=a.interceptor&&a.interceptor.responseError||c;o(a,function(a,b){switch(b){default:C[b]=q(a);break;case"params":case"isArray":case"interceptor":break;case"timeout":C[b]=a}}),e&&(C.data=s),w.setUrlParams(C,p({},t(s,a.params||{}),z),a.url);var F=h(C).then(function(c){var e=c.data,h=B.$promise;if(e){if(b.isArray(e)!==!!a.isArray)throw g("badcfg","Error in resource configuration for action `{0}`. Expected response to contain an {1} but got an {2} (Request: {3} {4})",d,a.isArray?"array":"object",b.isArray(e)?"array":"object",C.method,C.url);a.isArray?(B.length=0,o(e,function(a){"object"==typeof a?B.push(new v(a)):B.push(a)})):(f(e,B),B.$promise=h)}return B.$resolved=!0,c.resource=B,c},function(a){return B.$resolved=!0,(y||n)(a),i.reject(a)});return F=F.then(function(a){var b=D(a);return(x||n)(b,a.headers),b},E),A?F:(B.$promise=F,B.$resolved=!1,B)},v.prototype["$"+d]=function(a,b,c){r(a)&&(c=b,b=a,a={});var e=v[d].call(this,a,this,b,c);return e.$promise||e}}),v.bind=function(b){return m(a,p({},j,b),k)},v}var n=b.noop,o=b.forEach,p=b.extend,q=b.copy,r=b.isFunction;return l.prototype={setUrlParams:function(c,d,e){var f,h,i=this,k=e||i.template,l="",m=i.urlParams={};o(k.split(/\W/),function(a){if("hasOwnProperty"===a)throw g("badname","hasOwnProperty is not a valid parameter name.");!new RegExp("^\\d+$").test(a)&&a&&new RegExp("(^|[^\\\\]):"+a+"(\\W|$)").test(k)&&(m[a]=!0)}),k=k.replace(/\\:/g,":"),k=k.replace(a,function(a){return l=a,""}),d=d||{},o(i.urlParams,function(a,c){f=d.hasOwnProperty(c)?d[c]:i.defaults[c],b.isDefined(f)&&null!==f?(h=j(f),k=k.replace(new RegExp(":"+c+"(\\W|$)","g"),function(a,b){return h+b})):k=k.replace(new RegExp("(/?):"+c+"(\\W|$)","g"),function(a,b,c){return"/"==c.charAt(0)?c:b+c})}),i.defaults.stripTrailingSlashes&&(k=k.replace(/\/+$/,"")||"/"),k=k.replace(/\/\.(?=\w+($|\?))/,"."),c.url=l+k.replace(/\/\\\./,"/."),o(d,function(a,b){i.urlParams[b]||(c.params=c.params||{},c.params[b]=a)})}},m}]})}(window,window.angular),function(a,b,c){"use strict";function d(){this.$get=["$$sanitizeUri",function(a){return function(b){var c=[];return g(b,j(c,function(b,c){return!/^unsafe/.test(a(b,c))})),c.join("")}}]}function e(a){var c=[],d=j(c,b.noop);return d.chars(a),c.join("")}function f(a,c){var d,e={},f=a.split(",");for(d=0;d<f.length;d++)e[c?b.lowercase(f[d]):f[d]]=!0;return e}function g(a,c){function d(a,d,f,g){if(d=b.lowercase(d),z[d])for(;t.last()&&A[t.last()];)e("",t.last());y[d]&&t.last()==d&&e("",d),g=v[d]||!!g,g||t.push(d);var i={};f.replace(n,function(a,b,c,d,e){var f=c||d||e||"";i[b]=h(f)}),c.start&&c.start(d,i,g)}function e(a,d){var e,f=0;if(d=b.lowercase(d))for(f=t.length-1;f>=0&&t[f]!=d;f--);if(f>=0){for(e=t.length-1;e>=f;e--)c.end&&c.end(t[e]);t.length=f}}"string"!=typeof a&&(a=null===a||"undefined"==typeof a?"":""+a);var f,g,i,j,t=[],u=a;for(t.last=function(){return t[t.length-1]};a;){if(j="",g=!0,t.last()&&C[t.last()]?(a=a.replace(new RegExp("([\\W\\w]*)<\\s*\\/\\s*"+t.last()+"[^>]*>","i"),function(a,b){return b=b.replace(q,"$1").replace(s,"$1"),c.chars&&c.chars(h(b)),""}),e("",t.last())):(0===a.indexOf("<!--")?(f=a.indexOf("--",4),f>=0&&a.lastIndexOf("-->",f)===f&&(c.comment&&c.comment(a.substring(4,f)),a=a.substring(f+3),g=!1)):r.test(a)?(i=a.match(r),i&&(a=a.replace(i[0],""),g=!1)):p.test(a)?(i=a.match(m),i&&(a=a.substring(i[0].length),i[0].replace(m,e),g=!1)):o.test(a)&&(i=a.match(l),i?(i[4]&&(a=a.substring(i[0].length),i[0].replace(l,d)),g=!1):(j+="<",a=a.substring(1))),g&&(f=a.indexOf("<"),j+=0>f?a:a.substring(0,f),a=0>f?"":a.substring(f),c.chars&&c.chars(h(j)))),a==u)throw k("badparse","The sanitizer was unable to parse the following block of html: {0}",a);u=a}e()}function h(a){return a?(I.innerHTML=a.replace(/</g,"&lt;"),I.textContent):""}function i(a){return a.replace(/&/g,"&amp;").replace(t,function(a){var b=a.charCodeAt(0),c=a.charCodeAt(1);return"&#"+(1024*(b-55296)+(c-56320)+65536)+";"}).replace(u,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function j(a,c){var d=!1,e=b.bind(a,a.push);return{start:function(a,f,g){a=b.lowercase(a),!d&&C[a]&&(d=a),d||D[a]!==!0||(e("<"),e(a),b.forEach(f,function(d,f){var g=b.lowercase(f),h="img"===a&&"src"===g||"background"===g;H[g]!==!0||E[g]===!0&&!c(d,h)||(e(" "),e(f),e('="'),e(i(d)),e('"'))}),e(g?"/>":">"))},end:function(a){a=b.lowercase(a),d||D[a]!==!0||(e("</"),e(a),e(">")),a==d&&(d=!1)},chars:function(a){d||e(i(a))}}}var k=b.$$minErr("$sanitize"),l=/^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,m=/^<\/\s*([\w:-]+)[^>]*>/,n=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,o=/^</,p=/^<\//,q=/<!--(.*?)-->/g,r=/<!DOCTYPE([^>]*?)>/i,s=/<!\[CDATA\[(.*?)]]>/g,t=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,u=/([^\#-~| |!])/g,v=f("area,br,col,hr,img,wbr"),w=f("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),x=f("rp,rt"),y=b.extend({},x,w),z=b.extend({},w,f("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")),A=b.extend({},x,f("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")),B=f("circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,stop,svg,switch,text,title,tspan,use"),C=f("script,style"),D=b.extend({},v,z,A,y,B),E=f("background,cite,href,longdesc,src,usemap,xlink:href"),F=f("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,valign,value,vspace,width"),G=f("accent-height,accumulate,additive,alphabetic,arabic-form,ascent,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan",!0),H=b.extend({},E,G,F),I=document.createElement("pre");b.module("ngSanitize",[]).provider("$sanitize",d),b.module("ngSanitize").filter("linky",["$sanitize",function(a){var c=/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i,d=/^mailto:/i;return function(f,g){function h(a){a&&n.push(e(a))}function i(a,c){n.push("<a "),b.isDefined(g)&&n.push('target="',g,'" '),n.push('href="',a.replace(/"/g,"&quot;"),'">'),h(c),n.push("</a>")}if(!f)return f;for(var j,k,l,m=f,n=[];j=m.match(c);)k=j[0],j[2]||j[4]||(k=(j[3]?"http://":"mailto:")+k),l=j.index,h(m.substr(0,l)),i(k,j[0].replace(d,"")),m=m.substring(l+j[0].length);return h(m),a(n.join(""))}}])}(window,window.angular),function(a,b){"use strict";a.module("smart-table",[]).run(["$templateCache",function(a){a.put("template/smart-table/pagination.html",'<nav ng-if="numPages && pages.length >= 2"><ul class="pagination"><li ng-repeat="page in pages" ng-class="{active: page==currentPage}"><a ng-click="selectPage(page)">{{page}}</a></li></ul></nav>')}]),a.module("smart-table").constant("stConfig",{pagination:{template:"template/smart-table/pagination.html",itemsByPage:10,displayedPages:5},search:{delay:400,inputEvent:"input"},select:{mode:"single",selectedClass:"st-selected"},sort:{ascentClass:"st-sort-ascent",descentClass:"st-sort-descent",skipNatural:!1,delay:300},pipe:{delay:100}}),a.module("smart-table").controller("stTableController",["$scope","$parse","$filter","$attrs",function(c,d,e,f){function g(a){return a?[].concat(a):[]}function h(){r=g(j(c)),t===!0&&u.pipe()}function i(a,b){if(-1!=b.indexOf(".")){var c=b.split("."),e=c.pop(),f=c.join("."),g=d(f)(a);delete g[e],0==Object.keys(g).length&&i(a,f)}else delete a[b]}var j,k,l,m=f.stTable,n=d(m),o=n.assign,p=e("orderBy"),q=e("filter"),r=g(n(c)),s={sort:{},search:{},pagination:{start:0,totalItemCount:0}},t=!0,u=this;f.stSafeSrc&&(j=d(f.stSafeSrc),c.$watch(function(){var a=j(c);return a&&a.length?a[0]:b},function(a,b){a!==b&&h()}),c.$watch(function(){var a=j(c);return a?a.length:0},function(a,b){a!==r.length&&h()}),c.$watch(function(){return j(c)},function(a,b){a!==b&&(s.pagination.start=0,h())})),this.sortBy=function(b,c){return s.sort.predicate=b,s.sort.reverse=c===!0,a.isFunction(b)?s.sort.functionName=b.name:delete s.sort.functionName,s.pagination.start=0,this.pipe()},this.search=function(b,c){var e=s.search.predicateObject||{},f=c?c:"$";return b=a.isString(b)?b.trim():b,d(f).assign(e,b),b||i(e,f),s.search.predicateObject=e,s.pagination.start=0,this.pipe()},this.pipe=function(){var a,d=s.pagination;k=s.search.predicateObject?q(r,s.search.predicateObject):r,s.sort.predicate&&(k=p(k,s.sort.predicate,s.sort.reverse)),d.totalItemCount=k.length,d.number!==b&&(d.numberOfPages=k.length>0?Math.ceil(k.length/d.number):1,d.start=d.start>=k.length?(d.numberOfPages-1)*d.number:d.start,a=k.slice(d.start,d.start+parseInt(d.number))),o(c,a||k)},this.select=function(a,d){var e=g(n(c)),f=e.indexOf(a);-1!==f&&("single"===d?(a.isSelected=a.isSelected!==!0,l&&(l.isSelected=!1),l=a.isSelected===!0?a:b):e[f].isSelected=!e[f].isSelected)},this.slice=function(a,b){return s.pagination.start=a,s.pagination.number=b,this.pipe()},this.tableState=function(){return s},this.getFilteredCollection=function(){return k||r},this.setFilterFunction=function(a){q=e(a)},this.setSortFunction=function(a){p=e(a)},this.preventPipeOnWatch=function(){t=!1}}]).directive("stTable",function(){return{restrict:"A",controller:"stTableController",link:function(a,b,c,d){c.stSetFilter&&d.setFilterFunction(c.stSetFilter),c.stSetSort&&d.setSortFunction(c.stSetSort)}}}),a.module("smart-table").directive("stSearch",["stConfig","$timeout","$parse",function(a,b,c){return{require:"^stTable",link:function(d,e,f,g){var h=g,i=null,j=f.stDelay||a.search.delay,k=f.stInputEvent||a.search.inputEvent;f.$observe("stSearch",function(a,b){var c=e[0].value;a!==b&&c&&(g.tableState().search={},h.search(c,a))}),d.$watch(function(){return g.tableState().search},function(a,b){var d=f.stSearch||"$";a.predicateObject&&c(d)(a.predicateObject)!==e[0].value&&(e[0].value=c(d)(a.predicateObject)||"")},!0),e.bind(k,function(a){a=a.originalEvent||a,null!==i&&b.cancel(i),i=b(function(){h.search(a.target.value,f.stSearch||""),i=null},j)})}}}]),a.module("smart-table").directive("stSelectRow",["stConfig",function(a){return{restrict:"A",require:"^stTable",scope:{row:"=stSelectRow"},link:function(b,c,d,e){var f=d.stSelectMode||a.select.mode;c.bind("click",function(){b.$apply(function(){e.select(b.row,f)})}),b.$watch("row.isSelected",function(b){b===!0?c.addClass(a.select.selectedClass):c.removeClass(a.select.selectedClass)})}}}]),a.module("smart-table").directive("stSort",["stConfig","$parse","$timeout",function(c,d,e){return{restrict:"A",require:"^stTable",link:function(f,g,h,i){function j(){n++;var b;l=a.isFunction(m(f))||a.isArray(m(f))?m(f):h.stSort,n%3===0&&!!r!=!0?(n=0,i.tableState().sort={},i.tableState().pagination.start=0,b=i.pipe.bind(i)):b=i.sortBy.bind(i,l,n%2===0),null!==s&&e.cancel(s),0>t?f.$apply(b):s=e(b,t)}var k,l=h.stSort,m=d(l),n=0,o=h.stClassAscent||c.sort.ascentClass,p=h.stClassDescent||c.sort.descentClass,q=[o,p],r=h.stSkipNatural!==b?h.stSkipNatural:c.sort.skipNatural,s=null,t=h.stDelay||c.sort.delay;h.stSortDefault&&(k=f.$eval(h.stSortDefault)!==b?f.$eval(h.stSortDefault):h.stSortDefault),g.bind("click",function(){l&&j()}),k&&(n="reverse"===k?1:0,j()),f.$watch(function(){return i.tableState().sort},function(a){a.predicate!==l?(n=0,g.removeClass(o).removeClass(p)):(n=a.reverse===!0?2:1,g.removeClass(q[n%2]).addClass(q[n-1]))},!0)}}}]),a.module("smart-table").directive("stPagination",["stConfig",function(a){return{restrict:"EA",require:"^stTable",scope:{stItemsByPage:"=?",stDisplayedPages:"=?",stPageChange:"&"},templateUrl:function(b,c){return c.stTemplate?c.stTemplate:a.pagination.template},link:function(b,c,d,e){function f(){var a,c,d=e.tableState().pagination,f=1,g=b.currentPage;for(b.totalItemCount=d.totalItemCount,b.currentPage=Math.floor(d.start/d.number)+1,f=Math.max(f,b.currentPage-Math.abs(Math.floor(b.stDisplayedPages/2))),a=f+b.stDisplayedPages,a>d.numberOfPages&&(a=d.numberOfPages+1,f=Math.max(1,a-b.stDisplayedPages)),b.pages=[],b.numPages=d.numberOfPages,c=f;a>c;c++)b.pages.push(c);g!==b.currentPage&&b.stPageChange({newPage:b.currentPage})}b.stItemsByPage=b.stItemsByPage?+b.stItemsByPage:a.pagination.itemsByPage,b.stDisplayedPages=b.stDisplayedPages?+b.stDisplayedPages:a.pagination.displayedPages,b.currentPage=1,b.pages=[],b.$watch(function(){return e.tableState().pagination},f,!0),b.$watch("stItemsByPage",function(a,c){a!==c&&b.selectPage(1)}),b.$watch("stDisplayedPages",f),b.selectPage=function(a){a>0&&a<=b.numPages&&e.slice((a-1)*b.stItemsByPage,b.stItemsByPage)},e.tableState().pagination.number||e.slice(0,b.stItemsByPage)}}}]),a.module("smart-table").directive("stPipe",["stConfig","$timeout",function(b,c){return{require:"stTable",scope:{stPipe:"="},link:{pre:function(d,e,f,g){var h=null;a.isFunction(d.stPipe)&&(g.preventPipeOnWatch(),g.pipe=function(){return null!==h&&c.cancel(h),h=c(function(){d.stPipe(g.tableState(),g)},b.pipe.delay)})},post:function(a,b,c,d){d.pipe()}}}}])}(angular),angular.module("btford.socket-io",[]).provider("socketFactory",function(){"use strict";var a="socket:";this.$get=["$rootScope","$timeout",function(b,c){var d=function(a,b){return b?function(){var d=arguments;c(function(){b.apply(a,d)},0)}:angular.noop};return function(c){c=c||{};var e=c.ioSocket||io.connect(),f=void 0===c.prefix?a:c.prefix,g=c.scope||b,h=function(a,b){e.on(a,b.__ng=d(e,b))},i=function(a,b){e.once(a,b.__ng=d(e,b))},j={on:h,addListener:h,once:i,emit:function(a,b,c){var f=arguments.length-1,c=arguments[f];return"function"==typeof c&&(c=d(e,c),arguments[f]=c),e.emit.apply(e,arguments)},removeListener:function(a,b){return b&&b.__ng&&(arguments[1]=b.__ng),e.removeListener.apply(e,arguments)},removeAllListeners:function(){return e.removeAllListeners.apply(e,arguments)},disconnect:function(a){return e.disconnect(a)},connect:function(){return e.connect()},forward:function(a,b){a instanceof Array==!1&&(a=[a]),b||(b=g),a.forEach(function(a){var c=f+a,g=d(e,function(){Array.prototype.unshift.call(arguments,c),b.$broadcast.apply(b,arguments)});b.$on("$destroy",function(){e.removeListener(a,g)}),e.on(a,g)})}};return j}}]}),function(){"use strict";function a(a,b,c,d,e,f,g){function h(a){if(1!==arguments.length||a)if(a)m(a.toastId);else for(var b=0;b<t.length;b++)m(t[b].toastId)}function i(a,b,c){var d=o().iconClasses.error;return n(d,a,b,c)}function j(a,b,c){var d=o().iconClasses.info;return n(d,a,b,c)}function k(a,b,c){var d=o().iconClasses.success;return n(d,a,b,c)}function l(a,b,c){var d=o().iconClasses.warning;return n(d,a,b,c)}function m(b,c){function d(a){for(var b=0;b<t.length;b++)if(t[b].toastId===a)return t[b]}function e(){return!t.length}var h=d(b);h&&!h.deleting&&(h.deleting=!0,h.isOpened=!1,a.leave(h.el).then(function(){h.scope.options.onHidden&&h.scope.options.onHidden(c),h.scope.$destroy();var a=t.indexOf(h);delete v[h.scope.message],t.splice(a,1);var b=f.maxOpened;b&&t.length>=b&&t[b-1].open.resolve(),e()&&(r.remove(),r=null,w=g.defer())}))}function n(a,b,c,d){return angular.isObject(c)&&(d=c,c=null),q({iconClass:a,message:b,optionsOverride:d,title:c})}function o(){return angular.extend({},f)}function p(b){if(r)return w.promise;r=angular.element("<div></div>"),r.attr("id",b.containerId),r.addClass(b.positionClass),r.css({"pointer-events":"auto"});var c=angular.element(document.querySelector(b.target));if(!c||!c.length)throw"Target for toasts doesn't exist";return a.enter(r,c).then(function(){w.resolve()}),w.promise}function q(c){function f(){return n.autoDismiss&&n.maxOpened&&t.length>n.maxOpened}function h(a,b,c){c.allowHtml?(a.scope.allowHtml=!0,a.scope.title=e.trustAsHtml(b.title),a.scope.message=e.trustAsHtml(b.message)):(a.scope.title=b.title,a.scope.message=b.message),a.scope.toastType=a.iconClass,a.scope.toastId=a.toastId,a.scope.extraData=c.extraData,a.scope.options={extendedTimeOut:c.extendedTimeOut,messageClass:c.messageClass,onHidden:c.onHidden,onShown:c.onShown,onTap:c.onTap,progressBar:c.progressBar,tapToDismiss:c.tapToDismiss,timeOut:c.timeOut,titleClass:c.titleClass,toastClass:c.toastClass},c.closeButton&&(a.scope.options.closeHtml=c.closeHtml)}function i(){function a(a){for(var b=["containerId","iconClasses","maxOpened","newestOnTop","positionClass","preventDuplicates","preventOpenDuplicates","templates"],c=0,d=b.length;d>c;c++)delete a[b[c]];return a}var b={toastId:s++,isOpened:!1,scope:d.$new(),open:g.defer()};return b.iconClass=c.iconClass,c.optionsOverride&&(angular.extend(n,a(c.optionsOverride)),b.iconClass=c.optionsOverride.iconClass||b.iconClass),h(b,c,n),b.el=j(b.scope),b}function j(a){var c=angular.element("<div toast></div>"),d=b.get("$compile");return d(c)(a)}function k(){return n.maxOpened&&t.length<=n.maxOpened||!n.maxOpened}function l(){var a=n.preventDuplicates&&c.message===u,b=n.preventOpenDuplicates&&v[c.message];return a||b?!0:(u=c.message,v[c.message]=!0,!1)}var n=o();if(!l()){var q=i();if(t.push(q),f())for(var w=t.slice(0,t.length-n.maxOpened),x=0,y=w.length;y>x;x++)m(w[x].toastId);return k()&&q.open.resolve(),q.open.promise.then(function(){p(n).then(function(){if(q.isOpened=!0,n.newestOnTop)a.enter(q.el,r).then(function(){q.scope.init()});else{var b=r[0].lastChild?angular.element(r[0].lastChild):null;a.enter(q.el,r,b).then(function(){q.scope.init()})}})}),q}}var r,s=0,t=[],u="",v={},w=g.defer(),x={clear:h,error:i,info:j,remove:m,success:k,warning:l};return x}angular.module("toastr",[]).factory("toastr",a),a.$inject=["$animate","$injector","$document","$rootScope","$sce","toastrConfig","$q"]}(),function(){"use strict";angular.module("toastr").constant("toastrConfig",{allowHtml:!1,autoDismiss:!1,closeButton:!1,closeHtml:"<button>&times;</button>",containerId:"toast-container",extendedTimeOut:1e3,iconClasses:{error:"toast-error",info:"toast-info",success:"toast-success",warning:"toast-warning"},maxOpened:0,messageClass:"toast-message",newestOnTop:!0,onHidden:null,onShown:null,onTap:null,positionClass:"toast-top-right",preventDuplicates:!1,preventOpenDuplicates:!1,progressBar:!1,tapToDismiss:!0,target:"body",templates:{toast:"directives/toast/toast.html",progressbar:"directives/progressbar/progressbar.html"},timeOut:5e3,titleClass:"toast-title",toastClass:"toast"})}(),function(){"use strict";function a(a){function b(a,b,c,d){function e(){var a=(h-(new Date).getTime())/g*100;b.css("width",a+"%")}var f,g,h;d.progressBar=a,a.start=function(a){f&&clearInterval(f),g=parseFloat(a),h=(new Date).getTime()+g,f=setInterval(e,10)},a.stop=function(){f&&clearInterval(f)},a.$on("$destroy",function(){clearInterval(f)})}return{replace:!0,require:"^toast",templateUrl:function(){return a.templates.progressbar},link:b}}angular.module("toastr").directive("progressBar",a),a.$inject=["toastrConfig"]}(),function(){"use strict";function a(){this.progressBar=null,this.startProgressBar=function(a){this.progressBar&&this.progressBar.start(a)},this.stopProgressBar=function(){this.progressBar&&this.progressBar.stop()}}angular.module("toastr").controller("ToastController",a)}(),function(){"use strict";function a(a,b,c,d){function e(c,e,f,g){function h(a){return g.startProgressBar(a),b(function(){g.stopProgressBar(),d.remove(c.toastId)},a,1)}function i(){c.progressBar=!1,g.stopProgressBar()}function j(){return c.options.closeHtml}var k;if(c.toastClass=c.options.toastClass,c.titleClass=c.options.titleClass,c.messageClass=c.options.messageClass,c.progressBar=c.options.progressBar,j()){var l=angular.element(c.options.closeHtml),m=a.get("$compile");l.addClass("toast-close-button"),l.attr("ng-click","close(true, $event)"),m(l)(c),e.prepend(l)}c.init=function(){c.options.timeOut&&(k=h(c.options.timeOut)),c.options.onShown&&c.options.onShown()},e.on("mouseenter",function(){i(),k&&b.cancel(k)}),c.tapToast=function(){angular.isFunction(c.options.onTap)&&c.options.onTap(),c.options.tapToDismiss&&c.close(!0)},c.close=function(a,b){b&&angular.isFunction(b.stopPropagation)&&b.stopPropagation(),d.remove(c.toastId,a)},e.on("mouseleave",function(){(0!==c.options.timeOut||0!==c.options.extendedTimeOut)&&(c.$apply(function(){c.progressBar=c.options.progressBar}),k=h(c.options.extendedTimeOut))})}return{replace:!0,templateUrl:function(){return c.templates.toast},controller:"ToastController",link:e}}angular.module("toastr").directive("toast",a),a.$inject=["$injector","$interval","toastrConfig","toastr"]}(),angular.module("toastr").run(["$templateCache",function(a){a.put("directives/progressbar/progressbar.html",'<div class="toast-progress"></div>\n'),a.put("directives/toast/toast.html",'<div class="{{toastClass}} {{toastType}}" ng-click="tapToast()">\n  <div ng-switch on="allowHtml">\n    <div ng-switch-default ng-if="title" class="{{titleClass}}" aria-label="{{title}}">{{title}}</div>\n    <div ng-switch-default class="{{messageClass}}" aria-label="{{message}}">{{message}}</div>\n    <div ng-switch-when="true" ng-if="title" class="{{titleClass}}" ng-bind-html="title"></div>\n    <div ng-switch-when="true" class="{{messageClass}}" ng-bind-html="message"></div>\n  </div>\n  <progress-bar ng-if="progressBar"></progress-bar>\n</div>\n')}]),function(a,b,c){"use strict";function d(a){return b.lowercase(a.nodeName||a[0]&&a[0].nodeName)}function e(a,c,d){f.directive(a,["$parse","$swipe",function(e,f){var g=75,h=.3,i=30;return function(j,k,l){function m(a){if(!n)return!1;var b=Math.abs(a.y-n.y),d=(a.x-n.x)*c;return o&&g>b&&d>0&&d>i&&h>b/d}var n,o,p=e(l[a]),q=["touch"];b.isDefined(l.ngSwipeDisableMouse)||q.push("mouse"),f.bind(k,{start:function(a,b){n=a,o=!0},cancel:function(a){o=!1},end:function(a,b){m(a)&&j.$apply(function(){k.triggerHandler(d),p(j,{$event:b})})}},q)}}])}var f=b.module("ngTouch",[]);f.factory("$swipe",[function(){function a(a){var b=a.originalEvent||a,c=b.touches&&b.touches.length?b.touches:[b],d=b.changedTouches&&b.changedTouches[0]||c[0];return{x:d.clientX,y:d.clientY}}function c(a,c){var d=[];return b.forEach(a,function(a){var b=e[a][c];b&&d.push(b)}),d.join(" ")}var d=10,e={mouse:{start:"mousedown",move:"mousemove",end:"mouseup"},touch:{start:"touchstart",move:"touchmove",end:"touchend",cancel:"touchcancel"}};return{bind:function(b,e,f){var g,h,i,j,k=!1;f=f||["mouse","touch"],b.on(c(f,"start"),function(b){i=a(b),k=!0,g=0,h=0,j=i,e.start&&e.start(i,b)});var l=c(f,"cancel");l&&b.on(l,function(a){k=!1,e.cancel&&e.cancel(a)}),b.on(c(f,"move"),function(b){if(k&&i){var c=a(b);if(g+=Math.abs(c.x-j.x),h+=Math.abs(c.y-j.y),j=c,!(d>g&&d>h))return h>g?(k=!1,void(e.cancel&&e.cancel(b))):(b.preventDefault(),void(e.move&&e.move(c,b)))}}),b.on(c(f,"end"),function(b){k&&(k=!1,e.end&&e.end(a(b),b))})}}}]),f.config(["$provide",function(a){a.decorator("ngClickDirective",["$delegate",function(a){return a.shift(),a}])}]),f.directive("ngClick",["$parse","$timeout","$rootElement",function(a,c,e){function f(a,b,c,d){return Math.abs(a-c)<q&&Math.abs(b-d)<q}function g(a,b,c){for(var d=0;d<a.length;d+=2)if(f(a[d],a[d+1],b,c))return a.splice(d,d+2),!0;return!1}function h(a){if(!(Date.now()-k>p)){var b=a.touches&&a.touches.length?a.touches:[a],c=b[0].clientX,e=b[0].clientY;1>c&&1>e||m&&m[0]===c&&m[1]===e||(m&&(m=null),"label"===d(a.target)&&(m=[c,e]),g(l,c,e)||(a.stopPropagation(),a.preventDefault(),a.target&&a.target.blur&&a.target.blur()))}}function i(a){var b=a.touches&&a.touches.length?a.touches:[a],d=b[0].clientX,e=b[0].clientY;l.push(d,e),c(function(){for(var a=0;a<l.length;a+=2)if(l[a]==d&&l[a+1]==e)return void l.splice(a,a+2)},p,!1)}function j(a,b){l||(e[0].addEventListener("click",h,!0),e[0].addEventListener("touchstart",i,!0),l=[]),k=Date.now(),g(l,a,b)}var k,l,m,n=750,o=12,p=2500,q=25,r="ng-click-active";return function(c,d,e){function f(){m=!1,d.removeClass(r)}var g,h,i,k,l=a(e.ngClick),m=!1;d.on("touchstart",function(a){m=!0,g=a.target?a.target:a.srcElement,3==g.nodeType&&(g=g.parentNode),d.addClass(r),h=Date.now();var b=a.originalEvent||a,c=b.touches&&b.touches.length?b.touches:[b],e=c[0];i=e.clientX,k=e.clientY}),d.on("touchcancel",function(a){f()}),d.on("touchend",function(a){var c=Date.now()-h,l=a.originalEvent||a,p=l.changedTouches&&l.changedTouches.length?l.changedTouches:l.touches&&l.touches.length?l.touches:[l],q=p[0],r=q.clientX,s=q.clientY,t=Math.sqrt(Math.pow(r-i,2)+Math.pow(s-k,2));m&&n>c&&o>t&&(j(r,s),g&&g.blur(),b.isDefined(e.disabled)&&e.disabled!==!1||d.triggerHandler("click",[a])),f()}),d.onclick=function(a){},d.on("click",function(a,b){c.$apply(function(){l(c,{$event:b||a})})}),d.on("mousedown",function(a){d.addClass(r)}),d.on("mousemove mouseup",function(a){d.removeClass(r)})}}]),e("ngSwipeLeft",-1,"swipeleft"),e("ngSwipeRight",1,"swiperight")}(window,window.angular),function(a,b){"function"==typeof define&&define.amd?define([],function(){return b()}):"object"==typeof exports?module.exports=b():b()}(this,function(){function a(a){"use strict";var b=a.storageKey(),c=a.storage(),d=function(){var d=a.preferredLanguage();angular.isString(d)?a.use(d):c.put(b,a.use())};d.displayName="fallbackFromIncorrectStorageValue",c?c.get(b)?a.use(c.get(b))["catch"](d):d():angular.isString(a.preferredLanguage())&&a.use(a.preferredLanguage())}function b(){"use strict";var a,b,c=null,d=!1,e=!1;b={sanitize:function(a,b){return"text"===b&&(a=g(a)),a},escape:function(a,b){return"text"===b&&(a=f(a)),a},sanitizeParameters:function(a,b){return"params"===b&&(a=h(a,g)),a},escapeParameters:function(a,b){return"params"===b&&(a=h(a,f)),a}},b.escaped=b.escapeParameters,this.addStrategy=function(a,c){return b[a]=c,this},this.removeStrategy=function(a){return delete b[a],this},this.useStrategy=function(a){return d=!0,c=a,this},this.$get=["$injector","$log",function(f,g){var h=function(a,c,d){return angular.forEach(d,function(d){if(angular.isFunction(d))a=d(a,c);else{if(!angular.isFunction(b[d]))throw new Error("pascalprecht.translate.$translateSanitization: Unknown sanitization strategy: '"+d+"'");a=b[d](a,c)}}),a},i=function(){d||e||(g.warn("pascalprecht.translate.$translateSanitization: No sanitization strategy has been configured. This can have serious security implications. See http://angular-translate.github.io/docs/#/guide/19_security for details."),e=!0)};return f.has("$sanitize")&&(a=f.get("$sanitize")),{useStrategy:function(a){return function(b){a.useStrategy(b)}}(this),sanitize:function(a,b,d){if(c||i(),arguments.length<3&&(d=c),!d)return a;var e=angular.isArray(d)?d:[d];return h(a,b,e)}}}];var f=function(a){var b=angular.element("<div></div>");return b.text(a),b.html()},g=function(b){if(!a)throw new Error("pascalprecht.translate.$translateSanitization: Error cannot find $sanitize service. Either include the ngSanitize module (https://docs.angularjs.org/api/ngSanitize) or use a sanitization strategy which does not depend on $sanitize, such as 'escape'.");return a(b)},h=function(a,b){if(angular.isObject(a)){var c=angular.isArray(a)?[]:{};return angular.forEach(a,function(a,d){c[d]=h(a,b)}),c}return angular.isNumber(a)?a:b(a)}}function c(a,b,c,d){"use strict";var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t={},u=[],v=a,w=[],x="translate-cloak",y=!1,z=!1,A=".",B=0,C=!0,D="default",E={"default":function(a){return(a||"").split("-").join("_")},java:function(a){var b=(a||"").split("-").join("_"),c=b.split("_");return c.length>1?c[0].toLowerCase()+"_"+c[1].toUpperCase():b},bcp47:function(a){var b=(a||"").split("_").join("-"),c=b.split("-");
+return c.length>1?c[0].toLowerCase()+"-"+c[1].toUpperCase():b}},F="2.7.2",G=function(){if(angular.isFunction(d.getLocale))return d.getLocale();var a,c,e=b.$get().navigator,f=["language","browserLanguage","systemLanguage","userLanguage"];if(angular.isArray(e.languages))for(a=0;a<e.languages.length;a++)if(c=e.languages[a],c&&c.length)return c;for(a=0;a<f.length;a++)if(c=e[f[a]],c&&c.length)return c;return null};G.displayName="angular-translate/service: getFirstBrowserLanguage";var H=function(){var a=G()||"";return E[D]&&(a=E[D](a)),a};H.displayName="angular-translate/service: getLocale";var I=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},J=function(){return this.toString().replace(/^\s+|\s+$/g,"")},K=function(a){for(var b=[],c=angular.lowercase(a),d=0,e=u.length;e>d;d++)b.push(angular.lowercase(u[d]));if(I(b,c)>-1)return a;if(f){var g;for(var h in f){var i=!1,j=Object.prototype.hasOwnProperty.call(f,h)&&angular.lowercase(h)===angular.lowercase(a);if("*"===h.slice(-1)&&(i=h.slice(0,-1)===a.slice(0,h.length-1)),(j||i)&&(g=f[h],I(b,angular.lowercase(g))>-1))return g}}if(a){var k=a.split("_");if(k.length>1&&I(b,angular.lowercase(k[0]))>-1)return k[0]}return a},L=function(a,b){if(!a&&!b)return t;if(a&&!b){if(angular.isString(a))return t[a]}else angular.isObject(t[a])||(t[a]={}),angular.extend(t[a],M(b));return this};this.translations=L,this.cloakClassName=function(a){return a?(x=a,this):x};var M=function(a,b,c,d){var e,f,g,h;b||(b=[]),c||(c={});for(e in a)Object.prototype.hasOwnProperty.call(a,e)&&(h=a[e],angular.isObject(h)?M(h,b.concat(e),c,e):(f=b.length?""+b.join(A)+A+e:e,b.length&&e===d&&(g=""+b.join(A),c[g]="@:"+f),c[f]=h));return c};M.displayName="flatObject",this.addInterpolation=function(a){return w.push(a),this},this.useMessageFormatInterpolation=function(){return this.useInterpolation("$translateMessageFormatInterpolation")},this.useInterpolation=function(a){return n=a,this},this.useSanitizeValueStrategy=function(a){return c.useStrategy(a),this},this.preferredLanguage=function(a){return N(a),this};var N=function(a){return a&&(e=a),e};this.translationNotFoundIndicator=function(a){return this.translationNotFoundIndicatorLeft(a),this.translationNotFoundIndicatorRight(a),this},this.translationNotFoundIndicatorLeft=function(a){return a?(q=a,this):q},this.translationNotFoundIndicatorRight=function(a){return a?(r=a,this):r},this.fallbackLanguage=function(a){return O(a),this};var O=function(a){return a?(angular.isString(a)?(h=!0,g=[a]):angular.isArray(a)&&(h=!1,g=a),angular.isString(e)&&I(g,e)<0&&g.push(e),this):h?g[0]:g};this.use=function(a){if(a){if(!t[a]&&!o)throw new Error("$translateProvider couldn't find translationTable for langKey: '"+a+"'");return i=a,this}return i};var P=function(a){return a?(v=a,this):l?l+v:v};this.storageKey=P,this.useUrlLoader=function(a,b){return this.useLoader("$translateUrlLoader",angular.extend({url:a},b))},this.useStaticFilesLoader=function(a){return this.useLoader("$translateStaticFilesLoader",a)},this.useLoader=function(a,b){return o=a,p=b||{},this},this.useLocalStorage=function(){return this.useStorage("$translateLocalStorage")},this.useCookieStorage=function(){return this.useStorage("$translateCookieStorage")},this.useStorage=function(a){return k=a,this},this.storagePrefix=function(a){return a?(l=a,this):a},this.useMissingTranslationHandlerLog=function(){return this.useMissingTranslationHandler("$translateMissingTranslationHandlerLog")},this.useMissingTranslationHandler=function(a){return m=a,this},this.usePostCompiling=function(a){return y=!!a,this},this.forceAsyncReload=function(a){return z=!!a,this},this.uniformLanguageTag=function(a){return a?angular.isString(a)&&(a={standard:a}):a={},D=a.standard,this},this.determinePreferredLanguage=function(a){var b=a&&angular.isFunction(a)?a():H();return e=u.length?K(b):b,this},this.registerAvailableLanguageKeys=function(a,b){return a?(u=a,b&&(f=b),this):u},this.useLoaderCache=function(a){return a===!1?s=void 0:a===!0?s=!0:"undefined"==typeof a?s="$translationCache":a&&(s=a),this},this.directivePriority=function(a){return void 0===a?B:(B=a,this)},this.statefulFilter=function(a){return void 0===a?C:(C=a,this)},this.$get=["$log","$injector","$rootScope","$q",function(a,b,c,d){var f,l,u,A=b.get(n||"$translateDefaultInterpolation"),D=!1,E={},G={},H=function(a,b,c,h){if(angular.isArray(a)){var j=function(a){for(var e={},f=[],g=function(a){var f=d.defer(),g=function(b){e[a]=b,f.resolve([a,b])};return H(a,b,c,h).then(g,g),f.promise},i=0,j=a.length;j>i;i++)f.push(g(a[i]));return d.all(f).then(function(){return e})};return j(a)}var m=d.defer();a&&(a=J.apply(a));var n=function(){var a=e?G[e]:G[i];if(l=0,k&&!a){var b=f.get(v);if(a=G[b],g&&g.length){var c=I(g,b);l=0===c?1:0,I(g,e)<0&&g.push(e)}}return a}();if(n){var o=function(){aa(a,b,c,h).then(m.resolve,m.reject)};o.displayName="promiseResolved",n["finally"](o,m.reject)}else aa(a,b,c,h).then(m.resolve,m.reject);return m.promise},Q=function(a){return q&&(a=[q,a].join(" ")),r&&(a=[a,r].join(" ")),a},R=function(a){i=a,c.$emit("$translateChangeSuccess",{language:a}),k&&f.put(H.storageKey(),i),A.setLocale(i);var b=function(a,b){E[b].setLocale(i)};b.displayName="eachInterpolatorLocaleSetter",angular.forEach(E,b),c.$emit("$translateChangeEnd",{language:a})},S=function(a){if(!a)throw"No language key specified for loading.";var e=d.defer();c.$emit("$translateLoadingStart",{language:a}),D=!0;var f=s;"string"==typeof f&&(f=b.get(f));var g=angular.extend({},p,{key:a,$http:angular.extend({},{cache:f},p.$http)}),h=function(b){var d={};c.$emit("$translateLoadingSuccess",{language:a}),angular.isArray(b)?angular.forEach(b,function(a){angular.extend(d,M(a))}):angular.extend(d,M(b)),D=!1,e.resolve({key:a,table:d}),c.$emit("$translateLoadingEnd",{language:a})};h.displayName="onLoaderSuccess";var i=function(a){c.$emit("$translateLoadingError",{language:a}),e.reject(a),c.$emit("$translateLoadingEnd",{language:a})};return i.displayName="onLoaderError",b.get(o)(g).then(h,i),e.promise};if(k&&(f=b.get(k),!f.get||!f.put))throw new Error("Couldn't use storage '"+k+"', missing get() or put() method!");if(w.length){var T=function(a){var c=b.get(a);c.setLocale(e||i),E[c.getInterpolationIdentifier()]=c};T.displayName="interpolationFactoryAdder",angular.forEach(w,T)}var U=function(a){var b=d.defer();if(Object.prototype.hasOwnProperty.call(t,a))b.resolve(t[a]);else if(G[a]){var c=function(a){L(a.key,a.table),b.resolve(a.table)};c.displayName="translationTableResolver",G[a].then(c,b.reject)}else b.reject();return b.promise},V=function(a,b,c,e){var f=d.defer(),g=function(d){if(Object.prototype.hasOwnProperty.call(d,b)){e.setLocale(a);var g=d[b];"@:"===g.substr(0,2)?V(a,g.substr(2),c,e).then(f.resolve,f.reject):f.resolve(e.interpolate(d[b],c)),e.setLocale(i)}else f.reject()};return g.displayName="fallbackTranslationResolver",U(a).then(g,f.reject),f.promise},W=function(a,b,c,d){var e,f=t[a];if(f&&Object.prototype.hasOwnProperty.call(f,b)){if(d.setLocale(a),e=d.interpolate(f[b],c),"@:"===e.substr(0,2))return W(a,e.substr(2),c,d);d.setLocale(i)}return e},X=function(a,c){if(m){var d=b.get(m)(a,i,c);return void 0!==d?d:a}return a},Y=function(a,b,c,e,f){var h=d.defer();if(a<g.length){var i=g[a];V(i,b,c,e).then(h.resolve,function(){Y(a+1,b,c,e,f).then(h.resolve)})}else f?h.resolve(f):h.resolve(X(b,c));return h.promise},Z=function(a,b,c,d){var e;if(a<g.length){var f=g[a];e=W(f,b,c,d),e||(e=Z(a+1,b,c,d))}return e},$=function(a,b,c,d){return Y(u>0?u:l,a,b,c,d)},_=function(a,b,c){return Z(u>0?u:l,a,b,c)},aa=function(a,b,c,e){var f=d.defer(),h=i?t[i]:t,j=c?E[c]:A;if(h&&Object.prototype.hasOwnProperty.call(h,a)){var k=h[a];"@:"===k.substr(0,2)?H(k.substr(2),b,c,e).then(f.resolve,f.reject):f.resolve(j.interpolate(k,b))}else{var l;m&&!D&&(l=X(a,b)),i&&g&&g.length?$(a,b,j,e).then(function(a){f.resolve(a)},function(a){f.reject(Q(a))}):m&&!D&&l?e?f.resolve(e):f.resolve(l):e?f.resolve(e):f.reject(Q(a))}return f.promise},ba=function(a,b,c){var d,e=i?t[i]:t,f=A;if(E&&Object.prototype.hasOwnProperty.call(E,c)&&(f=E[c]),e&&Object.prototype.hasOwnProperty.call(e,a)){var h=e[a];d="@:"===h.substr(0,2)?ba(h.substr(2),b,c):f.interpolate(h,b)}else{var j;m&&!D&&(j=X(a,b)),i&&g&&g.length?(l=0,d=_(a,b,f)):d=m&&!D&&j?j:Q(a)}return d},ca=function(a){j===a&&(j=void 0),G[a]=void 0};if(H.preferredLanguage=function(a){return a&&N(a),e},H.cloakClassName=function(){return x},H.fallbackLanguage=function(a){if(void 0!==a&&null!==a){if(O(a),o&&g&&g.length)for(var b=0,c=g.length;c>b;b++)G[g[b]]||(G[g[b]]=S(g[b]));H.use(H.use())}return h?g[0]:g},H.useFallbackLanguage=function(a){if(void 0!==a&&null!==a)if(a){var b=I(g,a);b>-1&&(u=b)}else u=0},H.proposedLanguage=function(){return j},H.storage=function(){return f},H.use=function(a){if(!a)return i;var b=d.defer();c.$emit("$translateChangeStart",{language:a});var e=K(a);return e&&(a=e),!z&&t[a]||!o||G[a]?j===a&&G[a]?G[a].then(function(a){return b.resolve(a.key),a},function(a){return b.reject(a),d.reject(a)}):(b.resolve(a),R(a)):(j=a,G[a]=S(a).then(function(a){return L(a.key,a.table),b.resolve(a.key),R(a.key),a},function(a){return c.$emit("$translateChangeError",{language:a}),b.reject(a),c.$emit("$translateChangeEnd",{language:a}),d.reject(a)}),G[a]["finally"](function(){ca(a)})),b.promise},H.storageKey=function(){return P()},H.isPostCompilingEnabled=function(){return y},H.isForceAsyncReloadEnabled=function(){return z},H.refresh=function(a){function b(){f.resolve(),c.$emit("$translateRefreshEnd",{language:a})}function e(){f.reject(),c.$emit("$translateRefreshEnd",{language:a})}if(!o)throw new Error("Couldn't refresh translation table, no loader registered!");var f=d.defer();if(c.$emit("$translateRefreshStart",{language:a}),a)if(t[a]){var h=function(c){L(c.key,c.table),a===i&&R(i),b()};h.displayName="refreshPostProcessor",S(a).then(h,e)}else e();else{var j=[],k={};if(g&&g.length)for(var l=0,m=g.length;m>l;l++)j.push(S(g[l])),k[g[l]]=!0;i&&!k[i]&&j.push(S(i));var n=function(a){t={},angular.forEach(a,function(a){L(a.key,a.table)}),i&&R(i),b()};n.displayName="refreshPostProcessor",d.all(j).then(n,e)}return f.promise},H.instant=function(a,b,c){if(null===a||angular.isUndefined(a))return a;if(angular.isArray(a)){for(var d={},f=0,h=a.length;h>f;f++)d[a[f]]=H.instant(a[f],b,c);return d}if(angular.isString(a)&&a.length<1)return a;a&&(a=J.apply(a));var j,k=[];e&&k.push(e),i&&k.push(i),g&&g.length&&(k=k.concat(g));for(var l=0,n=k.length;n>l;l++){var o=k[l];if(t[o]&&("undefined"!=typeof t[o][a]?j=ba(a,b,c):(q||r)&&(j=Q(a))),"undefined"!=typeof j)break}return j||""===j||(j=A.interpolate(a,b),m&&!D&&(j=X(a,b))),j},H.versionInfo=function(){return F},H.loaderCache=function(){return s},H.directivePriority=function(){return B},H.statefulFilter=function(){return C},o&&(angular.equals(t,{})&&H.use(H.use()),g&&g.length))for(var da=function(a){return L(a.key,a.table),c.$emit("$translateChangeEnd",{language:a.key}),a},ea=0,fa=g.length;fa>ea;ea++){var ga=g[ea];(z||!t[ga])&&(G[ga]=S(ga).then(da))}return H}]}function d(a,b){"use strict";var c,d={},e="default";return d.setLocale=function(a){c=a},d.getInterpolationIdentifier=function(){return e},d.useSanitizeValueStrategy=function(a){return b.useStrategy(a),this},d.interpolate=function(c,d){d=d||{},d=b.sanitize(d,"params");var e=a(c)(d);return e=b.sanitize(e,"text")},d}function e(a,b,c,d,e,f){"use strict";var g=function(){return this.toString().replace(/^\s+|\s+$/g,"")};return{restrict:"AE",scope:!0,priority:a.directivePriority(),compile:function(b,h){var i=h.translateValues?h.translateValues:void 0,j=h.translateInterpolation?h.translateInterpolation:void 0,k=b[0].outerHTML.match(/translate-value-+/i),l="^(.*)("+c.startSymbol()+".*"+c.endSymbol()+")(.*)",m="^(.*)"+c.startSymbol()+"(.*)"+c.endSymbol()+"(.*)";return function(b,n,o){b.interpolateParams={},b.preText="",b.postText="";var p={},q=function(a,c,d){if(c.translateValues&&angular.extend(a,e(c.translateValues)(b.$parent)),k)for(var f in d)if(Object.prototype.hasOwnProperty.call(c,f)&&"translateValue"===f.substr(0,14)&&"translateValues"!==f){var g=angular.lowercase(f.substr(14,1))+f.substr(15);a[g]=d[f]}},r=function(a){if(angular.isFunction(r._unwatchOld)&&(r._unwatchOld(),r._unwatchOld=void 0),angular.equals(a,"")||!angular.isDefined(a)){var d=g.apply(n.text()).match(l);if(angular.isArray(d)){b.preText=d[1],b.postText=d[3],p.translate=c(d[2])(b.$parent);var e=n.text().match(m);angular.isArray(e)&&e[2]&&e[2].length&&(r._unwatchOld=b.$watch(e[2],function(a){p.translate=a,x()}))}else p.translate=n.text().replace(/^\s+|\s+$/g,"")}else p.translate=a;x()},s=function(a){o.$observe(a,function(b){p[a]=b,x()})};q(b.interpolateParams,o,h);var t=!0;o.$observe("translate",function(a){"undefined"==typeof a?r(""):""===a&&t||(p.translate=a,x()),t=!1});for(var u in o)o.hasOwnProperty(u)&&"translateAttr"===u.substr(0,13)&&s(u);if(o.$observe("translateDefault",function(a){b.defaultText=a}),i&&o.$observe("translateValues",function(a){a&&b.$parent.$watch(function(){angular.extend(b.interpolateParams,e(a)(b.$parent))})}),k){var v=function(a){o.$observe(a,function(c){var d=angular.lowercase(a.substr(14,1))+a.substr(15);b.interpolateParams[d]=c})};for(var w in o)Object.prototype.hasOwnProperty.call(o,w)&&"translateValue"===w.substr(0,14)&&"translateValues"!==w&&v(w)}var x=function(){for(var a in p)p.hasOwnProperty(a)&&void 0!==p[a]&&y(a,p[a],b,b.interpolateParams,b.defaultText)},y=function(b,c,d,e,f){c?a(c,e,j,f).then(function(a){z(a,d,!0,b)},function(a){z(a,d,!1,b)}):z(c,d,!1,b)},z=function(b,c,e,f){if("translate"===f){e||"undefined"==typeof c.defaultText||(b=c.defaultText),n.html(c.preText+b+c.postText);var g=a.isPostCompilingEnabled(),i="undefined"!=typeof h.translateCompile,j=i&&"false"!==h.translateCompile;(g&&!i||j)&&d(n.contents())(c)}else{e||"undefined"==typeof c.defaultText||(b=c.defaultText);var k=o.$attr[f];"data-"===k.substr(0,5)&&(k=k.substr(5)),k=k.substr(15),n.attr(k,b)}};(i||k||o.translateDefault)&&b.$watch("interpolateParams",x,!0);var A=f.$on("$translateChangeSuccess",x);n.text().length?r(o.translate?o.translate:""):o.translate&&r(o.translate),x(),b.$on("$destroy",A)}}}}function f(a,b){"use strict";return{compile:function(c){var d=function(){c.addClass(b.cloakClassName())},e=function(){c.removeClass(b.cloakClassName())},f=a.$on("$translateChangeEnd",function(){e(),f(),f=null});return d(),function(a,c,f){f.translateCloak&&f.translateCloak.length&&f.$observe("translateCloak",function(a){b(a).then(e,d)})}}}}function g(a,b){"use strict";var c=function(c,d,e){return angular.isObject(d)||(d=a(d)(this)),b.instant(c,d,e)};return b.statefulFilter()&&(c.$stateful=!0),c}function h(a){"use strict";return a("translations")}return angular.module("pascalprecht.translate",["ng"]).run(a),a.$inject=["$translate"],a.displayName="runTranslate",angular.module("pascalprecht.translate").provider("$translateSanitization",b),angular.module("pascalprecht.translate").constant("pascalprechtTranslateOverrider",{}).provider("$translate",c),c.$inject=["$STORAGE_KEY","$windowProvider","$translateSanitizationProvider","pascalprechtTranslateOverrider"],c.displayName="displayName",angular.module("pascalprecht.translate").factory("$translateDefaultInterpolation",d),d.$inject=["$interpolate","$translateSanitization"],d.displayName="$translateDefaultInterpolation",angular.module("pascalprecht.translate").constant("$STORAGE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("pascalprecht.translate").directive("translate",e),e.$inject=["$translate","$q","$interpolate","$compile","$parse","$rootScope"],e.displayName="translateDirective",angular.module("pascalprecht.translate").directive("translateCloak",f),f.$inject=["$rootScope","$translate"],f.displayName="translateCloakDirective",angular.module("pascalprecht.translate").filter("translate",g),g.$inject=["$parse","$translate"],g.displayName="translateFilterFactory",angular.module("pascalprecht.translate").factory("$translationCache",h),h.$inject=["$cacheFactory"],h.displayName="$translationCache","pascalprecht.translate"}),function(a,b){"function"==typeof define&&define.amd?define([],function(){return b()}):"object"==typeof exports?module.exports=b():b()}(this,function(){function a(a,b){"use strict";return function(c){if(!(c&&(angular.isArray(c.files)||angular.isString(c.prefix)&&angular.isString(c.suffix))))throw new Error("Couldn't load static files, no files and prefix or suffix specified!");c.files||(c.files=[{prefix:c.prefix,suffix:c.suffix}]);for(var d=function(d){if(!d||!angular.isString(d.prefix)||!angular.isString(d.suffix))throw new Error("Couldn't load static file, no prefix or suffix specified!");var e=a.defer();return b(angular.extend({url:[d.prefix,c.key,d.suffix].join(""),method:"GET",params:""},c.$http)).success(function(a){e.resolve(a)}).error(function(){e.reject(c.key)}),e.promise},e=a.defer(),f=[],g=c.files.length,h=0;g>h;h++)f.push(d({prefix:c.files[h].prefix,key:c.key,suffix:c.files[h].suffix}));return a.all(f).then(function(a){for(var b=a.length,c={},d=0;b>d;d++)for(var f in a[d])c[f]=a[d][f];e.resolve(c)},function(a){e.reject(a)}),e.promise}}return angular.module("pascalprecht.translate").factory("$translateStaticFilesLoader",a),a.$inject=["$q","$http"],a.displayName="$translateStaticFilesLoader","pascalprecht.translate"}),function(a,b){"function"==typeof define&&define.amd?define([],function(){return b()}):"object"==typeof exports?module.exports=b():b()}(this,function(){function a(a){"use strict";var b={get:function(b){return a.get(b)},set:function(b,c){a.put(b,c)},put:function(b,c){a.put(b,c)}};return b}return angular.module("pascalprecht.translate").factory("$translateCookieStorage",a),a.$inject=["$cookieStore"],a.displayName="$translateCookieStorage","pascalprecht.translate"}),function(a,b){"function"==typeof define&&define.amd?define([],function(){return b()}):"object"==typeof exports?module.exports=b():b()}(this,function(){function a(a,b){"use strict";var c=function(){var b;return{get:function(c){return b||(b=a.localStorage.getItem(c)),b},set:function(c,d){b=d,a.localStorage.setItem(c,d)},put:function(c,d){b=d,a.localStorage.setItem(c,d)}}}(),d="localStorage"in a;if(d){var e="pascalprecht.translate.storageTest";try{null!==a.localStorage?(a.localStorage.setItem(e,"foo"),a.localStorage.removeItem(e),d=!0):d=!1}catch(f){d=!1}}var g=d?c:b;return g}return angular.module("pascalprecht.translate").factory("$translateLocalStorage",a),a.$inject=["$window","$translateCookieStorage"],a.displayName="$translateLocalStorageFactory","pascalprecht.translate"}),angular.module("truncate",[]).filter("characters",function(){return function(a,b,c){if(isNaN(b))return a;if(0>=b)return"";if(a&&a.length>b){if(a=a.substring(0,b),c)for(;" "===a.charAt(a.length-1);)a=a.substr(0,a.length-1);else{var d=a.lastIndexOf(" ");-1!==d&&(a=a.substr(0,d))}return a+"…"}return a}}).filter("splitcharacters",function(){return function(a,b){if(isNaN(b))return a;if(0>=b)return"";if(a&&a.length>b){var c=a.substring(0,b/2),d=a.substring(a.length-b/2,a.length);return c+"..."+d}return a}}).filter("words",function(){return function(a,b){if(isNaN(b))return a;if(0>=b)return"";if(a){var c=a.split(/\s+/);c.length>b&&(a=c.slice(0,b).join(" ")+"…")}return a}}),angular.module("ui-notification",[]),angular.module("ui-notification").provider("Notification",function(){this.options={delay:5e3,startTop:10,startRight:10,verticalSpacing:10,horizontalSpacing:10,positionX:"right",positionY:"top",replaceMessage:!1,templateUrl:"angular-ui-notification.html"},this.setOptions=function(a){if(!angular.isObject(a))throw new Error("Options should be an object!");this.options=angular.extend({},this.options,a)},this.$get=["$timeout","$http","$compile","$templateCache","$rootScope","$injector","$sce","$q","$window",function(a,b,c,d,e,f,g,h,i){var j=this.options,k=j.startTop,l=j.startRight,m=j.verticalSpacing,n=j.horizontalSpacing,o=j.delay,p=[],q=!1,r=function(f,r){var s=h.defer();return"object"!=typeof f&&(f={message:f}),f.scope=f.scope?f.scope:e,f.template=f.templateUrl?f.templateUrl:j.templateUrl,f.delay=angular.isUndefined(f.delay)?o:f.delay,f.type=r?r:"",f.positionY=f.positionY?f.positionY:j.positionY,f.positionX=f.positionX?f.positionX:j.positionX,f.replaceMessage=f.replaceMessage?f.replaceMessage:j.replaceMessage,b.get(f.template,{cache:d}).success(function(b){var d=f.scope.$new();d.message=g.trustAsHtml(f.message),d.title=g.trustAsHtml(f.title),d.t=f.type.substr(0,1),d.delay=f.delay;var e=function(){for(var a=0,b=0,c=k,d=l,e=[],g=p.length-1;g>=0;g--){var h=p[g];if(f.replaceMessage&&g<p.length-1)h.addClass("killed");else{var i=parseInt(h[0].offsetHeight),j=parseInt(h[0].offsetWidth),o=e[h._positionY+h._positionX];q+i>window.innerHeight&&(o=k,b++,a=0);var q=c=o?0===a?o:o+m:k,r=d+b*(n+j);h.css(h._positionY,q+"px"),"center"==h._positionX?h.css("left",parseInt(window.innerWidth/2-j/2)+"px"):h.css(h._positionX,r+"px"),e[h._positionY+h._positionX]=q+i,a++}}},h=c(b)(d);h._positionY=f.positionY,h._positionX=f.positionX,h.addClass(f.type),h.bind("webkitTransitionEnd oTransitionEnd otransitionend transitionend msTransitionEnd click",function(a){a=a.originalEvent||a,("click"===a.type||"opacity"===a.propertyName&&a.elapsedTime>=1)&&(h.remove(),p.splice(p.indexOf(h),1),e())}),angular.isNumber(f.delay)&&a(function(){h.addClass("killed")},f.delay),angular.element(document.getElementsByTagName("body")).append(h);var j=-(parseInt(h[0].offsetHeight)+50);h.css(h._positionY,j+"px"),p.push(h),d._templateElement=h,d.kill=function(b){b?(p.splice(p.indexOf(d._templateElement),1),d._templateElement.remove(),a(e)):d._templateElement.addClass("killed")},a(e),q||(angular.element(i).bind("resize",function(){a(e)}),q=!0),s.resolve(d)}).error(function(a){throw new Error("Template ("+f.template+") could not be loaded. "+a)}),s.promise};return r.primary=function(a){return this(a,"primary")},r.error=function(a){return this(a,"error")},r.success=function(a){return this(a,"success")},r.info=function(a){return this(a,"info")},r.warning=function(a){return this(a,"warning")},r.clearAll=function(){angular.forEach(p,function(a){a.addClass("killed")})},r}]}),angular.module("ui-notification").run(["$templateCache",function(a){a.put("angular-ui-notification.html",'<div class="ui-notification"><h3 ng-show="title" ng-bind-html="title"></h3><div class="message" ng-bind-html="message"></div></div>')}]),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(a,b,c){"use strict";function d(a,b){return N(new(N(function(){},{prototype:a})),b)}function e(a){return M(arguments,function(b){b!==a&&M(b,function(b,c){a.hasOwnProperty(c)||(a[c]=b)})}),a}function f(a,b){var c=[];for(var d in a.path){if(a.path[d]!==b.path[d])break;c.push(a.path[d])}return c}function g(a){if(Object.keys)return Object.keys(a);var b=[];return M(a,function(a,c){b.push(c)}),b}function h(a,b){if(Array.prototype.indexOf)return a.indexOf(b,Number(arguments[2])||0);var c=a.length>>>0,d=Number(arguments[2])||0;for(d=0>d?Math.ceil(d):Math.floor(d),0>d&&(d+=c);c>d;d++)if(d in a&&a[d]===b)return d;return-1}function i(a,b,c,d){var e,i=f(c,d),j={},k=[];for(var l in i)if(i[l].params&&(e=g(i[l].params),e.length))for(var m in e)h(k,e[m])>=0||(k.push(e[m]),j[e[m]]=a[e[m]]);return N({},j,b)}function j(a,b,c){if(!c){c=[];for(var d in a)c.push(d)}for(var e=0;e<c.length;e++){var f=c[e];if(a[f]!=b[f])return!1}return!0}function k(a,b){var c={};return M(a,function(a){c[a]=b[a]}),c}function l(a){var b={},c=Array.prototype.concat.apply(Array.prototype,Array.prototype.slice.call(arguments,1));return M(c,function(c){c in a&&(b[c]=a[c])}),b}function m(a){var b={},c=Array.prototype.concat.apply(Array.prototype,Array.prototype.slice.call(arguments,1));for(var d in a)-1==h(c,d)&&(b[d]=a[d]);return b}function n(a,b){var c=L(a),d=c?[]:{};return M(a,function(a,e){b(a,e)&&(d[c?d.length:e]=a)}),d}function o(a,b){var c=L(a)?[]:{};return M(a,function(a,d){c[d]=b(a,d)}),c}function p(a,b){var d=1,f=2,i={},j=[],k=i,l=N(a.when(i),{$$promises:i,$$values:i});this.study=function(i){function n(a,c){if(s[c]!==f){if(r.push(c),s[c]===d)throw r.splice(0,h(r,c)),new Error("Cyclic dependency: "+r.join(" -> "));if(s[c]=d,J(a))q.push(c,[function(){return b.get(a)}],j);else{var e=b.annotate(a);M(e,function(a){a!==c&&i.hasOwnProperty(a)&&n(i[a],a)}),q.push(c,a,e)}r.pop(),s[c]=f}}function o(a){return K(a)&&a.then&&a.$$promises}if(!K(i))throw new Error("'invocables' must be an object");var p=g(i||{}),q=[],r=[],s={};return M(i,n),i=r=s=null,function(d,f,g){function h(){--u||(v||e(t,f.$$values),r.$$values=t,r.$$promises=r.$$promises||!0,delete r.$$inheritedValues,n.resolve(t))}function i(a){r.$$failure=a,n.reject(a)}function j(c,e,f){function j(a){l.reject(a),i(a)}function k(){if(!H(r.$$failure))try{l.resolve(b.invoke(e,g,t)),l.promise.then(function(a){t[c]=a,h()},j)}catch(a){j(a)}}var l=a.defer(),m=0;M(f,function(a){s.hasOwnProperty(a)&&!d.hasOwnProperty(a)&&(m++,s[a].then(function(b){t[a]=b,--m||k()},j))}),m||k(),s[c]=l.promise}if(o(d)&&g===c&&(g=f,f=d,d=null),d){if(!K(d))throw new Error("'locals' must be an object")}else d=k;if(f){if(!o(f))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else f=l;var n=a.defer(),r=n.promise,s=r.$$promises={},t=N({},d),u=1+q.length/3,v=!1;if(H(f.$$failure))return i(f.$$failure),r;f.$$inheritedValues&&e(t,m(f.$$inheritedValues,p)),N(s,f.$$promises),f.$$values?(v=e(t,m(f.$$values,p)),r.$$inheritedValues=m(f.$$values,p),h()):(f.$$inheritedValues&&(r.$$inheritedValues=m(f.$$inheritedValues,p)),f.then(h,i));for(var w=0,x=q.length;x>w;w+=3)d.hasOwnProperty(q[w])?h():j(q[w],q[w+1],q[w+2]);return r}},this.resolve=function(a,b,c,d){return this.study(a)(b,c,d)}}function q(a,b,c){this.fromConfig=function(a,b,c){return H(a.template)?this.fromString(a.template,b):H(a.templateUrl)?this.fromUrl(a.templateUrl,b):H(a.templateProvider)?this.fromProvider(a.templateProvider,b,c):null},this.fromString=function(a,b){return I(a)?a(b):a},this.fromUrl=function(c,d){return I(c)&&(c=c(d)),null==c?null:a.get(c,{cache:b,headers:{Accept:"text/html"}}).then(function(a){return a.data})},this.fromProvider=function(a,b,d){return c.invoke(a,null,d||{params:b})}}function r(a,b,e){function f(b,c,d,e){if(q.push(b),o[b])return o[b];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(b))throw new Error("Invalid parameter name '"+b+"' in pattern '"+a+"'");if(p[b])throw new Error("Duplicate parameter name '"+b+"' in pattern '"+a+"'");return p[b]=new P.Param(b,c,d,e),p[b]}function g(a,b,c,d){var e=["",""],f=a.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!b)return f;switch(c){case!1:e=["(",")"+(d?"?":"")];break;case!0:e=["?(",")?"];break;default:e=["("+c+"|",")?"]}return f+e[0]+b+e[1]}function h(e,f){var g,h,i,j,k;return g=e[2]||e[3],k=b.params[g],i=a.substring(m,e.index),h=f?e[4]:e[4]||("*"==e[1]?".*":null),j=P.type(h||"string")||d(P.type("string"),{pattern:new RegExp(h,b.caseInsensitive?"i":c)}),{id:g,regexp:h,segment:i,type:j,cfg:k}}b=N({params:{}},K(b)?b:{});var i,j=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,k=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l="^",m=0,n=this.segments=[],o=e?e.params:{},p=this.params=e?e.params.$$new():new P.ParamSet,q=[];this.source=a;for(var r,s,t;(i=j.exec(a))&&(r=h(i,!1),!(r.segment.indexOf("?")>=0));)s=f(r.id,r.type,r.cfg,"path"),l+=g(r.segment,s.type.pattern.source,s.squash,s.isOptional),n.push(r.segment),m=j.lastIndex;t=a.substring(m);var u=t.indexOf("?");if(u>=0){var v=this.sourceSearch=t.substring(u);if(t=t.substring(0,u),this.sourcePath=a.substring(0,m+u),v.length>0)for(m=0;i=k.exec(v);)r=h(i,!0),s=f(r.id,r.type,r.cfg,"search"),m=j.lastIndex}else this.sourcePath=a,this.sourceSearch="";l+=g(t)+(b.strict===!1?"/?":"")+"$",n.push(t),this.regexp=new RegExp(l,b.caseInsensitive?"i":c),this.prefix=n[0],this.$$paramNames=q}function s(a){N(this,a)}function t(){function a(a){return null!=a?a.toString().replace(/\//g,"%2F"):a}function e(a){return null!=a?a.toString().replace(/%2F/g,"/"):a}function f(){return{strict:p,caseInsensitive:m}}function i(a){return I(a)||L(a)&&I(a[a.length-1])}function j(){for(;w.length;){var a=w.shift();if(a.pattern)throw new Error("You cannot override a type's .pattern at runtime.");b.extend(u[a.name],l.invoke(a.def))}}function k(a){N(this,a||{})}P=this;var l,m=!1,p=!0,q=!1,u={},v=!0,w=[],x={string:{encode:a,decode:e,is:function(a){return null==a||!H(a)||"string"==typeof a},pattern:/[^\/]*/},"int":{encode:a,decode:function(a){return parseInt(a,10)},is:function(a){return H(a)&&this.decode(a.toString())===a},pattern:/\d+/},bool:{encode:function(a){return a?1:0},decode:function(a){return 0!==parseInt(a,10)},is:function(a){return a===!0||a===!1},pattern:/0|1/},date:{encode:function(a){return this.is(a)?[a.getFullYear(),("0"+(a.getMonth()+1)).slice(-2),("0"+a.getDate()).slice(-2)].join("-"):c},decode:function(a){if(this.is(a))return a;var b=this.capture.exec(a);return b?new Date(b[1],b[2]-1,b[3]):c},is:function(a){return a instanceof Date&&!isNaN(a.valueOf())},equals:function(a,b){return this.is(a)&&this.is(b)&&a.toISOString()===b.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:b.toJson,decode:b.fromJson,is:b.isObject,equals:b.equals,pattern:/[^\/]*/},any:{encode:b.identity,decode:b.identity,equals:b.equals,pattern:/.*/}};t.$$getDefaultValue=function(a){if(!i(a.value))return a.value;if(!l)throw new Error("Injectable functions cannot be called at configuration time");return l.invoke(a.value)},this.caseInsensitive=function(a){return H(a)&&(m=a),m},this.strictMode=function(a){return H(a)&&(p=a),p},this.defaultSquashPolicy=function(a){if(!H(a))return q;if(a!==!0&&a!==!1&&!J(a))throw new Error("Invalid squash policy: "+a+". Valid policies: false, true, arbitrary-string");return q=a,a},this.compile=function(a,b){return new r(a,N(f(),b))},this.isMatcher=function(a){if(!K(a))return!1;var b=!0;return M(r.prototype,function(c,d){I(c)&&(b=b&&H(a[d])&&I(a[d]))}),b},this.type=function(a,b,c){if(!H(b))return u[a];if(u.hasOwnProperty(a))throw new Error("A type named '"+a+"' has already been defined.");return u[a]=new s(N({name:a},b)),c&&(w.push({name:a,def:c}),v||j()),this},M(x,function(a,b){u[b]=new s(N({name:b},a))}),u=d(u,{}),this.$get=["$injector",function(a){return l=a,v=!1,j(),M(x,function(a,b){u[b]||(u[b]=new s(a))}),this}],this.Param=function(a,b,d,e){function f(a){var b=K(a)?g(a):[],c=-1===h(b,"value")&&-1===h(b,"type")&&-1===h(b,"squash")&&-1===h(b,"array");return c&&(a={value:a}),a.$$fn=i(a.value)?a.value:function(){return a.value},a}function j(b,c,d){if(b.type&&c)throw new Error("Param '"+a+"' has two type configurations.");return c?c:b.type?b.type instanceof s?b.type:new s(b.type):"config"===d?u.any:u.string}function k(){var b={array:"search"===e?"auto":!1},c=a.match(/\[\]$/)?{array:!0}:{};return N(b,c,d).array}function m(a,b){var c=a.squash;if(!b||c===!1)return!1;if(!H(c)||null==c)return q;if(c===!0||J(c))return c;throw new Error("Invalid squash policy: '"+c+"'. Valid policies: false, true, or arbitrary string")}function p(a,b,d,e){var f,g,i=[{from:"",to:d||b?c:""},{from:null,to:d||b?c:""}];return f=L(a.replace)?a.replace:[],J(e)&&f.push({from:e,to:c}),g=o(f,function(a){return a.from}),n(i,function(a){return-1===h(g,a.from)}).concat(f)}function r(){if(!l)throw new Error("Injectable functions cannot be called at configuration time");var a=l.invoke(d.$$fn);if(null!==a&&a!==c&&!w.type.is(a))throw new Error("Default value ("+a+") for parameter '"+w.id+"' is not an instance of Type ("+w.type.name+")");return a}function t(a){function b(a){return function(b){return b.from===a}}function c(a){var c=o(n(w.replace,b(a)),function(a){return a.to});return c.length?c[0]:a}return a=c(a),H(a)?w.type.$normalize(a):r()}function v(){return"{Param:"+a+" "+b+" squash: '"+z+"' optional: "+y+"}"}var w=this;d=f(d),b=j(d,b,e);var x=k();b=x?b.$asArray(x,"search"===e):b,"string"!==b.name||x||"path"!==e||d.value!==c||(d.value="");
+var y=d.value!==c,z=m(d,y),A=p(d,x,y,z);N(this,{id:a,type:b,location:e,array:x,squash:z,replace:A,isOptional:y,value:t,dynamic:c,config:d,toString:v})},k.prototype={$$new:function(){return d(this,N(new k,{$$parent:this}))},$$keys:function(){for(var a=[],b=[],c=this,d=g(k.prototype);c;)b.push(c),c=c.$$parent;return b.reverse(),M(b,function(b){M(g(b),function(b){-1===h(a,b)&&-1===h(d,b)&&a.push(b)})}),a},$$values:function(a){var b={},c=this;return M(c.$$keys(),function(d){b[d]=c[d].value(a&&a[d])}),b},$$equals:function(a,b){var c=!0,d=this;return M(d.$$keys(),function(e){var f=a&&a[e],g=b&&b[e];d[e].type.equals(f,g)||(c=!1)}),c},$$validates:function(a){var d,e,f,g,h,i=this.$$keys();for(d=0;d<i.length&&(e=this[i[d]],f=a[i[d]],f!==c&&null!==f||!e.isOptional);d++){if(g=e.type.$normalize(f),!e.type.is(g))return!1;if(h=e.type.encode(g),b.isString(h)&&!e.type.pattern.exec(h))return!1}return!0},$$parent:c},this.ParamSet=k}function u(a,d){function e(a){var b=/^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(a.source);return null!=b?b[1].replace(/\\(.)/g,"$1"):""}function f(a,b){return a.replace(/\$(\$|\d{1,2})/,function(a,c){return b["$"===c?0:Number(c)]})}function g(a,b,c){if(!c)return!1;var d=a.invoke(b,b,{$match:c});return H(d)?d:!0}function h(d,e,f,g){function h(a,b,c){return"/"===p?a:b?p.slice(0,-1)+a:c?p.slice(1)+a:a}function m(a){function b(a){var b=a(f,d);return b?(J(b)&&d.replace().url(b),!0):!1}if(!a||!a.defaultPrevented){o&&d.url()===o;o=c;var e,g=j.length;for(e=0;g>e;e++)if(b(j[e]))return;k&&b(k)}}function n(){return i=i||e.$on("$locationChangeSuccess",m)}var o,p=g.baseHref(),q=d.url();return l||n(),{sync:function(){m()},listen:function(){return n()},update:function(a){return a?void(q=d.url()):void(d.url()!==q&&(d.url(q),d.replace()))},push:function(a,b,e){var f=a.format(b||{});null!==f&&b&&b["#"]&&(f+="#"+b["#"]),d.url(f),o=e&&e.$$avoidResync?d.url():c,e&&e.replace&&d.replace()},href:function(c,e,f){if(!c.validates(e))return null;var g=a.html5Mode();b.isObject(g)&&(g=g.enabled);var i=c.format(e);if(f=f||{},g||null===i||(i="#"+a.hashPrefix()+i),null!==i&&e&&e["#"]&&(i+="#"+e["#"]),i=h(i,g,f.absolute),!f.absolute||!i)return i;var j=!g&&i?"/":"",k=d.port();return k=80===k||443===k?"":":"+k,[d.protocol(),"://",d.host(),k,j,i].join("")}}}var i,j=[],k=null,l=!1;this.rule=function(a){if(!I(a))throw new Error("'rule' must be a function");return j.push(a),this},this.otherwise=function(a){if(J(a)){var b=a;a=function(){return b}}else if(!I(a))throw new Error("'rule' must be a function");return k=a,this},this.when=function(a,b){var c,h=J(b);if(J(a)&&(a=d.compile(a)),!h&&!I(b)&&!L(b))throw new Error("invalid 'handler' in when()");var i={matcher:function(a,b){return h&&(c=d.compile(b),b=["$match",function(a){return c.format(a)}]),N(function(c,d){return g(c,b,a.exec(d.path(),d.search()))},{prefix:J(a.prefix)?a.prefix:""})},regex:function(a,b){if(a.global||a.sticky)throw new Error("when() RegExp must not be global or sticky");return h&&(c=b,b=["$match",function(a){return f(c,a)}]),N(function(c,d){return g(c,b,a.exec(d.path()))},{prefix:e(a)})}},j={matcher:d.isMatcher(a),regex:a instanceof RegExp};for(var k in j)if(j[k])return this.rule(i[k](a,b));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(a){a===c&&(a=!0),l=a},this.$get=h,h.$inject=["$location","$rootScope","$injector","$browser"]}function v(a,e){function f(a){return 0===a.indexOf(".")||0===a.indexOf("^")}function m(a,b){if(!a)return c;var d=J(a),e=d?a:a.name,g=f(e);if(g){if(!b)throw new Error("No reference point given for path '"+e+"'");b=m(b);for(var h=e.split("."),i=0,j=h.length,k=b;j>i;i++)if(""!==h[i]||0!==i){if("^"!==h[i])break;if(!k.parent)throw new Error("Path '"+e+"' not valid for state '"+b.name+"'");k=k.parent}else k=b;h=h.slice(i).join("."),e=k.name+(k.name&&h?".":"")+h}var l=z[e];return!l||!d&&(d||l!==a&&l.self!==a)?c:l}function n(a,b){A[a]||(A[a]=[]),A[a].push(b)}function p(a){for(var b=A[a]||[];b.length;)q(b.shift())}function q(b){b=d(b,{self:b,resolve:b.resolve||{},toString:function(){return this.name}});var c=b.name;if(!J(c)||c.indexOf("@")>=0)throw new Error("State must have a valid name");if(z.hasOwnProperty(c))throw new Error("State '"+c+"'' is already defined");var e=-1!==c.indexOf(".")?c.substring(0,c.lastIndexOf(".")):J(b.parent)?b.parent:K(b.parent)&&J(b.parent.name)?b.parent.name:"";if(e&&!z[e])return n(e,b.self);for(var f in C)I(C[f])&&(b[f]=C[f](b,C.$delegates[f]));return z[c]=b,!b[B]&&b.url&&a.when(b.url,["$match","$stateParams",function(a,c){y.$current.navigable==b&&j(a,c)||y.transitionTo(b,a,{inherit:!0,location:!1})}]),p(c),b}function r(a){return a.indexOf("*")>-1}function s(a){for(var b=a.split("."),c=y.$current.name.split("."),d=0,e=b.length;e>d;d++)"*"===b[d]&&(c[d]="*");return"**"===b[0]&&(c=c.slice(h(c,b[1])),c.unshift("**")),"**"===b[b.length-1]&&(c.splice(h(c,b[b.length-2])+1,Number.MAX_VALUE),c.push("**")),b.length!=c.length?!1:c.join("")===b.join("")}function t(a,b){return J(a)&&!H(b)?C[a]:I(b)&&J(a)?(C[a]&&!C.$delegates[a]&&(C.$delegates[a]=C[a]),C[a]=b,this):this}function u(a,b){return K(a)?b=a:b.name=a,q(b),this}function v(a,e,f,h,l,n,p,q,t){function u(b,c,d,f){var g=a.$broadcast("$stateNotFound",b,c,d);if(g.defaultPrevented)return p.update(),D;if(!g.retry)return null;if(f.$retry)return p.update(),E;var h=y.transition=e.when(g.retry);return h.then(function(){return h!==y.transition?A:(b.options.$retry=!0,y.transitionTo(b.to,b.toParams,b.options))},function(){return D}),p.update(),h}function v(a,c,d,g,i,j){function m(){var c=[];return M(a.views,function(d,e){var g=d.resolve&&d.resolve!==a.resolve?d.resolve:{};g.$template=[function(){return f.load(e,{view:d,locals:i.globals,params:n,notify:j.notify})||""}],c.push(l.resolve(g,i.globals,i.resolve,a).then(function(c){if(I(d.controllerProvider)||L(d.controllerProvider)){var f=b.extend({},g,i.globals);c.$$controller=h.invoke(d.controllerProvider,null,f)}else c.$$controller=d.controller;c.$$state=a,c.$$controllerAs=d.controllerAs,i[e]=c}))}),e.all(c).then(function(){return i.globals})}var n=d?c:k(a.params.$$keys(),c),o={$stateParams:n};i.resolve=l.resolve(a.resolve,o,i.resolve,a);var p=[i.resolve.then(function(a){i.globals=a})];return g&&p.push(g),e.all(p).then(m).then(function(a){return i})}var A=e.reject(new Error("transition superseded")),C=e.reject(new Error("transition prevented")),D=e.reject(new Error("transition aborted")),E=e.reject(new Error("transition failed"));return x.locals={resolve:null,globals:{$stateParams:{}}},y={params:{},current:x.self,$current:x,transition:null},y.reload=function(a){return y.transitionTo(y.current,n,{reload:a||!0,inherit:!1,notify:!0})},y.go=function(a,b,c){return y.transitionTo(a,b,N({inherit:!0,relative:y.$current},c))},y.transitionTo=function(b,c,f){c=c||{},f=N({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},f||{});var g,j=y.$current,l=y.params,o=j.path,q=m(b,f.relative),r=c["#"];if(!H(q)){var s={to:b,toParams:c,options:f},t=u(s,j.self,l,f);if(t)return t;if(b=s.to,c=s.toParams,f=s.options,q=m(b,f.relative),!H(q)){if(!f.relative)throw new Error("No such state '"+b+"'");throw new Error("Could not resolve '"+b+"' from state '"+f.relative+"'")}}if(q[B])throw new Error("Cannot transition to abstract state '"+b+"'");if(f.inherit&&(c=i(n,c||{},y.$current,q)),!q.params.$$validates(c))return E;c=q.params.$$values(c),b=q;var z=b.path,D=0,F=z[D],G=x.locals,I=[];if(f.reload){if(J(f.reload)||K(f.reload)){if(K(f.reload)&&!f.reload.name)throw new Error("Invalid reload state object");var L=f.reload===!0?o[0]:m(f.reload);if(f.reload&&!L)throw new Error("No such reload state '"+(J(f.reload)?f.reload:f.reload.name)+"'");for(;F&&F===o[D]&&F!==L;)G=I[D]=F.locals,D++,F=z[D]}}else for(;F&&F===o[D]&&F.ownParams.$$equals(c,l);)G=I[D]=F.locals,D++,F=z[D];if(w(b,c,j,l,G,f))return r&&(c["#"]=r),y.params=c,O(y.params,n),f.location&&b.navigable&&b.navigable.url&&(p.push(b.navigable.url,c,{$$avoidResync:!0,replace:"replace"===f.location}),p.update(!0)),y.transition=null,e.when(y.current);if(c=k(b.params.$$keys(),c||{}),f.notify&&a.$broadcast("$stateChangeStart",b.self,c,j.self,l).defaultPrevented)return a.$broadcast("$stateChangeCancel",b.self,c,j.self,l),p.update(),C;for(var M=e.when(G),P=D;P<z.length;P++,F=z[P])G=I[P]=d(G),M=v(F,c,F===b,M,G,f);var Q=y.transition=M.then(function(){var d,e,g;if(y.transition!==Q)return A;for(d=o.length-1;d>=D;d--)g=o[d],g.self.onExit&&h.invoke(g.self.onExit,g.self,g.locals.globals),g.locals=null;for(d=D;d<z.length;d++)e=z[d],e.locals=I[d],e.self.onEnter&&h.invoke(e.self.onEnter,e.self,e.locals.globals);return r&&(c["#"]=r),y.transition!==Q?A:(y.$current=b,y.current=b.self,y.params=c,O(y.params,n),y.transition=null,f.location&&b.navigable&&p.push(b.navigable.url,b.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===f.location}),f.notify&&a.$broadcast("$stateChangeSuccess",b.self,c,j.self,l),p.update(!0),y.current)},function(d){return y.transition!==Q?A:(y.transition=null,g=a.$broadcast("$stateChangeError",b.self,c,j.self,l,d),g.defaultPrevented||p.update(),e.reject(d))});return Q},y.is=function(a,b,d){d=N({relative:y.$current},d||{});var e=m(a,d.relative);return H(e)?y.$current!==e?!1:b?j(e.params.$$values(b),n):!0:c},y.includes=function(a,b,d){if(d=N({relative:y.$current},d||{}),J(a)&&r(a)){if(!s(a))return!1;a=y.$current.name}var e=m(a,d.relative);return H(e)?H(y.$current.includes[e.name])?b?j(e.params.$$values(b),n,g(b)):!0:!1:c},y.href=function(a,b,d){d=N({lossy:!0,inherit:!0,absolute:!1,relative:y.$current},d||{});var e=m(a,d.relative);if(!H(e))return null;d.inherit&&(b=i(n,b||{},y.$current,e));var f=e&&d.lossy?e.navigable:e;return f&&f.url!==c&&null!==f.url?p.href(f.url,k(e.params.$$keys().concat("#"),b||{}),{absolute:d.absolute}):null},y.get=function(a,b){if(0===arguments.length)return o(g(z),function(a){return z[a].self});var c=m(a,b||y.$current);return c&&c.self?c.self:null},y}function w(a,b,c,d,e,f){function g(a,b,c){function d(b){return"search"!=a.params[b].location}var e=a.params.$$keys().filter(d),f=l.apply({},[a.params].concat(e)),g=new P.ParamSet(f);return g.$$equals(b,c)}return!f.reload&&a===c&&(e===c.locals||a.self.reloadOnSearch===!1&&g(c,d,b))?!0:void 0}var x,y,z={},A={},B="abstract",C={parent:function(a){if(H(a.parent)&&a.parent)return m(a.parent);var b=/^(.+)\.[^.]+$/.exec(a.name);return b?m(b[1]):x},data:function(a){return a.parent&&a.parent.data&&(a.data=a.self.data=N({},a.parent.data,a.data)),a.data},url:function(a){var b=a.url,c={params:a.params||{}};if(J(b))return"^"==b.charAt(0)?e.compile(b.substring(1),c):(a.parent.navigable||x).url.concat(b,c);if(!b||e.isMatcher(b))return b;throw new Error("Invalid url '"+b+"' in state '"+a+"'")},navigable:function(a){return a.url?a:a.parent?a.parent.navigable:null},ownParams:function(a){var b=a.url&&a.url.params||new P.ParamSet;return M(a.params||{},function(a,c){b[c]||(b[c]=new P.Param(c,null,a,"config"))}),b},params:function(a){return a.parent&&a.parent.params?N(a.parent.params.$$new(),a.ownParams):new P.ParamSet},views:function(a){var b={};return M(H(a.views)?a.views:{"":a},function(c,d){d.indexOf("@")<0&&(d+="@"+a.parent.name),b[d]=c}),b},path:function(a){return a.parent?a.parent.path.concat(a):[]},includes:function(a){var b=a.parent?N({},a.parent.includes):{};return b[a.name]=!0,b},$delegates:{}};x=q({name:"",url:"^",views:null,"abstract":!0}),x.navigable=null,this.decorator=t,this.state=u,this.$get=v,v.$inject=["$rootScope","$q","$view","$injector","$resolve","$stateParams","$urlRouter","$location","$urlMatcherFactory"]}function w(){function a(a,b){return{load:function(c,d){var e,f={template:null,controller:null,view:null,locals:null,notify:!0,async:!0,params:{}};return d=N(f,d),d.view&&(e=b.fromConfig(d.view,d.params,d.locals)),e&&d.notify&&a.$broadcast("$viewContentLoading",d),e}}}this.$get=a,a.$inject=["$rootScope","$templateFactory"]}function x(){var a=!1;this.useAnchorScroll=function(){a=!0},this.$get=["$anchorScroll","$timeout",function(b,c){return a?b:function(a){return c(function(){a[0].scrollIntoView()},0,!1)}}]}function y(a,c,d,e){function f(){return c.has?function(a){return c.has(a)?c.get(a):null}:function(a){try{return c.get(a)}catch(b){return null}}}function g(a,b){var c=function(){return{enter:function(a,b,c){b.after(a),c()},leave:function(a,b){a.remove(),b()}}};if(j)return{enter:function(a,b,c){var d=j.enter(a,null,b,c);d&&d.then&&d.then(c)},leave:function(a,b){var c=j.leave(a,b);c&&c.then&&c.then(b)}};if(i){var d=i&&i(b,a);return{enter:function(a,b,c){d.enter(a,null,b),c()},leave:function(a,b){d.leave(a),b()}}}return c()}var h=f(),i=h("$animator"),j=h("$animate"),k={restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(c,f,h){return function(c,f,i){function j(){l&&(l.remove(),l=null),n&&(n.$destroy(),n=null),m&&(r.leave(m,function(){l=null}),l=m,m=null)}function k(g){var k,l=A(c,i,f,e),s=l&&a.$current&&a.$current.locals[l];if(g||s!==o){k=c.$new(),o=a.$current.locals[l];var t=h(k,function(a){r.enter(a,f,function(){n&&n.$emit("$viewContentAnimationEnded"),(b.isDefined(q)&&!q||c.$eval(q))&&d(a)}),j()});m=t,n=k,n.$emit("$viewContentLoaded"),n.$eval(p)}}var l,m,n,o,p=i.onload||"",q=i.autoscroll,r=g(i,c);c.$on("$stateChangeSuccess",function(){k(!1)}),c.$on("$viewContentLoading",function(){k(!1)}),k(!0)}}};return k}function z(a,b,c,d){return{restrict:"ECA",priority:-400,compile:function(e){var f=e.html();return function(e,g,h){var i=c.$current,j=A(e,h,g,d),k=i&&i.locals[j];if(k){g.data("$uiView",{name:j,state:k.$$state}),g.html(k.$template?k.$template:f);var l=a(g.contents());if(k.$$controller){k.$scope=e,k.$element=g;var m=b(k.$$controller,k);k.$$controllerAs&&(e[k.$$controllerAs]=m),g.data("$ngControllerController",m),g.children().data("$ngControllerController",m)}l(e)}}}}}function A(a,b,c,d){var e=d(b.uiView||b.name||"")(a),f=c.inheritedData("$uiView");return e.indexOf("@")>=0?e:e+"@"+(f?f.state.name:"")}function B(a,b){var c,d=a.match(/^\s*({[^}]*})\s*$/);if(d&&(a=b+"("+d[1]+")"),c=a.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/),!c||4!==c.length)throw new Error("Invalid state ref '"+a+"'");return{state:c[1],paramExpr:c[3]||null}}function C(a){var b=a.parent().inheritedData("$uiView");return b&&b.state&&b.state.name?b.state:void 0}function D(a,c){var d=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(e,f,g,h){var i=B(g.uiSref,a.current.name),j=null,k=C(f)||a.$current,l="[object SVGAnimatedString]"===Object.prototype.toString.call(f.prop("href"))?"xlink:href":"href",m=null,n="A"===f.prop("tagName").toUpperCase(),o="FORM"===f[0].nodeName,p=o?"action":l,q=!0,r={relative:k,inherit:!0},s=e.$eval(g.uiSrefOpts)||{};b.forEach(d,function(a){a in s&&(r[a]=s[a])});var t=function(c){if(c&&(j=b.copy(c)),q){m=a.href(i.state,j,r);var d=h[1]||h[0];return d&&d.$$addStateInfo(i.state,j),null===m?(q=!1,!1):void g.$set(p,m)}};i.paramExpr&&(e.$watch(i.paramExpr,function(a,b){a!==j&&t(a)},!0),j=b.copy(e.$eval(i.paramExpr))),t(),o||f.bind("click",function(b){var d=b.which||b.button;if(!(d>1||b.ctrlKey||b.metaKey||b.shiftKey||f.attr("target"))){var e=c(function(){a.go(i.state,j,r)});b.preventDefault();var g=n&&!m?1:0;b.preventDefault=function(){g--<=0&&c.cancel(e)}}})}}}function E(a,b,c){return{restrict:"A",controller:["$scope","$element","$attrs",function(b,d,e){function f(){g()?d.addClass(i):d.removeClass(i)}function g(){for(var a=0;a<j.length;a++)if(h(j[a].state,j[a].params))return!0;return!1}function h(b,c){return"undefined"!=typeof e.uiSrefActiveEq?a.is(b.name,c):a.includes(b.name,c)}var i,j=[];i=c(e.uiSrefActiveEq||e.uiSrefActive||"",!1)(b),this.$$addStateInfo=function(b,c){var e=a.get(b,C(d));j.push({state:e||{name:b},params:c}),f()},b.$on("$stateChangeSuccess",f)}]}}function F(a){var b=function(b){return a.is(b)};return b.$stateful=!0,b}function G(a){var b=function(b){return a.includes(b)};return b.$stateful=!0,b}var H=b.isDefined,I=b.isFunction,J=b.isString,K=b.isObject,L=b.isArray,M=b.forEach,N=b.extend,O=b.copy;b.module("ui.router.util",["ng"]),b.module("ui.router.router",["ui.router.util"]),b.module("ui.router.state",["ui.router.router","ui.router.util"]),b.module("ui.router",["ui.router.state"]),b.module("ui.router.compat",["ui.router"]),p.$inject=["$q","$injector"],b.module("ui.router.util").service("$resolve",p),q.$inject=["$http","$templateCache","$injector"],b.module("ui.router.util").service("$templateFactory",q);var P;r.prototype.concat=function(a,b){var c={caseInsensitive:P.caseInsensitive(),strict:P.strictMode(),squash:P.defaultSquashPolicy()};return new r(this.sourcePath+a+this.sourceSearch,N(c,b),this)},r.prototype.toString=function(){return this.source},r.prototype.exec=function(a,b){function c(a){function b(a){return a.split("").reverse().join("")}function c(a){return a.replace(/\\-/g,"-")}var d=b(a).split(/-(?!\\)/),e=o(d,b);return o(e,c).reverse()}var d=this.regexp.exec(a);if(!d)return null;b=b||{};var e,f,g,h=this.parameters(),i=h.length,j=this.segments.length-1,k={};if(j!==d.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");for(e=0;j>e;e++){g=h[e];var l=this.params[g],m=d[e+1];for(f=0;f<l.replace;f++)l.replace[f].from===m&&(m=l.replace[f].to);m&&l.array===!0&&(m=c(m)),k[g]=l.value(m)}for(;i>e;e++)g=h[e],k[g]=this.params[g].value(b[g]);return k},r.prototype.parameters=function(a){return H(a)?this.params[a]||null:this.$$paramNames},r.prototype.validates=function(a){return this.params.$$validates(a)},r.prototype.format=function(a){function b(a){return encodeURIComponent(a).replace(/-/g,function(a){return"%5C%"+a.charCodeAt(0).toString(16).toUpperCase()})}a=a||{};var c=this.segments,d=this.parameters(),e=this.params;if(!this.validates(a))return null;var f,g=!1,h=c.length-1,i=d.length,j=c[0];for(f=0;i>f;f++){var k=h>f,l=d[f],m=e[l],n=m.value(a[l]),p=m.isOptional&&m.type.equals(m.value(),n),q=p?m.squash:!1,r=m.type.encode(n);if(k){var s=c[f+1];if(q===!1)null!=r&&(j+=L(r)?o(r,b).join("-"):encodeURIComponent(r)),j+=s;else if(q===!0){var t=j.match(/\/$/)?/\/?(.*)/:/(.*)/;j+=s.match(t)[1]}else J(q)&&(j+=q+s)}else{if(null==r||p&&q!==!1)continue;L(r)||(r=[r]),r=o(r,encodeURIComponent).join("&"+l+"="),j+=(g?"&":"?")+(l+"="+r),g=!0}}return j},s.prototype.is=function(a,b){return!0},s.prototype.encode=function(a,b){return a},s.prototype.decode=function(a,b){return a},s.prototype.equals=function(a,b){return a==b},s.prototype.$subPattern=function(){var a=this.pattern.toString();return a.substr(1,a.length-2)},s.prototype.pattern=/.*/,s.prototype.toString=function(){return"{Type:"+this.name+"}"},s.prototype.$normalize=function(a){return this.is(a)?a:this.decode(a)},s.prototype.$asArray=function(a,b){function d(a,b){function d(a,b){return function(){return a[b].apply(a,arguments)}}function e(a){return L(a)?a:H(a)?[a]:[]}function f(a){switch(a.length){case 0:return c;case 1:return"auto"===b?a[0]:a;default:return a}}function g(a){return!a}function h(a,b){return function(c){c=e(c);var d=o(c,a);return b===!0?0===n(d,g).length:f(d)}}function i(a){return function(b,c){var d=e(b),f=e(c);if(d.length!==f.length)return!1;for(var g=0;g<d.length;g++)if(!a(d[g],f[g]))return!1;return!0}}this.encode=h(d(a,"encode")),this.decode=h(d(a,"decode")),this.is=h(d(a,"is"),!0),this.equals=i(d(a,"equals")),this.pattern=a.pattern,this.$normalize=h(d(a,"$normalize")),this.name=a.name,this.$arrayMode=b}if(!a)return this;if("auto"===a&&!b)throw new Error("'auto' array mode is for query parameters only");return new d(this,a)},b.module("ui.router.util").provider("$urlMatcherFactory",t),b.module("ui.router.util").run(["$urlMatcherFactory",function(a){}]),u.$inject=["$locationProvider","$urlMatcherFactoryProvider"],b.module("ui.router.router").provider("$urlRouter",u),v.$inject=["$urlRouterProvider","$urlMatcherFactoryProvider"],b.module("ui.router.state").value("$stateParams",{}).provider("$state",v),w.$inject=[],b.module("ui.router.state").provider("$view",w),b.module("ui.router.state").provider("$uiViewScroll",x),y.$inject=["$state","$injector","$uiViewScroll","$interpolate"],z.$inject=["$compile","$controller","$state","$interpolate"],b.module("ui.router.state").directive("uiView",y),b.module("ui.router.state").directive("uiView",z),D.$inject=["$state","$timeout"],E.$inject=["$state","$stateParams","$interpolate"],b.module("ui.router.state").directive("uiSref",D).directive("uiSrefActive",E).directive("uiSrefActiveEq",E),F.$inject=["$state"],G.$inject=["$state"],b.module("ui.router.state").filter("isState",F).filter("includedByState",G)}(window,window.angular),function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){function b(b,d){var e,f,g,h=b.nodeName.toLowerCase();return"area"===h?(e=b.parentNode,f=e.name,b.href&&f&&"map"===e.nodeName.toLowerCase()?(g=a("img[usemap='#"+f+"']")[0],!!g&&c(g)):!1):(/^(input|select|textarea|button|object)$/.test(h)?!b.disabled:"a"===h?b.href||d:d)&&c(b)}function c(b){return a.expr.filters.visible(b)&&!a(b).parents().addBack().filter(function(){return"hidden"===a.css(this,"visibility")}).length}function d(a){for(var b,c;a.length&&a[0]!==document;){if(b=a.css("position"),("absolute"===b||"relative"===b||"fixed"===b)&&(c=parseInt(a.css("zIndex"),10),!isNaN(c)&&0!==c))return c;a=a.parent()}return 0}function e(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},a.extend(this._defaults,this.regional[""]),this.regional.en=a.extend(!0,{},this.regional[""]),this.regional["en-US"]=a.extend(!0,{},this.regional.en),this.dpDiv=f(a("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function f(b){var c="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return b.delegate(c,"mouseout",function(){a(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&a(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&a(this).removeClass("ui-datepicker-next-hover")}).delegate(c,"mouseover",g)}function g(){a.datepicker._isDisabledDatepicker(r.inline?r.dpDiv.parent()[0]:r.input[0])||(a(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),a(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&a(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&a(this).addClass("ui-datepicker-next-hover"))}function h(b,c){a.extend(b,c);for(var d in c)null==c[d]&&(b[d]=c[d]);return b}function i(a){return function(){var b=this.element.val();a.apply(this,arguments),this._refresh(),b!==this.element.val()&&this._trigger("change")}}a.ui=a.ui||{},a.extend(a.ui,{version:"1.11.4",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),a.fn.extend({scrollParent:function(b){var c=this.css("position"),d="absolute"===c,e=b?/(auto|scroll|hidden)/:/(auto|scroll)/,f=this.parents().filter(function(){var b=a(this);return d&&"static"===b.css("position")?!1:e.test(b.css("overflow")+b.css("overflow-y")+b.css("overflow-x"))}).eq(0);return"fixed"!==c&&f.length?f:a(this[0].ownerDocument||document)},uniqueId:function(){var a=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++a)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&a(this).removeAttr("id")})}}),a.extend(a.expr[":"],{data:a.expr.createPseudo?a.expr.createPseudo(function(b){return function(c){return!!a.data(c,b)}}):function(b,c,d){return!!a.data(b,d[3])},focusable:function(c){return b(c,!isNaN(a.attr(c,"tabindex")))},tabbable:function(c){var d=a.attr(c,"tabindex"),e=isNaN(d);return(e||d>=0)&&b(c,!e)}}),a("<a>").outerWidth(1).jquery||a.each(["Width","Height"],function(b,c){function d(b,c,d,f){return a.each(e,function(){c-=parseFloat(a.css(b,"padding"+this))||0,d&&(c-=parseFloat(a.css(b,"border"+this+"Width"))||0),f&&(c-=parseFloat(a.css(b,"margin"+this))||0)}),c}var e="Width"===c?["Left","Right"]:["Top","Bottom"],f=c.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+c]=function(b){return void 0===b?g["inner"+c].call(this):this.each(function(){a(this).css(f,d(this,b)+"px")})},a.fn["outer"+c]=function(b,e){return"number"!=typeof b?g["outer"+c].call(this,b):this.each(function(){a(this).css(f,d(this,b,!0,e)+"px")})}}),a.fn.addBack||(a.fn.addBack=function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}),a("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(a.fn.removeData=function(b){return function(c){return arguments.length?b.call(this,a.camelCase(c)):b.call(this)}}(a.fn.removeData)),a.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),a.fn.extend({focus:function(b){return function(c,d){return"number"==typeof c?this.each(function(){var b=this;setTimeout(function(){a(b).focus(),d&&d.call(b)},c)}):b.apply(this,arguments)}}(a.fn.focus),disableSelection:function(){var a="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(a+".ui-disableSelection",function(a){a.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(b){if(void 0!==b)return this.css("zIndex",b);if(this.length)for(var c,d,e=a(this[0]);e.length&&e[0]!==document;){if(c=e.css("position"),("absolute"===c||"relative"===c||"fixed"===c)&&(d=parseInt(e.css("zIndex"),10),!isNaN(d)&&0!==d))return d;e=e.parent()}return 0}}),a.ui.plugin={add:function(b,c,d){var e,f=a.ui[b].prototype;for(e in d)f.plugins[e]=f.plugins[e]||[],f.plugins[e].push([c,d[e]])},call:function(a,b,c,d){var e,f=a.plugins[b];if(f&&(d||a.element[0].parentNode&&11!==a.element[0].parentNode.nodeType))for(e=0;e<f.length;e++)a.options[f[e][0]]&&f[e][1].apply(a.element,c)}};var j=0,k=Array.prototype.slice;a.cleanData=function(b){return function(c){var d,e,f;for(f=0;null!=(e=c[f]);f++)try{d=a._data(e,"events"),d&&d.remove&&a(e).triggerHandler("remove")}catch(g){}b(c)}}(a.cleanData),a.widget=function(b,c,d){var e,f,g,h,i={},j=b.split(".")[0];return b=b.split(".")[1],e=j+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][e.toLowerCase()]=function(b){return!!a.data(b,e)},a[j]=a[j]||{},f=a[j][b],g=a[j][b]=function(a,b){return this._createWidget?void(arguments.length&&this._createWidget(a,b)):new g(a,b)},a.extend(g,f,{version:d.version,_proto:a.extend({},d),_childConstructors:[]}),h=new c,h.options=a.widget.extend({},h.options),a.each(d,function(b,d){return a.isFunction(d)?void(i[b]=function(){var a=function(){return c.prototype[b].apply(this,arguments)},e=function(a){return c.prototype[b].apply(this,a)};return function(){var b,c=this._super,f=this._superApply;return this._super=a,this._superApply=e,b=d.apply(this,arguments),this._super=c,this._superApply=f,b}}()):void(i[b]=d)}),g.prototype=a.widget.extend(h,{widgetEventPrefix:f?h.widgetEventPrefix||b:b},i,{constructor:g,namespace:j,widgetName:b,widgetFullName:e}),f?(a.each(f._childConstructors,function(b,c){var d=c.prototype;a.widget(d.namespace+"."+d.widgetName,g,c._proto)}),delete f._childConstructors):c._childConstructors.push(g),a.widget.bridge(b,g),g},a.widget.extend=function(b){for(var c,d,e=k.call(arguments,1),f=0,g=e.length;g>f;f++)for(c in e[f])d=e[f][c],e[f].hasOwnProperty(c)&&void 0!==d&&(a.isPlainObject(d)?b[c]=a.isPlainObject(b[c])?a.widget.extend({},b[c],d):a.widget.extend({},d):b[c]=d);return b},a.widget.bridge=function(b,c){var d=c.prototype.widgetFullName||b;a.fn[b]=function(e){var f="string"==typeof e,g=k.call(arguments,1),h=this;return f?this.each(function(){var c,f=a.data(this,d);return"instance"===e?(h=f,!1):f?a.isFunction(f[e])&&"_"!==e.charAt(0)?(c=f[e].apply(f,g),c!==f&&void 0!==c?(h=c&&c.jquery?h.pushStack(c.get()):c,!1):void 0):a.error("no such method '"+e+"' for "+b+" widget instance"):a.error("cannot call methods on "+b+" prior to initialization; attempted to call method '"+e+"'")}):(g.length&&(e=a.widget.extend.apply(null,[e].concat(g))),this.each(function(){var b=a.data(this,d);b?(b.option(e||{}),b._init&&b._init()):a.data(this,d,new c(e,this))})),h}},a.Widget=function(){},a.Widget._childConstructors=[],a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(b,c){c=a(c||this.defaultElement||this)[0],this.element=a(c),this.uuid=j++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=a(),this.hoverable=a(),this.focusable=a(),c!==this&&(a.data(c,this.widgetFullName,this),this._on(!0,this.element,{remove:function(a){a.target===c&&this.destroy()}}),this.document=a(c.style?c.ownerDocument:c.document||c),this.window=a(this.document[0].defaultView||this.document[0].parentWindow)),this.options=a.widget.extend({},this.options,this._getCreateOptions(),b),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:a.noop,_getCreateEventData:a.noop,_create:a.noop,_init:a.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(a.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:a.noop,widget:function(){return this.element},option:function(b,c){var d,e,f,g=b;if(0===arguments.length)return a.widget.extend({},this.options);if("string"==typeof b)if(g={},d=b.split("."),b=d.shift(),d.length){for(e=g[b]=a.widget.extend({},this.options[b]),f=0;f<d.length-1;f++)e[d[f]]=e[d[f]]||{},e=e[d[f]];if(b=d.pop(),1===arguments.length)return void 0===e[b]?null:e[b];e[b]=c}else{if(1===arguments.length)return void 0===this.options[b]?null:this.options[b];g[b]=c}return this._setOptions(g),this},_setOptions:function(a){var b;for(b in a)this._setOption(b,a[b]);return this},_setOption:function(a,b){return this.options[a]=b,"disabled"===a&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!b),b&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),
+this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(b,c,d){var e,f=this;"boolean"!=typeof b&&(d=c,c=b,b=!1),d?(c=e=a(c),this.bindings=this.bindings.add(c)):(d=c,c=this.element,e=this.widget()),a.each(d,function(d,g){function h(){return b||f.options.disabled!==!0&&!a(this).hasClass("ui-state-disabled")?("string"==typeof g?f[g]:g).apply(f,arguments):void 0}"string"!=typeof g&&(h.guid=g.guid=g.guid||h.guid||a.guid++);var i=d.match(/^([\w:-]*)\s*(.*)$/),j=i[1]+f.eventNamespace,k=i[2];k?e.delegate(k,j,h):c.bind(j,h)})},_off:function(b,c){c=(c||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,b.unbind(c).undelegate(c),this.bindings=a(this.bindings.not(b).get()),this.focusable=a(this.focusable.not(b).get()),this.hoverable=a(this.hoverable.not(b).get())},_delay:function(a,b){function c(){return("string"==typeof a?d[a]:a).apply(d,arguments)}var d=this;return setTimeout(c,b||0)},_hoverable:function(b){this.hoverable=this.hoverable.add(b),this._on(b,{mouseenter:function(b){a(b.currentTarget).addClass("ui-state-hover")},mouseleave:function(b){a(b.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(b){this.focusable=this.focusable.add(b),this._on(b,{focusin:function(b){a(b.currentTarget).addClass("ui-state-focus")},focusout:function(b){a(b.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(b,c,d){var e,f,g=this.options[b];if(d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent)for(e in f)e in c||(c[e]=f[e]);return this.element.trigger(c,d),!(a.isFunction(g)&&g.apply(this.element[0],[c].concat(d))===!1||c.isDefaultPrevented())}},a.each({show:"fadeIn",hide:"fadeOut"},function(b,c){a.Widget.prototype["_"+b]=function(d,e,f){"string"==typeof e&&(e={effect:e});var g,h=e?e===!0||"number"==typeof e?c:e.effect||c:b;e=e||{},"number"==typeof e&&(e={duration:e}),g=!a.isEmptyObject(e),e.complete=f,e.delay&&d.delay(e.delay),g&&a.effects&&a.effects.effect[h]?d[b](e):h!==b&&d[h]?d[h](e.duration,e.easing,f):d.queue(function(c){a(this)[b](),f&&f.call(d[0]),c()})}});var l=(a.widget,!1);a(document).mouseup(function(){l=!1});a.widget("ui.mouse",{version:"1.11.4",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){return!0===a.data(c.target,b.widgetName+".preventClickEvent")?(a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(b){if(!l){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var c=this,d=1===b.which,e="string"==typeof this.options.cancel&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;return d&&!e&&this._mouseCapture(b)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(b)!==!1,!this._mouseStarted)?(b.preventDefault(),!0):(!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return c._mouseMove(a)},this._mouseUpDelegate=function(a){return c._mouseUp(a)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),l=!0,!0)):!0}},_mouseMove:function(b){if(this._mouseMoved){if(a.ui.ie&&(!document.documentMode||document.documentMode<9)&&!b.button)return this._mouseUp(b);if(!b.which)return this._mouseUp(b)}return(b.which||b.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(b),b.preventDefault()):(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b)),!this._mouseStarted)},_mouseUp:function(b){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target===this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b)),l=!1,!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}});!function(){function b(a,b,c){return[parseFloat(a[0])*(n.test(a[0])?b/100:1),parseFloat(a[1])*(n.test(a[1])?c/100:1)]}function c(b,c){return parseInt(a.css(b,c),10)||0}function d(b){var c=b[0];return 9===c.nodeType?{width:b.width(),height:b.height(),offset:{top:0,left:0}}:a.isWindow(c)?{width:b.width(),height:b.height(),offset:{top:b.scrollTop(),left:b.scrollLeft()}}:c.preventDefault?{width:0,height:0,offset:{top:c.pageY,left:c.pageX}}:{width:b.outerWidth(),height:b.outerHeight(),offset:b.offset()}}a.ui=a.ui||{};var e,f,g=Math.max,h=Math.abs,i=Math.round,j=/left|center|right/,k=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,m=/^\w+/,n=/%$/,o=a.fn.position;a.position={scrollbarWidth:function(){if(void 0!==e)return e;var b,c,d=a("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),f=d.children()[0];return a("body").append(d),b=f.offsetWidth,d.css("overflow","scroll"),c=f.offsetWidth,b===c&&(c=d[0].clientWidth),d.remove(),e=b-c},getScrollInfo:function(b){var c=b.isWindow||b.isDocument?"":b.element.css("overflow-x"),d=b.isWindow||b.isDocument?"":b.element.css("overflow-y"),e="scroll"===c||"auto"===c&&b.width<b.element[0].scrollWidth,f="scroll"===d||"auto"===d&&b.height<b.element[0].scrollHeight;return{width:f?a.position.scrollbarWidth():0,height:e?a.position.scrollbarWidth():0}},getWithinInfo:function(b){var c=a(b||window),d=a.isWindow(c[0]),e=!!c[0]&&9===c[0].nodeType;return{element:c,isWindow:d,isDocument:e,offset:c.offset()||{left:0,top:0},scrollLeft:c.scrollLeft(),scrollTop:c.scrollTop(),width:d||e?c.width():c.outerWidth(),height:d||e?c.height():c.outerHeight()}}},a.fn.position=function(e){if(!e||!e.of)return o.apply(this,arguments);e=a.extend({},e);var n,p,q,r,s,t,u=a(e.of),v=a.position.getWithinInfo(e.within),w=a.position.getScrollInfo(v),x=(e.collision||"flip").split(" "),y={};return t=d(u),u[0].preventDefault&&(e.at="left top"),p=t.width,q=t.height,r=t.offset,s=a.extend({},r),a.each(["my","at"],function(){var a,b,c=(e[this]||"").split(" ");1===c.length&&(c=j.test(c[0])?c.concat(["center"]):k.test(c[0])?["center"].concat(c):["center","center"]),c[0]=j.test(c[0])?c[0]:"center",c[1]=k.test(c[1])?c[1]:"center",a=l.exec(c[0]),b=l.exec(c[1]),y[this]=[a?a[0]:0,b?b[0]:0],e[this]=[m.exec(c[0])[0],m.exec(c[1])[0]]}),1===x.length&&(x[1]=x[0]),"right"===e.at[0]?s.left+=p:"center"===e.at[0]&&(s.left+=p/2),"bottom"===e.at[1]?s.top+=q:"center"===e.at[1]&&(s.top+=q/2),n=b(y.at,p,q),s.left+=n[0],s.top+=n[1],this.each(function(){var d,j,k=a(this),l=k.outerWidth(),m=k.outerHeight(),o=c(this,"marginLeft"),t=c(this,"marginTop"),z=l+o+c(this,"marginRight")+w.width,A=m+t+c(this,"marginBottom")+w.height,B=a.extend({},s),C=b(y.my,k.outerWidth(),k.outerHeight());"right"===e.my[0]?B.left-=l:"center"===e.my[0]&&(B.left-=l/2),"bottom"===e.my[1]?B.top-=m:"center"===e.my[1]&&(B.top-=m/2),B.left+=C[0],B.top+=C[1],f||(B.left=i(B.left),B.top=i(B.top)),d={marginLeft:o,marginTop:t},a.each(["left","top"],function(b,c){a.ui.position[x[b]]&&a.ui.position[x[b]][c](B,{targetWidth:p,targetHeight:q,elemWidth:l,elemHeight:m,collisionPosition:d,collisionWidth:z,collisionHeight:A,offset:[n[0]+C[0],n[1]+C[1]],my:e.my,at:e.at,within:v,elem:k})}),e.using&&(j=function(a){var b=r.left-B.left,c=b+p-l,d=r.top-B.top,f=d+q-m,i={target:{element:u,left:r.left,top:r.top,width:p,height:q},element:{element:k,left:B.left,top:B.top,width:l,height:m},horizontal:0>c?"left":b>0?"right":"center",vertical:0>f?"top":d>0?"bottom":"middle"};l>p&&h(b+c)<p&&(i.horizontal="center"),m>q&&h(d+f)<q&&(i.vertical="middle"),g(h(b),h(c))>g(h(d),h(f))?i.important="horizontal":i.important="vertical",e.using.call(this,a,i)}),k.offset(a.extend(B,{using:j}))})},a.ui.position={fit:{left:function(a,b){var c,d=b.within,e=d.isWindow?d.scrollLeft:d.offset.left,f=d.width,h=a.left-b.collisionPosition.marginLeft,i=e-h,j=h+b.collisionWidth-f-e;b.collisionWidth>f?i>0&&0>=j?(c=a.left+i+b.collisionWidth-f-e,a.left+=i-c):j>0&&0>=i?a.left=e:i>j?a.left=e+f-b.collisionWidth:a.left=e:i>0?a.left+=i:j>0?a.left-=j:a.left=g(a.left-h,a.left)},top:function(a,b){var c,d=b.within,e=d.isWindow?d.scrollTop:d.offset.top,f=b.within.height,h=a.top-b.collisionPosition.marginTop,i=e-h,j=h+b.collisionHeight-f-e;b.collisionHeight>f?i>0&&0>=j?(c=a.top+i+b.collisionHeight-f-e,a.top+=i-c):j>0&&0>=i?a.top=e:i>j?a.top=e+f-b.collisionHeight:a.top=e:i>0?a.top+=i:j>0?a.top-=j:a.top=g(a.top-h,a.top)}},flip:{left:function(a,b){var c,d,e=b.within,f=e.offset.left+e.scrollLeft,g=e.width,i=e.isWindow?e.scrollLeft:e.offset.left,j=a.left-b.collisionPosition.marginLeft,k=j-i,l=j+b.collisionWidth-g-i,m="left"===b.my[0]?-b.elemWidth:"right"===b.my[0]?b.elemWidth:0,n="left"===b.at[0]?b.targetWidth:"right"===b.at[0]?-b.targetWidth:0,o=-2*b.offset[0];0>k?(c=a.left+m+n+o+b.collisionWidth-g-f,(0>c||c<h(k))&&(a.left+=m+n+o)):l>0&&(d=a.left-b.collisionPosition.marginLeft+m+n+o-i,(d>0||h(d)<l)&&(a.left+=m+n+o))},top:function(a,b){var c,d,e=b.within,f=e.offset.top+e.scrollTop,g=e.height,i=e.isWindow?e.scrollTop:e.offset.top,j=a.top-b.collisionPosition.marginTop,k=j-i,l=j+b.collisionHeight-g-i,m="top"===b.my[1],n=m?-b.elemHeight:"bottom"===b.my[1]?b.elemHeight:0,o="top"===b.at[1]?b.targetHeight:"bottom"===b.at[1]?-b.targetHeight:0,p=-2*b.offset[1];0>k?(d=a.top+n+o+p+b.collisionHeight-g-f,(0>d||d<h(k))&&(a.top+=n+o+p)):l>0&&(c=a.top-b.collisionPosition.marginTop+n+o+p-i,(c>0||h(c)<l)&&(a.top+=n+o+p))}},flipfit:{left:function(){a.ui.position.flip.left.apply(this,arguments),a.ui.position.fit.left.apply(this,arguments)},top:function(){a.ui.position.flip.top.apply(this,arguments),a.ui.position.fit.top.apply(this,arguments)}}},function(){var b,c,d,e,g,h=document.getElementsByTagName("body")[0],i=document.createElement("div");b=document.createElement(h?"div":"body"),d={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},h&&a.extend(d,{position:"absolute",left:"-1000px",top:"-1000px"});for(g in d)b.style[g]=d[g];b.appendChild(i),c=h||document.documentElement,c.insertBefore(b,c.firstChild),i.style.cssText="position: absolute; left: 10.7432222px;",e=a(i).offset().left,f=e>10&&11>e,b.innerHTML="",c.removeChild(b)}()}();a.ui.position,a.widget("ui.accordion",{version:"1.11.4",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var b=this.options;this.prevShow=this.prevHide=a(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),b.collapsible||b.active!==!1&&null!=b.active||(b.active=0),this._processPanels(),b.active<0&&(b.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():a()}},_createIcons:function(){var b=this.options.icons;b&&(a("<span>").addClass("ui-accordion-header-icon ui-icon "+b.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(b.header).addClass(b.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var a;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),a=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&a.css("height","")},_setOption:function(a,b){return"active"===a?void this._activate(b):("event"===a&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(b)),this._super(a,b),"collapsible"!==a||b||this.options.active!==!1||this._activate(0),"icons"===a&&(this._destroyIcons(),b&&this._createIcons()),void("disabled"===a&&(this.element.toggleClass("ui-state-disabled",!!b).attr("aria-disabled",b),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!b))))},_keydown:function(b){if(!b.altKey&&!b.ctrlKey){var c=a.ui.keyCode,d=this.headers.length,e=this.headers.index(b.target),f=!1;switch(b.keyCode){case c.RIGHT:case c.DOWN:f=this.headers[(e+1)%d];break;case c.LEFT:case c.UP:f=this.headers[(e-1+d)%d];break;case c.SPACE:case c.ENTER:this._eventHandler(b);break;case c.HOME:f=this.headers[0];break;case c.END:f=this.headers[d-1]}f&&(a(b.target).attr("tabIndex",-1),a(f).attr("tabIndex",0),f.focus(),b.preventDefault())}},_panelKeyDown:function(b){b.keyCode===a.ui.keyCode.UP&&b.ctrlKey&&a(b.currentTarget).prev().focus()},refresh:function(){var b=this.options;this._processPanels(),b.active===!1&&b.collapsible===!0||!this.headers.length?(b.active=!1,this.active=a()):b.active===!1?this._activate(0):this.active.length&&!a.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(b.active=!1,this.active=a()):this._activate(Math.max(0,b.active-1)):b.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var a=this.headers,b=this.panels;this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.panels=this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide(),b&&(this._off(a.not(this.headers)),this._off(b.not(this.panels)))},_refresh:function(){var b,c=this.options,d=c.heightStyle,e=this.element.parent();this.active=this._findActive(c.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var b=a(this),c=b.uniqueId().attr("id"),d=b.next(),e=d.uniqueId().attr("id");b.attr("aria-controls",e),d.attr("aria-labelledby",c)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(c.event),"fill"===d?(b=e.height(),this.element.siblings(":visible").each(function(){var c=a(this),d=c.css("position");"absolute"!==d&&"fixed"!==d&&(b-=c.outerHeight(!0))}),this.headers.each(function(){b-=a(this).outerHeight(!0)}),this.headers.next().each(function(){a(this).height(Math.max(0,b-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")):"auto"===d&&(b=0,this.headers.next().each(function(){b=Math.max(b,a(this).css("height","").height())}).height(b))},_activate:function(b){var c=this._findActive(b)[0];c!==this.active[0]&&(c=c||this.active[0],this._eventHandler({target:c,currentTarget:c,preventDefault:a.noop}))},_findActive:function(b){return"number"==typeof b?this.headers.eq(b):a()},_setupEvents:function(b){var c={keydown:"_keydown"};b&&a.each(b.split(" "),function(a,b){c[b]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,c),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(b){var c=this.options,d=this.active,e=a(b.currentTarget),f=e[0]===d[0],g=f&&c.collapsible,h=g?a():e.next(),i=d.next(),j={oldHeader:d,oldPanel:i,newHeader:g?a():e,newPanel:h};b.preventDefault(),f&&!c.collapsible||this._trigger("beforeActivate",b,j)===!1||(c.active=g?!1:this.headers.index(e),this.active=f?a():e,this._toggle(j),d.removeClass("ui-accordion-header-active ui-state-active"),c.icons&&d.children(".ui-accordion-header-icon").removeClass(c.icons.activeHeader).addClass(c.icons.header),f||(e.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),c.icons&&e.children(".ui-accordion-header-icon").removeClass(c.icons.header).addClass(c.icons.activeHeader),e.next().addClass("ui-accordion-content-active")))},_toggle:function(b){var c=b.newPanel,d=this.prevShow.length?this.prevShow:b.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=c,this.prevHide=d,this.options.animate?this._animate(c,d,b):(d.hide(),c.show(),this._toggleComplete(b)),d.attr({"aria-hidden":"true"}),d.prev().attr({"aria-selected":"false","aria-expanded":"false"}),c.length&&d.length?d.prev().attr({tabIndex:-1,"aria-expanded":"false"}):c.length&&this.headers.filter(function(){return 0===parseInt(a(this).attr("tabIndex"),10)}).attr("tabIndex",-1),c.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(a,b,c){var d,e,f,g=this,h=0,i=a.css("box-sizing"),j=a.length&&(!b.length||a.index()<b.index()),k=this.options.animate||{},l=j&&k.down||k,m=function(){g._toggleComplete(c)};return"number"==typeof l&&(f=l),"string"==typeof l&&(e=l),e=e||l.easing||k.easing,f=f||l.duration||k.duration,b.length?a.length?(d=a.show().outerHeight(),b.animate(this.hideProps,{duration:f,easing:e,step:function(a,b){b.now=Math.round(a)}}),void a.hide().animate(this.showProps,{duration:f,easing:e,complete:m,step:function(a,c){c.now=Math.round(a),"height"!==c.prop?"content-box"===i&&(h+=c.now):"content"!==g.options.heightStyle&&(c.now=Math.round(d-b.outerHeight()-h),h=0)}})):b.animate(this.hideProps,f,e,m):a.animate(this.showProps,f,e,m)},_toggleComplete:function(a){var b=a.oldPanel;b.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),b.length&&(b.parent()[0].className=b.parent()[0].className),this._trigger("activate",null,a)}}),a.widget("ui.menu",{version:"1.11.4",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(a){a.preventDefault()},"click .ui-menu-item":function(b){var c=a(b.target);!this.mouseHandled&&c.not(".ui-state-disabled").length&&(this.select(b),b.isPropagationStopped()||(this.mouseHandled=!0),c.has(".ui-menu").length?this.expand(b):!this.element.is(":focus")&&a(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(b){if(!this.previousFilter){var c=a(b.currentTarget);c.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(b,c)}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(a,b){var c=this.active||this.element.find(this.options.items).eq(0);b||this.focus(a,c)},blur:function(b){this._delay(function(){a.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(b)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(a){this._closeOnDocumentClick(a)&&this.collapseAll(a),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var b=a(this);b.data("ui-menu-submenu-carat")&&b.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(b){var c,d,e,f,g=!0;switch(b.keyCode){case a.ui.keyCode.PAGE_UP:this.previousPage(b);break;case a.ui.keyCode.PAGE_DOWN:this.nextPage(b);break;case a.ui.keyCode.HOME:this._move("first","first",b);break;case a.ui.keyCode.END:this._move("last","last",b);break;case a.ui.keyCode.UP:this.previous(b);break;case a.ui.keyCode.DOWN:this.next(b);break;case a.ui.keyCode.LEFT:this.collapse(b);break;case a.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(b);break;case a.ui.keyCode.ENTER:case a.ui.keyCode.SPACE:this._activate(b);break;case a.ui.keyCode.ESCAPE:this.collapse(b);break;default:g=!1,d=this.previousFilter||"",e=String.fromCharCode(b.keyCode),f=!1,clearTimeout(this.filterTimer),e===d?f=!0:e=d+e,c=this._filterMenuItems(e),c=f&&-1!==c.index(this.active.next())?this.active.nextAll(".ui-menu-item"):c,c.length||(e=String.fromCharCode(b.keyCode),c=this._filterMenuItems(e)),c.length?(this.focus(b,c),this.previousFilter=e,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}g&&b.preventDefault()},_activate:function(a){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(a):this.select(a))},refresh:function(){var b,c,d=this,e=this.options.icons.submenu,f=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),f.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var b=a(this),c=b.parent(),d=a("<span>").addClass("ui-menu-icon ui-icon "+e).data("ui-menu-submenu-carat",!0);c.attr("aria-haspopup","true").prepend(d),b.attr("aria-labelledby",c.attr("id"))}),b=f.add(this.element),c=b.find(this.options.items),c.not(".ui-menu-item").each(function(){var b=a(this);d._isDivider(b)&&b.addClass("ui-widget-content ui-menu-divider")}),c.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),c.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!a.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(a,b){"icons"===a&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(b.submenu),"disabled"===a&&this.element.toggleClass("ui-state-disabled",!!b).attr("aria-disabled",b),this._super(a,b)},focus:function(a,b){var c,d;this.blur(a,a&&"focus"===a.type),this._scrollIntoView(b),this.active=b.first(),d=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",d.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),a&&"keydown"===a.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),c=b.children(".ui-menu"),c.length&&a&&/^mouse/.test(a.type)&&this._startOpening(c),this.activeMenu=b.parent(),this._trigger("focus",a,{item:b})},_scrollIntoView:function(b){var c,d,e,f,g,h;this._hasScroll()&&(c=parseFloat(a.css(this.activeMenu[0],"borderTopWidth"))||0,d=parseFloat(a.css(this.activeMenu[0],"paddingTop"))||0,e=b.offset().top-this.activeMenu.offset().top-c-d,f=this.activeMenu.scrollTop(),g=this.activeMenu.height(),h=b.outerHeight(),0>e?this.activeMenu.scrollTop(f+e):e+h>g&&this.activeMenu.scrollTop(f+e-g+h))},blur:function(a,b){b||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",a,{item:this.active}))},_startOpening:function(a){clearTimeout(this.timer),"true"===a.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(a)},this.delay))},_open:function(b){var c=a.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(b.parents(".ui-menu")).hide().attr("aria-hidden","true"),b.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(c)},collapseAll:function(b,c){clearTimeout(this.timer),this.timer=this._delay(function(){var d=c?this.element:a(b&&b.target).closest(this.element.find(".ui-menu"));d.length||(d=this.element),this._close(d),this.blur(b),this.activeMenu=d},this.delay)},_close:function(a){a||(a=this.active?this.active.parent():this.element),a.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(b){return!a(b.target).closest(".ui-menu").length},_isDivider:function(a){return!/[^\-\u2014\u2013\s]/.test(a.text())},collapse:function(a){var b=this.active&&this.active.parent().closest(".ui-menu-item",this.element);b&&b.length&&(this._close(),this.focus(a,b))},expand:function(a){var b=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();b&&b.length&&(this._open(b.parent()),this._delay(function(){this.focus(a,b)}))},next:function(a){this._move("next","first",a)},previous:function(a){this._move("prev","last",a)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(a,b,c){var d;this.active&&(d="first"===a||"last"===a?this.active["first"===a?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[a+"All"](".ui-menu-item").eq(0)),d&&d.length&&this.active||(d=this.activeMenu.find(this.options.items)[b]()),this.focus(c,d)},nextPage:function(b){var c,d,e;return this.active?void(this.isLastItem()||(this._hasScroll()?(d=this.active.offset().top,e=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return c=a(this),c.offset().top-d-e<0}),this.focus(b,c)):this.focus(b,this.activeMenu.find(this.options.items)[this.active?"last":"first"]()))):void this.next(b)},previousPage:function(b){var c,d,e;return this.active?void(this.isFirstItem()||(this._hasScroll()?(d=this.active.offset().top,e=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return c=a(this),c.offset().top-d+e>0}),this.focus(b,c)):this.focus(b,this.activeMenu.find(this.options.items).first()))):void this.next(b)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(b){this.active=this.active||a(b.target).closest(".ui-menu-item");var c={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(b,!0),this._trigger("select",b,c)},_filterMenuItems:function(b){var c=b.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),d=new RegExp("^"+c,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return d.test(a.trim(a(this).text()))})}});a.widget("ui.autocomplete",{version:"1.11.4",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var b,c,d,e=this.element[0].nodeName.toLowerCase(),f="textarea"===e,g="input"===e;this.isMultiLine=f?!0:g?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[f||g?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(e){if(this.element.prop("readOnly"))return b=!0,d=!0,void(c=!0);b=!1,d=!1,c=!1;var f=a.ui.keyCode;switch(e.keyCode){case f.PAGE_UP:b=!0,this._move("previousPage",e);break;case f.PAGE_DOWN:b=!0,this._move("nextPage",e);break;case f.UP:b=!0,this._keyEvent("previous",e);break;case f.DOWN:b=!0,this._keyEvent("next",e);break;case f.ENTER:this.menu.active&&(b=!0,e.preventDefault(),this.menu.select(e));break;case f.TAB:this.menu.active&&this.menu.select(e);break;case f.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(e),e.preventDefault());break;default:c=!0,this._searchTimeout(e)}},keypress:function(d){if(b)return b=!1,void((!this.isMultiLine||this.menu.element.is(":visible"))&&d.preventDefault());if(!c){var e=a.ui.keyCode;switch(d.keyCode){case e.PAGE_UP:this._move("previousPage",d);break;case e.PAGE_DOWN:this._move("nextPage",d);break;case e.UP:this._keyEvent("previous",d);break;case e.DOWN:this._keyEvent("next",d)}}},input:function(a){return d?(d=!1,void a.preventDefault()):void this._searchTimeout(a)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(a){return this.cancelBlur?void delete this.cancelBlur:(clearTimeout(this.searching),this.close(a),void this._change(a))}}),this._initSource(),this.menu=a("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._on(this.menu.element,{mousedown:function(b){b.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var c=this.menu.element[0];a(b.target).closest(".ui-menu-item").length||this._delay(function(){var b=this;this.document.one("mousedown",function(d){d.target===b.element[0]||d.target===c||a.contains(c,d.target)||b.close()})})},menufocus:function(b,c){var d,e;return this.isNewMenu&&(this.isNewMenu=!1,b.originalEvent&&/^mouse/.test(b.originalEvent.type))?(this.menu.blur(),void this.document.one("mousemove",function(){a(b.target).trigger(b.originalEvent)})):(e=c.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",b,{item:e})&&b.originalEvent&&/^key/.test(b.originalEvent.type)&&this._value(e.value),d=c.item.attr("aria-label")||e.value,void(d&&a.trim(d).length&&(this.liveRegion.children().hide(),a("<div>").text(d).appendTo(this.liveRegion))))},menuselect:function(a,b){var c=b.item.data("ui-autocomplete-item"),d=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=d,this._delay(function(){this.previous=d,this.selectedItem=c})),!1!==this._trigger("select",a,{item:c})&&this._value(c.value),this.term=this._value(),this.close(a),
+this.selectedItem=c}}),this.liveRegion=a("<span>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(a,b){this._super(a,b),"source"===a&&this._initSource(),"appendTo"===a&&this.menu.element.appendTo(this._appendTo()),"disabled"===a&&b&&this.xhr&&this.xhr.abort()},_appendTo:function(){var b=this.options.appendTo;return b&&(b=b.jquery||b.nodeType?a(b):this.document.find(b).eq(0)),b&&b[0]||(b=this.element.closest(".ui-front")),b.length||(b=this.document[0].body),b},_initSource:function(){var b,c,d=this;a.isArray(this.options.source)?(b=this.options.source,this.source=function(c,d){d(a.ui.autocomplete.filter(b,c.term))}):"string"==typeof this.options.source?(c=this.options.source,this.source=function(b,e){d.xhr&&d.xhr.abort(),d.xhr=a.ajax({url:c,data:b,dataType:"json",success:function(a){e(a)},error:function(){e([])}})}):this.source=this.options.source},_searchTimeout:function(a){clearTimeout(this.searching),this.searching=this._delay(function(){var b=this.term===this._value(),c=this.menu.element.is(":visible"),d=a.altKey||a.ctrlKey||a.metaKey||a.shiftKey;(!b||b&&!c&&!d)&&(this.selectedItem=null,this.search(null,a))},this.options.delay)},search:function(a,b){return a=null!=a?a:this._value(),this.term=this._value(),a.length<this.options.minLength?this.close(b):this._trigger("search",b)!==!1?this._search(a):void 0},_search:function(a){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:a},this._response())},_response:function(){var b=++this.requestIndex;return a.proxy(function(a){b===this.requestIndex&&this.__response(a),this.pending--,this.pending||this.element.removeClass("ui-autocomplete-loading")},this)},__response:function(a){a&&(a=this._normalize(a)),this._trigger("response",null,{content:a}),!this.options.disabled&&a&&a.length&&!this.cancelSearch?(this._suggest(a),this._trigger("open")):this._close()},close:function(a){this.cancelSearch=!0,this._close(a)},_close:function(a){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",a))},_change:function(a){this.previous!==this._value()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(b){return b.length&&b[0].label&&b[0].value?b:a.map(b,function(b){return"string"==typeof b?{label:b,value:b}:a.extend({},b,{label:b.label||b.value,value:b.value||b.label})})},_suggest:function(b){var c=this.menu.element.empty();this._renderMenu(c,b),this.isNewMenu=!0,this.menu.refresh(),c.show(),this._resizeMenu(),c.position(a.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(b,c){var d=this;a.each(c,function(a,c){d._renderItemData(b,c)})},_renderItemData:function(a,b){return this._renderItem(a,b).data("ui-autocomplete-item",b)},_renderItem:function(b,c){return a("<li>").text(c.label).appendTo(b)},_move:function(a,b){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(a)||this.menu.isLastItem()&&/^next/.test(a)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[a](b):void this.search(null,b)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(a,b){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(a,b),b.preventDefault())}}),a.extend(a.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(b,c){var d=new RegExp(a.ui.autocomplete.escapeRegex(c),"i");return a.grep(b,function(a){return d.test(a.label||a.value||a)})}}),a.widget("ui.autocomplete",a.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(a){return a+(a>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(b){var c;this._superApply(arguments),this.options.disabled||this.cancelSearch||(c=b&&b.length?this.options.messages.results(b.length):this.options.messages.noResults,this.liveRegion.children().hide(),a("<div>").text(c).appendTo(this.liveRegion))}});var m,n=(a.ui.autocomplete,"ui-button ui-widget ui-state-default ui-corner-all"),o="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",p=function(){var b=a(this);setTimeout(function(){b.find(":ui-button").button("refresh")},1)},q=function(b){var c=b.name,d=b.form,e=a([]);return c&&(c=c.replace(/'/g,"\\'"),e=d?a(d).find("[name='"+c+"'][type=radio]"):a("[name='"+c+"'][type=radio]",b.ownerDocument).filter(function(){return!this.form})),e};a.widget("ui.button",{version:"1.11.4",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,p),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var b=this,c=this.options,d="checkbox"===this.type||"radio"===this.type,e=d?"":"ui-state-active";null===c.label&&(c.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(n).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){c.disabled||this===m&&a(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){c.disabled||a(this).removeClass(e)}).bind("click"+this.eventNamespace,function(a){c.disabled&&(a.preventDefault(),a.stopImmediatePropagation())}),this._on({focus:function(){this.buttonElement.addClass("ui-state-focus")},blur:function(){this.buttonElement.removeClass("ui-state-focus")}}),d&&this.element.bind("change"+this.eventNamespace,function(){b.refresh()}),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return c.disabled?!1:void 0}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(c.disabled)return!1;a(this).addClass("ui-state-active"),b.buttonElement.attr("aria-pressed","true");var d=b.element[0];q(d).not(d).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return c.disabled?!1:(a(this).addClass("ui-state-active"),m=this,void b.document.one("mouseup",function(){m=null}))}).bind("mouseup"+this.eventNamespace,function(){return c.disabled?!1:void a(this).removeClass("ui-state-active")}).bind("keydown"+this.eventNamespace,function(b){return c.disabled?!1:void((b.keyCode===a.ui.keyCode.SPACE||b.keyCode===a.ui.keyCode.ENTER)&&a(this).addClass("ui-state-active"))}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){a(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(b){b.keyCode===a.ui.keyCode.SPACE&&a(this).click()})),this._setOption("disabled",c.disabled),this._resetButton()},_determineButtonType:function(){var a,b,c;this.element.is("[type=checkbox]")?this.type="checkbox":this.element.is("[type=radio]")?this.type="radio":this.element.is("input")?this.type="input":this.type="button","checkbox"===this.type||"radio"===this.type?(a=this.element.parents().last(),b="label[for='"+this.element.attr("id")+"']",this.buttonElement=a.find(b),this.buttonElement.length||(a=a.length?a.siblings():this.element.siblings(),this.buttonElement=a.filter(b),this.buttonElement.length||(this.buttonElement=a.find(b))),this.element.addClass("ui-helper-hidden-accessible"),c=this.element.is(":checked"),c&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",c)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(n+" ui-state-active "+o).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(a,b){return this._super(a,b),"disabled"===a?(this.widget().toggleClass("ui-state-disabled",!!b),this.element.prop("disabled",!!b),void(b&&("checkbox"===this.type||"radio"===this.type?this.buttonElement.removeClass("ui-state-focus"):this.buttonElement.removeClass("ui-state-focus ui-state-active")))):void this._resetButton()},refresh:function(){var b=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");b!==this.options.disabled&&this._setOption("disabled",b),"radio"===this.type?q(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return void(this.options.label&&this.element.val(this.options.label));var b=this.buttonElement.removeClass(o),c=a("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary,f=[];d.primary||d.secondary?(this.options.text&&f.push("ui-button-text-icon"+(e?"s":d.primary?"-primary":"-secondary")),d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>"),d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>"),this.options.text||(f.push(e?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||b.attr("title",a.trim(c)))):f.push("ui-button-text-only"),b.addClass(f.join(" "))}}),a.widget("ui.buttonset",{version:"1.11.4",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(a,b){"disabled"===a&&this.buttons.button("option",a,b),this._super(a,b)},refresh:function(){var b="rtl"===this.element.css("direction"),c=this.element.find(this.options.items),d=c.filter(":ui-button");c.not(":ui-button").button(),d.button("refresh"),this.buttons=c.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(b?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}});a.ui.button;a.extend(a.ui,{datepicker:{version:"1.11.4"}});var r;a.extend(e.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){return h(this._defaults,a||{}),this},_attachDatepicker:function(b,c){var d,e,f;d=b.nodeName.toLowerCase(),e="div"===d||"span"===d,b.id||(this.uuid+=1,b.id="dp"+this.uuid),f=this._newInst(a(b),e),f.settings=a.extend({},c||{}),"input"===d?this._connectDatepicker(b,f):e&&this._inlineDatepicker(b,f)},_newInst:function(b,c){var d=b[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:d,input:b,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:c,dpDiv:c?f(a("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(b,c){var d=a(b);c.append=a([]),c.trigger=a([]),d.hasClass(this.markerClassName)||(this._attachments(d,c),d.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(c),a.data(b,"datepicker",c),c.settings.disabled&&this._disableDatepicker(b))},_attachments:function(b,c){var d,e,f,g=this._get(c,"appendText"),h=this._get(c,"isRTL");c.append&&c.append.remove(),g&&(c.append=a("<span class='"+this._appendClass+"'>"+g+"</span>"),b[h?"before":"after"](c.append)),b.unbind("focus",this._showDatepicker),c.trigger&&c.trigger.remove(),d=this._get(c,"showOn"),("focus"===d||"both"===d)&&b.focus(this._showDatepicker),("button"===d||"both"===d)&&(e=this._get(c,"buttonText"),f=this._get(c,"buttonImage"),c.trigger=a(this._get(c,"buttonImageOnly")?a("<img/>").addClass(this._triggerClass).attr({src:f,alt:e,title:e}):a("<button type='button'></button>").addClass(this._triggerClass).html(f?a("<img/>").attr({src:f,alt:e,title:e}):e)),b[h?"before":"after"](c.trigger),c.trigger.click(function(){return a.datepicker._datepickerShowing&&a.datepicker._lastInput===b[0]?a.datepicker._hideDatepicker():a.datepicker._datepickerShowing&&a.datepicker._lastInput!==b[0]?(a.datepicker._hideDatepicker(),a.datepicker._showDatepicker(b[0])):a.datepicker._showDatepicker(b[0]),!1}))},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b,c,d,e,f=new Date(2009,11,20),g=this._get(a,"dateFormat");g.match(/[DM]/)&&(b=function(a){for(c=0,d=0,e=0;e<a.length;e++)a[e].length>c&&(c=a[e].length,d=e);return d},f.setMonth(b(this._get(a,g.match(/MM/)?"monthNames":"monthNamesShort"))),f.setDate(b(this._get(a,g.match(/DD/)?"dayNames":"dayNamesShort"))+20-f.getDay())),a.input.attr("size",this._formatDate(a,f).length)}},_inlineDatepicker:function(b,c){var d=a(b);d.hasClass(this.markerClassName)||(d.addClass(this.markerClassName).append(c.dpDiv),a.data(b,"datepicker",c),this._setDate(c,this._getDefaultDate(c),!0),this._updateDatepicker(c),this._updateAlternate(c),c.settings.disabled&&this._disableDatepicker(b),c.dpDiv.css("display","block"))},_dialogDatepicker:function(b,c,d,e,f){var g,i,j,k,l,m=this._dialogInst;return m||(this.uuid+=1,g="dp"+this.uuid,this._dialogInput=a("<input type='text' id='"+g+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),a("body").append(this._dialogInput),m=this._dialogInst=this._newInst(this._dialogInput,!1),m.settings={},a.data(this._dialogInput[0],"datepicker",m)),h(m.settings,e||{}),c=c&&c.constructor===Date?this._formatDate(m,c):c,this._dialogInput.val(c),this._pos=f?f.length?f:[f.pageX,f.pageY]:null,this._pos||(i=document.documentElement.clientWidth,j=document.documentElement.clientHeight,k=document.documentElement.scrollLeft||document.body.scrollLeft,l=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[i/2-100+k,j/2-150+l]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),m.settings.onSelect=d,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),a.blockUI&&a.blockUI(this.dpDiv),a.data(this._dialogInput[0],"datepicker",m),this},_destroyDatepicker:function(b){var c,d=a(b),e=a.data(b,"datepicker");d.hasClass(this.markerClassName)&&(c=b.nodeName.toLowerCase(),a.removeData(b,"datepicker"),"input"===c?(e.append.remove(),e.trigger.remove(),d.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===c||"span"===c)&&d.removeClass(this.markerClassName).empty(),r===e&&(r=null))},_enableDatepicker:function(b){var c,d,e=a(b),f=a.data(b,"datepicker");e.hasClass(this.markerClassName)&&(c=b.nodeName.toLowerCase(),"input"===c?(b.disabled=!1,f.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===c||"span"===c)&&(d=e.children("."+this._inlineClass),d.children().removeClass("ui-state-disabled"),d.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=a.map(this._disabledInputs,function(a){return a===b?null:a}))},_disableDatepicker:function(b){var c,d,e=a(b),f=a.data(b,"datepicker");e.hasClass(this.markerClassName)&&(c=b.nodeName.toLowerCase(),"input"===c?(b.disabled=!0,f.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===c||"span"===c)&&(d=e.children("."+this._inlineClass),d.children().addClass("ui-state-disabled"),d.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=a.map(this._disabledInputs,function(a){return a===b?null:a}),this._disabledInputs[this._disabledInputs.length]=b)},_isDisabledDatepicker:function(a){if(!a)return!1;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]===a)return!0;return!1},_getInst:function(b){try{return a.data(b,"datepicker")}catch(c){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(b,c,d){var e,f,g,i,j=this._getInst(b);return 2===arguments.length&&"string"==typeof c?"defaults"===c?a.extend({},a.datepicker._defaults):j?"all"===c?a.extend({},j.settings):this._get(j,c):null:(e=c||{},"string"==typeof c&&(e={},e[c]=d),void(j&&(this._curInst===j&&this._hideDatepicker(),f=this._getDateDatepicker(b,!0),g=this._getMinMaxDate(j,"min"),i=this._getMinMaxDate(j,"max"),h(j.settings,e),null!==g&&void 0!==e.dateFormat&&void 0===e.minDate&&(j.settings.minDate=this._formatDate(j,g)),null!==i&&void 0!==e.dateFormat&&void 0===e.maxDate&&(j.settings.maxDate=this._formatDate(j,i)),"disabled"in e&&(e.disabled?this._disableDatepicker(b):this._enableDatepicker(b)),this._attachments(a(b),j),this._autoSize(j),this._setDate(j,f),this._updateAlternate(j),this._updateDatepicker(j))))},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){var b=this._getInst(a);b&&this._updateDatepicker(b)},_setDateDatepicker:function(a,b){var c=this._getInst(a);c&&(this._setDate(c,b),this._updateDatepicker(c),this._updateAlternate(c))},_getDateDatepicker:function(a,b){var c=this._getInst(a);return c&&!c.inline&&this._setDateFromField(c,b),c?this._getDate(c):null},_doKeyDown:function(b){var c,d,e,f=a.datepicker._getInst(b.target),g=!0,h=f.dpDiv.is(".ui-datepicker-rtl");if(f._keyEvent=!0,a.datepicker._datepickerShowing)switch(b.keyCode){case 9:a.datepicker._hideDatepicker(),g=!1;break;case 13:return e=a("td."+a.datepicker._dayOverClass+":not(."+a.datepicker._currentClass+")",f.dpDiv),e[0]&&a.datepicker._selectDay(b.target,f.selectedMonth,f.selectedYear,e[0]),c=a.datepicker._get(f,"onSelect"),c?(d=a.datepicker._formatDate(f),c.apply(f.input?f.input[0]:null,[d,f])):a.datepicker._hideDatepicker(),!1;case 27:a.datepicker._hideDatepicker();break;case 33:a.datepicker._adjustDate(b.target,b.ctrlKey?-a.datepicker._get(f,"stepBigMonths"):-a.datepicker._get(f,"stepMonths"),"M");break;case 34:a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(f,"stepBigMonths"):+a.datepicker._get(f,"stepMonths"),"M");break;case 35:(b.ctrlKey||b.metaKey)&&a.datepicker._clearDate(b.target),g=b.ctrlKey||b.metaKey;break;case 36:(b.ctrlKey||b.metaKey)&&a.datepicker._gotoToday(b.target),g=b.ctrlKey||b.metaKey;break;case 37:(b.ctrlKey||b.metaKey)&&a.datepicker._adjustDate(b.target,h?1:-1,"D"),g=b.ctrlKey||b.metaKey,b.originalEvent.altKey&&a.datepicker._adjustDate(b.target,b.ctrlKey?-a.datepicker._get(f,"stepBigMonths"):-a.datepicker._get(f,"stepMonths"),"M");break;case 38:(b.ctrlKey||b.metaKey)&&a.datepicker._adjustDate(b.target,-7,"D"),g=b.ctrlKey||b.metaKey;break;case 39:(b.ctrlKey||b.metaKey)&&a.datepicker._adjustDate(b.target,h?-1:1,"D"),g=b.ctrlKey||b.metaKey,b.originalEvent.altKey&&a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(f,"stepBigMonths"):+a.datepicker._get(f,"stepMonths"),"M");break;case 40:(b.ctrlKey||b.metaKey)&&a.datepicker._adjustDate(b.target,7,"D"),g=b.ctrlKey||b.metaKey;break;default:g=!1}else 36===b.keyCode&&b.ctrlKey?a.datepicker._showDatepicker(this):g=!1;g&&(b.preventDefault(),b.stopPropagation())},_doKeyPress:function(b){var c,d,e=a.datepicker._getInst(b.target);return a.datepicker._get(e,"constrainInput")?(c=a.datepicker._possibleChars(a.datepicker._get(e,"dateFormat")),d=String.fromCharCode(null==b.charCode?b.keyCode:b.charCode),b.ctrlKey||b.metaKey||" ">d||!c||c.indexOf(d)>-1):void 0},_doKeyUp:function(b){var c,d=a.datepicker._getInst(b.target);if(d.input.val()!==d.lastVal)try{c=a.datepicker.parseDate(a.datepicker._get(d,"dateFormat"),d.input?d.input.val():null,a.datepicker._getFormatConfig(d)),c&&(a.datepicker._setDateFromField(d),a.datepicker._updateAlternate(d),a.datepicker._updateDatepicker(d))}catch(e){}return!0},_showDatepicker:function(b){if(b=b.target||b,"input"!==b.nodeName.toLowerCase()&&(b=a("input",b.parentNode)[0]),!a.datepicker._isDisabledDatepicker(b)&&a.datepicker._lastInput!==b){var c,e,f,g,i,j,k;c=a.datepicker._getInst(b),a.datepicker._curInst&&a.datepicker._curInst!==c&&(a.datepicker._curInst.dpDiv.stop(!0,!0),c&&a.datepicker._datepickerShowing&&a.datepicker._hideDatepicker(a.datepicker._curInst.input[0])),e=a.datepicker._get(c,"beforeShow"),f=e?e.apply(b,[b,c]):{},f!==!1&&(h(c.settings,f),c.lastVal=null,a.datepicker._lastInput=b,a.datepicker._setDateFromField(c),a.datepicker._inDialog&&(b.value=""),a.datepicker._pos||(a.datepicker._pos=a.datepicker._findPos(b),a.datepicker._pos[1]+=b.offsetHeight),g=!1,a(b).parents().each(function(){return g|="fixed"===a(this).css("position"),!g}),i={left:a.datepicker._pos[0],top:a.datepicker._pos[1]},a.datepicker._pos=null,c.dpDiv.empty(),c.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),a.datepicker._updateDatepicker(c),i=a.datepicker._checkOffset(c,i,g),c.dpDiv.css({position:a.datepicker._inDialog&&a.blockUI?"static":g?"fixed":"absolute",display:"none",left:i.left+"px",top:i.top+"px"}),c.inline||(j=a.datepicker._get(c,"showAnim"),k=a.datepicker._get(c,"duration"),c.dpDiv.css("z-index",d(a(b))+1),a.datepicker._datepickerShowing=!0,a.effects&&a.effects.effect[j]?c.dpDiv.show(j,a.datepicker._get(c,"showOptions"),k):c.dpDiv[j||"show"](j?k:null),a.datepicker._shouldFocusInput(c)&&c.input.focus(),a.datepicker._curInst=c))}},_updateDatepicker:function(b){this.maxRows=4,r=b,b.dpDiv.empty().append(this._generateHTML(b)),this._attachHandlers(b);var c,d=this._getNumberOfMonths(b),e=d[1],f=17,h=b.dpDiv.find("."+this._dayOverClass+" a");h.length>0&&g.apply(h.get(0)),b.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),e>1&&b.dpDiv.addClass("ui-datepicker-multi-"+e).css("width",f*e+"em"),b.dpDiv[(1!==d[0]||1!==d[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),b.dpDiv[(this._get(b,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),b===a.datepicker._curInst&&a.datepicker._datepickerShowing&&a.datepicker._shouldFocusInput(b)&&b.input.focus(),b.yearshtml&&(c=b.yearshtml,setTimeout(function(){c===b.yearshtml&&b.yearshtml&&b.dpDiv.find("select.ui-datepicker-year:first").replaceWith(b.yearshtml),c=b.yearshtml=null},0))},_shouldFocusInput:function(a){return a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&!a.input.is(":focus")},_checkOffset:function(b,c,d){var e=b.dpDiv.outerWidth(),f=b.dpDiv.outerHeight(),g=b.input?b.input.outerWidth():0,h=b.input?b.input.outerHeight():0,i=document.documentElement.clientWidth+(d?0:a(document).scrollLeft()),j=document.documentElement.clientHeight+(d?0:a(document).scrollTop());return c.left-=this._get(b,"isRTL")?e-g:0,c.left-=d&&c.left===b.input.offset().left?a(document).scrollLeft():0,c.top-=d&&c.top===b.input.offset().top+h?a(document).scrollTop():0,c.left-=Math.min(c.left,c.left+e>i&&i>e?Math.abs(c.left+e-i):0),c.top-=Math.min(c.top,c.top+f>j&&j>f?Math.abs(f+h):0),c},_findPos:function(b){for(var c,d=this._getInst(b),e=this._get(d,"isRTL");b&&("hidden"===b.type||1!==b.nodeType||a.expr.filters.hidden(b));)b=b[e?"previousSibling":"nextSibling"];return c=a(b).offset(),[c.left,c.top]},_hideDatepicker:function(b){var c,d,e,f,g=this._curInst;!g||b&&g!==a.data(b,"datepicker")||this._datepickerShowing&&(c=this._get(g,"showAnim"),d=this._get(g,"duration"),e=function(){a.datepicker._tidyDialog(g)},a.effects&&(a.effects.effect[c]||a.effects[c])?g.dpDiv.hide(c,a.datepicker._get(g,"showOptions"),d,e):g.dpDiv["slideDown"===c?"slideUp":"fadeIn"===c?"fadeOut":"hide"](c?d:null,e),c||e(),this._datepickerShowing=!1,f=this._get(g,"onClose"),f&&f.apply(g.input?g.input[0]:null,[g.input?g.input.val():"",g]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),a.blockUI&&(a.unblockUI(),a("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(b){if(a.datepicker._curInst){var c=a(b.target),d=a.datepicker._getInst(c[0]);(c[0].id!==a.datepicker._mainDivId&&0===c.parents("#"+a.datepicker._mainDivId).length&&!c.hasClass(a.datepicker.markerClassName)&&!c.closest("."+a.datepicker._triggerClass).length&&a.datepicker._datepickerShowing&&(!a.datepicker._inDialog||!a.blockUI)||c.hasClass(a.datepicker.markerClassName)&&a.datepicker._curInst!==d)&&a.datepicker._hideDatepicker()}},_adjustDate:function(b,c,d){var e=a(b),f=this._getInst(e[0]);this._isDisabledDatepicker(e[0])||(this._adjustInstDate(f,c+("M"===d?this._get(f,"showCurrentAtPos"):0),d),this._updateDatepicker(f))},_gotoToday:function(b){var c,d=a(b),e=this._getInst(d[0]);this._get(e,"gotoCurrent")&&e.currentDay?(e.selectedDay=e.currentDay,e.drawMonth=e.selectedMonth=e.currentMonth,e.drawYear=e.selectedYear=e.currentYear):(c=new Date,e.selectedDay=c.getDate(),e.drawMonth=e.selectedMonth=c.getMonth(),e.drawYear=e.selectedYear=c.getFullYear()),this._notifyChange(e),this._adjustDate(d)},_selectMonthYear:function(b,c,d){var e=a(b),f=this._getInst(e[0]);f["selected"+("M"===d?"Month":"Year")]=f["draw"+("M"===d?"Month":"Year")]=parseInt(c.options[c.selectedIndex].value,10),this._notifyChange(f),this._adjustDate(e)},_selectDay:function(b,c,d,e){var f,g=a(b);a(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(g[0])||(f=this._getInst(g[0]),f.selectedDay=f.currentDay=a("a",e).html(),f.selectedMonth=f.currentMonth=c,f.selectedYear=f.currentYear=d,this._selectDate(b,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear)))},_clearDate:function(b){var c=a(b);this._selectDate(c,"")},_selectDate:function(b,c){var d,e=a(b),f=this._getInst(e[0]);c=null!=c?c:this._formatDate(f),f.input&&f.input.val(c),this._updateAlternate(f),d=this._get(f,"onSelect"),d?d.apply(f.input?f.input[0]:null,[c,f]):f.input&&f.input.trigger("change"),f.inline?this._updateDatepicker(f):(this._hideDatepicker(),this._lastInput=f.input[0],"object"!=typeof f.input[0]&&f.input.focus(),this._lastInput=null)},_updateAlternate:function(b){var c,d,e,f=this._get(b,"altField");f&&(c=this._get(b,"altFormat")||this._get(b,"dateFormat"),d=this._getDate(b),e=this.formatDate(c,d,this._getFormatConfig(b)),a(f).each(function(){a(this).val(e)}))},noWeekends:function(a){var b=a.getDay();return[b>0&&6>b,""]},iso8601Week:function(a){var b,c=new Date(a.getTime());return c.setDate(c.getDate()+4-(c.getDay()||7)),b=c.getTime(),c.setMonth(0),c.setDate(1),Math.floor(Math.round((b-c)/864e5)/7)+1},parseDate:function(b,c,d){if(null==b||null==c)throw"Invalid arguments";if(c="object"==typeof c?c.toString():c+"",""===c)return null;var e,f,g,h,i=0,j=(d?d.shortYearCutoff:null)||this._defaults.shortYearCutoff,k="string"!=typeof j?j:(new Date).getFullYear()%100+parseInt(j,10),l=(d?d.dayNamesShort:null)||this._defaults.dayNamesShort,m=(d?d.dayNames:null)||this._defaults.dayNames,n=(d?d.monthNamesShort:null)||this._defaults.monthNamesShort,o=(d?d.monthNames:null)||this._defaults.monthNames,p=-1,q=-1,r=-1,s=-1,t=!1,u=function(a){var c=e+1<b.length&&b.charAt(e+1)===a;return c&&e++,c},v=function(a){var b=u(a),d="@"===a?14:"!"===a?20:"y"===a&&b?4:"o"===a?3:2,e="y"===a?d:1,f=new RegExp("^\\d{"+e+","+d+"}"),g=c.substring(i).match(f);if(!g)throw"Missing number at position "+i;return i+=g[0].length,parseInt(g[0],10)},w=function(b,d,e){var f=-1,g=a.map(u(b)?e:d,function(a,b){return[[b,a]]}).sort(function(a,b){return-(a[1].length-b[1].length)});if(a.each(g,function(a,b){var d=b[1];return c.substr(i,d.length).toLowerCase()===d.toLowerCase()?(f=b[0],i+=d.length,!1):void 0}),-1!==f)return f+1;throw"Unknown name at position "+i},x=function(){if(c.charAt(i)!==b.charAt(e))throw"Unexpected literal at position "+i;i++};for(e=0;e<b.length;e++)if(t)"'"!==b.charAt(e)||u("'")?x():t=!1;else switch(b.charAt(e)){case"d":r=v("d");break;case"D":w("D",l,m);break;case"o":s=v("o");break;case"m":q=v("m");break;case"M":q=w("M",n,o);break;case"y":p=v("y");break;case"@":h=new Date(v("@")),p=h.getFullYear(),q=h.getMonth()+1,r=h.getDate();break;case"!":h=new Date((v("!")-this._ticksTo1970)/1e4),p=h.getFullYear(),q=h.getMonth()+1,r=h.getDate();break;case"'":u("'")?x():t=!0;break;default:x()}if(i<c.length&&(g=c.substr(i),!/^\s+/.test(g)))throw"Extra/unparsed characters found in date: "+g;if(-1===p?p=(new Date).getFullYear():100>p&&(p+=(new Date).getFullYear()-(new Date).getFullYear()%100+(k>=p?0:-100)),s>-1)for(q=1,r=s;;){if(f=this._getDaysInMonth(p,q-1),f>=r)break;q++,r-=f}if(h=this._daylightSavingAdjust(new Date(p,q-1,r)),h.getFullYear()!==p||h.getMonth()+1!==q||h.getDate()!==r)throw"Invalid date";return h},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*60*60*1e7,formatDate:function(a,b,c){if(!b)return"";var d,e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,g=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,h=(c?c.monthNames:null)||this._defaults.monthNames,i=function(b){var c=d+1<a.length&&a.charAt(d+1)===b;return c&&d++,c},j=function(a,b,c){var d=""+b;if(i(a))for(;d.length<c;)d="0"+d;return d},k=function(a,b,c,d){return i(a)?d[b]:c[b]},l="",m=!1;if(b)for(d=0;d<a.length;d++)if(m)"'"!==a.charAt(d)||i("'")?l+=a.charAt(d):m=!1;else switch(a.charAt(d)){case"d":l+=j("d",b.getDate(),2);break;case"D":l+=k("D",b.getDay(),e,f);break;case"o":l+=j("o",Math.round((new Date(b.getFullYear(),b.getMonth(),b.getDate()).getTime()-new Date(b.getFullYear(),0,0).getTime())/864e5),3);break;case"m":l+=j("m",b.getMonth()+1,2);break;case"M":l+=k("M",b.getMonth(),g,h);break;case"y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case"@":l+=b.getTime();break;case"!":l+=1e4*b.getTime()+this._ticksTo1970;break;case"'":i("'")?l+="'":m=!0;break;default:l+=a.charAt(d)}return l},_possibleChars:function(a){var b,c="",d=!1,e=function(c){var d=b+1<a.length&&a.charAt(b+1)===c;return d&&b++,d};for(b=0;b<a.length;b++)if(d)"'"!==a.charAt(b)||e("'")?c+=a.charAt(b):d=!1;else switch(a.charAt(b)){case"d":case"m":case"y":case"@":c+="0123456789";break;case"D":case"M":return null;case"'":e("'")?c+="'":d=!0;break;default:c+=a.charAt(b)}return c},_get:function(a,b){return void 0!==a.settings[b]?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!==a.lastVal){var c=this._get(a,"dateFormat"),d=a.lastVal=a.input?a.input.val():null,e=this._getDefaultDate(a),f=e,g=this._getFormatConfig(a);try{f=this.parseDate(c,d,g)||e}catch(h){d=b?"":d}a.selectedDay=f.getDate(),a.drawMonth=a.selectedMonth=f.getMonth(),
+a.drawYear=a.selectedYear=f.getFullYear(),a.currentDay=d?f.getDate():0,a.currentMonth=d?f.getMonth():0,a.currentYear=d?f.getFullYear():0,this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(b,c,d){var e=function(a){var b=new Date;return b.setDate(b.getDate()+a),b},f=function(c){try{return a.datepicker.parseDate(a.datepicker._get(b,"dateFormat"),c,a.datepicker._getFormatConfig(b))}catch(d){}for(var e=(c.toLowerCase().match(/^c/)?a.datepicker._getDate(b):null)||new Date,f=e.getFullYear(),g=e.getMonth(),h=e.getDate(),i=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,j=i.exec(c);j;){switch(j[2]||"d"){case"d":case"D":h+=parseInt(j[1],10);break;case"w":case"W":h+=7*parseInt(j[1],10);break;case"m":case"M":g+=parseInt(j[1],10),h=Math.min(h,a.datepicker._getDaysInMonth(f,g));break;case"y":case"Y":f+=parseInt(j[1],10),h=Math.min(h,a.datepicker._getDaysInMonth(f,g))}j=i.exec(c)}return new Date(f,g,h)},g=null==c||""===c?d:"string"==typeof c?f(c):"number"==typeof c?isNaN(c)?d:e(c):new Date(c.getTime());return g=g&&"Invalid Date"===g.toString()?d:g,g&&(g.setHours(0),g.setMinutes(0),g.setSeconds(0),g.setMilliseconds(0)),this._daylightSavingAdjust(g)},_daylightSavingAdjust:function(a){return a?(a.setHours(a.getHours()>12?a.getHours()+2:0),a):null},_setDate:function(a,b,c){var d=!b,e=a.selectedMonth,f=a.selectedYear,g=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=g.getDate(),a.drawMonth=a.selectedMonth=a.currentMonth=g.getMonth(),a.drawYear=a.selectedYear=a.currentYear=g.getFullYear(),e===a.selectedMonth&&f===a.selectedYear||c||this._notifyChange(a),this._adjustInstDate(a),a.input&&a.input.val(d?"":this._formatDate(a))},_getDate:function(a){var b=!a.currentYear||a.input&&""===a.input.val()?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return b},_attachHandlers:function(b){var c=this._get(b,"stepMonths"),d="#"+b.id.replace(/\\\\/g,"\\");b.dpDiv.find("[data-handler]").map(function(){var b={prev:function(){a.datepicker._adjustDate(d,-c,"M")},next:function(){a.datepicker._adjustDate(d,+c,"M")},hide:function(){a.datepicker._hideDatepicker()},today:function(){a.datepicker._gotoToday(d)},selectDay:function(){return a.datepicker._selectDay(d,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return a.datepicker._selectMonthYear(d,this,"M"),!1},selectYear:function(){return a.datepicker._selectMonthYear(d,this,"Y"),!1}};a(this).bind(this.getAttribute("data-event"),b[this.getAttribute("data-handler")])})},_generateHTML:function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O=new Date,P=this._daylightSavingAdjust(new Date(O.getFullYear(),O.getMonth(),O.getDate())),Q=this._get(a,"isRTL"),R=this._get(a,"showButtonPanel"),S=this._get(a,"hideIfNoPrevNext"),T=this._get(a,"navigationAsDateFormat"),U=this._getNumberOfMonths(a),V=this._get(a,"showCurrentAtPos"),W=this._get(a,"stepMonths"),X=1!==U[0]||1!==U[1],Y=this._daylightSavingAdjust(a.currentDay?new Date(a.currentYear,a.currentMonth,a.currentDay):new Date(9999,9,9)),Z=this._getMinMaxDate(a,"min"),$=this._getMinMaxDate(a,"max"),_=a.drawMonth-V,aa=a.drawYear;if(0>_&&(_+=12,aa--),$)for(b=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth()-U[0]*U[1]+1,$.getDate())),b=Z&&Z>b?Z:b;this._daylightSavingAdjust(new Date(aa,_,1))>b;)_--,0>_&&(_=11,aa--);for(a.drawMonth=_,a.drawYear=aa,c=this._get(a,"prevText"),c=T?this.formatDate(c,this._daylightSavingAdjust(new Date(aa,_-W,1)),this._getFormatConfig(a)):c,d=this._canAdjustMonth(a,-1,aa,_)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+c+"'><span class='ui-icon ui-icon-circle-triangle-"+(Q?"e":"w")+"'>"+c+"</span></a>":S?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+c+"'><span class='ui-icon ui-icon-circle-triangle-"+(Q?"e":"w")+"'>"+c+"</span></a>",e=this._get(a,"nextText"),e=T?this.formatDate(e,this._daylightSavingAdjust(new Date(aa,_+W,1)),this._getFormatConfig(a)):e,f=this._canAdjustMonth(a,1,aa,_)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+e+"'><span class='ui-icon ui-icon-circle-triangle-"+(Q?"w":"e")+"'>"+e+"</span></a>":S?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+e+"'><span class='ui-icon ui-icon-circle-triangle-"+(Q?"w":"e")+"'>"+e+"</span></a>",g=this._get(a,"currentText"),h=this._get(a,"gotoCurrent")&&a.currentDay?Y:P,g=T?this.formatDate(g,h,this._getFormatConfig(a)):g,i=a.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(a,"closeText")+"</button>",j=R?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Q?i:"")+(this._isInRange(a,h)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+g+"</button>":"")+(Q?"":i)+"</div>":"",k=parseInt(this._get(a,"firstDay"),10),k=isNaN(k)?0:k,l=this._get(a,"showWeek"),m=this._get(a,"dayNames"),n=this._get(a,"dayNamesMin"),o=this._get(a,"monthNames"),p=this._get(a,"monthNamesShort"),q=this._get(a,"beforeShowDay"),r=this._get(a,"showOtherMonths"),s=this._get(a,"selectOtherMonths"),t=this._getDefaultDate(a),u="",w=0;w<U[0];w++){for(x="",this.maxRows=4,y=0;y<U[1];y++){if(z=this._daylightSavingAdjust(new Date(aa,_,a.selectedDay)),A=" ui-corner-all",B="",X){if(B+="<div class='ui-datepicker-group",U[1]>1)switch(y){case 0:B+=" ui-datepicker-group-first",A=" ui-corner-"+(Q?"right":"left");break;case U[1]-1:B+=" ui-datepicker-group-last",A=" ui-corner-"+(Q?"left":"right");break;default:B+=" ui-datepicker-group-middle",A=""}B+="'>"}for(B+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+A+"'>"+(/all|left/.test(A)&&0===w?Q?f:d:"")+(/all|right/.test(A)&&0===w?Q?d:f:"")+this._generateMonthYearHeader(a,_,aa,Z,$,w>0||y>0,o,p)+"</div><table class='ui-datepicker-calendar'><thead><tr>",C=l?"<th class='ui-datepicker-week-col'>"+this._get(a,"weekHeader")+"</th>":"",v=0;7>v;v++)D=(v+k)%7,C+="<th scope='col'"+((v+k+6)%7>=5?" class='ui-datepicker-week-end'":"")+"><span title='"+m[D]+"'>"+n[D]+"</span></th>";for(B+=C+"</tr></thead><tbody>",E=this._getDaysInMonth(aa,_),aa===a.selectedYear&&_===a.selectedMonth&&(a.selectedDay=Math.min(a.selectedDay,E)),F=(this._getFirstDayOfMonth(aa,_)-k+7)%7,G=Math.ceil((F+E)/7),H=X&&this.maxRows>G?this.maxRows:G,this.maxRows=H,I=this._daylightSavingAdjust(new Date(aa,_,1-F)),J=0;H>J;J++){for(B+="<tr>",K=l?"<td class='ui-datepicker-week-col'>"+this._get(a,"calculateWeek")(I)+"</td>":"",v=0;7>v;v++)L=q?q.apply(a.input?a.input[0]:null,[I]):[!0,""],M=I.getMonth()!==_,N=M&&!s||!L[0]||Z&&Z>I||$&&I>$,K+="<td class='"+((v+k+6)%7>=5?" ui-datepicker-week-end":"")+(M?" ui-datepicker-other-month":"")+(I.getTime()===z.getTime()&&_===a.selectedMonth&&a._keyEvent||t.getTime()===I.getTime()&&t.getTime()===z.getTime()?" "+this._dayOverClass:"")+(N?" "+this._unselectableClass+" ui-state-disabled":"")+(M&&!r?"":" "+L[1]+(I.getTime()===Y.getTime()?" "+this._currentClass:"")+(I.getTime()===P.getTime()?" ui-datepicker-today":""))+"'"+(M&&!r||!L[2]?"":" title='"+L[2].replace(/'/g,"&#39;")+"'")+(N?"":" data-handler='selectDay' data-event='click' data-month='"+I.getMonth()+"' data-year='"+I.getFullYear()+"'")+">"+(M&&!r?"&#xa0;":N?"<span class='ui-state-default'>"+I.getDate()+"</span>":"<a class='ui-state-default"+(I.getTime()===P.getTime()?" ui-state-highlight":"")+(I.getTime()===Y.getTime()?" ui-state-active":"")+(M?" ui-priority-secondary":"")+"' href='#'>"+I.getDate()+"</a>")+"</td>",I.setDate(I.getDate()+1),I=this._daylightSavingAdjust(I);B+=K+"</tr>"}_++,_>11&&(_=0,aa++),B+="</tbody></table>"+(X?"</div>"+(U[0]>0&&y===U[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),x+=B}u+=x}return u+=j,a._keyEvent=!1,u},_generateMonthYearHeader:function(a,b,c,d,e,f,g,h){var i,j,k,l,m,n,o,p,q=this._get(a,"changeMonth"),r=this._get(a,"changeYear"),s=this._get(a,"showMonthAfterYear"),t="<div class='ui-datepicker-title'>",u="";if(f||!q)u+="<span class='ui-datepicker-month'>"+g[b]+"</span>";else{for(i=d&&d.getFullYear()===c,j=e&&e.getFullYear()===c,u+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",k=0;12>k;k++)(!i||k>=d.getMonth())&&(!j||k<=e.getMonth())&&(u+="<option value='"+k+"'"+(k===b?" selected='selected'":"")+">"+h[k]+"</option>");u+="</select>"}if(s||(t+=u+(!f&&q&&r?"":"&#xa0;")),!a.yearshtml)if(a.yearshtml="",f||!r)t+="<span class='ui-datepicker-year'>"+c+"</span>";else{for(l=this._get(a,"yearRange").split(":"),m=(new Date).getFullYear(),n=function(a){var b=a.match(/c[+\-].*/)?c+parseInt(a.substring(1),10):a.match(/[+\-].*/)?m+parseInt(a,10):parseInt(a,10);return isNaN(b)?m:b},o=n(l[0]),p=Math.max(o,n(l[1]||"")),o=d?Math.max(o,d.getFullYear()):o,p=e?Math.min(p,e.getFullYear()):p,a.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";p>=o;o++)a.yearshtml+="<option value='"+o+"'"+(o===c?" selected='selected'":"")+">"+o+"</option>";a.yearshtml+="</select>",t+=a.yearshtml,a.yearshtml=null}return t+=this._get(a,"yearSuffix"),s&&(t+=(!f&&q&&r?"":"&#xa0;")+u),t+="</div>"},_adjustInstDate:function(a,b,c){var d=a.drawYear+("Y"===c?b:0),e=a.drawMonth+("M"===c?b:0),f=Math.min(a.selectedDay,this._getDaysInMonth(d,e))+("D"===c?b:0),g=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(d,e,f)));a.selectedDay=g.getDate(),a.drawMonth=a.selectedMonth=g.getMonth(),a.drawYear=a.selectedYear=g.getFullYear(),("M"===c||"Y"===c)&&this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min"),d=this._getMinMaxDate(a,"max"),e=c&&c>b?c:b;return d&&e>d?d:e},_notifyChange:function(a){var b=this._get(a,"onChangeMonthYear");b&&b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){var b=this._get(a,"numberOfMonths");return null==b?[1,1]:"number"==typeof b?[1,b]:b},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return new Date(a,b,1).getDay()},_canAdjustMonth:function(a,b,c,d){var e=this._getNumberOfMonths(a),f=this._daylightSavingAdjust(new Date(c,d+(0>b?b:e[0]*e[1]),1));return 0>b&&f.setDate(this._getDaysInMonth(f.getFullYear(),f.getMonth())),this._isInRange(a,f)},_isInRange:function(a,b){var c,d,e=this._getMinMaxDate(a,"min"),f=this._getMinMaxDate(a,"max"),g=null,h=null,i=this._get(a,"yearRange");return i&&(c=i.split(":"),d=(new Date).getFullYear(),g=parseInt(c[0],10),h=parseInt(c[1],10),c[0].match(/[+\-].*/)&&(g+=d),c[1].match(/[+\-].*/)&&(h+=d)),(!e||b.getTime()>=e.getTime())&&(!f||b.getTime()<=f.getTime())&&(!g||b.getFullYear()>=g)&&(!h||b.getFullYear()<=h)},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");return b="string"!=typeof b?b:(new Date).getFullYear()%100+parseInt(b,10),{shortYearCutoff:b,dayNamesShort:this._get(a,"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,d){b||(a.currentDay=a.selectedDay,a.currentMonth=a.selectedMonth,a.currentYear=a.selectedYear);var e=b?"object"==typeof b?b:this._daylightSavingAdjust(new Date(d,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),e,this._getFormatConfig(a))}}),a.fn.datepicker=function(b){if(!this.length)return this;a.datepicker.initialized||(a(document).mousedown(a.datepicker._checkExternalClick),a.datepicker.initialized=!0),0===a("#"+a.datepicker._mainDivId).length&&a("body").append(a.datepicker.dpDiv);var c=Array.prototype.slice.call(arguments,1);return"string"!=typeof b||"isDisabled"!==b&&"getDate"!==b&&"widget"!==b?"option"===b&&2===arguments.length&&"string"==typeof arguments[1]?a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(c)):this.each(function(){"string"==typeof b?a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this].concat(c)):a.datepicker._attachDatepicker(this,b)}):a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(c))},a.datepicker=new e,a.datepicker.initialized=!1,a.datepicker.uuid=(new Date).getTime(),a.datepicker.version="1.11.4";a.datepicker;a.widget("ui.draggable",a.ui.mouse,{version:"1.11.4",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._setHandleClassName(),this._mouseInit()},_setOption:function(a,b){this._super(a,b),"handle"===a&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?void(this.destroyOnClear=!0):(this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._removeHandleClassName(),void this._mouseDestroy())},_mouseCapture:function(b){var c=this.options;return this._blurActiveElement(b),this.helper||c.disabled||a(b.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(b),this.handle?(this._blockFrames(c.iframeFix===!0?"iframe":c.iframeFix),!0):!1)},_blockFrames:function(b){this.iframeBlocks=this.document.find(b).map(function(){var b=a(this);return a("<div>").css("position","absolute").appendTo(b.parent()).outerWidth(b.outerWidth()).outerHeight(b.outerHeight()).offset(b.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(b){var c=this.document[0];if(this.handleElement.is(b.target))try{c.activeElement&&"body"!==c.activeElement.nodeName.toLowerCase()&&a(c.activeElement).blur()}catch(d){}},_mouseStart:function(b){var c=this.options;return this.helper=this._createHelper(b),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),a.ui.ddmanager&&(a.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===a(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(b),this.originalPosition=this.position=this._generatePosition(b,!1),this.originalPageX=b.pageX,this.originalPageY=b.pageY,c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt),this._setContainment(),this._trigger("start",b)===!1?(this._clear(),!1):(this._cacheHelperProportions(),a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this._normalizeRightBottom(),this._mouseDrag(b,!0),a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,b),!0)},_refreshOffsets:function(a){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:a.pageX-this.offset.left,top:a.pageY-this.offset.top}},_mouseDrag:function(b,c){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(b,!0),this.positionAbs=this._convertPositionTo("absolute"),!c){var d=this._uiHash();if(this._trigger("drag",b,d)===!1)return this._mouseUp({}),!1;this.position=d.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",a.ui.ddmanager&&a.ui.ddmanager.drag(this,b),!1},_mouseStop:function(b){var c=this,d=!1;return a.ui.ddmanager&&!this.options.dropBehaviour&&(d=a.ui.ddmanager.drop(this,b)),this.dropped&&(d=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!d||"valid"===this.options.revert&&d||this.options.revert===!0||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d)?a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",b)!==!1&&c._clear()}):this._trigger("stop",b)!==!1&&this._clear(),!1},_mouseUp:function(b){return this._unblockFrames(),a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,b),this.handleElement.is(b.target)&&this.element.focus(),a.ui.mouse.prototype._mouseUp.call(this,b)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(b){return this.options.handle?!!a(b.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this.handleElement.addClass("ui-draggable-handle")},_removeHandleClassName:function(){this.handleElement.removeClass("ui-draggable-handle")},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper),e=d?a(c.helper.apply(this.element[0],[b])):"clone"===c.helper?this.element.clone().removeAttr("id"):this.element;return e.parents("body").length||e.appendTo("parent"===c.appendTo?this.element[0].parentNode:c.appendTo),d&&e[0]===this.element[0]&&this._setPositionRelative(),e[0]===this.element[0]||/(fixed|absolute)/.test(e.css("position"))||e.css("position","absolute"),e},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(b){"string"==typeof b&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_isRootNode:function(a){return/(html|body)/i.test(a.tagName)||a===this.document[0]},_getParentOffset:function(){var b=this.offsetParent.offset(),c=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==c&&a.contains(this.scrollParent[0],this.offsetParent[0])&&(b.left+=this.scrollParent.scrollLeft(),b.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(b={top:0,left:0}),{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var a=this.element.position(),b=this._isRootNode(this.scrollParent[0]);return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+(b?0:this.scrollParent.scrollTop()),left:a.left-(parseInt(this.helper.css("left"),10)||0)+(b?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b,c,d,e=this.options,f=this.document[0];return this.relativeContainer=null,e.containment?"window"===e.containment?void(this.containment=[a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,a(window).scrollLeft()+a(window).width()-this.helperProportions.width-this.margins.left,a(window).scrollTop()+(a(window).height()||f.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]):"document"===e.containment?void(this.containment=[0,0,a(f).width()-this.helperProportions.width-this.margins.left,(a(f).height()||f.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]):e.containment.constructor===Array?void(this.containment=e.containment):("parent"===e.containment&&(e.containment=this.helper[0].parentNode),c=a(e.containment),d=c[0],void(d&&(b=/(scroll|auto)/.test(c.css("overflow")),this.containment=[(parseInt(c.css("borderLeftWidth"),10)||0)+(parseInt(c.css("paddingLeft"),10)||0),(parseInt(c.css("borderTopWidth"),10)||0)+(parseInt(c.css("paddingTop"),10)||0),(b?Math.max(d.scrollWidth,d.offsetWidth):d.offsetWidth)-(parseInt(c.css("borderRightWidth"),10)||0)-(parseInt(c.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(b?Math.max(d.scrollHeight,d.offsetHeight):d.offsetHeight)-(parseInt(c.css("borderBottomWidth"),10)||0)-(parseInt(c.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=c))):void(this.containment=null)},_convertPositionTo:function(a,b){b||(b=this.position);var c="absolute"===a?1:-1,d=this._isRootNode(this.scrollParent[0]);return{top:b.top+this.offset.relative.top*c+this.offset.parent.top*c-("fixed"===this.cssPosition?-this.offset.scroll.top:d?0:this.offset.scroll.top)*c,left:b.left+this.offset.relative.left*c+this.offset.parent.left*c-("fixed"===this.cssPosition?-this.offset.scroll.left:d?0:this.offset.scroll.left)*c}},_generatePosition:function(a,b){var c,d,e,f,g=this.options,h=this._isRootNode(this.scrollParent[0]),i=a.pageX,j=a.pageY;return h&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),b&&(this.containment&&(this.relativeContainer?(d=this.relativeContainer.offset(),c=[this.containment[0]+d.left,this.containment[1]+d.top,this.containment[2]+d.left,this.containment[3]+d.top]):c=this.containment,a.pageX-this.offset.click.left<c[0]&&(i=c[0]+this.offset.click.left),a.pageY-this.offset.click.top<c[1]&&(j=c[1]+this.offset.click.top),a.pageX-this.offset.click.left>c[2]&&(i=c[2]+this.offset.click.left),a.pageY-this.offset.click.top>c[3]&&(j=c[3]+this.offset.click.top)),g.grid&&(e=g.grid[1]?this.originalPageY+Math.round((j-this.originalPageY)/g.grid[1])*g.grid[1]:this.originalPageY,j=c?e-this.offset.click.top>=c[1]||e-this.offset.click.top>c[3]?e:e-this.offset.click.top>=c[1]?e-g.grid[1]:e+g.grid[1]:e,f=g.grid[0]?this.originalPageX+Math.round((i-this.originalPageX)/g.grid[0])*g.grid[0]:this.originalPageX,i=c?f-this.offset.click.left>=c[0]||f-this.offset.click.left>c[2]?f:f-this.offset.click.left>=c[0]?f-g.grid[0]:f+g.grid[0]:f),"y"===g.axis&&(i=this.originalPageX),"x"===g.axis&&(j=this.originalPageY)),{top:j-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:h?0:this.offset.scroll.top),left:i-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:h?0:this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_normalizeRightBottom:function(){"y"!==this.options.axis&&"auto"!==this.helper.css("right")&&(this.helper.width(this.helper.width()),this.helper.css("right","auto")),"x"!==this.options.axis&&"auto"!==this.helper.css("bottom")&&(this.helper.height(this.helper.height()),this.helper.css("bottom","auto"))},_trigger:function(b,c,d){return d=d||this._uiHash(),a.ui.plugin.call(this,b,[c,d,this],!0),/^(drag|start|stop)/.test(b)&&(this.positionAbs=this._convertPositionTo("absolute"),d.offset=this.positionAbs),a.Widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),a.ui.plugin.add("draggable","connectToSortable",{start:function(b,c,d){var e=a.extend({},c,{item:d.element});d.sortables=[],a(d.options.connectToSortable).each(function(){var c=a(this).sortable("instance");c&&!c.options.disabled&&(d.sortables.push(c),c.refreshPositions(),c._trigger("activate",b,e))})},stop:function(b,c,d){var e=a.extend({},c,{item:d.element});d.cancelHelperRemoval=!1,a.each(d.sortables,function(){var a=this;a.isOver?(a.isOver=0,d.cancelHelperRemoval=!0,a.cancelHelperRemoval=!1,a._storedCSS={position:a.placeholder.css("position"),top:a.placeholder.css("top"),left:a.placeholder.css("left")},a._mouseStop(b),a.options.helper=a.options._helper):(a.cancelHelperRemoval=!0,a._trigger("deactivate",b,e))})},drag:function(b,c,d){a.each(d.sortables,function(){var e=!1,f=this;f.positionAbs=d.positionAbs,f.helperProportions=d.helperProportions,f.offset.click=d.offset.click,f._intersectsWith(f.containerCache)&&(e=!0,a.each(d.sortables,function(){return this.positionAbs=d.positionAbs,this.helperProportions=d.helperProportions,this.offset.click=d.offset.click,this!==f&&this._intersectsWith(this.containerCache)&&a.contains(f.element[0],this.element[0])&&(e=!1),e})),e?(f.isOver||(f.isOver=1,d._parent=c.helper.parent(),f.currentItem=c.helper.appendTo(f.element).data("ui-sortable-item",!0),f.options._helper=f.options.helper,f.options.helper=function(){return c.helper[0]},b.target=f.currentItem[0],f._mouseCapture(b,!0),f._mouseStart(b,!0,!0),f.offset.click.top=d.offset.click.top,f.offset.click.left=d.offset.click.left,f.offset.parent.left-=d.offset.parent.left-f.offset.parent.left,f.offset.parent.top-=d.offset.parent.top-f.offset.parent.top,d._trigger("toSortable",b),d.dropped=f.element,a.each(d.sortables,function(){this.refreshPositions()}),d.currentItem=d.element,f.fromOutside=d),f.currentItem&&(f._mouseDrag(b),c.position=f.position)):f.isOver&&(f.isOver=0,f.cancelHelperRemoval=!0,f.options._revert=f.options.revert,f.options.revert=!1,f._trigger("out",b,f._uiHash(f)),f._mouseStop(b,!0),f.options.revert=f.options._revert,f.options.helper=f.options._helper,f.placeholder&&f.placeholder.remove(),c.helper.appendTo(d._parent),d._refreshOffsets(b),c.position=d._generatePosition(b,!0),d._trigger("fromSortable",b),d.dropped=!1,a.each(d.sortables,function(){this.refreshPositions()}))})}}),a.ui.plugin.add("draggable","cursor",{start:function(b,c,d){var e=a("body"),f=d.options;e.css("cursor")&&(f._cursor=e.css("cursor")),e.css("cursor",f.cursor)},stop:function(b,c,d){var e=d.options;e._cursor&&a("body").css("cursor",e._cursor)}}),a.ui.plugin.add("draggable","opacity",{start:function(b,c,d){var e=a(c.helper),f=d.options;e.css("opacity")&&(f._opacity=e.css("opacity")),e.css("opacity",f.opacity)},stop:function(b,c,d){var e=d.options;e._opacity&&a(c.helper).css("opacity",e._opacity)}}),a.ui.plugin.add("draggable","scroll",{start:function(a,b,c){c.scrollParentNotHidden||(c.scrollParentNotHidden=c.helper.scrollParent(!1)),c.scrollParentNotHidden[0]!==c.document[0]&&"HTML"!==c.scrollParentNotHidden[0].tagName&&(c.overflowOffset=c.scrollParentNotHidden.offset())},drag:function(b,c,d){var e=d.options,f=!1,g=d.scrollParentNotHidden[0],h=d.document[0];g!==h&&"HTML"!==g.tagName?(e.axis&&"x"===e.axis||(d.overflowOffset.top+g.offsetHeight-b.pageY<e.scrollSensitivity?g.scrollTop=f=g.scrollTop+e.scrollSpeed:b.pageY-d.overflowOffset.top<e.scrollSensitivity&&(g.scrollTop=f=g.scrollTop-e.scrollSpeed)),e.axis&&"y"===e.axis||(d.overflowOffset.left+g.offsetWidth-b.pageX<e.scrollSensitivity?g.scrollLeft=f=g.scrollLeft+e.scrollSpeed:b.pageX-d.overflowOffset.left<e.scrollSensitivity&&(g.scrollLeft=f=g.scrollLeft-e.scrollSpeed))):(e.axis&&"x"===e.axis||(b.pageY-a(h).scrollTop()<e.scrollSensitivity?f=a(h).scrollTop(a(h).scrollTop()-e.scrollSpeed):a(window).height()-(b.pageY-a(h).scrollTop())<e.scrollSensitivity&&(f=a(h).scrollTop(a(h).scrollTop()+e.scrollSpeed))),e.axis&&"y"===e.axis||(b.pageX-a(h).scrollLeft()<e.scrollSensitivity?f=a(h).scrollLeft(a(h).scrollLeft()-e.scrollSpeed):a(window).width()-(b.pageX-a(h).scrollLeft())<e.scrollSensitivity&&(f=a(h).scrollLeft(a(h).scrollLeft()+e.scrollSpeed)))),f!==!1&&a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(d,b)}}),a.ui.plugin.add("draggable","snap",{start:function(b,c,d){var e=d.options;d.snapElements=[],a(e.snap.constructor!==String?e.snap.items||":data(ui-draggable)":e.snap).each(function(){var b=a(this),c=b.offset();this!==d.element[0]&&d.snapElements.push({item:this,width:b.outerWidth(),height:b.outerHeight(),top:c.top,left:c.left})})},drag:function(b,c,d){var e,f,g,h,i,j,k,l,m,n,o=d.options,p=o.snapTolerance,q=c.offset.left,r=q+d.helperProportions.width,s=c.offset.top,t=s+d.helperProportions.height;for(m=d.snapElements.length-1;m>=0;m--)i=d.snapElements[m].left-d.margins.left,j=i+d.snapElements[m].width,k=d.snapElements[m].top-d.margins.top,l=k+d.snapElements[m].height,i-p>r||q>j+p||k-p>t||s>l+p||!a.contains(d.snapElements[m].item.ownerDocument,d.snapElements[m].item)?(d.snapElements[m].snapping&&d.options.snap.release&&d.options.snap.release.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[m].item})),d.snapElements[m].snapping=!1):("inner"!==o.snapMode&&(e=Math.abs(k-t)<=p,f=Math.abs(l-s)<=p,g=Math.abs(i-r)<=p,h=Math.abs(j-q)<=p,e&&(c.position.top=d._convertPositionTo("relative",{top:k-d.helperProportions.height,left:0}).top),f&&(c.position.top=d._convertPositionTo("relative",{top:l,left:0}).top),g&&(c.position.left=d._convertPositionTo("relative",{top:0,left:i-d.helperProportions.width}).left),h&&(c.position.left=d._convertPositionTo("relative",{top:0,left:j}).left)),n=e||f||g||h,"outer"!==o.snapMode&&(e=Math.abs(k-s)<=p,f=Math.abs(l-t)<=p,g=Math.abs(i-q)<=p,h=Math.abs(j-r)<=p,e&&(c.position.top=d._convertPositionTo("relative",{top:k,left:0}).top),f&&(c.position.top=d._convertPositionTo("relative",{top:l-d.helperProportions.height,left:0}).top),g&&(c.position.left=d._convertPositionTo("relative",{top:0,left:i}).left),h&&(c.position.left=d._convertPositionTo("relative",{top:0,left:j-d.helperProportions.width}).left)),!d.snapElements[m].snapping&&(e||f||g||h||n)&&d.options.snap.snap&&d.options.snap.snap.call(d.element,b,a.extend(d._uiHash(),{snapItem:d.snapElements[m].item})),d.snapElements[m].snapping=e||f||g||h||n)}}),a.ui.plugin.add("draggable","stack",{start:function(b,c,d){var e,f=d.options,g=a.makeArray(a(f.stack)).sort(function(b,c){return(parseInt(a(b).css("zIndex"),10)||0)-(parseInt(a(c).css("zIndex"),10)||0)});g.length&&(e=parseInt(a(g[0]).css("zIndex"),10)||0,a(g).each(function(b){a(this).css("zIndex",e+b)}),this.css("zIndex",e+g.length))}}),a.ui.plugin.add("draggable","zIndex",{start:function(b,c,d){var e=a(c.helper),f=d.options;e.css("zIndex")&&(f._zIndex=e.css("zIndex")),e.css("zIndex",f.zIndex)},stop:function(b,c,d){var e=d.options;e._zIndex&&a(c.helper).css("zIndex",e._zIndex)}});a.ui.draggable;a.widget("ui.resizable",a.ui.mouse,{version:"1.11.4",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(a){return parseInt(a,10)||0},_isNumber:function(a){return!isNaN(parseInt(a,10))},_hasScroll:function(b,c){if("hidden"===a(b).css("overflow"))return!1;var d=c&&"left"===c?"scrollLeft":"scrollTop",e=!1;return b[d]>0?!0:(b[d]=1,e=b[d]>0,b[d]=0,e)},_create:function(){var b,c,d,e,f,g=this,h=this.options;if(this.element.addClass("ui-resizable"),a.extend(this,{_aspectRatio:!!h.aspectRatio,aspectRatio:h.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:h.helper||h.ghost||h.animate?h.helper||"ui-resizable-helper":null
+}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(a("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=h.handles||(a(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=a(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),b=this.handles.split(","),this.handles={},c=0;c<b.length;c++)d=a.trim(b[c]),f="ui-resizable-"+d,e=a("<div class='ui-resizable-handle "+f+"'></div>"),e.css({zIndex:h.zIndex}),"se"===d&&e.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[d]=".ui-resizable-"+d,this.element.append(e);this._renderAxis=function(b){var c,d,e,f;b=b||this.element;for(c in this.handles)this.handles[c].constructor===String?this.handles[c]=this.element.children(this.handles[c]).first().show():(this.handles[c].jquery||this.handles[c].nodeType)&&(this.handles[c]=a(this.handles[c]),this._on(this.handles[c],{mousedown:g._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(d=a(this.handles[c],this.element),f=/sw|ne|nw|se|n|s/.test(c)?d.outerHeight():d.outerWidth(),e=["padding",/ne|nw|n/.test(c)?"Top":/se|sw|s/.test(c)?"Bottom":/^e$/.test(c)?"Right":"Left"].join(""),b.css(e,f),this._proportionallyResize()),this._handles=this._handles.add(this.handles[c])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.mouseover(function(){g.resizing||(this.className&&(e=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),g.axis=e&&e[1]?e[1]:"se")}),h.autoHide&&(this._handles.hide(),a(this.element).addClass("ui-resizable-autohide").mouseenter(function(){h.disabled||(a(this).removeClass("ui-resizable-autohide"),g._handles.show())}).mouseleave(function(){h.disabled||g.resizing||(a(this).addClass("ui-resizable-autohide"),g._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var b,c=function(b){a(b).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(c(this.element),b=this.element,this.originalElement.css({position:b.css("position"),width:b.outerWidth(),height:b.outerHeight(),top:b.css("top"),left:b.css("left")}).insertAfter(b),b.remove()),this.originalElement.css("resize",this.originalResizeStyle),c(this.originalElement),this},_mouseCapture:function(b){var c,d,e=!1;for(c in this.handles)d=a(this.handles[c])[0],(d===b.target||a.contains(d,b.target))&&(e=!0);return!this.options.disabled&&e},_mouseStart:function(b){var c,d,e,f=this.options,g=this.element;return this.resizing=!0,this._renderProxy(),c=this._num(this.helper.css("left")),d=this._num(this.helper.css("top")),f.containment&&(c+=a(f.containment).scrollLeft()||0,d+=a(f.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:c,top:d},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:g.width(),height:g.height()},this.originalSize=this._helper?{width:g.outerWidth(),height:g.outerHeight()}:{width:g.width(),height:g.height()},this.sizeDiff={width:g.outerWidth()-g.width(),height:g.outerHeight()-g.height()},this.originalPosition={left:c,top:d},this.originalMousePosition={left:b.pageX,top:b.pageY},this.aspectRatio="number"==typeof f.aspectRatio?f.aspectRatio:this.originalSize.width/this.originalSize.height||1,e=a(".ui-resizable-"+this.axis).css("cursor"),a("body").css("cursor","auto"===e?this.axis+"-resize":e),g.addClass("ui-resizable-resizing"),this._propagate("start",b),!0},_mouseDrag:function(b){var c,d,e=this.originalMousePosition,f=this.axis,g=b.pageX-e.left||0,h=b.pageY-e.top||0,i=this._change[f];return this._updatePrevProperties(),i?(c=i.apply(this,[b,g,h]),this._updateVirtualBoundaries(b.shiftKey),(this._aspectRatio||b.shiftKey)&&(c=this._updateRatio(c,b)),c=this._respectSize(c,b),this._updateCache(c),this._propagate("resize",b),d=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),a.isEmptyObject(d)||(this._updatePrevProperties(),this._trigger("resize",b,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(b){this.resizing=!1;var c,d,e,f,g,h,i,j=this.options,k=this;return this._helper&&(c=this._proportionallyResizeElements,d=c.length&&/textarea/i.test(c[0].nodeName),e=d&&this._hasScroll(c[0],"left")?0:k.sizeDiff.height,f=d?0:k.sizeDiff.width,g={width:k.helper.width()-f,height:k.helper.height()-e},h=parseInt(k.element.css("left"),10)+(k.position.left-k.originalPosition.left)||null,i=parseInt(k.element.css("top"),10)+(k.position.top-k.originalPosition.top)||null,j.animate||this.element.css(a.extend(g,{top:i,left:h})),k.helper.height(k.size.height),k.helper.width(k.size.width),this._helper&&!j.animate&&this._proportionallyResize()),a("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",b),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var a={};return this.position.top!==this.prevPosition.top&&(a.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(a.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(a.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(a.height=this.size.height+"px"),this.helper.css(a),a},_updateVirtualBoundaries:function(a){var b,c,d,e,f,g=this.options;f={minWidth:this._isNumber(g.minWidth)?g.minWidth:0,maxWidth:this._isNumber(g.maxWidth)?g.maxWidth:1/0,minHeight:this._isNumber(g.minHeight)?g.minHeight:0,maxHeight:this._isNumber(g.maxHeight)?g.maxHeight:1/0},(this._aspectRatio||a)&&(b=f.minHeight*this.aspectRatio,d=f.minWidth/this.aspectRatio,c=f.maxHeight*this.aspectRatio,e=f.maxWidth/this.aspectRatio,b>f.minWidth&&(f.minWidth=b),d>f.minHeight&&(f.minHeight=d),c<f.maxWidth&&(f.maxWidth=c),e<f.maxHeight&&(f.maxHeight=e)),this._vBoundaries=f},_updateCache:function(a){this.offset=this.helper.offset(),this._isNumber(a.left)&&(this.position.left=a.left),this._isNumber(a.top)&&(this.position.top=a.top),this._isNumber(a.height)&&(this.size.height=a.height),this._isNumber(a.width)&&(this.size.width=a.width)},_updateRatio:function(a){var b=this.position,c=this.size,d=this.axis;return this._isNumber(a.height)?a.width=a.height*this.aspectRatio:this._isNumber(a.width)&&(a.height=a.width/this.aspectRatio),"sw"===d&&(a.left=b.left+(c.width-a.width),a.top=null),"nw"===d&&(a.top=b.top+(c.height-a.height),a.left=b.left+(c.width-a.width)),a},_respectSize:function(a){var b=this._vBoundaries,c=this.axis,d=this._isNumber(a.width)&&b.maxWidth&&b.maxWidth<a.width,e=this._isNumber(a.height)&&b.maxHeight&&b.maxHeight<a.height,f=this._isNumber(a.width)&&b.minWidth&&b.minWidth>a.width,g=this._isNumber(a.height)&&b.minHeight&&b.minHeight>a.height,h=this.originalPosition.left+this.originalSize.width,i=this.position.top+this.size.height,j=/sw|nw|w/.test(c),k=/nw|ne|n/.test(c);return f&&(a.width=b.minWidth),g&&(a.height=b.minHeight),d&&(a.width=b.maxWidth),e&&(a.height=b.maxHeight),f&&j&&(a.left=h-b.minWidth),d&&j&&(a.left=h-b.maxWidth),g&&k&&(a.top=i-b.minHeight),e&&k&&(a.top=i-b.maxHeight),a.width||a.height||a.left||!a.top?a.width||a.height||a.top||!a.left||(a.left=null):a.top=null,a},_getPaddingPlusBorderDimensions:function(a){for(var b=0,c=[],d=[a.css("borderTopWidth"),a.css("borderRightWidth"),a.css("borderBottomWidth"),a.css("borderLeftWidth")],e=[a.css("paddingTop"),a.css("paddingRight"),a.css("paddingBottom"),a.css("paddingLeft")];4>b;b++)c[b]=parseInt(d[b],10)||0,c[b]+=parseInt(e[b],10)||0;return{height:c[0]+c[2],width:c[1]+c[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var a,b=0,c=this.helper||this.element;b<this._proportionallyResizeElements.length;b++)a=this._proportionallyResizeElements[b],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(a)),a.css({height:c.height()-this.outerDimensions.height||0,width:c.width()-this.outerDimensions.width||0})},_renderProxy:function(){var b=this.element,c=this.options;this.elementOffset=b.offset(),this._helper?(this.helper=this.helper||a("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++c.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(a,b){return{width:this.originalSize.width+b}},w:function(a,b){var c=this.originalSize,d=this.originalPosition;return{left:d.left+b,width:c.width-b}},n:function(a,b,c){var d=this.originalSize,e=this.originalPosition;return{top:e.top+c,height:d.height-c}},s:function(a,b,c){return{height:this.originalSize.height+c}},se:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},sw:function(b,c,d){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,c,d]))},ne:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,c,d]))},nw:function(b,c,d){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,c,d]))}},_propagate:function(b,c){a.ui.plugin.call(this,b,[c,this.ui()]),"resize"!==b&&this._trigger(b,c,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),a.ui.plugin.add("resizable","animate",{stop:function(b){var c=a(this).resizable("instance"),d=c.options,e=c._proportionallyResizeElements,f=e.length&&/textarea/i.test(e[0].nodeName),g=f&&c._hasScroll(e[0],"left")?0:c.sizeDiff.height,h=f?0:c.sizeDiff.width,i={width:c.size.width-h,height:c.size.height-g},j=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null,k=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;c.element.animate(a.extend(i,k&&j?{top:k,left:j}:{}),{duration:d.animateDuration,easing:d.animateEasing,step:function(){var d={width:parseInt(c.element.css("width"),10),height:parseInt(c.element.css("height"),10),top:parseInt(c.element.css("top"),10),left:parseInt(c.element.css("left"),10)};e&&e.length&&a(e[0]).css({width:d.width,height:d.height}),c._updateCache(d),c._propagate("resize",b)}})}}),a.ui.plugin.add("resizable","containment",{start:function(){var b,c,d,e,f,g,h,i=a(this).resizable("instance"),j=i.options,k=i.element,l=j.containment,m=l instanceof a?l.get(0):/parent/.test(l)?k.parent().get(0):l;m&&(i.containerElement=a(m),/document/.test(l)||l===document?(i.containerOffset={left:0,top:0},i.containerPosition={left:0,top:0},i.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight}):(b=a(m),c=[],a(["Top","Right","Left","Bottom"]).each(function(a,d){c[a]=i._num(b.css("padding"+d))}),i.containerOffset=b.offset(),i.containerPosition=b.position(),i.containerSize={height:b.innerHeight()-c[3],width:b.innerWidth()-c[1]},d=i.containerOffset,e=i.containerSize.height,f=i.containerSize.width,g=i._hasScroll(m,"left")?m.scrollWidth:f,h=i._hasScroll(m)?m.scrollHeight:e,i.parentData={element:m,left:d.left,top:d.top,width:g,height:h}))},resize:function(b){var c,d,e,f,g=a(this).resizable("instance"),h=g.options,i=g.containerOffset,j=g.position,k=g._aspectRatio||b.shiftKey,l={top:0,left:0},m=g.containerElement,n=!0;m[0]!==document&&/static/.test(m.css("position"))&&(l=i),j.left<(g._helper?i.left:0)&&(g.size.width=g.size.width+(g._helper?g.position.left-i.left:g.position.left-l.left),k&&(g.size.height=g.size.width/g.aspectRatio,n=!1),g.position.left=h.helper?i.left:0),j.top<(g._helper?i.top:0)&&(g.size.height=g.size.height+(g._helper?g.position.top-i.top:g.position.top),k&&(g.size.width=g.size.height*g.aspectRatio,n=!1),g.position.top=g._helper?i.top:0),e=g.containerElement.get(0)===g.element.parent().get(0),f=/relative|absolute/.test(g.containerElement.css("position")),e&&f?(g.offset.left=g.parentData.left+g.position.left,g.offset.top=g.parentData.top+g.position.top):(g.offset.left=g.element.offset().left,g.offset.top=g.element.offset().top),c=Math.abs(g.sizeDiff.width+(g._helper?g.offset.left-l.left:g.offset.left-i.left)),d=Math.abs(g.sizeDiff.height+(g._helper?g.offset.top-l.top:g.offset.top-i.top)),c+g.size.width>=g.parentData.width&&(g.size.width=g.parentData.width-c,k&&(g.size.height=g.size.width/g.aspectRatio,n=!1)),d+g.size.height>=g.parentData.height&&(g.size.height=g.parentData.height-d,k&&(g.size.width=g.size.height*g.aspectRatio,n=!1)),n||(g.position.left=g.prevPosition.left,g.position.top=g.prevPosition.top,g.size.width=g.prevSize.width,g.size.height=g.prevSize.height)},stop:function(){var b=a(this).resizable("instance"),c=b.options,d=b.containerOffset,e=b.containerPosition,f=b.containerElement,g=a(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width,j=g.outerHeight()-b.sizeDiff.height;b._helper&&!c.animate&&/relative/.test(f.css("position"))&&a(this).css({left:h.left-e.left-d.left,width:i,height:j}),b._helper&&!c.animate&&/static/.test(f.css("position"))&&a(this).css({left:h.left-e.left-d.left,width:i,height:j})}}),a.ui.plugin.add("resizable","alsoResize",{start:function(){var b=a(this).resizable("instance"),c=b.options;a(c.alsoResize).each(function(){var b=a(this);b.data("ui-resizable-alsoresize",{width:parseInt(b.width(),10),height:parseInt(b.height(),10),left:parseInt(b.css("left"),10),top:parseInt(b.css("top"),10)})})},resize:function(b,c){var d=a(this).resizable("instance"),e=d.options,f=d.originalSize,g=d.originalPosition,h={height:d.size.height-f.height||0,width:d.size.width-f.width||0,top:d.position.top-g.top||0,left:d.position.left-g.left||0};a(e.alsoResize).each(function(){var b=a(this),d=a(this).data("ui-resizable-alsoresize"),e={},f=b.parents(c.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(f,function(a,b){var c=(d[b]||0)+(h[b]||0);c&&c>=0&&(e[b]=c||null)}),b.css(e)})},stop:function(){a(this).removeData("resizable-alsoresize")}}),a.ui.plugin.add("resizable","ghost",{start:function(){var b=a(this).resizable("instance"),c=b.options,d=b.size;b.ghost=b.originalElement.clone(),b.ghost.css({opacity:.25,display:"block",position:"relative",height:d.height,width:d.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof c.ghost?c.ghost:""),b.ghost.appendTo(b.helper)},resize:function(){var b=a(this).resizable("instance");b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=a(this).resizable("instance");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}}),a.ui.plugin.add("resizable","grid",{resize:function(){var b,c=a(this).resizable("instance"),d=c.options,e=c.size,f=c.originalSize,g=c.originalPosition,h=c.axis,i="number"==typeof d.grid?[d.grid,d.grid]:d.grid,j=i[0]||1,k=i[1]||1,l=Math.round((e.width-f.width)/j)*j,m=Math.round((e.height-f.height)/k)*k,n=f.width+l,o=f.height+m,p=d.maxWidth&&d.maxWidth<n,q=d.maxHeight&&d.maxHeight<o,r=d.minWidth&&d.minWidth>n,s=d.minHeight&&d.minHeight>o;d.grid=i,r&&(n+=j),s&&(o+=k),p&&(n-=j),q&&(o-=k),/^(se|s|e)$/.test(h)?(c.size.width=n,c.size.height=o):/^(ne)$/.test(h)?(c.size.width=n,c.size.height=o,c.position.top=g.top-m):/^(sw)$/.test(h)?(c.size.width=n,c.size.height=o,c.position.left=g.left-l):((0>=o-k||0>=n-j)&&(b=c._getPaddingPlusBorderDimensions(this)),o-k>0?(c.size.height=o,c.position.top=g.top-m):(o=k-b.height,c.size.height=o,c.position.top=g.top+f.height-o),n-j>0?(c.size.width=n,c.position.left=g.left-l):(n=j-b.width,c.size.width=n,c.position.left=g.left+f.width-n))}});a.ui.resizable,a.widget("ui.dialog",{version:"1.11.4",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"Close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(b){var c=a(this).css(b).offset().top;0>c&&a(this).css("top",b.top-c)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&a.fn.draggable&&this._makeDraggable(),this.options.resizable&&a.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var b=this.options.appendTo;return b&&(b.jquery||b.nodeType)?a(b):this.document.find(b||"body").eq(0)},_destroy:function(){var a,b=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),a=b.parent.children().eq(b.index),a.length&&a[0]!==this.element[0]?a.before(this.element):b.parent.append(this.element)},widget:function(){return this.uiDialog},disable:a.noop,enable:a.noop,close:function(b){var c,d=this;if(this._isOpen&&this._trigger("beforeClose",b)!==!1){if(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),!this.opener.filter(":focusable").focus().length)try{c=this.document[0].activeElement,c&&"body"!==c.nodeName.toLowerCase()&&a(c).blur()}catch(e){}this._hide(this.uiDialog,this.options.hide,function(){d._trigger("close",b)})}},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(b,c){var d=!1,e=this.uiDialog.siblings(".ui-front:visible").map(function(){return+a(this).css("z-index")}).get(),f=Math.max.apply(null,e);return f>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",f+1),d=!0),d&&!c&&this._trigger("focus",b),d},open:function(){var b=this;return this._isOpen?void(this._moveToTop()&&this._focusTabbable()):(this._isOpen=!0,this.opener=a(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){b._focusTabbable(),b._trigger("focus")}),this._makeFocusTarget(),void this._trigger("open"))},_focusTabbable:function(){var a=this._focusedElement;a||(a=this.element.find("[autofocus]")),a.length||(a=this.element.find(":tabbable")),a.length||(a=this.uiDialogButtonPane.find(":tabbable")),a.length||(a=this.uiDialogTitlebarClose.filter(":tabbable")),a.length||(a=this.uiDialog),a.eq(0).focus()},_keepFocus:function(b){function c(){var b=this.document[0].activeElement,c=this.uiDialog[0]===b||a.contains(this.uiDialog[0],b);c||this._focusTabbable()}b.preventDefault(),c.call(this),this._delay(c)},_createWrapper:function(){this.uiDialog=a("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(b){if(this.options.closeOnEscape&&!b.isDefaultPrevented()&&b.keyCode&&b.keyCode===a.ui.keyCode.ESCAPE)return b.preventDefault(),void this.close(b);if(b.keyCode===a.ui.keyCode.TAB&&!b.isDefaultPrevented()){var c=this.uiDialog.find(":tabbable"),d=c.filter(":first"),e=c.filter(":last");b.target!==e[0]&&b.target!==this.uiDialog[0]||b.shiftKey?b.target!==d[0]&&b.target!==this.uiDialog[0]||!b.shiftKey||(this._delay(function(){e.focus()}),b.preventDefault()):(this._delay(function(){d.focus()}),b.preventDefault())}},mousedown:function(a){this._moveToTop(a)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var b;this.uiDialogTitlebar=a("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(b){a(b.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=a("<button type='button'></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(a){a.preventDefault(),this.close(a)}}),b=a("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(b),this.uiDialog.attr({"aria-labelledby":b.attr("id")})},_title:function(a){this.options.title||a.html("&#160;"),a.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=a("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=a("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var b=this,c=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),a.isEmptyObject(c)||a.isArray(c)&&!c.length?void this.uiDialog.removeClass("ui-dialog-buttons"):(a.each(c,function(c,d){var e,f;d=a.isFunction(d)?{click:d,text:c}:d,d=a.extend({type:"button"},d),e=d.click,d.click=function(){e.apply(b.element[0],arguments)},f={icons:d.icons,text:d.showText},delete d.icons,delete d.showText,a("<button></button>",d).button(f).appendTo(b.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),void this.uiDialogButtonPane.appendTo(this.uiDialog))},_makeDraggable:function(){function b(a){return{position:a.position,offset:a.offset}}var c=this,d=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(d,e){a(this).addClass("ui-dialog-dragging"),c._blockFrames(),c._trigger("dragStart",d,b(e))},drag:function(a,d){c._trigger("drag",a,b(d))},stop:function(e,f){var g=f.offset.left-c.document.scrollLeft(),h=f.offset.top-c.document.scrollTop();d.position={my:"left top",at:"left"+(g>=0?"+":"")+g+" top"+(h>=0?"+":"")+h,of:c.window},a(this).removeClass("ui-dialog-dragging"),c._unblockFrames(),c._trigger("dragStop",e,b(f))}})},_makeResizable:function(){function b(a){return{originalPosition:a.originalPosition,originalSize:a.originalSize,position:a.position,size:a.size}}var c=this,d=this.options,e=d.resizable,f=this.uiDialog.css("position"),g="string"==typeof e?e:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:d.maxWidth,maxHeight:d.maxHeight,minWidth:d.minWidth,minHeight:this._minHeight(),handles:g,start:function(d,e){a(this).addClass("ui-dialog-resizing"),c._blockFrames(),c._trigger("resizeStart",d,b(e))},resize:function(a,d){c._trigger("resize",a,b(d))},stop:function(e,f){var g=c.uiDialog.offset(),h=g.left-c.document.scrollLeft(),i=g.top-c.document.scrollTop();d.height=c.uiDialog.height(),d.width=c.uiDialog.width(),d.position={my:"left top",at:"left"+(h>=0?"+":"")+h+" top"+(i>=0?"+":"")+i,of:c.window},a(this).removeClass("ui-dialog-resizing"),c._unblockFrames(),c._trigger("resizeStop",e,b(f))}}).css("position",f)},_trackFocus:function(){this._on(this.widget(),{focusin:function(b){this._makeFocusTarget(),this._focusedElement=a(b.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var b=this._trackingInstances(),c=a.inArray(this,b);-1!==c&&b.splice(c,1)},_trackingInstances:function(){var a=this.document.data("ui-dialog-instances");return a||(a=[],this.document.data("ui-dialog-instances",a)),a},_minHeight:function(){var a=this.options;return"auto"===a.height?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(){var a=this.uiDialog.is(":visible");a||this.uiDialog.show(),this.uiDialog.position(this.options.position),a||this.uiDialog.hide()},_setOptions:function(b){var c=this,d=!1,e={};a.each(b,function(a,b){c._setOption(a,b),a in c.sizeRelatedOptions&&(d=!0),a in c.resizableRelatedOptions&&(e[a]=b)}),d&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",e)},_setOption:function(a,b){var c,d,e=this.uiDialog;"dialogClass"===a&&e.removeClass(this.options.dialogClass).addClass(b),"disabled"!==a&&(this._super(a,b),"appendTo"===a&&this.uiDialog.appendTo(this._appendTo()),"buttons"===a&&this._createButtons(),"closeText"===a&&this.uiDialogTitlebarClose.button({label:""+b}),"draggable"===a&&(c=e.is(":data(ui-draggable)"),c&&!b&&e.draggable("destroy"),!c&&b&&this._makeDraggable()),"position"===a&&this._position(),"resizable"===a&&(d=e.is(":data(ui-resizable)"),d&&!b&&e.resizable("destroy"),d&&"string"==typeof b&&e.resizable("option","handles",b),d||b===!1||this._makeResizable()),"title"===a&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var a,b,c,d=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),d.minWidth>d.width&&(d.width=d.minWidth),a=this.uiDialog.css({height:"auto",width:d.width}).outerHeight(),b=Math.max(0,d.minHeight-a),c="number"==typeof d.maxHeight?Math.max(0,d.maxHeight-a):"none","auto"===d.height?this.element.css({minHeight:b,maxHeight:c,height:"auto"}):this.element.height(Math.max(0,d.height-a)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var b=a(this);return a("<div>").css({position:"absolute",width:b.outerWidth(),height:b.outerHeight()}).appendTo(b.parent()).offset(b.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(b){return a(b.target).closest(".ui-dialog").length?!0:!!a(b.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var b=!0;this._delay(function(){b=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(a){b||this._allowInteraction(a)||(a.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=a("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var a=this.document.data("ui-dialog-overlays")-1;a?this.document.data("ui-dialog-overlays",a):this.document.unbind("focusin").removeData("ui-dialog-overlays"),this.overlay.remove(),this.overlay=null}}});a.widget("ui.droppable",{version:"1.11.4",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var b,c=this.options,d=c.accept;this.isover=!1,this.isout=!0,this.accept=a.isFunction(d)?d:function(a){return a.is(d)},this.proportions=function(){return arguments.length?void(b=arguments[0]):b?b:b={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(c.scope),c.addClasses&&this.element.addClass("ui-droppable")},_addToManager:function(b){a.ui.ddmanager.droppables[b]=a.ui.ddmanager.droppables[b]||[],a.ui.ddmanager.droppables[b].push(this)},_splice:function(a){for(var b=0;b<a.length;b++)a[b]===this&&a.splice(b,1)},_destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];this._splice(b),this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(b,c){if("accept"===b)this.accept=a.isFunction(c)?c:function(a){return a.is(c)};else if("scope"===b){var d=a.ui.ddmanager.droppables[this.options.scope];this._splice(d),this._addToManager(c)}this._super(b,c)},_activate:function(b){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),c&&this._trigger("activate",b,this.ui(c))},_deactivate:function(b){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),c&&this._trigger("deactivate",b,this.ui(c))},_over:function(b){var c=a.ui.ddmanager.current;c&&(c.currentItem||c.element)[0]!==this.element[0]&&this.accept.call(this.element[0],c.currentItem||c.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",b,this.ui(c)))},_out:function(b){var c=a.ui.ddmanager.current;c&&(c.currentItem||c.element)[0]!==this.element[0]&&this.accept.call(this.element[0],c.currentItem||c.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",b,this.ui(c)))},_drop:function(b,c){var d=c||a.ui.ddmanager.current,e=!1;return d&&(d.currentItem||d.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var c=a(this).droppable("instance");return c.options.greedy&&!c.options.disabled&&c.options.scope===d.options.scope&&c.accept.call(c.element[0],d.currentItem||d.element)&&a.ui.intersect(d,a.extend(c,{offset:c.element.offset()}),c.options.tolerance,b)?(e=!0,!1):void 0}),e?!1:this.accept.call(this.element[0],d.currentItem||d.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",b,this.ui(d)),this.element):!1):!1},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}}),a.ui.intersect=function(){function a(a,b,c){return a>=b&&b+c>a}return function(b,c,d,e){if(!c.offset)return!1;var f=(b.positionAbs||b.position.absolute).left+b.margins.left,g=(b.positionAbs||b.position.absolute).top+b.margins.top,h=f+b.helperProportions.width,i=g+b.helperProportions.height,j=c.offset.left,k=c.offset.top,l=j+c.proportions().width,m=k+c.proportions().height;
+switch(d){case"fit":return f>=j&&l>=h&&g>=k&&m>=i;case"intersect":return j<f+b.helperProportions.width/2&&h-b.helperProportions.width/2<l&&k<g+b.helperProportions.height/2&&i-b.helperProportions.height/2<m;case"pointer":return a(e.pageY,k,c.proportions().height)&&a(e.pageX,j,c.proportions().width);case"touch":return(g>=k&&m>=g||i>=k&&m>=i||k>g&&i>m)&&(f>=j&&l>=f||h>=j&&l>=h||j>f&&h>l);default:return!1}}}(),a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(b,c){var d,e,f=a.ui.ddmanager.droppables[b.options.scope]||[],g=c?c.type:null,h=(b.currentItem||b.element).find(":data(ui-droppable)").addBack();a:for(d=0;d<f.length;d++)if(!(f[d].options.disabled||b&&!f[d].accept.call(f[d].element[0],b.currentItem||b.element))){for(e=0;e<h.length;e++)if(h[e]===f[d].element[0]){f[d].proportions().height=0;continue a}f[d].visible="none"!==f[d].element.css("display"),f[d].visible&&("mousedown"===g&&f[d]._activate.call(f[d],c),f[d].offset=f[d].element.offset(),f[d].proportions({width:f[d].element[0].offsetWidth,height:f[d].element[0].offsetHeight}))}},drop:function(b,c){var d=!1;return a.each((a.ui.ddmanager.droppables[b.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance,c)&&(d=this._drop.call(this,c)||d),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],b.currentItem||b.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,c)))}),d},dragStart:function(b,c){b.element.parentsUntil("body").bind("scroll.droppable",function(){b.options.refreshPositions||a.ui.ddmanager.prepareOffsets(b,c)})},drag:function(b,c){b.options.refreshPositions&&a.ui.ddmanager.prepareOffsets(b,c),a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var d,e,f,g=a.ui.intersect(b,this,this.options.tolerance,c),h=!g&&this.isover?"isout":g&&!this.isover?"isover":null;h&&(this.options.greedy&&(e=this.options.scope,f=this.element.parents(":data(ui-droppable)").filter(function(){return a(this).droppable("instance").options.scope===e}),f.length&&(d=a(f[0]).droppable("instance"),d.greedyChild="isover"===h)),d&&"isover"===h&&(d.isover=!1,d.isout=!0,d._out.call(d,c)),this[h]=!0,this["isout"===h?"isover":"isout"]=!1,this["isover"===h?"_over":"_out"].call(this,c),d&&"isout"===h&&(d.isout=!1,d.isover=!0,d._over.call(d,c)))}})},dragStop:function(b,c){b.element.parentsUntil("body").unbind("scroll.droppable"),b.options.refreshPositions||a.ui.ddmanager.prepareOffsets(b,c)}};var s=(a.ui.droppable,"ui-effects-"),t=a;a.effects={effect:{}},function(a,b){function c(a,b,c){var d=l[b.type]||{};return null==a?c||!b.def?null:b.def:(a=d.floor?~~a:parseFloat(a),isNaN(a)?b.def:d.mod?(a+d.mod)%d.mod:0>a?0:d.max<a?d.max:a)}function d(b){var c=j(),d=c._rgba=[];return b=b.toLowerCase(),o(i,function(a,e){var f,g=e.re.exec(b),h=g&&e.parse(g),i=e.space||"rgba";return h?(f=c[i](h),c[k[i].cache]=f[k[i].cache],d=c._rgba=f._rgba,!1):void 0}),d.length?("0,0,0,0"===d.join()&&a.extend(d,f.transparent),c):f[b]}function e(a,b,c){return c=(c+1)%1,1>6*c?a+(b-a)*c*6:1>2*c?b:2>3*c?a+(b-a)*(2/3-c)*6:a}var f,g="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",h=/^([\-+])=\s*(\d+\.?\d*)/,i=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(a){return[a[1],a[2],a[3],a[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(a){return[2.55*a[1],2.55*a[2],2.55*a[3],a[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(a){return[parseInt(a[1],16),parseInt(a[2],16),parseInt(a[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(a){return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(a){return[a[1],a[2]/100,a[3]/100,a[4]]}}],j=a.Color=function(b,c,d,e){return new a.Color.fn.parse(b,c,d,e)},k={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},l={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},m=j.support={},n=a("<p>")[0],o=a.each;n.style.cssText="background-color:rgba(1,1,1,.5)",m.rgba=n.style.backgroundColor.indexOf("rgba")>-1,o(k,function(a,b){b.cache="_"+a,b.props.alpha={idx:3,type:"percent",def:1}}),j.fn=a.extend(j.prototype,{parse:function(e,g,h,i){if(e===b)return this._rgba=[null,null,null,null],this;(e.jquery||e.nodeType)&&(e=a(e).css(g),g=b);var l=this,m=a.type(e),n=this._rgba=[];return g!==b&&(e=[e,g,h,i],m="array"),"string"===m?this.parse(d(e)||f._default):"array"===m?(o(k.rgba.props,function(a,b){n[b.idx]=c(e[b.idx],b)}),this):"object"===m?(e instanceof j?o(k,function(a,b){e[b.cache]&&(l[b.cache]=e[b.cache].slice())}):o(k,function(b,d){var f=d.cache;o(d.props,function(a,b){if(!l[f]&&d.to){if("alpha"===a||null==e[a])return;l[f]=d.to(l._rgba)}l[f][b.idx]=c(e[a],b,!0)}),l[f]&&a.inArray(null,l[f].slice(0,3))<0&&(l[f][3]=1,d.from&&(l._rgba=d.from(l[f])))}),this):void 0},is:function(a){var b=j(a),c=!0,d=this;return o(k,function(a,e){var f,g=b[e.cache];return g&&(f=d[e.cache]||e.to&&e.to(d._rgba)||[],o(e.props,function(a,b){return null!=g[b.idx]?c=g[b.idx]===f[b.idx]:void 0})),c}),c},_space:function(){var a=[],b=this;return o(k,function(c,d){b[d.cache]&&a.push(c)}),a.pop()},transition:function(a,b){var d=j(a),e=d._space(),f=k[e],g=0===this.alpha()?j("transparent"):this,h=g[f.cache]||f.to(g._rgba),i=h.slice();return d=d[f.cache],o(f.props,function(a,e){var f=e.idx,g=h[f],j=d[f],k=l[e.type]||{};null!==j&&(null===g?i[f]=j:(k.mod&&(j-g>k.mod/2?g+=k.mod:g-j>k.mod/2&&(g-=k.mod)),i[f]=c((j-g)*b+g,e)))}),this[e](i)},blend:function(b){if(1===this._rgba[3])return this;var c=this._rgba.slice(),d=c.pop(),e=j(b)._rgba;return j(a.map(c,function(a,b){return(1-d)*e[b]+d*a}))},toRgbaString:function(){var b="rgba(",c=a.map(this._rgba,function(a,b){return null==a?b>2?1:0:a});return 1===c[3]&&(c.pop(),b="rgb("),b+c.join()+")"},toHslaString:function(){var b="hsla(",c=a.map(this.hsla(),function(a,b){return null==a&&(a=b>2?1:0),b&&3>b&&(a=Math.round(100*a)+"%"),a});return 1===c[3]&&(c.pop(),b="hsl("),b+c.join()+")"},toHexString:function(b){var c=this._rgba.slice(),d=c.pop();return b&&c.push(~~(255*d)),"#"+a.map(c,function(a){return a=(a||0).toString(16),1===a.length?"0"+a:a}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),j.fn.parse.prototype=j.fn,k.hsla.to=function(a){if(null==a[0]||null==a[1]||null==a[2])return[null,null,null,a[3]];var b,c,d=a[0]/255,e=a[1]/255,f=a[2]/255,g=a[3],h=Math.max(d,e,f),i=Math.min(d,e,f),j=h-i,k=h+i,l=.5*k;return b=i===h?0:d===h?60*(e-f)/j+360:e===h?60*(f-d)/j+120:60*(d-e)/j+240,c=0===j?0:.5>=l?j/k:j/(2-k),[Math.round(b)%360,c,l,null==g?1:g]},k.hsla.from=function(a){if(null==a[0]||null==a[1]||null==a[2])return[null,null,null,a[3]];var b=a[0]/360,c=a[1],d=a[2],f=a[3],g=.5>=d?d*(1+c):d+c-d*c,h=2*d-g;return[Math.round(255*e(h,g,b+1/3)),Math.round(255*e(h,g,b)),Math.round(255*e(h,g,b-1/3)),f]},o(k,function(d,e){var f=e.props,g=e.cache,i=e.to,k=e.from;j.fn[d]=function(d){if(i&&!this[g]&&(this[g]=i(this._rgba)),d===b)return this[g].slice();var e,h=a.type(d),l="array"===h||"object"===h?d:arguments,m=this[g].slice();return o(f,function(a,b){var d=l["object"===h?a:b.idx];null==d&&(d=m[b.idx]),m[b.idx]=c(d,b)}),k?(e=j(k(m)),e[g]=m,e):j(m)},o(f,function(b,c){j.fn[b]||(j.fn[b]=function(e){var f,g=a.type(e),i="alpha"===b?this._hsla?"hsla":"rgba":d,j=this[i](),k=j[c.idx];return"undefined"===g?k:("function"===g&&(e=e.call(this,k),g=a.type(e)),null==e&&c.empty?this:("string"===g&&(f=h.exec(e),f&&(e=k+parseFloat(f[2])*("+"===f[1]?1:-1))),j[c.idx]=e,this[i](j)))})})}),j.hook=function(b){var c=b.split(" ");o(c,function(b,c){a.cssHooks[c]={set:function(b,e){var f,g,h="";if("transparent"!==e&&("string"!==a.type(e)||(f=d(e)))){if(e=j(f||e),!m.rgba&&1!==e._rgba[3]){for(g="backgroundColor"===c?b.parentNode:b;(""===h||"transparent"===h)&&g&&g.style;)try{h=a.css(g,"backgroundColor"),g=g.parentNode}catch(i){}e=e.blend(h&&"transparent"!==h?h:"_default")}e=e.toRgbaString()}try{b.style[c]=e}catch(i){}}},a.fx.step[c]=function(b){b.colorInit||(b.start=j(b.elem,c),b.end=j(b.end),b.colorInit=!0),a.cssHooks[c].set(b.elem,b.start.transition(b.end,b.pos))}})},j.hook(g),a.cssHooks.borderColor={expand:function(a){var b={};return o(["Top","Right","Bottom","Left"],function(c,d){b["border"+d+"Color"]=a}),b}},f=a.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(t),function(){function b(b){var c,d,e=b.ownerDocument.defaultView?b.ownerDocument.defaultView.getComputedStyle(b,null):b.currentStyle,f={};if(e&&e.length&&e[0]&&e[e[0]])for(d=e.length;d--;)c=e[d],"string"==typeof e[c]&&(f[a.camelCase(c)]=e[c]);else for(c in e)"string"==typeof e[c]&&(f[c]=e[c]);return f}function c(b,c){var d,f,g={};for(d in c)f=c[d],b[d]!==f&&(e[d]||(a.fx.step[d]||!isNaN(parseFloat(f)))&&(g[d]=f));return g}var d=["add","remove","toggle"],e={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(b,c){a.fx.step[c]=function(a){("none"!==a.end&&!a.setAttr||1===a.pos&&!a.setAttr)&&(t.style(a.elem,c,a.end),a.setAttr=!0)}}),a.fn.addBack||(a.fn.addBack=function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}),a.effects.animateClass=function(e,f,g,h){var i=a.speed(f,g,h);return this.queue(function(){var f,g=a(this),h=g.attr("class")||"",j=i.children?g.find("*").addBack():g;j=j.map(function(){var c=a(this);return{el:c,start:b(this)}}),f=function(){a.each(d,function(a,b){e[b]&&g[b+"Class"](e[b])})},f(),j=j.map(function(){return this.end=b(this.el[0]),this.diff=c(this.start,this.end),this}),g.attr("class",h),j=j.map(function(){var b=this,c=a.Deferred(),d=a.extend({},i,{queue:!1,complete:function(){c.resolve(b)}});return this.el.animate(this.diff,d),c.promise()}),a.when.apply(a,j.get()).done(function(){f(),a.each(arguments,function(){var b=this.el;a.each(this.diff,function(a){b.css(a,"")})}),i.complete.call(g[0])})})},a.fn.extend({addClass:function(b){return function(c,d,e,f){return d?a.effects.animateClass.call(this,{add:c},d,e,f):b.apply(this,arguments)}}(a.fn.addClass),removeClass:function(b){return function(c,d,e,f){return arguments.length>1?a.effects.animateClass.call(this,{remove:c},d,e,f):b.apply(this,arguments)}}(a.fn.removeClass),toggleClass:function(b){return function(c,d,e,f,g){return"boolean"==typeof d||void 0===d?e?a.effects.animateClass.call(this,d?{add:c}:{remove:c},e,f,g):b.apply(this,arguments):a.effects.animateClass.call(this,{toggle:c},d,e,f)}}(a.fn.toggleClass),switchClass:function(b,c,d,e,f){return a.effects.animateClass.call(this,{add:c,remove:b},d,e,f)}})}(),function(){function b(b,c,d,e){return a.isPlainObject(b)&&(c=b,b=b.effect),b={effect:b},null==c&&(c={}),a.isFunction(c)&&(e=c,d=null,c={}),("number"==typeof c||a.fx.speeds[c])&&(e=d,d=c,c={}),a.isFunction(d)&&(e=d,d=null),c&&a.extend(b,c),d=d||c.duration,b.duration=a.fx.off?0:"number"==typeof d?d:d in a.fx.speeds?a.fx.speeds[d]:a.fx.speeds._default,b.complete=e||c.complete,b}function c(b){return!b||"number"==typeof b||a.fx.speeds[b]?!0:"string"!=typeof b||a.effects.effect[b]?a.isFunction(b)?!0:"object"!=typeof b||b.effect?!1:!0:!0}a.extend(a.effects,{version:"1.11.4",save:function(a,b){for(var c=0;c<b.length;c++)null!==b[c]&&a.data(s+b[c],a[0].style[b[c]])},restore:function(a,b){var c,d;for(d=0;d<b.length;d++)null!==b[d]&&(c=a.data(s+b[d]),void 0===c&&(c=""),a.css(b[d],c))},setMode:function(a,b){return"toggle"===b&&(b=a.is(":hidden")?"show":"hide"),b},getBaseline:function(a,b){var c,d;switch(a[0]){case"top":c=0;break;case"middle":c=.5;break;case"bottom":c=1;break;default:c=a[0]/b.height}switch(a[1]){case"left":d=0;break;case"center":d=.5;break;case"right":d=1;break;default:d=a[1]/b.width}return{x:d,y:c}},createWrapper:function(b){if(b.parent().is(".ui-effects-wrapper"))return b.parent();var c={width:b.outerWidth(!0),height:b.outerHeight(!0),"float":b.css("float")},d=a("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e={width:b.width(),height:b.height()},f=document.activeElement;try{f.id}catch(g){f=document.body}return b.wrap(d),(b[0]===f||a.contains(b[0],f))&&a(f).focus(),d=b.parent(),"static"===b.css("position")?(d.css({position:"relative"}),b.css({position:"relative"})):(a.extend(c,{position:b.css("position"),zIndex:b.css("z-index")}),a.each(["top","left","bottom","right"],function(a,d){c[d]=b.css(d),isNaN(parseInt(c[d],10))&&(c[d]="auto")}),b.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),b.css(e),d.css(c).show()},removeWrapper:function(b){var c=document.activeElement;return b.parent().is(".ui-effects-wrapper")&&(b.parent().replaceWith(b),(b[0]===c||a.contains(b[0],c))&&a(c).focus()),b},setTransition:function(b,c,d,e){return e=e||{},a.each(c,function(a,c){var f=b.cssUnit(c);f[0]>0&&(e[c]=f[0]*d+f[1])}),e}}),a.fn.extend({effect:function(){function c(b){function c(){a.isFunction(f)&&f.call(e[0]),a.isFunction(b)&&b()}var e=a(this),f=d.complete,h=d.mode;(e.is(":hidden")?"hide"===h:"show"===h)?(e[h](),c()):g.call(e[0],d,c)}var d=b.apply(this,arguments),e=d.mode,f=d.queue,g=a.effects.effect[d.effect];return a.fx.off||!g?e?this[e](d.duration,d.complete):this.each(function(){d.complete&&d.complete.call(this)}):f===!1?this.each(c):this.queue(f||"fx",c)},show:function(a){return function(d){if(c(d))return a.apply(this,arguments);var e=b.apply(this,arguments);return e.mode="show",this.effect.call(this,e)}}(a.fn.show),hide:function(a){return function(d){if(c(d))return a.apply(this,arguments);var e=b.apply(this,arguments);return e.mode="hide",this.effect.call(this,e)}}(a.fn.hide),toggle:function(a){return function(d){if(c(d)||"boolean"==typeof d)return a.apply(this,arguments);var e=b.apply(this,arguments);return e.mode="toggle",this.effect.call(this,e)}}(a.fn.toggle),cssUnit:function(b){var c=this.css(b),d=[];return a.each(["em","px","%","pt"],function(a,b){c.indexOf(b)>0&&(d=[parseFloat(c),b])}),d}})}(),function(){var b={};a.each(["Quad","Cubic","Quart","Quint","Expo"],function(a,c){b[c]=function(b){return Math.pow(b,a+2)}}),a.extend(b,{Sine:function(a){return 1-Math.cos(a*Math.PI/2)},Circ:function(a){return 1-Math.sqrt(1-a*a)},Elastic:function(a){return 0===a||1===a?a:-Math.pow(2,8*(a-1))*Math.sin((80*(a-1)-7.5)*Math.PI/15)},Back:function(a){return a*a*(3*a-2)},Bounce:function(a){for(var b,c=4;a<((b=Math.pow(2,--c))-1)/11;);return 1/Math.pow(4,3-c)-7.5625*Math.pow((3*b-2)/22-a,2)}}),a.each(b,function(b,c){a.easing["easeIn"+b]=c,a.easing["easeOut"+b]=function(a){return 1-c(1-a)},a.easing["easeInOut"+b]=function(a){return.5>a?c(2*a)/2:1-c(-2*a+2)/2}})}();a.effects,a.effects.effect.blind=function(b,c){var d,e,f,g=a(this),h=/up|down|vertical/,i=/up|left|vertical|horizontal/,j=["position","top","bottom","left","right","height","width"],k=a.effects.setMode(g,b.mode||"hide"),l=b.direction||"up",m=h.test(l),n=m?"height":"width",o=m?"top":"left",p=i.test(l),q={},r="show"===k;g.parent().is(".ui-effects-wrapper")?a.effects.save(g.parent(),j):a.effects.save(g,j),g.show(),d=a.effects.createWrapper(g).css({overflow:"hidden"}),e=d[n](),f=parseFloat(d.css(o))||0,q[n]=r?e:0,p||(g.css(m?"bottom":"right",0).css(m?"top":"left","auto").css({position:"absolute"}),q[o]=r?f:e+f),r&&(d.css(n,0),p||d.css(o,f+e)),d.animate(q,{duration:b.duration,easing:b.easing,queue:!1,complete:function(){"hide"===k&&g.hide(),a.effects.restore(g,j),a.effects.removeWrapper(g),c()}})},a.effects.effect.bounce=function(b,c){var d,e,f,g=a(this),h=["position","top","bottom","left","right","height","width"],i=a.effects.setMode(g,b.mode||"effect"),j="hide"===i,k="show"===i,l=b.direction||"up",m=b.distance,n=b.times||5,o=2*n+(k||j?1:0),p=b.duration/o,q=b.easing,r="up"===l||"down"===l?"top":"left",s="up"===l||"left"===l,t=g.queue(),u=t.length;for((k||j)&&h.push("opacity"),a.effects.save(g,h),g.show(),a.effects.createWrapper(g),m||(m=g["top"===r?"outerHeight":"outerWidth"]()/3),k&&(f={opacity:1},f[r]=0,g.css("opacity",0).css(r,s?2*-m:2*m).animate(f,p,q)),j&&(m/=Math.pow(2,n-1)),f={},f[r]=0,d=0;n>d;d++)e={},e[r]=(s?"-=":"+=")+m,g.animate(e,p,q).animate(f,p,q),m=j?2*m:m/2;j&&(e={opacity:0},e[r]=(s?"-=":"+=")+m,g.animate(e,p,q)),g.queue(function(){j&&g.hide(),a.effects.restore(g,h),a.effects.removeWrapper(g),c()}),u>1&&t.splice.apply(t,[1,0].concat(t.splice(u,o+1))),g.dequeue()},a.effects.effect.clip=function(b,c){var d,e,f,g=a(this),h=["position","top","bottom","left","right","height","width"],i=a.effects.setMode(g,b.mode||"hide"),j="show"===i,k=b.direction||"vertical",l="vertical"===k,m=l?"height":"width",n=l?"top":"left",o={};a.effects.save(g,h),g.show(),d=a.effects.createWrapper(g).css({overflow:"hidden"}),e="IMG"===g[0].tagName?d:g,f=e[m](),j&&(e.css(m,0),e.css(n,f/2)),o[m]=j?f:0,o[n]=j?0:f/2,e.animate(o,{queue:!1,duration:b.duration,easing:b.easing,complete:function(){j||g.hide(),a.effects.restore(g,h),a.effects.removeWrapper(g),c()}})},a.effects.effect.drop=function(b,c){var d,e=a(this),f=["position","top","bottom","left","right","opacity","height","width"],g=a.effects.setMode(e,b.mode||"hide"),h="show"===g,i=b.direction||"left",j="up"===i||"down"===i?"top":"left",k="up"===i||"left"===i?"pos":"neg",l={opacity:h?1:0};a.effects.save(e,f),e.show(),a.effects.createWrapper(e),d=b.distance||e["top"===j?"outerHeight":"outerWidth"](!0)/2,h&&e.css("opacity",0).css(j,"pos"===k?-d:d),l[j]=(h?"pos"===k?"+=":"-=":"pos"===k?"-=":"+=")+d,e.animate(l,{queue:!1,duration:b.duration,easing:b.easing,complete:function(){"hide"===g&&e.hide(),a.effects.restore(e,f),a.effects.removeWrapper(e),c()}})},a.effects.effect.explode=function(b,c){function d(){t.push(this),t.length===l*m&&e()}function e(){n.css({visibility:"visible"}),a(t).remove(),p||n.hide(),c()}var f,g,h,i,j,k,l=b.pieces?Math.round(Math.sqrt(b.pieces)):3,m=l,n=a(this),o=a.effects.setMode(n,b.mode||"hide"),p="show"===o,q=n.show().css("visibility","hidden").offset(),r=Math.ceil(n.outerWidth()/m),s=Math.ceil(n.outerHeight()/l),t=[];for(f=0;l>f;f++)for(i=q.top+f*s,k=f-(l-1)/2,g=0;m>g;g++)h=q.left+g*r,j=g-(m-1)/2,n.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-g*r,top:-f*s}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:r,height:s,left:h+(p?j*r:0),top:i+(p?k*s:0),opacity:p?0:1}).animate({left:h+(p?0:j*r),top:i+(p?0:k*s),opacity:p?1:0},b.duration||500,b.easing,d)},a.effects.effect.fade=function(b,c){var d=a(this),e=a.effects.setMode(d,b.mode||"toggle");d.animate({opacity:e},{queue:!1,duration:b.duration,easing:b.easing,complete:c})},a.effects.effect.fold=function(b,c){var d,e,f=a(this),g=["position","top","bottom","left","right","height","width"],h=a.effects.setMode(f,b.mode||"hide"),i="show"===h,j="hide"===h,k=b.size||15,l=/([0-9]+)%/.exec(k),m=!!b.horizFirst,n=i!==m,o=n?["width","height"]:["height","width"],p=b.duration/2,q={},r={};a.effects.save(f,g),f.show(),d=a.effects.createWrapper(f).css({overflow:"hidden"}),e=n?[d.width(),d.height()]:[d.height(),d.width()],l&&(k=parseInt(l[1],10)/100*e[j?0:1]),i&&d.css(m?{height:0,width:k}:{height:k,width:0}),q[o[0]]=i?e[0]:k,r[o[1]]=i?e[1]:0,d.animate(q,p,b.easing).animate(r,p,b.easing,function(){j&&f.hide(),a.effects.restore(f,g),a.effects.removeWrapper(f),c()})},a.effects.effect.highlight=function(b,c){var d=a(this),e=["backgroundImage","backgroundColor","opacity"],f=a.effects.setMode(d,b.mode||"show"),g={backgroundColor:d.css("backgroundColor")};"hide"===f&&(g.opacity=0),a.effects.save(d,e),d.show().css({backgroundImage:"none",backgroundColor:b.color||"#ffff99"}).animate(g,{queue:!1,duration:b.duration,easing:b.easing,complete:function(){"hide"===f&&d.hide(),a.effects.restore(d,e),c()}})},a.effects.effect.size=function(b,c){var d,e,f,g=a(this),h=["position","top","bottom","left","right","width","height","overflow","opacity"],i=["position","top","bottom","left","right","overflow","opacity"],j=["width","height","overflow"],k=["fontSize"],l=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],m=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],n=a.effects.setMode(g,b.mode||"effect"),o=b.restore||"effect"!==n,p=b.scale||"both",q=b.origin||["middle","center"],r=g.css("position"),s=o?h:i,t={height:0,width:0,outerHeight:0,outerWidth:0};"show"===n&&g.show(),d={height:g.height(),width:g.width(),outerHeight:g.outerHeight(),outerWidth:g.outerWidth()},"toggle"===b.mode&&"show"===n?(g.from=b.to||t,g.to=b.from||d):(g.from=b.from||("show"===n?t:d),g.to=b.to||("hide"===n?t:d)),f={from:{y:g.from.height/d.height,x:g.from.width/d.width},to:{y:g.to.height/d.height,x:g.to.width/d.width}},("box"===p||"both"===p)&&(f.from.y!==f.to.y&&(s=s.concat(l),g.from=a.effects.setTransition(g,l,f.from.y,g.from),g.to=a.effects.setTransition(g,l,f.to.y,g.to)),f.from.x!==f.to.x&&(s=s.concat(m),g.from=a.effects.setTransition(g,m,f.from.x,g.from),g.to=a.effects.setTransition(g,m,f.to.x,g.to))),("content"===p||"both"===p)&&f.from.y!==f.to.y&&(s=s.concat(k).concat(j),g.from=a.effects.setTransition(g,k,f.from.y,g.from),g.to=a.effects.setTransition(g,k,f.to.y,g.to)),a.effects.save(g,s),g.show(),a.effects.createWrapper(g),g.css("overflow","hidden").css(g.from),q&&(e=a.effects.getBaseline(q,d),g.from.top=(d.outerHeight-g.outerHeight())*e.y,g.from.left=(d.outerWidth-g.outerWidth())*e.x,g.to.top=(d.outerHeight-g.to.outerHeight)*e.y,g.to.left=(d.outerWidth-g.to.outerWidth)*e.x),g.css(g.from),("content"===p||"both"===p)&&(l=l.concat(["marginTop","marginBottom"]).concat(k),m=m.concat(["marginLeft","marginRight"]),j=h.concat(l).concat(m),g.find("*[width]").each(function(){var c=a(this),d={height:c.height(),width:c.width(),outerHeight:c.outerHeight(),outerWidth:c.outerWidth()};o&&a.effects.save(c,j),c.from={height:d.height*f.from.y,width:d.width*f.from.x,outerHeight:d.outerHeight*f.from.y,outerWidth:d.outerWidth*f.from.x},c.to={height:d.height*f.to.y,width:d.width*f.to.x,outerHeight:d.height*f.to.y,outerWidth:d.width*f.to.x},f.from.y!==f.to.y&&(c.from=a.effects.setTransition(c,l,f.from.y,c.from),c.to=a.effects.setTransition(c,l,f.to.y,c.to)),f.from.x!==f.to.x&&(c.from=a.effects.setTransition(c,m,f.from.x,c.from),c.to=a.effects.setTransition(c,m,f.to.x,c.to)),c.css(c.from),c.animate(c.to,b.duration,b.easing,function(){o&&a.effects.restore(c,j)})})),g.animate(g.to,{queue:!1,duration:b.duration,easing:b.easing,complete:function(){0===g.to.opacity&&g.css("opacity",g.from.opacity),"hide"===n&&g.hide(),a.effects.restore(g,s),o||("static"===r?g.css({position:"relative",top:g.to.top,left:g.to.left}):a.each(["top","left"],function(a,b){g.css(b,function(b,c){var d=parseInt(c,10),e=a?g.to.left:g.to.top;return"auto"===c?e+"px":d+e+"px"})})),a.effects.removeWrapper(g),c()}})},a.effects.effect.scale=function(b,c){var d=a(this),e=a.extend(!0,{},b),f=a.effects.setMode(d,b.mode||"effect"),g=parseInt(b.percent,10)||(0===parseInt(b.percent,10)?0:"hide"===f?0:100),h=b.direction||"both",i=b.origin,j={height:d.height(),width:d.width(),outerHeight:d.outerHeight(),outerWidth:d.outerWidth()},k={y:"horizontal"!==h?g/100:1,x:"vertical"!==h?g/100:1};e.effect="size",e.queue=!1,e.complete=c,"effect"!==f&&(e.origin=i||["middle","center"],e.restore=!0),e.from=b.from||("show"===f?{height:0,width:0,outerHeight:0,outerWidth:0}:j),e.to={height:j.height*k.y,width:j.width*k.x,outerHeight:j.outerHeight*k.y,outerWidth:j.outerWidth*k.x},e.fade&&("show"===f&&(e.from.opacity=0,e.to.opacity=1),"hide"===f&&(e.from.opacity=1,e.to.opacity=0)),d.effect(e)},a.effects.effect.puff=function(b,c){var d=a(this),e=a.effects.setMode(d,b.mode||"hide"),f="hide"===e,g=parseInt(b.percent,10)||150,h=g/100,i={height:d.height(),width:d.width(),outerHeight:d.outerHeight(),outerWidth:d.outerWidth()};a.extend(b,{effect:"scale",queue:!1,fade:!0,mode:e,complete:c,percent:f?g:100,from:f?i:{height:i.height*h,width:i.width*h,outerHeight:i.outerHeight*h,outerWidth:i.outerWidth*h}}),d.effect(b)},a.effects.effect.pulsate=function(b,c){var d,e=a(this),f=a.effects.setMode(e,b.mode||"show"),g="show"===f,h="hide"===f,i=g||"hide"===f,j=2*(b.times||5)+(i?1:0),k=b.duration/j,l=0,m=e.queue(),n=m.length;for((g||!e.is(":visible"))&&(e.css("opacity",0).show(),l=1),d=1;j>d;d++)e.animate({opacity:l},k,b.easing),l=1-l;e.animate({opacity:l},k,b.easing),e.queue(function(){h&&e.hide(),c()}),n>1&&m.splice.apply(m,[1,0].concat(m.splice(n,j+1))),e.dequeue()},a.effects.effect.shake=function(b,c){var d,e=a(this),f=["position","top","bottom","left","right","height","width"],g=a.effects.setMode(e,b.mode||"effect"),h=b.direction||"left",i=b.distance||20,j=b.times||3,k=2*j+1,l=Math.round(b.duration/k),m="up"===h||"down"===h?"top":"left",n="up"===h||"left"===h,o={},p={},q={},r=e.queue(),s=r.length;for(a.effects.save(e,f),e.show(),a.effects.createWrapper(e),o[m]=(n?"-=":"+=")+i,p[m]=(n?"+=":"-=")+2*i,q[m]=(n?"-=":"+=")+2*i,e.animate(o,l,b.easing),d=1;j>d;d++)e.animate(p,l,b.easing).animate(q,l,b.easing);e.animate(p,l,b.easing).animate(o,l/2,b.easing).queue(function(){"hide"===g&&e.hide(),a.effects.restore(e,f),a.effects.removeWrapper(e),c()}),s>1&&r.splice.apply(r,[1,0].concat(r.splice(s,k+1))),e.dequeue()},a.effects.effect.slide=function(b,c){var d,e=a(this),f=["position","top","bottom","left","right","width","height"],g=a.effects.setMode(e,b.mode||"show"),h="show"===g,i=b.direction||"left",j="up"===i||"down"===i?"top":"left",k="up"===i||"left"===i,l={};a.effects.save(e,f),e.show(),d=b.distance||e["top"===j?"outerHeight":"outerWidth"](!0),a.effects.createWrapper(e).css({overflow:"hidden"}),h&&e.css(j,k?isNaN(d)?"-"+d:-d:d),l[j]=(h?k?"+=":"-=":k?"-=":"+=")+d,e.animate(l,{queue:!1,duration:b.duration,easing:b.easing,complete:function(){"hide"===g&&e.hide(),a.effects.restore(e,f),a.effects.removeWrapper(e),c()}})},a.effects.effect.transfer=function(b,c){var d=a(this),e=a(b.to),f="fixed"===e.css("position"),g=a("body"),h=f?g.scrollTop():0,i=f?g.scrollLeft():0,j=e.offset(),k={top:j.top-h,left:j.left-i,height:e.innerHeight(),width:e.innerWidth()},l=d.offset(),m=a("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(b.className).css({top:l.top-h,left:l.left-i,height:d.innerHeight(),width:d.innerWidth(),position:f?"fixed":"absolute"}).animate(k,b.duration,b.easing,function(){m.remove(),c()})},a.widget("ui.progressbar",{version:"1.11.4",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(a){return void 0===a?this.options.value:(this.options.value=this._constrainedValue(a),void this._refreshValue())},_constrainedValue:function(a){return void 0===a&&(a=this.options.value),this.indeterminate=a===!1,"number"!=typeof a&&(a=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,a))},_setOptions:function(a){var b=a.value;delete a.value,this._super(a),this.options.value=this._constrainedValue(b),this._refreshValue()},_setOption:function(a,b){"max"===a&&(b=Math.max(this.min,b)),"disabled"===a&&this.element.toggleClass("ui-state-disabled",!!b).attr("aria-disabled",b),this._super(a,b)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var b=this.options.value,c=this._percentage();this.valueDiv.toggle(this.indeterminate||b>this.min).toggleClass("ui-corner-right",b===this.options.max).width(c.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=a("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":b}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==b&&(this.oldValue=b,this._trigger("change")),b===this.options.max&&this._trigger("complete")}}),a.widget("ui.selectable",a.ui.mouse,{version:"1.11.4",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var b,c=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){b=a(c.options.filter,c.element[0]),b.addClass("ui-selectee"),b.each(function(){var b=a(this),c=b.offset();a.data(this,"selectable-item",{element:this,$element:b,left:c.left,top:c.top,right:c.left+b.outerWidth(),bottom:c.top+b.outerHeight(),startselected:!1,selected:b.hasClass("ui-selected"),selecting:b.hasClass("ui-selecting"),unselecting:b.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=b.addClass("ui-selectee"),this._mouseInit(),this.helper=a("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(b){var c=this,d=this.options;this.opos=[b.pageX,b.pageY],this.options.disabled||(this.selectees=a(d.filter,this.element[0]),this._trigger("start",b),a(d.appendTo).append(this.helper),this.helper.css({left:b.pageX,top:b.pageY,width:0,height:0}),d.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var d=a.data(this,"selectable-item");d.startselected=!0,b.metaKey||b.ctrlKey||(d.$element.removeClass("ui-selected"),d.selected=!1,d.$element.addClass("ui-unselecting"),d.unselecting=!0,c._trigger("unselecting",b,{unselecting:d.element}))}),a(b.target).parents().addBack().each(function(){var d,e=a.data(this,"selectable-item");return e?(d=!b.metaKey&&!b.ctrlKey||!e.$element.hasClass("ui-selected"),e.$element.removeClass(d?"ui-unselecting":"ui-selected").addClass(d?"ui-selecting":"ui-unselecting"),e.unselecting=!d,e.selecting=d,e.selected=d,d?c._trigger("selecting",b,{selecting:e.element}):c._trigger("unselecting",b,{unselecting:e.element}),!1):void 0}))},_mouseDrag:function(b){if(this.dragged=!0,!this.options.disabled){var c,d=this,e=this.options,f=this.opos[0],g=this.opos[1],h=b.pageX,i=b.pageY;return f>h&&(c=h,h=f,f=c),g>i&&(c=i,i=g,g=c),this.helper.css({left:f,top:g,width:h-f,height:i-g}),this.selectees.each(function(){var c=a.data(this,"selectable-item"),j=!1;c&&c.element!==d.element[0]&&("touch"===e.tolerance?j=!(c.left>h||c.right<f||c.top>i||c.bottom<g):"fit"===e.tolerance&&(j=c.left>f&&c.right<h&&c.top>g&&c.bottom<i),j?(c.selected&&(c.$element.removeClass("ui-selected"),c.selected=!1),c.unselecting&&(c.$element.removeClass("ui-unselecting"),c.unselecting=!1),c.selecting||(c.$element.addClass("ui-selecting"),c.selecting=!0,d._trigger("selecting",b,{selecting:c.element}))):(c.selecting&&((b.metaKey||b.ctrlKey)&&c.startselected?(c.$element.removeClass("ui-selecting"),c.selecting=!1,c.$element.addClass("ui-selected"),
+c.selected=!0):(c.$element.removeClass("ui-selecting"),c.selecting=!1,c.startselected&&(c.$element.addClass("ui-unselecting"),c.unselecting=!0),d._trigger("unselecting",b,{unselecting:c.element}))),c.selected&&(b.metaKey||b.ctrlKey||c.startselected||(c.$element.removeClass("ui-selected"),c.selected=!1,c.$element.addClass("ui-unselecting"),c.unselecting=!0,d._trigger("unselecting",b,{unselecting:c.element})))))}),!1}},_mouseStop:function(b){var c=this;return this.dragged=!1,a(".ui-unselecting",this.element[0]).each(function(){var d=a.data(this,"selectable-item");d.$element.removeClass("ui-unselecting"),d.unselecting=!1,d.startselected=!1,c._trigger("unselected",b,{unselected:d.element})}),a(".ui-selecting",this.element[0]).each(function(){var d=a.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected"),d.selecting=!1,d.selected=!0,d.startselected=!0,c._trigger("selected",b,{selected:d.element})}),this._trigger("stop",b),this.helper.remove(),!1}}),a.widget("ui.selectmenu",{version:"1.11.4",defaultElement:"<select>",options:{appendTo:null,disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:null,change:null,close:null,focus:null,open:null,select:null},_create:function(){var a=this.element.uniqueId().attr("id");this.ids={element:a,button:a+"-button",menu:a+"-menu"},this._drawButton(),this._drawMenu(),this.options.disabled&&this.disable()},_drawButton:function(){var b=this;this.label=a("label[for='"+this.ids.element+"']").attr("for",this.ids.button),this._on(this.label,{click:function(a){this.button.focus(),a.preventDefault()}}),this.element.hide(),this.button=a("<span>",{"class":"ui-selectmenu-button ui-widget ui-state-default ui-corner-all",tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true"}).insertAfter(this.element),a("<span>",{"class":"ui-icon "+this.options.icons.button}).prependTo(this.button),this.buttonText=a("<span>",{"class":"ui-selectmenu-text"}).appendTo(this.button),this._setText(this.buttonText,this.element.find("option:selected").text()),this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){b.menuItems||b._refreshMenu()}),this._hoverable(this.button),this._focusable(this.button)},_drawMenu:function(){var b=this;this.menu=a("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=a("<div>",{"class":"ui-selectmenu-menu ui-front"}).append(this.menu).appendTo(this._appendTo()),this.menuInstance=this.menu.menu({role:"listbox",select:function(a,c){a.preventDefault(),b._setSelection(),b._select(c.item.data("ui-selectmenu-item"),a)},focus:function(a,c){var d=c.item.data("ui-selectmenu-item");null!=b.focusIndex&&d.index!==b.focusIndex&&(b._trigger("focus",a,{item:d}),b.isOpen||b._select(d,a)),b.focusIndex=d.index,b.button.attr("aria-activedescendant",b.menuItems.eq(d.index).attr("id"))}}).menu("instance"),this.menu.addClass("ui-corner-bottom").removeClass("ui-corner-all"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this._setText(this.buttonText,this._getSelectedItem().text()),this.options.width||this._resizeButton()},_refreshMenu:function(){this.menu.empty();var a,b=this.element.find("option");b.length&&(this._parseOptions(b),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup"),a=this._getSelectedItem(),this.menuInstance.focus(null,a),this._setAria(a.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(a){this.options.disabled||(this.menuItems?(this.menu.find(".ui-state-focus").removeClass("ui-state-focus"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",a))},_position:function(){this.menuWrap.position(a.extend({of:this.button},this.options.position))},close:function(a){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",a))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderMenu:function(b,c){var d=this,e="";a.each(c,function(c,f){f.optgroup!==e&&(a("<li>",{"class":"ui-selectmenu-optgroup ui-menu-divider"+(f.element.parent("optgroup").prop("disabled")?" ui-state-disabled":""),text:f.optgroup}).appendTo(b),e=f.optgroup),d._renderItemData(b,f)})},_renderItemData:function(a,b){return this._renderItem(a,b).data("ui-selectmenu-item",b)},_renderItem:function(b,c){var d=a("<li>");return c.disabled&&d.addClass("ui-state-disabled"),this._setText(d,c.label),d.appendTo(b)},_setText:function(a,b){b?a.text(b):a.html("&#160;")},_move:function(a,b){var c,d,e=".ui-menu-item";this.isOpen?c=this.menuItems.eq(this.focusIndex):(c=this.menuItems.eq(this.element[0].selectedIndex),e+=":not(.ui-state-disabled)"),d="first"===a||"last"===a?c["first"===a?"prevAll":"nextAll"](e).eq(-1):c[a+"All"](e).eq(0),d.length&&this.menuInstance.focus(b,d)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex)},_toggle:function(a){this[this.isOpen?"close":"open"](a)},_setSelection:function(){var a;this.range&&(window.getSelection?(a=window.getSelection(),a.removeAllRanges(),a.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(b){this.isOpen&&(a(b.target).closest(".ui-selectmenu-menu, #"+this.ids.button).length||this.close(b))}},_buttonEvents:{mousedown:function(){var a;window.getSelection?(a=window.getSelection(),a.rangeCount&&(this.range=a.getRangeAt(0))):this.range=document.selection.createRange()},click:function(a){this._setSelection(),this._toggle(a)},keydown:function(b){var c=!0;switch(b.keyCode){case a.ui.keyCode.TAB:case a.ui.keyCode.ESCAPE:this.close(b),c=!1;break;case a.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(b);break;case a.ui.keyCode.UP:b.altKey?this._toggle(b):this._move("prev",b);break;case a.ui.keyCode.DOWN:b.altKey?this._toggle(b):this._move("next",b);break;case a.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(b):this._toggle(b);break;case a.ui.keyCode.LEFT:this._move("prev",b);break;case a.ui.keyCode.RIGHT:this._move("next",b);break;case a.ui.keyCode.HOME:case a.ui.keyCode.PAGE_UP:this._move("first",b);break;case a.ui.keyCode.END:case a.ui.keyCode.PAGE_DOWN:this._move("last",b);break;default:this.menu.trigger(b),c=!1}c&&b.preventDefault()}},_selectFocusedItem:function(a){var b=this.menuItems.eq(this.focusIndex);b.hasClass("ui-state-disabled")||this._select(b.data("ui-selectmenu-item"),a)},_select:function(a,b){var c=this.element[0].selectedIndex;this.element[0].selectedIndex=a.index,this._setText(this.buttonText,a.label),this._setAria(a),this._trigger("select",b,{item:a}),a.index!==c&&this._trigger("change",b,{item:a}),this.close(b)},_setAria:function(a){var b=this.menuItems.eq(a.index).attr("id");this.button.attr({"aria-labelledby":b,"aria-activedescendant":b}),this.menu.attr("aria-activedescendant",b)},_setOption:function(a,b){"icons"===a&&this.button.find("span.ui-icon").removeClass(this.options.icons.button).addClass(b.button),this._super(a,b),"appendTo"===a&&this.menuWrap.appendTo(this._appendTo()),"disabled"===a&&(this.menuInstance.option("disabled",b),this.button.toggleClass("ui-state-disabled",b).attr("aria-disabled",b),this.element.prop("disabled",b),b?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)),"width"===a&&this._resizeButton()},_appendTo:function(){var b=this.options.appendTo;return b&&(b=b.jquery||b.nodeType?a(b):this.document.find(b).eq(0)),b&&b[0]||(b=this.element.closest(".ui-front")),b.length||(b=this.document[0].body),b},_toggleAttr:function(){this.button.toggleClass("ui-corner-top",this.isOpen).toggleClass("ui-corner-all",!this.isOpen).attr("aria-expanded",this.isOpen),this.menuWrap.toggleClass("ui-selectmenu-open",this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var a=this.options.width;a||(a=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(a)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){return{disabled:this.element.prop("disabled")}},_parseOptions:function(b){var c=[];b.each(function(b,d){var e=a(d),f=e.parent("optgroup");c.push({element:e,index:b,value:e.val(),label:e.text(),optgroup:f.attr("label")||"",disabled:f.prop("disabled")||e.prop("disabled")})}),this.items=c},_destroy:function(){this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.label.attr("for",this.ids.element)}}),a.widget("ui.slider",a.ui.mouse,{version:"1.11.4",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var b,c,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",g=[];for(c=d.values&&d.values.length||1,e.length>c&&(e.slice(c).remove(),e=e.slice(0,c)),b=e.length;c>b;b++)g.push(f);this.handles=e.add(a(g.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(b){a(this).data("ui-slider-handle-index",b)})},_createRange:function(){var b=this.options,c="";b.range?(b.range===!0&&(b.values?b.values.length&&2!==b.values.length?b.values=[b.values[0],b.values[0]]:a.isArray(b.values)&&(b.values=b.values.slice(0)):b.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=a("<div></div>").appendTo(this.element),c="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(c+("min"===b.range||"max"===b.range?" ui-slider-range-"+b.range:""))):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(b){var c,d,e,f,g,h,i,j,k=this,l=this.options;return l.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),c={x:b.pageX,y:b.pageY},d=this._normValueFromMouse(c),e=this._valueMax()-this._valueMin()+1,this.handles.each(function(b){var c=Math.abs(d-k.values(b));(e>c||e===c&&(b===k._lastChangedValue||k.values(b)===l.min))&&(e=c,f=a(this),g=b)}),h=this._start(b,g),h===!1?!1:(this._mouseSliding=!0,this._handleIndex=g,f.addClass("ui-state-active").focus(),i=f.offset(),j=!a(b.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=j?{left:0,top:0}:{left:b.pageX-i.left-f.width()/2,top:b.pageY-i.top-f.height()/2-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,g,d),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);return this._slide(a,this._handleIndex,c),!1},_mouseStop:function(a){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;return"horizontal"===this.orientation?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),0>d&&(d=0),"vertical"===this.orientation&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e,this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};return this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),2===this.options.values.length&&this.options.range===!0&&(0===b&&c>d||1===b&&d>c)&&(c=d),c!==this.values(b)&&(e=this.values(),e[b]=c,f=this._trigger("slide",a,{handle:this.handles[b],value:c,values:e}),d=this.values(b?0:1),f!==!1&&this.values(b,c))):c!==this.value()&&(f=this._trigger("slide",a,{handle:this.handles[b],value:c}),f!==!1&&this.value(c))},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._lastChangedValue=b,this._trigger("change",a,c)}},value:function(a){return arguments.length?(this.options.value=this._trimAlignValue(a),this._refreshValue(),void this._change(null,0)):this._value()},values:function(b,c){var d,e,f;if(arguments.length>1)return this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),void this._change(null,b);if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();for(d=this.options.values,e=arguments[0],f=0;f<d.length;f+=1)d[f]=this._trimAlignValue(e[f]),this._change(null,f);this._refreshValue()},_setOption:function(b,c){var d,e=0;switch("range"===b&&this.options.range===!0&&("min"===c?(this.options.value=this._values(0),this.options.values=null):"max"===c&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),a.isArray(this.options.values)&&(e=this.options.values.length),"disabled"===b&&this.element.toggleClass("ui-state-disabled",!!c),this._super(b,c),b){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue(),this.handles.css("horizontal"===c?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),d=0;e>d;d+=1)this._change(null,d);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a)},_values:function(a){var b,c,d;if(arguments.length)return b=this.options.values[a],b=this._trimAlignValue(b);if(this.options.values&&this.options.values.length){for(c=this.options.values.slice(),d=0;d<c.length;d+=1)c[d]=this._trimAlignValue(c[d]);return c}return[]},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;return 2*Math.abs(c)>=b&&(d+=c>0?b:-b),parseFloat(d.toFixed(5))},_calculateNewMax:function(){var a=this.options.max,b=this._valueMin(),c=this.options.step,d=Math.floor(+(a-b).toFixed(this._precision())/c)*c;a=d+b,this.max=parseFloat(a.toFixed(this._precision()))},_precision:function(){var a=this._precisionOf(this.options.step);return null!==this.options.min&&(a=Math.max(a,this._precisionOf(this.options.min))),a},_precisionOf:function(a){var b=a.toString(),c=b.indexOf(".");return-1===c?0:b.length-c-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshValue:function(){var b,c,d,e,f,g=this.options.range,h=this.options,i=this,j=this._animateOff?!1:h.animate,k={};this.options.values&&this.options.values.length?this.handles.each(function(d){c=(i.values(d)-i._valueMin())/(i._valueMax()-i._valueMin())*100,k["horizontal"===i.orientation?"left":"bottom"]=c+"%",a(this).stop(1,1)[j?"animate":"css"](k,h.animate),i.options.range===!0&&("horizontal"===i.orientation?(0===d&&i.range.stop(1,1)[j?"animate":"css"]({left:c+"%"},h.animate),1===d&&i.range[j?"animate":"css"]({width:c-b+"%"},{queue:!1,duration:h.animate})):(0===d&&i.range.stop(1,1)[j?"animate":"css"]({bottom:c+"%"},h.animate),1===d&&i.range[j?"animate":"css"]({height:c-b+"%"},{queue:!1,duration:h.animate}))),b=c}):(d=this.value(),e=this._valueMin(),f=this._valueMax(),c=f!==e?(d-e)/(f-e)*100:0,k["horizontal"===this.orientation?"left":"bottom"]=c+"%",this.handle.stop(1,1)[j?"animate":"css"](k,h.animate),"min"===g&&"horizontal"===this.orientation&&this.range.stop(1,1)[j?"animate":"css"]({width:c+"%"},h.animate),"max"===g&&"horizontal"===this.orientation&&this.range[j?"animate":"css"]({width:100-c+"%"},{queue:!1,duration:h.animate}),"min"===g&&"vertical"===this.orientation&&this.range.stop(1,1)[j?"animate":"css"]({height:c+"%"},h.animate),"max"===g&&"vertical"===this.orientation&&this.range[j?"animate":"css"]({height:100-c+"%"},{queue:!1,duration:h.animate}))},_handleEvents:{keydown:function(b){var c,d,e,f,g=a(b.target).data("ui-slider-handle-index");switch(b.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(b.preventDefault(),!this._keySliding&&(this._keySliding=!0,a(b.target).addClass("ui-state-active"),c=this._start(b,g),c===!1))return}switch(f=this.options.step,d=e=this.options.values&&this.options.values.length?this.values(g):this.value(),b.keyCode){case a.ui.keyCode.HOME:e=this._valueMin();break;case a.ui.keyCode.END:e=this._valueMax();break;case a.ui.keyCode.PAGE_UP:e=this._trimAlignValue(d+(this._valueMax()-this._valueMin())/this.numPages);break;case a.ui.keyCode.PAGE_DOWN:e=this._trimAlignValue(d-(this._valueMax()-this._valueMin())/this.numPages);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(d===this._valueMax())return;e=this._trimAlignValue(d+f);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(d===this._valueMin())return;e=this._trimAlignValue(d-f)}this._slide(b,g,e)},keyup:function(b){var c=a(b.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(b,c),this._change(b,c),a(b.target).removeClass("ui-state-active"))}}}),a.widget("ui.sortable",a.ui.mouse,{version:"1.11.4",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(a,b,c){return a>=b&&b+c>a},_isFloating:function(a){return/left|right/.test(a.css("float"))||/inline|table-cell/.test(a.css("display"))},_create:function(){this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(a,b){this._super(a,b),"handle"===a&&this._setHandleClassName()},_setHandleClassName:function(){this.element.find(".ui-sortable-handle").removeClass("ui-sortable-handle"),a.each(this.items,function(){(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item).addClass("ui-sortable-handle")})},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").find(".ui-sortable-handle").removeClass("ui-sortable-handle"),this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(b,c){var d=null,e=!1,f=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(b),a(b.target).parents().each(function(){return a.data(this,f.widgetName+"-item")===f?(d=a(this),!1):void 0}),a.data(b.target,f.widgetName+"-item")===f&&(d=a(b.target)),d&&(!this.options.handle||c||(a(this.options.handle,d).find("*").addBack().each(function(){this===b.target&&(e=!0)}),e))?(this.currentItem=d,this._removeCurrentsFromItems(),!0):!1)},_mouseStart:function(b,c,d){var e,f,g=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(b),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(b),this.originalPageX=b.pageX,this.originalPageY=b.pageY,g.cursorAt&&this._adjustOffsetFromHelper(g.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),g.containment&&this._setContainment(),g.cursor&&"auto"!==g.cursor&&(f=this.document.find("body"),this.storedCursor=f.css("cursor"),f.css("cursor",g.cursor),this.storedStylesheet=a("<style>*{ cursor: "+g.cursor+" !important; }</style>").appendTo(f)),g.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",g.opacity)),g.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",g.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",b,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!d)for(e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("activate",b,this._uiHash(this));return a.ui.ddmanager&&(a.ui.ddmanager.current=this),a.ui.ddmanager&&!g.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(b),!0},_mouseDrag:function(b){var c,d,e,f,g=this.options,h=!1;for(this.position=this._generatePosition(b),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-b.pageY<g.scrollSensitivity?this.scrollParent[0].scrollTop=h=this.scrollParent[0].scrollTop+g.scrollSpeed:b.pageY-this.overflowOffset.top<g.scrollSensitivity&&(this.scrollParent[0].scrollTop=h=this.scrollParent[0].scrollTop-g.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-b.pageX<g.scrollSensitivity?this.scrollParent[0].scrollLeft=h=this.scrollParent[0].scrollLeft+g.scrollSpeed:b.pageX-this.overflowOffset.left<g.scrollSensitivity&&(this.scrollParent[0].scrollLeft=h=this.scrollParent[0].scrollLeft-g.scrollSpeed)):(b.pageY-this.document.scrollTop()<g.scrollSensitivity?h=this.document.scrollTop(this.document.scrollTop()-g.scrollSpeed):this.window.height()-(b.pageY-this.document.scrollTop())<g.scrollSensitivity&&(h=this.document.scrollTop(this.document.scrollTop()+g.scrollSpeed)),b.pageX-this.document.scrollLeft()<g.scrollSensitivity?h=this.document.scrollLeft(this.document.scrollLeft()-g.scrollSpeed):this.window.width()-(b.pageX-this.document.scrollLeft())<g.scrollSensitivity&&(h=this.document.scrollLeft(this.document.scrollLeft()+g.scrollSpeed))),h!==!1&&a.ui.ddmanager&&!g.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,b)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),c=this.items.length-1;c>=0;c--)if(d=this.items[c],e=d.item[0],f=this._intersectsWithPointer(d),f&&d.instance===this.currentContainer&&e!==this.currentItem[0]&&this.placeholder[1===f?"next":"prev"]()[0]!==e&&!a.contains(this.placeholder[0],e)&&("semi-dynamic"===this.options.type?!a.contains(this.element[0],e):!0)){if(this.direction=1===f?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(d))break;this._rearrange(b,d),this._trigger("change",b,this._uiHash());break}return this._contactContainers(b),a.ui.ddmanager&&a.ui.ddmanager.drag(this,b),this._trigger("sort",b,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(b,c){if(b){if(a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,b),this.options.revert){var d=this,e=this.placeholder.offset(),f=this.options.axis,g={};f&&"x"!==f||(g.left=e.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),f&&"y"!==f||(g.top=e.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,a(this.helper).animate(g,parseInt(this.options.revert,10)||500,function(){d._clear(b)})}else this._clear(b,c);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--)this.containers[b]._trigger("deactivate",null,this._uiHash(this)),this.containers[b].containerCache.over&&(this.containers[b]._trigger("out",null,this._uiHash(this)),this.containers[b].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),a.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];return b=b||{},a(c).each(function(){var c=(a(b.item||this).attr(b.attribute||"id")||"").match(b.expression||/(.+)[\-=_](.+)/);c&&d.push((b.key||c[1]+"[]")+"="+(b.key&&b.expression?c[1]:c[2]))}),!d.length&&b.key&&d.push(b.key+"="),d.join("&")},toArray:function(b){var c=this._getItemsAsjQuery(b&&b.connected),d=[];return b=b||{},c.each(function(){d.push(a(b.item||this).attr(b.attribute||"id")||"")}),d},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,d=this.positionAbs.top,e=d+this.helperProportions.height,f=a.left,g=f+a.width,h=a.top,i=h+a.height,j=this.offset.click.top,k=this.offset.click.left,l="x"===this.options.axis||d+j>h&&i>d+j,m="y"===this.options.axis||b+k>f&&g>b+k,n=l&&m;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?n:f<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<g&&h<d+this.helperProportions.height/2&&e-this.helperProportions.height/2<i},_intersectsWithPointer:function(a){var b="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height),c="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width),d=b&&c,e=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();return d?this.floating?f&&"right"===f||"down"===e?2:1:e&&("down"===e?2:1):!1},_intersectsWithSides:function(a){var b=this._isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height),c=this._isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width),d=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?"right"===e&&c||"left"===e&&!c:d&&("down"===d&&b||"up"===d&&!b)},_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return 0!==a&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return 0!==a&&(a>0?"right":"left")},refresh:function(a){return this._refreshItems(a),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var a=this.options;return a.connectWith.constructor===String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(b){function c(){h.push(this)}var d,e,f,g,h=[],i=[],j=this._connectWith();if(j&&b)for(d=j.length-1;d>=0;d--)for(f=a(j[d],this.document[0]),e=f.length-1;e>=0;e--)g=a.data(f[e],this.widgetFullName),g&&g!==this&&!g.options.disabled&&i.push([a.isFunction(g.options.items)?g.options.items.call(g.element):a(g.options.items,g.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),g]);for(i.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),d=i.length-1;d>=0;d--)i[d][0].each(c);return a(h)},_removeCurrentsFromItems:function(){var b=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=a.grep(this.items,function(a){for(var c=0;c<b.length;c++)if(b[c]===a.item[0])return!1;return!0})},_refreshItems:function(b){this.items=[],this.containers=[this];var c,d,e,f,g,h,i,j,k=this.items,l=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]],m=this._connectWith();if(m&&this.ready)for(c=m.length-1;c>=0;c--)for(e=a(m[c],this.document[0]),d=e.length-1;d>=0;d--)f=a.data(e[d],this.widgetFullName),f&&f!==this&&!f.options.disabled&&(l.push([a.isFunction(f.options.items)?f.options.items.call(f.element[0],b,{item:this.currentItem}):a(f.options.items,f.element),f]),this.containers.push(f));for(c=l.length-1;c>=0;c--)for(g=l[c][1],h=l[c][0],d=0,j=h.length;j>d;d++)i=a(h[d]),i.data(this.widgetName+"-item",g),k.push({item:i,instance:g,width:0,height:0,left:0,top:0})},refreshPositions:function(b){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var c,d,e,f;for(c=this.items.length-1;c>=0;c--)d=this.items[c],d.instance!==this.currentContainer&&this.currentContainer&&d.item[0]!==this.currentItem[0]||(e=this.options.toleranceElement?a(this.options.toleranceElement,d.item):d.item,
+b||(d.width=e.outerWidth(),d.height=e.outerHeight()),f=e.offset(),d.left=f.left,d.top=f.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(c=this.containers.length-1;c>=0;c--)f=this.containers[c].element.offset(),this.containers[c].containerCache.left=f.left,this.containers[c].containerCache.top=f.top,this.containers[c].containerCache.width=this.containers[c].element.outerWidth(),this.containers[c].containerCache.height=this.containers[c].element.outerHeight();return this},_createPlaceholder:function(b){b=b||this;var c,d=b.options;d.placeholder&&d.placeholder.constructor!==String||(c=d.placeholder,d.placeholder={element:function(){var d=b.currentItem[0].nodeName.toLowerCase(),e=a("<"+d+">",b.document[0]).addClass(c||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tbody"===d?b._createTrPlaceholder(b.currentItem.find("tr").eq(0),a("<tr>",b.document[0]).appendTo(e)):"tr"===d?b._createTrPlaceholder(b.currentItem,e):"img"===d&&e.attr("src",b.currentItem.attr("src")),c||e.css("visibility","hidden"),e},update:function(a,e){(!c||d.forcePlaceholderSize)&&(e.height()||e.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10)),e.width()||e.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10)))}}),b.placeholder=a(d.placeholder.element.call(b.element,b.currentItem)),b.currentItem.after(b.placeholder),d.placeholder.update(b,b.placeholder)},_createTrPlaceholder:function(b,c){var d=this;b.children().each(function(){a("<td>&#160;</td>",d.document[0]).attr("colspan",a(this).attr("colspan")||1).appendTo(c)})},_contactContainers:function(b){var c,d,e,f,g,h,i,j,k,l,m=null,n=null;for(c=this.containers.length-1;c>=0;c--)if(!a.contains(this.currentItem[0],this.containers[c].element[0]))if(this._intersectsWith(this.containers[c].containerCache)){if(m&&a.contains(this.containers[c].element[0],m.element[0]))continue;m=this.containers[c],n=c}else this.containers[c].containerCache.over&&(this.containers[c]._trigger("out",b,this._uiHash(this)),this.containers[c].containerCache.over=0);if(m)if(1===this.containers.length)this.containers[n].containerCache.over||(this.containers[n]._trigger("over",b,this._uiHash(this)),this.containers[n].containerCache.over=1);else{for(e=1e4,f=null,k=m.floating||this._isFloating(this.currentItem),g=k?"left":"top",h=k?"width":"height",l=k?"clientX":"clientY",d=this.items.length-1;d>=0;d--)a.contains(this.containers[n].element[0],this.items[d].item[0])&&this.items[d].item[0]!==this.currentItem[0]&&(i=this.items[d].item.offset()[g],j=!1,b[l]-i>this.items[d][h]/2&&(j=!0),Math.abs(b[l]-i)<e&&(e=Math.abs(b[l]-i),f=this.items[d],this.direction=j?"up":"down"));if(!f&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[n])return void(this.currentContainer.containerCache.over||(this.containers[n]._trigger("over",b,this._uiHash()),this.currentContainer.containerCache.over=1));f?this._rearrange(b,f,null,!0):this._rearrange(b,null,this.containers[n].element,!0),this._trigger("change",b,this._uiHash()),this.containers[n]._trigger("change",b,this._uiHash(this)),this.currentContainer=this.containers[n],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[n]._trigger("over",b,this._uiHash(this)),this.containers[n].containerCache.over=1}},_createHelper:function(b){var c=this.options,d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[b,this.currentItem])):"clone"===c.helper?this.currentItem.clone():this.currentItem;return d.parents("body").length||a("parent"!==c.appendTo?c.appendTo:this.currentItem[0].parentNode)[0].appendChild(d[0]),d[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!d[0].style.width||c.forceHelperSize)&&d.width(this.currentItem.width()),(!d[0].style.height||c.forceHelperSize)&&d.height(this.currentItem.height()),d},_adjustOffsetFromHelper:function(b){"string"==typeof b&&(b=b.split(" ")),a.isArray(b)&&(b={left:+b[0],top:+b[1]||0}),"left"in b&&(this.offset.click.left=b.left+this.margins.left),"right"in b&&(this.offset.click.left=this.helperProportions.width-b.right+this.margins.left),"top"in b&&(this.offset.click.top=b.top+this.margins.top),"bottom"in b&&(this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&a.contains(this.scrollParent[0],this.offsetParent[0])&&(b.left+=this.scrollParent.scrollLeft(),b.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&a.ui.ie)&&(b={top:0,left:0}),{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var b,c,d,e=this.options;"parent"===e.containment&&(e.containment=this.helper[0].parentNode),("document"===e.containment||"window"===e.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===e.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===e.containment?this.document.width():this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(e.containment)||(b=a(e.containment)[0],c=a(e.containment).offset(),d="hidden"!==a(b).css("overflow"),this.containment=[c.left+(parseInt(a(b).css("borderLeftWidth"),10)||0)+(parseInt(a(b).css("paddingLeft"),10)||0)-this.margins.left,c.top+(parseInt(a(b).css("borderTopWidth"),10)||0)+(parseInt(a(b).css("paddingTop"),10)||0)-this.margins.top,c.left+(d?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(a(b).css("borderLeftWidth"),10)||0)-(parseInt(a(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,c.top+(d?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(a(b).css("borderTopWidth"),10)||0)-(parseInt(a(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(b,c){c||(c=this.position);var d="absolute"===b?1:-1,e="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&a.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,f=/(html|body)/i.test(e[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():f?0:e.scrollTop())*d,left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():f?0:e.scrollLeft())*d}},_generatePosition:function(b){var c,d,e=this.options,f=b.pageX,g=b.pageY,h="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&a.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,i=/(html|body)/i.test(h[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(b.pageX-this.offset.click.left<this.containment[0]&&(f=this.containment[0]+this.offset.click.left),b.pageY-this.offset.click.top<this.containment[1]&&(g=this.containment[1]+this.offset.click.top),b.pageX-this.offset.click.left>this.containment[2]&&(f=this.containment[2]+this.offset.click.left),b.pageY-this.offset.click.top>this.containment[3]&&(g=this.containment[3]+this.offset.click.top)),e.grid&&(c=this.originalPageY+Math.round((g-this.originalPageY)/e.grid[1])*e.grid[1],g=this.containment?c-this.offset.click.top>=this.containment[1]&&c-this.offset.click.top<=this.containment[3]?c:c-this.offset.click.top>=this.containment[1]?c-e.grid[1]:c+e.grid[1]:c,d=this.originalPageX+Math.round((f-this.originalPageX)/e.grid[0])*e.grid[0],f=this.containment?d-this.offset.click.left>=this.containment[0]&&d-this.offset.click.left<=this.containment[2]?d:d-this.offset.click.left>=this.containment[0]?d-e.grid[0]:d+e.grid[0]:d)),{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():i?0:h.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():i?0:h.scrollLeft())}},_rearrange:function(a,b,c,d){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?b.item[0]:b.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var e=this.counter;this._delay(function(){e===this.counter&&this.refreshPositions(!d)})},_clear:function(a,b){function c(a,b,c){return function(d){c._trigger(a,d,b._uiHash(b))}}this.reverting=!1;var d,e=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(d in this._storedCSS)("auto"===this._storedCSS[d]||"static"===this._storedCSS[d])&&(this._storedCSS[d]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!b&&e.push(function(a){this._trigger("receive",a,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||b||e.push(function(a){this._trigger("update",a,this._uiHash())}),this!==this.currentContainer&&(b||(e.push(function(a){this._trigger("remove",a,this._uiHash())}),e.push(function(a){return function(b){a._trigger("receive",b,this._uiHash(this))}}.call(this,this.currentContainer)),e.push(function(a){return function(b){a._trigger("update",b,this._uiHash(this))}}.call(this,this.currentContainer)))),d=this.containers.length-1;d>=0;d--)b||e.push(c("deactivate",this,this.containers[d])),this.containers[d].containerCache.over&&(e.push(c("out",this,this.containers[d])),this.containers[d].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,b||this._trigger("beforeStop",a,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!b){for(d=0;d<e.length;d++)e[d].call(this,a);this._trigger("stop",a,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){a.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(b){var c=b||this;return{helper:c.helper,placeholder:c.placeholder||a([]),position:c.position,originalPosition:c.originalPosition,offset:c.positionAbs,item:c.currentItem,sender:b?b.element:null}}}),a.widget("ui.spinner",{version:"1.11.4",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var b={},c=this.element;return a.each(["min","max","step"],function(a,d){var e=c.attr(d);void 0!==e&&e.length&&(b[d]=e)}),b},_events:{keydown:function(a){this._start(a)&&this._keydown(a)&&a.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(a){return this.cancelBlur?void delete this.cancelBlur:(this._stop(),this._refresh(),void(this.previous!==this.element.val()&&this._trigger("change",a)))},mousewheel:function(a,b){if(b){if(!this.spinning&&!this._start(a))return!1;this._spin((b>0?1:-1)*this.options.step,a),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(a)},100),a.preventDefault()}},"mousedown .ui-spinner-button":function(b){function c(){var a=this.element[0]===this.document[0].activeElement;a||(this.element.focus(),this.previous=d,this._delay(function(){this.previous=d}))}var d;d=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),b.preventDefault(),c.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,c.call(this)}),this._start(b)!==!1&&this._repeat(null,a(b.currentTarget).hasClass("ui-spinner-up")?1:-1,b)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(b){return a(b.currentTarget).hasClass("ui-state-active")?this._start(b)===!1?!1:void this._repeat(null,a(b.currentTarget).hasClass("ui-spinner-up")?1:-1,b):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var a=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=a.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*a.height())&&a.height()>0&&a.height(a.height()),this.options.disabled&&this.disable()},_keydown:function(b){var c=this.options,d=a.ui.keyCode;switch(b.keyCode){case d.UP:return this._repeat(null,1,b),!0;case d.DOWN:return this._repeat(null,-1,b),!0;case d.PAGE_UP:return this._repeat(null,c.page,b),!0;case d.PAGE_DOWN:return this._repeat(null,-c.page,b),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>&#9650;</span></a><a class='ui-spinner-button ui-spinner-down ui-corner-br'><span class='ui-icon "+this.options.icons.down+"'>&#9660;</span></a>"},_start:function(a){return this.spinning||this._trigger("start",a)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(a,b,c){a=a||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,b,c)},a),this._spin(b*this.options.step,c)},_spin:function(a,b){var c=this.value()||0;this.counter||(this.counter=1),c=this._adjustValue(c+a*this._increment(this.counter)),this.spinning&&this._trigger("spin",b,{value:c})===!1||(this._value(c),this.counter++)},_increment:function(b){var c=this.options.incremental;return c?a.isFunction(c)?c(b):Math.floor(b*b*b/5e4-b*b/500+17*b/200+1):1},_precision:function(){var a=this._precisionOf(this.options.step);return null!==this.options.min&&(a=Math.max(a,this._precisionOf(this.options.min))),a},_precisionOf:function(a){var b=a.toString(),c=b.indexOf(".");return-1===c?0:b.length-c-1},_adjustValue:function(a){var b,c,d=this.options;return b=null!==d.min?d.min:0,c=a-b,c=Math.round(c/d.step)*d.step,a=b+c,a=parseFloat(a.toFixed(this._precision())),null!==d.max&&a>d.max?d.max:null!==d.min&&a<d.min?d.min:a},_stop:function(a){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",a))},_setOption:function(a,b){if("culture"===a||"numberFormat"===a){var c=this._parse(this.element.val());return this.options[a]=b,void this.element.val(this._format(c))}("max"===a||"min"===a||"step"===a)&&"string"==typeof b&&(b=this._parse(b)),"icons"===a&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(b.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(b.down)),this._super(a,b),"disabled"===a&&(this.widget().toggleClass("ui-state-disabled",!!b),this.element.prop("disabled",!!b),this.buttons.button(b?"disable":"enable"))},_setOptions:i(function(a){this._super(a)}),_parse:function(a){return"string"==typeof a&&""!==a&&(a=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(a,10,this.options.culture):+a),""===a||isNaN(a)?null:a},_format:function(a){return""===a?"":window.Globalize&&this.options.numberFormat?Globalize.format(a,this.options.numberFormat,this.options.culture):a},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var a=this.value();return null===a?!1:a===this._adjustValue(a)},_value:function(a,b){var c;""!==a&&(c=this._parse(a),null!==c&&(b||(c=this._adjustValue(c)),a=this._format(c))),this.element.val(a),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:i(function(a){this._stepUp(a)}),_stepUp:function(a){this._start()&&(this._spin((a||1)*this.options.step),this._stop())},stepDown:i(function(a){this._stepDown(a)}),_stepDown:function(a){this._start()&&(this._spin((a||1)*-this.options.step),this._stop())},pageUp:i(function(a){this._stepUp((a||1)*this.options.page)}),pageDown:i(function(a){this._stepDown((a||1)*this.options.page)}),value:function(a){return arguments.length?void i(this._value).call(this,a):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),a.widget("ui.tabs",{version:"1.11.4",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var a=/#.*$/;return function(b){var c,d;b=b.cloneNode(!1),c=b.href.replace(a,""),d=location.href.replace(a,"");try{c=decodeURIComponent(c)}catch(e){}try{d=decodeURIComponent(d)}catch(e){}return b.hash.length>1&&c===d}}(),_create:function(){var b=this,c=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",c.collapsible),this._processTabs(),c.active=this._initialActive(),a.isArray(c.disabled)&&(c.disabled=a.unique(c.disabled.concat(a.map(this.tabs.filter(".ui-state-disabled"),function(a){return b.tabs.index(a)}))).sort()),this.options.active!==!1&&this.anchors.length?this.active=this._findActive(c.active):this.active=a(),this._refresh(),this.active.length&&this.load(c.active)},_initialActive:function(){var b=this.options.active,c=this.options.collapsible,d=location.hash.substring(1);return null===b&&(d&&this.tabs.each(function(c,e){return a(e).attr("aria-controls")===d?(b=c,!1):void 0}),null===b&&(b=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===b||-1===b)&&(b=this.tabs.length?0:!1)),b!==!1&&(b=this.tabs.index(this.tabs.eq(b)),-1===b&&(b=c?!1:0)),!c&&b===!1&&this.anchors.length&&(b=0),b},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):a()}},_tabKeydown:function(b){var c=a(this.document[0].activeElement).closest("li"),d=this.tabs.index(c),e=!0;if(!this._handlePageNav(b)){switch(b.keyCode){case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:d++;break;case a.ui.keyCode.UP:case a.ui.keyCode.LEFT:e=!1,d--;break;case a.ui.keyCode.END:d=this.anchors.length-1;break;case a.ui.keyCode.HOME:d=0;break;case a.ui.keyCode.SPACE:return b.preventDefault(),clearTimeout(this.activating),void this._activate(d);case a.ui.keyCode.ENTER:return b.preventDefault(),clearTimeout(this.activating),void this._activate(d===this.options.active?!1:d);default:return}b.preventDefault(),clearTimeout(this.activating),d=this._focusNextTab(d,e),b.ctrlKey||b.metaKey||(c.attr("aria-selected","false"),this.tabs.eq(d).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",d)},this.delay))}},_panelKeydown:function(b){this._handlePageNav(b)||b.ctrlKey&&b.keyCode===a.ui.keyCode.UP&&(b.preventDefault(),this.active.focus())},_handlePageNav:function(b){return b.altKey&&b.keyCode===a.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):b.altKey&&b.keyCode===a.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(b,c){function d(){return b>e&&(b=0),0>b&&(b=e),b}for(var e=this.tabs.length-1;-1!==a.inArray(d(),this.options.disabled);)b=c?b+1:b-1;return b},_focusNextTab:function(a,b){return a=this._findNextTab(a,b),this.tabs.eq(a).focus(),a},_setOption:function(a,b){return"active"===a?void this._activate(b):"disabled"===a?void this._setupDisabled(b):(this._super(a,b),"collapsible"===a&&(this.element.toggleClass("ui-tabs-collapsible",b),b||this.options.active!==!1||this._activate(0)),"event"===a&&this._setupEvents(b),void("heightStyle"===a&&this._setupHeightStyle(b)))},_sanitizeSelector:function(a){return a?a.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var b=this.options,c=this.tablist.children(":has(a[href])");b.disabled=a.map(c.filter(".ui-state-disabled"),function(a){return c.index(a)}),this._processTabs(),b.active!==!1&&this.anchors.length?this.active.length&&!a.contains(this.tablist[0],this.active[0])?this.tabs.length===b.disabled.length?(b.active=!1,this.active=a()):this._activate(this._findNextTab(Math.max(0,b.active-1),!1)):b.active=this.tabs.index(this.active):(b.active=!1,this.active=a()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var b=this,c=this.tabs,d=this.anchors,e=this.panels;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist").delegate("> li","mousedown"+this.eventNamespace,function(b){a(this).is(".ui-state-disabled")&&b.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){a(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return a("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=a(),this.anchors.each(function(c,d){var e,f,g,h=a(d).uniqueId().attr("id"),i=a(d).closest("li"),j=i.attr("aria-controls");b._isLocal(d)?(e=d.hash,g=e.substring(1),f=b.element.find(b._sanitizeSelector(e))):(g=i.attr("aria-controls")||a({}).uniqueId()[0].id,e="#"+g,f=b.element.find(e),f.length||(f=b._createPanel(g),f.insertAfter(b.panels[c-1]||b.tablist)),f.attr("aria-live","polite")),f.length&&(b.panels=b.panels.add(f)),j&&i.data("ui-tabs-aria-controls",j),i.attr({"aria-controls":g,"aria-labelledby":h}),f.attr("aria-labelledby",h)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel"),c&&(this._off(c.not(this.tabs)),this._off(d.not(this.anchors)),this._off(e.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol,ul").eq(0)},_createPanel:function(b){return a("<div>").attr("id",b).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(b){a.isArray(b)&&(b.length?b.length===this.anchors.length&&(b=!0):b=!1);for(var c,d=0;c=this.tabs[d];d++)b===!0||-1!==a.inArray(d,b)?a(c).addClass("ui-state-disabled").attr("aria-disabled","true"):a(c).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=b},_setupEvents:function(b){var c={};b&&a.each(b.split(" "),function(a,b){c[b]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(a){a.preventDefault()}}),this._on(this.anchors,c),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(b){var c,d=this.element.parent();"fill"===b?(c=d.height(),c-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var b=a(this),d=b.css("position");"absolute"!==d&&"fixed"!==d&&(c-=b.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){c-=a(this).outerHeight(!0)}),this.panels.each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+a(this).height()))}).css("overflow","auto")):"auto"===b&&(c=0,this.panels.each(function(){c=Math.max(c,a(this).height("").height())}).height(c))},_eventHandler:function(b){var c=this.options,d=this.active,e=a(b.currentTarget),f=e.closest("li"),g=f[0]===d[0],h=g&&c.collapsible,i=h?a():this._getPanelForTab(f),j=d.length?this._getPanelForTab(d):a(),k={oldTab:d,oldPanel:j,newTab:h?a():f,newPanel:i};b.preventDefault(),f.hasClass("ui-state-disabled")||f.hasClass("ui-tabs-loading")||this.running||g&&!c.collapsible||this._trigger("beforeActivate",b,k)===!1||(c.active=h?!1:this.tabs.index(f),this.active=g?a():f,this.xhr&&this.xhr.abort(),j.length||i.length||a.error("jQuery UI Tabs: Mismatching fragment identifier."),i.length&&this.load(this.tabs.index(f),b),this._toggle(b,k))},_toggle:function(b,c){function d(){f.running=!1,f._trigger("activate",b,c)}function e(){c.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),g.length&&f.options.show?f._show(g,f.options.show,d):(g.show(),d())}var f=this,g=c.newPanel,h=c.oldPanel;this.running=!0,h.length&&this.options.hide?this._hide(h,this.options.hide,function(){c.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),e()}):(c.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),h.hide(),e()),h.attr("aria-hidden","true"),c.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),g.length&&h.length?c.oldTab.attr("tabIndex",-1):g.length&&this.tabs.filter(function(){return 0===a(this).attr("tabIndex")}).attr("tabIndex",-1),g.attr("aria-hidden","false"),c.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(b){var c,d=this._findActive(b);d[0]!==this.active[0]&&(d.length||(d=this.active),c=d.find(".ui-tabs-anchor")[0],this._eventHandler({target:c,currentTarget:c,preventDefault:a.noop}))},_findActive:function(b){return b===!1?a():this.tabs.eq(b)},_getIndex:function(a){return"string"==typeof a&&(a=this.anchors.index(this.anchors.filter("[href$='"+a+"']"))),a},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tablist.unbind(this.eventNamespace),this.tabs.add(this.panels).each(function(){a.data(this,"ui-tabs-destroy")?a(this).remove():a(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var b=a(this),c=b.data("ui-tabs-aria-controls");c?b.attr("aria-controls",c).removeData("ui-tabs-aria-controls"):b.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(b){var c=this.options.disabled;c!==!1&&(void 0===b?c=!1:(b=this._getIndex(b),c=a.isArray(c)?a.map(c,function(a){return a!==b?a:null}):a.map(this.tabs,function(a,c){return c!==b?c:null})),this._setupDisabled(c))},disable:function(b){var c=this.options.disabled;if(c!==!0){if(void 0===b)c=!0;else{if(b=this._getIndex(b),-1!==a.inArray(b,c))return;c=a.isArray(c)?a.merge([b],c).sort():[b]}this._setupDisabled(c)}},load:function(b,c){b=this._getIndex(b);var d=this,e=this.tabs.eq(b),f=e.find(".ui-tabs-anchor"),g=this._getPanelForTab(e),h={tab:e,panel:g},i=function(a,b){"abort"===b&&d.panels.stop(!1,!0),e.removeClass("ui-tabs-loading"),g.removeAttr("aria-busy"),a===d.xhr&&delete d.xhr};this._isLocal(f[0])||(this.xhr=a.ajax(this._ajaxSettings(f,c,h)),this.xhr&&"canceled"!==this.xhr.statusText&&(e.addClass("ui-tabs-loading"),g.attr("aria-busy","true"),this.xhr.done(function(a,b,e){setTimeout(function(){g.html(a),d._trigger("load",c,h),i(e,b)},1)}).fail(function(a,b){setTimeout(function(){i(a,b)},1)})))},_ajaxSettings:function(b,c,d){var e=this;return{url:b.attr("href"),beforeSend:function(b,f){return e._trigger("beforeLoad",c,a.extend({jqXHR:b,ajaxSettings:f},d))}}},_getPanelForTab:function(b){var c=a(b).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+c))}}),a.widget("ui.tooltip",{version:"1.11.4",options:{content:function(){var b=a(this).attr("title")||"";return a("<a>").text(b).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_addDescribedBy:function(b,c){var d=(b.attr("aria-describedby")||"").split(/\s+/);d.push(c),b.data("ui-tooltip-id",c).attr("aria-describedby",a.trim(d.join(" ")))},_removeDescribedBy:function(b){var c=b.data("ui-tooltip-id"),d=(b.attr("aria-describedby")||"").split(/\s+/),e=a.inArray(c,d);-1!==e&&d.splice(e,1),b.removeData("ui-tooltip-id"),d=a.trim(d.join(" ")),d?b.attr("aria-describedby",d):b.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable(),this.liveRegion=a("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).addClass("ui-helper-hidden-accessible").appendTo(this.document[0].body)},_setOption:function(b,c){var d=this;return"disabled"===b?(this[c?"_disable":"_enable"](),void(this.options[b]=c)):(this._super(b,c),void("content"===b&&a.each(this.tooltips,function(a,b){d._updateContent(b.element)})))},_disable:function(){var b=this;a.each(this.tooltips,function(c,d){var e=a.Event("blur");e.target=e.currentTarget=d.element[0],b.close(e,!0)}),this.element.find(this.options.items).addBack().each(function(){var b=a(this);b.is("[title]")&&b.data("ui-tooltip-title",b.attr("title")).removeAttr("title");
+})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var b=a(this);b.data("ui-tooltip-title")&&b.attr("title",b.data("ui-tooltip-title"))})},open:function(b){var c=this,d=a(b?b.target:this.element).closest(this.options.items);d.length&&!d.data("ui-tooltip-id")&&(d.attr("title")&&d.data("ui-tooltip-title",d.attr("title")),d.data("ui-tooltip-open",!0),b&&"mouseover"===b.type&&d.parents().each(function(){var b,d=a(this);d.data("ui-tooltip-open")&&(b=a.Event("blur"),b.target=b.currentTarget=this,c.close(b,!0)),d.attr("title")&&(d.uniqueId(),c.parents[this.id]={element:this,title:d.attr("title")},d.attr("title",""))}),this._registerCloseHandlers(b,d),this._updateContent(d,b))},_updateContent:function(a,b){var c,d=this.options.content,e=this,f=b?b.type:null;return"string"==typeof d?this._open(b,a,d):(c=d.call(a[0],function(c){e._delay(function(){a.data("ui-tooltip-open")&&(b&&(b.type=f),this._open(b,a,c))})}),void(c&&this._open(b,a,c)))},_open:function(b,c,d){function e(a){j.of=a,g.is(":hidden")||g.position(j)}var f,g,h,i,j=a.extend({},this.options.position);if(d){if(f=this._find(c))return void f.tooltip.find(".ui-tooltip-content").html(d);c.is("[title]")&&(b&&"mouseover"===b.type?c.attr("title",""):c.removeAttr("title")),f=this._tooltip(c),g=f.tooltip,this._addDescribedBy(c,g.attr("id")),g.find(".ui-tooltip-content").html(d),this.liveRegion.children().hide(),d.clone?(i=d.clone(),i.removeAttr("id").find("[id]").removeAttr("id")):i=d,a("<div>").html(i).appendTo(this.liveRegion),this.options.track&&b&&/^mouse/.test(b.type)?(this._on(this.document,{mousemove:e}),e(b)):g.position(a.extend({of:c},this.options.position)),g.hide(),this._show(g,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){g.is(":visible")&&(e(j.of),clearInterval(h))},a.fx.interval)),this._trigger("open",b,{tooltip:g})}},_registerCloseHandlers:function(b,c){var d={keyup:function(b){if(b.keyCode===a.ui.keyCode.ESCAPE){var d=a.Event(b);d.currentTarget=c[0],this.close(d,!0)}}};c[0]!==this.element[0]&&(d.remove=function(){this._removeTooltip(this._find(c).tooltip)}),b&&"mouseover"!==b.type||(d.mouseleave="close"),b&&"focusin"!==b.type||(d.focusout="close"),this._on(!0,c,d)},close:function(b){var c,d=this,e=a(b?b.currentTarget:this.element),f=this._find(e);return f?(c=f.tooltip,void(f.closing||(clearInterval(this.delayedShow),e.data("ui-tooltip-title")&&!e.attr("title")&&e.attr("title",e.data("ui-tooltip-title")),this._removeDescribedBy(e),f.hiding=!0,c.stop(!0),this._hide(c,this.options.hide,function(){d._removeTooltip(a(this))}),e.removeData("ui-tooltip-open"),this._off(e,"mouseleave focusout keyup"),e[0]!==this.element[0]&&this._off(e,"remove"),this._off(this.document,"mousemove"),b&&"mouseleave"===b.type&&a.each(this.parents,function(b,c){a(c.element).attr("title",c.title),delete d.parents[b]}),f.closing=!0,this._trigger("close",b,{tooltip:c}),f.hiding||(f.closing=!1)))):void e.removeData("ui-tooltip-open")},_tooltip:function(b){var c=a("<div>").attr("role","tooltip").addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||"")),d=c.uniqueId().attr("id");return a("<div>").addClass("ui-tooltip-content").appendTo(c),c.appendTo(this.document[0].body),this.tooltips[d]={element:b,tooltip:c}},_find:function(a){var b=a.data("ui-tooltip-id");return b?this.tooltips[b]:null},_removeTooltip:function(a){a.remove(),delete this.tooltips[a.attr("id")]},_destroy:function(){var b=this;a.each(this.tooltips,function(c,d){var e=a.Event("blur"),f=d.element;e.target=e.currentTarget=f[0],b.close(e,!0),a("#"+c).remove(),f.data("ui-tooltip-title")&&(f.attr("title")||f.attr("title",f.data("ui-tooltip-title")),f.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}})}),function(a,b,c){"use strict";b.module("ui.sortable",[]).value("uiSortableConfig",{}).directive("uiSortable",["uiSortableConfig","$timeout","$log",function(a,d,e){return{require:"?ngModel",scope:{ngModel:"=",uiSortable:"="},link:function(f,g,h,i){function j(a,b){return b&&"function"==typeof b?function(){a.apply(this,arguments),b.apply(this,arguments)}:a}function k(a){var b=a.data("ui-sortable");return b&&"object"==typeof b&&"ui-sortable"===b.widgetFullName?b:null}function l(a,b){var c=a.sortable("option","helper");return"clone"===c||"function"==typeof c&&b.item.sortable.isCustomHelperUsed()}function m(a){return/left|right/.test(a.css("float"))||/inline|table-cell/.test(a.css("display"))}function n(a,b){for(var c=null,d=0;d<a.length;d++){var e=a[d];if(e.element[0]===b[0]){c=e.scope;break}}return c}function o(a,b){b.item.sortable._destroy()}var p,q={},r={"ui-floating":c},s={receive:null,remove:null,start:null,stop:null,update:null},t={helper:null};return b.extend(q,r,a,f.uiSortable),b.element.fn&&b.element.fn.jquery?(i?(f.$watch("ngModel.length",function(){d(function(){k(g)&&g.sortable("refresh")},0,!1)}),s.start=function(a,d){if("auto"===q["ui-floating"]){var e=d.item.siblings(),f=k(b.element(a.target));f.floating=m(e)}d.item.sortable={model:i.$modelValue[d.item.index()],index:d.item.index(),source:d.item.parent(),sourceModel:i.$modelValue,cancel:function(){d.item.sortable._isCanceled=!0},isCanceled:function(){return d.item.sortable._isCanceled},isCustomHelperUsed:function(){return!!d.item.sortable._isCustomHelperUsed},_isCanceled:!1,_isCustomHelperUsed:d.item.sortable._isCustomHelperUsed,_destroy:function(){b.forEach(d.item.sortable,function(a,b){d.item.sortable[b]=c})}}},s.activate=function(a,c){p=g.contents();var d=g.sortable("option","placeholder");if(d&&d.element&&"function"==typeof d.element){var e=d.element();e=b.element(e);var h=g.find('[class="'+e.attr("class")+'"]:not([ng-repeat], [data-ng-repeat])');p=p.not(h)}var i=c.item.sortable._connectedSortables||[];i.push({element:g,scope:f}),c.item.sortable._connectedSortables=i},s.update=function(a,b){if(!b.item.sortable.received){b.item.sortable.dropindex=b.item.index();var c=b.item.parent();b.item.sortable.droptarget=c;var d=n(b.item.sortable._connectedSortables,c);b.item.sortable.droptargetModel=d.ngModel,g.sortable("cancel")}l(g,b)&&!b.item.sortable.received&&"parent"===g.sortable("option","appendTo")&&(p=p.not(p.last())),p.appendTo(g),b.item.sortable.received&&(p=null),b.item.sortable.received&&!b.item.sortable.isCanceled()&&f.$apply(function(){i.$modelValue.splice(b.item.sortable.dropindex,0,b.item.sortable.moved)})},s.stop=function(a,b){!b.item.sortable.received&&"dropindex"in b.item.sortable&&!b.item.sortable.isCanceled()?f.$apply(function(){i.$modelValue.splice(b.item.sortable.dropindex,0,i.$modelValue.splice(b.item.sortable.index,1)[0])}):"dropindex"in b.item.sortable&&!b.item.sortable.isCanceled()||l(g,b)||p.appendTo(g),p=null},s.receive=function(a,b){b.item.sortable.received=!0},s.remove=function(a,b){"dropindex"in b.item.sortable||(g.sortable("cancel"),b.item.sortable.cancel()),b.item.sortable.isCanceled()||f.$apply(function(){b.item.sortable.moved=i.$modelValue.splice(b.item.sortable.index,1)[0]})},t.helper=function(a){return a&&"function"==typeof a?function(b,c){var d=a.apply(this,arguments);return c.sortable._isCustomHelperUsed=c!==d,d}:a},f.$watch("uiSortable",function(a){var c=k(g);c&&b.forEach(a,function(a,b){return b in r?("ui-floating"!==b||a!==!1&&a!==!0||(c.floating=a),void(q[b]=a)):(s[b]?("stop"===b&&(a=j(a,function(){f.$apply()}),a=j(a,o)),a=j(s[b],a)):t[b]&&(a=t[b](a)),q[b]=a,void g.sortable("option",b,a))})},!0),b.forEach(s,function(a,b){q[b]=j(a,q[b]),"stop"===b&&(q[b]=j(q[b],o))})):e.info("ui.sortable: ngModel not provided!",g),void g.sortable(q)):void e.error("ui.sortable: jQuery should be included before AngularJS!")}}}])}(window,window.angular),function(){function a(a,b){if(a!==b){var c=null===a,d=a===w,e=a===a,f=null===b,g=b===w,h=b===b;if(a>b&&!f||!e||c&&!g&&h||d&&h)return 1;if(b>a&&!c||!h||f&&!d&&e||g&&e)return-1}return 0}function b(a,b,c){for(var d=a.length,e=c?d:-1;c?e--:++e<d;)if(b(a[e],e,a))return e;return-1}function c(a,b,c){if(b!==b)return n(a,c);for(var d=c-1,e=a.length;++d<e;)if(a[d]===b)return d;return-1}function d(a){return"function"==typeof a||!1}function e(a){return null==a?"":a+""}function f(a,b){for(var c=-1,d=a.length;++c<d&&b.indexOf(a.charAt(c))>-1;);return c}function g(a,b){for(var c=a.length;c--&&b.indexOf(a.charAt(c))>-1;);return c}function h(b,c){return a(b.criteria,c.criteria)||b.index-c.index}function i(b,c,d){for(var e=-1,f=b.criteria,g=c.criteria,h=f.length,i=d.length;++e<h;){var j=a(f[e],g[e]);if(j){if(e>=i)return j;var k=d[e];return j*("asc"===k||k===!0?1:-1)}}return b.index-c.index}function j(a){return Pa[a]}function k(a){return Qa[a]}function l(a,b,c){return b?a=Ta[a]:c&&(a=Ua[a]),"\\"+a}function m(a){return"\\"+Ua[a]}function n(a,b,c){for(var d=a.length,e=b+(c?0:-1);c?e--:++e<d;){var f=a[e];if(f!==f)return e}return-1}function o(a){return!!a&&"object"==typeof a}function p(a){return 160>=a&&a>=9&&13>=a||32==a||160==a||5760==a||6158==a||a>=8192&&(8202>=a||8232==a||8233==a||8239==a||8287==a||12288==a||65279==a)}function q(a,b){for(var c=-1,d=a.length,e=-1,f=[];++c<d;)a[c]===b&&(a[c]=P,f[++e]=c);return f}function r(a,b){for(var c,d=-1,e=a.length,f=-1,g=[];++d<e;){var h=a[d],i=b?b(h,d,a):h;d&&c===i||(c=i,g[++f]=h)}return g}function s(a){for(var b=-1,c=a.length;++b<c&&p(a.charCodeAt(b)););return b}function t(a){for(var b=a.length;b--&&p(a.charCodeAt(b)););return b}function u(a){return Ra[a]}function v(p){function W(a){if(o(a)&&!Ch(a)&&!(a instanceof Pa)){if(a instanceof aa)return a;if(ag.call(a,"__chain__")&&ag.call(a,"__wrapped__"))return md(a)}return new aa(a)}function $(){}function aa(a,b,c){this.__wrapped__=a,this.__actions__=c||[],this.__chain__=!!b}function Pa(a){this.__wrapped__=a,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Bg,this.__views__=[]}function Qa(){var a=new Pa(this.__wrapped__);return a.__actions__=cb(this.__actions__),a.__dir__=this.__dir__,a.__filtered__=this.__filtered__,a.__iteratees__=cb(this.__iteratees__),a.__takeCount__=this.__takeCount__,a.__views__=cb(this.__views__),a}function Ra(){if(this.__filtered__){var a=new Pa(this);a.__dir__=-1,a.__filtered__=!0}else a=this.clone(),a.__dir__*=-1;return a}function Sa(){var a=this.__wrapped__.value(),b=this.__dir__,c=Ch(a),d=0>b,e=c?a.length:0,f=Tc(0,e,this.__views__),g=f.start,h=f.end,i=h-g,j=d?h:g-1,k=this.__iteratees__,l=k.length,m=0,n=wg(i,this.__takeCount__);if(!c||L>e||e==i&&n==i)return cc(a,this.__actions__);var o=[];a:for(;i--&&n>m;){j+=b;for(var p=-1,q=a[j];++p<l;){var r=k[p],s=r.iteratee,t=r.type,u=s(q);if(t==N)q=u;else if(!u){if(t==M)continue a;break a}}o[m++]=q}return o}function Ta(){this.__data__={}}function Ua(a){return this.has(a)&&delete this.__data__[a]}function Va(a){return"__proto__"==a?w:this.__data__[a]}function Wa(a){return"__proto__"!=a&&ag.call(this.__data__,a)}function Xa(a,b){return"__proto__"!=a&&(this.__data__[a]=b),this}function Ya(a){var b=a?a.length:0;for(this.data={hash:qg(null),set:new kg};b--;)this.push(a[b])}function Za(a,b){var c=a.data,d="string"==typeof b||He(b)?c.set.has(b):c.hash[b];return d?0:-1}function $a(a){var b=this.data;"string"==typeof a||He(a)?b.set.add(a):b.hash[a]=!0}function bb(a,b){for(var c=-1,d=a.length,e=-1,f=b.length,g=Of(d+f);++c<d;)g[c]=a[c];for(;++e<f;)g[c++]=b[e];return g}function cb(a,b){var c=-1,d=a.length;for(b||(b=Of(d));++c<d;)b[c]=a[c];return b}function db(a,b){for(var c=-1,d=a.length;++c<d&&b(a[c],c,a)!==!1;);return a}function eb(a,b){for(var c=a.length;c--&&b(a[c],c,a)!==!1;);return a}function fb(a,b){for(var c=-1,d=a.length;++c<d;)if(!b(a[c],c,a))return!1;return!0}function gb(a,b,c,d){for(var e=-1,f=a.length,g=d,h=g;++e<f;){var i=a[e],j=+b(i);c(j,g)&&(g=j,h=i)}return h}function hb(a,b){for(var c=-1,d=a.length,e=-1,f=[];++c<d;){var g=a[c];b(g,c,a)&&(f[++e]=g)}return f}function ib(a,b){for(var c=-1,d=a.length,e=Of(d);++c<d;)e[c]=b(a[c],c,a);return e}function jb(a,b){for(var c=-1,d=b.length,e=a.length;++c<d;)a[e+c]=b[c];return a}function kb(a,b,c,d){var e=-1,f=a.length;for(d&&f&&(c=a[++e]);++e<f;)c=b(c,a[e],e,a);return c}function lb(a,b,c,d){var e=a.length;for(d&&e&&(c=a[--e]);e--;)c=b(c,a[e],e,a);return c}function mb(a,b){for(var c=-1,d=a.length;++c<d;)if(b(a[c],c,a))return!0;return!1}function nb(a,b){for(var c=a.length,d=0;c--;)d+=+b(a[c])||0;return d}function ob(a,b){return a===w?b:a}function pb(a,b,c,d){return a!==w&&ag.call(d,c)?a:b}function qb(a,b,c){for(var d=-1,e=Nh(b),f=e.length;++d<f;){var g=e[d],h=a[g],i=c(h,b[g],g,a,b);(i===i?i===h:h!==h)&&(h!==w||g in a)||(a[g]=i)}return a}function rb(a,b){return null==b?a:tb(b,Nh(b),a)}function sb(a,b){for(var c=-1,d=null==a,e=!d&&Yc(a),f=e?a.length:0,g=b.length,h=Of(g);++c<g;){var i=b[c];e?h[c]=Zc(i,f)?a[i]:w:h[c]=d?w:a[i]}return h}function tb(a,b,c){c||(c={});for(var d=-1,e=b.length;++d<e;){var f=b[d];c[f]=a[f]}return c}function ub(a,b,c){var d=typeof a;return"function"==d?b===w?a:fc(a,b,c):null==a?Bf:"object"==d?Nb(a):b===w?Hf(a):Ob(a,b)}function vb(a,b,c,d,e,f,g){var h;if(c&&(h=e?c(a,d,e):c(a)),h!==w)return h;if(!He(a))return a;var i=Ch(a);if(i){if(h=Uc(a),!b)return cb(a,h)}else{var j=cg.call(a),k=j==V;if(j!=Y&&j!=Q&&(!k||e))return Oa[j]?Wc(a,j,b):e?a:{};if(h=Vc(k?{}:a),!b)return rb(h,a)}f||(f=[]),g||(g=[]);for(var l=f.length;l--;)if(f[l]==a)return g[l];return f.push(a),g.push(h),(i?db:Fb)(a,function(d,e){h[e]=vb(d,b,c,e,a,f,g)}),h}function wb(a,b,c){if("function"!=typeof a)throw new Xf(O);return lg(function(){a.apply(w,c)},b)}function xb(a,b){var d=a?a.length:0,e=[];if(!d)return e;var f=-1,g=Qc(),h=g===c,i=h&&b.length>=L?oc(b):null,j=b.length;i&&(g=Za,h=!1,b=i);a:for(;++f<d;){var k=a[f];if(h&&k===k){for(var l=j;l--;)if(b[l]===k)continue a;e.push(k)}else g(b,k,0)<0&&e.push(k)}return e}function yb(a,b){var c=!0;return Jg(a,function(a,d,e){return c=!!b(a,d,e)}),c}function zb(a,b,c,d){var e=d,f=e;return Jg(a,function(a,g,h){var i=+b(a,g,h);(c(i,e)||i===d&&i===f)&&(e=i,f=a)}),f}function Ab(a,b,c,d){var e=a.length;for(c=null==c?0:+c||0,0>c&&(c=-c>e?0:e+c),d=d===w||d>e?e:+d||0,0>d&&(d+=e),e=c>d?0:d>>>0,c>>>=0;e>c;)a[c++]=b;return a}function Bb(a,b){var c=[];return Jg(a,function(a,d,e){b(a,d,e)&&c.push(a)}),c}function Cb(a,b,c,d){var e;return c(a,function(a,c,f){return b(a,c,f)?(e=d?c:a,!1):void 0}),e}function Db(a,b,c,d){d||(d=[]);for(var e=-1,f=a.length;++e<f;){var g=a[e];o(g)&&Yc(g)&&(c||Ch(g)||ye(g))?b?Db(g,b,c,d):jb(d,g):c||(d[d.length]=g)}return d}function Eb(a,b){return Lg(a,b,_e)}function Fb(a,b){return Lg(a,b,Nh)}function Gb(a,b){return Mg(a,b,Nh)}function Hb(a,b){for(var c=-1,d=b.length,e=-1,f=[];++c<d;){var g=b[c];Ge(a[g])&&(f[++e]=g)}return f}function Ib(a,b,c){if(null!=a){c!==w&&c in kd(a)&&(b=[c]);for(var d=0,e=b.length;null!=a&&e>d;)a=a[b[d++]];return d&&d==e?a:w}}function Jb(a,b,c,d,e,f){return a===b?!0:null==a||null==b||!He(a)&&!o(b)?a!==a&&b!==b:Kb(a,b,Jb,c,d,e,f)}function Kb(a,b,c,d,e,f,g){var h=Ch(a),i=Ch(b),j=R,k=R;h||(j=cg.call(a),j==Q?j=Y:j!=Y&&(h=Qe(a))),i||(k=cg.call(b),k==Q?k=Y:k!=Y&&(i=Qe(b)));var l=j==Y,m=k==Y,n=j==k;if(n&&!h&&!l)return Mc(a,b,j);if(!e){var o=l&&ag.call(a,"__wrapped__"),p=m&&ag.call(b,"__wrapped__");if(o||p)return c(o?a.value():a,p?b.value():b,d,e,f,g)}if(!n)return!1;f||(f=[]),g||(g=[]);for(var q=f.length;q--;)if(f[q]==a)return g[q]==b;f.push(a),g.push(b);var r=(h?Lc:Nc)(a,b,c,d,e,f,g);return f.pop(),g.pop(),r}function Lb(a,b,c){var d=b.length,e=d,f=!c;if(null==a)return!e;for(a=kd(a);d--;){var g=b[d];if(f&&g[2]?g[1]!==a[g[0]]:!(g[0]in a))return!1}for(;++d<e;){g=b[d];var h=g[0],i=a[h],j=g[1];if(f&&g[2]){if(i===w&&!(h in a))return!1}else{var k=c?c(i,j,h):w;if(!(k===w?Jb(j,i,c,!0):k))return!1}}return!0}function Mb(a,b){var c=-1,d=Yc(a)?Of(a.length):[];return Jg(a,function(a,e,f){d[++c]=b(a,e,f)}),d}function Nb(a){var b=Rc(a);if(1==b.length&&b[0][2]){var c=b[0][0],d=b[0][1];return function(a){return null==a?!1:a[c]===d&&(d!==w||c in kd(a))}}return function(a){return Lb(a,b)}}function Ob(a,b){var c=Ch(a),d=_c(a)&&cd(b),e=a+"";return a=ld(a),function(f){if(null==f)return!1;var g=e;if(f=kd(f),(c||!d)&&!(g in f)){if(f=1==a.length?f:Ib(f,Wb(a,0,-1)),null==f)return!1;g=zd(a),f=kd(f)}return f[g]===b?b!==w||g in f:Jb(b,f[g],w,!0)}}function Pb(a,b,c,d,e){if(!He(a))return a;var f=Yc(b)&&(Ch(b)||Qe(b)),g=f?w:Nh(b);return db(g||b,function(h,i){if(g&&(i=h,h=b[i]),o(h))d||(d=[]),e||(e=[]),Qb(a,b,i,Pb,c,d,e);else{var j=a[i],k=c?c(j,h,i,a,b):w,l=k===w;l&&(k=h),k===w&&(!f||i in a)||!l&&(k===k?k===j:j!==j)||(a[i]=k)}}),a}function Qb(a,b,c,d,e,f,g){for(var h=f.length,i=b[c];h--;)if(f[h]==i)return void(a[c]=g[h]);var j=a[c],k=e?e(j,i,c,a,b):w,l=k===w;l&&(k=i,Yc(i)&&(Ch(i)||Qe(i))?k=Ch(j)?j:Yc(j)?cb(j):[]:Ne(i)||ye(i)?k=ye(j)?Ve(j):Ne(j)?j:{}:l=!1),f.push(i),g.push(k),l?a[c]=d(k,i,e,f,g):(k===k?k!==j:j===j)&&(a[c]=k)}function Rb(a){return function(b){return null==b?w:b[a]}}function Sb(a){var b=a+"";return a=ld(a),function(c){return Ib(c,a,b)}}function Tb(a,b){for(var c=a?b.length:0;c--;){var d=b[c];if(d!=e&&Zc(d)){var e=d;mg.call(a,d,1)}}return a}function Ub(a,b){return a+rg(zg()*(b-a+1))}function Vb(a,b,c,d,e){return e(a,function(a,e,f){c=d?(d=!1,a):b(c,a,e,f)}),c}function Wb(a,b,c){var d=-1,e=a.length;b=null==b?0:+b||0,0>b&&(b=-b>e?0:e+b),c=c===w||c>e?e:+c||0,0>c&&(c+=e),e=b>c?0:c-b>>>0,b>>>=0;for(var f=Of(e);++d<e;)f[d]=a[d+b];return f}function Xb(a,b){var c;return Jg(a,function(a,d,e){return c=b(a,d,e),!c}),!!c}function Yb(a,b){var c=a.length;for(a.sort(b);c--;)a[c]=a[c].value;return a}function Zb(a,b,c){var d=Oc(),e=-1;b=ib(b,function(a){return d(a)});var f=Mb(a,function(a){var c=ib(b,function(b){return b(a)});return{criteria:c,index:++e,value:a}});return Yb(f,function(a,b){return i(a,b,c)})}function $b(a,b){var c=0;return Jg(a,function(a,d,e){c+=+b(a,d,e)||0}),c}function _b(a,b){var d=-1,e=Qc(),f=a.length,g=e===c,h=g&&f>=L,i=h?oc():null,j=[];i?(e=Za,g=!1):(h=!1,i=b?[]:j);a:for(;++d<f;){var k=a[d],l=b?b(k,d,a):k;if(g&&k===k){for(var m=i.length;m--;)if(i[m]===l)continue a;b&&i.push(l),j.push(k)}else e(i,l,0)<0&&((b||h)&&i.push(l),j.push(k))}return j}function ac(a,b){for(var c=-1,d=b.length,e=Of(d);++c<d;)e[c]=a[b[c]];return e}function bc(a,b,c,d){for(var e=a.length,f=d?e:-1;(d?f--:++f<e)&&b(a[f],f,a););return c?Wb(a,d?0:f,d?f+1:e):Wb(a,d?f+1:0,d?e:f)}function cc(a,b){var c=a;c instanceof Pa&&(c=c.value());for(var d=-1,e=b.length;++d<e;){var f=b[d];c=f.func.apply(f.thisArg,jb([c],f.args))}return c}function dc(a,b,c){var d=0,e=a?a.length:d;if("number"==typeof b&&b===b&&Eg>=e){for(;e>d;){var f=d+e>>>1,g=a[f];(c?b>=g:b>g)&&null!==g?d=f+1:e=f}return e}return ec(a,b,Bf,c)}function ec(a,b,c,d){b=c(b);for(var e=0,f=a?a.length:0,g=b!==b,h=null===b,i=b===w;f>e;){var j=rg((e+f)/2),k=c(a[j]),l=k!==w,m=k===k;if(g)var n=m||d;else n=h?m&&l&&(d||null!=k):i?m&&(d||l):null==k?!1:d?b>=k:b>k;n?e=j+1:f=j}return wg(f,Dg)}function fc(a,b,c){if("function"!=typeof a)return Bf;if(b===w)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 3:return function(c,d,e){return a.call(b,c,d,e)};case 4:return function(c,d,e,f){return a.call(b,c,d,e,f)};case 5:return function(c,d,e,f,g){return a.call(b,c,d,e,f,g)}}return function(){return a.apply(b,arguments)}}function gc(a){var b=new fg(a.byteLength),c=new ng(b);return c.set(new ng(a)),b}function hc(a,b,c){for(var d=c.length,e=-1,f=vg(a.length-d,0),g=-1,h=b.length,i=Of(h+f);++g<h;)i[g]=b[g];for(;++e<d;)i[c[e]]=a[e];for(;f--;)i[g++]=a[e++];return i}function ic(a,b,c){for(var d=-1,e=c.length,f=-1,g=vg(a.length-e,0),h=-1,i=b.length,j=Of(g+i);++f<g;)j[f]=a[f];for(var k=f;++h<i;)j[k+h]=b[h];for(;++d<e;)j[k+c[d]]=a[f++];return j}function jc(a,b){return function(c,d,e){var f=b?b():{};if(d=Oc(d,e,3),Ch(c))for(var g=-1,h=c.length;++g<h;){var i=c[g];a(f,i,d(i,g,c),c)}else Jg(c,function(b,c,e){a(f,b,d(b,c,e),e)});return f}}function kc(a){return qe(function(b,c){var d=-1,e=null==b?0:c.length,f=e>2?c[e-2]:w,g=e>2?c[2]:w,h=e>1?c[e-1]:w;for("function"==typeof f?(f=fc(f,h,5),e-=2):(f="function"==typeof h?h:w,e-=f?1:0),g&&$c(c[0],c[1],g)&&(f=3>e?w:f,e=1);++d<e;){var i=c[d];i&&a(b,i,f)}return b})}function lc(a,b){return function(c,d){var e=c?Pg(c):0;if(!bd(e))return a(c,d);for(var f=b?e:-1,g=kd(c);(b?f--:++f<e)&&d(g[f],f,g)!==!1;);return c}}function mc(a){return function(b,c,d){for(var e=kd(b),f=d(b),g=f.length,h=a?g:-1;a?h--:++h<g;){var i=f[h];if(c(e[i],i,e)===!1)break}return b}}function nc(a,b){function c(){var e=this&&this!==_a&&this instanceof c?d:a;return e.apply(b,arguments)}var d=qc(a);return c}function oc(a){return qg&&kg?new Ya(a):null}function pc(a){return function(b){for(var c=-1,d=yf(kf(b)),e=d.length,f="";++c<e;)f=a(f,d[c],c);return f}}function qc(a){return function(){var b=arguments;switch(b.length){case 0:return new a;case 1:return new a(b[0]);case 2:return new a(b[0],b[1]);case 3:return new a(b[0],b[1],b[2]);case 4:return new a(b[0],b[1],b[2],b[3]);case 5:return new a(b[0],b[1],b[2],b[3],b[4]);case 6:return new a(b[0],b[1],b[2],b[3],b[4],b[5]);case 7:return new a(b[0],b[1],b[2],b[3],b[4],b[5],b[6])}var c=Ig(a.prototype),d=a.apply(c,b);return He(d)?d:c}}function rc(a){function b(c,d,e){e&&$c(c,d,e)&&(d=w);var f=Kc(c,a,w,w,w,w,w,d);return f.placeholder=b.placeholder,f}return b}function sc(a,b){return qe(function(c){var d=c[0];return null==d?d:(c.push(b),a.apply(w,c))})}function tc(a,b){return function(c,d,e){if(e&&$c(c,d,e)&&(d=w),d=Oc(d,e,3),1==d.length){c=Ch(c)?c:jd(c);var f=gb(c,d,a,b);if(!c.length||f!==b)return f}return zb(c,d,a,b)}}function uc(a,c){return function(d,e,f){if(e=Oc(e,f,3),Ch(d)){var g=b(d,e,c);return g>-1?d[g]:w}return Cb(d,e,a)}}function vc(a){return function(c,d,e){return c&&c.length?(d=Oc(d,e,3),b(c,d,a)):-1}}function wc(a){return function(b,c,d){return c=Oc(c,d,3),Cb(b,c,a,!0)}}function xc(a){return function(){for(var b,c=arguments.length,d=a?c:-1,e=0,f=Of(c);a?d--:++d<c;){var g=f[e++]=arguments[d];if("function"!=typeof g)throw new Xf(O);!b&&aa.prototype.thru&&"wrapper"==Pc(g)&&(b=new aa([],!0))}for(d=b?-1:c;++d<c;){g=f[d];var h=Pc(g),i="wrapper"==h?Og(g):w;b=i&&ad(i[0])&&i[1]==(F|B|D|G)&&!i[4].length&&1==i[9]?b[Pc(i[0])].apply(b,i[3]):1==g.length&&ad(g)?b[h]():b.thru(g)}return function(){var a=arguments,d=a[0];if(b&&1==a.length&&Ch(d)&&d.length>=L)return b.plant(d).value();for(var e=0,g=c?f[e].apply(this,a):d;++e<c;)g=f[e].call(this,g);return g}}}function yc(a,b){return function(c,d,e){return"function"==typeof d&&e===w&&Ch(c)?a(c,d):b(c,fc(d,e,3))}}function zc(a){return function(b,c,d){return("function"!=typeof c||d!==w)&&(c=fc(c,d,3)),a(b,c,_e)}}function Ac(a){return function(b,c,d){return("function"!=typeof c||d!==w)&&(c=fc(c,d,3)),a(b,c)}}function Bc(a){return function(b,c,d){var e={};return c=Oc(c,d,3),Fb(b,function(b,d,f){var g=c(b,d,f);d=a?g:d,b=a?b:g,e[d]=b}),e}}function Cc(a){return function(b,c,d){return b=e(b),(a?b:"")+Gc(b,c,d)+(a?"":b)}}function Dc(a){var b=qe(function(c,d){var e=q(d,b.placeholder);return Kc(c,a,w,d,e)});return b}function Ec(a,b){return function(c,d,e,f){var g=arguments.length<3;return"function"==typeof d&&f===w&&Ch(c)?a(c,d,e,g):Vb(c,Oc(d,f,4),e,g,b)}}function Fc(a,b,c,d,e,f,g,h,i,j){function k(){for(var t=arguments.length,u=t,v=Of(t);u--;)v[u]=arguments[u];if(d&&(v=hc(v,d,e)),f&&(v=ic(v,f,g)),o||r){var x=k.placeholder,A=q(v,x);if(t-=A.length,j>t){var B=h?cb(h):w,C=vg(j-t,0),F=o?A:w,G=o?w:A,H=o?v:w,I=o?w:v;b|=o?D:E,b&=~(o?E:D),p||(b&=~(y|z));var J=[a,b,c,H,F,I,G,B,i,C],K=Fc.apply(w,J);return ad(a)&&Qg(K,J),K.placeholder=x,K}}var L=m?c:this,M=n?L[a]:a;return h&&(v=hd(v,h)),l&&i<v.length&&(v.length=i),this&&this!==_a&&this instanceof k&&(M=s||qc(a)),M.apply(L,v)}var l=b&F,m=b&y,n=b&z,o=b&B,p=b&A,r=b&C,s=n?w:qc(a);return k}function Gc(a,b,c){var d=a.length;if(b=+b,d>=b||!tg(b))return"";var e=b-d;return c=null==c?" ":c+"",qf(c,pg(e/c.length)).slice(0,e)}function Hc(a,b,c,d){function e(){for(var b=-1,h=arguments.length,i=-1,j=d.length,k=Of(j+h);++i<j;)k[i]=d[i];for(;h--;)k[i++]=arguments[++b];var l=this&&this!==_a&&this instanceof e?g:a;return l.apply(f?c:this,k)}var f=b&y,g=qc(a);return e}function Ic(a){var b=Sf[a];return function(a,c){return c=c===w?0:+c||0,c?(c=ig(10,c),b(a*c)/c):b(a)}}function Jc(a){return function(b,c,d,e){var f=Oc(d);return null==d&&f===ub?dc(b,c,a):ec(b,c,f(d,e,1),a)}}function Kc(a,b,c,d,e,f,g,h){var i=b&z;if(!i&&"function"!=typeof a)throw new Xf(O);var j=d?d.length:0;if(j||(b&=~(D|E),d=e=w),j-=e?e.length:0,b&E){var k=d,l=e;d=e=w}var m=i?w:Og(a),n=[a,b,c,d,e,k,l,f,g,h];if(m&&(dd(n,m),b=n[1],h=n[9]),n[9]=null==h?i?0:a.length:vg(h-j,0)||0,b==y)var o=nc(n[0],n[2]);else o=b!=D&&b!=(y|D)||n[4].length?Fc.apply(w,n):Hc.apply(w,n);var p=m?Ng:Qg;return p(o,n)}function Lc(a,b,c,d,e,f,g){var h=-1,i=a.length,j=b.length;if(i!=j&&!(e&&j>i))return!1;for(;++h<i;){var k=a[h],l=b[h],m=d?d(e?l:k,e?k:l,h):w;if(m!==w){if(m)continue;return!1}if(e){if(!mb(b,function(a){return k===a||c(k,a,d,e,f,g)}))return!1}else if(k!==l&&!c(k,l,d,e,f,g))return!1}return!0}function Mc(a,b,c){switch(c){case S:case T:return+a==+b;case U:return a.name==b.name&&a.message==b.message;case X:return a!=+a?b!=+b:a==+b;case Z:case _:return a==b+""}return!1}function Nc(a,b,c,d,e,f,g){var h=Nh(a),i=h.length,j=Nh(b),k=j.length;if(i!=k&&!e)return!1;for(var l=i;l--;){var m=h[l];if(!(e?m in b:ag.call(b,m)))return!1}for(var n=e;++l<i;){m=h[l];var o=a[m],p=b[m],q=d?d(e?p:o,e?o:p,m):w;if(!(q===w?c(o,p,d,e,f,g):q))return!1;n||(n="constructor"==m)}if(!n){var r=a.constructor,s=b.constructor;if(r!=s&&"constructor"in a&&"constructor"in b&&!("function"==typeof r&&r instanceof r&&"function"==typeof s&&s instanceof s))return!1}return!0}function Oc(a,b,c){var d=W.callback||zf;return d=d===zf?ub:d,c?d(a,b,c):d}function Pc(a){for(var b=a.name+"",c=Hg[b],d=c?c.length:0;d--;){var e=c[d],f=e.func;if(null==f||f==a)return e.name}return b}function Qc(a,b,d){var e=W.indexOf||xd;return e=e===xd?c:e,a?e(a,b,d):e}function Rc(a){for(var b=af(a),c=b.length;c--;)b[c][2]=cd(b[c][1]);return b}function Sc(a,b){var c=null==a?w:a[b];return Ke(c)?c:w}function Tc(a,b,c){for(var d=-1,e=c.length;++d<e;){var f=c[d],g=f.size;switch(f.type){case"drop":a+=g;break;case"dropRight":b-=g;break;case"take":b=wg(b,a+g);break;case"takeRight":a=vg(a,b-g)}}return{start:a,end:b}}function Uc(a){var b=a.length,c=new a.constructor(b);return b&&"string"==typeof a[0]&&ag.call(a,"index")&&(c.index=a.index,c.input=a.input),c}function Vc(a){var b=a.constructor;return"function"==typeof b&&b instanceof b||(b=Uf),new b}function Wc(a,b,c){var d=a.constructor;switch(b){case ba:return gc(a);case S:case T:return new d(+a);case ca:case da:case ea:case fa:case ga:case ha:case ia:case ja:case ka:var e=a.buffer;return new d(c?gc(e):e,a.byteOffset,a.length);case X:case _:return new d(a);case Z:var f=new d(a.source,Da.exec(a));f.lastIndex=a.lastIndex}return f}function Xc(a,b,c){null==a||_c(b,a)||(b=ld(b),a=1==b.length?a:Ib(a,Wb(b,0,-1)),b=zd(b));var d=null==a?a:a[b];return null==d?w:d.apply(a,c)}function Yc(a){return null!=a&&bd(Pg(a))}function Zc(a,b){return a="number"==typeof a||Ga.test(a)?+a:-1,b=null==b?Fg:b,a>-1&&a%1==0&&b>a}function $c(a,b,c){if(!He(c))return!1;var d=typeof b;if("number"==d?Yc(c)&&Zc(b,c.length):"string"==d&&b in c){var e=c[b];return a===a?a===e:e!==e}return!1}function _c(a,b){var c=typeof a;if("string"==c&&wa.test(a)||"number"==c)return!0;if(Ch(a))return!1;var d=!va.test(a);return d||null!=b&&a in kd(b)}function ad(a){var b=Pc(a),c=W[b];if("function"!=typeof c||!(b in Pa.prototype))return!1;if(a===c)return!0;var d=Og(c);return!!d&&a===d[0]}function bd(a){return"number"==typeof a&&a>-1&&a%1==0&&Fg>=a}function cd(a){return a===a&&!He(a)}function dd(a,b){var c=a[1],d=b[1],e=c|d,f=F>e,g=d==F&&c==B||d==F&&c==G&&a[7].length<=b[8]||d==(F|G)&&c==B;if(!f&&!g)return a;d&y&&(a[2]=b[2],e|=c&y?0:A);var h=b[3];if(h){var i=a[3];a[3]=i?hc(i,h,b[4]):cb(h),a[4]=i?q(a[3],P):cb(b[4])}return h=b[5],h&&(i=a[5],a[5]=i?ic(i,h,b[6]):cb(h),a[6]=i?q(a[5],P):cb(b[6])),h=b[7],h&&(a[7]=cb(h)),d&F&&(a[8]=null==a[8]?b[8]:wg(a[8],b[8])),null==a[9]&&(a[9]=b[9]),a[0]=b[0],a[1]=e,a}function ed(a,b){return a===w?b:Dh(a,b,ed)}function fd(a,b){a=kd(a);for(var c=-1,d=b.length,e={};++c<d;){var f=b[c];f in a&&(e[f]=a[f])}return e}function gd(a,b){var c={};return Eb(a,function(a,d,e){b(a,d,e)&&(c[d]=a)}),c}function hd(a,b){for(var c=a.length,d=wg(b.length,c),e=cb(a);d--;){var f=b[d];a[d]=Zc(f,c)?e[f]:w}return a}function id(a){for(var b=_e(a),c=b.length,d=c&&a.length,e=!!d&&bd(d)&&(Ch(a)||ye(a)),f=-1,g=[];++f<c;){var h=b[f];(e&&Zc(h,d)||ag.call(a,h))&&g.push(h)}return g}function jd(a){return null==a?[]:Yc(a)?He(a)?a:Uf(a):ef(a)}function kd(a){return He(a)?a:Uf(a)}function ld(a){if(Ch(a))return a;var b=[];return e(a).replace(xa,function(a,c,d,e){b.push(d?e.replace(Ba,"$1"):c||a)}),b}function md(a){return a instanceof Pa?a.clone():new aa(a.__wrapped__,a.__chain__,cb(a.__actions__))}function nd(a,b,c){b=(c?$c(a,b,c):null==b)?1:vg(rg(b)||1,1);for(var d=0,e=a?a.length:0,f=-1,g=Of(pg(e/b));e>d;)g[++f]=Wb(a,d,d+=b);return g}function od(a){for(var b=-1,c=a?a.length:0,d=-1,e=[];++b<c;){var f=a[b];f&&(e[++d]=f)}return e}function pd(a,b,c){var d=a?a.length:0;return d?((c?$c(a,b,c):null==b)&&(b=1),Wb(a,0>b?0:b)):[]}function qd(a,b,c){var d=a?a.length:0;return d?((c?$c(a,b,c):null==b)&&(b=1),b=d-(+b||0),Wb(a,0,0>b?0:b)):[]}function rd(a,b,c){return a&&a.length?bc(a,Oc(b,c,3),!0,!0):[]}function sd(a,b,c){return a&&a.length?bc(a,Oc(b,c,3),!0):[]}function td(a,b,c,d){var e=a?a.length:0;return e?(c&&"number"!=typeof c&&$c(a,b,c)&&(c=0,d=e),Ab(a,b,c,d)):[]}function ud(a){return a?a[0]:w}function vd(a,b,c){var d=a?a.length:0;return c&&$c(a,b,c)&&(b=!1),d?Db(a,b):[]}function wd(a){var b=a?a.length:0;return b?Db(a,!0):[]}function xd(a,b,d){var e=a?a.length:0;if(!e)return-1;if("number"==typeof d)d=0>d?vg(e+d,0):d;else if(d){var f=dc(a,b);return e>f&&(b===b?b===a[f]:a[f]!==a[f])?f:-1}return c(a,b,d||0)}function yd(a){return qd(a,1)}function zd(a){var b=a?a.length:0;return b?a[b-1]:w}function Ad(a,b,c){var d=a?a.length:0;if(!d)return-1;var e=d;if("number"==typeof c)e=(0>c?vg(d+c,0):wg(c||0,d-1))+1;else if(c){e=dc(a,b,!0)-1;var f=a[e];return(b===b?b===f:f!==f)?e:-1}if(b!==b)return n(a,e,!0);for(;e--;)if(a[e]===b)return e;return-1}function Bd(){var a=arguments,b=a[0];if(!b||!b.length)return b;for(var c=0,d=Qc(),e=a.length;++c<e;)for(var f=0,g=a[c];(f=d(b,g,f))>-1;)mg.call(b,f,1);return b}function Cd(a,b,c){var d=[];if(!a||!a.length)return d;var e=-1,f=[],g=a.length;for(b=Oc(b,c,3);++e<g;){var h=a[e];b(h,e,a)&&(d.push(h),f.push(e))}return Tb(a,f),d}function Dd(a){return pd(a,1)}function Ed(a,b,c){var d=a?a.length:0;return d?(c&&"number"!=typeof c&&$c(a,b,c)&&(b=0,c=d),Wb(a,b,c)):[]}function Fd(a,b,c){var d=a?a.length:0;return d?((c?$c(a,b,c):null==b)&&(b=1),Wb(a,0,0>b?0:b)):[]}function Gd(a,b,c){var d=a?a.length:0;return d?((c?$c(a,b,c):null==b)&&(b=1),b=d-(+b||0),Wb(a,0>b?0:b)):[]}function Hd(a,b,c){return a&&a.length?bc(a,Oc(b,c,3),!1,!0):[]}function Id(a,b,c){return a&&a.length?bc(a,Oc(b,c,3)):[]}function Jd(a,b,d,e){var f=a?a.length:0;if(!f)return[];null!=b&&"boolean"!=typeof b&&(e=d,d=$c(a,b,e)?w:b,b=!1);var g=Oc();return(null!=d||g!==ub)&&(d=g(d,e,3)),b&&Qc()===c?r(a,d):_b(a,d)}function Kd(a){if(!a||!a.length)return[];var b=-1,c=0;a=hb(a,function(a){return Yc(a)?(c=vg(a.length,c),!0):void 0});for(var d=Of(c);++b<c;)d[b]=ib(a,Rb(b));return d}function Ld(a,b,c){var d=a?a.length:0;if(!d)return[];var e=Kd(a);return null==b?e:(b=fc(b,c,4),ib(e,function(a){return kb(a,b,w,!0)}))}function Md(){for(var a=-1,b=arguments.length;++a<b;){var c=arguments[a];if(Yc(c))var d=d?jb(xb(d,c),xb(c,d)):c}return d?_b(d):[]}function Nd(a,b){var c=-1,d=a?a.length:0,e={};for(!d||b||Ch(a[0])||(b=[]);++c<d;){var f=a[c];b?e[f]=b[c]:f&&(e[f[0]]=f[1])}return e}function Od(a){var b=W(a);return b.__chain__=!0,b}function Pd(a,b,c){return b.call(c,a),a}function Qd(a,b,c){return b.call(c,a)}function Rd(){return Od(this)}function Sd(){return new aa(this.value(),this.__chain__)}function Td(a){for(var b,c=this;c instanceof $;){var d=md(c);b?e.__wrapped__=d:b=d;var e=d;c=c.__wrapped__}return e.__wrapped__=a,b}function Ud(){var a=this.__wrapped__,b=function(a){return a.reverse()};if(a instanceof Pa){var c=a;
+return this.__actions__.length&&(c=new Pa(this)),c=c.reverse(),c.__actions__.push({func:Qd,args:[b],thisArg:w}),new aa(c,this.__chain__)}return this.thru(b)}function Vd(){return this.value()+""}function Wd(){return cc(this.__wrapped__,this.__actions__)}function Xd(a,b,c){var d=Ch(a)?fb:yb;return c&&$c(a,b,c)&&(b=w),("function"!=typeof b||c!==w)&&(b=Oc(b,c,3)),d(a,b)}function Yd(a,b,c){var d=Ch(a)?hb:Bb;return b=Oc(b,c,3),d(a,b)}function Zd(a,b){return dh(a,Nb(b))}function $d(a,b,c,d){var e=a?Pg(a):0;return bd(e)||(a=ef(a),e=a.length),c="number"!=typeof c||d&&$c(b,c,d)?0:0>c?vg(e+c,0):c||0,"string"==typeof a||!Ch(a)&&Pe(a)?e>=c&&a.indexOf(b,c)>-1:!!e&&Qc(a,b,c)>-1}function _d(a,b,c){var d=Ch(a)?ib:Mb;return b=Oc(b,c,3),d(a,b)}function ae(a,b){return _d(a,Hf(b))}function be(a,b,c){var d=Ch(a)?hb:Bb;return b=Oc(b,c,3),d(a,function(a,c,d){return!b(a,c,d)})}function ce(a,b,c){if(c?$c(a,b,c):null==b){a=jd(a);var d=a.length;return d>0?a[Ub(0,d-1)]:w}var e=-1,f=Ue(a),d=f.length,g=d-1;for(b=wg(0>b?0:+b||0,d);++e<b;){var h=Ub(e,g),i=f[h];f[h]=f[e],f[e]=i}return f.length=b,f}function de(a){return ce(a,Bg)}function ee(a){var b=a?Pg(a):0;return bd(b)?b:Nh(a).length}function fe(a,b,c){var d=Ch(a)?mb:Xb;return c&&$c(a,b,c)&&(b=w),("function"!=typeof b||c!==w)&&(b=Oc(b,c,3)),d(a,b)}function ge(a,b,c){if(null==a)return[];c&&$c(a,b,c)&&(b=w);var d=-1;b=Oc(b,c,3);var e=Mb(a,function(a,c,e){return{criteria:b(a,c,e),index:++d,value:a}});return Yb(e,h)}function he(a,b,c,d){return null==a?[]:(d&&$c(b,c,d)&&(c=w),Ch(b)||(b=null==b?[]:[b]),Ch(c)||(c=null==c?[]:[c]),Zb(a,b,c))}function ie(a,b){return Yd(a,Nb(b))}function je(a,b){if("function"!=typeof b){if("function"!=typeof a)throw new Xf(O);var c=a;a=b,b=c}return a=tg(a=+a)?a:0,function(){return--a<1?b.apply(this,arguments):void 0}}function ke(a,b,c){return c&&$c(a,b,c)&&(b=w),b=a&&null==b?a.length:vg(+b||0,0),Kc(a,F,w,w,w,w,b)}function le(a,b){var c;if("function"!=typeof b){if("function"!=typeof a)throw new Xf(O);var d=a;a=b,b=d}return function(){return--a>0&&(c=b.apply(this,arguments)),1>=a&&(b=w),c}}function me(a,b,c){function d(){n&&gg(n),j&&gg(j),p=0,j=n=o=w}function e(b,c){c&&gg(c),j=n=o=w,b&&(p=oh(),k=a.apply(m,i),n||j||(i=m=w))}function f(){var a=b-(oh()-l);0>=a||a>b?e(o,j):n=lg(f,a)}function g(){e(r,n)}function h(){if(i=arguments,l=oh(),m=this,o=r&&(n||!s),q===!1)var c=s&&!n;else{j||s||(p=l);var d=q-(l-p),e=0>=d||d>q;e?(j&&(j=gg(j)),p=l,k=a.apply(m,i)):j||(j=lg(g,d))}return e&&n?n=gg(n):n||b===q||(n=lg(f,b)),c&&(e=!0,k=a.apply(m,i)),!e||n||j||(i=m=w),k}var i,j,k,l,m,n,o,p=0,q=!1,r=!0;if("function"!=typeof a)throw new Xf(O);if(b=0>b?0:+b||0,c===!0){var s=!0;r=!1}else He(c)&&(s=!!c.leading,q="maxWait"in c&&vg(+c.maxWait||0,b),r="trailing"in c?!!c.trailing:r);return h.cancel=d,h}function ne(a,b){if("function"!=typeof a||b&&"function"!=typeof b)throw new Xf(O);var c=function(){var d=arguments,e=b?b.apply(this,d):d[0],f=c.cache;if(f.has(e))return f.get(e);var g=a.apply(this,d);return c.cache=f.set(e,g),g};return c.cache=new ne.Cache,c}function oe(a){if("function"!=typeof a)throw new Xf(O);return function(){return!a.apply(this,arguments)}}function pe(a){return le(2,a)}function qe(a,b){if("function"!=typeof a)throw new Xf(O);return b=vg(b===w?a.length-1:+b||0,0),function(){for(var c=arguments,d=-1,e=vg(c.length-b,0),f=Of(e);++d<e;)f[d]=c[b+d];switch(b){case 0:return a.call(this,f);case 1:return a.call(this,c[0],f);case 2:return a.call(this,c[0],c[1],f)}var g=Of(b+1);for(d=-1;++d<b;)g[d]=c[d];return g[b]=f,a.apply(this,g)}}function re(a){if("function"!=typeof a)throw new Xf(O);return function(b){return a.apply(this,b)}}function se(a,b,c){var d=!0,e=!0;if("function"!=typeof a)throw new Xf(O);return c===!1?d=!1:He(c)&&(d="leading"in c?!!c.leading:d,e="trailing"in c?!!c.trailing:e),me(a,b,{leading:d,maxWait:+b,trailing:e})}function te(a,b){return b=null==b?Bf:b,Kc(b,D,w,[a],[])}function ue(a,b,c,d){return b&&"boolean"!=typeof b&&$c(a,b,c)?b=!1:"function"==typeof b&&(d=c,c=b,b=!1),"function"==typeof c?vb(a,b,fc(c,d,3)):vb(a,b)}function ve(a,b,c){return"function"==typeof b?vb(a,!0,fc(b,c,3)):vb(a,!0)}function we(a,b){return a>b}function xe(a,b){return a>=b}function ye(a){return o(a)&&Yc(a)&&ag.call(a,"callee")&&!jg.call(a,"callee")}function ze(a){return a===!0||a===!1||o(a)&&cg.call(a)==S}function Ae(a){return o(a)&&cg.call(a)==T}function Be(a){return!!a&&1===a.nodeType&&o(a)&&!Ne(a)}function Ce(a){return null==a?!0:Yc(a)&&(Ch(a)||Pe(a)||ye(a)||o(a)&&Ge(a.splice))?!a.length:!Nh(a).length}function De(a,b,c,d){c="function"==typeof c?fc(c,d,3):w;var e=c?c(a,b):w;return e===w?Jb(a,b,c):!!e}function Ee(a){return o(a)&&"string"==typeof a.message&&cg.call(a)==U}function Fe(a){return"number"==typeof a&&tg(a)}function Ge(a){return He(a)&&cg.call(a)==V}function He(a){var b=typeof a;return!!a&&("object"==b||"function"==b)}function Ie(a,b,c,d){return c="function"==typeof c?fc(c,d,3):w,Lb(a,Rc(b),c)}function Je(a){return Me(a)&&a!=+a}function Ke(a){return null==a?!1:Ge(a)?eg.test(_f.call(a)):o(a)&&Fa.test(a)}function Le(a){return null===a}function Me(a){return"number"==typeof a||o(a)&&cg.call(a)==X}function Ne(a){var b;if(!o(a)||cg.call(a)!=Y||ye(a)||!ag.call(a,"constructor")&&(b=a.constructor,"function"==typeof b&&!(b instanceof b)))return!1;var c;return Eb(a,function(a,b){c=b}),c===w||ag.call(a,c)}function Oe(a){return He(a)&&cg.call(a)==Z}function Pe(a){return"string"==typeof a||o(a)&&cg.call(a)==_}function Qe(a){return o(a)&&bd(a.length)&&!!Na[cg.call(a)]}function Re(a){return a===w}function Se(a,b){return b>a}function Te(a,b){return b>=a}function Ue(a){var b=a?Pg(a):0;return bd(b)?b?cb(a):[]:ef(a)}function Ve(a){return tb(a,_e(a))}function We(a,b,c){var d=Ig(a);return c&&$c(a,b,c)&&(b=w),b?rb(d,b):d}function Xe(a){return Hb(a,_e(a))}function Ye(a,b,c){var d=null==a?w:Ib(a,ld(b),b+"");return d===w?c:d}function Ze(a,b){if(null==a)return!1;var c=ag.call(a,b);if(!c&&!_c(b)){if(b=ld(b),a=1==b.length?a:Ib(a,Wb(b,0,-1)),null==a)return!1;b=zd(b),c=ag.call(a,b)}return c||bd(a.length)&&Zc(b,a.length)&&(Ch(a)||ye(a))}function $e(a,b,c){c&&$c(a,b,c)&&(b=w);for(var d=-1,e=Nh(a),f=e.length,g={};++d<f;){var h=e[d],i=a[h];b?ag.call(g,i)?g[i].push(h):g[i]=[h]:g[i]=h}return g}function _e(a){if(null==a)return[];He(a)||(a=Uf(a));var b=a.length;b=b&&bd(b)&&(Ch(a)||ye(a))&&b||0;for(var c=a.constructor,d=-1,e="function"==typeof c&&c.prototype===a,f=Of(b),g=b>0;++d<b;)f[d]=d+"";for(var h in a)g&&Zc(h,b)||"constructor"==h&&(e||!ag.call(a,h))||f.push(h);return f}function af(a){a=kd(a);for(var b=-1,c=Nh(a),d=c.length,e=Of(d);++b<d;){var f=c[b];e[b]=[f,a[f]]}return e}function bf(a,b,c){var d=null==a?w:a[b];return d===w&&(null==a||_c(b,a)||(b=ld(b),a=1==b.length?a:Ib(a,Wb(b,0,-1)),d=null==a?w:a[zd(b)]),d=d===w?c:d),Ge(d)?d.call(a):d}function cf(a,b,c){if(null==a)return a;var d=b+"";b=null!=a[d]||_c(b,a)?[d]:ld(b);for(var e=-1,f=b.length,g=f-1,h=a;null!=h&&++e<f;){var i=b[e];He(h)&&(e==g?h[i]=c:null==h[i]&&(h[i]=Zc(b[e+1])?[]:{})),h=h[i]}return a}function df(a,b,c,d){var e=Ch(a)||Qe(a);if(b=Oc(b,d,4),null==c)if(e||He(a)){var f=a.constructor;c=e?Ch(a)?new f:[]:Ig(Ge(f)?f.prototype:w)}else c={};return(e?db:Fb)(a,function(a,d,e){return b(c,a,d,e)}),c}function ef(a){return ac(a,Nh(a))}function ff(a){return ac(a,_e(a))}function gf(a,b,c){return b=+b||0,c===w?(c=b,b=0):c=+c||0,a>=wg(b,c)&&a<vg(b,c)}function hf(a,b,c){c&&$c(a,b,c)&&(b=c=w);var d=null==a,e=null==b;if(null==c&&(e&&"boolean"==typeof a?(c=a,a=1):"boolean"==typeof b&&(c=b,e=!0)),d&&e&&(b=1,e=!1),a=+a||0,e?(b=a,a=0):b=+b||0,c||a%1||b%1){var f=zg();return wg(a+f*(b-a+hg("1e-"+((f+"").length-1))),b)}return Ub(a,b)}function jf(a){return a=e(a),a&&a.charAt(0).toUpperCase()+a.slice(1)}function kf(a){return a=e(a),a&&a.replace(Ha,j).replace(Aa,"")}function lf(a,b,c){a=e(a),b+="";var d=a.length;return c=c===w?d:wg(0>c?0:+c||0,d),c-=b.length,c>=0&&a.indexOf(b,c)==c}function mf(a){return a=e(a),a&&ra.test(a)?a.replace(pa,k):a}function nf(a){return a=e(a),a&&za.test(a)?a.replace(ya,l):a||"(?:)"}function of(a,b,c){a=e(a),b=+b;var d=a.length;if(d>=b||!tg(b))return a;var f=(b-d)/2,g=rg(f),h=pg(f);return c=Gc("",h,c),c.slice(0,g)+a+c}function pf(a,b,c){return(c?$c(a,b,c):null==b)?b=0:b&&(b=+b),a=tf(a),yg(a,b||(Ea.test(a)?16:10))}function qf(a,b){var c="";if(a=e(a),b=+b,1>b||!a||!tg(b))return c;do b%2&&(c+=a),b=rg(b/2),a+=a;while(b);return c}function rf(a,b,c){return a=e(a),c=null==c?0:wg(0>c?0:+c||0,a.length),a.lastIndexOf(b,c)==c}function sf(a,b,c){var d=W.templateSettings;c&&$c(a,b,c)&&(b=c=w),a=e(a),b=qb(rb({},c||b),d,pb);var f,g,h=qb(rb({},b.imports),d.imports,pb),i=Nh(h),j=ac(h,i),k=0,l=b.interpolate||Ia,n="__p += '",o=Vf((b.escape||Ia).source+"|"+l.source+"|"+(l===ua?Ca:Ia).source+"|"+(b.evaluate||Ia).source+"|$","g"),p="//# sourceURL="+("sourceURL"in b?b.sourceURL:"lodash.templateSources["+ ++Ma+"]")+"\n";a.replace(o,function(b,c,d,e,h,i){return d||(d=e),n+=a.slice(k,i).replace(Ja,m),c&&(f=!0,n+="' +\n__e("+c+") +\n'"),h&&(g=!0,n+="';\n"+h+";\n__p += '"),d&&(n+="' +\n((__t = ("+d+")) == null ? '' : __t) +\n'"),k=i+b.length,b}),n+="';\n";var q=b.variable;q||(n="with (obj) {\n"+n+"\n}\n"),n=(g?n.replace(la,""):n).replace(ma,"$1").replace(na,"$1;"),n="function("+(q||"obj")+") {\n"+(q?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(f?", __e = _.escape":"")+(g?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+n+"return __p\n}";var r=Yh(function(){return Rf(i,p+"return "+n).apply(w,j)});if(r.source=n,Ee(r))throw r;return r}function tf(a,b,c){var d=a;return(a=e(a))?(c?$c(d,b,c):null==b)?a.slice(s(a),t(a)+1):(b+="",a.slice(f(a,b),g(a,b)+1)):a}function uf(a,b,c){var d=a;return a=e(a),a?(c?$c(d,b,c):null==b)?a.slice(s(a)):a.slice(f(a,b+"")):a}function vf(a,b,c){var d=a;return a=e(a),a?(c?$c(d,b,c):null==b)?a.slice(0,t(a)+1):a.slice(0,g(a,b+"")+1):a}function wf(a,b,c){c&&$c(a,b,c)&&(b=w);var d=H,f=I;if(null!=b)if(He(b)){var g="separator"in b?b.separator:g;d="length"in b?+b.length||0:d,f="omission"in b?e(b.omission):f}else d=+b||0;if(a=e(a),d>=a.length)return a;var h=d-f.length;if(1>h)return f;var i=a.slice(0,h);if(null==g)return i+f;if(Oe(g)){if(a.slice(h).search(g)){var j,k,l=a.slice(0,h);for(g.global||(g=Vf(g.source,(Da.exec(g)||"")+"g")),g.lastIndex=0;j=g.exec(l);)k=j.index;i=i.slice(0,null==k?h:k)}}else if(a.indexOf(g,h)!=h){var m=i.lastIndexOf(g);m>-1&&(i=i.slice(0,m))}return i+f}function xf(a){return a=e(a),a&&qa.test(a)?a.replace(oa,u):a}function yf(a,b,c){return c&&$c(a,b,c)&&(b=w),a=e(a),a.match(b||Ka)||[]}function zf(a,b,c){return c&&$c(a,b,c)&&(b=w),o(a)?Cf(a):ub(a,b)}function Af(a){return function(){return a}}function Bf(a){return a}function Cf(a){return Nb(vb(a,!0))}function Df(a,b){return Ob(a,vb(b,!0))}function Ef(a,b,c){if(null==c){var d=He(b),e=d?Nh(b):w,f=e&&e.length?Hb(b,e):w;(f?f.length:d)||(f=!1,c=b,b=a,a=this)}f||(f=Hb(b,Nh(b)));var g=!0,h=-1,i=Ge(a),j=f.length;c===!1?g=!1:He(c)&&"chain"in c&&(g=c.chain);for(;++h<j;){var k=f[h],l=b[k];a[k]=l,i&&(a.prototype[k]=function(b){return function(){var c=this.__chain__;if(g||c){var d=a(this.__wrapped__),e=d.__actions__=cb(this.__actions__);return e.push({func:b,args:arguments,thisArg:a}),d.__chain__=c,d}return b.apply(a,jb([this.value()],arguments))}}(l))}return a}function Ff(){return _a._=dg,this}function Gf(){}function Hf(a){return _c(a)?Rb(a):Sb(a)}function If(a){return function(b){return Ib(a,ld(b),b+"")}}function Jf(a,b,c){c&&$c(a,b,c)&&(b=c=w),a=+a||0,c=null==c?1:+c||0,null==b?(b=a,a=0):b=+b||0;for(var d=-1,e=vg(pg((b-a)/(c||1)),0),f=Of(e);++d<e;)f[d]=a,a+=c;return f}function Kf(a,b,c){if(a=rg(a),1>a||!tg(a))return[];var d=-1,e=Of(wg(a,Cg));for(b=fc(b,c,1);++d<a;)Cg>d?e[d]=b(d):b(d);return e}function Lf(a){var b=++bg;return e(a)+b}function Mf(a,b){return(+a||0)+(+b||0)}function Nf(a,b,c){return c&&$c(a,b,c)&&(b=w),b=Oc(b,c,3),1==b.length?nb(Ch(a)?a:jd(a),b):$b(a,b)}p=p?ab.defaults(_a.Object(),p,ab.pick(_a,La)):_a;var Of=p.Array,Pf=p.Date,Qf=p.Error,Rf=p.Function,Sf=p.Math,Tf=p.Number,Uf=p.Object,Vf=p.RegExp,Wf=p.String,Xf=p.TypeError,Yf=Of.prototype,Zf=Uf.prototype,$f=Wf.prototype,_f=Rf.prototype.toString,ag=Zf.hasOwnProperty,bg=0,cg=Zf.toString,dg=_a._,eg=Vf("^"+_f.call(ag).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),fg=p.ArrayBuffer,gg=p.clearTimeout,hg=p.parseFloat,ig=Sf.pow,jg=Zf.propertyIsEnumerable,kg=Sc(p,"Set"),lg=p.setTimeout,mg=Yf.splice,ng=p.Uint8Array,og=Sc(p,"WeakMap"),pg=Sf.ceil,qg=Sc(Uf,"create"),rg=Sf.floor,sg=Sc(Of,"isArray"),tg=p.isFinite,ug=Sc(Uf,"keys"),vg=Sf.max,wg=Sf.min,xg=Sc(Pf,"now"),yg=p.parseInt,zg=Sf.random,Ag=Tf.NEGATIVE_INFINITY,Bg=Tf.POSITIVE_INFINITY,Cg=4294967295,Dg=Cg-1,Eg=Cg>>>1,Fg=9007199254740991,Gg=og&&new og,Hg={};W.support={};W.templateSettings={escape:sa,evaluate:ta,interpolate:ua,variable:"",imports:{_:W}};var Ig=function(){function a(){}return function(b){if(He(b)){a.prototype=b;var c=new a;a.prototype=w}return c||{}}}(),Jg=lc(Fb),Kg=lc(Gb,!0),Lg=mc(),Mg=mc(!0),Ng=Gg?function(a,b){return Gg.set(a,b),a}:Bf,Og=Gg?function(a){return Gg.get(a)}:Gf,Pg=Rb("length"),Qg=function(){var a=0,b=0;return function(c,d){var e=oh(),f=K-(e-b);if(b=e,f>0){if(++a>=J)return c}else a=0;return Ng(c,d)}}(),Rg=qe(function(a,b){return o(a)&&Yc(a)?xb(a,Db(b,!1,!0)):[]}),Sg=vc(),Tg=vc(!0),Ug=qe(function(a){for(var b=a.length,d=b,e=Of(l),f=Qc(),g=f===c,h=[];d--;){var i=a[d]=Yc(i=a[d])?i:[];e[d]=g&&i.length>=120?oc(d&&i):null}var j=a[0],k=-1,l=j?j.length:0,m=e[0];a:for(;++k<l;)if(i=j[k],(m?Za(m,i):f(h,i,0))<0){for(var d=b;--d;){var n=e[d];if((n?Za(n,i):f(a[d],i,0))<0)continue a}m&&m.push(i),h.push(i)}return h}),Vg=qe(function(b,c){c=Db(c);var d=sb(b,c);return Tb(b,c.sort(a)),d}),Wg=Jc(),Xg=Jc(!0),Yg=qe(function(a){return _b(Db(a,!1,!0))}),Zg=qe(function(a,b){return Yc(a)?xb(a,b):[]}),$g=qe(Kd),_g=qe(function(a){var b=a.length,c=b>2?a[b-2]:w,d=b>1?a[b-1]:w;return b>2&&"function"==typeof c?b-=2:(c=b>1&&"function"==typeof d?(--b,d):w,d=w),a.length=b,Ld(a,c,d)}),ah=qe(function(a){return a=Db(a),this.thru(function(b){return bb(Ch(b)?b:[kd(b)],a)})}),bh=qe(function(a,b){return sb(a,Db(b))}),ch=jc(function(a,b,c){ag.call(a,c)?++a[c]:a[c]=1}),dh=uc(Jg),eh=uc(Kg,!0),fh=yc(db,Jg),gh=yc(eb,Kg),hh=jc(function(a,b,c){ag.call(a,c)?a[c].push(b):a[c]=[b]}),ih=jc(function(a,b,c){a[c]=b}),jh=qe(function(a,b,c){var d=-1,e="function"==typeof b,f=_c(b),g=Yc(a)?Of(a.length):[];return Jg(a,function(a){var h=e?b:f&&null!=a?a[b]:w;g[++d]=h?h.apply(a,c):Xc(a,b,c)}),g}),kh=jc(function(a,b,c){a[c?0:1].push(b)},function(){return[[],[]]}),lh=Ec(kb,Jg),mh=Ec(lb,Kg),nh=qe(function(a,b){if(null==a)return[];var c=b[2];return c&&$c(b[0],b[1],c)&&(b.length=1),Zb(a,Db(b),[])}),oh=xg||function(){return(new Pf).getTime()},ph=qe(function(a,b,c){var d=y;if(c.length){var e=q(c,ph.placeholder);d|=D}return Kc(a,d,b,c,e)}),qh=qe(function(a,b){b=b.length?Db(b):Xe(a);for(var c=-1,d=b.length;++c<d;){var e=b[c];a[e]=Kc(a[e],y,a)}return a}),rh=qe(function(a,b,c){var d=y|z;if(c.length){var e=q(c,rh.placeholder);d|=D}return Kc(b,d,a,c,e)}),sh=rc(B),th=rc(C),uh=qe(function(a,b){return wb(a,1,b)}),vh=qe(function(a,b,c){return wb(a,b,c)}),wh=xc(),xh=xc(!0),yh=qe(function(a,b){if(b=Db(b),"function"!=typeof a||!fb(b,d))throw new Xf(O);var c=b.length;return qe(function(d){for(var e=wg(d.length,c);e--;)d[e]=b[e](d[e]);return a.apply(this,d)})}),zh=Dc(D),Ah=Dc(E),Bh=qe(function(a,b){return Kc(a,G,w,w,w,Db(b))}),Ch=sg||function(a){return o(a)&&bd(a.length)&&cg.call(a)==R},Dh=kc(Pb),Eh=kc(function(a,b,c){return c?qb(a,b,c):rb(a,b)}),Fh=sc(Eh,ob),Gh=sc(Dh,ed),Hh=wc(Fb),Ih=wc(Gb),Jh=zc(Lg),Kh=zc(Mg),Lh=Ac(Fb),Mh=Ac(Gb),Nh=ug?function(a){var b=null==a?w:a.constructor;return"function"==typeof b&&b.prototype===a||"function"!=typeof a&&Yc(a)?id(a):He(a)?ug(a):[]}:id,Oh=Bc(!0),Ph=Bc(),Qh=qe(function(a,b){if(null==a)return{};if("function"!=typeof b[0]){var b=ib(Db(b),Wf);return fd(a,xb(_e(a),b))}var c=fc(b[0],b[1],3);return gd(a,function(a,b,d){return!c(a,b,d)})}),Rh=qe(function(a,b){return null==a?{}:"function"==typeof b[0]?gd(a,fc(b[0],b[1],3)):fd(a,Db(b))}),Sh=pc(function(a,b,c){return b=b.toLowerCase(),a+(c?b.charAt(0).toUpperCase()+b.slice(1):b)}),Th=pc(function(a,b,c){return a+(c?"-":"")+b.toLowerCase()}),Uh=Cc(),Vh=Cc(!0),Wh=pc(function(a,b,c){return a+(c?"_":"")+b.toLowerCase()}),Xh=pc(function(a,b,c){return a+(c?" ":"")+(b.charAt(0).toUpperCase()+b.slice(1))}),Yh=qe(function(a,b){try{return a.apply(w,b)}catch(c){return Ee(c)?c:new Qf(c)}}),Zh=qe(function(a,b){return function(c){return Xc(c,a,b)}}),$h=qe(function(a,b){return function(c){return Xc(a,c,b)}}),_h=Ic("ceil"),ai=Ic("floor"),bi=tc(we,Ag),ci=tc(Se,Bg),di=Ic("round");return W.prototype=$.prototype,aa.prototype=Ig($.prototype),aa.prototype.constructor=aa,Pa.prototype=Ig($.prototype),Pa.prototype.constructor=Pa,Ta.prototype["delete"]=Ua,Ta.prototype.get=Va,Ta.prototype.has=Wa,Ta.prototype.set=Xa,Ya.prototype.push=$a,ne.Cache=Ta,W.after=je,W.ary=ke,W.assign=Eh,W.at=bh,W.before=le,W.bind=ph,W.bindAll=qh,W.bindKey=rh,W.callback=zf,W.chain=Od,W.chunk=nd,W.compact=od,W.constant=Af,W.countBy=ch,W.create=We,W.curry=sh,W.curryRight=th,W.debounce=me,W.defaults=Fh,W.defaultsDeep=Gh,W.defer=uh,W.delay=vh,W.difference=Rg,W.drop=pd,W.dropRight=qd,W.dropRightWhile=rd,W.dropWhile=sd,W.fill=td,W.filter=Yd,W.flatten=vd,W.flattenDeep=wd,W.flow=wh,W.flowRight=xh,W.forEach=fh,W.forEachRight=gh,W.forIn=Jh,W.forInRight=Kh,W.forOwn=Lh,W.forOwnRight=Mh,W.functions=Xe,W.groupBy=hh,W.indexBy=ih,W.initial=yd,W.intersection=Ug,W.invert=$e,W.invoke=jh,W.keys=Nh,W.keysIn=_e,W.map=_d,W.mapKeys=Oh,W.mapValues=Ph,W.matches=Cf,W.matchesProperty=Df,W.memoize=ne,W.merge=Dh,W.method=Zh,W.methodOf=$h,W.mixin=Ef,W.modArgs=yh,W.negate=oe,W.omit=Qh,W.once=pe,W.pairs=af,W.partial=zh,W.partialRight=Ah,W.partition=kh,W.pick=Rh,W.pluck=ae,W.property=Hf,W.propertyOf=If,W.pull=Bd,W.pullAt=Vg,W.range=Jf,W.rearg=Bh,W.reject=be,W.remove=Cd,W.rest=Dd,W.restParam=qe,W.set=cf,W.shuffle=de,W.slice=Ed,W.sortBy=ge,W.sortByAll=nh,W.sortByOrder=he,W.spread=re,W.take=Fd,W.takeRight=Gd,W.takeRightWhile=Hd,W.takeWhile=Id,W.tap=Pd,W.throttle=se,W.thru=Qd,W.times=Kf,W.toArray=Ue,W.toPlainObject=Ve,W.transform=df,W.union=Yg,W.uniq=Jd,W.unzip=Kd,W.unzipWith=Ld,W.values=ef,W.valuesIn=ff,W.where=ie,W.without=Zg,W.wrap=te,W.xor=Md,W.zip=$g,W.zipObject=Nd,W.zipWith=_g,W.backflow=xh,W.collect=_d,W.compose=xh,W.each=fh,W.eachRight=gh,W.extend=Eh,W.iteratee=zf,W.methods=Xe,W.object=Nd,W.select=Yd,W.tail=Dd,W.unique=Jd,Ef(W,W),W.add=Mf,W.attempt=Yh,W.camelCase=Sh,W.capitalize=jf,W.ceil=_h,W.clone=ue,W.cloneDeep=ve,W.deburr=kf,W.endsWith=lf,W.escape=mf,W.escapeRegExp=nf,W.every=Xd,W.find=dh,W.findIndex=Sg,W.findKey=Hh,W.findLast=eh,W.findLastIndex=Tg,W.findLastKey=Ih,W.findWhere=Zd,W.first=ud,W.floor=ai,W.get=Ye,W.gt=we,W.gte=xe,W.has=Ze,W.identity=Bf,W.includes=$d,W.indexOf=xd,W.inRange=gf,W.isArguments=ye,W.isArray=Ch,W.isBoolean=ze,W.isDate=Ae,W.isElement=Be,W.isEmpty=Ce,W.isEqual=De,W.isError=Ee,W.isFinite=Fe,W.isFunction=Ge,W.isMatch=Ie,W.isNaN=Je,W.isNative=Ke,W.isNull=Le,W.isNumber=Me,W.isObject=He,W.isPlainObject=Ne,W.isRegExp=Oe,W.isString=Pe,W.isTypedArray=Qe,W.isUndefined=Re,W.kebabCase=Th,W.last=zd,W.lastIndexOf=Ad,W.lt=Se,W.lte=Te,W.max=bi,W.min=ci,W.noConflict=Ff,W.noop=Gf,W.now=oh,W.pad=of,W.padLeft=Uh,W.padRight=Vh,W.parseInt=pf,W.random=hf,W.reduce=lh,W.reduceRight=mh,W.repeat=qf,W.result=bf,W.round=di,W.runInContext=v,W.size=ee,W.snakeCase=Wh,W.some=fe,W.sortedIndex=Wg,W.sortedLastIndex=Xg,W.startCase=Xh,W.startsWith=rf,W.sum=Nf,W.template=sf,W.trim=tf,W.trimLeft=uf,W.trimRight=vf,W.trunc=wf,W.unescape=xf,W.uniqueId=Lf,W.words=yf,W.all=Xd,W.any=fe,W.contains=$d,W.eq=De,W.detect=dh,W.foldl=lh,W.foldr=mh,W.head=ud,W.include=$d,W.inject=lh,Ef(W,function(){var a={};return Fb(W,function(b,c){W.prototype[c]||(a[c]=b)}),a}(),!1),W.sample=ce,W.prototype.sample=function(a){return this.__chain__||null!=a?this.thru(function(b){return ce(b,a)}):ce(this.value())},W.VERSION=x,db(["bind","bindKey","curry","curryRight","partial","partialRight"],function(a){W[a].placeholder=W}),db(["drop","take"],function(a,b){Pa.prototype[a]=function(c){var d=this.__filtered__;if(d&&!b)return new Pa(this);c=null==c?1:vg(rg(c)||0,0);var e=this.clone();return d?e.__takeCount__=wg(e.__takeCount__,c):e.__views__.push({size:c,type:a+(e.__dir__<0?"Right":"")}),e},Pa.prototype[a+"Right"]=function(b){return this.reverse()[a](b).reverse()}}),db(["filter","map","takeWhile"],function(a,b){var c=b+1,d=c!=N;Pa.prototype[a]=function(a,b){var e=this.clone();return e.__iteratees__.push({iteratee:Oc(a,b,1),type:c}),e.__filtered__=e.__filtered__||d,e}}),db(["first","last"],function(a,b){var c="take"+(b?"Right":"");Pa.prototype[a]=function(){return this[c](1).value()[0]}}),db(["initial","rest"],function(a,b){var c="drop"+(b?"":"Right");Pa.prototype[a]=function(){return this.__filtered__?new Pa(this):this[c](1)}}),db(["pluck","where"],function(a,b){var c=b?"filter":"map",d=b?Nb:Hf;Pa.prototype[a]=function(a){return this[c](d(a))}}),Pa.prototype.compact=function(){return this.filter(Bf)},Pa.prototype.reject=function(a,b){return a=Oc(a,b,1),this.filter(function(b){return!a(b)})},Pa.prototype.slice=function(a,b){a=null==a?0:+a||0;var c=this;return c.__filtered__&&(a>0||0>b)?new Pa(c):(0>a?c=c.takeRight(-a):a&&(c=c.drop(a)),b!==w&&(b=+b||0,c=0>b?c.dropRight(-b):c.take(b-a)),c)},Pa.prototype.takeRightWhile=function(a,b){return this.reverse().takeWhile(a,b).reverse()},Pa.prototype.toArray=function(){return this.take(Bg)},Fb(Pa.prototype,function(a,b){var c=/^(?:filter|map|reject)|While$/.test(b),d=/^(?:first|last)$/.test(b),e=W[d?"take"+("last"==b?"Right":""):b];e&&(W.prototype[b]=function(){var b=d?[1]:arguments,f=this.__chain__,g=this.__wrapped__,h=!!this.__actions__.length,i=g instanceof Pa,j=b[0],k=i||Ch(g);k&&c&&"function"==typeof j&&1!=j.length&&(i=k=!1);var l=function(a){return d&&f?e(a,1)[0]:e.apply(w,jb([a],b))},m={func:Qd,args:[l],thisArg:w},n=i&&!h;if(d&&!f)return n?(g=g.clone(),g.__actions__.push(m),a.call(g)):e.call(w,this.value())[0];if(!d&&k){g=n?g:new Pa(this);var o=a.apply(g,b);return o.__actions__.push(m),new aa(o,f)}return this.thru(l)})}),db(["join","pop","push","replace","shift","sort","splice","split","unshift"],function(a){var b=(/^(?:replace|split)$/.test(a)?$f:Yf)[a],c=/^(?:push|sort|unshift)$/.test(a)?"tap":"thru",d=/^(?:join|pop|replace|shift)$/.test(a);W.prototype[a]=function(){var a=arguments;return d&&!this.__chain__?b.apply(this.value(),a):this[c](function(c){return b.apply(c,a)})}}),Fb(Pa.prototype,function(a,b){var c=W[b];if(c){var d=c.name+"",e=Hg[d]||(Hg[d]=[]);e.push({name:b,func:c})}}),Hg[Fc(w,z).name]=[{name:"wrapper",func:w}],Pa.prototype.clone=Qa,Pa.prototype.reverse=Ra,Pa.prototype.value=Sa,W.prototype.chain=Rd,W.prototype.commit=Sd,W.prototype.concat=ah,W.prototype.plant=Td,W.prototype.reverse=Ud,W.prototype.toString=Vd,W.prototype.run=W.prototype.toJSON=W.prototype.valueOf=W.prototype.value=Wd,W.prototype.collect=W.prototype.map,W.prototype.head=W.prototype.first,W.prototype.select=W.prototype.filter,W.prototype.tail=W.prototype.rest,W}var w,x="3.10.1",y=1,z=2,A=4,B=8,C=16,D=32,E=64,F=128,G=256,H=30,I="...",J=150,K=16,L=200,M=1,N=2,O="Expected a function",P="__lodash_placeholder__",Q="[object Arguments]",R="[object Array]",S="[object Boolean]",T="[object Date]",U="[object Error]",V="[object Function]",W="[object Map]",X="[object Number]",Y="[object Object]",Z="[object RegExp]",$="[object Set]",_="[object String]",aa="[object WeakMap]",ba="[object ArrayBuffer]",ca="[object Float32Array]",da="[object Float64Array]",ea="[object Int8Array]",fa="[object Int16Array]",ga="[object Int32Array]",ha="[object Uint8Array]",ia="[object Uint8ClampedArray]",ja="[object Uint16Array]",ka="[object Uint32Array]",la=/\b__p \+= '';/g,ma=/\b(__p \+=) '' \+/g,na=/(__e\(.*?\)|\b__t\)) \+\n'';/g,oa=/&(?:amp|lt|gt|quot|#39|#96);/g,pa=/[&<>"'`]/g,qa=RegExp(oa.source),ra=RegExp(pa.source),sa=/<%-([\s\S]+?)%>/g,ta=/<%([\s\S]+?)%>/g,ua=/<%=([\s\S]+?)%>/g,va=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,wa=/^\w*$/,xa=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,ya=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,za=RegExp(ya.source),Aa=/[\u0300-\u036f\ufe20-\ufe23]/g,Ba=/\\(\\)?/g,Ca=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Da=/\w*$/,Ea=/^0[xX]/,Fa=/^\[object .+?Constructor\]$/,Ga=/^\d+$/,Ha=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Ia=/($^)/,Ja=/['\n\r\u2028\u2029\\]/g,Ka=function(){var a="[A-Z\\xc0-\\xd6\\xd8-\\xde]",b="[a-z\\xdf-\\xf6\\xf8-\\xff]+";return RegExp(a+"+(?="+a+b+")|"+a+"?"+b+"|"+a+"+|[0-9]+","g")}(),La=["Array","ArrayBuffer","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Math","Number","Object","RegExp","Set","String","_","clearTimeout","isFinite","parseFloat","parseInt","setTimeout","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap"],Ma=-1,Na={};Na[ca]=Na[da]=Na[ea]=Na[fa]=Na[ga]=Na[ha]=Na[ia]=Na[ja]=Na[ka]=!0,Na[Q]=Na[R]=Na[ba]=Na[S]=Na[T]=Na[U]=Na[V]=Na[W]=Na[X]=Na[Y]=Na[Z]=Na[$]=Na[_]=Na[aa]=!1;var Oa={};Oa[Q]=Oa[R]=Oa[ba]=Oa[S]=Oa[T]=Oa[ca]=Oa[da]=Oa[ea]=Oa[fa]=Oa[ga]=Oa[X]=Oa[Y]=Oa[Z]=Oa[_]=Oa[ha]=Oa[ia]=Oa[ja]=Oa[ka]=!0,Oa[U]=Oa[V]=Oa[W]=Oa[$]=Oa[aa]=!1;var Pa={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Qa={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","`":"&#96;"},Ra={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#96;":"`"},Sa={"function":!0,object:!0},Ta={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Ua={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Va=Sa[typeof exports]&&exports&&!exports.nodeType&&exports,Wa=Sa[typeof module]&&module&&!module.nodeType&&module,Xa=Va&&Wa&&"object"==typeof global&&global&&global.Object&&global,Ya=Sa[typeof self]&&self&&self.Object&&self,Za=Sa[typeof window]&&window&&window.Object&&window,$a=Wa&&Wa.exports===Va&&Va,_a=Xa||Za!==(this&&this.window)&&Za||Ya||this,ab=v();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(_a._=ab,define(function(){return ab})):Va&&Wa?$a?(Wa.exports=ab)._=ab:Va._=ab:_a._=ab}.call(this),angular.module("templates-angularwizard",["step.html","wizard.html"]),angular.module("step.html",[]).run(["$templateCache",function(a){a.put("step.html",'<section ng-show="selected" ng-class="{current: selected, done: completed}" class="step" ng-transclude>\n</section>')}]),angular.module("wizard.html",[]).run(["$templateCache",function(a){a.put("wizard.html",'<div>\n    <div class="steps" ng-transclude></div>\n    <ul class="steps-indicator steps-{{getEnabledSteps().length}}" ng-if="!hideIndicators">\n      <li ng-class="{default: !step.completed && !step.selected, current: step.selected && !step.completed, done: step.completed && !step.selected, editing: step.selected && step.completed}" ng-repeat="step in getEnabledSteps()">\n        <a ng-click="goTo(step)">{{step.title || step.wzTitle}}</a>\n      </li>\n    </ul>\n</div>\n')}]),angular.module("mgo-angular-wizard",["templates-angularwizard"]),angular.module("mgo-angular-wizard").directive("wzStep",function(){return{restrict:"EA",replace:!0,transclude:!0,scope:{wzTitle:"@",title:"@",canenter:"=",canexit:"=",disabled:"@?wzDisabled"},require:"^wizard",templateUrl:function(a,b){return b.template||"step.html"},link:function(a,b,c,d){a.title=a.title||a.wzTitle,d.addStep(a)}}}),angular.module("mgo-angular-wizard").directive("wizard",function(){return{restrict:"EA",replace:!0,transclude:!0,scope:{currentStep:"=",onFinish:"&",hideIndicators:"=",editMode:"=",name:"@"},templateUrl:function(a,b){return b.template||"wizard.html"},controller:["$scope","$element","$log","WizardHandler","$q",function(a,b,c,d,e){function f(b){var c,d;return void 0===b.canenter?!0:"boolean"==typeof b.canenter?b.canenter:(d=b.canenter(a.context),angular.isFunction(d.then)?(c=e.defer(),d.then(function(a){c.resolve(a)}),c.promise):b.canenter(a.context)===!0)}function g(b,c){var d,f;return"undefined"==typeof b.canexit||a.getStepNumber(c)<a.currentStepNumber()?!0:"boolean"==typeof b.canexit?b.canexit:(f=b.canexit(a.context),angular.isFunction(f.then)?(d=e.defer(),f.then(function(a){d.resolve(a)}),d.promise):b.canexit(a.context)===!0)}function h(){_.each(a.getEnabledSteps(),function(a){a.selected=!1}),a.selectedStep=null}var i=!0;d.addWizard(a.name||d.defaultName,this),a.$on("$destroy",function(){d.removeWizard(a.name||d.defaultName)}),a.steps=[],a.context={},a.$watch("currentStep",function(b){if(b){var c=a.selectedStep.title||a.selectedStep.wzTitle;a.selectedStep&&c!==a.currentStep&&a.goTo(_.findWhere(a.getEnabledSteps(),{title:a.currentStep}))}}),a.$watch("[editMode, steps.length]",function(){var b=a.editMode;_.isUndefined(b)||_.isNull(b)||b&&_.each(a.getEnabledSteps(),function(a){a.completed=!0})},!0),this.addStep=function(b){a.steps.push(b),1===a.getEnabledSteps().length&&a.goTo(a.getEnabledSteps()[0])},this.context=a.context,a.getStepNumber=function(b){return _.indexOf(a.getEnabledSteps(),b)+1},a.goTo=function(b){if(i)h(),a.selectedStep=b,_.isUndefined(a.currentStep)||(a.currentStep=b.title||b.wzTitle),b.selected=!0,a.$emit("wizard:stepChanged",{step:b,index:_.indexOf(a.getEnabledSteps(),b)}),i=!1;else{var c;a.currentStepNumber()>0?c=a.currentStepNumber()-1:0===a.currentStepNumber()&&(c=0),e.all([g(a.getEnabledSteps()[c],b),f(b)]).then(function(c){c[0]&&c[1]&&(h(),a.selectedStep=b,_.isUndefined(a.currentStep)||(a.currentStep=b.title||b.wzTitle),b.selected=!0,a.$emit("wizard:stepChanged",{step:b,index:_.indexOf(a.getEnabledSteps(),b)}))})}},a.currentStepNumber=function(){return _.indexOf(a.getEnabledSteps(),a.selectedStep)+1},a.getEnabledSteps=function(){return _.filter(a.steps,function(a){return"true"!==a.disabled})},this.currentStepTitle=function(){return a.selectedStep.title},this.currentStepNumber=function(){return a.currentStepNumber()},this.next=function(b){var c=a.getEnabledSteps(),d=_.indexOf(c,a.selectedStep);if(angular.isFunction(b)){if(!b())return;d===c.length-1?this.finish():a.goTo(c[d+1])}b||(a.selectedStep.completed=!0),d===c.length-1?this.finish():a.goTo(c[d+1])},this.goTo=function(b){var c,d=a.getEnabledSteps();c=_.isNumber(b)?d[b]:_.findWhere(d,{title:b}),a.goTo(c)},this.finish=function(){a.onFinish&&a.onFinish()},this.previous=function(){var b=_.indexOf(a.getEnabledSteps(),a.selectedStep);if(0===b)throw new Error("Can't go back. It's already in step 0");a.goTo(a.getEnabledSteps()[b-1])},this.cancel=function(){var b=_.indexOf(a.getEnabledSteps(),a.selectedStep);if(0===b)throw new Error("Can't go back. It's already in step 0");a.goTo(a.getEnabledSteps()[0])}}]}}),wizardButtonDirective("wzNext"),wizardButtonDirective("wzPrevious"),wizardButtonDirective("wzFinish"),wizardButtonDirective("wzCancel"),angular.module("mgo-angular-wizard").factory("WizardHandler",function(){var a={},b={};return a.defaultName="defaultWizard",a.addWizard=function(a,c){b[a]=c},a.removeWizard=function(a){delete b[a]},a.wizard=function(c){var d=c;return c||(d=a.defaultName),b[d]},a}),angular.module("xeditable",[]).value("editableOptions",{theme:"default",icon_set:"default",buttons:"right",blurElem:"cancel",blurForm:"ignore",activate:"focus",isDisabled:!1,activationEvent:"click"}),angular.module("xeditable").directive("editableBsdate",["editableDirectiveFactory",function(a){return a({directiveName:"editableBsdate",inputTpl:"<div></div>",render:function(){this.parent.render.call(this);
+var a=angular.element('<input type="text" class="form-control" ng-model="$data"/>'),b=angular.element('<button type="button" class="btn btn-default"><i class="glyphicon glyphicon-calendar"></i></button>'),c=angular.element('<span class="input-group-btn"></span>');a.attr("datepicker-popup",this.attrs.eDatepickerPopupXEditable||"yyyy/MM/dd"),a.attr("is-open",this.attrs.eIsOpen),a.attr("date-disabled",this.attrs.eDateDisabled),a.attr("datepicker-popup",this.attrs.eDatepickerPopup),a.attr("datepicker-mode",this.attrs.eDatepickerMode||"day"),a.attr("min-date",this.attrs.eMinDate),a.attr("max-date",this.attrs.eMaxDate),a.attr("show-weeks",this.attrs.eShowWeeks||!0),a.attr("starting-day",this.attrs.eStartingDay||0),a.attr("init-date",this.attrs.eInitDate||new Date),a.attr("min-mode",this.attrs.eMinMode||"day"),a.attr("max-mode",this.attrs.eMaxMode||"year"),a.attr("format-day",this.attrs.eFormatDay||"dd"),a.attr("format-month",this.attrs.eFormatMonth||"MMMM"),a.attr("format-year",this.attrs.eFormatYear||"yyyy"),a.attr("format-day-header",this.attrs.eFormatDayHeader||"EEE"),a.attr("format-day-title",this.attrs.eFormatDayTitle||"MMMM yyyy"),a.attr("format-month-title",this.attrs.eFormatMonthTitle||"yyyy"),a.attr("year-range",this.attrs.eYearRange||20),a.attr("show-button-bar",this.attrs.eShowButtonBar||!0),a.attr("current-text",this.attrs.eCurrentText||"Today"),a.attr("clear-text",this.attrs.eClearText||"Clear"),a.attr("close-text",this.attrs.eCloseText||"Done"),a.attr("close-on-date-selection",this.attrs.eCloseOnDateSelection||!0),a.attr("date-picker-append-to-body",this.attrs.eDatePickerAppendToBody||!1),a.attr("date-disabled",this.attrs.eDateDisabled),b.attr("ng-click",this.attrs.eNgClick),c.append(b),this.inputEl.prepend(a),this.inputEl.append(c),this.inputEl.removeAttr("class"),this.inputEl.attr("class","input-group")}})}]),angular.module("xeditable").directive("editableBstime",["editableDirectiveFactory",function(a){return a({directiveName:"editableBstime",inputTpl:"<timepicker></timepicker>",render:function(){this.parent.render.call(this);var a=angular.element('<div class="well well-small" style="display:inline-block;"></div>');a.attr("ng-model",this.inputEl.attr("ng-model")),this.inputEl.removeAttr("ng-model"),this.attrs.eNgChange&&(a.attr("ng-change",this.inputEl.attr("ng-change")),this.inputEl.removeAttr("ng-change")),this.inputEl.wrap(a)}})}]),angular.module("xeditable").directive("editableCheckbox",["editableDirectiveFactory",function(a){return a({directiveName:"editableCheckbox",inputTpl:'<input type="checkbox">',render:function(){this.parent.render.call(this),this.attrs.eTitle&&(this.inputEl.wrap("<label></label>"),this.inputEl.parent().append(this.attrs.eTitle))},autosubmit:function(){var a=this;a.inputEl.bind("change",function(){setTimeout(function(){a.scope.$apply(function(){a.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableChecklist",["editableDirectiveFactory","editableNgOptionsParser",function(a,b){return a({directiveName:"editableChecklist",inputTpl:"<span></span>",useCopy:!0,render:function(){this.parent.render.call(this);var a=b(this.attrs.eNgOptions),c='<label ng-repeat="'+a.ngRepeat+'"><input type="checkbox" checklist-model="$parent.$data" checklist-value="'+a.locals.valueFn+'"><span ng-bind="'+a.locals.displayFn+'"></span></label>';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(c)}})}]),angular.module("xeditable").directive("editableCombodate",["editableDirectiveFactory","editableCombodate",function(a,b){return a({directiveName:"editableCombodate",inputTpl:'<input type="text">',render:function(){this.parent.render.call(this);var a=b.getInstance(this.inputEl,{value:new Date(this.scope.$data)}),c=this;a.$widget.find("select").bind("change",function(b){c.scope.$data=new Date(a.getValue()).toISOString()})}})}]),function(){var a="text|password|email|tel|number|url|search|color|date|datetime|time|month|week|file".split("|");angular.forEach(a,function(a){var b="editable"+a.charAt(0).toUpperCase()+a.slice(1);angular.module("xeditable").directive(b,["editableDirectiveFactory",function(c){return c({directiveName:b,inputTpl:'<input type="'+a+'">'})}])}),angular.module("xeditable").directive("editableRange",["editableDirectiveFactory",function(a){return a({directiveName:"editableRange",inputTpl:'<input type="range" id="range" name="range">',render:function(){this.parent.render.call(this),this.inputEl.after("<output>{{$data}}</output>")}})}])}(),angular.module("xeditable").directive("editableRadiolist",["editableDirectiveFactory","editableNgOptionsParser",function(a,b){return a({directiveName:"editableRadiolist",inputTpl:"<span></span>",render:function(){this.parent.render.call(this);var a=b(this.attrs.eNgOptions),c='<label ng-repeat="'+a.ngRepeat+'"><input type="radio" ng-disabled="'+this.attrs.eNgDisabled+'" ng-model="$parent.$data" value="{{'+a.locals.valueFn+'}}"><span ng-bind="'+a.locals.displayFn+'"></span></label>';this.inputEl.removeAttr("ng-model"),this.inputEl.removeAttr("ng-options"),this.inputEl.html(c)},autosubmit:function(){var a=this;a.inputEl.bind("change",function(){setTimeout(function(){a.scope.$apply(function(){a.scope.$form.$submit()})},500)})}})}]),angular.module("xeditable").directive("editableSelect",["editableDirectiveFactory",function(a){return a({directiveName:"editableSelect",inputTpl:"<select></select>",autosubmit:function(){var a=this;a.inputEl.bind("change",function(){a.scope.$apply(function(){a.scope.$form.$submit()})})}})}]),angular.module("xeditable").directive("editableTextarea",["editableDirectiveFactory",function(a){return a({directiveName:"editableTextarea",inputTpl:"<textarea></textarea>",addListeners:function(){var a=this;a.parent.addListeners.call(a),a.single&&"no"!==a.buttons&&a.autosubmit()},autosubmit:function(){var a=this;a.inputEl.bind("keydown",function(b){(b.ctrlKey||b.metaKey)&&13===b.keyCode&&a.scope.$apply(function(){a.scope.$form.$submit()})})}})}]),angular.module("xeditable").factory("editableController",["$q","editableUtils",function(a,b){function c(a,c,d,e,f,g,h,i,j,k){var l,m,n=this;n.scope=a,n.elem=d,n.attrs=c,n.inputEl=null,n.editorEl=null,n.single=!0,n.error="",n.theme=f[h.theme]||f["default"],n.parent={},n.icon_set="default"===h.icon_set?g["default"][h.theme]:g.external[h.icon_set],n.inputTpl="",n.directiveName="",n.useCopy=!1,n.single=null,n.buttons="right",n.init=function(b){if(n.single=b,n.name=c.eName||c[n.directiveName],!c[n.directiveName])throw"You should provide value for `"+n.directiveName+"` in editable element!";l=e(c[n.directiveName]),n.single?n.buttons=n.attrs.buttons||h.buttons:n.buttons="no",c.eName&&n.scope.$watch("$data",function(a){n.scope.$form.$data[c.eName]=a}),c.onshow&&(n.onshow=function(){return n.catchError(e(c.onshow)(a))}),c.onhide&&(n.onhide=function(){return e(c.onhide)(a)}),c.oncancel&&(n.oncancel=function(){return e(c.oncancel)(a)}),c.onbeforesave&&(n.onbeforesave=function(){return n.catchError(e(c.onbeforesave)(a))}),c.onaftersave&&(n.onaftersave=function(){return n.catchError(e(c.onaftersave)(a))}),a.$parent.$watch(c[n.directiveName],function(a,b){n.setLocalValue(),n.handleEmpty()})},n.render=function(){var a=n.theme;n.inputEl=angular.element(n.inputTpl),n.controlsEl=angular.element(a.controlsTpl),n.controlsEl.append(n.inputEl),"no"!==n.buttons&&(n.buttonsEl=angular.element(a.buttonsTpl),n.submitEl=angular.element(a.submitTpl),n.cancelEl=angular.element(a.cancelTpl),n.icon_set&&(n.submitEl.find("span").addClass(n.icon_set.ok),n.cancelEl.find("span").addClass(n.icon_set.cancel)),n.buttonsEl.append(n.submitEl).append(n.cancelEl),n.controlsEl.append(n.buttonsEl),n.inputEl.addClass("editable-has-buttons")),n.errorEl=angular.element(a.errorTpl),n.controlsEl.append(n.errorEl),n.editorEl=angular.element(n.single?a.formTpl:a.noformTpl),n.editorEl.append(n.controlsEl);for(var d in c.$attr)if(!(d.length<=1)){var e=!1,f=d.substring(1,2);if("e"===d.substring(0,1)&&f===f.toUpperCase()&&(e=d.substring(1),"Form"!==e&&"NgSubmit"!==e)){e=e.substring(0,1).toLowerCase()+b.camelToDash(e.substring(1));var g="value"!==e&&""===c[d]?e:c[d];n.inputEl.attr(e,g)}}n.inputEl.addClass("editable-input"),n.inputEl.attr("ng-model","$data"),n.editorEl.addClass(b.camelToDash(n.directiveName)),n.single&&(n.editorEl.attr("editable-form","$form"),n.editorEl.attr("blur",n.attrs.blur||("no"===n.buttons?"cancel":h.blurElem))),angular.isFunction(a.postrender)&&a.postrender.call(n)},n.setLocalValue=function(){n.scope.$data=n.useCopy?angular.copy(l(a.$parent)):l(a.$parent)},n.show=function(){return n.setLocalValue(),n.render(),d.after(n.editorEl),j(n.editorEl)(a),n.addListeners(),d.addClass("editable-hide"),n.onshow()},n.hide=function(){return n.editorEl.remove(),d.removeClass("editable-hide"),n.onhide()},n.cancel=function(){n.oncancel()},n.addListeners=function(){n.inputEl.bind("keyup",function(a){if(n.single)switch(a.keyCode){case 27:n.scope.$apply(function(){n.scope.$form.$cancel()})}}),n.single&&"no"===n.buttons&&n.autosubmit(),n.editorEl.bind("click",function(a){a.which&&1!==a.which||n.scope.$form.$visible&&(n.scope.$form._clicked=!0)})},n.setWaiting=function(a){a?(m=!n.inputEl.attr("disabled")&&!n.inputEl.attr("ng-disabled")&&!n.inputEl.attr("ng-enabled"),m&&(n.inputEl.attr("disabled","disabled"),n.buttonsEl&&n.buttonsEl.find("button").attr("disabled","disabled"))):m&&(n.inputEl.removeAttr("disabled"),n.buttonsEl&&n.buttonsEl.find("button").removeAttr("disabled"))},n.activate=function(a,b){setTimeout(function(){var c=n.inputEl[0];"focus"===h.activate&&c.focus&&(a&&(b=b||a,c.onfocus=function(){var c=this;setTimeout(function(){c.setSelectionRange(a,b)})}),c.focus()),"select"===h.activate&&c.select&&c.select()},0)},n.setError=function(b){angular.isObject(b)||(a.$error=b,n.error=b)},n.catchError=function(a,b){return angular.isObject(a)&&b!==!0?k.when(a).then(angular.bind(this,function(a){this.catchError(a,!0)}),angular.bind(this,function(a){this.catchError(a,!0)})):b&&angular.isObject(a)&&a.status&&200!==a.status&&a.data&&angular.isString(a.data)?(this.setError(a.data),a=a.data):angular.isString(a)&&this.setError(a),a},n.save=function(){l.assign(a.$parent,n.useCopy?angular.copy(n.scope.$data):n.scope.$data)},n.handleEmpty=function(){var b=l(a.$parent),c=null===b||void 0===b||""===b||angular.isArray(b)&&0===b.length;d.toggleClass("editable-empty",c)},n.autosubmit=angular.noop,n.onshow=angular.noop,n.onhide=angular.noop,n.oncancel=angular.noop,n.onbeforesave=angular.noop,n.onaftersave=angular.noop}return c.$inject=["$scope","$attrs","$element","$parse","editableThemes","editableIcons","editableOptions","$rootScope","$compile","$q"],c}]),angular.module("xeditable").factory("editableDirectiveFactory",["$parse","$compile","editableThemes","$rootScope","$document","editableController","editableFormController","editableOptions",function(a,b,c,d,e,f,g,h){return function(b){return{restrict:"A",scope:!0,require:[b.directiveName,"?^form"],controller:f,link:function(c,f,i,j){var k,l=j[0],m=!1;if(j[1])k=j[1],m=!0;else if(i.eForm){var n=a(i.eForm)(c);if(n)k=n,m=!0;else for(var o=0;o<e[0].forms.length;o++)if(e[0].forms[o].name===i.eForm){k=null,m=!0;break}}angular.forEach(b,function(a,b){void 0!==l[b]&&(l.parent[b]=l[b])}),angular.extend(l,b);var p=angular.isDefined(i.editDisabled)?c.$eval(i.editDisabled):h.isDisabled;if(!p)if(l.init(!m),c.$editable=l,f.addClass("editable"),m)if(k){if(c.$form=k,!c.$form.$addEditable)throw"Form with editable elements should have `editable-form` attribute.";c.$form.$addEditable(l)}else d.$$editableBuffer=d.$$editableBuffer||{},d.$$editableBuffer[i.eForm]=d.$$editableBuffer[i.eForm]||[],d.$$editableBuffer[i.eForm].push(l),c.$form=null;else c.$form=g(),c.$form.$addEditable(l),i.eForm&&(c.$parent[i.eForm]=c.$form),(!i.eForm||i.eClickable)&&(f.addClass("editable-click"),f.bind(h.activationEvent,function(a){a.preventDefault(),a.editable=l,c.$apply(function(){c.$form.$show()})}))}}}}]),angular.module("xeditable").factory("editableFormController",["$parse","$document","$rootScope","editablePromiseCollection","editableUtils",function(a,b,c,d,e){var f=[],g=function(a,b){if(b==a)return!0;for(var c=b.parentNode;null!==c;){if(c==a)return!0;c=c.parentNode}return!1},h=function(a,b){var c=!0,d=a.$editables;return angular.forEach(d,function(a){var d=a.editorEl[0];g(d,b.target)&&(c=!1)}),c};b.bind("click",function(a){if(!(a.which&&1!==a.which||a.isDefaultPrevented())){for(var b=[],d=[],e=0;e<f.length;e++)f[e]._clicked?f[e]._clicked=!1:f[e].$waiting||("cancel"===f[e]._blur&&h(f[e],a)&&b.push(f[e]),"submit"===f[e]._blur&&h(f[e],a)&&d.push(f[e]));(b.length||d.length)&&c.$apply(function(){angular.forEach(b,function(a){a.$cancel()}),angular.forEach(d,function(a){a.$submit()})})}});var i={$addEditable:function(a){this.$editables.push(a),a.elem.bind("$destroy",angular.bind(this,this.$removeEditable,a)),a.scope.$form||(a.scope.$form=this),this.$visible&&a.catchError(a.show())},$removeEditable:function(a){for(var b=0;b<this.$editables.length;b++)if(this.$editables[b]===a)return void this.$editables.splice(b,1)},$show:function(){if(!this.$visible){this.$visible=!0;var a=d();a.when(this.$onshow()),this.$setError(null,""),angular.forEach(this.$editables,function(b){a.when(b.show())}),a.then({onWait:angular.bind(this,this.$setWaiting),onTrue:angular.bind(this,this.$activate),onFalse:angular.bind(this,this.$activate),onString:angular.bind(this,this.$activate)}),setTimeout(angular.bind(this,function(){this._clicked=!1,-1===e.indexOf(f,this)&&f.push(this)}),0)}},$activate:function(a){var b;if(this.$editables.length){if(angular.isString(a))for(b=0;b<this.$editables.length;b++)if(this.$editables[b].name===a)return void this.$editables[b].activate();for(b=0;b<this.$editables.length;b++)if(this.$editables[b].error)return void this.$editables[b].activate();this.$editables[0].activate(this.$editables[0].elem[0].selectionStart,this.$editables[0].elem[0].selectionEnd)}},$hide:function(){this.$visible&&(this.$visible=!1,this.$onhide(),angular.forEach(this.$editables,function(a){a.hide()}),e.arrayRemove(f,this))},$cancel:function(){this.$visible&&(this.$oncancel(),angular.forEach(this.$editables,function(a){a.cancel()}),this.$hide())},$setWaiting:function(a){this.$waiting=!!a,angular.forEach(this.$editables,function(b){b.setWaiting(!!a)})},$setError:function(a,b){angular.forEach(this.$editables,function(c){a&&c.name!==a||c.setError(b)})},$submit:function(){function a(a){var b=d();b.when(this.$onbeforesave()),b.then({onWait:angular.bind(this,this.$setWaiting),onTrue:a?angular.bind(this,this.$save):angular.bind(this,this.$hide),onFalse:angular.bind(this,this.$hide),onString:angular.bind(this,this.$activate)})}if(!this.$waiting){this.$setError(null,"");var b=d();angular.forEach(this.$editables,function(a){b.when(a.onbeforesave())}),b.then({onWait:angular.bind(this,this.$setWaiting),onTrue:angular.bind(this,a,!0),onFalse:angular.bind(this,a,!1),onString:angular.bind(this,this.$activate)})}},$save:function(){angular.forEach(this.$editables,function(a){a.save()});var a=d();a.when(this.$onaftersave()),angular.forEach(this.$editables,function(b){a.when(b.onaftersave())}),a.then({onWait:angular.bind(this,this.$setWaiting),onTrue:angular.bind(this,this.$hide),onFalse:angular.bind(this,this.$hide),onString:angular.bind(this,this.$activate)})},$onshow:angular.noop,$oncancel:angular.noop,$onhide:angular.noop,$onbeforesave:angular.noop,$onaftersave:angular.noop};return function(){return angular.extend({$editables:[],$visible:!1,$waiting:!1,$data:{},_clicked:!1,_blur:null},i)}}]),angular.module("xeditable").directive("editableForm",["$rootScope","$parse","editableFormController","editableOptions",function(a,b,c,d){return{restrict:"A",require:["form"],compile:function(){return{pre:function(b,d,e,f){var g,h=f[0];e.editableForm?b[e.editableForm]&&b[e.editableForm].$show?(g=b[e.editableForm],angular.extend(h,g)):(g=c(),b[e.editableForm]=g,angular.extend(g,h)):(g=c(),angular.extend(h,g));var i=a.$$editableBuffer,j=h.$name;j&&i&&i[j]&&(angular.forEach(i[j],function(a){g.$addEditable(a)}),delete i[j])},post:function(a,c,e,f){var g;g=e.editableForm&&a[e.editableForm]&&a[e.editableForm].$show?a[e.editableForm]:f[0],e.onshow&&(g.$onshow=angular.bind(g,b(e.onshow),a)),e.onhide&&(g.$onhide=angular.bind(g,b(e.onhide),a)),e.oncancel&&(g.$oncancel=angular.bind(g,b(e.oncancel),a)),e.shown&&b(e.shown)(a)&&g.$show(),g._blur=e.blur||d.blurForm,e.ngSubmit||e.submit||(e.onbeforesave&&(g.$onbeforesave=function(){return b(e.onbeforesave)(a,{$data:g.$data})}),e.onaftersave&&(g.$onaftersave=function(){return b(e.onaftersave)(a,{$data:g.$data})}),c.bind("submit",function(b){b.preventDefault(),a.$apply(function(){g.$submit()})})),c.bind("click",function(a){a.which&&1!==a.which||g.$visible&&(g._clicked=!0)})}}}}}]),angular.module("xeditable").factory("editablePromiseCollection",["$q",function(a){function b(){return{promises:[],hasFalse:!1,hasString:!1,when:function(b,c){if(b===!1)this.hasFalse=!0;else if(!c&&angular.isObject(b))this.promises.push(a.when(b));else{if(!angular.isString(b))return;this.hasString=!0}},then:function(b){function c(){h.hasString||h.hasFalse?!h.hasString&&h.hasFalse?e():f():d()}b=b||{};var d=b.onTrue||angular.noop,e=b.onFalse||angular.noop,f=b.onString||angular.noop,g=b.onWait||angular.noop,h=this;this.promises.length?(g(!0),a.all(this.promises).then(function(a){g(!1),angular.forEach(a,function(a){h.when(a,!0)}),c()},function(a){g(!1),f()})):c()}}}return b}]),angular.module("xeditable").factory("editableUtils",[function(){return{indexOf:function(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0;c<a.length;c++)if(b===a[c])return c;return-1},arrayRemove:function(a,b){var c=this.indexOf(a,b);return c>=0&&a.splice(c,1),b},camelToDash:function(a){var b=/[A-Z]/g;return a.replace(b,function(a,b){return(b?"-":"")+a.toLowerCase()})},dashToCamel:function(a){var b=/([\:\-\_]+(.))/g,c=/^moz([A-Z])/;return a.replace(b,function(a,b,c,d){return d?c.toUpperCase():c}).replace(c,"Moz$1")}}}]),angular.module("xeditable").factory("editableNgOptionsParser",[function(){function a(a){var c;if(!(c=a.match(b)))throw"ng-options parse error";var d,e=c[2]||c[1],f=c[4]||c[6],g=c[5],h=(c[3]||"",c[2]?c[1]:f),i=c[7],j=c[8],k=j?c[8]:null;return void 0===g?(d=f+" in "+i,void 0!==j&&(d+=" track by "+k)):d="("+g+", "+f+") in "+i,{ngRepeat:d,locals:{valueName:f,keyName:g,valueFn:h,displayFn:e}}}var b=/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;return a}]),angular.module("xeditable").factory("editableCombodate",[function(){function a(a,b){if(this.$element=angular.element(a),"INPUT"!=this.$element[0].nodeName)throw"Combodate should be applied to INPUT element";this.defaults={format:"YYYY-MM-DD HH:mm",template:"D / MMM / YYYY   H : mm",value:null,minYear:1970,maxYear:2015,yearDescending:!0,minuteStep:5,secondStep:1,firstItem:"empty",errorClass:null,customClass:"",roundTime:!0,smartDays:!0},this.options=angular.extend({},this.defaults,b),this.init()}return a.prototype={constructor:a,init:function(){if(this.map={day:["D","date"],month:["M","month"],year:["Y","year"],hour:["[Hh]","hours"],minute:["m","minutes"],second:["s","seconds"],ampm:["[Aa]",""]},this.$widget=angular.element('<span class="combodate"></span>').html(this.getTemplate()),this.initCombos(),this.options.smartDays){var a=this;this.$widget.find("select").bind("change",function(b){(angular.element(b.target).hasClass("month")||angular.element(b.target).hasClass("year"))&&a.fillCombo("day")})}this.$widget.find("select").css("width","auto"),this.$element.css("display","none").after(this.$widget),this.setValue(this.$element.val()||this.options.value)},getTemplate:function(){var a=this.options.template,b=this.options.customClass;return angular.forEach(this.map,function(b,c){b=b[0];var d=new RegExp(b+"+"),e=b.length>1?b.substring(1,2):b;a=a.replace(d,"{"+e+"}")}),a=a.replace(/ /g,"&nbsp;"),angular.forEach(this.map,function(c,d){c=c[0];var e=c.length>1?c.substring(1,2):c;a=a.replace("{"+e+"}",'<select class="'+d+" "+b+'"></select>')}),a},initCombos:function(){for(var a in this.map){var b=this.$widget[0].querySelectorAll("."+a);this["$"+a]=b.length?angular.element(b):null,this.fillCombo(a)}},fillCombo:function(a){var b=this["$"+a];if(b){var c="fill"+a.charAt(0).toUpperCase()+a.slice(1),d=this[c](),e=b.val();b.html("");for(var f=0;f<d.length;f++)b.append('<option value="'+d[f][0]+'">'+d[f][1]+"</option>");b.val(e)}},fillCommon:function(a){var b,c=[];if("name"===this.options.firstItem){b=moment.relativeTime||moment.langData()._relativeTime;var d="function"==typeof b[a]?b[a](1,!0,a,!1):b[a];d=d.split(" ").reverse()[0],c.push(["",d])}else"empty"===this.options.firstItem&&c.push(["",""]);return c},fillDay:function(){var a,b,c=this.fillCommon("d"),d=-1!==this.options.template.indexOf("DD"),e=31;if(this.options.smartDays&&this.$month&&this.$year){var f=parseInt(this.$month.val(),10),g=parseInt(this.$year.val(),10);isNaN(f)||isNaN(g)||(e=moment([g,f]).daysInMonth())}for(b=1;e>=b;b++)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillMonth:function(){var a,b,c=this.fillCommon("M"),d=-1!==this.options.template.indexOf("MMMM"),e=-1!==this.options.template.indexOf("MMM"),f=-1!==this.options.template.indexOf("MM");for(b=0;11>=b;b++)a=d?moment().date(1).month(b).format("MMMM"):e?moment().date(1).month(b).format("MMM"):f?this.leadZero(b+1):b+1,c.push([b,a]);return c},fillYear:function(){var a,b,c=[],d=-1!==this.options.template.indexOf("YYYY");for(b=this.options.maxYear;b>=this.options.minYear;b--)a=d?b:(b+"").substring(2),c[this.options.yearDescending?"push":"unshift"]([b,a]);return c=this.fillCommon("y").concat(c)},fillHour:function(){var a,b,c=this.fillCommon("h"),d=-1!==this.options.template.indexOf("h"),e=(-1!==this.options.template.indexOf("H"),-1!==this.options.template.toLowerCase().indexOf("hh")),f=d?1:0,g=d?12:23;for(b=f;g>=b;b++)a=e?this.leadZero(b):b,c.push([b,a]);return c},fillMinute:function(){var a,b,c=this.fillCommon("m"),d=-1!==this.options.template.indexOf("mm");for(b=0;59>=b;b+=this.options.minuteStep)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillSecond:function(){var a,b,c=this.fillCommon("s"),d=-1!==this.options.template.indexOf("ss");for(b=0;59>=b;b+=this.options.secondStep)a=d?this.leadZero(b):b,c.push([b,a]);return c},fillAmpm:function(){var a=-1!==this.options.template.indexOf("a"),b=(-1!==this.options.template.indexOf("A"),[["am",a?"am":"AM"],["pm",a?"pm":"PM"]]);return b},getValue:function(a){var b,c={},d=this,e=!1;return angular.forEach(this.map,function(a,b){if("ampm"!==b){var f="day"===b?1:0;return c[b]=d["$"+b]?parseInt(d["$"+b].val(),10):f,isNaN(c[b])?(e=!0,!1):void 0}}),e?"":(this.$ampm&&(12===c.hour?c.hour="am"===this.$ampm.val()?0:12:c.hour="am"===this.$ampm.val()?c.hour:c.hour+12),b=moment([c.year,c.month,c.day,c.hour,c.minute,c.second]),this.highlight(b),a=void 0===a?this.options.format:a,null===a?b.isValid()?b:null:b.isValid()?b.format(a):"")},setValue:function(a){function b(a,b){var c={};return angular.forEach(a.children("option"),function(a,d){var e=angular.element(a).attr("value");if(""!==e){var f=Math.abs(e-b);("undefined"==typeof c.distance||f<c.distance)&&(c={value:e,distance:f})}}),c.value}if(a){var c="string"==typeof a?moment(a,this.options.format,!0):moment(a),d=this,e={};c.isValid()&&(angular.forEach(this.map,function(a,b){"ampm"!==b&&(e[b]=c[a[1]]())}),this.$ampm&&(e.hour>=12?(e.ampm="pm",e.hour>12&&(e.hour-=12)):(e.ampm="am",0===e.hour&&(e.hour=12))),angular.forEach(e,function(a,c){d["$"+c]&&("minute"===c&&d.options.minuteStep>1&&d.options.roundTime&&(a=b(d["$"+c],a)),"second"===c&&d.options.secondStep>1&&d.options.roundTime&&(a=b(d["$"+c],a)),d["$"+c].val(a))}),this.options.smartDays&&this.fillCombo("day"),this.$element.val(c.format(this.options.format)).triggerHandler("change"))}},highlight:function(a){a.isValid()?this.options.errorClass?this.$widget.removeClass(this.options.errorClass):this.$widget.find("select").css("border-color",this.borderColor):this.options.errorClass?this.$widget.addClass(this.options.errorClass):(this.borderColor||(this.borderColor=this.$widget.find("select").css("border-color")),this.$widget.find("select").css("border-color","red"))},leadZero:function(a){return 9>=a?"0"+a:a},destroy:function(){this.$widget.remove(),this.$element.removeData("combodate").show()}},{getInstance:function(b,c){return new a(b,c)}}}]),angular.module("xeditable").factory("editableIcons",function(){var a={"default":{bs2:{ok:"icon-ok icon-white",cancel:"icon-remove"},bs3:{ok:"glyphicon glyphicon-ok",cancel:"glyphicon glyphicon-remove"}},external:{"font-awesome":{ok:"fa fa-check",cancel:"fa fa-times"}}};return a}),angular.module("xeditable").factory("editableThemes",function(){var a={"default":{formTpl:'<form class="editable-wrap"></form>',noformTpl:'<span class="editable-wrap"></span>',controlsTpl:'<span class="editable-controls"></span>',inputTpl:"",errorTpl:'<div class="editable-error" ng-show="$error" ng-bind="$error"></div>',buttonsTpl:'<span class="editable-buttons"></span>',submitTpl:'<button type="submit">save</button>',cancelTpl:'<button type="button" ng-click="$form.$cancel()">cancel</button>'},bs2:{formTpl:'<form class="form-inline editable-wrap" role="form"></form>',noformTpl:'<span class="editable-wrap"></span>',controlsTpl:'<div class="editable-controls controls control-group" ng-class="{\'error\': $error}"></div>',inputTpl:"",errorTpl:'<div class="editable-error help-block" ng-show="$error" ng-bind="$error"></div>',buttonsTpl:'<span class="editable-buttons"></span>',submitTpl:'<button type="submit" class="btn btn-primary"><span></span></button>',cancelTpl:'<button type="button" class="btn" ng-click="$form.$cancel()"><span></span></button>'},bs3:{formTpl:'<form class="form-inline editable-wrap" role="form"></form>',noformTpl:'<span class="editable-wrap"></span>',controlsTpl:'<div class="editable-controls form-group" ng-class="{\'has-error\': $error}"></div>',inputTpl:"",errorTpl:'<div class="editable-error help-block" ng-show="$error" ng-bind="$error"></div>',buttonsTpl:'<span class="editable-buttons"></span>',submitTpl:'<button type="submit" class="btn btn-primary"><span></span></button>',cancelTpl:'<button type="button" class="btn btn-default" ng-click="$form.$cancel()"><span></span></button>',buttonsClass:"",inputClass:"",postrender:function(){switch(this.directiveName){case"editableText":case"editableSelect":case"editableTextarea":case"editableEmail":case"editableTel":case"editableNumber":case"editableUrl":case"editableSearch":case"editableDate":case"editableDatetime":case"editableBsdate":case"editableTime":case"editableMonth":case"editableWeek":if(this.inputEl.addClass("form-control"),this.theme.inputClass){if(this.inputEl.attr("multiple")&&("input-sm"===this.theme.inputClass||"input-lg"===this.theme.inputClass))break;this.inputEl.addClass(this.theme.inputClass)}break;case"editableCheckbox":this.editorEl.addClass("checkbox")}this.buttonsEl&&this.theme.buttonsClass&&this.buttonsEl.find("button").addClass(this.theme.buttonsClass)}}};return a}),function(){"use strict";function a(a){function b(b,d){var f,p,q=b==window,r=d&&void 0!==d.message?d.message:void 0;if(d=a.extend({},a.blockUI.defaults,d||{}),!d.ignoreIfBlocked||!a(b).data("blockUI.isBlocked")){if(d.overlayCSS=a.extend({},a.blockUI.defaults.overlayCSS,d.overlayCSS||{}),f=a.extend({},a.blockUI.defaults.css,d.css||{}),d.onOverlayClick&&(d.overlayCSS.cursor="pointer"),p=a.extend({},a.blockUI.defaults.themedCSS,d.themedCSS||{}),r=void 0===r?d.message:r,q&&n&&c(window,{fadeOut:0}),r&&"string"!=typeof r&&(r.parentNode||r.jquery)){var s=r.jquery?r[0]:r,t={};a(b).data("blockUI.history",t),t.el=s,t.parent=s.parentNode,t.display=s.style.display,t.position=s.style.position,t.parent&&t.parent.removeChild(s)}a(b).data("blockUI.onUnblock",d.onUnblock);var u,v,w,x,y=d.baseZ;u=a(k||d.forceIframe?'<iframe class="blockUI" style="z-index:'+y++ +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="'+d.iframeSrc+'"></iframe>':'<div class="blockUI" style="display:none"></div>'),v=a(d.theme?'<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:'+y++ +';display:none"></div>':'<div class="blockUI blockOverlay" style="z-index:'+y++ +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>'),d.theme&&q?(x='<div class="blockUI '+d.blockMsgClass+' blockPage ui-dialog ui-widget ui-corner-all" style="z-index:'+(y+10)+';display:none;position:fixed">',d.title&&(x+='<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(d.title||"&nbsp;")+"</div>"),x+='<div class="ui-widget-content ui-dialog-content"></div>',x+="</div>"):d.theme?(x='<div class="blockUI '+d.blockMsgClass+' blockElement ui-dialog ui-widget ui-corner-all" style="z-index:'+(y+10)+';display:none;position:absolute">',d.title&&(x+='<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(d.title||"&nbsp;")+"</div>"),x+='<div class="ui-widget-content ui-dialog-content"></div>',x+="</div>"):x=q?'<div class="blockUI '+d.blockMsgClass+' blockPage" style="z-index:'+(y+10)+';display:none;position:fixed"></div>':'<div class="blockUI '+d.blockMsgClass+' blockElement" style="z-index:'+(y+10)+';display:none;position:absolute"></div>',w=a(x),r&&(d.theme?(w.css(p),w.addClass("ui-widget-content")):w.css(f)),d.theme||v.css(d.overlayCSS),v.css("position",q?"fixed":"absolute"),(k||d.forceIframe)&&u.css("opacity",0);var z=[u,v,w],A=a(q?"body":b);a.each(z,function(){this.appendTo(A)}),d.theme&&d.draggable&&a.fn.draggable&&w.draggable({handle:".ui-dialog-titlebar",cancel:"li"});var B=m&&(!a.support.boxModel||a("object,embed",q?null:b).length>0);if(l||B){if(q&&d.allowBodyStretch&&a.support.boxModel&&a("html,body").css("height","100%"),(l||!a.support.boxModel)&&!q)var C=i(b,"borderTopWidth"),D=i(b,"borderLeftWidth"),E=C?"(0 - "+C+")":0,F=D?"(0 - "+D+")":0;a.each(z,function(a,b){var c=b[0].style;if(c.position="absolute",2>a)q?c.setExpression("height","Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:"+d.quirksmodeOffsetHack+') + "px"'):c.setExpression("height",'this.parentNode.offsetHeight + "px"'),q?c.setExpression("width",'jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"'):c.setExpression("width",'this.parentNode.offsetWidth + "px"'),F&&c.setExpression("left",F),E&&c.setExpression("top",E);else if(d.centerY)q&&c.setExpression("top",'(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"'),c.marginTop=0;else if(!d.centerY&&q){var e=d.css&&d.css.top?parseInt(d.css.top,10):0,f="((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "+e+') + "px"';c.setExpression("top",f)}})}if(r&&(d.theme?w.find(".ui-widget-content").append(r):w.append(r),(r.jquery||r.nodeType)&&a(r).show()),(k||d.forceIframe)&&d.showOverlay&&u.show(),d.fadeIn){var G=d.onBlock?d.onBlock:j,H=d.showOverlay&&!r?G:j,I=r?G:j;d.showOverlay&&v._fadeIn(d.fadeIn,H),r&&w._fadeIn(d.fadeIn,I)}else d.showOverlay&&v.show(),r&&w.show(),d.onBlock&&d.onBlock.bind(w)();if(e(1,b,d),q?(n=w[0],o=a(d.focusableElements,n),d.focusInput&&setTimeout(g,20)):h(w[0],d.centerX,d.centerY),d.timeout){var J=setTimeout(function(){q?a.unblockUI(d):a(b).unblock(d)},d.timeout);a(b).data("blockUI.timeout",J)}}}function c(b,c){var f,g=b==window,h=a(b),i=h.data("blockUI.history"),j=h.data("blockUI.timeout");j&&(clearTimeout(j),h.removeData("blockUI.timeout")),c=a.extend({},a.blockUI.defaults,c||{}),e(0,b,c),null===c.onUnblock&&(c.onUnblock=h.data("blockUI.onUnblock"),h.removeData("blockUI.onUnblock"));var k;k=g?a("body").children().filter(".blockUI").add("body > .blockUI"):h.find(">.blockUI"),
+c.cursorReset&&(k.length>1&&(k[1].style.cursor=c.cursorReset),k.length>2&&(k[2].style.cursor=c.cursorReset)),g&&(n=o=null),c.fadeOut?(f=k.length,k.stop().fadeOut(c.fadeOut,function(){0===--f&&d(k,i,c,b)})):d(k,i,c,b)}function d(b,c,d,e){var f=a(e);if(!f.data("blockUI.isBlocked")){b.each(function(a,b){this.parentNode&&this.parentNode.removeChild(this)}),c&&c.el&&(c.el.style.display=c.display,c.el.style.position=c.position,c.el.style.cursor="default",c.parent&&c.parent.appendChild(c.el),f.removeData("blockUI.history")),f.data("blockUI.static")&&f.css("position","static"),"function"==typeof d.onUnblock&&d.onUnblock(e,d);var g=a(document.body),h=g.width(),i=g[0].style.width;g.width(h-1).width(h),g[0].style.width=i}}function e(b,c,d){var e=c==window,g=a(c);if((b||(!e||n)&&(e||g.data("blockUI.isBlocked")))&&(g.data("blockUI.isBlocked",b),e&&d.bindEvents&&(!b||d.showOverlay))){var h="mousedown mouseup keydown keypress keyup touchstart touchend touchmove";b?a(document).bind(h,d,f):a(document).unbind(h,f)}}function f(b){if("keydown"===b.type&&b.keyCode&&9==b.keyCode&&n&&b.data.constrainTabKey){var c=o,d=!b.shiftKey&&b.target===c[c.length-1],e=b.shiftKey&&b.target===c[0];if(d||e)return setTimeout(function(){g(e)},10),!1}var f=b.data,h=a(b.target);return h.hasClass("blockOverlay")&&f.onOverlayClick&&f.onOverlayClick(b),h.parents("div."+f.blockMsgClass).length>0?!0:0===h.parents().children().filter("div.blockUI").length}function g(a){if(o){var b=o[a===!0?o.length-1:0];b&&b.focus()}}function h(a,b,c){var d=a.parentNode,e=a.style,f=(d.offsetWidth-a.offsetWidth)/2-i(d,"borderLeftWidth"),g=(d.offsetHeight-a.offsetHeight)/2-i(d,"borderTopWidth");b&&(e.left=f>0?f+"px":"0"),c&&(e.top=g>0?g+"px":"0")}function i(b,c){return parseInt(a.css(b,c),10)||0}a.fn._fadeIn=a.fn.fadeIn;var j=a.noop||function(){},k=/MSIE/.test(navigator.userAgent),l=/MSIE 6.0/.test(navigator.userAgent)&&!/MSIE 8.0/.test(navigator.userAgent),m=(document.documentMode||0,a.isFunction(document.createElement("div").style.setExpression));a.blockUI=function(a){b(window,a)},a.unblockUI=function(a){c(window,a)},a.growlUI=function(b,c,d,e){var f=a('<div class="growlUI"></div>');b&&f.append("<h1>"+b+"</h1>"),c&&f.append("<h2>"+c+"</h2>"),void 0===d&&(d=3e3);var g=function(b){b=b||{},a.blockUI({message:f,fadeIn:"undefined"!=typeof b.fadeIn?b.fadeIn:700,fadeOut:"undefined"!=typeof b.fadeOut?b.fadeOut:1e3,timeout:"undefined"!=typeof b.timeout?b.timeout:d,centerY:!1,showOverlay:!1,onUnblock:e,css:a.blockUI.defaults.growlCSS})};g();f.css("opacity");f.mouseover(function(){g({fadeIn:0,timeout:3e4});var b=a(".blockMsg");b.stop(),b.fadeTo(300,1)}).mouseout(function(){a(".blockMsg").fadeOut(1e3)})},a.fn.block=function(c){if(this[0]===window)return a.blockUI(c),this;var d=a.extend({},a.blockUI.defaults,c||{});return this.each(function(){var b=a(this);d.ignoreIfBlocked&&b.data("blockUI.isBlocked")||b.unblock({fadeOut:0})}),this.each(function(){"static"==a.css(this,"position")&&(this.style.position="relative",a(this).data("blockUI.static",!0)),this.style.zoom=1,b(this,c)})},a.fn.unblock=function(b){return this[0]===window?(a.unblockUI(b),this):this.each(function(){c(this,b)})},a.blockUI.version=2.7,a.blockUI.defaults={message:"<h1>Please wait...</h1>",title:null,draggable:!0,theme:!1,css:{padding:0,margin:0,width:"30%",top:"40%",left:"35%",textAlign:"center",color:"#000",border:"3px solid #aaa",backgroundColor:"#fff",cursor:"wait"},themedCSS:{width:"30%",top:"40%",left:"35%"},overlayCSS:{backgroundColor:"#000",opacity:.6,cursor:"wait"},cursorReset:"default",growlCSS:{width:"350px",top:"10px",left:"",right:"10px",border:"none",padding:"5px",opacity:.6,cursor:"default",color:"#fff",backgroundColor:"#000","-webkit-border-radius":"10px","-moz-border-radius":"10px","border-radius":"10px"},iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank",forceIframe:!1,baseZ:1e3,centerX:!0,centerY:!0,allowBodyStretch:!0,bindEvents:!0,constrainTabKey:!0,fadeIn:200,fadeOut:400,timeout:0,showOverlay:!0,focusInput:!0,focusableElements:":input:enabled:visible",onBlock:null,onUnblock:null,onOverlayClick:null,quirksmodeOffsetHack:4,blockMsgClass:"blockMsg",ignoreIfBlocked:!1};var n=null,o=[]}"function"==typeof define&&define.amd&&define.amd.jQuery?define(["jquery"],a):a(jQuery)}(),function(a,b,c){var d=a();a.fn.dropdownHover=function(c){return"ontouchstart"in document?this:(d=d.add(this.parent()),this.each(function(){function e(a){b.clearTimeout(f),b.clearTimeout(g),g=b.setTimeout(function(){d.find(":focus").blur(),n.instantlyCloseOthers===!0&&d.removeClass("open"),b.clearTimeout(g),h.attr("aria-expanded","true"),i.addClass("open"),h.trigger(l)},n.hoverDelay)}var f,g,h=a(this),i=h.parent(),j={delay:500,hoverDelay:0,instantlyCloseOthers:!0},k={delay:a(this).data("delay"),hoverDelay:a(this).data("hover-delay"),instantlyCloseOthers:a(this).data("close-others")},l="show.bs.dropdown",m="hide.bs.dropdown",n=a.extend(!0,{},j,c,k);i.hover(function(a){return i.hasClass("open")||h.is(a.target)?void e(a):!0},function(){b.clearTimeout(g),f=b.setTimeout(function(){h.attr("aria-expanded","false"),i.removeClass("open"),h.trigger(m)},n.delay)}),h.hover(function(a){return i.hasClass("open")||i.is(a.target)?void e(a):!0}),i.find(".dropdown-submenu").each(function(){var c,d=a(this);d.hover(function(){b.clearTimeout(c),d.children(".dropdown-menu").show(),d.siblings().children(".dropdown-menu").hide()},function(){var a=d.children(".dropdown-menu");c=b.setTimeout(function(){a.hide()},n.delay)})})}))},a(document).ready(function(){a('[data-hover="dropdown"]').dropdownHover()})}(jQuery,window),function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){!function(a){"use strict";function b(b){var c=[{re:/[\xC0-\xC6]/g,ch:"A"},{re:/[\xE0-\xE6]/g,ch:"a"},{re:/[\xC8-\xCB]/g,ch:"E"},{re:/[\xE8-\xEB]/g,ch:"e"},{re:/[\xCC-\xCF]/g,ch:"I"},{re:/[\xEC-\xEF]/g,ch:"i"},{re:/[\xD2-\xD6]/g,ch:"O"},{re:/[\xF2-\xF6]/g,ch:"o"},{re:/[\xD9-\xDC]/g,ch:"U"},{re:/[\xF9-\xFC]/g,ch:"u"},{re:/[\xC7-\xE7]/g,ch:"c"},{re:/[\xD1]/g,ch:"N"},{re:/[\xF1]/g,ch:"n"}];return a.each(c,function(){b=b.replace(this.re,this.ch)}),b}function c(a){var b={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},c="(?:"+Object.keys(b).join("|")+")",d=new RegExp(c),e=new RegExp(c,"g"),f=null==a?"":""+a;return d.test(f)?f.replace(e,function(a){return b[a]}):f}function d(b,c){var d=arguments,f=b,g=c;[].shift.apply(d);var h,i=this.each(function(){var b=a(this);if(b.is("select")){var c=b.data("selectpicker"),i="object"==typeof f&&f;if(c){if(i)for(var j in i)i.hasOwnProperty(j)&&(c.options[j]=i[j])}else{var k=a.extend({},e.DEFAULTS,a.fn.selectpicker.defaults||{},b.data(),i);k.template=a.extend({},e.DEFAULTS.template,a.fn.selectpicker.defaults?a.fn.selectpicker.defaults.template:{},b.data().template,i.template),b.data("selectpicker",c=new e(this,k,g))}"string"==typeof f&&(h=c[f]instanceof Function?c[f].apply(c,d):c.options[f])}});return"undefined"!=typeof h?h:i}String.prototype.includes||!function(){var a={}.toString,b=function(){try{var a={},b=Object.defineProperty,c=b(a,a,a)&&b}catch(d){}return c}(),c="".indexOf,d=function(b){if(null==this)throw new TypeError;var d=String(this);if(b&&"[object RegExp]"==a.call(b))throw new TypeError;var e=d.length,f=String(b),g=f.length,h=arguments.length>1?arguments[1]:void 0,i=h?Number(h):0;i!=i&&(i=0);var j=Math.min(Math.max(i,0),e);return g+j>e?!1:-1!=c.call(d,f,i)};b?b(String.prototype,"includes",{value:d,configurable:!0,writable:!0}):String.prototype.includes=d}(),String.prototype.startsWith||!function(){var a=function(){try{var a={},b=Object.defineProperty,c=b(a,a,a)&&b}catch(d){}return c}(),b={}.toString,c=function(a){if(null==this)throw new TypeError;var c=String(this);if(a&&"[object RegExp]"==b.call(a))throw new TypeError;var d=c.length,e=String(a),f=e.length,g=arguments.length>1?arguments[1]:void 0,h=g?Number(g):0;h!=h&&(h=0);var i=Math.min(Math.max(h,0),d);if(f+i>d)return!1;for(var j=-1;++j<f;)if(c.charCodeAt(i+j)!=e.charCodeAt(j))return!1;return!0};a?a(String.prototype,"startsWith",{value:c,configurable:!0,writable:!0}):String.prototype.startsWith=c}(),Object.keys||(Object.keys=function(a,b,c){c=[];for(b in a)c.hasOwnProperty.call(a,b)&&c.push(b);return c}),a.fn.triggerNative=function(a){var b,c=this[0];c.dispatchEvent?("function"==typeof Event?b=new Event(a,{bubbles:!0}):(b=document.createEvent("Event"),b.initEvent(a,!0,!1)),c.dispatchEvent(b)):(c.fireEvent&&(b=document.createEventObject(),b.eventType=a,c.fireEvent("on"+a,b)),this.trigger(a))},a.expr[":"].icontains=function(b,c,d){var e=a(b),f=(e.data("tokens")||e.text()).toUpperCase();return f.includes(d[3].toUpperCase())},a.expr[":"].ibegins=function(b,c,d){var e=a(b),f=(e.data("tokens")||e.text()).toUpperCase();return f.startsWith(d[3].toUpperCase())},a.expr[":"].aicontains=function(b,c,d){var e=a(b),f=(e.data("tokens")||e.data("normalizedText")||e.text()).toUpperCase();return f.includes(d[3].toUpperCase())},a.expr[":"].aibegins=function(b,c,d){var e=a(b),f=(e.data("tokens")||e.data("normalizedText")||e.text()).toUpperCase();return f.startsWith(d[3].toUpperCase())};var e=function(b,c,d){d&&(d.stopPropagation(),d.preventDefault()),this.$element=a(b),this.$newElement=null,this.$button=null,this.$menu=null,this.$lis=null,this.options=c,null===this.options.title&&(this.options.title=this.$element.attr("title")),this.val=e.prototype.val,this.render=e.prototype.render,this.refresh=e.prototype.refresh,this.setStyle=e.prototype.setStyle,this.selectAll=e.prototype.selectAll,this.deselectAll=e.prototype.deselectAll,this.destroy=e.prototype.remove,this.remove=e.prototype.remove,this.show=e.prototype.show,this.hide=e.prototype.hide,this.init()};e.VERSION="1.7.5",e.DEFAULTS={noneSelectedText:"Nothing selected",noneResultsText:"No results matched {0}",countSelectedText:function(a,b){return 1==a?"{0} item selected":"{0} items selected"},maxOptionsText:function(a,b){return[1==a?"Limit reached ({n} item max)":"Limit reached ({n} items max)",1==b?"Group limit reached ({n} item max)":"Group limit reached ({n} items max)"]},selectAllText:"Select All",deselectAllText:"Deselect All",doneButton:!1,doneButtonText:"Close",multipleSeparator:", ",styleBase:"btn",style:"btn-default",size:"auto",title:null,selectedTextFormat:"values",width:!1,container:!1,hideDisabled:!1,showSubtext:!1,showIcon:!0,showContent:!0,dropupAuto:!0,header:!1,liveSearch:!1,liveSearchPlaceholder:null,liveSearchNormalize:!1,liveSearchStyle:"contains",actionsBox:!1,iconBase:"glyphicon",tickIcon:"glyphicon-ok",template:{caret:'<span class="caret"></span>'},maxOptions:!1,mobile:!1,selectOnTab:!1,dropdownAlignRight:!1},e.prototype={constructor:e,init:function(){var b=this,c=this.$element.attr("id");this.$element.addClass("bs-select-hidden"),this.liObj={},this.multiple=this.$element.prop("multiple"),this.autofocus=this.$element.prop("autofocus"),this.$newElement=this.createView(),this.$element.after(this.$newElement),this.$button=this.$newElement.children("button"),this.$menu=this.$newElement.children(".dropdown-menu"),this.$menuInner=this.$menu.children(".inner"),this.$searchbox=this.$menu.find("input"),this.options.dropdownAlignRight&&this.$menu.addClass("dropdown-menu-right"),"undefined"!=typeof c&&(this.$button.attr("data-id",c),a('label[for="'+c+'"]').click(function(a){a.preventDefault(),b.$button.focus()})),this.checkDisabled(),this.clickListener(),this.options.liveSearch&&this.liveSearchListener(),this.render(),this.setStyle(),this.setWidth(),this.options.container&&this.selectPosition(),this.$menu.data("this",this),this.$newElement.data("this",this),this.options.mobile&&this.mobile(),this.$newElement.on({"hide.bs.dropdown":function(a){b.$element.trigger("hide.bs.select",a)},"hidden.bs.dropdown":function(a){b.$element.trigger("hidden.bs.select",a)},"show.bs.dropdown":function(a){b.$element.trigger("show.bs.select",a)},"shown.bs.dropdown":function(a){b.$element.trigger("shown.bs.select",a)}}),setTimeout(function(){b.$element.trigger("loaded.bs.select")})},createDropdown:function(){var b=this.multiple?" show-tick":"",d=this.$element.parent().hasClass("input-group")?" input-group-btn":"",e=this.autofocus?" autofocus":"",f=this.options.header?'<div class="popover-title"><button type="button" class="close" aria-hidden="true">&times;</button>'+this.options.header+"</div>":"",g=this.options.liveSearch?'<div class="bs-searchbox"><input type="text" class="form-control" autocomplete="off"'+(null===this.options.liveSearchPlaceholder?"":' placeholder="'+c(this.options.liveSearchPlaceholder)+'"')+"></div>":"",h=this.multiple&&this.options.actionsBox?'<div class="bs-actionsbox"><div class="btn-group btn-group-sm btn-block"><button type="button" class="actions-btn bs-select-all btn btn-default">'+this.options.selectAllText+'</button><button type="button" class="actions-btn bs-deselect-all btn btn-default">'+this.options.deselectAllText+"</button></div></div>":"",i=this.multiple&&this.options.doneButton?'<div class="bs-donebutton"><div class="btn-group btn-block"><button type="button" class="btn btn-sm btn-default">'+this.options.doneButtonText+"</button></div></div>":"",j='<div class="btn-group bootstrap-select'+b+d+'"><button type="button" class="'+this.options.styleBase+' dropdown-toggle" data-toggle="dropdown"'+e+'><span class="filter-option pull-left"></span>&nbsp;<span class="bs-caret">'+this.options.template.caret+'</span></button><div class="dropdown-menu open">'+f+g+h+'<ul class="dropdown-menu inner" role="menu"></ul>'+i+"</div></div>";return a(j)},createView:function(){var a=this.createDropdown(),b=this.createLi();return a.find("ul")[0].innerHTML=b,a},reloadLi:function(){this.destroyLi();var a=this.createLi();this.$menuInner[0].innerHTML=a},destroyLi:function(){this.$menu.find("li").remove()},createLi:function(){var d=this,e=[],f=0,g=document.createElement("option"),h=-1,i=function(a,b,c,d){return"<li"+("undefined"!=typeof c&""!==c?' class="'+c+'"':"")+("undefined"!=typeof b&null!==b?' data-original-index="'+b+'"':"")+("undefined"!=typeof d&null!==d?'data-optgroup="'+d+'"':"")+">"+a+"</li>"},j=function(a,e,f,g){return'<a tabindex="0"'+("undefined"!=typeof e?' class="'+e+'"':"")+("undefined"!=typeof f?' style="'+f+'"':"")+(d.options.liveSearchNormalize?' data-normalized-text="'+b(c(a))+'"':"")+("undefined"!=typeof g||null!==g?' data-tokens="'+g+'"':"")+">"+a+'<span class="'+d.options.iconBase+" "+d.options.tickIcon+' check-mark"></span></a>'};if(this.options.title&&!this.multiple&&(h--,!this.$element.find(".bs-title-option").length)){var k=this.$element[0];g.className="bs-title-option",g.appendChild(document.createTextNode(this.options.title)),g.value="",k.insertBefore(g,k.firstChild),void 0===a(k.options[k.selectedIndex]).attr("selected")&&(g.selected=!0)}return this.$element.find("option").each(function(b){var c=a(this);if(h++,!c.hasClass("bs-title-option")){var g=this.className||"",k=this.style.cssText,l=c.data("content")?c.data("content"):c.html(),m=c.data("tokens")?c.data("tokens"):null,n="undefined"!=typeof c.data("subtext")?'<small class="text-muted">'+c.data("subtext")+"</small>":"",o="undefined"!=typeof c.data("icon")?'<span class="'+d.options.iconBase+" "+c.data("icon")+'"></span> ':"",p=this.disabled||"OPTGROUP"===this.parentNode.tagName&&this.parentNode.disabled;if(""!==o&&p&&(o="<span>"+o+"</span>"),d.options.hideDisabled&&p)return void h--;if(c.data("content")||(l=o+'<span class="text">'+l+n+"</span>"),"OPTGROUP"===this.parentNode.tagName&&c.data("divider")!==!0){var q=" "+this.parentNode.className||"";if(0===c.index()){f+=1;var r=this.parentNode.label,s="undefined"!=typeof c.parent().data("subtext")?'<small class="text-muted">'+c.parent().data("subtext")+"</small>":"",t=c.parent().data("icon")?'<span class="'+d.options.iconBase+" "+c.parent().data("icon")+'"></span> ':"";r=t+'<span class="text">'+r+s+"</span>",0!==b&&e.length>0&&(h++,e.push(i("",null,"divider",f+"div"))),h++,e.push(i(r,null,"dropdown-header"+q,f))}e.push(i(j(l,"opt "+g+q,k,m),b,"",f))}else c.data("divider")===!0?e.push(i("",b,"divider")):c.data("hidden")===!0?e.push(i(j(l,g,k,m),b,"hidden is-hidden")):(this.previousElementSibling&&"OPTGROUP"===this.previousElementSibling.tagName&&(h++,e.push(i("",null,"divider",f+"div"))),e.push(i(j(l,g,k,m),b)));d.liObj[b]=h}}),this.multiple||0!==this.$element.find("option:selected").length||this.options.title||this.$element.find("option").eq(0).prop("selected",!0).attr("selected","selected"),e.join("")},findLis:function(){return null==this.$lis&&(this.$lis=this.$menu.find("li")),this.$lis},render:function(b){var c,d=this;b!==!1&&this.$element.find("option").each(function(a){var b=d.findLis().eq(d.liObj[a]);d.setDisabled(a,this.disabled||"OPTGROUP"===this.parentNode.tagName&&this.parentNode.disabled,b),d.setSelected(a,this.selected,b)}),this.tabIndex();var e=this.$element.find("option").map(function(){if(this.selected){if(d.options.hideDisabled&&(this.disabled||"OPTGROUP"===this.parentNode.tagName&&this.parentNode.disabled))return;var b,c=a(this),e=c.data("icon")&&d.options.showIcon?'<i class="'+d.options.iconBase+" "+c.data("icon")+'"></i> ':"";return b=d.options.showSubtext&&c.data("subtext")&&!d.multiple?' <small class="text-muted">'+c.data("subtext")+"</small>":"","undefined"!=typeof c.attr("title")?c.attr("title"):c.data("content")&&d.options.showContent?c.data("content"):e+c.html()+b}}).toArray(),f=this.multiple?e.join(this.options.multipleSeparator):e[0];if(this.multiple&&this.options.selectedTextFormat.indexOf("count")>-1){var g=this.options.selectedTextFormat.split(">");if(g.length>1&&e.length>g[1]||1==g.length&&e.length>=2){c=this.options.hideDisabled?", [disabled]":"";var h=this.$element.find("option").not('[data-divider="true"], [data-hidden="true"]'+c).length,i="function"==typeof this.options.countSelectedText?this.options.countSelectedText(e.length,h):this.options.countSelectedText;f=i.replace("{0}",e.length.toString()).replace("{1}",h.toString())}}void 0==this.options.title&&(this.options.title=this.$element.attr("title")),"static"==this.options.selectedTextFormat&&(f=this.options.title),f||(f="undefined"!=typeof this.options.title?this.options.title:this.options.noneSelectedText),this.$button.attr("title",a.trim(f.replace(/<[^>]*>?/g,""))),this.$button.children(".filter-option").html(f),this.$element.trigger("rendered.bs.select")},setStyle:function(a,b){this.$element.attr("class")&&this.$newElement.addClass(this.$element.attr("class").replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi,""));var c=a?a:this.options.style;"add"==b?this.$button.addClass(c):"remove"==b?this.$button.removeClass(c):(this.$button.removeClass(this.options.style),this.$button.addClass(c))},liHeight:function(b){if(b||this.options.size!==!1&&!this.sizeInfo){var c=document.createElement("div"),d=document.createElement("div"),e=document.createElement("ul"),f=document.createElement("li"),g=document.createElement("li"),h=document.createElement("a"),i=document.createElement("span"),j=this.options.header?this.$menu.find(".popover-title")[0].cloneNode(!0):null,k=this.options.liveSearch?document.createElement("div"):null,l=this.options.actionsBox&&this.multiple?this.$menu.find(".bs-actionsbox")[0].cloneNode(!0):null,m=this.options.doneButton&&this.multiple?this.$menu.find(".bs-donebutton")[0].cloneNode(!0):null;if(i.className="text",c.className=this.$menu[0].parentNode.className+" open",d.className="dropdown-menu open",e.className="dropdown-menu inner",f.className="divider",i.appendChild(document.createTextNode("Inner text")),h.appendChild(i),g.appendChild(h),e.appendChild(g),e.appendChild(f),j&&d.appendChild(j),k){var n=document.createElement("span");k.className="bs-searchbox",n.className="form-control",k.appendChild(n),d.appendChild(k)}l&&d.appendChild(l),d.appendChild(e),m&&d.appendChild(m),c.appendChild(d),document.body.appendChild(c);var o=h.offsetHeight,p=j?j.offsetHeight:0,q=k?k.offsetHeight:0,r=l?l.offsetHeight:0,s=m?m.offsetHeight:0,t=a(f).outerHeight(!0),u="function"==typeof getComputedStyle?getComputedStyle(d):!1,v=u?null:a(d),w=parseInt(u?u.paddingTop:v.css("paddingTop"))+parseInt(u?u.paddingBottom:v.css("paddingBottom"))+parseInt(u?u.borderTopWidth:v.css("borderTopWidth"))+parseInt(u?u.borderBottomWidth:v.css("borderBottomWidth")),x=w+parseInt(u?u.marginTop:v.css("marginTop"))+parseInt(u?u.marginBottom:v.css("marginBottom"))+2;document.body.removeChild(c),this.sizeInfo={liHeight:o,headerHeight:p,searchHeight:q,actionsHeight:r,doneButtonHeight:s,dividerHeight:t,menuPadding:w,menuExtras:x}}},setSize:function(){if(this.findLis(),this.liHeight(),this.options.header&&this.$menu.css("padding-top",0),this.options.size!==!1){var b,c,d,e,f=this,g=this.$menu,h=this.$menuInner,i=a(window),j=this.$newElement[0].offsetHeight,k=this.sizeInfo.liHeight,l=this.sizeInfo.headerHeight,m=this.sizeInfo.searchHeight,n=this.sizeInfo.actionsHeight,o=this.sizeInfo.doneButtonHeight,p=this.sizeInfo.dividerHeight,q=this.sizeInfo.menuPadding,r=this.sizeInfo.menuExtras,s=this.options.hideDisabled?".disabled":"",t=function(){d=f.$newElement.offset().top-i.scrollTop(),e=i.height()-d-j};if(t(),"auto"===this.options.size){var u=function(){var i,j=function(b,c){return function(d){return c?d.classList?d.classList.contains(b):a(d).hasClass(b):!(d.classList?d.classList.contains(b):a(d).hasClass(b))}},p=f.$menuInner[0].getElementsByTagName("li"),s=Array.prototype.filter?Array.prototype.filter.call(p,j("hidden",!1)):f.$lis.not(".hidden"),u=Array.prototype.filter?Array.prototype.filter.call(s,j("dropdown-header",!0)):s.filter(".dropdown-header");t(),b=e-r,f.options.container?(g.data("height")||g.data("height",g.height()),c=g.data("height")):c=g.height(),f.options.dropupAuto&&f.$newElement.toggleClass("dropup",d>e&&c>b-r),f.$newElement.hasClass("dropup")&&(b=d-r),i=s.length+u.length>3?3*k+r-2:0,g.css({"max-height":b+"px",overflow:"hidden","min-height":i+l+m+n+o+"px"}),h.css({"max-height":b-l-m-n-o-q+"px","overflow-y":"auto","min-height":Math.max(i-q,0)+"px"})};u(),this.$searchbox.off("input.getSize propertychange.getSize").on("input.getSize propertychange.getSize",u),i.off("resize.getSize scroll.getSize").on("resize.getSize scroll.getSize",u)}else if(this.options.size&&"auto"!=this.options.size&&this.$lis.not(s).length>this.options.size){var v=this.$lis.not(".divider").not(s).children().slice(0,this.options.size).last().parent().index(),w=this.$lis.slice(0,v+1).filter(".divider").length;b=k*this.options.size+w*p+q,f.options.container?(g.data("height")||g.data("height",g.height()),c=g.data("height")):c=g.height(),f.options.dropupAuto&&this.$newElement.toggleClass("dropup",d>e&&c>b-r),g.css({"max-height":b+l+m+n+o+"px",overflow:"hidden","min-height":""}),h.css({"max-height":b-q+"px","overflow-y":"auto","min-height":""})}}},setWidth:function(){if("auto"===this.options.width){this.$menu.css("min-width","0");var a=this.$menu.parent().clone().appendTo("body"),b=this.options.container?this.$newElement.clone().appendTo("body"):a,c=a.children(".dropdown-menu").outerWidth(),d=b.css("width","auto").children("button").outerWidth();a.remove(),b.remove(),this.$newElement.css("width",Math.max(c,d)+"px")}else"fit"===this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width","").addClass("fit-width")):this.options.width?(this.$menu.css("min-width",""),this.$newElement.css("width",this.options.width)):(this.$menu.css("min-width",""),this.$newElement.css("width",""));this.$newElement.hasClass("fit-width")&&"fit"!==this.options.width&&this.$newElement.removeClass("fit-width")},selectPosition:function(){var b,c,d=this,e=a('<div class="bs-container" />'),f=function(a){e.addClass(a.attr("class").replace(/form-control|fit-width/gi,"")).toggleClass("dropup",a.hasClass("dropup")),b=a.offset(),c=a.hasClass("dropup")?0:a[0].offsetHeight,e.css({top:b.top+c,left:b.left,width:a[0].offsetWidth})};this.$newElement.on("click",function(){d.isDisabled()||(f(a(this)),e.appendTo(d.options.container),e.toggleClass("open",!a(this).hasClass("open")),e.append(d.$menu))}),a(window).on("resize scroll",function(){f(d.$newElement)}),this.$element.on("hide.bs.select",function(){d.$menu.data("height",d.$menu.height()),e.detach()})},setSelected:function(a,b,c){c||(c=this.findLis().eq(this.liObj[a])),c.toggleClass("selected",b)},setDisabled:function(a,b,c){c||(c=this.findLis().eq(this.liObj[a])),b?c.addClass("disabled").children("a").attr("href","#").attr("tabindex",-1):c.removeClass("disabled").children("a").removeAttr("href").attr("tabindex",0)},isDisabled:function(){return this.$element[0].disabled},checkDisabled:function(){var a=this;this.isDisabled()?(this.$newElement.addClass("disabled"),this.$button.addClass("disabled").attr("tabindex",-1)):(this.$button.hasClass("disabled")&&(this.$newElement.removeClass("disabled"),this.$button.removeClass("disabled")),-1!=this.$button.attr("tabindex")||this.$element.data("tabindex")||this.$button.removeAttr("tabindex")),this.$button.click(function(){return!a.isDisabled()})},tabIndex:function(){this.$element.is("[tabindex]")&&(this.$element.data("tabindex",this.$element.attr("tabindex")),this.$button.attr("tabindex",this.$element.data("tabindex")))},clickListener:function(){var b=this,c=a(document);this.$newElement.on("touchstart.dropdown",".dropdown-menu",function(a){a.stopPropagation()}),c.data("spaceSelect",!1),this.$button.on("keyup",function(a){/(32)/.test(a.keyCode.toString(10))&&c.data("spaceSelect")&&(a.preventDefault(),c.data("spaceSelect",!1))}),this.$newElement.on("click",function(){b.setSize(),b.$element.on("shown.bs.select",function(){if(b.options.liveSearch||b.multiple){if(!b.multiple){var a=b.liObj[b.$element[0].selectedIndex];if("number"!=typeof a||b.options.size===!1)return;var c=b.$lis.eq(a)[0].offsetTop-b.$menuInner[0].offsetTop;c=c-b.$menuInner[0].offsetHeight/2+b.sizeInfo.liHeight/2,b.$menuInner[0].scrollTop=c}}else b.$menuInner.find(".selected a").focus()})}),this.$menuInner.on("click","li a",function(c){var d=a(this),e=d.parent().data("originalIndex"),f=b.$element.val(),g=b.$element.prop("selectedIndex");if(b.multiple&&c.stopPropagation(),c.preventDefault(),!b.isDisabled()&&!d.parent().hasClass("disabled")){var h=b.$element.find("option"),i=h.eq(e),j=i.prop("selected"),k=i.parent("optgroup"),l=b.options.maxOptions,m=k.data("maxOptions")||!1;if(b.multiple){if(i.prop("selected",!j),b.setSelected(e,!j),d.blur(),l!==!1||m!==!1){var n=l<h.filter(":selected").length,o=m<k.find("option:selected").length;if(l&&n||m&&o)if(l&&1==l)h.prop("selected",!1),i.prop("selected",!0),b.$menuInner.find(".selected").removeClass("selected"),b.setSelected(e,!0);else if(m&&1==m){k.find("option:selected").prop("selected",!1),i.prop("selected",!0);var p=d.parent().data("optgroup");b.$menuInner.find('[data-optgroup="'+p+'"]').removeClass("selected"),b.setSelected(e,!0)}else{var q="function"==typeof b.options.maxOptionsText?b.options.maxOptionsText(l,m):b.options.maxOptionsText,r=q[0].replace("{n}",l),s=q[1].replace("{n}",m),t=a('<div class="notify"></div>');q[2]&&(r=r.replace("{var}",q[2][l>1?0:1]),s=s.replace("{var}",q[2][m>1?0:1])),i.prop("selected",!1),b.$menu.append(t),l&&n&&(t.append(a("<div>"+r+"</div>")),b.$element.trigger("maxReached.bs.select")),m&&o&&(t.append(a("<div>"+s+"</div>")),b.$element.trigger("maxReachedGrp.bs.select")),setTimeout(function(){b.setSelected(e,!1)},10),t.delay(750).fadeOut(300,function(){a(this).remove()})}}}else h.prop("selected",!1),i.prop("selected",!0),b.$menuInner.find(".selected").removeClass("selected"),b.setSelected(e,!0);b.multiple?b.options.liveSearch&&b.$searchbox.focus():b.$button.focus(),(f!=b.$element.val()&&b.multiple||g!=b.$element.prop("selectedIndex")&&!b.multiple)&&(b.$element.triggerNative("change"),b.$element.trigger("changed.bs.select",[e,i.prop("selected"),j]))}}),this.$menu.on("click","li.disabled a, .popover-title, .popover-title :not(.close)",function(c){c.currentTarget==this&&(c.preventDefault(),c.stopPropagation(),b.options.liveSearch&&!a(c.target).hasClass("close")?b.$searchbox.focus():b.$button.focus())}),this.$menuInner.on("click",".divider, .dropdown-header",function(a){a.preventDefault(),a.stopPropagation(),b.options.liveSearch?b.$searchbox.focus():b.$button.focus()}),this.$menu.on("click",".popover-title .close",function(){b.$button.click()}),this.$searchbox.on("click",function(a){a.stopPropagation()}),this.$menu.on("click",".actions-btn",function(c){b.options.liveSearch?b.$searchbox.focus():b.$button.focus(),c.preventDefault(),c.stopPropagation(),a(this).hasClass("bs-select-all")?b.selectAll():b.deselectAll(),b.$element.triggerNative("change")}),this.$element.change(function(){b.render(!1)})},liveSearchListener:function(){var d=this,e=a('<li class="no-results"></li>');this.$newElement.on("click.dropdown.data-api touchstart.dropdown.data-api",function(){d.$menuInner.find(".active").removeClass("active"),d.$searchbox.val()&&(d.$searchbox.val(""),d.$lis.not(".is-hidden").removeClass("hidden"),e.parent().length&&e.remove()),d.multiple||d.$menuInner.find(".selected").addClass("active"),setTimeout(function(){d.$searchbox.focus()},10)}),this.$searchbox.on("click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api",function(a){a.stopPropagation()}),this.$searchbox.on("input propertychange",function(){if(d.$searchbox.val()){var f=d.$lis.not(".is-hidden").removeClass("hidden").children("a");f=d.options.liveSearchNormalize?f.not(":a"+d._searchStyle()+'("'+b(d.$searchbox.val())+'")'):f.not(":"+d._searchStyle()+'("'+d.$searchbox.val()+'")'),f.parent().addClass("hidden"),d.$lis.filter(".dropdown-header").each(function(){var b=a(this),c=b.data("optgroup");0===d.$lis.filter("[data-optgroup="+c+"]").not(b).not(".hidden").length&&(b.addClass("hidden"),d.$lis.filter("[data-optgroup="+c+"div]").addClass("hidden"))});var g=d.$lis.not(".hidden");g.each(function(b){var c=a(this);c.hasClass("divider")&&(c.index()===g.first().index()||c.index()===g.last().index()||g.eq(b+1).hasClass("divider"))&&c.addClass("hidden")}),d.$lis.not(".hidden, .no-results").length?e.parent().length&&e.remove():(e.parent().length&&e.remove(),e.html(d.options.noneResultsText.replace("{0}",'"'+c(d.$searchbox.val())+'"')).show(),d.$menuInner.append(e))}else d.$lis.not(".is-hidden").removeClass("hidden"),e.parent().length&&e.remove();d.$lis.filter(".active").removeClass("active"),d.$searchbox.val()&&d.$lis.not(".hidden, .divider, .dropdown-header").eq(0).addClass("active").children("a").focus(),a(this).focus()})},_searchStyle:function(){var a={begins:"ibegins",startsWith:"ibegins"};return a[this.options.liveSearchStyle]||"icontains"},val:function(a){return"undefined"!=typeof a?(this.$element.val(a),this.render(),this.$element):this.$element.val()},changeAll:function(b){"undefined"==typeof b&&(b=!0),this.findLis();for(var c=this.$element.find("option"),d=this.$lis.not(".divider, .dropdown-header, .disabled, .hidden").toggleClass("selected",b),e=d.length,f=[],g=0;e>g;g++){var h=d[g].getAttribute("data-original-index");f[f.length]=c.eq(h)[0]}a(f).prop("selected",b),this.render(!1)},selectAll:function(){return this.changeAll(!0)},deselectAll:function(){return this.changeAll(!1)},keydown:function(c){var d,e,f,g,h,i,j,k,l,m=a(this),n=m.is("input")?m.parent().parent():m.parent(),o=n.data("this"),p=":not(.disabled, .hidden, .dropdown-header, .divider)",q={32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9"};if(o.options.liveSearch&&(n=m.parent().parent()),o.options.container&&(n=o.$menu),d=a("[role=menu] li",n),l=o.$menu.parent().hasClass("open"),!l&&(c.keyCode>=48&&c.keyCode<=57||c.keyCode>=96&&c.keyCode<=105||c.keyCode>=65&&c.keyCode<=90)&&(o.options.container?o.$newElement.trigger("click"):(o.setSize(),
+o.$menu.parent().addClass("open"),l=!0),o.$searchbox.focus()),o.options.liveSearch&&(/(^9$|27)/.test(c.keyCode.toString(10))&&l&&0===o.$menu.find(".active").length&&(c.preventDefault(),o.$menu.parent().removeClass("open"),o.options.container&&o.$newElement.removeClass("open"),o.$button.focus()),d=a("[role=menu] li"+p,n),m.val()||/(38|40)/.test(c.keyCode.toString(10))||0===d.filter(".active").length&&(d=o.$menuInner.find("li"),d=o.options.liveSearchNormalize?d.filter(":a"+o._searchStyle()+"("+b(q[c.keyCode])+")"):d.filter(":"+o._searchStyle()+"("+q[c.keyCode]+")"))),d.length){if(/(38|40)/.test(c.keyCode.toString(10)))e=d.index(d.find("a").filter(":focus").parent()),g=d.filter(p).first().index(),h=d.filter(p).last().index(),f=d.eq(e).nextAll(p).eq(0).index(),i=d.eq(e).prevAll(p).eq(0).index(),j=d.eq(f).prevAll(p).eq(0).index(),o.options.liveSearch&&(d.each(function(b){a(this).hasClass("disabled")||a(this).data("index",b)}),e=d.index(d.filter(".active")),g=d.first().data("index"),h=d.last().data("index"),f=d.eq(e).nextAll().eq(0).data("index"),i=d.eq(e).prevAll().eq(0).data("index"),j=d.eq(f).prevAll().eq(0).data("index")),k=m.data("prevIndex"),38==c.keyCode?(o.options.liveSearch&&e--,e!=j&&e>i&&(e=i),g>e&&(e=g),e==k&&(e=h)):40==c.keyCode&&(o.options.liveSearch&&e++,-1==e&&(e=0),e!=j&&f>e&&(e=f),e>h&&(e=h),e==k&&(e=g)),m.data("prevIndex",e),o.options.liveSearch?(c.preventDefault(),m.hasClass("dropdown-toggle")||(d.removeClass("active").eq(e).addClass("active").children("a").focus(),m.focus())):d.eq(e).children("a").focus();else if(!m.is("input")){var r,s,t=[];d.each(function(){a(this).hasClass("disabled")||a.trim(a(this).children("a").text().toLowerCase()).substring(0,1)==q[c.keyCode]&&t.push(a(this).index())}),r=a(document).data("keycount"),r++,a(document).data("keycount",r),s=a.trim(a(":focus").text().toLowerCase()).substring(0,1),s!=q[c.keyCode]?(r=1,a(document).data("keycount",r)):r>=t.length&&(a(document).data("keycount",0),r>t.length&&(r=1)),d.eq(t[r-1]).children("a").focus()}if((/(13|32)/.test(c.keyCode.toString(10))||/(^9$)/.test(c.keyCode.toString(10))&&o.options.selectOnTab)&&l){if(/(32)/.test(c.keyCode.toString(10))||c.preventDefault(),o.options.liveSearch)/(32)/.test(c.keyCode.toString(10))||(o.$menuInner.find(".active a").click(),m.focus());else{var u=a(":focus");u.click(),u.focus(),c.preventDefault(),a(document).data("spaceSelect",!0)}a(document).data("keycount",0)}(/(^9$|27)/.test(c.keyCode.toString(10))&&l&&(o.multiple||o.options.liveSearch)||/(27)/.test(c.keyCode.toString(10))&&!l)&&(o.$menu.parent().removeClass("open"),o.options.container&&o.$newElement.removeClass("open"),o.$button.focus())}},mobile:function(){this.$element.addClass("mobile-device").appendTo(this.$newElement),this.options.container&&this.$menu.hide()},refresh:function(){this.$lis=null,this.liObj={},this.reloadLi(),this.render(),this.checkDisabled(),this.liHeight(!0),this.setStyle(),this.setWidth(),this.$lis&&this.$searchbox.trigger("propertychange"),this.$element.trigger("refreshed.bs.select")},hide:function(){this.$newElement.hide()},show:function(){this.$newElement.show()},remove:function(){this.$newElement.remove(),this.$element.remove()}};var f=a.fn.selectpicker;a.fn.selectpicker=d,a.fn.selectpicker.Constructor=e,a.fn.selectpicker.noConflict=function(){return a.fn.selectpicker=f,this},a(document).data("keycount",0).on("keydown",'.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input',e.prototype.keydown).on("focusin.modal",'.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input',function(a){a.stopPropagation()}),a(window).on("load.bs.select.data-api",function(){a(".selectpicker").each(function(){var b=a(this);d.call(b,b.data())})})}(a)}),angular.module("checklist-model",[]).directive("checklistModel",["$parse","$compile",function(a,b){function c(a,b,c){if(angular.isArray(a))for(var d=a.length;d--;)if(c(a[d],b))return!0;return!1}function d(a,b,d){return a=angular.isArray(a)?a:[],c(a,b,d)||a.push(b),a}function e(a,b,c){if(angular.isArray(a))for(var d=a.length;d--;)if(c(a[d],b)){a.splice(d,1);break}return a}function f(f,g,h){function i(a,b){f[h.ngModel]=c(a,n,o)}var j=h.checklistModel;h.$set("checklistModel",null),b(g)(f),h.$set("checklistModel",j);var k=a(j),l=k.assign,m=a(h.checklistChange),n=h.checklistValue?a(h.checklistValue)(f.$parent):h.value,o=angular.equals;if(h.hasOwnProperty("checklistComparator"))if("."==h.checklistComparator[0]){var p=h.checklistComparator.substring(1);o=function(a,b){return a[p]===b[p]}}else o=a(h.checklistComparator)(f.$parent);f.$watch(h.ngModel,function(a,b){if(a!==b){var c=k(f.$parent);angular.isFunction(l)&&(a===!0?l(f.$parent,d(c,n,o)):l(f.$parent,e(c,n,o))),m&&m(f)}}),angular.isFunction(f.$parent.$watchCollection)?f.$parent.$watchCollection(j,i):f.$parent.$watch(j,i,!0)}return{restrict:"A",priority:1e3,terminal:!0,scope:!0,compile:function(a,b){if(("INPUT"!==a[0].tagName||"checkbox"!==b.type)&&"MD-CHECKBOX"!==a[0].tagName&&!b.btnCheckbox)throw'checklist-model should be applied to `input[type="checkbox"]` or `md-checkbox`.';if(!b.checklistValue&&!b.value)throw"You should provide `value` or `checklist-value`.";return b.ngModel||b.$set("ngModel","checked"),f}}}]),function(a,b,c){"use strict";a.fn.backstretch=function(d,f){return(d===c||0===d.length)&&a.error("No images were supplied for Backstretch"),0===a(b).scrollTop()&&b.scrollTo(0,0),this.each(function(){var b=a(this),c=b.data("backstretch");if(c){if("string"==typeof d&&"function"==typeof c[d])return void c[d](f);f=a.extend(c.options,f),c.destroy(!0)}c=new e(this,d,f),b.data("backstretch",c)})},a.backstretch=function(b,c){return a("body").backstretch(b,c).data("backstretch")},a.expr[":"].backstretch=function(b){return a(b).data("backstretch")!==c},a.fn.backstretch.defaults={centeredX:!0,centeredY:!0,duration:5e3,fade:0};var d={wrap:{left:0,top:0,overflow:"hidden",margin:0,padding:0,height:"100%",width:"100%",zIndex:-999999},img:{position:"absolute",display:"none",margin:0,padding:0,border:"none",width:"auto",height:"auto",maxHeight:"none",maxWidth:"none",zIndex:-999999}},e=function(c,e,g){this.options=a.extend({},a.fn.backstretch.defaults,g||{}),this.images=a.isArray(e)?e:[e],a.each(this.images,function(){a("<img />")[0].src=this}),this.isBody=c===document.body,this.$container=a(c),this.$root=this.isBody?a(f?b:document):this.$container;var h=this.$container.children(".backstretch").first();if(this.$wrap=h.length?h:a('<div class="backstretch"></div>').css(d.wrap).appendTo(this.$container),!this.isBody){var i=this.$container.css("position"),j=this.$container.css("zIndex");this.$container.css({position:"static"===i?"relative":i,zIndex:"auto"===j?0:j,background:"none"}),this.$wrap.css({zIndex:-999998})}this.$wrap.css({position:this.isBody&&f?"fixed":"absolute"}),this.index=0,this.show(this.index),a(b).on("resize.backstretch",a.proxy(this.resize,this)).on("orientationchange.backstretch",a.proxy(function(){this.isBody&&0===b.pageYOffset&&(b.scrollTo(0,1),this.resize())},this))};e.prototype={resize:function(){try{var a,c={left:0,top:0},d=this.isBody?this.$root.width():this.$root.innerWidth(),e=d,f=this.isBody?b.innerHeight?b.innerHeight:this.$root.height():this.$root.innerHeight(),g=e/this.$img.data("ratio");g>=f?(a=(g-f)/2,this.options.centeredY&&(c.top="-"+a+"px")):(g=f,e=g*this.$img.data("ratio"),a=(e-d)/2,this.options.centeredX&&(c.left="-"+a+"px")),this.$wrap.css({width:d,height:f}).find("img:not(.deleteable)").css({width:e,height:g}).css(c)}catch(h){}return this},show:function(b){if(!(Math.abs(b)>this.images.length-1)){var c=this,e=c.$wrap.find("img").addClass("deleteable"),f={relatedTarget:c.$container[0]};return c.$container.trigger(a.Event("backstretch.before",f),[c,b]),this.index=b,clearInterval(c.interval),c.$img=a("<img />").css(d.img).bind("load",function(d){var g=this.width||a(d.target).width(),h=this.height||a(d.target).height();a(this).data("ratio",g/h),a(this).fadeIn(c.options.speed||c.options.fade,function(){e.remove(),c.paused||c.cycle(),a(["after","show"]).each(function(){c.$container.trigger(a.Event("backstretch."+this,f),[c,b])})}),c.resize()}).appendTo(c.$wrap),c.$img.attr("src",c.images[b]),c}},next:function(){return this.show(this.index<this.images.length-1?this.index+1:0)},prev:function(){return this.show(0===this.index?this.images.length-1:this.index-1)},pause:function(){return this.paused=!0,this},resume:function(){return this.paused=!1,this.next(),this},cycle:function(){return this.images.length>1&&(clearInterval(this.interval),this.interval=setInterval(a.proxy(function(){this.paused||this.next()},this),this.options.duration)),this},destroy:function(c){a(b).off("resize.backstretch orientationchange.backstretch"),clearInterval(this.interval),c||this.$wrap.remove(),this.$container.removeData("backstretch")}};var f=function(){var a=navigator.userAgent,c=navigator.platform,d=a.match(/AppleWebKit\/([0-9]+)/),e=!!d&&d[1],f=a.match(/Fennec\/([0-9]+)/),g=!!f&&f[1],h=a.match(/Opera Mobi\/([0-9]+)/),i=!!h&&h[1],j=a.match(/MSIE ([0-9]+)/),k=!!j&&j[1];return!((c.indexOf("iPhone")>-1||c.indexOf("iPad")>-1||c.indexOf("iPod")>-1)&&e&&534>e||b.operamini&&"[object OperaMini]"==={}.toString.call(b.operamini)||h&&7458>i||a.indexOf("Android")>-1&&e&&533>e||g&&6>g||"palmGetResource"in b&&e&&534>e||a.indexOf("MeeGo")>-1&&a.indexOf("NokiaBrowser/8.5.0")>-1||k&&6>=k)}()}(jQuery,window),function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){function b(a){return h.raw?a:encodeURIComponent(a)}function c(a){return h.raw?a:decodeURIComponent(a)}function d(a){return b(h.json?JSON.stringify(a):String(a))}function e(a){0===a.indexOf('"')&&(a=a.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\"));try{return a=decodeURIComponent(a.replace(g," ")),h.json?JSON.parse(a):a}catch(b){}}function f(b,c){var d=h.raw?b:e(b);return a.isFunction(c)?c(d):d}var g=/\+/g,h=a.cookie=function(e,g,i){if(void 0!==g&&!a.isFunction(g)){if(i=a.extend({},h.defaults,i),"number"==typeof i.expires){var j=i.expires,k=i.expires=new Date;k.setTime(+k+864e5*j)}return document.cookie=[b(e),"=",d(g),i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("")}for(var l=e?void 0:{},m=document.cookie?document.cookie.split("; "):[],n=0,o=m.length;o>n;n++){var p=m[n].split("="),q=c(p.shift()),r=p.join("=");if(e&&e===q){l=f(r,g);break}e||void 0===(r=f(r))||(l[q]=r)}return l};h.defaults={},a.removeCookie=function(b,c){return void 0===a.cookie(b)?!1:(a.cookie(b,"",a.extend({},c,{expires:-1})),!a.cookie(b))}}),function(a,b,c){function d(c){var d=b.console;f[c]||(f[c]=!0,a.migrateWarnings.push(c),d&&d.warn&&!a.migrateMute&&(d.warn("JQMIGRATE: "+c),a.migrateTrace&&d.trace&&d.trace()))}function e(b,c,e,f){if(Object.defineProperty)try{return void Object.defineProperty(b,c,{configurable:!0,enumerable:!0,get:function(){return d(f),e},set:function(a){d(f),e=a}})}catch(g){}a._definePropertyBroken=!0,b[c]=e}var f={};a.migrateWarnings=[],!a.migrateMute&&b.console&&b.console.log&&b.console.log("JQMIGRATE: Logging is active"),a.migrateTrace===c&&(a.migrateTrace=!0),a.migrateReset=function(){f={},a.migrateWarnings.length=0},"BackCompat"===document.compatMode&&d("jQuery is not compatible with Quirks Mode");var g=a("<input/>",{size:1}).attr("size")&&a.attrFn,h=a.attr,i=a.attrHooks.value&&a.attrHooks.value.get||function(){return null},j=a.attrHooks.value&&a.attrHooks.value.set||function(){return c},k=/^(?:input|button)$/i,l=/^[238]$/,m=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,n=/^(?:checked|selected)$/i;e(a,"attrFn",g||{},"jQuery.attrFn is deprecated"),a.attr=function(b,e,f,i){var j=e.toLowerCase(),o=b&&b.nodeType;return i&&(h.length<4&&d("jQuery.fn.attr( props, pass ) is deprecated"),b&&!l.test(o)&&(g?e in g:a.isFunction(a.fn[e])))?a(b)[e](f):("type"===e&&f!==c&&k.test(b.nodeName)&&b.parentNode&&d("Can't change the 'type' of an input or button in IE 6/7/8"),!a.attrHooks[j]&&m.test(j)&&(a.attrHooks[j]={get:function(b,d){var e,f=a.prop(b,d);return f===!0||"boolean"!=typeof f&&(e=b.getAttributeNode(d))&&e.nodeValue!==!1?d.toLowerCase():c},set:function(b,c,d){var e;return c===!1?a.removeAttr(b,d):(e=a.propFix[d]||d,e in b&&(b[e]=!0),b.setAttribute(d,d.toLowerCase())),d}},n.test(j)&&d("jQuery.fn.attr('"+j+"') may use property instead of attribute")),h.call(a,b,e,f))},a.attrHooks.value={get:function(a,b){var c=(a.nodeName||"").toLowerCase();return"button"===c?i.apply(this,arguments):("input"!==c&&"option"!==c&&d("jQuery.fn.attr('value') no longer gets properties"),b in a?a.value:null)},set:function(a,b){var c=(a.nodeName||"").toLowerCase();return"button"===c?j.apply(this,arguments):("input"!==c&&"option"!==c&&d("jQuery.fn.attr('value', val) no longer sets properties"),void(a.value=b))}};var o,p,q=a.fn.init,r=a.parseJSON,s=/^([^<]*)(<[\w\W]+>)([^>]*)$/;a.fn.init=function(b,c,e){var f;return b&&"string"==typeof b&&!a.isPlainObject(c)&&(f=s.exec(a.trim(b)))&&f[0]&&("<"!==b.charAt(0)&&d("$(html) HTML strings must start with '<' character"),f[3]&&d("$(html) HTML text after last tag is ignored"),"#"===f[0].charAt(0)&&(d("HTML string cannot start with a '#' character"),a.error("JQMIGRATE: Invalid selector string (XSS)")),c&&c.context&&(c=c.context),a.parseHTML)?q.call(this,a.parseHTML(f[2],c,!0),c,e):q.apply(this,arguments)},a.fn.init.prototype=a.fn,a.parseJSON=function(a){return a||null===a?r.apply(this,arguments):(d("jQuery.parseJSON requires a valid JSON string"),null)},a.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a.browser||(o=a.uaMatch(navigator.userAgent),p={},o.browser&&(p[o.browser]=!0,p.version=o.version),p.chrome?p.webkit=!0:p.webkit&&(p.safari=!0),a.browser=p),e(a,"browser",a.browser,"jQuery.browser is deprecated"),a.sub=function(){function b(a,c){return new b.fn.init(a,c)}a.extend(!0,b,this),b.superclass=this,b.fn=b.prototype=this(),b.fn.constructor=b,b.sub=this.sub,b.fn.init=function(d,e){return e&&e instanceof a&&!(e instanceof b)&&(e=b(e)),a.fn.init.call(this,d,e,c)},b.fn.init.prototype=b.fn;var c=b(document);return d("jQuery.sub() is deprecated"),b},a.ajaxSetup({converters:{"text json":a.parseJSON}});var t=a.fn.data;a.fn.data=function(b){var e,f,g=this[0];return!g||"events"!==b||1!==arguments.length||(e=a.data(g,b),f=a._data(g,b),e!==c&&e!==f||f===c)?t.apply(this,arguments):(d("Use of jQuery.fn.data('events') is deprecated"),f)};var u=/\/(java|ecma)script/i,v=a.fn.andSelf||a.fn.addBack;a.fn.andSelf=function(){return d("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"),v.apply(this,arguments)},a.clean||(a.clean=function(b,c,e,f){c=c||document,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,d("jQuery.clean() is deprecated");var g,h,i,j,k=[];if(a.merge(k,a.buildFragment(b,c).childNodes),e)for(i=function(a){return!a.type||u.test(a.type)?f?f.push(a.parentNode?a.parentNode.removeChild(a):a):e.appendChild(a):void 0},g=0;null!=(h=k[g]);g++)a.nodeName(h,"script")&&i(h)||(e.appendChild(h),"undefined"!=typeof h.getElementsByTagName&&(j=a.grep(a.merge([],h.getElementsByTagName("script")),i),k.splice.apply(k,[g+1,0].concat(j)),g+=j.length));return k});var w=a.event.add,x=a.event.remove,y=a.event.trigger,z=a.fn.toggle,A=a.fn.live,B=a.fn.die,C="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",D=new RegExp("\\b(?:"+C+")\\b"),E=/(?:^|\s)hover(\.\S+|)\b/,F=function(b){return"string"!=typeof b||a.event.special.hover?b:(E.test(b)&&d("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),b&&b.replace(E,"mouseenter$1 mouseleave$1"))};a.event.props&&"attrChange"!==a.event.props[0]&&a.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),a.event.dispatch&&e(a.event,"handle",a.event.dispatch,"jQuery.event.handle is undocumented and deprecated"),a.event.add=function(a,b,c,e,f){a!==document&&D.test(b)&&d("AJAX events should be attached to document: "+b),w.call(this,a,F(b||""),c,e,f)},a.event.remove=function(a,b,c,d,e){x.call(this,a,F(b)||"",c,d,e)},a.fn.error=function(){var a=Array.prototype.slice.call(arguments,0);return d("jQuery.fn.error() is deprecated"),a.splice(0,0,"error"),arguments.length?this.bind.apply(this,a):(this.triggerHandler.apply(this,a),this)},a.fn.toggle=function(b,c){if(!a.isFunction(b)||!a.isFunction(c))return z.apply(this,arguments);d("jQuery.fn.toggle(handler, handler...) is deprecated");var e=arguments,f=b.guid||a.guid++,g=0,h=function(c){var d=(a._data(this,"lastToggle"+b.guid)||0)%g;return a._data(this,"lastToggle"+b.guid,d+1),c.preventDefault(),e[d].apply(this,arguments)||!1};for(h.guid=f;g<e.length;)e[g++].guid=f;return this.click(h)},a.fn.live=function(b,c,e){return d("jQuery.fn.live() is deprecated"),A?A.apply(this,arguments):(a(this.context).on(b,this.selector,c,e),this)},a.fn.die=function(b,c){return d("jQuery.fn.die() is deprecated"),B?B.apply(this,arguments):(a(this.context).off(b,this.selector||"**",c),this)},a.event.trigger=function(a,b,c,e){return c||D.test(a)||d("Global events are undocumented and deprecated"),y.call(this,a,b,c||document,e)},a.each(C.split("|"),function(b,c){a.event.special[c]={setup:function(){var b=this;return b!==document&&(a.event.add(document,c+"."+a.guid,function(){a.event.trigger(c,null,b,!0)}),a._data(this,c,a.guid++)),!1},teardown:function(){return this!==document&&a.event.remove(document,c+"."+a._data(this,c)),!1}}})}(jQuery,window),function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){a.extend(a.fn,{validate:function(b){if(!this.length)return void(b&&b.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing."));var c=a.data(this[0],"validator");return c?c:(this.attr("novalidate","novalidate"),c=new a.validator(b,this[0]),a.data(this[0],"validator",c),c.settings.onsubmit&&(this.on("click.validate",":submit",function(b){c.settings.submitHandler&&(c.submitButton=b.target),a(this).hasClass("cancel")&&(c.cancelSubmit=!0),void 0!==a(this).attr("formnovalidate")&&(c.cancelSubmit=!0)}),this.on("submit.validate",function(b){function d(){var d,e;return c.settings.submitHandler?(c.submitButton&&(d=a("<input type='hidden'/>").attr("name",c.submitButton.name).val(a(c.submitButton).val()).appendTo(c.currentForm)),e=c.settings.submitHandler.call(c,c.currentForm,b),c.submitButton&&d.remove(),void 0!==e?e:!1):!0}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){var b,c,d;return a(this[0]).is("form")?b=this.validate().form():(d=[],b=!0,c=a(this[0].form).validate(),this.each(function(){b=c.element(this)&&b,d=d.concat(c.errorList)}),c.errorList=d),b},rules:function(b,c){var d,e,f,g,h,i,j=this[0];if(b)switch(d=a.data(j.form,"validator").settings,e=d.rules,f=a.validator.staticRules(j),b){case"add":a.extend(f,a.validator.normalizeRule(c)),delete f.messages,e[j.name]=f,c.messages&&(d.messages[j.name]=a.extend(d.messages[j.name],c.messages));break;case"remove":return c?(i={},a.each(c.split(/\s/),function(b,c){i[c]=f[c],delete f[c],"required"===c&&a(j).removeAttr("aria-required")}),i):(delete e[j.name],f)}return g=a.validator.normalizeRules(a.extend({},a.validator.classRules(j),a.validator.attributeRules(j),a.validator.dataRules(j),a.validator.staticRules(j)),j),g.required&&(h=g.required,delete g.required,g=a.extend({required:h},g),a(j).attr("aria-required","true")),g.remote&&(h=g.remote,delete g.remote,g=a.extend(g,{remote:h})),g}}),a.extend(a.expr[":"],{blank:function(b){return!a.trim(""+a(b).val())},filled:function(b){return!!a.trim(""+a(b).val())},unchecked:function(b){return!a(b).prop("checked")}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return 1===arguments.length?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),function(){return c})}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a){this.lastActive=a,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(a)))},onfocusout:function(a){this.checkable(a)||!(a.name in this.submitted)&&this.optional(a)||this.element(a)},onkeyup:function(b,c){var d=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===c.which&&""===this.elementValue(b)||-1!==a.inArray(c.keyCode,d)||(b.name in this.submitted||b===this.lastElement)&&this.element(b)},onclick:function(a){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){"radio"===b.type?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date ( ISO ).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:!1,prototype:{init:function(){function b(b){var c=a.data(this.form,"validator"),d="on"+b.type.replace(/^validate/,""),e=c.settings;e[d]&&!a(this).is(e.ignore)&&e[d].call(c,this,b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var c,d=this.groups={};a.each(this.settings.groups,function(b,c){"string"==typeof c&&(c=c.split(/\s/)),a.each(c,function(a,c){d[c]=b})}),c=this.settings.rules,a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox']",b).on("click.validate","select, option, [type='radio'], [type='checkbox']",b),this.settings.invalidHandler&&a(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler),a(this.currentForm).find("[required], [data-rule-required], .required").attr("aria-required","true")},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){var c=this.clean(b),d=this.validationTargetFor(c),e=!0;return this.lastElement=d,void 0===d?delete this.invalid[c.name]:(this.prepareElement(d),this.currentElements=a(d),e=this.check(d)!==!1,e?delete this.invalid[d.name]:this.invalid[d.name]=!0),a(b).attr("aria-invalid",!e),this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),e},showErrors:function(b){if(b){a.extend(this.errorMap,b),this.errorList=[];for(var c in b)this.errorList.push({message:b[c],element:this.findByName(c)[0]});this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.submitted={},this.lastElement=null,this.prepareForm(),this.hideErrors();var b,c=this.elements().removeData("previousValue").removeAttr("aria-invalid");if(this.settings.unhighlight)for(b=0;c[b];b++)this.settings.unhighlight.call(this,c[b],this.settings.errorClass,"");else c.removeClass(this.settings.errorClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b,c=0;for(b in a)c++;return c},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(a){a.not(this.containers).text(""),this.addWrapper(a).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&1===a.grep(this.errorList,function(a){return a.element.name===b.name}).length&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter(function(){return!this.name&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.name in c||!b.objectLength(a(this).rules())?!1:(c[this.name]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.split(" ").join(".");return a(this.settings.errorElement+"."+b,this.errorContext)},reset:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([]),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c,d=a(b),e=b.type;return"radio"===e||"checkbox"===e?this.findByName(b.name).filter(":checked").val():"number"===e&&"undefined"!=typeof b.validity?b.validity.badInput?!1:d.val():(c=d.val(),"string"==typeof c?c.replace(/\r/g,""):c)},check:function(b){b=this.validationTargetFor(this.clean(b));var c,d,e,f=a(b).rules(),g=a.map(f,function(a,b){return b}).length,h=!1,i=this.elementValue(b);for(d in f){e={method:d,parameters:f[d]};try{if(c=a.validator.methods[d].call(this,i,b,e.parameters),"dependency-mismatch"===c&&1===g){h=!0;continue}if(h=!1,"pending"===c)return void(this.toHide=this.toHide.not(this.errorsFor(b)));if(!c)return this.formatAndAdd(b,e),!1}catch(j){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+b.id+", check the '"+e.method+"' method.",j),j instanceof TypeError&&(j.message+=".  Exception occurred when checking element "+b.id+", check the '"+e.method+"' method."),j}}if(!h)return this.objectLength(f)&&this.successList.push(b),!0},customDataMessage:function(b,c){return a(b).data("msg"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase())||a(b).data("msg")},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;a<arguments.length;a++)if(void 0!==arguments[a])return arguments[a]},defaultMessage:function(b,c){return this.findDefined(this.customMessage(b.name,c),this.customDataMessage(b,c),!this.settings.ignoreTitle&&b.title||void 0,a.validator.messages[c],"<strong>Warning: No message defined for "+b.name+"</strong>")},formatAndAdd:function(b,c){var d=this.defaultMessage(b,c.method),e=/\$?\{(\d+)\}/g;"function"==typeof d?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),this.errorList.push({message:d,element:b,method:c.method}),this.errorMap[b.name]=d,this.submitted[b.name]=d},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b,c;for(a=0;this.errorList[a];a++)c=this.errorList[a],this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d,e,f,g=this.errorsFor(b),h=this.idOrName(b),i=a(b).attr("aria-describedby");g.length?(g.removeClass(this.settings.validClass).addClass(this.settings.errorClass),g.html(c)):(g=a("<"+this.settings.errorElement+">").attr("id",h+"-error").addClass(this.settings.errorClass).html(c||""),d=g,this.settings.wrapper&&(d=g.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(d):this.settings.errorPlacement?this.settings.errorPlacement(d,a(b)):d.insertAfter(b),g.is("label")?g.attr("for",h):0===g.parents("label[for='"+h+"']").length&&(f=g.attr("id").replace(/(:|\.|\[|\]|\$)/g,"\\$1"),i?i.match(new RegExp("\\b"+f+"\\b"))||(i+=" "+f):i=f,a(b).attr("aria-describedby",i),e=this.groups[b.name],e&&a.each(this.groups,function(b,c){c===e&&a("[name='"+b+"']",this.currentForm).attr("aria-describedby",g.attr("id"))}))),!c&&this.settings.success&&(g.text(""),"string"==typeof this.settings.success?g.addClass(this.settings.success):this.settings.success(g,b)),this.toShow=this.toShow.add(g)},errorsFor:function(b){var c=this.idOrName(b),d=a(b).attr("aria-describedby"),e="label[for='"+c+"'], label[for='"+c+"'] *";return d&&(e=e+", #"+d.replace(/\s+/g,", #")),this.errors().filter(e)},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(b){return this.checkable(b)&&(b=this.findByName(b.name)),a(b).not(this.settings.ignore)[0]},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find("[name='"+b+"']")},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):!0},dependTypes:{"boolean":function(a){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch";
+},startRequest:function(a){this.pending[a.name]||(this.pendingRequest++,this.pending[a.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],c&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.formSubmitted=!1):!c&&0===this.pendingRequest&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b){return a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,"remote")})},destroy:function(){this.resetForm(),a(this.currentForm).off(".validate").removeData("validator")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},normalizeAttributeRule:function(a,b,c,d){/min|max/.test(c)&&(null===b||/number|range|text/.test(b))&&(d=Number(d),isNaN(d)&&(d=void 0)),d||0===d?a[c]=d:b===c&&"range"!==b&&(a[c]=!0)},attributeRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)"required"===c?(d=b.getAttribute(c),""===d&&(d=!0),d=!!d):d=f.attr(c),this.normalizeAttributeRule(e,g,c,d);return e.maxlength&&/-1|2147483647|524288/.test(e.maxlength)&&delete e.maxlength,e},dataRules:function(b){var c,d,e={},f=a(b),g=b.getAttribute("type");for(c in a.validator.methods)d=f.data("rule"+c.charAt(0).toUpperCase()+c.substring(1).toLowerCase()),this.normalizeAttributeRule(e,g,c,d);return e},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1)return void delete b[d];if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=void 0!==e.param?e.param:!0:delete b[d]}}),a.each(b,function(d,e){b[d]=a.isFunction(e)?e(c):e}),a.each(["minlength","maxlength"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){var c;b[this]&&(a.isArray(b[this])?b[this]=[Number(b[this][0]),Number(b[this][1])]:"string"==typeof b[this]&&(c=b[this].replace(/[\[\]]/g,"").split(/[\s,]+/),b[this]=[Number(c[0]),Number(c[1])]))}),a.validator.autoCreateRanges&&(null!=b.min&&null!=b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),null!=b.minlength&&null!=b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b},normalizeRule:function(b){if("string"==typeof b){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=void 0!==d?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if("select"===c.nodeName.toLowerCase()){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:b.length>0},email:function(a,b){return this.optional(b)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(a)},url:function(a,b){return this.optional(b)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[\/?#]\S*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a).toString())},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(a)},number:function(a,b){return this.optional(b)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},creditcard:function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9 \-]+/.test(a))return!1;var c,d,e=0,f=0,g=!1;if(a=a.replace(/\D/g,""),a.length<13||a.length>19)return!1;for(c=a.length-1;c>=0;c--)d=a.charAt(c),f=parseInt(d,10),g&&(f*=2)>9&&(f-=9),e+=f,g=!g;return e%10===0},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||d>=e},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(b,c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||c>=a},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.off(".validate-equalTo").on("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()},remote:function(b,c,d){if(this.optional(c))return"dependency-mismatch";var e,f,g=this.previousValue(c);return this.settings.messages[c.name]||(this.settings.messages[c.name]={}),g.originalMessage=this.settings.messages[c.name].remote,this.settings.messages[c.name].remote=g.message,d="string"==typeof d&&{url:d}||d,g.old===b?g.valid:(g.old=b,e=this,this.startRequest(c),f={},f[c.name]=b,a.ajax(a.extend(!0,{mode:"abort",port:"validate"+c.name,dataType:"json",data:f,context:e.currentForm,success:function(d){var f,h,i,j=d===!0||"true"===d;e.settings.messages[c.name].remote=g.originalMessage,j?(i=e.formSubmitted,e.prepareElement(c),e.formSubmitted=i,e.successList.push(c),delete e.invalid[c.name],e.showErrors()):(f={},h=d||e.defaultMessage(c,"remote"),f[c.name]=g.message=a.isFunction(h)?h(b):h,e.invalid[c.name]=!0,e.showErrors(f)),g.valid=j,e.stopRequest(c,j)}},d)),"pending")}}});var b,c={};a.ajaxPrefilter?a.ajaxPrefilter(function(a,b,d){var e=a.port;"abort"===a.mode&&(c[e]&&c[e].abort(),c[e]=d)}):(b=a.ajax,a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return"abort"===e?(c[f]&&c[f].abort(),c[f]=b.apply(this,arguments),c[f]):b.apply(this,arguments)})}),function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){a.fn.addBack=a.fn.addBack||a.fn.andSelf,a.fn.extend({actual:function(b,c){if(!this[b])throw'$.actual => The jQuery method "'+b+'" you called does not exist';var d,e,f={absolute:!1,clone:!1,includeMargin:!1,display:"block"},g=a.extend(f,c),h=this.eq(0);if(g.clone===!0)d=function(){var a="position: absolute !important; top: -1000 !important; ";h=h.clone().attr("style",a).appendTo("body")},e=function(){h.remove()};else{var i,j=[],k="";d=function(){i=h.parents().addBack().filter(":hidden"),k+="visibility: hidden !important; display: "+g.display+" !important; ",g.absolute===!0&&(k+="position: absolute !important; "),i.each(function(){var b=a(this),c=b.attr("style");j.push(c),b.attr("style",c?c+";"+k:k)})},e=function(){i.each(function(b){var c=a(this),d=j[b];void 0===d?c.removeAttr("style"):c.attr("style",d)})}}d();var l=/(outer)/.test(b)?h[b](g.includeMargin):h[b]();return e(),l}})}),!function(a){angular.module("ngCsv.config",[]).value("ngCsv.config",{debug:!0}).config(["$compileProvider",function(a){angular.isDefined(a.urlSanitizationWhitelist)?a.urlSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|data):/):a.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|data):/)}]),angular.module("ngCsv.directives",["ngCsv.services"]),angular.module("ngCsv.services",[]),angular.module("ngCsv",["ngCsv.config","ngCsv.services","ngCsv.directives","ngSanitize"]),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ngCsv"),angular.module("ngCsv.services").service("CSV",["$q",function(a){var b="\r\n",c="\ufeff",d={"\\t":"	","\\b":"\b","\\v":"\x0B","\\f":"\f","\\r":"\r"};this.stringifyField=function(a,b){return"locale"===b.decimalSep&&this.isFloat(a)?a.toLocaleString():"."!==b.decimalSep&&this.isFloat(a)?a.toString().replace(".",b.decimalSep):"string"==typeof a?(a=a.replace(/"/g,'""'),(b.quoteStrings||a.indexOf(",")>-1||a.indexOf("\n")>-1||a.indexOf("\r")>-1)&&(a=b.txtDelim+a+b.txtDelim),a):"boolean"==typeof a?a?"TRUE":"FALSE":a},this.isFloat=function(a){return+a===a&&(!isFinite(a)||Boolean(a%1))},this.stringify=function(d,e){var f=a.defer(),g=this,h="",i="",j=a.when(d).then(function(a){if(angular.isDefined(e.header)&&e.header){var d,j;d=[],angular.forEach(e.header,function(a){this.push(g.stringifyField(a,e))},d),j=d.join(e.fieldSep?e.fieldSep:","),i+=j+b}var k=[];if(angular.isArray(a)?k=a:angular.isFunction(a)&&(k=a()),angular.isDefined(e.label)&&e.label&&"boolean"==typeof e.label){var l,m;l=[],angular.forEach(k[0],function(a,b){this.push(g.stringifyField(b,e))},l),m=l.join(e.fieldSep?e.fieldSep:","),i+=m+b}angular.forEach(k,function(a,c){var d,f,h=angular.copy(k[c]);f=[];var j=e.columnOrder?e.columnOrder:h;angular.forEach(j,function(a){var b=e.columnOrder?h[a]:a;this.push(g.stringifyField(b,e))},f),d=f.join(e.fieldSep?e.fieldSep:","),i+=c<k.length?d+b:d}),e.addByteOrderMarker&&(h+=c),h+=i,f.resolve(h)});return"function"==typeof j["catch"]&&j["catch"](function(a){f.reject(a)}),f.promise},this.isSpecialChar=function(a){return void 0!==d[a]},this.getSpecialChar=function(a){return d[a]}}]),angular.module("ngCsv.directives").directive("ngCsv",["$parse","$q","CSV","$document","$timeout",function(b,c,d,e,f){return{restrict:"AC",scope:{data:"&ngCsv",filename:"@filename",header:"&csvHeader",columnOrder:"&csvColumnOrder",txtDelim:"@textDelimiter",decimalSep:"@decimalSeparator",quoteStrings:"@quoteStrings",fieldSep:"@fieldSeparator",lazyLoad:"@lazyLoad",addByteOrderMarker:"@addBom",ngClick:"&",charset:"@charset",label:"&csvLabel"},controller:["$scope","$element","$attrs","$transclude",function(a,b,e){function f(){var b={txtDelim:a.txtDelim?a.txtDelim:'"',decimalSep:a.decimalSep?a.decimalSep:".",quoteStrings:a.quoteStrings,addByteOrderMarker:a.addByteOrderMarker};return angular.isDefined(e.csvHeader)&&(b.header=a.$eval(a.header)),angular.isDefined(e.csvColumnOrder)&&(b.columnOrder=a.$eval(a.columnOrder)),angular.isDefined(e.csvLabel)&&(b.label=a.$eval(a.label)),b.fieldSep=a.fieldSep?a.fieldSep:",",b.fieldSep=d.isSpecialChar(b.fieldSep)?d.getSpecialChar(b.fieldSep):b.fieldSep,b}a.csv="",angular.isDefined(a.lazyLoad)&&"true"==a.lazyLoad||angular.isArray(a.data)&&a.$watch("data",function(){a.buildCSV()},!0),a.getFilename=function(){return a.filename||"download.csv"},a.buildCSV=function(){var g=c.defer();return b.addClass(e.ngCsvLoadingClass||"ng-csv-loading"),d.stringify(a.data(),f()).then(function(c){a.csv=c,b.removeClass(e.ngCsvLoadingClass||"ng-csv-loading"),g.resolve(c)}),a.$apply(),g.promise}}],link:function(b,c){function d(){var c=b.charset||"utf-8",d=new Blob([b.csv],{type:"text/csv;charset="+c+";"});if(a.navigator.msSaveOrOpenBlob)navigator.msSaveBlob(d,b.getFilename());else{var g=angular.element('<div data-tap-disabled="true"><a></a></div>'),h=angular.element(g.children()[0]);h.attr("href",a.URL.createObjectURL(d)),h.attr("download",b.getFilename()),h.attr("target","_blank"),e.find("body").append(g),f(function(){h[0].click(),h.remove()},null)}}c.bind("click",function(){b.buildCSV().then(function(){d()}),b.$apply()})}}}])}(window,document),function(angular){"use strict";if(!angular)throw"Missing something? Please add angular.js to your project or move this script below the angular.js reference";var directiveId="ngRemoteValidate",remoteValidate=function($http,$timeout,$q){return{restrict:"A",require:["^form","ngModel"],scope:{ngRemoteInterceptors:"=?"},link:function(scope,el,attrs,ctrls){var cache={},handleChange,setValidation,addToCache,request,shouldProcess,ngForm=ctrls[0],ngModel=ctrls[1],options={ngRemoteThrottle:400,ngRemoteMethod:"POST"};angular.extend(options,attrs),"["===options.ngRemoteValidate.charAt(0)?options.urls=eval(options.ngRemoteValidate):"{"===options.ngRemoteValidate.charAt(0)?(options.keys=eval("("+options.ngRemoteValidate+")"),options.urls=Object.keys(options.keys)):options.urls=[options.ngRemoteValidate],addToCache=function(a){var b=a[0].data.value;return cache[b]?cache[b]:void(cache[b]=a)},shouldProcess=function(a){var b=!1;for(var c in ngModel.$error){var d=!options.hasOwnProperty("keys")||!Object.keys(options.keys).filter(function(a){return options.keys[a]===c})[0];if(ngModel.$error[c]&&c!=directiveId&&d){b=!0;break}}return!(ngModel.$pristine||b)},setValidation=function(a,b){for(var c=0,d=a.length,e=options.hasOwnProperty("keys"),f=!0;d>c&&(scope.ngRemoteInterceptors&&scope.ngRemoteInterceptors.response&&(a[c]=scope.ngRemoteInterceptors.response(a[c])),a[c].data.isValid||(f=!1,e));c++){var g=e&&a[c].hasOwnProperty("config")&&options.keys[a[c].config.url];if(g){var h=options.keys[a[c].config.url];ngModel.$setValidity(h,a[c].data.isValid)}}b||addToCache(a),ngModel.$setValidity(directiveId,f),ngModel.$processing=ngModel.$pending=ngForm.$pending=!1},handleChange=function(a){return"undefined"==typeof a||""===a?void ngModel.$setPristine():shouldProcess(a)?cache[a]?setValidation(cache[a],!0):(ngModel.$pending||(ngModel.$processing=ngModel.$pending=ngForm.$pending=!0),request&&$timeout.cancel(request),request=$timeout(function(){var b=[],c=0,d=options.urls.length,e={value:a},f={method:options.ngRemoteMethod};for(scope[el[0].name+"SetArgs"]&&(e=scope[el[0].name+"SetArgs"](a,el,attrs,ngModel)),"POST"==options.ngRemoteMethod?f.data=e:f.params=e;d>c;c++)f.url=options.urls[c],scope.ngRemoteInterceptors&&scope.ngRemoteInterceptors.request&&(f=scope.ngRemoteInterceptors.request(f)),b.push($http(f));$q.all(b).then(setValidation)},options.ngRemoteThrottle),!0):setValidation([{data:{isValid:!0,value:a}}],!0)},scope.$watch(function(){return ngModel.$viewValue},handleChange)}}};angular.module("remoteValidation",[]).constant("MODULE_VERSION","0.6.1").directive(directiveId,["$http","$timeout","$q",remoteValidate])}(this.angular),function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})}),function(a){"undefined"!=typeof module&&module.exports?module.exports=a:a(jQuery,window,document)}(function(a){!function(b){var c="function"==typeof define&&define.amd,d="undefined"!=typeof module&&module.exports,e="https:"==document.location.protocol?"https:":"http:",f="cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.13/jquery.mousewheel.min.js";c||(d?require("jquery-mousewheel")(a):a.event.special.mousewheel||a("head").append(decodeURI("%3Cscript src="+e+"//"+f+"%3E%3C/script%3E"))),b()}(function(){var b,c="mCustomScrollbar",d="mCS",e=".mCustomScrollbar",f={setTop:0,setLeft:0,axis:"y",scrollbarPosition:"inside",scrollInertia:950,autoDraggerLength:!0,alwaysShowScrollbar:0,snapOffset:0,mouseWheel:{enable:!0,scrollAmount:"auto",axis:"y",deltaFactor:"auto",disableOver:["select","option","keygen","datalist","textarea"]},scrollButtons:{scrollType:"stepless",scrollAmount:"auto"},keyboard:{enable:!0,scrollType:"stepless",scrollAmount:"auto"},contentTouchScroll:25,documentTouchScroll:!0,advanced:{autoScrollOnFocus:"input,textarea,select,button,datalist,keygen,a[tabindex],area,object,[contenteditable='true']",updateOnContentResize:!0,updateOnImageLoad:"auto",autoUpdateTimeout:60},theme:"light",callbacks:{onTotalScrollOffset:0,onTotalScrollBackOffset:0,alwaysTriggerOffsets:!0}},g=0,h={},i=window.attachEvent&&!window.addEventListener?1:0,j=!1,k=["mCSB_dragger_onDrag","mCSB_scrollTools_onDrag","mCS_img_loaded","mCS_disabled","mCS_destroyed","mCS_no_scrollbar","mCS-autoHide","mCS-dir-rtl","mCS_no_scrollbar_y","mCS_no_scrollbar_x","mCS_y_hidden","mCS_x_hidden","mCSB_draggerContainer","mCSB_buttonUp","mCSB_buttonDown","mCSB_buttonLeft","mCSB_buttonRight"],l={init:function(b){var b=a.extend(!0,{},f,b),c=m.call(this);if(b.live){var i=b.liveSelector||this.selector||e,j=a(i);if("off"===b.live)return void o(i);h[i]=setTimeout(function(){j.mCustomScrollbar(b),"once"===b.live&&j.length&&o(i)},500)}else o(i);return b.setWidth=b.set_width?b.set_width:b.setWidth,b.setHeight=b.set_height?b.set_height:b.setHeight,b.axis=b.horizontalScroll?"x":p(b.axis),b.scrollInertia=b.scrollInertia>0&&b.scrollInertia<17?17:b.scrollInertia,"object"!=typeof b.mouseWheel&&1==b.mouseWheel&&(b.mouseWheel={enable:!0,scrollAmount:"auto",axis:"y",preventDefault:!1,deltaFactor:"auto",normalizeDelta:!1,invert:!1}),b.mouseWheel.scrollAmount=b.mouseWheelPixels?b.mouseWheelPixels:b.mouseWheel.scrollAmount,b.mouseWheel.normalizeDelta=b.advanced.normalizeMouseWheelDelta?b.advanced.normalizeMouseWheelDelta:b.mouseWheel.normalizeDelta,b.scrollButtons.scrollType=q(b.scrollButtons.scrollType),n(b),a(c).each(function(){var c=a(this);if(!c.data(d)){c.data(d,{idx:++g,opt:b,scrollRatio:{y:null,x:null},overflowed:null,contentReset:{y:null,x:null},bindEvents:!1,tweenRunning:!1,sequential:{},langDir:c.css("direction"),cbOffsets:null,trigger:null,poll:{size:{o:0,n:0},img:{o:0,n:0},change:{o:0,n:0}}});var e=c.data(d),f=e.opt,h=c.data("mcs-axis"),i=c.data("mcs-scrollbar-position"),j=c.data("mcs-theme");h&&(f.axis=h),i&&(f.scrollbarPosition=i),j&&(f.theme=j,n(f)),r.call(this),e&&f.callbacks.onCreate&&"function"==typeof f.callbacks.onCreate&&f.callbacks.onCreate.call(this),a("#mCSB_"+e.idx+"_container img:not(."+k[2]+")").addClass(k[2]),l.update.call(null,c)}})},update:function(b,c){var e=b||m.call(this);return a(e).each(function(){var b=a(this);if(b.data(d)){var e=b.data(d),f=e.opt,g=a("#mCSB_"+e.idx+"_container"),h=a("#mCSB_"+e.idx),i=[a("#mCSB_"+e.idx+"_dragger_vertical"),a("#mCSB_"+e.idx+"_dragger_horizontal")];if(!g.length)return;e.tweenRunning&&U(b),c&&e&&f.callbacks.onBeforeUpdate&&"function"==typeof f.callbacks.onBeforeUpdate&&f.callbacks.onBeforeUpdate.call(this),b.hasClass(k[3])&&b.removeClass(k[3]),b.hasClass(k[4])&&b.removeClass(k[4]),h.css("max-height","none"),h.height()!==b.height()&&h.css("max-height",b.height()),t.call(this),"y"===f.axis||f.advanced.autoExpandHorizontalScroll||g.css("width",s(g)),e.overflowed=y.call(this),C.call(this),f.autoDraggerLength&&v.call(this),w.call(this),A.call(this);var j=[Math.abs(g[0].offsetTop),Math.abs(g[0].offsetLeft)];"x"!==f.axis&&(e.overflowed[0]?i[0].height()>i[0].parent().height()?z.call(this):(V(b,j[0].toString(),{dir:"y",dur:0,overwrite:"none"}),e.contentReset.y=null):(z.call(this),"y"===f.axis?B.call(this):"yx"===f.axis&&e.overflowed[1]&&V(b,j[1].toString(),{dir:"x",dur:0,overwrite:"none"}))),"y"!==f.axis&&(e.overflowed[1]?i[1].width()>i[1].parent().width()?z.call(this):(V(b,j[1].toString(),{dir:"x",dur:0,overwrite:"none"}),e.contentReset.x=null):(z.call(this),"x"===f.axis?B.call(this):"yx"===f.axis&&e.overflowed[0]&&V(b,j[0].toString(),{dir:"y",dur:0,overwrite:"none"}))),c&&e&&(2===c&&f.callbacks.onImageLoad&&"function"==typeof f.callbacks.onImageLoad?f.callbacks.onImageLoad.call(this):3===c&&f.callbacks.onSelectorChange&&"function"==typeof f.callbacks.onSelectorChange?f.callbacks.onSelectorChange.call(this):f.callbacks.onUpdate&&"function"==typeof f.callbacks.onUpdate&&f.callbacks.onUpdate.call(this)),S.call(this)}})},scrollTo:function(b,c){if("undefined"!=typeof b&&null!=b){var e=m.call(this);return a(e).each(function(){var e=a(this);if(e.data(d)){var f=e.data(d),g=f.opt,h={trigger:"external",scrollInertia:g.scrollInertia,scrollEasing:"mcsEaseInOut",moveDragger:!1,timeout:60,callbacks:!0,onStart:!0,onUpdate:!0,onComplete:!0},i=a.extend(!0,{},h,c),j=Q.call(this,b),k=i.scrollInertia>0&&i.scrollInertia<17?17:i.scrollInertia;j[0]=R.call(this,j[0],"y"),j[1]=R.call(this,j[1],"x"),i.moveDragger&&(j[0]*=f.scrollRatio.y,j[1]*=f.scrollRatio.x),i.dur=ca()?0:k,setTimeout(function(){null!==j[0]&&"undefined"!=typeof j[0]&&"x"!==g.axis&&f.overflowed[0]&&(i.dir="y",i.overwrite="all",V(e,j[0].toString(),i)),null!==j[1]&&"undefined"!=typeof j[1]&&"y"!==g.axis&&f.overflowed[1]&&(i.dir="x",i.overwrite="none",V(e,j[1].toString(),i))},i.timeout)}})}},stop:function(){var b=m.call(this);return a(b).each(function(){var b=a(this);b.data(d)&&U(b)})},disable:function(b){var c=m.call(this);return a(c).each(function(){var c=a(this);if(c.data(d)){c.data(d);S.call(this,"remove"),B.call(this),b&&z.call(this),C.call(this,!0),c.addClass(k[3])}})},destroy:function(){var b=m.call(this);return a(b).each(function(){var e=a(this);if(e.data(d)){var f=e.data(d),g=f.opt,h=a("#mCSB_"+f.idx),i=a("#mCSB_"+f.idx+"_container"),j=a(".mCSB_"+f.idx+"_scrollbar");g.live&&o(g.liveSelector||a(b).selector),S.call(this,"remove"),B.call(this),z.call(this),e.removeData(d),Z(this,"mcs"),j.remove(),i.find("img."+k[2]).removeClass(k[2]),h.replaceWith(i.contents()),e.removeClass(c+" _"+d+"_"+f.idx+" "+k[6]+" "+k[7]+" "+k[5]+" "+k[3]).addClass(k[4])}})}},m=function(){return"object"!=typeof a(this)||a(this).length<1?e:this},n=function(b){var c=["rounded","rounded-dark","rounded-dots","rounded-dots-dark"],d=["rounded-dots","rounded-dots-dark","3d","3d-dark","3d-thick","3d-thick-dark","inset","inset-dark","inset-2","inset-2-dark","inset-3","inset-3-dark"],e=["minimal","minimal-dark"],f=["minimal","minimal-dark"],g=["minimal","minimal-dark"];b.autoDraggerLength=a.inArray(b.theme,c)>-1?!1:b.autoDraggerLength,b.autoExpandScrollbar=a.inArray(b.theme,d)>-1?!1:b.autoExpandScrollbar,b.scrollButtons.enable=a.inArray(b.theme,e)>-1?!1:b.scrollButtons.enable,b.autoHideScrollbar=a.inArray(b.theme,f)>-1?!0:b.autoHideScrollbar,b.scrollbarPosition=a.inArray(b.theme,g)>-1?"outside":b.scrollbarPosition},o=function(a){h[a]&&(clearTimeout(h[a]),Z(h,a))},p=function(a){return"yx"===a||"xy"===a||"auto"===a?"yx":"x"===a||"horizontal"===a?"x":"y"},q=function(a){return"stepped"===a||"pixels"===a||"step"===a||"click"===a?"stepped":"stepless"},r=function(){var b=a(this),e=b.data(d),f=e.opt,g=f.autoExpandScrollbar?" "+k[1]+"_expand":"",h=["<div id='mCSB_"+e.idx+"_scrollbar_vertical' class='mCSB_scrollTools mCSB_"+e.idx+"_scrollbar mCS-"+f.theme+" mCSB_scrollTools_vertical"+g+"'><div class='"+k[12]+"'><div id='mCSB_"+e.idx+"_dragger_vertical' class='mCSB_dragger' style='position:absolute;' oncontextmenu='return false;'><div class='mCSB_dragger_bar' /></div><div class='mCSB_draggerRail' /></div></div>","<div id='mCSB_"+e.idx+"_scrollbar_horizontal' class='mCSB_scrollTools mCSB_"+e.idx+"_scrollbar mCS-"+f.theme+" mCSB_scrollTools_horizontal"+g+"'><div class='"+k[12]+"'><div id='mCSB_"+e.idx+"_dragger_horizontal' class='mCSB_dragger' style='position:absolute;' oncontextmenu='return false;'><div class='mCSB_dragger_bar' /></div><div class='mCSB_draggerRail' /></div></div>"],i="yx"===f.axis?"mCSB_vertical_horizontal":"x"===f.axis?"mCSB_horizontal":"mCSB_vertical",j="yx"===f.axis?h[0]+h[1]:"x"===f.axis?h[1]:h[0],l="yx"===f.axis?"<div id='mCSB_"+e.idx+"_container_wrapper' class='mCSB_container_wrapper' />":"",m=f.autoHideScrollbar?" "+k[6]:"",n="x"!==f.axis&&"rtl"===e.langDir?" "+k[7]:"";f.setWidth&&b.css("width",f.setWidth),f.setHeight&&b.css("height",f.setHeight),f.setLeft="y"!==f.axis&&"rtl"===e.langDir?"989999px":f.setLeft,b.addClass(c+" _"+d+"_"+e.idx+m+n).wrapInner("<div id='mCSB_"+e.idx+"' class='mCustomScrollBox mCS-"+f.theme+" "+i+"'><div id='mCSB_"+e.idx+"_container' class='mCSB_container' style='position:relative; top:"+f.setTop+"; left:"+f.setLeft+";' dir="+e.langDir+" /></div>");var o=a("#mCSB_"+e.idx),p=a("#mCSB_"+e.idx+"_container");"y"===f.axis||f.advanced.autoExpandHorizontalScroll||p.css("width",s(p)),"outside"===f.scrollbarPosition?("static"===b.css("position")&&b.css("position","relative"),b.css("overflow","visible"),o.addClass("mCSB_outside").after(j)):(o.addClass("mCSB_inside").append(j),p.wrap(l)),u.call(this);var q=[a("#mCSB_"+e.idx+"_dragger_vertical"),a("#mCSB_"+e.idx+"_dragger_horizontal")];q[0].css("min-height",q[0].height()),q[1].css("min-width",q[1].width())},s=function(b){var c=[b[0].scrollWidth,Math.max.apply(Math,b.children().map(function(){return a(this).outerWidth(!0)}).get())],d=b.parent().width();return c[0]>d?c[0]:c[1]>d?c[1]:"100%"},t=function(){var b=a(this),c=b.data(d),e=c.opt,f=a("#mCSB_"+c.idx+"_container");if(e.advanced.autoExpandHorizontalScroll&&"y"!==e.axis){f.css({width:"auto","min-width":0,"overflow-x":"scroll"});var g=Math.ceil(f[0].scrollWidth);3===e.advanced.autoExpandHorizontalScroll||2!==e.advanced.autoExpandHorizontalScroll&&g>f.parent().width()?f.css({width:g,"min-width":"100%","overflow-x":"inherit"}):f.css({"overflow-x":"inherit",position:"absolute"}).wrap("<div class='mCSB_h_wrapper' style='position:relative; left:0; width:999999px;' />").css({width:Math.ceil(f[0].getBoundingClientRect().right+.4)-Math.floor(f[0].getBoundingClientRect().left),"min-width":"100%",position:"relative"}).unwrap()}},u=function(){var b=a(this),c=b.data(d),e=c.opt,f=a(".mCSB_"+c.idx+"_scrollbar:first"),g=aa(e.scrollButtons.tabindex)?"tabindex='"+e.scrollButtons.tabindex+"'":"",h=["<a href='#' class='"+k[13]+"' oncontextmenu='return false;' "+g+" />","<a href='#' class='"+k[14]+"' oncontextmenu='return false;' "+g+" />","<a href='#' class='"+k[15]+"' oncontextmenu='return false;' "+g+" />","<a href='#' class='"+k[16]+"' oncontextmenu='return false;' "+g+" />"],i=["x"===e.axis?h[2]:h[0],"x"===e.axis?h[3]:h[1],h[2],h[3]];e.scrollButtons.enable&&f.prepend(i[0]).append(i[1]).next(".mCSB_scrollTools").prepend(i[2]).append(i[3])},v=function(){var b=a(this),c=b.data(d),e=a("#mCSB_"+c.idx),f=a("#mCSB_"+c.idx+"_container"),g=[a("#mCSB_"+c.idx+"_dragger_vertical"),a("#mCSB_"+c.idx+"_dragger_horizontal")],h=[e.height()/f.outerHeight(!1),e.width()/f.outerWidth(!1)],j=[parseInt(g[0].css("min-height")),Math.round(h[0]*g[0].parent().height()),parseInt(g[1].css("min-width")),Math.round(h[1]*g[1].parent().width())],k=i&&j[1]<j[0]?j[0]:j[1],l=i&&j[3]<j[2]?j[2]:j[3];g[0].css({height:k,"max-height":g[0].parent().height()-10}).find(".mCSB_dragger_bar").css({"line-height":j[0]+"px"}),g[1].css({width:l,"max-width":g[1].parent().width()-10})},w=function(){var b=a(this),c=b.data(d),e=a("#mCSB_"+c.idx),f=a("#mCSB_"+c.idx+"_container"),g=[a("#mCSB_"+c.idx+"_dragger_vertical"),a("#mCSB_"+c.idx+"_dragger_horizontal")],h=[f.outerHeight(!1)-e.height(),f.outerWidth(!1)-e.width()],i=[h[0]/(g[0].parent().height()-g[0].height()),h[1]/(g[1].parent().width()-g[1].width())];c.scrollRatio={y:i[0],x:i[1]}},x=function(a,b,c){var d=c?k[0]+"_expanded":"",e=a.closest(".mCSB_scrollTools");"active"===b?(a.toggleClass(k[0]+" "+d),e.toggleClass(k[1]),a[0]._draggable=a[0]._draggable?0:1):a[0]._draggable||("hide"===b?(a.removeClass(k[0]),e.removeClass(k[1])):(a.addClass(k[0]),e.addClass(k[1])))},y=function(){var b=a(this),c=b.data(d),e=a("#mCSB_"+c.idx),f=a("#mCSB_"+c.idx+"_container"),g=null==c.overflowed?f.height():f.outerHeight(!1),h=null==c.overflowed?f.width():f.outerWidth(!1),i=f[0].scrollHeight,j=f[0].scrollWidth;return i>g&&(g=i),j>h&&(h=j),[g>e.height(),h>e.width()]},z=function(){var b=a(this),c=b.data(d),e=c.opt,f=a("#mCSB_"+c.idx),g=a("#mCSB_"+c.idx+"_container"),h=[a("#mCSB_"+c.idx+"_dragger_vertical"),a("#mCSB_"+c.idx+"_dragger_horizontal")];if(U(b),("x"!==e.axis&&!c.overflowed[0]||"y"===e.axis&&c.overflowed[0])&&(h[0].add(g).css("top",0),V(b,"_resetY")),"y"!==e.axis&&!c.overflowed[1]||"x"===e.axis&&c.overflowed[1]){var i=dx=0;"rtl"===c.langDir&&(i=f.width()-g.outerWidth(!1),dx=Math.abs(i/c.scrollRatio.x)),g.css("left",i),h[1].css("left",dx),V(b,"_resetX")}},A=function(){function b(){g=setTimeout(function(){a.event.special.mousewheel?(clearTimeout(g),H.call(c[0])):b()},100)}var c=a(this),e=c.data(d),f=e.opt;if(!e.bindEvents){if(E.call(this),f.contentTouchScroll&&F.call(this),G.call(this),f.mouseWheel.enable){var g;b()}K.call(this),M.call(this),f.advanced.autoScrollOnFocus&&L.call(this),f.scrollButtons.enable&&N.call(this),f.keyboard.enable&&O.call(this),e.bindEvents=!0}},B=function(){var b=a(this),c=b.data(d),e=c.opt,f=d+"_"+c.idx,g=".mCSB_"+c.idx+"_scrollbar",h=a("#mCSB_"+c.idx+",#mCSB_"+c.idx+"_container,#mCSB_"+c.idx+"_container_wrapper,"+g+" ."+k[12]+",#mCSB_"+c.idx+"_dragger_vertical,#mCSB_"+c.idx+"_dragger_horizontal,"+g+">a"),i=a("#mCSB_"+c.idx+"_container");e.advanced.releaseDraggableSelectors&&h.add(a(e.advanced.releaseDraggableSelectors)),e.advanced.extraDraggableSelectors&&h.add(a(e.advanced.extraDraggableSelectors)),c.bindEvents&&(a(document).add(a(!I()||top.document)).unbind("."+f),h.each(function(){a(this).unbind("."+f)}),clearTimeout(b[0]._focusTimeout),Z(b[0],"_focusTimeout"),clearTimeout(c.sequential.step),Z(c.sequential,"step"),clearTimeout(i[0].onCompleteTimeout),Z(i[0],"onCompleteTimeout"),c.bindEvents=!1)},C=function(b){var c=a(this),e=c.data(d),f=e.opt,g=a("#mCSB_"+e.idx+"_container_wrapper"),h=g.length?g:a("#mCSB_"+e.idx+"_container"),i=[a("#mCSB_"+e.idx+"_scrollbar_vertical"),a("#mCSB_"+e.idx+"_scrollbar_horizontal")],j=[i[0].find(".mCSB_dragger"),i[1].find(".mCSB_dragger")];"x"!==f.axis&&(e.overflowed[0]&&!b?(i[0].add(j[0]).add(i[0].children("a")).css("display","block"),h.removeClass(k[8]+" "+k[10])):(f.alwaysShowScrollbar?(2!==f.alwaysShowScrollbar&&j[0].css("display","none"),h.removeClass(k[10])):(i[0].css("display","none"),
+h.addClass(k[10])),h.addClass(k[8]))),"y"!==f.axis&&(e.overflowed[1]&&!b?(i[1].add(j[1]).add(i[1].children("a")).css("display","block"),h.removeClass(k[9]+" "+k[11])):(f.alwaysShowScrollbar?(2!==f.alwaysShowScrollbar&&j[1].css("display","none"),h.removeClass(k[11])):(i[1].css("display","none"),h.addClass(k[11])),h.addClass(k[9]))),e.overflowed[0]||e.overflowed[1]?c.removeClass(k[5]):c.addClass(k[5])},D=function(b){var c=b.type,d=b.target.ownerDocument!==document?[a(frameElement).offset().top,a(frameElement).offset().left]:null,e=I()&&b.target.ownerDocument!==top.document?[a(b.view.frameElement).offset().top,a(b.view.frameElement).offset().left]:[0,0];switch(c){case"pointerdown":case"MSPointerDown":case"pointermove":case"MSPointerMove":case"pointerup":case"MSPointerUp":return d?[b.originalEvent.pageY-d[0]+e[0],b.originalEvent.pageX-d[1]+e[1],!1]:[b.originalEvent.pageY,b.originalEvent.pageX,!1];case"touchstart":case"touchmove":case"touchend":var f=b.originalEvent.touches[0]||b.originalEvent.changedTouches[0],g=b.originalEvent.touches.length||b.originalEvent.changedTouches.length;return b.target.ownerDocument!==document?[f.screenY,f.screenX,g>1]:[f.pageY,f.pageX,g>1];default:return d?[b.pageY-d[0]+e[0],b.pageX-d[1]+e[1],!1]:[b.pageY,b.pageX,!1]}},E=function(){function b(a){var b=o.find("iframe");if(b.length){var c=a?"auto":"none";b.css("pointer-events",c)}}function c(a,b,c,d){if(o[0].idleTimer=l.scrollInertia<233?250:0,e.attr("id")===n[1])var f="x",g=(e[0].offsetLeft-b+d)*k.scrollRatio.x;else var f="y",g=(e[0].offsetTop-a+c)*k.scrollRatio.y;V(h,g.toString(),{dir:f,drag:!0})}var e,f,g,h=a(this),k=h.data(d),l=k.opt,m=d+"_"+k.idx,n=["mCSB_"+k.idx+"_dragger_vertical","mCSB_"+k.idx+"_dragger_horizontal"],o=a("#mCSB_"+k.idx+"_container"),p=a("#"+n[0]+",#"+n[1]),q=l.advanced.releaseDraggableSelectors?p.add(a(l.advanced.releaseDraggableSelectors)):p,r=l.advanced.extraDraggableSelectors?a(!I()||top.document).add(a(l.advanced.extraDraggableSelectors)):a(!I()||top.document);p.bind("mousedown."+m+" touchstart."+m+" pointerdown."+m+" MSPointerDown."+m,function(c){if(c.stopImmediatePropagation(),c.preventDefault(),$(c)){j=!0,i&&(document.onselectstart=function(){return!1}),b(!1),U(h),e=a(this);var d=e.offset(),k=D(c)[0]-d.top,m=D(c)[1]-d.left,n=e.height()+d.top,o=e.width()+d.left;n>k&&k>0&&o>m&&m>0&&(f=k,g=m),x(e,"active",l.autoExpandScrollbar)}}).bind("touchmove."+m,function(a){a.stopImmediatePropagation(),a.preventDefault();var b=e.offset(),d=D(a)[0]-b.top,h=D(a)[1]-b.left;c(f,g,d,h)}),a(document).add(r).bind("mousemove."+m+" pointermove."+m+" MSPointerMove."+m,function(a){if(e){var b=e.offset(),d=D(a)[0]-b.top,h=D(a)[1]-b.left;if(f===d&&g===h)return;c(f,g,d,h)}}).add(q).bind("mouseup."+m+" touchend."+m+" pointerup."+m+" MSPointerUp."+m,function(a){e&&(x(e,"active",l.autoExpandScrollbar),e=null),j=!1,i&&(document.onselectstart=null),b(!0)})},F=function(){function c(a){if(!_(a)||j||D(a)[2])return void(b=0);b=1,w=0,x=0,k=1,y.removeClass("mCS_touch_action");var c=E.offset();l=D(a)[0]-c.top,m=D(a)[1]-c.left,L=[D(a)[0],D(a)[1]]}function e(a){if(_(a)&&!j&&!D(a)[2]&&(A.documentTouchScroll||a.preventDefault(),a.stopImmediatePropagation(),(!x||w)&&k)){q=X();var b=C.offset(),c=D(a)[0]-b.top,d=D(a)[1]-b.left,e="mcsLinearOut";if(G.push(c),H.push(d),L[2]=Math.abs(D(a)[0]-L[0]),L[3]=Math.abs(D(a)[1]-L[1]),z.overflowed[0])var f=F[0].parent().height()-F[0].height(),g=l-c>0&&c-l>-(f*z.scrollRatio.y)&&(2*L[3]<L[2]||"yx"===A.axis);if(z.overflowed[1])var h=F[1].parent().width()-F[1].width(),n=m-d>0&&d-m>-(h*z.scrollRatio.x)&&(2*L[2]<L[3]||"yx"===A.axis);g||n?(O||a.preventDefault(),w=1):(x=1,y.addClass("mCS_touch_action")),O&&a.preventDefault(),u="yx"===A.axis?[l-c,m-d]:"x"===A.axis?[null,m-d]:[l-c,null],E[0].idleTimer=250,z.overflowed[0]&&i(u[0],J,e,"y","all",!0),z.overflowed[1]&&i(u[1],J,e,"x",K,!0)}}function f(a){if(!_(a)||j||D(a)[2])return void(b=0);b=1,a.stopImmediatePropagation(),U(y),p=X();var c=C.offset();n=D(a)[0]-c.top,o=D(a)[1]-c.left,G=[],H=[]}function g(a){if(_(a)&&!j&&!D(a)[2]){k=0,a.stopImmediatePropagation(),w=0,x=0,r=X();var b=C.offset(),c=D(a)[0]-b.top,d=D(a)[1]-b.left;if(!(r-q>30)){t=1e3/(r-p);var e="mcsEaseOut",f=2.5>t,g=f?[G[G.length-2],H[H.length-2]]:[0,0];s=f?[c-g[0],d-g[1]]:[c-n,d-o];var l=[Math.abs(s[0]),Math.abs(s[1])];t=f?[Math.abs(s[0]/4),Math.abs(s[1]/4)]:[t,t];var m=[Math.abs(E[0].offsetTop)-s[0]*h(l[0]/t[0],t[0]),Math.abs(E[0].offsetLeft)-s[1]*h(l[1]/t[1],t[1])];u="yx"===A.axis?[m[0],m[1]]:"x"===A.axis?[null,m[1]]:[m[0],null],v=[4*l[0]+A.scrollInertia,4*l[1]+A.scrollInertia];var y=parseInt(A.contentTouchScroll)||0;u[0]=l[0]>y?u[0]:0,u[1]=l[1]>y?u[1]:0,z.overflowed[0]&&i(u[0],v[0],e,"y",K,!1),z.overflowed[1]&&i(u[1],v[1],e,"x",K,!1)}}}function h(a,b){var c=[1.5*b,2*b,b/1.5,b/2];return a>90?b>4?c[0]:c[3]:a>60?b>3?c[3]:c[2]:a>30?b>8?c[1]:b>6?c[0]:b>4?b:c[2]:b>8?b:c[3]}function i(a,b,c,d,e,f){a&&V(y,a.toString(),{dur:b,scrollEasing:c,dir:d,overwrite:e,drag:f})}var k,l,m,n,o,p,q,r,s,t,u,v,w,x,y=a(this),z=y.data(d),A=z.opt,B=d+"_"+z.idx,C=a("#mCSB_"+z.idx),E=a("#mCSB_"+z.idx+"_container"),F=[a("#mCSB_"+z.idx+"_dragger_vertical"),a("#mCSB_"+z.idx+"_dragger_horizontal")],G=[],H=[],J=0,K="yx"===A.axis?"none":"all",L=[],M=E.find("iframe"),N=["touchstart."+B+" pointerdown."+B+" MSPointerDown."+B,"touchmove."+B+" pointermove."+B+" MSPointerMove."+B,"touchend."+B+" pointerup."+B+" MSPointerUp."+B],O=void 0!==document.body.style.touchAction;E.bind(N[0],function(a){c(a)}).bind(N[1],function(a){e(a)}),C.bind(N[0],function(a){f(a)}).bind(N[2],function(a){g(a)}),M.length&&M.each(function(){a(this).load(function(){I(this)&&a(this.contentDocument||this.contentWindow.document).bind(N[0],function(a){c(a),f(a)}).bind(N[1],function(a){e(a)}).bind(N[2],function(a){g(a)})})})},G=function(){function c(){return window.getSelection?window.getSelection().toString():document.selection&&"Control"!=document.selection.type?document.selection.createRange().text:0}function e(a,b,c){k.type=c&&f?"stepped":"stepless",k.scrollAmount=10,P(g,a,b,"mcsLinearOut",c?60:null)}var f,g=a(this),h=g.data(d),i=h.opt,k=h.sequential,l=d+"_"+h.idx,m=a("#mCSB_"+h.idx+"_container"),n=m.parent();m.bind("mousedown."+l,function(a){b||f||(f=1,j=!0)}).add(document).bind("mousemove."+l,function(a){if(!b&&f&&c()){var d=m.offset(),g=D(a)[0]-d.top+m[0].offsetTop,j=D(a)[1]-d.left+m[0].offsetLeft;g>0&&g<n.height()&&j>0&&j<n.width()?k.step&&e("off",null,"stepped"):("x"!==i.axis&&h.overflowed[0]&&(0>g?e("on",38):g>n.height()&&e("on",40)),"y"!==i.axis&&h.overflowed[1]&&(0>j?e("on",37):j>n.width()&&e("on",39)))}}).bind("mouseup."+l+" dragend."+l,function(a){b||(f&&(f=0,e("off",null)),j=!1)})},H=function(){function b(b,d){if(U(c),!J(c,b.target)){var g="auto"!==f.mouseWheel.deltaFactor?parseInt(f.mouseWheel.deltaFactor):i&&b.deltaFactor<100?100:b.deltaFactor||100,k=f.scrollInertia;if("x"===f.axis||"x"===f.mouseWheel.axis)var l="x",m=[Math.round(g*e.scrollRatio.x),parseInt(f.mouseWheel.scrollAmount)],n="auto"!==f.mouseWheel.scrollAmount?m[1]:m[0]>=h.width()?.9*h.width():m[0],o=Math.abs(a("#mCSB_"+e.idx+"_container")[0].offsetLeft),p=j[1][0].offsetLeft,q=j[1].parent().width()-j[1].width(),r=b.deltaX||b.deltaY||d;else var l="y",m=[Math.round(g*e.scrollRatio.y),parseInt(f.mouseWheel.scrollAmount)],n="auto"!==f.mouseWheel.scrollAmount?m[1]:m[0]>=h.height()?.9*h.height():m[0],o=Math.abs(a("#mCSB_"+e.idx+"_container")[0].offsetTop),p=j[0][0].offsetTop,q=j[0].parent().height()-j[0].height(),r=b.deltaY||d;"y"===l&&!e.overflowed[0]||"x"===l&&!e.overflowed[1]||((f.mouseWheel.invert||b.webkitDirectionInvertedFromDevice)&&(r=-r),f.mouseWheel.normalizeDelta&&(r=0>r?-1:1),(r>0&&0!==p||0>r&&p!==q||f.mouseWheel.preventDefault)&&(b.stopImmediatePropagation(),b.preventDefault()),b.deltaFactor<2&&!f.mouseWheel.normalizeDelta&&(n=b.deltaFactor,k=17),V(c,(o-r*n).toString(),{dir:l,dur:k}))}}if(a(this).data(d)){var c=a(this),e=c.data(d),f=e.opt,g=d+"_"+e.idx,h=a("#mCSB_"+e.idx),j=[a("#mCSB_"+e.idx+"_dragger_vertical"),a("#mCSB_"+e.idx+"_dragger_horizontal")],k=a("#mCSB_"+e.idx+"_container").find("iframe");k.length&&k.each(function(){a(this).load(function(){I(this)&&a(this.contentDocument||this.contentWindow.document).bind("mousewheel."+g,function(a,c){b(a,c)})})}),h.bind("mousewheel."+g,function(a,c){b(a,c)})}},I=function(a){var b=null;if(a){try{var c=a.contentDocument||a.contentWindow.document;b=c.body.innerHTML}catch(d){}return null!==b}try{var c=top.document;b=c.body.innerHTML}catch(d){}return null!==b},J=function(b,c){var e=c.nodeName.toLowerCase(),f=b.data(d).opt.mouseWheel.disableOver,g=["select","textarea"];return a.inArray(e,f)>-1&&!(a.inArray(e,g)>-1&&!a(c).is(":focus"))},K=function(){var b,c=a(this),e=c.data(d),f=d+"_"+e.idx,g=a("#mCSB_"+e.idx+"_container"),h=g.parent(),i=a(".mCSB_"+e.idx+"_scrollbar ."+k[12]);i.bind("mousedown."+f+" touchstart."+f+" pointerdown."+f+" MSPointerDown."+f,function(c){j=!0,a(c.target).hasClass("mCSB_dragger")||(b=1)}).bind("touchend."+f+" pointerup."+f+" MSPointerUp."+f,function(a){j=!1}).bind("click."+f,function(d){if(b&&(b=0,a(d.target).hasClass(k[12])||a(d.target).hasClass("mCSB_draggerRail"))){U(c);var f=a(this),i=f.find(".mCSB_dragger");if(f.parent(".mCSB_scrollTools_horizontal").length>0){if(!e.overflowed[1])return;var j="x",l=d.pageX>i.offset().left?-1:1,m=Math.abs(g[0].offsetLeft)-l*(.9*h.width())}else{if(!e.overflowed[0])return;var j="y",l=d.pageY>i.offset().top?-1:1,m=Math.abs(g[0].offsetTop)-l*(.9*h.height())}V(c,m.toString(),{dir:j,scrollEasing:"mcsEaseInOut"})}})},L=function(){var b=a(this),c=b.data(d),e=c.opt,f=d+"_"+c.idx,g=a("#mCSB_"+c.idx+"_container"),h=g.parent();g.bind("focusin."+f,function(c){var d=a(document.activeElement),f=g.find(".mCustomScrollBox").length,i=0;d.is(e.advanced.autoScrollOnFocus)&&(U(b),clearTimeout(b[0]._focusTimeout),b[0]._focusTimer=f?(i+17)*f:0,b[0]._focusTimeout=setTimeout(function(){var a=[ba(d)[0],ba(d)[1]],c=[g[0].offsetTop,g[0].offsetLeft],f=[c[0]+a[0]>=0&&c[0]+a[0]<h.height()-d.outerHeight(!1),c[1]+a[1]>=0&&c[0]+a[1]<h.width()-d.outerWidth(!1)],j="yx"!==e.axis||f[0]||f[1]?"all":"none";"x"===e.axis||f[0]||V(b,a[0].toString(),{dir:"y",scrollEasing:"mcsEaseInOut",overwrite:j,dur:i}),"y"===e.axis||f[1]||V(b,a[1].toString(),{dir:"x",scrollEasing:"mcsEaseInOut",overwrite:j,dur:i})},b[0]._focusTimer))})},M=function(){var b=a(this),c=b.data(d),e=d+"_"+c.idx,f=a("#mCSB_"+c.idx+"_container").parent();f.bind("scroll."+e,function(b){(0!==f.scrollTop()||0!==f.scrollLeft())&&a(".mCSB_"+c.idx+"_scrollbar").css("visibility","hidden")})},N=function(){var b=a(this),c=b.data(d),e=c.opt,f=c.sequential,g=d+"_"+c.idx,h=".mCSB_"+c.idx+"_scrollbar",i=a(h+">a");i.bind("mousedown."+g+" touchstart."+g+" pointerdown."+g+" MSPointerDown."+g+" mouseup."+g+" touchend."+g+" pointerup."+g+" MSPointerUp."+g+" mouseout."+g+" pointerout."+g+" MSPointerOut."+g+" click."+g,function(d){function g(a,c){f.scrollAmount=e.scrollButtons.scrollAmount,P(b,a,c)}if(d.preventDefault(),$(d)){var h=a(this).attr("class");switch(f.type=e.scrollButtons.scrollType,d.type){case"mousedown":case"touchstart":case"pointerdown":case"MSPointerDown":if("stepped"===f.type)return;j=!0,c.tweenRunning=!1,g("on",h);break;case"mouseup":case"touchend":case"pointerup":case"MSPointerUp":case"mouseout":case"pointerout":case"MSPointerOut":if("stepped"===f.type)return;j=!1,f.dir&&g("off",h);break;case"click":if("stepped"!==f.type||c.tweenRunning)return;g("on",h)}}})},O=function(){function b(b){function d(a,b){g.type=f.keyboard.scrollType,g.scrollAmount=f.keyboard.scrollAmount,"stepped"===g.type&&e.tweenRunning||P(c,a,b)}switch(b.type){case"blur":e.tweenRunning&&g.dir&&d("off",null);break;case"keydown":case"keyup":var h=b.keyCode?b.keyCode:b.which,i="on";if("x"!==f.axis&&(38===h||40===h)||"y"!==f.axis&&(37===h||39===h)){if((38===h||40===h)&&!e.overflowed[0]||(37===h||39===h)&&!e.overflowed[1])return;"keyup"===b.type&&(i="off"),a(document.activeElement).is(l)||(b.preventDefault(),b.stopImmediatePropagation(),d(i,h))}else if(33===h||34===h){if((e.overflowed[0]||e.overflowed[1])&&(b.preventDefault(),b.stopImmediatePropagation()),"keyup"===b.type){U(c);var m=34===h?-1:1;if("x"===f.axis||"yx"===f.axis&&e.overflowed[1]&&!e.overflowed[0])var n="x",o=Math.abs(j[0].offsetLeft)-m*(.9*k.width());else var n="y",o=Math.abs(j[0].offsetTop)-m*(.9*k.height());V(c,o.toString(),{dir:n,scrollEasing:"mcsEaseInOut"})}}else if((35===h||36===h)&&!a(document.activeElement).is(l)&&((e.overflowed[0]||e.overflowed[1])&&(b.preventDefault(),b.stopImmediatePropagation()),"keyup"===b.type)){if("x"===f.axis||"yx"===f.axis&&e.overflowed[1]&&!e.overflowed[0])var n="x",o=35===h?Math.abs(k.width()-j.outerWidth(!1)):0;else var n="y",o=35===h?Math.abs(k.height()-j.outerHeight(!1)):0;V(c,o.toString(),{dir:n,scrollEasing:"mcsEaseInOut"})}}}var c=a(this),e=c.data(d),f=e.opt,g=e.sequential,h=d+"_"+e.idx,i=a("#mCSB_"+e.idx),j=a("#mCSB_"+e.idx+"_container"),k=j.parent(),l="input,textarea,select,datalist,keygen,[contenteditable='true']",m=j.find("iframe"),n=["blur."+h+" keydown."+h+" keyup."+h];m.length&&m.each(function(){a(this).load(function(){I(this)&&a(this.contentDocument||this.contentWindow.document).bind(n[0],function(a){b(a)})})}),i.attr("tabindex","0").bind(n[0],function(a){b(a)})},P=function(b,c,e,f,g){function h(a){l.snapAmount&&(m.scrollAmount=l.snapAmount instanceof Array?"x"===m.dir[0]?l.snapAmount[1]:l.snapAmount[0]:l.snapAmount);var c="stepped"!==m.type,d=g?g:a?c?p/1.5:q:1e3/60,e=a?c?7.5:40:2.5,i=[Math.abs(n[0].offsetTop),Math.abs(n[0].offsetLeft)],k=[j.scrollRatio.y>10?10:j.scrollRatio.y,j.scrollRatio.x>10?10:j.scrollRatio.x],o="x"===m.dir[0]?i[1]+m.dir[1]*(k[1]*e):i[0]+m.dir[1]*(k[0]*e),r="x"===m.dir[0]?i[1]+m.dir[1]*parseInt(m.scrollAmount):i[0]+m.dir[1]*parseInt(m.scrollAmount),s="auto"!==m.scrollAmount?r:o,t=f?f:a?c?"mcsLinearOut":"mcsEaseInOut":"mcsLinear",u=a?!0:!1;return a&&17>d&&(s="x"===m.dir[0]?i[1]:i[0]),V(b,s.toString(),{dir:m.dir[0],scrollEasing:t,dur:d,onComplete:u}),a?void(m.dir=!1):(clearTimeout(m.step),void(m.step=setTimeout(function(){h()},d)))}function i(){clearTimeout(m.step),Z(m,"step"),U(b)}var j=b.data(d),l=j.opt,m=j.sequential,n=a("#mCSB_"+j.idx+"_container"),o="stepped"===m.type?!0:!1,p=l.scrollInertia<26?26:l.scrollInertia,q=l.scrollInertia<1?17:l.scrollInertia;switch(c){case"on":if(m.dir=[e===k[16]||e===k[15]||39===e||37===e?"x":"y",e===k[13]||e===k[15]||38===e||37===e?-1:1],U(b),aa(e)&&"stepped"===m.type)return;h(o);break;case"off":i(),(o||j.tweenRunning&&m.dir)&&h(!0)}},Q=function(b){var c=a(this).data(d).opt,e=[];return"function"==typeof b&&(b=b()),b instanceof Array?e=b.length>1?[b[0],b[1]]:"x"===c.axis?[null,b[0]]:[b[0],null]:(e[0]=b.y?b.y:b.x||"x"===c.axis?null:b,e[1]=b.x?b.x:b.y||"y"===c.axis?null:b),"function"==typeof e[0]&&(e[0]=e[0]()),"function"==typeof e[1]&&(e[1]=e[1]()),e},R=function(b,c){if(null!=b&&"undefined"!=typeof b){var e=a(this),f=e.data(d),g=f.opt,h=a("#mCSB_"+f.idx+"_container"),i=h.parent(),j=typeof b;c||(c="x"===g.axis?"x":"y");var k="x"===c?h.outerWidth(!1):h.outerHeight(!1),m="x"===c?h[0].offsetLeft:h[0].offsetTop,n="x"===c?"left":"top";switch(j){case"function":return b();case"object":var o=b.jquery?b:a(b);if(!o.length)return;return"x"===c?ba(o)[1]:ba(o)[0];case"string":case"number":if(aa(b))return Math.abs(b);if(-1!==b.indexOf("%"))return Math.abs(k*parseInt(b)/100);if(-1!==b.indexOf("-="))return Math.abs(m-parseInt(b.split("-=")[1]));if(-1!==b.indexOf("+=")){var p=m+parseInt(b.split("+=")[1]);return p>=0?0:Math.abs(p)}if(-1!==b.indexOf("px")&&aa(b.split("px")[0]))return Math.abs(b.split("px")[0]);if("top"===b||"left"===b)return 0;if("bottom"===b)return Math.abs(i.height()-h.outerHeight(!1));if("right"===b)return Math.abs(i.width()-h.outerWidth(!1));if("first"===b||"last"===b){var o=h.find(":"+b);return"x"===c?ba(o)[1]:ba(o)[0]}return a(b).length?"x"===c?ba(a(b))[1]:ba(a(b))[0]:(h.css(n,b),void l.update.call(null,e[0]))}}},S=function(b){function c(){return clearTimeout(m[0].autoUpdate),0===h.parents("html").length?void(h=null):void(m[0].autoUpdate=setTimeout(function(){return j.advanced.updateOnSelectorChange&&(i.poll.change.n=f(),i.poll.change.n!==i.poll.change.o)?(i.poll.change.o=i.poll.change.n,void g(3)):j.advanced.updateOnContentResize&&(i.poll.size.n=h[0].scrollHeight+h[0].scrollWidth+m[0].offsetHeight+h[0].offsetHeight+h[0].offsetWidth,i.poll.size.n!==i.poll.size.o)?(i.poll.size.o=i.poll.size.n,void g(1)):!j.advanced.updateOnImageLoad||"auto"===j.advanced.updateOnImageLoad&&"y"===j.axis||(i.poll.img.n=m.find("img").length,i.poll.img.n===i.poll.img.o)?void((j.advanced.updateOnSelectorChange||j.advanced.updateOnContentResize||j.advanced.updateOnImageLoad)&&c()):(i.poll.img.o=i.poll.img.n,void m.find("img").each(function(){e(this)}))},j.advanced.autoUpdateTimeout))}function e(b){function c(a,b){return function(){return b.apply(a,arguments)}}function d(){this.onload=null,a(b).addClass(k[2]),g(2)}if(a(b).hasClass(k[2]))return void g();var e=new Image;e.onload=c(e,d),e.src=b.src}function f(){j.advanced.updateOnSelectorChange===!0&&(j.advanced.updateOnSelectorChange="*");var a=0,b=m.find(j.advanced.updateOnSelectorChange);return j.advanced.updateOnSelectorChange&&b.length>0&&b.each(function(){a+=this.offsetHeight+this.offsetWidth}),a}function g(a){clearTimeout(m[0].autoUpdate),l.update.call(null,h[0],a)}var h=a(this),i=h.data(d),j=i.opt,m=a("#mCSB_"+i.idx+"_container");return b?(clearTimeout(m[0].autoUpdate),void Z(m[0],"autoUpdate")):void c()},T=function(a,b,c){return Math.round(a/b)*b-c},U=function(b){var c=b.data(d),e=a("#mCSB_"+c.idx+"_container,#mCSB_"+c.idx+"_container_wrapper,#mCSB_"+c.idx+"_dragger_vertical,#mCSB_"+c.idx+"_dragger_horizontal");e.each(function(){Y.call(this)})},V=function(b,c,e){function f(a){return i&&j.callbacks[a]&&"function"==typeof j.callbacks[a]}function g(){return[j.callbacks.alwaysTriggerOffsets||u>=v[0]+y,j.callbacks.alwaysTriggerOffsets||-z>=u]}function h(){var a=[n[0].offsetTop,n[0].offsetLeft],c=[s[0].offsetTop,s[0].offsetLeft],d=[n.outerHeight(!1),n.outerWidth(!1)],f=[m.height(),m.width()];b[0].mcs={content:n,top:a[0],left:a[1],draggerTop:c[0],draggerLeft:c[1],topPct:Math.round(100*Math.abs(a[0])/(Math.abs(d[0])-f[0])),leftPct:Math.round(100*Math.abs(a[1])/(Math.abs(d[1])-f[1])),direction:e.dir}}var i=b.data(d),j=i.opt,k={trigger:"internal",dir:"y",scrollEasing:"mcsEaseOut",drag:!1,dur:j.scrollInertia,overwrite:"all",callbacks:!0,onStart:!0,onUpdate:!0,onComplete:!0},e=a.extend(k,e),l=[e.dur,e.drag?0:e.dur],m=a("#mCSB_"+i.idx),n=a("#mCSB_"+i.idx+"_container"),o=n.parent(),p=j.callbacks.onTotalScrollOffset?Q.call(b,j.callbacks.onTotalScrollOffset):[0,0],q=j.callbacks.onTotalScrollBackOffset?Q.call(b,j.callbacks.onTotalScrollBackOffset):[0,0];if(i.trigger=e.trigger,(0!==o.scrollTop()||0!==o.scrollLeft())&&(a(".mCSB_"+i.idx+"_scrollbar").css("visibility","visible"),o.scrollTop(0).scrollLeft(0)),"_resetY"!==c||i.contentReset.y||(f("onOverflowYNone")&&j.callbacks.onOverflowYNone.call(b[0]),i.contentReset.y=1),"_resetX"!==c||i.contentReset.x||(f("onOverflowXNone")&&j.callbacks.onOverflowXNone.call(b[0]),i.contentReset.x=1),"_resetY"!==c&&"_resetX"!==c){if(!i.contentReset.y&&b[0].mcs||!i.overflowed[0]||(f("onOverflowY")&&j.callbacks.onOverflowY.call(b[0]),i.contentReset.x=null),!i.contentReset.x&&b[0].mcs||!i.overflowed[1]||(f("onOverflowX")&&j.callbacks.onOverflowX.call(b[0]),i.contentReset.x=null),j.snapAmount){var r=j.snapAmount instanceof Array?"x"===e.dir?j.snapAmount[1]:j.snapAmount[0]:j.snapAmount;c=T(c,r,j.snapOffset)}switch(e.dir){case"x":var s=a("#mCSB_"+i.idx+"_dragger_horizontal"),t="left",u=n[0].offsetLeft,v=[m.width()-n.outerWidth(!1),s.parent().width()-s.width()],w=[c,0===c?0:c/i.scrollRatio.x],y=p[1],z=q[1],A=y>0?y/i.scrollRatio.x:0,B=z>0?z/i.scrollRatio.x:0;break;case"y":var s=a("#mCSB_"+i.idx+"_dragger_vertical"),t="top",u=n[0].offsetTop,v=[m.height()-n.outerHeight(!1),s.parent().height()-s.height()],w=[c,0===c?0:c/i.scrollRatio.y],y=p[0],z=q[0],A=y>0?y/i.scrollRatio.y:0,B=z>0?z/i.scrollRatio.y:0}w[1]<0||0===w[0]&&0===w[1]?w=[0,0]:w[1]>=v[1]?w=[v[0],v[1]]:w[0]=-w[0],b[0].mcs||(h(),f("onInit")&&j.callbacks.onInit.call(b[0])),clearTimeout(n[0].onCompleteTimeout),W(s[0],t,Math.round(w[1]),l[1],e.scrollEasing),(i.tweenRunning||!(0===u&&w[0]>=0||u===v[0]&&w[0]<=v[0]))&&W(n[0],t,Math.round(w[0]),l[0],e.scrollEasing,e.overwrite,{onStart:function(){e.callbacks&&e.onStart&&!i.tweenRunning&&(f("onScrollStart")&&(h(),j.callbacks.onScrollStart.call(b[0])),i.tweenRunning=!0,x(s),i.cbOffsets=g())},onUpdate:function(){e.callbacks&&e.onUpdate&&f("whileScrolling")&&(h(),j.callbacks.whileScrolling.call(b[0]))},onComplete:function(){if(e.callbacks&&e.onComplete){"yx"===j.axis&&clearTimeout(n[0].onCompleteTimeout);var a=n[0].idleTimer||0;n[0].onCompleteTimeout=setTimeout(function(){f("onScroll")&&(h(),j.callbacks.onScroll.call(b[0])),f("onTotalScroll")&&w[1]>=v[1]-A&&i.cbOffsets[0]&&(h(),j.callbacks.onTotalScroll.call(b[0])),f("onTotalScrollBack")&&w[1]<=B&&i.cbOffsets[1]&&(h(),j.callbacks.onTotalScrollBack.call(b[0])),i.tweenRunning=!1,n[0].idleTimer=0,x(s,"hide")},a)}}})}},W=function(a,b,c,d,e,f,g){function h(){v.stop||(s||o.call(),s=X()-r,i(),s>=v.time&&(v.time=s>v.time?s+m-(s-v.time):s+m-1,v.time<s+1&&(v.time=s+1)),v.time<d?v.id=n(h):q.call())}function i(){d>0?(v.currVal=l(v.time,t,w,d,e),u[b]=Math.round(v.currVal)+"px"):u[b]=c+"px",p.call()}function j(){m=1e3/60,v.time=s+m,n=window.requestAnimationFrame?window.requestAnimationFrame:function(a){return i(),setTimeout(a,.01)},v.id=n(h)}function k(){null!=v.id&&(window.requestAnimationFrame?window.cancelAnimationFrame(v.id):clearTimeout(v.id),v.id=null)}function l(a,b,c,d,e){switch(e){case"linear":case"mcsLinear":return c*a/d+b;case"mcsLinearOut":return a/=d,a--,c*Math.sqrt(1-a*a)+b;case"easeInOutSmooth":return a/=d/2,1>a?c/2*a*a+b:(a--,-c/2*(a*(a-2)-1)+b);case"easeInOutStrong":return a/=d/2,1>a?c/2*Math.pow(2,10*(a-1))+b:(a--,c/2*(-Math.pow(2,-10*a)+2)+b);case"easeInOut":case"mcsEaseInOut":return a/=d/2,1>a?c/2*a*a*a+b:(a-=2,c/2*(a*a*a+2)+b);case"easeOutSmooth":return a/=d,a--,-c*(a*a*a*a-1)+b;case"easeOutStrong":return c*(-Math.pow(2,-10*a/d)+1)+b;case"easeOut":case"mcsEaseOut":default:var f=(a/=d)*a,g=f*a;return b+c*(.499999999999997*g*f+-2.5*f*f+5.5*g+-6.5*f+4*a)}}a._mTween||(a._mTween={top:{},left:{}});var m,n,g=g||{},o=g.onStart||function(){},p=g.onUpdate||function(){},q=g.onComplete||function(){},r=X(),s=0,t=a.offsetTop,u=a.style,v=a._mTween[b];"left"===b&&(t=a.offsetLeft);var w=c-t;v.stop=0,"none"!==f&&k(),j()},X=function(){return window.performance&&window.performance.now?window.performance.now():window.performance&&window.performance.webkitNow?window.performance.webkitNow():Date.now?Date.now():(new Date).getTime()},Y=function(){var a=this;a._mTween||(a._mTween={top:{},left:{}});for(var b=["top","left"],c=0;c<b.length;c++){var d=b[c];a._mTween[d].id&&(window.requestAnimationFrame?window.cancelAnimationFrame(a._mTween[d].id):clearTimeout(a._mTween[d].id),a._mTween[d].id=null,a._mTween[d].stop=1)}},Z=function(a,b){try{delete a[b]}catch(c){a[b]=null}},$=function(a){return!(a.which&&1!==a.which)},_=function(a){var b=a.originalEvent.pointerType;return!(b&&"touch"!==b&&2!==b)},aa=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},ba=function(a){var b=a.parents(".mCSB_container");return[a.offset().top-b.offset().top,a.offset().left-b.offset().left]},ca=function(){function a(){var a=["webkit","moz","ms","o"];if("hidden"in document)return"hidden";for(var b=0;b<a.length;b++)if(a[b]+"Hidden"in document)return a[b]+"Hidden";return null}var b=a();return b?document[b]:!1};a.fn[c]=function(b){return l[b]?l[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?void a.error("Method "+b+" does not exist"):l.init.apply(this,arguments)},a[c]=function(b){return l[b]?l[b].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof b&&b?void a.error("Method "+b+" does not exist"):l.init.apply(this,arguments)},a[c].defaults=f,window[c]=!0,a(window).load(function(){a(e)[c](),a.extend(a.expr[":"],{mcsInView:a.expr[":"].mcsInView||function(b){var c,d,e=a(b),f=e.parents(".mCSB_container");if(f.length)return c=f.parent(),d=[f[0].offsetTop,f[0].offsetLeft],d[0]+ba(e)[0]>=0&&d[0]+ba(e)[0]<c.height()-e.outerHeight(!1)&&d[1]+ba(e)[1]>=0&&d[1]+ba(e)[1]<c.width()-e.outerWidth(!1)},mcsOverflow:a.expr[":"].mcsOverflow||function(b){var c=a(b).data(d);if(c)return c.overflowed[0]||c.overflowed[1]}})})})}),!function(){"use strict";function a(){this.defaults={scrollButtons:{enable:!1},axis:"yx"},$.mCustomScrollbar.defaults.scrollButtons=this.defaults.scrollButtons,$.mCustomScrollbar.defaults.axis=this.defaults.axis,this.$get=function(){return{defaults:this.defaults}}}function b(a){return{scope:{ngScrollbarsConfig:"&"},link:function(b,c){var d=a.defaults,e=$.mCustomScrollbar.defaults,f=b.ngScrollbarsConfig();f||(f={});for(var g in d)if(d.hasOwnProperty(g))switch(g){case"scrollButtons":f.hasOwnProperty(g)||(e.scrollButtons=d[g]);break;case"axis":f.hasOwnProperty(g)||(e.axis=d[g]);break;default:f.hasOwnProperty(g)||(f[g]=d[g])}c.mCustomScrollbar(f)}}}b.$inject=["a"],angular.module("ngScrollbars",[]).provider("ScrollBars",a).directive("ngScrollbars",b),a.$inject=[],b.$inject=["ScrollBars"]}(),function(){"use strict";angular.module("ng-slide-down",[]).directive("ngSlideDown",["$timeout",function(a){var b,c;return b=function(a,b){return void 0!==b.lazyRender?"<div ng-if='lazyRender' ng-transclude></div>":"<div ng-transclude></div>"},c=function(b,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q;return h=d.duration||1,q=d.timingFunction||"ease-in-out",i=c.scope(),j=d.emitOnClose,n=d.onClose,m=void 0!==d.lazyRender,g=null,o=null,k=function(a){var b,d,e,f,g;for(e=0,d=c.children(),f=0,g=d.length;g>f;f++)b=d[f],e+=b.clientHeight;return""+e+"px"},p=function(){return g&&a.cancel(g),m&&(b.lazyRender=!0),a(function(){return o&&a.cancel(o),c.css({overflow:"hidden",transitionProperty:"height",transitionDuration:""+h+"s",transitionTimingFunction:q,height:k()}),o=a(function(){return c.css({overflow:"visible",transition:"none",height:"auto"})},1e3*h)})},l=function(){return o&&a.cancel(o),c.css({overflow:"hidden",transitionProperty:"height",transitionDuration:""+h+"s",transitionTimingFunction:q,height:"0px"}),j||n||m?g=a(function(){return j&&b.$emit(j,{}),n&&i.$eval(n),m?b.lazyRender=!1:void 0},1e3*h):void 0},b.$watch("expanded",function(b,d){return b?a(p):(null!=b&&(c.css({height:k()}),c[0].clientHeight),a(l))})},{restrict:"A",scope:{expanded:"=ngSlideDown"},transclude:!0,link:c,template:function(a,c){return b(a,c)}}}])}.call(this);var mod;mod=angular.module("infinite-scroll",[]),mod.directive("infiniteScroll",["$rootScope","$window","$timeout",function(a,b,c){return{link:function(d,e,f){var g,h,i,j;return b=angular.element(b),i=0,null!=f.infiniteScrollDistance&&d.$watch(f.infiniteScrollDistance,function(a){return i=parseInt(a,10)}),j=!0,g=!1,null!=f.infiniteScrollDisabled&&d.$watch(f.infiniteScrollDisabled,function(a){return j=!a,j&&g?(g=!1,h()):void 0}),h=function(){var c,h,k,l;return l=b.height()+b.scrollTop(),c=e.offset().top+e.height(),h=c-l,k=h<=b.height()*i,k&&j?a.$$phase?d.$eval(f.infiniteScroll):d.$apply(f.infiniteScroll):k?g=!0:void 0},b.on("scroll",h),d.$on("$destroy",function(){return b.off("scroll",h)}),c(function(){return f.infiniteScrollImmediateCheck?d.$eval(f.infiniteScrollImmediateCheck)?h():void 0:h()},0)}}}]),angular.module("ngMap",[]),function(){"use strict";function camelCase(a){return a.replace(SPECIAL_CHARS_REGEXP,function(a,b,c,d){return d?c.toUpperCase():c}).replace(MOZ_HACK_REGEXP,"Moz$1")}function JSONize(a){try{return JSON.parse(a),a}catch(b){return a.replace(/([\$\w]+)\s*:/g,function(a,b){return'"'+b+'":'}).replace(/'([^']+)'/g,function(a,b){return'"'+b+'"'})}}var SPECIAL_CHARS_REGEXP=/([\:\-\_]+(.))/g,MOZ_HACK_REGEXP=/^moz([A-Z])/,Attr2Options=function($parse,$timeout,$log,NavigatorGeolocation,GeoCoder){var orgAttributes=function(a){a.length>0&&(a=a[0]);for(var b={},c=0;c<a.attributes.length;c++){var d=a.attributes[c];b[d.name]=d.value}return b},toOptionValue=function(input,options){var output,key=options.key,scope=options.scope;try{var num=Number(input);if(isNaN(num))throw"Not a number";output=num}catch(err){try{if(input.match(/^[\+\-]?[0-9\.]+,[ ]*\ ?[\+\-]?[0-9\.]+$/)&&(input="["+input+"]"),output=JSON.parse(JSONize(input)),output instanceof Array){var t1stEl=output[0];if(t1stEl.constructor==Object);else if(t1stEl.constructor==Array)output=output.map(function(a){return new google.maps.LatLng(a[0],a[1])});else if(!isNaN(parseFloat(t1stEl))&&isFinite(t1stEl))return new google.maps.LatLng(output[0],output[1])}else output===Object(output)&&(output=getOptions(output,options,!0))}catch(err2){if(input.match(/^[A-Z][a-zA-Z0-9]+\(.*\)$/))try{var exp="new google.maps."+input;output=eval(exp)}catch(e){output=input}else if(input.match(/^([A-Z][a-zA-Z0-9]+)\.([A-Z]+)$/))try{var matches=input.match(/^([A-Z][a-zA-Z0-9]+)\.([A-Z]+)$/);output=google.maps[matches[1]][matches[2]]}catch(e){output=input}else if(input.match(/^[A-Z]+$/))try{var capitalizedKey=key.charAt(0).toUpperCase()+key.slice(1);key.match(/temperatureUnit|windSpeedUnit|labelColor/)?(capitalizedKey=capitalizedKey.replace(/s$/,""),output=google.maps.weather[capitalizedKey][input]):output=google.maps[capitalizedKey][input]}catch(e){output=input}else if(input.match(/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/))try{output=new Date(input)}catch(e){output=input}else output=input}}if("bounds"==options.key&&output instanceof Array&&(output=new google.maps.LatLngBounds(output[0],output[1])),"icons"==options.key&&output instanceof Array)for(var i=0;i<output.length;i++){var el=output[i];el.icon.path.match(/^[A-Z_]+$/)&&(el.icon.path=google.maps.SymbolPath[el.icon.path])}if("icon"==options.key&&output instanceof Object){(""+output.path).match(/^[A-Z_]+$/)&&(output.path=google.maps.SymbolPath[output.path]);for(var key in output){var arr=output[key];"anchor"==key||"origin"==key?output[key]=new google.maps.Point(arr[0],arr[1]):("size"==key||"scaledSize"==key)&&(output[key]=new google.maps.Size(arr[0],arr[1]))}}return output},getAttrsToObserve=function(a){var b=[];a["ng-repeat"]||a.ngRepeat;for(var c in a){var d=a[c];d&&d.match(/\{\{.*\}\}/)&&b.push(camelCase(c))}return b},filter=function(a){var b={};for(var c in a)c.match(/^\$/)||c.match(/^ng[A-Z]/)||(b[c]=a[c]);return b},getOptions=function(a,b,c){var d={};for(var e in a)if(a[e]){if(e.match(/^on[A-Z]/))continue;if(e.match(/ControlOptions$/))continue;"string"!=typeof a[e]?d[e]=a[e]:c&&a[e].match(/^[0-9]+$/)?d[e]=a[e]:d[e]=toOptionValue(a[e],{scope:b,key:e})}return d},getEvents=function(a,b){var c={},d=function(a){return"_"+a.toLowerCase()},e=function(b){var c=b.match(/([^\(]+)\(([^\)]*)\)/),d=c[1],e=c[2].replace(/event[ ,]*/,""),f=$parse("["+e+"]");return function(b){function c(a,b){return a[b]}var e=f(a),g=d.split(".").reduce(c,a);g&&g.apply(this,[b].concat(e)),$timeout(function(){a.$apply()})}};for(var f in b)if(b[f]){if(!f.match(/^on[A-Z]/))continue;var g=f.replace(/^on/,"");g=g.charAt(0).toLowerCase()+g.slice(1),g=g.replace(/([A-Z])/g,d);var h=b[f];c[g]=new e(h)}return c},getControlOptions=function(a){var b={};if("object"!=typeof a)return!1;for(var c in a)if(a[c]){if(!c.match(/(.*)ControlOptions$/))continue;var d=a[c],e=d.replace(/'/g,'"');e=e.replace(/([^"]+)|("[^"]+")/g,function(a,b,c){return b?b.replace(/([a-zA-Z0-9]+?):/g,'"$1":'):c});try{var f=JSON.parse(e);for(var g in f)if(f[g]){var h=f[g];if("string"==typeof h?h=h.toUpperCase():"mapTypeIds"===g&&(h=h.map(function(a){return a.match(/^[A-Z]+$/)?google.maps.MapTypeId[a.toUpperCase()]:a})),"style"===g){var i=c.charAt(0).toUpperCase()+c.slice(1),j=i.replace(/Options$/,"")+"Style";f[g]=google.maps[j][h]}else"position"===g?f[g]=google.maps.ControlPosition[h]:f[g]=h}b[c]=f}catch(k){}}return b};return{camelCase:camelCase,filter:filter,getOptions:getOptions,getEvents:getEvents,getControlOptions:getControlOptions,toOptionValue:toOptionValue,getAttrsToObserve:getAttrsToObserve,orgAttributes:orgAttributes
+}};Attr2Options.$inject=["$parse","$timeout","$log","NavigatorGeolocation","GeoCoder"],angular.module("ngMap").service("Attr2Options",Attr2Options)}(),function(){"use strict";var a=function(a){return{geocode:function(b){var c=a.defer(),d=new google.maps.Geocoder;return d.geocode(b,function(a,b){b==google.maps.GeocoderStatus.OK?c.resolve(a):c.reject(b)}),c.promise}}};a.$inject=["$q"],angular.module("ngMap").service("GeoCoder",a)}(),function(){"use strict";var a=function(a){return{getCurrentPosition:function(b){var c=a.defer();return navigator.geolocation?(void 0===b?b={timeout:5e3}:void 0===b.timeout&&(b.timeout=5e3),navigator.geolocation.getCurrentPosition(function(a){c.resolve(a)},function(a){c.reject(a)},b)):c.reject("Browser Geolocation service failed."),c.promise},watchPosition:function(){return"TODO"},clearWatch:function(){return"TODO"}}};a.$inject=["$q"],angular.module("ngMap").service("NavigatorGeolocation",a)}(),function(){"use strict";var a=function(a){var b=function(b,c){c=c||b.getCenter();var d=a.defer(),e=new google.maps.StreetViewService;return e.getPanoramaByLocation(c||b.getCenter,100,function(a,b){b===google.maps.StreetViewStatus.OK?d.resolve(a.location.pano):d.resolve(!1)}),d.promise},c=function(a,b){var c=new google.maps.StreetViewPanorama(a.getDiv(),{enableCloseButton:!0});c.setPano(b)};return{getPanorama:b,setPanorama:c}};a.$inject=["$q"],angular.module("ngMap").service("StreetView",a)}(),function(){"use strict";angular.module("ngMap").directive("bicyclingLayer",["Attr2Options",function(a){var b=a,c=function(a,b){var c=new google.maps.BicyclingLayer(a);for(var d in b)google.maps.event.addListener(c,d,b[d]);return c};return{restrict:"E",require:"^map",link:function(a,d,e,f){var g=b.orgAttributes(d),h=b.filter(e),i=b.getOptions(h),j=b.getEvents(a,h),k=c(i,j);f.addObject("bicyclingLayers",k),f.observeAttrSetObj(g,e,k),d.bind("$destroy",function(){f.deleteObject("bicyclingLayers",k)})}}}])}(),function(){"use strict";angular.module("ngMap").directive("cloudLayer",["Attr2Options",function(a){var b=a,c=function(a,b){var c=new google.maps.weather.CloudLayer(a);for(var d in b)google.maps.event.addListener(c,d,b[d]);return c};return{restrict:"E",require:"^map",link:function(a,d,e,f){var g=b.orgAttributes(d),h=b.filter(e),i=b.getOptions(h),j=b.getEvents(a,h),k=c(i,j);f.addObject("cloudLayers",k),f.observeAttrSetObj(g,e,k),d.bind("$destroy",function(){f.deleteObject("cloudLayers",k)})}}}])}(),function(){"use strict";angular.module("ngMap").directive("customControl",["Attr2Options","$compile",function(a,b){var c=a;return{restrict:"E",require:"^map",link:function(a,d,e,f){var g=(c.orgAttributes(d),c.filter(e)),h=c.getOptions(g,a),i=c.getEvents(a,g),j=d[0].parentElement.removeChild(d[0]);b(j.innerHTML.trim())(a);for(var k in i)google.maps.event.addDomListener(j,k,i[k]);f.addObject("customControls",j),a.$on("mapInitialized",function(a,b){var c=h.position;b.controls[google.maps.ControlPosition[c]].push(j)})}}}])}(),function(){"use strict";var a,b,c,d=function(a){a=a||{},this.el=document.createElement("div"),this.el.style.display="inline-block",this.visible=!0;for(var b in a)this[b]=a[b]},e=function(){d.prototype=new google.maps.OverlayView,d.prototype.setContent=function(a,b){this.el.innerHTML=a,this.el.style.position="absolute",b&&c(angular.element(this.el).contents())(b)},d.prototype.setPosition=function(a){if(a&&(this.position=a),this.getProjection()&&"function"==typeof this.position.lng){var b=this.getProjection().fromLatLngToDivPixel(this.position),c=Math.round(b.x-this.el.offsetWidth/2),d=Math.round(b.y-this.el.offsetHeight-10);this.el.style.left=c+"px",this.el.style.top=d+"px"}},d.prototype.setZIndex=function(a){a&&(this.zIndex=a),this.el.style.zIndex=this.zIndex},d.prototype.setVisible=function(a){this.el.style.display=a?"inline-block":"none",this.visible=a},d.prototype.addClass=function(a){var b=this.el.className.trim().split(" ");-1==b.indexOf(a)&&b.push(a),this.el.className=b.join(" ")},d.prototype.removeClass=function(a){var b=this.el.className.split(" "),c=b.indexOf(a);c>-1&&b.splice(c,1),this.el.className=b.join(" ")},d.prototype.onAdd=function(){this.getPanes().overlayMouseTarget.appendChild(this.el)},d.prototype.draw=function(){this.setPosition(),this.setZIndex(this.zIndex),this.setVisible(this.visible)},d.prototype.onRemove=function(){this.el.parentNode.removeChild(this.el),this.el=null}},f=function(c,e){return function(f,g,h,i){var j=(a.orgAttributes(g),a.filter(h)),k=a.getOptions(j,f),l=a.getEvents(f,j),m=g[0].parentElement.removeChild(g[0]),n=new d(k);b(function(){f.$watch("["+e.join(",")+"]",function(a){n.setContent(c,f)}),n.setContent(m.innerHTML,f);var a=m.firstElementChild.className;n.addClass("custom-marker"),n.addClass(a),k.position instanceof google.maps.LatLng||i.getGeoLocation(k.position).then(function(a){n.setPosition(a)})});for(var o in l)google.maps.event.addDomListener(n.el,o,l[o]);i.addObject("customMarkers",n),g.bind("$destroy",function(){i.deleteObject("customMarkers",n)})}},g=function(d,g,h){return a=d,b=g,c=h,e(),{restrict:"E",require:"^map",compile:function(a){var b=a.html(),c=b.match(/{{([^}]+)}}/g),d=[];return(c||[]).forEach(function(a){var b=a.replace("{{","").replace("}}","");-1==a.indexOf("::")&&-1==a.indexOf("this.")&&-1==d.indexOf(b)&&d.push(a.replace("{{","").replace("}}",""))}),f(b,d)}}};g.$inject=["Attr2Options","$timeout","$compile"],angular.module("ngMap").directive("customMarker",g)}(),function(){"use strict";var a=function(a,b){a.panel&&(a.panel=document.getElementById(a.panel)||document.querySelector(a.panel));var c=new google.maps.DirectionsRenderer(a);for(var d in b)google.maps.event.addListener(c,d,b[d]);return c},b=function(b,c,d){var e=b,f=new google.maps.DirectionsService,g=function(a,b){var e=b;e.travelMode=e.travelMode||"DRIVING";var g=["origin","destination","travelMode","transitOptions","unitSystem","durationInTraffic","waypoints","optimizeWaypoints","provideRouteAlternatives","avoidHighways","avoidTolls","region"];for(var h in e)-1===g.indexOf(h)&&delete e[h];e.waypoints&&("[]"==e.waypoints||""==e.waypoints)&&delete e.waypoints;var i=function(b){f.route(b,function(b,d){d==google.maps.DirectionsStatus.OK&&c(function(){a.setDirections(b)})})};e.origin&&e.destination&&("current-location"==e.origin?d.getCurrentPosition().then(function(a){e.origin=new google.maps.LatLng(a.coords.latitude,a.coords.longitude),i(e)}):"current-location"==e.destination?d.getCurrentPosition().then(function(a){e.destination=new google.maps.LatLng(a.coords.latitude,a.coords.longitude),i(e)}):i(e))},h=function(b,d,f,h){var i=e.orgAttributes(d),j=e.filter(f),k=e.getOptions(j),l=e.getEvents(b,j),m=e.getAttrsToObserve(i),n=a(k,l);h.addObject("directionsRenderers",n),m.forEach(function(a){!function(a){f.$observe(a,function(b){if("panel"==a)c(function(){var a=document.getElementById(b)||document.querySelector(b);a&&n.setPanel(a)});else if(k[a]!==b){var d=e.toOptionValue(b,{key:a});k[a]=d,g(n,k)}})}(a)}),b.$on("mapInitialized",function(a,b){g(n,k)}),b.$on("$destroy",function(a,b){h.deleteObject("directionsRenderers",n)})};return{restrict:"E",require:"^map",link:h}};b.$inject=["Attr2Options","$timeout","NavigatorGeolocation"],angular.module("ngMap").directive("directions",b)}(),function(){"use strict";angular.module("ngMap").directive("drawingManager",["Attr2Options",function(a){var b=a;return{restrict:"E",require:"^map",link:function(a,c,d,e){var f=(b.orgAttributes(c),b.filter(d)),g=b.getOptions(f),h=b.getControlOptions(f),i=b.getEvents(a,f),j=new google.maps.drawing.DrawingManager({drawingMode:g.drawingmode,drawingControl:g.drawingcontrol,drawingControlOptions:h.drawingControlOptions,circleOptions:g.circleoptions,markerOptions:g.markeroptions,polygonOptions:g.polygonoptions,polylineOptions:g.polylineoptions,rectangleOptions:g.rectangleoptions}),i=b.getEvents(a,f);for(var k in i)google.maps.event.addListener(j,k,i[k]);e.addObject("mapDrawingManager",j)}}}])}(),function(){"use strict";angular.module("ngMap").directive("dynamicMapsEngineLayer",["Attr2Options",function(a){var b=a,c=function(a,b){var c=new google.maps.visualization.DynamicMapsEngineLayer(a);for(var d in b)google.maps.event.addListener(c,d,b[d]);return c};return{restrict:"E",require:"^map",link:function(a,d,e,f){var g=b.filter(e),h=b.getOptions(g),i=b.getEvents(a,g,i),j=c(h,i);f.addObject("mapsEngineLayers",j)}}}])}(),function(){"use strict";angular.module("ngMap").directive("fusionTablesLayer",["Attr2Options",function(a){var b=a,c=function(a,b){var c=new google.maps.FusionTablesLayer(a);for(var d in b)google.maps.event.addListener(c,d,b[d]);return c};return{restrict:"E",require:"^map",link:function(a,d,e,f){var g=b.filter(e),h=b.getOptions(g),i=b.getEvents(a,g,i),j=c(h,i);f.addObject("fusionTablesLayers",j)}}}])}(),function(){"use strict";angular.module("ngMap").directive("heatmapLayer",["Attr2Options","$window",function(a,b){var c=a;return{restrict:"E",require:"^map",link:function(a,d,e,f){var g=c.filter(e),h=c.getOptions(g);if(h.data=b[e.data]||a[e.data],!(h.data instanceof Array))throw"invalid heatmap data";h.data=new google.maps.MVCArray(h.data);var i=new google.maps.visualization.HeatmapLayer(h);c.getEvents(a,g);f.addObject("heatmapLayers",i)}}}])}(),function(){"use strict";var a=function(a,b,c,d){var e=a,f=function(a,d,e){var f;!a.position||a.position instanceof google.maps.LatLng||delete a.position,f=new google.maps.InfoWindow(a),Object.keys(d).length>0;for(var g in d)g&&google.maps.event.addListener(f,g,d[g]);var h=e.html().trim();if(1!=angular.element(h).length)throw"info-window working as a template must have a container";return f.__template=h.replace(/\s?ng-non-bindable[='"]+/,""),f.__compile=function(a,c){c&&(a["this"]=c);var d=b(f.__template)(a);f.setContent(d[0]),a.$apply()},f.__open=function(a,b,d){c(function(){f.__compile(b,d),d&&d.getPosition?f.open(a,d):d&&d instanceof google.maps.LatLng?(f.open(a),f.setPosition(d)):f.open(a)})},f},g=function(a,b,c,g){b.css("display","none");var h,i=e.orgAttributes(b),j=e.filter(c),k=e.getOptions(j,a),l=e.getEvents(a,j);!k.position||k.position instanceof google.maps.LatLng||(h=k.position);var m=f(k,l,b);h&&g.getGeoLocation(h).then(function(b){m.setPosition(b),m.__open(g.map,a,b);var e=c.geoCallback;e&&d(e)(a)}),g.addObject("infoWindows",m),g.observeAttrSetObj(i,c,m),a.$on("mapInitialized",function(b,c){if(m.visible&&m.__open(c,a),m.visibleOnMarker){var d=m.visibleOnMarker;m.__open(c,a,c.markers[d])}}),a.showInfoWindow=function(b,c,d){var e=g.map.infoWindows[c],f=d?d:this.getPosition?this:null;e.__open(g.map,a,f),g.singleInfoWindow&&(g.lastInfoWindow&&a.hideInfoWindow(b,g.lastInfoWindow),g.lastInfoWindow=c)},a.hideInfoWindow=a.hideInfoWindow||function(a,b){var c=g.map.infoWindows[b];c.close()}};return{restrict:"E",require:"^map",link:g}};a.$inject=["Attr2Options","$compile","$timeout","$parse"],angular.module("ngMap").directive("infoWindow",a)}(),function(){"use strict";angular.module("ngMap").directive("kmlLayer",["Attr2Options",function(a){var b=a,c=function(a,b){var c=new google.maps.KmlLayer(a);for(var d in b)google.maps.event.addListener(c,d,b[d]);return c};return{restrict:"E",require:"^map",link:function(a,d,e,f){var g=b.orgAttributes(d),h=b.filter(e),i=b.getOptions(h),j=b.getEvents(a,h),k=c(i,j);f.addObject("kmlLayers",k),f.observeAttrSetObj(g,e,k),d.bind("$destroy",function(){f.deleteObject("kmlLayers",k)})}}}])}(),function(){"use strict";angular.module("ngMap").directive("mapData",["Attr2Options",function(a){var b=a;return{restrict:"E",require:"^map",link:function(a,c,d,e){var f=b.filter(d),g=b.getOptions(f),h=b.getEvents(a,f,h);a.$on("mapInitialized",function(b,c){for(var d in g)if(d){var e=g[d];"function"==typeof a[e]?c.data[d](a[e]):c.data[d](e)}for(var f in h)h[f]&&c.data.addListener(f,h[f])})}}}])}(),function(){"use strict";var a,b,c,d,e=function(c,e,f){var g=f.mapLazyLoadParams||f.mapLazyLoad;if(window.lazyLoadCallback=function(){a(function(){e.html(d),b(e.contents())(c)},100)},void 0===window.google||void 0===window.google.maps){var h=document.createElement("script");h.src=g+(g.indexOf("?")>-1?"&":"?")+"callback=lazyLoadCallback",document.body.appendChild(h)}else e.html(d),b(e.contents())(c)},f=function(a,b){return!b.mapLazyLoad&&void 0,d=a.html(),c=b.mapLazyLoad,document.querySelector('script[src="'+c+(c.indexOf("?")>-1?"&":"?")+'callback=lazyLoadCallback"]')?!1:(a.html(""),{pre:e})},g=function(c,d){return b=c,a=d,{compile:f}};g.$inject=["$compile","$timeout"],angular.module("ngMap").directive("mapLazyLoad",g)}(),function(){"use strict";angular.module("ngMap").directive("mapType",["Attr2Options","$window",function(a,b){return{restrict:"E",require:"^map",link:function(a,c,d,e){var f,g=d.name;if(!g)throw"invalid map-type name";if(d.object){var h=a[d.object]?a:b;f=h[d.object],"function"==typeof f&&(f=new f)}if(!f)throw"invalid map-type object";a.$on("mapInitialized",function(a,b){b.mapTypes.set(g,f)}),e.addObject("mapTypes",f)}}}])}(),function(){"use strict";function a(a,b){var c;return a.currentStyle?c=a.currentStyle[b]:window.getComputedStyle&&(c=document.defaultView.getComputedStyle(a,null).getPropertyValue(b)),c}var b=function(b,c,d){var e=b,f=function(b,f,g,h){var i=e.orgAttributes(f);b.google=google;var j=document.createElement("div");j.style.width="100%",j.style.height="100%",f.prepend(j),"false"!==g.defaultStyle&&("block"!=a(f[0],"display")&&f.css("display","block"),a(f[0],"height").match(/^(0|auto)/)&&f.css("height","300px")),f[0].addEventListener("dragstart",function(a){return a.preventDefault(),!1});var k=function(a,e){var f=new google.maps.Map(j,{});f.markers={},f.shapes={},c(function(){google.maps.event.trigger(f,"resize")}),a.zoom=a.zoom||15;var k=a.center;k?k instanceof google.maps.LatLng||(delete a.center,h.getGeoLocation(k,m.geoLocationOptions).then(function(a){f.setCenter(a);var c=g.geoCallback;c&&d(c)(b)},function(a){f.setCenter(m.geoFallbackCenter)})):a.center=new google.maps.LatLng(0,0),f.setOptions(a),h.singleInfoWindow=a.singleInfoWindow;for(var l in e)l&&google.maps.event.addListener(f,l,e[l]);h.observeAttrSetObj(i,g,f),h.map=f,h.addObjects(h._objects),b.map=f,b.map.scope=b,google.maps.event.addListenerOnce(f,"idle",function(){b.$emit("mapInitialized",f),g.zoomToIncludeMarkers&&(h.zoomToIncludeMarkers(),"auto"==g.zoomToIncludeMarkers&&b.$on("objectChanged",function(a,b){"markers"==b[0]&&h.zoomToIncludeMarkers()}))})},l=e.filter(g),m=e.getOptions(l,b),n=e.getControlOptions(l),o=angular.extend(m,n),p=e.getEvents(b,l);g.initEvent?b.$on(g.initEvent,function(){!h.map&&k(o,p)}):k(o,p)};return{restrict:"AE",controller:"MapController",link:f}};angular.module("ngMap").directive("map",["Attr2Options","$timeout","$parse",b])}(),function(){"use strict";var a=function(a,b,c,d,e){var f=e,g=this,h=function(a,b,c){a.$observe(b,function(a){if(a){var d=f.camelCase("set-"+b),e=f.toOptionValue(a,{key:b});c[d]&&(b.match(/center|position/)&&"string"==typeof e?g.getGeoLocation(e).then(function(a){c[d](a)}):c[d](e))}})};this.map=null,this._objects=[],this.addObject=function(b,c){if(this.map){this.map[b]=this.map[b]||{};var d=Object.keys(this.map[b]).length;this.map[b][c.id||d]=c,"infoWindows"!=b&&c.setMap&&c.setMap&&c.setMap(this.map),c.centered&&c.position&&this.map.setCenter(c.position),a.$emit("objectChanged",[b,this.map[b]])}else c.groupName=b,this._objects.push(c)},this.deleteObject=function(b,c){if(c.map){var d=c.map[b];for(var e in d)d[e]===c&&delete d[e];c.map&&c.setMap&&c.setMap(null),a.$emit("objectChanged",[b,this.map[b]])}},this.addObjects=function(a){for(var b=0;b<a.length;b++){var c=a[b];c instanceof google.maps.Marker?this.addObject("markers",c):c instanceof google.maps.Circle||c instanceof google.maps.Polygon||c instanceof google.maps.Polyline||c instanceof google.maps.Rectangle||c instanceof google.maps.GroundOverlay?this.addObject("shapes",c):this.addObject(c.groupName,c)}},this.getGeoLocation=function(a,e){var f=b.defer();return!a||a.match(/^current/i)?c.getCurrentPosition(e).then(function(a){var b=a.coords.latitude,c=a.coords.longitude,d=new google.maps.LatLng(b,c);f.resolve(d)},function(a){f.reject(a)}):d.geocode({address:a}).then(function(a){f.resolve(a[0].geometry.location)},function(a){f.reject(a)}),f.promise},this.observeAttrSetObj=function(a,b,c){var d=f.getAttrsToObserve(a);Object.keys(d).length;for(var e=0;e<d.length;e++)h(b,d[e],c)},this.zoomToIncludeMarkers=function(){var a=new google.maps.LatLngBounds;for(var b in this.map.markers)a.extend(this.map.markers[b].getPosition());this.map.fitBounds(a)}};a.$inject=["$scope","$q","NavigatorGeolocation","GeoCoder","Attr2Options"],angular.module("ngMap").controller("MapController",a)}(),function(){"use strict";angular.module("ngMap").directive("mapsEngineLayer",["Attr2Options",function(a){var b=a,c=function(a,b){var c=new google.maps.visualization.MapsEngineLayer(a);for(var d in b)google.maps.event.addListener(c,d,b[d]);return c};return{restrict:"E",require:"^map",link:function(a,d,e,f){var g=b.filter(e),h=b.getOptions(g),i=b.getEvents(a,g,i),j=c(h,i);f.addObject("mapsEngineLayers",j)}}}])}(),function(){"use strict";var a=function(a,b){var c;a.position instanceof google.maps.LatLng||(a.position=new google.maps.LatLng(0,0)),c=new google.maps.Marker(a),Object.keys(b).length>0;for(var d in b)d&&google.maps.event.addListener(c,d,b[d]);return c},b=function(b,c){var d=b,e=function(b,e,f,g){var h,i=d.orgAttributes(e),j=d.filter(f),k=d.getOptions(j,b),l=d.getEvents(b,j);k.position instanceof google.maps.LatLng||(h=k.position);var m=a(k,l);g.addObject("markers",m),h&&g.getGeoLocation(h).then(function(a){m.setPosition(a),k.centered&&m.map.setCenter(a);var d=f.geoCallback;d&&c(d)(b)}),k.noWatcher||g.observeAttrSetObj(i,f,m),e.bind("$destroy",function(){g.deleteObject("markers",m)})};return{restrict:"E",require:"^map",link:e}};b.$inject=["Attr2Options","$parse"],angular.module("ngMap").directive("marker",b)}(),function(){"use strict";angular.module("ngMap").directive("overlayMapType",["Attr2Options","$window",function(a,b){return{restrict:"E",require:"^map",link:function(a,c,d,e){var f,g=d.initMethod||"insertAt";if(d.object){var h=a[d.object]?a:b;f=h[d.object],"function"==typeof f&&(f=new f)}if(!f)throw"invalid map-type object";a.$on("mapInitialized",function(a,b){if("insertAt"==g){var c=parseInt(d.index,10);b.overlayMapTypes.insertAt(c,f)}else"push"==g&&b.overlayMapTypes.push(f)}),e.addObject("overlayMapTypes",f)}}}])}(),function(){"use strict";var a=function(a,b){var c=a,d=function(a,d,e,f){if("false"===e.placesAutoComplete)return!1;var g=c.filter(e),h=c.getOptions(g),i=c.getEvents(a,g),j=new google.maps.places.Autocomplete(d[0],h);for(var k in i)google.maps.event.addListener(j,k,i[k]);var l=function(){b(function(){f&&f.$setViewValue(d.val())},100)};google.maps.event.addListener(j,"place_changed",l),d[0].addEventListener("change",l),e.$observe("types",function(a){if(a){var b=c.toOptionValue(a,{key:"types"});j.setTypes(b)}})};return{restrict:"A",require:"?ngModel",link:d}};a.$inject=["Attr2Options","$timeout"],angular.module("ngMap").directive("placesAutoComplete",a)}(),function(){"use strict";var a=function(a,b){var c,d=a.name;switch(delete a.name,d){case"circle":a.center instanceof google.maps.LatLng||(a.center=new google.maps.LatLng(0,0)),c=new google.maps.Circle(a);break;case"polygon":c=new google.maps.Polygon(a);break;case"polyline":c=new google.maps.Polyline(a);break;case"rectangle":c=new google.maps.Rectangle(a);break;case"groundOverlay":case"image":var e=a.url,f={opacity:a.opacity,clickable:a.clickable,id:a.id};c=new google.maps.GroundOverlay(e,a.bounds,f)}for(var g in b)b[g]&&google.maps.event.addListener(c,g,b[g]);return c},b=function(b,c){var d=b,e=function(b,e,f,g){var h,i,j=d.orgAttributes(e),k=d.filter(f),l=d.getOptions(k),m=d.getEvents(b,k);i=l.name,l.center instanceof google.maps.LatLng||(h=l.center);var n=a(l,m);g.addObject("shapes",n),h&&"circle"==i&&g.getGeoLocation(h).then(function(a){n.setCenter(a),n.centered&&n.map.setCenter(a);var d=f.geoCallback;d&&c(d)(b)}),g.observeAttrSetObj(j,f,n),e.bind("$destroy",function(){g.deleteObject("shapes",n)})};return{restrict:"E",require:"^map",link:e}};b.$inject=["Attr2Options","$parse"],angular.module("ngMap").directive("shape",b)}(),function(){"use strict";var a=function(a){var b=a,c=function(a,b,c){var d,e;b.container&&(e=document.getElementById(b.container),e=e||document.querySelector(b.container)),e?d=new google.maps.StreetViewPanorama(e,b):(d=a.getStreetView(),d.setOptions(b));for(var f in c)f&&google.maps.event.addListener(d,f,c[f]);return d},d=function(a,d,e,f){var g=(b.orgAttributes(d),b.filter(e)),h=b.getOptions(g),i=b.getControlOptions(g),j=angular.extend(h,i),k=b.getEvents(a,g);a.$on("mapInitialized",function(a,b){var d=c(b,j,k);b.setStreetView(d),!d.getPosition()&&d.setPosition(b.getCenter()),google.maps.event.addListener(d,"position_changed",function(){d.getPosition()!==b.getCenter()&&b.setCenter(d.getPosition())});var e=google.maps.event.addListener(b,"center_changed",function(){d.setPosition(b.getCenter()),google.maps.event.removeListener(e)})})};return{restrict:"E",require:"^map",link:d}};a.$inject=["Attr2Options"],angular.module("ngMap").directive("streetViewPanorama",a)}(),function(){"use strict";angular.module("ngMap").directive("trafficLayer",["Attr2Options",function(a){var b=a,c=function(a,b){var c=new google.maps.TrafficLayer(a);for(var d in b)google.maps.event.addListener(c,d,b[d]);return c};return{restrict:"E",require:"^map",link:function(a,d,e,f){var g=b.orgAttributes(d),h=b.filter(e),i=b.getOptions(h),j=b.getEvents(a,h),k=c(i,j);f.addObject("trafficLayers",k),f.observeAttrSetObj(g,e,k),d.bind("$destroy",function(){f.deleteObject("trafficLayers",k)})}}}])}(),function(){"use strict";angular.module("ngMap").directive("transitLayer",["Attr2Options",function(a){var b=a,c=function(a,b){var c=new google.maps.TransitLayer(a);for(var d in b)google.maps.event.addListener(c,d,b[d]);return c};return{restrict:"E",require:"^map",link:function(a,d,e,f){var g=b.orgAttributes(d),h=b.filter(e),i=b.getOptions(h),j=b.getEvents(a,h),k=c(i,j);f.addObject("transitLayers",k),f.observeAttrSetObj(g,e,k),d.bind("$destroy",function(){f.deleteObject("transitLayers",k)})}}}])}(),function(){"use strict";angular.module("ngMap").directive("weatherLayer",["Attr2Options",function(a){var b=a,c=function(a,b){var c=new google.maps.weather.WeatherLayer(a);for(var d in b)google.maps.event.addListener(c,d,b[d]);return c};return{restrict:"E",require:"^map",link:function(a,d,e,f){var g=b.orgAttributes(d),h=b.filter(e),i=b.getOptions(h),j=b.getEvents(a,h),k=c(i,j);f.addObject("weatherLayers",k),f.observeAttrSetObj(g,e,k),d.bind("$destroy",function(){f.deleteObject("weatherLayers",k)})}}}])}(),function(a,b){"use strict";var c=["ng","oc.lazyLoad"],d={},e=[],f=[],g=[],h=[],i=a.noop,j={},k=[],l=a.module("oc.lazyLoad",["ng"]);l.provider("$ocLazyLoad",["$controllerProvider","$provide","$compileProvider","$filterProvider","$injector","$animateProvider",function(l,m,p,q,r,s){function t(b,d,e){if(d){var f,h,l,m=[];for(f=d.length-1;f>=0;f--)if(h=d[f],a.isString(h)||(h=w(h)),h&&-1===k.indexOf(h)&&(!y[h]||-1!==g.indexOf(h))){var n=-1===c.indexOf(h);if(l=o(h),n&&(c.push(h),t(b,l.requires,e)),l._runBlocks.length>0)for(j[h]=[];l._runBlocks.length>0;)j[h].push(l._runBlocks.shift());a.isDefined(j[h])&&(n||e.rerun)&&(m=m.concat(j[h])),v(b,l._invokeQueue,h,e.reconfig),v(b,l._configBlocks,h,e.reconfig),i(n?"ocLazyLoad.moduleLoaded":"ocLazyLoad.moduleReloaded",h),d.pop(),k.push(h)}var p=b.getInstanceInjector();a.forEach(m,function(a){p.invoke(a)})}}function u(b,c){function e(b,c){var d,e=!0;return c.length&&(d=f(b),a.forEach(c,function(a){e=e&&f(a)!==d})),e}function f(b){return a.isArray(b)?F(b.toString()):a.isObject(b)?F(E(b)):a.isDefined(b)&&null!==b?F(b.toString()):b}var g=b[2][0],h=b[1],j=!1;a.isUndefined(d[c])&&(d[c]={}),a.isUndefined(d[c][h])&&(d[c][h]={});var k=function(a,b){d[c][h].hasOwnProperty(a)||(d[c][h][a]=[]),e(b,d[c][h][a])&&(j=!0,d[c][h][a].push(b),i("ocLazyLoad.componentLoaded",[c,h,a]))};if(a.isString(g))k(g,b[2][1]);else{if(!a.isObject(g))return!1;a.forEach(g,function(b,c){a.isString(b)?k(b,g[1]):k(c,b)})}return j}function v(b,c,d,f){if(c){var g,h,i,j;for(g=0,h=c.length;h>g;g++)if(i=c[g],a.isArray(i)){if(null!==b){if(!b.hasOwnProperty(i[0]))throw new Error("unsupported provider "+i[0]);j=b[i[0]]}var k=u(i,d);if("invoke"!==i[1])k&&a.isDefined(j)&&j[i[1]].apply(j,i[2]);else{var l=function(b){var c=e.indexOf(d+"-"+b);(-1===c||f)&&(-1===c&&e.push(d+"-"+b),a.isDefined(j)&&j[i[1]].apply(j,i[2]))};if(a.isFunction(i[2][0]))l(i[2][0]);else if(a.isArray(i[2][0]))for(var m=0,n=i[2][0].length;n>m;m++)a.isFunction(i[2][0][m])&&l(i[2][0][m])}}}}function w(b){var c=null;return a.isString(b)?c=b:a.isObject(b)&&b.hasOwnProperty("name")&&a.isString(b.name)&&(c=b.name),c}function x(b){if(!a.isString(b))return!1;try{return o(b)}catch(c){if(/No module/.test(c)||c.message.indexOf("$injector:nomod")>-1)return!1}}var y={},z={$controllerProvider:l,$compileProvider:p,$filterProvider:q,$provide:m,$injector:r,$animateProvider:s},A=!1,B=!1,C=[],D={};C.push=function(a){-1===this.indexOf(a)&&Array.prototype.push.apply(this,arguments)},this.config=function(b){a.isDefined(b.modules)&&(a.isArray(b.modules)?a.forEach(b.modules,function(a){y[a.name]=a}):y[b.modules.name]=b.modules),a.isDefined(b.debug)&&(A=b.debug),a.isDefined(b.events)&&(B=b.events)},this._init=function(d){if(0===f.length){var e=[d],g=["ng:app","ng-app","x-ng-app","data-ng-app"],i=/\sng[:\-]app(:\s*([\w\d_]+);?)?\s/,j=function(a){return a&&e.push(a)};a.forEach(g,function(b){g[b]=!0,j(document.getElementById(b)),b=b.replace(":","\\:"),"undefined"!=typeof d[0]&&d[0].querySelectorAll&&(a.forEach(d[0].querySelectorAll("."+b),j),a.forEach(d[0].querySelectorAll("."+b+"\\:"),j),a.forEach(d[0].querySelectorAll("["+b+"]"),j))}),a.forEach(e,function(b){if(0===f.length){var c=" "+d.className+" ",e=i.exec(c);e?f.push((e[2]||"").replace(/\s+/g,",")):a.forEach(b.attributes,function(a){0===f.length&&g[a.name]&&f.push(a.value)})}})}0!==f.length||(b.jasmine||b.mocha)&&a.isDefined(a.mock)||console.error("No module found during bootstrap, unable to init ocLazyLoad. You should always use the ng-app directive or angular.boostrap when you use ocLazyLoad.");var k=function l(b){if(-1===c.indexOf(b)){c.push(b);var d=a.module(b);v(null,d._invokeQueue,b),v(null,d._configBlocks,b),a.forEach(d.requires,l)}};a.forEach(f,function(a){k(a)}),f=[],h.pop()};var E=function(b){try{return JSON.stringify(b)}catch(c){var d=[];return JSON.stringify(b,function(b,c){if(a.isObject(c)&&null!==c){if(-1!==d.indexOf(c))return;d.push(c)}return c})}},F=function(a){var b,c,d,e=0;if(0==a.length)return e;for(b=0,d=a.length;d>b;b++)c=a.charCodeAt(b),e=(e<<5)-e+c,e|=0;return e};this.$get=["$log","$rootElement","$rootScope","$cacheFactory","$q",function(b,e,g,j,l){function m(a){var c=l.defer();return b.error(a.message),c.reject(a),c.promise}var p,q=j("ocLazyLoad");return A||(b={},b.error=a.noop,b.warn=a.noop,b.info=a.noop),z.getInstanceInjector=function(){return p?p:p=e.data("$injector")||a.injector()},i=function(a,c){B&&g.$broadcast(a,c),A&&b.info(a,c)},{_broadcast:i,_$log:b,_getFilesCache:function(){return q},toggleWatch:function(a){a?h.push(!0):h.pop()},getModuleConfig:function(b){if(!a.isString(b))throw new Error("You need to give the name of the module to get");return y[b]?a.copy(y[b]):null},setModuleConfig:function(b){if(!a.isObject(b))throw new Error("You need to give the module config object to set");return y[b.name]=b,b},getModules:function(){return c},isLoaded:function(b){var d=function(a){var b=c.indexOf(a)>-1;return b||(b=!!x(a)),b};if(a.isString(b)&&(b=[b]),a.isArray(b)){var e,f;for(e=0,f=b.length;f>e;e++)if(!d(b[e]))return!1;return!0}throw new Error("You need to define the module(s) name(s)")},_getModuleName:w,_getModule:function(a){try{return o(a)}catch(b){throw(/No module/.test(b)||b.message.indexOf("$injector:nomod")>-1)&&(b.message='The module "'+E(a)+'" that you are trying to load does not exist. '+b.message),b}},moduleExists:x,_loadDependencies:function(b,c){var d,e,f,g=[],h=this;if(b=h._getModuleName(b),null===b)return l.when();try{d=h._getModule(b)}catch(i){return m(i)}return e=h.getRequires(d),a.forEach(e,function(d){if(a.isString(d)){var e=h.getModuleConfig(d);if(null===e)return void C.push(d);d=e,e.name=void 0}if(h.moduleExists(d.name))return f=d.files.filter(function(a){return h.getModuleConfig(d.name).files.indexOf(a)<0}),0!==f.length&&h._$log.warn('Module "',b,'" attempted to redefine configuration for dependency. "',d.name,'"\n Additional Files Loaded:',f),a.isDefined(h.filesLoader)?void g.push(h.filesLoader(d,c).then(function(){return h._loadDependencies(d)})):m(new Error("Error: New dependencies need to be loaded from external files ("+d.files+"), but no loader has been defined."));if(a.isArray(d)){var i=[];a.forEach(d,function(a){var b=h.getModuleConfig(a);null===b?i.push(a):b.files&&(i=i.concat(b.files))}),i.length>0&&(d={files:i})}else a.isObject(d)&&d.hasOwnProperty("name")&&d.name&&(h.setModuleConfig(d),C.push(d.name));if(a.isDefined(d.files)&&0!==d.files.length){if(!a.isDefined(h.filesLoader))return m(new Error('Error: the module "'+d.name+'" is defined in external files ('+d.files+"), but no loader has been defined."));g.push(h.filesLoader(d,c).then(function(){return h._loadDependencies(d)}))}}),l.all(g)},inject:function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],d=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],e=this,g=l.defer();if(a.isDefined(b)&&null!==b){if(a.isArray(b)){var h=[];return a.forEach(b,function(a){h.push(e.inject(a,c,d))}),l.all(h)}e._addToLoadList(e._getModuleName(b),!0,d)}if(f.length>0){var i=f.slice(),j=function m(a){C.push(a),D[a]=g.promise,e._loadDependencies(a,c).then(function(){try{k=[],t(z,C,c)}catch(a){return e._$log.error(a.message),void g.reject(a)}f.length>0?m(f.shift()):g.resolve(i)},function(a){g.reject(a)})};j(f.shift())}else{if(c&&c.name&&D[c.name])return D[c.name];g.resolve()}return g.promise},getRequires:function(b){var d=[];return a.forEach(b.requires,function(a){-1===c.indexOf(a)&&d.push(a)}),d},_invokeQueue:v,_registerInvokeList:u,_register:t,_addToLoadList:n,_unregister:function(b){a.isDefined(b)&&a.isArray(b)&&a.forEach(b,function(a){d[a]=void 0})}}}],this._init(a.element(b.document))}]);var m=a.bootstrap;a.bootstrap=function(b,c,d){return a.forEach(c.slice(),function(a){n(a,!0,!0)}),m(b,c,d)};var n=function(b,c,d){(h.length>0||c)&&a.isString(b)&&-1===f.indexOf(b)&&(f.push(b),d&&g.push(b))},o=a.module;a.module=function(a,b,c){return n(a,!1,!0),o(a,b,c)},"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="oc.lazyLoad")}(angular,window),function(a){"use strict";a.module("oc.lazyLoad").directive("ocLazyLoad",["$ocLazyLoad","$compile","$animate","$parse","$timeout",function(b,c,d,e,f){return{restrict:"A",terminal:!0,priority:1e3,compile:function(f,g){var h=f[0].innerHTML;return f.html(""),function(f,g,i){var j=e(i.ocLazyLoad);f.$watch(function(){return j(f)||i.ocLazyLoad},function(e){a.isDefined(e)&&b.load(e).then(function(){d.enter(h,g),c(g.contents())(f)})},!0)}}}}])}(angular),function(a){"use strict";a.module("oc.lazyLoad").config(["$provide",function(b){b.decorator("$ocLazyLoad",["$delegate","$q","$window","$interval",function(b,c,d,e){var f=!1,g=!1,h=d.document.getElementsByTagName("head")[0]||d.document.getElementsByTagName("body")[0];return b.buildElement=function(i,j,k){var l,m,n=c.defer(),o=b._getFilesCache(),p=function(a){var b=(new Date).getTime();return a.indexOf("?")>=0?"&"===a.substring(0,a.length-1)?a+"_dc="+b:a+"&_dc="+b:a+"?_dc="+b};switch(a.isUndefined(o.get(j))&&o.put(j,n.promise),i){case"css":l=d.document.createElement("link"),l.type="text/css",l.rel="stylesheet",l.href=k.cache===!1?p(j):j;break;case"js":l=d.document.createElement("script"),l.src=k.cache===!1?p(j):j;break;default:o.remove(j),n.reject(new Error('Requested type "'+i+'" is not known. Could not inject "'+j+'"'));
+}l.onload=l.onreadystatechange=function(a){l.readyState&&!/^c|loade/.test(l.readyState)||m||(l.onload=l.onreadystatechange=null,m=1,b._broadcast("ocLazyLoad.fileLoaded",j),n.resolve())},l.onerror=function(){o.remove(j),n.reject(new Error("Unable to load "+j))},l.async=k.serie?0:1;var q=h.lastChild;if(k.insertBefore){var r=a.element(a.isDefined(window.jQuery)?k.insertBefore:document.querySelector(k.insertBefore));r&&r.length>0&&(q=r[0])}if(q.parentNode.insertBefore(l,q),"css"==i){if(!f){var s=d.navigator.userAgent.toLowerCase();if(/iP(hone|od|ad)/.test(d.navigator.platform)){var t=d.navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),u=parseFloat([parseInt(t[1],10),parseInt(t[2],10),parseInt(t[3]||0,10)].join("."));g=6>u}else if(s.indexOf("android")>-1){var v=parseFloat(s.slice(s.indexOf("android")+8));g=4.4>v}else if(s.indexOf("safari")>-1){var w=s.match(/version\/([\.\d]+)/i);g=w&&w[1]&&parseFloat(w[1])<6}}if(g)var x=1e3,y=e(function(){try{l.sheet.cssRules,e.cancel(y),l.onload()}catch(a){--x<=0&&l.onerror()}},20)}return n.promise},b}])}])}(angular),function(a){"use strict";a.module("oc.lazyLoad").config(["$provide",function(b){b.decorator("$ocLazyLoad",["$delegate","$q",function(b,c){return b.filesLoader=function(d){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],f=[],g=[],h=[],i=[],j=null,k=b._getFilesCache();b.toggleWatch(!0),a.extend(e,d);var l=function(c){var d,l=null;if(a.isObject(c)&&(l=c.type,c=c.path),j=k.get(c),a.isUndefined(j)||e.cache===!1){if(null!==(d=/^(css|less|html|htm|js)?(?=!)/.exec(c))&&(l=d[1],c=c.substr(d[1].length+1,c.length)),!l)if(null!==(d=/[.](css|less|html|htm|js)?((\?|#).*)?$/.exec(c)))l=d[1];else{if(b.jsLoader.hasOwnProperty("ocLazyLoadLoader")||!b.jsLoader.hasOwnProperty("requirejs"))return void b._$log.error("File type could not be determined. "+c);l="js"}"css"!==l&&"less"!==l||-1!==f.indexOf(c)?"html"!==l&&"htm"!==l||-1!==g.indexOf(c)?"js"===l||-1===h.indexOf(c)?h.push(c):b._$log.error("File type is not valid. "+c):g.push(c):f.push(c)}else j&&i.push(j)};if(e.serie?l(e.files.shift()):a.forEach(e.files,function(a){l(a)}),f.length>0){var m=c.defer();b.cssLoader(f,function(c){a.isDefined(c)&&b.cssLoader.hasOwnProperty("ocLazyLoadLoader")?(b._$log.error(c),m.reject(c)):m.resolve()},e),i.push(m.promise)}if(g.length>0){var n=c.defer();b.templatesLoader(g,function(c){a.isDefined(c)&&b.templatesLoader.hasOwnProperty("ocLazyLoadLoader")?(b._$log.error(c),n.reject(c)):n.resolve()},e),i.push(n.promise)}if(h.length>0){var o=c.defer();b.jsLoader(h,function(c){a.isDefined(c)&&(b.jsLoader.hasOwnProperty("ocLazyLoadLoader")||b.jsLoader.hasOwnProperty("requirejs"))?(b._$log.error(c),o.reject(c)):o.resolve()},e),i.push(o.promise)}if(0===i.length){var p=c.defer(),q="Error: no file to load has been found, if you're trying to load an existing module you should use the 'inject' method instead of 'load'.";return b._$log.error(q),p.reject(q),p.promise}return e.serie&&e.files.length>0?c.all(i).then(function(){return b.filesLoader(d,e)}):c.all(i)["finally"](function(a){return b.toggleWatch(!1),a})},b.load=function(d){var e,f=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],g=this,h=null,i=[],j=c.defer(),k=a.copy(d),l=a.copy(f);if(a.isArray(k))return a.forEach(k,function(a){i.push(g.load(a,l))}),c.all(i).then(function(a){j.resolve(a)},function(a){j.reject(a)}),j.promise;if(a.isString(k)?(h=g.getModuleConfig(k),h||(h={files:[k]})):a.isObject(k)&&(h=a.isDefined(k.path)&&a.isDefined(k.type)?{files:[k]}:g.setModuleConfig(k)),null===h){var m=g._getModuleName(k);return e='Module "'+(m||"unknown")+'" is not configured, cannot load.',b._$log.error(e),j.reject(new Error(e)),j.promise}a.isDefined(h.template)&&(a.isUndefined(h.files)&&(h.files=[]),a.isString(h.template)?h.files.push(h.template):a.isArray(h.template)&&h.files.concat(h.template));var n=a.extend({},l,h);return a.isUndefined(h.files)&&a.isDefined(h.name)&&b.moduleExists(h.name)?b.inject(h.name,n,!0):(b.filesLoader(h,n).then(function(){b.inject(null,n).then(function(a){j.resolve(a)},function(a){j.reject(a)})},function(a){j.reject(a)}),j.promise)},b}])}])}(angular),function(a){"use strict";a.module("oc.lazyLoad").config(["$provide",function(b){b.decorator("$ocLazyLoad",["$delegate","$q",function(b,c){return b.cssLoader=function(d,e,f){var g=[];a.forEach(d,function(a){g.push(b.buildElement("css",a,f))}),c.all(g).then(function(){e()},function(a){e(a)})},b.cssLoader.ocLazyLoadLoader=!0,b}])}])}(angular),function(a){"use strict";a.module("oc.lazyLoad").config(["$provide",function(b){b.decorator("$ocLazyLoad",["$delegate","$q",function(b,c){return b.jsLoader=function(d,e,f){var g=[];a.forEach(d,function(a){g.push(b.buildElement("js",a,f))}),c.all(g).then(function(){e()},function(a){e(a)})},b.jsLoader.ocLazyLoadLoader=!0,b}])}])}(angular),function(a){"use strict";a.module("oc.lazyLoad").config(["$provide",function(b){b.decorator("$ocLazyLoad",["$delegate","$templateCache","$q","$http",function(b,c,d,e){return b.templatesLoader=function(f,g,h){var i=[],j=b._getFilesCache();return a.forEach(f,function(b){var f=d.defer();i.push(f.promise),e.get(b,h).success(function(d){a.isString(d)&&d.length>0&&a.forEach(a.element(d),function(a){"SCRIPT"===a.nodeName&&"text/ng-template"===a.type&&c.put(a.id,a.innerHTML)}),a.isUndefined(j.get(b))&&j.put(b,!0),f.resolve()}).error(function(a){f.reject(new Error('Unable to load template file "'+b+'": '+a))})}),d.all(i).then(function(){g()},function(a){g(a)})},b.templatesLoader.ocLazyLoadLoader=!0,b}])}])}(angular),Array.prototype.indexOf||(Array.prototype.indexOf=function(a,b){var c;if(null==this)throw new TypeError('"this" is null or not defined');var d=Object(this),e=d.length>>>0;if(0===e)return-1;var f=+b||0;if(Math.abs(f)===1/0&&(f=0),f>=e)return-1;for(c=Math.max(f>=0?f:e-Math.abs(f),0);e>c;){if(c in d&&d[c]===a)return c;c++}return-1}),"undefined"==typeof PDFJS&&(("undefined"!=typeof window?window:this).PDFJS={}),PDFJS.version="1.1.551",PDFJS.build="2a5616c",function(){"use strict";function a(a){PDFJS.verbosity>=PDFJS.VERBOSITY_LEVELS.infos&&console.log("Info: "+a)}function b(a){PDFJS.verbosity>=PDFJS.VERBOSITY_LEVELS.warnings&&console.log("Warning: "+a)}function c(a){b("Deprecated API usage: "+a)}function d(a){throw PDFJS.verbosity>=PDFJS.VERBOSITY_LEVELS.errors&&(console.log("Error: "+a),console.log(e())),I.notify(H.unknown),new Error(a)}function e(){try{throw new Error}catch(a){return a.stack?a.stack.split("\n").slice(2).join("\n"):""}}function f(a,b){a||d(b)}function g(a,b){if(!b)return a;if(/^[a-z][a-z0-9+\-.]*:/i.test(b))return b;var c;if("/"===b.charAt(0))return c=a.indexOf("://"),"/"===b.charAt(1)?++c:c=a.indexOf("/",c+3),a.substring(0,c)+b;var d=a.length;c=a.lastIndexOf("#"),d=c>=0?c:d,c=a.lastIndexOf("?",d),d=c>=0?c:d;var e=a.lastIndexOf("/",d);return a.substring(0,e+1)+b}function h(a,b){if(!a)return!1;var c=/^[a-z][a-z0-9+\-.]*(?=:)/i.exec(a);if(!c)return b;switch(c=c[0].toLowerCase()){case"http":case"https":case"ftp":case"mailto":case"tel":return!0;default:return!1}}function i(a,b,c){return Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!1}),c}function j(){switch(PDFJS.openExternalLinksInNewWindow&&(b("PDFJS.openExternalLinksInNewWindow is deprecated, use PDFJS.externalLinkTarget instead."),PDFJS.externalLinkTarget===J.NONE&&(PDFJS.externalLinkTarget=J.BLANK),PDFJS.openExternalLinksInNewWindow=!1),PDFJS.externalLinkTarget){case J.NONE:return!1;case J.SELF:case J.BLANK:case J.PARENT:case J.TOP:return!0}return b("PDFJS.externalLinkTarget is invalid: "+PDFJS.externalLinkTarget),PDFJS.externalLinkTarget=J.NONE,!1}function k(a){f(null!==a&&"object"==typeof a&&void 0!==a.length,"Invalid argument for bytesToString");var b=a.length,c=8192;if(c>b)return String.fromCharCode.apply(null,a);for(var d=[],e=0;b>e;e+=c){var g=Math.min(e+c,b),h=a.subarray(e,g);d.push(String.fromCharCode.apply(null,h))}return d.join("")}function l(a){f("string"==typeof a,"Invalid argument for stringToBytes");for(var b=a.length,c=new Uint8Array(b),d=0;b>d;++d)c[d]=255&a.charCodeAt(d);return c}function m(a){return String.fromCharCode(a>>24&255,a>>16&255,a>>8&255,255&a)}function n(){var a=new Uint8Array(2);a[0]=1;var b=new Uint16Array(a.buffer);return 1===b[0]}function o(){var a=document.createElement("canvas");a.width=a.height=1;var b=a.getContext("2d"),c=b.createImageData(1,1);return"undefined"!=typeof c.data.buffer}function p(a){return"number"==typeof a}function q(a){return a instanceof Array}function r(a){return"object"==typeof a&&null!==a&&void 0!==a.byteLength}function s(){var a={};return a.promise=new Promise(function(b,c){a.resolve=b,a.reject=c}),a}function t(a,b){this.name=a,this.comObj=b,this.callbackIndex=1,this.postMessageTransfers=!0;var c=this.callbacksCapabilities={},e=this.actionHandler={};e.console_log=[function(a){console.log.apply(console,a)}],e.console_error=[function(a){console.error.apply(console,a)}],e._unsupported_feature=[function(a){I.notify(a)}],b.onmessage=function(a){var f=a.data;if(f.isReply){var g=f.callbackId;if(f.callbackId in c){var h=c[g];delete c[g],"error"in f?h.reject(f.error):h.resolve(f.data)}else d("Cannot resolve callback "+g)}else if(f.action in e){var i=e[f.action];f.callbackId?Promise.resolve().then(function(){return i[0].call(i[1],f.data)}).then(function(a){b.postMessage({isReply:!0,callbackId:f.callbackId,data:a})},function(a){a instanceof Error&&(a+=""),b.postMessage({isReply:!0,callbackId:f.callbackId,error:a})}):i[0].call(i[1],f.data)}else d("Unknown action from worker: "+f.action)}}function u(a,c,d){var e=new Image;e.onload=function(){d.resolve(a,e)},e.onerror=function(){d.resolve(a,null),b("Error during JPEG image loading")},e.src=c}function v(a,b){var c=document.createElement("canvas");return c.width=a,c.height=b,c}function w(a){a.mozCurrentTransform||(a._originalSave=a.save,a._originalRestore=a.restore,a._originalRotate=a.rotate,a._originalScale=a.scale,a._originalTranslate=a.translate,a._originalTransform=a.transform,a._originalSetTransform=a.setTransform,a._transformMatrix=a._transformMatrix||[1,0,0,1,0,0],a._transformStack=[],Object.defineProperty(a,"mozCurrentTransform",{get:function(){return this._transformMatrix}}),Object.defineProperty(a,"mozCurrentTransformInverse",{get:function(){var a=this._transformMatrix,b=a[0],c=a[1],d=a[2],e=a[3],f=a[4],g=a[5],h=b*e-c*d,i=c*d-b*e;return[e/h,c/i,d/i,b/h,(e*f-d*g)/i,(c*f-b*g)/h]}}),a.save=function(){var a=this._transformMatrix;this._transformStack.push(a),this._transformMatrix=a.slice(0,6),this._originalSave()},a.restore=function(){var a=this._transformStack.pop();a&&(this._transformMatrix=a,this._originalRestore())},a.translate=function(a,b){var c=this._transformMatrix;c[4]=c[0]*a+c[2]*b+c[4],c[5]=c[1]*a+c[3]*b+c[5],this._originalTranslate(a,b)},a.scale=function(a,b){var c=this._transformMatrix;c[0]=c[0]*a,c[1]=c[1]*a,c[2]=c[2]*b,c[3]=c[3]*b,this._originalScale(a,b)},a.transform=function(b,c,d,e,f,g){var h=this._transformMatrix;this._transformMatrix=[h[0]*b+h[2]*c,h[1]*b+h[3]*c,h[0]*d+h[2]*e,h[1]*d+h[3]*e,h[0]*f+h[2]*g+h[4],h[1]*f+h[3]*g+h[5]],a._originalTransform(b,c,d,e,f,g)},a.setTransform=function(b,c,d,e,f,g){this._transformMatrix=[b,c,d,e,f,g],a._originalSetTransform(b,c,d,e,f,g)},a.rotate=function(a){var b=Math.cos(a),c=Math.sin(a),d=this._transformMatrix;this._transformMatrix=[d[0]*b+d[2]*c,d[1]*b+d[3]*c,d[0]*-c+d[2]*b,d[1]*-c+d[3]*b,d[4],d[5]],this._originalRotate(a)})}function x(a){var b,c,d,e,f=1e3,g=a.width,h=a.height,i=g+1,j=new Uint8Array(i*(h+1)),k=new Uint8Array([0,2,4,0,1,0,5,4,8,10,0,8,0,2,1,0]),l=g+7&-8,m=a.data,n=new Uint8Array(l*h),o=0;for(b=0,e=m.length;e>b;b++)for(var p=128,q=m[b];p>0;)n[o++]=q&p?0:255,p>>=1;var r=0;for(o=0,0!==n[o]&&(j[0]=1,++r),c=1;g>c;c++)n[o]!==n[o+1]&&(j[c]=n[o]?2:1,++r),o++;for(0!==n[o]&&(j[c]=2,++r),b=1;h>b;b++){o=b*l,d=b*i,n[o-l]!==n[o]&&(j[d]=n[o]?1:8,++r);var s=(n[o]?4:0)+(n[o-l]?8:0);for(c=1;g>c;c++)s=(s>>2)+(n[o+1]?4:0)+(n[o-l+1]?8:0),k[s]&&(j[d+c]=k[s],++r),o++;if(n[o-l]!==n[o]&&(j[d+c]=n[o]?2:4,++r),r>f)return null}for(o=l*(h-1),d=b*i,0!==n[o]&&(j[d]=8,++r),c=1;g>c;c++)n[o]!==n[o+1]&&(j[d+c]=n[o]?4:8,++r),o++;if(0!==n[o]&&(j[d+c]=4,++r),r>f)return null;var t=new Int32Array([0,i,-1,0,-i,0,0,0,1]),u=[];for(b=0;r&&h>=b;b++){for(var v=b*i,w=v+g;w>v&&!j[v];)v++;if(v!==w){var x,y=[v%i,b],z=j[v],A=v;do{var B=t[z];do v+=B;while(!j[v]);x=j[v],5!==x&&10!==x?(z=x,j[v]=0):(z=x&51*z>>4,j[v]&=z>>2|z<<2),y.push(v%i),y.push(v/i|0),--r}while(A!==v);u.push(y),--b}}var C=function(a){a.save(),a.scale(1/g,-1/h),a.translate(0,-h),a.beginPath();for(var b=0,c=u.length;c>b;b++){var d=u[b];a.moveTo(d[0],d[1]);for(var e=2,f=d.length;f>e;e+=2)a.lineTo(d[e],d[e+1])}a.fill(),a.beginPath(),a.restore()};return C}function y(a){var b=ma[a[0]];return b||d("Unknown IR type: "+a[0]),b.fromIR(a)}var z="undefined"==typeof window?this:window,A="undefined"==typeof window,B=[.001,0,0,.001,0,0],C={FILL:0,STROKE:1,FILL_STROKE:2,INVISIBLE:3,FILL_ADD_TO_PATH:4,STROKE_ADD_TO_PATH:5,FILL_STROKE_ADD_TO_PATH:6,ADD_TO_PATH:7,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4},D={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3},E={WIDGET:1,TEXT:2,LINK:3},F={SOLID:1,DASHED:2,BEVELED:3,INSET:4,UNDERLINE:5};z.PDFJS||(z.PDFJS={}),z.PDFJS.pdfBug=!1,PDFJS.VERBOSITY_LEVELS={errors:0,warnings:1,infos:5};var G=PDFJS.OPS={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15,curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24,eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49,setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54,setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76,endGroup:77,beginAnnotations:78,endAnnotations:79,beginAnnotation:80,endAnnotation:81,paintJpegXObject:82,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91},H=PDFJS.UNSUPPORTED_FEATURES={unknown:"unknown",forms:"forms",javaScript:"javaScript",smask:"smask",shadingPattern:"shadingPattern",font:"font"},I=PDFJS.UnsupportedManager=function(){var a=[];return{listen:function(b){a.push(b)},notify:function(c){b('Unsupported feature "'+c+'"');for(var d=0,e=a.length;e>d;d++)a[d](c)}}}();PDFJS.isValidUrl=h,PDFJS.shadow=i;var J=PDFJS.LinkTarget={NONE:0,SELF:1,BLANK:2,PARENT:3,TOP:4},K=["","_self","_blank","_parent","_top"];PDFJS.isExternalLinkTargetSet=j;var L=PDFJS.PasswordResponses={NEED_PASSWORD:1,INCORRECT_PASSWORD:2},M=function(){function a(a,b){this.name="PasswordException",this.message=a,this.code=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.PasswordException=M;var N=function(){function a(a,b){this.name="UnknownErrorException",this.message=a,this.details=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.UnknownErrorException=N;var O=function(){function a(a){this.name="InvalidPDFException",this.message=a}return a.prototype=new Error,a.constructor=a,a}();PDFJS.InvalidPDFException=O;var P=function(){function a(a){this.name="MissingPDFException",this.message=a}return a.prototype=new Error,a.constructor=a,a}();PDFJS.MissingPDFException=P;var Q=function(){function a(a,b){this.name="UnexpectedResponseException",this.message=a,this.status=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.UnexpectedResponseException=Q;(function(){function a(a){this.message=a}return a.prototype=new Error,a.prototype.name="NotImplementedException",a.constructor=a,a})(),function(){function a(a,b){this.begin=a,this.end=b,this.message="Missing data ["+a+", "+b+")"}return a.prototype=new Error,a.prototype.name="MissingDataException",a.constructor=a,a}(),function(){function a(a){this.message=a}return a.prototype=new Error,a.prototype.name="XRefParseException",a.constructor=a,a}();Object.defineProperty(PDFJS,"isLittleEndian",{configurable:!0,get:function(){return i(PDFJS,"isLittleEndian",n())}}),Object.defineProperty(PDFJS,"hasCanvasTypedArrays",{configurable:!0,get:function(){return i(PDFJS,"hasCanvasTypedArrays",o())}});var R=function(){function a(a,b){this.buffer=a,this.byteLength=a.length,this.length=void 0===b?this.byteLength>>2:b,c(this.length)}function b(a){return{get:function(){var b=this.buffer,c=a<<2;return(b[c]|b[c+1]<<8|b[c+2]<<16|b[c+3]<<24)>>>0},set:function(b){var c=this.buffer,d=a<<2;c[d]=255&b,c[d+1]=b>>8&255,c[d+2]=b>>16&255,c[d+3]=b>>>24&255}}}function c(c){for(;c>d;)Object.defineProperty(a.prototype,d,b(d)),d++}a.prototype=Object.create(null);var d=0;return a}(),S=[1,0,0,1,0,0],T=PDFJS.Util=function(){function a(){}var b=["rgb(",0,",",0,",",0,")"];return a.makeCssRgb=function(a,c,d){return b[1]=a,b[3]=c,b[5]=d,b.join("")},a.transform=function(a,b){return[a[0]*b[0]+a[2]*b[1],a[1]*b[0]+a[3]*b[1],a[0]*b[2]+a[2]*b[3],a[1]*b[2]+a[3]*b[3],a[0]*b[4]+a[2]*b[5]+a[4],a[1]*b[4]+a[3]*b[5]+a[5]]},a.applyTransform=function(a,b){var c=a[0]*b[0]+a[1]*b[2]+b[4],d=a[0]*b[1]+a[1]*b[3]+b[5];return[c,d]},a.applyInverseTransform=function(a,b){var c=b[0]*b[3]-b[1]*b[2],d=(a[0]*b[3]-a[1]*b[2]+b[2]*b[5]-b[4]*b[3])/c,e=(-a[0]*b[1]+a[1]*b[0]+b[4]*b[1]-b[5]*b[0])/c;return[d,e]},a.getAxialAlignedBoundingBox=function(b,c){var d=a.applyTransform(b,c),e=a.applyTransform(b.slice(2,4),c),f=a.applyTransform([b[0],b[3]],c),g=a.applyTransform([b[2],b[1]],c);return[Math.min(d[0],e[0],f[0],g[0]),Math.min(d[1],e[1],f[1],g[1]),Math.max(d[0],e[0],f[0],g[0]),Math.max(d[1],e[1],f[1],g[1])]},a.inverseTransform=function(a){var b=a[0]*a[3]-a[1]*a[2];return[a[3]/b,-a[1]/b,-a[2]/b,a[0]/b,(a[2]*a[5]-a[4]*a[3])/b,(a[4]*a[1]-a[5]*a[0])/b]},a.apply3dTransform=function(a,b){return[a[0]*b[0]+a[1]*b[1]+a[2]*b[2],a[3]*b[0]+a[4]*b[1]+a[5]*b[2],a[6]*b[0]+a[7]*b[1]+a[8]*b[2]]},a.singularValueDecompose2dScale=function(a){var b=[a[0],a[2],a[1],a[3]],c=a[0]*b[0]+a[1]*b[2],d=a[0]*b[1]+a[1]*b[3],e=a[2]*b[0]+a[3]*b[2],f=a[2]*b[1]+a[3]*b[3],g=(c+f)/2,h=Math.sqrt((c+f)*(c+f)-4*(c*f-e*d))/2,i=g+h||1,j=g-h||1;return[Math.sqrt(i),Math.sqrt(j)]},a.normalizeRect=function(a){var b=a.slice(0);return a[0]>a[2]&&(b[0]=a[2],b[2]=a[0]),a[1]>a[3]&&(b[1]=a[3],b[3]=a[1]),b},a.intersect=function(b,c){function d(a,b){return a-b}var e=[b[0],b[2],c[0],c[2]].sort(d),f=[b[1],b[3],c[1],c[3]].sort(d),g=[];return b=a.normalizeRect(b),c=a.normalizeRect(c),e[0]===b[0]&&e[1]===c[0]||e[0]===c[0]&&e[1]===b[0]?(g[0]=e[1],g[2]=e[2],f[0]===b[1]&&f[1]===c[1]||f[0]===c[1]&&f[1]===b[1]?(g[1]=f[1],g[3]=f[2],g):!1):!1},a.sign=function(a){return 0>a?-1:1},a.appendToArray=function(a,b){Array.prototype.push.apply(a,b)},a.prependToArray=function(a,b){Array.prototype.unshift.apply(a,b)},a.extendObj=function(a,b){for(var c in b)a[c]=b[c]},a.getInheritableProperty=function(a,b){for(;a&&!a.has(b);)a=a.get("Parent");return a?a.get(b):null},a.inherit=function(a,b,c){a.prototype=Object.create(b.prototype),a.prototype.constructor=a;for(var d in c)a.prototype[d]=c[d]},a.loadScript=function(a,b){var c=document.createElement("script"),d=!1;c.setAttribute("src",a),b&&(c.onload=function(){d||b(),d=!0}),document.getElementsByTagName("head")[0].appendChild(c)},a}();PDFJS.PageViewport=function(){function a(a,b,c,d,e,f){this.viewBox=a,this.scale=b,this.rotation=c,this.offsetX=d,this.offsetY=e;var g,h,i,j,k=(a[2]+a[0])/2,l=(a[3]+a[1])/2;switch(c%=360,c=0>c?c+360:c){case 180:g=-1,h=0,i=0,j=1;break;case 90:g=0,h=1,i=1,j=0;break;case 270:g=0,h=-1,i=-1,j=0;break;default:g=1,h=0,i=0,j=-1}f&&(i=-i,j=-j);var m,n,o,p;0===g?(m=Math.abs(l-a[1])*b+d,n=Math.abs(k-a[0])*b+e,o=Math.abs(a[3]-a[1])*b,p=Math.abs(a[2]-a[0])*b):(m=Math.abs(k-a[0])*b+d,n=Math.abs(l-a[1])*b+e,o=Math.abs(a[2]-a[0])*b,p=Math.abs(a[3]-a[1])*b),this.transform=[g*b,h*b,i*b,j*b,m-g*b*k-i*b*l,n-h*b*k-j*b*l],this.width=o,this.height=p,this.fontScale=b}return a.prototype={clone:function(b){b=b||{};var c="scale"in b?b.scale:this.scale,d="rotation"in b?b.rotation:this.rotation;return new a(this.viewBox.slice(),c,d,this.offsetX,this.offsetY,b.dontFlip)},convertToViewportPoint:function(a,b){return T.applyTransform([a,b],this.transform)},convertToViewportRectangle:function(a){var b=T.applyTransform([a[0],a[1]],this.transform),c=T.applyTransform([a[2],a[3]],this.transform);return[b[0],b[1],c[0],c[1]]},convertToPdfPoint:function(a,b){return T.applyInverseTransform([a,b],this.transform)}},a}();PDFJS.createPromiseCapability=s,function(){function a(a){this._status=c,this._handlers=[];try{a.call(this,this._resolve.bind(this),this._reject.bind(this))}catch(b){this._reject(b)}}if(z.Promise)return"function"!=typeof z.Promise.all&&(z.Promise.all=function(a){var b,c,d=0,e=[],f=new z.Promise(function(a,d){b=a,c=d});return a.forEach(function(a,f){d++,a.then(function(a){e[f]=a,d--,0===d&&b(e)},c)}),0===d&&b(e),f}),"function"!=typeof z.Promise.resolve&&(z.Promise.resolve=function(a){return new z.Promise(function(b){b(a)})}),"function"!=typeof z.Promise.reject&&(z.Promise.reject=function(a){return new z.Promise(function(b,c){c(a)})}),void("function"!=typeof z.Promise.prototype["catch"]&&(z.Promise.prototype["catch"]=function(a){return z.Promise.prototype.then(void 0,a)}));var c=0,d=1,e=2,f=500,g={handlers:[],running:!1,unhandledRejections:[],pendingRejectionCheck:!1,scheduleHandlers:function(a){a._status!==c&&(this.handlers=this.handlers.concat(a._handlers),a._handlers=[],this.running||(this.running=!0,setTimeout(this.runHandlers.bind(this),0)))},runHandlers:function(){for(var a=1,b=Date.now()+a;this.handlers.length>0;){var c=this.handlers.shift(),f=c.thisPromise._status,g=c.thisPromise._value;try{f===d?"function"==typeof c.onResolve&&(g=c.onResolve(g)):"function"==typeof c.onReject&&(g=c.onReject(g),f=d,c.thisPromise._unhandledRejection&&this.removeUnhandeledRejection(c.thisPromise))}catch(h){f=e,g=h}if(c.nextPromise._updateStatus(f,g),Date.now()>=b)break}return this.handlers.length>0?void setTimeout(this.runHandlers.bind(this),0):void(this.running=!1)},addUnhandledRejection:function(a){this.unhandledRejections.push({promise:a,time:Date.now()}),this.scheduleRejectionCheck()},removeUnhandeledRejection:function(a){a._unhandledRejection=!1;for(var b=0;b<this.unhandledRejections.length;b++)this.unhandledRejections[b].promise===a&&(this.unhandledRejections.splice(b),b--)},scheduleRejectionCheck:function(){this.pendingRejectionCheck||(this.pendingRejectionCheck=!0,setTimeout(function(){this.pendingRejectionCheck=!1;for(var a=Date.now(),c=0;c<this.unhandledRejections.length;c++)if(a-this.unhandledRejections[c].time>f){var d=this.unhandledRejections[c].promise._value,e="Unhandled rejection: "+d;d.stack&&(e+="\n"+d.stack),b(e),this.unhandledRejections.splice(c),c--}this.unhandledRejections.length&&this.scheduleRejectionCheck()}.bind(this),f))}};a.all=function(b){function c(a){g._status!==e&&(i=[],f(a))}var d,f,g=new a(function(a,b){d=a,f=b}),h=b.length,i=[];if(0===h)return d(i),g;for(var j=0,k=b.length;k>j;++j){var l=b[j],m=function(a){return function(b){g._status!==e&&(i[a]=b,h--,0===h&&d(i))}}(j);a.isPromise(l)?l.then(m,c):m(l)}return g},a.isPromise=function(a){return a&&"function"==typeof a.then},a.resolve=function(b){return new a(function(a){a(b)})},a.reject=function(b){return new a(function(a,c){c(b)})},a.prototype={_status:null,_value:null,_handlers:null,_unhandledRejection:null,_updateStatus:function(b,c){if(this._status!==d&&this._status!==e){if(b===d&&a.isPromise(c))return void c.then(this._updateStatus.bind(this,d),this._updateStatus.bind(this,e));this._status=b,this._value=c,b===e&&0===this._handlers.length&&(this._unhandledRejection=!0,g.addUnhandledRejection(this)),g.scheduleHandlers(this)}},_resolve:function(a){this._updateStatus(d,a)},_reject:function(a){this._updateStatus(e,a)},then:function(b,c){var d=new a(function(a,b){this.resolve=a,this.reject=b});return this._handlers.push({thisPromise:this,onResolve:b,onReject:c,nextPromise:d}),g.scheduleHandlers(this),d},"catch":function(a){return this.then(void 0,a)}},z.Promise=a}();var U=function(){function a(a,b,c){for(;a.length<c;)a+=b;return a}function c(){this.started={},this.times=[],this.enabled=!0}return c.prototype={time:function(a){this.enabled&&(a in this.started&&b("Timer is already running for "+a),this.started[a]=Date.now())},timeEnd:function(a){this.enabled&&(a in this.started||b("Timer has not been started for "+a),this.times.push({name:a,start:this.started[a],end:Date.now()}),delete this.started[a])},toString:function(){var b,c,d=this.times,e="",f=0;for(b=0,c=d.length;c>b;++b){var g=d[b].name;g.length>f&&(f=g.length)}for(b=0,c=d.length;c>b;++b){var h=d[b],i=h.end-h.start;e+=a(h.name," ",f)+" "+i+"ms\n"}return e}},c}();PDFJS.createBlob=function(a,b){if("undefined"!=typeof Blob)return new Blob([a],{type:b});var c=new MozBlobBuilder;return c.append(a),c.getBlob(b)},PDFJS.createObjectURL=function(){var a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return function(b,c){if(!PDFJS.disableCreateObjectURL&&"undefined"!=typeof URL&&URL.createObjectURL){var d=PDFJS.createBlob(b,c);return URL.createObjectURL(d)}for(var e="data:"+c+";base64,",f=0,g=b.length;g>f;f+=3){var h=255&b[f],i=255&b[f+1],j=255&b[f+2],k=h>>2,l=(3&h)<<4|i>>4,m=g>f+1?(15&i)<<2|j>>6:64,n=g>f+2?63&j:64;e+=a[k]+a[l]+a[m]+a[n]}return e}}(),t.prototype={on:function(a,b,c){var e=this.actionHandler;e[a]&&d('There is already an actionName called "'+a+'"'),e[a]=[b,c]},send:function(a,b,c){var d={action:a,data:b};this.postMessage(d,c)},sendWithPromise:function(a,b,c){var d=this.callbackIndex++,e={action:a,data:b,callbackId:d},f=s();this.callbacksCapabilities[d]=f;try{this.postMessage(e,c)}catch(g){f.reject(g)}return f.promise},postMessage:function(a,b){b&&this.postMessageTransfers?this.comObj.postMessage(a,b):this.comObj.postMessage(a)}},PDFJS.maxImageSize=void 0===PDFJS.maxImageSize?-1:PDFJS.maxImageSize,PDFJS.cMapUrl=void 0===PDFJS.cMapUrl?null:PDFJS.cMapUrl,PDFJS.cMapPacked=void 0===PDFJS.cMapPacked?!1:PDFJS.cMapPacked,PDFJS.disableFontFace=void 0===PDFJS.disableFontFace?!1:PDFJS.disableFontFace,PDFJS.imageResourcesPath=void 0===PDFJS.imageResourcesPath?"":PDFJS.imageResourcesPath,PDFJS.disableWorker=void 0===PDFJS.disableWorker?!1:PDFJS.disableWorker,PDFJS.workerSrc=void 0===PDFJS.workerSrc?null:PDFJS.workerSrc,PDFJS.disableRange=void 0===PDFJS.disableRange?!1:PDFJS.disableRange,PDFJS.disableStream=void 0===PDFJS.disableStream?!1:PDFJS.disableStream,PDFJS.disableAutoFetch=void 0===PDFJS.disableAutoFetch?!1:PDFJS.disableAutoFetch,PDFJS.pdfBug=void 0===PDFJS.pdfBug?!1:PDFJS.pdfBug,PDFJS.postMessageTransfers=void 0===PDFJS.postMessageTransfers?!0:PDFJS.postMessageTransfers,PDFJS.disableCreateObjectURL=void 0===PDFJS.disableCreateObjectURL?!1:PDFJS.disableCreateObjectURL,PDFJS.disableWebGL=void 0===PDFJS.disableWebGL?!0:PDFJS.disableWebGL,PDFJS.disableFullscreen=void 0===PDFJS.disableFullscreen?!1:PDFJS.disableFullscreen,PDFJS.useOnlyCssZoom=void 0===PDFJS.useOnlyCssZoom?!1:PDFJS.useOnlyCssZoom,PDFJS.verbosity=void 0===PDFJS.verbosity?PDFJS.VERBOSITY_LEVELS.warnings:PDFJS.verbosity,PDFJS.maxCanvasPixels=void 0===PDFJS.maxCanvasPixels?16777216:PDFJS.maxCanvasPixels,PDFJS.openExternalLinksInNewWindow=void 0===PDFJS.openExternalLinksInNewWindow?!1:PDFJS.openExternalLinksInNewWindow,PDFJS.externalLinkTarget=void 0===PDFJS.externalLinkTarget?PDFJS.LinkTarget.NONE:PDFJS.externalLinkTarget,PDFJS.isEvalSupported=void 0===PDFJS.isEvalSupported?!0:PDFJS.isEvalSupported,PDFJS.getDocument=function(a,b,e,f){var h=new V;arguments.length>1&&c("getDocument is called with pdfDataRangeTransport, passwordCallback or progressCallback argument"),b&&(b instanceof W||(b=Object.create(b),b.length=a.length,b.initialData=a.initialData,b.abort||(b.abort=function(){})),a=Object.create(a),a.range=b),h.onPassword=e||null,h.onProgress=f||null;var i,j,k;"string"==typeof a?k={url:a}:r(a)?k={data:a}:a instanceof W?k={range:a}:("object"!=typeof a&&d("Invalid parameter in getDocument, need either Uint8Array, string or a parameter object"),a.url||a.data||a.range||d("Invalid parameter object: need either .data, .range or .url"),k=a);var m={};for(var n in k)if("url"!==n||"undefined"==typeof window){if("range"!==n)if("data"!==n||k[n]instanceof Uint8Array)m[n]=k[n];else{var o=k[n];"string"==typeof o?m[n]=l(o):"object"!=typeof o||null===o||isNaN(o.length)?r(o)?m[n]=new Uint8Array(o):d("Invalid PDF binary data: either typed array, string or array-like object is expected in the data property."):m[n]=new Uint8Array(o)}}else m[n]=g(window.location.href,k[n]);return i=s(),j=new Z(i,k.range),i.promise.then(function(){j.fetchDocument(h,m)}),h._transport=j,h};var V=function(){function a(){this._capability=s(),this._transport=null,this.onPassword=null,this.onProgress=null}return a.prototype={get promise(){return this._capability.promise},destroy:function(){return this._transport.destroy()},then:function(a,b){return this.promise.then.apply(this.promise,arguments)}},a}(),W=function(){function a(a,b){this.length=a,this.initialData=b,this._rangeListeners=[],this._progressListeners=[],this._progressiveReadListeners=[],this._readyCapability=s()}return a.prototype={addRangeListener:function(a){this._rangeListeners.push(a)},addProgressListener:function(a){this._progressListeners.push(a)},addProgressiveReadListener:function(a){this._progressiveReadListeners.push(a)},onDataRange:function(a,b){for(var c=this._rangeListeners,d=0,e=c.length;e>d;++d)c[d](a,b)},onDataProgress:function(a){this._readyCapability.promise.then(function(){for(var b=this._progressListeners,c=0,d=b.length;d>c;++c)b[c](a)}.bind(this))},onDataProgressiveRead:function(a){this._readyCapability.promise.then(function(){for(var b=this._progressiveReadListeners,c=0,d=b.length;d>c;++c)b[c](a)}.bind(this))},transportReady:function(){this._readyCapability.resolve()},requestDataRange:function(a,b){throw new Error("Abstract method PDFDataRangeTransport.requestDataRange")},abort:function(){}},a}();PDFJS.PDFDataRangeTransport=W;var X=function(){function a(a,b,c){this.pdfInfo=a,this.transport=b,this.loadingTask=c}return a.prototype={get numPages(){return this.pdfInfo.numPages},get fingerprint(){return this.pdfInfo.fingerprint},getPage:function(a){return this.transport.getPage(a)},getPageIndex:function(a){return this.transport.getPageIndex(a)},getDestinations:function(){return this.transport.getDestinations()},getDestination:function(a){return this.transport.getDestination(a)},getAttachments:function(){return this.transport.getAttachments()},getJavaScript:function(){return this.transport.getJavaScript()},getOutline:function(){return this.transport.getOutline()},getMetadata:function(){return this.transport.getMetadata()},getData:function(){return this.transport.getData()},getDownloadInfo:function(){return this.transport.downloadInfoCapability.promise},getStats:function(){return this.transport.getStats()},cleanup:function(){this.transport.startCleanup()},destroy:function(){return this.transport.destroy()}},a}(),Y=function(){function a(a,b,c){this.pageIndex=a,this.pageInfo=b,this.transport=c,this.stats=new U,this.stats.enabled=!!z.PDFJS.enableStats,this.commonObjs=c.commonObjs,this.objs=new $,this.cleanupAfterRender=!1,this.pendingCleanup=!1,this.intentStates={},this.destroyed=!1}return a.prototype={get pageNumber(){return this.pageIndex+1},get rotate(){return this.pageInfo.rotate;
+},get ref(){return this.pageInfo.ref},get view(){return this.pageInfo.view},getViewport:function(a,b){return arguments.length<2&&(b=this.rotate),new PDFJS.PageViewport(this.view,a,b,0,0)},getAnnotations:function(){return this.annotationsPromise||(this.annotationsPromise=this.transport.getAnnotations(this.pageIndex)),this.annotationsPromise},render:function(a){function b(a){var b=f.renderTasks.indexOf(g);b>=0&&f.renderTasks.splice(b,1),i.cleanupAfterRender&&(i.pendingCleanup=!0),i._tryCleanup(),a?g.capability.reject(a):g.capability.resolve(),d.timeEnd("Rendering"),d.timeEnd("Overall")}var d=this.stats;d.time("Overall"),this.pendingCleanup=!1;var e="print"===a.intent?"print":"display";this.intentStates[e]||(this.intentStates[e]={});var f=this.intentStates[e];f.displayReadyCapability||(f.receivingOperatorList=!0,f.displayReadyCapability=s(),f.operatorList={fnArray:[],argsArray:[],lastChunk:!1},this.stats.time("Page Request"),this.transport.messageHandler.send("RenderPageRequest",{pageIndex:this.pageNumber-1,intent:e}));var g=new aa(b,a,this.objs,this.commonObjs,f.operatorList,this.pageNumber);g.useRequestAnimationFrame="print"!==e,f.renderTasks||(f.renderTasks=[]),f.renderTasks.push(g);var h=g.task;a.continueCallback&&(c("render is used with continueCallback parameter"),h.onContinue=a.continueCallback);var i=this;return f.displayReadyCapability.promise.then(function(a){return i.pendingCleanup?void b():(d.time("Rendering"),g.initalizeGraphics(a),void g.operatorListChanged())},function(a){b(a)}),h},getOperatorList:function(){function a(){c.operatorList.lastChunk&&c.opListReadCapability.resolve(c.operatorList)}var b="oplist";this.intentStates[b]||(this.intentStates[b]={});var c=this.intentStates[b];if(!c.opListReadCapability){var d={};d.operatorListChanged=a,c.receivingOperatorList=!0,c.opListReadCapability=s(),c.renderTasks=[],c.renderTasks.push(d),c.operatorList={fnArray:[],argsArray:[],lastChunk:!1},this.transport.messageHandler.send("RenderPageRequest",{pageIndex:this.pageIndex,intent:b})}return c.opListReadCapability.promise},getTextContent:function(){return this.transport.messageHandler.sendWithPromise("GetTextContent",{pageIndex:this.pageNumber-1})},_destroy:function(){this.destroyed=!0,this.transport.pageCache[this.pageIndex]=null;var a=[];return Object.keys(this.intentStates).forEach(function(b){var c=this.intentStates[b];c.renderTasks.forEach(function(b){var c=b.capability.promise["catch"](function(){});a.push(c),b.cancel()})},this),this.objs.clear(),this.annotationsPromise=null,this.pendingCleanup=!1,Promise.all(a)},destroy:function(){c("page destroy method, use cleanup() instead"),this.cleanup()},cleanup:function(){this.pendingCleanup=!0,this._tryCleanup()},_tryCleanup:function(){this.pendingCleanup&&!Object.keys(this.intentStates).some(function(a){var b=this.intentStates[a];return 0!==b.renderTasks.length||b.receivingOperatorList},this)&&(Object.keys(this.intentStates).forEach(function(a){delete this.intentStates[a]},this),this.objs.clear(),this.annotationsPromise=null,this.pendingCleanup=!1)},_startRenderPage:function(a,b){var c=this.intentStates[b];c.displayReadyCapability&&c.displayReadyCapability.resolve(a)},_renderPageChunk:function(a,b){var c,d,e=this.intentStates[b];for(c=0,d=a.length;d>c;c++)e.operatorList.fnArray.push(a.fnArray[c]),e.operatorList.argsArray.push(a.argsArray[c]);for(e.operatorList.lastChunk=a.lastChunk,c=0;c<e.renderTasks.length;c++)e.renderTasks[c].operatorListChanged();a.lastChunk&&(e.receivingOperatorList=!1,this._tryCleanup())}},a}(),Z=function(){function c(b,c){if(this.pdfDataRangeTransport=c,this.workerInitializedCapability=b,this.commonObjs=new $,this.loadingTask=null,this.destroyed=!1,this.destroyCapability=null,this.pageCache=[],this.pagePromises=[],this.downloadInfoCapability=s(),!z.PDFJS.disableWorker&&"undefined"!=typeof Worker){var e=PDFJS.workerSrc;e||d("No PDFJS.workerSrc specified");try{var f=new Worker(e),g=new t("main",f);this.messageHandler=g,g.on("test",function(a){var c=a&&a.supportTypedArray;c?(this.worker=f,a.supportTransfers||(PDFJS.postMessageTransfers=!1),this.setupMessageHandler(g),b.resolve()):this.setupFakeWorker()}.bind(this));var h=new Uint8Array([PDFJS.postMessageTransfers?255:0]);try{g.send("test",h,[h.buffer])}catch(i){a("Cannot use postMessage transfers"),h[0]=0,g.send("test",h)}return}catch(j){a("The worker has been disabled.")}}this.setupFakeWorker()}return c.prototype={destroy:function(){if(this.destroyCapability)return this.destroyCapability.promise;this.destroyed=!0,this.destroyCapability=s();var a=[];this.pageCache.forEach(function(b){b&&a.push(b._destroy())}),this.pageCache=[],this.pagePromises=[];var b=this,c=this.messageHandler.sendWithPromise("Terminate",null);return a.push(c),Promise.all(a).then(function(){pa.clear(),b.worker&&b.worker.terminate(),b.pdfDataRangeTransport&&(b.pdfDataRangeTransport.abort(),b.pdfDataRangeTransport=null),b.messageHandler=null,b.destroyCapability.resolve()},this.destroyCapability.reject),this.destroyCapability.promise},setupFakeWorker:function(){z.PDFJS.disableWorker=!0,PDFJS.fakeWorkerFilesLoadedCapability||(PDFJS.fakeWorkerFilesLoadedCapability=s(),T.loadScript(PDFJS.workerSrc,function(){PDFJS.fakeWorkerFilesLoadedCapability.resolve()})),PDFJS.fakeWorkerFilesLoadedCapability.promise.then(function(){b("Setting up fake worker.");var a={postMessage:function(b){a.onmessage({data:b})},terminate:function(){}},c=new t("main",a);this.setupMessageHandler(c),PDFJS.WorkerMessageHandler.setup(c),this.workerInitializedCapability.resolve()}.bind(this))},setupMessageHandler:function(a){function c(b){a.send("UpdatePassword",b)}this.messageHandler=a;var e=this.pdfDataRangeTransport;e&&(e.addRangeListener(function(b,c){a.send("OnDataRange",{begin:b,chunk:c})}),e.addProgressListener(function(b){a.send("OnDataProgress",{loaded:b})}),e.addProgressiveReadListener(function(b){a.send("OnDataRange",{chunk:b})}),a.on("RequestDataRange",function(a){e.requestDataRange(a.begin,a.end)},this)),a.on("GetDoc",function(a){var b=a.pdfInfo;this.numPages=a.pdfInfo.numPages;var c=this.loadingTask,d=new X(b,this,c);this.pdfDocument=d,c._capability.resolve(d)},this),a.on("NeedPassword",function(a){var b=this.loadingTask;return b.onPassword?b.onPassword(c,L.NEED_PASSWORD):void b._capability.reject(new M(a.message,a.code))},this),a.on("IncorrectPassword",function(a){var b=this.loadingTask;return b.onPassword?b.onPassword(c,L.INCORRECT_PASSWORD):void b._capability.reject(new M(a.message,a.code))},this),a.on("InvalidPDF",function(a){this.loadingTask._capability.reject(new O(a.message))},this),a.on("MissingPDF",function(a){this.loadingTask._capability.reject(new P(a.message))},this),a.on("UnexpectedResponse",function(a){this.loadingTask._capability.reject(new Q(a.message,a.status))},this),a.on("UnknownError",function(a){this.loadingTask._capability.reject(new N(a.message,a.details))},this),a.on("DataLoaded",function(a){this.downloadInfoCapability.resolve(a)},this),a.on("PDFManagerReady",function(a){this.pdfDataRangeTransport&&this.pdfDataRangeTransport.transportReady()},this),a.on("StartRenderPage",function(a){var b=this.pageCache[a.pageIndex];b.stats.timeEnd("Page Request"),b._startRenderPage(a.transparency,a.intent)},this),a.on("RenderPageChunk",function(a){var b=this.pageCache[a.pageIndex];b._renderPageChunk(a.operatorList,a.intent)},this),a.on("commonobj",function(a){var c=a[0],d=a[1];if(!this.commonObjs.hasData(c))switch(d){case"Font":var e,f=a[2];if("error"in f){var g=f.error;b("Error during font loading: "+g),this.commonObjs.resolve(c,g);break}e=new qa(f),pa.bind([e],function(a){this.commonObjs.resolve(c,e)}.bind(this));break;case"FontPath":this.commonObjs.resolve(c,a[2]);break;default:g("Got unknown common object type "+d)}},this),a.on("obj",function(a){var b,c=a[0],e=a[1],f=a[2],g=this.pageCache[e];if(!g.objs.hasData(c))switch(f){case"JpegStream":b=a[3],u(c,b,g.objs);break;case"Image":b=a[3],g.objs.resolve(c,b);var h=8e6;b&&"data"in b&&b.data.length>h&&(g.cleanupAfterRender=!0);break;default:d("Got unknown object type "+f)}},this),a.on("DocProgress",function(a){var b=this.loadingTask;b.onProgress&&b.onProgress({loaded:a.loaded,total:a.total})},this),a.on("PageError",function(a){var b=this.pageCache[a.pageNum-1],c=b.intentStates[a.intent];c.displayReadyCapability?c.displayReadyCapability.reject(a.error):d(a.error)},this),a.on("JpegDecode",function(a){var b=a[0],c=a[1];return 3!==c&&1!==c?Promise.reject(new Error("Only 3 components or 1 component can be returned")):new Promise(function(a,d){var e=new Image;e.onload=function(){var b=e.width,d=e.height,f=b*d,g=4*f,h=new Uint8Array(f*c),i=v(b,d),j=i.getContext("2d");j.drawImage(e,0,0);var k,l,m=j.getImageData(0,0,b,d).data;if(3===c)for(k=0,l=0;g>k;k+=4,l+=3)h[l]=m[k],h[l+1]=m[k+1],h[l+2]=m[k+2];else if(1===c)for(k=0,l=0;g>k;k+=4,l++)h[l]=m[k];a({data:h,width:b,height:d})},e.onerror=function(){d(new Error("JpegDecode failed to load image"))},e.src=b})})},fetchDocument:function(a,b){return this.destroyed?(a._capability.reject(new Error("Loading aborted")),void this.destroyCapability.resolve()):(this.loadingTask=a,b.disableAutoFetch=PDFJS.disableAutoFetch,b.disableStream=PDFJS.disableStream,b.chunkedViewerLoading=!!this.pdfDataRangeTransport,this.pdfDataRangeTransport&&(b.length=this.pdfDataRangeTransport.length,b.initialData=this.pdfDataRangeTransport.initialData),void this.messageHandler.send("GetDocRequest",{source:b,disableRange:PDFJS.disableRange,maxImageSize:PDFJS.maxImageSize,cMapUrl:PDFJS.cMapUrl,cMapPacked:PDFJS.cMapPacked,disableFontFace:PDFJS.disableFontFace,disableCreateObjectURL:PDFJS.disableCreateObjectURL,verbosity:PDFJS.verbosity}))},getData:function(){return this.messageHandler.sendWithPromise("GetData",null)},getPage:function(a,b){if(0>=a||a>this.numPages||(0|a)!==a)return Promise.reject(new Error("Invalid page request"));var c=a-1;if(c in this.pagePromises)return this.pagePromises[c];var d=this.messageHandler.sendWithPromise("GetPage",{pageIndex:c}).then(function(a){if(this.destroyed)throw new Error("Transport destroyed");var b=new Y(c,a,this);return this.pageCache[c]=b,b}.bind(this));return this.pagePromises[c]=d,d},getPageIndex:function(a){return this.messageHandler.sendWithPromise("GetPageIndex",{ref:a})},getAnnotations:function(a){return this.messageHandler.sendWithPromise("GetAnnotations",{pageIndex:a})},getDestinations:function(){return this.messageHandler.sendWithPromise("GetDestinations",null)},getDestination:function(a){return this.messageHandler.sendWithPromise("GetDestination",{id:a})},getAttachments:function(){return this.messageHandler.sendWithPromise("GetAttachments",null)},getJavaScript:function(){return this.messageHandler.sendWithPromise("GetJavaScript",null)},getOutline:function(){return this.messageHandler.sendWithPromise("GetOutline",null)},getMetadata:function(){return this.messageHandler.sendWithPromise("GetMetadata",null).then(function(a){return{info:a[0],metadata:a[1]?new PDFJS.Metadata(a[1]):null}})},getStats:function(){return this.messageHandler.sendWithPromise("GetStats",null)},startCleanup:function(){this.messageHandler.sendWithPromise("Cleanup",null).then(function(){for(var a=0,b=this.pageCache.length;b>a;a++){var c=this.pageCache[a];c&&c.cleanup()}this.commonObjs.clear(),pa.clear()}.bind(this))}},c}(),$=function(){function a(){this.objs={}}return a.prototype={ensureObj:function(a){if(this.objs[a])return this.objs[a];var b={capability:s(),data:null,resolved:!1};return this.objs[a]=b,b},get:function(a,b){if(b)return this.ensureObj(a).capability.promise.then(b),null;var c=this.objs[a];return c&&c.resolved||d("Requesting object that isn't resolved yet "+a),c.data},resolve:function(a,b){var c=this.ensureObj(a);c.resolved=!0,c.data=b,c.capability.resolve(b)},isResolved:function(a){var b=this.objs;return b[a]?b[a].resolved:!1},hasData:function(a){return this.isResolved(a)},getData:function(a){var b=this.objs;return b[a]&&b[a].resolved?b[a].data:null},clear:function(){this.objs={}}},a}(),_=function(){function a(a){this._internalRenderTask=a,this.onContinue=null}return a.prototype={get promise(){return this._internalRenderTask.capability.promise},cancel:function(){this._internalRenderTask.cancel()},then:function(a,b){return this.promise.then.apply(this.promise,arguments)}},a}(),aa=function(){function a(a,b,c,d,e,f){this.callback=a,this.params=b,this.objs=c,this.commonObjs=d,this.operatorListIdx=null,this.operatorList=e,this.pageNumber=f,this.running=!1,this.graphicsReadyCallback=null,this.graphicsReady=!1,this.useRequestAnimationFrame=!1,this.cancelled=!1,this.capability=s(),this.task=new _(this),this._continueBound=this._continue.bind(this),this._scheduleNextBound=this._scheduleNext.bind(this),this._nextBound=this._next.bind(this)}return a.prototype={initalizeGraphics:function(a){if(!this.cancelled){PDFJS.pdfBug&&"StepperManager"in z&&z.StepperManager.enabled&&(this.stepper=z.StepperManager.create(this.pageNumber-1),this.stepper.init(this.operatorList),this.stepper.nextBreakPoint=this.stepper.getNextBreakPoint());var b=this.params;this.gfx=new ka(b.canvasContext,this.commonObjs,this.objs,b.imageLayer),this.gfx.beginDrawing(b.viewport,a),this.operatorListIdx=0,this.graphicsReady=!0,this.graphicsReadyCallback&&this.graphicsReadyCallback()}},cancel:function(){this.running=!1,this.cancelled=!0,this.callback("cancelled")},operatorListChanged:function(){return this.graphicsReady?(this.stepper&&this.stepper.updateOperatorList(this.operatorList),void(this.running||this._continue())):void(this.graphicsReadyCallback||(this.graphicsReadyCallback=this._continueBound))},_continue:function(){this.running=!0,this.cancelled||(this.task.onContinue?this.task.onContinue.call(this.task,this._scheduleNextBound):this._scheduleNext())},_scheduleNext:function(){this.useRequestAnimationFrame?window.requestAnimationFrame(this._nextBound):Promise.resolve(void 0).then(this._nextBound)},_next:function(){this.cancelled||(this.operatorListIdx=this.gfx.executeOperatorList(this.operatorList,this.operatorListIdx,this._continueBound,this.stepper),this.operatorListIdx===this.operatorList.argsArray.length&&(this.running=!1,this.operatorList.lastChunk&&(this.gfx.endDrawing(),this.callback())))}},a}(),ba=(PDFJS.Metadata=function(){function a(a){return a.replace(/>\\376\\377([^<]+)/g,function(a,b){for(var c=b.replace(/\\([0-3])([0-7])([0-7])/g,function(a,b,c,d){return String.fromCharCode(64*b+8*c+1*d)}),d="",e=0;e<c.length;e+=2){var f=256*c.charCodeAt(e)+c.charCodeAt(e+1);d+="&#x"+(65536+f).toString(16).substring(1)+";"}return">"+d})}function b(b){if("string"==typeof b){b=a(b);var c=new DOMParser;b=c.parseFromString(b,"application/xml")}else b instanceof Document||d("Metadata: Invalid metadata object");this.metaDocument=b,this.metadata={},this.parse()}return b.prototype={parse:function(){var a=this.metaDocument,b=a.documentElement;if("rdf:rdf"!==b.nodeName.toLowerCase())for(b=b.firstChild;b&&"rdf:rdf"!==b.nodeName.toLowerCase();)b=b.nextSibling;var c=b?b.nodeName.toLowerCase():null;if(b&&"rdf:rdf"===c&&b.hasChildNodes()){var d,e,f,g,h,i,j,k=b.childNodes;for(g=0,i=k.length;i>g;g++)if(d=k[g],"rdf:description"===d.nodeName.toLowerCase())for(h=0,j=d.childNodes.length;j>h;h++)"#text"!==d.childNodes[h].nodeName.toLowerCase()&&(e=d.childNodes[h],f=e.nodeName.toLowerCase(),this.metadata[f]=e.textContent.trim())}},get:function(a){return this.metadata[a]||null},has:function(a){return"undefined"!=typeof this.metadata[a]}},b}(),16),ca=100,da=4096,ea=.65,fa=!0,ga=1e3,ha=16,ia=function(){var a={};return{getCanvas:function(b,c,d,e){var f;if(void 0!==a[b])f=a[b],f.canvas.width=c,f.canvas.height=d,f.context.setTransform(1,0,0,1,0,0);else{var g=v(c,d),h=g.getContext("2d");e&&w(h),a[b]=f={canvas:g,context:h}}return f},clear:function(){for(var b in a){var c=a[b];c.canvas.width=0,c.canvas.height=0,delete a[b]}}}}(),ja=function(){function a(a){this.alphaIsShape=!1,this.fontSize=0,this.fontSizeScale=1,this.textMatrix=S,this.textMatrixScale=1,this.fontMatrix=B,this.leading=0,this.x=0,this.y=0,this.lineX=0,this.lineY=0,this.charSpacing=0,this.wordSpacing=0,this.textHScale=1,this.textRenderingMode=C.FILL,this.textRise=0,this.fillColor="#000000",this.strokeColor="#000000",this.patternFill=!1,this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.activeSMask=null,this.old=a}return a.prototype={clone:function(){return Object.create(this)},setCurrentPoint:function(a,b){this.x=a,this.y=b}},a}(),ka=function(){function c(a,b,c,d){this.ctx=a,this.current=new ja,this.stateStack=[],this.pendingClip=null,this.pendingEOFill=!1,this.res=null,this.xobjs=null,this.commonObjs=b,this.objs=c,this.imageLayer=d,this.groupStack=[],this.processingType3=null,this.baseTransform=null,this.baseTransformStack=[],this.groupLevel=0,this.smaskStack=[],this.smaskCounter=0,this.tempSMask=null,a&&w(a),this.cachedGetSinglePixelWidth=null}function e(a,b){if("undefined"!=typeof ImageData&&b instanceof ImageData)return void a.putImageData(b,0,0);var c,e,f,g,h,i=b.height,j=b.width,k=i%ha,l=(i-k)/ha,m=0===k?l:l+1,n=a.createImageData(j,ha),o=0,p=b.data,q=n.data;if(b.kind===D.GRAYSCALE_1BPP){var r=p.byteLength,s=PDFJS.hasCanvasTypedArrays?new Uint32Array(q.buffer):new R(q),t=s.length,u=j+7>>3,v=4294967295,w=PDFJS.isLittleEndian||!PDFJS.hasCanvasTypedArrays?4278190080:255;for(e=0;m>e;e++){for(g=l>e?ha:k,c=0,f=0;g>f;f++){for(var x=r-o,y=0,z=x>u?j:8*x-7,A=-8&z,B=0,C=0;A>y;y+=8)C=p[o++],s[c++]=128&C?v:w,s[c++]=64&C?v:w,s[c++]=32&C?v:w,s[c++]=16&C?v:w,s[c++]=8&C?v:w,s[c++]=4&C?v:w,s[c++]=2&C?v:w,s[c++]=1&C?v:w;for(;z>y;y++)0===B&&(C=p[o++],B=128),s[c++]=C&B?v:w,B>>=1}for(;t>c;)s[c++]=0;a.putImageData(n,0,e*ha)}}else if(b.kind===D.RGBA_32BPP){for(f=0,h=j*ha*4,e=0;l>e;e++)q.set(p.subarray(o,o+h)),o+=h,a.putImageData(n,0,f),f+=ha;m>e&&(h=j*k*4,q.set(p.subarray(o,o+h)),a.putImageData(n,0,f))}else if(b.kind===D.RGB_24BPP)for(g=ha,h=j*g,e=0;m>e;e++){for(e>=l&&(g=k,h=j*g),c=0,f=h;f--;)q[c++]=p[o++],q[c++]=p[o++],q[c++]=p[o++],q[c++]=255;a.putImageData(n,0,e*ha)}else d("bad image kind: "+b.kind)}function g(a,b){for(var c=b.height,d=b.width,e=c%ha,f=(c-e)/ha,g=0===e?f:f+1,h=a.createImageData(d,ha),i=0,j=b.data,k=h.data,l=0;g>l;l++){for(var m=f>l?ha:e,n=3,o=0;m>o;o++)for(var p=0,q=0;d>q;q++){if(!p){var r=j[i++];p=128}k[n]=r&p?0:255,n+=4,p>>=1}a.putImageData(h,0,l*ha)}}function h(a,b){for(var c=["strokeStyle","fillStyle","fillRule","globalAlpha","lineWidth","lineCap","lineJoin","miterLimit","globalCompositeOperation","font"],d=0,e=c.length;e>d;d++){var f=c[d];void 0!==a[f]&&(b[f]=a[f])}void 0!==a.setLineDash?(b.setLineDash(a.getLineDash()),b.lineDashOffset=a.lineDashOffset):void 0!==a.mozDashOffset&&(b.mozDash=a.mozDash,b.mozDashOffset=a.mozDashOffset)}function j(a,b,c,d){for(var e=a.length,f=3;e>f;f+=4){var g=a[f];if(0===g)a[f-3]=b,a[f-2]=c,a[f-1]=d;else if(255>g){var h=255-g;a[f-3]=a[f-3]*g+b*h>>8,a[f-2]=a[f-2]*g+c*h>>8,a[f-1]=a[f-1]*g+d*h>>8}}}function k(a,b){for(var c=a.length,d=1/255,e=3;c>e;e+=4){var f=a[e];b[e]=b[e]*f*d|0}}function l(a,b){for(var c=a.length,d=3;c>d;d+=4){var e=77*a[d-3]+152*a[d-2]+28*a[d-1];b[d]=b[d]*e>>16}}function m(a,b,c,d,e,f){var g,h=!!f,i=h?f[0]:0,m=h?f[1]:0,n=h?f[2]:0;g="Luminosity"===e?l:k;for(var o=1048576,p=Math.min(d,Math.ceil(o/c)),q=0;d>q;q+=p){var r=Math.min(p,d-q),s=a.getImageData(0,q,c,r),t=b.getImageData(0,q,c,r);h&&j(s.data,i,m,n),g(s.data,t.data),a.putImageData(t,0,q)}}function n(a,b,c){var d=b.canvas,e=b.context;a.setTransform(b.scaleX,0,0,b.scaleY,b.offsetX,b.offsetY);var f=b.backdrop||null;if(la.isEnabled){var g=la.composeSMask(c.canvas,d,{subtype:b.subtype,backdrop:f});return a.setTransform(1,0,0,1,0,0),void a.drawImage(g,b.offsetX,b.offsetY)}m(e,c,d.width,d.height,b.subtype,f),a.drawImage(d,0,0)}var o=15,r=10,s=["butt","round","square"],t=["miter","round","bevel"],u={},v={};c.prototype={beginDrawing:function(a,b){var c=this.ctx.canvas.width,d=this.ctx.canvas.height;b?this.ctx.clearRect(0,0,c,d):(this.ctx.mozOpaque=!0,this.ctx.save(),this.ctx.fillStyle="rgb(255, 255, 255)",this.ctx.fillRect(0,0,c,d),this.ctx.restore());var e=a.transform;this.ctx.save(),this.ctx.transform.apply(this.ctx,e),this.baseTransform=this.ctx.mozCurrentTransform.slice(),this.imageLayer&&this.imageLayer.beginLayout()},executeOperatorList:function(a,b,c,d){var e=a.argsArray,f=a.fnArray,g=b||0,h=e.length;if(h===g)return g;for(var i,j=h-g>r&&"function"==typeof c,k=j?Date.now()+o:0,l=0,m=this.commonObjs,n=this.objs;;){if(void 0!==d&&g===d.nextBreakPoint)return d.breakIt(g,c),g;if(i=f[g],i!==G.dependency)this[i].apply(this,e[g]);else for(var p=e[g],q=0,s=p.length;s>q;q++){var t=p[q],u="g"===t[0]&&"_"===t[1],v=u?m:n;if(!v.isResolved(t))return v.get(t,c),g}if(g++,g===h)return g;if(j&&++l>r){if(Date.now()>k)return c(),g;l=0}}},endDrawing:function(){this.ctx.restore(),ia.clear(),la.clear(),this.imageLayer&&this.imageLayer.endLayout()},setLineWidth:function(a){this.current.lineWidth=a,this.ctx.lineWidth=a},setLineCap:function(a){this.ctx.lineCap=s[a]},setLineJoin:function(a){this.ctx.lineJoin=t[a]},setMiterLimit:function(a){this.ctx.miterLimit=a},setDash:function(a,b){var c=this.ctx;void 0!==c.setLineDash?(c.setLineDash(a),c.lineDashOffset=b):(c.mozDash=a,c.mozDashOffset=b)},setRenderingIntent:function(a){},setFlatness:function(a){},setGState:function(a){for(var c=0,d=a.length;d>c;c++){var e=a[c],f=e[0],g=e[1];switch(f){case"LW":this.setLineWidth(g);break;case"LC":this.setLineCap(g);break;case"LJ":this.setLineJoin(g);break;case"ML":this.setMiterLimit(g);break;case"D":this.setDash(g[0],g[1]);break;case"RI":this.setRenderingIntent(g);break;case"FL":this.setFlatness(g);break;case"Font":this.setFont(g[0],g[1]);break;case"CA":this.current.strokeAlpha=e[1];break;case"ca":this.current.fillAlpha=e[1],this.ctx.globalAlpha=e[1];break;case"BM":if(g&&g.name&&"Normal"!==g.name){var h=g.name.replace(/([A-Z])/g,function(a){return"-"+a.toLowerCase()}).substring(1);this.ctx.globalCompositeOperation=h,this.ctx.globalCompositeOperation!==h&&b('globalCompositeOperation "'+h+'" is not supported')}else this.ctx.globalCompositeOperation="source-over";break;case"SMask":this.current.activeSMask&&this.endSMaskGroup(),this.current.activeSMask=g?this.tempSMask:null,this.current.activeSMask&&this.beginSMaskGroup(),this.tempSMask=null}}},beginSMaskGroup:function(){var a=this.current.activeSMask,b=a.canvas.width,c=a.canvas.height,d="smaskGroupAt"+this.groupLevel,e=ia.getCanvas(d,b,c,!0),f=this.ctx,g=f.mozCurrentTransform;this.ctx.save();var i=e.context;i.scale(1/a.scaleX,1/a.scaleY),i.translate(-a.offsetX,-a.offsetY),i.transform.apply(i,g),h(f,i),this.ctx=i,this.setGState([["BM","Normal"],["ca",1],["CA",1]]),this.groupStack.push(f),this.groupLevel++},endSMaskGroup:function(){var a=this.ctx;this.groupLevel--,this.ctx=this.groupStack.pop(),n(this.ctx,this.current.activeSMask,a),this.ctx.restore()},save:function(){this.ctx.save();var a=this.current;this.stateStack.push(a),this.current=a.clone(),this.current.activeSMask=null},restore:function(){0!==this.stateStack.length&&(null!==this.current.activeSMask&&this.endSMaskGroup(),this.current=this.stateStack.pop(),this.ctx.restore(),this.pendingClip=null,this.cachedGetSinglePixelWidth=null)},transform:function(a,b,c,d,e,f){this.ctx.transform(a,b,c,d,e,f),this.cachedGetSinglePixelWidth=null},constructPath:function(a,b){for(var c=this.ctx,d=this.current,e=d.x,f=d.y,g=0,h=0,i=a.length;i>g;g++)switch(0|a[g]){case G.rectangle:e=b[h++],f=b[h++];var j=b[h++],k=b[h++];0===j&&(j=this.getSinglePixelWidth()),0===k&&(k=this.getSinglePixelWidth());var l=e+j,m=f+k;this.ctx.moveTo(e,f),this.ctx.lineTo(l,f),this.ctx.lineTo(l,m),this.ctx.lineTo(e,m),this.ctx.lineTo(e,f),this.ctx.closePath();break;case G.moveTo:e=b[h++],f=b[h++],c.moveTo(e,f);break;case G.lineTo:e=b[h++],f=b[h++],c.lineTo(e,f);break;case G.curveTo:e=b[h+4],f=b[h+5],c.bezierCurveTo(b[h],b[h+1],b[h+2],b[h+3],e,f),h+=6;break;case G.curveTo2:c.bezierCurveTo(e,f,b[h],b[h+1],b[h+2],b[h+3]),e=b[h+2],f=b[h+3],h+=4;break;case G.curveTo3:e=b[h+2],f=b[h+3],c.bezierCurveTo(b[h],b[h+1],e,f,e,f),h+=4;break;case G.closePath:c.closePath()}d.setCurrentPoint(e,f)},closePath:function(){this.ctx.closePath()},stroke:function(a){a="undefined"!=typeof a?a:!0;var b=this.ctx,c=this.current.strokeColor;b.lineWidth=Math.max(this.getSinglePixelWidth()*ea,this.current.lineWidth),b.globalAlpha=this.current.strokeAlpha,c&&c.hasOwnProperty("type")&&"Pattern"===c.type?(b.save(),b.strokeStyle=c.getPattern(b,this),b.stroke(),b.restore()):b.stroke(),a&&this.consumePath(),b.globalAlpha=this.current.fillAlpha},closeStroke:function(){this.closePath(),this.stroke()},fill:function(a){a="undefined"!=typeof a?a:!0;var b=this.ctx,c=this.current.fillColor,d=this.current.patternFill,e=!1;d&&(b.save(),b.fillStyle=c.getPattern(b,this),e=!0),this.pendingEOFill?(void 0!==b.mozFillRule?(b.mozFillRule="evenodd",b.fill(),b.mozFillRule="nonzero"):b.fill("evenodd"),this.pendingEOFill=!1):b.fill(),e&&b.restore(),a&&this.consumePath()},eoFill:function(){this.pendingEOFill=!0,this.fill()},fillStroke:function(){this.fill(!1),this.stroke(!1),this.consumePath()},eoFillStroke:function(){this.pendingEOFill=!0,this.fillStroke()},closeFillStroke:function(){this.closePath(),this.fillStroke()},closeEOFillStroke:function(){this.pendingEOFill=!0,this.closePath(),this.fillStroke()},endPath:function(){this.consumePath()},clip:function(){this.pendingClip=u},eoClip:function(){this.pendingClip=v},beginText:function(){this.current.textMatrix=S,this.current.textMatrixScale=1,this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0},endText:function(){var a=this.pendingTextPaths,b=this.ctx;if(void 0===a)return void b.beginPath();b.save(),b.beginPath();for(var c=0;c<a.length;c++){var d=a[c];b.setTransform.apply(b,d.transform),b.translate(d.x,d.y),d.addToPath(b,d.fontSize)}b.restore(),b.clip(),b.beginPath(),delete this.pendingTextPaths},setCharSpacing:function(a){this.current.charSpacing=a},setWordSpacing:function(a){this.current.wordSpacing=a},setHScale:function(a){this.current.textHScale=a/100},setLeading:function(a){this.current.leading=-a},setFont:function(a,c){var e=this.commonObjs.get(a),f=this.current;if(e||d("Can't find font for "+a),f.fontMatrix=e.fontMatrix?e.fontMatrix:B,(0===f.fontMatrix[0]||0===f.fontMatrix[3])&&b("Invalid font matrix for font "+a),0>c?(c=-c,f.fontDirection=-1):f.fontDirection=1,this.current.font=e,this.current.fontSize=c,!e.isType3Font){var g=e.loadedName||"sans-serif",h=e.black?e.bold?"900":"bold":e.bold?"bold":"normal",i=e.italic?"italic":"normal",j='"'+g+'", '+e.fallbackName,k=ba>c?ba:c>ca?ca:c;this.current.fontSizeScale=c/k;var l=i+" "+h+" "+k+"px "+j;this.ctx.font=l}},setTextRenderingMode:function(a){this.current.textRenderingMode=a},setTextRise:function(a){this.current.textRise=a},moveText:function(a,b){this.current.x=this.current.lineX+=a,this.current.y=this.current.lineY+=b},setLeadingMoveText:function(a,b){this.setLeading(-b),this.moveText(a,b)},setTextMatrix:function(a,b,c,d,e,f){this.current.textMatrix=[a,b,c,d,e,f],this.current.textMatrixScale=Math.sqrt(a*a+b*b),this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0},nextLine:function(){this.moveText(0,this.current.leading)},paintChar:function(a,b,c){var d,e=this.ctx,f=this.current,g=f.font,h=f.textRenderingMode,i=f.fontSize/f.fontSizeScale,j=h&C.FILL_STROKE_MASK,k=!!(h&C.ADD_TO_PATH_FLAG);if((g.disableFontFace||k)&&(d=g.getPathGenerator(this.commonObjs,a)),g.disableFontFace?(e.save(),e.translate(b,c),e.beginPath(),d(e,i),(j===C.FILL||j===C.FILL_STROKE)&&e.fill(),(j===C.STROKE||j===C.FILL_STROKE)&&e.stroke(),e.restore()):((j===C.FILL||j===C.FILL_STROKE)&&e.fillText(a,b,c),(j===C.STROKE||j===C.FILL_STROKE)&&e.strokeText(a,b,c)),k){var l=this.pendingTextPaths||(this.pendingTextPaths=[]);l.push({transform:e.mozCurrentTransform,x:b,y:c,fontSize:i,addToPath:d})}},get isFontSubpixelAAEnabled(){var a=document.createElement("canvas").getContext("2d");a.scale(1.5,1),a.fillText("I",0,10);for(var b=a.getImageData(0,0,10,10).data,c=!1,d=3;d<b.length;d+=4)if(b[d]>0&&b[d]<255){c=!0;break}return i(this,"isFontSubpixelAAEnabled",c)},showText:function(a){var b=this.current,c=b.font;if(c.isType3Font)return this.showType3Text(a);var d=b.fontSize;if(0!==d){var e=this.ctx,f=b.fontSizeScale,g=b.charSpacing,h=b.wordSpacing,i=b.fontDirection,j=b.textHScale*i,k=a.length,l=c.vertical,m=l?1:-1,n=c.defaultVMetrics,o=d*b.fontMatrix[0],q=b.textRenderingMode===C.FILL&&!c.disableFontFace;e.save(),e.transform.apply(e,b.textMatrix),e.translate(b.x,b.y+b.textRise),i>0?e.scale(j,-1):e.scale(j,1);var r=b.lineWidth,s=b.textMatrixScale;if(0===s||0===r){var t=b.textRenderingMode&C.FILL_STROKE_MASK;(t===C.STROKE||t===C.FILL_STROKE)&&(this.cachedGetSinglePixelWidth=null,r=this.getSinglePixelWidth()*ea)}else r/=s;1!==f&&(e.scale(f,f),r/=f),e.lineWidth=r;var u,v=0;for(u=0;k>u;++u){var w=a[u];if(null!==w)if(p(w))v+=m*w*d/1e3;else{var x,y,z,A,B=!1,D=w.fontChar,E=w.accent,F=w.width;if(l){var G,H,I;G=w.vmetric||n,H=w.vmetric?G[1]:.5*F,H=-H*o,I=G[2]*o,F=G?-G[0]:F,x=H/f,y=(v+I)/f}else x=v/f,y=0;if(c.remeasure&&F>0&&this.isFontSubpixelAAEnabled){var J=1e3*e.measureText(D).width/d*f,K=F/J;B=!0,e.save(),e.scale(K,1),x/=K}q&&!E?e.fillText(D,x,y):(this.paintChar(D,x,y),E&&(z=x+E.offset.x/f,A=y-E.offset.y/f,this.paintChar(E.fontChar,z,A)));var L=F*o+g*i;v+=L,B&&e.restore()}else v+=i*h}l?b.y-=v*j:b.x+=v*j,e.restore()}},showType3Text:function(a){var c,d,e,f,g=this.ctx,h=this.current,i=h.font,j=h.fontSize,k=h.fontDirection,l=i.vertical?1:-1,m=h.charSpacing,n=h.wordSpacing,o=h.textHScale*k,q=h.fontMatrix||B,r=a.length,s=h.textRenderingMode===C.INVISIBLE;if(!s&&0!==j){for(this.cachedGetSinglePixelWidth=null,g.save(),g.transform.apply(g,h.textMatrix),g.translate(h.x,h.y),g.scale(o,k),c=0;r>c;++c)if(d=a[c],null!==d)if(p(d))f=l*d*j/1e3,this.ctx.translate(f,0),h.x+=f*o;else{var t=i.charProcOperatorList[d.operatorListId];if(t){this.processingType3=d,this.save(),g.scale(j,j),g.transform.apply(g,q),this.executeOperatorList(t),this.restore();var u=T.applyTransform([d.width,0],q);e=u[0]*j+m,g.translate(e,0),h.x+=e*o}else b('Type3 character "'+d.operatorListId+'" is not available')}else this.ctx.translate(n,0),h.x+=n*o;g.restore(),this.processingType3=null}},setCharWidth:function(a,b){},setCharWidthAndBounds:function(a,b,c,d,e,f){this.ctx.rect(c,d,e-c,f-d),this.clip(),this.endPath()},getColorN_Pattern:function(a){var b;if("TilingPattern"===a[0]){var c=a[1],d=this.baseTransform||this.ctx.mozCurrentTransform.slice();b=new oa(a,c,this.ctx,this.objs,this.commonObjs,d)}else b=y(a);return b},setStrokeColorN:function(){this.current.strokeColor=this.getColorN_Pattern(arguments)},setFillColorN:function(){this.current.fillColor=this.getColorN_Pattern(arguments),this.current.patternFill=!0},setStrokeRGBColor:function(a,b,c){var d=T.makeCssRgb(a,b,c);this.ctx.strokeStyle=d,this.current.strokeColor=d},setFillRGBColor:function(a,b,c){var d=T.makeCssRgb(a,b,c);this.ctx.fillStyle=d,this.current.fillColor=d,this.current.patternFill=!1},shadingFill:function(a){var b=this.ctx;this.save();var c=y(a);b.fillStyle=c.getPattern(b,this,!0);var d=b.mozCurrentTransformInverse;if(d){var e=b.canvas,f=e.width,g=e.height,h=T.applyTransform([0,0],d),i=T.applyTransform([0,g],d),j=T.applyTransform([f,0],d),k=T.applyTransform([f,g],d),l=Math.min(h[0],i[0],j[0],k[0]),m=Math.min(h[1],i[1],j[1],k[1]),n=Math.max(h[0],i[0],j[0],k[0]),o=Math.max(h[1],i[1],j[1],k[1]);this.ctx.fillRect(l,m,n-l,o-m)}else this.ctx.fillRect(-1e10,-1e10,2e10,2e10);this.restore()},beginInlineImage:function(){d("Should not call beginInlineImage")},beginImageData:function(){d("Should not call beginImageData")},paintFormXObjectBegin:function(a,b){if(this.save(),this.baseTransformStack.push(this.baseTransform),q(a)&&6===a.length&&this.transform.apply(this,a),this.baseTransform=this.ctx.mozCurrentTransform,q(b)&&4===b.length){var c=b[2]-b[0],d=b[3]-b[1];this.ctx.rect(b[0],b[1],c,d),this.clip(),this.endPath()}},paintFormXObjectEnd:function(){this.restore(),this.baseTransform=this.baseTransformStack.pop()},beginGroup:function(c){this.save();var d=this.ctx;c.isolated||a("TODO: Support non-isolated groups."),
+c.knockout&&b("Knockout groups not supported.");var e=d.mozCurrentTransform;c.matrix&&d.transform.apply(d,c.matrix),f(c.bbox,"Bounding box is required.");var g=T.getAxialAlignedBoundingBox(c.bbox,d.mozCurrentTransform),i=[0,0,d.canvas.width,d.canvas.height];g=T.intersect(g,i)||[0,0,0,0];var j=Math.floor(g[0]),k=Math.floor(g[1]),l=Math.max(Math.ceil(g[2])-j,1),m=Math.max(Math.ceil(g[3])-k,1),n=1,o=1;l>da&&(n=l/da,l=da),m>da&&(o=m/da,m=da);var p="groupAt"+this.groupLevel;c.smask&&(p+="_smask_"+this.smaskCounter++%2);var q=ia.getCanvas(p,l,m,!0),r=q.context;r.scale(1/n,1/o),r.translate(-j,-k),r.transform.apply(r,e),c.smask?this.smaskStack.push({canvas:q.canvas,context:r,offsetX:j,offsetY:k,scaleX:n,scaleY:o,subtype:c.smask.subtype,backdrop:c.smask.backdrop}):(d.setTransform(1,0,0,1,0,0),d.translate(j,k),d.scale(n,o)),h(d,r),this.ctx=r,this.setGState([["BM","Normal"],["ca",1],["CA",1]]),this.groupStack.push(d),this.groupLevel++},endGroup:function(a){this.groupLevel--;var b=this.ctx;this.ctx=this.groupStack.pop(),void 0!==this.ctx.imageSmoothingEnabled?this.ctx.imageSmoothingEnabled=!1:this.ctx.mozImageSmoothingEnabled=!1,a.smask?this.tempSMask=this.smaskStack.pop():this.ctx.drawImage(b.canvas,0,0),this.restore()},beginAnnotations:function(){this.save(),this.current=new ja},endAnnotations:function(){this.restore()},beginAnnotation:function(a,b,c){if(this.save(),q(a)&&4===a.length){var d=a[2]-a[0],e=a[3]-a[1];this.ctx.rect(a[0],a[1],d,e),this.clip(),this.endPath()}this.transform.apply(this,b),this.transform.apply(this,c)},endAnnotation:function(){this.restore()},paintJpegXObject:function(a,c,d){var e=this.objs.get(a);if(!e)return void b("Dependent image isn't ready yet");this.save();var f=this.ctx;if(f.scale(1/c,-1/d),f.drawImage(e,0,0,e.width,e.height,0,-d,c,d),this.imageLayer){var g=f.mozCurrentTransformInverse,h=this.getCanvasPosition(0,0);this.imageLayer.appendImage({objId:a,left:h[0],top:h[1],width:c/g[0],height:d/g[3]})}this.restore()},paintImageMaskXObject:function(a){var b=this.ctx,c=a.width,d=a.height,e=this.current.fillColor,f=this.current.patternFill,h=this.processingType3;if(fa&&h&&void 0===h.compiled&&(ga>=c&&ga>=d?h.compiled=x({data:a.data,width:c,height:d}):h.compiled=null),h&&h.compiled)return void h.compiled(b);var i=ia.getCanvas("maskCanvas",c,d),j=i.context;j.save(),g(j,a),j.globalCompositeOperation="source-in",j.fillStyle=f?e.getPattern(j,this):e,j.fillRect(0,0,c,d),j.restore(),this.paintInlineImageXObject(i.canvas)},paintImageMaskXObjectRepeat:function(a,b,c,d){var e=a.width,f=a.height,h=this.current.fillColor,i=this.current.patternFill,j=ia.getCanvas("maskCanvas",e,f),k=j.context;k.save(),g(k,a),k.globalCompositeOperation="source-in",k.fillStyle=i?h.getPattern(k,this):h,k.fillRect(0,0,e,f),k.restore();for(var l=this.ctx,m=0,n=d.length;n>m;m+=2)l.save(),l.transform(b,0,0,c,d[m],d[m+1]),l.scale(1,-1),l.drawImage(j.canvas,0,0,e,f,0,-1,1,1),l.restore()},paintImageMaskXObjectGroup:function(a){for(var b=this.ctx,c=this.current.fillColor,d=this.current.patternFill,e=0,f=a.length;f>e;e++){var h=a[e],i=h.width,j=h.height,k=ia.getCanvas("maskCanvas",i,j),l=k.context;l.save(),g(l,h),l.globalCompositeOperation="source-in",l.fillStyle=d?c.getPattern(l,this):c,l.fillRect(0,0,i,j),l.restore(),b.save(),b.transform.apply(b,h.transform),b.scale(1,-1),b.drawImage(k.canvas,0,0,i,j,0,-1,1,1),b.restore()}},paintImageXObject:function(a){var c=this.objs.get(a);return c?void this.paintInlineImageXObject(c):void b("Dependent image isn't ready yet")},paintImageXObjectRepeat:function(a,c,d,e){var f=this.objs.get(a);if(!f)return void b("Dependent image isn't ready yet");for(var g=f.width,h=f.height,i=[],j=0,k=e.length;k>j;j+=2)i.push({transform:[c,0,0,d,e[j],e[j+1]],x:0,y:0,w:g,h:h});this.paintInlineImageXObjectGroup(f,i)},paintInlineImageXObject:function(a){var b=a.width,c=a.height,d=this.ctx;this.save(),d.scale(1/b,-1/c);var f,g,h=d.mozCurrentTransformInverse,i=h[0],j=h[1],k=Math.max(Math.sqrt(i*i+j*j),1),l=h[2],m=h[3],n=Math.max(Math.sqrt(l*l+m*m),1);if(a instanceof HTMLElement||!a.data)f=a;else{g=ia.getCanvas("inlineImage",b,c);var o=g.context;e(o,a),f=g.canvas}for(var p=b,q=c,r="prescale1";k>2&&p>1||n>2&&q>1;){var s=p,t=q;k>2&&p>1&&(s=Math.ceil(p/2),k/=p/s),n>2&&q>1&&(t=Math.ceil(q/2),n/=q/t),g=ia.getCanvas(r,s,t),o=g.context,o.clearRect(0,0,s,t),o.drawImage(f,0,0,p,q,0,0,s,t),f=g.canvas,p=s,q=t,r="prescale1"===r?"prescale2":"prescale1"}if(d.drawImage(f,0,0,p,q,0,-c,b,c),this.imageLayer){var u=this.getCanvasPosition(0,-c);this.imageLayer.appendImage({imgData:a,left:u[0],top:u[1],width:b/h[0],height:c/h[3]})}this.restore()},paintInlineImageXObjectGroup:function(a,b){var c=this.ctx,d=a.width,f=a.height,g=ia.getCanvas("inlineImage",d,f),h=g.context;e(h,a);for(var i=0,j=b.length;j>i;i++){var k=b[i];if(c.save(),c.transform.apply(c,k.transform),c.scale(1,-1),c.drawImage(g.canvas,k.x,k.y,k.w,k.h,0,-1,1,1),this.imageLayer){var l=this.getCanvasPosition(k.x,k.y);this.imageLayer.appendImage({imgData:a,left:l[0],top:l[1],width:d,height:f})}c.restore()}},paintSolidColorImageMask:function(){this.ctx.fillRect(0,0,1,1)},paintXObject:function(){I.notify(H.unknown),b("Unsupported 'paintXObject' command.")},markPoint:function(a){},markPointProps:function(a,b){},beginMarkedContent:function(a){},beginMarkedContentProps:function(a,b){},endMarkedContent:function(){},beginCompat:function(){},endCompat:function(){},consumePath:function(){var a=this.ctx;this.pendingClip&&(this.pendingClip===v?void 0!==a.mozFillRule?(a.mozFillRule="evenodd",a.clip(),a.mozFillRule="nonzero"):a.clip("evenodd"):a.clip(),this.pendingClip=null),a.beginPath()},getSinglePixelWidth:function(a){if(null===this.cachedGetSinglePixelWidth){var b=this.ctx.mozCurrentTransformInverse;this.cachedGetSinglePixelWidth=Math.sqrt(Math.max(b[0]*b[0]+b[1]*b[1],b[2]*b[2]+b[3]*b[3]))}return this.cachedGetSinglePixelWidth},getCanvasPosition:function(a,b){var c=this.ctx.mozCurrentTransform;return[c[0]*a+c[2]*b+c[4],c[1]*a+c[3]*b+c[5]]}};for(var z in G)c.prototype[G[z]]=c.prototype[z];return c}(),la=function(){function a(a,b,c){var d=a.createShader(c);a.shaderSource(d,b),a.compileShader(d);var e=a.getShaderParameter(d,a.COMPILE_STATUS);if(!e){var f=a.getShaderInfoLog(d);throw new Error("Error during shader compilation: "+f)}return d}function b(b,c){return a(b,c,b.VERTEX_SHADER)}function c(b,c){return a(b,c,b.FRAGMENT_SHADER)}function d(a,b){for(var c=a.createProgram(),d=0,e=b.length;e>d;++d)a.attachShader(c,b[d]);a.linkProgram(c);var f=a.getProgramParameter(c,a.LINK_STATUS);if(!f){var g=a.getProgramInfoLog(c);throw new Error("Error during program linking: "+g)}return c}function e(a,b,c){a.activeTexture(c);var d=a.createTexture();return a.bindTexture(a.TEXTURE_2D,d),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.NEAREST),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.NEAREST),a.texImage2D(a.TEXTURE_2D,0,a.RGBA,a.RGBA,a.UNSIGNED_BYTE,b),d}function f(){m||(n=document.createElement("canvas"),m=n.getContext("webgl",{premultipliedalpha:!1}))}function g(){var a,e;f(),a=n,n=null,e=m,m=null;var g=b(e,o),h=c(e,p),i=d(e,[g,h]);e.useProgram(i);var j={};j.gl=e,j.canvas=a,j.resolutionLocation=e.getUniformLocation(i,"u_resolution"),j.positionLocation=e.getAttribLocation(i,"a_position"),j.backdropLocation=e.getUniformLocation(i,"u_backdrop"),j.subtypeLocation=e.getUniformLocation(i,"u_subtype");var k=e.getAttribLocation(i,"a_texCoord"),l=e.getUniformLocation(i,"u_image"),r=e.getUniformLocation(i,"u_mask"),s=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,s),e.bufferData(e.ARRAY_BUFFER,new Float32Array([0,0,1,0,0,1,0,1,1,0,1,1]),e.STATIC_DRAW),e.enableVertexAttribArray(k),e.vertexAttribPointer(k,2,e.FLOAT,!1,0,0),e.uniform1i(l,0),e.uniform1i(r,1),q=j}function h(a,b,c){var d=a.width,f=a.height;q||g();var h=q,i=h.canvas,j=h.gl;i.width=d,i.height=f,j.viewport(0,0,j.drawingBufferWidth,j.drawingBufferHeight),j.uniform2f(h.resolutionLocation,d,f),c.backdrop?j.uniform4f(h.resolutionLocation,c.backdrop[0],c.backdrop[1],c.backdrop[2],1):j.uniform4f(h.resolutionLocation,0,0,0,0),j.uniform1i(h.subtypeLocation,"Luminosity"===c.subtype?1:0);var k=e(j,a,j.TEXTURE0),l=e(j,b,j.TEXTURE1),m=j.createBuffer();return j.bindBuffer(j.ARRAY_BUFFER,m),j.bufferData(j.ARRAY_BUFFER,new Float32Array([0,0,d,0,0,f,0,f,d,0,d,f]),j.STATIC_DRAW),j.enableVertexAttribArray(h.positionLocation),j.vertexAttribPointer(h.positionLocation,2,j.FLOAT,!1,0,0),j.clearColor(0,0,0,0),j.enable(j.BLEND),j.blendFunc(j.ONE,j.ONE_MINUS_SRC_ALPHA),j.clear(j.COLOR_BUFFER_BIT),j.drawArrays(j.TRIANGLES,0,6),j.flush(),j.deleteTexture(k),j.deleteTexture(l),j.deleteBuffer(m),i}function j(){var a,e;f(),a=n,n=null,e=m,m=null;var g=b(e,r),h=c(e,s),i=d(e,[g,h]);e.useProgram(i);var j={};j.gl=e,j.canvas=a,j.resolutionLocation=e.getUniformLocation(i,"u_resolution"),j.scaleLocation=e.getUniformLocation(i,"u_scale"),j.offsetLocation=e.getUniformLocation(i,"u_offset"),j.positionLocation=e.getAttribLocation(i,"a_position"),j.colorLocation=e.getAttribLocation(i,"a_color"),t=j}function k(a,b,c,d,e){t||j();var f=t,g=f.canvas,h=f.gl;g.width=a,g.height=b,h.viewport(0,0,h.drawingBufferWidth,h.drawingBufferHeight),h.uniform2f(f.resolutionLocation,a,b);var i,k,l,m=0;for(i=0,k=d.length;k>i;i++)switch(d[i].type){case"lattice":l=d[i].coords.length/d[i].verticesPerRow|0,m+=(l-1)*(d[i].verticesPerRow-1)*6;break;case"triangles":m+=d[i].coords.length}var n=new Float32Array(2*m),o=new Uint8Array(3*m),p=e.coords,q=e.colors,r=0,s=0;for(i=0,k=d.length;k>i;i++){var u=d[i],v=u.coords,w=u.colors;switch(u.type){case"lattice":var x=u.verticesPerRow;l=v.length/x|0;for(var y=1;l>y;y++)for(var z=y*x+1,A=1;x>A;A++,z++)n[r]=p[v[z-x-1]],n[r+1]=p[v[z-x-1]+1],n[r+2]=p[v[z-x]],n[r+3]=p[v[z-x]+1],n[r+4]=p[v[z-1]],n[r+5]=p[v[z-1]+1],o[s]=q[w[z-x-1]],o[s+1]=q[w[z-x-1]+1],o[s+2]=q[w[z-x-1]+2],o[s+3]=q[w[z-x]],o[s+4]=q[w[z-x]+1],o[s+5]=q[w[z-x]+2],o[s+6]=q[w[z-1]],o[s+7]=q[w[z-1]+1],o[s+8]=q[w[z-1]+2],n[r+6]=n[r+2],n[r+7]=n[r+3],n[r+8]=n[r+4],n[r+9]=n[r+5],n[r+10]=p[v[z]],n[r+11]=p[v[z]+1],o[s+9]=o[s+3],o[s+10]=o[s+4],o[s+11]=o[s+5],o[s+12]=o[s+6],o[s+13]=o[s+7],o[s+14]=o[s+8],o[s+15]=q[w[z]],o[s+16]=q[w[z]+1],o[s+17]=q[w[z]+2],r+=12,s+=18;break;case"triangles":for(var B=0,C=v.length;C>B;B++)n[r]=p[v[B]],n[r+1]=p[v[B]+1],o[s]=q[w[B]],o[s+1]=q[w[B]+1],o[s+2]=q[w[B]+2],r+=2,s+=3}}c?h.clearColor(c[0]/255,c[1]/255,c[2]/255,1):h.clearColor(0,0,0,0),h.clear(h.COLOR_BUFFER_BIT);var D=h.createBuffer();h.bindBuffer(h.ARRAY_BUFFER,D),h.bufferData(h.ARRAY_BUFFER,n,h.STATIC_DRAW),h.enableVertexAttribArray(f.positionLocation),h.vertexAttribPointer(f.positionLocation,2,h.FLOAT,!1,0,0);var E=h.createBuffer();return h.bindBuffer(h.ARRAY_BUFFER,E),h.bufferData(h.ARRAY_BUFFER,o,h.STATIC_DRAW),h.enableVertexAttribArray(f.colorLocation),h.vertexAttribPointer(f.colorLocation,3,h.UNSIGNED_BYTE,!1,0,0),h.uniform2f(f.scaleLocation,e.scaleX,e.scaleY),h.uniform2f(f.offsetLocation,e.offsetX,e.offsetY),h.drawArrays(h.TRIANGLES,0,m),h.flush(),h.deleteBuffer(D),h.deleteBuffer(E),g}function l(){q&&q.canvas&&(q.canvas.width=0,q.canvas.height=0),t&&t.canvas&&(t.canvas.width=0,t.canvas.height=0),q=null,t=null}var m,n,o="  attribute vec2 a_position;                                      attribute vec2 a_texCoord;                                                                                                      uniform vec2 u_resolution;                                                                                                      varying vec2 v_texCoord;                                                                                                        void main() {                                                     vec2 clipSpace = (a_position / u_resolution) * 2.0 - 1.0;       gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);                                                                              v_texCoord = a_texCoord;                                      }                                                             ",p="  precision mediump float;                                                                                                        uniform vec4 u_backdrop;                                        uniform int u_subtype;                                          uniform sampler2D u_image;                                      uniform sampler2D u_mask;                                                                                                       varying vec2 v_texCoord;                                                                                                        void main() {                                                     vec4 imageColor = texture2D(u_image, v_texCoord);               vec4 maskColor = texture2D(u_mask, v_texCoord);                 if (u_backdrop.a > 0.0) {                                         maskColor.rgb = maskColor.rgb * maskColor.a +                                   u_backdrop.rgb * (1.0 - maskColor.a);         }                                                               float lum;                                                      if (u_subtype == 0) {                                             lum = maskColor.a;                                            } else {                                                          lum = maskColor.r * 0.3 + maskColor.g * 0.59 +                        maskColor.b * 0.11;                                     }                                                               imageColor.a *= lum;                                            imageColor.rgb *= imageColor.a;                                 gl_FragColor = imageColor;                                    }                                                             ",q=null,r="  attribute vec2 a_position;                                      attribute vec3 a_color;                                                                                                         uniform vec2 u_resolution;                                      uniform vec2 u_scale;                                           uniform vec2 u_offset;                                                                                                          varying vec4 v_color;                                                                                                           void main() {                                                     vec2 position = (a_position + u_offset) * u_scale;              vec2 clipSpace = (position / u_resolution) * 2.0 - 1.0;         gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);                                                                              v_color = vec4(a_color / 255.0, 1.0);                         }                                                             ",s="  precision mediump float;                                                                                                        varying vec4 v_color;                                                                                                           void main() {                                                     gl_FragColor = v_color;                                       }                                                             ",t=null;return{get isEnabled(){if(PDFJS.disableWebGL)return!1;var a=!1;try{f(),a=!!m}catch(b){}return i(this,"isEnabled",a)},composeSMask:h,drawFigures:k,clear:l}}(),ma={};ma.RadialAxial={fromIR:function(a){var b=a[1],c=a[2],d=a[3],e=a[4],f=a[5],g=a[6];return{type:"Pattern",getPattern:function(a){var h;"axial"===b?h=a.createLinearGradient(d[0],d[1],e[0],e[1]):"radial"===b&&(h=a.createRadialGradient(d[0],d[1],f,e[0],e[1],g));for(var i=0,j=c.length;j>i;++i){var k=c[i];h.addColorStop(k[0],k[1])}return h}}}};var na=function(){function a(a,b,c,d,e,f,g,h){var i,j=b.coords,k=b.colors,l=a.data,m=4*a.width;j[c+1]>j[d+1]&&(i=c,c=d,d=i,i=f,f=g,g=i),j[d+1]>j[e+1]&&(i=d,d=e,e=i,i=g,g=h,h=i),j[c+1]>j[d+1]&&(i=c,c=d,d=i,i=f,f=g,g=i);var n=(j[c]+b.offsetX)*b.scaleX,o=(j[c+1]+b.offsetY)*b.scaleY,p=(j[d]+b.offsetX)*b.scaleX,q=(j[d+1]+b.offsetY)*b.scaleY,r=(j[e]+b.offsetX)*b.scaleX,s=(j[e+1]+b.offsetY)*b.scaleY;if(!(o>=s))for(var t,u,v,w,x,y,z,A,B,C=k[f],D=k[f+1],E=k[f+2],F=k[g],G=k[g+1],H=k[g+2],I=k[h],J=k[h+1],K=k[h+2],L=Math.round(o),M=Math.round(s),N=L;M>=N;N++){q>N?(B=o>N?0:o===q?1:(o-N)/(o-q),t=n-(n-p)*B,u=C-(C-F)*B,v=D-(D-G)*B,w=E-(E-H)*B):(B=N>s?1:q===s?0:(q-N)/(q-s),t=p-(p-r)*B,u=F-(F-I)*B,v=G-(G-J)*B,w=H-(H-K)*B),B=o>N?0:N>s?1:(o-N)/(o-s),x=n-(n-r)*B,y=C-(C-I)*B,z=D-(D-J)*B,A=E-(E-K)*B;for(var O=Math.round(Math.min(t,x)),P=Math.round(Math.max(t,x)),Q=m*N+4*O,R=O;P>=R;R++)B=(t-R)/(t-x),B=0>B?0:B>1?1:B,l[Q++]=u-(u-y)*B|0,l[Q++]=v-(v-z)*B|0,l[Q++]=w-(w-A)*B|0,l[Q++]=255}}function b(b,c,e){var f,g,h=c.coords,i=c.colors;switch(c.type){case"lattice":var j=c.verticesPerRow,k=Math.floor(h.length/j)-1,l=j-1;for(f=0;k>f;f++)for(var m=f*j,n=0;l>n;n++,m++)a(b,e,h[m],h[m+1],h[m+j],i[m],i[m+1],i[m+j]),a(b,e,h[m+j+1],h[m+1],h[m+j],i[m+j+1],i[m+1],i[m+j]);break;case"triangles":for(f=0,g=h.length;g>f;f+=3)a(b,e,h[f],h[f+1],h[f+2],i[f],i[f+1],i[f+2]);break;default:d("illigal figure")}}function c(a,c,d,e,f,g){var h,i,j,k,l=1.1,m=3e3,n=Math.floor(a[0]),o=Math.floor(a[1]),p=Math.ceil(a[2])-n,q=Math.ceil(a[3])-o,r=Math.min(Math.ceil(Math.abs(p*c[0]*l)),m),s=Math.min(Math.ceil(Math.abs(q*c[1]*l)),m),t=p/r,u=q/s,v={coords:d,colors:e,offsetX:-n,offsetY:-o,scaleX:1/t,scaleY:1/u};if(la.isEnabled)h=la.drawFigures(r,s,g,f,v),i=ia.getCanvas("mesh",r,s,!1),i.context.drawImage(h,0,0),h=i.canvas;else{i=ia.getCanvas("mesh",r,s,!1);var w=i.context,x=w.createImageData(r,s);if(g){var y=x.data;for(j=0,k=y.length;k>j;j+=4)y[j]=g[0],y[j+1]=g[1],y[j+2]=g[2],y[j+3]=255}for(j=0;j<f.length;j++)b(x,f[j],v);w.putImageData(x,0,0),h=i.canvas}return{canvas:h,offsetX:n,offsetY:o,scaleX:t,scaleY:u}}return c}();ma.Mesh={fromIR:function(a){var b=a[2],c=a[3],d=a[4],e=a[5],f=a[6],g=a[8];return{type:"Pattern",getPattern:function(a,h,i){var j;if(i)j=T.singularValueDecompose2dScale(a.mozCurrentTransform);else if(j=T.singularValueDecompose2dScale(h.baseTransform),f){var k=T.singularValueDecompose2dScale(f);j=[j[0]*k[0],j[1]*k[1]]}var l=na(e,j,b,c,d,i?null:g);return i||(a.setTransform.apply(a,h.baseTransform),f&&a.transform.apply(a,f)),a.translate(l.offsetX,l.offsetY),a.scale(l.scaleX,l.scaleY),a.createPattern(l.canvas,"no-repeat")}}}},ma.Dummy={fromIR:function(){return{type:"Pattern",getPattern:function(){return"hotpink"}}}};var oa=function(){function b(a,b,c,d,e,f){this.operatorList=a[2],this.matrix=a[3]||[1,0,0,1,0,0],this.bbox=a[4],this.xstep=a[5],this.ystep=a[6],this.paintType=a[7],this.tilingType=a[8],this.color=b,this.objs=d,this.commonObjs=e,this.baseTransform=f,this.type="Pattern",this.ctx=c}var c={COLORED:1,UNCOLORED:2},e=3e3;return b.prototype={createPatternCanvas:function(b){var c=this.operatorList,d=this.bbox,f=this.xstep,g=this.ystep,h=this.paintType,i=this.tilingType,j=this.color,k=this.objs,l=this.commonObjs;a("TilingType: "+i);var m=d[0],n=d[1],o=d[2],p=d[3],q=[m,n],r=[m+f,n+g],s=r[0]-q[0],t=r[1]-q[1],u=T.singularValueDecompose2dScale(this.matrix),v=T.singularValueDecompose2dScale(this.baseTransform),w=[u[0]*v[0],u[1]*v[1]];s=Math.min(Math.ceil(Math.abs(s*w[0])),e),t=Math.min(Math.ceil(Math.abs(t*w[1])),e);var x=ia.getCanvas("pattern",s,t,!0),y=x.context,z=new ka(y,l,k);z.groupLevel=b.groupLevel,this.setFillAndStrokeStyleToContext(y,h,j),this.setScale(s,t,f,g),this.transformToScale(z);var A=[1,0,0,1,-q[0],-q[1]];return z.transform.apply(z,A),this.clipBbox(z,d,m,n,o,p),z.executeOperatorList(c),x.canvas},setScale:function(a,b,c,d){this.scale=[a/c,b/d]},transformToScale:function(a){var b=this.scale,c=[b[0],0,0,b[1],0,0];a.transform.apply(a,c)},scaleToContext:function(){var a=this.scale;this.ctx.scale(1/a[0],1/a[1])},clipBbox:function(a,b,c,d,e,f){if(b&&q(b)&&4===b.length){var g=e-c,h=f-d;a.ctx.rect(c,d,g,h),a.clip(),a.endPath()}},setFillAndStrokeStyleToContext:function(a,b,e){switch(b){case c.COLORED:var f=this.ctx;a.fillStyle=f.fillStyle,a.strokeStyle=f.strokeStyle;break;case c.UNCOLORED:var g=T.makeCssRgb(e[0],e[1],e[2]);a.fillStyle=g,a.strokeStyle=g;break;default:d("Unsupported paint type: "+b)}},getPattern:function(a,b){var c=this.createPatternCanvas(b);return a=this.ctx,a.setTransform.apply(a,this.baseTransform),a.transform.apply(a,this.matrix),this.scaleToContext(),a.createPattern(c,"repeat")}},b}();PDFJS.disableFontFace=!1;var pa={insertRule:function(a){var b=document.getElementById("PDFJS_FONT_STYLE_TAG");b||(b=document.createElement("style"),b.id="PDFJS_FONT_STYLE_TAG",document.documentElement.getElementsByTagName("head")[0].appendChild(b));var c=b.sheet;c.insertRule(a,c.cssRules.length)},clear:function(){var a=document.getElementById("PDFJS_FONT_STYLE_TAG");a&&a.parentNode.removeChild(a),this.nativeFontFaces.forEach(function(a){document.fonts["delete"](a)}),this.nativeFontFaces.length=0},get loadTestFont(){return i(this,"loadTestFont",atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA=="))},get isEvalSupported(){var a=!1;if(PDFJS.isEvalSupported)try{new Function(""),a=!0}catch(b){}return i(this,"isEvalSupported",a)},loadTestFontId:0,loadingContext:{requests:[],nextRequestId:0},isSyncFontLoadingSupported:function(){if(A)return!1;var a=window.navigator.userAgent,b=/Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(a);return b&&b[1]>=14?!0:"node"===a?!0:!1}(),nativeFontFaces:[],isFontLoadingAPISupported:!A&&"undefined"!=typeof document&&!!document.fonts,addNativeFontFace:function(a){this.nativeFontFaces.push(a),document.fonts.add(a)},bind:function(a,c){f(!A,"bind() shall be called from main thread");for(var d=[],e=[],g=[],h=function(a){return a.loaded["catch"](function(c){b('Failed to load font "'+a.family+'": '+c)})},i=0,j=a.length;j>i;i++){var k=a[i];if(!k.attached&&k.loading!==!1)if(k.attached=!0,this.isFontLoadingAPISupported){var l=k.createNativeFontFace();l&&g.push(h(l))}else{var m=k.bindDOM();m&&(d.push(m),e.push(k))}}var n=pa.queueLoadingCallback(c);this.isFontLoadingAPISupported?Promise.all(g).then(function(){n.complete()}):d.length>0&&!this.isSyncFontLoadingSupported?pa.prepareFontLoadEvent(d,e,n):n.complete()},queueLoadingCallback:function(a){function b(){for(f(!e.end,"completeRequest() cannot be called twice"),e.end=Date.now();c.requests.length>0&&c.requests[0].end;){var a=c.requests.shift();setTimeout(a.callback,0)}}var c=pa.loadingContext,d="pdfjs-font-loading-"+c.nextRequestId++,e={id:d,complete:b,callback:a,started:Date.now()};return c.requests.push(e),e},prepareFontLoadEvent:function(a,c,d){function e(a,b){return a.charCodeAt(b)<<24|a.charCodeAt(b+1)<<16|a.charCodeAt(b+2)<<8|255&a.charCodeAt(b+3)}function f(a,b,c,d){var e=a.substr(0,b),f=a.substr(b+c);return e+d+f}function g(a,c){if(l++,l>30)return b("Load test font never loaded."),void c();k.font="30px "+a,k.fillText(".",0,20);var d=k.getImageData(0,0,1,1);return d.data[3]>0?void c():void setTimeout(g.bind(null,a,c))}var h,i,j=document.createElement("canvas");j.width=1,j.height=1;var k=j.getContext("2d"),l=0,n="lt"+Date.now()+this.loadTestFontId++,o=this.loadTestFont,p=976;o=f(o,p,n.length,n);var q=16,r=1482184792,s=e(o,q);for(h=0,i=n.length-3;i>h;h+=4)s=s-r+e(n,h)|0;h<n.length&&(s=s-r+e(n+"XXX",h)|0),o=f(o,q,4,m(s));var t="url(data:font/opentype;base64,"+btoa(o)+");",u='@font-face { font-family:"'+n+'";src:'+t+"}";pa.insertRule(u);var v=[];for(h=0,i=c.length;i>h;h++)v.push(c[h].loadedName);v.push(n);var w=document.createElement("div");for(w.setAttribute("style","visibility: hidden;width: 10px; height: 10px;position: absolute; top: 0px; left: 0px;"),h=0,i=v.length;i>h;++h){var x=document.createElement("span");x.textContent="Hi",x.style.fontFamily=v[h],w.appendChild(x)}document.body.appendChild(w),g(n,function(){document.body.removeChild(w),d.complete()})}},qa=function(){function a(a,b,c){if(this.compiledGlyphs={},1!==arguments.length);else{var d=arguments[0];for(var e in d)this[e]=d[e]}}return a.prototype={createNativeFontFace:function(){if(!this.data)return null;if(PDFJS.disableFontFace)return this.disableFontFace=!0,null;var a=new FontFace(this.loadedName,this.data,{});return pa.addNativeFontFace(a),PDFJS.pdfBug&&"FontInspector"in z&&z.FontInspector.enabled&&z.FontInspector.fontAdded(this),a},bindDOM:function(){if(!this.data)return null;if(PDFJS.disableFontFace)return this.disableFontFace=!0,null;var a=k(new Uint8Array(this.data)),b=this.loadedName,c="url(data:"+this.mimetype+";base64,"+window.btoa(a)+");",d='@font-face { font-family:"'+b+'";src:'+c+"}";return pa.insertRule(d),PDFJS.pdfBug&&"FontInspector"in z&&z.FontInspector.enabled&&z.FontInspector.fontAdded(this,c),d},getPathGenerator:function(a,b){if(!(b in this.compiledGlyphs)){var c,d,e,f=a.get(this.loadedName+"_path_"+b);if(pa.isEvalSupported){var g,h="";for(d=0,e=f.length;e>d;d++)c=f[d],g=void 0!==c.args?c.args.join(","):"",h+="c."+c.cmd+"("+g+");\n";this.compiledGlyphs[b]=new Function("c","size",h)}else this.compiledGlyphs[b]=function(a,b){for(d=0,e=f.length;e>d;d++)c=f[d],"scale"===c.cmd&&(c.args=[b,-b]),a[c.cmd].apply(a,c.args)}}return this.compiledGlyphs[b]}},a}(),ra=10,sa=function(){function a(a,b,c){var d=a.style;if(d.fontSize=b.fontSize+"px",d.direction=b.fontDirection<0?"rtl":"ltr",c){d.fontWeight=c.black?c.bold?"bolder":"bold":c.bold?"bold":"normal",d.fontStyle=c.italic?"italic":"normal";var e=c.loadedName,f=e?'"'+e+'", ':"",g=c.fallbackName||"Helvetica, sans-serif";d.fontFamily=f+g}}function c(a){var c=document.createElement("section"),d=c.style,e=a.rect[2]-a.rect[0],f=a.rect[3]-a.rect[1];if(a.borderStyle.width>0){c.style.borderWidth=a.borderStyle.width+"px",a.borderStyle.style!==F.UNDERLINE&&(e-=2*a.borderStyle.width,f-=2*a.borderStyle.width);var g=a.borderStyle.horizontalCornerRadius,h=a.borderStyle.verticalCornerRadius;if(g>0||h>0){var i=g+"px / "+h+"px";CustomStyle.setProp("borderRadius",c,i)}switch(a.borderStyle.style){case F.SOLID:c.style.borderStyle="solid";break;case F.DASHED:c.style.borderStyle="dashed";break;case F.BEVELED:b("Unimplemented border style: beveled");break;case F.INSET:b("Unimplemented border style: inset");break;case F.UNDERLINE:c.style.borderBottomStyle="solid"}a.color?c.style.borderColor=T.makeCssRgb(0|a.color[0],0|a.color[1],0|a.color[2]):c.style.borderWidth=0}return d.width=e+"px",d.height=f+"px",c}function d(b,c){var d=document.createElement("div"),e=b.rect[2]-b.rect[0],f=b.rect[3]-b.rect[1];d.style.width=e+"px",d.style.height=f+"px",d.style.display="table";var g=document.createElement("div");g.textContent=b.fieldValue;var h=b.textAlignment;g.style.textAlign=["left","center","right"][h],g.style.verticalAlign="middle",g.style.display="table-cell";var i=b.fontRefName?c.getData(b.fontRefName):null;return a(g,b,i),d.appendChild(g),d}function e(a){var b=a.rect;b[3]-b[1]<ra&&(b[3]=b[1]+ra),b[2]-b[0]<ra&&(b[2]=b[0]+(b[3]-b[1]));var d=c(a);d.className="annotText";var e=document.createElement("img");e.style.height=d.style.height,e.style.width=d.style.width;var f=a.name;e.src=PDFJS.imageResourcesPath+"annotation-"+f.toLowerCase()+".svg",e.alt="[{{type}} Annotation]",e.dataset.l10nId="text_annotation_type",e.dataset.l10nArgs=JSON.stringify({type:f});var g=document.createElement("div");g.className="annotTextContentWrapper",g.style.left=Math.floor(b[2]-b[0]+5)+"px",g.style.top="-10px";var h=document.createElement("div");h.className="annotTextContent",h.setAttribute("hidden",!0);var i,j;if(a.hasBgColor&&a.color){var k=a.color,l=.7,m=l*(255-k[0])+k[0],n=l*(255-k[1])+k[1],o=l*(255-k[2])+k[2];h.style.backgroundColor=T.makeCssRgb(0|m,0|n,0|o)}var p=document.createElement("h1"),q=document.createElement("p");if(p.textContent=a.title,a.content||a.title){var r=document.createElement("span"),s=a.content.split(/(?:\r\n?|\n)/);for(i=0,j=s.length;j>i;++i){var t=s[i];r.appendChild(document.createTextNode(t)),j-1>i&&r.appendChild(document.createElement("br"))}q.appendChild(r);var u=!1,v=function(a){a&&(u=!0),h.hasAttribute("hidden")&&(d.style.zIndex+=1,h.removeAttribute("hidden"))},w=function(a){a&&(u=!1),h.hasAttribute("hidden")||u||(d.style.zIndex-=1,h.setAttribute("hidden",!0))},x=function(){u?w(!0):v(!0)};e.addEventListener("click",function(){x()},!1),e.addEventListener("mouseover",function(){v()},!1),e.addEventListener("mouseout",function(){w()},!1),h.addEventListener("click",function(){w(!0)},!1)}else h.setAttribute("hidden",!0);return h.appendChild(p),h.appendChild(q),g.appendChild(h),d.appendChild(e),d.appendChild(g),d}function f(a){var b=c(a);b.className="annotLink";var d=document.createElement("a");return d.href=d.title=a.url||"",a.url&&j()&&(d.target=K[PDFJS.externalLinkTarget]),b.appendChild(d),b}function g(a,b){switch(a.annotationType){case E.WIDGET:return d(a,b);case E.TEXT:return e(a);case E.LINK:return f(a);default:throw new Error("Unsupported annotationType: "+a.annotationType)}}return{getHtmlElement:g}}();PDFJS.AnnotationUtils=sa;var ta={fontStyle:"normal",fontWeight:"normal",fillColor:"#000000"},ua=function(){function a(a,b,c){for(var d=-1,e=b;c>e;e++){var f=255&(d^a[e]),h=g[f];d=d>>>8^h}return-1^d}function b(b,c,d,e){var f=e,g=c.length;d[f]=g>>24&255,d[f+1]=g>>16&255,d[f+2]=g>>8&255,d[f+3]=255&g,f+=4,d[f]=255&b.charCodeAt(0),d[f+1]=255&b.charCodeAt(1),d[f+2]=255&b.charCodeAt(2),d[f+3]=255&b.charCodeAt(3),f+=4,d.set(c,f),f+=c.length;var h=a(d,e+4,f);d[f]=h>>24&255,d[f+1]=h>>16&255,d[f+2]=h>>8&255,d[f+3]=255&h}function c(a,b,c){for(var d=1,e=0,f=b;c>f;++f)d=(d+(255&a[f]))%65521,e=(e+d)%65521;return e<<16|d}function d(a,d){var g,h,i,j=a.width,k=a.height,l=a.data;switch(d){case D.GRAYSCALE_1BPP:h=0,g=1,i=j+7>>3;break;case D.RGB_24BPP:h=2,g=8,i=3*j;break;case D.RGBA_32BPP:h=6,g=8,i=4*j;break;default:throw new Error("invalid format")}var m,n,o=new Uint8Array((1+i)*k),p=0,q=0;for(m=0;k>m;++m)o[p++]=0,o.set(l.subarray(q,q+i),p),q+=i,p+=i;if(d===D.GRAYSCALE_1BPP)for(p=0,m=0;k>m;m++)for(p++,n=0;i>n;n++)o[p++]^=255;var r=new Uint8Array([j>>24&255,j>>16&255,j>>8&255,255&j,k>>24&255,k>>16&255,k>>8&255,255&k,g,h,0,0,0]),s=o.length,t=65535,u=Math.ceil(s/t),v=new Uint8Array(2+s+5*u+4),w=0;v[w++]=120,v[w++]=156;for(var x=0;s>t;)v[w++]=0,v[w++]=255,v[w++]=255,v[w++]=0,v[w++]=0,v.set(o.subarray(x,x+t),w),w+=t,x+=t,s-=t;v[w++]=1,v[w++]=255&s,v[w++]=s>>8&255,v[w++]=65535&~s&255,v[w++]=(65535&~s)>>8&255,v.set(o.subarray(x),w),w+=o.length-x;var y=c(o,0,o.length);v[w++]=y>>24&255,v[w++]=y>>16&255,v[w++]=y>>8&255,v[w++]=255&y;var z=e.length+3*f+r.length+v.length,A=new Uint8Array(z),B=0;return A.set(e,B),B+=e.length,b("IHDR",r,A,B),B+=f+r.length,b("IDATA",v,A,B),B+=f+v.length,b("IEND",new Uint8Array(0),A,B),
+PDFJS.createObjectURL(A,"image/png")}for(var e=new Uint8Array([137,80,78,71,13,10,26,10]),f=12,g=new Int32Array(256),h=0;256>h;h++){for(var i=h,j=0;8>j;j++)i=1&i?3988292384^i>>1&2147483647:i>>1&2147483647;g[h]=i}return function(a){var b=void 0===a.kind?D.GRAYSCALE_1BPP:a.kind;return d(a,b)}}(),va=function(){function a(){this.fontSizeScale=1,this.fontWeight=ta.fontWeight,this.fontSize=0,this.textMatrix=S,this.fontMatrix=B,this.leading=0,this.x=0,this.y=0,this.lineX=0,this.lineY=0,this.charSpacing=0,this.wordSpacing=0,this.textHScale=1,this.textRise=0,this.fillColor=ta.fillColor,this.strokeColor="#000000",this.fillAlpha=1,this.strokeAlpha=1,this.lineWidth=1,this.lineJoin="",this.lineCap="",this.miterLimit=0,this.dashArray=[],this.dashPhase=0,this.dependencies=[],this.clipId="",this.pendingClip=!1,this.maskId=""}return a.prototype={clone:function(){return Object.create(this)},setCurrentPoint:function(a,b){this.x=a,this.y=b}},a}(),wa=function(){function a(a,b){var c="http://www.w3.org/2000/svg",d=document.createElementNS(c,"svg:svg");return d.setAttributeNS(null,"version","1.1"),d.setAttributeNS(null,"width",a+"px"),d.setAttributeNS(null,"height",b+"px"),d.setAttributeNS(null,"viewBox","0 0 "+a+" "+b),d}function c(a){for(var b=[],c=[],d=a.length,e=0;d>e;e++)"save"!==a[e].fn?"restore"===a[e].fn?b=c.pop():b.push(a[e]):(b.push({fnId:92,fn:"group",items:[]}),c.push(b),b=b[b.length-1].items);return b}function d(a){if(a===(0|a))return a.toString();var b=a.toFixed(10),c=b.length-1;if("0"!==b[c])return b;do c--;while("0"===b[c]);return b.substr(0,"."===b[c]?c:c+1)}function e(a){if(0===a[4]&&0===a[5]){if(0===a[1]&&0===a[2])return 1===a[0]&&1===a[3]?"":"scale("+d(a[0])+" "+d(a[3])+")";if(a[0]===a[3]&&a[1]===-a[2]){var b=180*Math.acos(a[0])/Math.PI;return"rotate("+d(b)+")"}}else if(1===a[0]&&0===a[1]&&0===a[2]&&1===a[3])return"translate("+d(a[4])+" "+d(a[5])+")";return"matrix("+d(a[0])+" "+d(a[1])+" "+d(a[2])+" "+d(a[3])+" "+d(a[4])+" "+d(a[5])+")"}function f(a,b){this.current=new va,this.transformMatrix=S,this.transformStack=[],this.extraStack=[],this.commonObjs=a,this.objs=b,this.pendingEOFill=!1,this.embedFonts=!1,this.embeddedFonts={},this.cssStyle=null}var g="http://www.w3.org/2000/svg",h="http://www.w3.org/XML/1998/namespace",i="http://www.w3.org/1999/xlink",j=["butt","round","square"],k=["miter","round","bevel"],l=0,m=0;return f.prototype={save:function(){this.transformStack.push(this.transformMatrix);var a=this.current;this.extraStack.push(a),this.current=a.clone()},restore:function(){this.transformMatrix=this.transformStack.pop(),this.current=this.extraStack.pop(),this.tgrp=document.createElementNS(g,"svg:g"),this.tgrp.setAttributeNS(null,"transform",e(this.transformMatrix)),this.pgrp.appendChild(this.tgrp)},group:function(a){this.save(),this.executeOpTree(a),this.restore()},loadDependencies:function(a){for(var b=a.fnArray,c=b.length,d=a.argsArray,e=this,f=0;c>f;f++)if(G.dependency===b[f])for(var g=d[f],h=0,i=g.length;i>h;h++){var j,k=g[h],l="g_"===k.substring(0,2);j=l?new Promise(function(a){e.commonObjs.get(k,a)}):new Promise(function(a){e.objs.get(k,a)}),this.current.dependencies.push(j)}return Promise.all(this.current.dependencies)},transform:function(a,b,c,d,f,h){var i=[a,b,c,d,f,h];this.transformMatrix=PDFJS.Util.transform(this.transformMatrix,i),this.tgrp=document.createElementNS(g,"svg:g"),this.tgrp.setAttributeNS(null,"transform",e(this.transformMatrix))},getSVG:function(b,c){return this.svg=a(c.width,c.height),this.viewport=c,this.loadDependencies(b).then(function(){this.transformMatrix=S,this.pgrp=document.createElementNS(g,"svg:g"),this.pgrp.setAttributeNS(null,"transform",e(c.transform)),this.tgrp=document.createElementNS(g,"svg:g"),this.tgrp.setAttributeNS(null,"transform",e(this.transformMatrix)),this.defs=document.createElementNS(g,"svg:defs"),this.pgrp.appendChild(this.defs),this.pgrp.appendChild(this.tgrp),this.svg.appendChild(this.pgrp);var a=this.convertOpList(b);return this.executeOpTree(a),this.svg}.bind(this))},convertOpList:function(a){var b=a.argsArray,d=a.fnArray,e=d.length,f=[],g=[];for(var h in G)f[G[h]]=h;for(var i=0;e>i;i++){var j=d[i];g.push({fnId:j,fn:f[j],args:b[i]})}return c(g)},executeOpTree:function(a){for(var c=a.length,d=0;c>d;d++){var e=a[d].fn,f=a[d].fnId,g=a[d].args;switch(0|f){case G.beginText:this.beginText();break;case G.setLeading:this.setLeading(g);break;case G.setLeadingMoveText:this.setLeadingMoveText(g[0],g[1]);break;case G.setFont:this.setFont(g);break;case G.showText:this.showText(g[0]);break;case G.showSpacedText:this.showText(g[0]);break;case G.endText:this.endText();break;case G.moveText:this.moveText(g[0],g[1]);break;case G.setCharSpacing:this.setCharSpacing(g[0]);break;case G.setWordSpacing:this.setWordSpacing(g[0]);break;case G.setHScale:this.setHScale(g[0]);break;case G.setTextMatrix:this.setTextMatrix(g[0],g[1],g[2],g[3],g[4],g[5]);break;case G.setLineWidth:this.setLineWidth(g[0]);break;case G.setLineJoin:this.setLineJoin(g[0]);break;case G.setLineCap:this.setLineCap(g[0]);break;case G.setMiterLimit:this.setMiterLimit(g[0]);break;case G.setFillRGBColor:this.setFillRGBColor(g[0],g[1],g[2]);break;case G.setStrokeRGBColor:this.setStrokeRGBColor(g[0],g[1],g[2]);break;case G.setDash:this.setDash(g[0],g[1]);break;case G.setGState:this.setGState(g[0]);break;case G.fill:this.fill();break;case G.eoFill:this.eoFill();break;case G.stroke:this.stroke();break;case G.fillStroke:this.fillStroke();break;case G.eoFillStroke:this.eoFillStroke();break;case G.clip:this.clip("nonzero");break;case G.eoClip:this.clip("evenodd");break;case G.paintSolidColorImageMask:this.paintSolidColorImageMask();break;case G.paintJpegXObject:this.paintJpegXObject(g[0],g[1],g[2]);break;case G.paintImageXObject:this.paintImageXObject(g[0]);break;case G.paintInlineImageXObject:this.paintInlineImageXObject(g[0]);break;case G.paintImageMaskXObject:this.paintImageMaskXObject(g[0]);break;case G.paintFormXObjectBegin:this.paintFormXObjectBegin(g[0],g[1]);break;case G.paintFormXObjectEnd:this.paintFormXObjectEnd();break;case G.closePath:this.closePath();break;case G.closeStroke:this.closeStroke();break;case G.closeFillStroke:this.closeFillStroke();break;case G.nextLine:this.nextLine();break;case G.transform:this.transform(g[0],g[1],g[2],g[3],g[4],g[5]);break;case G.constructPath:this.constructPath(g[0],g[1]);break;case G.endPath:this.endPath();break;case 92:this.group(a[d].items);break;default:b("Unimplemented method "+e)}}},setWordSpacing:function(a){this.current.wordSpacing=a},setCharSpacing:function(a){this.current.charSpacing=a},nextLine:function(){this.moveText(0,this.current.leading)},setTextMatrix:function(a,b,c,e,f,h){var i=this.current;this.current.textMatrix=this.current.lineMatrix=[a,b,c,e,f,h],this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0,i.xcoords=[],i.tspan=document.createElementNS(g,"svg:tspan"),i.tspan.setAttributeNS(null,"font-family",i.fontFamily),i.tspan.setAttributeNS(null,"font-size",d(i.fontSize)+"px"),i.tspan.setAttributeNS(null,"y",d(-i.y)),i.txtElement=document.createElementNS(g,"svg:text"),i.txtElement.appendChild(i.tspan)},beginText:function(){this.current.x=this.current.lineX=0,this.current.y=this.current.lineY=0,this.current.textMatrix=S,this.current.lineMatrix=S,this.current.tspan=document.createElementNS(g,"svg:tspan"),this.current.txtElement=document.createElementNS(g,"svg:text"),this.current.txtgrp=document.createElementNS(g,"svg:g"),this.current.xcoords=[]},moveText:function(a,b){var c=this.current;this.current.x=this.current.lineX+=a,this.current.y=this.current.lineY+=b,c.xcoords=[],c.tspan=document.createElementNS(g,"svg:tspan"),c.tspan.setAttributeNS(null,"font-family",c.fontFamily),c.tspan.setAttributeNS(null,"font-size",d(c.fontSize)+"px"),c.tspan.setAttributeNS(null,"y",d(-c.y))},showText:function(a){var b=this.current,c=b.font,f=b.fontSize;if(0!==f){var g,i=b.charSpacing,j=b.wordSpacing,k=b.fontDirection,l=b.textHScale*k,m=a.length,n=c.vertical,o=f*b.fontMatrix[0],q=0;for(g=0;m>g;++g){var r=a[g];if(null!==r)if(p(r))q+=-r*f*.001;else{b.xcoords.push(b.x+q*l);var s=r.width,t=r.fontChar,u=s*o+i*k;q+=u,b.tspan.textContent+=t}else q+=k*j}n?b.y-=q*l:b.x+=q*l,b.tspan.setAttributeNS(null,"x",b.xcoords.map(d).join(" ")),b.tspan.setAttributeNS(null,"y",d(-b.y)),b.tspan.setAttributeNS(null,"font-family",b.fontFamily),b.tspan.setAttributeNS(null,"font-size",d(b.fontSize)+"px"),b.fontStyle!==ta.fontStyle&&b.tspan.setAttributeNS(null,"font-style",b.fontStyle),b.fontWeight!==ta.fontWeight&&b.tspan.setAttributeNS(null,"font-weight",b.fontWeight),b.fillColor!==ta.fillColor&&b.tspan.setAttributeNS(null,"fill",b.fillColor),b.txtElement.setAttributeNS(null,"transform",e(b.textMatrix)+" scale(1, -1)"),b.txtElement.setAttributeNS(h,"xml:space","preserve"),b.txtElement.appendChild(b.tspan),b.txtgrp.appendChild(b.txtElement),this.tgrp.appendChild(b.txtElement)}},setLeadingMoveText:function(a,b){this.setLeading(-b),this.moveText(a,b)},addFontStyle:function(a){this.cssStyle||(this.cssStyle=document.createElementNS(g,"svg:style"),this.cssStyle.setAttributeNS(null,"type","text/css"),this.defs.appendChild(this.cssStyle));var b=PDFJS.createObjectURL(a.data,a.mimetype);this.cssStyle.textContent+='@font-face { font-family: "'+a.loadedName+'"; src: url('+b+"); }\n"},setFont:function(a){var b=this.current,c=this.commonObjs.get(a[0]),e=a[1];this.current.font=c,this.embedFonts&&c.data&&!this.embeddedFonts[c.loadedName]&&(this.addFontStyle(c),this.embeddedFonts[c.loadedName]=c),b.fontMatrix=c.fontMatrix?c.fontMatrix:B;var f=c.black?c.bold?"bolder":"bold":c.bold?"bold":"normal",h=c.italic?"italic":"normal";0>e?(e=-e,b.fontDirection=-1):b.fontDirection=1,b.fontSize=e,b.fontFamily=c.loadedName,b.fontWeight=f,b.fontStyle=h,b.tspan=document.createElementNS(g,"svg:tspan"),b.tspan.setAttributeNS(null,"y",d(-b.y)),b.xcoords=[]},endText:function(){this.current.pendingClip?(this.cgrp.appendChild(this.tgrp),this.pgrp.appendChild(this.cgrp)):this.pgrp.appendChild(this.tgrp),this.tgrp=document.createElementNS(g,"svg:g"),this.tgrp.setAttributeNS(null,"transform",e(this.transformMatrix))},setLineWidth:function(a){this.current.lineWidth=a},setLineCap:function(a){this.current.lineCap=j[a]},setLineJoin:function(a){this.current.lineJoin=k[a]},setMiterLimit:function(a){this.current.miterLimit=a},setStrokeRGBColor:function(a,b,c){var d=T.makeCssRgb(a,b,c);this.current.strokeColor=d},setFillRGBColor:function(a,b,c){var d=T.makeCssRgb(a,b,c);this.current.fillColor=d,this.current.tspan=document.createElementNS(g,"svg:tspan"),this.current.xcoords=[]},setDash:function(a,b){this.current.dashArray=a,this.current.dashPhase=b},constructPath:function(a,b){var c=this.current,e=c.x,f=c.y;c.path=document.createElementNS(g,"svg:path");for(var h=[],i=a.length,j=0,k=0;i>j;j++)switch(0|a[j]){case G.rectangle:e=b[k++],f=b[k++];var l=b[k++],m=b[k++],n=e+l,o=f+m;h.push("M",d(e),d(f),"L",d(n),d(f),"L",d(n),d(o),"L",d(e),d(o),"Z");break;case G.moveTo:e=b[k++],f=b[k++],h.push("M",d(e),d(f));break;case G.lineTo:e=b[k++],f=b[k++],h.push("L",d(e),d(f));break;case G.curveTo:e=b[k+4],f=b[k+5],h.push("C",d(b[k]),d(b[k+1]),d(b[k+2]),d(b[k+3]),d(e),d(f)),k+=6;break;case G.curveTo2:e=b[k+2],f=b[k+3],h.push("C",d(e),d(f),d(b[k]),d(b[k+1]),d(b[k+2]),d(b[k+3])),k+=4;break;case G.curveTo3:e=b[k+2],f=b[k+3],h.push("C",d(b[k]),d(b[k+1]),d(e),d(f),d(e),d(f)),k+=4;break;case G.closePath:h.push("Z")}c.path.setAttributeNS(null,"d",h.join(" ")),c.path.setAttributeNS(null,"stroke-miterlimit",d(c.miterLimit)),c.path.setAttributeNS(null,"stroke-linecap",c.lineCap),c.path.setAttributeNS(null,"stroke-linejoin",c.lineJoin),c.path.setAttributeNS(null,"stroke-width",d(c.lineWidth)+"px"),c.path.setAttributeNS(null,"stroke-dasharray",c.dashArray.map(d).join(" ")),c.path.setAttributeNS(null,"stroke-dashoffset",d(c.dashPhase)+"px"),c.path.setAttributeNS(null,"fill","none"),this.tgrp.appendChild(c.path),c.pendingClip?(this.cgrp.appendChild(this.tgrp),this.pgrp.appendChild(this.cgrp)):this.pgrp.appendChild(this.tgrp),c.element=c.path,c.setCurrentPoint(e,f)},endPath:function(){var a=this.current;a.pendingClip?(this.cgrp.appendChild(this.tgrp),this.pgrp.appendChild(this.cgrp)):this.pgrp.appendChild(this.tgrp),this.tgrp=document.createElementNS(g,"svg:g"),this.tgrp.setAttributeNS(null,"transform",e(this.transformMatrix))},clip:function(a){var b=this.current;b.clipId="clippath"+l,l++,this.clippath=document.createElementNS(g,"svg:clipPath"),this.clippath.setAttributeNS(null,"id",b.clipId);var c=b.element.cloneNode();"evenodd"===a?c.setAttributeNS(null,"clip-rule","evenodd"):c.setAttributeNS(null,"clip-rule","nonzero"),this.clippath.setAttributeNS(null,"transform",e(this.transformMatrix)),this.clippath.appendChild(c),this.defs.appendChild(this.clippath),b.pendingClip=!0,this.cgrp=document.createElementNS(g,"svg:g"),this.cgrp.setAttributeNS(null,"clip-path","url(#"+b.clipId+")"),this.pgrp.appendChild(this.cgrp)},closePath:function(){var a=this.current,b=a.path.getAttributeNS(null,"d");b+="Z",a.path.setAttributeNS(null,"d",b)},setLeading:function(a){this.current.leading=-a},setTextRise:function(a){this.current.textRise=a},setHScale:function(a){this.current.textHScale=a/100},setGState:function(a){for(var b=0,c=a.length;c>b;b++){var d=a[b],e=d[0],f=d[1];switch(e){case"LW":this.setLineWidth(f);break;case"LC":this.setLineCap(f);break;case"LJ":this.setLineJoin(f);break;case"ML":this.setMiterLimit(f);break;case"D":this.setDash(f[0],f[1]);break;case"RI":break;case"FL":break;case"Font":this.setFont(f);break;case"CA":break;case"ca":break;case"BM":break;case"SMask":}}},fill:function(){var a=this.current;a.element.setAttributeNS(null,"fill",a.fillColor)},stroke:function(){var a=this.current;a.element.setAttributeNS(null,"stroke",a.strokeColor),a.element.setAttributeNS(null,"fill","none")},eoFill:function(){var a=this.current;a.element.setAttributeNS(null,"fill",a.fillColor),a.element.setAttributeNS(null,"fill-rule","evenodd")},fillStroke:function(){this.stroke(),this.fill()},eoFillStroke:function(){this.current.element.setAttributeNS(null,"fill-rule","evenodd"),this.fillStroke()},closeStroke:function(){this.closePath(),this.stroke()},closeFillStroke:function(){this.closePath(),this.fillStroke()},paintSolidColorImageMask:function(){var a=this.current,b=document.createElementNS(g,"svg:rect");b.setAttributeNS(null,"x","0"),b.setAttributeNS(null,"y","0"),b.setAttributeNS(null,"width","1px"),b.setAttributeNS(null,"height","1px"),b.setAttributeNS(null,"fill",a.fillColor),this.tgrp.appendChild(b)},paintJpegXObject:function(a,b,c){var e=this.current,f=this.objs.get(a),h=document.createElementNS(g,"svg:image");h.setAttributeNS(i,"xlink:href",f.src),h.setAttributeNS(null,"width",f.width+"px"),h.setAttributeNS(null,"height",f.height+"px"),h.setAttributeNS(null,"x","0"),h.setAttributeNS(null,"y",d(-c)),h.setAttributeNS(null,"transform","scale("+d(1/b)+" "+d(-1/c)+")"),this.tgrp.appendChild(h),e.pendingClip?(this.cgrp.appendChild(this.tgrp),this.pgrp.appendChild(this.cgrp)):this.pgrp.appendChild(this.tgrp)},paintImageXObject:function(a){var c=this.objs.get(a);return c?void this.paintInlineImageXObject(c):void b("Dependent image isn't ready yet")},paintInlineImageXObject:function(a,b){var c=this.current,e=a.width,f=a.height,h=ua(a),j=document.createElementNS(g,"svg:rect");j.setAttributeNS(null,"x","0"),j.setAttributeNS(null,"y","0"),j.setAttributeNS(null,"width",d(e)),j.setAttributeNS(null,"height",d(f)),c.element=j,this.clip("nonzero");var k=document.createElementNS(g,"svg:image");k.setAttributeNS(i,"xlink:href",h),k.setAttributeNS(null,"x","0"),k.setAttributeNS(null,"y",d(-f)),k.setAttributeNS(null,"width",d(e)+"px"),k.setAttributeNS(null,"height",d(f)+"px"),k.setAttributeNS(null,"transform","scale("+d(1/e)+" "+d(-1/f)+")"),b?b.appendChild(k):this.tgrp.appendChild(k),c.pendingClip?(this.cgrp.appendChild(this.tgrp),this.pgrp.appendChild(this.cgrp)):this.pgrp.appendChild(this.tgrp)},paintImageMaskXObject:function(a){var b=this.current,c=a.width,e=a.height,f=b.fillColor;b.maskId="mask"+m++;var h=document.createElementNS(g,"svg:mask");h.setAttributeNS(null,"id",b.maskId);var i=document.createElementNS(g,"svg:rect");i.setAttributeNS(null,"x","0"),i.setAttributeNS(null,"y","0"),i.setAttributeNS(null,"width",d(c)),i.setAttributeNS(null,"height",d(e)),i.setAttributeNS(null,"fill",f),i.setAttributeNS(null,"mask","url(#"+b.maskId+")"),this.defs.appendChild(h),this.tgrp.appendChild(i),this.paintInlineImageXObject(a,h)},paintFormXObjectBegin:function(a,b){if(this.save(),q(a)&&6===a.length&&this.transform(a[0],a[1],a[2],a[3],a[4],a[5]),q(b)&&4===b.length){var c=b[2]-b[0],e=b[3]-b[1],f=document.createElementNS(g,"svg:rect");f.setAttributeNS(null,"x",b[0]),f.setAttributeNS(null,"y",b[1]),f.setAttributeNS(null,"width",d(c)),f.setAttributeNS(null,"height",d(e)),this.current.element=f,this.clip("nonzero"),this.endPath()}},paintFormXObjectEnd:function(){this.restore()}},f}();PDFJS.SVGGraphics=wa}.call("undefined"==typeof window?this:window),PDFJS.workerSrc||"undefined"==typeof document||(PDFJS.workerSrc=function(){"use strict";var a=document.body||document.getElementsByTagName("head")[0],b=a.lastChild.src;return b&&b.replace(/\.js$/i,".worker.js")}()),"undefined"==typeof PDFJS&&(("undefined"!=typeof window?window:this).PDFJS={}),PDFJS.version="1.1.551",PDFJS.build="2a5616c",function(){"use strict";function a(a){PDFJS.verbosity>=PDFJS.VERBOSITY_LEVELS.infos&&console.log("Info: "+a)}function b(a){PDFJS.verbosity>=PDFJS.VERBOSITY_LEVELS.warnings&&console.log("Warning: "+a)}function c(a){throw PDFJS.verbosity>=PDFJS.VERBOSITY_LEVELS.errors&&(console.log("Error: "+a),console.log(d())),aa.notify(_.unknown),new Error(a)}function d(){try{throw new Error}catch(a){return a.stack?a.stack.split("\n").slice(2).join("\n"):""}}function e(a,b){a||c(b)}function f(a,b){if(!a)return!1;var c=/^[a-z][a-z0-9+\-.]*(?=:)/i.exec(a);if(!c)return b;switch(c=c[0].toLowerCase()){case"http":case"https":case"ftp":case"mailto":case"tel":return!0;default:return!1}}function g(a,b,c){return Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!1}),c}function h(){switch(PDFJS.openExternalLinksInNewWindow&&(b("PDFJS.openExternalLinksInNewWindow is deprecated, use PDFJS.externalLinkTarget instead."),PDFJS.externalLinkTarget===ba.NONE&&(PDFJS.externalLinkTarget=ba.BLANK),PDFJS.openExternalLinksInNewWindow=!1),PDFJS.externalLinkTarget){case ba.NONE:return!1;case ba.SELF:case ba.BLANK:case ba.PARENT:case ba.TOP:return!0}return b("PDFJS.externalLinkTarget is invalid: "+PDFJS.externalLinkTarget),PDFJS.externalLinkTarget=ba.NONE,!1}function i(a){e(null!==a&&"object"==typeof a&&void 0!==a.length,"Invalid argument for bytesToString");var b=a.length,c=8192;if(c>b)return String.fromCharCode.apply(null,a);for(var d=[],f=0;b>f;f+=c){var g=Math.min(f+c,b),h=a.subarray(f,g);d.push(String.fromCharCode.apply(null,h))}return d.join("")}function j(a){e("string"==typeof a,"Invalid argument for stringToBytes");for(var b=a.length,c=new Uint8Array(b),d=0;b>d;++d)c[d]=255&a.charCodeAt(d);return c}function k(a){return String.fromCharCode(a>>24&255,a>>16&255,a>>8&255,255&a)}function l(a){for(var b=1,c=0;a>b;)b<<=1,c++;return c}function m(a,b){return a[b]<<24>>24}function n(a,b){return a[b]<<8|a[b+1]}function o(a,b){return(a[b]<<24|a[b+1]<<16|a[b+2]<<8|a[b+3])>>>0}function p(){var a=new Uint8Array(2);a[0]=1;var b=new Uint16Array(a.buffer);return 1===b[0]}function q(){var a=document.createElement("canvas");a.width=a.height=1;var b=a.getContext("2d"),c=b.createImageData(1,1);return"undefined"!=typeof c.data.buffer}function r(a){var b,c=a.length,d=[];if("þ"===a[0]&&"ÿ"===a[1])for(b=2;c>b;b+=2)d.push(String.fromCharCode(a.charCodeAt(b)<<8|a.charCodeAt(b+1)));else for(b=0;c>b;++b){var e=oa[a.charCodeAt(b)];d.push(e?String.fromCharCode(e):a.charAt(b))}return d.join("")}function s(a){return decodeURIComponent(escape(a))}function t(a){return unescape(encodeURIComponent(a))}function u(a){for(var b in a)return!1;return!0}function v(a){return"boolean"==typeof a}function w(a){return"number"==typeof a&&(0|a)===a}function x(a){return"number"==typeof a}function y(a){return"string"==typeof a}function z(a){return a instanceof ya}function A(a,b){return a instanceof za&&(void 0===b||a.cmd===b)}function B(a,b){if(!(a instanceof Aa))return!1;if(!b)return!0;var c=a.get("Type");return z(c)&&c.name===b}function C(a){return a instanceof Array}function D(a){return"object"==typeof a&&null!==a&&void 0!==a.getBytes}function E(a){return"object"==typeof a&&null!==a&&void 0!==a.byteLength}function F(a){return a instanceof Ba}function G(){var a={};return a.promise=new Promise(function(b,c){a.resolve=b,a.reject=c}),a}function H(a,b){this.name=a,this.comObj=b,this.callbackIndex=1,this.postMessageTransfers=!0;var d=this.callbacksCapabilities={},e=this.actionHandler={};e.console_log=[function(a){console.log.apply(console,a)}],e.console_error=[function(a){console.error.apply(console,a)}],e._unsupported_feature=[function(a){aa.notify(a)}],b.onmessage=function(a){var f=a.data;if(f.isReply){var g=f.callbackId;if(f.callbackId in d){var h=d[g];delete d[g],"error"in f?h.reject(f.error):h.resolve(f.data)}else c("Cannot resolve callback "+g)}else if(f.action in e){var i=e[f.action];f.callbackId?Promise.resolve().then(function(){return i[0].call(i[1],f.data)}).then(function(a){b.postMessage({isReply:!0,callbackId:f.callbackId,data:a})},function(a){a instanceof Error&&(a+=""),b.postMessage({isReply:!0,callbackId:f.callbackId,error:a})}):i[0].call(i[1],f.data)}else c("Unknown action from worker: "+f.action)}}function I(){}function J(a,b,c){var d=b.get("Matrix"),e=b.get("BBox"),f=b.get("XStep"),g=b.get("YStep"),h=b.get("PaintType"),i=b.get("TilingType");return["TilingPattern",c,a,d,e,f,g,h,i]}function K(a){return a>=65520&&65535>=a?0:a>=62976&&63743>=a?Wb[a]||a:a}function L(a){for(var b=0,c=Xb.length;c>b;b++){var d=Xb[b];if(a>=d.begin&&a<d.end)return b}return-1}function M(a){var b=Xb[13];return a>=b.begin&&a<b.end?!0:(b=Xb[11],a>=b.begin&&a<b.end?!0:!1)}function N(a){var b=a.length;if(1>=b||!M(a.charCodeAt(0)))return a;for(var c="",d=b-1;d>=0;d--)c+=a[d];return c}function O(a){if(a.fontMatrix[0]!==T[0]){var b=.001/a.fontMatrix[0],c=a.widths;for(var d in c)c[d]*=b;a.defaultWidth*=b}}function P(a,b){switch(a){case"Type1":return"Type1C"===b?Z.TYPE1C:Z.TYPE1;case"CIDFontType0":return"CIDFontType0C"===b?Z.CIDFONTTYPE0C:Z.CIDFONTTYPE0;case"OpenType":return Z.OPENTYPE;case"TrueType":return Z.TRUETYPE;case"CIDFontType2":return Z.CIDFONTTYPE2;case"MMType1":return Z.MMTYPE1;case"Type0":return Z.TYPE0;default:return Z.UNKNOWN}}function Q(a,b,c){var d,e,f,g=Object.create(null);if(a.baseEncodingName)for(f=Pb[a.baseEncodingName],e=0;e<f.length;e++)d=c.indexOf(f[e]),d>=0?g[e]=d:g[e]=0;else if(a.flags&Ob.Symbolic)for(e in b)g[e]=b[e];else for(f=Pb.StandardEncoding,e=0;e<f.length;e++)d=c.indexOf(f[e]),d>=0?g[e]=d:g[e]=0;var h=a.differences;if(h)for(e in h){var i=h[e];d=c.indexOf(i),d>=0?g[e]=d:g[e]=0}return g}function R(a){return a===Dc}var S="undefined"==typeof window?this:window,T=("undefined"==typeof window,[.001,0,0,.001,0,0]),U={FILL:0,STROKE:1,FILL_STROKE:2,INVISIBLE:3,FILL_ADD_TO_PATH:4,STROKE_ADD_TO_PATH:5,FILL_STROKE_ADD_TO_PATH:6,ADD_TO_PATH:7,FILL_STROKE_MASK:3,ADD_TO_PATH_FLAG:4},V={GRAYSCALE_1BPP:1,RGB_24BPP:2,RGBA_32BPP:3},W={WIDGET:1,TEXT:2,LINK:3},X={SOLID:1,DASHED:2,BEVELED:3,INSET:4,UNDERLINE:5},Y={UNKNOWN:0,FLATE:1,LZW:2,DCT:3,JPX:4,JBIG:5,A85:6,AHX:7,CCF:8,RL:9},Z={UNKNOWN:0,TYPE1:1,TYPE1C:2,CIDFONTTYPE0:3,CIDFONTTYPE0C:4,TRUETYPE:5,CIDFONTTYPE2:6,TYPE3:7,OPENTYPE:8,TYPE0:9,MMTYPE1:10};S.PDFJS||(S.PDFJS={}),S.PDFJS.pdfBug=!1,PDFJS.VERBOSITY_LEVELS={errors:0,warnings:1,infos:5};var $=PDFJS.OPS={dependency:1,setLineWidth:2,setLineCap:3,setLineJoin:4,setMiterLimit:5,setDash:6,setRenderingIntent:7,setFlatness:8,setGState:9,save:10,restore:11,transform:12,moveTo:13,lineTo:14,curveTo:15,curveTo2:16,curveTo3:17,closePath:18,rectangle:19,stroke:20,closeStroke:21,fill:22,eoFill:23,fillStroke:24,eoFillStroke:25,closeFillStroke:26,closeEOFillStroke:27,endPath:28,clip:29,eoClip:30,beginText:31,endText:32,setCharSpacing:33,setWordSpacing:34,setHScale:35,setLeading:36,setFont:37,setTextRenderingMode:38,setTextRise:39,moveText:40,setLeadingMoveText:41,setTextMatrix:42,nextLine:43,showText:44,showSpacedText:45,nextLineShowText:46,nextLineSetSpacingShowText:47,setCharWidth:48,setCharWidthAndBounds:49,setStrokeColorSpace:50,setFillColorSpace:51,setStrokeColor:52,setStrokeColorN:53,setFillColor:54,setFillColorN:55,setStrokeGray:56,setFillGray:57,setStrokeRGBColor:58,setFillRGBColor:59,setStrokeCMYKColor:60,setFillCMYKColor:61,shadingFill:62,beginInlineImage:63,beginImageData:64,endInlineImage:65,paintXObject:66,markPoint:67,markPointProps:68,beginMarkedContent:69,beginMarkedContentProps:70,endMarkedContent:71,beginCompat:72,endCompat:73,paintFormXObjectBegin:74,paintFormXObjectEnd:75,beginGroup:76,endGroup:77,beginAnnotations:78,endAnnotations:79,beginAnnotation:80,endAnnotation:81,paintJpegXObject:82,paintImageMaskXObject:83,paintImageMaskXObjectGroup:84,paintImageXObject:85,paintInlineImageXObject:86,paintInlineImageXObjectGroup:87,paintImageXObjectRepeat:88,paintImageMaskXObjectRepeat:89,paintSolidColorImageMask:90,constructPath:91},_=PDFJS.UNSUPPORTED_FEATURES={unknown:"unknown",forms:"forms",javaScript:"javaScript",smask:"smask",shadingPattern:"shadingPattern",font:"font"},aa=PDFJS.UnsupportedManager=function(){var a=[];return{listen:function(b){a.push(b)},notify:function(c){b('Unsupported feature "'+c+'"');for(var d=0,e=a.length;e>d;d++)a[d](c)}}}();PDFJS.isValidUrl=f,PDFJS.shadow=g;var ba=PDFJS.LinkTarget={NONE:0,SELF:1,BLANK:2,PARENT:3,TOP:4};PDFJS.isExternalLinkTargetSet=h;var ca=PDFJS.PasswordResponses={NEED_PASSWORD:1,INCORRECT_PASSWORD:2},da=function(){function a(a,b){this.name="PasswordException",this.message=a,this.code=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.PasswordException=da;var ea=function(){function a(a,b){this.name="UnknownErrorException",this.message=a,this.details=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.UnknownErrorException=ea;var fa=function(){function a(a){this.name="InvalidPDFException",this.message=a}return a.prototype=new Error,a.constructor=a,a}();PDFJS.InvalidPDFException=fa;var ga=function(){function a(a){this.name="MissingPDFException",this.message=a}return a.prototype=new Error,a.constructor=a,a}();PDFJS.MissingPDFException=ga;var ha=function(){function a(a,b){this.name="UnexpectedResponseException",this.message=a,this.status=b}return a.prototype=new Error,a.constructor=a,a}();PDFJS.UnexpectedResponseException=ha;var ia=function(){function a(a){this.message=a}return a.prototype=new Error,a.prototype.name="NotImplementedException",a.constructor=a,a}(),ja=function(){function a(a,b){this.begin=a,this.end=b,this.message="Missing data ["+a+", "+b+")"}return a.prototype=new Error,a.prototype.name="MissingDataException",a.constructor=a,a}(),ka=function(){function a(a){this.message=a}return a.prototype=new Error,a.prototype.name="XRefParseException",a.constructor=a,a}();Object.defineProperty(PDFJS,"isLittleEndian",{configurable:!0,get:function(){return g(PDFJS,"isLittleEndian",p())}}),Object.defineProperty(PDFJS,"hasCanvasTypedArrays",{configurable:!0,get:function(){return g(PDFJS,"hasCanvasTypedArrays",q())}});var la=function(){function a(a,b){this.buffer=a,this.byteLength=a.length,this.length=void 0===b?this.byteLength>>2:b,c(this.length)}function b(a){return{get:function(){var b=this.buffer,c=a<<2;return(b[c]|b[c+1]<<8|b[c+2]<<16|b[c+3]<<24)>>>0},set:function(b){var c=this.buffer,d=a<<2;c[d]=255&b,c[d+1]=b>>8&255,c[d+2]=b>>16&255,c[d+3]=b>>>24&255}}}function c(c){for(;c>d;)Object.defineProperty(a.prototype,d,b(d)),d++}a.prototype=Object.create(null);var d=0;return a}(),ma=[1,0,0,1,0,0],na=PDFJS.Util=function(){function a(){}var b=["rgb(",0,",",0,",",0,")"];return a.makeCssRgb=function(a,c,d){return b[1]=a,b[3]=c,b[5]=d,b.join("")},a.transform=function(a,b){return[a[0]*b[0]+a[2]*b[1],a[1]*b[0]+a[3]*b[1],a[0]*b[2]+a[2]*b[3],a[1]*b[2]+a[3]*b[3],a[0]*b[4]+a[2]*b[5]+a[4],a[1]*b[4]+a[3]*b[5]+a[5]]},a.applyTransform=function(a,b){var c=a[0]*b[0]+a[1]*b[2]+b[4],d=a[0]*b[1]+a[1]*b[3]+b[5];return[c,d]},a.applyInverseTransform=function(a,b){var c=b[0]*b[3]-b[1]*b[2],d=(a[0]*b[3]-a[1]*b[2]+b[2]*b[5]-b[4]*b[3])/c,e=(-a[0]*b[1]+a[1]*b[0]+b[4]*b[1]-b[5]*b[0])/c;return[d,e]},a.getAxialAlignedBoundingBox=function(b,c){var d=a.applyTransform(b,c),e=a.applyTransform(b.slice(2,4),c),f=a.applyTransform([b[0],b[3]],c),g=a.applyTransform([b[2],b[1]],c);return[Math.min(d[0],e[0],f[0],g[0]),Math.min(d[1],e[1],f[1],g[1]),Math.max(d[0],e[0],f[0],g[0]),Math.max(d[1],e[1],f[1],g[1])]},a.inverseTransform=function(a){var b=a[0]*a[3]-a[1]*a[2];return[a[3]/b,-a[1]/b,-a[2]/b,a[0]/b,(a[2]*a[5]-a[4]*a[3])/b,(a[4]*a[1]-a[5]*a[0])/b]},a.apply3dTransform=function(a,b){return[a[0]*b[0]+a[1]*b[1]+a[2]*b[2],a[3]*b[0]+a[4]*b[1]+a[5]*b[2],a[6]*b[0]+a[7]*b[1]+a[8]*b[2]]},a.singularValueDecompose2dScale=function(a){var b=[a[0],a[2],a[1],a[3]],c=a[0]*b[0]+a[1]*b[2],d=a[0]*b[1]+a[1]*b[3],e=a[2]*b[0]+a[3]*b[2],f=a[2]*b[1]+a[3]*b[3],g=(c+f)/2,h=Math.sqrt((c+f)*(c+f)-4*(c*f-e*d))/2,i=g+h||1,j=g-h||1;return[Math.sqrt(i),Math.sqrt(j)]},a.normalizeRect=function(a){var b=a.slice(0);return a[0]>a[2]&&(b[0]=a[2],b[2]=a[0]),a[1]>a[3]&&(b[1]=a[3],b[3]=a[1]),b},a.intersect=function(b,c){function d(a,b){return a-b}var e=[b[0],b[2],c[0],c[2]].sort(d),f=[b[1],b[3],c[1],c[3]].sort(d),g=[];return b=a.normalizeRect(b),c=a.normalizeRect(c),e[0]===b[0]&&e[1]===c[0]||e[0]===c[0]&&e[1]===b[0]?(g[0]=e[1],g[2]=e[2],f[0]===b[1]&&f[1]===c[1]||f[0]===c[1]&&f[1]===b[1]?(g[1]=f[1],g[3]=f[2],g):!1):!1},a.sign=function(a){return 0>a?-1:1},a.appendToArray=function(a,b){Array.prototype.push.apply(a,b)},a.prependToArray=function(a,b){Array.prototype.unshift.apply(a,b)},a.extendObj=function(a,b){for(var c in b)a[c]=b[c]},a.getInheritableProperty=function(a,b){for(;a&&!a.has(b);)a=a.get("Parent");return a?a.get(b):null},a.inherit=function(a,b,c){a.prototype=Object.create(b.prototype),a.prototype.constructor=a;for(var d in c)a.prototype[d]=c[d]},a.loadScript=function(a,b){var c=document.createElement("script"),d=!1;c.setAttribute("src",a),b&&(c.onload=function(){d||b(),d=!0}),document.getElementsByTagName("head")[0].appendChild(c)},a}(),oa=(PDFJS.PageViewport=function(){function a(a,b,c,d,e,f){this.viewBox=a,this.scale=b,this.rotation=c,this.offsetX=d,this.offsetY=e;var g,h,i,j,k=(a[2]+a[0])/2,l=(a[3]+a[1])/2;switch(c%=360,c=0>c?c+360:c){case 180:g=-1,h=0,i=0,j=1;break;case 90:g=0,h=1,i=1,j=0;break;case 270:g=0,h=-1,i=-1,j=0;break;default:g=1,h=0,i=0,j=-1}f&&(i=-i,j=-j);var m,n,o,p;0===g?(m=Math.abs(l-a[1])*b+d,n=Math.abs(k-a[0])*b+e,o=Math.abs(a[3]-a[1])*b,p=Math.abs(a[2]-a[0])*b):(m=Math.abs(k-a[0])*b+d,n=Math.abs(l-a[1])*b+e,o=Math.abs(a[2]-a[0])*b,p=Math.abs(a[3]-a[1])*b),this.transform=[g*b,h*b,i*b,j*b,m-g*b*k-i*b*l,n-h*b*k-j*b*l],this.width=o,this.height=p,this.fontScale=b}return a.prototype={clone:function(b){b=b||{};var c="scale"in b?b.scale:this.scale,d="rotation"in b?b.rotation:this.rotation;return new a(this.viewBox.slice(),c,d,this.offsetX,this.offsetY,b.dontFlip)},convertToViewportPoint:function(a,b){return na.applyTransform([a,b],this.transform)},convertToViewportRectangle:function(a){var b=na.applyTransform([a[0],a[1]],this.transform),c=na.applyTransform([a[2],a[3]],this.transform);return[b[0],b[1],c[0],c[1]]},convertToPdfPoint:function(a,b){return na.applyInverseTransform([a,b],this.transform)}},a}(),[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,728,711,710,729,733,731,730,732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8226,8224,8225,8230,8212,8211,402,8260,8249,8250,8722,8240,8222,8220,8221,8216,8217,8218,8482,64257,64258,321,338,352,376,381,305,322,339,353,382,0,8364]);PDFJS.createPromiseCapability=G,function(){function a(a){this._status=c,
+this._handlers=[];try{a.call(this,this._resolve.bind(this),this._reject.bind(this))}catch(b){this._reject(b)}}if(S.Promise)return"function"!=typeof S.Promise.all&&(S.Promise.all=function(a){var b,c,d=0,e=[],f=new S.Promise(function(a,d){b=a,c=d});return a.forEach(function(a,f){d++,a.then(function(a){e[f]=a,d--,0===d&&b(e)},c)}),0===d&&b(e),f}),"function"!=typeof S.Promise.resolve&&(S.Promise.resolve=function(a){return new S.Promise(function(b){b(a)})}),"function"!=typeof S.Promise.reject&&(S.Promise.reject=function(a){return new S.Promise(function(b,c){c(a)})}),void("function"!=typeof S.Promise.prototype["catch"]&&(S.Promise.prototype["catch"]=function(a){return S.Promise.prototype.then(void 0,a)}));var c=0,d=1,e=2,f=500,g={handlers:[],running:!1,unhandledRejections:[],pendingRejectionCheck:!1,scheduleHandlers:function(a){a._status!==c&&(this.handlers=this.handlers.concat(a._handlers),a._handlers=[],this.running||(this.running=!0,setTimeout(this.runHandlers.bind(this),0)))},runHandlers:function(){for(var a=1,b=Date.now()+a;this.handlers.length>0;){var c=this.handlers.shift(),f=c.thisPromise._status,g=c.thisPromise._value;try{f===d?"function"==typeof c.onResolve&&(g=c.onResolve(g)):"function"==typeof c.onReject&&(g=c.onReject(g),f=d,c.thisPromise._unhandledRejection&&this.removeUnhandeledRejection(c.thisPromise))}catch(h){f=e,g=h}if(c.nextPromise._updateStatus(f,g),Date.now()>=b)break}return this.handlers.length>0?void setTimeout(this.runHandlers.bind(this),0):void(this.running=!1)},addUnhandledRejection:function(a){this.unhandledRejections.push({promise:a,time:Date.now()}),this.scheduleRejectionCheck()},removeUnhandeledRejection:function(a){a._unhandledRejection=!1;for(var b=0;b<this.unhandledRejections.length;b++)this.unhandledRejections[b].promise===a&&(this.unhandledRejections.splice(b),b--)},scheduleRejectionCheck:function(){this.pendingRejectionCheck||(this.pendingRejectionCheck=!0,setTimeout(function(){this.pendingRejectionCheck=!1;for(var a=Date.now(),c=0;c<this.unhandledRejections.length;c++)if(a-this.unhandledRejections[c].time>f){var d=this.unhandledRejections[c].promise._value,e="Unhandled rejection: "+d;d.stack&&(e+="\n"+d.stack),b(e),this.unhandledRejections.splice(c),c--}this.unhandledRejections.length&&this.scheduleRejectionCheck()}.bind(this),f))}};a.all=function(b){function c(a){g._status!==e&&(i=[],f(a))}var d,f,g=new a(function(a,b){d=a,f=b}),h=b.length,i=[];if(0===h)return d(i),g;for(var j=0,k=b.length;k>j;++j){var l=b[j],m=function(a){return function(b){g._status!==e&&(i[a]=b,h--,0===h&&d(i))}}(j);a.isPromise(l)?l.then(m,c):m(l)}return g},a.isPromise=function(a){return a&&"function"==typeof a.then},a.resolve=function(b){return new a(function(a){a(b)})},a.reject=function(b){return new a(function(a,c){c(b)})},a.prototype={_status:null,_value:null,_handlers:null,_unhandledRejection:null,_updateStatus:function(b,c){if(this._status!==d&&this._status!==e){if(b===d&&a.isPromise(c))return void c.then(this._updateStatus.bind(this,d),this._updateStatus.bind(this,e));this._status=b,this._value=c,b===e&&0===this._handlers.length&&(this._unhandledRejection=!0,g.addUnhandledRejection(this)),g.scheduleHandlers(this)}},_resolve:function(a){this._updateStatus(d,a)},_reject:function(a){this._updateStatus(e,a)},then:function(b,c){var d=new a(function(a,b){this.resolve=a,this.reject=b});return this._handlers.push({thisPromise:this,onResolve:b,onReject:c,nextPromise:d}),g.scheduleHandlers(this),d},"catch":function(a){return this.then(void 0,a)}},S.Promise=a}();(function(){function a(a,b,c){for(;a.length<c;)a+=b;return a}function c(){this.started={},this.times=[],this.enabled=!0}return c.prototype={time:function(a){this.enabled&&(a in this.started&&b("Timer is already running for "+a),this.started[a]=Date.now())},timeEnd:function(a){this.enabled&&(a in this.started||b("Timer has not been started for "+a),this.times.push({name:a,start:this.started[a],end:Date.now()}),delete this.started[a])},toString:function(){var b,c,d=this.times,e="",f=0;for(b=0,c=d.length;c>b;++b){var g=d[b].name;g.length>f&&(f=g.length)}for(b=0,c=d.length;c>b;++b){var h=d[b],i=h.end-h.start;e+=a(h.name," ",f)+" "+i+"ms\n"}return e}},c})();PDFJS.createBlob=function(a,b){if("undefined"!=typeof Blob)return new Blob([a],{type:b});var c=new MozBlobBuilder;return c.append(a),c.getBlob(b)},PDFJS.createObjectURL=function(){var a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return function(b,c){if(!PDFJS.disableCreateObjectURL&&"undefined"!=typeof URL&&URL.createObjectURL){var d=PDFJS.createBlob(b,c);return URL.createObjectURL(d)}for(var e="data:"+c+";base64,",f=0,g=b.length;g>f;f+=3){var h=255&b[f],i=255&b[f+1],j=255&b[f+2],k=h>>2,l=(3&h)<<4|i>>4,m=g>f+1?(15&i)<<2|j>>6:64,n=g>f+2?63&j:64;e+=a[k]+a[l]+a[m]+a[n]}return e}}(),H.prototype={on:function(a,b,d){var e=this.actionHandler;e[a]&&c('There is already an actionName called "'+a+'"'),e[a]=[b,d]},send:function(a,b,c){var d={action:a,data:b};this.postMessage(d,c)},sendWithPromise:function(a,b,c){var d=this.callbackIndex++,e={action:a,data:b,callbackId:d},f=G();this.callbacksCapabilities[d]=f;try{this.postMessage(e,c)}catch(g){f.reject(g)}return f.promise},postMessage:function(a,b){b&&this.postMessageTransfers?this.comObj.postMessage(a,b):this.comObj.postMessage(a)}};var pa=function(){function a(a,b){this.url=a,b=b||{},this.isHttp=/^https?:/i.test(a),this.httpHeaders=this.isHttp&&b.httpHeaders||{},this.withCredentials=b.withCredentials||!1,this.getXhr=b.getXhr||function(){return new XMLHttpRequest},this.currXhrId=0,this.pendingRequests={},this.loadedRequests={}}function b(a){var b=a.response;if("string"!=typeof b)return b;for(var c=b.length,d=new Uint8Array(c),e=0;c>e;e++)d[e]=255&b.charCodeAt(e);return d.buffer}var c=200,d=206,e=function(){try{var a=new XMLHttpRequest;return a.open("GET","https://example.com"),a.responseType="moz-chunked-arraybuffer","moz-chunked-arraybuffer"===a.responseType}catch(b){return!1}}();return a.prototype={requestRange:function(a,b,c){var d={begin:a,end:b};for(var e in c)d[e]=c[e];return this.request(d)},requestFull:function(a){return this.request(a)},request:function(a){var b=this.getXhr(),c=this.currXhrId++,d=this.pendingRequests[c]={xhr:b};b.open("GET",this.url),b.withCredentials=this.withCredentials;for(var f in this.httpHeaders){var g=this.httpHeaders[f];"undefined"!=typeof g&&b.setRequestHeader(f,g)}if(this.isHttp&&"begin"in a&&"end"in a){var h=a.begin+"-"+(a.end-1);b.setRequestHeader("Range","bytes="+h),d.expectedStatus=206}else d.expectedStatus=200;var i=e&&!!a.onProgressiveData;return i?(b.responseType="moz-chunked-arraybuffer",d.onProgressiveData=a.onProgressiveData,d.mozChunked=!0):b.responseType="arraybuffer",a.onError&&(b.onerror=function(c){a.onError(b.status)}),b.onreadystatechange=this.onStateChange.bind(this,c),b.onprogress=this.onProgress.bind(this,c),d.onHeadersReceived=a.onHeadersReceived,d.onDone=a.onDone,d.onError=a.onError,d.onProgress=a.onProgress,b.send(null),c},onProgress:function(a,c){var d=this.pendingRequests[a];if(d){if(d.mozChunked){var e=b(d.xhr);d.onProgressiveData(e)}var f=d.onProgress;f&&f(c)}},onStateChange:function(a,e){var f=this.pendingRequests[a];if(f){var g=f.xhr;if(g.readyState>=2&&f.onHeadersReceived&&(f.onHeadersReceived(),delete f.onHeadersReceived),4===g.readyState&&a in this.pendingRequests){if(delete this.pendingRequests[a],0===g.status&&this.isHttp)return void(f.onError&&f.onError(g.status));var h=g.status||c,i=h===c&&f.expectedStatus===d;if(!i&&h!==f.expectedStatus)return void(f.onError&&f.onError(g.status));this.loadedRequests[a]=!0;var j=b(g);if(h===d){var k=g.getResponseHeader("Content-Range"),l=/bytes (\d+)-(\d+)\/(\d+)/.exec(k),m=parseInt(l[1],10);f.onDone({begin:m,chunk:j})}else f.onProgressiveData?f.onDone(null):f.onDone({begin:0,chunk:j})}}},hasPendingRequests:function(){for(var a in this.pendingRequests)return!0;return!1},getRequestXhr:function(a){return this.pendingRequests[a].xhr},isStreamingRequest:function(a){return!!this.pendingRequests[a].onProgressiveData},isPendingRequest:function(a){return a in this.pendingRequests},isLoadedRequest:function(a){return a in this.loadedRequests},abortAllRequests:function(){for(var a in this.pendingRequests)this.abortRequest(0|a)},abortRequest:function(a){var b=this.pendingRequests[a].xhr;delete this.pendingRequests[a],b.abort()}},a}(),qa=function(){function a(a,b,c){this.bytes=new Uint8Array(a),this.start=0,this.pos=0,this.end=a,this.chunkSize=b,this.loadedChunks=[],this.numChunksLoaded=0,this.numChunks=Math.ceil(a/b),this.manager=c,this.progressiveDataLength=0,this.lastSuccessfulEnsureByteChunk=-1}return a.prototype={getMissingChunks:function(){for(var a=[],b=0,c=this.numChunks;c>b;++b)this.loadedChunks[b]||a.push(b);return a},getBaseStreams:function(){return[this]},allChunksLoaded:function(){return this.numChunksLoaded===this.numChunks},onReceiveData:function(a,b){var c=a+b.byteLength;e(a%this.chunkSize===0,"Bad begin offset: "+a);var d=this.bytes.length;e(c%this.chunkSize===0||c===d,"Bad end offset: "+c),this.bytes.set(new Uint8Array(b),a);var f,g=this.chunkSize,h=Math.floor(a/g),i=Math.floor((c-1)/g)+1;for(f=h;i>f;++f)this.loadedChunks[f]||(this.loadedChunks[f]=!0,++this.numChunksLoaded)},onReceiveProgressiveData:function(a){var b=this.progressiveDataLength,c=Math.floor(b/this.chunkSize);this.bytes.set(new Uint8Array(a),b),b+=a.byteLength,this.progressiveDataLength=b;var d,e=b>=this.end?this.numChunks:Math.floor(b/this.chunkSize);for(d=c;e>d;++d)this.loadedChunks[d]||(this.loadedChunks[d]=!0,++this.numChunksLoaded)},ensureByte:function(a){var b=Math.floor(a/this.chunkSize);if(b!==this.lastSuccessfulEnsureByteChunk){if(!this.loadedChunks[b])throw new ja(a,a+1);this.lastSuccessfulEnsureByteChunk=b}},ensureRange:function(a,b){if(!(a>=b||b<=this.progressiveDataLength))for(var c=this.chunkSize,d=Math.floor(a/c),e=Math.floor((b-1)/c)+1,f=d;e>f;++f)if(!this.loadedChunks[f])throw new ja(a,b)},nextEmptyChunk:function(a){for(var b,c=this.numChunks,d=0;c>d;++d)if(b=(a+d)%c,!this.loadedChunks[b])return b;return null},hasChunk:function(a){return!!this.loadedChunks[a]},get length(){return this.end-this.start},get isEmpty(){return 0===this.length},getByte:function(){var a=this.pos;return a>=this.end?-1:(this.ensureByte(a),this.bytes[this.pos++])},getUint16:function(){var a=this.getByte(),b=this.getByte();return-1===a||-1===b?-1:(a<<8)+b},getInt32:function(){var a=this.getByte(),b=this.getByte(),c=this.getByte(),d=this.getByte();return(a<<24)+(b<<16)+(c<<8)+d},getBytes:function(a){var b=this.bytes,c=this.pos,d=this.end;if(!a)return this.ensureRange(c,d),b.subarray(c,d);var e=c+a;return e>d&&(e=d),this.ensureRange(c,e),this.pos=e,b.subarray(c,e)},peekByte:function(){var a=this.getByte();return this.pos--,a},peekBytes:function(a){var b=this.getBytes(a);return this.pos-=b.length,b},getByteRange:function(a,b){return this.ensureRange(a,b),this.bytes.subarray(a,b)},skip:function(a){a||(a=1),this.pos+=a},reset:function(){this.pos=this.start},moveStart:function(){this.start=this.pos},makeSubStream:function(a,b,c){function d(){}this.ensureRange(a,a+b),d.prototype=Object.create(this),d.prototype.getMissingChunks=function(){for(var a=this.chunkSize,b=Math.floor(this.start/a),c=Math.floor((this.end-1)/a)+1,d=[],e=b;c>e;++e)this.loadedChunks[e]||d.push(e);return d};var e=new d;return e.pos=e.start=a,e.end=a+b||this.end,e.dict=c,e},isStream:!0},a}(),ra=function(){function a(a,b,c,d){this.stream=new qa(a,b,this),this.length=a,this.chunkSize=b,this.url=c,this.disableAutoFetch=d.disableAutoFetch;var e=this.msgHandler=d.msgHandler;if(d.chunkedViewerLoading)e.on("OnDataRange",this.onReceiveData.bind(this)),e.on("OnDataProgress",this.onProgress.bind(this)),this.sendRequest=function(a,b){e.send("RequestDataRange",{begin:a,end:b})};else{var f=function(){return new XMLHttpRequest};this.networkManager=new pa(this.url,{getXhr:f,httpHeaders:d.httpHeaders,withCredentials:d.withCredentials}),this.sendRequest=function(a,b){this.networkManager.requestRange(a,b,{onDone:this.onReceiveData.bind(this),onProgress:this.onProgress.bind(this)})}}this.currRequestId=0,this.chunksNeededByRequest={},this.requestsByChunk={},this.promisesByRequest={},this.progressiveDataLength=0,this._loadedStreamCapability=G(),d.initialData&&this.onReceiveData({chunk:d.initialData})}return a.prototype={onLoadedStream:function(){return this._loadedStreamCapability.promise},requestAllChunks:function(){var a=this.stream.getMissingChunks();return this._requestChunks(a),this._loadedStreamCapability.promise},_requestChunks:function(a){var b,c,d,e=this.currRequestId++;for(this.chunksNeededByRequest[e]=b={},c=0,d=a.length;d>c;c++)this.stream.hasChunk(a[c])||(b[a[c]]=!0);if(u(b))return Promise.resolve();var f=G();this.promisesByRequest[e]=f;var g=[];for(var h in b)h=0|h,h in this.requestsByChunk||(this.requestsByChunk[h]=[],g.push(h)),this.requestsByChunk[h].push(e);if(!g.length)return f.promise;var i=this.groupChunks(g);for(c=0;c<i.length;++c){var j=i[c],k=j.beginChunk*this.chunkSize,l=Math.min(j.endChunk*this.chunkSize,this.length);this.sendRequest(k,l)}return f.promise},getStream:function(){return this.stream},requestRange:function(a,b){b=Math.min(b,this.length);for(var c=this.getBeginChunk(a),d=this.getEndChunk(b),e=[],f=c;d>f;++f)e.push(f);return this._requestChunks(e)},requestRanges:function(a){a=a||[];for(var b=[],c=0;c<a.length;c++)for(var d=this.getBeginChunk(a[c].begin),e=this.getEndChunk(a[c].end),f=d;e>f;++f)b.indexOf(f)<0&&b.push(f);return b.sort(function(a,b){return a-b}),this._requestChunks(b)},groupChunks:function(a){for(var b=[],c=-1,d=-1,e=0;e<a.length;++e){var f=a[e];0>c&&(c=f),d>=0&&d+1!==f&&(b.push({beginChunk:c,endChunk:d+1}),c=f),e+1===a.length&&b.push({beginChunk:c,endChunk:f+1}),d=f}return b},onProgress:function(a){var b=this.stream.numChunksLoaded*this.chunkSize+a.loaded;this.msgHandler.send("DocProgress",{loaded:b,total:this.length})},onReceiveData:function(a){var b=a.chunk,c=void 0===a.begin,d=c?this.progressiveDataLength:a.begin,e=d+b.byteLength,f=Math.floor(d/this.chunkSize),g=e<this.length?Math.floor(e/this.chunkSize):Math.ceil(e/this.chunkSize);c?(this.stream.onReceiveProgressiveData(b),this.progressiveDataLength=e):this.stream.onReceiveData(d,b),this.stream.allChunksLoaded()&&this._loadedStreamCapability.resolve(this.stream);var h,i,j=[];for(b=f;g>b;++b){var k=this.requestsByChunk[b]||[];for(delete this.requestsByChunk[b],h=0;h<k.length;++h){i=k[h];var l=this.chunksNeededByRequest[i];b in l&&delete l[b],u(l)&&j.push(i)}}if(!this.disableAutoFetch&&u(this.requestsByChunk)){var m;if(1===this.stream.numChunksLoaded){var n=this.stream.numChunks-1;this.stream.hasChunk(n)||(m=n)}else m=this.stream.nextEmptyChunk(g);w(m)&&this._requestChunks([m])}for(h=0;h<j.length;++h){i=j[h];var o=this.promisesByRequest[i];delete this.promisesByRequest[i],o.resolve()}this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize,total:this.length})},onError:function(a){this._loadedStreamCapability.reject(a)},getBeginChunk:function(a){var b=Math.floor(a/this.chunkSize);return b},getEndChunk:function(a){var b=Math.floor((a-1)/this.chunkSize)+1;return b},abort:function(){this.networkManager&&this.networkManager.abortAllRequests();for(var a in this.promisesByRequest){var b=this.promisesByRequest[a];b.reject(new Error("Request was aborted"))}}},a}(),sa=65536,ta=function(){function a(){throw new Error("Cannot initialize BaseManagerManager")}return a.prototype={onLoadedStream:function(){throw new ia},ensureDoc:function(a,b){return this.ensure(this.pdfDocument,a,b)},ensureXRef:function(a,b){return this.ensure(this.pdfDocument.xref,a,b)},ensureCatalog:function(a,b){return this.ensure(this.pdfDocument.catalog,a,b)},getPage:function(a){return this.pdfDocument.getPage(a)},cleanup:function(){return this.pdfDocument.cleanup()},ensure:function(a,b,c){return new ia},requestRange:function(a,b){return new ia},requestLoadedStream:function(){return new ia},sendProgressiveData:function(a){return new ia},updatePassword:function(a){this.pdfDocument.xref.password=this.password=a,this._passwordChangedCapability&&this._passwordChangedCapability.resolve()},passwordChanged:function(){return this._passwordChangedCapability=G(),this._passwordChangedCapability.promise},terminate:function(){return new ia}},a}(),ua=function(){function a(a,b){var c=new Mc(a);this.pdfDocument=new xa(this,c,b),this._loadedStreamCapability=G(),this._loadedStreamCapability.resolve(c)}return a.prototype=Object.create(ta.prototype),a.prototype.constructor=a,a.prototype.ensure=function(a,b,c){return new Promise(function(d,e){try{var f,g=a[b];f="function"==typeof g?g.apply(a,c):g,d(f)}catch(h){e(h)}})},a.prototype.requestRange=function(a,b){return Promise.resolve()},a.prototype.requestLoadedStream=function(){},a.prototype.onLoadedStream=function(){return this._loadedStreamCapability.promise},a.prototype.terminate=function(){},a}(),va=function(){function a(a,b){this.msgHandler=b;var c={msgHandler:b,httpHeaders:a.httpHeaders,withCredentials:a.withCredentials,chunkedViewerLoading:a.chunkedViewerLoading,disableAutoFetch:a.disableAutoFetch,initialData:a.initialData};this.streamManager=new ra(a.length,sa,a.url,c),this.pdfDocument=new xa(this,this.streamManager.getStream(),a.password)}return a.prototype=Object.create(ta.prototype),a.prototype.constructor=a,a.prototype.ensure=function(a,b,c){var d=this;return new Promise(function(e,f){function g(){try{var h,i=a[b];h="function"==typeof i?i.apply(a,c):i,e(h)}catch(j){if(!(j instanceof ja))return void f(j);d.streamManager.requestRange(j.begin,j.end).then(g,f)}}g()})},a.prototype.requestRange=function(a,b){return this.streamManager.requestRange(a,b)},a.prototype.requestLoadedStream=function(){this.streamManager.requestAllChunks()},a.prototype.sendProgressiveData=function(a){this.streamManager.onReceiveData({chunk:a})},a.prototype.onLoadedStream=function(){return this.streamManager.onLoadedStream()},a.prototype.terminate=function(){this.streamManager.abort()},a}(),wa=function(){function a(a,b,c,d,e,f){this.pdfManager=a,this.pageIndex=c,this.pageDict=d,this.xref=b,this.ref=e,this.fontCache=f,this.idCounters={obj:0},this.resourcesPromise=null}var c=[0,0,612,792];return a.prototype={getPageProp:function(a){return this.pageDict.get(a)},getInheritedPageProp:function(a){for(var c=this.pageDict,d=null,e=0,f=100;c;){var g=c.get(a);if(g&&(d||(d=[]),d.push(g)),++e>f){b("Page_getInheritedPageProp: maximum loop count exceeded.");break}c=c.get("Parent")}return d?1===d.length||!B(d[0])||e>f?d[0]:Aa.merge(this.xref,d):Aa.empty},get content(){return this.getPageProp("Contents")},get resources(){return g(this,"resources",this.getInheritedPageProp("Resources"))},get mediaBox(){var a=this.getInheritedPageProp("MediaBox");return C(a)&&4===a.length||(a=c),g(this,"mediaBox",a)},get view(){var a=this.mediaBox,b=this.getInheritedPageProp("CropBox");return C(b)&&4===b.length?(b=na.intersect(b,a),b?g(this,"view",b):g(this,"view",a)):g(this,"view",a)},get rotate(){var a=this.getInheritedPageProp("Rotate")||0;return a%90!==0?a=0:a>=360?a%=360:0>a&&(a=(a%360+360)%360),g(this,"rotate",a)},getContentStream:function(){var a,b=this.content;if(C(b)){var c,d=this.xref,e=b.length,f=[];for(c=0;e>c;++c)f.push(d.fetchIfRef(b[c]));a=new Pc(f)}else a=D(b)?b:new _c;return a},loadResources:function(a){return this.resourcesPromise||(this.resourcesPromise=this.pdfManager.ensure(this,"resources")),this.resourcesPromise.then(function(){var b=new Ia(this.resources.map,a,this.xref);return b.load()}.bind(this))},getOperatorList:function(a,b,c){var d=this,e=this.pdfManager,f=e.ensure(this,"getContentStream",[]),g=this.loadResources(["ExtGState","ColorSpace","Pattern","Shading","XObject","Font"]),h=new vb(e,this.xref,a,this.pageIndex,"p"+this.pageIndex+"_",this.idCounters,this.fontCache),i=Promise.all([f,g]),j=i.then(function(e){var f=e[0],g=new xb(c,a,d.pageIndex);return a.send("StartRenderPage",{transparency:h.hasBlendModes(d.resources),pageIndex:d.pageIndex,intent:c}),h.getOperatorList(f,b,d.resources,g).then(function(){return g})}),k=e.ensure(this,"annotations");return Promise.all([j,k]).then(function(a){var d=a[0],f=a[1];if(0===f.length)return d.flush(!0),d;var g=Na.appendToOperatorList(f,d,e,h,b,c);return g.then(function(){return d.flush(!0),d})})},extractTextContent:function(a){var b={on:function(){},send:function(){}},c=this,d=this.pdfManager,e=d.ensure(this,"getContentStream",[]),f=this.loadResources(["ExtGState","XObject","Font"]),g=Promise.all([e,f]);return g.then(function(e){var f=e[0],g=new vb(d,c.xref,b,c.pageIndex,"p"+c.pageIndex+"_",c.idCounters,c.fontCache);return g.getTextContent(f,a,c.resources)})},getAnnotationsData:function(){for(var a=this.annotations,b=[],c=0,d=a.length;d>c;++c)b.push(a[c].data);return b},get annotations(){for(var a=[],b=this.getInheritedPageProp("Annots")||[],c=new I,d=0,e=b.length;e>d;++d){var f=b[d],h=c.create(this.xref,f);h&&(h.isViewable()||h.isPrintable())&&a.push(h)}return g(this,"annotations",a)}},a}(),xa=function(){function b(a,b,e){D(b)?d.call(this,a,b,e):E(b)?d.call(this,a,new Mc(b),e):c("PDFDocument: Unknown argument type")}function d(a,b,c){e(b.length>0,"stream must have data"),this.pdfManager=a,this.stream=b;var d=new Fa(this.stream,c,a);this.xref=d}function f(a,b,c,d){var e=a.pos,f=a.end,g=[];e+c>f&&(c=f-e);for(var h=0;c>h;++h)g.push(String.fromCharCode(a.getByte()));var i=g.join("");a.pos=e;var j=d?i.lastIndexOf(b):i.indexOf(b);return-1===j?!1:(a.pos+=j,!0)}var h=1024,i="\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",k={get entries(){return g(this,"entries",{Title:y,Author:y,Subject:y,Keywords:y,Creator:y,Producer:y,CreationDate:y,ModDate:y,Trapped:z})}};return b.prototype={parse:function(b){this.setup(b);var c=this.catalog.catDict.get("Version");z(c)&&(this.pdfFormatVersion=c.name);try{if(this.acroForm=this.catalog.catDict.get("AcroForm"),this.acroForm){this.xfa=this.acroForm.get("XFA");var d=this.acroForm.get("Fields");d&&C(d)&&0!==d.length||this.xfa||(this.acroForm=null)}}catch(e){a("Something wrong with AcroForm entry"),this.acroForm=null}},get linearization(){var b=null;if(this.stream.length)try{b=Hc.create(this.stream)}catch(c){if(c instanceof ja)throw c;a(c)}return g(this,"linearization",b)},get startXRef(){var a=this.stream,b=0,c=this.linearization;if(c)a.reset(),f(a,"endobj",1024)&&(b=a.pos+6);else{for(var d=1024,e=!1,h=a.end;!e&&h>0;)h-=d-"startxref".length,0>h&&(h=0),a.pos=h,e=f(a,"startxref",d,!0);if(e){a.skip(9);var i;do i=a.getByte();while(Gc.isSpace(i));for(var j="";i>=32&&57>=i;)j+=String.fromCharCode(i),i=a.getByte();b=parseInt(j,10),isNaN(b)&&(b=0)}}return g(this,"startXRef",b)},get mainXRefEntriesOffset(){var a=0,b=this.linearization;return b&&(a=b.mainXRefEntriesOffset),g(this,"mainXRefEntriesOffset",a)},checkHeader:function(){var a=this.stream;if(a.reset(),f(a,"%PDF-",1024)){a.moveStart();for(var b,c=12,d="";(b=a.getByte())>32&&!(d.length>=c);)d+=String.fromCharCode(b);return void(this.pdfFormatVersion||(this.pdfFormatVersion=d.substring(5)))}},parseStartXRef:function(){var a=this.startXRef;this.xref.setStartXRef(a)},setup:function(a){this.xref.parse(a),this.catalog=new Ea(this.pdfManager,this.xref)},get numPages(){var a=this.linearization,b=a?a.numPages:this.catalog.numPages;return g(this,"numPages",b)},get documentInfo(){var b,c={PDFFormatVersion:this.pdfFormatVersion,IsAcroFormPresent:!!this.acroForm,IsXFAPresent:!!this.xfa};try{b=this.xref.trailer.get("Info")}catch(d){a("The document information dictionary is invalid.")}if(b){var e=k.entries;for(var f in e)if(b.has(f)){var h=b.get(f);e[f](h)?c[f]="string"!=typeof h?h:r(h):a('Bad value in document info for "'+f+'"')}}return g(this,"documentInfo",c)},get fingerprint(){var a,b=this.xref,c="",d=b.trailer.get("ID");d&&C(d)&&d[0]&&y(d[0])&&d[0]!==i?a=j(d[0]):(this.stream.ensureRange&&this.stream.ensureRange(0,Math.min(h,this.stream.end)),a=gb(this.stream.bytes.subarray(0,h),0,h));for(var e=0,f=a.length;f>e;e++){var k=a[e].toString(16);c+=1===k.length?"0"+k:k}return g(this,"fingerprint",c)},getPage:function(a){return this.catalog.getPage(a)},cleanup:function(){return this.catalog.cleanup()}},b}(),ya=function(){function a(a){this.name=a}a.prototype={};var b={};return a.get=function(c){var d=b[c];return d?d:b[c]=new a(c)},a}(),za=function(){function a(a){this.cmd=a}a.prototype={};var b={};return a.get=function(c){var d=b[c];return d?d:b[c]=new a(c)},a}(),Aa=function(){function a(a){if(!z(a.Type))return!0;var b=a.Type.name;return d[b]===!0}function b(a){this.map=Object.create(null),this.xref=a,this.objId=null,this.__nonSerializable__=c}var c=function(){return c},d={Background:!0,ExtGState:!0,Halftone:!0,Layout:!0,Mask:!0,Pagination:!0,Printing:!0};return b.prototype={assignXref:function(a){this.xref=a},get:function(a,b,c){var d,e=this.xref;return"undefined"!=typeof(d=this.map[a])||a in this.map||"undefined"==typeof b?e?e.fetchIfRef(d):d:"undefined"!=typeof(d=this.map[b])||b in this.map||"undefined"==typeof c?e?e.fetchIfRef(d):d:(d=this.map[c]||null,e?e.fetchIfRef(d):d)},getAsync:function(a,b,c){var d,e=this.xref;return"undefined"!=typeof(d=this.map[a])||a in this.map||"undefined"==typeof b?e?e.fetchIfRefAsync(d):Promise.resolve(d):"undefined"!=typeof(d=this.map[b])||b in this.map||"undefined"==typeof c?e?e.fetchIfRefAsync(d):Promise.resolve(d):(d=this.map[c]||null,e?e.fetchIfRefAsync(d):Promise.resolve(d))},getArray:function(a,b,c){var d=this.get(a,b,c),e=this.xref;if(!C(d)||!e)return d;d=d.slice();for(var f=0,g=d.length;g>f;f++)F(d[f])&&(d[f]=e.fetch(d[f]));return d},getRaw:function(a){return this.map[a]},getAll:function(){var c,d,e=Object.create(null),f=null;for(c in this.map)d=this.get(c),d instanceof b?a(d)?(f||(f=[])).push({target:e,key:c,obj:d}):e[c]=this.getRaw(c):e[c]=d;if(!f)return e;for(var g=Object.create(null);f.length>0;){var h=f.shift(),i=h.obj,j=i.objId;if(j&&j in g)h.target[h.key]=g[j];else{var k=Object.create(null);for(c in i.map)d=i.get(c),d instanceof b?a(d)?f.push({target:k,key:c,obj:d}):k[c]=i.getRaw(c):k[c]=d;j&&(g[j]=k),h.target[h.key]=k}}return e},getKeys:function(){return Object.keys(this.map)},set:function(a,b){this.map[a]=b},has:function(a){return a in this.map},forEach:function(a){for(var b in this.map)a(b,this.get(b))}},b.empty=new b(null),b.merge=function(a,c){for(var d=new b(a),e=0,f=c.length;f>e;e++){var g=c[e];if(B(g))for(var h in g.map)d.map[h]||(d.map[h]=g.map[h])}return d},b}(),Ba=function(){function a(a,b){this.num=a,this.gen=b}return a.prototype={toString:function(){var a=this.num+"R";return 0!==this.gen&&(a+=this.gen),a}},a}(),Ca=function(){function a(){this.dict={}}return a.prototype={has:function(a){return a.toString()in this.dict},put:function(a){this.dict[a.toString()]=!0},remove:function(a){delete this.dict[a.toString()]}},a}(),Da=function(){function a(){this.dict=Object.create(null)}return a.prototype={get:function(a){return this.dict[a.toString()]},has:function(a){return a.toString()in this.dict},put:function(a,b){this.dict[a.toString()]=b},putAlias:function(a,b){this.dict[a.toString()]=this.get(b)},forEach:function(a,b){for(var c in this.dict)a.call(b,this.dict[c])},clear:function(){this.dict=Object.create(null)}},a}(),Ea=function(){function d(a,b){this.pdfManager=a,this.xref=b,this.catDict=b.getCatalogObj(),this.fontCache=new Da,e(B(this.catDict),"catalog object is not a dictionary"),this.pagePromises=[]}return d.prototype={get metadata(){var b=this.catDict.getRaw("Metadata");if(!F(b))return g(this,"metadata",null);var c,d=this.xref.encrypt?this.xref.encrypt.encryptMetadata:!1,e=this.xref.fetch(b,!d);if(e&&B(e.dict)){var f=e.dict.get("Type"),h=e.dict.get("Subtype");if(z(f)&&z(h)&&"Metadata"===f.name&&"XML"===h.name)try{c=s(i(e.getBytes()))}catch(j){a("Skipping invalid metadata.")}}return g(this,"metadata",c)},get toplevelPagesDict(){var a=this.catDict.get("Pages");return e(B(a),"invalid top-level pages dictionary"),g(this,"toplevelPagesDict",a)},get documentOutline(){var a=null;try{a=this.readDocumentOutline()}catch(c){if(c instanceof ja)throw c;b("Unable to read document outline")}return g(this,"documentOutline",a)},readDocumentOutline:function(){var a=this.xref,b=this.catDict.get("Outlines"),d={items:[]};if(B(b)){b=b.getRaw("First");var e=new Ca;if(F(b)){var f=[{obj:b,parent:d}];for(e.put(b);f.length>0;){var g=f.shift(),h=a.fetchIfRef(g.obj);if(null!==h){h.has("Title")||c("Invalid outline item");var i=h.get("A");i?i=i.get("D"):h.has("Dest")&&(i=h.getRaw("Dest"),z(i)&&(i=i.name));var j=h.get("Title"),k={dest:i,title:r(j),color:h.get("C")||[0,0,0],count:h.get("Count"),bold:!!(2&h.get("F")),italic:!!(1&h.get("F")),items:[]};g.parent.items.push(k),b=h.getRaw("First"),F(b)&&!e.has(b)&&(f.push({obj:b,parent:k}),e.put(b)),b=h.getRaw("Next"),F(b)&&!e.has(b)&&(f.push({obj:b,parent:g.parent}),e.put(b))}}}}return d.items.length>0?d.items:null},get numPages(){var a=this.toplevelPagesDict.get("Count");return e(w(a),"page count in top level pages object is not an integer"),g(this,"num",a)},get destinations(){function a(a){return B(a)?a.get("D"):a}var b,c,d=this.xref,e={},f=this.catDict.get("Names");if(f&&f.has("Dests")?b=f.getRaw("Dests"):this.catDict.has("Dests")&&(c=this.catDict.get("Dests")),c&&(f=c,f.forEach(function(b,c){c&&(e[b]=a(c))})),b){var h=new Ga(b,d),i=h.getAll();for(var j in i)i.hasOwnProperty(j)&&(e[j]=a(i[j]))}return g(this,"destinations",e)},getDestination:function(a){function b(a){return B(a)?a.get("D"):a}var c,d,e=this.xref,f=null,g=this.catDict.get("Names");if(g&&g.has("Dests")?c=g.getRaw("Dests"):this.catDict.has("Dests")&&(d=this.catDict.get("Dests")),d){var h=d.get(a);h&&(f=b(h))}if(c){var i=new Ga(c,e);f=b(i.get(a))}return f},get attachments(){var a,b=this.xref,c=null,d=this.catDict.get("Names");if(d&&(a=d.getRaw("EmbeddedFiles")),a){var e=new Ga(a,b),f=e.getAll();for(var h in f)if(f.hasOwnProperty(h)){var i=new Ha(f[h],b);c||(c={}),c[r(h)]=i.serializable}}return g(this,"attachments",c)},get javaScript(){function a(a){var b=a.get("S");if(z(b)&&"JavaScript"===b.name){var c=a.get("JS");if(D(c))c=i(c.getBytes());else if(!y(c))return;d.push(r(c))}}var b=this.xref,c=this.catDict.get("Names"),d=[];if(c&&c.has("JavaScript")){var e=new Ga(c.getRaw("JavaScript"),b),f=e.getAll();for(var h in f)if(f.hasOwnProperty(h)){var j=f[h];B(j)&&a(j)}}var k=this.catDict.get("OpenAction");if(B(k,"Action")){var l=k.get("S");if(z(l)&&"Named"===l.name){var m=k.get("N");z(m)&&"Print"===m.name&&d.push("print({});")}else a(k)}return g(this,"javaScript",d)},cleanup:function(){var a=[];return this.fontCache.forEach(function(b){a.push(b)}),Promise.all(a).then(function(a){for(var b=0,c=a.length;c>b;b++){var d=a[b].dict;delete d.translated}this.fontCache.clear()}.bind(this))},getPage:function(a){return a in this.pagePromises||(this.pagePromises[a]=this.getPageDict(a).then(function(b){var c=b[0],d=b[1];return new wa(this.pdfManager,this.xref,a,c,d,this.fontCache)}.bind(this))),this.pagePromises[a]},getPageDict:function(a){function b(){for(;d.length;){var i=d.pop();if(F(i))return void g.fetchAsync(i).then(function(e){return B(e,"Page")||B(e)&&!e.has("Kids")?void(a===f?c.resolve([e,i]):(f++,b())):(d.push(e),void b())},c.reject);e(B(i),"page dictionary kid reference points to wrong type of object");var j=i.get("Count");if(0===j&&(h=!0),a>=f+j)f+=j;else{var k=i.get("Kids");if(e(C(k),"page dictionary kids object is not an array"),h||j!==k.length)for(var l=k.length-1;l>=0;l--)d.push(k[l]);else d=[k[a-f]],f=a}}c.reject("Page index "+a+" not found.")}var c=G(),d=[this.catDict.getRaw("Pages")],f=0,g=this.xref,h=!1;return b(),c.promise},getPageIndex:function(a){function b(a){var b,d=0;return f.fetchAsync(a).then(function(a){return a?(b=a.getRaw("Parent"),a.getAsync("Parent")):null}).then(function(a){return a?a.getAsync("Kids"):null}).then(function(g){if(!g)return null;for(var h=[],i=!1,j=0;j<g.length;j++){var k=g[j];if(e(F(k),"kids must be a ref"),k.num===a.num){i=!0;break}h.push(f.fetchAsync(k).then(function(a){if(a.has("Count")){var b=a.get("Count");d+=b}else d++}))}return i||c("kid ref not found in parents kids"),
+Promise.all(h).then(function(){return[d,b]})})}function d(a){return b(a).then(function(a){if(!a)return g;var b=a[0],c=a[1];return g+=b,d(c)})}var f=this.xref,g=0;return d(a)}},d}(),Fa=function(){function d(a,b){this.stream=a,this.entries=[],this.xrefstms={},this.cache=[],this.password=b,this.stats={streamTypes:[],fontTypes:[]}}return d.prototype={setStartXRef:function(a){this.startXRefQueue=[a]},parse:function(a){var d;a?(b("Indexing all PDF objects"),d=this.indexObjects()):d=this.readXRef(),d.assignXref(this),this.trailer=d;var e=d.get("Encrypt");if(e){var f=d.get("ID"),g=f&&f.length?f[0]:"";this.encrypt=new rb(e,g,this.password)}(this.root=d.get("Root"))||c("Invalid root reference")},processXRefTable:function(a){"tableState"in this||(this.tableState={entryNum:0,streamPos:a.lexer.stream.pos,parserBuf1:a.buf1,parserBuf2:a.buf2});var b=this.readXRefTable(a);A(b,"trailer")||c("Invalid XRef table: could not find trailer dictionary");var d=a.getObj();return!B(d)&&d.dict&&(d=d.dict),B(d)||c("Invalid XRef table: could not parse trailer dictionary"),delete this.tableState,d},readXRefTable:function(a){var b=a.lexer.stream,d=this.tableState;b.pos=d.streamPos,a.buf1=d.parserBuf1,a.buf2=d.parserBuf2;for(var e;;){if(!("firstEntryNum"in d&&"entryCount"in d)){if(A(e=a.getObj(),"trailer"))break;d.firstEntryNum=e,d.entryCount=a.getObj()}var f=d.firstEntryNum,g=d.entryCount;w(f)&&w(g)||c("Invalid XRef table: wrong types in subsection header");for(var h=d.entryNum;g>h;h++){d.streamPos=b.pos,d.entryNum=h,d.parserBuf1=a.buf1,d.parserBuf2=a.buf2;var i={};i.offset=a.getObj(),i.gen=a.getObj();var j=a.getObj();A(j,"f")?i.free=!0:A(j,"n")&&(i.uncompressed=!0),w(i.offset)&&w(i.gen)&&(i.free||i.uncompressed)||c("Invalid entry in XRef subsection: "+f+", "+g),this.entries[h+f]||(this.entries[h+f]=i)}d.entryNum=0,d.streamPos=b.pos,d.parserBuf1=a.buf1,d.parserBuf2=a.buf2,delete d.firstEntryNum,delete d.entryCount}return 1===f&&this.entries[1]&&this.entries[1].free&&this.entries.shift(),this.entries[0]&&!this.entries[0].free&&c("Invalid XRef table: unexpected first object"),e},processXRefStream:function(a){if(!("streamState"in this)){var b=a.dict,c=b.get("W"),d=b.get("Index");d||(d=[0,b.get("Size")]),this.streamState={entryRanges:d,byteWidths:c,entryNum:0,streamPos:a.pos}}return this.readXRefStream(a),delete this.streamState,a.dict},readXRefStream:function(a){var b,d,e=this.streamState;a.pos=e.streamPos;for(var f=e.byteWidths,g=f[0],h=f[1],i=f[2],j=e.entryRanges;j.length>0;){var k=j[0],l=j[1];for(w(k)&&w(l)||c("Invalid XRef range fields: "+k+", "+l),w(g)&&w(h)&&w(i)||c("Invalid XRef entry fields length: "+k+", "+l),b=e.entryNum;l>b;++b){e.entryNum=b,e.streamPos=a.pos;var m=0,n=0,o=0;for(d=0;g>d;++d)m=m<<8|a.getByte();for(0===g&&(m=1),d=0;h>d;++d)n=n<<8|a.getByte();for(d=0;i>d;++d)o=o<<8|a.getByte();var p={};switch(p.offset=n,p.gen=o,m){case 0:p.free=!0;break;case 1:p.uncompressed=!0;break;case 2:break;default:c("Invalid XRef entry type: "+m)}this.entries[k+b]||(this.entries[k+b]=p)}e.entryNum=0,e.streamPos=a.pos,j.splice(0,2)}},indexObjects:function(){function a(a,b){for(var c="",f=a[b];f!==d&&f!==e&&f!==h&&!(++b>=a.length);)c+=String.fromCharCode(f),f=a[b];return c}function b(a,b,c){for(var d=c.length,e=a.length,f=0;e>b;){for(var g=0;d>g&&a[b+g]===c[g];)++g;if(g>=d)break;b++,f++}return f}var c=9,d=10,e=13,f=32,g=37,h=60,i=/^(\d+)\s+(\d+)\s+obj\b/,j=new Uint8Array([116,114,97,105,108,101,114]),k=new Uint8Array([115,116,97,114,116,120,114,101,102]),l=new Uint8Array([101,110,100,111,98,106]),m=new Uint8Array([47,88,82,101,102]);this.entries.length=0;var n=this.stream;n.pos=0;for(var o=n.getBytes(),p=n.start,q=o.length,r=[],s=[];q>p;){var t=o[p];if(t!==c&&t!==d&&t!==e&&t!==f)if(t!==g){var u,v=a(o,p);if(0!==v.indexOf("xref")||4!==v.length&&!/\s/.test(v[4]))if(u=i.exec(v)){"undefined"==typeof this.entries[u[1]]&&(this.entries[u[1]]={offset:p-n.start,gen:0|u[2],uncompressed:!0});var w=b(o,p,l)+7,x=o.subarray(p,p+w),y=b(x,0,m);w>y&&x[y+5]<64&&(s.push(p-n.start),this.xrefstms[p-n.start]=1),p+=w}else 0!==v.indexOf("trailer")||7!==v.length&&!/\s/.test(v[7])?p+=v.length+1:(r.push(p),p+=b(o,p,k));else p+=b(o,p,j),r.push(p),p+=b(o,p,k)}else do{if(++p,p>=q)break;t=o[p]}while(t!==d&&t!==e);else++p}var z,C;for(z=0,C=s.length;C>z;++z)this.startXRefQueue.push(s[z]),this.readXRef(!0);var D;for(z=0,C=r.length;C>z;++z){n.pos=r[z];var E=new Fc(new Gc(n),!0,this),F=E.getObj();if(A(F,"trailer")&&B(D=E.getObj())&&D.has("ID"))return D}if(D)return D;throw new fa("Invalid PDF structure")},readXRef:function(b){var d=this.stream;try{for(;this.startXRefQueue.length;){var e=this.startXRefQueue[0];d.pos=e+d.start;var f,g=new Fc(new Gc(d),!0,this),h=g.getObj();if(A(h,"xref")){if(f=this.processXRefTable(g),this.topDict||(this.topDict=f),h=f.get("XRefStm"),w(h)){var i=h;i in this.xrefstms||(this.xrefstms[i]=1,this.startXRefQueue.push(i))}}else w(h)?(w(g.getObj())&&A(g.getObj(),"obj")&&D(h=g.getObj())||c("Invalid XRef stream"),f=this.processXRefStream(h),this.topDict||(this.topDict=f),f||c("Failed to read XRef stream")):c("Invalid XRef stream header");h=f.get("Prev"),w(h)?this.startXRefQueue.push(h):F(h)&&this.startXRefQueue.push(h.num),this.startXRefQueue.shift()}return this.topDict}catch(j){if(j instanceof ja)throw j;a("(while reading XRef): "+j)}if(!b)throw new ka},getEntry:function(a){var b=this.entries[a];return b&&!b.free&&b.offset?b:null},fetchIfRef:function(a){return F(a)?this.fetch(a):a},fetch:function(a,b){e(F(a),"ref object is not a reference");var c=a.num;if(c in this.cache){var d=this.cache[c];return d}var f=this.getEntry(c);return null===f?this.cache[c]=null:(f=f.uncompressed?this.fetchUncompressed(a,f,b):this.fetchCompressed(f,b),B(f)?f.objId=a.toString():D(f)&&(f.dict.objId=a.toString()),f)},fetchUncompressed:function(a,b,d){var e=a.gen,f=a.num;b.gen!==e&&c("inconsistent generation in XRef");var g=this.stream.makeSubStream(b.offset+this.stream.start),h=new Fc(new Gc(g),!0,this),i=h.getObj(),j=h.getObj(),k=h.getObj();if(w(i)&&parseInt(i,10)===f&&w(j)&&parseInt(j,10)===e&&A(k)||c("bad XRef entry"),!A(k,"obj")){if(0===k.cmd.indexOf("obj")&&(f=parseInt(k.cmd.substring(3),10),!isNaN(f)))return f;c("bad XRef entry")}return b=this.encrypt&&!d?h.getObj(this.encrypt.createCipherTransform(f,e)):h.getObj(),D(b)||(this.cache[f]=b),b},fetchCompressed:function(a,b){var d=a.offset,e=this.fetch(new Ba(d,0));D(e)||c("bad ObjStm stream");var f=e.dict.get("First"),g=e.dict.get("N");w(f)&&w(g)||c("invalid first and n parameters for ObjStm stream");var h=new Fc(new Gc(e),!1,this);h.allowStreams=!0;var i,j,k=[],l=[];for(i=0;g>i;++i){j=h.getObj(),w(j)||c("invalid object number in the ObjStm stream: "+j),l.push(j);var m=h.getObj();w(m)||c("invalid object offset in the ObjStm stream: "+m)}for(i=0;g>i;++i){k.push(h.getObj()),j=l[i];var n=this.entries[j];n&&n.offset===d&&n.gen===i&&(this.cache[j]=k[i])}return a=k[a.gen],void 0===a&&c("bad XRef entry for compressed object"),a},fetchIfRefAsync:function(a){return F(a)?this.fetchAsync(a):Promise.resolve(a)},fetchAsync:function(a,b){var c=this.stream.manager,d=this;return new Promise(function e(f,g){try{f(d.fetch(a,b))}catch(h){if(h instanceof ja)return void c.requestRange(h.begin,h.end).then(function(){e(f,g)},g);g(h)}})},getCatalogObj:function(){return this.root}},d}(),Ga=function(){function a(a,b){this.root=a,this.xref=b}return a.prototype={getAll:function(){var a={};if(!this.root)return a;var b=this.xref,d=new Ca;d.put(this.root);for(var e=[this.root];e.length>0;){var f,g,h=b.fetchIfRef(e.shift());if(B(h))if(h.has("Kids")){var i=h.get("Kids");for(f=0,g=i.length;g>f;f++){var j=i[f];d.has(j)&&c("invalid destinations"),e.push(j),d.put(j)}}else{var k=h.get("Names");if(k)for(f=0,g=k.length;g>f;f+=2)a[b.fetchIfRef(k[f])]=b.fetchIfRef(k[f+1])}}return a},get:function(a){if(!this.root)return null;for(var c,d,e,f=this.xref,g=f.fetchIfRef(this.root),h=0,i=10;g.has("Kids");){if(h++,h>i)return b("Search depth limit for named destionations has been reached."),null;var j=g.get("Kids");if(!C(j))return null;for(c=0,d=j.length-1;d>=c;){e=c+d>>1;var k=f.fetchIfRef(j[e]),l=k.get("Limits");if(a<f.fetchIfRef(l[0]))d=e-1;else{if(!(a>f.fetchIfRef(l[1]))){g=f.fetchIfRef(j[e]);break}c=e+1}}if(c>d)return null}var m=g.get("Names");if(C(m))for(c=0,d=m.length-2;d>=c;)if(e=c+d&-2,a<f.fetchIfRef(m[e]))d=e-2;else{if(!(a>f.fetchIfRef(m[e])))return f.fetchIfRef(m[e+1]);c=e+2}return null}},a}(),Ha=function(){function a(a,c){a&&B(a)&&(this.xref=c,this.root=a,a.has("FS")&&(this.fs=a.get("FS")),this.description=a.has("Desc")?r(a.get("Desc")):"",a.has("RF")&&b("Related file specifications are not supported"),this.contentAvailable=!0,a.has("EF")||(this.contentAvailable=!1,b("Non-embedded file specifications are not supported")))}function c(a){return a.has("UF")?a.get("UF"):a.has("F")?a.get("F"):a.has("Unix")?a.get("Unix"):a.has("Mac")?a.get("Mac"):a.has("DOS")?a.get("DOS"):null}return a.prototype={get filename(){if(!this._filename&&this.root){var a=c(this.root)||"unnamed";this._filename=r(a).replace(/\\\\/g,"\\").replace(/\\\//g,"/").replace(/\\/g,"/")}return this._filename},get content(){if(!this.contentAvailable)return null;!this.contentRef&&this.root&&(this.contentRef=c(this.root.get("EF")));var a=null;if(this.contentRef){var d=this.xref,e=d.fetchIfRef(this.contentRef);e&&D(e)?a=e.getBytes():b("Embedded file specification points to non-existing/invalid content")}else b("Embedded file specification does not have a content");return a},get serializable(){return{filename:this.filename,content:this.content}}},a}(),Ia=function(){function a(a){return F(a)||B(a)||C(a)||D(a)}function b(b,c){var d;if(B(b)||D(b)){var e;e=B(b)?b.map:b.dict.map;for(var f in e)d=e[f],a(d)&&c.push(d)}else if(C(b))for(var g=0,h=b.length;h>g;g++)d=b[g],a(d)&&c.push(d)}function c(a,b,c){this.obj=a,this.keys=b,this.xref=c,this.refSet=null,this.capability=null}return c.prototype={load:function(){var a=this.keys;if(this.capability=G(),!(this.xref.stream instanceof qa)||0===this.xref.stream.getMissingChunks().length)return this.capability.resolve(),this.capability.promise;this.refSet=new Ca;for(var b=[],c=0;c<a.length;c++)b.push(this.obj[a[c]]);return this._walk(b),this.capability.promise},_walk:function(a){for(var c=[],d=[];a.length;){var e=a.pop();if(F(e)){if(this.refSet.has(e))continue;try{var f=e;this.refSet.put(f),e=this.xref.fetch(e)}catch(g){if(!(g instanceof ja))throw g;c.push(e),d.push({begin:g.begin,end:g.end})}}if(e&&e.getBaseStreams){for(var h=e.getBaseStreams(),i=!1,j=0;j<h.length;j++){var k=h[j];k.getMissingChunks&&k.getMissingChunks().length&&(i=!0,d.push({begin:k.start,end:k.end}))}i&&c.push(e)}b(e,a)}return d.length?void this.xref.stream.manager.requestRanges(d).then(function(){a=c;for(var b=0;b<c.length;b++){var d=c[b];F(d)&&this.refSet.remove(d)}this._walk(a)}.bind(this),this.capability.reject):(this.refSet=null,void this.capability.resolve())}},c}(),Ja=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron"],Ka=[".notdef","space","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],La=[".notdef","space","dollaroldstyle","dollarsuperior","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","hyphensuperior","colonmonetary","onefitted","rupiah","centoldstyle","figuredash","hypheninferior","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior"],Ma=22;I.prototype={create:function(a,c){var d=a.fetchIfRef(c);if(B(d)){var e=d.get("Subtype");e=z(e)?e.name:"";var f={dict:d,ref:c};switch(e){case"Link":return new Sa(f);case"Text":return new Ra(f);case"Widget":var g=na.getInheritableProperty(d,"FT");return z(g)&&"Tx"===g.name?new Qa(f):new Pa(f);default:return b('Unimplemented annotation type "'+e+'", falling back to base annotation'),new Na(f)}}}};var Na=function(){function a(a,b,c){var d=na.getAxialAlignedBoundingBox(b,c),e=d[0],f=d[1],g=d[2],h=d[3];if(e===g||f===h)return[1,0,0,1,a[0],a[1]];var i=(a[2]-a[0])/(g-e),j=(a[3]-a[1])/(h-f);return[i,0,0,j,a[0]-e*i,a[1]-f*j]}function b(a){var b=a.get("AP");if(B(b)){var c,d=b.get("N");if(B(d)){var e=a.get("AS");e&&d.has(e.name)&&(c=d.get(e.name))}else c=d;return c}}function c(a){var c=a.dict,d=this.data={};d.subtype=c.get("Subtype").name,d.annotationFlags=c.get("F"),this.setRectangle(c.get("Rect")),d.rect=this.rectangle,this.setColor(c.get("C")),d.color=this.color,this.borderStyle=d.borderStyle=new Oa,this.setBorderStyle(c),this.appearance=b(c),d.hasAppearance=!!this.appearance,d.id=a.ref.num}return c.prototype={setRectangle:function(a){C(a)&&4===a.length?this.rectangle=na.normalizeRect(a):this.rectangle=[0,0,0,0]},setColor:function(a){var b=new Uint8Array(3);if(!C(a))return void(this.color=b);switch(a.length){case 0:this.color=null;break;case 1:Xa.singletons.gray.getRgbItem(a,0,b,0),this.color=b;break;case 3:Xa.singletons.rgb.getRgbItem(a,0,b,0),this.color=b;break;case 4:Xa.singletons.cmyk.getRgbItem(a,0,b,0),this.color=b;break;default:this.color=b}},setBorderStyle:function(a){if(B(a))if(a.has("BS")){var b,c=a.get("BS");(!c.has("Type")||z(b=c.get("Type"))&&"Border"===b.name)&&(this.borderStyle.setWidth(c.get("W")),this.borderStyle.setStyle(c.get("S")),this.borderStyle.setDashArray(c.get("D")))}else if(a.has("Border")){var d=a.get("Border");C(d)&&d.length>=3&&(this.borderStyle.setHorizontalCornerRadius(d[0]),this.borderStyle.setVerticalCornerRadius(d[1]),this.borderStyle.setWidth(d[2]),4===d.length&&this.borderStyle.setDashArray(d[3]))}else this.borderStyle.setWidth(0)},isInvisible:function(){var a=this.data;return!!(a&&a.annotationFlags&&1&a.annotationFlags)},isViewable:function(){var a=this.data;return!(this.isInvisible()||!a||a.annotationFlags&&34&a.annotationFlags||!a.rect)},isPrintable:function(){var a=this.data;return!(!(!this.isInvisible()&&a&&a.annotationFlags&&4&a.annotationFlags)||2&a.annotationFlags||!a.rect)},loadResources:function(a){return new Promise(function(b,c){this.appearance.dict.getAsync("Resources").then(function(d){if(!d)return void b();var e=new Ia(d.map,a,d.xref);e.load().then(function(){b(d)},c)},c)}.bind(this))},getOperatorList:function(b,c){if(!this.appearance)return Promise.resolve(new xb);var d=this.data,e=this.appearance.dict,f=this.loadResources(["ExtGState","ColorSpace","Pattern","Shading","XObject","Font"]),g=e.get("BBox")||[0,0,1,1],h=e.get("Matrix")||[1,0,0,1,0,0],i=a(d.rect,g,h),j=this;return f.then(function(a){var e=new xb;return e.addOp($.beginAnnotation,[d.rect,i,h]),b.getOperatorList(j.appearance,c,a,e).then(function(){return e.addOp($.endAnnotation,[]),j.appearance.reset(),e})})}},c.appendToOperatorList=function(a,b,c,d,e,f){function g(a){h.reject(a)}for(var h=G(),i=[],j=0,k=a.length;k>j;++j)("display"===f&&a[j].isViewable()||"print"===f&&a[j].isPrintable())&&i.push(a[j].getOperatorList(d,e));return Promise.all(i).then(function(a){b.addOp($.beginAnnotations,[]);for(var c=0,d=a.length;d>c;++c){var e=a[c];b.addOpList(e)}b.addOp($.endAnnotations,[]),h.resolve()},g),h.promise},c}(),Oa=function(){function a(){this.width=1,this.style=X.SOLID,this.dashArray=[3],this.horizontalCornerRadius=0,this.verticalCornerRadius=0}return a.prototype={setWidth:function(a){a===(0|a)&&(this.width=a)},setStyle:function(a){if(a)switch(a.name){case"S":this.style=X.SOLID;break;case"D":this.style=X.DASHED;break;case"B":this.style=X.BEVELED;break;case"I":this.style=X.INSET;break;case"U":this.style=X.UNDERLINE}},setDashArray:function(a){if(C(a)&&a.length>0){for(var b=!0,c=!0,d=0,e=a.length;e>d;d++){var f=a[d],g=+f>=0;if(!g){b=!1;break}f>0&&(c=!1)}b&&!c?this.dashArray=a:this.width=0}else a&&(this.width=0)},setHorizontalCornerRadius:function(a){a===(0|a)&&(this.horizontalCornerRadius=a)},setVerticalCornerRadius:function(a){a===(0|a)&&(this.verticalCornerRadius=a)}},a}(),Pa=function(){function a(a){Na.call(this,a);var b=a.dict,c=this.data;c.fieldValue=r(na.getInheritableProperty(b,"V")||""),c.alternativeText=r(b.get("TU")||""),c.defaultAppearance=na.getInheritableProperty(b,"DA")||"";var d=na.getInheritableProperty(b,"FT");c.fieldType=z(d)?d.name:"",c.fieldFlags=na.getInheritableProperty(b,"Ff")||0,this.fieldResources=na.getInheritableProperty(b,"DR")||Aa.empty;for(var e=[],f=b,g=a.ref;f;){var h=f.get("Parent"),i=f.getRaw("Parent"),j=f.get("T");if(j)e.unshift(r(j));else if(h&&g){var k,l,m=h.get("Kids");for(k=0,l=m.length;l>k;k++){var n=m[k];if(n.num===g.num&&n.gen===g.gen)break}e.unshift("`"+k)}f=h,g=i}c.fullName=e.join(".")}var c=Na.prototype;return na.inherit(a,Na,{isViewable:function(){return"Sig"===this.data.fieldType?(b("unimplemented annotation type: Widget signature"),!1):c.isViewable.call(this)}}),a}(),Qa=function(){function a(a){Pa.call(this,a),this.data.textAlignment=na.getInheritableProperty(a.dict,"Q"),this.data.annotationType=W.WIDGET,this.data.hasHtml=!this.data.hasAppearance&&!!this.data.fieldValue}return na.inherit(a,Pa,{getOperatorList:function(a,b){if(this.appearance)return Na.prototype.getOperatorList.call(this,a,b);var c=new xb,d=this.data;if(!d.defaultAppearance)return Promise.resolve(c);var e=new Mc(j(d.defaultAppearance));return a.getOperatorList(e,b,this.fieldResources,c).then(function(){return c})}}),a}(),Ra=function(){function a(a){Na.call(this,a);var b=a.dict,c=this.data,d=b.get("Contents"),e=b.get("T");c.annotationType=W.TEXT,c.content=r(d||""),c.title=r(e||""),c.hasHtml=!0,c.hasAppearance?c.name="NoIcon":(c.rect[1]=c.rect[3]-Ma,c.rect[2]=c.rect[0]+Ma,c.name=b.has("Name")?b.get("Name").name:"Note"),b.has("C")&&(c.hasBgColor=!0)}return na.inherit(a,Na,{}),a}(),Sa=function(){function a(a){Na.call(this,a);var d=a.dict,e=this.data;e.annotationType=W.LINK,e.hasHtml=!0;var g=d.get("A");if(g&&B(g)){var h=g.get("S").name;if("URI"===h){var i=g.get("URI");z(i)?i="/"+i.name:i&&(i=c(i)),f(i,!1)||(i="");try{e.url=s(i)}catch(j){e.url=i}}else if("GoTo"===h)e.dest=g.get("D");else if("GoToR"===h){var k=g.get("F");B(k)&&(i=k.get("F")||""),f(i,!1)||(i=""),e.url=i,e.dest=g.get("D")}else"Named"===h?e.action=g.get("N").name:b("unrecognized link type: "+h)}else if(d.has("Dest")){var l=d.get("Dest");e.dest=z(l)?l.name:l}}function c(a){return a&&0===a.indexOf("www.")?"http://"+a:a}return na.inherit(a,Na,{}),a}(),Ta=function(){var b=0,d=2,e=3,f=4;return{getSampleArray:function(a,b,c,d){var e,f,g=1;for(e=0,f=a.length;f>e;e++)g*=a[e];g*=b;var h=new Array(g),i=0,j=0,k=1/(Math.pow(2,c)-1),l=d.getBytes((g*c+7)/8),m=0;for(e=0;g>e;e++){for(;c>i;)j<<=8,j|=l[m++],i+=8;i-=c,h[e]=(j>>i)*k,j&=(1<<i)-1}return h},getIR:function(a,b){var d=b.dict;d||(d=b);var e=[this.constructSampled,null,this.constructInterpolated,this.constructStiched,this.constructPostScript],f=d.get("FunctionType"),g=e[f];return g||c("Unknown type of function"),g.call(this,b,d,a)},fromIR:function(a){var c=a[0];switch(c){case b:return this.constructSampledFromIR(a);case d:return this.constructInterpolatedFromIR(a);case e:return this.constructStichedFromIR(a);default:return this.constructPostScriptFromIR(a)}},parse:function(a,b){var c=this.getIR(a,b);return this.fromIR(c)},parseArray:function(a,b){if(!C(b))return this.parse(a,b);for(var c=[],d=0,e=b.length;e>d;d++){var f=a.fetchIfRef(b[d]);c.push(Ta.parse(a,f))}return function(a,b,d,e){for(var f=0,g=c.length;g>f;f++)c[f](a,b,d,e+f)}},constructSampled:function(d,e){function f(a){for(var b=a.length,c=[],d=0,e=0;b>e;e+=2)c[d]=[a[e],a[e+1]],++d;return c}var g=e.get("Domain"),h=e.get("Range");g&&h||c("No domain or range");var i=g.length/2,j=h.length/2;g=f(g),h=f(h);var k=e.get("Size"),l=e.get("BitsPerSample"),m=e.get("Order")||1;1!==m&&a("No support for cubic spline interpolation: "+m);var n=e.get("Encode");if(!n){n=[];for(var o=0;i>o;++o)n.push(0),n.push(k[o]-1)}n=f(n);var p=e.get("Decode");p=p?f(p):h;var q=this.getSampleArray(k,j,l,d);return[b,i,g,n,p,q,k,j,Math.pow(2,l)-1,h]},constructSampledFromIR:function(a){function b(a,b,c,d,e){return d+(a-b)*((e-d)/(c-b))}return function(c,d,e,f){var g,h,i=a[1],j=a[2],k=a[3],l=a[4],m=a[5],n=a[6],o=a[7],p=a[9],q=1<<i,r=new Float64Array(q),s=new Uint32Array(q);for(h=0;q>h;h++)r[h]=1;var t=o,u=1;for(g=0;i>g;++g){var v=j[g][0],w=j[g][1],x=Math.min(Math.max(c[d+g],v),w),y=b(x,v,w,k[g][0],k[g][1]),z=n[g];y=Math.min(Math.max(y,0),z-1);var A=z-1>y?Math.floor(y):y-1,B=A+1-y,C=y-A,D=A*t,E=D+t;for(h=0;q>h;h++)h&u?(r[h]*=C,s[h]+=E):(r[h]*=B,s[h]+=D);t*=z,u<<=1}for(h=0;o>h;++h){var F=0;for(g=0;q>g;g++)F+=m[s[g]+h]*r[g];F=b(F,0,1,l[h][0],l[h][1]),e[f+h]=Math.min(Math.max(F,p[h][0]),p[h][1])}}},constructInterpolated:function(a,b){var e=b.get("C0")||[0],f=b.get("C1")||[1],g=b.get("N");C(e)&&C(f)||c("Illegal dictionary for interpolated function");for(var h=e.length,i=[],j=0;h>j;++j)i.push(f[j]-e[j]);return[d,e,i,g]},constructInterpolatedFromIR:function(a){var b=a[1],c=a[2],d=a[3],e=c.length;return function(a,f,g,h){for(var i=1===d?a[f]:Math.pow(a[f],d),j=0;e>j;++j)g[h+j]=b[j]+i*c[j]}},constructStiched:function(a,b,d){var f=b.get("Domain");f||c("No domain");var g=f.length/2;1!==g&&c("Bad domain for stiched function");for(var h=b.get("Functions"),i=[],j=0,k=h.length;k>j;++j)i.push(Ta.getIR(d,d.fetchIfRef(h[j])));var l=b.get("Bounds"),m=b.get("Encode");return[e,f,l,m,i]},constructStichedFromIR:function(a){for(var b=a[1],c=a[2],d=a[3],e=a[4],f=[],g=new Float32Array(1),h=0,i=e.length;i>h;h++)f.push(Ta.fromIR(e[h]));return function(a,e,h,i){for(var j=function(a,b,c){return a>c?a=c:b>a&&(a=b),a},k=j(a[e],b[0],b[1]),l=0,m=c.length;m>l&&!(k<c[l]);++l);var n=b[0];l>0&&(n=c[l-1]);var o=b[1];l<c.length&&(o=c[l]);var p=d[2*l],q=d[2*l+1];g[0]=n===o?p:p+(k-n)*(q-p)/(o-n),f[l](g,0,h,i)}},constructPostScript:function(a,b,d){var e=b.get("Domain"),g=b.get("Range");e||c("No domain."),g||c("No range.");var h=new Lc(a),i=new Ic(h),j=i.parse();return[f,e,g,j]},constructPostScriptFromIR:function(b){var c=b[1],d=b[2],e=b[3],f=(new Wa).compile(e,c,d);if(f)return new Function("src","srcOffset","dest","destOffset",f);a("Unable to compile PS function");var g=d.length>>1,h=c.length>>1,i=new Va(e),j={},k=8192,l=k,m=new Float32Array(h);return function(a,b,c,e){var f,k,n="",o=m;for(f=0;h>f;f++)k=a[b+f],o[f]=k,n+=k+"_";var p=j[n];if(void 0!==p)return void c.set(p,e);var q=new Float32Array(g),r=i.execute(o),s=r.length-g;for(f=0;g>f;f++){k=r[s+f];var t=d[2*f];t>k?k=t:(t=d[2*f+1],k>t&&(k=t)),q[f]=k}l>0&&(l--,j[n]=q),c.set(q,e)}}}}(),Ua=function(){function a(a){this.stack=a?Array.prototype.slice.call(a,0):[]}var b=100;return a.prototype={push:function(a){this.stack.length>=b&&c("PostScript function stack overflow."),this.stack.push(a)},pop:function(){return this.stack.length<=0&&c("PostScript function stack underflow."),this.stack.pop()},copy:function(a){this.stack.length+a>=b&&c("PostScript function stack overflow.");for(var d=this.stack,e=d.length-a,f=a-1;f>=0;f--,e++)d.push(d[e])},index:function(a){this.push(this.stack[this.stack.length-a-1])},roll:function(a,b){var c,d,e,f=this.stack,g=f.length-a,h=f.length-1,i=g+(b-Math.floor(b/a)*a);for(c=g,d=h;d>c;c++,d--)e=f[c],f[c]=f[d],f[d]=e;for(c=g,d=i-1;d>c;c++,d--)e=f[c],f[c]=f[d],f[d]=e;for(c=i,d=h;d>c;c++,d--)e=f[c],f[c]=f[d],f[d]=e}},a}(),Va=function(){function a(a){this.operators=a}return a.prototype={execute:function(a){for(var b,d,e,f=new Ua(a),g=0,h=this.operators,i=h.length;i>g;)if(b=h[g++],"number"!=typeof b)switch(b){case"jz":e=f.pop(),d=f.pop(),d||(g=e);break;case"j":d=f.pop(),g=d;break;case"abs":d=f.pop(),f.push(Math.abs(d));break;case"add":e=f.pop(),d=f.pop(),f.push(d+e);break;case"and":e=f.pop(),d=f.pop(),v(d)&&v(e)?f.push(d&&e):f.push(d&e);break;case"atan":d=f.pop(),f.push(Math.atan(d));break;case"bitshift":e=f.pop(),d=f.pop(),d>0?f.push(d<<e):f.push(d>>e);break;case"ceiling":d=f.pop(),f.push(Math.ceil(d));break;case"copy":d=f.pop(),f.copy(d);break;case"cos":d=f.pop(),f.push(Math.cos(d));break;case"cvi":d=0|f.pop(),f.push(d);break;case"cvr":break;case"div":e=f.pop(),d=f.pop(),f.push(d/e);break;case"dup":f.copy(1);break;case"eq":e=f.pop(),d=f.pop(),f.push(d===e);break;case"exch":f.roll(2,1);break;case"exp":e=f.pop(),d=f.pop(),f.push(Math.pow(d,e));break;case"false":f.push(!1);break;case"floor":d=f.pop(),f.push(Math.floor(d));break;case"ge":e=f.pop(),d=f.pop(),f.push(d>=e);break;case"gt":e=f.pop(),d=f.pop(),f.push(d>e);break;case"idiv":e=f.pop(),d=f.pop(),f.push(d/e|0);break;case"index":d=f.pop(),f.index(d);break;case"le":e=f.pop(),d=f.pop(),f.push(e>=d);break;case"ln":d=f.pop(),f.push(Math.log(d));break;case"log":d=f.pop(),f.push(Math.log(d)/Math.LN10);break;case"lt":e=f.pop(),d=f.pop(),f.push(e>d);break;case"mod":e=f.pop(),d=f.pop(),f.push(d%e);break;case"mul":e=f.pop(),d=f.pop(),f.push(d*e);break;case"ne":e=f.pop(),d=f.pop(),f.push(d!==e);break;case"neg":d=f.pop(),f.push(-d);break;case"not":d=f.pop(),v(d)?f.push(!d):f.push(~d);break;case"or":e=f.pop(),d=f.pop(),v(d)&&v(e)?f.push(d||e):f.push(d|e);break;case"pop":f.pop();break;case"roll":e=f.pop(),d=f.pop(),f.roll(d,e);break;case"round":d=f.pop(),f.push(Math.round(d));break;case"sin":d=f.pop(),f.push(Math.sin(d));break;case"sqrt":d=f.pop(),f.push(Math.sqrt(d));break;case"sub":e=f.pop(),d=f.pop(),f.push(d-e);break;case"true":f.push(!0);break;case"truncate":d=f.pop(),d=0>d?Math.ceil(d):Math.floor(d),f.push(d);break;case"xor":e=f.pop(),d=f.pop(),v(d)&&v(e)?f.push(d!==e):f.push(d^e);break;default:c("Unknown operator "+b)}else f.push(b);return f.stack}},a}(),Wa=function(){function a(a){this.type=a}function b(b,c,d){a.call(this,"args"),this.index=b,this.min=c,this.max=d}function c(b){a.call(this,"literal"),this.number=b,this.min=b,this.max=b}function d(b,c,d,e,f){a.call(this,"binary"),this.op=b,this.arg1=c,this.arg2=d,this.min=e,this.max=f}function e(b,c){a.call(this,"max"),this.arg=b,this.min=b.min,this.max=c}function f(b,c,d){a.call(this,"var"),this.index=b,this.min=c,this.max=d}function g(b,c){a.call(this,"definition"),this.variable=b,this.arg=c}function h(){this.parts=[]}function i(a,b){return"literal"===b.type&&0===b.number?a:"literal"===a.type&&0===a.number?b:"literal"===b.type&&"literal"===a.type?new c(a.number+b.number):new d("+",a,b,a.min+b.min,a.max+b.max)}function j(a,b){if("literal"===b.type){if(0===b.number)return new c(0);if(1===b.number)return a;if("literal"===a.type)return new c(a.number*b.number)}if("literal"===a.type){if(0===a.number)return new c(0);if(1===a.number)return b}var e=Math.min(a.min*b.min,a.min*b.max,a.max*b.min,a.max*b.max),f=Math.max(a.min*b.min,a.min*b.max,a.max*b.min,a.max*b.max);return new d("*",a,b,e,f)}function k(a,b){if("literal"===b.type){if(0===b.number)return a;if("literal"===a.type)return new c(a.number-b.number)}return"binary"===b.type&&"-"===b.op&&"literal"===a.type&&1===a.number&&"literal"===b.arg1.type&&1===b.arg1.number?b.arg2:new d("-",a,b,a.min-b.max,a.max-b.min)}function l(a,b){return a.min>=b?new c(b):a.max<=b?a:new e(a,b)}function m(){}return a.prototype.visit=function(a){throw new Error("abstract method")},b.prototype=Object.create(a.prototype),b.prototype.visit=function(a){a.visitArgument(this)},c.prototype=Object.create(a.prototype),c.prototype.visit=function(a){a.visitLiteral(this)},d.prototype=Object.create(a.prototype),d.prototype.visit=function(a){a.visitBinaryOperation(this);
+},e.prototype=Object.create(a.prototype),e.prototype.visit=function(a){a.visitMin(this)},f.prototype=Object.create(a.prototype),f.prototype.visit=function(a){a.visitVariable(this)},g.prototype=Object.create(a.prototype),g.prototype.visit=function(a){a.visitVariableDefinition(this)},h.prototype={visitArgument:function(a){this.parts.push("Math.max(",a.min,", Math.min(",a.max,", src[srcOffset + ",a.index,"]))")},visitVariable:function(a){this.parts.push("v",a.index)},visitLiteral:function(a){this.parts.push(a.number)},visitBinaryOperation:function(a){this.parts.push("("),a.arg1.visit(this),this.parts.push(" ",a.op," "),a.arg2.visit(this),this.parts.push(")")},visitVariableDefinition:function(a){this.parts.push("var "),a.variable.visit(this),this.parts.push(" = "),a.arg.visit(this),this.parts.push(";")},visitMin:function(a){this.parts.push("Math.min("),a.arg.visit(this),this.parts.push(", ",a.max,")")},toString:function(){return this.parts.join("")}},m.prototype={compile:function(a,d,e){var m,n,o,p,q,r,s,t,u,v,w=[],x=[],y=d.length>>1,z=e.length>>1,A=0;for(m=0;y>m;m++)w.push(new b(m,d[2*m],d[2*m+1]));for(m=0,n=a.length;n>m;m++)if(v=a[m],"number"!=typeof v)switch(v){case"add":if(w.length<2)return null;r=w.pop(),q=w.pop(),w.push(i(q,r));break;case"cvr":if(w.length<1)return null;break;case"mul":if(w.length<2)return null;r=w.pop(),q=w.pop(),w.push(j(q,r));break;case"sub":if(w.length<2)return null;r=w.pop(),q=w.pop(),w.push(k(q,r));break;case"exch":if(w.length<2)return null;s=w.pop(),t=w.pop(),w.push(s,t);break;case"pop":if(w.length<1)return null;w.pop();break;case"index":if(w.length<1)return null;if(q=w.pop(),"literal"!==q.type)return null;if(o=q.number,0>o||(0|o)!==o||w.length<o)return null;if(s=w[w.length-o-1],"literal"===s.type||"var"===s.type){w.push(s);break}u=new f(A++,s.min,s.max),w[w.length-o-1]=u,w.push(u),x.push(new g(u,s));break;case"dup":if(w.length<1)return null;if("number"==typeof a[m+1]&&"gt"===a[m+2]&&a[m+3]===m+7&&"jz"===a[m+4]&&"pop"===a[m+5]&&a[m+6]===a[m+1]){q=w.pop(),w.push(l(q,a[m+1])),m+=6;break}if(s=w[w.length-1],"literal"===s.type||"var"===s.type){w.push(s);break}u=new f(A++,s.min,s.max),w[w.length-1]=u,w.push(u),x.push(new g(u,s));break;case"roll":if(w.length<2)return null;if(r=w.pop(),q=w.pop(),"literal"!==r.type||"literal"!==q.type)return null;if(p=r.number,o=q.number,0>=o||(0|o)!==o||(0|p)!==p||w.length<o)return null;if(p=(p%o+o)%o,0===p)break;Array.prototype.push.apply(w,w.splice(w.length-o,o-p));break;default:return null}else w.push(new c(v));if(w.length!==z)return null;var B=[];return x.forEach(function(a){var b=new h;a.visit(b),B.push(b.toString())}),w.forEach(function(a,b){var c=new h;a.visit(c);var d=e[2*b],f=e[2*b+1],g=[c.toString()];d>a.min&&(g.unshift("Math.max(",d,", "),g.push(")")),f<a.max&&(g.unshift("Math.min(",f,", "),g.push(")")),g.unshift("dest[destOffset + ",b,"] = "),g.push(";"),B.push(g.join(""))}),B.join("\n")}},m}(),Xa=function(){function a(){c("should not call ColorSpace constructor")}return a.prototype={getRgb:function(a,b){var c=new Uint8Array(3);return this.getRgbItem(a,b,c,0),c},getRgbItem:function(a,b,d,e){c("Should not call ColorSpace.getRgbItem")},getRgbBuffer:function(a,b,d,e,f,g,h){c("Should not call ColorSpace.getRgbBuffer")},getOutputLength:function(a,b){c("Should not call ColorSpace.getOutputLength")},isPassthrough:function(a){return!1},fillRgb:function(a,b,c,d,e,f,g,h,i){var j,k,l=b*c,m=null,n=1<<g,o=c!==e||b!==d;if(this.isPassthrough(g))m=h;else if(1===this.numComps&&l>n&&"DeviceGray"!==this.name&&"DeviceRGB"!==this.name){var p,q=8>=g?new Uint8Array(n):new Uint16Array(n);for(j=0;n>j;j++)q[j]=j;var r=new Uint8Array(3*n);this.getRgbBuffer(q,0,n,r,0,g,0);var s,t;if(o)for(m=new Uint8Array(3*l),t=0,j=0;l>j;++j)p=3*h[j],m[t++]=r[p],m[t++]=r[p+1],m[t++]=r[p+2];else for(s=0,j=0;l>j;++j)p=3*h[j],a[s++]=r[p],a[s++]=r[p+1],a[s++]=r[p+2],s+=i}else o?(m=new Uint8Array(3*l),this.getRgbBuffer(h,0,l,m,0,g,0)):this.getRgbBuffer(h,0,d*f,a,0,g,i);if(m)if(o)Bc.resize(m,g,3,b,c,d,e,a,i);else for(t=0,s=0,j=0,k=d*f;k>j;j++)a[s++]=m[t++],a[s++]=m[t++],a[s++]=m[t++],s+=i},usesZeroToOneRange:!0},a.parse=function(b,c,d){var e=a.parseToIR(b,c,d);return e instanceof Ya?e:a.fromIR(e)},a.fromIR=function(b){var d,e,f,g=C(b)?b[0]:b;switch(g){case"DeviceGrayCS":return this.singletons.gray;case"DeviceRgbCS":return this.singletons.rgb;case"DeviceCmykCS":return this.singletons.cmyk;case"CalGrayCS":return d=b[1].WhitePoint,e=b[1].BlackPoint,f=b[1].Gamma,new cb(d,e,f);case"CalRGBCS":d=b[1].WhitePoint,e=b[1].BlackPoint,f=b[1].Gamma;var h=b[1].Matrix;return new db(d,e,f,h);case"PatternCS":var i=b[1];return i&&(i=a.fromIR(i)),new Za(i);case"IndexedCS":var j=b[1],k=b[2],l=b[3];return new $a(a.fromIR(j),k,l);case"AlternateCS":var m=b[1],n=b[2],o=b[3];return new Ya(m,a.fromIR(n),Ta.fromIR(o));case"LabCS":d=b[1].WhitePoint,e=b[1].BlackPoint;var p=b[1].Range;return new eb(d,e,p);default:c("Unknown name "+g)}return null},a.parseToIR=function(d,e,f){if(z(d)){var g=f.get("ColorSpace");if(B(g)){var h=g.get(d.name);h&&(d=h)}}d=e.fetchIfRef(d);var i;if(z(d))switch(i=d.name,this.mode=i,i){case"DeviceGray":case"G":return"DeviceGrayCS";case"DeviceRGB":case"RGB":return"DeviceRgbCS";case"DeviceCMYK":case"CMYK":return"DeviceCmykCS";case"Pattern":return["PatternCS",null];default:c("unrecognized colorspace "+i)}else if(C(d)){i=e.fetchIfRef(d[0]).name,this.mode=i;var j,k,l;switch(i){case"DeviceGray":case"G":return"DeviceGrayCS";case"DeviceRGB":case"RGB":return"DeviceRgbCS";case"DeviceCMYK":case"CMYK":return"DeviceCmykCS";case"CalGray":return k=e.fetchIfRef(d[1]).getAll(),["CalGrayCS",k];case"CalRGB":return k=e.fetchIfRef(d[1]).getAll(),["CalRGBCS",k];case"ICCBased":var m=e.fetchIfRef(d[1]),n=m.dict;if(j=n.get("N"),l=n.get("Alternate")){var o=a.parseToIR(l,e,f),p=a.fromIR(o);if(p.numComps===j)return o;b("ICCBased color space: Ignoring incorrect /Alternate entry.")}if(1===j)return"DeviceGrayCS";if(3===j)return"DeviceRgbCS";if(4===j)return"DeviceCmykCS";break;case"Pattern":var q=d[1]||null;return q&&(q=a.parseToIR(q,e,f)),["PatternCS",q];case"Indexed":case"I":var r=a.parseToIR(d[1],e,f),s=e.fetchIfRef(d[2])+1,t=e.fetchIfRef(d[3]);return D(t)&&(t=t.getBytes()),["IndexedCS",r,s,t];case"Separation":case"DeviceN":var u=e.fetchIfRef(d[1]);j=1,z(u)?j=1:C(u)&&(j=u.length),l=a.parseToIR(d[2],e,f);var v=Ta.getIR(e,e.fetchIfRef(d[3]));return["AlternateCS",j,l,v];case"Lab":return k=e.fetchIfRef(d[1]).getAll(),["LabCS",k];default:c('unimplemented color space object "'+i+'"')}}else c('unrecognized color space object: "'+d+'"');return null},a.isDefaultDecode=function(a,c){if(!C(a))return!0;if(2*c!==a.length)return b("The decode map is not the correct length"),!0;for(var d=0,e=a.length;e>d;d+=2)if(0!==a[d]||1!==a[d+1])return!1;return!0},a.singletons={get gray(){return g(this,"gray",new _a)},get rgb(){return g(this,"rgb",new ab)},get cmyk(){return g(this,"cmyk",new bb)}},a}(),Ya=function(){function a(a,b,c){this.name="Alternate",this.numComps=a,this.defaultColor=new Float32Array(a);for(var d=0;a>d;++d)this.defaultColor[d]=1;this.base=b,this.tintFn=c,this.tmpBuf=new Float32Array(b.numComps)}return a.prototype={getRgb:Xa.prototype.getRgb,getRgbItem:function(a,b,c,d){var e=this.tmpBuf;this.tintFn(a,b,e,0),this.base.getRgbItem(e,0,c,d)},getRgbBuffer:function(a,b,c,d,e,f,g){var h,i,j=this.tintFn,k=this.base,l=1/((1<<f)-1),m=k.numComps,n=k.usesZeroToOneRange,o=(k.isPassthrough(8)||!n)&&0===g,p=o?e:0,q=o?d:new Uint8Array(m*c),r=this.numComps,s=new Float32Array(r),t=new Float32Array(m);if(n)for(h=0;c>h;h++){for(i=0;r>i;i++)s[i]=a[b++]*l;for(j(s,0,t,0),i=0;m>i;i++)q[p++]=255*t[i]}else for(h=0;c>h;h++){for(i=0;r>i;i++)s[i]=a[b++]*l;j(s,0,t,0),k.getRgbItem(t,0,q,p),p+=m}o||k.getRgbBuffer(q,0,c,d,e,8,g)},getOutputLength:function(a,b){return this.base.getOutputLength(a*this.base.numComps/this.numComps,b)},isPassthrough:Xa.prototype.isPassthrough,fillRgb:Xa.prototype.fillRgb,isDefaultDecode:function(a){return Xa.isDefaultDecode(a,this.numComps)},usesZeroToOneRange:!0},a}(),Za=function(){function a(a){this.name="Pattern",this.base=a}return a.prototype={},a}(),$a=function(){function a(a,b,d){this.name="Indexed",this.numComps=1,this.defaultColor=new Uint8Array([0]),this.base=a,this.highVal=b;var e,f=a.numComps,g=f*b;if(D(d)){e=new Uint8Array(g);var h=d.getBytes(g);e.set(h)}else if(y(d)){e=new Uint8Array(g);for(var i=0;g>i;++i)e[i]=d.charCodeAt(i)}else d instanceof Uint8Array||d instanceof Array?e=d:c("Unrecognized lookup table: "+d);this.lookup=e}return a.prototype={getRgb:Xa.prototype.getRgb,getRgbItem:function(a,b,c,d){var e=this.base.numComps,f=a[b]*e;this.base.getRgbItem(this.lookup,f,c,d)},getRgbBuffer:function(a,b,c,d,e,f,g){for(var h=this.base,i=h.numComps,j=h.getOutputLength(i,g),k=this.lookup,l=0;c>l;++l){var m=a[b++]*i;h.getRgbBuffer(k,m,1,d,e,8,g),e+=j}},getOutputLength:function(a,b){return this.base.getOutputLength(a*this.base.numComps,b)},isPassthrough:Xa.prototype.isPassthrough,fillRgb:Xa.prototype.fillRgb,isDefaultDecode:function(a){return!0},usesZeroToOneRange:!0},a}(),_a=function(){function a(){this.name="DeviceGray",this.numComps=1,this.defaultColor=new Float32Array([0])}return a.prototype={getRgb:Xa.prototype.getRgb,getRgbItem:function(a,b,c,d){var e=255*a[b]|0;e=0>e?0:e>255?255:e,c[d]=c[d+1]=c[d+2]=e},getRgbBuffer:function(a,b,c,d,e,f,g){for(var h=255/((1<<f)-1),i=b,j=e,k=0;c>k;++k){var l=h*a[i++]|0;d[j++]=l,d[j++]=l,d[j++]=l,j+=g}},getOutputLength:function(a,b){return a*(3+b)},isPassthrough:Xa.prototype.isPassthrough,fillRgb:Xa.prototype.fillRgb,isDefaultDecode:function(a){return Xa.isDefaultDecode(a,this.numComps)},usesZeroToOneRange:!0},a}(),ab=function(){function a(){this.name="DeviceRGB",this.numComps=3,this.defaultColor=new Float32Array([0,0,0])}return a.prototype={getRgb:Xa.prototype.getRgb,getRgbItem:function(a,b,c,d){var e=255*a[b]|0,f=255*a[b+1]|0,g=255*a[b+2]|0;c[d]=0>e?0:e>255?255:e,c[d+1]=0>f?0:f>255?255:f,c[d+2]=0>g?0:g>255?255:g},getRgbBuffer:function(a,b,c,d,e,f,g){if(8===f&&0===g)return void d.set(a.subarray(b,b+3*c),e);for(var h=255/((1<<f)-1),i=b,j=e,k=0;c>k;++k)d[j++]=h*a[i++]|0,d[j++]=h*a[i++]|0,d[j++]=h*a[i++]|0,j+=g},getOutputLength:function(a,b){return a*(3+b)/3|0},isPassthrough:function(a){return 8===a},fillRgb:Xa.prototype.fillRgb,isDefaultDecode:function(a){return Xa.isDefaultDecode(a,this.numComps)},usesZeroToOneRange:!0},a}(),bb=function(){function a(a,b,c,d,e){var f=a[b+0]*c,g=a[b+1]*c,h=a[b+2]*c,i=a[b+3]*c,j=f*(-4.387332384609988*f+54.48615194189176*g+18.82290502165302*h+212.25662451639585*i+-285.2331026137004)+g*(1.7149763477362134*g-5.6096736904047315*h+-17.873870861415444*i-5.497006427196366)+h*(-2.5217340131683033*h-21.248923337353073*i+17.5119270841813)+i*(-21.86122147463605*i-189.48180835922747)+255|0,k=f*(8.841041422036149*f+60.118027045597366*g+6.871425592049007*h+31.159100130055922*i+-79.2970844816548)+g*(-15.310361306967817*g+17.575251261109482*h+131.35250912493976*i-190.9453302588951)+h*(4.444339102852739*h+9.8632861493405*i-24.86741582555878)+i*(-20.737325471181034*i-187.80453709719578)+255|0,l=f*(.8842522430003296*f+8.078677503112928*g+30.89978309703729*h-.23883238689178934*i+-14.183576799673286)+g*(10.49593273432072*g+63.02378494754052*h+50.606957656360734*i-112.23884253719248)+h*(.03296041114873217*h+115.60384449646641*i+-193.58209356861505)+i*(-22.33816807309886*i-180.12613974708367)+255|0;d[e]=j>255?255:0>j?0:j,d[e+1]=k>255?255:0>k?0:k,d[e+2]=l>255?255:0>l?0:l}function b(){this.name="DeviceCMYK",this.numComps=4,this.defaultColor=new Float32Array([0,0,0,1])}return b.prototype={getRgb:Xa.prototype.getRgb,getRgbItem:function(b,c,d,e){a(b,c,1,d,e)},getRgbBuffer:function(b,c,d,e,f,g,h){for(var i=1/((1<<g)-1),j=0;d>j;j++)a(b,c,i,e,f),c+=4,f+=3+h},getOutputLength:function(a,b){return a/4*(3+b)|0},isPassthrough:Xa.prototype.isPassthrough,fillRgb:Xa.prototype.fillRgb,isDefaultDecode:function(a){return Xa.isDefaultDecode(a,this.numComps)},usesZeroToOneRange:!0},b}(),cb=function(){function d(d,e,f){this.name="CalGray",this.numComps=1,this.defaultColor=new Float32Array([0]),d||c("WhitePoint missing - required for color space CalGray"),e=e||[0,0,0],f=f||1,this.XW=d[0],this.YW=d[1],this.ZW=d[2],this.XB=e[0],this.YB=e[1],this.ZB=e[2],this.G=f,(this.XW<0||this.ZW<0||1!==this.YW)&&c("Invalid WhitePoint components for "+this.name+", no fallback available"),(this.XB<0||this.YB<0||this.ZB<0)&&(a("Invalid BlackPoint for "+this.name+", falling back to default"),this.XB=this.YB=this.ZB=0),(0!==this.XB||0!==this.YB||0!==this.ZB)&&b(this.name+", BlackPoint: XB: "+this.XB+", YB: "+this.YB+", ZB: "+this.ZB+", only default values are supported."),this.G<1&&(a("Invalid Gamma: "+this.G+" for "+this.name+", falling back to default"),this.G=1)}function e(a,b,c,d,e,f){var g=b[c]*f,h=Math.pow(g,a.G),i=a.YW*h,j=0|Math.max(295.8*Math.pow(i,.3333333333333333)-40.8,0);d[e]=j,d[e+1]=j,d[e+2]=j}return d.prototype={getRgb:Xa.prototype.getRgb,getRgbItem:function(a,b,c,d){e(this,a,b,c,d,1)},getRgbBuffer:function(a,b,c,d,f,g,h){for(var i=1/((1<<g)-1),j=0;c>j;++j)e(this,a,b,d,f,i),b+=1,f+=3+h},getOutputLength:function(a,b){return a*(3+b)},isPassthrough:Xa.prototype.isPassthrough,fillRgb:Xa.prototype.fillRgb,isDefaultDecode:function(a){return Xa.isDefaultDecode(a,this.numComps)},usesZeroToOneRange:!0},d}(),db=function(){function b(b,d,e,f){this.name="CalRGB",this.numComps=3,this.defaultColor=new Float32Array(3),b||c("WhitePoint missing - required for color space CalRGB"),d=d||new Float32Array(3),e=e||new Float32Array([1,1,1]),f=f||new Float32Array([1,0,0,0,1,0,0,0,1]);var g=b[0],h=b[1],i=b[2];this.whitePoint=b;var j=d[0],k=d[1],l=d[2];this.blackPoint=d,this.GR=e[0],this.GG=e[1],this.GB=e[2],this.MXA=f[0],this.MYA=f[1],this.MZA=f[2],this.MXB=f[3],this.MYB=f[4],this.MZB=f[5],this.MXC=f[6],this.MYC=f[7],this.MZC=f[8],(0>g||0>i||1!==h)&&c("Invalid WhitePoint components for "+this.name+", no fallback available"),(0>j||0>k||0>l)&&(a("Invalid BlackPoint for "+this.name+" ["+j+", "+k+", "+l+"], falling back to default"),this.blackPoint=new Float32Array(3)),(this.GR<0||this.GG<0||this.GB<0)&&(a("Invalid Gamma ["+this.GR+", "+this.GG+", "+this.GB+"] for "+this.name+", falling back to default"),this.GR=this.GG=this.GB=1),(this.MXA<0||this.MYA<0||this.MZA<0||this.MXB<0||this.MYB<0||this.MZB<0||this.MXC<0||this.MYC<0||this.MZC<0)&&(a("Invalid Matrix for "+this.name+" ["+this.MXA+", "+this.MYA+", "+this.MZA+this.MXB+", "+this.MYB+", "+this.MZB+this.MXC+", "+this.MYC+", "+this.MZC+"], falling back to default"),this.MXA=this.MYB=this.MZC=1,this.MXB=this.MYA=this.MZA=this.MXC=this.MYC=this.MZB=0)}function d(a,b,c){c[0]=a[0]*b[0]+a[1]*b[1]+a[2]*b[2],c[1]=a[3]*b[0]+a[4]*b[1]+a[5]*b[2],c[2]=a[6]*b[0]+a[7]*b[1]+a[8]*b[2]}function e(a,b,c){c[0]=1*b[0]/a[0],c[1]=1*b[1]/a[1],c[2]=1*b[2]/a[2]}function f(a,b,c){var d=.95047,e=1,f=1.08883;c[0]=b[0]*d/a[0],c[1]=b[1]*e/a[1],c[2]=b[2]*f/a[2]}function g(a){return.0031308>=a?h(0,1,12.92*a):h(0,1,1.055*Math.pow(a,1/2.4)-.055)}function h(a,b,c){return Math.max(a,Math.min(b,c))}function i(a){return 0>a?-i(-a):a>8?Math.pow((a+16)/116,3):a*u}function j(a,b,c){if(0===a[0]&&0===a[1]&&0===a[2])return c[0]=b[0],c[1]=b[1],void(c[2]=b[2]);var d=i(0),e=d,f=i(a[0]),g=d,h=i(a[1]),j=d,k=i(a[2]),l=(1-e)/(1-f),m=1-l,n=(1-g)/(1-h),o=1-n,p=(1-j)/(1-k),q=1-p;c[0]=b[0]*l+m,c[1]=b[1]*n+o,c[2]=b[2]*p+q}function k(a,b,c){if(1===a[0]&&1===a[2])return c[0]=b[0],c[1]=b[1],void(c[2]=b[2]);var f=c;d(n,b,f);var g=r;e(a,f,g),d(o,g,c)}function l(a,b,c){var e=c;d(n,b,e);var g=r;f(a,e,g),d(o,g,c)}function m(a,b,c,e,f,i){var m=h(0,1,b[c]*i),n=h(0,1,b[c+1]*i),o=h(0,1,b[c+2]*i),r=Math.pow(m,a.GR),u=Math.pow(n,a.GG),v=Math.pow(o,a.GB),w=a.MXA*r+a.MXB*u+a.MXC*v,x=a.MYA*r+a.MYB*u+a.MYC*v,y=a.MZA*r+a.MZB*u+a.MZC*v,z=s;z[0]=w,z[1]=x,z[2]=y;var A=t;k(a.whitePoint,z,A);var B=s;j(a.blackPoint,A,B);var C=t;l(q,B,C);var D=s;d(p,C,D);var E=g(D[0]),F=g(D[1]),G=g(D[2]);e[f]=Math.round(255*E),e[f+1]=Math.round(255*F),e[f+2]=Math.round(255*G)}var n=new Float32Array([.8951,.2664,-.1614,-.7502,1.7135,.0367,.0389,-.0685,1.0296]),o=new Float32Array([.9869929,-.1470543,.1599627,.4323053,.5183603,.0492912,-.0085287,.0400428,.9684867]),p=new Float32Array([3.2404542,-1.5371385,-.4985314,-.969266,1.8760108,.041556,.0556434,-.2040259,1.0572252]),q=new Float32Array([1,1,1]),r=new Float32Array(3),s=new Float32Array(3),t=new Float32Array(3),u=Math.pow(24/116,3)/8;return b.prototype={getRgb:function(a,b){var c=new Uint8Array(3);return this.getRgbItem(a,b,c,0),c},getRgbItem:function(a,b,c,d){m(this,a,b,c,d,1)},getRgbBuffer:function(a,b,c,d,e,f,g){for(var h=1/((1<<f)-1),i=0;c>i;++i)m(this,a,b,d,e,h),b+=3,e+=3+g},getOutputLength:function(a,b){return a*(3+b)/3|0},isPassthrough:Xa.prototype.isPassthrough,fillRgb:Xa.prototype.fillRgb,isDefaultDecode:function(a){return Xa.isDefaultDecode(a,this.numComps)},usesZeroToOneRange:!0},b}(),eb=function(){function b(b,d,e){this.name="Lab",this.numComps=3,this.defaultColor=new Float32Array([0,0,0]),b||c("WhitePoint missing - required for color space Lab"),d=d||[0,0,0],e=e||[-100,100,-100,100],this.XW=b[0],this.YW=b[1],this.ZW=b[2],this.amin=e[0],this.amax=e[1],this.bmin=e[2],this.bmax=e[3],this.XB=d[0],this.YB=d[1],this.ZB=d[2],(this.XW<0||this.ZW<0||1!==this.YW)&&c("Invalid WhitePoint components, no fallback available"),(this.XB<0||this.YB<0||this.ZB<0)&&(a("Invalid BlackPoint, falling back to default"),this.XB=this.YB=this.ZB=0),(this.amin>this.amax||this.bmin>this.bmax)&&(a("Invalid Range, falling back to defaults"),this.amin=-100,this.amax=100,this.bmin=-100,this.bmax=100)}function d(a){return a>=6/29?a*a*a:108/841*(a-4/29)}function e(a,b,c,d){return c+a*(d-c)/b}function f(a,b,c,f,g,h){var i=b[c],j=b[c+1],k=b[c+2];f!==!1&&(i=e(i,f,0,100),j=e(j,f,a.amin,a.amax),k=e(k,f,a.bmin,a.bmax)),j=j>a.amax?a.amax:j<a.amin?a.amin:j,k=k>a.bmax?a.bmax:k<a.bmin?a.bmin:k;var l,m,n,o=(i+16)/116,p=o+j/500,q=o-k/200,r=a.XW*d(p),s=a.YW*d(o),t=a.ZW*d(q);a.ZW<1?(l=3.1339*r+-1.617*s+t*-.4906,m=r*-.9785+1.916*s+.0333*t,n=.072*r+s*-.229+1.4057*t):(l=3.2406*r+-1.5372*s+t*-.4986,m=r*-.9689+1.8758*s+.0415*t,n=.0557*r+s*-.204+1.057*t),g[h]=0>=l?0:l>=1?255:255*Math.sqrt(l)|0,g[h+1]=0>=m?0:m>=1?255:255*Math.sqrt(m)|0,g[h+2]=0>=n?0:n>=1?255:255*Math.sqrt(n)|0}return b.prototype={getRgb:Xa.prototype.getRgb,getRgbItem:function(a,b,c,d){f(this,a,b,!1,c,d)},getRgbBuffer:function(a,b,c,d,e,g,h){for(var i=(1<<g)-1,j=0;c>j;j++)f(this,a,b,i,d,e),b+=3,e+=3+h},getOutputLength:function(a,b){return a*(3+b)/3|0},isPassthrough:Xa.prototype.isPassthrough,fillRgb:Xa.prototype.fillRgb,isDefaultDecode:function(a){return!0},usesZeroToOneRange:!1},b}(),fb=function(){function a(a){this.a=0,this.b=0;var b,c,d=new Uint8Array(256),e=0,f=a.length;for(b=0;256>b;++b)d[b]=b;for(b=0;256>b;++b)c=d[b],e=e+c+a[b%f]&255,d[b]=d[e],d[e]=c;this.s=d}return a.prototype={encryptBlock:function(a){var b,c,d,e=a.length,f=this.a,g=this.b,h=this.s,i=new Uint8Array(e);for(b=0;e>b;++b)f=f+1&255,c=h[f],g=g+c&255,d=h[g],h[f]=d,h[g]=c,i[b]=a[b]^h[c+d&255];return this.a=f,this.b=g,i}},a.prototype.decryptBlock=a.prototype.encryptBlock,a}(),gb=function(){function a(a,d,e){var f,g,h,i=1732584193,j=-271733879,k=-1732584194,l=271733878,m=e+72&-64,n=new Uint8Array(m);for(f=0;e>f;++f)n[f]=a[d++];for(n[f++]=128,h=m-8;h>f;)n[f++]=0;n[f++]=e<<3&255,n[f++]=e>>5&255,n[f++]=e>>13&255,n[f++]=e>>21&255,n[f++]=e>>>29&255,n[f++]=0,n[f++]=0,n[f++]=0;var o=new Int32Array(16);for(f=0;m>f;){for(g=0;16>g;++g,f+=4)o[g]=n[f]|n[f+1]<<8|n[f+2]<<16|n[f+3]<<24;var p,q,r=i,s=j,t=k,u=l;for(g=0;64>g;++g){16>g?(p=s&t|~s&u,q=g):32>g?(p=u&s|~u&t,q=5*g+1&15):48>g?(p=s^t^u,q=3*g+5&15):(p=t^(s|~u),q=7*g&15);var v=u,w=r+p+c[g]+o[q]|0,x=b[g];u=t,t=s,s=s+(w<<x|w>>>32-x)|0,r=v}i=i+r|0,j=j+s|0,k=k+t|0,l=l+u|0}return new Uint8Array([255&i,i>>8&255,i>>16&255,i>>>24&255,255&j,j>>8&255,j>>16&255,j>>>24&255,255&k,k>>8&255,k>>16&255,k>>>24&255,255&l,l>>8&255,l>>16&255,l>>>24&255])}var b=new Uint8Array([7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21]),c=new Int32Array([-680876936,-389564586,606105819,-1044525330,-176418897,1200080426,-1473231341,-45705983,1770035416,-1958414417,-42063,-1990404162,1804603682,-40341101,-1502002290,1236535329,-165796510,-1069501632,643717713,-373897302,-701558691,38016083,-660478335,-405537848,568446438,-1019803690,-187363961,1163531501,-1444681467,-51403784,1735328473,-1926607734,-378558,-2022574463,1839030562,-35309556,-1530992060,1272893353,-155497632,-1094730640,681279174,-358537222,-722521979,76029189,-640364487,-421815835,530742520,-995338651,-198630844,1126891415,-1416354905,-57434055,1700485571,-1894986606,-1051523,-2054922799,1873313359,-30611744,-1560198380,1309151649,-145523070,-1120210379,718787259,-343485551]);return a}(),hb=function(){function a(a,b){this.high=0|a,this.low=0|b}return a.prototype={and:function(a){this.high&=a.high,this.low&=a.low},xor:function(a){this.high^=a.high,this.low^=a.low},or:function(a){this.high|=a.high,this.low|=a.low},shiftRight:function(a){a>=32?(this.low=this.high>>>a-32|0,this.high=0):(this.low=this.low>>>a|this.high<<32-a,this.high=this.high>>>a|0)},shiftLeft:function(a){a>=32?(this.high=this.low<<a-32,this.low=0):(this.high=this.high<<a|this.low>>>32-a,this.low=this.low<<a)},rotateRight:function(a){var b,c;32&a?(c=this.low,b=this.high):(b=this.low,c=this.high),a&=31,this.low=b>>>a|c<<32-a,this.high=c>>>a|b<<32-a},not:function(){this.high=~this.high,this.low=~this.low},add:function(a){var b=(this.low>>>0)+(a.low>>>0),c=(this.high>>>0)+(a.high>>>0);b>4294967295&&(c+=1),this.low=0|b,this.high=0|c},copyTo:function(a,b){a[b]=this.high>>>24&255,a[b+1]=this.high>>16&255,a[b+2]=this.high>>8&255,a[b+3]=255&this.high,a[b+4]=this.low>>>24&255,a[b+5]=this.low>>16&255,a[b+6]=this.low>>8&255,a[b+7]=255&this.low},assign:function(a){this.high=a.high,this.low=a.low}},a}(),ib=function(){function a(a,b){return a>>>b|a<<32-b}function b(a,b,c){return a&b^~a&c}function c(a,b,c){return a&b^a&c^b&c}function d(b){return a(b,2)^a(b,13)^a(b,22)}function e(b){return a(b,6)^a(b,11)^a(b,25)}function f(b){return a(b,7)^a(b,18)^b>>>3}function g(b){return a(b,17)^a(b,19)^b>>>10}function h(a,h,j){var k,l,m,n=1779033703,o=3144134277,p=1013904242,q=2773480762,r=1359893119,s=2600822924,t=528734635,u=1541459225,v=64*Math.ceil((j+9)/64),w=new Uint8Array(v);for(k=0;j>k;++k)w[k]=a[h++];for(w[k++]=128,m=v-8;m>k;)w[k++]=0;w[k++]=0,w[k++]=0,w[k++]=0,w[k++]=j>>>29&255,w[k++]=j>>21&255,w[k++]=j>>13&255,w[k++]=j>>5&255,w[k++]=j<<3&255;var x=new Uint32Array(64);for(k=0;v>k;){for(l=0;16>l;++l)x[l]=w[k]<<24|w[k+1]<<16|w[k+2]<<8|w[k+3],k+=4;for(l=16;64>l;++l)x[l]=g(x[l-2])+x[l-7]+f(x[l-15])+x[l-16]|0;var y,z,A=n,B=o,C=p,D=q,E=r,F=s,G=t,H=u;for(l=0;64>l;++l)y=H+e(E)+b(E,F,G)+i[l]+x[l],z=d(A)+c(A,B,C),H=G,G=F,F=E,E=D+y|0,D=C,C=B,B=A,A=y+z|0;n=n+A|0,o=o+B|0,p=p+C|0,q=q+D|0,r=r+E|0,s=s+F|0,t=t+G|0,u=u+H|0}return new Uint8Array([n>>24&255,n>>16&255,n>>8&255,255&n,o>>24&255,o>>16&255,o>>8&255,255&o,p>>24&255,p>>16&255,p>>8&255,255&p,q>>24&255,q>>16&255,q>>8&255,255&q,r>>24&255,r>>16&255,r>>8&255,255&r,s>>24&255,s>>16&255,s>>8&255,255&s,t>>24&255,t>>16&255,t>>8&255,255&t,u>>24&255,u>>16&255,u>>8&255,255&u])}var i=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];return h}(),jb=function(){function a(a,b,c,d,e){a.assign(b),a.and(c),e.assign(b),e.not(),e.and(d),a.xor(e)}function b(a,b,c,d,e){a.assign(b),a.and(c),e.assign(b),e.and(d),a.xor(e),e.assign(c),e.and(d),a.xor(e)}function c(a,b,c){a.assign(b),a.rotateRight(28),c.assign(b),c.rotateRight(34),a.xor(c),c.assign(b),c.rotateRight(39),a.xor(c)}function d(a,b,c){a.assign(b),a.rotateRight(14),c.assign(b),c.rotateRight(18),a.xor(c),c.assign(b),c.rotateRight(41),a.xor(c)}function e(a,b,c){a.assign(b),a.rotateRight(1),c.assign(b),c.rotateRight(8),a.xor(c),c.assign(b),c.shiftRight(7),a.xor(c)}function f(a,b,c){a.assign(b),a.rotateRight(19),c.assign(b),c.rotateRight(61),a.xor(c),c.assign(b),c.shiftRight(6),a.xor(c)}function g(g,i,j,k){k=!!k;var l,m,n,o,p,q,r,s;k?(l=new hb(3418070365,3238371032),m=new hb(1654270250,914150663),n=new hb(2438529370,812702999),o=new hb(355462360,4144912697),p=new hb(1731405415,4290775857),q=new hb(2394180231,1750603025),r=new hb(3675008525,1694076839),s=new hb(1203062813,3204075428)):(l=new hb(1779033703,4089235720),m=new hb(3144134277,2227873595),n=new hb(1013904242,4271175723),o=new hb(2773480762,1595750129),p=new hb(1359893119,2917565137),q=new hb(2600822924,725511199),r=new hb(528734635,4215389547),s=new hb(1541459225,327033209));var t,u,v,w=128*Math.ceil((j+17)/128),x=new Uint8Array(w);for(t=0;j>t;++t)x[t]=g[i++];for(x[t++]=128,v=w-16;v>t;)x[t++]=0;x[t++]=0,x[t++]=0,x[t++]=0,x[t++]=0,x[t++]=0,x[t++]=0,x[t++]=0,x[t++]=0,x[t++]=0,x[t++]=0,x[t++]=0,x[t++]=j>>>29&255,x[t++]=j>>21&255,x[t++]=j>>13&255,x[t++]=j>>5&255,x[t++]=j<<3&255;var y=new Array(80);for(t=0;80>t;t++)y[t]=new hb(0,0);var z,A=new hb(0,0),B=new hb(0,0),C=new hb(0,0),D=new hb(0,0),E=new hb(0,0),F=new hb(0,0),G=new hb(0,0),H=new hb(0,0),I=new hb(0,0),J=new hb(0,0),K=new hb(0,0),L=new hb(0,0);for(t=0;w>t;){for(u=0;16>u;++u)y[u].high=x[t]<<24|x[t+1]<<16|x[t+2]<<8|x[t+3],y[u].low=x[t+4]<<24|x[t+5]<<16|x[t+6]<<8|x[t+7],t+=8;for(u=16;80>u;++u)z=y[u],f(z,y[u-2],L),z.add(y[u-7]),e(K,y[u-15],L),z.add(K),z.add(y[u-16]);for(A.assign(l),B.assign(m),C.assign(n),D.assign(o),E.assign(p),F.assign(q),G.assign(r),H.assign(s),u=0;80>u;++u)I.assign(H),d(K,E,L),I.add(K),a(K,E,F,G,L),I.add(K),I.add(h[u]),I.add(y[u]),c(J,A,L),b(K,A,B,C,L),J.add(K),z=H,H=G,G=F,F=E,D.add(I),E=D,D=C,C=B,B=A,z.assign(I),z.add(J),A=z;l.add(A),m.add(B),n.add(C),o.add(D),p.add(E),q.add(F),r.add(G),s.add(H)}var M;return k?(M=new Uint8Array(48),l.copyTo(M,0),m.copyTo(M,8),n.copyTo(M,16),o.copyTo(M,24),p.copyTo(M,32),q.copyTo(M,40)):(M=new Uint8Array(64),l.copyTo(M,0),m.copyTo(M,8),n.copyTo(M,16),o.copyTo(M,24),p.copyTo(M,32),q.copyTo(M,40),r.copyTo(M,48),s.copyTo(M,56)),M}var h=[new hb(1116352408,3609767458),new hb(1899447441,602891725),new hb(3049323471,3964484399),new hb(3921009573,2173295548),new hb(961987163,4081628472),new hb(1508970993,3053834265),new hb(2453635748,2937671579),new hb(2870763221,3664609560),new hb(3624381080,2734883394),new hb(310598401,1164996542),new hb(607225278,1323610764),new hb(1426881987,3590304994),new hb(1925078388,4068182383),new hb(2162078206,991336113),new hb(2614888103,633803317),new hb(3248222580,3479774868),new hb(3835390401,2666613458),new hb(4022224774,944711139),new hb(264347078,2341262773),new hb(604807628,2007800933),new hb(770255983,1495990901),new hb(1249150122,1856431235),new hb(1555081692,3175218132),new hb(1996064986,2198950837),new hb(2554220882,3999719339),new hb(2821834349,766784016),new hb(2952996808,2566594879),new hb(3210313671,3203337956),new hb(3336571891,1034457026),new hb(3584528711,2466948901),new hb(113926993,3758326383),new hb(338241895,168717936),new hb(666307205,1188179964),new hb(773529912,1546045734),new hb(1294757372,1522805485),new hb(1396182291,2643833823),new hb(1695183700,2343527390),new hb(1986661051,1014477480),new hb(2177026350,1206759142),new hb(2456956037,344077627),new hb(2730485921,1290863460),new hb(2820302411,3158454273),new hb(3259730800,3505952657),new hb(3345764771,106217008),new hb(3516065817,3606008344),new hb(3600352804,1432725776),new hb(4094571909,1467031594),new hb(275423344,851169720),new hb(430227734,3100823752),new hb(506948616,1363258195),new hb(659060556,3750685593),new hb(883997877,3785050280),new hb(958139571,3318307427),new hb(1322822218,3812723403),new hb(1537002063,2003034995),new hb(1747873779,3602036899),new hb(1955562222,1575990012),new hb(2024104815,1125592928),new hb(2227730452,2716904306),new hb(2361852424,442776044),new hb(2428436474,593698344),new hb(2756734187,3733110249),new hb(3204031479,2999351573),new hb(3329325298,3815920427),new hb(3391569614,3928383900),new hb(3515267271,566280711),new hb(3940187606,3454069534),new hb(4118630271,4000239992),new hb(116418474,1914138554),new hb(174292421,2731055270),new hb(289380356,3203993006),new hb(460393269,320620315),new hb(685471733,587496836),new hb(852142971,1086792851),new hb(1017036298,365543100),new hb(1126000580,2618297676),new hb(1288033470,3409855158),new hb(1501505948,4234509866),new hb(1607167915,987167468),new hb(1816402316,1246189591)];return g}(),kb=function(){function a(a,b,c){return jb(a,b,c,!0)}return a}(),lb=function(){function a(){}return a.prototype={decryptBlock:function(a){return a}},a}(),mb=function(){function a(a){var b=176,c=new Uint8Array(b);c.set(a);for(var d=16,e=1;b>d;++e){var h=c[d-3],i=c[d-2],j=c[d-1],k=c[d-4];h=g[h],i=g[i],j=g[j],k=g[k],h^=f[e];for(var l=0;4>l;++l)c[d]=h^=c[d-16],d++,c[d]=i^=c[d-16],d++,c[d]=j^=c[d-16],d++,c[d]=k^=c[d-16],d++}return c}function b(a,b){var c=new Uint8Array(16);c.set(a);var d,e,f,g,i,j;for(e=0,f=160;16>e;++e,++f)c[e]^=b[f];for(d=9;d>=1;--d){for(g=c[13],c[13]=c[9],c[9]=c[5],c[5]=c[1],c[1]=g,g=c[14],i=c[10],c[14]=c[6],c[10]=c[2],c[6]=g,c[2]=i,g=c[15],i=c[11],j=c[7],c[15]=c[3],c[11]=g,c[7]=i,c[3]=j,e=0;16>e;++e)c[e]=h[c[e]];for(e=0,f=16*d;16>e;++e,++f)c[e]^=b[f];for(e=0;16>e;e+=4){var l=k[c[e]],m=k[c[e+1]],n=k[c[e+2]],o=k[c[e+3]];g=l^m>>>8^m<<24^n>>>16^n<<16^o>>>24^o<<8,c[e]=g>>>24&255,c[e+1]=g>>16&255,c[e+2]=g>>8&255,c[e+3]=255&g}}for(g=c[13],c[13]=c[9],c[9]=c[5],c[5]=c[1],c[1]=g,g=c[14],i=c[10],c[14]=c[6],c[10]=c[2],c[6]=g,c[2]=i,g=c[15],i=c[11],j=c[7],c[15]=c[3],c[11]=g,c[7]=i,c[3]=j,e=0;16>e;++e)c[e]=h[c[e]],c[e]^=b[e];return c}function c(a,b){var c,d,e,f,h=new Uint8Array(16);for(h.set(a),k=0;16>k;++k)h[k]^=b[k];for(j=1;10>j;j++){for(k=0;16>k;++k)h[k]=g[h[k]];e=h[1],h[1]=h[5],h[5]=h[9],h[9]=h[13],h[13]=e,e=h[2],d=h[6],h[2]=h[10],h[6]=h[14],h[10]=e,h[14]=d,e=h[3],d=h[7],c=h[11],h[3]=h[15],h[7]=e,h[11]=d,h[15]=c;for(var k=0;16>k;k+=4){var l=h[k+0],m=h[k+1],n=h[k+2],o=h[k+3];c=l^m^n^o,h[k+0]^=c^i[l^m],h[k+1]^=c^i[m^n],h[k+2]^=c^i[n^o],h[k+3]^=c^i[o^l]}for(k=0,f=16*j;16>k;++k,++f)h[k]^=b[f]}for(k=0;16>k;++k)h[k]=g[h[k]];for(e=h[1],h[1]=h[5],h[5]=h[9],h[9]=h[13],h[13]=e,e=h[2],d=h[6],h[2]=h[10],h[6]=h[14],h[10]=e,h[14]=d,e=h[3],d=h[7],c=h[11],h[3]=h[15],h[7]=e,h[11]=d,h[15]=c,k=0,f=160;16>k;++k,++f)h[k]^=b[f];return h}function d(b){this.key=a(b),this.buffer=new Uint8Array(16),this.bufferPosition=0}function e(a,c){var d,e,f,g=a.length,h=this.buffer,i=this.bufferPosition,j=[],k=this.iv;for(d=0;g>d;++d)if(h[i]=a[d],++i,!(16>i)){var l=b(h,this.key);for(e=0;16>e;++e)l[e]^=k[e];k=h,j.push(l),h=new Uint8Array(16),i=0}if(this.buffer=h,this.bufferLength=i,this.iv=k,0===j.length)return new Uint8Array([]);var m=16*j.length;if(c){var n=j[j.length-1],o=n[15];if(16>=o){for(d=15,f=16-o;d>=f;--d)if(n[d]!==o){o=0;break}m-=o,j[j.length-1]=n.subarray(0,16-o)}}var p=new Uint8Array(m);for(d=0,e=0,f=j.length;f>d;++d,e+=16)p.set(j[d],e);return p}for(var f=new Uint8Array([141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141]),g=new Uint8Array([99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22]),h=new Uint8Array([82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125]),i=new Uint8Array(256),j=0;256>j;j++)128>j?i[j]=j<<1:i[j]=j<<1^27;
+var k=new Uint32Array([0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,3678124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,2640243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,3501741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,4169408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,1615861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,3043140495,2673705150,2438237621,2203032232,2370213795]);return d.prototype={decryptBlock:function(a,b){var c,d=a.length,f=this.buffer,g=this.bufferPosition;for(c=0;16>g&&d>c;++c,++g)f[g]=a[c];return 16>g?(this.bufferLength=g,new Uint8Array([])):(this.iv=f,this.buffer=new Uint8Array(16),this.bufferLength=0,this.decryptBlock=e,this.decryptBlock(a.subarray(16),b))},encrypt:function(a,b){var d,e,f,g=a.length,h=this.buffer,i=this.bufferPosition,j=[];for(b||(b=new Uint8Array(16)),d=0;g>d;++d)if(h[i]=a[d],++i,!(16>i)){for(e=0;16>e;++e)h[e]^=b[e];var k=c(h,this.key);b=k,j.push(k),h=new Uint8Array(16),i=0}if(this.buffer=h,this.bufferLength=i,this.iv=b,0===j.length)return new Uint8Array([]);var l=16*j.length,m=new Uint8Array(l);for(d=0,e=0,f=j.length;f>d;++d,e+=16)m.set(j[d],e);return m}},d}(),nb=function(){function a(a){var b=240,c=new Uint8Array(b),d=1;c.set(a);for(var e=32,g=1;b>e;++g){if(e%32===16)h=f[h],i=f[i],j=f[j],k=f[k];else if(e%32===0){var h=c[e-3],i=c[e-2],j=c[e-1],k=c[e-4];h=f[h],i=f[i],j=f[j],k=f[k],h^=d,(d<<=1)>=256&&(d=255&(27^d))}for(var l=0;4>l;++l)c[e]=h^=c[e-32],e++,c[e]=i^=c[e-32],e++,c[e]=j^=c[e-32],e++,c[e]=k^=c[e-32],e++}return c}function b(a,b){var c=new Uint8Array(16);c.set(a);var d,e,f,h,i,k;for(e=0,f=224;16>e;++e,++f)c[e]^=b[f];for(d=13;d>=1;--d){for(h=c[13],c[13]=c[9],c[9]=c[5],c[5]=c[1],c[1]=h,h=c[14],i=c[10],c[14]=c[6],c[10]=c[2],c[6]=h,c[2]=i,h=c[15],i=c[11],k=c[7],c[15]=c[3],c[11]=h,c[7]=i,c[3]=k,e=0;16>e;++e)c[e]=g[c[e]];for(e=0,f=16*d;16>e;++e,++f)c[e]^=b[f];for(e=0;16>e;e+=4){var l=j[c[e]],m=j[c[e+1]],n=j[c[e+2]],o=j[c[e+3]];h=l^m>>>8^m<<24^n>>>16^n<<16^o>>>24^o<<8,c[e]=h>>>24&255,c[e+1]=h>>16&255,c[e+2]=h>>8&255,c[e+3]=255&h}}for(h=c[13],c[13]=c[9],c[9]=c[5],c[5]=c[1],c[1]=h,h=c[14],i=c[10],c[14]=c[6],c[10]=c[2],c[6]=h,c[2]=i,h=c[15],i=c[11],k=c[7],c[15]=c[3],c[11]=h,c[7]=i,c[3]=k,e=0;16>e;++e)c[e]=g[c[e]],c[e]^=b[e];return c}function c(a,b){var c,d,e,g,j=new Uint8Array(16);for(j.set(a),k=0;16>k;++k)j[k]^=b[k];for(i=1;14>i;i++){for(k=0;16>k;++k)j[k]=f[j[k]];e=j[1],j[1]=j[5],j[5]=j[9],j[9]=j[13],j[13]=e,e=j[2],d=j[6],j[2]=j[10],j[6]=j[14],j[10]=e,j[14]=d,e=j[3],d=j[7],c=j[11],j[3]=j[15],j[7]=e,j[11]=d,j[15]=c;for(var k=0;16>k;k+=4){var l=j[k+0],m=j[k+1],n=j[k+2],o=j[k+3];c=l^m^n^o,j[k+0]^=c^h[l^m],j[k+1]^=c^h[m^n],j[k+2]^=c^h[n^o],j[k+3]^=c^h[o^l]}for(k=0,g=16*i;16>k;++k,++g)j[k]^=b[g]}for(k=0;16>k;++k)j[k]=f[j[k]];for(e=j[1],j[1]=j[5],j[5]=j[9],j[9]=j[13],j[13]=e,e=j[2],d=j[6],j[2]=j[10],j[6]=j[14],j[10]=e,j[14]=d,e=j[3],d=j[7],c=j[11],j[3]=j[15],j[7]=e,j[11]=d,j[15]=c,k=0,g=224;16>k;++k,++g)j[k]^=b[g];return j}function d(b){this.key=a(b),this.buffer=new Uint8Array(16),this.bufferPosition=0}function e(a,c){var d,e,f,g=a.length,h=this.buffer,i=this.bufferPosition,j=[],k=this.iv;for(d=0;g>d;++d)if(h[i]=a[d],++i,!(16>i)){var l=b(h,this.key);for(e=0;16>e;++e)l[e]^=k[e];k=h,j.push(l),h=new Uint8Array(16),i=0}if(this.buffer=h,this.bufferLength=i,this.iv=k,0===j.length)return new Uint8Array([]);var m=16*j.length;if(c){var n=j[j.length-1],o=n[15];if(16>=o){for(d=15,f=16-o;d>=f;--d)if(n[d]!==o){o=0;break}m-=o,j[j.length-1]=n.subarray(0,16-o)}}var p=new Uint8Array(m);for(d=0,e=0,f=j.length;f>d;++d,e+=16)p.set(j[d],e);return p}for(var f=(new Uint8Array([141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141,1,2,4,8,16,32,64,128,27,54,108,216,171,77,154,47,94,188,99,198,151,53,106,212,179,125,250,239,197,145,57,114,228,211,189,97,194,159,37,74,148,51,102,204,131,29,58,116,232,203,141]),new Uint8Array([99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,137,13,191,230,66,104,65,153,45,15,176,84,187,22])),g=new Uint8Array([82,9,106,213,48,54,165,56,191,64,163,158,129,243,215,251,124,227,57,130,155,47,255,135,52,142,67,68,196,222,233,203,84,123,148,50,166,194,35,61,238,76,149,11,66,250,195,78,8,46,161,102,40,217,36,178,118,91,162,73,109,139,209,37,114,248,246,100,134,104,152,22,212,164,92,204,93,101,182,146,108,112,72,80,253,237,185,218,94,21,70,87,167,141,157,132,144,216,171,0,140,188,211,10,247,228,88,5,184,179,69,6,208,44,30,143,202,63,15,2,193,175,189,3,1,19,138,107,58,145,17,65,79,103,220,234,151,242,207,206,240,180,230,115,150,172,116,34,231,173,53,133,226,249,55,232,28,117,223,110,71,241,26,113,29,41,197,137,111,183,98,14,170,24,190,27,252,86,62,75,198,210,121,32,154,219,192,254,120,205,90,244,31,221,168,51,136,7,199,49,177,18,16,89,39,128,236,95,96,81,127,169,25,181,74,13,45,229,122,159,147,201,156,239,160,224,59,77,174,42,245,176,200,235,187,60,131,83,153,97,23,43,4,126,186,119,214,38,225,105,20,99,85,33,12,125]),h=new Uint8Array(256),i=0;256>i;i++)128>i?h[i]=i<<1:h[i]=i<<1^27;var j=new Uint32Array([0,235474187,470948374,303765277,941896748,908933415,607530554,708780849,1883793496,2118214995,1817866830,1649639237,1215061108,1181045119,1417561698,1517767529,3767586992,4003061179,4236429990,4069246893,3635733660,3602770327,3299278474,3400528769,2430122216,2664543715,2362090238,2193862645,2835123396,2801107407,3035535058,3135740889,3678124923,3576870512,3341394285,3374361702,3810496343,3977675356,4279080257,4043610186,2876494627,2776292904,3076639029,3110650942,2472011535,2640243204,2403728665,2169303058,1001089995,899835584,666464733,699432150,59727847,226906860,530400753,294930682,1273168787,1172967064,1475418501,1509430414,1942435775,2110667444,1876241833,1641816226,2910219766,2743034109,2976151520,3211623147,2505202138,2606453969,2302690252,2269728455,3711829422,3543599269,3240894392,3475313331,3843699074,3943906441,4178062228,4144047775,1306967366,1139781709,1374988112,1610459739,1975683434,2076935265,1775276924,1742315127,1034867998,866637845,566021896,800440835,92987698,193195065,429456164,395441711,1984812685,2017778566,1784663195,1683407248,1315562145,1080094634,1383856311,1551037884,101039829,135050206,437757123,337553864,1042385657,807962610,573804783,742039012,2531067453,2564033334,2328828971,2227573024,2935566865,2700099354,3001755655,3168937228,3868552805,3902563182,4203181171,4102977912,3736164937,3501741890,3265478751,3433712980,1106041591,1340463100,1576976609,1408749034,2043211483,2009195472,1708848333,1809054150,832877231,1068351396,766945465,599762354,159417987,126454664,361929877,463180190,2709260871,2943682380,3178106961,3009879386,2572697195,2538681184,2236228733,2336434550,3509871135,3745345300,3441850377,3274667266,3910161971,3877198648,4110568485,4211818798,2597806476,2497604743,2261089178,2295101073,2733856160,2902087851,3202437046,2968011453,3936291284,3835036895,4136440770,4169408201,3535486456,3702665459,3467192302,3231722213,2051518780,1951317047,1716890410,1750902305,1113818384,1282050075,1584504582,1350078989,168810852,67556463,371049330,404016761,841739592,1008918595,775550814,540080725,3969562369,3801332234,4035489047,4269907996,3569255213,3669462566,3366754619,3332740144,2631065433,2463879762,2160117071,2395588676,2767645557,2868897406,3102011747,3069049960,202008497,33778362,270040487,504459436,875451293,975658646,675039627,641025152,2084704233,1917518562,1615861247,1851332852,1147550661,1248802510,1484005843,1451044056,933301370,967311729,733156972,632953703,260388950,25965917,328671808,496906059,1206477858,1239443753,1543208500,1441952575,2144161806,1908694277,1675577880,1842759443,3610369226,3644379585,3408119516,3307916247,4011190502,3776767469,4077384432,4245618683,2809771154,2842737049,3144396420,3043140495,2673705150,2438237621,2203032232,2370213795]);return d.prototype={decryptBlock:function(a,b,c){var d,f=a.length,g=this.buffer,h=this.bufferPosition;if(c)this.iv=c;else{for(d=0;16>h&&f>d;++d,++h)g[h]=a[d];if(16>h)return this.bufferLength=h,new Uint8Array([]);this.iv=g,a=a.subarray(16)}return this.buffer=new Uint8Array(16),this.bufferLength=0,this.decryptBlock=e,this.decryptBlock(a,b)},encrypt:function(a,b){var d,e,f,g=a.length,h=this.buffer,i=this.bufferPosition,j=[];for(b||(b=new Uint8Array(16)),d=0;g>d;++d)if(h[i]=a[d],++i,!(16>i)){for(e=0;16>e;++e)h[e]^=b[e];var k=c(h,this.key);this.iv=k,j.push(k),h=new Uint8Array(16),i=0}if(this.buffer=h,this.bufferLength=i,this.iv=b,0===j.length)return new Uint8Array([]);var l=16*j.length,m=new Uint8Array(l);for(d=0,e=0,f=j.length;f>d;++d,e+=16)m.set(j[d],e);return m}},d}(),ob=function(){function a(a,b){if(a.length!==b.length)return!1;for(var c=0;c<a.length;c++)if(a[c]!==b[c])return!1;return!0}function b(){}return b.prototype={checkOwnerPassword:function(b,c,d,e){var f=new Uint8Array(b.length+56);f.set(b,0),f.set(c,b.length),f.set(d,b.length+c.length);var g=ib(f,0,f.length);return a(g,e)},checkUserPassword:function(b,c,d){var e=new Uint8Array(b.length+8);e.set(b,0),e.set(c,b.length);var f=ib(e,0,e.length);return a(f,d)},getOwnerKey:function(a,b,c,d){var e=new Uint8Array(a.length+56);e.set(a,0),e.set(b,a.length),e.set(c,a.length+b.length);var f=ib(e,0,e.length),g=new nb(f);return g.decryptBlock(d,!1,new Uint8Array(16))},getUserKey:function(a,b,c){var d=new Uint8Array(a.length+8);d.set(a,0),d.set(b,a.length);var e=ib(d,0,d.length),f=new nb(e);return f.decryptBlock(c,!1,new Uint8Array(16))}},b}(),pb=function(){function a(a,b){var c=new Uint8Array(a.length+b.length);return c.set(a,0),c.set(b,a.length),c}function b(b,c,d){for(var e=ib(c,0,c.length).subarray(0,32),f=[0],g=0;64>g||f[f.length-1]>g-32;){var h=b.length+e.length+d.length,i=new Uint8Array(64*h),j=a(b,e);j=a(j,d);for(var k=0,l=0;64>k;k++,l+=h)i.set(j,l);var m=new mb(e.subarray(0,16));f=m.encrypt(i,e.subarray(16,32));for(var n=0,o=0;16>o;o++)n*=1,n%=3,n+=(f[o]>>>0)%3,n%=3;0===n?e=ib(f,0,f.length):1===n?e=kb(f,0,f.length):2===n&&(e=jb(f,0,f.length)),g++}return e.subarray(0,32)}function c(){}function d(a,b){if(a.length!==b.length)return!1;for(var c=0;c<a.length;c++)if(a[c]!==b[c])return!1;return!0}return c.prototype={hash:function(a,c,d){return b(a,c,d)},checkOwnerPassword:function(a,c,e,f){var g=new Uint8Array(a.length+56);g.set(a,0),g.set(c,a.length),g.set(e,a.length+c.length);var h=b(a,g,e);return d(h,f)},checkUserPassword:function(a,c,e){var f=new Uint8Array(a.length+8);f.set(a,0),f.set(c,a.length);var g=b(a,f,[]);return d(g,e)},getOwnerKey:function(a,c,d,e){var f=new Uint8Array(a.length+56);f.set(a,0),f.set(c,a.length),f.set(d,a.length+c.length);var g=b(a,f,d),h=new nb(g);return h.decryptBlock(e,!1,new Uint8Array(16))},getUserKey:function(a,c,d){var e=new Uint8Array(a.length+8);e.set(a,0),e.set(c,a.length);var f=b(a,e,[]),g=new nb(f);return g.decryptBlock(d,!1,new Uint8Array(16))}},c}(),qb=function(){function a(a,b){this.stringCipherConstructor=a,this.streamCipherConstructor=b}return a.prototype={createStream:function(a,b){var c=new this.streamCipherConstructor;return new Vc(a,b,function(a,b){return c.decryptBlock(a,b)})},decryptString:function(a){var b=new this.stringCipherConstructor,c=j(a);return c=b.decryptBlock(c,!0),i(c)}},a}(),rb=function(){function a(a,b,c,d,e,f,g,h,i,j,k,l){if(b){var m=Math.min(127,b.length);b=b.subarray(0,m)}else b=[];var n;if(n=6===a?new pb:new ob){if(n.checkUserPassword(b,h,g))return n.getUserKey(b,i,k);if(b.length&&n.checkOwnerPassword(b,d,f,c))return n.getOwnerKey(b,e,f,j)}return null}function d(a,b,c,d,e,f,g,h){var j,k,l=40+c.length+a.length,m=new Uint8Array(l),n=0;if(b)for(k=Math.min(32,b.length);k>n;++n)m[n]=b[n];for(j=0;32>n;)m[n++]=i[j++];for(j=0,k=c.length;k>j;++j)m[n++]=c[j];for(m[n++]=255&e,m[n++]=e>>8&255,m[n++]=e>>16&255,m[n++]=e>>>24&255,j=0,k=a.length;k>j;++j)m[n++]=a[j];f>=4&&!h&&(m[n++]=255,m[n++]=255,m[n++]=255,m[n++]=255);var o=gb(m,0,n),p=g>>3;if(f>=3)for(j=0;50>j;++j)o=gb(o,0,p);var q,r,s=o.subarray(0,p);if(f>=3){for(n=0;32>n;++n)m[n]=i[n];for(j=0,k=a.length;k>j;++j)m[n++]=a[j];q=new fb(s),r=q.encryptBlock(gb(m,0,n)),k=s.length;var t,u=new Uint8Array(k);for(j=1;19>=j;++j){for(t=0;k>t;++t)u[t]=s[t]^j;q=new fb(u),r=q.encryptBlock(r)}for(j=0,k=r.length;k>j;++j)if(d[j]!==r[j])return null}else for(q=new fb(s),r=q.encryptBlock(i),j=0,k=r.length;k>j;++j)if(d[j]!==r[j])return null;return s}function e(a,b,c,d){var e,f,g=new Uint8Array(32),h=0;for(f=Math.min(32,a.length);f>h;++h)g[h]=a[h];for(e=0;32>h;)g[h++]=i[e++];var j=gb(g,0,h),k=d>>3;if(c>=3)for(e=0;50>e;++e)j=gb(j,0,j.length);var l,m;if(c>=3){m=b;var n,o=new Uint8Array(k);for(e=19;e>=0;e--){for(n=0;k>n;++n)o[n]=j[n]^e;l=new fb(o),m=l.encryptBlock(m)}}else l=new fb(j.subarray(0,k)),m=l.encryptBlock(b);return m}function f(f,g,h){var i=f.get("Filter");z(i)&&"Standard"===i.name||c("unknown encryption method"),this.dict=f;var l=f.get("V");(!w(l)||1!==l&&2!==l&&4!==l&&5!==l)&&c("unsupported encryption algorithm"),this.algorithm=l;var m=f.get("Length")||40;(!w(m)||40>m||m%8!==0)&&c("invalid key length");var n=j(f.get("O")).subarray(0,32),o=j(f.get("U")).subarray(0,32),p=f.get("P"),q=f.get("R"),r=(4===l||5===l)&&f.get("EncryptMetadata")!==!1;this.encryptMetadata=r;var s,u=j(g);if(h){if(6===q)try{h=t(h)}catch(v){b("CipherTransformFactory: Unable to convert UTF8 encoded password.")}s=j(h)}var x;if(5!==l)x=d(u,s,n,o,p,q,m,r);else{var y=j(f.get("O")).subarray(32,40),A=j(f.get("O")).subarray(40,48),B=j(f.get("U")).subarray(0,48),C=j(f.get("U")).subarray(32,40),D=j(f.get("U")).subarray(40,48),E=j(f.get("OE")),F=j(f.get("UE")),G=j(f.get("Perms"));x=a(q,s,n,y,A,B,o,C,D,E,F,G)}if(!x&&!h)throw new da("No password given",ca.NEED_PASSWORD);if(!x&&h){var H=e(s,n,q,m);x=d(u,H,n,o,p,q,m,r)}if(!x)throw new da("Incorrect Password",ca.INCORRECT_PASSWORD);this.encryptionKey=x,l>=4&&(this.cf=f.get("CF"),this.stmf=f.get("StmF")||k,this.strf=f.get("StrF")||k,this.eff=f.get("EFF")||this.stmf)}function g(a,b,c,d){var e,f,g=new Uint8Array(c.length+9);for(e=0,f=c.length;f>e;++e)g[e]=c[e];g[e++]=255&a,g[e++]=a>>8&255,g[e++]=a>>16&255,g[e++]=255&b,g[e++]=b>>8&255,d&&(g[e++]=115,g[e++]=65,g[e++]=108,g[e++]=84);var h=gb(g,0,e);return h.subarray(0,Math.min(c.length+5,16))}function h(a,b,d,e,f){var h,i=a.get(b.name);return null!==i&&void 0!==i&&(h=i.get("CFM")),h&&"None"!==h.name?"V2"===h.name?function(){return new fb(g(d,e,f,!1))}:"AESV2"===h.name?function(){return new mb(g(d,e,f,!0))}:"AESV3"===h.name?function(){return new nb(f)}:void c("Unknown crypto method"):function(){return new lb}}var i=new Uint8Array([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]),k=ya.get("Identity");return f.prototype={createCipherTransform:function(a,b){if(4===this.algorithm||5===this.algorithm)return new qb(h(this.cf,this.stmf,a,b,this.encryptionKey),h(this.cf,this.strf,a,b,this.encryptionKey));var c=g(a,b,this.encryptionKey,!1),d=function(){return new fb(c)};return new qb(d,d)}},f}(),sb={FUNCTION_BASED:1,AXIAL:2,RADIAL:3,FREE_FORM_MESH:4,LATTICE_FORM_MESH:5,COONS_PATCH_MESH:6,TENSOR_PATCH_MESH:7},tb=function(){function a(){c("should not call Pattern constructor")}return a.prototype={getPattern:function(a){c("Should not call Pattern.getStyle: "+a)}},a.parseShading=function(a,c,d,e){var f=D(a)?a.dict:a,g=f.get("ShadingType");try{switch(g){case sb.AXIAL:case sb.RADIAL:return new ub.RadialAxial(f,c,d,e);case sb.FREE_FORM_MESH:case sb.LATTICE_FORM_MESH:case sb.COONS_PATCH_MESH:case sb.TENSOR_PATCH_MESH:return new ub.Mesh(a,c,d,e);default:throw new Error("Unsupported ShadingType: "+g)}}catch(h){if(h instanceof ja)throw h;return aa.notify(_.shadingPattern),b(h),new ub.Dummy}},a}(),ub={};ub.SMALL_NUMBER=.01,ub.RadialAxial=function(){function d(c,d,e,f){this.matrix=d,this.coordsArr=c.get("Coords"),this.shadingType=c.get("ShadingType"),this.type="Pattern";var g=c.get("ColorSpace","CS");g=Xa.parse(g,e,f),this.cs=g;var h=0,i=1;if(c.has("Domain")){var j=c.get("Domain");h=j[0],i=j[1]}var k=!1,l=!1;if(c.has("Extend")){var m=c.get("Extend");k=m[0],l=m[1]}if(!(this.shadingType!==sb.RADIAL||k&&l)){var n=this.coordsArr[0],o=this.coordsArr[1],p=this.coordsArr[2],q=this.coordsArr[3],r=this.coordsArr[4],s=this.coordsArr[5],t=Math.sqrt((n-q)*(n-q)+(o-r)*(o-r));s+t>=p&&p+t>=s&&b("Unsupported radial gradient.")}this.extendStart=k,this.extendEnd=l;var u=c.get("Function"),v=Ta.parseArray(e,u),w=i-h,x=w/10,y=this.colorStops=[];if(h>=i||0>=x)return void a("Bad shading domain.");for(var z,A=new Float32Array(g.numComps),B=new Float32Array(1),C=h;i>=C;C+=x){B[0]=C,v(B,0,A,0),z=g.getRgb(A,0);var D=na.makeCssRgb(z[0],z[1],z[2]);y.push([(C-h)/w,D])}var E="transparent";c.has("Background")&&(z=g.getRgb(c.get("Background"),0),E=na.makeCssRgb(z[0],z[1],z[2])),k||(y.unshift([0,E]),y[1][0]+=ub.SMALL_NUMBER),l||(y[y.length-1][0]-=ub.SMALL_NUMBER,y.push([1,E])),this.colorStops=y}return d.prototype={getIR:function(){var a,b,d,e,f,g=this.coordsArr,h=this.shadingType;h===sb.AXIAL?(b=[g[0],g[1]],d=[g[2],g[3]],e=null,f=null,a="axial"):h===sb.RADIAL?(b=[g[0],g[1]],d=[g[3],g[4]],e=g[2],f=g[5],a="radial"):c("getPattern type unknown: "+h);var i=this.matrix;return i&&(b=na.applyTransform(b,i),d=na.applyTransform(d,i)),["RadialAxial",a,this.colorStops,b,d,e,f]}},d}(),ub.Mesh=function(){function a(a,b){this.stream=a,this.context=b,this.buffer=0,this.bufferLength=0;var c=b.numComps;this.tmpCompsBuf=new Float32Array(c);var d=b.colorSpace.numComps;this.tmpCsCompsBuf=b.colorFn?new Float32Array(d):this.tmpCompsBuf}function b(a,b){for(var c=a.coords,d=a.colors,f=[],g=[],h=0;b.hasData;){var i=b.readFlag(),j=b.readCoordinate(),k=b.readComponents();if(0===h){switch(e(i>=0&&2>=i,"Unknown type4 flag"),i){case 0:h=3;break;case 1:g.push(g[g.length-2],g[g.length-1]),h=1;break;case 2:g.push(g[g.length-3],g[g.length-1]),h=1}f.push(i)}g.push(c.length),c.push(j),d.push(k),h--,b.align()}a.figures.push({type:"triangles",coords:new Int32Array(g),colors:new Int32Array(g)})}function d(a,b,c){for(var d=a.coords,e=a.colors,f=[];b.hasData;){var g=b.readCoordinate(),h=b.readComponents();f.push(d.length),d.push(g),e.push(h)}a.figures.push({type:"lattice",coords:new Int32Array(f),colors:new Int32Array(f),verticesPerRow:c})}function f(a,b){var c=a.figures[b];e("patch"===c.type,"Unexpected patch mesh figure");var d=a.coords,f=a.colors,g=c.coords,h=c.colors,i=Math.min(d[g[0]][0],d[g[3]][0],d[g[12]][0],d[g[15]][0]),j=Math.min(d[g[0]][1],d[g[3]][1],d[g[12]][1],d[g[15]][1]),k=Math.max(d[g[0]][0],d[g[3]][0],d[g[12]][0],d[g[15]][0]),p=Math.max(d[g[0]][1],d[g[3]][1],d[g[12]][1],d[g[15]][1]),q=Math.ceil((k-i)*n/(a.bounds[2]-a.bounds[0]));q=Math.max(l,Math.min(m,q));var r=Math.ceil((p-j)*n/(a.bounds[3]-a.bounds[1]));r=Math.max(l,Math.min(m,r));for(var s=q+1,t=new Int32Array((r+1)*s),u=new Int32Array((r+1)*s),v=0,w=new Uint8Array(3),x=new Uint8Array(3),y=f[h[0]],z=f[h[1]],A=f[h[2]],B=f[h[3]],C=o(r),D=o(q),E=0;r>=E;E++){w[0]=(y[0]*(r-E)+A[0]*E)/r|0,w[1]=(y[1]*(r-E)+A[1]*E)/r|0,w[2]=(y[2]*(r-E)+A[2]*E)/r|0,x[0]=(z[0]*(r-E)+B[0]*E)/r|0,x[1]=(z[1]*(r-E)+B[1]*E)/r|0,x[2]=(z[2]*(r-E)+B[2]*E)/r|0;for(var F=0;q>=F;F++,v++)if(0!==E&&E!==r||0!==F&&F!==q){for(var G=0,H=0,I=0,J=0;3>=J;J++)for(var K=0;3>=K;K++,I++){var L=C[E][J]*D[F][K];G+=d[g[I]][0]*L,H+=d[g[I]][1]*L}t[v]=d.length,d.push([G,H]),u[v]=f.length;var M=new Uint8Array(3);M[0]=(w[0]*(q-F)+x[0]*F)/q|0,M[1]=(w[1]*(q-F)+x[1]*F)/q|0,M[2]=(w[2]*(q-F)+x[2]*F)/q|0,f.push(M)}}t[0]=g[0],u[0]=h[0],t[q]=g[3],u[q]=h[1],t[s*r]=g[12],u[s*r]=h[2],t[s*r+q]=g[15],u[s*r+q]=h[3],a.figures[b]={type:"lattice",coords:t,colors:u,verticesPerRow:s}}function g(a,b){for(var c=a.coords,d=a.colors,f=new Int32Array(16),g=new Int32Array(4);b.hasData;){var h=b.readFlag();e(h>=0&&3>=h,"Unknown type6 flag");var i,j,k=c.length;for(i=0,j=0!==h?8:12;j>i;i++)c.push(b.readCoordinate());var l=d.length;for(i=0,j=0!==h?2:4;j>i;i++)d.push(b.readComponents());var m,n,o,p;switch(h){case 0:f[12]=k+3,f[13]=k+4,f[14]=k+5,f[15]=k+6,f[8]=k+2,f[11]=k+7,f[4]=k+1,f[7]=k+8,f[0]=k,f[1]=k+11,f[2]=k+10,f[3]=k+9,g[2]=l+1,g[3]=l+2,g[0]=l,g[1]=l+3;break;case 1:m=f[12],n=f[13],o=f[14],p=f[15],f[12]=p,f[13]=k+0,f[14]=k+1,f[15]=k+2,f[8]=o,f[11]=k+3,f[4]=n,f[7]=k+4,f[0]=m,f[1]=k+7,f[2]=k+6,f[3]=k+5,m=g[2],n=g[3],g[2]=n,g[3]=l,g[0]=m,g[1]=l+1;break;case 2:m=f[15],n=f[11],f[12]=f[3],f[13]=k+0,f[14]=k+1,f[15]=k+2,f[8]=f[7],f[11]=k+3,f[4]=n,f[7]=k+4,f[0]=m,f[1]=k+7,f[2]=k+6,f[3]=k+5,m=g[3],g[2]=g[1],g[3]=l,g[0]=m,g[1]=l+1;break;case 3:f[12]=f[0],f[13]=k+0,f[14]=k+1,f[15]=k+2,f[8]=f[1],f[11]=k+3,f[4]=f[2],f[7]=k+4,f[0]=f[3],f[1]=k+7,f[2]=k+6,f[3]=k+5,g[2]=g[0],g[3]=l,g[0]=g[1],g[1]=l+1}f[5]=c.length,c.push([(-4*c[f[0]][0]-c[f[15]][0]+6*(c[f[4]][0]+c[f[1]][0])-2*(c[f[12]][0]+c[f[3]][0])+3*(c[f[13]][0]+c[f[7]][0]))/9,(-4*c[f[0]][1]-c[f[15]][1]+6*(c[f[4]][1]+c[f[1]][1])-2*(c[f[12]][1]+c[f[3]][1])+3*(c[f[13]][1]+c[f[7]][1]))/9]),f[6]=c.length,c.push([(-4*c[f[3]][0]-c[f[12]][0]+6*(c[f[2]][0]+c[f[7]][0])-2*(c[f[0]][0]+c[f[15]][0])+3*(c[f[4]][0]+c[f[14]][0]))/9,(-4*c[f[3]][1]-c[f[12]][1]+6*(c[f[2]][1]+c[f[7]][1])-2*(c[f[0]][1]+c[f[15]][1])+3*(c[f[4]][1]+c[f[14]][1]))/9]),f[9]=c.length,c.push([(-4*c[f[12]][0]-c[f[3]][0]+6*(c[f[8]][0]+c[f[13]][0])-2*(c[f[0]][0]+c[f[15]][0])+3*(c[f[11]][0]+c[f[1]][0]))/9,(-4*c[f[12]][1]-c[f[3]][1]+6*(c[f[8]][1]+c[f[13]][1])-2*(c[f[0]][1]+c[f[15]][1])+3*(c[f[11]][1]+c[f[1]][1]))/9]),f[10]=c.length,c.push([(-4*c[f[15]][0]-c[f[0]][0]+6*(c[f[11]][0]+c[f[14]][0])-2*(c[f[12]][0]+c[f[3]][0])+3*(c[f[2]][0]+c[f[8]][0]))/9,(-4*c[f[15]][1]-c[f[0]][1]+6*(c[f[11]][1]+c[f[14]][1])-2*(c[f[12]][1]+c[f[3]][1])+3*(c[f[2]][1]+c[f[8]][1]))/9]),a.figures.push({type:"patch",coords:new Int32Array(f),colors:new Int32Array(g)})}}function h(a,b){for(var c=a.coords,d=a.colors,f=new Int32Array(16),g=new Int32Array(4);b.hasData;){var h=b.readFlag();e(h>=0&&3>=h,"Unknown type7 flag");var i,j,k=c.length;for(i=0,j=0!==h?12:16;j>i;i++)c.push(b.readCoordinate());var l=d.length;for(i=0,j=0!==h?2:4;j>i;i++)d.push(b.readComponents());var m,n,o,p;switch(h){case 0:f[12]=k+3,f[13]=k+4,f[14]=k+5,f[15]=k+6,f[8]=k+2,f[9]=k+13,f[10]=k+14,f[11]=k+7,f[4]=k+1,f[5]=k+12,f[6]=k+15,f[7]=k+8,f[0]=k,f[1]=k+11,f[2]=k+10,f[3]=k+9,g[2]=l+1,g[3]=l+2,g[0]=l,g[1]=l+3;break;case 1:m=f[12],n=f[13],o=f[14],p=f[15],f[12]=p,f[13]=k+0,f[14]=k+1,f[15]=k+2,f[8]=o,f[9]=k+9,f[10]=k+10,f[11]=k+3,f[4]=n,f[5]=k+8,f[6]=k+11,f[7]=k+4,f[0]=m,f[1]=k+7,f[2]=k+6,f[3]=k+5,m=g[2],n=g[3],g[2]=n,g[3]=l,g[0]=m,g[1]=l+1;break;case 2:m=f[15],n=f[11],f[12]=f[3],f[13]=k+0,f[14]=k+1,f[15]=k+2,f[8]=f[7],f[9]=k+9,f[10]=k+10,f[11]=k+3,f[4]=n,f[5]=k+8,f[6]=k+11,f[7]=k+4,f[0]=m,f[1]=k+7,f[2]=k+6,f[3]=k+5,m=g[3],g[2]=g[1],g[3]=l,g[0]=m,g[1]=l+1;break;case 3:f[12]=f[0],f[13]=k+0,f[14]=k+1,f[15]=k+2,f[8]=f[1],f[9]=k+9,f[10]=k+10,f[11]=k+3,f[4]=f[2],f[5]=k+8,f[6]=k+11,f[7]=k+4,f[0]=f[3],f[1]=k+7,f[2]=k+6,f[3]=k+5,g[2]=g[0],g[3]=l,g[0]=g[1],g[1]=l+1}a.figures.push({type:"patch",coords:new Int32Array(f),colors:new Int32Array(g)})}}function i(a){for(var b=a.coords[0][0],c=a.coords[0][1],d=b,e=c,f=1,g=a.coords.length;g>f;f++){var h=a.coords[f][0],i=a.coords[f][1];b=b>h?h:b,c=c>i?i:c,d=h>d?h:d,e=i>e?i:e}a.bounds=[b,c,d,e]}function j(a){var b,c,d,e,f=a.coords,g=new Float32Array(2*f.length);for(b=0,d=0,c=f.length;c>b;b++){var h=f[b];g[d++]=h[0],g[d++]=h[1]}a.coords=g;var i=a.colors,j=new Uint8Array(3*i.length);for(b=0,d=0,c=i.length;c>b;b++){var k=i[b];j[d++]=k[0],j[d++]=k[1],j[d++]=k[2]}a.colors=j;var l=a.figures;for(b=0,c=l.length;c>b;b++){var m=l[b],n=m.coords,o=m.colors;for(d=0,e=n.length;e>d;d++)n[d]*=2,o[d]*=3}}function k(k,l,m,n){e(D(k),"Mesh data is not a stream");var o=k.dict;this.matrix=l,this.shadingType=o.get("ShadingType"),this.type="Pattern",this.bbox=o.get("BBox");var p=o.get("ColorSpace","CS");p=Xa.parse(p,m,n),this.cs=p,this.background=o.has("Background")?p.getRgb(o.get("Background"),0):null;var q=o.get("Function"),r=q?Ta.parseArray(m,q):null;this.coords=[],this.colors=[],this.figures=[];var s={bitsPerCoordinate:o.get("BitsPerCoordinate"),bitsPerComponent:o.get("BitsPerComponent"),bitsPerFlag:o.get("BitsPerFlag"),decode:o.get("Decode"),colorFn:r,colorSpace:p,numComps:r?1:p.numComps},t=new a(k,s),u=!1;switch(this.shadingType){case sb.FREE_FORM_MESH:b(this,t);break;case sb.LATTICE_FORM_MESH:var v=0|o.get("VerticesPerRow");e(v>=2,"Invalid VerticesPerRow"),d(this,t,v);break;case sb.COONS_PATCH_MESH:g(this,t),u=!0;break;case sb.TENSOR_PATCH_MESH:h(this,t),u=!0;break;default:c("Unsupported mesh type.")}if(u){i(this);for(var w=0,x=this.figures.length;x>w;w++)f(this,w)}i(this),j(this)}a.prototype={get hasData(){if(this.stream.end)return this.stream.pos<this.stream.end;if(this.bufferLength>0)return!0;var a=this.stream.getByte();return 0>a?!1:(this.buffer=a,this.bufferLength=8,!0)},readBits:function(a){var b=this.buffer,c=this.bufferLength;if(32===a){if(0===c)return(this.stream.getByte()<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte())>>>0;b=b<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte();var d=this.stream.getByte();return this.buffer=d&(1<<c)-1,(b<<8-c|(255&d)>>c)>>>0}if(8===a&&0===c)return this.stream.getByte();for(;a>c;)b=b<<8|this.stream.getByte(),c+=8;return c-=a,this.bufferLength=c,this.buffer=b&(1<<c)-1,b>>c},align:function(){this.buffer=0,this.bufferLength=0},readFlag:function(){return this.readBits(this.context.bitsPerFlag)},readCoordinate:function(){var a=this.context.bitsPerCoordinate,b=this.readBits(a),c=this.readBits(a),d=this.context.decode,e=32>a?1/((1<<a)-1):2.3283064365386963e-10;return[b*e*(d[1]-d[0])+d[0],c*e*(d[3]-d[2])+d[2]]},readComponents:function(){for(var a=this.context.numComps,b=this.context.bitsPerComponent,c=32>b?1/((1<<b)-1):2.3283064365386963e-10,d=this.context.decode,e=this.tmpCompsBuf,f=0,g=4;a>f;f++,g+=2){var h=this.readBits(b);e[f]=h*c*(d[g+1]-d[g])+d[g]}var i=this.tmpCsCompsBuf;return this.context.colorFn&&this.context.colorFn(e,0,i,0),this.context.colorSpace.getRgb(i,0)}};var l=3,m=20,n=20,o=function(){function a(a){for(var b=[],c=0;a>=c;c++){var d=c/a,e=1-d;b.push(new Float32Array([e*e*e,3*d*e*e,3*d*d*e,d*d*d]))}return b}var b=[];return function(c){return b[c]||(b[c]=a(c)),b[c]}}();return k.prototype={getIR:function(){return["Mesh",this.shadingType,this.coords,this.colors,this.figures,this.bounds,this.matrix,this.bbox,this.background]}},k}(),ub.Dummy=function(){function a(){this.type="Pattern"}return a.prototype={getIR:function(){return["Dummy"]}},a}();var vb=function(){function d(a,b,c,d,e,f,g){this.pdfManager=a,this.xref=b,this.handler=c,this.pageIndex=d,this.uniquePrefix=e,this.idCounters=f,this.fontCache=g}function f(){this.reset()}var g=20,h=100;f.prototype={check:function(){return++this.checked<h?!1:(this.checked=0,this.endTime<=Date.now())},reset:function(){this.endTime=Date.now()+g,this.checked=0}};var i=Promise.resolve(),j=1,k=2;return d.prototype={hasBlendModes:function(a){if(!B(a))return!1;var b=Object.create(null);a.objId&&(b[a.objId]=!0);for(var c=[a];c.length;){var d,e=c.shift(),f=e.get("ExtGState");if(B(f)){f=f.getAll();for(d in f){var g=f[d],h=g.BM;if(z(h)&&"Normal"!==h.name)return!0}}var i=e.get("XObject");if(B(i)){i=i.getAll();for(d in i){var j=i[d];if(D(j)){if(j.dict.objId){if(b[j.dict.objId])continue;b[j.dict.objId]=!0}var k=j.dict.get("Resources");!B(k)||k.objId&&b[k.objId]||(c.push(k),k.objId&&(b[k.objId]=!0))}}}}return!1},buildFormXObject:function(a,b,c,d,e,f){var g=b.dict.getArray("Matrix"),h=b.dict.getArray("BBox"),i=b.dict.get("Group");if(i){var j,k={matrix:g,bbox:h,smask:c,isolated:!1,knockout:!1},l=i.get("S");z(l)&&"Transparency"===l.name&&(k.isolated=i.get("I")||!1,k.knockout=i.get("K")||!1,j=i.has("CS")?Xa.parse(i.get("CS"),this.xref,a):null),c&&c.backdrop&&(j=j||Xa.singletons.rgb,c.backdrop=j.getRgb(c.backdrop,0)),d.addOp($.beginGroup,[k])}return d.addOp($.paintFormXObjectBegin,[g,h]),this.getOperatorList(b,e,b.dict.get("Resources")||a,d,f).then(function(){d.addOp($.paintFormXObjectEnd,[]),i&&d.addOp($.endGroup,[k])})},buildPaintImageXObject:function(a,c,d,e,f,g){var h=this,i=c.dict,j=i.get("Width","W"),k=i.get("Height","H");if(!(j&&x(j)&&k&&x(k)))return void b("Image dimensions are missing, or not numbers.");if(-1!==PDFJS.maxImageSize&&j*k>PDFJS.maxImageSize)return void b("Image exceeded maximum allowed size and was removed.");var l,m,n=i.get("ImageMask","IM")||!1;if(n){var o=i.get("Width","W"),p=i.get("Height","H"),q=o+7>>3,r=c.getBytes(q*p),s=i.get("Decode","D"),t=!!s&&s[0]>0;
+return l=Bc.createMask(r,o,p,c instanceof Oc,t),l.cached=!0,m=[l],e.addOp($.paintImageMaskXObject,m),void(f&&(g[f]={fn:$.paintImageMaskXObject,args:m}))}var u=i.get("SMask","SM")||!1,v=i.get("Mask")||!1,w=200;if(d&&!u&&!v&&!(c instanceof Sc)&&w>j+k){var y=new Bc(this.xref,a,c,d,null,null);return l=y.createImageData(!0),void e.addOp($.paintInlineImageXObject,[l])}var z=this.uniquePrefix||"",A="img_"+z+ ++this.idCounters.obj;return e.addDependency(A),m=[A,j,k],!u&&!v&&c instanceof Sc&&c.isNativelySupported(this.xref,a)?(e.addOp($.paintJpegXObject,m),void this.handler.send("obj",[A,this.pageIndex,"JpegStream",c.getIR()])):(Bc.buildImage(h.handler,h.xref,a,c,d).then(function(a){var b=a.createImageData(!1);h.handler.send("obj",[A,h.pageIndex,"Image",b],[b.data.buffer])}).then(void 0,function(a){b("Unable to decode image: "+a),h.handler.send("obj",[A,h.pageIndex,"Image",null])}),e.addOp($.paintImageXObject,m),void(f&&(g[f]={fn:$.paintImageXObject,args:m})))},handleSMask:function(a,b,c,d,e){var f=a.get("G"),g={subtype:a.get("S").name,backdrop:a.get("BC")};return this.buildFormXObject(b,f,g,c,d,e.state.clone())},handleTilingType:function(a,b,c,d,e,f,g){var h=new xb,i=[e.get("Resources"),c],j=Aa.merge(this.xref,i);return this.getOperatorList(d,g,j,h).then(function(){f.addDependencies(h.dependencies),f.addOp(a,J({fnArray:h.fnArray,argsArray:h.argsArray},e,b))})},handleSetFont:function(a,b,c,d,e,f){var g;b&&(b=b.slice(),g=b[0].name);var h=this;return this.loadFont(g,c,this.xref,a).then(function(b){return b.font.isType3Font?b.loadType3Data(h,a,d,e).then(function(){return b}):b}).then(function(a){return f.font=a.font,a.send(h.handler),a.loadedName})},handleText:function(a,b){var c=b.font,d=c.charsToGlyphs(a),e=!!(b.textRenderingMode&U.ADD_TO_PATH_FLAG);if(c.data&&(e||PDFJS.disableFontFace))for(var f=function(a){if(!c.renderer.hasBuiltPath(a)){var b=c.renderer.getPathJs(a);this.handler.send("commonobj",[c.loadedName+"_path_"+a,"FontPath",b])}}.bind(this),g=0,h=d.length;h>g;g++){var i=d[g];if(null!==i){f(i.fontChar);var j=i.accent;j&&j.fontChar&&f(j.fontChar)}}return d},setGState:function(c,d,e,f,g,h){var i=[],j=d.map,k=this,l=Promise.resolve();for(var m in j){var n=j[m];switch(m){case"Type":break;case"LW":case"LC":case"LJ":case"ML":case"D":case"RI":case"FL":case"CA":case"ca":i.push([m,n]);break;case"Font":l=l.then(function(){return k.handleSetFont(c,null,n[0],e,f,h.state).then(function(a){e.addDependency(a),i.push([m,[a,n[1]]])})});break;case"BM":i.push([m,n]);break;case"SMask":if(z(n)&&"None"===n.name){i.push([m,!1]);break}var o=g.fetchIfRef(n);B(o)?(l=l.then(function(){return k.handleSMask(o,c,e,f,h)}),i.push([m,!0])):b("Unsupported SMask type");break;case"OP":case"op":case"OPM":case"BG":case"BG2":case"UCR":case"UCR2":case"TR":case"TR2":case"HT":case"SM":case"SA":case"AIS":case"TK":a("graphic state operator "+m);break;default:a("Unknown graphic state operator "+m)}}return l.then(function(){i.length>=0&&e.addOp($.setGState,[i])})},loadFont:function(a,c,d,f){function g(){return Promise.resolve(new wb("g_font_error",new ec("Font "+a+" is not available"),c))}var h;if(c)e(F(c)),h=c;else{var i=f.get("Font");if(!i)return b("fontRes not available"),g();h=i.getRaw(a)}if(!h)return b("fontRef not available"),g();if(this.fontCache.has(h))return this.fontCache.get(h);if(c=d.fetchIfRef(h),!B(c))return g();if(c.translated)return c.translated;var j=G(),k=this.preEvaluateFont(c,d),l=k.descriptor,m=h.num+"_"+h.gen;if(B(l)){l.fontAliases||(l.fontAliases=Object.create(null));var n=l.fontAliases,o=k.hash;if(n[o]){var p=n[o].aliasRef;if(p&&this.fontCache.has(p))return this.fontCache.putAlias(h,p),this.fontCache.get(h)}n[o]||(n[o]={fontID:dc.getFontID()}),n[o].aliasRef=h,m=n[o].fontID}var q=B(h);q||this.fontCache.put(h,j.promise),c.loadedName="g_font_"+(q?a.replace(/\W/g,""):m),c.translated=j.promise;var r;try{r=Promise.resolve(this.translateFont(k,d))}catch(s){r=Promise.reject(s)}return r.then(function(a){if(void 0!==a.fontType){var b=d.stats.fontTypes;b[a.fontType]=!0}j.resolve(new wb(c.loadedName,a,c))},function(a){aa.notify(_.font);try{var b=k.descriptor,e=b&&b.get("FontFile3"),f=e&&e.get("Subtype"),g=P(k.type,f&&f.name),h=d.stats.fontTypes;h[g]=!0}catch(i){}j.resolve(new wb(c.loadedName,new ec(a instanceof Error?a.message:a),c))}),j.promise},buildPath:function(a,b,c){var d=a.length-1;if(c||(c=[]),0>d||a.fnArray[d]!==$.constructPath)a.addOp($.constructPath,[[b],c]);else{var e=a.argsArray[d];e[0].push(b),Array.prototype.push.apply(e[1],c)}},handleColorN:function(a,b,c,d,e,f,g,h){var i,l=c[c.length-1];if(z(l)&&(i=e.get(l.name))){var m=D(i)?i.dict:i,n=m.get("PatternType");if(n===j){var o=d.base?d.base.getRgb(c,0):null;return this.handleTilingType(b,o,f,i,m,a,g)}if(n===k){var p=m.get("Shading"),q=m.get("Matrix");return i=tb.parseShading(p,q,h,f),a.addOp(b,i.getIR()),Promise.resolve()}return Promise.reject("Unknown PatternType: "+n)}return a.addOp(b,c),Promise.resolve()},getOperatorList:function(d,g,h,j,k){var l=this,m=this.xref,n={};e(j),h=h||Aa.empty;var o=h.get("XObject")||Aa.empty,p=h.get("Pattern")||Aa.empty,q=new yb(k||new Ab),r=new Bb(d,m,q),s=new f;return new Promise(function t(d,f){g.ensureNotTerminated(),s.reset();for(var k,u,v,w,A={};!(k=s.check())&&(A.args=null,r.read(A));){var C=A.args,E=A.fn;switch(0|E){case $.paintXObject:if(C[0].code)break;var F=C[0].name;if(!F){b("XObject must be referred to by name.");continue}if(void 0!==n[F]){j.addOp(n[F].fn,n[F].args),C=null;continue}var G=o.get(F);if(G){e(D(G),"XObject should be a stream");var H=G.dict.get("Subtype");if(e(z(H),"XObject should have a Name subtype"),"Form"===H.name)return q.save(),l.buildFormXObject(h,G,null,j,g,q.state.clone()).then(function(){q.restore(),t(d,f)},f);if("Image"===H.name){l.buildPaintImageXObject(h,G,!1,j,F,n),C=null;continue}if("PS"===H.name){a("Ignored XObject subtype PS");continue}c("Unhandled XObject subtype "+H.name)}break;case $.setFont:var I=C[1];return l.handleSetFont(h,C,null,j,g,q.state).then(function(a){j.addDependency(a),j.addOp($.setFont,[a,I]),t(d,f)},f);case $.endInlineImage:var J=C[0].cacheKey;if(J){var K=n[J];if(void 0!==K){j.addOp(K.fn,K.args),C=null;continue}}l.buildPaintImageXObject(h,C[0],!0,j,J,n),C=null;continue;case $.showText:C[0]=l.handleText(C[0],q.state);break;case $.showSpacedText:var L=C[0],M=[],N=L.length,O=q.state;for(u=0;N>u;++u){var P=L[u];y(P)?Array.prototype.push.apply(M,l.handleText(P,O)):x(P)&&M.push(P)}C[0]=M,E=$.showText;break;case $.nextLineShowText:j.addOp($.nextLine),C[0]=l.handleText(C[0],q.state),E=$.showText;break;case $.nextLineSetSpacingShowText:j.addOp($.nextLine),j.addOp($.setWordSpacing,[C.shift()]),j.addOp($.setCharSpacing,[C.shift()]),C[0]=l.handleText(C[0],q.state),E=$.showText;break;case $.setTextRenderingMode:q.state.textRenderingMode=C[0];break;case $.setFillColorSpace:q.state.fillColorSpace=Xa.parse(C[0],m,h);continue;case $.setStrokeColorSpace:q.state.strokeColorSpace=Xa.parse(C[0],m,h);continue;case $.setFillColor:w=q.state.fillColorSpace,C=w.getRgb(C,0),E=$.setFillRGBColor;break;case $.setStrokeColor:w=q.state.strokeColorSpace,C=w.getRgb(C,0),E=$.setStrokeRGBColor;break;case $.setFillGray:q.state.fillColorSpace=Xa.singletons.gray,C=Xa.singletons.gray.getRgb(C,0),E=$.setFillRGBColor;break;case $.setStrokeGray:q.state.strokeColorSpace=Xa.singletons.gray,C=Xa.singletons.gray.getRgb(C,0),E=$.setStrokeRGBColor;break;case $.setFillCMYKColor:q.state.fillColorSpace=Xa.singletons.cmyk,C=Xa.singletons.cmyk.getRgb(C,0),E=$.setFillRGBColor;break;case $.setStrokeCMYKColor:q.state.strokeColorSpace=Xa.singletons.cmyk,C=Xa.singletons.cmyk.getRgb(C,0),E=$.setStrokeRGBColor;break;case $.setFillRGBColor:q.state.fillColorSpace=Xa.singletons.rgb,C=Xa.singletons.rgb.getRgb(C,0);break;case $.setStrokeRGBColor:q.state.strokeColorSpace=Xa.singletons.rgb,C=Xa.singletons.rgb.getRgb(C,0);break;case $.setFillColorN:if(w=q.state.fillColorSpace,"Pattern"===w.name)return l.handleColorN(j,$.setFillColorN,C,w,p,h,g,m).then(function(){t(d,f)},f);C=w.getRgb(C,0),E=$.setFillRGBColor;break;case $.setStrokeColorN:if(w=q.state.strokeColorSpace,"Pattern"===w.name)return l.handleColorN(j,$.setStrokeColorN,C,w,p,h,g,m).then(function(){t(d,f)},f);C=w.getRgb(C,0),E=$.setStrokeRGBColor;break;case $.shadingFill:var Q=h.get("Shading");Q||c("No shading resource found");var R=Q.get(C[0].name);R||c("No shading object found");var S=tb.parseShading(R,null,m,h),T=S.getIR();C=[T],E=$.shadingFill;break;case $.setGState:var U=C[0],V=h.get("ExtGState");if(!B(V)||!V.has(U.name))break;var W=V.get(U.name);return l.setGState(h,W,j,g,m,q).then(function(){t(d,f)},f);case $.moveTo:case $.lineTo:case $.curveTo:case $.curveTo2:case $.curveTo3:case $.closePath:l.buildPath(j,E,C);continue;case $.rectangle:l.buildPath(j,E,C);continue;case $.markPoint:case $.markPointProps:case $.beginMarkedContent:case $.beginMarkedContentProps:case $.endMarkedContent:case $.beginCompat:case $.endCompat:continue}j.addOp(E,C)}if(k)return void i.then(function(){t(d,f)},f);for(u=0,v=r.savedStatesDepth;v>u;u++)j.addOp($.restore,[]);d()})},getTextContent:function(a,b,c,d){function g(){var a=r.font;return a.loadedName in l.styles||(l.styles[a.loadedName]={fontFamily:a.fallbackName,ascent:a.ascent,descent:a.descent,vertical:a.vertical}),{str:[],dir:null,width:0,height:0,transform:null,fontName:a.loadedName}}function h(a){var b=a.str.join(""),c=PDFJS.bidi(b,-1,r.font.vertical);return a.str=c.str,a.dir=c.dir,a}function j(a,b){return p.loadFont(a,b,q,c).then(function(a){r.font=a.font,r.fontMatrix=a.font.fontMatrix||T})}function k(a,b){var c=r.font;if(b=b||g(),!b.transform){var d=[r.fontSize*r.textHScale,0,0,r.fontSize,0,r.textRise];if(c.isType3Font&&r.fontMatrix!==T&&1===r.fontSize){var e=c.bbox[3]-c.bbox[1];e>0&&(e*=r.fontMatrix[3],d[3]*=e)}var f=b.transform=na.transform(r.ctm,na.transform(r.textMatrix,d));c.vertical?b.width=Math.sqrt(f[0]*f[0]+f[1]*f[1]):b.height=Math.sqrt(f[2]*f[2]+f[3]*f[3])}for(var h=0,i=0,j=c.charsToGlyphs(a),k=c.defaultVMetrics,l=0;l<j.length;l++){var m=j[l];if(m){var n=null,o=null,p=null;c.vertical?m.vmetric?(p=m.vmetric[0],n=m.vmetric[1],o=m.vmetric[2]):(p=m.width,n=.5*m.width,o=k[2]):p=m.width;var q=m.unicode;void 0!==Zb[q]&&(q=Zb[q]),q=N(q);var s=0;b.str.length>0&&(s=r.charSpacing);var t=0,u=0;if(c.vertical){var v=p*r.fontMatrix[0];u=v*r.fontSize+s,i+=u}else{var w=p*r.fontMatrix[0];t=(w*r.fontSize+s)*r.textHScale,h+=t}r.translateTextMatrix(t,u),b.str.push(q)}else h+=r.wordSpacing*r.textHScale}var x=r.textLineMatrix[0],y=r.textLineMatrix[1],z=Math.sqrt(x*x+y*y);x=r.ctm[0],y=r.ctm[1];var A=Math.sqrt(x*x+y*y);return c.vertical?b.height+=Math.abs(i*A*z):b.width+=h*A*z,b}d=d||new yb(new zb);var l={items:[],styles:Object.create(null)},m=l.items,n=.3,o=1.5,p=this,q=this.xref;c=q.fetchIfRef(c)||Aa.empty;var r,s=null,t={},u=new Bb(a,q,d),v=new f;return new Promise(function w(a,f){b.ensureNotTerminated(),v.reset();for(var q,x={},y=[];!(q=v.check())&&(y.length=0,x.args=y,u.read(x));){r=d.state;var A=x.fn;switch(y=x.args,0|A){case $.setFont:return r.fontSize=y[1],j(y[0].name).then(function(){w(a,f)},f);case $.setTextRise:r.textRise=y[0];break;case $.setHScale:r.textHScale=y[0]/100;break;case $.setLeading:r.leading=y[0];break;case $.moveText:r.translateTextLineMatrix(y[0],y[1]),r.textMatrix=r.textLineMatrix.slice();break;case $.setLeadingMoveText:r.leading=-y[1],r.translateTextLineMatrix(y[0],y[1]),r.textMatrix=r.textLineMatrix.slice();break;case $.nextLine:r.carriageReturn();break;case $.setTextMatrix:r.setTextMatrix(y[0],y[1],y[2],y[3],y[4],y[5]),r.setTextLineMatrix(y[0],y[1],y[2],y[3],y[4],y[5]);break;case $.setCharSpacing:r.charSpacing=y[0];break;case $.setWordSpacing:r.wordSpacing=y[0];break;case $.beginText:r.textMatrix=ma.slice(),r.textLineMatrix=ma.slice();break;case $.showSpacedText:for(var E,F=y[0],G=g(),H=0,I=F.length;I>H;H++)if("string"==typeof F[H])k(F[H],G);else{var J=F[H]*r.fontSize/1e3;if(r.font.vertical?(E=J*r.textMatrix[3],r.translateTextMatrix(0,E),G.height+=E):(E=J*r.textHScale*r.textMatrix[0],r.translateTextMatrix(E,0),G.width-=E),F[H]<0&&r.font.spaceWidth>0){var K=-F[H]/r.font.spaceWidth;if(K>o)for(K=Math.round(K);K--;)G.str.push(" ");else K>n&&G.str.push(" ")}}m.push(h(G));break;case $.showText:m.push(h(k(y[0])));break;case $.nextLineShowText:r.carriageReturn(),m.push(h(k(y[0])));break;case $.nextLineSetSpacingShowText:r.wordSpacing=y[0],r.charSpacing=y[1],r.carriageReturn(),m.push(h(k(y[2])));break;case $.paintXObject:if(y[0].code)break;s||(s=c.get("XObject")||Aa.empty);var L=y[0].name;if(t.key===L){t.texts&&(na.appendToArray(m,t.texts.items),na.extendObj(l.styles,t.texts.styles));break}var M=s.get(L);if(!M)break;e(D(M),"XObject should be a stream");var N=M.dict.get("Subtype");if(e(z(N),"XObject should have a Name subtype"),"Form"!==N.name){t.key=L,t.texts=null;break}d.save();var O=M.dict.get("Matrix");return C(O)&&6===O.length&&d.transform(O),p.getTextContent(M,b,M.dict.get("Resources")||c,d).then(function(b){na.appendToArray(m,b.items),na.extendObj(l.styles,b.styles),d.restore(),t.key=L,t.texts=b,w(a,f)},f);case $.setGState:var P=y[0],Q=c.get("ExtGState");if(!B(Q)||!Q.has(P.name))break;var R=Q.get(P.name),S=null;for(var T in R)"Font"===T&&(e(!S),S=R[T]);if(S)return r.fontSize=S[1],j(S[0]).then(function(){w(a,f)},f)}}return q?void i.then(function(){w(a,f)},f):void a(l)})},extractDataStructures:function(a,b,d,e){var f=a.get("ToUnicode")||b.get("ToUnicode");if(f&&(e.toUnicode=this.readToUnicode(f)),e.composite){var g=a.get("CIDSystemInfo");B(g)&&(e.cidSystemInfo={registry:g.get("Registry"),ordering:g.get("Ordering"),supplement:g.get("Supplement")});var h=a.get("CIDToGIDMap");D(h)&&(e.cidToGidMap=this.readCidToGidMap(h))}var i,j=[],k=null;if(a.has("Encoding")){if(i=a.get("Encoding"),B(i)){if(k=i.get("BaseEncoding"),k=z(k)?k.name:null,i.has("Differences"))for(var l=i.get("Differences"),m=0,n=0,o=l.length;o>n;n++){var p=l[n];if(x(p))m=p;else if(z(p))j[m++]=p.name;else{if(F(p)){l[n--]=d.fetch(p);continue}c("Invalid entry in 'Differences' array: "+p)}}}else z(i)?k=i.name:c("Encoding is not a Name nor a Dict");"MacRomanEncoding"!==k&&"MacExpertEncoding"!==k&&"WinAnsiEncoding"!==k&&(k=null)}k?e.defaultEncoding=Pb[k].slice():(i="TrueType"===e.type?Pb.WinAnsiEncoding:Pb.StandardEncoding,e.flags&Ob.Symbolic&&(i=Pb.MacRomanEncoding,e.file||(/Symbol/i.test(e.name)?i=Pb.SymbolSetEncoding:/Dingbats/i.test(e.name)&&(i=Pb.ZapfDingbatsEncoding))),e.defaultEncoding=i),e.differences=j,e.baseEncodingName=k,e.dict=a},readToUnicode:function(a){var b,c=a;if(z(c))return b=Hb.create(c,{url:PDFJS.cMapUrl,packed:PDFJS.cMapPacked},null),b instanceof Fb?new ac(0,65535):new _b(b.getMap());if(D(c)){if(b=Hb.create(c,{url:PDFJS.cMapUrl,packed:PDFJS.cMapPacked},null),b instanceof Fb)return new ac(0,65535);var d=new Array(b.length);return b.forEach(function(a,b){for(var c=[],e=0;e<b.length;e+=2){var f=b.charCodeAt(e)<<8|b.charCodeAt(e+1);if(55296===(63488&f)){e+=2;var g=b.charCodeAt(e)<<8|b.charCodeAt(e+1);c.push(((1023&f)<<10)+(1023&g)+65536)}else c.push(f)}d[a]=String.fromCharCode.apply(String,c)}),new _b(d)}return null},readCidToGidMap:function(a){for(var b=a.getBytes(),c=[],d=0,e=b.length;e>d;d++){var f=b[d++]<<8|b[d];if(0!==f){var g=d>>1;c[g]=f}}return c},extractWidths:function(a,b,c,d){var e,f,g,h,i,j,k,l,m=[],n=0,o=[];if(d.composite){if(n=a.get("DW")||1e3,l=a.get("W"))for(f=0,g=l.length;g>f;f++)if(j=l[f++],k=b.fetchIfRef(l[f]),C(k))for(h=0,i=k.length;i>h;h++)m[j++]=k[h];else{var p=l[++f];for(h=j;k>=h;h++)m[h]=p}if(d.vertical){var q=a.get("DW2")||[880,-1e3];if(e=[q[1],.5*n,q[0]],q=a.get("W2"))for(f=0,g=q.length;g>f;f++)if(j=q[f++],k=b.fetchIfRef(q[f]),C(k))for(h=0,i=k.length;i>h;h++)o[j++]=[k[h++],k[h++],k[h]];else{var r=[q[++f],q[++f],q[++f]];for(h=j;k>=h;h++)o[h]=r}}}else{var s=d.firstChar;if(l=a.get("Widths")){for(h=s,f=0,g=l.length;g>f;f++)m[h++]=l[f];n=parseFloat(c.get("MissingWidth"))||0}else{var t=a.get("BaseFont");if(z(t)){var u=this.getBaseFontMetrics(t.name);m=this.buildCharCodeToWidth(u.widths,d),n=u.defaultWidth}}}var v=!0,w=n;for(var x in m){var y=m[x];if(y)if(w){if(w!==y){v=!1;break}}else w=y}v&&(d.flags|=Ob.FixedPitch),d.defaultWidth=n,d.widths=m,d.defaultVMetrics=e,d.vmetrics=o},isSerifFont:function(a){var b=a.split("-")[0];return b in Sb||-1!==b.search(/serif/gi)},getBaseFontMetrics:function(a){var b=0,c=[],d=!1,e=Qb[a]||a;e in Cc||(e=this.isSerifFont(a)?"Times-Roman":"Helvetica");var f=Cc[e];return x(f)?(b=f,d=!0):c=f,{defaultWidth:b,monospace:d,widths:c}},buildCharCodeToWidth:function(a,b){for(var c=Object.create(null),d=b.differences,e=b.defaultEncoding,f=0;256>f;f++)f in d&&a[d[f]]?c[f]=a[d[f]]:f in e&&a[e[f]]&&(c[f]=a[e[f]]);return c},preEvaluateFont:function(a,b){var d=a,f=a.get("Subtype");e(z(f),"invalid font Subtype");var g,h=!1;if("Type0"===f.name){var i=a.get("DescendantFonts");i||c("Descendant fonts are not specified"),a=C(i)?b.fetchIfRef(i[0]):i,f=a.get("Subtype"),e(z(f),"invalid font Subtype"),h=!0}var j=a.get("FontDescriptor");if(j){var k=new jd,l=d.getRaw("Encoding");if(z(l))k.update(l.name);else if(F(l))k.update(l.num+"_"+l.gen);else if(B(l))for(var m=l.getKeys(),n=0,o=m.length;o>n;n++){var p=l.getRaw(m[n]);z(p)?k.update(p.name):F(p)?k.update(p.num+"_"+p.gen):C(p)&&k.update(p.length.toString())}var q=a.get("ToUnicode")||d.get("ToUnicode");if(D(q)){var r=q.str||q;g=r.buffer?new Uint8Array(r.buffer.buffer,0,r.bufferLength):new Uint8Array(r.bytes.buffer,r.start,r.end-r.start),k.update(g)}else z(q)&&k.update(q.name);var s=a.get("Widths")||d.get("Widths");s&&(g=new Uint8Array(new Uint32Array(s).buffer),k.update(g))}return{descriptor:j,dict:a,baseDict:d,composite:h,type:f.name,hash:k?k.hexdigest():""}},translateFont:function(b,d){var f,g=b.baseDict,h=b.dict,i=b.composite,j=b.descriptor,k=b.type,l=i?65535:255;if(!j){if("Type3"!==k){var m=h.get("BaseFont");z(m)||c("Base font is not specified"),m=m.name.replace(/[,_]/g,"-");var n=this.getBaseFontMetrics(m),o=m.split("-")[0],p=(this.isSerifFont(o)?Ob.Serif:0)|(n.monospace?Ob.FixedPitch:0)|(Tb[o]?Ob.Symbolic:Ob.Nonsymbolic);return f={type:k,name:m,widths:n.widths,defaultWidth:n.defaultWidth,flags:p,firstChar:0,lastChar:l},this.extractDataStructures(h,h,d,f),f.widths=this.buildCharCodeToWidth(n.widths,f),new dc(m,null,f)}j=new Aa(null),j.set("FontName",ya.get(k)),j.set("FontBBox",h.get("FontBBox"))}var q=h.get("FirstChar")||0,r=h.get("LastChar")||l,s=j.get("FontName"),t=h.get("BaseFont");if(y(s)&&(s=ya.get(s)),y(t)&&(t=ya.get(t)),"Type3"!==k){var u=s&&s.name,v=t&&t.name;u!==v&&(a("The FontDescriptor's FontName is \""+u+'" but should be the same as the Font\'s BaseFont "'+v+'"'),u&&v&&0===v.indexOf(u)&&(s=t))}s=s||t,e(z(s),"invalid font name");var w=j.get("FontFile","FontFile2","FontFile3");if(w&&w.dict){var x=w.dict.get("Subtype");x&&(x=x.name);var A=w.dict.get("Length1"),B=w.dict.get("Length2")}if(f={type:k,name:s.name,subtype:x,file:w,length1:A,length2:B,loadedName:g.loadedName,composite:i,wideChars:i,fixedPitch:!1,fontMatrix:h.get("FontMatrix")||T,firstChar:q||0,lastChar:r||l,bbox:j.get("FontBBox"),ascent:j.get("Ascent"),descent:j.get("Descent"),xHeight:j.get("XHeight"),capHeight:j.get("CapHeight"),flags:j.get("Flags"),italicAngle:j.get("ItalicAngle"),coded:!1},i){var C=g.get("Encoding");z(C)&&(f.cidEncoding=C.name),f.cMap=Hb.create(C,{url:PDFJS.cMapUrl,packed:PDFJS.cMapPacked},null),f.vertical=f.cMap.vertical}return this.extractDataStructures(h,g,d,f),this.extractWidths(h,d,j,f),"Type3"===k&&(f.isType3Font=!0),new dc(s.name,w,f)}},d}(),wb=function(){function a(a,b,c){this.loadedName=a,this.font=b,this.dict=c,this.type3Loaded=null,this.sent=!1}return a.prototype={send:function(a){if(!this.sent){var b=this.font.exportData();a.send("commonobj",[this.loadedName,"Font",b]),this.sent=!0}},loadType3Data:function(a,c,d,f){if(e(this.font.isType3Font),this.type3Loaded)return this.type3Loaded;for(var g=this.font,h=Promise.resolve(),i=this.dict.get("CharProcs").getAll(),j=this.dict.get("Resources")||c,k=Object.keys(i),l={},m=0,n=k.length;n>m;++m)h=h.then(function(c){var e=i[c],g=new xb;return a.getOperatorList(e,f,j,g).then(function(){l[c]=g.getIR(),d.addDependencies(g.dependencies)},function(a){b('Type3 font resource "'+c+'" is not available');var d=new xb;l[c]=d.getIR()})}.bind(this,k[m]));return this.type3Loaded=h.then(function(){g.charProcOperatorList=l}),this.type3Loaded}},a}(),xb=function(){function a(a){for(var b=[],c=a.fnArray,d=a.argsArray,e=0,f=a.length;f>e;e++)switch(c[e]){case $.paintInlineImageXObject:case $.paintInlineImageXObjectGroup:case $.paintImageMaskXObject:var g=d[e][0];g.cached||b.push(g.data.buffer)}return b}function b(a,b,c){this.messageHandler=b,this.fnArray=[],this.argsArray=[],this.dependencies={},this.pageIndex=c,this.intent=a}var c=1e3,d=c-5;return b.prototype={get length(){return this.argsArray.length},addOp:function(a,b){this.fnArray.push(a),this.argsArray.push(b),this.messageHandler&&(this.fnArray.length>=c?this.flush():this.fnArray.length>=d&&(a===$.restore||a===$.endText)&&this.flush())},addDependency:function(a){a in this.dependencies||(this.dependencies[a]=!0,this.addOp($.dependency,[a]))},addDependencies:function(a){for(var b in a)this.addDependency(b)},addOpList:function(a){na.extendObj(this.dependencies,a.dependencies);for(var b=0,c=a.length;c>b;b++)this.addOp(a.fnArray[b],a.argsArray[b])},getIR:function(){return{fnArray:this.fnArray,argsArray:this.argsArray,length:this.length}},flush:function(b){"oplist"!==this.intent&&(new Cb).optimize(this);var c=a(this);this.messageHandler.send("RenderPageChunk",{operatorList:{fnArray:this.fnArray,argsArray:this.argsArray,lastChunk:b,length:this.length},pageIndex:this.pageIndex,intent:this.intent},c),this.dependencies={},this.fnArray.length=0,this.argsArray.length=0}},b}(),yb=function(){function a(a){this.state=a,this.stateStack=[]}return a.prototype={save:function(){var a=this.state;this.stateStack.push(this.state),this.state=a.clone()},restore:function(){var a=this.stateStack.pop();a&&(this.state=a)},transform:function(a){this.state.ctm=na.transform(this.state.ctm,a)}},a}(),zb=function(){function a(){this.ctm=new Float32Array(ma),this.fontSize=0,this.font=null,this.fontMatrix=T,this.textMatrix=ma.slice(),this.textLineMatrix=ma.slice(),this.charSpacing=0,this.wordSpacing=0,this.leading=0,this.textHScale=1,this.textRise=0}return a.prototype={setTextMatrix:function(a,b,c,d,e,f){var g=this.textMatrix;g[0]=a,g[1]=b,g[2]=c,g[3]=d,g[4]=e,g[5]=f},setTextLineMatrix:function(a,b,c,d,e,f){var g=this.textLineMatrix;g[0]=a,g[1]=b,g[2]=c,g[3]=d,g[4]=e,g[5]=f},translateTextMatrix:function(a,b){var c=this.textMatrix;c[4]=c[0]*a+c[2]*b+c[4],c[5]=c[1]*a+c[3]*b+c[5]},translateTextLineMatrix:function(a,b){var c=this.textLineMatrix;c[4]=c[0]*a+c[2]*b+c[4],c[5]=c[1]*a+c[3]*b+c[5]},calcRenderMatrix:function(a){var b=[this.fontSize*this.textHScale,0,0,this.fontSize,0,this.textRise];return na.transform(a,na.transform(this.textMatrix,b))},carriageReturn:function(){this.translateTextLineMatrix(0,-this.leading),this.textMatrix=this.textLineMatrix.slice()},clone:function(){var a=Object.create(this);return a.textMatrix=this.textMatrix.slice(),a.textLineMatrix=this.textLineMatrix.slice(),a.fontMatrix=this.fontMatrix.slice(),a}},a}(),Ab=function(){function a(){this.ctm=new Float32Array(ma),this.font=null,this.textRenderingMode=U.FILL,this.fillColorSpace=Xa.singletons.gray,this.strokeColorSpace=Xa.singletons.gray}return a.prototype={clone:function(){return Object.create(this)}},a}(),Bb=function(){function c(a,b,c){this.parser=new Fc(new Gc(a,d),!1,b),this.stateManager=c,this.nonProcessedArgs=[]}var d={w:{id:$.setLineWidth,numArgs:1,variableArgs:!1},J:{id:$.setLineCap,numArgs:1,variableArgs:!1},j:{id:$.setLineJoin,numArgs:1,variableArgs:!1},M:{id:$.setMiterLimit,numArgs:1,variableArgs:!1},d:{id:$.setDash,numArgs:2,variableArgs:!1},ri:{id:$.setRenderingIntent,numArgs:1,variableArgs:!1},i:{id:$.setFlatness,numArgs:1,variableArgs:!1},gs:{id:$.setGState,numArgs:1,variableArgs:!1},q:{id:$.save,numArgs:0,variableArgs:!1},Q:{id:$.restore,numArgs:0,variableArgs:!1},cm:{id:$.transform,numArgs:6,variableArgs:!1},m:{id:$.moveTo,numArgs:2,variableArgs:!1},l:{id:$.lineTo,numArgs:2,variableArgs:!1},c:{id:$.curveTo,numArgs:6,variableArgs:!1},v:{id:$.curveTo2,numArgs:4,variableArgs:!1},y:{id:$.curveTo3,numArgs:4,variableArgs:!1},h:{id:$.closePath,numArgs:0,variableArgs:!1},re:{id:$.rectangle,numArgs:4,variableArgs:!1},S:{id:$.stroke,numArgs:0,variableArgs:!1},s:{id:$.closeStroke,numArgs:0,variableArgs:!1},f:{id:$.fill,numArgs:0,variableArgs:!1},F:{id:$.fill,numArgs:0,variableArgs:!1},"f*":{id:$.eoFill,numArgs:0,variableArgs:!1},B:{id:$.fillStroke,numArgs:0,variableArgs:!1},"B*":{id:$.eoFillStroke,numArgs:0,variableArgs:!1},b:{id:$.closeFillStroke,numArgs:0,variableArgs:!1},"b*":{id:$.closeEOFillStroke,numArgs:0,variableArgs:!1},n:{id:$.endPath,numArgs:0,variableArgs:!1},W:{id:$.clip,numArgs:0,variableArgs:!1},"W*":{id:$.eoClip,numArgs:0,variableArgs:!1},BT:{id:$.beginText,numArgs:0,variableArgs:!1},ET:{id:$.endText,numArgs:0,variableArgs:!1},Tc:{id:$.setCharSpacing,numArgs:1,variableArgs:!1},Tw:{id:$.setWordSpacing,numArgs:1,variableArgs:!1},Tz:{id:$.setHScale,numArgs:1,variableArgs:!1},TL:{id:$.setLeading,numArgs:1,variableArgs:!1},Tf:{id:$.setFont,numArgs:2,variableArgs:!1},Tr:{id:$.setTextRenderingMode,numArgs:1,variableArgs:!1},Ts:{id:$.setTextRise,numArgs:1,variableArgs:!1},Td:{id:$.moveText,numArgs:2,variableArgs:!1},TD:{id:$.setLeadingMoveText,numArgs:2,variableArgs:!1},Tm:{id:$.setTextMatrix,numArgs:6,variableArgs:!1},"T*":{id:$.nextLine,numArgs:0,variableArgs:!1},Tj:{id:$.showText,numArgs:1,variableArgs:!1},TJ:{id:$.showSpacedText,numArgs:1,variableArgs:!1},"'":{id:$.nextLineShowText,numArgs:1,variableArgs:!1},'"':{id:$.nextLineSetSpacingShowText,numArgs:3,variableArgs:!1},d0:{id:$.setCharWidth,numArgs:2,variableArgs:!1},d1:{id:$.setCharWidthAndBounds,numArgs:6,variableArgs:!1},CS:{id:$.setStrokeColorSpace,numArgs:1,variableArgs:!1},cs:{id:$.setFillColorSpace,numArgs:1,variableArgs:!1},SC:{id:$.setStrokeColor,numArgs:4,variableArgs:!0},SCN:{id:$.setStrokeColorN,numArgs:33,variableArgs:!0},sc:{id:$.setFillColor,numArgs:4,variableArgs:!0},scn:{id:$.setFillColorN,numArgs:33,variableArgs:!0},G:{id:$.setStrokeGray,numArgs:1,variableArgs:!1},g:{id:$.setFillGray,numArgs:1,variableArgs:!1},RG:{id:$.setStrokeRGBColor,numArgs:3,variableArgs:!1},rg:{id:$.setFillRGBColor,numArgs:3,variableArgs:!1},K:{id:$.setStrokeCMYKColor,numArgs:4,variableArgs:!1},k:{id:$.setFillCMYKColor,numArgs:4,variableArgs:!1},sh:{id:$.shadingFill,numArgs:1,variableArgs:!1},BI:{id:$.beginInlineImage,numArgs:0,variableArgs:!1},ID:{id:$.beginImageData,numArgs:0,variableArgs:!1},EI:{id:$.endInlineImage,numArgs:1,variableArgs:!1},Do:{id:$.paintXObject,numArgs:1,variableArgs:!1},MP:{id:$.markPoint,numArgs:1,variableArgs:!1},DP:{id:$.markPointProps,numArgs:2,variableArgs:!1},BMC:{id:$.beginMarkedContent,numArgs:1,variableArgs:!1},BDC:{id:$.beginMarkedContentProps,numArgs:2,variableArgs:!1},EMC:{id:$.endMarkedContent,numArgs:0,variableArgs:!1},BX:{id:$.beginCompat,numArgs:0,variableArgs:!1},EX:{id:$.endCompat,numArgs:0,variableArgs:!1},BM:null,BD:null,"true":null,fa:null,fal:null,fals:null,"false":null,nu:null,nul:null,"null":null};return c.prototype={get savedStatesDepth(){return this.stateManager.stateStack.length},read:function(c){for(var f=c.args;;){var g=this.parser.getObj();if(A(g)){var h=g.cmd,i=d[h];if(!i){b('Unknown command "'+h+'"');continue}var j=i.id,k=i.numArgs,l=null!==f?f.length:0;if(i.variableArgs)l>k&&a("Command "+j+": expected [0,"+k+"] args, but received "+l+" args");else{if(l!==k){for(var m=this.nonProcessedArgs;l>k;)m.push(f.shift()),l--;for(;k>l&&0!==m.length;)f||(f=[]),f.unshift(m.pop()),l++}if(k>l){a("Command "+j+": because expected "+k+" args, but received "+l+" args; skipping"),f=null;continue}}return this.preprocessCommand(j,f),c.fn=j,c.args=f,!0}if(R(g))return!1;null!==g&&(f||(f=[]),f.push(g instanceof Aa?g.getAll():g),e(f.length<=33,"Too many arguments"))}},preprocessCommand:function(a,b){switch(0|a){case $.save:this.stateManager.save();break;case $.restore:this.stateManager.restore();break;case $.transform:this.stateManager.transform(b)}}},c}(),Cb=function(){function a(a,b,c){for(var d=a,e=0,f=b.length-1;f>e;e++){var g=b[e];d=d[g]||(d[g]=[])}d[b[b.length-1]]=c}function b(a,b,c,d){for(var e=a+2,f=0;b>f;f++){var g=d[e+4*f],h=1===g.length&&g[0];if(!h||1!==h.width||1!==h.height||h.data.length&&(1!==h.data.length||0!==h.data[0]))break;c[e+4*f]=$.paintSolidColorImageMask}return b-f}function c(){}var d=[];return a(d,[$.save,$.transform,$.paintInlineImageXObject,$.restore],function(a){for(var b=10,c=200,d=1e3,e=1,f=a.fnArray,g=a.argsArray,h=a.iCurr,i=h-3,j=h-2,k=h-1,l=i+4,m=f.length;m>l+3&&f[l]===$.save&&f[l+1]===$.transform&&f[l+2]===$.paintInlineImageXObject&&f[l+3]===$.restore;)l+=4;var n=Math.min((l-i)/4,c);if(b>n)return l;var o,p=0,q=[],r=0,s=e,t=e;for(o=0;n>o;o++){var u=g[j+(o<<2)],v=g[k+(o<<2)][0];s+v.width>d&&(p=Math.max(p,s),t+=r+2*e,s=0,r=0),q.push({transform:u,x:s,y:t,w:v.width,h:v.height}),s+=v.width+2*e,r=Math.max(r,v.height)}var w=Math.max(p,s)+e,x=t+r+e,y=new Uint8Array(w*x*4),z=w<<2;for(o=0;n>o;o++){var A=g[k+(o<<2)][0].data,B=q[o].w<<2,C=0,D=q[o].x+q[o].y*w<<2;y.set(A.subarray(0,B),D-z);for(var E=0,F=q[o].h;F>E;E++)y.set(A.subarray(C,C+B),D),C+=B,D+=z;for(y.set(A.subarray(C-B,C),D);D>=0;)A[D-4]=A[D],A[D-3]=A[D+1],A[D-2]=A[D+2],A[D-1]=A[D+3],A[D+B]=A[D+B-4],A[D+B+1]=A[D+B-3],A[D+B+2]=A[D+B-2],A[D+B+3]=A[D+B-1],D-=z}return f.splice(i,4*n,$.paintInlineImageXObjectGroup),g.splice(i,4*n,[{width:w,height:x,kind:V.RGBA_32BPP,data:y},q]),i+1}),a(d,[$.save,$.transform,$.paintImageMaskXObject,$.restore],function(a){for(var c=10,d=100,e=1e3,f=a.fnArray,g=a.argsArray,h=a.iCurr,i=h-3,j=h-2,k=h-1,l=i+4,m=f.length;m>l+3&&f[l]===$.save&&f[l+1]===$.transform&&f[l+2]===$.paintImageMaskXObject&&f[l+3]===$.restore;)l+=4;var n=(l-i)/4;if(n=b(i,n,f,g),c>n)return l;var o,p,q,r=!1,s=g[k][0];if(0===g[j][1]&&0===g[j][2]){r=!0;var t=g[j][0],u=g[j][3];p=j+4;var v=k+4;for(o=1;n>o;o++,p+=4,v+=4)if(q=g[p],g[v][0]!==s||q[0]!==t||0!==q[1]||0!==q[2]||q[3]!==u){c>o?r=!1:n=o;break}}if(r){n=Math.min(n,e);var w=new Float32Array(2*n);for(p=j,o=0;n>o;o++,p+=4)q=g[p],w[o<<1]=q[4],w[(o<<1)+1]=q[5];f.splice(i,4*n,$.paintImageMaskXObjectRepeat),g.splice(i,4*n,[s,t,u,w])}else{n=Math.min(n,d);var x=[];for(o=0;n>o;o++){q=g[j+(o<<2)];var y=g[k+(o<<2)][0];x.push({data:y.data,width:y.width,height:y.height,transform:q})}f.splice(i,4*n,$.paintImageMaskXObjectGroup),g.splice(i,4*n,[x])}return i+1}),a(d,[$.save,$.transform,$.paintImageXObject,$.restore],function(a){var b=3,c=1e3,d=a.fnArray,e=a.argsArray,f=a.iCurr,g=f-3,h=f-2,i=f-1,j=f;if(0!==e[h][1]||0!==e[h][2])return j+1;for(var k=e[i][0],l=e[h][0],m=e[h][3],n=g+4,o=d.length;o>n+3&&d[n]===$.save&&d[n+1]===$.transform&&d[n+2]===$.paintImageXObject&&d[n+3]===$.restore&&e[n+1][0]===l&&0===e[n+1][1]&&0===e[n+1][2]&&e[n+1][3]===m&&e[n+2][0]===k;)n+=4;var p=Math.min((n-g)/4,c);if(b>p)return n;for(var q=new Float32Array(2*p),r=h,s=0;p>s;s++,r+=4){var t=e[r];q[s<<1]=t[4],q[(s<<1)+1]=t[5]}var u=[k,l,m,q];return d.splice(g,4*p,$.paintImageXObjectRepeat),e.splice(g,4*p,u),g+1}),a(d,[$.beginText,$.setFont,$.setTextMatrix,$.showText,$.endText],function(a){for(var b=3,c=1e3,d=a.fnArray,e=a.argsArray,f=a.iCurr,g=f-4,h=f-3,i=f-2,j=f-1,k=f,l=e[h][0],m=e[h][1],n=g+5,o=d.length;o>n+4&&d[n]===$.beginText&&d[n+1]===$.setFont&&d[n+2]===$.setTextMatrix&&d[n+3]===$.showText&&d[n+4]===$.endText&&e[n+1][0]===l&&e[n+1][1]===m;)n+=5;var p=Math.min((n-g)/5,c);if(b>p)return n;var q=g;g>=4&&d[g-4]===d[h]&&d[g-3]===d[i]&&d[g-2]===d[j]&&d[g-1]===d[k]&&e[g-4][0]===l&&e[g-4][1]===m&&(p++,q-=5);for(var r=q+4,s=1;p>s;s++)d.splice(r,3),e.splice(r,3),r+=2;return r+1}),c.prototype={optimize:function(a){for(var b,c=a.fnArray,e=a.argsArray,f={iCurr:0,fnArray:c,argsArray:e},g=0,h=c.length;h>g;)b=(b||d)[c[g]],"function"==typeof b?(f.iCurr=g,g=b(f),b=void 0,h=f.fnArray.length):g++}},c}(),Db=["Adobe-GB1-UCS2","Adobe-CNS1-UCS2","Adobe-Japan1-UCS2","Adobe-Korea1-UCS2","78-EUC-H","78-EUC-V","78-H","78-RKSJ-H","78-RKSJ-V","78-V","78ms-RKSJ-H","78ms-RKSJ-V","83pv-RKSJ-H","90ms-RKSJ-H","90ms-RKSJ-V","90msp-RKSJ-H","90msp-RKSJ-V","90pv-RKSJ-H","90pv-RKSJ-V","Add-H","Add-RKSJ-H","Add-RKSJ-V","Add-V","Adobe-CNS1-0","Adobe-CNS1-1","Adobe-CNS1-2","Adobe-CNS1-3","Adobe-CNS1-4","Adobe-CNS1-5","Adobe-CNS1-6","Adobe-GB1-0","Adobe-GB1-1","Adobe-GB1-2","Adobe-GB1-3","Adobe-GB1-4","Adobe-GB1-5","Adobe-Japan1-0","Adobe-Japan1-1","Adobe-Japan1-2","Adobe-Japan1-3","Adobe-Japan1-4","Adobe-Japan1-5","Adobe-Japan1-6","Adobe-Korea1-0","Adobe-Korea1-1","Adobe-Korea1-2","B5-H","B5-V","B5pc-H","B5pc-V","CNS-EUC-H","CNS-EUC-V","CNS1-H","CNS1-V","CNS2-H","CNS2-V","ETHK-B5-H","ETHK-B5-V","ETen-B5-H","ETen-B5-V","ETenms-B5-H","ETenms-B5-V","EUC-H","EUC-V","Ext-H","Ext-RKSJ-H","Ext-RKSJ-V","Ext-V","GB-EUC-H","GB-EUC-V","GB-H","GB-V","GBK-EUC-H","GBK-EUC-V","GBK2K-H","GBK2K-V","GBKp-EUC-H","GBKp-EUC-V","GBT-EUC-H","GBT-EUC-V","GBT-H","GBT-V","GBTpc-EUC-H","GBTpc-EUC-V","GBpc-EUC-H","GBpc-EUC-V","H","HKdla-B5-H","HKdla-B5-V","HKdlb-B5-H","HKdlb-B5-V","HKgccs-B5-H","HKgccs-B5-V","HKm314-B5-H","HKm314-B5-V","HKm471-B5-H","HKm471-B5-V","HKscs-B5-H","HKscs-B5-V","Hankaku","Hiragana","KSC-EUC-H","KSC-EUC-V","KSC-H","KSC-Johab-H","KSC-Johab-V","KSC-V","KSCms-UHC-H","KSCms-UHC-HW-H","KSCms-UHC-HW-V","KSCms-UHC-V","KSCpc-EUC-H","KSCpc-EUC-V","Katakana","NWP-H","NWP-V","RKSJ-H","RKSJ-V","Roman","UniCNS-UCS2-H","UniCNS-UCS2-V","UniCNS-UTF16-H","UniCNS-UTF16-V","UniCNS-UTF32-H","UniCNS-UTF32-V","UniCNS-UTF8-H","UniCNS-UTF8-V","UniGB-UCS2-H","UniGB-UCS2-V","UniGB-UTF16-H","UniGB-UTF16-V","UniGB-UTF32-H","UniGB-UTF32-V","UniGB-UTF8-H","UniGB-UTF8-V","UniJIS-UCS2-H","UniJIS-UCS2-HW-H","UniJIS-UCS2-HW-V","UniJIS-UCS2-V","UniJIS-UTF16-H","UniJIS-UTF16-V","UniJIS-UTF32-H","UniJIS-UTF32-V","UniJIS-UTF8-H","UniJIS-UTF8-V","UniJIS2004-UTF16-H","UniJIS2004-UTF16-V","UniJIS2004-UTF32-H","UniJIS2004-UTF32-V","UniJIS2004-UTF8-H","UniJIS2004-UTF8-V","UniJISPro-UCS2-HW-V","UniJISPro-UCS2-V","UniJISPro-UTF8-V","UniJISX0213-UTF32-H","UniJISX0213-UTF32-V","UniJISX02132004-UTF32-H","UniJISX02132004-UTF32-V","UniKS-UCS2-H","UniKS-UCS2-V","UniKS-UTF16-H","UniKS-UTF16-V","UniKS-UTF32-H","UniKS-UTF32-V","UniKS-UTF8-H","UniKS-UTF8-V","V","WP-Symbol"],Eb=function(){
+function a(a){this.codespaceRanges=[[],[],[],[]],this.numCodespaceRanges=0,this._map=[],this.name="",this.vertical=!1,this.useCMap=null,this.builtInCMap=a}return a.prototype={addCodespaceRange:function(a,b,c){this.codespaceRanges[a-1].push(b,c),this.numCodespaceRanges++},mapCidRange:function(a,b,c){for(;b>=a;)this._map[a++]=c++},mapBfRange:function(a,b,c){for(var d=c.length-1;b>=a;)this._map[a++]=c,c=c.substr(0,d)+String.fromCharCode(c.charCodeAt(d)+1)},mapBfRangeToArray:function(a,b,c){for(var d=0,e=c.length;b>=a&&e>d;)this._map[a]=c[d++],++a},mapOne:function(a,b){this._map[a]=b},lookup:function(a){return this._map[a]},contains:function(a){return void 0!==this._map[a]},forEach:function(a){var b,c=this._map,d=c.length;if(65536>=d)for(b=0;d>b;b++)void 0!==c[b]&&a(b,c[b]);else for(b in this._map)a(b,c[b])},charCodeOf:function(a){return this._map.indexOf(a)},getMap:function(){return this._map},readCharCode:function(a,b,c){for(var d=0,e=this.codespaceRanges,f=this.codespaceRanges.length,g=0;f>g;g++){d=(d<<8|a.charCodeAt(b+g))>>>0;for(var h=e[g],i=0,j=h.length;j>i;){var k=h[i++],l=h[i++];if(d>=k&&l>=d)return c.charcode=d,void(c.length=g+1)}}c.charcode=0,c.length=1},get length(){return this._map.length},get isIdentityCMap(){if("Identity-H"!==this.name&&"Identity-V"!==this.name)return!1;if(65536!==this._map.length)return!1;for(var a=0;65536>a;a++)if(this._map[a]!==a)return!1;return!0}},a}(),Fb=function(){function a(a,b){Eb.call(this),this.vertical=a,this.addCodespaceRange(b,0,65535)}return na.inherit(a,Eb,{}),a.prototype={addCodespaceRange:Eb.prototype.addCodespaceRange,mapCidRange:function(a,b,d){c("should not call mapCidRange")},mapBfRange:function(a,b,d){c("should not call mapBfRange")},mapBfRangeToArray:function(a,b,d){c("should not call mapBfRangeToArray")},mapOne:function(a,b){c("should not call mapCidOne")},lookup:function(a){return w(a)&&65535>=a?a:void 0},contains:function(a){return w(a)&&65535>=a},forEach:function(a){for(var b=0;65535>=b;b++)a(b,b)},charCodeOf:function(a){return w(a)&&65535>=a?a:-1},getMap:function(){for(var a=new Array(65536),b=0;65535>=b;b++)a[b]=b;return a},readCharCode:Eb.prototype.readCharCode,get length(){return 65536},get isIdentityCMap(){c("should not access .isIdentityCMap")}},a}(),Gb=function(){function a(a){var b=PDFJS.disableWorker,d=new XMLHttpRequest;if(d.open("GET",a,!1),!b)try{d.responseType="arraybuffer",b="arraybuffer"!==d.responseType}catch(e){b=!0}if(b&&d.overrideMimeType&&d.overrideMimeType("text/plain; charset=x-user-defined"),d.send(null),(b?d.responseText:d.response)||c("Unable to get binary cMap at: "+a),b){var f=Array.prototype.map.call(d.responseText,function(a){return 255&a.charCodeAt(0)});return new Uint8Array(f)}return new Uint8Array(d.response)}function b(a,b){for(var c=0,d=0;b>=d;d++)c=c<<8|a[d];return c>>>0}function d(a,b){return 1===b?String.fromCharCode(a[0],a[1]):3===b?String.fromCharCode(a[0],a[1],a[2],a[3]):String.fromCharCode.apply(null,a.subarray(0,b+1))}function f(a,b,c){for(var d=0,e=c;e>=0;e--)d+=a[e]+b[e],a[e]=255&d,d>>=8}function g(a,b){for(var c=1,d=b;d>=0&&c>0;d--)c+=a[d],a[d]=255&c,c>>=8}function h(a){this.buffer=a,this.pos=0,this.end=a.length,this.tmpBuf=new Uint8Array(l)}function i(i,j,l){var m=a(i),n=new h(m),o=n.readByte();j.vertical=!!(1&o);for(var p,q,r=null,s=new Uint8Array(k),t=new Uint8Array(k),u=new Uint8Array(k),v=new Uint8Array(k),w=new Uint8Array(k);(q=n.readByte())>=0;){var x=q>>5;if(7!==x){var y=!!(16&q),z=15&q;e(k>=z+1);var A,B=1,C=n.readNumber();switch(x){case 0:for(n.readHex(s,z),n.readHexNumber(t,z),f(t,s,z),j.addCodespaceRange(z+1,b(s,z),b(t,z)),A=1;C>A;A++)g(t,z),n.readHexNumber(s,z),f(s,t,z),n.readHexNumber(t,z),f(t,s,z),j.addCodespaceRange(z+1,b(s,z),b(t,z));break;case 1:for(n.readHex(s,z),n.readHexNumber(t,z),f(t,s,z),p=n.readNumber(),A=1;C>A;A++)g(t,z),n.readHexNumber(s,z),f(s,t,z),n.readHexNumber(t,z),f(t,s,z),p=n.readNumber();break;case 2:for(n.readHex(u,z),p=n.readNumber(),j.mapOne(b(u,z),p),A=1;C>A;A++)g(u,z),y||(n.readHexNumber(w,z),f(u,w,z)),p=n.readSigned()+(p+1),j.mapOne(b(u,z),p);break;case 3:for(n.readHex(s,z),n.readHexNumber(t,z),f(t,s,z),p=n.readNumber(),j.mapCidRange(b(s,z),b(t,z),p),A=1;C>A;A++)g(t,z),y?s.set(t):(n.readHexNumber(s,z),f(s,t,z)),n.readHexNumber(t,z),f(t,s,z),p=n.readNumber(),j.mapCidRange(b(s,z),b(t,z),p);break;case 4:for(n.readHex(u,B),n.readHex(v,z),j.mapOne(b(u,B),d(v,z)),A=1;C>A;A++)g(u,B),y||(n.readHexNumber(w,B),f(u,w,B)),g(v,z),n.readHexSigned(w,z),f(v,w,z),j.mapOne(b(u,B),d(v,z));break;case 5:for(n.readHex(s,B),n.readHexNumber(t,B),f(t,s,B),n.readHex(v,z),j.mapBfRange(b(s,B),b(t,B),d(v,z)),A=1;C>A;A++)g(t,B),y?s.set(t):(n.readHexNumber(s,B),f(s,t,B)),n.readHexNumber(t,B),f(t,s,B),n.readHex(v,z),j.mapBfRange(b(s,B),b(t,B),d(v,z));break;default:c("Unknown type: "+x)}}else switch(31&q){case 0:n.readString();break;case 1:r=n.readString()}}return r&&l(r),j}function j(){}var k=16,l=19;return h.prototype={readByte:function(){return this.pos>=this.end?-1:this.buffer[this.pos++]},readNumber:function(){var a,b=0;do{var d=this.readByte();0>d&&c("unexpected EOF in bcmap"),a=!(128&d),b=b<<7|127&d}while(!a);return b},readSigned:function(){var a=this.readNumber();return 1&a?~(a>>>1):a>>>1},readHex:function(a,b){a.set(this.buffer.subarray(this.pos,this.pos+b+1)),this.pos+=b+1},readHexNumber:function(a,b){var d,e=this.tmpBuf,f=0;do{var g=this.readByte();0>g&&c("unexpected EOF in bcmap"),d=!(128&g),e[f++]=127&g}while(!d);for(var h=b,i=0,j=0;h>=0;){for(;8>j&&e.length>0;)i=e[--f]<<j|i,j+=7;a[h]=255&i,h--,i>>=8,j-=8}},readHexSigned:function(a,b){this.readHexNumber(a,b);for(var c=1&a[b]?255:0,d=0,e=0;b>=e;e++)d=(1&d)<<8|a[e],a[e]=d>>1^c},readString:function(){for(var a=this.readNumber(),b="",c=0;a>c;c++)b+=String.fromCharCode(this.readNumber());return b}},j.prototype={read:i},j}(),Hb=function(){function a(a){for(var b=0,c=0;c<a.length;c++)b=b<<8|a.charCodeAt(c);return b>>>0}function d(a){y(a)||c("Malformed CMap: expected string.")}function f(a){w(a)||c("Malformed CMap: expected int.")}function g(b,c){for(;;){var e=c.getObj();if(R(e))break;if(A(e,"endbfchar"))return;d(e);var f=a(e);e=c.getObj(),d(e);var g=e;b.mapOne(f,g)}}function h(b,e){for(;;){var f=e.getObj();if(R(f))break;if(A(f,"endbfrange"))return;d(f);var g=a(f);f=e.getObj(),d(f);var h=a(f);if(f=e.getObj(),w(f)||y(f)){var i=w(f)?String.fromCharCode(f):f;b.mapBfRange(g,h,i)}else{if(!A(f,"["))break;f=e.getObj();for(var j=[];!A(f,"]")&&!R(f);)j.push(f),f=e.getObj();b.mapBfRangeToArray(g,h,j)}}c("Invalid bf range.")}function i(b,c){for(;;){var e=c.getObj();if(R(e))break;if(A(e,"endcidchar"))return;d(e);var g=a(e);e=c.getObj(),f(e);var h=e;b.mapOne(g,h)}}function j(b,c){for(;;){var e=c.getObj();if(R(e))break;if(A(e,"endcidrange"))return;d(e);var g=a(e);e=c.getObj(),d(e);var h=a(e);e=c.getObj(),f(e);var i=e;b.mapCidRange(g,h,i)}}function k(b,d){for(;;){var e=d.getObj();if(R(e))break;if(A(e,"endcodespacerange"))return;if(!y(e))break;var f=a(e);if(e=d.getObj(),!y(e))break;var g=a(e);b.addCodespaceRange(e.length,f,g)}c("Invalid codespace range.")}function l(a,b){var c=b.getObj();w(c)&&(a.vertical=!!c)}function m(a,b){var c=b.getObj();z(c)&&y(c.name)&&(a.name=c.name)}function n(a,b,c,d){var e,f;a:for(;;){var n=b.getObj();if(R(n))break;if(z(n))"WMode"===n.name?l(a,b):"CMapName"===n.name&&m(a,b),e=n;else if(A(n))switch(n.cmd){case"endcmap":break a;case"usecmap":z(e)&&(f=e.name);break;case"begincodespacerange":k(a,b);break;case"beginbfchar":g(a,b);break;case"begincidchar":i(a,b);break;case"beginbfrange":h(a,b);break;case"begincidrange":j(a,b)}}!d&&f&&(d=f),d&&o(a,c,d)}function o(a,b,c){if(a.useCMap=q(c,b),0===a.numCodespaceRanges){for(var d=a.useCMap.codespaceRanges,e=0;e<d.length;e++)a.codespaceRanges[e]=d[e].slice();a.numCodespaceRanges=a.useCMap.numCodespaceRanges}a.useCMap.forEach(function(b,c){a.contains(b)||a.mapOne(b,a.useCMap.lookup(b))})}function p(a,b){var c=b.url+a+".bcmap",d=new Eb(!0);return(new Gb).read(c,d,function(a){o(d,b,a)}),d}function q(a,b){if("Identity-H"===a)return new Fb(!1,2);if("Identity-V"===a)return new Fb(!0,2);if(-1===Db.indexOf(a)&&c("Unknown cMap name: "+a),e(b,"built-in cMap parameters are not provided"),b.packed)return p(a,b);var d=new XMLHttpRequest,f=b.url+a;d.open("GET",f,!1),d.send(null),d.responseText||c("Unable to get cMap at: "+f);var g=new Eb(!0),h=new Gc(new Nc(d.responseText));return n(g,h,b,null),g}return{create:function(a,d,e){if(z(a))return q(a.name,d);if(D(a)){var f=new Eb,g=new Gc(a);try{n(f,g,d,e)}catch(h){b("Invalid CMap data. "+h)}return f.isIdentityCMap?q(f.name,d):f}c("Encoding required.")}}}(),Ib=57344,Jb=63743,Kb=!1,Lb=1e3,Mb=!1,Nb=!1,Ob={FixedPitch:1,Serif:2,Symbolic:4,Script:8,Nonsymbolic:32,Italic:64,AllCap:65536,SmallCap:131072,ForceBold:262144},Pb={ExpertEncoding:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],MacExpertEncoding:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","centoldstyle","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","","threequartersemdash","","questionsmall","","","","","Ethsmall","","","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","","","","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hypheninferior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","asuperior","centsuperior","","","","","Aacutesmall","Agravesmall","Acircumflexsmall","Adieresissmall","Atildesmall","Aringsmall","Ccedillasmall","Eacutesmall","Egravesmall","Ecircumflexsmall","Edieresissmall","Iacutesmall","Igravesmall","Icircumflexsmall","Idieresissmall","Ntildesmall","Oacutesmall","Ogravesmall","Ocircumflexsmall","Odieresissmall","Otildesmall","Uacutesmall","Ugravesmall","Ucircumflexsmall","Udieresissmall","","eightsuperior","fourinferior","threeinferior","sixinferior","eightinferior","seveninferior","Scaronsmall","","centinferior","twoinferior","","Dieresissmall","","Caronsmall","osuperior","fiveinferior","","commainferior","periodinferior","Yacutesmall","","dollarinferior","","Thornsmall","","nineinferior","zeroinferior","Zcaronsmall","AEsmall","Oslashsmall","questiondownsmall","oneinferior","Lslashsmall","","","","","","","Cedillasmall","","","","","","OEsmall","figuredash","hyphensuperior","","","","","exclamdownsmall","","Ydieresissmall","","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","ninesuperior","zerosuperior","","esuperior","rsuperior","tsuperior","","","isuperior","ssuperior","dsuperior","","","","","","lsuperior","Ogoneksmall","Brevesmall","Macronsmall","bsuperior","nsuperior","msuperior","commasuperior","periodsuperior","Dotaccentsmall","Ringsmall"],MacRomanEncoding:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","space","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron"],StandardEncoding:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls"],WinAnsiEncoding:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","bullet","Euro","bullet","quotesinglbase","florin","quotedblbase","ellipsis","dagger","daggerdbl","circumflex","perthousand","Scaron","guilsinglleft","OE","bullet","Zcaron","bullet","bullet","quoteleft","quoteright","quotedblleft","quotedblright","bullet","endash","emdash","tilde","trademark","scaron","guilsinglright","oe","bullet","zcaron","Ydieresis","space","exclamdown","cent","sterling","currency","yen","brokenbar","section","dieresis","copyright","ordfeminine","guillemotleft","logicalnot","hyphen","registered","macron","degree","plusminus","twosuperior","threesuperior","acute","mu","paragraph","periodcentered","cedilla","onesuperior","ordmasculine","guillemotright","onequarter","onehalf","threequarters","questiondown","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring","AE","Ccedilla","Egrave","Eacute","Ecircumflex","Edieresis","Igrave","Iacute","Icircumflex","Idieresis","Eth","Ntilde","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","multiply","Oslash","Ugrave","Uacute","Ucircumflex","Udieresis","Yacute","Thorn","germandbls","agrave","aacute","acircumflex","atilde","adieresis","aring","ae","ccedilla","egrave","eacute","ecircumflex","edieresis","igrave","iacute","icircumflex","idieresis","eth","ntilde","ograve","oacute","ocircumflex","otilde","odieresis","divide","oslash","ugrave","uacute","ucircumflex","udieresis","yacute","thorn","ydieresis"],SymbolSetEncoding:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","universal","numbersign","existential","percent","ampersand","suchthat","parenleft","parenright","asteriskmath","plus","comma","minus","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","congruent","Alpha","Beta","Chi","Delta","Epsilon","Phi","Gamma","Eta","Iota","theta1","Kappa","Lambda","Mu","Nu","Omicron","Pi","Theta","Rho","Sigma","Tau","Upsilon","sigma1","Omega","Xi","Psi","Zeta","bracketleft","therefore","bracketright","perpendicular","underscore","radicalex","alpha","beta","chi","delta","epsilon","phi","gamma","eta","iota","phi1","kappa","lambda","mu","nu","omicron","pi","theta","rho","sigma","tau","upsilon","omega1","omega","xi","psi","zeta","braceleft","bar","braceright","similar","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Euro","Upsilon1","minute","lessequal","fraction","infinity","florin","club","diamond","heart","spade","arrowboth","arrowleft","arrowup","arrowright","arrowdown","degree","plusminus","second","greaterequal","multiply","proportional","partialdiff","bullet","divide","notequal","equivalence","approxequal","ellipsis","arrowvertex","arrowhorizex","carriagereturn","aleph","Ifraktur","Rfraktur","weierstrass","circlemultiply","circleplus","emptyset","intersection","union","propersuperset","reflexsuperset","notsubset","propersubset","reflexsubset","element","notelement","angle","gradient","registerserif","copyrightserif","trademarkserif","product","radical","dotmath","logicalnot","logicaland","logicalor","arrowdblboth","arrowdblleft","arrowdblup","arrowdblright","arrowdbldown","lozenge","angleleft","registersans","copyrightsans","trademarksans","summation","parenlefttp","parenleftex","parenleftbt","bracketlefttp","bracketleftex","bracketleftbt","bracelefttp","braceleftmid","braceleftbt","braceex","","angleright","integral","integraltp","integralex","integralbt","parenrighttp","parenrightex","parenrightbt","bracketrighttp","bracketrightex","bracketrightbt","bracerighttp","bracerightmid","bracerightbt"],ZapfDingbatsEncoding:["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","a1","a2","a202","a3","a4","a5","a119","a118","a117","a11","a12","a13","a14","a15","a16","a105","a17","a18","a19","a20","a21","a22","a23","a24","a25","a26","a27","a28","a6","a7","a8","a9","a10","a29","a30","a31","a32","a33","a34","a35","a36","a37","a38","a39","a40","a41","a42","a43","a44","a45","a46","a47","a48","a49","a50","a51","a52","a53","a54","a55","a56","a57","a58","a59","a60","a61","a62","a63","a64","a65","a66","a67","a68","a69","a70","a71","a72","a73","a74","a203","a75","a204","a76","a77","a78","a79","a81","a82","a83","a84","a97","a98","a99","a100","","a89","a90","a93","a94","a91","a92","a205","a85","a206","a86","a87","a88","a95","a96","","","","","","","","","","","","","","","","","","","","a101","a102","a103","a104","a106","a107","a108","a112","a111","a110","a109","a120","a121","a122","a123","a124","a125","a126","a127","a128","a129","a130","a131","a132","a133","a134","a135","a136","a137","a138","a139","a140","a141","a142","a143","a144","a145","a146","a147","a148","a149","a150","a151","a152","a153","a154","a155","a156","a157","a158","a159","a160","a161","a163","a164","a196","a165","a192","a166","a167","a168","a169","a170","a171","a172","a173","a162","a174","a175","a176","a177","a178","a179","a193","a180","a199","a181","a200","a182","","a201","a183","a184","a197","a185","a194","a198","a186","a195","a187","a188","a189","a190","a191"]},Qb={ArialNarrow:"Helvetica","ArialNarrow-Bold":"Helvetica-Bold","ArialNarrow-BoldItalic":"Helvetica-BoldOblique","ArialNarrow-Italic":"Helvetica-Oblique",ArialBlack:"Helvetica","ArialBlack-Bold":"Helvetica-Bold","ArialBlack-BoldItalic":"Helvetica-BoldOblique","ArialBlack-Italic":"Helvetica-Oblique",Arial:"Helvetica","Arial-Bold":"Helvetica-Bold","Arial-BoldItalic":"Helvetica-BoldOblique","Arial-Italic":"Helvetica-Oblique","Arial-BoldItalicMT":"Helvetica-BoldOblique","Arial-BoldMT":"Helvetica-Bold","Arial-ItalicMT":"Helvetica-Oblique",ArialMT:"Helvetica","Courier-Bold":"Courier-Bold","Courier-BoldItalic":"Courier-BoldOblique","Courier-Italic":"Courier-Oblique",CourierNew:"Courier","CourierNew-Bold":"Courier-Bold","CourierNew-BoldItalic":"Courier-BoldOblique","CourierNew-Italic":"Courier-Oblique","CourierNewPS-BoldItalicMT":"Courier-BoldOblique","CourierNewPS-BoldMT":"Courier-Bold","CourierNewPS-ItalicMT":"Courier-Oblique",CourierNewPSMT:"Courier",Helvetica:"Helvetica","Helvetica-Bold":"Helvetica-Bold","Helvetica-BoldItalic":"Helvetica-BoldOblique","Helvetica-BoldOblique":"Helvetica-BoldOblique","Helvetica-Italic":"Helvetica-Oblique","Helvetica-Oblique":"Helvetica-Oblique","Symbol-Bold":"Symbol","Symbol-BoldItalic":"Symbol","Symbol-Italic":"Symbol",TimesNewRoman:"Times-Roman","TimesNewRoman-Bold":"Times-Bold","TimesNewRoman-BoldItalic":"Times-BoldItalic","TimesNewRoman-Italic":"Times-Italic",TimesNewRomanPS:"Times-Roman","TimesNewRomanPS-Bold":"Times-Bold","TimesNewRomanPS-BoldItalic":"Times-BoldItalic","TimesNewRomanPS-BoldItalicMT":"Times-BoldItalic","TimesNewRomanPS-BoldMT":"Times-Bold","TimesNewRomanPS-Italic":"Times-Italic","TimesNewRomanPS-ItalicMT":"Times-Italic",TimesNewRomanPSMT:"Times-Roman","TimesNewRomanPSMT-Bold":"Times-Bold","TimesNewRomanPSMT-BoldItalic":"Times-BoldItalic","TimesNewRomanPSMT-Italic":"Times-Italic"},Rb={CenturyGothic:"Helvetica","CenturyGothic-Bold":"Helvetica-Bold","CenturyGothic-BoldItalic":"Helvetica-BoldOblique","CenturyGothic-Italic":"Helvetica-Oblique",ComicSansMS:"Comic Sans MS","ComicSansMS-Bold":"Comic Sans MS-Bold","ComicSansMS-BoldItalic":"Comic Sans MS-BoldItalic","ComicSansMS-Italic":"Comic Sans MS-Italic",LucidaConsole:"Courier","LucidaConsole-Bold":"Courier-Bold","LucidaConsole-BoldItalic":"Courier-BoldOblique","LucidaConsole-Italic":"Courier-Oblique","MS-Gothic":"MS Gothic","MS-Gothic-Bold":"MS Gothic-Bold","MS-Gothic-BoldItalic":"MS Gothic-BoldItalic","MS-Gothic-Italic":"MS Gothic-Italic","MS-Mincho":"MS Mincho","MS-Mincho-Bold":"MS Mincho-Bold","MS-Mincho-BoldItalic":"MS Mincho-BoldItalic","MS-Mincho-Italic":"MS Mincho-Italic","MS-PGothic":"MS PGothic","MS-PGothic-Bold":"MS PGothic-Bold","MS-PGothic-BoldItalic":"MS PGothic-BoldItalic","MS-PGothic-Italic":"MS PGothic-Italic","MS-PMincho":"MS PMincho","MS-PMincho-Bold":"MS PMincho-Bold","MS-PMincho-BoldItalic":"MS PMincho-BoldItalic","MS-PMincho-Italic":"MS PMincho-Italic",Wingdings:"ZapfDingbats"},Sb={"Adobe Jenson":!0,"Adobe Text":!0,Albertus:!0,Aldus:!0,Alexandria:!0,Algerian:!0,"American Typewriter":!0,Antiqua:!0,Apex:!0,Arno:!0,Aster:!0,Aurora:!0,Baskerville:!0,Bell:!0,Bembo:!0,"Bembo Schoolbook":!0,Benguiat:!0,"Berkeley Old Style":!0,"Bernhard Modern":!0,"Berthold City":!0,Bodoni:!0,"Bauer Bodoni":!0,"Book Antiqua":!0,Bookman:!0,"Bordeaux Roman":!0,"Californian FB":!0,Calisto:!0,Calvert:!0,Capitals:!0,Cambria:!0,Cartier:!0,Caslon:!0,Catull:!0,Centaur:!0,"Century Old Style":!0,"Century Schoolbook":!0,Chaparral:!0,"Charis SIL":!0,Cheltenham:!0,"Cholla Slab":!0,Clarendon:!0,Clearface:!0,Cochin:!0,Colonna:!0,"Computer Modern":!0,"Concrete Roman":!0,Constantia:!0,"Cooper Black":!0,Corona:!0,Ecotype:!0,Egyptienne:!0,Elephant:!0,Excelsior:!0,Fairfield:!0,"FF Scala":!0,Folkard:!0,Footlight:!0,FreeSerif:!0,"Friz Quadrata":!0,Garamond:!0,Gentium:!0,Georgia:!0,Gloucester:!0,"Goudy Old Style":!0,"Goudy Schoolbook":!0,"Goudy Pro Font":!0,Granjon:!0,"Guardian Egyptian":!0,Heather:!0,Hercules:!0,"High Tower Text":!0,Hiroshige:!0,"Hoefler Text":!0,"Humana Serif":!0,Imprint:!0,"Ionic No. 5":!0,Janson:!0,Joanna:!0,Korinna:!0,Lexicon:!0,"Liberation Serif":!0,"Linux Libertine":!0,Literaturnaya:!0,Lucida:!0,"Lucida Bright":!0,Melior:!0,Memphis:!0,Miller:!0,Minion:!0,Modern:!0,"Mona Lisa":!0,"Mrs Eaves":!0,"MS Serif":!0,"Museo Slab":!0,"New York":!0,"Nimbus Roman":!0,"NPS Rawlinson Roadway":!0,Palatino:!0,Perpetua:!0,Plantin:!0,"Plantin Schoolbook":!0,Playbill:!0,"Poor Richard":!0,"Rawlinson Roadway":!0,Renault:!0,Requiem:!0,Rockwell:!0,Roman:!0,"Rotis Serif":!0,Sabon:!0,Scala:!0,Seagull:!0,Sistina:!0,Souvenir:!0,STIX:!0,"Stone Informal":!0,"Stone Serif":!0,Sylfaen:!0,Times:!0,Trajan:!0,"Trinité":!0,"Trump Mediaeval":!0,Utopia:!0,"Vale Type":!0,"Bitstream Vera":!0,"Vera Serif":!0,Versailles:!0,Wanted:!0,Weiss:!0,"Wide Latin":!0,Windsor:!0,XITS:!0},Tb={Dingbats:!0,Symbol:!0,ZapfDingbats:!0},Ub={2:10,3:32,4:33,5:34,6:35,7:36,8:37,9:38,10:39,11:40,12:41,13:42,14:43,15:44,16:45,17:46,18:47,19:48,20:49,21:50,22:51,23:52,24:53,25:54,26:55,27:56,28:57,29:58,30:894,31:60,32:61,33:62,34:63,35:64,36:65,37:66,38:67,39:68,40:69,41:70,42:71,43:72,44:73,45:74,46:75,47:76,48:77,49:78,50:79,51:80,52:81,53:82,54:83,55:84,56:85,57:86,58:87,59:88,60:89,61:90,62:91,63:92,64:93,65:94,66:95,67:96,68:97,69:98,70:99,71:100,72:101,73:102,74:103,75:104,76:105,77:106,78:107,79:108,80:109,81:110,82:111,83:112,84:113,85:114,86:115,87:116,88:117,89:118,90:119,91:120,92:121,93:122,94:123,95:124,96:125,97:126,98:196,99:197,100:199,101:201,102:209,103:214,104:220,105:225,106:224,107:226,108:228,109:227,110:229,111:231,112:233,113:232,114:234,115:235,116:237,117:236,118:238,119:239,120:241,121:243,122:242,123:244,124:246,125:245,126:250,127:249,128:251,129:252,130:8224,131:176,132:162,133:163,134:167,135:8226,136:182,137:223,138:174,139:169,140:8482,141:180,142:168,143:8800,144:198,145:216,146:8734,147:177,148:8804,149:8805,150:165,151:181,152:8706,153:8721,154:8719,156:8747,157:170,158:186,159:8486,160:230,161:248,162:191,163:161,164:172,165:8730,166:402,167:8776,168:8710,169:171,170:187,171:8230,210:218,223:711,224:321,225:322,227:353,229:382,234:253,252:263,253:268,254:269,258:258,260:260,261:261,265:280,266:281,268:283,269:313,275:323,276:324,278:328,284:345,285:346,286:347,292:367,295:377,296:378,298:380,305:963,306:964,307:966,308:8215,309:8252,310:8319,311:8359,312:8592,313:8593,337:9552,493:1039,494:1040,705:1524,706:8362,710:64288,711:64298,759:1617,761:1776,763:1778,775:1652,777:1764,778:1780,779:1781,780:1782,782:771,783:64726,786:8363,788:8532,790:768,791:769,792:768,795:803,797:64336,798:64337,799:64342,800:64343,801:64344,802:64345,803:64362,804:64363,805:64364,2424:7821,2425:7822,2426:7823,2427:7824,2428:7825,2429:7826,2430:7827,2433:7682,2678:8045,2679:8046,2830:1552,2838:686,2840:751,2842:753,2843:754,2844:755,2846:757,2856:767,2857:848,2858:849,2862:853,2863:854,2864:855,2865:861,2866:862,2906:7460,2908:7462,2909:7463,2910:7464,2912:7466,2913:7467,2914:7468,2916:7470,2917:7471,2918:7472,2920:7474,2921:7475,2922:7476,2924:7478,2925:7479,2926:7480,2928:7482,2929:7483,2930:7484,2932:7486,2933:7487,2934:7488,2936:7490,2937:7491,2938:7492,2940:7494,2941:7495,2942:7496,2944:7498,2946:7500,2948:7502,2950:7504,2951:7505,2952:7506,2954:7508,2955:7509,2956:7510,2958:7512,2959:7513,2960:7514,2962:7516,2963:7517,2964:7518,2966:7520,2967:7521,2968:7522,2970:7524,2971:7525,2972:7526,2974:7528,2975:7529,2976:7530,2978:1537,2979:1538,2980:1539,2982:1549,2983:1551,2984:1552,2986:1554,2987:1555,2988:1556,2990:1623,2991:1624,2995:1775,2999:1791,3002:64290,3003:64291,3004:64292,3006:64294,3007:64295,3008:64296,3011:1900,3014:8223,3015:8244,3017:7532,3018:7533,3019:7534,3075:7590,3076:7591,3079:7594,3080:7595,3083:7598,3084:7599,3087:7602,3088:7603,3091:7606,3092:7607,3095:7610,3096:7611,3099:7614,3100:7615,3103:7618,3104:7619,3107:8337,3108:8338,3116:1884,3119:1885,3120:1885,3123:1886,3124:1886,3127:1887,3128:1887,3131:1888,3132:1888,3135:1889,3136:1889,3139:1890,3140:1890,3143:1891,3144:1891,3147:1892,3148:1892,3153:580,3154:581,3157:584,3158:585,3161:588,3162:589,3165:891,3166:892,3169:1274,3170:1275,3173:1278,3174:1279,3181:7622,3182:7623,3282:11799,3316:578,3379:42785,3393:1159,3416:8377},Vb={227:322,264:261,291:346},Wb={63721:169,63193:169,63720:174,63194:174,63722:8482,63195:8482,63729:9127,63730:9128,63731:9129,63740:9131,63741:9132,63742:9133,63726:9121,63727:9122,63728:9123,63737:9124,63738:9125,63739:9126,63723:9115,63724:9116,63725:9117,63734:9118,63735:9119,63736:9120},Xb=[{begin:0,end:127},{begin:128,end:255},{begin:256,end:383},{begin:384,end:591},{begin:592,end:687},{begin:688,end:767},{begin:768,end:879},{begin:880,end:1023},{begin:11392,end:11519},{begin:1024,end:1279},{begin:1328,end:1423},{begin:1424,end:1535},{begin:42240,end:42559},{begin:1536,
+end:1791},{begin:1984,end:2047},{begin:2304,end:2431},{begin:2432,end:2559},{begin:2560,end:2687},{begin:2688,end:2815},{begin:2816,end:2943},{begin:2944,end:3071},{begin:3072,end:3199},{begin:3200,end:3327},{begin:3328,end:3455},{begin:3584,end:3711},{begin:3712,end:3839},{begin:4256,end:4351},{begin:6912,end:7039},{begin:4352,end:4607},{begin:7680,end:7935},{begin:7936,end:8191},{begin:8192,end:8303},{begin:8304,end:8351},{begin:8352,end:8399},{begin:8400,end:8447},{begin:8448,end:8527},{begin:8528,end:8591},{begin:8592,end:8703},{begin:8704,end:8959},{begin:8960,end:9215},{begin:9216,end:9279},{begin:9280,end:9311},{begin:9312,end:9471},{begin:9472,end:9599},{begin:9600,end:9631},{begin:9632,end:9727},{begin:9728,end:9983},{begin:9984,end:10175},{begin:12288,end:12351},{begin:12352,end:12447},{begin:12448,end:12543},{begin:12544,end:12591},{begin:12592,end:12687},{begin:43072,end:43135},{begin:12800,end:13055},{begin:13056,end:13311},{begin:44032,end:55215},{begin:55296,end:57343},{begin:67840,end:67871},{begin:19968,end:40959},{begin:57344,end:63743},{begin:12736,end:12783},{begin:64256,end:64335},{begin:64336,end:65023},{begin:65056,end:65071},{begin:65040,end:65055},{begin:65104,end:65135},{begin:65136,end:65279},{begin:65280,end:65519},{begin:65520,end:65535},{begin:3840,end:4095},{begin:1792,end:1871},{begin:1920,end:1983},{begin:3456,end:3583},{begin:4096,end:4255},{begin:4608,end:4991},{begin:5024,end:5119},{begin:5120,end:5759},{begin:5760,end:5791},{begin:5792,end:5887},{begin:6016,end:6143},{begin:6144,end:6319},{begin:10240,end:10495},{begin:40960,end:42127},{begin:5888,end:5919},{begin:66304,end:66351},{begin:66352,end:66383},{begin:66560,end:66639},{begin:118784,end:119039},{begin:119808,end:120831},{begin:1044480,end:1048573},{begin:65024,end:65039},{begin:917504,end:917631},{begin:6400,end:6479},{begin:6480,end:6527},{begin:6528,end:6623},{begin:6656,end:6687},{begin:11264,end:11359},{begin:11568,end:11647},{begin:19904,end:19967},{begin:43008,end:43055},{begin:65536,end:65663},{begin:65856,end:65935},{begin:66432,end:66463},{begin:66464,end:66527},{begin:66640,end:66687},{begin:66688,end:66735},{begin:67584,end:67647},{begin:68096,end:68191},{begin:119552,end:119647},{begin:73728,end:74751},{begin:119648,end:119679},{begin:7040,end:7103},{begin:7168,end:7247},{begin:7248,end:7295},{begin:43136,end:43231},{begin:43264,end:43311},{begin:43312,end:43359},{begin:43520,end:43615},{begin:65936,end:65999},{begin:66e3,end:66047},{begin:66208,end:66271},{begin:127024,end:127135}],Yb=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"],Zb={"¨":" ̈","¯":" ̄","´":" ́","µ":"μ","¸":" ̧","Ĳ":"IJ","ĳ":"ij","Ŀ":"L·","ŀ":"l·","ŉ":"ʼn","ſ":"s","Ǆ":"DŽ","ǅ":"Dž","ǆ":"dž","Ǉ":"LJ","ǈ":"Lj","ǉ":"lj","Ǌ":"NJ","ǋ":"Nj","ǌ":"nj","Ǳ":"DZ","ǲ":"Dz","ǳ":"dz","˘":" ̆","˙":" ̇","˚":" ̊","˛":" ̨","˜":" ̃","˝":" ̋","ͺ":" ͅ","΄":" ́","ϐ":"β","ϑ":"θ","ϒ":"Υ","ϕ":"φ","ϖ":"π","ϰ":"κ","ϱ":"ρ","ϲ":"ς","ϴ":"Θ","ϵ":"ε","Ϲ":"Σ","և":"եւ","ٵ":"اٴ","ٶ":"وٴ","ٷ":"ۇٴ","ٸ":"يٴ","ำ":"ํา","ຳ":"ໍາ","ໜ":"ຫນ","ໝ":"ຫມ","ཷ":"ྲཱྀ","ཹ":"ླཱྀ","ẚ":"aʾ","᾽":" ̓","᾿":" ̓","῀":" ͂","῾":" ̔"," ":" "," ":" "," ":" "," ":" "," ":" "," ":" "," ":" "," ":" ","‗":" ̳","․":".","‥":"..","…":"...","″":"′′","‴":"′′′","‶":"‵‵","‷":"‵‵‵","‼":"!!","‾":" ̅","⁇":"??","⁈":"?!","⁉":"!?","⁗":"′′′′"," ":" ","₨":"Rs","℀":"a/c","℁":"a/s","℃":"°C","℅":"c/o","℆":"c/u","ℇ":"Ɛ","℉":"°F","№":"No","℡":"TEL","ℵ":"א","ℶ":"ב","ℷ":"ג","ℸ":"ד","℻":"FAX","Ⅰ":"I","Ⅱ":"II","Ⅲ":"III","Ⅳ":"IV","Ⅴ":"V","Ⅵ":"VI","Ⅶ":"VII","Ⅷ":"VIII","Ⅸ":"IX","Ⅹ":"X","Ⅺ":"XI","Ⅻ":"XII","Ⅼ":"L","Ⅽ":"C","Ⅾ":"D","Ⅿ":"M","ⅰ":"i","ⅱ":"ii","ⅲ":"iii","ⅳ":"iv","ⅴ":"v","ⅵ":"vi","ⅶ":"vii","ⅷ":"viii","ⅸ":"ix","ⅹ":"x","ⅺ":"xi","ⅻ":"xii","ⅼ":"l","ⅽ":"c","ⅾ":"d","ⅿ":"m","∬":"∫∫","∭":"∫∫∫","∯":"∮∮","∰":"∮∮∮","⑴":"(1)","⑵":"(2)","⑶":"(3)","⑷":"(4)","⑸":"(5)","⑹":"(6)","⑺":"(7)","⑻":"(8)","⑼":"(9)","⑽":"(10)","⑾":"(11)","⑿":"(12)","⒀":"(13)","⒁":"(14)","⒂":"(15)","⒃":"(16)","⒄":"(17)","⒅":"(18)","⒆":"(19)","⒇":"(20)","⒈":"1.","⒉":"2.","⒊":"3.","⒋":"4.","⒌":"5.","⒍":"6.","⒎":"7.","⒏":"8.","⒐":"9.","⒑":"10.","⒒":"11.","⒓":"12.","⒔":"13.","⒕":"14.","⒖":"15.","⒗":"16.","⒘":"17.","⒙":"18.","⒚":"19.","⒛":"20.","⒜":"(a)","⒝":"(b)","⒞":"(c)","⒟":"(d)","⒠":"(e)","⒡":"(f)","⒢":"(g)","⒣":"(h)","⒤":"(i)","⒥":"(j)","⒦":"(k)","⒧":"(l)","⒨":"(m)","⒩":"(n)","⒪":"(o)","⒫":"(p)","⒬":"(q)","⒭":"(r)","⒮":"(s)","⒯":"(t)","⒰":"(u)","⒱":"(v)","⒲":"(w)","⒳":"(x)","⒴":"(y)","⒵":"(z)","⨌":"∫∫∫∫","⩴":"::=","⩵":"==","⩶":"===","⺟":"母","⻳":"龟","⼀":"一","⼁":"丨","⼂":"丶","⼃":"丿","⼄":"乙","⼅":"亅","⼆":"二","⼇":"亠","⼈":"人","⼉":"儿","⼊":"入","⼋":"八","⼌":"冂","⼍":"冖","⼎":"冫","⼏":"几","⼐":"凵","⼑":"刀","⼒":"力","⼓":"勹","⼔":"匕","⼕":"匚","⼖":"匸","⼗":"十","⼘":"卜","⼙":"卩","⼚":"厂","⼛":"厶","⼜":"又","⼝":"口","⼞":"囗","⼟":"土","⼠":"士","⼡":"夂","⼢":"夊","⼣":"夕","⼤":"大","⼥":"女","⼦":"子","⼧":"宀","⼨":"寸","⼩":"小","⼪":"尢","⼫":"尸","⼬":"屮","⼭":"山","⼮":"巛","⼯":"工","⼰":"己","⼱":"巾","⼲":"干","⼳":"幺","⼴":"广","⼵":"廴","⼶":"廾","⼷":"弋","⼸":"弓","⼹":"彐","⼺":"彡","⼻":"彳","⼼":"心","⼽":"戈","⼾":"戶","⼿":"手","⽀":"支","⽁":"攴","⽂":"文","⽃":"斗","⽄":"斤","⽅":"方","⽆":"无","⽇":"日","⽈":"曰","⽉":"月","⽊":"木","⽋":"欠","⽌":"止","⽍":"歹","⽎":"殳","⽏":"毋","⽐":"比","⽑":"毛","⽒":"氏","⽓":"气","⽔":"水","⽕":"火","⽖":"爪","⽗":"父","⽘":"爻","⽙":"爿","⽚":"片","⽛":"牙","⽜":"牛","⽝":"犬","⽞":"玄","⽟":"玉","⽠":"瓜","⽡":"瓦","⽢":"甘","⽣":"生","⽤":"用","⽥":"田","⽦":"疋","⽧":"疒","⽨":"癶","⽩":"白","⽪":"皮","⽫":"皿","⽬":"目","⽭":"矛","⽮":"矢","⽯":"石","⽰":"示","⽱":"禸","⽲":"禾","⽳":"穴","⽴":"立","⽵":"竹","⽶":"米","⽷":"糸","⽸":"缶","⽹":"网","⽺":"羊","⽻":"羽","⽼":"老","⽽":"而","⽾":"耒","⽿":"耳","⾀":"聿","⾁":"肉","⾂":"臣","⾃":"自","⾄":"至","⾅":"臼","⾆":"舌","⾇":"舛","⾈":"舟","⾉":"艮","⾊":"色","⾋":"艸","⾌":"虍","⾍":"虫","⾎":"血","⾏":"行","⾐":"衣","⾑":"襾","⾒":"見","⾓":"角","⾔":"言","⾕":"谷","⾖":"豆","⾗":"豕","⾘":"豸","⾙":"貝","⾚":"赤","⾛":"走","⾜":"足","⾝":"身","⾞":"車","⾟":"辛","⾠":"辰","⾡":"辵","⾢":"邑","⾣":"酉","⾤":"釆","⾥":"里","⾦":"金","⾧":"長","⾨":"門","⾩":"阜","⾪":"隶","⾫":"隹","⾬":"雨","⾭":"靑","⾮":"非","⾯":"面","⾰":"革","⾱":"韋","⾲":"韭","⾳":"音","⾴":"頁","⾵":"風","⾶":"飛","⾷":"食","⾸":"首","⾹":"香","⾺":"馬","⾻":"骨","⾼":"高","⾽":"髟","⾾":"鬥","⾿":"鬯","⿀":"鬲","⿁":"鬼","⿂":"魚","⿃":"鳥","⿄":"鹵","⿅":"鹿","⿆":"麥","⿇":"麻","⿈":"黃","⿉":"黍","⿊":"黑","⿋":"黹","⿌":"黽","⿍":"鼎","⿎":"鼓","⿏":"鼠","⿐":"鼻","⿑":"齊","⿒":"齒","⿓":"龍","⿔":"龜","⿕":"龠","〶":"〒","〸":"十","〹":"卄","〺":"卅","゛":" ゙","゜":" ゚","ㄱ":"ᄀ","ㄲ":"ᄁ","ㄳ":"ᆪ","ㄴ":"ᄂ","ㄵ":"ᆬ","ㄶ":"ᆭ","ㄷ":"ᄃ","ㄸ":"ᄄ","ㄹ":"ᄅ","ㄺ":"ᆰ","ㄻ":"ᆱ","ㄼ":"ᆲ","ㄽ":"ᆳ","ㄾ":"ᆴ","ㄿ":"ᆵ","ㅀ":"ᄚ","ㅁ":"ᄆ","ㅂ":"ᄇ","ㅃ":"ᄈ","ㅄ":"ᄡ","ㅅ":"ᄉ","ㅆ":"ᄊ","ㅇ":"ᄋ","ㅈ":"ᄌ","ㅉ":"ᄍ","ㅊ":"ᄎ","ㅋ":"ᄏ","ㅌ":"ᄐ","ㅍ":"ᄑ","ㅎ":"ᄒ","ㅏ":"ᅡ","ㅐ":"ᅢ","ㅑ":"ᅣ","ㅒ":"ᅤ","ㅓ":"ᅥ","ㅔ":"ᅦ","ㅕ":"ᅧ","ㅖ":"ᅨ","ㅗ":"ᅩ","ㅘ":"ᅪ","ㅙ":"ᅫ","ㅚ":"ᅬ","ㅛ":"ᅭ","ㅜ":"ᅮ","ㅝ":"ᅯ","ㅞ":"ᅰ","ㅟ":"ᅱ","ㅠ":"ᅲ","ㅡ":"ᅳ","ㅢ":"ᅴ","ㅣ":"ᅵ","ㅤ":"ᅠ","ㅥ":"ᄔ","ㅦ":"ᄕ","ㅧ":"ᇇ","ㅨ":"ᇈ","ㅩ":"ᇌ","ㅪ":"ᇎ","ㅫ":"ᇓ","ㅬ":"ᇗ","ㅭ":"ᇙ","ㅮ":"ᄜ","ㅯ":"ᇝ","ㅰ":"ᇟ","ㅱ":"ᄝ","ㅲ":"ᄞ","ㅳ":"ᄠ","ㅴ":"ᄢ","ㅵ":"ᄣ","ㅶ":"ᄧ","ㅷ":"ᄩ","ㅸ":"ᄫ","ㅹ":"ᄬ","ㅺ":"ᄭ","ㅻ":"ᄮ","ㅼ":"ᄯ","ㅽ":"ᄲ","ㅾ":"ᄶ","ㅿ":"ᅀ","ㆀ":"ᅇ","ㆁ":"ᅌ","ㆂ":"ᇱ","ㆃ":"ᇲ","ㆄ":"ᅗ","ㆅ":"ᅘ","ㆆ":"ᅙ","ㆇ":"ᆄ","ㆈ":"ᆅ","ㆉ":"ᆈ","ㆊ":"ᆑ","ㆋ":"ᆒ","ㆌ":"ᆔ","ㆍ":"ᆞ","ㆎ":"ᆡ","㈀":"(ᄀ)","㈁":"(ᄂ)","㈂":"(ᄃ)","㈃":"(ᄅ)","㈄":"(ᄆ)","㈅":"(ᄇ)","㈆":"(ᄉ)","㈇":"(ᄋ)","㈈":"(ᄌ)","㈉":"(ᄎ)","㈊":"(ᄏ)","㈋":"(ᄐ)","㈌":"(ᄑ)","㈍":"(ᄒ)","㈎":"(가)","㈏":"(나)","㈐":"(다)","㈑":"(라)","㈒":"(마)","㈓":"(바)","㈔":"(사)","㈕":"(아)","㈖":"(자)","㈗":"(차)","㈘":"(카)","㈙":"(타)","㈚":"(파)","㈛":"(하)","㈜":"(주)","㈝":"(오전)","㈞":"(오후)","㈠":"(一)","㈡":"(二)","㈢":"(三)","㈣":"(四)","㈤":"(五)","㈥":"(六)","㈦":"(七)","㈧":"(八)","㈨":"(九)","㈩":"(十)","㈪":"(月)","㈫":"(火)","㈬":"(水)","㈭":"(木)","㈮":"(金)","㈯":"(土)","㈰":"(日)","㈱":"(株)","㈲":"(有)","㈳":"(社)","㈴":"(名)","㈵":"(特)","㈶":"(財)","㈷":"(祝)","㈸":"(労)","㈹":"(代)","㈺":"(呼)","㈻":"(学)","㈼":"(監)","㈽":"(企)","㈾":"(資)","㈿":"(協)","㉀":"(祭)","㉁":"(休)","㉂":"(自)","㉃":"(至)","㋀":"1月","㋁":"2月","㋂":"3月","㋃":"4月","㋄":"5月","㋅":"6月","㋆":"7月","㋇":"8月","㋈":"9月","㋉":"10月","㋊":"11月","㋋":"12月","㍘":"0点","㍙":"1点","㍚":"2点","㍛":"3点","㍜":"4点","㍝":"5点","㍞":"6点","㍟":"7点","㍠":"8点","㍡":"9点","㍢":"10点","㍣":"11点","㍤":"12点","㍥":"13点","㍦":"14点","㍧":"15点","㍨":"16点","㍩":"17点","㍪":"18点","㍫":"19点","㍬":"20点","㍭":"21点","㍮":"22点","㍯":"23点","㍰":"24点","㏠":"1日","㏡":"2日","㏢":"3日","㏣":"4日","㏤":"5日","㏥":"6日","㏦":"7日","㏧":"8日","㏨":"9日","㏩":"10日","㏪":"11日","㏫":"12日","㏬":"13日","㏭":"14日","㏮":"15日","㏯":"16日","㏰":"17日","㏱":"18日","㏲":"19日","㏳":"20日","㏴":"21日","㏵":"22日","㏶":"23日","㏷":"24日","㏸":"25日","㏹":"26日","㏺":"27日","㏻":"28日","㏼":"29日","㏽":"30日","㏾":"31日","ﬀ":"ff","ﬁ":"fi","ﬂ":"fl","ﬃ":"ffi","ﬄ":"ffl","ﬅ":"ſt","ﬆ":"st","ﬓ":"մն","ﬔ":"մե","ﬕ":"մի","ﬖ":"վն","ﬗ":"մխ","ﭏ":"אל","ﭐ":"ٱ","ﭑ":"ٱ","ﭒ":"ٻ","ﭓ":"ٻ","ﭔ":"ٻ","ﭕ":"ٻ","ﭖ":"پ","ﭗ":"پ","ﭘ":"پ","ﭙ":"پ","ﭚ":"ڀ","ﭛ":"ڀ","ﭜ":"ڀ","ﭝ":"ڀ","ﭞ":"ٺ","ﭟ":"ٺ","ﭠ":"ٺ","ﭡ":"ٺ","ﭢ":"ٿ","ﭣ":"ٿ","ﭤ":"ٿ","ﭥ":"ٿ","ﭦ":"ٹ","ﭧ":"ٹ","ﭨ":"ٹ","ﭩ":"ٹ","ﭪ":"ڤ","ﭫ":"ڤ","ﭬ":"ڤ","ﭭ":"ڤ","ﭮ":"ڦ","ﭯ":"ڦ","ﭰ":"ڦ","ﭱ":"ڦ","ﭲ":"ڄ","ﭳ":"ڄ","ﭴ":"ڄ","ﭵ":"ڄ","ﭶ":"ڃ","ﭷ":"ڃ","ﭸ":"ڃ","ﭹ":"ڃ","ﭺ":"چ","ﭻ":"چ","ﭼ":"چ","ﭽ":"چ","ﭾ":"ڇ","ﭿ":"ڇ","ﮀ":"ڇ","ﮁ":"ڇ","ﮂ":"ڍ","ﮃ":"ڍ","ﮄ":"ڌ","ﮅ":"ڌ","ﮆ":"ڎ","ﮇ":"ڎ","ﮈ":"ڈ","ﮉ":"ڈ","ﮊ":"ژ","ﮋ":"ژ","ﮌ":"ڑ","ﮍ":"ڑ","ﮎ":"ک","ﮏ":"ک","ﮐ":"ک","ﮑ":"ک","ﮒ":"گ","ﮓ":"گ","ﮔ":"گ","ﮕ":"گ","ﮖ":"ڳ","ﮗ":"ڳ","ﮘ":"ڳ","ﮙ":"ڳ","ﮚ":"ڱ","ﮛ":"ڱ","ﮜ":"ڱ","ﮝ":"ڱ","ﮞ":"ں","ﮟ":"ں","ﮠ":"ڻ","ﮡ":"ڻ","ﮢ":"ڻ","ﮣ":"ڻ","ﮤ":"ۀ","ﮥ":"ۀ","ﮦ":"ہ","ﮧ":"ہ","ﮨ":"ہ","ﮩ":"ہ","ﮪ":"ھ","ﮫ":"ھ","ﮬ":"ھ","ﮭ":"ھ","ﮮ":"ے","ﮯ":"ے","ﮰ":"ۓ","ﮱ":"ۓ","ﯓ":"ڭ","ﯔ":"ڭ","ﯕ":"ڭ","ﯖ":"ڭ","ﯗ":"ۇ","ﯘ":"ۇ","ﯙ":"ۆ","ﯚ":"ۆ","ﯛ":"ۈ","ﯜ":"ۈ","ﯝ":"ٷ","ﯞ":"ۋ","ﯟ":"ۋ","ﯠ":"ۅ","ﯡ":"ۅ","ﯢ":"ۉ","ﯣ":"ۉ","ﯤ":"ې","ﯥ":"ې","ﯦ":"ې","ﯧ":"ې","ﯨ":"ى","ﯩ":"ى","ﯪ":"ئا","ﯫ":"ئا","ﯬ":"ئە","ﯭ":"ئە","ﯮ":"ئو","ﯯ":"ئو","ﯰ":"ئۇ","ﯱ":"ئۇ","ﯲ":"ئۆ","ﯳ":"ئۆ","ﯴ":"ئۈ","ﯵ":"ئۈ","ﯶ":"ئې","ﯷ":"ئې","ﯸ":"ئې","ﯹ":"ئى","ﯺ":"ئى","ﯻ":"ئى","ﯼ":"ی","ﯽ":"ی","ﯾ":"ی","ﯿ":"ی","ﰀ":"ئج","ﰁ":"ئح","ﰂ":"ئم","ﰃ":"ئى","ﰄ":"ئي","ﰅ":"بج","ﰆ":"بح","ﰇ":"بخ","ﰈ":"بم","ﰉ":"بى","ﰊ":"بي","ﰋ":"تج","ﰌ":"تح","ﰍ":"تخ","ﰎ":"تم","ﰏ":"تى","ﰐ":"تي","ﰑ":"ثج","ﰒ":"ثم","ﰓ":"ثى","ﰔ":"ثي","ﰕ":"جح","ﰖ":"جم","ﰗ":"حج","ﰘ":"حم","ﰙ":"خج","ﰚ":"خح","ﰛ":"خم","ﰜ":"سج","ﰝ":"سح","ﰞ":"سخ","ﰟ":"سم","ﰠ":"صح","ﰡ":"صم","ﰢ":"ضج","ﰣ":"ضح","ﰤ":"ضخ","ﰥ":"ضم","ﰦ":"طح","ﰧ":"طم","ﰨ":"ظم","ﰩ":"عج","ﰪ":"عم","ﰫ":"غج","ﰬ":"غم","ﰭ":"فج","ﰮ":"فح","ﰯ":"فخ","ﰰ":"فم","ﰱ":"فى","ﰲ":"في","ﰳ":"قح","ﰴ":"قم","ﰵ":"قى","ﰶ":"قي","ﰷ":"كا","ﰸ":"كج","ﰹ":"كح","ﰺ":"كخ","ﰻ":"كل","ﰼ":"كم","ﰽ":"كى","ﰾ":"كي","ﰿ":"لج","ﱀ":"لح","ﱁ":"لخ","ﱂ":"لم","ﱃ":"لى","ﱄ":"لي","ﱅ":"مج","ﱆ":"مح","ﱇ":"مخ","ﱈ":"مم","ﱉ":"مى","ﱊ":"مي","ﱋ":"نج","ﱌ":"نح","ﱍ":"نخ","ﱎ":"نم","ﱏ":"نى","ﱐ":"ني","ﱑ":"هج","ﱒ":"هم","ﱓ":"هى","ﱔ":"هي","ﱕ":"يج","ﱖ":"يح","ﱗ":"يخ","ﱘ":"يم","ﱙ":"يى","ﱚ":"يي","ﱛ":"ذٰ","ﱜ":"رٰ","ﱝ":"ىٰ","ﱞ":" ٌّ","ﱟ":" ٍّ","ﱠ":" َّ","ﱡ":" ُّ","ﱢ":" ِّ","ﱣ":" ّٰ","ﱤ":"ئر","ﱥ":"ئز","ﱦ":"ئم","ﱧ":"ئن","ﱨ":"ئى","ﱩ":"ئي","ﱪ":"بر","ﱫ":"بز","ﱬ":"بم","ﱭ":"بن","ﱮ":"بى","ﱯ":"بي","ﱰ":"تر","ﱱ":"تز","ﱲ":"تم","ﱳ":"تن","ﱴ":"تى","ﱵ":"تي","ﱶ":"ثر","ﱷ":"ثز","ﱸ":"ثم","ﱹ":"ثن","ﱺ":"ثى","ﱻ":"ثي","ﱼ":"فى","ﱽ":"في","ﱾ":"قى","ﱿ":"قي","ﲀ":"كا","ﲁ":"كل","ﲂ":"كم","ﲃ":"كى","ﲄ":"كي","ﲅ":"لم","ﲆ":"لى","ﲇ":"لي","ﲈ":"ما","ﲉ":"مم","ﲊ":"نر","ﲋ":"نز","ﲌ":"نم","ﲍ":"نن","ﲎ":"نى","ﲏ":"ني","ﲐ":"ىٰ","ﲑ":"ير","ﲒ":"يز","ﲓ":"يم","ﲔ":"ين","ﲕ":"يى","ﲖ":"يي","ﲗ":"ئج","ﲘ":"ئح","ﲙ":"ئخ","ﲚ":"ئم","ﲛ":"ئه","ﲜ":"بج","ﲝ":"بح","ﲞ":"بخ","ﲟ":"بم","ﲠ":"به","ﲡ":"تج","ﲢ":"تح","ﲣ":"تخ","ﲤ":"تم","ﲥ":"ته","ﲦ":"ثم","ﲧ":"جح","ﲨ":"جم","ﲩ":"حج","ﲪ":"حم","ﲫ":"خج","ﲬ":"خم","ﲭ":"سج","ﲮ":"سح","ﲯ":"سخ","ﲰ":"سم","ﲱ":"صح","ﲲ":"صخ","ﲳ":"صم","ﲴ":"ضج","ﲵ":"ضح","ﲶ":"ضخ","ﲷ":"ضم","ﲸ":"طح","ﲹ":"ظم","ﲺ":"عج","ﲻ":"عم","ﲼ":"غج","ﲽ":"غم","ﲾ":"فج","ﲿ":"فح","ﳀ":"فخ","ﳁ":"فم","ﳂ":"قح","ﳃ":"قم","ﳄ":"كج","ﳅ":"كح","ﳆ":"كخ","ﳇ":"كل","ﳈ":"كم","ﳉ":"لج","ﳊ":"لح","ﳋ":"لخ","ﳌ":"لم","ﳍ":"له","ﳎ":"مج","ﳏ":"مح","ﳐ":"مخ","ﳑ":"مم","ﳒ":"نج","ﳓ":"نح","ﳔ":"نخ","ﳕ":"نم","ﳖ":"نه","ﳗ":"هج","ﳘ":"هم","ﳙ":"هٰ","ﳚ":"يج","ﳛ":"يح","ﳜ":"يخ","ﳝ":"يم","ﳞ":"يه","ﳟ":"ئم","ﳠ":"ئه","ﳡ":"بم","ﳢ":"به","ﳣ":"تم","ﳤ":"ته","ﳥ":"ثم","ﳦ":"ثه","ﳧ":"سم","ﳨ":"سه","ﳩ":"شم","ﳪ":"شه","ﳫ":"كل","ﳬ":"كم","ﳭ":"لم","ﳮ":"نم","ﳯ":"نه","ﳰ":"يم","ﳱ":"يه","ﳲ":"ـَّ","ﳳ":"ـُّ","ﳴ":"ـِّ","ﳵ":"طى","ﳶ":"طي","ﳷ":"عى","ﳸ":"عي","ﳹ":"غى","ﳺ":"غي","ﳻ":"سى","ﳼ":"سي","ﳽ":"شى","ﳾ":"شي","ﳿ":"حى","ﴀ":"حي","ﴁ":"جى","ﴂ":"جي","ﴃ":"خى","ﴄ":"خي","ﴅ":"صى","ﴆ":"صي","ﴇ":"ضى","ﴈ":"ضي","ﴉ":"شج","ﴊ":"شح","ﴋ":"شخ","ﴌ":"شم","ﴍ":"شر","ﴎ":"سر","ﴏ":"صر","ﴐ":"ضر","ﴑ":"طى","ﴒ":"طي","ﴓ":"عى","ﴔ":"عي","ﴕ":"غى","ﴖ":"غي","ﴗ":"سى","ﴘ":"سي","ﴙ":"شى","ﴚ":"شي","ﴛ":"حى","ﴜ":"حي","ﴝ":"جى","ﴞ":"جي","ﴟ":"خى","ﴠ":"خي","ﴡ":"صى","ﴢ":"صي","ﴣ":"ضى","ﴤ":"ضي","ﴥ":"شج","ﴦ":"شح","ﴧ":"شخ","ﴨ":"شم","ﴩ":"شر","ﴪ":"سر","ﴫ":"صر","ﴬ":"ضر","ﴭ":"شج","ﴮ":"شح","ﴯ":"شخ","ﴰ":"شم","ﴱ":"سه","ﴲ":"شه","ﴳ":"طم","ﴴ":"سج","ﴵ":"سح","ﴶ":"سخ","ﴷ":"شج","ﴸ":"شح","ﴹ":"شخ","ﴺ":"طم","ﴻ":"ظم","ﴼ":"اً","ﴽ":"اً","ﵐ":"تجم","ﵑ":"تحج","ﵒ":"تحج","ﵓ":"تحم","ﵔ":"تخم","ﵕ":"تمج","ﵖ":"تمح","ﵗ":"تمخ","ﵘ":"جمح","ﵙ":"جمح","ﵚ":"حمي","ﵛ":"حمى","ﵜ":"سحج","ﵝ":"سجح","ﵞ":"سجى","ﵟ":"سمح","ﵠ":"سمح","ﵡ":"سمج","ﵢ":"سمم","ﵣ":"سمم","ﵤ":"صحح","ﵥ":"صحح","ﵦ":"صمم","ﵧ":"شحم","ﵨ":"شحم","ﵩ":"شجي","ﵪ":"شمخ","ﵫ":"شمخ","ﵬ":"شمم","ﵭ":"شمم","ﵮ":"ضحى","ﵯ":"ضخم","ﵰ":"ضخم","ﵱ":"طمح","ﵲ":"طمح","ﵳ":"طمم","ﵴ":"طمي","ﵵ":"عجم","ﵶ":"عمم","ﵷ":"عمم","ﵸ":"عمى","ﵹ":"غمم","ﵺ":"غمي","ﵻ":"غمى","ﵼ":"فخم","ﵽ":"فخم","ﵾ":"قمح","ﵿ":"قمم","ﶀ":"لحم","ﶁ":"لحي","ﶂ":"لحى","ﶃ":"لجج","ﶄ":"لجج","ﶅ":"لخم","ﶆ":"لخم","ﶇ":"لمح","ﶈ":"لمح","ﶉ":"محج","ﶊ":"محم","ﶋ":"محي","ﶌ":"مجح","ﶍ":"مجم","ﶎ":"مخج","ﶏ":"مخم","ﶒ":"مجخ","ﶓ":"همج","ﶔ":"همم","ﶕ":"نحم","ﶖ":"نحى","ﶗ":"نجم","ﶘ":"نجم","ﶙ":"نجى","ﶚ":"نمي","ﶛ":"نمى","ﶜ":"يمم","ﶝ":"يمم","ﶞ":"بخي","ﶟ":"تجي","ﶠ":"تجى","ﶡ":"تخي","ﶢ":"تخى","ﶣ":"تمي","ﶤ":"تمى","ﶥ":"جمي","ﶦ":"جحى","ﶧ":"جمى","ﶨ":"سخى","ﶩ":"صحي","ﶪ":"شحي","ﶫ":"ضحي","ﶬ":"لجي","ﶭ":"لمي","ﶮ":"يحي","ﶯ":"يجي","ﶰ":"يمي","ﶱ":"ممي","ﶲ":"قمي","ﶳ":"نحي","ﶴ":"قمح","ﶵ":"لحم","ﶶ":"عمي","ﶷ":"كمي","ﶸ":"نجح","ﶹ":"مخي","ﶺ":"لجم","ﶻ":"كمم","ﶼ":"لجم","ﶽ":"نجح","ﶾ":"جحي","ﶿ":"حجي","ﷀ":"مجي","ﷁ":"فمي","ﷂ":"بحي","ﷃ":"كمم","ﷄ":"عجم","ﷅ":"صمم","ﷆ":"سخي","ﷇ":"نجي","﹉":"‾","﹊":"‾","﹋":"‾","﹌":"‾","﹍":"_","﹎":"_","﹏":"_","ﺀ":"ء","ﺁ":"آ","ﺂ":"آ","ﺃ":"أ","ﺄ":"أ","ﺅ":"ؤ","ﺆ":"ؤ","ﺇ":"إ","ﺈ":"إ","ﺉ":"ئ","ﺊ":"ئ","ﺋ":"ئ","ﺌ":"ئ","ﺍ":"ا","ﺎ":"ا","ﺏ":"ب","ﺐ":"ب","ﺑ":"ب","ﺒ":"ب","ﺓ":"ة","ﺔ":"ة","ﺕ":"ت","ﺖ":"ت","ﺗ":"ت","ﺘ":"ت","ﺙ":"ث","ﺚ":"ث","ﺛ":"ث","ﺜ":"ث","ﺝ":"ج","ﺞ":"ج","ﺟ":"ج","ﺠ":"ج","ﺡ":"ح","ﺢ":"ح","ﺣ":"ح","ﺤ":"ح","ﺥ":"خ","ﺦ":"خ","ﺧ":"خ","ﺨ":"خ","ﺩ":"د","ﺪ":"د","ﺫ":"ذ","ﺬ":"ذ","ﺭ":"ر","ﺮ":"ر","ﺯ":"ز","ﺰ":"ز","ﺱ":"س","ﺲ":"س","ﺳ":"س","ﺴ":"س","ﺵ":"ش","ﺶ":"ش","ﺷ":"ش","ﺸ":"ش","ﺹ":"ص","ﺺ":"ص","ﺻ":"ص","ﺼ":"ص","ﺽ":"ض","ﺾ":"ض","ﺿ":"ض","ﻀ":"ض","ﻁ":"ط","ﻂ":"ط","ﻃ":"ط","ﻄ":"ط","ﻅ":"ظ","ﻆ":"ظ","ﻇ":"ظ","ﻈ":"ظ","ﻉ":"ع","ﻊ":"ع","ﻋ":"ع","ﻌ":"ع","ﻍ":"غ","ﻎ":"غ","ﻏ":"غ","ﻐ":"غ","ﻑ":"ف","ﻒ":"ف","ﻓ":"ف","ﻔ":"ف","ﻕ":"ق","ﻖ":"ق","ﻗ":"ق","ﻘ":"ق","ﻙ":"ك","ﻚ":"ك","ﻛ":"ك","ﻜ":"ك","ﻝ":"ل","ﻞ":"ل","ﻟ":"ل","ﻠ":"ل","ﻡ":"م","ﻢ":"م","ﻣ":"م","ﻤ":"م","ﻥ":"ن","ﻦ":"ن","ﻧ":"ن","ﻨ":"ن","ﻩ":"ه","ﻪ":"ه","ﻫ":"ه","ﻬ":"ه","ﻭ":"و","ﻮ":"و","ﻯ":"ى","ﻰ":"ى","ﻱ":"ي","ﻲ":"ي","ﻳ":"ي","ﻴ":"ي","ﻵ":"لآ","ﻶ":"لآ","ﻷ":"لأ","ﻸ":"لأ","ﻹ":"لإ","ﻺ":"لإ","ﻻ":"لا","ﻼ":"لا"},$b=function(){function a(a,b,c,d,e,f){this.fontChar=a,this.unicode=b,this.accent=c,this.width=d,this.vmetric=e,this.operatorListId=f}return a.prototype.matchesForCache=function(a,b,c,d,e,f){return this.fontChar===a&&this.unicode===b&&this.accent===c&&this.width===d&&this.vmetric===e&&this.operatorListId===f},a}(),_b=function(){function a(a){this._map=a}return a.prototype={get length(){return this._map.length},forEach:function(a){for(var b in this._map)a(b,this._map[b].charCodeAt(0))},has:function(a){return void 0!==this._map[a]},get:function(a){return this._map[a]},charCodeOf:function(a){return this._map.indexOf(a)}},a}(),ac=function(){function a(a,b){this.firstChar=a,this.lastChar=b}return a.prototype={get length(){return this.lastChar+1-this.firstChar},forEach:function(a){for(var b=this.firstChar,c=this.lastChar;c>=b;b++)a(b,b)},has:function(a){return this.firstChar<=a&&a<=this.lastChar},get:function(a){return this.firstChar<=a&&a<=this.lastChar?String.fromCharCode(a):void 0},charCodeOf:function(a){c("should not call .charCodeOf")}},a}(),bc=function(){function a(a,b,c){a[b]=c>>8&255,a[b+1]=255&c}function b(a,b,c){a[b]=c>>24&255,a[b+1]=c>>16&255,a[b+2]=c>>8&255,a[b+3]=255&c}function c(a,b,c){var d,e;if(c instanceof Uint8Array)a.set(c,b);else if("string"==typeof c)for(d=0,e=c.length;e>d;d++)a[b++]=255&c.charCodeAt(d);else for(d=0,e=c.length;e>d;d++)a[b++]=255&c[d]}function d(a){this.sfnt=a,this.tables=Object.create(null)}d.getSearchParams=function(a,b){for(var c=1,d=0;(c^a)>c;)c<<=1,d++;var e=c*b;return{range:e,entry:d,rangeShift:b*a-e}};var e=12,f=16;return d.prototype={toArray:function(){var g=this.sfnt,h=this.tables,i=Object.keys(h);i.sort();var j,l,m,n,o,p=i.length,q=e+p*f,r=[q];for(j=0;p>j;j++){n=h[i[j]];var s=(n.length+3&-4)>>>0;q+=s,r.push(q)}var t=new Uint8Array(q);for(j=0;p>j;j++)n=h[i[j]],c(t,r[j],n);"true"===g&&(g=k(65536)),t[0]=255&g.charCodeAt(0),t[1]=255&g.charCodeAt(1),t[2]=255&g.charCodeAt(2),t[3]=255&g.charCodeAt(3),a(t,4,p);var u=d.getSearchParams(p,16);for(a(t,6,u.range),a(t,8,u.entry),a(t,10,u.rangeShift),q=e,j=0;p>j;j++){o=i[j],t[q]=255&o.charCodeAt(0),t[q+1]=255&o.charCodeAt(1),t[q+2]=255&o.charCodeAt(2),t[q+3]=255&o.charCodeAt(3);var v=0;for(l=r[j],m=r[j+1];m>l;l+=4){var w=(t[l]<<24)+(t[l+1]<<16)+(t[l+2]<<8)+t[l+3];v=v+w|0}b(t,q+4,v),b(t,q+8,r[j]),b(t,q+12,h[o].length),q+=f}return t},addTable:function(a,b){if(a in this.tables)throw new Error("Table "+a+" already exists");this.tables[a]=b}},d}(),cc=new Int32Array([0,32,127,161,173,174,1536,1920,2208,4256,6016,6144,8192,8208,8209,8210,8232,8240,8287,8304,9676,9677,43616,43648,65520,65536]),dc=function(){function d(d,e,f){var g,h,i;this.name=d,this.loadedName=f.loadedName,this.isType3Font=f.isType3Font,this.sizes=[],this.glyphCache={};var j=d.split("+");j=j.length>1?j[1]:j[0],j=j.split(/[-,_]/g)[0],this.isSerifFont=!!(f.flags&Ob.Serif),this.isSymbolicFont=!!(f.flags&Ob.Symbolic),this.isMonospace=!!(f.flags&Ob.FixedPitch);var k=f.type,l=f.subtype;if(this.type=k,this.fallbackName=this.isMonospace?"monospace":this.isSerifFont?"serif":"sans-serif",this.differences=f.differences,this.widths=f.widths,this.defaultWidth=f.defaultWidth,this.composite=f.composite,this.wideChars=f.wideChars,this.cMap=f.cMap,this.ascent=f.ascent/Lb,this.descent=f.descent/Lb,this.fontMatrix=f.fontMatrix,this.bbox=f.bbox,this.toUnicode=f.toUnicode=this.buildToUnicode(f),this.toFontChar=[],"Type3"===f.type){for(g=0;256>g;g++)this.toFontChar[g]=this.differences[g]||f.defaultEncoding[g];return void(this.fontType=Z.TYPE3)}if(this.cidEncoding=f.cidEncoding,this.vertical=f.vertical,this.vertical&&(this.vmetrics=f.vmetrics,this.defaultVMetrics=f.defaultVMetrics),!e||e.isEmpty){e&&b('Font file is empty in "'+d+'" ('+this.loadedName+")"),this.missingFile=!0;var o=d.replace(/[,_]/g,"-"),p=!!Qb[o]||!(!Rb[o]||!Qb[Rb[o]]);if(o=Qb[o]||Rb[o]||o,this.bold=-1!==o.search(/bold/gi),this.italic=-1!==o.search(/oblique/gi)||-1!==o.search(/italic/gi),this.black=-1!==d.search(/Black/g),this.remeasure=Object.keys(this.widths).length>0,p&&"CIDFontType2"===k&&0===f.cidEncoding.indexOf("Identity-")){var q=[];for(g in Ub)q[+g]=Ub[g];if(/ArialBlack/i.test(d))for(g in Vb)q[+g]=Vb[g];var r=this.toUnicode instanceof ac;r||this.toUnicode.forEach(function(a,b){q[+a]=b}),this.toFontChar=q,this.toUnicode=new _b(q)}else if(/Symbol/i.test(o)){var s=Pb.SymbolSetEncoding;for(g in s)i=zc[s[g]],i&&(this.toFontChar[g]=i);for(g in f.differences)i=zc[f.differences[g]],i&&(this.toFontChar[g]=i)}else if(/Dingbats/i.test(o)){/Wingdings/i.test(d)&&b("Wingdings font without embedded font file, falling back to the ZapfDingbats encoding.");var t=Pb.ZapfDingbatsEncoding;for(g in t)i=Ac[t[g]],i&&(this.toFontChar[g]=i);for(g in f.differences)i=Ac[f.differences[g]],i&&(this.toFontChar[g]=i)}else if(p){this.toFontChar=[];for(g in f.defaultEncoding)h=f.differences[g]||f.defaultEncoding[g],this.toFontChar[g]=zc[h]}else{var u=-1===k.indexOf("CIDFontType");this.toUnicode.forEach(function(a,b){u&&(h=f.differences[a]||f.defaultEncoding[a],b=zc[h]||b),this.toFontChar[a]=b}.bind(this))}return this.loadedName=o.split("-")[0],this.loading=!1,void(this.fontType=P(k,l))}"Type1C"===l&&"Type1"!==k&&"MMType1"!==k&&(m(e)?l="TrueType":k="Type1"),"CIDFontType0C"===l&&"CIDFontType0"!==k&&(k="CIDFontType0"),"OpenType"===l&&(k="OpenType"),"CIDFontType0"===k&&(l=n(e)?"CIDFontType0":"CIDFontType0C");var v;switch(k){case"MMType1":a("MMType1 font ("+d+"), falling back to Type1.");case"Type1":case"CIDFontType0":this.mimetype="font/opentype";var w="Type1C"===l||"CIDFontType0C"===l?new jc(e,f):new ic(d,e,f);O(f),v=this.convert(d,w,f);break;case"OpenType":case"TrueType":case"CIDFontType2":this.mimetype="font/opentype",v=this.checkAndRepair(d,e,f),this.isOpenType&&(k="OpenType");break;default:c("Font "+k+" is not supported")}this.data=v,this.fontType=P(k,l),this.fontMatrix=f.fontMatrix,this.widths=f.widths,this.defaultWidth=f.defaultWidth,this.encoding=f.baseEncoding,this.seacMap=f.seacMap,this.loading=!0}function f(a,b){return(a<<8)+b}function h(a,b,c,d){return(a<<24)+(b<<16)+(c<<8)+d}function j(a){return String.fromCharCode(a>>8&255,255&a)}function l(a){return a=a>32767?32767:-32768>a?-32768:a,String.fromCharCode(a>>8&255,255&a)}function m(a){var b=a.peekBytes(4);return 65536===o(b,0)}function n(a){var b=a.peekBytes(2);return 37===b[0]&&33===b[1]?!0:128===b[0]&&1===b[1]?!0:!1}function p(a){for(var b=0,c=cc.length-1;c>b;){var d=b+c+1>>1;a<cc[d]?c=d-1:b=d}return!(1&b)}function q(a,b){var c=b.toUnicode,d=!!(b.flags&Ob.Symbolic),e=b.toUnicode instanceof ac,f=Object.create(null),g=[],h=[],i=Ib;for(var j in a){j|=0;var k=a[j],l=j;if(!e&&c.has(j)){var m=c.get(l);1===m.length&&(l=m.charCodeAt(0))}if((void 0!==h[l]||p(l)||d&&e)&&Jb>=i)do l=i++,Kb&&61440===l&&(l=61472,i=l+1);while(void 0!==h[l]&&Jb>=i);f[l]=k,g[j]=l,h[l]=!0}return{toFontChar:g,charCodeToGlyphId:f,nextAvailableFontCharCode:i}}function r(a){var b=[];for(var c in a)b.push({fontCharCode:0|c,glyphId:a[c]});b.sort(function(a,b){return a.fontCharCode-b.fontCharCode});for(var d=[],e=b.length,f=0;e>f;){var g=b[f].fontCharCode,h=[b[f].glyphId];++f;for(var i=g;e>f&&i+1===b[f].fontCharCode&&(h.push(b[f].glyphId),++i,++f,65535!==i););d.push([g,i,h])}return d}function s(a){var b,c,d,e,f=r(a),g=f[f.length-1][1]>65535?2:1,h="\x00\x00"+j(g)+"\x00\x00"+k(4+8*g);for(b=f.length-1;b>=0&&!(f[b][0]<=65535);--b);var i=b+1;f[b][0]<65535&&65535===f[b][1]&&(f[b][1]=65534);var l,m,n,o,p=f[b][1]<65535?1:0,q=i+p,s=bc.getSearchParams(q,2),t="",u="",v="",w="",x="",y=0;for(b=0,c=i;c>b;b++){l=f[b],m=l[0],n=l[1],t+=j(m),u+=j(n),o=l[2];var z=!0;for(d=1,e=o.length;e>d;++d)if(o[d]!==o[d-1]+1){z=!1;break}if(z){var A=o[0];v+=j(A-m&65535),w+=j(0)}else{var B=2*(q-b)+2*y;for(y+=n-m+1,v+=j(0),w+=j(B),d=0,e=o.length;e>d;++d)x+=j(o[d])}}p>0&&(u+="ÿÿ",t+="ÿÿ",v+="\x00",w+="\x00\x00");var C="\x00\x00"+j(2*q)+j(s.range)+j(s.entry)+j(s.rangeShift)+u+"\x00\x00"+t+v+w+x,D="",E="";if(g>1){for(h+="\x00\x00\n"+k(4+8*g+4+C.length),D="",b=0,c=f.length;c>b;b++){l=f[b],m=l[0],o=l[2];var F=o[0];for(d=1,e=o.length;e>d;++d)o[d]!==o[d-1]+1&&(n=l[0]+d-1,D+=k(m)+k(n)+k(F),m=n+1,F=o[d]);D+=k(m)+k(l[1])+k(F)}E="\x00\f\x00\x00"+k(D.length+16)+"\x00\x00\x00\x00"+k(D.length/12)}return h+"\x00"+j(C.length+4)+C+E+D}function t(a){var b=new Mc(a.data),c=b.getUint16();b.getBytes(60);var d=b.getUint16();if(4>c&&768&d)return!1;var e=b.getUint16(),f=b.getUint16();if(e>f)return!1;b.getBytes(6);var g=b.getUint16();return 0===g?!1:(a.data[8]=a.data[9]=0,!0)}function u(a,b,d){d=d||{unitsPerEm:0,yMax:0,yMin:0,ascent:0,descent:0};var e=0,f=0,g=0,h=0,i=null,l=0;if(b)for(var m in b){m|=0,(i>m||!i)&&(i=m),m>l&&(l=m);var n=L(m);32>n?e|=1<<n:64>n?f|=1<<n-32:96>n?g|=1<<n-64:123>n?h|=1<<n-96:c("Unicode ranges Bits > 123 are reserved for internal usage")}else i=0,l=255;var o=a.bbox||[0,0,0,0],p=d.unitsPerEm||1/(a.fontMatrix||T)[0],q=a.ascentScaled?1:p/Lb,r=d.ascent||Math.round(q*(a.ascent||o[3])),s=d.descent||Math.round(q*(a.descent||o[1]));s>0&&a.descent>0&&o[1]<0&&(s=-s);var t=d.yMax||r,u=-d.yMin||-s;return"\x00$ô\x00\x00\x00»\x00\x00\x00»\x00\x00ß\x001\x00\x00\x00\x00"+String.fromCharCode(a.fixedPitch?9:0)+"\x00\x00\x00\x00\x00\x00"+k(e)+k(f)+k(g)+k(h)+"*21*"+j(a.italicAngle?1:0)+j(i||a.firstChar)+j(l||a.lastChar)+j(r)+j(s)+"\x00d"+j(t)+j(u)+"\x00\x00\x00\x00\x00\x00\x00\x00"+j(a.xHeight)+j(a.capHeight)+j(0)+j(i||a.firstChar)+"\x00"}function v(a){var b=Math.floor(a.italicAngle*Math.pow(2,16));return"\x00\x00\x00"+k(b)+"\x00\x00\x00\x00"+k(a.fixedPitch)+"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"}function w(a,b){b||(b=[[],[]]);var c,d,e,f,g,h=[b[0][0]||"Original licence",b[0][1]||a,b[0][2]||"Unknown",b[0][3]||"uniqueID",b[0][4]||a,b[0][5]||"Version 0.11",b[0][6]||"",b[0][7]||"Unknown",b[0][8]||"Unknown",b[0][9]||"Unknown"],i=[];for(c=0,d=h.length;d>c;c++){g=b[1][c]||h[c];var k=[];for(e=0,f=g.length;f>e;e++)k.push(j(g.charCodeAt(e)));i.push(k.join(""))}var l=[h,i],m=["\x00","\x00"],n=["\x00\x00","\x00"],o=["\x00\x00","	"],p=h.length*m.length,q="\x00\x00"+j(p)+j(12*p+6),r=0;for(c=0,d=m.length;d>c;c++){var s=l[c];for(e=0,f=s.length;f>e;e++){g=s[e];var t=m[c]+n[c]+o[c]+j(e)+j(g.length)+j(r);q+=t,r+=g.length}}return q+=h.join("")+i.join("")}return d.getFontID=function(){var a=1;return function(){return String(a++)}}(),d.prototype={name:null,font:null,mimetype:null,encoding:null,get renderer(){var a=yc.create(this);return g(this,"renderer",a)},exportData:function(){var a={};for(var b in this)this.hasOwnProperty(b)&&(a[b]=this[b]);return a},checkAndRepair:function(d,g,j){function k(a){var b=i(a.getBytes(4)),c=a.getInt32(),d=a.getInt32()>>>0,e=a.getInt32()>>>0,f=a.pos;a.pos=a.start?a.start:0,a.skip(d);var g=a.getBytes(e);return a.pos=f,"head"===b&&(g[8]=g[9]=g[10]=g[11]=0,g[17]|=32),{tag:b,checksum:c,length:e,offset:d,data:g}}function l(a){return{version:i(a.getBytes(4)),numTables:a.getUint16(),searchRange:a.getUint16(),entrySelector:a.getUint16(),rangeShift:a.getUint16()}}function m(a,c,d,e){var f,g=(c.start?c.start:0)+a.offset;c.pos=g;for(var h,i=(c.getUint16(),c.getUint16()),j=!1,k=0;i>k;k++){var l=c.getUint16(),m=c.getUint16(),n=c.getInt32()>>>0,o=!1;if(0===l&&0===m?o=!0:1===l&&0===m?o=!0:3!==l||1!==m||(d||!e)&&h?d&&3===l&&0===m&&(o=!0,j=!0):(o=!0,d||(j=!0)),o&&(h={platformId:l,encodingId:m,offset:n}),j)break}if(h&&(c.pos=g+h.offset),!h||-1===c.peekByte())return b("Could not find a preferred cmap table."),{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:!1};var p,q,r=c.getUint16(),s=(c.getUint16(),c.getUint16(),!1),t=[];if(0===r){for(p=0;256>p;p++){var u=c.getByte();u&&t.push({charCode:p,glyphId:u})}s=!0}else if(4===r){var v=c.getUint16()>>1;c.getBytes(6);var w,x=[];for(w=0;v>w;w++)x.push({end:c.getUint16()});for(c.getUint16(),w=0;v>w;w++)x[w].start=c.getUint16();for(w=0;v>w;w++)x[w].delta=c.getUint16();var y=0;for(w=0;v>w;w++){f=x[w];var z=c.getUint16();if(z){var A=(z>>1)-(v-w);f.offsetIndex=A,y=Math.max(y,A+f.end-f.start+1)}else f.offsetIndex=-1}var B=[];for(p=0;y>p;p++)B.push(c.getUint16());for(w=0;v>w;w++){f=x[w],g=f.start;var C=f.end,D=f.delta;for(A=f.offsetIndex,p=g;C>=p;p++)65535!==p&&(q=0>A?p:B[A+p-g],q=q+D&65535,0!==q&&t.push({charCode:p,glyphId:q}))}}else{if(6!==r)return b("cmap table has unsupported format: "+r),{platformId:-1,encodingId:-1,mappings:[],hasShortCmap:!1};var E=c.getUint16(),F=c.getUint16();for(p=0;F>p;p++){q=c.getUint16();var G=E+p;t.push({charCode:G,glyphId:q})}}for(t.sort(function(a,b){return a.charCode-b.charCode}),k=1;k<t.length;k++)t[k-1].charCode===t[k].charCode&&(t.splice(k,1),k--);return{platformId:h.platformId,encodingId:h.encodingId,mappings:t,hasShortCmap:s}}function n(b,c,d,e){if(!c)return void(d&&(d.data=null));b.pos=(b.start?b.start:0)+c.offset,b.pos+=c.length-2;var f=b.getUint16();f>e&&(a("The numOfMetrics ("+f+") should not be greater than the numGlyphs ("+e+")"),f=e,c.data[34]=(65280&f)>>8,c.data[35]=255&f);var g=e-f,h=g-(d.length-4*f>>1);if(h>0){var i=new Uint8Array(d.length+2*h);i.set(d.data),d.data=i}}function o(a,b,c,d,e,f){if(12>=c-b)return 0;var g=a.subarray(b,c),h=g[0]<<8|g[1];if(32768&h)return d.set(g,e),g.length;var i,j=10,k=0;for(i=0;h>i;i++){var l=g[j]<<8|g[j+1];k=l+1,j+=2}var m=j,n=g[j]<<8|g[j+1];j+=2+n;var o=j,p=0;for(i=0;k>i;i++){var q=g[j++];192&q&&(g[j-1]=63&q);var r=(2&q?1:16&q?0:2)+(4&q?1:32&q?0:2);if(p+=r,8&q){var s=g[j++];i+=s,p+=s*r}}if(0===p)return 0;var t=j+p;return t>g.length?0:!f&&n>0?(d.set(g.subarray(0,m),e),d.set([0,0],e+m),d.set(g.subarray(o,t),e+m+2),t-=n,g.length-t>3&&(t=t+3&-4),t):g.length-t>3?(t=t+3&-4,d.set(g.subarray(0,t),e),t):(d.set(g,e),g.length)}function p(c,d,e){var g=c.data,i=h(g[0],g[1],g[2],g[3]);i>>16!==1&&(a("Attempting to fix invalid version in head table: "+i),g[0]=0,g[1]=1,g[2]=0,g[3]=0);var j=f(g[50],g[51]);if(0>j||j>1){a("Attempting to fix invalid indexToLocFormat in head table: "+j);var k=d+1;e===k<<1?(g[50]=0,g[51]=0):e===k<<2?(g[50]=0,g[51]=1):b("Could not fix indexToLocFormat: "+j)}}function r(a,b,c,d,e,f){var g,h,i;d?(g=4,h=function(a,b){return a[b]<<24|a[b+1]<<16|a[b+2]<<8|a[b+3]},i=function(a,b,c){a[b]=c>>>24&255,a[b+1]=c>>16&255,a[b+2]=c>>8&255,a[b+3]=255&c}):(g=2,h=function(a,b){return a[b]<<9|a[b+1]<<1},i=function(a,b,c){a[b]=c>>9&255,a[b+1]=c>>1&255});var j=a.data,k=g*(1+c);j.length!==k&&(j=new Uint8Array(k),j.set(a.data.subarray(0,k)),a.data=j);var l=b.data,m=l.length,n=new Uint8Array(m),p=h(j,0),q=0,r={};i(j,0,q);var s,t;for(s=0,t=g;c>s;s++,t+=g){var u=h(j,t);if(u>m&&(m+3&-4)===u&&(u=m),u>m)i(j,t,q),p=u;else{p===u&&(r[s]=!0);var v=o(l,p,u,n,q,e);q+=v,i(j,t,q),p=u}}if(0===q){var w=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]);for(s=0,t=g;c>s;s++,t+=g)i(j,t,w.length);return b.data=w,r}if(f){var x=h(j,g);n.length>x+q?b.data=n.subarray(0,x+q):(b.data=new Uint8Array(x+q),b.data.set(n.subarray(0,q))),b.data.set(n.subarray(0,x),q),i(a.data,j.length-g,q+x)}else b.data=n.subarray(0,q);return r}function y(a,c,d){var e=(g.start?g.start:0)+a.offset;g.pos=e;var f=a.length,h=e+f,i=g.getInt32();
+g.getBytes(28);var j,k,l=!0;switch(i){case 65536:j=Yb;break;case 131072:var m=g.getUint16();if(m!==d){l=!1;break}var n=[];for(k=0;m>k;++k){var o=g.getUint16();if(o>=32768){l=!1;break}n.push(o)}if(!l)break;for(var p=[],q=[];g.pos<h;){var r=g.getByte();for(q.length=r,k=0;r>k;++k)q[k]=String.fromCharCode(g.getByte());p.push(q.join(""))}for(j=[],k=0;m>k;++k){var s=n[k];258>s?j.push(Yb[s]):j.push(p[s-258])}break;case 196608:break;default:b("Unknown/unsupported post table version "+i),l=!1,c.defaultEncoding&&(j=c.defaultEncoding)}return c.glyphNames=j,l}function z(a){var b=(g.start?g.start:0)+a.offset;g.pos=b;var c=[[],[]],d=a.length,e=b+d,f=g.getUint16(),h=6;if(0!==f||h>d)return c;var j,k,l=g.getUint16(),m=g.getUint16(),n=[],o=12;for(j=0;l>j&&g.pos+o<=e;j++){var p={platform:g.getUint16(),encoding:g.getUint16(),language:g.getUint16(),name:g.getUint16(),length:g.getUint16(),offset:g.getUint16()};(1===p.platform&&0===p.encoding&&0===p.language||3===p.platform&&1===p.encoding&&1033===p.language)&&n.push(p)}for(j=0,k=n.length;k>j;j++){var q=n[j],r=b+m+q.offset;if(!(r+q.length>e)){g.pos=r;var s=q.name;if(q.encoding){for(var t="",u=0,v=q.length;v>u;u+=2)t+=String.fromCharCode(g.getUint16());c[1][s]=t}else c[0][s]=i(g.getBytes(q.length))}}return c}function A(a,c){for(var d,e,f,g,h,i=a.data,j=0,k=0,l=0,m=[],n=[],o=[],p=c.tooComplexToFollowFunctions,q=!1,r=0,s=0,t=i.length;t>j;){var u=i[j++];if(64===u)if(e=i[j++],q||s)j+=e;else for(d=0;e>d;d++)m.push(i[j++]);else if(65===u)if(e=i[j++],q||s)j+=2*e;else for(d=0;e>d;d++)f=i[j++],m.push(f<<8|i[j++]);else if(176===(248&u))if(e=u-176+1,q||s)j+=e;else for(d=0;e>d;d++)m.push(i[j++]);else if(184===(248&u))if(e=u-184+1,q||s)j+=2*e;else for(d=0;e>d;d++)f=i[j++],m.push(f<<8|i[j++]);else if(43!==u||p)if(44!==u||p){if(45===u)if(q)q=!1,k=j;else{if(h=n.pop(),!h)return b("TT: ENDF bad stack"),void(c.hintsValid=!1);g=o.pop(),i=h.data,j=h.i,c.functionsStackDeltas[g]=m.length-h.stackTop}else if(137===u)(q||s)&&(b("TT: nested IDEFs not allowed"),p=!0),q=!0,l=j;else if(88===u)++r;else if(27===u)s=r;else if(89===u)s===r&&(s=0),--r;else if(28===u&&!q&&!s){var v=m[m.length-1];v>0&&(j+=v-1)}}else(q||s)&&(b("TT: nested FDEFs not allowed"),p=!0),q=!0,l=j,g=m.pop(),c.functionsDefined[g]={data:i,i:j};else if(!q&&!s)if(g=m[m.length-1],c.functionsUsed[g]=!0,g in c.functionsStackDeltas)m.length+=c.functionsStackDeltas[g];else if(g in c.functionsDefined&&o.indexOf(g)<0){if(n.push({data:i,i:j,stackTop:m.length-1}),o.push(g),h=c.functionsDefined[g],!h)return b("TT: CALL non-existent function"),void(c.hintsValid=!1);i=h.data,j=h.i}if(!q&&!s){var w=142>=u?F[u]:u>=192&&223>=u?-1:u>=224?-2:0;for(u>=113&&117>=u&&(e=m.pop(),e===e&&(w=2*-e));0>w&&m.length>0;)m.pop(),w++;for(;w>0;)m.push(NaN),w--}}c.tooComplexToFollowFunctions=p;var x=[i];j>i.length&&x.push(new Uint8Array(j-i.length)),l>k&&(b("TT: complementing a missing function tail"),x.push(new Uint8Array([34,45]))),C(a,x)}function B(a,c){if(!a.tooComplexToFollowFunctions){if(a.functionsDefined.length>c)return b("TT: more functions defined than expected"),void(a.hintsValid=!1);for(var d=0,e=a.functionsUsed.length;e>d;d++){if(d>c)return b("TT: invalid function id: "+d),void(a.hintsValid=!1);if(a.functionsUsed[d]&&!a.functionsDefined[d])return b("TT: undefined function: "+d),void(a.hintsValid=!1)}}}function C(a,b){if(b.length>1){var c,d,e=0;for(c=0,d=b.length;d>c;c++)e+=b[c].length;e=e+3&-4;var f=new Uint8Array(e),g=0;for(c=0,d=b.length;d>c;c++)f.set(b[c],g),g+=b[c].length;a.data=f,a.length=e}}function D(a,b,c){var d={functionsDefined:[],functionsUsed:[],functionsStackDeltas:[],tooComplexToFollowFunctions:!1,hintsValid:!0};if(a&&A(a,d),b&&A(b,d),a&&B(d,R),c&&1&c.length){var e=new Uint8Array(c.length+1);e.set(c.data),c.data=e}return d.hintsValid}function E(a,b,c){return V[a]?!aa&&b>=0&&$.has(b)?!0:_&&c>=0&&x(_[c])?!0:!1:!0}var F=[0,0,0,0,0,0,0,0,-2,-2,-2,-2,0,0,-2,-5,-1,-1,-1,-1,-1,-1,-1,-1,0,0,-1,0,-1,-1,-1,-1,1,-1,-999,0,1,0,-1,-2,0,-1,-2,-1,-1,0,-1,-1,0,0,-999,-999,-1,-1,-1,-1,-2,-999,-2,-2,-999,0,-2,-2,0,0,-2,0,-2,0,0,0,-2,-1,-1,1,1,0,0,-1,-1,-1,-1,-1,-1,-1,0,0,-1,0,-1,-1,0,-999,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,-2,-999,-999,-999,-999,-999,-1,-1,-2,-2,0,0,0,0,-1,-1,-999,-2,-2,0,0,-1,-2,-2,0,0,0,-1,-1,-1,-2];g=new Mc(new Uint8Array(g.getBytes()));for(var G,H,I,J=["OS/2","cmap","head","hhea","hmtx","maxp","name","post","loca","glyf","fpgm","prep","cvt ","CFF "],K=l(g),L=K.numTables,M={"OS/2":null,cmap:null,head:null,hhea:null,hmtx:null,maxp:null,name:null,post:null},N=0;L>N;N++)I=k(g),J.indexOf(I.tag)<0||0!==I.length&&(M[I.tag]=I);var O=!M["CFF "];if(O)M.glyf&&M.loca||c('Required "glyf" or "loca" tables are not found'),this.isOpenType=!1;else{if("OTTO"===K.version&&"CIDFontType2"!==j.type||!M.head||!M.hhea||!M.maxp||!M.post)return H=new Mc(M["CFF "].data),G=new jc(H,j),this.convert(d,G,j);delete M.glyf,delete M.loca,delete M.fpgm,delete M.prep,delete M["cvt "],this.isOpenType=!0}M.maxp||c('Required "maxp" table is not found'),g.pos=(g.start||0)+M.maxp.offset;var P=g.getInt32(),Q=g.getUint16(),R=0;if(P>=65536&&M.maxp.length>=22){g.pos+=8;var S=g.getUint16();S>2&&(M.maxp.data[14]=0,M.maxp.data[15]=2),g.pos+=4,R=g.getUint16()}var T=!1;"CIDFontType2"===j.type&&j.toUnicode&&j.toUnicode.get(0)>"\x00"&&(T=!0,Q++,M.maxp.data[4]=Q>>8,M.maxp.data[5]=255&Q);var U=D(M.fpgm,M.prep,M["cvt "],R);U||(delete M.fpgm,delete M.prep,delete M["cvt "]),n(g,M.hhea,M.hmtx,Q),M.head||c('Required "head" table is not found'),p(M.head,Q,O?M.loca.length:0);var V={};if(O){var W=f(M.head.data[50],M.head.data[51]);V=r(M.loca,M.glyf,Q,W,U,T)}if(M.hhea||c('Required "hhea" table is not found'),0===M.hhea.data[10]&&0===M.hhea.data[11]&&(M.hhea.data[10]=255,M.hhea.data[11]=255),M.post){var X=y(M.post,j,Q);X||(M.post=null)}var Y,Z=[],$=j.toUnicode,_=j.widths,aa=$ instanceof ac||65536===$.length;if("CIDFontType2"===j.type){var ba=j.cidToGidMap||[],ca=0===ba.length;j.cMap.forEach(function(a,b){e(65535>=b,"Max size of CID is 65,535");var c=-1;ca?c=a:void 0!==ba[b]&&(c=ba[b]),c>=0&&Q>c&&E(c,a,b)&&(Z[a]=c)}),T&&(Z[0]=Q-1)}else{var da=j.differences.length>0||!!j.baseEncodingName,ea=m(M.cmap,g,this.isSymbolicFont,da),fa=ea.platformId,ga=ea.encodingId,ha=ea.mappings,ia=ha.length;if(da&&(3===fa&&1===ga||1===fa&&0===ga)||-1===fa&&-1===ga&&Pb[j.baseEncodingName]){var ja=[];for(("MacRomanEncoding"===j.baseEncodingName||"WinAnsiEncoding"===j.baseEncodingName)&&(ja=Pb[j.baseEncodingName]),Y=0;256>Y;Y++){var ka;if(ka=this.differences&&Y in this.differences?this.differences[Y]:Y in ja&&""!==ja[Y]?ja[Y]:Pb.StandardEncoding[Y]){var la,ma=!1;3===fa&&1===ga?(la=zc[ka],ma=!0):1===fa&&0===ga&&(la=Pb.MacRomanEncoding.indexOf(ka));var na=!1;for(N=0;ia>N;++N)if(ha[N].charCode===la){var oa=ma?Y:la;if(E(ha[N].glyphId,oa,-1)){Z[Y]=ha[N].glyphId,na=!0;break}}if(!na&&j.glyphNames){var pa=j.glyphNames.indexOf(ka);pa>0&&E(pa,-1,-1)?Z[Y]=pa:Z[Y]=0}}}}else if(0===fa&&0===ga)for(N=0;ia>N;++N)Z[ha[N].charCode]=ha[N].glyphId;else for(N=0;ia>N;++N)Y=255&ha[N].charCode,Z[Y]=ha[N].glyphId}0===Z.length&&(Z[0]=0);var qa=q(Z,j);if(this.toFontChar=qa.toFontChar,M.cmap={tag:"cmap",data:s(qa.charCodeToGlyphId)},!M["OS/2"]||!t(M["OS/2"])){var ra={unitsPerEm:f(M.head.data[18],M.head.data[19]),yMax:f(M.head.data[42],M.head.data[43]),yMin:f(M.head.data[38],M.head.data[39])-65536,ascent:f(M.hhea.data[4],M.hhea.data[5]),descent:f(M.hhea.data[6],M.hhea.data[7])-65536};M["OS/2"]={tag:"OS/2",data:u(j,qa.charCodeToGlyphId,ra)}}if(M.post||(M.post={tag:"post",data:v(j)}),!O)try{H=new Mc(M["CFF "].data);var sa=new kc(H,j);G=sa.parse();var ta=new xc(G);M["CFF "].data=ta.compile()}catch(ua){b("Failed to compile font "+j.loadedName)}if(M.name){var va=z(M.name);M.name.data=w(d,va)}else M.name={tag:"name",data:w(this.name)};var wa=new bc(K.version);for(var xa in M)wa.addTable(xa,M[xa].data);return wa.toArray()},convert:function(a,b,c){function d(a,b){var c=null;for(var d in a)b===a[d]&&(c||(c=[]),c.push(0|d));return c}function e(a,b){for(var c in a)if(b===a[c])return 0|c;return g.charCodeToGlyphId[g.nextAvailableFontCharCode]=b,g.nextAvailableFontCharCode++}c.fixedPitch=!1;var f=b.getGlyphMapping(c),g=q(f,c);this.toFontChar=g.toFontChar;var h=b.numGlyphs,i=b.seacs;if(Nb&&i&&i.length){var k=c.fontMatrix||T,m=b.getCharset(),n=Object.create(null);for(var o in i){o|=0;var p=i[o],r=Pb.StandardEncoding[p[2]],t=Pb.StandardEncoding[p[3]],x=m.indexOf(r),y=m.indexOf(t);if(!(0>x||0>y)){var z={x:p[0]*k[0]+p[1]*k[2]+k[4],y:p[0]*k[1]+p[1]*k[3]+k[5]},A=d(f,o);if(A)for(var B=0,C=A.length;C>B;B++){var D=A[B],E=g.charCodeToGlyphId,F=e(E,x),G=e(E,y);n[D]={baseFontCharCode:F,accentFontCharCode:G,accentOffset:z}}}}c.seacMap=n}var H=1/(c.fontMatrix||T)[0],I=new bc("OTTO");return I.addTable("CFF ",b.data),I.addTable("OS/2",u(c,g.charCodeToGlyphId)),I.addTable("cmap",s(g.charCodeToGlyphId)),I.addTable("head","\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00_<õ\x00\x00"+l(H)+"\x00\x00\x00\x00\x0B~'\x00\x00\x00\x00\x0B~'\x00\x00"+l(c.descent)+"ÿ"+l(c.ascent)+j(c.italicAngle?2:0)+"\x00\x00\x00\x00\x00\x00\x00"),I.addTable("hhea","\x00\x00\x00"+l(c.ascent)+l(c.descent)+"\x00\x00ÿÿ\x00\x00\x00\x00\x00\x00"+l(c.capHeight)+l(Math.tan(c.italicAngle)*c.xHeight)+"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"+j(h)),I.addTable("hmtx",function(){for(var a=b.charstrings,c=b.cff?b.cff.widths:null,d="\x00\x00\x00\x00",e=1,f=h;f>e;e++){var g=0;if(a){var i=a[e-1];g="width"in i?i.width:0}else c&&(g=Math.ceil(c[e]||0));d+=j(g)+j(0)}return d}()),I.addTable("maxp","\x00\x00P\x00"+j(h)),I.addTable("name",w(a)),I.addTable("post",v(c)),I.toArray()},buildToUnicode:function(a){if(a.toUnicode&&0!==a.toUnicode.length)return a.toUnicode;var b,c;if(!a.composite){b=[];var d=a.defaultEncoding.slice(),f=a.baseEncodingName,g=a.differences;for(c in g)d[c]=g[c];for(c in d){var h=d[c];if(""!==h)if(void 0!==zc[h])b[c]=String.fromCharCode(zc[h]);else{var i=0;switch(h[0]){case"G":3===h.length&&(i=parseInt(h.substr(1),16));break;case"g":5===h.length&&(i=parseInt(h.substr(1),16));break;case"C":case"c":h.length>=3&&(i=+h.substr(1))}if(i){if(f&&i===+c){var j=Pb[f];if(j&&(h=j[c])){b[c]=String.fromCharCode(zc[h]);continue}}b[c]=String.fromCharCode(i)}}}return new _b(b)}if(a.composite&&(a.cMap.builtInCMap&&!(a.cMap instanceof Fb)||"Adobe"===a.cidSystemInfo.registry&&("GB1"===a.cidSystemInfo.ordering||"CNS1"===a.cidSystemInfo.ordering||"Japan1"===a.cidSystemInfo.ordering||"Korea1"===a.cidSystemInfo.ordering))){var k=a.cidSystemInfo.registry,l=a.cidSystemInfo.ordering,m=new ya(k+"-"+l+"-UCS2"),n=Hb.create(m,{url:PDFJS.cMapUrl,packed:PDFJS.cMapPacked},null),o=a.cMap;return b=[],o.forEach(function(a,c){e(65535>=c,"Max size of CID is 65,535");var d=n.lookup(c);d&&(b[a]=String.fromCharCode((d.charCodeAt(0)<<8)+d.charCodeAt(1)))}),new _b(b)}return new ac(a.firstChar,a.lastChar)},get spaceWidth(){if("_shadowWidth"in this)return this._shadowWidth;for(var a,b=["space","minus","one","i"],c=0,d=b.length;d>c;c++){var e=b[c];if(e in this.widths){a=this.widths[e];break}var f=zc[e],g=0;if(this.composite&&this.cMap.contains(f)&&(g=this.cMap.lookup(f)),!g&&"toUnicode"in this&&(g=this.toUnicode.charCodeOf(f)),0>=g&&(g=f),a=this.widths[g])break}return a=a||this.defaultWidth,this._shadowWidth=a,a},charToGlyph:function(a){var b,c,d,e=a;this.cMap&&this.cMap.contains(a)&&(e=this.cMap.lookup(a)),c=this.widths[e],c=x(c)?c:this.defaultWidth;var f=this.vmetrics&&this.vmetrics[e],g=this.toUnicode.get(a)||a;"number"==typeof g&&(g=String.fromCharCode(g)),b=this.toFontChar[a]||a,this.missingFile&&(b=K(b)),this.isType3Font&&(d=b);var h=null;if(this.seacMap&&this.seacMap[a]){var i=this.seacMap[a];b=i.baseFontCharCode,h={fontChar:String.fromCharCode(i.accentFontCharCode),offset:i.accentOffset}}var j=String.fromCharCode(b),k=this.glyphCache[a];return k&&k.matchesForCache(j,g,h,c,f,d)||(k=new $b(j,g,h,c,f,d),this.glyphCache[a]=k),k},charsToGlyphs:function(a){var b,c,d,e=this.charsCache;if(e&&(b=e[a]))return b;e||(e=this.charsCache=Object.create(null)),b=[];var f,g=a,h=0;if(this.cMap)for(var i={};h<a.length;){this.cMap.readCharCode(a,h,i),d=i.charcode;var j=i.length;h+=j,c=this.charToGlyph(d),b.push(c),1===j&&32===a.charCodeAt(h-1)&&b.push(null)}else for(h=0,f=a.length;f>h;++h)d=a.charCodeAt(h),c=this.charToGlyph(d),b.push(c),32===d&&b.push(null);return e[g]=b}},d}(),ec=function(){function a(a){this.error=a,this.loadedName="g_font_error",this.loading=!1}return a.prototype={charsToGlyphs:function(){return[]},exportData:function(){return{error:this.error}}},a}(),fc=function(){function a(){this.width=0,this.lsb=0,this.flexing=!1,this.output=[],this.stack=[]}var c={hstem:[1],vstem:[3],vmoveto:[4],rlineto:[5],hlineto:[6],vlineto:[7],rrcurveto:[8],callsubr:[10],flex:[12,35],drop:[12,18],endchar:[14],rmoveto:[21],hmoveto:[22],vhcurveto:[30],hvcurveto:[31]};return a.prototype={convert:function(a,d){for(var e,f,g,h=a.length,i=!1,j=0;h>j;j++){var k=a[j];if(32>k){switch(12===k&&(k=(k<<8)+a[++j]),k){case 1:if(!Mb){this.stack=[];break}i=this.executeCommand(2,c.hstem);break;case 3:if(!Mb){this.stack=[];break}i=this.executeCommand(2,c.vstem);break;case 4:if(this.flexing){if(this.stack.length<1){i=!0;break}var l=this.stack.pop();this.stack.push(0,l);break}i=this.executeCommand(1,c.vmoveto);break;case 5:i=this.executeCommand(2,c.rlineto);break;case 6:i=this.executeCommand(1,c.hlineto);break;case 7:i=this.executeCommand(1,c.vlineto);break;case 8:i=this.executeCommand(6,c.rrcurveto);break;case 9:this.stack=[];break;case 10:if(this.stack.length<1){i=!0;break}g=this.stack.pop(),i=this.convert(d[g],d);break;case 11:return i;case 13:if(this.stack.length<2){i=!0;break}e=this.stack.pop(),f=this.stack.pop(),this.lsb=f,this.width=e,this.stack.push(e,f),i=this.executeCommand(2,c.hmoveto);break;case 14:this.output.push(c.endchar[0]);break;case 21:if(this.flexing)break;i=this.executeCommand(2,c.rmoveto);break;case 22:if(this.flexing){this.stack.push(0);break}i=this.executeCommand(1,c.hmoveto);break;case 30:i=this.executeCommand(4,c.vhcurveto);break;case 31:i=this.executeCommand(4,c.hvcurveto);break;case 3072:this.stack=[];break;case 3073:if(!Mb){this.stack=[];break}i=this.executeCommand(2,c.vstem);break;case 3074:if(!Mb){this.stack=[];break}i=this.executeCommand(2,c.hstem);break;case 3078:Nb?(this.seac=this.stack.splice(-4,4),i=this.executeCommand(0,c.endchar)):i=this.executeCommand(4,c.endchar);break;case 3079:if(this.stack.length<4){i=!0;break}this.stack.pop();e=this.stack.pop();var m=this.stack.pop();f=this.stack.pop(),this.lsb=f,this.width=e,this.stack.push(e,f,m),i=this.executeCommand(3,c.rmoveto);break;case 3084:if(this.stack.length<2){i=!0;break}var n=this.stack.pop(),o=this.stack.pop();this.stack.push(o/n);break;case 3088:if(this.stack.length<2){i=!0;break}g=this.stack.pop();var p=this.stack.pop();if(0===g&&3===p){var q=this.stack.splice(this.stack.length-17,17);this.stack.push(q[2]+q[0],q[3]+q[1],q[4],q[5],q[6],q[7],q[8],q[9],q[10],q[11],q[12],q[13],q[14]),i=this.executeCommand(13,c.flex,!0),this.flexing=!1,this.stack.push(q[15],q[16])}else 1===g&&0===p&&(this.flexing=!0);break;case 3089:break;case 3105:this.stack=[];break;default:b('Unknown type 1 charstring command of "'+k+'"')}if(i)break}else 246>=k?k-=139:k=250>=k?256*(k-247)+a[++j]+108:254>=k?-(256*(k-251))-a[++j]-108:(255&a[++j])<<24|(255&a[++j])<<16|(255&a[++j])<<8|(255&a[++j])<<0,this.stack.push(k)}return i},executeCommand:function(a,b,c){var d=this.stack.length;if(a>d)return!0;for(var e=d-a,f=e;d>f;f++){var g=this.stack[f];g===(0|g)?this.output.push(28,g>>8&255,255&g):(g=65536*g|0,this.output.push(255,g>>24&255,g>>16&255,g>>8&255,255&g))}return this.output.push.apply(this.output,b),c?this.stack.splice(e,a):this.stack.length=0,!1}},a}(),gc=function(){function a(a){return a>=48&&57>=a||a>=65&&70>=a||a>=97&&102>=a}function b(a,b,c){for(var d=0|b,e=52845,f=22719,g=a.length,h=new Uint8Array(g),i=0;g>i;i++){var j=a[i];h[i]=j^d>>8,d=(j+d)*e+f&65535}return Array.prototype.slice.call(h,c)}function c(b,c,d){var e,f,g=0|c,h=52845,i=22719,j=b.length,k=j>>>1,l=new Uint8Array(k);for(e=0,f=0;j>e;e++){var m=b[e];if(a(m)){e++;for(var n;j>e&&!a(n=b[e]);)e++;if(j>e){var o=parseInt(String.fromCharCode(m,n),16);l[f++]=o^g>>8,g=(o+g)*h+i&65535}}}return Array.prototype.slice.call(l,d,f)}function d(a){return 47===a||91===a||93===a||123===a||125===a||40===a||41===a}function e(d,e){if(e){var g=d.getBytes(),h=!(a(g[0])&&a(g[1])&&a(g[2])&&a(g[3]));d=new Mc(h?b(g,f,4):c(g,f,4))}this.stream=d,this.nextChar()}var f=55665,g=4330;return e.prototype={readNumberArray:function(){this.getToken();for(var a=[];;){var b=this.getToken();if(null===b||"]"===b||"}"===b)break;a.push(parseFloat(b||0))}return a},readNumber:function(){var a=this.getToken();return parseFloat(a||0)},readInt:function(){var a=this.getToken();return 0|parseInt(a||0,10)},readBoolean:function(){var a=this.getToken();return"true"===a?1:0},nextChar:function(){return this.currentChar=this.stream.getByte()},getToken:function(){for(var a=!1,b=this.currentChar;;){if(-1===b)return null;if(a)(10===b||13===b)&&(a=!1);else if(37===b)a=!0;else if(!Gc.isSpace(b))break;b=this.nextChar()}if(d(b))return this.nextChar(),String.fromCharCode(b);var c="";do c+=String.fromCharCode(b),b=this.nextChar();while(b>=0&&!Gc.isSpace(b)&&!d(b));return c},extractFontProgram:function(){for(var a,c,d,e,f,h=this.stream,i=[],j=[],k={subrs:[],charstrings:[],properties:{privateData:{lenIV:4}}};null!==(a=this.getToken());)if("/"===a)switch(a=this.getToken()){case"CharStrings":for(this.getToken(),this.getToken(),this.getToken(),this.getToken();;){if(a=this.getToken(),null===a||"end"===a)break;if("/"===a){var l=this.getToken();c=this.readInt(),this.getToken(),d=h.makeSubStream(h.pos,c),e=k.properties.privateData.lenIV,f=b(d.getBytes(),g,e),h.skip(c),this.nextChar(),a=this.getToken(),"noaccess"===a&&this.getToken(),j.push({glyph:l,encoded:f})}}break;case"Subrs":this.readInt();for(this.getToken();"dup"===(a=this.getToken());){var m=this.readInt();c=this.readInt(),this.getToken(),d=h.makeSubStream(h.pos,c),e=k.properties.privateData.lenIV,f=b(d.getBytes(),g,e),h.skip(c),this.nextChar(),a=this.getToken(),"noaccess"===a&&this.getToken(),i[m]=f}break;case"BlueValues":case"OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":var n=this.readNumberArray();n.length>0&&n.length%2===0&&Mb&&(k.properties.privateData[a]=n);break;case"StemSnapH":case"StemSnapV":k.properties.privateData[a]=this.readNumberArray();break;case"StdHW":case"StdVW":k.properties.privateData[a]=this.readNumberArray()[0];break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"LanguageGroup":case"ExpansionFactor":k.properties.privateData[a]=this.readNumber();break;case"ForceBold":k.properties.privateData[a]=this.readBoolean()}for(var o=0;o<j.length;o++){l=j[o].glyph,f=j[o].encoded;var p=new fc,q=p.convert(f,i),r=p.output;q&&(r=[14]),k.charstrings.push({glyphName:l,charstring:r,width:p.width,lsb:p.lsb,seac:p.seac})}return k},extractFontHeader:function(a){for(var b;null!==(b=this.getToken());)if("/"===b)switch(b=this.getToken()){case"FontMatrix":var c=this.readNumberArray();a.fontMatrix=c;break;case"Encoding":var d,e=this.getToken();if(/^\d+$/.test(e)){d=[];var f=0|parseInt(e,10);this.getToken();for(var g=0;f>g;g++){for(b=this.getToken();"dup"!==b&&"def"!==b;)if(b=this.getToken(),null===b)return;if("def"===b)break;var h=this.readInt();this.getToken();var i=this.getToken();d[h]=i,this.getToken()}}else d=Pb[e];a.builtInEncoding=d;break;case"FontBBox":var j=this.readNumberArray();a.ascent=j[3],a.descent=j[1],a.ascentScaled=!0}}},e}(),hc=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003","Black","Bold","Book","Light","Medium","Regular","Roman","Semibold"],ic=function(a,b,c){var d=6,e=c.length1,f=c.length2,g=b.peekBytes(d),h=128===g[0]&&1===g[1];h&&(b.skip(d),e=g[5]<<24|g[4]<<16|g[3]<<8|g[2]);var i=new Mc(b.getBytes(e)),j=new gc(i);j.extractFontHeader(c),h&&(g=b.getBytes(d),f=g[5]<<24|g[4]<<16|g[3]<<8|g[2]);var k=new Mc(b.getBytes(f)),l=new gc(k,!0),m=l.extractFontProgram();for(var n in m.properties)c[n]=m.properties[n];var o=m.charstrings,p=this.getType2Charstrings(o),q=this.getType2Subrs(m.subrs);this.charstrings=o,this.data=this.wrap(a,p,this.charstrings,q,c),this.seacs=this.getSeacs(m.charstrings)};ic.prototype={get numGlyphs(){return this.charstrings.length+1},getCharset:function(){for(var a=[".notdef"],b=this.charstrings,c=0;c<b.length;c++)a.push(b[c].glyphName);return a},getGlyphMapping:function(a){var b,c=this.charstrings,d=[".notdef"];for(b=0;b<c.length;b++)d.push(c[b].glyphName);var e=a.builtInEncoding;if(e){var f={};for(var g in e)b=d.indexOf(e[g]),b>=0&&(f[g]=b)}return Q(a,f,d)},getSeacs:function(a){var b,c,d=[];for(b=0,c=a.length;c>b;b++){var e=a[b];e.seac&&(d[b+1]=e.seac)}return d},getType2Charstrings:function(a){for(var b=[],c=0,d=a.length;d>c;c++)b.push(a[c].charstring);return b},getType2Subrs:function(a){var b=0,c=a.length;b=1133>c?107:33769>c?1131:32768;var d,e=[];for(d=0;b>d;d++)e.push([11]);for(d=0;c>d;d++)e.push(a[d]);return e},wrap:function(a,b,c,d,e){var f=new lc;f.header=new mc(1,0,4,4),f.names=[a];var g=new qc;g.setByName("version",391),g.setByName("Notice",392),g.setByName("FullName",393),g.setByName("FamilyName",394),g.setByName("Weight",395),g.setByName("Encoding",null),g.setByName("FontMatrix",e.fontMatrix),g.setByName("FontBBox",e.bbox),g.setByName("charset",null),g.setByName("CharStrings",null),g.setByName("Private",null),f.topDict=g;var h=new nc;h.add("Version 0.11"),h.add("See original notice"),h.add(a),h.add(a),h.add("Medium"),f.strings=h,f.globalSubrIndex=new oc;var i,j,k=b.length,l=[0];for(i=0;k>i;i++){var m=hc.indexOf(c[i].glyphName);-1===m&&(m=0),l.push(m>>8&255,255&m)}f.charset=new tc(!1,0,[],l);var n=new oc;for(n.add([139,14]),i=0;k>i;i++)n.add(b[i]);f.charStrings=n;var o=new rc;o.setByName("Subrs",null);var p=["BlueValues","OtherBlues","FamilyBlues","FamilyOtherBlues","StemSnapH","StemSnapV","BlueShift","BlueFuzz","BlueScale","LanguageGroup","ExpansionFactor","ForceBold","StdHW","StdVW"];for(i=0,j=p.length;j>i;i++){var q=p[i];if(e.privateData.hasOwnProperty(q)){var r=e.privateData[q];if(C(r))for(var s=r.length-1;s>0;s--)r[s]-=r[s-1];o.setByName(q,r)}}f.topDict.privateDict=o;var t=new oc;for(i=0,j=d.length;j>i;i++)t.add(d[i]);o.subrsIndex=t;var u=new xc(f);return u.compile()}};var jc=function(){function a(a,c){this.properties=c;var d=new kc(a,c);this.cff=d.parse();var e=new xc(this.cff);this.seacs=this.cff.seacs;try{this.data=e.compile()}catch(f){b("Failed to compile font "+c.loadedName),this.data=a}}return a.prototype={get numGlyphs(){return this.cff.charStrings.count},getCharset:function(){return this.cff.charset.charset},getGlyphMapping:function(){var a,b,c=this.cff,d=this.properties,e=c.charset.charset;if(d.composite){if(a=Object.create(null),c.isCIDFont)for(b=0;b<e.length;b++){var f=e[b],g=d.cMap.charCodeOf(f);a[g]=b}else for(b=0;b<c.charStrings.count;b++)a[b]=b;return a}var h=c.encoding?c.encoding.encoding:null;return a=Q(d,h,e)}},a}(),kc=function(){function d(a,b){this.bytes=a.getBytes(),this.properties=b}var e=[null,{id:"hstem",min:2,stackClearing:!0,stem:!0},null,{id:"vstem",min:2,stackClearing:!0,stem:!0},{id:"vmoveto",min:1,stackClearing:!0},{id:"rlineto",min:2,resetStack:!0},{id:"hlineto",min:1,resetStack:!0},{id:"vlineto",min:1,resetStack:!0},{id:"rrcurveto",min:6,resetStack:!0},null,{id:"callsubr",min:1,undefStack:!0},{id:"return",min:0,undefStack:!0},null,null,{id:"endchar",min:0,stackClearing:!0},null,null,null,{id:"hstemhm",min:2,stackClearing:!0,stem:!0},{id:"hintmask",min:0,stackClearing:!0},{id:"cntrmask",min:0,stackClearing:!0},{id:"rmoveto",min:2,stackClearing:!0},{id:"hmoveto",min:1,stackClearing:!0},{id:"vstemhm",min:2,stackClearing:!0,stem:!0},{id:"rcurveline",min:8,resetStack:!0},{id:"rlinecurve",min:8,resetStack:!0},{id:"vvcurveto",min:4,resetStack:!0},{id:"hhcurveto",min:4,resetStack:!0},null,{id:"callgsubr",min:1,undefStack:!0},{id:"vhcurveto",min:4,resetStack:!0},{id:"hvcurveto",min:4,resetStack:!0}],f=[null,null,null,{id:"and",min:2,stackDelta:-1},{id:"or",min:2,stackDelta:-1},{id:"not",min:1,stackDelta:0},null,null,null,{id:"abs",min:1,stackDelta:0},{id:"add",min:2,stackDelta:-1,stackFn:function(a,b){a[b-2]=a[b-2]+a[b-1]}},{id:"sub",min:2,stackDelta:-1,stackFn:function(a,b){a[b-2]=a[b-2]-a[b-1]}},{id:"div",min:2,stackDelta:-1,stackFn:function(a,b){a[b-2]=a[b-2]/a[b-1]}},null,{id:"neg",min:1,stackDelta:0,stackFn:function(a,b){a[b-1]=-a[b-1]}},{id:"eq",min:2,stackDelta:-1},null,null,{id:"drop",min:1,stackDelta:-1},null,{id:"put",min:2,stackDelta:-2},{id:"get",min:1,stackDelta:0},{id:"ifelse",min:4,stackDelta:-3},{id:"random",min:0,stackDelta:1},{id:"mul",min:2,stackDelta:-1,stackFn:function(a,b){a[b-2]=a[b-2]*a[b-1]}},null,{id:"sqrt",min:1,stackDelta:0},{id:"dup",min:1,stackDelta:1},{id:"exch",min:2,stackDelta:0},{id:"index",min:2,stackDelta:0},{id:"roll",min:3,stackDelta:-2},null,null,null,{id:"hflex",min:7,resetStack:!0},{id:"flex",min:13,resetStack:!0},{id:"hflex1",min:9,resetStack:!0},{id:"flex1",min:11,resetStack:!0}];return d.prototype={parse:function(){var a=this.properties,b=new lc;this.cff=b;var c=this.parseHeader(),d=this.parseIndex(c.endPos),e=this.parseIndex(d.endPos),f=this.parseIndex(e.endPos),g=this.parseIndex(f.endPos),h=this.parseDict(e.obj.get(0)),i=this.createDict(qc,h,b.strings);b.header=c.obj,b.names=this.parseNameIndex(d.obj),b.strings=this.parseStringIndex(f.obj),b.topDict=i,b.globalSubrIndex=g.obj,this.parsePrivateDict(b.topDict),b.isCIDFont=i.hasName("ROS");var j=i.getByName("CharStrings"),k=this.parseCharStrings(j);b.charStrings=k.charStrings,b.seacs=k.seacs,b.widths=k.widths;var l=i.getByName("FontMatrix");l&&(a.fontMatrix=l);var m=i.getByName("FontBBox");m&&(a.ascent=m[3],a.descent=m[1],a.ascentScaled=!0);var n,o;if(b.isCIDFont){for(var p=this.parseIndex(i.getByName("FDArray")).obj,q=0,r=p.count;r>q;++q){var s=p.get(q),t=this.createDict(qc,this.parseDict(s),b.strings);this.parsePrivateDict(t),b.fdArray.push(t)}o=null,n=this.parseCharsets(i.getByName("charset"),b.charStrings.count,b.strings,!0),b.fdSelect=this.parseFDSelect(i.getByName("FDSelect"),b.charStrings.count)}else n=this.parseCharsets(i.getByName("charset"),b.charStrings.count,b.strings,!1),o=this.parseEncoding(i.getByName("Encoding"),a,b.strings,n.charset);return b.charset=n,b.encoding=o,b},parseHeader:function(){for(var b=this.bytes,d=b.length,e=0;d>e&&1!==b[e];)++e;e>=d?c("Invalid CFF header"):0!==e&&(a("cff data is shifted"),b=b.subarray(e),this.bytes=b);var f=b[0],g=b[1],h=b[2],i=b[3],j=new mc(f,g,h,i);return{obj:j,endPos:h}},parseDict:function(a){function b(){var b=a[e++];return 30===b?d(e):28===b?(b=a[e++],b=(b<<24|a[e++]<<16)>>16):29===b?(b=a[e++],b=b<<8|a[e++],b=b<<8|a[e++],b=b<<8|a[e++]):b>=32&&246>=b?b-139:b>=247&&250>=b?256*(b-247)+a[e++]+108:b>=251&&254>=b?-(256*(b-251))-a[e++]-108:(c("255 is not a valid DICT command"),-1)}function d(){for(var b="",c=15,d=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"],f=a.length;f>e;){var g=a[e++],h=g>>4,i=15&g;if(h===c)break;if(b+=d[h],i===c)break;b+=d[i]}return parseFloat(b)}var e=0,f=[],g=[];e=0;for(var h=a.length;h>e;){var i=a[e];21>=i?(12===i&&(i=i<<8|a[++e]),g.push([i,f]),f=[],++e):f.push(b())}return g},parseIndex:function(a){var b,c,d=new oc,e=this.bytes,f=e[a++]<<8|e[a++],g=[],h=a;if(0!==f){var i=e[a++],j=a+(f+1)*i-1;for(b=0,c=f+1;c>b;++b){for(var k=0,l=0;i>l;++l)k<<=8,k+=e[a++];g.push(j+k)}h=g[f]}for(b=0,c=g.length-1;c>b;++b){var m=g[b],n=g[b+1];d.add(e.subarray(m,n))}return{obj:d,endPos:h}},parseNameIndex:function(a){for(var b=[],c=0,d=a.count;d>c;++c){for(var e=a.get(c),f=Math.min(e.length,127),g=[],h=0;f>h;++h){var j=e[h];(0!==h||0!==j)&&(33>j||j>126||91===j||93===j||40===j||41===j||123===j||125===j||60===j||62===j||47===j||37===j||35===j)?g[h]=95:g[h]=j}b.push(i(g))}return b},parseStringIndex:function(a){for(var b=new nc,c=0,d=a.count;d>c;++c){var e=a.get(c);b.add(i(e))}return b},createDict:function(a,b,c){for(var d=new a(c),e=0,f=b.length;f>e;++e){var g=b[e],h=g[0],i=g[1];d.setByKey(h,i);
+}return d},parseCharStrings:function(a){for(var c=this.parseIndex(a).obj,d=[],g=[],h=c.count,i=0;h>i;i++){for(var j=c.get(i),k=0,l=[],m=!0,n=0,o=!0,p=j,q=p.length,r=!0,s=0;q>s;){var t=p[s++],u=null;if(12===t){var v=p[s++];0===v?(p[s-2]=139,p[s-1]=22,k=0):u=f[v]}else 28===t?(l[k]=(p[s]<<24|p[s+1]<<16)>>16,s+=2,k++):14===t?(k>=4&&(k-=4,Nb&&(d[i]=l.slice(k,k+4),o=!1)),u=e[t]):t>=32&&246>=t?(l[k]=t-139,k++):t>=247&&254>=t?(l[k]=251>t?(t-247<<8)+p[s]+108:-(t-251<<8)-p[s]-108,s++,k++):255===t?(l[k]=(p[s]<<24|p[s+1]<<16|p[s+2]<<8|p[s+3])/65536,s+=4,k++):19===t||20===t?(n+=k>>1,s+=n+7>>3,k%=2,u=e[t]):u=e[t];if(u){if(u.stem&&(n+=k>>1),"min"in u&&!m&&k<u.min){b("Not enough parameters for "+u.id+"; actual: "+k+", expected: "+u.min),o=!1;break}r&&u.stackClearing&&(r=!1,k-=u.min,k>=2&&u.stem?k%=2:k>1&&b("Found too many parameters for stack-clearing command"),k>0&&l[k-1]>=0&&(g[i]=l[k-1])),"stackDelta"in u?("stackFn"in u&&u.stackFn(l,k),k+=u.stackDelta):u.stackClearing?k=0:u.resetStack?(k=0,m=!1):u.undefStack&&(k=0,m=!0,r=!1)}}o||c.set(i,new Uint8Array([14]))}return{charStrings:c,seacs:d,widths:g}},emptyPrivateDictionary:function(a){var b=this.createDict(rc,[],a.strings);a.setByKey(18,[0,0]),a.privateDict=b},parsePrivateDict:function(a){if(!a.hasName("Private"))return void this.emptyPrivateDictionary(a);var b=a.getByName("Private");if(!C(b)||2!==b.length)return void a.removeByName("Private");var c=b[0],d=b[1];if(0===c||d>=this.bytes.length)return void this.emptyPrivateDictionary(a);var e=d+c,f=this.bytes.subarray(d,e),g=this.parseDict(f),h=this.createDict(rc,g,a.strings);if(a.privateDict=h,h.getByName("Subrs")){var i=h.getByName("Subrs"),j=d+i;if(0===i||j>=this.bytes.length)return void this.emptyPrivateDictionary(a);var k=this.parseIndex(j);h.subrsIndex=k.obj}},parseCharsets:function(a,b,d,e){if(0===a)return new tc(!0,sc.ISO_ADOBE,Ja);if(1===a)return new tc(!0,sc.EXPERT,Ka);if(2===a)return new tc(!0,sc.EXPERT_SUBSET,La);var f,g,h,i=this.bytes,j=a,k=i[a++],l=[".notdef"];switch(b-=1,k){case 0:for(h=0;b>h;h++)f=i[a++]<<8|i[a++],l.push(e?f:d.get(f));break;case 1:for(;l.length<=b;)for(f=i[a++]<<8|i[a++],g=i[a++],h=0;g>=h;h++)l.push(e?f++:d.get(f++));break;case 2:for(;l.length<=b;)for(f=i[a++]<<8|i[a++],g=i[a++]<<8|i[a++],h=0;g>=h;h++)l.push(e?f++:d.get(f++));break;default:c("Unknown charset format")}var m=a,n=i.subarray(j,m);return new tc(!1,k,l,n)},parseEncoding:function(a,b,d,e){function f(){var b=k[a++];for(h=0;b>h;h++){var c=k[a++],f=(k[a++]<<8)+(255&k[a++]);j[c]=e.indexOf(d.get(f))}}var g,h,i,j={},k=this.bytes,l=!1,m=!1,n=null;if(0===a||1===a){l=!0,g=a;var o=a?Pb.ExpertEncoding:Pb.StandardEncoding;for(h=0,i=e.length;i>h;h++){var p=o.indexOf(e[h]);-1!==p&&(j[p]=h)}}else{var q=a;switch(g=k[a++],127&g){case 0:var r=k[a++];for(h=1;r>=h;h++)j[k[a++]]=h;break;case 1:var s=k[a++],t=1;for(h=0;s>h;h++)for(var u=k[a++],v=k[a++],w=u;u+v>=w;w++)j[w]=t++;break;default:c("Unknow encoding format: "+g+" in CFF")}var x=a;128&g&&(k[q]&=127,f(),m=!0),n=k.subarray(q,x)}return g=127&g,new uc(l,g,j,n)},parseFDSelect:function(a,b){var d,e=a,f=this.bytes,g=f[a++],h=[];switch(g){case 0:for(d=0;b>d;++d){var i=f[a++];h.push(i)}break;case 3:var j=f[a++]<<8|f[a++];for(d=0;j>d;++d)for(var k=f[a++]<<8|f[a++],l=f[a++],m=f[a]<<8|f[a+1],n=k;m>n;++n)h.push(l);a+=2;break;default:c("Unknown fdselect format "+g)}var o=a;return new vc(h,f.subarray(e,o))}},d}(),lc=function(){function a(){this.header=null,this.names=[],this.topDict=null,this.strings=new nc,this.globalSubrIndex=null,this.encoding=null,this.charset=null,this.charStrings=null,this.fdArray=[],this.fdSelect=null,this.isCIDFont=!1}return a}(),mc=function(){function a(a,b,c,d){this.major=a,this.minor=b,this.hdrSize=c,this.offSize=d}return a}(),nc=function(){function a(){this.strings=[]}return a.prototype={get:function(a){return a>=0&&390>=a?hc[a]:a-391<=this.strings.length?this.strings[a-391]:hc[0]},add:function(a){this.strings.push(a)},get count(){return this.strings.length}},a}(),oc=function(){function a(){this.objects=[],this.length=0}return a.prototype={add:function(a){this.length+=a.length,this.objects.push(a)},set:function(a,b){this.length+=b.length-this.objects[a].length,this.objects[a]=b},get:function(a){return this.objects[a]},get count(){return this.objects.length}},a}(),pc=function(){function a(a,b){this.keyToNameMap=a.keyToNameMap,this.nameToKeyMap=a.nameToKeyMap,this.defaults=a.defaults,this.types=a.types,this.opcodes=a.opcodes,this.order=a.order,this.strings=b,this.values={}}return a.prototype={setByKey:function(a,b){if(!(a in this.keyToNameMap))return!1;if(0===b.length)return!0;var c=this.types[a];return("num"===c||"sid"===c||"offset"===c)&&(b=b[0]),this.values[a]=b,!0},setByName:function(a,b){a in this.nameToKeyMap||c('Invalid dictionary name "'+a+'"'),this.values[this.nameToKeyMap[a]]=b},hasName:function(a){return this.nameToKeyMap[a]in this.values},getByName:function(a){a in this.nameToKeyMap||c('Invalid dictionary name "'+a+'"');var b=this.nameToKeyMap[a];return b in this.values?this.values[b]:this.defaults[b]},removeByName:function(a){delete this.values[this.nameToKeyMap[a]]}},a.createTables=function(a){for(var b={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]},c=0,d=a.length;d>c;++c){var e=a[c],f=C(e[0])?(e[0][0]<<8)+e[0][1]:e[0];b.keyToNameMap[f]=e[1],b.nameToKeyMap[e[1]]=f,b.types[f]=e[2],b.defaults[f]=e[3],b.opcodes[f]=C(e[0])?e[0]:[e[0]],b.order.push(f)}return b},a}(),qc=function(){function a(a){null===c&&(c=pc.createTables(b)),pc.call(this,c,a),this.privateDict=null}var b=[[[12,30],"ROS",["sid","sid","num"],null],[[12,20],"SyntheticBase","num",null],[0,"version","sid",null],[1,"Notice","sid",null],[[12,0],"Copyright","sid",null],[2,"FullName","sid",null],[3,"FamilyName","sid",null],[4,"Weight","sid",null],[[12,1],"isFixedPitch","num",0],[[12,2],"ItalicAngle","num",0],[[12,3],"UnderlinePosition","num",-100],[[12,4],"UnderlineThickness","num",50],[[12,5],"PaintType","num",0],[[12,6],"CharstringType","num",2],[[12,7],"FontMatrix",["num","num","num","num","num","num"],[.001,0,0,.001,0,0]],[13,"UniqueID","num",null],[5,"FontBBox",["num","num","num","num"],[0,0,0,0]],[[12,8],"StrokeWidth","num",0],[14,"XUID","array",null],[15,"charset","offset",0],[16,"Encoding","offset",0],[17,"CharStrings","offset",0],[18,"Private",["offset","offset"],null],[[12,21],"PostScript","sid",null],[[12,22],"BaseFontName","sid",null],[[12,23],"BaseFontBlend","delta",null],[[12,31],"CIDFontVersion","num",0],[[12,32],"CIDFontRevision","num",0],[[12,33],"CIDFontType","num",0],[[12,34],"CIDCount","num",8720],[[12,35],"UIDBase","num",null],[[12,37],"FDSelect","offset",null],[[12,36],"FDArray","offset",null],[[12,38],"FontName","sid",null]],c=null;return a.prototype=Object.create(pc.prototype),a}(),rc=function(){function a(a){null===c&&(c=pc.createTables(b)),pc.call(this,c,a),this.subrsIndex=null}var b=[[6,"BlueValues","delta",null],[7,"OtherBlues","delta",null],[8,"FamilyBlues","delta",null],[9,"FamilyOtherBlues","delta",null],[[12,9],"BlueScale","num",.039625],[[12,10],"BlueShift","num",7],[[12,11],"BlueFuzz","num",1],[10,"StdHW","num",null],[11,"StdVW","num",null],[[12,12],"StemSnapH","delta",null],[[12,13],"StemSnapV","delta",null],[[12,14],"ForceBold","num",0],[[12,17],"LanguageGroup","num",0],[[12,18],"ExpansionFactor","num",.06],[[12,19],"initialRandomSeed","num",0],[20,"defaultWidthX","num",0],[21,"nominalWidthX","num",0],[19,"Subrs","offset",null]],c=null;return a.prototype=Object.create(pc.prototype),a}(),sc={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2},tc=function(){function a(a,b,c,d){this.predefined=a,this.format=b,this.charset=c,this.raw=d}return a}(),uc=function(){function a(a,b,c,d){this.predefined=a,this.format=b,this.encoding=c,this.raw=d}return a}(),vc=function(){function a(a,b){this.fdSelect=a,this.raw=b}return a}(),wc=function(){function a(){this.offsets={}}return a.prototype={isTracking:function(a){return a in this.offsets},track:function(a,b){a in this.offsets&&c("Already tracking location of "+a),this.offsets[a]=b},offset:function(a){for(var b in this.offsets)this.offsets[b]+=a},setEntryLocation:function(a,b,d){a in this.offsets||c("Not tracking location of "+a);for(var e=d.data,f=this.offsets[a],g=5,h=0,i=b.length;i>h;++h){var j=h*g+f,k=j+1,l=j+2,m=j+3,n=j+4;(29!==e[j]||0!==e[k]||0!==e[l]||0!==e[m]||0!==e[n])&&c("writing to an offset that is not empty");var o=b[h];e[j]=29,e[k]=o>>24&255,e[l]=o>>16&255,e[m]=o>>8&255,e[n]=255&o}}},a}(),xc=function(){function a(a){this.cff=a}return a.prototype={compile:function(){var a=this.cff,b={data:[],length:0,add:function(a){this.data=this.data.concat(a),this.length=this.data.length}},c=this.compileHeader(a.header);b.add(c);var d=this.compileNameIndex(a.names);if(b.add(d),a.isCIDFont&&a.topDict.hasName("FontMatrix")){var e=a.topDict.getByName("FontMatrix");a.topDict.removeByName("FontMatrix");for(var f=0,g=a.fdArray.length;g>f;f++){var h=a.fdArray[f],i=e.slice(0);h.hasName("FontMatrix")&&(i=na.transform(i,h.getByName("FontMatrix"))),h.setByName("FontMatrix",i)}}var j=this.compileTopDicts([a.topDict],b.length,a.isCIDFont);b.add(j.output);var k=j.trackers[0],l=this.compileStringIndex(a.strings.strings);b.add(l);var m=this.compileIndex(a.globalSubrIndex);if(b.add(m),a.encoding&&a.topDict.hasName("Encoding"))if(a.encoding.predefined)k.setEntryLocation("Encoding",[a.encoding.format],b);else{var n=this.compileEncoding(a.encoding);k.setEntryLocation("Encoding",[b.length],b),b.add(n)}if(a.charset&&a.topDict.hasName("charset"))if(a.charset.predefined)k.setEntryLocation("charset",[a.charset.format],b);else{var o=this.compileCharset(a.charset);k.setEntryLocation("charset",[b.length],b),b.add(o)}var p=this.compileCharStrings(a.charStrings);if(k.setEntryLocation("CharStrings",[b.length],b),b.add(p),a.isCIDFont){k.setEntryLocation("FDSelect",[b.length],b);var q=this.compileFDSelect(a.fdSelect.raw);b.add(q),j=this.compileTopDicts(a.fdArray,b.length,!0),k.setEntryLocation("FDArray",[b.length],b),b.add(j.output);var r=j.trackers;this.compilePrivateDicts(a.fdArray,r,b)}return this.compilePrivateDicts([a.topDict],[k],b),b.add([0]),b.data},encodeNumber:function(a){return parseFloat(a)!==parseInt(a,10)||isNaN(a)?this.encodeFloat(a):this.encodeInteger(a)},encodeFloat:function(a){var b=a.toString(),c=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(b);if(c){var d=parseFloat("1e"+((c[2]?+c[2]:0)+c[1].length));b=(Math.round(a*d)/d).toString()}var e,f,g="";for(e=0,f=b.length;f>e;++e){var h=b[e];g+="e"===h?"-"===b[++e]?"c":"b":"."===h?"a":"-"===h?"e":h}g+=1&g.length?"f":"ff";var i=[30];for(e=0,f=g.length;f>e;e+=2)i.push(parseInt(g.substr(e,2),16));return i},encodeInteger:function(a){var b;return a>=-107&&107>=a?b=[a+139]:a>=108&&1131>=a?(a=[a-108],b=[(a>>8)+247,255&a]):a>=-1131&&-108>=a?(a=-a-108,b=[(a>>8)+251,255&a]):b=a>=-32768&&32767>=a?[28,a>>8&255,255&a]:[29,a>>24&255,a>>16&255,a>>8&255,255&a],b},compileHeader:function(a){return[a.major,a.minor,a.hdrSize,a.offSize]},compileNameIndex:function(a){for(var b=new oc,c=0,d=a.length;d>c;++c)b.add(j(a[c]));return this.compileIndex(b)},compileTopDicts:function(a,b,c){for(var d=[],e=new oc,f=0,g=a.length;g>f;++f){var h=a[f];c&&(h.removeByName("CIDFontVersion"),h.removeByName("CIDFontRevision"),h.removeByName("CIDFontType"),h.removeByName("CIDCount"),h.removeByName("UIDBase"));var i=new wc,j=this.compileDict(h,i);d.push(i),e.add(j),i.offset(b)}return e=this.compileIndex(e,d),{trackers:d,output:e}},compilePrivateDicts:function(a,b,c){for(var d=0,f=a.length;f>d;++d){var g=a[d];e(g.privateDict&&g.hasName("Private"),"There must be an private dictionary.");var h=g.privateDict,i=new wc,j=this.compileDict(h,i),k=c.length;if(i.offset(k),j.length||(k=0),b[d].setEntryLocation("Private",[j.length,k],c),c.add(j),h.subrsIndex&&h.hasName("Subrs")){var l=this.compileIndex(h.subrsIndex);i.setEntryLocation("Subrs",[j.length],c),c.add(l)}}},compileDict:function(a,b){for(var d=[],e=a.order,f=0;f<e.length;++f){var g=e[f];if(g in a.values){var h=a.values[g],i=a.types[g];if(C(i)||(i=[i]),C(h)||(h=[h]),0!==h.length){for(var j=0,k=i.length;k>j;++j){var l=i[j],m=h[j];switch(l){case"num":case"sid":d=d.concat(this.encodeNumber(m));break;case"offset":var n=a.keyToNameMap[g];b.isTracking(n)||b.track(n,d.length),d=d.concat([29,0,0,0,0]);break;case"array":case"delta":d=d.concat(this.encodeNumber(m));for(var o=1,p=h.length;p>o;++o)d=d.concat(this.encodeNumber(h[o]));break;default:c("Unknown data type of "+l)}}d=d.concat(a.opcodes[g])}}}return d},compileStringIndex:function(a){for(var b=new oc,c=0,d=a.length;d>c;++c)b.add(j(a[c]));return this.compileIndex(b)},compileGlobalSubrIndex:function(){var a=this.cff.globalSubrIndex;this.out.writeByteArray(this.compileIndex(a))},compileCharStrings:function(a){return this.compileIndex(a)},compileCharset:function(a){return this.compileTypedArray(a.raw)},compileEncoding:function(a){return this.compileTypedArray(a.raw)},compileFDSelect:function(a){return this.compileTypedArray(a)},compileTypedArray:function(a){for(var b=[],c=0,d=a.length;d>c;++c)b[c]=a[c];return b},compileIndex:function(a,b){b=b||[];var c=a.objects,d=c.length;if(0===d)return[0,0,0];var e,f=[d>>8&255,255&d],g=1;for(e=0;d>e;++e)g+=c[e].length;var h;h=256>g?1:65536>g?2:16777216>g?3:4,f.push(h);var i=1;for(e=0;d+1>e;e++)1===h?f.push(255&i):2===h?f.push(i>>8&255,255&i):3===h?f.push(i>>16&255,i>>8&255,255&i):f.push(i>>>24&255,i>>16&255,i>>8&255,255&i),c[e]&&(i+=c[e].length);for(e=0;d>e;e++){b[e]&&b[e].offset(f.length);for(var j=0,k=c[e].length;k>j;j++)f.push(c[e][j])}return f}},a}();!function(){/Windows/.test(navigator.userAgent)&&(Nb=!0)}(),function(){/Windows.*Chrome/.test(navigator.userAgent)&&(Kb=!0)}();var yc=function(){function a(a,b){return a[b]<<24|a[b+1]<<16|a[b+2]<<8|a[b+3]}function b(a,b){return a[b]<<8|a[b+1]}function d(d,e,f){var g,h,i,j,k=1===b(d,e+2)?a(d,e+8):a(d,e+16),l=b(d,e+k);if(4===l){g=b(d,e+k+2);var m=b(d,e+k+6)>>1;for(i=e+k+14,h=[],j=0;m>j;j++,i+=2)h[j]={end:b(d,i)};for(i+=2,j=0;m>j;j++,i+=2)h[j].start=b(d,i);for(j=0;m>j;j++,i+=2)h[j].idDelta=b(d,i);for(j=0;m>j;j++,i+=2){var n=b(d,i);if(0!==n){h[j].ids=[];for(var o=0,p=h[j].end-h[j].start+1;p>o;o++)h[j].ids[o]=b(d,i+n),n+=2}}return h}if(12===l){g=a(d,e+k+4);var q=a(d,e+k+12);for(i=e+k+16,h=[],j=0;q>j;j++)h.push({start:a(d,i),end:a(d,i+4),idDelta:a(d,i+8)-a(d,i)}),i+=12;return h}c("not supported cmap: "+l)}function e(a,b,c){var d={},e=new kc(new Mc(a,b,c-b),d),f=e.parse();return{glyphs:f.charStrings.objects,subrs:f.topDict.privateDict&&f.topDict.privateDict.subrsIndex&&f.topDict.privateDict.subrsIndex.objects,gsubrs:f.globalSubrIndex&&f.globalSubrIndex.objects}}function f(a,b,c){var d,e;c?(d=4,e=function(a,b){return a[b]<<24|a[b+1]<<16|a[b+2]<<8|a[b+3]}):(d=2,e=function(a,b){return a[b]<<9|a[b+1]<<1});for(var f=[],g=e(b,0),h=d;h<b.length;h+=d){var i=e(b,h);f.push(a.subarray(g,i)),g=i}return f}function g(a,b){for(var c=b.charCodeAt(0),d=0,e=a.length-1;e>d;){var f=d+e+1>>1;c<a[f].start?e=f-1:d=f}return a[d].start<=c&&c<=a[d].end?a[d].idDelta+(a[d].ids?a[d].ids[c-a[d].start]:c)&65535:0}function h(a,b,c){function d(a,c){b.push({cmd:"moveTo",args:[a,c]})}function e(a,c){b.push({cmd:"lineTo",args:[a,c]})}function f(a,c,d,e){b.push({cmd:"quadraticCurveTo",args:[a,c,d,e]})}var g,i=0,j=(a[i]<<24|a[i+1]<<16)>>16,k=0,l=0;if(i+=10,0>j){do{g=a[i]<<8|a[i+1];var m=a[i+2]<<8|a[i+3];i+=4;var n,o;1&g?(n=(a[i]<<24|a[i+1]<<16)>>16,o=(a[i+2]<<24|a[i+3]<<16)>>16,i+=4):(n=a[i++],o=a[i++]),2&g?(k=n,l=o):(k=0,l=0);var p=1,q=1,r=0,s=0;8&g?(p=q=(a[i]<<24|a[i+1]<<16)/1073741824,i+=2):64&g?(p=(a[i]<<24|a[i+1]<<16)/1073741824,q=(a[i+2]<<24|a[i+3]<<16)/1073741824,i+=4):128&g&&(p=(a[i]<<24|a[i+1]<<16)/1073741824,r=(a[i+2]<<24|a[i+3]<<16)/1073741824,s=(a[i+4]<<24|a[i+5]<<16)/1073741824,q=(a[i+6]<<24|a[i+7]<<16)/1073741824,i+=8);var t=c.glyphs[m];t&&(b.push({cmd:"save"}),b.push({cmd:"transform",args:[p,r,s,q,k,l]}),h(t,b,c),b.push({cmd:"restore"}))}while(32&g)}else{var u,v,w=[];for(u=0;j>u;u++)w.push(a[i]<<8|a[i+1]),i+=2;var x=a[i]<<8|a[i+1];i+=2+x;for(var y=w[w.length-1]+1,z=[];z.length<y;){g=a[i++];var A=1;for(8&g&&(A+=a[i++]);A-- >0;)z.push({flags:g})}for(u=0;y>u;u++){switch(18&z[u].flags){case 0:k+=(a[i]<<24|a[i+1]<<16)>>16,i+=2;break;case 2:k-=a[i++];break;case 18:k+=a[i++]}z[u].x=k}for(u=0;y>u;u++){switch(36&z[u].flags){case 0:l+=(a[i]<<24|a[i+1]<<16)>>16,i+=2;break;case 4:l-=a[i++];break;case 36:l+=a[i++]}z[u].y=l}var B=0;for(i=0;j>i;i++){var C=w[i],D=z.slice(B,C+1);if(1&D[0].flags)D.push(D[0]);else if(1&D[D.length-1].flags)D.unshift(D[D.length-1]);else{var E={flags:1,x:(D[0].x+D[D.length-1].x)/2,y:(D[0].y+D[D.length-1].y)/2};D.unshift(E),D.push(E)}for(d(D[0].x,D[0].y),u=1,v=D.length;v>u;u++)1&D[u].flags?e(D[u].x,D[u].y):1&D[u+1].flags?(f(D[u].x,D[u].y,D[u+1].x,D[u+1].y),u++):f(D[u].x,D[u].y,(D[u].x+D[u+1].x)/2,(D[u].y+D[u+1].y)/2);B=C+1}}}function j(a,b,d){function e(a,c){b.push({cmd:"moveTo",args:[a,c]})}function f(a,c){b.push({cmd:"lineTo",args:[a,c]})}function h(a,c,d,e,f,g){b.push({cmd:"bezierCurveTo",args:[a,c,d,e,f,g]})}function i(a){for(var o=0;o<a.length;){var p,q,r,s,t,u,v,w,x,y=!1,z=a[o++];switch(z){case 1:n+=k.length>>1,y=!0;break;case 3:n+=k.length>>1,y=!0;break;case 4:m+=k.pop(),e(l,m),y=!0;break;case 5:for(;k.length>0;)l+=k.shift(),m+=k.shift(),f(l,m);break;case 6:for(;k.length>0&&(l+=k.shift(),f(l,m),0!==k.length);)m+=k.shift(),f(l,m);break;case 7:for(;k.length>0&&(m+=k.shift(),f(l,m),0!==k.length);)l+=k.shift(),f(l,m);break;case 8:for(;k.length>0;)p=l+k.shift(),r=m+k.shift(),q=p+k.shift(),s=r+k.shift(),l=q+k.shift(),m=s+k.shift(),h(p,r,q,s,l,m);break;case 10:w=k.pop()+d.subrsBias,x=d.subrs[w],x&&i(x);break;case 11:return;case 12:switch(z=a[o++]){case 34:p=l+k.shift(),q=p+k.shift(),t=m+k.shift(),l=q+k.shift(),h(p,m,q,t,l,t),p=l+k.shift(),q=p+k.shift(),l=q+k.shift(),h(p,t,q,m,l,m);break;case 35:p=l+k.shift(),r=m+k.shift(),q=p+k.shift(),s=r+k.shift(),l=q+k.shift(),m=s+k.shift(),h(p,r,q,s,l,m),p=l+k.shift(),r=m+k.shift(),q=p+k.shift(),s=r+k.shift(),l=q+k.shift(),m=s+k.shift(),h(p,r,q,s,l,m),k.pop();break;case 36:p=l+k.shift(),t=m+k.shift(),q=p+k.shift(),u=t+k.shift(),l=q+k.shift(),h(p,t,q,u,l,u),p=l+k.shift(),q=p+k.shift(),v=u+k.shift(),l=q+k.shift(),h(p,u,q,v,l,m);break;case 37:var A=l,B=m;p=l+k.shift(),r=m+k.shift(),q=p+k.shift(),s=r+k.shift(),l=q+k.shift(),m=s+k.shift(),h(p,r,q,s,l,m),p=l+k.shift(),r=m+k.shift(),q=p+k.shift(),s=r+k.shift(),l=q,m=s,Math.abs(l-A)>Math.abs(m-B)?l+=k.shift():m+=k.shift(),h(p,r,q,s,l,m);break;default:c("unknown operator: 12 "+z)}break;case 14:if(k.length>=4){var C=k.pop(),D=k.pop();m=k.pop(),l=k.pop(),b.push({cmd:"save"}),b.push({cmd:"translate",args:[l,m]});var E=g(d.cmap,String.fromCharCode(d.glyphNameMap[Pb.StandardEncoding[C]]));j(d.glyphs[E],b,d),b.push({cmd:"restore"}),E=g(d.cmap,String.fromCharCode(d.glyphNameMap[Pb.StandardEncoding[D]])),j(d.glyphs[E],b,d)}return;case 18:n+=k.length>>1,y=!0;break;case 19:n+=k.length>>1,o+=n+7>>3,y=!0;break;case 20:n+=k.length>>1,o+=n+7>>3,y=!0;break;case 21:m+=k.pop(),l+=k.pop(),e(l,m),y=!0;break;case 22:l+=k.pop(),e(l,m),y=!0;break;case 23:n+=k.length>>1,y=!0;break;case 24:for(;k.length>2;)p=l+k.shift(),r=m+k.shift(),q=p+k.shift(),s=r+k.shift(),l=q+k.shift(),m=s+k.shift(),h(p,r,q,s,l,m);l+=k.shift(),m+=k.shift(),f(l,m);break;case 25:for(;k.length>6;)l+=k.shift(),m+=k.shift(),f(l,m);p=l+k.shift(),r=m+k.shift(),q=p+k.shift(),s=r+k.shift(),l=q+k.shift(),m=s+k.shift(),h(p,r,q,s,l,m);break;case 26:for(k.length%2&&(l+=k.shift());k.length>0;)p=l,r=m+k.shift(),q=p+k.shift(),s=r+k.shift(),l=q,m=s+k.shift(),h(p,r,q,s,l,m);break;case 27:for(k.length%2&&(m+=k.shift());k.length>0;)p=l+k.shift(),r=m,q=p+k.shift(),s=r+k.shift(),l=q+k.shift(),m=s,h(p,r,q,s,l,m);break;case 28:k.push((a[o]<<24|a[o+1]<<16)>>16),o+=2;break;case 29:w=k.pop()+d.gsubrsBias,x=d.gsubrs[w],x&&i(x);break;case 30:for(;k.length>0&&(p=l,r=m+k.shift(),q=p+k.shift(),s=r+k.shift(),l=q+k.shift(),m=s+(1===k.length?k.shift():0),h(p,r,q,s,l,m),0!==k.length);)p=l+k.shift(),r=m,q=p+k.shift(),s=r+k.shift(),m=s+k.shift(),l=q+(1===k.length?k.shift():0),h(p,r,q,s,l,m);break;case 31:for(;k.length>0&&(p=l+k.shift(),r=m,q=p+k.shift(),s=r+k.shift(),m=s+k.shift(),l=q+(1===k.length?k.shift():0),h(p,r,q,s,l,m),0!==k.length);)p=l,r=m+k.shift(),q=p+k.shift(),s=r+k.shift(),l=q+k.shift(),m=s+(1===k.length?k.shift():0),h(p,r,q,s,l,m);break;default:32>z&&c("unknown operator: "+z),247>z?k.push(z-139):251>z?k.push(256*(z-247)+a[o++]+108):255>z?k.push(256*-(z-251)-a[o++]-108):(k.push((a[o]<<24|a[o+1]<<16|a[o+2]<<8|a[o+3])/65536),o+=4)}y&&(k.length=0)}}var k=[],l=0,m=0,n=0;i(a)}function k(a){this.compiledGlyphs={},this.fontMatrix=a}function l(a,b,c){c=c||[488e-6,0,0,488e-6,0,0],k.call(this,c),this.glyphs=a,this.cmap=b,this.compiledGlyphs=[]}function m(a,b,c,d){c=c||[.001,0,0,.001,0,0],k.call(this,c),this.glyphs=a.glyphs,this.gsubrs=a.gsubrs||[],this.subrs=a.subrs||[],this.cmap=b,this.glyphNameMap=d||zc,this.compiledGlyphs=[],this.gsubrsBias=this.gsubrs.length<1240?107:this.gsubrs.length<33900?1131:32768,this.subrsBias=this.subrs.length<1240?107:this.subrs.length<33900?1131:32768}var n="";return k.prototype={getPathJs:function(a){var b=g(this.cmap,a),c=this.compiledGlyphs[b];return c||(this.compiledGlyphs[b]=c=this.compileGlyph(this.glyphs[b])),c},compileGlyph:function(a){if(!a||0===a.length||14===a[0])return n;var b=[];return b.push({cmd:"save"}),b.push({cmd:"transform",args:this.fontMatrix.slice()}),b.push({cmd:"scale",args:["size","-size"]}),this.compileGlyphImpl(a,b),b.push({cmd:"restore"}),b},compileGlyphImpl:function(){c("Children classes should implement this.")},hasBuiltPath:function(a){var b=g(this.cmap,a);return b in this.compiledGlyphs}},na.inherit(l,k,{compileGlyphImpl:function(a,b){h(a,b,this)}}),na.inherit(m,k,{compileGlyphImpl:function(a,b){j(a,b,this)}}),{create:function(c){for(var g,h,j,k,n,o,p=new Uint8Array(c.data),q=b(p,4),r=0,s=12;q>r;r++,s+=16){var t=i(p.subarray(s,s+4)),u=a(p,s+8),v=a(p,s+12);switch(t){case"cmap":g=d(p,u,u+v);break;case"glyf":h=p.subarray(u,u+v);break;case"loca":j=p.subarray(u,u+v);break;case"head":o=b(p,u+18),n=b(p,u+50);break;case"CFF ":k=e(p,u,u+v)}}if(h){var w=o?[1/o,0,0,1/o,0,0]:c.fontMatrix;return new l(f(h,j,n),g,w)}return new m(k,g,c.fontMatrix,c.glyphNameMap)}}}(),zc={A:65,AE:198,AEacute:508,AEmacron:482,AEsmall:63462,Aacute:193,Aacutesmall:63457,Abreve:258,Abreveacute:7854,Abrevecyrillic:1232,Abrevedotbelow:7862,Abrevegrave:7856,Abrevehookabove:7858,Abrevetilde:7860,Acaron:461,Acircle:9398,Acircumflex:194,Acircumflexacute:7844,Acircumflexdotbelow:7852,Acircumflexgrave:7846,Acircumflexhookabove:7848,Acircumflexsmall:63458,Acircumflextilde:7850,Acute:63177,Acutesmall:63412,Acyrillic:1040,Adblgrave:512,Adieresis:196,Adieresiscyrillic:1234,Adieresismacron:478,Adieresissmall:63460,Adotbelow:7840,Adotmacron:480,Agrave:192,Agravesmall:63456,Ahookabove:7842,Aiecyrillic:1236,Ainvertedbreve:514,Alpha:913,Alphatonos:902,Amacron:256,Amonospace:65313,Aogonek:260,Aring:197,Aringacute:506,Aringbelow:7680,Aringsmall:63461,Asmall:63329,Atilde:195,Atildesmall:63459,Aybarmenian:1329,B:66,Bcircle:9399,Bdotaccent:7682,Bdotbelow:7684,Becyrillic:1041,Benarmenian:1330,Beta:914,Bhook:385,Blinebelow:7686,Bmonospace:65314,Brevesmall:63220,Bsmall:63330,Btopbar:386,C:67,Caarmenian:1342,Cacute:262,Caron:63178,Caronsmall:63221,Ccaron:268,Ccedilla:199,Ccedillaacute:7688,Ccedillasmall:63463,Ccircle:9400,Ccircumflex:264,Cdot:266,Cdotaccent:266,Cedillasmall:63416,Chaarmenian:1353,Cheabkhasiancyrillic:1212,Checyrillic:1063,Chedescenderabkhasiancyrillic:1214,Chedescendercyrillic:1206,Chedieresiscyrillic:1268,Cheharmenian:1347,Chekhakassiancyrillic:1227,Cheverticalstrokecyrillic:1208,Chi:935,Chook:391,Circumflexsmall:63222,Cmonospace:65315,Coarmenian:1361,Csmall:63331,D:68,DZ:497,DZcaron:452,Daarmenian:1332,Dafrican:393,Dcaron:270,Dcedilla:7696,Dcircle:9401,Dcircumflexbelow:7698,Dcroat:272,Ddotaccent:7690,Ddotbelow:7692,Decyrillic:1044,Deicoptic:1006,Delta:8710,Deltagreek:916,Dhook:394,Dieresis:63179,DieresisAcute:63180,DieresisGrave:63181,Dieresissmall:63400,Digammagreek:988,Djecyrillic:1026,Dlinebelow:7694,Dmonospace:65316,Dotaccentsmall:63223,Dslash:272,Dsmall:63332,Dtopbar:395,Dz:498,Dzcaron:453,Dzeabkhasiancyrillic:1248,Dzecyrillic:1029,Dzhecyrillic:1039,E:69,Eacute:201,Eacutesmall:63465,Ebreve:276,Ecaron:282,Ecedillabreve:7708,Echarmenian:1333,Ecircle:9402,Ecircumflex:202,Ecircumflexacute:7870,Ecircumflexbelow:7704,Ecircumflexdotbelow:7878,Ecircumflexgrave:7872,Ecircumflexhookabove:7874,Ecircumflexsmall:63466,Ecircumflextilde:7876,Ecyrillic:1028,Edblgrave:516,Edieresis:203,Edieresissmall:63467,Edot:278,Edotaccent:278,Edotbelow:7864,Efcyrillic:1060,Egrave:200,Egravesmall:63464,Eharmenian:1335,Ehookabove:7866,Eightroman:8551,Einvertedbreve:518,Eiotifiedcyrillic:1124,Elcyrillic:1051,Elevenroman:8554,Emacron:274,Emacronacute:7702,Emacrongrave:7700,Emcyrillic:1052,Emonospace:65317,Encyrillic:1053,Endescendercyrillic:1186,Eng:330,Enghecyrillic:1188,Enhookcyrillic:1223,Eogonek:280,Eopen:400,Epsilon:917,Epsilontonos:904,Ercyrillic:1056,Ereversed:398,Ereversedcyrillic:1069,Escyrillic:1057,Esdescendercyrillic:1194,Esh:425,Esmall:63333,Eta:919,Etarmenian:1336,Etatonos:905,Eth:208,Ethsmall:63472,Etilde:7868,Etildebelow:7706,Euro:8364,Ezh:439,Ezhcaron:494,Ezhreversed:440,F:70,Fcircle:9403,Fdotaccent:7710,Feharmenian:1366,Feicoptic:996,Fhook:401,Fitacyrillic:1138,Fiveroman:8548,Fmonospace:65318,Fourroman:8547,Fsmall:63334,G:71,GBsquare:13191,Gacute:500,Gamma:915,Gammaafrican:404,Gangiacoptic:1002,Gbreve:286,Gcaron:486,Gcedilla:290,Gcircle:9404,Gcircumflex:284,Gcommaaccent:290,Gdot:288,Gdotaccent:288,Gecyrillic:1043,Ghadarmenian:1346,Ghemiddlehookcyrillic:1172,Ghestrokecyrillic:1170,Gheupturncyrillic:1168,Ghook:403,Gimarmenian:1331,Gjecyrillic:1027,Gmacron:7712,Gmonospace:65319,Grave:63182,Gravesmall:63328,Gsmall:63335,Gsmallhook:667,Gstroke:484,H:72,H18533:9679,H18543:9642,H18551:9643,H22073:9633,HPsquare:13259,Haabkhasiancyrillic:1192,Hadescendercyrillic:1202,Hardsigncyrillic:1066,Hbar:294,Hbrevebelow:7722,Hcedilla:7720,Hcircle:9405,Hcircumflex:292,Hdieresis:7718,Hdotaccent:7714,Hdotbelow:7716,Hmonospace:65320,Hoarmenian:1344,Horicoptic:1e3,Hsmall:63336,Hungarumlaut:63183,Hungarumlautsmall:63224,Hzsquare:13200,I:73,IAcyrillic:1071,IJ:306,IUcyrillic:1070,Iacute:205,Iacutesmall:63469,Ibreve:300,Icaron:463,Icircle:9406,Icircumflex:206,Icircumflexsmall:63470,Icyrillic:1030,Idblgrave:520,Idieresis:207,Idieresisacute:7726,Idieresiscyrillic:1252,Idieresissmall:63471,Idot:304,Idotaccent:304,Idotbelow:7882,Iebrevecyrillic:1238,Iecyrillic:1045,Ifraktur:8465,Igrave:204,Igravesmall:63468,Ihookabove:7880,Iicyrillic:1048,Iinvertedbreve:522,Iishortcyrillic:1049,Imacron:298,Imacroncyrillic:1250,Imonospace:65321,Iniarmenian:1339,Iocyrillic:1025,Iogonek:302,Iota:921,Iotaafrican:406,Iotadieresis:938,Iotatonos:906,Ismall:63337,Istroke:407,Itilde:296,Itildebelow:7724,Izhitsacyrillic:1140,Izhitsadblgravecyrillic:1142,J:74,Jaarmenian:1345,Jcircle:9407,Jcircumflex:308,Jecyrillic:1032,Jheharmenian:1355,Jmonospace:65322,Jsmall:63338,K:75,KBsquare:13189,KKsquare:13261,Kabashkircyrillic:1184,Kacute:7728,Kacyrillic:1050,Kadescendercyrillic:1178,Kahookcyrillic:1219,Kappa:922,Kastrokecyrillic:1182,Kaverticalstrokecyrillic:1180,Kcaron:488,Kcedilla:310,Kcircle:9408,Kcommaaccent:310,Kdotbelow:7730,Keharmenian:1364,Kenarmenian:1343,Khacyrillic:1061,Kheicoptic:998,Khook:408,Kjecyrillic:1036,Klinebelow:7732,Kmonospace:65323,Koppacyrillic:1152,Koppagreek:990,Ksicyrillic:1134,Ksmall:63339,L:76,LJ:455,LL:63167,Lacute:313,Lambda:923,Lcaron:317,Lcedilla:315,Lcircle:9409,Lcircumflexbelow:7740,Lcommaaccent:315,Ldot:319,Ldotaccent:319,Ldotbelow:7734,Ldotbelowmacron:7736,Liwnarmenian:1340,Lj:456,Ljecyrillic:1033,Llinebelow:7738,Lmonospace:65324,Lslash:321,Lslashsmall:63225,Lsmall:63340,M:77,MBsquare:13190,Macron:63184,Macronsmall:63407,Macute:7742,Mcircle:9410,Mdotaccent:7744,Mdotbelow:7746,Menarmenian:1348,Mmonospace:65325,Msmall:63341,Mturned:412,Mu:924,N:78,NJ:458,Nacute:323,Ncaron:327,Ncedilla:325,Ncircle:9411,Ncircumflexbelow:7754,Ncommaaccent:325,Ndotaccent:7748,Ndotbelow:7750,Nhookleft:413,Nineroman:8552,Nj:459,Njecyrillic:1034,Nlinebelow:7752,Nmonospace:65326,Nowarmenian:1350,Nsmall:63342,Ntilde:209,Ntildesmall:63473,Nu:925,O:79,OE:338,OEsmall:63226,Oacute:211,Oacutesmall:63475,Obarredcyrillic:1256,Obarreddieresiscyrillic:1258,Obreve:334,Ocaron:465,Ocenteredtilde:415,Ocircle:9412,Ocircumflex:212,Ocircumflexacute:7888,Ocircumflexdotbelow:7896,Ocircumflexgrave:7890,Ocircumflexhookabove:7892,Ocircumflexsmall:63476,Ocircumflextilde:7894,Ocyrillic:1054,Odblacute:336,Odblgrave:524,Odieresis:214,Odieresiscyrillic:1254,Odieresissmall:63478,Odotbelow:7884,Ogoneksmall:63227,Ograve:210,Ogravesmall:63474,Oharmenian:1365,Ohm:8486,Ohookabove:7886,Ohorn:416,Ohornacute:7898,Ohorndotbelow:7906,Ohorngrave:7900,Ohornhookabove:7902,Ohorntilde:7904,Ohungarumlaut:336,Oi:418,Oinvertedbreve:526,Omacron:332,Omacronacute:7762,Omacrongrave:7760,Omega:8486,Omegacyrillic:1120,Omegagreek:937,Omegaroundcyrillic:1146,Omegatitlocyrillic:1148,Omegatonos:911,Omicron:927,Omicrontonos:908,Omonospace:65327,Oneroman:8544,Oogonek:490,Oogonekmacron:492,Oopen:390,Oslash:216,Oslashacute:510,Oslashsmall:63480,Osmall:63343,Ostrokeacute:510,Otcyrillic:1150,Otilde:213,Otildeacute:7756,Otildedieresis:7758,Otildesmall:63477,P:80,Pacute:7764,Pcircle:9413,Pdotaccent:7766,Pecyrillic:1055,Peharmenian:1354,Pemiddlehookcyrillic:1190,Phi:934,Phook:420,Pi:928,Piwrarmenian:1363,Pmonospace:65328,Psi:936,Psicyrillic:1136,Psmall:63344,Q:81,Qcircle:9414,Qmonospace:65329,Qsmall:63345,R:82,Raarmenian:1356,Racute:340,Rcaron:344,Rcedilla:342,Rcircle:9415,Rcommaaccent:342,Rdblgrave:528,Rdotaccent:7768,Rdotbelow:7770,Rdotbelowmacron:7772,Reharmenian:1360,Rfraktur:8476,Rho:929,Ringsmall:63228,Rinvertedbreve:530,Rlinebelow:7774,Rmonospace:65330,Rsmall:63346,Rsmallinverted:641,Rsmallinvertedsuperior:694,S:83,SF010000:9484,SF020000:9492,SF030000:9488,SF040000:9496,SF050000:9532,SF060000:9516,SF070000:9524,SF080000:9500,SF090000:9508,SF100000:9472,SF110000:9474,SF190000:9569,SF200000:9570,SF210000:9558,SF220000:9557,SF230000:9571,SF240000:9553,SF250000:9559,SF260000:9565,SF270000:9564,SF280000:9563,SF360000:9566,SF370000:9567,SF380000:9562,SF390000:9556,SF400000:9577,SF410000:9574,SF420000:9568,SF430000:9552,SF440000:9580,SF450000:9575,SF460000:9576,SF470000:9572,SF480000:9573,SF490000:9561,SF500000:9560,SF510000:9554,SF520000:9555,SF530000:9579,SF540000:9578,Sacute:346,Sacutedotaccent:7780,Sampigreek:992,Scaron:352,Scarondotaccent:7782,Scaronsmall:63229,Scedilla:350,Schwa:399,Schwacyrillic:1240,Schwadieresiscyrillic:1242,Scircle:9416,Scircumflex:348,Scommaaccent:536,Sdotaccent:7776,Sdotbelow:7778,Sdotbelowdotaccent:7784,Seharmenian:1357,Sevenroman:8550,Shaarmenian:1351,Shacyrillic:1064,Shchacyrillic:1065,Sheicoptic:994,Shhacyrillic:1210,Shimacoptic:1004,Sigma:931,Sixroman:8549,Smonospace:65331,Softsigncyrillic:1068,Ssmall:63347,Stigmagreek:986,T:84,Tau:932,Tbar:358,Tcaron:356,Tcedilla:354,Tcircle:9417,Tcircumflexbelow:7792,Tcommaaccent:354,Tdotaccent:7786,Tdotbelow:7788,Tecyrillic:1058,Tedescendercyrillic:1196,Tenroman:8553,Tetsecyrillic:1204,Theta:920,Thook:428,Thorn:222,Thornsmall:63486,Threeroman:8546,Tildesmall:63230,Tiwnarmenian:1359,Tlinebelow:7790,Tmonospace:65332,Toarmenian:1337,Tonefive:444,Tonesix:388,Tonetwo:423,Tretroflexhook:430,Tsecyrillic:1062,Tshecyrillic:1035,Tsmall:63348,Twelveroman:8555,Tworoman:8545,U:85,Uacute:218,Uacutesmall:63482,Ubreve:364,Ucaron:467,Ucircle:9418,Ucircumflex:219,Ucircumflexbelow:7798,Ucircumflexsmall:63483,Ucyrillic:1059,Udblacute:368,Udblgrave:532,Udieresis:220,Udieresisacute:471,Udieresisbelow:7794,Udieresiscaron:473,Udieresiscyrillic:1264,Udieresisgrave:475,Udieresismacron:469,Udieresissmall:63484,Udotbelow:7908,Ugrave:217,Ugravesmall:63481,Uhookabove:7910,Uhorn:431,Uhornacute:7912,Uhorndotbelow:7920,Uhorngrave:7914,Uhornhookabove:7916,Uhorntilde:7918,Uhungarumlaut:368,Uhungarumlautcyrillic:1266,Uinvertedbreve:534,Ukcyrillic:1144,Umacron:362,Umacroncyrillic:1262,Umacrondieresis:7802,Umonospace:65333,Uogonek:370,Upsilon:933,
+Upsilon1:978,Upsilonacutehooksymbolgreek:979,Upsilonafrican:433,Upsilondieresis:939,Upsilondieresishooksymbolgreek:980,Upsilonhooksymbol:978,Upsilontonos:910,Uring:366,Ushortcyrillic:1038,Usmall:63349,Ustraightcyrillic:1198,Ustraightstrokecyrillic:1200,Utilde:360,Utildeacute:7800,Utildebelow:7796,V:86,Vcircle:9419,Vdotbelow:7806,Vecyrillic:1042,Vewarmenian:1358,Vhook:434,Vmonospace:65334,Voarmenian:1352,Vsmall:63350,Vtilde:7804,W:87,Wacute:7810,Wcircle:9420,Wcircumflex:372,Wdieresis:7812,Wdotaccent:7814,Wdotbelow:7816,Wgrave:7808,Wmonospace:65335,Wsmall:63351,X:88,Xcircle:9421,Xdieresis:7820,Xdotaccent:7818,Xeharmenian:1341,Xi:926,Xmonospace:65336,Xsmall:63352,Y:89,Yacute:221,Yacutesmall:63485,Yatcyrillic:1122,Ycircle:9422,Ycircumflex:374,Ydieresis:376,Ydieresissmall:63487,Ydotaccent:7822,Ydotbelow:7924,Yericyrillic:1067,Yerudieresiscyrillic:1272,Ygrave:7922,Yhook:435,Yhookabove:7926,Yiarmenian:1349,Yicyrillic:1031,Yiwnarmenian:1362,Ymonospace:65337,Ysmall:63353,Ytilde:7928,Yusbigcyrillic:1130,Yusbigiotifiedcyrillic:1132,Yuslittlecyrillic:1126,Yuslittleiotifiedcyrillic:1128,Z:90,Zaarmenian:1334,Zacute:377,Zcaron:381,Zcaronsmall:63231,Zcircle:9423,Zcircumflex:7824,Zdot:379,Zdotaccent:379,Zdotbelow:7826,Zecyrillic:1047,Zedescendercyrillic:1176,Zedieresiscyrillic:1246,Zeta:918,Zhearmenian:1338,Zhebrevecyrillic:1217,Zhecyrillic:1046,Zhedescendercyrillic:1174,Zhedieresiscyrillic:1244,Zlinebelow:7828,Zmonospace:65338,Zsmall:63354,Zstroke:437,a:97,aabengali:2438,aacute:225,aadeva:2310,aagujarati:2694,aagurmukhi:2566,aamatragurmukhi:2622,aarusquare:13059,aavowelsignbengali:2494,aavowelsigndeva:2366,aavowelsigngujarati:2750,abbreviationmarkarmenian:1375,abbreviationsigndeva:2416,abengali:2437,abopomofo:12570,abreve:259,abreveacute:7855,abrevecyrillic:1233,abrevedotbelow:7863,abrevegrave:7857,abrevehookabove:7859,abrevetilde:7861,acaron:462,acircle:9424,acircumflex:226,acircumflexacute:7845,acircumflexdotbelow:7853,acircumflexgrave:7847,acircumflexhookabove:7849,acircumflextilde:7851,acute:180,acutebelowcmb:791,acutecmb:769,acutecomb:769,acutedeva:2388,acutelowmod:719,acutetonecmb:833,acyrillic:1072,adblgrave:513,addakgurmukhi:2673,adeva:2309,adieresis:228,adieresiscyrillic:1235,adieresismacron:479,adotbelow:7841,adotmacron:481,ae:230,aeacute:509,aekorean:12624,aemacron:483,afii00208:8213,afii08941:8356,afii10017:1040,afii10018:1041,afii10019:1042,afii10020:1043,afii10021:1044,afii10022:1045,afii10023:1025,afii10024:1046,afii10025:1047,afii10026:1048,afii10027:1049,afii10028:1050,afii10029:1051,afii10030:1052,afii10031:1053,afii10032:1054,afii10033:1055,afii10034:1056,afii10035:1057,afii10036:1058,afii10037:1059,afii10038:1060,afii10039:1061,afii10040:1062,afii10041:1063,afii10042:1064,afii10043:1065,afii10044:1066,afii10045:1067,afii10046:1068,afii10047:1069,afii10048:1070,afii10049:1071,afii10050:1168,afii10051:1026,afii10052:1027,afii10053:1028,afii10054:1029,afii10055:1030,afii10056:1031,afii10057:1032,afii10058:1033,afii10059:1034,afii10060:1035,afii10061:1036,afii10062:1038,afii10063:63172,afii10064:63173,afii10065:1072,afii10066:1073,afii10067:1074,afii10068:1075,afii10069:1076,afii10070:1077,afii10071:1105,afii10072:1078,afii10073:1079,afii10074:1080,afii10075:1081,afii10076:1082,afii10077:1083,afii10078:1084,afii10079:1085,afii10080:1086,afii10081:1087,afii10082:1088,afii10083:1089,afii10084:1090,afii10085:1091,afii10086:1092,afii10087:1093,afii10088:1094,afii10089:1095,afii10090:1096,afii10091:1097,afii10092:1098,afii10093:1099,afii10094:1100,afii10095:1101,afii10096:1102,afii10097:1103,afii10098:1169,afii10099:1106,afii10100:1107,afii10101:1108,afii10102:1109,afii10103:1110,afii10104:1111,afii10105:1112,afii10106:1113,afii10107:1114,afii10108:1115,afii10109:1116,afii10110:1118,afii10145:1039,afii10146:1122,afii10147:1138,afii10148:1140,afii10192:63174,afii10193:1119,afii10194:1123,afii10195:1139,afii10196:1141,afii10831:63175,afii10832:63176,afii10846:1241,afii299:8206,afii300:8207,afii301:8205,afii57381:1642,afii57388:1548,afii57392:1632,afii57393:1633,afii57394:1634,afii57395:1635,afii57396:1636,afii57397:1637,afii57398:1638,afii57399:1639,afii57400:1640,afii57401:1641,afii57403:1563,afii57407:1567,afii57409:1569,afii57410:1570,afii57411:1571,afii57412:1572,afii57413:1573,afii57414:1574,afii57415:1575,afii57416:1576,afii57417:1577,afii57418:1578,afii57419:1579,afii57420:1580,afii57421:1581,afii57422:1582,afii57423:1583,afii57424:1584,afii57425:1585,afii57426:1586,afii57427:1587,afii57428:1588,afii57429:1589,afii57430:1590,afii57431:1591,afii57432:1592,afii57433:1593,afii57434:1594,afii57440:1600,afii57441:1601,afii57442:1602,afii57443:1603,afii57444:1604,afii57445:1605,afii57446:1606,afii57448:1608,afii57449:1609,afii57450:1610,afii57451:1611,afii57452:1612,afii57453:1613,afii57454:1614,afii57455:1615,afii57456:1616,afii57457:1617,afii57458:1618,afii57470:1607,afii57505:1700,afii57506:1662,afii57507:1670,afii57508:1688,afii57509:1711,afii57511:1657,afii57512:1672,afii57513:1681,afii57514:1722,afii57519:1746,afii57534:1749,afii57636:8362,afii57645:1470,afii57658:1475,afii57664:1488,afii57665:1489,afii57666:1490,afii57667:1491,afii57668:1492,afii57669:1493,afii57670:1494,afii57671:1495,afii57672:1496,afii57673:1497,afii57674:1498,afii57675:1499,afii57676:1500,afii57677:1501,afii57678:1502,afii57679:1503,afii57680:1504,afii57681:1505,afii57682:1506,afii57683:1507,afii57684:1508,afii57685:1509,afii57686:1510,afii57687:1511,afii57688:1512,afii57689:1513,afii57690:1514,afii57694:64298,afii57695:64299,afii57700:64331,afii57705:64287,afii57716:1520,afii57717:1521,afii57718:1522,afii57723:64309,afii57793:1460,afii57794:1461,afii57795:1462,afii57796:1467,afii57797:1464,afii57798:1463,afii57799:1456,afii57800:1458,afii57801:1457,afii57802:1459,afii57803:1474,afii57804:1473,afii57806:1465,afii57807:1468,afii57839:1469,afii57841:1471,afii57842:1472,afii57929:700,afii61248:8453,afii61289:8467,afii61352:8470,afii61573:8236,afii61574:8237,afii61575:8238,afii61664:8204,afii63167:1645,afii64937:701,agrave:224,agujarati:2693,agurmukhi:2565,ahiragana:12354,ahookabove:7843,aibengali:2448,aibopomofo:12574,aideva:2320,aiecyrillic:1237,aigujarati:2704,aigurmukhi:2576,aimatragurmukhi:2632,ainarabic:1593,ainfinalarabic:65226,aininitialarabic:65227,ainmedialarabic:65228,ainvertedbreve:515,aivowelsignbengali:2504,aivowelsigndeva:2376,aivowelsigngujarati:2760,akatakana:12450,akatakanahalfwidth:65393,akorean:12623,alef:1488,alefarabic:1575,alefdageshhebrew:64304,aleffinalarabic:65166,alefhamzaabovearabic:1571,alefhamzaabovefinalarabic:65156,alefhamzabelowarabic:1573,alefhamzabelowfinalarabic:65160,alefhebrew:1488,aleflamedhebrew:64335,alefmaddaabovearabic:1570,alefmaddaabovefinalarabic:65154,alefmaksuraarabic:1609,alefmaksurafinalarabic:65264,alefmaksurainitialarabic:65267,alefmaksuramedialarabic:65268,alefpatahhebrew:64302,alefqamatshebrew:64303,aleph:8501,allequal:8780,alpha:945,alphatonos:940,amacron:257,amonospace:65345,ampersand:38,ampersandmonospace:65286,ampersandsmall:63270,amsquare:13250,anbopomofo:12578,angbopomofo:12580,angbracketleft:12296,angbracketright:12297,angkhankhuthai:3674,angle:8736,anglebracketleft:12296,anglebracketleftvertical:65087,anglebracketright:12297,anglebracketrightvertical:65088,angleleft:9001,angleright:9002,angstrom:8491,anoteleia:903,anudattadeva:2386,anusvarabengali:2434,anusvaradeva:2306,anusvaragujarati:2690,aogonek:261,apaatosquare:13056,aparen:9372,apostrophearmenian:1370,apostrophemod:700,apple:63743,approaches:8784,approxequal:8776,approxequalorimage:8786,approximatelyequal:8773,araeaekorean:12686,araeakorean:12685,arc:8978,arighthalfring:7834,aring:229,aringacute:507,aringbelow:7681,arrowboth:8596,arrowdashdown:8675,arrowdashleft:8672,arrowdashright:8674,arrowdashup:8673,arrowdblboth:8660,arrowdbldown:8659,arrowdblleft:8656,arrowdblright:8658,arrowdblup:8657,arrowdown:8595,arrowdownleft:8601,arrowdownright:8600,arrowdownwhite:8681,arrowheaddownmod:709,arrowheadleftmod:706,arrowheadrightmod:707,arrowheadupmod:708,arrowhorizex:63719,arrowleft:8592,arrowleftdbl:8656,arrowleftdblstroke:8653,arrowleftoverright:8646,arrowleftwhite:8678,arrowright:8594,arrowrightdblstroke:8655,arrowrightheavy:10142,arrowrightoverleft:8644,arrowrightwhite:8680,arrowtableft:8676,arrowtabright:8677,arrowup:8593,arrowupdn:8597,arrowupdnbse:8616,arrowupdownbase:8616,arrowupleft:8598,arrowupleftofdown:8645,arrowupright:8599,arrowupwhite:8679,arrowvertex:63718,asciicircum:94,asciicircummonospace:65342,asciitilde:126,asciitildemonospace:65374,ascript:593,ascriptturned:594,asmallhiragana:12353,asmallkatakana:12449,asmallkatakanahalfwidth:65383,asterisk:42,asteriskaltonearabic:1645,asteriskarabic:1645,asteriskmath:8727,asteriskmonospace:65290,asterisksmall:65121,asterism:8258,asuperior:63209,asymptoticallyequal:8771,at:64,atilde:227,atmonospace:65312,atsmall:65131,aturned:592,aubengali:2452,aubopomofo:12576,audeva:2324,augujarati:2708,augurmukhi:2580,aulengthmarkbengali:2519,aumatragurmukhi:2636,auvowelsignbengali:2508,auvowelsigndeva:2380,auvowelsigngujarati:2764,avagrahadeva:2365,aybarmenian:1377,ayin:1506,ayinaltonehebrew:64288,ayinhebrew:1506,b:98,babengali:2476,backslash:92,backslashmonospace:65340,badeva:2348,bagujarati:2732,bagurmukhi:2604,bahiragana:12400,bahtthai:3647,bakatakana:12496,bar:124,barmonospace:65372,bbopomofo:12549,bcircle:9425,bdotaccent:7683,bdotbelow:7685,beamedsixteenthnotes:9836,because:8757,becyrillic:1073,beharabic:1576,behfinalarabic:65168,behinitialarabic:65169,behiragana:12409,behmedialarabic:65170,behmeeminitialarabic:64671,behmeemisolatedarabic:64520,behnoonfinalarabic:64621,bekatakana:12505,benarmenian:1378,bet:1489,beta:946,betasymbolgreek:976,betdagesh:64305,betdageshhebrew:64305,bethebrew:1489,betrafehebrew:64332,bhabengali:2477,bhadeva:2349,bhagujarati:2733,bhagurmukhi:2605,bhook:595,bihiragana:12403,bikatakana:12499,bilabialclick:664,bindigurmukhi:2562,birusquare:13105,blackcircle:9679,blackdiamond:9670,blackdownpointingtriangle:9660,blackleftpointingpointer:9668,blackleftpointingtriangle:9664,blacklenticularbracketleft:12304,blacklenticularbracketleftvertical:65083,blacklenticularbracketright:12305,blacklenticularbracketrightvertical:65084,blacklowerlefttriangle:9699,blacklowerrighttriangle:9698,blackrectangle:9644,blackrightpointingpointer:9658,blackrightpointingtriangle:9654,blacksmallsquare:9642,blacksmilingface:9787,blacksquare:9632,blackstar:9733,blackupperlefttriangle:9700,blackupperrighttriangle:9701,blackuppointingsmalltriangle:9652,blackuppointingtriangle:9650,blank:9251,blinebelow:7687,block:9608,bmonospace:65346,bobaimaithai:3610,bohiragana:12412,bokatakana:12508,bparen:9373,bqsquare:13251,braceex:63732,braceleft:123,braceleftbt:63731,braceleftmid:63730,braceleftmonospace:65371,braceleftsmall:65115,bracelefttp:63729,braceleftvertical:65079,braceright:125,bracerightbt:63742,bracerightmid:63741,bracerightmonospace:65373,bracerightsmall:65116,bracerighttp:63740,bracerightvertical:65080,bracketleft:91,bracketleftbt:63728,bracketleftex:63727,bracketleftmonospace:65339,bracketlefttp:63726,bracketright:93,bracketrightbt:63739,bracketrightex:63738,bracketrightmonospace:65341,bracketrighttp:63737,breve:728,brevebelowcmb:814,brevecmb:774,breveinvertedbelowcmb:815,breveinvertedcmb:785,breveinverteddoublecmb:865,bridgebelowcmb:810,bridgeinvertedbelowcmb:826,brokenbar:166,bstroke:384,bsuperior:63210,btopbar:387,buhiragana:12406,bukatakana:12502,bullet:8226,bulletinverse:9688,bulletoperator:8729,bullseye:9678,c:99,caarmenian:1390,cabengali:2458,cacute:263,cadeva:2330,cagujarati:2714,cagurmukhi:2586,calsquare:13192,candrabindubengali:2433,candrabinducmb:784,candrabindudeva:2305,candrabindugujarati:2689,capslock:8682,careof:8453,caron:711,caronbelowcmb:812,caroncmb:780,carriagereturn:8629,cbopomofo:12568,ccaron:269,ccedilla:231,ccedillaacute:7689,ccircle:9426,ccircumflex:265,ccurl:597,cdot:267,cdotaccent:267,cdsquare:13253,cedilla:184,cedillacmb:807,cent:162,centigrade:8451,centinferior:63199,centmonospace:65504,centoldstyle:63394,centsuperior:63200,chaarmenian:1401,chabengali:2459,chadeva:2331,chagujarati:2715,chagurmukhi:2587,chbopomofo:12564,cheabkhasiancyrillic:1213,checkmark:10003,checyrillic:1095,chedescenderabkhasiancyrillic:1215,chedescendercyrillic:1207,chedieresiscyrillic:1269,cheharmenian:1395,chekhakassiancyrillic:1228,cheverticalstrokecyrillic:1209,chi:967,chieuchacirclekorean:12919,chieuchaparenkorean:12823,chieuchcirclekorean:12905,chieuchkorean:12618,chieuchparenkorean:12809,chochangthai:3594,chochanthai:3592,chochingthai:3593,chochoethai:3596,chook:392,cieucacirclekorean:12918,cieucaparenkorean:12822,cieuccirclekorean:12904,cieuckorean:12616,cieucparenkorean:12808,cieucuparenkorean:12828,circle:9675,circlecopyrt:169,circlemultiply:8855,circleot:8857,circleplus:8853,circlepostalmark:12342,circlewithlefthalfblack:9680,circlewithrighthalfblack:9681,circumflex:710,circumflexbelowcmb:813,circumflexcmb:770,clear:8999,clickalveolar:450,clickdental:448,clicklateral:449,clickretroflex:451,club:9827,clubsuitblack:9827,clubsuitwhite:9831,cmcubedsquare:13220,cmonospace:65347,cmsquaredsquare:13216,coarmenian:1409,colon:58,colonmonetary:8353,colonmonospace:65306,colonsign:8353,colonsmall:65109,colontriangularhalfmod:721,colontriangularmod:720,comma:44,commaabovecmb:787,commaaboverightcmb:789,commaaccent:63171,commaarabic:1548,commaarmenian:1373,commainferior:63201,commamonospace:65292,commareversedabovecmb:788,commareversedmod:701,commasmall:65104,commasuperior:63202,commaturnedabovecmb:786,commaturnedmod:699,compass:9788,congruent:8773,contourintegral:8750,control:8963,controlACK:6,controlBEL:7,controlBS:8,controlCAN:24,controlCR:13,controlDC1:17,controlDC2:18,controlDC3:19,controlDC4:20,controlDEL:127,controlDLE:16,controlEM:25,controlENQ:5,controlEOT:4,controlESC:27,controlETB:23,controlETX:3,controlFF:12,controlFS:28,controlGS:29,controlHT:9,controlLF:10,controlNAK:21,controlRS:30,controlSI:15,controlSO:14,controlSOT:2,controlSTX:1,controlSUB:26,controlSYN:22,controlUS:31,controlVT:11,copyright:169,copyrightsans:63721,copyrightserif:63193,cornerbracketleft:12300,cornerbracketlefthalfwidth:65378,cornerbracketleftvertical:65089,cornerbracketright:12301,cornerbracketrighthalfwidth:65379,cornerbracketrightvertical:65090,corporationsquare:13183,cosquare:13255,coverkgsquare:13254,cparen:9374,cruzeiro:8354,cstretched:663,curlyand:8911,curlyor:8910,currency:164,cyrBreve:63185,cyrFlex:63186,cyrbreve:63188,cyrflex:63189,d:100,daarmenian:1380,dabengali:2470,dadarabic:1590,dadeva:2342,dadfinalarabic:65214,dadinitialarabic:65215,dadmedialarabic:65216,dagesh:1468,dageshhebrew:1468,dagger:8224,daggerdbl:8225,dagujarati:2726,dagurmukhi:2598,dahiragana:12384,dakatakana:12480,dalarabic:1583,dalet:1491,daletdagesh:64307,daletdageshhebrew:64307,dalethebrew:1491,dalfinalarabic:65194,dammaarabic:1615,dammalowarabic:1615,dammatanaltonearabic:1612,dammatanarabic:1612,danda:2404,dargahebrew:1447,dargalefthebrew:1447,dasiapneumatacyrilliccmb:1157,dblGrave:63187,dblanglebracketleft:12298,dblanglebracketleftvertical:65085,dblanglebracketright:12299,dblanglebracketrightvertical:65086,dblarchinvertedbelowcmb:811,dblarrowleft:8660,dblarrowright:8658,dbldanda:2405,dblgrave:63190,dblgravecmb:783,dblintegral:8748,dbllowline:8215,dbllowlinecmb:819,dbloverlinecmb:831,dblprimemod:698,dblverticalbar:8214,dblverticallineabovecmb:782,dbopomofo:12553,dbsquare:13256,dcaron:271,dcedilla:7697,dcircle:9427,dcircumflexbelow:7699,dcroat:273,ddabengali:2465,ddadeva:2337,ddagujarati:2721,ddagurmukhi:2593,ddalarabic:1672,ddalfinalarabic:64393,dddhadeva:2396,ddhabengali:2466,ddhadeva:2338,ddhagujarati:2722,ddhagurmukhi:2594,ddotaccent:7691,ddotbelow:7693,decimalseparatorarabic:1643,decimalseparatorpersian:1643,decyrillic:1076,degree:176,dehihebrew:1453,dehiragana:12391,deicoptic:1007,dekatakana:12487,deleteleft:9003,deleteright:8998,delta:948,deltaturned:397,denominatorminusonenumeratorbengali:2552,dezh:676,dhabengali:2471,dhadeva:2343,dhagujarati:2727,dhagurmukhi:2599,dhook:599,dialytikatonos:901,dialytikatonoscmb:836,diamond:9830,diamondsuitwhite:9826,dieresis:168,dieresisacute:63191,dieresisbelowcmb:804,dieresiscmb:776,dieresisgrave:63192,dieresistonos:901,dihiragana:12386,dikatakana:12482,dittomark:12291,divide:247,divides:8739,divisionslash:8725,djecyrillic:1106,dkshade:9619,dlinebelow:7695,dlsquare:13207,dmacron:273,dmonospace:65348,dnblock:9604,dochadathai:3598,dodekthai:3604,dohiragana:12393,dokatakana:12489,dollar:36,dollarinferior:63203,dollarmonospace:65284,dollaroldstyle:63268,dollarsmall:65129,dollarsuperior:63204,dong:8363,dorusquare:13094,dotaccent:729,dotaccentcmb:775,dotbelowcmb:803,dotbelowcomb:803,dotkatakana:12539,dotlessi:305,dotlessj:63166,dotlessjstrokehook:644,dotmath:8901,dottedcircle:9676,doubleyodpatah:64287,doubleyodpatahhebrew:64287,downtackbelowcmb:798,downtackmod:725,dparen:9375,dsuperior:63211,dtail:598,dtopbar:396,duhiragana:12389,dukatakana:12485,dz:499,dzaltone:675,dzcaron:454,dzcurl:677,dzeabkhasiancyrillic:1249,dzecyrillic:1109,dzhecyrillic:1119,e:101,eacute:233,earth:9793,ebengali:2447,ebopomofo:12572,ebreve:277,ecandradeva:2317,ecandragujarati:2701,ecandravowelsigndeva:2373,ecandravowelsigngujarati:2757,ecaron:283,ecedillabreve:7709,echarmenian:1381,echyiwnarmenian:1415,ecircle:9428,ecircumflex:234,ecircumflexacute:7871,ecircumflexbelow:7705,ecircumflexdotbelow:7879,ecircumflexgrave:7873,ecircumflexhookabove:7875,ecircumflextilde:7877,ecyrillic:1108,edblgrave:517,edeva:2319,edieresis:235,edot:279,edotaccent:279,edotbelow:7865,eegurmukhi:2575,eematragurmukhi:2631,efcyrillic:1092,egrave:232,egujarati:2703,eharmenian:1383,ehbopomofo:12573,ehiragana:12360,ehookabove:7867,eibopomofo:12575,eight:56,eightarabic:1640,eightbengali:2542,eightcircle:9319,eightcircleinversesansserif:10129,eightdeva:2414,eighteencircle:9329,eighteenparen:9349,eighteenperiod:9369,eightgujarati:2798,eightgurmukhi:2670,eighthackarabic:1640,eighthangzhou:12328,eighthnotebeamed:9835,eightideographicparen:12839,eightinferior:8328,eightmonospace:65304,eightoldstyle:63288,eightparen:9339,eightperiod:9359,eightpersian:1784,eightroman:8567,eightsuperior:8312,eightthai:3672,einvertedbreve:519,eiotifiedcyrillic:1125,ekatakana:12456,ekatakanahalfwidth:65396,ekonkargurmukhi:2676,ekorean:12628,elcyrillic:1083,element:8712,elevencircle:9322,elevenparen:9342,elevenperiod:9362,elevenroman:8570,ellipsis:8230,ellipsisvertical:8942,emacron:275,emacronacute:7703,emacrongrave:7701,emcyrillic:1084,emdash:8212,emdashvertical:65073,emonospace:65349,emphasismarkarmenian:1371,emptyset:8709,enbopomofo:12579,encyrillic:1085,endash:8211,endashvertical:65074,endescendercyrillic:1187,eng:331,engbopomofo:12581,enghecyrillic:1189,enhookcyrillic:1224,enspace:8194,eogonek:281,eokorean:12627,eopen:603,eopenclosed:666,eopenreversed:604,eopenreversedclosed:606,eopenreversedhook:605,eparen:9376,epsilon:949,epsilontonos:941,equal:61,equalmonospace:65309,equalsmall:65126,equalsuperior:8316,equivalence:8801,erbopomofo:12582,ercyrillic:1088,ereversed:600,ereversedcyrillic:1101,escyrillic:1089,esdescendercyrillic:1195,esh:643,eshcurl:646,eshortdeva:2318,eshortvowelsigndeva:2374,eshreversedloop:426,eshsquatreversed:645,esmallhiragana:12359,esmallkatakana:12455,esmallkatakanahalfwidth:65386,estimated:8494,esuperior:63212,eta:951,etarmenian:1384,etatonos:942,eth:240,etilde:7869,etildebelow:7707,etnahtafoukhhebrew:1425,etnahtafoukhlefthebrew:1425,etnahtahebrew:1425,etnahtalefthebrew:1425,eturned:477,eukorean:12641,euro:8364,evowelsignbengali:2503,evowelsigndeva:2375,evowelsigngujarati:2759,exclam:33,exclamarmenian:1372,exclamdbl:8252,exclamdown:161,exclamdownsmall:63393,exclammonospace:65281,exclamsmall:63265,existential:8707,ezh:658,ezhcaron:495,ezhcurl:659,ezhreversed:441,ezhtail:442,f:102,fadeva:2398,fagurmukhi:2654,fahrenheit:8457,fathaarabic:1614,fathalowarabic:1614,fathatanarabic:1611,fbopomofo:12552,fcircle:9429,fdotaccent:7711,feharabic:1601,feharmenian:1414,fehfinalarabic:65234,fehinitialarabic:65235,fehmedialarabic:65236,feicoptic:997,female:9792,ff:64256,ffi:64259,ffl:64260,fi:64257,fifteencircle:9326,fifteenparen:9346,fifteenperiod:9366,figuredash:8210,filledbox:9632,filledrect:9644,finalkaf:1498,finalkafdagesh:64314,finalkafdageshhebrew:64314,finalkafhebrew:1498,finalmem:1501,finalmemhebrew:1501,finalnun:1503,finalnunhebrew:1503,finalpe:1507,finalpehebrew:1507,finaltsadi:1509,finaltsadihebrew:1509,firsttonechinese:713,fisheye:9673,fitacyrillic:1139,five:53,fivearabic:1637,fivebengali:2539,fivecircle:9316,fivecircleinversesansserif:10126,fivedeva:2411,fiveeighths:8541,fivegujarati:2795,fivegurmukhi:2667,fivehackarabic:1637,fivehangzhou:12325,fiveideographicparen:12836,fiveinferior:8325,fivemonospace:65301,fiveoldstyle:63285,fiveparen:9336,fiveperiod:9356,fivepersian:1781,fiveroman:8564,fivesuperior:8309,fivethai:3669,fl:64258,florin:402,fmonospace:65350,fmsquare:13209,fofanthai:3615,fofathai:3613,fongmanthai:3663,forall:8704,four:52,fourarabic:1636,fourbengali:2538,fourcircle:9315,fourcircleinversesansserif:10125,fourdeva:2410,fourgujarati:2794,fourgurmukhi:2666,fourhackarabic:1636,fourhangzhou:12324,fourideographicparen:12835,fourinferior:8324,fourmonospace:65300,fournumeratorbengali:2551,fouroldstyle:63284,fourparen:9335,fourperiod:9355,fourpersian:1780,fourroman:8563,foursuperior:8308,fourteencircle:9325,fourteenparen:9345,fourteenperiod:9365,fourthai:3668,fourthtonechinese:715,fparen:9377,fraction:8260,franc:8355,g:103,gabengali:2455,gacute:501,gadeva:2327,gafarabic:1711,gaffinalarabic:64403,gafinitialarabic:64404,gafmedialarabic:64405,gagujarati:2711,gagurmukhi:2583,gahiragana:12364,gakatakana:12460,gamma:947,gammalatinsmall:611,gammasuperior:736,gangiacoptic:1003,gbopomofo:12557,gbreve:287,gcaron:487,gcedilla:291,gcircle:9430,gcircumflex:285,gcommaaccent:291,gdot:289,gdotaccent:289,gecyrillic:1075,gehiragana:12370,gekatakana:12466,geometricallyequal:8785,gereshaccenthebrew:1436,gereshhebrew:1523,gereshmuqdamhebrew:1437,germandbls:223,gershayimaccenthebrew:1438,gershayimhebrew:1524,getamark:12307,ghabengali:2456,ghadarmenian:1394,ghadeva:2328,ghagujarati:2712,ghagurmukhi:2584,ghainarabic:1594,ghainfinalarabic:65230,ghaininitialarabic:65231,ghainmedialarabic:65232,ghemiddlehookcyrillic:1173,ghestrokecyrillic:1171,gheupturncyrillic:1169,ghhadeva:2394,ghhagurmukhi:2650,ghook:608,ghzsquare:13203,gihiragana:12366,gikatakana:12462,gimarmenian:1379,gimel:1490,gimeldagesh:64306,gimeldageshhebrew:64306,gimelhebrew:1490,gjecyrillic:1107,glottalinvertedstroke:446,glottalstop:660,glottalstopinverted:662,glottalstopmod:704,glottalstopreversed:661,glottalstopreversedmod:705,glottalstopreversedsuperior:740,glottalstopstroke:673,glottalstopstrokereversed:674,gmacron:7713,gmonospace:65351,gohiragana:12372,gokatakana:12468,gparen:9378,gpasquare:13228,gradient:8711,grave:96,gravebelowcmb:790,gravecmb:768,gravecomb:768,gravedeva:2387,gravelowmod:718,gravemonospace:65344,gravetonecmb:832,greater:62,greaterequal:8805,greaterequalorless:8923,greatermonospace:65310,greaterorequivalent:8819,greaterorless:8823,greateroverequal:8807,greatersmall:65125,gscript:609,gstroke:485,guhiragana:12368,guillemotleft:171,guillemotright:187,guilsinglleft:8249,guilsinglright:8250,gukatakana:12464,guramusquare:13080,gysquare:13257,h:104,haabkhasiancyrillic:1193,haaltonearabic:1729,habengali:2489,hadescendercyrillic:1203,hadeva:2361,hagujarati:2745,hagurmukhi:2617,haharabic:1581,hahfinalarabic:65186,hahinitialarabic:65187,hahiragana:12399,hahmedialarabic:65188,haitusquare:13098,hakatakana:12495,hakatakanahalfwidth:65418,halantgurmukhi:2637,hamzaarabic:1569,hamzalowarabic:1569,hangulfiller:12644,hardsigncyrillic:1098,harpoonleftbarbup:8636,harpoonrightbarbup:8640,hasquare:13258,hatafpatah:1458,hatafpatah16:1458,hatafpatah23:1458,hatafpatah2f:1458,hatafpatahhebrew:1458,hatafpatahnarrowhebrew:1458,hatafpatahquarterhebrew:1458,hatafpatahwidehebrew:1458,hatafqamats:1459,hatafqamats1b:1459,hatafqamats28:1459,hatafqamats34:1459,hatafqamatshebrew:1459,hatafqamatsnarrowhebrew:1459,hatafqamatsquarterhebrew:1459,hatafqamatswidehebrew:1459,hatafsegol:1457,hatafsegol17:1457,hatafsegol24:1457,hatafsegol30:1457,hatafsegolhebrew:1457,hatafsegolnarrowhebrew:1457,hatafsegolquarterhebrew:1457,hatafsegolwidehebrew:1457,hbar:295,hbopomofo:12559,hbrevebelow:7723,hcedilla:7721,hcircle:9431,hcircumflex:293,hdieresis:7719,hdotaccent:7715,hdotbelow:7717,he:1492,heart:9829,heartsuitblack:9829,heartsuitwhite:9825,hedagesh:64308,hedageshhebrew:64308,hehaltonearabic:1729,heharabic:1607,hehebrew:1492,hehfinalaltonearabic:64423,hehfinalalttwoarabic:65258,hehfinalarabic:65258,hehhamzaabovefinalarabic:64421,hehhamzaaboveisolatedarabic:64420,hehinitialaltonearabic:64424,hehinitialarabic:65259,hehiragana:12408,hehmedialaltonearabic:64425,hehmedialarabic:65260,heiseierasquare:13179,hekatakana:12504,hekatakanahalfwidth:65421,hekutaarusquare:13110,henghook:615,herutusquare:13113,het:1495,hethebrew:1495,hhook:614,hhooksuperior:689,hieuhacirclekorean:12923,hieuhaparenkorean:12827,hieuhcirclekorean:12909,hieuhkorean:12622,hieuhparenkorean:12813,hihiragana:12402,hikatakana:12498,hikatakanahalfwidth:65419,hiriq:1460,hiriq14:1460,hiriq21:1460,hiriq2d:1460,hiriqhebrew:1460,hiriqnarrowhebrew:1460,hiriqquarterhebrew:1460,hiriqwidehebrew:1460,hlinebelow:7830,hmonospace:65352,hoarmenian:1392,hohipthai:3627,hohiragana:12411,hokatakana:12507,hokatakanahalfwidth:65422,holam:1465,holam19:1465,holam26:1465,holam32:1465,holamhebrew:1465,holamnarrowhebrew:1465,holamquarterhebrew:1465,holamwidehebrew:1465,honokhukthai:3630,hookabovecomb:777,hookcmb:777,hookpalatalizedbelowcmb:801,hookretroflexbelowcmb:802,hoonsquare:13122,horicoptic:1001,horizontalbar:8213,horncmb:795,hotsprings:9832,house:8962,hparen:9379,hsuperior:688,hturned:613,huhiragana:12405,huiitosquare:13107,hukatakana:12501,hukatakanahalfwidth:65420,hungarumlaut:733,hungarumlautcmb:779,hv:405,hyphen:45,hypheninferior:63205,hyphenmonospace:65293,hyphensmall:65123,hyphensuperior:63206,hyphentwo:8208,i:105,iacute:237,iacyrillic:1103,ibengali:2439,ibopomofo:12583,ibreve:301,icaron:464,icircle:9432,icircumflex:238,icyrillic:1110,idblgrave:521,ideographearthcircle:12943,ideographfirecircle:12939,ideographicallianceparen:12863,ideographiccallparen:12858,ideographiccentrecircle:12965,ideographicclose:12294,ideographiccomma:12289,ideographiccommaleft:65380,ideographiccongratulationparen:12855,ideographiccorrectcircle:12963,ideographicearthparen:12847,ideographicenterpriseparen:12861,ideographicexcellentcircle:12957,ideographicfestivalparen:12864,ideographicfinancialcircle:12950,ideographicfinancialparen:12854,ideographicfireparen:12843,ideographichaveparen:12850,ideographichighcircle:12964,ideographiciterationmark:12293,ideographiclaborcircle:12952,ideographiclaborparen:12856,ideographicleftcircle:12967,ideographiclowcircle:12966,ideographicmedicinecircle:12969,ideographicmetalparen:12846,ideographicmoonparen:12842,ideographicnameparen:12852,ideographicperiod:12290,ideographicprintcircle:12958,ideographicreachparen:12867,ideographicrepresentparen:12857,ideographicresourceparen:12862,ideographicrightcircle:12968,ideographicsecretcircle:12953,ideographicselfparen:12866,ideographicsocietyparen:12851,ideographicspace:12288,ideographicspecialparen:12853,ideographicstockparen:12849,ideographicstudyparen:12859,ideographicsunparen:12848,ideographicsuperviseparen:12860,ideographicwaterparen:12844,ideographicwoodparen:12845,ideographiczero:12295,ideographmetalcircle:12942,ideographmooncircle:12938,ideographnamecircle:12948,ideographsuncircle:12944,ideographwatercircle:12940,ideographwoodcircle:12941,ideva:2311,idieresis:239,idieresisacute:7727,idieresiscyrillic:1253,idotbelow:7883,iebrevecyrillic:1239,iecyrillic:1077,ieungacirclekorean:12917,ieungaparenkorean:12821,ieungcirclekorean:12903,ieungkorean:12615,ieungparenkorean:12807,igrave:236,igujarati:2695,igurmukhi:2567,ihiragana:12356,ihookabove:7881,iibengali:2440,iicyrillic:1080,iideva:2312,iigujarati:2696,iigurmukhi:2568,iimatragurmukhi:2624,iinvertedbreve:523,iishortcyrillic:1081,iivowelsignbengali:2496,iivowelsigndeva:2368,iivowelsigngujarati:2752,ij:307,ikatakana:12452,ikatakanahalfwidth:65394,ikorean:12643,ilde:732,iluyhebrew:1452,imacron:299,imacroncyrillic:1251,imageorapproximatelyequal:8787,imatragurmukhi:2623,imonospace:65353,increment:8710,infinity:8734,iniarmenian:1387,integral:8747,integralbottom:8993,integralbt:8993,integralex:63733,integraltop:8992,integraltp:8992,intersection:8745,intisquare:13061,invbullet:9688,invcircle:9689,invsmileface:9787,iocyrillic:1105,iogonek:303,iota:953,iotadieresis:970,iotadieresistonos:912,iotalatin:617,iotatonos:943,iparen:9380,irigurmukhi:2674,ismallhiragana:12355,ismallkatakana:12451,ismallkatakanahalfwidth:65384,issharbengali:2554,istroke:616,isuperior:63213,iterationhiragana:12445,iterationkatakana:12541,itilde:297,itildebelow:7725,iubopomofo:12585,iucyrillic:1102,ivowelsignbengali:2495,ivowelsigndeva:2367,ivowelsigngujarati:2751,izhitsacyrillic:1141,izhitsadblgravecyrillic:1143,j:106,jaarmenian:1393,jabengali:2460,jadeva:2332,jagujarati:2716,jagurmukhi:2588,jbopomofo:12560,jcaron:496,jcircle:9433,jcircumflex:309,jcrossedtail:669,jdotlessstroke:607,jecyrillic:1112,jeemarabic:1580,jeemfinalarabic:65182,jeeminitialarabic:65183,jeemmedialarabic:65184,jeharabic:1688,jehfinalarabic:64395,jhabengali:2461,jhadeva:2333,jhagujarati:2717,jhagurmukhi:2589,jheharmenian:1403,jis:12292,jmonospace:65354,jparen:9381,jsuperior:690,k:107,kabashkircyrillic:1185,kabengali:2453,kacute:7729,kacyrillic:1082,kadescendercyrillic:1179,kadeva:2325,kaf:1499,kafarabic:1603,kafdagesh:64315,kafdageshhebrew:64315,kaffinalarabic:65242,kafhebrew:1499,kafinitialarabic:65243,kafmedialarabic:65244,kafrafehebrew:64333,kagujarati:2709,kagurmukhi:2581,kahiragana:12363,kahookcyrillic:1220,kakatakana:12459,kakatakanahalfwidth:65398,kappa:954,kappasymbolgreek:1008,kapyeounmieumkorean:12657,kapyeounphieuphkorean:12676,kapyeounpieupkorean:12664,kapyeounssangpieupkorean:12665,karoriisquare:13069,kashidaautoarabic:1600,kashidaautonosidebearingarabic:1600,kasmallkatakana:12533,kasquare:13188,kasraarabic:1616,kasratanarabic:1613,kastrokecyrillic:1183,katahiraprolongmarkhalfwidth:65392,kaverticalstrokecyrillic:1181,kbopomofo:12558,kcalsquare:13193,kcaron:489,kcedilla:311,kcircle:9434,kcommaaccent:311,kdotbelow:7731,keharmenian:1412,kehiragana:12369,kekatakana:12465,kekatakanahalfwidth:65401,kenarmenian:1391,kesmallkatakana:12534,kgreenlandic:312,khabengali:2454,khacyrillic:1093,khadeva:2326,khagujarati:2710,khagurmukhi:2582,khaharabic:1582,khahfinalarabic:65190,khahinitialarabic:65191,khahmedialarabic:65192,kheicoptic:999,khhadeva:2393,khhagurmukhi:2649,khieukhacirclekorean:12920,khieukhaparenkorean:12824,khieukhcirclekorean:12906,khieukhkorean:12619,khieukhparenkorean:12810,khokhaithai:3586,khokhonthai:3589,khokhuatthai:3587,khokhwaithai:3588,khomutthai:3675,khook:409,khorakhangthai:3590,khzsquare:13201,kihiragana:12365,kikatakana:12461,kikatakanahalfwidth:65399,kiroguramusquare:13077,kiromeetorusquare:13078,kirosquare:13076,kiyeokacirclekorean:12910,kiyeokaparenkorean:12814,kiyeokcirclekorean:12896,kiyeokkorean:12593,kiyeokparenkorean:12800,kiyeoksioskorean:12595,kjecyrillic:1116,klinebelow:7733,klsquare:13208,kmcubedsquare:13222,kmonospace:65355,kmsquaredsquare:13218,kohiragana:12371,kohmsquare:13248,kokaithai:3585,kokatakana:12467,kokatakanahalfwidth:65402,kooposquare:13086,koppacyrillic:1153,koreanstandardsymbol:12927,koroniscmb:835,kparen:9382,kpasquare:13226,ksicyrillic:1135,ktsquare:13263,kturned:670,kuhiragana:12367,kukatakana:12463,kukatakanahalfwidth:65400,kvsquare:13240,kwsquare:13246,l:108,labengali:2482,lacute:314,ladeva:2354,lagujarati:2738,lagurmukhi:2610,lakkhangyaothai:3653,lamaleffinalarabic:65276,lamalefhamzaabovefinalarabic:65272,lamalefhamzaaboveisolatedarabic:65271,lamalefhamzabelowfinalarabic:65274,lamalefhamzabelowisolatedarabic:65273,lamalefisolatedarabic:65275,lamalefmaddaabovefinalarabic:65270,lamalefmaddaaboveisolatedarabic:65269,lamarabic:1604,lambda:955,lambdastroke:411,lamed:1500,lameddagesh:64316,lameddageshhebrew:64316,
+lamedhebrew:1500,lamfinalarabic:65246,lamhahinitialarabic:64714,laminitialarabic:65247,lamjeeminitialarabic:64713,lamkhahinitialarabic:64715,lamlamhehisolatedarabic:65010,lammedialarabic:65248,lammeemhahinitialarabic:64904,lammeeminitialarabic:64716,largecircle:9711,lbar:410,lbelt:620,lbopomofo:12556,lcaron:318,lcedilla:316,lcircle:9435,lcircumflexbelow:7741,lcommaaccent:316,ldot:320,ldotaccent:320,ldotbelow:7735,ldotbelowmacron:7737,leftangleabovecmb:794,lefttackbelowcmb:792,less:60,lessequal:8804,lessequalorgreater:8922,lessmonospace:65308,lessorequivalent:8818,lessorgreater:8822,lessoverequal:8806,lesssmall:65124,lezh:622,lfblock:9612,lhookretroflex:621,lira:8356,liwnarmenian:1388,lj:457,ljecyrillic:1113,ll:63168,lladeva:2355,llagujarati:2739,llinebelow:7739,llladeva:2356,llvocalicbengali:2529,llvocalicdeva:2401,llvocalicvowelsignbengali:2531,llvocalicvowelsigndeva:2403,lmiddletilde:619,lmonospace:65356,lmsquare:13264,lochulathai:3628,logicaland:8743,logicalnot:172,logicalnotreversed:8976,logicalor:8744,lolingthai:3621,longs:383,lowlinecenterline:65102,lowlinecmb:818,lowlinedashed:65101,lozenge:9674,lparen:9383,lslash:322,lsquare:8467,lsuperior:63214,ltshade:9617,luthai:3622,lvocalicbengali:2444,lvocalicdeva:2316,lvocalicvowelsignbengali:2530,lvocalicvowelsigndeva:2402,lxsquare:13267,m:109,mabengali:2478,macron:175,macronbelowcmb:817,macroncmb:772,macronlowmod:717,macronmonospace:65507,macute:7743,madeva:2350,magujarati:2734,magurmukhi:2606,mahapakhhebrew:1444,mahapakhlefthebrew:1444,mahiragana:12414,maichattawalowleftthai:63637,maichattawalowrightthai:63636,maichattawathai:3659,maichattawaupperleftthai:63635,maieklowleftthai:63628,maieklowrightthai:63627,maiekthai:3656,maiekupperleftthai:63626,maihanakatleftthai:63620,maihanakatthai:3633,maitaikhuleftthai:63625,maitaikhuthai:3655,maitholowleftthai:63631,maitholowrightthai:63630,maithothai:3657,maithoupperleftthai:63629,maitrilowleftthai:63634,maitrilowrightthai:63633,maitrithai:3658,maitriupperleftthai:63632,maiyamokthai:3654,makatakana:12510,makatakanahalfwidth:65423,male:9794,mansyonsquare:13127,maqafhebrew:1470,mars:9794,masoracirclehebrew:1455,masquare:13187,mbopomofo:12551,mbsquare:13268,mcircle:9436,mcubedsquare:13221,mdotaccent:7745,mdotbelow:7747,meemarabic:1605,meemfinalarabic:65250,meeminitialarabic:65251,meemmedialarabic:65252,meemmeeminitialarabic:64721,meemmeemisolatedarabic:64584,meetorusquare:13133,mehiragana:12417,meizierasquare:13182,mekatakana:12513,mekatakanahalfwidth:65426,mem:1502,memdagesh:64318,memdageshhebrew:64318,memhebrew:1502,menarmenian:1396,merkhahebrew:1445,merkhakefulahebrew:1446,merkhakefulalefthebrew:1446,merkhalefthebrew:1445,mhook:625,mhzsquare:13202,middledotkatakanahalfwidth:65381,middot:183,mieumacirclekorean:12914,mieumaparenkorean:12818,mieumcirclekorean:12900,mieumkorean:12609,mieumpansioskorean:12656,mieumparenkorean:12804,mieumpieupkorean:12654,mieumsioskorean:12655,mihiragana:12415,mikatakana:12511,mikatakanahalfwidth:65424,minus:8722,minusbelowcmb:800,minuscircle:8854,minusmod:727,minusplus:8723,minute:8242,miribaarusquare:13130,mirisquare:13129,mlonglegturned:624,mlsquare:13206,mmcubedsquare:13219,mmonospace:65357,mmsquaredsquare:13215,mohiragana:12418,mohmsquare:13249,mokatakana:12514,mokatakanahalfwidth:65427,molsquare:13270,momathai:3617,moverssquare:13223,moverssquaredsquare:13224,mparen:9384,mpasquare:13227,mssquare:13235,msuperior:63215,mturned:623,mu:181,mu1:181,muasquare:13186,muchgreater:8811,muchless:8810,mufsquare:13196,mugreek:956,mugsquare:13197,muhiragana:12416,mukatakana:12512,mukatakanahalfwidth:65425,mulsquare:13205,multiply:215,mumsquare:13211,munahhebrew:1443,munahlefthebrew:1443,musicalnote:9834,musicalnotedbl:9835,musicflatsign:9837,musicsharpsign:9839,mussquare:13234,muvsquare:13238,muwsquare:13244,mvmegasquare:13241,mvsquare:13239,mwmegasquare:13247,mwsquare:13245,n:110,nabengali:2472,nabla:8711,nacute:324,nadeva:2344,nagujarati:2728,nagurmukhi:2600,nahiragana:12394,nakatakana:12490,nakatakanahalfwidth:65413,napostrophe:329,nasquare:13185,nbopomofo:12555,nbspace:160,ncaron:328,ncedilla:326,ncircle:9437,ncircumflexbelow:7755,ncommaaccent:326,ndotaccent:7749,ndotbelow:7751,nehiragana:12397,nekatakana:12493,nekatakanahalfwidth:65416,newsheqelsign:8362,nfsquare:13195,ngabengali:2457,ngadeva:2329,ngagujarati:2713,ngagurmukhi:2585,ngonguthai:3591,nhiragana:12435,nhookleft:626,nhookretroflex:627,nieunacirclekorean:12911,nieunaparenkorean:12815,nieuncieuckorean:12597,nieuncirclekorean:12897,nieunhieuhkorean:12598,nieunkorean:12596,nieunpansioskorean:12648,nieunparenkorean:12801,nieunsioskorean:12647,nieuntikeutkorean:12646,nihiragana:12395,nikatakana:12491,nikatakanahalfwidth:65414,nikhahitleftthai:63641,nikhahitthai:3661,nine:57,ninearabic:1641,ninebengali:2543,ninecircle:9320,ninecircleinversesansserif:10130,ninedeva:2415,ninegujarati:2799,ninegurmukhi:2671,ninehackarabic:1641,ninehangzhou:12329,nineideographicparen:12840,nineinferior:8329,ninemonospace:65305,nineoldstyle:63289,nineparen:9340,nineperiod:9360,ninepersian:1785,nineroman:8568,ninesuperior:8313,nineteencircle:9330,nineteenparen:9350,nineteenperiod:9370,ninethai:3673,nj:460,njecyrillic:1114,nkatakana:12531,nkatakanahalfwidth:65437,nlegrightlong:414,nlinebelow:7753,nmonospace:65358,nmsquare:13210,nnabengali:2467,nnadeva:2339,nnagujarati:2723,nnagurmukhi:2595,nnnadeva:2345,nohiragana:12398,nokatakana:12494,nokatakanahalfwidth:65417,nonbreakingspace:160,nonenthai:3603,nonuthai:3609,noonarabic:1606,noonfinalarabic:65254,noonghunnaarabic:1722,noonghunnafinalarabic:64415,nooninitialarabic:65255,noonjeeminitialarabic:64722,noonjeemisolatedarabic:64587,noonmedialarabic:65256,noonmeeminitialarabic:64725,noonmeemisolatedarabic:64590,noonnoonfinalarabic:64653,notcontains:8716,notelement:8713,notelementof:8713,notequal:8800,notgreater:8815,notgreaternorequal:8817,notgreaternorless:8825,notidentical:8802,notless:8814,notlessnorequal:8816,notparallel:8742,notprecedes:8832,notsubset:8836,notsucceeds:8833,notsuperset:8837,nowarmenian:1398,nparen:9385,nssquare:13233,nsuperior:8319,ntilde:241,nu:957,nuhiragana:12396,nukatakana:12492,nukatakanahalfwidth:65415,nuktabengali:2492,nuktadeva:2364,nuktagujarati:2748,nuktagurmukhi:2620,numbersign:35,numbersignmonospace:65283,numbersignsmall:65119,numeralsigngreek:884,numeralsignlowergreek:885,numero:8470,nun:1504,nundagesh:64320,nundageshhebrew:64320,nunhebrew:1504,nvsquare:13237,nwsquare:13243,nyabengali:2462,nyadeva:2334,nyagujarati:2718,nyagurmukhi:2590,o:111,oacute:243,oangthai:3629,obarred:629,obarredcyrillic:1257,obarreddieresiscyrillic:1259,obengali:2451,obopomofo:12571,obreve:335,ocandradeva:2321,ocandragujarati:2705,ocandravowelsigndeva:2377,ocandravowelsigngujarati:2761,ocaron:466,ocircle:9438,ocircumflex:244,ocircumflexacute:7889,ocircumflexdotbelow:7897,ocircumflexgrave:7891,ocircumflexhookabove:7893,ocircumflextilde:7895,ocyrillic:1086,odblacute:337,odblgrave:525,odeva:2323,odieresis:246,odieresiscyrillic:1255,odotbelow:7885,oe:339,oekorean:12634,ogonek:731,ogonekcmb:808,ograve:242,ogujarati:2707,oharmenian:1413,ohiragana:12362,ohookabove:7887,ohorn:417,ohornacute:7899,ohorndotbelow:7907,ohorngrave:7901,ohornhookabove:7903,ohorntilde:7905,ohungarumlaut:337,oi:419,oinvertedbreve:527,okatakana:12458,okatakanahalfwidth:65397,okorean:12631,olehebrew:1451,omacron:333,omacronacute:7763,omacrongrave:7761,omdeva:2384,omega:969,omega1:982,omegacyrillic:1121,omegalatinclosed:631,omegaroundcyrillic:1147,omegatitlocyrillic:1149,omegatonos:974,omgujarati:2768,omicron:959,omicrontonos:972,omonospace:65359,one:49,onearabic:1633,onebengali:2535,onecircle:9312,onecircleinversesansserif:10122,onedeva:2407,onedotenleader:8228,oneeighth:8539,onefitted:63196,onegujarati:2791,onegurmukhi:2663,onehackarabic:1633,onehalf:189,onehangzhou:12321,oneideographicparen:12832,oneinferior:8321,onemonospace:65297,onenumeratorbengali:2548,oneoldstyle:63281,oneparen:9332,oneperiod:9352,onepersian:1777,onequarter:188,oneroman:8560,onesuperior:185,onethai:3665,onethird:8531,oogonek:491,oogonekmacron:493,oogurmukhi:2579,oomatragurmukhi:2635,oopen:596,oparen:9386,openbullet:9702,option:8997,ordfeminine:170,ordmasculine:186,orthogonal:8735,oshortdeva:2322,oshortvowelsigndeva:2378,oslash:248,oslashacute:511,osmallhiragana:12361,osmallkatakana:12457,osmallkatakanahalfwidth:65387,ostrokeacute:511,osuperior:63216,otcyrillic:1151,otilde:245,otildeacute:7757,otildedieresis:7759,oubopomofo:12577,overline:8254,overlinecenterline:65098,overlinecmb:773,overlinedashed:65097,overlinedblwavy:65100,overlinewavy:65099,overscore:175,ovowelsignbengali:2507,ovowelsigndeva:2379,ovowelsigngujarati:2763,p:112,paampssquare:13184,paasentosquare:13099,pabengali:2474,pacute:7765,padeva:2346,pagedown:8671,pageup:8670,pagujarati:2730,pagurmukhi:2602,pahiragana:12401,paiyannoithai:3631,pakatakana:12497,palatalizationcyrilliccmb:1156,palochkacyrillic:1216,pansioskorean:12671,paragraph:182,parallel:8741,parenleft:40,parenleftaltonearabic:64830,parenleftbt:63725,parenleftex:63724,parenleftinferior:8333,parenleftmonospace:65288,parenleftsmall:65113,parenleftsuperior:8317,parenlefttp:63723,parenleftvertical:65077,parenright:41,parenrightaltonearabic:64831,parenrightbt:63736,parenrightex:63735,parenrightinferior:8334,parenrightmonospace:65289,parenrightsmall:65114,parenrightsuperior:8318,parenrighttp:63734,parenrightvertical:65078,partialdiff:8706,paseqhebrew:1472,pashtahebrew:1433,pasquare:13225,patah:1463,patah11:1463,patah1d:1463,patah2a:1463,patahhebrew:1463,patahnarrowhebrew:1463,patahquarterhebrew:1463,patahwidehebrew:1463,pazerhebrew:1441,pbopomofo:12550,pcircle:9439,pdotaccent:7767,pe:1508,pecyrillic:1087,pedagesh:64324,pedageshhebrew:64324,peezisquare:13115,pefinaldageshhebrew:64323,peharabic:1662,peharmenian:1402,pehebrew:1508,pehfinalarabic:64343,pehinitialarabic:64344,pehiragana:12410,pehmedialarabic:64345,pekatakana:12506,pemiddlehookcyrillic:1191,perafehebrew:64334,percent:37,percentarabic:1642,percentmonospace:65285,percentsmall:65130,period:46,periodarmenian:1417,periodcentered:183,periodhalfwidth:65377,periodinferior:63207,periodmonospace:65294,periodsmall:65106,periodsuperior:63208,perispomenigreekcmb:834,perpendicular:8869,perthousand:8240,peseta:8359,pfsquare:13194,phabengali:2475,phadeva:2347,phagujarati:2731,phagurmukhi:2603,phi:966,phi1:981,phieuphacirclekorean:12922,phieuphaparenkorean:12826,phieuphcirclekorean:12908,phieuphkorean:12621,phieuphparenkorean:12812,philatin:632,phinthuthai:3642,phisymbolgreek:981,phook:421,phophanthai:3614,phophungthai:3612,phosamphaothai:3616,pi:960,pieupacirclekorean:12915,pieupaparenkorean:12819,pieupcieuckorean:12662,pieupcirclekorean:12901,pieupkiyeokkorean:12658,pieupkorean:12610,pieupparenkorean:12805,pieupsioskiyeokkorean:12660,pieupsioskorean:12612,pieupsiostikeutkorean:12661,pieupthieuthkorean:12663,pieuptikeutkorean:12659,pihiragana:12404,pikatakana:12500,pisymbolgreek:982,piwrarmenian:1411,plus:43,plusbelowcmb:799,pluscircle:8853,plusminus:177,plusmod:726,plusmonospace:65291,plussmall:65122,plussuperior:8314,pmonospace:65360,pmsquare:13272,pohiragana:12413,pointingindexdownwhite:9759,pointingindexleftwhite:9756,pointingindexrightwhite:9758,pointingindexupwhite:9757,pokatakana:12509,poplathai:3611,postalmark:12306,postalmarkface:12320,pparen:9387,precedes:8826,prescription:8478,primemod:697,primereversed:8245,product:8719,projective:8965,prolongedkana:12540,propellor:8984,propersubset:8834,propersuperset:8835,proportion:8759,proportional:8733,psi:968,psicyrillic:1137,psilipneumatacyrilliccmb:1158,pssquare:13232,puhiragana:12407,pukatakana:12503,pvsquare:13236,pwsquare:13242,q:113,qadeva:2392,qadmahebrew:1448,qafarabic:1602,qaffinalarabic:65238,qafinitialarabic:65239,qafmedialarabic:65240,qamats:1464,qamats10:1464,qamats1a:1464,qamats1c:1464,qamats27:1464,qamats29:1464,qamats33:1464,qamatsde:1464,qamatshebrew:1464,qamatsnarrowhebrew:1464,qamatsqatanhebrew:1464,qamatsqatannarrowhebrew:1464,qamatsqatanquarterhebrew:1464,qamatsqatanwidehebrew:1464,qamatsquarterhebrew:1464,qamatswidehebrew:1464,qarneyparahebrew:1439,qbopomofo:12561,qcircle:9440,qhook:672,qmonospace:65361,qof:1511,qofdagesh:64327,qofdageshhebrew:64327,qofhebrew:1511,qparen:9388,quarternote:9833,qubuts:1467,qubuts18:1467,qubuts25:1467,qubuts31:1467,qubutshebrew:1467,qubutsnarrowhebrew:1467,qubutsquarterhebrew:1467,qubutswidehebrew:1467,question:63,questionarabic:1567,questionarmenian:1374,questiondown:191,questiondownsmall:63423,questiongreek:894,questionmonospace:65311,questionsmall:63295,quotedbl:34,quotedblbase:8222,quotedblleft:8220,quotedblmonospace:65282,quotedblprime:12318,quotedblprimereversed:12317,quotedblright:8221,quoteleft:8216,quoteleftreversed:8219,quotereversed:8219,quoteright:8217,quoterightn:329,quotesinglbase:8218,quotesingle:39,quotesinglemonospace:65287,r:114,raarmenian:1404,rabengali:2480,racute:341,radeva:2352,radical:8730,radicalex:63717,radoverssquare:13230,radoverssquaredsquare:13231,radsquare:13229,rafe:1471,rafehebrew:1471,ragujarati:2736,ragurmukhi:2608,rahiragana:12425,rakatakana:12521,rakatakanahalfwidth:65431,ralowerdiagonalbengali:2545,ramiddlediagonalbengali:2544,ramshorn:612,ratio:8758,rbopomofo:12566,rcaron:345,rcedilla:343,rcircle:9441,rcommaaccent:343,rdblgrave:529,rdotaccent:7769,rdotbelow:7771,rdotbelowmacron:7773,referencemark:8251,reflexsubset:8838,reflexsuperset:8839,registered:174,registersans:63720,registerserif:63194,reharabic:1585,reharmenian:1408,rehfinalarabic:65198,rehiragana:12428,rekatakana:12524,rekatakanahalfwidth:65434,resh:1512,reshdageshhebrew:64328,reshhebrew:1512,reversedtilde:8765,reviahebrew:1431,reviamugrashhebrew:1431,revlogicalnot:8976,rfishhook:638,rfishhookreversed:639,rhabengali:2525,rhadeva:2397,rho:961,rhook:637,rhookturned:635,rhookturnedsuperior:693,rhosymbolgreek:1009,rhotichookmod:734,rieulacirclekorean:12913,rieulaparenkorean:12817,rieulcirclekorean:12899,rieulhieuhkorean:12608,rieulkiyeokkorean:12602,rieulkiyeoksioskorean:12649,rieulkorean:12601,rieulmieumkorean:12603,rieulpansioskorean:12652,rieulparenkorean:12803,rieulphieuphkorean:12607,rieulpieupkorean:12604,rieulpieupsioskorean:12651,rieulsioskorean:12605,rieulthieuthkorean:12606,rieultikeutkorean:12650,rieulyeorinhieuhkorean:12653,rightangle:8735,righttackbelowcmb:793,righttriangle:8895,rihiragana:12426,rikatakana:12522,rikatakanahalfwidth:65432,ring:730,ringbelowcmb:805,ringcmb:778,ringhalfleft:703,ringhalfleftarmenian:1369,ringhalfleftbelowcmb:796,ringhalfleftcentered:723,ringhalfright:702,ringhalfrightbelowcmb:825,ringhalfrightcentered:722,rinvertedbreve:531,rittorusquare:13137,rlinebelow:7775,rlongleg:636,rlonglegturned:634,rmonospace:65362,rohiragana:12429,rokatakana:12525,rokatakanahalfwidth:65435,roruathai:3619,rparen:9389,rrabengali:2524,rradeva:2353,rragurmukhi:2652,rreharabic:1681,rrehfinalarabic:64397,rrvocalicbengali:2528,rrvocalicdeva:2400,rrvocalicgujarati:2784,rrvocalicvowelsignbengali:2500,rrvocalicvowelsigndeva:2372,rrvocalicvowelsigngujarati:2756,rsuperior:63217,rtblock:9616,rturned:633,rturnedsuperior:692,ruhiragana:12427,rukatakana:12523,rukatakanahalfwidth:65433,rupeemarkbengali:2546,rupeesignbengali:2547,rupiah:63197,ruthai:3620,rvocalicbengali:2443,rvocalicdeva:2315,rvocalicgujarati:2699,rvocalicvowelsignbengali:2499,rvocalicvowelsigndeva:2371,rvocalicvowelsigngujarati:2755,s:115,sabengali:2488,sacute:347,sacutedotaccent:7781,sadarabic:1589,sadeva:2360,sadfinalarabic:65210,sadinitialarabic:65211,sadmedialarabic:65212,sagujarati:2744,sagurmukhi:2616,sahiragana:12373,sakatakana:12469,sakatakanahalfwidth:65403,sallallahoualayhewasallamarabic:65018,samekh:1505,samekhdagesh:64321,samekhdageshhebrew:64321,samekhhebrew:1505,saraaathai:3634,saraaethai:3649,saraaimaimalaithai:3652,saraaimaimuanthai:3651,saraamthai:3635,saraathai:3632,saraethai:3648,saraiileftthai:63622,saraiithai:3637,saraileftthai:63621,saraithai:3636,saraothai:3650,saraueeleftthai:63624,saraueethai:3639,saraueleftthai:63623,sarauethai:3638,sarauthai:3640,sarauuthai:3641,sbopomofo:12569,scaron:353,scarondotaccent:7783,scedilla:351,schwa:601,schwacyrillic:1241,schwadieresiscyrillic:1243,schwahook:602,scircle:9442,scircumflex:349,scommaaccent:537,sdotaccent:7777,sdotbelow:7779,sdotbelowdotaccent:7785,seagullbelowcmb:828,second:8243,secondtonechinese:714,section:167,seenarabic:1587,seenfinalarabic:65202,seeninitialarabic:65203,seenmedialarabic:65204,segol:1462,segol13:1462,segol1f:1462,segol2c:1462,segolhebrew:1462,segolnarrowhebrew:1462,segolquarterhebrew:1462,segoltahebrew:1426,segolwidehebrew:1462,seharmenian:1405,sehiragana:12379,sekatakana:12475,sekatakanahalfwidth:65406,semicolon:59,semicolonarabic:1563,semicolonmonospace:65307,semicolonsmall:65108,semivoicedmarkkana:12444,semivoicedmarkkanahalfwidth:65439,sentisquare:13090,sentosquare:13091,seven:55,sevenarabic:1639,sevenbengali:2541,sevencircle:9318,sevencircleinversesansserif:10128,sevendeva:2413,seveneighths:8542,sevengujarati:2797,sevengurmukhi:2669,sevenhackarabic:1639,sevenhangzhou:12327,sevenideographicparen:12838,seveninferior:8327,sevenmonospace:65303,sevenoldstyle:63287,sevenparen:9338,sevenperiod:9358,sevenpersian:1783,sevenroman:8566,sevensuperior:8311,seventeencircle:9328,seventeenparen:9348,seventeenperiod:9368,seventhai:3671,sfthyphen:173,shaarmenian:1399,shabengali:2486,shacyrillic:1096,shaddaarabic:1617,shaddadammaarabic:64609,shaddadammatanarabic:64606,shaddafathaarabic:64608,shaddakasraarabic:64610,shaddakasratanarabic:64607,shade:9618,shadedark:9619,shadelight:9617,shademedium:9618,shadeva:2358,shagujarati:2742,shagurmukhi:2614,shalshelethebrew:1427,shbopomofo:12565,shchacyrillic:1097,sheenarabic:1588,sheenfinalarabic:65206,sheeninitialarabic:65207,sheenmedialarabic:65208,sheicoptic:995,sheqel:8362,sheqelhebrew:8362,sheva:1456,sheva115:1456,sheva15:1456,sheva22:1456,sheva2e:1456,shevahebrew:1456,shevanarrowhebrew:1456,shevaquarterhebrew:1456,shevawidehebrew:1456,shhacyrillic:1211,shimacoptic:1005,shin:1513,shindagesh:64329,shindageshhebrew:64329,shindageshshindot:64300,shindageshshindothebrew:64300,shindageshsindot:64301,shindageshsindothebrew:64301,shindothebrew:1473,shinhebrew:1513,shinshindot:64298,shinshindothebrew:64298,shinsindot:64299,shinsindothebrew:64299,shook:642,sigma:963,sigma1:962,sigmafinal:962,sigmalunatesymbolgreek:1010,sihiragana:12375,sikatakana:12471,sikatakanahalfwidth:65404,siluqhebrew:1469,siluqlefthebrew:1469,similar:8764,sindothebrew:1474,siosacirclekorean:12916,siosaparenkorean:12820,sioscieuckorean:12670,sioscirclekorean:12902,sioskiyeokkorean:12666,sioskorean:12613,siosnieunkorean:12667,siosparenkorean:12806,siospieupkorean:12669,siostikeutkorean:12668,six:54,sixarabic:1638,sixbengali:2540,sixcircle:9317,sixcircleinversesansserif:10127,sixdeva:2412,sixgujarati:2796,sixgurmukhi:2668,sixhackarabic:1638,sixhangzhou:12326,sixideographicparen:12837,sixinferior:8326,sixmonospace:65302,sixoldstyle:63286,sixparen:9337,sixperiod:9357,sixpersian:1782,sixroman:8565,sixsuperior:8310,sixteencircle:9327,sixteencurrencydenominatorbengali:2553,sixteenparen:9347,sixteenperiod:9367,sixthai:3670,slash:47,slashmonospace:65295,slong:383,slongdotaccent:7835,smileface:9786,smonospace:65363,sofpasuqhebrew:1475,softhyphen:173,softsigncyrillic:1100,sohiragana:12381,sokatakana:12477,sokatakanahalfwidth:65407,soliduslongoverlaycmb:824,solidusshortoverlaycmb:823,sorusithai:3625,sosalathai:3624,sosothai:3595,sosuathai:3626,space:32,spacehackarabic:32,spade:9824,spadesuitblack:9824,spadesuitwhite:9828,sparen:9390,squarebelowcmb:827,squarecc:13252,squarecm:13213,squarediagonalcrosshatchfill:9641,squarehorizontalfill:9636,squarekg:13199,squarekm:13214,squarekmcapital:13262,squareln:13265,squarelog:13266,squaremg:13198,squaremil:13269,squaremm:13212,squaremsquared:13217,squareorthogonalcrosshatchfill:9638,squareupperlefttolowerrightfill:9639,squareupperrighttolowerleftfill:9640,squareverticalfill:9637,squarewhitewithsmallblack:9635,srsquare:13275,ssabengali:2487,ssadeva:2359,ssagujarati:2743,ssangcieuckorean:12617,ssanghieuhkorean:12677,ssangieungkorean:12672,ssangkiyeokkorean:12594,ssangnieunkorean:12645,ssangpieupkorean:12611,ssangsioskorean:12614,ssangtikeutkorean:12600,ssuperior:63218,sterling:163,sterlingmonospace:65505,strokelongoverlaycmb:822,strokeshortoverlaycmb:821,subset:8834,subsetnotequal:8842,subsetorequal:8838,succeeds:8827,suchthat:8715,suhiragana:12377,sukatakana:12473,sukatakanahalfwidth:65405,sukunarabic:1618,summation:8721,sun:9788,superset:8835,supersetnotequal:8843,supersetorequal:8839,svsquare:13276,syouwaerasquare:13180,t:116,tabengali:2468,tackdown:8868,tackleft:8867,tadeva:2340,tagujarati:2724,tagurmukhi:2596,taharabic:1591,tahfinalarabic:65218,tahinitialarabic:65219,tahiragana:12383,tahmedialarabic:65220,taisyouerasquare:13181,takatakana:12479,takatakanahalfwidth:65408,tatweelarabic:1600,tau:964,tav:1514,tavdages:64330,tavdagesh:64330,tavdageshhebrew:64330,tavhebrew:1514,tbar:359,tbopomofo:12554,tcaron:357,tccurl:680,tcedilla:355,tcheharabic:1670,tchehfinalarabic:64379,tchehinitialarabic:64380,tchehmedialarabic:64381,tcircle:9443,tcircumflexbelow:7793,tcommaaccent:355,tdieresis:7831,tdotaccent:7787,tdotbelow:7789,tecyrillic:1090,tedescendercyrillic:1197,teharabic:1578,tehfinalarabic:65174,tehhahinitialarabic:64674,tehhahisolatedarabic:64524,tehinitialarabic:65175,tehiragana:12390,tehjeeminitialarabic:64673,tehjeemisolatedarabic:64523,tehmarbutaarabic:1577,tehmarbutafinalarabic:65172,tehmedialarabic:65176,tehmeeminitialarabic:64676,tehmeemisolatedarabic:64526,tehnoonfinalarabic:64627,tekatakana:12486,tekatakanahalfwidth:65411,telephone:8481,telephoneblack:9742,telishagedolahebrew:1440,telishaqetanahebrew:1449,tencircle:9321,tenideographicparen:12841,tenparen:9341,tenperiod:9361,tenroman:8569,tesh:679,tet:1496,tetdagesh:64312,tetdageshhebrew:64312,tethebrew:1496,tetsecyrillic:1205,tevirhebrew:1435,tevirlefthebrew:1435,thabengali:2469,thadeva:2341,thagujarati:2725,thagurmukhi:2597,thalarabic:1584,thalfinalarabic:65196,thanthakhatlowleftthai:63640,thanthakhatlowrightthai:63639,thanthakhatthai:3660,thanthakhatupperleftthai:63638,theharabic:1579,thehfinalarabic:65178,thehinitialarabic:65179,thehmedialarabic:65180,thereexists:8707,therefore:8756,theta:952,theta1:977,thetasymbolgreek:977,thieuthacirclekorean:12921,thieuthaparenkorean:12825,thieuthcirclekorean:12907,thieuthkorean:12620,thieuthparenkorean:12811,thirteencircle:9324,thirteenparen:9344,thirteenperiod:9364,thonangmonthothai:3601,thook:429,thophuthaothai:3602,thorn:254,thothahanthai:3607,thothanthai:3600,thothongthai:3608,thothungthai:3606,thousandcyrillic:1154,thousandsseparatorarabic:1644,thousandsseparatorpersian:1644,three:51,threearabic:1635,threebengali:2537,threecircle:9314,threecircleinversesansserif:10124,threedeva:2409,threeeighths:8540,threegujarati:2793,threegurmukhi:2665,threehackarabic:1635,threehangzhou:12323,threeideographicparen:12834,threeinferior:8323,threemonospace:65299,threenumeratorbengali:2550,threeoldstyle:63283,threeparen:9334,threeperiod:9354,threepersian:1779,threequarters:190,threequartersemdash:63198,threeroman:8562,threesuperior:179,threethai:3667,thzsquare:13204,tihiragana:12385,tikatakana:12481,tikatakanahalfwidth:65409,tikeutacirclekorean:12912,tikeutaparenkorean:12816,tikeutcirclekorean:12898,tikeutkorean:12599,tikeutparenkorean:12802,tilde:732,tildebelowcmb:816,tildecmb:771,tildecomb:771,tildedoublecmb:864,tildeoperator:8764,tildeoverlaycmb:820,tildeverticalcmb:830,timescircle:8855,tipehahebrew:1430,tipehalefthebrew:1430,tippigurmukhi:2672,titlocyrilliccmb:1155,tiwnarmenian:1407,tlinebelow:7791,tmonospace:65364,toarmenian:1385,tohiragana:12392,tokatakana:12488,tokatakanahalfwidth:65412,tonebarextrahighmod:741,tonebarextralowmod:745,tonebarhighmod:742,tonebarlowmod:744,tonebarmidmod:743,tonefive:445,tonesix:389,tonetwo:424,tonos:900,tonsquare:13095,topatakthai:3599,tortoiseshellbracketleft:12308,tortoiseshellbracketleftsmall:65117,tortoiseshellbracketleftvertical:65081,tortoiseshellbracketright:12309,tortoiseshellbracketrightsmall:65118,tortoiseshellbracketrightvertical:65082,totaothai:3605,tpalatalhook:427,tparen:9391,trademark:8482,trademarksans:63722,trademarkserif:63195,tretroflexhook:648,triagdn:9660,triaglf:9668,triagrt:9658,triagup:9650,ts:678,tsadi:1510,tsadidagesh:64326,tsadidageshhebrew:64326,tsadihebrew:1510,tsecyrillic:1094,tsere:1461,tsere12:1461,tsere1e:1461,tsere2b:1461,tserehebrew:1461,tserenarrowhebrew:1461,tserequarterhebrew:1461,tserewidehebrew:1461,tshecyrillic:1115,tsuperior:63219,ttabengali:2463,ttadeva:2335,ttagujarati:2719,ttagurmukhi:2591,tteharabic:1657,ttehfinalarabic:64359,ttehinitialarabic:64360,ttehmedialarabic:64361,tthabengali:2464,tthadeva:2336,tthagujarati:2720,tthagurmukhi:2592,tturned:647,tuhiragana:12388,tukatakana:12484,tukatakanahalfwidth:65410,tusmallhiragana:12387,tusmallkatakana:12483,tusmallkatakanahalfwidth:65391,twelvecircle:9323,twelveparen:9343,twelveperiod:9363,twelveroman:8571,twentycircle:9331,twentyhangzhou:21316,twentyparen:9351,twentyperiod:9371,two:50,twoarabic:1634,twobengali:2536,twocircle:9313,twocircleinversesansserif:10123,twodeva:2408,twodotenleader:8229,twodotleader:8229,twodotleadervertical:65072,twogujarati:2792,twogurmukhi:2664,twohackarabic:1634,twohangzhou:12322,twoideographicparen:12833,twoinferior:8322,twomonospace:65298,twonumeratorbengali:2549,twooldstyle:63282,twoparen:9333,twoperiod:9353,twopersian:1778,tworoman:8561,twostroke:443,twosuperior:178,twothai:3666,twothirds:8532,u:117,uacute:250,ubar:649,ubengali:2441,ubopomofo:12584,ubreve:365,ucaron:468,ucircle:9444,ucircumflex:251,ucircumflexbelow:7799,ucyrillic:1091,udattadeva:2385,udblacute:369,udblgrave:533,udeva:2313,udieresis:252,udieresisacute:472,udieresisbelow:7795,udieresiscaron:474,udieresiscyrillic:1265,udieresisgrave:476,udieresismacron:470,udotbelow:7909,ugrave:249,ugujarati:2697,ugurmukhi:2569,uhiragana:12358,uhookabove:7911,uhorn:432,uhornacute:7913,uhorndotbelow:7921,uhorngrave:7915,uhornhookabove:7917,uhorntilde:7919,uhungarumlaut:369,uhungarumlautcyrillic:1267,uinvertedbreve:535,ukatakana:12454,ukatakanahalfwidth:65395,ukcyrillic:1145,ukorean:12636,umacron:363,umacroncyrillic:1263,umacrondieresis:7803,umatragurmukhi:2625,umonospace:65365,underscore:95,underscoredbl:8215,underscoremonospace:65343,underscorevertical:65075,underscorewavy:65103,union:8746,universal:8704,uogonek:371,uparen:9392,upblock:9600,upperdothebrew:1476,upsilon:965,upsilondieresis:971,upsilondieresistonos:944,upsilonlatin:650,upsilontonos:973,uptackbelowcmb:797,uptackmod:724,uragurmukhi:2675,uring:367,ushortcyrillic:1118,usmallhiragana:12357,usmallkatakana:12453,usmallkatakanahalfwidth:65385,ustraightcyrillic:1199,ustraightstrokecyrillic:1201,utilde:361,utildeacute:7801,utildebelow:7797,uubengali:2442,uudeva:2314,uugujarati:2698,uugurmukhi:2570,uumatragurmukhi:2626,uuvowelsignbengali:2498,uuvowelsigndeva:2370,uuvowelsigngujarati:2754,uvowelsignbengali:2497,uvowelsigndeva:2369,uvowelsigngujarati:2753,v:118,vadeva:2357,vagujarati:2741,vagurmukhi:2613,vakatakana:12535,vav:1493,vavdagesh:64309,vavdagesh65:64309,vavdageshhebrew:64309,vavhebrew:1493,vavholam:64331,vavholamhebrew:64331,vavvavhebrew:1520,vavyodhebrew:1521,vcircle:9445,vdotbelow:7807,vecyrillic:1074,veharabic:1700,vehfinalarabic:64363,vehinitialarabic:64364,vehmedialarabic:64365,vekatakana:12537,venus:9792,verticalbar:124,verticallineabovecmb:781,verticallinebelowcmb:809,verticallinelowmod:716,verticallinemod:712,vewarmenian:1406,vhook:651,vikatakana:12536,viramabengali:2509,viramadeva:2381,viramagujarati:2765,visargabengali:2435,visargadeva:2307,visargagujarati:2691,vmonospace:65366,voarmenian:1400,voicediterationhiragana:12446,voicediterationkatakana:12542,voicedmarkkana:12443,voicedmarkkanahalfwidth:65438,vokatakana:12538,vparen:9393,vtilde:7805,vturned:652,vuhiragana:12436,vukatakana:12532,w:119,wacute:7811,waekorean:12633,wahiragana:12431,wakatakana:12527,wakatakanahalfwidth:65436,wakorean:12632,wasmallhiragana:12430,wasmallkatakana:12526,wattosquare:13143,wavedash:12316,wavyunderscorevertical:65076,wawarabic:1608,wawfinalarabic:65262,wawhamzaabovearabic:1572,wawhamzaabovefinalarabic:65158,wbsquare:13277,wcircle:9446,wcircumflex:373,wdieresis:7813,wdotaccent:7815,wdotbelow:7817,wehiragana:12433,weierstrass:8472,wekatakana:12529,wekorean:12638,weokorean:12637,wgrave:7809,whitebullet:9702,whitecircle:9675,whitecircleinverse:9689,whitecornerbracketleft:12302,whitecornerbracketleftvertical:65091,whitecornerbracketright:12303,whitecornerbracketrightvertical:65092,whitediamond:9671,whitediamondcontainingblacksmalldiamond:9672,whitedownpointingsmalltriangle:9663,whitedownpointingtriangle:9661,whiteleftpointingsmalltriangle:9667,whiteleftpointingtriangle:9665,whitelenticularbracketleft:12310,whitelenticularbracketright:12311,whiterightpointingsmalltriangle:9657,whiterightpointingtriangle:9655,whitesmallsquare:9643,whitesmilingface:9786,whitesquare:9633,whitestar:9734,whitetelephone:9743,whitetortoiseshellbracketleft:12312,whitetortoiseshellbracketright:12313,whiteuppointingsmalltriangle:9653,whiteuppointingtriangle:9651,wihiragana:12432,wikatakana:12528,wikorean:12639,wmonospace:65367,wohiragana:12434,wokatakana:12530,wokatakanahalfwidth:65382,won:8361,wonmonospace:65510,wowaenthai:3623,wparen:9394,wring:7832,wsuperior:695,wturned:653,wynn:447,x:120,xabovecmb:829,xbopomofo:12562,xcircle:9447,xdieresis:7821,xdotaccent:7819,xeharmenian:1389,xi:958,xmonospace:65368,xparen:9395,xsuperior:739,y:121,yaadosquare:13134,yabengali:2479,yacute:253,yadeva:2351,yaekorean:12626,yagujarati:2735,yagurmukhi:2607,yahiragana:12420,yakatakana:12516,yakatakanahalfwidth:65428,yakorean:12625,yamakkanthai:3662,yasmallhiragana:12419,yasmallkatakana:12515,yasmallkatakanahalfwidth:65388,yatcyrillic:1123,ycircle:9448,ycircumflex:375,ydieresis:255,ydotaccent:7823,ydotbelow:7925,yeharabic:1610,yehbarreearabic:1746,yehbarreefinalarabic:64431,yehfinalarabic:65266,yehhamzaabovearabic:1574,yehhamzaabovefinalarabic:65162,yehhamzaaboveinitialarabic:65163,yehhamzaabovemedialarabic:65164,yehinitialarabic:65267,yehmedialarabic:65268,yehmeeminitialarabic:64733,yehmeemisolatedarabic:64600,yehnoonfinalarabic:64660,yehthreedotsbelowarabic:1745,yekorean:12630,yen:165,yenmonospace:65509,yeokorean:12629,yeorinhieuhkorean:12678,yerahbenyomohebrew:1450,yerahbenyomolefthebrew:1450,yericyrillic:1099,yerudieresiscyrillic:1273,yesieungkorean:12673,yesieungpansioskorean:12675,yesieungsioskorean:12674,yetivhebrew:1434,ygrave:7923,yhook:436,yhookabove:7927,yiarmenian:1397,yicyrillic:1111,yikorean:12642,yinyang:9775,yiwnarmenian:1410,ymonospace:65369,yod:1497,yoddagesh:64313,yoddageshhebrew:64313,yodhebrew:1497,yodyodhebrew:1522,yodyodpatahhebrew:64287,yohiragana:12424,yoikorean:12681,yokatakana:12520,yokatakanahalfwidth:65430,yokorean:12635,yosmallhiragana:12423,yosmallkatakana:12519,yosmallkatakanahalfwidth:65390,yotgreek:1011,yoyaekorean:12680,yoyakorean:12679,yoyakthai:3618,yoyingthai:3597,yparen:9396,ypogegrammeni:890,ypogegrammenigreekcmb:837,yr:422,yring:7833,ysuperior:696,ytilde:7929,yturned:654,yuhiragana:12422,yuikorean:12684,yukatakana:12518,yukatakanahalfwidth:65429,yukorean:12640,yusbigcyrillic:1131,yusbigiotifiedcyrillic:1133,yuslittlecyrillic:1127,yuslittleiotifiedcyrillic:1129,yusmallhiragana:12421,yusmallkatakana:12517,yusmallkatakanahalfwidth:65389,yuyekorean:12683,yuyeokorean:12682,yyabengali:2527,yyadeva:2399,z:122,zaarmenian:1382,zacute:378,zadeva:2395,zagurmukhi:2651,zaharabic:1592,zahfinalarabic:65222,zahinitialarabic:65223,zahiragana:12374,zahmedialarabic:65224,zainarabic:1586,zainfinalarabic:65200,zakatakana:12470,zaqefgadolhebrew:1429,zaqefqatanhebrew:1428,zarqahebrew:1432,zayin:1494,zayindagesh:64310,zayindageshhebrew:64310,zayinhebrew:1494,zbopomofo:12567,zcaron:382,zcircle:9449,zcircumflex:7825,zcurl:657,zdot:380,zdotaccent:380,zdotbelow:7827,zecyrillic:1079,zedescendercyrillic:1177,zedieresiscyrillic:1247,zehiragana:12380,zekatakana:12476,zero:48,zeroarabic:1632,zerobengali:2534,zerodeva:2406,zerogujarati:2790,zerogurmukhi:2662,zerohackarabic:1632,zeroinferior:8320,zeromonospace:65296,zerooldstyle:63280,
+zeropersian:1776,zerosuperior:8304,zerothai:3664,zerowidthjoiner:65279,zerowidthnonjoiner:8204,zerowidthspace:8203,zeta:950,zhbopomofo:12563,zhearmenian:1386,zhebrevecyrillic:1218,zhecyrillic:1078,zhedescendercyrillic:1175,zhedieresiscyrillic:1245,zihiragana:12376,zikatakana:12472,zinorhebrew:1454,zlinebelow:7829,zmonospace:65370,zohiragana:12382,zokatakana:12478,zparen:9397,zretroflexhook:656,zstroke:438,zuhiragana:12378,zukatakana:12474,".notdef":0},Ac={space:32,a1:9985,a2:9986,a202:9987,a3:9988,a4:9742,a5:9990,a119:9991,a118:9992,a117:9993,a11:9755,a12:9758,a13:9996,a14:9997,a15:9998,a16:9999,a105:1e4,a17:10001,a18:10002,a19:10003,a20:10004,a21:10005,a22:10006,a23:10007,a24:10008,a25:10009,a26:10010,a27:10011,a28:10012,a6:10013,a7:10014,a8:10015,a9:10016,a10:10017,a29:10018,a30:10019,a31:10020,a32:10021,a33:10022,a34:10023,a35:9733,a36:10025,a37:10026,a38:10027,a39:10028,a40:10029,a41:10030,a42:10031,a43:10032,a44:10033,a45:10034,a46:10035,a47:10036,a48:10037,a49:10038,a50:10039,a51:10040,a52:10041,a53:10042,a54:10043,a55:10044,a56:10045,a57:10046,a58:10047,a59:10048,a60:10049,a61:10050,a62:10051,a63:10052,a64:10053,a65:10054,a66:10055,a67:10056,a68:10057,a69:10058,a70:10059,a71:9679,a72:10061,a73:9632,a74:10063,a203:10064,a75:10065,a204:10066,a76:9650,a77:9660,a78:9670,a79:10070,a81:9687,a82:10072,a83:10073,a84:10074,a97:10075,a98:10076,a99:10077,a100:10078,a101:10081,a102:10082,a103:10083,a104:10084,a106:10085,a107:10086,a108:10087,a112:9827,a111:9830,a110:9829,a109:9824,a120:9312,a121:9313,a122:9314,a123:9315,a124:9316,a125:9317,a126:9318,a127:9319,a128:9320,a129:9321,a130:10102,a131:10103,a132:10104,a133:10105,a134:10106,a135:10107,a136:10108,a137:10109,a138:10110,a139:10111,a140:10112,a141:10113,a142:10114,a143:10115,a144:10116,a145:10117,a146:10118,a147:10119,a148:10120,a149:10121,a150:10122,a151:10123,a152:10124,a153:10125,a154:10126,a155:10127,a156:10128,a157:10129,a158:10130,a159:10131,a160:10132,a161:8594,a163:8596,a164:8597,a196:10136,a165:10137,a192:10138,a166:10139,a167:10140,a168:10141,a169:10142,a170:10143,a171:10144,a172:10145,a173:10146,a162:10147,a174:10148,a175:10149,a176:10150,a177:10151,a178:10152,a179:10153,a193:10154,a180:10155,a199:10156,a181:10157,a200:10158,a182:10159,a201:10161,a183:10162,a184:10163,a197:10164,a185:10165,a194:10166,a198:10167,a186:10168,a195:10169,a187:10170,a188:10171,a189:10172,a190:10173,a191:10174,a89:10088,a90:10089,a93:10090,a94:10091,a91:10092,a92:10093,a205:10094,a85:10095,a206:10096,a86:10097,a87:10098,a88:10099,a95:10100,a96:10101,".notdef":0},Bc=function(){function d(a,b,c,d){if(d instanceof Sc&&d.isNativelyDecodable(b,c)){var e=d.dict,f=e.get("ColorSpace","CS");f=Xa.parse(f,b,c);var g=f.numComps,h=a.sendWithPromise("JpegDecode",[d.getIR(),g]);return h.then(function(a){var b=a.data;return new Mc(b,0,b.length,d.dict)})}return Promise.resolve(d)}function f(a,b,c,d){return a=b+a*c,0>a?0:a>d?d:a}function g(b,d,e,f,h,i,j){this.image=e;var k=e.dict;if(k.has("Filter")){var l=k.get("Filter").name;if("JPXDecode"===l){var m=new hd;m.parseImageProperties(e.stream),e.stream.reset(),e.bitsPerComponent=m.bitsPerComponent,e.numComps=m.componentsCount}else"JBIG2Decode"===l&&(e.bitsPerComponent=1,e.numComps=1)}this.width=k.get("Width","W"),this.height=k.get("Height","H"),(this.width<1||this.height<1)&&c("Invalid image width: "+this.width+" or height: "+this.height),this.interpolate=k.get("Interpolate","I")||!1,this.imageMask=k.get("ImageMask","IM")||!1,this.matte=k.get("Matte")||!1;var n=e.bitsPerComponent;if(n||(n=k.get("BitsPerComponent","BPC"),n||(this.imageMask?n=1:c("Bits per component missing in image: "+this.imageMask))),this.bpc=n,!this.imageMask){var o=k.get("ColorSpace","CS");if(!o)switch(a("JPX images (which do not require color spaces)"),e.numComps){case 1:o=ya.get("DeviceGray");break;case 3:o=ya.get("DeviceRGB");break;case 4:o=ya.get("DeviceCMYK");break;default:c("JPX images with "+this.numComps+" color components not supported.")}this.colorSpace=Xa.parse(o,b,d),this.numComps=this.colorSpace.numComps}if(this.decode=k.get("Decode","D"),this.needsDecode=!1,this.decode&&(this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode)||j&&!Xa.isDefaultDecode(this.decode,1))){this.needsDecode=!0;var p=(1<<n)-1;this.decodeCoefficients=[],this.decodeAddends=[];for(var q=0,r=0;q<this.decode.length;q+=2,++r){var s=this.decode[q],t=this.decode[q+1];this.decodeCoefficients[r]=t-s,this.decodeAddends[r]=p*s}}h?this.smask=new g(b,d,h,!1):i&&(D(i)?this.mask=new g(b,d,i,!1,null,null,!0):this.mask=i)}return g.buildImage=function(a,c,e,f,h){var i,j,k=d(a,c,e,f),l=f.dict.get("SMask"),m=f.dict.get("Mask");return l?(i=d(a,c,e,l),j=Promise.resolve(null)):(i=Promise.resolve(null),m?D(m)?j=d(a,c,e,m):C(m)?j=Promise.resolve(m):(b("Unsupported mask format."),j=Promise.resolve(null)):j=Promise.resolve(null)),Promise.all([k,i,j]).then(function(a){var b=a[0],d=a[1],f=a[2];return new g(c,e,b,h,d,f)})},g.resize=function(a,b,d,e,f,g,h,i,j){1!==d&&3!==d&&c("Unsupported component count for resizing.");var k,l,m,n,o=g*h*d,p=i?i:8>=b?new Uint8Array(o):16>=b?new Uint16Array(o):new Uint32Array(o),q=e/g,r=f/h,s=0,t=new Uint16Array(g),u=e*d;for(1!==j&&(j=0),l=0;g>l;l++)t[l]=Math.floor(l*q)*d;if(1===d)for(k=0;h>k;k++)for(m=Math.floor(k*r)*u,l=0;g>l;l++)n=m+t[l],p[s++]=a[n];else if(3===d)for(k=0;h>k;k++)for(m=Math.floor(k*r)*u,l=0;g>l;l++)n=m+t[l],p[s++]=a[n++],p[s++]=a[n++],p[s++]=a[n++],s+=j;return p},g.createMask=function(a,b,c,d,e){var f,g,h=(b+7>>3)*c,i=a.byteLength,j=h===i;if(!d||e&&!j)if(e)for(f=new Uint8Array(h),f.set(a),g=i;h>g;g++)f[g]=255;else f=new Uint8Array(i),f.set(a);else f=a;if(e)for(g=0;i>g;g++)f[g]=~f[g];return{data:f,width:b,height:c}},g.prototype={get drawWidth(){return Math.max(this.width,this.smask&&this.smask.width||0,this.mask&&this.mask.width||0)},get drawHeight(){return Math.max(this.height,this.smask&&this.smask.height||0,this.mask&&this.mask.height||0)},decodeBuffer:function(a){var b,c,d=this.bpc,e=this.numComps,g=this.decodeAddends,h=this.decodeCoefficients,i=(1<<d)-1;if(1!==d){var j=0;for(b=0,c=this.width*this.height;c>b;b++)for(var k=0;e>k;k++)a[j]=f(a[j],g[k],h[k],i),j++}else for(b=0,c=a.length;c>b;b++)a[b]=+!a[b]},getComponents:function(a){var b=this.bpc;if(8===b)return a;var c,d,e=this.width,f=this.height,g=this.numComps,h=e*f*g,i=0,j=8>=b?new Uint8Array(h):16>=b?new Uint16Array(h):new Uint32Array(h),k=e*g,l=(1<<b)-1,m=0;if(1===b)for(var n,o,p,q=0;f>q;q++){for(o=m+(-8&k),p=m+k;o>m;)d=a[i++],j[m]=d>>7&1,j[m+1]=d>>6&1,j[m+2]=d>>5&1,j[m+3]=d>>4&1,j[m+4]=d>>3&1,j[m+5]=d>>2&1,j[m+6]=d>>1&1,j[m+7]=1&d,m+=8;if(p>m)for(d=a[i++],n=128;p>m;)j[m++]=+!!(d&n),n>>=1}else{var r=0;for(d=0,m=0,c=h;c>m;++m){for(m%k===0&&(d=0,r=0);b>r;)d=d<<8|a[i++],r+=8;var s=r-b,t=d>>s;j[m]=0>t?0:t>l?l:t,d&=(1<<s)-1,r=s}}return j},fillOpacity:function(a,b,d,e,f){var h,i,j,k,l,m,n=this.smask,o=this.mask;if(n)i=n.width,j=n.height,h=new Uint8Array(i*j),n.fillGrayBuffer(h),(i!==b||j!==d)&&(h=g.resize(h,n.bpc,1,i,j,b,d));else if(o)if(o instanceof g){for(i=o.width,j=o.height,h=new Uint8Array(i*j),o.numComps=1,o.fillGrayBuffer(h),k=0,l=i*j;l>k;++k)h[k]=255-h[k];(i!==b||j!==d)&&(h=g.resize(h,o.bpc,1,i,j,b,d))}else if(C(o)){h=new Uint8Array(b*d);var p=this.numComps;for(k=0,l=b*d;l>k;++k){var q=0,r=k*p;for(m=0;p>m;++m){var s=f[r+m],t=2*m;if(s<o[t]||s>o[t+1]){q=255;break}}h[k]=q}}else c("Unknown mask format.");if(h)for(k=0,m=3,l=b*e;l>k;++k,m+=4)a[m]=h[k];else for(k=0,m=3,l=b*e;l>k;++k,m+=4)a[m]=255},undoPreblend:function(a,b,c){var d=this.smask&&this.smask.matte;if(d)for(var e,f,g,h=this.colorSpace.getRgb(d,0),i=h[0],j=h[1],k=h[2],l=b*c*4,m=0;l>m;m+=4){var n=a[m+3];if(0!==n){var o=255/n;e=(a[m]-i)*o+i,f=(a[m+1]-j)*o+j,g=(a[m+2]-k)*o+k,a[m]=0>=e?0:e>=255?255:0|e,a[m+1]=0>=f?0:f>=255?255:0|f,a[m+2]=0>=g?0:g>=255?255:0|g}else a[m]=255,a[m+1]=255,a[m+2]=255}},createImageData:function(a){var b,c=this.drawWidth,d=this.drawHeight,f={width:c,height:d},g=this.numComps,h=this.width,i=this.height,j=this.bpc,k=h*g*j+7>>3;if(!a){var l;if("DeviceGray"===this.colorSpace.name&&1===j?l=V.GRAYSCALE_1BPP:"DeviceRGB"!==this.colorSpace.name||8!==j||this.needsDecode||(l=V.RGB_24BPP),l&&!this.smask&&!this.mask&&c===h&&d===i){if(f.kind=l,b=this.getImageBytes(i*k),this.image instanceof Oc)f.data=b;else{var m=new Uint8Array(b.length);m.set(b),f.data=m}if(this.needsDecode){e(l===V.GRAYSCALE_1BPP);for(var n=f.data,o=0,p=n.length;p>o;o++)n[o]^=255}return f}if(this.image instanceof Sc&&!this.smask&&!this.mask&&("DeviceGray"===this.colorSpace.name||"DeviceRGB"===this.colorSpace.name||"DeviceCMYK"===this.colorSpace.name))return f.kind=V.RGB_24BPP,f.data=this.getImageBytes(i*k,c,d,!0),f}b=this.getImageBytes(i*k);var q,r,s=0|b.length/k*d/i,t=this.getComponents(b);return a||this.smask||this.mask?(f.kind=V.RGBA_32BPP,f.data=new Uint8Array(c*d*4),q=1,r=!0,this.fillOpacity(f.data,c,d,s,t)):(f.kind=V.RGB_24BPP,f.data=new Uint8Array(c*d*3),q=0,r=!1),this.needsDecode&&this.decodeBuffer(t),this.colorSpace.fillRgb(f.data,h,i,c,d,s,j,t,q),r&&this.undoPreblend(f.data,c,s),f},fillGrayBuffer:function(a){var b=this.numComps;1!==b&&c("Reading gray scale from a color image: "+b);var d,e,f=this.width,g=this.height,h=this.bpc,i=f*b*h+7>>3,j=this.getImageBytes(g*i),k=this.getComponents(j);if(1!==h){this.needsDecode&&this.decodeBuffer(k),e=f*g;var l=255/((1<<h)-1);for(d=0;e>d;++d)a[d]=l*k[d]|0}else if(e=f*g,this.needsDecode)for(d=0;e>d;++d)a[d]=k[d]-1&255;else for(d=0;e>d;++d)a[d]=255&-k[d]},getImageBytes:function(a,b,c,d){return this.image.reset(),this.image.drawWidth=b||this.width,this.image.drawHeight=c||this.height,this.image.forceRGB=!!d,this.image.getBytes(a)}},g}(),Cc={Courier:600,"Courier-Bold":600,"Courier-BoldOblique":600,"Courier-Oblique":600,Helvetica:{space:278,exclam:278,quotedbl:355,numbersign:556,dollar:556,percent:889,ampersand:667,quoteright:222,parenleft:333,parenright:333,asterisk:389,plus:584,comma:278,hyphen:333,period:278,slash:278,zero:556,one:556,two:556,three:556,four:556,five:556,six:556,seven:556,eight:556,nine:556,colon:278,semicolon:278,less:584,equal:584,greater:584,question:556,at:1015,A:667,B:667,C:722,D:722,E:667,F:611,G:778,H:722,I:278,J:500,K:667,L:556,M:833,N:722,O:778,P:667,Q:778,R:722,S:667,T:611,U:722,V:667,W:944,X:667,Y:667,Z:611,bracketleft:278,backslash:278,bracketright:278,asciicircum:469,underscore:556,quoteleft:222,a:556,b:556,c:500,d:556,e:556,f:278,g:556,h:556,i:222,j:222,k:500,l:222,m:833,n:556,o:556,p:556,q:556,r:333,s:500,t:278,u:556,v:500,w:722,x:500,y:500,z:500,braceleft:334,bar:260,braceright:334,asciitilde:584,exclamdown:333,cent:556,sterling:556,fraction:167,yen:556,florin:556,section:556,currency:556,quotesingle:191,quotedblleft:333,guillemotleft:556,guilsinglleft:333,guilsinglright:333,fi:500,fl:500,endash:556,dagger:556,daggerdbl:556,periodcentered:278,paragraph:537,bullet:350,quotesinglbase:222,quotedblbase:333,quotedblright:333,guillemotright:556,ellipsis:1e3,perthousand:1e3,questiondown:611,grave:333,acute:333,circumflex:333,tilde:333,macron:333,breve:333,dotaccent:333,dieresis:333,ring:333,cedilla:333,hungarumlaut:333,ogonek:333,caron:333,emdash:1e3,AE:1e3,ordfeminine:370,Lslash:556,Oslash:778,OE:1e3,ordmasculine:365,ae:889,dotlessi:278,lslash:222,oslash:611,oe:944,germandbls:611,Idieresis:278,eacute:556,abreve:556,uhungarumlaut:556,ecaron:556,Ydieresis:667,divide:584,Yacute:667,Acircumflex:667,aacute:556,Ucircumflex:722,yacute:500,scommaaccent:500,ecircumflex:556,Uring:722,Udieresis:722,aogonek:556,Uacute:722,uogonek:556,Edieresis:667,Dcroat:722,commaaccent:250,copyright:737,Emacron:667,ccaron:500,aring:556,Ncommaaccent:722,lacute:222,agrave:556,Tcommaaccent:611,Cacute:722,atilde:556,Edotaccent:667,scaron:500,scedilla:500,iacute:278,lozenge:471,Rcaron:722,Gcommaaccent:778,ucircumflex:556,acircumflex:556,Amacron:667,rcaron:333,ccedilla:500,Zdotaccent:611,Thorn:667,Omacron:778,Racute:722,Sacute:667,dcaron:643,Umacron:722,uring:556,threesuperior:333,Ograve:778,Agrave:667,Abreve:667,multiply:584,uacute:556,Tcaron:611,partialdiff:476,ydieresis:500,Nacute:722,icircumflex:278,Ecircumflex:667,adieresis:556,edieresis:556,cacute:500,nacute:556,umacron:556,Ncaron:722,Iacute:278,plusminus:584,brokenbar:260,registered:737,Gbreve:778,Idotaccent:278,summation:600,Egrave:667,racute:333,omacron:556,Zacute:611,Zcaron:611,greaterequal:549,Eth:722,Ccedilla:722,lcommaaccent:222,tcaron:317,eogonek:556,Uogonek:722,Aacute:667,Adieresis:667,egrave:556,zacute:500,iogonek:222,Oacute:778,oacute:556,amacron:556,sacute:500,idieresis:278,Ocircumflex:778,Ugrave:722,Delta:612,thorn:556,twosuperior:333,Odieresis:778,mu:556,igrave:278,ohungarumlaut:556,Eogonek:667,dcroat:556,threequarters:834,Scedilla:667,lcaron:299,Kcommaaccent:667,Lacute:556,trademark:1e3,edotaccent:556,Igrave:278,Imacron:278,Lcaron:556,onehalf:834,lessequal:549,ocircumflex:556,ntilde:556,Uhungarumlaut:722,Eacute:667,emacron:556,gbreve:556,onequarter:834,Scaron:667,Scommaaccent:667,Ohungarumlaut:778,degree:400,ograve:556,Ccaron:722,ugrave:556,radical:453,Dcaron:722,rcommaaccent:333,Ntilde:722,otilde:556,Rcommaaccent:722,Lcommaaccent:556,Atilde:667,Aogonek:667,Aring:667,Otilde:778,zdotaccent:500,Ecaron:667,Iogonek:278,kcommaaccent:500,minus:584,Icircumflex:278,ncaron:556,tcommaaccent:278,logicalnot:584,odieresis:556,udieresis:556,notequal:549,gcommaaccent:556,eth:556,zcaron:500,ncommaaccent:556,onesuperior:333,imacron:278,Euro:556},"Helvetica-Bold":{space:278,exclam:333,quotedbl:474,numbersign:556,dollar:556,percent:889,ampersand:722,quoteright:278,parenleft:333,parenright:333,asterisk:389,plus:584,comma:278,hyphen:333,period:278,slash:278,zero:556,one:556,two:556,three:556,four:556,five:556,six:556,seven:556,eight:556,nine:556,colon:333,semicolon:333,less:584,equal:584,greater:584,question:611,at:975,A:722,B:722,C:722,D:722,E:667,F:611,G:778,H:722,I:278,J:556,K:722,L:611,M:833,N:722,O:778,P:667,Q:778,R:722,S:667,T:611,U:722,V:667,W:944,X:667,Y:667,Z:611,bracketleft:333,backslash:278,bracketright:333,asciicircum:584,underscore:556,quoteleft:278,a:556,b:611,c:556,d:611,e:556,f:333,g:611,h:611,i:278,j:278,k:556,l:278,m:889,n:611,o:611,p:611,q:611,r:389,s:556,t:333,u:611,v:556,w:778,x:556,y:556,z:500,braceleft:389,bar:280,braceright:389,asciitilde:584,exclamdown:333,cent:556,sterling:556,fraction:167,yen:556,florin:556,section:556,currency:556,quotesingle:238,quotedblleft:500,guillemotleft:556,guilsinglleft:333,guilsinglright:333,fi:611,fl:611,endash:556,dagger:556,daggerdbl:556,periodcentered:278,paragraph:556,bullet:350,quotesinglbase:278,quotedblbase:500,quotedblright:500,guillemotright:556,ellipsis:1e3,perthousand:1e3,questiondown:611,grave:333,acute:333,circumflex:333,tilde:333,macron:333,breve:333,dotaccent:333,dieresis:333,ring:333,cedilla:333,hungarumlaut:333,ogonek:333,caron:333,emdash:1e3,AE:1e3,ordfeminine:370,Lslash:611,Oslash:778,OE:1e3,ordmasculine:365,ae:889,dotlessi:278,lslash:278,oslash:611,oe:944,germandbls:611,Idieresis:278,eacute:556,abreve:556,uhungarumlaut:611,ecaron:556,Ydieresis:667,divide:584,Yacute:667,Acircumflex:722,aacute:556,Ucircumflex:722,yacute:556,scommaaccent:556,ecircumflex:556,Uring:722,Udieresis:722,aogonek:556,Uacute:722,uogonek:611,Edieresis:667,Dcroat:722,commaaccent:250,copyright:737,Emacron:667,ccaron:556,aring:556,Ncommaaccent:722,lacute:278,agrave:556,Tcommaaccent:611,Cacute:722,atilde:556,Edotaccent:667,scaron:556,scedilla:556,iacute:278,lozenge:494,Rcaron:722,Gcommaaccent:778,ucircumflex:611,acircumflex:556,Amacron:722,rcaron:389,ccedilla:556,Zdotaccent:611,Thorn:667,Omacron:778,Racute:722,Sacute:667,dcaron:743,Umacron:722,uring:611,threesuperior:333,Ograve:778,Agrave:722,Abreve:722,multiply:584,uacute:611,Tcaron:611,partialdiff:494,ydieresis:556,Nacute:722,icircumflex:278,Ecircumflex:667,adieresis:556,edieresis:556,cacute:556,nacute:611,umacron:611,Ncaron:722,Iacute:278,plusminus:584,brokenbar:280,registered:737,Gbreve:778,Idotaccent:278,summation:600,Egrave:667,racute:389,omacron:611,Zacute:611,Zcaron:611,greaterequal:549,Eth:722,Ccedilla:722,lcommaaccent:278,tcaron:389,eogonek:556,Uogonek:722,Aacute:722,Adieresis:722,egrave:556,zacute:500,iogonek:278,Oacute:778,oacute:611,amacron:556,sacute:556,idieresis:278,Ocircumflex:778,Ugrave:722,Delta:612,thorn:611,twosuperior:333,Odieresis:778,mu:611,igrave:278,ohungarumlaut:611,Eogonek:667,dcroat:611,threequarters:834,Scedilla:667,lcaron:400,Kcommaaccent:722,Lacute:611,trademark:1e3,edotaccent:556,Igrave:278,Imacron:278,Lcaron:611,onehalf:834,lessequal:549,ocircumflex:611,ntilde:611,Uhungarumlaut:722,Eacute:667,emacron:556,gbreve:611,onequarter:834,Scaron:667,Scommaaccent:667,Ohungarumlaut:778,degree:400,ograve:611,Ccaron:722,ugrave:611,radical:549,Dcaron:722,rcommaaccent:389,Ntilde:722,otilde:611,Rcommaaccent:722,Lcommaaccent:611,Atilde:722,Aogonek:722,Aring:722,Otilde:778,zdotaccent:500,Ecaron:667,Iogonek:278,kcommaaccent:556,minus:584,Icircumflex:278,ncaron:611,tcommaaccent:333,logicalnot:584,odieresis:611,udieresis:611,notequal:549,gcommaaccent:611,eth:611,zcaron:500,ncommaaccent:611,onesuperior:333,imacron:278,Euro:556},"Helvetica-BoldOblique":{space:278,exclam:333,quotedbl:474,numbersign:556,dollar:556,percent:889,ampersand:722,quoteright:278,parenleft:333,parenright:333,asterisk:389,plus:584,comma:278,hyphen:333,period:278,slash:278,zero:556,one:556,two:556,three:556,four:556,five:556,six:556,seven:556,eight:556,nine:556,colon:333,semicolon:333,less:584,equal:584,greater:584,question:611,at:975,A:722,B:722,C:722,D:722,E:667,F:611,G:778,H:722,I:278,J:556,K:722,L:611,M:833,N:722,O:778,P:667,Q:778,R:722,S:667,T:611,U:722,V:667,W:944,X:667,Y:667,Z:611,bracketleft:333,backslash:278,bracketright:333,asciicircum:584,underscore:556,quoteleft:278,a:556,b:611,c:556,d:611,e:556,f:333,g:611,h:611,i:278,j:278,k:556,l:278,m:889,n:611,o:611,p:611,q:611,r:389,s:556,t:333,u:611,v:556,w:778,x:556,y:556,z:500,braceleft:389,bar:280,braceright:389,asciitilde:584,exclamdown:333,cent:556,sterling:556,fraction:167,yen:556,florin:556,section:556,currency:556,quotesingle:238,quotedblleft:500,guillemotleft:556,guilsinglleft:333,guilsinglright:333,fi:611,fl:611,endash:556,dagger:556,daggerdbl:556,periodcentered:278,paragraph:556,bullet:350,quotesinglbase:278,quotedblbase:500,quotedblright:500,guillemotright:556,ellipsis:1e3,perthousand:1e3,questiondown:611,grave:333,acute:333,circumflex:333,tilde:333,macron:333,breve:333,dotaccent:333,dieresis:333,ring:333,cedilla:333,hungarumlaut:333,ogonek:333,caron:333,emdash:1e3,AE:1e3,ordfeminine:370,Lslash:611,Oslash:778,OE:1e3,ordmasculine:365,ae:889,dotlessi:278,lslash:278,oslash:611,oe:944,germandbls:611,Idieresis:278,eacute:556,abreve:556,uhungarumlaut:611,ecaron:556,Ydieresis:667,divide:584,Yacute:667,Acircumflex:722,aacute:556,Ucircumflex:722,yacute:556,scommaaccent:556,ecircumflex:556,Uring:722,Udieresis:722,aogonek:556,Uacute:722,uogonek:611,Edieresis:667,Dcroat:722,commaaccent:250,copyright:737,Emacron:667,ccaron:556,aring:556,Ncommaaccent:722,lacute:278,agrave:556,Tcommaaccent:611,Cacute:722,atilde:556,Edotaccent:667,scaron:556,scedilla:556,iacute:278,lozenge:494,Rcaron:722,Gcommaaccent:778,ucircumflex:611,acircumflex:556,Amacron:722,rcaron:389,ccedilla:556,Zdotaccent:611,Thorn:667,Omacron:778,Racute:722,Sacute:667,dcaron:743,Umacron:722,uring:611,threesuperior:333,Ograve:778,Agrave:722,Abreve:722,multiply:584,uacute:611,Tcaron:611,partialdiff:494,ydieresis:556,Nacute:722,icircumflex:278,Ecircumflex:667,adieresis:556,edieresis:556,cacute:556,nacute:611,umacron:611,Ncaron:722,Iacute:278,plusminus:584,brokenbar:280,registered:737,Gbreve:778,Idotaccent:278,summation:600,Egrave:667,racute:389,omacron:611,Zacute:611,Zcaron:611,greaterequal:549,Eth:722,Ccedilla:722,lcommaaccent:278,tcaron:389,eogonek:556,Uogonek:722,Aacute:722,Adieresis:722,egrave:556,zacute:500,iogonek:278,Oacute:778,oacute:611,amacron:556,sacute:556,idieresis:278,Ocircumflex:778,Ugrave:722,Delta:612,thorn:611,twosuperior:333,Odieresis:778,mu:611,igrave:278,ohungarumlaut:611,Eogonek:667,dcroat:611,threequarters:834,Scedilla:667,lcaron:400,Kcommaaccent:722,Lacute:611,trademark:1e3,edotaccent:556,Igrave:278,Imacron:278,Lcaron:611,onehalf:834,lessequal:549,ocircumflex:611,ntilde:611,Uhungarumlaut:722,Eacute:667,emacron:556,gbreve:611,onequarter:834,Scaron:667,Scommaaccent:667,Ohungarumlaut:778,degree:400,ograve:611,Ccaron:722,ugrave:611,radical:549,Dcaron:722,rcommaaccent:389,Ntilde:722,otilde:611,Rcommaaccent:722,Lcommaaccent:611,Atilde:722,Aogonek:722,Aring:722,Otilde:778,zdotaccent:500,Ecaron:667,Iogonek:278,kcommaaccent:556,minus:584,Icircumflex:278,ncaron:611,tcommaaccent:333,logicalnot:584,odieresis:611,udieresis:611,notequal:549,gcommaaccent:611,eth:611,zcaron:500,ncommaaccent:611,onesuperior:333,imacron:278,Euro:556},"Helvetica-Oblique":{space:278,exclam:278,quotedbl:355,numbersign:556,dollar:556,percent:889,ampersand:667,quoteright:222,parenleft:333,parenright:333,asterisk:389,plus:584,comma:278,hyphen:333,period:278,slash:278,zero:556,one:556,two:556,three:556,four:556,five:556,six:556,seven:556,eight:556,nine:556,colon:278,semicolon:278,less:584,equal:584,greater:584,question:556,at:1015,A:667,B:667,C:722,D:722,E:667,F:611,G:778,H:722,I:278,J:500,K:667,L:556,M:833,N:722,O:778,P:667,Q:778,R:722,S:667,T:611,U:722,V:667,W:944,X:667,Y:667,Z:611,bracketleft:278,backslash:278,bracketright:278,asciicircum:469,underscore:556,quoteleft:222,a:556,b:556,c:500,d:556,e:556,f:278,g:556,h:556,i:222,j:222,k:500,l:222,m:833,n:556,o:556,p:556,q:556,r:333,s:500,t:278,u:556,v:500,w:722,x:500,y:500,z:500,braceleft:334,bar:260,braceright:334,asciitilde:584,exclamdown:333,cent:556,sterling:556,fraction:167,yen:556,florin:556,section:556,currency:556,quotesingle:191,quotedblleft:333,guillemotleft:556,guilsinglleft:333,guilsinglright:333,fi:500,fl:500,endash:556,dagger:556,daggerdbl:556,periodcentered:278,paragraph:537,bullet:350,quotesinglbase:222,quotedblbase:333,quotedblright:333,guillemotright:556,ellipsis:1e3,perthousand:1e3,questiondown:611,grave:333,acute:333,circumflex:333,tilde:333,macron:333,breve:333,dotaccent:333,dieresis:333,ring:333,cedilla:333,hungarumlaut:333,ogonek:333,caron:333,emdash:1e3,AE:1e3,ordfeminine:370,Lslash:556,Oslash:778,OE:1e3,ordmasculine:365,ae:889,dotlessi:278,lslash:222,oslash:611,oe:944,germandbls:611,Idieresis:278,eacute:556,abreve:556,uhungarumlaut:556,ecaron:556,Ydieresis:667,divide:584,Yacute:667,Acircumflex:667,aacute:556,Ucircumflex:722,yacute:500,scommaaccent:500,ecircumflex:556,Uring:722,Udieresis:722,aogonek:556,Uacute:722,uogonek:556,Edieresis:667,Dcroat:722,commaaccent:250,copyright:737,Emacron:667,ccaron:500,aring:556,Ncommaaccent:722,lacute:222,agrave:556,Tcommaaccent:611,Cacute:722,atilde:556,Edotaccent:667,scaron:500,scedilla:500,iacute:278,lozenge:471,Rcaron:722,Gcommaaccent:778,ucircumflex:556,acircumflex:556,Amacron:667,rcaron:333,ccedilla:500,Zdotaccent:611,Thorn:667,Omacron:778,Racute:722,Sacute:667,dcaron:643,Umacron:722,uring:556,threesuperior:333,Ograve:778,Agrave:667,Abreve:667,multiply:584,uacute:556,Tcaron:611,partialdiff:476,ydieresis:500,Nacute:722,icircumflex:278,Ecircumflex:667,adieresis:556,edieresis:556,cacute:500,nacute:556,umacron:556,Ncaron:722,Iacute:278,plusminus:584,brokenbar:260,registered:737,Gbreve:778,Idotaccent:278,summation:600,Egrave:667,racute:333,omacron:556,Zacute:611,Zcaron:611,greaterequal:549,Eth:722,Ccedilla:722,lcommaaccent:222,tcaron:317,eogonek:556,Uogonek:722,Aacute:667,Adieresis:667,egrave:556,zacute:500,iogonek:222,Oacute:778,oacute:556,amacron:556,sacute:500,idieresis:278,Ocircumflex:778,Ugrave:722,Delta:612,thorn:556,twosuperior:333,Odieresis:778,mu:556,igrave:278,ohungarumlaut:556,Eogonek:667,dcroat:556,threequarters:834,Scedilla:667,lcaron:299,Kcommaaccent:667,Lacute:556,trademark:1e3,edotaccent:556,Igrave:278,Imacron:278,Lcaron:556,onehalf:834,lessequal:549,ocircumflex:556,ntilde:556,Uhungarumlaut:722,Eacute:667,emacron:556,gbreve:556,onequarter:834,Scaron:667,Scommaaccent:667,Ohungarumlaut:778,degree:400,ograve:556,Ccaron:722,ugrave:556,radical:453,Dcaron:722,rcommaaccent:333,Ntilde:722,otilde:556,Rcommaaccent:722,Lcommaaccent:556,Atilde:667,Aogonek:667,Aring:667,Otilde:778,zdotaccent:500,Ecaron:667,Iogonek:278,kcommaaccent:500,minus:584,Icircumflex:278,ncaron:556,tcommaaccent:278,logicalnot:584,odieresis:556,udieresis:556,notequal:549,gcommaaccent:556,eth:556,zcaron:500,ncommaaccent:556,onesuperior:333,imacron:278,Euro:556},Symbol:{space:250,exclam:333,universal:713,numbersign:500,existential:549,percent:833,ampersand:778,suchthat:439,parenleft:333,parenright:333,asteriskmath:500,plus:549,comma:250,minus:549,period:250,slash:278,zero:500,one:500,two:500,three:500,four:500,five:500,six:500,seven:500,eight:500,nine:500,colon:278,semicolon:278,less:549,equal:549,greater:549,question:444,congruent:549,Alpha:722,Beta:667,Chi:722,Delta:612,Epsilon:611,Phi:763,Gamma:603,Eta:722,Iota:333,theta1:631,Kappa:722,Lambda:686,Mu:889,Nu:722,Omicron:722,Pi:768,Theta:741,Rho:556,Sigma:592,Tau:611,Upsilon:690,sigma1:439,Omega:768,Xi:645,Psi:795,Zeta:611,bracketleft:333,therefore:863,bracketright:333,perpendicular:658,underscore:500,radicalex:500,alpha:631,beta:549,chi:549,delta:494,epsilon:439,phi:521,gamma:411,eta:603,iota:329,phi1:603,kappa:549,lambda:549,mu:576,nu:521,omicron:549,pi:549,theta:521,rho:549,sigma:603,tau:439,upsilon:576,omega1:713,omega:686,xi:493,psi:686,zeta:494,braceleft:480,bar:200,braceright:480,similar:549,Euro:750,Upsilon1:620,minute:247,lessequal:549,fraction:167,infinity:713,florin:500,club:753,diamond:753,heart:753,spade:753,arrowboth:1042,arrowleft:987,arrowup:603,arrowright:987,arrowdown:603,degree:400,plusminus:549,second:411,greaterequal:549,multiply:549,proportional:713,partialdiff:494,bullet:460,divide:549,notequal:549,equivalence:549,approxequal:549,ellipsis:1e3,arrowvertex:603,arrowhorizex:1e3,carriagereturn:658,aleph:823,Ifraktur:686,Rfraktur:795,weierstrass:987,circlemultiply:768,circleplus:768,emptyset:823,intersection:768,union:768,propersuperset:713,reflexsuperset:713,notsubset:713,propersubset:713,reflexsubset:713,element:713,notelement:713,angle:768,gradient:713,registerserif:790,copyrightserif:790,trademarkserif:890,product:823,radical:549,dotmath:250,logicalnot:713,logicaland:603,logicalor:603,arrowdblboth:1042,arrowdblleft:987,arrowdblup:603,arrowdblright:987,arrowdbldown:603,lozenge:494,angleleft:329,registersans:790,copyrightsans:790,trademarksans:786,summation:713,parenlefttp:384,parenleftex:384,parenleftbt:384,bracketlefttp:384,bracketleftex:384,bracketleftbt:384,bracelefttp:494,braceleftmid:494,braceleftbt:494,braceex:494,angleright:329,integral:274,integraltp:686,integralex:686,integralbt:686,parenrighttp:384,parenrightex:384,parenrightbt:384,bracketrighttp:384,bracketrightex:384,bracketrightbt:384,bracerighttp:494,bracerightmid:494,bracerightbt:494,apple:790},"Times-Roman":{space:250,exclam:333,quotedbl:408,numbersign:500,dollar:500,percent:833,ampersand:778,quoteright:333,parenleft:333,parenright:333,asterisk:500,plus:564,comma:250,hyphen:333,period:250,slash:278,zero:500,one:500,two:500,three:500,four:500,five:500,six:500,seven:500,eight:500,nine:500,colon:278,semicolon:278,less:564,equal:564,greater:564,question:444,at:921,A:722,B:667,C:667,D:722,E:611,F:556,G:722,H:722,I:333,J:389,K:722,L:611,M:889,N:722,O:722,P:556,Q:722,R:667,S:556,T:611,U:722,V:722,W:944,X:722,Y:722,Z:611,bracketleft:333,backslash:278,bracketright:333,asciicircum:469,underscore:500,quoteleft:333,a:444,b:500,c:444,d:500,e:444,f:333,g:500,h:500,i:278,j:278,k:500,l:278,m:778,n:500,o:500,p:500,q:500,r:333,s:389,t:278,u:500,v:500,w:722,x:500,y:500,z:444,braceleft:480,bar:200,braceright:480,asciitilde:541,exclamdown:333,cent:500,sterling:500,fraction:167,yen:500,florin:500,section:500,currency:500,quotesingle:180,quotedblleft:444,guillemotleft:500,guilsinglleft:333,guilsinglright:333,fi:556,fl:556,endash:500,dagger:500,daggerdbl:500,periodcentered:250,paragraph:453,bullet:350,quotesinglbase:333,quotedblbase:444,quotedblright:444,guillemotright:500,ellipsis:1e3,perthousand:1e3,questiondown:444,grave:333,acute:333,circumflex:333,tilde:333,macron:333,breve:333,dotaccent:333,dieresis:333,ring:333,cedilla:333,hungarumlaut:333,ogonek:333,caron:333,emdash:1e3,AE:889,ordfeminine:276,Lslash:611,Oslash:722,OE:889,ordmasculine:310,ae:667,dotlessi:278,lslash:278,oslash:500,oe:722,germandbls:500,Idieresis:333,eacute:444,abreve:444,uhungarumlaut:500,ecaron:444,Ydieresis:722,divide:564,Yacute:722,Acircumflex:722,aacute:444,Ucircumflex:722,yacute:500,scommaaccent:389,ecircumflex:444,Uring:722,Udieresis:722,aogonek:444,Uacute:722,uogonek:500,Edieresis:611,Dcroat:722,commaaccent:250,copyright:760,Emacron:611,ccaron:444,aring:444,Ncommaaccent:722,lacute:278,agrave:444,Tcommaaccent:611,Cacute:667,atilde:444,Edotaccent:611,scaron:389,scedilla:389,iacute:278,lozenge:471,Rcaron:667,Gcommaaccent:722,ucircumflex:500,acircumflex:444,Amacron:722,rcaron:333,ccedilla:444,Zdotaccent:611,Thorn:556,Omacron:722,Racute:667,Sacute:556,dcaron:588,Umacron:722,uring:500,threesuperior:300,Ograve:722,Agrave:722,Abreve:722,multiply:564,uacute:500,Tcaron:611,partialdiff:476,ydieresis:500,Nacute:722,icircumflex:278,Ecircumflex:611,adieresis:444,edieresis:444,cacute:444,nacute:500,umacron:500,Ncaron:722,Iacute:333,plusminus:564,brokenbar:200,registered:760,Gbreve:722,Idotaccent:333,summation:600,Egrave:611,racute:333,omacron:500,Zacute:611,Zcaron:611,greaterequal:549,Eth:722,Ccedilla:667,lcommaaccent:278,tcaron:326,eogonek:444,Uogonek:722,Aacute:722,Adieresis:722,egrave:444,zacute:444,iogonek:278,Oacute:722,oacute:500,amacron:444,sacute:389,idieresis:278,Ocircumflex:722,Ugrave:722,Delta:612,thorn:500,twosuperior:300,Odieresis:722,mu:500,igrave:278,ohungarumlaut:500,Eogonek:611,dcroat:500,threequarters:750,Scedilla:556,lcaron:344,Kcommaaccent:722,Lacute:611,trademark:980,edotaccent:444,Igrave:333,Imacron:333,Lcaron:611,onehalf:750,lessequal:549,ocircumflex:500,ntilde:500,Uhungarumlaut:722,Eacute:611,emacron:444,gbreve:500,onequarter:750,Scaron:556,Scommaaccent:556,Ohungarumlaut:722,degree:400,ograve:500,Ccaron:667,ugrave:500,radical:453,Dcaron:722,rcommaaccent:333,Ntilde:722,otilde:500,Rcommaaccent:667,Lcommaaccent:611,Atilde:722,Aogonek:722,Aring:722,Otilde:722,zdotaccent:444,Ecaron:611,Iogonek:333,kcommaaccent:500,minus:564,Icircumflex:333,ncaron:500,tcommaaccent:278,logicalnot:564,odieresis:500,udieresis:500,notequal:549,gcommaaccent:500,eth:500,zcaron:444,ncommaaccent:500,onesuperior:300,imacron:278,Euro:500},"Times-Bold":{space:250,exclam:333,quotedbl:555,numbersign:500,dollar:500,percent:1e3,ampersand:833,quoteright:333,parenleft:333,parenright:333,asterisk:500,plus:570,comma:250,hyphen:333,period:250,slash:278,zero:500,one:500,two:500,three:500,four:500,five:500,six:500,seven:500,eight:500,nine:500,colon:333,semicolon:333,less:570,equal:570,greater:570,question:500,at:930,A:722,B:667,C:722,D:722,E:667,F:611,G:778,H:778,I:389,J:500,K:778,L:667,M:944,N:722,O:778,P:611,Q:778,R:722,S:556,T:667,U:722,V:722,W:1e3,X:722,Y:722,Z:667,bracketleft:333,backslash:278,bracketright:333,asciicircum:581,underscore:500,quoteleft:333,a:500,b:556,c:444,d:556,e:444,f:333,g:500,h:556,i:278,j:333,k:556,l:278,m:833,n:556,o:500,p:556,q:556,r:444,s:389,t:333,u:556,v:500,w:722,x:500,y:500,z:444,braceleft:394,bar:220,braceright:394,asciitilde:520,exclamdown:333,cent:500,sterling:500,fraction:167,yen:500,florin:500,section:500,currency:500,quotesingle:278,quotedblleft:500,guillemotleft:500,guilsinglleft:333,guilsinglright:333,fi:556,fl:556,endash:500,dagger:500,daggerdbl:500,periodcentered:250,paragraph:540,bullet:350,quotesinglbase:333,quotedblbase:500,quotedblright:500,guillemotright:500,ellipsis:1e3,perthousand:1e3,questiondown:500,grave:333,acute:333,circumflex:333,tilde:333,macron:333,breve:333,dotaccent:333,dieresis:333,ring:333,cedilla:333,hungarumlaut:333,ogonek:333,caron:333,emdash:1e3,AE:1e3,ordfeminine:300,Lslash:667,Oslash:778,OE:1e3,ordmasculine:330,ae:722,dotlessi:278,lslash:278,oslash:500,oe:722,germandbls:556,Idieresis:389,eacute:444,abreve:500,uhungarumlaut:556,ecaron:444,Ydieresis:722,divide:570,Yacute:722,Acircumflex:722,
+aacute:500,Ucircumflex:722,yacute:500,scommaaccent:389,ecircumflex:444,Uring:722,Udieresis:722,aogonek:500,Uacute:722,uogonek:556,Edieresis:667,Dcroat:722,commaaccent:250,copyright:747,Emacron:667,ccaron:444,aring:500,Ncommaaccent:722,lacute:278,agrave:500,Tcommaaccent:667,Cacute:722,atilde:500,Edotaccent:667,scaron:389,scedilla:389,iacute:278,lozenge:494,Rcaron:722,Gcommaaccent:778,ucircumflex:556,acircumflex:500,Amacron:722,rcaron:444,ccedilla:444,Zdotaccent:667,Thorn:611,Omacron:778,Racute:722,Sacute:556,dcaron:672,Umacron:722,uring:556,threesuperior:300,Ograve:778,Agrave:722,Abreve:722,multiply:570,uacute:556,Tcaron:667,partialdiff:494,ydieresis:500,Nacute:722,icircumflex:278,Ecircumflex:667,adieresis:500,edieresis:444,cacute:444,nacute:556,umacron:556,Ncaron:722,Iacute:389,plusminus:570,brokenbar:220,registered:747,Gbreve:778,Idotaccent:389,summation:600,Egrave:667,racute:444,omacron:500,Zacute:667,Zcaron:667,greaterequal:549,Eth:722,Ccedilla:722,lcommaaccent:278,tcaron:416,eogonek:444,Uogonek:722,Aacute:722,Adieresis:722,egrave:444,zacute:444,iogonek:278,Oacute:778,oacute:500,amacron:500,sacute:389,idieresis:278,Ocircumflex:778,Ugrave:722,Delta:612,thorn:556,twosuperior:300,Odieresis:778,mu:556,igrave:278,ohungarumlaut:500,Eogonek:667,dcroat:556,threequarters:750,Scedilla:556,lcaron:394,Kcommaaccent:778,Lacute:667,trademark:1e3,edotaccent:444,Igrave:389,Imacron:389,Lcaron:667,onehalf:750,lessequal:549,ocircumflex:500,ntilde:556,Uhungarumlaut:722,Eacute:667,emacron:444,gbreve:500,onequarter:750,Scaron:556,Scommaaccent:556,Ohungarumlaut:778,degree:400,ograve:500,Ccaron:722,ugrave:556,radical:549,Dcaron:722,rcommaaccent:444,Ntilde:722,otilde:500,Rcommaaccent:722,Lcommaaccent:667,Atilde:722,Aogonek:722,Aring:722,Otilde:778,zdotaccent:444,Ecaron:667,Iogonek:389,kcommaaccent:556,minus:570,Icircumflex:389,ncaron:556,tcommaaccent:333,logicalnot:570,odieresis:500,udieresis:556,notequal:549,gcommaaccent:500,eth:500,zcaron:444,ncommaaccent:556,onesuperior:300,imacron:278,Euro:500},"Times-BoldItalic":{space:250,exclam:389,quotedbl:555,numbersign:500,dollar:500,percent:833,ampersand:778,quoteright:333,parenleft:333,parenright:333,asterisk:500,plus:570,comma:250,hyphen:333,period:250,slash:278,zero:500,one:500,two:500,three:500,four:500,five:500,six:500,seven:500,eight:500,nine:500,colon:333,semicolon:333,less:570,equal:570,greater:570,question:500,at:832,A:667,B:667,C:667,D:722,E:667,F:667,G:722,H:778,I:389,J:500,K:667,L:611,M:889,N:722,O:722,P:611,Q:722,R:667,S:556,T:611,U:722,V:667,W:889,X:667,Y:611,Z:611,bracketleft:333,backslash:278,bracketright:333,asciicircum:570,underscore:500,quoteleft:333,a:500,b:500,c:444,d:500,e:444,f:333,g:500,h:556,i:278,j:278,k:500,l:278,m:778,n:556,o:500,p:500,q:500,r:389,s:389,t:278,u:556,v:444,w:667,x:500,y:444,z:389,braceleft:348,bar:220,braceright:348,asciitilde:570,exclamdown:389,cent:500,sterling:500,fraction:167,yen:500,florin:500,section:500,currency:500,quotesingle:278,quotedblleft:500,guillemotleft:500,guilsinglleft:333,guilsinglright:333,fi:556,fl:556,endash:500,dagger:500,daggerdbl:500,periodcentered:250,paragraph:500,bullet:350,quotesinglbase:333,quotedblbase:500,quotedblright:500,guillemotright:500,ellipsis:1e3,perthousand:1e3,questiondown:500,grave:333,acute:333,circumflex:333,tilde:333,macron:333,breve:333,dotaccent:333,dieresis:333,ring:333,cedilla:333,hungarumlaut:333,ogonek:333,caron:333,emdash:1e3,AE:944,ordfeminine:266,Lslash:611,Oslash:722,OE:944,ordmasculine:300,ae:722,dotlessi:278,lslash:278,oslash:500,oe:722,germandbls:500,Idieresis:389,eacute:444,abreve:500,uhungarumlaut:556,ecaron:444,Ydieresis:611,divide:570,Yacute:611,Acircumflex:667,aacute:500,Ucircumflex:722,yacute:444,scommaaccent:389,ecircumflex:444,Uring:722,Udieresis:722,aogonek:500,Uacute:722,uogonek:556,Edieresis:667,Dcroat:722,commaaccent:250,copyright:747,Emacron:667,ccaron:444,aring:500,Ncommaaccent:722,lacute:278,agrave:500,Tcommaaccent:611,Cacute:667,atilde:500,Edotaccent:667,scaron:389,scedilla:389,iacute:278,lozenge:494,Rcaron:667,Gcommaaccent:722,ucircumflex:556,acircumflex:500,Amacron:667,rcaron:389,ccedilla:444,Zdotaccent:611,Thorn:611,Omacron:722,Racute:667,Sacute:556,dcaron:608,Umacron:722,uring:556,threesuperior:300,Ograve:722,Agrave:667,Abreve:667,multiply:570,uacute:556,Tcaron:611,partialdiff:494,ydieresis:444,Nacute:722,icircumflex:278,Ecircumflex:667,adieresis:500,edieresis:444,cacute:444,nacute:556,umacron:556,Ncaron:722,Iacute:389,plusminus:570,brokenbar:220,registered:747,Gbreve:722,Idotaccent:389,summation:600,Egrave:667,racute:389,omacron:500,Zacute:611,Zcaron:611,greaterequal:549,Eth:722,Ccedilla:667,lcommaaccent:278,tcaron:366,eogonek:444,Uogonek:722,Aacute:667,Adieresis:667,egrave:444,zacute:389,iogonek:278,Oacute:722,oacute:500,amacron:500,sacute:389,idieresis:278,Ocircumflex:722,Ugrave:722,Delta:612,thorn:500,twosuperior:300,Odieresis:722,mu:576,igrave:278,ohungarumlaut:500,Eogonek:667,dcroat:500,threequarters:750,Scedilla:556,lcaron:382,Kcommaaccent:667,Lacute:611,trademark:1e3,edotaccent:444,Igrave:389,Imacron:389,Lcaron:611,onehalf:750,lessequal:549,ocircumflex:500,ntilde:556,Uhungarumlaut:722,Eacute:667,emacron:444,gbreve:500,onequarter:750,Scaron:556,Scommaaccent:556,Ohungarumlaut:722,degree:400,ograve:500,Ccaron:667,ugrave:556,radical:549,Dcaron:722,rcommaaccent:389,Ntilde:722,otilde:500,Rcommaaccent:667,Lcommaaccent:611,Atilde:667,Aogonek:667,Aring:667,Otilde:722,zdotaccent:389,Ecaron:667,Iogonek:389,kcommaaccent:500,minus:606,Icircumflex:389,ncaron:556,tcommaaccent:278,logicalnot:606,odieresis:500,udieresis:556,notequal:549,gcommaaccent:500,eth:500,zcaron:389,ncommaaccent:556,onesuperior:300,imacron:278,Euro:500},"Times-Italic":{space:250,exclam:333,quotedbl:420,numbersign:500,dollar:500,percent:833,ampersand:778,quoteright:333,parenleft:333,parenright:333,asterisk:500,plus:675,comma:250,hyphen:333,period:250,slash:278,zero:500,one:500,two:500,three:500,four:500,five:500,six:500,seven:500,eight:500,nine:500,colon:333,semicolon:333,less:675,equal:675,greater:675,question:500,at:920,A:611,B:611,C:667,D:722,E:611,F:611,G:722,H:722,I:333,J:444,K:667,L:556,M:833,N:667,O:722,P:611,Q:722,R:611,S:500,T:556,U:722,V:611,W:833,X:611,Y:556,Z:556,bracketleft:389,backslash:278,bracketright:389,asciicircum:422,underscore:500,quoteleft:333,a:500,b:500,c:444,d:500,e:444,f:278,g:500,h:500,i:278,j:278,k:444,l:278,m:722,n:500,o:500,p:500,q:500,r:389,s:389,t:278,u:500,v:444,w:667,x:444,y:444,z:389,braceleft:400,bar:275,braceright:400,asciitilde:541,exclamdown:389,cent:500,sterling:500,fraction:167,yen:500,florin:500,section:500,currency:500,quotesingle:214,quotedblleft:556,guillemotleft:500,guilsinglleft:333,guilsinglright:333,fi:500,fl:500,endash:500,dagger:500,daggerdbl:500,periodcentered:250,paragraph:523,bullet:350,quotesinglbase:333,quotedblbase:556,quotedblright:556,guillemotright:500,ellipsis:889,perthousand:1e3,questiondown:500,grave:333,acute:333,circumflex:333,tilde:333,macron:333,breve:333,dotaccent:333,dieresis:333,ring:333,cedilla:333,hungarumlaut:333,ogonek:333,caron:333,emdash:889,AE:889,ordfeminine:276,Lslash:556,Oslash:722,OE:944,ordmasculine:310,ae:667,dotlessi:278,lslash:278,oslash:500,oe:667,germandbls:500,Idieresis:333,eacute:444,abreve:500,uhungarumlaut:500,ecaron:444,Ydieresis:556,divide:675,Yacute:556,Acircumflex:611,aacute:500,Ucircumflex:722,yacute:444,scommaaccent:389,ecircumflex:444,Uring:722,Udieresis:722,aogonek:500,Uacute:722,uogonek:500,Edieresis:611,Dcroat:722,commaaccent:250,copyright:760,Emacron:611,ccaron:444,aring:500,Ncommaaccent:667,lacute:278,agrave:500,Tcommaaccent:556,Cacute:667,atilde:500,Edotaccent:611,scaron:389,scedilla:389,iacute:278,lozenge:471,Rcaron:611,Gcommaaccent:722,ucircumflex:500,acircumflex:500,Amacron:611,rcaron:389,ccedilla:444,Zdotaccent:556,Thorn:611,Omacron:722,Racute:611,Sacute:500,dcaron:544,Umacron:722,uring:500,threesuperior:300,Ograve:722,Agrave:611,Abreve:611,multiply:675,uacute:500,Tcaron:556,partialdiff:476,ydieresis:444,Nacute:667,icircumflex:278,Ecircumflex:611,adieresis:500,edieresis:444,cacute:444,nacute:500,umacron:500,Ncaron:667,Iacute:333,plusminus:675,brokenbar:275,registered:760,Gbreve:722,Idotaccent:333,summation:600,Egrave:611,racute:389,omacron:500,Zacute:556,Zcaron:556,greaterequal:549,Eth:722,Ccedilla:667,lcommaaccent:278,tcaron:300,eogonek:444,Uogonek:722,Aacute:611,Adieresis:611,egrave:444,zacute:389,iogonek:278,Oacute:722,oacute:500,amacron:500,sacute:389,idieresis:278,Ocircumflex:722,Ugrave:722,Delta:612,thorn:500,twosuperior:300,Odieresis:722,mu:500,igrave:278,ohungarumlaut:500,Eogonek:611,dcroat:500,threequarters:750,Scedilla:500,lcaron:300,Kcommaaccent:667,Lacute:556,trademark:980,edotaccent:444,Igrave:333,Imacron:333,Lcaron:611,onehalf:750,lessequal:549,ocircumflex:500,ntilde:500,Uhungarumlaut:722,Eacute:611,emacron:444,gbreve:500,onequarter:750,Scaron:500,Scommaaccent:500,Ohungarumlaut:722,degree:400,ograve:500,Ccaron:667,ugrave:500,radical:453,Dcaron:722,rcommaaccent:389,Ntilde:667,otilde:500,Rcommaaccent:611,Lcommaaccent:556,Atilde:611,Aogonek:611,Aring:611,Otilde:722,zdotaccent:389,Ecaron:611,Iogonek:333,kcommaaccent:444,minus:675,Icircumflex:333,ncaron:500,tcommaaccent:278,logicalnot:675,odieresis:500,udieresis:500,notequal:549,gcommaaccent:500,eth:500,zcaron:389,ncommaaccent:500,onesuperior:300,imacron:278,Euro:500},ZapfDingbats:{space:278,a1:974,a2:961,a202:974,a3:980,a4:719,a5:789,a119:790,a118:791,a117:690,a11:960,a12:939,a13:549,a14:855,a15:911,a16:933,a105:911,a17:945,a18:974,a19:755,a20:846,a21:762,a22:761,a23:571,a24:677,a25:763,a26:760,a27:759,a28:754,a6:494,a7:552,a8:537,a9:577,a10:692,a29:786,a30:788,a31:788,a32:790,a33:793,a34:794,a35:816,a36:823,a37:789,a38:841,a39:823,a40:833,a41:816,a42:831,a43:923,a44:744,a45:723,a46:749,a47:790,a48:792,a49:695,a50:776,a51:768,a52:792,a53:759,a54:707,a55:708,a56:682,a57:701,a58:826,a59:815,a60:789,a61:789,a62:707,a63:687,a64:696,a65:689,a66:786,a67:787,a68:713,a69:791,a70:785,a71:791,a72:873,a73:761,a74:762,a203:762,a75:759,a204:759,a76:892,a77:892,a78:788,a79:784,a81:438,a82:138,a83:277,a84:415,a97:392,a98:392,a99:668,a100:668,a89:390,a90:390,a93:317,a94:317,a91:276,a92:276,a205:509,a85:509,a206:410,a86:410,a87:234,a88:234,a95:334,a96:334,a101:732,a102:544,a103:544,a104:910,a106:667,a107:760,a108:760,a112:776,a111:595,a110:694,a109:626,a120:788,a121:788,a122:788,a123:788,a124:788,a125:788,a126:788,a127:788,a128:788,a129:788,a130:788,a131:788,a132:788,a133:788,a134:788,a135:788,a136:788,a137:788,a138:788,a139:788,a140:788,a141:788,a142:788,a143:788,a144:788,a145:788,a146:788,a147:788,a148:788,a149:788,a150:788,a151:788,a152:788,a153:788,a154:788,a155:788,a156:788,a157:788,a158:788,a159:788,a160:894,a161:838,a163:1016,a164:458,a196:748,a165:924,a192:748,a166:918,a167:927,a168:928,a169:928,a170:834,a171:873,a172:828,a173:924,a162:924,a174:917,a175:930,a176:931,a177:463,a178:883,a179:836,a193:836,a180:867,a199:867,a181:696,a200:696,a182:874,a201:874,a183:760,a184:946,a197:771,a185:865,a194:771,a198:888,a186:967,a195:888,a187:831,a188:873,a189:927,a190:970,a191:918}},Dc={},Ec=1e3,Fc=function(){function d(a,b,c){this.lexer=a,this.allowStreams=b,this.xref=c,this.imageCache={},this.refill()}return d.prototype={refill:function(){this.buf1=this.lexer.getObj(),this.buf2=this.lexer.getObj()},shift:function(){A(this.buf2,"ID")?(this.buf1=this.buf2,this.buf2=null):(this.buf1=this.buf2,this.buf2=this.lexer.getObj())},tryShift:function(){try{return this.shift(),!0}catch(a){if(a instanceof ja)throw a;return!1}},getObj:function(b){var d=this.buf1;if(this.shift(),d instanceof za)switch(d.cmd){case"BI":return this.makeInlineImage(b);case"[":for(var e=[];!A(this.buf1,"]")&&!R(this.buf1);)e.push(this.getObj(b));return R(this.buf1)&&c("End of file inside array"),this.shift(),e;case"<<":for(var f=new Aa(this.xref);!A(this.buf1,">>")&&!R(this.buf1);)if(z(this.buf1)){var g=this.buf1.name;if(this.shift(),R(this.buf1))break;f.set(g,this.getObj(b))}else a("Malformed dictionary: key must be a name object"),this.shift();return R(this.buf1)&&c("End of file inside dictionary"),A(this.buf2,"stream")?this.allowStreams?this.makeStream(f,b):f:(this.shift(),f);default:return d}if(w(d)){var h=d;if(w(this.buf1)&&A(this.buf2,"R")){var i=new Ba(h,this.buf1);return this.shift(),this.shift(),i}return h}if(y(d)){var j=d;return b&&(j=b.decryptString(j)),j}return d},findDefaultInlineStreamEnd:function(a){for(var b,c,d,f,g=69,h=73,i=32,j=10,k=13,l=a.pos,m=0;-1!==(b=a.getByte());)if(0===m)m=b===g?1:0;else if(1===m)m=b===h?2:0;else if(e(2===m),b===i||b===j||b===k){for(d=5,f=a.peekBytes(d),c=0;d>c;c++)if(b=f[c],b!==j&&b!==k&&(i>b||b>127)){m=0;break}if(2===m)break}else m=0;return a.pos-4-l},findDCTDecodeInlineStreamEnd:function(a){for(var c,d,e,f=a.pos,g=!1;-1!==(c=a.getByte());)if(255===c){switch(a.getByte()){case 0:break;case 255:a.skip(-1);break;case 217:g=!0;break;case 192:case 193:case 194:case 195:case 197:case 198:case 199:case 201:case 202:case 203:case 205:case 206:case 207:case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:d=a.getUint16(),d>2?a.skip(d-2):a.skip(-2)}if(g)break}return e=a.pos-f,-1===c?(b("Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead."),a.skip(-e),this.findDefaultInlineStreamEnd(a)):(this.inlineStreamSkipEI(a),e)},findASCII85DecodeInlineStreamEnd:function(a){for(var c,d,e=126,f=62,g=a.pos;-1!==(c=a.getByte());)if(c===e&&a.peekByte()===f){a.skip();break}return d=a.pos-g,-1===c?(b("Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead."),a.skip(-d),this.findDefaultInlineStreamEnd(a)):(this.inlineStreamSkipEI(a),d)},findASCIIHexDecodeInlineStreamEnd:function(a){for(var c,d,e=62,f=a.pos;-1!==(c=a.getByte())&&c!==e;);return d=a.pos-f,-1===c?(b("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead."),a.skip(-d),this.findDefaultInlineStreamEnd(a)):(this.inlineStreamSkipEI(a),d)},inlineStreamSkipEI:function(a){for(var b,c=69,d=73,e=0;-1!==(b=a.getByte());)if(0===e)e=b===c?1:0;else if(1===e)e=b===d?2:0;else if(2===e)break},makeInlineImage:function(a){for(var b=this.lexer,d=b.stream,e=new Aa(this.xref);!A(this.buf1,"ID")&&!R(this.buf1);){z(this.buf1)||c("Dictionary key must be a name object");var f=this.buf1.name;if(this.shift(),R(this.buf1))break;e.set(f,this.getObj(a))}var g,h=e.get("Filter","F");z(h)?g=h.name:C(h)&&z(h[0])&&(g=h[0].name);var i,j,k,l=d.pos;i="DCTDecode"===g||"DCT"===g?this.findDCTDecodeInlineStreamEnd(d):"ASCII85Decide"===g||"A85"===g?this.findASCII85DecodeInlineStreamEnd(d):"ASCIIHexDecode"===g||"AHx"===g?this.findASCIIHexDecodeInlineStreamEnd(d):this.findDefaultInlineStreamEnd(d);var m,n=d.makeSubStream(l,i,e);if(Ec>i){var o=n.getBytes();n.reset();var p=1,q=0;for(j=0,k=o.length;k>j;++j)p+=255&o[j],q+=p;if(m=q%65521<<16|p%65521,this.imageCache.adler32===m)return this.buf2=za.get("EI"),this.shift(),this.imageCache[m].reset(),this.imageCache[m]}return a&&(n=a.createStream(n,i)),n=this.filter(n,e,i),n.dict=e,void 0!==m&&(n.cacheKey="inline_"+i+"_"+m,this.imageCache[m]=n),this.buf2=za.get("EI"),this.shift(),n},makeStream:function(b,d){var e=this.lexer,f=e.stream;e.skipToNextLine();var g=f.pos-1,h=b.get("Length");if(w(h)||(a("Bad "+h+" attribute in stream"),h=0),f.pos=g+h,e.nextChar(),this.tryShift()&&A(this.buf2,"endstream"))this.shift();else{f.pos=g;for(var i,j,k=2048,l=9,m=[101,110,100,115,116,114,101,97,109],n=0,o=!1;f.pos<f.end;){var p=f.peekBytes(k),q=p.length-l;if(0>=q)break;for(o=!1,i=0,j=0;q>i;i++){var r=p[i];if(r!==m[j])i-=j,j=0;else if(j++,j>=l){i++,o=!0;break}}if(o){n+=i-l,f.pos+=i-l;break}n+=q,f.pos+=q}o||c("Missing endstream"),h=n,e.nextChar(),this.shift(),this.shift()}return this.shift(),f=f.makeSubStream(g,h,b),d&&(f=d.createStream(f,h)),f=this.filter(f,b,h),f.dict=b,f},filter:function(a,b,d){var e=b.get("Filter","F"),f=b.get("DecodeParms","DP");if(z(e))return this.makeFilter(a,e.name,d,f);var g=d;if(C(e))for(var h=e,i=f,j=0,k=h.length;k>j;++j)e=h[j],z(e)||c("Bad filter name: "+e),f=null,C(i)&&j in i&&(f=i[j]),a=this.makeFilter(a,e.name,g,f),g=null;return a},makeFilter:function(a,c,d,e){if(0===a.dict.get("Length")&&!d)return b('Empty "'+c+'" stream.'),new _c(a);try{e&&this.xref&&(e=this.xref.fetchIfRef(e));var f=this.xref.stats.streamTypes;if("FlateDecode"===c||"Fl"===c)return f[Y.FLATE]=!0,e?new Rc(new Qc(a,d),d,e):new Qc(a,d);if("LZWDecode"===c||"LZW"===c){f[Y.LZW]=!0;var g=1;return e?(e.has("EarlyChange")&&(g=e.get("EarlyChange")),new Rc(new $c(a,d,g),d,e)):new $c(a,d,g)}return"DCTDecode"===c||"DCT"===c?(f[Y.DCT]=!0,new Sc(a,d,a.dict,this.xref)):"JPXDecode"===c||"JPX"===c?(f[Y.JPX]=!0,new Tc(a,d,a.dict)):"ASCII85Decode"===c||"A85"===c?(f[Y.A85]=!0,new Wc(a,d)):"ASCIIHexDecode"===c||"AHx"===c?(f[Y.AHX]=!0,new Xc(a,d)):"CCITTFaxDecode"===c||"CCF"===c?(f[Y.CCF]=!0,new Zc(a,d,e)):"RunLengthDecode"===c||"RL"===c?(f[Y.RL]=!0,new Yc(a,d)):"JBIG2Decode"===c?(f[Y.JBIG]=!0,new Uc(a,d,a.dict)):(b('filter "'+c+'" not supported yet'),a)}catch(h){if(h instanceof ja)throw h;return b('Invalid stream: "'+h+'"'),new _c(a)}}},d}(),Gc=function(){function a(a,b){this.stream=a,this.nextChar(),this.strBuf=[],this.knownCommands=b}function d(a){return a>=48&&57>=a?15&a:a>=65&&70>=a||a>=97&&102>=a?(15&a)+9:-1}a.isSpace=function(a){return 32===a||9===a||13===a||10===a};var e=[1,0,0,0,0,0,0,0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];return a.prototype={nextChar:function(){return this.currentChar=this.stream.getByte()},peekChar:function(){return this.stream.peekByte()},getNumber:function(){var a=this.currentChar,d=!1,e=0,f=1;if(45===a?(f=-1,a=this.nextChar(),45===a&&(a=this.nextChar())):43===a&&(a=this.nextChar()),46===a&&(e=10,a=this.nextChar()),48>a||a>57)return c("Invalid number: "+String.fromCharCode(a)),0;for(var g=a-48,h=0,i=1;(a=this.nextChar())>=0;)if(a>=48&&57>=a){var j=a-48;d?h=10*h+j:(0!==e&&(e*=10),g=10*g+j)}else if(46===a){if(0!==e)break;e=1}else if(45===a)b("Badly formated number");else{if(69!==a&&101!==a)break;if(a=this.peekChar(),43===a||45===a)i=45===a?-1:1,this.nextChar();else if(48>a||a>57)break;d=!0}return 0!==e&&(g/=e),d&&(g*=Math.pow(10,i*h)),f*g},getString:function(){var a=1,c=!1,d=this.strBuf;d.length=0;for(var e=this.nextChar();;){var f=!1;switch(0|e){case-1:b("Unterminated string"),c=!0;break;case 40:++a,d.push("(");break;case 41:0===--a?(this.nextChar(),c=!0):d.push(")");break;case 92:switch(e=this.nextChar()){case-1:b("Unterminated string"),c=!0;break;case 110:d.push("\n");break;case 114:d.push("\r");break;case 116:d.push("	");break;case 98:d.push("\b");break;case 102:d.push("\f");break;case 92:case 40:case 41:d.push(String.fromCharCode(e));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:var g=15&e;e=this.nextChar(),f=!0,e>=48&&55>=e&&(g=(g<<3)+(15&e),e=this.nextChar(),e>=48&&55>=e&&(f=!1,g=(g<<3)+(15&e))),d.push(String.fromCharCode(g));break;case 13:10===this.peekChar()&&this.nextChar();break;case 10:break;default:d.push(String.fromCharCode(e))}break;default:d.push(String.fromCharCode(e))}if(c)break;f||(e=this.nextChar())}return d.join("")},getName:function(){var a,f=this.strBuf;for(f.length=0;(a=this.nextChar())>=0&&!e[a];)if(35===a){a=this.nextChar();var g=d(a);if(-1!==g){var h=d(this.nextChar());-1===h&&c("Illegal digit in hex char in name: "+h),f.push(String.fromCharCode(g<<4|h))}else f.push("#",String.fromCharCode(a))}else f.push(String.fromCharCode(a));return f.length>127&&b("name token is longer than allowed by the spec: "+f.length),ya.get(f.join(""))},getHexString:function(){var a=this.strBuf;a.length=0;for(var c,f,g=this.currentChar,h=!0;;){if(0>g){b("Unterminated hex string");break}if(62===g){this.nextChar();break}if(1!==e[g]){if(h){if(c=d(g),-1===c){b('Ignoring invalid character "'+g+'" in hex string'),g=this.nextChar();continue}}else{if(f=d(g),-1===f){b('Ignoring invalid character "'+g+'" in hex string'),g=this.nextChar();continue}a.push(String.fromCharCode(c<<4|f))}h=!h,g=this.nextChar()}else g=this.nextChar()}return a.join("")},getObj:function(){for(var a=!1,b=this.currentChar;;){if(0>b)return Dc;if(a)(10===b||13===b)&&(a=!1);else if(37===b)a=!0;else if(1!==e[b])break;b=this.nextChar()}switch(0|b){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return this.getNumber();case 40:return this.getString();case 47:return this.getName();case 91:return this.nextChar(),za.get("[");case 93:return this.nextChar(),za.get("]");case 60:return b=this.nextChar(),60===b?(this.nextChar(),za.get("<<")):this.getHexString();case 62:return b=this.nextChar(),62===b?(this.nextChar(),za.get(">>")):za.get(">");case 123:return this.nextChar(),za.get("{");case 125:return this.nextChar(),za.get("}");case 41:c("Illegal character: "+b)}for(var d=String.fromCharCode(b),f=this.knownCommands,g=f&&void 0!==f[d];(b=this.nextChar())>=0&&!e[b];){var h=d+String.fromCharCode(b);if(g&&void 0===f[h])break;128===d.length&&c("Command token too long: "+d.length),d=h,g=f&&void 0!==f[d]}return"true"===d?!0:"false"===d?!1:"null"===d?null:za.get(d)},skipToNextLine:function(){for(var a=this.currentChar;a>=0;){if(13===a){a=this.nextChar(),10===a&&this.nextChar();break}if(10===a){this.nextChar();break}a=this.nextChar()}}},a}(),Hc={create:function(a){function b(a,b){var c=j.get(a);if(w(c)&&(b?c>=0:c>0))return c;throw new Error('The "'+a+'" parameter in the linearization dictionary is invalid.')}function c(){var a,b,c=j.get("H");if(C(c)&&(2===(a=c.length)||4===a)){for(var d=0;a>d;d++)if(!(w(b=c[d])&&b>0))throw new Error("Hint ("+d+") in the linearization dictionary is invalid.");return c}throw new Error("Hint array in the linearization dictionary is invalid.")}var d,e,f=new Fc(new Gc(a),!1,null),g=f.getObj(),h=f.getObj(),i=f.getObj(),j=f.getObj();if(!(w(g)&&w(h)&&A(i,"obj")&&B(j)&&x(d=j.get("Linearized"))&&d>0))return null;if((e=b("L"))!==a.length)throw new Error('The "L" parameter in the linearization dictionary does not equal the stream length.');return{length:e,hints:c(),objectNumberFirst:b("O"),endFirst:b("E"),numPages:b("N"),mainXRefEntriesOffset:b("T"),pageFirst:j.has("P")?b("P",!0):0}}},Ic=function(){function a(a){this.lexer=a,this.operators=[],this.token=null,this.prev=null}return a.prototype={nextToken:function(){this.prev=this.token,this.token=this.lexer.getToken()},accept:function(a){return this.token.type===a?(this.nextToken(),!0):!1},expect:function(a){return this.accept(a)?!0:void c("Unexpected symbol: found "+this.token.type+" expected "+a+".")},parse:function(){return this.nextToken(),this.expect(Jc.LBRACE),this.parseBlock(),this.expect(Jc.RBRACE),this.operators},parseBlock:function(){for(;;)if(this.accept(Jc.NUMBER))this.operators.push(this.prev.value);else if(this.accept(Jc.OPERATOR))this.operators.push(this.prev.value);else{if(!this.accept(Jc.LBRACE))return;this.parseCondition()}},parseCondition:function(){var a=this.operators.length;if(this.operators.push(null,null),this.parseBlock(),this.expect(Jc.RBRACE),this.accept(Jc.IF))this.operators[a]=this.operators.length,this.operators[a+1]="jz";else if(this.accept(Jc.LBRACE)){var b=this.operators.length;this.operators.push(null,null);var d=this.operators.length;this.parseBlock(),this.expect(Jc.RBRACE),this.expect(Jc.IFELSE),this.operators[b]=this.operators.length,this.operators[b+1]="j",this.operators[a]=d,this.operators[a+1]="jz"}else c("PS Function: error parsing conditional.")}},a}(),Jc={LBRACE:0,RBRACE:1,NUMBER:2,OPERATOR:3,IF:4,IFELSE:5},Kc=function(){function a(a,b){this.type=a,this.value=b}var b={};return a.getOperator=function(c){var d=b[c];return d?d:b[c]=new a(Jc.OPERATOR,c)},a.LBRACE=new a(Jc.LBRACE,"{"),a.RBRACE=new a(Jc.RBRACE,"}"),a.IF=new a(Jc.IF,"IF"),a.IFELSE=new a(Jc.IFELSE,"IFELSE"),a}(),Lc=function(){function a(a){this.stream=a,this.nextChar(),this.strBuf=[]}return a.prototype={nextChar:function(){return this.currentChar=this.stream.getByte()},getToken:function(){for(var a=!1,b=this.currentChar;;){if(0>b)return Dc;if(a)(10===b||13===b)&&(a=!1);else if(37===b)a=!0;else if(!Gc.isSpace(b))break;b=this.nextChar()}switch(0|b){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return new Kc(Jc.NUMBER,this.getNumber());case 123:return this.nextChar(),Kc.LBRACE;case 125:return this.nextChar(),Kc.RBRACE}var c=this.strBuf;for(c.length=0,c[0]=String.fromCharCode(b);(b=this.nextChar())>=0&&(b>=65&&90>=b||b>=97&&122>=b);)c.push(String.fromCharCode(b));var d=c.join("");switch(d.toLowerCase()){case"if":return Kc.IF;case"ifelse":return Kc.IFELSE;default:return Kc.getOperator(d)}},getNumber:function(){var a=this.currentChar,b=this.strBuf;for(b.length=0,b[0]=String.fromCharCode(a);(a=this.nextChar())>=0&&(a>=48&&57>=a||45===a||46===a);)b.push(String.fromCharCode(a));var d=parseFloat(b.join(""));return isNaN(d)&&c("Invalid floating point number: "+d),d}},a}(),Mc=function(){function a(a,b,c,d){this.bytes=a instanceof Uint8Array?a:new Uint8Array(a),this.start=b||0,this.pos=this.start,this.end=b+c||this.bytes.length,this.dict=d}return a.prototype={get length(){return this.end-this.start},get isEmpty(){return 0===this.length},getByte:function(){return this.pos>=this.end?-1:this.bytes[this.pos++]},getUint16:function(){var a=this.getByte(),b=this.getByte();return-1===a||-1===b?-1:(a<<8)+b},getInt32:function(){var a=this.getByte(),b=this.getByte(),c=this.getByte(),d=this.getByte();return(a<<24)+(b<<16)+(c<<8)+d},getBytes:function(a){var b=this.bytes,c=this.pos,d=this.end;if(!a)return b.subarray(c,d);var e=c+a;return e>d&&(e=d),this.pos=e,b.subarray(c,e)},peekByte:function(){var a=this.getByte();return this.pos--,a},peekBytes:function(a){var b=this.getBytes(a);return this.pos-=b.length,b},skip:function(a){a||(a=1),this.pos+=a},reset:function(){this.pos=this.start},moveStart:function(){this.start=this.pos},makeSubStream:function(b,c,d){return new a(this.bytes.buffer,b,c,d)},isStream:!0},a}(),Nc=function(){function a(a){for(var b=a.length,c=new Uint8Array(b),d=0;b>d;++d)c[d]=a.charCodeAt(d);Mc.call(this,c)}return a.prototype=Mc.prototype,a}(),Oc=function(){function a(a){if(this.pos=0,this.bufferLength=0,this.eof=!1,this.buffer=b,this.minBufferLength=512,a)for(;this.minBufferLength<a;)this.minBufferLength*=2}var b=new Uint8Array(0);return a.prototype={get isEmpty(){for(;!this.eof&&0===this.bufferLength;)this.readBlock();return 0===this.bufferLength},ensureBuffer:function(a){var b=this.buffer;if(a<=b.byteLength)return b;for(var c=this.minBufferLength;a>c;)c*=2;var d=new Uint8Array(c);return d.set(b),this.buffer=d},getByte:function(){for(var a=this.pos;this.bufferLength<=a;){if(this.eof)return-1;this.readBlock()}return this.buffer[this.pos++]},getUint16:function(){var a=this.getByte(),b=this.getByte();return-1===a||-1===b?-1:(a<<8)+b},getInt32:function(){var a=this.getByte(),b=this.getByte(),c=this.getByte(),d=this.getByte();return(a<<24)+(b<<16)+(c<<8)+d},getBytes:function(a){var b,c=this.pos;if(a){for(this.ensureBuffer(c+a),b=c+a;!this.eof&&this.bufferLength<b;)this.readBlock();var d=this.bufferLength;b>d&&(b=d)}else{for(;!this.eof;)this.readBlock();b=this.bufferLength}return this.pos=b,this.buffer.subarray(c,b)},peekByte:function(){var a=this.getByte();return this.pos--,a},peekBytes:function(a){var b=this.getBytes(a);return this.pos-=b.length,b},makeSubStream:function(a,b,c){for(var d=a+b;this.bufferLength<=d&&!this.eof;)this.readBlock();return new Mc(this.buffer,a,b,c)},skip:function(a){a||(a=1),this.pos+=a},reset:function(){this.pos=0},getBaseStreams:function(){return this.str&&this.str.getBaseStreams?this.str.getBaseStreams():[]}},a}(),Pc=function(){function a(a){this.streams=a,Oc.call(this,null)}return a.prototype=Object.create(Oc.prototype),a.prototype.readBlock=function(){var a=this.streams;if(0===a.length)return void(this.eof=!0);var b=a.shift(),c=b.getBytes(),d=this.bufferLength,e=d+c.length,f=this.ensureBuffer(e);f.set(c,d),this.bufferLength=e},a.prototype.getBaseStreams=function(){for(var a=[],b=0,c=this.streams.length;c>b;b++){var d=this.streams[b];d.getBaseStreams&&na.appendToArray(a,d.getBaseStreams())}return a},a}(),Qc=function(){function a(a,b){this.str=a,this.dict=a.dict;var d=a.getByte(),e=a.getByte();(-1===d||-1===e)&&c("Invalid header in flate stream: "+d+", "+e),8!==(15&d)&&c("Unknown compression method in flate stream: "+d+", "+e),((d<<8)+e)%31!==0&&c("Bad FCHECK in flate stream: "+d+", "+e),32&e&&c("FDICT bit set in flate stream: "+d+", "+e),this.codeSize=0,this.codeBuf=0,Oc.call(this,b)}var b=new Int32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),d=new Int32Array([3,4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843,327875,327907,258,258,258]),e=new Int32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,459009,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]),f=[new Int32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59e4,524296,524424,524360,590064,459010,524372,524308,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,590040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,524326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,524366,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,524381,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,524339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,524399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,524416,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,459009,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9],g=[new Int32Array([327680,327696,327688,327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5];
+return a.prototype=Object.create(Oc.prototype),a.prototype.getBits=function(a){for(var b,d=this.str,e=this.codeSize,f=this.codeBuf;a>e;)-1===(b=d.getByte())&&c("Bad encoding in flate stream"),f|=b<<e,e+=8;return b=f&(1<<a)-1,this.codeBuf=f>>a,this.codeSize=e-=a,b},a.prototype.getCode=function(a){for(var b,d=this.str,e=a[0],f=a[1],g=this.codeSize,h=this.codeBuf;f>g&&-1!==(b=d.getByte());)h|=b<<g,g+=8;var i=e[h&(1<<f)-1],j=i>>16,k=65535&i;return(1>j||j>g)&&c("Bad encoding in flate stream"),this.codeBuf=h>>j,this.codeSize=g-j,k},a.prototype.generateHuffmanTable=function(a){var b,c=a.length,d=0;for(b=0;c>b;++b)a[b]>d&&(d=a[b]);for(var e=1<<d,f=new Int32Array(e),g=1,h=0,i=2;d>=g;++g,h<<=1,i<<=1)for(var j=0;c>j;++j)if(a[j]===g){var k=0,l=h;for(b=0;g>b;++b)k=k<<1|1&l,l>>=1;for(b=k;e>b;b+=i)f[b]=g<<16|j;++h}return[f,d]},a.prototype.readBlock=function(){var a,h,i=this.str,j=this.getBits(3);if(1&j&&(this.eof=!0),j>>=1,0!==j){var k,l;if(1===j)k=f,l=g;else if(2===j){var m,n=this.getBits(5)+257,o=this.getBits(5)+1,p=this.getBits(4)+4,q=new Uint8Array(b.length);for(m=0;p>m;++m)q[b[m]]=this.getBits(3);var r=this.generateHuffmanTable(q);h=0,m=0;for(var s,t,u,v=n+o,w=new Uint8Array(v);v>m;){var x=this.getCode(r);if(16===x)s=2,t=3,u=h;else if(17===x)s=3,t=3,u=h=0;else{if(18!==x){w[m++]=h=x;continue}s=7,t=11,u=h=0}for(var y=this.getBits(s)+t;y-- >0;)w[m++]=u}k=this.generateHuffmanTable(w.subarray(0,n)),l=this.generateHuffmanTable(w.subarray(n,v))}else c("Unknown block type in flate stream");a=this.buffer;for(var z=a?a.length:0,A=this.bufferLength;;){var B=this.getCode(k);if(256>B)A+1>=z&&(a=this.ensureBuffer(A+1),z=a.length),a[A++]=B;else{if(256===B)return void(this.bufferLength=A);B-=257,B=d[B];var C=B>>16;C>0&&(C=this.getBits(C)),h=(65535&B)+C,B=this.getCode(l),B=e[B],C=B>>16,C>0&&(C=this.getBits(C));var D=(65535&B)+C;A+h>=z&&(a=this.ensureBuffer(A+h),z=a.length);for(var E=0;h>E;++E,++A)a[A]=a[A-D]}}}else{var F;-1===(F=i.getByte())&&c("Bad block header in flate stream");var G=F;-1===(F=i.getByte())&&c("Bad block header in flate stream"),G|=F<<8,-1===(F=i.getByte())&&c("Bad block header in flate stream");var H=F;-1===(F=i.getByte())&&c("Bad block header in flate stream"),H|=F<<8,H===(65535&~G)||0===G&&0===H||c("Bad uncompressed block length in flate stream"),this.codeBuf=0,this.codeSize=0;var I=this.bufferLength;a=this.ensureBuffer(I+G);var J=I+G;if(this.bufferLength=J,0===G)-1===i.peekByte()&&(this.eof=!0);else for(var K=I;J>K;++K){if(-1===(F=i.getByte())){this.eof=!0;break}a[K]=F}}},a}(),Rc=function(){function a(a,b,d){var e=this.predictor=d.get("Predictor")||1;if(1>=e)return a;2!==e&&(10>e||e>15)&&c("Unsupported predictor: "+e),2===e?this.readBlock=this.readBlockTiff:this.readBlock=this.readBlockPng,this.str=a,this.dict=a.dict;var f=this.colors=d.get("Colors")||1,g=this.bits=d.get("BitsPerComponent")||8,h=this.columns=d.get("Columns")||1;return this.pixBytes=f*g+7>>3,this.rowBytes=h*f*g+7>>3,Oc.call(this,b),this}return a.prototype=Object.create(Oc.prototype),a.prototype.readBlockTiff=function(){var a=this.rowBytes,b=this.bufferLength,c=this.ensureBuffer(b+a),d=this.bits,e=this.colors,f=this.str.getBytes(a);if(this.eof=!f.length,!this.eof){var g,h=0,i=0,j=0,k=0,l=b;if(1===d)for(g=0;a>g;++g){var m=f[g];h=h<<8|m,c[l++]=255&(m^h>>e),h&=65535}else if(8===d){for(g=0;e>g;++g)c[l++]=f[g];for(;a>g;++g)c[l]=c[l-e]+f[g],l++}else{var n=new Uint8Array(e+1),o=(1<<d)-1,p=0,q=b,r=this.columns;for(g=0;r>g;++g)for(var s=0;e>s;++s)d>j&&(h=h<<8|255&f[p++],j+=8),n[s]=n[s]+(h>>j-d)&o,j-=d,i=i<<d|n[s],k+=d,k>=8&&(c[q++]=i>>k-8&255,k-=8);k>0&&(c[q++]=(i<<8-k)+(h&(1<<8-k)-1))}this.bufferLength+=a}},a.prototype.readBlockPng=function(){var a=this.rowBytes,b=this.pixBytes,d=this.str.getByte(),e=this.str.getBytes(a);if(this.eof=!e.length,!this.eof){var f=this.bufferLength,g=this.ensureBuffer(f+a),h=g.subarray(f-a,f);0===h.length&&(h=new Uint8Array(a));var i,j,k,l=f;switch(d){case 0:for(i=0;a>i;++i)g[l++]=e[i];break;case 1:for(i=0;b>i;++i)g[l++]=e[i];for(;a>i;++i)g[l]=g[l-b]+e[i]&255,l++;break;case 2:for(i=0;a>i;++i)g[l++]=h[i]+e[i]&255;break;case 3:for(i=0;b>i;++i)g[l++]=(h[i]>>1)+e[i];for(;a>i;++i)g[l]=(h[i]+g[l-b]>>1)+e[i]&255,l++;break;case 4:for(i=0;b>i;++i)j=h[i],k=e[i],g[l++]=j+k;for(;a>i;++i){j=h[i];var m=h[i-b],n=g[l-b],o=n+j-m,p=o-n;0>p&&(p=-p);var q=o-j;0>q&&(q=-q);var r=o-m;0>r&&(r=-r),k=e[i],q>=p&&r>=p?g[l++]=n+k:r>=q?g[l++]=j+k:g[l++]=m+k}break;default:c("Unsupported predictor: "+d)}this.bufferLength+=a}},a}(),Sc=function(){function a(a,b,c,d){for(var e;-1!==(e=a.getByte());)if(255===e){a.skip(-1);break}this.stream=a,this.maybeLength=b,this.dict=c,Oc.call(this,b)}return a.prototype=Object.create(Oc.prototype),Object.defineProperty(a.prototype,"bytes",{get:function(){return g(this,"bytes",this.stream.getBytes(this.maybeLength))},configurable:!0}),a.prototype.ensureBuffer=function(a){if(!this.bufferLength)try{var b=new gd;if(this.forceRGB&&this.dict&&C(this.dict.get("Decode"))){for(var d=this.dict.get("Decode"),e=this.dict.get("BitsPerComponent")||8,f=d.length,g=new Int32Array(f),h=!1,i=(1<<e)-1,j=0;f>j;j+=2)g[j]=256*(d[j+1]-d[j])|0,g[j+1]=d[j]*i|0,(256!==g[j]||0!==g[j+1])&&(h=!0);h&&(b.decodeTransform=g)}b.parse(this.bytes);var k=b.getData(this.drawWidth,this.drawHeight,this.forceRGB);this.buffer=k,this.bufferLength=k.length,this.eof=!0}catch(l){c("JPEG error: "+l)}},a.prototype.getBytes=function(a){return this.ensureBuffer(),this.buffer},a.prototype.getIR=function(){return PDFJS.createObjectURL(this.bytes,"image/jpeg")},a.prototype.isNativelySupported=function(a,b){var c=Xa.parse(this.dict.get("ColorSpace","CS"),a,b);return("DeviceGray"===c.name||"DeviceRGB"===c.name)&&c.isDefaultDecode(this.dict.get("Decode","D"))},a.prototype.isNativelyDecodable=function(a,b){var c=Xa.parse(this.dict.get("ColorSpace","CS"),a,b);return(1===c.numComps||3===c.numComps)&&c.isDefaultDecode(this.dict.get("Decode","D"))},a}(),Tc=function(){function a(a,b,c){this.stream=a,this.maybeLength=b,this.dict=c,Oc.call(this,b)}return a.prototype=Object.create(Oc.prototype),Object.defineProperty(a.prototype,"bytes",{get:function(){return g(this,"bytes",this.stream.getBytes(this.maybeLength))},configurable:!0}),a.prototype.ensureBuffer=function(a){if(!this.bufferLength){var b=new hd;b.parse(this.bytes);var c=b.width,d=b.height,e=b.componentsCount,f=b.tiles.length;if(1===f)this.buffer=b.tiles[0].items;else{for(var g=new Uint8Array(c*d*e),h=0;f>h;h++)for(var i=b.tiles[h],j=i.width,k=i.height,l=i.left,m=i.top,n=i.items,o=0,p=(c*m+l)*e,q=c*e,r=j*e,s=0;k>s;s++){var t=n.subarray(o,o+r);g.set(t,p),o+=r,p+=q}this.buffer=g}this.bufferLength=this.buffer.length,this.eof=!0}},a}(),Uc=function(){function a(a,b,c){this.stream=a,this.maybeLength=b,this.dict=c,Oc.call(this,b)}return a.prototype=Object.create(Oc.prototype),Object.defineProperty(a.prototype,"bytes",{get:function(){return g(this,"bytes",this.stream.getBytes(this.maybeLength))},configurable:!0}),a.prototype.ensureBuffer=function(a){if(!this.bufferLength){var c=new id,d=[],e=this.dict.xref,f=e.fetchIfRef(this.dict.get("DecodeParms"));if(C(f)&&(f.length>1&&b("JBIG2 - 'DecodeParms' array with multiple elements not supported."),f=e.fetchIfRef(f[0])),f&&f.has("JBIG2Globals")){var g=f.get("JBIG2Globals"),h=g.getBytes();d.push({data:h,start:0,end:h.length})}d.push({data:this.bytes,start:0,end:this.bytes.length});for(var i=c.parseChunks(d),j=i.length,k=0;j>k;k++)i[k]^=255;this.buffer=i,this.bufferLength=j,this.eof=!0}},a}(),Vc=function(){function a(a,b,c){this.str=a,this.dict=a.dict,this.decrypt=c,this.nextChunk=null,this.initialized=!1,Oc.call(this,b)}var b=512;return a.prototype=Object.create(Oc.prototype),a.prototype.readBlock=function(){var a;if(this.initialized?a=this.nextChunk:(a=this.str.getBytes(b),this.initialized=!0),!a||0===a.length)return void(this.eof=!0);this.nextChunk=this.str.getBytes(b);var c=this.nextChunk&&this.nextChunk.length>0,d=this.decrypt;a=d(a,!c);var e,f=this.bufferLength,g=a.length,h=this.ensureBuffer(f+g);for(e=0;g>e;e++)h[f++]=a[e];this.bufferLength=f},a}(),Wc=function(){function a(a,b){this.str=a,this.dict=a.dict,this.input=new Uint8Array(5),b&&(b=.8*b),Oc.call(this,b)}return a.prototype=Object.create(Oc.prototype),a.prototype.readBlock=function(){for(var a=126,b=122,c=-1,d=this.str,e=d.getByte();Gc.isSpace(e);)e=d.getByte();if(e===c||e===a)return void(this.eof=!0);var f,g,h=this.bufferLength;if(e===b){for(f=this.ensureBuffer(h+4),g=0;4>g;++g)f[h+g]=0;this.bufferLength+=4}else{var i=this.input;for(i[0]=e,g=1;5>g;++g){for(e=d.getByte();Gc.isSpace(e);)e=d.getByte();if(i[g]=e,e===c||e===a)break}if(f=this.ensureBuffer(h+g-1),this.bufferLength+=g-1,5>g){for(;5>g;++g)i[g]=117;this.eof=!0}var j=0;for(g=0;5>g;++g)j=85*j+(i[g]-33);for(g=3;g>=0;--g)f[h+g]=255&j,j>>=8}},a}(),Xc=function(){function a(a,b){this.str=a,this.dict=a.dict,this.firstDigit=-1,b&&(b=.5*b),Oc.call(this,b)}return a.prototype=Object.create(Oc.prototype),a.prototype.readBlock=function(){var a=8e3,b=this.str.getBytes(a);if(!b.length)return void(this.eof=!0);for(var c=b.length+1>>1,d=this.ensureBuffer(this.bufferLength+c),e=this.bufferLength,f=this.firstDigit,g=0,h=b.length;h>g;g++){var i,j=b[g];if(j>=48&&57>=j)i=15&j;else{if(!(j>=65&&70>=j||j>=97&&102>=j)){if(62===j){this.eof=!0;break}continue}i=(15&j)+9}0>f?f=i:(d[e++]=f<<4|i,f=-1)}f>=0&&this.eof&&(d[e++]=f<<4,f=-1),this.firstDigit=f,this.bufferLength=e},a}(),Yc=function(){function a(a,b){this.str=a,this.dict=a.dict,Oc.call(this,b)}return a.prototype=Object.create(Oc.prototype),a.prototype.readBlock=function(){var a=this.str.getBytes(2);if(!a||a.length<2||128===a[0])return void(this.eof=!0);var b,c=this.bufferLength,d=a[0];if(128>d){if(b=this.ensureBuffer(c+d+1),b[c++]=a[1],d>0){var e=this.str.getBytes(d);b.set(e,c),c+=d}}else{d=257-d;var f=a[1];b=this.ensureBuffer(c+d+1);for(var g=0;d>g;g++)b[c++]=f}this.bufferLength=c},a}(),Zc=function(){function b(a,b,c){this.str=a,this.dict=a.dict,c=c||Aa.empty,this.encoding=c.get("K")||0,this.eoline=c.get("EndOfLine")||!1,this.byteAlign=c.get("EncodedByteAlign")||!1,this.columns=c.get("Columns")||1728,this.rows=c.get("Rows")||0;var d=c.get("EndOfBlock");(null===d||void 0===d)&&(d=!0),this.eoblock=d,this.black=c.get("BlackIs1")||!1,this.codingLine=new Uint32Array(this.columns+1),this.refLine=new Uint32Array(this.columns+2),this.codingLine[0]=this.columns,this.codingPos=0,this.row=0,this.nextLine2D=this.encoding<0,this.inputBits=0,this.inputBuf=0,this.outputBits=0;for(var e;0===(e=this.lookBits(12));)this.eatBits(1);1===e&&this.eatBits(12),this.encoding>0&&(this.nextLine2D=!this.lookBits(1),this.eatBits(1)),Oc.call(this,b)}var c=-2,d=0,e=1,f=2,g=3,h=4,i=5,j=6,k=7,l=8,m=[[-1,-1],[-1,-1],[7,l],[7,k],[6,j],[6,j],[6,i],[6,i],[4,d],[4,d],[4,d],[4,d],[4,d],[4,d],[4,d],[4,d],[3,e],[3,e],[3,e],[3,e],[3,e],[3,e],[3,e],[3,e],[3,e],[3,e],[3,e],[3,e],[3,e],[3,e],[3,e],[3,e],[3,h],[3,h],[3,h],[3,h],[3,h],[3,h],[3,h],[3,h],[3,h],[3,h],[3,h],[3,h],[3,h],[3,h],[3,h],[3,h],[3,g],[3,g],[3,g],[3,g],[3,g],[3,g],[3,g],[3,g],[3,g],[3,g],[3,g],[3,g],[3,g],[3,g],[3,g],[3,g],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f],[1,f]],n=[[-1,-1],[12,c],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[12,1984],[12,2048],[12,2112],[12,2176],[12,2240],[12,2304],[11,1856],[11,1856],[11,1920],[11,1920],[12,2368],[12,2432],[12,2496],[12,2560]],o=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[8,29],[8,29],[8,30],[8,30],[8,45],[8,45],[8,46],[8,46],[7,22],[7,22],[7,22],[7,22],[7,23],[7,23],[7,23],[7,23],[8,47],[8,47],[8,48],[8,48],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[7,20],[7,20],[7,20],[7,20],[8,33],[8,33],[8,34],[8,34],[8,35],[8,35],[8,36],[8,36],[8,37],[8,37],[8,38],[8,38],[7,19],[7,19],[7,19],[7,19],[8,31],[8,31],[8,32],[8,32],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[8,53],[8,53],[8,54],[8,54],[7,26],[7,26],[7,26],[7,26],[8,39],[8,39],[8,40],[8,40],[8,41],[8,41],[8,42],[8,42],[8,43],[8,43],[8,44],[8,44],[7,21],[7,21],[7,21],[7,21],[7,28],[7,28],[7,28],[7,28],[8,61],[8,61],[8,62],[8,62],[8,63],[8,63],[8,0],[8,0],[8,320],[8,320],[8,384],[8,384],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[7,27],[7,27],[7,27],[7,27],[8,59],[8,59],[8,60],[8,60],[9,1472],[9,1536],[9,1600],[9,1728],[7,18],[7,18],[7,18],[7,18],[7,24],[7,24],[7,24],[7,24],[8,49],[8,49],[8,50],[8,50],[8,51],[8,51],[8,52],[8,52],[7,25],[7,25],[7,25],[7,25],[8,55],[8,55],[8,56],[8,56],[8,57],[8,57],[8,58],[8,58],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[8,448],[8,448],[8,512],[8,512],[9,704],[9,768],[8,640],[8,640],[8,576],[8,576],[9,832],[9,896],[9,960],[9,1024],[9,1088],[9,1152],[9,1216],[9,1280],[9,1344],[9,1408],[7,256],[7,256],[7,256],[7,256],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7]],p=[[-1,-1],[-1,-1],[12,c],[12,c],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[11,1792],[11,1792],[12,1984],[12,1984],[12,2048],[12,2048],[12,2112],[12,2112],[12,2176],[12,2176],[12,2240],[12,2240],[12,2304],[12,2304],[11,1856],[11,1856],[11,1856],[11,1856],[11,1920],[11,1920],[11,1920],[11,1920],[12,2368],[12,2368],[12,2432],[12,2432],[12,2496],[12,2496],[12,2560],[12,2560],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[12,52],[12,52],[13,640],[13,704],[13,768],[13,832],[12,55],[12,55],[12,56],[12,56],[13,1280],[13,1344],[13,1408],[13,1472],[12,59],[12,59],[12,60],[12,60],[13,1536],[13,1600],[11,24],[11,24],[11,24],[11,24],[11,25],[11,25],[11,25],[11,25],[13,1664],[13,1728],[12,320],[12,320],[12,384],[12,384],[12,448],[12,448],[13,512],[13,576],[12,53],[12,53],[12,54],[12,54],[13,896],[13,960],[13,1024],[13,1088],[13,1152],[13,1216],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64]],q=[[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[11,23],[11,23],[12,50],[12,51],[12,44],[12,45],[12,46],[12,47],[12,57],[12,58],[12,61],[12,256],[10,16],[10,16],[10,16],[10,16],[10,17],[10,17],[10,17],[10,17],[12,48],[12,49],[12,62],[12,63],[12,30],[12,31],[12,32],[12,33],[12,40],[12,41],[11,22],[11,22],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[12,128],[12,192],[12,26],[12,27],[12,28],[12,29],[11,19],[11,19],[11,20],[11,20],[12,34],[12,35],[12,36],[12,37],[12,38],[12,39],[11,21],[11,21],[12,42],[12,43],[10,0],[10,0],[10,0],[10,0],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12]],r=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[6,9],[6,8],[5,7],[5,7],[4,6],[4,6],[4,6],[4,6],[4,5],[4,5],[4,5],[4,5],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2]];return b.prototype=Object.create(Oc.prototype),b.prototype.readBlock=function(){for(;!this.eof;){var a=this.lookChar();this.ensureBuffer(this.bufferLength+1),this.buffer[this.bufferLength++]=a}},b.prototype.addPixels=function(b,c){var d=this.codingLine,e=this.codingPos;b>d[e]&&(b>this.columns&&(a("row is wrong length"),this.err=!0,b=this.columns),1&e^c&&++e,d[e]=b),this.codingPos=e},b.prototype.addPixelsNeg=function(b,c){var d=this.codingLine,e=this.codingPos;if(b>d[e])b>this.columns&&(a("row is wrong length"),this.err=!0,b=this.columns),1&e^c&&++e,d[e]=b;else if(b<d[e]){for(0>b&&(a("invalid code"),this.err=!0,b=0);e>0&&b<d[e-1];)--e;d[e]=b}this.codingPos=e},b.prototype.lookChar=function(){var b,c,m,n,o=this.refLine,p=this.codingLine,q=this.columns;if(0===this.outputBits){if(this.eof)return null;this.err=!1;var r,s,t;if(this.nextLine2D){for(n=0;p[n]<q;++n)o[n]=p[n];for(o[n++]=q,o[n]=q,p[0]=0,this.codingPos=0,b=0,c=0;p[this.codingPos]<q;)switch(r=this.getTwoDimCode()){case d:this.addPixels(o[b+1],c),o[b+1]<q&&(b+=2);break;case e:if(r=s=0,c){do r+=t=this.getBlackCode();while(t>=64);do s+=t=this.getWhiteCode();while(t>=64)}else{do r+=t=this.getWhiteCode();while(t>=64);do s+=t=this.getBlackCode();while(t>=64)}for(this.addPixels(p[this.codingPos]+r,c),p[this.codingPos]<q&&this.addPixels(p[this.codingPos]+s,1^c);o[b]<=p[this.codingPos]&&o[b]<q;)b+=2;break;case k:if(this.addPixels(o[b]+3,c),c^=1,p[this.codingPos]<q)for(++b;o[b]<=p[this.codingPos]&&o[b]<q;)b+=2;break;case i:if(this.addPixels(o[b]+2,c),c^=1,p[this.codingPos]<q)for(++b;o[b]<=p[this.codingPos]&&o[b]<q;)b+=2;break;case g:if(this.addPixels(o[b]+1,c),c^=1,p[this.codingPos]<q)for(++b;o[b]<=p[this.codingPos]&&o[b]<q;)b+=2;break;case f:if(this.addPixels(o[b],c),c^=1,p[this.codingPos]<q)for(++b;o[b]<=p[this.codingPos]&&o[b]<q;)b+=2;break;case l:if(this.addPixelsNeg(o[b]-3,c),c^=1,p[this.codingPos]<q)for(b>0?--b:++b;o[b]<=p[this.codingPos]&&o[b]<q;)b+=2;break;case j:if(this.addPixelsNeg(o[b]-2,c),c^=1,p[this.codingPos]<q)for(b>0?--b:++b;o[b]<=p[this.codingPos]&&o[b]<q;)b+=2;break;case h:if(this.addPixelsNeg(o[b]-1,c),c^=1,p[this.codingPos]<q)for(b>0?--b:++b;o[b]<=p[this.codingPos]&&o[b]<q;)b+=2;break;case Dc:this.addPixels(q,0),this.eof=!0;break;default:a("bad 2d code"),this.addPixels(q,0),this.err=!0}}else for(p[0]=0,this.codingPos=0,c=0;p[this.codingPos]<q;){if(r=0,c){do r+=t=this.getBlackCode();while(t>=64)}else do r+=t=this.getWhiteCode();while(t>=64);this.addPixels(p[this.codingPos]+r,c),c^=1}var u=!1;if(this.byteAlign&&(this.inputBits&=-8),this.eoblock||this.row!==this.rows-1){if(r=this.lookBits(12),this.eoline)for(;r!==Dc&&1!==r;)this.eatBits(1),r=this.lookBits(12);else for(;0===r;)this.eatBits(1),r=this.lookBits(12);1===r?(this.eatBits(12),u=!0):r===Dc&&(this.eof=!0)}else this.eof=!0;if(!this.eof&&this.encoding>0&&(this.nextLine2D=!this.lookBits(1),this.eatBits(1)),this.eoblock&&u&&this.byteAlign){if(r=this.lookBits(12),1===r){if(this.eatBits(12),this.encoding>0&&(this.lookBits(1),this.eatBits(1)),this.encoding>=0)for(n=0;4>n;++n)r=this.lookBits(12),1!==r&&a("bad rtc code: "+r),this.eatBits(12),this.encoding>0&&(this.lookBits(1),this.eatBits(1));this.eof=!0}}else if(this.err&&this.eoline){for(;;){if(r=this.lookBits(13),r===Dc)return this.eof=!0,null;if(r>>1===1)break;this.eatBits(1)}this.eatBits(12),this.encoding>0&&(this.eatBits(1),this.nextLine2D=!(1&r))}p[0]>0?this.outputBits=p[this.codingPos=0]:this.outputBits=p[this.codingPos=1],this.row++}var v;if(this.outputBits>=8)v=1&this.codingPos?0:255,this.outputBits-=8,0===this.outputBits&&p[this.codingPos]<q&&(this.codingPos++,this.outputBits=p[this.codingPos]-p[this.codingPos-1]);else{m=8,v=0;do this.outputBits>m?(v<<=m,1&this.codingPos||(v|=255>>8-m),this.outputBits-=m,m=0):(v<<=this.outputBits,1&this.codingPos||(v|=255>>8-this.outputBits),m-=this.outputBits,this.outputBits=0,p[this.codingPos]<q?(this.codingPos++,this.outputBits=p[this.codingPos]-p[this.codingPos-1]):m>0&&(v<<=m,m=0));while(m)}return this.black&&(v^=255),v},b.prototype.findTableCode=function(a,b,c,d){for(var e=d||0,f=a;b>=f;++f){var g=this.lookBits(f);if(g===Dc)return[!0,1,!1];if(b>f&&(g<<=b-f),!e||g>=e){var h=c[g-e];if(h[0]===f)return this.eatBits(f),[!0,h[1],!0]}}return[!1,0,!1]},b.prototype.getTwoDimCode=function(){var b,c=0;if(this.eoblock){if(c=this.lookBits(7),b=m[c],b&&b[0]>0)return this.eatBits(b[0]),b[1]}else{var d=this.findTableCode(1,7,m);if(d[0]&&d[2])return d[1]}return a("Bad two dim code"),Dc},b.prototype.getWhiteCode=function(){var b,c=0;if(this.eoblock){if(c=this.lookBits(12),c===Dc)return 1;if(b=c>>5===0?n[c]:o[c>>3],b[0]>0)return this.eatBits(b[0]),b[1]}else{var d=this.findTableCode(1,9,o);if(d[0])return d[1];if(d=this.findTableCode(11,12,n),d[0])return d[1]}return a("bad white code"),this.eatBits(1),1},b.prototype.getBlackCode=function(){var b,c;if(this.eoblock){if(b=this.lookBits(13),b===Dc)return 1;if(c=b>>7===0?p[b]:b>>9===0&&b>>7!==0?q[(b>>1)-64]:r[b>>7],c[0]>0)return this.eatBits(c[0]),c[1]}else{var d=this.findTableCode(2,6,r);if(d[0])return d[1];if(d=this.findTableCode(7,12,q,64),d[0])return d[1];if(d=this.findTableCode(10,13,p),d[0])return d[1]}return a("bad black code"),this.eatBits(1),1},b.prototype.lookBits=function(a){for(var b;this.inputBits<a;){if(-1===(b=this.str.getByte()))return 0===this.inputBits?Dc:this.inputBuf<<a-this.inputBits&65535>>16-a;this.inputBuf=(this.inputBuf<<8)+b,this.inputBits+=8}return this.inputBuf>>this.inputBits-a&65535>>16-a},b.prototype.eatBits=function(a){(this.inputBits-=a)<0&&(this.inputBits=0)},b}(),$c=function(){function a(a,b,c){this.str=a,this.dict=a.dict,this.cachedData=0,this.bitsCached=0;for(var d=4096,e={earlyChange:c,codeLength:9,nextCode:258,dictionaryValues:new Uint8Array(d),dictionaryLengths:new Uint16Array(d),dictionaryPrevCodes:new Uint16Array(d),currentSequence:new Uint8Array(d),currentSequenceLength:0},f=0;256>f;++f)e.dictionaryValues[f]=f,e.dictionaryLengths[f]=1;this.lzwState=e,Oc.call(this,b)}return a.prototype=Object.create(Oc.prototype),a.prototype.readBits=function(a){for(var b=this.bitsCached,c=this.cachedData;a>b;){var d=this.str.getByte();if(-1===d)return this.eof=!0,null;c=c<<8|d,b+=8}return this.bitsCached=b-=a,this.cachedData=c,this.lastCode=null,c>>>b&(1<<a)-1},a.prototype.readBlock=function(){var a,b,c,d=512,e=2*d,f=d,g=this.lzwState;if(g){var h=g.earlyChange,i=g.nextCode,j=g.dictionaryValues,k=g.dictionaryLengths,l=g.dictionaryPrevCodes,m=g.codeLength,n=g.prevCode,o=g.currentSequence,p=g.currentSequenceLength,q=0,r=this.bufferLength,s=this.ensureBuffer(this.bufferLength+e);for(a=0;d>a;a++){var t=this.readBits(m),u=p>0;if(256>t)o[0]=t,p=1;else{if(!(t>=258)){if(256===t){m=9,i=258,p=0;continue}this.eof=!0,delete this.lzwState;break}if(i>t)for(p=k[t],b=p-1,c=t;b>=0;b--)o[b]=j[c],c=l[c];else o[p++]=o[0]}if(u&&(l[i]=n,k[i]=k[n]+1,j[i]=o[0],i++,m=i+h&i+h-1?m:0|Math.min(Math.log(i+h)/.6931471805599453+1,12)),n=t,q+=p,q>e){do e+=f;while(q>e);s=this.ensureBuffer(this.bufferLength+e)}for(b=0;p>b;b++)s[r++]=o[b]}g.nextCode=i,g.codeLength=m,g.prevCode=n,g.currentSequenceLength=p,this.bufferLength=r}},a}(),_c=function(){function a(){Mc.call(this,new Uint8Array(0))}return a.prototype=Mc.prototype,a}(),ad=function(){function a(a){this.name=a,this.terminated=!1,this._capability=G()}return a.prototype={get finished(){return this._capability.promise},finish:function(){this._capability.resolve()},terminate:function(){this.terminated=!0},ensureNotTerminated:function(){if(this.terminated)throw new Error("Worker task was terminated")}},a}(),bd=PDFJS.WorkerMessageHandler={setup:function(c){function d(){if(j)throw new Error("Worker was terminated")}function e(a){l.push(a)}function f(a){a.finish();var b=l.indexOf(a);l.splice(b,1)}function g(a){var b=G(),c=function(){var a=i.ensureDoc("numPages"),c=i.ensureDoc("fingerprint"),e=i.ensureXRef("encrypt");Promise.all([a,c,e]).then(function(a){var c={numPages:a[0],fingerprint:a[1],encrypted:!!a[2]};b.resolve(c)},d)},d=function(a){b.reject(a)};return i.ensureDoc("checkHeader",[]).then(function(){i.ensureDoc("parseStartXRef",[]).then(function(){i.ensureDoc("parse",[a]).then(c,d)},d)},d),b.promise}function h(a){var d,e=G(),f=a.source,g=a.disableRange;if(f.data){try{d=new ua(f.data,f.password),e.resolve(d)}catch(h){e.reject(h)}return e.promise}if(f.chunkedViewerLoading){try{d=new va(f,c),e.resolve(d)}catch(h){e.reject(h)}return e.promise}var i=new pa(f.url,{httpHeaders:f.httpHeaders,withCredentials:f.withCredentials}),j=[],l=i.requestFull({onHeadersReceived:function(){if(!g){var a=i.getRequestXhr(l);if("bytes"===a.getResponseHeader("Accept-Ranges")){var b=a.getResponseHeader("Content-Encoding")||"identity";if("identity"===b){var h=a.getResponseHeader("Content-Length");if(h=parseInt(h,10),w(h)&&(f.length=h,!(2*sa>=h))){i.isStreamingRequest(l)?f.disableAutoFetch=!0:i.abortRequest(l);try{d=new va(f,c),e.resolve(d)}catch(j){e.reject(j)}k=null}}}}},onProgressiveData:f.disableStream?null:function(a){return d?void d.sendProgressiveData(a):void j.push(a)},onDone:function(a){if(!d){var c;if(null===a){var g=0,h=0;j.forEach(function(a){g+=a.byteLength}),f.length&&g!==f.length&&b("reported HTTP length is different from actual");var i=new Uint8Array(g);j.forEach(function(a){i.set(new Uint8Array(a),h),h+=a.byteLength}),c=i.buffer}else c=a.chunk;try{d=new ua(c,f.password),e.resolve(d)}catch(l){e.reject(l)}k=null}},onError:function(a){var b;404===a?(b=new ga('Missing PDF "'+f.url+'".'),c.send("MissingPDF",b)):(b=new ha("Unexpected server response ("+a+') while retrieving PDF "'+f.url+'".',a),c.send("UnexpectedResponse",b)),k=null},onProgress:function(a){c.send("DocProgress",{loaded:a.loaded,total:a.lengthComputable?a.total:f.length})}});return k=function(){i.abortRequest(l)},e.promise}var i,j=!1,k=null,l=[];c.on("test",function(a){if(!(a instanceof Uint8Array))return void c.send("test",!1);var b=255===a[0];c.postMessageTransfers=b;var d=new XMLHttpRequest,e="response"in d;try{d.responseType}catch(f){e=!1}return e?void c.send("test",{supportTypedArray:!0,supportTransfers:b}):void c.send("test",!1)}),c.on("GetDocRequest",function(a){var b=function(a){d(),c.send("GetDoc",{pdfInfo:a})},e=function(a){a instanceof da?a.code===ca.NEED_PASSWORD?c.send("NeedPassword",a):a.code===ca.INCORRECT_PASSWORD&&c.send("IncorrectPassword",a):a instanceof fa?c.send("InvalidPDF",a):a instanceof ga?c.send("MissingPDF",a):a instanceof ha?c.send("UnexpectedResponse",a):c.send("UnknownError",new ea(a.message,a.toString()))};d(),PDFJS.maxImageSize=void 0===a.maxImageSize?-1:a.maxImageSize,PDFJS.disableFontFace=a.disableFontFace,PDFJS.disableCreateObjectURL=a.disableCreateObjectURL,PDFJS.verbosity=a.verbosity,PDFJS.cMapUrl=void 0===a.cMapUrl?null:a.cMapUrl,PDFJS.cMapPacked=a.cMapPacked===!0,h(a).then(function(a){if(j)throw a.terminate(),new Error("Worker was terminated");i=a,c.send("PDFManagerReady",null),i.onLoadedStream().then(function(a){c.send("DataLoaded",{length:a.bytes.byteLength})})}).then(function f(){d(),g(!1).then(b,function(a){return d(),a instanceof ka?(i.requestLoadedStream(),void i.onLoadedStream().then(function(){d(),g(!0).then(b,e)})):(a instanceof da&&i.passwordChanged().then(f),void e(a))},e)},e)}),c.on("GetPage",function(a){return i.getPage(a.pageIndex).then(function(a){var b=i.ensure(a,"rotate"),c=i.ensure(a,"ref"),d=i.ensure(a,"view");return Promise.all([b,c,d]).then(function(a){return{rotate:a[0],ref:a[1],view:a[2]}})})}),c.on("GetPageIndex",function(a){var b=new Ba(a.ref.num,a.ref.gen),c=i.pdfDocument.catalog;return c.getPageIndex(b)}),c.on("GetDestinations",function(a){return i.ensureCatalog("destinations")}),c.on("GetDestination",function(a){return i.ensureCatalog("getDestination",[a.id])}),c.on("GetAttachments",function(a){return i.ensureCatalog("attachments")}),c.on("GetJavaScript",function(a){return i.ensureCatalog("javaScript")}),c.on("GetOutline",function(a){return i.ensureCatalog("documentOutline")}),c.on("GetMetadata",function(a){return Promise.all([i.ensureDoc("documentInfo"),i.ensureCatalog("metadata")])}),c.on("GetData",function(a){return i.requestLoadedStream(),i.onLoadedStream().then(function(a){return a.bytes})}),c.on("GetStats",function(a){return i.pdfDocument.xref.stats}),c.on("UpdatePassword",function(a){i.updatePassword(a)}),c.on("GetAnnotations",function(a){return i.getPage(a.pageIndex).then(function(a){return i.ensure(a,"getAnnotationsData",[])})}),c.on("RenderPageRequest",function(b){var d=b.pageIndex;i.getPage(d).then(function(g){var h=new ad("RenderPageRequest: page "+d);e(h);var i=d+1,j=Date.now();g.getOperatorList(c,h,b.intent).then(function(b){f(h),a("page="+i+" - getOperatorList: time="+(Date.now()-j)+"ms, len="+b.fnArray.length)},function(a){if(f(h),!h.terminated){var d,e="worker.js: while trying to getPage() and getOperatorList()";d="string"==typeof a?{message:a,stack:e}:"object"==typeof a?{message:a.message||a.toString(),stack:a.stack||e}:{message:"Unknown exception type: "+typeof a,stack:e},c.send("PageError",{pageNum:i,error:d,intent:b.intent})}})})},this),c.on("GetTextContent",function(b){var c=b.pageIndex;return i.getPage(c).then(function(b){var d=new ad("GetTextContent: page "+c);e(d);var g=c+1,h=Date.now();return b.extractTextContent(d).then(function(b){return f(d),a("text indexing: page="+g+" - time="+(Date.now()-h)+"ms"),b},function(a){if(f(d),!d.terminated)throw a})})}),c.on("Cleanup",function(a){return i.cleanup()}),c.on("Terminate",function(a){j=!0,i&&(i.terminate(),i=null),k&&k();var b=[];return l.forEach(function(a){b.push(a.finished),a.terminate()}),Promise.all(b).then(function(){})})}},cd={},dd={log:function(){var a=Array.prototype.slice.call(arguments);S.postMessage({action:"console_log",data:a})},error:function(){var a=Array.prototype.slice.call(arguments);throw S.postMessage({action:"console_error",data:a}),"pdf.js execution error"},time:function(a){cd[a]=Date.now()},timeEnd:function(a){var b=cd[a];b||c("Unknown timer name "+a),this.log("Timer:",a,Date.now()-b)}};if("undefined"==typeof window){
+"console"in S||(S.console=dd),PDFJS.UnsupportedManager.listen(function(a){S.postMessage({action:"_unsupported_feature",data:a})});var ed=new H("worker_processor",this);bd.setup(ed)}var fd=function(){function a(a,b,c){this.data=a,this.bp=b,this.dataEnd=c,this.chigh=a[b],this.clow=0,this.byteIn(),this.chigh=this.chigh<<7&65535|this.clow>>9&127,this.clow=this.clow<<7&65535,this.ct-=7,this.a=32768}var b=[{qe:22017,nmps:1,nlps:1,switchFlag:1},{qe:13313,nmps:2,nlps:6,switchFlag:0},{qe:6145,nmps:3,nlps:9,switchFlag:0},{qe:2753,nmps:4,nlps:12,switchFlag:0},{qe:1313,nmps:5,nlps:29,switchFlag:0},{qe:545,nmps:38,nlps:33,switchFlag:0},{qe:22017,nmps:7,nlps:6,switchFlag:1},{qe:21505,nmps:8,nlps:14,switchFlag:0},{qe:18433,nmps:9,nlps:14,switchFlag:0},{qe:14337,nmps:10,nlps:14,switchFlag:0},{qe:12289,nmps:11,nlps:17,switchFlag:0},{qe:9217,nmps:12,nlps:18,switchFlag:0},{qe:7169,nmps:13,nlps:20,switchFlag:0},{qe:5633,nmps:29,nlps:21,switchFlag:0},{qe:22017,nmps:15,nlps:14,switchFlag:1},{qe:21505,nmps:16,nlps:14,switchFlag:0},{qe:20737,nmps:17,nlps:15,switchFlag:0},{qe:18433,nmps:18,nlps:16,switchFlag:0},{qe:14337,nmps:19,nlps:17,switchFlag:0},{qe:13313,nmps:20,nlps:18,switchFlag:0},{qe:12289,nmps:21,nlps:19,switchFlag:0},{qe:10241,nmps:22,nlps:19,switchFlag:0},{qe:9217,nmps:23,nlps:20,switchFlag:0},{qe:8705,nmps:24,nlps:21,switchFlag:0},{qe:7169,nmps:25,nlps:22,switchFlag:0},{qe:6145,nmps:26,nlps:23,switchFlag:0},{qe:5633,nmps:27,nlps:24,switchFlag:0},{qe:5121,nmps:28,nlps:25,switchFlag:0},{qe:4609,nmps:29,nlps:26,switchFlag:0},{qe:4353,nmps:30,nlps:27,switchFlag:0},{qe:2753,nmps:31,nlps:28,switchFlag:0},{qe:2497,nmps:32,nlps:29,switchFlag:0},{qe:2209,nmps:33,nlps:30,switchFlag:0},{qe:1313,nmps:34,nlps:31,switchFlag:0},{qe:1089,nmps:35,nlps:32,switchFlag:0},{qe:673,nmps:36,nlps:33,switchFlag:0},{qe:545,nmps:37,nlps:34,switchFlag:0},{qe:321,nmps:38,nlps:35,switchFlag:0},{qe:273,nmps:39,nlps:36,switchFlag:0},{qe:133,nmps:40,nlps:37,switchFlag:0},{qe:73,nmps:41,nlps:38,switchFlag:0},{qe:37,nmps:42,nlps:39,switchFlag:0},{qe:21,nmps:43,nlps:40,switchFlag:0},{qe:9,nmps:44,nlps:41,switchFlag:0},{qe:5,nmps:45,nlps:42,switchFlag:0},{qe:1,nmps:45,nlps:43,switchFlag:0},{qe:22017,nmps:46,nlps:46,switchFlag:0}];return a.prototype={byteIn:function(){var a=this.data,b=this.bp;if(255===a[b]){var c=a[b+1];c>143?(this.clow+=65280,this.ct=8):(b++,this.clow+=a[b]<<9,this.ct=7,this.bp=b)}else b++,this.clow+=b<this.dataEnd?a[b]<<8:65280,this.ct=8,this.bp=b;this.clow>65535&&(this.chigh+=this.clow>>16,this.clow&=65535)},readBit:function(a,c){var d,e=a[c]>>1,f=1&a[c],g=b[e],h=g.qe,i=this.a-h;if(this.chigh<h)h>i?(i=h,d=f,e=g.nmps):(i=h,d=1^f,1===g.switchFlag&&(f=d),e=g.nlps);else{if(this.chigh-=h,0!==(32768&i))return this.a=i,f;h>i?(d=1^f,1===g.switchFlag&&(f=d),e=g.nlps):(d=f,e=g.nmps)}do 0===this.ct&&this.byteIn(),i<<=1,this.chigh=this.chigh<<1&65535|this.clow>>15&1,this.clow=this.clow<<1&65535,this.ct--;while(0===(32768&i));return this.a=i,a[c]=e<<1|f,d}},a}(),gd=function(){function a(){}function b(a,b){for(var c,d,e=0,f=[],g=16;g>0&&!a[g-1];)g--;f.push({children:[],index:0});var h,i=f[0];for(c=0;g>c;c++){for(d=0;d<a[c];d++){for(i=f.pop(),i.children[i.index]=b[e];i.index>0;)i=f.pop();for(i.index++,f.push(i);f.length<=c;)f.push(h={children:[],index:0}),i.children[i.index]=h.children,i=h;e++}g>c+1&&(f.push(h={children:[],index:0}),i.children[i.index]=h.children,i=h)}return f[0].children}function c(a,b,c){return 64*((a.blocksPerLine+1)*b+c)}function d(a,b,d,e,f,g,i,j,k){function l(){if(H>0)return H--,G>>H&1;if(G=a[b++],255===G){var c=a[b++];if(c)throw"unexpected marker: "+(G<<8|c).toString(16)}return H=7,G>>>7}function m(a){for(var b=a;;){if(b=b[l()],"number"==typeof b)return b;if("object"!=typeof b)throw"invalid huffman sequence"}}function n(a){for(var b=0;a>0;)b=b<<1|l(),a--;return b}function o(a){if(1===a)return 1===l()?1:-1;var b=n(a);return b>=1<<a-1?b:b+(-1<<a)+1}function p(a,b){var c=m(a.huffmanTableDC),d=0===c?0:o(c);a.blockData[b]=a.pred+=d;for(var e=1;64>e;){var f=m(a.huffmanTableAC),g=15&f,i=f>>4;if(0!==g){e+=i;var j=h[e];a.blockData[b+j]=o(g),e++}else{if(15>i)break;e+=16}}}function q(a,b){var c=m(a.huffmanTableDC),d=0===c?0:o(c)<<k;a.blockData[b]=a.pred+=d}function r(a,b){a.blockData[b]|=l()<<k}function s(a,b){if(I>0)return void I--;for(var c=g,d=i;d>=c;){var e=m(a.huffmanTableAC),f=15&e,j=e>>4;if(0!==f){c+=j;var l=h[c];a.blockData[b+l]=o(f)*(1<<k),c++}else{if(15>j){I=n(j)+(1<<j)-1;break}c+=16}}}function t(a,b){for(var c,d,e=g,f=i,j=0;f>=e;){var p=h[e];switch(J){case 0:if(d=m(a.huffmanTableAC),c=15&d,j=d>>4,0===c)15>j?(I=n(j)+(1<<j),J=4):(j=16,J=1);else{if(1!==c)throw"invalid ACn encoding";w=o(c),J=j?2:3}continue;case 1:case 2:a.blockData[b+p]?a.blockData[b+p]+=l()<<k:(j--,0===j&&(J=2===J?3:0));break;case 3:a.blockData[b+p]?a.blockData[b+p]+=l()<<k:(a.blockData[b+p]=w<<k,J=0);break;case 4:a.blockData[b+p]&&(a.blockData[b+p]+=l()<<k)}e++}4===J&&(I--,0===I&&(J=0))}function u(a,b,d,e,f){var g=d/D|0,h=d%D,i=g*a.v+e,j=h*a.h+f,k=c(a,i,j);b(a,k)}function v(a,b,d){var e=d/a.blocksPerLine|0,f=d%a.blocksPerLine,g=c(a,e,f);b(a,g)}var w,x,y,z,A,B,C,D=(d.precision,d.samplesPerLine,d.scanLines,d.mcusPerLine),E=d.progressive,F=(d.maxH,d.maxV,b),G=0,H=0,I=0,J=0,K=e.length;C=E?0===g?0===j?q:r:0===j?s:t:p;var L,M,N=0;M=1===K?e[0].blocksPerLine*e[0].blocksPerColumn:D*d.mcusPerColumn,f||(f=M);for(var O,P;M>N;){for(y=0;K>y;y++)e[y].pred=0;if(I=0,1===K)for(x=e[0],B=0;f>B;B++)v(x,C,N),N++;else for(B=0;f>B;B++){for(y=0;K>y;y++)for(x=e[y],O=x.h,P=x.v,z=0;P>z;z++)for(A=0;O>A;A++)u(x,C,N,z,A);N++}if(H=0,L=a[b]<<8|a[b+1],65280>=L)throw"marker was not found";if(!(L>=65488&&65495>=L))break;b+=2}return b-F}function e(a,b,c){for(var d,e,f,g,h,q,r,s,t,u,v,w,x,y,z,A,B,C=a.quantizationTable,D=a.blockData,E=0;64>E;E+=8)t=D[b+E],u=D[b+E+1],v=D[b+E+2],w=D[b+E+3],x=D[b+E+4],y=D[b+E+5],z=D[b+E+6],A=D[b+E+7],t*=C[E],0!==(u|v|w|x|y|z|A)?(u*=C[E+1],v*=C[E+2],w*=C[E+3],x*=C[E+4],y*=C[E+5],z*=C[E+6],A*=C[E+7],d=o*t+128>>8,e=o*x+128>>8,f=v,g=z,h=p*(u-A)+128>>8,s=p*(u+A)+128>>8,q=w<<4,r=y<<4,d=d+e+1>>1,e=d-e,B=f*n+g*m+128>>8,f=f*m-g*n+128>>8,g=B,h=h+r+1>>1,r=h-r,s=s+q+1>>1,q=s-q,d=d+g+1>>1,g=d-g,e=e+f+1>>1,f=e-f,B=h*l+s*k+2048>>12,h=h*k-s*l+2048>>12,s=B,B=q*j+r*i+2048>>12,q=q*i-r*j+2048>>12,r=B,c[E]=d+s,c[E+7]=d-s,c[E+1]=e+r,c[E+6]=e-r,c[E+2]=f+q,c[E+5]=f-q,c[E+3]=g+h,c[E+4]=g-h):(B=o*t+512>>10,c[E]=B,c[E+1]=B,c[E+2]=B,c[E+3]=B,c[E+4]=B,c[E+5]=B,c[E+6]=B,c[E+7]=B);for(var F=0;8>F;++F)t=c[F],u=c[F+8],v=c[F+16],w=c[F+24],x=c[F+32],y=c[F+40],z=c[F+48],A=c[F+56],0!==(u|v|w|x|y|z|A)?(d=o*t+2048>>12,e=o*x+2048>>12,f=v,g=z,h=p*(u-A)+2048>>12,s=p*(u+A)+2048>>12,q=w,r=y,d=(d+e+1>>1)+4112,e=d-e,B=f*n+g*m+2048>>12,f=f*m-g*n+2048>>12,g=B,h=h+r+1>>1,r=h-r,s=s+q+1>>1,q=s-q,d=d+g+1>>1,g=d-g,e=e+f+1>>1,f=e-f,B=h*l+s*k+2048>>12,h=h*k-s*l+2048>>12,s=B,B=q*j+r*i+2048>>12,q=q*i-r*j+2048>>12,r=B,t=d+s,A=d-s,u=e+r,z=e-r,v=f+q,y=f-q,w=g+h,x=g-h,t=16>t?0:t>=4080?255:t>>4,u=16>u?0:u>=4080?255:u>>4,v=16>v?0:v>=4080?255:v>>4,w=16>w?0:w>=4080?255:w>>4,x=16>x?0:x>=4080?255:x>>4,y=16>y?0:y>=4080?255:y>>4,z=16>z?0:z>=4080?255:z>>4,A=16>A?0:A>=4080?255:A>>4,D[b+F]=t,D[b+F+8]=u,D[b+F+16]=v,D[b+F+24]=w,D[b+F+32]=x,D[b+F+40]=y,D[b+F+48]=z,D[b+F+56]=A):(B=o*t+8192>>14,B=-2040>B?0:B>=2024?255:B+2056>>4,D[b+F]=B,D[b+F+8]=B,D[b+F+16]=B,D[b+F+24]=B,D[b+F+32]=B,D[b+F+40]=B,D[b+F+48]=B,D[b+F+56]=B)}function f(a,b){for(var d=b.blocksPerLine,f=b.blocksPerColumn,g=new Int16Array(64),h=0;f>h;h++)for(var i=0;d>i;i++){var j=c(b,h,i);e(b,j,g)}return b.blockData}function g(a){return 0>=a?0:a>=255?255:a}var h=new Uint8Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),i=4017,j=799,k=3406,l=2276,m=1567,n=3784,o=5793,p=2896;return a.prototype={parse:function(a){function c(){var b=a[k]<<8|a[k+1];return k+=2,b}function e(){var b=c(),d=a.subarray(k,k+b-2);return k+=d.length,d}function g(a){for(var b=Math.ceil(a.samplesPerLine/8/a.maxH),c=Math.ceil(a.scanLines/8/a.maxV),d=0;d<a.components.length;d++){M=a.components[d];var e=Math.ceil(Math.ceil(a.samplesPerLine/8)*M.h/a.maxH),f=Math.ceil(Math.ceil(a.scanLines/8)*M.v/a.maxV),g=b*M.h,h=c*M.v,i=64*h*(g+1);M.blockData=new Int16Array(i),M.blocksPerLine=e,M.blocksPerColumn=f}a.mcusPerLine=b,a.mcusPerColumn=c}var i,j,k=0,l=(a.length,null),m=null,n=[],o=[],p=[],q=c();if(65496!==q)throw"SOI not found";for(q=c();65497!==q;){var r,s,t;switch(q){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:var u=e();65504===q&&74===u[0]&&70===u[1]&&73===u[2]&&70===u[3]&&0===u[4]&&(l={version:{major:u[5],minor:u[6]},densityUnits:u[7],xDensity:u[8]<<8|u[9],yDensity:u[10]<<8|u[11],thumbWidth:u[12],thumbHeight:u[13],thumbData:u.subarray(14,14+3*u[12]*u[13])}),65518===q&&65===u[0]&&100===u[1]&&111===u[2]&&98===u[3]&&101===u[4]&&(m={version:u[5]<<8|u[6],flags0:u[7]<<8|u[8],flags1:u[9]<<8|u[10],transformCode:u[11]});break;case 65499:for(var v,w=c(),x=w+k-2;x>k;){var y=a[k++],z=new Uint16Array(64);if(y>>4===0)for(s=0;64>s;s++)v=h[s],z[v]=a[k++];else{if(y>>4!==1)throw"DQT: invalid table spec";for(s=0;64>s;s++)v=h[s],z[v]=c()}n[15&y]=z}break;case 65472:case 65473:case 65474:if(i)throw"Only single frame JPEGs supported";c(),i={},i.extended=65473===q,i.progressive=65474===q,i.precision=a[k++],i.scanLines=c(),i.samplesPerLine=c(),i.components=[],i.componentIds={};var A,B=a[k++],C=0,D=0;for(r=0;B>r;r++){A=a[k];var E=a[k+1]>>4,F=15&a[k+1];E>C&&(C=E),F>D&&(D=F);var G=a[k+2];t=i.components.push({h:E,v:F,quantizationTable:n[G]}),i.componentIds[A]=t-1,k+=3}i.maxH=C,i.maxV=D,g(i);break;case 65476:var H=c();for(r=2;H>r;){var I=a[k++],J=new Uint8Array(16),K=0;for(s=0;16>s;s++,k++)K+=J[s]=a[k];var L=new Uint8Array(K);for(s=0;K>s;s++,k++)L[s]=a[k];r+=17+K,(I>>4===0?p:o)[15&I]=b(J,L)}break;case 65501:c(),j=c();break;case 65498:var M,N=(c(),a[k++]),O=[];for(r=0;N>r;r++){var P=i.componentIds[a[k++]];M=i.components[P];var Q=a[k++];M.huffmanTableDC=p[Q>>4],M.huffmanTableAC=o[15&Q],O.push(M)}var R=a[k++],S=a[k++],T=a[k++],U=d(a,k,i,O,j,R,S,T>>4,15&T);k+=U;break;case 65535:255!==a[k]&&k--;break;default:if(255===a[k-3]&&a[k-2]>=192&&a[k-2]<=254){k-=3;break}throw"unknown JPEG marker "+q.toString(16)}q=c()}for(this.width=i.samplesPerLine,this.height=i.scanLines,this.jfif=l,this.adobe=m,this.components=[],r=0;r<i.components.length;r++)M=i.components[r],this.components.push({output:f(i,M),scaleX:M.h/i.maxH,scaleY:M.v/i.maxV,blocksPerLine:M.blocksPerLine,blocksPerColumn:M.blocksPerColumn});this.numComponents=this.components.length},_getLinearizedBlockData:function(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=this.width/a,o=this.height/b,p=0,q=this.components.length,r=a*b*q,s=new Uint8Array(r),t=new Uint32Array(a),u=4294967288;for(i=0;q>i;i++){for(c=this.components[i],d=c.scaleX*n,e=c.scaleY*o,p=i,m=c.output,f=c.blocksPerLine+1<<3,g=0;a>g;g++)j=0|g*d,t[g]=(j&u)<<3|7&j;for(h=0;b>h;h++)for(j=0|h*e,l=f*(j&u)|(7&j)<<3,g=0;a>g;g++)s[p]=m[l+t[g]],p+=q}var v=this.decodeTransform;if(v)for(i=0;r>i;)for(j=0,k=0;q>j;j++,i++,k+=2)s[i]=(s[i]*v[k]>>8)+v[k+1];return s},_isColorConversionNeeded:function(){return this.adobe&&this.adobe.transformCode?!0:3===this.numComponents?!0:!1},_convertYccToRgb:function(a){for(var b,c,d,e=0,f=a.length;f>e;e+=3)b=a[e],c=a[e+1],d=a[e+2],a[e]=g(b-179.456+1.402*d),a[e+1]=g(b+135.459-.344*c-.714*d),a[e+2]=g(b-226.816+1.772*c);return a},_convertYcckToRgb:function(a){for(var b,c,d,e,f=0,h=0,i=a.length;i>h;h+=4){b=a[h],c=a[h+1],d=a[h+2],e=a[h+3];var j=-122.67195406894+c*(-660635669420364e-19*c+.000437130475926232*d-54080610064599e-18*b+.00048449797120281*e-.154362151871126)+d*(-.000957964378445773*d+.000817076911346625*b-.00477271405408747*e+1.53380253221734)+b*(.000961250184130688*b-.00266257332283933*e+.48357088451265)+e*(-.000336197177618394*e+.484791561490776),k=107.268039397724+c*(219927104525741e-19*c-.000640992018297945*d+.000659397001245577*b+.000426105652938837*e-.176491792462875)+d*(-.000778269941513683*d+.00130872261408275*b+.000770482631801132*e-.151051492775562)+b*(.00126935368114843*b-.00265090189010898*e+.25802910206845)+e*(-.000318913117588328*e-.213742400323665),l=-20.810012546947+c*(-.000570115196973677*c-263409051004589e-19*d+.0020741088115012*b-.00288260236853442*e+.814272968359295)+d*(-153496057440975e-19*d-.000132689043961446*b+.000560833691242812*e-.195152027534049)+b*(.00174418132927582*b-.00255243321439347*e+.116935020465145)+e*(-.000343531996510555*e+.24165260232407);a[f++]=g(j),a[f++]=g(k),a[f++]=g(l)}return a},_convertYcckToCmyk:function(a){for(var b,c,d,e=0,f=a.length;f>e;e+=4)b=a[e],c=a[e+1],d=a[e+2],a[e]=g(434.456-b-1.402*d),a[e+1]=g(119.541-b+.344*c+.714*d),a[e+2]=g(481.816-b-1.772*c);return a},_convertCmykToRgb:function(a){for(var b,c,d,e,f=0,g=-16581375,h=1/255/255,i=0,j=a.length;j>i;i+=4){b=a[i],c=a[i+1],d=a[i+2],e=a[i+3];var k=b*(-4.387332384609988*b+54.48615194189176*c+18.82290502165302*d+212.25662451639585*e-72734.4411664936)+c*(1.7149763477362134*c-5.6096736904047315*d-17.873870861415444*e-1401.7366389350734)+d*(-2.5217340131683033*d-21.248923337353073*e+4465.541406466231)-e*(21.86122147463605*e+48317.86113160301),l=b*(8.841041422036149*b+60.118027045597366*c+6.871425592049007*d+31.159100130055922*e-20220.756542821975)+c*(-15.310361306967817*c+17.575251261109482*d+131.35250912493976*e-48691.05921601825)+d*(4.444339102852739*d+9.8632861493405*e-6341.191035517494)-e*(20.737325471181034*e+47890.15695978492),m=b*(.8842522430003296*b+8.078677503112928*c+30.89978309703729*d-.23883238689178934*e-3616.812083916688)+c*(10.49593273432072*c+63.02378494754052*d+50.606957656360734*e-28620.90484698408)+d*(.03296041114873217*d+115.60384449646641*e-49363.43385999684)-e*(22.33816807309886*e+45932.16563550634);a[f++]=k>=0?255:g>=k?0:255+k*h|0,a[f++]=l>=0?255:g>=l?0:255+l*h|0,a[f++]=m>=0?255:g>=m?0:255+m*h|0}return a},getData:function(a,b,c){if(this.numComponents>4)throw"Unsupported color mode";var d=this._getLinearizedBlockData(a,b);if(3===this.numComponents)return this._convertYccToRgb(d);if(4===this.numComponents){if(this._isColorConversionNeeded())return c?this._convertYcckToRgb(d):this._convertYcckToCmyk(d);if(c)return this._convertCmykToRgb(d)}return d}},a}(),hd=function(){function c(){this.failOnCorruptedImage=!1}function d(a,b){a.x0=Math.ceil(b.XOsiz/a.XRsiz),a.x1=Math.ceil(b.Xsiz/a.XRsiz),a.y0=Math.ceil(b.YOsiz/a.YRsiz),a.y1=Math.ceil(b.Ysiz/a.YRsiz),a.width=a.x1-a.x0,a.height=a.y1-a.y0}function e(a,b){for(var c,d=a.SIZ,e=[],f=Math.ceil((d.Xsiz-d.XTOsiz)/d.XTsiz),g=Math.ceil((d.Ysiz-d.YTOsiz)/d.YTsiz),h=0;g>h;h++)for(var i=0;f>i;i++)c={},c.tx0=Math.max(d.XTOsiz+i*d.XTsiz,d.XOsiz),c.ty0=Math.max(d.YTOsiz+h*d.YTsiz,d.YOsiz),c.tx1=Math.min(d.XTOsiz+(i+1)*d.XTsiz,d.Xsiz),c.ty1=Math.min(d.YTOsiz+(h+1)*d.YTsiz,d.Ysiz),c.width=c.tx1-c.tx0,c.height=c.ty1-c.ty0,c.components=[],e.push(c);a.tiles=e;for(var j=d.Csiz,k=0,l=j;l>k;k++)for(var m=b[k],n=0,o=e.length;o>n;n++){var p={};c=e[n],p.tcx0=Math.ceil(c.tx0/m.XRsiz),p.tcy0=Math.ceil(c.ty0/m.YRsiz),p.tcx1=Math.ceil(c.tx1/m.XRsiz),p.tcy1=Math.ceil(c.ty1/m.YRsiz),p.width=p.tcx1-p.tcx0,p.height=p.tcy1-p.tcy0,c.components[k]=p}}function f(a,b,c){var d=b.codingStyleParameters,e={};return d.entropyCoderWithCustomPrecincts?(e.PPx=d.precinctsSizes[c].PPx,e.PPy=d.precinctsSizes[c].PPy):(e.PPx=15,e.PPy=15),e.xcb_=c>0?Math.min(d.xcb,e.PPx-1):Math.min(d.xcb,e.PPx),e.ycb_=c>0?Math.min(d.ycb,e.PPy-1):Math.min(d.ycb,e.PPy),e}function g(a,b,c){var d=1<<c.PPx,e=1<<c.PPy,f=0===b.resLevel,g=1<<c.PPx+(f?0:-1),h=1<<c.PPy+(f?0:-1),i=b.trx1>b.trx0?Math.ceil(b.trx1/d)-Math.floor(b.trx0/d):0,j=b.try1>b.try0?Math.ceil(b.try1/e)-Math.floor(b.try0/e):0,k=i*j;b.precinctParameters={precinctWidth:d,precinctHeight:e,numprecinctswide:i,numprecinctshigh:j,numprecincts:k,precinctWidthInSubband:g,precinctHeightInSubband:h}}function h(a,b,c){var d,e,f,g,h=c.xcb_,i=c.ycb_,j=1<<h,k=1<<i,l=b.tbx0>>h,m=b.tby0>>i,n=b.tbx1+j-1>>h,o=b.tby1+k-1>>i,p=b.resolution.precinctParameters,q=[],r=[];for(e=m;o>e;e++)for(d=l;n>d;d++){f={cbx:d,cby:e,tbx0:j*d,tby0:k*e,tbx1:j*(d+1),tby1:k*(e+1)},f.tbx0_=Math.max(b.tbx0,f.tbx0),f.tby0_=Math.max(b.tby0,f.tby0),f.tbx1_=Math.min(b.tbx1,f.tbx1),f.tby1_=Math.min(b.tby1,f.tby1);var s=Math.floor((f.tbx0_-b.tbx0)/p.precinctWidthInSubband),t=Math.floor((f.tby0_-b.tby0)/p.precinctHeightInSubband);if(g=s+t*p.numprecinctswide,f.precinctNumber=g,f.subbandType=b.type,f.Lblock=3,!(f.tbx1_<=f.tbx0_||f.tby1_<=f.tby0_)){q.push(f);var u=r[g];void 0!==u?(d<u.cbxMin?u.cbxMin=d:d>u.cbxMax&&(u.cbxMax=d),e<u.cbyMin?u.cbxMin=e:e>u.cbyMax&&(u.cbyMax=e)):r[g]=u={cbxMin:d,cbyMin:e,cbxMax:d,cbyMax:e},f.precinct=u}}b.codeblockParameters={codeblockWidth:h,codeblockHeight:i,numcodeblockwide:n-l+1,numcodeblockhigh:o-m+1},b.codeblocks=q,b.precincts=r}function i(a,b,c){for(var d=[],e=a.subbands,f=0,g=e.length;g>f;f++)for(var h=e[f],i=h.codeblocks,j=0,k=i.length;k>j;j++){var l=i[j];l.precinctNumber===b&&d.push(l)}return{layerNumber:c,codeblocks:d}}function j(a){for(var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,g=0,h=0;f>h;h++)g=Math.max(g,d.components[h].codingStyleParameters.decompositionLevelsCount);var j=0,k=0,l=0,m=0;this.nextPacket=function(){for(;e>j;j++){for(;g>=k;k++){for(;f>l;l++){var a=d.components[l];if(!(k>a.codingStyleParameters.decompositionLevelsCount)){for(var b=a.resolutions[k],c=b.precinctParameters.numprecincts;c>m;){var h=i(b,m,j);return m++,h}m=0}}l=0}k=0}throw new Error("JPX Error: Out of packets")}}function k(a){for(var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,g=0,h=0;f>h;h++)g=Math.max(g,d.components[h].codingStyleParameters.decompositionLevelsCount);var j=0,k=0,l=0,m=0;this.nextPacket=function(){for(;g>=j;j++){for(;e>k;k++){for(;f>l;l++){var a=d.components[l];if(!(j>a.codingStyleParameters.decompositionLevelsCount)){for(var b=a.resolutions[j],c=b.precinctParameters.numprecincts;c>m;){var h=i(b,m,k);return m++,h}m=0}}l=0}k=0}throw new Error("JPX Error: Out of packets")}}function m(a){var b,c,d,e,f=a.SIZ,g=a.currentTile.index,h=a.tiles[g],j=h.codingStyleDefaultParameters.layersCount,k=f.Csiz,l=0;for(d=0;k>d;d++){var m=h.components[d];l=Math.max(l,m.codingStyleParameters.decompositionLevelsCount)}var n=new Int32Array(l+1);for(c=0;l>=c;++c){var o=0;for(d=0;k>d;++d){var p=h.components[d].resolutions;c<p.length&&(o=Math.max(o,p[c].precinctParameters.numprecincts))}n[c]=o}b=0,c=0,d=0,e=0,this.nextPacket=function(){for(;l>=c;c++){for(;e<n[c];e++){for(;k>d;d++){var a=h.components[d];if(!(c>a.codingStyleParameters.decompositionLevelsCount)){var f=a.resolutions[c],g=f.precinctParameters.numprecincts;if(!(e>=g)){for(;j>b;){var m=i(f,e,b);return b++,m}b=0}}}d=0}e=0}throw new Error("JPX Error: Out of packets")}}function p(a){var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,g=s(d),h=g,j=0,k=0,l=0,m=0,n=0;this.nextPacket=function(){for(;n<h.maxNumHigh;n++){for(;m<h.maxNumWide;m++){for(;f>l;l++){for(var a=d.components[l],b=a.codingStyleParameters.decompositionLevelsCount;b>=k;k++){var c=a.resolutions[k],o=g.components[l].resolutions[k],p=r(m,n,o,h,c);if(null!==p){for(;e>j;){var q=i(c,p,j);return j++,q}j=0}}k=0}l=0}m=0}throw new Error("JPX Error: Out of packets")}}function q(a){var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=d.codingStyleDefaultParameters.layersCount,f=b.Csiz,g=s(d),h=0,j=0,k=0,l=0,m=0;this.nextPacket=function(){for(;f>k;++k){for(var a=d.components[k],b=g.components[k],c=a.codingStyleParameters.decompositionLevelsCount;m<b.maxNumHigh;m++){for(;l<b.maxNumWide;l++){for(;c>=j;j++){var n=a.resolutions[j],o=b.resolutions[j],p=r(l,m,o,b,n);if(null!==p){for(;e>h;){var q=i(n,p,h);return h++,q}h=0}}j=0}l=0}m=0}throw new Error("JPX Error: Out of packets")}}function r(a,b,c,d,e){var f=a*d.minWidth,g=b*d.minHeight;if(f%c.width!==0||g%c.height!==0)return null;var h=g/c.width*e.precinctParameters.numprecinctswide;return f/c.height+h}function s(a){for(var b=a.components.length,c=Number.MAX_VALUE,d=Number.MAX_VALUE,e=0,f=0,g=new Array(b),h=0;b>h;h++){for(var i=a.components[h],j=i.codingStyleParameters.decompositionLevelsCount,k=new Array(j+1),l=Number.MAX_VALUE,m=Number.MAX_VALUE,n=0,o=0,p=1,q=j;q>=0;--q){var r=i.resolutions[q],s=p*r.precinctParameters.precinctWidth,t=p*r.precinctParameters.precinctHeight;l=Math.min(l,s),m=Math.min(m,t),n=Math.max(n,r.precinctParameters.numprecinctswide),o=Math.max(o,r.precinctParameters.numprecinctshigh),k[q]={width:s,height:t},p<<=1}c=Math.min(c,l),d=Math.min(d,m),e=Math.max(e,n),f=Math.max(f,o),g[h]={resolutions:k,minWidth:l,minHeight:m,maxNumWide:n,maxNumHigh:o}}return{components:g,minWidth:c,minHeight:d,maxNumWide:e,maxNumHigh:f}}function t(a){for(var b=a.SIZ,c=a.currentTile.index,d=a.tiles[c],e=b.Csiz,i=0;e>i;i++){for(var l=d.components[i],n=l.codingStyleParameters.decompositionLevelsCount,o=[],r=[],s=0;n>=s;s++){var t=f(a,l,s),u={},v=1<<n-s;u.trx0=Math.ceil(l.tcx0/v),u.try0=Math.ceil(l.tcy0/v),u.trx1=Math.ceil(l.tcx1/v),u.try1=Math.ceil(l.tcy1/v),u.resLevel=s,g(a,u,t),o.push(u);var w;if(0===s)w={},w.type="LL",w.tbx0=Math.ceil(l.tcx0/v),w.tby0=Math.ceil(l.tcy0/v),w.tbx1=Math.ceil(l.tcx1/v),w.tby1=Math.ceil(l.tcy1/v),w.resolution=u,h(a,w,t),r.push(w),u.subbands=[w];else{var x=1<<n-s+1,y=[];w={},w.type="HL",w.tbx0=Math.ceil(l.tcx0/x-.5),w.tby0=Math.ceil(l.tcy0/x),w.tbx1=Math.ceil(l.tcx1/x-.5),w.tby1=Math.ceil(l.tcy1/x),w.resolution=u,h(a,w,t),r.push(w),y.push(w),w={},w.type="LH",w.tbx0=Math.ceil(l.tcx0/x),w.tby0=Math.ceil(l.tcy0/x-.5),w.tbx1=Math.ceil(l.tcx1/x),w.tby1=Math.ceil(l.tcy1/x-.5),w.resolution=u,h(a,w,t),r.push(w),y.push(w),w={},w.type="HH",w.tbx0=Math.ceil(l.tcx0/x-.5),w.tby0=Math.ceil(l.tcy0/x-.5),w.tbx1=Math.ceil(l.tcx1/x-.5),w.tby1=Math.ceil(l.tcy1/x-.5),w.resolution=u,h(a,w,t),r.push(w),y.push(w),u.subbands=y}}l.resolutions=o,l.subbands=r}var z=d.codingStyleDefaultParameters.progressionOrder;switch(z){case 0:d.packetsIterator=new j(a);break;case 1:d.packetsIterator=new k(a);break;case 2:d.packetsIterator=new m(a);break;case 3:d.packetsIterator=new p(a);break;case 4:d.packetsIterator=new q(a);break;default:throw new Error("JPX Error: Unsupported progression order "+z)}}function u(a,b,c,d){function e(a){for(;a>m;){var d=b[c+k];k++,n?(j=j<<7|d,m+=7,n=!1):(j=j<<8|d,m+=8),255===d&&(n=!0)}return m-=a,j>>>m&(1<<a)-1}function f(a){return 255===b[c+k-1]&&b[c+k]===a?(g(1),!0):255===b[c+k]&&b[c+k+1]===a?(g(2),!0):!1}function g(a){k+=a}function h(){m=0,n&&(k++,n=!1)}function i(){if(0===e(1))return 1;if(0===e(1))return 2;var a=e(2);return 3>a?a+3:(a=e(5),31>a?a+6:(a=e(7),a+37))}for(var j,k=0,m=0,n=!1,o=a.currentTile.index,p=a.tiles[o],q=a.COD.sopMarkerUsed,r=a.COD.ephMarkerUsed,s=p.packetsIterator;d>k;){h(),q&&f(145)&&g(4);var t=s.nextPacket();if(e(1)){for(var u,v=t.layerNumber,w=[],x=0,y=t.codeblocks.length;y>x;x++){u=t.codeblocks[x];var z,C=u.precinct,D=u.cbx-C.cbxMin,E=u.cby-C.cbyMin,F=!1,G=!1;if(void 0!==u.included)F=!!e(1);else{C=u.precinct;var H,I;if(void 0!==C.inclusionTree)H=C.inclusionTree;else{var J=C.cbxMax-C.cbxMin+1,K=C.cbyMax-C.cbyMin+1;H=new B(J,K,v),I=new A(J,K),C.inclusionTree=H,C.zeroBitPlanesTree=I}if(H.reset(D,E,v))for(;;){if(!e(1)){H.incrementValue(v);break}if(z=!H.nextLevel()){u.included=!0,F=G=!0;break}}}if(F){if(G){for(I=C.zeroBitPlanesTree,I.reset(D,E);;)if(e(1)){if(z=!I.nextLevel())break}else I.incrementValue();u.zeroBitPlanes=I.value}for(var L=i();e(1);)u.Lblock++;var M=l(L),N=(1<<M>L?M-1:M)+u.Lblock,O=e(N);w.push({codeblock:u,codingpasses:L,dataLength:O})}}for(h(),r&&f(146);w.length>0;){var P=w.shift();u=P.codeblock,void 0===u.data&&(u.data=[]),u.data.push({data:b,start:c+k,end:c+k+P.dataLength,codingpasses:P.codingpasses}),k+=P.dataLength}}}return k}function v(a,b,c,d,e,f,g,h){for(var i=d.tbx0,j=d.tby0,k=d.tbx1-d.tbx0,l=d.codeblocks,m="H"===d.type.charAt(0)?1:0,n="H"===d.type.charAt(1)?b:0,o=0,p=l.length;p>o;++o){var q=l[o],r=q.tbx1_-q.tbx0_,s=q.tby1_-q.tby0_;if(0!==r&&0!==s&&void 0!==q.data){var t,u;t=new C(r,s,q.subbandType,q.zeroBitPlanes,f),u=2;var v,w,x,y=q.data,z=0,A=0;for(v=0,w=y.length;w>v;v++)x=y[v],z+=x.end-x.start,A+=x.codingpasses;var B=new Uint8Array(z),D=0;for(v=0,w=y.length;w>v;v++){x=y[v];var E=x.data.subarray(x.start,x.end);B.set(E,D),D+=E.length}var F=new fd(B,0,z);for(t.setDecoder(F),v=0;A>v;v++){switch(u){case 0:t.runSignificancePropogationPass();break;case 1:t.runMagnitudeRefinementPass();break;case 2:t.runCleanupPass(),h&&t.checkSegmentationSymbol()}u=(u+1)%3}var G,H,I,J=q.tbx0_-i+(q.tby0_-j)*k,K=t.coefficentsSign,L=t.coefficentsMagnitude,M=t.bitsDecoded,N=g?0:.5;D=0;var O="LL"!==d.type;for(v=0;s>v;v++){var P=J/k|0,Q=2*P*(b-k)+m+n;for(G=0;r>G;G++){if(H=L[D],0!==H){H=(H+N)*e,0!==K[D]&&(H=-H),I=M[D];var R=O?Q+(J<<1):J;g&&I>=f?a[R]=H:a[R]=H*(1<<f-I)}J++,D++}J+=k-r}}}}function w(a,b,c){for(var d=b.components[c],e=d.codingStyleParameters,f=d.quantizationParameters,g=e.decompositionLevelsCount,h=f.SPqcds,i=f.scalarExpounded,j=f.guardBits,k=e.segmentationSymbolUsed,l=a.components[c].precision,m=e.reversibleTransformation,n=m?new F:new E,o=[],p=0,q=0;g>=q;q++){for(var r=d.resolutions[q],s=r.trx1-r.trx0,t=r.try1-r.try0,u=new Float32Array(s*t),w=0,x=r.subbands.length;x>w;w++){var y,A;i?(y=h[p].mu,A=h[p].epsilon,p++):(y=h[0].mu,A=h[0].epsilon+(q>0?1-q:0));var B=r.subbands[w],C=z[B.type],D=m?1:Math.pow(2,l+C-A)*(1+y/2048),G=j+A-1;v(u,s,t,B,D,G,m,k)}o.push({width:s,height:t,items:u})}var H=n.calculate(o,d.tcx0,d.tcy0);return{left:d.tcx0,top:d.tcy0,width:H.width,height:H.height,items:H.items}}function x(a){for(var b=a.SIZ,c=a.components,d=b.Csiz,e=[],f=0,g=a.tiles.length;g>f;f++){var h,i=a.tiles[f],j=[];for(h=0;d>h;h++)j[h]=w(a,i,h);var k,l,m,n,o,p,q,r,s,t,u,v,x,y,z,A=j[0],B=new Uint8Array(A.items.length*d),C={left:A.left,top:A.top,width:A.width,height:A.height,items:B},D=0;if(i.codingStyleDefaultParameters.multipleComponentTransform){var E=4===d,F=j[0].items,G=j[1].items,H=j[2].items,I=E?j[3].items:null;k=c[0].precision-8,l=(128<<k)+.5,m=255*(1<<k),o=.5*m,n=-o;var J=i.components[0],K=d-3;if(q=F.length,J.codingStyleParameters.reversibleTransformation)for(p=0;q>p;p++,D+=K)r=F[p]+l,s=G[p],t=H[p],v=r-(t+s>>2),u=v+t,x=v+s,B[D++]=0>=u?0:u>=m?255:u>>k,B[D++]=0>=v?0:v>=m?255:v>>k,B[D++]=0>=x?0:x>=m?255:x>>k;else for(p=0;q>p;p++,D+=K)r=F[p]+l,s=G[p],t=H[p],u=r+1.402*t,v=r-.34413*s-.71414*t,x=r+1.772*s,B[D++]=0>=u?0:u>=m?255:u>>k,B[D++]=0>=v?0:v>=m?255:v>>k,B[D++]=0>=x?0:x>=m?255:x>>k;if(E)for(p=0,D=3;q>p;p++,D+=4)y=I[p],B[D]=n>=y?0:y>=o?255:y+l>>k}else for(h=0;d>h;h++){var L=j[h].items;for(k=c[h].precision-8,l=(128<<k)+.5,m=127.5*(1<<k),n=-m,D=h,p=0,q=L.length;q>p;p++)z=L[p],B[D]=n>=z?0:z>=m?255:z+l>>k,D+=d}e.push(C)}return e}function y(a,b){for(var c=a.SIZ,d=c.Csiz,e=a.tiles[b],f=0;d>f;f++){var g=e.components[f],h=void 0!==a.currentTile.QCC[f]?a.currentTile.QCC[f]:a.currentTile.QCD;g.quantizationParameters=h;var i=void 0!==a.currentTile.COC[f]?a.currentTile.COC[f]:a.currentTile.COD;g.codingStyleParameters=i}e.codingStyleDefaultParameters=a.currentTile.COD}var z={LL:0,LH:1,HL:1,HH:2};c.prototype={parse:function(c){var d=n(c,0);if(65359===d)return void this.parseCodestream(c,0,c.length);for(var e=0,f=c.length;f>e;){var g=8,h=o(c,e),i=o(c,e+4);if(e+=g,1===h&&(h=4294967296*o(c,e)+o(c,e+4),e+=8,g+=8),0===h&&(h=f-e+g),g>h)throw new Error("JPX Error: Invalid box field size");var j=h-g,k=!0;switch(i){case 1785737832:k=!1;break;case 1668246642:var l=c[e];c[e+1],c[e+2];if(1===l){var m=o(c,e+3);switch(m){case 16:case 17:case 18:break;default:b("Unknown colorspace "+m)}}else 2===l&&a("ICC profile not supported");break;case 1785737827:this.parseCodestream(c,e,e+j);break;case 1783636e3:218793738!==o(c,e)&&b("Invalid JP2 signature");break;case 1783634458:case 1718909296:case 1920099697:case 1919251232:case 1768449138:break;default:var p=String.fromCharCode(i>>24&255,i>>16&255,i>>8&255,255&i);b("Unsupported header type "+i+" ("+p+")")}k&&(e+=j)}},parseImageProperties:function(a){for(var b=a.getByte();b>=0;){var c=b;b=a.getByte();var d=c<<8|b;if(65361===d){a.skip(4);var e=a.getInt32()>>>0,f=a.getInt32()>>>0,g=a.getInt32()>>>0,h=a.getInt32()>>>0;a.skip(16);var i=a.getUint16();return this.width=e-g,this.height=f-h,this.componentsCount=i,void(this.bitsPerComponent=8)}}throw new Error("JPX Error: No size marker found in JPX stream")},parseCodestream:function(a,c,f){var g={};try{for(var h=!1,i=c;f>i+1;){var j=n(a,i);i+=2;var k,l,m,p,q,r,s=0;switch(j){case 65359:g.mainHeader=!0;break;case 65497:break;case 65361:s=n(a,i);var v={};v.Xsiz=o(a,i+4),v.Ysiz=o(a,i+8),v.XOsiz=o(a,i+12),v.YOsiz=o(a,i+16),v.XTsiz=o(a,i+20),v.YTsiz=o(a,i+24),v.XTOsiz=o(a,i+28),v.YTOsiz=o(a,i+32);var w=n(a,i+36);v.Csiz=w;var z=[];k=i+38;for(var A=0;w>A;A++){var B={precision:(127&a[k])+1,isSigned:!!(128&a[k]),XRsiz:a[k+1],YRsiz:a[k+1]};d(B,v),z.push(B)}g.SIZ=v,g.components=z,e(g,z),g.QCC=[],g.COC=[];break;case 65372:s=n(a,i);var C={};switch(k=i+2,l=a[k++],31&l){case 0:p=8,q=!0;break;case 1:p=16,q=!1;break;case 2:p=16,q=!0;break;default:throw new Error("JPX Error: Invalid SQcd value "+l)}for(C.noQuantization=8===p,C.scalarExpounded=q,C.guardBits=l>>5,m=[];s+i>k;){var D={};8===p?(D.epsilon=a[k++]>>3,D.mu=0):(D.epsilon=a[k]>>3,D.mu=(7&a[k])<<8|a[k+1],k+=2),m.push(D)}C.SPqcds=m,g.mainHeader?g.QCD=C:(g.currentTile.QCD=C,g.currentTile.QCC=[]);break;case 65373:s=n(a,i);var E={};k=i+2;var F;switch(g.SIZ.Csiz<257?F=a[k++]:(F=n(a,k),k+=2),l=a[k++],31&l){case 0:p=8,q=!0;break;case 1:p=16,q=!1;break;case 2:p=16,q=!0;break;default:throw new Error("JPX Error: Invalid SQcd value "+l)}for(E.noQuantization=8===p,E.scalarExpounded=q,E.guardBits=l>>5,m=[];s+i>k;)D={},8===p?(D.epsilon=a[k++]>>3,D.mu=0):(D.epsilon=a[k]>>3,D.mu=(7&a[k])<<8|a[k+1],k+=2),m.push(D);E.SPqcds=m,g.mainHeader?g.QCC[F]=E:g.currentTile.QCC[F]=E;break;case 65362:s=n(a,i);var G={};k=i+2;var H=a[k++];G.entropyCoderWithCustomPrecincts=!!(1&H),G.sopMarkerUsed=!!(2&H),G.ephMarkerUsed=!!(4&H),G.progressionOrder=a[k++],G.layersCount=n(a,k),k+=2,G.multipleComponentTransform=a[k++],G.decompositionLevelsCount=a[k++],G.xcb=(15&a[k++])+2,G.ycb=(15&a[k++])+2;var I=a[k++];if(G.selectiveArithmeticCodingBypass=!!(1&I),G.resetContextProbabilities=!!(2&I),G.terminationOnEachCodingPass=!!(4&I),G.verticalyStripe=!!(8&I),G.predictableTermination=!!(16&I),G.segmentationSymbolUsed=!!(32&I),G.reversibleTransformation=a[k++],G.entropyCoderWithCustomPrecincts){for(var J=[];s+i>k;){var K=a[k++];J.push({PPx:15&K,PPy:K>>4})}G.precinctsSizes=J}var L=[];if(G.selectiveArithmeticCodingBypass&&L.push("selectiveArithmeticCodingBypass"),G.resetContextProbabilities&&L.push("resetContextProbabilities"),G.terminationOnEachCodingPass&&L.push("terminationOnEachCodingPass"),G.verticalyStripe&&L.push("verticalyStripe"),G.predictableTermination&&L.push("predictableTermination"),L.length>0)throw h=!0,new Error("JPX Error: Unsupported COD options ("+L.join(", ")+")");g.mainHeader?g.COD=G:(g.currentTile.COD=G,g.currentTile.COC=[]);break;case 65424:s=n(a,i),r={},r.index=n(a,i+2),r.length=o(a,i+4),r.dataEnd=r.length+i-2,r.partIndex=a[i+8],r.partsCount=a[i+9],g.mainHeader=!1,0===r.partIndex&&(r.COD=g.COD,r.COC=g.COC.slice(0),r.QCD=g.QCD,r.QCC=g.QCC.slice(0)),g.currentTile=r;break;case 65427:r=g.currentTile,0===r.partIndex&&(y(g,r.index),t(g)),s=r.dataEnd-i,u(g,a,i,s);break;case 65365:case 65367:case 65368:case 65380:s=n(a,i);break;case 65363:throw new Error("JPX Error: Codestream code 0xFF53 (COC) is not implemented");default:throw new Error("JPX Error: Unknown codestream code: "+j.toString(16))}i+=s}}catch(M){if(h||this.failOnCorruptedImage)throw M;b("Trying to recover from "+M.message)}this.tiles=x(g),this.width=g.SIZ.Xsiz-g.SIZ.XOsiz,this.height=g.SIZ.Ysiz-g.SIZ.YOsiz,this.componentsCount=g.SIZ.Csiz}};var A=function(){function a(a,b){var c=l(Math.max(a,b))+1;this.levels=[];for(var d=0;c>d;d++){var e={width:a,height:b,items:[]};this.levels.push(e),a=Math.ceil(a/2),b=Math.ceil(b/2)}}return a.prototype={reset:function(a,b){for(var c,d=0,e=0;d<this.levels.length;){
+c=this.levels[d];var f=a+b*c.width;if(void 0!==c.items[f]){e=c.items[f];break}c.index=f,a>>=1,b>>=1,d++}d--,c=this.levels[d],c.items[c.index]=e,this.currentLevel=d,delete this.value},incrementValue:function(){var a=this.levels[this.currentLevel];a.items[a.index]++},nextLevel:function(){var a=this.currentLevel,b=this.levels[a],c=b.items[b.index];return a--,0>a?(this.value=c,!1):(this.currentLevel=a,b=this.levels[a],b.items[b.index]=c,!0)}},a}(),B=function(){function a(a,b,c){var d=l(Math.max(a,b))+1;this.levels=[];for(var e=0;d>e;e++){for(var f=new Uint8Array(a*b),g=0,h=f.length;h>g;g++)f[g]=c;var i={width:a,height:b,items:f};this.levels.push(i),a=Math.ceil(a/2),b=Math.ceil(b/2)}}return a.prototype={reset:function(a,b,c){for(var d=0;d<this.levels.length;){var e=this.levels[d],f=a+b*e.width;e.index=f;var g=e.items[f];if(255===g)break;if(g>c)return this.currentLevel=d,this.propagateValues(),!1;a>>=1,b>>=1,d++}return this.currentLevel=d-1,!0},incrementValue:function(a){var b=this.levels[this.currentLevel];b.items[b.index]=a+1,this.propagateValues()},propagateValues:function(){for(var a=this.currentLevel,b=this.levels[a],c=b.items[b.index];--a>=0;)b=this.levels[a],b.items[b.index]=c},nextLevel:function(){var a=this.currentLevel,b=this.levels[a],c=b.items[b.index];return b.items[b.index]=255,a--,0>a?!1:(this.currentLevel=a,b=this.levels[a],b.items[b.index]=c,!0)}},a}(),C=function(){function a(a,b,c,g,h){this.width=a,this.height=b,this.contextLabelTable="HH"===c?f:"HL"===c?e:d;var i=a*b;this.neighborsSignificance=new Uint8Array(i),this.coefficentsSign=new Uint8Array(i),this.coefficentsMagnitude=h>14?new Uint32Array(i):h>6?new Uint16Array(i):new Uint8Array(i),this.processingFlags=new Uint8Array(i);var j=new Uint8Array(i);if(0!==g)for(var k=0;i>k;k++)j[k]=g;this.bitsDecoded=j,this.reset()}var b=17,c=18,d=new Uint8Array([0,5,8,0,3,7,8,0,4,7,8,0,0,0,0,0,1,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8,0,0,0,0,0,2,6,8,0,3,7,8,0,4,7,8]),e=new Uint8Array([0,3,4,0,5,7,7,0,8,8,8,0,0,0,0,0,1,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8,0,0,0,0,0,2,3,4,0,6,7,7,0,8,8,8]),f=new Uint8Array([0,1,2,0,1,2,2,0,2,2,2,0,0,0,0,0,3,4,5,0,4,5,5,0,5,5,5,0,0,0,0,0,6,7,7,0,7,7,7,0,7,7,7,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8,0,0,0,0,0,8,8,8,0,8,8,8,0,8,8,8]);return a.prototype={setDecoder:function(a){this.decoder=a},reset:function(){this.contexts=new Int8Array(19),this.contexts[0]=8,this.contexts[b]=92,this.contexts[c]=6},setNeighborsSignificance:function(a,b,c){var d,e=this.neighborsSignificance,f=this.width,g=this.height,h=b>0,i=f>b+1;a>0&&(d=c-f,h&&(e[d-1]+=16),i&&(e[d+1]+=16),e[d]+=4),g>a+1&&(d=c+f,h&&(e[d-1]+=16),i&&(e[d+1]+=16),e[d]+=4),h&&(e[c-1]+=1),i&&(e[c+1]+=1),e[c]|=128},runSignificancePropogationPass:function(){for(var a=this.decoder,b=this.width,c=this.height,d=this.coefficentsMagnitude,e=this.coefficentsSign,f=this.neighborsSignificance,g=this.processingFlags,h=this.contexts,i=this.contextLabelTable,j=this.bitsDecoded,k=-2,l=1,m=2,n=0;c>n;n+=4)for(var o=0;b>o;o++)for(var p=n*b+o,q=0;4>q;q++,p+=b){var r=n+q;if(r>=c)break;if(g[p]&=k,!d[p]&&f[p]){var s=i[f[p]],t=a.readBit(h,s);if(t){var u=this.decodeSignBit(r,o,p);e[p]=u,d[p]=1,this.setNeighborsSignificance(r,o,p),g[p]|=m}j[p]++,g[p]|=l}}},decodeSignBit:function(a,b,c){var d,e,f,g,h,i,j=this.width,k=this.height,l=this.coefficentsMagnitude,m=this.coefficentsSign;g=b>0&&0!==l[c-1],j>b+1&&0!==l[c+1]?(f=m[c+1],g?(e=m[c-1],d=1-f-e):d=1-f-f):g?(e=m[c-1],d=1-e-e):d=0;var n=3*d;return g=a>0&&0!==l[c-j],k>a+1&&0!==l[c+j]?(f=m[c+j],g?(e=m[c-j],d=1-f-e+n):d=1-f-f+n):g?(e=m[c-j],d=1-e-e+n):d=n,d>=0?(h=9+d,i=this.decoder.readBit(this.contexts,h)):(h=9-d,i=1^this.decoder.readBit(this.contexts,h)),i},runMagnitudeRefinementPass:function(){for(var a,b=this.decoder,c=this.width,d=this.height,e=this.coefficentsMagnitude,f=this.neighborsSignificance,g=this.contexts,h=this.bitsDecoded,i=this.processingFlags,j=1,k=2,l=c*d,m=4*c,n=0;l>n;n=a){a=Math.min(l,n+m);for(var o=0;c>o;o++)for(var p=n+o;a>p;p+=c)if(e[p]&&0===(i[p]&j)){var q=16;if(0!==(i[p]&k)){i[p]^=k;var r=127&f[p];q=0===r?15:14}var s=b.readBit(g,q);e[p]=e[p]<<1|s,h[p]++,i[p]|=j}}},runCleanupPass:function(){for(var a,d=this.decoder,e=this.width,f=this.height,g=this.neighborsSignificance,h=this.coefficentsMagnitude,i=this.coefficentsSign,j=this.contexts,k=this.contextLabelTable,l=this.bitsDecoded,m=this.processingFlags,n=1,o=2,p=e,q=2*e,r=3*e,s=0;f>s;s=a){a=Math.min(s+4,f);for(var t=s*e,u=f>s+3,v=0;e>v;v++){var w,x=t+v,y=u&&0===m[x]&&0===m[x+p]&&0===m[x+q]&&0===m[x+r]&&0===g[x]&&0===g[x+p]&&0===g[x+q]&&0===g[x+r],z=0,A=x,B=s;if(y){var C=d.readBit(j,c);if(!C){l[x]++,l[x+p]++,l[x+q]++,l[x+r]++;continue}z=d.readBit(j,b)<<1|d.readBit(j,b),0!==z&&(B=s+z,A+=z*e),w=this.decodeSignBit(B,v,A),i[A]=w,h[A]=1,this.setNeighborsSignificance(B,v,A),m[A]|=o,A=x;for(var D=s;B>=D;D++,A+=e)l[A]++;z++}for(B=s+z;a>B;B++,A+=e)if(!h[A]&&0===(m[A]&n)){var E=k[g[A]],F=d.readBit(j,E);1===F&&(w=this.decodeSignBit(B,v,A),i[A]=w,h[A]=1,this.setNeighborsSignificance(B,v,A),m[A]|=o),l[A]++}}}},checkSegmentationSymbol:function(){var a=this.decoder,c=this.contexts,d=a.readBit(c,b)<<3|a.readBit(c,b)<<2|a.readBit(c,b)<<1|a.readBit(c,b);if(10!==d)throw new Error("JPX Error: Invalid segmentation symbol")}},a}(),D=function(){function a(){}return a.prototype.calculate=function(a,b,c){for(var d=a[0],e=1,f=a.length;f>e;e++)d=this.iterate(d,a[e],b,c);return d},a.prototype.extend=function(a,b,c){var d=b-1,e=b+1,f=b+c-2,g=b+c;a[d--]=a[e++],a[g++]=a[f--],a[d--]=a[e++],a[g++]=a[f--],a[d--]=a[e++],a[g++]=a[f--],a[d]=a[e],a[g]=a[f]},a.prototype.iterate=function(a,b,c,d){var e,f,g,h,i,j,k=a.width,l=a.height,m=a.items,n=b.width,o=b.height,p=b.items;for(g=0,e=0;l>e;e++)for(h=2*e*n,f=0;k>f;f++,g++,h+=2)p[h]=m[g];m=a.items=null;var q=4,r=new Float32Array(n+2*q);if(1===n){if(0!==(1&c))for(j=0,g=0;o>j;j++,g+=n)p[g]*=.5}else for(j=0,g=0;o>j;j++,g+=n)r.set(p.subarray(g,g+n),q),this.extend(r,q,n),this.filter(r,q,n),p.set(r.subarray(q,q+n),g);var s=16,t=[];for(e=0;s>e;e++)t.push(new Float32Array(o+2*q));var u,v=0;if(a=q+o,1===o){if(0!==(1&d))for(i=0;n>i;i++)p[i]*=.5}else for(i=0;n>i;i++){if(0===v){for(s=Math.min(n-i,s),g=i,h=q;a>h;g+=n,h++)for(u=0;s>u;u++)t[u][h]=p[g+u];v=s}v--;var w=t[v];if(this.extend(w,q,o),this.filter(w,q,o),0===v)for(g=i-s+1,h=q;a>h;g+=n,h++)for(u=0;s>u;u++)p[g+u]=t[u][h]}return{width:n,height:o,items:p}},a}(),E=function(){function a(){D.call(this)}return a.prototype=Object.create(D.prototype),a.prototype.filter=function(a,b,c){var d=c>>1;b=0|b;var e,f,g,h,i=-1.586134342059924,j=-.052980118572961,k=.882911075530934,l=.443506852043971,m=1.230174104914001,n=1/m;for(e=b-3,f=d+4;f--;e+=2)a[e]*=n;for(e=b-2,g=l*a[e-1],f=d+3;f--&&(h=l*a[e+1],a[e]=m*a[e]-g-h,f--);e+=2)e+=2,g=l*a[e+1],a[e]=m*a[e]-g-h;for(e=b-1,g=k*a[e-1],f=d+2;f--&&(h=k*a[e+1],a[e]-=g+h,f--);e+=2)e+=2,g=k*a[e+1],a[e]-=g+h;for(e=b,g=j*a[e-1],f=d+1;f--&&(h=j*a[e+1],a[e]-=g+h,f--);e+=2)e+=2,g=j*a[e+1],a[e]-=g+h;if(0!==d)for(e=b+1,g=i*a[e-1],f=d;f--&&(h=i*a[e+1],a[e]-=g+h,f--);e+=2)e+=2,g=i*a[e+1],a[e]-=g+h},a}(),F=function(){function a(){D.call(this)}return a.prototype=Object.create(D.prototype),a.prototype.filter=function(a,b,c){var d=c>>1;b=0|b;var e,f;for(e=b,f=d+1;f--;e+=2)a[e]-=a[e-1]+a[e+1]+2>>2;for(e=b+1,f=d;f--;e+=2)a[e]+=a[e-1]+a[e+1]>>1},a}();return c}(),id=function(){function a(){}function b(a,b,c){this.data=a,this.start=b,this.end=c}function d(a,b,c){function d(a){for(var b=0,d=0;a>d;d++){var g=c.readBit(e,f);f=256>f?f<<1|g:511&(f<<1|g)|256,b=b<<1|g}return b>>>0}var e=a.getContexts(b),f=1,g=d(1),h=d(1)?d(1)?d(1)?d(1)?d(1)?d(32)+4436:d(12)+340:d(8)+84:d(6)+20:d(4)+4:d(2);return 0===g?h:h>0?-h:null}function e(a,b,c){for(var d=a.getContexts("IAID"),e=1,f=0;c>f;f++){var g=b.readBit(d,e);e=e<<1|g}return 31>c?e&(1<<c)-1:2147483647&e}function f(a,b,c){var d,e,f,g,h,i,j,k=c.decoder,l=c.contextCache.getContexts("GB"),m=[],n=31735;for(e=0;b>e;e++)for(h=m[e]=new Uint8Array(a),i=1>e?h:m[e-1],j=2>e?h:m[e-2],d=j[0]<<13|j[1]<<12|j[2]<<11|i[0]<<7|i[1]<<6|i[2]<<5|i[3]<<4,f=0;a>f;f++)h[f]=g=k.readBit(l,d),d=(d&n)<<1|(a>f+3?j[f+3]<<11:0)|(a>f+4?i[f+4]<<4:0)|g;return m}function h(a,b,d,e,g,h,i,j){if(a&&c("JBIG2 error: MMR encoding is not supported"),0===e&&!h&&!g&&4===i.length&&3===i[0].x&&-1===i[0].y&&-3===i[1].x&&-1===i[1].y&&2===i[2].x&&-2===i[2].y&&-2===i[3].x&&-2===i[3].y)return f(b,d,j);var k=!!h,l=y[e].concat(i);l.sort(function(a,b){return a.y-b.y||a.x-b.x});var m,n,o=l.length,p=new Int8Array(o),q=new Int8Array(o),r=[],s=0,t=0,u=0,v=0;for(n=0;o>n;n++)p[n]=l[n].x,q[n]=l[n].y,t=Math.min(t,l[n].x),u=Math.max(u,l[n].x),v=Math.min(v,l[n].y),o-1>n&&l[n].y===l[n+1].y&&l[n].x===l[n+1].x-1?s|=1<<o-1-n:r.push(n);var w=r.length,x=new Int8Array(w),z=new Int8Array(w),B=new Uint16Array(w);for(m=0;w>m;m++)n=r[m],x[m]=l[n].x,z[m]=l[n].y,B[m]=1<<o-1-n;for(var C,D,E,F,G,H=-t,I=-v,J=b-u,K=A[e],L=new Uint8Array(b),M=[],N=j.decoder,O=j.contextCache.getContexts("GB"),P=0,Q=0,R=0;d>R;R++){if(g){var S=N.readBit(O,K);if(P^=S){M.push(L);continue}}for(L=new Uint8Array(L),M.push(L),C=0;b>C;C++)if(k&&h[R][C])L[C]=0;else{if(C>=H&&J>C&&R>=I)for(Q=Q<<1&s,n=0;w>n;n++)D=R+z[n],E=C+x[n],F=M[D][E],F&&(F=B[n],Q|=F);else for(Q=0,G=o-1,n=0;o>n;n++,G--)E=C+p[n],E>=0&&b>E&&(D=R+q[n],D>=0&&(F=M[D][E],F&&(Q|=F<<G)));var T=N.readBit(O,Q);L[C]=T}}return M}function i(a,b,d,e,f,g,h,i,j){var k=z[d].coding;0===d&&(k=k.concat([i[0]]));var l,m=k.length,n=new Int32Array(m),o=new Int32Array(m);for(l=0;m>l;l++)n[l]=k[l].x,o[l]=k[l].y;var p=z[d].reference;0===d&&(p=p.concat([i[1]]));var q=p.length,r=new Int32Array(q),s=new Int32Array(q);for(l=0;q>l;l++)r[l]=p[l].x,s[l]=p[l].y;for(var t=e[0].length,u=e.length,v=B[d],w=[],x=j.decoder,y=j.contextCache.getContexts("GR"),A=0,C=0;b>C;C++){if(h){var D=x.readBit(y,v);A^=D,A&&c("JBIG2 error: prediction is not supported")}var E=new Uint8Array(a);w.push(E);for(var F=0;a>F;F++){var G,H,I=0;for(l=0;m>l;l++)G=C+o[l],H=F+n[l],0>G||0>H||H>=a?I<<=1:I=I<<1|w[G][H];for(l=0;q>l;l++)G=C+s[l]+g,H=F+r[l]+f,0>G||G>=u||0>H||H>=t?I<<=1:I=I<<1|e[G][H];var J=x.readBit(y,I);E[F]=J}}return w}function j(a,b,f,g,j,m,n,o,p,q,r){a&&c("JBIG2 error: huffman is not supported");for(var s=[],t=0,u=l(f.length+g),v=r.decoder,w=r.contextCache;s.length<g;){var x=d(w,"IADH",v);t+=x;for(var y=0,z=0;;){var A=d(w,"IADW",v);if(null===A)break;y+=A,z+=y;var B;if(b){var C=d(w,"IAAI",v);if(C>1)B=k(a,b,y,t,0,C,1,f.concat(s),u,0,0,1,0,m,p,q,r);else{var D=e(w,v,u),E=d(w,"IARDX",v),F=d(w,"IARDY",v),G=D<f.length?f[D]:s[D-f.length];B=i(y,t,p,G,E,F,!1,q,r)}}else B=h(!1,y,t,n,!1,null,o,r);s.push(B)}}for(var H=[],I=[],J=!1,K=f.length+g;I.length<K;){for(var L=d(w,"IAEX",v);L--;)I.push(J);J=!J}for(var M=0,N=f.length;N>M;M++)I[M]&&H.push(f[M]);for(var O=0;g>O;M++,O++)I[M]&&H.push(s[O]);return H}function k(a,b,f,g,h,j,k,l,m,n,o,p,q,r,s,t,u){a&&c("JBIG2 error: huffman is not supported");var v,w,x=[];for(v=0;g>v;v++){if(w=new Uint8Array(f),h)for(var y=0;f>y;y++)w[y]=h;x.push(w)}var z=u.decoder,A=u.contextCache,B=-d(A,"IADT",z),C=0;for(v=0;j>v;){var D=d(A,"IADT",z);B+=D;var E=d(A,"IAFS",z);C+=E;for(var F=C;;){var G=1===k?0:d(A,"IAIT",z),H=k*B+G,I=e(A,z,m),J=b&&d(A,"IARI",z),K=l[I],L=K[0].length,M=K.length;if(J){var N=d(A,"IARDW",z),O=d(A,"IARDH",z),P=d(A,"IARDX",z),Q=d(A,"IARDY",z);L+=N,M+=O,K=i(L,M,s,K,(N>>1)+P,(O>>1)+Q,!1,t,u)}var R,S,T,U=H-(1&p?0:M),V=F-(2&p?L:0);if(n){for(R=0;M>R;R++)if(w=x[V+R]){T=K[R];var W=Math.min(f-U,L);switch(q){case 0:for(S=0;W>S;S++)w[U+S]|=T[S];break;case 2:for(S=0;W>S;S++)w[U+S]^=T[S];break;default:c("JBIG2 error: operator "+q+" is not supported")}}F+=M-1}else{for(S=0;M>S;S++)if(w=x[U+S])switch(T=K[S],q){case 0:for(R=0;L>R;R++)w[V+R]|=T[R];break;case 2:for(R=0;L>R;R++)w[V+R]^=T[R];break;default:c("JBIG2 error: operator "+q+" is not supported")}F+=L-1}v++;var X=d(A,"IADS",z);if(null===X)break;F+=X+o}}return x}function p(a,b){var d={};d.number=o(a,b);var e=a[b+4],f=63&e;x[f]||c("JBIG2 error: invalid segment type: "+f),d.type=f,d.typeName=x[f],d.deferredNonRetain=!!(128&e);var g=!!(64&e),h=a[b+5],i=h>>5&7,j=[31&h],k=b+6;if(7===h){i=536870911&o(a,k-1),k+=3;var l=i+7>>3;for(j[0]=a[k++];--l>0;)j.push(a[k++])}else(5===h||6===h)&&c("JBIG2 error: invalid referred-to flags");d.retainBits=j;var m,p,q=d.number<=256?1:d.number<=65536?2:4,s=[];for(m=0;i>m;m++){var t=1===q?a[k]:2===q?n(a,k):o(a,k);s.push(t),k+=q}if(d.referredTo=s,g?(d.pageAssociation=o(a,k),k+=4):d.pageAssociation=a[k++],d.length=o(a,k),k+=4,4294967295===d.length)if(38===f){var u=r(a,k),v=a[k+C],w=!!(1&v),y=6,z=new Uint8Array(y);for(w||(z[0]=255,z[1]=172),z[2]=u.height>>>24&255,z[3]=u.height>>16&255,z[4]=u.height>>8&255,z[5]=255&u.height,m=k,p=a.length;p>m;m++){for(var A=0;y>A&&z[A]===a[m+A];)A++;if(A===y){d.length=m+y;break}}4294967295===d.length&&c("JBIG2 error: segment end was not found")}else c("JBIG2 error: invalid unknown segment length");return d.headerEnd=k,d}function q(a,b,c,d){for(var e=[],f=c;d>f;){var g=p(b,f);f=g.headerEnd;var h={header:g,data:b};if(a.randomAccess||(h.start=f,f+=g.length,h.end=f),e.push(h),51===g.type)break}if(a.randomAccess)for(var i=0,j=e.length;j>i;i++)e[i].start=f,f+=e[i].header.length,e[i].end=f;return e}function r(a,b){return{width:o(a,b),height:o(a,b+4),x:o(a,b+8),y:o(a,b+12),combinationOperator:7&a[b+16]}}function s(a,b){var d,e,f,g,h=a.header,i=a.data,j=a.start,k=a.end;switch(h.type){case 0:var l={},p=n(i,j);if(l.huffman=!!(1&p),l.refinement=!!(2&p),l.huffmanDHSelector=p>>2&3,l.huffmanDWSelector=p>>4&3,l.bitmapSizeSelector=p>>6&1,l.aggregationInstancesSelector=p>>7&1,l.bitmapCodingContextUsed=!!(256&p),l.bitmapCodingContextRetained=!!(512&p),l.template=p>>10&3,l.refinementTemplate=p>>12&1,j+=2,!l.huffman){for(g=0===l.template?4:1,e=[],f=0;g>f;f++)e.push({x:m(i,j),y:m(i,j+1)}),j+=2;l.at=e}if(l.refinement&&!l.refinementTemplate){for(e=[],f=0;2>f;f++)e.push({x:m(i,j),y:m(i,j+1)}),j+=2;l.refinementAt=e}l.numberOfExportedSymbols=o(i,j),j+=4,l.numberOfNewSymbols=o(i,j),j+=4,d=[l,h.number,h.referredTo,i,j,k];break;case 6:case 7:var q={};q.info=r(i,j),j+=C;var s=n(i,j);if(j+=2,q.huffman=!!(1&s),q.refinement=!!(2&s),q.stripSize=1<<(s>>2&3),q.referenceCorner=s>>4&3,q.transposed=!!(64&s),q.combinationOperator=s>>7&3,q.defaultPixelValue=s>>9&1,q.dsOffset=s<<17>>27,q.refinementTemplate=s>>15&1,q.huffman){var t=n(i,j);j+=2,q.huffmanFS=3&t,q.huffmanDS=t>>2&3,q.huffmanDT=t>>4&3,q.huffmanRefinementDW=t>>6&3,q.huffmanRefinementDH=t>>8&3,q.huffmanRefinementDX=t>>10&3,q.huffmanRefinementDY=t>>12&3,q.huffmanRefinementSizeSelector=!!(14&t)}if(q.refinement&&!q.refinementTemplate){for(e=[],f=0;2>f;f++)e.push({x:m(i,j),y:m(i,j+1)}),j+=2;q.refinementAt=e}q.numberOfSymbolInstances=o(i,j),j+=4,q.huffman&&c("JBIG2 error: huffman is not supported"),d=[q,h.referredTo,i,j,k];break;case 38:case 39:var u={};u.info=r(i,j),j+=C;var v=i[j++];if(u.mmr=!!(1&v),u.template=v>>1&3,u.prediction=!!(8&v),!u.mmr){for(g=0===u.template?4:1,e=[],f=0;g>f;f++)e.push({x:m(i,j),y:m(i,j+1)}),j+=2;u.at=e}d=[u,i,j,k];break;case 48:var w={width:o(i,j),height:o(i,j+4),resolutionX:o(i,j+8),resolutionY:o(i,j+12)};4294967295===w.height&&delete w.height;var x=i[j+16];n(i,j+17);w.lossless=!!(1&x),w.refinement=!!(2&x),w.defaultPixelValue=x>>2&1,w.combinationOperator=x>>3&3,w.requiresBuffer=!!(32&x),w.combinationOperatorOverride=!!(64&x),d=[w];break;case 49:break;case 50:break;case 51:break;case 62:break;default:c("JBIG2 error: segment type "+h.typeName+"("+h.type+") is not implemented")}var y="on"+h.typeName;y in b&&b[y].apply(b,d)}function t(a,b){for(var c=0,d=a.length;d>c;c++)s(a[c],b)}function u(a){for(var b=new v,c=0,d=a.length;d>c;c++){var e=a[c],f=q({},e.data,e.start,e.end);t(f,b)}return b.buffer}function v(){}function w(){}a.prototype={getContexts:function(a){return a in this?this[a]:this[a]=new Int8Array(65536)}},b.prototype={get decoder(){var a=new fd(this.data,this.start,this.end);return g(this,"decoder",a)},get contextCache(){var b=new a;return g(this,"contextCache",b)}};var x=["SymbolDictionary",null,null,null,"IntermediateTextRegion",null,"ImmediateTextRegion","ImmediateLosslessTextRegion",null,null,null,null,null,null,null,null,"patternDictionary",null,null,null,"IntermediateHalftoneRegion",null,"ImmediateHalftoneRegion","ImmediateLosslessHalftoneRegion",null,null,null,null,null,null,null,null,null,null,null,null,"IntermediateGenericRegion",null,"ImmediateGenericRegion","ImmediateLosslessGenericRegion","IntermediateGenericRefinementRegion",null,"ImmediateGenericRefinementRegion","ImmediateLosslessGenericRefinementRegion",null,null,null,null,"PageInformation","EndOfPage","EndOfStripe","EndOfFile","Profiles","Tables",null,null,null,null,null,null,null,null,"Extension"],y=[[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:2,y:-1},{x:-4,y:0},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}],[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:2,y:-2},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:2,y:-1},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}],[{x:-1,y:-2},{x:0,y:-2},{x:1,y:-2},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-2,y:0},{x:-1,y:0}],[{x:-3,y:-1},{x:-2,y:-1},{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-4,y:0},{x:-3,y:0},{x:-2,y:0},{x:-1,y:0}]],z=[{coding:[{x:0,y:-1},{x:1,y:-1},{x:-1,y:0}],reference:[{x:0,y:-1},{x:1,y:-1},{x:-1,y:0},{x:0,y:0},{x:1,y:0},{x:-1,y:1},{x:0,y:1},{x:1,y:1}]},{coding:[{x:-1,y:-1},{x:0,y:-1},{x:1,y:-1},{x:-1,y:0}],reference:[{x:0,y:-1},{x:-1,y:0},{x:0,y:0},{x:1,y:0},{x:0,y:1},{x:1,y:1}]}],A=[39717,1941,229,405],B=[32,8],C=17;return v.prototype={onPageInformation:function(a){this.currentPageInfo=a;var b=a.width+7>>3,c=new Uint8Array(b*a.height);if(a.defaultPixelValue)for(var d=0,e=c.length;e>d;d++)c[d]=255;this.buffer=c},drawBitmap:function(a,b){var d,e,f,g,h=this.currentPageInfo,i=a.width,j=a.height,k=h.width+7>>3,l=h.combinationOperatorOverride?a.combinationOperator:h.combinationOperator,m=this.buffer,n=128>>(7&a.x),o=a.y*k+(a.x>>3);switch(l){case 0:for(d=0;j>d;d++){for(f=n,g=o,e=0;i>e;e++)b[d][e]&&(m[g]|=f),f>>=1,f||(f=128,g++);o+=k}break;case 2:for(d=0;j>d;d++){for(f=n,g=o,e=0;i>e;e++)b[d][e]&&(m[g]^=f),f>>=1,f||(f=128,g++);o+=k}break;default:c("JBIG2 error: operator "+l+" is not supported")}},onImmediateGenericRegion:function(a,c,d,e){var f=a.info,g=new b(c,d,e),i=h(a.mmr,f.width,f.height,a.template,a.prediction,null,a.at,g);this.drawBitmap(f,i)},onImmediateLosslessGenericRegion:function(){this.onImmediateGenericRegion.apply(this,arguments)},onSymbolDictionary:function(a,d,e,f,g,h){var i;a.huffman&&c("JBIG2 error: huffman is not supported");var k=this.symbols;k||(this.symbols=k={});for(var l=[],m=0,n=e.length;n>m;m++)l=l.concat(k[e[m]]);var o=new b(f,g,h);k[d]=j(a.huffman,a.refinement,l,a.numberOfNewSymbols,a.numberOfExportedSymbols,i,a.template,a.at,a.refinementTemplate,a.refinementAt,o)},onImmediateTextRegion:function(a,c,d,e,f){for(var g,h=a.info,i=this.symbols,j=[],m=0,n=c.length;n>m;m++)j=j.concat(i[c[m]]);var o=l(j.length),p=new b(d,e,f),q=k(a.huffman,a.refinement,h.width,h.height,a.defaultPixelValue,a.numberOfSymbolInstances,a.stripSize,j,o,a.transposed,a.dsOffset,a.referenceCorner,a.combinationOperator,g,a.refinementTemplate,a.refinementAt,p);this.drawBitmap(h,q)},onImmediateLosslessTextRegion:function(){this.onImmediateTextRegion.apply(this,arguments)}},w.prototype={parseChunks:function(a){return u(a)}},w}(),jd=(PDFJS.bidi=function(){function a(a){return 0!==(1&a)}function b(a){return 0===(1&a)}function c(a,b,c){for(var d=b,e=a.length;e>d;++d)if(a[d]!==c)return d;return d}function d(a,b,c,d){for(var e=b;c>e;++e)a[e]=d}function e(a,b,c){for(var d=b,e=c-1;e>d;++d,--e){var f=a[d];a[d]=a[e],a[e]=f}}function f(a,b,c){return{str:a,dir:c?"ttb":b?"ltr":"rtl"}}function g(g,l,m){var n=!0,o=g.length;if(0===o||m)return f(g,n,m);j.length=o,k.length=o;var p,q,r=0;for(p=0;o>p;++p){j[p]=g.charAt(p);var s=g.charCodeAt(p),t="L";255>=s?t=h[s]:s>=1424&&1524>=s?t="R":s>=1536&&1791>=s?t=i[255&s]:s>=1792&&2220>=s&&(t="AL"),("R"===t||"AL"===t||"AN"===t)&&r++,k[p]=t}if(0===r)return n=!0,f(g,n);-1===l&&(.3>o/r?(n=!0,l=0):(n=!1,l=1));var u=[];for(p=0;o>p;++p)u[p]=l;var v=a(l)?"R":"L",w=v,x=w,y=w;for(p=0;o>p;++p)"NSM"===k[p]?k[p]=y:y=k[p];y=w;var z;for(p=0;o>p;++p)z=k[p],"EN"===z?k[p]="AL"===y?"AN":"EN":("R"===z||"L"===z||"AL"===z)&&(y=z);for(p=0;o>p;++p)z=k[p],"AL"===z&&(k[p]="R");for(p=1;o-1>p;++p)"ES"===k[p]&&"EN"===k[p-1]&&"EN"===k[p+1]&&(k[p]="EN"),"CS"!==k[p]||"EN"!==k[p-1]&&"AN"!==k[p-1]||k[p+1]!==k[p-1]||(k[p]=k[p-1]);for(p=0;o>p;++p)if("EN"===k[p]){var A;for(A=p-1;A>=0&&"ET"===k[A];--A)k[A]="EN";for(A=p+1;o>A&&"ET"===k[A];--A)k[A]="EN"}for(p=0;o>p;++p)z=k[p],("WS"===z||"ES"===z||"ET"===z||"CS"===z)&&(k[p]="ON");for(y=w,p=0;o>p;++p)z=k[p],"EN"===z?k[p]="L"===y?"L":"EN":("R"===z||"L"===z)&&(y=z);for(p=0;o>p;++p)if("ON"===k[p]){var B=c(k,p+1,"ON"),C=w;p>0&&(C=k[p-1]);var D=x;o>B+1&&(D=k[B+1]),"L"!==C&&(C="R"),"L"!==D&&(D="R"),C===D&&d(k,p,B,C),p=B-1}for(p=0;o>p;++p)"ON"===k[p]&&(k[p]=v);for(p=0;o>p;++p)z=k[p],b(u[p])?"R"===z?u[p]+=1:("AN"===z||"EN"===z)&&(u[p]+=2):("L"===z||"AN"===z||"EN"===z)&&(u[p]+=1);var E,F=-1,G=99;for(p=0,q=u.length;q>p;++p)E=u[p],E>F&&(F=E),G>E&&a(E)&&(G=E);for(E=F;E>=G;--E){var H=-1;for(p=0,q=u.length;q>p;++p)u[p]<E?H>=0&&(e(j,H,p),H=-1):0>H&&(H=p);H>=0&&e(j,H,u.length)}for(p=0,q=j.length;q>p;++p){var I=j[p];("<"===I||">"===I)&&(j[p]="")}return f(j.join(""),n)}var h=["BN","BN","BN","BN","BN","BN","BN","BN","BN","S","B","S","WS","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","B","B","B","S","WS","ON","ON","ET","ET","ET","ON","ON","ON","ON","ON","ON","CS","ON","CS","ON","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","ON","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","BN","BN","BN","BN","BN","BN","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","CS","ON","ET","ET","ET","ET","ON","ON","ON","ON","L","ON","ON","ON","ON","ON","ET","ET","EN","EN","ON","L","ON","ON","ON","EN","L","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L"],i=["AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","CS","AL","ON","ON","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","AL","AL","AL","AL","AL","AN","AN","AN","AN","AN","AN","AN","AN","AN","AN","ET","AN","AN","AL","AL","AL","NSM","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","ON","NSM","NSM","NSM","NSM","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL"],j=[],k=[];return g}(),function(a){function b(a){var b=3285377520;this.h1=a?4294967295&a:b,this.h2=a?4294967295&a:b}var c=4294901760,d=65535,e=!1;try{new Uint32Array(new Uint8Array(5).buffer,0,1)}catch(f){e=!0}return b.prototype={update:function(a){var b,f=e;if("string"==typeof a){var g=new Uint8Array(2*a.length),h=0;for(b=0;b<a.length;b++){var i=a.charCodeAt(b);255>=i?g[h++]=i:(g[h++]=i>>>8,g[h++]=255&i)}}else if(a instanceof Uint8Array)g=a,h=g.length;else{if(!("object"==typeof a&&"length"in a))throw new Error("Wrong data format in MurmurHash3_64_update. Input must be a string or array.");g=a,h=g.length,f=!0}var j=h>>2,k=h-4*j,l=f?new la(g,j):new Uint32Array(g.buffer,0,j),m=0,n=0,o=this.h1,p=this.h2,q=3432918353,r=461845907,s=q&d,t=r&d;for(b=0;j>b;b++)1&b?(m=l[b],m=m*q&c|m*s&d,m=m<<15|m>>>17,m=m*r&c|m*t&d,o^=m,o=o<<13|o>>>19,o=5*o+3864292196):(n=l[b],n=n*q&c|n*s&d,n=n<<15|n>>>17,n=n*r&c|n*t&d,p^=n,p=p<<13|p>>>19,p=5*p+3864292196);switch(m=0,k){case 3:m^=g[4*j+2]<<16;case 2:m^=g[4*j+1]<<8;case 1:m^=g[4*j],m=m*q&c|m*s&d,m=m<<15|m>>>17,m=m*r&c|m*t&d,1&j?o^=m:p^=m}return this.h1=o,this.h2=p,this},hexdigest:function(){var a=this.h1,b=this.h2;a^=b>>>1,a=3981806797*a&c|36045*a&d,b=4283543511*b&c|(2950163797*(b<<16|a>>>16)&c)>>>16,a^=b>>>1,a=444984403*a&c|60499*a&d,b=3301882366*b&c|(3120437893*(b<<16|a>>>16)&c)>>>16,a^=b>>>1;for(var e=0,f=[a,b],g="";e<f.length;e++){for(var h=(f[e]>>>0).toString(16);h.length<8;)h="0"+h;g+=h}return g}},b}())}.call("undefined"==typeof window?this:window),PDFJS.workerSrc||"undefined"==typeof document||(PDFJS.workerSrc=function(){"use strict";var a=document.body||document.getElementsByTagName("head")[0],b=a.lastChild.src;return b&&b.replace(/\.js$/i,".worker.js")}()),function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.slice(0,n.length-1).concat(a),k=0;k<a.length;k+=1)if(m=a[k],"."===m)a.splice(k,1),k-=1;else if(".."===m){if(1===k&&(".."===a[2]||".."===a[0]))break;k>0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=v.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),n.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n<c.length;n+=1)if(m=o(c[n],f),k=m.f,"require"===k)u[n]=p.require(a);else if("exports"===k)u[n]=p.exports(a),s=!0;else if("module"===k)h=u[n]=p.module(a);else if(e(q,k)||e(r,k)||e(t,k))u[n]=j(k);else{if(!m.p)throw new Error(a+" missing "+k);m.p.load(m.n,g(f,!0),i(k),{}),u[n]=q[k]}l=d?d.apply(q[a],u):void 0,a&&(h&&h.exports!==b&&h.exports!==q[a]?q[a]=h.exports:l===b&&s||(q[a]=l))}else a&&(q[a]=d)},a=c=n=function(a,c,d,e,f){if("string"==typeof a)return p[a]?p[a](c):j(o(a,c).f);if(!a.splice){if(s=a,s.deps&&n(s.deps,s.callback),!c)return;c.splice?(a=c,c=d,d=null):a=b}return c=c||function(){},"function"==typeof d&&(d=e,e=f),e?m(b,a,c,d):setTimeout(function(){m(b,a,c,d)},4),n},n.config=function(a){return n(a)},a._defined=q,d=function(a,b,c){if("string"!=typeof a)throw new Error("See almond README: incorrect module build, no module name");b.splice||(c=b,b=[]),e(q,a)||e(r,a)||(r[a]=[a,b,c])},d.amd={jQuery:!0}}(),b.requirejs=a,b.require=c,b.define=d}}(),b.define("almond",function(){}),b.define("jquery",[],function(){var b=a||$;return null==b&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),b}),b.define("select2/utils",["jquery"],function(a){function b(a){var b=a.prototype,c=[];for(var d in b){var e=b[d];"function"==typeof e&&"constructor"!==d&&c.push(d)}return c}var c={};c.Extend=function(a,b){function c(){this.constructor=a}var d={}.hasOwnProperty;for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},c.Decorate=function(a,c){function d(){var b=Array.prototype.unshift,d=c.prototype.constructor.length,e=a.prototype.constructor;d>0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h<g.length;h++){var i=g[h];d.prototype[i]=a.prototype[i]}for(var j=(function(a){var b=function(){};a in d.prototype&&(b=d.prototype[a]);var e=c.prototype[a];return function(){var a=Array.prototype.unshift;return a.call(arguments,b),e.apply(this,arguments)}}),k=0;k<f.length;k++){var l=f[k];d.prototype[l]=j(l)}return d};var d=function(){this.listeners={}};return d.prototype.on=function(a,b){this.listeners=this.listeners||{},a in this.listeners?this.listeners[a].push(b):this.listeners[a]=[b]},d.prototype.trigger=function(a){var b=Array.prototype.slice;this.listeners=this.listeners||{},a in this.listeners&&this.invoke(this.listeners[a],b.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},d.prototype.invoke=function(a,b){for(var c=0,d=a.length;d>c;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e<c.length;e++){var f=c[e];f=f.substring(0,1).toLowerCase()+f.substring(1),f in d||(d[f]={}),e==c.length-1&&(d[f]=a[b]),d=d[f]}delete a[b]}}return a},c.hasScroll=function(b,c){var d=a(c),e=c.style.overflowX,f=c.style.overflowY;return e!==f||"hidden"!==f&&"visible"!==f?"scroll"===e||"scroll"===f?!0:d.innerHeight()<c.scrollHeight||d.innerWidth()<c.scrollWidth:!1},c.escapeMarkup=function(a){var b={"\\":"&#92;","&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<ul class="select2-results__options" role="tree"></ul>');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('<li role="treeitem" aria-live="assertive" class="select2-results__option"></li>'),e=this.options.get("translations").get(b.message);
+d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c<a.results.length;c++){var d=a.results[c],e=this.option(d);b.push(e)}this.$results.append(b)},c.prototype.position=function(a,b){var c=b.find(".select2-results");c.append(a)},c.prototype.sort=function(a){var b=this.options.get("sorter");return b(a)},c.prototype.setClasses=function(){var b=this;this.data.current(function(c){var d=a.map(c,function(a){return a.id.toString()}),e=b.$results.find(".select2-results__option[aria-selected]");e.each(function(){var b=a(this),c=a.data(this,"data"),e=""+c.id;null!=c.element&&c.element.selected||null==c.element&&a.inArray(e,d)>-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")});var f=e.filter("[aria-selected=true]");f.length>0?f.first().trigger("mouseenter"):e.first().trigger("mouseenter")})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";a(h);this.template(b,h);for(var i=[],j=0;j<b.children.length;j++){var k=b.children[j],l=this.option(k);i.push(l)}var m=a("<ul></ul>",{"class":"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b,c){var d=this,e=b.id+"-results";this.$results.attr("id",e),b.on("results:all",function(a){d.clear(),d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("results:append",function(a){d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("query",function(a){d.hideMessages(),d.showLoading(a)}),b.on("select",function(){b.isOpen()&&d.setClasses()}),b.on("unselect",function(){b.isOpen()&&d.setClasses()}),b.on("open",function(){d.$results.attr("aria-expanded","true"),d.$results.attr("aria-hidden","false"),d.setClasses(),d.ensureHighlightVisible()}),b.on("close",function(){d.$results.attr("aria-expanded","false"),d.$results.attr("aria-hidden","true"),d.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=d.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=d.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?d.trigger("close",{}):d.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var e=c-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top,h=f.offset().top,i=d.$results.scrollTop()+(h-g);0===e?d.$results.scrollTop(0):0>h-g&&d.$results.scrollTop(i)}}),b.on("results:next",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a),e=c+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top+d.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=d.$results.scrollTop()+h-g;0===e?d.$results.scrollTop(0):h>g&&d.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){d.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=d.$results.scrollTop(),c=d.$results.get(0).scrollHeight-d.$results.scrollTop()+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=d.$results.height();e?(d.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(d.$results.scrollTop(d.$results.get(0).scrollHeight-d.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var c=a(this),e=c.data("data");return"true"===c.attr("aria-selected")?void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{})):void d.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(b){var c=a(this).data("data");d.getHighlightedResults().removeClass("select2-results__option--highlighted"),d.trigger("results:focus",{data:c,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".select2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){var a={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return a}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('<span class="select2-selection" role="combobox"  aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a,b){var d=this,e=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("selection:update",function(a){c.update(a.data)})},e.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},e.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},e.prototype.selectionContainer=function(){return a("<span></span>")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.prop("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('<ul class="select2-selection__rendered"></ul>'),a},d.prototype.bind=function(b,c){var e=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){e.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!e.options.get("disabled")){var c=a(this),d=c.parent(),f=d.data("data");e.trigger("unselect",{originalEvent:b,data:f})}})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},d.prototype.selectionContainer=function(){var b=a('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">&times;</span></li>');return b},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d<a.length;d++){var e=a[d],f=this.selectionContainer(),g=this.display(e,f);f.append(g),f.prop("title",e.title||e.text),f.data("data",e),b.push(f)}var h=this.$selection.find(".select2-selection__rendered");c.appendMany(h,b)}},d}),b.define("select2/selection/placeholder",["../utils"],function(a){function b(a,b,c){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c)}return b.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},b.prototype.createPlaceholder=function(a,b){var c=this.selectionContainer();return c.html(this.display(b)),c.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),c},b.prototype.update=function(a,b){var c=1==b.length&&b[0].id!=this.placeholder.id,d=b.length>1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},b}),b.define("select2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e<d.length;e++){var f={data:d[e]};if(this.trigger("unselect",f),f.prevented)return}this.$element.val(this.placeholder.id).trigger("change"),this.trigger("toggle",{})}}},c.prototype._handleKeyboardClear=function(a,c,d){d.isOpen()||(c.which==b.DELETE||c.which==b.BACKSPACE)&&this._handleClear(c)},c.prototype.update=function(b,c){if(b.call(this,c),!(this.$selection.find(".select2-selection__placeholder").length>0||0===c.length)){var d=a('<span class="select2-selection__clear">&times;</span>');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" aria-autocomplete="list" /></li>');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.removeAttr("aria-activedescendant"),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),b.on("results:focus",function(a){e.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}});var f=document.documentMode,g=f&&11>=f;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){return g?void e.$selection.off("input.search input.searchcheck"):void e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(g&&"input"===a.type)return void e.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){var a={"Ⓐ":"A","Ａ":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","Ｂ":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","Ｃ":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","Ｄ":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","Ǳ":"DZ","Ǆ":"DZ","ǲ":"Dz","ǅ":"Dz","Ⓔ":"E","Ｅ":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","Ｆ":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","Ｇ":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","Ｈ":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","Ｉ":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","Ｊ":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","Ｋ":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","Ｌ":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","Ǉ":"LJ","ǈ":"Lj","Ⓜ":"M","Ｍ":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","Ｎ":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","Ǌ":"NJ","ǋ":"Nj","Ⓞ":"O","Ｏ":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","Ｐ":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Ｑ":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","Ｒ":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","Ｓ":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","Ｔ":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","Ｕ":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","Ｖ":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","Ｗ":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","Ｘ":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Ｙ":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Ｚ":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","ａ":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","ｂ":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","ｃ":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","ｄ":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","ǳ":"dz","ǆ":"dz","ⓔ":"e","ｅ":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","ｆ":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","ｇ":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","ｈ":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","ｉ":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","ｊ":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","ｋ":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","ｌ":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","ǉ":"lj","ⓜ":"m","ｍ":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","ｎ":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ŉ":"n","ꞑ":"n","ꞥ":"n","ǌ":"nj","ⓞ":"o","ｏ":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","ｐ":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","ｑ":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","ｒ":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","ｓ":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","ｔ":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","ｕ":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","ｖ":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","ｗ":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","ｘ":"x","ẋ":"x","ẍ":"x","ⓨ":"y","ｙ":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","ｚ":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f<a.length;f++){var g=a[f].id;-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")});else{var d=a.id;this.$element.val(d),this.$element.trigger("change")}},d.prototype.unselect=function(a){var b=this;if(this.$element.prop("multiple"))return a.selected=!1,c(a.element).is("option")?(a.element.selected=!1,void this.$element.trigger("change")):void this.current(function(d){for(var e=[],f=0;f<d.length;f++){var g=d[f].id;g!==a.id&&-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")})},d.prototype.bind=function(a,b){var c=this;this.container=a,a.on("select",function(a){c.select(a.data)}),a.on("unselect",function(a){c.unselect(a.data)})},d.prototype.destroy=function(){this.$element.find("*").each(function(){c.removeData(this,"data")})},d.prototype.query=function(a,b){var d=[],e=this,f=this.$element.children();f.each(function(){var b=c(this);if(b.is("option")||b.is("optgroup")){var f=e.item(b),g=e.matches(a,f);null!==g&&d.push(g)}}),b({results:d})},d.prototype.addOptions=function(a){b.appendMany(this.$element,a)},d.prototype.option=function(a){var b;a.children?(b=document.createElement("optgroup"),b.label=a.text):(b=document.createElement("option"),void 0!==b.textContent?b.textContent=a.text:b.innerText=a.text),a.id&&(b.value=a.id),a.disabled&&(b.disabled=!0),a.selected&&(b.selected=!0),a.title&&(b.title=a.title);var d=c(b),e=this._normalizeItem(a);return e.element=b,c.data(b,"data",e),d},d.prototype.item=function(a){var b={};if(b=c.data(a[0],"data"),null!=b)return b;if(a.is("option"))b={id:a.val(),text:a.text(),disabled:a.prop("disabled"),selected:a.prop("selected"),title:a.prop("title")};else if(a.is("optgroup")){b={text:a.prop("label"),children:[],title:a.prop("title")};for(var d=a.children("option"),e=[],f=0;f<d.length;f++){var g=c(d[f]),h=this.item(g);e.push(h)}b.children=e}return b=this._normalizeItem(b),b.element=a[0],c.data(a[0],"data",b),b},d.prototype._normalizeItem=function(a){c.isPlainObject(a)||(a={id:a,text:a}),a=c.extend({},{text:""},a);var b={selected:!1,disabled:!1};return null!=a.id&&(a.id=a.id.toString()),null!=a.text&&(a.text=a.text.toString()),null==a._resultId&&a.id&&null!=this.container&&(a._resultId=this.generateResultId(this.container,a)),c.extend({},b,a)},d.prototype.matches=function(a,b){var c=this.options.get("matcher");return c(a,b)},d}),b.define("select2/data/array",["./select","../utils","jquery"],function(a,b,c){function d(a,b){var c=b.get("data")||[];d.__super__.constructor.call(this,a,b),this.addOptions(this.convertToOptions(c))}return b.Extend(d,a),d.prototype.select=function(a){var b=this.$element.find("option").filter(function(b,c){return c.value==a.id.toString()});0===b.length&&(b=this.option(a),this.addOptions(b)),d.__super__.select.call(this,a)},d.prototype.convertToOptions=function(a){function d(a){return function(){return c(this).val()==a.id}}for(var e=this,f=this.$element.find("option"),g=f.map(function(){return e.item(c(this)).id}).get(),h=[],i=0;i<a.length;i++){var j=this._normalizeItem(a[i]);if(c.inArray(j.id,g)>=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},l,j),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&""!==a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");if(void 0!==f&&(this.createTag=f),b.call(this,c,d),a.isArray(e))for(var g=0;g<e.length;g++){var h=e[g],i=this._normalizeItem(h),j=this.option(i);this.$element.append(j)}}return b.prototype.query=function(a,b,c){function d(a,f){for(var g=a.results,h=0;h<g.length;h++){var i=g[h],j=null!=i.children&&!d({results:i.children},!0),k=i.text===b.term;if(k||j)return f?!1:(a.data=g,void c(a))}if(f)return!0;var l=e.createTag(b);if(null!=l){var m=e.option(l);m.attr("data-select2-tag",!0),e.addOptions([m]),e.insertTag(g,l)}a.results=g,c(a)}var e=this;return this._removeOldTags(),null==b.term||null!=b.page?void a.call(this,b,c):void a.call(this,b,d)},b.prototype.createTag=function(b,c){var d=a.trim(c.term);return""===d?null:{id:d,text:d}},b.prototype.insertTag=function(a,b,c){b.unshift(c)},b.prototype._removeOldTags=function(b){var c=(this._lastTag,this.$element.find("option[data-select2-tag]"));c.each(function(){this.selected||a(this).remove()})},b}),b.define("select2/data/tokenizer",["jquery"],function(a){function b(a,b,c){var d=c.get("tokenizer");void 0!==d&&(this.tokenizer=d),a.call(this,b,c)}return b.prototype.bind=function(a,b,c){a.call(this,b,c),this.$search=b.dropdown.$search||b.selection.$search||c.find(".select2-search__field")},b.prototype.query=function(a,b,c){function d(a){e.trigger("select",{data:a})}var e=this;b.term=b.term||"";var f=this.tokenizer(b,this.options,d);f.term!==b.term&&(this.$search.length&&(this.$search.val(f.term),this.$search.focus()),b.term=f.term),a.call(this,b,c)},b.prototype.tokenizer=function(b,c,d,e){for(var f=d.get("tokenSeparators")||[],g=c.term,h=0,i=this.createTag||function(a){return{id:a.term,text:a.term}};h<g.length;){var j=g[h];if(-1!==a.inArray(j,f)){var k=g.substr(0,h),l=a.extend({},c,{term:k}),m=i(l);null!=m?(e(m),g=g.substr(h+1)||"",h=0):h++}else h++}return{term:g}},b}),b.define("select2/data/minimumInputLength",[],function(){function a(a,b,c){this.minimumInputLength=c.get("minimumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",b.term.length<this.minimumInputLength?void this.trigger("results:message",{
+message:"inputTooShort",args:{minimum:this.minimumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumInputLength",[],function(){function a(a,b,c){this.maximumInputLength=c.get("maximumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",this.maximumInputLength>0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<span class="select2-dropdown"><span class="select2-results"></span></span>');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" /></span>');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('<li class="select2-results__option select2-results__option--load-more"role="treeitem" aria-disabled="true"></li>'),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a("<span></span>"),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(b){var c=a(this).data("select2-scroll-position");a(this).scrollTop(c.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id,h=this.$container.parents().filter(b.hasScroll);h.off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=(this.$container.position(),this.$container.offset());f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.top<f.top-h.height,k=i.bottom>f.bottom+h.height,l={left:f.left,top:g.bottom};if("static"!==this.$dropdownParent[0].style.position){var m=this.$dropdownParent.offset();l.top-=m.top,l.left-=m.left}c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d<b.length;d++){var e=b[d];e.children?c+=a(e.children):c++}return c}function b(a,b,c,d){this.minimumResultsForSearch=c.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),a.call(this,b,c,d)}return b.prototype.showSearch=function(b,c){return a(c.data.results)<this.minimumResultsForSearch?!1:b.call(this,c)},b}),b.define("select2/dropdown/selectOnClose",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("close",function(){d._handleSelectOnClose()})},a.prototype._handleSelectOnClose=function(){var a=this.getHighlightedResults();if(!(a.length<1)){var b=a.data("data");null!=b.element&&b.element.selected||null==b.element&&b.selected||this.trigger("select",{data:b})}},a}),b.define("select2/dropdown/closeOnSelect",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("select",function(a){d._selectTriggered(a)}),b.on("unselect",function(a){d._selectTriggered(a)})},a.prototype._selectTriggered=function(a,b){var c=b.originalEvent;c&&c.ctrlKey||this.trigger("close",{})},a}),b.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(a){var b=a.input.length-a.maximum,c="Please delete "+b+" character";return 1!=b&&(c+="s"),c},inputTooShort:function(a){var b=a.minimum-a.input.length,c="Please enter "+b+" or more characters";return c},loadingMore:function(){return"Loading more results…"},maximumSelected:function(a){var b="You can only select "+a.maximum+" item";return 1!=a.maximum&&(b+="s"),b},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),b.define("select2/defaults",["jquery","require","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./i18n/en"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C){function D(){this.reset()}D.prototype.apply=function(l){if(l=a.extend({},this.defaults,l),null==l.dataAdapter){if(null!=l.ajax?l.dataAdapter=o:null!=l.data?l.dataAdapter=n:l.dataAdapter=m,l.minimumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L<K.length;L++){var M=K[L],N={};try{N=k.loadPath(M)}catch(O){try{M=this.defaults.amdLanguageBase+M,N=k.loadPath(M)}catch(P){l.debug&&window.console&&console.warn&&console.warn('Select2: The language file for "'+M+'" could not be automatically loaded. A fallback will be used instead.');continue}}J.extend(N)}l.translations=J}else{var Q=k.loadPath(this.defaults.amdLanguageBase+"en"),R=new k(l.language);R.extend(Q),l.translations=R}return l},D.prototype.reset=function(){function b(a){function b(a){return l[a]||a}return a.replace(/[^\u0000-\u007E]/g,b)}function c(d,e){if(""===a.trim(d.term))return e;if(e.children&&e.children.length>0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this._sync=c.bind(this._syncAttributes,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._sync);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._sync)}),this._observer.observe(this.$element[0],{attributes:!0,subtree:!1})):this.$element[0].addEventListener&&this.$element[0].addEventListener("DOMAttrModified",b._sync,!1)},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),(null==a||0===a.length)&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._sync),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&this.$element[0].removeEventListener("DOMAttrModified",this._sync,!1),this._sync=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("jquery-mousewheel",["jquery"],function(a){return a}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults"],function(a,b,c,d){if(null==a.fn.select2){var e=["open","close","destroy"];a.fn.select2=function(b){if(b=b||{},"object"==typeof b)return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d;return this.each(function(){var c=a(this).data("select2");null==c&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2.");var e=Array.prototype.slice.call(arguments,1);d=c[b].apply(c,e)}),a.inArray(b,e)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c}),angular.module("sprintf",[]).filter("sprintf",function(){return function(){return sprintf.apply(null,arguments)}}).filter("fmt",["$filter",function(a){return a("sprintf")}]).filter("vsprintf",function(){return function(a,b){return vsprintf(a,b)}}).filter("vfmt",["$filter",function(a){return a("vsprintf")}]),function(a,b){"function"==typeof define&&define.amd?define(a):"undefined"!=typeof module&&"object"==typeof exports?module.exports=a():b.rangy=a()}(function(){function a(a,b){var c=typeof a[b];return c==u||!(c!=t||!a[b])||"unknown"==c}function b(a,b){return!(typeof a[b]!=t||!a[b])}function c(a,b){return typeof a[b]!=v}function d(a){return function(b,c){for(var d=c.length;d--;)if(!a(b,c[d]))return!1;return!0}}function e(a){return a&&A(a,z)&&C(a,y)}function f(a){return b(a,"body")?a.body:a.getElementsByTagName("body")[0]}function g(b){typeof console!=v&&a(console,"log")&&console.log(b)}function h(a,b){F&&b?alert(a):g(a)}function i(a){H.initialized=!0,H.supported=!1,h("Rangy is not supported in this environment. Reason: "+a,H.config.alertOnFail)}function j(a){h("Rangy warning: "+a,H.config.alertOnWarn)}function k(a){return a.message||a.description||String(a)}function l(){if(F&&!H.initialized){var b,c=!1,d=!1;a(document,"createRange")&&(b=document.createRange(),A(b,x)&&C(b,w)&&(c=!0));var h=f(document);if(!h||"body"!=h.nodeName.toLowerCase())return void i("No body element found");if(h&&a(h,"createTextRange")&&(b=h.createTextRange(),e(b)&&(d=!0)),!c&&!d)return void i("Neither Range nor TextRange are available");H.initialized=!0,H.features={implementsDomRange:c,implementsTextRange:d};var j,l;for(var m in E)(j=E[m])instanceof p&&j.init(j,H);for(var n=0,o=K.length;o>n;++n)try{K[n](H)}catch(q){l="Rangy init listener threw an exception. Continuing. Detail: "+k(q),g(l)}}}function m(a,b,c){c&&(a+=" in module "+c.name),H.warn("DEPRECATED: "+a+" is deprecated. Please use "+b+" instead.")}function n(a,b,c,d){a[b]=function(){return m(b,c,d),a[c].apply(a,G.toArray(arguments))}}function o(a){a=a||window,l();for(var b=0,c=L.length;c>b;++b)L[b](a)}function p(a,b,c){this.name=a,this.dependencies=b,this.initialized=!1,this.supported=!1,this.initializer=c}function q(a,b,c){var d=new p(a,b,function(b){if(!b.initialized){b.initialized=!0;try{c(H,b),b.supported=!0}catch(d){var e="Module '"+a+"' failed to load: "+k(d);g(e),d.stack&&g(d.stack)}}});return E[a]=d,d}function r(){}function s(){}var t="object",u="function",v="undefined",w=["startContainer","startOffset","endContainer","endOffset","collapsed","commonAncestorContainer"],x=["setStart","setStartBefore","setStartAfter","setEnd","setEndBefore","setEndAfter","collapse","selectNode","selectNodeContents","compareBoundaryPoints","deleteContents","extractContents","cloneContents","insertNode","surroundContents","cloneRange","toString","detach"],y=["boundingHeight","boundingLeft","boundingTop","boundingWidth","htmlText","text"],z=["collapse","compareEndPoints","duplicate","moveToElementText","parentElement","select","setEndPoint","getBoundingClientRect"],A=d(a),B=d(b),C=d(c),D=[].forEach?function(a,b){a.forEach(b)}:function(a,b){for(var c=0,d=a.length;d>c;++c)b(a[c],c)},E={},F=typeof window!=v&&typeof document!=v,G={isHostMethod:a,isHostObject:b,isHostProperty:c,areHostMethods:A,areHostObjects:B,areHostProperties:C,isTextRange:e,getBody:f,forEach:D},H={version:"1.3.0",initialized:!1,isBrowser:F,supported:!0,util:G,features:{},modules:E,config:{alertOnFail:!1,alertOnWarn:!1,preferTextRange:!1,autoInitialize:typeof rangyAutoInitialize==v?!0:rangyAutoInitialize}};H.fail=i,H.warn=j;var I;({}).hasOwnProperty?(G.extend=I=function(a,b,c){var d,e;for(var f in b)b.hasOwnProperty(f)&&(d=a[f],e=b[f],c&&null!==d&&"object"==typeof d&&null!==e&&"object"==typeof e&&I(d,e,!0),a[f]=e);return b.hasOwnProperty("toString")&&(a.toString=b.toString),a},G.createOptions=function(a,b){var c={};return I(c,b),a&&I(c,a),c}):i("hasOwnProperty not supported"),F||i("Rangy can only run in a browser"),function(){var a;if(F){var b=document.createElement("div");b.appendChild(document.createElement("span"));var c=[].slice;try{1==c.call(b.childNodes,0)[0].nodeType&&(a=function(a){return c.call(a,0)})}catch(d){}}a||(a=function(a){for(var b=[],c=0,d=a.length;d>c;++c)b[c]=a[c];return b}),G.toArray=a}();var J;F&&(a(document,"addEventListener")?J=function(a,b,c){a.addEventListener(b,c,!1)}:a(document,"attachEvent")?J=function(a,b,c){a.attachEvent("on"+b,c)}:i("Document does not have required addEventListener or attachEvent method"),G.addListener=J);var K=[];G.deprecationNotice=m,G.createAliasForDeprecatedMethod=n,H.init=l,H.addInitListener=function(a){H.initialized?a(H):K.push(a)};var L=[];H.addShimListener=function(a){L.push(a)},F&&(H.shim=H.createMissingNativeApi=o,n(H,"createMissingNativeApi","shim")),p.prototype={init:function(){for(var a,b,c=this.dependencies||[],d=0,e=c.length;e>d;++d){if(b=c[d],a=E[b],!(a&&a instanceof p))throw new Error("required module '"+b+"' not found");if(a.init(),!a.supported)throw new Error("required module '"+b+"' not supported")}this.initializer(this)},fail:function(a){throw this.initialized=!0,this.supported=!1,new Error(a)},warn:function(a){H.warn("Module "+this.name+": "+a)},deprecationNotice:function(a,b){H.warn("DEPRECATED: "+a+" in module "+this.name+" is deprecated. Please use "+b+" instead")},createError:function(a){return new Error("Error in Rangy "+this.name+" module: "+a)}},H.createModule=function(a){var b,c;2==arguments.length?(b=arguments[1],c=[]):(b=arguments[2],c=arguments[1]);var d=q(a,c,b);H.initialized&&H.supported&&d.init()},H.createCoreModule=function(a,b,c){q(a,b,c)},H.RangePrototype=r,H.rangePrototype=new r,H.selectionPrototype=new s,H.createCoreModule("DomUtil",[],function(a,b){function c(a){var b;return typeof a.namespaceURI==F||null===(b=a.namespaceURI)||"http://www.w3.org/1999/xhtml"==b}function d(a){var b=a.parentNode;return 1==b.nodeType?b:null}function e(a){for(var b=0;a=a.previousSibling;)++b;return b}function f(a){switch(a.nodeType){case 7:case 10:return 0;case 3:case 8:return a.length;default:return a.childNodes.length}}function g(a,b){var c,d=[];for(c=a;c;c=c.parentNode)d.push(c);for(c=b;c;c=c.parentNode)if(K(d,c))return c;return null}function h(a,b,c){for(var d=c?b:b.parentNode;d;){if(d===a)return!0;d=d.parentNode}return!1}function i(a,b){return h(a,b,!0)}function j(a,b,c){for(var d,e=c?a:a.parentNode;e;){if(d=e.parentNode,d===b)return e;e=d}return null}function k(a){var b=a.nodeType;return 3==b||4==b||8==b}function l(a){if(!a)return!1;var b=a.nodeType;return 3==b||8==b}function m(a,b){var c=b.nextSibling,d=b.parentNode;return c?d.insertBefore(a,c):d.appendChild(a),a}function n(a,b,c){var d=a.cloneNode(!1);if(d.deleteData(0,b),a.deleteData(b,a.length-b),m(d,a),c)for(var f,g=0;f=c[g++];)f.node==a&&f.offset>b?(f.node=d,f.offset-=b):f.node==a.parentNode&&f.offset>e(a)&&++f.offset;return d}function o(a){if(9==a.nodeType)return a;if(typeof a.ownerDocument!=F)return a.ownerDocument;if(typeof a.document!=F)return a.document;if(a.parentNode)return o(a.parentNode);throw b.createError("getDocument: no document found for node")}function p(a){var c=o(a);if(typeof c.defaultView!=F)return c.defaultView;
+if(typeof c.parentWindow!=F)return c.parentWindow;throw b.createError("Cannot get a window object for node")}function q(a){if(typeof a.contentDocument!=F)return a.contentDocument;if(typeof a.contentWindow!=F)return a.contentWindow.document;throw b.createError("getIframeDocument: No Document object found for iframe element")}function r(a){if(typeof a.contentWindow!=F)return a.contentWindow;if(typeof a.contentDocument!=F)return a.contentDocument.defaultView;throw b.createError("getIframeWindow: No Window object found for iframe element")}function s(a){return a&&G.isHostMethod(a,"setTimeout")&&G.isHostObject(a,"document")}function t(a,b,c){var d;if(a?G.isHostProperty(a,"nodeType")?d=1==a.nodeType&&"iframe"==a.tagName.toLowerCase()?q(a):o(a):s(a)&&(d=a.document):d=document,!d)throw b.createError(c+"(): Parameter must be a Window object or DOM node");return d}function u(a){for(var b;b=a.parentNode;)a=b;return a}function v(a,c,d,f){var h,i,k,l,m;if(a==d)return c===f?0:f>c?-1:1;if(h=j(d,a,!0))return c<=e(h)?-1:1;if(h=j(a,d,!0))return e(h)<f?-1:1;if(i=g(a,d),!i)throw new Error("comparePoints error: nodes have no common ancestor");if(k=a===i?i:j(a,i,!0),l=d===i?i:j(d,i,!0),k===l)throw b.createError("comparePoints got to case 4 and childA and childB are the same!");for(m=i.firstChild;m;){if(m===k)return-1;if(m===l)return 1;m=m.nextSibling}}function w(a){var b;try{return b=a.parentNode,!1}catch(c){return!0}}function x(a){if(!a)return"[No node]";if(L&&w(a))return"[Broken node]";if(k(a))return'"'+a.data+'"';if(1==a.nodeType){var b=a.id?' id="'+a.id+'"':"";return"<"+a.nodeName+b+">[index:"+e(a)+",length:"+a.childNodes.length+"]["+(a.innerHTML||"[innerHTML not supported]").slice(0,25)+"]"}return a.nodeName}function y(a){for(var b,c=o(a).createDocumentFragment();b=a.firstChild;)c.appendChild(b);return c}function z(a,b,c){var d=H(a),e=a.createElement("div");e.contentEditable=""+!!c,b&&(e.innerHTML=b);var f=d.firstChild;return f?d.insertBefore(e,f):d.appendChild(e),e}function A(a){return a.parentNode.removeChild(a)}function B(a){this.root=a,this._next=a}function C(a){return new B(a)}function D(a,b){this.node=a,this.offset=b}function E(a){this.code=this[a],this.codeName=a,this.message="DOMException: "+this.codeName}var F="undefined",G=a.util,H=G.getBody;G.areHostMethods(document,["createDocumentFragment","createElement","createTextNode"])||b.fail("document missing a Node creation method"),G.isHostMethod(document,"getElementsByTagName")||b.fail("document missing getElementsByTagName method");var I=document.createElement("div");G.areHostMethods(I,["insertBefore","appendChild","cloneNode"]||!G.areHostObjects(I,["previousSibling","nextSibling","childNodes","parentNode"]))||b.fail("Incomplete Element implementation"),G.isHostProperty(I,"innerHTML")||b.fail("Element is missing innerHTML property");var J=document.createTextNode("test");G.areHostMethods(J,["splitText","deleteData","insertData","appendData","cloneNode"]||!G.areHostObjects(I,["previousSibling","nextSibling","childNodes","parentNode"])||!G.areHostProperties(J,["data"]))||b.fail("Incomplete Text Node implementation");var K=function(a,b){for(var c=a.length;c--;)if(a[c]===b)return!0;return!1},L=!1;!function(){var b=document.createElement("b");b.innerHTML="1";var c=b.firstChild;b.innerHTML="<br />",L=w(c),a.features.crashyTextNodes=L}();var M;typeof window.getComputedStyle!=F?M=function(a,b){return p(a).getComputedStyle(a,null)[b]}:typeof document.documentElement.currentStyle!=F?M=function(a,b){return a.currentStyle?a.currentStyle[b]:""}:b.fail("No means of obtaining computed style properties found"),B.prototype={_current:null,hasNext:function(){return!!this._next},next:function(){var a,b,c=this._current=this._next;if(this._current)if(a=c.firstChild)this._next=a;else{for(b=null;c!==this.root&&!(b=c.nextSibling);)c=c.parentNode;this._next=b}return this._current},detach:function(){this._current=this._next=this.root=null}},D.prototype={equals:function(a){return!!a&&this.node===a.node&&this.offset==a.offset},inspect:function(){return"[DomPosition("+x(this.node)+":"+this.offset+")]"},toString:function(){return this.inspect()}},E.prototype={INDEX_SIZE_ERR:1,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INVALID_STATE_ERR:11,INVALID_NODE_TYPE_ERR:24},E.prototype.toString=function(){return this.message},a.dom={arrayContains:K,isHtmlNamespace:c,parentElement:d,getNodeIndex:e,getNodeLength:f,getCommonAncestor:g,isAncestorOf:h,isOrIsAncestorOf:i,getClosestAncestorIn:j,isCharacterDataNode:k,isTextOrCommentNode:l,insertAfter:m,splitDataNode:n,getDocument:o,getWindow:p,getIframeWindow:r,getIframeDocument:q,getBody:H,isWindow:s,getContentDocument:t,getRootContainer:u,comparePoints:v,isBrokenNode:w,inspectNode:x,getComputedStyleProperty:M,createTestElement:z,removeNode:A,fragmentFromNodeChildren:y,createIterator:C,DomPosition:D},a.DOMException=E}),H.createCoreModule("DomRange",["DomUtil"],function(a,b){function c(a,b){return 3!=a.nodeType&&(P(a,b.startContainer)||P(a,b.endContainer))}function d(a){return a.document||Q(a.startContainer)}function e(a){return W(a.startContainer)}function f(a){return new L(a.parentNode,O(a))}function g(a){return new L(a.parentNode,O(a)+1)}function h(a,b,c){var d=11==a.nodeType?a.firstChild:a;return N(b)?c==b.length?J.insertAfter(a,b):b.parentNode.insertBefore(a,0==c?b:S(b,c)):c>=b.childNodes.length?b.appendChild(a):b.insertBefore(a,b.childNodes[c]),d}function i(a,b,c){if(z(a),z(b),d(b)!=d(a))throw new M("WRONG_DOCUMENT_ERR");var e=R(a.startContainer,a.startOffset,b.endContainer,b.endOffset),f=R(a.endContainer,a.endOffset,b.startContainer,b.startOffset);return c?0>=e&&f>=0:0>e&&f>0}function j(a){for(var b,c,e,f=d(a.range).createDocumentFragment();c=a.next();){if(b=a.isPartiallySelectedSubtree(),c=c.cloneNode(!b),b&&(e=a.getSubtreeIterator(),c.appendChild(j(e)),e.detach()),10==c.nodeType)throw new M("HIERARCHY_REQUEST_ERR");f.appendChild(c)}return f}function k(a,b,c){var d,e;c=c||{stop:!1};for(var f,g;f=a.next();)if(a.isPartiallySelectedSubtree()){if(b(f)===!1)return void(c.stop=!0);if(g=a.getSubtreeIterator(),k(g,b,c),g.detach(),c.stop)return}else for(d=J.createIterator(f);e=d.next();)if(b(e)===!1)return void(c.stop=!0)}function l(a){for(var b;a.next();)a.isPartiallySelectedSubtree()?(b=a.getSubtreeIterator(),l(b),b.detach()):a.remove()}function m(a){for(var b,c,e=d(a.range).createDocumentFragment();b=a.next();){if(a.isPartiallySelectedSubtree()?(b=b.cloneNode(!1),c=a.getSubtreeIterator(),b.appendChild(m(c)),c.detach()):a.remove(),10==b.nodeType)throw new M("HIERARCHY_REQUEST_ERR");e.appendChild(b)}return e}function n(a,b,c){var d,e=!(!b||!b.length),f=!!c;e&&(d=new RegExp("^("+b.join("|")+")$"));var g=[];return k(new p(a,!1),function(b){if((!e||d.test(b.nodeType))&&(!f||c(b))){var h=a.startContainer;if(b!=h||!N(h)||a.startOffset!=h.length){var i=a.endContainer;b==i&&N(i)&&0==a.endOffset||g.push(b)}}}),g}function o(a){var b="undefined"==typeof a.getName?"Range":a.getName();return"["+b+"("+J.inspectNode(a.startContainer)+":"+a.startOffset+", "+J.inspectNode(a.endContainer)+":"+a.endOffset+")]"}function p(a,b){if(this.range=a,this.clonePartiallySelectedTextNodes=b,!a.collapsed){this.sc=a.startContainer,this.so=a.startOffset,this.ec=a.endContainer,this.eo=a.endOffset;var c=a.commonAncestorContainer;this.sc===this.ec&&N(this.sc)?(this.isSingleCharacterDataNode=!0,this._first=this._last=this._next=this.sc):(this._first=this._next=this.sc!==c||N(this.sc)?T(this.sc,c,!0):this.sc.childNodes[this.so],this._last=this.ec!==c||N(this.ec)?T(this.ec,c,!0):this.ec.childNodes[this.eo-1])}}function q(a){return function(b,c){for(var d,e=c?b:b.parentNode;e;){if(d=e.nodeType,V(a,d))return e;e=e.parentNode}return null}}function r(a,b){if(ea(a,b))throw new M("INVALID_NODE_TYPE_ERR")}function s(a,b){if(!V(b,a.nodeType))throw new M("INVALID_NODE_TYPE_ERR")}function t(a,b){if(0>b||b>(N(a)?a.length:a.childNodes.length))throw new M("INDEX_SIZE_ERR")}function u(a,b){if(ca(a,!0)!==ca(b,!0))throw new M("WRONG_DOCUMENT_ERR")}function v(a){if(da(a,!0))throw new M("NO_MODIFICATION_ALLOWED_ERR")}function w(a,b){if(!a)throw new M(b)}function x(a,b){return b<=(N(a)?a.length:a.childNodes.length)}function y(a){return!!a.startContainer&&!!a.endContainer&&!(X&&(J.isBrokenNode(a.startContainer)||J.isBrokenNode(a.endContainer)))&&W(a.startContainer)==W(a.endContainer)&&x(a.startContainer,a.startOffset)&&x(a.endContainer,a.endOffset)}function z(a){if(!y(a))throw new Error("Range error: Range is not valid. This usually happens after DOM mutation. Range: ("+a.inspect()+")")}function A(a,b){z(a);var c=a.startContainer,d=a.startOffset,e=a.endContainer,f=a.endOffset,g=c===e;N(e)&&f>0&&f<e.length&&S(e,f,b),N(c)&&d>0&&d<c.length&&(c=S(c,d,b),g?(f-=d,e=c):e==c.parentNode&&f>=O(c)&&f++,d=0),a.setStartAndEnd(c,d,e,f)}function B(a){z(a);var b=a.commonAncestorContainer.parentNode.cloneNode(!1);return b.appendChild(a.cloneContents()),b.innerHTML}function C(a){a.START_TO_START=ka,a.START_TO_END=la,a.END_TO_END=ma,a.END_TO_START=na,a.NODE_BEFORE=oa,a.NODE_AFTER=pa,a.NODE_BEFORE_AND_AFTER=qa,a.NODE_INSIDE=ra}function D(a){C(a),C(a.prototype)}function E(a,b){return function(){z(this);var c,d,e=this.startContainer,f=this.startOffset,h=this.commonAncestorContainer,i=new p(this,!0);e!==h&&(c=T(e,h,!0),d=g(c),e=d.node,f=d.offset),k(i,v),i.reset();var j=a(i);return i.detach(),b(this,e,f,e,f),j}}function F(b,d){function e(a,b){return function(c){s(c,Z),s(W(c),$);var d=(a?f:g)(c);(b?h:i)(this,d.node,d.offset)}}function h(a,b,c){var e=a.endContainer,f=a.endOffset;(b!==a.startContainer||c!==a.startOffset)&&((W(b)!=W(e)||1==R(b,c,e,f))&&(e=b,f=c),d(a,b,c,e,f))}function i(a,b,c){var e=a.startContainer,f=a.startOffset;(b!==a.endContainer||c!==a.endOffset)&&((W(b)!=W(e)||-1==R(b,c,e,f))&&(e=b,f=c),d(a,e,f,b,c))}var j=function(){};j.prototype=a.rangePrototype,b.prototype=new j,K.extend(b.prototype,{setStart:function(a,b){r(a,!0),t(a,b),h(this,a,b)},setEnd:function(a,b){r(a,!0),t(a,b),i(this,a,b)},setStartAndEnd:function(){var a=arguments,b=a[0],c=a[1],e=b,f=c;switch(a.length){case 3:f=a[2];break;case 4:e=a[2],f=a[3]}d(this,b,c,e,f)},setBoundary:function(a,b,c){this["set"+(c?"Start":"End")](a,b)},setStartBefore:e(!0,!0),setStartAfter:e(!1,!0),setEndBefore:e(!0,!1),setEndAfter:e(!1,!1),collapse:function(a){z(this),a?d(this,this.startContainer,this.startOffset,this.startContainer,this.startOffset):d(this,this.endContainer,this.endOffset,this.endContainer,this.endOffset)},selectNodeContents:function(a){r(a,!0),d(this,a,0,a,U(a))},selectNode:function(a){r(a,!1),s(a,Z);var b=f(a),c=g(a);d(this,b.node,b.offset,c.node,c.offset)},extractContents:E(m,d),deleteContents:E(l,d),canSurroundContents:function(){z(this),v(this.startContainer),v(this.endContainer);var a=new p(this,!0),b=a._first&&c(a._first,this)||a._last&&c(a._last,this);return a.detach(),!b},splitBoundaries:function(){A(this)},splitBoundariesPreservingPositions:function(a){A(this,a)},normalizeBoundaries:function(){z(this);var a,b=this.startContainer,c=this.startOffset,e=this.endContainer,f=this.endOffset,g=function(a){var b=a.nextSibling;b&&b.nodeType==a.nodeType&&(e=a,f=a.length,a.appendData(b.data),Y(b))},h=function(a){var d=a.previousSibling;if(d&&d.nodeType==a.nodeType){b=a;var g=a.length;if(c=d.length,a.insertData(0,d.data),Y(d),b==e)f+=c,e=b;else if(e==a.parentNode){var h=O(a);f==h?(e=a,f=g):f>h&&f--}}},i=!0;if(N(e))f==e.length?g(e):0==f&&(a=e.previousSibling,a&&a.nodeType==e.nodeType&&(f=a.length,b==e&&(i=!1),a.appendData(e.data),Y(e),e=a));else{if(f>0){var j=e.childNodes[f-1];j&&N(j)&&g(j)}i=!this.collapsed}if(i){if(N(b))0==c?h(b):c==b.length&&(a=b.nextSibling,a&&a.nodeType==b.nodeType&&(e==a&&(e=b,f+=b.length),b.appendData(a.data),Y(a)));else if(c<b.childNodes.length){var k=b.childNodes[c];k&&N(k)&&h(k)}}else b=e,c=f;d(this,b,c,e,f)},collapseToPoint:function(a,b){r(a,!0),t(a,b),this.setStartAndEnd(a,b)}}),D(b)}function G(a){a.collapsed=a.startContainer===a.endContainer&&a.startOffset===a.endOffset,a.commonAncestorContainer=a.collapsed?a.startContainer:J.getCommonAncestor(a.startContainer,a.endContainer)}function H(a,b,c,d,e){a.startContainer=b,a.startOffset=c,a.endContainer=d,a.endOffset=e,a.document=J.getDocument(b),G(a)}function I(a){this.startContainer=a,this.startOffset=0,this.endContainer=a,this.endOffset=0,this.document=a,G(this)}var J=a.dom,K=a.util,L=J.DomPosition,M=a.DOMException,N=J.isCharacterDataNode,O=J.getNodeIndex,P=J.isOrIsAncestorOf,Q=J.getDocument,R=J.comparePoints,S=J.splitDataNode,T=J.getClosestAncestorIn,U=J.getNodeLength,V=J.arrayContains,W=J.getRootContainer,X=a.features.crashyTextNodes,Y=J.removeNode;p.prototype={_current:null,_next:null,_first:null,_last:null,isSingleCharacterDataNode:!1,reset:function(){this._current=null,this._next=this._first},hasNext:function(){return!!this._next},next:function(){var a=this._current=this._next;return a&&(this._next=a!==this._last?a.nextSibling:null,N(a)&&this.clonePartiallySelectedTextNodes&&(a===this.ec&&(a=a.cloneNode(!0)).deleteData(this.eo,a.length-this.eo),this._current===this.sc&&(a=a.cloneNode(!0)).deleteData(0,this.so))),a},remove:function(){var a,b,c=this._current;!N(c)||c!==this.sc&&c!==this.ec?c.parentNode&&Y(c):(a=c===this.sc?this.so:0,b=c===this.ec?this.eo:c.length,a!=b&&c.deleteData(a,b-a))},isPartiallySelectedSubtree:function(){var a=this._current;return c(a,this.range)},getSubtreeIterator:function(){var a;if(this.isSingleCharacterDataNode)a=this.range.cloneRange(),a.collapse(!1);else{a=new I(d(this.range));var b=this._current,c=b,e=0,f=b,g=U(b);P(b,this.sc)&&(c=this.sc,e=this.so),P(b,this.ec)&&(f=this.ec,g=this.eo),H(a,c,e,f,g)}return new p(a,this.clonePartiallySelectedTextNodes)},detach:function(){this.range=this._current=this._next=this._first=this._last=this.sc=this.so=this.ec=this.eo=null}};var Z=[1,3,4,5,7,8,10],$=[2,9,11],_=[5,6,10,12],aa=[1,3,4,5,7,8,10,11],ba=[1,3,4,5,7,8],ca=q([9,11]),da=q(_),ea=q([6,10,12]),fa=document.createElement("style"),ga=!1;try{fa.innerHTML="<b>x</b>",ga=3==fa.firstChild.nodeType}catch(ha){}a.features.htmlParsingConforms=ga;var ia=ga?function(a){var b=this.startContainer,c=Q(b);if(!b)throw new M("INVALID_STATE_ERR");var d=null;return 1==b.nodeType?d=b:N(b)&&(d=J.parentElement(b)),d=null===d||"HTML"==d.nodeName&&J.isHtmlNamespace(Q(d).documentElement)&&J.isHtmlNamespace(d)?c.createElement("body"):d.cloneNode(!1),d.innerHTML=a,J.fragmentFromNodeChildren(d)}:function(a){var b=d(this),c=b.createElement("body");return c.innerHTML=a,J.fragmentFromNodeChildren(c)},ja=["startContainer","startOffset","endContainer","endOffset","collapsed","commonAncestorContainer"],ka=0,la=1,ma=2,na=3,oa=0,pa=1,qa=2,ra=3;K.extend(a.rangePrototype,{compareBoundaryPoints:function(a,b){z(this),u(this.startContainer,b.startContainer);var c,d,e,f,g=a==na||a==ka?"start":"end",h=a==la||a==ka?"start":"end";return c=this[g+"Container"],d=this[g+"Offset"],e=b[h+"Container"],f=b[h+"Offset"],R(c,d,e,f)},insertNode:function(a){if(z(this),s(a,aa),v(this.startContainer),P(a,this.startContainer))throw new M("HIERARCHY_REQUEST_ERR");var b=h(a,this.startContainer,this.startOffset);this.setStartBefore(b)},cloneContents:function(){z(this);var a,b;if(this.collapsed)return d(this).createDocumentFragment();if(this.startContainer===this.endContainer&&N(this.startContainer))return a=this.startContainer.cloneNode(!0),a.data=a.data.slice(this.startOffset,this.endOffset),b=d(this).createDocumentFragment(),b.appendChild(a),b;var c=new p(this,!0);return a=j(c),c.detach(),a},canSurroundContents:function(){z(this),v(this.startContainer),v(this.endContainer);var a=new p(this,!0),b=a._first&&c(a._first,this)||a._last&&c(a._last,this);return a.detach(),!b},surroundContents:function(a){if(s(a,ba),!this.canSurroundContents())throw new M("INVALID_STATE_ERR");var b=this.extractContents();if(a.hasChildNodes())for(;a.lastChild;)a.removeChild(a.lastChild);h(a,this.startContainer,this.startOffset),a.appendChild(b),this.selectNode(a)},cloneRange:function(){z(this);for(var a,b=new I(d(this)),c=ja.length;c--;)a=ja[c],b[a]=this[a];return b},toString:function(){z(this);var a=this.startContainer;if(a===this.endContainer&&N(a))return 3==a.nodeType||4==a.nodeType?a.data.slice(this.startOffset,this.endOffset):"";var b=[],c=new p(this,!0);return k(c,function(a){(3==a.nodeType||4==a.nodeType)&&b.push(a.data)}),c.detach(),b.join("")},compareNode:function(a){z(this);var b=a.parentNode,c=O(a);if(!b)throw new M("NOT_FOUND_ERR");var d=this.comparePoint(b,c),e=this.comparePoint(b,c+1);return 0>d?e>0?qa:oa:e>0?pa:ra},comparePoint:function(a,b){return z(this),w(a,"HIERARCHY_REQUEST_ERR"),u(a,this.startContainer),R(a,b,this.startContainer,this.startOffset)<0?-1:R(a,b,this.endContainer,this.endOffset)>0?1:0},createContextualFragment:ia,toHtml:function(){return B(this)},intersectsNode:function(a,b){if(z(this),W(a)!=e(this))return!1;var c=a.parentNode,d=O(a);if(!c)return!0;var f=R(c,d,this.endContainer,this.endOffset),g=R(c,d+1,this.startContainer,this.startOffset);return b?0>=f&&g>=0:0>f&&g>0},isPointInRange:function(a,b){return z(this),w(a,"HIERARCHY_REQUEST_ERR"),u(a,this.startContainer),R(a,b,this.startContainer,this.startOffset)>=0&&R(a,b,this.endContainer,this.endOffset)<=0},intersectsRange:function(a){return i(this,a,!1)},intersectsOrTouchesRange:function(a){return i(this,a,!0)},intersection:function(a){if(this.intersectsRange(a)){var b=R(this.startContainer,this.startOffset,a.startContainer,a.startOffset),c=R(this.endContainer,this.endOffset,a.endContainer,a.endOffset),d=this.cloneRange();return-1==b&&d.setStart(a.startContainer,a.startOffset),1==c&&d.setEnd(a.endContainer,a.endOffset),d}return null},union:function(a){if(this.intersectsOrTouchesRange(a)){var b=this.cloneRange();return-1==R(a.startContainer,a.startOffset,this.startContainer,this.startOffset)&&b.setStart(a.startContainer,a.startOffset),1==R(a.endContainer,a.endOffset,this.endContainer,this.endOffset)&&b.setEnd(a.endContainer,a.endOffset),b}throw new M("Ranges do not intersect")},containsNode:function(a,b){return b?this.intersectsNode(a,!1):this.compareNode(a)==ra},containsNodeContents:function(a){return this.comparePoint(a,0)>=0&&this.comparePoint(a,U(a))<=0},containsRange:function(a){var b=this.intersection(a);return null!==b&&a.equals(b)},containsNodeText:function(a){var b=this.cloneRange();b.selectNode(a);var c=b.getNodes([3]);if(c.length>0){b.setStart(c[0],0);var d=c.pop();return b.setEnd(d,d.length),this.containsRange(b)}return this.containsNodeContents(a)},getNodes:function(a,b){return z(this),n(this,a,b)},getDocument:function(){return d(this)},collapseBefore:function(a){this.setEndBefore(a),this.collapse(!1)},collapseAfter:function(a){this.setStartAfter(a),this.collapse(!0)},getBookmark:function(b){var c=d(this),e=a.createRange(c);b=b||J.getBody(c),e.selectNodeContents(b);var f=this.intersection(e),g=0,h=0;return f&&(e.setEnd(f.startContainer,f.startOffset),g=e.toString().length,h=g+f.toString().length),{start:g,end:h,containerNode:b}},moveToBookmark:function(a){var b=a.containerNode,c=0;this.setStart(b,0),this.collapse(!0);for(var d,e,f,g,h=[b],i=!1,j=!1;!j&&(d=h.pop());)if(3==d.nodeType)e=c+d.length,!i&&a.start>=c&&a.start<=e&&(this.setStart(d,a.start-c),i=!0),i&&a.end>=c&&a.end<=e&&(this.setEnd(d,a.end-c),j=!0),c=e;else for(g=d.childNodes,f=g.length;f--;)h.push(g[f])},getName:function(){return"DomRange"},equals:function(a){return I.rangesEqual(this,a)},isValid:function(){return y(this)},inspect:function(){return o(this)},detach:function(){}}),F(I,H),K.extend(I,{rangeProperties:ja,RangeIterator:p,copyComparisonConstants:D,createPrototypeRange:F,inspect:o,toHtml:B,getRangeDocument:d,rangesEqual:function(a,b){return a.startContainer===b.startContainer&&a.startOffset===b.startOffset&&a.endContainer===b.endContainer&&a.endOffset===b.endOffset}}),a.DomRange=I}),H.createCoreModule("WrappedRange",["DomRange"],function(a,b){var c,d,e=a.dom,f=a.util,g=e.DomPosition,h=a.DomRange,i=e.getBody,j=e.getContentDocument,k=e.isCharacterDataNode;if(a.features.implementsDomRange&&!function(){function d(a){for(var b,c=m.length;c--;)b=m[c],a[b]=a.nativeRange[b];a.collapsed=a.startContainer===a.endContainer&&a.startOffset===a.endOffset}function g(a,b,c,d,e){var f=a.startContainer!==b||a.startOffset!=c,g=a.endContainer!==d||a.endOffset!=e,h=!a.equals(a.nativeRange);(f||g||h)&&(a.setEnd(d,e),a.setStart(b,c))}var k,l,m=h.rangeProperties;c=function(a){if(!a)throw b.createError("WrappedRange: Range must be specified");this.nativeRange=a,d(this)},h.createPrototypeRange(c,g),k=c.prototype,k.selectNode=function(a){this.nativeRange.selectNode(a),d(this)},k.cloneContents=function(){return this.nativeRange.cloneContents()},k.surroundContents=function(a){this.nativeRange.surroundContents(a),d(this)},k.collapse=function(a){this.nativeRange.collapse(a),d(this)},k.cloneRange=function(){return new c(this.nativeRange.cloneRange())},k.refresh=function(){d(this)},k.toString=function(){return this.nativeRange.toString()};var n=document.createTextNode("test");i(document).appendChild(n);var o=document.createRange();o.setStart(n,0),o.setEnd(n,0);try{o.setStart(n,1),k.setStart=function(a,b){this.nativeRange.setStart(a,b),d(this)},k.setEnd=function(a,b){this.nativeRange.setEnd(a,b),d(this)},l=function(a){return function(b){this.nativeRange[a](b),d(this)}}}catch(p){k.setStart=function(a,b){try{this.nativeRange.setStart(a,b)}catch(c){this.nativeRange.setEnd(a,b),this.nativeRange.setStart(a,b)}d(this)},k.setEnd=function(a,b){try{this.nativeRange.setEnd(a,b)}catch(c){this.nativeRange.setStart(a,b),this.nativeRange.setEnd(a,b)}d(this)},l=function(a,b){return function(c){try{this.nativeRange[a](c)}catch(e){this.nativeRange[b](c),this.nativeRange[a](c)}d(this)}}}k.setStartBefore=l("setStartBefore","setEndBefore"),k.setStartAfter=l("setStartAfter","setEndAfter"),k.setEndBefore=l("setEndBefore","setStartBefore"),k.setEndAfter=l("setEndAfter","setStartAfter"),k.selectNodeContents=function(a){this.setStartAndEnd(a,0,e.getNodeLength(a))},o.selectNodeContents(n),o.setEnd(n,3);var q=document.createRange();q.selectNodeContents(n),q.setEnd(n,4),q.setStart(n,2),-1==o.compareBoundaryPoints(o.START_TO_END,q)&&1==o.compareBoundaryPoints(o.END_TO_START,q)?k.compareBoundaryPoints=function(a,b){return b=b.nativeRange||b,a==b.START_TO_END?a=b.END_TO_START:a==b.END_TO_START&&(a=b.START_TO_END),this.nativeRange.compareBoundaryPoints(a,b)}:k.compareBoundaryPoints=function(a,b){return this.nativeRange.compareBoundaryPoints(a,b.nativeRange||b)};var r=document.createElement("div");r.innerHTML="123";var s=r.firstChild,t=i(document);t.appendChild(r),o.setStart(s,1),o.setEnd(s,2),o.deleteContents(),"13"==s.data&&(k.deleteContents=function(){this.nativeRange.deleteContents(),d(this)},k.extractContents=function(){var a=this.nativeRange.extractContents();return d(this),a}),t.removeChild(r),t=null,f.isHostMethod(o,"createContextualFragment")&&(k.createContextualFragment=function(a){return this.nativeRange.createContextualFragment(a)}),i(document).removeChild(n),k.getName=function(){return"WrappedRange"},a.WrappedRange=c,a.createNativeRange=function(a){return a=j(a,b,"createNativeRange"),a.createRange()}}(),a.features.implementsTextRange){var l=function(a){var b=a.parentElement(),c=a.duplicate();c.collapse(!0);var d=c.parentElement();c=a.duplicate(),c.collapse(!1);var f=c.parentElement(),g=d==f?d:e.getCommonAncestor(d,f);return g==b?g:e.getCommonAncestor(b,g)},m=function(a){return 0==a.compareEndPoints("StartToEnd",a)},n=function(a,b,c,d,f){var h=a.duplicate();h.collapse(c);var i=h.parentElement();if(e.isOrIsAncestorOf(b,i)||(i=b),!i.canHaveHTML){var j=new g(i.parentNode,e.getNodeIndex(i));return{boundaryPosition:j,nodeInfo:{nodeIndex:j.offset,containerElement:j.node}}}var l=e.getDocument(i).createElement("span");l.parentNode&&e.removeNode(l);for(var m,n,o,p,q,r=c?"StartToStart":"StartToEnd",s=f&&f.containerElement==i?f.nodeIndex:0,t=i.childNodes.length,u=t,v=u;;){if(v==t?i.appendChild(l):i.insertBefore(l,i.childNodes[v]),h.moveToElementText(l),m=h.compareEndPoints(r,a),0==m||s==u)break;if(-1==m){if(u==s+1)break;s=v}else u=u==s+1?s:v;v=Math.floor((s+u)/2),i.removeChild(l)}if(q=l.nextSibling,-1==m&&q&&k(q)){h.setEndPoint(c?"EndToStart":"EndToEnd",a);var w;if(/[\r\n]/.test(q.data)){var x=h.duplicate(),y=x.text.replace(/\r\n/g,"\r").length;for(w=x.moveStart("character",y);-1==(m=x.compareEndPoints("StartToEnd",x));)w++,x.moveStart("character",1)}else w=h.text.length;p=new g(q,w)}else n=(d||!c)&&l.previousSibling,o=(d||c)&&l.nextSibling,p=o&&k(o)?new g(o,0):n&&k(n)?new g(n,n.data.length):new g(i,e.getNodeIndex(l));return e.removeNode(l),{boundaryPosition:p,nodeInfo:{nodeIndex:v,containerElement:i}}},o=function(a,b){var c,d,f,g,h=a.offset,j=e.getDocument(a.node),l=i(j).createTextRange(),m=k(a.node);return m?(c=a.node,d=c.parentNode):(g=a.node.childNodes,c=h<g.length?g[h]:null,d=a.node),f=j.createElement("span"),f.innerHTML="&#feff;",c?d.insertBefore(f,c):d.appendChild(f),l.moveToElementText(f),l.collapse(!b),d.removeChild(f),m&&l[b?"moveStart":"moveEnd"]("character",h),l};d=function(a){this.textRange=a,this.refresh()},d.prototype=new h(document),d.prototype.refresh=function(){var a,b,c,d=l(this.textRange);m(this.textRange)?b=a=n(this.textRange,d,!0,!0).boundaryPosition:(c=n(this.textRange,d,!0,!1),a=c.boundaryPosition,b=n(this.textRange,d,!1,!1,c.nodeInfo).boundaryPosition),this.setStart(a.node,a.offset),this.setEnd(b.node,b.offset)},d.prototype.getName=function(){return"WrappedTextRange"},h.copyComparisonConstants(d);var p=function(a){if(a.collapsed)return o(new g(a.startContainer,a.startOffset),!0);var b=o(new g(a.startContainer,a.startOffset),!0),c=o(new g(a.endContainer,a.endOffset),!1),d=i(h.getRangeDocument(a)).createTextRange();return d.setEndPoint("StartToStart",b),d.setEndPoint("EndToEnd",c),d};if(d.rangeToTextRange=p,d.prototype.toTextRange=function(){return p(this)},a.WrappedTextRange=d,!a.features.implementsDomRange||a.config.preferTextRange){var q=function(a){return a("return this;")()}(Function);"undefined"==typeof q.Range&&(q.Range=d),a.createNativeRange=function(a){return a=j(a,b,"createNativeRange"),i(a).createTextRange()},a.WrappedRange=d}}a.createRange=function(c){return c=j(c,b,"createRange"),new a.WrappedRange(a.createNativeRange(c))},a.createRangyRange=function(a){return a=j(a,b,"createRangyRange"),new h(a)},f.createAliasForDeprecatedMethod(a,"createIframeRange","createRange"),f.createAliasForDeprecatedMethod(a,"createIframeRangyRange","createRangyRange"),a.addShimListener(function(b){var c=b.document;"undefined"==typeof c.createRange&&(c.createRange=function(){return a.createRange(c)}),c=b=null})}),H.createCoreModule("WrappedSelection",["DomRange","WrappedRange"],function(a,b){function c(a){return"string"==typeof a?/^backward(s)?$/i.test(a):!!a}function d(a,c){if(a){if(C.isWindow(a))return a;if(a instanceof r)return a.win;var d=C.getContentDocument(a,b,c);return C.getWindow(d)}return window}function e(a){return d(a,"getWinSelection").getSelection()}function f(a){return d(a,"getDocSelection").document.selection}function g(a){var b=!1;return a.anchorNode&&(b=1==C.comparePoints(a.anchorNode,a.anchorOffset,a.focusNode,a.focusOffset)),b}function h(a,b,c){var d=c?"end":"start",e=c?"start":"end";a.anchorNode=b[d+"Container"],a.anchorOffset=b[d+"Offset"],a.focusNode=b[e+"Container"],a.focusOffset=b[e+"Offset"]}function i(a){var b=a.nativeSelection;a.anchorNode=b.anchorNode,a.anchorOffset=b.anchorOffset,a.focusNode=b.focusNode,a.focusOffset=b.focusOffset}function j(a){a.anchorNode=a.focusNode=null,a.anchorOffset=a.focusOffset=0,a.rangeCount=0,a.isCollapsed=!0,a._ranges.length=0}function k(b){var c;return b instanceof F?(c=a.createNativeRange(b.getDocument()),c.setEnd(b.endContainer,b.endOffset),c.setStart(b.startContainer,b.startOffset)):b instanceof G?c=b.nativeRange:J.implementsDomRange&&b instanceof C.getWindow(b.startContainer).Range&&(c=b),c}function l(a){if(!a.length||1!=a[0].nodeType)return!1;for(var b=1,c=a.length;c>b;++b)if(!C.isAncestorOf(a[0],a[b]))return!1;return!0}function m(a){var c=a.getNodes();if(!l(c))throw b.createError("getSingleElementFromRange: range "+a.inspect()+" did not consist of a single element");return c[0]}function n(a){return!!a&&"undefined"!=typeof a.text}function o(a,b){var c=new G(b);a._ranges=[c],h(a,c,!1),a.rangeCount=1,a.isCollapsed=c.collapsed}function p(b){if(b._ranges.length=0,"None"==b.docSelection.type)j(b);else{var c=b.docSelection.createRange();if(n(c))o(b,c);else{b.rangeCount=c.length;for(var d,e=L(c.item(0)),f=0;f<b.rangeCount;++f)d=a.createRange(e),d.selectNode(c.item(f)),b._ranges.push(d);b.isCollapsed=1==b.rangeCount&&b._ranges[0].collapsed,h(b,b._ranges[b.rangeCount-1],!1)}}}function q(a,c){for(var d=a.docSelection.createRange(),e=m(c),f=L(d.item(0)),g=M(f).createControlRange(),h=0,i=d.length;i>h;++h)g.add(d.item(h));try{g.add(e)}catch(j){throw b.createError("addRange(): Element within the specified Range could not be added to control selection (does it have layout?)")}g.select(),p(a)}function r(a,b,c){this.nativeSelection=a,this.docSelection=b,this._ranges=[],this.win=c,this.refresh()}function s(a){a.win=a.anchorNode=a.focusNode=a._ranges=null,a.rangeCount=a.anchorOffset=a.focusOffset=0,a.detached=!0}function t(a,b){for(var c,d,e=ba.length;e--;)if(c=ba[e],d=c.selection,"deleteAll"==b)s(d);else if(c.win==a)return"delete"==b?(ba.splice(e,1),!0):d;return"deleteAll"==b&&(ba.length=0),null}function u(a,c){for(var d,e=L(c[0].startContainer),f=M(e).createControlRange(),g=0,h=c.length;h>g;++g){d=m(c[g]);try{f.add(d)}catch(i){throw b.createError("setRanges(): Element within one of the specified Ranges could not be added to control selection (does it have layout?)")}}f.select(),p(a)}function v(a,b){if(a.win.document!=L(b))throw new H("WRONG_DOCUMENT_ERR")}function w(b){return function(c,d){var e;this.rangeCount?(e=this.getRangeAt(0),e["set"+(b?"Start":"End")](c,d)):(e=a.createRange(this.win.document),e.setStartAndEnd(c,d)),this.setSingleRange(e,this.isBackward())}}function x(a){var b=[],c=new I(a.anchorNode,a.anchorOffset),d=new I(a.focusNode,a.focusOffset),e="function"==typeof a.getName?a.getName():"Selection";if("undefined"!=typeof a.rangeCount)for(var f=0,g=a.rangeCount;g>f;++f)b[f]=F.inspect(a.getRangeAt(f));return"["+e+"(Ranges: "+b.join(", ")+")(anchor: "+c.inspect()+", focus: "+d.inspect()+"]"}a.config.checkSelectionRanges=!0;var y,z,A="boolean",B="number",C=a.dom,D=a.util,E=D.isHostMethod,F=a.DomRange,G=a.WrappedRange,H=a.DOMException,I=C.DomPosition,J=a.features,K="Control",L=C.getDocument,M=C.getBody,N=F.rangesEqual,O=E(window,"getSelection"),P=D.isHostObject(document,"selection");J.implementsWinGetSelection=O,J.implementsDocSelection=P;var Q=P&&(!O||a.config.preferTextRange);if(Q)y=f,a.isSelectionValid=function(a){var b=d(a,"isSelectionValid").document,c=b.selection;return"None"!=c.type||L(c.createRange().parentElement())==b};else{if(!O)return b.fail("Neither document.selection or window.getSelection() detected."),!1;y=e,a.isSelectionValid=function(){return!0}}a.getNativeSelection=y;var R=y();if(!R)return b.fail("Native selection was null (possibly issue 138?)"),!1;var S=a.createNativeRange(document),T=M(document),U=D.areHostProperties(R,["anchorNode","focusNode","anchorOffset","focusOffset"]);J.selectionHasAnchorAndFocus=U;var V=E(R,"extend");J.selectionHasExtend=V;var W=typeof R.rangeCount==B;J.selectionHasRangeCount=W;var X=!1,Y=!0,Z=V?function(b,c){var d=F.getRangeDocument(c),e=a.createRange(d);e.collapseToPoint(c.endContainer,c.endOffset),b.addRange(k(e)),b.extend(c.startContainer,c.startOffset)}:null;D.areHostMethods(R,["addRange","getRangeAt","removeAllRanges"])&&typeof R.rangeCount==B&&J.implementsDomRange&&!function(){var b=window.getSelection();if(b){for(var c=b.rangeCount,d=c>1,e=[],f=g(b),h=0;c>h;++h)e[h]=b.getRangeAt(h);var i=C.createTestElement(document,"",!1),j=i.appendChild(document.createTextNode("   ")),k=document.createRange();if(k.setStart(j,1),k.collapse(!0),b.removeAllRanges(),b.addRange(k),
+Y=1==b.rangeCount,b.removeAllRanges(),!d){var l=window.navigator.appVersion.match(/Chrome\/(.*?) /);if(l&&parseInt(l[1])>=36)X=!1;else{var m=k.cloneRange();k.setStart(j,0),m.setEnd(j,3),m.setStart(j,2),b.addRange(k),b.addRange(m),X=2==b.rangeCount}}for(C.removeNode(i),b.removeAllRanges(),h=0;c>h;++h)0==h&&f?Z?Z(b,e[h]):(a.warn("Rangy initialization: original selection was backwards but selection has been restored forwards because the browser does not support Selection.extend"),b.addRange(e[h])):b.addRange(e[h])}}(),J.selectionSupportsMultipleRanges=X,J.collapsedNonEditableSelectionsSupported=Y;var $,_=!1;T&&E(T,"createControlRange")&&($=T.createControlRange(),D.areHostProperties($,["item","add"])&&(_=!0)),J.implementsControlRange=_,z=U?function(a){return a.anchorNode===a.focusNode&&a.anchorOffset===a.focusOffset}:function(a){return a.rangeCount?a.getRangeAt(a.rangeCount-1).collapsed:!1};var aa;E(R,"getRangeAt")?aa=function(a,b){try{return a.getRangeAt(b)}catch(c){return null}}:U&&(aa=function(b){var c=L(b.anchorNode),d=a.createRange(c);return d.setStartAndEnd(b.anchorNode,b.anchorOffset,b.focusNode,b.focusOffset),d.collapsed!==this.isCollapsed&&d.setStartAndEnd(b.focusNode,b.focusOffset,b.anchorNode,b.anchorOffset),d}),r.prototype=a.selectionPrototype;var ba=[],ca=function(a){if(a&&a instanceof r)return a.refresh(),a;a=d(a,"getNativeSelection");var b=t(a),c=y(a),e=P?f(a):null;return b?(b.nativeSelection=c,b.docSelection=e,b.refresh()):(b=new r(c,e,a),ba.push({win:a,selection:b})),b};a.getSelection=ca,D.createAliasForDeprecatedMethod(a,"getIframeSelection","getSelection");var da=r.prototype;if(!Q&&U&&D.areHostMethods(R,["removeAllRanges","addRange"])){da.removeAllRanges=function(){this.nativeSelection.removeAllRanges(),j(this)};var ea=function(a,b){Z(a.nativeSelection,b),a.refresh()};W?da.addRange=function(b,d){if(_&&P&&this.docSelection.type==K)q(this,b);else if(c(d)&&V)ea(this,b);else{var e;X?e=this.rangeCount:(this.removeAllRanges(),e=0);var f=k(b).cloneRange();try{this.nativeSelection.addRange(f)}catch(g){}if(this.rangeCount=this.nativeSelection.rangeCount,this.rangeCount==e+1){if(a.config.checkSelectionRanges){var i=aa(this.nativeSelection,this.rangeCount-1);i&&!N(i,b)&&(b=new G(i))}this._ranges[this.rangeCount-1]=b,h(this,b,ha(this.nativeSelection)),this.isCollapsed=z(this)}else this.refresh()}}:da.addRange=function(a,b){c(b)&&V?ea(this,a):(this.nativeSelection.addRange(k(a)),this.refresh())},da.setRanges=function(a){if(_&&P&&a.length>1)u(this,a);else{this.removeAllRanges();for(var b=0,c=a.length;c>b;++b)this.addRange(a[b])}}}else{if(!(E(R,"empty")&&E(S,"select")&&_&&Q))return b.fail("No means of selecting a Range or TextRange was found"),!1;da.removeAllRanges=function(){try{if(this.docSelection.empty(),"None"!=this.docSelection.type){var a;if(this.anchorNode)a=L(this.anchorNode);else if(this.docSelection.type==K){var b=this.docSelection.createRange();b.length&&(a=L(b.item(0)))}if(a){var c=M(a).createTextRange();c.select(),this.docSelection.empty()}}}catch(d){}j(this)},da.addRange=function(b){this.docSelection.type==K?q(this,b):(a.WrappedTextRange.rangeToTextRange(b).select(),this._ranges[0]=b,this.rangeCount=1,this.isCollapsed=this._ranges[0].collapsed,h(this,b,!1))},da.setRanges=function(a){this.removeAllRanges();var b=a.length;b>1?u(this,a):b&&this.addRange(a[0])}}da.getRangeAt=function(a){if(0>a||a>=this.rangeCount)throw new H("INDEX_SIZE_ERR");return this._ranges[a].cloneRange()};var fa;if(Q)fa=function(b){var c;a.isSelectionValid(b.win)?c=b.docSelection.createRange():(c=M(b.win.document).createTextRange(),c.collapse(!0)),b.docSelection.type==K?p(b):n(c)?o(b,c):j(b)};else if(E(R,"getRangeAt")&&typeof R.rangeCount==B)fa=function(b){if(_&&P&&b.docSelection.type==K)p(b);else if(b._ranges.length=b.rangeCount=b.nativeSelection.rangeCount,b.rangeCount){for(var c=0,d=b.rangeCount;d>c;++c)b._ranges[c]=new a.WrappedRange(b.nativeSelection.getRangeAt(c));h(b,b._ranges[b.rangeCount-1],ha(b.nativeSelection)),b.isCollapsed=z(b)}else j(b)};else{if(!U||typeof R.isCollapsed!=A||typeof S.collapsed!=A||!J.implementsDomRange)return b.fail("No means of obtaining a Range or TextRange from the user's selection was found"),!1;fa=function(a){var b,c=a.nativeSelection;c.anchorNode?(b=aa(c,0),a._ranges=[b],a.rangeCount=1,i(a),a.isCollapsed=z(a)):j(a)}}da.refresh=function(a){var b=a?this._ranges.slice(0):null,c=this.anchorNode,d=this.anchorOffset;if(fa(this),a){var e=b.length;if(e!=this._ranges.length)return!0;if(this.anchorNode!=c||this.anchorOffset!=d)return!0;for(;e--;)if(!N(b[e],this._ranges[e]))return!0;return!1}};var ga=function(a,b){var c=a.getAllRanges();a.removeAllRanges();for(var d=0,e=c.length;e>d;++d)N(b,c[d])||a.addRange(c[d]);a.rangeCount||j(a)};_&&P?da.removeRange=function(a){if(this.docSelection.type==K){for(var b,c=this.docSelection.createRange(),d=m(a),e=L(c.item(0)),f=M(e).createControlRange(),g=!1,h=0,i=c.length;i>h;++h)b=c.item(h),b!==d||g?f.add(c.item(h)):g=!0;f.select(),p(this)}else ga(this,a)}:da.removeRange=function(a){ga(this,a)};var ha;!Q&&U&&J.implementsDomRange?(ha=g,da.isBackward=function(){return ha(this)}):ha=da.isBackward=function(){return!1},da.isBackwards=da.isBackward,da.toString=function(){for(var a=[],b=0,c=this.rangeCount;c>b;++b)a[b]=""+this._ranges[b];return a.join("")},da.collapse=function(b,c){v(this,b);var d=a.createRange(b);d.collapseToPoint(b,c),this.setSingleRange(d),this.isCollapsed=!0},da.collapseToStart=function(){if(!this.rangeCount)throw new H("INVALID_STATE_ERR");var a=this._ranges[0];this.collapse(a.startContainer,a.startOffset)},da.collapseToEnd=function(){if(!this.rangeCount)throw new H("INVALID_STATE_ERR");var a=this._ranges[this.rangeCount-1];this.collapse(a.endContainer,a.endOffset)},da.selectAllChildren=function(b){v(this,b);var c=a.createRange(b);c.selectNodeContents(b),this.setSingleRange(c)},da.deleteFromDocument=function(){if(_&&P&&this.docSelection.type==K){for(var a,b=this.docSelection.createRange();b.length;)a=b.item(0),b.remove(a),C.removeNode(a);this.refresh()}else if(this.rangeCount){var c=this.getAllRanges();if(c.length){this.removeAllRanges();for(var d=0,e=c.length;e>d;++d)c[d].deleteContents();this.addRange(c[e-1])}}},da.eachRange=function(a,b){for(var c=0,d=this._ranges.length;d>c;++c)if(a(this.getRangeAt(c)))return b},da.getAllRanges=function(){var a=[];return this.eachRange(function(b){a.push(b)}),a},da.setSingleRange=function(a,b){this.removeAllRanges(),this.addRange(a,b)},da.callMethodOnEachRange=function(a,b){var c=[];return this.eachRange(function(d){c.push(d[a].apply(d,b||[]))}),c},da.setStart=w(!0),da.setEnd=w(!1),a.rangePrototype.select=function(a){ca(this.getDocument()).setSingleRange(this,a)},da.changeEachRange=function(a){var b=[],c=this.isBackward();this.eachRange(function(c){a(c),b.push(c)}),this.removeAllRanges(),c&&1==b.length?this.addRange(b[0],"backward"):this.setRanges(b)},da.containsNode=function(a,b){return this.eachRange(function(c){return c.containsNode(a,b)},!0)||!1},da.getBookmark=function(a){return{backward:this.isBackward(),rangeBookmarks:this.callMethodOnEachRange("getBookmark",[a])}},da.moveToBookmark=function(b){for(var c,d,e=[],f=0;c=b.rangeBookmarks[f++];)d=a.createRange(this.win),d.moveToBookmark(c),e.push(d);b.backward?this.setSingleRange(e[0],"backward"):this.setRanges(e)},da.saveRanges=function(){return{backward:this.isBackward(),ranges:this.callMethodOnEachRange("cloneRange")}},da.restoreRanges=function(a){this.removeAllRanges();for(var b,c=0;b=a.ranges[c];++c)this.addRange(b,a.backward&&0==c)},da.toHtml=function(){var a=[];return this.eachRange(function(b){a.push(F.toHtml(b))}),a.join("")},J.implementsTextRange&&(da.getNativeTextRange=function(){var c;if(c=this.docSelection){var d=c.createRange();if(n(d))return d;throw b.createError("getNativeTextRange: selection is a control selection")}if(this.rangeCount>0)return a.WrappedTextRange.rangeToTextRange(this.getRangeAt(0));throw b.createError("getNativeTextRange: selection contains no range")}),da.getName=function(){return"WrappedSelection"},da.inspect=function(){return x(this)},da.detach=function(){t(this.win,"delete"),s(this)},r.detachAll=function(){t(null,"deleteAll")},r.inspect=x,r.isDirectionBackward=c,a.Selection=r,a.selectionPrototype=da,a.addShimListener(function(a){"undefined"==typeof a.getSelection&&(a.getSelection=function(){return ca(a)}),a=null})});var M=!1,N=function(a){M||(M=!0,!H.initialized&&H.config.autoInitialize&&l())};return F&&("complete"==document.readyState?N():(a(document,"addEventListener")&&document.addEventListener("DOMContentLoaded",N,!1),J(window,"load",N))),H},this),function(a,b){"function"==typeof define&&define.amd?define(["./rangy-core"],a):"undefined"!=typeof module&&"object"==typeof exports?module.exports=a(require("rangy")):a(b.rangy)}(function(a){return a.createModule("ClassApplier",["WrappedSelection"],function(a,b){function c(a,b){for(var c in a)if(a.hasOwnProperty(c)&&b(c,a[c])===!1)return!1;return!0}function d(a){return a.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function e(a,b){return!!a&&new RegExp("(?:^|\\s)"+b+"(?:\\s|$)").test(a)}function f(a,b){if("object"==typeof a.classList)return a.classList.contains(b);var c="string"==typeof a.className,d=c?a.className:a.getAttribute("class");return e(d,b)}function g(a,b){if("object"==typeof a.classList)a.classList.add(b);else{var c="string"==typeof a.className,d=c?a.className:a.getAttribute("class");d?e(d,b)||(d+=" "+b):d=b,c?a.className=d:a.setAttribute("class",d)}}function h(a){var b="string"==typeof a.className;return b?a.className:a.getAttribute("class")}function j(a){return a&&a.split(/\s+/).sort().join(" ")}function k(a){return j(h(a))}function l(a,b){return k(a)==k(b)}function m(a,b){for(var c=b.split(/\s+/),e=0,g=c.length;g>e;++e)if(!f(a,d(c[e])))return!1;return!0}function n(a){var b=a.parentNode;return b&&1==b.nodeType&&!/^(textarea|style|script|select|iframe)$/i.test(b.nodeName)}function o(a,b,c,d,e){var f=a.node,g=a.offset,h=f,i=g;f==d&&g>e&&++i,f!=b||g!=c&&g!=c+1||(h=d,i+=e-c),f==b&&g>c+1&&--i,a.node=h,a.offset=i}function p(a,b,c){a.node==b&&a.offset>c&&--a.offset}function q(a,b,c,d){-1==c&&(c=b.childNodes.length);var e=a.parentNode,f=L.getNodeIndex(a);P(d,function(a){o(a,e,f,b,c)}),b.childNodes.length==c?b.appendChild(a):b.insertBefore(a,b.childNodes[c])}function r(a,b){var c=a.parentNode,d=L.getNodeIndex(a);P(b,function(a){p(a,c,d)}),L.removeNode(a)}function s(a,b,c,d,e){for(var f,g=[];f=a.firstChild;)q(f,b,c++,e),g.push(f);return d&&r(a,e),g}function t(a,b){return s(a,a.parentNode,L.getNodeIndex(a),!0,b)}function u(a,b){var c=a.cloneRange();c.selectNodeContents(b);var d=c.intersection(a),e=d?d.toString():"";return""!=e}function v(a){for(var b,c=a.getNodes([3]),d=0;(b=c[d])&&!u(a,b);)++d;for(var e=c.length-1;(b=c[e])&&!u(a,b);)--e;return c.slice(d,e+1)}function w(a,b){if(a.attributes.length!=b.attributes.length)return!1;for(var c,d,e,f=0,g=a.attributes.length;g>f;++f)if(c=a.attributes[f],e=c.name,"class"!=e){if(d=b.attributes.getNamedItem(e),null===c!=(null===d))return!1;if(c.specified!=d.specified)return!1;if(c.specified&&c.nodeValue!==d.nodeValue)return!1}return!0}function x(a,b){for(var c,d=0,e=a.attributes.length;e>d;++d)if(c=a.attributes[d].name,(!b||!N(b,c))&&a.attributes[d].specified&&"class"!=c)return!0;return!1}function y(a){var b;return a&&1==a.nodeType&&((b=a.parentNode)&&9==b.nodeType&&"on"==b.designMode||U(a)&&!U(a.parentNode))}function z(a){return(U(a)||1!=a.nodeType&&U(a.parentNode))&&!y(a)}function A(a){return a&&1==a.nodeType&&!V.test(T(a,"display"))}function B(a){if(0==a.data.length)return!0;if(W.test(a.data))return!1;var b=T(a.parentNode,"whiteSpace");switch(b){case"pre":case"pre-wrap":case"-moz-pre-wrap":return!1;case"pre-line":if(/[\r\n]/.test(a.data))return!1}return A(a.previousSibling)||A(a.nextSibling)}function C(a){var b,c,d=[];for(b=0;c=a[b++];)d.push(new M(c.startContainer,c.startOffset),new M(c.endContainer,c.endOffset));return d}function D(a,b){for(var c,d,e,f=0,g=a.length;g>f;++f)c=a[f],d=b[2*f],e=b[2*f+1],c.setStartAndEnd(d.node,d.offset,e.node,e.offset)}function E(a,b){return L.isCharacterDataNode(a)?0==b?!!a.previousSibling:b==a.length?!!a.nextSibling:!0:b>0&&b<a.childNodes.length}function F(a,c,d,e){var f,g,h=0==d;if(L.isAncestorOf(c,a))return a;if(L.isCharacterDataNode(c)){var i=L.getNodeIndex(c);if(0==d)d=i;else{if(d!=c.length)throw b.createError("splitNodeAt() should not be called with offset in the middle of a data node ("+d+" in "+c.data);d=i+1}c=c.parentNode}if(E(c,d)){f=c.cloneNode(!1),g=c.parentNode,f.id&&f.removeAttribute("id");for(var j,k=0;j=c.childNodes[d];)q(j,f,k++,e);return q(f,g,L.getNodeIndex(c)+1,e),c==a?f:F(a,g,L.getNodeIndex(f),e)}if(a!=c){f=c.parentNode;var l=L.getNodeIndex(c);return h||l++,F(a,f,l,e)}return a}function G(a,b){return a.namespaceURI==b.namespaceURI&&a.tagName.toLowerCase()==b.tagName.toLowerCase()&&l(a,b)&&w(a,b)&&"inline"==T(a,"display")&&"inline"==T(b,"display")}function H(a){var b=a?"nextSibling":"previousSibling";return function(c,d){var e=c.parentNode,f=c[b];if(f){if(f&&3==f.nodeType)return f}else if(d&&(f=e[b],f&&1==f.nodeType&&G(e,f))){var g=f[a?"firstChild":"lastChild"];if(g&&3==g.nodeType)return g}return null}}function I(a){this.isElementMerge=1==a.nodeType,this.textNodes=[];var b=this.isElementMerge?a.lastChild:a;b&&(this.textNodes[0]=b)}function J(a,b,e){var f,g,h,i,k=this;k.cssClass=k.className=a;var l=null,m={};if("object"==typeof b&&null!==b){for("undefined"!=typeof b.elementTagName&&(b.elementTagName=b.elementTagName.toLowerCase()),e=b.tagNames,l=b.elementProperties,m=b.elementAttributes,g=0;i=Z[g++];)b.hasOwnProperty(i)&&(k[i]=b[i]);f=b.normalize}else f=b;k.normalize="undefined"==typeof f?!0:f,k.attrExceptions=[];var n=document.createElement(k.elementTagName);k.elementProperties=k.copyPropertiesToElement(l,n,!0),c(m,function(a,b){k.attrExceptions.push(a),m[a]=""+b}),k.elementAttributes=m,k.elementSortedClassName=k.elementProperties.hasOwnProperty("className")?j(k.elementProperties.className+" "+a):a,k.applyToAnyTagName=!1;var o=typeof e;if("string"==o)"*"==e?k.applyToAnyTagName=!0:k.tagNames=d(e.toLowerCase()).split(/\s*,\s*/);else if("object"==o&&"number"==typeof e.length)for(k.tagNames=[],g=0,h=e.length;h>g;++g)"*"==e[g]?k.applyToAnyTagName=!0:k.tagNames.push(e[g].toLowerCase());else k.tagNames=[k.elementTagName]}function K(a,b,c){return new J(a,b,c)}var L=a.dom,M=L.DomPosition,N=L.arrayContains,O=a.util,P=O.forEach,Q="span",R=O.isHostMethod(document,"createElementNS"),S=function(){function a(a,b,c){return b&&c?" ":""}return function(b,c){if("object"==typeof b.classList)b.classList.remove(c);else{var d="string"==typeof b.className,e=d?b.className:b.getAttribute("class");e=e.replace(new RegExp("(^|\\s)"+c+"(\\s|$)"),a),d?b.className=e:b.setAttribute("class",e)}}}(),T=L.getComputedStyleProperty,U=function(){var a=document.createElement("div");return"boolean"==typeof a.isContentEditable?function(a){return a&&1==a.nodeType&&a.isContentEditable}:function(a){return a&&1==a.nodeType&&"false"!=a.contentEditable?"true"==a.contentEditable||U(a.parentNode):!1}}(),V=/^inline(-block|-table)?$/i,W=/[^\r\n\t\f \u200B]/,X=H(!1),Y=H(!0);I.prototype={doMerge:function(a){var b=this.textNodes,c=b[0];if(b.length>1){var d,e=L.getNodeIndex(c),f=[],g=0;P(b,function(b,h){d=b.parentNode,h>0&&(d.removeChild(b),d.hasChildNodes()||L.removeNode(d),a&&P(a,function(a){a.node==b&&(a.node=c,a.offset+=g),a.node==d&&a.offset>e&&(--a.offset,a.offset==e+1&&h<len-1&&(a.node=c,a.offset=g))})),f[h]=b.data,g+=b.data.length}),c.data=f.join("")}return c.data},getLength:function(){for(var a=this.textNodes.length,b=0;a--;)b+=this.textNodes[a].length;return b},toString:function(){var a=[];return P(this.textNodes,function(b,c){a[c]="'"+b.data+"'"}),"[Merge("+a.join(",")+")]"}};var Z=["elementTagName","ignoreWhiteSpace","applyToEditableOnly","useExistingElements","removeEmptyElements","onElementCreate"],$={};J.prototype={elementTagName:Q,elementProperties:{},elementAttributes:{},ignoreWhiteSpace:!0,applyToEditableOnly:!1,useExistingElements:!0,removeEmptyElements:!0,onElementCreate:null,copyPropertiesToElement:function(a,b,c){var d,e,f,h,i,k,l={};for(var m in a)if(a.hasOwnProperty(m))if(h=a[m],i=b[m],"className"==m)g(b,h),g(b,this.className),b[m]=j(b[m]),c&&(l[m]=h);else if("style"==m){e=i,c&&(l[m]=f={});for(d in a[m])a[m].hasOwnProperty(d)&&(e[d]=h[d],c&&(f[d]=e[d]));this.attrExceptions.push(m)}else b[m]=h,c&&(l[m]=b[m],k=$.hasOwnProperty(m)?$[m]:m,this.attrExceptions.push(k));return c?l:""},copyAttributesToElement:function(a,b){for(var c in a)a.hasOwnProperty(c)&&!/^class(?:Name)?$/i.test(c)&&b.setAttribute(c,a[c])},appliesToElement:function(a){return N(this.tagNames,a.tagName.toLowerCase())},getEmptyElements:function(a){var b=this;return a.getNodes([1],function(a){return b.appliesToElement(a)&&!a.hasChildNodes()})},hasClass:function(a){return 1==a.nodeType&&(this.applyToAnyTagName||this.appliesToElement(a))&&f(a,this.className)},getSelfOrAncestorWithClass:function(a){for(;a;){if(this.hasClass(a))return a;a=a.parentNode}return null},isModifiable:function(a){return!this.applyToEditableOnly||z(a)},isIgnorableWhiteSpaceNode:function(a){return this.ignoreWhiteSpace&&a&&3==a.nodeType&&B(a)},postApply:function(a,b,c,d){var e,f,g=a[0],h=a[a.length-1],j=[],k=g,l=h,m=0,n=h.length;P(a,function(a){f=X(a,!d),f?(e||(e=new I(f),j.push(e)),e.textNodes.push(a),a===g&&(k=e.textNodes[0],m=k.length),a===h&&(l=e.textNodes[0],n=e.getLength())):e=null});var o=Y(h,!d);if(o&&(e||(e=new I(h),j.push(e)),e.textNodes.push(o)),j.length){for(i=0,len=j.length;i<len;++i)j[i].doMerge(c);b.setStartAndEnd(k,m,l,n)}},createContainer:function(a){var b,c=L.getDocument(a),d=R&&!L.isHtmlNamespace(a)&&(b=a.namespaceURI)?c.createElementNS(a.namespaceURI,this.elementTagName):c.createElement(this.elementTagName);return this.copyPropertiesToElement(this.elementProperties,d,!1),this.copyAttributesToElement(this.elementAttributes,d),g(d,this.className),this.onElementCreate&&this.onElementCreate(d,this),d},elementHasProperties:function(a,b){var d=this;return c(b,function(b,c){if("className"==b)return m(a,c);if("object"==typeof c){if(!d.elementHasProperties(a[b],c))return!1}else if(a[b]!==c)return!1})},elementHasAttributes:function(a,b){return c(b,function(b,c){return a.getAttribute(b)!==c?!1:void 0})},applyToTextNode:function(a,b){if(n(a)){var c=a.parentNode;if(1==c.childNodes.length&&this.useExistingElements&&this.appliesToElement(c)&&this.elementHasProperties(c,this.elementProperties)&&this.elementHasAttributes(c,this.elementAttributes))g(c,this.className);else{var d=a.parentNode,e=this.createContainer(d);d.insertBefore(e,a),e.appendChild(a)}}},isRemovable:function(a){return a.tagName.toLowerCase()==this.elementTagName&&k(a)==this.elementSortedClassName&&this.elementHasProperties(a,this.elementProperties)&&!x(a,this.attrExceptions)&&this.elementHasAttributes(a,this.elementAttributes)&&this.isModifiable(a)},isEmptyContainer:function(a){var b=a.childNodes.length;return 1==a.nodeType&&this.isRemovable(a)&&(0==b||1==b&&this.isEmptyContainer(a.firstChild))},removeEmptyContainers:function(a){var b=this,c=a.getNodes([1],function(a){return b.isEmptyContainer(a)}),d=[a],e=C(d);P(c,function(a){r(a,e)}),D(d,e)},undoToTextNode:function(a,b,c,d){if(!b.containsNode(c)){var e=b.cloneRange();e.selectNode(c),e.isPointInRange(b.endContainer,b.endOffset)&&(F(c,b.endContainer,b.endOffset,d),b.setEndAfter(c)),e.isPointInRange(b.startContainer,b.startOffset)&&(c=F(c,b.startContainer,b.startOffset,d))}this.isRemovable(c)?t(c,d):S(c,this.className)},splitAncestorWithClass:function(a,b,c){var d=this.getSelfOrAncestorWithClass(a);d&&F(d,a,b,c)},undoToAncestor:function(a,b){this.isRemovable(a)?t(a,b):S(a,this.className)},applyToRange:function(a,b){var c=this;b=b||[];var d=C(b||[]);a.splitBoundariesPreservingPositions(d),c.removeEmptyElements&&c.removeEmptyContainers(a);var e=v(a);if(e.length){P(e,function(a){c.isIgnorableWhiteSpaceNode(a)||c.getSelfOrAncestorWithClass(a)||!c.isModifiable(a)||c.applyToTextNode(a,d)});var f=e[e.length-1];a.setStartAndEnd(e[0],0,f,f.length),c.normalize&&c.postApply(e,a,d,!1),D(b,d)}var h=c.getEmptyElements(a);P(h,function(a){g(a,c.className)})},applyToRanges:function(a){for(var b=a.length;b--;)this.applyToRange(a[b],a);return a},applyToSelection:function(b){var c=a.getSelection(b);c.setRanges(this.applyToRanges(c.getAllRanges()))},undoToRange:function(a,b){var c=this;b=b||[];var d=C(b);a.splitBoundariesPreservingPositions(d),c.removeEmptyElements&&c.removeEmptyContainers(a,d);var e,f,g=v(a),h=g[g.length-1];if(g.length){c.splitAncestorWithClass(a.endContainer,a.endOffset,d),c.splitAncestorWithClass(a.startContainer,a.startOffset,d);for(var i=0,j=g.length;j>i;++i)e=g[i],f=c.getSelfOrAncestorWithClass(e),f&&c.isModifiable(e)&&c.undoToAncestor(f,d);a.setStartAndEnd(g[0],0,h,h.length),c.normalize&&c.postApply(g,a,d,!0),D(b,d)}var k=c.getEmptyElements(a);P(k,function(a){S(a,c.className)})},undoToRanges:function(a){for(var b=a.length;b--;)this.undoToRange(a[b],a);return a},undoToSelection:function(b){var c=a.getSelection(b),d=a.getSelection(b).getAllRanges();this.undoToRanges(d),c.setRanges(d)},isAppliedToRange:function(a){if(a.collapsed||""==a.toString())return!!this.getSelfOrAncestorWithClass(a.commonAncestorContainer);var b=a.getNodes([3]);if(b.length)for(var c,d=0;c=b[d++];)if(!this.isIgnorableWhiteSpaceNode(c)&&u(a,c)&&this.isModifiable(c)&&!this.getSelfOrAncestorWithClass(c))return!1;return!0},isAppliedToRanges:function(a){var b=a.length;if(0==b)return!1;for(;b--;)if(!this.isAppliedToRange(a[b]))return!1;return!0},isAppliedToSelection:function(b){var c=a.getSelection(b);return this.isAppliedToRanges(c.getAllRanges())},toggleRange:function(a){this.isAppliedToRange(a)?this.undoToRange(a):this.applyToRange(a)},toggleSelection:function(a){this.isAppliedToSelection(a)?this.undoToSelection(a):this.applyToSelection(a)},getElementsWithClassIntersectingRange:function(a){var b=[],c=this;return a.getNodes([3],function(a){var d=c.getSelfOrAncestorWithClass(a);d&&!N(b,d)&&b.push(d)}),b},detach:function(){}},J.util={hasClass:f,addClass:g,removeClass:S,getClass:h,hasSameClasses:l,hasAllClasses:m,replaceWithOwnChildren:t,elementsHaveSameNonClassAttributes:w,elementHasNonClassAttributes:x,splitNodeAt:F,isEditableElement:U,isEditingHost:y,isEditable:z},a.CssClassApplier=a.ClassApplier=J,a.createClassApplier=K,O.createAliasForDeprecatedMethod(a,"createCssClassApplier","createClassApplier",b)}),a},this),function(a,b){"function"==typeof define&&define.amd?define(["./rangy-core"],a):"undefined"!=typeof module&&"object"==typeof exports?module.exports=a(require("rangy")):a(b.rangy)}(function(a){return a.createModule("Highlighter",["ClassApplier"],function(a,b){function c(a,b){return a.characterRange.start-b.characterRange.start}function d(a,b){return b?a.getElementById(b):m(a)}function e(a,b){this.type=a,this.converterCreator=b}function f(a,b){q[a]=new e(a,b)}function g(a){var b=q[a];if(b instanceof e)return b.create();throw new Error("Highlighter type '"+a+"' is not valid")}function h(a,b){this.start=a,this.end=b}function i(a,b,c,d,e,f){e?(this.id=e,p=Math.max(p,e+1)):this.id=p++,this.characterRange=b,this.doc=a,this.classApplier=c,this.converter=d,this.containerElementId=f||null,this.applied=!1}function j(a,b){b=b||"textContent",this.doc=a||document,this.classAppliers={},this.highlights=[],this.converter=g(b)}var k=a.dom,l=k.arrayContains,m=k.getBody,n=a.util.createOptions,o=a.util.forEach,p=1,q={};e.prototype.create=function(){var a=this.converterCreator();return a.type=this.type,a},a.registerHighlighterType=f,h.prototype={intersects:function(a){return this.start<a.end&&this.end>a.start},isContiguousWith:function(a){return this.start==a.end||this.end==a.start},union:function(a){return new h(Math.min(this.start,a.start),Math.max(this.end,a.end))},intersection:function(a){return new h(Math.max(this.start,a.start),Math.min(this.end,a.end))},getComplements:function(a){var b=[];if(this.start>=a.start){if(this.end<=a.end)return[];b.push(new h(a.end,this.end))}else b.push(new h(this.start,Math.min(this.end,a.start))),this.end>a.end&&b.push(new h(a.end,this.end));return b},toString:function(){return"[CharacterRange("+this.start+", "+this.end+")]"}},h.fromCharacterRange=function(a){return new h(a.start,a.end)};var r={rangeToCharacterRange:function(a,b){var c=a.getBookmark(b);return new h(c.start,c.end)},characterRangeToRange:function(b,c,d){var e=a.createRange(b);return e.moveToBookmark({start:c.start,end:c.end,containerNode:d}),e},serializeSelection:function(a,b){for(var c=a.getAllRanges(),d=c.length,e=[],f=1==d&&a.isBackward(),g=0,h=c.length;h>g;++g)e[g]={characterRange:this.rangeToCharacterRange(c[g],b),backward:f};return e},restoreSelection:function(a,b,c){a.removeAllRanges();for(var d,e,f,g=a.win.document,h=0,i=b.length;i>h;++h)e=b[h],f=e.characterRange,d=this.characterRangeToRange(g,e.characterRange,c),a.addRange(d,e.backward)}};f("textContent",function(){return r}),f("TextRange",function(){var b;return function(){if(!b){var c=a.modules.TextRange;if(!c)throw new Error("TextRange module is missing.");if(!c.supported)throw new Error("TextRange module is present but not supported.");b={rangeToCharacterRange:function(a,b){return h.fromCharacterRange(a.toCharacterRange(b))},characterRangeToRange:function(b,c,d){var e=a.createRange(b);return e.selectCharacters(d,c.start,c.end),e},serializeSelection:function(a,b){return a.saveCharacterRanges(b)},restoreSelection:function(a,b,c){a.restoreCharacterRanges(c,b)}}}return b}}()),i.prototype={getContainerElement:function(){return d(this.doc,this.containerElementId)},getRange:function(){return this.converter.characterRangeToRange(this.doc,this.characterRange,this.getContainerElement())},fromRange:function(a){this.characterRange=this.converter.rangeToCharacterRange(a,this.getContainerElement())},getText:function(){return this.getRange().toString()},containsElement:function(a){return this.getRange().containsNodeContents(a.firstChild)},unapply:function(){this.classApplier.undoToRange(this.getRange()),this.applied=!1},apply:function(){this.classApplier.applyToRange(this.getRange()),this.applied=!0},getHighlightElements:function(){return this.classApplier.getElementsWithClassIntersectingRange(this.getRange())},toString:function(){return"[Highlight(ID: "+this.id+", class: "+this.classApplier.className+", character range: "+this.characterRange.start+" - "+this.characterRange.end+")]"}},j.prototype={addClassApplier:function(a){this.classAppliers[a.className]=a},getHighlightForElement:function(a){for(var b=this.highlights,c=0,d=b.length;d>c;++c)if(b[c].containsElement(a))return b[c];return null},removeHighlights:function(a){for(var b,c=0,d=this.highlights.length;d>c;++c)b=this.highlights[c],l(a,b)&&(b.unapply(),this.highlights.splice(c--,1))},removeAllHighlights:function(){this.removeHighlights(this.highlights)},getIntersectingHighlights:function(a){var b=[],c=this.highlights;return o(a,function(a){o(c,function(c){a.intersectsRange(c.getRange())&&!l(b,c)&&b.push(c)})}),b},highlightCharacterRanges:function(b,c,d){var e,f,g,j=this.highlights,k=this.converter,l=this.doc,m=[],p=b?this.classAppliers[b]:null;d=n(d,{containerElementId:null,exclusive:!0});var q,r,s,t=d.containerElementId,u=d.exclusive;t&&(q=this.doc.getElementById(t),q&&(r=a.createRange(this.doc),r.selectNodeContents(q),s=new h(0,r.toString().length)));var v,w,x,y,z,A;for(e=0,f=c.length;f>e;++e)if(v=c[e],z=[],s&&(v=v.intersection(s)),v.start!=v.end){for(g=0;g<j.length;++g)x=!1,t==j[g].containerElementId&&(w=j[g].characterRange,y=p==j[g].classApplier,A=!y&&u,(w.intersects(v)||w.isContiguousWith(v))&&(y||A)&&(A&&o(w.getComplements(v),function(a){z.push(new i(l,a,j[g].classApplier,k,null,t))}),x=!0,y&&(v=w.union(v)))),x?(m.push(j[g]),j[g]=new i(l,w.union(v),p,k,null,t)):z.push(j[g]);p&&z.push(new i(l,v,p,k,null,t)),this.highlights=j=z}o(m,function(a){a.unapply()});var B=[];return o(j,function(a){a.applied||(a.apply(),B.push(a))}),B},highlightRanges:function(b,c,d){var e=[],f=this.converter;d=n(d,{containerElement:null,exclusive:!0});var g,h=d.containerElement,i=h?h.id:null;return h&&(g=a.createRange(h),g.selectNodeContents(h)),o(c,function(a){var b=h?g.intersection(a):a;e.push(f.rangeToCharacterRange(b,h||m(a.getDocument())))}),this.highlightCharacterRanges(b,e,{containerElementId:i,exclusive:d.exclusive})},highlightSelection:function(b,c){var e=this.converter,f=b?this.classAppliers[b]:!1;c=n(c,{containerElementId:null,selection:a.getSelection(this.doc),exclusive:!0});var g=c.containerElementId,i=c.exclusive,j=c.selection,k=j.win.document,l=d(k,g);if(!f&&b!==!1)throw new Error("No class applier found for class '"+b+"'");var m=e.serializeSelection(j,l),p=[];o(m,function(a){p.push(h.fromCharacterRange(a.characterRange))});var q=this.highlightCharacterRanges(b,p,{containerElementId:g,exclusive:i});return e.restoreSelection(j,m,l),q},unhighlightSelection:function(b){b=b||a.getSelection(this.doc);var c=this.getIntersectingHighlights(b.getAllRanges());return this.removeHighlights(c),b.removeAllRanges(),c},getHighlightsInSelection:function(b){return b=b||a.getSelection(this.doc),this.getIntersectingHighlights(b.getAllRanges())},selectionOverlapsHighlight:function(a){return this.getHighlightsInSelection(a).length>0},serialize:function(a){var b,d,e,f,h=this,i=h.highlights;return i.sort(c),a=n(a,{serializeHighlightText:!1,type:h.converter.type}),b=a.type,e=b!=h.converter.type,e&&(f=g(b)),d=["type:"+b],o(i,function(b){var c,g=b.characterRange;e&&(c=b.getContainerElement(),g=f.rangeToCharacterRange(h.converter.characterRangeToRange(h.doc,g,c),c));var i=[g.start,g.end,b.id,b.classApplier.className,b.containerElementId];a.serializeHighlightText&&i.push(b.getText()),d.push(i.join("$"))}),d.join("|")},deserialize:function(a){var b,c,e,f=a.split("|"),j=[],k=f[0],l=!1;if(!k||!(b=/^type:(\w+)$/.exec(k)))throw new Error("Serialized highlights are invalid.");c=b[1],c!=this.converter.type&&(e=g(c),l=!0),f.shift();for(var m,n,o,p,q,r,s=f.length;s-- >0;){if(r=f[s].split("$"),o=new h(+r[0],+r[1]),p=r[4]||null,l&&(q=d(this.doc,p),o=this.converter.rangeToCharacterRange(e.characterRangeToRange(this.doc,o,q),q)),m=this.classAppliers[r[3]],!m)throw new Error("No class applier found for class '"+r[3]+"'");n=new i(this.doc,o,m,this.converter,parseInt(r[2]),p),n.apply(),j.push(n)}this.highlights=j}},a.Highlighter=j,a.createHighlighter=function(a,b){return new j(a,b)}}),a},this),function(a,b){"function"==typeof define&&define.amd?define(["./rangy-core"],a):"undefined"!=typeof module&&"object"==typeof exports?module.exports=a(require("rangy")):a(b.rangy)}(function(a){return a.createModule("SaveRestore",["WrappedRange"],function(a,b){function c(a,b){return(b||document).getElementById(a)}function d(a,b){var c,d="selectionBoundary_"+ +new Date+"_"+(""+Math.random()).slice(2),e=o.getDocument(a.startContainer),f=a.cloneRange();return f.collapse(b),c=e.createElement("span"),c.id=d,c.style.lineHeight="0",c.style.display="none",c.className="rangySelectionBoundary",c.appendChild(e.createTextNode(r)),f.insertNode(c),c}function e(a,d,e,f){var g=c(e,a);g?(d[f?"setStartBefore":"setEndBefore"](g),p(g)):b.warn("Marker element has been removed. Cannot restore selection.")}function f(a,b){return b.compareBoundaryPoints(a.START_TO_START,a)}function g(b,c){var e,f,g=a.DomRange.getRangeDocument(b),h=b.toString(),i=q(c);return b.collapsed?(f=d(b,!1),{document:g,markerId:f.id,collapsed:!0}):(f=d(b,!1),e=d(b,!0),{document:g,startMarkerId:e.id,endMarkerId:f.id,collapsed:!1,backward:i,toString:function(){return"original text: '"+h+"', new text: '"+b.toString()+"'"}})}function h(d,f){var g=d.document;"undefined"==typeof f&&(f=!0);var h=a.createRange(g);if(d.collapsed){var i=c(d.markerId,g);if(i){i.style.display="inline";var j=i.previousSibling;j&&3==j.nodeType?(p(i),h.collapseToPoint(j,j.length)):(h.collapseBefore(i),p(i))}else b.warn("Marker element has been removed. Cannot restore selection.")}else e(g,h,d.startMarkerId,!0),e(g,h,d.endMarkerId,!1);
+return f&&h.normalizeBoundaries(),h}function i(b,d){var e,h,i=[],j=q(d);b=b.slice(0),b.sort(f);for(var k=0,l=b.length;l>k;++k)i[k]=g(b[k],j);for(k=l-1;k>=0;--k)e=b[k],h=a.DomRange.getRangeDocument(e),e.collapsed?e.collapseAfter(c(i[k].markerId,h)):(e.setEndBefore(c(i[k].endMarkerId,h)),e.setStartAfter(c(i[k].startMarkerId,h)));return i}function j(c){if(!a.isSelectionValid(c))return b.warn("Cannot save selection. This usually happens when the selection is collapsed and the selection document has lost focus."),null;var d=a.getSelection(c),e=d.getAllRanges(),f=1==e.length&&d.isBackward(),g=i(e,f);return f?d.setSingleRange(e[0],f):d.setRanges(e),{win:c,rangeInfos:g,restored:!1}}function k(a){for(var b=[],c=a.length,d=c-1;d>=0;d--)b[d]=h(a[d],!0);return b}function l(b,c){if(!b.restored){var d=b.rangeInfos,e=a.getSelection(b.win),f=k(d),g=d.length;1==g&&c&&a.features.selectionHasExtend&&d[0].backward?(e.removeAllRanges(),e.addRange(f[0],!0)):e.setRanges(f),b.restored=!0}}function m(a,b){var d=c(b,a);d&&p(d)}function n(a){for(var b,c=a.rangeInfos,d=0,e=c.length;e>d;++d)b=c[d],b.collapsed?m(a.doc,b.markerId):(m(a.doc,b.startMarkerId),m(a.doc,b.endMarkerId))}var o=a.dom,p=o.removeNode,q=a.Selection.isDirectionBackward,r="\ufeff";a.util.extend(a,{saveRange:g,restoreRange:h,saveRanges:i,restoreRanges:k,saveSelection:j,restoreSelection:l,removeMarkerElement:m,removeMarkers:n})}),a},this),function(a,b){"function"==typeof define&&define.amd?define(["./rangy-core"],a):"undefined"!=typeof module&&"object"==typeof exports?module.exports=a(require("rangy")):a(b.rangy)}(function(a){return a.createModule("Serializer",["WrappedSelection"],function(a,b){function c(a){return a.replace(/</g,"&lt;").replace(/>/g,"&gt;")}function d(a,b){b=b||[];var e=a.nodeType,f=a.childNodes,g=f.length,h=[e,a.nodeName,g].join(":"),i="",j="";switch(e){case 3:i=c(a.nodeValue);break;case 8:i="<!--"+c(a.nodeValue)+"-->";break;default:i="<"+h+">",j="</>"}i&&b.push(i);for(var k=0;g>k;++k)d(f[k],b);return j&&b.push(j),b}function e(a){var b=d(a).join("");return s(b).toString(16)}function f(a,b,c){var d=[],e=a;for(c=c||t.getDocument(a).documentElement;e&&e!=c;)d.push(t.getNodeIndex(e,!0)),e=e.parentNode;return d.join("/")+":"+b}function g(a,c,d){c||(c=(d||document).documentElement);for(var e,f=a.split(":"),g=c,h=f[0]?f[0].split("/"):[],i=h.length;i--;){if(e=parseInt(h[i],10),!(e<g.childNodes.length))throw b.createError("deserializePosition() failed: node "+t.inspectNode(g)+" has no child with index "+e+", "+i);g=g.childNodes[e]}return new t.DomPosition(g,parseInt(f[1],10))}function h(c,d,g){if(g=g||a.DomRange.getRangeDocument(c).documentElement,!t.isOrIsAncestorOf(g,c.commonAncestorContainer))throw b.createError("serializeRange(): range "+c.inspect()+" is not wholly contained within specified root node "+t.inspectNode(g));var h=f(c.startContainer,c.startOffset,g)+","+f(c.endContainer,c.endOffset,g);return d||(h+="{"+e(g)+"}"),h}function i(c,d,f){d?f=f||t.getDocument(d):(f=f||document,d=f.documentElement);var h=u.exec(c),i=h[4];if(i){var j=e(d);if(i!==j)throw b.createError("deserializeRange(): checksums of serialized range root node ("+i+") and target root node ("+j+") do not match")}var k=g(h[1],d,f),l=g(h[2],d,f),m=a.createRange(f);return m.setStartAndEnd(k.node,k.offset,l.node,l.offset),m}function j(a,b,c){b||(b=(c||document).documentElement);var d=u.exec(a),f=d[3];return!f||f===e(b)}function k(b,c,d){b=a.getSelection(b);for(var e=b.getAllRanges(),f=[],g=0,i=e.length;i>g;++g)f[g]=h(e[g],c,d);return f.join("|")}function l(b,c,d){c?d=d||t.getWindow(c):(d=d||window,c=d.document.documentElement);for(var e=b.split("|"),f=a.getSelection(d),g=[],h=0,j=e.length;j>h;++h)g[h]=i(e[h],c,d.document);return f.setRanges(g),f}function m(a,b,c){var d;b?d=c?c.document:t.getDocument(b):(c=c||window,b=c.document.documentElement);for(var e=a.split("|"),f=0,g=e.length;g>f;++f)if(!j(e[f],b,d))return!1;return!0}function n(a){for(var b,c,d=a.split(/[;,]/),e=0,f=d.length;f>e;++e)if(b=d[e].split("="),b[0].replace(/^\s+/,"")==v&&(c=b[1]))return decodeURIComponent(c.replace(/\s+$/,""));return null}function o(a){a=a||window;var b=n(a.document.cookie);b&&l(b,a.doc)}function p(b,c){b=b||window,c="object"==typeof c?c:{};var d=c.expires?";expires="+c.expires.toUTCString():"",e=c.path?";path="+c.path:"",f=c.domain?";domain="+c.domain:"",g=c.secure?";secure":"",h=k(a.getSelection(b));b.document.cookie=encodeURIComponent(v)+"="+encodeURIComponent(h)+d+e+f+g}var q="undefined",r=a.util;(typeof encodeURIComponent==q||typeof decodeURIComponent==q)&&b.fail("encodeURIComponent and/or decodeURIComponent method is missing");var s=function(){function a(a){for(var b,c=[],d=0,e=a.length;e>d;++d)b=a.charCodeAt(d),128>b?c.push(b):2048>b?c.push(b>>6|192,63&b|128):c.push(b>>12|224,b>>6&63|128,63&b|128);return c}function b(){for(var a,b,c=[],d=0;256>d;++d){for(b=d,a=8;a--;)1==(1&b)?b=b>>>1^3988292384:b>>>=1;c[d]=b>>>0}return c}function c(){return d||(d=b()),d}var d=null;return function(b){for(var d,e=a(b),f=-1,g=c(),h=0,i=e.length;i>h;++h)d=255&(f^e[h]),f=f>>>8^g[d];return(-1^f)>>>0}}(),t=a.dom,u=/^([^,]+),([^,\{]+)(\{([^}]+)\})?$/,v="rangySerializedSelection";r.extend(a,{serializePosition:f,deserializePosition:g,serializeRange:h,deserializeRange:i,canDeserializeRange:j,serializeSelection:k,deserializeSelection:l,canDeserializeSelection:m,restoreSelectionFromCookie:o,saveSelectionCookie:p,getElementChecksum:e,nodeToInfoString:d}),r.crc32=s}),a},this),function(a,b){"function"==typeof define&&define.amd?define(["./rangy-core"],a):"undefined"!=typeof module&&"object"==typeof exports?module.exports=a(require("rangy")):a(b.rangy)}(function(a){return a.createModule("TextRange",["WrappedSelection"],function(a,b){function c(a,b){function c(a,b,c){h.push({start:a,end:b,isWord:c})}for(var d,e,f,g=a.join(""),h=[],i=0;d=b.wordRegex.exec(g);){if(e=d.index,f=e+d[0].length,e>i&&c(i,e,!1),b.includeTrailingSpace)for(;$.test(a[f]);)++f;c(e,f,!0),i=f}return i<a.length&&c(i,a.length,!1),h}function d(a,b){for(var c=a.slice(b.start,b.end),d={isWord:b.isWord,chars:c,toString:function(){return c.join("")}},e=0,f=c.length;f>e;++e)c[e].token=d;return d}function e(a,b,c){for(var e,f=c(a,b),g=[],h=0;e=f[h++];)g.push(d(a,e));return g}function f(a){var b=a||"",c="string"==typeof b?b.split(""):b;return c.sort(function(a,b){return a.charCodeAt(0)-b.charCodeAt(0)}),c.join("").replace(/(.)\1+/g,"$1")}function g(a){var b,c;return a?(b=a.language||_,c={},U(c,ia[b]||ia[_]),U(c,a),c):ia[_]}function h(a,b){var c=V(a,b);return b.hasOwnProperty("wordOptions")&&(c.wordOptions=g(c.wordOptions)),b.hasOwnProperty("characterOptions")&&(c.characterOptions=V(c.characterOptions,ga)),c}function i(a,b){var c=na(a,"display",b),d=a.tagName.toLowerCase();return"block"==c&&fa&&oa.hasOwnProperty(d)?oa[d]:c}function j(a){for(var b=o(a),c=0,d=b.length;d>c;++c)if(1==b[c].nodeType&&"none"==i(b[c]))return!0;return!1}function k(a){var b;return 3==a.nodeType&&(b=a.parentNode)&&"hidden"==na(b,"visibility")}function l(a){return a&&(1==a.nodeType&&!/^(inline(-block|-table)?|none)$/.test(i(a))||9==a.nodeType||11==a.nodeType)}function m(a){return S.isCharacterDataNode(a)||!/^(area|base|basefont|br|col|frame|hr|img|input|isindex|link|meta|param)$/i.test(a.nodeName)}function n(a){for(var b=[];a.parentNode;)b.unshift(a.parentNode),a=a.parentNode;return b}function o(a){return n(a).concat([a])}function p(a){for(;a&&!a.nextSibling;)a=a.parentNode;return a?a.nextSibling:null}function q(a,b){return!b&&a.hasChildNodes()?a.firstChild:p(a)}function r(a){var b=a.previousSibling;if(b){for(a=b;a.hasChildNodes();)a=a.lastChild;return a}var c=a.parentNode;return c&&1==c.nodeType?c:null}function s(a){if(!a||3!=a.nodeType)return!1;var b=a.data;if(""===b)return!0;var c=a.parentNode;if(!c||1!=c.nodeType)return!1;var d=na(a.parentNode,"whiteSpace");return/^[\t\n\r ]+$/.test(b)&&/^(normal|nowrap)$/.test(d)||/^[\t\r ]+$/.test(b)&&"pre-line"==d}function t(a){if(""===a.data)return!0;if(!s(a))return!1;var b=a.parentNode;return b?j(a)?!0:!1:!0}function u(a){var b=a.nodeType;return 7==b||8==b||j(a)||/^(script|style)$/i.test(a.nodeName)||k(a)||t(a)}function v(a,b){var c=a.nodeType;return 7==c||8==c||1==c&&"none"==i(a,b)}function w(){this.store={}}function x(a,b,c){return function(d){var e=this.cache;if(e.hasOwnProperty(a))return pa++,e[a];qa++;var f=b.call(this,c?this[c]:this,d);return e[a]=f,f}}function y(a,b){this.node=a,this.session=b,this.cache=new w,this.positions=new w}function z(a,b){this.offset=b,this.nodeWrapper=a,this.node=a.node,this.session=a.session,this.cache=new w}function A(){return"[Position("+S.inspectNode(this.node)+":"+this.offset+")]"}function B(){return D(),Da=new Ea}function C(){return Da||B()}function D(){Da&&Da.detach(),Da=null}function E(a,c,d,e){function f(){var a=null;return c?(a=h,i||(h=h.previousVisible(),i=!h||d&&h.equals(d))):i||(a=h=h.nextVisible(),i=!h||d&&h.equals(d)),i&&(h=null),a}d&&(c?u(d.node)&&(d=a.previousVisible()):u(d.node)&&(d=d.nextVisible()));var g,h=a,i=!1,j=!1;return{next:function(){if(j)return j=!1,g;for(var a,b;a=f();)if(b=a.getCharacter(e))return g=a,a;return null},rewind:function(){if(!g)throw b.createError("createCharacterIterator: cannot rewind. Only one position can be rewound.");j=!0},dispose:function(){a=d=null}}}function F(a,b,c){function d(a){for(var b,c,d=[],e=a?f:g,h=!1,i=!1;b=e.next();){if(c=b.character,Z.test(c))i&&(i=!1,h=!0);else{if(h){e.rewind();break}i=!0}d.push(b)}return d}var f=E(a,!1,null,b),g=E(a,!0,null,b),h=c.tokenizer,i=d(!0),j=d(!1).reverse(),k=e(j.concat(i),c,h),l=i.length?k.slice(Fa(k,i[0].token)):[],m=j.length?k.slice(0,Fa(k,j.pop().token)+1):[];return{nextEndToken:function(){for(var a,b;1==l.length&&!(a=l[0]).isWord&&(b=d(!0)).length>0;)l=e(a.chars.concat(b),c,h);return l.shift()},previousStartToken:function(){for(var a,b;1==m.length&&!(a=m[0]).isWord&&(b=d(!1)).length>0;)m=e(b.reverse().concat(a.chars),c,h);return m.pop()},dispose:function(){f.dispose(),g.dispose(),l=m=null}}}function G(a,b,c,d,e){var f,g,h,i,j=0,k=a,l=Math.abs(c);if(0!==c){var m=0>c;switch(b){case Q:for(g=E(a,m,null,d);(f=g.next())&&l>j;)++j,k=f;h=f,g.dispose();break;case R:for(var n=F(a,d,e),o=m?n.previousStartToken:n.nextEndToken;(i=o())&&l>j;)i.isWord&&(++j,k=m?i.chars[0]:i.chars[i.chars.length-1]);break;default:throw new Error("movePositionBy: unit '"+b+"' not implemented")}m?(k=k.previousVisible(),j=-j):k&&k.isLeadingSpace&&!k.isTrailingSpace&&(b==R&&(g=E(a,!1,null,d),h=g.next(),g.dispose()),h&&(k=h.previousVisible()))}return{position:k,unitsMoved:j}}function H(a,b,c,d){var e=a.getRangeBoundaryPosition(b,!0),f=a.getRangeBoundaryPosition(b,!1),g=d?f:e,h=d?e:f;return E(g,!!d,h,c)}function I(a,b,c){for(var d,e=[],f=H(a,b,c);d=f.next();)e.push(d);return f.dispose(),e}function J(b,c,d){var e=a.createRange(b.node);return e.setStartAndEnd(b.node,b.offset,c.node,c.offset),!e.expand("word",{wordOptions:d})}function K(a,b,c,d,e){function f(a,b){var c=p[a].previousVisible(),d=p[b-1],f=!e.wholeWordsOnly||J(c,d,e.wordOptions);return{startPos:c,endPos:d,valid:f}}for(var g,h,i,j,k,l,m=aa(e.direction),n=E(a,m,a.session.getRangeBoundaryPosition(d,m),e.characterOptions),o="",p=[],q=null;g=n.next();)if(h=g.character,c||e.caseSensitive||(h=h.toLowerCase()),m?(p.unshift(g),o=h+o):(p.push(g),o+=h),c){if(k=b.exec(o))if(i=k.index,j=i+k[0].length,l){if(!m&&j<o.length||m&&i>0){q=f(i,j);break}}else l=!0}else if(-1!=(i=o.indexOf(b))){q=f(i,i+b.length);break}return l&&(q=f(i,j)),n.dispose(),q}function L(a){return function(){var b=!!Da,c=C(),d=[c].concat(T.toArray(arguments)),e=a.apply(this,d);return b||D(),e}}function M(a,b){return L(function(c,d,e,f){typeof e==P&&(e=d,d=Q),f=h(f,ka);var g=a;b&&(g=e>=0,this.collapse(!g));var i=G(c.getRangeBoundaryPosition(this,g),d,e,f.characterOptions,f.wordOptions),j=i.position;return this[g?"setStart":"setEnd"](j.node,j.offset),i.unitsMoved})}function N(a){return L(function(b,c){c=V(c,ga);for(var d,e=H(b,this,c,!a),f=0;(d=e.next())&&Z.test(d.character);)++f;e.dispose();var g=f>0;return g&&this[a?"moveStart":"moveEnd"]("character",a?f:-f,{characterOptions:c}),g})}function O(a){return L(function(b,c){var d=!1;return this.changeEachRange(function(b){d=b[a](c)||d}),d})}var P="undefined",Q="character",R="word",S=a.dom,T=a.util,U=T.extend,V=T.createOptions,W=S.getBody,X=/^[ \t\f\r\n]+$/,Y=/^[ \t\f\r]+$/,Z=/^[\t-\r \u0085\u00A0\u1680\u180E\u2000-\u200B\u2028\u2029\u202F\u205F\u3000]+$/,$=/^[\t \u00A0\u1680\u180E\u2000-\u200B\u202F\u205F\u3000]+$/,_="en",aa=a.Selection.isDirectionBackward,ba=!1,ca=!1,da=!1,ea=!0;!function(){var b=S.createTestElement(document,"<p>1 </p><p></p>",!0),c=b.firstChild,d=a.getSelection();d.collapse(c.lastChild,2),d.setStart(c.firstChild,0),ba=1==(""+d).length,b.innerHTML="1 <br />",d.collapse(b,2),d.setStart(b.firstChild,0),ca=1==(""+d).length,b.innerHTML="1 <p>1</p>",d.collapse(b,2),d.setStart(b.firstChild,0),da=1==(""+d).length,S.removeNode(b),d.removeAllRanges()}();var fa,ga={includeBlockContentTrailingSpace:!0,includeSpaceBeforeBr:!0,includeSpaceBeforeBlock:!0,includePreLineTrailingSpace:!0,ignoreCharacters:""},ha={includeBlockContentTrailingSpace:!ea,includeSpaceBeforeBr:!ca,includeSpaceBeforeBlock:!da,includePreLineTrailingSpace:!0},ia={en:{wordRegex:/[a-z0-9]+('[a-z0-9]+)*/gi,includeTrailingSpace:!1,tokenizer:c}},ja={caseSensitive:!1,withinRange:null,wholeWordsOnly:!1,wrap:!1,direction:"forward",wordOptions:null,characterOptions:null},ka={wordOptions:null,characterOptions:null},la={wordOptions:null,characterOptions:null,trim:!1,trimStart:!0,trimEnd:!0},ma={wordOptions:null,characterOptions:null,direction:"forward"},na=S.getComputedStyleProperty;!function(){var a=document.createElement("table"),b=W(document);b.appendChild(a),fa="block"==na(a,"display"),b.removeChild(a)}();var oa={table:"table",caption:"table-caption",colgroup:"table-column-group",col:"table-column",thead:"table-header-group",tbody:"table-row-group",tfoot:"table-footer-group",tr:"table-row",td:"table-cell",th:"table-cell"};w.prototype={get:function(a){return this.store.hasOwnProperty(a)?this.store[a]:null},set:function(a,b){return this.store[a]=b}};var pa=0,qa=0,ra={getPosition:function(a){var b=this.positions;return b.get(a)||b.set(a,new z(this,a))},toString:function(){return"[NodeWrapper("+S.inspectNode(this.node)+")]"}};y.prototype=ra;var sa="EMPTY",ta="NON_SPACE",ua="UNCOLLAPSIBLE_SPACE",va="COLLAPSIBLE_SPACE",wa="TRAILING_SPACE_BEFORE_BLOCK",xa="TRAILING_SPACE_IN_BLOCK",ya="TRAILING_SPACE_BEFORE_BR",za="PRE_LINE_TRAILING_SPACE_BEFORE_LINE_BREAK",Aa="TRAILING_LINE_BREAK_AFTER_BR",Ba="INCLUDED_TRAILING_LINE_BREAK_AFTER_BR";U(ra,{isCharacterDataNode:x("isCharacterDataNode",S.isCharacterDataNode,"node"),getNodeIndex:x("nodeIndex",S.getNodeIndex,"node"),getLength:x("nodeLength",S.getNodeLength,"node"),containsPositions:x("containsPositions",m,"node"),isWhitespace:x("isWhitespace",s,"node"),isCollapsedWhitespace:x("isCollapsedWhitespace",t,"node"),getComputedDisplay:x("computedDisplay",i,"node"),isCollapsed:x("collapsed",u,"node"),isIgnored:x("ignored",v,"node"),next:x("nextPos",q,"node"),previous:x("previous",r,"node"),getTextNodeInfo:x("textNodeInfo",function(a){var b=null,c=!1,d=na(a.parentNode,"whiteSpace"),e="pre-line"==d;return e?(b=Y,c=!0):("normal"==d||"nowrap"==d)&&(b=X,c=!0),{node:a,text:a.data,spaceRegex:b,collapseSpaces:c,preLine:e}},"node"),hasInnerText:x("hasInnerText",function(a,b){for(var c=this.session,d=c.getPosition(a.parentNode,this.getNodeIndex()+1),e=c.getPosition(a,0),f=b?d:e,g=b?e:d;f!==g;){if(f.prepopulateChar(),f.isDefinitelyNonEmpty())return!0;f=b?f.previousVisible():f.nextVisible()}return!1},"node"),isRenderedBlock:x("isRenderedBlock",function(a){for(var b=a.getElementsByTagName("br"),c=0,d=b.length;d>c;++c)if(!u(b[c]))return!0;return this.hasInnerText()},"node"),getTrailingSpace:x("trailingSpace",function(a){if("br"==a.tagName.toLowerCase())return"";switch(this.getComputedDisplay()){case"inline":for(var b=a.lastChild;b;){if(!v(b))return 1==b.nodeType?this.session.getNodeWrapper(b).getTrailingSpace():"";b=b.previousSibling}break;case"inline-block":case"inline-table":case"none":case"table-column":case"table-column-group":break;case"table-cell":return"	";default:return this.isRenderedBlock(!0)?"\n":""}return""},"node"),getLeadingSpace:x("leadingSpace",function(a){switch(this.getComputedDisplay()){case"inline":case"inline-block":case"inline-table":case"none":case"table-column":case"table-column-group":case"table-cell":break;default:return this.isRenderedBlock(!1)?"\n":""}return""},"node")});var Ca={character:"",characterType:sa,isBr:!1,prepopulateChar:function(){var a=this;if(!a.prepopulatedChar){var b=a.node,c=a.offset,d="",e=sa,f=!1;if(c>0)if(3==b.nodeType){var g=b.data,h=g.charAt(c-1),i=a.nodeWrapper.getTextNodeInfo(),j=i.spaceRegex;i.collapseSpaces?j.test(h)?c>1&&j.test(g.charAt(c-2))||(i.preLine&&"\n"===g.charAt(c)?(d=" ",e=za):(d=" ",e=va)):(d=h,e=ta,f=!0):(d=h,e=ua,f=!0)}else{var k=b.childNodes[c-1];if(k&&1==k.nodeType&&!u(k)&&("br"==k.tagName.toLowerCase()?(d="\n",a.isBr=!0,e=va,f=!1):a.checkForTrailingSpace=!0),!d){var l=b.childNodes[c];l&&1==l.nodeType&&!u(l)&&(a.checkForLeadingSpace=!0)}}a.prepopulatedChar=!0,a.character=d,a.characterType=e,a.isCharInvariant=f}},isDefinitelyNonEmpty:function(){var a=this.characterType;return a==ta||a==ua},resolveLeadingAndTrailingSpaces:function(){if(this.prepopulatedChar||this.prepopulateChar(),this.checkForTrailingSpace){var a=this.session.getNodeWrapper(this.node.childNodes[this.offset-1]).getTrailingSpace();a&&(this.isTrailingSpace=!0,this.character=a,this.characterType=va),this.checkForTrailingSpace=!1}if(this.checkForLeadingSpace){var b=this.session.getNodeWrapper(this.node.childNodes[this.offset]).getLeadingSpace();b&&(this.isLeadingSpace=!0,this.character=b,this.characterType=va),this.checkForLeadingSpace=!1}},getPrecedingUncollapsedPosition:function(a){for(var b,c=this;c=c.previousVisible();)if(b=c.getCharacter(a),""!==b)return c;return null},getCharacter:function(a){function b(){return n||(k=o.getPrecedingUncollapsedPosition(a),n=!0),k}this.resolveLeadingAndTrailingSpaces();var c,d=this.character,e=f(a.ignoreCharacters),g=""!==d&&e.indexOf(d)>-1;if(this.isCharInvariant)return c=g?"":d;var h=["character",a.includeSpaceBeforeBr,a.includeBlockContentTrailingSpace,a.includePreLineTrailingSpace,e].join("_"),i=this.cache.get(h);if(null!==i)return i;var j,k,l="",m=this.characterType==va,n=!1,o=this;return m&&(this.type==Ba?l="\n":" "==d&&(!b()||k.isTrailingSpace||"\n"==k.character||" "==k.character&&k.characterType==va)||("\n"==d&&this.isLeadingSpace?b()&&"\n"!=k.character&&(l="\n"):(j=this.nextUncollapsed(),j&&(j.isBr?this.type=ya:j.isTrailingSpace&&"\n"==j.character?this.type=xa:j.isLeadingSpace&&"\n"==j.character&&(this.type=wa),"\n"==j.character?(this.type!=ya||a.includeSpaceBeforeBr)&&(this.type!=wa||a.includeSpaceBeforeBlock)&&(this.type==xa&&j.isTrailingSpace&&!a.includeBlockContentTrailingSpace||(this.type!=za||j.type!=ta||a.includePreLineTrailingSpace)&&("\n"==d?j.isTrailingSpace?this.isTrailingSpace||this.isBr&&(j.type=Aa,b()&&k.isLeadingSpace&&!k.isTrailingSpace&&"\n"==k.character?j.character="":j.type=Ba):l="\n":" "==d&&(l=" "))):l=d)))),e.indexOf(l)>-1&&(l=""),this.cache.set(h,l),l},equals:function(a){return!!a&&this.node===a.node&&this.offset===a.offset},inspect:A,toString:function(){return this.character}};z.prototype=Ca,U(Ca,{next:x("nextPos",function(a){var b=a.nodeWrapper,c=a.node,d=a.offset,e=b.session;if(!c)return null;var f,g,h;return d==b.getLength()?(f=c.parentNode,g=f?b.getNodeIndex()+1:0):b.isCharacterDataNode()?(f=c,g=d+1):(h=c.childNodes[d],e.getNodeWrapper(h).containsPositions()?(f=h,g=0):(f=c,g=d+1)),f?e.getPosition(f,g):null}),previous:x("previous",function(a){var b,c,d,e=a.nodeWrapper,f=a.node,g=a.offset,h=e.session;return 0==g?(b=f.parentNode,c=b?e.getNodeIndex():0):e.isCharacterDataNode()?(b=f,c=g-1):(d=f.childNodes[g-1],h.getNodeWrapper(d).containsPositions()?(b=d,c=S.getNodeLength(d)):(b=f,c=g-1)),b?h.getPosition(b,c):null}),nextVisible:x("nextVisible",function(a){var b=a.next();if(!b)return null;var c=b.nodeWrapper,d=b.node,e=b;return c.isCollapsed()&&(e=c.session.getPosition(d.parentNode,c.getNodeIndex()+1)),e}),nextUncollapsed:x("nextUncollapsed",function(a){for(var b=a;b=b.nextVisible();)if(b.resolveLeadingAndTrailingSpaces(),""!==b.character)return b;return null}),previousVisible:x("previousVisible",function(a){var b=a.previous();if(!b)return null;var c=b.nodeWrapper,d=b.node,e=b;return c.isCollapsed()&&(e=c.session.getPosition(d.parentNode,c.getNodeIndex())),e})});var Da=null,Ea=function(){function a(a){var b=new w;return{get:function(c){var d=b.get(c[a]);if(d)for(var e,f=0;e=d[f++];)if(e.node===c)return e;return null},set:function(c){var d=c.node[a],e=b.get(d)||b.set(d,[]);e.push(c)}}}function b(){this.initCaches()}var c=T.isHostProperty(document.documentElement,"uniqueID");return b.prototype={initCaches:function(){this.elementCache=c?function(){var a=new w;return{get:function(b){return a.get(b.uniqueID)},set:function(b){a.set(b.node.uniqueID,b)}}}():a("tagName"),this.textNodeCache=a("data"),this.otherNodeCache=a("nodeName")},getNodeWrapper:function(a){var b;switch(a.nodeType){case 1:b=this.elementCache;break;case 3:b=this.textNodeCache;break;default:b=this.otherNodeCache}var c=b.get(a);return c||(c=new y(a,this),b.set(c)),c},getPosition:function(a,b){return this.getNodeWrapper(a).getPosition(b)},getRangeBoundaryPosition:function(a,b){var c=b?"start":"end";return this.getPosition(a[c+"Container"],a[c+"Offset"])},detach:function(){this.elementCache=this.textNodeCache=this.otherNodeCache=null}},b}();U(S,{nextNode:q,previousNode:r});var Fa=Array.prototype.indexOf?function(a,b){return a.indexOf(b)}:function(a,b){for(var c=0,d=a.length;d>c;++c)if(a[c]===b)return c;return-1};U(a.rangePrototype,{moveStart:M(!0,!1),moveEnd:M(!1,!1),move:M(!0,!0),trimStart:N(!0),trimEnd:N(!1),trim:L(function(a,b){var c=this.trimStart(b),d=this.trimEnd(b);return c||d}),expand:L(function(a,b,c){var d=!1;c=h(c,la);var e=c.characterOptions;if(b||(b=Q),b==R){var f,g,i=c.wordOptions,j=a.getRangeBoundaryPosition(this,!0),k=a.getRangeBoundaryPosition(this,!1),l=F(j,e,i),m=l.nextEndToken(),n=m.chars[0].previousVisible();if(this.collapsed)f=m;else{var o=F(k,e,i);f=o.previousStartToken()}return g=f.chars[f.chars.length-1],n.equals(j)||(this.setStart(n.node,n.offset),d=!0),g&&!g.equals(k)&&(this.setEnd(g.node,g.offset),d=!0),c.trim&&(c.trimStart&&(d=this.trimStart(e)||d),c.trimEnd&&(d=this.trimEnd(e)||d)),d}return this.moveEnd(Q,1,c)}),text:L(function(a,b){return this.collapsed?"":I(a,this,V(b,ga)).join("")}),selectCharacters:L(function(a,b,c,d,e){var f={characterOptions:e};b||(b=W(this.getDocument())),this.selectNodeContents(b),this.collapse(!0),this.moveStart("character",c,f),this.collapse(!0),this.moveEnd("character",d-c,f)}),toCharacterRange:L(function(a,b,c){b||(b=W(this.getDocument()));var d,e,f=b.parentNode,g=S.getNodeIndex(b),h=-1==S.comparePoints(this.startContainer,this.endContainer,f,g),i=this.cloneRange();return h?(i.setStartAndEnd(this.startContainer,this.startOffset,f,g),d=-i.text(c).length):(i.setStartAndEnd(f,g,this.startContainer,this.startOffset),d=i.text(c).length),e=d+this.text(c).length,{start:d,end:e}}),findText:L(function(b,c,d){d=h(d,ja),d.wholeWordsOnly&&(d.wordOptions.includeTrailingSpace=!1);var e=aa(d.direction),f=d.withinRange;f||(f=a.createRange(),f.selectNodeContents(this.getDocument()));var g=c,i=!1;"string"==typeof g?d.caseSensitive||(g=g.toLowerCase()):i=!0;var j=b.getRangeBoundaryPosition(this,!e),k=f.comparePoint(j.node,j.offset);-1===k?j=b.getRangeBoundaryPosition(f,!0):1===k&&(j=b.getRangeBoundaryPosition(f,!1));for(var l,m=j,n=!1;;)if(l=K(m,g,i,f,d)){if(l.valid)return this.setStartAndEnd(l.startPos.node,l.startPos.offset,l.endPos.node,l.endPos.offset),!0;m=e?l.startPos:l.endPos}else{if(!d.wrap||n)return!1;f=f.cloneRange(),m=b.getRangeBoundaryPosition(f,!e),f.setBoundary(j.node,j.offset,e),n=!0}}),pasteHtml:function(a){if(this.deleteContents(),a){var b=this.createContextualFragment(a),c=b.lastChild;this.insertNode(b),this.collapseAfter(c)}}}),U(a.selectionPrototype,{expand:L(function(a,b,c){this.changeEachRange(function(a){a.expand(b,c)})}),move:L(function(a,b,c,d){var e=0;if(this.focusNode){this.collapse(this.focusNode,this.focusOffset);var f=this.getRangeAt(0);d||(d={}),d.characterOptions=V(d.characterOptions,ha),e=f.move(b,c,d),this.setSingleRange(f)}return e}),trimStart:O("trimStart"),trimEnd:O("trimEnd"),trim:O("trim"),selectCharacters:L(function(b,c,d,e,f,g){var h=a.createRange(c);h.selectCharacters(c,d,e,g),this.setSingleRange(h,f)}),saveCharacterRanges:L(function(a,b,c){for(var d=this.getAllRanges(),e=d.length,f=[],g=1==e&&this.isBackward(),h=0,i=d.length;i>h;++h)f[h]={characterRange:d[h].toCharacterRange(b,c),backward:g,characterOptions:c};return f}),restoreCharacterRanges:L(function(b,c,d){this.removeAllRanges();for(var e,f,g,h=0,i=d.length;i>h;++h)f=d[h],g=f.characterRange,e=a.createRange(c),e.selectCharacters(c,g.start,g.end,f.characterOptions),this.addRange(e,f.backward)}),text:L(function(a,b){for(var c=[],d=0,e=this.rangeCount;e>d;++d)c[d]=this.getRangeAt(d).text(b);return c.join("")})}),a.innerText=function(b,c){var d=a.createRange(b);d.selectNodeContents(b);var e=d.text(c);return e},a.createWordIterator=function(a,b,c){var d=C();c=h(c,ma);var e=d.getPosition(a,b),f=F(e,c.characterOptions,c.wordOptions),g=aa(c.direction);return{next:function(){return g?f.previousStartToken():f.nextEndToken()},dispose:function(){f.dispose(),this.next=function(){}}}},a.noMutation=function(a){var b=C();a(b),D()},a.noMutation.createEntryPointFunction=L,a.textRange={isBlockNode:l,isCollapsedWhitespaceNode:t,createPosition:L(function(a,b,c){return a.getPosition(b,c)})}}),a},this),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="textAngular"),function(){"use strict";var a={ie:function(){for(var a,b=3,c=document.createElement("div"),d=c.getElementsByTagName("i");c.innerHTML="<!--[if gt IE "+ ++b+"]><i></i><![endif]-->",d[0];);return b>4?b:a}(),webkit:/AppleWebKit\/([\d.]+)/i.test(navigator.userAgent)},b=!1;a.webkit&&(document.addEventListener("mousedown",function(a){var c=a||window.event,d=c.target;if(b&&null!==d){for(var e=!1,f=d;null!==f&&"html"!==f.tagName.toLowerCase()&&!e;)e="true"===f.contentEditable,f=f.parentNode;e||(document.getElementById("textAngular-editableFix-010203040506070809").setSelectionRange(0,0),d.focus(),d.select&&d.select())}b=!1},!1),angular.element(document).ready(function(){angular.element(document.body).append(angular.element('<input id="textAngular-editableFix-010203040506070809" class="ta-hidden-input" aria-hidden="true" unselectable="on" tabIndex="-1">'))}));var c=/^(address|article|aside|audio|blockquote|canvas|dd|div|dl|fieldset|figcaption|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|noscript|ol|output|p|pre|section|table|tfoot|ul|video)$/i,d=/^(ul|li|ol)$/i,e=/^(address|article|aside|audio|blockquote|canvas|dd|div|dl|fieldset|figcaption|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|noscript|ol|output|p|pre|section|table|tfoot|ul|video|li)$/i;String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")});var f,g,h,i,j,k;if(a.ie>8||void 0===a.ie){for(var l=document.styleSheets,m=0;m<l.length;m++)if((0===l[m].media.length||l[m].media.mediaText.match(/(all|screen)/gi))&&l[m].href&&l[m].href.match(/textangular\.(min\.|)css/gi)){f=l[m];break}f||(f=function(){var b=document.createElement("style");return a.webkit&&b.appendChild(document.createTextNode("")),document.getElementsByTagName("head")[0].appendChild(b),b.sheet}()),g=function(a,b){return i(f,a,b)},i=function(a,b,c){var d,e;return a.cssRules?d=Math.max(a.cssRules.length-1,0):a.rules&&(d=Math.max(a.rules.length-1,0)),a.insertRule?a.insertRule(b+"{"+c+"}",d):a.addRule(b,c,d),f.rules?e=f.rules[d]:f.cssRules&&(e=f.cssRules[d]),e},k=function(a,b){var c,d;for(c=0;c<b.length;c++)if(b[c].cssText===a.cssText){d=c;break}return d},h=function(a){j(f,a)},j=function(a,b){var c=a.cssRules||a.rules;if(c&&0!==c.length){var d=k(b,c);a.removeRule?a.removeRule(d):a.deleteRule(d)}}}angular.module("textAngular.factories",[]).factory("taBrowserTag",[function(){return function(b){return b?""===b?void 0===a.ie?"div":a.ie<=8?"P":"p":a.ie<=8?b.toUpperCase():b:a.ie<=8?"P":"p"}}]).factory("taApplyCustomRenderers",["taCustomRenderers","taDOM",function(a,b){return function(c){var d=angular.element("<div></div>");return d[0].innerHTML=c,angular.forEach(a,function(a){var c=[];a.selector&&""!==a.selector?c=d.find(a.selector):a.customAttribute&&""!==a.customAttribute&&(c=b.getByAttribute(d,a.customAttribute)),angular.forEach(c,function(b){b=angular.element(b),a.selector&&""!==a.selector&&a.customAttribute&&""!==a.customAttribute?void 0!==b.attr(a.customAttribute)&&a.renderLogic(b):a.renderLogic(b)})}),d[0].innerHTML}}]).factory("taFixChrome",function(){var a=function(a){if(!a||!angular.isString(a)||a.length<=0)return a;for(var b,c,d,e=/<([^>\/]+?)style=("([^"]+)"|'([^']+)')([^>]*)>/gi,f="",g=0;b=e.exec(a);)c=b[3]||b[4],c&&c.match(/line-height: 1.[0-9]{3,12};|color: inherit; line-height: 1.1;/i)&&(c=c.replace(/( |)font-family: inherit;|( |)line-height: 1.[0-9]{3,12};|( |)color: inherit;/gi,""),d="<"+b[1].trim(),c.trim().length>0&&(d+=" style="+b[2].substring(0,1)+c+b[2].substring(0,1)),d+=b[5].trim()+">",f+=a.substring(g,b.index)+d,g=b.index+b[0].length);return f+=a.substring(g),g>0?f.replace(/<span\s?>(.*?)<\/span>(<br(\/|)>|)/gi,"$1"):a};return a}).factory("taSanitize",["$sanitize",function(a){function b(a,b){for(var c,d=0,e=0,f=/<[^>]*>/gi;c=f.exec(a);)if(e=c.index,"/"===c[0].substr(1,1)){if(0===d)break;d--}else d++;return b+a.substring(0,e)+angular.element(b)[0].outerHTML.substring(b.length)+a.substring(e)}function c(a){if(!a||!angular.isString(a)||a.length<=0)return a;for(var d,f,g,h,i,k,l=/<([^>\/]+?)style=("([^"]+)"|'([^']+)')([^>]*)>/gi,m="",n="",o=0;f=l.exec(a);){h=f[3]||f[4];var p=new RegExp(j,"i");if(angular.isString(h)&&p.test(h)){i="";for(var q=new RegExp(j,"ig");g=q.exec(h);)for(d=0;d<e.length;d++)g[2*d+2]&&(i+="<"+e[d].tag+">");k=c(a.substring(o,f.index)),n+=m.length>0?b(k,m):k,h=h.replace(new RegExp(j,"ig"),""),n+="<"+f[1].trim(),h.length>0&&(n+=' style="'+h+'"'),n+=f[5]+">",o=f.index+f[0].length,m=i}}return n+=m.length>0?b(a.substring(o),m):a.substring(o)}function d(a){if(!a||!angular.isString(a)||a.length<=0)return a;for(var b,c=/<([^>\/]+?)align=("([^"]+)"|'([^']+)')([^>]*)>/gi,d="",e=0;b=c.exec(a);){d+=a.substring(e,b.index),e=b.index+b[0].length;var f="<"+b[1]+b[5];/style=("([^"]+)"|'([^']+)')/gi.test(f)?f=f.replace(/style=("([^"]+)"|'([^']+)')/i,'style="$2$3 text-align:'+(b[3]||b[4])+';"'):f+=' style="text-align:'+(b[3]||b[4])+';"',f+=">",d+=f}return d+a.substring(e)}for(var e=[{property:"font-weight",values:["bold"],tag:"b"},{property:"font-style",values:["italic"],tag:"i"}],f=[],g=0;g<e.length;g++){for(var h="("+e[g].property+":\\s*(",i=0;i<e[g].values.length;i++)i>0&&(h+="|"),h+=e[g].values[i];h+=");)",f.push(h)}var j="("+f.join("|")+")";return function(b,e,f){if(!f)try{b=c(b)}catch(g){}b=d(b);var h;try{h=a(b),f&&(h=b)}catch(g){h=e||""}var i,j=h.match(/(<pre[^>]*>.*?<\/pre[^>]*>)/gi),k=h.replace(/(&#(9|10);)*/gi,""),l=/<pre[^>]*>.*?<\/pre[^>]*>/gi,m=0,n=0;for(h="";null!==(i=l.exec(k))&&m<j.length;)h+=k.substring(n,i.index)+j[m],n=i.index+i[0].length,m++;return h+k.substring(n)}}]).factory("taToolExecuteAction",["$q","$log",function(a,b){return function(c){void 0!==c&&(this.$editor=function(){return c});var d,e=a.defer(),f=e.promise,g=this.$editor();try{d=this.action(e,g.startAction()),f["finally"](function(){g.endAction.call(g)})}catch(h){b.error(h)}(d||void 0===d)&&e.resolve()}}]),angular.module("textAngular.DOM",["textAngular.factories"]).factory("taExecCommand",["taSelection","taBrowserTag","$document",function(a,b,e){var f=function(b,c){var d,e,f=b.find("li");for(e=f.length-1;e>=0;e--)d=angular.element("<"+c+">"+f[e].innerHTML+"</"+c+">"),b.after(d);
+b.remove(),a.setSelectionToElementEnd(d[0])},g=function(b){/(<br(|\/)>)$/i.test(b.innerHTML.trim())?a.setSelectionBeforeElement(angular.element(b).find("br")[0]):a.setSelectionToElementEnd(b)},h=function(a,b){var c=angular.element("<"+b+">"+a[0].innerHTML+"</"+b+">");a.after(c),a.remove(),g(c.find("li")[0])},i=function(a,c,d){for(var e="",f=0;f<a.length;f++)e+="<"+b("li")+">"+a[f].innerHTML+"</"+b("li")+">";var h=angular.element("<"+d+">"+e+"</"+d+">");c.after(h),c.remove(),g(h.find("li")[0])};return function(g,j){return g=b(g),function(k,l,m,n){var o,p,q,r,s,t,u,v=angular.element("<"+g+">");try{u=a.getSelectionElement()}catch(w){}var x=angular.element(u);if(void 0!==u){var y=u.tagName.toLowerCase();if("insertorderedlist"===k.toLowerCase()||"insertunorderedlist"===k.toLowerCase()){var z=b("insertorderedlist"===k.toLowerCase()?"ol":"ul");if(y===z)return f(x,g);if("li"===y&&x.parent()[0].tagName.toLowerCase()===z&&1===x.parent().children().length)return f(x.parent(),g);if("li"===y&&x.parent()[0].tagName.toLowerCase()!==z&&1===x.parent().children().length)return h(x.parent(),z);if(y.match(c)&&!x.hasClass("ta-bind")){if("ol"===y||"ul"===y)return h(x,z);var A=!1;return angular.forEach(x.children(),function(a){a.tagName.match(c)&&(A=!0)}),A?i(x.children(),x,z):i([angular.element("<div>"+u.innerHTML+"</div>")[0]],x,z)}if(y.match(c)){if(r=a.getOnlySelectedElements(),0===r.length)p=angular.element("<"+z+"><li>"+u.innerHTML+"</li></"+z+">"),x.html(""),x.append(p);else{if(1===r.length&&("ol"===r[0].tagName.toLowerCase()||"ul"===r[0].tagName.toLowerCase()))return r[0].tagName.toLowerCase()===z?f(angular.element(r[0]),g):h(angular.element(r[0]),z);q="";var B=[];for(o=0;o<r.length;o++)if(3!==r[o].nodeType){var C=angular.element(r[o]);if("li"===r[o].tagName.toLowerCase())continue;q+="ol"===r[o].tagName.toLowerCase()||"ul"===r[o].tagName.toLowerCase()?C[0].innerHTML:"span"!==r[o].tagName.toLowerCase()||"ol"!==r[o].childNodes[0].tagName.toLowerCase()&&"ul"!==r[o].childNodes[0].tagName.toLowerCase()?"<"+b("li")+">"+C[0].innerHTML+"</"+b("li")+">":C[0].childNodes[0].innerHTML,B.unshift(C)}p=angular.element("<"+z+">"+q+"</"+z+">"),B.pop().replaceWith(p),angular.forEach(B,function(a){a.remove()})}return void a.setSelectionToElementEnd(p[0])}}else{if("formatblock"===k.toLowerCase()){for(t=m.toLowerCase().replace(/[<>]/gi,""),"default"===t.trim()&&(t=g,m="<"+g+">"),p="li"===y?x.parent():x;!p[0].tagName||!p[0].tagName.match(c)&&!p.parent().attr("contenteditable");)p=p.parent(),y=(p[0].tagName||"").toLowerCase();if(y===t){r=p.children();var D=!1;for(o=0;o<r.length;o++)D=D||r[o].tagName.match(c);D?(p.after(r),s=p.next(),p.remove(),p=s):(v.append(p[0].childNodes),p.after(v),p.remove(),p=v)}else if(p.parent()[0].tagName.toLowerCase()!==t||p.parent().hasClass("ta-bind"))if(y.match(d))p.wrap(m);else{for(r=a.getOnlySelectedElements(),0===r.length&&(r=[p[0]]),o=0;o<r.length;o++)if(3===r[o].nodeType||!r[o].tagName.match(c))for(;3===r[o].nodeType||!r[o].tagName||!r[o].tagName.match(c);)r[o]=r[o].parentNode;if(angular.element(r[0]).hasClass("ta-bind"))p=angular.element(m),p[0].innerHTML=r[0].innerHTML,r[0].innerHTML=p[0].outerHTML;else if("blockquote"===t){for(q="",o=0;o<r.length;o++)q+=r[o].outerHTML;for(p=angular.element(m),p[0].innerHTML=q,r[0].parentNode.insertBefore(p[0],r[0]),o=r.length-1;o>=0;o--)r[o].parentNode&&r[o].parentNode.removeChild(r[o])}else for(o=0;o<r.length;o++)p=angular.element(m),p[0].innerHTML=r[o].innerHTML,r[o].parentNode.insertBefore(p[0],r[o]),r[o].parentNode.removeChild(r[o])}else{var E=p.parent(),F=E.contents();for(o=0;o<F.length;o++)E.parent().hasClass("ta-bind")&&3===F[o].nodeType&&(v=angular.element("<"+g+">"),v[0].innerHTML=F[o].outerHTML,F[o]=v[0]),E.parent()[0].insertBefore(F[o],E[0]);E.remove()}return void a.setSelectionToElementEnd(p[0])}if("createlink"===k.toLowerCase()){var G='<a href="'+m+'" target="'+(n.a.target?n.a.target:"")+'">',H="</a>",I=a.getSelection();if(I.collapsed)a.insertHtml(G+m+H,j);else if(rangy.getSelection().getRangeAt(0).canSurroundContents()){var J=angular.element(G+H)[0];rangy.getSelection().getRangeAt(0).surroundContents(J)}return}if("inserthtml"===k.toLowerCase())return void a.insertHtml(m,j)}}try{e[0].execCommand(k,l,m)}catch(w){}}}}]).service("taSelection",["$window","$document","taDOM",function(a,b,d){var f=b[0],g=a.rangy,h=function(a,b){return a.tagName&&a.tagName.match(/^br$/i)&&0===b&&!a.previousSibling?{element:a.parentNode,offset:0}:{element:a,offset:b}},i={getSelection:function(){var a=g.getSelection().getRangeAt(0),b=a.commonAncestorContainer,c={start:h(a.startContainer,a.startOffset),end:h(a.endContainer,a.endOffset),collapsed:a.collapsed};return b=3===b.nodeType?b.parentNode:b,b.parentNode===c.start.element||b.parentNode===c.end.element?c.container=b.parentNode:c.container=b,c},getOnlySelectedElements:function(){var a=g.getSelection().getRangeAt(0),b=a.commonAncestorContainer;return b=3===b.nodeType?b.parentNode:b,a.getNodes([1],function(a){return a.parentNode===b})},getSelectionElement:function(){return i.getSelection().container},setSelection:function(a,b,c){var d=g.createRange();d.setStart(a,b),d.setEnd(a,c),g.getSelection().setSingleRange(d)},setSelectionBeforeElement:function(a){var b=g.createRange();b.selectNode(a),b.collapse(!0),g.getSelection().setSingleRange(b)},setSelectionAfterElement:function(a){var b=g.createRange();b.selectNode(a),b.collapse(!1),g.getSelection().setSingleRange(b)},setSelectionToElementStart:function(a){var b=g.createRange();b.selectNodeContents(a),b.collapse(!0),g.getSelection().setSingleRange(b)},setSelectionToElementEnd:function(a){var b=g.createRange();b.selectNodeContents(a),b.collapse(!1),a.childNodes&&a.childNodes[a.childNodes.length-1]&&"br"===a.childNodes[a.childNodes.length-1].nodeName&&(b.startOffset=b.endOffset=b.startOffset-1),g.getSelection().setSingleRange(b)},insertHtml:function(a,b){var h,j,k,l,m,n,o,p=angular.element("<div>"+a+"</div>"),q=g.getSelection().getRangeAt(0),r=f.createDocumentFragment(),s=p[0].childNodes,t=!0;if(s.length>0){for(l=[],k=0;k<s.length;k++)"p"===s[k].nodeName.toLowerCase()&&""===s[k].innerHTML.trim()||3===s[k].nodeType&&""===s[k].nodeValue.trim()||(t=t&&!c.test(s[k].nodeName),l.push(s[k]));for(var u=0;u<l.length;u++)n=r.appendChild(l[u]);!t&&q.collapsed&&/^(|<br(|\/)>)$/i.test(q.startContainer.innerHTML)&&q.selectNode(q.startContainer)}else t=!0,n=r=f.createTextNode(a);if(t)q.deleteContents();else if(q.collapsed&&q.startContainer!==b)if(q.startContainer.innerHTML&&q.startContainer.innerHTML.match(/^<[^>]*>$/i))h=q.startContainer,1===q.startOffset?(q.setStartAfter(h),q.setEndAfter(h)):(q.setStartBefore(h),q.setEndBefore(h));else{if(3===q.startContainer.nodeType&&q.startContainer.parentNode!==b)for(h=q.startContainer.parentNode,j=h.cloneNode(),d.splitNodes(h.childNodes,h,j,q.startContainer,q.startOffset);!e.test(h.nodeName);){angular.element(h).after(j),h=h.parentNode;var v=j;j=h.cloneNode(),d.splitNodes(h.childNodes,h,j,v)}else h=q.startContainer,j=h.cloneNode(),d.splitNodes(h.childNodes,h,j,void 0,void 0,q.startOffset);if(angular.element(h).after(j),q.setStartAfter(h),q.setEndAfter(h),/^(|<br(|\/)>)$/i.test(h.innerHTML.trim())&&(q.setStartBefore(h),q.setEndBefore(h),angular.element(h).remove()),/^(|<br(|\/)>)$/i.test(j.innerHTML.trim())&&angular.element(j).remove(),"li"===h.nodeName.toLowerCase()){for(o=f.createDocumentFragment(),m=0;m<r.childNodes.length;m++)p=angular.element("<li>"),d.transferChildNodes(r.childNodes[m],p[0]),d.transferNodeAttributes(r.childNodes[m],p[0]),o.appendChild(p[0]);r=o,n&&(n=r.childNodes[r.childNodes.length-1],n=n.childNodes[n.childNodes.length-1])}}else q.deleteContents();q.insertNode(r),n&&i.setSelectionToElementEnd(n)}};return i}]).service("taDOM",function(){var a={getByAttribute:function(b,c){var d=[],e=b.children();return e.length&&angular.forEach(e,function(b){d=d.concat(a.getByAttribute(angular.element(b),c))}),void 0!==b.attr(c)&&d.push(b),d},transferChildNodes:function(a,b){for(b.innerHTML="";a.childNodes.length>0;)b.appendChild(a.childNodes[0]);return b},splitNodes:function(b,c,d,e,f,g){if(!e&&isNaN(g))throw new Error("taDOM.splitNodes requires a splitNode or splitIndex");for(var h=document.createDocumentFragment(),i=document.createDocumentFragment(),j=0;b.length>0&&(isNaN(g)||g!==j)&&b[0]!==e;)h.appendChild(b[0]),j++;for(!isNaN(f)&&f>=0&&b[0]&&(h.appendChild(document.createTextNode(b[0].nodeValue.substring(0,f))),b[0].nodeValue=b[0].nodeValue.substring(f));b.length>0;)i.appendChild(b[0]);a.transferChildNodes(h,c),a.transferChildNodes(i,d)},transferNodeAttributes:function(a,b){for(var c=0;c<a.attributes.length;c++)b.setAttribute(a.attributes[c].name,a.attributes[c].value);return b}};return a}),angular.module("textAngular.validators",[]).directive("taMaxText",function(){return{restrict:"A",require:"ngModel",link:function(a,b,c,d){var e=parseInt(a.$eval(c.taMaxText));if(isNaN(e))throw"Max text must be an integer";c.$observe("taMaxText",function(a){if(e=parseInt(a),isNaN(e))throw"Max text must be an integer";d.$dirty&&d.$validate()}),d.$validators.taMaxText=function(a){var b=angular.element("<div/>");return b.html(a),b.text().length<=e}}}}).directive("taMinText",function(){return{restrict:"A",require:"ngModel",link:function(a,b,c,d){var e=parseInt(a.$eval(c.taMinText));if(isNaN(e))throw"Min text must be an integer";c.$observe("taMinText",function(a){if(e=parseInt(a),isNaN(e))throw"Min text must be an integer";d.$dirty&&d.$validate()}),d.$validators.taMinText=function(a){var b=angular.element("<div/>");return b.html(a),!b.text().length||b.text().length>=e}}}}),angular.module("textAngular.taBind",["textAngular.factories","textAngular.DOM"]).service("_taBlankTest",[function(){var a=/<(a|abbr|acronym|bdi|bdo|big|cite|code|del|dfn|img|ins|kbd|label|map|mark|q|ruby|rp|rt|s|samp|time|tt|var)[^>]*(>|$)/i;return function(b){return function(c){if(!c)return!0;var d,e=/(^[^<]|>)[^<]/i.exec(c);return e?d=e.index:(c=c.toString().replace(/="[^"]*"/i,"").replace(/="[^"]*"/i,"").replace(/="[^"]*"/i,"").replace(/="[^"]*"/i,""),d=c.indexOf(">")),c=c.trim().substring(d,d+100),/^[^<>]+$/i.test(c)?!1:0===c.length||c===b||/^>(\s|&nbsp;)*<\/[^>]+>$/gi.test(c)?!0:/>\s*[^\s<]/i.test(c)||a.test(c)?!1:!0}}}]).directive("taButton",[function(){return{link:function(a,b,c){b.attr("unselectable","on"),b.on("mousedown",function(a,b){return b&&angular.extend(a,b),a.preventDefault(),!1})}}}]).directive("taBind",["taSanitize","$timeout","$window","$document","taFixChrome","taBrowserTag","taSelection","taSelectableElements","taApplyCustomRenderers","taOptions","_taBlankTest","$parse","taDOM","textAngularManager",function(d,f,i,j,k,l,m,o,p,q,r,s,t,u){return{priority:2,require:["ngModel","?ngModelOptions"],link:function(l,v,w,x){function y(a){var b;return R.forEach(function(c){if(c.keyCode===a.keyCode){var d=(a.metaKey?O:0)+(a.ctrlKey?N:0)+(a.shiftKey?Q:0)+(a.altKey?P:0);if(c.forbiddenModifiers&d)return;c.mustHaveModifiers.every(function(a){return d&a})&&(b=c.specialKey)}}),b}var z,A,B,C,D=x[0],E=x[1]||{},F=void 0!==v.attr("contenteditable")&&v.attr("contenteditable"),G=F||"textarea"===v[0].tagName.toLowerCase()||"input"===v[0].tagName.toLowerCase(),H=!1,I=!1,J=!1,K=w.taUnsafeSanitizer||q.disableSanitizer,L=/^(9|19|20|27|33|34|35|36|37|38|39|40|45|112|113|114|115|116|117|118|119|120|121|122|123|144|145)$/i,M=/^(8|13|32|46|59|61|107|109|173|186|187|188|189|190|191|192|219|220|221|222)$/i,N=1,O=2,P=4,Q=8,R=[{specialKey:"UndoKey",forbiddenModifiers:P+Q,mustHaveModifiers:[O+N],keyCode:90},{specialKey:"RedoKey",forbiddenModifiers:P,mustHaveModifiers:[O+N,Q],keyCode:90},{specialKey:"RedoKey",forbiddenModifiers:P+Q,mustHaveModifiers:[O+N],keyCode:89},{specialKey:"TabKey",forbiddenModifiers:O+Q+P+N,mustHaveModifiers:[],keyCode:9},{specialKey:"ShiftTabKey",forbiddenModifiers:O+P+N,mustHaveModifiers:[Q],keyCode:9}];void 0===w.taDefaultWrap&&(w.taDefaultWrap="p"),""===w.taDefaultWrap?(B="",C=void 0===a.ie?"<div><br></div>":a.ie>=11?"<p><br></p>":a.ie<=8?"<P>&nbsp;</P>":"<p>&nbsp;</p>"):(B=void 0===a.ie||a.ie>=11?"<"+w.taDefaultWrap+"><br></"+w.taDefaultWrap+">":a.ie<=8?"<"+w.taDefaultWrap.toUpperCase()+"></"+w.taDefaultWrap.toUpperCase()+">":"<"+w.taDefaultWrap+"></"+w.taDefaultWrap+">",C=void 0===a.ie||a.ie>=11?"<"+w.taDefaultWrap+"><br></"+w.taDefaultWrap+">":a.ie<=8?"<"+w.taDefaultWrap.toUpperCase()+">&nbsp;</"+w.taDefaultWrap.toUpperCase()+">":"<"+w.taDefaultWrap+">&nbsp;</"+w.taDefaultWrap+">"),E.$options||(E.$options={});var S=r(C),T=function(a){if(S(a))return a;var b=angular.element("<div>"+a+"</div>");if(0===b.children().length)a="<"+w.taDefaultWrap+">"+a+"</"+w.taDefaultWrap+">";else{var d,e=b[0].childNodes,f=!1;for(d=0;d<e.length&&!(f=e[d].nodeName.toLowerCase().match(c));d++);if(f)for(a="",d=0;d<e.length;d++){var g=e[d],h=g.nodeName.toLowerCase();if("#comment"===h)a+="<!--"+g.nodeValue+"-->";else if("#text"===h){var i=g.textContent;a+=i.trim()?"<"+w.taDefaultWrap+">"+i+"</"+w.taDefaultWrap+">":i}else if(h.match(c))a+=g.outerHTML;else{var j=g.outerHTML||g.nodeValue;a+=""!==j.trim()?"<"+w.taDefaultWrap+">"+j+"</"+w.taDefaultWrap+">":j}}else a="<"+w.taDefaultWrap+">"+a+"</"+w.taDefaultWrap+">"}return a};w.taPaste&&(A=s(w.taPaste)),v.addClass("ta-bind");var U;l["$undoManager"+(w.id||"")]=D.$undoManager={_stack:[],_index:0,_max:1e3,push:function(a){return"undefined"==typeof a||null===a||"undefined"!=typeof this.current()&&null!==this.current()&&a===this.current()?a:(this._index<this._stack.length-1&&(this._stack=this._stack.slice(0,this._index+1)),this._stack.push(a),U&&f.cancel(U),this._stack.length>this._max&&this._stack.shift(),this._index=this._stack.length-1,a)},undo:function(){return this.setToIndex(this._index-1)},redo:function(){return this.setToIndex(this._index+1)},setToIndex:function(a){return 0>a||a>this._stack.length-1?void 0:(this._index=a,this.current())},current:function(){return this._stack[this._index]}};var V,W=l["$undoTaBind"+(w.id||"")]=function(){if(!H&&F){var a=D.$undoManager.undo();"undefined"!=typeof a&&null!==a&&(ka(a),Z(a,!1),V&&f.cancel(V),V=f(function(){v[0].focus(),m.setSelectionToElementEnd(v[0])},1))}},X=l["$redoTaBind"+(w.id||"")]=function(){if(!H&&F){var a=D.$undoManager.redo();"undefined"!=typeof a&&null!==a&&(ka(a),Z(a,!1),V&&f.cancel(V),V=f(function(){v[0].focus(),m.setSelectionToElementEnd(v[0])},1))}},Y=function(){if(F)return v[0].innerHTML;if(G)return v.val();throw"textAngular Error: attempting to update non-editable taBind"},Z=function(a,b,c){J=c||!1,("undefined"==typeof b||null===b)&&(b=F),("undefined"==typeof a||null===a)&&(a=Y()),S(a)?(""!==D.$viewValue&&D.$setViewValue(""),b&&""!==D.$undoManager.current()&&D.$undoManager.push("")):(ja(),D.$viewValue!==a&&(D.$setViewValue(a),b&&D.$undoManager.push(a))),D.$render()};l["updateTaBind"+(w.id||"")]=function(){H||Z(void 0,void 0,!0)};var $=function(a){return D.$oldViewValue=d(k(a),D.$oldViewValue,K)};if(v.attr("required")&&(D.$validators.required=function(a,b){return!S(a||b)}),D.$parsers.push($),D.$parsers.unshift(T),D.$formatters.push($),D.$formatters.unshift(T),D.$formatters.unshift(function(a){return D.$undoManager.push(a||"")}),G)if(l.events={},F){var _=!1,aa=function(a){if(a&&a.trim().length){if(a.match(/class=["']*Mso(Normal|List)/i)){var b=a.match(/<!--StartFragment-->([\s\S]*?)<!--EndFragment-->/i);b=b?b[1]:a,b=b.replace(/<o:p>[\s\S]*?<\/o:p>/gi,"").replace(/class=(["']|)MsoNormal(["']|)/gi,"");var c=angular.element("<div>"+b+"</div>"),e=angular.element("<div></div>"),g={element:null,lastIndent:[],lastLi:null,isUl:!1};g.lastIndent.peek=function(){var a=this.length;return a>0?this[a-1]:void 0};for(var h=function(a){g.isUl=a,g.element=angular.element(a?"<ul>":"<ol>"),g.lastIndent=[],g.lastIndent.peek=function(){var a=this.length;return a>0?this[a-1]:void 0},g.lastLevelMatch=null},i=0;i<=c[0].childNodes.length;i++)if(c[0].childNodes[i]&&"#text"!==c[0].childNodes[i].nodeName&&"p"===c[0].childNodes[i].tagName.toLowerCase()){var j=angular.element(c[0].childNodes[i]),k=(j.attr("class")||"").match(/MsoList(Bullet|Number|Paragraph)(CxSp(First|Middle|Last)|)/i);if(k){if(j[0].childNodes.length<2||j[0].childNodes[1].childNodes.length<1)continue;var n="bullet"===k[1].toLowerCase()||"number"!==k[1].toLowerCase()&&!(/^[^0-9a-z<]*[0-9a-z]+[^0-9a-z<>]</i.test(j[0].childNodes[1].innerHTML)||/^[^0-9a-z<]*[0-9a-z]+[^0-9a-z<>]</i.test(j[0].childNodes[1].childNodes[0].innerHTML)),o=(j.attr("style")||"").match(/margin-left:([\-\.0-9]*)/i),p=parseFloat(o?o[1]:0),q=(j.attr("style")||"").match(/mso-list:l([0-9]+) level([0-9]+) lfo[0-9+]($|;)/i);if(q&&q[2]&&(p=parseInt(q[2])),q&&(!g.lastLevelMatch||q[1]!==g.lastLevelMatch[1])||!k[3]||"first"===k[3].toLowerCase()||null===g.lastIndent.peek()||g.isUl!==n&&g.lastIndent.peek()===p)h(n),e.append(g.element);else if(null!=g.lastIndent.peek()&&g.lastIndent.peek()<p)g.element=angular.element(n?"<ul>":"<ol>"),g.lastLi.append(g.element);else if(null!=g.lastIndent.peek()&&g.lastIndent.peek()>p){for(;null!=g.lastIndent.peek()&&g.lastIndent.peek()>p;)if("li"!==g.element.parent()[0].tagName.toLowerCase()){if(!/[uo]l/i.test(g.element.parent()[0].tagName.toLowerCase()))break;g.element=g.element.parent(),g.lastIndent.pop()}else g.element=g.element.parent();g.isUl="ul"===g.element[0].tagName.toLowerCase(),n!==g.isUl&&(h(n),e.append(g.element))}g.lastLevelMatch=q,p!==g.lastIndent.peek()&&g.lastIndent.push(p),g.lastLi=angular.element("<li>"),g.element.append(g.lastLi),g.lastLi.html(j.html().replace(/<!(--|)\[if !supportLists\](--|)>[\s\S]*?<!(--|)\[endif\](--|)>/gi,"")),j.remove()}else h(!1),e.append(j)}var r=function(a){a=angular.element(a);for(var b=a[0].childNodes.length-1;b>=0;b--)a.after(a[0].childNodes[b]);a.remove()};angular.forEach(e.find("span"),function(a){a.removeAttribute("lang"),a.attributes.length<=0&&r(a)}),angular.forEach(e.find("font"),r),a=e.html()}else{if(a=a.replace(/<(|\/)meta[^>]*?>/gi,""),a.match(/<[^>]*?(ta-bind)[^>]*?>/)){if(a.match(/<[^>]*?(text-angular)[^>]*?>/)){var s=angular.element("<div>"+a+"</div>");s.find("textarea").remove();for(var u=t.getByAttribute(s,"ta-bind"),w=0;w<u.length;w++){for(var x=u[w][0].parentNode.parentNode,y=0;y<u[w][0].childNodes.length;y++)x.parentNode.insertBefore(u[w][0].childNodes[y],x);x.parentNode.removeChild(x)}a=s.html().replace('<br class="Apple-interchange-newline">',"")}}else a.match(/^<span/)&&(a.match(/<span class=(\"Apple-converted-space\"|\'Apple-converted-space\')>.<\/span>/gi)||(a=a.replace(/<(|\/)span[^>]*?>/gi,"")));a=a.replace(/<br class="Apple-interchange-newline"[^>]*?>/gi,"").replace(/<span class="Apple-converted-space">( |&nbsp;)<\/span>/gi,"&nbsp;")}/<li(\s.*)?>/i.test(a)&&/(<ul(\s.*)?>|<ol(\s.*)?>).*<li(\s.*)?>/i.test(a)===!1&&(a=a.replace(/<li(\s.*)?>.*<\/li(\s.*)?>/i,"<ul>$&</ul>")),a=a.replace(/^[ |\u00A0]+/gm,function(a){for(var b="",c=0;c<a.length;c++)b+="&nbsp;";return b}).replace(/\n|\r\n|\r/g,"<br />").replace(/\t/g,"&nbsp;&nbsp;&nbsp;&nbsp;"),A&&(a=A(l,{$html:a})||a),a=d(a,"",K),m.insertHtml(a,v[0]),f(function(){D.$setViewValue(Y()),_=!1,v.removeClass("processing-paste")},0)}else _=!1,v.removeClass("processing-paste")};v.on("paste",l.events.paste=function(a,b){if(b&&angular.extend(a,b),H||_)return a.stopPropagation(),a.preventDefault(),!1;_=!0,v.addClass("processing-paste");var c,d=(a.originalEvent||a).clipboardData;if(d&&d.getData&&d.types.length>0){for(var e="",g=0;g<d.types.length;g++)e+=" "+d.types[g];return/text\/html/i.test(e)?c=d.getData("text/html"):/text\/plain/i.test(e)&&(c=d.getData("text/plain")),aa(c),a.stopPropagation(),a.preventDefault(),!1}var h=i.rangy.saveSelection(),k=angular.element('<div class="ta-hidden-input" contenteditable="true"></div>');j.find("body").append(k),k[0].focus(),f(function(){i.rangy.restoreSelection(h),aa(k[0].innerHTML),v[0].focus(),k.remove()},0)}),v.on("cut",l.events.cut=function(a){H?a.preventDefault():f(function(){D.$setViewValue(Y())},0)}),v.on("keydown",l.events.keydown=function(a,b){b&&angular.extend(a,b),a.specialKey=y(a);var c;if(q.keyMappings.forEach(function(b){a.specialKey===b.commandKeyCode&&(a.specialKey=void 0),b.testForKey(a)&&(c=b.commandKeyCode),("UndoKey"===b.commandKeyCode||"RedoKey"===b.commandKeyCode)&&(b.enablePropagation||a.preventDefault())}),"undefined"!=typeof c&&(a.specialKey=c),"undefined"==typeof a.specialKey||"UndoKey"===a.specialKey&&"RedoKey"===a.specialKey||(a.preventDefault(),u.sendKeyCommand(l,a)),!H&&("UndoKey"===a.specialKey&&(W(),a.preventDefault()),"RedoKey"===a.specialKey&&(X(),a.preventDefault()),13===a.keyCode&&!a.shiftKey)){var d,f=m.getSelectionElement();if(!f.tagName.match(e))return;var g=angular.element(B);if(/^<br(|\/)>$/i.test(f.innerHTML.trim())&&"blockquote"===f.parentNode.tagName.toLowerCase()&&!f.nextSibling){d=angular.element(f);var h=d.parent();h.after(g),d.remove(),0===h.children().length&&h.remove(),m.setSelectionToElementStart(g[0]),a.preventDefault()}else/^<[^>]+><br(|\/)><\/[^>]+>$/i.test(f.innerHTML.trim())&&"blockquote"===f.tagName.toLowerCase()&&(d=angular.element(f),d.after(g),d.remove(),m.setSelectionToElementStart(g[0]),a.preventDefault())}});var ba;if(v.on("keyup",l.events.keyup=function(a,b){if(b&&angular.extend(a,b),9===a.keyCode){var c=m.getSelection();return void(c.start.element===v[0]&&v.children().length&&m.setSelectionToElementStart(v.children()[0]))}if(U&&f.cancel(U),!H&&!L.test(a.keyCode)){if(""!==B&&13===a.keyCode&&!a.shiftKey){for(var d=m.getSelectionElement();!d.tagName.match(e)&&d!==v[0];)d=d.parentNode;if(d.tagName.toLowerCase()!==w.taDefaultWrap&&"li"!==d.tagName.toLowerCase()&&(""===d.innerHTML.trim()||"<br>"===d.innerHTML.trim())){var g=angular.element(B);angular.element(d).replaceWith(g),m.setSelectionToElementStart(g[0])}}var h=Y();""!==B&&""===h.trim()?(ka(B),m.setSelectionToElementStart(v.children()[0])):"<"!==h.substring(0,1)&&""!==w.taDefaultWrap;var i=z!==a.keyCode&&M.test(a.keyCode);ba&&f.cancel(ba),ba=f(function(){Z(h,i,!0)},E.$options.debounce||400),i||(U=f(function(){D.$undoManager.push(h)},250)),z=a.keyCode}}),v.on("blur",l.events.blur=function(){I=!1,H?(J=!0,D.$render()):Z(void 0,void 0,!0)}),w.placeholder&&(a.ie>8||void 0===a.ie)){var ca;if(!w.id)throw"textAngular Error: An unique ID is required for placeholders to work";ca=g("#"+w.id+".placeholder-text:before",'content: "'+w.placeholder+'"'),l.$on("$destroy",function(){h(ca)})}v.on("focus",l.events.focus=function(){I=!0,v.removeClass("placeholder-text"),ja()}),v.on("mouseup",l.events.mouseup=function(){var a=m.getSelection();a.start.element===v[0]&&v.children().length&&m.setSelectionToElementStart(v.children()[0])}),v.on("mousedown",l.events.mousedown=function(a,b){b&&angular.extend(a,b),a.stopPropagation()})}else{v.on("change blur",l.events.change=l.events.blur=function(){H||D.$setViewValue(Y())}),v.on("keydown",l.events.keydown=function(a,b){if(b&&angular.extend(a,b),9===a.keyCode){var c=this.selectionStart,d=this.selectionEnd,e=v.val();if(a.shiftKey){var f=e.lastIndexOf("\n",c),g=e.lastIndexOf("	",c);-1!==g&&g>=f&&(v.val(e.substring(0,g)+e.substring(g+1)),this.selectionStart=this.selectionEnd=c-1)}else v.val(e.substring(0,c)+"	"+e.substring(d)),this.selectionStart=this.selectionEnd=c+1;a.preventDefault()}});var da=function(a,b){for(var c="",d=0;b>d;d++)c+=a;return c},ea=function(a,b,c){for(var d=0;d<a.length;d++)b.call(c,d,a[d])},fa=function(a,b){var c="",d=a.childNodes;return b++,c+=da("	",b-1)+a.outerHTML.substring(0,4),ea(d,function(a,d){var e=d.nodeName.toLowerCase();return"#comment"===e?void(c+="<!--"+d.nodeValue+"-->"):"#text"===e?void(c+=d.textContent):void(d.outerHTML&&(c+="ul"===e||"ol"===e?"\n"+fa(d,b):"\n"+da("	",b)+d.outerHTML))}),c+="\n"+da("	",b-1)+a.outerHTML.substring(a.outerHTML.lastIndexOf("<"))};D.$formatters.unshift(function(a){var b=angular.element("<div>"+a+"</div>")[0].childNodes;return b.length>0&&(a="",ea(b,function(b,c){var d=c.nodeName.toLowerCase();return"#comment"===d?void(a+="<!--"+c.nodeValue+"-->"):"#text"===d?void(a+=c.textContent):void(c.outerHTML&&(a.length>0&&(a+="\n"),a+="ul"===d||"ol"===d?""+fa(c,0):""+c.outerHTML))})),a})}var ga,ha=function(a){return l.$emit("ta-element-select",this),a.preventDefault(),!1},ia=function(a,b){if(b&&angular.extend(a,b),!n&&!H){n=!0;var c;c=a.originalEvent?a.originalEvent.dataTransfer:a.dataTransfer,l.$emit("ta-drop-event",this,a,c),f(function(){n=!1,Z(void 0,void 0,!0)},100)}},ja=l["reApplyOnSelectorHandlers"+(w.id||"")]=function(){H||angular.forEach(o,function(a){v.find(a).off("click",ha).on("click",ha)})},ka=function(a){v[0].innerHTML=a},la=!1;D.$render=function(){if(!la){la=!0;var a=D.$viewValue||"";J||(F&&I&&(v.removeClass("placeholder-text"),ga&&f.cancel(ga),ga=f(function(){I||(v[0].focus(),m.setSelectionToElementEnd(v.children()[v.children().length-1])),ga=void 0},1)),F?(ka(w.placeholder?""===a?B:a:""===a?B:a),H?v.off("drop",ia):(ja(),v.on("drop",ia))):"textarea"!==v[0].tagName.toLowerCase()&&"input"!==v[0].tagName.toLowerCase()?ka(p(a)):v.val(a)),F&&w.placeholder&&(""===a?I?v.removeClass("placeholder-text"):v.addClass("placeholder-text"):v.removeClass("placeholder-text")),la=J=!1}},w.taReadonly&&(H=l.$eval(w.taReadonly),H?(v.addClass("ta-readonly"),("textarea"===v[0].tagName.toLowerCase()||"input"===v[0].tagName.toLowerCase())&&v.attr("disabled","disabled"),void 0!==v.attr("contenteditable")&&v.attr("contenteditable")&&v.removeAttr("contenteditable")):(v.removeClass("ta-readonly"),"textarea"===v[0].tagName.toLowerCase()||"input"===v[0].tagName.toLowerCase()?v.removeAttr("disabled"):F&&v.attr("contenteditable","true")),l.$watch(w.taReadonly,function(a,b){b!==a&&(a?(v.addClass("ta-readonly"),("textarea"===v[0].tagName.toLowerCase()||"input"===v[0].tagName.toLowerCase())&&v.attr("disabled","disabled"),void 0!==v.attr("contenteditable")&&v.attr("contenteditable")&&v.removeAttr("contenteditable"),angular.forEach(o,function(a){v.find(a).on("click",ha)}),v.off("drop",ia)):(v.removeClass("ta-readonly"),"textarea"===v[0].tagName.toLowerCase()||"input"===v[0].tagName.toLowerCase()?v.removeAttr("disabled"):F&&v.attr("contenteditable","true"),angular.forEach(o,function(a){v.find(a).off("click",ha)}),v.on("drop",ia)),H=a)})),F&&!H&&(angular.forEach(o,function(a){v.find(a).on("click",ha)}),v.on("drop",ia),v.on("blur",function(){a.webkit&&(b=!0)}))}}}]);var n=!1,o=angular.module("textAngular",["ngSanitize","textAngularSetup","textAngular.factories","textAngular.DOM","textAngular.validators","textAngular.taBind"]);o.config([function(){angular.forEach(taTools,function(a,b){delete taTools[b]})}]),o.run([function(){if("function"==typeof define&&define.amd)define(function(a){window.rangy=a("rangy"),window.rangy.saveSelection=a("rangy/lib/rangy-selectionsaverestore")});else if("function"==typeof require&&"undefined"!=typeof module&&"object"==typeof exports)window.rangy=require("rangy"),window.rangy.saveSelection=require("rangy/lib/rangy-selectionsaverestore");else{if(!window.rangy)throw"rangy-core.js and rangy-selectionsaverestore.js are required for textAngular to work correctly, rangy-core is not yet loaded.";if(window.rangy.init(),!window.rangy.saveSelection)throw"rangy-selectionsaverestore.js is required for textAngular to work correctly."}}]),o.directive("textAngular",["$compile","$timeout","taOptions","taSelection","taExecCommand","textAngularManager","$window","$document","$animate","$log","$q","$parse",function(a,b,c,d,e,f,g,h,i,j,k,l){return{require:"?ngModel",scope:{},restrict:"EA",priority:2,link:function(m,n,o,p){var q,r,s,t,u,v,w,x,y,z,A,B=o.serial?o.serial:Math.floor(1e16*Math.random());m._name=o.name?o.name:"textAngularEditor"+B;var C=function(a,c,d){b(function(){var b=function(){a.off(c,b),d.apply(this,arguments)};a.on(c,b)},100)};if(y=e(o.taDefaultWrap),angular.extend(m,angular.copy(c),{wrapSelection:function(a,b,c){"undo"===a.toLowerCase()?m["$undoTaBindtaTextElement"+B]():"redo"===a.toLowerCase()?m["$redoTaBindtaTextElement"+B]():(y(a,!1,b,m.defaultTagAttributes),c&&m["reApplyOnSelectorHandlerstaTextElement"+B](),m.displayElements.text[0].focus())},showHtml:m.$eval(o.taShowHtml)||!1}),o.taFocussedClass&&(m.classes.focussed=o.taFocussedClass),o.taTextEditorClass&&(m.classes.textEditor=o.taTextEditorClass),o.taHtmlEditorClass&&(m.classes.htmlEditor=o.taHtmlEditorClass),o.taDefaultTagAttributes)try{angular.extend(m.defaultTagAttributes,angular.fromJson(o.taDefaultTagAttributes))}catch(D){j.error(D)}o.taTextEditorSetup&&(m.setup.textEditorSetup=m.$parent.$eval(o.taTextEditorSetup)),o.taHtmlEditorSetup&&(m.setup.htmlEditorSetup=m.$parent.$eval(o.taHtmlEditorSetup)),o.taFileDrop?m.fileDropHandler=m.$parent.$eval(o.taFileDrop):m.fileDropHandler=m.defaultFileDropHandler,w=n[0].innerHTML,n[0].innerHTML="",m.displayElements={forminput:angular.element("<input type='hidden' tabindex='-1' style='display: none;'>"),html:angular.element("<textarea></textarea>"),text:angular.element("<div></div>"),scrollWindow:angular.element("<div class='ta-scroll-window'></div>"),popover:angular.element('<div class="popover fade bottom" style="max-width: none; width: 305px;"></div>'),popoverArrow:angular.element('<div class="arrow"></div>'),popoverContainer:angular.element('<div class="popover-content"></div>'),resize:{overlay:angular.element('<div class="ta-resizer-handle-overlay"></div>'),background:angular.element('<div class="ta-resizer-handle-background"></div>'),anchors:[angular.element('<div class="ta-resizer-handle-corner ta-resizer-handle-corner-tl"></div>'),angular.element('<div class="ta-resizer-handle-corner ta-resizer-handle-corner-tr"></div>'),angular.element('<div class="ta-resizer-handle-corner ta-resizer-handle-corner-bl"></div>'),angular.element('<div class="ta-resizer-handle-corner ta-resizer-handle-corner-br"></div>')],info:angular.element('<div class="ta-resizer-handle-info"></div>')}},m.displayElements.popover.append(m.displayElements.popoverArrow),m.displayElements.popover.append(m.displayElements.popoverContainer),m.displayElements.scrollWindow.append(m.displayElements.popover),m.displayElements.popover.on("mousedown",function(a,b){return b&&angular.extend(a,b),a.preventDefault(),!1}),m.showPopover=function(a){m.displayElements.popover.css("display","block"),m.reflowPopover(a),i.addClass(m.displayElements.popover,"in"),C(h.find("body"),"click keyup",function(){m.hidePopover()})},m.reflowPopover=function(a){m.displayElements.text[0].offsetHeight-51>a[0].offsetTop?(m.displayElements.popover.css("top",a[0].offsetTop+a[0].offsetHeight+m.displayElements.scrollWindow[0].scrollTop+"px"),m.displayElements.popover.removeClass("top").addClass("bottom")):(m.displayElements.popover.css("top",a[0].offsetTop-54+m.displayElements.scrollWindow[0].scrollTop+"px"),m.displayElements.popover.removeClass("bottom").addClass("top"));var b=m.displayElements.text[0].offsetWidth-m.displayElements.popover[0].offsetWidth,c=a[0].offsetLeft+a[0].offsetWidth/2-m.displayElements.popover[0].offsetWidth/2;m.displayElements.popover.css("left",Math.max(0,Math.min(b,c))+"px"),m.displayElements.popoverArrow.css("margin-left",Math.min(c,Math.max(0,c-b))-11+"px")},m.hidePopover=function(){m.displayElements.popover.css("display",""),m.displayElements.popoverContainer.attr("style",""),m.displayElements.popoverContainer.attr("class","popover-content"),m.displayElements.popover.removeClass("in")},m.displayElements.resize.overlay.append(m.displayElements.resize.background),angular.forEach(m.displayElements.resize.anchors,function(a){m.displayElements.resize.overlay.append(a)}),m.displayElements.resize.overlay.append(m.displayElements.resize.info),m.displayElements.scrollWindow.append(m.displayElements.resize.overlay),m.reflowResizeOverlay=function(a){a=angular.element(a)[0],m.displayElements.resize.overlay.css({display:"block",left:a.offsetLeft-5+"px",top:a.offsetTop-5+"px",width:a.offsetWidth+10+"px",height:a.offsetHeight+10+"px"}),m.displayElements.resize.info.text(a.offsetWidth+" x "+a.offsetHeight)},m.showResizeOverlay=function(a){var b=h.find("body");z=function(c){var d={width:parseInt(a.attr("width")),height:parseInt(a.attr("height")),x:c.clientX,y:c.clientY};(void 0===d.width||isNaN(d.width))&&(d.width=a[0].offsetWidth),
+(void 0===d.height||isNaN(d.height))&&(d.height=a[0].offsetHeight),m.hidePopover();var e=d.height/d.width,f=function(b){function c(a){return Math.round(Math.max(0,a))}var f={x:Math.max(0,d.width+(b.clientX-d.x)),y:Math.max(0,d.height+(b.clientY-d.y))},g=void 0!==o.taResizeForceAspectRatio,h=o.taResizeMaintainAspectRatio,i=g||h&&!b.shiftKey;if(i){var j=f.y/f.x;f.x=e>j?f.x:f.y/e,f.y=e>j?f.x*e:f.y}var k=angular.element(a);k.css("height",c(f.y)+"px"),k.css("width",c(f.x)+"px"),m.reflowResizeOverlay(a)};b.on("mousemove",f),C(b,"mouseup",function(c){c.preventDefault(),c.stopPropagation(),b.off("mousemove",f),m.showPopover(a)}),c.stopPropagation(),c.preventDefault()},m.displayElements.resize.anchors[3].off("mousedown"),m.displayElements.resize.anchors[3].on("mousedown",z),m.reflowResizeOverlay(a),C(b,"click",function(){m.hideResizeOverlay()})},m.hideResizeOverlay=function(){m.displayElements.resize.anchors[3].off("mousedown",z),m.displayElements.resize.overlay.css("display","")},m.setup.htmlEditorSetup(m.displayElements.html),m.setup.textEditorSetup(m.displayElements.text),m.displayElements.html.attr({id:"taHtmlElement"+B,"ng-show":"showHtml","ta-bind":"ta-bind","ng-model":"html","ng-model-options":n.attr("ng-model-options")}),m.displayElements.text.attr({id:"taTextElement"+B,contentEditable:"true","ta-bind":"ta-bind","ng-model":"html","ng-model-options":n.attr("ng-model-options")}),m.displayElements.scrollWindow.attr({"ng-hide":"showHtml"}),o.taDefaultWrap&&m.displayElements.text.attr("ta-default-wrap",o.taDefaultWrap),o.taUnsafeSanitizer&&(m.displayElements.text.attr("ta-unsafe-sanitizer",o.taUnsafeSanitizer),m.displayElements.html.attr("ta-unsafe-sanitizer",o.taUnsafeSanitizer)),m.displayElements.scrollWindow.append(m.displayElements.text),n.append(m.displayElements.scrollWindow),n.append(m.displayElements.html),m.displayElements.forminput.attr("name",m._name),n.append(m.displayElements.forminput),o.tabindex&&(n.removeAttr("tabindex"),m.displayElements.text.attr("tabindex",o.tabindex),m.displayElements.html.attr("tabindex",o.tabindex)),o.placeholder&&(m.displayElements.text.attr("placeholder",o.placeholder),m.displayElements.html.attr("placeholder",o.placeholder)),o.taDisabled&&(m.displayElements.text.attr("ta-readonly","disabled"),m.displayElements.html.attr("ta-readonly","disabled"),m.disabled=m.$parent.$eval(o.taDisabled),m.$parent.$watch(o.taDisabled,function(a){m.disabled=a,m.disabled?n.addClass(m.classes.disabled):n.removeClass(m.classes.disabled)})),o.taPaste&&(m._pasteHandler=function(a){return l(o.taPaste)(m.$parent,{$html:a})},m.displayElements.text.attr("ta-paste","_pasteHandler($html)")),a(m.displayElements.scrollWindow)(m),a(m.displayElements.html)(m),m.updateTaBindtaTextElement=m["updateTaBindtaTextElement"+B],m.updateTaBindtaHtmlElement=m["updateTaBindtaHtmlElement"+B],n.addClass("ta-root"),m.displayElements.scrollWindow.addClass("ta-text ta-editor "+m.classes.textEditor),m.displayElements.html.addClass("ta-html ta-editor "+m.classes.htmlEditor),m._actionRunning=!1;var E=!1;if(m.startAction=function(){return m._actionRunning=!0,E=g.rangy.saveSelection(),function(){E&&g.rangy.restoreSelection(E)}},m.endAction=function(){m._actionRunning=!1,E&&(m.showHtml?m.displayElements.html[0].focus():m.displayElements.text[0].focus(),g.rangy.removeMarkers(E)),E=!1,m.updateSelectedStyles(),m.showHtml||m["updateTaBindtaTextElement"+B]()},u=function(){m.focussed=!0,n.addClass(m.classes.focussed),x.focus(),n.triggerHandler("focus")},m.displayElements.html.on("focus",u),m.displayElements.text.on("focus",u),v=function(a){return m._actionRunning||h[0].activeElement===m.displayElements.html[0]||h[0].activeElement===m.displayElements.text[0]||(n.removeClass(m.classes.focussed),x.unfocus(),b(function(){m._bUpdateSelectedStyles=!1,n.triggerHandler("blur"),m.focussed=!1},0)),a.preventDefault(),!1},m.displayElements.html.on("blur",v),m.displayElements.text.on("blur",v),m.displayElements.text.on("paste",function(a){n.triggerHandler("paste",a)}),m.queryFormatBlockState=function(a){return!m.showHtml&&a.toLowerCase()===h[0].queryCommandValue("formatBlock").toLowerCase()},m.queryCommandState=function(a){return m.showHtml?"":h[0].queryCommandState(a)},m.switchView=function(){m.showHtml=!m.showHtml,i.enabled(!1,m.displayElements.html),i.enabled(!1,m.displayElements.text),m.showHtml?b(function(){return i.enabled(!0,m.displayElements.html),i.enabled(!0,m.displayElements.text),m.displayElements.html[0].focus()},100):b(function(){return i.enabled(!0,m.displayElements.html),i.enabled(!0,m.displayElements.text),m.displayElements.text[0].focus()},100)},o.ngModel){var F=!0;p.$render=function(){if(F){F=!1;var a=m.$parent.$eval(o.ngModel);void 0!==a&&null!==a||!w||""===w||p.$setViewValue(w)}m.displayElements.forminput.val(p.$viewValue),m.html=p.$viewValue||""},n.attr("required")&&(p.$validators.required=function(a,b){var c=a||b;return!(!c||""===c.trim())})}else m.displayElements.forminput.val(w),m.html=w;if(m.$watch("html",function(a,b){a!==b&&(o.ngModel&&p.$viewValue!==a&&p.$setViewValue(a),m.displayElements.forminput.val(a))}),o.taTargetToolbars)x=f.registerEditor(m._name,m,o.taTargetToolbars.split(","));else{var G=angular.element('<div text-angular-toolbar name="textAngularToolbar'+B+'">');o.taToolbar&&G.attr("ta-toolbar",o.taToolbar),o.taToolbarClass&&G.attr("ta-toolbar-class",o.taToolbarClass),o.taToolbarGroupClass&&G.attr("ta-toolbar-group-class",o.taToolbarGroupClass),o.taToolbarButtonClass&&G.attr("ta-toolbar-button-class",o.taToolbarButtonClass),o.taToolbarActiveButtonClass&&G.attr("ta-toolbar-active-button-class",o.taToolbarActiveButtonClass),o.taFocussedClass&&G.attr("ta-focussed-class",o.taFocussedClass),n.prepend(G),a(G)(m.$parent),x=f.registerEditor(m._name,m,["textAngularToolbar"+B])}m.$on("$destroy",function(){f.unregisterEditor(m._name),angular.element(window).off("blur")}),m.$on("ta-element-select",function(a,b){x.triggerElementSelect(a,b)&&m["reApplyOnSelectorHandlerstaTextElement"+B]()}),m.$on("ta-drop-event",function(a,c,d,e){m.displayElements.text[0].focus(),e&&e.files&&e.files.length>0?(angular.forEach(e.files,function(a){try{k.when(m.fileDropHandler(a,m.wrapSelection)||m.fileDropHandler!==m.defaultFileDropHandler&&k.when(m.defaultFileDropHandler(a,m.wrapSelection))).then(function(){m["updateTaBindtaTextElement"+B]()})}catch(b){j.error(b)}}),d.preventDefault(),d.stopPropagation()):b(function(){m["updateTaBindtaTextElement"+B]()},0)}),m._bUpdateSelectedStyles=!1,angular.element(window).on("blur",function(){m._bUpdateSelectedStyles=!1,m.focussed=!1}),m.updateSelectedStyles=function(){var a;A&&b.cancel(A),void 0!==(a=d.getSelectionElement())&&a.parentNode!==m.displayElements.text[0]?x.updateSelectedStyles(angular.element(a)):x.updateSelectedStyles(),m._bUpdateSelectedStyles&&(A=b(m.updateSelectedStyles,200))},q=function(){return m.focussed?void(m._bUpdateSelectedStyles||(m._bUpdateSelectedStyles=!0,m.$apply(function(){m.updateSelectedStyles()}))):void(m._bUpdateSelectedStyles=!1)},m.displayElements.html.on("keydown",q),m.displayElements.text.on("keydown",q),r=function(){m._bUpdateSelectedStyles=!1},m.displayElements.html.on("keyup",r),m.displayElements.text.on("keyup",r),s=function(a,b){b&&angular.extend(a,b),m.$apply(function(){return x.sendKeyCommand(a)?(m._bUpdateSelectedStyles||m.updateSelectedStyles(),a.preventDefault(),!1):void 0})},m.displayElements.html.on("keypress",s),m.displayElements.text.on("keypress",s),t=function(){m._bUpdateSelectedStyles=!1,m.$apply(function(){m.updateSelectedStyles()})},m.displayElements.html.on("mouseup",t),m.displayElements.text.on("mouseup",t)}}}]),o.service("textAngularManager",["taToolExecuteAction","taTools","taRegisterTool",function(a,b,c){var d={},e={};return{registerEditor:function(c,f,g){if(!c||""===c)throw"textAngular Error: An editor requires a name";if(!f)throw"textAngular Error: An editor requires a scope";if(e[c])throw'textAngular Error: An Editor with name "'+c+'" already exists';var h=[];return angular.forEach(g,function(a){d[a]&&h.push(d[a])}),e[c]={scope:f,toolbars:g,_registerToolbar:function(a){this.toolbars.indexOf(a.name)>=0&&h.push(a)},editorFunctions:{disable:function(){angular.forEach(h,function(a){a.disabled=!0})},enable:function(){angular.forEach(h,function(a){a.disabled=!1})},focus:function(){angular.forEach(h,function(a){a._parent=f,a.disabled=!1,a.focussed=!0,f.focussed=!0})},unfocus:function(){angular.forEach(h,function(a){a.disabled=!0,a.focussed=!1}),f.focussed=!1},updateSelectedStyles:function(a){angular.forEach(h,function(b){angular.forEach(b.tools,function(c){c.activeState&&(b._parent=f,c.active=c.activeState(a))})})},sendKeyCommand:function(c){var d=!1;return(c.ctrlKey||c.metaKey||c.specialKey)&&angular.forEach(b,function(b,e){if(b.commandKeyCode&&(b.commandKeyCode===c.which||b.commandKeyCode===c.specialKey))for(var g=0;g<h.length;g++)if(void 0!==h[g].tools[e]){a.call(h[g].tools[e],f),d=!0;break}}),d},triggerElementSelect:function(a,c){var d=function(a,b){for(var c=!0,d=0;d<b.length;d++)c=c&&a.attr(b[d]);return c},e=[],g={},i=!1;c=angular.element(c);var j=!1;if(angular.forEach(b,function(a,b){a.onElementSelect&&a.onElementSelect.element&&a.onElementSelect.element.toLowerCase()===c[0].tagName.toLowerCase()&&(!a.onElementSelect.filter||a.onElementSelect.filter(c))&&(j=j||angular.isArray(a.onElementSelect.onlyWithAttrs)&&d(c,a.onElementSelect.onlyWithAttrs),(!a.onElementSelect.onlyWithAttrs||d(c,a.onElementSelect.onlyWithAttrs))&&(g[b]=a))}),j?(angular.forEach(g,function(a,b){a.onElementSelect.onlyWithAttrs&&d(c,a.onElementSelect.onlyWithAttrs)&&e.push({name:b,tool:a})}),e.sort(function(a,b){return b.tool.onElementSelect.onlyWithAttrs.length-a.tool.onElementSelect.onlyWithAttrs.length})):angular.forEach(g,function(a,b){e.push({name:b,tool:a})}),e.length>0)for(var k=0;k<e.length;k++){for(var l=e[k].tool,m=e[k].name,n=0;n<h.length;n++)if(void 0!==h[n].tools[m]){l.onElementSelect.action.call(h[n].tools[m],a,c,f),i=!0;break}if(i)break}return i}}},e[c].editorFunctions},retrieveEditor:function(a){return e[a]},unregisterEditor:function(a){delete e[a]},registerToolbar:function(a){if(!a)throw"textAngular Error: A toolbar requires a scope";if(!a.name||""===a.name)throw"textAngular Error: A toolbar requires a name";if(d[a.name])throw'textAngular Error: A toolbar with name "'+a.name+'" already exists';d[a.name]=a,angular.forEach(e,function(b){b._registerToolbar(a)})},retrieveToolbar:function(a){return d[a]},retrieveToolbarsViaEditor:function(a){var b=[],c=this;return angular.forEach(this.retrieveEditor(a).toolbars,function(a){b.push(c.retrieveToolbar(a))}),b},unregisterToolbar:function(a){delete d[a]},updateToolsDisplay:function(a){var b=this;angular.forEach(a,function(a,c){b.updateToolDisplay(c,a)})},resetToolsDisplay:function(){var a=this;angular.forEach(b,function(b,c){a.resetToolDisplay(c)})},updateToolDisplay:function(a,b){var c=this;angular.forEach(d,function(d,e){c.updateToolbarToolDisplay(e,a,b)})},resetToolDisplay:function(a){var b=this;angular.forEach(d,function(c,d){b.resetToolbarToolDisplay(d,a)})},updateToolbarToolDisplay:function(a,b,c){if(!d[a])throw'textAngular Error: No Toolbar with name "'+a+'" exists';d[a].updateToolDisplay(b,c)},resetToolbarToolDisplay:function(a,c){if(!d[a])throw'textAngular Error: No Toolbar with name "'+a+'" exists';d[a].updateToolDisplay(c,b[c],!0)},removeTool:function(a){delete b[a],angular.forEach(d,function(b){delete b.tools[a];for(var c=0;c<b.toolbar.length;c++){for(var d,e=0;e<b.toolbar[c].length;e++){if(b.toolbar[c][e]===a){d={group:c,index:e};break}if(void 0!==d)break}void 0!==d&&(b.toolbar[d.group].slice(d.index,1),b._$element.children().eq(d.group).children().eq(d.index).remove())}})},addTool:function(a,b,e,f){c(a,b),angular.forEach(d,function(c){c.addTool(a,b,e,f)})},addToolToToolbar:function(a,b,e,f,g){c(a,b),d[e].addTool(a,b,f,g)},refreshEditor:function(a){if(!e[a])throw'textAngular Error: No Editor with name "'+a+'" exists';e[a].scope.updateTaBindtaTextElement(),e[a].scope.$$phase||e[a].scope.$digest()},sendKeyCommand:function(a,b){angular.forEach(e,function(c){return c.editorFunctions.sendKeyCommand(b)?(a._bUpdateSelectedStyles||a.updateSelectedStyles(),b.preventDefault(),!1):void 0})}}}]),o.directive("textAngularToolbar",["$compile","textAngularManager","taOptions","taTools","taToolExecuteAction","$window",function(a,b,c,d,e,f){return{scope:{name:"@"},restrict:"EA",link:function(g,h,i){if(!g.name||""===g.name)throw"textAngular Error: A toolbar requires a name";angular.extend(g,angular.copy(c)),i.taToolbar&&(g.toolbar=g.$parent.$eval(i.taToolbar)),i.taToolbarClass&&(g.classes.toolbar=i.taToolbarClass),i.taToolbarGroupClass&&(g.classes.toolbarGroup=i.taToolbarGroupClass),i.taToolbarButtonClass&&(g.classes.toolbarButton=i.taToolbarButtonClass),i.taToolbarActiveButtonClass&&(g.classes.toolbarButtonActive=i.taToolbarActiveButtonClass),i.taFocussedClass&&(g.classes.focussed=i.taFocussedClass),g.disabled=!0,g.focussed=!1,g._$element=h,h[0].innerHTML="",h.addClass("ta-toolbar "+g.classes.toolbar),g.$watch("focussed",function(){g.focussed?h.addClass(g.classes.focussed):h.removeClass(g.classes.focussed)});var j=function(b,c){var d;if(d=b&&b.display?angular.element(b.display):angular.element("<button type='button'>"),b&&b["class"]?d.addClass(b["class"]):d.addClass(g.classes.toolbarButton),d.attr("name",c.name),d.attr("ta-button","ta-button"),d.attr("ng-disabled","isDisabled()"),d.attr("tabindex","-1"),d.attr("ng-click","executeAction()"),d.attr("ng-class","displayActiveToolClass(active)"),b&&b.tooltiptext&&d.attr("title",b.tooltiptext),b&&!b.display&&!c._display&&(d[0].innerHTML="",b.buttontext&&(d[0].innerHTML=b.buttontext),b.iconclass)){var e=angular.element("<i>"),f=d[0].innerHTML;e.addClass(b.iconclass),d[0].innerHTML="",d.append(e),f&&""!==f&&d.append("&nbsp;"+f)}return c._lastToolDefinition=angular.copy(b),a(d)(c)};g.tools={},g._parent={disabled:!0,showHtml:!1,queryFormatBlockState:function(){return!1},queryCommandState:function(){return!1}};var k={$window:f,$editor:function(){return g._parent},isDisabled:function(){return"function"!=typeof this.$eval("disabled")&&this.$eval("disabled")||this.$eval("disabled()")||"html"!==this.name&&this.$editor().showHtml||this.$parent.disabled||this.$editor().disabled},displayActiveToolClass:function(a){return a?g.classes.toolbarButtonActive:""},executeAction:e};angular.forEach(g.toolbar,function(a){var b=angular.element("<div>");b.addClass(g.classes.toolbarGroup),angular.forEach(a,function(a){g.tools[a]=angular.extend(g.$new(!0),d[a],k,{name:a}),g.tools[a].$element=j(d[a],g.tools[a]),b.append(g.tools[a].$element)}),h.append(b)}),g.updateToolDisplay=function(a,b,c){var d=g.tools[a];if(d){if(d._lastToolDefinition&&!c&&(b=angular.extend({},d._lastToolDefinition,b)),null===b.buttontext&&null===b.iconclass&&null===b.display)throw'textAngular Error: Tool Definition for updating "'+a+'" does not have a valid display/iconclass/buttontext value';null===b.buttontext&&delete b.buttontext,null===b.iconclass&&delete b.iconclass,null===b.display&&delete b.display;var e=j(b,d);d.$element.replaceWith(e),d.$element=e}},g.addTool=function(a,b,c,e){g.tools[a]=angular.extend(g.$new(!0),d[a],k,{name:a}),g.tools[a].$element=j(d[a],g.tools[a]);var f;void 0===c&&(c=g.toolbar.length-1),f=angular.element(h.children()[c]),void 0===e?(f.append(g.tools[a].$element),g.toolbar[c][g.toolbar[c].length-1]=a):(f.children().eq(e).after(g.tools[a].$element),g.toolbar[c][e]=a)},b.registerToolbar(g),g.$on("$destroy",function(){b.unregisterToolbar(g.name)})}}}])}(),function(a,b,c){"use strict";function d(){this.$get=["$$sanitizeUri",function(a){return function(b){"undefined"!=typeof arguments[1]&&(arguments[1].version="taSanitize");var c=[];return g(b,l(c,function(b,c){return!/^unsafe/.test(a(b,c))})),c.join("")}}]}function e(a){var c=[],d=l(c,b.noop);return d.chars(a),c.join("")}function f(a){var b,c={},d=a.split(",");for(b=0;b<d.length;b++)c[d[b]]=!0;return c}function g(a,c){function d(a,d,f,g){if(d=b.lowercase(d),D[d])for(;k.last()&&E[k.last()];)e("",k.last());C[d]&&k.last()==d&&e("",d),g=z[d]||!!g,g||k.push(d);var i={};f.replace(p,function(a,b,c,d,e){var f=c||d||e||"";i[b]=h(f)}),c.start&&c.start(d,i,g)}function e(a,d){var e,f=0;if(d=b.lowercase(d))for(f=k.length-1;f>=0&&k[f]!=d;f--);if(f>=0){for(e=k.length-1;e>=f;e--)c.end&&c.end(k[e]);k.length=f}}"string"!=typeof a&&(a=null===a||"undefined"==typeof a?"":""+a);var f,g,i,j,k=[],l=a;for(k.last=function(){return k[k.length-1]};a;){if(j="",g=!0,k.last()&&G[k.last()])a=a.replace(new RegExp("([^]*)<\\s*\\/\\s*"+k.last()+"[^>]*>","i"),function(a,b){return b=b.replace(s,"$1").replace(v,"$1"),c.chars&&c.chars(h(b)),""}),e("",k.last());else{if(y.test(a)){if(i=a.match(y)){i[0];c.whitespace&&c.whitespace(i[0]),a=a.replace(i[0],""),g=!1}}else t.test(a)?(i=a.match(t),i&&(c.comment&&c.comment(i[1]),a=a.replace(i[0],""),g=!1)):u.test(a)?(i=a.match(u),i&&(a=a.replace(i[0],""),g=!1)):r.test(a)?(i=a.match(o),i&&(a=a.substring(i[0].length),i[0].replace(o,e),g=!1)):q.test(a)&&(i=a.match(n),i?(i[4]&&(a=a.substring(i[0].length),i[0].replace(n,d)),g=!1):(j+="<",a=a.substring(1)));g&&(f=a.indexOf("<"),j+=0>f?a:a.substring(0,f),a=0>f?"":a.substring(f),c.chars&&c.chars(h(j)))}if(a==l)throw m("badparse","The sanitizer was unable to parse the following block of html: {0}",a);l=a}e()}function h(a){if(!a)return"";var b=N.exec(a),c=b[1],d=b[3],e=b[2];return e&&(M.innerHTML=e.replace(/</g,"&lt;"),e="textContent"in M?M.textContent:M.innerText),c+e+d}function i(a){return a.replace(/&/g,"&amp;").replace(w,function(a){var b=a.charCodeAt(0),c=a.charCodeAt(1);return"&#"+(1024*(b-55296)+(c-56320)+65536)+";"}).replace(x,function(a){var b=a.charCodeAt(0);return 159>=b||173==b||b>=1536&&1540>=b||1807==b||6068==b||6069==b||b>=8204&&8207>=b||b>=8232&&8239>=b||b>=8288&&8303>=b||65279==b||b>=65520&&65535>=b?"&#"+b+";":a}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function j(a){var c="",d=a.split(";");return b.forEach(d,function(a){var d=a.split(":");if(2==d.length){var e=O(b.lowercase(d[0])),a=O(b.lowercase(d[1]));(("color"===e||"background-color"===e)&&(a.match(/^rgb\([0-9%,\. ]*\)$/i)||a.match(/^rgba\([0-9%,\. ]*\)$/i)||a.match(/^hsl\([0-9%,\. ]*\)$/i)||a.match(/^hsla\([0-9%,\. ]*\)$/i)||a.match(/^#[0-9a-f]{3,6}$/i)||a.match(/^[a-z]*$/i))||"text-align"===e&&("left"===a||"right"===a||"center"===a||"justify"===a)||"float"===e&&("left"===a||"right"===a||"none"===a)||("width"===e||"height"===e)&&a.match(/[0-9\.]*(px|em|rem|%)/)||"direction"===e&&a.match(/^ltr|rtl|initial|inherit$/))&&(c+=e+": "+a+";")}}),c}function k(a,b,c,d){return"img"===a&&b["ta-insert-video"]&&("ta-insert-video"===c||"allowfullscreen"===c||"frameborder"===c||"contenteditable"===c&&"false"===d)?!0:!1}function l(a,c){var d=!1,e=b.bind(a,a.push);return{start:function(a,f,g){a=b.lowercase(a),!d&&G[a]&&(d=a),d||H[a]!==!0||(e("<"),e(a),b.forEach(f,function(d,g){var h=b.lowercase(g),l="img"===a&&"src"===h||"background"===h;("style"===h&&""!==(d=j(d))||k(a,f,h,d)||L[h]===!0&&(I[h]!==!0||c(d,l)))&&(e(" "),e(g),e('="'),e(i(d)),e('"'))}),e(g?"/>":">"))},comment:function(a){e(a)},whitespace:function(a){e(i(a))},end:function(a){a=b.lowercase(a),d||H[a]!==!0||(e("</"),e(a),e(">")),a==d&&(d=!1)},chars:function(a){d||e(i(a))}}}var m=b.$$minErr("$sanitize"),n=/^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,o=/^<\/\s*([\w:-]+)[^>]*>/,p=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,q=/^</,r=/^<\//,s=/<!--(.*?)-->/g,t=/(^<!--.*?-->)/,u=/<!DOCTYPE([^>]*?)>/i,v=/<!\[CDATA\[(.*?)]]>/g,w=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,x=/([^\#-~| |!])/g,y=/^(\s+)/,z=f("area,br,col,hr,img,wbr,input"),A=f("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),B=f("rp,rt"),C=b.extend({},B,A),D=b.extend({},A,f("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul")),E=b.extend({},B,f("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")),F=f("animate,animateColor,animateMotion,animateTransform,circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,set,stop,svg,switch,text,title,tspan,use"),G=f("script,style"),H=b.extend({},z,D,E,C,F),I=f("background,cite,href,longdesc,src,usemap,xlink:href"),J=f("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,id,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,target,title,type,valign,value,vspace,width"),K=f("accent-height,accumulate,additive,alphabetic,arabic-form,ascent,attributeName,attributeType,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan"),L=b.extend({},I,K,J),M=document.createElement("pre"),N=/^(\s*)([\s\S]*?)(\s*)$/,O=function(){return String.prototype.trim?function(a){return b.isString(a)?a.trim():a}:function(a){return b.isString(a)?a.replace(/^\s\s*/,"").replace(/\s\s*$/,""):a}}();b.module("ngSanitize",[]).provider("$sanitize",d),b.module("ngSanitize").filter("linky",["$sanitize",function(a){var c=/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"”’]/,d=/^mailto:/;return function(f,g){function h(a){a&&n.push(e(a))}function i(a,c){n.push("<a "),b.isDefined(g)&&n.push('target="',g,'" '),n.push('href="',a.replace(/"/g,"&quot;"),'">'),h(c),n.push("</a>")}if(!f)return f;for(var j,k,l,m=f,n=[];j=m.match(c);)k=j[0],j[2]||j[4]||(k=(j[3]?"http://":"mailto:")+k),l=j.index,h(m.substr(0,l)),i(k,j[0].replace(d,"")),m=m.substring(l+j[0].length);return h(m),a(n.join(""))}}])}(window,window.angular);var taTools={};angular.module("textAngularSetup",[]).constant("taRegisterTool",registerTextAngularTool).value("taTools",taTools).value("taOptions",{forceTextAngularSanitize:!0,keyMappings:[],toolbar:[["h1","h2","h3","h4","h5","h6","p","pre","quote"],["bold","italics","underline","strikeThrough","ul","ol","redo","undo","clear"],["justifyLeft","justifyCenter","justifyRight","justifyFull","indent","outdent"],["html","insertImage","insertLink","insertVideo","wordcount","charcount"]],classes:{focussed:"focussed",toolbar:"btn-toolbar",toolbarGroup:"btn-group",toolbarButton:"btn btn-default",toolbarButtonActive:"active",disabled:"disabled",textEditor:"form-control",htmlEditor:"form-control"},defaultTagAttributes:{a:{target:""}},setup:{textEditorSetup:function(a){},htmlEditorSetup:function(a){}},defaultFileDropHandler:function(a,b){var c=new FileReader;return"image"===a.type.substring(0,5)?(c.onload=function(){""!==c.result&&b("insertImage",c.result,!0)},c.readAsDataURL(a),!0):!1}}).value("taSelectableElements",["a","img"]).value("taCustomRenderers",[{selector:"img",customAttribute:"ta-insert-video",renderLogic:function(a){var b=angular.element("<iframe></iframe>"),c=a.prop("attributes");angular.forEach(c,function(a){b.attr(a.name,a.value)}),b.attr("src",b.attr("ta-insert-video")),a.replaceWith(b)}}]).value("taTranslations",{html:{tooltip:"Toggle html / Rich Text"},heading:{tooltip:"Heading "},p:{tooltip:"Paragraph"},pre:{tooltip:"Preformatted text"},ul:{tooltip:"Unordered List"},ol:{tooltip:"Ordered List"},quote:{tooltip:"Quote/unquote selection or paragraph"},undo:{tooltip:"Undo"},redo:{tooltip:"Redo"},bold:{tooltip:"Bold"},italic:{tooltip:"Italic"},underline:{tooltip:"Underline"},strikeThrough:{tooltip:"Strikethrough"},justifyLeft:{tooltip:"Align text left"},justifyRight:{tooltip:"Align text right"},justifyFull:{tooltip:"Justify text"},justifyCenter:{tooltip:"Center"},indent:{tooltip:"Increase indent"},outdent:{tooltip:"Decrease indent"},clear:{tooltip:"Clear formatting"},insertImage:{dialogPrompt:"Please enter an image URL to insert",tooltip:"Insert image",hotkey:"the - possibly language dependent hotkey ... for some future implementation"},insertVideo:{tooltip:"Insert video",dialogPrompt:"Please enter a youtube URL to embed"},insertLink:{tooltip:"Insert / edit link",dialogPrompt:"Please enter a URL to insert"},editLink:{reLinkButton:{tooltip:"Relink"},unLinkButton:{tooltip:"Unlink"},targetToggle:{buttontext:"Open in New Window"}},wordcount:{tooltip:"Display words Count"},charcount:{tooltip:"Display characters Count"}}).factory("taToolFunctions",["$window","taTranslations",function(a,b){return{imgOnSelectAction:function(a,b,c){var d=function(){c.updateTaBindtaTextElement(),c.hidePopover()};a.preventDefault(),c.displayElements.popover.css("width","375px");var e=c.displayElements.popoverContainer;e.empty();var f=angular.element('<div class="btn-group" style="padding-right: 6px;">'),g=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" unselectable="on" tabindex="-1">100% </button>');g.on("click",function(a){a.preventDefault(),b.css({width:"100%",height:""}),d()});var h=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" unselectable="on" tabindex="-1">50% </button>');h.on("click",function(a){a.preventDefault(),b.css({width:"50%",height:""}),d()});var i=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" unselectable="on" tabindex="-1">25% </button>');i.on("click",function(a){a.preventDefault(),b.css({width:"25%",height:""}),d()});var j=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" unselectable="on" tabindex="-1">Reset</button>');j.on("click",function(a){a.preventDefault(),b.css({width:"",height:""}),d()}),f.append(g),f.append(h),f.append(i),f.append(j),e.append(f),f=angular.element('<div class="btn-group" style="padding-right: 6px;">');var k=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" unselectable="on" tabindex="-1"><i class="fa fa-align-left"></i></button>');k.on("click",function(a){a.preventDefault(),b.css("float","left"),b.css("cssFloat","left"),b.css("styleFloat","left"),d()});var l=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" unselectable="on" tabindex="-1"><i class="fa fa-align-right"></i></button>');l.on("click",function(a){a.preventDefault(),b.css("float","right"),b.css("cssFloat","right"),b.css("styleFloat","right"),d()});var m=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" unselectable="on" tabindex="-1"><i class="fa fa-align-justify"></i></button>');m.on("click",function(a){a.preventDefault(),b.css("float",""),b.css("cssFloat",""),b.css("styleFloat",""),d()}),f.append(k),f.append(m),f.append(l),e.append(f),f=angular.element('<div class="btn-group">');var n=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" unselectable="on" tabindex="-1"><i class="fa fa-trash-o"></i></button>');n.on("click",function(a){a.preventDefault(),b.remove(),d()}),f.append(n),e.append(f),c.showPopover(b),c.showResizeOverlay(b)},aOnSelectAction:function(c,d,e){c.preventDefault(),e.displayElements.popover.css("width","436px");var f=e.displayElements.popoverContainer;f.empty(),f.css("line-height","28px");var g=angular.element('<a href="'+d.attr("href")+'" target="_blank">'+d.attr("href")+"</a>");g.css({display:"inline-block","max-width":"200px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap","vertical-align":"middle"}),f.append(g);var h=angular.element('<div class="btn-group pull-right">'),i=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" tabindex="-1" unselectable="on" title="'+b.editLink.reLinkButton.tooltip+'"><i class="fa fa-edit icon-edit"></i></button>');i.on("click",function(c){c.preventDefault();var f=a.prompt(b.insertLink.dialogPrompt,d.attr("href"));f&&""!==f&&"http://"!==f&&(d.attr("href",f),e.updateTaBindtaTextElement()),e.hidePopover()}),h.append(i);var j=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" tabindex="-1" unselectable="on" title="'+b.editLink.unLinkButton.tooltip+'"><i class="fa fa-unlink icon-unlink"></i></button>');j.on("click",function(a){a.preventDefault(),d.replaceWith(d.contents()),e.updateTaBindtaTextElement(),e.hidePopover()}),h.append(j);var k=angular.element('<button type="button" class="btn btn-default btn-sm btn-small" tabindex="-1" unselectable="on">'+b.editLink.targetToggle.buttontext+"</button>");"_blank"===d.attr("target")&&k.addClass("active"),k.on("click",function(a){a.preventDefault(),d.attr("target","_blank"===d.attr("target")?"":"_blank"),k.toggleClass("active"),e.updateTaBindtaTextElement()}),h.append(k),f.append(h),e.showPopover(d)},extractYoutubeVideoId:function(a){var b=/(?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})/i,c=a.match(b);return c&&c[1]||null}}}]).run(["taRegisterTool","$window","taTranslations","taSelection","taToolFunctions","$sanitize","taOptions",function(a,b,c,d,e,f,g){var h={};if(f("",h),g.forceTextAngularSanitize===!0&&"taSanitize"!==h.version)throw angular.$$minErr("textAngular")("textAngularSetup","The textAngular-sanitize provider has been replaced by another -- have you included angular-sanitize by mistake?");a("html",{iconclass:"fa fa-code",tooltiptext:c.html.tooltip,action:function(){this.$editor().switchView()},activeState:function(){return this.$editor().showHtml}});var i=function(a){return function(){return this.$editor().queryFormatBlockState(a)}},j=function(){return this.$editor().wrapSelection("formatBlock","<"+this.name.toUpperCase()+">")};angular.forEach(["h1","h2","h3","h4","h5","h6"],function(b){a(b.toLowerCase(),{buttontext:b.toUpperCase(),tooltiptext:c.heading.tooltip+b.charAt(1),action:j,activeState:i(b.toLowerCase())})}),a("p",{buttontext:"P",tooltiptext:c.p.tooltip,action:function(){return this.$editor().wrapSelection("formatBlock","<P>")},activeState:function(){return this.$editor().queryFormatBlockState("p")}}),a("pre",{buttontext:"pre",tooltiptext:c.pre.tooltip,action:function(){return this.$editor().wrapSelection("formatBlock","<PRE>")},activeState:function(){return this.$editor().queryFormatBlockState("pre")}}),a("ul",{iconclass:"fa fa-list-ul",tooltiptext:c.ul.tooltip,action:function(){return this.$editor().wrapSelection("insertUnorderedList",null)},activeState:function(){return this.$editor().queryCommandState("insertUnorderedList")}}),a("ol",{iconclass:"fa fa-list-ol",tooltiptext:c.ol.tooltip,action:function(){return this.$editor().wrapSelection("insertOrderedList",null)},activeState:function(){return this.$editor().queryCommandState("insertOrderedList")}}),a("quote",{iconclass:"fa fa-quote-right",tooltiptext:c.quote.tooltip,action:function(){return this.$editor().wrapSelection("formatBlock","<BLOCKQUOTE>")},activeState:function(){return this.$editor().queryFormatBlockState("blockquote");
+}}),a("undo",{iconclass:"fa fa-undo",tooltiptext:c.undo.tooltip,action:function(){return this.$editor().wrapSelection("undo",null)}}),a("redo",{iconclass:"fa fa-repeat",tooltiptext:c.redo.tooltip,action:function(){return this.$editor().wrapSelection("redo",null)}}),a("bold",{iconclass:"fa fa-bold",tooltiptext:c.bold.tooltip,action:function(){return this.$editor().wrapSelection("bold",null)},activeState:function(){return this.$editor().queryCommandState("bold")},commandKeyCode:98}),a("justifyLeft",{iconclass:"fa fa-align-left",tooltiptext:c.justifyLeft.tooltip,action:function(){return this.$editor().wrapSelection("justifyLeft",null)},activeState:function(a){if(a&&"#document"===a.nodeName)return!1;var b=!1;return a&&(b="left"===a.css("text-align")||"left"===a.attr("align")||"right"!==a.css("text-align")&&"center"!==a.css("text-align")&&"justify"!==a.css("text-align")&&!this.$editor().queryCommandState("justifyRight")&&!this.$editor().queryCommandState("justifyCenter")&&!this.$editor().queryCommandState("justifyFull")),b=b||this.$editor().queryCommandState("justifyLeft")}}),a("justifyRight",{iconclass:"fa fa-align-right",tooltiptext:c.justifyRight.tooltip,action:function(){return this.$editor().wrapSelection("justifyRight",null)},activeState:function(a){if(a&&"#document"===a.nodeName)return!1;var b=!1;return a&&(b="right"===a.css("text-align")),b=b||this.$editor().queryCommandState("justifyRight")}}),a("justifyFull",{iconclass:"fa fa-align-justify",tooltiptext:c.justifyFull.tooltip,action:function(){return this.$editor().wrapSelection("justifyFull",null)},activeState:function(a){var b=!1;return a&&(b="justify"===a.css("text-align")),b=b||this.$editor().queryCommandState("justifyFull")}}),a("justifyCenter",{iconclass:"fa fa-align-center",tooltiptext:c.justifyCenter.tooltip,action:function(){return this.$editor().wrapSelection("justifyCenter",null)},activeState:function(a){if(a&&"#document"===a.nodeName)return!1;var b=!1;return a&&(b="center"===a.css("text-align")),b=b||this.$editor().queryCommandState("justifyCenter")}}),a("indent",{iconclass:"fa fa-indent",tooltiptext:c.indent.tooltip,action:function(){return this.$editor().wrapSelection("indent",null)},activeState:function(){return this.$editor().queryFormatBlockState("blockquote")},commandKeyCode:"TabKey"}),a("outdent",{iconclass:"fa fa-outdent",tooltiptext:c.outdent.tooltip,action:function(){return this.$editor().wrapSelection("outdent",null)},activeState:function(){return!1},commandKeyCode:"ShiftTabKey"}),a("italics",{iconclass:"fa fa-italic",tooltiptext:c.italic.tooltip,action:function(){return this.$editor().wrapSelection("italic",null)},activeState:function(){return this.$editor().queryCommandState("italic")},commandKeyCode:105}),a("underline",{iconclass:"fa fa-underline",tooltiptext:c.underline.tooltip,action:function(){return this.$editor().wrapSelection("underline",null)},activeState:function(){return this.$editor().queryCommandState("underline")},commandKeyCode:117}),a("strikeThrough",{iconclass:"fa fa-strikethrough",tooltiptext:c.strikeThrough.tooltip,action:function(){return this.$editor().wrapSelection("strikeThrough",null)},activeState:function(){return document.queryCommandState("strikeThrough")}}),a("clear",{iconclass:"fa fa-ban",tooltiptext:c.clear.tooltip,action:function(a,b){var c;this.$editor().wrapSelection("removeFormat",null);var e=angular.element(d.getSelectionElement()),f=function(a){a=angular.element(a);var b=a;angular.forEach(a.children(),function(a){var c=angular.element("<p></p>");c.html(angular.element(a).html()),b.after(c),b=c}),a.remove()};if(angular.forEach(e.find("ul"),f),angular.forEach(e.find("ol"),f),"li"===e[0].tagName.toLowerCase()){var g=e[0].parentNode.childNodes,h=[],i=[],j=!1;for(c=0;c<g.length;c++)g[c]===e[0]?j=!0:j?i.push(g[c]):h.push(g[c]);var k=angular.element(e[0].parentNode),l=angular.element("<p></p>");if(l.html(angular.element(e[0]).html()),0===h.length||0===i.length)0===i.length?k.after(l):k[0].parentNode.insertBefore(l[0],k[0]),0===h.length&&0===i.length?k.remove():angular.element(e[0]).remove();else{var m=angular.element("<"+k[0].tagName+"></"+k[0].tagName+">"),n=angular.element("<"+k[0].tagName+"></"+k[0].tagName+">");for(c=0;c<h.length;c++)m.append(angular.element(h[c]));for(c=0;c<i.length;c++)n.append(angular.element(i[c]));k.after(n),k.after(l),k.after(m),k.remove()}d.setSelectionToElementEnd(l[0])}var o=this.$editor(),p=function(a){a=angular.element(a),a[0]!==o.displayElements.text[0]&&a.removeAttr("class"),angular.forEach(a.children(),p)};angular.forEach(e,p),"li"!==e[0].tagName.toLowerCase()&&"ol"!==e[0].tagName.toLowerCase()&&"ul"!==e[0].tagName.toLowerCase()&&this.$editor().wrapSelection("formatBlock","default"),b()}}),a("insertImage",{iconclass:"fa fa-picture-o",tooltiptext:c.insertImage.tooltip,action:function(){var a;return a=b.prompt(c.insertImage.dialogPrompt,"http://"),a&&""!==a&&"http://"!==a?this.$editor().wrapSelection("insertImage",a,!0):void 0},onElementSelect:{element:"img",action:e.imgOnSelectAction}}),a("insertVideo",{iconclass:"fa fa-youtube-play",tooltiptext:c.insertVideo.tooltip,action:function(){var a;if(a=b.prompt(c.insertVideo.dialogPrompt,"https://"),a&&""!==a&&"https://"!==a&&(videoId=e.extractYoutubeVideoId(a),videoId)){var d="https://www.youtube.com/embed/"+videoId,f='<img class="ta-insert-video" src="https://img.youtube.com/vi/'+videoId+'/hqdefault.jpg" ta-insert-video="'+d+'" contenteditable="false" allowfullscreen="true" frameborder="0" />';return this.$editor().wrapSelection("insertHTML",f,!0)}},onElementSelect:{element:"img",onlyWithAttrs:["ta-insert-video"],action:e.imgOnSelectAction}}),a("insertLink",{tooltiptext:c.insertLink.tooltip,iconclass:"fa fa-link",action:function(){var a;return a=b.prompt(c.insertLink.dialogPrompt,"http://"),a&&""!==a&&"http://"!==a?this.$editor().wrapSelection("createLink",a,!0):void 0},activeState:function(a){return a?"A"===a[0].tagName:!1},onElementSelect:{element:"a",action:e.aOnSelectAction}}),a("wordcount",{display:'<div id="toolbarWC" style="display:block; min-width:100px;">Words: <span ng-bind="wordcount"></span></div>',disabled:!0,wordcount:0,activeState:function(){var a=this.$editor().displayElements.text,b=a[0].innerHTML||"",c=0;return""!==b.replace(/\s*<[^>]*?>\s*/g,"")&&(c=b.replace(/<\/?(b|i|em|strong|span|u|strikethrough|a|img|small|sub|sup|label)( [^>*?])?>/gi,"").replace(/(<[^>]*?>\s*<[^>]*?>)/gi," ").replace(/(<[^>]*?>)/gi,"").replace(/\s+/gi," ").match(/\S+/g).length),this.wordcount=c,this.$editor().wordcount=c,!1}}),a("charcount",{display:'<div id="toolbarCC" style="display:block; min-width:120px;">Characters: <span ng-bind="charcount"></span></div>',disabled:!0,charcount:0,activeState:function(){var a=this.$editor().displayElements.text,b=a[0].innerText||a[0].textContent,c=b.replace(/(\r\n|\n|\r)/gm,"").replace(/^\s+/g," ").replace(/\s+$/g," ").length;return this.charcount=c,this.$editor().charcount=c,!1}})}]),function(){"use strict";function a(a){return("0"+a).slice(-2)}function b(c,d){var e=c.getDay(),f=c.getDate(),g=c.getMonth(),h=c.getFullYear(),i=c.getHours(),l=c.getMinutes(),m=c.getSeconds();return d.replace(/%([%aAbBcdeHIlmMpPSwyYZz])/g,function(d){var n,o=d[1];switch(o){case"%":return"%";case"a":return j[e].slice(0,3);case"A":return j[e];case"b":return k[g].slice(0,3);case"B":return k[g];case"c":return c.toString();case"d":return a(f);case"e":return f;case"H":return a(i);case"I":return a(b(c,"%l"));case"l":return 0===i||12===i?12:(i+12)%12;case"m":return a(g+1);case"M":return a(l);case"p":return i>11?"PM":"AM";case"P":return i>11?"pm":"am";case"S":return a(m);case"w":return e;case"y":return a(h%100);case"Y":return h;case"Z":return n=c.toString().match(/\((\w+)\)$/),n?n[1]:"";case"z":return n=c.toString().match(/\w([+-]\d\d\d\d) /),n?n[1]:""}})}function c(a){this.date=a}function d(){if(null!==l)return l;if(!("Intl"in window))return!1;var a={day:"numeric",month:"short"},b=new window.Intl.DateTimeFormat(void 0,a),c=b.format(new Date(0));return l=!!c.match(/^\d/)}function e(){if(null!==m)return m;if(!("Intl"in window))return!0;var a={day:"numeric",month:"short",year:"numeric"},b=new window.Intl.DateTimeFormat(void 0,a),c=b.format(new Date(0));return m=!!c.match(/\d,/)}function f(a){var b=new Date;return b.getUTCFullYear()===a.getUTCFullYear()}function g(){var a,b,c;for(b=0,c=p.length;c>b;b++)a=p[b],a.textContent=a.getFormattedDate()}function h(a){var c={weekday:{"short":"%a","long":"%A"},day:{numeric:"%e","2-digit":"%d"},month:{"short":"%b","long":"%B"},year:{numeric:"%Y","2-digit":"%y"}},e=d()?"weekday day month year":"weekday month day, year";for(var f in c){var g=c[f][a.getAttribute(f)];e=e.replace(f,g||"")}return e=e.replace(/(\s,)|(,\s$)/,""),b(a._date,e).replace(/\s+/," ").trim()}function i(a){var c={hour:a.getAttribute("hour"),minute:a.getAttribute("minute"),second:a.getAttribute("second")};for(var d in c)c[d]||delete c[d];if(0!==Object.keys(c).length){if("Intl"in window){var e=new window.Intl.DateTimeFormat(void 0,c);return e.format(a._date)}var f=c.second?"%H:%M:%S":"%H:%M";return b(a._date,f)}}var j=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],k=["January","February","March","April","May","June","July","August","September","October","November","December"];c.prototype.toString=function(){var a=this.timeElapsed();return a?a:"on "+this.formatDate()},c.prototype.timeElapsed=function(){var a=(new Date).getTime()-this.date.getTime(),b=Math.round(a/1e3),c=Math.round(b/60),d=Math.round(c/60),e=Math.round(d/24);return 0>a?"just now":10>b?"just now":45>b?b+" seconds ago":90>b?"a minute ago":45>c?c+" minutes ago":90>c?"an hour ago":24>d?d+" hours ago":36>d?"a day ago":30>e?e+" days ago":null},c.prototype.timeAgo=function(){var a=(new Date).getTime()-this.date.getTime(),b=Math.round(a/1e3),c=Math.round(b/60),d=Math.round(c/60),e=Math.round(d/24),f=Math.round(e/30),g=Math.round(f/12);return 0>a?"just now":10>b?"just now":45>b?b+" seconds ago":90>b?"a minute ago":45>c?c+" minutes ago":90>c?"an hour ago":24>d?d+" hours ago":36>d?"a day ago":30>e?e+" days ago":45>e?"a month ago":12>f?f+" months ago":18>f?"a year ago":g+" years ago"},c.prototype.microTimeAgo=function(){var a=(new Date).getTime()-this.date.getTime(),b=a/1e3,c=b/60,d=c/60,e=d/24,f=e/30,g=f/12;return 1>c?"1m":60>c?Math.round(c)+"m":24>d?Math.round(d)+"h":365>e?Math.round(e)+"d":Math.round(g)+"y"};var l=null,m=null;c.prototype.formatDate=function(){var a=d()?"%e %b":"%b %e";return f(this.date)||(a+=e()?", %Y":" %Y"),b(this.date,a)},c.prototype.formatTime=function(){if("Intl"in window){var a=new window.Intl.DateTimeFormat(void 0,{hour:"numeric",minute:"2-digit"});return a.format(this.date)}return b(this.date,"%l:%M%P")};var n,o,p=[];o="HTMLTimeElement"in window?Object.create(window.HTMLTimeElement.prototype):Object.create(window.HTMLElement.prototype),o.attributeChangedCallback=function(a,b,c){if("datetime"===a){var d=Date.parse(c);this._date=isNaN(d)?null:new Date(d)}var e=this.getFormattedTitle();e&&this.setAttribute("title",e);var f=this.getFormattedDate();f&&(this.textContent=f)},o.getFormattedTitle=function(){if(this._date){if(this.hasAttribute("title"))return this.getAttribute("title");if("Intl"in window){var a={day:"numeric",month:"short",year:"numeric",hour:"numeric",minute:"2-digit",timeZoneName:"short"},b=new window.Intl.DateTimeFormat(void 0,a);return b.format(this._date)}return this._date.toLocaleString()}};var q=Object.create(o);q.createdCallback=function(){var a=this.getAttribute("datetime");a&&this.attributeChangedCallback("datetime",null,a)},q.getFormattedDate=function(){return this._date?new c(this._date).toString():void 0},q.attachedCallback=function(){p.push(this),n||(g(),n=setInterval(g,6e4))},q.detachedCallback=function(){var a=p.indexOf(this);-1!==a&&p.splice(a,1),p.length||n&&(clearInterval(n),n=null)};var r=Object.create(q);r.getFormattedDate=function(){if(this._date){var a=this.getAttribute("format");return"micro"===a?new c(this._date).microTimeAgo():new c(this._date).timeAgo()}};var s=Object.create(o);s.createdCallback=function(){var a;(a=this.getAttribute("datetime"))&&this.attributeChangedCallback("datetime",null,a),(a=this.getAttribute("format"))&&this.attributeChangedCallback("format",null,a)},s.getFormattedDate=function(){if(this._date){var a=h(this)||"",b=i(this)||"";return(a+" "+b).trim()}},window.RelativeTimeElement=document.registerElement("relative-time",{prototype:q,"extends":"time"}),window.TimeAgoElement=document.registerElement("time-ago",{prototype:r,"extends":"time"}),window.LocalTimeElement=document.registerElement("local-time",{prototype:s,"extends":"time"})}(),angular.module("ui.navbar",["ui.bootstrap","template/navbar-ul.html","template/navbar-li.html"]).directive("tree",function(){return{restrict:"E",replace:!0,scope:{tree:"="},templateUrl:"template/navbar-ul.html"}}).directive("leaf",["$compile",function(a){return{restrict:"E",replace:!0,scope:{leaf:"="},templateUrl:"template/navbar-li.html",link:function(b,c,d){if(angular.isArray(b.leaf.subtree)){c.append('<tree tree="leaf.subtree"></tree>');for(var e=c.parent(),f=!1;e.length>0&&!f;)e.hasClass("navbar-right")&&(f=!0),e=e.parent();f?c.addClass("dropdown-submenu-right"):c.addClass("dropdown-submenu"),a(c.contents())(b)}}}}]),angular.module("template/navbar-li.html",[]).run(["$templateCache",function(a){a.put("template/navbar-li.html",'<li ng-class="{divider: leaf.name == \'divider\'}">\n    <a ui-sref="{{leaf.link}}" ng-if="leaf.name !== \'divider\'">{{leaf.name}}</a>\n</li>')}]),angular.module("template/navbar-ul.html",[]).run(["$templateCache",function(a){a.put("template/navbar-ul.html","<ul class='dropdown-menu'>\n    <leaf ng-repeat='leaf in tree' leaf='leaf'></leaf>\n</ul>")}]),function(){"use strict";var a={TAB:9,ENTER:13,ESC:27,SPACE:32,LEFT:37,UP:38,RIGHT:39,DOWN:40,SHIFT:16,CTRL:17,ALT:18,PAGE_UP:33,PAGE_DOWN:34,HOME:36,END:35,BACKSPACE:8,DELETE:46,COMMAND:91,MAP:{91:"COMMAND",8:"BACKSPACE",9:"TAB",13:"ENTER",16:"SHIFT",17:"CTRL",18:"ALT",19:"PAUSEBREAK",20:"CAPSLOCK",27:"ESC",32:"SPACE",33:"PAGE_UP",34:"PAGE_DOWN",35:"END",36:"HOME",37:"LEFT",38:"UP",39:"RIGHT",40:"DOWN",43:"+",44:"PRINTSCREEN",45:"INSERT",46:"DELETE",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"A",66:"B",67:"C",68:"D",69:"E",70:"F",71:"G",72:"H",73:"I",74:"J",75:"K",76:"L",77:"M",78:"N",79:"O",80:"P",81:"Q",82:"R",83:"S",84:"T",85:"U",86:"V",87:"W",88:"X",89:"Y",90:"Z",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",109:"-",110:".",111:"/",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NUMLOCK",145:"SCROLLLOCK",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},isControl:function(b){var c=b.which;switch(c){case a.COMMAND:case a.SHIFT:case a.CTRL:case a.ALT:return!0}return b.metaKey?!0:!1},isFunctionKey:function(a){return a=a.which?a.which:a,a>=112&&123>=a},isVerticalMovement:function(b){return~[a.UP,a.DOWN].indexOf(b)},isHorizontalMovement:function(b){return~[a.LEFT,a.RIGHT,a.BACKSPACE,a.DELETE].indexOf(b)}};void 0===angular.element.prototype.querySelectorAll&&(angular.element.prototype.querySelectorAll=function(a){return angular.element(this[0].querySelectorAll(a))}),void 0===angular.element.prototype.closest&&(angular.element.prototype.closest=function(a){for(var b=this[0],c=b.matches||b.webkitMatchesSelector||b.mozMatchesSelector||b.msMatchesSelector;b;){if(c.bind(b)(a))return b;b=b.parentElement}return!1});var b=0,c=angular.module("ui.select",[]).constant("uiSelectConfig",{theme:"bootstrap",searchEnabled:!0,sortable:!1,placeholder:"",refreshDelay:1e3,closeOnSelect:!0,dropdownPosition:"auto",generateId:function(){return b++},appendToBody:!1}).service("uiSelectMinErr",function(){var a=angular.$$minErr("ui.select");return function(){var b=a.apply(this,arguments),c=b.message.replace(new RegExp("\nhttp://errors.angularjs.org/.*"),"");return new Error(c)}}).directive("uisTranscludeAppend",function(){return{link:function(a,b,c,d,e){e(a,function(a){b.append(a)})}}}).filter("highlight",function(){function a(a){return a.replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1")}return function(b,c){return c&&b?b.replace(new RegExp(a(c),"gi"),'<span class="ui-select-highlight">$&</span>'):b}}).factory("uisOffset",["$document","$window",function(a,b){return function(c){var d=c[0].getBoundingClientRect();return{width:d.width||c.prop("offsetWidth"),height:d.height||c.prop("offsetHeight"),top:d.top+(b.pageYOffset||a[0].documentElement.scrollTop),left:d.left+(b.pageXOffset||a[0].documentElement.scrollLeft)}}}]);c.directive("uiSelectChoices",["uiSelectConfig","uisRepeatParser","uiSelectMinErr","$compile",function(a,b,c,d){return{restrict:"EA",require:"^uiSelect",replace:!0,transclude:!0,templateUrl:function(b){var c=b.parent().attr("theme")||a.theme;return c+"/choices.tpl.html"},compile:function(e,f){if(!f.repeat)throw c("repeat","Expected 'repeat' expression.");return function(e,f,g,h,i){var j=g.groupBy,k=g.groupFilter;if(h.parseRepeatAttr(g.repeat,j,k),h.disableChoiceExpression=g.uiDisableChoice,h.onHighlightCallback=g.onHighlight,h.dropdownPosition=g.position?g.position.toLowerCase():a.dropdownPosition,j){var l=f.querySelectorAll(".ui-select-choices-group");if(1!==l.length)throw c("rows","Expected 1 .ui-select-choices-group but got '{0}'.",l.length);l.attr("ng-repeat",b.getGroupNgRepeatExpression())}var m=f.querySelectorAll(".ui-select-choices-row");if(1!==m.length)throw c("rows","Expected 1 .ui-select-choices-row but got '{0}'.",m.length);m.attr("ng-repeat",h.parserResult.repeatExpression(j)).attr("ng-if","$select.open").attr("ng-click","$select.select("+h.parserResult.itemName+",false,$event)");var n=f.querySelectorAll(".ui-select-choices-row-inner");if(1!==n.length)throw c("rows","Expected 1 .ui-select-choices-row-inner but got '{0}'.",n.length);n.attr("uis-transclude-append",""),d(f,i)(e),e.$watch("$select.search",function(a){a&&!h.open&&h.multiple&&h.activate(!1,!0),h.activeIndex=h.tagging.isActivated?-1:0,h.refresh(g.refresh)}),g.$observe("refreshDelay",function(){var b=e.$eval(g.refreshDelay);h.refreshDelay=void 0!==b?b:a.refreshDelay})}}}}]),c.controller("uiSelectCtrl",["$scope","$element","$timeout","$filter","uisRepeatParser","uiSelectMinErr","uiSelectConfig","$parse",function(b,c,d,e,f,g,h,i){function j(){(n.resetSearchInput||void 0===n.resetSearchInput&&h.resetSearchInput)&&(n.search=o,n.selected&&n.items.length&&!n.multiple&&(n.activeIndex=n.items.indexOf(n.selected)))}function k(a,b){var c,d,e=[];for(c=0;c<b.length;c++)for(d=0;d<a.length;d++)a[d].name==[b[c]]&&e.push(a[d]);return e}function l(b){var c=!0;switch(b){case a.DOWN:!n.open&&n.multiple?n.activate(!1,!0):n.activeIndex<n.items.length-1&&n.activeIndex++;break;case a.UP:!n.open&&n.multiple?n.activate(!1,!0):(n.activeIndex>0||0===n.search.length&&n.tagging.isActivated&&n.activeIndex>-1)&&n.activeIndex--;break;case a.TAB:(!n.multiple||n.open)&&n.select(n.items[n.activeIndex],!0);break;case a.ENTER:n.open&&(n.tagging.isActivated||n.activeIndex>=0)?n.select(n.items[n.activeIndex]):n.activate(!1,!0);break;case a.ESC:n.close();break;default:c=!1}return c}function m(){var a=c.querySelectorAll(".ui-select-choices-content"),b=a.querySelectorAll(".ui-select-choices-row");if(b.length<1)throw g("choices","Expected multiple .ui-select-choices-row but got '{0}'.",b.length);if(!(n.activeIndex<0)){var d=b[n.activeIndex],e=d.offsetTop+d.clientHeight-a[0].scrollTop,f=a[0].offsetHeight;e>f?a[0].scrollTop+=e-f:e<d.clientHeight&&(n.isGrouped&&0===n.activeIndex?a[0].scrollTop=0:a[0].scrollTop-=d.clientHeight-e)}}var n=this,o="";if(n.placeholder=h.placeholder,n.searchEnabled=h.searchEnabled,n.sortable=h.sortable,n.refreshDelay=h.refreshDelay,n.removeSelected=!1,n.closeOnSelect=!0,n.search=o,n.activeIndex=0,n.items=[],n.open=!1,n.focus=!1,n.disabled=!1,n.selected=void 0,n.dropdownPosition="auto",n.focusser=void 0,n.resetSearchInput=!0,n.multiple=void 0,n.disableChoiceExpression=void 0,n.tagging={isActivated:!1,fct:void 0},n.taggingTokens={isActivated:!1,tokens:void 0},n.lockChoiceExpression=void 0,n.clickTriggeredSelect=!1,n.$filter=e,n.searchInput=c.querySelectorAll("input.ui-select-search"),1!==n.searchInput.length)throw g("searchInput","Expected 1 input.ui-select-search but got '{0}'.",n.searchInput.length);n.isEmpty=function(){return angular.isUndefined(n.selected)||null===n.selected||""===n.selected},n.activate=function(a,c){n.disabled||n.open||(c||j(),b.$broadcast("uis:activate"),n.open=!0,n.activeIndex=n.activeIndex>=n.items.length?0:n.activeIndex,-1===n.activeIndex&&n.taggingLabel!==!1&&(n.activeIndex=0),d(function(){n.search=a||n.search,n.searchInput[0].focus(),!n.tagging.isActivated&&n.items.length>1&&m()}))},n.findGroupByName=function(a){return n.groups&&n.groups.filter(function(b){return b.name===a})[0]},n.parseRepeatAttr=function(a,c,d){function e(a){var e=b.$eval(c);if(n.groups=[],angular.forEach(a,function(a){var b=angular.isFunction(e)?e(a):a[e],c=n.findGroupByName(b);c?c.items.push(a):n.groups.push({name:b,items:[a]})}),d){var f=b.$eval(d);angular.isFunction(f)?n.groups=f(n.groups):angular.isArray(f)&&(n.groups=k(n.groups,f))}n.items=[],n.groups.forEach(function(a){n.items=n.items.concat(a.items)})}function h(a){n.items=a}n.setItemsFn=c?e:h,n.parserResult=f.parse(a),n.isGrouped=!!c,n.itemProperty=n.parserResult.itemName;var j=n.parserResult.source,l=function(){var a=j(b);b.$uisSource=Object.keys(a).map(function(b){var c={};return c[n.parserResult.keyName]=b,c.value=a[b],c})};n.parserResult.keyName&&(l(),n.parserResult.source=i("$uisSource"+n.parserResult.filters),b.$watch(j,function(a,b){a!==b&&l()},!0)),n.refreshItems=function(a){a=a||n.parserResult.source(b);var c=n.selected;if(n.isEmpty()||angular.isArray(c)&&!c.length||!n.removeSelected)n.setItemsFn(a);else if(void 0!==a){var d=a.filter(function(a){return c&&c.indexOf(a)<0});n.setItemsFn(d)}("auto"===n.dropdownPosition||"up"===n.dropdownPosition)&&b.calculateDropdownPos()},b.$watchCollection(n.parserResult.source,function(a){if(void 0===a||null===a)n.items=[];else{if(!angular.isArray(a))throw g("items","Expected an array but got '{0}'.",a);n.refreshItems(a),n.ngModel.$modelValue=null}})};var p;n.refresh=function(a){void 0!==a&&(p&&d.cancel(p),p=d(function(){b.$eval(a)},n.refreshDelay))},n.isActive=function(a){if(!n.open)return!1;var b=n.items.indexOf(a[n.itemProperty]),c=b===n.activeIndex;return!c||0>b&&n.taggingLabel!==!1||0>b&&n.taggingLabel===!1?!1:(c&&!angular.isUndefined(n.onHighlightCallback)&&a.$eval(n.onHighlightCallback),c)},n.isDisabled=function(a){if(n.open){var b,c=n.items.indexOf(a[n.itemProperty]),d=!1;return c>=0&&!angular.isUndefined(n.disableChoiceExpression)&&(b=n.items[c],d=!!a.$eval(n.disableChoiceExpression),b._uiSelectChoiceDisabled=d),d}},n.select=function(a,c,e){if(void 0===a||!a._uiSelectChoiceDisabled){if(!n.items&&!n.search)return;if(!a||!a._uiSelectChoiceDisabled){if(n.tagging.isActivated){if(n.taggingLabel===!1)if(n.activeIndex<0){if(a=void 0!==n.tagging.fct?n.tagging.fct(n.search):n.search,!a||angular.equals(n.items[0],a))return}else a=n.items[n.activeIndex];else if(0===n.activeIndex){if(void 0===a)return;if(void 0!==n.tagging.fct&&"string"==typeof a){if(a=n.tagging.fct(n.search),!a)return}else"string"==typeof a&&(a=a.replace(n.taggingLabel,"").trim())}if(n.selected&&angular.isArray(n.selected)&&n.selected.filter(function(b){return angular.equals(b,a)}).length>0)return void n.close(c)}b.$broadcast("uis:select",a);var f={};f[n.parserResult.itemName]=a,d(function(){n.onSelectCallback(b,{$item:a,$model:n.parserResult.modelMapper(b,f)})}),n.closeOnSelect&&n.close(c),e&&"click"===e.type&&(n.clickTriggeredSelect=!0)}}},n.close=function(a){n.open&&(n.ngModel&&n.ngModel.$setTouched&&n.ngModel.$setTouched(),j(),n.open=!1,b.$broadcast("uis:close",a))},n.setFocus=function(){n.focus||n.focusInput[0].focus()},n.clear=function(a){n.select(void 0),a.stopPropagation(),d(function(){n.focusser[0].focus()},0,!1)},n.toggle=function(a){n.open?(n.close(),a.preventDefault(),a.stopPropagation()):n.activate()},n.isLocked=function(a,b){var c,d=n.selected[b];return d&&!angular.isUndefined(n.lockChoiceExpression)&&(c=!!a.$eval(n.lockChoiceExpression),d._uiSelectChoiceLocked=c),c};var q=null;n.sizeSearchInput=function(){var a=n.searchInput[0],c=n.searchInput.parent().parent()[0],e=function(){return c.clientWidth*!!a.offsetParent},f=function(b){if(0===b)return!1;var c=b-a.offsetLeft-10;return 50>c&&(c=b),n.searchInput.css("width",c+"px"),!0};n.searchInput.css("width","10px"),d(function(){null!==q||f(e())||(q=b.$watch(e,function(a){f(a)&&(q(),q=null)}))})},n.searchInput.on("keydown",function(c){var e=c.which;b.$apply(function(){var b=!1;if((n.items.length>0||n.tagging.isActivated)&&(l(e),n.taggingTokens.isActivated)){for(var f=0;f<n.taggingTokens.tokens.length;f++)n.taggingTokens.tokens[f]===a.MAP[c.keyCode]&&n.search.length>0&&(b=!0);b&&d(function(){n.searchInput.triggerHandler("tagged");var b=n.search.replace(a.MAP[c.keyCode],"").trim();n.tagging.fct&&(b=n.tagging.fct(b)),b&&n.select(b,!0)})}}),a.isVerticalMovement(e)&&n.items.length>0&&m(),(e===a.ENTER||e===a.ESC)&&(c.preventDefault(),c.stopPropagation())}),n.searchInput.on("paste",function(a){var b=a.originalEvent.clipboardData.getData("text/plain");if(b&&b.length>0&&n.taggingTokens.isActivated&&n.tagging.fct){var c=b.split(n.taggingTokens.tokens[0]);c&&c.length>0&&(angular.forEach(c,function(a){var b=n.tagging.fct(a);b&&n.select(b,!0)}),a.preventDefault(),a.stopPropagation())}}),n.searchInput.on("tagged",function(){d(function(){j()})}),b.$on("$destroy",function(){n.searchInput.off("keyup keydown tagged blur paste")})}]),c.directive("uiSelect",["$document","uiSelectConfig","uiSelectMinErr","uisOffset","$compile","$parse","$timeout",function(a,b,c,d,e,f,g){return{restrict:"EA",templateUrl:function(a,c){var d=c.theme||b.theme;return d+(angular.isDefined(c.multiple)?"/select-multiple.tpl.html":"/select.tpl.html")},replace:!0,transclude:!0,require:["uiSelect","^ngModel"],scope:!0,controller:"uiSelectCtrl",controllerAs:"$select",compile:function(e,h){return angular.isDefined(h.multiple)?e.append("<ui-select-multiple/>").removeAttr("multiple"):e.append("<ui-select-single/>"),h.inputId&&(e.querySelectorAll("input.ui-select-search")[0].id=h.inputId),function(e,h,i,j,k){function l(a){if(o.open){var b=!1;if(b=window.jQuery?window.jQuery.contains(h[0],a.target):h[0].contains(a.target),!b&&!o.clickTriggeredSelect){var c=["input","button","textarea"],d=angular.element(a.target).controller("uiSelect"),f=d&&d!==o;f||(f=~c.indexOf(a.target.tagName.toLowerCase())),o.close(f),e.$digest()}o.clickTriggeredSelect=!1}}function m(){var b=d(h);r=angular.element('<div class="ui-select-placeholder"></div>'),r[0].style.width=b.width+"px",r[0].style.height=b.height+"px",h.after(r),s=h[0].style.width,a.find("body").append(h),h[0].style.position="absolute",h[0].style.left=b.left+"px",h[0].style.top=b.top+"px",h[0].style.width=b.width+"px"}function n(){null!==r&&(r.replaceWith(h),r=null,h[0].style.position="",h[0].style.left="",h[0].style.top="",h[0].style.width=s)}var o=j[0],p=j[1];o.generatedId=b.generateId(),o.baseTitle=i.title||"Select box",o.focusserTitle=o.baseTitle+" focus",o.focusserId="focusser-"+o.generatedId,o.closeOnSelect=function(){return angular.isDefined(i.closeOnSelect)?f(i.closeOnSelect)():b.closeOnSelect}(),o.onSelectCallback=f(i.onSelect),o.onRemoveCallback=f(i.onRemove),o.limit=angular.isDefined(i.limit)?parseInt(i.limit,10):void 0,o.ngModel=p,o.choiceGrouped=function(a){return o.isGrouped&&a&&a.name},i.tabindex&&i.$observe("tabindex",function(a){o.focusInput.attr("tabindex",a),h.removeAttr("tabindex")}),e.$watch("searchEnabled",function(){var a=e.$eval(i.searchEnabled);o.searchEnabled=void 0!==a?a:b.searchEnabled}),e.$watch("sortable",function(){var a=e.$eval(i.sortable);o.sortable=void 0!==a?a:b.sortable}),i.$observe("disabled",function(){o.disabled=void 0!==i.disabled?i.disabled:!1}),i.$observe("resetSearchInput",function(){var a=e.$eval(i.resetSearchInput);o.resetSearchInput=void 0!==a?a:!0}),i.$observe("tagging",function(){if(void 0!==i.tagging){var a=e.$eval(i.tagging);o.tagging={isActivated:!0,fct:a!==!0?a:void 0}}else o.tagging={isActivated:!1,fct:void 0}}),i.$observe("taggingLabel",function(){void 0!==i.tagging&&("false"===i.taggingLabel?o.taggingLabel=!1:o.taggingLabel=void 0!==i.taggingLabel?i.taggingLabel:"(new)")}),i.$observe("taggingTokens",function(){if(void 0!==i.tagging){var a=void 0!==i.taggingTokens?i.taggingTokens.split("|"):[",","ENTER"];o.taggingTokens={isActivated:!0,tokens:a}}}),angular.isDefined(i.autofocus)&&g(function(){o.setFocus()}),angular.isDefined(i.focusOn)&&e.$on(i.focusOn,function(){g(function(){o.setFocus()})}),a.on("click",l),e.$on("$destroy",function(){a.off("click",l)}),k(e,function(a){var b=angular.element("<div>").append(a),d=b.querySelectorAll(".ui-select-match");if(d.removeAttr("ui-select-match"),d.removeAttr("data-ui-select-match"),1!==d.length)throw c("transcluded","Expected 1 .ui-select-match but got '{0}'.",d.length);h.querySelectorAll(".ui-select-match").replaceWith(d);var e=b.querySelectorAll(".ui-select-choices");if(e.removeAttr("ui-select-choices"),e.removeAttr("data-ui-select-choices"),1!==e.length)throw c("transcluded","Expected 1 .ui-select-choices but got '{0}'.",e.length);h.querySelectorAll(".ui-select-choices").replaceWith(e)});var q=e.$eval(i.appendToBody);(void 0!==q?q:b.appendToBody)&&(e.$watch("$select.open",function(a){a?m():n()}),e.$on("$destroy",function(){n()}));var r=null,s="",t=null,u="direction-up";e.$watch("$select.open",function(){("auto"===o.dropdownPosition||"up"===o.dropdownPosition)&&e.calculateDropdownPos()});var v=function(a,b){a=a||d(h),b=b||d(t),t[0].style.position="absolute",t[0].style.top=-1*b.height+"px",h.addClass(u)},w=function(a,b){h.removeClass(u),a=a||d(h),b=b||d(t),t[0].style.position="",t[0].style.top=""};e.calculateDropdownPos=function(){if(o.open){if(t=angular.element(h).querySelectorAll(".ui-select-dropdown"),0===t.length)return;t[0].style.opacity=0,g(function(){if("up"===o.dropdownPosition)v(b,c);else{h.removeClass(u);var b=d(h),c=d(t),e=a[0].documentElement.scrollTop||a[0].body.scrollTop;b.top+b.height+c.height>e+a[0].documentElement.clientHeight?v(b,c):w(b,c)}t[0].style.opacity=1})}else{if(null===t||0===t.length)return;t[0].style.position="",t[0].style.top="",h.removeClass(u)}}}}}}]),c.directive("uiSelectMatch",["uiSelectConfig",function(a){return{restrict:"EA",require:"^uiSelect",replace:!0,transclude:!0,templateUrl:function(b){var c=b.parent().attr("theme")||a.theme,d=b.parent().attr("multiple");return c+(d?"/match-multiple.tpl.html":"/match.tpl.html")},link:function(b,c,d,e){function f(a){e.allowClear=angular.isDefined(a)?""===a?!0:"true"===a.toLowerCase():!1}e.lockChoiceExpression=d.uiLockChoice,d.$observe("placeholder",function(b){e.placeholder=void 0!==b?b:a.placeholder}),d.$observe("allowClear",f),f(d.allowClear),e.multiple&&e.sizeSearchInput()}}}]),c.directive("uiSelectMultiple",["uiSelectMinErr","$timeout",function(b,c){return{restrict:"EA",require:["^uiSelect","^ngModel"],controller:["$scope","$timeout",function(a,b){var c,d=this,e=a.$select;a.$evalAsync(function(){c=a.ngModel}),d.activeMatchIndex=-1,d.updateModel=function(){c.$setViewValue(Date.now()),d.refreshComponent()},d.refreshComponent=function(){e.refreshItems(),e.sizeSearchInput()},d.removeChoice=function(c){var f=e.selected[c];if(!f._uiSelectChoiceLocked){var g={};g[e.parserResult.itemName]=f,e.selected.splice(c,1),d.activeMatchIndex=-1,e.sizeSearchInput(),b(function(){e.onRemoveCallback(a,{$item:f,$model:e.parserResult.modelMapper(a,g)})}),d.updateModel()}},d.getPlaceholder=function(){return e.selected&&e.selected.length?void 0:e.placeholder}}],controllerAs:"$selectMultiple",link:function(d,e,f,g){function h(a){return angular.isNumber(a.selectionStart)?a.selectionStart:a.value.length}function i(b){function c(){switch(b){case a.LEFT:return~n.activeMatchIndex?k:g;
+case a.RIGHT:return~n.activeMatchIndex&&i!==g?j:(l.activate(),!1);case a.BACKSPACE:return~n.activeMatchIndex?(n.removeChoice(i),k):g;case a.DELETE:return~n.activeMatchIndex?(n.removeChoice(n.activeMatchIndex),i):!1}}var d=h(l.searchInput[0]),e=l.selected.length,f=0,g=e-1,i=n.activeMatchIndex,j=n.activeMatchIndex+1,k=n.activeMatchIndex-1,m=i;return d>0||l.search.length&&b==a.RIGHT?!1:(l.close(),m=c(),l.selected.length&&m!==!1?n.activeMatchIndex=Math.min(g,Math.max(f,m)):n.activeMatchIndex=-1,!0)}function j(a){if(void 0===a||void 0===l.search)return!1;var b=a.filter(function(a){return void 0===l.search.toUpperCase()||void 0===a?!1:a.toUpperCase()===l.search.toUpperCase()}).length>0;return b}function k(a,b){var c=-1;if(angular.isArray(a))for(var d=angular.copy(a),e=0;e<d.length;e++)if(void 0===l.tagging.fct)d[e]+" "+l.taggingLabel===b&&(c=e);else{var f=d[e];f.isTag=!0,angular.equals(f,b)&&(c=e)}return c}var l=g[0],m=d.ngModel=g[1],n=d.$selectMultiple;l.multiple=!0,l.removeSelected=!0,l.focusInput=l.searchInput,m.$parsers.unshift(function(){for(var a,b={},c=[],e=l.selected.length-1;e>=0;e--)b={},b[l.parserResult.itemName]=l.selected[e],a=l.parserResult.modelMapper(d,b),c.unshift(a);return c}),m.$formatters.unshift(function(a){var b,c=l.parserResult.source(d,{$select:{search:""}}),e={};if(!c)return a;var f=[],g=function(a,c){if(a&&a.length){for(var g=a.length-1;g>=0;g--){if(e[l.parserResult.itemName]=a[g],b=l.parserResult.modelMapper(d,e),l.parserResult.trackByExp){var h=/\.(.+)/.exec(l.parserResult.trackByExp);if(h.length>0&&b[h[1]]==c[h[1]])return f.unshift(a[g]),!0}if(angular.equals(b,c))return f.unshift(a[g]),!0}return!1}};if(!a)return f;for(var h=a.length-1;h>=0;h--)g(l.selected,a[h])||g(c,a[h])||f.unshift(a[h]);return f}),d.$watchCollection(function(){return m.$modelValue},function(a,b){b!=a&&(m.$modelValue=null,n.refreshComponent())}),m.$render=function(){if(!angular.isArray(m.$viewValue)){if(!angular.isUndefined(m.$viewValue)&&null!==m.$viewValue)throw b("multiarr","Expected model value to be array but got '{0}'",m.$viewValue);l.selected=[]}l.selected=m.$viewValue,d.$evalAsync()},d.$on("uis:select",function(a,b){l.selected.length>=l.limit||(l.selected.push(b),n.updateModel())}),d.$on("uis:activate",function(){n.activeMatchIndex=-1}),d.$watch("$select.disabled",function(a,b){b&&!a&&l.sizeSearchInput()}),l.searchInput.on("keydown",function(b){var c=b.which;d.$apply(function(){var d=!1;a.isHorizontalMovement(c)&&(d=i(c)),d&&c!=a.TAB&&(b.preventDefault(),b.stopPropagation())})}),l.searchInput.on("keyup",function(b){if(a.isVerticalMovement(b.which)||d.$evalAsync(function(){l.activeIndex=l.taggingLabel===!1?-1:0}),l.tagging.isActivated&&l.search.length>0){if(b.which===a.TAB||a.isControl(b)||a.isFunctionKey(b)||b.which===a.ESC||a.isVerticalMovement(b.which))return;if(l.activeIndex=l.taggingLabel===!1?-1:0,l.taggingLabel===!1)return;var c,e,f,g,h=angular.copy(l.items),i=angular.copy(l.items),m=!1,n=-1;if(void 0!==l.tagging.fct){if(f=l.$filter("filter")(h,{isTag:!0}),f.length>0&&(g=f[0]),h.length>0&&g&&(m=!0,h=h.slice(1,h.length),i=i.slice(1,i.length)),c=l.tagging.fct(l.search),c.isTag=!0,i.filter(function(a){return angular.equals(a,l.tagging.fct(l.search))}).length>0)return;c.isTag=!0}else{if(f=l.$filter("filter")(h,function(a){return a.match(l.taggingLabel)}),f.length>0&&(g=f[0]),e=h[0],void 0!==e&&h.length>0&&g&&(m=!0,h=h.slice(1,h.length),i=i.slice(1,i.length)),c=l.search+" "+l.taggingLabel,k(l.selected,l.search)>-1)return;if(j(i.concat(l.selected)))return void(m&&(h=i,d.$evalAsync(function(){l.activeIndex=0,l.items=h})));if(j(i))return void(m&&(l.items=i.slice(1,i.length)))}m&&(n=k(l.selected,c)),n>-1?h=h.slice(n+1,h.length-1):(h=[],h.push(c),h=h.concat(i)),d.$evalAsync(function(){l.activeIndex=0,l.items=h})}}),l.searchInput.on("blur",function(){c(function(){n.activeMatchIndex=-1})})}}}]),c.directive("uiSelectSingle",["$timeout","$compile",function(b,c){return{restrict:"EA",require:["^uiSelect","^ngModel"],link:function(d,e,f,g){var h=g[0],i=g[1];i.$parsers.unshift(function(a){var b,c={};return c[h.parserResult.itemName]=a,b=h.parserResult.modelMapper(d,c)}),i.$formatters.unshift(function(a){var b,c=h.parserResult.source(d,{$select:{search:""}}),e={};if(c){var f=function(c){return e[h.parserResult.itemName]=c,b=h.parserResult.modelMapper(d,e),b==a};if(h.selected&&f(h.selected))return h.selected;for(var g=c.length-1;g>=0;g--)if(f(c[g]))return c[g]}return a}),d.$watch("$select.selected",function(a){i.$viewValue!==a&&i.$setViewValue(a)}),i.$render=function(){h.selected=i.$viewValue},d.$on("uis:select",function(a,b){h.selected=b}),d.$on("uis:close",function(a,c){b(function(){h.focusser.prop("disabled",!1),c||h.focusser[0].focus()},0,!1)}),d.$on("uis:activate",function(){j.prop("disabled",!0)});var j=angular.element("<input ng-disabled='$select.disabled' class='ui-select-focusser ui-select-offscreen' type='text' id='{{ $select.focusserId }}' aria-label='{{ $select.focusserTitle }}' aria-haspopup='true' role='button' />");c(j)(d),h.focusser=j,h.focusInput=j,e.parent().append(j),j.bind("focus",function(){d.$evalAsync(function(){h.focus=!0})}),j.bind("blur",function(){d.$evalAsync(function(){h.focus=!1})}),j.bind("keydown",function(b){return b.which===a.BACKSPACE?(b.preventDefault(),b.stopPropagation(),h.select(void 0),void d.$apply()):void(b.which===a.TAB||a.isControl(b)||a.isFunctionKey(b)||b.which===a.ESC||((b.which==a.DOWN||b.which==a.UP||b.which==a.ENTER||b.which==a.SPACE)&&(b.preventDefault(),b.stopPropagation(),h.activate()),d.$digest()))}),j.bind("keyup input",function(b){b.which===a.TAB||a.isControl(b)||a.isFunctionKey(b)||b.which===a.ESC||b.which==a.ENTER||b.which===a.BACKSPACE||(h.activate(j.val()),j.val(""),d.$digest())})}}}]),c.directive("uiSelectSort",["$timeout","uiSelectConfig","uiSelectMinErr",function(a,b,c){return{require:"^uiSelect",link:function(b,d,e,f){if(null===b[e.uiSelectSort])throw c("sort","Expected a list to sort");var g=angular.extend({axis:"horizontal"},b.$eval(e.uiSelectSortOptions)),h=g.axis,i="dragging",j="dropping",k="dropping-before",l="dropping-after";b.$watch(function(){return f.sortable},function(a){a?d.attr("draggable",!0):d.removeAttr("draggable")}),d.on("dragstart",function(a){d.addClass(i),(a.dataTransfer||a.originalEvent.dataTransfer).setData("text/plain",b.$index)}),d.on("dragend",function(){d.removeClass(i)});var m,n=function(a,b){this.splice(b,0,this.splice(a,1)[0])},o=function(a){a.preventDefault();var b="vertical"===h?a.offsetY||a.layerY||(a.originalEvent?a.originalEvent.offsetY:0):a.offsetX||a.layerX||(a.originalEvent?a.originalEvent.offsetX:0);b<this["vertical"===h?"offsetHeight":"offsetWidth"]/2?(d.removeClass(l),d.addClass(k)):(d.removeClass(k),d.addClass(l))},p=function(b){b.preventDefault();var c=parseInt((b.dataTransfer||b.originalEvent.dataTransfer).getData("text/plain"),10);a.cancel(m),m=a(function(){q(c)},20)},q=function(a){var c=b.$eval(e.uiSelectSort),f=c[a],g=null;g=d.hasClass(k)?a<b.$index?b.$index-1:b.$index:a<b.$index?b.$index:b.$index+1,n.apply(c,[a,g]),b.$apply(function(){b.$emit("uiSelectSort:change",{array:c,item:f,from:a,to:g})}),d.removeClass(j),d.removeClass(k),d.removeClass(l),d.off("drop",p)};d.on("dragenter",function(){d.hasClass(i)||(d.addClass(j),d.on("dragover",o),d.on("drop",p))}),d.on("dragleave",function(a){a.target==d&&(d.removeClass(j),d.removeClass(k),d.removeClass(l),d.off("dragover",o),d.off("drop",p))})}}}]),c.service("uisRepeatParser",["uiSelectMinErr","$parse",function(a,b){var c=this;c.parse=function(c){var d,e=/\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)/.test(c);if(d=c.match(/^\s*(?:([\s\S]+?)\s+as\s+)?(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(([\w\.]+)?\s*(|\s*[\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/),!d)throw a("iexp","Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.",c);if(!d[6]&&e)throw a("iexp","Expected expression in form of '_item_ as (_key_, _item_) in _ObjCollection_ [ track by _id_]' but got '{0}'.",c);return{itemName:d[4]||d[2],keyName:d[3],source:b(d[3]?d[6]:d[5]),sourceName:d[6],filters:d[7],trackByExp:d[8],modelMapper:b(d[1]||d[4]||d[2]),repeatExpression:function(a){var b=this.itemName+" in "+(a?"$group.items":"$select.items");return this.trackByExp&&(b+=" track by "+this.trackByExp),b}}},c.getGroupNgRepeatExpression=function(){return"$group in $select.groups"}}])}(),angular.module("ui.select").run(["$templateCache",function(a){a.put("bootstrap/choices.tpl.html",'<ul class="ui-select-choices ui-select-choices-content ui-select-dropdown dropdown-menu" role="listbox" ng-show="$select.items.length > 0"><li class="ui-select-choices-group" id="ui-select-choices-{{ $select.generatedId }}"><div class="divider" ng-show="$select.isGrouped && $index > 0"></div><div ng-show="$select.isGrouped" class="ui-select-choices-group-label dropdown-header" ng-bind="$group.name"></div><div id="ui-select-choices-row-{{ $select.generatedId }}-{{$index}}" class="ui-select-choices-row" ng-class="{active: $select.isActive(this), disabled: $select.isDisabled(this)}" role="option"><a href="javascript:void(0)" class="ui-select-choices-row-inner"></a></div></li></ul>'),a.put("bootstrap/match-multiple.tpl.html",'<span class="ui-select-match"><span ng-repeat="$item in $select.selected"><span class="ui-select-match-item btn btn-default btn-xs" tabindex="-1" type="button" ng-disabled="$select.disabled" ng-click="$selectMultiple.activeMatchIndex = $index;" ng-class="{\'btn-primary\':$selectMultiple.activeMatchIndex === $index, \'select-locked\':$select.isLocked(this, $index)}" ui-select-sort="$select.selected"><span class="close ui-select-match-close" ng-hide="$select.disabled" ng-click="$selectMultiple.removeChoice($index)">&nbsp;&times;</span> <span uis-transclude-append=""></span></span></span></span>'),a.put("bootstrap/match.tpl.html",'<div class="ui-select-match" ng-hide="$select.open" ng-disabled="$select.disabled" ng-class="{\'btn-default-focus\':$select.focus}"><span tabindex="-1" class="btn btn-default form-control ui-select-toggle" aria-label="{{ $select.baseTitle }} activate" ng-disabled="$select.disabled" ng-click="$select.activate()" style="outline: 0;"><span ng-show="$select.isEmpty()" class="ui-select-placeholder text-muted">{{$select.placeholder}}</span> <span ng-hide="$select.isEmpty()" class="ui-select-match-text pull-left" ng-class="{\'ui-select-allow-clear\': $select.allowClear && !$select.isEmpty()}" ng-transclude=""></span> <i class="caret pull-right" ng-click="$select.toggle($event)"></i> <a ng-show="$select.allowClear && !$select.isEmpty()" aria-label="{{ $select.baseTitle }} clear" style="margin-right: 10px" ng-click="$select.clear($event)" class="btn btn-xs btn-link pull-right"><i class="glyphicon glyphicon-remove" aria-hidden="true"></i></a></span></div>'),a.put("bootstrap/select-multiple.tpl.html",'<div class="ui-select-container ui-select-multiple ui-select-bootstrap dropdown form-control" ng-class="{open: $select.open}"><div><div class="ui-select-match"></div><input type="text" autocomplete="false" autocorrect="off" autocapitalize="off" spellcheck="false" class="ui-select-search input-xs" placeholder="{{$selectMultiple.getPlaceholder()}}" ng-disabled="$select.disabled" ng-hide="$select.disabled" ng-click="$select.activate()" ng-model="$select.search" role="combobox" aria-label="{{ $select.baseTitle }}" ondrop="return false;"></div><div class="ui-select-choices"></div></div>'),a.put("bootstrap/select.tpl.html",'<div class="ui-select-container ui-select-bootstrap dropdown" ng-class="{open: $select.open}"><div class="ui-select-match"></div><input type="text" autocomplete="false" tabindex="-1" aria-expanded="true" aria-label="{{ $select.baseTitle }}" aria-owns="ui-select-choices-{{ $select.generatedId }}" aria-activedescendant="ui-select-choices-row-{{ $select.generatedId }}-{{ $select.activeIndex }}" class="form-control ui-select-search" placeholder="{{$select.placeholder}}" ng-model="$select.search" ng-show="$select.searchEnabled && $select.open"><div class="ui-select-choices"></div></div>'),a.put("selectize/choices.tpl.html",'<div ng-show="$select.open" class="ui-select-choices ui-select-dropdown selectize-dropdown single"><div class="ui-select-choices-content selectize-dropdown-content"><div class="ui-select-choices-group optgroup" role="listbox"><div ng-show="$select.isGrouped" class="ui-select-choices-group-label optgroup-header" ng-bind="$group.name"></div><div role="option" class="ui-select-choices-row" ng-class="{active: $select.isActive(this), disabled: $select.isDisabled(this)}"><div class="option ui-select-choices-row-inner" data-selectable=""></div></div></div></div></div>'),a.put("selectize/match.tpl.html",'<div ng-hide="($select.open || $select.isEmpty())" class="ui-select-match" ng-transclude=""></div>'),a.put("selectize/select.tpl.html",'<div class="ui-select-container selectize-control single" ng-class="{\'open\': $select.open}"><div class="selectize-input" ng-class="{\'focus\': $select.open, \'disabled\': $select.disabled, \'selectize-focus\' : $select.focus}" ng-click="$select.activate()"><div class="ui-select-match"></div><input type="text" autocomplete="false" tabindex="-1" class="ui-select-search ui-select-toggle" ng-click="$select.toggle($event)" placeholder="{{$select.placeholder}}" ng-model="$select.search" ng-hide="!$select.searchEnabled || ($select.selected && !$select.open)" ng-disabled="$select.disabled" aria-label="{{ $select.baseTitle }}"></div><div class="ui-select-choices"></div></div>'),a.put("select2/choices.tpl.html",'<ul class="ui-select-choices ui-select-choices-content select2-results"><li class="ui-select-choices-group" ng-class="{\'select2-result-with-children\': $select.choiceGrouped($group) }"><div ng-show="$select.choiceGrouped($group)" class="ui-select-choices-group-label select2-result-label" ng-bind="$group.name"></div><ul role="listbox" id="ui-select-choices-{{ $select.generatedId }}" ng-class="{\'select2-result-sub\': $select.choiceGrouped($group), \'select2-result-single\': !$select.choiceGrouped($group) }"><li role="option" id="ui-select-choices-row-{{ $select.generatedId }}-{{$index}}" class="ui-select-choices-row" ng-class="{\'select2-highlighted\': $select.isActive(this), \'select2-disabled\': $select.isDisabled(this)}"><div class="select2-result-label ui-select-choices-row-inner"></div></li></ul></li></ul>'),a.put("select2/match-multiple.tpl.html",'<span class="ui-select-match"><li class="ui-select-match-item select2-search-choice" ng-repeat="$item in $select.selected" ng-class="{\'select2-search-choice-focus\':$selectMultiple.activeMatchIndex === $index, \'select2-locked\':$select.isLocked(this, $index)}" ui-select-sort="$select.selected"><span uis-transclude-append=""></span> <a href="javascript:;" class="ui-select-match-close select2-search-choice-close" ng-click="$selectMultiple.removeChoice($index)" tabindex="-1"></a></li></span>'),a.put("select2/match.tpl.html",'<a class="select2-choice ui-select-match" ng-class="{\'select2-default\': $select.isEmpty()}" ng-click="$select.toggle($event)" aria-label="{{ $select.baseTitle }} select"><span ng-show="$select.isEmpty()" class="select2-chosen">{{$select.placeholder}}</span> <span ng-hide="$select.isEmpty()" class="select2-chosen" ng-transclude=""></span> <abbr ng-if="$select.allowClear && !$select.isEmpty()" class="select2-search-choice-close" ng-click="$select.clear($event)"></abbr> <span class="select2-arrow ui-select-toggle"><b></b></span></a>'),a.put("select2/select-multiple.tpl.html",'<div class="ui-select-container ui-select-multiple select2 select2-container select2-container-multi" ng-class="{\'select2-container-active select2-dropdown-open open\': $select.open, \'select2-container-disabled\': $select.disabled}"><ul class="select2-choices"><span class="ui-select-match"></span><li class="select2-search-field"><input type="text" autocomplete="false" autocorrect="off" autocapitalize="off" spellcheck="false" role="combobox" aria-expanded="true" aria-owns="ui-select-choices-{{ $select.generatedId }}" aria-label="{{ $select.baseTitle }}" aria-activedescendant="ui-select-choices-row-{{ $select.generatedId }}-{{ $select.activeIndex }}" class="select2-input ui-select-search" placeholder="{{$selectMultiple.getPlaceholder()}}" ng-disabled="$select.disabled" ng-hide="$select.disabled" ng-model="$select.search" ng-click="$select.activate()" style="width: 34px;" ondrop="return false;"></li></ul><div class="ui-select-dropdown select2-drop select2-with-searchbox select2-drop-active" ng-class="{\'select2-display-none\': !$select.open}"><div class="ui-select-choices"></div></div></div>'),a.put("select2/select.tpl.html",'<div class="ui-select-container select2 select2-container" ng-class="{\'select2-container-active select2-dropdown-open open\': $select.open, \'select2-container-disabled\': $select.disabled, \'select2-container-active\': $select.focus, \'select2-allowclear\': $select.allowClear && !$select.isEmpty()}"><div class="ui-select-match"></div><div class="ui-select-dropdown select2-drop select2-with-searchbox select2-drop-active" ng-class="{\'select2-display-none\': !$select.open}"><div class="select2-search" ng-show="$select.searchEnabled"><input type="text" autocomplete="false" autocorrect="false" autocapitalize="off" spellcheck="false" role="combobox" aria-expanded="true" aria-owns="ui-select-choices-{{ $select.generatedId }}" aria-label="{{ $select.baseTitle }}" aria-activedescendant="ui-select-choices-row-{{ $select.generatedId }}-{{ $select.activeIndex }}" class="ui-select-search select2-input" ng-model="$select.search"></div><div class="ui-select-choices"></div></div></div>')}]),function(){window.WebComponents=window.WebComponents||{flags:{}};var a="webcomponents.js",b=document.querySelector('script[src*="'+a+'"]'),c={};if(!c.noOpts){if(location.search.slice(1).split("&").forEach(function(a){var b,d=a.split("=");d[0]&&(b=d[0].match(/wc-(.+)/))&&(c[b[1]]=d[1]||!0)}),b)for(var d,e=0;d=b.attributes[e];e++)"src"!==d.name&&(c[d.name]=d.value||!0);if(c.log&&c.log.split){var f=c.log.split(",");c.log={},f.forEach(function(a){c.log[a]=!0})}else c.log={}}c.shadow=c.shadow||c.shadowdom||c.polyfill,"native"===c.shadow?c.shadow=!1:c.shadow=c.shadow||!HTMLElement.prototype.createShadowRoot,c.register&&(window.CustomElements=window.CustomElements||{flags:{}},window.CustomElements.flags.register=c.register),WebComponents.flags=c}(),WebComponents.flags.shadow&&("undefined"==typeof WeakMap&&!function(){var a=Object.defineProperty,b=Date.now()%1e9,c=function(){this.name="__st"+(1e9*Math.random()>>>0)+(b++ +"__")};c.prototype={set:function(b,c){var d=b[this.name];return d&&d[0]===b?d[1]=c:a(b,this.name,{value:[b,c],writable:!0}),this},get:function(a){var b;return(b=a[this.name])&&b[0]===a?b[1]:void 0},"delete":function(a){var b=a[this.name];return b&&b[0]===a?(b[0]=b[1]=void 0,!0):!1},has:function(a){var b=a[this.name];return b?b[0]===a:!1}},window.WeakMap=c}(),window.ShadowDOMPolyfill={},function(a){"use strict";function b(){if("undefined"!=typeof chrome&&chrome.app&&chrome.app.runtime)return!1;if(navigator.getDeviceStorage)return!1;try{var a=new Function("return true;");return a()}catch(b){return!1}}function c(a){if(!a)throw new Error("Assertion failed")}function d(a,b){for(var c=N(b),d=0;d<c.length;d++){var e=c[d];M(a,e,O(b,e))}return a}function e(a,b){for(var c=N(b),d=0;d<c.length;d++){var e=c[d];switch(e){case"arguments":case"caller":case"length":case"name":case"prototype":case"toString":continue}M(a,e,O(b,e))}return a}function f(a,b){for(var c=0;c<b.length;c++)if(b[c]in a)return b[c]}function g(a,b,c){P.value=c,M(a,b,P)}function h(a,b){var c=a.__proto__||Object.getPrototypeOf(a);if(Q)try{N(c)}catch(d){c=c.__proto__}var e=I.get(c);if(e)return e;var f=h(c),g=v(f);return s(c,g,b),g}function i(a,b){q(a,b,!0)}function j(a,b){q(b,a,!1)}function k(a){return/^on[a-z]+$/.test(a)}function l(a){return/^[a-zA-Z_$][a-zA-Z_$0-9]*$/.test(a)}function m(a){return L&&l(a)?new Function("return this.__impl4cf1e782hg__."+a):function(){return this.__impl4cf1e782hg__[a]}}function n(a){return L&&l(a)?new Function("v","this.__impl4cf1e782hg__."+a+" = v"):function(b){this.__impl4cf1e782hg__[a]=b}}function o(a){return L&&l(a)?new Function("return this.__impl4cf1e782hg__."+a+".apply(this.__impl4cf1e782hg__, arguments)"):function(){return this.__impl4cf1e782hg__[a].apply(this.__impl4cf1e782hg__,arguments)}}function p(a,b){try{return Object.getOwnPropertyDescriptor(a,b)}catch(c){return R}}function q(b,c,d,e){for(var f=N(b),g=0;g<f.length;g++){var h=f[g];if("polymerBlackList_"!==h&&!(h in c||b.polymerBlackList_&&b.polymerBlackList_[h])){Q&&b.__lookupGetter__(h);var i,j,l=p(b,h);if("function"!=typeof l.value){var q=k(h);i=q?a.getEventHandlerGetter(h):m(h),(l.writable||l.set||S)&&(j=q?a.getEventHandlerSetter(h):n(h));var r=S||l.configurable;M(c,h,{get:i,set:j,configurable:r,enumerable:l.enumerable})}else d&&(c[h]=o(h))}}}function r(a,b,c){if(null!=a){var d=a.prototype;s(d,b,c),e(b,a)}}function s(a,b,d){var e=b.prototype;c(void 0===I.get(a)),I.set(a,b),J.set(e,a),i(a,e),d&&j(e,d),g(e,"constructor",b),b.prototype=e}function t(a,b){return I.get(b.prototype)===a}function u(a){var b=Object.getPrototypeOf(a),c=h(b),d=v(c);return s(b,d,a),d}function v(a){function b(b){a.call(this,b)}var c=Object.create(a.prototype);return c.constructor=b,b.prototype=c,b}function w(a){return a&&a.__impl4cf1e782hg__}function x(a){return!w(a)}function y(a){if(null===a)return null;c(x(a));var b=a.__wrapper8e3dd93a60__;return null!=b?b:a.__wrapper8e3dd93a60__=new(h(a,a))(a)}function z(a){return null===a?null:(c(w(a)),a.__impl4cf1e782hg__)}function A(a){return a.__impl4cf1e782hg__}function B(a,b){b.__impl4cf1e782hg__=a,a.__wrapper8e3dd93a60__=b}function C(a){return a&&w(a)?z(a):a}function D(a){return a&&!w(a)?y(a):a}function E(a,b){null!==b&&(c(x(a)),c(void 0===b||w(b)),a.__wrapper8e3dd93a60__=b)}function F(a,b,c){T.get=c,M(a.prototype,b,T)}function G(a,b){F(a,b,function(){return y(this.__impl4cf1e782hg__[b])})}function H(a,b){a.forEach(function(a){b.forEach(function(b){a.prototype[b]=function(){var a=D(this);return a[b].apply(a,arguments)}})})}var I=new WeakMap,J=new WeakMap,K=Object.create(null),L=b(),M=Object.defineProperty,N=Object.getOwnPropertyNames,O=Object.getOwnPropertyDescriptor,P={value:void 0,configurable:!0,enumerable:!1,writable:!0};N(window);var Q=/Firefox/.test(navigator.userAgent),R={get:function(){},set:function(a){},configurable:!0,enumerable:!0},S=function(){var a=Object.getOwnPropertyDescriptor(Node.prototype,"nodeType");return a&&!a.get&&!a.set}(),T={get:void 0,configurable:!0,enumerable:!0};a.assert=c,a.constructorTable=I,a.defineGetter=F,a.defineWrapGetter=G,a.forwardMethodsToWrapper=H,a.isIdentifierName=l,a.isWrapper=w,a.isWrapperFor=t,a.mixin=d,a.nativePrototypeTable=J,a.oneOf=f,a.registerObject=u,a.registerWrapper=r,a.rewrap=E,a.setWrapper=B,a.unsafeUnwrap=A,a.unwrap=z,a.unwrapIfNeeded=C,a.wrap=y,a.wrapIfNeeded=D,a.wrappers=K}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a,b,c){return{index:a,removed:b,addedCount:c}}function c(){}var d=0,e=1,f=2,g=3;c.prototype={calcEditDistances:function(a,b,c,d,e,f){for(var g=f-e+1,h=c-b+1,i=new Array(g),j=0;g>j;j++)i[j]=new Array(h),i[j][0]=j;for(var k=0;h>k;k++)i[0][k]=k;for(var j=1;g>j;j++)for(var k=1;h>k;k++)if(this.equals(a[b+k-1],d[e+j-1]))i[j][k]=i[j-1][k-1];else{var l=i[j-1][k]+1,m=i[j][k-1]+1;i[j][k]=m>l?l:m}return i},spliceOperationsFromEditDistances:function(a){for(var b=a.length-1,c=a[0].length-1,h=a[b][c],i=[];b>0||c>0;)if(0!=b)if(0!=c){var j,k=a[b-1][c-1],l=a[b-1][c],m=a[b][c-1];j=m>l?k>l?l:k:k>m?m:k,j==k?(k==h?i.push(d):(i.push(e),h=k),b--,c--):j==l?(i.push(g),b--,h=l):(i.push(f),c--,h=m)}else i.push(g),b--;else i.push(f),c--;return i.reverse(),i},calcSplices:function(a,c,h,i,j,k){var l=0,m=0,n=Math.min(h-c,k-j);if(0==c&&0==j&&(l=this.sharedPrefix(a,i,n)),h==a.length&&k==i.length&&(m=this.sharedSuffix(a,i,n-l)),c+=l,j+=l,h-=m,k-=m,h-c==0&&k-j==0)return[];if(c==h){for(var o=b(c,[],0);k>j;)o.removed.push(i[j++]);return[o]}if(j==k)return[b(c,[],h-c)];for(var p=this.spliceOperationsFromEditDistances(this.calcEditDistances(a,c,h,i,j,k)),o=void 0,q=[],r=c,s=j,t=0;t<p.length;t++)switch(p[t]){case d:o&&(q.push(o),o=void 0),r++,s++;break;case e:o||(o=b(r,[],0)),o.addedCount++,r++,o.removed.push(i[s]),s++;break;case f:o||(o=b(r,[],0)),o.addedCount++,r++;break;case g:o||(o=b(r,[],0)),o.removed.push(i[s]),s++}return o&&q.push(o),q},sharedPrefix:function(a,b,c){for(var d=0;c>d;d++)if(!this.equals(a[d],b[d]))return d;return c},sharedSuffix:function(a,b,c){for(var d=a.length,e=b.length,f=0;c>f&&this.equals(a[--d],b[--e]);)f++;return f},calculateSplices:function(a,b){return this.calcSplices(a,0,a.length,b,0,b.length)},equals:function(a,b){return a===b}},a.ArraySplice=c}(window.ShadowDOMPolyfill),function(a){"use strict";function b(){g=!1;var a=f.slice(0);f=[];for(var b=0;b<a.length;b++)(0,a[b])()}function c(a){f.push(a),g||(g=!0,d(b,0))}var d,e=window.MutationObserver,f=[],g=!1;if(e){var h=1,i=new e(b),j=document.createTextNode(h);i.observe(j,{characterData:!0}),d=function(){h=(h+1)%2,j.data=h}}else d=window.setTimeout;a.setEndOfMicrotask=c}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){a.scheduled_||(a.scheduled_=!0,o.push(a),p||(k(c),p=!0))}function c(){for(p=!1;o.length;){var a=o;o=[],a.sort(function(a,b){return a.uid_-b.uid_});for(var b=0;b<a.length;b++){var c=a[b];c.scheduled_=!1;var d=c.takeRecords();f(c),d.length&&c.callback_(d,c)}}}function d(a,b){this.type=a,this.target=b,this.addedNodes=new m.NodeList,this.removedNodes=new m.NodeList,this.previousSibling=null,this.nextSibling=null,this.attributeName=null,this.attributeNamespace=null,this.oldValue=null}function e(a,b){for(;a;a=a.parentNode){var c=n.get(a);if(c)for(var d=0;d<c.length;d++){var e=c[d];e.options.subtree&&e.addTransientObserver(b)}}}function f(a){for(var b=0;b<a.nodes_.length;b++){var c=a.nodes_[b],d=n.get(c);if(!d)return;for(var e=0;e<d.length;e++){var f=d[e];f.observer===a&&f.removeTransientObservers()}}}function g(a,c,e){for(var f=Object.create(null),g=Object.create(null),h=a;h;h=h.parentNode){var i=n.get(h);if(i)for(var j=0;j<i.length;j++){var k=i[j],l=k.options;if((h===a||l.subtree)&&("attributes"!==c||l.attributes)&&("attributes"!==c||!l.attributeFilter||null===e.namespace&&-1!==l.attributeFilter.indexOf(e.name))&&("characterData"!==c||l.characterData)&&("childList"!==c||l.childList)){var m=k.observer;f[m.uid_]=m,("attributes"===c&&l.attributeOldValue||"characterData"===c&&l.characterDataOldValue)&&(g[m.uid_]=e.oldValue)}}}for(var o in f){var m=f[o],p=new d(c,a);"name"in e&&"namespace"in e&&(p.attributeName=e.name,p.attributeNamespace=e.namespace),e.addedNodes&&(p.addedNodes=e.addedNodes),e.removedNodes&&(p.removedNodes=e.removedNodes),e.previousSibling&&(p.previousSibling=e.previousSibling),e.nextSibling&&(p.nextSibling=e.nextSibling),void 0!==g[o]&&(p.oldValue=g[o]),b(m),m.records_.push(p)}}function h(a){if(this.childList=!!a.childList,this.subtree=!!a.subtree,"attributes"in a||!("attributeOldValue"in a||"attributeFilter"in a)?this.attributes=!!a.attributes:this.attributes=!0,"characterDataOldValue"in a&&!("characterData"in a)?this.characterData=!0:this.characterData=!!a.characterData,!this.attributes&&(a.attributeOldValue||"attributeFilter"in a)||!this.characterData&&a.characterDataOldValue)throw new TypeError;if(this.characterData=!!a.characterData,this.attributeOldValue=!!a.attributeOldValue,this.characterDataOldValue=!!a.characterDataOldValue,"attributeFilter"in a){if(null==a.attributeFilter||"object"!=typeof a.attributeFilter)throw new TypeError;this.attributeFilter=q.call(a.attributeFilter)}else this.attributeFilter=null}function i(a){this.callback_=a,this.nodes_=[],this.records_=[],this.uid_=++r,this.scheduled_=!1}function j(a,b,c){this.observer=a,this.target=b,this.options=c,this.transientObservedNodes=[]}var k=a.setEndOfMicrotask,l=a.wrapIfNeeded,m=a.wrappers,n=new WeakMap,o=[],p=!1,q=Array.prototype.slice,r=0;i.prototype={constructor:i,observe:function(a,b){a=l(a);var c,d=new h(b),e=n.get(a);e||n.set(a,e=[]);for(var f=0;f<e.length;f++)e[f].observer===this&&(c=e[f],c.removeTransientObservers(),c.options=d);c||(c=new j(this,a,d),e.push(c),this.nodes_.push(a))},disconnect:function(){this.nodes_.forEach(function(a){for(var b=n.get(a),c=0;c<b.length;c++){var d=b[c];if(d.observer===this){b.splice(c,1);break}}},this),this.records_=[]},takeRecords:function(){var a=this.records_;return this.records_=[],a}},j.prototype={addTransientObserver:function(a){if(a!==this.target){b(this.observer),this.transientObservedNodes.push(a);var c=n.get(a);c||n.set(a,c=[]),c.push(this)}},removeTransientObservers:function(){var a=this.transientObservedNodes;this.transientObservedNodes=[];for(var b=0;b<a.length;b++)for(var c=a[b],d=n.get(c),e=0;e<d.length;e++)if(d[e]===this){d.splice(e,1);break}}},a.enqueueMutation=g,a.registerTransientObservers=e,a.wrappers.MutationObserver=i,a.wrappers.MutationRecord=d}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a,b){this.root=a,this.parent=b}function c(a,b){if(a.treeScope_!==b){a.treeScope_=b;for(var d=a.shadowRoot;d;d=d.olderShadowRoot)d.treeScope_.parent=b;for(var e=a.firstChild;e;e=e.nextSibling)c(e,b)}}function d(c){if(c instanceof a.wrappers.Window,c.treeScope_)return c.treeScope_;var e,f=c.parentNode;return e=f?d(f):new b(c,null),c.treeScope_=e}b.prototype={get renderer(){return this.root instanceof a.wrappers.ShadowRoot?a.getRendererForHost(this.root.host):null},contains:function(a){for(;a;a=a.parent)if(a===this)return!0;return!1}},a.TreeScope=b,a.getTreeScope=d,a.setTreeScope=c}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a instanceof T.ShadowRoot}function c(a){return M(a).root}function d(a,d){var h=[],i=a;for(h.push(i);i;){var j=g(i);if(j&&j.length>0){for(var k=0;k<j.length;k++){var m=j[k];if(f(m)){var n=c(m),o=n.olderShadowRoot;o&&h.push(o)}h.push(m)}i=j[j.length-1]}else if(b(i)){if(l(a,i)&&e(d))break;i=i.host,h.push(i)}else i=i.parentNode,i&&h.push(i)}return h}function e(a){if(!a)return!1;switch(a.type){case"abort":case"error":case"select":case"change":case"load":case"reset":case"resize":case"scroll":case"selectstart":return!0}return!1}function f(a){return a instanceof HTMLShadowElement}function g(b){return a.getDestinationInsertionPoints(b)}function h(a,b){if(0===a.length)return b;b instanceof T.Window&&(b=b.document);for(var c=M(b),d=a[0],e=M(d),f=j(c,e),g=0;g<a.length;g++){var h=a[g];if(M(h)===f)return h}return a[a.length-1]}function i(a){for(var b=[];a;a=a.parent)b.push(a);return b}function j(a,b){for(var c=i(a),d=i(b),e=null;c.length>0&&d.length>0;){var f=c.pop(),g=d.pop();if(f!==g)break;e=f}return e}function k(a,b,c){b instanceof T.Window&&(b=b.document);var e,f=M(b),g=M(c),h=d(c,a),e=j(f,g);e||(e=g.root);for(var i=e;i;i=i.parent)for(var k=0;k<h.length;k++){var l=h[k];if(M(l)===i)return l}return null}function l(a,b){return M(a)===M(b)}function m(a){if(!V.get(a)&&(V.set(a,!0),o(S(a),S(a.target)),K)){var b=K;throw K=null,b}}function n(a){switch(a.type){case"load":case"beforeunload":case"unload":return!0}return!1}function o(b,c){if(W.get(b))throw new Error("InvalidStateError");W.set(b,!0),a.renderAllPending();var e,f,g;if(n(b)&&!b.bubbles){var h=c;h instanceof T.Document&&(g=h.defaultView)&&(f=h,e=[])}if(!e)if(c instanceof T.Window)g=c,e=[];else if(e=d(c,b),!n(b)){var h=e[e.length-1];h instanceof T.Document&&(g=h.defaultView)}return ca.set(b,e),p(b,e,g,f)&&q(b,e,g,f)&&r(b,e,g,f),$.set(b,da),Y["delete"](b,null),W["delete"](b),b.defaultPrevented}function p(a,b,c,d){var e=ea;if(c&&!s(c,a,e,b,d))return!1;for(var f=b.length-1;f>0;f--)if(!s(b[f],a,e,b,d))return!1;return!0}function q(a,b,c,d){var e=fa,f=b[0]||c;return s(f,a,e,b,d)}function r(a,b,c,d){for(var e=ga,f=1;f<b.length;f++)if(!s(b[f],a,e,b,d))return;c&&b.length>0&&s(c,a,e,b,d)}function s(a,b,c,d,e){var f=U.get(a);if(!f)return!0;var g=e||h(d,a);if(g===a){if(c===ea)return!0;
+c===ga&&(c=fa)}else if(c===ga&&!b.bubbles)return!0;if("relatedTarget"in b){var i=R(b),j=i.relatedTarget;if(j){if(j instanceof Object&&j.addEventListener){var l=S(j),m=k(b,a,l);if(m===g)return!0}else m=null;Z.set(b,m)}}$.set(b,c);var n=b.type,o=!1;X.set(b,g),Y.set(b,a),f.depth++;for(var p=0,q=f.length;q>p;p++){var r=f[p];if(r.removed)o=!0;else if(!(r.type!==n||!r.capture&&c===ea||r.capture&&c===ga))try{if("function"==typeof r.handler?r.handler.call(a,b):r.handler.handleEvent(b),aa.get(b))return!1}catch(s){K||(K=s)}}if(f.depth--,o&&0===f.depth){var t=f.slice();f.length=0;for(var p=0;p<t.length;p++)t[p].removed||f.push(t[p])}return!_.get(b)}function t(a,b,c){this.type=a,this.handler=b,this.capture=Boolean(c)}function u(a,b){if(!(a instanceof ha))return S(y(ha,"Event",a,b));var c=a;return ta||"beforeunload"!==c.type||this instanceof z?void P(c,this):new z(c)}function v(a){return a&&a.relatedTarget?Object.create(a,{relatedTarget:{value:R(a.relatedTarget)}}):a}function w(a,b,c){var d=window[a],e=function(b,c){return b instanceof d?void P(b,this):S(y(d,a,b,c))};if(e.prototype=Object.create(b.prototype),c&&N(e.prototype,c),d)try{O(d,e,new d("temp"))}catch(f){O(d,e,document.createEvent(a))}return e}function x(a,b){return function(){arguments[b]=R(arguments[b]);var c=R(this);c[a].apply(c,arguments)}}function y(a,b,c,d){if(ra)return new a(c,v(d));var e=R(document.createEvent(b)),f=qa[b],g=[c];return Object.keys(f).forEach(function(a){var b=null!=d&&a in d?d[a]:f[a];"relatedTarget"===a&&(b=R(b)),g.push(b)}),e["init"+b].apply(e,g),e}function z(a){u.call(this,a)}function A(a){return"function"==typeof a?!0:a&&a.handleEvent}function B(a){switch(a){case"DOMAttrModified":case"DOMAttributeNameChanged":case"DOMCharacterDataModified":case"DOMElementNameChanged":case"DOMNodeInserted":case"DOMNodeInsertedIntoDocument":case"DOMNodeRemoved":case"DOMNodeRemovedFromDocument":case"DOMSubtreeModified":return!0}return!1}function C(a){P(a,this)}function D(a){return a instanceof T.ShadowRoot&&(a=a.host),R(a)}function E(a,b){var c=U.get(a);if(c)for(var d=0;d<c.length;d++)if(!c[d].removed&&c[d].type===b)return!0;return!1}function F(a,b){for(var c=R(a);c;c=c.parentNode)if(E(S(c),b))return!0;return!1}function G(a){L(a,va)}function H(b,c,e,f){a.renderAllPending();var g=S(wa.call(Q(c),e,f));if(!g)return null;var i=d(g,null),j=i.lastIndexOf(b);return-1==j?null:(i=i.slice(0,j),h(i,b))}function I(a){return function(){var b=ba.get(this);return b&&b[a]&&b[a].value||null}}function J(a){var b=a.slice(2);return function(c){var d=ba.get(this);d||(d=Object.create(null),ba.set(this,d));var e=d[a];if(e&&this.removeEventListener(b,e.wrapped,!1),"function"==typeof c){var f=function(b){var d=c.call(this,b);d===!1?b.preventDefault():"onbeforeunload"===a&&"string"==typeof d&&(b.returnValue=d)};this.addEventListener(b,f,!1),d[a]={value:c,wrapped:f}}}}var K,L=a.forwardMethodsToWrapper,M=a.getTreeScope,N=a.mixin,O=a.registerWrapper,P=a.setWrapper,Q=a.unsafeUnwrap,R=a.unwrap,S=a.wrap,T=a.wrappers,U=(new WeakMap,new WeakMap),V=new WeakMap,W=new WeakMap,X=new WeakMap,Y=new WeakMap,Z=new WeakMap,$=new WeakMap,_=new WeakMap,aa=new WeakMap,ba=new WeakMap,ca=new WeakMap,da=0,ea=1,fa=2,ga=3;t.prototype={equals:function(a){return this.handler===a.handler&&this.type===a.type&&this.capture===a.capture},get removed(){return null===this.handler},remove:function(){this.handler=null}};var ha=window.Event;ha.prototype.polymerBlackList_={returnValue:!0,keyLocation:!0},u.prototype={get target(){return X.get(this)},get currentTarget(){return Y.get(this)},get eventPhase(){return $.get(this)},get path(){var a=ca.get(this);return a?a.slice():[]},stopPropagation:function(){_.set(this,!0)},stopImmediatePropagation:function(){_.set(this,!0),aa.set(this,!0)}};var ia=function(){var a=document.createEvent("Event");return a.initEvent("test",!0,!0),a.preventDefault(),a.defaultPrevented}();ia||(u.prototype.preventDefault=function(){this.cancelable&&(Q(this).preventDefault(),Object.defineProperty(this,"defaultPrevented",{get:function(){return!0},configurable:!0}))}),O(ha,u,document.createEvent("Event"));var ja=w("UIEvent",u),ka=w("CustomEvent",u),la={get relatedTarget(){var a=Z.get(this);return void 0!==a?a:S(R(this).relatedTarget)}},ma=N({initMouseEvent:x("initMouseEvent",14)},la),na=N({initFocusEvent:x("initFocusEvent",5)},la),oa=w("MouseEvent",ja,ma),pa=w("FocusEvent",ja,na),qa=Object.create(null),ra=function(){try{new window.FocusEvent("focus")}catch(a){return!1}return!0}();if(!ra){var sa=function(a,b,c){if(c){var d=qa[c];b=N(N({},d),b)}qa[a]=b};sa("Event",{bubbles:!1,cancelable:!1}),sa("CustomEvent",{detail:null},"Event"),sa("UIEvent",{view:null,detail:0},"Event"),sa("MouseEvent",{screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null},"UIEvent"),sa("FocusEvent",{relatedTarget:null},"UIEvent")}var ta=window.BeforeUnloadEvent;z.prototype=Object.create(u.prototype),N(z.prototype,{get returnValue(){return Q(this).returnValue},set returnValue(a){Q(this).returnValue=a}}),ta&&O(ta,z);var ua=window.EventTarget,va=["addEventListener","removeEventListener","dispatchEvent"];[Node,Window].forEach(function(a){var b=a.prototype;va.forEach(function(a){Object.defineProperty(b,a+"_",{value:b[a]})})}),C.prototype={addEventListener:function(a,b,c){if(A(b)&&!B(a)){var d=new t(a,b,c),e=U.get(this);if(e){for(var f=0;f<e.length;f++)if(d.equals(e[f]))return}else e=[],e.depth=0,U.set(this,e);e.push(d);var g=D(this);g.addEventListener_(a,m,!0)}},removeEventListener:function(a,b,c){c=Boolean(c);var d=U.get(this);if(d){for(var e=0,f=!1,g=0;g<d.length;g++)d[g].type===a&&d[g].capture===c&&(e++,d[g].handler===b&&(f=!0,d[g].remove()));if(f&&1===e){var h=D(this);h.removeEventListener_(a,m,!0)}}},dispatchEvent:function(b){var c=R(b),d=c.type;V.set(c,!1),a.renderAllPending();var e;F(this,d)||(e=function(){},this.addEventListener(d,e,!0));try{return R(this).dispatchEvent_(c)}finally{e&&this.removeEventListener(d,e,!0)}}},ua&&O(ua,C);var wa=document.elementFromPoint;a.elementFromPoint=H,a.getEventHandlerGetter=I,a.getEventHandlerSetter=J,a.wrapEventTargetMethods=G,a.wrappers.BeforeUnloadEvent=z,a.wrappers.CustomEvent=ka,a.wrappers.Event=u,a.wrappers.EventTarget=C,a.wrappers.FocusEvent=pa,a.wrappers.MouseEvent=oa,a.wrappers.UIEvent=ja}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a,b){Object.defineProperty(a,b,p)}function c(a){j(a,this)}function d(){this.length=0,b(this,"length")}function e(a){for(var b=new d,e=0;e<a.length;e++)b[e]=new c(a[e]);return b.length=e,b}function f(a){g.call(this,a)}var g=a.wrappers.UIEvent,h=a.mixin,i=a.registerWrapper,j=a.setWrapper,k=a.unsafeUnwrap,l=a.wrap,m=window.TouchEvent;if(m){var n;try{n=document.createEvent("TouchEvent")}catch(o){return}var p={enumerable:!1};c.prototype={get target(){return l(k(this).target)}};var q={configurable:!0,enumerable:!0,get:null};["clientX","clientY","screenX","screenY","pageX","pageY","identifier","webkitRadiusX","webkitRadiusY","webkitRotationAngle","webkitForce"].forEach(function(a){q.get=function(){return k(this)[a]},Object.defineProperty(c.prototype,a,q)}),d.prototype={item:function(a){return this[a]}},f.prototype=Object.create(g.prototype),h(f.prototype,{get touches(){return e(k(this).touches)},get targetTouches(){return e(k(this).targetTouches)},get changedTouches(){return e(k(this).changedTouches)},initTouchEvent:function(){throw new Error("Not implemented")}}),i(m,f,n),a.wrappers.Touch=c,a.wrappers.TouchEvent=f,a.wrappers.TouchList=d}}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a,b){Object.defineProperty(a,b,h)}function c(){this.length=0,b(this,"length")}function d(a){if(null==a)return a;for(var b=new c,d=0,e=a.length;e>d;d++)b[d]=g(a[d]);return b.length=e,b}function e(a,b){a.prototype[b]=function(){return d(f(this)[b].apply(f(this),arguments))}}var f=a.unsafeUnwrap,g=a.wrap,h={enumerable:!1};c.prototype={item:function(a){return this[a]}},b(c.prototype,"item"),a.wrappers.NodeList=c,a.addWrapNodeListMethod=e,a.wrapNodeList=d}(window.ShadowDOMPolyfill),function(a){"use strict";a.wrapHTMLCollection=a.wrapNodeList,a.wrappers.HTMLCollection=a.wrappers.NodeList}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){A(a instanceof w)}function c(a){var b=new y;return b[0]=a,b.length=1,b}function d(a,b,c){C(b,"childList",{removedNodes:c,previousSibling:a.previousSibling,nextSibling:a.nextSibling})}function e(a,b){C(a,"childList",{removedNodes:b})}function f(a,b,d,e){if(a instanceof DocumentFragment){var f=h(a);P=!0;for(var g=f.length-1;g>=0;g--)a.removeChild(f[g]),f[g].parentNode_=b;P=!1;for(var g=0;g<f.length;g++)f[g].previousSibling_=f[g-1]||d,f[g].nextSibling_=f[g+1]||e;return d&&(d.nextSibling_=f[0]),e&&(e.previousSibling_=f[f.length-1]),f}var f=c(a),i=a.parentNode;return i&&i.removeChild(a),a.parentNode_=b,a.previousSibling_=d,a.nextSibling_=e,d&&(d.nextSibling_=a),e&&(e.previousSibling_=a),f}function g(a){if(a instanceof DocumentFragment)return h(a);var b=c(a),e=a.parentNode;return e&&d(a,e,b),b}function h(a){for(var b=new y,c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b.length=c,e(a,b),b}function i(a){return a}function j(a,b){I(a,b),a.nodeIsInserted_()}function k(a,b){for(var c=D(b),d=0;d<a.length;d++)j(a[d],c)}function l(a){I(a,new z(a,null))}function m(a){for(var b=0;b<a.length;b++)l(a[b])}function n(a,b){var c=a.nodeType===w.DOCUMENT_NODE?a:a.ownerDocument;c!==b.ownerDocument&&c.adoptNode(b)}function o(b,c){if(c.length){var d=b.ownerDocument;if(d!==c[0].ownerDocument)for(var e=0;e<c.length;e++)a.adoptNodeNoRemove(c[e],d)}}function p(a,b){o(a,b);var c=b.length;if(1===c)return K(b[0]);for(var d=K(a.ownerDocument.createDocumentFragment()),e=0;c>e;e++)d.appendChild(K(b[e]));return d}function q(a){if(void 0!==a.firstChild_)for(var b=a.firstChild_;b;){var c=b;b=b.nextSibling_,c.parentNode_=c.previousSibling_=c.nextSibling_=void 0}a.firstChild_=a.lastChild_=void 0}function r(a){if(a.invalidateShadowRenderer()){for(var b=a.firstChild;b;){A(b.parentNode===a);var c=b.nextSibling,d=K(b),e=d.parentNode;e&&X.call(e,d),b.previousSibling_=b.nextSibling_=b.parentNode_=null,b=c}a.firstChild_=a.lastChild_=null}else for(var c,f=K(a),g=f.firstChild;g;)c=g.nextSibling,X.call(f,g),g=c}function s(a){var b=a.parentNode;return b&&b.invalidateShadowRenderer()}function t(a){for(var b,c=0;c<a.length;c++)b=a[c],b.parentNode.removeChild(b)}function u(a,b,c){var d;if(d=M(c?Q.call(c,J(a),!1):R.call(J(a),!1)),b){for(var e=a.firstChild;e;e=e.nextSibling)d.appendChild(u(e,!0,c));if(a instanceof O.HTMLTemplateElement)for(var f=d.content,e=a.content.firstChild;e;e=e.nextSibling)f.appendChild(u(e,!0,c))}return d}function v(a,b){if(!b||D(a)!==D(b))return!1;for(var c=b;c;c=c.parentNode)if(c===a)return!0;return!1}function w(a){A(a instanceof S),x.call(this,a),this.parentNode_=void 0,this.firstChild_=void 0,this.lastChild_=void 0,this.nextSibling_=void 0,this.previousSibling_=void 0,this.treeScope_=void 0}var x=a.wrappers.EventTarget,y=a.wrappers.NodeList,z=a.TreeScope,A=a.assert,B=a.defineWrapGetter,C=a.enqueueMutation,D=a.getTreeScope,E=a.isWrapper,F=a.mixin,G=a.registerTransientObservers,H=a.registerWrapper,I=a.setTreeScope,J=a.unsafeUnwrap,K=a.unwrap,L=a.unwrapIfNeeded,M=a.wrap,N=a.wrapIfNeeded,O=a.wrappers,P=!1,Q=document.importNode,R=window.Node.prototype.cloneNode,S=window.Node,T=window.DocumentFragment,U=(S.prototype.appendChild,S.prototype.compareDocumentPosition),V=S.prototype.isEqualNode,W=S.prototype.insertBefore,X=S.prototype.removeChild,Y=S.prototype.replaceChild,Z=/Trident|Edge/.test(navigator.userAgent),$=Z?function(a,b){try{X.call(a,b)}catch(c){if(!(a instanceof T))throw c}}:function(a,b){X.call(a,b)};w.prototype=Object.create(x.prototype),F(w.prototype,{appendChild:function(a){return this.insertBefore(a,null)},insertBefore:function(a,c){b(a);var d;c?E(c)?d=K(c):(d=c,c=M(d)):(c=null,d=null),c&&A(c.parentNode===this);var e,h=c?c.previousSibling:this.lastChild,i=!this.invalidateShadowRenderer()&&!s(a);if(e=i?g(a):f(a,this,h,c),i)n(this,a),q(this),W.call(J(this),K(a),d);else{h||(this.firstChild_=e[0]),c||(this.lastChild_=e[e.length-1],void 0===this.firstChild_&&(this.firstChild_=this.firstChild));var j=d?d.parentNode:J(this);j?W.call(j,p(this,e),d):o(this,e)}return C(this,"childList",{addedNodes:e,nextSibling:c,previousSibling:h}),k(e,this),a},removeChild:function(a){if(b(a),a.parentNode!==this){for(var d=!1,e=(this.childNodes,this.firstChild);e;e=e.nextSibling)if(e===a){d=!0;break}if(!d)throw new Error("NotFoundError")}var f=K(a),g=a.nextSibling,h=a.previousSibling;if(this.invalidateShadowRenderer()){var i=this.firstChild,j=this.lastChild,k=f.parentNode;k&&$(k,f),i===a&&(this.firstChild_=g),j===a&&(this.lastChild_=h),h&&(h.nextSibling_=g),g&&(g.previousSibling_=h),a.previousSibling_=a.nextSibling_=a.parentNode_=void 0}else q(this),$(J(this),f);return P||C(this,"childList",{removedNodes:c(a),nextSibling:g,previousSibling:h}),G(this,a),a},replaceChild:function(a,d){b(a);var e;if(E(d)?e=K(d):(e=d,d=M(e)),d.parentNode!==this)throw new Error("NotFoundError");var h,i=d.nextSibling,j=d.previousSibling,m=!this.invalidateShadowRenderer()&&!s(a);return m?h=g(a):(i===a&&(i=a.nextSibling),h=f(a,this,j,i)),m?(n(this,a),q(this),Y.call(J(this),K(a),e)):(this.firstChild===d&&(this.firstChild_=h[0]),this.lastChild===d&&(this.lastChild_=h[h.length-1]),d.previousSibling_=d.nextSibling_=d.parentNode_=void 0,e.parentNode&&Y.call(e.parentNode,p(this,h),e)),C(this,"childList",{addedNodes:h,removedNodes:c(d),nextSibling:i,previousSibling:j}),l(d),k(h,this),d},nodeIsInserted_:function(){for(var a=this.firstChild;a;a=a.nextSibling)a.nodeIsInserted_()},hasChildNodes:function(){return null!==this.firstChild},get parentNode(){return void 0!==this.parentNode_?this.parentNode_:M(J(this).parentNode)},get firstChild(){return void 0!==this.firstChild_?this.firstChild_:M(J(this).firstChild)},get lastChild(){return void 0!==this.lastChild_?this.lastChild_:M(J(this).lastChild)},get nextSibling(){return void 0!==this.nextSibling_?this.nextSibling_:M(J(this).nextSibling)},get previousSibling(){return void 0!==this.previousSibling_?this.previousSibling_:M(J(this).previousSibling)},get parentElement(){for(var a=this.parentNode;a&&a.nodeType!==w.ELEMENT_NODE;)a=a.parentNode;return a},get textContent(){for(var a="",b=this.firstChild;b;b=b.nextSibling)b.nodeType!=w.COMMENT_NODE&&(a+=b.textContent);return a},set textContent(a){null==a&&(a="");var b=i(this.childNodes);if(this.invalidateShadowRenderer()){if(r(this),""!==a){var c=J(this).ownerDocument.createTextNode(a);this.appendChild(c)}}else q(this),J(this).textContent=a;var d=i(this.childNodes);C(this,"childList",{addedNodes:d,removedNodes:b}),m(b),k(d,this)},get childNodes(){for(var a=new y,b=0,c=this.firstChild;c;c=c.nextSibling)a[b++]=c;return a.length=b,a},cloneNode:function(a){return u(this,a)},contains:function(a){return v(this,N(a))},compareDocumentPosition:function(a){return U.call(J(this),L(a))},isEqualNode:function(a){return V.call(J(this),L(a))},normalize:function(){for(var a,b,c=i(this.childNodes),d=[],e="",f=0;f<c.length;f++)b=c[f],b.nodeType===w.TEXT_NODE?a||b.data.length?a?(e+=b.data,d.push(b)):a=b:this.removeChild(b):(a&&d.length&&(a.data+=e,t(d)),d=[],e="",a=null,b.childNodes.length&&b.normalize());a&&d.length&&(a.data+=e,t(d))}}),B(w,"ownerDocument"),H(S,w,document.createDocumentFragment()),delete w.prototype.querySelector,delete w.prototype.querySelectorAll,w.prototype=F(Object.create(x.prototype),w.prototype),a.cloneNode=u,a.nodeWasAdded=j,a.nodeWasRemoved=l,a.nodesWereAdded=k,a.nodesWereRemoved=m,a.originalInsertBefore=W,a.originalRemoveChild=X,a.snapshotNodeList=i,a.wrappers.Node=w}(window.ShadowDOMPolyfill),function(a){"use strict";function b(b,c,d,e){for(var f=null,g=null,h=0,i=b.length;i>h;h++)f=t(b[h]),!e&&(g=r(f).root)&&g instanceof a.wrappers.ShadowRoot||(d[c++]=f);return c}function c(a){return String(a).replace(/\/deep\/|::shadow|>>>/g," ")}function d(a){return String(a).replace(/:host\(([^\s]+)\)/g,"$1").replace(/([^\s]):host/g,"$1").replace(":host","*").replace(/\^|\/shadow\/|\/shadow-deep\/|::shadow|\/deep\/|::content|>>>/g," ")}function e(a,b){for(var c,d=a.firstElementChild;d;){if(d.matches(b))return d;if(c=e(d,b))return c;d=d.nextElementSibling}return null}function f(a,b){return a.matches(b)}function g(a,b,c){var d=a.localName;return d===b||d===c&&a.namespaceURI===E}function h(){return!0}function i(a,b,c){return a.localName===c}function j(a,b){return a.namespaceURI===b}function k(a,b,c){return a.namespaceURI===b&&a.localName===c}function l(a,b,c,d,e,f){for(var g=a.firstElementChild;g;)d(g,e,f)&&(c[b++]=g),b=l(g,b,c,d,e,f),g=g.nextElementSibling;return b}function m(c,d,e,f,g){var h,i=s(this),j=r(this).root;if(j instanceof a.wrappers.ShadowRoot)return l(this,d,e,c,f,null);if(i instanceof C)h=x.call(i,f);else{if(!(i instanceof D))return l(this,d,e,c,f,null);h=w.call(i,f)}return b(h,d,e,g)}function n(c,d,e,f,g){var h,i=s(this),j=r(this).root;if(j instanceof a.wrappers.ShadowRoot)return l(this,d,e,c,f,g);if(i instanceof C)h=z.call(i,f,g);else{if(!(i instanceof D))return l(this,d,e,c,f,g);h=y.call(i,f,g)}return b(h,d,e,!1)}function o(c,d,e,f,g){var h,i=s(this),j=r(this).root;if(j instanceof a.wrappers.ShadowRoot)return l(this,d,e,c,f,g);if(i instanceof C)h=B.call(i,f,g);else{if(!(i instanceof D))return l(this,d,e,c,f,g);h=A.call(i,f,g)}return b(h,d,e,!1)}var p=a.wrappers.HTMLCollection,q=a.wrappers.NodeList,r=a.getTreeScope,s=a.unsafeUnwrap,t=a.wrap,u=document.querySelector,v=document.documentElement.querySelector,w=document.querySelectorAll,x=document.documentElement.querySelectorAll,y=document.getElementsByTagName,z=document.documentElement.getElementsByTagName,A=document.getElementsByTagNameNS,B=document.documentElement.getElementsByTagNameNS,C=window.Element,D=window.HTMLDocument||window.Document,E="http://www.w3.org/1999/xhtml",F={querySelector:function(b){var d=c(b),f=d!==b;b=d;var g,h=s(this),i=r(this).root;if(i instanceof a.wrappers.ShadowRoot)return e(this,b);if(h instanceof C)g=t(v.call(h,b));else{if(!(h instanceof D))return e(this,b);g=t(u.call(h,b))}return g&&!f&&(i=r(g).root)&&i instanceof a.wrappers.ShadowRoot?e(this,b):g},querySelectorAll:function(a){var b=c(a),d=b!==a;a=b;var e=new q;return e.length=m.call(this,f,0,e,a,d),e}},G={matches:function(b){return b=d(b),a.originalMatches.call(s(this),b)}},H={getElementsByTagName:function(a){var b=new p,c="*"===a?h:g;return b.length=n.call(this,c,0,b,a,a.toLowerCase()),b},getElementsByClassName:function(a){return this.querySelectorAll("."+a)},getElementsByTagNameNS:function(a,b){var c=new p,d=null;return d="*"===a?"*"===b?h:i:"*"===b?j:k,c.length=o.call(this,d,0,c,a||null,b),c}};a.GetElementsByInterface=H,a.SelectorsInterface=F,a.MatchesInterface=G}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){for(;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.nextSibling;return a}function c(a){for(;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.previousSibling;return a}var d=a.wrappers.NodeList,e={get firstElementChild(){return b(this.firstChild)},get lastElementChild(){return c(this.lastChild)},get childElementCount(){for(var a=0,b=this.firstElementChild;b;b=b.nextElementSibling)a++;return a},get children(){for(var a=new d,b=0,c=this.firstElementChild;c;c=c.nextElementSibling)a[b++]=c;return a.length=b,a},remove:function(){var a=this.parentNode;a&&a.removeChild(this)}},f={get nextElementSibling(){return b(this.nextSibling)},get previousElementSibling(){return c(this.previousSibling)}},g={getElementById:function(a){return/[ \t\n\r\f]/.test(a)?null:this.querySelector('[id="'+a+'"]')}};a.ChildNodeInterface=f,a.NonElementParentNodeInterface=g,a.ParentNodeInterface=e}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}var c=a.ChildNodeInterface,d=a.wrappers.Node,e=a.enqueueMutation,f=a.mixin,g=a.registerWrapper,h=a.unsafeUnwrap,i=window.CharacterData;b.prototype=Object.create(d.prototype),f(b.prototype,{get nodeValue(){return this.data},set nodeValue(a){this.data=a},get textContent(){return this.data},set textContent(a){this.data=a},get data(){return h(this).data},set data(a){var b=h(this).data;e(this,"characterData",{oldValue:b}),h(this).data=a}}),f(b.prototype,c),g(i,b,document.createTextNode("")),a.wrappers.CharacterData=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a>>>0}function c(a){d.call(this,a)}var d=a.wrappers.CharacterData,e=(a.enqueueMutation,a.mixin),f=a.registerWrapper,g=window.Text;c.prototype=Object.create(d.prototype),e(c.prototype,{splitText:function(a){a=b(a);var c=this.data;if(a>c.length)throw new Error("IndexSizeError");var d=c.slice(0,a),e=c.slice(a);this.data=d;var f=this.ownerDocument.createTextNode(e);return this.parentNode&&this.parentNode.insertBefore(f,this.nextSibling),f}}),f(g,c,document.createTextNode("")),a.wrappers.Text=c}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){return f(a).getAttribute("class")}function c(a,b){g(a,"attributes",{name:"class",namespace:null,oldValue:b})}function d(b){a.invalidateRendererBasedOnAttribute(b,"class")}function e(a,e,f){var g=a.ownerElement_;if(null==g)return e.apply(a,f);var h=b(g),i=e.apply(a,f);return b(g)!==h&&(c(g,h),d(g)),i}if(!window.DOMTokenList)return void console.warn("Missing DOMTokenList prototype, please include a compatible classList polyfill such as http://goo.gl/uTcepH.");var f=a.unsafeUnwrap,g=a.enqueueMutation,h=DOMTokenList.prototype.add;DOMTokenList.prototype.add=function(){e(this,h,arguments)};var i=DOMTokenList.prototype.remove;DOMTokenList.prototype.remove=function(){e(this,i,arguments)};var j=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(){return e(this,j,arguments)}}(window.ShadowDOMPolyfill),function(a){"use strict";function b(b,c){var d=b.parentNode;if(d&&d.shadowRoot){var e=a.getRendererForHost(d);e.dependsOnAttribute(c)&&e.invalidate()}}function c(a,b,c){k(a,"attributes",{name:b,namespace:null,oldValue:c})}function d(a){g.call(this,a)}var e=a.ChildNodeInterface,f=a.GetElementsByInterface,g=a.wrappers.Node,h=a.ParentNodeInterface,i=a.SelectorsInterface,j=a.MatchesInterface,k=(a.addWrapNodeListMethod,a.enqueueMutation),l=a.mixin,m=(a.oneOf,a.registerWrapper),n=a.unsafeUnwrap,o=a.wrappers,p=window.Element,q=["matches","mozMatchesSelector","msMatchesSelector","webkitMatchesSelector"].filter(function(a){return p.prototype[a]}),r=q[0],s=p.prototype[r],t=new WeakMap;d.prototype=Object.create(g.prototype),l(d.prototype,{createShadowRoot:function(){var b=new o.ShadowRoot(this);n(this).polymerShadowRoot_=b;var c=a.getRendererForHost(this);return c.invalidate(),b},get shadowRoot(){return n(this).polymerShadowRoot_||null},setAttribute:function(a,d){var e=n(this).getAttribute(a);n(this).setAttribute(a,d),c(this,a,e),b(this,a)},removeAttribute:function(a){var d=n(this).getAttribute(a);n(this).removeAttribute(a),c(this,a,d),b(this,a)},get classList(){var a=t.get(this);if(!a){if(a=n(this).classList,!a)return;a.ownerElement_=this,t.set(this,a)}return a},get className(){return n(this).className},set className(a){this.setAttribute("class",a)},get id(){return n(this).id},set id(a){this.setAttribute("id",a)}}),q.forEach(function(a){"matches"!==a&&(d.prototype[a]=function(a){return this.matches(a)})}),p.prototype.webkitCreateShadowRoot&&(d.prototype.webkitCreateShadowRoot=d.prototype.createShadowRoot),l(d.prototype,e),l(d.prototype,f),l(d.prototype,h),l(d.prototype,i),l(d.prototype,j),m(p,d,document.createElementNS(null,"x")),a.invalidateRendererBasedOnAttribute=b,a.matchesNames=q,a.originalMatches=s,a.wrappers.Element=d}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a){case"&":return"&amp;";case"<":return"&lt;";case">":return"&gt;";case'"':return"&quot;";case" ":return"&nbsp;"}}function c(a){return a.replace(B,b)}function d(a){return a.replace(C,b)}function e(a){for(var b={},c=0;c<a.length;c++)b[a[c]]=!0;return b}function f(a){if(a.namespaceURI!==F)return!0;var b=a.ownerDocument.doctype;return b&&b.publicId&&b.systemId}function g(a,b){switch(a.nodeType){case Node.ELEMENT_NODE:for(var e,g=a.tagName.toLowerCase(),i="<"+g,j=a.attributes,k=0;e=j[k];k++)i+=" "+e.name+'="'+c(e.value)+'"';return D[g]?(f(a)&&(i+="/"),i+">"):i+">"+h(a)+"</"+g+">";case Node.TEXT_NODE:var l=a.data;return b&&E[b.localName]?l:d(l);case Node.COMMENT_NODE:return"<!--"+a.data+"-->";default:throw console.error(a),new Error("not implemented")}}function h(a){a instanceof A.HTMLTemplateElement&&(a=a.content);for(var b="",c=a.firstChild;c;c=c.nextSibling)b+=g(c,a);return b}function i(a,b,c){var d=c||"div";a.textContent="";var e=y(a.ownerDocument.createElement(d));e.innerHTML=b;for(var f;f=e.firstChild;)a.appendChild(z(f))}function j(a){p.call(this,a)}function k(a,b){var c=y(a.cloneNode(!1));c.innerHTML=b;for(var d,e=y(document.createDocumentFragment());d=c.firstChild;)e.appendChild(d);return z(e)}function l(b){return function(){return a.renderAllPending(),x(this)[b]}}function m(a){q(j,a,l(a))}function n(b){Object.defineProperty(j.prototype,b,{get:l(b),set:function(c){a.renderAllPending(),x(this)[b]=c},configurable:!0,enumerable:!0})}function o(b){Object.defineProperty(j.prototype,b,{value:function(){return a.renderAllPending(),x(this)[b].apply(x(this),arguments)},configurable:!0,enumerable:!0})}var p=a.wrappers.Element,q=a.defineGetter,r=a.enqueueMutation,s=a.mixin,t=a.nodesWereAdded,u=a.nodesWereRemoved,v=a.registerWrapper,w=a.snapshotNodeList,x=a.unsafeUnwrap,y=a.unwrap,z=a.wrap,A=a.wrappers,B=/[&\u00A0"]/g,C=/[&\u00A0<>]/g,D=e(["area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"]),E=e(["style","script","xmp","iframe","noembed","noframes","plaintext","noscript"]),F="http://www.w3.org/1999/xhtml",G=/MSIE/.test(navigator.userAgent),H=window.HTMLElement,I=window.HTMLTemplateElement;j.prototype=Object.create(p.prototype),s(j.prototype,{get innerHTML(){return h(this)},set innerHTML(a){if(G&&E[this.localName])return void(this.textContent=a);var b=w(this.childNodes);this.invalidateShadowRenderer()?this instanceof A.HTMLTemplateElement?i(this.content,a):i(this,a,this.tagName):!I&&this instanceof A.HTMLTemplateElement?i(this.content,a):x(this).innerHTML=a;var c=w(this.childNodes);r(this,"childList",{addedNodes:c,removedNodes:b}),u(b),t(c,this)},get outerHTML(){return g(this,this.parentNode)},set outerHTML(a){var b=this.parentNode;if(b){b.invalidateShadowRenderer();var c=k(b,a);b.replaceChild(c,this)}},insertAdjacentHTML:function(a,b){var c,d;switch(String(a).toLowerCase()){case"beforebegin":c=this.parentNode,d=this;break;case"afterend":c=this.parentNode,d=this.nextSibling;break;case"afterbegin":c=this,d=this.firstChild;break;case"beforeend":c=this,d=null;break;default:return}var e=k(c,b);c.insertBefore(e,d)},get hidden(){return this.hasAttribute("hidden")},set hidden(a){a?this.setAttribute("hidden",""):this.removeAttribute("hidden")}}),["clientHeight","clientLeft","clientTop","clientWidth","offsetHeight","offsetLeft","offsetTop","offsetWidth","scrollHeight","scrollWidth"].forEach(m),["scrollLeft","scrollTop"].forEach(n),["getBoundingClientRect","getClientRects","scrollIntoView"].forEach(o),v(H,j,document.createElement("b")),a.wrappers.HTMLElement=j,a.getInnerHTML=h,a.setInnerHTML=i}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=a.unsafeUnwrap,g=a.wrap,h=window.HTMLCanvasElement;b.prototype=Object.create(c.prototype),d(b.prototype,{getContext:function(){var a=f(this).getContext.apply(f(this),arguments);return a&&g(a)}}),e(h,b,document.createElement("canvas")),a.wrappers.HTMLCanvasElement=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLContentElement;b.prototype=Object.create(c.prototype),d(b.prototype,{constructor:b,get select(){return this.getAttribute("select")},set select(a){this.setAttribute("select",a)},setAttribute:function(a,b){c.prototype.setAttribute.call(this,a,b),"select"===String(a).toLowerCase()&&this.invalidateShadowRenderer(!0)}}),f&&e(f,b),a.wrappers.HTMLContentElement=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=a.wrapHTMLCollection,g=a.unwrap,h=window.HTMLFormElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get elements(){return f(g(this).elements)}}),e(h,b,document.createElement("form")),a.wrappers.HTMLFormElement=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}function c(a,b){if(!(this instanceof c))throw new TypeError("DOM object constructor cannot be called as a function.");var e=f(document.createElement("img"));d.call(this,e),g(e,this),void 0!==a&&(e.width=a),void 0!==b&&(e.height=b)}var d=a.wrappers.HTMLElement,e=a.registerWrapper,f=a.unwrap,g=a.rewrap,h=window.HTMLImageElement;b.prototype=Object.create(d.prototype),e(h,b,document.createElement("img")),c.prototype=b.prototype,a.wrappers.HTMLImageElement=b,a.wrappers.Image=c}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=(a.mixin,a.wrappers.NodeList,a.registerWrapper),e=window.HTMLShadowElement;b.prototype=Object.create(c.prototype),b.prototype.constructor=b,e&&d(e,b),a.wrappers.HTMLShadowElement=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){if(!a.defaultView)return a;var b=l.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);l.set(a,b)}return b}function c(a){for(var c,d=b(a.ownerDocument),e=i(d.createDocumentFragment());c=a.firstChild;)e.appendChild(c);return e}function d(a){if(e.call(this,a),!m){var b=c(a);k.set(this,j(b))}}var e=a.wrappers.HTMLElement,f=a.mixin,g=a.registerWrapper,h=a.unsafeUnwrap,i=a.unwrap,j=a.wrap,k=new WeakMap,l=new WeakMap,m=window.HTMLTemplateElement;d.prototype=Object.create(e.prototype),f(d.prototype,{constructor:d,get content(){return m?j(h(this).content):k.get(this)}}),m&&g(m,d),a.wrappers.HTMLTemplateElement=d}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.registerWrapper,e=window.HTMLMediaElement;e&&(b.prototype=Object.create(c.prototype),d(e,b,document.createElement("audio")),a.wrappers.HTMLMediaElement=b)}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}function c(a){if(!(this instanceof c))throw new TypeError("DOM object constructor cannot be called as a function.");var b=f(document.createElement("audio"));d.call(this,b),g(b,this),b.setAttribute("preload","auto"),void 0!==a&&b.setAttribute("src",a)}var d=a.wrappers.HTMLMediaElement,e=a.registerWrapper,f=a.unwrap,g=a.rewrap,h=window.HTMLAudioElement;h&&(b.prototype=Object.create(d.prototype),e(h,b,document.createElement("audio")),c.prototype=b.prototype,a.wrappers.HTMLAudioElement=b,a.wrappers.Audio=c)}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a.replace(/\s+/g," ").trim()}function c(a){e.call(this,a)}function d(a,b,c,f){if(!(this instanceof d))throw new TypeError("DOM object constructor cannot be called as a function.");var g=i(document.createElement("option"));e.call(this,g),h(g,this),void 0!==a&&(g.text=a),void 0!==b&&g.setAttribute("value",b),c===!0&&g.setAttribute("selected",""),g.selected=f===!0}var e=a.wrappers.HTMLElement,f=a.mixin,g=a.registerWrapper,h=a.rewrap,i=a.unwrap,j=a.wrap,k=window.HTMLOptionElement;c.prototype=Object.create(e.prototype),f(c.prototype,{get text(){return b(this.textContent)},set text(a){this.textContent=b(String(a))},get form(){return j(i(this).form)}}),g(k,c,document.createElement("option")),d.prototype=c.prototype,a.wrappers.HTMLOptionElement=c,a.wrappers.Option=d}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=a.unwrap,g=a.wrap,h=window.HTMLSelectElement;b.prototype=Object.create(c.prototype),
+d(b.prototype,{add:function(a,b){"object"==typeof b&&(b=f(b)),f(this).add(f(a),b)},remove:function(a){return void 0===a?void c.prototype.remove.call(this):("object"==typeof a&&(a=f(a)),void f(this).remove(a))},get form(){return g(f(this).form)}}),e(h,b,document.createElement("select")),a.wrappers.HTMLSelectElement=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=a.unwrap,g=a.wrap,h=a.wrapHTMLCollection,i=window.HTMLTableElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get caption(){return g(f(this).caption)},createCaption:function(){return g(f(this).createCaption())},get tHead(){return g(f(this).tHead)},createTHead:function(){return g(f(this).createTHead())},createTFoot:function(){return g(f(this).createTFoot())},get tFoot(){return g(f(this).tFoot)},get tBodies(){return h(f(this).tBodies)},createTBody:function(){return g(f(this).createTBody())},get rows(){return h(f(this).rows)},insertRow:function(a){return g(f(this).insertRow(a))}}),e(i,b,document.createElement("table")),a.wrappers.HTMLTableElement=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=a.wrapHTMLCollection,g=a.unwrap,h=a.wrap,i=window.HTMLTableSectionElement;b.prototype=Object.create(c.prototype),d(b.prototype,{constructor:b,get rows(){return f(g(this).rows)},insertRow:function(a){return h(g(this).insertRow(a))}}),e(i,b,document.createElement("thead")),a.wrappers.HTMLTableSectionElement=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=a.wrapHTMLCollection,g=a.unwrap,h=a.wrap,i=window.HTMLTableRowElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get cells(){return f(g(this).cells)},insertCell:function(a){return h(g(this).insertCell(a))}}),e(i,b,document.createElement("tr")),a.wrappers.HTMLTableRowElement=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a.localName){case"content":return new c(a);case"shadow":return new e(a);case"template":return new f(a)}d.call(this,a)}var c=a.wrappers.HTMLContentElement,d=a.wrappers.HTMLElement,e=a.wrappers.HTMLShadowElement,f=a.wrappers.HTMLTemplateElement,g=(a.mixin,a.registerWrapper),h=window.HTMLUnknownElement;b.prototype=Object.create(d.prototype),g(h,b),a.wrappers.HTMLUnknownElement=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.Element,d=a.wrappers.HTMLElement,e=a.registerWrapper,f=(a.defineWrapGetter,a.unsafeUnwrap),g=a.wrap,h=a.mixin,i="http://www.w3.org/2000/svg",j=window.SVGElement,k=document.createElementNS(i,"title");if(!("classList"in k)){var l=Object.getOwnPropertyDescriptor(c.prototype,"classList");Object.defineProperty(d.prototype,"classList",l),delete c.prototype.classList}b.prototype=Object.create(c.prototype),h(b.prototype,{get ownerSVGElement(){return g(f(this).ownerSVGElement)}}),e(j,b,document.createElementNS(i,"title")),a.wrappers.SVGElement=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){m.call(this,a)}var c=a.mixin,d=a.registerWrapper,e=a.unwrap,f=a.wrap,g=window.SVGUseElement,h="http://www.w3.org/2000/svg",i=f(document.createElementNS(h,"g")),j=document.createElementNS(h,"use"),k=i.constructor,l=Object.getPrototypeOf(k.prototype),m=l.constructor;b.prototype=Object.create(l),"instanceRoot"in j&&c(b.prototype,{get instanceRoot(){return f(e(this).instanceRoot)},get animatedInstanceRoot(){return f(e(this).animatedInstanceRoot)}}),d(g,b,j),a.wrappers.SVGUseElement=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.EventTarget,d=a.mixin,e=a.registerWrapper,f=a.unsafeUnwrap,g=a.wrap,h=window.SVGElementInstance;h&&(b.prototype=Object.create(c.prototype),d(b.prototype,{get correspondingElement(){return g(f(this).correspondingElement)},get correspondingUseElement(){return g(f(this).correspondingUseElement)},get parentNode(){return g(f(this).parentNode)},get childNodes(){throw new Error("Not implemented")},get firstChild(){return g(f(this).firstChild)},get lastChild(){return g(f(this).lastChild)},get previousSibling(){return g(f(this).previousSibling)},get nextSibling(){return g(f(this).nextSibling)}}),e(h,b),a.wrappers.SVGElementInstance=b)}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){e(a,this)}var c=a.mixin,d=a.registerWrapper,e=a.setWrapper,f=a.unsafeUnwrap,g=a.unwrap,h=a.unwrapIfNeeded,i=a.wrap,j=window.CanvasRenderingContext2D;c(b.prototype,{get canvas(){return i(f(this).canvas)},drawImage:function(){arguments[0]=h(arguments[0]),f(this).drawImage.apply(f(this),arguments)},createPattern:function(){return arguments[0]=g(arguments[0]),f(this).createPattern.apply(f(this),arguments)}}),d(j,b,document.createElement("canvas").getContext("2d")),a.wrappers.CanvasRenderingContext2D=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){e(a,this)}var c=a.mixin,d=a.registerWrapper,e=a.setWrapper,f=a.unsafeUnwrap,g=a.unwrapIfNeeded,h=a.wrap,i=window.WebGLRenderingContext;if(i){c(b.prototype,{get canvas(){return h(f(this).canvas)},texImage2D:function(){arguments[5]=g(arguments[5]),f(this).texImage2D.apply(f(this),arguments)},texSubImage2D:function(){arguments[6]=g(arguments[6]),f(this).texSubImage2D.apply(f(this),arguments)}});var j=/WebKit/.test(navigator.userAgent)?{drawingBufferHeight:null,drawingBufferWidth:null}:{};d(i,b,j),a.wrappers.WebGLRenderingContext=b}}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.Node,d=a.GetElementsByInterface,e=a.NonElementParentNodeInterface,f=a.ParentNodeInterface,g=a.SelectorsInterface,h=a.mixin,i=a.registerObject,j=a.registerWrapper,k=window.DocumentFragment;b.prototype=Object.create(c.prototype),h(b.prototype,f),h(b.prototype,g),h(b.prototype,d),h(b.prototype,e),j(k,b,document.createDocumentFragment()),a.wrappers.DocumentFragment=b;var l=i(document.createComment(""));a.wrappers.Comment=l}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=l(k(a).ownerDocument.createDocumentFragment());c.call(this,b),i(b,this);var e=a.shadowRoot;n.set(this,e),this.treeScope_=new d(this,g(e||a)),m.set(this,a)}var c=a.wrappers.DocumentFragment,d=a.TreeScope,e=a.elementFromPoint,f=a.getInnerHTML,g=a.getTreeScope,h=a.mixin,i=a.rewrap,j=a.setInnerHTML,k=a.unsafeUnwrap,l=a.unwrap,m=new WeakMap,n=new WeakMap;b.prototype=Object.create(c.prototype),h(b.prototype,{constructor:b,get innerHTML(){return f(this)},set innerHTML(a){j(this,a),this.invalidateShadowRenderer()},get olderShadowRoot(){return n.get(this)||null},get host(){return m.get(this)||null},invalidateShadowRenderer:function(){return m.get(this).invalidateShadowRenderer()},elementFromPoint:function(a,b){return e(this,this.ownerDocument,a,b)},getSelection:function(){return document.getSelection()}}),a.wrappers.ShadowRoot=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=l(a).root;return b instanceof n?b.host:null}function c(b,c){if(b.shadowRoot){c=Math.min(b.childNodes.length-1,c);var d=b.childNodes[c];if(d){var e=a.getDestinationInsertionPoints(d);if(e.length>0){var f=e[0].parentNode;f.nodeType==Node.ELEMENT_NODE&&(b=f)}}}return b}function d(a){return a=k(a),b(a)||a}function e(a){g(a,this)}var f=a.registerWrapper,g=a.setWrapper,h=a.unsafeUnwrap,i=a.unwrap,j=a.unwrapIfNeeded,k=a.wrap,l=a.getTreeScope,m=window.Range,n=a.wrappers.ShadowRoot;e.prototype={get startContainer(){return d(h(this).startContainer)},get endContainer(){return d(h(this).endContainer)},get commonAncestorContainer(){return d(h(this).commonAncestorContainer)},setStart:function(a,b){a=c(a,b),h(this).setStart(j(a),b)},setEnd:function(a,b){a=c(a,b),h(this).setEnd(j(a),b)},setStartBefore:function(a){h(this).setStartBefore(j(a))},setStartAfter:function(a){h(this).setStartAfter(j(a))},setEndBefore:function(a){h(this).setEndBefore(j(a))},setEndAfter:function(a){h(this).setEndAfter(j(a))},selectNode:function(a){h(this).selectNode(j(a))},selectNodeContents:function(a){h(this).selectNodeContents(j(a))},compareBoundaryPoints:function(a,b){return h(this).compareBoundaryPoints(a,i(b))},extractContents:function(){return k(h(this).extractContents())},cloneContents:function(){return k(h(this).cloneContents())},insertNode:function(a){h(this).insertNode(j(a))},surroundContents:function(a){h(this).surroundContents(j(a))},cloneRange:function(){return k(h(this).cloneRange())},isPointInRange:function(a,b){return h(this).isPointInRange(j(a),b)},comparePoint:function(a,b){return h(this).comparePoint(j(a),b)},intersectsNode:function(a){return h(this).intersectsNode(j(a))},toString:function(){return h(this).toString()}},m.prototype.createContextualFragment&&(e.prototype.createContextualFragment=function(a){return k(h(this).createContextualFragment(a))}),f(window.Range,e,document.createRange()),a.wrappers.Range=e}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){a.previousSibling_=a.previousSibling,a.nextSibling_=a.nextSibling,a.parentNode_=a.parentNode}function c(c,e,f){var g=H(c),h=H(e),i=f?H(f):null;if(d(e),b(e),f)c.firstChild===f&&(c.firstChild_=f),f.previousSibling_=f.previousSibling;else{c.lastChild_=c.lastChild,c.lastChild===c.firstChild&&(c.firstChild_=c.firstChild);var j=I(g.lastChild);j&&(j.nextSibling_=j.nextSibling)}a.originalInsertBefore.call(g,h,i)}function d(c){var d=H(c),e=d.parentNode;if(e){var f=I(e);b(c),c.previousSibling&&(c.previousSibling.nextSibling_=c),c.nextSibling&&(c.nextSibling.previousSibling_=c),f.lastChild===c&&(f.lastChild_=c),f.firstChild===c&&(f.firstChild_=c),a.originalRemoveChild.call(e,d)}}function e(a){K.set(a,[])}function f(a){var b=K.get(a);return b||K.set(a,b=[]),b}function g(a){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}function h(){for(var a=0;a<O.length;a++){var b=O[a],c=b.parentRenderer;c&&c.dirty||b.render()}O=[]}function i(){y=null,h()}function j(a){var b=M.get(a);return b||(b=new n(a),M.set(a,b)),b}function k(a){var b=E(a).root;return b instanceof D?b:null}function l(a){return j(a.host)}function m(a){this.skip=!1,this.node=a,this.childNodes=[]}function n(a){this.host=a,this.dirty=!1,this.invalidateAttributes(),this.associateNode(a)}function o(a){for(var b=[],c=a.firstChild;c;c=c.nextSibling)v(c)?b.push.apply(b,f(c)):b.push(c);return b}function p(a){if(a instanceof B)return a;if(a instanceof A)return null;for(var b=a.firstChild;b;b=b.nextSibling){var c=p(b);if(c)return c}return null}function q(a,b){f(b).push(a);var c=L.get(a);c?c.push(b):L.set(a,[b])}function r(a){return L.get(a)}function s(a){L.set(a,void 0)}function t(a,b){var c=b.getAttribute("select");if(!c)return!0;if(c=c.trim(),!c)return!0;if(!(a instanceof z))return!1;if(!Q.test(c))return!1;try{return a.matches(c)}catch(d){return!1}}function u(a,b){var c=r(b);return c&&c[c.length-1]===a}function v(a){return a instanceof A||a instanceof B}function w(a){return a.shadowRoot}function x(a){for(var b=[],c=a.shadowRoot;c;c=c.olderShadowRoot)b.push(c);return b}var y,z=a.wrappers.Element,A=a.wrappers.HTMLContentElement,B=a.wrappers.HTMLShadowElement,C=a.wrappers.Node,D=a.wrappers.ShadowRoot,E=(a.assert,a.getTreeScope),F=(a.mixin,a.oneOf),G=a.unsafeUnwrap,H=a.unwrap,I=a.wrap,J=a.ArraySplice,K=new WeakMap,L=new WeakMap,M=new WeakMap,N=F(window,["requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","setTimeout"]),O=[],P=new J;P.equals=function(a,b){return H(a.node)===b},m.prototype={append:function(a){var b=new m(a);return this.childNodes.push(b),b},sync:function(a){if(!this.skip){for(var b=this.node,e=this.childNodes,f=g(H(b)),h=a||new WeakMap,i=P.calculateSplices(e,f),j=0,k=0,l=0,m=0;m<i.length;m++){for(var n=i[m];l<n.index;l++)k++,e[j++].sync(h);for(var o=n.removed.length,p=0;o>p;p++){var q=I(f[k++]);h.get(q)||d(q)}for(var r=n.addedCount,s=f[k]&&I(f[k]),p=0;r>p;p++){var t=e[j++],u=t.node;c(b,u,s),h.set(u,!0),t.sync(h)}l+=r}for(var m=l;m<e.length;m++)e[m].sync(h)}}},n.prototype={render:function(a){if(this.dirty){this.invalidateAttributes();var b=this.host;this.distribution(b);var c=a||new m(b);this.buildRenderTree(c,b);var d=!a;d&&c.sync(),this.dirty=!1}},get parentRenderer(){return E(this.host).renderer},invalidate:function(){if(!this.dirty){this.dirty=!0;var a=this.parentRenderer;if(a&&a.invalidate(),O.push(this),y)return;y=window[N](i,0)}},distribution:function(a){this.resetAllSubtrees(a),this.distributionResolution(a)},resetAll:function(a){v(a)?e(a):s(a),this.resetAllSubtrees(a)},resetAllSubtrees:function(a){for(var b=a.firstChild;b;b=b.nextSibling)this.resetAll(b);a.shadowRoot&&this.resetAll(a.shadowRoot),a.olderShadowRoot&&this.resetAll(a.olderShadowRoot)},distributionResolution:function(a){if(w(a)){for(var b=a,c=o(b),d=x(b),e=0;e<d.length;e++)this.poolDistribution(d[e],c);for(var e=d.length-1;e>=0;e--){var f=d[e],g=p(f);if(g){var h=f.olderShadowRoot;h&&(c=o(h));for(var i=0;i<c.length;i++)q(c[i],g)}this.distributionResolution(f)}}for(var j=a.firstChild;j;j=j.nextSibling)this.distributionResolution(j)},poolDistribution:function(a,b){if(!(a instanceof B))if(a instanceof A){var c=a;this.updateDependentAttributes(c.getAttribute("select"));for(var d=!1,e=0;e<b.length;e++){var a=b[e];a&&t(a,c)&&(q(a,c),b[e]=void 0,d=!0)}if(!d)for(var f=c.firstChild;f;f=f.nextSibling)q(f,c)}else for(var f=a.firstChild;f;f=f.nextSibling)this.poolDistribution(f,b)},buildRenderTree:function(a,b){for(var c=this.compose(b),d=0;d<c.length;d++){var e=c[d],f=a.append(e);this.buildRenderTree(f,e)}if(w(b)){var g=j(b);g.dirty=!1}},compose:function(a){for(var b=[],c=a.shadowRoot||a,d=c.firstChild;d;d=d.nextSibling)if(v(d)){this.associateNode(c);for(var e=f(d),g=0;g<e.length;g++){var h=e[g];u(d,h)&&b.push(h)}}else b.push(d);return b},invalidateAttributes:function(){this.attributes=Object.create(null)},updateDependentAttributes:function(a){if(a){var b=this.attributes;/\.\w+/.test(a)&&(b["class"]=!0),/#\w+/.test(a)&&(b.id=!0),a.replace(/\[\s*([^\s=\|~\]]+)/g,function(a,c){b[c]=!0})}},dependsOnAttribute:function(a){return this.attributes[a]},associateNode:function(a){G(a).polymerShadowRenderer_=this}};var Q=/^(:not\()?[*.#[a-zA-Z_|]/;C.prototype.invalidateShadowRenderer=function(a){var b=G(this).polymerShadowRenderer_;return b?(b.invalidate(),!0):!1},A.prototype.getDistributedNodes=B.prototype.getDistributedNodes=function(){return h(),f(this)},z.prototype.getDestinationInsertionPoints=function(){return h(),r(this)||[]},A.prototype.nodeIsInserted_=B.prototype.nodeIsInserted_=function(){this.invalidateShadowRenderer();var a,b=k(this);b&&(a=l(b)),G(this).polymerShadowRenderer_=a,a&&a.invalidate()},a.getRendererForHost=j,a.getShadowTrees=x,a.renderAllPending=h,a.getDestinationInsertionPoints=r,a.visual={insertBefore:c,remove:d}}(window.ShadowDOMPolyfill),function(a){"use strict";function b(b){if(window[b]){d(!a.wrappers[b]);var i=function(a){c.call(this,a)};i.prototype=Object.create(c.prototype),e(i.prototype,{get form(){return h(g(this).form)}}),f(window[b],i,document.createElement(b.slice(4,-7))),a.wrappers[b]=i}}var c=a.wrappers.HTMLElement,d=a.assert,e=a.mixin,f=a.registerWrapper,g=a.unwrap,h=a.wrap,i=["HTMLButtonElement","HTMLFieldSetElement","HTMLInputElement","HTMLKeygenElement","HTMLLabelElement","HTMLLegendElement","HTMLObjectElement","HTMLOutputElement","HTMLTextAreaElement"];i.forEach(b)}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){d(a,this)}var c=a.registerWrapper,d=a.setWrapper,e=a.unsafeUnwrap,f=a.unwrap,g=a.unwrapIfNeeded,h=a.wrap,i=window.Selection;b.prototype={get anchorNode(){return h(e(this).anchorNode)},get focusNode(){return h(e(this).focusNode)},addRange:function(a){e(this).addRange(g(a))},collapse:function(a,b){e(this).collapse(g(a),b)},containsNode:function(a,b){return e(this).containsNode(g(a),b)},getRangeAt:function(a){return h(e(this).getRangeAt(a))},removeRange:function(a){e(this).removeRange(f(a))},selectAllChildren:function(a){e(this).selectAllChildren(a instanceof ShadowRoot?e(a.host):g(a))},toString:function(){return e(this).toString()}},i.prototype.extend&&(b.prototype.extend=function(a,b){e(this).extend(g(a),b)}),c(window.Selection,b,window.getSelection()),a.wrappers.Selection=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){d(a,this)}var c=a.registerWrapper,d=a.setWrapper,e=a.unsafeUnwrap,f=a.unwrapIfNeeded,g=a.wrap,h=window.TreeWalker;b.prototype={get root(){return g(e(this).root)},get currentNode(){return g(e(this).currentNode)},set currentNode(a){e(this).currentNode=f(a)},get filter(){return e(this).filter},parentNode:function(){return g(e(this).parentNode())},firstChild:function(){return g(e(this).firstChild())},lastChild:function(){return g(e(this).lastChild())},previousSibling:function(){return g(e(this).previousSibling())},previousNode:function(){return g(e(this).previousNode())},nextNode:function(){return g(e(this).nextNode())}},c(h,b),a.wrappers.TreeWalker=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){k.call(this,a),this.treeScope_=new q(this,null)}function c(a){var c=document[a];b.prototype[a]=function(){return D(c.apply(B(this),arguments))}}function d(a,b){G.call(B(b),C(a)),e(a,b)}function e(a,b){a.shadowRoot&&b.adoptNode(a.shadowRoot),a instanceof p&&f(a,b);for(var c=a.firstChild;c;c=c.nextSibling)e(c,b)}function f(a,b){var c=a.olderShadowRoot;c&&b.adoptNode(c)}function g(a){A(a,this)}function h(a,b){var c=document.implementation[b];a.prototype[b]=function(){return D(c.apply(B(this),arguments))}}function i(a,b){var c=document.implementation[b];a.prototype[b]=function(){return c.apply(B(this),arguments)}}var j=a.GetElementsByInterface,k=a.wrappers.Node,l=a.ParentNodeInterface,m=a.NonElementParentNodeInterface,n=a.wrappers.Selection,o=a.SelectorsInterface,p=a.wrappers.ShadowRoot,q=a.TreeScope,r=a.cloneNode,s=a.defineWrapGetter,t=a.elementFromPoint,u=a.forwardMethodsToWrapper,v=a.matchesNames,w=a.mixin,x=a.registerWrapper,y=a.renderAllPending,z=a.rewrap,A=a.setWrapper,B=a.unsafeUnwrap,C=a.unwrap,D=a.wrap,E=a.wrapEventTargetMethods,F=(a.wrapNodeList,new WeakMap);b.prototype=Object.create(k.prototype),s(b,"documentElement"),s(b,"body"),s(b,"head"),["createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode"].forEach(c);var G=document.adoptNode,H=document.getSelection;w(b.prototype,{adoptNode:function(a){return a.parentNode&&a.parentNode.removeChild(a),d(a,this),a},elementFromPoint:function(a,b){return t(this,this,a,b)},importNode:function(a,b){return r(a,b,B(this))},getSelection:function(){return y(),new n(H.call(C(this)))},getElementsByName:function(a){return o.querySelectorAll.call(this,"[name="+JSON.stringify(String(a))+"]")}});var I=document.createTreeWalker,J=a.wrappers.TreeWalker;if(b.prototype.createTreeWalker=function(a,b,c,d){var e=null;return c&&(c.acceptNode&&"function"==typeof c.acceptNode?e={acceptNode:function(a){return c.acceptNode(D(a))}}:"function"==typeof c&&(e=function(a){return c(D(a))})),new J(I.call(C(this),C(a),b,e,d))},document.registerElement){var K=document.registerElement;b.prototype.registerElement=function(b,c){function d(a){return a?void A(a,this):f?document.createElement(f,b):document.createElement(b)}var e,f;if(void 0!==c&&(e=c.prototype,f=c["extends"]),e||(e=Object.create(HTMLElement.prototype)),a.nativePrototypeTable.get(e))throw new Error("NotSupportedError");for(var g,h=Object.getPrototypeOf(e),i=[];h&&!(g=a.nativePrototypeTable.get(h));)i.push(h),h=Object.getPrototypeOf(h);if(!g)throw new Error("NotSupportedError");for(var j=Object.create(g),k=i.length-1;k>=0;k--)j=Object.create(j);["createdCallback","attachedCallback","detachedCallback","attributeChangedCallback"].forEach(function(a){var b=e[a];b&&(j[a]=function(){D(this)instanceof d||z(this),b.apply(D(this),arguments)})});var l={prototype:j};f&&(l["extends"]=f),d.prototype=e,d.prototype.constructor=d,a.constructorTable.set(j,d),a.nativePrototypeTable.set(e,j);K.call(C(this),b,l);return d},u([window.HTMLDocument||window.Document],["registerElement"])}u([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement,window.HTMLHtmlElement],["appendChild","compareDocumentPosition","contains","getElementsByClassName","getElementsByTagName","getElementsByTagNameNS","insertBefore","querySelector","querySelectorAll","removeChild","replaceChild"]),u([window.HTMLBodyElement,window.HTMLHeadElement,window.HTMLHtmlElement],v),u([window.HTMLDocument||window.Document],["adoptNode","importNode","contains","createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","createTreeWalker","elementFromPoint","getElementById","getElementsByName","getSelection"]),w(b.prototype,j),w(b.prototype,l),w(b.prototype,o),w(b.prototype,m),w(b.prototype,{get implementation(){var a=F.get(this);return a?a:(a=new g(C(this).implementation),F.set(this,a),a)},get defaultView(){return D(C(this).defaultView)}}),x(window.Document,b,document.implementation.createHTMLDocument("")),window.HTMLDocument&&x(window.HTMLDocument,b),E([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement]);var L=document.implementation.createDocument;g.prototype.createDocument=function(){return arguments[2]=C(arguments[2]),D(L.apply(B(this),arguments))},h(g,"createDocumentType"),h(g,"createHTMLDocument"),i(g,"hasFeature"),x(window.DOMImplementation,g),u([window.DOMImplementation],["createDocument","createDocumentType","createHTMLDocument","hasFeature"]),a.adoptNodeNoRemove=d,a.wrappers.DOMImplementation=g,a.wrappers.Document=b}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.EventTarget,d=a.wrappers.Selection,e=a.mixin,f=a.registerWrapper,g=a.renderAllPending,h=a.unwrap,i=a.unwrapIfNeeded,j=a.wrap,k=window.Window,l=window.getComputedStyle,m=window.getDefaultComputedStyle,n=window.getSelection;b.prototype=Object.create(c.prototype),k.prototype.getComputedStyle=function(a,b){return j(this||window).getComputedStyle(i(a),b)},m&&(k.prototype.getDefaultComputedStyle=function(a,b){return j(this||window).getDefaultComputedStyle(i(a),b)}),k.prototype.getSelection=function(){return j(this||window).getSelection()},delete window.getComputedStyle,delete window.getDefaultComputedStyle,delete window.getSelection,["addEventListener","removeEventListener","dispatchEvent"].forEach(function(a){k.prototype[a]=function(){var b=j(this||window);return b[a].apply(b,arguments)},delete window[a]}),e(b.prototype,{getComputedStyle:function(a,b){return g(),l.call(h(this),i(a),b)},getSelection:function(){return g(),new d(n.call(h(this)))},get document(){return j(h(this).document)}}),m&&(b.prototype.getDefaultComputedStyle=function(a,b){return g(),m.call(h(this),i(a),b)}),f(k,b,window),a.wrappers.Window=b}(window.ShadowDOMPolyfill),function(a){"use strict";var b=a.unwrap,c=window.DataTransfer||window.Clipboard,d=c.prototype.setDragImage;d&&(c.prototype.setDragImage=function(a,c,e){d.call(this,b(a),c,e)})}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b;b=a instanceof f?a:new f(a&&e(a)),d(b,this)}var c=a.registerWrapper,d=a.setWrapper,e=a.unwrap,f=window.FormData;f&&(c(f,b,new f),a.wrappers.FormData=b)}(window.ShadowDOMPolyfill),function(a){"use strict";var b=a.unwrapIfNeeded,c=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.send=function(a){return c.call(this,b(a))}}(window.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=c[a],d=window[b];if(d){var e=document.createElement(a),f=e.constructor;window[b]=f}}var c=(a.isWrapperFor,{a:"HTMLAnchorElement",area:"HTMLAreaElement",audio:"HTMLAudioElement",base:"HTMLBaseElement",body:"HTMLBodyElement",br:"HTMLBRElement",button:"HTMLButtonElement",canvas:"HTMLCanvasElement",caption:"HTMLTableCaptionElement",col:"HTMLTableColElement",content:"HTMLContentElement",data:"HTMLDataElement",datalist:"HTMLDataListElement",del:"HTMLModElement",dir:"HTMLDirectoryElement",div:"HTMLDivElement",dl:"HTMLDListElement",embed:"HTMLEmbedElement",fieldset:"HTMLFieldSetElement",font:"HTMLFontElement",form:"HTMLFormElement",frame:"HTMLFrameElement",frameset:"HTMLFrameSetElement",h1:"HTMLHeadingElement",head:"HTMLHeadElement",hr:"HTMLHRElement",html:"HTMLHtmlElement",iframe:"HTMLIFrameElement",img:"HTMLImageElement",input:"HTMLInputElement",keygen:"HTMLKeygenElement",label:"HTMLLabelElement",legend:"HTMLLegendElement",li:"HTMLLIElement",link:"HTMLLinkElement",map:"HTMLMapElement",marquee:"HTMLMarqueeElement",menu:"HTMLMenuElement",menuitem:"HTMLMenuItemElement",meta:"HTMLMetaElement",meter:"HTMLMeterElement",object:"HTMLObjectElement",ol:"HTMLOListElement",optgroup:"HTMLOptGroupElement",option:"HTMLOptionElement",output:"HTMLOutputElement",p:"HTMLParagraphElement",param:"HTMLParamElement",pre:"HTMLPreElement",progress:"HTMLProgressElement",q:"HTMLQuoteElement",script:"HTMLScriptElement",select:"HTMLSelectElement",shadow:"HTMLShadowElement",source:"HTMLSourceElement",span:"HTMLSpanElement",style:"HTMLStyleElement",table:"HTMLTableElement",tbody:"HTMLTableSectionElement",template:"HTMLTemplateElement",textarea:"HTMLTextAreaElement",thead:"HTMLTableSectionElement",time:"HTMLTimeElement",title:"HTMLTitleElement",tr:"HTMLTableRowElement",track:"HTMLTrackElement",ul:"HTMLUListElement",video:"HTMLVideoElement"});Object.keys(c).forEach(b),Object.getOwnPropertyNames(a.wrappers).forEach(function(b){window[b]=a.wrappers[b]})}(window.ShadowDOMPolyfill),function(a){function b(a,b){var c="";return Array.prototype.forEach.call(a,function(a){c+=a.textContent+"\n\n"}),b||(c=c.replace(l,"")),c}function c(a){var b=document.createElement("style");return b.textContent=a,b}function d(a){var b=c(a);document.head.appendChild(b);var d=[];if(b.sheet)try{d=b.sheet.cssRules}catch(e){}else console.warn("sheet not found",b);return b.parentNode.removeChild(b),d}function e(){D.initialized=!0,document.body.appendChild(D);var a=D.contentDocument,b=a.createElement("base");b.href=document.baseURI,a.head.appendChild(b)}function f(a){D.initialized||e(),document.body.appendChild(D),a(D.contentDocument),document.body.removeChild(D)}function g(a,b){if(b){var e;if(a.match("@import")&&F){var g=c(a);f(function(a){a.head.appendChild(g.impl),e=Array.prototype.slice.call(g.sheet.cssRules,0),b(e)})}else e=d(a),b(e)}}function h(a){a&&j().appendChild(document.createTextNode(a))}function i(a,b){var d=c(a);d.setAttribute(b,""),d.setAttribute(H,""),document.head.appendChild(d)}function j(){return E||(E=document.createElement("style"),E.setAttribute(H,""),E[H]=!0),E}var k={strictStyling:!1,registry:{},shimStyling:function(a,c,d){var e=this.prepareRoot(a,c,d),f=this.isTypeExtension(d),g=this.makeScopeSelector(c,f),h=b(e,!0);h=this.scopeCssText(h,g),a&&(a.shimmedStyle=h),this.addCssToDocument(h,c)},shimStyle:function(a,b){return this.shimCssText(a.textContent,b)},shimCssText:function(a,b){return a=this.insertDirectives(a),this.scopeCssText(a,b)},makeScopeSelector:function(a,b){return a?b?"[is="+a+"]":a:""},isTypeExtension:function(a){return a&&a.indexOf("-")<0},prepareRoot:function(a,b,c){var d=this.registerRoot(a,b,c);return this.replaceTextInStyles(d.rootStyles,this.insertDirectives),this.removeStyles(a,d.rootStyles),this.strictStyling&&this.applyScopeToContent(a,b),d.scopeStyles},removeStyles:function(a,b){for(var c,d=0,e=b.length;e>d&&(c=b[d]);d++)c.parentNode.removeChild(c)},registerRoot:function(a,b,c){var d=this.registry[b]={root:a,name:b,extendsName:c},e=this.findStyles(a);d.rootStyles=e,d.scopeStyles=d.rootStyles;var f=this.registry[d.extendsName];return f&&(d.scopeStyles=f.scopeStyles.concat(d.scopeStyles)),d},findStyles:function(a){if(!a)return[];var b=a.querySelectorAll("style");return Array.prototype.filter.call(b,function(a){return!a.hasAttribute(I)})},applyScopeToContent:function(a,b){a&&(Array.prototype.forEach.call(a.querySelectorAll("*"),function(a){a.setAttribute(b,"")}),Array.prototype.forEach.call(a.querySelectorAll("template"),function(a){this.applyScopeToContent(a.content,b)},this))},insertDirectives:function(a){return a=this.insertPolyfillDirectivesInCssText(a),this.insertPolyfillRulesInCssText(a)},insertPolyfillDirectivesInCssText:function(a){return a=a.replace(m,function(a,b){return b.slice(0,-2)+"{"}),a.replace(n,function(a,b){return b+" {"})},insertPolyfillRulesInCssText:function(a){return a=a.replace(o,function(a,b){return b.slice(0,-1)}),a.replace(p,function(a,b,c,d){var e=a.replace(b,"").replace(c,"");return d+e})},scopeCssText:function(a,b){var c=this.extractUnscopedRulesFromCssText(a);if(a=this.insertPolyfillHostInCssText(a),a=this.convertColonHost(a),a=this.convertColonHostContext(a),a=this.convertShadowDOMSelectors(a),b){var a,d=this;g(a,function(c){a=d.scopeRules(c,b)})}return a=a+"\n"+c,a.trim()},extractUnscopedRulesFromCssText:function(a){for(var b,c="";b=q.exec(a);)c+=b[1].slice(0,-1)+"\n\n";for(;b=r.exec(a);)c+=b[0].replace(b[2],"").replace(b[1],b[3])+"\n\n";return c},convertColonHost:function(a){return this.convertColonRule(a,v,this.colonHostPartReplacer)},convertColonHostContext:function(a){return this.convertColonRule(a,w,this.colonHostContextPartReplacer)},convertColonRule:function(a,b,c){return a.replace(b,function(a,b,d,e){if(b=A,d){for(var f,g=d.split(","),h=[],i=0,j=g.length;j>i&&(f=g[i]);i++)f=f.trim(),h.push(c(b,f,e));return h.join(",")}return b+e})},colonHostContextPartReplacer:function(a,b,c){return b.match(s)?this.colonHostPartReplacer(a,b,c):a+b+c+", "+b+" "+a+c},colonHostPartReplacer:function(a,b,c){return a+b.replace(s,"")+c},convertShadowDOMSelectors:function(a){for(var b=0;b<C.length;b++)a=a.replace(C[b]," ");return a},scopeRules:function(a,b){var c="";return a&&Array.prototype.forEach.call(a,function(a){if(a.selectorText&&a.style&&void 0!==a.style.cssText)c+=this.scopeSelector(a.selectorText,b,this.strictStyling)+" {\n	",c+=this.propertiesFromRule(a)+"\n}\n\n";else if(a.type===CSSRule.MEDIA_RULE)c+="@media "+a.media.mediaText+" {\n",c+=this.scopeRules(a.cssRules,b),c+="\n}\n\n";else try{a.cssText&&(c+=a.cssText+"\n\n")}catch(d){a.type===CSSRule.KEYFRAMES_RULE&&a.cssRules&&(c+=this.ieSafeCssTextFromKeyFrameRule(a))}},this),c},ieSafeCssTextFromKeyFrameRule:function(a){var b="@keyframes "+a.name+" {";return Array.prototype.forEach.call(a.cssRules,function(a){b+=" "+a.keyText+" {"+a.style.cssText+"}"}),b+=" }"},scopeSelector:function(a,b,c){var d=[],e=a.split(",");return e.forEach(function(a){a=a.trim(),this.selectorNeedsScoping(a,b)&&(a=c&&!a.match(A)?this.applyStrictSelectorScope(a,b):this.applySelectorScope(a,b)),d.push(a)},this),d.join(", ")},selectorNeedsScoping:function(a,b){if(Array.isArray(b))return!0;var c=this.makeScopeMatcher(b);return!a.match(c)},makeScopeMatcher:function(a){return a=a.replace(/\[/g,"\\[").replace(/\]/g,"\\]"),new RegExp("^("+a+")"+x,"m")},applySelectorScope:function(a,b){return Array.isArray(b)?this.applySelectorScopeList(a,b):this.applySimpleSelectorScope(a,b)},applySelectorScopeList:function(a,b){for(var c,d=[],e=0;c=b[e];e++)d.push(this.applySimpleSelectorScope(a,c));return d.join(", ")},applySimpleSelectorScope:function(a,b){return a.match(B)?(a=a.replace(A,b),a.replace(B,b+" ")):b+" "+a},applyStrictSelectorScope:function(a,b){b=b.replace(/\[is=([^\]]*)\]/g,"$1");var c=[" ",">","+","~"],d=a,e="["+b+"]";return c.forEach(function(a){var b=d.split(a);d=b.map(function(a){var b=a.trim().replace(B,"");return b&&c.indexOf(b)<0&&b.indexOf(e)<0&&(a=b.replace(/([^:]*)(:*)(.*)/,"$1"+e+"$2$3")),a}).join(a)}),d},insertPolyfillHostInCssText:function(a){return a.replace(z,t).replace(y,s)},propertiesFromRule:function(a){var b=a.style.cssText;a.style.content&&!a.style.content.match(/['"]+|attr/)&&(b=b.replace(/content:[^;]*;/g,"content: '"+a.style.content+"';"));var c=a.style;for(var d in c)"initial"===c[d]&&(b+=d+": initial; ");return b},replaceTextInStyles:function(a,b){a&&b&&(a instanceof Array||(a=[a]),Array.prototype.forEach.call(a,function(a){a.textContent=b.call(this,a.textContent);
+},this))},addCssToDocument:function(a,b){a.match("@import")?i(a,b):h(a)}},l=/\/\*[^*]*\*+([^\/*][^*]*\*+)*\//gim,m=/\/\*\s*@polyfill ([^*]*\*+([^\/*][^*]*\*+)*\/)([^{]*?){/gim,n=/polyfill-next-selector[^}]*content\:[\s]*?['"](.*?)['"][;\s]*}([^{]*?){/gim,o=/\/\*\s@polyfill-rule([^*]*\*+([^\/*][^*]*\*+)*)\//gim,p=/(polyfill-rule)[^}]*(content\:[\s]*['"](.*?)['"])[;\s]*[^}]*}/gim,q=/\/\*\s@polyfill-unscoped-rule([^*]*\*+([^\/*][^*]*\*+)*)\//gim,r=/(polyfill-unscoped-rule)[^}]*(content\:[\s]*['"](.*?)['"])[;\s]*[^}]*}/gim,s="-shadowcsshost",t="-shadowcsscontext",u=")(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))?([^,{]*)",v=new RegExp("("+s+u,"gim"),w=new RegExp("("+t+u,"gim"),x="([>\\s~+[.,{:][\\s\\S]*)?$",y=/\:host/gim,z=/\:host-context/gim,A=s+"-no-combinator",B=new RegExp(s,"gim"),C=(new RegExp(t,"gim"),[/>>>/g,/::shadow/g,/::content/g,/\/deep\//g,/\/shadow\//g,/\/shadow-deep\//g,/\^\^/g,/\^/g]),D=document.createElement("iframe");D.style.display="none";var E,F=navigator.userAgent.match("Chrome"),G="shim-shadowdom",H="shim-shadowdom-css",I="no-shim";if(window.ShadowDOMPolyfill){h("style { display: none !important; }\n");var J=ShadowDOMPolyfill.wrap(document),K=J.querySelector("head");K.insertBefore(j(),K.childNodes[0]),document.addEventListener("DOMContentLoaded",function(){a.urlResolver;if(window.HTMLImports&&!HTMLImports.useNative){var b="link[rel=stylesheet]["+G+"]",c="style["+G+"]";HTMLImports.importer.documentPreloadSelectors+=","+b,HTMLImports.importer.importsPreloadSelectors+=","+b,HTMLImports.parser.documentSelectors=[HTMLImports.parser.documentSelectors,b,c].join(",");var d=HTMLImports.parser.parseGeneric;HTMLImports.parser.parseGeneric=function(a){if(!a[H]){var b=a.__importElement||a;if(!b.hasAttribute(G))return void d.call(this,a);a.__resource&&(b=a.ownerDocument.createElement("style"),b.textContent=a.__resource),HTMLImports.path.resolveUrlsInStyle(b,a.href),b.textContent=k.shimStyle(b),b.removeAttribute(G,""),b.setAttribute(H,""),b[H]=!0,b.parentNode!==K&&(a.parentNode===K?K.replaceChild(b,a):this.addElementToDocument(b)),b.__importParsed=!0,this.markParsingComplete(a),this.parseNext()}};var e=HTMLImports.parser.hasResource;HTMLImports.parser.hasResource=function(a){return"link"===a.localName&&"stylesheet"===a.rel&&a.hasAttribute(G)?a.__resource:e.call(this,a)}}})}a.ShadowCSS=k}(window.WebComponents)),function(a){window.ShadowDOMPolyfill?(window.wrap=ShadowDOMPolyfill.wrapIfNeeded,window.unwrap=ShadowDOMPolyfill.unwrapIfNeeded):window.wrap=window.unwrap=function(a){return a}}(window.WebComponents),function(a){"use strict";function b(a){return void 0!==m[a]}function c(){h.call(this),this._isInvalid=!0}function d(a){return""==a&&c.call(this),a.toLowerCase()}function e(a){var b=a.charCodeAt(0);return b>32&&127>b&&-1==[34,35,60,62,63,96].indexOf(b)?a:encodeURIComponent(a)}function f(a){var b=a.charCodeAt(0);return b>32&&127>b&&-1==[34,35,60,62,96].indexOf(b)?a:encodeURIComponent(a)}function g(a,g,h){function i(a){t.push(a)}var j=g||"scheme start",k=0,l="",r=!1,s=!1,t=[];a:for(;(a[k-1]!=o||0==k)&&!this._isInvalid;){var u=a[k];switch(j){case"scheme start":if(!u||!p.test(u)){if(g){i("Invalid scheme.");break a}l="",j="no scheme";continue}l+=u.toLowerCase(),j="scheme";break;case"scheme":if(u&&q.test(u))l+=u.toLowerCase();else{if(":"!=u){if(g){if(o==u)break a;i("Code point not allowed in scheme: "+u);break a}l="",k=0,j="no scheme";continue}if(this._scheme=l,l="",g)break a;b(this._scheme)&&(this._isRelative=!0),j="file"==this._scheme?"relative":this._isRelative&&h&&h._scheme==this._scheme?"relative or authority":this._isRelative?"authority first slash":"scheme data"}break;case"scheme data":"?"==u?(this._query="?",j="query"):"#"==u?(this._fragment="#",j="fragment"):o!=u&&"	"!=u&&"\n"!=u&&"\r"!=u&&(this._schemeData+=e(u));break;case"no scheme":if(h&&b(h._scheme)){j="relative";continue}i("Missing scheme."),c.call(this);break;case"relative or authority":if("/"!=u||"/"!=a[k+1]){i("Expected /, got: "+u),j="relative";continue}j="authority ignore slashes";break;case"relative":if(this._isRelative=!0,"file"!=this._scheme&&(this._scheme=h._scheme),o==u){this._host=h._host,this._port=h._port,this._path=h._path.slice(),this._query=h._query,this._username=h._username,this._password=h._password;break a}if("/"==u||"\\"==u)"\\"==u&&i("\\ is an invalid code point."),j="relative slash";else if("?"==u)this._host=h._host,this._port=h._port,this._path=h._path.slice(),this._query="?",this._username=h._username,this._password=h._password,j="query";else{if("#"!=u){var v=a[k+1],w=a[k+2];("file"!=this._scheme||!p.test(u)||":"!=v&&"|"!=v||o!=w&&"/"!=w&&"\\"!=w&&"?"!=w&&"#"!=w)&&(this._host=h._host,this._port=h._port,this._username=h._username,this._password=h._password,this._path=h._path.slice(),this._path.pop()),j="relative path";continue}this._host=h._host,this._port=h._port,this._path=h._path.slice(),this._query=h._query,this._fragment="#",this._username=h._username,this._password=h._password,j="fragment"}break;case"relative slash":if("/"!=u&&"\\"!=u){"file"!=this._scheme&&(this._host=h._host,this._port=h._port,this._username=h._username,this._password=h._password),j="relative path";continue}"\\"==u&&i("\\ is an invalid code point."),j="file"==this._scheme?"file host":"authority ignore slashes";break;case"authority first slash":if("/"!=u){i("Expected '/', got: "+u),j="authority ignore slashes";continue}j="authority second slash";break;case"authority second slash":if(j="authority ignore slashes","/"!=u){i("Expected '/', got: "+u);continue}break;case"authority ignore slashes":if("/"!=u&&"\\"!=u){j="authority";continue}i("Expected authority, got: "+u);break;case"authority":if("@"==u){r&&(i("@ already seen."),l+="%40"),r=!0;for(var x=0;x<l.length;x++){var y=l[x];if("	"!=y&&"\n"!=y&&"\r"!=y)if(":"!=y||null!==this._password){var z=e(y);null!==this._password?this._password+=z:this._username+=z}else this._password="";else i("Invalid whitespace in authority.")}l=""}else{if(o==u||"/"==u||"\\"==u||"?"==u||"#"==u){k-=l.length,l="",j="host";continue}l+=u}break;case"file host":if(o==u||"/"==u||"\\"==u||"?"==u||"#"==u){2!=l.length||!p.test(l[0])||":"!=l[1]&&"|"!=l[1]?0==l.length?j="relative path start":(this._host=d.call(this,l),l="",j="relative path start"):j="relative path";continue}"	"==u||"\n"==u||"\r"==u?i("Invalid whitespace in file host."):l+=u;break;case"host":case"hostname":if(":"!=u||s){if(o==u||"/"==u||"\\"==u||"?"==u||"#"==u){if(this._host=d.call(this,l),l="",j="relative path start",g)break a;continue}"	"!=u&&"\n"!=u&&"\r"!=u?("["==u?s=!0:"]"==u&&(s=!1),l+=u):i("Invalid code point in host/hostname: "+u)}else if(this._host=d.call(this,l),l="",j="port","hostname"==g)break a;break;case"port":if(/[0-9]/.test(u))l+=u;else{if(o==u||"/"==u||"\\"==u||"?"==u||"#"==u||g){if(""!=l){var A=parseInt(l,10);A!=m[this._scheme]&&(this._port=A+""),l=""}if(g)break a;j="relative path start";continue}"	"==u||"\n"==u||"\r"==u?i("Invalid code point in port: "+u):c.call(this)}break;case"relative path start":if("\\"==u&&i("'\\' not allowed in path."),j="relative path","/"!=u&&"\\"!=u)continue;break;case"relative path":if(o!=u&&"/"!=u&&"\\"!=u&&(g||"?"!=u&&"#"!=u))"	"!=u&&"\n"!=u&&"\r"!=u&&(l+=e(u));else{"\\"==u&&i("\\ not allowed in relative path.");var B;(B=n[l.toLowerCase()])&&(l=B),".."==l?(this._path.pop(),"/"!=u&&"\\"!=u&&this._path.push("")):"."==l&&"/"!=u&&"\\"!=u?this._path.push(""):"."!=l&&("file"==this._scheme&&0==this._path.length&&2==l.length&&p.test(l[0])&&"|"==l[1]&&(l=l[0]+":"),this._path.push(l)),l="","?"==u?(this._query="?",j="query"):"#"==u&&(this._fragment="#",j="fragment")}break;case"query":g||"#"!=u?o!=u&&"	"!=u&&"\n"!=u&&"\r"!=u&&(this._query+=f(u)):(this._fragment="#",j="fragment");break;case"fragment":o!=u&&"	"!=u&&"\n"!=u&&"\r"!=u&&(this._fragment+=u)}k++}}function h(){this._scheme="",this._schemeData="",this._username="",this._password=null,this._host="",this._port="",this._path=[],this._query="",this._fragment="",this._isInvalid=!1,this._isRelative=!1}function i(a,b){void 0===b||b instanceof i||(b=new i(String(b))),this._url=a,h.call(this);var c=a.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g,"");g.call(this,c,null,b)}var j=!1;if(!a.forceJURL)try{var k=new URL("b","http://a");k.pathname="c%20d",j="http://a/c%20d"===k.href}catch(l){}if(!j){var m=Object.create(null);m.ftp=21,m.file=0,m.gopher=70,m.http=80,m.https=443,m.ws=80,m.wss=443;var n=Object.create(null);n["%2e"]=".",n[".%2e"]="..",n["%2e."]="..",n["%2e%2e"]="..";var o=void 0,p=/[a-zA-Z]/,q=/[a-zA-Z0-9\+\-\.]/;i.prototype={toString:function(){return this.href},get href(){if(this._isInvalid)return this._url;var a="";return(""!=this._username||null!=this._password)&&(a=this._username+(null!=this._password?":"+this._password:"")+"@"),this.protocol+(this._isRelative?"//"+a+this.host:"")+this.pathname+this._query+this._fragment},set href(a){h.call(this),g.call(this,a)},get protocol(){return this._scheme+":"},set protocol(a){this._isInvalid||g.call(this,a+":","scheme start")},get host(){return this._isInvalid?"":this._port?this._host+":"+this._port:this._host},set host(a){!this._isInvalid&&this._isRelative&&g.call(this,a,"host")},get hostname(){return this._host},set hostname(a){!this._isInvalid&&this._isRelative&&g.call(this,a,"hostname")},get port(){return this._port},set port(a){!this._isInvalid&&this._isRelative&&g.call(this,a,"port")},get pathname(){return this._isInvalid?"":this._isRelative?"/"+this._path.join("/"):this._schemeData},set pathname(a){!this._isInvalid&&this._isRelative&&(this._path=[],g.call(this,a,"relative path start"))},get search(){return this._isInvalid||!this._query||"?"==this._query?"":this._query},set search(a){!this._isInvalid&&this._isRelative&&(this._query="?","?"==a[0]&&(a=a.slice(1)),g.call(this,a,"query"))},get hash(){return this._isInvalid||!this._fragment||"#"==this._fragment?"":this._fragment},set hash(a){this._isInvalid||(this._fragment="#","#"==a[0]&&(a=a.slice(1)),g.call(this,a,"fragment"))},get origin(){var a;if(this._isInvalid||!this._scheme)return"";switch(this._scheme){case"data":case"file":case"javascript":case"mailto":return"null"}return a=this.host,a?this._scheme+"://"+a:""}};var r=a.URL;r&&(i.createObjectURL=function(a){return r.createObjectURL.apply(r,arguments)},i.revokeObjectURL=function(a){r.revokeObjectURL(a)}),a.URL=i}}(self),function(a){function b(a){u.push(a),t||(t=!0,p(d))}function c(a){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(a)||a}function d(){t=!1;var a=u;u=[],a.sort(function(a,b){return a.uid_-b.uid_});var b=!1;a.forEach(function(a){var c=a.takeRecords();e(a),c.length&&(a.callback_(c,a),b=!0)}),b&&d()}function e(a){a.nodes_.forEach(function(b){var c=q.get(b);c&&c.forEach(function(b){b.observer===a&&b.removeTransientObservers()})})}function f(a,b){for(var c=a;c;c=c.parentNode){var d=q.get(c);if(d)for(var e=0;e<d.length;e++){var f=d[e],g=f.options;if(c===a||g.subtree){var h=b(g);h&&f.enqueue(h)}}}}function g(a){this.callback_=a,this.nodes_=[],this.records_=[],this.uid_=++v}function h(a,b){this.type=a,this.target=b,this.addedNodes=[],this.removedNodes=[],this.previousSibling=null,this.nextSibling=null,this.attributeName=null,this.attributeNamespace=null,this.oldValue=null}function i(a){var b=new h(a.type,a.target);return b.addedNodes=a.addedNodes.slice(),b.removedNodes=a.removedNodes.slice(),b.previousSibling=a.previousSibling,b.nextSibling=a.nextSibling,b.attributeName=a.attributeName,b.attributeNamespace=a.attributeNamespace,b.oldValue=a.oldValue,b}function j(a,b){return w=new h(a,b)}function k(a){return x?x:(x=i(w),x.oldValue=a,x)}function l(){w=x=void 0}function m(a){return a===x||a===w}function n(a,b){return a===b?a:x&&m(a)?x:null}function o(a,b,c){this.observer=a,this.target=b,this.options=c,this.transientObservedNodes=[]}if(!a.JsMutationObserver){var p,q=new WeakMap;if(/Trident|Edge/.test(navigator.userAgent))p=setTimeout;else if(window.setImmediate)p=window.setImmediate;else{var r=[],s=String(Math.random());window.addEventListener("message",function(a){if(a.data===s){var b=r;r=[],b.forEach(function(a){a()})}}),p=function(a){r.push(a),window.postMessage(s,"*")}}var t=!1,u=[],v=0;g.prototype={observe:function(a,b){if(a=c(a),!b.childList&&!b.attributes&&!b.characterData||b.attributeOldValue&&!b.attributes||b.attributeFilter&&b.attributeFilter.length&&!b.attributes||b.characterDataOldValue&&!b.characterData)throw new SyntaxError;var d=q.get(a);d||q.set(a,d=[]);for(var e,f=0;f<d.length;f++)if(d[f].observer===this){e=d[f],e.removeListeners(),e.options=b;break}e||(e=new o(this,a,b),d.push(e),this.nodes_.push(a)),e.addListeners()},disconnect:function(){this.nodes_.forEach(function(a){for(var b=q.get(a),c=0;c<b.length;c++){var d=b[c];if(d.observer===this){d.removeListeners(),b.splice(c,1);break}}},this),this.records_=[]},takeRecords:function(){var a=this.records_;return this.records_=[],a}};var w,x;o.prototype={enqueue:function(a){var c=this.observer.records_,d=c.length;if(c.length>0){var e=c[d-1],f=n(e,a);if(f)return void(c[d-1]=f)}else b(this.observer);c[d]=a},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(a){var b=this.options;b.attributes&&a.addEventListener("DOMAttrModified",this,!0),b.characterData&&a.addEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.addEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(a){var b=this.options;b.attributes&&a.removeEventListener("DOMAttrModified",this,!0),b.characterData&&a.removeEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.removeEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(a){if(a!==this.target){this.addListeners_(a),this.transientObservedNodes.push(a);var b=q.get(a);b||q.set(a,b=[]),b.push(this)}},removeTransientObservers:function(){var a=this.transientObservedNodes;this.transientObservedNodes=[],a.forEach(function(a){this.removeListeners_(a);for(var b=q.get(a),c=0;c<b.length;c++)if(b[c]===this){b.splice(c,1);break}},this)},handleEvent:function(a){switch(a.stopImmediatePropagation(),a.type){case"DOMAttrModified":var b=a.attrName,c=a.relatedNode.namespaceURI,d=a.target,e=new j("attributes",d);e.attributeName=b,e.attributeNamespace=c;var g=a.attrChange===MutationEvent.ADDITION?null:a.prevValue;f(d,function(a){return!a.attributes||a.attributeFilter&&a.attributeFilter.length&&-1===a.attributeFilter.indexOf(b)&&-1===a.attributeFilter.indexOf(c)?void 0:a.attributeOldValue?k(g):e});break;case"DOMCharacterDataModified":var d=a.target,e=j("characterData",d),g=a.prevValue;f(d,function(a){return a.characterData?a.characterDataOldValue?k(g):e:void 0});break;case"DOMNodeRemoved":this.addTransientObserver(a.target);case"DOMNodeInserted":var h,i,m=a.target;"DOMNodeInserted"===a.type?(h=[m],i=[]):(h=[],i=[m]);var n=m.previousSibling,o=m.nextSibling,e=j("childList",a.target.parentNode);e.addedNodes=h,e.removedNodes=i,e.previousSibling=n,e.nextSibling=o,f(a.relatedNode,function(a){return a.childList?e:void 0})}l()}},a.JsMutationObserver=g,a.MutationObserver||(a.MutationObserver=g,g._isPolyfilled=!0)}}(self),function(a){"use strict";if(!window.performance){var b=Date.now();window.performance={now:function(){return Date.now()-b}}}window.requestAnimationFrame||(window.requestAnimationFrame=function(){var a=window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame;return a?function(b){return a(function(){b(performance.now())})}:function(a){return window.setTimeout(a,1e3/60)}}()),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(){return window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||function(a){clearTimeout(a)}}());var c=function(){var a=document.createEvent("Event");return a.initEvent("foo",!0,!0),a.preventDefault(),a.defaultPrevented}();if(!c){var d=Event.prototype.preventDefault;Event.prototype.preventDefault=function(){this.cancelable&&(d.call(this),Object.defineProperty(this,"defaultPrevented",{get:function(){return!0},configurable:!0}))}}var e=/Trident/.test(navigator.userAgent);if((!window.CustomEvent||e&&"function"!=typeof window.CustomEvent)&&(window.CustomEvent=function(a,b){b=b||{};var c=document.createEvent("CustomEvent");return c.initCustomEvent(a,Boolean(b.bubbles),Boolean(b.cancelable),b.detail),c},window.CustomEvent.prototype=window.Event.prototype),!window.Event||e&&"function"!=typeof window.Event){var f=window.Event;window.Event=function(a,b){b=b||{};var c=document.createEvent("Event");return c.initEvent(a,Boolean(b.bubbles),Boolean(b.cancelable)),c},window.Event.prototype=f.prototype}}(window.WebComponents),window.HTMLImports=window.HTMLImports||{flags:{}},function(a){function b(a,b){b=b||o,d(function(){f(a,b)},b)}function c(a){return"complete"===a.readyState||a.readyState===r}function d(a,b){if(c(b))a&&a();else{var e=function(){("complete"===b.readyState||b.readyState===r)&&(b.removeEventListener(s,e),d(a,b))};b.addEventListener(s,e)}}function e(a){a.target.__loaded=!0}function f(a,b){function c(){i==j&&a&&a({allImports:h,loadedImports:k,errorImports:l})}function d(a){e(a),k.push(this),i++,c()}function f(a){l.push(this),i++,c()}var h=b.querySelectorAll("link[rel=import]"),i=0,j=h.length,k=[],l=[];if(j)for(var m,n=0;j>n&&(m=h[n]);n++)g(m)?(i++,c()):(m.addEventListener("load",d),m.addEventListener("error",f));else c()}function g(a){return l?a.__loaded||a["import"]&&"loading"!==a["import"].readyState:a.__importParsed}function h(a){for(var b,c=0,d=a.length;d>c&&(b=a[c]);c++)i(b)&&j(b)}function i(a){return"link"===a.localName&&"import"===a.rel}function j(a){var b=a["import"];b?e({target:a}):(a.addEventListener("load",e),a.addEventListener("error",e))}var k="import",l=Boolean(k in document.createElement("link")),m=Boolean(window.ShadowDOMPolyfill),n=function(a){return m?window.ShadowDOMPolyfill.wrapIfNeeded(a):a},o=n(document),p={get:function(){var a=window.HTMLImports.currentScript||document.currentScript||("complete"!==document.readyState?document.scripts[document.scripts.length-1]:null);return n(a)},configurable:!0};Object.defineProperty(document,"_currentScript",p),Object.defineProperty(o,"_currentScript",p);var q=/Trident/.test(navigator.userAgent),r=q?"complete":"interactive",s="readystatechange";l&&(new MutationObserver(function(a){for(var b,c=0,d=a.length;d>c&&(b=a[c]);c++)b.addedNodes&&h(b.addedNodes)}).observe(document.head,{childList:!0}),function(){if("loading"===document.readyState)for(var a,b=document.querySelectorAll("link[rel=import]"),c=0,d=b.length;d>c&&(a=b[c]);c++)j(a)}()),b(function(a){window.HTMLImports.ready=!0,window.HTMLImports.readyTime=(new Date).getTime();var b=o.createEvent("CustomEvent");b.initCustomEvent("HTMLImportsLoaded",!0,!0,a),o.dispatchEvent(b)}),a.IMPORT_LINK_TYPE=k,a.useNative=l,a.rootDocument=o,a.whenReady=b,a.isIE=q}(window.HTMLImports),function(a){var b=[],c=function(a){b.push(a)},d=function(){b.forEach(function(b){b(a)})};a.addModule=c,a.initializeModules=d}(window.HTMLImports),window.HTMLImports.addModule(function(a){var b=/(url\()([^)]*)(\))/g,c=/(@import[\s]+(?!url\())([^;]*)(;)/g,d={resolveUrlsInStyle:function(a,b){var c=a.ownerDocument,d=c.createElement("a");return a.textContent=this.resolveUrlsInCssText(a.textContent,b,d),a},resolveUrlsInCssText:function(a,d,e){var f=this.replaceUrls(a,e,d,b);return f=this.replaceUrls(f,e,d,c)},replaceUrls:function(a,b,c,d){return a.replace(d,function(a,d,e,f){var g=e.replace(/["']/g,"");return c&&(g=new URL(g,c).href),b.href=g,g=b.href,d+"'"+g+"'"+f})}};a.path=d}),window.HTMLImports.addModule(function(a){var b={async:!0,ok:function(a){return a.status>=200&&a.status<300||304===a.status||0===a.status},load:function(c,d,e){var f=new XMLHttpRequest;return(a.flags.debug||a.flags.bust)&&(c+="?"+Math.random()),f.open("GET",c,b.async),f.addEventListener("readystatechange",function(a){if(4===f.readyState){var c=null;try{var g=f.getResponseHeader("Location");g&&(c="/"===g.substr(0,1)?location.origin+g:g)}catch(a){console.error(a.message)}d.call(e,!b.ok(f)&&f,f.response||f.responseText,c)}}),f.send(),f},loadDocument:function(a,b,c){this.load(a,b,c).responseType="document"}};a.xhr=b}),window.HTMLImports.addModule(function(a){var b=a.xhr,c=a.flags,d=function(a,b){this.cache={},this.onload=a,this.oncomplete=b,this.inflight=0,this.pending={}};d.prototype={addNodes:function(a){this.inflight+=a.length;for(var b,c=0,d=a.length;d>c&&(b=a[c]);c++)this.require(b);this.checkDone()},addNode:function(a){this.inflight++,this.require(a),this.checkDone()},require:function(a){var b=a.src||a.href;a.__nodeUrl=b,this.dedupe(b,a)||this.fetch(b,a)},dedupe:function(a,b){if(this.pending[a])return this.pending[a].push(b),!0;return this.cache[a]?(this.onload(a,b,this.cache[a]),this.tail(),!0):(this.pending[a]=[b],!1)},fetch:function(a,d){if(c.load&&console.log("fetch",a,d),a)if(a.match(/^data:/)){var e=a.split(","),f=e[0],g=e[1];g=f.indexOf(";base64")>-1?atob(g):decodeURIComponent(g),setTimeout(function(){this.receive(a,d,null,g)}.bind(this),0)}else{var h=function(b,c,e){this.receive(a,d,b,c,e)}.bind(this);b.load(a,h)}else setTimeout(function(){this.receive(a,d,{error:"href must be specified"},null)}.bind(this),0)},receive:function(a,b,c,d,e){this.cache[a]=d;for(var f,g=this.pending[a],h=0,i=g.length;i>h&&(f=g[h]);h++)this.onload(a,f,d,c,e),this.tail();this.pending[a]=null},tail:function(){--this.inflight,this.checkDone()},checkDone:function(){this.inflight||this.oncomplete()}},a.Loader=d}),window.HTMLImports.addModule(function(a){var b=function(a){this.addCallback=a,this.mo=new MutationObserver(this.handler.bind(this))};b.prototype={handler:function(a){for(var b,c=0,d=a.length;d>c&&(b=a[c]);c++)"childList"===b.type&&b.addedNodes.length&&this.addedNodes(b.addedNodes)},addedNodes:function(a){this.addCallback&&this.addCallback(a);for(var b,c=0,d=a.length;d>c&&(b=a[c]);c++)b.children&&b.children.length&&this.addedNodes(b.children)},observe:function(a){this.mo.observe(a,{childList:!0,subtree:!0})}},a.Observer=b}),window.HTMLImports.addModule(function(a){function b(a){return"link"===a.localName&&a.rel===k}function c(a){var b=d(a);return"data:text/javascript;charset=utf-8,"+encodeURIComponent(b)}function d(a){return a.textContent+e(a)}function e(a){var b=a.ownerDocument;b.__importedScripts=b.__importedScripts||0;var c=a.ownerDocument.baseURI,d=b.__importedScripts?"-"+b.__importedScripts:"";return b.__importedScripts++,"\n//# sourceURL="+c+d+".js\n"}function f(a){var b=a.ownerDocument.createElement("style");return b.textContent=a.textContent,g.resolveUrlsInStyle(b),b}var g=a.path,h=a.rootDocument,i=a.flags,j=a.isIE,k=a.IMPORT_LINK_TYPE,l="link[rel="+k+"]",m={documentSelectors:l,importsSelectors:[l,"link[rel=stylesheet]:not([type])","style:not([type])","script:not([type])",'script[type="application/javascript"]','script[type="text/javascript"]'].join(","),map:{link:"parseLink",script:"parseScript",style:"parseStyle"},dynamicElements:[],parseNext:function(){var a=this.nextToParse();a&&this.parse(a)},parse:function(a){if(this.isParsed(a))return void(i.parse&&console.log("[%s] is already parsed",a.localName));var b=this[this.map[a.localName]];b&&(this.markParsing(a),b.call(this,a))},parseDynamic:function(a,b){this.dynamicElements.push(a),b||this.parseNext()},markParsing:function(a){i.parse&&console.log("parsing",a),this.parsingElement=a},markParsingComplete:function(a){a.__importParsed=!0,this.markDynamicParsingComplete(a),a.__importElement&&(a.__importElement.__importParsed=!0,this.markDynamicParsingComplete(a.__importElement)),this.parsingElement=null,i.parse&&console.log("completed",a)},markDynamicParsingComplete:function(a){var b=this.dynamicElements.indexOf(a);b>=0&&this.dynamicElements.splice(b,1)},parseImport:function(a){if(a["import"]=a.__doc,window.HTMLImports.__importsParsingHook&&window.HTMLImports.__importsParsingHook(a),a["import"]&&(a["import"].__importParsed=!0),this.markParsingComplete(a),a.__resource&&!a.__error?a.dispatchEvent(new CustomEvent("load",{bubbles:!1})):a.dispatchEvent(new CustomEvent("error",{bubbles:!1})),a.__pending)for(var b;a.__pending.length;)b=a.__pending.shift(),b&&b({target:a});this.parseNext()},parseLink:function(a){b(a)?this.parseImport(a):(a.href=a.href,this.parseGeneric(a))},parseStyle:function(a){var b=a;a=f(a),b.__appliedElement=a,a.__importElement=b,this.parseGeneric(a)},parseGeneric:function(a){this.trackElement(a),this.addElementToDocument(a)},rootImportForElement:function(a){for(var b=a;b.ownerDocument.__importLink;)b=b.ownerDocument.__importLink;return b},addElementToDocument:function(a){var b=this.rootImportForElement(a.__importElement||a);b.parentNode.insertBefore(a,b)},trackElement:function(a,b){var c=this,d=function(e){a.removeEventListener("load",d),a.removeEventListener("error",d),b&&b(e),c.markParsingComplete(a),c.parseNext()};if(a.addEventListener("load",d),a.addEventListener("error",d),j&&"style"===a.localName){var e=!1;if(-1==a.textContent.indexOf("@import"))e=!0;else if(a.sheet){e=!0;for(var f,g=a.sheet.cssRules,h=g?g.length:0,i=0;h>i&&(f=g[i]);i++)f.type===CSSRule.IMPORT_RULE&&(e=e&&Boolean(f.styleSheet))}e&&setTimeout(function(){a.dispatchEvent(new CustomEvent("load",{bubbles:!1}))})}},parseScript:function(b){var d=document.createElement("script");d.__importElement=b,d.src=b.src?b.src:c(b),a.currentScript=b,this.trackElement(d,function(b){d.parentNode&&d.parentNode.removeChild(d),a.currentScript=null}),this.addElementToDocument(d)},nextToParse:function(){return this._mayParse=[],!this.parsingElement&&(this.nextToParseInDoc(h)||this.nextToParseDynamic())},nextToParseInDoc:function(a,c){if(a&&this._mayParse.indexOf(a)<0){this._mayParse.push(a);for(var d,e=a.querySelectorAll(this.parseSelectorsForNode(a)),f=0,g=e.length;g>f&&(d=e[f]);f++)if(!this.isParsed(d))return this.hasResource(d)?b(d)?this.nextToParseInDoc(d.__doc,d):d:void 0}return c},nextToParseDynamic:function(){return this.dynamicElements[0]},parseSelectorsForNode:function(a){var b=a.ownerDocument||a;return b===h?this.documentSelectors:this.importsSelectors},isParsed:function(a){return a.__importParsed},needsDynamicParsing:function(a){return this.dynamicElements.indexOf(a)>=0},hasResource:function(a){return b(a)&&void 0===a.__doc?!1:!0}};a.parser=m,a.IMPORT_SELECTOR=l}),window.HTMLImports.addModule(function(a){function b(a){return c(a,g)}function c(a,b){return"link"===a.localName&&a.getAttribute("rel")===b}function d(a){return!!Object.getOwnPropertyDescriptor(a,"baseURI")}function e(a,b){var c=document.implementation.createHTMLDocument(g);c._URL=b;var e=c.createElement("base");e.setAttribute("href",b),c.baseURI||d(c)||Object.defineProperty(c,"baseURI",{value:b});var f=c.createElement("meta");return f.setAttribute("charset","utf-8"),c.head.appendChild(f),c.head.appendChild(e),c.body.innerHTML=a,window.HTMLTemplateElement&&HTMLTemplateElement.bootstrap&&HTMLTemplateElement.bootstrap(c),c}var f=a.flags,g=a.IMPORT_LINK_TYPE,h=a.IMPORT_SELECTOR,i=a.rootDocument,j=a.Loader,k=a.Observer,l=a.parser,m={documents:{},documentPreloadSelectors:h,importsPreloadSelectors:[h].join(","),loadNode:function(a){n.addNode(a)},loadSubtree:function(a){var b=this.marshalNodes(a);n.addNodes(b)},marshalNodes:function(a){return a.querySelectorAll(this.loadSelectorsForNode(a))},loadSelectorsForNode:function(a){var b=a.ownerDocument||a;return b===i?this.documentPreloadSelectors:this.importsPreloadSelectors},loaded:function(a,c,d,g,h){if(f.load&&console.log("loaded",a,c),c.__resource=d,c.__error=g,b(c)){var i=this.documents[a];void 0===i&&(i=g?null:e(d,h||a),i&&(i.__importLink=c,this.bootDocument(i)),this.documents[a]=i),c.__doc=i}l.parseNext()},bootDocument:function(a){this.loadSubtree(a),this.observer.observe(a),l.parseNext()},loadedAll:function(){l.parseNext()}},n=new j(m.loaded.bind(m),m.loadedAll.bind(m));if(m.observer=new k,!document.baseURI){var o={get:function(){var a=document.querySelector("base");return a?a.href:window.location.href},configurable:!0};Object.defineProperty(document,"baseURI",o),Object.defineProperty(i,"baseURI",o)}a.importer=m,a.importLoader=n}),window.HTMLImports.addModule(function(a){var b=a.parser,c=a.importer,d={added:function(a){for(var d,e,f,g,h=0,i=a.length;i>h&&(g=a[h]);h++)d||(d=g.ownerDocument,e=b.isParsed(d)),f=this.shouldLoadNode(g),f&&c.loadNode(g),this.shouldParseNode(g)&&e&&b.parseDynamic(g,f)},shouldLoadNode:function(a){return 1===a.nodeType&&e.call(a,c.loadSelectorsForNode(a))},shouldParseNode:function(a){return 1===a.nodeType&&e.call(a,b.parseSelectorsForNode(a))}};c.observer.addCallback=d.added.bind(d);var e=HTMLElement.prototype.matches||HTMLElement.prototype.matchesSelector||HTMLElement.prototype.webkitMatchesSelector||HTMLElement.prototype.mozMatchesSelector||HTMLElement.prototype.msMatchesSelector}),function(a){function b(){window.HTMLImports.importer.bootDocument(d)}var c=a.initializeModules;a.isIE;if(!a.useNative){c();var d=a.rootDocument;"complete"===document.readyState||"interactive"===document.readyState&&!window.attachEvent?b():document.addEventListener("DOMContentLoaded",b)}}(window.HTMLImports),window.CustomElements=window.CustomElements||{flags:{}},function(a){var b=a.flags,c=[],d=function(a){c.push(a)},e=function(){c.forEach(function(b){b(a)})};a.addModule=d,a.initializeModules=e,a.hasNative=Boolean(document.registerElement),a.isIE=/Trident/.test(navigator.userAgent),a.useNative=!b.register&&a.hasNative&&!window.ShadowDOMPolyfill&&(!window.HTMLImports||window.HTMLImports.useNative)}(window.CustomElements),window.CustomElements.addModule(function(a){function b(a,b){c(a,function(a){return b(a)?!0:void d(a,b)}),d(a,b)}function c(a,b,d){var e=a.firstElementChild;if(!e)for(e=a.firstChild;e&&e.nodeType!==Node.ELEMENT_NODE;)e=e.nextSibling;for(;e;)b(e,d)!==!0&&c(e,b,d),e=e.nextElementSibling;return null}function d(a,c){for(var d=a.shadowRoot;d;)b(d,c),d=d.olderShadowRoot}function e(a,b){f(a,b,[])}function f(a,b,c){if(a=window.wrap(a),!(c.indexOf(a)>=0)){c.push(a);for(var d,e=a.querySelectorAll("link[rel="+g+"]"),h=0,i=e.length;i>h&&(d=e[h]);h++)d["import"]&&f(d["import"],b,c);b(a)}}var g=window.HTMLImports?window.HTMLImports.IMPORT_LINK_TYPE:"none";a.forDocumentTree=e,a.forSubtree=b}),window.CustomElements.addModule(function(a){function b(a,b){return c(a,b)||d(a,b)}function c(b,c){return a.upgrade(b,c)?!0:void(c&&g(b))}function d(a,b){t(a,function(a){return c(a,b)?!0:void 0})}function e(a){x.push(a),w||(w=!0,setTimeout(f))}function f(){w=!1;for(var a,b=x,c=0,d=b.length;d>c&&(a=b[c]);c++)a();x=[]}function g(a){v?e(function(){h(a)}):h(a)}function h(a){a.__upgraded__&&!a.__attached&&(a.__attached=!0,a.attachedCallback&&a.attachedCallback())}function i(a){j(a),t(a,function(a){j(a)})}function j(a){v?e(function(){k(a)}):k(a)}function k(a){a.__upgraded__&&a.__attached&&(a.__attached=!1,a.detachedCallback&&a.detachedCallback())}function l(a){for(var b=a,c=window.wrap(document);b;){if(b==c)return!0;b=b.parentNode||b.nodeType===Node.DOCUMENT_FRAGMENT_NODE&&b.host}}function m(a){if(a.shadowRoot&&!a.shadowRoot.__watched){s.dom&&console.log("watching shadow-root for: ",a.localName);for(var b=a.shadowRoot;b;)p(b),b=b.olderShadowRoot}}function n(a,c){if(s.dom){var d=c[0];if(d&&"childList"===d.type&&d.addedNodes&&d.addedNodes){for(var e=d.addedNodes[0];e&&e!==document&&!e.host;)e=e.parentNode;var f=e&&(e.URL||e._URL||e.host&&e.host.localName)||"";f=f.split("/?").shift().split("/").pop()}console.group("mutations (%d) [%s]",c.length,f||"")}var g=l(a);c.forEach(function(a){"childList"===a.type&&(y(a.addedNodes,function(a){a.localName&&b(a,g)}),y(a.removedNodes,function(a){a.localName&&i(a)}))}),s.dom&&console.groupEnd()}function o(a){for(a=window.wrap(a),a||(a=window.wrap(document));a.parentNode;)a=a.parentNode;var b=a.__observer;b&&(n(a,b.takeRecords()),f())}function p(a){if(!a.__observer){var b=new MutationObserver(n.bind(this,a));b.observe(a,{childList:!0,subtree:!0}),a.__observer=b}}function q(a){a=window.wrap(a),s.dom&&console.group("upgradeDocument: ",a.baseURI.split("/").pop());
+var c=a===window.wrap(document);b(a,c),p(a),s.dom&&console.groupEnd()}function r(a){u(a,q)}var s=a.flags,t=a.forSubtree,u=a.forDocumentTree,v=window.MutationObserver._isPolyfilled&&s["throttle-attached"];a.hasPolyfillMutations=v,a.hasThrottledAttached=v;var w=!1,x=[],y=Array.prototype.forEach.call.bind(Array.prototype.forEach),z=Element.prototype.createShadowRoot;z&&(Element.prototype.createShadowRoot=function(){var a=z.call(this);return window.CustomElements.watchShadow(this),a}),a.watchShadow=m,a.upgradeDocumentTree=r,a.upgradeDocument=q,a.upgradeSubtree=d,a.upgradeAll=b,a.attached=g,a.takeRecords=o}),window.CustomElements.addModule(function(a){function b(b,d){if("template"===b.localName&&window.HTMLTemplateElement&&HTMLTemplateElement.decorate&&HTMLTemplateElement.decorate(b),!b.__upgraded__&&b.nodeType===Node.ELEMENT_NODE){var e=b.getAttribute("is"),f=a.getRegisteredDefinition(b.localName)||a.getRegisteredDefinition(e);if(f&&(e&&f.tag==b.localName||!e&&!f["extends"]))return c(b,f,d)}}function c(b,c,e){return g.upgrade&&console.group("upgrade:",b.localName),c.is&&b.setAttribute("is",c.is),d(b,c),b.__upgraded__=!0,f(b),e&&a.attached(b),a.upgradeSubtree(b,e),g.upgrade&&console.groupEnd(),b}function d(a,b){Object.__proto__?a.__proto__=b.prototype:(e(a,b.prototype,b["native"]),a.__proto__=b.prototype)}function e(a,b,c){for(var d={},e=b;e!==c&&e!==HTMLElement.prototype;){for(var f,g=Object.getOwnPropertyNames(e),h=0;f=g[h];h++)d[f]||(Object.defineProperty(a,f,Object.getOwnPropertyDescriptor(e,f)),d[f]=1);e=Object.getPrototypeOf(e)}}function f(a){a.createdCallback&&a.createdCallback()}var g=a.flags;a.upgrade=b,a.upgradeWithDefinition=c,a.implementPrototype=d}),window.CustomElements.addModule(function(a){function b(b,d){var i=d||{};if(!b)throw new Error("document.registerElement: first argument `name` must not be empty");if(b.indexOf("-")<0)throw new Error("document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '"+String(b)+"'.");if(e(b))throw new Error("Failed to execute 'registerElement' on 'Document': Registration failed for type '"+String(b)+"'. The type name is invalid.");if(j(b))throw new Error("DuplicateDefinitionError: a type with name '"+String(b)+"' is already registered");return i.prototype||(i.prototype=Object.create(HTMLElement.prototype)),i.__name=b.toLowerCase(),i.lifecycle=i.lifecycle||{},i.ancestry=f(i["extends"]),g(i),h(i),c(i.prototype),k(i.__name,i),i.ctor=l(i),i.ctor.prototype=i.prototype,i.prototype.constructor=i.ctor,a.ready&&r(document),i.ctor}function c(a){if(!a.setAttribute._polyfilled){var b=a.setAttribute;a.setAttribute=function(a,c){d.call(this,a,c,b)};var c=a.removeAttribute;a.removeAttribute=function(a){d.call(this,a,null,c)},a.setAttribute._polyfilled=!0}}function d(a,b,c){a=a.toLowerCase();var d=this.getAttribute(a);c.apply(this,arguments);var e=this.getAttribute(a);this.attributeChangedCallback&&e!==d&&this.attributeChangedCallback(a,d,e)}function e(a){for(var b=0;b<w.length;b++)if(a===w[b])return!0}function f(a){var b=j(a);return b?f(b["extends"]).concat([b]):[]}function g(a){for(var b,c=a["extends"],d=0;b=a.ancestry[d];d++)c=b.is&&b.tag;a.tag=c||a.__name,c&&(a.is=a.__name)}function h(a){if(!Object.__proto__){var b=HTMLElement.prototype;if(a.is){var c=document.createElement(a.tag);b=Object.getPrototypeOf(c)}for(var d,e=a.prototype,f=!1;e;)e==b&&(f=!0),d=Object.getPrototypeOf(e),d&&(e.__proto__=d),e=d;f||console.warn(a.tag+" prototype not found in prototype chain for "+a.is),a["native"]=b}}function i(a){return t(z(a.tag),a)}function j(a){return a?x[a.toLowerCase()]:void 0}function k(a,b){x[a]=b}function l(a){return function(){return i(a)}}function m(a,b,c){return a===y?n(b,c):A(a,b)}function n(a,b){a&&(a=a.toLowerCase()),b&&(b=b.toLowerCase());var c=j(b||a);if(c){if(a==c.tag&&b==c.is)return new c.ctor;if(!b&&!c.is)return new c.ctor}var d;return b?(d=n(a),d.setAttribute("is",b),d):(d=z(a),a.indexOf("-")>=0&&u(d,HTMLElement),d)}function o(a,b){var c=a[b];a[b]=function(){var a=c.apply(this,arguments);return s(a),a}}var p,q=a.isIE,r=a.upgradeDocumentTree,s=a.upgradeAll,t=a.upgradeWithDefinition,u=a.implementPrototype,v=a.useNative,w=["annotation-xml","color-profile","font-face","font-face-src","font-face-uri","font-face-format","font-face-name","missing-glyph"],x={},y="http://www.w3.org/1999/xhtml",z=document.createElement.bind(document),A=document.createElementNS.bind(document);p=Object.__proto__||v?function(a,b){return a instanceof b}:function(a,b){if(a instanceof b)return!0;for(var c=a;c;){if(c===b.prototype)return!0;c=c.__proto__}return!1},o(Node.prototype,"cloneNode"),o(document,"importNode"),q&&!function(){var a=document.importNode;document.importNode=function(){var b=a.apply(document,arguments);if(b.nodeType==b.DOCUMENT_FRAGMENT_NODE){var c=document.createDocumentFragment();return c.appendChild(b),c}return b}}(),document.registerElement=b,document.createElement=n,document.createElementNS=m,a.registry=x,a["instanceof"]=p,a.reservedTagList=w,a.getRegisteredDefinition=j,document.register=document.registerElement}),function(a){function b(){f(window.wrap(document)),window.CustomElements.ready=!0;var a=window.requestAnimationFrame||function(a){setTimeout(a,16)};a(function(){setTimeout(function(){window.CustomElements.readyTime=Date.now(),window.HTMLImports&&(window.CustomElements.elapsed=window.CustomElements.readyTime-window.HTMLImports.readyTime),document.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))})})}var c=a.useNative,d=a.initializeModules;a.isIE;if(c){var e=function(){};a.watchShadow=e,a.upgrade=e,a.upgradeAll=e,a.upgradeDocumentTree=e,a.upgradeSubtree=e,a.takeRecords=e,a["instanceof"]=function(a,b){return a instanceof b}}else d();var f=a.upgradeDocumentTree,g=a.upgradeDocument;if(window.wrap||(window.ShadowDOMPolyfill?(window.wrap=window.ShadowDOMPolyfill.wrapIfNeeded,window.unwrap=window.ShadowDOMPolyfill.unwrapIfNeeded):window.wrap=window.unwrap=function(a){return a}),window.HTMLImports&&(window.HTMLImports.__importsParsingHook=function(a){a["import"]&&g(wrap(a["import"]))}),"complete"===document.readyState||a.flags.eager)b();else if("interactive"!==document.readyState||window.attachEvent||window.HTMLImports&&!window.HTMLImports.ready){var h=window.HTMLImports&&!window.HTMLImports.ready?"HTMLImportsLoaded":"DOMContentLoaded";window.addEventListener(h,b)}else b()}(window.CustomElements),function(a){Function.prototype.bind||(Function.prototype.bind=function(a){var b=this,c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();return d.push.apply(d,arguments),b.apply(a,d)}})}(window.WebComponents),function(a){var b=document.createElement("style");b.textContent="body {transition: opacity ease-in 0.2s; } \nbody[unresolved] {opacity: 0; display: block; overflow: hidden; position: relative; } \n";var c=document.querySelector("head");c.insertBefore(b,c.firstChild)}(window.WebComponents),function(a){window.Platform=a}(window.WebComponents),angular.module("ngAudio",[]).directive("ngAudio",["$compile","$q","ngAudio",function(a,b,c){return{restrict:"AEC",scope:{volume:"=",start:"=",currentTime:"=",loop:"=",clickPlay:"=",disablePreload:"="},controller:["$scope","$attrs","$element","$timeout",function(a,b,d,e){function f(){g=c.load(b.ngAudio,a),a.$audio=g,g.unbind()}var g;a.disablePreload||f(),d.on("click",function(){a.clickPlay!==!1&&(a.disablePreload&&f(),g.audio.play(),g.volume=a.volume||g.volume,g.loop=a.loop,g.currentTime=a.start||0,e(function(){g.play()},5))}),d.on("$destroy",function(){g.destroy()})}]}}]).directive("ngAudioHover",["$compile","$q","ngAudio",function(a,b,c){return{restrict:"AEC",controller:["$scope","$attrs","$element","$timeout",function(a,b,d,e){var f=c.load(b.ngAudioHover,a);d.on("mouseover rollover hover",function(){f.audio.play(),f.volume=b.volumeHover||f.volume,f.loop=b.loop,f.currentTime=b.startHover||0}),d.on("$destroy",function(){f.destroy()})}]}}]).service("localAudioFindingService",["$q",function(a){this.find=function(b){var c=a.defer(),d=document.getElementById(b);return d?c.resolve(d):c.reject(b),c.promise}}]).service("remoteAudioFindingService",["$q",function(a){this.find=function(b){var c=a.defer(),d=new Audio;return d.addEventListener("error",function(){c.reject()}),d.addEventListener("loadstart",function(){c.resolve(d)}),setTimeout(function(){d.src=b},1),c.promise}}]).service("cleverAudioFindingService",["$q","localAudioFindingService","remoteAudioFindingService",function(a,b,c){this.find=function(d){var e=a.defer();return d=d.replace("|","/"),b.find(d).then(e.resolve,function(){return c.find(d)}).then(e.resolve,e.reject),e.promise}}]).value("ngAudioGlobals",{muting:!1,songmuting:!1,performance:25,unlock:!0}).factory("NgAudioObject",["cleverAudioFindingService","$rootScope","$interval","$timeout","ngAudioGlobals",function(a,b,c,d,e){return function(d,f){function g(){o.play(),o.pause(),window.removeEventListener("click",g)}function h(){w||(A&&c.cancel(A),l&&l(),k&&k(),w=!0)}function i(){w||(k=x.$watch(function(){return{volume:y.volume,currentTime:y.currentTime,progress:y.progress,muting:y.muting,loop:y.loop,playbackRate:y.playbackRate}},function(a,b){a.currentTime!==b.currentTime&&y.setCurrentTime(a.currentTime),a.progress!==b.progress&&y.setProgress(a.progress),a.volume!==b.volume&&y.setVolume(a.volume),a.playbackRate!==b.playbackRate&&y.setPlaybackRate(a.playbackRate),n=a.loop,a.muting!==b.muting&&y.setMuting(a.muting)},!0))}function j(){k&&k(),o&&(u||e.isMuting?o.volume=0:o.volume=void 0!==y.volume?y.volume:1,p&&(o.play(),p=!1),r&&(o.pause(),o.currentTime=0,r=!1),q&&(o.pause(),q=!1),s&&(o.playbackRate=t,s=!1),m&&(o.volume=m,m=void 0),v&&(y.currentTime=o.currentTime,y.duration=o.duration,y.remaining=o.duration-o.currentTime,y.progress=o.currentTime/o.duration,y.paused=o.paused,y.src=o.src,y.currentTime>=y.duration&&z.forEach(function(a){a(y)}),n&&y.currentTime>=y.duration&&(n!==!0&&(n--,y.loop--),y.setCurrentTime(0),y.play())),u||e.isMuting||(y.volume=o.volume),y.audio=o),i()}var k,l,m,n,o,p=!1,q=!1,r=!1,s=!1,t=!1,u=!1,v=!0,w=!1,x=f||b,y=this;this.id=d,this.safeId=d.replace("/","|"),this.loop=0,this.unbind=function(){v=!1},this.play=function(){return p=!0,this};var z=[];this.complete=function(a){z.push(a)},this.pause=function(){q=!0},this.restart=function(){r=!0},this.stop=function(){this.restart()},this.setVolume=function(a){m=a},this.setPlaybackRate=function(a){t=a,s=!0},this.setMuting=function(a){u=a},this.setProgress=function(a){o&&o.duration&&isFinite(a)&&(o.currentTime=o.duration*a)},this.setCurrentTime=function(a){o&&o.duration&&(o.currentTime=a)},this.destroy=h,x.$on("$destroy",function(){h()}),a.find(d).then(function(a){o=a,e.unlock&&(window.addEventListener("click",g),o.addEventListener("playing",function(){window.removeEventListener("click",g)})),o.addEventListener("canplay",function(){y.canPlay=!0})},function(a){y.error=!0,console.warn(a)});var A=c(j,e.performance);l=x.$watch(function(){return e.performance},function(){c.cancel(A),A=c(j,e.performance)})}}]).service("ngAudio",["NgAudioObject","ngAudioGlobals",function(a,b){this.play=function(b,c){var d=new a(b,c);return d.play(),d},this.load=function(b,c){return new a(b,c)},this.mute=function(){b.muting=!0},this.unmute=function(){b.muting=!1},this.toggleMute=function(){b.muting=!b.muting},this.setUnlock=function(a){b.unlock=a}}]).filter("trackTime",function(){return function(a){var b=Math.floor(0|a),c="",d=0,e=0,f=0;return b>3599?(d=Math.floor(b/3600),e=Math.floor((b-3600*d)/60),f=b-(60*e+3600*d),1==d.toString().length&&(d="0"+Math.floor(b/3600).toString()),1==e.toString().length&&(e="0"+Math.floor((b-3600*d)/60).toString()),1==f.toString().length&&(f="0"+(b-(60*e+3600*d)).toString()),c=d+":"+e+":"+f):b>59?(e=Math.floor(b/60),f=b-60*e,1==e.toString().length&&(e="0"+Math.floor(b/60).toString()),1==f.toString().length&&(f="0"+(b-60*e).toString()),c=e+":"+f):(f=b,1==f.toString().length&&(f="0"+b.toString()),c=b+"s"),"function"==typeof Number.isNaN&&Number.isNaN(c),c}}),function(){"use strict";angular.module("ngEmoticons",["ngSanitize"]).filter("emoticons",["$sce",function(a){var b=[{text:":)","class":"smiley",code:"e60a"},{text:":D","class":"happy",code:"e608"},{text:":d","class":"happy",code:"e608"},{text:":(","class":"sad",code:"e60e"},{text:":/","class":"wondering",code:"e620"},{text:":P","class":"tongue",code:"e60c"},{text:":p","class":"tongue",code:"e60c"},{text:"3:)","class":"evil",code:"e618"},{text:"(^)","class":"thumbsup2",code:"e607"},{text:";)","class":"wink",code:"e610"},{text:":o","class":"shocked",code:"e61a"},{text:"-_-","class":"neutral",code:"e61e"},{text:"(y)","class":"thumbs-up",code:"e606"},{text:":*","class":"heart",code:"e604"},{text:"&lt;3","class":"heart",code:"e604"},{text:"<3","class":"heart",code:"e604"},{text:"&lt;/3","class":"heart-broken",code:"e605"},{text:"</3","class":"heart-broken",code:"e605"},{text:"^_^","class":"grin",code:"e612"},{text:"8-)","class":"cool",code:"e614"},{text:"8|","class":"cool",code:"e614"},{text:":S","class":"confused",code:"e61c"},{text:":s","class":"confused",code:"e61c"}],c=["bowtie","smile","laughing","blush","smiley","relaxed","smirk","heart_eyes","kissing_heart","kissing_closed_eyes","flushed","relieved","satisfied","grin","wink","stuck_out_tongue_winking_eye","stuck_out_tongue_closed_eyes","grinning","kissing","winky_face","kissing_smiling_eyes","stuck_out_tongue","sleeping","worried","frowning","anguished","open_mouth","grimacing","confused","hushed","expressionless","unamused","sweat_smile","sweat","wow","disappointed_relieved","weary","pensive","disappointed","confounded","fearful","cold_sweat","persevere","cry","sob","joy","astonished","scream","neckbeard","tired_face","angry","rage","triumph","sleepy","yum","mask","sunglasses","dizzy_face","imp","smiling_imp","neutral_face","no_mouth","innocent","alien","yellow_heart","blue_heart","purple_heart","heart","green_heart","broken_heart","heartbeat","heartpulse","two_hearts","revolving_hearts","cupid","sparkling_heart","sparkles","star","star2","dizzy","boom","collision","anger","exclamation","question","grey_exclamation","grey_question","zzz","dash","sweat_drops","notes","musical_note","fire","hankey","poop","shit","\\+1","thumbsup","-1","thumbsdown","ok_hand","punch","facepunch","fist","v","wave","hand","raised_hand","open_hands","point_up","point_down","point_left","point_right","raised_hands","pray","point_up_2","clap","muscle","metal","fu","walking","runner","running","couple","family","two_men_holding_hands","two_women_holding_hands","dancer","dancers","ok_woman","no_good","information_desk_person","raising_hand","bride_with_veil","person_with_pouting_face","person_frowning","bow","couplekiss","couple_with_heart","massage","haircut","nail_care","boy","girl","woman","man","baby","older_woman","older_man","person_with_blond_hair","man_with_gua_pi_mao","man_with_turban","construction_worker","cop","angel","princess","smiley_cat","smile_cat","heart_eyes_cat","kissing_cat","smirk_cat","scream_cat","crying_cat_face","joy_cat","pouting_cat","japanese_ogre","japanese_goblin","see_no_evil","hear_no_evil","speak_no_evil","guardsman","skull","feet","lips","kiss","droplet","ear","eyes","nose","tongue","love_letter","bust_in_silhouette","busts_in_silhouette","speech_balloon","thought_balloon","feelsgood","finnadie","goberserk","godmode","hurtrealbad","rage1","rage2","rage3","rage4","suspect","trollface","sunny","umbrella","cloud","snowflake","snowman","zap","cyclone","foggy","ocean","cat","dog","mouse","hamster","rabbit","wolf","frog","tiger","koala","bear","pig","pig_nose","cow","boar","monkey_face","monkey","horse","racehorse","camel","sheep","elephant","panda_face","snake","bird","baby_chick","hatched_chick","hatching_chick","chicken","penguin","turtle","bug","honeybee","ant","beetle","snail","octopus","tropical_fish","fish","whale","whale2","dolphin","cow2","ram","rat","water_buffalo","tiger2","rabbit2","dragon","goat","rooster","dog2","pig2","mouse2","ox","dragon_face","blowfish","crocodile","dromedary_camel","leopard","cat2","poodle","paw_prints","bouquet","cherry_blossom","tulip","four_leaf_clover","rose","sunflower","hibiscus","maple_leaf","leaves","fallen_leaf","herb","mushroom","cactus","palm_tree","evergreen_tree","deciduous_tree","chestnut","seedling","blossom","ear_of_rice","shell","globe_with_meridians","sun_with_face","full_moon_with_face","new_moon_with_face","new_moon","waxing_crescent_moon","first_quarter_moon","waxing_gibbous_moon","full_moon","waning_gibbous_moon","last_quarter_moon","waning_crescent_moon","last_quarter_moon_with_face","first_quarter_moon_with_face","moon","earth_africa","earth_americas","earth_asia","volcano","milky_way","partly_sunny","octocat","squirrel","bamboo","gift_heart","dolls","school_satchel","mortar_board","flags","fireworks","sparkler","wind_chime","rice_scene","jack_o_lantern","ghost","santa","christmas_tree","gift","bell","no_bell","tanabata_tree","tada","confetti_ball","balloon","crystal_ball","cd","dvd","floppy_disk","camera","video_camera","movie_camera","computer","tv","iphone","phone","telephone","telephone_receiver","pager","fax","minidisc","vhs","sound","speaker","mute","loudspeaker","mega","hourglass","hourglass_flowing_sand","alarm_clock","watch","radio","satellite","loop","mag","mag_right","unlock","lock","lock_with_ink_pen","closed_lock_with_key","key","bulb","flashlight","high_brightness","low_brightness","electric_plug","battery","calling","email","mailbox","postbox","bath","bathtub","shower","toilet","wrench","nut_and_bolt","hammer","seat","moneybag","yen","dollar","pound","euro","credit_card","money_with_wings","e-mail","inbox_tray","outbox_tray","envelope","incoming_envelope","postal_horn","mailbox_closed","mailbox_with_mail","mailbox_with_no_mail","door","smoking","bomb","gun","hocho","pill","syringe","page_facing_up","page_with_curl","bookmark_tabs","bar_chart","chart_with_upwards_trend","chart_with_downwards_trend","scroll","clipboard","calendar","date","card_index","file_folder","open_file_folder","scissors","pushpin","paperclip","black_nib","pencil2","straight_ruler","triangular_ruler","closed_book","green_book","blue_book","orange_book","notebook","notebook_with_decorative_cover","ledger","books","bookmark","name_badge","microscope","telescope","newspaper","football","basketball","soccer","baseball","tennis","8ball","rugby_football","bowling","golf","mountain_bicyclist","bicyclist","horse_racing","snowboarder","swimmer","surfer","ski","spades","hearts","clubs","diamonds","gem","ring","trophy","musical_score","musical_keyboard","violin","space_invader","video_game","black_joker","flower_playing_cards","game_die","dart","mahjong","clapper","memo","pencil","book","art","microphone","headphones","trumpet","saxophone","guitar","shoe","sandal","high_heel","lipstick","boot","shirt","tshirt","necktie","womans_clothes","dress","running_shirt_with_sash","jeans","kimono","bikini","ribbon","tophat","crown","womans_hat","mans_shoe","closed_umbrella","briefcase","handbag","pouch","purse","eyeglasses","fishing_pole_and_fish","coffee","tea","sake","baby_bottle","beer","beers","cocktail","tropical_drink","wine_glass","fork_and_knife","pizza","hamburger","fries","poultry_leg","meat_on_bone","spaghetti","curry","fried_shrimp","bento","sushi","fish_cake","rice_ball","rice_cracker","rice","ramen","stew","oden","dango","egg","bread","doughnut","custard","icecream","ice_cream","shaved_ice","birthday","cake","cookie","chocolate_bar","candy","lollipop","honey_pot","apple","green_apple","tangerine","lemon","cherries","grapes","watermelon","strawberry","peach","melon","banana","pear","pineapple","sweet_potato","eggplant","tomato","corn","house","house_with_garden","school","office","post_office","hospital","bank","convenience_store","love_hotel","hotel","wedding","church","department_store","european_post_office","city_sunrise","city_sunset","japanese_castle","european_castle","tent","factory","tokyo_tower","japan","mount_fuji","sunrise_over_mountains","sunrise","stars","themoreyouknow","tmyk","statue_of_liberty","bridge_at_night","carousel_horse","rainbow","ferris_wheel","fountain","roller_coaster","ship","speedboat","boat","sailboat","rowboat","anchor","rocket","airplane","helicopter","steam_locomotive","tram","mountain_railway","bike","aerial_tramway","suspension_railway","mountain_cableway","tractor","blue_car","oncoming_automobile","car","red_car","taxi","oncoming_taxi","articulated_lorry","bus","oncoming_bus","rotating_light","police_car","oncoming_police_car","fire_engine","ambulance","minibus","truck","train","station","train2","bullettrain_front","bullettrain_side","light_rail","monorail","railway_car","trolleybus","ticket","fuelpump","vertical_traffic_light","traffic_light","warning","construction","beginner","atm","slot_machine","busstop","barber","hotsprings","checkered_flag","crossed_flags","izakaya_lantern","moyai","circus_tent","performing_arts","round_pushpin","triangular_flag_on_post","jp","kr","cn","us","fr","es","it","ru","gb","uk","de","one","two","three","four","five","six","seven","eight","nine","keycap_ten","1234","zero","hash","symbols","arrow_backward","arrow_down","arrow_forward","arrow_left","capital_abcd","abcd","abc","arrow_lower_left","arrow_lower_right","arrow_right","arrow_up","arrow_upper_left","arrow_upper_right","arrow_double_down","arrow_double_up","arrow_down_small","arrow_heading_down","arrow_heading_up","leftwards_arrow_with_hook","arrow_right_hook","left_right_arrow","arrow_up_down","arrow_up_small","arrows_clockwise","arrows_counterclockwise","rewind","fast_forward","information_source","ok","twisted_rightwards_arrows","repeat","repeat_one","new","top","up","cool","free","ng","cinema","koko","signal_strength","u5272","u5408","u55b6","u6307","u6708","u6709","u6e80","u7121","u7533","u7a7a","u7981","sa","restroom","mens","womens","baby_symbol","no_smoking","parking","wheelchair","metro","baggage_claim","accept","wc","potable_water","put_litter_in_its_place","secret","congratulations","m","passport_control","left_luggage","customs","ideograph_advantage","cl","sos","id","no_entry_sign","underage","no_mobile_phones","do_not_litter","non-potable_water","no_bicycles","no_pedestrians","children_crossing","no_entry","eight_spoked_asterisk","eight_pointed_black_star","heart_decoration","vs","vibration_mode","mobile_phone_off","chart","currency_exchange","aries","taurus","gemini","cancer","leo","virgo","libra","scorpius","sagittarius","capricorn","aquarius","pisces","ophiuchus","six_pointed_star","negative_squared_cross_mark","a","b","ab","o2","diamond_shape_with_a_dot_inside","recycle","end","on","soon","clock1","clock130","clock10","clock1030","clock11","clock1130","clock12","clock1230","clock2","clock230","clock3","clock330","clock4","clock430","clock5","clock530","clock6","clock630","clock7","clock730","clock8","clock830","clock9","clock930","heavy_dollar_sign","copyright","registered","tm","x","heavy_exclamation_mark","bangbang","interrobang","o","heavy_multiplication_x","heavy_plus_sign","heavy_minus_sign","heavy_division_sign","white_flower","100","heavy_check_mark","ballot_box_with_check","radio_button","link","curly_loop","wavy_dash","part_alternation_mark","trident","black_square","white_square","white_check_mark","black_square_button","white_square_button","black_circle","white_circle","red_circle","large_blue_circle","large_blue_diamond","large_orange_diamond","small_blue_diamond","small_orange_diamond","small_red_triangle","small_red_triangle_down","shipit"];return function(d,e){function f(a){return angular.forEach(arguments,function(b){b!==a&&angular.forEach(b,function(b,c){a[c]&&a[c].constructor&&a[c].constructor===Object?f(a[c],b):a[c]=b})}),a}function g(a){var c=a.split(" ");return angular.forEach(b,function(a){for(var b=0;b<c.length;b++)c[b]===a.text&&(c[b]='<i class="icon-emoticon" title="'+a.text+'">&#x'+a.code+"</i>")}),c.join(" ")}function h(a){var b=/((href|src)=["']|)(\b(https?|ftp|file):\/\/[-A-Z0-9+()&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi,c=a.replace(b,function(a){return'<a href="'+a+'" target="'+j.linkTarget+'">'+a+"</a>"});return c}function i(a){var b=new RegExp(":("+c.join("|")+"):","g");return a.replace(b,function(a,b){return"<i class='emoticon emoticon-"+b+"' title=':"+b+":'></i>"})}var j={link:!0,linkTarget:"_self"};return f(j,e),void 0!==d&&null!==d?"object"==typeof d?d:(d=g(d),d=i(d),j.link&&(d=h(d)),a.trustAsHtml(d)):void 0}}]).directive("ngEmoticons",["$filter","$sce","$http","$timeout","$templateCache",function(a,b,c,d,e){var f="",g='<div ng-bind-html="neText" ne-hljs></div><div class="ne-video" ng-if="video.host" class="fade">    <div class="ne-video-preview" ng-hide="nePlayVideo || !(options.video.details)">        <div class="ne-video-thumb" ng-click="nePlayVideo=!nePlayVideo">            <img ng-src="{{video.thumbnail}}" alt=""/>            <i class="fa fa-play-circle-o"></i>        </div>        <div class="ne-video-detail">            <div class="ne-video-title">                <a ng-href="{{video.url}}">{{video.title}}</a>            </div>            <div class="ne-video-desc">                {{video.description}}            </div>            <div class="ne-video-stats">                <span><i class="fa fa-eye"></i> {{video.views}}</span>                <span><i class="fa fa-heart"></i> {{video.likes}}</span>            </div>        </div>    </div>    <div class="ne-video-player" ng-if="nePlayVideo || !(options.video.details)">        <iframe ng-src="{{video.embedSrc}}" frameBorder="0" width="{{video.width}}" height="{{video.height}}" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>    </div></div><div class="ne-video" ng-if="video.basic">    <div class="ne-video-player">        <div class="player">            <video ng-src="{{video.basic}}" controls></video>        </div>    </div></div><div ng-init="neImageLong=false" ng-class="{false:\'ne-image\', true:\'ne-image ne-image-long\'}[neImageLong]"     ng-if="image.url">    <div class="ne-image-wrapper">        <img ng-src="{{image.url}}" ng-click="neImageLong=!neImageLong" alt=""/>    </div></div><div class="ne-pdf" ng-if="pdf.url">    <div class="ne-pdf-preview" ng-hide="neShowPdf">        <div class="ne-pdf-icon">            <i class="fa fa-file-pdf-o"></i>        </div>        <div class="ne-pdf-detail" >            <div class="ne-pdf-title">                <a href="">{{pdf.url}}</a>            </div>            <div class="ne-pdf-view">                <button><i class="fa fa-download"></i> <a ng-href="{{pdf.url}}" target="_blank">Download</a></button>                <button ng-click="neShowPdf=!neShowPdf"><i class="fa fa-eye"></i> View PDF</button>            </div>        </div>    </div>    <div class="ne-pdf-viewer" ng-if="neShowPdf" ng-show="neShowPdf">        <iframe ng-src="{{pdf.url}}" frameBorder="0"></iframe>    </div></div><div class="ne-audio" ng-if="audio.url">    <audio ng-src="{{audio.url}}" controls></audio></div>';return e.put(f,g),{restrict:"AE",scope:!0,templateUrl:function(a,b){return b.emoticonsTemplateUrl||f},link:function(e,f,g){function h(a){return angular.forEach(arguments,function(b){b!==a&&angular.forEach(b,function(b,c){a[c]&&a[c].constructor&&a[c].constructor===Object?h(a[c],b):a[c]=b})}),a}var i=e.$eval(g.emoticonsData),j=e.$eval(g.emoticonsOptions);e.video={},e.image={},e.pdf={},e.audio={};var k={link:!0,linkTarget:"_self",pdf:{embed:!0},image:{embed:!1},audio:{embed:!0},code:{highlight:!0,lineNumbers:!1},basicVideo:!1,video:{embed:!1,width:null,height:null,ytTheme:"dark",details:!1,thumbnailQuality:"medium",ytAuthKey:null}};h(k,j),String.prototype.trunc=function(a,b){var c=this.length>a,d=c?this.substr(0,a-1):this;return d=b&&c?d.substr(0,d.lastIndexOf(" ")):d,c?d+"...":d};var l={calcDimensions:function(a){var b={width:null,height:null};return b.width=a.video.width,b.height=a.video.height,a.video.height&&a.video.width?b:a.video.height?(b.width=a.video.height/390*640,b):a.video.width?(b.height=b.width/640*390,b):(b.width=640,b.height=390,b)},embed:function(a,d){var f=/https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=|\/ytscreeningroom\?v=|\/feeds\/api\/videos\/|\/user\S*[^\w\-\s]|\S*[^\w\-\s]))([\w\-]{11})[?=&+%\w-]*/gi;if(a.match(f)){var g=this.calcDimensions(d);return e.video.id=RegExp.$1,d.video.details?c.get("https://www.googleapis.com/youtube/v3/videos?id="+RegExp.$1+"&key="+d.video.ytAuthKey+"&part=snippet,statistics").success(function(a){var c=a.items[0];e.video.host="youtube",e.video.title=c.snippet.title,e.video.thumbnail=c.snippet.thumbnails.medium.url,e.video.description=c.snippet.description.trunc(250,!0).replace(/\n/g," ").replace(/&#10;/g," "),e.video.rawDescription=c.snippet.description,e.video.views=c.statistics.viewCount,e.video.likes=c.statistics.likeCount,e.video.uploader=c.snippet.channelTitle,e.video.uploaderPage="https://www.youtube.com/channel/"+c.snippet.channelId,e.video.uploadDate=c.snippet.publishedAt,e.video.url=b.trustAsResourceUrl("https://www.youtube.com/watch?v="+c.id),e.video.embedSrc=b.trustAsResourceUrl("https://www.youtube.com/embed/"+e.video.id+"?autoplay=1"),e.video.width=g.width,e.video.height=g.height}):(e.video.width=g.width,e.video.height=g.height,e.video.host="youtube",e.video.embedSrc=b.trustAsResourceUrl("https://www.youtube.com/embed/"+RegExp.$1+"?autoplay=0")),a}var h=/https?:\/\/(?:www\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|)(\d+)(?:$|\/|\?)*/gi;if(a.match(h)){var i=this.calcDimensions(d);e.video.id=RegExp.$3,d.video.details?c.get("https://vimeo.com/api/v2/video/"+RegExp.$3+".json").success(function(a){e.video.host="vimeo",e.video.title=a[0].title,e.video.rawDescription=a[0].description.replace(/\n/g,"<br/>").replace(/&#10;/g,"<br/>"),e.video.description=a[0].description.replace(/((<|&lt;)br\s*\/*(>|&gt;)\r\n)/g," ").trunc(250,!0),e.video.thumbnail=a[0].thumbnail_medium,e.video.views=a[0].stats_number_of_plays,e.video.likes=a[0].stats_number_of_likes,e.video.uploader=a[0].user_name,e.video.uploaderPage=a[0].user_url,e.video.uploadDate=a[0].uploadDate,e.video.url=a[0].url,e.video.embedSrc=b.trustAsResourceUrl("//player.vimeo.com/video/"+a[0].id+"?title=0&byline=0&portrait=0&autoplay=1"),e.video.width=i.width,e.video.height=i.height}):(e.video.width=i.width,e.video.height=i.height,e.video.host="vimeo",e.video.embedSrc=b.trustAsResourceUrl("//player.vimeo.com/video/"+RegExp.$3+"?title=0&byline=0&portrait=0&autoplay=0"))}return a},embedBasic:function(a){var c=/((?:https?):\/\/\S*\.(?:ogv|webm|mp4))/gi;return a.match(c)&&(e.video.basic=b.trustAsResourceUrl(RegExp.$1)),a}},m={embed:function(a){var c=/((?:https?):\/\/\S*\.(?:wav|mp3|ogg))/gi;return a.match(c)&&(e.audio.url=b.trustAsResourceUrl(RegExp.$1)),a}},n={embed:function(a){var b=/((?:https?):\/\/\S*\.(?:gif|jpg|jpeg|tiff|png|svg|webp))/gi;return a.match(b)&&(e.image.url=RegExp.$1),a}},o={encodeCode:function(a){return a=a.replace(/\&/gm,"&amp;"),a=a.replace(/</gm,"&lt;"),a=a.replace(/>/gm,"&gt;")},getCode:function(a){var b=this;return a=a.replace(/(`+)(\s|[a-z]+)\s*([\s\S]*?[^`])\s*\1(?!`)/gm,function(a,c,d,e){var f=e;return f=f.replace(/^([ \t]*)/g,""),f=f.replace(/[ \t]*$/g,""),f=b.encodeCode(f),f=f.replace(/:\/\//g,"~P"),'<pre><code class="ne-code '+d+'">'+f+"</code></pre>"})}},p={embed:function(a){var c=/((?:https?):\/\/\S*\.(?:pdf|PDF))/gi;return a.match(c)&&(e.pdf.url=b.trustAsResourceUrl(RegExp.$1)),a}};if(k.code.highlight){if(!window.hljs)throw"hlsj (Highlight JS is not defined.";i=o.getCode(i),d(function(){hljs.initHighlighting(),k.code.lineNumbers&&angular.element(".ne-code").each(function(){var a=1,b=$(this).text().split("\n").length,c=$("<ul/>").addClass("pre-numbering");for(angular.element(this).addClass("has-numbering").parent().append(c),a;b>=a;a++)c.append(angular.element("<li/>").text(a))})},0)}var q=a("emoticons")(i,k).$$unwrapTrustedValue();if(k.video.embed){if(!k.video.ytAuthKey)throw"Youtube authentication key is required to get data from youtube.";
+q=l.embed(q,k)}k.basicVideo&&(q=l.embedBasic(q)),k.audio.embed&&(q=m.embed(q)),k.image.embed&&(q=n.embed(q)),k.pdf.embed&&(q=p.embed(q)),e.neText=b.trustAsHtml(q)}}}]).directive("neHljs",["$timeout",function(a){return{restrict:"AE",link:function(b,c){a(function(){c.find(".ne-code").each(function(){hljs.highlightBlock(this)})},0)}}}])}(),function(a){"undefined"!=typeof exports?a(exports):(window.hljs=a({}),"function"==typeof define&&define.amd&&define("hljs",[],function(){return window.hljs}))}(function(a){function b(a){return a.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;")}function c(a){return a.nodeName.toLowerCase()}function d(a,b){var c=a&&a.exec(b);return c&&0==c.index}function e(a){return/^(no-?highlight|plain|text)$/i.test(a)}function f(a){var b,c,d,f=a.className+" ";if(f+=a.parentNode?a.parentNode.className:"",c=/\blang(?:uage)?-([\w-]+)\b/i.exec(f))return u(c[1])?c[1]:"no-highlight";for(f=f.split(/\s+/),b=0,d=f.length;d>b;b++)if(u(f[b])||e(f[b]))return f[b]}function g(a,b){var c,d={};for(c in a)d[c]=a[c];if(b)for(c in b)d[c]=b[c];return d}function h(a){var b=[];return function d(a,e){for(var f=a.firstChild;f;f=f.nextSibling)3==f.nodeType?e+=f.nodeValue.length:1==f.nodeType&&(b.push({event:"start",offset:e,node:f}),e=d(f,e),c(f).match(/br|hr|img|input/)||b.push({event:"stop",offset:e,node:f}));return e}(a,0),b}function i(a,d,e){function f(){return a.length&&d.length?a[0].offset!=d[0].offset?a[0].offset<d[0].offset?a:d:"start"==d[0].event?a:d:a.length?a:d}function g(a){function d(a){return" "+a.nodeName+'="'+b(a.value)+'"'}k+="<"+c(a)+Array.prototype.map.call(a.attributes,d).join("")+">"}function h(a){k+="</"+c(a)+">"}function i(a){("start"==a.event?g:h)(a.node)}for(var j=0,k="",l=[];a.length||d.length;){var m=f();if(k+=b(e.substr(j,m[0].offset-j)),j=m[0].offset,m==a){l.reverse().forEach(h);do i(m.splice(0,1)[0]),m=f();while(m==a&&m.length&&m[0].offset==j);l.reverse().forEach(g)}else"start"==m[0].event?l.push(m[0].node):l.pop(),i(m.splice(0,1)[0])}return k+b(e.substr(j))}function j(a){function b(a){return a&&a.source||a}function c(c,d){return new RegExp(b(c),"m"+(a.case_insensitive?"i":"")+(d?"g":""))}function d(e,f){if(!e.compiled){if(e.compiled=!0,e.keywords=e.keywords||e.beginKeywords,e.keywords){var h={},i=function(b,c){a.case_insensitive&&(c=c.toLowerCase()),c.split(" ").forEach(function(a){var c=a.split("|");h[c[0]]=[b,c[1]?Number(c[1]):1]})};"string"==typeof e.keywords?i("keyword",e.keywords):Object.keys(e.keywords).forEach(function(a){i(a,e.keywords[a])}),e.keywords=h}e.lexemesRe=c(e.lexemes||/\b\w+\b/,!0),f&&(e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")\\b"),e.begin||(e.begin=/\B|\b/),e.beginRe=c(e.begin),e.end||e.endsWithParent||(e.end=/\B|\b/),e.end&&(e.endRe=c(e.end)),e.terminator_end=b(e.end)||"",e.endsWithParent&&f.terminator_end&&(e.terminator_end+=(e.end?"|":"")+f.terminator_end)),e.illegal&&(e.illegalRe=c(e.illegal)),void 0===e.relevance&&(e.relevance=1),e.contains||(e.contains=[]);var j=[];e.contains.forEach(function(a){a.variants?a.variants.forEach(function(b){j.push(g(a,b))}):j.push("self"==a?e:a)}),e.contains=j,e.contains.forEach(function(a){d(a,e)}),e.starts&&d(e.starts,f);var k=e.contains.map(function(a){return a.beginKeywords?"\\.?("+a.begin+")\\.?":a.begin}).concat([e.terminator_end,e.illegal]).map(b).filter(Boolean);e.terminators=k.length?c(k.join("|"),!0):{exec:function(){return null}}}}d(a)}function k(a,c,e,f){function g(a,b){for(var c=0;c<b.contains.length;c++)if(d(b.contains[c].beginRe,a))return b.contains[c]}function h(a,b){if(d(a.endRe,b)){for(;a.endsParent&&a.parent;)a=a.parent;return a}return a.endsWithParent?h(a.parent,b):void 0}function i(a,b){return!e&&d(b.illegalRe,a)}function m(a,b){var c=t.case_insensitive?b[0].toLowerCase():b[0];return a.keywords.hasOwnProperty(c)&&a.keywords[c]}function n(a,b,c,d){var e=d?"":v.classPrefix,f='<span class="'+e,g=c?"":"</span>";return f+=a+'">',f+b+g}function o(){if(!y.keywords)return b(B);var a="",c=0;y.lexemesRe.lastIndex=0;for(var d=y.lexemesRe.exec(B);d;){a+=b(B.substr(c,d.index-c));var e=m(y,d);e?(C+=e[1],a+=n(e[0],b(d[0]))):a+=b(d[0]),c=y.lexemesRe.lastIndex,d=y.lexemesRe.exec(B)}return a+b(B.substr(c))}function p(){var a="string"==typeof y.subLanguage;if(a&&!w[y.subLanguage])return b(B);var c=a?k(y.subLanguage,B,!0,z[y.subLanguage]):l(B,y.subLanguage.length?y.subLanguage:void 0);return y.relevance>0&&(C+=c.relevance),a&&(z[y.subLanguage]=c.top),n(c.language,c.value,!1,!0)}function q(){return void 0!==y.subLanguage?p():o()}function r(a,c){var d=a.className?n(a.className,"",!0):"";a.returnBegin?(A+=d,B=""):a.excludeBegin?(A+=b(c)+d,B=""):(A+=d,B=c),y=Object.create(a,{parent:{value:y}})}function s(a,c){if(B+=a,void 0===c)return A+=q(),0;var d=g(c,y);if(d)return A+=q(),r(d,c),d.returnBegin?0:c.length;var e=h(y,c);if(e){var f=y;f.returnEnd||f.excludeEnd||(B+=c),A+=q();do y.className&&(A+="</span>"),C+=y.relevance,y=y.parent;while(y!=e.parent);return f.excludeEnd&&(A+=b(c)),B="",e.starts&&r(e.starts,""),f.returnEnd?0:c.length}if(i(c,y))throw new Error('Illegal lexeme "'+c+'" for mode "'+(y.className||"<unnamed>")+'"');return B+=c,c.length||1}var t=u(a);if(!t)throw new Error('Unknown language: "'+a+'"');j(t);var x,y=f||t,z={},A="";for(x=y;x!=t;x=x.parent)x.className&&(A=n(x.className,"",!0)+A);var B="",C=0;try{for(var D,E,F=0;;){if(y.terminators.lastIndex=F,D=y.terminators.exec(c),!D)break;E=s(c.substr(F,D.index-F),D[0]),F=D.index+E}for(s(c.substr(F)),x=y;x.parent;x=x.parent)x.className&&(A+="</span>");return{relevance:C,value:A,language:a,top:y}}catch(G){if(-1!=G.message.indexOf("Illegal"))return{relevance:0,value:b(c)};throw G}}function l(a,c){c=c||v.languages||Object.keys(w);var d={relevance:0,value:b(a)},e=d;return c.forEach(function(b){if(u(b)){var c=k(b,a,!1);c.language=b,c.relevance>e.relevance&&(e=c),c.relevance>d.relevance&&(e=d,d=c)}}),e.language&&(d.second_best=e),d}function m(a){return v.tabReplace&&(a=a.replace(/^((<[^>]+>|\t)+)/gm,function(a,b){return b.replace(/\t/g,v.tabReplace)})),v.useBR&&(a=a.replace(/\n/g,"<br>")),a}function n(a,b,c){var d=b?x[b]:c,e=[a.trim()];return a.match(/\bhljs\b/)||e.push("hljs"),-1===a.indexOf(d)&&e.push(d),e.join(" ").trim()}function o(a){var b=f(a);if(!e(b)){var c;v.useBR?(c=document.createElementNS("http://www.w3.org/1999/xhtml","div"),c.innerHTML=a.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n")):c=a;var d=c.textContent,g=b?k(b,d,!0):l(d),j=h(c);if(j.length){var o=document.createElementNS("http://www.w3.org/1999/xhtml","div");o.innerHTML=g.value,g.value=i(j,h(o),d)}g.value=m(g.value),a.innerHTML=g.value,a.className=n(a.className,b,g.language),a.result={language:g.language,re:g.relevance},g.second_best&&(a.second_best={language:g.second_best.language,re:g.second_best.relevance})}}function p(a){v=g(v,a)}function q(){if(!q.called){q.called=!0;var a=document.querySelectorAll("pre code");Array.prototype.forEach.call(a,o)}}function r(){addEventListener("DOMContentLoaded",q,!1),addEventListener("load",q,!1)}function s(b,c){var d=w[b]=c(a);d.aliases&&d.aliases.forEach(function(a){x[a]=b})}function t(){return Object.keys(w)}function u(a){return a=(a||"").toLowerCase(),w[a]||w[x[a]]}var v={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},w={},x={};return a.highlight=k,a.highlightAuto=l,a.fixMarkup=m,a.highlightBlock=o,a.configure=p,a.initHighlighting=q,a.initHighlightingOnLoad=r,a.registerLanguage=s,a.listLanguages=t,a.getLanguage=u,a.inherit=g,a.IDENT_RE="[a-zA-Z]\\w*",a.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",a.NUMBER_RE="\\b\\d+(\\.\\d+)?",a.C_NUMBER_RE="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",a.BINARY_NUMBER_RE="\\b(0b[01]+)",a.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",a.BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0},a.APOS_STRING_MODE={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[a.BACKSLASH_ESCAPE]},a.QUOTE_STRING_MODE={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[a.BACKSLASH_ESCAPE]},a.PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/},a.COMMENT=function(b,c,d){var e=a.inherit({className:"comment",begin:b,end:c,contains:[]},d||{});return e.contains.push(a.PHRASAL_WORDS_MODE),e.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),e},a.C_LINE_COMMENT_MODE=a.COMMENT("//","$"),a.C_BLOCK_COMMENT_MODE=a.COMMENT("/\\*","\\*/"),a.HASH_COMMENT_MODE=a.COMMENT("#","$"),a.NUMBER_MODE={className:"number",begin:a.NUMBER_RE,relevance:0},a.C_NUMBER_MODE={className:"number",begin:a.C_NUMBER_RE,relevance:0},a.BINARY_NUMBER_MODE={className:"number",begin:a.BINARY_NUMBER_RE,relevance:0},a.CSS_NUMBER_MODE={className:"number",begin:a.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},a.REGEXP_MODE={className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[a.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[a.BACKSLASH_ESCAPE]}]},a.TITLE_MODE={className:"title",begin:a.IDENT_RE,relevance:0},a.UNDERSCORE_TITLE_MODE={className:"title",begin:a.UNDERSCORE_IDENT_RE,relevance:0},a.registerLanguage("1c",function(a){var b="[a-zA-Zа-яА-Я][a-zA-Z0-9_а-яА-Я]*",c="возврат дата для если и или иначе иначеесли исключение конецесли конецпопытки конецпроцедуры конецфункции конеццикла константа не перейти перем перечисление по пока попытка прервать продолжить процедура строка тогда фс функция цикл число экспорт",d="ansitooem oemtoansi ввестивидсубконто ввестидату ввестизначение ввестиперечисление ввестипериод ввестиплансчетов ввестистроку ввестичисло вопрос восстановитьзначение врег выбранныйплансчетов вызватьисключение датагод датамесяц датачисло добавитьмесяц завершитьработусистемы заголовоксистемы записьжурналарегистрации запуститьприложение зафиксироватьтранзакцию значениевстроку значениевстрокувнутр значениевфайл значениеизстроки значениеизстрокивнутр значениеизфайла имякомпьютера имяпользователя каталогвременныхфайлов каталогиб каталогпользователя каталогпрограммы кодсимв командасистемы конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца коннедели лев лог лог10 макс максимальноеколичествосубконто мин монопольныйрежим названиеинтерфейса названиенабораправ назначитьвид назначитьсчет найти найтипомеченныенаудаление найтиссылки началопериодаби началостандартногоинтервала начатьтранзакцию начгода начквартала начмесяца начнедели номерднягода номерднянедели номернеделигода нрег обработкаожидания окр описаниеошибки основнойжурналрасчетов основнойплансчетов основнойязык открытьформу открытьформумодально отменитьтранзакцию очиститьокносообщений периодстр полноеимяпользователя получитьвремята получитьдатута получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта прав праводоступа предупреждение префиксавтонумерации пустаястрока пустоезначение рабочаядаттьпустоезначение рабочаядата разделительстраниц разделительстрок разм разобратьпозициюдокумента рассчитатьрегистрына рассчитатьрегистрыпо сигнал симв символтабуляции создатьобъект сокрл сокрлп сокрп сообщить состояние сохранитьзначение сред статусвозврата стрдлина стрзаменить стрколичествострок стрполучитьстроку  стрчисловхождений сформироватьпозициюдокумента счетпокоду текущаядата текущеевремя типзначения типзначениястр удалитьобъекты установитьтана установитьтапо фиксшаблон формат цел шаблон",e={className:"dquote",begin:'""'},f={className:"string",begin:'"',end:'"|$',contains:[e]},g={className:"string",begin:"\\|",end:'"|$',contains:[e]};return{case_insensitive:!0,lexemes:b,keywords:{keyword:c,built_in:d},contains:[a.C_LINE_COMMENT_MODE,a.NUMBER_MODE,f,g,{className:"function",begin:"(процедура|функция)",end:"$",lexemes:b,keywords:"процедура функция",contains:[a.inherit(a.TITLE_MODE,{begin:b}),{className:"tail",endsWithParent:!0,contains:[{className:"params",begin:"\\(",end:"\\)",lexemes:b,keywords:"знач",contains:[f,g]},{className:"export",begin:"экспорт",endsWithParent:!0,lexemes:b,keywords:"экспорт",contains:[a.C_LINE_COMMENT_MODE]}]},a.C_LINE_COMMENT_MODE]},{className:"preprocessor",begin:"#",end:"$"},{className:"date",begin:"'\\d{2}\\.\\d{2}\\.(\\d{2}|\\d{4})'"}]}}),a.registerLanguage("accesslog",function(a){return{contains:[{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+\\b",relevance:0},{className:"string",begin:'"(GET|POST|HEAD|PUT|DELETE|CONNECT|OPTIONS|PATCH|TRACE)',end:'"',keywords:"GET POST HEAD PUT DELETE CONNECT OPTIONS PATCH TRACE",illegal:"\\n",relevance:10},{className:"string",begin:/\[/,end:/\]/,illegal:"\\n"},{className:"string",begin:'"',end:'"',illegal:"\\n"}]}}),a.registerLanguage("actionscript",function(a){var b="[a-zA-Z_$][a-zA-Z0-9_$]*",c="([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)",d={className:"rest_arg",begin:"[.]{3}",end:b,relevance:10};return{aliases:["as"],keywords:{keyword:"as break case catch class const continue default delete do dynamic each else extends final finally for function get if implements import in include instanceof interface internal is namespace native new override package private protected public return set static super switch this throw try typeof use var void while with",literal:"true false null undefined"},contains:[a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.C_NUMBER_MODE,{className:"package",beginKeywords:"package",end:"{",contains:[a.TITLE_MODE]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,contains:[{beginKeywords:"extends implements"},a.TITLE_MODE]},{className:"preprocessor",beginKeywords:"import include",end:";"},{className:"function",beginKeywords:"function",end:"[{;]",excludeEnd:!0,illegal:"\\S",contains:[a.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:[a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,d]},{className:"type",begin:":",end:c,relevance:10}]}],illegal:/#/}}),a.registerLanguage("apache",function(a){var b={className:"number",begin:"[\\$%]\\d+"};return{aliases:["apacheconf"],case_insensitive:!0,contains:[a.HASH_COMMENT_MODE,{className:"tag",begin:"</?",end:">"},{className:"keyword",begin:/\w+/,relevance:0,keywords:{common:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all"},contains:[{className:"sqbracket",begin:"\\s\\[",end:"\\]$"},{className:"cbracket",begin:"[\\$%]\\{",end:"\\}",contains:["self",b]},b,a.QUOTE_STRING_MODE]}}],illegal:/\S/}}),a.registerLanguage("applescript",function(a){var b=a.inherit(a.QUOTE_STRING_MODE,{illegal:""}),c={className:"params",begin:"\\(",end:"\\)",contains:["self",a.C_NUMBER_MODE,b]},d=a.COMMENT("--","$"),e=a.COMMENT("\\(\\*","\\*\\)",{contains:["self",d]}),f=[d,e,a.HASH_COMMENT_MODE];return{aliases:["osascript"],keywords:{keyword:"about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the|0 then third through thru timeout times to transaction try until where while whose with without",constant:"AppleScript false linefeed return pi quote result space tab true",type:"alias application boolean class constant date file integer list number real record string text",command:"activate beep count delay launch log offset read round run say summarize write",property:"character characters contents day frontmost id item length month name paragraph paragraphs rest reverse running time version weekday word words year"},contains:[b,a.C_NUMBER_MODE,{className:"type",begin:"\\bPOSIX file\\b"},{className:"command",begin:"\\b(clipboard info|the clipboard|info for|list (disks|folder)|mount volume|path to|(close|open for) access|(get|set) eof|current date|do shell script|get volume settings|random number|set volume|system attribute|system info|time to GMT|(load|run|store) script|scripting components|ASCII (character|number)|localized string|choose (application|color|file|file name|folder|from list|remote application|URL)|display (alert|dialog))\\b|^\\s*return\\b"},{className:"constant",begin:"\\b(text item delimiters|current application|missing value)\\b"},{className:"keyword",begin:"\\b(apart from|aside from|instead of|out of|greater than|isn't|(doesn't|does not) (equal|come before|come after|contain)|(greater|less) than( or equal)?|(starts?|ends|begins?) with|contained by|comes (before|after)|a (ref|reference))\\b"},{className:"property",begin:"\\b(POSIX path|(date|time) string|quoted form)\\b"},{className:"function_start",beginKeywords:"on",illegal:"[${=;\\n]",contains:[a.UNDERSCORE_TITLE_MODE,c]}].concat(f),illegal:"//|->|=>|\\[\\["}}),a.registerLanguage("armasm",function(a){return{case_insensitive:!0,aliases:["arm"],lexemes:"\\.?"+a.IDENT_RE,keywords:{literal:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 ",preprocessor:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"{PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @ "},contains:[{className:"keyword",begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?",end:"\\s"},a.COMMENT("[;@]","$",{relevance:0}),a.C_BLOCK_COMMENT_MODE,a.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"label",variants:[{begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"[=#]\\w+"}],relevance:0}]}}),a.registerLanguage("xml",function(a){var b="[A-Za-z0-9\\._:-]+",c={begin:/<\?(php)?(?!\w)/,end:/\?>/,subLanguage:"php"},d={endsWithParent:!0,illegal:/</,relevance:0,contains:[c,{className:"attribute",begin:b,relevance:0},{begin:"=",relevance:0,contains:[{className:"value",contains:[c],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/[^\s\/>]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xsl","plist"],case_insensitive:!0,contains:[{className:"doctype",begin:"<!DOCTYPE",end:">",relevance:10,contains:[{begin:"\\[",end:"\\]"}]},a.COMMENT("<!--","-->",{relevance:10}),{className:"cdata",begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},{className:"tag",begin:"<style(?=\\s|>|$)",end:">",keywords:{title:"style"},contains:[d],starts:{end:"</style>",returnEnd:!0,subLanguage:"css"}},{className:"tag",begin:"<script(?=\\s|>|$)",end:">",keywords:{title:"script"},contains:[d],starts:{end:"</script>",returnEnd:!0,subLanguage:["actionscript","javascript","handlebars"]}},c,{className:"pi",begin:/<\?\w+/,end:/\?>/,relevance:10},{className:"tag",begin:"</?",end:"/?>",contains:[{className:"title",begin:/[^ \/><\n\t]+/,relevance:0},d]}]}}),a.registerLanguage("asciidoc",function(a){return{aliases:["adoc"],contains:[a.COMMENT("^/{4,}\\n","\\n/{4,}$",{relevance:10}),a.COMMENT("^//","$",{relevance:0}),{className:"title",begin:"^\\.\\w.*$"},{begin:"^[=\\*]{4,}\\n",end:"\\n^[=\\*]{4,}$",relevance:10},{className:"header",begin:"^(={1,5}) .+?( \\1)?$",relevance:10},{className:"header",begin:"^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$",relevance:10},{className:"attribute",begin:"^:.+?:",end:"\\s",excludeEnd:!0,relevance:10},{className:"attribute",begin:"^\\[.+?\\]$",relevance:0},{className:"blockquote",begin:"^_{4,}\\n",end:"\\n_{4,}$",relevance:10},{className:"code",begin:"^[\\-\\.]{4,}\\n",end:"\\n[\\-\\.]{4,}$",relevance:10},{begin:"^\\+{4,}\\n",end:"\\n\\+{4,}$",contains:[{begin:"<",end:">",subLanguage:"xml",relevance:0}],relevance:10},{className:"bullet",begin:"^(\\*+|\\-+|\\.+|[^\\n]+?::)\\s+"},{className:"label",begin:"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+",relevance:10},{className:"strong",begin:"\\B\\*(?![\\*\\s])",end:"(\\n{2}|\\*)",contains:[{begin:"\\\\*\\w",relevance:0}]},{className:"emphasis",begin:"\\B'(?!['\\s])",end:"(\\n{2}|')",contains:[{begin:"\\\\'\\w",relevance:0}],relevance:0},{className:"emphasis",begin:"_(?![_\\s])",end:"(\\n{2}|_)",relevance:0},{className:"smartquote",variants:[{begin:"``.+?''"},{begin:"`.+?'"}]},{className:"code",begin:"(`.+?`|\\+.+?\\+)",relevance:0},{className:"code",begin:"^[ \\t]",end:"$",relevance:0},{className:"horizontal_rule",begin:"^'{3,}[ \\t]*$",relevance:10},{begin:"(link:)?(http|https|ftp|file|irc|image:?):\\S+\\[.*?\\]",returnBegin:!0,contains:[{begin:"(link|image:?):",relevance:0},{className:"link_url",begin:"\\w",end:"[^\\[]+",relevance:0},{className:"link_label",begin:"\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0,relevance:0}],relevance:10}]}}),a.registerLanguage("aspectj",function(a){var b="false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else extends implements break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws privileged aspectOf adviceexecution proceed cflowbelow cflow initialization preinitialization staticinitialization withincode target within execution getWithinTypeName handler thisJoinPoint thisJoinPointStaticPart thisEnclosingJoinPointStaticPart declare parents warning error soft precedence thisAspectInstance",c="get set args call";return{keywords:b,illegal:/<\/|#/,contains:[a.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,{className:"aspect",beginKeywords:"aspect",end:/[{;=]/,excludeEnd:!0,illegal:/[:;"\[\]]/,contains:[{beginKeywords:"extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton"},a.UNDERSCORE_TITLE_MODE,{begin:/\([^\)]*/,end:/[)]+/,keywords:b+" "+c,excludeEnd:!1}]},{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,relevance:0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},a.UNDERSCORE_TITLE_MODE]},{beginKeywords:"pointcut after before around throwing returning",end:/[)]/,excludeEnd:!1,illegal:/["\[\]]/,contains:[{begin:a.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,contains:[a.UNDERSCORE_TITLE_MODE]}]},{begin:/[:]/,returnBegin:!0,end:/[{;]/,relevance:0,excludeEnd:!1,keywords:b,illegal:/["\[\]]/,contains:[{begin:a.UNDERSCORE_IDENT_RE+"\\s*\\(",keywords:b+" "+c},a.QUOTE_STRING_MODE]},{beginKeywords:"new throw",relevance:0},{className:"function",begin:/\w+ +\w+(\.)?\w+\s*\([^\)]*\)\s*((throws)[\w\s,]+)?[\{;]/,returnBegin:!0,end:/[{;=]/,keywords:b,excludeEnd:!0,contains:[{begin:a.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[a.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,relevance:0,keywords:b,contains:[a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.C_NUMBER_MODE,a.C_BLOCK_COMMENT_MODE]},a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE]},a.C_NUMBER_MODE,{className:"annotation",begin:"@[A-Za-z]+"}]}}),a.registerLanguage("autohotkey",function(a){var b={className:"escape",begin:"`[\\s\\S]"},c=a.COMMENT(";","$",{relevance:0}),d=[{className:"built_in",begin:"A_[a-zA-Z0-9]+"},{className:"built_in",beginKeywords:"ComSpec Clipboard ClipboardAll ErrorLevel"}];return{case_insensitive:!0,keywords:{keyword:"Break Continue Else Gosub If Loop Return While",literal:"A true false NOT AND OR"},contains:d.concat([b,a.inherit(a.QUOTE_STRING_MODE,{contains:[b]}),c,{className:"number",begin:a.NUMBER_RE,relevance:0},{className:"var_expand",begin:"%",end:"%",illegal:"\\n",contains:[b]},{className:"label",contains:[b],variants:[{begin:'^[^\\n";]+::(?!=)'},{begin:'^[^\\n";]+:(?!=)',relevance:0}]},{begin:",\\s*,",relevance:10}])}}),a.registerLanguage("autoit",function(a){var b="ByRef Case Const ContinueCase ContinueLoop Default Dim Do Else ElseIf EndFunc EndIf EndSelect EndSwitch EndWith Enum Exit ExitLoop For Func Global If In Local Next ReDim Return Select Static Step Switch Then To Until Volatile WEnd While With",c="True False And Null Not Or",d="Abs ACos AdlibRegister AdlibUnRegister Asc AscW ASin Assign ATan AutoItSetOption AutoItWinGetTitle AutoItWinSetTitle Beep Binary BinaryLen BinaryMid BinaryToString BitAND BitNOT BitOR BitRotate BitShift BitXOR BlockInput Break Call CDTray Ceiling Chr ChrW ClipGet ClipPut ConsoleRead ConsoleWrite ConsoleWriteError ControlClick ControlCommand ControlDisable ControlEnable ControlFocus ControlGetFocus ControlGetHandle ControlGetPos ControlGetText ControlHide ControlListView ControlMove ControlSend ControlSetText ControlShow ControlTreeView Cos Dec DirCopy DirCreate DirGetSize DirMove DirRemove DllCall DllCallAddress DllCallbackFree DllCallbackGetPtr DllCallbackRegister DllClose DllOpen DllStructCreate DllStructGetData DllStructGetPtr DllStructGetSize DllStructSetData DriveGetDrive DriveGetFileSystem DriveGetLabel DriveGetSerial DriveGetType DriveMapAdd DriveMapDel DriveMapGet DriveSetLabel DriveSpaceFree DriveSpaceTotal DriveStatus EnvGet EnvSet EnvUpdate Eval Execute Exp FileChangeDir FileClose FileCopy FileCreateNTFSLink FileCreateShortcut FileDelete FileExists FileFindFirstFile FileFindNextFile FileFlush FileGetAttrib FileGetEncoding FileGetLongName FileGetPos FileGetShortcut FileGetShortName FileGetSize FileGetTime FileGetVersion FileInstall FileMove FileOpen FileOpenDialog FileRead FileReadLine FileReadToArray FileRecycle FileRecycleEmpty FileSaveDialog FileSelectFolder FileSetAttrib FileSetEnd FileSetPos FileSetTime FileWrite FileWriteLine Floor FtpSetProxy FuncName GUICreate GUICtrlCreateAvi GUICtrlCreateButton GUICtrlCreateCheckbox GUICtrlCreateCombo GUICtrlCreateContextMenu GUICtrlCreateDate GUICtrlCreateDummy GUICtrlCreateEdit GUICtrlCreateGraphic GUICtrlCreateGroup GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel GUICtrlCreateList GUICtrlCreateListView GUICtrlCreateListViewItem GUICtrlCreateMenu GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem GUICtrlCreateTreeView GUICtrlCreateTreeViewItem GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetHandle GUICtrlGetState GUICtrlRead GUICtrlRecvMsg GUICtrlRegisterListViewSort GUICtrlSendMsg GUICtrlSendToDummy GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor GUICtrlSetData GUICtrlSetDefBkColor GUICtrlSetDefColor GUICtrlSetFont GUICtrlSetGraphic GUICtrlSetImage GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle GUICtrlSetTip GUIDelete GUIGetCursorInfo GUIGetMsg GUIGetStyle GUIRegisterMsg GUISetAccelerators GUISetBkColor GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon GUISetOnEvent GUISetState GUISetStyle GUIStartGroup GUISwitch Hex HotKeySet HttpSetProxy HttpSetUserAgent HWnd InetClose InetGet InetGetInfo InetGetSize InetRead IniDelete IniRead IniReadSection IniReadSectionNames IniRenameSection IniWrite IniWriteSection InputBox Int IsAdmin IsArray IsBinary IsBool IsDeclared IsDllStruct IsFloat IsFunc IsHWnd IsInt IsKeyword IsNumber IsObj IsPtr IsString Log MemGetStats Mod MouseClick MouseClickDrag MouseDown MouseGetCursor MouseGetPos MouseMove MouseUp MouseWheel MsgBox Number ObjCreate ObjCreateInterface ObjEvent ObjGet ObjName OnAutoItExitRegister OnAutoItExitUnRegister Opt Ping PixelChecksum PixelGetColor PixelSearch ProcessClose ProcessExists ProcessGetStats ProcessList ProcessSetPriority ProcessWait ProcessWaitClose ProgressOff ProgressOn ProgressSet Ptr Random RegDelete RegEnumKey RegEnumVal RegRead RegWrite Round Run RunAs RunAsWait RunWait Send SendKeepActive SetError SetExtended ShellExecute ShellExecuteWait Shutdown Sin Sleep SoundPlay SoundSetWaveVolume SplashImageOn SplashOff SplashTextOn Sqrt SRandom StatusbarGetText StderrRead StdinWrite StdioClose StdoutRead String StringAddCR StringCompare StringFormat StringFromASCIIArray StringInStr StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit StringIsFloat StringIsInt StringIsLower StringIsSpace StringIsUpper StringIsXDigit StringLeft StringLen StringLower StringMid StringRegExp StringRegExpReplace StringReplace StringReverse StringRight StringSplit StringStripCR StringStripWS StringToASCIIArray StringToBinary StringTrimLeft StringTrimRight StringUpper Tan TCPAccept TCPCloseSocket TCPConnect TCPListen TCPNameToIP TCPRecv TCPSend TCPShutdown TCPStartup TimerDiff TimerInit ToolTip TrayCreateItem TrayCreateMenu TrayGetMsg TrayItemDelete TrayItemGetHandle TrayItemGetState TrayItemGetText TrayItemSetOnEvent TrayItemSetState TrayItemSetText TraySetClick TraySetIcon TraySetOnEvent TraySetPauseIcon TraySetState TraySetToolTip TrayTip UBound UDPBind UDPCloseSocket UDPOpen UDPRecv UDPSend UDPShutdown UDPStartup VarGetType WinActivate WinActive WinClose WinExists WinFlash WinGetCaretPos WinGetClassList WinGetClientSize WinGetHandle WinGetPos WinGetProcess WinGetState WinGetText WinGetTitle WinKill WinList WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo WinMove WinSetOnTop WinSetState WinSetTitle WinSetTrans WinWait WinWaitActive WinWaitClose WinWaitNotActive Array1DToHistogram ArrayAdd ArrayBinarySearch ArrayColDelete ArrayColInsert ArrayCombinations ArrayConcatenate ArrayDelete ArrayDisplay ArrayExtract ArrayFindAll ArrayInsert ArrayMax ArrayMaxIndex ArrayMin ArrayMinIndex ArrayPermute ArrayPop ArrayPush ArrayReverse ArraySearch ArrayShuffle ArraySort ArraySwap ArrayToClip ArrayToString ArrayTranspose ArrayTrim ArrayUnique Assert ChooseColor ChooseFont ClipBoard_ChangeChain ClipBoard_Close ClipBoard_CountFormats ClipBoard_Empty ClipBoard_EnumFormats ClipBoard_FormatStr ClipBoard_GetData ClipBoard_GetDataEx ClipBoard_GetFormatName ClipBoard_GetOpenWindow ClipBoard_GetOwner ClipBoard_GetPriorityFormat ClipBoard_GetSequenceNumber ClipBoard_GetViewer ClipBoard_IsFormatAvailable ClipBoard_Open ClipBoard_RegisterFormat ClipBoard_SetData ClipBoard_SetDataEx ClipBoard_SetViewer ClipPutFile ColorConvertHSLtoRGB ColorConvertRGBtoHSL ColorGetBlue ColorGetCOLORREF ColorGetGreen ColorGetRed ColorGetRGB ColorSetCOLORREF ColorSetRGB Crypt_DecryptData Crypt_DecryptFile Crypt_DeriveKey Crypt_DestroyKey Crypt_EncryptData Crypt_EncryptFile Crypt_GenRandom Crypt_HashData Crypt_HashFile Crypt_Shutdown Crypt_Startup DateAdd DateDayOfWeek DateDaysInMonth DateDiff DateIsLeapYear DateIsValid DateTimeFormat DateTimeSplit DateToDayOfWeek DateToDayOfWeekISO DateToDayValue DateToMonth Date_Time_CompareFileTime Date_Time_DOSDateTimeToArray Date_Time_DOSDateTimeToFileTime Date_Time_DOSDateTimeToStr Date_Time_DOSDateToArray Date_Time_DOSDateToStr Date_Time_DOSTimeToArray Date_Time_DOSTimeToStr Date_Time_EncodeFileTime Date_Time_EncodeSystemTime Date_Time_FileTimeToArray Date_Time_FileTimeToDOSDateTime Date_Time_FileTimeToLocalFileTime Date_Time_FileTimeToStr Date_Time_FileTimeToSystemTime Date_Time_GetFileTime Date_Time_GetLocalTime Date_Time_GetSystemTime Date_Time_GetSystemTimeAdjustment Date_Time_GetSystemTimeAsFileTime Date_Time_GetSystemTimes Date_Time_GetTickCount Date_Time_GetTimeZoneInformation Date_Time_LocalFileTimeToFileTime Date_Time_SetFileTime Date_Time_SetLocalTime Date_Time_SetSystemTime Date_Time_SetSystemTimeAdjustment Date_Time_SetTimeZoneInformation Date_Time_SystemTimeToArray Date_Time_SystemTimeToDateStr Date_Time_SystemTimeToDateTimeStr Date_Time_SystemTimeToFileTime Date_Time_SystemTimeToTimeStr Date_Time_SystemTimeToTzSpecificLocalTime Date_Time_TzSpecificLocalTimeToSystemTime DayValueToDate DebugBugReportEnv DebugCOMError DebugOut DebugReport DebugReportEx DebugReportVar DebugSetup Degree EventLog__Backup EventLog__Clear EventLog__Close EventLog__Count EventLog__DeregisterSource EventLog__Full EventLog__Notify EventLog__Oldest EventLog__Open EventLog__OpenBackup EventLog__Read EventLog__RegisterSource EventLog__Report Excel_BookAttach Excel_BookClose Excel_BookList Excel_BookNew Excel_BookOpen Excel_BookOpenText Excel_BookSave Excel_BookSaveAs Excel_Close Excel_ColumnToLetter Excel_ColumnToNumber Excel_ConvertFormula Excel_Export Excel_FilterGet Excel_FilterSet Excel_Open Excel_PictureAdd Excel_Print Excel_RangeCopyPaste Excel_RangeDelete Excel_RangeFind Excel_RangeInsert Excel_RangeLinkAddRemove Excel_RangeRead Excel_RangeReplace Excel_RangeSort Excel_RangeValidate Excel_RangeWrite Excel_SheetAdd Excel_SheetCopyMove Excel_SheetDelete Excel_SheetList FileCountLines FileCreate FileListToArray FileListToArrayRec FilePrint FileReadToArray FileWriteFromArray FileWriteLog FileWriteToLine FTP_Close FTP_Command FTP_Connect FTP_DecodeInternetStatus FTP_DirCreate FTP_DirDelete FTP_DirGetCurrent FTP_DirPutContents FTP_DirSetCurrent FTP_FileClose FTP_FileDelete FTP_FileGet FTP_FileGetSize FTP_FileOpen FTP_FilePut FTP_FileRead FTP_FileRename FTP_FileTimeLoHiToStr FTP_FindFileClose FTP_FindFileFirst FTP_FindFileNext FTP_GetLastResponseInfo FTP_ListToArray FTP_ListToArray2D FTP_ListToArrayEx FTP_Open FTP_ProgressDownload FTP_ProgressUpload FTP_SetStatusCallback GDIPlus_ArrowCapCreate GDIPlus_ArrowCapDispose GDIPlus_ArrowCapGetFillState GDIPlus_ArrowCapGetHeight GDIPlus_ArrowCapGetMiddleInset GDIPlus_ArrowCapGetWidth GDIPlus_ArrowCapSetFillState GDIPlus_ArrowCapSetHeight GDIPlus_ArrowCapSetMiddleInset GDIPlus_ArrowCapSetWidth GDIPlus_BitmapApplyEffect GDIPlus_BitmapApplyEffectEx GDIPlus_BitmapCloneArea GDIPlus_BitmapConvertFormat GDIPlus_BitmapCreateApplyEffect GDIPlus_BitmapCreateApplyEffectEx GDIPlus_BitmapCreateDIBFromBitmap GDIPlus_BitmapCreateFromFile GDIPlus_BitmapCreateFromGraphics GDIPlus_BitmapCreateFromHBITMAP GDIPlus_BitmapCreateFromHICON GDIPlus_BitmapCreateFromHICON32 GDIPlus_BitmapCreateFromMemory GDIPlus_BitmapCreateFromResource GDIPlus_BitmapCreateFromScan0 GDIPlus_BitmapCreateFromStream GDIPlus_BitmapCreateHBITMAPFromBitmap GDIPlus_BitmapDispose GDIPlus_BitmapGetHistogram GDIPlus_BitmapGetHistogramEx GDIPlus_BitmapGetHistogramSize GDIPlus_BitmapGetPixel GDIPlus_BitmapLockBits GDIPlus_BitmapSetPixel GDIPlus_BitmapUnlockBits GDIPlus_BrushClone GDIPlus_BrushCreateSolid GDIPlus_BrushDispose GDIPlus_BrushGetSolidColor GDIPlus_BrushGetType GDIPlus_BrushSetSolidColor GDIPlus_ColorMatrixCreate GDIPlus_ColorMatrixCreateGrayScale GDIPlus_ColorMatrixCreateNegative GDIPlus_ColorMatrixCreateSaturation GDIPlus_ColorMatrixCreateScale GDIPlus_ColorMatrixCreateTranslate GDIPlus_CustomLineCapClone GDIPlus_CustomLineCapCreate GDIPlus_CustomLineCapDispose GDIPlus_CustomLineCapGetStrokeCaps GDIPlus_CustomLineCapSetStrokeCaps GDIPlus_Decoders GDIPlus_DecodersGetCount GDIPlus_DecodersGetSize GDIPlus_DrawImageFX GDIPlus_DrawImageFXEx GDIPlus_DrawImagePoints GDIPlus_EffectCreate GDIPlus_EffectCreateBlur GDIPlus_EffectCreateBrightnessContrast GDIPlus_EffectCreateColorBalance GDIPlus_EffectCreateColorCurve GDIPlus_EffectCreateColorLUT GDIPlus_EffectCreateColorMatrix GDIPlus_EffectCreateHueSaturationLightness GDIPlus_EffectCreateLevels GDIPlus_EffectCreateRedEyeCorrection GDIPlus_EffectCreateSharpen GDIPlus_EffectCreateTint GDIPlus_EffectDispose GDIPlus_EffectGetParameters GDIPlus_EffectSetParameters GDIPlus_Encoders GDIPlus_EncodersGetCLSID GDIPlus_EncodersGetCount GDIPlus_EncodersGetParamList GDIPlus_EncodersGetParamListSize GDIPlus_EncodersGetSize GDIPlus_FontCreate GDIPlus_FontDispose GDIPlus_FontFamilyCreate GDIPlus_FontFamilyCreateFromCollection GDIPlus_FontFamilyDispose GDIPlus_FontFamilyGetCellAscent GDIPlus_FontFamilyGetCellDescent GDIPlus_FontFamilyGetEmHeight GDIPlus_FontFamilyGetLineSpacing GDIPlus_FontGetHeight GDIPlus_FontPrivateAddFont GDIPlus_FontPrivateAddMemoryFont GDIPlus_FontPrivateCollectionDispose GDIPlus_FontPrivateCreateCollection GDIPlus_GraphicsClear GDIPlus_GraphicsCreateFromHDC GDIPlus_GraphicsCreateFromHWND GDIPlus_GraphicsDispose GDIPlus_GraphicsDrawArc GDIPlus_GraphicsDrawBezier GDIPlus_GraphicsDrawClosedCurve GDIPlus_GraphicsDrawClosedCurve2 GDIPlus_GraphicsDrawCurve GDIPlus_GraphicsDrawCurve2 GDIPlus_GraphicsDrawEllipse GDIPlus_GraphicsDrawImage GDIPlus_GraphicsDrawImagePointsRect GDIPlus_GraphicsDrawImageRect GDIPlus_GraphicsDrawImageRectRect GDIPlus_GraphicsDrawLine GDIPlus_GraphicsDrawPath GDIPlus_GraphicsDrawPie GDIPlus_GraphicsDrawPolygon GDIPlus_GraphicsDrawRect GDIPlus_GraphicsDrawString GDIPlus_GraphicsDrawStringEx GDIPlus_GraphicsFillClosedCurve GDIPlus_GraphicsFillClosedCurve2 GDIPlus_GraphicsFillEllipse GDIPlus_GraphicsFillPath GDIPlus_GraphicsFillPie GDIPlus_GraphicsFillPolygon GDIPlus_GraphicsFillRect GDIPlus_GraphicsFillRegion GDIPlus_GraphicsGetCompositingMode GDIPlus_GraphicsGetCompositingQuality GDIPlus_GraphicsGetDC GDIPlus_GraphicsGetInterpolationMode GDIPlus_GraphicsGetSmoothingMode GDIPlus_GraphicsGetTransform GDIPlus_GraphicsMeasureCharacterRanges GDIPlus_GraphicsMeasureString GDIPlus_GraphicsReleaseDC GDIPlus_GraphicsResetClip GDIPlus_GraphicsResetTransform GDIPlus_GraphicsRestore GDIPlus_GraphicsRotateTransform GDIPlus_GraphicsSave GDIPlus_GraphicsScaleTransform GDIPlus_GraphicsSetClipPath GDIPlus_GraphicsSetClipRect GDIPlus_GraphicsSetClipRegion GDIPlus_GraphicsSetCompositingMode GDIPlus_GraphicsSetCompositingQuality GDIPlus_GraphicsSetInterpolationMode GDIPlus_GraphicsSetPixelOffsetMode GDIPlus_GraphicsSetSmoothingMode GDIPlus_GraphicsSetTextRenderingHint GDIPlus_GraphicsSetTransform GDIPlus_GraphicsTransformPoints GDIPlus_GraphicsTranslateTransform GDIPlus_HatchBrushCreate GDIPlus_HICONCreateFromBitmap GDIPlus_ImageAttributesCreate GDIPlus_ImageAttributesDispose GDIPlus_ImageAttributesSetColorKeys GDIPlus_ImageAttributesSetColorMatrix GDIPlus_ImageDispose GDIPlus_ImageGetDimension GDIPlus_ImageGetFlags GDIPlus_ImageGetGraphicsContext GDIPlus_ImageGetHeight GDIPlus_ImageGetHorizontalResolution GDIPlus_ImageGetPixelFormat GDIPlus_ImageGetRawFormat GDIPlus_ImageGetThumbnail GDIPlus_ImageGetType GDIPlus_ImageGetVerticalResolution GDIPlus_ImageGetWidth GDIPlus_ImageLoadFromFile GDIPlus_ImageLoadFromStream GDIPlus_ImageResize GDIPlus_ImageRotateFlip GDIPlus_ImageSaveToFile GDIPlus_ImageSaveToFileEx GDIPlus_ImageSaveToStream GDIPlus_ImageScale GDIPlus_LineBrushCreate GDIPlus_LineBrushCreateFromRect GDIPlus_LineBrushCreateFromRectWithAngle GDIPlus_LineBrushGetColors GDIPlus_LineBrushGetRect GDIPlus_LineBrushMultiplyTransform GDIPlus_LineBrushResetTransform GDIPlus_LineBrushSetBlend GDIPlus_LineBrushSetColors GDIPlus_LineBrushSetGammaCorrection GDIPlus_LineBrushSetLinearBlend GDIPlus_LineBrushSetPresetBlend GDIPlus_LineBrushSetSigmaBlend GDIPlus_LineBrushSetTransform GDIPlus_MatrixClone GDIPlus_MatrixCreate GDIPlus_MatrixDispose GDIPlus_MatrixGetElements GDIPlus_MatrixInvert GDIPlus_MatrixMultiply GDIPlus_MatrixRotate GDIPlus_MatrixScale GDIPlus_MatrixSetElements GDIPlus_MatrixShear GDIPlus_MatrixTransformPoints GDIPlus_MatrixTranslate GDIPlus_PaletteInitialize GDIPlus_ParamAdd GDIPlus_ParamInit GDIPlus_ParamSize GDIPlus_PathAddArc GDIPlus_PathAddBezier GDIPlus_PathAddClosedCurve GDIPlus_PathAddClosedCurve2 GDIPlus_PathAddCurve GDIPlus_PathAddCurve2 GDIPlus_PathAddCurve3 GDIPlus_PathAddEllipse GDIPlus_PathAddLine GDIPlus_PathAddLine2 GDIPlus_PathAddPath GDIPlus_PathAddPie GDIPlus_PathAddPolygon GDIPlus_PathAddRectangle GDIPlus_PathAddString GDIPlus_PathBrushCreate GDIPlus_PathBrushCreateFromPath GDIPlus_PathBrushGetCenterPoint GDIPlus_PathBrushGetFocusScales GDIPlus_PathBrushGetPointCount GDIPlus_PathBrushGetRect GDIPlus_PathBrushGetWrapMode GDIPlus_PathBrushMultiplyTransform GDIPlus_PathBrushResetTransform GDIPlus_PathBrushSetBlend GDIPlus_PathBrushSetCenterColor GDIPlus_PathBrushSetCenterPoint GDIPlus_PathBrushSetFocusScales GDIPlus_PathBrushSetGammaCorrection GDIPlus_PathBrushSetLinearBlend GDIPlus_PathBrushSetPresetBlend GDIPlus_PathBrushSetSigmaBlend GDIPlus_PathBrushSetSurroundColor GDIPlus_PathBrushSetSurroundColorsWithCount GDIPlus_PathBrushSetTransform GDIPlus_PathBrushSetWrapMode GDIPlus_PathClone GDIPlus_PathCloseFigure GDIPlus_PathCreate GDIPlus_PathCreate2 GDIPlus_PathDispose GDIPlus_PathFlatten GDIPlus_PathGetData GDIPlus_PathGetFillMode GDIPlus_PathGetLastPoint GDIPlus_PathGetPointCount GDIPlus_PathGetPoints GDIPlus_PathGetWorldBounds GDIPlus_PathIsOutlineVisiblePoint GDIPlus_PathIsVisiblePoint GDIPlus_PathIterCreate GDIPlus_PathIterDispose GDIPlus_PathIterGetSubpathCount GDIPlus_PathIterNextMarkerPath GDIPlus_PathIterNextSubpathPath GDIPlus_PathIterRewind GDIPlus_PathReset GDIPlus_PathReverse GDIPlus_PathSetFillMode GDIPlus_PathSetMarker GDIPlus_PathStartFigure GDIPlus_PathTransform GDIPlus_PathWarp GDIPlus_PathWiden GDIPlus_PathWindingModeOutline GDIPlus_PenCreate GDIPlus_PenCreate2 GDIPlus_PenDispose GDIPlus_PenGetAlignment GDIPlus_PenGetColor GDIPlus_PenGetCustomEndCap GDIPlus_PenGetDashCap GDIPlus_PenGetDashStyle GDIPlus_PenGetEndCap GDIPlus_PenGetMiterLimit GDIPlus_PenGetWidth GDIPlus_PenSetAlignment GDIPlus_PenSetColor GDIPlus_PenSetCustomEndCap GDIPlus_PenSetDashCap GDIPlus_PenSetDashStyle GDIPlus_PenSetEndCap GDIPlus_PenSetLineCap GDIPlus_PenSetLineJoin GDIPlus_PenSetMiterLimit GDIPlus_PenSetStartCap GDIPlus_PenSetWidth GDIPlus_RectFCreate GDIPlus_RegionClone GDIPlus_RegionCombinePath GDIPlus_RegionCombineRect GDIPlus_RegionCombineRegion GDIPlus_RegionCreate GDIPlus_RegionCreateFromPath GDIPlus_RegionCreateFromRect GDIPlus_RegionDispose GDIPlus_RegionGetBounds GDIPlus_RegionGetHRgn GDIPlus_RegionTransform GDIPlus_RegionTranslate GDIPlus_Shutdown GDIPlus_Startup GDIPlus_StringFormatCreate GDIPlus_StringFormatDispose GDIPlus_StringFormatGetMeasurableCharacterRangeCount GDIPlus_StringFormatSetAlign GDIPlus_StringFormatSetLineAlign GDIPlus_StringFormatSetMeasurableCharacterRanges GDIPlus_TextureCreate GDIPlus_TextureCreate2 GDIPlus_TextureCreateIA GetIP GUICtrlAVI_Close GUICtrlAVI_Create GUICtrlAVI_Destroy GUICtrlAVI_IsPlaying GUICtrlAVI_Open GUICtrlAVI_OpenEx GUICtrlAVI_Play GUICtrlAVI_Seek GUICtrlAVI_Show GUICtrlAVI_Stop GUICtrlButton_Click GUICtrlButton_Create GUICtrlButton_Destroy GUICtrlButton_Enable GUICtrlButton_GetCheck GUICtrlButton_GetFocus GUICtrlButton_GetIdealSize GUICtrlButton_GetImage GUICtrlButton_GetImageList GUICtrlButton_GetNote GUICtrlButton_GetNoteLength GUICtrlButton_GetSplitInfo GUICtrlButton_GetState GUICtrlButton_GetText GUICtrlButton_GetTextMargin GUICtrlButton_SetCheck GUICtrlButton_SetDontClick GUICtrlButton_SetFocus GUICtrlButton_SetImage GUICtrlButton_SetImageList GUICtrlButton_SetNote GUICtrlButton_SetShield GUICtrlButton_SetSize GUICtrlButton_SetSplitInfo GUICtrlButton_SetState GUICtrlButton_SetStyle GUICtrlButton_SetText GUICtrlButton_SetTextMargin GUICtrlButton_Show GUICtrlComboBoxEx_AddDir GUICtrlComboBoxEx_AddString GUICtrlComboBoxEx_BeginUpdate GUICtrlComboBoxEx_Create GUICtrlComboBoxEx_CreateSolidBitMap GUICtrlComboBoxEx_DeleteString GUICtrlComboBoxEx_Destroy GUICtrlComboBoxEx_EndUpdate GUICtrlComboBoxEx_FindStringExact GUICtrlComboBoxEx_GetComboBoxInfo GUICtrlComboBoxEx_GetComboControl GUICtrlComboBoxEx_GetCount GUICtrlComboBoxEx_GetCurSel GUICtrlComboBoxEx_GetDroppedControlRect GUICtrlComboBoxEx_GetDroppedControlRectEx GUICtrlComboBoxEx_GetDroppedState GUICtrlComboBoxEx_GetDroppedWidth GUICtrlComboBoxEx_GetEditControl GUICtrlComboBoxEx_GetEditSel GUICtrlComboBoxEx_GetEditText GUICtrlComboBoxEx_GetExtendedStyle GUICtrlComboBoxEx_GetExtendedUI GUICtrlComboBoxEx_GetImageList GUICtrlComboBoxEx_GetItem GUICtrlComboBoxEx_GetItemEx GUICtrlComboBoxEx_GetItemHeight GUICtrlComboBoxEx_GetItemImage GUICtrlComboBoxEx_GetItemIndent GUICtrlComboBoxEx_GetItemOverlayImage GUICtrlComboBoxEx_GetItemParam GUICtrlComboBoxEx_GetItemSelectedImage GUICtrlComboBoxEx_GetItemText GUICtrlComboBoxEx_GetItemTextLen GUICtrlComboBoxEx_GetList GUICtrlComboBoxEx_GetListArray GUICtrlComboBoxEx_GetLocale GUICtrlComboBoxEx_GetLocaleCountry GUICtrlComboBoxEx_GetLocaleLang GUICtrlComboBoxEx_GetLocalePrimLang GUICtrlComboBoxEx_GetLocaleSubLang GUICtrlComboBoxEx_GetMinVisible GUICtrlComboBoxEx_GetTopIndex GUICtrlComboBoxEx_GetUnicode GUICtrlComboBoxEx_InitStorage GUICtrlComboBoxEx_InsertString GUICtrlComboBoxEx_LimitText GUICtrlComboBoxEx_ReplaceEditSel GUICtrlComboBoxEx_ResetContent GUICtrlComboBoxEx_SetCurSel GUICtrlComboBoxEx_SetDroppedWidth GUICtrlComboBoxEx_SetEditSel GUICtrlComboBoxEx_SetEditText GUICtrlComboBoxEx_SetExtendedStyle GUICtrlComboBoxEx_SetExtendedUI GUICtrlComboBoxEx_SetImageList GUICtrlComboBoxEx_SetItem GUICtrlComboBoxEx_SetItemEx GUICtrlComboBoxEx_SetItemHeight GUICtrlComboBoxEx_SetItemImage GUICtrlComboBoxEx_SetItemIndent GUICtrlComboBoxEx_SetItemOverlayImage GUICtrlComboBoxEx_SetItemParam GUICtrlComboBoxEx_SetItemSelectedImage GUICtrlComboBoxEx_SetMinVisible GUICtrlComboBoxEx_SetTopIndex GUICtrlComboBoxEx_SetUnicode GUICtrlComboBoxEx_ShowDropDown GUICtrlComboBox_AddDir GUICtrlComboBox_AddString GUICtrlComboBox_AutoComplete GUICtrlComboBox_BeginUpdate GUICtrlComboBox_Create GUICtrlComboBox_DeleteString GUICtrlComboBox_Destroy GUICtrlComboBox_EndUpdate GUICtrlComboBox_FindString GUICtrlComboBox_FindStringExact GUICtrlComboBox_GetComboBoxInfo GUICtrlComboBox_GetCount GUICtrlComboBox_GetCueBanner GUICtrlComboBox_GetCurSel GUICtrlComboBox_GetDroppedControlRect GUICtrlComboBox_GetDroppedControlRectEx GUICtrlComboBox_GetDroppedState GUICtrlComboBox_GetDroppedWidth GUICtrlComboBox_GetEditSel GUICtrlComboBox_GetEditText GUICtrlComboBox_GetExtendedUI GUICtrlComboBox_GetHorizontalExtent GUICtrlComboBox_GetItemHeight GUICtrlComboBox_GetLBText GUICtrlComboBox_GetLBTextLen GUICtrlComboBox_GetList GUICtrlComboBox_GetListArray GUICtrlComboBox_GetLocale GUICtrlComboBox_GetLocaleCountry GUICtrlComboBox_GetLocaleLang GUICtrlComboBox_GetLocalePrimLang GUICtrlComboBox_GetLocaleSubLang GUICtrlComboBox_GetMinVisible GUICtrlComboBox_GetTopIndex GUICtrlComboBox_InitStorage GUICtrlComboBox_InsertString GUICtrlComboBox_LimitText GUICtrlComboBox_ReplaceEditSel GUICtrlComboBox_ResetContent GUICtrlComboBox_SelectString GUICtrlComboBox_SetCueBanner GUICtrlComboBox_SetCurSel GUICtrlComboBox_SetDroppedWidth GUICtrlComboBox_SetEditSel GUICtrlComboBox_SetEditText GUICtrlComboBox_SetExtendedUI GUICtrlComboBox_SetHorizontalExtent GUICtrlComboBox_SetItemHeight GUICtrlComboBox_SetMinVisible GUICtrlComboBox_SetTopIndex GUICtrlComboBox_ShowDropDown GUICtrlDTP_Create GUICtrlDTP_Destroy GUICtrlDTP_GetMCColor GUICtrlDTP_GetMCFont GUICtrlDTP_GetMonthCal GUICtrlDTP_GetRange GUICtrlDTP_GetRangeEx GUICtrlDTP_GetSystemTime GUICtrlDTP_GetSystemTimeEx GUICtrlDTP_SetFormat GUICtrlDTP_SetMCColor GUICtrlDTP_SetMCFont GUICtrlDTP_SetRange GUICtrlDTP_SetRangeEx GUICtrlDTP_SetSystemTime GUICtrlDTP_SetSystemTimeEx GUICtrlEdit_AppendText GUICtrlEdit_BeginUpdate GUICtrlEdit_CanUndo GUICtrlEdit_CharFromPos GUICtrlEdit_Create GUICtrlEdit_Destroy GUICtrlEdit_EmptyUndoBuffer GUICtrlEdit_EndUpdate GUICtrlEdit_Find GUICtrlEdit_FmtLines GUICtrlEdit_GetCueBanner GUICtrlEdit_GetFirstVisibleLine GUICtrlEdit_GetLimitText GUICtrlEdit_GetLine GUICtrlEdit_GetLineCount GUICtrlEdit_GetMargins GUICtrlEdit_GetModify GUICtrlEdit_GetPasswordChar GUICtrlEdit_GetRECT GUICtrlEdit_GetRECTEx GUICtrlEdit_GetSel GUICtrlEdit_GetText GUICtrlEdit_GetTextLen GUICtrlEdit_HideBalloonTip GUICtrlEdit_InsertText GUICtrlEdit_LineFromChar GUICtrlEdit_LineIndex GUICtrlEdit_LineLength GUICtrlEdit_LineScroll GUICtrlEdit_PosFromChar GUICtrlEdit_ReplaceSel GUICtrlEdit_Scroll GUICtrlEdit_SetCueBanner GUICtrlEdit_SetLimitText GUICtrlEdit_SetMargins GUICtrlEdit_SetModify GUICtrlEdit_SetPasswordChar GUICtrlEdit_SetReadOnly GUICtrlEdit_SetRECT GUICtrlEdit_SetRECTEx GUICtrlEdit_SetRECTNP GUICtrlEdit_SetRectNPEx GUICtrlEdit_SetSel GUICtrlEdit_SetTabStops GUICtrlEdit_SetText GUICtrlEdit_ShowBalloonTip GUICtrlEdit_Undo GUICtrlHeader_AddItem GUICtrlHeader_ClearFilter GUICtrlHeader_ClearFilterAll GUICtrlHeader_Create GUICtrlHeader_CreateDragImage GUICtrlHeader_DeleteItem GUICtrlHeader_Destroy GUICtrlHeader_EditFilter GUICtrlHeader_GetBitmapMargin GUICtrlHeader_GetImageList GUICtrlHeader_GetItem GUICtrlHeader_GetItemAlign GUICtrlHeader_GetItemBitmap GUICtrlHeader_GetItemCount GUICtrlHeader_GetItemDisplay GUICtrlHeader_GetItemFlags GUICtrlHeader_GetItemFormat GUICtrlHeader_GetItemImage GUICtrlHeader_GetItemOrder GUICtrlHeader_GetItemParam GUICtrlHeader_GetItemRect GUICtrlHeader_GetItemRectEx GUICtrlHeader_GetItemText GUICtrlHeader_GetItemWidth GUICtrlHeader_GetOrderArray GUICtrlHeader_GetUnicodeFormat GUICtrlHeader_HitTest GUICtrlHeader_InsertItem GUICtrlHeader_Layout GUICtrlHeader_OrderToIndex GUICtrlHeader_SetBitmapMargin GUICtrlHeader_SetFilterChangeTimeout GUICtrlHeader_SetHotDivider GUICtrlHeader_SetImageList GUICtrlHeader_SetItem GUICtrlHeader_SetItemAlign GUICtrlHeader_SetItemBitmap GUICtrlHeader_SetItemDisplay GUICtrlHeader_SetItemFlags GUICtrlHeader_SetItemFormat GUICtrlHeader_SetItemImage GUICtrlHeader_SetItemOrder GUICtrlHeader_SetItemParam GUICtrlHeader_SetItemText GUICtrlHeader_SetItemWidth GUICtrlHeader_SetOrderArray GUICtrlHeader_SetUnicodeFormat GUICtrlIpAddress_ClearAddress GUICtrlIpAddress_Create GUICtrlIpAddress_Destroy GUICtrlIpAddress_Get GUICtrlIpAddress_GetArray GUICtrlIpAddress_GetEx GUICtrlIpAddress_IsBlank GUICtrlIpAddress_Set GUICtrlIpAddress_SetArray GUICtrlIpAddress_SetEx GUICtrlIpAddress_SetFocus GUICtrlIpAddress_SetFont GUICtrlIpAddress_SetRange GUICtrlIpAddress_ShowHide GUICtrlListBox_AddFile GUICtrlListBox_AddString GUICtrlListBox_BeginUpdate GUICtrlListBox_ClickItem GUICtrlListBox_Create GUICtrlListBox_DeleteString GUICtrlListBox_Destroy GUICtrlListBox_Dir GUICtrlListBox_EndUpdate GUICtrlListBox_FindInText GUICtrlListBox_FindString GUICtrlListBox_GetAnchorIndex GUICtrlListBox_GetCaretIndex GUICtrlListBox_GetCount GUICtrlListBox_GetCurSel GUICtrlListBox_GetHorizontalExtent GUICtrlListBox_GetItemData GUICtrlListBox_GetItemHeight GUICtrlListBox_GetItemRect GUICtrlListBox_GetItemRectEx GUICtrlListBox_GetListBoxInfo GUICtrlListBox_GetLocale GUICtrlListBox_GetLocaleCountry GUICtrlListBox_GetLocaleLang GUICtrlListBox_GetLocalePrimLang GUICtrlListBox_GetLocaleSubLang GUICtrlListBox_GetSel GUICtrlListBox_GetSelCount GUICtrlListBox_GetSelItems GUICtrlListBox_GetSelItemsText GUICtrlListBox_GetText GUICtrlListBox_GetTextLen GUICtrlListBox_GetTopIndex GUICtrlListBox_InitStorage GUICtrlListBox_InsertString GUICtrlListBox_ItemFromPoint GUICtrlListBox_ReplaceString GUICtrlListBox_ResetContent GUICtrlListBox_SelectString GUICtrlListBox_SelItemRange GUICtrlListBox_SelItemRangeEx GUICtrlListBox_SetAnchorIndex GUICtrlListBox_SetCaretIndex GUICtrlListBox_SetColumnWidth GUICtrlListBox_SetCurSel GUICtrlListBox_SetHorizontalExtent GUICtrlListBox_SetItemData GUICtrlListBox_SetItemHeight GUICtrlListBox_SetLocale GUICtrlListBox_SetSel GUICtrlListBox_SetTabStops GUICtrlListBox_SetTopIndex GUICtrlListBox_Sort GUICtrlListBox_SwapString GUICtrlListBox_UpdateHScroll GUICtrlListView_AddArray GUICtrlListView_AddColumn GUICtrlListView_AddItem GUICtrlListView_AddSubItem GUICtrlListView_ApproximateViewHeight GUICtrlListView_ApproximateViewRect GUICtrlListView_ApproximateViewWidth GUICtrlListView_Arrange GUICtrlListView_BeginUpdate GUICtrlListView_CancelEditLabel GUICtrlListView_ClickItem GUICtrlListView_CopyItems GUICtrlListView_Create GUICtrlListView_CreateDragImage GUICtrlListView_CreateSolidBitMap GUICtrlListView_DeleteAllItems GUICtrlListView_DeleteColumn GUICtrlListView_DeleteItem GUICtrlListView_DeleteItemsSelected GUICtrlListView_Destroy GUICtrlListView_DrawDragImage GUICtrlListView_EditLabel GUICtrlListView_EnableGroupView GUICtrlListView_EndUpdate GUICtrlListView_EnsureVisible GUICtrlListView_FindInText GUICtrlListView_FindItem GUICtrlListView_FindNearest GUICtrlListView_FindParam GUICtrlListView_FindText GUICtrlListView_GetBkColor GUICtrlListView_GetBkImage GUICtrlListView_GetCallbackMask GUICtrlListView_GetColumn GUICtrlListView_GetColumnCount GUICtrlListView_GetColumnOrder GUICtrlListView_GetColumnOrderArray GUICtrlListView_GetColumnWidth GUICtrlListView_GetCounterPage GUICtrlListView_GetEditControl GUICtrlListView_GetExtendedListViewStyle GUICtrlListView_GetFocusedGroup GUICtrlListView_GetGroupCount GUICtrlListView_GetGroupInfo GUICtrlListView_GetGroupInfoByIndex GUICtrlListView_GetGroupRect GUICtrlListView_GetGroupViewEnabled GUICtrlListView_GetHeader GUICtrlListView_GetHotCursor GUICtrlListView_GetHotItem GUICtrlListView_GetHoverTime GUICtrlListView_GetImageList GUICtrlListView_GetISearchString GUICtrlListView_GetItem GUICtrlListView_GetItemChecked GUICtrlListView_GetItemCount GUICtrlListView_GetItemCut GUICtrlListView_GetItemDropHilited GUICtrlListView_GetItemEx GUICtrlListView_GetItemFocused GUICtrlListView_GetItemGroupID GUICtrlListView_GetItemImage GUICtrlListView_GetItemIndent GUICtrlListView_GetItemParam GUICtrlListView_GetItemPosition GUICtrlListView_GetItemPositionX GUICtrlListView_GetItemPositionY GUICtrlListView_GetItemRect GUICtrlListView_GetItemRectEx GUICtrlListView_GetItemSelected GUICtrlListView_GetItemSpacing GUICtrlListView_GetItemSpacingX GUICtrlListView_GetItemSpacingY GUICtrlListView_GetItemState GUICtrlListView_GetItemStateImage GUICtrlListView_GetItemText GUICtrlListView_GetItemTextArray GUICtrlListView_GetItemTextString GUICtrlListView_GetNextItem GUICtrlListView_GetNumberOfWorkAreas GUICtrlListView_GetOrigin GUICtrlListView_GetOriginX GUICtrlListView_GetOriginY GUICtrlListView_GetOutlineColor GUICtrlListView_GetSelectedColumn GUICtrlListView_GetSelectedCount GUICtrlListView_GetSelectedIndices GUICtrlListView_GetSelectionMark GUICtrlListView_GetStringWidth GUICtrlListView_GetSubItemRect GUICtrlListView_GetTextBkColor GUICtrlListView_GetTextColor GUICtrlListView_GetToolTips GUICtrlListView_GetTopIndex GUICtrlListView_GetUnicodeFormat GUICtrlListView_GetView GUICtrlListView_GetViewDetails GUICtrlListView_GetViewLarge GUICtrlListView_GetViewList GUICtrlListView_GetViewRect GUICtrlListView_GetViewSmall GUICtrlListView_GetViewTile GUICtrlListView_HideColumn GUICtrlListView_HitTest GUICtrlListView_InsertColumn GUICtrlListView_InsertGroup GUICtrlListView_InsertItem GUICtrlListView_JustifyColumn GUICtrlListView_MapIDToIndex GUICtrlListView_MapIndexToID GUICtrlListView_RedrawItems GUICtrlListView_RegisterSortCallBack GUICtrlListView_RemoveAllGroups GUICtrlListView_RemoveGroup GUICtrlListView_Scroll GUICtrlListView_SetBkColor GUICtrlListView_SetBkImage GUICtrlListView_SetCallBackMask GUICtrlListView_SetColumn GUICtrlListView_SetColumnOrder GUICtrlListView_SetColumnOrderArray GUICtrlListView_SetColumnWidth GUICtrlListView_SetExtendedListViewStyle GUICtrlListView_SetGroupInfo GUICtrlListView_SetHotItem GUICtrlListView_SetHoverTime GUICtrlListView_SetIconSpacing GUICtrlListView_SetImageList GUICtrlListView_SetItem GUICtrlListView_SetItemChecked GUICtrlListView_SetItemCount GUICtrlListView_SetItemCut GUICtrlListView_SetItemDropHilited GUICtrlListView_SetItemEx GUICtrlListView_SetItemFocused GUICtrlListView_SetItemGroupID GUICtrlListView_SetItemImage GUICtrlListView_SetItemIndent GUICtrlListView_SetItemParam GUICtrlListView_SetItemPosition GUICtrlListView_SetItemPosition32 GUICtrlListView_SetItemSelected GUICtrlListView_SetItemState GUICtrlListView_SetItemStateImage GUICtrlListView_SetItemText GUICtrlListView_SetOutlineColor GUICtrlListView_SetSelectedColumn GUICtrlListView_SetSelectionMark GUICtrlListView_SetTextBkColor GUICtrlListView_SetTextColor GUICtrlListView_SetToolTips GUICtrlListView_SetUnicodeFormat GUICtrlListView_SetView GUICtrlListView_SetWorkAreas GUICtrlListView_SimpleSort GUICtrlListView_SortItems GUICtrlListView_SubItemHitTest GUICtrlListView_UnRegisterSortCallBack GUICtrlMenu_AddMenuItem GUICtrlMenu_AppendMenu GUICtrlMenu_CalculatePopupWindowPosition GUICtrlMenu_CheckMenuItem GUICtrlMenu_CheckRadioItem GUICtrlMenu_CreateMenu GUICtrlMenu_CreatePopup GUICtrlMenu_DeleteMenu GUICtrlMenu_DestroyMenu GUICtrlMenu_DrawMenuBar GUICtrlMenu_EnableMenuItem GUICtrlMenu_FindItem GUICtrlMenu_FindParent GUICtrlMenu_GetItemBmp GUICtrlMenu_GetItemBmpChecked GUICtrlMenu_GetItemBmpUnchecked GUICtrlMenu_GetItemChecked GUICtrlMenu_GetItemCount GUICtrlMenu_GetItemData GUICtrlMenu_GetItemDefault GUICtrlMenu_GetItemDisabled GUICtrlMenu_GetItemEnabled GUICtrlMenu_GetItemGrayed GUICtrlMenu_GetItemHighlighted GUICtrlMenu_GetItemID GUICtrlMenu_GetItemInfo GUICtrlMenu_GetItemRect GUICtrlMenu_GetItemRectEx GUICtrlMenu_GetItemState GUICtrlMenu_GetItemStateEx GUICtrlMenu_GetItemSubMenu GUICtrlMenu_GetItemText GUICtrlMenu_GetItemType GUICtrlMenu_GetMenu GUICtrlMenu_GetMenuBackground GUICtrlMenu_GetMenuBarInfo GUICtrlMenu_GetMenuContextHelpID GUICtrlMenu_GetMenuData GUICtrlMenu_GetMenuDefaultItem GUICtrlMenu_GetMenuHeight GUICtrlMenu_GetMenuInfo GUICtrlMenu_GetMenuStyle GUICtrlMenu_GetSystemMenu GUICtrlMenu_InsertMenuItem GUICtrlMenu_InsertMenuItemEx GUICtrlMenu_IsMenu GUICtrlMenu_LoadMenu GUICtrlMenu_MapAccelerator GUICtrlMenu_MenuItemFromPoint GUICtrlMenu_RemoveMenu GUICtrlMenu_SetItemBitmaps GUICtrlMenu_SetItemBmp GUICtrlMenu_SetItemBmpChecked GUICtrlMenu_SetItemBmpUnchecked GUICtrlMenu_SetItemChecked GUICtrlMenu_SetItemData GUICtrlMenu_SetItemDefault GUICtrlMenu_SetItemDisabled GUICtrlMenu_SetItemEnabled GUICtrlMenu_SetItemGrayed GUICtrlMenu_SetItemHighlighted GUICtrlMenu_SetItemID GUICtrlMenu_SetItemInfo GUICtrlMenu_SetItemState GUICtrlMenu_SetItemSubMenu GUICtrlMenu_SetItemText GUICtrlMenu_SetItemType GUICtrlMenu_SetMenu GUICtrlMenu_SetMenuBackground GUICtrlMenu_SetMenuContextHelpID GUICtrlMenu_SetMenuData GUICtrlMenu_SetMenuDefaultItem GUICtrlMenu_SetMenuHeight GUICtrlMenu_SetMenuInfo GUICtrlMenu_SetMenuStyle GUICtrlMenu_TrackPopupMenu GUICtrlMonthCal_Create GUICtrlMonthCal_Destroy GUICtrlMonthCal_GetCalendarBorder GUICtrlMonthCal_GetCalendarCount GUICtrlMonthCal_GetColor GUICtrlMonthCal_GetColorArray GUICtrlMonthCal_GetCurSel GUICtrlMonthCal_GetCurSelStr GUICtrlMonthCal_GetFirstDOW GUICtrlMonthCal_GetFirstDOWStr GUICtrlMonthCal_GetMaxSelCount GUICtrlMonthCal_GetMaxTodayWidth GUICtrlMonthCal_GetMinReqHeight GUICtrlMonthCal_GetMinReqRect GUICtrlMonthCal_GetMinReqRectArray GUICtrlMonthCal_GetMinReqWidth GUICtrlMonthCal_GetMonthDelta GUICtrlMonthCal_GetMonthRange GUICtrlMonthCal_GetMonthRangeMax GUICtrlMonthCal_GetMonthRangeMaxStr GUICtrlMonthCal_GetMonthRangeMin GUICtrlMonthCal_GetMonthRangeMinStr GUICtrlMonthCal_GetMonthRangeSpan GUICtrlMonthCal_GetRange GUICtrlMonthCal_GetRangeMax GUICtrlMonthCal_GetRangeMaxStr GUICtrlMonthCal_GetRangeMin GUICtrlMonthCal_GetRangeMinStr GUICtrlMonthCal_GetSelRange GUICtrlMonthCal_GetSelRangeMax GUICtrlMonthCal_GetSelRangeMaxStr GUICtrlMonthCal_GetSelRangeMin GUICtrlMonthCal_GetSelRangeMinStr GUICtrlMonthCal_GetToday GUICtrlMonthCal_GetTodayStr GUICtrlMonthCal_GetUnicodeFormat GUICtrlMonthCal_HitTest GUICtrlMonthCal_SetCalendarBorder GUICtrlMonthCal_SetColor GUICtrlMonthCal_SetCurSel GUICtrlMonthCal_SetDayState GUICtrlMonthCal_SetFirstDOW GUICtrlMonthCal_SetMaxSelCount GUICtrlMonthCal_SetMonthDelta GUICtrlMonthCal_SetRange GUICtrlMonthCal_SetSelRange GUICtrlMonthCal_SetToday GUICtrlMonthCal_SetUnicodeFormat GUICtrlRebar_AddBand GUICtrlRebar_AddToolBarBand GUICtrlRebar_BeginDrag GUICtrlRebar_Create GUICtrlRebar_DeleteBand GUICtrlRebar_Destroy GUICtrlRebar_DragMove GUICtrlRebar_EndDrag GUICtrlRebar_GetBandBackColor GUICtrlRebar_GetBandBorders GUICtrlRebar_GetBandBordersEx GUICtrlRebar_GetBandChildHandle GUICtrlRebar_GetBandChildSize GUICtrlRebar_GetBandCount GUICtrlRebar_GetBandForeColor GUICtrlRebar_GetBandHeaderSize GUICtrlRebar_GetBandID GUICtrlRebar_GetBandIdealSize GUICtrlRebar_GetBandLength GUICtrlRebar_GetBandLParam GUICtrlRebar_GetBandMargins GUICtrlRebar_GetBandMarginsEx GUICtrlRebar_GetBandRect GUICtrlRebar_GetBandRectEx GUICtrlRebar_GetBandStyle GUICtrlRebar_GetBandStyleBreak GUICtrlRebar_GetBandStyleChildEdge GUICtrlRebar_GetBandStyleFixedBMP GUICtrlRebar_GetBandStyleFixedSize GUICtrlRebar_GetBandStyleGripperAlways GUICtrlRebar_GetBandStyleHidden GUICtrlRebar_GetBandStyleHideTitle GUICtrlRebar_GetBandStyleNoGripper GUICtrlRebar_GetBandStyleTopAlign GUICtrlRebar_GetBandStyleUseChevron GUICtrlRebar_GetBandStyleVariableHeight GUICtrlRebar_GetBandText GUICtrlRebar_GetBarHeight GUICtrlRebar_GetBarInfo GUICtrlRebar_GetBKColor GUICtrlRebar_GetColorScheme GUICtrlRebar_GetRowCount GUICtrlRebar_GetRowHeight GUICtrlRebar_GetTextColor GUICtrlRebar_GetToolTips GUICtrlRebar_GetUnicodeFormat GUICtrlRebar_HitTest GUICtrlRebar_IDToIndex GUICtrlRebar_MaximizeBand GUICtrlRebar_MinimizeBand GUICtrlRebar_MoveBand GUICtrlRebar_SetBandBackColor GUICtrlRebar_SetBandForeColor GUICtrlRebar_SetBandHeaderSize GUICtrlRebar_SetBandID GUICtrlRebar_SetBandIdealSize GUICtrlRebar_SetBandLength GUICtrlRebar_SetBandLParam GUICtrlRebar_SetBandStyle GUICtrlRebar_SetBandStyleBreak GUICtrlRebar_SetBandStyleChildEdge GUICtrlRebar_SetBandStyleFixedBMP GUICtrlRebar_SetBandStyleFixedSize GUICtrlRebar_SetBandStyleGripperAlways GUICtrlRebar_SetBandStyleHidden GUICtrlRebar_SetBandStyleHideTitle GUICtrlRebar_SetBandStyleNoGripper GUICtrlRebar_SetBandStyleTopAlign GUICtrlRebar_SetBandStyleUseChevron GUICtrlRebar_SetBandStyleVariableHeight GUICtrlRebar_SetBandText GUICtrlRebar_SetBarInfo GUICtrlRebar_SetBKColor GUICtrlRebar_SetColorScheme GUICtrlRebar_SetTextColor GUICtrlRebar_SetToolTips GUICtrlRebar_SetUnicodeFormat GUICtrlRebar_ShowBand GUICtrlRichEdit_AppendText GUICtrlRichEdit_AutoDetectURL GUICtrlRichEdit_CanPaste GUICtrlRichEdit_CanPasteSpecial GUICtrlRichEdit_CanRedo GUICtrlRichEdit_CanUndo GUICtrlRichEdit_ChangeFontSize GUICtrlRichEdit_Copy GUICtrlRichEdit_Create GUICtrlRichEdit_Cut GUICtrlRichEdit_Deselect GUICtrlRichEdit_Destroy GUICtrlRichEdit_EmptyUndoBuffer GUICtrlRichEdit_FindText GUICtrlRichEdit_FindTextInRange GUICtrlRichEdit_GetBkColor GUICtrlRichEdit_GetCharAttributes GUICtrlRichEdit_GetCharBkColor GUICtrlRichEdit_GetCharColor GUICtrlRichEdit_GetCharPosFromXY GUICtrlRichEdit_GetCharPosOfNextWord GUICtrlRichEdit_GetCharPosOfPreviousWord GUICtrlRichEdit_GetCharWordBreakInfo GUICtrlRichEdit_GetFirstCharPosOnLine GUICtrlRichEdit_GetFont GUICtrlRichEdit_GetLineCount GUICtrlRichEdit_GetLineLength GUICtrlRichEdit_GetLineNumberFromCharPos GUICtrlRichEdit_GetNextRedo GUICtrlRichEdit_GetNextUndo GUICtrlRichEdit_GetNumberOfFirstVisibleLine GUICtrlRichEdit_GetParaAlignment GUICtrlRichEdit_GetParaAttributes GUICtrlRichEdit_GetParaBorder GUICtrlRichEdit_GetParaIndents GUICtrlRichEdit_GetParaNumbering GUICtrlRichEdit_GetParaShading GUICtrlRichEdit_GetParaSpacing GUICtrlRichEdit_GetParaTabStops GUICtrlRichEdit_GetPasswordChar GUICtrlRichEdit_GetRECT GUICtrlRichEdit_GetScrollPos GUICtrlRichEdit_GetSel GUICtrlRichEdit_GetSelAA GUICtrlRichEdit_GetSelText GUICtrlRichEdit_GetSpaceUnit GUICtrlRichEdit_GetText GUICtrlRichEdit_GetTextInLine GUICtrlRichEdit_GetTextInRange GUICtrlRichEdit_GetTextLength GUICtrlRichEdit_GetVersion GUICtrlRichEdit_GetXYFromCharPos GUICtrlRichEdit_GetZoom GUICtrlRichEdit_GotoCharPos GUICtrlRichEdit_HideSelection GUICtrlRichEdit_InsertText GUICtrlRichEdit_IsModified GUICtrlRichEdit_IsTextSelected GUICtrlRichEdit_Paste GUICtrlRichEdit_PasteSpecial GUICtrlRichEdit_PauseRedraw GUICtrlRichEdit_Redo GUICtrlRichEdit_ReplaceText GUICtrlRichEdit_ResumeRedraw GUICtrlRichEdit_ScrollLineOrPage GUICtrlRichEdit_ScrollLines GUICtrlRichEdit_ScrollToCaret GUICtrlRichEdit_SetBkColor GUICtrlRichEdit_SetCharAttributes GUICtrlRichEdit_SetCharBkColor GUICtrlRichEdit_SetCharColor GUICtrlRichEdit_SetEventMask GUICtrlRichEdit_SetFont GUICtrlRichEdit_SetLimitOnText GUICtrlRichEdit_SetModified GUICtrlRichEdit_SetParaAlignment GUICtrlRichEdit_SetParaAttributes GUICtrlRichEdit_SetParaBorder GUICtrlRichEdit_SetParaIndents GUICtrlRichEdit_SetParaNumbering GUICtrlRichEdit_SetParaShading GUICtrlRichEdit_SetParaSpacing GUICtrlRichEdit_SetParaTabStops GUICtrlRichEdit_SetPasswordChar GUICtrlRichEdit_SetReadOnly GUICtrlRichEdit_SetRECT GUICtrlRichEdit_SetScrollPos GUICtrlRichEdit_SetSel GUICtrlRichEdit_SetSpaceUnit GUICtrlRichEdit_SetTabStops GUICtrlRichEdit_SetText GUICtrlRichEdit_SetUndoLimit GUICtrlRichEdit_SetZoom GUICtrlRichEdit_StreamFromFile GUICtrlRichEdit_StreamFromVar GUICtrlRichEdit_StreamToFile GUICtrlRichEdit_StreamToVar GUICtrlRichEdit_Undo GUICtrlSlider_ClearSel GUICtrlSlider_ClearTics GUICtrlSlider_Create GUICtrlSlider_Destroy GUICtrlSlider_GetBuddy GUICtrlSlider_GetChannelRect GUICtrlSlider_GetChannelRectEx GUICtrlSlider_GetLineSize GUICtrlSlider_GetLogicalTics GUICtrlSlider_GetNumTics GUICtrlSlider_GetPageSize GUICtrlSlider_GetPos GUICtrlSlider_GetRange GUICtrlSlider_GetRangeMax GUICtrlSlider_GetRangeMin GUICtrlSlider_GetSel GUICtrlSlider_GetSelEnd GUICtrlSlider_GetSelStart GUICtrlSlider_GetThumbLength GUICtrlSlider_GetThumbRect GUICtrlSlider_GetThumbRectEx GUICtrlSlider_GetTic GUICtrlSlider_GetTicPos GUICtrlSlider_GetToolTips GUICtrlSlider_GetUnicodeFormat GUICtrlSlider_SetBuddy GUICtrlSlider_SetLineSize GUICtrlSlider_SetPageSize GUICtrlSlider_SetPos GUICtrlSlider_SetRange GUICtrlSlider_SetRangeMax GUICtrlSlider_SetRangeMin GUICtrlSlider_SetSel GUICtrlSlider_SetSelEnd GUICtrlSlider_SetSelStart GUICtrlSlider_SetThumbLength GUICtrlSlider_SetTic GUICtrlSlider_SetTicFreq GUICtrlSlider_SetTipSide GUICtrlSlider_SetToolTips GUICtrlSlider_SetUnicodeFormat GUICtrlStatusBar_Create GUICtrlStatusBar_Destroy GUICtrlStatusBar_EmbedControl GUICtrlStatusBar_GetBorders GUICtrlStatusBar_GetBordersHorz GUICtrlStatusBar_GetBordersRect GUICtrlStatusBar_GetBordersVert GUICtrlStatusBar_GetCount GUICtrlStatusBar_GetHeight GUICtrlStatusBar_GetIcon GUICtrlStatusBar_GetParts GUICtrlStatusBar_GetRect GUICtrlStatusBar_GetRectEx GUICtrlStatusBar_GetText GUICtrlStatusBar_GetTextFlags GUICtrlStatusBar_GetTextLength GUICtrlStatusBar_GetTextLengthEx GUICtrlStatusBar_GetTipText GUICtrlStatusBar_GetUnicodeFormat GUICtrlStatusBar_GetWidth GUICtrlStatusBar_IsSimple GUICtrlStatusBar_Resize GUICtrlStatusBar_SetBkColor GUICtrlStatusBar_SetIcon GUICtrlStatusBar_SetMinHeight GUICtrlStatusBar_SetParts GUICtrlStatusBar_SetSimple GUICtrlStatusBar_SetText GUICtrlStatusBar_SetTipText GUICtrlStatusBar_SetUnicodeFormat GUICtrlStatusBar_ShowHide GUICtrlTab_ActivateTab GUICtrlTab_ClickTab GUICtrlTab_Create GUICtrlTab_DeleteAllItems GUICtrlTab_DeleteItem GUICtrlTab_DeselectAll GUICtrlTab_Destroy GUICtrlTab_FindTab GUICtrlTab_GetCurFocus GUICtrlTab_GetCurSel GUICtrlTab_GetDisplayRect GUICtrlTab_GetDisplayRectEx GUICtrlTab_GetExtendedStyle GUICtrlTab_GetImageList GUICtrlTab_GetItem GUICtrlTab_GetItemCount GUICtrlTab_GetItemImage GUICtrlTab_GetItemParam GUICtrlTab_GetItemRect GUICtrlTab_GetItemRectEx GUICtrlTab_GetItemState GUICtrlTab_GetItemText GUICtrlTab_GetRowCount GUICtrlTab_GetToolTips GUICtrlTab_GetUnicodeFormat GUICtrlTab_HighlightItem GUICtrlTab_HitTest GUICtrlTab_InsertItem GUICtrlTab_RemoveImage GUICtrlTab_SetCurFocus GUICtrlTab_SetCurSel GUICtrlTab_SetExtendedStyle GUICtrlTab_SetImageList GUICtrlTab_SetItem GUICtrlTab_SetItemImage GUICtrlTab_SetItemParam GUICtrlTab_SetItemSize GUICtrlTab_SetItemState GUICtrlTab_SetItemText GUICtrlTab_SetMinTabWidth GUICtrlTab_SetPadding GUICtrlTab_SetToolTips GUICtrlTab_SetUnicodeFormat GUICtrlToolbar_AddBitmap GUICtrlToolbar_AddButton GUICtrlToolbar_AddButtonSep GUICtrlToolbar_AddString GUICtrlToolbar_ButtonCount GUICtrlToolbar_CheckButton GUICtrlToolbar_ClickAccel GUICtrlToolbar_ClickButton GUICtrlToolbar_ClickIndex GUICtrlToolbar_CommandToIndex GUICtrlToolbar_Create GUICtrlToolbar_Customize GUICtrlToolbar_DeleteButton GUICtrlToolbar_Destroy GUICtrlToolbar_EnableButton GUICtrlToolbar_FindToolbar GUICtrlToolbar_GetAnchorHighlight GUICtrlToolbar_GetBitmapFlags GUICtrlToolbar_GetButtonBitmap GUICtrlToolbar_GetButtonInfo GUICtrlToolbar_GetButtonInfoEx GUICtrlToolbar_GetButtonParam GUICtrlToolbar_GetButtonRect GUICtrlToolbar_GetButtonRectEx GUICtrlToolbar_GetButtonSize GUICtrlToolbar_GetButtonState GUICtrlToolbar_GetButtonStyle GUICtrlToolbar_GetButtonText GUICtrlToolbar_GetColorScheme GUICtrlToolbar_GetDisabledImageList GUICtrlToolbar_GetExtendedStyle GUICtrlToolbar_GetHotImageList GUICtrlToolbar_GetHotItem GUICtrlToolbar_GetImageList GUICtrlToolbar_GetInsertMark GUICtrlToolbar_GetInsertMarkColor GUICtrlToolbar_GetMaxSize GUICtrlToolbar_GetMetrics GUICtrlToolbar_GetPadding GUICtrlToolbar_GetRows GUICtrlToolbar_GetString GUICtrlToolbar_GetStyle GUICtrlToolbar_GetStyleAltDrag GUICtrlToolbar_GetStyleCustomErase GUICtrlToolbar_GetStyleFlat GUICtrlToolbar_GetStyleList GUICtrlToolbar_GetStyleRegisterDrop GUICtrlToolbar_GetStyleToolTips GUICtrlToolbar_GetStyleTransparent GUICtrlToolbar_GetStyleWrapable GUICtrlToolbar_GetTextRows GUICtrlToolbar_GetToolTips GUICtrlToolbar_GetUnicodeFormat GUICtrlToolbar_HideButton GUICtrlToolbar_HighlightButton GUICtrlToolbar_HitTest GUICtrlToolbar_IndexToCommand GUICtrlToolbar_InsertButton GUICtrlToolbar_InsertMarkHitTest GUICtrlToolbar_IsButtonChecked GUICtrlToolbar_IsButtonEnabled GUICtrlToolbar_IsButtonHidden GUICtrlToolbar_IsButtonHighlighted GUICtrlToolbar_IsButtonIndeterminate GUICtrlToolbar_IsButtonPressed GUICtrlToolbar_LoadBitmap GUICtrlToolbar_LoadImages GUICtrlToolbar_MapAccelerator GUICtrlToolbar_MoveButton GUICtrlToolbar_PressButton GUICtrlToolbar_SetAnchorHighlight GUICtrlToolbar_SetBitmapSize GUICtrlToolbar_SetButtonBitMap GUICtrlToolbar_SetButtonInfo GUICtrlToolbar_SetButtonInfoEx GUICtrlToolbar_SetButtonParam GUICtrlToolbar_SetButtonSize GUICtrlToolbar_SetButtonState GUICtrlToolbar_SetButtonStyle GUICtrlToolbar_SetButtonText GUICtrlToolbar_SetButtonWidth GUICtrlToolbar_SetCmdID GUICtrlToolbar_SetColorScheme GUICtrlToolbar_SetDisabledImageList GUICtrlToolbar_SetDrawTextFlags GUICtrlToolbar_SetExtendedStyle GUICtrlToolbar_SetHotImageList GUICtrlToolbar_SetHotItem GUICtrlToolbar_SetImageList GUICtrlToolbar_SetIndent GUICtrlToolbar_SetIndeterminate GUICtrlToolbar_SetInsertMark GUICtrlToolbar_SetInsertMarkColor GUICtrlToolbar_SetMaxTextRows GUICtrlToolbar_SetMetrics GUICtrlToolbar_SetPadding GUICtrlToolbar_SetParent GUICtrlToolbar_SetRows GUICtrlToolbar_SetStyle GUICtrlToolbar_SetStyleAltDrag GUICtrlToolbar_SetStyleCustomErase GUICtrlToolbar_SetStyleFlat GUICtrlToolbar_SetStyleList GUICtrlToolbar_SetStyleRegisterDrop GUICtrlToolbar_SetStyleToolTips GUICtrlToolbar_SetStyleTransparent GUICtrlToolbar_SetStyleWrapable GUICtrlToolbar_SetToolTips GUICtrlToolbar_SetUnicodeFormat GUICtrlToolbar_SetWindowTheme GUICtrlTreeView_Add GUICtrlTreeView_AddChild GUICtrlTreeView_AddChildFirst GUICtrlTreeView_AddFirst GUICtrlTreeView_BeginUpdate GUICtrlTreeView_ClickItem GUICtrlTreeView_Create GUICtrlTreeView_CreateDragImage GUICtrlTreeView_CreateSolidBitMap GUICtrlTreeView_Delete GUICtrlTreeView_DeleteAll GUICtrlTreeView_DeleteChildren GUICtrlTreeView_Destroy GUICtrlTreeView_DisplayRect GUICtrlTreeView_DisplayRectEx GUICtrlTreeView_EditText GUICtrlTreeView_EndEdit GUICtrlTreeView_EndUpdate GUICtrlTreeView_EnsureVisible GUICtrlTreeView_Expand GUICtrlTreeView_ExpandedOnce GUICtrlTreeView_FindItem GUICtrlTreeView_FindItemEx GUICtrlTreeView_GetBkColor GUICtrlTreeView_GetBold GUICtrlTreeView_GetChecked GUICtrlTreeView_GetChildCount GUICtrlTreeView_GetChildren GUICtrlTreeView_GetCount GUICtrlTreeView_GetCut GUICtrlTreeView_GetDropTarget GUICtrlTreeView_GetEditControl GUICtrlTreeView_GetExpanded GUICtrlTreeView_GetFirstChild GUICtrlTreeView_GetFirstItem GUICtrlTreeView_GetFirstVisible GUICtrlTreeView_GetFocused GUICtrlTreeView_GetHeight GUICtrlTreeView_GetImageIndex GUICtrlTreeView_GetImageListIconHandle GUICtrlTreeView_GetIndent GUICtrlTreeView_GetInsertMarkColor GUICtrlTreeView_GetISearchString GUICtrlTreeView_GetItemByIndex GUICtrlTreeView_GetItemHandle GUICtrlTreeView_GetItemParam GUICtrlTreeView_GetLastChild GUICtrlTreeView_GetLineColor GUICtrlTreeView_GetNext GUICtrlTreeView_GetNextChild GUICtrlTreeView_GetNextSibling GUICtrlTreeView_GetNextVisible GUICtrlTreeView_GetNormalImageList GUICtrlTreeView_GetParentHandle GUICtrlTreeView_GetParentParam GUICtrlTreeView_GetPrev GUICtrlTreeView_GetPrevChild GUICtrlTreeView_GetPrevSibling GUICtrlTreeView_GetPrevVisible GUICtrlTreeView_GetScrollTime GUICtrlTreeView_GetSelected GUICtrlTreeView_GetSelectedImageIndex GUICtrlTreeView_GetSelection GUICtrlTreeView_GetSiblingCount GUICtrlTreeView_GetState GUICtrlTreeView_GetStateImageIndex GUICtrlTreeView_GetStateImageList GUICtrlTreeView_GetText GUICtrlTreeView_GetTextColor GUICtrlTreeView_GetToolTips GUICtrlTreeView_GetTree GUICtrlTreeView_GetUnicodeFormat GUICtrlTreeView_GetVisible GUICtrlTreeView_GetVisibleCount GUICtrlTreeView_HitTest GUICtrlTreeView_HitTestEx GUICtrlTreeView_HitTestItem GUICtrlTreeView_Index GUICtrlTreeView_InsertItem GUICtrlTreeView_IsFirstItem GUICtrlTreeView_IsParent GUICtrlTreeView_Level GUICtrlTreeView_SelectItem GUICtrlTreeView_SelectItemByIndex GUICtrlTreeView_SetBkColor GUICtrlTreeView_SetBold GUICtrlTreeView_SetChecked GUICtrlTreeView_SetCheckedByIndex GUICtrlTreeView_SetChildren GUICtrlTreeView_SetCut GUICtrlTreeView_SetDropTarget GUICtrlTreeView_SetFocused GUICtrlTreeView_SetHeight GUICtrlTreeView_SetIcon GUICtrlTreeView_SetImageIndex GUICtrlTreeView_SetIndent GUICtrlTreeView_SetInsertMark GUICtrlTreeView_SetInsertMarkColor GUICtrlTreeView_SetItemHeight GUICtrlTreeView_SetItemParam GUICtrlTreeView_SetLineColor GUICtrlTreeView_SetNormalImageList GUICtrlTreeView_SetScrollTime GUICtrlTreeView_SetSelected GUICtrlTreeView_SetSelectedImageIndex GUICtrlTreeView_SetState GUICtrlTreeView_SetStateImageIndex GUICtrlTreeView_SetStateImageList GUICtrlTreeView_SetText GUICtrlTreeView_SetTextColor GUICtrlTreeView_SetToolTips GUICtrlTreeView_SetUnicodeFormat GUICtrlTreeView_Sort GUIImageList_Add GUIImageList_AddBitmap GUIImageList_AddIcon GUIImageList_AddMasked GUIImageList_BeginDrag GUIImageList_Copy GUIImageList_Create GUIImageList_Destroy GUIImageList_DestroyIcon GUIImageList_DragEnter GUIImageList_DragLeave GUIImageList_DragMove GUIImageList_Draw GUIImageList_DrawEx GUIImageList_Duplicate GUIImageList_EndDrag GUIImageList_GetBkColor GUIImageList_GetIcon GUIImageList_GetIconHeight GUIImageList_GetIconSize GUIImageList_GetIconSizeEx GUIImageList_GetIconWidth GUIImageList_GetImageCount GUIImageList_GetImageInfoEx GUIImageList_Remove GUIImageList_ReplaceIcon GUIImageList_SetBkColor GUIImageList_SetIconSize GUIImageList_SetImageCount GUIImageList_Swap GUIScrollBars_EnableScrollBar GUIScrollBars_GetScrollBarInfoEx GUIScrollBars_GetScrollBarRect GUIScrollBars_GetScrollBarRGState GUIScrollBars_GetScrollBarXYLineButton GUIScrollBars_GetScrollBarXYThumbBottom GUIScrollBars_GetScrollBarXYThumbTop GUIScrollBars_GetScrollInfo GUIScrollBars_GetScrollInfoEx GUIScrollBars_GetScrollInfoMax GUIScrollBars_GetScrollInfoMin GUIScrollBars_GetScrollInfoPage GUIScrollBars_GetScrollInfoPos GUIScrollBars_GetScrollInfoTrackPos GUIScrollBars_GetScrollPos GUIScrollBars_GetScrollRange GUIScrollBars_Init GUIScrollBars_ScrollWindow GUIScrollBars_SetScrollInfo GUIScrollBars_SetScrollInfoMax GUIScrollBars_SetScrollInfoMin GUIScrollBars_SetScrollInfoPage GUIScrollBars_SetScrollInfoPos GUIScrollBars_SetScrollRange GUIScrollBars_ShowScrollBar GUIToolTip_Activate GUIToolTip_AddTool GUIToolTip_AdjustRect GUIToolTip_BitsToTTF GUIToolTip_Create GUIToolTip_Deactivate GUIToolTip_DelTool GUIToolTip_Destroy GUIToolTip_EnumTools GUIToolTip_GetBubbleHeight GUIToolTip_GetBubbleSize GUIToolTip_GetBubbleWidth GUIToolTip_GetCurrentTool GUIToolTip_GetDelayTime GUIToolTip_GetMargin GUIToolTip_GetMarginEx GUIToolTip_GetMaxTipWidth GUIToolTip_GetText GUIToolTip_GetTipBkColor GUIToolTip_GetTipTextColor GUIToolTip_GetTitleBitMap GUIToolTip_GetTitleText GUIToolTip_GetToolCount GUIToolTip_GetToolInfo GUIToolTip_HitTest GUIToolTip_NewToolRect GUIToolTip_Pop GUIToolTip_PopUp GUIToolTip_SetDelayTime GUIToolTip_SetMargin GUIToolTip_SetMaxTipWidth GUIToolTip_SetTipBkColor GUIToolTip_SetTipTextColor GUIToolTip_SetTitle GUIToolTip_SetToolInfo GUIToolTip_SetWindowTheme GUIToolTip_ToolExists GUIToolTip_ToolToArray GUIToolTip_TrackActivate GUIToolTip_TrackPosition GUIToolTip_Update GUIToolTip_UpdateTipText HexToString IEAction IEAttach IEBodyReadHTML IEBodyReadText IEBodyWriteHTML IECreate IECreateEmbedded IEDocGetObj IEDocInsertHTML IEDocInsertText IEDocReadHTML IEDocWriteHTML IEErrorNotify IEFormElementCheckBoxSelect IEFormElementGetCollection IEFormElementGetObjByName IEFormElementGetValue IEFormElementOptionSelect IEFormElementRadioSelect IEFormElementSetValue IEFormGetCollection IEFormGetObjByName IEFormImageClick IEFormReset IEFormSubmit IEFrameGetCollection IEFrameGetObjByName IEGetObjById IEGetObjByName IEHeadInsertEventScript IEImgClick IEImgGetCollection IEIsFrameSet IELinkClickByIndex IELinkClickByText IELinkGetCollection IELoadWait IELoadWaitTimeout IENavigate IEPropertyGet IEPropertySet IEQuit IETableGetCollection IETableWriteToArray IETagNameAllGetCollection IETagNameGetCollection IE_Example IE_Introduction IE_VersionInfo INetExplorerCapable INetGetSource INetMail INetSmtpMail IsPressed MathCheckDiv Max MemGlobalAlloc MemGlobalFree MemGlobalLock MemGlobalSize MemGlobalUnlock MemMoveMemory MemVirtualAlloc MemVirtualAllocEx MemVirtualFree MemVirtualFreeEx Min MouseTrap NamedPipes_CallNamedPipe NamedPipes_ConnectNamedPipe NamedPipes_CreateNamedPipe NamedPipes_CreatePipe NamedPipes_DisconnectNamedPipe NamedPipes_GetNamedPipeHandleState NamedPipes_GetNamedPipeInfo NamedPipes_PeekNamedPipe NamedPipes_SetNamedPipeHandleState NamedPipes_TransactNamedPipe NamedPipes_WaitNamedPipe Net_Share_ConnectionEnum Net_Share_FileClose Net_Share_FileEnum Net_Share_FileGetInfo Net_Share_PermStr Net_Share_ResourceStr Net_Share_SessionDel Net_Share_SessionEnum Net_Share_SessionGetInfo Net_Share_ShareAdd Net_Share_ShareCheck Net_Share_ShareDel Net_Share_ShareEnum Net_Share_ShareGetInfo Net_Share_ShareSetInfo Net_Share_StatisticsGetSvr Net_Share_StatisticsGetWrk Now NowCalc NowCalcDate NowDate NowTime PathFull PathGetRelative PathMake PathSplit ProcessGetName ProcessGetPriority Radian ReplaceStringInFile RunDos ScreenCapture_Capture ScreenCapture_CaptureWnd ScreenCapture_SaveImage ScreenCapture_SetBMPFormat ScreenCapture_SetJPGQuality ScreenCapture_SetTIFColorDepth ScreenCapture_SetTIFCompression Security__AdjustTokenPrivileges Security__CreateProcessWithToken Security__DuplicateTokenEx Security__GetAccountSid Security__GetLengthSid Security__GetTokenInformation Security__ImpersonateSelf Security__IsValidSid Security__LookupAccountName Security__LookupAccountSid Security__LookupPrivilegeValue Security__OpenProcessToken Security__OpenThreadToken Security__OpenThreadTokenEx Security__SetPrivilege Security__SetTokenInformation Security__SidToStringSid Security__SidTypeStr Security__StringSidToSid SendMessage SendMessageA SetDate SetTime Singleton SoundClose SoundLength SoundOpen SoundPause SoundPlay SoundPos SoundResume SoundSeek SoundStatus SoundStop SQLite_Changes SQLite_Close SQLite_Display2DResult SQLite_Encode SQLite_ErrCode SQLite_ErrMsg SQLite_Escape SQLite_Exec SQLite_FastEncode SQLite_FastEscape SQLite_FetchData SQLite_FetchNames SQLite_GetTable SQLite_GetTable2d SQLite_LastInsertRowID SQLite_LibVersion SQLite_Open SQLite_Query SQLite_QueryFinalize SQLite_QueryReset SQLite_QuerySingleRow SQLite_SafeMode SQLite_SetTimeout SQLite_Shutdown SQLite_SQLiteExe SQLite_Startup SQLite_TotalChanges StringBetween StringExplode StringInsert StringProper StringRepeat StringTitleCase StringToHex TCPIpToName TempFile TicksToTime Timer_Diff Timer_GetIdleTime Timer_GetTimerID Timer_Init Timer_KillAllTimers Timer_KillTimer Timer_SetTimer TimeToTicks VersionCompare viClose viExecCommand viFindGpib viGpibBusReset viGTL viInteractiveControl viOpen viSetAttribute viSetTimeout WeekNumberISO WinAPI_AbortPath WinAPI_ActivateKeyboardLayout WinAPI_AddClipboardFormatListener WinAPI_AddFontMemResourceEx WinAPI_AddFontResourceEx WinAPI_AddIconOverlay WinAPI_AddIconTransparency WinAPI_AddMRUString WinAPI_AdjustBitmap WinAPI_AdjustTokenPrivileges WinAPI_AdjustWindowRectEx WinAPI_AlphaBlend WinAPI_AngleArc WinAPI_AnimateWindow WinAPI_Arc WinAPI_ArcTo WinAPI_ArrayToStruct WinAPI_AssignProcessToJobObject WinAPI_AssocGetPerceivedType WinAPI_AssocQueryString WinAPI_AttachConsole WinAPI_AttachThreadInput WinAPI_BackupRead WinAPI_BackupReadAbort WinAPI_BackupSeek WinAPI_BackupWrite WinAPI_BackupWriteAbort WinAPI_Beep WinAPI_BeginBufferedPaint WinAPI_BeginDeferWindowPos WinAPI_BeginPaint WinAPI_BeginPath WinAPI_BeginUpdateResource WinAPI_BitBlt WinAPI_BringWindowToTop WinAPI_BroadcastSystemMessage WinAPI_BrowseForFolderDlg WinAPI_BufferedPaintClear WinAPI_BufferedPaintInit WinAPI_BufferedPaintSetAlpha WinAPI_BufferedPaintUnInit WinAPI_CallNextHookEx WinAPI_CallWindowProc WinAPI_CallWindowProcW WinAPI_CascadeWindows WinAPI_ChangeWindowMessageFilterEx WinAPI_CharToOem WinAPI_ChildWindowFromPointEx WinAPI_ClientToScreen WinAPI_ClipCursor WinAPI_CloseDesktop WinAPI_CloseEnhMetaFile WinAPI_CloseFigure WinAPI_CloseHandle WinAPI_CloseThemeData WinAPI_CloseWindow WinAPI_CloseWindowStation WinAPI_CLSIDFromProgID WinAPI_CoInitialize WinAPI_ColorAdjustLuma WinAPI_ColorHLSToRGB WinAPI_ColorRGBToHLS WinAPI_CombineRgn WinAPI_CombineTransform WinAPI_CommandLineToArgv WinAPI_CommDlgExtendedError WinAPI_CommDlgExtendedErrorEx WinAPI_CompareString WinAPI_CompressBitmapBits WinAPI_CompressBuffer WinAPI_ComputeCrc32 WinAPI_ConfirmCredentials WinAPI_CopyBitmap WinAPI_CopyCursor WinAPI_CopyEnhMetaFile WinAPI_CopyFileEx WinAPI_CopyIcon WinAPI_CopyImage WinAPI_CopyRect WinAPI_CopyStruct WinAPI_CoTaskMemAlloc WinAPI_CoTaskMemFree WinAPI_CoTaskMemRealloc WinAPI_CoUninitialize WinAPI_Create32BitHBITMAP WinAPI_Create32BitHICON WinAPI_CreateANDBitmap WinAPI_CreateBitmap WinAPI_CreateBitmapIndirect WinAPI_CreateBrushIndirect WinAPI_CreateBuffer WinAPI_CreateBufferFromStruct WinAPI_CreateCaret WinAPI_CreateColorAdjustment WinAPI_CreateCompatibleBitmap WinAPI_CreateCompatibleBitmapEx WinAPI_CreateCompatibleDC WinAPI_CreateDesktop WinAPI_CreateDIB WinAPI_CreateDIBColorTable WinAPI_CreateDIBitmap WinAPI_CreateDIBSection WinAPI_CreateDirectory WinAPI_CreateDirectoryEx WinAPI_CreateEllipticRgn WinAPI_CreateEmptyIcon WinAPI_CreateEnhMetaFile WinAPI_CreateEvent WinAPI_CreateFile WinAPI_CreateFileEx WinAPI_CreateFileMapping WinAPI_CreateFont WinAPI_CreateFontEx WinAPI_CreateFontIndirect WinAPI_CreateGUID WinAPI_CreateHardLink WinAPI_CreateIcon WinAPI_CreateIconFromResourceEx WinAPI_CreateIconIndirect WinAPI_CreateJobObject WinAPI_CreateMargins WinAPI_CreateMRUList WinAPI_CreateMutex WinAPI_CreateNullRgn WinAPI_CreateNumberFormatInfo WinAPI_CreateObjectID WinAPI_CreatePen WinAPI_CreatePoint WinAPI_CreatePolygonRgn WinAPI_CreateProcess WinAPI_CreateProcessWithToken WinAPI_CreateRect WinAPI_CreateRectEx WinAPI_CreateRectRgn WinAPI_CreateRectRgnIndirect WinAPI_CreateRoundRectRgn WinAPI_CreateSemaphore WinAPI_CreateSize WinAPI_CreateSolidBitmap WinAPI_CreateSolidBrush WinAPI_CreateStreamOnHGlobal WinAPI_CreateString WinAPI_CreateSymbolicLink WinAPI_CreateTransform WinAPI_CreateWindowEx WinAPI_CreateWindowStation WinAPI_DecompressBuffer WinAPI_DecryptFile WinAPI_DeferWindowPos WinAPI_DefineDosDevice WinAPI_DefRawInputProc WinAPI_DefSubclassProc WinAPI_DefWindowProc WinAPI_DefWindowProcW WinAPI_DeleteDC WinAPI_DeleteEnhMetaFile WinAPI_DeleteFile WinAPI_DeleteObject WinAPI_DeleteObjectID WinAPI_DeleteVolumeMountPoint WinAPI_DeregisterShellHookWindow WinAPI_DestroyCaret WinAPI_DestroyCursor WinAPI_DestroyIcon WinAPI_DestroyWindow WinAPI_DeviceIoControl WinAPI_DisplayStruct WinAPI_DllGetVersion WinAPI_DllInstall WinAPI_DllUninstall WinAPI_DPtoLP WinAPI_DragAcceptFiles WinAPI_DragFinish WinAPI_DragQueryFileEx WinAPI_DragQueryPoint WinAPI_DrawAnimatedRects WinAPI_DrawBitmap WinAPI_DrawEdge WinAPI_DrawFocusRect WinAPI_DrawFrameControl WinAPI_DrawIcon WinAPI_DrawIconEx WinAPI_DrawLine WinAPI_DrawShadowText WinAPI_DrawText WinAPI_DrawThemeBackground WinAPI_DrawThemeEdge WinAPI_DrawThemeIcon WinAPI_DrawThemeParentBackground WinAPI_DrawThemeText WinAPI_DrawThemeTextEx WinAPI_DuplicateEncryptionInfoFile WinAPI_DuplicateHandle WinAPI_DuplicateTokenEx WinAPI_DwmDefWindowProc WinAPI_DwmEnableBlurBehindWindow WinAPI_DwmEnableComposition WinAPI_DwmExtendFrameIntoClientArea WinAPI_DwmGetColorizationColor WinAPI_DwmGetColorizationParameters WinAPI_DwmGetWindowAttribute WinAPI_DwmInvalidateIconicBitmaps WinAPI_DwmIsCompositionEnabled WinAPI_DwmQueryThumbnailSourceSize WinAPI_DwmRegisterThumbnail WinAPI_DwmSetColorizationParameters WinAPI_DwmSetIconicLivePreviewBitmap WinAPI_DwmSetIconicThumbnail WinAPI_DwmSetWindowAttribute WinAPI_DwmUnregisterThumbnail WinAPI_DwmUpdateThumbnailProperties WinAPI_DWordToFloat WinAPI_DWordToInt WinAPI_EjectMedia WinAPI_Ellipse WinAPI_EmptyWorkingSet WinAPI_EnableWindow WinAPI_EncryptFile WinAPI_EncryptionDisable WinAPI_EndBufferedPaint WinAPI_EndDeferWindowPos WinAPI_EndPaint WinAPI_EndPath WinAPI_EndUpdateResource WinAPI_EnumChildProcess WinAPI_EnumChildWindows WinAPI_EnumDesktops WinAPI_EnumDesktopWindows WinAPI_EnumDeviceDrivers WinAPI_EnumDisplayDevices WinAPI_EnumDisplayMonitors WinAPI_EnumDisplaySettings WinAPI_EnumDllProc WinAPI_EnumFiles WinAPI_EnumFileStreams WinAPI_EnumFontFamilies WinAPI_EnumHardLinks WinAPI_EnumMRUList WinAPI_EnumPageFiles WinAPI_EnumProcessHandles WinAPI_EnumProcessModules WinAPI_EnumProcessThreads WinAPI_EnumProcessWindows WinAPI_EnumRawInputDevices WinAPI_EnumResourceLanguages WinAPI_EnumResourceNames WinAPI_EnumResourceTypes WinAPI_EnumSystemGeoID WinAPI_EnumSystemLocales WinAPI_EnumUILanguages WinAPI_EnumWindows WinAPI_EnumWindowsPopup WinAPI_EnumWindowStations WinAPI_EnumWindowsTop WinAPI_EqualMemory WinAPI_EqualRect WinAPI_EqualRgn WinAPI_ExcludeClipRect WinAPI_ExpandEnvironmentStrings WinAPI_ExtCreatePen WinAPI_ExtCreateRegion WinAPI_ExtFloodFill WinAPI_ExtractIcon WinAPI_ExtractIconEx WinAPI_ExtSelectClipRgn WinAPI_FatalAppExit WinAPI_FatalExit WinAPI_FileEncryptionStatus WinAPI_FileExists WinAPI_FileIconInit WinAPI_FileInUse WinAPI_FillMemory WinAPI_FillPath WinAPI_FillRect WinAPI_FillRgn WinAPI_FindClose WinAPI_FindCloseChangeNotification WinAPI_FindExecutable WinAPI_FindFirstChangeNotification WinAPI_FindFirstFile WinAPI_FindFirstFileName WinAPI_FindFirstStream WinAPI_FindNextChangeNotification WinAPI_FindNextFile WinAPI_FindNextFileName WinAPI_FindNextStream WinAPI_FindResource WinAPI_FindResourceEx WinAPI_FindTextDlg WinAPI_FindWindow WinAPI_FlashWindow WinAPI_FlashWindowEx WinAPI_FlattenPath WinAPI_FloatToDWord WinAPI_FloatToInt WinAPI_FlushFileBuffers WinAPI_FlushFRBuffer WinAPI_FlushViewOfFile WinAPI_FormatDriveDlg WinAPI_FormatMessage WinAPI_FrameRect WinAPI_FrameRgn WinAPI_FreeLibrary WinAPI_FreeMemory WinAPI_FreeMRUList WinAPI_FreeResource WinAPI_GdiComment WinAPI_GetActiveWindow WinAPI_GetAllUsersProfileDirectory WinAPI_GetAncestor WinAPI_GetApplicationRestartSettings WinAPI_GetArcDirection WinAPI_GetAsyncKeyState WinAPI_GetBinaryType WinAPI_GetBitmapBits WinAPI_GetBitmapDimension WinAPI_GetBitmapDimensionEx WinAPI_GetBkColor WinAPI_GetBkMode WinAPI_GetBoundsRect WinAPI_GetBrushOrg WinAPI_GetBufferedPaintBits WinAPI_GetBufferedPaintDC WinAPI_GetBufferedPaintTargetDC WinAPI_GetBufferedPaintTargetRect WinAPI_GetBValue WinAPI_GetCaretBlinkTime WinAPI_GetCaretPos WinAPI_GetCDType WinAPI_GetClassInfoEx WinAPI_GetClassLongEx WinAPI_GetClassName WinAPI_GetClientHeight WinAPI_GetClientRect WinAPI_GetClientWidth WinAPI_GetClipboardSequenceNumber WinAPI_GetClipBox WinAPI_GetClipCursor WinAPI_GetClipRgn WinAPI_GetColorAdjustment WinAPI_GetCompressedFileSize WinAPI_GetCompression WinAPI_GetConnectedDlg WinAPI_GetCurrentDirectory WinAPI_GetCurrentHwProfile WinAPI_GetCurrentObject WinAPI_GetCurrentPosition WinAPI_GetCurrentProcess WinAPI_GetCurrentProcessExplicitAppUserModelID WinAPI_GetCurrentProcessID WinAPI_GetCurrentThemeName WinAPI_GetCurrentThread WinAPI_GetCurrentThreadId WinAPI_GetCursor WinAPI_GetCursorInfo WinAPI_GetDateFormat WinAPI_GetDC WinAPI_GetDCEx WinAPI_GetDefaultPrinter WinAPI_GetDefaultUserProfileDirectory WinAPI_GetDesktopWindow WinAPI_GetDeviceCaps WinAPI_GetDeviceDriverBaseName WinAPI_GetDeviceDriverFileName WinAPI_GetDeviceGammaRamp WinAPI_GetDIBColorTable WinAPI_GetDIBits WinAPI_GetDiskFreeSpaceEx WinAPI_GetDlgCtrlID WinAPI_GetDlgItem WinAPI_GetDllDirectory WinAPI_GetDriveBusType WinAPI_GetDriveGeometryEx WinAPI_GetDriveNumber WinAPI_GetDriveType WinAPI_GetDurationFormat WinAPI_GetEffectiveClientRect WinAPI_GetEnhMetaFile WinAPI_GetEnhMetaFileBits WinAPI_GetEnhMetaFileDescription WinAPI_GetEnhMetaFileDimension WinAPI_GetEnhMetaFileHeader WinAPI_GetErrorMessage WinAPI_GetErrorMode WinAPI_GetExitCodeProcess WinAPI_GetExtended WinAPI_GetFileAttributes WinAPI_GetFileID WinAPI_GetFileInformationByHandle WinAPI_GetFileInformationByHandleEx WinAPI_GetFilePointerEx WinAPI_GetFileSizeEx WinAPI_GetFileSizeOnDisk WinAPI_GetFileTitle WinAPI_GetFileType WinAPI_GetFileVersionInfo WinAPI_GetFinalPathNameByHandle WinAPI_GetFinalPathNameByHandleEx WinAPI_GetFocus WinAPI_GetFontMemoryResourceInfo WinAPI_GetFontName WinAPI_GetFontResourceInfo WinAPI_GetForegroundWindow WinAPI_GetFRBuffer WinAPI_GetFullPathName WinAPI_GetGeoInfo WinAPI_GetGlyphOutline WinAPI_GetGraphicsMode WinAPI_GetGuiResources WinAPI_GetGUIThreadInfo WinAPI_GetGValue WinAPI_GetHandleInformation WinAPI_GetHGlobalFromStream WinAPI_GetIconDimension WinAPI_GetIconInfo WinAPI_GetIconInfoEx WinAPI_GetIdleTime WinAPI_GetKeyboardLayout WinAPI_GetKeyboardLayoutList WinAPI_GetKeyboardState WinAPI_GetKeyboardType WinAPI_GetKeyNameText WinAPI_GetKeyState WinAPI_GetLastActivePopup WinAPI_GetLastError WinAPI_GetLastErrorMessage WinAPI_GetLayeredWindowAttributes WinAPI_GetLocaleInfo WinAPI_GetLogicalDrives WinAPI_GetMapMode WinAPI_GetMemorySize WinAPI_GetMessageExtraInfo WinAPI_GetModuleFileNameEx WinAPI_GetModuleHandle WinAPI_GetModuleHandleEx WinAPI_GetModuleInformation WinAPI_GetMonitorInfo WinAPI_GetMousePos WinAPI_GetMousePosX WinAPI_GetMousePosY WinAPI_GetMUILanguage WinAPI_GetNumberFormat WinAPI_GetObject WinAPI_GetObjectID WinAPI_GetObjectInfoByHandle WinAPI_GetObjectNameByHandle WinAPI_GetObjectType WinAPI_GetOpenFileName WinAPI_GetOutlineTextMetrics WinAPI_GetOverlappedResult WinAPI_GetParent WinAPI_GetParentProcess WinAPI_GetPerformanceInfo WinAPI_GetPEType WinAPI_GetPhysicallyInstalledSystemMemory WinAPI_GetPixel WinAPI_GetPolyFillMode WinAPI_GetPosFromRect WinAPI_GetPriorityClass WinAPI_GetProcAddress WinAPI_GetProcessAffinityMask WinAPI_GetProcessCommandLine WinAPI_GetProcessFileName WinAPI_GetProcessHandleCount WinAPI_GetProcessID WinAPI_GetProcessIoCounters WinAPI_GetProcessMemoryInfo WinAPI_GetProcessName WinAPI_GetProcessShutdownParameters WinAPI_GetProcessTimes WinAPI_GetProcessUser WinAPI_GetProcessWindowStation WinAPI_GetProcessWorkingDirectory WinAPI_GetProfilesDirectory WinAPI_GetPwrCapabilities WinAPI_GetRawInputBuffer WinAPI_GetRawInputBufferLength WinAPI_GetRawInputData WinAPI_GetRawInputDeviceInfo WinAPI_GetRegionData WinAPI_GetRegisteredRawInputDevices WinAPI_GetRegKeyNameByHandle WinAPI_GetRgnBox WinAPI_GetROP2 WinAPI_GetRValue WinAPI_GetSaveFileName WinAPI_GetShellWindow WinAPI_GetStartupInfo WinAPI_GetStdHandle WinAPI_GetStockObject WinAPI_GetStretchBltMode WinAPI_GetString WinAPI_GetSysColor WinAPI_GetSysColorBrush WinAPI_GetSystemDefaultLangID WinAPI_GetSystemDefaultLCID WinAPI_GetSystemDefaultUILanguage WinAPI_GetSystemDEPPolicy WinAPI_GetSystemInfo WinAPI_GetSystemMetrics WinAPI_GetSystemPowerStatus WinAPI_GetSystemTimes WinAPI_GetSystemWow64Directory WinAPI_GetTabbedTextExtent WinAPI_GetTempFileName WinAPI_GetTextAlign WinAPI_GetTextCharacterExtra WinAPI_GetTextColor WinAPI_GetTextExtentPoint32 WinAPI_GetTextFace WinAPI_GetTextMetrics WinAPI_GetThemeAppProperties WinAPI_GetThemeBackgroundContentRect WinAPI_GetThemeBackgroundExtent WinAPI_GetThemeBackgroundRegion WinAPI_GetThemeBitmap WinAPI_GetThemeBool WinAPI_GetThemeColor WinAPI_GetThemeDocumentationProperty WinAPI_GetThemeEnumValue WinAPI_GetThemeFilename WinAPI_GetThemeFont WinAPI_GetThemeInt WinAPI_GetThemeMargins WinAPI_GetThemeMetric WinAPI_GetThemePartSize WinAPI_GetThemePosition WinAPI_GetThemePropertyOrigin WinAPI_GetThemeRect WinAPI_GetThemeString WinAPI_GetThemeSysBool WinAPI_GetThemeSysColor WinAPI_GetThemeSysColorBrush WinAPI_GetThemeSysFont WinAPI_GetThemeSysInt WinAPI_GetThemeSysSize WinAPI_GetThemeSysString WinAPI_GetThemeTextExtent WinAPI_GetThemeTextMetrics WinAPI_GetThemeTransitionDuration WinAPI_GetThreadDesktop WinAPI_GetThreadErrorMode WinAPI_GetThreadLocale WinAPI_GetThreadUILanguage WinAPI_GetTickCount WinAPI_GetTickCount64 WinAPI_GetTimeFormat WinAPI_GetTopWindow WinAPI_GetUDFColorMode WinAPI_GetUpdateRect WinAPI_GetUpdateRgn WinAPI_GetUserDefaultLangID WinAPI_GetUserDefaultLCID WinAPI_GetUserDefaultUILanguage WinAPI_GetUserGeoID WinAPI_GetUserObjectInformation WinAPI_GetVersion WinAPI_GetVersionEx WinAPI_GetVolumeInformation WinAPI_GetVolumeInformationByHandle WinAPI_GetVolumeNameForVolumeMountPoint WinAPI_GetWindow WinAPI_GetWindowDC WinAPI_GetWindowDisplayAffinity WinAPI_GetWindowExt WinAPI_GetWindowFileName WinAPI_GetWindowHeight WinAPI_GetWindowInfo WinAPI_GetWindowLong WinAPI_GetWindowOrg WinAPI_GetWindowPlacement WinAPI_GetWindowRect WinAPI_GetWindowRgn WinAPI_GetWindowRgnBox WinAPI_GetWindowSubclass WinAPI_GetWindowText WinAPI_GetWindowTheme WinAPI_GetWindowThreadProcessId WinAPI_GetWindowWidth WinAPI_GetWorkArea WinAPI_GetWorldTransform WinAPI_GetXYFromPoint WinAPI_GlobalMemoryStatus WinAPI_GradientFill WinAPI_GUIDFromString WinAPI_GUIDFromStringEx WinAPI_HashData WinAPI_HashString WinAPI_HiByte WinAPI_HideCaret WinAPI_HiDWord WinAPI_HiWord WinAPI_InflateRect WinAPI_InitMUILanguage WinAPI_InProcess WinAPI_IntersectClipRect WinAPI_IntersectRect WinAPI_IntToDWord WinAPI_IntToFloat WinAPI_InvalidateRect WinAPI_InvalidateRgn WinAPI_InvertANDBitmap WinAPI_InvertColor WinAPI_InvertRect WinAPI_InvertRgn WinAPI_IOCTL WinAPI_IsAlphaBitmap WinAPI_IsBadCodePtr WinAPI_IsBadReadPtr WinAPI_IsBadStringPtr WinAPI_IsBadWritePtr WinAPI_IsChild WinAPI_IsClassName WinAPI_IsDoorOpen WinAPI_IsElevated WinAPI_IsHungAppWindow WinAPI_IsIconic WinAPI_IsInternetConnected WinAPI_IsLoadKBLayout WinAPI_IsMemory WinAPI_IsNameInExpression WinAPI_IsNetworkAlive WinAPI_IsPathShared WinAPI_IsProcessInJob WinAPI_IsProcessorFeaturePresent WinAPI_IsRectEmpty WinAPI_IsThemeActive WinAPI_IsThemeBackgroundPartiallyTransparent WinAPI_IsThemePartDefined WinAPI_IsValidLocale WinAPI_IsWindow WinAPI_IsWindowEnabled WinAPI_IsWindowUnicode WinAPI_IsWindowVisible WinAPI_IsWow64Process WinAPI_IsWritable WinAPI_IsZoomed WinAPI_Keybd_Event WinAPI_KillTimer WinAPI_LineDDA WinAPI_LineTo WinAPI_LoadBitmap WinAPI_LoadCursor WinAPI_LoadCursorFromFile WinAPI_LoadIcon WinAPI_LoadIconMetric WinAPI_LoadIconWithScaleDown WinAPI_LoadImage WinAPI_LoadIndirectString WinAPI_LoadKeyboardLayout WinAPI_LoadLibrary WinAPI_LoadLibraryEx WinAPI_LoadMedia WinAPI_LoadResource WinAPI_LoadShell32Icon WinAPI_LoadString WinAPI_LoadStringEx WinAPI_LoByte WinAPI_LocalFree WinAPI_LockDevice WinAPI_LockFile WinAPI_LockResource WinAPI_LockWindowUpdate WinAPI_LockWorkStation WinAPI_LoDWord WinAPI_LongMid WinAPI_LookupIconIdFromDirectoryEx WinAPI_LoWord WinAPI_LPtoDP WinAPI_MAKELANGID WinAPI_MAKELCID WinAPI_MakeLong WinAPI_MakeQWord WinAPI_MakeWord WinAPI_MapViewOfFile WinAPI_MapVirtualKey WinAPI_MaskBlt WinAPI_MessageBeep WinAPI_MessageBoxCheck WinAPI_MessageBoxIndirect WinAPI_MirrorIcon WinAPI_ModifyWorldTransform WinAPI_MonitorFromPoint WinAPI_MonitorFromRect WinAPI_MonitorFromWindow WinAPI_Mouse_Event WinAPI_MoveFileEx WinAPI_MoveMemory WinAPI_MoveTo WinAPI_MoveToEx WinAPI_MoveWindow WinAPI_MsgBox WinAPI_MulDiv WinAPI_MultiByteToWideChar WinAPI_MultiByteToWideCharEx WinAPI_NtStatusToDosError WinAPI_OemToChar WinAPI_OffsetClipRgn WinAPI_OffsetPoints WinAPI_OffsetRect WinAPI_OffsetRgn WinAPI_OffsetWindowOrg WinAPI_OpenDesktop WinAPI_OpenFileById WinAPI_OpenFileDlg WinAPI_OpenFileMapping WinAPI_OpenIcon WinAPI_OpenInputDesktop WinAPI_OpenJobObject WinAPI_OpenMutex WinAPI_OpenProcess WinAPI_OpenProcessToken WinAPI_OpenSemaphore WinAPI_OpenThemeData WinAPI_OpenWindowStation WinAPI_PageSetupDlg WinAPI_PaintDesktop WinAPI_PaintRgn WinAPI_ParseURL WinAPI_ParseUserName WinAPI_PatBlt WinAPI_PathAddBackslash WinAPI_PathAddExtension WinAPI_PathAppend WinAPI_PathBuildRoot WinAPI_PathCanonicalize WinAPI_PathCommonPrefix WinAPI_PathCompactPath WinAPI_PathCompactPathEx WinAPI_PathCreateFromUrl WinAPI_PathFindExtension WinAPI_PathFindFileName WinAPI_PathFindNextComponent WinAPI_PathFindOnPath WinAPI_PathGetArgs WinAPI_PathGetCharType WinAPI_PathGetDriveNumber WinAPI_PathIsContentType WinAPI_PathIsDirectory WinAPI_PathIsDirectoryEmpty WinAPI_PathIsExe WinAPI_PathIsFileSpec WinAPI_PathIsLFNFileSpec WinAPI_PathIsRelative WinAPI_PathIsRoot WinAPI_PathIsSameRoot WinAPI_PathIsSystemFolder WinAPI_PathIsUNC WinAPI_PathIsUNCServer WinAPI_PathIsUNCServerShare WinAPI_PathMakeSystemFolder WinAPI_PathMatchSpec WinAPI_PathParseIconLocation WinAPI_PathRelativePathTo WinAPI_PathRemoveArgs WinAPI_PathRemoveBackslash WinAPI_PathRemoveExtension WinAPI_PathRemoveFileSpec WinAPI_PathRenameExtension WinAPI_PathSearchAndQualify WinAPI_PathSkipRoot WinAPI_PathStripPath WinAPI_PathStripToRoot WinAPI_PathToRegion WinAPI_PathUndecorate WinAPI_PathUnExpandEnvStrings WinAPI_PathUnmakeSystemFolder WinAPI_PathUnquoteSpaces WinAPI_PathYetAnotherMakeUniqueName WinAPI_PickIconDlg WinAPI_PlayEnhMetaFile WinAPI_PlaySound WinAPI_PlgBlt WinAPI_PointFromRect WinAPI_PolyBezier WinAPI_PolyBezierTo WinAPI_PolyDraw WinAPI_Polygon WinAPI_PostMessage WinAPI_PrimaryLangId WinAPI_PrintDlg WinAPI_PrintDlgEx WinAPI_PrintWindow WinAPI_ProgIDFromCLSID WinAPI_PtInRect WinAPI_PtInRectEx WinAPI_PtInRegion WinAPI_PtVisible WinAPI_QueryDosDevice WinAPI_QueryInformationJobObject WinAPI_QueryPerformanceCounter WinAPI_QueryPerformanceFrequency WinAPI_RadialGradientFill WinAPI_ReadDirectoryChanges WinAPI_ReadFile WinAPI_ReadProcessMemory WinAPI_Rectangle WinAPI_RectInRegion WinAPI_RectIsEmpty WinAPI_RectVisible WinAPI_RedrawWindow WinAPI_RegCloseKey WinAPI_RegConnectRegistry WinAPI_RegCopyTree WinAPI_RegCopyTreeEx WinAPI_RegCreateKey WinAPI_RegDeleteEmptyKey WinAPI_RegDeleteKey WinAPI_RegDeleteKeyValue WinAPI_RegDeleteTree WinAPI_RegDeleteTreeEx WinAPI_RegDeleteValue WinAPI_RegDisableReflectionKey WinAPI_RegDuplicateHKey WinAPI_RegEnableReflectionKey WinAPI_RegEnumKey WinAPI_RegEnumValue WinAPI_RegFlushKey WinAPI_RegisterApplicationRestart WinAPI_RegisterClass WinAPI_RegisterClassEx WinAPI_RegisterHotKey WinAPI_RegisterPowerSettingNotification WinAPI_RegisterRawInputDevices WinAPI_RegisterShellHookWindow WinAPI_RegisterWindowMessage WinAPI_RegLoadMUIString WinAPI_RegNotifyChangeKeyValue WinAPI_RegOpenKey WinAPI_RegQueryInfoKey WinAPI_RegQueryLastWriteTime WinAPI_RegQueryMultipleValues WinAPI_RegQueryReflectionKey WinAPI_RegQueryValue WinAPI_RegRestoreKey WinAPI_RegSaveKey WinAPI_RegSetValue WinAPI_ReleaseCapture WinAPI_ReleaseDC WinAPI_ReleaseMutex WinAPI_ReleaseSemaphore WinAPI_ReleaseStream WinAPI_RemoveClipboardFormatListener WinAPI_RemoveDirectory WinAPI_RemoveFontMemResourceEx WinAPI_RemoveFontResourceEx WinAPI_RemoveWindowSubclass WinAPI_ReOpenFile WinAPI_ReplaceFile WinAPI_ReplaceTextDlg WinAPI_ResetEvent WinAPI_RestartDlg WinAPI_RestoreDC WinAPI_RGB WinAPI_RotatePoints WinAPI_RoundRect WinAPI_SaveDC WinAPI_SaveFileDlg WinAPI_SaveHBITMAPToFile WinAPI_SaveHICONToFile WinAPI_ScaleWindowExt WinAPI_ScreenToClient WinAPI_SearchPath WinAPI_SelectClipPath WinAPI_SelectClipRgn WinAPI_SelectObject WinAPI_SendMessageTimeout WinAPI_SetActiveWindow WinAPI_SetArcDirection WinAPI_SetBitmapBits WinAPI_SetBitmapDimensionEx WinAPI_SetBkColor WinAPI_SetBkMode WinAPI_SetBoundsRect WinAPI_SetBrushOrg WinAPI_SetCapture WinAPI_SetCaretBlinkTime WinAPI_SetCaretPos WinAPI_SetClassLongEx WinAPI_SetColorAdjustment WinAPI_SetCompression WinAPI_SetCurrentDirectory WinAPI_SetCurrentProcessExplicitAppUserModelID WinAPI_SetCursor WinAPI_SetDCBrushColor WinAPI_SetDCPenColor WinAPI_SetDefaultPrinter WinAPI_SetDeviceGammaRamp WinAPI_SetDIBColorTable WinAPI_SetDIBits WinAPI_SetDIBitsToDevice WinAPI_SetDllDirectory WinAPI_SetEndOfFile WinAPI_SetEnhMetaFileBits WinAPI_SetErrorMode WinAPI_SetEvent WinAPI_SetFileAttributes WinAPI_SetFileInformationByHandleEx WinAPI_SetFilePointer WinAPI_SetFilePointerEx WinAPI_SetFileShortName WinAPI_SetFileValidData WinAPI_SetFocus WinAPI_SetFont WinAPI_SetForegroundWindow WinAPI_SetFRBuffer WinAPI_SetGraphicsMode WinAPI_SetHandleInformation WinAPI_SetInformationJobObject WinAPI_SetKeyboardLayout WinAPI_SetKeyboardState WinAPI_SetLastError WinAPI_SetLayeredWindowAttributes WinAPI_SetLocaleInfo WinAPI_SetMapMode WinAPI_SetMessageExtraInfo WinAPI_SetParent WinAPI_SetPixel WinAPI_SetPolyFillMode WinAPI_SetPriorityClass WinAPI_SetProcessAffinityMask WinAPI_SetProcessShutdownParameters WinAPI_SetProcessWindowStation WinAPI_SetRectRgn WinAPI_SetROP2 WinAPI_SetSearchPathMode WinAPI_SetStretchBltMode WinAPI_SetSysColors WinAPI_SetSystemCursor WinAPI_SetTextAlign WinAPI_SetTextCharacterExtra WinAPI_SetTextColor WinAPI_SetTextJustification WinAPI_SetThemeAppProperties WinAPI_SetThreadDesktop WinAPI_SetThreadErrorMode WinAPI_SetThreadExecutionState WinAPI_SetThreadLocale WinAPI_SetThreadUILanguage WinAPI_SetTimer WinAPI_SetUDFColorMode WinAPI_SetUserGeoID WinAPI_SetUserObjectInformation WinAPI_SetVolumeMountPoint WinAPI_SetWindowDisplayAffinity WinAPI_SetWindowExt WinAPI_SetWindowLong WinAPI_SetWindowOrg WinAPI_SetWindowPlacement WinAPI_SetWindowPos WinAPI_SetWindowRgn WinAPI_SetWindowsHookEx WinAPI_SetWindowSubclass WinAPI_SetWindowText WinAPI_SetWindowTheme WinAPI_SetWinEventHook WinAPI_SetWorldTransform WinAPI_SfcIsFileProtected WinAPI_SfcIsKeyProtected WinAPI_ShellAboutDlg WinAPI_ShellAddToRecentDocs WinAPI_ShellChangeNotify WinAPI_ShellChangeNotifyDeregister WinAPI_ShellChangeNotifyRegister WinAPI_ShellCreateDirectory WinAPI_ShellEmptyRecycleBin WinAPI_ShellExecute WinAPI_ShellExecuteEx WinAPI_ShellExtractAssociatedIcon WinAPI_ShellExtractIcon WinAPI_ShellFileOperation WinAPI_ShellFlushSFCache WinAPI_ShellGetFileInfo WinAPI_ShellGetIconOverlayIndex WinAPI_ShellGetImageList WinAPI_ShellGetKnownFolderIDList WinAPI_ShellGetKnownFolderPath WinAPI_ShellGetLocalizedName WinAPI_ShellGetPathFromIDList WinAPI_ShellGetSetFolderCustomSettings WinAPI_ShellGetSettings WinAPI_ShellGetSpecialFolderLocation WinAPI_ShellGetSpecialFolderPath WinAPI_ShellGetStockIconInfo WinAPI_ShellILCreateFromPath WinAPI_ShellNotifyIcon WinAPI_ShellNotifyIconGetRect WinAPI_ShellObjectProperties WinAPI_ShellOpenFolderAndSelectItems WinAPI_ShellOpenWithDlg WinAPI_ShellQueryRecycleBin WinAPI_ShellQueryUserNotificationState WinAPI_ShellRemoveLocalizedName WinAPI_ShellRestricted WinAPI_ShellSetKnownFolderPath WinAPI_ShellSetLocalizedName WinAPI_ShellSetSettings WinAPI_ShellStartNetConnectionDlg WinAPI_ShellUpdateImage WinAPI_ShellUserAuthenticationDlg WinAPI_ShellUserAuthenticationDlgEx WinAPI_ShortToWord WinAPI_ShowCaret WinAPI_ShowCursor WinAPI_ShowError WinAPI_ShowLastError WinAPI_ShowMsg WinAPI_ShowOwnedPopups WinAPI_ShowWindow WinAPI_ShutdownBlockReasonCreate WinAPI_ShutdownBlockReasonDestroy WinAPI_ShutdownBlockReasonQuery WinAPI_SizeOfResource WinAPI_StretchBlt WinAPI_StretchDIBits WinAPI_StrFormatByteSize WinAPI_StrFormatByteSizeEx WinAPI_StrFormatKBSize WinAPI_StrFromTimeInterval WinAPI_StringFromGUID WinAPI_StringLenA WinAPI_StringLenW WinAPI_StrLen WinAPI_StrokeAndFillPath WinAPI_StrokePath WinAPI_StructToArray WinAPI_SubLangId WinAPI_SubtractRect WinAPI_SwapDWord WinAPI_SwapQWord WinAPI_SwapWord WinAPI_SwitchColor WinAPI_SwitchDesktop WinAPI_SwitchToThisWindow WinAPI_SystemParametersInfo WinAPI_TabbedTextOut WinAPI_TerminateJobObject WinAPI_TerminateProcess WinAPI_TextOut WinAPI_TileWindows WinAPI_TrackMouseEvent WinAPI_TransparentBlt WinAPI_TwipsPerPixelX WinAPI_TwipsPerPixelY WinAPI_UnhookWindowsHookEx WinAPI_UnhookWinEvent WinAPI_UnionRect WinAPI_UnionStruct WinAPI_UniqueHardwareID WinAPI_UnloadKeyboardLayout WinAPI_UnlockFile WinAPI_UnmapViewOfFile WinAPI_UnregisterApplicationRestart WinAPI_UnregisterClass WinAPI_UnregisterHotKey WinAPI_UnregisterPowerSettingNotification WinAPI_UpdateLayeredWindow WinAPI_UpdateLayeredWindowEx WinAPI_UpdateLayeredWindowIndirect WinAPI_UpdateResource WinAPI_UpdateWindow WinAPI_UrlApplyScheme WinAPI_UrlCanonicalize WinAPI_UrlCombine WinAPI_UrlCompare WinAPI_UrlCreateFromPath WinAPI_UrlFixup WinAPI_UrlGetPart WinAPI_UrlHash WinAPI_UrlIs WinAPI_UserHandleGrantAccess WinAPI_ValidateRect WinAPI_ValidateRgn WinAPI_VerQueryRoot WinAPI_VerQueryValue WinAPI_VerQueryValueEx WinAPI_WaitForInputIdle WinAPI_WaitForMultipleObjects WinAPI_WaitForSingleObject WinAPI_WideCharToMultiByte WinAPI_WidenPath WinAPI_WindowFromDC WinAPI_WindowFromPoint WinAPI_WordToShort WinAPI_Wow64EnableWow64FsRedirection WinAPI_WriteConsole WinAPI_WriteFile WinAPI_WriteProcessMemory WinAPI_ZeroMemory WinNet_AddConnection WinNet_AddConnection2 WinNet_AddConnection3 WinNet_CancelConnection WinNet_CancelConnection2 WinNet_CloseEnum WinNet_ConnectionDialog WinNet_ConnectionDialog1 WinNet_DisconnectDialog WinNet_DisconnectDialog1 WinNet_EnumResource WinNet_GetConnection WinNet_GetConnectionPerformance WinNet_GetLastError WinNet_GetNetworkInformation WinNet_GetProviderName WinNet_GetResourceInformation WinNet_GetResourceParent WinNet_GetUniversalName WinNet_GetUser WinNet_OpenEnum WinNet_RestoreConnection WinNet_UseConnection Word_Create Word_DocAdd Word_DocAttach Word_DocClose Word_DocExport Word_DocFind Word_DocFindReplace Word_DocGet Word_DocLinkAdd Word_DocLinkGet Word_DocOpen Word_DocPictureAdd Word_DocPrint Word_DocRangeSet Word_DocSave Word_DocSaveAs Word_DocTableRead Word_DocTableWrite Word_Quit",e={
+variants:[a.COMMENT(";","$",{relevance:0}),a.COMMENT("#cs","#ce"),a.COMMENT("#comments-start","#comments-end")]},f={className:"variable",begin:"\\$[A-z0-9_]+"},g={className:"string",variants:[{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]},h={variants:[a.BINARY_NUMBER_MODE,a.C_NUMBER_MODE]},i={className:"preprocessor",begin:"#",end:"$",keywords:"include include-once NoTrayIcon OnAutoItStartRegister RequireAdmin pragma Au3Stripper_Ignore_Funcs Au3Stripper_Ignore_Variables Au3Stripper_Off Au3Stripper_On Au3Stripper_Parameters AutoIt3Wrapper_Add_Constants AutoIt3Wrapper_Au3Check_Parameters AutoIt3Wrapper_Au3Check_Stop_OnWarning AutoIt3Wrapper_Aut2Exe AutoIt3Wrapper_AutoIt3 AutoIt3Wrapper_AutoIt3Dir AutoIt3Wrapper_Change2CUI AutoIt3Wrapper_Compile_Both AutoIt3Wrapper_Compression AutoIt3Wrapper_EndIf AutoIt3Wrapper_Icon AutoIt3Wrapper_If_Compile AutoIt3Wrapper_If_Run AutoIt3Wrapper_Jump_To_First_Error AutoIt3Wrapper_OutFile AutoIt3Wrapper_OutFile_Type AutoIt3Wrapper_OutFile_X64 AutoIt3Wrapper_PlugIn_Funcs AutoIt3Wrapper_Res_Comment Autoit3Wrapper_Res_Compatibility AutoIt3Wrapper_Res_Description AutoIt3Wrapper_Res_Field AutoIt3Wrapper_Res_File_Add AutoIt3Wrapper_Res_FileVersion AutoIt3Wrapper_Res_FileVersion_AutoIncrement AutoIt3Wrapper_Res_Icon_Add AutoIt3Wrapper_Res_Language AutoIt3Wrapper_Res_LegalCopyright AutoIt3Wrapper_Res_ProductVersion AutoIt3Wrapper_Res_requestedExecutionLevel AutoIt3Wrapper_Res_SaveSource AutoIt3Wrapper_Run_After AutoIt3Wrapper_Run_Au3Check AutoIt3Wrapper_Run_Au3Stripper AutoIt3Wrapper_Run_Before AutoIt3Wrapper_Run_Debug_Mode AutoIt3Wrapper_Run_SciTE_Minimized AutoIt3Wrapper_Run_SciTE_OutputPane_Minimized AutoIt3Wrapper_Run_Tidy AutoIt3Wrapper_ShowProgress AutoIt3Wrapper_Testing AutoIt3Wrapper_Tidy_Stop_OnError AutoIt3Wrapper_UPX_Parameters AutoIt3Wrapper_UseUPX AutoIt3Wrapper_UseX64 AutoIt3Wrapper_Version AutoIt3Wrapper_Versioning AutoIt3Wrapper_Versioning_Parameters Tidy_Off Tidy_On Tidy_Parameters EndRegion Region",contains:[{begin:/\\\n/,relevance:0},{beginKeywords:"include",end:"$",contains:[g,{className:"string",variants:[{begin:"<",end:">"},{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]}]},g,e]},j={className:"constant",begin:"@[A-z0-9_]+"},k={className:"function",beginKeywords:"Func",end:"$",excludeEnd:!0,illegal:"\\$|\\[|%",contains:[a.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:[f,g,h]}]};return{case_insensitive:!0,illegal:/\/\*/,keywords:{keyword:b,built_in:d,literal:c},contains:[e,f,g,h,i,j,k]}}),a.registerLanguage("avrasm",function(a){return{case_insensitive:!0,lexemes:"\\.?"+a.IDENT_RE,keywords:{keyword:"adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub subi swap tst wdr",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf",preprocessor:".byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list .listmac .macro .nolist .org .set"},contains:[a.C_BLOCK_COMMENT_MODE,a.COMMENT(";","$",{relevance:0}),a.C_NUMBER_MODE,a.BINARY_NUMBER_MODE,{className:"number",begin:"\\b(\\$[a-zA-Z0-9]+|0o[0-7]+)"},a.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",illegal:"[^\\\\][^']"},{className:"label",begin:"^[A-Za-z0-9_.$]+:"},{className:"preprocessor",begin:"#",end:"$"},{className:"localvars",begin:"@[0-9]+"}]}}),a.registerLanguage("axapta",function(a){return{keywords:"false int abstract private char boolean static null if for true while long throw finally protected final return void enum else break new catch byte super case short default double public try this switch continue reverse firstfast firstonly forupdate nofetch sum avg minof maxof count order group by asc desc index hint like dispaly edit client server ttsbegin ttscommit str real date container anytype common div mod",contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.C_NUMBER_MODE,{className:"preprocessor",begin:"#",end:"$"},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:":",contains:[{beginKeywords:"extends implements"},a.UNDERSCORE_TITLE_MODE]}]}}),a.registerLanguage("bash",function(a){var b={className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)}/}]},c={className:"string",begin:/"/,end:/"/,contains:[a.BACKSLASH_ESCAPE,b,{className:"variable",begin:/\$\(/,end:/\)/,contains:[a.BACKSLASH_ESCAPE]}]},d={className:"string",begin:/'/,end:/'/};return{aliases:["sh","zsh"],lexemes:/-?[a-z\.]+/,keywords:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",operator:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[{className:"shebang",begin:/^#![^\n]+sh\s*$/,relevance:10},{className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[a.inherit(a.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},a.HASH_COMMENT_MODE,a.NUMBER_MODE,c,d,b]}}),a.registerLanguage("brainfuck",function(a){var b={className:"literal",begin:"[\\+\\-]",relevance:0};return{aliases:["bf"],contains:[a.COMMENT("[^\\[\\]\\.,\\+\\-<> \r\n]","[\\[\\]\\.,\\+\\-<> \r\n]",{returnEnd:!0,relevance:0}),{className:"title",begin:"[\\[\\]]",relevance:0},{className:"string",begin:"[\\.,]",relevance:0},{begin:/\+\+|\-\-/,returnBegin:!0,contains:[b]},b]}}),a.registerLanguage("cal",function(a){var b="div mod in and or not xor asserterror begin case do downto else end exit for if of repeat then to until while with var",c="false true",d=[a.C_LINE_COMMENT_MODE,a.COMMENT(/\{/,/\}/,{relevance:0}),a.COMMENT(/\(\*/,/\*\)/,{relevance:10})],e={className:"string",begin:/'/,end:/'/,contains:[{begin:/''/}]},f={className:"string",begin:/(#\d+)+/},g={className:"date",begin:"\\b\\d+(\\.\\d+)?(DT|D|T)",relevance:0},h={className:"variable",begin:'"',end:'"'},i={className:"function",beginKeywords:"procedure",end:/[:;]/,keywords:"procedure|10",contains:[a.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,keywords:b,contains:[e,f]}].concat(d)},j={className:"class",begin:"OBJECT (Table|Form|Report|Dataport|Codeunit|XMLport|MenuSuite|Page|Query) (\\d+) ([^\\r\\n]+)",returnBegin:!0,contains:[a.TITLE_MODE,i]};return{case_insensitive:!0,keywords:{keyword:b,literal:c},illegal:/\/\*/,contains:[e,f,g,h,a.NUMBER_MODE,j,i]}}),a.registerLanguage("capnproto",function(a){return{aliases:["capnp"],keywords:{keyword:"struct enum interface union group import using const annotation extends in of on as with from fixed",built_in:"Void Bool Int8 Int16 Int32 Int64 UInt8 UInt16 UInt32 UInt64 Float32 Float64 Text Data AnyPointer AnyStruct Capability List",literal:"true false"},contains:[a.QUOTE_STRING_MODE,a.NUMBER_MODE,a.HASH_COMMENT_MODE,{className:"shebang",begin:/@0x[\w\d]{16};/,illegal:/\n/},{className:"number",begin:/@\d+\b/},{className:"class",beginKeywords:"struct enum",end:/\{/,illegal:/\n/,contains:[a.inherit(a.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{className:"class",beginKeywords:"interface",end:/\{/,illegal:/\n/,contains:[a.inherit(a.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]}]}}),a.registerLanguage("ceylon",function(a){var b="assembly module package import alias class interface object given value assign void function new of extends satisfies abstracts in out return break continue throw assert dynamic if else switch case for while try catch finally then let this outer super is exists nonempty",c="shared abstract formal default actual variable late native deprecatedfinal sealed annotation suppressWarnings small",d="doc by license see throws tagged",e=c+" "+d,f={className:"subst",excludeBegin:!0,excludeEnd:!0,begin:/``/,end:/``/,keywords:b,relevance:10},g=[{className:"string",begin:'"""',end:'"""',relevance:10},{className:"string",begin:'"',end:'"',contains:[f]},{className:"string",begin:"'",end:"'"},{className:"number",begin:"#[0-9a-fA-F_]+|\\$[01_]+|[0-9_]+(?:\\.[0-9_](?:[eE][+-]?\\d+)?)?[kMGTPmunpf]?",relevance:0}];return f.contains=g,{keywords:{keyword:b,annotation:e},illegal:"\\$[^01]|#[^0-9a-fA-F]",contains:[a.C_LINE_COMMENT_MODE,a.COMMENT("/\\*","\\*/",{contains:["self"]}),{className:"annotation",begin:'@[a-z]\\w*(?:\\:"[^"]*")?'}].concat(g)}}),a.registerLanguage("clojure",function(a){var b={built_in:"def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize"},c="a-zA-Z_\\-!.?+*=<>&#'",d="["+c+"]["+c+"0-9/;:]*",e="[-+]?\\d+(\\.\\d+)?",f={begin:d,relevance:0},g={className:"number",begin:e,relevance:0},h=a.inherit(a.QUOTE_STRING_MODE,{illegal:null}),i=a.COMMENT(";","$",{relevance:0}),j={className:"literal",begin:/\b(true|false|nil)\b/},k={className:"collection",begin:"[\\[\\{]",end:"[\\]\\}]"},l={className:"comment",begin:"\\^"+d},m=a.COMMENT("\\^\\{","\\}"),n={className:"attribute",begin:"[:]"+d},o={className:"list",begin:"\\(",end:"\\)"},p={endsWithParent:!0,relevance:0},q={keywords:b,lexemes:d,className:"keyword",begin:d,starts:p},r=[o,h,l,m,i,n,k,g,j,f];return o.contains=[a.COMMENT("comment",""),q,p],p.contains=r,k.contains=r,{aliases:["clj"],illegal:/\S/,contains:[o,h,l,m,i,n,k,g,j]}}),a.registerLanguage("clojure-repl",function(a){return{contains:[{className:"prompt",begin:/^([\w.-]+|\s*#_)=>/,starts:{end:/$/,subLanguage:"clojure"}}]}}),a.registerLanguage("cmake",function(a){return{aliases:["cmake.in"],case_insensitive:!0,keywords:{keyword:"add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_subdirectory add_test aux_source_directory break build_command cmake_minimum_required cmake_policy configure_file create_test_sourcelist define_property else elseif enable_language enable_testing endforeach endfunction endif endmacro endwhile execute_process export find_file find_library find_package find_path find_program fltk_wrap_ui foreach function get_cmake_property get_directory_property get_filename_component get_property get_source_file_property get_target_property get_test_property if include include_directories include_external_msproject include_regular_expression install link_directories load_cache load_command macro mark_as_advanced message option output_required_files project qt_wrap_cpp qt_wrap_ui remove_definitions return separate_arguments set set_directory_properties set_property set_source_files_properties set_target_properties set_tests_properties site_name source_group string target_link_libraries try_compile try_run unset variable_watch while build_name exec_program export_library_dependencies install_files install_programs install_targets link_libraries make_directory remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or",operator:"equal less greater strless strgreater strequal matches"},contains:[{className:"envvar",begin:"\\${",end:"}"},a.HASH_COMMENT_MODE,a.QUOTE_STRING_MODE,a.NUMBER_MODE]}}),a.registerLanguage("coffeescript",function(a){var b={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},c="[A-Za-z$_][0-9A-Za-z$_]*",d={className:"subst",begin:/#\{/,end:/}/,keywords:b},e=[a.BINARY_NUMBER_MODE,a.inherit(a.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[a.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[a.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[a.BACKSLASH_ESCAPE,d]},{begin:/"/,end:/"/,contains:[a.BACKSLASH_ESCAPE,d]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[d,a.HASH_COMMENT_MODE]},{begin:"//[gim]*",relevance:0},{begin:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{className:"property",begin:"@"+c},{begin:"`",end:"`",excludeBegin:!0,excludeEnd:!0,subLanguage:"javascript"}];d.contains=e;var f=a.inherit(a.TITLE_MODE,{begin:c}),g="(\\(.*\\))?\\s*\\B[-=]>",h={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:b,contains:["self"].concat(e)}]};return{aliases:["coffee","cson","iced"],keywords:b,illegal:/\/\*/,contains:e.concat([a.COMMENT("###","###"),a.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*"+c+"\\s*=\\s*"+g,end:"[-=]>",returnBegin:!0,contains:[f,h]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:g,end:"[-=]>",returnBegin:!0,contains:[h]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[f]},f]},{className:"attribute",begin:c+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}),a.registerLanguage("cpp",function(a){var b={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},c={className:"string",variants:[a.inherit(a.QUOTE_STRING_MODE,{begin:'((u8?|U)|L)?"'}),{begin:'(u8?|U)?R"',end:'"',contains:[a.BACKSLASH_ESCAPE]},{begin:"'\\\\?.",end:"'",illegal:"."}]},d={className:"number",variants:[{begin:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},{begin:a.C_NUMBER_RE}]},e={className:"preprocessor",begin:"#",end:"$",keywords:"if else elif endif define undef warning error line pragma ifdef ifndef",contains:[{begin:/\\\n/,relevance:0},{beginKeywords:"include",end:"$",contains:[c,{className:"string",begin:"<",end:">",illegal:"\\n"}]},c,d,a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE]},f=a.IDENT_RE+"\\s*\\(",g={keyword:"int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf",literal:"true false nullptr NULL"};return{aliases:["c","cc","h","c++","h++","hpp"],keywords:g,illegal:"</",contains:[b,a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,d,c,e,{begin:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",end:">",keywords:g,contains:["self",b]},{begin:a.IDENT_RE+"::",keywords:g},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"("+a.IDENT_RE+"[\\*&\\s]+)+"+f,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:g,illegal:/[^\w\s\*&]/,contains:[{begin:f,returnBegin:!0,contains:[a.TITLE_MODE],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:g,relevance:0,contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,c,d]},a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,e]}]}}),a.registerLanguage("crmsh",function(a){var b="primitive rsc_template",c="group clone ms master location colocation order fencing_topology rsc_ticket acl_target acl_group user role tag xml",d="property rsc_defaults op_defaults",e="params meta operations op rule attributes utilization",f="read write deny defined not_defined in_range date spec in ref reference attribute type xpath version and or lt gt tag lte gte eq ne \\",g="number string",h="Master Started Slave Stopped start promote demote stop monitor true false";return{aliases:["crm","pcmk"],case_insensitive:!0,keywords:{keyword:e,operator:f,type:g,literal:h},contains:[a.HASH_COMMENT_MODE,{beginKeywords:"node",starts:{className:"identifier",end:"\\s*([\\w_-]+:)?",starts:{className:"title",end:"\\s*[\\$\\w_][\\w_-]*"}}},{beginKeywords:b,starts:{className:"title",end:"\\s*[\\$\\w_][\\w_-]*",starts:{className:"pragma",end:"\\s*@?[\\w_][\\w_\\.:-]*"}}},{begin:"\\b("+c.split(" ").join("|")+")\\s+",keywords:c,starts:{className:"title",end:"[\\$\\w_][\\w_-]*"}},{beginKeywords:d,starts:{className:"title",end:"\\s*([\\w_-]+:)?"}},a.QUOTE_STRING_MODE,{className:"pragma",begin:"(ocf|systemd|service|lsb):[\\w_:-]+",relevance:0},{className:"number",begin:"\\b\\d+(\\.\\d+)?(ms|s|h|m)?",relevance:0},{className:"number",begin:"[-]?(infinity|inf)",relevance:0},{className:"variable",begin:/([A-Za-z\$_\#][\w_-]+)=/,relevance:0},{className:"tag",begin:"</?",end:"/?>",relevance:0}]}}),a.registerLanguage("crystal",function(a){function b(a,b){var c=[{begin:a,end:b}];return c[0].contains=c,c}var c="(_[uif](8|16|32|64))?",d="[a-zA-Z_]\\w*[!?=]?",e="!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",f="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\][=?]?",g={keyword:"abstract alias as asm begin break case class def do else elsif end ensure enum extend for fun if ifdef include instance_sizeof is_a? lib macro module next of out pointerof private protected rescue responds_to? return require self sizeof struct super then type typeof union unless until when while with yield __DIR__ __FILE__ __LINE__",literal:"false nil true"},h={className:"subst",begin:"#{",end:"}",keywords:g},i={className:"expansion",variants:[{begin:"\\{\\{",end:"\\}\\}"},{begin:"\\{%",end:"%\\}"}],keywords:g,relevance:10},j={className:"string",contains:[a.BACKSLASH_ESCAPE,h],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%w?\\(",end:"\\)",contains:b("\\(","\\)")},{begin:"%w?\\[",end:"\\]",contains:b("\\[","\\]")},{begin:"%w?{",end:"}",contains:b("{","}")},{begin:"%w?<",end:">",contains:b("<",">")},{begin:"%w?/",end:"/"},{begin:"%w?%",end:"%"},{begin:"%w?-",end:"-"},{begin:"%w?\\|",end:"\\|"}],relevance:0},k={begin:"("+e+")\\s*",contains:[{className:"regexp",contains:[a.BACKSLASH_ESCAPE,h],variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r\\(",end:"\\)",contains:b("\\(","\\)")},{begin:"%r\\[",end:"\\]",contains:b("\\[","\\]")},{begin:"%r{",end:"}",contains:b("{","}")},{begin:"%r<",end:">",contains:b("<",">")},{begin:"%r/",end:"/"},{begin:"%r%",end:"%"},{begin:"%r-",end:"-"},{begin:"%r\\|",end:"\\|"}]}],relevance:0},l={className:"regexp",contains:[a.BACKSLASH_ESCAPE,h],variants:[{begin:"%r\\(",end:"\\)",contains:b("\\(","\\)")},{begin:"%r\\[",end:"\\]",contains:b("\\[","\\]")},{begin:"%r{",end:"}",contains:b("{","}")},{begin:"%r<",end:">",contains:b("<",">")},{begin:"%r/",end:"/"},{begin:"%r%",end:"%"},{begin:"%r-",end:"-"},{begin:"%r\\|",end:"\\|"}],relevance:0},m={className:"annotation",begin:"@\\[",end:"\\]",relevance:5},n=[i,j,k,l,m,a.HASH_COMMENT_MODE,{className:"class",beginKeywords:"class module struct",end:"$|;",illegal:/=/,contains:[a.HASH_COMMENT_MODE,a.inherit(a.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{className:"inheritance",begin:"<\\s*",contains:[{className:"parent",begin:"("+a.IDENT_RE+"::)?"+a.IDENT_RE}]}]},{className:"class",beginKeywords:"lib enum union",end:"$|;",illegal:/=/,contains:[a.HASH_COMMENT_MODE,a.inherit(a.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"})],relevance:10},{className:"function",beginKeywords:"def",end:/\B\b/,contains:[a.inherit(a.TITLE_MODE,{begin:f,endsParent:!0})]},{className:"function",beginKeywords:"fun macro",end:/\B\b/,contains:[a.inherit(a.TITLE_MODE,{begin:f,endsParent:!0})],relevance:5},{className:"constant",begin:"(::)?(\\b[A-Z]\\w*(::)?)+",relevance:0},{className:"symbol",begin:a.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":",contains:[j,{begin:f}],relevance:0},{className:"number",variants:[{begin:"\\b0b([01_]*[01])"+c},{begin:"\\b0o([0-7_]*[0-7])"+c},{begin:"\\b0x([A-Fa-f0-9_]*[A-Fa-f0-9])"+c},{begin:"\\b(([0-9][0-9_]*[0-9]|[0-9])(\\.[0-9_]*[0-9])?([eE][+-]?[0-9_]*[0-9])?)"+c}],relevance:0},{className:"variable",begin:"(\\$\\W)|((\\$|\\@\\@?|%)(\\w+))"}];return h.contains=n,m.contains=n,i.contains=n.slice(1),{aliases:["cr"],lexemes:d,keywords:g,contains:n}}),a.registerLanguage("cs",function(a){var b="abstract as base bool break byte case catch char checked const continue decimal dynamic default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long null when object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async protected public private internal ascending descending from get group into join let orderby partial select set value var where yield",c=a.IDENT_RE+"(<"+a.IDENT_RE+">)?";return{aliases:["csharp"],keywords:b,illegal:/::/,contains:[a.COMMENT("///","$",{returnBegin:!0,contains:[{className:"xmlDocTag",variants:[{begin:"///",relevance:0},{begin:"<!--|-->"},{begin:"</?",end:">"}]}]}),a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,{className:"preprocessor",begin:"#",end:"$",keywords:"if else elif endif define undef warning error line region endregion pragma checksum"},{className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.C_NUMBER_MODE,{beginKeywords:"class interface",end:/[{;=]/,illegal:/[^\s:]/,contains:[a.TITLE_MODE,a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",end:/[{;=]/,illegal:/[^\s:]/,contains:[{className:"title",begin:"[a-zA-Z](\\.?\\w)*",relevance:0},a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new return throw await",relevance:0},{className:"function",begin:"("+c+"\\s+)+"+a.IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:b,contains:[{begin:a.IDENT_RE+"\\s*\\(",returnBegin:!0,contains:[a.TITLE_MODE],relevance:0},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:b,relevance:0,contains:[a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.C_NUMBER_MODE,a.C_BLOCK_COMMENT_MODE]},a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE]}]}}),a.registerLanguage("css",function(a){var b="[a-zA-Z-][a-zA-Z0-9_-]*",c={className:"function",begin:b+"\\(",returnBegin:!0,excludeEnd:!0,end:"\\("},d={className:"rule",begin:/[A-Z\_\.\-]+\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[{className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{className:"value",endsWithParent:!0,excludeEnd:!0,contains:[c,a.CSS_NUMBER_MODE,a.QUOTE_STRING_MODE,a.APOS_STRING_MODE,a.C_BLOCK_COMMENT_MODE,{className:"hexcolor",begin:"#[0-9A-Fa-f]+"},{className:"important",begin:"!important"}]}}]};return{case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[a.C_BLOCK_COMMENT_MODE,{className:"id",begin:/\#[A-Za-z0-9_-]+/},{className:"class",begin:/\.[A-Za-z0-9_-]+/},{className:"attr_selector",begin:/\[/,end:/\]/,illegal:"$"},{className:"pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"']+/},{className:"at_rule",begin:"@(font-face|page)",lexemes:"[a-z-]+",keywords:"font-face page"},{className:"at_rule",begin:"@",end:"[{;]",contains:[{className:"keyword",begin:/\S+/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,contains:[c,a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.CSS_NUMBER_MODE]}]},{className:"tag",begin:b,relevance:0},{className:"rules",begin:"{",end:"}",illegal:/\S/,contains:[a.C_BLOCK_COMMENT_MODE,d]}]}}),a.registerLanguage("d",function(a){var b={keyword:"abstract alias align asm assert auto body break byte case cast catch class const continue debug default delete deprecated do else enum export extern final finally for foreach foreach_reverse|10 goto if immutable import in inout int interface invariant is lazy macro mixin module new nothrow out override package pragma private protected public pure ref return scope shared static struct super switch synchronized template this throw try typedef typeid typeof union unittest version void volatile while with __FILE__ __LINE__ __gshared|10 __thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__",built_in:"bool cdouble cent cfloat char creal dchar delegate double dstring float function idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar wstring",literal:"false null true"},c="(0|[1-9][\\d_]*)",d="(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)",e="0[bB][01_]+",f="([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)",g="0[xX]"+f,h="([eE][+-]?"+d+")",i="("+d+"(\\.\\d*|"+h+")|\\d+\\."+d+d+"|\\."+c+h+"?)",j="(0[xX]("+f+"\\."+f+"|\\.?"+f+")[pP][+-]?"+d+")",k="("+c+"|"+e+"|"+g+")",l="("+j+"|"+i+")",m="\\\\(['\"\\?\\\\abfnrtv]|u[\\dA-Fa-f]{4}|[0-7]{1,3}|x[\\dA-Fa-f]{2}|U[\\dA-Fa-f]{8})|&[a-zA-Z\\d]{2,};",n={className:"number",begin:"\\b"+k+"(L|u|U|Lu|LU|uL|UL)?",relevance:0},o={className:"number",begin:"\\b("+l+"([fF]|L|i|[fF]i|Li)?|"+k+"(i|[fF]i|Li))",relevance:0},p={className:"string",begin:"'("+m+"|.)",end:"'",illegal:"."},q={begin:m,relevance:0},r={className:"string",begin:'"',contains:[q],end:'"[cwd]?'},s={className:"string",begin:'[rq]"',end:'"[cwd]?',relevance:5},t={className:"string",begin:"`",end:"`[cwd]?"},u={className:"string",begin:'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',relevance:10},v={className:"string",begin:'q"\\{',end:'\\}"'},w={className:"shebang",begin:"^#!",end:"$",relevance:5},x={className:"preprocessor",begin:"#(line)",end:"$",relevance:5},y={className:"keyword",begin:"@[a-zA-Z_][a-zA-Z_\\d]*"},z=a.COMMENT("\\/\\+","\\+\\/",{contains:["self"],relevance:10});return{lexemes:a.UNDERSCORE_IDENT_RE,keywords:b,contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,z,u,r,s,t,v,o,n,p,w,x,y]}}),a.registerLanguage("markdown",function(a){return{aliases:["md","mkdown","mkd"],contains:[{className:"header",variants:[{begin:"^#{1,6}",end:"$"},{begin:"^.+?\\n[=-]{2,}$"}]},{begin:"<",end:">",subLanguage:"xml",relevance:0},{className:"bullet",begin:"^([*+-]|(\\d+\\.))\\s+"},{className:"strong",begin:"[*_]{2}.+?[*_]{2}"},{className:"emphasis",variants:[{begin:"\\*.+?\\*"},{begin:"_.+?_",relevance:0}]},{className:"blockquote",begin:"^>\\s+",end:"$"},{className:"code",variants:[{begin:"`.+?`"},{begin:"^( {4}|	)",end:"$",relevance:0}]},{className:"horizontal_rule",begin:"^[-\\*]{3,}",end:"$"},{begin:"\\[.+?\\][\\(\\[].*?[\\)\\]]",returnBegin:!0,contains:[{className:"link_label",begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0,relevance:0},{className:"link_url",begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"link_reference",begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}],relevance:10},{begin:"^\\[.+\\]:",returnBegin:!0,contains:[{className:"link_reference",begin:"\\[",end:"\\]:",excludeBegin:!0,excludeEnd:!0,starts:{className:"link_url",end:"$"}}]}]}}),a.registerLanguage("dart",function(a){var b={className:"subst",begin:"\\$\\{",end:"}",keywords:"true false null this is new super"},c={className:"string",variants:[{begin:"r'''",end:"'''"},{begin:'r"""',end:'"""'},{begin:"r'",end:"'",illegal:"\\n"},{
+begin:'r"',end:'"',illegal:"\\n"},{begin:"'''",end:"'''",contains:[a.BACKSLASH_ESCAPE,b]},{begin:'"""',end:'"""',contains:[a.BACKSLASH_ESCAPE,b]},{begin:"'",end:"'",illegal:"\\n",contains:[a.BACKSLASH_ESCAPE,b]},{begin:'"',end:'"',illegal:"\\n",contains:[a.BACKSLASH_ESCAPE,b]}]};b.contains=[a.C_NUMBER_MODE,c];var d={keyword:"assert break case catch class const continue default do else enum extends false final finally for if in is new null rethrow return super switch this throw true try var void while with",literal:"abstract as dynamic export external factory get implements import library operator part set static typedef",built_in:"print Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set Stopwatch String StringBuffer StringSink Symbol Type Uri bool double int num document window querySelector querySelectorAll Element ElementList"};return{keywords:d,contains:[c,a.COMMENT("/\\*\\*","\\*/",{subLanguage:"markdown"}),a.COMMENT("///","$",{subLanguage:"markdown"}),a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,contains:[{beginKeywords:"extends implements"},a.UNDERSCORE_TITLE_MODE]},a.C_NUMBER_MODE,{className:"annotation",begin:"@[A-Za-z]+"},{begin:"=>"}]}}),a.registerLanguage("delphi",function(a){var b="exports register file shl array record property for mod while set ally label uses raise not stored class safecall var interface or private static exit index inherited to else stdcall override shr asm far resourcestring finalization packed virtual out and protected library do xorwrite goto near function end div overload object unit begin string on inline repeat until destructor write message program with read initialization except default nil if case cdecl in downto threadvar of try pascal const external constructor type public then implementation finally published procedure",c=[a.C_LINE_COMMENT_MODE,a.COMMENT(/\{/,/\}/,{relevance:0}),a.COMMENT(/\(\*/,/\*\)/,{relevance:10})],d={className:"string",begin:/'/,end:/'/,contains:[{begin:/''/}]},e={className:"string",begin:/(#\d+)+/},f={begin:a.IDENT_RE+"\\s*=\\s*class\\s*\\(",returnBegin:!0,contains:[a.TITLE_MODE]},g={className:"function",beginKeywords:"function constructor destructor procedure",end:/[:;]/,keywords:"function constructor|10 destructor|10 procedure|10",contains:[a.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,keywords:b,contains:[d,e]}].concat(c)};return{case_insensitive:!0,keywords:b,illegal:/"|\$[G-Zg-z]|\/\*|<\/|\|/,contains:[d,e,a.NUMBER_MODE,f,g].concat(c)}}),a.registerLanguage("diff",function(a){return{aliases:["patch"],contains:[{className:"chunk",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"header",variants:[{begin:/Index: /,end:/$/},{begin:/=====/,end:/=====$/},{begin:/^\-\-\-/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+\+\+/,end:/$/},{begin:/\*{5}/,end:/\*{5}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"change",begin:"^\\!",end:"$"}]}}),a.registerLanguage("django",function(a){var b={className:"filter",begin:/\|[A-Za-z]+:?/,keywords:"truncatewords removetags linebreaksbr yesno get_digit timesince random striptags filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort dictsortreversed default_if_none pluralize lower join center default truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize localtime utc timezone",contains:[{className:"argument",begin:/"/,end:/"/},{className:"argument",begin:/'/,end:/'/}]};return{aliases:["jinja"],case_insensitive:!0,subLanguage:"xml",contains:[a.COMMENT(/\{%\s*comment\s*%}/,/\{%\s*endcomment\s*%}/),a.COMMENT(/\{#/,/#}/),{className:"template_tag",begin:/\{%/,end:/%}/,keywords:"comment endcomment load templatetag ifchanged endifchanged if endif firstof for endfor in ifnotequal endifnotequal widthratio extends include spaceless endspaceless regroup by as ifequal endifequal ssi now with cycle url filter endfilter debug block endblock else autoescape endautoescape csrf_token empty elif endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix plural get_current_language language get_available_languages get_current_language_bidi get_language_info get_language_info_list localize endlocalize localtime endlocaltime timezone endtimezone get_current_timezone verbatim",contains:[b]},{className:"variable",begin:/\{\{/,end:/}}/,contains:[b]}]}}),a.registerLanguage("dns",function(a){return{aliases:["bind","zone"],keywords:{keyword:"IN A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME DHCID DLV DNAME DNSKEY DS HIP IPSECKEY KEY KX LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RRSIG RP SIG SOA SRV SSHFP TA TKEY TLSA TSIG TXT"},contains:[a.COMMENT(";","$"),{className:"operator",beginKeywords:"$TTL $GENERATE $INCLUDE $ORIGIN"},{className:"number",begin:"((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))"},{className:"number",begin:"((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])"}]}}),a.registerLanguage("dockerfile",function(a){return{aliases:["docker"],case_insensitive:!0,keywords:{built_ins:"from maintainer cmd expose add copy entrypoint volume user workdir onbuild run env label"},contains:[a.HASH_COMMENT_MODE,{keywords:{built_in:"run cmd entrypoint volume add copy workdir onbuild label"},begin:/^ *(onbuild +)?(run|cmd|entrypoint|volume|add|copy|workdir|label) +/,starts:{end:/[^\\]\n/,subLanguage:"bash"}},{keywords:{built_in:"from maintainer expose env user onbuild"},begin:/^ *(onbuild +)?(from|maintainer|expose|env|user|onbuild) +/,end:/[^\\]\n/,contains:[a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.NUMBER_MODE,a.HASH_COMMENT_MODE]}]}}),a.registerLanguage("dos",function(a){var b=a.COMMENT(/@?rem\b/,/$/,{relevance:10}),c={className:"label",begin:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)",relevance:0};return{aliases:["bat","cmd"],case_insensitive:!0,illegal:/\/\*/,keywords:{flow:"if else goto for in do call exit not exist errorlevel defined",operator:"equ neq lss leq gtr geq",keyword:"shift cd dir echo setlocal endlocal set pause copy",stream:"prn nul lpt3 lpt2 lpt1 con com4 com3 com2 com1 aux",winutils:"ping net ipconfig taskkill xcopy ren del",built_in:"append assoc at attrib break cacls cd chcp chdir chkdsk chkntfs cls cmd color comp compact convert date dir diskcomp diskcopy doskey erase fs find findstr format ftype graftabl help keyb label md mkdir mode more move path pause print popd pushd promt rd recover rem rename replace restore rmdir shiftsort start subst time title tree type ver verify vol"},contains:[{className:"envvar",begin:/%%[^ ]|%[^ ]+?%|![^ ]+?!/},{className:"function",begin:c.begin,end:"goto:eof",contains:[a.inherit(a.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),b]},{className:"number",begin:"\\b\\d+",relevance:0},b]}}),a.registerLanguage("dust",function(a){var b="if eq ne lt lte gt gte select default math sep";return{aliases:["dst"],case_insensitive:!0,subLanguage:"xml",contains:[{className:"expression",begin:"{",end:"}",relevance:0,contains:[{className:"begin-block",begin:"#[a-zA-Z- .]+",keywords:b},{className:"string",begin:'"',end:'"'},{className:"end-block",begin:"\\/[a-zA-Z- .]+",keywords:b},{className:"variable",begin:"[a-zA-Z-.]+",keywords:b,relevance:0}]}]}}),a.registerLanguage("elixir",function(a){var b="[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?",c="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",d="and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote",e={className:"subst",begin:"#\\{",end:"}",lexemes:b,keywords:d},f={className:"string",contains:[a.BACKSLASH_ESCAPE,e],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/}]},g={className:"function",beginKeywords:"def defp defmacro",end:/\B\b/,contains:[a.inherit(a.TITLE_MODE,{begin:b,endsParent:!0})]},h=a.inherit(g,{className:"class",beginKeywords:"defmodule defrecord",end:/\bdo\b|$|;/}),i=[f,a.HASH_COMMENT_MODE,h,g,{className:"constant",begin:"(\\b[A-Z_]\\w*(.)?)+",relevance:0},{className:"symbol",begin:":",contains:[f,{begin:c}],relevance:0},{className:"symbol",begin:b+":",relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{className:"variable",begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{begin:"->"},{begin:"("+a.RE_STARTERS_RE+")\\s*",contains:[a.HASH_COMMENT_MODE,{className:"regexp",illegal:"\\n",contains:[a.BACKSLASH_ESCAPE,e],variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}],relevance:0}];return e.contains=i,{lexemes:b,keywords:d,contains:i}}),a.registerLanguage("elm",function(a){var b=[a.COMMENT("--","$"),a.COMMENT("{-","-}",{contains:["self"]})],c={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},d={className:"container",begin:"\\(",end:"\\)",illegal:'"',contains:[{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"}].concat(b)},e={className:"container",begin:"{",end:"}",contains:d.contains};return{keywords:"let in if then else case of where module import exposing type alias as infix infixl infixr port",contains:[{className:"module",begin:"\\bmodule\\b",end:"where",keywords:"module where",contains:[d].concat(b),illegal:"\\W\\.|;"},{className:"import",begin:"\\bimport\\b",end:"$",keywords:"import|0 as exposing",contains:[d].concat(b),illegal:"\\W\\.|;"},{className:"typedef",begin:"\\btype\\b",end:"$",keywords:"type alias",contains:[c,d,e].concat(b)},{className:"infix",beginKeywords:"infix infixl infixr",end:"$",contains:[a.C_NUMBER_MODE].concat(b)},{className:"foreign",begin:"\\bport\\b",end:"$",keywords:"port",contains:b},a.QUOTE_STRING_MODE,a.C_NUMBER_MODE,c,a.inherit(a.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),{begin:"->|<-"}].concat(b)}}),a.registerLanguage("ruby",function(a){var b="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",c="and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",d={className:"doctag",begin:"@[A-Za-z]+"},e={className:"value",begin:"#<",end:">"},f=[a.COMMENT("#","$",{contains:[d]}),a.COMMENT("^\\=begin","^\\=end",{contains:[d],relevance:10}),a.COMMENT("^__END__","\\n$")],g={className:"subst",begin:"#\\{",end:"}",keywords:c},h={className:"string",contains:[a.BACKSLASH_ESCAPE,g],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:"%[qQwWx]?\\(",end:"\\)"},{begin:"%[qQwWx]?\\[",end:"\\]"},{begin:"%[qQwWx]?{",end:"}"},{begin:"%[qQwWx]?<",end:">"},{begin:"%[qQwWx]?/",end:"/"},{begin:"%[qQwWx]?%",end:"%"},{begin:"%[qQwWx]?-",end:"-"},{begin:"%[qQwWx]?\\|",end:"\\|"},{begin:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/}]},i={className:"params",begin:"\\(",end:"\\)",keywords:c},j=[h,e,{className:"class",beginKeywords:"class module",end:"$|;",illegal:/=/,contains:[a.inherit(a.TITLE_MODE,{begin:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{className:"inheritance",begin:"<\\s*",contains:[{className:"parent",begin:"("+a.IDENT_RE+"::)?"+a.IDENT_RE}]}].concat(f)},{className:"function",beginKeywords:"def",end:"$|;",contains:[a.inherit(a.TITLE_MODE,{begin:b}),i].concat(f)},{className:"constant",begin:"(::)?(\\b[A-Z]\\w*(::)?)+",relevance:0},{className:"symbol",begin:a.UNDERSCORE_IDENT_RE+"(\\!|\\?)?:",relevance:0},{className:"symbol",begin:":",contains:[h,{begin:b}],relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{className:"variable",begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{begin:"("+a.RE_STARTERS_RE+")\\s*",contains:[e,{className:"regexp",contains:[a.BACKSLASH_ESCAPE,g],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r{",end:"}[a-z]*"},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(f),relevance:0}].concat(f);g.contains=j,i.contains=j;var k="[>?]>",l="[\\w#]+\\(\\w+\\):\\d+:\\d+>",m="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",n=[{begin:/^\s*=>/,className:"status",starts:{end:"$",contains:j}},{className:"prompt",begin:"^("+k+"|"+l+"|"+m+")",starts:{end:"$",contains:j}}];return{aliases:["rb","gemspec","podspec","thor","irb"],keywords:c,illegal:/\/\*/,contains:f.concat(n).concat(j)}}),a.registerLanguage("erb",function(a){return{subLanguage:"xml",contains:[a.COMMENT("<%#","%>"),{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0}]}}),a.registerLanguage("erlang-repl",function(a){return{keywords:{special_functions:"spawn spawn_link self",reserved:"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor"},contains:[{className:"prompt",begin:"^[0-9]+> ",relevance:10},a.COMMENT("%","$"),{className:"number",begin:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,{className:"constant",begin:"\\?(::)?([A-Z]\\w*(::)?)+"},{className:"arrow",begin:"->"},{className:"ok",begin:"ok"},{className:"exclamation_mark",begin:"!"},{className:"function_or_atom",begin:"(\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\b[a-z'][a-zA-Z0-9_']*)",relevance:0},{className:"variable",begin:"[A-Z][a-zA-Z0-9_']*",relevance:0}]}}),a.registerLanguage("erlang",function(a){var b="[a-z'][a-zA-Z0-9_']*",c="("+b+":"+b+"|"+b+")",d={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},e=a.COMMENT("%","$"),f={className:"number",begin:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},g={begin:"fun\\s+"+b+"/\\d+"},h={begin:c+"\\(",end:"\\)",returnBegin:!0,relevance:0,contains:[{className:"function_name",begin:c,relevance:0},{begin:"\\(",end:"\\)",endsWithParent:!0,returnEnd:!0,relevance:0}]},i={className:"tuple",begin:"{",end:"}",relevance:0},j={className:"variable",begin:"\\b_([A-Z][A-Za-z0-9_]*)?",relevance:0},k={className:"variable",begin:"[A-Z][a-zA-Z0-9_]*",relevance:0},l={begin:"#"+a.UNDERSCORE_IDENT_RE,relevance:0,returnBegin:!0,contains:[{className:"record_name",begin:"#"+a.UNDERSCORE_IDENT_RE,relevance:0},{begin:"{",end:"}",relevance:0}]},m={beginKeywords:"fun receive if try case",end:"end",keywords:d};m.contains=[e,g,a.inherit(a.APOS_STRING_MODE,{className:""}),m,h,a.QUOTE_STRING_MODE,f,i,j,k,l];var n=[e,g,m,h,a.QUOTE_STRING_MODE,f,i,j,k,l];h.contains[1].contains=n,i.contains=n,l.contains[1].contains=n;var o={className:"params",begin:"\\(",end:"\\)",contains:n};return{aliases:["erl"],keywords:d,illegal:"(</|\\*=|\\+=|-=|/\\*|\\*/|\\(\\*|\\*\\))",contains:[{className:"function",begin:"^"+b+"\\s*\\(",end:"->",returnBegin:!0,illegal:"\\(|#|//|/\\*|\\\\|:|;",contains:[o,a.inherit(a.TITLE_MODE,{begin:b})],starts:{end:";|\\.",keywords:d,contains:n}},e,{className:"pp",begin:"^-",end:"\\.",relevance:0,excludeEnd:!0,returnBegin:!0,lexemes:"-"+a.IDENT_RE,keywords:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",contains:[o]},f,a.QUOTE_STRING_MODE,l,j,k,i,{begin:/\.$/}]}}),a.registerLanguage("fix",function(a){return{contains:[{begin:/[^\u2401\u0001]+/,end:/[\u2401\u0001]/,excludeEnd:!0,returnBegin:!0,returnEnd:!1,contains:[{begin:/([^\u2401\u0001=]+)/,end:/=([^\u2401\u0001=]+)/,returnEnd:!0,returnBegin:!1,className:"attribute"},{begin:/=/,end:/([\u2401\u0001])/,excludeEnd:!0,excludeBegin:!0,className:"string"}]}],case_insensitive:!0}}),a.registerLanguage("fortran",function(a){var b={className:"params",begin:"\\(",end:"\\)"},c={constant:".False. .True.",type:"integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated  c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image"};return{case_insensitive:!0,aliases:["f90","f95"],keywords:c,illegal:/\/\*/,contains:[a.inherit(a.APOS_STRING_MODE,{className:"string",relevance:0}),a.inherit(a.QUOTE_STRING_MODE,{className:"string",relevance:0}),{className:"function",beginKeywords:"subroutine function program",illegal:"[${=\\n]",contains:[a.UNDERSCORE_TITLE_MODE,b]},a.COMMENT("!","$",{relevance:0}),{className:"number",begin:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",relevance:0}]}}),a.registerLanguage("fsharp",function(a){var b={begin:"<",end:">",contains:[a.inherit(a.TITLE_MODE,{begin:/'[a-zA-Z0-9_]+/})]};return{aliases:["fs"],keywords:"abstract and as assert base begin class default delegate do done downcast downto elif else end exception extern false finally for fun function global if in inherit inline interface internal lazy let match member module mutable namespace new null of open or override private public rec return sig static struct then to true try type upcast use val void when while with yield",illegal:/\/\*/,contains:[{className:"keyword",begin:/\b(yield|return|let|do)!/},{className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},{className:"string",begin:'"""',end:'"""'},a.COMMENT("\\(\\*","\\*\\)"),{className:"class",beginKeywords:"type",end:"\\(|=|$",excludeEnd:!0,contains:[a.UNDERSCORE_TITLE_MODE,b]},{className:"annotation",begin:"\\[<",end:">\\]",relevance:10},{className:"attribute",begin:"\\B('[A-Za-z])\\b",contains:[a.BACKSLASH_ESCAPE]},a.C_LINE_COMMENT_MODE,a.inherit(a.QUOTE_STRING_MODE,{illegal:null}),a.C_NUMBER_MODE]}}),a.registerLanguage("gams",function(a){var b="abort acronym acronyms alias all and assign binary card diag display else1 eps eq equation equations file files for1 free ge gt if inf integer le loop lt maximizing minimizing model models na ne negative no not option options or ord parameter parameters positive prod putpage puttl repeat sameas scalar scalars semicont semiint set1 sets smax smin solve sos1 sos2 sum system table then until using variable variables while1 xor yes";return{aliases:["gms"],case_insensitive:!0,keywords:b,contains:[{className:"section",beginKeywords:"sets parameters variables equations",end:";",contains:[{begin:"/",end:"/",contains:[a.NUMBER_MODE]}]},{className:"string",begin:"\\*{3}",end:"\\*{3}"},a.NUMBER_MODE,{className:"number",begin:"\\$[a-zA-Z0-9]+"}]}}),a.registerLanguage("gcode",function(a){var b="[A-Z_][A-Z0-9_.]*",c="\\%",d={literal:"",built_in:"",keyword:"IF DO WHILE ENDWHILE CALL ENDIF SUB ENDSUB GOTO REPEAT ENDREPEAT EQ LT GT NE GE LE OR XOR"},e={className:"preprocessor",begin:"([O])([0-9]+)"},f=[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.COMMENT(/\(/,/\)/),a.inherit(a.C_NUMBER_MODE,{begin:"([-+]?([0-9]*\\.?[0-9]+\\.?))|"+a.C_NUMBER_RE}),a.inherit(a.APOS_STRING_MODE,{illegal:null}),a.inherit(a.QUOTE_STRING_MODE,{illegal:null}),{className:"keyword",begin:"([G])([0-9]+\\.?[0-9]?)"},{className:"title",begin:"([M])([0-9]+\\.?[0-9]?)"},{className:"title",begin:"(VC|VS|#)",end:"(\\d+)"},{className:"title",begin:"(VZOFX|VZOFY|VZOFZ)"},{className:"built_in",begin:"(ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN)(\\[)",end:"([-+]?([0-9]*\\.?[0-9]+\\.?))(\\])"},{className:"label",variants:[{begin:"N",end:"\\d+",illegal:"\\W"}]}];return{aliases:["nc"],case_insensitive:!0,lexemes:b,keywords:d,contains:[{className:"preprocessor",begin:c},e].concat(f)}}),a.registerLanguage("gherkin",function(a){return{aliases:["feature"],keywords:"Feature Background Ability Business Need Scenario Scenarios Scenario Outline Scenario Template Examples Given And Then But When",contains:[{className:"keyword",begin:"\\*"},a.COMMENT("@[^@\r\n	 ]+","$"),{begin:"\\|",end:"\\|\\w*$",contains:[{className:"string",begin:"[^|]+"}]},{className:"variable",begin:"<",end:">"},a.HASH_COMMENT_MODE,{className:"string",begin:'"""',end:'"""'},a.QUOTE_STRING_MODE]}}),a.registerLanguage("glsl",function(a){return{keywords:{keyword:"atomic_uint attribute bool break bvec2 bvec3 bvec4 case centroid coherent const continue default discard dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 dmat3x4 dmat4 dmat4x2 dmat4x3 dmat4x4 do double dvec2 dvec3 dvec4 else flat float for highp if iimage1D iimage1DArray iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBuffer iimageCube iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray image2DRect image3D imageBuffer imageCube imageCubeArray in inout int invariant isampler1D isampler1DArray isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D isamplerBuffer isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 layout lowp mat2 mat2x2 mat2x3 mat2x4 mat3 mat3x2 mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 mediump noperspective out patch precision readonly restrict return sample sampler1D sampler1DArray sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray sampler2DArrayShadow sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow sampler3D samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow smooth struct subroutine switch uimage1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray uimage2DRect uimage3D uimageBuffer uimageCube uimageCubeArray uint uniform usampler1D usampler1DArray usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D usamplerBuffer usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 varying vec2 vec3 vec4 void volatile while writeonly",built_in:"gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial gl_FrontSecondaryColor gl_InstanceID gl_InvocationID gl_Layer gl_LightModel gl_LightSource gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize gl_MaxClipDistances gl_MaxClipPlanes gl_MaxCombinedAtomicCounterBuffers gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms gl_MaxCombinedImageUnitsAndFragmentOutputs gl_MaxCombinedTextureImageUnits gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers gl_MaxFragmentAtomicCounters gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs gl_MaxVertexImageUniforms gl_MaxVertexOutputComponents gl_MaxVertexTextureImageUnits gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffsetgl_ModelViewMatrix gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose gl_ModelViewMatrixTranspose gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse gl_ModelViewProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixTranspose gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_Normal gl_NormalMatrix gl_NormalScale gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn gl_PerVertex gl_Point gl_PointCoord gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn gl_ProjectionMatrix gl_ProjectionMatrixInverse gl_ProjectionMatrixInverseTranspose gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask gl_SampleMaskIn gl_SamplePosition gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_TexCoord gl_TextureEnvColor gl_TextureMatrixInverseTranspose gl_TextureMatrixTranspose gl_Vertex gl_VertexID gl_ViewportIndex gl_in gl_out EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive abs acos acosh all any asin asinh atan atanh atomicCounter atomicCounterDecrement atomicCounterIncrement barrier bitCount bitfieldExtract bitfieldInsert bitfieldReverse ceil clamp cos cosh cross dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward findLSB findMSB floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan greaterThanEqual imageAtomicAdd imageAtomicAnd imageAtomicCompSwap imageAtomicExchange imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad imageStore imulExtended intBitsToFloat interpolateAtCentroid interpolateAtOffset interpolateAtSample inverse inversesqrt isinf isnan ldexp length lessThan lessThanEqual log log2 matrixCompMult max memoryBarrier min mix mod modf noise1 noise2 noise3 noise4 normalize not notEqual outerProduct packDouble2x32 packHalf2x16 packSnorm2x16 packSnorm4x8 packUnorm2x16 packUnorm4x8 pow radians reflect refract round roundEven shadow1D shadow1DLod shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj shadow2DProjLod sign sin sinh smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture texture1D texture1DLod texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj texture2DProjLod texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset textureLod textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset textureProjLod textureProjLodOffset textureProjOffset textureQueryLod textureSize transpose trunc uaddCarry uintBitsToFloat umulExtended unpackDouble2x32 unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 unpackUnorm2x16 unpackUnorm4x8 usubBorrow gl_TextureMatrix gl_TextureMatrixInverse",literal:"true false"},illegal:'"',contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.C_NUMBER_MODE,{className:"preprocessor",begin:"#",end:"$"}]}}),a.registerLanguage("go",function(a){var b={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer",
+constant:"true false iota nil",typename:"bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],keywords:b,illegal:"</",contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'"},{className:"string",begin:"`",end:"`"},{className:"number",begin:a.C_NUMBER_RE+"[dflsi]?",relevance:0},a.C_NUMBER_MODE]}}),a.registerLanguage("golo",function(a){return{keywords:{keyword:"println readln print import module function local return let var while for foreach times in case when match with break continue augment augmentation each find filter reduce if then else otherwise try catch finally raise throw orIfNull",typename:"DynamicObject|10 DynamicVariable struct Observable map set vector list array",literal:"true false null"},contains:[a.HASH_COMMENT_MODE,a.QUOTE_STRING_MODE,a.C_NUMBER_MODE,{className:"annotation",begin:"@[A-Za-z]+"}]}}),a.registerLanguage("gradle",function(a){return{case_insensitive:!0,keywords:{keyword:"task project allprojects subprojects artifacts buildscript configurations dependencies repositories sourceSets description delete from into include exclude source classpath destinationDir includes options sourceCompatibility targetCompatibility group flatDir doLast doFirst flatten todir fromdir ant def abstract break case catch continue default do else extends final finally for if implements instanceof native new private protected public return static switch synchronized throw throws transient try volatile while strictfp package import false null super this true antlrtask checkstyle codenarc copy boolean byte char class double float int interface long short void compile runTime file fileTree abs any append asList asWritable call collect compareTo count div dump each eachByte eachFile eachLine every find findAll flatten getAt getErr getIn getOut getText grep immutable inject inspect intersect invokeMethods isCase join leftShift minus multiply newInputStream newOutputStream newPrintWriter newReader newWriter next plus pop power previous print println push putAt read readBytes readLines reverse reverseEach round size sort splitEachLine step subMap times toInteger toList tokenize upto waitForOrKill withPrintWriter withReader withStream withWriter withWriterAppend write writeLine"},contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.NUMBER_MODE,a.REGEXP_MODE]}}),a.registerLanguage("groovy",function(a){return{keywords:{typename:"byte short char int long boolean float double void",literal:"true false null",keyword:"def as in assert trait super this abstract static volatile transient public private protected synchronized final class interface enum if else for while switch case break default continue throw throws try catch finally implements extends new import package return instanceof"},contains:[a.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,{className:"string",begin:'"""',end:'"""'},{className:"string",begin:"'''",end:"'''"},{className:"string",begin:"\\$/",end:"/\\$",relevance:10},a.APOS_STRING_MODE,{className:"regexp",begin:/~?\/[^\/\n]+\//,contains:[a.BACKSLASH_ESCAPE]},a.QUOTE_STRING_MODE,{className:"shebang",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},a.BINARY_NUMBER_MODE,{className:"class",beginKeywords:"class interface trait enum",end:"{",illegal:":",contains:[{beginKeywords:"extends implements"},a.UNDERSCORE_TITLE_MODE]},a.C_NUMBER_MODE,{className:"annotation",begin:"@[A-Za-z]+"},{className:"string",begin:/[^\?]{0}[A-Za-z0-9_$]+ *:/},{begin:/\?/,end:/\:/},{className:"label",begin:"^\\s*[A-Za-z0-9_$]+:",relevance:0}],illegal:/#/}}),a.registerLanguage("haml",function(a){return{case_insensitive:!0,contains:[{className:"doctype",begin:"^!!!( (5|1\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\b.*))?$",relevance:10},a.COMMENT("^\\s*(!=#|=#|-#|/).*$",!1,{relevance:0}),{begin:"^\\s*(-|=|!=)(?!#)",starts:{end:"\\n",subLanguage:"ruby"}},{className:"tag",begin:"^\\s*%",contains:[{className:"title",begin:"\\w+"},{className:"value",begin:"[#\\.][\\w-]+"},{begin:"{\\s*",end:"\\s*}",excludeEnd:!0,contains:[{begin:":\\w+\\s*=>",end:",\\s+",returnBegin:!0,endsWithParent:!0,contains:[{className:"symbol",begin:":\\w+"},a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,{begin:"\\w+",relevance:0}]}]},{begin:"\\(\\s*",end:"\\s*\\)",excludeEnd:!0,contains:[{begin:"\\w+\\s*=",end:"\\s+",returnBegin:!0,endsWithParent:!0,contains:[{className:"attribute",begin:"\\w+",relevance:0},a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,{begin:"\\w+",relevance:0}]}]}]},{className:"bullet",begin:"^\\s*[=~]\\s*",relevance:0},{begin:"#{",starts:{end:"}",subLanguage:"ruby"}}]}}),a.registerLanguage("handlebars",function(a){var b="each in with if else unless bindattr action collection debugger log outlet template unbound view yield";return{aliases:["hbs","html.hbs","html.handlebars"],case_insensitive:!0,subLanguage:"xml",contains:[{className:"expression",begin:"{{",end:"}}",contains:[{className:"begin-block",begin:"#[a-zA-Z- .]+",keywords:b},{className:"string",begin:'"',end:'"'},{className:"end-block",begin:"\\/[a-zA-Z- .]+",keywords:b},{className:"variable",begin:"[a-zA-Z-.]+",keywords:b}]}]}}),a.registerLanguage("haskell",function(a){var b=[a.COMMENT("--","$"),a.COMMENT("{-","-}",{contains:["self"]})],c={className:"pragma",begin:"{-#",end:"#-}"},d={className:"preprocessor",begin:"^#",end:"$"},e={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},f={className:"container",begin:"\\(",end:"\\)",illegal:'"',contains:[c,d,{className:"type",begin:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},a.inherit(a.TITLE_MODE,{begin:"[_a-z][\\w']*"})].concat(b)},g={className:"container",begin:"{",end:"}",contains:f.contains};return{aliases:["hs"],keywords:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",contains:[{className:"module",begin:"\\bmodule\\b",end:"where",keywords:"module where",contains:[f].concat(b),illegal:"\\W\\.|;"},{className:"import",begin:"\\bimport\\b",end:"$",keywords:"import|0 qualified as hiding",contains:[f].concat(b),illegal:"\\W\\.|;"},{className:"class",begin:"^(\\s*)?(class|instance)\\b",end:"where",keywords:"class family instance where",contains:[e,f].concat(b)},{className:"typedef",begin:"\\b(data|(new)?type)\\b",end:"$",keywords:"data family type newtype deriving",contains:[c,e,f,g].concat(b)},{className:"default",beginKeywords:"default",end:"$",contains:[e,f].concat(b)},{className:"infix",beginKeywords:"infix infixl infixr",end:"$",contains:[a.C_NUMBER_MODE].concat(b)},{className:"foreign",begin:"\\bforeign\\b",end:"$",keywords:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",contains:[e,a.QUOTE_STRING_MODE].concat(b)},{className:"shebang",begin:"#!\\/usr\\/bin\\/env runhaskell",end:"$"},c,d,a.QUOTE_STRING_MODE,a.C_NUMBER_MODE,e,a.inherit(a.TITLE_MODE,{begin:"^[_a-z][\\w']*"}),{begin:"->|<-"}].concat(b)}}),a.registerLanguage("haxe",function(a){var b="([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)";return{aliases:["hx"],keywords:{keyword:"break callback case cast catch class continue default do dynamic else enum extends extern for function here if implements import in inline interface never new override package private public return static super switch this throw trace try typedef untyped using var while",literal:"true false null"},contains:[a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.C_NUMBER_MODE,{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,contains:[{beginKeywords:"extends implements"},a.TITLE_MODE]},{className:"preprocessor",begin:"#",end:"$",keywords:"if else elseif end error"},{className:"function",beginKeywords:"function",end:"[{;]",excludeEnd:!0,illegal:"\\S",contains:[a.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:[a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE]},{className:"type",begin:":",end:b,relevance:10}]}]}}),a.registerLanguage("http",function(a){return{aliases:["https"],illegal:"\\S",contains:[{className:"status",begin:"^HTTP/[0-9\\.]+",end:"$",contains:[{className:"number",begin:"\\b\\d{3}\\b"}]},{className:"request",begin:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",returnBegin:!0,end:"$",contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0}]},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,illegal:"\\n|\\s|=",starts:{className:"string",end:"$"}},{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}]}}),a.registerLanguage("inform7",function(a){var b="\\[",c="\\]";return{aliases:["i7"],case_insensitive:!0,keywords:{keyword:"thing room person man woman animal container supporter backdrop door scenery open closed locked inside gender is are say understand kind of rule"},contains:[{className:"string",begin:'"',end:'"',relevance:0,contains:[{className:"subst",begin:b,end:c}]},{className:"title",begin:/^(Volume|Book|Part|Chapter|Section|Table)\b/,end:"$"},{begin:/^(Check|Carry out|Report|Instead of|To|Rule|When|Before|After)\b/,end:":",contains:[{begin:"\\b\\(This",end:"\\)"}]},{className:"comment",begin:b,end:c,contains:["self"]}]}}),a.registerLanguage("ini",function(a){var b={className:"string",contains:[a.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]};return{aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[a.COMMENT(";","$"),a.HASH_COMMENT_MODE,{className:"title",begin:/^\s*\[+/,end:/\]+/},{className:"setting",begin:/^[a-z0-9\[\]_-]+\s*=\s*/,end:"$",contains:[{className:"value",endsWithParent:!0,keywords:"on off true false yes no",contains:[{className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)}/}]},b,{className:"number",begin:/([\+\-]+)?[\d]+_[\d_]+/},a.NUMBER_MODE],relevance:0}]}]}}),a.registerLanguage("irpf90",function(a){var b={className:"params",begin:"\\(",end:"\\)"},c={constant:".False. .True.",type:"integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data",keyword:"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated  c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure begin_provider &begin_provider end_provider begin_shell end_shell begin_template end_template subst assert touch soft_touch provide no_dep free irp_if irp_else irp_endif irp_write irp_read",built_in:"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image IRP_ALIGN irp_here"};return{case_insensitive:!0,keywords:c,illegal:/\/\*/,contains:[a.inherit(a.APOS_STRING_MODE,{className:"string",relevance:0}),a.inherit(a.QUOTE_STRING_MODE,{className:"string",relevance:0}),{className:"function",beginKeywords:"subroutine function program",illegal:"[${=\\n]",contains:[a.UNDERSCORE_TITLE_MODE,b]},a.COMMENT("!","$",{relevance:0}),a.COMMENT("begin_doc","end_doc",{relevance:10}),{className:"number",begin:"(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?",relevance:0}]}}),a.registerLanguage("java",function(a){var b=a.UNDERSCORE_IDENT_RE+"(<"+a.UNDERSCORE_IDENT_RE+">)?",c="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private",d="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",e={className:"number",begin:d,relevance:0};return{aliases:["jsp"],keywords:c,illegal:/<\/|#/,contains:[a.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},a.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"("+b+"\\s+)+"+a.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:c,contains:[{begin:a.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[a.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:c,relevance:0,contains:[a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.C_NUMBER_MODE,a.C_BLOCK_COMMENT_MODE]},a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE]},e,{className:"annotation",begin:"@[A-Za-z]+"}]}}),a.registerLanguage("javascript",function(a){return{aliases:["js"],keywords:{keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},contains:[{className:"pi",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,{className:"string",begin:"`",end:"`",contains:[a.BACKSLASH_ESCAPE,{className:"subst",begin:"\\$\\{",end:"\\}"}]},a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,{className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{begin:"\\b(0[oO][0-7]+)"},{begin:a.C_NUMBER_RE}],relevance:0},{begin:"("+a.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.REGEXP_MODE,{begin:/</,end:/>\s*[);\]]/,relevance:0,subLanguage:"xml"}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[a.inherit(a.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE]}],illegal:/\[|%/},{begin:/\$[(.]/},{begin:"\\."+a.IDENT_RE,relevance:0},{beginKeywords:"import",end:"[;$]",keywords:"import from as",contains:[a.APOS_STRING_MODE,a.QUOTE_STRING_MODE]},{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},a.UNDERSCORE_TITLE_MODE]}],illegal:/#/}}),a.registerLanguage("json",function(a){var b={literal:"true false null"},c=[a.QUOTE_STRING_MODE,a.C_NUMBER_MODE],d={className:"value",end:",",endsWithParent:!0,excludeEnd:!0,contains:c,keywords:b},e={begin:"{",end:"}",contains:[{className:"attribute",begin:'\\s*"',end:'"\\s*:\\s*',excludeBegin:!0,excludeEnd:!0,contains:[a.BACKSLASH_ESCAPE],illegal:"\\n",starts:d}],illegal:"\\S"},f={begin:"\\[",end:"\\]",contains:[a.inherit(d,{className:null})],illegal:"\\S"};return c.splice(c.length,0,e,f),{contains:c,keywords:b,illegal:"\\S"}}),a.registerLanguage("julia",function(a){var b={keyword:"in abstract baremodule begin bitstype break catch ccall const continue do else elseif end export finally for function global if immutable import importall let local macro module quote return try type typealias using while",literal:"true false ANY ARGS CPU_CORES C_NULL DL_LOAD_PATH DevNull ENDIAN_BOM ENV I|0 Inf Inf16 Inf32 InsertionSort JULIA_HOME LOAD_PATH MS_ASYNC MS_INVALIDATE MS_SYNC MergeSort NaN NaN16 NaN32 OS_NAME QuickSort RTLD_DEEPBIND RTLD_FIRST RTLD_GLOBAL RTLD_LAZY RTLD_LOCAL RTLD_NODELETE RTLD_NOLOAD RTLD_NOW RoundDown RoundFromZero RoundNearest RoundToZero RoundUp STDERR STDIN STDOUT VERSION WORD_SIZE catalan cglobal e|0 eu|0 eulergamma golden im nothing pi γ π φ",built_in:"ASCIIString AbstractArray AbstractRNG AbstractSparseArray Any ArgumentError Array Associative Base64Pipe Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError Box CFILE Cchar Cdouble Cfloat Char CharString Cint Clong Clonglong ClusterManager Cmd Coff_t Colon Complex Complex128 Complex32 Complex64 Condition Cptrdiff_t Cshort Csize_t Cssize_t Cuchar Cuint Culong Culonglong Cushort Cwchar_t DArray DataType DenseArray Diagonal Dict DimensionMismatch DirectIndexString Display DivideError DomainError EOFError EachLine Enumerate ErrorException Exception Expr Factorization FileMonitor FileOffset Filter Float16 Float32 Float64 FloatRange FloatingPoint Function GetfieldNode GotoNode Hermitian IO IOBuffer IOStream IPv4 IPv6 InexactError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException IntrinsicFunction KeyError LabelNode LambdaStaticData LineNumberNode LoadError LocalProcess MIME MathConst MemoryError MersenneTwister Method MethodError MethodTable Module NTuple NewvarNode Nothing Number ObjectIdDict OrdinalRange OverflowError ParseError PollingFileWatcher ProcessExitedException ProcessGroup Ptr QuoteNode Range Range1 Ranges Rational RawFD Real Regex RegexMatch RemoteRef RepString RevString RopeString RoundingMode Set SharedArray Signed SparseMatrixCSC StackOverflowError Stat StatStruct StepRange String SubArray SubString SymTridiagonal Symbol SymbolNode Symmetric SystemError Task TextDisplay Timer TmStruct TopNode Triangular Tridiagonal Type TypeConstructor TypeError TypeName TypeVar UTF16String UTF32String UTF8String UdpSocket Uint Uint128 Uint16 Uint32 Uint64 Uint8 UndefRefError UndefVarError UniformScaling UnionType UnitRange Unsigned Vararg VersionNumber WString WeakKeyDict WeakRef Woodbury Zip"},c="[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*",d={lexemes:c,keywords:b},e={className:"type-annotation",begin:/::/},f={className:"subtype",begin:/<:/},g={className:"number",begin:/(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,relevance:0},h={className:"char",begin:/'(.|\\[xXuU][a-zA-Z0-9]+)'/},i={className:"subst",begin:/\$\(/,end:/\)/,keywords:b},j={className:"variable",begin:"\\$"+c},k={className:"string",contains:[a.BACKSLASH_ESCAPE,i,j],variants:[{begin:/\w*"/,end:/"\w*/},{begin:/\w*"""/,end:/"""\w*/}]},l={className:"string",contains:[a.BACKSLASH_ESCAPE,i,j],begin:"`",end:"`"},m={className:"macrocall",begin:"@"+c},n={className:"comment",variants:[{begin:"#=",end:"=#",relevance:10},{begin:"#",end:"$"}]};return d.contains=[g,h,e,f,k,l,m,n,a.HASH_COMMENT_MODE],i.contains=d.contains,d}),a.registerLanguage("kotlin",function(a){var b="val var get set class trait object public open private protected final enum if else do while for when break continue throw try catch finally import package is as in return fun override default companion reified inline volatile transient native";return{keywords:{typename:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null",keyword:b},contains:[a.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,{className:"type",begin:/</,end:/>/,returnBegin:!0,excludeEnd:!1,relevance:0},{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:b,illegal:/fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,relevance:5,contains:[{begin:a.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[a.UNDERSCORE_TITLE_MODE]},{className:"type",begin:/</,end:/>/,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:b,relevance:0,illegal:/\([^\(,\s:]+,/,contains:[{className:"typename",begin:/:\s*/,end:/\s*[=\)]/,excludeBegin:!0,returnEnd:!0,relevance:0}]},a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE]},{className:"class",beginKeywords:"class trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[a.UNDERSCORE_TITLE_MODE,{className:"type",begin:/</,end:/>/,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"typename",begin:/[,:]\s*/,end:/[<\(,]|$/,excludeBegin:!0,returnEnd:!0}]},{className:"variable",beginKeywords:"var val",end:/\s*[=:$]/,excludeEnd:!0},a.QUOTE_STRING_MODE,{className:"shebang",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},a.C_NUMBER_MODE]}}),a.registerLanguage("lasso",function(a){var b="[a-zA-Z_][a-zA-Z0-9_.]*",c="<\\?(lasso(script)?|=)",d="\\]|\\?>",e={literal:"true false none minimal full all void bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft",built_in:"array date decimal duration integer map pair string tag xml null boolean bytes keyword list locale queue set stack staticarray local var variable global data self inherited currentcapture givenblock",keyword:"error_code error_msg error_pop error_push error_reset cache database_names database_schemanames database_tablenames define_tag define_type email_batch encode_set html_comment handle handle_error header if inline iterate ljax_target link link_currentaction link_currentgroup link_currentrecord link_detail link_firstgroup link_firstrecord link_lastgroup link_lastrecord link_nextgroup link_nextrecord link_prevgroup link_prevrecord log loop namespace_using output_none portal private protect records referer referrer repeating resultset rows search_args search_arguments select sort_args sort_arguments thread_atomic value_list while abort case else if_empty if_false if_null if_true loop_abort loop_continue loop_count params params_up return return_value run_children soap_definetag soap_lastrequest soap_lastresponse tag_name ascending average by define descending do equals frozen group handle_failure import in into join let match max min on order parent protected provide public require returnhome skip split_thread sum take thread to trait type where with yield yieldhome"},f=a.COMMENT("<!--","-->",{relevance:0}),g={className:"preprocessor",begin:"\\[noprocess\\]",starts:{className:"markup",end:"\\[/noprocess\\]",returnEnd:!0,contains:[f]}},h={className:"preprocessor",begin:"\\[/noprocess|"+c},i={className:"variable",begin:"'"+b+"'"},j=[a.COMMENT("/\\*\\*!","\\*/"),a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.inherit(a.C_NUMBER_MODE,{begin:a.C_NUMBER_RE+"|(infinity|nan)\\b"}),a.inherit(a.APOS_STRING_MODE,{illegal:null}),a.inherit(a.QUOTE_STRING_MODE,{illegal:null}),{className:"string",begin:"`",end:"`"},{className:"variable",variants:[{begin:"[#$]"+b},{begin:"#",end:"\\d+",illegal:"\\W"}]},{className:"tag",begin:"::\\s*",end:b,illegal:"\\W"},{className:"attribute",variants:[{begin:"-(?!infinity)"+a.UNDERSCORE_IDENT_RE,relevance:0},{begin:"(\\.\\.\\.)"}]},{className:"subst",variants:[{begin:"->\\s*",contains:[i]},{begin:"->|\\\\|&&?|\\|\\||!(?!=|>)|(and|or|not)\\b",relevance:0}]},{className:"built_in",begin:"\\.\\.?\\s*",relevance:0,contains:[i]},{className:"class",beginKeywords:"define",returnEnd:!0,end:"\\(|=>",contains:[a.inherit(a.TITLE_MODE,{begin:a.UNDERSCORE_IDENT_RE+"(=(?!>))?"})]}];return{aliases:["ls","lassoscript"],case_insensitive:!0,lexemes:b+"|&[lg]t;",keywords:e,contains:[{className:"preprocessor",begin:d,relevance:0,starts:{className:"markup",end:"\\[|"+c,returnEnd:!0,relevance:0,contains:[f]}},g,h,{className:"preprocessor",begin:"\\[no_square_brackets",starts:{end:"\\[/no_square_brackets\\]",lexemes:b+"|&[lg]t;",keywords:e,contains:[{className:"preprocessor",begin:d,relevance:0,starts:{className:"markup",end:"\\[noprocess\\]|"+c,returnEnd:!0,contains:[f]}},g,h].concat(j)}},{className:"preprocessor",begin:"\\[",relevance:0},{className:"shebang",begin:"^#!.+lasso9\\b",relevance:10}].concat(j)}}),a.registerLanguage("less",function(a){var b="[\\w-]+",c="("+b+"|@{"+b+"})",d=[],e=[],f=function(a){return{className:"string",begin:"~?"+a+".*?"+a}},g=function(a,b,c){return{className:a,begin:b,relevance:c}},h=function(b,c,d){return a.inherit({className:b,begin:c+"\\(",end:"\\(",returnBegin:!0,excludeEnd:!0,relevance:0},d)},i={begin:"\\(",end:"\\)",contains:e,relevance:0};e.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,f("'"),f('"'),a.CSS_NUMBER_MODE,g("hexcolor","#[0-9A-Fa-f]+\\b"),h("function","(url|data-uri)",{starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}}),h("function",b),i,g("variable","@@?"+b,10),g("variable","@{"+b+"}"),g("built_in","~?`[^`]*?`"),{className:"attribute",begin:b+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0});var j=e.concat({begin:"{",end:"}",contains:d}),k={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(e)},l={className:"attribute",begin:c,end:":",excludeEnd:!0,contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE],illegal:/\S/,starts:{end:"[;}]",returnEnd:!0,contains:e,illegal:"[<=$]"}},m={className:"at_rule",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",returnEnd:!0,contains:e,relevance:0}},n={className:"variable",variants:[{begin:"@"+b+"\\s*:",relevance:15},{begin:"@"+b}],starts:{end:"[;}]",returnEnd:!0,contains:j}},o={variants:[{begin:"[\\.#:&\\[]",end:"[;{}]"},{begin:c+"[^;]*{",end:"{"}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,k,g("keyword","all\\b"),g("variable","@{"+b+"}"),g("tag",c+"%?",0),g("id","#"+c),g("class","\\."+c,0),g("keyword","&",0),h("pseudo",":not"),h("keyword",":extend"),g("pseudo","::?"+c),{className:"attr_selector",begin:"\\[",end:"\\]"},{begin:"\\(",end:"\\)",contains:j},{begin:"!important"}]};return d.push(a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,m,n,o,l),{case_insensitive:!0,illegal:"[=>'/<($\"]",contains:d}}),a.registerLanguage("lisp",function(a){var b="[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*",c="\\|[^]*?\\|",d="(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?",e={className:"shebang",begin:"^#!",end:"$"},f={className:"literal",begin:"\\b(t{1}|nil)\\b"},g={className:"number",variants:[{begin:d,relevance:0},{begin:"#(b|B)[0-1]+(/[0-1]+)?"},{begin:"#(o|O)[0-7]+(/[0-7]+)?"},{begin:"#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?"},{begin:"#(c|C)\\("+d+" +"+d,end:"\\)"}]},h=a.inherit(a.QUOTE_STRING_MODE,{illegal:null}),i=a.COMMENT(";","$",{relevance:0}),j={className:"variable",begin:"\\*",end:"\\*"},k={className:"keyword",begin:"[:&]"+b},l={begin:b,relevance:0},m={begin:c},n={begin:"\\(",end:"\\)",contains:["self",f,h,g,l]},o={className:"quoted",contains:[g,h,j,k,n,l],variants:[{begin:"['`]\\(",end:"\\)"},{begin:"\\(quote ",end:"\\)",keywords:"quote"},{begin:"'"+c}]},p={className:"quoted",variants:[{begin:"'"+b},{begin:"#'"+b+"(::"+b+")*"}]},q={className:"list",begin:"\\(\\s*",end:"\\)"},r={endsWithParent:!0,relevance:0};return q.contains=[{className:"keyword",variants:[{begin:b},{begin:c}]},r],r.contains=[o,p,q,f,g,h,i,j,k,m,l],{illegal:/\S/,contains:[g,e,f,h,i,o,p,q,l]}}),a.registerLanguage("livecodeserver",function(a){var b={className:"variable",begin:"\\b[gtps][A-Z]+[A-Za-z0-9_\\-]*\\b|\\$_[A-Z]+",relevance:0},c=[a.C_BLOCK_COMMENT_MODE,a.HASH_COMMENT_MODE,a.COMMENT("--","$"),a.COMMENT("[^:]//","$")],d=a.inherit(a.TITLE_MODE,{variants:[{begin:"\\b_*rig[A-Z]+[A-Za-z0-9_\\-]*"},{begin:"\\b_[a-z0-9\\-]+"}]}),e=a.inherit(a.TITLE_MODE,{begin:"\\b([A-Za-z0-9_\\-]+)\\b"});return{case_insensitive:!1,keywords:{keyword:"$_COOKIE $_FILES $_GET $_GET_BINARY $_GET_RAW $_POST $_POST_BINARY $_POST_RAW $_SESSION $_SERVER codepoint codepoints segment segments codeunit codeunits sentence sentences trueWord trueWords paragraph after byte bytes english the until http forever descending using line real8 with seventh for stdout finally element word words fourth before black ninth sixth characters chars stderr uInt1 uInt1s uInt2 uInt2s stdin string lines relative rel any fifth items from middle mid at else of catch then third it file milliseconds seconds second secs sec int1 int1s int4 int4s internet int2 int2s normal text item last long detailed effective uInt4 uInt4s repeat end repeat URL in try into switch to words https token binfile each tenth as ticks tick system real4 by dateItems without char character ascending eighth whole dateTime numeric short first ftp integer abbreviated abbr abbrev private case while if",
+constant:"SIX TEN FORMFEED NINE ZERO NONE SPACE FOUR FALSE COLON CRLF PI COMMA ENDOFFILE EOF EIGHT FIVE QUOTE EMPTY ONE TRUE RETURN CR LINEFEED RIGHT BACKSLASH NULL SEVEN TAB THREE TWO six ten formfeed nine zero none space four false colon crlf pi comma endoffile eof eight five quote empty one true return cr linefeed right backslash null seven tab three two RIVERSION RISTATE FILE_READ_MODE FILE_WRITE_MODE FILE_WRITE_MODE DIR_WRITE_MODE FILE_READ_UMASK FILE_WRITE_UMASK DIR_READ_UMASK DIR_WRITE_UMASK",operator:"div mod wrap and or bitAnd bitNot bitOr bitXor among not in a an within contains ends with begins the keys of keys",built_in:"put abs acos aliasReference annuity arrayDecode arrayEncode asin atan atan2 average avg avgDev base64Decode base64Encode baseConvert binaryDecode binaryEncode byteOffset byteToNum cachedURL cachedURLs charToNum cipherNames codepointOffset codepointProperty codepointToNum codeunitOffset commandNames compound compress constantNames cos date dateFormat decompress directories diskSpace DNSServers exp exp1 exp2 exp10 extents files flushEvents folders format functionNames geometricMean global globals hasMemory harmonicMean hostAddress hostAddressToName hostName hostNameToAddress isNumber ISOToMac itemOffset keys len length libURLErrorData libUrlFormData libURLftpCommand libURLLastHTTPHeaders libURLLastRHHeaders libUrlMultipartFormAddPart libUrlMultipartFormData libURLVersion lineOffset ln ln1 localNames log log2 log10 longFilePath lower macToISO matchChunk matchText matrixMultiply max md5Digest median merge millisec millisecs millisecond milliseconds min monthNames nativeCharToNum normalizeText num number numToByte numToChar numToCodepoint numToNativeChar offset open openfiles openProcesses openProcessIDs openSockets paragraphOffset paramCount param params peerAddress pendingMessages platform popStdDev populationStandardDeviation populationVariance popVariance processID random randomBytes replaceText result revCreateXMLTree revCreateXMLTreeFromFile revCurrentRecord revCurrentRecordIsFirst revCurrentRecordIsLast revDatabaseColumnCount revDatabaseColumnIsNull revDatabaseColumnLengths revDatabaseColumnNames revDatabaseColumnNamed revDatabaseColumnNumbered revDatabaseColumnTypes revDatabaseConnectResult revDatabaseCursors revDatabaseID revDatabaseTableNames revDatabaseType revDataFromQuery revdb_closeCursor revdb_columnbynumber revdb_columncount revdb_columnisnull revdb_columnlengths revdb_columnnames revdb_columntypes revdb_commit revdb_connect revdb_connections revdb_connectionerr revdb_currentrecord revdb_cursorconnection revdb_cursorerr revdb_cursors revdb_dbtype revdb_disconnect revdb_execute revdb_iseof revdb_isbof revdb_movefirst revdb_movelast revdb_movenext revdb_moveprev revdb_query revdb_querylist revdb_recordcount revdb_rollback revdb_tablenames revGetDatabaseDriverPath revNumberOfRecords revOpenDatabase revOpenDatabases revQueryDatabase revQueryDatabaseBlob revQueryResult revQueryIsAtStart revQueryIsAtEnd revUnixFromMacPath revXMLAttribute revXMLAttributes revXMLAttributeValues revXMLChildContents revXMLChildNames revXMLCreateTreeFromFileWithNamespaces revXMLCreateTreeWithNamespaces revXMLDataFromXPathQuery revXMLEvaluateXPath revXMLFirstChild revXMLMatchingNode revXMLNextSibling revXMLNodeContents revXMLNumberOfChildren revXMLParent revXMLPreviousSibling revXMLRootNode revXMLRPC_CreateRequest revXMLRPC_Documents revXMLRPC_Error revXMLRPC_GetHost revXMLRPC_GetMethod revXMLRPC_GetParam revXMLText revXMLRPC_Execute revXMLRPC_GetParamCount revXMLRPC_GetParamNode revXMLRPC_GetParamType revXMLRPC_GetPath revXMLRPC_GetPort revXMLRPC_GetProtocol revXMLRPC_GetRequest revXMLRPC_GetResponse revXMLRPC_GetSocket revXMLTree revXMLTrees revXMLValidateDTD revZipDescribeItem revZipEnumerateItems revZipOpenArchives round sampVariance sec secs seconds sentenceOffset sha1Digest shell shortFilePath sin specialFolderPath sqrt standardDeviation statRound stdDev sum sysError systemVersion tan tempName textDecode textEncode tick ticks time to tokenOffset toLower toUpper transpose truewordOffset trunc uniDecode uniEncode upper URLDecode URLEncode URLStatus uuid value variableNames variance version waitDepth weekdayNames wordOffset xsltApplyStylesheet xsltApplyStylesheetFromFile xsltLoadStylesheet xsltLoadStylesheetFromFile add breakpoint cancel clear local variable file word line folder directory URL close socket process combine constant convert create new alias folder directory decrypt delete variable word line folder directory URL dispatch divide do encrypt filter get include intersect kill libURLDownloadToFile libURLFollowHttpRedirects libURLftpUpload libURLftpUploadFile libURLresetAll libUrlSetAuthCallback libURLSetCustomHTTPHeaders libUrlSetExpect100 libURLSetFTPListCommand libURLSetFTPMode libURLSetFTPStopTime libURLSetStatusCallback load multiply socket prepare process post seek rel relative read from process rename replace require resetAll resolve revAddXMLNode revAppendXML revCloseCursor revCloseDatabase revCommitDatabase revCopyFile revCopyFolder revCopyXMLNode revDeleteFolder revDeleteXMLNode revDeleteAllXMLTrees revDeleteXMLTree revExecuteSQL revGoURL revInsertXMLNode revMoveFolder revMoveToFirstRecord revMoveToLastRecord revMoveToNextRecord revMoveToPreviousRecord revMoveToRecord revMoveXMLNode revPutIntoXMLNode revRollBackDatabase revSetDatabaseDriverPath revSetXMLAttribute revXMLRPC_AddParam revXMLRPC_DeleteAllDocuments revXMLAddDTD revXMLRPC_Free revXMLRPC_FreeAll revXMLRPC_DeleteDocument revXMLRPC_DeleteParam revXMLRPC_SetHost revXMLRPC_SetMethod revXMLRPC_SetPort revXMLRPC_SetProtocol revXMLRPC_SetSocket revZipAddItemWithData revZipAddItemWithFile revZipAddUncompressedItemWithData revZipAddUncompressedItemWithFile revZipCancel revZipCloseArchive revZipDeleteItem revZipExtractItemToFile revZipExtractItemToVariable revZipSetProgressCallback revZipRenameItem revZipReplaceItemWithData revZipReplaceItemWithFile revZipOpenArchive send set sort split start stop subtract union unload wait write"},contains:[b,{className:"keyword",begin:"\\bend\\sif\\b"},{className:"function",beginKeywords:"function",end:"$",contains:[b,e,a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.BINARY_NUMBER_MODE,a.C_NUMBER_MODE,d]},{className:"function",begin:"\\bend\\s+",end:"$",keywords:"end",contains:[e,d]},{className:"command",beginKeywords:"command on",end:"$",contains:[b,e,a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.BINARY_NUMBER_MODE,a.C_NUMBER_MODE,d]},{className:"preprocessor",variants:[{begin:"<\\?(rev|lc|livecode)",relevance:10},{begin:"<\\?"},{begin:"\\?>"}]},a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.BINARY_NUMBER_MODE,a.C_NUMBER_MODE,d].concat(c),illegal:";$|^\\[|^="}}),a.registerLanguage("livescript",function(a){var b={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger case default function var with then unless until loop of by when and or is isnt not it that otherwise from to til fallthrough super case default function var void const let enum export import native __hasProp __extends __slice __bind __indexOf",literal:"true false null undefined yes no on off it that void",built_in:"npm require console print module global window document"},c="[A-Za-z$_](?:-[0-9A-Za-z$_]|[0-9A-Za-z$_])*",d=a.inherit(a.TITLE_MODE,{begin:c}),e={className:"subst",begin:/#\{/,end:/}/,keywords:b},f={className:"subst",begin:/#[A-Za-z$_]/,end:/(?:\-[0-9A-Za-z$_]|[0-9A-Za-z$_])*/,keywords:b},g=[a.BINARY_NUMBER_MODE,{className:"number",begin:"(\\b0[xX][a-fA-F0-9_]+)|(\\b\\d(\\d|_\\d)*(\\.(\\d(\\d|_\\d)*)?)?(_*[eE]([-+]\\d(_\\d|\\d)*)?)?[_a-z]*)",relevance:0,starts:{end:"(\\s*/)?",relevance:0}},{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[a.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[a.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[a.BACKSLASH_ESCAPE,e,f]},{begin:/"/,end:/"/,contains:[a.BACKSLASH_ESCAPE,e,f]},{begin:/\\/,end:/(\s|$)/,excludeEnd:!0}]},{className:"pi",variants:[{begin:"//",end:"//[gim]*",contains:[e,a.HASH_COMMENT_MODE]},{begin:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{className:"property",begin:"@"+c},{begin:"``",end:"``",excludeBegin:!0,excludeEnd:!0,subLanguage:"javascript"}];e.contains=g;var h={className:"params",begin:"\\(",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:b,contains:["self"].concat(g)}]};return{aliases:["ls"],keywords:b,illegal:/\/\*/,contains:g.concat([a.COMMENT("\\/\\*","\\*\\/"),a.HASH_COMMENT_MODE,{className:"function",contains:[d,h],returnBegin:!0,variants:[{begin:"("+c+"\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B\\->\\*?",end:"\\->\\*?"},{begin:"("+c+"\\s*(?:=|:=)\\s*)?!?(\\(.*\\))?\\s*\\B[-~]{1,2}>\\*?",end:"[-~]{1,2}>\\*?"},{begin:"("+c+"\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B!?[-~]{1,2}>\\*?",end:"!?[-~]{1,2}>\\*?"}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[d]},d]},{className:"attribute",begin:c+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}),a.registerLanguage("lua",function(a){var b="\\[=*\\[",c="\\]=*\\]",d={begin:b,end:c,contains:["self"]},e=[a.COMMENT("--(?!"+b+")","$"),a.COMMENT("--"+b,c,{contains:[d],relevance:10})];return{lexemes:a.UNDERSCORE_IDENT_RE,keywords:{keyword:"and break do else elseif end false for if in local nil not or repeat return then true until while",built_in:"_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug io math os package string table"},contains:e.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[a.inherit(a.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:e}].concat(e)},a.C_NUMBER_MODE,a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,{className:"string",begin:b,end:c,contains:[d],relevance:5}])}}),a.registerLanguage("makefile",function(a){var b={className:"variable",begin:/\$\(/,end:/\)/,contains:[a.BACKSLASH_ESCAPE]};return{aliases:["mk","mak"],contains:[a.HASH_COMMENT_MODE,{begin:/^\w+\s*\W*=/,returnBegin:!0,relevance:0,starts:{className:"constant",end:/\s*\W*=/,excludeEnd:!0,starts:{end:/$/,relevance:0,contains:[b]}}},{className:"title",begin:/^[\w]+:\s*$/},{className:"phony",begin:/^\.PHONY:/,end:/$/,keywords:".PHONY",lexemes:/[\.\w]+/},{begin:/^\t+/,end:/$/,relevance:0,contains:[a.QUOTE_STRING_MODE,b]}]}}),a.registerLanguage("mathematica",function(a){return{aliases:["mma"],lexemes:"(\\$|\\b)"+a.IDENT_RE+"\\b",keywords:"AbelianGroup Abort AbortKernels AbortProtect Above Abs Absolute AbsoluteCorrelation AbsoluteCorrelationFunction AbsoluteCurrentValue AbsoluteDashing AbsoluteFileName AbsoluteOptions AbsolutePointSize AbsoluteThickness AbsoluteTime AbsoluteTiming AccountingForm Accumulate Accuracy AccuracyGoal ActionDelay ActionMenu ActionMenuBox ActionMenuBoxOptions Active ActiveItem ActiveStyle AcyclicGraphQ AddOnHelpPath AddTo AdjacencyGraph AdjacencyList AdjacencyMatrix AdjustmentBox AdjustmentBoxOptions AdjustTimeSeriesForecast AffineTransform After AiryAi AiryAiPrime AiryAiZero AiryBi AiryBiPrime AiryBiZero AlgebraicIntegerQ AlgebraicNumber AlgebraicNumberDenominator AlgebraicNumberNorm AlgebraicNumberPolynomial AlgebraicNumberTrace AlgebraicRules AlgebraicRulesData Algebraics AlgebraicUnitQ Alignment AlignmentMarker AlignmentPoint All AllowedDimensions AllowGroupClose AllowInlineCells AllowKernelInitialization AllowReverseGroupClose AllowScriptLevelChange AlphaChannel AlternatingGroup AlternativeHypothesis Alternatives AmbientLight Analytic AnchoredSearch And AndersonDarlingTest AngerJ AngleBracket AngularGauge Animate AnimationCycleOffset AnimationCycleRepetitions AnimationDirection AnimationDisplayTime AnimationRate AnimationRepetitions AnimationRunning Animator AnimatorBox AnimatorBoxOptions AnimatorElements Annotation Annuity AnnuityDue Antialiasing Antisymmetric Apart ApartSquareFree Appearance AppearanceElements AppellF1 Append AppendTo Apply ArcCos ArcCosh ArcCot ArcCoth ArcCsc ArcCsch ArcSec ArcSech ArcSin ArcSinDistribution ArcSinh ArcTan ArcTanh Arg ArgMax ArgMin ArgumentCountQ ARIMAProcess ArithmeticGeometricMean ARMAProcess ARProcess Array ArrayComponents ArrayDepth ArrayFlatten ArrayPad ArrayPlot ArrayQ ArrayReshape ArrayRules Arrays Arrow Arrow3DBox ArrowBox Arrowheads AspectRatio AspectRatioFixed Assert Assuming Assumptions AstronomicalData Asynchronous AsynchronousTaskObject AsynchronousTasks AtomQ Attributes AugmentedSymmetricPolynomial AutoAction AutoDelete AutoEvaluateEvents AutoGeneratedPackage AutoIndent AutoIndentSpacings AutoItalicWords AutoloadPath AutoMatch Automatic AutomaticImageSize AutoMultiplicationSymbol AutoNumberFormatting AutoOpenNotebooks AutoOpenPalettes AutorunSequencing AutoScaling AutoScroll AutoSpacing AutoStyleOptions AutoStyleWords Axes AxesEdge AxesLabel AxesOrigin AxesStyle Axis BabyMonsterGroupB Back Background BackgroundTasksSettings Backslash Backsubstitution Backward Band BandpassFilter BandstopFilter BarabasiAlbertGraphDistribution BarChart BarChart3D BarLegend BarlowProschanImportance BarnesG BarOrigin BarSpacing BartlettHannWindow BartlettWindow BaseForm Baseline BaselinePosition BaseStyle BatesDistribution BattleLemarieWavelet Because BeckmannDistribution Beep Before Begin BeginDialogPacket BeginFrontEndInteractionPacket BeginPackage BellB BellY Below BenfordDistribution BeniniDistribution BenktanderGibratDistribution BenktanderWeibullDistribution BernoulliB BernoulliDistribution BernoulliGraphDistribution BernoulliProcess BernsteinBasis BesselFilterModel BesselI BesselJ BesselJZero BesselK BesselY BesselYZero Beta BetaBinomialDistribution BetaDistribution BetaNegativeBinomialDistribution BetaPrimeDistribution BetaRegularized BetweennessCentrality BezierCurve BezierCurve3DBox BezierCurve3DBoxOptions BezierCurveBox BezierCurveBoxOptions BezierFunction BilateralFilter Binarize BinaryFormat BinaryImageQ BinaryRead BinaryReadList BinaryWrite BinCounts BinLists Binomial BinomialDistribution BinomialProcess BinormalDistribution BiorthogonalSplineWavelet BipartiteGraphQ BirnbaumImportance BirnbaumSaundersDistribution BitAnd BitClear BitGet BitLength BitNot BitOr BitSet BitShiftLeft BitShiftRight BitXor Black BlackmanHarrisWindow BlackmanNuttallWindow BlackmanWindow Blank BlankForm BlankNullSequence BlankSequence Blend Block BlockRandom BlomqvistBeta BlomqvistBetaTest Blue Blur BodePlot BohmanWindow Bold Bookmarks Boole BooleanConsecutiveFunction BooleanConvert BooleanCountingFunction BooleanFunction BooleanGraph BooleanMaxterms BooleanMinimize BooleanMinterms Booleans BooleanTable BooleanVariables BorderDimensions BorelTannerDistribution Bottom BottomHatTransform BoundaryStyle Bounds Box BoxBaselineShift BoxData BoxDimensions Boxed Boxes BoxForm BoxFormFormatTypes BoxFrame BoxID BoxMargins BoxMatrix BoxRatios BoxRotation BoxRotationPoint BoxStyle BoxWhiskerChart Bra BracketingBar BraKet BrayCurtisDistance BreadthFirstScan Break Brown BrownForsytheTest BrownianBridgeProcess BrowserCategory BSplineBasis BSplineCurve BSplineCurve3DBox BSplineCurveBox BSplineCurveBoxOptions BSplineFunction BSplineSurface BSplineSurface3DBox BubbleChart BubbleChart3D BubbleScale BubbleSizes BulletGauge BusinessDayQ ButterflyGraph ButterworthFilterModel Button ButtonBar ButtonBox ButtonBoxOptions ButtonCell ButtonContents ButtonData ButtonEvaluator ButtonExpandable ButtonFrame ButtonFunction ButtonMargins ButtonMinHeight ButtonNote ButtonNotebook ButtonSource ButtonStyle ButtonStyleMenuListing Byte ByteCount ByteOrdering C CachedValue CacheGraphics CalendarData CalendarType CallPacket CanberraDistance Cancel CancelButton CandlestickChart Cap CapForm CapitalDifferentialD CardinalBSplineBasis CarmichaelLambda Cases Cashflow Casoratian Catalan CatalanNumber Catch CauchyDistribution CauchyWindow CayleyGraph CDF CDFDeploy CDFInformation CDFWavelet Ceiling Cell CellAutoOverwrite CellBaseline CellBoundingBox CellBracketOptions CellChangeTimes CellContents CellContext CellDingbat CellDynamicExpression CellEditDuplicate CellElementsBoundingBox CellElementSpacings CellEpilog CellEvaluationDuplicate CellEvaluationFunction CellEventActions CellFrame CellFrameColor CellFrameLabelMargins CellFrameLabels CellFrameMargins CellGroup CellGroupData CellGrouping CellGroupingRules CellHorizontalScrolling CellID CellLabel CellLabelAutoDelete CellLabelMargins CellLabelPositioning CellMargins CellObject CellOpen CellPrint CellProlog Cells CellSize CellStyle CellTags CellularAutomaton CensoredDistribution Censoring Center CenterDot CentralMoment CentralMomentGeneratingFunction CForm ChampernowneNumber ChanVeseBinarize Character CharacterEncoding CharacterEncodingsPath CharacteristicFunction CharacteristicPolynomial CharacterRange Characters ChartBaseStyle ChartElementData ChartElementDataFunction ChartElementFunction ChartElements ChartLabels ChartLayout ChartLegends ChartStyle Chebyshev1FilterModel Chebyshev2FilterModel ChebyshevDistance ChebyshevT ChebyshevU Check CheckAbort CheckAll Checkbox CheckboxBar CheckboxBox CheckboxBoxOptions ChemicalData ChessboardDistance ChiDistribution ChineseRemainder ChiSquareDistribution ChoiceButtons ChoiceDialog CholeskyDecomposition Chop Circle CircleBox CircleDot CircleMinus CirclePlus CircleTimes CirculantGraph CityData Clear ClearAll ClearAttributes ClearSystemCache ClebschGordan ClickPane Clip ClipboardNotebook ClipFill ClippingStyle ClipPlanes ClipRange Clock ClockGauge ClockwiseContourIntegral Close Closed CloseKernels ClosenessCentrality Closing ClosingAutoSave ClosingEvent ClusteringComponents CMYKColor Coarse Coefficient CoefficientArrays CoefficientDomain CoefficientList CoefficientRules CoifletWavelet Collect Colon ColonForm ColorCombine ColorConvert ColorData ColorDataFunction ColorFunction ColorFunctionScaling Colorize ColorNegate ColorOutput ColorProfileData ColorQuantize ColorReplace ColorRules ColorSelectorSettings ColorSeparate ColorSetter ColorSetterBox ColorSetterBoxOptions ColorSlider ColorSpace Column ColumnAlignments ColumnBackgrounds ColumnForm ColumnLines ColumnsEqual ColumnSpacings ColumnWidths CommonDefaultFormatTypes Commonest CommonestFilter CommonUnits CommunityBoundaryStyle CommunityGraphPlot CommunityLabels CommunityRegionStyle CompatibleUnitQ CompilationOptions CompilationTarget Compile Compiled CompiledFunction Complement CompleteGraph CompleteGraphQ CompleteKaryTree CompletionsListPacket Complex Complexes ComplexExpand ComplexInfinity ComplexityFunction ComponentMeasurements ComponentwiseContextMenu Compose ComposeList ComposeSeries Composition CompoundExpression CompoundPoissonDistribution CompoundPoissonProcess CompoundRenewalProcess Compress CompressedData Condition ConditionalExpression Conditioned Cone ConeBox ConfidenceLevel ConfidenceRange ConfidenceTransform ConfigurationPath Congruent Conjugate ConjugateTranspose Conjunction Connect ConnectedComponents ConnectedGraphQ ConnesWindow ConoverTest ConsoleMessage ConsoleMessagePacket ConsolePrint Constant ConstantArray Constants ConstrainedMax ConstrainedMin ContentPadding ContentsBoundingBox ContentSelectable ContentSize Context ContextMenu Contexts ContextToFilename ContextToFileName Continuation Continue ContinuedFraction ContinuedFractionK ContinuousAction ContinuousMarkovProcess ContinuousTimeModelQ ContinuousWaveletData ContinuousWaveletTransform ContourDetect ContourGraphics ContourIntegral ContourLabels ContourLines ContourPlot ContourPlot3D Contours ContourShading ContourSmoothing ContourStyle ContraharmonicMean Control ControlActive ControlAlignment ControllabilityGramian ControllabilityMatrix ControllableDecomposition ControllableModelQ ControllerDuration ControllerInformation ControllerInformationData ControllerLinking ControllerManipulate ControllerMethod ControllerPath ControllerState ControlPlacement ControlsRendering ControlType Convergents ConversionOptions ConversionRules ConvertToBitmapPacket ConvertToPostScript ConvertToPostScriptPacket Convolve ConwayGroupCo1 ConwayGroupCo2 ConwayGroupCo3 CoordinateChartData CoordinatesToolOptions CoordinateTransform CoordinateTransformData CoprimeQ Coproduct CopulaDistribution Copyable CopyDirectory CopyFile CopyTag CopyToClipboard CornerFilter CornerNeighbors Correlation CorrelationDistance CorrelationFunction CorrelationTest Cos Cosh CoshIntegral CosineDistance CosineWindow CosIntegral Cot Coth Count CounterAssignments CounterBox CounterBoxOptions CounterClockwiseContourIntegral CounterEvaluator CounterFunction CounterIncrements CounterStyle CounterStyleMenuListing CountRoots CountryData Covariance CovarianceEstimatorFunction CovarianceFunction CoxianDistribution CoxIngersollRossProcess CoxModel CoxModelFit CramerVonMisesTest CreateArchive CreateDialog CreateDirectory CreateDocument CreateIntermediateDirectories CreatePalette CreatePalettePacket CreateScheduledTask CreateTemporary CreateWindow CriticalityFailureImportance CriticalitySuccessImportance CriticalSection Cross CrossingDetect CrossMatrix Csc Csch CubeRoot Cubics Cuboid CuboidBox Cumulant CumulantGeneratingFunction Cup CupCap Curl CurlyDoubleQuote CurlyQuote CurrentImage CurrentlySpeakingPacket CurrentValue CurvatureFlowFilter CurveClosed Cyan CycleGraph CycleIndexPolynomial Cycles CyclicGroup Cyclotomic Cylinder CylinderBox CylindricalDecomposition D DagumDistribution DamerauLevenshteinDistance DampingFactor Darker Dashed Dashing DataCompression DataDistribution DataRange DataReversed Date DateDelimiters DateDifference DateFunction DateList DateListLogPlot DateListPlot DatePattern DatePlus DateRange DateString DateTicksFormat DaubechiesWavelet DavisDistribution DawsonF DayCount DayCountConvention DayMatchQ DayName DayPlus DayRange DayRound DeBruijnGraph Debug DebugTag Decimal DeclareKnownSymbols DeclarePackage Decompose Decrement DedekindEta Default DefaultAxesStyle DefaultBaseStyle DefaultBoxStyle DefaultButton DefaultColor DefaultControlPlacement DefaultDuplicateCellStyle DefaultDuration DefaultElement DefaultFaceGridsStyle DefaultFieldHintStyle DefaultFont DefaultFontProperties DefaultFormatType DefaultFormatTypeForStyle DefaultFrameStyle DefaultFrameTicksStyle DefaultGridLinesStyle DefaultInlineFormatType DefaultInputFormatType DefaultLabelStyle DefaultMenuStyle DefaultNaturalLanguage DefaultNewCellStyle DefaultNewInlineCellStyle DefaultNotebook DefaultOptions DefaultOutputFormatType DefaultStyle DefaultStyleDefinitions DefaultTextFormatType DefaultTextInlineFormatType DefaultTicksStyle DefaultTooltipStyle DefaultValues Defer DefineExternal DefineInputStreamMethod DefineOutputStreamMethod Definition Degree DegreeCentrality DegreeGraphDistribution DegreeLexicographic DegreeReverseLexicographic Deinitialization Del Deletable Delete DeleteBorderComponents DeleteCases DeleteContents DeleteDirectory DeleteDuplicates DeleteFile DeleteSmallComponents DeleteWithContents DeletionWarning Delimiter DelimiterFlashTime DelimiterMatching Delimiters Denominator DensityGraphics DensityHistogram DensityPlot DependentVariables Deploy Deployed Depth DepthFirstScan Derivative DerivativeFilter DescriptorStateSpace DesignMatrix Det DGaussianWavelet DiacriticalPositioning Diagonal DiagonalMatrix Dialog DialogIndent DialogInput DialogLevel DialogNotebook DialogProlog DialogReturn DialogSymbols Diamond DiamondMatrix DiceDissimilarity DictionaryLookup DifferenceDelta DifferenceOrder DifferenceRoot DifferenceRootReduce Differences DifferentialD DifferentialRoot DifferentialRootReduce DifferentiatorFilter DigitBlock DigitBlockMinimum DigitCharacter DigitCount DigitQ DihedralGroup Dilation Dimensions DiracComb DiracDelta DirectedEdge DirectedEdges DirectedGraph DirectedGraphQ DirectedInfinity Direction Directive Directory DirectoryName DirectoryQ DirectoryStack DirichletCharacter DirichletConvolve DirichletDistribution DirichletL DirichletTransform DirichletWindow DisableConsolePrintPacket DiscreteChirpZTransform DiscreteConvolve DiscreteDelta DiscreteHadamardTransform DiscreteIndicator DiscreteLQEstimatorGains DiscreteLQRegulatorGains DiscreteLyapunovSolve DiscreteMarkovProcess DiscretePlot DiscretePlot3D DiscreteRatio DiscreteRiccatiSolve DiscreteShift DiscreteTimeModelQ DiscreteUniformDistribution DiscreteVariables DiscreteWaveletData DiscreteWaveletPacketTransform DiscreteWaveletTransform Discriminant Disjunction Disk DiskBox DiskMatrix Dispatch DispersionEstimatorFunction Display DisplayAllSteps DisplayEndPacket DisplayFlushImagePacket DisplayForm DisplayFunction DisplayPacket DisplayRules DisplaySetSizePacket DisplayString DisplayTemporary DisplayWith DisplayWithRef DisplayWithVariable DistanceFunction DistanceTransform Distribute Distributed DistributedContexts DistributeDefinitions DistributionChart DistributionDomain DistributionFitTest DistributionParameterAssumptions DistributionParameterQ Dithering Div Divergence Divide DivideBy Dividers Divisible Divisors DivisorSigma DivisorSum DMSList DMSString Do DockedCells DocumentNotebook DominantColors DOSTextFormat Dot DotDashed DotEqual Dotted DoubleBracketingBar DoubleContourIntegral DoubleDownArrow DoubleLeftArrow DoubleLeftRightArrow DoubleLeftTee DoubleLongLeftArrow DoubleLongLeftRightArrow DoubleLongRightArrow DoubleRightArrow DoubleRightTee DoubleUpArrow DoubleUpDownArrow DoubleVerticalBar DoublyInfinite Down DownArrow DownArrowBar DownArrowUpArrow DownLeftRightVector DownLeftTeeVector DownLeftVector DownLeftVectorBar DownRightTeeVector DownRightVector DownRightVectorBar Downsample DownTee DownTeeArrow DownValues DragAndDrop DrawEdges DrawFrontFaces DrawHighlighted Drop DSolve Dt DualLinearProgramming DualSystemsModel DumpGet DumpSave DuplicateFreeQ Dynamic DynamicBox DynamicBoxOptions DynamicEvaluationTimeout DynamicLocation DynamicModule DynamicModuleBox DynamicModuleBoxOptions DynamicModuleParent DynamicModuleValues DynamicName DynamicNamespace DynamicReference DynamicSetting DynamicUpdating DynamicWrapper DynamicWrapperBox DynamicWrapperBoxOptions E EccentricityCentrality EdgeAdd EdgeBetweennessCentrality EdgeCapacity EdgeCapForm EdgeColor EdgeConnectivity EdgeCost EdgeCount EdgeCoverQ EdgeDashing EdgeDelete EdgeDetect EdgeForm EdgeIndex EdgeJoinForm EdgeLabeling EdgeLabels EdgeLabelStyle EdgeList EdgeOpacity EdgeQ EdgeRenderingFunction EdgeRules EdgeShapeFunction EdgeStyle EdgeThickness EdgeWeight Editable EditButtonSettings EditCellTagsSettings EditDistance EffectiveInterest Eigensystem Eigenvalues EigenvectorCentrality Eigenvectors Element ElementData Eliminate EliminationOrder EllipticE EllipticExp EllipticExpPrime EllipticF EllipticFilterModel EllipticK EllipticLog EllipticNomeQ EllipticPi EllipticReducedHalfPeriods EllipticTheta EllipticThetaPrime EmitSound EmphasizeSyntaxErrors EmpiricalDistribution Empty EmptyGraphQ EnableConsolePrintPacket Enabled Encode End EndAdd EndDialogPacket EndFrontEndInteractionPacket EndOfFile EndOfLine EndOfString EndPackage EngineeringForm Enter EnterExpressionPacket EnterTextPacket Entropy EntropyFilter Environment Epilog Equal EqualColumns EqualRows EqualTilde EquatedTo Equilibrium EquirippleFilterKernel Equivalent Erf Erfc Erfi ErlangB ErlangC ErlangDistribution Erosion ErrorBox ErrorBoxOptions ErrorNorm ErrorPacket ErrorsDialogSettings EstimatedDistribution EstimatedProcess EstimatorGains EstimatorRegulator EuclideanDistance EulerE EulerGamma EulerianGraphQ EulerPhi Evaluatable Evaluate Evaluated EvaluatePacket EvaluationCell EvaluationCompletionAction EvaluationElements EvaluationMode EvaluationMonitor EvaluationNotebook EvaluationObject EvaluationOrder Evaluator EvaluatorNames EvenQ EventData EventEvaluator EventHandler EventHandlerTag EventLabels ExactBlackmanWindow ExactNumberQ ExactRootIsolation ExampleData Except ExcludedForms ExcludePods Exclusions ExclusionsStyle Exists Exit ExitDialog Exp Expand ExpandAll ExpandDenominator ExpandFileName ExpandNumerator Expectation ExpectationE ExpectedValue ExpGammaDistribution ExpIntegralE ExpIntegralEi Exponent ExponentFunction ExponentialDistribution ExponentialFamily ExponentialGeneratingFunction ExponentialMovingAverage ExponentialPowerDistribution ExponentPosition ExponentStep Export ExportAutoReplacements ExportPacket ExportString Expression ExpressionCell ExpressionPacket ExpToTrig ExtendedGCD Extension ExtentElementFunction ExtentMarkers ExtentSize ExternalCall ExternalDataCharacterEncoding Extract ExtractArchive ExtremeValueDistribution FaceForm FaceGrids FaceGridsStyle Factor FactorComplete Factorial Factorial2 FactorialMoment FactorialMomentGeneratingFunction FactorialPower FactorInteger FactorList FactorSquareFree FactorSquareFreeList FactorTerms FactorTermsList Fail FailureDistribution False FARIMAProcess FEDisableConsolePrintPacket FeedbackSector FeedbackSectorStyle FeedbackType FEEnableConsolePrintPacket Fibonacci FieldHint FieldHintStyle FieldMasked FieldSize File FileBaseName FileByteCount FileDate FileExistsQ FileExtension FileFormat FileHash FileInformation FileName FileNameDepth FileNameDialogSettings FileNameDrop FileNameJoin FileNames FileNameSetter FileNameSplit FileNameTake FilePrint FileType FilledCurve FilledCurveBox Filling FillingStyle FillingTransform FilterRules FinancialBond FinancialData FinancialDerivative FinancialIndicator Find FindArgMax FindArgMin FindClique FindClusters FindCurvePath FindDistributionParameters FindDivisions FindEdgeCover FindEdgeCut FindEulerianCycle FindFaces FindFile FindFit FindGeneratingFunction FindGeoLocation FindGeometricTransform FindGraphCommunities FindGraphIsomorphism FindGraphPartition FindHamiltonianCycle FindIndependentEdgeSet FindIndependentVertexSet FindInstance FindIntegerNullVector FindKClan FindKClique FindKClub FindKPlex FindLibrary FindLinearRecurrence FindList FindMaximum FindMaximumFlow FindMaxValue FindMinimum FindMinimumCostFlow FindMinimumCut FindMinValue FindPermutation FindPostmanTour FindProcessParameters FindRoot FindSequenceFunction FindSettings FindShortestPath FindShortestTour FindThreshold FindVertexCover FindVertexCut Fine FinishDynamic FiniteAbelianGroupCount FiniteGroupCount FiniteGroupData First FirstPassageTimeDistribution FischerGroupFi22 FischerGroupFi23 FischerGroupFi24Prime FisherHypergeometricDistribution FisherRatioTest FisherZDistribution Fit FitAll FittedModel FixedPoint FixedPointList FlashSelection Flat Flatten FlattenAt FlatTopWindow FlipView Floor FlushPrintOutputPacket Fold FoldList Font FontColor FontFamily FontForm FontName FontOpacity FontPostScriptName FontProperties FontReencoding FontSize FontSlant FontSubstitutions FontTracking FontVariations FontWeight For ForAll Format FormatRules FormatType FormatTypeAutoConvert FormatValues FormBox FormBoxOptions FortranForm Forward ForwardBackward Fourier FourierCoefficient FourierCosCoefficient FourierCosSeries FourierCosTransform FourierDCT FourierDCTFilter FourierDCTMatrix FourierDST FourierDSTMatrix FourierMatrix FourierParameters FourierSequenceTransform FourierSeries FourierSinCoefficient FourierSinSeries FourierSinTransform FourierTransform FourierTrigSeries FractionalBrownianMotionProcess FractionalPart FractionBox FractionBoxOptions FractionLine Frame FrameBox FrameBoxOptions Framed FrameInset FrameLabel Frameless FrameMargins FrameStyle FrameTicks FrameTicksStyle FRatioDistribution FrechetDistribution FreeQ FrequencySamplingFilterKernel FresnelC FresnelS Friday FrobeniusNumber FrobeniusSolve FromCharacterCode FromCoefficientRules FromContinuedFraction FromDate FromDigits FromDMS Front FrontEndDynamicExpression FrontEndEventActions FrontEndExecute FrontEndObject FrontEndResource FrontEndResourceString FrontEndStackSize FrontEndToken FrontEndTokenExecute FrontEndValueCache FrontEndVersion FrontFaceColor FrontFaceOpacity Full FullAxes FullDefinition FullForm FullGraphics FullOptions FullSimplify Function FunctionExpand FunctionInterpolation FunctionSpace FussellVeselyImportance GaborFilter GaborMatrix GaborWavelet GainMargins GainPhaseMargins Gamma GammaDistribution GammaRegularized GapPenalty Gather GatherBy GaugeFaceElementFunction GaugeFaceStyle GaugeFrameElementFunction GaugeFrameSize GaugeFrameStyle GaugeLabels GaugeMarkers GaugeStyle GaussianFilter GaussianIntegers GaussianMatrix GaussianWindow GCD GegenbauerC General GeneralizedLinearModelFit GenerateConditions GeneratedCell GeneratedParameters GeneratingFunction Generic GenericCylindricalDecomposition GenomeData GenomeLookup GeodesicClosing GeodesicDilation GeodesicErosion GeodesicOpening GeoDestination GeodesyData GeoDirection GeoDistance GeoGridPosition GeometricBrownianMotionProcess GeometricDistribution GeometricMean GeometricMeanFilter GeometricTransformation GeometricTransformation3DBox GeometricTransformation3DBoxOptions GeometricTransformationBox GeometricTransformationBoxOptions GeoPosition GeoPositionENU GeoPositionXYZ GeoProjectionData GestureHandler GestureHandlerTag Get GetBoundingBoxSizePacket GetContext GetEnvironment GetFileName GetFrontEndOptionsDataPacket GetLinebreakInformationPacket GetMenusPacket GetPageBreakInformationPacket Glaisher GlobalClusteringCoefficient GlobalPreferences GlobalSession Glow GoldenRatio GompertzMakehamDistribution GoodmanKruskalGamma GoodmanKruskalGammaTest Goto Grad Gradient GradientFilter GradientOrientationFilter Graph GraphAssortativity GraphCenter GraphComplement GraphData GraphDensity GraphDiameter GraphDifference GraphDisjointUnion GraphDistance GraphDistanceMatrix GraphElementData GraphEmbedding GraphHighlight GraphHighlightStyle GraphHub Graphics Graphics3D Graphics3DBox Graphics3DBoxOptions GraphicsArray GraphicsBaseline GraphicsBox GraphicsBoxOptions GraphicsColor GraphicsColumn GraphicsComplex GraphicsComplex3DBox GraphicsComplex3DBoxOptions GraphicsComplexBox GraphicsComplexBoxOptions GraphicsContents GraphicsData GraphicsGrid GraphicsGridBox GraphicsGroup GraphicsGroup3DBox GraphicsGroup3DBoxOptions GraphicsGroupBox GraphicsGroupBoxOptions GraphicsGrouping GraphicsHighlightColor GraphicsRow GraphicsSpacing GraphicsStyle GraphIntersection GraphLayout GraphLinkEfficiency GraphPeriphery GraphPlot GraphPlot3D GraphPower GraphPropertyDistribution GraphQ GraphRadius GraphReciprocity GraphRoot GraphStyle GraphUnion Gray GrayLevel GreatCircleDistance Greater GreaterEqual GreaterEqualLess GreaterFullEqual GreaterGreater GreaterLess GreaterSlantEqual GreaterTilde Green Grid GridBaseline GridBox GridBoxAlignment GridBoxBackground GridBoxDividers GridBoxFrame GridBoxItemSize GridBoxItemStyle GridBoxOptions GridBoxSpacings GridCreationSettings GridDefaultElement GridElementStyleOptions GridFrame GridFrameMargins GridGraph GridLines GridLinesStyle GroebnerBasis GroupActionBase GroupCentralizer GroupElementFromWord GroupElementPosition GroupElementQ GroupElements GroupElementToWord GroupGenerators GroupMultiplicationTable GroupOrbits GroupOrder GroupPageBreakWithin GroupSetwiseStabilizer GroupStabilizer GroupStabilizerChain Gudermannian GumbelDistribution HaarWavelet HadamardMatrix HalfNormalDistribution HamiltonianGraphQ HammingDistance HammingWindow HankelH1 HankelH2 HankelMatrix HannPoissonWindow HannWindow HaradaNortonGroupHN HararyGraph HarmonicMean HarmonicMeanFilter HarmonicNumber Hash HashTable Haversine HazardFunction Head HeadCompose Heads HeavisideLambda HeavisidePi HeavisideTheta HeldGroupHe HeldPart HelpBrowserLookup HelpBrowserNotebook HelpBrowserSettings HermiteDecomposition HermiteH HermitianMatrixQ HessenbergDecomposition Hessian HexadecimalCharacter Hexahedron HexahedronBox HexahedronBoxOptions HiddenSurface HighlightGraph HighlightImage HighpassFilter HigmanSimsGroupHS HilbertFilter HilbertMatrix Histogram Histogram3D HistogramDistribution HistogramList HistogramTransform HistogramTransformInterpolation HitMissTransform HITSCentrality HodgeDual HoeffdingD HoeffdingDTest Hold HoldAll HoldAllComplete HoldComplete HoldFirst HoldForm HoldPattern HoldRest HolidayCalendar HomeDirectory HomePage Horizontal HorizontalForm HorizontalGauge HorizontalScrollPosition HornerForm HotellingTSquareDistribution HoytDistribution HTMLSave Hue HumpDownHump HumpEqual HurwitzLerchPhi HurwitzZeta HyperbolicDistribution HypercubeGraph HyperexponentialDistribution Hyperfactorial Hypergeometric0F1 Hypergeometric0F1Regularized Hypergeometric1F1 Hypergeometric1F1Regularized Hypergeometric2F1 Hypergeometric2F1Regularized HypergeometricDistribution HypergeometricPFQ HypergeometricPFQRegularized HypergeometricU Hyperlink HyperlinkCreationSettings Hyphenation HyphenationOptions HypoexponentialDistribution HypothesisTestData I Identity IdentityMatrix If IgnoreCase Im Image Image3D Image3DSlices ImageAccumulate ImageAdd ImageAdjust ImageAlign ImageApply ImageAspectRatio ImageAssemble ImageCache ImageCacheValid ImageCapture ImageChannels ImageClip ImageColorSpace ImageCompose ImageConvolve ImageCooccurrence ImageCorners ImageCorrelate ImageCorrespondingPoints ImageCrop ImageData ImageDataPacket ImageDeconvolve ImageDemosaic ImageDifference ImageDimensions ImageDistance ImageEffect ImageFeatureTrack ImageFileApply ImageFileFilter ImageFileScan ImageFilter ImageForestingComponents ImageForwardTransformation ImageHistogram ImageKeypoints ImageLevels ImageLines ImageMargins ImageMarkers ImageMeasurements ImageMultiply ImageOffset ImagePad ImagePadding ImagePartition ImagePeriodogram ImagePerspectiveTransformation ImageQ ImageRangeCache ImageReflect ImageRegion ImageResize ImageResolution ImageRotate ImageRotated ImageScaled ImageScan ImageSize ImageSizeAction ImageSizeCache ImageSizeMultipliers ImageSizeRaw ImageSubtract ImageTake ImageTransformation ImageTrim ImageType ImageValue ImageValuePositions Implies Import ImportAutoReplacements ImportString ImprovementImportance In IncidenceGraph IncidenceList IncidenceMatrix IncludeConstantBasis IncludeFileExtension IncludePods IncludeSingularTerm Increment Indent IndentingNewlineSpacings IndentMaxFraction IndependenceTest IndependentEdgeSetQ IndependentUnit IndependentVertexSetQ Indeterminate IndexCreationOptions Indexed IndexGraph IndexTag Inequality InexactNumberQ InexactNumbers Infinity Infix Information Inherited InheritScope Initialization InitializationCell InitializationCellEvaluation InitializationCellWarning InlineCounterAssignments InlineCounterIncrements InlineRules Inner Inpaint Input InputAliases InputAssumptions InputAutoReplacements InputField InputFieldBox InputFieldBoxOptions InputForm InputGrouping InputNamePacket InputNotebook InputPacket InputSettings InputStream InputString InputStringPacket InputToBoxFormPacket Insert InsertionPointObject InsertResults Inset Inset3DBox Inset3DBoxOptions InsetBox InsetBoxOptions Install InstallService InString Integer IntegerDigits IntegerExponent IntegerLength IntegerPart IntegerPartitions IntegerQ Integers IntegerString Integral Integrate Interactive InteractiveTradingChart Interlaced Interleaving InternallyBalancedDecomposition InterpolatingFunction InterpolatingPolynomial Interpolation InterpolationOrder InterpolationPoints InterpolationPrecision Interpretation InterpretationBox InterpretationBoxOptions InterpretationFunction InterpretTemplate InterquartileRange Interrupt InterruptSettings Intersection Interval IntervalIntersection IntervalMemberQ IntervalUnion Inverse InverseBetaRegularized InverseCDF InverseChiSquareDistribution InverseContinuousWaveletTransform InverseDistanceTransform InverseEllipticNomeQ InverseErf InverseErfc InverseFourier InverseFourierCosTransform InverseFourierSequenceTransform InverseFourierSinTransform InverseFourierTransform InverseFunction InverseFunctions InverseGammaDistribution InverseGammaRegularized InverseGaussianDistribution InverseGudermannian InverseHaversine InverseJacobiCD InverseJacobiCN InverseJacobiCS InverseJacobiDC InverseJacobiDN InverseJacobiDS InverseJacobiNC InverseJacobiND InverseJacobiNS InverseJacobiSC InverseJacobiSD InverseJacobiSN InverseLaplaceTransform InversePermutation InverseRadon InverseSeries InverseSurvivalFunction InverseWaveletTransform InverseWeierstrassP InverseZTransform Invisible InvisibleApplication InvisibleTimes IrreduciblePolynomialQ IsolatingInterval IsomorphicGraphQ IsotopeData Italic Item ItemBox ItemBoxOptions ItemSize ItemStyle ItoProcess JaccardDissimilarity JacobiAmplitude Jacobian JacobiCD JacobiCN JacobiCS JacobiDC JacobiDN JacobiDS JacobiNC JacobiND JacobiNS JacobiP JacobiSC JacobiSD JacobiSN JacobiSymbol JacobiZeta JankoGroupJ1 JankoGroupJ2 JankoGroupJ3 JankoGroupJ4 JarqueBeraALMTest JohnsonDistribution Join Joined JoinedCurve JoinedCurveBox JoinForm JordanDecomposition JordanModelDecomposition K KagiChart KaiserBesselWindow KaiserWindow KalmanEstimator KalmanFilter KarhunenLoeveDecomposition KaryTree KatzCentrality KCoreComponents KDistribution KelvinBei KelvinBer KelvinKei KelvinKer KendallTau KendallTauTest KernelExecute KernelMixtureDistribution KernelObject Kernels Ket Khinchin KirchhoffGraph KirchhoffMatrix KleinInvariantJ KnightTourGraph KnotData KnownUnitQ KolmogorovSmirnovTest KroneckerDelta KroneckerModelDecomposition KroneckerProduct KroneckerSymbol KuiperTest KumaraswamyDistribution Kurtosis KuwaharaFilter Label Labeled LabeledSlider LabelingFunction LabelStyle LaguerreL LambdaComponents LambertW LanczosWindow LandauDistribution Language LanguageCategory LaplaceDistribution LaplaceTransform Laplacian LaplacianFilter LaplacianGaussianFilter Large Larger Last Latitude LatitudeLongitude LatticeData LatticeReduce Launch LaunchKernels LayeredGraphPlot LayerSizeFunction LayoutInformation LCM LeafCount LeapYearQ LeastSquares LeastSquaresFilterKernel Left LeftArrow LeftArrowBar LeftArrowRightArrow LeftDownTeeVector LeftDownVector LeftDownVectorBar LeftRightArrow LeftRightVector LeftTee LeftTeeArrow LeftTeeVector LeftTriangle LeftTriangleBar LeftTriangleEqual LeftUpDownVector LeftUpTeeVector LeftUpVector LeftUpVectorBar LeftVector LeftVectorBar LegendAppearance Legended LegendFunction LegendLabel LegendLayout LegendMargins LegendMarkers LegendMarkerSize LegendreP LegendreQ LegendreType Length LengthWhile LerchPhi Less LessEqual LessEqualGreater LessFullEqual LessGreater LessLess LessSlantEqual LessTilde LetterCharacter LetterQ Level LeveneTest LeviCivitaTensor LevyDistribution Lexicographic LibraryFunction LibraryFunctionError LibraryFunctionInformation LibraryFunctionLoad LibraryFunctionUnload LibraryLoad LibraryUnload LicenseID LiftingFilterData LiftingWaveletTransform LightBlue LightBrown LightCyan Lighter LightGray LightGreen Lighting LightingAngle LightMagenta LightOrange LightPink LightPurple LightRed LightSources LightYellow Likelihood Limit LimitsPositioning LimitsPositioningTokens LindleyDistribution Line Line3DBox LinearFilter LinearFractionalTransform LinearModelFit LinearOffsetFunction LinearProgramming LinearRecurrence LinearSolve LinearSolveFunction LineBox LineBreak LinebreakAdjustments LineBreakChart LineBreakWithin LineColor LineForm LineGraph LineIndent LineIndentMaxFraction LineIntegralConvolutionPlot LineIntegralConvolutionScale LineLegend LineOpacity LineSpacing LineWrapParts LinkActivate LinkClose LinkConnect LinkConnectedQ LinkCreate LinkError LinkFlush LinkFunction LinkHost LinkInterrupt LinkLaunch LinkMode LinkObject LinkOpen LinkOptions LinkPatterns LinkProtocol LinkRead LinkReadHeld LinkReadyQ Links LinkWrite LinkWriteHeld LiouvilleLambda List Listable ListAnimate ListContourPlot ListContourPlot3D ListConvolve ListCorrelate ListCurvePathPlot ListDeconvolve ListDensityPlot Listen ListFourierSequenceTransform ListInterpolation ListLineIntegralConvolutionPlot ListLinePlot ListLogLinearPlot ListLogLogPlot ListLogPlot ListPicker ListPickerBox ListPickerBoxBackground ListPickerBoxOptions ListPlay ListPlot ListPlot3D ListPointPlot3D ListPolarPlot ListQ ListStreamDensityPlot ListStreamPlot ListSurfacePlot3D ListVectorDensityPlot ListVectorPlot ListVectorPlot3D ListZTransform Literal LiteralSearch LocalClusteringCoefficient LocalizeVariables LocationEquivalenceTest LocationTest Locator LocatorAutoCreate LocatorBox LocatorBoxOptions LocatorCentering LocatorPane LocatorPaneBox LocatorPaneBoxOptions LocatorRegion Locked Log Log10 Log2 LogBarnesG LogGamma LogGammaDistribution LogicalExpand LogIntegral LogisticDistribution LogitModelFit LogLikelihood LogLinearPlot LogLogisticDistribution LogLogPlot LogMultinormalDistribution LogNormalDistribution LogPlot LogRankTest LogSeriesDistribution LongEqual Longest LongestAscendingSequence LongestCommonSequence LongestCommonSequencePositions LongestCommonSubsequence LongestCommonSubsequencePositions LongestMatch LongForm Longitude LongLeftArrow LongLeftRightArrow LongRightArrow Loopback LoopFreeGraphQ LowerCaseQ LowerLeftArrow LowerRightArrow LowerTriangularize LowpassFilter LQEstimatorGains LQGRegulator LQOutputRegulatorGains LQRegulatorGains LUBackSubstitution LucasL LuccioSamiComponents LUDecomposition LyapunovSolve LyonsGroupLy MachineID MachineName MachineNumberQ MachinePrecision MacintoshSystemPageSetup Magenta Magnification Magnify MainSolve MaintainDynamicCaches Majority MakeBoxes MakeExpression MakeRules MangoldtLambda ManhattanDistance Manipulate Manipulator MannWhitneyTest MantissaExponent Manual Map MapAll MapAt MapIndexed MAProcess MapThread MarcumQ MardiaCombinedTest MardiaKurtosisTest MardiaSkewnessTest MarginalDistribution MarkovProcessProperties Masking MatchingDissimilarity MatchLocalNameQ MatchLocalNames MatchQ Material MathematicaNotation MathieuC MathieuCharacteristicA MathieuCharacteristicB MathieuCharacteristicExponent MathieuCPrime MathieuGroupM11 MathieuGroupM12 MathieuGroupM22 MathieuGroupM23 MathieuGroupM24 MathieuS MathieuSPrime MathMLForm MathMLText Matrices MatrixExp MatrixForm MatrixFunction MatrixLog MatrixPlot MatrixPower MatrixQ MatrixRank Max MaxBend MaxDetect MaxExtraBandwidths MaxExtraConditions MaxFeatures MaxFilter Maximize MaxIterations MaxMemoryUsed MaxMixtureKernels MaxPlotPoints MaxPoints MaxRecursion MaxStableDistribution MaxStepFraction MaxSteps MaxStepSize MaxValue MaxwellDistribution McLaughlinGroupMcL Mean MeanClusteringCoefficient MeanDegreeConnectivity MeanDeviation MeanFilter MeanGraphDistance MeanNeighborDegree MeanShift MeanShiftFilter Median MedianDeviation MedianFilter Medium MeijerG MeixnerDistribution MemberQ MemoryConstrained MemoryInUse Menu MenuAppearance MenuCommandKey MenuEvaluator MenuItem MenuPacket MenuSortingValue MenuStyle MenuView MergeDifferences Mesh MeshFunctions MeshRange MeshShading MeshStyle Message MessageDialog MessageList MessageName MessageOptions MessagePacket Messages MessagesNotebook MetaCharacters MetaInformation Method MethodOptions MexicanHatWavelet MeyerWavelet Min MinDetect MinFilter MinimalPolynomial MinimalStateSpaceModel Minimize Minors MinRecursion MinSize MinStableDistribution Minus MinusPlus MinValue Missing MissingDataMethod MittagLefflerE MixedRadix MixedRadixQuantity MixtureDistribution Mod Modal Mode Modular ModularLambda Module Modulus MoebiusMu Moment Momentary MomentConvert MomentEvaluate MomentGeneratingFunction Monday Monitor MonomialList MonomialOrder MonsterGroupM MorletWavelet MorphologicalBinarize MorphologicalBranchPoints MorphologicalComponents MorphologicalEulerNumber MorphologicalGraph MorphologicalPerimeter MorphologicalTransform Most MouseAnnotation MouseAppearance MouseAppearanceTag MouseButtons Mouseover MousePointerNote MousePosition MovingAverage MovingMedian MoyalDistribution MultiedgeStyle MultilaunchWarning MultiLetterItalics MultiLetterStyle MultilineFunction Multinomial MultinomialDistribution MultinormalDistribution MultiplicativeOrder Multiplicity Multiselection MultivariateHypergeometricDistribution MultivariatePoissonDistribution MultivariateTDistribution N NakagamiDistribution NameQ Names NamespaceBox Nand NArgMax NArgMin NBernoulliB NCache NDSolve NDSolveValue Nearest NearestFunction NeedCurrentFrontEndPackagePacket NeedCurrentFrontEndSymbolsPacket NeedlemanWunschSimilarity Needs Negative NegativeBinomialDistribution NegativeMultinomialDistribution NeighborhoodGraph Nest NestedGreaterGreater NestedLessLess NestedScriptRules NestList NestWhile NestWhileList NevilleThetaC NevilleThetaD NevilleThetaN NevilleThetaS NewPrimitiveStyle NExpectation Next NextPrime NHoldAll NHoldFirst NHoldRest NicholsGridLines NicholsPlot NIntegrate NMaximize NMaxValue NMinimize NMinValue NominalVariables NonAssociative NoncentralBetaDistribution NoncentralChiSquareDistribution NoncentralFRatioDistribution NoncentralStudentTDistribution NonCommutativeMultiply NonConstants None NonlinearModelFit NonlocalMeansFilter NonNegative NonPositive Nor NorlundB Norm Normal NormalDistribution NormalGrouping Normalize NormalizedSquaredEuclideanDistance NormalsFunction NormFunction Not NotCongruent NotCupCap NotDoubleVerticalBar Notebook NotebookApply NotebookAutoSave NotebookClose NotebookConvertSettings NotebookCreate NotebookCreateReturnObject NotebookDefault NotebookDelete NotebookDirectory NotebookDynamicExpression NotebookEvaluate NotebookEventActions NotebookFileName NotebookFind NotebookFindReturnObject NotebookGet NotebookGetLayoutInformationPacket NotebookGetMisspellingsPacket NotebookInformation NotebookInterfaceObject NotebookLocate NotebookObject NotebookOpen NotebookOpenReturnObject NotebookPath NotebookPrint NotebookPut NotebookPutReturnObject NotebookRead NotebookResetGeneratedCells Notebooks NotebookSave NotebookSaveAs NotebookSelection NotebookSetupLayoutInformationPacket NotebooksMenu NotebookWrite NotElement NotEqualTilde NotExists NotGreater NotGreaterEqual NotGreaterFullEqual NotGreaterGreater NotGreaterLess NotGreaterSlantEqual NotGreaterTilde NotHumpDownHump NotHumpEqual NotLeftTriangle NotLeftTriangleBar NotLeftTriangleEqual NotLess NotLessEqual NotLessFullEqual NotLessGreater NotLessLess NotLessSlantEqual NotLessTilde NotNestedGreaterGreater NotNestedLessLess NotPrecedes NotPrecedesEqual NotPrecedesSlantEqual NotPrecedesTilde NotReverseElement NotRightTriangle NotRightTriangleBar NotRightTriangleEqual NotSquareSubset NotSquareSubsetEqual NotSquareSuperset NotSquareSupersetEqual NotSubset NotSubsetEqual NotSucceeds NotSucceedsEqual NotSucceedsSlantEqual NotSucceedsTilde NotSuperset NotSupersetEqual NotTilde NotTildeEqual NotTildeFullEqual NotTildeTilde NotVerticalBar NProbability NProduct NProductFactors NRoots NSolve NSum NSumTerms Null NullRecords NullSpace NullWords Number NumberFieldClassNumber NumberFieldDiscriminant NumberFieldFundamentalUnits NumberFieldIntegralBasis NumberFieldNormRepresentatives NumberFieldRegulator NumberFieldRootsOfUnity NumberFieldSignature NumberForm NumberFormat NumberMarks NumberMultiplier NumberPadding NumberPoint NumberQ NumberSeparator NumberSigns NumberString Numerator NumericFunction NumericQ NuttallWindow NValues NyquistGridLines NyquistPlot O ObservabilityGramian ObservabilityMatrix ObservableDecomposition ObservableModelQ OddQ Off Offset OLEData On ONanGroupON OneIdentity Opacity Open OpenAppend Opener OpenerBox OpenerBoxOptions OpenerView OpenFunctionInspectorPacket Opening OpenRead OpenSpecialOptions OpenTemporary OpenWrite Operate OperatingSystem OptimumFlowData Optional OptionInspectorSettings OptionQ Options OptionsPacket OptionsPattern OptionValue OptionValueBox OptionValueBoxOptions Or Orange Order OrderDistribution OrderedQ Ordering Orderless OrnsteinUhlenbeckProcess Orthogonalize Out Outer OutputAutoOverwrite OutputControllabilityMatrix OutputControllableModelQ OutputForm OutputFormData OutputGrouping OutputMathEditExpression OutputNamePacket OutputResponse OutputSizeLimit OutputStream Over OverBar OverDot Overflow OverHat Overlaps Overlay OverlayBox OverlayBoxOptions Overscript OverscriptBox OverscriptBoxOptions OverTilde OverVector OwenT OwnValues PackingMethod PaddedForm Padding PadeApproximant PadLeft PadRight PageBreakAbove PageBreakBelow PageBreakWithin PageFooterLines PageFooters PageHeaderLines PageHeaders PageHeight PageRankCentrality PageWidth PairedBarChart PairedHistogram PairedSmoothHistogram PairedTTest PairedZTest PaletteNotebook PalettePath Pane PaneBox PaneBoxOptions Panel PanelBox PanelBoxOptions Paneled PaneSelector PaneSelectorBox PaneSelectorBoxOptions PaperWidth ParabolicCylinderD ParagraphIndent ParagraphSpacing ParallelArray ParallelCombine ParallelDo ParallelEvaluate Parallelization Parallelize ParallelMap ParallelNeeds ParallelProduct ParallelSubmit ParallelSum ParallelTable ParallelTry Parameter ParameterEstimator ParameterMixtureDistribution ParameterVariables ParametricFunction ParametricNDSolve ParametricNDSolveValue ParametricPlot ParametricPlot3D ParentConnect ParentDirectory ParentForm Parenthesize ParentList ParetoDistribution Part PartialCorrelationFunction PartialD ParticleData Partition PartitionsP PartitionsQ ParzenWindow PascalDistribution PassEventsDown PassEventsUp Paste PasteBoxFormInlineCells PasteButton Path PathGraph PathGraphQ Pattern PatternSequence PatternTest PauliMatrix PaulWavelet Pause PausedTime PDF PearsonChiSquareTest PearsonCorrelationTest PearsonDistribution PerformanceGoal PeriodicInterpolation Periodogram PeriodogramArray PermutationCycles PermutationCyclesQ PermutationGroup PermutationLength PermutationList PermutationListQ PermutationMax PermutationMin PermutationOrder PermutationPower PermutationProduct PermutationReplace Permutations PermutationSupport Permute PeronaMalikFilter Perpendicular PERTDistribution PetersenGraph PhaseMargins Pi Pick PIDData PIDDerivativeFilter PIDFeedforward PIDTune Piecewise PiecewiseExpand PieChart PieChart3D PillaiTrace PillaiTraceTest Pink Pivoting PixelConstrained PixelValue PixelValuePositions Placed Placeholder PlaceholderReplace Plain PlanarGraphQ Play PlayRange Plot Plot3D Plot3Matrix PlotDivision PlotJoined PlotLabel PlotLayout PlotLegends PlotMarkers PlotPoints PlotRange PlotRangeClipping PlotRangePadding PlotRegion PlotStyle Plus PlusMinus Pochhammer PodStates PodWidth Point Point3DBox PointBox PointFigureChart PointForm PointLegend PointSize PoissonConsulDistribution PoissonDistribution PoissonProcess PoissonWindow PolarAxes PolarAxesOrigin PolarGridLines PolarPlot PolarTicks PoleZeroMarkers PolyaAeppliDistribution PolyGamma Polygon Polygon3DBox Polygon3DBoxOptions PolygonBox PolygonBoxOptions PolygonHoleScale PolygonIntersections PolygonScale PolyhedronData PolyLog PolynomialExtendedGCD PolynomialForm PolynomialGCD PolynomialLCM PolynomialMod PolynomialQ PolynomialQuotient PolynomialQuotientRemainder PolynomialReduce PolynomialRemainder Polynomials PopupMenu PopupMenuBox PopupMenuBoxOptions PopupView PopupWindow Position Positive PositiveDefiniteMatrixQ PossibleZeroQ Postfix PostScript Power PowerDistribution PowerExpand PowerMod PowerModList PowerSpectralDensity PowersRepresentations PowerSymmetricPolynomial Precedence PrecedenceForm Precedes PrecedesEqual PrecedesSlantEqual PrecedesTilde Precision PrecisionGoal PreDecrement PredictionRoot PreemptProtect PreferencesPath Prefix PreIncrement Prepend PrependTo PreserveImageOptions Previous PriceGraphDistribution PrimaryPlaceholder Prime PrimeNu PrimeOmega PrimePi PrimePowerQ PrimeQ Primes PrimeZetaP PrimitiveRoot PrincipalComponents PrincipalValue Print PrintAction PrintForm PrintingCopies PrintingOptions PrintingPageRange PrintingStartingPageNumber PrintingStyleEnvironment PrintPrecision PrintTemporary Prism PrismBox PrismBoxOptions PrivateCellOptions PrivateEvaluationOptions PrivateFontOptions PrivateFrontEndOptions PrivateNotebookOptions PrivatePaths Probability ProbabilityDistribution ProbabilityPlot ProbabilityPr ProbabilityScalePlot ProbitModelFit ProcessEstimator ProcessParameterAssumptions ProcessParameterQ ProcessStateDomain ProcessTimeDomain Product ProductDistribution ProductLog ProgressIndicator ProgressIndicatorBox ProgressIndicatorBoxOptions Projection Prolog PromptForm Properties Property PropertyList PropertyValue Proportion Proportional Protect Protected ProteinData Pruning PseudoInverse Purple Put PutAppend Pyramid PyramidBox PyramidBoxOptions QBinomial QFactorial QGamma QHypergeometricPFQ QPochhammer QPolyGamma QRDecomposition QuadraticIrrationalQ Quantile QuantilePlot Quantity QuantityForm QuantityMagnitude QuantityQ QuantityUnit Quartics QuartileDeviation Quartiles QuartileSkewness QueueingNetworkProcess QueueingProcess QueueProperties Quiet Quit Quotient QuotientRemainder RadialityCentrality RadicalBox RadicalBoxOptions RadioButton RadioButtonBar RadioButtonBox RadioButtonBoxOptions Radon RamanujanTau RamanujanTauL RamanujanTauTheta RamanujanTauZ Random RandomChoice RandomComplex RandomFunction RandomGraph RandomImage RandomInteger RandomPermutation RandomPrime RandomReal RandomSample RandomSeed RandomVariate RandomWalkProcess Range RangeFilter RangeSpecification RankedMax RankedMin Raster Raster3D Raster3DBox Raster3DBoxOptions RasterArray RasterBox RasterBoxOptions Rasterize RasterSize Rational RationalFunctions Rationalize Rationals Ratios Raw RawArray RawBoxes RawData RawMedium RayleighDistribution Re Read ReadList ReadProtected Real RealBlockDiagonalForm RealDigits RealExponent Reals Reap Record RecordLists RecordSeparators Rectangle RectangleBox RectangleBoxOptions RectangleChart RectangleChart3D RecurrenceFilter RecurrenceTable RecurringDigitsForm Red Reduce RefBox ReferenceLineStyle ReferenceMarkers ReferenceMarkerStyle Refine ReflectionMatrix ReflectionTransform Refresh RefreshRate RegionBinarize RegionFunction RegionPlot RegionPlot3D RegularExpression Regularization Reinstall Release ReleaseHold ReliabilityDistribution ReliefImage ReliefPlot Remove RemoveAlphaChannel RemoveAsynchronousTask Removed RemoveInputStreamMethod RemoveOutputStreamMethod RemoveProperty RemoveScheduledTask RenameDirectory RenameFile RenderAll RenderingOptions RenewalProcess RenkoChart Repeated RepeatedNull RepeatedString Replace ReplaceAll ReplaceHeldPart ReplaceImageValue ReplaceList ReplacePart ReplacePixelValue ReplaceRepeated Resampling Rescale RescalingTransform ResetDirectory ResetMenusPacket ResetScheduledTask Residue Resolve Rest Resultant ResumePacket Return ReturnExpressionPacket ReturnInputFormPacket ReturnPacket ReturnTextPacket Reverse ReverseBiorthogonalSplineWavelet ReverseElement ReverseEquilibrium ReverseGraph ReverseUpEquilibrium RevolutionAxis RevolutionPlot3D RGBColor RiccatiSolve RiceDistribution RidgeFilter RiemannR RiemannSiegelTheta RiemannSiegelZ Riffle Right RightArrow RightArrowBar RightArrowLeftArrow RightCosetRepresentative RightDownTeeVector RightDownVector RightDownVectorBar RightTee RightTeeArrow RightTeeVector RightTriangle RightTriangleBar RightTriangleEqual RightUpDownVector RightUpTeeVector RightUpVector RightUpVectorBar RightVector RightVectorBar RiskAchievementImportance RiskReductionImportance RogersTanimotoDissimilarity Root RootApproximant RootIntervals RootLocusPlot RootMeanSquare RootOfUnityQ RootReduce Roots RootSum Rotate RotateLabel RotateLeft RotateRight RotationAction RotationBox RotationBoxOptions RotationMatrix RotationTransform Round RoundImplies RoundingRadius Row RowAlignments RowBackgrounds RowBox RowHeights RowLines RowMinHeight RowReduce RowsEqual RowSpacings RSolve RudvalisGroupRu Rule RuleCondition RuleDelayed RuleForm RulerUnits Run RunScheduledTask RunThrough RuntimeAttributes RuntimeOptions RussellRaoDissimilarity SameQ SameTest SampleDepth SampledSoundFunction SampledSoundList SampleRate SamplingPeriod SARIMAProcess SARMAProcess SatisfiabilityCount SatisfiabilityInstances SatisfiableQ Saturday Save Saveable SaveAutoDelete SaveDefinitions SawtoothWave Scale Scaled ScaleDivisions ScaledMousePosition ScaleOrigin ScalePadding ScaleRanges ScaleRangeStyle ScalingFunctions ScalingMatrix ScalingTransform Scan ScheduledTaskActiveQ ScheduledTaskData ScheduledTaskObject ScheduledTasks SchurDecomposition ScientificForm ScreenRectangle ScreenStyleEnvironment ScriptBaselineShifts ScriptLevel ScriptMinSize ScriptRules ScriptSizeMultipliers Scrollbars ScrollingOptions ScrollPosition Sec Sech SechDistribution SectionGrouping SectorChart SectorChart3D SectorOrigin SectorSpacing SeedRandom Select Selectable SelectComponents SelectedCells SelectedNotebook Selection SelectionAnimate SelectionCell SelectionCellCreateCell SelectionCellDefaultStyle SelectionCellParentStyle SelectionCreateCell SelectionDebuggerTag SelectionDuplicateCell SelectionEvaluate SelectionEvaluateCreateCell SelectionMove SelectionPlaceholder SelectionSetStyle SelectWithContents SelfLoops SelfLoopStyle SemialgebraicComponentInstances SendMail Sequence SequenceAlignment SequenceForm SequenceHold SequenceLimit Series SeriesCoefficient SeriesData SessionTime Set SetAccuracy SetAlphaChannel SetAttributes Setbacks SetBoxFormNamesPacket SetDelayed SetDirectory SetEnvironment SetEvaluationNotebook SetFileDate SetFileLoadingContext SetNotebookStatusLine SetOptions SetOptionsPacket SetPrecision SetProperty SetSelectedNotebook SetSharedFunction SetSharedVariable SetSpeechParametersPacket SetStreamPosition SetSystemOptions Setter SetterBar SetterBox SetterBoxOptions Setting SetValue Shading Shallow ShannonWavelet ShapiroWilkTest Share Sharpen ShearingMatrix ShearingTransform ShenCastanMatrix Short ShortDownArrow Shortest ShortestMatch ShortestPathFunction ShortLeftArrow ShortRightArrow ShortUpArrow Show ShowAutoStyles ShowCellBracket ShowCellLabel ShowCellTags ShowClosedCellArea ShowContents ShowControls ShowCursorTracker ShowGroupOpenCloseIcon ShowGroupOpener ShowInvisibleCharacters ShowPageBreaks ShowPredictiveInterface ShowSelection ShowShortBoxForm ShowSpecialCharacters ShowStringCharacters ShowSyntaxStyles ShrinkingDelay ShrinkWrapBoundingBox SiegelTheta SiegelTukeyTest Sign Signature SignedRankTest SignificanceLevel SignPadding SignTest SimilarityRules SimpleGraph SimpleGraphQ Simplify Sin Sinc SinghMaddalaDistribution SingleEvaluation SingleLetterItalics SingleLetterStyle SingularValueDecomposition SingularValueList SingularValuePlot SingularValues Sinh SinhIntegral SinIntegral SixJSymbol Skeleton SkeletonTransform SkellamDistribution Skewness SkewNormalDistribution Skip SliceDistribution Slider Slider2D Slider2DBox Slider2DBoxOptions SliderBox SliderBoxOptions SlideView Slot SlotSequence Small SmallCircle Smaller SmithDelayCompensator SmithWatermanSimilarity SmoothDensityHistogram SmoothHistogram SmoothHistogram3D SmoothKernelDistribution SocialMediaData Socket SokalSneathDissimilarity Solve SolveAlways SolveDelayed Sort SortBy Sound SoundAndGraphics SoundNote SoundVolume Sow Space SpaceForm Spacer Spacings Span SpanAdjustments SpanCharacterRounding SpanFromAbove SpanFromBoth SpanFromLeft SpanLineThickness SpanMaxSize SpanMinSize SpanningCharacters SpanSymmetric SparseArray SpatialGraphDistribution Speak SpeakTextPacket SpearmanRankTest SpearmanRho Spectrogram SpectrogramArray Specularity SpellingCorrection SpellingDictionaries SpellingDictionariesPath SpellingOptions SpellingSuggestionsPacket Sphere SphereBox SphericalBesselJ SphericalBesselY SphericalHankelH1 SphericalHankelH2 SphericalHarmonicY SphericalPlot3D SphericalRegion SpheroidalEigenvalue SpheroidalJoiningFactor SpheroidalPS SpheroidalPSPrime SpheroidalQS SpheroidalQSPrime SpheroidalRadialFactor SpheroidalS1 SpheroidalS1Prime SpheroidalS2 SpheroidalS2Prime Splice SplicedDistribution SplineClosed SplineDegree SplineKnots SplineWeights Split SplitBy SpokenString Sqrt SqrtBox SqrtBoxOptions Square SquaredEuclideanDistance SquareFreeQ SquareIntersection SquaresR SquareSubset SquareSubsetEqual SquareSuperset SquareSupersetEqual SquareUnion SquareWave StabilityMargins StabilityMarginsStyle StableDistribution Stack StackBegin StackComplete StackInhibit StandardDeviation StandardDeviationFilter StandardForm Standardize StandbyDistribution Star StarGraph StartAsynchronousTask StartingStepSize StartOfLine StartOfString StartScheduledTask StartupSound StateDimensions StateFeedbackGains StateOutputEstimator StateResponse StateSpaceModel StateSpaceRealization StateSpaceTransform StationaryDistribution StationaryWaveletPacketTransform StationaryWaveletTransform StatusArea StatusCentrality StepMonitor StieltjesGamma StirlingS1 StirlingS2 StopAsynchronousTask StopScheduledTask StrataVariables StratonovichProcess StreamColorFunction StreamColorFunctionScaling StreamDensityPlot StreamPlot StreamPoints StreamPosition Streams StreamScale StreamStyle String StringBreak StringByteCount StringCases StringCount StringDrop StringExpression StringForm StringFormat StringFreeQ StringInsert StringJoin StringLength StringMatchQ StringPosition StringQ StringReplace StringReplaceList StringReplacePart StringReverse StringRotateLeft StringRotateRight StringSkeleton StringSplit StringTake StringToStream StringTrim StripBoxes StripOnInput StripWrapperBoxes StrokeForm StructuralImportance StructuredArray StructuredSelection StruveH StruveL Stub StudentTDistribution Style StyleBox StyleBoxAutoDelete StyleBoxOptions StyleData StyleDefinitions StyleForm StyleKeyMapping StyleMenuListing StyleNameDialogSettings StyleNames StylePrint StyleSheetPath Subfactorial Subgraph SubMinus SubPlus SubresultantPolynomialRemainders SubresultantPolynomials Subresultants Subscript SubscriptBox SubscriptBoxOptions Subscripted Subset SubsetEqual Subsets SubStar Subsuperscript SubsuperscriptBox SubsuperscriptBoxOptions Subtract SubtractFrom SubValues Succeeds SucceedsEqual SucceedsSlantEqual SucceedsTilde SuchThat Sum SumConvergence Sunday SuperDagger SuperMinus SuperPlus Superscript SuperscriptBox SuperscriptBoxOptions Superset SupersetEqual SuperStar Surd SurdForm SurfaceColor SurfaceGraphics SurvivalDistribution SurvivalFunction SurvivalModel SurvivalModelFit SuspendPacket SuzukiDistribution SuzukiGroupSuz SwatchLegend Switch Symbol SymbolName SymletWavelet Symmetric SymmetricGroup SymmetricMatrixQ SymmetricPolynomial SymmetricReduction Symmetrize SymmetrizedArray SymmetrizedArrayRules SymmetrizedDependentComponents SymmetrizedIndependentComponents SymmetrizedReplacePart SynchronousInitialization SynchronousUpdating Syntax SyntaxForm SyntaxInformation SyntaxLength SyntaxPacket SyntaxQ SystemDialogInput SystemException SystemHelpPath SystemInformation SystemInformationData SystemOpen SystemOptions SystemsModelDelay SystemsModelDelayApproximate SystemsModelDelete SystemsModelDimensions SystemsModelExtract SystemsModelFeedbackConnect SystemsModelLabels SystemsModelOrder SystemsModelParallelConnect SystemsModelSeriesConnect SystemsModelStateFeedbackConnect SystemStub Tab TabFilling Table TableAlignments TableDepth TableDirections TableForm TableHeadings TableSpacing TableView TableViewBox TabSpacings TabView TabViewBox TabViewBoxOptions TagBox TagBoxNote TagBoxOptions TaggingRules TagSet TagSetDelayed TagStyle TagUnset Take TakeWhile Tally Tan Tanh TargetFunctions TargetUnits TautologyQ TelegraphProcess TemplateBox TemplateBoxOptions TemplateSlotSequence TemporalData Temporary TemporaryVariable TensorContract TensorDimensions TensorExpand TensorProduct TensorQ TensorRank TensorReduce TensorSymmetry TensorTranspose TensorWedge Tetrahedron TetrahedronBox TetrahedronBoxOptions TeXForm TeXSave Text Text3DBox Text3DBoxOptions TextAlignment TextBand TextBoundingBox TextBox TextCell TextClipboardType TextData TextForm TextJustification TextLine TextPacket TextParagraph TextRecognize TextRendering TextStyle Texture TextureCoordinateFunction TextureCoordinateScaling Therefore ThermometerGauge Thick Thickness Thin Thinning ThisLink ThompsonGroupTh Thread ThreeJSymbol Threshold Through Throw Thumbnail Thursday Ticks TicksStyle Tilde TildeEqual TildeFullEqual TildeTilde TimeConstrained TimeConstraint Times TimesBy TimeSeriesForecast TimeSeriesInvertibility TimeUsed TimeValue TimeZone Timing Tiny TitleGrouping TitsGroupT ToBoxes ToCharacterCode ToColor ToContinuousTimeModel ToDate ToDiscreteTimeModel ToeplitzMatrix ToExpression ToFileName Together Toggle ToggleFalse Toggler TogglerBar TogglerBox TogglerBoxOptions ToHeldExpression ToInvertibleTimeSeries TokenWords Tolerance ToLowerCase ToNumberField TooBig Tooltip TooltipBox TooltipBoxOptions TooltipDelay TooltipStyle Top TopHatTransform TopologicalSort ToRadicals ToRules ToString Total TotalHeight TotalVariationFilter TotalWidth TouchscreenAutoZoom TouchscreenControlPlacement ToUpperCase Tr Trace TraceAbove TraceAction TraceBackward TraceDepth TraceDialog TraceForward TraceInternal TraceLevel TraceOff TraceOn TraceOriginal TracePrint TraceScan TrackedSymbols TradingChart TraditionalForm TraditionalFunctionNotation TraditionalNotation TraditionalOrder TransferFunctionCancel TransferFunctionExpand TransferFunctionFactor TransferFunctionModel TransferFunctionPoles TransferFunctionTransform TransferFunctionZeros TransformationFunction TransformationFunctions TransformationMatrix TransformedDistribution TransformedField Translate TranslationTransform TransparentColor Transpose TreeForm TreeGraph TreeGraphQ TreePlot TrendStyle TriangleWave TriangularDistribution Trig TrigExpand TrigFactor TrigFactorList Trigger TrigReduce TrigToExp TrimmedMean True TrueQ TruncatedDistribution TsallisQExponentialDistribution TsallisQGaussianDistribution TTest Tube TubeBezierCurveBox TubeBezierCurveBoxOptions TubeBox TubeBSplineCurveBox TubeBSplineCurveBoxOptions Tuesday TukeyLambdaDistribution TukeyWindow Tuples TuranGraph TuringMachine Transparent UnateQ Uncompress Undefined UnderBar Underflow Underlined Underoverscript UnderoverscriptBox UnderoverscriptBoxOptions Underscript UnderscriptBox UnderscriptBoxOptions UndirectedEdge UndirectedGraph UndirectedGraphQ UndocumentedTestFEParserPacket UndocumentedTestGetSelectionPacket Unequal Unevaluated UniformDistribution UniformGraphDistribution UniformSumDistribution Uninstall Union UnionPlus Unique UnitBox UnitConvert UnitDimensions Unitize UnitRootTest UnitSimplify UnitStep UnitTriangle UnitVector Unprotect UnsameQ UnsavedVariables Unset UnsetShared UntrackedVariables Up UpArrow UpArrowBar UpArrowDownArrow Update UpdateDynamicObjects UpdateDynamicObjectsSynchronous UpdateInterval UpDownArrow UpEquilibrium UpperCaseQ UpperLeftArrow UpperRightArrow UpperTriangularize Upsample UpSet UpSetDelayed UpTee UpTeeArrow UpValues URL URLFetch URLFetchAsynchronous URLSave URLSaveAsynchronous UseGraphicsRange Using UsingFrontEnd V2Get ValidationLength Value ValueBox ValueBoxOptions ValueForm ValueQ ValuesData Variables Variance VarianceEquivalenceTest VarianceEstimatorFunction VarianceGammaDistribution VarianceTest VectorAngle VectorColorFunction VectorColorFunctionScaling VectorDensityPlot VectorGlyphData VectorPlot VectorPlot3D VectorPoints VectorQ Vectors VectorScale VectorStyle Vee Verbatim Verbose VerboseConvertToPostScriptPacket VerifyConvergence VerifySolutions VerifyTestAssumptions Version VersionNumber VertexAdd VertexCapacity VertexColors VertexComponent VertexConnectivity VertexCoordinateRules VertexCoordinates VertexCorrelationSimilarity VertexCosineSimilarity VertexCount VertexCoverQ VertexDataCoordinates VertexDegree VertexDelete VertexDiceSimilarity VertexEccentricity VertexInComponent VertexInDegree VertexIndex VertexJaccardSimilarity VertexLabeling VertexLabels VertexLabelStyle VertexList VertexNormals VertexOutComponent VertexOutDegree VertexQ VertexRenderingFunction VertexReplace VertexShape VertexShapeFunction VertexSize VertexStyle VertexTextureCoordinates VertexWeight Vertical VerticalBar VerticalForm VerticalGauge VerticalSeparator VerticalSlider VerticalTilde ViewAngle ViewCenter ViewMatrix ViewPoint ViewPointSelectorSettings ViewPort ViewRange ViewVector ViewVertical VirtualGroupData Visible VisibleCell VoigtDistribution VonMisesDistribution WaitAll WaitAsynchronousTask WaitNext WaitUntil WakebyDistribution WalleniusHypergeometricDistribution WaringYuleDistribution WatershedComponents WatsonUSquareTest WattsStrogatzGraphDistribution WaveletBestBasis WaveletFilterCoefficients WaveletImagePlot WaveletListPlot WaveletMapIndexed WaveletMatrixPlot WaveletPhi WaveletPsi WaveletScale WaveletScalogram WaveletThreshold WeaklyConnectedComponents WeaklyConnectedGraphQ WeakStationarity WeatherData WeberE Wedge Wednesday WeibullDistribution WeierstrassHalfPeriods WeierstrassInvariants WeierstrassP WeierstrassPPrime WeierstrassSigma WeierstrassZeta WeightedAdjacencyGraph WeightedAdjacencyMatrix WeightedData WeightedGraphQ Weights WelchWindow WheelGraph WhenEvent Which While White Whitespace WhitespaceCharacter WhittakerM WhittakerW WienerFilter WienerProcess WignerD WignerSemicircleDistribution WilksW WilksWTest WindowClickSelect WindowElements WindowFloating WindowFrame WindowFrameElements WindowMargins WindowMovable WindowOpacity WindowSelected WindowSize WindowStatusArea WindowTitle WindowToolbars WindowWidth With WolframAlpha WolframAlphaDate WolframAlphaQuantity WolframAlphaResult Word WordBoundary WordCharacter WordData WordSearch WordSeparators WorkingPrecision Write WriteString Wronskian XMLElement XMLObject Xnor Xor Yellow YuleDissimilarity ZernikeR ZeroSymmetric ZeroTest ZeroWidthTimes Zeta ZetaZero ZipfDistribution ZTest ZTransform $Aborted $ActivationGroupID $ActivationKey $ActivationUserRegistered $AddOnsDirectory $AssertFunction $Assumptions $AsynchronousTask $BaseDirectory $BatchInput $BatchOutput $BoxForms $ByteOrdering $Canceled $CharacterEncoding $CharacterEncodings $CommandLine $CompilationTarget $ConditionHold $ConfiguredKernels $Context $ContextPath $ControlActiveSetting $CreationDate $CurrentLink $DateStringFormat $DefaultFont $DefaultFrontEnd $DefaultImagingDevice $DefaultPath $Display $DisplayFunction $DistributedContexts $DynamicEvaluation $Echo $Epilog $ExportFormats $Failed $FinancialDataSource $FormatType $FrontEnd $FrontEndSession $GeoLocation $HistoryLength $HomeDirectory $HTTPCookies $IgnoreEOF $ImagingDevices $ImportFormats $InitialDirectory $Input $InputFileName $InputStreamMethods $Inspector $InstallationDate $InstallationDirectory $InterfaceEnvironment $IterationLimit $KernelCount $KernelID $Language $LaunchDirectory $LibraryPath $LicenseExpirationDate $LicenseID $LicenseProcesses $LicenseServer $LicenseSubprocesses $LicenseType $Line $Linked $LinkSupported $LoadedFiles $MachineAddresses $MachineDomain $MachineDomains $MachineEpsilon $MachineID $MachineName $MachinePrecision $MachineType $MaxExtraPrecision $MaxLicenseProcesses $MaxLicenseSubprocesses $MaxMachineNumber $MaxNumber $MaxPiecewiseCases $MaxPrecision $MaxRootDegree $MessageGroups $MessageList $MessagePrePrint $Messages $MinMachineNumber $MinNumber $MinorReleaseNumber $MinPrecision $ModuleNumber $NetworkLicense $NewMessage $NewSymbol $Notebooks $NumberMarks $Off $OperatingSystem $Output $OutputForms $OutputSizeLimit $OutputStreamMethods $Packages $ParentLink $ParentProcessID $PasswordFile $PatchLevelID $Path $PathnameSeparator $PerformanceGoal $PipeSupported $Post $Pre $PreferencesDirectory $PrePrint $PreRead $PrintForms $PrintLiteral $ProcessID $ProcessorCount $ProcessorType $ProductInformation $ProgramName $RandomState $RecursionLimit $ReleaseNumber $RootDirectory $ScheduledTask $ScriptCommandLine $SessionID $SetParentLink $SharedFunctions $SharedVariables $SoundDisplay $SoundDisplayFunction $SuppressInputFormHeads $SynchronousEvaluation $SyntaxHandler $System $SystemCharacterEncoding $SystemID $SystemWordLength $TemporaryDirectory $TemporaryPrefix $TextStyle $TimedOut $TimeUnit $TimeZone $TopDirectory $TraceOff $TraceOn $TracePattern $TracePostAction $TracePreAction $Urgent $UserAddOnsDirectory $UserBaseDirectory $UserDocumentsDirectory $UserName $Version $VersionNumber",
+contains:[{className:"comment",begin:/\(\*/,end:/\*\)/},a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.C_NUMBER_MODE,{className:"list",begin:/\{/,end:/\}/,illegal:/:/}]}}),a.registerLanguage("matlab",function(a){var b=[a.C_NUMBER_MODE,{className:"string",begin:"'",end:"'",contains:[a.BACKSLASH_ESCAPE,{begin:"''"}]}],c={relevance:0,contains:[{className:"operator",begin:/'['\.]*/}]};return{keywords:{keyword:"break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while",built_in:"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson"},illegal:'(//|"|#|/\\*|\\s+/\\w+)',contains:[{className:"function",beginKeywords:"function",end:"$",contains:[a.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"},{className:"params",begin:"\\[",end:"\\]"}]},{begin:/[a-zA-Z_][a-zA-Z_0-9]*'['\.]*/,returnBegin:!0,relevance:0,contains:[{begin:/[a-zA-Z_][a-zA-Z_0-9]*/,relevance:0},c.contains[0]]},{className:"matrix",begin:"\\[",end:"\\]",contains:b,relevance:0,starts:c},{className:"cell",begin:"\\{",end:/}/,contains:b,relevance:0,starts:c},{begin:/\)/,relevance:0,starts:c},a.COMMENT("^\\s*\\%\\{\\s*$","^\\s*\\%\\}\\s*$"),a.COMMENT("\\%","$")].concat(b)}}),a.registerLanguage("mel",function(a){return{keywords:"int float string vector matrix if else switch case default while do for in break continue global proc return about abs addAttr addAttributeEditorNodeHelp addDynamic addNewShelfTab addPP addPanelCategory addPrefixToName advanceToNextDrivenKey affectedNet affects aimConstraint air alias aliasAttr align alignCtx alignCurve alignSurface allViewFit ambientLight angle angleBetween animCone animCurveEditor animDisplay animView annotate appendStringArray applicationName applyAttrPreset applyTake arcLenDimContext arcLengthDimension arclen arrayMapper art3dPaintCtx artAttrCtx artAttrPaintVertexCtx artAttrSkinPaintCtx artAttrTool artBuildPaintMenu artFluidAttrCtx artPuttyCtx artSelectCtx artSetPaintCtx artUserPaintCtx assignCommand assignInputDevice assignViewportFactories attachCurve attachDeviceAttr attachSurface attrColorSliderGrp attrCompatibility attrControlGrp attrEnumOptionMenu attrEnumOptionMenuGrp attrFieldGrp attrFieldSliderGrp attrNavigationControlGrp attrPresetEditWin attributeExists attributeInfo attributeMenu attributeQuery autoKeyframe autoPlace bakeClip bakeFluidShading bakePartialHistory bakeResults bakeSimulation basename basenameEx batchRender bessel bevel bevelPlus binMembership bindSkin blend2 blendShape blendShapeEditor blendShapePanel blendTwoAttr blindDataType boneLattice boundary boxDollyCtx boxZoomCtx bufferCurve buildBookmarkMenu buildKeyframeMenu button buttonManip CBG cacheFile cacheFileCombine cacheFileMerge cacheFileTrack camera cameraView canCreateManip canvas capitalizeString catch catchQuiet ceil changeSubdivComponentDisplayLevel changeSubdivRegion channelBox character characterMap characterOutlineEditor characterize chdir checkBox checkBoxGrp checkDefaultRenderGlobals choice circle circularFillet clamp clear clearCache clip clipEditor clipEditorCurrentTimeCtx clipSchedule clipSchedulerOutliner clipTrimBefore closeCurve closeSurface cluster cmdFileOutput cmdScrollFieldExecuter cmdScrollFieldReporter cmdShell coarsenSubdivSelectionList collision color colorAtPoint colorEditor colorIndex colorIndexSliderGrp colorSliderButtonGrp colorSliderGrp columnLayout commandEcho commandLine commandPort compactHairSystem componentEditor compositingInterop computePolysetVolume condition cone confirmDialog connectAttr connectControl connectDynamic connectJoint connectionInfo constrain constrainValue constructionHistory container containsMultibyte contextInfo control convertFromOldLayers convertIffToPsd convertLightmap convertSolidTx convertTessellation convertUnit copyArray copyFlexor copyKey copySkinWeights cos cpButton cpCache cpClothSet cpCollision cpConstraint cpConvClothToMesh cpForces cpGetSolverAttr cpPanel cpProperty cpRigidCollisionFilter cpSeam cpSetEdit cpSetSolverAttr cpSolver cpSolverTypes cpTool cpUpdateClothUVs createDisplayLayer createDrawCtx createEditor createLayeredPsdFile createMotionField createNewShelf createNode createRenderLayer createSubdivRegion cross crossProduct ctxAbort ctxCompletion ctxEditMode ctxTraverse currentCtx currentTime currentTimeCtx currentUnit curve curveAddPtCtx curveCVCtx curveEPCtx curveEditorCtx curveIntersect curveMoveEPCtx curveOnSurface curveSketchCtx cutKey cycleCheck cylinder dagPose date defaultLightListCheckBox defaultNavigation defineDataServer defineVirtualDevice deformer deg_to_rad delete deleteAttr deleteShadingGroupsAndMaterials deleteShelfTab deleteUI deleteUnusedBrushes delrandstr detachCurve detachDeviceAttr detachSurface deviceEditor devicePanel dgInfo dgdirty dgeval dgtimer dimWhen directKeyCtx directionalLight dirmap dirname disable disconnectAttr disconnectJoint diskCache displacementToPoly displayAffected displayColor displayCull displayLevelOfDetail displayPref displayRGBColor displaySmoothness displayStats displayString displaySurface distanceDimContext distanceDimension doBlur dolly dollyCtx dopeSheetEditor dot dotProduct doubleProfileBirailSurface drag dragAttrContext draggerContext dropoffLocator duplicate duplicateCurve duplicateSurface dynCache dynControl dynExport dynExpression dynGlobals dynPaintEditor dynParticleCtx dynPref dynRelEdPanel dynRelEditor dynamicLoad editAttrLimits editDisplayLayerGlobals editDisplayLayerMembers editRenderLayerAdjustment editRenderLayerGlobals editRenderLayerMembers editor editorTemplate effector emit emitter enableDevice encodeString endString endsWith env equivalent equivalentTol erf error eval evalDeferred evalEcho event exactWorldBoundingBox exclusiveLightCheckBox exec executeForEachObject exists exp expression expressionEditorListen extendCurve extendSurface extrude fcheck fclose feof fflush fgetline fgetword file fileBrowserDialog fileDialog fileExtension fileInfo filetest filletCurve filter filterCurve filterExpand filterStudioImport findAllIntersections findAnimCurves findKeyframe findMenuItem findRelatedSkinCluster finder firstParentOf fitBspline flexor floatEq floatField floatFieldGrp floatScrollBar floatSlider floatSlider2 floatSliderButtonGrp floatSliderGrp floor flow fluidCacheInfo fluidEmitter fluidVoxelInfo flushUndo fmod fontDialog fopen formLayout format fprint frameLayout fread freeFormFillet frewind fromNativePath fwrite gamma gauss geometryConstraint getApplicationVersionAsFloat getAttr getClassification getDefaultBrush getFileList getFluidAttr getInputDeviceRange getMayaPanelTypes getModifiers getPanel getParticleAttr getPluginResource getenv getpid glRender glRenderEditor globalStitch gmatch goal gotoBindPose grabColor gradientControl gradientControlNoAttr graphDollyCtx graphSelectContext graphTrackCtx gravity grid gridLayout group groupObjectsByName HfAddAttractorToAS HfAssignAS HfBuildEqualMap HfBuildFurFiles HfBuildFurImages HfCancelAFR HfConnectASToHF HfCreateAttractor HfDeleteAS HfEditAS HfPerformCreateAS HfRemoveAttractorFromAS HfSelectAttached HfSelectAttractors HfUnAssignAS hardenPointCurve hardware hardwareRenderPanel headsUpDisplay headsUpMessage help helpLine hermite hide hilite hitTest hotBox hotkey hotkeyCheck hsv_to_rgb hudButton hudSlider hudSliderButton hwReflectionMap hwRender hwRenderLoad hyperGraph hyperPanel hyperShade hypot iconTextButton iconTextCheckBox iconTextRadioButton iconTextRadioCollection iconTextScrollList iconTextStaticLabel ikHandle ikHandleCtx ikHandleDisplayScale ikSolver ikSplineHandleCtx ikSystem ikSystemInfo ikfkDisplayMethod illustratorCurves image imfPlugins inheritTransform insertJoint insertJointCtx insertKeyCtx insertKnotCurve insertKnotSurface instance instanceable instancer intField intFieldGrp intScrollBar intSlider intSliderGrp interToUI internalVar intersect iprEngine isAnimCurve isConnected isDirty isParentOf isSameObject isTrue isValidObjectName isValidString isValidUiName isolateSelect itemFilter itemFilterAttr itemFilterRender itemFilterType joint jointCluster jointCtx jointDisplayScale jointLattice keyTangent keyframe keyframeOutliner keyframeRegionCurrentTimeCtx keyframeRegionDirectKeyCtx keyframeRegionDollyCtx keyframeRegionInsertKeyCtx keyframeRegionMoveKeyCtx keyframeRegionScaleKeyCtx keyframeRegionSelectKeyCtx keyframeRegionSetKeyCtx keyframeRegionTrackCtx keyframeStats lassoContext lattice latticeDeformKeyCtx launch launchImageEditor layerButton layeredShaderPort layeredTexturePort layout layoutDialog lightList lightListEditor lightListPanel lightlink lineIntersection linearPrecision linstep listAnimatable listAttr listCameras listConnections listDeviceAttachments listHistory listInputDeviceAxes listInputDeviceButtons listInputDevices listMenuAnnotation listNodeTypes listPanelCategories listRelatives listSets listTransforms listUnselected listerEditor loadFluid loadNewShelf loadPlugin loadPluginLanguageResources loadPrefObjects localizedPanelLabel lockNode loft log longNameOf lookThru ls lsThroughFilter lsType lsUI Mayatomr mag makeIdentity makeLive makePaintable makeRoll makeSingleSurface makeTubeOn makebot manipMoveContext manipMoveLimitsCtx manipOptions manipRotateContext manipRotateLimitsCtx manipScaleContext manipScaleLimitsCtx marker match max memory menu menuBarLayout menuEditor menuItem menuItemToShelf menuSet menuSetPref messageLine min minimizeApp mirrorJoint modelCurrentTimeCtx modelEditor modelPanel mouse movIn movOut move moveIKtoFK moveKeyCtx moveVertexAlongDirection multiProfileBirailSurface mute nParticle nameCommand nameField namespace namespaceInfo newPanelItems newton nodeCast nodeIconButton nodeOutliner nodePreset nodeType noise nonLinear normalConstraint normalize nurbsBoolean nurbsCopyUVSet nurbsCube nurbsEditUV nurbsPlane nurbsSelect nurbsSquare nurbsToPoly nurbsToPolygonsPref nurbsToSubdiv nurbsToSubdivPref nurbsUVSet nurbsViewDirectionVector objExists objectCenter objectLayer objectType objectTypeUI obsoleteProc oceanNurbsPreviewPlane offsetCurve offsetCurveOnSurface offsetSurface openGLExtension openMayaPref optionMenu optionMenuGrp optionVar orbit orbitCtx orientConstraint outlinerEditor outlinerPanel overrideModifier paintEffectsDisplay pairBlend palettePort paneLayout panel panelConfiguration panelHistory paramDimContext paramDimension paramLocator parent parentConstraint particle particleExists particleInstancer particleRenderInfo partition pasteKey pathAnimation pause pclose percent performanceOptions pfxstrokes pickWalk picture pixelMove planarSrf plane play playbackOptions playblast plugAttr plugNode pluginInfo pluginResourceUtil pointConstraint pointCurveConstraint pointLight pointMatrixMult pointOnCurve pointOnSurface pointPosition poleVectorConstraint polyAppend polyAppendFacetCtx polyAppendVertex polyAutoProjection polyAverageNormal polyAverageVertex polyBevel polyBlendColor polyBlindData polyBoolOp polyBridgeEdge polyCacheMonitor polyCheck polyChipOff polyClipboard polyCloseBorder polyCollapseEdge polyCollapseFacet polyColorBlindData polyColorDel polyColorPerVertex polyColorSet polyCompare polyCone polyCopyUV polyCrease polyCreaseCtx polyCreateFacet polyCreateFacetCtx polyCube polyCut polyCutCtx polyCylinder polyCylindricalProjection polyDelEdge polyDelFacet polyDelVertex polyDuplicateAndConnect polyDuplicateEdge polyEditUV polyEditUVShell polyEvaluate polyExtrudeEdge polyExtrudeFacet polyExtrudeVertex polyFlipEdge polyFlipUV polyForceUV polyGeoSampler polyHelix polyInfo polyInstallAction polyLayoutUV polyListComponentConversion polyMapCut polyMapDel polyMapSew polyMapSewMove polyMergeEdge polyMergeEdgeCtx polyMergeFacet polyMergeFacetCtx polyMergeUV polyMergeVertex polyMirrorFace polyMoveEdge polyMoveFacet polyMoveFacetUV polyMoveUV polyMoveVertex polyNormal polyNormalPerVertex polyNormalizeUV polyOptUvs polyOptions polyOutput polyPipe polyPlanarProjection polyPlane polyPlatonicSolid polyPoke polyPrimitive polyPrism polyProjection polyPyramid polyQuad polyQueryBlindData polyReduce polySelect polySelectConstraint polySelectConstraintMonitor polySelectCtx polySelectEditCtx polySeparate polySetToFaceNormal polySewEdge polyShortestPathCtx polySmooth polySoftEdge polySphere polySphericalProjection polySplit polySplitCtx polySplitEdge polySplitRing polySplitVertex polyStraightenUVBorder polySubdivideEdge polySubdivideFacet polyToSubdiv polyTorus polyTransfer polyTriangulate polyUVSet polyUnite polyWedgeFace popen popupMenu pose pow preloadRefEd print progressBar progressWindow projFileViewer projectCurve projectTangent projectionContext projectionManip promptDialog propModCtx propMove psdChannelOutliner psdEditTextureFile psdExport psdTextureFile putenv pwd python querySubdiv quit rad_to_deg radial radioButton radioButtonGrp radioCollection radioMenuItemCollection rampColorPort rand randomizeFollicles randstate rangeControl readTake rebuildCurve rebuildSurface recordAttr recordDevice redo reference referenceEdit referenceQuery refineSubdivSelectionList refresh refreshAE registerPluginResource rehash reloadImage removeJoint removeMultiInstance removePanelCategory rename renameAttr renameSelectionList renameUI render renderGlobalsNode renderInfo renderLayerButton renderLayerParent renderLayerPostProcess renderLayerUnparent renderManip renderPartition renderQualityNode renderSettings renderThumbnailUpdate renderWindowEditor renderWindowSelectContext renderer reorder reorderDeformers requires reroot resampleFluid resetAE resetPfxToPolyCamera resetTool resolutionNode retarget reverseCurve reverseSurface revolve rgb_to_hsv rigidBody rigidSolver roll rollCtx rootOf rot rotate rotationInterpolation roundConstantRadius rowColumnLayout rowLayout runTimeCommand runup sampleImage saveAllShelves saveAttrPreset saveFluid saveImage saveInitialState saveMenu savePrefObjects savePrefs saveShelf saveToolSettings scale scaleBrushBrightness scaleComponents scaleConstraint scaleKey scaleKeyCtx sceneEditor sceneUIReplacement scmh scriptCtx scriptEditorInfo scriptJob scriptNode scriptTable scriptToShelf scriptedPanel scriptedPanelType scrollField scrollLayout sculpt searchPathArray seed selLoadSettings select selectContext selectCurveCV selectKey selectKeyCtx selectKeyframeRegionCtx selectMode selectPref selectPriority selectType selectedNodes selectionConnection separator setAttr setAttrEnumResource setAttrMapping setAttrNiceNameResource setConstraintRestPosition setDefaultShadingGroup setDrivenKeyframe setDynamic setEditCtx setEditor setFluidAttr setFocus setInfinity setInputDeviceMapping setKeyCtx setKeyPath setKeyframe setKeyframeBlendshapeTargetWts setMenuMode setNodeNiceNameResource setNodeTypeFlag setParent setParticleAttr setPfxToPolyCamera setPluginResource setProject setStampDensity setStartupMessage setState setToolTo setUITemplate setXformManip sets shadingConnection shadingGeometryRelCtx shadingLightRelCtx shadingNetworkCompare shadingNode shapeCompare shelfButton shelfLayout shelfTabLayout shellField shortNameOf showHelp showHidden showManipCtx showSelectionInTitle showShadingGroupAttrEditor showWindow sign simplify sin singleProfileBirailSurface size sizeBytes skinCluster skinPercent smoothCurve smoothTangentSurface smoothstep snap2to2 snapKey snapMode snapTogetherCtx snapshot soft softMod softModCtx sort sound soundControl source spaceLocator sphere sphrand spotLight spotLightPreviewPort spreadSheetEditor spring sqrt squareSurface srtContext stackTrace startString startsWith stitchAndExplodeShell stitchSurface stitchSurfacePoints strcmp stringArrayCatenate stringArrayContains stringArrayCount stringArrayInsertAtIndex stringArrayIntersector stringArrayRemove stringArrayRemoveAtIndex stringArrayRemoveDuplicates stringArrayRemoveExact stringArrayToString stringToStringArray strip stripPrefixFromName stroke subdAutoProjection subdCleanTopology subdCollapse subdDuplicateAndConnect subdEditUV subdListComponentConversion subdMapCut subdMapSewMove subdMatchTopology subdMirror subdToBlind subdToPoly subdTransferUVsToCache subdiv subdivCrease subdivDisplaySmoothness substitute substituteAllString substituteGeometry substring surface surfaceSampler surfaceShaderList swatchDisplayPort switchTable symbolButton symbolCheckBox sysFile system tabLayout tan tangentConstraint texLatticeDeformContext texManipContext texMoveContext texMoveUVShellContext texRotateContext texScaleContext texSelectContext texSelectShortestPathCtx texSmudgeUVContext texWinToolCtx text textCurves textField textFieldButtonGrp textFieldGrp textManip textScrollList textToShelf textureDisplacePlane textureHairColor texturePlacementContext textureWindow threadCount threePointArcCtx timeControl timePort timerX toNativePath toggle toggleAxis toggleWindowVisibility tokenize tokenizeList tolerance tolower toolButton toolCollection toolDropped toolHasOptions toolPropertyWindow torus toupper trace track trackCtx transferAttributes transformCompare transformLimits translator trim trunc truncateFluidCache truncateHairCache tumble tumbleCtx turbulence twoPointArcCtx uiRes uiTemplate unassignInputDevice undo undoInfo ungroup uniform unit unloadPlugin untangleUV untitledFileName untrim upAxis updateAE userCtx uvLink uvSnapshot validateShelfName vectorize view2dToolCtx viewCamera viewClipPlane viewFit viewHeadOn viewLookAt viewManip viewPlace viewSet visor volumeAxis vortex waitCursor warning webBrowser webBrowserPrefs whatIs window windowPref wire wireContext workspace wrinkle wrinkleContext writeTake xbmLangPathList xform",illegal:"</",contains:[a.C_NUMBER_MODE,a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,{className:"string",begin:"`",end:"`",contains:[a.BACKSLASH_ESCAPE]},{className:"variable",variants:[{begin:"\\$\\d"},{begin:"[\\$\\%\\@](\\^\\w\\b|#\\w+|[^\\s\\w{]|{\\w+}|\\w+)"},{begin:"\\*(\\^\\w\\b|#\\w+|[^\\s\\w{]|{\\w+}|\\w+)",relevance:0}]},a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE]}}),a.registerLanguage("mercury",function(a){var b={keyword:"module use_module import_module include_module end_module initialise mutable initialize finalize finalise interface implementation pred mode func type inst solver any_pred any_func is semidet det nondet multi erroneous failure cc_nondet cc_multi typeclass instance where pragma promise external trace atomic or_else require_complete_switch require_det require_semidet require_multi require_nondet require_cc_multi require_cc_nondet require_erroneous require_failure",pragma:"inline no_inline type_spec source_file fact_table obsolete memo loop_check minimal_model terminates does_not_terminate check_termination promise_equivalent_clauses",preprocessor:"foreign_proc foreign_decl foreign_code foreign_type foreign_import_module foreign_export_enum foreign_export foreign_enum may_call_mercury will_not_call_mercury thread_safe not_thread_safe maybe_thread_safe promise_pure promise_semipure tabled_for_io local untrailed trailed attach_to_io_state can_pass_as_mercury_type stable will_not_throw_exception may_modify_trail will_not_modify_trail may_duplicate may_not_duplicate affects_liveness does_not_affect_liveness doesnt_affect_liveness no_sharing unknown_sharing sharing",built_in:"some all not if then else true fail false try catch catch_any semidet_true semidet_false semidet_fail impure_true impure semipure"},c={className:"label",begin:"XXX",end:"$",endsWithParent:!0,relevance:0},d=a.inherit(a.C_LINE_COMMENT_MODE,{begin:"%"}),e=a.inherit(a.C_BLOCK_COMMENT_MODE,{relevance:0});d.contains.push(c),e.contains.push(c);var f={className:"number",begin:"0'.\\|0[box][0-9a-fA-F]*"},g=a.inherit(a.APOS_STRING_MODE,{relevance:0}),h=a.inherit(a.QUOTE_STRING_MODE,{relevance:0}),i={className:"constant",begin:"\\\\[abfnrtv]\\|\\\\x[0-9a-fA-F]*\\\\\\|%[-+# *.0-9]*[dioxXucsfeEgGp]",relevance:0};h.contains.push(i);var j={className:"built_in",variants:[{begin:"<=>"},{begin:"<=",relevance:0},{begin:"=>",relevance:0},{begin:"/\\\\"},{begin:"\\\\/"}]},k={className:"built_in",variants:[{begin:":-\\|-->"},{begin:"=",relevance:0}]};return{aliases:["m","moo"],keywords:b,contains:[j,k,d,e,f,a.NUMBER_MODE,g,h,{begin:/:-/}]}}),a.registerLanguage("mizar",function(a){return{keywords:"environ vocabularies notations constructors definitions registrations theorems schemes requirements begin end definition registration cluster existence pred func defpred deffunc theorem proof let take assume then thus hence ex for st holds consider reconsider such that and in provided of as from be being by means equals implies iff redefine define now not or attr is mode suppose per cases set thesis contradiction scheme reserve struct correctness compatibility coherence symmetry assymetry reflexivity irreflexivity connectedness uniqueness commutativity idempotence involutiveness projectivity",contains:[a.COMMENT("::","$")]}}),a.registerLanguage("perl",function(a){var b="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",c={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:b},d={begin:"->{",end:"}"},e={className:"variable",variants:[{begin:/\$\d/},{begin:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{begin:/[\$%@][^\s\w{]/,relevance:0}]},f=[a.BACKSLASH_ESCAPE,c,e],g=[e,a.HASH_COMMENT_MODE,a.COMMENT("^\\=\\w","\\=cut",{endsWithParent:!0}),d,{className:"string",contains:f,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*\\<",end:"\\>",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[a.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[a.BACKSLASH_ESCAPE]},{begin:"{\\w+}",contains:[],relevance:0},{begin:"-?\\w+\\s*\\=\\>",contains:[],relevance:0}]},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{begin:"(\\/\\/|"+a.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[a.HASH_COMMENT_MODE,{className:"regexp",begin:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",relevance:10},{className:"regexp",begin:"(m|qr)?/",end:"/[a-z]*",contains:[a.BACKSLASH_ESCAPE],relevance:0}]},{className:"sub",beginKeywords:"sub",end:"(\\s*\\(.*?\\))?[;{]",relevance:5},{className:"operator",begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return c.contains=g,d.contains=g,{aliases:["pl"],keywords:b,contains:g}}),a.registerLanguage("mojolicious",function(a){return{subLanguage:"xml",contains:[{className:"preprocessor",begin:"^__(END|DATA)__$"},{begin:"^\\s*%{1,2}={0,2}",end:"$",subLanguage:"perl"},{begin:"<%{1,2}={0,2}",end:"={0,1}%>",subLanguage:"perl",excludeBegin:!0,excludeEnd:!0}]}}),a.registerLanguage("monkey",function(a){var b={className:"number",relevance:0,variants:[{begin:"[$][a-fA-F0-9]+"},a.NUMBER_MODE]};return{case_insensitive:!0,keywords:{keyword:"public private property continue exit extern new try catch eachin not abstract final select case default const local global field end if then else elseif endif while wend repeat until forever for to step next return module inline throw",built_in:"DebugLog DebugStop Error Print ACos ACosr ASin ASinr ATan ATan2 ATan2r ATanr Abs Abs Ceil Clamp Clamp Cos Cosr Exp Floor Log Max Max Min Min Pow Sgn Sgn Sin Sinr Sqrt Tan Tanr Seed PI HALFPI TWOPI",literal:"true false null and or shl shr mod"},illegal:/\/\*/,contains:[a.COMMENT("#rem","#end"),a.COMMENT("'","$",{relevance:0}),{className:"function",beginKeywords:"function method",end:"[(=:]|$",illegal:/\n/,contains:[a.UNDERSCORE_TITLE_MODE]},{className:"class",beginKeywords:"class interface",end:"$",contains:[{beginKeywords:"extends implements"},a.UNDERSCORE_TITLE_MODE]},{className:"variable",begin:"\\b(self|super)\\b"},{className:"preprocessor",beginKeywords:"import",end:"$"},{className:"preprocessor",begin:"\\s*#",end:"$",keywords:"if else elseif endif end then"},{className:"pi",begin:"^\\s*strict\\b"},{beginKeywords:"alias",end:"=",contains:[a.UNDERSCORE_TITLE_MODE]},a.QUOTE_STRING_MODE,b]}}),a.registerLanguage("nginx",function(a){var b={className:"variable",variants:[{begin:/\$\d+/},{begin:/\$\{/,end:/}/},{begin:"[\\$\\@]"+a.UNDERSCORE_IDENT_RE}]},c={endsWithParent:!0,lexemes:"[a-z/_]+",keywords:{built_in:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},relevance:0,illegal:"=>",contains:[a.HASH_COMMENT_MODE,{className:"string",contains:[a.BACKSLASH_ESCAPE,b],variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/}]},{className:"url",begin:"([a-z]+):/",end:"\\s",endsWithParent:!0,excludeEnd:!0,contains:[b]},{className:"regexp",contains:[a.BACKSLASH_ESCAPE,b],variants:[{begin:"\\s\\^",end:"\\s|{|;",returnEnd:!0},{begin:"~\\*?\\s+",end:"\\s|{|;",returnEnd:!0},{begin:"\\*(\\.[a-z\\-]+)+"},{begin:"([a-z\\-]+\\.)+\\*"}]},{className:"number",begin:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{className:"number",begin:"\\b\\d+[kKmMgGdshdwy]*\\b",relevance:0},b]};return{aliases:["nginxconf"],contains:[a.HASH_COMMENT_MODE,{begin:a.UNDERSCORE_IDENT_RE+"\\s",end:";|{",returnBegin:!0,contains:[{className:"title",begin:a.UNDERSCORE_IDENT_RE,starts:c}],relevance:0}],illegal:"[^\\s\\}]"}}),a.registerLanguage("nimrod",function(a){return{aliases:["nim"],keywords:{keyword:"addr and as asm bind block break|0 case|0 cast const|0 continue|0 converter discard distinct|10 div do elif else|0 end|0 enum|0 except export finally for from generic if|0 import|0 in include|0 interface is isnot|10 iterator|10 let|0 macro method|10 mixin mod nil not notin|10 object|0 of or out proc|10 ptr raise ref|10 return shl shr static template try|0 tuple type|0 using|0 var|0 when while|0 with without xor yield",literal:"shared guarded stdin stdout stderr result|10 true false"},contains:[{className:"decorator",begin:/{\./,end:/\.}/,relevance:10},{className:"string",begin:/[a-zA-Z]\w*"/,end:/"/,contains:[{begin:/""/}]},{className:"string",begin:/([a-zA-Z]\w*)?"""/,end:/"""/},a.QUOTE_STRING_MODE,{className:"type",begin:/\b[A-Z]\w+\b/,relevance:0},{className:"type",begin:/\b(int|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|float|float32|float64|bool|char|string|cstring|pointer|expr|stmt|void|auto|any|range|array|openarray|varargs|seq|set|clong|culong|cchar|cschar|cshort|cint|csize|clonglong|cfloat|cdouble|clongdouble|cuchar|cushort|cuint|culonglong|cstringarray|semistatic)\b/},{className:"number",begin:/\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/,relevance:0},{className:"number",begin:/\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/,relevance:0},{className:"number",begin:/\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/,relevance:0},{className:"number",begin:/\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/,relevance:0},a.HASH_COMMENT_MODE]}}),a.registerLanguage("nix",function(a){var b={keyword:"rec with let in inherit assert if else then",constant:"true false or and null",built_in:"import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation"},c={className:"subst",begin:/\$\{/,end:/}/,keywords:b},d={className:"variable",begin:/[a-zA-Z0-9-_]+(\s*=)/,relevance:0},e={className:"string",begin:"''",end:"''",contains:[c]},f={className:"string",begin:'"',end:'"',contains:[c]},g=[a.NUMBER_MODE,a.HASH_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,e,f,d];return c.contains=g,{aliases:["nixos"],keywords:b,contains:g}}),a.registerLanguage("nsis",function(a){var b={className:"symbol",begin:"\\$(ADMINTOOLS|APPDATA|CDBURN_AREA|CMDLINE|COMMONFILES32|COMMONFILES64|COMMONFILES|COOKIES|DESKTOP|DOCUMENTS|EXEDIR|EXEFILE|EXEPATH|FAVORITES|FONTS|HISTORY|HWNDPARENT|INSTDIR|INTERNET_CACHE|LANGUAGE|LOCALAPPDATA|MUSIC|NETHOOD|OUTDIR|PICTURES|PLUGINSDIR|PRINTHOOD|PROFILE|PROGRAMFILES32|PROGRAMFILES64|PROGRAMFILES|QUICKLAUNCH|RECENT|RESOURCES_LOCALIZED|RESOURCES|SENDTO|SMPROGRAMS|SMSTARTUP|STARTMENU|SYSDIR|TEMP|TEMPLATES|VIDEOS|WINDIR)"},c={className:"constant",begin:"\\$+{[a-zA-Z0-9_]+}"},d={className:"variable",begin:"\\$+[a-zA-Z0-9_]+",illegal:"\\(\\){}"},e={className:"constant",begin:"\\$+\\([a-zA-Z0-9_]+\\)"},f={className:"params",begin:"(ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HKCR|HKCU|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM|HKPD|HKU|IDABORT|IDCANCEL|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY)"},g={className:"constant",begin:"\\!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversionsystem|ifdef|ifmacrodef|ifmacrondef|ifndef|if|include|insertmacro|macroend|macro|makensis|packhdr|searchparse|searchreplace|tempfile|undef|verbose|warning)"};return{case_insensitive:!1,keywords:{keyword:"Abort AddBrandingImage AddSize AllowRootDirInstall AllowSkipFiles AutoCloseWindow BGFont BGGradient BrandingText BringToFront Call CallInstDLL Caption ChangeUI CheckBitmap ClearErrors CompletedText ComponentText CopyFiles CRCCheck CreateDirectory CreateFont CreateShortCut Delete DeleteINISec DeleteINIStr DeleteRegKey DeleteRegValue DetailPrint DetailsButtonText DirText DirVar DirVerify EnableWindow EnumRegKey EnumRegValue Exch Exec ExecShell ExecWait ExpandEnvStrings File FileBufSize FileClose FileErrorText FileOpen FileRead FileReadByte FileReadUTF16LE FileReadWord FileSeek FileWrite FileWriteByte FileWriteUTF16LE FileWriteWord FindClose FindFirst FindNext FindWindow FlushINI FunctionEnd GetCurInstType GetCurrentAddress GetDlgItem GetDLLVersion GetDLLVersionLocal GetErrorLevel GetFileTime GetFileTimeLocal GetFullPathName GetFunctionAddress GetInstDirError GetLabelAddress GetTempFileName Goto HideWindow Icon IfAbort IfErrors IfFileExists IfRebootFlag IfSilent InitPluginsDir InstallButtonText InstallColors InstallDir InstallDirRegKey InstProgressFlags InstType InstTypeGetText InstTypeSetText IntCmp IntCmpU IntFmt IntOp IsWindow LangString LicenseBkColor LicenseData LicenseForceSelection LicenseLangString LicenseText LoadLanguageFile LockWindow LogSet LogText ManifestDPIAware ManifestSupportedOS MessageBox MiscButtonText Name Nop OutFile Page PageCallbacks PageExEnd Pop Push Quit ReadEnvStr ReadINIStr ReadRegDWORD ReadRegStr Reboot RegDLL Rename RequestExecutionLevel ReserveFile Return RMDir SearchPath SectionEnd SectionGetFlags SectionGetInstTypes SectionGetSize SectionGetText SectionGroupEnd SectionIn SectionSetFlags SectionSetInstTypes SectionSetSize SectionSetText SendMessage SetAutoClose SetBrandingImage SetCompress SetCompressor SetCompressorDictSize SetCtlColors SetCurInstType SetDatablockOptimize SetDateSave SetDetailsPrint SetDetailsView SetErrorLevel SetErrors SetFileAttributes SetFont SetOutPath SetOverwrite SetPluginUnload SetRebootFlag SetRegView SetShellVarContext SetSilent ShowInstDetails ShowUninstDetails ShowWindow SilentInstall SilentUnInstall Sleep SpaceTexts StrCmp StrCmpS StrCpy StrLen SubCaption SubSectionEnd Unicode UninstallButtonText UninstallCaption UninstallIcon UninstallSubCaption UninstallText UninstPage UnRegDLL Var VIAddVersionKey VIFileVersion VIProductVersion WindowIcon WriteINIStr WriteRegBin WriteRegDWORD WriteRegExpandStr WriteRegStr WriteUninstaller XPStyle",
+literal:"admin all auto both colored current false force hide highest lastused leave listonly none normal notset off on open print show silent silentlog smooth textonly true user "},contains:[a.HASH_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,{className:"string",begin:'"',end:'"',illegal:"\\n",contains:[{className:"symbol",begin:"\\$(\\\\(n|r|t)|\\$)"},b,c,d,e]},a.COMMENT(";","$",{relevance:0}),{className:"function",beginKeywords:"Function PageEx Section SectionGroup SubSection",end:"$"},g,c,d,e,f,a.NUMBER_MODE,{className:"literal",begin:a.IDENT_RE+"::"+a.IDENT_RE}]}}),a.registerLanguage("objectivec",function(a){var b={className:"built_in",begin:"(AV|CA|CF|CG|CI|MK|MP|NS|UI)\\w+"},c={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},d=/[a-zA-Z@][a-zA-Z0-9_]*/,e="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],keywords:c,lexemes:d,illegal:"</",contains:[b,a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.C_NUMBER_MODE,a.QUOTE_STRING_MODE,{className:"string",variants:[{begin:'@"',end:'"',illegal:"\\n",contains:[a.BACKSLASH_ESCAPE]},{begin:"'",end:"[^\\\\]'",illegal:"[^\\\\][^']"}]},{className:"preprocessor",begin:"#",end:"$",contains:[{className:"title",variants:[{begin:'"',end:'"'},{begin:"<",end:">"}]}]},{className:"class",begin:"("+e.split(" ").join("|")+")\\b",end:"({|$)",excludeEnd:!0,keywords:e,lexemes:d,contains:[a.UNDERSCORE_TITLE_MODE]},{className:"variable",begin:"\\."+a.UNDERSCORE_IDENT_RE,relevance:0}]}}),a.registerLanguage("ocaml",function(a){return{aliases:["ml"],keywords:{keyword:"and as assert asr begin class constraint do done downto else end exception external for fun function functor if in include inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method mod module mutable new object of open! open or private rec sig struct then to try type val! val virtual when while with parser value",built_in:"array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit in_channel out_channel ref",literal:"true false"},illegal:/\/\/|>>/,lexemes:"[a-z_]\\w*!?",contains:[{className:"literal",begin:"\\[(\\|\\|)?\\]|\\(\\)",relevance:0},a.COMMENT("\\(\\*","\\*\\)",{contains:["self"]}),{className:"symbol",begin:"'[A-Za-z_](?!')[\\w']*"},{className:"tag",begin:"`[A-Z][\\w']*"},{className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},{begin:"[a-z_]\\w*'[\\w']*"},a.inherit(a.APOS_STRING_MODE,{className:"char",relevance:0}),a.inherit(a.QUOTE_STRING_MODE,{illegal:null}),{className:"number",begin:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",relevance:0},{begin:/[-=]>/}]}}),a.registerLanguage("openscad",function(a){var b={className:"keyword",begin:"\\$(f[asn]|t|vp[rtd]|children)"},c={className:"literal",begin:"false|true|PI|undef"},d={className:"number",begin:"\\b\\d+(\\.\\d+)?(e-?\\d+)?",relevance:0},e=a.inherit(a.QUOTE_STRING_MODE,{illegal:null}),f={className:"preprocessor",keywords:"include use",begin:"include|use <",end:">"},g={className:"params",begin:"\\(",end:"\\)",contains:["self",d,e,b,c]},h={className:"built_in",begin:"[*!#%]",relevance:0},i={className:"function",beginKeywords:"module function",end:"\\=|\\{",contains:[g,a.UNDERSCORE_TITLE_MODE]};return{aliases:["scad"],keywords:{keyword:"function module include use for intersection_for if else \\%",literal:"false true PI undef",built_in:"circle square polygon text sphere cube cylinder polyhedron translate rotate scale resize mirror multmatrix color offset hull minkowski union difference intersection abs sign sin cos tan acos asin atan atan2 floor round ceil ln log pow sqrt exp rands min max concat lookup str chr search version version_num norm cross parent_module echo import import_dxf dxf_linear_extrude linear_extrude rotate_extrude surface projection render children dxf_cross dxf_dim let assign"},contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,d,f,e,b,h,i]}}),a.registerLanguage("oxygene",function(a){var b="abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained",c=a.COMMENT("{","}",{relevance:0}),d=a.COMMENT("\\(\\*","\\*\\)",{relevance:10}),e={className:"string",begin:"'",end:"'",contains:[{begin:"''"}]},f={className:"string",begin:"(#\\d+)+"},g={className:"function",beginKeywords:"function constructor destructor procedure method",end:"[:;]",keywords:"function constructor|10 destructor|10 procedure|10 method|10",contains:[a.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",keywords:b,contains:[e,f]},c,d]};return{case_insensitive:!0,keywords:b,illegal:'("|\\$[G-Zg-z]|\\/\\*|</|=>|->)',contains:[c,d,a.C_LINE_COMMENT_MODE,e,f,a.NUMBER_MODE,g,{className:"class",begin:"=\\bclass\\b",end:"end;",keywords:b,contains:[e,f,c,d,a.C_LINE_COMMENT_MODE,g]}]}}),a.registerLanguage("parser3",function(a){var b=a.COMMENT("{","}",{contains:["self"]});return{subLanguage:"xml",relevance:0,contains:[a.COMMENT("^#","$"),a.COMMENT("\\^rem{","}",{relevance:10,contains:[b]}),{className:"preprocessor",begin:"^@(?:BASE|USE|CLASS|OPTIONS)$",relevance:10},{className:"title",begin:"@[\\w\\-]+\\[[\\w^;\\-]*\\](?:\\[[\\w^;\\-]*\\])?(?:.*)$"},{className:"variable",begin:"\\$\\{?[\\w\\-\\.\\:]+\\}?"},{className:"keyword",begin:"\\^[\\w\\-\\.\\:]+"},{className:"number",begin:"\\^#[0-9a-fA-F]+"},a.C_NUMBER_MODE]}}),a.registerLanguage("pf",function(a){var b={className:"variable",begin:/\$[\w\d#@][\w\d_]*/},c={className:"variable",begin:/</,end:/>/};return{aliases:["pf.conf"],lexemes:/[a-z0-9_<>-]+/,keywords:{built_in:"block match pass load anchor|5 antispoof|10 set table",keyword:"in out log quick on rdomain inet inet6 proto from port os to routeallow-opts divert-packet divert-reply divert-to flags group icmp-typeicmp6-type label once probability recieved-on rtable prio queuetos tag tagged user keep fragment for os dropaf-to|10 binat-to|10 nat-to|10 rdr-to|10 bitmask least-stats random round-robinsource-hash static-portdup-to reply-to route-toparent bandwidth default min max qlimitblock-policy debug fingerprints hostid limit loginterface optimizationreassemble ruleset-optimization basic none profile skip state-defaultsstate-policy timeoutconst counters persistno modulate synproxy state|5 floating if-bound no-sync pflow|10 sloppysource-track global rule max-src-nodes max-src-states max-src-connmax-src-conn-rate overload flushscrub|5 max-mss min-ttl no-df|10 random-id",literal:"all any no-route self urpf-failed egress|5 unknown"},contains:[a.HASH_COMMENT_MODE,a.NUMBER_MODE,a.QUOTE_STRING_MODE,b,c]}}),a.registerLanguage("php",function(a){var b={className:"variable",begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},c={className:"preprocessor",begin:/<\?(php)?|\?>/},d={className:"string",contains:[a.BACKSLASH_ESCAPE,c],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},a.inherit(a.APOS_STRING_MODE,{illegal:null}),a.inherit(a.QUOTE_STRING_MODE,{illegal:null})]},e={variants:[a.BINARY_NUMBER_MODE,a.C_NUMBER_MODE]};return{aliases:["php3","php4","php5","php6"],case_insensitive:!0,keywords:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",contains:[a.C_LINE_COMMENT_MODE,a.HASH_COMMENT_MODE,a.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"},c]}),a.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler",lexemes:a.UNDERSCORE_IDENT_RE}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[a.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},c,b,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"function",end:/[;{]/,excludeEnd:!0,illegal:"\\$|\\[|%",contains:[a.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:["self",b,a.C_BLOCK_COMMENT_MODE,d,e]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},a.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[a.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[a.UNDERSCORE_TITLE_MODE]},{begin:"=>"},d,e]}}),a.registerLanguage("powershell",function(a){var b={begin:"`[\\s\\S]",relevance:0},c={className:"variable",variants:[{begin:/\$[\w\d][\w\d_:]*/}]},d={className:"string",begin:/"/,end:/"/,contains:[b,c,{className:"variable",begin:/\$[A-z]/,end:/[^A-z]/}]},e={className:"string",begin:/'/,end:/'/};return{aliases:["ps"],lexemes:/-?[A-z\.\-]+/,case_insensitive:!0,keywords:{keyword:"if else foreach return function do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch",literal:"$null $true $false",built_in:"Add-Content Add-History Add-Member Add-PSSnapin Clear-Content Clear-Item Clear-Item Property Clear-Variable Compare-Object ConvertFrom-SecureString Convert-Path ConvertTo-Html ConvertTo-SecureString Copy-Item Copy-ItemProperty Export-Alias Export-Clixml Export-Console Export-Csv ForEach-Object Format-Custom Format-List Format-Table Format-Wide Get-Acl Get-Alias Get-AuthenticodeSignature Get-ChildItem Get-Command Get-Content Get-Credential Get-Culture Get-Date Get-EventLog Get-ExecutionPolicy Get-Help Get-History Get-Host Get-Item Get-ItemProperty Get-Location Get-Member Get-PfxCertificate Get-Process Get-PSDrive Get-PSProvider Get-PSSnapin Get-Service Get-TraceSource Get-UICulture Get-Unique Get-Variable Get-WmiObject Group-Object Import-Alias Import-Clixml Import-Csv Invoke-Expression Invoke-History Invoke-Item Join-Path Measure-Command Measure-Object Move-Item Move-ItemProperty New-Alias New-Item New-ItemProperty New-Object New-PSDrive New-Service New-TimeSpan New-Variable Out-Default Out-File Out-Host Out-Null Out-Printer Out-String Pop-Location Push-Location Read-Host Remove-Item Remove-ItemProperty Remove-PSDrive Remove-PSSnapin Remove-Variable Rename-Item Rename-ItemProperty Resolve-Path Restart-Service Resume-Service Select-Object Select-String Set-Acl Set-Alias Set-AuthenticodeSignature Set-Content Set-Date Set-ExecutionPolicy Set-Item Set-ItemProperty Set-Location Set-PSDebug Set-Service Set-TraceSource Set-Variable Sort-Object Split-Path Start-Service Start-Sleep Start-Transcript Stop-Process Stop-Service Stop-Transcript Suspend-Service Tee-Object Test-Path Trace-Command Update-FormatData Update-TypeData Where-Object Write-Debug Write-Error Write-Host Write-Output Write-Progress Write-Verbose Write-Warning",operator:"-ne -eq -lt -gt -ge -le -not -like -notlike -match -notmatch -contains -notcontains -in -notin -replace"},contains:[a.HASH_COMMENT_MODE,a.NUMBER_MODE,d,e,c]}}),a.registerLanguage("processing",function(a){return{keywords:{keyword:"BufferedReader PVector PFont PImage PGraphics HashMap boolean byte char color double float int long String Array FloatDict FloatList IntDict IntList JSONArray JSONObject Object StringDict StringList Table TableRow XML false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private",constant:"P2D P3D HALF_PI PI QUARTER_PI TAU TWO_PI",variable:"displayHeight displayWidth mouseY mouseX mousePressed pmouseX pmouseY key keyCode pixels focused frameCount frameRate height width",title:"setup draw",built_in:"size createGraphics beginDraw createShape loadShape PShape arc ellipse line point quad rect triangle bezier bezierDetail bezierPoint bezierTangent curve curveDetail curvePoint curveTangent curveTightness shape shapeMode beginContour beginShape bezierVertex curveVertex endContour endShape quadraticVertex vertex ellipseMode noSmooth rectMode smooth strokeCap strokeJoin strokeWeight mouseClicked mouseDragged mouseMoved mousePressed mouseReleased mouseWheel keyPressed keyPressedkeyReleased keyTyped print println save saveFrame day hour millis minute month second year background clear colorMode fill noFill noStroke stroke alpha blue brightness color green hue lerpColor red saturation modelX modelY modelZ screenX screenY screenZ ambient emissive shininess specular add createImage beginCamera camera endCamera frustum ortho perspective printCamera printProjection cursor frameRate noCursor exit loop noLoop popStyle pushStyle redraw binary boolean byte char float hex int str unbinary unhex join match matchAll nf nfc nfp nfs split splitTokens trim append arrayCopy concat expand reverse shorten sort splice subset box sphere sphereDetail createInput createReader loadBytes loadJSONArray loadJSONObject loadStrings loadTable loadXML open parseXML saveTable selectFolder selectInput beginRaw beginRecord createOutput createWriter endRaw endRecord PrintWritersaveBytes saveJSONArray saveJSONObject saveStream saveStrings saveXML selectOutput popMatrix printMatrix pushMatrix resetMatrix rotate rotateX rotateY rotateZ scale shearX shearY translate ambientLight directionalLight lightFalloff lights lightSpecular noLights normal pointLight spotLight image imageMode loadImage noTint requestImage tint texture textureMode textureWrap blend copy filter get loadPixels set updatePixels blendMode loadShader PShaderresetShader shader createFont loadFont text textFont textAlign textLeading textMode textSize textWidth textAscent textDescent abs ceil constrain dist exp floor lerp log mag map max min norm pow round sq sqrt acos asin atan atan2 cos degrees radians sin tan noise noiseDetail noiseSeed random randomGaussian randomSeed"},contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.C_NUMBER_MODE]}}),a.registerLanguage("profile",function(a){return{contains:[a.C_NUMBER_MODE,{className:"built_in",begin:"{",end:"}$",excludeBegin:!0,excludeEnd:!0,contains:[a.APOS_STRING_MODE,a.QUOTE_STRING_MODE],relevance:0},{className:"filename",begin:"[a-zA-Z_][\\da-zA-Z_]+\\.[\\da-zA-Z_]{1,3}",end:":",excludeEnd:!0},{className:"header",begin:"(ncalls|tottime|cumtime)",end:"$",keywords:"ncalls tottime|10 cumtime|10 filename",relevance:10},{className:"summary",begin:"function calls",end:"$",contains:[a.C_NUMBER_MODE],relevance:10},a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,{className:"function",begin:"\\(",end:"\\)$",contains:[a.UNDERSCORE_TITLE_MODE],relevance:0}]}}),a.registerLanguage("prolog",function(a){var b={className:"atom",begin:/[a-z][A-Za-z0-9_]*/,relevance:0},c={className:"name",variants:[{begin:/[A-Z][a-zA-Z0-9_]*/},{begin:/_[A-Za-z0-9_]*/}],relevance:0},d={begin:/\(/,end:/\)/,relevance:0},e={begin:/\[/,end:/\]/},f={className:"comment",begin:/%/,end:/$/,contains:[a.PHRASAL_WORDS_MODE]},g={className:"string",begin:/`/,end:/`/,contains:[a.BACKSLASH_ESCAPE]},h={className:"string",begin:/0\'(\\\'|.)/},i={className:"string",begin:/0\'\\s/},j={begin:/:-/},k=[b,c,d,j,e,f,a.C_BLOCK_COMMENT_MODE,a.QUOTE_STRING_MODE,a.APOS_STRING_MODE,g,h,i,a.C_NUMBER_MODE];return d.contains=k,e.contains=k,{contains:k.concat([{begin:/\.$/}])}}),a.registerLanguage("protobuf",function(a){return{keywords:{keyword:"package import option optional required repeated group",built_in:"double float int32 int64 uint32 uint64 sint32 sint64 fixed32 fixed64 sfixed32 sfixed64 bool string bytes",literal:"true false"},contains:[a.QUOTE_STRING_MODE,a.NUMBER_MODE,a.C_LINE_COMMENT_MODE,{className:"class",beginKeywords:"message enum service",end:/\{/,illegal:/\n/,contains:[a.inherit(a.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{className:"function",beginKeywords:"rpc",end:/;/,excludeEnd:!0,keywords:"rpc returns"},{className:"constant",begin:/^\s*[A-Z_]+/,end:/\s*=/,excludeEnd:!0}]}}),a.registerLanguage("puppet",function(a){var b={keyword:"and case default else elsif false if in import enherits node or true undef unless main settings $string ",literal:"alias audit before loglevel noop require subscribe tag owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check en_address ip_address realname command environment hour monute month monthday special target weekday creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey sslverify mounted",built_in:"architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version"},c=a.COMMENT("#","$"),d="([A-Za-z_]|::)(\\w|::)*",e=a.inherit(a.TITLE_MODE,{begin:d}),f={className:"variable",begin:"\\$"+d},g={className:"string",contains:[a.BACKSLASH_ESCAPE,f],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/}]};return{aliases:["pp"],contains:[c,f,g,{beginKeywords:"class",end:"\\{|;",illegal:/=/,contains:[e,c]},{beginKeywords:"define",end:/\{/,contains:[{className:"title",begin:a.IDENT_RE,endsParent:!0}]},{begin:a.IDENT_RE+"\\s+\\{",returnBegin:!0,end:/\S/,contains:[{className:"name",begin:a.IDENT_RE},{begin:/\{/,end:/\}/,keywords:b,relevance:0,contains:[g,c,{begin:"[a-zA-Z_]+\\s*=>"},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},f]}],relevance:0}]}}),a.registerLanguage("python",function(a){var b={className:"prompt",begin:/^(>>>|\.\.\.) /},c={className:"string",contains:[a.BACKSLASH_ESCAPE],variants:[{begin:/(u|b)?r?'''/,end:/'''/,contains:[b],relevance:10},{begin:/(u|b)?r?"""/,end:/"""/,contains:[b],relevance:10},{begin:/(u|r|ur)'/,end:/'/,relevance:10},{begin:/(u|r|ur)"/,end:/"/,relevance:10},{begin:/(b|br)'/,end:/'/},{begin:/(b|br)"/,end:/"/},a.APOS_STRING_MODE,a.QUOTE_STRING_MODE]},d={className:"number",relevance:0,variants:[{begin:a.BINARY_NUMBER_RE+"[lLjJ]?"},{begin:"\\b(0o[0-7]+)[lLjJ]?"},{begin:a.C_NUMBER_RE+"[lLjJ]?"}]},e={className:"params",begin:/\(/,end:/\)/,contains:["self",b,d,c]};return{aliases:["py","gyp"],keywords:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},illegal:/(<\/|->|\?)/,contains:[b,d,c,a.HASH_COMMENT_MODE,{variants:[{className:"function",beginKeywords:"def",relevance:10},{className:"class",beginKeywords:"class"}],end:/:/,illegal:/[${=;\n,]/,contains:[a.UNDERSCORE_TITLE_MODE,e]},{className:"decorator",begin:/^[\t ]*@/,end:/$/},{begin:/\b(print|exec)\(/}]}}),a.registerLanguage("q",function(a){var b={keyword:"do while select delete by update from",constant:"0b 1b",built_in:"neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum",typename:"`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid"};return{aliases:["k","kdb"],keywords:b,lexemes:/\b(`?)[A-Za-z0-9_]+\b/,contains:[a.C_LINE_COMMENT_MODE,a.QUOTE_STRING_MODE,a.C_NUMBER_MODE]}}),a.registerLanguage("r",function(a){var b="([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*";return{contains:[a.HASH_COMMENT_MODE,{begin:b,lexemes:b,keywords:{keyword:"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...",literal:"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10"},relevance:0},{className:"number",begin:"0[xX][0-9a-fA-F]+[Li]?\\b",relevance:0},{className:"number",begin:"\\d+(?:[eE][+\\-]?\\d*)?L\\b",relevance:0},{className:"number",begin:"\\d+\\.(?!\\d)(?:i\\b)?",relevance:0},{className:"number",begin:"\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{className:"number",begin:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",relevance:0},{begin:"`",end:"`",relevance:0},{className:"string",contains:[a.BACKSLASH_ESCAPE],variants:[{begin:'"',end:'"'},{begin:"'",end:"'"}]}]}}),a.registerLanguage("rib",function(a){return{keywords:"ArchiveRecord AreaLightSource Atmosphere Attribute AttributeBegin AttributeEnd Basis Begin Blobby Bound Clipping ClippingPlane Color ColorSamples ConcatTransform Cone CoordinateSystem CoordSysTransform CropWindow Curves Cylinder DepthOfField Detail DetailRange Disk Displacement Display End ErrorHandler Exposure Exterior Format FrameAspectRatio FrameBegin FrameEnd GeneralPolygon GeometricApproximation Geometry Hider Hyperboloid Identity Illuminate Imager Interior LightSource MakeCubeFaceEnvironment MakeLatLongEnvironment MakeShadow MakeTexture Matte MotionBegin MotionEnd NuPatch ObjectBegin ObjectEnd ObjectInstance Opacity Option Orientation Paraboloid Patch PatchMesh Perspective PixelFilter PixelSamples PixelVariance Points PointsGeneralPolygons PointsPolygons Polygon Procedural Projection Quantize ReadArchive RelativeDetail ReverseOrientation Rotate Scale ScreenWindow ShadingInterpolation ShadingRate Shutter Sides Skew SolidBegin SolidEnd Sphere SubdivisionMesh Surface TextureCoordinates Torus Transform TransformBegin TransformEnd TransformPoints Translate TrimCurve WorldBegin WorldEnd",illegal:"</",contains:[a.HASH_COMMENT_MODE,a.C_NUMBER_MODE,a.APOS_STRING_MODE,a.QUOTE_STRING_MODE]}}),a.registerLanguage("roboconf",function(a){var b="[a-zA-Z-_][^\n{\r\n]+\\{";return{aliases:["graph","instances"],case_insensitive:!0,keywords:"import",contains:[{className:"facet",begin:"^facet "+b,end:"}",keywords:"facet installer exports children extends",contains:[a.HASH_COMMENT_MODE]},{className:"instance-of",begin:"^instance of "+b,end:"}",keywords:"name count channels instance-data instance-state instance of",contains:[{className:"keyword",begin:"[a-zA-Z-_]+( |	)*:"},a.HASH_COMMENT_MODE]},{className:"component",begin:"^"+b,end:"}",lexemes:"\\(?[a-zA-Z]+\\)?",keywords:"installer exports children extends imports facets alias (optional)",contains:[{className:"string",begin:"\\.[a-zA-Z-_]+",end:"\\s|,|;",excludeEnd:!0},a.HASH_COMMENT_MODE]},a.HASH_COMMENT_MODE]}}),a.registerLanguage("rsl",function(a){return{keywords:{keyword:"float color point normal vector matrix while for if do return else break extern continue",built_in:"abs acos ambient area asin atan atmosphere attribute calculatenormal ceil cellnoise clamp comp concat cos degrees depth Deriv diffuse distance Du Dv environment exp faceforward filterstep floor format fresnel incident length lightsource log match max min mod noise normalize ntransform opposite option phong pnoise pow printf ptlined radians random reflect refract renderinfo round setcomp setxcomp setycomp setzcomp shadow sign sin smoothstep specular specularbrdf spline sqrt step tan texture textureinfo trace transform vtransform xcomp ycomp zcomp"},illegal:"</",contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.QUOTE_STRING_MODE,a.APOS_STRING_MODE,a.C_NUMBER_MODE,{className:"preprocessor",begin:"#",end:"$"},{className:"shader",beginKeywords:"surface displacement light volume imager",end:"\\("},{className:"shading",beginKeywords:"illuminate illuminance gather",end:"\\("}]}}),a.registerLanguage("ruleslanguage",function(a){return{keywords:{keyword:"BILL_PERIOD BILL_START BILL_STOP RS_EFFECTIVE_START RS_EFFECTIVE_STOP RS_JURIS_CODE RS_OPCO_CODE INTDADDATTRIBUTE|5 INTDADDVMSG|5 INTDBLOCKOP|5 INTDBLOCKOPNA|5 INTDCLOSE|5 INTDCOUNT|5 INTDCOUNTSTATUSCODE|5 INTDCREATEMASK|5 INTDCREATEDAYMASK|5 INTDCREATEFACTORMASK|5 INTDCREATEHANDLE|5 INTDCREATEOVERRIDEDAYMASK|5 INTDCREATEOVERRIDEMASK|5 INTDCREATESTATUSCODEMASK|5 INTDCREATETOUPERIOD|5 INTDDELETE|5 INTDDIPTEST|5 INTDEXPORT|5 INTDGETERRORCODE|5 INTDGETERRORMESSAGE|5 INTDISEQUAL|5 INTDJOIN|5 INTDLOAD|5 INTDLOADACTUALCUT|5 INTDLOADDATES|5 INTDLOADHIST|5 INTDLOADLIST|5 INTDLOADLISTDATES|5 INTDLOADLISTENERGY|5 INTDLOADLISTHIST|5 INTDLOADRELATEDCHANNEL|5 INTDLOADSP|5 INTDLOADSTAGING|5 INTDLOADUOM|5 INTDLOADUOMDATES|5 INTDLOADUOMHIST|5 INTDLOADVERSION|5 INTDOPEN|5 INTDREADFIRST|5 INTDREADNEXT|5 INTDRECCOUNT|5 INTDRELEASE|5 INTDREPLACE|5 INTDROLLAVG|5 INTDROLLPEAK|5 INTDSCALAROP|5 INTDSCALE|5 INTDSETATTRIBUTE|5 INTDSETDSTPARTICIPANT|5 INTDSETSTRING|5 INTDSETVALUE|5 INTDSETVALUESTATUS|5 INTDSHIFTSTARTTIME|5 INTDSMOOTH|5 INTDSORT|5 INTDSPIKETEST|5 INTDSUBSET|5 INTDTOU|5 INTDTOURELEASE|5 INTDTOUVALUE|5 INTDUPDATESTATS|5 INTDVALUE|5 STDEV INTDDELETEEX|5 INTDLOADEXACTUAL|5 INTDLOADEXCUT|5 INTDLOADEXDATES|5 INTDLOADEX|5 INTDLOADEXRELATEDCHANNEL|5 INTDSAVEEX|5 MVLOAD|5 MVLOADACCT|5 MVLOADACCTDATES|5 MVLOADACCTHIST|5 MVLOADDATES|5 MVLOADHIST|5 MVLOADLIST|5 MVLOADLISTDATES|5 MVLOADLISTHIST|5 IF FOR NEXT DONE SELECT END CALL ABORT CLEAR CHANNEL FACTOR LIST NUMBER OVERRIDE SET WEEK DISTRIBUTIONNODE ELSE WHEN THEN OTHERWISE IENUM CSV INCLUDE LEAVE RIDER SAVE DELETE NOVALUE SECTION WARN SAVE_UPDATE DETERMINANT LABEL REPORT REVENUE EACH IN FROM TOTAL CHARGE BLOCK AND OR CSV_FILE RATE_CODE AUXILIARY_DEMAND UIDACCOUNT RS BILL_PERIOD_SELECT HOURS_PER_MONTH INTD_ERROR_STOP SEASON_SCHEDULE_NAME ACCOUNTFACTOR ARRAYUPPERBOUND CALLSTOREDPROC GETADOCONNECTION GETCONNECT GETDATASOURCE GETQUALIFIER GETUSERID HASVALUE LISTCOUNT LISTOP LISTUPDATE LISTVALUE PRORATEFACTOR RSPRORATE SETBINPATH SETDBMONITOR WQ_OPEN BILLINGHOURS DATE DATEFROMFLOAT DATETIMEFROMSTRING DATETIMETOSTRING DATETOFLOAT DAY DAYDIFF DAYNAME DBDATETIME HOUR MINUTE MONTH MONTHDIFF MONTHHOURS MONTHNAME ROUNDDATE SAMEWEEKDAYLASTYEAR SECOND WEEKDAY WEEKDIFF YEAR YEARDAY YEARSTR COMPSUM HISTCOUNT HISTMAX HISTMIN HISTMINNZ HISTVALUE MAXNRANGE MAXRANGE MINRANGE COMPIKVA COMPKVA COMPKVARFROMKQKW COMPLF IDATTR FLAG LF2KW LF2KWH MAXKW POWERFACTOR READING2USAGE AVGSEASON MAXSEASON MONTHLYMERGE SEASONVALUE SUMSEASON ACCTREADDATES ACCTTABLELOAD CONFIGADD CONFIGGET CREATEOBJECT CREATEREPORT EMAILCLIENT EXPBLKMDMUSAGE EXPMDMUSAGE EXPORT_USAGE FACTORINEFFECT GETUSERSPECIFIEDSTOP INEFFECT ISHOLIDAY RUNRATE SAVE_PROFILE SETREPORTTITLE USEREXIT WATFORRUNRATE TO TABLE ACOS ASIN ATAN ATAN2 BITAND CEIL COS COSECANT COSH COTANGENT DIVQUOT DIVREM EXP FABS FLOOR FMOD FREPM FREXPN LOG LOG10 MAX MAXN MIN MINNZ MODF POW ROUND ROUND2VALUE ROUNDINT SECANT SIN SINH SQROOT TAN TANH FLOAT2STRING FLOAT2STRINGNC INSTR LEFT LEN LTRIM MID RIGHT RTRIM STRING STRINGNC TOLOWER TOUPPER TRIM NUMDAYS READ_DATE STAGING",built_in:"IDENTIFIER OPTIONS XML_ELEMENT XML_OP XML_ELEMENT_OF DOMDOCCREATE DOMDOCLOADFILE DOMDOCLOADXML DOMDOCSAVEFILE DOMDOCGETROOT DOMDOCADDPI DOMNODEGETNAME DOMNODEGETTYPE DOMNODEGETVALUE DOMNODEGETCHILDCT DOMNODEGETFIRSTCHILD DOMNODEGETSIBLING DOMNODECREATECHILDELEMENT DOMNODESETATTRIBUTE DOMNODEGETCHILDELEMENTCT DOMNODEGETFIRSTCHILDELEMENT DOMNODEGETSIBLINGELEMENT DOMNODEGETATTRIBUTECT DOMNODEGETATTRIBUTEI DOMNODEGETATTRIBUTEBYNAME DOMNODEGETBYNAME"},contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.C_NUMBER_MODE,{className:"array",variants:[{begin:"#\\s+[a-zA-Z\\ \\.]*",
+relevance:0},{begin:"#[a-zA-Z\\ \\.]+"}]}]}}),a.registerLanguage("rust",function(a){var b="([uif](8|16|32|64|size))?",c=a.inherit(a.C_BLOCK_COMMENT_MODE);return c.contains.push("self"),{aliases:["rs"],keywords:{keyword:"alignof as be box break const continue crate do else enum extern false fn for if impl in let loop match mod mut offsetof once priv proc pub pure ref return self Self sizeof static struct super trait true type typeof unsafe unsized use virtual while where yield int i8 i16 i32 i64 uint u8 u32 u64 float f32 f64 str char bool",built_in:"Copy Send Sized Sync Drop Fn FnMut FnOnce drop Box ToOwned Clone PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator Option Some None Result Ok Err SliceConcatExt String ToString Vec assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln!"},lexemes:a.IDENT_RE+"!?",illegal:"</",contains:[a.C_LINE_COMMENT_MODE,c,a.inherit(a.QUOTE_STRING_MODE,{illegal:null}),{className:"string",variants:[{begin:/r(#*)".*?"\1(?!#)/},{begin:/'\\?(x\w{2}|u\w{4}|U\w{8}|.)'/},{begin:/'[a-zA-Z_][a-zA-Z0-9_]*/}]},{className:"number",variants:[{begin:"\\b0b([01_]+)"+b},{begin:"\\b0o([0-7_]+)"+b},{begin:"\\b0x([A-Fa-f0-9_]+)"+b},{begin:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+b}],relevance:0},{className:"function",beginKeywords:"fn",end:"(\\(|<)",excludeEnd:!0,contains:[a.UNDERSCORE_TITLE_MODE]},{className:"preprocessor",begin:"#\\!?\\[",end:"\\]"},{beginKeywords:"type",end:"(=|<)",contains:[a.UNDERSCORE_TITLE_MODE],illegal:"\\S"},{beginKeywords:"trait enum",end:"{",contains:[a.inherit(a.UNDERSCORE_TITLE_MODE,{endsParent:!0})],illegal:"[\\w\\d]"},{begin:a.IDENT_RE+"::"},{begin:"->"}]}}),a.registerLanguage("scala",function(a){var b={className:"annotation",begin:"@[A-Za-z]+"},c={className:"string",begin:'u?r?"""',end:'"""',relevance:10},d={className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},e={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},f={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},g={className:"class",beginKeywords:"class object trait type",end:/[:={\[(\n;]/,contains:[{className:"keyword",beginKeywords:"extends with",relevance:10},f]},h={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,contains:[f]};return{keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,c,a.QUOTE_STRING_MODE,d,e,h,g,a.C_NUMBER_MODE,b]}}),a.registerLanguage("scheme",function(a){var b="[^\\(\\)\\[\\]\\{\\}\",'`;#|\\\\\\s]+",c="(\\-|\\+)?\\d+([./]\\d+)?",d=c+"[+\\-]"+c+"i",e={built_in:"case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules ' * + , ,@ - ... / ; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci<? string-ci=? string-ci>=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string<? string=? string>=? string>? string? substring symbol->string symbol? tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?"},f={className:"shebang",begin:"^#!",end:"$"},g={className:"literal",begin:"(#t|#f|#\\\\"+b+"|#\\\\.)"},h={className:"number",variants:[{begin:c,relevance:0},{begin:d,relevance:0},{begin:"#b[0-1]+(/[0-1]+)?"},{begin:"#o[0-7]+(/[0-7]+)?"},{begin:"#x[0-9a-f]+(/[0-9a-f]+)?"}]},i=a.QUOTE_STRING_MODE,j=[a.COMMENT(";","$",{relevance:0}),a.COMMENT("#\\|","\\|#")],k={begin:b,relevance:0},l={className:"variable",begin:"'"+b},m={endsWithParent:!0,relevance:0},n={className:"list",variants:[{begin:"\\(",end:"\\)"},{begin:"\\[",end:"\\]"}],contains:[{className:"keyword",begin:b,lexemes:b,keywords:e},m]};return m.contains=[g,h,i,k,l,n].concat(j),{illegal:/\S/,contains:[f,h,i,l,n].concat(j)}}),a.registerLanguage("scilab",function(a){var b=[a.C_NUMBER_MODE,{className:"string",begin:"'|\"",end:"'|\"",contains:[a.BACKSLASH_ESCAPE,{begin:"''"}]}];return{aliases:["sci"],keywords:{keyword:"abort break case clear catch continue do elseif else endfunction end for functionglobal if pause return resume select try then while%f %F %t %T %pi %eps %inf %nan %e %i %z %s",built_in:"abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp errorexec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isemptyisinfisnan isvector lasterror length load linspace list listfiles log10 log2 logmax min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand realround sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tantype typename warning zeros matrix"},illegal:'("|#|/\\*|\\s+/\\w+)',contains:[{className:"function",beginKeywords:"function endfunction",end:"$",keywords:"function endfunction|10",contains:[a.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]},{className:"transposed_variable",begin:"[a-zA-Z_][a-zA-Z_0-9]*('+[\\.']*|[\\.']+)",end:"",relevance:0},{className:"matrix",begin:"\\[",end:"\\]'*[\\.']*",relevance:0,contains:b},a.COMMENT("//","$")].concat(b)}}),a.registerLanguage("scss",function(a){var b="[a-zA-Z-][a-zA-Z0-9_-]*",c={className:"variable",begin:"(\\$"+b+")\\b"},d={className:"function",begin:b+"\\(",returnBegin:!0,excludeEnd:!0,end:"\\("},e={className:"hexcolor",begin:"#[0-9A-Fa-f]+"};({className:"attribute",begin:"[A-Z\\_\\.\\-]+",end:":",excludeEnd:!0,illegal:"[^\\s]",starts:{className:"value",endsWithParent:!0,excludeEnd:!0,contains:[d,e,a.CSS_NUMBER_MODE,a.QUOTE_STRING_MODE,a.APOS_STRING_MODE,a.C_BLOCK_COMMENT_MODE,{className:"important",begin:"!important"}]}});return{case_insensitive:!0,illegal:"[=/|']",contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,d,{className:"id",begin:"\\#[A-Za-z0-9_-]+",relevance:0},{className:"class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"attr_selector",begin:"\\[",end:"\\]",illegal:"$"},{className:"tag",begin:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{className:"pseudo",begin:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{className:"pseudo",begin:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},c,{className:"attribute",begin:"\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",illegal:"[^\\s]"},{className:"value",begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{className:"value",begin:":",end:";",contains:[d,c,e,a.CSS_NUMBER_MODE,a.QUOTE_STRING_MODE,a.APOS_STRING_MODE,{className:"important",begin:"!important"}]},{className:"at_rule",begin:"@",end:"[{;]",keywords:"mixin include extend for if else each while charset import debug media page content font-face namespace warn",contains:[d,c,a.QUOTE_STRING_MODE,a.APOS_STRING_MODE,e,a.CSS_NUMBER_MODE,{className:"preprocessor",begin:"\\s[A-Za-z0-9_.-]+",relevance:0}]}]}}),a.registerLanguage("smali",function(a){var b=["add","and","cmp","cmpg","cmpl","const","div","double","float","goto","if","int","long","move","mul","neg","new","nop","not","or","rem","return","shl","shr","sput","sub","throw","ushr","xor"],c=["aget","aput","array","check","execute","fill","filled","goto/16","goto/32","iget","instance","invoke","iput","monitor","packed","sget","sparse"],d=["transient","constructor","abstract","final","synthetic","public","private","protected","static","bridge","system"];return{aliases:["smali"],contains:[{className:"string",begin:'"',end:'"',relevance:0},a.COMMENT("#","$",{relevance:0}),{className:"keyword",begin:"\\s*\\.end\\s[a-zA-Z0-9]*",relevance:1},{className:"keyword",begin:"^[ ]*\\.[a-zA-Z]*",relevance:0},{className:"keyword",begin:"\\s:[a-zA-Z_0-9]*",relevance:0},{className:"keyword",begin:"\\s("+d.join("|")+")",relevance:1},{className:"keyword",begin:"\\[",relevance:0},{className:"instruction",begin:"\\s("+b.join("|")+")\\s",relevance:1},{className:"instruction",begin:"\\s("+b.join("|")+")((\\-|/)[a-zA-Z0-9]+)+\\s",relevance:10},{className:"instruction",begin:"\\s("+c.join("|")+")((\\-|/)[a-zA-Z0-9]+)*\\s",relevance:10},{className:"class",begin:"L[^(;:\n]*;",relevance:0},{className:"function",begin:'( |->)[^(\n ;"]*\\(',relevance:0},{className:"function",begin:"\\)",relevance:0},{className:"variable",begin:"[vp][0-9]+",relevance:0}]}}),a.registerLanguage("smalltalk",function(a){var b="[a-z][a-zA-Z0-9_]*",c={className:"char",begin:"\\$.{1}"},d={className:"symbol",begin:"#"+a.UNDERSCORE_IDENT_RE};return{aliases:["st"],keywords:"self super nil true false thisContext",contains:[a.COMMENT('"','"'),a.APOS_STRING_MODE,{className:"class",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},{className:"method",begin:b+":",relevance:0},a.C_NUMBER_MODE,d,c,{className:"localvars",begin:"\\|[ ]*"+b+"([ ]+"+b+")*[ ]*\\|",returnBegin:!0,end:/\|/,illegal:/\S/,contains:[{begin:"(\\|[ ]*)?"+b}]},{className:"array",begin:"\\#\\(",end:"\\)",contains:[a.APOS_STRING_MODE,c,a.C_NUMBER_MODE,d]}]}}),a.registerLanguage("sml",function(a){return{aliases:["ml"],keywords:{keyword:"abstype and andalso as case datatype do else end eqtype exception fn fun functor handle if in include infix infixr let local nonfix of op open orelse raise rec sharing sig signature struct structure then type val with withtype where while",built_in:"array bool char exn int list option order real ref string substring vector unit word",literal:"true false NONE SOME LESS EQUAL GREATER nil"},illegal:/\/\/|>>/,lexemes:"[a-z_]\\w*!?",contains:[{className:"literal",begin:"\\[(\\|\\|)?\\]|\\(\\)"},a.COMMENT("\\(\\*","\\*\\)",{contains:["self"]}),{className:"symbol",begin:"'[A-Za-z_](?!')[\\w']*"},{className:"tag",begin:"`[A-Z][\\w']*"},{className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},{begin:"[a-z_]\\w*'[\\w']*"},a.inherit(a.APOS_STRING_MODE,{className:"char",relevance:0}),a.inherit(a.QUOTE_STRING_MODE,{illegal:null}),{className:"number",begin:"\\b(0[xX][a-fA-F0-9_]+[Lln]?|0[oO][0-7_]+[Lln]?|0[bB][01_]+[Lln]?|[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)",relevance:0},{begin:/[-=]>/}]}}),a.registerLanguage("sqf",function(a){var b=["!","-","+","!=","%","&&","*","/","=","==",">",">=","<","<=","or","plus","^",":",">>","abs","accTime","acos","action","actionKeys","actionKeysImages","actionKeysNames","actionKeysNamesArray","actionName","activateAddons","activatedAddons","activateKey","addAction","addBackpack","addBackpackCargo","addBackpackCargoGlobal","addBackpackGlobal","addCamShake","addCuratorAddons","addCuratorCameraArea","addCuratorEditableObjects","addCuratorEditingArea","addCuratorPoints","addEditorObject","addEventHandler","addGoggles","addGroupIcon","addHandgunItem","addHeadgear","addItem","addItemCargo","addItemCargoGlobal","addItemPool","addItemToBackpack","addItemToUniform","addItemToVest","addLiveStats","addMagazine","addMagazine array","addMagazineAmmoCargo","addMagazineCargo","addMagazineCargoGlobal","addMagazineGlobal","addMagazinePool","addMagazines","addMagazineTurret","addMenu","addMenuItem","addMissionEventHandler","addMPEventHandler","addMusicEventHandler","addPrimaryWeaponItem","addPublicVariableEventHandler","addRating","addResources","addScore","addScoreSide","addSecondaryWeaponItem","addSwitchableUnit","addTeamMember","addToRemainsCollector","addUniform","addVehicle","addVest","addWaypoint","addWeapon","addWeaponCargo","addWeaponCargoGlobal","addWeaponGlobal","addWeaponPool","addWeaponTurret","agent","agents","AGLToASL","aimedAtTarget","aimPos","airDensityRTD","airportSide","AISFinishHeal","alive","allControls","allCurators","allDead","allDeadMen","allDisplays","allGroups","allMapMarkers","allMines","allMissionObjects","allow3DMode","allowCrewInImmobile","allowCuratorLogicIgnoreAreas","allowDamage","allowDammage","allowFileOperations","allowFleeing","allowGetIn","allPlayers","allSites","allTurrets","allUnits","allUnitsUAV","allVariables","ammo","and","animate","animateDoor","animationPhase","animationState","append","armoryPoints","arrayIntersect","asin","ASLToAGL","ASLToATL","assert","assignAsCargo","assignAsCargoIndex","assignAsCommander","assignAsDriver","assignAsGunner","assignAsTurret","assignCurator","assignedCargo","assignedCommander","assignedDriver","assignedGunner","assignedItems","assignedTarget","assignedTeam","assignedVehicle","assignedVehicleRole","assignItem","assignTeam","assignToAirport","atan","atan2","atg","ATLToASL","attachedObject","attachedObjects","attachedTo","attachObject","attachTo","attackEnabled","backpack","backpackCargo","backpackContainer","backpackItems","backpackMagazines","backpackSpaceFor","behaviour","benchmark","binocular","blufor","boundingBox","boundingBoxReal","boundingCenter","breakOut","breakTo","briefingName","buildingExit","buildingPos","buttonAction","buttonSetAction","cadetMode","call","callExtension","camCommand","camCommit","camCommitPrepared","camCommitted","camConstuctionSetParams","camCreate","camDestroy","cameraEffect","cameraEffectEnableHUD","cameraInterest","cameraOn","cameraView","campaignConfigFile","camPreload","camPreloaded","camPrepareBank","camPrepareDir","camPrepareDive","camPrepareFocus","camPrepareFov","camPrepareFovRange","camPreparePos","camPrepareRelPos","camPrepareTarget","camSetBank","camSetDir","camSetDive","camSetFocus","camSetFov","camSetFovRange","camSetPos","camSetRelPos","camSetTarget","camTarget","camUseNVG","canAdd","canAddItemToBackpack","canAddItemToUniform","canAddItemToVest","cancelSimpleTaskDestination","canFire","canMove","canSlingLoad","canStand","canUnloadInCombat","captive","captiveNum","case","catch","cbChecked","cbSetChecked","ceil","cheatsEnabled","checkAIFeature","civilian","className","clearAllItemsFromBackpack","clearBackpackCargo","clearBackpackCargoGlobal","clearGroupIcons","clearItemCargo","clearItemCargoGlobal","clearItemPool","clearMagazineCargo","clearMagazineCargoGlobal","clearMagazinePool","clearOverlay","clearRadio","clearWeaponCargo","clearWeaponCargoGlobal","clearWeaponPool","closeDialog","closeDisplay","closeOverlay","collapseObjectTree","combatMode","commandArtilleryFire","commandChat","commander","commandFire","commandFollow","commandFSM","commandGetOut","commandingMenu","commandMove","commandRadio","commandStop","commandTarget","commandWatch","comment","commitOverlay","compile","compileFinal","completedFSM","composeText","configClasses","configFile","configHierarchy","configName","configProperties","configSourceMod","configSourceModList","connectTerminalToUAV","controlNull","controlsGroupCtrl","copyFromClipboard","copyToClipboard","copyWaypoints","cos","count","countEnemy","countFriendly","countSide","countType","countUnknown","createAgent","createCenter","createDialog","createDiaryLink","createDiaryRecord","createDiarySubject","createDisplay","createGearDialog","createGroup","createGuardedPoint","createLocation","createMarker","createMarkerLocal","createMenu","createMine","createMissionDisplay","createSimpleTask","createSite","createSoundSource","createTask","createTeam","createTrigger","createUnit","createUnit array","createVehicle","createVehicle array","createVehicleCrew","createVehicleLocal","crew","ctrlActivate","ctrlAddEventHandler","ctrlAutoScrollDelay","ctrlAutoScrollRewind","ctrlAutoScrollSpeed","ctrlChecked","ctrlClassName","ctrlCommit","ctrlCommitted","ctrlCreate","ctrlDelete","ctrlEnable","ctrlEnabled","ctrlFade","ctrlHTMLLoaded","ctrlIDC","ctrlIDD","ctrlMapAnimAdd","ctrlMapAnimClear","ctrlMapAnimCommit","ctrlMapAnimDone","ctrlMapCursor","ctrlMapMouseOver","ctrlMapScale","ctrlMapScreenToWorld","ctrlMapWorldToScreen","ctrlModel","ctrlModelDirAndUp","ctrlModelScale","ctrlParent","ctrlPosition","ctrlRemoveAllEventHandlers","ctrlRemoveEventHandler","ctrlScale","ctrlSetActiveColor","ctrlSetAutoScrollDelay","ctrlSetAutoScrollRewind","ctrlSetAutoScrollSpeed","ctrlSetBackgroundColor","ctrlSetChecked","ctrlSetEventHandler","ctrlSetFade","ctrlSetFocus","ctrlSetFont","ctrlSetFontH1","ctrlSetFontH1B","ctrlSetFontH2","ctrlSetFontH2B","ctrlSetFontH3","ctrlSetFontH3B","ctrlSetFontH4","ctrlSetFontH4B","ctrlSetFontH5","ctrlSetFontH5B","ctrlSetFontH6","ctrlSetFontH6B","ctrlSetFontHeight","ctrlSetFontHeightH1","ctrlSetFontHeightH2","ctrlSetFontHeightH3","ctrlSetFontHeightH4","ctrlSetFontHeightH5","ctrlSetFontHeightH6","ctrlSetFontP","ctrlSetFontPB","ctrlSetForegroundColor","ctrlSetModel","ctrlSetModelDirAndUp","ctrlSetModelScale","ctrlSetPosition","ctrlSetScale","ctrlSetStructuredText","ctrlSetText","ctrlSetTextColor","ctrlSetTooltip","ctrlSetTooltipColorBox","ctrlSetTooltipColorShade","ctrlSetTooltipColorText","ctrlShow","ctrlShown","ctrlText","ctrlTextHeight","ctrlType","ctrlVisible","curatorAddons","curatorCamera","curatorCameraArea","curatorCameraAreaCeiling","curatorCoef","curatorEditableObjects","curatorEditingArea","curatorEditingAreaType","curatorMouseOver","curatorPoints","curatorRegisteredObjects","curatorSelected","curatorWaypointCost","currentChannel","currentCommand","currentMagazine","currentMagazineDetail","currentMagazineDetailTurret","currentMagazineTurret","currentMuzzle","currentNamespace","currentTask","currentTasks","currentThrowable","currentVisionMode","currentWaypoint","currentWeapon","currentWeaponMode","currentWeaponTurret","currentZeroing","cursorTarget","customChat","customRadio","cutFadeOut","cutObj","cutRsc","cutText","damage","date","dateToNumber","daytime","deActivateKey","debriefingText","debugFSM","debugLog","default","deg","deleteAt","deleteCenter","deleteCollection","deleteEditorObject","deleteGroup","deleteIdentity","deleteLocation","deleteMarker","deleteMarkerLocal","deleteRange","deleteResources","deleteSite","deleteStatus","deleteTeam","deleteVehicle","deleteVehicleCrew","deleteWaypoint","detach","detectedMines","diag activeMissionFSMs","diag activeSQFScripts","diag activeSQSScripts","diag captureFrame","diag captureSlowFrame","diag fps","diag fpsMin","diag frameNo","diag log","diag logSlowFrame","diag tickTime","dialog","diarySubjectExists","didJIP","didJIPOwner","difficulty","difficultyEnabled","difficultyEnabledRTD","direction","directSay","disableAI","disableCollisionWith","disableConversation","disableDebriefingStats","disableSerialization","disableTIEquipment","disableUAVConnectability","disableUserInput","displayAddEventHandler","displayCtrl","displayNull","displayRemoveAllEventHandlers","displayRemoveEventHandler","displaySetEventHandler","dissolveTeam","distance","distance2D","distanceSqr","distributionRegion","do","doArtilleryFire","doFire","doFollow","doFSM","doGetOut","doMove","doorPhase","doStop","doTarget","doWatch","drawArrow","drawEllipse","drawIcon","drawIcon3D","drawLine","drawLine3D","drawLink","drawLocation","drawRectangle","driver","drop","east","echo","editObject","editorSetEventHandler","effectiveCommander","else","emptyPositions","enableAI","enableAIFeature","enableAttack","enableCamShake","enableCaustics","enableCollisionWith","enableCopilot","enableDebriefingStats","enableDiagLegend","enableEndDialog","enableEngineArtillery","enableEnvironment","enableFatigue","enableGunLights","enableIRLasers","enableMimics","enablePersonTurret","enableRadio","enableReload","enableRopeAttach","enableSatNormalOnDetail","enableSaving","enableSentences","enableSimulation","enableSimulationGlobal","enableTeamSwitch","enableUAVConnectability","enableUAVWaypoints","endLoadingScreen","endMission","engineOn","enginesIsOnRTD","enginesRpmRTD","enginesTorqueRTD","entities","estimatedEndServerTime","estimatedTimeLeft","evalObjectArgument","everyBackpack","everyContainer","exec","execEditorScript","execFSM","execVM","exit","exitWith","exp","expectedDestination","eyeDirection","eyePos","face","faction","fadeMusic","fadeRadio","fadeSound","fadeSpeech","failMission","false","fillWeaponsFromPool","find","findCover","findDisplay","findEditorObject","findEmptyPosition","findEmptyPositionReady","findNearestEnemy","finishMissionInit","finite","fire","fireAtTarget","firstBackpack","flag","flagOwner","fleeing","floor","flyInHeight","fog","fogForecast","fogParams","for","forceAddUniform","forceEnd","forceMap","forceRespawn","forceSpeed","forceWalk","forceWeaponFire","forceWeatherChange","forEach","forEachMember","forEachMemberAgent","forEachMemberTeam","format","formation","formationDirection","formationLeader","formationMembers","formationPosition","formationTask","formatText","formLeader","freeLook","from","fromEditor","fuel","fullCrew","gearSlotAmmoCount","gearSlotData","getAllHitPointsDamage","getAmmoCargo","getArray","getArtilleryAmmo","getArtilleryComputerSettings","getArtilleryETA","getAssignedCuratorLogic","getAssignedCuratorUnit","getBackpackCargo","getBleedingRemaining","getBurningValue","getCargoIndex","getCenterOfMass","getClientState","getConnectedUAV","getDammage","getDescription","getDir","getDirVisual","getDLCs","getEditorCamera","getEditorMode","getEditorObjectScope","getElevationOffset","getFatigue","getFriend","getFSMVariable","getFuelCargo","getGroupIcon","getGroupIconParams","getGroupIcons","getHideFrom","getHit","getHitIndex","getHitPointDamage","getItemCargo","getMagazineCargo","getMarkerColor","getMarkerPos","getMarkerSize","getMarkerType","getMass","getModelInfo","getNumber","getObjectArgument","getObjectChildren","getObjectDLC","getObjectMaterials","getObjectProxy","getObjectTextures","getObjectType","getObjectViewDistance","getOxygenRemaining","getPersonUsedDLCs","getPlayerChannel","getPlayerUID","getPos","getPosASL","getPosASLVisual","getPosASLW","getPosATL","getPosATLVisual","getPosVisual","getPosWorld","getRepairCargo","getResolution","getShadowDistance","getSlingLoad","getSpeed","getSuppression","getTerrainHeightASL","getText","getVariable","getWeaponCargo","getWPPos","glanceAt","globalChat","globalRadio","goggles","goto","group","groupChat","groupFromNetId","groupIconSelectable","groupIconsVisible","groupId","groupOwner","groupRadio","groupSelectedUnits","groupSelectUnit","grpNull","gunner","gusts","halt","handgunItems","handgunMagazine","handgunWeapon","handsHit","hasInterface","hasWeapon","hcAllGroups","hcGroupParams","hcLeader","hcRemoveAllGroups","hcRemoveGroup","hcSelected","hcSelectGroup","hcSetGroup","hcShowBar","hcShownBar","headgear","hideBody","hideObject","hideObjectGlobal","hint","hintC","hintCadet","hintSilent","hmd","hostMission","htmlLoad","HUDMovementLevels","humidity","if","image","importAllGroups","importance","in","incapacitatedState","independent","inflame","inflamed","inGameUISetEventHandler","inheritsFrom","initAmbientLife","inputAction","inRangeOfArtillery","insertEditorObject","intersect","isAbleToBreathe","isAgent","isArray","isAutoHoverOn","isAutonomous","isAutotest","isBleeding","isBurning","isClass","isCollisionLightOn","isCopilotEnabled","isDedicated","isDLCAvailable","isEngineOn","isEqualTo","isFlashlightOn","isFlatEmpty","isForcedWalk","isFormationLeader","isHidden","isInRemainsCollector","isInstructorFigureEnabled","isIRLaserOn","isKeyActive","isKindOf","isLightOn","isLocalized","isManualFire","isMarkedForCollection","isMultiplayer","isNil","isNull","isNumber","isObjectHidden","isObjectRTD","isOnRoad","isPipEnabled","isPlayer","isRealTime","isServer","isShowing3DIcons","isSteamMission","isStreamFriendlyUIEnabled","isText","isTouchingGround","isTurnedOut","isTutHintsEnabled","isUAVConnectable","isUAVConnected","isUniformAllowed","isWalking","isWeaponDeployed","isWeaponRested","itemCargo","items","itemsWithMagazines","join","joinAs","joinAsSilent","joinSilent","joinString","kbAddDatabase","kbAddDatabaseTargets","kbAddTopic","kbHasTopic","kbReact","kbRemoveTopic","kbTell","kbWasSaid","keyImage","keyName","knowsAbout","land","landAt","landResult","language","laserTarget","lbAdd","lbClear","lbColor","lbCurSel","lbData","lbDelete","lbIsSelected","lbPicture","lbSelection","lbSetColor","lbSetCurSel","lbSetData","lbSetPicture","lbSetPictureColor","lbSetPictureColorDisabled","lbSetPictureColorSelected","lbSetSelectColor","lbSetSelectColorRight","lbSetSelected","lbSetTooltip","lbSetValue","lbSize","lbSort","lbSortByValue","lbText","lbValue","leader","leaderboardDeInit","leaderboardGetRows","leaderboardInit","leaveVehicle","libraryCredits","libraryDisclaimers","lifeState","lightAttachObject","lightDetachObject","lightIsOn","lightnings","limitSpeed","linearConversion","lineBreak","lineIntersects","lineIntersectsObjs","lineIntersectsSurfaces","lineIntersectsWith","linkItem","list","listObjects","ln","lnbAddArray","lnbAddColumn","lnbAddRow","lnbClear","lnbColor","lnbCurSelRow","lnbData","lnbDeleteColumn","lnbDeleteRow","lnbGetColumnsPosition","lnbPicture","lnbSetColor","lnbSetColumnsPos","lnbSetCurSelRow","lnbSetData","lnbSetPicture","lnbSetText","lnbSetValue","lnbSize","lnbText","lnbValue","load","loadAbs","loadBackpack","loadFile","loadGame","loadIdentity","loadMagazine","loadOverlay","loadStatus","loadUniform","loadVest","local","localize","locationNull","locationPosition","lock","lockCameraTo","lockCargo","lockDriver","locked","lockedCargo","lockedDriver","lockedTurret","lockTurret","lockWP","log","logEntities","lookAt","lookAtPos","magazineCargo","magazines","magazinesAllTurrets","magazinesAmmo","magazinesAmmoCargo","magazinesAmmoFull","magazinesDetail","magazinesDetailBackpack","magazinesDetailUniform","magazinesDetailVest","magazinesTurret","magazineTurretAmmo","mapAnimAdd","mapAnimClear","mapAnimCommit","mapAnimDone","mapCenterOnCamera","mapGridPosition","markAsFinishedOnSteam","markerAlpha","markerBrush","markerColor","markerDir","markerPos","markerShape","markerSize","markerText","markerType","max","members","min","mineActive","mineDetectedBy","missionConfigFile","missionName","missionNamespace","missionStart","mod","modelToWorld","modelToWorldVisual","moonIntensity","morale","move","moveInAny","moveInCargo","moveInCommander","moveInDriver","moveInGunner","moveInTurret","moveObjectToEnd","moveOut","moveTime","moveTo","moveToCompleted","moveToFailed","musicVolume","name","name location","nameSound","nearEntities","nearestBuilding","nearestLocation","nearestLocations","nearestLocationWithDubbing","nearestObject","nearestObjects","nearObjects","nearObjectsReady","nearRoads","nearSupplies","nearTargets","needReload","netId","netObjNull","newOverlay","nextMenuItemIndex","nextWeatherChange","nil","nMenuItems","not","numberToDate","objectCurators","objectFromNetId","objectParent","objNull","objStatus","onBriefingGroup","onBriefingNotes","onBriefingPlan","onBriefingTeamSwitch","onCommandModeChanged","onDoubleClick","onEachFrame","onGroupIconClick","onGroupIconOverEnter","onGroupIconOverLeave","onHCGroupSelectionChanged","onMapSingleClick","onPlayerConnected","onPlayerDisconnected","onPreloadFinished","onPreloadStarted","onShowNewObject","onTeamSwitch","openCuratorInterface","openMap","openYoutubeVideo","opfor","or","orderGetIn","overcast","overcastForecast","owner","param","params","parseNumber","parseText","parsingNamespace","particlesQuality","pi","pickWeaponPool","pitch","playableSlotsNumber","playableUnits","playAction","playActionNow","player","playerRespawnTime","playerSide","playersNumber","playGesture","playMission","playMove","playMoveNow","playMusic","playScriptedMission","playSound","playSound3D","position","positionCameraToWorld","posScreenToWorld","posWorldToScreen","ppEffectAdjust","ppEffectCommit","ppEffectCommitted","ppEffectCreate","ppEffectDestroy","ppEffectEnable","ppEffectForceInNVG","precision","preloadCamera","preloadObject","preloadSound","preloadTitleObj","preloadTitleRsc","preprocessFile","preprocessFileLineNumbers","primaryWeapon","primaryWeaponItems","primaryWeaponMagazine","priority","private","processDiaryLink","productVersion","profileName","profileNamespace","profileNameSteam","progressLoadingScreen","progressPosition","progressSetPosition","publicVariable","publicVariableClient","publicVariableServer","pushBack","putWeaponPool","queryItemsPool","queryMagazinePool","queryWeaponPool","rad","radioChannelAdd","radioChannelCreate","radioChannelRemove","radioChannelSetCallSign","radioChannelSetLabel","radioVolume","rain","rainbow","random","rank","rankId","rating","rectangular","registeredTasks","registerTask","reload","reloadEnabled","remoteControl","remoteExec","remoteExecCall","removeAction","removeAllActions","removeAllAssignedItems","removeAllContainers","removeAllCuratorAddons","removeAllCuratorCameraAreas","removeAllCuratorEditingAreas","removeAllEventHandlers","removeAllHandgunItems","removeAllItems","removeAllItemsWithMagazines","removeAllMissionEventHandlers","removeAllMPEventHandlers","removeAllMusicEventHandlers","removeAllPrimaryWeaponItems","removeAllWeapons","removeBackpack","removeBackpackGlobal","removeCuratorAddons","removeCuratorCameraArea","removeCuratorEditableObjects","removeCuratorEditingArea","removeDrawIcon","removeDrawLinks","removeEventHandler","removeFromRemainsCollector","removeGoggles","removeGroupIcon","removeHandgunItem","removeHeadgear","removeItem","removeItemFromBackpack","removeItemFromUniform","removeItemFromVest","removeItems","removeMagazine","removeMagazineGlobal","removeMagazines","removeMagazinesTurret","removeMagazineTurret","removeMenuItem","removeMissionEventHandler","removeMPEventHandler","removeMusicEventHandler","removePrimaryWeaponItem","removeSecondaryWeaponItem","removeSimpleTask","removeSwitchableUnit","removeTeamMember","removeUniform","removeVest","removeWeapon","removeWeaponGlobal","removeWeaponTurret","requiredVersion","resetCamShake","resetSubgroupDirection","resistance","resize","resources","respawnVehicle","restartEditorCamera","reveal","revealMine","reverse","reversedMouseY","roadsConnectedTo","roleDescription","ropeAttachedObjects","ropeAttachedTo","ropeAttachEnabled","ropeAttachTo","ropeCreate","ropeCut","ropeEndPosition","ropeLength","ropes","ropeUnwind","ropeUnwound","rotorsForcesRTD","rotorsRpmRTD","round","runInitScript","safeZoneH","safeZoneW","safeZoneWAbs","safeZoneX","safeZoneXAbs","safeZoneY","saveGame","saveIdentity","saveJoysticks","saveOverlay","saveProfileNamespace","saveStatus","saveVar","savingEnabled","say","say2D","say3D","scopeName","score","scoreSide","screenToWorld","scriptDone","scriptName","scriptNull","scudState","secondaryWeapon","secondaryWeaponItems","secondaryWeaponMagazine","select","selectBestPlaces","selectDiarySubject","selectedEditorObjects","selectEditorObject","selectionPosition","selectLeader","selectNoPlayer","selectPlayer","selectWeapon","selectWeaponTurret","sendAUMessage","sendSimpleCommand","sendTask","sendTaskResult","sendUDPMessage","serverCommand","serverCommandAvailable","serverCommandExecutable","serverName","serverTime","set","setAccTime","setAirportSide","setAmmo","setAmmoCargo","setAperture","setApertureNew","setArmoryPoints","setAttributes","setAutonomous","setBehaviour","setBleedingRemaining","setCameraInterest","setCamShakeDefParams","setCamShakeParams","setCamUseTi","setCaptive","setCenterOfMass","setCollisionLight","setCombatMode","setCompassOscillation","setCuratorCameraAreaCeiling","setCuratorCoef","setCuratorEditingAreaType","setCuratorWaypointCost","setCurrentChannel","setCurrentTask","setCurrentWaypoint","setDamage","setDammage","setDate","setDebriefingText","setDefaultCamera","setDestination","setDetailMapBlendPars","setDir","setDirection","setDrawIcon","setDropInterval","setEditorMode","setEditorObjectScope","setEffectCondition","setFace","setFaceAnimation","setFatigue","setFlagOwner","setFlagSide","setFlagTexture","setFog","setFog array","setFormation","setFormationTask","setFormDir","setFriend","setFromEditor","setFSMVariable","setFuel","setFuelCargo","setGroupIcon","setGroupIconParams","setGroupIconsSelectable","setGroupIconsVisible","setGroupId","setGroupIdGlobal","setGroupOwner","setGusts","setHideBehind","setHit","setHitIndex","setHitPointDamage","setHorizonParallaxCoef","setHUDMovementLevels","setIdentity","setImportance","setLeader","setLightAmbient","setLightAttenuation","setLightBrightness","setLightColor","setLightDayLight","setLightFlareMaxDistance","setLightFlareSize","setLightIntensity","setLightnings","setLightUseFlare","setLocalWindParams","setMagazineTurretAmmo","setMarkerAlpha","setMarkerAlphaLocal","setMarkerBrush","setMarkerBrushLocal","setMarkerColor","setMarkerColorLocal","setMarkerDir","setMarkerDirLocal","setMarkerPos","setMarkerPosLocal","setMarkerShape","setMarkerShapeLocal","setMarkerSize","setMarkerSizeLocal","setMarkerText","setMarkerTextLocal","setMarkerType","setMarkerTypeLocal","setMass","setMimic","setMousePosition","setMusicEffect","setMusicEventHandler","setName","setNameSound","setObjectArguments","setObjectMaterial","setObjectProxy","setObjectTexture","setObjectTextureGlobal","setObjectViewDistance","setOvercast","setOwner","setOxygenRemaining","setParticleCircle","setParticleClass","setParticleFire","setParticleParams","setParticleRandom","setPilotLight","setPiPEffect","setPitch","setPlayable","setPlayerRespawnTime","setPos","setPosASL","setPosASL2","setPosASLW","setPosATL","setPosition","setPosWorld","setRadioMsg","setRain","setRainbow","setRandomLip","setRank","setRectangular","setRepairCargo","setShadowDistance","setSide","setSimpleTaskDescription","setSimpleTaskDestination","setSimpleTaskTarget","setSimulWeatherLayers","setSize","setSkill","setSkill array","setSlingLoad","setSoundEffect","setSpeaker","setSpeech","setSpeedMode","setStatValue","setSuppression","setSystemOfUnits","setTargetAge","setTaskResult","setTaskState","setTerrainGrid","setText","setTimeMultiplier","setTitleEffect","setTriggerActivation","setTriggerArea","setTriggerStatements","setTriggerText","setTriggerTimeout","setTriggerType","setType","setUnconscious","setUnitAbility","setUnitPos","setUnitPosWeak","setUnitRank","setUnitRecoilCoefficient","setUnloadInCombat","setUserActionText","setVariable","setVectorDir","setVectorDirAndUp","setVectorUp","setVehicleAmmo","setVehicleAmmoDef","setVehicleArmor","setVehicleId","setVehicleLock","setVehiclePosition","setVehicleTiPars","setVehicleVarName","setVelocity","setVelocityTransformation","setViewDistance","setVisibleIfTreeCollapsed","setWaves","setWaypointBehaviour","setWaypointCombatMode","setWaypointCompletionRadius","setWaypointDescription","setWaypointFormation","setWaypointHousePosition","setWaypointLoiterRadius","setWaypointLoiterType","setWaypointName","setWaypointPosition","setWaypointScript","setWaypointSpeed","setWaypointStatements","setWaypointTimeout","setWaypointType","setWaypointVisible","setWeaponReloadingTime","setWind","setWindDir","setWindForce","setWindStr","setWPPos","show3DIcons","showChat","showCinemaBorder","showCommandingMenu","showCompass","showCuratorCompass","showGPS","showHUD","showLegend","showMap","shownArtilleryComputer","shownChat","shownCompass","shownCuratorCompass","showNewEditorObject","shownGPS","shownHUD","shownMap","shownPad","shownRadio","shownUAVFeed","shownWarrant","shownWatch","showPad","showRadio","showSubtitles","showUAVFeed","showWarrant","showWatch","showWaypoint","side","sideChat","sideEnemy","sideFriendly","sideLogic","sideRadio","sideUnknown","simpleTasks","simulationEnabled","simulCloudDensity","simulCloudOcclusion","simulInClouds","simulWeatherSync","sin","size","sizeOf","skill","skillFinal","skipTime","sleep","sliderPosition","sliderRange","sliderSetPosition","sliderSetRange","sliderSetSpeed","sliderSpeed","slingLoadAssistantShown","soldierMagazines","someAmmo","sort","soundVolume","spawn","speaker","speed","speedMode","splitString","sqrt","squadParams","stance","startLoadingScreen","step","stop","stopped","str","sunOrMoon","supportInfo","suppressFor","surfaceIsWater","surfaceNormal","surfaceType","swimInDepth","switch","switchableUnits","switchAction","switchCamera","switchGesture","switchLight","switchMove","synchronizedObjects","synchronizedTriggers","synchronizedWaypoints","synchronizeObjectsAdd","synchronizeObjectsRemove","synchronizeTrigger","synchronizeWaypoint","synchronizeWaypoint trigger","systemChat","systemOfUnits","tan","targetKnowledge","targetsAggregate","targetsQuery","taskChildren","taskCompleted","taskDescription","taskDestination","taskHint","taskNull","taskParent","taskResult","taskState","teamMember","teamMemberNull","teamName","teams","teamSwitch","teamSwitchEnabled","teamType","terminate","terrainIntersect","terrainIntersectASL","text","text location","textLog","textLogFormat","tg","then","throw","time","timeMultiplier","titleCut","titleFadeOut","titleObj","titleRsc","titleText","to","toArray","toLower","toString","toUpper","triggerActivated","triggerActivation","triggerArea","triggerAttachedVehicle","triggerAttachObject","triggerAttachVehicle","triggerStatements","triggerText","triggerTimeout","triggerTimeoutCurrent","triggerType","true","try","turretLocal","turretOwner","turretUnit","tvAdd","tvClear","tvCollapse","tvCount","tvCurSel","tvData","tvDelete","tvExpand","tvPicture","tvSetCurSel","tvSetData","tvSetPicture","tvSetPictureColor","tvSetTooltip","tvSetValue","tvSort","tvSortByValue","tvText","tvValue","type","typeName","typeOf","UAVControl","uiNamespace","uiSleep","unassignCurator","unassignItem","unassignTeam","unassignVehicle","underwater","uniform","uniformContainer","uniformItems","uniformMagazines","unitAddons","unitBackpack","unitPos","unitReady","unitRecoilCoefficient","units","unitsBelowHeight","unlinkItem","unlockAchievement","unregisterTask","updateDrawIcon","updateMenuItem","updateObjectTree","useAudioTimeForMoves","vectorAdd","vectorCos","vectorCrossProduct","vectorDiff","vectorDir","vectorDirVisual","vectorDistance","vectorDistanceSqr","vectorDotProduct","vectorFromTo","vectorMagnitude","vectorMagnitudeSqr","vectorMultiply","vectorNormalized","vectorUp","vectorUpVisual","vehicle","vehicleChat","vehicleRadio","vehicles","vehicleVarName","velocity","velocityModelSpace","verifySignature","vest","vestContainer","vestItems","vestMagazines","viewDistance","visibleCompass","visibleGPS","visibleMap","visiblePosition","visiblePositionASL","visibleWatch","waitUntil","waves","waypointAttachedObject","waypointAttachedVehicle","waypointAttachObject","waypointAttachVehicle","waypointBehaviour","waypointCombatMode","waypointCompletionRadius","waypointDescription","waypointFormation","waypointHousePosition","waypointLoiterRadius","waypointLoiterType","waypointName","waypointPosition","waypoints","waypointScript","waypointsEnabledUAV","waypointShow","waypointSpeed","waypointStatements","waypointTimeout","waypointTimeoutCurrent","waypointType","waypointVisible","weaponAccessories","weaponCargo","weaponDirection","weaponLowered","weapons","weaponsItems","weaponsItemsCargo","weaponState","weaponsTurret","weightRTD","west","WFSideText","while","wind","windDir","windStr","wingsForcesRTD","with","worldName","worldSize","worldToModel","worldToModelVisual","worldToScreen"],c=["case","catch","default","do","else","exit","exitWith|5","for","forEach","from","if","switch","then","throw","to","try","while","with"],d=["!","-","+","!=","%","&&","*","/","=","==",">",">=","<","<=","^",":",">>"],e=["_forEachIndex|10","_this|10","_x|10"],f=["true","false","nil"],g=b.filter(function(a){
+return-1==c.indexOf(a)&&-1==f.indexOf(a)&&-1==d.indexOf(a)});g=g.concat(e);var h={className:"string",relevance:0,variants:[{begin:'"',end:'"',contains:[{begin:'""'}]},{begin:"'",end:"'",contains:[{begin:"''"}]}]},i={className:"number",begin:a.NUMBER_RE,relevance:0},j={className:"string",variants:[a.QUOTE_STRING_MODE,{begin:"'\\\\?.",end:"'",illegal:"."}]},k={className:"preprocessor",begin:"#",end:"$",keywords:"if else elif endif define undef warning error line pragma ifdef ifndef",contains:[{begin:/\\\n/,relevance:0},{beginKeywords:"include",end:"$",contains:[j,{className:"string",begin:"<",end:">",illegal:"\\n"}]},j,i,a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE]};return{aliases:["sqf"],case_insensitive:!0,keywords:{keyword:c.join(" "),built_in:g.join(" "),literal:f.join(" ")},contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,i,h,k]}}),a.registerLanguage("sql",function(a){var b=a.COMMENT("--","$");return{case_insensitive:!0,illegal:/[<>{}*]/,contains:[{className:"operator",beginKeywords:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke",end:/;/,endsWithParent:!0,keywords:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes c cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle d data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration e each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract f failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function g general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http i id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists k keep keep_duplicates key keys kill l language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim m main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex n name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding p package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime t table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},contains:[{className:"string",begin:"'",end:"'",contains:[a.BACKSLASH_ESCAPE,{begin:"''"}]},{className:"string",begin:'"',end:'"',contains:[a.BACKSLASH_ESCAPE,{begin:'""'}]},{className:"string",begin:"`",end:"`",contains:[a.BACKSLASH_ESCAPE]},a.C_NUMBER_MODE,a.C_BLOCK_COMMENT_MODE,b]},a.C_BLOCK_COMMENT_MODE,b]}}),a.registerLanguage("stata",function(a){return{aliases:["do","ado"],case_insensitive:!0,keywords:"if else in foreach for forv forva forval forvalu forvalue forvalues by bys bysort xi quietly qui capture about ac ac_7 acprplot acprplot_7 adjust ado adopath adoupdate alpha ameans an ano anov anova anova_estat anova_terms anovadef aorder ap app appe appen append arch arch_dr arch_estat arch_p archlm areg areg_p args arima arima_dr arima_estat arima_p as asmprobit asmprobit_estat asmprobit_lf asmprobit_mfx__dlg asmprobit_p ass asse asser assert avplot avplot_7 avplots avplots_7 bcskew0 bgodfrey binreg bip0_lf biplot bipp_lf bipr_lf bipr_p biprobit bitest bitesti bitowt blogit bmemsize boot bootsamp bootstrap bootstrap_8 boxco_l boxco_p boxcox boxcox_6 boxcox_p bprobit br break brier bro brow brows browse brr brrstat bs bs_7 bsampl_w bsample bsample_7 bsqreg bstat bstat_7 bstat_8 bstrap bstrap_7 ca ca_estat ca_p cabiplot camat canon canon_8 canon_8_p canon_estat canon_p cap caprojection capt captu captur capture cat cc cchart cchart_7 cci cd censobs_table centile cf char chdir checkdlgfiles checkestimationsample checkhlpfiles checksum chelp ci cii cl class classutil clear cli clis clist clo clog clog_lf clog_p clogi clogi_sw clogit clogit_lf clogit_p clogitp clogl_sw cloglog clonevar clslistarray cluster cluster_measures cluster_stop cluster_tree cluster_tree_8 clustermat cmdlog cnr cnre cnreg cnreg_p cnreg_sw cnsreg codebook collaps4 collapse colormult_nb colormult_nw compare compress conf confi confir confirm conren cons const constr constra constrai constrain constraint continue contract copy copyright copysource cor corc corr corr2data corr_anti corr_kmo corr_smc corre correl correla correlat correlate corrgram cou coun count cox cox_p cox_sw coxbase coxhaz coxvar cprplot cprplot_7 crc cret cretu cretur creturn cross cs cscript cscript_log csi ct ct_is ctset ctst_5 ctst_st cttost cumsp cumsp_7 cumul cusum cusum_7 cutil d datasig datasign datasigna datasignat datasignatu datasignatur datasignature datetof db dbeta de dec deco decod decode deff des desc descr descri describ describe destring dfbeta dfgls dfuller di di_g dir dirstats dis discard disp disp_res disp_s displ displa display distinct do doe doed doedi doedit dotplot dotplot_7 dprobit drawnorm drop ds ds_util dstdize duplicates durbina dwstat dydx e ed edi edit egen eivreg emdef en enc enco encod encode eq erase ereg ereg_lf ereg_p ereg_sw ereghet ereghet_glf ereghet_glf_sh ereghet_gp ereghet_ilf ereghet_ilf_sh ereghet_ip eret eretu eretur ereturn err erro error est est_cfexist est_cfname est_clickable est_expand est_hold est_table est_unhold est_unholdok estat estat_default estat_summ estat_vce_only esti estimates etodow etof etomdy ex exi exit expand expandcl fac fact facto factor factor_estat factor_p factor_pca_rotated factor_rotate factormat fcast fcast_compute fcast_graph fdades fdadesc fdadescr fdadescri fdadescrib fdadescribe fdasav fdasave fdause fh_st file open file read file close file filefilter fillin find_hlp_file findfile findit findit_7 fit fl fli flis flist for5_0 form forma format fpredict frac_154 frac_adj frac_chk frac_cox frac_ddp frac_dis frac_dv frac_in frac_mun frac_pp frac_pq frac_pv frac_wgt frac_xo fracgen fracplot fracplot_7 fracpoly fracpred fron_ex fron_hn fron_p fron_tn fron_tn2 frontier ftodate ftoe ftomdy ftowdate g gamhet_glf gamhet_gp gamhet_ilf gamhet_ip gamma gamma_d2 gamma_p gamma_sw gammahet gdi_hexagon gdi_spokes ge gen gene gener genera generat generate genrank genstd genvmean gettoken gl gladder gladder_7 glim_l01 glim_l02 glim_l03 glim_l04 glim_l05 glim_l06 glim_l07 glim_l08 glim_l09 glim_l10 glim_l11 glim_l12 glim_lf glim_mu glim_nw1 glim_nw2 glim_nw3 glim_p glim_v1 glim_v2 glim_v3 glim_v4 glim_v5 glim_v6 glim_v7 glm glm_6 glm_p glm_sw glmpred glo glob globa global glogit glogit_8 glogit_p gmeans gnbre_lf gnbreg gnbreg_5 gnbreg_p gomp_lf gompe_sw gomper_p gompertz gompertzhet gomphet_glf gomphet_glf_sh gomphet_gp gomphet_ilf gomphet_ilf_sh gomphet_ip gphdot gphpen gphprint gprefs gprobi_p gprobit gprobit_8 gr gr7 gr_copy gr_current gr_db gr_describe gr_dir gr_draw gr_draw_replay gr_drop gr_edit gr_editviewopts gr_example gr_example2 gr_export gr_print gr_qscheme gr_query gr_read gr_rename gr_replay gr_save gr_set gr_setscheme gr_table gr_undo gr_use graph graph7 grebar greigen greigen_7 greigen_8 grmeanby grmeanby_7 gs_fileinfo gs_filetype gs_graphinfo gs_stat gsort gwood h hadimvo hareg hausman haver he heck_d2 heckma_p heckman heckp_lf heckpr_p heckprob hel help hereg hetpr_lf hetpr_p hetprob hettest hexdump hilite hist hist_7 histogram hlogit hlu hmeans hotel hotelling hprobit hreg hsearch icd9 icd9_ff icd9p iis impute imtest inbase include inf infi infil infile infix inp inpu input ins insheet insp inspe inspec inspect integ inten intreg intreg_7 intreg_p intrg2_ll intrg_ll intrg_ll2 ipolate iqreg ir irf irf_create irfm iri is_svy is_svysum isid istdize ivprob_1_lf ivprob_lf ivprobit ivprobit_p ivreg ivreg_footnote ivtob_1_lf ivtob_lf ivtobit ivtobit_p jackknife jacknife jknife jknife_6 jknife_8 jkstat joinby kalarma1 kap kap_3 kapmeier kappa kapwgt kdensity kdensity_7 keep ksm ksmirnov ktau kwallis l la lab labe label labelbook ladder levels levelsof leverage lfit lfit_p li lincom line linktest lis list lloghet_glf lloghet_glf_sh lloghet_gp lloghet_ilf lloghet_ilf_sh lloghet_ip llogi_sw llogis_p llogist llogistic llogistichet lnorm_lf lnorm_sw lnorma_p lnormal lnormalhet lnormhet_glf lnormhet_glf_sh lnormhet_gp lnormhet_ilf lnormhet_ilf_sh lnormhet_ip lnskew0 loadingplot loc loca local log logi logis_lf logistic logistic_p logit logit_estat logit_p loglogs logrank loneway lookfor lookup lowess lowess_7 lpredict lrecomp lroc lroc_7 lrtest ls lsens lsens_7 lsens_x lstat ltable ltable_7 ltriang lv lvr2plot lvr2plot_7 m ma mac macr macro makecns man manova manova_estat manova_p manovatest mantel mark markin markout marksample mat mat_capp mat_order mat_put_rr mat_rapp mata mata_clear mata_describe mata_drop mata_matdescribe mata_matsave mata_matuse mata_memory mata_mlib mata_mosave mata_rename mata_which matalabel matcproc matlist matname matr matri matrix matrix_input__dlg matstrik mcc mcci md0_ md1_ md1debug_ md2_ md2debug_ mds mds_estat mds_p mdsconfig mdslong mdsmat mdsshepard mdytoe mdytof me_derd mean means median memory memsize meqparse mer merg merge mfp mfx mhelp mhodds minbound mixed_ll mixed_ll_reparm mkassert mkdir mkmat mkspline ml ml_5 ml_adjs ml_bhhhs ml_c_d ml_check ml_clear ml_cnt ml_debug ml_defd ml_e0 ml_e0_bfgs ml_e0_cycle ml_e0_dfp ml_e0i ml_e1 ml_e1_bfgs ml_e1_bhhh ml_e1_cycle ml_e1_dfp ml_e2 ml_e2_cycle ml_ebfg0 ml_ebfr0 ml_ebfr1 ml_ebh0q ml_ebhh0 ml_ebhr0 ml_ebr0i ml_ecr0i ml_edfp0 ml_edfr0 ml_edfr1 ml_edr0i ml_eds ml_eer0i ml_egr0i ml_elf ml_elf_bfgs ml_elf_bhhh ml_elf_cycle ml_elf_dfp ml_elfi ml_elfs ml_enr0i ml_enrr0 ml_erdu0 ml_erdu0_bfgs ml_erdu0_bhhh ml_erdu0_bhhhq ml_erdu0_cycle ml_erdu0_dfp ml_erdu0_nrbfgs ml_exde ml_footnote ml_geqnr ml_grad0 ml_graph ml_hbhhh ml_hd0 ml_hold ml_init ml_inv ml_log ml_max ml_mlout ml_mlout_8 ml_model ml_nb0 ml_opt ml_p ml_plot ml_query ml_rdgrd ml_repor ml_s_e ml_score ml_searc ml_technique ml_unhold mleval mlf_ mlmatbysum mlmatsum mlog mlogi mlogit mlogit_footnote mlogit_p mlopts mlsum mlvecsum mnl0_ mor more mov move mprobit mprobit_lf mprobit_p mrdu0_ mrdu1_ mvdecode mvencode mvreg mvreg_estat n nbreg nbreg_al nbreg_lf nbreg_p nbreg_sw nestreg net newey newey_7 newey_p news nl nl_7 nl_9 nl_9_p nl_p nl_p_7 nlcom nlcom_p nlexp2 nlexp2_7 nlexp2a nlexp2a_7 nlexp3 nlexp3_7 nlgom3 nlgom3_7 nlgom4 nlgom4_7 nlinit nllog3 nllog3_7 nllog4 nllog4_7 nlog_rd nlogit nlogit_p nlogitgen nlogittree nlpred no nobreak noi nois noisi noisil noisily note notes notes_dlg nptrend numlabel numlist odbc old_ver olo olog ologi ologi_sw ologit ologit_p ologitp on one onew onewa oneway op_colnm op_comp op_diff op_inv op_str opr opro oprob oprob_sw oprobi oprobi_p oprobit oprobitp opts_exclusive order orthog orthpoly ou out outf outfi outfil outfile outs outsh outshe outshee outsheet ovtest pac pac_7 palette parse parse_dissim pause pca pca_8 pca_display pca_estat pca_p pca_rotate pcamat pchart pchart_7 pchi pchi_7 pcorr pctile pentium pergram pergram_7 permute permute_8 personal peto_st pkcollapse pkcross pkequiv pkexamine pkexamine_7 pkshape pksumm pksumm_7 pl plo plot plugin pnorm pnorm_7 poisgof poiss_lf poiss_sw poisso_p poisson poisson_estat post postclose postfile postutil pperron pr prais prais_e prais_e2 prais_p predict predictnl preserve print pro prob probi probit probit_estat probit_p proc_time procoverlay procrustes procrustes_estat procrustes_p profiler prog progr progra program prop proportion prtest prtesti pwcorr pwd q\\s qby qbys qchi qchi_7 qladder qladder_7 qnorm qnorm_7 qqplot qqplot_7 qreg qreg_c qreg_p qreg_sw qu quadchk quantile quantile_7 que quer query range ranksum ratio rchart rchart_7 rcof recast reclink recode reg reg3 reg3_p regdw regr regre regre_p2 regres regres_p regress regress_estat regriv_p remap ren rena renam rename renpfix repeat replace report reshape restore ret retu retur return rm rmdir robvar roccomp roccomp_7 roccomp_8 rocf_lf rocfit rocfit_8 rocgold rocplot rocplot_7 roctab roctab_7 rolling rologit rologit_p rot rota rotat rotate rotatemat rreg rreg_p ru run runtest rvfplot rvfplot_7 rvpplot rvpplot_7 sa safesum sample sampsi sav save savedresults saveold sc sca scal scala scalar scatter scm_mine sco scob_lf scob_p scobi_sw scobit scor score scoreplot scoreplot_help scree screeplot screeplot_help sdtest sdtesti se search separate seperate serrbar serrbar_7 serset set set_defaults sfrancia sh she shel shell shewhart shewhart_7 signestimationsample signrank signtest simul simul_7 simulate simulate_8 sktest sleep slogit slogit_d2 slogit_p smooth snapspan so sor sort spearman spikeplot spikeplot_7 spikeplt spline_x split sqreg sqreg_p sret sretu sretur sreturn ssc st st_ct st_hc st_hcd st_hcd_sh st_is st_issys st_note st_promo st_set st_show st_smpl st_subid stack statsby statsby_8 stbase stci stci_7 stcox stcox_estat stcox_fr stcox_fr_ll stcox_p stcox_sw stcoxkm stcoxkm_7 stcstat stcurv stcurve stcurve_7 stdes stem stepwise stereg stfill stgen stir stjoin stmc stmh stphplot stphplot_7 stphtest stphtest_7 stptime strate strate_7 streg streg_sw streset sts sts_7 stset stsplit stsum sttocc sttoct stvary stweib su suest suest_8 sum summ summa summar summari summariz summarize sunflower sureg survcurv survsum svar svar_p svmat svy svy_disp svy_dreg svy_est svy_est_7 svy_estat svy_get svy_gnbreg_p svy_head svy_header svy_heckman_p svy_heckprob_p svy_intreg_p svy_ivreg_p svy_logistic_p svy_logit_p svy_mlogit_p svy_nbreg_p svy_ologit_p svy_oprobit_p svy_poisson_p svy_probit_p svy_regress_p svy_sub svy_sub_7 svy_x svy_x_7 svy_x_p svydes svydes_8 svygen svygnbreg svyheckman svyheckprob svyintreg svyintreg_7 svyintrg svyivreg svylc svylog_p svylogit svymarkout svymarkout_8 svymean svymlog svymlogit svynbreg svyolog svyologit svyoprob svyoprobit svyopts svypois svypois_7 svypoisson svyprobit svyprobt svyprop svyprop_7 svyratio svyreg svyreg_p svyregress svyset svyset_7 svyset_8 svytab svytab_7 svytest svytotal sw sw_8 swcnreg swcox swereg swilk swlogis swlogit swologit swoprbt swpois swprobit swqreg swtobit swweib symmetry symmi symplot symplot_7 syntax sysdescribe sysdir sysuse szroeter ta tab tab1 tab2 tab_or tabd tabdi tabdis tabdisp tabi table tabodds tabodds_7 tabstat tabu tabul tabula tabulat tabulate te tempfile tempname tempvar tes test testnl testparm teststd tetrachoric time_it timer tis tob tobi tobit tobit_p tobit_sw token tokeni tokeniz tokenize tostring total translate translator transmap treat_ll treatr_p treatreg trim trnb_cons trnb_mean trpoiss_d2 trunc_ll truncr_p truncreg tsappend tset tsfill tsline tsline_ex tsreport tsrevar tsrline tsset tssmooth tsunab ttest ttesti tut_chk tut_wait tutorial tw tware_st two twoway twoway__fpfit_serset twoway__function_gen twoway__histogram_gen twoway__ipoint_serset twoway__ipoints_serset twoway__kdensity_gen twoway__lfit_serset twoway__normgen_gen twoway__pci_serset twoway__qfit_serset twoway__scatteri_serset twoway__sunflower_gen twoway_ksm_serset ty typ type typeof u unab unabbrev unabcmd update us use uselabel var var_mkcompanion var_p varbasic varfcast vargranger varirf varirf_add varirf_cgraph varirf_create varirf_ctable varirf_describe varirf_dir varirf_drop varirf_erase varirf_graph varirf_ograph varirf_rename varirf_set varirf_table varlist varlmar varnorm varsoc varstable varstable_w varstable_w2 varwle vce vec vec_fevd vec_mkphi vec_p vec_p_w vecirf_create veclmar veclmar_w vecnorm vecnorm_w vecrank vecstable verinst vers versi versio version view viewsource vif vwls wdatetof webdescribe webseek webuse weib1_lf weib2_lf weib_lf weib_lf0 weibhet_glf weibhet_glf_sh weibhet_glfa weibhet_glfa_sh weibhet_gp weibhet_ilf weibhet_ilf_sh weibhet_ilfa weibhet_ilfa_sh weibhet_ip weibu_sw weibul_p weibull weibull_c weibull_s weibullhet wh whelp whi which whil while wilc_st wilcoxon win wind windo window winexec wntestb wntestb_7 wntestq xchart xchart_7 xcorr xcorr_7 xi xi_6 xmlsav xmlsave xmluse xpose xsh xshe xshel xshell xt_iis xt_tis xtab_p xtabond xtbin_p xtclog xtcloglog xtcloglog_8 xtcloglog_d2 xtcloglog_pa_p xtcloglog_re_p xtcnt_p xtcorr xtdata xtdes xtfront_p xtfrontier xtgee xtgee_elink xtgee_estat xtgee_makeivar xtgee_p xtgee_plink xtgls xtgls_p xthaus xthausman xtht_p xthtaylor xtile xtint_p xtintreg xtintreg_8 xtintreg_d2 xtintreg_p xtivp_1 xtivp_2 xtivreg xtline xtline_ex xtlogit xtlogit_8 xtlogit_d2 xtlogit_fe_p xtlogit_pa_p xtlogit_re_p xtmixed xtmixed_estat xtmixed_p xtnb_fe xtnb_lf xtnbreg xtnbreg_pa_p xtnbreg_refe_p xtpcse xtpcse_p xtpois xtpoisson xtpoisson_d2 xtpoisson_pa_p xtpoisson_refe_p xtpred xtprobit xtprobit_8 xtprobit_d2 xtprobit_re_p xtps_fe xtps_lf xtps_ren xtps_ren_8 xtrar_p xtrc xtrc_p xtrchh xtrefe_p xtreg xtreg_be xtreg_fe xtreg_ml xtreg_pa_p xtreg_re xtregar xtrere_p xtset xtsf_ll xtsf_llti xtsum xttab xttest0 xttobit xttobit_8 xttobit_p xttrans yx yxview__barlike_draw yxview_area_draw yxview_bar_draw yxview_dot_draw yxview_dropline_draw yxview_function_draw yxview_iarrow_draw yxview_ilabels_draw yxview_normal_draw yxview_pcarrow_draw yxview_pcbarrow_draw yxview_pccapsym_draw yxview_pcscatter_draw yxview_pcspike_draw yxview_rarea_draw yxview_rbar_draw yxview_rbarm_draw yxview_rcap_draw yxview_rcapsym_draw yxview_rconnected_draw yxview_rline_draw yxview_rscatter_draw yxview_rspike_draw yxview_spike_draw yxview_sunflower_draw zap_s zinb zinb_llf zinb_plf zip zip_llf zip_p zip_plf zt_ct_5 zt_hc_5 zt_hcd_5 zt_is_5 zt_iss_5 zt_sho_5 zt_smp_5 ztbase_5 ztcox_5 ztdes_5 ztereg_5 ztfill_5 ztgen_5 ztir_5 ztjoin_5 ztnb ztnb_p ztp ztp_p zts_5 ztset_5 ztspli_5 ztsum_5 zttoct_5 ztvary_5 ztweib_5",contains:[{className:"label",variants:[{begin:"\\$\\{?[a-zA-Z0-9_]+\\}?"},{begin:"`[a-zA-Z0-9_]+'"}]},{className:"string",variants:[{begin:'`"[^\r\n]*?"\''},{begin:'"[^\r\n"]*"'}]},{className:"literal",variants:[{begin:"\\b(abs|acos|asin|atan|atan2|atanh|ceil|cloglog|comb|cos|digamma|exp|floor|invcloglog|invlogit|ln|lnfact|lnfactorial|lngamma|log|log10|max|min|mod|reldif|round|sign|sin|sqrt|sum|tan|tanh|trigamma|trunc|betaden|Binomial|binorm|binormal|chi2|chi2tail|dgammapda|dgammapdada|dgammapdadx|dgammapdx|dgammapdxdx|F|Fden|Ftail|gammaden|gammap|ibeta|invbinomial|invchi2|invchi2tail|invF|invFtail|invgammap|invibeta|invnchi2|invnFtail|invnibeta|invnorm|invnormal|invttail|nbetaden|nchi2|nFden|nFtail|nibeta|norm|normal|normalden|normd|npnchi2|tden|ttail|uniform|abbrev|char|index|indexnot|length|lower|ltrim|match|plural|proper|real|regexm|regexr|regexs|reverse|rtrim|string|strlen|strlower|strltrim|strmatch|strofreal|strpos|strproper|strreverse|strrtrim|strtrim|strupper|subinstr|subinword|substr|trim|upper|word|wordcount|_caller|autocode|byteorder|chop|clip|cond|e|epsdouble|epsfloat|group|inlist|inrange|irecode|matrix|maxbyte|maxdouble|maxfloat|maxint|maxlong|mi|minbyte|mindouble|minfloat|minint|minlong|missing|r|recode|replay|return|s|scalar|d|date|day|dow|doy|halfyear|mdy|month|quarter|week|year|d|daily|dofd|dofh|dofm|dofq|dofw|dofy|h|halfyearly|hofd|m|mofd|monthly|q|qofd|quarterly|tin|twithin|w|weekly|wofd|y|yearly|yh|ym|yofd|yq|yw|cholesky|colnumb|colsof|corr|det|diag|diag0cnt|el|get|hadamard|I|inv|invsym|issym|issymmetric|J|matmissing|matuniform|mreldif|nullmat|rownumb|rowsof|sweep|syminv|trace|vec|vecdiag)(?=\\(|$)"}]},a.COMMENT("^[ 	]*\\*.*$",!1),a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE]}}),a.registerLanguage("step21",function(a){var b="[A-Z_][A-Z0-9_.]*",c="END-ISO-10303-21;",d={literal:"",built_in:"",keyword:"HEADER ENDSEC DATA"},e={className:"preprocessor",begin:"ISO-10303-21;",relevance:10},f=[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.COMMENT("/\\*\\*!","\\*/"),a.C_NUMBER_MODE,a.inherit(a.APOS_STRING_MODE,{illegal:null}),a.inherit(a.QUOTE_STRING_MODE,{illegal:null}),{className:"string",begin:"'",end:"'"},{className:"label",variants:[{begin:"#",end:"\\d+",illegal:"\\W"}]}];return{aliases:["p21","step","stp"],case_insensitive:!0,lexemes:b,keywords:d,contains:[{className:"preprocessor",begin:c,relevance:10},e].concat(f)}}),a.registerLanguage("stylus",function(a){var b={className:"variable",begin:"\\$"+a.IDENT_RE},c={className:"hexcolor",begin:"#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})",relevance:10},d=["charset","css","debug","extend","font-face","for","import","include","media","mixin","page","warn","while"],e=["after","before","first-letter","first-line","active","first-child","focus","hover","lang","link","visited"],f=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],g="[\\.\\s\\n\\[\\:,]",h=["align-content","align-items","align-self","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","auto","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","clip-path","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-variant-ligatures","font-weight","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inherit","initial","justify-content","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","mask","max-height","max-width","min-height","min-width","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","white-space","widows","width","word-break","word-spacing","word-wrap","z-index"],i=["\\{","\\}","\\?","(\\bReturn\\b)","(\\bEnd\\b)","(\\bend\\b)",";","#\\s","\\*\\s","===\\s","\\|","%"];
+return{aliases:["styl"],case_insensitive:!1,illegal:"("+i.join("|")+")",keywords:"if else for in",contains:[a.QUOTE_STRING_MODE,a.APOS_STRING_MODE,a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,c,{begin:"\\.[a-zA-Z][a-zA-Z0-9_-]*"+g,returnBegin:!0,contains:[{className:"class",begin:"\\.[a-zA-Z][a-zA-Z0-9_-]*"}]},{begin:"\\#[a-zA-Z][a-zA-Z0-9_-]*"+g,returnBegin:!0,contains:[{className:"id",begin:"\\#[a-zA-Z][a-zA-Z0-9_-]*"}]},{begin:"\\b("+f.join("|")+")"+g,returnBegin:!0,contains:[{className:"tag",begin:"\\b[a-zA-Z][a-zA-Z0-9_-]*"}]},{className:"pseudo",begin:"&?:?:\\b("+e.join("|")+")"+g},{className:"at_rule",begin:"@("+d.join("|")+")\\b"},b,a.CSS_NUMBER_MODE,a.NUMBER_MODE,{className:"function",begin:"\\b[a-zA-Z][a-zA-Z0-9_-]*\\(.*\\)",illegal:"[\\n]",returnBegin:!0,contains:[{className:"title",begin:"\\b[a-zA-Z][a-zA-Z0-9_-]*"},{className:"params",begin:/\(/,end:/\)/,contains:[c,b,a.APOS_STRING_MODE,a.CSS_NUMBER_MODE,a.NUMBER_MODE,a.QUOTE_STRING_MODE]}]},{className:"attribute",begin:"\\b("+h.reverse().join("|")+")\\b"}]}}),a.registerLanguage("swift",function(a){var b={keyword:"__COLUMN__ __FILE__ __FUNCTION__ __LINE__ as as! as? associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},c={className:"type",begin:"\\b[A-Z][\\w']*",relevance:0},d=a.COMMENT("/\\*","\\*/",{contains:["self"]}),e={className:"subst",begin:/\\\(/,end:"\\)",keywords:b,contains:[]},f={className:"number",begin:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",relevance:0},g=a.inherit(a.QUOTE_STRING_MODE,{contains:[e,a.BACKSLASH_ESCAPE]});return e.contains=[f],{keywords:b,contains:[g,a.C_LINE_COMMENT_MODE,d,c,f,{className:"func",beginKeywords:"func",end:"{",excludeEnd:!0,contains:[a.inherit(a.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/,illegal:/\(/}),{className:"generics",begin:/</,end:/>/,illegal:/>/},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:b,contains:["self",f,g,a.C_BLOCK_COMMENT_MODE,{begin:":"}],illegal:/["']/}],illegal:/\[|%/},{className:"class",beginKeywords:"struct protocol class extension enum",keywords:b,end:"\\{",excludeEnd:!0,contains:[a.inherit(a.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/})]},{className:"preprocessor",begin:"(@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain)"},{beginKeywords:"import",end:/$/,contains:[a.C_LINE_COMMENT_MODE,d]}]}}),a.registerLanguage("tcl",function(a){return{aliases:["tk"],keywords:"after append apply array auto_execok auto_import auto_load auto_mkindex auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock close concat continue dde dict encoding eof error eval exec exit expr fblocked fconfigure fcopy file fileevent filename flush for foreach format gets glob global history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename return safe scan seek set socket source split string subst switch tcl_endOfWord tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update uplevel upvar variable vwait while",contains:[a.COMMENT(";[ \\t]*#","$"),a.COMMENT("^[ \\t]*#","$"),{beginKeywords:"proc",end:"[\\{]",excludeEnd:!0,contains:[{className:"symbol",begin:"[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",end:"[ \\t\\n\\r]",endsWithParent:!0,excludeEnd:!0}]},{className:"variable",excludeEnd:!0,variants:[{begin:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*\\(([a-zA-Z0-9_])*\\)",end:"[^a-zA-Z0-9_\\}\\$]"},{begin:"\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*",end:"(\\))?[^a-zA-Z0-9_\\}\\$]"}]},{className:"string",contains:[a.BACKSLASH_ESCAPE],variants:[a.inherit(a.APOS_STRING_MODE,{illegal:null}),a.inherit(a.QUOTE_STRING_MODE,{illegal:null})]},{className:"number",variants:[a.BINARY_NUMBER_MODE,a.C_NUMBER_MODE]}]}}),a.registerLanguage("tex",function(a){var b={className:"command",begin:"\\\\[a-zA-Zа-яА-я]+[\\*]?"},c={className:"command",begin:"\\\\[^a-zA-Zа-яА-я0-9]"},d={className:"special",begin:"[{}\\[\\]\\&#~]",relevance:0};return{contains:[{begin:"\\\\[a-zA-Zа-яА-я]+[\\*]? *= *-?\\d*\\.?\\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?",returnBegin:!0,contains:[b,c,{className:"number",begin:" *=",end:"-?\\d*\\.?\\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?",excludeBegin:!0}],relevance:10},b,c,d,{className:"formula",begin:"\\$\\$",end:"\\$\\$",contains:[b,c,d],relevance:0},{className:"formula",begin:"\\$",end:"\\$",contains:[b,c,d],relevance:0},a.COMMENT("%","$",{relevance:0})]}}),a.registerLanguage("thrift",function(a){var b="bool byte i16 i32 i64 double string binary";return{keywords:{keyword:"namespace const typedef struct enum service exception void oneway set list map required optional",built_in:b,literal:"true false"},contains:[a.QUOTE_STRING_MODE,a.NUMBER_MODE,a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,{className:"class",beginKeywords:"struct enum service exception",end:/\{/,illegal:/\n/,contains:[a.inherit(a.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{begin:"\\b(set|list|map)\\s*<",end:">",keywords:b,contains:["self"]}]}}),a.registerLanguage("tp",function(a){var b={className:"number",begin:"[1-9][0-9]*",relevance:0},c={className:"comment",begin:":[^\\]]+"},d={className:"built_in",begin:"(AR|P|PAYLOAD|PR|R|SR|RSR|LBL|VR|UALM|MESSAGE|UTOOL|UFRAME|TIMER|    TIMER_OVERFLOW|JOINT_MAX_SPEED|RESUME_PROG|DIAG_REC)\\[",end:"\\]",contains:["self",b,c]},e={className:"built_in",begin:"(AI|AO|DI|DO|F|RI|RO|UI|UO|GI|GO|SI|SO)\\[",end:"\\]",contains:["self",b,a.QUOTE_STRING_MODE,c]};return{keywords:{keyword:"ABORT ACC ADJUST AND AP_LD BREAK CALL CNT COL CONDITION CONFIG DA DB DIV DETECT ELSE END ENDFOR ERR_NUM ERROR_PROG FINE FOR GP GUARD INC IF JMP LINEAR_MAX_SPEED LOCK MOD MONITOR OFFSET Offset OR OVERRIDE PAUSE PREG PTH RT_LD RUN SELECT SKIP Skip TA TB TO TOOL_OFFSET Tool_Offset UF UT UFRAME_NUM UTOOL_NUM UNLOCK WAIT X Y Z W P R STRLEN SUBSTR FINDSTR VOFFSET",constant:"ON OFF max_speed LPOS JPOS ENABLE DISABLE START STOP RESET"},contains:[d,e,{className:"keyword",begin:"/(PROG|ATTR|MN|POS|END)\\b"},{className:"keyword",begin:"(CALL|RUN|POINT_LOGIC|LBL)\\b"},{className:"keyword",begin:"\\b(ACC|CNT|Skip|Offset|PSPD|RT_LD|AP_LD|Tool_Offset)"},{className:"number",begin:"\\d+(sec|msec|mm/sec|cm/min|inch/min|deg/sec|mm|in|cm)?\\b",relevance:0},a.COMMENT("//","[;$]"),a.COMMENT("!","[;$]"),a.COMMENT("--eg:","$"),a.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"'"},a.C_NUMBER_MODE,{className:"variable",begin:"\\$[A-Za-z0-9_]+"}]}}),a.registerLanguage("twig",function(a){var b={className:"params",begin:"\\(",end:"\\)"},c="attribute block constant cycle date dump include max min parent random range source template_from_string",d={className:"function",beginKeywords:c,relevance:0,contains:[b]},e={className:"filter",begin:/\|[A-Za-z_]+:?/,keywords:"abs batch capitalize convert_encoding date date_modify default escape first format join json_encode keys last length lower merge nl2br number_format raw replace reverse round slice sort split striptags title trim upper url_encode",contains:[d]},f="autoescape block do embed extends filter flush for if import include macro sandbox set spaceless use verbatim";return f=f+" "+f.split(" ").map(function(a){return"end"+a}).join(" "),{aliases:["craftcms"],case_insensitive:!0,subLanguage:"xml",contains:[a.COMMENT(/\{#/,/#}/),{className:"template_tag",begin:/\{%/,end:/%}/,keywords:f,contains:[e,d]},{className:"variable",begin:/\{\{/,end:/}}/,contains:[e,d]}]}}),a.registerLanguage("typescript",function(a){var b={keyword:"in if for while finally var new function|0 do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void"};return{aliases:["ts"],keywords:b,contains:[{className:"pi",begin:/^\s*['"]use strict['"]/,relevance:0},a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,{className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{begin:"\\b(0[oO][0-7]+)"},{begin:a.C_NUMBER_RE}],relevance:0},{begin:"("+a.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,a.REGEXP_MODE],relevance:0},{className:"function",begin:"function",end:/[\{;]/,excludeEnd:!0,keywords:b,contains:["self",a.inherit(a.TITLE_MODE,{begin:/[A-Za-z$_][0-9A-Za-z$_]*/}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:b,contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE],illegal:/["'\(]/}],illegal:/\[|%/,relevance:0},{className:"constructor",beginKeywords:"constructor",end:/\{/,excludeEnd:!0,relevance:10},{className:"module",beginKeywords:"module",end:/\{/,excludeEnd:!0},{className:"interface",beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:"interface extends"},{begin:/\$[(.]/},{begin:"\\."+a.IDENT_RE,relevance:0}]}}),a.registerLanguage("vala",function(a){return{keywords:{keyword:"char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 uint16 uint32 uint64 float double bool struct enum string void weak unowned owned async signal static abstract interface override while do for foreach else switch case break default return try catch public private protected internal using new this get set const stdout stdin stderr var",built_in:"DBus GLib CCode Gee Object",literal:"false true null"},contains:[{className:"class",beginKeywords:"class interface delegate namespace",end:"{",excludeEnd:!0,illegal:"[^,:\\n\\s\\.]",contains:[a.UNDERSCORE_TITLE_MODE]},a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,{className:"string",begin:'"""',end:'"""',relevance:5},a.APOS_STRING_MODE,a.QUOTE_STRING_MODE,a.C_NUMBER_MODE,{className:"preprocessor",begin:"^#",end:"$",relevance:2},{className:"constant",begin:" [A-Z_]+ ",relevance:0}]}}),a.registerLanguage("vbnet",function(a){return{aliases:["vb"],case_insensitive:!0,keywords:{keyword:"addhandler addressof alias and andalso aggregate ansi as assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass namespace narrowing new next not notinheritable notoverridable of off on operator option optional or order orelse overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim rem removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly xor",built_in:"boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype date decimal directcast double gettype getxmlnamespace iif integer long object sbyte short single string trycast typeof uinteger ulong ushort",literal:"true false nothing"},illegal:"//|{|}|endif|gosub|variant|wend",contains:[a.inherit(a.QUOTE_STRING_MODE,{contains:[{begin:'""'}]}),a.COMMENT("'","$",{returnBegin:!0,contains:[{className:"xmlDocTag",begin:"'''|<!--|-->",contains:[a.PHRASAL_WORDS_MODE]},{className:"xmlDocTag",begin:"</?",end:">",contains:[a.PHRASAL_WORDS_MODE]}]}),a.C_NUMBER_MODE,{className:"preprocessor",begin:"#",end:"$",keywords:"if else elseif end region externalsource"}]}}),a.registerLanguage("vbscript",function(a){return{aliases:["vbs"],case_insensitive:!0,keywords:{keyword:"call class const dim do loop erase execute executeglobal exit for each next function if then else on error option explicit new private property let get public randomize redim rem select case set stop sub while wend with end to elseif is or xor and not class_initialize class_terminate default preserve in me byval byref step resume goto",built_in:"lcase month vartype instrrev ubound setlocale getobject rgb getref string weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency conversions csng timevalue second year space abs clng timeserial fixs len asc isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim strcomp int createobject loadpicture tan formatnumber mid scriptenginebuildversion scriptengine split scriptengineminorversion cint sin datepart ltrim sqr scriptenginemajorversion time derived eval date formatpercent exp inputbox left ascw chrw regexp server response request cstr err",literal:"true false null nothing empty"},illegal:"//",contains:[a.inherit(a.QUOTE_STRING_MODE,{contains:[{begin:'""'}]}),a.COMMENT(/'/,/$/,{relevance:0}),a.C_NUMBER_MODE]}}),a.registerLanguage("vbscript-html",function(a){return{subLanguage:"xml",contains:[{begin:"<%",end:"%>",subLanguage:"vbscript"}]}}),a.registerLanguage("verilog",function(a){return{aliases:["v"],case_insensitive:!0,keywords:{keyword:"always and assign begin buf bufif0 bufif1 case casex casez cmos deassign default defparam disable edge else end endcase endfunction endmodule endprimitive endspecify endtable endtask event for force forever fork function if ifnone initial inout input join macromodule module nand negedge nmos nor not notif0 notif1 or output parameter pmos posedge primitive pulldown pullup rcmos release repeat rnmos rpmos rtran rtranif0 rtranif1 specify specparam table task timescale tran tranif0 tranif1 wait while xnor xor",typename:"highz0 highz1 integer large medium pull0 pull1 real realtime reg scalared signed small strong0 strong1 supply0 supply0 supply1 supply1 time tri tri0 tri1 triand trior trireg vectored wand weak0 weak1 wire wor"},contains:[a.C_BLOCK_COMMENT_MODE,a.C_LINE_COMMENT_MODE,a.QUOTE_STRING_MODE,{className:"number",begin:"\\b(\\d+'(b|h|o|d|B|H|O|D))?[0-9xzXZ]+",contains:[a.BACKSLASH_ESCAPE],relevance:0},{className:"typename",begin:"\\.\\w+",relevance:0},{className:"value",begin:"#\\((?!parameter).+\\)"},{className:"keyword",begin:"\\+|-|\\*|/|%|<|>|=|#|`|\\!|&|\\||@|:|\\^|~|\\{|\\}",relevance:0}]}}),a.registerLanguage("vhdl",function(a){var b="\\d(_|\\d)*",c="[eE][-+]?"+b,d=b+"(\\."+b+")?("+c+")?",e="\\w+",f=b+"#"+e+"(\\."+e+")?#("+c+")?",g="\\b("+f+"|"+d+")";return{case_insensitive:!0,keywords:{keyword:"abs access after alias all and architecture array assert attribute begin block body buffer bus case component configuration constant context cover disconnect downto default else elsif end entity exit fairness file for force function generate generic group guarded if impure in inertial inout is label library linkage literal loop map mod nand new next nor not null of on open or others out package port postponed procedure process property protected pure range record register reject release rem report restrict restrict_guarantee return rol ror select sequence severity shared signal sla sll sra srl strong subtype then to transport type unaffected units until use variable vmode vprop vunit wait when while with xnor xor",typename:"boolean bit character severity_level integer time delay_length natural positive string bit_vector file_open_kind file_open_status std_ulogic std_ulogic_vector std_logic std_logic_vector unsigned signed boolean_vector integer_vector real_vector time_vector"},illegal:"{",contains:[a.C_BLOCK_COMMENT_MODE,a.COMMENT("--","$"),a.QUOTE_STRING_MODE,{className:"number",begin:g,relevance:0},{className:"literal",begin:"'(U|X|0|1|Z|W|L|H|-)'",contains:[a.BACKSLASH_ESCAPE]},{className:"attribute",begin:"'[A-Za-z](_?[A-Za-z0-9])*",contains:[a.BACKSLASH_ESCAPE]}]}}),a.registerLanguage("vim",function(a){return{lexemes:/[!#@\w]+/,keywords:{keyword:"N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw d|0 delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu g|0 go gr grepa gu gv ha h|0 helpf helpg helpt hi hid his i|0 ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs n|0 new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf q|0 quita qa r|0 rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv s|0 sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync t|0 tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up v|0 ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank",built_in:"abs acos add and append argc argidx argv asin atan atan2 browse browsedir bufexists buflisted bufloaded bufname bufnr bufwinnr byte2line byteidx call ceil changenr char2nr cindent clearmatches col complete complete_add complete_check confirm copy cos cosh count cscope_connection cursor deepcopy delete did_filetype diff_filler diff_hlID empty escape eval eventhandler executable exists exp expand extend feedkeys filereadable filewritable filter finddir findfile float2nr floor fmod fnameescape fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreground function garbagecollect get getbufline getbufvar getchar getcharmod getcmdline getcmdpos getcmdtype getcwd getfontname getfperm getfsize getftime getftype getline getloclist getmatches getpid getpos getqflist getreg getregtype gettabvar gettabwinvar getwinposx getwinposy getwinvar glob globpath has has_key haslocaldir hasmapto histadd histdel histget histnr hlexists hlID hostname iconv indent index input inputdialog inputlist inputrestore inputsave inputsecret insert invert isdirectory islocked items join keys len libcall libcallnr line line2byte lispindent localtime log log10 luaeval map maparg mapcheck match matchadd matcharg matchdelete matchend matchlist matchstr max min mkdir mode mzeval nextnonblank nr2char or pathshorten pow prevnonblank printf pumvisible py3eval pyeval range readfile reltime reltimestr remote_expr remote_foreground remote_peek remote_read remote_send remove rename repeat resolve reverse round screenattr screenchar screencol screenrow search searchdecl searchpair searchpairpos searchpos server2client serverlist setbufvar setcmdpos setline setloclist setmatches setpos setqflist setreg settabvar settabwinvar setwinvar sha256 shellescape shiftwidth simplify sin sinh sort soundfold spellbadword spellsuggest split sqrt str2float str2nr strchars strdisplaywidth strftime stridx string strlen strpart strridx strtrans strwidth submatch substitute synconcealed synID synIDattr synIDtrans synstack system tabpagebuflist tabpagenr tabpagewinnr tagfiles taglist tan tanh tempname tolower toupper tr trunc type undofile undotree values virtcol visualmode wildmenumode winbufnr wincol winheight winline winnr winrestcmd winrestview winsaveview winwidth writefile xor"},illegal:/[{:]/,contains:[a.NUMBER_MODE,a.APOS_STRING_MODE,{className:"string",begin:/"((\\")|[^"\n])*("|\n)/},{className:"variable",begin:/[bwtglsav]:[\w\d_]*/},{className:"function",beginKeywords:"function function!",end:"$",relevance:0,contains:[a.TITLE_MODE,{className:"params",begin:"\\(",end:"\\)"}]}]}}),a.registerLanguage("x86asm",function(a){return{case_insensitive:!0,lexemes:"\\.?"+a.IDENT_RE,keywords:{keyword:"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63",
+literal:"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0  xmm1  xmm2  xmm3  xmm4  xmm5  xmm6  xmm7  xmm8  xmm9 xmm10  xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0  ymm1  ymm2  ymm3  ymm4  ymm5  ymm6  ymm7  ymm8  ymm9 ymm10  ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0  zmm1  zmm2  zmm3  zmm4  zmm5  zmm6  zmm7  zmm8  zmm9 zmm10  zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l",pseudo:"db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times",preprocessor:"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr __FILE__ __LINE__ __SECT__  __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__  __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public ",built_in:"bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__"},contains:[a.COMMENT(";","$",{relevance:0}),{className:"number",variants:[{begin:"\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b",relevance:0},{begin:"\\$[0-9][0-9A-Fa-f]*",relevance:0},{begin:"\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b"},{begin:"\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b"}]},a.QUOTE_STRING_MODE,{className:"string",variants:[{begin:"'",end:"[^\\\\]'"},{begin:"`",end:"[^\\\\]`"},{begin:"\\.[A-Za-z0-9]+"}],relevance:0},{className:"label",variants:[{begin:"^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)"},{begin:"^\\s*%%[A-Za-z0-9_$#@~.?]*:"}],relevance:0},{className:"argument",begin:"%[0-9]+",relevance:0},{className:"built_in",begin:"%!S+",relevance:0}]}}),a.registerLanguage("xl",function(a){var b="ObjectLoader Animate MovieCredits Slides Filters Shading Materials LensFlare Mapping VLCAudioVideo StereoDecoder PointCloud NetworkAccess RemoteControl RegExp ChromaKey Snowfall NodeJS Speech Charts",c={keyword:"if then else do while until for loop import with is as where when by data constant",literal:"true false nil",type:"integer real text name boolean symbol infix prefix postfix block tree",built_in:"in mod rem and or xor not abs sign floor ceil sqrt sin cos tan asin acos atan exp expm1 log log2 log10 log1p pi at",module:b,id:"text_length text_range text_find text_replace contains page slide basic_slide title_slide title subtitle fade_in fade_out fade_at clear_color color line_color line_width texture_wrap texture_transform texture scale_?x scale_?y scale_?z? translate_?x translate_?y translate_?z? rotate_?x rotate_?y rotate_?z? rectangle circle ellipse sphere path line_to move_to quad_to curve_to theme background contents locally time mouse_?x mouse_?y mouse_buttons"},d={className:"constant",begin:"[A-Z][A-Z_0-9]+",relevance:0},e={className:"variable",begin:"([A-Z][a-z_0-9]+)+",relevance:0},f={className:"id",begin:"[a-z][a-z_0-9]+",relevance:0},g={className:"string",begin:'"',end:'"',illegal:"\\n"},h={className:"string",begin:"'",end:"'",illegal:"\\n"},i={className:"string",begin:"<<",end:">>"},j={className:"number",begin:"[0-9]+#[0-9A-Z_]+(\\.[0-9-A-Z_]+)?#?([Ee][+-]?[0-9]+)?",relevance:10},k={className:"import",beginKeywords:"import",end:"$",keywords:{keyword:"import",module:b},relevance:0,contains:[g]},l={className:"function",begin:"[a-z].*->"};return{aliases:["tao"],lexemes:/[a-zA-Z][a-zA-Z0-9_?]*/,keywords:c,contains:[a.C_LINE_COMMENT_MODE,a.C_BLOCK_COMMENT_MODE,g,h,i,l,k,d,e,f,j,a.NUMBER_MODE]}}),a.registerLanguage("xquery",function(a){var b="for let if while then else return where group by xquery encoding versionmodule namespace boundary-space preserve strip default collation base-uri orderingcopy-namespaces order declare import schema namespace function option in allowing emptyat tumbling window sliding window start when only end when previous next stable ascendingdescending empty greatest least some every satisfies switch case typeswitch try catch andor to union intersect instance of treat as castable cast map array delete insert intoreplace value rename copy modify update",c="false true xs:string xs:integer element item xs:date xs:datetime xs:float xs:double xs:decimal QName xs:anyURI xs:long xs:int xs:short xs:byte attribute",d={className:"variable",begin:/\$[a-zA-Z0-9\-]+/,relevance:5},e={className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},f={className:"string",variants:[{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]},g={className:"decorator",begin:"%\\w+"},h={className:"comment",begin:"\\(:",end:":\\)",relevance:10,contains:[{className:"doc",begin:"@\\w+"}]},i={begin:"{",end:"}"},j=[d,f,e,h,g,i];return i.contains=j,{aliases:["xpath","xq"],case_insensitive:!1,lexemes:/[a-zA-Z\$][a-zA-Z0-9_:\-]*/,illegal:/(proc)|(abstract)|(extends)|(until)|(#)/,keywords:{keyword:b,literal:c},contains:j}}),a.registerLanguage("zephir",function(a){var b={className:"string",contains:[a.BACKSLASH_ESCAPE],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},a.inherit(a.APOS_STRING_MODE,{illegal:null}),a.inherit(a.QUOTE_STRING_MODE,{illegal:null})]},c={variants:[a.BINARY_NUMBER_MODE,a.C_NUMBER_MODE]};return{aliases:["zep"],case_insensitive:!0,keywords:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var let while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally int uint long ulong char uchar double float bool boolean stringlikely unlikely",contains:[a.C_LINE_COMMENT_MODE,a.HASH_COMMENT_MODE,a.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),a.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler",lexemes:a.UNDERSCORE_IDENT_RE}),{className:"string",begin:"<<<['\"]?\\w+['\"]?$",end:"^\\w+;",contains:[a.BACKSLASH_ESCAPE]},{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"function",end:/[;{]/,excludeEnd:!0,illegal:"\\$|\\[|%",contains:[a.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",contains:["self",a.C_BLOCK_COMMENT_MODE,b,c]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},a.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[a.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[a.UNDERSCORE_TITLE_MODE]},{begin:"=>"},b,c]}}),a}),!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;"undefined"!=typeof window?b=window:"undefined"!=typeof global?b=global:"undefined"!=typeof self&&(b=self),b.io=a()}}(function(){var a;return function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};a[g][0].call(j.exports,function(b){var c=a[g][1][b];return e(c?c:b)},j,j.exports,b,a,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){b.exports=a("./lib/")},{"./lib/":2}],2:[function(a,b,c){function d(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d=e(a),f=d.source,j=d.id;return b.forceNew||b["force new connection"]||!1===b.multiplex?(h("ignoring socket cache for %s",f),c=g(f,b)):(i[j]||(h("new io instance for %s",f),i[j]=g(f,b)),c=i[j]),c.socket(d.path)}var e=a("./url"),f=a("socket.io-parser"),g=a("./manager"),h=a("debug")("socket.io-client");b.exports=c=d;var i=c.managers={};c.protocol=f.protocol,c.connect=d,c.Manager=a("./manager"),c.Socket=a("./socket")},{"./manager":3,"./socket":5,"./url":6,debug:10,"socket.io-parser":44}],3:[function(a,b,c){function d(a,b){return this instanceof d?(a&&"object"==typeof a&&(b=a,a=void 0),b=b||{},b.path=b.path||"/socket.io",this.nsps={},this.subs=[],this.opts=b,this.reconnection(b.reconnection!==!1),this.reconnectionAttempts(b.reconnectionAttempts||1/0),this.reconnectionDelay(b.reconnectionDelay||1e3),this.reconnectionDelayMax(b.reconnectionDelayMax||5e3),this.randomizationFactor(b.randomizationFactor||.5),this.backoff=new m({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==b.timeout?2e4:b.timeout),this.readyState="closed",this.uri=a,this.connected=[],this.encoding=!1,this.packetBuffer=[],this.encoder=new h.Encoder,this.decoder=new h.Decoder,this.autoConnect=b.autoConnect!==!1,void(this.autoConnect&&this.open())):new d(a,b)}var e=(a("./url"),a("engine.io-client")),f=a("./socket"),g=a("component-emitter"),h=a("socket.io-parser"),i=a("./on"),j=a("component-bind"),k=(a("object-component"),a("debug")("socket.io-client:manager")),l=a("indexof"),m=a("backo2");b.exports=d,d.prototype.emitAll=function(){this.emit.apply(this,arguments);for(var a in this.nsps)this.nsps[a].emit.apply(this.nsps[a],arguments)},d.prototype.updateSocketIds=function(){for(var a in this.nsps)this.nsps[a].id=this.engine.id},g(d.prototype),d.prototype.reconnection=function(a){return arguments.length?(this._reconnection=!!a,this):this._reconnection},d.prototype.reconnectionAttempts=function(a){return arguments.length?(this._reconnectionAttempts=a,this):this._reconnectionAttempts},d.prototype.reconnectionDelay=function(a){return arguments.length?(this._reconnectionDelay=a,this.backoff&&this.backoff.setMin(a),this):this._reconnectionDelay},d.prototype.randomizationFactor=function(a){return arguments.length?(this._randomizationFactor=a,this.backoff&&this.backoff.setJitter(a),this):this._randomizationFactor},d.prototype.reconnectionDelayMax=function(a){return arguments.length?(this._reconnectionDelayMax=a,this.backoff&&this.backoff.setMax(a),this):this._reconnectionDelayMax},d.prototype.timeout=function(a){return arguments.length?(this._timeout=a,this):this._timeout},d.prototype.maybeReconnectOnOpen=function(){!this.reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()},d.prototype.open=d.prototype.connect=function(a){if(k("readyState %s",this.readyState),~this.readyState.indexOf("open"))return this;k("opening %s",this.uri),this.engine=e(this.uri,this.opts);var b=this.engine,c=this;this.readyState="opening",this.skipReconnect=!1;var d=i(b,"open",function(){c.onopen(),a&&a()}),f=i(b,"error",function(b){if(k("connect_error"),c.cleanup(),c.readyState="closed",c.emitAll("connect_error",b),a){var d=new Error("Connection error");d.data=b,a(d)}else c.maybeReconnectOnOpen()});if(!1!==this._timeout){var g=this._timeout;k("connect attempt will timeout after %d",g);var h=setTimeout(function(){k("connect attempt timed out after %d",g),d.destroy(),b.close(),b.emit("error","timeout"),c.emitAll("connect_timeout",g)},g);this.subs.push({destroy:function(){clearTimeout(h)}})}return this.subs.push(d),this.subs.push(f),this},d.prototype.onopen=function(){k("open"),this.cleanup(),this.readyState="open",this.emit("open");var a=this.engine;this.subs.push(i(a,"data",j(this,"ondata"))),this.subs.push(i(this.decoder,"decoded",j(this,"ondecoded"))),this.subs.push(i(a,"error",j(this,"onerror"))),this.subs.push(i(a,"close",j(this,"onclose")))},d.prototype.ondata=function(a){this.decoder.add(a)},d.prototype.ondecoded=function(a){this.emit("packet",a)},d.prototype.onerror=function(a){k("error",a),this.emitAll("error",a)},d.prototype.socket=function(a){var b=this.nsps[a];if(!b){b=new f(this,a),this.nsps[a]=b;var c=this;b.on("connect",function(){b.id=c.engine.id,~l(c.connected,b)||c.connected.push(b)})}return b},d.prototype.destroy=function(a){var b=l(this.connected,a);~b&&this.connected.splice(b,1),this.connected.length||this.close()},d.prototype.packet=function(a){k("writing packet %j",a);var b=this;b.encoding?b.packetBuffer.push(a):(b.encoding=!0,this.encoder.encode(a,function(a){for(var c=0;c<a.length;c++)b.engine.write(a[c]);b.encoding=!1,b.processPacketQueue()}))},d.prototype.processPacketQueue=function(){if(this.packetBuffer.length>0&&!this.encoding){var a=this.packetBuffer.shift();this.packet(a)}},d.prototype.cleanup=function(){for(var a;a=this.subs.shift();)a.destroy();this.packetBuffer=[],this.encoding=!1,this.decoder.destroy()},d.prototype.close=d.prototype.disconnect=function(){this.skipReconnect=!0,this.backoff.reset(),this.readyState="closed",this.engine&&this.engine.close()},d.prototype.onclose=function(a){k("close"),this.cleanup(),this.backoff.reset(),this.readyState="closed",this.emit("close",a),this._reconnection&&!this.skipReconnect&&this.reconnect()},d.prototype.reconnect=function(){if(this.reconnecting||this.skipReconnect)return this;var a=this;if(this.backoff.attempts>=this._reconnectionAttempts)k("reconnect failed"),this.backoff.reset(),this.emitAll("reconnect_failed"),this.reconnecting=!1;else{var b=this.backoff.duration();k("will wait %dms before reconnect attempt",b),this.reconnecting=!0;var c=setTimeout(function(){a.skipReconnect||(k("attempting reconnect"),a.emitAll("reconnect_attempt",a.backoff.attempts),a.emitAll("reconnecting",a.backoff.attempts),a.skipReconnect||a.open(function(b){b?(k("reconnect attempt error"),a.reconnecting=!1,a.reconnect(),a.emitAll("reconnect_error",b.data)):(k("reconnect success"),a.onreconnect())}))},b);this.subs.push({destroy:function(){clearTimeout(c)}})}},d.prototype.onreconnect=function(){var a=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll("reconnect",a)}},{"./on":4,"./socket":5,"./url":6,backo2:7,"component-bind":8,"component-emitter":9,debug:10,"engine.io-client":11,indexof:40,"object-component":41,"socket.io-parser":44}],4:[function(a,b,c){function d(a,b,c){return a.on(b,c),{destroy:function(){a.removeListener(b,c)}}}b.exports=d},{}],5:[function(a,b,c){function d(a,b){this.io=a,this.nsp=b,this.json=this,this.ids=0,this.acks={},this.io.autoConnect&&this.open(),this.receiveBuffer=[],this.sendBuffer=[],this.connected=!1,this.disconnected=!0}var e=a("socket.io-parser"),f=a("component-emitter"),g=a("to-array"),h=a("./on"),i=a("component-bind"),j=a("debug")("socket.io-client:socket"),k=a("has-binary");b.exports=c=d;var l={connect:1,connect_error:1,connect_timeout:1,disconnect:1,error:1,reconnect:1,reconnect_attempt:1,reconnect_failed:1,reconnect_error:1,reconnecting:1},m=f.prototype.emit;f(d.prototype),d.prototype.subEvents=function(){if(!this.subs){var a=this.io;this.subs=[h(a,"open",i(this,"onopen")),h(a,"packet",i(this,"onpacket")),h(a,"close",i(this,"onclose"))]}},d.prototype.open=d.prototype.connect=function(){return this.connected?this:(this.subEvents(),this.io.open(),"open"==this.io.readyState&&this.onopen(),this)},d.prototype.send=function(){var a=g(arguments);return a.unshift("message"),this.emit.apply(this,a),this},d.prototype.emit=function(a){if(l.hasOwnProperty(a))return m.apply(this,arguments),this;var b=g(arguments),c=e.EVENT;k(b)&&(c=e.BINARY_EVENT);var d={type:c,data:b};return"function"==typeof b[b.length-1]&&(j("emitting packet with ack id %d",this.ids),this.acks[this.ids]=b.pop(),d.id=this.ids++),this.connected?this.packet(d):this.sendBuffer.push(d),this},d.prototype.packet=function(a){a.nsp=this.nsp,this.io.packet(a)},d.prototype.onopen=function(){j("transport is open - connecting"),"/"!=this.nsp&&this.packet({type:e.CONNECT})},d.prototype.onclose=function(a){j("close (%s)",a),this.connected=!1,this.disconnected=!0,delete this.id,this.emit("disconnect",a)},d.prototype.onpacket=function(a){if(a.nsp==this.nsp)switch(a.type){case e.CONNECT:this.onconnect();break;case e.EVENT:this.onevent(a);break;case e.BINARY_EVENT:this.onevent(a);break;case e.ACK:this.onack(a);break;case e.BINARY_ACK:this.onack(a);break;case e.DISCONNECT:this.ondisconnect();break;case e.ERROR:this.emit("error",a.data)}},d.prototype.onevent=function(a){var b=a.data||[];j("emitting event %j",b),null!=a.id&&(j("attaching ack callback to event"),b.push(this.ack(a.id))),this.connected?m.apply(this,b):this.receiveBuffer.push(b)},d.prototype.ack=function(a){var b=this,c=!1;return function(){if(!c){c=!0;var d=g(arguments);j("sending ack %j",d);var f=k(d)?e.BINARY_ACK:e.ACK;b.packet({type:f,id:a,data:d})}}},d.prototype.onack=function(a){j("calling ack %s with %j",a.id,a.data);var b=this.acks[a.id];b.apply(this,a.data),delete this.acks[a.id]},d.prototype.onconnect=function(){this.connected=!0,this.disconnected=!1,this.emit("connect"),this.emitBuffered()},d.prototype.emitBuffered=function(){var a;for(a=0;a<this.receiveBuffer.length;a++)m.apply(this,this.receiveBuffer[a]);for(this.receiveBuffer=[],a=0;a<this.sendBuffer.length;a++)this.packet(this.sendBuffer[a]);this.sendBuffer=[]},d.prototype.ondisconnect=function(){j("server disconnect (%s)",this.nsp),this.destroy(),this.onclose("io server disconnect")},d.prototype.destroy=function(){if(this.subs){for(var a=0;a<this.subs.length;a++)this.subs[a].destroy();this.subs=null}this.io.destroy(this)},d.prototype.close=d.prototype.disconnect=function(){return this.connected&&(j("performing disconnect (%s)",this.nsp),this.packet({type:e.DISCONNECT})),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}},{"./on":4,"component-bind":8,"component-emitter":9,debug:10,"has-binary":36,"socket.io-parser":44,"to-array":48}],6:[function(a,b,c){(function(c){function d(a,b){var d=a,b=b||c.location;return null==a&&(a=b.protocol+"//"+b.host),"string"==typeof a&&("/"==a.charAt(0)&&(a="/"==a.charAt(1)?b.protocol+a:b.hostname+a),/^(https?|wss?):\/\//.test(a)||(f("protocol-less url %s",a),a="undefined"!=typeof b?b.protocol+"//"+a:"https://"+a),f("parse %s",a),d=e(a)),d.port||(/^(http|ws)$/.test(d.protocol)?d.port="80":/^(http|ws)s$/.test(d.protocol)&&(d.port="443")),d.path=d.path||"/",d.id=d.protocol+"://"+d.host+":"+d.port,d.href=d.protocol+"://"+d.host+(b&&b.port==d.port?"":":"+d.port),d}var e=a("parseuri"),f=a("debug")("socket.io-client:url");b.exports=d}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{debug:10,parseuri:42}],7:[function(a,b,c){function d(a){a=a||{},this.ms=a.min||100,this.max=a.max||1e4,this.factor=a.factor||2,this.jitter=a.jitter>0&&a.jitter<=1?a.jitter:0,this.attempts=0}b.exports=d,d.prototype.duration=function(){var a=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var b=Math.random(),c=Math.floor(b*this.jitter*a);a=0==(1&Math.floor(10*b))?a-c:a+c}return 0|Math.min(a,this.max)},d.prototype.reset=function(){this.attempts=0},d.prototype.setMin=function(a){this.ms=a},d.prototype.setMax=function(a){this.max=a},d.prototype.setJitter=function(a){this.jitter=a}},{}],8:[function(a,b,c){var d=[].slice;b.exports=function(a,b){if("string"==typeof b&&(b=a[b]),"function"!=typeof b)throw new Error("bind() requires a function");var c=d.call(arguments,2);return function(){return b.apply(a,c.concat(d.call(arguments)))}}},{}],9:[function(a,b,c){function d(a){return a?e(a):void 0}function e(a){for(var b in d.prototype)a[b]=d.prototype[b];return a}b.exports=d,d.prototype.on=d.prototype.addEventListener=function(a,b){return this._callbacks=this._callbacks||{},(this._callbacks[a]=this._callbacks[a]||[]).push(b),this},d.prototype.once=function(a,b){function c(){d.off(a,c),b.apply(this,arguments)}var d=this;return this._callbacks=this._callbacks||{},c.fn=b,this.on(a,c),this},d.prototype.off=d.prototype.removeListener=d.prototype.removeAllListeners=d.prototype.removeEventListener=function(a,b){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var c=this._callbacks[a];if(!c)return this;if(1==arguments.length)return delete this._callbacks[a],this;for(var d,e=0;e<c.length;e++)if(d=c[e],d===b||d.fn===b){c.splice(e,1);break}return this},d.prototype.emit=function(a){this._callbacks=this._callbacks||{};var b=[].slice.call(arguments,1),c=this._callbacks[a];if(c){c=c.slice(0);for(var d=0,e=c.length;e>d;++d)c[d].apply(this,b)}return this},d.prototype.listeners=function(a){return this._callbacks=this._callbacks||{},this._callbacks[a]||[]},d.prototype.hasListeners=function(a){return!!this.listeners(a).length}},{}],10:[function(a,b,c){function d(a){return d.enabled(a)?function(b){b=e(b);var c=new Date,f=c-(d[a]||c);d[a]=c,b=a+" "+b+" +"+d.humanize(f),window.console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}:function(){}}function e(a){return a instanceof Error?a.stack||a.message:a}b.exports=d,d.names=[],d.skips=[],d.enable=function(a){try{localStorage.debug=a}catch(b){}for(var c=(a||"").split(/[\s,]+/),e=c.length,f=0;e>f;f++)a=c[f].replace("*",".*?"),"-"===a[0]?d.skips.push(new RegExp("^"+a.substr(1)+"$")):d.names.push(new RegExp("^"+a+"$"))},d.disable=function(){d.enable("")},d.humanize=function(a){var b=1e3,c=6e4,d=60*c;return a>=d?(a/d).toFixed(1)+"h":a>=c?(a/c).toFixed(1)+"m":a>=b?(a/b|0)+"s":a+"ms"},d.enabled=function(a){for(var b=0,c=d.skips.length;c>b;b++)if(d.skips[b].test(a))return!1;for(var b=0,c=d.names.length;c>b;b++)if(d.names[b].test(a))return!0;return!1};try{window.localStorage&&d.enable(localStorage.debug)}catch(f){}},{}],11:[function(a,b,c){b.exports=a("./lib/")},{"./lib/":12}],12:[function(a,b,c){b.exports=a("./socket"),b.exports.parser=a("engine.io-parser")},{"./socket":13,"engine.io-parser":25}],13:[function(a,b,c){(function(c){function d(a,b){if(!(this instanceof d))return new d(a,b);if(b=b||{},a&&"object"==typeof a&&(b=a,a=null),a&&(a=k(a),b.host=a.host,b.secure="https"==a.protocol||"wss"==a.protocol,b.port=a.port,a.query&&(b.query=a.query)),this.secure=null!=b.secure?b.secure:c.location&&"https:"==location.protocol,b.host){var e=b.host.split(":");b.hostname=e.shift(),e.length?b.port=e.pop():b.port||(b.port=this.secure?"443":"80")}this.agent=b.agent||!1,this.hostname=b.hostname||(c.location?location.hostname:"localhost"),this.port=b.port||(c.location&&location.port?location.port:this.secure?443:80),this.query=b.query||{},"string"==typeof this.query&&(this.query=m.decode(this.query)),this.upgrade=!1!==b.upgrade,this.path=(b.path||"/engine.io").replace(/\/$/,"")+"/",this.forceJSONP=!!b.forceJSONP,this.jsonp=!1!==b.jsonp,this.forceBase64=!!b.forceBase64,this.enablesXDR=!!b.enablesXDR,this.timestampParam=b.timestampParam||"t",this.timestampRequests=b.timestampRequests,this.transports=b.transports||["polling","websocket"],this.readyState="",this.writeBuffer=[],this.callbackBuffer=[],this.policyPort=b.policyPort||843,this.rememberUpgrade=b.rememberUpgrade||!1,this.binaryType=null,this.onlyBinaryUpgrades=b.onlyBinaryUpgrades,this.pfx=b.pfx||null,this.key=b.key||null,this.passphrase=b.passphrase||null,this.cert=b.cert||null,this.ca=b.ca||null,this.ciphers=b.ciphers||null,this.rejectUnauthorized=b.rejectUnauthorized||null,this.open()}function e(a){var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}var f=a("./transports"),g=a("component-emitter"),h=a("debug")("engine.io-client:socket"),i=a("indexof"),j=a("engine.io-parser"),k=a("parseuri"),l=a("parsejson"),m=a("parseqs");b.exports=d,d.priorWebsocketSuccess=!1,g(d.prototype),d.protocol=j.protocol,d.Socket=d,d.Transport=a("./transport"),d.transports=a("./transports"),d.parser=a("engine.io-parser"),d.prototype.createTransport=function(a){h('creating transport "%s"',a);var b=e(this.query);b.EIO=j.protocol,b.transport=a,this.id&&(b.sid=this.id);var c=new f[a]({agent:this.agent,hostname:this.hostname,port:this.port,secure:this.secure,path:this.path,query:b,forceJSONP:this.forceJSONP,jsonp:this.jsonp,forceBase64:this.forceBase64,enablesXDR:this.enablesXDR,timestampRequests:this.timestampRequests,timestampParam:this.timestampParam,policyPort:this.policyPort,socket:this,pfx:this.pfx,key:this.key,passphrase:this.passphrase,cert:this.cert,ca:this.ca,ciphers:this.ciphers,rejectUnauthorized:this.rejectUnauthorized});return c},d.prototype.open=function(){var a;if(this.rememberUpgrade&&d.priorWebsocketSuccess&&-1!=this.transports.indexOf("websocket"))a="websocket";else{if(0==this.transports.length){var b=this;return void setTimeout(function(){b.emit("error","No transports available")},0)}a=this.transports[0]}this.readyState="opening";var a;try{a=this.createTransport(a)}catch(c){return this.transports.shift(),void this.open()}a.open(),this.setTransport(a)},d.prototype.setTransport=function(a){h("setting transport %s",a.name);var b=this;this.transport&&(h("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners()),this.transport=a,a.on("drain",function(){b.onDrain()}).on("packet",function(a){b.onPacket(a)}).on("error",function(a){b.onError(a)}).on("close",function(){b.onClose("transport close")})},d.prototype.probe=function(a){function b(){if(m.onlyBinaryUpgrades){var b=!this.supportsBinary&&m.transport.supportsBinary;l=l||b}l||(h('probe transport "%s" opened',a),k.send([{type:"ping",data:"probe"}]),k.once("packet",function(b){if(!l)if("pong"==b.type&&"probe"==b.data){if(h('probe transport "%s" pong',a),m.upgrading=!0,m.emit("upgrading",k),!k)return;d.priorWebsocketSuccess="websocket"==k.name,h('pausing current transport "%s"',m.transport.name),m.transport.pause(function(){l||"closed"!=m.readyState&&(h("changing transport and sending upgrade packet"),j(),m.setTransport(k),k.send([{type:"upgrade"}]),m.emit("upgrade",k),k=null,m.upgrading=!1,m.flush())})}else{h('probe transport "%s" failed',a);var c=new Error("probe error");c.transport=k.name,m.emit("upgradeError",c)}}))}function c(){l||(l=!0,j(),k.close(),k=null)}function e(b){var d=new Error("probe error: "+b);d.transport=k.name,c(),h('probe transport "%s" failed because of error: %s',a,b),m.emit("upgradeError",d)}function f(){e("transport closed")}function g(){e("socket closed")}function i(a){k&&a.name!=k.name&&(h('"%s" works - aborting "%s"',a.name,k.name),c())}function j(){k.removeListener("open",b),k.removeListener("error",e),k.removeListener("close",f),m.removeListener("close",g),m.removeListener("upgrading",i)}h('probing transport "%s"',a);var k=this.createTransport(a,{probe:1}),l=!1,m=this;d.priorWebsocketSuccess=!1,k.once("open",b),k.once("error",e),k.once("close",f),this.once("close",g),this.once("upgrading",i),k.open()},d.prototype.onOpen=function(){if(h("socket open"),this.readyState="open",d.priorWebsocketSuccess="websocket"==this.transport.name,this.emit("open"),this.flush(),"open"==this.readyState&&this.upgrade&&this.transport.pause){h("starting upgrade probes");for(var a=0,b=this.upgrades.length;b>a;a++)this.probe(this.upgrades[a])}},d.prototype.onPacket=function(a){if("opening"==this.readyState||"open"==this.readyState)switch(h('socket receive: type "%s", data "%s"',a.type,a.data),this.emit("packet",a),this.emit("heartbeat"),a.type){case"open":this.onHandshake(l(a.data));break;case"pong":this.setPing();break;case"error":var b=new Error("server error");b.code=a.data,this.emit("error",b);break;case"message":this.emit("data",a.data),this.emit("message",a.data)}else h('packet received with socket readyState "%s"',this.readyState)},d.prototype.onHandshake=function(a){this.emit("handshake",a),this.id=a.sid,this.transport.query.sid=a.sid,this.upgrades=this.filterUpgrades(a.upgrades),this.pingInterval=a.pingInterval,this.pingTimeout=a.pingTimeout,this.onOpen(),"closed"!=this.readyState&&(this.setPing(),this.removeListener("heartbeat",this.onHeartbeat),this.on("heartbeat",this.onHeartbeat))},d.prototype.onHeartbeat=function(a){clearTimeout(this.pingTimeoutTimer);var b=this;b.pingTimeoutTimer=setTimeout(function(){"closed"!=b.readyState&&b.onClose("ping timeout")},a||b.pingInterval+b.pingTimeout)},d.prototype.setPing=function(){var a=this;clearTimeout(a.pingIntervalTimer),a.pingIntervalTimer=setTimeout(function(){h("writing ping packet - expecting pong within %sms",a.pingTimeout),a.ping(),a.onHeartbeat(a.pingTimeout)},a.pingInterval)},d.prototype.ping=function(){this.sendPacket("ping")},d.prototype.onDrain=function(){for(var a=0;a<this.prevBufferLen;a++)this.callbackBuffer[a]&&this.callbackBuffer[a]();this.writeBuffer.splice(0,this.prevBufferLen),this.callbackBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0==this.writeBuffer.length?this.emit("drain"):this.flush()},d.prototype.flush=function(){"closed"!=this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length&&(h("flushing %d packets in socket",this.writeBuffer.length),this.transport.send(this.writeBuffer),this.prevBufferLen=this.writeBuffer.length,this.emit("flush"))},d.prototype.write=d.prototype.send=function(a,b){return this.sendPacket("message",a,b),this},d.prototype.sendPacket=function(a,b,c){if("closing"!=this.readyState&&"closed"!=this.readyState){var d={type:a,data:b};this.emit("packetCreate",d),this.writeBuffer.push(d),this.callbackBuffer.push(c),this.flush()}},d.prototype.close=function(){function a(){d.onClose("forced close"),h("socket closing - telling transport to close"),d.transport.close()}function b(){d.removeListener("upgrade",b),d.removeListener("upgradeError",b),a()}function c(){d.once("upgrade",b),d.once("upgradeError",b)}if("opening"==this.readyState||"open"==this.readyState){this.readyState="closing";var d=this;this.writeBuffer.length?this.once("drain",function(){this.upgrading?c():a()}):this.upgrading?c():a()}return this},d.prototype.onError=function(a){h("socket error %j",a),d.priorWebsocketSuccess=!1,this.emit("error",a),this.onClose("transport error",a)},d.prototype.onClose=function(a,b){if("opening"==this.readyState||"open"==this.readyState||"closing"==this.readyState){h('socket close with reason: "%s"',a);var c=this;clearTimeout(this.pingIntervalTimer),clearTimeout(this.pingTimeoutTimer),setTimeout(function(){c.writeBuffer=[],c.callbackBuffer=[],c.prevBufferLen=0},0),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),this.readyState="closed",this.id=null,this.emit("close",a,b)}},d.prototype.filterUpgrades=function(a){for(var b=[],c=0,d=a.length;d>c;c++)~i(this.transports,a[c])&&b.push(a[c]);return b}}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./transport":14,"./transports":15,"component-emitter":9,
+debug:22,"engine.io-parser":25,indexof:40,parsejson:32,parseqs:33,parseuri:34}],14:[function(a,b,c){function d(a){this.path=a.path,this.hostname=a.hostname,this.port=a.port,this.secure=a.secure,this.query=a.query,this.timestampParam=a.timestampParam,this.timestampRequests=a.timestampRequests,this.readyState="",this.agent=a.agent||!1,this.socket=a.socket,this.enablesXDR=a.enablesXDR,this.pfx=a.pfx,this.key=a.key,this.passphrase=a.passphrase,this.cert=a.cert,this.ca=a.ca,this.ciphers=a.ciphers,this.rejectUnauthorized=a.rejectUnauthorized}var e=a("engine.io-parser"),f=a("component-emitter");b.exports=d,f(d.prototype),d.timestamps=0,d.prototype.onError=function(a,b){var c=new Error(a);return c.type="TransportError",c.description=b,this.emit("error",c),this},d.prototype.open=function(){return("closed"==this.readyState||""==this.readyState)&&(this.readyState="opening",this.doOpen()),this},d.prototype.close=function(){return("opening"==this.readyState||"open"==this.readyState)&&(this.doClose(),this.onClose()),this},d.prototype.send=function(a){if("open"!=this.readyState)throw new Error("Transport not open");this.write(a)},d.prototype.onOpen=function(){this.readyState="open",this.writable=!0,this.emit("open")},d.prototype.onData=function(a){var b=e.decodePacket(a,this.socket.binaryType);this.onPacket(b)},d.prototype.onPacket=function(a){this.emit("packet",a)},d.prototype.onClose=function(){this.readyState="closed",this.emit("close")}},{"component-emitter":9,"engine.io-parser":25}],15:[function(a,b,c){(function(b){function d(a){var c,d=!1,h=!1,i=!1!==a.jsonp;if(b.location){var j="https:"==location.protocol,k=location.port;k||(k=j?443:80),d=a.hostname!=location.hostname||k!=a.port,h=a.secure!=j}if(a.xdomain=d,a.xscheme=h,c=new e(a),"open"in c&&!a.forceJSONP)return new f(a);if(!i)throw new Error("JSONP disabled");return new g(a)}var e=a("xmlhttprequest"),f=a("./polling-xhr"),g=a("./polling-jsonp"),h=a("./websocket");c.polling=d,c.websocket=h}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./polling-jsonp":16,"./polling-xhr":17,"./websocket":19,xmlhttprequest:20}],16:[function(a,b,c){(function(c){function d(){}function e(a){f.call(this,a),this.query=this.query||{},h||(c.___eio||(c.___eio=[]),h=c.___eio),this.index=h.length;var b=this;h.push(function(a){b.onData(a)}),this.query.j=this.index,c.document&&c.addEventListener&&c.addEventListener("beforeunload",function(){b.script&&(b.script.onerror=d)},!1)}var f=a("./polling"),g=a("component-inherit");b.exports=e;var h,i=/\n/g,j=/\\n/g;g(e,f),e.prototype.supportsBinary=!1,e.prototype.doClose=function(){this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),this.form&&(this.form.parentNode.removeChild(this.form),this.form=null,this.iframe=null),f.prototype.doClose.call(this)},e.prototype.doPoll=function(){var a=this,b=document.createElement("script");this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),b.async=!0,b.src=this.uri(),b.onerror=function(b){a.onError("jsonp poll error",b)};var c=document.getElementsByTagName("script")[0];c.parentNode.insertBefore(b,c),this.script=b;var d="undefined"!=typeof navigator&&/gecko/i.test(navigator.userAgent);d&&setTimeout(function(){var a=document.createElement("iframe");document.body.appendChild(a),document.body.removeChild(a)},100)},e.prototype.doWrite=function(a,b){function c(){d(),b()}function d(){if(e.iframe)try{e.form.removeChild(e.iframe)}catch(a){e.onError("jsonp polling iframe removal error",a)}try{var b='<iframe src="javascript:0" name="'+e.iframeId+'">';f=document.createElement(b)}catch(a){f=document.createElement("iframe"),f.name=e.iframeId,f.src="javascript:0"}f.id=e.iframeId,e.form.appendChild(f),e.iframe=f}var e=this;if(!this.form){var f,g=document.createElement("form"),h=document.createElement("textarea"),k=this.iframeId="eio_iframe_"+this.index;g.className="socketio",g.style.position="absolute",g.style.top="-1000px",g.style.left="-1000px",g.target=k,g.method="POST",g.setAttribute("accept-charset","utf-8"),h.name="d",g.appendChild(h),document.body.appendChild(g),this.form=g,this.area=h}this.form.action=this.uri(),d(),a=a.replace(j,"\\\n"),this.area.value=a.replace(i,"\\n");try{this.form.submit()}catch(l){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"==e.iframe.readyState&&c()}:this.iframe.onload=c}}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./polling":18,"component-inherit":21}],17:[function(a,b,c){(function(c){function d(){}function e(a){if(i.call(this,a),c.location){var b="https:"==location.protocol,d=location.port;d||(d=b?443:80),this.xd=a.hostname!=c.location.hostname||d!=a.port,this.xs=a.secure!=b}}function f(a){this.method=a.method||"GET",this.uri=a.uri,this.xd=!!a.xd,this.xs=!!a.xs,this.async=!1!==a.async,this.data=void 0!=a.data?a.data:null,this.agent=a.agent,this.isBinary=a.isBinary,this.supportsBinary=a.supportsBinary,this.enablesXDR=a.enablesXDR,this.pfx=a.pfx,this.key=a.key,this.passphrase=a.passphrase,this.cert=a.cert,this.ca=a.ca,this.ciphers=a.ciphers,this.rejectUnauthorized=a.rejectUnauthorized,this.create()}function g(){for(var a in f.requests)f.requests.hasOwnProperty(a)&&f.requests[a].abort()}var h=a("xmlhttprequest"),i=a("./polling"),j=a("component-emitter"),k=a("component-inherit"),l=a("debug")("engine.io-client:polling-xhr");b.exports=e,b.exports.Request=f,k(e,i),e.prototype.supportsBinary=!0,e.prototype.request=function(a){return a=a||{},a.uri=this.uri(),a.xd=this.xd,a.xs=this.xs,a.agent=this.agent||!1,a.supportsBinary=this.supportsBinary,a.enablesXDR=this.enablesXDR,a.pfx=this.pfx,a.key=this.key,a.passphrase=this.passphrase,a.cert=this.cert,a.ca=this.ca,a.ciphers=this.ciphers,a.rejectUnauthorized=this.rejectUnauthorized,new f(a)},e.prototype.doWrite=function(a,b){var c="string"!=typeof a&&void 0!==a,d=this.request({method:"POST",data:a,isBinary:c}),e=this;d.on("success",b),d.on("error",function(a){e.onError("xhr post error",a)}),this.sendXhr=d},e.prototype.doPoll=function(){l("xhr poll");var a=this.request(),b=this;a.on("data",function(a){b.onData(a)}),a.on("error",function(a){b.onError("xhr poll error",a)}),this.pollXhr=a},j(f.prototype),f.prototype.create=function(){var a={agent:this.agent,xdomain:this.xd,xscheme:this.xs,enablesXDR:this.enablesXDR};a.pfx=this.pfx,a.key=this.key,a.passphrase=this.passphrase,a.cert=this.cert,a.ca=this.ca,a.ciphers=this.ciphers,a.rejectUnauthorized=this.rejectUnauthorized;var b=this.xhr=new h(a),d=this;try{if(l("xhr open %s: %s",this.method,this.uri),b.open(this.method,this.uri,this.async),this.supportsBinary&&(b.responseType="arraybuffer"),"POST"==this.method)try{this.isBinary?b.setRequestHeader("Content-type","application/octet-stream"):b.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(e){}"withCredentials"in b&&(b.withCredentials=!0),this.hasXDR()?(b.onload=function(){d.onLoad()},b.onerror=function(){d.onError(b.responseText)}):b.onreadystatechange=function(){4==b.readyState&&(200==b.status||1223==b.status?d.onLoad():setTimeout(function(){d.onError(b.status)},0))},l("xhr data %s",this.data),b.send(this.data)}catch(e){return void setTimeout(function(){d.onError(e)},0)}c.document&&(this.index=f.requestsCount++,f.requests[this.index]=this)},f.prototype.onSuccess=function(){this.emit("success"),this.cleanup()},f.prototype.onData=function(a){this.emit("data",a),this.onSuccess()},f.prototype.onError=function(a){this.emit("error",a),this.cleanup(!0)},f.prototype.cleanup=function(a){if("undefined"!=typeof this.xhr&&null!==this.xhr){if(this.hasXDR()?this.xhr.onload=this.xhr.onerror=d:this.xhr.onreadystatechange=d,a)try{this.xhr.abort()}catch(b){}c.document&&delete f.requests[this.index],this.xhr=null}},f.prototype.onLoad=function(){var a;try{var b;try{b=this.xhr.getResponseHeader("Content-Type").split(";")[0]}catch(c){}a="application/octet-stream"===b?this.xhr.response:this.supportsBinary?"ok":this.xhr.responseText}catch(c){this.onError(c)}null!=a&&this.onData(a)},f.prototype.hasXDR=function(){return"undefined"!=typeof c.XDomainRequest&&!this.xs&&this.enablesXDR},f.prototype.abort=function(){this.cleanup()},c.document&&(f.requestsCount=0,f.requests={},c.attachEvent?c.attachEvent("onunload",g):c.addEventListener&&c.addEventListener("beforeunload",g,!1))}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./polling":18,"component-emitter":9,"component-inherit":21,debug:22,xmlhttprequest:20}],18:[function(a,b,c){function d(a){var b=a&&a.forceBase64;(!j||b)&&(this.supportsBinary=!1),e.call(this,a)}var e=a("../transport"),f=a("parseqs"),g=a("engine.io-parser"),h=a("component-inherit"),i=a("debug")("engine.io-client:polling");b.exports=d;var j=function(){var b=a("xmlhttprequest"),c=new b({xdomain:!1});return null!=c.responseType}();h(d,e),d.prototype.name="polling",d.prototype.doOpen=function(){this.poll()},d.prototype.pause=function(a){function b(){i("paused"),c.readyState="paused",a()}var c=this;if(this.readyState="pausing",this.polling||!this.writable){var d=0;this.polling&&(i("we are currently polling - waiting to pause"),d++,this.once("pollComplete",function(){i("pre-pause polling complete"),--d||b()})),this.writable||(i("we are currently writing - waiting to pause"),d++,this.once("drain",function(){i("pre-pause writing complete"),--d||b()}))}else b()},d.prototype.poll=function(){i("polling"),this.polling=!0,this.doPoll(),this.emit("poll")},d.prototype.onData=function(a){var b=this;i("polling got data %s",a);var c=function(a,c,d){return"opening"==b.readyState&&b.onOpen(),"close"==a.type?(b.onClose(),!1):void b.onPacket(a)};g.decodePayload(a,this.socket.binaryType,c),"closed"!=this.readyState&&(this.polling=!1,this.emit("pollComplete"),"open"==this.readyState?this.poll():i('ignoring poll - transport state "%s"',this.readyState))},d.prototype.doClose=function(){function a(){i("writing close packet"),b.write([{type:"close"}])}var b=this;"open"==this.readyState?(i("transport open - closing"),a()):(i("transport not open - deferring close"),this.once("open",a))},d.prototype.write=function(a){var b=this;this.writable=!1;var c=function(){b.writable=!0,b.emit("drain")},b=this;g.encodePayload(a,this.supportsBinary,function(a){b.doWrite(a,c)})},d.prototype.uri=function(){var a=this.query||{},b=this.secure?"https":"http",c="";return!1!==this.timestampRequests&&(a[this.timestampParam]=+new Date+"-"+e.timestamps++),this.supportsBinary||a.sid||(a.b64=1),a=f.encode(a),this.port&&("https"==b&&443!=this.port||"http"==b&&80!=this.port)&&(c=":"+this.port),a.length&&(a="?"+a),b+"://"+this.hostname+c+this.path+a}},{"../transport":14,"component-inherit":21,debug:22,"engine.io-parser":25,parseqs:33,xmlhttprequest:20}],19:[function(a,b,c){function d(a){var b=a&&a.forceBase64;b&&(this.supportsBinary=!1),e.call(this,a)}var e=a("../transport"),f=a("engine.io-parser"),g=a("parseqs"),h=a("component-inherit"),i=a("debug")("engine.io-client:websocket"),j=a("ws");b.exports=d,h(d,e),d.prototype.name="websocket",d.prototype.supportsBinary=!0,d.prototype.doOpen=function(){if(this.check()){var a=this.uri(),b=void 0,c={agent:this.agent};c.pfx=this.pfx,c.key=this.key,c.passphrase=this.passphrase,c.cert=this.cert,c.ca=this.ca,c.ciphers=this.ciphers,c.rejectUnauthorized=this.rejectUnauthorized,this.ws=new j(a,b,c),void 0===this.ws.binaryType&&(this.supportsBinary=!1),this.ws.binaryType="arraybuffer",this.addEventListeners()}},d.prototype.addEventListeners=function(){var a=this;this.ws.onopen=function(){a.onOpen()},this.ws.onclose=function(){a.onClose()},this.ws.onmessage=function(b){a.onData(b.data)},this.ws.onerror=function(b){a.onError("websocket error",b)}},"undefined"!=typeof navigator&&/iPad|iPhone|iPod/i.test(navigator.userAgent)&&(d.prototype.onData=function(a){var b=this;setTimeout(function(){e.prototype.onData.call(b,a)},0)}),d.prototype.write=function(a){function b(){c.writable=!0,c.emit("drain")}var c=this;this.writable=!1;for(var d=0,e=a.length;e>d;d++)f.encodePacket(a[d],this.supportsBinary,function(a){try{c.ws.send(a)}catch(b){i("websocket closed before onclose event")}});setTimeout(b,0)},d.prototype.onClose=function(){e.prototype.onClose.call(this)},d.prototype.doClose=function(){"undefined"!=typeof this.ws&&this.ws.close()},d.prototype.uri=function(){var a=this.query||{},b=this.secure?"wss":"ws",c="";return this.port&&("wss"==b&&443!=this.port||"ws"==b&&80!=this.port)&&(c=":"+this.port),this.timestampRequests&&(a[this.timestampParam]=+new Date),this.supportsBinary||(a.b64=1),a=g.encode(a),a.length&&(a="?"+a),b+"://"+this.hostname+c+this.path+a},d.prototype.check=function(){return!(!j||"__initialize"in j&&this.name===d.prototype.name)}},{"../transport":14,"component-inherit":21,debug:22,"engine.io-parser":25,parseqs:33,ws:35}],20:[function(a,b,c){var d=a("has-cors");b.exports=function(a){var b=a.xdomain,c=a.xscheme,e=a.enablesXDR;try{if("undefined"!=typeof XMLHttpRequest&&(!b||d))return new XMLHttpRequest}catch(f){}try{if("undefined"!=typeof XDomainRequest&&!c&&e)return new XDomainRequest}catch(f){}if(!b)try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(f){}}},{"has-cors":38}],21:[function(a,b,c){b.exports=function(a,b){var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}},{}],22:[function(a,b,c){function d(){return"WebkitAppearance"in document.documentElement.style||window.console&&(console.firebug||console.exception&&console.table)||navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31}function e(){var a=arguments,b=this.useColors;if(a[0]=(b?"%c":"")+this.namespace+(b?" %c":" ")+a[0]+(b?"%c ":" ")+"+"+c.humanize(this.diff),!b)return a;var d="color: "+this.color;a=[a[0],d,"color: inherit"].concat(Array.prototype.slice.call(a,1));var e=0,f=0;return a[0].replace(/%[a-z%]/g,function(a){"%%"!==a&&(e++,"%c"===a&&(f=e))}),a.splice(f,0,d),a}function f(){return"object"==typeof console&&"function"==typeof console.log&&Function.prototype.apply.call(console.log,console,arguments)}function g(a){try{null==a?localStorage.removeItem("debug"):localStorage.debug=a}catch(b){}}function h(){var a;try{a=localStorage.debug}catch(b){}return a}c=b.exports=a("./debug"),c.log=f,c.formatArgs=e,c.save=g,c.load=h,c.useColors=d,c.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],c.formatters.j=function(a){return JSON.stringify(a)},c.enable(h())},{"./debug":23}],23:[function(a,b,c){function d(){return c.colors[k++%c.colors.length]}function e(a){function b(){}function e(){var a=e,b=+new Date,f=b-(j||b);a.diff=f,a.prev=j,a.curr=b,j=b,null==a.useColors&&(a.useColors=c.useColors()),null==a.color&&a.useColors&&(a.color=d());var g=Array.prototype.slice.call(arguments);g[0]=c.coerce(g[0]),"string"!=typeof g[0]&&(g=["%o"].concat(g));var h=0;g[0]=g[0].replace(/%([a-z%])/g,function(b,d){if("%%"===b)return b;h++;var e=c.formatters[d];if("function"==typeof e){var f=g[h];b=e.call(a,f),g.splice(h,1),h--}return b}),"function"==typeof c.formatArgs&&(g=c.formatArgs.apply(a,g));var i=e.log||c.log||console.log.bind(console);i.apply(a,g)}b.enabled=!1,e.enabled=!0;var f=c.enabled(a)?e:b;return f.namespace=a,f}function f(a){c.save(a);for(var b=(a||"").split(/[\s,]+/),d=b.length,e=0;d>e;e++)b[e]&&(a=b[e].replace(/\*/g,".*?"),"-"===a[0]?c.skips.push(new RegExp("^"+a.substr(1)+"$")):c.names.push(new RegExp("^"+a+"$")))}function g(){c.enable("")}function h(a){var b,d;for(b=0,d=c.skips.length;d>b;b++)if(c.skips[b].test(a))return!1;for(b=0,d=c.names.length;d>b;b++)if(c.names[b].test(a))return!0;return!1}function i(a){return a instanceof Error?a.stack||a.message:a}c=b.exports=e,c.coerce=i,c.disable=g,c.enable=f,c.enabled=h,c.humanize=a("ms"),c.names=[],c.skips=[],c.formatters={};var j,k=0},{ms:24}],24:[function(a,b,c){function d(a){var b=/^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i.exec(a);if(b){var c=parseFloat(b[1]),d=(b[2]||"ms").toLowerCase();switch(d){case"years":case"year":case"y":return c*l;case"days":case"day":case"d":return c*k;case"hours":case"hour":case"h":return c*j;case"minutes":case"minute":case"m":return c*i;case"seconds":case"second":case"s":return c*h;case"ms":return c}}}function e(a){return a>=k?Math.round(a/k)+"d":a>=j?Math.round(a/j)+"h":a>=i?Math.round(a/i)+"m":a>=h?Math.round(a/h)+"s":a+"ms"}function f(a){return g(a,k,"day")||g(a,j,"hour")||g(a,i,"minute")||g(a,h,"second")||a+" ms"}function g(a,b,c){return b>a?void 0:1.5*b>a?Math.floor(a/b)+" "+c:Math.ceil(a/b)+" "+c+"s"}var h=1e3,i=60*h,j=60*i,k=24*j,l=365.25*k;b.exports=function(a,b){return b=b||{},"string"==typeof a?d(a):b["long"]?f(a):e(a)}},{}],25:[function(a,b,c){(function(b){function d(a,b){var d="b"+c.packets[a.type]+a.data.data;return b(d)}function e(a,b,d){if(!b)return c.encodeBase64Packet(a,d);var e=a.data,f=new Uint8Array(e),g=new Uint8Array(1+e.byteLength);g[0]=r[a.type];for(var h=0;h<f.length;h++)g[h+1]=f[h];return d(g.buffer)}function f(a,b,d){if(!b)return c.encodeBase64Packet(a,d);var e=new FileReader;return e.onload=function(){a.data=e.result,c.encodePacket(a,b,!0,d)},e.readAsArrayBuffer(a.data)}function g(a,b,d){if(!b)return c.encodeBase64Packet(a,d);if(q)return f(a,b,d);var e=new Uint8Array(1);e[0]=r[a.type];var g=new u([e.buffer,a.data]);return d(g)}function h(a,b,c){for(var d=new Array(a.length),e=m(a.length,c),f=function(a,c,e){b(c,function(b,c){d[a]=c,e(b,d)})},g=0;g<a.length;g++)f(g,a[g],e)}var i=a("./keys"),j=a("has-binary"),k=a("arraybuffer.slice"),l=a("base64-arraybuffer"),m=a("after"),n=a("utf8"),o=navigator.userAgent.match(/Android/i),p=/PhantomJS/i.test(navigator.userAgent),q=o||p;c.protocol=3;var r=c.packets={open:0,close:1,ping:2,pong:3,message:4,upgrade:5,noop:6},s=i(r),t={type:"error",data:"parser error"},u=a("blob");c.encodePacket=function(a,c,f,h){"function"==typeof c&&(h=c,c=!1),"function"==typeof f&&(h=f,f=null);var i=void 0===a.data?void 0:a.data.buffer||a.data;if(b.ArrayBuffer&&i instanceof ArrayBuffer)return e(a,c,h);if(u&&i instanceof b.Blob)return g(a,c,h);if(i&&i.base64)return d(a,h);var j=r[a.type];return void 0!==a.data&&(j+=f?n.encode(String(a.data)):String(a.data)),h(""+j)},c.encodeBase64Packet=function(a,d){var e="b"+c.packets[a.type];if(u&&a.data instanceof u){var f=new FileReader;return f.onload=function(){var a=f.result.split(",")[1];d(e+a)},f.readAsDataURL(a.data)}var g;try{g=String.fromCharCode.apply(null,new Uint8Array(a.data))}catch(h){for(var i=new Uint8Array(a.data),j=new Array(i.length),k=0;k<i.length;k++)j[k]=i[k];g=String.fromCharCode.apply(null,j)}return e+=b.btoa(g),d(e)},c.decodePacket=function(a,b,d){if("string"==typeof a||void 0===a){if("b"==a.charAt(0))return c.decodeBase64Packet(a.substr(1),b);if(d)try{a=n.decode(a)}catch(e){return t}var f=a.charAt(0);return Number(f)==f&&s[f]?a.length>1?{type:s[f],data:a.substring(1)}:{type:s[f]}:t}var g=new Uint8Array(a),f=g[0],h=k(a,1);return u&&"blob"===b&&(h=new u([h])),{type:s[f],data:h}},c.decodeBase64Packet=function(a,c){var d=s[a.charAt(0)];if(!b.ArrayBuffer)return{type:d,data:{base64:!0,data:a.substr(1)}};var e=l.decode(a.substr(1));return"blob"===c&&u&&(e=new u([e])),{type:d,data:e}},c.encodePayload=function(a,b,d){function e(a){return a.length+":"+a}function f(a,d){c.encodePacket(a,g?b:!1,!0,function(a){d(null,e(a))})}"function"==typeof b&&(d=b,b=null);var g=j(a);return b&&g?u&&!q?c.encodePayloadAsBlob(a,d):c.encodePayloadAsArrayBuffer(a,d):a.length?void h(a,f,function(a,b){return d(b.join(""))}):d("0:")},c.decodePayload=function(a,b,d){if("string"!=typeof a)return c.decodePayloadAsBinary(a,b,d);"function"==typeof b&&(d=b,b=null);var e;if(""==a)return d(t,0,1);for(var f,g,h="",i=0,j=a.length;j>i;i++){var k=a.charAt(i);if(":"!=k)h+=k;else{if(""==h||h!=(f=Number(h)))return d(t,0,1);if(g=a.substr(i+1,f),h!=g.length)return d(t,0,1);if(g.length){if(e=c.decodePacket(g,b,!0),t.type==e.type&&t.data==e.data)return d(t,0,1);var l=d(e,i+f,j);if(!1===l)return}i+=f,h=""}}return""!=h?d(t,0,1):void 0},c.encodePayloadAsArrayBuffer=function(a,b){function d(a,b){c.encodePacket(a,!0,!0,function(a){return b(null,a)})}return a.length?void h(a,d,function(a,c){var d=c.reduce(function(a,b){var c;return c="string"==typeof b?b.length:b.byteLength,a+c.toString().length+c+2},0),e=new Uint8Array(d),f=0;return c.forEach(function(a){var b="string"==typeof a,c=a;if(b){for(var d=new Uint8Array(a.length),g=0;g<a.length;g++)d[g]=a.charCodeAt(g);c=d.buffer}b?e[f++]=0:e[f++]=1;for(var h=c.byteLength.toString(),g=0;g<h.length;g++)e[f++]=parseInt(h[g]);e[f++]=255;for(var d=new Uint8Array(c),g=0;g<d.length;g++)e[f++]=d[g]}),b(e.buffer)}):b(new ArrayBuffer(0))},c.encodePayloadAsBlob=function(a,b){function d(a,b){c.encodePacket(a,!0,!0,function(a){var c=new Uint8Array(1);if(c[0]=1,"string"==typeof a){for(var d=new Uint8Array(a.length),e=0;e<a.length;e++)d[e]=a.charCodeAt(e);a=d.buffer,c[0]=0}for(var f=a instanceof ArrayBuffer?a.byteLength:a.size,g=f.toString(),h=new Uint8Array(g.length+1),e=0;e<g.length;e++)h[e]=parseInt(g[e]);if(h[g.length]=255,u){var i=new u([c.buffer,h.buffer,a]);b(null,i)}})}h(a,d,function(a,c){return b(new u(c))})},c.decodePayloadAsBinary=function(a,b,d){"function"==typeof b&&(d=b,b=null);for(var e=a,f=[],g=!1;e.byteLength>0;){for(var h=new Uint8Array(e),i=0===h[0],j="",l=1;255!=h[l];l++){if(j.length>310){g=!0;break}j+=h[l]}if(g)return d(t,0,1);e=k(e,2+j.length),j=parseInt(j);var m=k(e,0,j);if(i)try{m=String.fromCharCode.apply(null,new Uint8Array(m))}catch(n){var o=new Uint8Array(m);m="";for(var l=0;l<o.length;l++)m+=String.fromCharCode(o[l])}f.push(m),e=k(e,j)}var p=f.length;f.forEach(function(a,e){d(c.decodePacket(a,b,!0),e,p)})}}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./keys":26,after:27,"arraybuffer.slice":28,"base64-arraybuffer":29,blob:30,"has-binary":36,utf8:31}],26:[function(a,b,c){b.exports=Object.keys||function(a){var b=[],c=Object.prototype.hasOwnProperty;for(var d in a)c.call(a,d)&&b.push(d);return b}},{}],27:[function(a,b,c){function d(a,b,c){function d(a,e){if(d.count<=0)throw new Error("after called too many times");--d.count,a?(f=!0,b(a),b=c):0!==d.count||f||b(null,e)}var f=!1;return c=c||e,d.count=a,0===a?b():d}function e(){}b.exports=d},{}],28:[function(a,b,c){b.exports=function(a,b,c){var d=a.byteLength;if(b=b||0,c=c||d,a.slice)return a.slice(b,c);if(0>b&&(b+=d),0>c&&(c+=d),c>d&&(c=d),b>=d||b>=c||0===d)return new ArrayBuffer(0);for(var e=new Uint8Array(a),f=new Uint8Array(c-b),g=b,h=0;c>g;g++,h++)f[h]=e[g];return f.buffer}},{}],29:[function(a,b,c){!function(a){"use strict";c.encode=function(b){var c,d=new Uint8Array(b),e=d.length,f="";for(c=0;e>c;c+=3)f+=a[d[c]>>2],f+=a[(3&d[c])<<4|d[c+1]>>4],f+=a[(15&d[c+1])<<2|d[c+2]>>6],f+=a[63&d[c+2]];return e%3===2?f=f.substring(0,f.length-1)+"=":e%3===1&&(f=f.substring(0,f.length-2)+"=="),f},c.decode=function(b){var c,d,e,f,g,h=.75*b.length,i=b.length,j=0;"="===b[b.length-1]&&(h--,"="===b[b.length-2]&&h--);var k=new ArrayBuffer(h),l=new Uint8Array(k);for(c=0;i>c;c+=4)d=a.indexOf(b[c]),e=a.indexOf(b[c+1]),f=a.indexOf(b[c+2]),g=a.indexOf(b[c+3]),l[j++]=d<<2|e>>4,l[j++]=(15&e)<<4|f>>2,l[j++]=(3&f)<<6|63&g;return k}}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")},{}],30:[function(a,b,c){(function(a){function c(a){for(var b=0;b<a.length;b++){var c=a[b];if(c.buffer instanceof ArrayBuffer){var d=c.buffer;if(c.byteLength!==d.byteLength){var e=new Uint8Array(c.byteLength);e.set(new Uint8Array(d,c.byteOffset,c.byteLength)),d=e.buffer}a[b]=d}}}function d(a,b){b=b||{};var d=new f;c(a);for(var e=0;e<a.length;e++)d.append(a[e]);return b.type?d.getBlob(b.type):d.getBlob()}function e(a,b){return c(a),new Blob(a,b||{})}var f=a.BlobBuilder||a.WebKitBlobBuilder||a.MSBlobBuilder||a.MozBlobBuilder,g=function(){try{var a=new Blob(["hi"]);return 2===a.size}catch(b){return!1}}(),h=g&&function(){try{var a=new Blob([new Uint8Array([1,2])]);return 2===a.size}catch(b){return!1}}(),i=f&&f.prototype.append&&f.prototype.getBlob;b.exports=function(){return g?h?a.Blob:e:i?d:void 0}()}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],31:[function(b,c,d){(function(b){!function(e){function f(a){for(var b,c,d=[],e=0,f=a.length;f>e;)b=a.charCodeAt(e++),b>=55296&&56319>=b&&f>e?(c=a.charCodeAt(e++),56320==(64512&c)?d.push(((1023&b)<<10)+(1023&c)+65536):(d.push(b),e--)):d.push(b);return d}function g(a){for(var b,c=a.length,d=-1,e="";++d<c;)b=a[d],b>65535&&(b-=65536,e+=u(b>>>10&1023|55296),b=56320|1023&b),e+=u(b);return e}function h(a){if(a>=55296&&57343>=a)throw Error("Lone surrogate U+"+a.toString(16).toUpperCase()+" is not a scalar value")}function i(a,b){return u(a>>b&63|128)}function j(a){if(0==(4294967168&a))return u(a);var b="";return 0==(4294965248&a)?b=u(a>>6&31|192):0==(4294901760&a)?(h(a),b=u(a>>12&15|224),b+=i(a,6)):0==(4292870144&a)&&(b=u(a>>18&7|240),b+=i(a,12),b+=i(a,6)),b+=u(63&a|128)}function k(a){for(var b,c=f(a),d=c.length,e=-1,g="";++e<d;)b=c[e],g+=j(b);return g}function l(){if(t>=s)throw Error("Invalid byte index");var a=255&r[t];if(t++,128==(192&a))return 63&a;throw Error("Invalid continuation byte")}function m(){var a,b,c,d,e;if(t>s)throw Error("Invalid byte index");if(t==s)return!1;if(a=255&r[t],t++,0==(128&a))return a;if(192==(224&a)){var b=l();if(e=(31&a)<<6|b,e>=128)return e;throw Error("Invalid continuation byte")}if(224==(240&a)){if(b=l(),c=l(),e=(15&a)<<12|b<<6|c,e>=2048)return h(e),e;throw Error("Invalid continuation byte")}if(240==(248&a)&&(b=l(),c=l(),d=l(),e=(15&a)<<18|b<<12|c<<6|d,e>=65536&&1114111>=e))return e;throw Error("Invalid UTF-8 detected")}function n(a){r=f(a),s=r.length,t=0;for(var b,c=[];(b=m())!==!1;)c.push(b);return g(c)}var o="object"==typeof d&&d,p="object"==typeof c&&c&&c.exports==o&&c,q="object"==typeof b&&b;(q.global===q||q.window===q)&&(e=q);var r,s,t,u=String.fromCharCode,v={version:"2.0.0",encode:k,decode:n};if("function"==typeof a&&"object"==typeof a.amd&&a.amd)a(function(){return v});else if(o&&!o.nodeType)if(p)p.exports=v;else{var w={},x=w.hasOwnProperty;for(var y in v)x.call(v,y)&&(o[y]=v[y])}else e.utf8=v}(this)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],32:[function(a,b,c){(function(a){var c=/^[\],:{}\s]*$/,d=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,e=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,f=/(?:^|:|,)(?:\s*\[)+/g,g=/^\s+/,h=/\s+$/;b.exports=function(b){return"string"==typeof b&&b?(b=b.replace(g,"").replace(h,""),a.JSON&&JSON.parse?JSON.parse(b):c.test(b.replace(d,"@").replace(e,"]").replace(f,""))?new Function("return "+b)():void 0):null}}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],33:[function(a,b,c){c.encode=function(a){var b="";for(var c in a)a.hasOwnProperty(c)&&(b.length&&(b+="&"),b+=encodeURIComponent(c)+"="+encodeURIComponent(a[c]));return b},c.decode=function(a){for(var b={},c=a.split("&"),d=0,e=c.length;e>d;d++){var f=c[d].split("=");b[decodeURIComponent(f[0])]=decodeURIComponent(f[1])}return b}},{}],34:[function(a,b,c){var d=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,e=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];b.exports=function(a){var b=a,c=a.indexOf("["),f=a.indexOf("]");-1!=c&&-1!=f&&(a=a.substring(0,c)+a.substring(c,f).replace(/:/g,";")+a.substring(f,a.length));for(var g=d.exec(a||""),h={},i=14;i--;)h[e[i]]=g[i]||"";return-1!=c&&-1!=f&&(h.source=b,h.host=h.host.substring(1,h.host.length-1).replace(/;/g,":"),h.authority=h.authority.replace("[","").replace("]","").replace(/;/g,":"),h.ipv6uri=!0),h}},{}],35:[function(a,b,c){function d(a,b,c){var d;return d=b?new f(a,b):new f(a)}var e=function(){return this}(),f=e.WebSocket||e.MozWebSocket;b.exports=f?d:null,f&&(d.prototype=f.prototype)},{}],36:[function(a,b,c){(function(c){function d(a){function b(a){if(!a)return!1;if(c.Buffer&&c.Buffer.isBuffer(a)||c.ArrayBuffer&&a instanceof ArrayBuffer||c.Blob&&a instanceof Blob||c.File&&a instanceof File)return!0;if(e(a)){for(var d=0;d<a.length;d++)if(b(a[d]))return!0}else if(a&&"object"==typeof a){a.toJSON&&(a=a.toJSON());for(var f in a)if(Object.prototype.hasOwnProperty.call(a,f)&&b(a[f]))return!0}return!1}return b(a)}var e=a("isarray");b.exports=d}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{isarray:37}],37:[function(a,b,c){b.exports=Array.isArray||function(a){return"[object Array]"==Object.prototype.toString.call(a)}},{}],38:[function(a,b,c){var d=a("global");try{b.exports="XMLHttpRequest"in d&&"withCredentials"in new d.XMLHttpRequest}catch(e){b.exports=!1}},{global:39}],39:[function(a,b,c){b.exports=function(){return this}()},{}],40:[function(a,b,c){var d=[].indexOf;b.exports=function(a,b){if(d)return a.indexOf(b);for(var c=0;c<a.length;++c)if(a[c]===b)return c;return-1}},{}],41:[function(a,b,c){var d=Object.prototype.hasOwnProperty;c.keys=Object.keys||function(a){var b=[];for(var c in a)d.call(a,c)&&b.push(c);return b},c.values=function(a){var b=[];for(var c in a)d.call(a,c)&&b.push(a[c]);return b},c.merge=function(a,b){for(var c in b)d.call(b,c)&&(a[c]=b[c]);return a},c.length=function(a){return c.keys(a).length},c.isEmpty=function(a){return 0==c.length(a)}},{}],42:[function(a,b,c){var d=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,e=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];b.exports=function(a){for(var b=d.exec(a||""),c={},f=14;f--;)c[e[f]]=b[f]||"";return c}},{}],43:[function(a,b,c){(function(b){var d=a("isarray"),e=a("./is-buffer");c.deconstructPacket=function(a){function b(a){if(!a)return a;if(e(a)){var f={_placeholder:!0,num:c.length};return c.push(a),f}if(d(a)){for(var g=new Array(a.length),h=0;h<a.length;h++)g[h]=b(a[h]);return g}if("object"==typeof a&&!(a instanceof Date)){var g={};for(var i in a)g[i]=b(a[i]);return g}return a}var c=[],f=a.data,g=a;return g.data=b(f),g.attachments=c.length,{packet:g,buffers:c}},c.reconstructPacket=function(a,b){function c(a){if(a&&a._placeholder){var e=b[a.num];return e}if(d(a)){for(var f=0;f<a.length;f++)a[f]=c(a[f]);return a}if(a&&"object"==typeof a){for(var g in a)a[g]=c(a[g]);return a}return a}return a.data=c(a.data),a.attachments=void 0,a},c.removeBlobs=function(a,c){function f(a,i,j){if(!a)return a;if(b.Blob&&a instanceof Blob||b.File&&a instanceof File){g++;var k=new FileReader;k.onload=function(){j?j[i]=this.result:h=this.result,--g||c(h)},k.readAsArrayBuffer(a)}else if(d(a))for(var l=0;l<a.length;l++)f(a[l],l,a);else if(a&&"object"==typeof a&&!e(a))for(var m in a)f(a[m],m,a)}var g=0,h=a;f(h),g||c(h)}}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./is-buffer":45,isarray:46}],44:[function(a,b,c){function d(){}function e(a){var b="",d=!1;return b+=a.type,(c.BINARY_EVENT==a.type||c.BINARY_ACK==a.type)&&(b+=a.attachments,b+="-"),a.nsp&&"/"!=a.nsp&&(d=!0,b+=a.nsp),null!=a.id&&(d&&(b+=",",d=!1),b+=a.id),null!=a.data&&(d&&(b+=","),b+=l.stringify(a.data)),k("encoded %j as %s",a,b),b}function f(a,b){function c(a){var c=n.deconstructPacket(a),d=e(c.packet),f=c.buffers;f.unshift(d),b(f)}n.removeBlobs(a,c)}function g(){this.reconstructor=null}function h(a){var b={},d=0;if(b.type=Number(a.charAt(0)),null==c.types[b.type])return j();if(c.BINARY_EVENT==b.type||c.BINARY_ACK==b.type){for(var e="";"-"!=a.charAt(++d)&&(e+=a.charAt(d),d!=a.length););if(e!=Number(e)||"-"!=a.charAt(d))throw new Error("Illegal attachments");b.attachments=Number(e)}if("/"==a.charAt(d+1))for(b.nsp="";++d;){var f=a.charAt(d);if(","==f)break;if(b.nsp+=f,d==a.length)break}else b.nsp="/";var g=a.charAt(d+1);if(""!==g&&Number(g)==g){
+for(b.id="";++d;){var f=a.charAt(d);if(null==f||Number(f)!=f){--d;break}if(b.id+=a.charAt(d),d==a.length)break}b.id=Number(b.id)}if(a.charAt(++d))try{b.data=l.parse(a.substr(d))}catch(h){return j()}return k("decoded %s as %j",a,b),b}function i(a){this.reconPack=a,this.buffers=[]}function j(a){return{type:c.ERROR,data:"parser error"}}var k=a("debug")("socket.io-parser"),l=a("json3"),m=(a("isarray"),a("component-emitter")),n=a("./binary"),o=a("./is-buffer");c.protocol=4,c.types=["CONNECT","DISCONNECT","EVENT","BINARY_EVENT","ACK","BINARY_ACK","ERROR"],c.CONNECT=0,c.DISCONNECT=1,c.EVENT=2,c.ACK=3,c.ERROR=4,c.BINARY_EVENT=5,c.BINARY_ACK=6,c.Encoder=d,c.Decoder=g,d.prototype.encode=function(a,b){if(k("encoding packet %j",a),c.BINARY_EVENT==a.type||c.BINARY_ACK==a.type)f(a,b);else{var d=e(a);b([d])}},m(g.prototype),g.prototype.add=function(a){var b;if("string"==typeof a)b=h(a),c.BINARY_EVENT==b.type||c.BINARY_ACK==b.type?(this.reconstructor=new i(b),0===this.reconstructor.reconPack.attachments&&this.emit("decoded",b)):this.emit("decoded",b);else{if(!o(a)&&!a.base64)throw new Error("Unknown type: "+a);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");b=this.reconstructor.takeBinaryData(a),b&&(this.reconstructor=null,this.emit("decoded",b))}},g.prototype.destroy=function(){this.reconstructor&&this.reconstructor.finishedReconstruction()},i.prototype.takeBinaryData=function(a){if(this.buffers.push(a),this.buffers.length==this.reconPack.attachments){var b=n.reconstructPacket(this.reconPack,this.buffers);return this.finishedReconstruction(),b}return null},i.prototype.finishedReconstruction=function(){this.reconPack=null,this.buffers=[]}},{"./binary":43,"./is-buffer":45,"component-emitter":9,debug:10,isarray:46,json3:47}],45:[function(a,b,c){(function(a){function c(b){return a.Buffer&&a.Buffer.isBuffer(b)||a.ArrayBuffer&&b instanceof ArrayBuffer}b.exports=c}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],46:[function(a,b,c){b.exports=a(37)},{}],47:[function(b,c,d){!function(b){function c(a){if(c[a]!==g)return c[a];var b;if("bug-string-char-index"==a)b="a"!="a"[0];else if("json"==a)b=c("json-stringify")&&c("json-parse");else{var d,e='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==a){var f=k.stringify,i="function"==typeof f&&l;if(i){(d=function(){return 1}).toJSON=d;try{i="0"===f(0)&&"0"===f(new Number)&&'""'==f(new String)&&f(h)===g&&f(g)===g&&f()===g&&"1"===f(d)&&"[1]"==f([d])&&"[null]"==f([g])&&"null"==f(null)&&"[null,null,null]"==f([g,h,null])&&f({a:[d,!0,!1,null,"\x00\b\n\f\r	"]})==e&&"1"===f(null,d)&&"[\n 1,\n 2\n]"==f([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==f(new Date(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==f(new Date(864e13))&&'"-000001-01-01T00:00:00.000Z"'==f(new Date(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==f(new Date(-1))}catch(j){i=!1}}b=i}if("json-parse"==a){var m=k.parse;if("function"==typeof m)try{if(0===m("0")&&!m(!1)){d=m(e);var n=5==d.a.length&&1===d.a[0];if(n){try{n=!m('"	"')}catch(j){}if(n)try{n=1!==m("01")}catch(j){}if(n)try{n=1!==m("1.")}catch(j){}}}}catch(j){n=!1}b=n}}return c[a]=!!b}var e,f,g,h={}.toString,i="function"==typeof a&&a.amd,j="object"==typeof JSON&&JSON,k="object"==typeof d&&d&&!d.nodeType&&d;k&&j?(k.stringify=j.stringify,k.parse=j.parse):k=b.JSON=j||{};var l=new Date(-0xc782b5b800cec);try{l=-109252==l.getUTCFullYear()&&0===l.getUTCMonth()&&1===l.getUTCDate()&&10==l.getUTCHours()&&37==l.getUTCMinutes()&&6==l.getUTCSeconds()&&708==l.getUTCMilliseconds()}catch(m){}if(!c("json")){var n="[object Function]",o="[object Date]",p="[object Number]",q="[object String]",r="[object Array]",s="[object Boolean]",t=c("bug-string-char-index");if(!l)var u=Math.floor,v=[0,31,59,90,120,151,181,212,243,273,304,334],w=function(a,b){return v[b]+365*(a-1970)+u((a-1969+(b=+(b>1)))/4)-u((a-1901+b)/100)+u((a-1601+b)/400)};(e={}.hasOwnProperty)||(e=function(a){var b,c={};return(c.__proto__=null,c.__proto__={toString:1},c).toString!=h?e=function(a){var b=this.__proto__,c=a in(this.__proto__=null,this);return this.__proto__=b,c}:(b=c.constructor,e=function(a){var c=(this.constructor||b).prototype;return a in this&&!(a in c&&this[a]===c[a])}),c=null,e.call(this,a)});var x={"boolean":1,number:1,string:1,undefined:1},y=function(a,b){var c=typeof a[b];return"object"==c?!!a[b]:!x[c]};if(f=function(a,b){var c,d,g,i=0;(c=function(){this.valueOf=0}).prototype.valueOf=0,d=new c;for(g in d)e.call(d,g)&&i++;return c=d=null,i?f=2==i?function(a,b){var c,d={},f=h.call(a)==n;for(c in a)f&&"prototype"==c||e.call(d,c)||!(d[c]=1)||!e.call(a,c)||b(c)}:function(a,b){var c,d,f=h.call(a)==n;for(c in a)f&&"prototype"==c||!e.call(a,c)||(d="constructor"===c)||b(c);(d||e.call(a,c="constructor"))&&b(c)}:(d=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],f=function(a,b){var c,f,g=h.call(a)==n,i=!g&&"function"!=typeof a.constructor&&y(a,"hasOwnProperty")?a.hasOwnProperty:e;for(c in a)g&&"prototype"==c||!i.call(a,c)||b(c);for(f=d.length;c=d[--f];i.call(a,c)&&b(c));}),f(a,b)},!c("json-stringify")){var z={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},A="000000",B=function(a,b){return(A+(b||0)).slice(-a)},C="\\u00",D=function(a){var b,c='"',d=0,e=a.length,f=e>10&&t;for(f&&(b=a.split(""));e>d;d++){var g=a.charCodeAt(d);switch(g){case 8:case 9:case 10:case 12:case 13:case 34:case 92:c+=z[g];break;default:if(32>g){c+=C+B(2,g.toString(16));break}c+=f?b[d]:t?a.charAt(d):a[d]}}return c+'"'},E=function(a,b,c,d,i,j,k){var l,m,n,t,v,x,y,z,A,C,F,G,H,I,J,K;try{l=b[a]}catch(L){}if("object"==typeof l&&l)if(m=h.call(l),m!=o||e.call(l,"toJSON"))"function"==typeof l.toJSON&&(m!=p&&m!=q&&m!=r||e.call(l,"toJSON"))&&(l=l.toJSON(a));else if(l>-1/0&&1/0>l){if(w){for(v=u(l/864e5),n=u(v/365.2425)+1970-1;w(n+1,0)<=v;n++);for(t=u((v-w(n,0))/30.42);w(n,t+1)<=v;t++);v=1+v-w(n,t),x=(l%864e5+864e5)%864e5,y=u(x/36e5)%24,z=u(x/6e4)%60,A=u(x/1e3)%60,C=x%1e3}else n=l.getUTCFullYear(),t=l.getUTCMonth(),v=l.getUTCDate(),y=l.getUTCHours(),z=l.getUTCMinutes(),A=l.getUTCSeconds(),C=l.getUTCMilliseconds();l=(0>=n||n>=1e4?(0>n?"-":"+")+B(6,0>n?-n:n):B(4,n))+"-"+B(2,t+1)+"-"+B(2,v)+"T"+B(2,y)+":"+B(2,z)+":"+B(2,A)+"."+B(3,C)+"Z"}else l=null;if(c&&(l=c.call(b,a,l)),null===l)return"null";if(m=h.call(l),m==s)return""+l;if(m==p)return l>-1/0&&1/0>l?""+l:"null";if(m==q)return D(""+l);if("object"==typeof l){for(I=k.length;I--;)if(k[I]===l)throw TypeError();if(k.push(l),F=[],J=j,j+=i,m==r){for(H=0,I=l.length;I>H;H++)G=E(H,l,c,d,i,j,k),F.push(G===g?"null":G);K=F.length?i?"[\n"+j+F.join(",\n"+j)+"\n"+J+"]":"["+F.join(",")+"]":"[]"}else f(d||l,function(a){var b=E(a,l,c,d,i,j,k);b!==g&&F.push(D(a)+":"+(i?" ":"")+b)}),K=F.length?i?"{\n"+j+F.join(",\n"+j)+"\n"+J+"}":"{"+F.join(",")+"}":"{}";return k.pop(),K}};k.stringify=function(a,b,c){var d,e,f,g;if("function"==typeof b||"object"==typeof b&&b)if((g=h.call(b))==n)e=b;else if(g==r){f={};for(var i,j=0,k=b.length;k>j;i=b[j++],g=h.call(i),(g==q||g==p)&&(f[i]=1));}if(c)if((g=h.call(c))==p){if((c-=c%1)>0)for(d="",c>10&&(c=10);d.length<c;d+=" ");}else g==q&&(d=c.length<=10?c:c.slice(0,10));return E("",(i={},i[""]=a,i),e,f,d,"",[])}}if(!c("json-parse")){var F,G,H=String.fromCharCode,I={92:"\\",34:'"',47:"/",98:"\b",116:"	",110:"\n",102:"\f",114:"\r"},J=function(){throw F=G=null,SyntaxError()},K=function(){for(var a,b,c,d,e,f=G,g=f.length;g>F;)switch(e=f.charCodeAt(F)){case 9:case 10:case 13:case 32:F++;break;case 123:case 125:case 91:case 93:case 58:case 44:return a=t?f.charAt(F):f[F],F++,a;case 34:for(a="@",F++;g>F;)if(e=f.charCodeAt(F),32>e)J();else if(92==e)switch(e=f.charCodeAt(++F)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:a+=I[e],F++;break;case 117:for(b=++F,c=F+4;c>F;F++)e=f.charCodeAt(F),e>=48&&57>=e||e>=97&&102>=e||e>=65&&70>=e||J();a+=H("0x"+f.slice(b,F));break;default:J()}else{if(34==e)break;for(e=f.charCodeAt(F),b=F;e>=32&&92!=e&&34!=e;)e=f.charCodeAt(++F);a+=f.slice(b,F)}if(34==f.charCodeAt(F))return F++,a;J();default:if(b=F,45==e&&(d=!0,e=f.charCodeAt(++F)),e>=48&&57>=e){for(48==e&&(e=f.charCodeAt(F+1),e>=48&&57>=e)&&J(),d=!1;g>F&&(e=f.charCodeAt(F),e>=48&&57>=e);F++);if(46==f.charCodeAt(F)){for(c=++F;g>c&&(e=f.charCodeAt(c),e>=48&&57>=e);c++);c==F&&J(),F=c}if(e=f.charCodeAt(F),101==e||69==e){for(e=f.charCodeAt(++F),(43==e||45==e)&&F++,c=F;g>c&&(e=f.charCodeAt(c),e>=48&&57>=e);c++);c==F&&J(),F=c}return+f.slice(b,F)}if(d&&J(),"true"==f.slice(F,F+4))return F+=4,!0;if("false"==f.slice(F,F+5))return F+=5,!1;if("null"==f.slice(F,F+4))return F+=4,null;J()}return"$"},L=function(a){var b,c;if("$"==a&&J(),"string"==typeof a){if("@"==(t?a.charAt(0):a[0]))return a.slice(1);if("["==a){for(b=[];a=K(),"]"!=a;c||(c=!0))c&&(","==a?(a=K(),"]"==a&&J()):J()),","==a&&J(),b.push(L(a));return b}if("{"==a){for(b={};a=K(),"}"!=a;c||(c=!0))c&&(","==a?(a=K(),"}"==a&&J()):J()),(","==a||"string"!=typeof a||"@"!=(t?a.charAt(0):a[0])||":"!=K())&&J(),b[a.slice(1)]=L(K());return b}J()}return a},M=function(a,b,c){var d=N(a,b,c);d===g?delete a[b]:a[b]=d},N=function(a,b,c){var d,e=a[b];if("object"==typeof e&&e)if(h.call(e)==r)for(d=e.length;d--;)M(e,d,c);else f(e,function(a){M(e,a,c)});return c.call(a,b,e)};k.parse=function(a,b){var c,d;return F=0,G=""+a,c=L(K()),"$"!=K()&&J(),F=G=null,b&&h.call(b)==n?N((d={},d[""]=c,d),"",b):c}}}i&&a(function(){return k})}(this)},{}],48:[function(a,b,c){function d(a,b){var c=[];b=b||0;for(var d=b||0;d<a.length;d++)c[d-b]=a[d];return c}b.exports=d},{}]},{},[1])(1)});
\ No newline at end of file
diff --git a/public/app/16e12937.vendor.css b/public/app/16e12937.vendor.css
new file mode 100644
index 0000000..c644282
--- /dev/null
+++ b/public/app/16e12937.vendor.css
@@ -0,0 +1,27 @@
+@charset "UTF-8";/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */.label,sub,sup{vertical-align:baseline}.btn,.btn-group,.btn-group-vertical,.caret,.checkbox-inline,.radio-inline,img{vertical-align:middle}hr,img{border:0}body,figure{margin:0}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu{float:left}.fa-ul,.pre-numbering li{list-style-type:none}.fa,.glyphicon,.icon-emoticon{-moz-osx-font-smoothing:grayscale}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{color:#000;background:#ff0}sub,sup{position:relative;font-size:75%;line-height:0}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}.glyphicon,address{font-style:normal}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.dropdown-toggle.btn-danger,.open>.dropdown-toggle.btn-default,.open>.dropdown-toggle.btn-info,.open>.dropdown-toggle.btn-primary,.open>.dropdown-toggle.btn-warning{background-image:none}.img-thumbnail,body{background-color:#fff}@font-face{font-family:'Glyphicons Halflings';src:url(../assets/fonts/glyphicons-halflings-regular.eot);src:url(../assets/fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../assets/fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../assets/fonts/glyphicons-halflings-regular.woff) format('woff'),url(../assets/fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../assets/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-weight:400;line-height:1;-webkit-font-smoothing:antialiased}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}address,blockquote .small,blockquote footer,blockquote small,dd,dt,pre{line-height:1.42857143}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}address,dl{margin-bottom:20px}ol,ul{margin-bottom:10px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;color:#777}legend,pre{display:block;color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{padding:9.5px;margin:0 0 10px;font-size:13px;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-right:15px;padding-left:15px}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{min-width:0;margin:0}legend{width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:14px;line-height:1.42857143;color:#555;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.bootstrap-switch.bootstrap-switch-focused,.form-control:focus{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control:focus{border-color:#66afe9;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.form-group-sm .form-control,.input-sm{padding:5px 10px;border-radius:3px;font-size:12px}.input-sm{height:30px;line-height:1.5}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;line-height:1.5}.form-group-lg .form-control,.input-lg{border-radius:6px;padding:10px 16px;font-size:18px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;line-height:1.3333333}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;line-height:1.3333333}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.33px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu-right,.dropdown-menu.pull-right{right:0;left:auto}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.42857143;white-space:nowrap}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{clear:both;font-weight:400;color:#333}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{right:auto;left:0}.dropdown-header{font-size:12px;color:#777}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.nav-justified>.dropdown .dropdown-menu,.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.nav>li,.nav>li>a{display:block;position:relative}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center;margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.embed-responsive,.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.breadcrumb>li,.pagination{display:inline-block}.btn .badge,.btn .label{top:-1px;position:relative}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{padding-left:0;margin:20px 0;border-radius:4px}.pager li,.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:3;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.badge,.label{font-weight:700;line-height:1;white-space:nowrap;text-align:center}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;color:#fff;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;color:#fff;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;background-color:#eee}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.alert,.thumbnail{margin-bottom:20px}.alert .alert-link,.close{font-weight:700}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.bootstrap-switch,.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.modal-title,.tooltip{line-height:1.42857143}.popover,.tooltip{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;line-break:auto;text-decoration:none}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal{position:fixed;z-index:1050;display:none;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;font-weight:400;text-align:left;text-align:start;white-space:normal;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.carousel,.carousel-inner{position:relative}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-right .tooltip-arrow{left:5px}.popover.left>.arrow:after,.popover.right>.arrow:after{bottom:-10px;content:" "}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{top:0;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}.carousel-caption,.carousel-control{color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.6);text-align:center}.popover.right{margin-left:10px}.popover.left{margin-left:-10px}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{left:1px;border-right-color:#fff;border-left-width:0}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.carousel-inner{width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}.ng-cloak,.x-ng-cloak,[data-ng-cloak],[ng-cloak],[ng\:cloak],[x-ng-cloak]{display:none!important}.adf-move{cursor:move;cursor:-webkit-grabbing}.edit .column{min-height:120px;border:1px dashed #ccc;padding-top:15px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}pre.edit{margin-top:15px}.column .placeholder{opacity:.4;background:#E8E8E8;border:1px dashed #505050;margin-bottom:15px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.dashboard-container h1 a,.widget h3 a{text-decoration:none}.padding-bottom{padding-bottom:5px}.adf-flip{-moz-transform:scaleX(-1);-o-transform:scaleX(-1);-webkit-transform:scaleX(-1);transform:scaleX(-1);filter:FlipH;-ms-filter:"FlipH"}.dashboard-modal.widget-fullscreen .modal-dialog{width:98%}.clock{text-align:center}.clock-time{font-size:3em}.clock-date{font-size:1em}iframe{width:100%;height:100%;min-height:400px;border:1px solid grey}.colorpicker-visible,.colorpicker-visible .dropdown-menu{display:block!important}colorpicker-saturation{display:block;width:100px;height:100px;background-image:url(data:image/png;base64,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);cursor:crosshair;float:left}colorpicker-saturation i{display:block;height:7px;width:7px;border:1px solid #000;border-radius:5px;position:absolute;top:0;left:0;margin:-4px 0 0 -4px}colorpicker-saturation i::after{content:'';display:block;height:7px;width:7px;border:1px solid #fff;border-radius:5px}colorpicker-alpha,colorpicker-hue{width:15px;height:100px;float:left;cursor:row-resize;margin-left:4px;margin-bottom:4px}colorpicker-alpha i,colorpicker-hue i{display:block;height:2px;background:#000;border-top:1px solid #fff;position:absolute;top:0;left:0;width:100%;margin-top:-1px}.colorpicker,colorpicker-alpha{display:none}colorpicker-hue{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAMAAABw8qpSAAABLFBMVEUA/z8AuP//JAAA/33/3AAA/1ABAv8A/7r/AH7/jgD2AP8A//j/AEHmAP/XAP/HAP+4AP//ALyoAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8ATv//AG7/cAD/vgD/APoAmv//ADH/AKwB/wMA5//4Eg4AL///AOr/UQD/nwAA/27/7AAA/+kAe/8Ayf8A/5sA/zEA/6z/ABEAEP8A/17/MgAA/9n/ACL/gAD/AJ0AXP8Aqv//AMoA/yHqFBb/zAD/AGD/ANsA9//1/wDk/wDV/wDF/wC3/wD/AI2m/wD/FACY/wCI/wB5/wBp/wD/YgBb/wBK/wA8/wAs/wAd/wAN/wAAPv8A/xH/AFAAi///rQAA/8r/+gAA1///QwAAH/8Abf8A/43c/JNGAAAAiUlEQVR4AQXBg2EDAAAAsMy2bds2ttp2+/8PTby79mDLsKJPq/oFPdk24dWXAxsGjRg1ZtykKdNmzJozb8GiJct63WjYl7fiWdOZkk0vOpyr2fVtyKl7FX2uXGjpcuxWDy69KdiRk5WRlpIUFxMVERLw78+vH1Unun1YV3ZkwKM1CYfq7nQK22sD03ITV2Aqp0IAAAAASUVORK5CYII=)}.colorpicker-color,colorpicker-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAMAAACIElGlAAADAFBMVEUAAADT09PT09P////T09P////e3t7q6urT09Px8fHT09P////////T09PT09P////////T09PT09P////////////T09PT09P////////////T09P////T09PT09PT09P////T09PT09P////////////////T09P////T09PT09P////T09PT09PT09PT09PT09PT09P////T09P////T09PT09P////////////T09P////T09P////////////T09PT09P////T09P////////////////////T09P////////T09PT09P////////////////////////T09PT09P////////////////////////T09PT09P////T09PT09P////////T09P////////////T09P////////T09P////T09P////T09P////T09PT09PT09PT09P////T09PT09PT09PT09PT09PT09P////T09P////T09PT09P////////////T09PT09PT09P////T09PT09PT09PT09PT09PT09PT09P////////////////T09PT09P////////////T09P////////T09P////T09PT09PT09P////////T09P////////T09P////T09PT09P////////////////T09PT09PT09PT09P////T09PT09PT09PT09PT09PT09PT09P////T09P////T09PT09PT09PT09PT09P////////////////////////////////////T09P////T09P////T09P////T09PT09P////////////T09P////T09P////T09P////////////T09PT09P////////////////T09PT09P////T09P////T09PT09P////T09P////T09PT09P////T09PT09PT09PT09P////T09PT09P////////////T09PT09P////T09P////////T09MQsm1FAAABAHRSTlMAgJN8/vcDAfcCnJyGaZmZlomGk4yJOmM/eTxs8wY0YDFC7HNdLx18n5/7aUvzCcW9+qKiK8P0ZiltRwfdw/n8Px3WduJjItj78ss5PDHUNELbwP5wplA2FglEVwvkqNarCs4Z7b2sDLgQ0xNdyLrr0eLLUeW1Vs5TWQLwjPI3ZvQGdvxFyFrAeevaLCLvGd0kpRskGyf4qK605xKvFrGyDRHnBYMEkJaDkIBvB/gpH99O6CrbIC4nH3Lg2SXp4A7Qul/GDEgPSlMQ6LjqFU0SjyCCj5V/gnBN7xglL3O70WBU7gjFFEfft0sPTo1ndRipwXr2yRemWRVENq+ytbGuxGaWGQAAAnpJREFUeNpNxmdcDHAAxvEHOWXvmXX23ntv2XvvMg/Z44x0KaRBSnfcKSqlnYZKp1QqGpT20KZh783/eePj+3vzw3/q/AM9iURPTy6XS+RwcXNzcZMQTE1dTE3bE7y9S0u9xxD600rCGtpI2ErOsbGxzoiMrIqscnaOi4vDdnp4XYSrguwxQSb7KpMllycnl2MFaTSaTxrY5NrY5BoKb2BnZ2doZ29vb2OPSdSd4Bcc7OcXGhqamgqrYCsrq+mEiEtC3gUBDg55Dg53IkQYSYG+gb6+GEqB5wV0o5D8/JAQdKK5hA40n3BS+L6c0JJmE+ZQW8JEak1YQJ0Jq+jbaQEPnotGE+IrK+Pj+xKqU6pTUrIDAgKysZ+WEY5QQkJxcQIO0WrCUbL4YmFhgZ3UlVAUHR1d1JEwjVoRRpDJKxMTE/ShBoRR1I6whLyyvLyyUFAQFhbWhTCFFArFawXOCu/bEHpQLYKnZ0aGZw2CR1qah0dmpqurK+pTU0ILakJoTi+PC7j5RHTrqQg1qRkh3T3d3b0xoSE1ItSleoSe1IswmIYQPl8UlhLWkaOj41tHbKENBLX6j1qt/KFUKnFN+Onk9NvJCQdJpfqlUqGiIjExcRthN91/JsJmGkhYRO/OCBhHwwgxMWUxZQMIu8j8o7m5OfbRLMJh2kTYQ1FRhYVR2EHzCOtpMmEG3SUsJEvLoKAg2Prb2tqOJYSH+/uH33shwlTaS1hLBwhX6AYX2tuiRwStVntOa5yUZJwEqbREKjUi5Bjl5BhZW1uXWOMYGRBOnNDX1zfoxz1FwwkfSJfgo6vr41P7soBBNJ7Qm2YSzHTMzMwmEHRoMf0Fm5mYOUrzNBYAAAAASUVORK5CYII=)}.colorpicker{top:0;left:0;z-index:9999}.colorpicker colorpicker-alpha,.colorpicker colorpicker-hue,.colorpicker colorpicker-saturation{position:relative}.colorpicker input{width:100px;font-size:11px;color:#000;background-color:#fff}.colorpicker.alpha{min-width:140px}.colorpicker.alpha colorpicker-alpha{display:block}.colorpicker.dropdown{position:absolute}.colorpicker.colorpicker-fixed-position{position:fixed}.colorpicker .dropdown-menu::after,.colorpicker .dropdown-menu::before{content:'';display:inline-block;position:absolute}.colorpicker .dropdown-menu::after{clear:both;border:6px solid transparent;top:-5px;left:7px}.colorpicker .dropdown-menu::before{border:7px solid transparent;top:-6px;left:6px}.colorpicker .dropdown-menu{position:static;top:0;left:0;min-width:129px;padding:4px;margin-top:0}.colorpicker-position-top .dropdown-menu::after{border-top:6px solid #fff;border-bottom:0;top:auto;bottom:-5px}.colorpicker-position-top .dropdown-menu::before{border-top:7px solid rgba(0,0,0,.2);border-bottom:0;top:auto;bottom:-6px}.colorpicker-position-right .dropdown-menu::after{border-right:6px solid #fff;border-left:0;top:11px;left:-5px}.colorpicker-position-right .dropdown-menu::before{border-right:7px solid rgba(0,0,0,.2);border-left:0;top:10px;left:-6px}.colorpicker-position-bottom .dropdown-menu::after{border-bottom:6px solid #fff;border-top:0}.colorpicker-position-bottom .dropdown-menu::before{border-bottom:7px solid rgba(0,0,0,.2);border-top:0}.colorpicker-position-left .dropdown-menu::after{border-left:6px solid #fff;border-right:0;top:11px;left:auto;right:-5px}.colorpicker-position-left .dropdown-menu::before{border-left:7px solid rgba(0,0,0,.2);border-right:0;top:10px;left:auto;right:-6px}colorpicker-preview{display:block;height:10px;margin:5px 0 3px;clear:both;background-position:0 100%}.bootstrap-switch{display:inline-block;direction:ltr;cursor:pointer;border-radius:4px;border:1px solid #ccc;position:relative;text-align:left;overflow:hidden;line-height:8px;z-index:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.bootstrap-switch .bootstrap-switch-container{display:inline-block;top:0;border-radius:4px;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.bootstrap-switch .bootstrap-switch-handle-off,.bootstrap-switch .bootstrap-switch-handle-on,.bootstrap-switch .bootstrap-switch-label{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:inline-block!important;height:100%;padding:6px 12px;font-size:14px;line-height:20px}.bootstrap-switch .bootstrap-switch-handle-off,.bootstrap-switch .bootstrap-switch-handle-on{text-align:center;z-index:1}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary{color:#fff;background:#428bca}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info{color:#fff;background:#5bc0de}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success{color:#fff;background:#5cb85c}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning{background:#f0ad4e;color:#fff}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger{color:#fff;background:#d9534f}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default{color:#000;background:#eee}.bootstrap-switch .bootstrap-switch-label{text-align:center;margin-top:-1px;margin-bottom:-1px;z-index:100;color:#333;background:#fff}.bootstrap-switch .bootstrap-switch-handle-on{border-bottom-left-radius:3px;border-top-left-radius:3px}.bootstrap-switch .bootstrap-switch-handle-off{border-bottom-right-radius:3px;border-top-right-radius:3px}.bootstrap-switch input[type=radio],.bootstrap-switch input[type=checkbox]{position:absolute!important;top:0;left:0;opacity:0;filter:alpha(opacity=0);z-index:-1}.bootstrap-switch input[type=radio].form-control,.bootstrap-switch input[type=checkbox].form-control{height:auto}.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label{padding:1px 5px;font-size:12px;line-height:1.5}.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label{padding:5px 10px;font-size:12px;line-height:1.5}.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label{padding:6px 16px;font-size:18px;line-height:1.33}.bootstrap-switch.bootstrap-switch-disabled,.bootstrap-switch.bootstrap-switch-indeterminate,.bootstrap-switch.bootstrap-switch-readonly{cursor:default!important}.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label{opacity:.5;filter:alpha(opacity=50);cursor:default!important}.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container{-webkit-transition:margin-left .5s;transition:margin-left .5s}.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on{border-radius:0 3px 3px 0}.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off{border-radius:3px 0 0 3px}.bootstrap-switch.bootstrap-switch-focused{border-color:#66afe9;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label{border-bottom-right-radius:3px;border-top-right-radius:3px}.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label{border-bottom-left-radius:3px;border-top-left-radius:3px}.bar-legend,.chart-legend,.doughnut-legend,.line-legend,.pie-legend,.polararea-legend,.radar-legend{list-style-type:none;margin-top:5px;text-align:center;-webkit-padding-start:0;-moz-padding-start:0;padding-left:0}.bar-legend li,.chart-legend li,.doughnut-legend li,.line-legend li,.pie-legend li,.polararea-legend li,.radar-legend li{display:inline-block;white-space:nowrap;position:relative;margin-bottom:4px;border-radius:5px;padding:2px 8px 2px 28px;font-size:smaller;cursor:default}.bar-legend li span,.chart-legend li span,.doughnut-legend li span,.line-legend li span,.pie-legend li span,.polararea-legend li span,.radar-legend li span{display:block;position:absolute;left:0;top:0;width:20px;height:20px;border-radius:5px}.toast-title{font-weight:700}.toast-message{word-wrap:break-word}.toast-message a,.toast-message label{color:#fff}.toast-message a:hover{color:#ccc;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#fff;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:.8}.toast-top-center,.toast-top-full-width{top:0;right:0;width:100%}.toast-close-button:focus,.toast-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4}button.toast-close-button{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#fff;opacity:.8}#toast-container>:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;cursor:pointer}#toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=)!important}#toast-container.toast-bottom-center>div,#toast-container.toast-top-center>div{width:300px;margin:auto}#toast-container.toast-bottom-full-width>div,#toast-container.toast-top-full-width>div{width:96%;margin:auto}.toast{background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}.toast-progress{position:absolute;left:0;bottom:0;height:4px;background-color:#000;opacity:.4}.toast{opacity:1!important}.toast.ng-enter{opacity:0!important;transition:opacity .3s linear}.toast.ng-enter.ng-enter-active{opacity:1!important}.toast.ng-leave{opacity:1;transition:opacity .3s linear}.toast.ng-leave.ng-leave-active{opacity:0!important}@media all and (max-width:240px){#toast-container>div{padding:8px 8px 8px 50px;width:11em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:241px) and (max-width:480px){#toast-container>div{padding:8px 8px 8px 50px;width:18em}#toast-container .toast-close-button{right:-.2em;top:-.2em}}@media all and (min-width:481px) and (max-width:768px){#toast-container>div{padding:15px 15px 15px 50px;width:25em}}.ui-notification{position:fixed;z-index:9999;width:300px;cursor:pointer;-webkit-transition:all ease .5s;-o-transition:all ease .5s;transition:all ease .5s;color:#fff;background:#337ab7;box-shadow:5px 5px 10px rgba(0,0,0,.3)}.ui-notification.killed{-webkit-transition:opacity ease 1s;-o-transition:opacity ease 1s;transition:opacity ease 1s;opacity:0}.ui-notification>h3{font-size:14px;font-weight:700;display:block;margin:10px 10px 0;padding:0 0 5px;text-align:left;border-bottom:1px solid rgba(255,255,255,.3)}.editable-buttons,.editable-wrap,.editable-wrap .editable-input{display:inline-block}.ui-notification a{color:#fff}.ui-notification a:hover{text-decoration:underline}.ui-notification>.message{margin:10px}.editable-bstime .well-small,.editable-wrap .editable-controls,.editable-wrap .editable-controls>input,.editable-wrap .editable-controls>select,.editable-wrap .editable-controls>textarea,.editable-wrap .editable-error,.form-group .bootstrap-select.btn-group,.form-horizontal .bootstrap-select.btn-group,.form-inline .bootstrap-select.btn-group{margin-bottom:0}.ui-notification.warning{color:#fff;background:#f0ad4e}.ui-notification.error{color:#fff;background:#d9534f}.ui-notification.success{color:#fff;background:#5cb85c}.ui-notification.info{color:#fff;background:#5bc0de}.ui-notification:hover{opacity:.7}.steps-indicator li a:before,.steps-indicator:before{background-color:#e6e6e6;content:''}.steps-indicator li.current,.steps-indicator li.default,.steps-indicator li.editing{pointer-events:none}.steps-indicator{right:0;bottom:0;left:0;margin:0;padding:20px 0 0;height:30px;list-style:none}.steps-indicator:before{position:absolute;height:1px}.steps-indicator.steps-2:before{left:calc(100% / 2 / 2);right:calc(100% / 2 / 2)}.steps-indicator.steps-3:before{left:calc(100% / 3 / 2);right:calc(100% / 3 / 2)}.steps-indicator.steps-4:before{left:calc(100% / 4 / 2);right:calc(100% / 4 / 2)}.steps-indicator.steps-5:before{left:calc(100% / 5 / 2);right:calc(100% / 5 / 2)}.steps-indicator.steps-6:before{left:calc(100% / 6 / 2);right:calc(100% / 6 / 2)}.steps-indicator.steps-7:before{left:calc(100% / 7 / 2);right:calc(100% / 7 / 2)}.steps-indicator.steps-8:before{left:calc(100% / 8 / 2);right:calc(100% / 8 / 2)}.steps-indicator.steps-9:before{left:calc(100% / 9 / 2);right:calc(100% / 9 / 2)}.steps-indicator.steps-10:before{left:calc(100% / 10 / 2);right:calc(100% / 10 / 2)}.steps-indicator *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.steps-indicator li{position:relative;float:left;margin:0;padding:10px 0 0;text-align:center;line-height:15px}.steps-indicator li a{color:grey;text-decoration:none;text-transform:uppercase;font-weight:700;transition:.25s;cursor:pointer}.bootstrap-select.btn-group .dropdown-menu li.disabled a,.bootstrap-select.btn-group.disabled,.bootstrap-select.btn-group>.disabled{cursor:not-allowed}.steps-indicator li a:before{position:absolute;top:-7px;left:calc(50% - 7px);width:14px;height:14px;border-radius:100%;transition:.25s}.steps-indicator li a:hover{color:#4d4d4d}.steps-indicator.steps-2 li{width:calc(100% / 2)}.steps-indicator.steps-3 li{width:calc(100% / 3)}.steps-indicator.steps-4 li{width:calc(100% / 4)}.steps-indicator.steps-5 li{width:calc(100% / 5)}.steps-indicator.steps-6 li{width:calc(100% / 6)}.steps-indicator.steps-7 li{width:calc(100% / 7)}.steps-indicator.steps-8 li{width:calc(100% / 8)}.steps-indicator.steps-9 li{width:calc(100% / 9)}.steps-indicator.steps-10 li{width:calc(100% / 10)}.steps-indicator.steps-11 li{width:calc(100% / 11)}.steps-indicator li.default a:hover{color:grey}.steps-indicator li.current a:before{background-color:grey}.steps-indicator li.done a:before{background-color:#393}.steps-indicator li.editing a:before{background-color:red}/*!
+angular-xeditable - 0.1.9
+Edit-in-place for angular.js
+Build date: 2015-03-26 
+*/.editable-wrap{white-space:nowrap;margin:0}.editable-buttons{vertical-align:top}.editable-buttons button{margin-left:5px}.editable-input.editable-has-buttons{width:auto}.editable-bstime .editable-input input[type=text]{width:46px}.editable-bstime .well-small{padding:10px}.editable-range output{display:inline-block;min-width:30px;vertical-align:top;text-align:center}.editable-color input[type=color]{width:50px}.editable-checkbox label span,.editable-checklist label span,.editable-radiolist label span{margin-left:7px;margin-right:10px}.editable-hide{display:none!important}.editable-click,a.editable-click{text-decoration:none;color:#428bca;border-bottom:dashed 1px #428bca}.editable-click:hover,a.editable-click:hover{text-decoration:none;color:#2a6496;border-bottom-color:#2a6496}.editable-empty,.editable-empty:focus,.editable-empty:hover,a.editable-empty,a.editable-empty:focus,a.editable-empty:hover{font-style:italic;color:#D14;text-decoration:none}.bootstrap-select.btn-group .dropdown-menu li.active small,.fa-inverse{color:#fff}/*!
+Animate.css - http://daneden.me/animate
+Licensed under the MIT license - http://opensource.org/licenses/MIT
+
+Copyright (c) 2015 Daniel Eden
+*/.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}.animated.bounceIn,.animated.bounceOut,.animated.flipOutX,.animated.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounce{100%,20%,53%,80%,from{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.050,.855,.060);animation-timing-function:cubic-bezier(.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.050,.855,.060);animation-timing-function:cubic-bezier(.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{100%,20%,53%,80%,from{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.050,.855,.060);animation-timing-function:cubic-bezier(.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.050,.855,.060);animation-timing-function:cubic-bezier(.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{100%,50%,from{opacity:1}25%,75%{opacity:0}}@keyframes flash{100%,50%,from{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{100%,from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}@keyframes pulse{100%,from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{100%,from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}@keyframes rubberBand{100%,from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{100%,from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{100%,from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{100%,from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}@keyframes tada{100%,from{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{100%,from{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}@keyframes wobble{100%,from{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{100%,11.1%,from{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{100%,11.1%,from{-webkit-transform:none;transform:none}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{100%,20%,40%,60%,80%,from{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{100%,20%,40%,60%,80%,from{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInDown{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;transform:none}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;transform:none}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInRight{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;transform:none}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{100%,60%,75%,90%,from{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}from{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{from{opacity:0}100%{opacity:1}}@keyframes fadeIn{from{opacity:0}100%{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{from{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{from{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{from{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{from{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{from{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{from{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{from{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{from{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{from{opacity:1}100%{opacity:0}}@keyframes fadeOut{from{opacity:1}100%{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{from{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}.flipInY,.flipOutX{-webkit-backface-visibility:visible!important}@-webkit-keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{from{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;backface-visibility:visible!important}@-webkit-keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{from{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{from{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;transform:none;opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{from{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{from{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{from{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{from{-webkit-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{from{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{from{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{from{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;transform:none}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{from{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInDown{from{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInLeft{from{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInRight{from{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes slideInUp{from{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{from{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}100%{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}/*!
+ * Bootstrap-select v1.7.5 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */.bootstrap-select{width:220px\9}.bootstrap-select>.dropdown-toggle{width:100%;padding-right:25px}.error .bootstrap-select .dropdown-toggle,.has-error .bootstrap-select .dropdown-toggle{border-color:#b94a48}.bootstrap-select.fit-width{width:auto!important}.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:220px}.bootstrap-select.btn-group[class*=col-] .dropdown-toggle,.bootstrap-select.form-control:not([class*=col-]),.form-inline .bootstrap-select.btn-group .form-control{width:100%}.bootstrap-select .dropdown-toggle:focus{outline:#333 dotted thin!important;outline:-webkit-focus-ring-color auto 5px!important;outline-offset:-2px}.bootstrap-select.form-control{margin-bottom:0;padding:0;border:none}.bootstrap-select.form-control.input-group-btn{z-index:auto}.bootstrap-select.btn-group:not(.input-group-btn),.bootstrap-select.btn-group[class*=col-]{float:none;display:inline-block;margin-left:0}.bootstrap-select.btn-group.dropdown-menu-right,.bootstrap-select.btn-group[class*=col-].dropdown-menu-right,.row .bootstrap-select.btn-group[class*=col-].dropdown-menu-right{float:right}.form-group-lg .bootstrap-select.btn-group.form-control,.form-group-sm .bootstrap-select.btn-group.form-control{padding:0}.bootstrap-select.btn-group.disabled:focus,.bootstrap-select.btn-group>.disabled:focus{outline:0!important}.bootstrap-select.btn-group.bs-container{position:absolute}.bootstrap-select.btn-group.bs-container .dropdown-menu{z-index:1060}.bootstrap-select.btn-group .dropdown-toggle .filter-option{display:inline-block;overflow:hidden;width:100%;text-align:left}.bootstrap-select.btn-group .dropdown-toggle .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.bootstrap-select.btn-group .dropdown-menu{min-width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .dropdown-menu.inner{position:static;float:none;border:0;padding:0;margin:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none}.bootstrap-select.btn-group .dropdown-menu li{position:relative}.bootstrap-select.btn-group .dropdown-menu li a{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bootstrap-select.btn-group .dropdown-menu li a.opt{position:relative;padding-left:2.25em}.bootstrap-select.btn-group .dropdown-menu li a span.check-mark{display:none}.bootstrap-select.btn-group .dropdown-menu li a span.text{display:inline-block}.bootstrap-select.btn-group .dropdown-menu li small{padding-left:.5em}.bootstrap-select.btn-group .dropdown-menu .notify{position:absolute;bottom:5px;width:96%;margin:0 2%;min-height:26px;padding:3px 5px;background:#f5f5f5;border:1px solid #e3e3e3;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05);pointer-events:none;opacity:.9;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-select.btn-group .no-results{padding:3px;background:#f5f5f5;margin:0 5px;white-space:nowrap}.ne-image-wrapper,.ne-video-player{background-repeat:no-repeat;background-color:#3498DB}.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option{position:static}.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret{position:static;top:auto;margin-top:-1px}.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark{position:absolute;display:inline-block;right:15px;margin-top:5px}.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle{z-index:1061}.bootstrap-select.show-menu-arrow .dropdown-toggle:before{content:'';border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(204,204,204,.2);position:absolute;bottom:-4px;left:9px;display:none}.bootstrap-select.show-menu-arrow .dropdown-toggle:after{content:'';border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;bottom:-4px;left:10px;display:none}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before{bottom:auto;top:-3px;border-top:7px solid rgba(204,204,204,.2);border-bottom:0}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after{bottom:auto;top:-3px;border-top:6px solid #fff;border-bottom:0}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before{right:12px;left:auto}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after{right:13px;left:auto}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:after,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:before{display:block}.bs-actionsbox,.bs-donebutton,.bs-searchbox{padding:4px 8px}.bs-actionsbox{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bs-donebutton,.mCSB_container_wrapper>.mCSB_container{-webkit-box-sizing:border-box;-moz-box-sizing:border-box}.bs-actionsbox .btn-group button{width:50%}.bs-donebutton{float:left;width:100%;box-sizing:border-box}.bs-donebutton .btn-group button{width:100%}.bs-searchbox+.bs-actionsbox{padding:0 8px 4px}.bs-searchbox .form-control{margin-bottom:0;width:100%;float:none}select.bs-select-hidden,select.selectpicker{display:none!important}select.mobile-device{position:absolute!important;top:0;left:0;display:block!important;width:100%;height:100%!important;opacity:0}.fa,.fa-stack{display:inline-block}@-moz-keyframes spinner-loader{0%{-moz-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes spinner-loader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-loader{0%{-moz-transform:rotate(0);-ms-transform:rotate(0);-webkit-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-loader:not(:required){-moz-animation:spinner-loader 1.5s infinite linear;-webkit-animation:spinner-loader 1.5s infinite linear;animation:spinner-loader 1.5s infinite linear;-moz-border-radius:.5em;-webkit-border-radius:.5em;border-radius:.5em;-moz-box-shadow:rgba(0,0,51,.3) 1.5em 0 0 0,rgba(0,0,51,.3) 1.1em 1.1em 0 0,rgba(0,0,51,.3) 0 1.5em 0 0,rgba(0,0,51,.3) -1.1em 1.1em 0 0,rgba(0,0,51,.3) -1.5em 0 0 0,rgba(0,0,51,.3) -1.1em -1.1em 0 0,rgba(0,0,51,.3) 0 -1.5em 0 0,rgba(0,0,51,.3) 1.1em -1.1em 0 0;-webkit-box-shadow:rgba(0,0,51,.3) 1.5em 0 0 0,rgba(0,0,51,.3) 1.1em 1.1em 0 0,rgba(0,0,51,.3) 0 1.5em 0 0,rgba(0,0,51,.3) -1.1em 1.1em 0 0,rgba(0,0,51,.3) -1.5em 0 0 0,rgba(0,0,51,.3) -1.1em -1.1em 0 0,rgba(0,0,51,.3) 0 -1.5em 0 0,rgba(0,0,51,.3) 1.1em -1.1em 0 0;box-shadow:rgba(0,0,51,.3) 1.5em 0 0 0,rgba(0,0,51,.3) 1.1em 1.1em 0 0,rgba(0,0,51,.3) 0 1.5em 0 0,rgba(0,0,51,.3) -1.1em 1.1em 0 0,rgba(0,0,51,.3) -1.5em 0 0 0,rgba(0,0,51,.3) -1.1em -1.1em 0 0,rgba(0,0,51,.3) 0 -1.5em 0 0,rgba(0,0,51,.3) 1.1em -1.1em 0 0;display:inline-block;font-size:10px;width:1em;height:1em;margin:1.5em;overflow:hidden;text-indent:100%}.fa.fa-pull-left,.fa.pull-left{margin-right:.3em}/*!
+ *  Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:FontAwesome;src:url(../assets/fonts/fontawesome-webfont.eot?v=4.4.0);src:url(../assets/fonts/fontawesome-webfont.eot?#iefix&v=4.4.0) format('embedded-opentype'),url(../assets/fonts/fontawesome-webfont.woff2?v=4.4.0) format('woff2'),url(../assets/fonts/fontawesome-webfont.woff?v=4.4.0) format('woff'),url(../assets/fonts/fontawesome-webfont.ttf?v=4.4.0) format('truetype'),url(../assets/fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em}.fa.fa-pull-right,.fa.pull-right{margin-left:.3em}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.mCustomScrollbar{-ms-touch-action:pinch-zoom;touch-action:pinch-zoom}.mCustomScrollbar.mCS_no_scrollbar,.mCustomScrollbar.mCS_touch_action{-ms-touch-action:auto;touch-action:auto}.mCustomScrollBox{position:relative;overflow:hidden;height:100%;max-width:100%;outline:0;direction:ltr}.mCSB_container{overflow:hidden;width:auto;height:auto}.mCSB_inside>.mCSB_container{margin-right:30px}.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container{margin-right:0;margin-left:30px}.mCS-dir-rtl>.mCSB_inside>.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{margin-left:0}.mCSB_scrollTools{position:absolute;width:16px;height:auto;left:auto;top:0;right:0;bottom:0;opacity:.75;filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_outside+.mCSB_scrollTools{right:-26px}.mCS-dir-rtl>.mCSB_inside>.mCSB_scrollTools,.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{right:auto;left:0}.mCS-dir-rtl>.mCSB_outside+.mCSB_scrollTools{left:-26px}.mCSB_scrollTools .mCSB_draggerContainer{position:absolute;top:0;left:0;bottom:0;right:0;height:auto}.mCSB_scrollTools a+.mCSB_draggerContainer{margin:20px 0}.mCSB_scrollTools .mCSB_draggerRail{width:2px;height:100%;margin:0 auto;-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px}.mCSB_scrollTools .mCSB_dragger{cursor:pointer;width:100%;height:30px;z-index:1}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{position:relative;width:4px;height:100%;margin:0 auto;-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px;text-align:center}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:12px}.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:8px}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonUp{display:block;position:absolute;height:20px;width:100%;overflow:hidden;margin:0 auto;cursor:pointer}.mCSB_scrollTools .mCSB_buttonDown{bottom:0}.mCSB_horizontal.mCSB_inside>.mCSB_container{margin-right:0;margin-bottom:30px}.mCSB_horizontal.mCSB_outside>.mCSB_container{min-height:100%}.mCSB_horizontal>.mCSB_container.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal{width:auto;height:16px;top:auto;right:0;bottom:0;left:0}.mCustomScrollBox+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:-26px}.mCSB_scrollTools.mCSB_scrollTools_horizontal a+.mCSB_draggerContainer{margin:0 20px}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:2px;margin:7px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger{width:30px;height:100%;left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:4px;margin:6px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:12px;margin:2px auto}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:8px;margin:4px 0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft,.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{display:block;position:absolute;width:20px;height:100%;overflow:hidden;margin:0 auto;cursor:pointer}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft{left:0}.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{right:0}.mCSB_container_wrapper{position:absolute;height:auto;width:auto;overflow:hidden;top:0;left:0;right:0;bottom:0;margin-right:30px;margin-bottom:30px}.mCSB_container_wrapper>.mCSB_container{padding-right:30px;padding-bottom:30px;box-sizing:border-box}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:20px}.mCSB_vertical_horizontal>.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:20px}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden+.mCSB_scrollTools.mCSB_scrollTools_vertical{bottom:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{right:0}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:20px}.mCS-dir-rtl>.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden+.mCSB_scrollTools~.mCSB_scrollTools.mCSB_scrollTools_horizontal{left:0}.mCS-dir-rtl>.mCSB_inside>.mCSB_container_wrapper{margin-right:0;margin-left:30px}.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden>.mCSB_container{padding-right:0}.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden>.mCSB_container{padding-bottom:0}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden{margin-right:0;margin-left:0}.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside>.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden{margin-bottom:0}.mCSB_scrollTools,.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp,.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{-webkit-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;-moz-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;-o-transition:opacity .2s ease-in-out,background-color .2s ease-in-out;transition:opacity .2s ease-in-out,background-color .2s ease-in-out}.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail,.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar{-webkit-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;-moz-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;-o-transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out;transition:width .2s ease-out .2s,height .2s ease-out .2s,margin-left .2s ease-out .2s,margin-right .2s ease-out .2s,margin-top .2s ease-out .2s,margin-bottom .2s ease-out .2s,opacity .2s ease-in-out,background-color .2s ease-in-out}.ne-pdf,.ne-pdf-view button,.ne-video{-webkit-transition:all .5s linear;-moz-transition:all .5s linear;-ms-transition:all .5s linear}.ne-image,.ne-pdf,.ne-pdf-view button,.ne-video{-kthtml-transition:all .5s linear}.mCS-autoHide>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide>.mCustomScrollBox~.mCSB_scrollTools{opacity:0;filter:"alpha(opacity=0)";-ms-filter:"alpha(opacity=0)"}.mCS-autoHide:hover>.mCustomScrollBox>.mCSB_scrollTools,.mCS-autoHide:hover>.mCustomScrollBox~.mCSB_scrollTools,.mCustomScrollBox:hover>.mCSB_scrollTools,.mCustomScrollBox:hover~.mCSB_scrollTools,.mCustomScrollbar>.mCustomScrollBox>.mCSB_scrollTools.mCSB_scrollTools_onDrag,.mCustomScrollbar>.mCustomScrollBox~.mCSB_scrollTools.mCSB_scrollTools_onDrag{opacity:1;filter:"alpha(opacity=100)";-ms-filter:"alpha(opacity=100)"}.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.4);filter:"alpha(opacity=40)";-ms-filter:"alpha(opacity=40)"}.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75);filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85);filter:"alpha(opacity=85)";-ms-filter:"alpha(opacity=85)"}.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9);filter:"alpha(opacity=90)";-ms-filter:"alpha(opacity=90)"}.mCSB_scrollTools .mCSB_buttonDown,.mCSB_scrollTools .mCSB_buttonLeft,.mCSB_scrollTools .mCSB_buttonRight,.mCSB_scrollTools .mCSB_buttonUp{background-image:url(../../assets/images/mCSB_buttons.png);background-repeat:no-repeat;opacity:.4;filter:"alpha(opacity=40)";-ms-filter:"alpha(opacity=40)"}.mCSB_scrollTools .mCSB_buttonUp{background-position:0 0}.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -20px}.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -40px}.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -56px}.mCSB_scrollTools .mCSB_buttonDown:hover,.mCSB_scrollTools .mCSB_buttonLeft:hover,.mCSB_scrollTools .mCSB_buttonRight:hover,.mCSB_scrollTools .mCSB_buttonUp:hover{opacity:.75;filter:"alpha(opacity=75)";-ms-filter:"alpha(opacity=75)"}.mCSB_scrollTools .mCSB_buttonDown:active,.mCSB_scrollTools .mCSB_buttonLeft:active,.mCSB_scrollTools .mCSB_buttonRight:active,.mCSB_scrollTools .mCSB_buttonUp:active{opacity:.9;filter:"alpha(opacity=90)";-ms-filter:"alpha(opacity=90)"}.mCS-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:rgba(0,0,0,.85)}.mCS-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:rgba(0,0,0,.9)}.mCS-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools .mCSB_draggerRail{width:4px;background-color:#fff;background-color:rgba(255,255,255,.1);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:4px;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px auto}.mCS-light-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px 0}.mCS-light-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -20px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -40px}.mCS-light-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -56px}.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75);-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px 0}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -20px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -40px}.mCS-dark-2.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools .mCSB_draggerRail{width:4px;background-color:#fff;background-color:rgba(255,255,255,.1);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;background-color:#fff;background-color:rgba(255,255,255,.75);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:4px;margin:6px 0}.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:6px;margin:5px auto}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-light-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px 0}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -20px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -40px}.mCS-light-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -56px}.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75);-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px 0}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -20px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -40px}.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -56px}.mCS-light-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.1)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:2px}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%}.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:2px;margin:7px auto}.mCS-dark-thin.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px 0}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -20px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -40px}.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -56px}.mCS-rounded.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger,.mCS-rounded.mCSB_scrollTools .mCSB_dragger{height:14px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:14px;margin:0 1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger{width:14px}.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:14px;margin:1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{width:16px;height:16px;margin:-1px 0}.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:4px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{height:16px;width:16px;margin:0 -1px}.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:4px;margin:6px 0}.mCS-rounded.mCSB_scrollTools .mCSB_buttonUp{background-position:0 -72px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonDown{background-position:0 -92px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonLeft{background-position:0 -112px}.mCS-rounded.mCSB_scrollTools .mCSB_buttonRight{background-position:0 -128px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.15)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-80px -72px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-80px -92px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-80px -112px}.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-80px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools_vertical .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_vertical .mCSB_draggerRail{width:4px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{background-color:transparent;background-position:center}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAANElEQVQYV2NkIAAYiVbw//9/Y6DiM1ANJoyMjGdBbLgJQAX/kU0DKgDLkaQAvxW4HEvQFwCRcxIJK1XznAAAAABJRU5ErkJggg==);background-repeat:repeat-y;opacity:.3;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail{height:4px;margin:6px 0;background-repeat:repeat-x}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonUp{background-position:-16px -72px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonDown{background-position:-16px -92px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonLeft{background-position:-20px -112px}.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonRight{background-position:-20px -128px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYV2NkIAAYSVFgDFR8BqrBBEifBbGRTfiPZhpYjiQFBK3A6l6CvgAAE9kGCd1mvgEAAAAASUVORK5CYII=)}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-96px -72px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-96px -92px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-100px -112px}.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-100px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-repeat:repeat-y;background-image:-moz-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,.5)),color-stop(100%,rgba(255,255,255,0)));background-image:-webkit-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-o-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-ms-linear-gradient(left,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:linear-gradient(to right,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{background-repeat:repeat-x;background-image:-moz-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(255,255,255,.5)),color-stop(100%,rgba(255,255,255,0)));background-image:-webkit-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-o-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:-ms-linear-gradient(top,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%);background-image:linear-gradient(to bottom,rgba(255,255,255,.5) 0,rgba(255,255,255,0) 100%)}.mCS-3d-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-3d.mCSB_scrollTools_vertical .mCSB_dragger{height:70px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger{width:70px}.mCS-3d-dark.mCSB_scrollTools,.mCS-3d.mCSB_scrollTools{opacity:1;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools .mCSB_draggerRail{width:8px;background-color:#000;background-color:rgba(0,0,0,.2);box-shadow:inset 1px 0 1px rgba(0,0,0,.5),inset -1px 0 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:8px}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:8px;margin:4px 0;box-shadow:inset 0 1px 1px rgba(0,0,0,.5),inset 0 -1px 1px rgba(255,255,255,.2)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{width:100%;height:8px;margin:4px auto}.mCS-3d.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1);box-shadow:inset 1px 0 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{box-shadow:inset 0 1px 1px rgba(0,0,0,.1)}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools{opacity:1;filter:"alpha(opacity=30)";-ms-filter:"alpha(opacity=30)"}.mCS-3d-thick-dark.mCSB_scrollTools,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer,.mCS-3d-thick.mCSB_scrollTools,.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.mCSB_inside+.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCSB_inside+.mCS-3d-thick.mCSB_scrollTools_vertical{right:1px}.mCS-3d-thick-dark.mCSB_scrollTools_vertical,.mCS-3d-thick.mCSB_scrollTools_vertical{box-shadow:inset 1px 0 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal,.mCS-3d-thick.mCSB_scrollTools_horizontal{bottom:1px;box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.5)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;box-shadow:inset 1px 0 0 rgba(255,255,255,.4);width:12px;margin:2px;position:absolute;height:auto;top:0;bottom:0;left:0;right:0}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,.4);height:12px;width:auto}.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#555}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{background-color:#000;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-3d-thick-dark.mCSB_scrollTools{box-shadow:inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal{box-shadow:inset 0 1px 1px rgba(0,0,0,.1),inset 0 0 14px rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 1px 0 0 rgba(255,255,255,.4),inset -1px 0 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{box-shadow:inset 0 1px 0 rgba(255,255,255,.4),inset 0 -1px 0 rgba(0,0,0,.2)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#777}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer{background-color:#fff;background-color:rgba(0,0,0,.05);box-shadow:inset 1px 1px 16px rgba(0,0,0,.1)}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-minimal-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-minimal.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{right:0;margin:12px 0}.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools+.mCSB_scrollTools.mCSB_scrollTools_horizontal,.mCustomScrollBox.mCS-minimal-dark+.mCSB_scrollTools.mCSB_scrollTools_horizontal{bottom:0;margin:0 12px}.mCS-dir-rtl>.mCSB_outside+.mCS-minimal-dark.mCSB_scrollTools_vertical,.mCS-dir-rtl>.mCSB_outside+.mCS-minimal.mCSB_scrollTools_vertical{left:0;right:auto}.mCS-minimal-dark.mCSB_scrollTools_vertical .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_vertical .mCSB_dragger{height:50px}.mCS-minimal-dark.mCSB_scrollTools_horizontal .mCSB_dragger,.mCS-minimal.mCSB_scrollTools_horizontal .mCSB_dragger{width:50px}.mCS-minimal.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.2);filter:"alpha(opacity=20)";-ms-filter:"alpha(opacity=20)"}.mCS-minimal.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.5);filter:"alpha(opacity=50)";-ms-filter:"alpha(opacity=50)"}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.2);filter:"alpha(opacity=20)";-ms-filter:"alpha(opacity=20)"}.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.5);filter:"alpha(opacity=50)";-ms-filter:"alpha(opacity=50)"}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools .mCSB_draggerRail{width:6px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px}.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:6px;margin:5px 0}.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{width:12px}.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded+.mCSB_draggerRail,.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{height:12px;margin:2px 0}.mCS-light-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-light-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-dark-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-dark-3.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools .mCSB_draggerRail{width:12px;background-color:#000;background-color:rgba(0,0,0,.2)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{width:6px;margin:3px 5px;position:absolute;height:auto;top:0;bottom:0;left:0;right:0}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{height:6px;margin:5px 3px;position:absolute;width:auto;top:0;bottom:0;left:0;right:0}.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail,.mCS-inset.mCSB_scrollTools_horizontal .mCSB_draggerRail{width:100%;height:12px;margin:2px 0}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset.mCSB_scrollTools .mCSB_buttonUp{background-position:-32px -72px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset.mCSB_scrollTools .mCSB_buttonDown{background-position:-32px -92px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset.mCSB_scrollTools .mCSB_buttonLeft{background-position:-40px -112px}.mCS-inset-2.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset.mCSB_scrollTools .mCSB_buttonRight{background-position:-40px -128px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.1)}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonUp,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonUp{background-position:-112px -72px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonDown,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonDown{background-position:-112px -92px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonLeft,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonLeft{background-position:-120px -112px}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonRight,.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonRight{background-position:-120px -128px}.ne-image-wrapper,.ne-video-player{background-image:url(../assets/images/loader.svg);background-position:center}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail,.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail{background-color:transparent;border-width:1px;border-style:solid;border-color:#fff;border-color:rgba(255,255,255,.2);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail{border-color:#000;border-color:rgba(0,0,0,.2)}.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail{background-color:#fff;background-color:rgba(255,255,255,.6)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{background-color:#000;background-color:rgba(0,0,0,.6)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.75)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.85)}.mCS-inset-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#000;background-color:rgba(0,0,0,.9)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.75)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.85)}.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar,.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar{background-color:#fff;background-color:rgba(255,255,255,.9)}@font-face{font-family:simple-line-icons;src:url(../assets/fonts/Simple-Line-Icons.eot?v=2.2.2);src:url(../assets/fonts/Simple-Line-Icons.eot?#iefix&v=2.2.2) format('embedded-opentype'),url(../assets/fonts/Simple-Line-Icons.ttf?v=2.2.2) format('truetype'),url(../assets/fonts/Simple-Line-Icons.woff2?v=2.2.2) format('woff2'),url(../assets/fonts/Simple-Line-Icons.woff?v=2.2.2) format('woff'),url(../assets/fonts/Simple-Line-Icons.svg?v=2.2.2#simple-line-icons) format('svg');font-weight:400;font-style:normal}.icon-action-redo,.icon-action-undo,.icon-anchor,.icon-arrow-down,.icon-arrow-down-circle,.icon-arrow-left,.icon-arrow-left-circle,.icon-arrow-right,.icon-arrow-right-circle,.icon-arrow-up,.icon-arrow-up-circle,.icon-badge,.icon-bag,.icon-ban,.icon-basket,.icon-basket-loaded,.icon-bell,.icon-book-open,.icon-briefcase,.icon-bubble,.icon-bubbles,.icon-bulb,.icon-calculator,.icon-calendar,.icon-call-end,.icon-call-in,.icon-call-out,.icon-camera,.icon-camrecorder,.icon-chart,.icon-check,.icon-chemistry,.icon-clock,.icon-close,.icon-cloud-download,.icon-cloud-upload,.icon-compass,.icon-control-end,.icon-control-forward,.icon-control-pause,.icon-control-play,.icon-control-rewind,.icon-control-start,.icon-credit-card,.icon-crop,.icon-cup,.icon-cursor,.icon-cursor-move,.icon-diamond,.icon-direction,.icon-directions,.icon-disc,.icon-dislike,.icon-doc,.icon-docs,.icon-drawar,.icon-drop,.icon-earphones,.icon-earphones-alt,.icon-emotsmile,.icon-energy,.icon-envelope,.icon-envelope-letter,.icon-envelope-open,.icon-equalizer,.icon-eye,.icon-eyeglass,.icon-feed,.icon-film,.icon-fire,.icon-flag,.icon-folder,.icon-folder-alt,.icon-frame,.icon-game-controller,.icon-ghost,.icon-globe,.icon-globe-alt,.icon-graduation,.icon-graph,.icon-grid,.icon-handbag,.icon-heart,.icon-home,.icon-hourglass,.icon-info,.icon-key,.icon-layers,.icon-like,.icon-link,.icon-list,.icon-location-pin,.icon-lock,.icon-lock-open,.icon-login,.icon-logout,.icon-loop,.icon-magic-wand,.icon-magnet,.icon-magnifier,.icon-magnifier-add,.icon-magnifier-remove,.icon-map,.icon-menu,.icon-microphone,.icon-mouse,.icon-music-tone,.icon-music-tone-alt,.icon-mustache,.icon-note,.icon-notebook,.icon-options,.icon-options-vertical,.icon-paper-clip,.icon-paper-plane,.icon-paypal,.icon-pencil,.icon-people,.icon-phone,.icon-picture,.icon-pie-chart,.icon-pin,.icon-plane,.icon-playlist,.icon-plus,.icon-power,.icon-present,.icon-printer,.icon-puzzle,.icon-question,.icon-refresh,.icon-reload,.icon-rocket,.icon-screen-desktop,.icon-screen-smartphone,.icon-screen-tablet,.icon-settings,.icon-share,.icon-share-alt,.icon-shield,.icon-shuffle,.icon-size-actual,.icon-size-fullscreen,.icon-social-behance,.icon-social-dribbble,.icon-social-dropbox,.icon-social-facebook,.icon-social-foursqare,.icon-social-github,.icon-social-gplus,.icon-social-instagram,.icon-social-linkedin,.icon-social-pinterest,.icon-social-reddit,.icon-social-skype,.icon-social-soundcloud,.icon-social-spotify,.icon-social-stumbleupon,.icon-social-tumblr,.icon-social-twitter,.icon-social-youtube,.icon-speech,.icon-speedometer,.icon-star,.icon-support,.icon-symble-female,.icon-symbol-male,.icon-tag,.icon-target,.icon-trash,.icon-trophy,.icon-umbrella,.icon-user,.icon-user-female,.icon-user-follow,.icon-user-following,.icon-user-unfollow,.icon-vector,.icon-volume-1,.icon-volume-2,.icon-volume-off,.icon-wallet,.icon-wrench{font-family:simple-line-icons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-user:before{content:"\e005"}.icon-people:before{content:"\e001"}.icon-user-female:before{content:"\e000"}.icon-user-follow:before{content:"\e002"}.icon-user-following:before{content:"\e003"}.icon-user-unfollow:before{content:"\e004"}.icon-login:before{content:"\e066"}.icon-logout:before{content:"\e065"}.icon-emotsmile:before{content:"\e021"}.icon-phone:before{content:"\e600"}.icon-call-end:before{content:"\e048"}.icon-call-in:before{content:"\e047"}.icon-call-out:before{content:"\e046"}.icon-map:before{content:"\e033"}.icon-location-pin:before{content:"\e096"}.icon-direction:before{content:"\e042"}.icon-directions:before{content:"\e041"}.icon-compass:before{content:"\e045"}.icon-layers:before{content:"\e034"}.icon-menu:before{content:"\e601"}.icon-list:before{content:"\e067"}.icon-options-vertical:before{content:"\e602"}.icon-options:before{content:"\e603"}.icon-arrow-down:before{content:"\e604"}.icon-arrow-left:before{content:"\e605"}.icon-arrow-right:before{content:"\e606"}.icon-arrow-up:before{content:"\e607"}.icon-arrow-up-circle:before{content:"\e078"}.icon-arrow-left-circle:before{content:"\e07a"}.icon-arrow-right-circle:before{content:"\e079"}.icon-arrow-down-circle:before{content:"\e07b"}.icon-check:before{content:"\e080"}.icon-clock:before{content:"\e081"}.icon-plus:before{content:"\e095"}.icon-close:before{content:"\e082"}.icon-trophy:before{content:"\e006"}.icon-screen-smartphone:before{content:"\e010"}.icon-screen-desktop:before{content:"\e011"}.icon-plane:before{content:"\e012"}.icon-notebook:before{content:"\e013"}.icon-mustache:before{content:"\e014"}.icon-mouse:before{content:"\e015"}.icon-magnet:before{content:"\e016"}.icon-energy:before{content:"\e020"}.icon-disc:before{content:"\e022"}.icon-cursor:before{content:"\e06e"}.icon-cursor-move:before{content:"\e023"}.icon-crop:before{content:"\e024"}.icon-chemistry:before{content:"\e026"}.icon-speedometer:before{content:"\e007"}.icon-shield:before{content:"\e00e"}.icon-screen-tablet:before{content:"\e00f"}.icon-magic-wand:before{content:"\e017"}.icon-hourglass:before{content:"\e018"}.icon-graduation:before{content:"\e019"}.icon-ghost:before{content:"\e01a"}.icon-game-controller:before{content:"\e01b"}.icon-fire:before{content:"\e01c"}.icon-eyeglass:before{content:"\e01d"}.icon-envelope-open:before{content:"\e01e"}.icon-envelope-letter:before{content:"\e01f"}.icon-bell:before{content:"\e027"}.icon-badge:before{content:"\e028"}.icon-anchor:before{content:"\e029"}.icon-wallet:before{content:"\e02a"}.icon-vector:before{content:"\e02b"}.icon-speech:before{content:"\e02c"}.icon-puzzle:before{content:"\e02d"}.icon-printer:before{content:"\e02e"}.icon-present:before{content:"\e02f"}.icon-playlist:before{content:"\e030"}.icon-pin:before{content:"\e031"}.icon-picture:before{content:"\e032"}.icon-handbag:before{content:"\e035"}.icon-globe-alt:before{content:"\e036"}.icon-globe:before{content:"\e037"}.icon-folder-alt:before{content:"\e039"}.icon-folder:before{content:"\e089"}.icon-film:before{content:"\e03a"}.icon-feed:before{content:"\e03b"}.icon-drop:before{content:"\e03e"}.icon-drawar:before{content:"\e03f"}.icon-docs:before{content:"\e040"}.icon-doc:before{content:"\e085"}.icon-diamond:before{content:"\e043"}.icon-cup:before{content:"\e044"}.icon-calculator:before{content:"\e049"}.icon-bubbles:before{content:"\e04a"}.icon-briefcase:before{content:"\e04b"}.icon-book-open:before{content:"\e04c"}.icon-basket-loaded:before{content:"\e04d"}.icon-basket:before{content:"\e04e"}.icon-bag:before{content:"\e04f"}.icon-action-undo:before{content:"\e050"}.icon-action-redo:before{content:"\e051"}.icon-wrench:before{content:"\e052"}.icon-umbrella:before{content:"\e053"}.icon-trash:before{content:"\e054"}.icon-tag:before{content:"\e055"}.icon-support:before{content:"\e056"}.icon-frame:before{content:"\e038"}.icon-size-fullscreen:before{content:"\e057"}.icon-size-actual:before{content:"\e058"}.icon-shuffle:before{content:"\e059"}.icon-share-alt:before{content:"\e05a"}.icon-share:before{content:"\e05b"}.icon-rocket:before{content:"\e05c"}.icon-question:before{content:"\e05d"}.icon-pie-chart:before{content:"\e05e"}.icon-pencil:before{content:"\e05f"}.icon-note:before{content:"\e060"}.icon-loop:before{content:"\e064"}.icon-home:before{content:"\e069"}.icon-grid:before{content:"\e06a"}.icon-graph:before{content:"\e06b"}.icon-microphone:before{content:"\e063"}.icon-music-tone-alt:before{content:"\e061"}.icon-music-tone:before{content:"\e062"}.icon-earphones-alt:before{content:"\e03c"}.icon-earphones:before{content:"\e03d"}.icon-equalizer:before{content:"\e06c"}.icon-like:before{content:"\e068"}.icon-dislike:before{content:"\e06d"}.icon-control-start:before{content:"\e06f"}.icon-control-rewind:before{content:"\e070"}.icon-control-play:before{content:"\e071"}.icon-control-pause:before{content:"\e072"}.icon-control-forward:before{content:"\e073"}.icon-control-end:before{content:"\e074"}.icon-volume-1:before{content:"\e09f"}.icon-volume-2:before{content:"\e0a0"}.icon-volume-off:before{content:"\e0a1"}.icon-calendar:before{content:"\e075"}.icon-bulb:before{content:"\e076"}.icon-chart:before{content:"\e077"}.icon-ban:before{content:"\e07c"}.icon-bubble:before{content:"\e07d"}.icon-camrecorder:before{content:"\e07e"}.icon-camera:before{content:"\e07f"}.icon-cloud-download:before{content:"\e083"}.icon-cloud-upload:before{content:"\e084"}.icon-envelope:before{content:"\e086"}.icon-eye:before{content:"\e087"}.icon-flag:before{content:"\e088"}.icon-heart:before{content:"\e08a"}.icon-info:before{content:"\e08b"}.icon-key:before{content:"\e08c"}.icon-link:before{content:"\e08d"}.icon-lock:before{content:"\e08e"}.icon-lock-open:before{content:"\e08f"}.icon-magnifier:before{content:"\e090"}.icon-magnifier-add:before{content:"\e091"}.icon-magnifier-remove:before{content:"\e092"}.icon-paper-clip:before{content:"\e093"}.icon-paper-plane:before{content:"\e094"}.icon-power:before{content:"\e097"}.icon-refresh:before{content:"\e098"}.icon-reload:before{content:"\e099"}.icon-settings:before{content:"\e09a"}.icon-star:before{content:"\e09b"}.icon-symble-female:before{content:"\e09c"}.icon-symbol-male:before{content:"\e09d"}.icon-target:before{content:"\e09e"}.icon-credit-card:before{content:"\e025"}.icon-paypal:before{content:"\e608"}.icon-social-tumblr:before{content:"\e00a"}.icon-social-twitter:before{content:"\e009"}.icon-social-facebook:before{content:"\e00b"}.icon-social-instagram:before{content:"\e609"}.icon-social-linkedin:before{content:"\e60a"}.icon-social-pinterest:before{content:"\e60b"}.icon-social-github:before{content:"\e60c"}.icon-social-gplus:before{content:"\e60d"}.icon-social-reddit:before{content:"\e60e"}.icon-social-skype:before{content:"\e60f"}.icon-social-dribbble:before{content:"\e00d"}.icon-social-behance:before{content:"\e610"}.icon-social-foursqare:before{content:"\e611"}.icon-social-soundcloud:before{content:"\e612"}.icon-social-spotify:before{content:"\e613"}.icon-social-stumbleupon:before{content:"\e614"}.icon-social-youtube:before{content:"\e008"}.icon-social-dropbox:before{content:"\e00c"}.ta-hidden-input{width:1px;height:1px;border:none;margin:0;padding:0;position:absolute;top:-10000px;left:-10000px;opacity:0;overflow:hidden}.ta-root.focussed>.ta-scroll-window.form-control{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.ta-editor.ta-html,.ta-scroll-window.form-control{min-height:300px;height:auto;overflow:auto;font-family:inherit;font-size:100%}.ta-scroll-window.form-control{position:relative;padding:0}.ta-scroll-window>.ta-bind{height:auto;min-height:300px;padding:6px 12px}.ta-editor:focus{user-select:text}.ta-resizer-handle-overlay{z-index:100;position:absolute;display:none}.ta-resizer-handle-overlay>.ta-resizer-handle-info{position:absolute;bottom:16px;right:16px;border:1px solid #000;background-color:#FFF;padding:0 4px;opacity:.7}.ta-resizer-handle-overlay>.ta-resizer-handle-background{position:absolute;bottom:5px;right:5px;left:5px;top:5px;border:1px solid #000;background-color:rgba(0,0,0,.2)}.ta-resizer-handle-overlay>.ta-resizer-handle-corner{width:10px;height:10px;position:absolute}.ta-resizer-handle-overlay>.ta-resizer-handle-corner-tl{top:0;left:0;border-left:1px solid #000;border-top:1px solid #000}.ta-resizer-handle-overlay>.ta-resizer-handle-corner-tr{top:0;right:0;border-right:1px solid #000;border-top:1px solid #000}.ta-resizer-handle-overlay>.ta-resizer-handle-corner-bl{bottom:0;left:0;border-left:1px solid #000;border-bottom:1px solid #000}.ta-resizer-handle-overlay>.ta-resizer-handle-corner-br{bottom:0;right:0;border:1px solid #000;cursor:se-resize;background-color:#fff}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-size:14px;font-weight:400;line-height:1.42857143;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.bottom{margin-top:10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}/*!
+ * ui-select
+ * http://github.com/angular-ui/ui-select
+ * Version: 0.13.2 - 2015-10-09T15:34:24.045Z
+ * License: MIT
+ */.ui-select-highlight{font-weight:700}.ui-select-offscreen{clip:rect(0 0 0 0)!important;width:1px!important;height:1px!important;border:0!important;margin:0!important;padding:0!important;overflow:hidden!important;position:absolute!important;outline:0!important;left:0!important;top:0!important}.ui-select-choices-row:hover{background-color:#f5f5f5}.ng-dirty.ng-invalid>a.select2-choice{border-color:#D44950}.select2-result-single{padding-left:0}.select-locked>.ui-select-match-close,.select2-locked>.select2-search-choice-close{display:none}body>.select2-container.open{z-index:9999}.ui-select-container[theme=select2].direction-up .ui-select-match{border-radius:0 0 4px 4px}.ui-select-container[theme=select2].direction-up .ui-select-dropdown{border-radius:4px 4px 0 0;border-top-width:1px;border-top-style:solid;box-shadow:0 -4px 8px rgba(0,0,0,.25);margin-top:-4px}.ui-select-container[theme=select2].direction-up .ui-select-dropdown .select2-search{margin-top:4px}.ui-select-container[theme=select2].direction-up.select2-dropdown-open .ui-select-match{border-bottom-color:#5897fb}.selectize-input.selectize-focus{border-color:#007FBB!important}.selectize-control>.selectize-dropdown,.selectize-control>.selectize-input>input{width:100%}.ng-dirty.ng-invalid>div.selectize-input{border-color:#D44950}.ui-select-container[theme=selectize].direction-up .ui-select-dropdown{box-shadow:0 -4px 8px rgba(0,0,0,.25);margin-top:-2px}.btn-default-focus{color:#333;background-color:#EBEBEB;border-color:#ADADAD;text-decoration:none;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.ui-select-bootstrap .ui-select-toggle{position:relative}.ui-select-bootstrap .ui-select-toggle>.caret{position:absolute;height:10px;top:50%;right:10px;margin-top:-2px}.input-group>.ui-select-bootstrap.dropdown{position:static}.input-group>.ui-select-bootstrap>input.ui-select-search.form-control{border-radius:4px 0 0 4px}.input-group>.ui-select-bootstrap>input.ui-select-search.form-control.direction-up{border-radius:4px 0 0 4px!important}.ui-select-bootstrap>.ui-select-match>.btn{text-align:left!important}.ui-select-bootstrap>.ui-select-match>.caret{position:absolute;top:45%;right:15px}.ui-select-bootstrap>.ui-select-choices{width:100%;height:auto;max-height:200px;overflow-x:hidden;margin-top:-1px}body>.ui-select-bootstrap.open{z-index:1000}.ui-select-multiple.ui-select-bootstrap{height:auto;padding:3px 3px 0}.ui-select-multiple.ui-select-bootstrap input.ui-select-search{background-color:transparent!important;border:none;outline:0;height:1.666666em;margin-bottom:3px}.ui-select-multiple.ui-select-bootstrap .ui-select-match .close{font-size:1.6em;line-height:.75}.ui-select-multiple.ui-select-bootstrap .ui-select-match-item{outline:0;margin:0 3px 3px 0}.ui-select-multiple .ui-select-match-item{position:relative}.ui-select-multiple .ui-select-match-item.dropping-before:before{content:"";position:absolute;top:0;right:100%;height:100%;margin-right:2px;border-left:1px solid #428bca}.ui-select-multiple .ui-select-match-item.dropping-after:after{content:"";position:absolute;top:0;left:100%;height:100%;margin-left:2px;border-right:1px solid #428bca}.ui-select-bootstrap .ui-select-choices-row>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.pre-numbering,code.has-numbering{font-family:Consolas,Menlo,Monaco,monospace;font-size:14px;line-height:20px}.ui-select-bootstrap .ui-select-choices-row>a:focus,.ui-select-bootstrap .ui-select-choices-row>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.ui-select-bootstrap .ui-select-choices-row.active>a{color:#fff;text-decoration:none;outline:0;background-color:#428bca}.ui-select-bootstrap .ui-select-choices-row.active.disabled>a,.ui-select-bootstrap .ui-select-choices-row.disabled>a{color:#777;cursor:not-allowed;background-color:#fff}.ui-select-match.ng-hide-add,.ui-select-search.ng-hide-add{display:none!important}.ui-select-bootstrap.ng-dirty.ng-invalid>button.btn.ui-select-match{border-color:#D44950}.ui-select-container[theme=bootstrap].direction-up .ui-select-dropdown{box-shadow:0 -4px 8px rgba(0,0,0,.25)}*{box-sizing:border-box}@font-face{font-family:emoticons;src:url(../assets/fonts/emoticons.eot?5zh0vu);src:url(../assets/fonts/emoticons.eot?#iefix5zh0vu) format('embedded-opentype'),url(../assets/fonts/emoticons.woff?5zh0vu) format('woff'),url(../assets/fonts/emoticons.ttf?5zh0vu) format('truetype'),url(../assets/fonts/emoticons.svg?5zh0vu#icomoon) format('svg');font-weight:400;font-style:normal}.ne-code{display:none;font-size:14px;font-family:Consolas,Menlo,Monaco,monospace;padding:1.5em}pre{position:relative;margin-bottom:24px;border-radius:2px;overflow:hidden}code.has-numbering{display:block;padding:12px 30px;overflow-y:auto;font-weight:300;margin-left:36px}.pre-numbering{position:absolute;top:0;left:0;width:35px;padding:1.1em 5px 12px 0;border-right:1px solid #e8e8e8;border-radius:3px 0 0 3px;background-color:#EEE;text-align:right;color:#AAA;margin-top:-4px}.ne-pdf iframe{width:420px;height:530px;display:block}.ne-pdf-icon{width:200px;height:150px;float:left;border-right:1px solid #eee}.ne-audio audio,.ne-video video{width:100%}.ne-pdf-icon i{margin:29px 62px;color:#999;font-size:84px}.ne-pdf-view button{font-family:inherit;font-size:14px;background-color:transparent;border:1px solid #ccc;padding:6px 15px;border-radius:2px;color:#333;cursor:pointer;box-shadow:0 1px 1px 0 rgba(0,0,0,.26);outline:0;border-bottom:0;float:right;margin:80px 10px 0;-o-transition:all .5s linear;transition:all .5s linear}.ne-pdf-view button:hover{box-shadow:0 2px 2px 0 rgba(0,0,0,.26)}.ne-pdf-view button i{margin-right:6px}.ne-pdf-view button a{color:#333}.ne-pdf-viewer iframe{margin:0 auto}.ne-pdf-viewer{background-color:#3498DB;position:relative}.ne-pdf-viewer i{position:absolute;right:10px;top:8px;color:#fff;font-size:25px;cursor:pointer}.ne-audio{background-color:#1D1D1D;border-radius:2px;padding-top:6px}.ne-pdf,.ne-video{padding:5px;border:1px solid #e4e4e4;border-radius:2px;margin:20px 0;box-shadow:0 1px 1px 0 rgba(0,0,0,.26);border-bottom:0;overflow:auto;-o-transition:all .5s linear;transition:all .5s linear}.ne-image:hover,.ne-video:hover{box-shadow:0 2px 2px 0 rgba(0,0,0,.26)}.ne-pdf-preview,.ne-video-preview{overflow:auto}.ne-video-preview img{display:block;width:200px;height:150px;border-radius:2px;background-color:#3498DB}.ne-video-thumb{width:200px;float:left;cursor:pointer;color:rgba(255,255,255,.6)}.ne-video-thumb:hover{color:#fff}.ne-video-thumb i{position:absolute;font-size:42px;margin-top:-95px;margin-left:80px;cursor:pointer}.ne-pdf-detail,.ne-video-detail{width:calc(100% - 200px);float:left;padding-left:15px}.emoticons-image,.emoticons-image-wrapper,.ne-image,.ne-video-player iframe{width:100%}.ne-pdf-title,.ne-video-title{font-weight:bolder;padding:5px 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ne-video-desc{font-size:16px;color:#666;height:90px}.ne-stats{padding-top:7px;overflow:auto}.ne-video-stats span{padding:0 15px;float:right}.ne-video-stats span i{margin-right:10px}.ne-image{border-radius:2px;border:1px solid #e4e4e4;min-height:250px;max-height:250px;overflow:hidden;cursor:pointer;padding-bottom:5px;-webkit-transition:all .5s linear;-o-transition:all .5s linear;-moz-transition:all .5s linear;-ms-transition:all .5s linear;transition:all .5s linear;box-shadow:0 1px 1px 0 rgba(0,0,0,.26);border-bottom:5px solid #fff;margin:10px 0}.ne-image-long{max-height:800px}.ne-image img,.ne-image-long img{width:100%;display:block;min-height:250px}.ne-image-wrapper{margin:5px 5px 0;height:100%;overflow:hidden}.emoticons-image{padding:5px;border-radius:2px;border:1px solid #F2F2F2;display:block;margin:20px 0}.emoticon,.icon-emoticon{display:inline-block;vertical-align:middle}.icon-emoticon{font-family:emoticons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased}.emoticon{text-indent:-9999px;height:22px;width:22px}@media all and (-webkit-min-device-pixel-ratio :1),all and (min--moz-device-pixel-ratio :1),all and (-o-min-device-pixel-ratio :1),all and (min-device-pixel-ratio :1),all and (min-resolution :96dpi){.emoticon{background:url(../assets/images/emojis.png) no-repeat}}@media all and (-webkit-min-device-pixel-ratio :1.5),all and (-o-min-device-pixel-ratio :3/2),all and (min-device-pixel-ratio :1.5),all and (min-resolution :144dpi){.emoticon{background:url(../assets/images/[email-masked]) no-repeat;background-size:27776px 22px}}@-moz-document url-prefix(){.emoticon{background:url(../assets/images/emojis.png) no-repeat}}.emoticon-bowtie{background-position:-5px 0}.emoticon-smile{background-position:-37px 0}.emoticon-laughing{background-position:-69px 0}.emoticon-blush{background-position:-101px 0}.emoticon-smiley{background-position:-133px 0}.emoticon-relaxed{background-position:-165px 0}.emoticon-smirk{background-position:-197px 0}.emoticon-heart_eyes{background-position:-229px 0}.emoticon-kissing_heart{background-position:-261px 0}.emoticon-kissing_closed_eyes{background-position:-293px 0}.emoticon-flushed{background-position:-325px 0}.emoticon-relieved{background-position:-357px 0}.emoticon-satisfied{background-position:-389px 0}.emoticon-grin{background-position:-421px 0}.emoticon-wink{background-position:-453px 0}.emoticon-stuck_out_tongue_winking_eye,.emoticon-winky_face{background-position:-485px 0}.emoticon-stuck_out_tongue_closed_eyes{background-position:-517px 0}.emoticon-grinning{background-position:-549px 0}.emoticon-kissing{background-position:-581px 0}.emoticon-kissing_smiling_eyes{background-position:-613px 0}.emoticon-stuck_out_tongue{background-position:-645px 0}.emoticon-sleeping{background-position:-677px 0}.emoticon-worried{background-position:-709px 0}.emoticon-frowning{background-position:-741px 0}.emoticon-anguished{background-position:-773px 0}.emoticon-open_mouth,.emoticon-wow{background-position:-805px 0}.emoticon-grimacing{background-position:-837px 0}.emoticon-confused{background-position:-869px 0}.emoticon-hushed{background-position:-901px 0}.emoticon-expressionless{background-position:-933px 0}.emoticon-unamused{background-position:-965px 0}.emoticon-sweat_smile{background-position:-997px 0}.emoticon-sweat{background-position:-1029px 0}.emoticon-disappointed_relieved{background-position:-1061px 0}.emoticon-weary{background-position:-1093px 0}.emoticon-pensive{background-position:-1125px 0}.emoticon-disappointed{background-position:-1157px 0}.emoticon-confounded{background-position:-1189px 0}.emoticon-fearful{background-position:-1221px 0}.emoticon-cold_sweat{background-position:-1253px 0}.emoticon-persevere{background-position:-1285px 0}.emoticon-cry{background-position:-1317px 0}.emoticon-sob{background-position:-1349px 0}.emoticon-joy{background-position:-1381px 0}.emoticon-astonished{background-position:-1413px 0}.emoticon-scream{background-position:-1445px 0}.emoticon-neckbeard{background-position:-1477px 0}.emoticon-tired_face{background-position:-1509px 0}.emoticon-angry{background-position:-1541px 0}.emoticon-rage{background-position:-1573px 0}.emoticon-triumph{background-position:-1605px 0}.emoticon-sleepy{background-position:-1637px 0}.emoticon-yum{background-position:-1669px 0}.emoticon-mask{background-position:-1701px 0}.emoticon-sunglasses{background-position:-1733px 0}.emoticon-dizzy_face{background-position:-1765px 0}.emoticon-imp{background-position:-1797px 0}.emoticon-smiling_imp{background-position:-1829px 0}.emoticon-neutral_face{background-position:-1861px 0}.emoticon-no_mouth{background-position:-1893px 0}.emoticon-innocent{background-position:-1925px 0}.emoticon-alien{background-position:-1957px 0}.emoticon-yellow_heart{background-position:-1989px 0}.emoticon-blue_heart{background-position:-2021px 0}.emoticon-purple_heart{background-position:-2053px 0}.emoticon-heart{background-position:-2085px 0}.emoticon-green_heart{background-position:-2117px 0}.emoticon-broken_heart{background-position:-2149px 0}.emoticon-heartbeat{background-position:-2181px 0}.emoticon-heartpulse{background-position:-2213px 0}.emoticon-two_hearts{background-position:-2245px 0}.emoticon-revolving_hearts{background-position:-2277px 0}.emoticon-cupid{background-position:-2309px 0}.emoticon-sparkling_heart{background-position:-2341px 0}.emoticon-sparkles{background-position:-2373px 0}.emoticon-star{background-position:-2405px 0}.emoticon-star2{background-position:-2437px 0}.emoticon-dizzy{background-position:-2469px 0}.emoticon-boom{background-position:-2501px 0}.emoticon-collision{background-position:-2533px 0}.emoticon-anger{background-position:-2565px 0}.emoticon-exclamation{background-position:-2597px 0}.emoticon-question{background-position:-2629px 0}.emoticon-grey_exclamation{background-position:-2661px 0}.emoticon-grey_question{background-position:-2693px 0}.emoticon-zzz{background-position:-2725px 0}.emoticon-dash{background-position:-2757px 0}.emoticon-sweat_drops{background-position:-2789px 0}.emoticon-notes{background-position:-2821px 0}.emoticon-musical_note{background-position:-2853px 0}.emoticon-fire{background-position:-2885px 0}.emoticon-hankey{background-position:-2917px 0}.emoticon-poop{background-position:-2949px 0}.emoticon-shit{background-position:-2981px 0}.emoticon-\+1{background-position:-3013px 0}.emoticon-thumbsup{background-position:-3045px 0}.emoticon-\-1{background-position:-3077px 0}.emoticon-thumbsdown{background-position:-3109px 0}.emoticon-ok_hand{background-position:-3141px 0}.emoticon-punch{background-position:-3173px 0}.emoticon-facepunch{background-position:-3205px 0}.emoticon-fist{background-position:-3237px 0}.emoticon-v{background-position:-3269px 0}.emoticon-wave{background-position:-3301px 0}.emoticon-hand{background-position:-3333px 0}.emoticon-raised_hand{background-position:-3365px 0}.emoticon-open_hands{background-position:-3397px 0}.emoticon-point_up{background-position:-3429px 0}.emoticon-point_down{background-position:-3461px 0}.emoticon-point_left{background-position:-3493px 0}.emoticon-point_right{background-position:-3525px 0}.emoticon-raised_hands{background-position:-3557px 0}.emoticon-pray{background-position:-3589px 0}.emoticon-point_up_2{background-position:-3621px 0}.emoticon-clap{background-position:-3653px 0}.emoticon-muscle{background-position:-3685px 0}.emoticon-metal{background-position:-3717px 0}.emoticon-fu{background-position:-3749px 0}.emoticon-walking{background-position:-3781px 0}.emoticon-runner{background-position:-3813px 0}.emoticon-running{background-position:-3845px 0}.emoticon-couple{background-position:-3877px 0}.emoticon-family{background-position:-3909px 0}.emoticon-two_men_holding_hands{background-position:-3941px 0}.emoticon-two_women_holding_hands{background-position:-3973px 0}.emoticon-dancer{background-position:-4005px 0}.emoticon-dancers{background-position:-4037px 0}.emoticon-ok_woman{background-position:-4069px 0}.emoticon-no_good{background-position:-4101px 0}.emoticon-information_desk_person{background-position:-4133px 0}.emoticon-raising_hand{background-position:-4165px 0}.emoticon-bride_with_veil{background-position:-4197px 0}.emoticon-person_with_pouting_face{background-position:-4229px 0}.emoticon-person_frowning{background-position:-4261px 0}.emoticon-bow{background-position:-4293px 0}.emoticon-couplekiss{background-position:-4325px 0}.emoticon-couple_with_heart{background-position:-4357px 0}.emoticon-massage{background-position:-4389px 0}.emoticon-haircut{background-position:-4421px 0}.emoticon-nail_care{background-position:-4453px 0}.emoticon-boy{background-position:-4485px 0}.emoticon-girl{background-position:-4517px 0}.emoticon-woman{background-position:-4549px 0}.emoticon-man{background-position:-4581px 0}.emoticon-baby{background-position:-4613px 0}.emoticon-older_woman{background-position:-4645px 0}.emoticon-older_man{background-position:-4677px 0}.emoticon-person_with_blond_hair{background-position:-4709px 0}.emoticon-man_with_gua_pi_mao{background-position:-4741px 0}.emoticon-man_with_turban{background-position:-4773px 0}.emoticon-construction_worker{background-position:-4805px 0}.emoticon-cop{background-position:-4837px 0}.emoticon-angel{background-position:-4869px 0}.emoticon-princess{background-position:-4901px 0}.emoticon-emoticon_cat{background-position:-4933px 0}.emoticon-smile_cat{background-position:-4965px 0}.emoticon-heart_eyes_cat{background-position:-4997px 0}.emoticon-kissing_cat{background-position:-5029px 0}.emoticon-smirk_cat{background-position:-5061px 0}.emoticon-scream_cat{background-position:-5093px 0}.emoticon-crying_cat_face{background-position:-5125px 0}.emoticon-joy_cat{background-position:-5157px 0}.emoticon-pouting_cat{background-position:-5189px 0}.emoticon-japanese_ogre{background-position:-5221px 0}.emoticon-japanese_goblin{background-position:-5253px 0}.emoticon-see_no_evil{background-position:-5285px 0}.emoticon-hear_no_evil{background-position:-5317px 0}.emoticon-speak_no_evil{background-position:-5349px 0}.emoticon-guardsman{background-position:-5381px 0}.emoticon-skull{background-position:-5413px 0}.emoticon-feet{background-position:-5445px 0}.emoticon-lips{background-position:-5477px 0}.emoticon-kiss{background-position:-5509px 0}.emoticon-droplet{background-position:-5541px 0}.emoticon-ear{background-position:-5573px 0}.emoticon-eyes{background-position:-5605px 0}.emoticon-nose{background-position:-5637px 0}.emoticon-tongue{background-position:-5669px 0}.emoticon-love_letter{background-position:-5701px 0}.emoticon-bust_in_silhouette{background-position:-5733px 0}.emoticon-busts_in_silhouette{background-position:-5765px 0}.emoticon-speech_balloon{background-position:-5797px 0}.emoticon-thought_balloon{background-position:-5829px 0}.emoticon-feelsgood{background-position:-5861px 0}.emoticon-finnadie{background-position:-5893px 0}.emoticon-goberserk{background-position:-5925px 0}.emoticon-godmode{background-position:-5957px 0}.emoticon-hurtrealbad{background-position:-5989px 0}.emoticon-rage1{background-position:-6021px 0}.emoticon-rage2{background-position:-6053px 0}.emoticon-rage3{background-position:-6085px 0}.emoticon-rage4{background-position:-6117px 0}.emoticon-suspect{background-position:-6149px 0}.emoticon-trollface{background-position:-6181px 0}.emoticon-sunny{background-position:-6213px 0}.emoticon-umbrella{background-position:-6245px 0}.emoticon-cloud{background-position:-6277px 0}.emoticon-snowflake{background-position:-6309px 0}.emoticon-snowman{background-position:-6341px 0}.emoticon-zap{background-position:-6373px 0}.emoticon-cyclone{background-position:-6405px 0}.emoticon-foggy{background-position:-6437px 0}.emoticon-ocean{background-position:-6469px 0}.emoticon-cat{background-position:-6501px 0}.emoticon-dog{background-position:-6533px 0}.emoticon-mouse{background-position:-6565px 0}.emoticon-hamster{background-position:-6597px 0}.emoticon-rabbit{background-position:-6629px 0}.emoticon-wolf{background-position:-6661px 0}.emoticon-frog{background-position:-6693px 0}.emoticon-tiger{background-position:-6725px 0}.emoticon-koala{background-position:-6757px 0}.emoticon-bear{background-position:-6789px 0}.emoticon-pig{background-position:-6821px 0}.emoticon-pig_nose{background-position:-6853px 0}.emoticon-cow{background-position:-6885px 0}.emoticon-boar{background-position:-6917px 0}.emoticon-monkey_face{background-position:-6949px 0}.emoticon-monkey{background-position:-6981px 0}.emoticon-horse{background-position:-7013px 0}.emoticon-racehorse{background-position:-7045px 0}.emoticon-camel{background-position:-7077px 0}.emoticon-sheep{background-position:-7109px 0}.emoticon-elephant{background-position:-7141px 0}.emoticon-panda_face{background-position:-7173px 0}.emoticon-snake{background-position:-7205px 0}.emoticon-bird{background-position:-7237px 0}.emoticon-baby_chick{background-position:-7269px 0}.emoticon-hatched_chick{background-position:-7301px 0}.emoticon-hatching_chick{background-position:-7333px 0}.emoticon-chicken{background-position:-7365px 0}.emoticon-penguin{background-position:-7397px 0}.emoticon-turtle{background-position:-7429px 0}.emoticon-bug{background-position:-7461px 0}.emoticon-honeybee{background-position:-7493px 0}.emoticon-ant{background-position:-7525px 0}.emoticon-beetle{background-position:-7557px 0}.emoticon-snail{background-position:-7589px 0}.emoticon-octopus{background-position:-7621px 0}.emoticon-tropical_fish{background-position:-7653px 0}.emoticon-fish{background-position:-7685px 0}.emoticon-whale{background-position:-7717px 0}.emoticon-whale2{background-position:-7749px 0}.emoticon-dolphin{background-position:-7781px 0}.emoticon-cow2{background-position:-7813px 0}.emoticon-ram{background-position:-7845px 0}.emoticon-rat{background-position:-7877px 0}.emoticon-water_buffalo{background-position:-7909px 0}.emoticon-tiger2{background-position:-7941px 0}.emoticon-rabbit2{background-position:-7973px 0}.emoticon-dragon{background-position:-8005px 0}.emoticon-goat{background-position:-8037px 0}.emoticon-rooster{background-position:-8069px 0}.emoticon-dog2{background-position:-8101px 0}.emoticon-pig2{background-position:-8133px 0}.emoticon-mouse2{background-position:-8165px 0}.emoticon-ox{background-position:-8197px 0}.emoticon-dragon_face{background-position:-8229px 0}.emoticon-blowfish{background-position:-8261px 0}.emoticon-crocodile{background-position:-8293px 0}.emoticon-dromedary_camel{background-position:-8325px 0}.emoticon-leopard{background-position:-8357px 0}.emoticon-cat2{background-position:-8389px 0}.emoticon-poodle{background-position:-8421px 0}.emoticon-paw_prints{background-position:-8453px 0}.emoticon-bouquet{background-position:-8485px 0}.emoticon-cherry_blossom{background-position:-8517px 0}.emoticon-tulip{background-position:-8549px 0}.emoticon-four_leaf_clover{background-position:-8581px 0}.emoticon-rose{background-position:-8613px 0}.emoticon-sunflower{background-position:-8645px 0}.emoticon-hibiscus{background-position:-8677px 0}.emoticon-maple_leaf{background-position:-8709px 0}.emoticon-leaves{background-position:-8741px 0}.emoticon-fallen_leaf{background-position:-8773px 0}.emoticon-herb{background-position:-8805px 0}.emoticon-mushroom{background-position:-8837px 0}.emoticon-cactus{background-position:-8869px 0}.emoticon-palm_tree{background-position:-8901px 0}.emoticon-evergreen_tree{background-position:-8933px 0}.emoticon-deciduous_tree{background-position:-8965px 0}.emoticon-chestnut{background-position:-8997px 0}.emoticon-seedling{background-position:-9029px 0}.emoticon-blossom{background-position:-9061px 0}.emoticon-ear_of_rice{background-position:-9093px 0}.emoticon-shell{background-position:-9125px 0}.emoticon-globe_with_meridians{background-position:-9157px 0}.emoticon-sun_with_face{background-position:-9189px 0}.emoticon-full_moon_with_face{background-position:-9221px 0}.emoticon-new_moon_with_face{background-position:-9253px 0}.emoticon-new_moon{background-position:-9285px 0}.emoticon-waxing_crescent_moon{background-position:-9317px 0}.emoticon-first_quarter_moon{background-position:-9349px 0}.emoticon-waxing_gibbous_moon{background-position:-9381px 0}.emoticon-full_moon{background-position:-9413px 0}.emoticon-waning_gibbous_moon{background-position:-9445px 0}.emoticon-last_quarter_moon{background-position:-9477px 0}.emoticon-waning_crescent_moon{background-position:-9509px 0}.emoticon-last_quarter_moon_with_face{background-position:-9541px 0}.emoticon-first_quarter_moon_with_face{background-position:-9573px 0}.emoticon-moon{background-position:-9605px 0}.emoticon-earth_africa{background-position:-9637px 0}.emoticon-earth_americas{background-position:-9669px 0}.emoticon-earth_asia{background-position:-9701px 0}.emoticon-volcano{background-position:-9733px 0}.emoticon-milky_way{background-position:-9765px 0}.emoticon-partly_sunny{background-position:-9797px 0}.emoticon-octocat{background-position:-9829px 0}.emoticon-squirrel{background-position:-9861px 0}.emoticon-bamboo{background-position:-9893px 0}.emoticon-gift_heart{background-position:-9925px 0}.emoticon-dolls{background-position:-9957px 0}.emoticon-school_satchel{background-position:-9989px 0}.emoticon-mortar_board{background-position:-10021px 0}.emoticon-flags{background-position:-10053px 0}.emoticon-fireworks{background-position:-10085px 0}.emoticon-sparkler{background-position:-10117px 0}.emoticon-wind_chime{background-position:-10149px 0}.emoticon-rice_scene{background-position:-10181px 0}.emoticon-jack_o_lantern{background-position:-10213px 0}.emoticon-ghost{background-position:-10245px 0}.emoticon-santa{background-position:-10277px 0}.emoticon-christmas_tree{background-position:-10309px 0}.emoticon-gift{background-position:-10341px 0}.emoticon-bell{background-position:-10373px 0}.emoticon-no_bell{background-position:-10405px 0}.emoticon-tanabata_tree{background-position:-10437px 0}.emoticon-tada{background-position:-10469px 0}.emoticon-confetti_ball{background-position:-10501px 0}.emoticon-balloon{background-position:-10533px 0}.emoticon-crystal_ball{background-position:-10565px 0}.emoticon-cd{background-position:-10597px 0}.emoticon-dvd{background-position:-10629px 0}.emoticon-floppy_disk{background-position:-10661px 0}.emoticon-camera{background-position:-10693px 0}.emoticon-video_camera{background-position:-10725px 0}.emoticon-movie_camera{background-position:-10757px 0}.emoticon-computer{background-position:-10789px 0}.emoticon-tv{background-position:-10821px 0}.emoticon-iphone{background-position:-10853px 0}.emoticon-phone{background-position:-10885px 0}.emoticon-telephone{background-position:-10917px 0}.emoticon-telephone_receiver{background-position:-10949px 0}.emoticon-pager{background-position:-10981px 0}.emoticon-fax{background-position:-11013px 0}.emoticon-minidisc{background-position:-11045px 0}.emoticon-vhs{background-position:-11077px 0}.emoticon-sound{background-position:-11109px 0}.emoticon-speaker{background-position:-11141px 0}.emoticon-mute{background-position:-11173px 0}.emoticon-loudspeaker{background-position:-11205px 0}.emoticon-mega{background-position:-11237px 0}.emoticon-hourglass{background-position:-11269px 0}.emoticon-hourglass_flowing_sand{background-position:-11301px 0}.emoticon-alarm_clock{background-position:-11333px 0}.emoticon-watch{background-position:-11365px 0}.emoticon-radio{background-position:-11397px 0}.emoticon-satellite{background-position:-11429px 0}.emoticon-loop{background-position:-11461px 0}.emoticon-mag{background-position:-11493px 0}.emoticon-mag_right{background-position:-11525px 0}.emoticon-unlock{background-position:-11557px 0}.emoticon-lock{background-position:-11589px 0}.emoticon-lock_with_ink_pen{background-position:-11621px 0}.emoticon-closed_lock_with_key{background-position:-11653px 0}.emoticon-key{background-position:-11685px 0}.emoticon-bulb{background-position:-11717px 0}.emoticon-flashlight{background-position:-11749px 0}.emoticon-high_brightness{background-position:-11781px 0}.emoticon-low_brightness{background-position:-11813px 0}.emoticon-electric_plug{background-position:-11845px 0}.emoticon-battery{background-position:-11877px 0}.emoticon-calling{background-position:-11909px 0}.emoticon-email{background-position:-11941px 0}.emoticon-mailbox{background-position:-11973px 0}.emoticon-postbox{background-position:-12005px 0}.emoticon-bath{background-position:-12037px 0}.emoticon-bathtub{background-position:-12069px 0}.emoticon-shower{background-position:-12101px 0}.emoticon-toilet{background-position:-12133px 0}.emoticon-wrench{background-position:-12165px 0}.emoticon-nut_and_bolt{background-position:-12197px 0}.emoticon-hammer{background-position:-12229px 0}.emoticon-seat{background-position:-12261px 0}.emoticon-moneybag{background-position:-12293px 0}.emoticon-yen{background-position:-12325px 0}.emoticon-dollar{background-position:-12357px 0}.emoticon-pound{background-position:-12389px 0}.emoticon-euro{background-position:-12421px 0}.emoticon-credit_card{background-position:-12453px 0}.emoticon-money_with_wings{background-position:-12485px 0}.emoticon-e\-mail{background-position:-12517px 0}.emoticon-inbox_tray{background-position:-12549px 0}.emoticon-outbox_tray{background-position:-12581px 0}.emoticon-envelope{background-position:-12613px 0}.emoticon-incoming_envelope{background-position:-12645px 0}.emoticon-postal_horn{background-position:-12677px 0}.emoticon-mailbox_closed{background-position:-12709px 0}.emoticon-mailbox_with_mail{background-position:-12741px 0}.emoticon-mailbox_with_no_mail{background-position:-12773px 0}.emoticon-door{background-position:-12805px 0}.emoticon-smoking{background-position:-12837px 0}.emoticon-bomb{background-position:-12869px 0}.emoticon-gun{background-position:-12901px 0}.emoticon-hocho{background-position:-12933px 0}.emoticon-pill{background-position:-12965px 0}.emoticon-syringe{background-position:-12997px 0}.emoticon-page_facing_up{background-position:-13029px 0}.emoticon-page_with_curl{background-position:-13061px 0}.emoticon-bookmark_tabs{background-position:-13093px 0}.emoticon-bar_chart{background-position:-13125px 0}.emoticon-chart_with_upwards_trend{background-position:-13157px 0}.emoticon-chart_with_downwards_trend{background-position:-13189px 0}.emoticon-scroll{background-position:-13221px 0}.emoticon-clipboard{background-position:-13253px 0}.emoticon-calendar{background-position:-13285px 0}.emoticon-date{background-position:-13317px 0}.emoticon-card_index{background-position:-13349px 0}.emoticon-file_folder{background-position:-13381px 0}.emoticon-open_file_folder{background-position:-13413px 0}.emoticon-scissors{background-position:-13445px 0}.emoticon-pushpin{background-position:-13477px 0}.emoticon-paperclip{background-position:-13509px 0}.emoticon-black_nib{background-position:-13541px 0}.emoticon-pencil2{background-position:-13573px 0}.emoticon-straight_ruler{background-position:-13605px 0}.emoticon-triangular_ruler{background-position:-13637px 0}.emoticon-closed_book{background-position:-13669px 0}.emoticon-green_book{background-position:-13701px 0}.emoticon-blue_book{background-position:-13733px 0}.emoticon-orange_book{background-position:-13765px 0}.emoticon-notebook{background-position:-13797px 0}.emoticon-notebook_with_decorative_cover{background-position:-13829px 0}.emoticon-ledger{background-position:-13861px 0}.emoticon-books{background-position:-13893px 0}.emoticon-bookmark{background-position:-13925px 0}.emoticon-name_badge{background-position:-13957px 0}.emoticon-microscope{background-position:-13989px 0}.emoticon-telescope{background-position:-14021px 0}.emoticon-newspaper{background-position:-14053px 0}.emoticon-football{background-position:-14085px 0}.emoticon-basketball{background-position:-14117px 0}.emoticon-soccer{background-position:-14149px 0}.emoticon-baseball{background-position:-14181px 0}.emoticon-tennis{background-position:-14213px 0}.emoticon-8ball{background-position:-14245px 0}.emoticon-rugby_football{background-position:-14277px 0}.emoticon-bowling{background-position:-14309px 0}.emoticon-golf{background-position:-14341px 0}.emoticon-mountain_bicyclist{background-position:-14373px 0}.emoticon-bicyclist{background-position:-14405px 0}.emoticon-horse_racing{background-position:-14437px 0}.emoticon-snowboarder{background-position:-14469px 0}.emoticon-swimmer{background-position:-14501px 0}.emoticon-surfer{background-position:-14533px 0}.emoticon-ski{background-position:-14565px 0}.emoticon-spades{background-position:-14597px 0}.emoticon-hearts{background-position:-14629px 0}.emoticon-clubs{background-position:-14661px 0}.emoticon-diamonds{background-position:-14693px 0}.emoticon-gem{background-position:-14725px 0}.emoticon-ring{background-position:-14757px 0}.emoticon-trophy{background-position:-14789px 0}.emoticon-musical_score{background-position:-14821px 0}.emoticon-musical_keyboard{background-position:-14853px 0}.emoticon-violin{background-position:-14885px 0}.emoticon-space_invader{background-position:-14917px 0}.emoticon-video_game{background-position:-14949px 0}.emoticon-black_joker{background-position:-14981px 0}.emoticon-flower_playing_cards{background-position:-15013px 0}.emoticon-game_die{background-position:-15045px 0}.emoticon-dart{background-position:-15077px 0}.emoticon-mahjong{background-position:-15109px 0}.emoticon-clapper{background-position:-15141px 0}.emoticon-memo{background-position:-15173px 0}.emoticon-pencil{background-position:-15205px 0}.emoticon-book{background-position:-15237px 0}.emoticon-art{background-position:-15269px 0}.emoticon-microphone{background-position:-15301px 0}.emoticon-headphones{background-position:-15333px 0}.emoticon-trumpet{background-position:-15365px 0}.emoticon-saxophone{background-position:-15397px 0}.emoticon-guitar{background-position:-15429px 0}.emoticon-shoe{background-position:-15461px 0}.emoticon-sandal{background-position:-15493px 0}.emoticon-high_heel{background-position:-15525px 0}.emoticon-lipstick{background-position:-15557px 0}.emoticon-boot{background-position:-15589px 0}.emoticon-shirt{background-position:-15621px 0}.emoticon-tshirt{background-position:-15653px 0}.emoticon-necktie{background-position:-15685px 0}.emoticon-womans_clothes{background-position:-15717px 0}.emoticon-dress{background-position:-15749px 0}.emoticon-running_shirt_with_sash{background-position:-15781px 0}.emoticon-jeans{background-position:-15813px 0}.emoticon-kimono{background-position:-15845px 0}.emoticon-bikini{background-position:-15877px 0}.emoticon-ribbon{background-position:-15909px 0}.emoticon-tophat{background-position:-15941px 0}.emoticon-crown{background-position:-15973px 0}.emoticon-womans_hat{background-position:-16005px 0}.emoticon-mans_shoe{background-position:-16037px 0}.emoticon-closed_umbrella{background-position:-16069px 0}.emoticon-briefcase{background-position:-16101px 0}.emoticon-handbag{background-position:-16133px 0}.emoticon-pouch{background-position:-16165px 0}.emoticon-purse{background-position:-16197px 0}.emoticon-eyeglasses{background-position:-16229px 0}.emoticon-fishing_pole_and_fish{background-position:-16261px 0}.emoticon-coffee{background-position:-16293px 0}.emoticon-tea{background-position:-16325px 0}.emoticon-sake{background-position:-16357px 0}.emoticon-baby_bottle{background-position:-16389px 0}.emoticon-beer{background-position:-16421px 0}.emoticon-beers{background-position:-16453px 0}.emoticon-cocktail{background-position:-16485px 0}.emoticon-tropical_drink{background-position:-16517px 0}.emoticon-wine_glass{background-position:-16549px 0}.emoticon-fork_and_knife{background-position:-16581px 0}.emoticon-pizza{background-position:-16613px 0}.emoticon-hamburger{background-position:-16645px 0}.emoticon-fries{background-position:-16677px 0}.emoticon-poultry_leg{background-position:-16709px 0}.emoticon-meat_on_bone{background-position:-16741px 0}.emoticon-spaghetti{background-position:-16773px 0}.emoticon-curry{background-position:-16805px 0}.emoticon-fried_shrimp{background-position:-16837px 0}.emoticon-bento{background-position:-16869px 0}.emoticon-sushi{background-position:-16901px 0}.emoticon-fish_cake{background-position:-16933px 0}.emoticon-rice_ball{background-position:-16965px 0}.emoticon-rice_cracker{background-position:-16997px 0}.emoticon-rice{background-position:-17029px 0}.emoticon-ramen{background-position:-17061px 0}.emoticon-stew{background-position:-17093px 0}.emoticon-oden{background-position:-17125px 0}.emoticon-dango{background-position:-17157px 0}.emoticon-egg{background-position:-17189px 0}.emoticon-bread{background-position:-17221px 0}.emoticon-doughnut{background-position:-17253px 0}.emoticon-custard{background-position:-17285px 0}.emoticon-icecream{background-position:-17317px 0}.emoticon-ice_cream{background-position:-17349px 0}.emoticon-shaved_ice{background-position:-17381px 0}.emoticon-birthday{background-position:-17413px 0}.emoticon-cake{background-position:-17445px 0}.emoticon-cookie{background-position:-17477px 0}.emoticon-chocolate_bar{background-position:-17509px 0}.emoticon-candy{background-position:-17541px 0}.emoticon-lollipop{background-position:-17573px 0}.emoticon-honey_pot{background-position:-17605px 0}.emoticon-apple{background-position:-17637px 0}.emoticon-green_apple{background-position:-17669px 0}.emoticon-tangerine{background-position:-17701px 0}.emoticon-lemon{background-position:-17733px 0}.emoticon-cherries{background-position:-17765px 0}.emoticon-grapes{background-position:-17797px 0}.emoticon-watermelon{background-position:-17829px 0}.emoticon-strawberry{background-position:-17861px 0}.emoticon-peach{background-position:-17893px 0}.emoticon-melon{background-position:-17925px 0}.emoticon-banana{background-position:-17957px 0}.emoticon-pear{background-position:-17989px 0}.emoticon-pineapple{background-position:-18021px 0}.emoticon-sweet_potato{background-position:-18053px 0}.emoticon-eggplant{background-position:-18085px 0}.emoticon-tomato{background-position:-18117px 0}.emoticon-corn{background-position:-18149px 0}.emoticon-house{background-position:-18181px 0}.emoticon-house_with_garden{background-position:-18213px 0}.emoticon-school{background-position:-18245px 0}.emoticon-office{background-position:-18277px 0}.emoticon-post_office{background-position:-18309px 0}.emoticon-hospital{background-position:-18341px 0}.emoticon-bank{background-position:-18373px 0}.emoticon-convenience_store{background-position:-18405px 0}.emoticon-love_hotel{background-position:-18437px 0}.emoticon-hotel{background-position:-18469px 0}.emoticon-wedding{background-position:-18501px 0}.emoticon-church{background-position:-18533px 0}.emoticon-department_store{background-position:-18565px 0}.emoticon-european_post_office{background-position:-18597px 0}.emoticon-city_sunrise{background-position:-18629px 0}.emoticon-city_sunset{background-position:-18661px 0}.emoticon-japanese_castle{background-position:-18693px 0}.emoticon-european_castle{background-position:-18725px 0}.emoticon-tent{background-position:-18757px 0}.emoticon-factory{background-position:-18789px 0}.emoticon-tokyo_tower{background-position:-18821px 0}.emoticon-japan{background-position:-18853px 0}.emoticon-mount_fuji{background-position:-18885px 0}.emoticon-sunrise_over_mountains{background-position:-18917px 0}.emoticon-sunrise{background-position:-18949px 0}.emoticon-stars,.emoticon-themoreyouknow,.emoticon-tmyk{background-position:-18981px 0}.emoticon-statue_of_liberty{background-position:-19013px 0}.emoticon-bridge_at_night{background-position:-19045px 0}.emoticon-carousel_horse{background-position:-19077px 0}.emoticon-rainbow{background-position:-19109px 0}.emoticon-ferris_wheel{background-position:-19141px 0}.emoticon-fountain{background-position:-19173px 0}.emoticon-roller_coaster{background-position:-19205px 0}.emoticon-ship{background-position:-19237px 0}.emoticon-speedboat{background-position:-19269px 0}.emoticon-boat{background-position:-19301px 0}.emoticon-sailboat{background-position:-19333px 0}.emoticon-rowboat{background-position:-19365px 0}.emoticon-anchor{background-position:-19397px 0}.emoticon-rocket{background-position:-19429px 0}.emoticon-airplane{background-position:-19461px 0}.emoticon-helicopter{background-position:-19493px 0}.emoticon-steam_locomotive{background-position:-19525px 0}.emoticon-tram{background-position:-19557px 0}.emoticon-mountain_railway{background-position:-19589px 0}.emoticon-bike{background-position:-19621px 0}.emoticon-aerial_tramway{background-position:-19653px 0}.emoticon-suspension_railway{background-position:-19685px 0}.emoticon-mountain_cableway{background-position:-19717px 0}.emoticon-tractor{background-position:-19749px 0}.emoticon-blue_car{background-position:-19781px 0}.emoticon-oncoming_automobile{background-position:-19813px 0}.emoticon-car{background-position:-19845px 0}.emoticon-red_car{background-position:-19877px 0}.emoticon-taxi{background-position:-19909px 0}.emoticon-oncoming_taxi{background-position:-19941px 0}.emoticon-articulated_lorry{background-position:-19973px 0}.emoticon-bus{background-position:-20005px 0}.emoticon-oncoming_bus{background-position:-20037px 0}.emoticon-rotating_light{background-position:-20069px 0}.emoticon-police_car{background-position:-20101px 0}.emoticon-oncoming_police_car{background-position:-20133px 0}.emoticon-fire_engine{background-position:-20165px 0}.emoticon-ambulance{background-position:-20197px 0}.emoticon-minibus{background-position:-20229px 0}.emoticon-truck{background-position:-20261px 0}.emoticon-train{background-position:-20293px 0}.emoticon-station{background-position:-20325px 0}.emoticon-train2{background-position:-20357px 0}.emoticon-bullettrain_front{background-position:-20389px 0}.emoticon-bullettrain_side{background-position:-20421px 0}.emoticon-light_rail{background-position:-20453px 0}.emoticon-monorail{background-position:-20485px 0}.emoticon-railway_car{background-position:-20517px 0}.emoticon-trolleybus{background-position:-20549px 0}.emoticon-ticket{background-position:-20581px 0}.emoticon-fuelpump{background-position:-20613px 0}.emoticon-vertical_traffic_light{background-position:-20645px 0}.emoticon-traffic_light{background-position:-20677px 0}.emoticon-warning{background-position:-20709px 0}.emoticon-construction{background-position:-20741px 0}.emoticon-beginner{background-position:-20773px 0}.emoticon-atm{background-position:-20805px 0}.emoticon-slot_machine{background-position:-20837px 0}.emoticon-busstop{background-position:-20869px 0}.emoticon-barber{background-position:-20901px 0}.emoticon-hotsprings{background-position:-20933px 0}.emoticon-checkered_flag{background-position:-20965px 0}.emoticon-crossed_flags{background-position:-20997px 0}.emoticon-izakaya_lantern{background-position:-21029px 0}.emoticon-moyai{background-position:-21061px 0}.emoticon-circus_tent{background-position:-21093px 0}.emoticon-performing_arts{background-position:-21125px 0}.emoticon-round_pushpin{background-position:-21157px 0}.emoticon-triangular_flag_on_post{background-position:-21189px 0}.emoticon-jp{background-position:-21221px 0}.emoticon-kr{background-position:-21253px 0}.emoticon-cn{background-position:-21285px 0}.emoticon-us{background-position:-21317px 0}.emoticon-fr{background-position:-21349px 0}.emoticon-es{background-position:-21381px 0}.emoticon-it{background-position:-21413px 0}.emoticon-ru{background-position:-21445px 0}.emoticon-gb{background-position:-21477px 0}.emoticon-uk{background-position:-21509px 0}.emoticon-de{background-position:-21541px 0}.emoticon-one{background-position:-21573px 0}.emoticon-two{background-position:-21605px 0}.emoticon-three{background-position:-21637px 0}.emoticon-four{background-position:-21669px 0}.emoticon-five{background-position:-21701px 0}.emoticon-six{background-position:-21733px 0}.emoticon-seven{background-position:-21765px 0}.emoticon-eight{background-position:-21797px 0}.emoticon-nine{background-position:-21829px 0}.emoticon-keycap_ten{background-position:-21861px 0}.emoticon-1234{background-position:-21893px 0}.emoticon-zero{background-position:-21925px 0}.emoticon-hash{background-position:-21957px 0}.emoticon-symbols{background-position:-21989px 0}.emoticon-arrow_backward{background-position:-22021px 0}.emoticon-arrow_down{background-position:-22053px 0}.emoticon-arrow_forward{background-position:-22085px 0}.emoticon-arrow_left{background-position:-22117px 0}.emoticon-capital_abcd{background-position:-22149px 0}.emoticon-abcd{background-position:-22181px 0}.emoticon-abc{background-position:-22213px 0}.emoticon-arrow_lower_left{background-position:-22245px 0}.emoticon-arrow_lower_right{background-position:-22277px 0}.emoticon-arrow_right{background-position:-22309px 0}.emoticon-arrow_up{background-position:-22341px 0}.emoticon-arrow_upper_left{background-position:-22373px 0}.emoticon-arrow_upper_right{background-position:-22405px 0}.emoticon-arrow_double_down{background-position:-22437px 0}.emoticon-arrow_double_up{background-position:-22469px 0}.emoticon-arrow_down_small{background-position:-22501px 0}.emoticon-arrow_heading_down{background-position:-22533px 0}.emoticon-arrow_heading_up{background-position:-22565px 0}.emoticon-leftwards_arrow_with_hook{background-position:-22597px 0}.emoticon-arrow_right_hook{background-position:-22629px 0}.emoticon-left_right_arrow{background-position:-22661px 0}.emoticon-arrow_up_down{background-position:-22693px 0}.emoticon-arrow_up_small{background-position:-22725px 0}.emoticon-arrows_clockwise{background-position:-22757px 0}.emoticon-arrows_counterclockwise{background-position:-22789px 0}.emoticon-rewind{background-position:-22821px 0}.emoticon-fast_forward{background-position:-22853px 0}.emoticon-information_source{background-position:-22885px 0}.emoticon-ok{background-position:-22917px 0}.emoticon-twisted_rightwards_arrows{background-position:-22949px 0}.emoticon-repeat{background-position:-22981px 0}.emoticon-repeat_one{background-position:-23013px 0}.emoticon-new{background-position:-23045px 0}.emoticon-top{background-position:-23077px 0}.emoticon-up{background-position:-23109px 0}.emoticon-cool{background-position:-23141px 0}.emoticon-free{background-position:-23173px 0}.emoticon-ng{background-position:-23205px 0}.emoticon-cinema{background-position:-23237px 0}.emoticon-koko{background-position:-23269px 0}.emoticon-signal_strength{background-position:-23301px 0}.emoticon-u5272{background-position:-23333px 0}.emoticon-u5408{background-position:-23365px 0}.emoticon-u55b6{background-position:-23397px 0}.emoticon-u6307{background-position:-23429px 0}.emoticon-u6708{background-position:-23461px 0}.emoticon-u6709{background-position:-23493px 0}.emoticon-u6e80{background-position:-23525px 0}.emoticon-u7121{background-position:-23557px 0}.emoticon-u7533{background-position:-23589px 0}.emoticon-u7a7a{background-position:-23621px 0}.emoticon-u7981{background-position:-23653px 0}.emoticon-sa{background-position:-23685px 0}.emoticon-restroom{background-position:-23717px 0}.emoticon-mens{background-position:-23749px 0}.emoticon-womens{background-position:-23781px 0}.emoticon-baby_symbol{background-position:-23813px 0}.emoticon-no_smoking{background-position:-23845px 0}.emoticon-parking{background-position:-23877px 0}.emoticon-wheelchair{background-position:-23909px 0}.emoticon-metro{background-position:-23941px 0}.emoticon-baggage_claim{background-position:-23973px 0}.emoticon-accept{background-position:-24005px 0}.emoticon-wc{background-position:-24037px 0}.emoticon-potable_water{background-position:-24069px 0}.emoticon-put_litter_in_its_place{background-position:-24101px 0}.emoticon-secret{background-position:-24133px 0}.emoticon-congratulations{background-position:-24165px 0}.emoticon-m{background-position:-24197px 0}.emoticon-passport_control{background-position:-24229px 0}.emoticon-left_luggage{background-position:-24261px 0}.emoticon-customs{background-position:-24293px 0}.emoticon-ideograph_advantage{background-position:-24325px 0}.emoticon-cl{background-position:-24357px 0}.emoticon-sos{background-position:-24389px 0}.emoticon-id{background-position:-24421px 0}.emoticon-no_entry_sign{background-position:-24453px 0}.emoticon-underage{background-position:-24485px 0}.emoticon-no_mobile_phones{background-position:-24517px 0}.emoticon-do_not_litter{background-position:-24549px 0}.emoticon-non\-potable_water{background-position:-24581px 0}.emoticon-no_bicycles{background-position:-24613px 0}.emoticon-no_pedestrians{background-position:-24645px 0}.emoticon-children_crossing{background-position:-24677px 0}.emoticon-no_entry{background-position:-24709px 0}.emoticon-eight_spoked_asterisk{background-position:-24741px 0}.emoticon-eight_pointed_black_star{background-position:-24773px 0}.emoticon-heart_decoration{background-position:-24805px 0}.emoticon-vs{background-position:-24837px 0}.emoticon-vibration_mode{background-position:-24869px 0}.emoticon-mobile_phone_off{background-position:-24901px 0}.emoticon-chart{background-position:-24933px 0}.emoticon-currency_exchange{background-position:-24965px 0}.emoticon-aries{background-position:-24997px 0}.emoticon-taurus{background-position:-25029px 0}.emoticon-gemini{background-position:-25061px 0}.emoticon-cancer{background-position:-25093px 0}.emoticon-leo{background-position:-25125px 0}.emoticon-virgo{background-position:-25157px 0}.emoticon-libra{background-position:-25189px 0}.emoticon-scorpius{background-position:-25221px 0}.emoticon-sagittarius{background-position:-25253px 0}.emoticon-capricorn{background-position:-25285px 0}.emoticon-aquarius{background-position:-25317px 0}.emoticon-pisces{background-position:-25349px 0}.emoticon-ophiuchus{background-position:-25381px 0}.emoticon-six_pointed_star{background-position:-25413px 0}.emoticon-negative_squared_cross_mark{background-position:-25445px 0}.emoticon-a{background-position:-25477px 0}.emoticon-b{background-position:-25509px 0}.emoticon-ab{background-position:-25541px 0}.emoticon-o2{background-position:-25573px 0}.emoticon-diamond_shape_with_a_dot_inside{background-position:-25605px 0}.emoticon-recycle{background-position:-25637px 0}.emoticon-end{background-position:-25669px 0}.emoticon-on{background-position:-25701px 0}.emoticon-soon{background-position:-25733px 0}.emoticon-clock1{background-position:-25765px 0}.emoticon-clock130{background-position:-25797px 0}.emoticon-clock10{background-position:-25829px 0}.emoticon-clock1030{background-position:-25861px 0}.emoticon-clock11{background-position:-25893px 0}.emoticon-clock1130{background-position:-25925px 0}.emoticon-clock12{background-position:-25957px 0}.emoticon-clock1230{background-position:-25989px 0}.emoticon-clock2{background-position:-26021px 0}.emoticon-clock230{background-position:-26053px 0}.emoticon-clock3{background-position:-26085px 0}.emoticon-clock330{background-position:-26117px 0}.emoticon-clock4{background-position:-26149px 0}.emoticon-clock430{background-position:-26181px 0}.emoticon-clock5{background-position:-26213px 0}.emoticon-clock530{background-position:-26245px 0}.emoticon-clock6{background-position:-26277px 0}.emoticon-clock630{background-position:-26309px 0}.emoticon-clock7{background-position:-26341px 0}.emoticon-clock730{background-position:-26373px 0}.emoticon-clock8{background-position:-26405px 0}.emoticon-clock830{background-position:-26437px 0}.emoticon-clock9{background-position:-26469px 0}.emoticon-clock930{background-position:-26501px 0}.emoticon-heavy_dollar_sign{background-position:-26533px 0}.emoticon-copyright{background-position:-26565px 0}.emoticon-registered{background-position:-26597px 0}.emoticon-tm{background-position:-26629px 0}.emoticon-x{background-position:-26661px 0}.emoticon-heavy_exclamation_mark{background-position:-26693px 0}.emoticon-bangbang{background-position:-26725px 0}.emoticon-interrobang{background-position:-26757px 0}.emoticon-o{background-position:-26789px 0}.emoticon-heavy_multiplication_x{background-position:-26821px 0}.emoticon-heavy_plus_sign{background-position:-26853px 0}.emoticon-heavy_minus_sign{background-position:-26885px 0}.emoticon-heavy_division_sign{background-position:-26917px 0}.emoticon-white_flower{background-position:-26949px 0}.emoticon-100{background-position:-26981px 0}.emoticon-heavy_check_mark{background-position:-27013px 0}.emoticon-ballot_box_with_check{background-position:-27045px 0}.emoticon-radio_button{background-position:-27077px 0}.emoticon-link{background-position:-27109px 0}.emoticon-curly_loop{background-position:-27141px 0}.emoticon-wavy_dash{background-position:-27173px 0}.emoticon-part_alternation_mark{background-position:-27205px 0}.emoticon-trident{background-position:-27237px 0}.emoticon-black_large_square{background-position:-27269px 0}.emoticon-white_large_square{background-position:-27301px 0}.emoticon-white_check_mark{background-position:-27333px 0}.emoticon-black_square{background-position:-27268px 0}.emoticon-white_square{background-position:-27301px 0}.emoticon-black_square_button{background-position:-27365px 0}.emoticon-white_square_button{background-position:-27397px 0}.emoticon-black_circle{background-position:-27429px 0}.emoticon-white_circle{background-position:-27461px 0}.emoticon-red_circle{background-position:-27493px 0}.emoticon-large_blue_circle{background-position:-27525px 0}.emoticon-large_blue_diamond{background-position:-27557px 0}.emoticon-large_orange_diamond{background-position:-27589px 0}.emoticon-small_blue_diamond{background-position:-27621px 0}.emoticon-small_orange_diamond{background-position:-27653px 0}.emoticon-small_red_triangle{background-position:-27685px 0}.emoticon-small_red_triangle_down{background-position:-27717px 0}.emoticon-shipit{background-position:-27749px 0}.hljs{display:block;overflow-x:auto;padding:.5em;background:#f0f0f0;-webkit-text-size-adjust:none}.hljs,.hljs-subst,.hljs-tag .hljs-title,.nginx .hljs-title{color:#000}.apache .hljs-cbracket,.apache .hljs-tag,.asciidoc .hljs-header,.bash .hljs-variable,.coffeescript .hljs-attribute,.django .hljs-variable,.erlang_repl .hljs-function_or_atom,.haml .hljs-symbol,.hljs-addition,.hljs-constant,.hljs-flow,.hljs-name,.hljs-parent,.hljs-pragma,.hljs-preprocessor,.hljs-rule .hljs-value,.hljs-stream,.hljs-string,.hljs-tag .hljs-value,.hljs-template_tag,.hljs-title,.markdown .hljs-header,.pf .hljs-variable,.ruby .hljs-symbol,.ruby .hljs-symbol .hljs-string,.smalltalk .hljs-class,.tex .hljs-command,.tex .hljs-special,.tp .hljs-variable{color:#800}.asciidoc .hljs-blockquote,.diff .hljs-header,.hljs-annotation,.hljs-chunk,.hljs-comment,.markdown .hljs-blockquote,.smartquote{color:#888}.asciidoc .hljs-bullet,.asciidoc .hljs-link_url,.go .hljs-constant,.hljs-change,.hljs-date,.hljs-hexcolor,.hljs-literal,.hljs-number,.hljs-regexp,.lasso .hljs-variable,.makefile .hljs-variable,.markdown .hljs-bullet,.markdown .hljs-link_url,.smalltalk .hljs-char,.smalltalk .hljs-symbol{color:#080}.apache .hljs-sqbracket,.asciidoc .hljs-attribute,.asciidoc .hljs-link_label,.clojure .hljs-attribute,.coffeescript .hljs-property,.erlang_repl .hljs-reserved,.haml .hljs-bullet,.hljs-array,.hljs-attr_selector,.hljs-decorator,.hljs-deletion,.hljs-doctype,.hljs-envvar,.hljs-filter .hljs-argument,.hljs-important,.hljs-label,.hljs-localvars,.hljs-phony,.hljs-pi,.hljs-prompt,.hljs-pseudo,.hljs-shebang,.lasso .hljs-attribute,.markdown .hljs-link_label,.nginx .hljs-built_in,.ruby .hljs-string,.tex .hljs-formula,.vhdl .hljs-attribute{color:#88f}.apache .hljs-tag,.asciidoc .hljs-strong,.bash .hljs-variable,.css .hljs-tag,.hljs-built_in,.hljs-doctag,.hljs-id,.hljs-keyword,.hljs-request,.hljs-status,.hljs-title,.hljs-type,.hljs-typename,.hljs-winutils,.markdown .hljs-strong,.pf .hljs-variable,.smalltalk .hljs-class,.tex .hljs-command,.tp .hljs-data,.tp .hljs-io{font-weight:700}.asciidoc .hljs-emphasis,.markdown .hljs-emphasis,.tp .hljs-units{font-style:italic}.nginx .hljs-built_in{font-weight:400}.coffeescript .javascript,.javascript .xml,.lasso .markup,.tex .hljs-formula,.xml .css,.xml .hljs-cdata,.xml .javascript,.xml .vbscript{opacity:.5}
\ No newline at end of file
diff --git a/public/app/5c053d28.app.js b/public/app/5c053d28.app.js
new file mode 100644
index 0000000..d685bd3
--- /dev/null
+++ b/public/app/5c053d28.app.js
@@ -0,0 +1,43 @@
+"use strict";angular.module("xCallyShuttleApp",["adf","adf.structures.base","adf.widget.clock","adf.widget.iframe","adf.widget.counter","adf.widget.table","adf.widget.pie-chart","angular-md5","angular.filter","angularFileUpload","btford.socket-io","chart.js","checklist-model","colorpicker.module","frapontillo.bootstrap-switch","infinite-scroll","LocalStorageModule","mgo-angular-wizard","ng-slide-down","ngAnimate","ngCookies","ngCsv","ngMap","ngResource","ngSanitize","notification","oc.lazyLoad","pascalprecht.translate","pdf","remoteValidation","smart-table","sprintf","textAngular","toastr","ui-notification","ui.bootstrap.modal","ui.bootstrap.dropdown","ui.bootstrap.popover","ui.bootstrap.timepicker","ui.bootstrap.tooltip","ui.bootstrap.tpls","ui.router","ui.navbar","ui.select","ui.sortable","xeditable","ngAudio","truncate","ngScrollbars","ngEmoticons"]).config(["$stateProvider","$urlRouterProvider","$locationProvider","$httpProvider","$translateProvider","localStorageServiceProvider","dashboardProvider","ScrollBarsProvider",function(a,b,c,d,e,f,g,h){b.otherwise("/login"),e.useStaticFilesLoader({prefix:"assets/languages/locale-",suffix:".json"}),e.preferredLanguage("en_EN"),e.useLocalStorage(),e.useSanitizeValueStrategy("sanitize"),c.html5Mode(!0),d.interceptors.push("authInterceptor"),g.structure("4-4-4",{rows:[{columns:[{styleClass:"col-md-4"},{styleClass:"col-md-4"},{styleClass:"col-md-4"}]}]}).structure("3-3-3-3",{rows:[{columns:[{styleClass:"col-md-3"},{styleClass:"col-md-3"},{styleClass:"col-md-3"},{styleClass:"col-md-3"}]}]}),f.setPrefix("xcally"),h.defaults={scrollButtons:{scrollAmount:"auto",enable:!0},axis:"y"}}]).factory("settings",["$rootScope",function(a){var b={layout:{pageSidebarClosed:!1,pageQuickSidebarOpened:!1,pageBodySolid:!1,pageAutoScrollOnLoad:1e3}};return a.settings=b,b}]).factory("authInterceptor",["$rootScope","$q","$cookieStore",function(a,b,c){return{request:function(a){return a.headers=a.headers||{},c.get("token")&&(a.headers.Authorization="Bearer "+c.get("token")),a}}}]).run(["$rootScope","$location","$state","$stateParams","$window","$http","Auth","editableThemes","editableOptions",function(a,b,c,d,e,f,g,h,i){a.$state=c,a.$stateParams=d,h.bs3.inputClass="input-sm",h.bs3.buttonsClass="btn-xs",i.theme="bs3",a.online=navigator.onLine,e.addEventListener("offline",function(){a.$apply(function(){a.online=!1})},!1),e.addEventListener("online",function(){a.$apply(function(){a.online=!0})},!1),a.$on("$stateChangeStart",function(a,c){g.isLoggedInAsync(function(a){c.authenticate&&!a&&b.path("/login")})}),a.updateTableConfig=function(a,b){var c=_.find(a,{name:"All"});c&&(c.value=b)}}]),angular.module("xCallyShuttleApp").factory("Agent",["$resource",function(a){return a("/api/agents/:id/:controller",{id:"@id"},{changePassword:{method:"PUT",params:{controller:"password"}},update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.agents",{url:"/agents",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("AgentListCtrl",["$scope","$http","$rootScope","xAlert","$translate","socket","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={agentsByPage:{name:"10",value:10},labels:["fullname","name","email"]},a.agentsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.agents={checked:[]},a.check=function(b,c){c?a.agents.checked=angular.copy(_.pluck(a.displayedAgents,"id")):a.agents.checked=[]},a.getAgents=function(b){return _.map(a.displayedAgents,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){f.unsyncUpdates("agent"),b.url="/api/agents",h.getPage(b).then(function(d){a.displayedAgents=d.rows,b.pagination.numberOfPages=d.total_pages,c.updateTableConfig(a.agentsByPage,a.displayedAgents.length),c.updateTableConfig(a.conf.agentsByPage,a.displayedAgents.length)}),f.socket.on("agent:save",function(){a.initList(b)}),f.socket.on("agent:remove",function(c){a.agents.checked=_.without(a.agents.checked,c.id),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/agents/"+a).success(function(){d.show(e.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){d.show(e.instant(a.message),"danger")})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/agents",{params:{id:a.agents.checked}}).success(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){d.show(e.instant(a.message),"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.agents.list",{url:"/list",templateUrl:"app/agent/list/list.html",controller:"AgentListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("AgentViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$cookieStore","socket","FileUploader","Auth",function(a,b,c,d,e,f,g,h,i){a.Auth=i,a.updatePassword=function(){var f,g;i.isAdmin()?(f="/api/agents/password/"+e.id+"/reset",g={newPassword:a.agent.newPwd}):(f="/api/agents/password/",g={oldPassword:a.agent.currentPwd,newPassword:a.agent.newPwd}),b.put(f,g).success(function(a){c.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){c.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})};var j=a.uploader=new h({url:"api/users/"+e.id+"/avatar",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+f.get("token")}});j.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),j.onSuccessItem=function(b,e,f,g){a.agent.userpic=e.userpic,a.agent.id===i.getCurrentUser().id&&(i.getCurrentUser().userpic=e.userpic),c.show(d.instant("MESSAGE_WELL_DONE"),"success")},j.onErrorItem=function(a,b,e,f){c.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},j.onCompleteAll=function(){j.clearQueue()},a.initView=function(){b.get("/api/agents/"+e.id).success(function(b){a.agent=b,a.agent.transport=a.agent.transport?a.agent.transport.split(","):[],a.agent.allow=a.agent.allow?a.agent.allow.split(";"):[]}).error(function(a){c.show(a.message,"danger")})},a.updateItem=function(){var f=angular.copy(a.agent),g=angular.copy(a.agent);delete f.password,delete f.md5secret,f.transport=f.transport.join(","),f.allow=f.allow.join(";"),b.put("/api/agents/"+e.id,f).success(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(b){a.agent=g,b.errors.forEach(function(a){c.show(a.message,"danger")})})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.agents.view",{url:"/view/:id",templateUrl:"app/agent/view/view.html",controller:"AgentViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.agents.view.account",{url:"/account",templateUrl:"app/agent/view/view.account.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}})}]),angular.module("xCallyShuttleApp").controller("AgentWizardCtrl",["$scope","$http","xAlert","$location","WizardHandler","$translate",function(a,b,c,d,e,f){a.forms={info:void 0,voice:void 0},a.item={role:"agent",allow:["alaw","ulaw","gsm"],transport:["udp"],context:"from-sip"},a.next=function(){b.post("/api/agents/validate/",a.item).success(function(a){console.log(a),a.length?c.show(f.instant("MESSAGE_EXIST_INTERNAL"),"danger"):e.wizard().next()}).error(function(a){c.show(f.instant(a.message),"danger")})},a.getFirstFreeInternal=function(){b.get("/api/settings/internal").success(function(b){a.item.internal=b.value}).error(function(a){c.show(f.instant(a.message),"danger")})},a.exitValidation=function(a){return a},a.createItem=function(){a.item.transport&&(a.item.transport=a.item.transport.join(",")),a.item.allow&&(a.item.allow=a.item.allow.join(";")),b.post("/api/agents/",a.item).success(function(){d.path("/agents/list")}).error(function(a){a.errors.forEach(function(a){c.show(a.message,"danger")})})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.agents.wizard",{url:"/wizard",templateUrl:"app/agent/wizard/wizard.html",controller:"AgentWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.automations",{url:"/automations",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("AutomationListCtrl",["$scope","$http","$translate","$rootScope","stResource","Modal","socket","xAlert",function(a,b,c,d,e,f,g,h){a.conf={AutomationsByPage:{name:"10",value:10}},a.AutomationsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.onText="On",a.offText="Off",a.isActive=!0,a.size="mini",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.Automations={checked:[]},a.check=function(b,c){c?a.Automations.checked=angular.copy(_.pluck(a.displayedAutomations,"id")):a.Automations.checked=[]},a.getAutomations=function(b){return _.map(a.displayedAutomations,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){g.unsyncUpdates("automation"),b.url="/api/automations",e.getPage(b).then(function(c){a.displayedAutomations=c.rows,b.pagination.numberOfPages=c.total_pages,d.updateTableConfig(a.AutomationsByPage,a.displayedAutomations.length),d.updateTableConfig(a.conf.AutomationsByPage,a.displayedAutomations.length)}),g.socket.on("automation:save",function(){a.initList(b)}),g.socket.on("automation:remove",function(c){a.Automations.checked=_.without(a.Automations.checked,c.id),a.initList(b)})},a.deleteItem=f.confirm["delete"](function(a){b["delete"]("/api/automations/"+a).success(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){h.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.deleteItems=f.confirm["delete"](function(){b["delete"]("/api/automations",{params:{id:a.Automations.checked}}).success(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){h.show(c.instant(a.message),"danger")})}),a.updateItem=function(a,d){b.put("api/automations/"+a,{status:d}).success(function(a){h.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){h.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.automations.list",{url:"/list",templateUrl:"app/automation/list/list.html",controller:"AutomationListCtrl"})}]),angular.module("xCallyShuttleApp").controller("AutomationViewCtrl",["$scope","$stateParams","$http","$translate","xAlert","automations",function(a,b,c,d,e,f){a.$automations=f,a.forms={info:{}},a.fields={},a.properties=f.properties,a.initView=function(){c.get("/api/automations/"+b.id).success(function(b){a.automation=b,a.conditionsFilter=JSON.parse(b.conditions),a.actionsFilter=JSON.parse(b.actions),a.fields.conditions=a.$automations.automations[b.channel].conditions,a.fields.actions=a.$automations.automations[b.channel].actions}).error(function(a){e.show(a.message,"danger")})},a.updateAutomation=function(){c.put("/api/automations/"+a.automation.id,{name:a.automation.name,description:a.automation.description,conditions:angular.toJson(a.conditionsFilter),actions:angular.toJson(a.actionsFilter)}).success(function(){e.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){e.show(a.message,"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.automations.view",{url:"/view/:id",templateUrl:"app/automation/view/view.html",controller:"AutomationViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}}).state("main.automations.view.settings",{url:"/settings",templateUrl:"app/automation/view/view.settings.html"}).state("main.automations.view.routes",{url:"/routes",templateUrl:"app/automation/view/view.routes.html"}).state("main.automations.view.application",{url:"/application",templateUrl:"app/automation/view/view.application.html"})}]),angular.module("xCallyShuttleApp").controller("AutomationWizardCtrl",["$scope","$http","$location","xAlert","automations","WizardHandler",function(a,b,c,d,e,f){a.$automations=e,a.tempData={voice:{},mail:{},chat:{},fax:{}},a.item={},a.fields={},a.properties=e.properties,a.forms={general:{}};var g={group:{"boolean":"AND",rules:[],type:"CONDITION",main:!0}},h={group:{rules:[],type:"ACTION"}};a.conditionsFilter=_.clone(g,!0),a.actionsFilter=_.clone(h,!0),a.$watch("item.channel",function(b,c){c&&(a.tempData[c].conditionsFilter=_.clone(a.conditionsFilter,!0),a.tempData[c].actionsFilter=_.clone(a.actionsFilter,!0)),a.conditionsFilter=a.tempData[b].conditionsFilter?a.tempData[b].conditionsFilter:_.clone(g,!0),a.actionsFilter=a.tempData[b].actionsFilter?a.tempData[b].actionsFilter:_.clone(h,!0),a.fields.conditions=a.$automations.automations[b].conditions,a.fields.actions=a.$automations.automations[b].actions},!0),a.item.channel="mail",a.createItem=function(){a.item.conditions=angular.toJson(a.conditionsFilter),a.item.actions=angular.toJson(a.actionsFilter),b.post("/api/automations",a.item).success(function(){c.path("/automations/list")}).error(function(a){d.show(a.message,"danger")})},a.next=function(){f.wizard().next()},a.previous=function(){f.wizard().previous()},a.exitValidation=function(a){return a}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.automations.wizard",{url:"/wizard",templateUrl:"app/automation/wizard/wizard.html",controller:"AutomationWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat",{url:"/chat",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("ChatMessage",["$resource",function(a){return a("/api/chat/messages/:id/:controller",{id:"@id"})}]),angular.module("xCallyShuttleApp").factory("ChatRoom",["$resource",function(a){return a("/api/chat/rooms/:id/:controller",{id:"@id"},{me:{method:"GET",isArray:!0,params:{id:"me"}},users:{method:"GET",params:{id:"users"}},externals:{method:"GET",isArray:!0,params:{id:"type",controller:"external"}},groups:{method:"GET",isArray:!0,params:{id:"groups"}},update:{method:"PUT"}})}]),angular.module("xCallyShuttleApp").directive("preview",function(){return{templateUrl:"app/chat/preview/preview.html",restrict:"EA",link:function(a,b,c){}}}),angular.module("xCallyShuttleApp").controller("ChatQueueListCtrl",["$scope","$http","xAlert","$translate","socket","Modal","$rootScope","stResource",function(a,b,c,d,e,f,g,h){a.conf={chatQueuesByPage:{name:"10",value:10}},a.chatQueuesByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.chatQueues={checked:[]},a.check=function(b,c){c?a.chatQueues.checked=angular.copy(_.pluck(a.displayedChatQueues,"id")):a.chatQueues.checked=[]},a.initList=function(b){e.unsyncUpdates("chat_queue"),b.url="/api/chat/queues/",h.getPage(b).then(function(c){a.displayedChatQueues=c.rows,b.pagination.numberOfPages=c.total_pages,g.updateTableConfig(c.queuesByPage,a.displayedChatQueues.length),g.updateTableConfig(a.conf.queuesByPage,a.displayedChatQueues.length)}),e.socket.on("chat_queue:save",function(){a.initList(b)}),e.socket.on("chat_queue:remove",function(c){a.chatQueues.checked=_.without(a.chatQueues.checked,c.id),a.initList(b)})},a.getChatQueues=function(b){return _.map(a.displayedChatQueues,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.deleteItem=f.confirm["delete"](function(a){b["delete"]("api/chat/queues/"+a).success(function(){c.show(d.instant("MESSAGE_CHAT_QUEUE_DELETE_SUCCESS")+"!","success")}).error(function(){c.show(d.instant("MESSAGE_CHAT_QUEUE_DELETE_FAILURE"),"danger")})}),a.deleteItems=f.confirm["delete"](function(){b["delete"]("/api/chat/queues/",{params:{id:a.chatQueues.checked}}).success(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){c.show(d.instant(a.message),"danger")})}),a.$on("$destroy",function(){e.unsyncUpdates("chat_queue")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.queues.list",{url:"/list",templateUrl:"app/chat/queue/list/list.html",controller:"ChatQueueListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.queues",{url:"/queues",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatQueueViewCtrl",["$scope","$http","xAlert","$translate","$stateParams",function(a,b,c,d,e){var f=function(){return{select:function(c){b.post("/api/chat/queues/"+a.queue.id+"/agents",{agents:c}).success(function(){a.getTeams()}).error(function(a){console.error(a)})},deselect:function(c){b.put("/api/chat/queues/"+a.queue.id+"/agents",{agents:c}).success(function(){a.getTeams()}).error(function(a){console.error(a)})}}};a.getQueue=function(){b.get("/api/chat/queues/"+e.id).success(function(b){a.queue=b}).error(function(a){console.error(a)})},a.updateChatQueue=function(){var f=angular.copy(a.queue);b.put("/api/chat/queues/"+e.id,f).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(b){a.queue=f,b.errors.forEach(function(a){c.show(a.message,"danger")})})},a.getTeams=function(){b.get("/api/teams").success(function(c){a.teams=c.rows,b({url:"/api/chat/user_has_queues",method:"GET",params:{ChatQueueId:a.queue.id}}).success(function(a){ComponentsDropdowns.bindChatQueue(c.rows,_.pluck(a,"UserId"),f)})}).error(function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.queues.view",{url:"/view/:id",templateUrl:"app/chat/queue/view/view.html",controller:"ChatQueueViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.chat.queues.view.settings",{url:"/settings",templateUrl:"app/chat/queue/view/view.settings.html"}).state("main.chat.queues.view.agents",{url:"/agents",templateUrl:"app/chat/queue/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").controller("ChatQueueWizardCtrl",["$scope","$http","$location","xAlert","WizardHandler","$translate",function(a,b,c,d,e,f){a.forms={},a.item={},a.next=function(){e.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("/api/chat/queues",a.item).success(function(){d.show(f.instant("MESSAGE_WELL_DONE"),"success"),c.path("/chat/queues/list")}).error(function(a){d.show(f.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.queues.wizard",{url:"/wizard",templateUrl:"app/chat/queue/wizard/wizard.html",controller:"ChatQueueWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatRealtimeViewAgentCtrl",["$scope","$http","socket",function(a,b,c){console.log("ChatRealtimeViewAgentCtrl"),a.conf={agentsByPage:{name:"10",value:10},labels:["fullname","name","email"]},a.agentsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.$on("$destroy",function(){c.unsyncUpdates("report_chat:save"),c.unsyncUpdates("report_chat:update")}),a.initAgents=function(){b.get("/api/report/chats").success(function(b){a.agents=b,c.socket.on("report_chat:save",function(b){var c=_.find(a.agents,{id:b.id});c||a.agents.unshift(b)}),c.socket.on("report_chat:update",function(b){var c=_.find(a.agents,{id:b.id}),d=a.agents.indexOf(c);c&&_.merge(a.agents[d],b)})}).error(function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("ChatRealtimeViewSessionCtrl",["$scope","$http","socket",function(a,b,c){a.conf={sessionsByPage:{name:"10",value:10},labels:["fullname","name","email"]},a.sessionsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.$on("$destroy",function(){c.unsyncUpdates("report_chat:save"),c.unsyncUpdates("report_chat:update")}),a.initChats=function(){b.get("/api/report/chat/sessions").success(function(b){a.sessions=b,c.socket.on("report_chat_session:save",function(b){var c=_.find(a.sessions,{id:b.id}),d=a.sessions.indexOf(c);c?_.merge(a.sessions[d],b):a.sessions.push(b)})}).error(function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("ChatRealtimeViewCtrl",["$scope",function(a){a.agents=[{name:"View1",link:"main.chat.realtime.view.agents"}],a.sessions=[{name:"View1",link:"main.chat.realtime.view.sessions"}]}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.realtime.view",{url:"/view",templateUrl:"app/chat/realtime/view/view.html",controller:"ChatRealtimeViewCtrl"}).state("main.chat.realtime.view.agents",{url:"/agents",controller:"ChatRealtimeViewAgentCtrl",templateUrl:"app/chat/realtime/view/agent/agent.html"}).state("main.chat.realtime.view.sessions",{url:"/sessions",controller:"ChatRealtimeViewSessionCtrl",templateUrl:"app/chat/realtime/view/session/session.html"})}]),angular.module("xCallyShuttleApp").controller("ChatStatisticCtrl",["$scope","$http","$stateParams","xAlert","socket","$location","$translate","$filter",function(a,b,c,d,e,f,g,h){a.conf={chatVisitorsByPage:10,chatRoomsByPage:10,chatEnquiriesByPage:10},a.$location=f,a.$translate=g,a.$filter=h,a.initList=function(){b.get("api/chat/visitors").success(function(b){a.chatVisitors=b,e.syncUpdates("chat_visitor",a.chatVisitors)}),b.get("api/chat/rooms").success(function(b){a.chatRooms=b,e.syncUpdates("chat_room",a.chatRooms)}),b.get("api/chat/enquiries").success(function(b){a.chatEnquiries=b,e.syncUpdates("chat_enquery",a.chatEnquiries)})},a.initVisitorView=function(){b.get("api/chat/visitors/"+c.id).success(function(b){a.chatVisitor=b}).error(function(a){d.show(g.instant(a.message),"danger")})},a.initEnquiryView=function(){b.get("api/chat/enquiries/"+c.id).success(function(b){a.chatEnquiry=b}).error(function(a){d.show(g.instant(a.message),"danger")})},a.initRoomView=function(){console.log(c),b.get("api/chat/rooms/"+c.id).success(function(b){a.chatRoom=b}).error(function(a){d.show(g.instant(a.message),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.statistics",{url:"/statistics",templateUrl:"app/chat/statistic/statistic.html",controller:"ChatStatisticCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]},{name:"ui.select",insertBefore:"#ng_load_plugins_before",files:["assets/plugins/ui-select/select.min.css","assets/plugins/ui-select/select.min.js"]}])}]}}).state("main.chat.statistics.summary",{url:"/summary",templateUrl:"app/chat/statistic/statistic.summary.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile-old.css"]})}]}}).state("main.chat.statistics.enquiries",{url:"/enquiries",templateUrl:"app/chat/statistic/statistic.enquiry.html"}).state("main.chat.statistics.enquiry",{url:"/enquiry/:id",controller:"ChatStatisticCtrl",templateUrl:"app/chat/statistic/statistic.enquiry.view.html"}).state("main.chat.statistics.conversations",{url:"/conversations",templateUrl:"app/chat/statistic/statistic.conversation.html"}).state("main.chat.statistics.conversation",{url:"/conversation/:id",controller:"ChatStatisticCtrl",templateUrl:"app/chat/statistic/statistic.conversation.view.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/timeline.css"]})}]}}).state("main.chat.statistics.visitors",{url:"/visitors",templateUrl:"app/chat/statistic/statistic.visitor.html"}).state("main.chat.statistics.visitor",{url:"/visitor/:id",controller:"ChatStatisticCtrl",templateUrl:"app/chat/statistic/statistic.visitor.view.html"})}]),angular.module("xCallyShuttleApp").controller("ChatTimelineListCtrl",["$scope","$http","socket",function(a,b,c){function d(b){a.events>50&&a.events.pop(),a.events.unshift(b)}a.initList=function(){a.events=[],b.get("/api/events/channel/chat").success(function(a){a.forEach(d),c.socket.on("event:chat:save",d)}).error(function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.timeline.list",{url:"/list",templateUrl:"app/chat/timeline/list/list.html",controller:"ChatTimelineListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/timeline.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.timeline",{url:"/timeline",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteListCtrl",["$scope","$http","xAlert","$translate","socket","Modal","$rootScope","stResource",function(a,b,c,d,e,f,g,h){a.conf={chatWebsitesByPage:{name:"10",value:10}},a.chatWebsitesByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.chatWebsites={checked:[]},a.check=function(b,c){c?a.chatWebsites.checked=angular.copy(_.pluck(a.displayedChatWebsites,"id")):a.chatWebsites.checked=[]},a.getChatWebsites=function(b){return _.map(a.displayedChatWebsites,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){e.unsyncUpdates("chat_website"),b.url="/api/chat/websites",h.getPage(b).then(function(c){a.displayedChatWebsites=c.rows,b.pagination.numberOfPages=c.total_pages,g.updateTableConfig(a.chatWebsitesByPage,a.displayedChatWebsites.length),g.updateTableConfig(a.conf.chatWebsitesByPage,a.displayedChatWebsites.length)}),e.socket.on("chat_website:save",function(){a.initList(b)}),e.socket.on("chat_website:remove",function(c){a.chatWebsites.checked=_.without(a.chatWebsites.checked,c.id),a.initList(b)})},a.deleteItem=f.confirm["delete"](function(a){b["delete"]("api/chat/websites/"+a).success(function(){c.show(d.instant("MESSAGE_CHAT_WEBSITE_DELETE_SUCCESS")+"!","success")}).error(function(){c.show(d.instant("MESSAGE_CHAT_WEBSITE_DELETE_FAILURE"),"danger")})}),a.deleteItems=f.confirm["delete"](function(){b["delete"]("/api/chat/websites",{params:{id:a.chatWebsites.checked}}).success(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){c.show(a.message,"danger")})}),a.$on("$destroy",function(){e.unsyncUpdates("chat_website")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.websites.list",{url:"/list",templateUrl:"app/chat/website/list/list.html",controller:"ChatWebsiteListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.websites.view.actions",{url:"/actions",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("chatWebsiteViewActionListCtrl",["$scope","$http","$translate","$stateParams","socket","xAlert","Modal",function(a,b,c,d,e,f,g){a.initActons=function(){console.log(d),a.sortableOptions={stop:function(){console.log("stop",_.pluck(a.chatApplications,"id")),b.post("api/chat/websites/"+d.websiteId+"/applications",{applications:_.pluck(a.chatApplications,"id")}).success(function(b){angular.copy(b,a.chatApplications)}).error(function(a){console.error(a)})}},b.get("/api/chat/applications",{params:{ChatWebsiteId:d.websiteId}}).success(function(b){a.chatApplications=b,e.socket.on("chat_application:remove",function(b){_.remove(a.chatApplications,{id:b.id})})})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("api/chat/applications/"+a).success(function(){f.show(c.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){f.show(a.message,"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.websites.view.actions.list",{url:"/list",templateUrl:"app/chat/website/view/action/list/list.html",controller:"chatWebsiteViewActionListCtrl"})}]),angular.module("xCallyShuttleApp").controller("chatWebsiteViewActionViewCtrl",["$scope","$http","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval",function(a,b,c,d,e,f,g,h,i,j){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initAction=function(){a.$application=i.application,a.$stateParams=c,a.$interval=j.interval,a.forms={},a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"}],b.get("/api/chat/applications/"+c.actionId).success(function(b){if(a.application=b,a.application.alwaysTime=!1,a.application.IntervalId)a.application.intType="list";else switch(a.application.interval){case"*,*,*,*":a.application.intType="always";break;default:a.application.intType="custom"}var c=a.application.interval.split(",");"*"===c[0]?a.application.alwaysTime=!0:(a.application.t_from=moment(new Date),a.application.t_to=moment(new Date),a.application.t_from.hour(c[0].split("-")[0].split(":")[0]),a.application.t_from.minute(c[0].split("-")[0].split(":")[1]),a.application.t_to.hour(c[0].split("-")[1].split(":")[0]),a.application.t_to.minute(c[0].split("-")[1].split(":")[1])),"*"===c[1]?(a.application.wd_from="always",a.application.wd_to="always"):(a.application.wd_from=c[1].split("-")[0],a.application.wd_to=c[1].split("-")[1]),"*"===c[2]?(a.application.md_from="always",a.application.md_to="always"):(a.application.md_from=c[2].split("-")[0],a.application.md_to=c[2].split("-")[1]),"*"===c[3]?(a.application.m_from="always",a.application.m_to="always"):(a.application.m_from=c[3].split("-")[0],a.application.m_to=c[3].split("-")[1]),console.log(c),a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})}).error(function(a){console.error(a)})},a.getQueues=function(){b.get("/api/chat/queues",{params:{page:0,per_page:500}}).success(function(b){a.queues=b.rows}).error(function(a){console.error(a)})},a.getAgents=function(){b.get("/api/agents",{params:{page:0,per_page:500}}).success(function(b){a.agents=b.rows}).error(function(a){console.error(a)})},a.getIntervals=function(){b.get("/api/intervals",{params:{page:0,per_page:500}}).success(function(b){a.intervals=b.rows}).error(function(a){console.error(a)})},a.updateItem=function(){var e=["*","*","*","*"],g={app:a.application.app,timeout:a.application.timeout,chatAccountId:c.id};switch(a.application.app){case"agent":
+g.UserId=a.application.UserId;break;case"queue":g.chatQueueId=a.application.chatQueueId}switch(a.application.intType){case"always":g.interval=e.join(","),delete a.application.IntervalId;break;case"custom":a.application.alwaysTime||(e[0]=a.application.alwaysTime?"*":a.application.t_from_hm+"-"+a.application.t_to_hm),e[1]=a.application.wd_from&&a.application.wd_to?a.application.wd_from+"-"+a.application.wd_to:"*",e[2]=a.application.md_from&&a.application.md_to?a.application.md_from+"-"+a.application.md_to:"*",e[3]=a.application.m_from&&a.application.m_to?a.application.m_from+"-"+a.application.m_to:"*",g.interval=e.join(","),delete a.application.IntervalId;break;case"list":g.IntervalId=a.application.IntervalId}b.put("/api/chat/applications/"+c.actionId,g).success(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(a.message,"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.websites.view.actions.view",{url:"/view/:actionId",templateUrl:"app/chat/website/view/action/view/view.html",controller:"chatWebsiteViewActionViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("chatWebsiteViewActionWizardCtrl",["$scope","$http","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval",function(a,b,c,d,e,f,g,h,i,j){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){console.log(c),a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"}],a.$application=i.application,a.$stateParams=c,a.$interval=j.interval,a.forms={},a.application={alwaysTime:!0},a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})},a.getQueues=function(){b.get("/api/chat/queues",{params:{page:0,per_page:1e3}}).success(function(b){a.queues=b.rows}).error(function(a){console.error(a)})},a.getAgents=function(){b.get("/api/agents",{params:{page:0,per_page:1e3}}).success(function(b){a.agents=b.rows}).error(function(a){console.error(a)})},a.getIntervals=function(){b.get("/api/intervals",{params:{page:0,per_page:500}}).success(function(b){a.intervals=b.rows}).error(function(a){console.error(a)})},a.createItem=function(){var d=["*","*","*","*"],f={app:a.application.app,timeout:a.application.timeout,ChatWebsiteId:c.websiteId};switch(a.application.app){case"agent":f.UserId=a.application.UserId;break;case"queue":f.ChatQueueId=a.application.ChatQueueId}switch(a.application.intType){case"always":f.interval=d.join(","),delete a.application.IntervalId;break;case"custom":a.application.alwaysTime||(d[0]=a.application.alwaysTime?"*":a.application.t_from_hm+"-"+a.application.t_to_hm),d[1]=a.application.wd_from&&a.application.wd_to?a.application.wd_from+"-"+a.application.wd_to:"*",d[2]=a.application.md_from&&a.application.md_to?a.application.md_from+"-"+a.application.md_to:"*",d[3]=a.application.m_from&&a.application.m_to?a.application.m_from+"-"+a.application.m_to:"*",f.interval=d.join(","),delete a.application.IntervalId;break;case"list":f.IntervalId=a.application.IntervalId}b.post("/api/chat/applications",f).success(function(){e.path("/chat/websites/view/"+c.websiteId+"/actions/list")}).error(function(a){console.error(a)})},a.formValidation=function(a){return a},a.next=function(){g.wizard().next()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.websites.view.actions.wizard",{url:"/wizard",templateUrl:"app/chat/website/view/action/wizard/wizard.html",controller:"chatWebsiteViewActionWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.websites.view.snippet",{url:"/snippet",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("chatWebsiteViewSnippetViewCtrl",["$scope","$http","$stateParams","$translate",function(a,b,c,d){a.$translate=d,a.statePreview={state:"online"},a.lang={HeaderCurrentlyChatting:"Live Chat",HeaderOffline:"Contact us",OperatorOfflineMessage:"It appears as if all operators are currently offline.",OfflineMessage:"<strong>We're not online.</strong><br/>It doesn't mean we're not there to help - leave your message below and we'll be in touch as soon as possible.",EnquiryMessagePlaceholder:"Your message...",EnquiryButtonText:"Leave message",EnquirySubmitSuccess:"Your message was sucessfully submitted - we will contact you as soon as possible.",OperatorComposing:"{fullname} is typing...",FirstMessageText:"",ExitChatButtonText:"Exit Chat",ExitChatQuestionText:"Are you sure?",ExitChatButtonConfirmText:"Yes",ExitChatButtonCancelText:"No",MessagePlaceholderText:"Your message...",MessageSendButtonText:"Send",ValidationEmailRequired:"Please enter your email address",ValidationEmailInvalid:"Please enter a valid email address",ValidationEmailMaxLength:"The email address may not exceed 85 characters",ValidationUsernameRequired:"Please enter your name",ValidationUsernameMaxLength:"The name may not exceed 45 characters",ValidationEnquiryRequired:"Please enter your enquiry",ValidationEnquiryMaxLength:"The enquiry may not exceed 1500 characters",ValidationMessageRequired:"Please enter your message",ValidationMessageMaxLength:"The message may not exceed 750 characters"},a.getSnippetCode=function(){b.get("api/chat/websites/"+c.websiteId+"/snippet").success(function(b){a.snippetCode=b})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.websites.view.snippet.view",{url:"/view",templateUrl:"app/chat/website/view/snippet/view/view.html",controller:"chatWebsiteViewSnippetViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteViewCtrl",["$scope","xAlert","$http","$location","$stateParams","$translate","WizardHandler",function(a,b,c,d,e,f,g){a.initApplication=function(){a.forms={},a.application={}},a.goNext=function(){g.wizard().next()},a.formValidation=function(a){return a},a.deleteItem=function(a){c["delete"]("api/chat/applications/"+a).error(function(){b.show(f.instant("Something went wrong!"),"danger")})},a.initView=function(){c.get("/api/chat/websites/"+e.websiteId).success(function(b){a.chatWebsite=b}).error(function(a){b.show(a.message,"danger")})},a.updateItem=function(){c.put("/api/chat/websites/"+a.chatWebsite.id,a.chatWebsite).success(function(){b.show(f.instant("MESSAGE_CHAT_WEBSITE_UPDATE_SUCCESS")+"!","success")}).error(function(){b.show(f.instant("MESSAGE_CHAT_WEBSITE_UPDATE_FAILURE"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.websites.view",{url:"/view/:websiteId",templateUrl:"app/chat/website/view/view.html",controller:"ChatWebsiteViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.websites",{url:"/websites",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ChatWebsiteWizardCtrl",["$scope","$http","$location","$translate","WizardHandler","xAlert",function(a,b,c,d,e,f){a.$translate=d,a.forms={formSetting:void 0,formAppearance:void 0,formLabel:void 0,formFunctionality:void 0},a.next=function(){e.wizard().next()},a.exitValidation=function(a){return a},a.item={},a.createItem=function(){b.post("api/chat/websites",a.item).success(function(){f.show(d.instant("MESSAGE_CHAT_WEBSITE_CREATE_SUCCESS"),"success"),c.path("/chat/websites/list")}).error(function(){f.show(d.instant("MESSAGE_CHAT_WEBSITE_CREATE_FAILURE"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.chat.websites.wizard",{url:"/wizard",templateUrl:"app/chat/website/wizard/wizard.html",controller:"ChatWebsiteWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("DashboardCtrl",["$scope","$translate",function(a,b){a.voice=[{name:b.instant("APPLICATION_QUEUE"),link:"main.dashboard.voice"}],a.mail=[{name:b.instant("APPLICATION_QUEUE"),link:"main.dashboard.mail"}]}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.dashboard",{"abstract":!0,url:"/dashboard",templateUrl:"app/dashboard/dashboard.html",controller:"DashboardCtrl"}).state("main.dashboard.voice",{url:"/voice",controller:"DashboardVoiceCtrl",templateUrl:"app/dashboard/voice/voice.html"}).state("main.dashboard.mail",{url:"/mail",controller:"DashboardMailCtrl",templateUrl:"app/dashboard/mail/mail.html"})}]),angular.module("xCallyShuttleApp").controller("DashboardMailCtrl",["$scope",function(a){a.message="Hello"}]),angular.module("xCallyShuttleApp").controller("DashboardVoiceCtrl",["$scope","$http","xAlert","socket",function(a,b,c,d){function e(b,c){console.log("element in check Function is",b);var d;return!b.queuecallerjoinAt||b.queuecallerleaveAt||b.queuecallercompleteAt||b.queuecallerabandonAt?b.queuecallerjoinAt&&b.queuecallerleaveAt&&!b.queuecallercompleteAt&&!b.queuecallerabandonAt?d="activeCalls":b.queuecallerjoinAt&&b.queuecallerleaveAt&&b.queuecallercompleteAt&&!b.queuecallerabandonAt?d="completedCalls":b.queuecallerjoinAt&&b.queuecallerleaveAt&&!b.queuecallercompleteAt&&b.queuecallerabandonAt&&(d="abandonedCalls"):d="waitCalls",console.log("result type is",d),c?d:void(d&&a.queueStats[d]++)}a.queueStats={abandonedCalls:0,completedCalls:0,waitCalls:0,activeCalls:0},a.getQueueStats=function(){b.get("/api/report/queues").then(function(b){a.queueReports=b.data,a.queueReports.forEach(function(a){e(a,!1)}),d.socket.on("report_queue:save",function(b){console.log("report save or update");var c=_.find(a.queueReports,{id:b.id}),d=a.queueReports.indexOf(c);if(c){console.log("found item, is an update");var f=e(c,!0);console.log("old item value is "+f+", decrementing..."),f&&a.queueStats[f]--,_.merge(a.queueReports[d],b)}else console.log("item not found in collection, is a create"),a.queueReports.unshift(b);console.log("checking new item type and increasing..."),e(b,!1)})})["catch"](function(a){c.show(a.message,"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.accounts",{url:"/accounts",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("FaxAccountListCtrl",["$scope","$http","xAlert","$translate","socket","Modal","$rootScope","$log","stResource",function(a,b,c,d,e,f,g,h,i){a.conf={faxAccountsByPage:{name:"10",value:10}},a.faxAccountsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.fax_accounts={checked:[]},a.check=function(b,c){c?a.fax_accounts.checked=angular.copy(_.pluck(a.displayedFaxAccounts,"id")):a.fax_accounts.checked=[]},a.initList=function(b){e.unsyncUpdates("fax_account"),b.url="/api/fax/accounts",i.getPage(b).then(function(c){a.displayedFaxAccounts=c.rows,b.pagination.numberOfPages=c.total_pages,g.updateTableConfig(a.faxAccountsByPage,a.displayedFaxAccounts.length),g.updateTableConfig(a.conf.faxAccountsByPage,a.displayedFaxAccounts.length)}),e.socket.on("fax_account:save",function(){a.initList(b)}),e.socket.on("fax_account:remove",function(c){a.fax_accounts.checked=_.without(a.fax_accounts.checked,c.id),a.initList(b)})},a.deleteItem=f.confirm["delete"](function(a){b["delete"]("api/fax/accounts/"+a).success(function(){c.show(d.instant("MESSAGE_FAX_ACCOUNT_DELETE_SUCCESS"),"success")}).error(function(){c.show(d.instant("MESSAGE_FAX_ACCOUNT_DELETE_FAILURE"),"danger")})}),a.deleteItems=f.confirm["delete"](function(){b["delete"]("/api/fax/accounts",{params:{id:a.fax_accounts.checked}}).success(function(){c.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){c.show(d.instant(a.message),"danger")})}),a.getFaxAccounts=function(b){return _.map(a.faxAccountsByPage,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.$on("$destroy",function(){e.unsyncUpdates("fax_account")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.accounts.list",{url:"/list",templateUrl:"app/fax/account/list/list.html",controller:"FaxAccountListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("FaxAccountViewCtrl",["$scope","$http","$stateParams","$translate","$location","WizardHandler","socket","xAlert","Modal",function(a,b,c,d,e,f,g,h,i){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.forms={},a.sortableOptions={stop:function(){b.post("api/fax/accounts/"+c.id+"/applications",{applications:_.pluck(a.faxApplications,"id")}).success(function(b){a.faxApplications=b}).error(function(a){console.error(a)})},"ui-floating":!0},a.goNext=function(){f.wizard().next()},a.formValidation=function(a){return a},a.initApplication=function(){a.forms={},a.application={}},a.deleteItem=i.confirm["delete"](function(a){b["delete"]("api/fax/applications/"+a).success(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.getAppdata=function(b,c){switch(b){case"agent":return a.agents?_.find(a.agents,{id:c}).name:c;case"queue":return a.faxQueues?_.find(a.faxQueues,{id:c}).name:c}return"UNKNOWN"},a.createItem=function(){switch(a.application.appdata=a.application.appdata.id,a.application.app){case"agent":a.application.UserId=parseInt(a.application.appdata,10);break;case"queue":a.application.FaxQueueId=parseInt(a.application.appdata,10)}a.application.FaxAccountId=c.id,b.post("api/fax/applications",a.application).success(function(){e.path("fax/accounts/view/"+c.id+"/routes")}).error(function(){h.show("Something went wrong!","danger")})},a.$watch("application.app",function(c){if(c){var d;switch(c){case"agent":d="api/agents";break;case"queue":d="api/fax/queues"}b.get(d).success(function(b){a.items=b.rows})}},!0),a.initView=function(){b.get("/api/trunks").success(function(b){a.trunks=b.rows}).error(function(a){console.log(a)}),b.get("/api/fax/accounts/"+c.id).success(function(b){a.account=b}).error(function(){})},a.getAgents=function(){b.get("api/fax/agents").success(function(b){a.agents=b})},a.getFaxApplications=function(){b.get("/api/fax/applications",{params:{FaxAccountId:c.id}}).success(function(b){a.faxApplications=b,g.socket.on("fax_application:remove",function(b){_.remove(a.faxApplications,{id:b.id})})}),b.get("/api/agents").success(function(b){a.agents=b.rows}),b.get("/api/fax/queues").success(function(b){a.faxQueues=b.rows})},a.updateItemFaxAccount=function(){b.put("/api/fax/accounts/"+c.id,a.account).success(function(){h.show(d.instant("MESSAGE_FAX_ACCOUNT_UPDATE_SUCCESS")+".","success")}).error(function(){h.show(d.instant("MESSAGE_FAX_ACCOUNT_UPDATE_FAILURE")+".","danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.accounts.view",{url:"/view/:id",templateUrl:"app/fax/account/view/view.html",controller:"FaxAccountViewCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}}).state("main.fax.accounts.view.settings",{url:"/settings",templateUrl:"app/fax/account/view/view.settings.html",authenticate:!0}).state("main.fax.accounts.view.routes",{url:"/routes",templateUrl:"app/fax/account/view/view.routes.html",authenticate:!0}).state("main.fax.accounts.view.applications",{url:"/applications",templateUrl:"app/fax/account/view/view.applications.html",authenticate:!0})}]),angular.module("xCallyShuttleApp").controller("FaxAccountWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler",function(a,b,c,d,e,f){a.translate=d,a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.$translate=d,a.forms={},a.item={},a.item.ecm=!1,a.item.minrate="9600",a.item.maxrate="33600",b.get("/api/trunks").success(function(b){a.trunks=b.rows}).error(function(a){console.error(a)})},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("api/fax/accounts",a.item).success(function(){e.show(d.instant("MESSAGE_FAX_ACCOUNT_CREATE_SUCCESS")+".","success"),c.path("/fax/accounts/list")}).error(function(){e.show(d.instant("MESSAGE_FAX_ACCOUNT_CREATE_FAILURE")+".","danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.accounts.wizard",{url:"/wizard",templateUrl:"app/fax/account/wizard/wizard.html",controller:"FaxAccountWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.automations",{url:"/automations",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("FaxAutomationListCtrl",["$scope","$http","$translate","$rootScope","stResource","Modal","socket","xAlert",function(a,b,c,d,e,f,g,h){a.conf={faxAutomationsByPage:{name:"10",value:10}},a.faxAutomationsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.onText="On",a.offText="Off",a.isActive=!0,a.size="mini",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.faxAutomations={checked:[]},a.check=function(b,c){c?a.faxAutomations.checked=angular.copy(_.pluck(a.displayedFaxAutomations,"id")):a.faxAutomations.checked=[]},a.getFaxAutomations=function(b){return _.map(a.displayedFaxAutomations,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){g.unsyncUpdates("fax_business_automation"),b.url="/api/fax/business/automations",e.getPage(b).then(function(c){a.displayedFaxAutomations=c.rows,b.pagination.numberOfPages=c.total_pages,d.updateTableConfig(a.faxAutomationsByPage,a.displayedFaxAutomations.length),d.updateTableConfig(a.conf.faxAutomationsByPage,a.displayedFaxAutomations.length)}),g.socket.on("fax_business_automation:save",function(){a.initList(b)}),g.socket.on("fax_business_automation:remove",function(c){a.faxAutomations.checked=_.without(a.faxAutomations.checked,c.id),a.initList(b)})},a.deleteItem=f.confirm["delete"](function(a){b["delete"]("/api/fax/business/automations/"+a).success(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){h.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.deleteItems=f.confirm["delete"](function(){b["delete"]("/api/fax/business/automations",{params:{id:a.faxAutomations.checked}}).success(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){h.show(c.instant(a.message),"danger")})}),a.updateItem=function(a,d){b.put("api/fax/business/automations/"+a,{status:d}).success(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){h.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.$on("$destroy",function(){g.unsyncUpdates("fax_business_automation")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.automations.list",{url:"/list",templateUrl:"app/fax/automation/list/list.html",controller:"FaxAutomationListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("FaxAutomationViewCtrl",["$scope","$stateParams","$http","automation","socket","xAlert","$translate","$log",function(a,b,c,d,e,f,g,h){a.initView=function(){a.forms={info:{}},a.automations=d.automations,c.get("/api/fax/business/automations/"+b.id).success(function(c){h.debug(c),a.test=c,a.automation=c,e.syncUpdatesByAttributes("business_condition",{FaxBusinessAutomationId:b.id},c.BusinessConditions)}).error(function(){f.show(g.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.updateAutomation=function(){c.put("/api/fax/business/automations/"+a.automation.id,{name:a.automation.name,description:a.automation.description}).success(function(a){h.debug(a),f.show(g.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(g.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger"),h.error(a)})},a.getOperatorsByCondition=function(a){var b=[],c=_.find(d.automations.conditions,{key:a});return c.operators&&c.operators.length&&(b=c.operators),b},a.getAttributesByCondition=function(a){var b=[],c=_.find(d.automations.conditions,{key:a});if(c.attributes&&c.attributes.length)switch(c.key){case"createdAt":b=_.map(c.attributes,function(a){return a.value=parseInt(a.value,10),a});break;default:b=c.attributes}return b},a.addNewCondition=function(b){c.post("/api/business/conditions",{type:b,condition:"status",FaxBusinessAutomationId:a.automation.id}).success(function(b){a.automation.BusinessConditions.push(b)}).error(function(a){console.error(a),f.show(g.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addNewAction=function(){c.post("/api/business/actions",{condition:"status",FaxBusinessAutomationId:a.automation.id}).success(function(b){a.automation.BusinessActions.push(b)}).error(function(a){console.error(a)})},a.removeCondition=function(a){c["delete"]("/api/business/conditions/"+a).success(function(a){console.log(a),f.show(g.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){console.error(a),f.show(g.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.removeAction=function(b){c["delete"]("/api/business/actions/"+b).success(function(b){console.log(b),a.automation.BusinessActions=_.reject(a.automation.BusinessActions,{id:b.id})}).error(function(a){console.error(a),f.show(g.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.updateCondition=function(a,b,d){var e={};e[b]=d,c.put("/api/business/conditions/"+a,e).success(function(a){console.log(a),f.show(g.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){console.error(a),f.show(g.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.updateAction=function(a,b,d){var e={};e[b]=d,c.put("/api/business/actions/"+a,e).success(function(a){console.log(a),f.show(g.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){console.error(a),f.show(g.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.automations.view",{url:"/view/:id",templateUrl:"app/fax/automation/view/view.html",controller:"FaxAutomationViewCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}}).state("main.fax.automations.view.settings",{url:"/settings",templateUrl:"app/fax/automation/view/view.settings.html",authenticate:!0}).state("main.fax.automations.view.routes",{url:"/routes",templateUrl:"app/fax/automation/view/view.routes.html",authenticate:!0}).state("main.fax.automations.view.application",{url:"/application",templateUrl:"app/fax/automation/view/view.application.html",authenticate:!0})}]),angular.module("xCallyShuttleApp").controller("FaxAutomationWizardCtrl",["$scope","$http","$location","automation","WizardHandler","xAlert","$translate",function(a,b,c,d,e,f,g){a.forms={},a.automations={or:[],and:[],actions:[]},a.addNewChoice=function(b){var c=angular.copy(d.automations);a.automations[b].push(c)},a.removeChoice=function(b,c){a.automations[b].splice(c)},a.goNext=function(){e.wizard().next()},a.createItem=function(){a.automations.or.forEach(function(a){a.condition=a.condition.key,a.type="or",delete a.conditions,delete a.actions}),a.automations.and.forEach(function(a){a.condition=a.condition.key,a.type="and",delete a.conditions,delete a.actions}),a.automations.actions.forEach(function(a){a.condition=a.condition.key,delete a.conditions,delete a.actions}),b.post("api/fax/business/automations",a.automations).success(function(){f.show(g.instant("MESSAGE_WELL_DONE"),"success"),c.path("/fax/automations/list")}).error(function(a){console.error(a),f.show(g.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.formValidation=function(a){return a}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.automations.wizard",{url:"/wizard",templateUrl:"app/fax/automation/wizard/wizard.html",controller:"FaxAutomationWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax",{url:"/fax",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("FaxInboxComposeCtrl",["$scope","$http","FileUploader","$location","Auth","xAlert","$cookieStore","$translate",function(a,b,c,d,e,f,g,h){a.forms={},a.form={to:[],sto:[]},b.get("api/fax/accounts").success(function(b){a.faxAccounts=b.rows}),a.isNewMessageFromEmpty=!0;var i=a.uploader=new c({url:"api/fax/messages",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+g.get("token")}});i.filters.push({name:"pdfFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|pdf|".indexOf(b)}}),i.onBeforeUploadItem=function(b){b.formData.push({accountId:a.form.from.id,toNum:a.form.sto[0],isNewRoom:a.isNewMessageFromEmpty,userId:e.getCurrentUser().id,html:a.form.html?a.form.html:""})},i.onSuccessItem=function(a,b,c,d){console.info("onSuccessItem",a,b,c,d)},i.onErrorItem=function(a,b,c,d){console.info("onErrorItem",a,b,c,d)},i.onCompleteAll=function(){i.clearQueue(),f.show(h.instant("MESSAGE_WELL_DONE"),"success"),d.path("/fax/inbox/incoming")},i.onWhenAddingFileFailed=function(){f.show(h.instant("MESSAGE_WRONG_FORMAT"),"danger")},a.sendFax=function(){return a.form.sto.length?void(i.queue.length?i.uploadAll():b.post("api/fax/messages",{accountId:a.form.from.id,toNum:a.form.sto[0],isNewRoom:a.isNewMessageFromEmpty,userId:e.getCurrentUser().id,html:a.form.html,onlyText:!0}).success(function(){f.show(h.instant("MESSAGE_WELL_DONE"),"success"),d.path("/fax/inbox/incoming")}).error(function(a){f.show(h.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger"),console.error(a)})):(a.forms.compose.to.$valid=!1,void(a.forms.compose.to.$invalid=!0))},a.cancel=function(){a.form.sto=[],delete a.form.from}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.inbox.compose",{url:"/compose",templateUrl:"app/fax/inbox/room/room.html",controller:"FaxInboxComposeCtrl"})}]),angular.module("xCallyShuttleApp").controller("FaxInboxCtrl",["$scope","$http","$location","$translate","$timeout","$notification","Auth","socket","$interval",function(a,b,c,d,e,f,g,h,i){a.go=function(a,d,e){e?b.put("/api/fax/rooms/"+d,{status:e}).success(function(){c.path(a)}).error(function(a){console.error(a)}):c.path(a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.inbox",{url:"/inbox",templateUrl:"app/fax/inbox/inbox.html",controller:"FaxInboxCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/inbox.css","assets/css/todo.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("FaxInboxIncomingCtrl",["$scope","$http","$location","socket","Auth","xAlert",function(a,b,c,d,e,f){a.$location=c,a.getRooms=function(){e.isAdmin()?b.get("api/fax/rooms").success(function(b){a.faxRooms=b,d.syncUpdates("fax_room",a.faxRooms)}).error(function(a){console.error(a),f.show($translate.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")}):b.get("api/fax/rooms/agent/"+e.getCurrentUser().id).success(function(b){a.faxRooms=b,d.socket.on("fax_room:update",function(b){b.UserId===e.getCurrentUser().id&&a.faxRooms.push(b)})}).error(function(a){f.show($translate.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger"),console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.inbox.incoming",{url:"/incoming",templateUrl:"app/fax/inbox/incoming/incoming.html",controller:"FaxInboxIncomingCtrl"})}]),angular.module("xCallyShuttleApp").controller("FaxInboxRoomCtrl",["$scope","$http","$stateParams","$location","FileUploader","socket","Auth","xAlert","$translate","$cookieStore",function(a,b,c,d,e,f,g,h,i,j){function k(){a.lastMessage=_.reject(a.faxRoom.FaxMessages,function(a){return"RECEIVED"!==a.status}),a.lastMessage=_.sortByOrder(a.lastMessage,["id"],["desc"])[0],a.lastMessage&&(console.log(a.faxRoom),a.form.from=a.faxRoom.FaxAccount,a.form.to=[a.lastMessage.From.phone],a.form.sto=[a.lastMessage.From.phone])}var l=a.uploader=new e({url:"api/fax/messages",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+j.get("token")}});l.filters.push({name:"pdfFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|pdf|".indexOf(b)}}),l.onBeforeUploadItem=function(b){console.log(a.form.from.id,a.form.sto[0],a.isNewMessageFromEmpty,c.id,g.getCurrentUser().id),b.formData.push({accountId:a.form.from.id,toNum:a.form.sto[0],isNewRoom:a.isNewMessageFromEmpty,roomId:c.id,userId:g.getCurrentUser().id,html:a.form.html}),console.log(b)},l.onSuccessItem=function(a,b,c,d){console.info("onSuccessItem",a,b,c,d)},l.onErrorItem=function(a,b,c,d){console.info("onErrorItem",b,c,d)},l.onCompleteAll=function(){l.clearQueue(),h.show(i.instant("MESSAGE_WELL_DONE"),"success")},l.onWhenAddingFileFailed=function(){h.show(i.instant("MESSAGE_WRONG_FORMAT"),"danger")},a.initRoomView=function(){a.isNewMessageFromEmpty=!0,a.Auth=g,a.forms={},a.form={to:[],sto:[]},b.get("api/agents").success(function(b){a.agents=b}),b.get("api/fax/accounts").success(function(b){a.faxAccounts=b.rows}),c.id&&b.get("/api/fax/rooms/"+c.id).success(function(b){a.faxRoom=b,a.isNewMessageFromEmpty=!1,f.syncUpdates("fax_message",[],function(b,c){"created"===b&&c.FaxRoomId===a.faxRoom.id&&(a.faxRoom.FaxMessages.push(c),k())}),k()}).error(function(a){console.error(a),h.show(i.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.sendFax=function(){return a.form.sto.length?void(l.queue.length?l.uploadAll():b.post("api/fax/messages",{accountId:a.form.from.id,toNum:a.form.sto[0],isNewRoom:a.isNewMessageFromEmpty,userId:g.getCurrentUser().id,html:a.form.html,onlyText:!0}).success(function(){h.show(i.instant("MESSAGE_WELL_DONE"),"success"),console.log("Fax Message sent")}).error(function(a){h.show(i.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger"),console.error(a)})):(a.forms.compose.to.$valid=!1,void(a.forms.compose.to.$invalid=!0))},a.assignAgent=function(a){b.put("/api/fax/rooms/"+c.id,{UserId:a}).success(function(){h.show(i.instant("MESSAGE_WELL_DONE"),"danger")}).error(function(){h.show(i.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.updateStatus=function(d){b.put("/api/fax/rooms/"+c.id,{status:d}).success(function(b){a.faxRoom.status=b.status,h.show(i.instant("MESSAGE_WELL_DONE"),"danger")}).error(function(a){console.error(a),h.show(i.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.cancel=function(){a.form.sto=[],delete a.form.from,l.clearQueue()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.inbox.room",{url:"/room/:id",templateUrl:"app/fax/inbox/room/room.html",controller:"FaxInboxRoomCtrl"})}]),angular.module("xCallyShuttleApp").controller("FaxQueueListCtrl",["$scope","$rootScope","$http","$translate","socket","Modal","xAlert","stResource",function(a,b,c,d,e,f,g,h){a.$on("$destroy",function(){e.unsyncUpdates("fax_queue")}),a.conf={queuesByPage:{name:"10",value:10}},a.queuesByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.faxQueues={checked:[]},a.check=function(b,c){
+c?a.faxQueues.checked=angular.copy(_.pluck(a.displayedFaxQueues,"id")):a.faxQueues.checked=[]},a.getFaxQueues=function(b){return _.map(a.displayedFaxQueues,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(c){e.unsyncUpdates("fax_queue"),c.url="/api/fax/queues",h.getPage(c).then(function(d){a.displayedFaxQueues=d.rows,c.pagination.numberOfPages=d.total_pages,b.updateTableConfig(d.queuesByPage,a.displayedFaxQueues.length),b.updateTableConfig(a.conf.queuesByPage,a.displayedFaxQueues.length)}),e.socket.on("fax_queue:save",function(){a.initList(c)}),e.socket.on("fax_queue:remove",function(b){a.faxQueues.checked=_.without(a.faxQueues.checked,b.id),a.initList(c)})},a.deleteItem=f.confirm["delete"](function(a){c["delete"]("/api/fax/queues/"+a).success(function(){g.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){g.show(a.message,"danger")})}),a.deleteItems=f.confirm["delete"](function(){c["delete"]("/api/fax/queues/",{params:{id:a.faxQueues.checked}}).success(function(){g.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){g.show(d.instant(a.message),"danger")})}),a.deleteItems=f.confirm["delete"](function(){c["delete"]("/api/fax/queues/",{params:{id:a.faxQueues.checked}}).success(function(){g.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){g.show(d.instant(a.message),"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.queues.list",{url:"/list",templateUrl:"app/fax/queue/list/list.html",controller:"FaxQueueListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.queues",{url:"/queues",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("FaxQueueViewCtrl",["$scope","$http","$translate","$stateParams","xAlert",function(a,b,c,d,e){var f=function(){return{select:function(c){b.post("/api/fax/queues/"+a.queue.id+"/agents",{agents:c}).success(function(){a.getTeams()}).error(function(a){console.error(a)})},deselect:function(c){b.put("/api/fax/queues/"+a.queue.id+"/agents",{agents:c}).success(function(){a.getTeams()}).error(function(a){console.error(a)})}}};a.getQueue=function(){b.get("/api/fax/queues/"+d.id).success(function(b){a.queue=b}).error(function(){e.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.updateFaxQueue=function(){var f=angular.copy(a.queue);b.put("/api/fax/queues/"+d.id,f).success(function(){e.show(c.instant("MESSAGE_WELL_DONE"),"danger")}).error(function(){e.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger"),a.queue=f})},a.getTeams=function(){b.get("/api/teams").success(function(c){a.teams=c.rows,b({url:"/api/fax/user_has_queues",method:"GET",params:{FaxQueueId:a.queue.id}}).success(function(b){ComponentsDropdowns.bindFaxQueue(a.teams,_.pluck(b,"UserId"),f)})}).error(function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.queues.view",{url:"/view/:id",templateUrl:"app/fax/queue/view/view.html",controller:"FaxQueueViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.fax.queues.view.settings",{url:"/settings",templateUrl:"app/fax/queue/view/view.settings.html"}).state("main.fax.queues.view.agents",{url:"/agents",templateUrl:"app/fax/queue/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").controller("FaxQueueWizardCtrl",["$scope","$http","WizardHandler","xAlert","$translate","$location",function(a,b,c,d,e,f){a.forms={},a.item={},a.next=function(){c.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("/api/fax/queues",a.item).success(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success"),f.path("/fax/queues/list")}).error(function(a){d.show(e.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.queues.wizard",{url:"/wizard",templateUrl:"app/fax/queue/wizard/wizard.html",controller:"FaxQueueWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("FaxTimelineListCtrl",["$scope","$http","socket","xAlert","$translate",function(a,b,c,d,e){function f(b){a.events>50&&a.events.pop(),a.events.unshift(b)}a.initList=function(){a.events=[],b.get("/api/events/channel/fax").success(function(a){a.forEach(f),c.socket.on("event:fax:save",f)}).error(function(a){console.error(a),d.show(e.instant("MESSAGE_FAX_ACCOUNT_GET_FAILURE"),"danger")})},a.$on("$destroy",function(){c.socket.removeAllListeners("event:fax:save")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.timeline.list",{url:"/list",templateUrl:"app/fax/timeline/list/list.html",controller:"FaxTimelineListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/timeline.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.fax.timeline",{url:"/timeline",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.integrations",{url:"/integrations",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").factory("Integration",["$resource",function(a){return a("/api/integrations/:id/:controller",{id:"@id"})}]),angular.module("xCallyShuttleApp").controller("IntegrationListCtrl",["$scope","Modal","socket","FileUploader","Integration","xAlert",function(a,b,c,d,e,f){a.integrationsByPage=10;var g=a.uploader=new d({url:"api/integrations",autoUpload:!0,removeAfterUpload:!0});g.filters.push({name:"zipFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|zip|".indexOf(b)}}),g.onSuccessItem=function(a,b,c,d){console.info("onSuccessItem",a,b,c,d),f.show(b.name,"success")},g.onErrorItem=function(a,b,c,d){console.info("onErrorItem",a,b,c,d),b.errors.forEach(function(a){f.show(a.message,"danger")})},a.deleteItem=b.confirm["delete"](function(a){e["delete"]({id:a},function(){f.show("Integration Removed","success")},function(a){f.show(a.data.errors,"danger")})}),a.initList=function(){a.integrations=e.query({},function(a){c.syncUpdates("integration",a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.integrations.list",{url:"/list",templateUrl:"app/integration/list/list.html",controller:"IntegrationListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.intervals",{url:"/intervals",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("IntervalListCtrl",["$scope","$http","socket","$translate","$rootScope","xAlert","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={intervalsByPage:{name:"10",value:10},labels:["name"]},a.intervalsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.intervals={checked:[]},a.check=function(b,c){c?a.intervals.checked=angular.copy(_.pluck(a.displayedIntervals,"id")):a.intervals.checked=[]},a.getIntervals=function(b){return _.map(a.displayedIntervals,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){c.unsyncUpdates("interval"),b.url="/api/intervals",h.getPage(b).then(function(c){a.displayedIntervals=c.rows,b.pagination.numberOfPages=c.total_pages,e.updateTableConfig(a.intervalsByPage,a.displayedIntervals.length),e.updateTableConfig(a.conf.intervalsByPage,a.displayedIntervals.length)}),c.socket.on("interval:save",function(){a.initList(b)}),c.socket.on("interval:remove",function(c){a.intervals.checked=_.without(a.intervals.checked,c.id),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/intervals/"+a).success(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){f.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){f.show(d.instant(a.message),"danger")})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/intervals",{params:{id:a.intervals.checked}}).success(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(d.instant(a.message),"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.intervals.list",{url:"/list",templateUrl:"app/interval/list/list.html",controller:"IntervalListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("IntervalViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","socket","$location","WizardHandler","Modal","interval",function(a,b,c,d,e,f,g,h,i,j){a.$translate=d,a.$interval=j.interval,a.forms={subinterval:void 0,general:void 0},a.initSubInterval=function(){a.subinterval={IntervalId:e.id},a.splittedInterval={t_from:moment(new Date),t_to:moment(new Date),wd_from:"always",wd_to:"always",md_from:"always",md_to:"always",m_from:"always",m_to:"always",alwaysTime:!0}},a.next=function(){b.post("/api/intervals/validate/",a.subinterval).success(function(a){console.log(a),a.length?c.show(d.instant("MESSAGE_EXIST_SUBINTERVAL"),"danger"):h.wizard().next()}).error(function(a){c.show(d.instant(a.message),"danger")})},a.previous=function(){h.wizard().previous()},a.exitValidation=function(a){return a},a.joinInterval=function(a){console.log(a);var b,c,d,e;return b=a.t_from&&a.t_to&&!a.alwaysTime?moment(a.t_from).format("HH:mm")+"-"+moment(a.t_to).format("HH:mm"):"*",a.wd_from&&"always"!==a.wd_from?(c=a.wd_from,a.wd_to&&"always"!==a.wd_to&&(c+="-"+a.wd_to)):c="*",a.md_from&&"always"!==a.md_from?(d=a.md_from,a.md_to&&"always"!==a.md_to&&(d+="-"+a.md_to)):d="*",a.m_from&&"always"!==a.m_from?(e=a.m_from,a.m_to&&"always"!==a.m_to&&(e+="-"+a.m_to)):e="*",b+","+c+","+d+","+e},a.getInterval=function(){b.get("/api/intervals/"+e.id).success(function(b){a.interval=b,a.subIntervals=b.SubIntervals,f.unsyncUpdates("interval"),f.socket.on("interval:remove",function(b){b.id&&_.remove(a.subIntervals,function(a){return b.id===a.id})}),f.socket.on("interval:update",function(b){var c=_.find(a.subIntervals,{id:b.id});c.interval=b.interval}),f.socket.on("interval:save",function(b){if(b.IntervalId===e.id){var c=_.find(a.subIntervals,{id:b.id});c||a.subIntervals.push(b)}})}).error(function(a){console.error(a),g.path("/intervals/list")})},a.updateInterval=function(){var f=angular.copy(a.interval);b.put("/api/intervals/"+e.id,f).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(b){c.show(d.instant(b.message),"danger"),a.interval=f})},a.getSubInterval=function(){b.get("/api/intervals/"+e.appId).success(function(b){a.splittedInterval={t_from:moment(new Date),t_to:moment(new Date)},a.subinterval=b;var c,d=b.interval?b.interval.split(","):["*","*","*","*"];d.forEach(function(b,d){switch(d){case 0:"*"!==b?(c=b.split("-"),a.splittedInterval.t_from=moment(c[0],"HH:mm"),a.splittedInterval.t_to=moment(c[1],"HH:mm"),a.splittedInterval.alwaysTime=!1):(a.splittedInterval.t_from=moment(new Date),a.splittedInterval.t_to=moment(new Date),a.splittedInterval.alwaysTime=!0);break;case 1:"*"!==b?(c=b.split("-"),a.splittedInterval.wd_from=_.capitalize(c[0]),a.splittedInterval.wd_to=c[1]?_.capitalize(c[1]):"always"):(a.splittedInterval.wd_from="always",a.splittedInterval.wd_to="always");break;case 2:"*"!==b?(c=b.split("-"),a.splittedInterval.md_from=c[0],a.splittedInterval.md_to=c[1]?c[1]:"always"):(a.splittedInterval.md_from="always",a.splittedInterval.md_to="always");break;case 3:"*"!==b?(c=b.split("-"),a.splittedInterval.m_from=_.capitalize(c[0]),a.splittedInterval.m_to=c[1]?_.capitalize(c[1]):"always"):(a.splittedInterval.m_from="always",a.splittedInterval.m_to="always")}})}).error(function(a){console.error(a),g.path("/intervals/view/"+e.id+"/subintervals")})},a.createItem=function(){a.subinterval.interval=a.joinInterval(a.splittedInterval),b.post("/api/intervals/",a.subinterval).success(function(){g.path("/intervals/view/"+e.id+"/subintervals")}).error(function(a){c.show(d.instant(a.message),"danger")})},a.updateItem=function(){a.subinterval.interval=a.joinInterval(a.splittedInterval),b.put("/api/intervals/"+e.appId,a.subinterval).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),g.path("/intervals/view/"+e.id+"/subintervals")}).error(function(a){c.show(d.instant(a.message),"danger")})},a.deleteItem=i.confirm["delete"](function(a){b["delete"]("/api/intervals/"+a).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){console.log(a),c.show(d.instant(a.message),"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.intervals.view",{url:"/view/:id",templateUrl:"app/interval/view/view.html",controller:"IntervalViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.intervals.view.settings",{url:"/settings",templateUrl:"app/interval/view/view.settings.html"}).state("main.intervals.view.subintervals",{url:"/subintervals",templateUrl:"app/interval/view/view.subintervals.html",cache:!1}).state("main.intervals.view.subinterval",{url:"/subinterval",templateUrl:"app/interval/view/view.subinterval.html",authenticate:!0}).state("main.intervals.view.subintervals.settings",{url:"/settings/:appId",templateUrl:"app/interval/view/view.subintervalSettings.html",authenticate:!0,controller:"IntervalViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("IntervalWizardCtrl",["$scope","$http","WizardHandler","$location","xAlert","$translate",function(a,b,c,d,e,f){a.forms={interval:void 0},a.item={},a.next=function(){b.post("/api/intervals/validate/",a.item).success(function(a){console.log(a),a.length?e.show(f.instant("MESSAGE_EXIST_INTERVAL"),"danger"):c.wizard().next()}).error(function(a){e.show(f.instant(a.message),"danger")})},a.previous=function(){c.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("/api/intervals/",a.item).success(function(a){d.path("/intervals/view/"+a.id+"/subintervals")}).error(function(a){e.show(f.instant(a.message),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.intervals.wizard",{url:"/wizard",templateUrl:"app/interval/wizard/wizard.html",controller:"IntervalWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("LoginCtrl",["$scope","Auth","$location","$window","$rootScope",function(a,b,c,d,e){a.userLogin={},a.userSignUp={},a.loginSubmitted=!1,a.signupSubmitted=!1,a.errorLogin=!1,a.errorSignup=!1,a.errorLog="",a.flagLogin1=!1,a.toogleLogin=function(){a.flagLogin1=!a.flagLogin1},e.bodyLayout="login",a.$on("$viewContentLoaded",function(){Metronic.init(),Layout.init()}),a.login=function(d){a.loginSubmitted=!0,d.$valid?b.login({name:a.userLogin.name,password:a.userLogin.password,remember:a.userLogin.remember}).then(function(){c.path("/dashboard/voice")})["catch"](function(b){a.errorLog=b.message,a.errorLogin=!0}):a.errorLogin=!0},a.signup=function(d){a.signupSubmitted=!0,d.$valid?b.createUser({email:a.userSignUp.email,fullname:a.userSignUp.fullname,name:a.userSignUp.name,password:a.userSignUp.password,role:a.userSignUp.role,online:!0}).then(function(){c.path("/")})["catch"](function(b){a.errorLog=b.message,a.errorSignup=!0}):a.errorSignup=!0},a.loginOauth=function(a){d.location.href="/auth/"+a}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("login",{url:"/login",templateUrl:"app/login/login.html",controller:"LoginCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/login.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.accounts",{url:"/accounts",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MailAccountListCtrl",["$scope","$http","socket","$translate","$rootScope","Modal","stResource","xAlert",function(a,b,c,d,e,f,g,h){a.conf={mailAccountsByPage:{name:"10",value:10}},a.mailAccountsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.mailAccounts={checked:[]},a.check=function(b,c){c?a.mailAccounts.checked=angular.copy(_.pluck(a.displayedMailAccounts,"id")):a.mailAccounts.checked=[]},a.getMailAccounts=function(b){return _.map(a.displayedMailAccounts,function(a){var c={};return b.forEach(function(b){_.isObject(b)?_.forIn(b,function(b,d){c[b]=a[d][b]}):c[b]=a[b]}),c})},a.initList=function(b){c.unsyncUpdates("mail_server_in"),c.unsyncUpdates("mail_account"),b.url="/api/mail/accounts",g.getPage(b).then(function(c){a.displayedMailAccounts=c.rows,b.pagination.numberOfPages=c.total_pages}),c.socket.on("mail_server_in:save",function(){a.initList(b)}),c.socket.on("mail_account:save",function(){a.initList(b)}),c.socket.on("mail_account:remove",function(c){a.mailAccounts.checked=_.without(a.mailAccounts.checked,c.id),a.initList(b)})},a.deleteItem=f.confirm["delete"](function(a){b["delete"]("/api/mail/accounts/"+a).success(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){h.show(a.message,"danger")})}),a.deleteItems=f.confirm["delete"](function(){b["delete"]("/api/mail/accounts",{params:{id:a.mailAccounts.checked}}).success(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){h.show(d.instant(a.message),"danger")})}),a.restart=function(a){c.socket.emit("IMAP:"+a+":RESTART",{msg:"IMAP:"+a+":RESTART"})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.accounts.list",{url:"/list",templateUrl:"app/mail/account/list/list.html",controller:"MailAccountListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.accounts.view.actions",{url:"/actions",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MailAccountViewActionListCtrl",["$scope","$http","$translate","$stateParams","socket","xAlert","Modal",function(a,b,c,d,e,f,g){a.initActons=function(){console.log(d),a.sortableOptions={stop:function(){console.log("stop",_.pluck(a.mailApplications,"id")),b.post("api/mail/accounts/"+d.accountId+"/applications",{applications:_.pluck(a.mailApplications,"id")}).success(function(b){angular.copy(b,a.mailApplications)}).error(function(a){console.error(a)})}},b.get("/api/mail/applications",{params:{MailAccountId:d.accountId}}).success(function(b){a.mailApplications=b,e.socket.on("mail_application:remove",function(b){_.remove(a.mailApplications,{id:b.id})})})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("api/mail/applications/"+a).success(function(){f.show(c.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){f.show(a.message,"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.accounts.view.actions.list",{url:"/list",templateUrl:"app/mail/account/view/action/list/list.html",controller:"MailAccountViewActionListCtrl"})}]),angular.module("xCallyShuttleApp").controller("MailAccountViewActionViewCtrl",["$scope","$http","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval",function(a,b,c,d,e,f,g,h,i,j){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initAction=function(){a.$application=i.application,a.$stateParams=c,a.$interval=j.interval,a.forms={},a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"}],b.get("/api/mail/applications/"+c.actionId).success(function(b){if(a.application=b,a.application.alwaysTime=!1,a.application.IntervalId)a.application.intType="list";else switch(a.application.interval){case"*,*,*,*":a.application.intType="always";break;default:a.application.intType="custom"}var c=a.application.interval.split(",");"*"===c[0]?a.application.alwaysTime=!0:(a.application.t_from=moment(new Date),a.application.t_to=moment(new Date),a.application.t_from.hour(c[0].split("-")[0].split(":")[0]),a.application.t_from.minute(c[0].split("-")[0].split(":")[1]),a.application.t_to.hour(c[0].split("-")[1].split(":")[0]),a.application.t_to.minute(c[0].split("-")[1].split(":")[1])),"*"===c[1]?(a.application.wd_from="always",a.application.wd_to="always"):(a.application.wd_from=c[1].split("-")[0],a.application.wd_to=c[1].split("-")[1]),"*"===c[2]?(a.application.md_from="always",a.application.md_to="always"):(a.application.md_from=c[2].split("-")[0],a.application.md_to=c[2].split("-")[1]),"*"===c[3]?(a.application.m_from="always",a.application.m_to="always"):(a.application.m_from=c[3].split("-")[0],a.application.m_to=c[3].split("-")[1]),console.log(c),a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})}).error(function(a){console.error(a)})},a.getQueues=function(){b.get("/api/mail/queues",{params:{page:0,per_page:500}}).success(function(b){a.queues=b.rows}).error(function(a){console.error(a)})},a.getAgents=function(){b.get("/api/agents",{params:{page:0,per_page:500}}).success(function(b){a.agents=b.rows}).error(function(a){console.error(a)})},a.getIntervals=function(){b.get("/api/intervals",{params:{page:0,per_page:500}}).success(function(b){a.intervals=b.rows}).error(function(a){console.error(a)})},a.updateItem=function(){var e=["*","*","*","*"],g={app:a.application.app,timeout:a.application.timeout,MailAccountId:c.id};switch(a.application.app){case"agent":g.UserId=a.application.UserId;break;case"queue":g.MailQueueId=a.application.MailQueueId}switch(a.application.intType){case"always":g.interval=e.join(","),delete a.application.IntervalId;break;case"custom":a.application.alwaysTime||(e[0]=a.application.alwaysTime?"*":a.application.t_from_hm+"-"+a.application.t_to_hm),e[1]=a.application.wd_from&&a.application.wd_to?a.application.wd_from+"-"+a.application.wd_to:"*",e[2]=a.application.md_from&&a.application.md_to?a.application.md_from+"-"+a.application.md_to:"*",e[3]=a.application.m_from&&a.application.m_to?a.application.m_from+"-"+a.application.m_to:"*",g.interval=e.join(","),delete a.application.IntervalId;break;case"list":g.IntervalId=a.application.IntervalId}b.put("/api/mail/applications/"+c.actionId,g).success(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(a.message,"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.accounts.view.actions.view",{url:"/view/:actionId",templateUrl:"app/mail/account/view/action/view/view.html",controller:"MailAccountViewActionViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("MailAccountViewActionWizardCtrl",["$scope","$http","$stateParams","$translate","$location","xAlert","WizardHandler","socket","application","interval",function(a,b,c,d,e,f,g,h,i,j){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){console.log(c),a.apps=[{name:"Queue",value:"queue"},{name:"Agent",value:"agent"}],a.$application=i.application,a.$stateParams=c,a.$interval=j.interval,a.forms={},a.application={alwaysTime:!0},a.$watch("application.t_from",function(b){a.application.t_from_hm=moment(b).format("HH:mm")}),a.$watch("application.t_to",function(b){a.application.t_to_hm=moment(b).format("HH:mm")})},a.getQueues=function(){b.get("/api/mail/queues",{params:{page:0,per_page:500}}).success(function(b){a.queues=b.rows}).error(function(a){console.error(a)})},a.getAgents=function(){b.get("/api/agents",{params:{page:0,per_page:500}}).success(function(b){a.agents=b.rows}).error(function(a){console.error(a)})},a.getIntervals=function(){b.get("/api/intervals",{params:{page:0,per_page:500}}).success(function(b){a.intervals=b.rows}).error(function(a){console.error(a)})},a.createItem=function(){var d=["*","*","*","*"],f={app:a.application.app,timeout:a.application.timeout,MailAccountId:c.accountId};switch(a.application.app){case"agent":f.UserId=a.application.UserId;break;case"queue":f.MailQueueId=a.application.MailQueueId}switch(a.application.intType){case"always":f.interval=d.join(","),delete a.application.IntervalId;break;case"custom":a.application.alwaysTime||(d[0]=a.application.alwaysTime?"*":a.application.t_from_hm+"-"+a.application.t_to_hm),d[1]=a.application.wd_from&&a.application.wd_to?a.application.wd_from+"-"+a.application.wd_to:"*",d[2]=a.application.md_from&&a.application.md_to?a.application.md_from+"-"+a.application.md_to:"*",d[3]=a.application.m_from&&a.application.m_to?a.application.m_from+"-"+a.application.m_to:"*",f.interval=d.join(","),delete a.application.IntervalId;break;case"list":f.IntervalId=a.application.IntervalId}b.post("/api/mail/applications",f).success(function(){e.path("/mail/accounts/view/"+c.accountId+"/actions/list")}).error(function(a){console.error(a)})},a.formValidation=function(a){return a},a.next=function(){g.wizard().next()}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.accounts.view.actions.wizard",{url:"/wizard",templateUrl:"app/mail/account/view/action/wizard/wizard.html",controller:"MailAccountViewActionWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("MailAccountViewCtrl",["$scope","$http","$stateParams","$translate","$location","xAlert",function(a,b,c,d,e,f){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initView=function(){b.get("/api/mail/accounts/"+c.accountId).success(function(b){a.account=b})},a.updateItemMailAccount=function(){b.put("/api/mail/accounts/"+c.accountId,{name:a.account.name,description:a.account.description,address:a.account.address}).success(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.updateItemMailServerIn=function(){b.put("/api/mail/servers/in/"+a.account.MailServerIn.id,a.account.MailServerIn).success(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.updateItemMailServerOut=function(){b.put("/api/mail/servers/out/"+a.account.MailServerOut.id,a.account.MailServerOut).success(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.accounts.view",{url:"/view/:accountId",templateUrl:"app/mail/account/view/view.html",controller:"MailAccountViewCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}}).state("main.mail.accounts.view.settings",{url:"/settings",templateUrl:"app/mail/account/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("MailAccountWizardCtrl",["$scope","$http","$location","$translate","WizardHandler","xAlert",function(a,b,c,d,e,f){a.isActive=!0,a.size="small",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.initWizard=function(){a.forms={},a.info={},a["in"]={"delete":!1,ssl:!0,protocol:"IMAP",port:993,mailbox:"INBOX",filter:"UNSEEN"},a.out={ssl:!0,port:465},a.$translate=d},a.goNext=function(){e.wizard().next()},a.formValidation=function(a){return a},a.createItem=function(){var e={name:a.info.name,address:a.info.address,description:a.info.description,incoming:a["in"],outgoing:a.out};b.post("api/mail/accounts",e).success(function(){c.path("/mail/accounts/list")}).error(function(a){console.log(a),f.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.accounts.wizard",{url:"/wizard",templateUrl:"app/mail/account/wizard/wizard.html",controller:"MailAccountWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.automations",{url:"/automations",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MailAutomationListCtrl",["$scope","$http","$translate","$rootScope","stResource","Modal","socket","xAlert",function(a,b,c,d,e,f,g,h){a.conf={mailAutomationsByPage:{name:"10",value:10}},a.mailAutomationsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.onText="On",a.offText="Off",a.isActive=!0,a.size="mini",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.mailAutomations={checked:[]},a.check=function(b,c){c?a.mailAutomations.checked=angular.copy(_.pluck(a.displayedMailAutomations,"id")):a.mailAutomations.checked=[]},a.getMailAutomations=function(b){return _.map(a.displayedMailAutomations,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){g.unsyncUpdates("mail_business_automation"),b.url="/api/mail/business/automations",e.getPage(b).then(function(c){a.displayedMailAutomations=c.mailAutomations,b.pagination.numberOfPages=c.total_pages,d.updateTableConfig(a.mailAutomationsByPage,a.displayedMailAutomations.length),d.updateTableConfig(a.conf.mailAutomationsByPage,a.displayedMailAutomations.length)}),g.socket.on("mail_business_automation:save",function(){a.initList(b)}),g.socket.on("mail_business_automation:remove",function(c){a.mailAutomations.checked=_.without(a.mailAutomations.checked,c.id),a.initList(b)})},a.deleteItem=f.confirm["delete"](function(a){b["delete"]("/api/mail/business/automations/"+a).success(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"danger")}).error(function(){h.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.deleteItems=f.confirm["delete"](function(){b["delete"]("/api/mail/business/automations",{params:{id:a.mailAutomations.checked}}).success(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){h.show(c.instant(a.message),"danger")})}),a.updateItem=function(a,d){b.put("api/mail/business/automations/"+a,{status:d}).success(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){h.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.automations.list",{url:"/list",templateUrl:"app/mail/automation/list/list.html",controller:"MailAutomationListCtrl"})}]),angular.module("xCallyShuttleApp").controller("MailAutomationViewCtrl",["$scope","$stateParams","$http","$translate","automation","socket","xAlert",function(a,b,c,d,e,f,g){
+a.initView=function(){a.forms={info:{}},a.automations=e.automations,c.get("/api/mail/business/automations/"+b.id).success(function(c){a.test=c,a.automation=c,f.syncUpdatesByAttributes("business_condition",{MailBusinessAutomationId:b.id},c.BusinessConditions)}).error(function(){})},a.updateAutomation=function(){c.put("/api/mail/business/automations/"+a.automation.id,{name:a.automation.name,description:a.automation.description}).success(function(a){g.show(d.instant("MESSAGE_WELL_DONE"),"success"),console.log(a)}).error(function(a){console.error(a)})},a.getOperatorsByCondition=function(a){var b=[],c=_.find(e.automations.conditions,{key:a});return c.operators&&c.operators.length&&(b=c.operators),b},a.getAttributesByCondition=function(a){var b=[],c=_.find(e.automations.conditions,{key:a});if(c.attributes&&c.attributes.length)switch(c.key){case"createdAt":b=_.map(c.attributes,function(a){return a.value=parseInt(a.value,10),a});break;default:b=c.attributes}return b},a.addNewCondition=function(b){c.post("/api/business/conditions",{type:b,condition:"status",MailBusinessAutomationId:a.automation.id}).success(function(b){a.automation.BusinessConditions.push(b)}).error(function(a){console.error(a)})},a.removeCondition=function(a){c["delete"]("/api/business/conditions/"+a).success(function(a){console.log(a)}).error(function(a){console.error(a)})},a.addNewAction=function(){c.post("/api/business/actions",{condition:"status",MailBusinessAutomationId:a.automation.id}).success(function(b){a.automation.BusinessActions.push(b)}).error(function(a){console.error(a)})},a.removeAction=function(b){c["delete"]("/api/business/actions/"+b).success(function(b){a.automation.BusinessActions=_.reject(a.automation.BusinessActions,{id:b.id})}).error(function(a){console.error(a)})},a.updateCondition=function(a,b,d){var e={};e[b]=d,c.put("/api/business/conditions/"+a,e).error(function(a){console.error(a)})},a.updateAction=function(a,b,d){var e={};e[b]=d,c.put("/api/business/actions/"+a,e).success(function(a){console.log(a)}).error(function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.automations.view",{url:"/view/:id",templateUrl:"app/mail/automation/view/view.html",controller:"MailAutomationViewCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}}).state("main.mail.automations.view.settings",{url:"/settings",templateUrl:"app/mail/automation/view/view.settings.html"}).state("main.mail.automations.view.routes",{url:"/routes",templateUrl:"app/mail/automation/view/view.routes.html"}).state("main.mail.automations.view.application",{url:"/application",templateUrl:"app/mail/automation/view/view.application.html"})}]),angular.module("xCallyShuttleApp").controller("MailAutomationWizardCtrl",["$scope","$http","$location","$translate","automation","WizardHandler","xAlert",function(a,b,c,d,e,f,g){a.forms={},a.automations={or:[],and:[],actions:[]},a.addNewChoice=function(b){var c=angular.copy(e.automations);a.automations[b].push(c)},a.removeChoice=function(b,c){a.automations[b].splice(c)},a.goNext=function(){return a.automations.actions.length?a.automations.or.length||a.automations.and.length?void f.wizard().next():(g.show(d.instant("MESSAGE_INSERT_AT_LEAST_ONE_CONDITION"),"danger"),!1):(g.show(d.instant("MESSAGE_INSERT_AT_LEAST_ONE_ACTION"),"danger"),!1)},a.createItem=function(){a.automations.or.forEach(function(a){a.condition=a.condition.key,a.type="or",delete a.conditions,delete a.actions}),a.automations.and.forEach(function(a){a.condition=a.condition.key,a.type="and",delete a.conditions,delete a.actions}),a.automations.actions.forEach(function(a){a.condition=a.condition.key,delete a.conditions,delete a.actions}),b.post("api/mail/business/automations",a.automations).success(function(){c.path("/mail/automations/list")}).error(function(){g.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG","danger"))})},a.formValidation=function(a){return a}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.automations.wizard",{url:"/wizard",templateUrl:"app/mail/automation/wizard/wizard.html",controller:"MailAutomationWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("MailComposeCtrl",["$scope","$http","$location","$cookieStore","$translate","xAlert","FileUploader",function(a,b,c,d,e,f,g){var h=a.uploader=new g({url:"api/mail/messages",withCredentials:!0,headers:{Authorization:"Bearer "+d.get("token")},queueLimit:1});h.onBeforeUploadItem=function(b){b.formData.push({mailAccountId:a.form.from.id,status:"SENDING",roomStatus:"OPEN",from:a.form.from.address,to:a.form.sto.join(";"),cc:a.form.scc.join(";"),subject:a.form.subject||null,html:a.form.html||null,text:a.form.text||null,attachment:!0})},h.onSuccessItem=function(a,b,c,d){console.info("onSuccessItem",a,b,c,d),f.show(e.instant("MESSAGE_MAIL_MESSAGE_SEND_SUCCESS"),"success")},h.onErrorItem=function(a,b,c,d){console.info("onErrorItem",a,b,c,d),f.show(e.instant("MESSAGE_MAIL_MESSAGE_SEND_FAILURE"),"danger")},h.onCompleteAll=function(){console.log("onCompleteAll"),c.path("/mail/inbox/incoming")},a.forms={},a.form={to:[],sto:[],cc:[],scc:[]},b.get("api/mail/accounts").success(function(b){a.mailAccounts=b.rows}),a.sendMail=function(){if(h.queue.length)console.log("file"),h.uploadAll();else{console.log("no file");var d={mailAccountId:a.form.from.id,status:"SENDING",roomStatus:"OPEN",from:a.form.from.address,to:a.form.sto.join(";"),cc:a.form.scc.join(";"),subject:a.form.subject||null,html:a.form.html||null,text:a.form.text||null};b.post("/api/mail/messages",d).success(function(){f.show(e.instant("MESSAGE_MAIL_MESSAGE_SEND_SUCCESS"),"success"),c.path("/mail/inbox/incoming")}).error(function(){f.show(e.instant("MESSAGE_MAIL_MESSAGE_SEND_FAILURE"),"danger")})}},a.cancel=function(){a.form.sto=[],a.form.scc=[],delete a.form.from,delete a.form.text,delete a.form.html}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.inbox.compose",{url:"/compose",templateUrl:"app/mail/inbox/room/room.html",controller:"MailComposeCtrl"})}]),angular.module("xCallyShuttleApp").controller("MailInboxCtrl",["$scope","$http","$location",function(a,b,c){a.go=function(a){c.path(a)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.inbox",{url:"/inbox",templateUrl:"app/mail/inbox/inbox.html",controller:"MailInboxCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/inbox.css","assets/css/todo.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("MailIncomingCtrl",["$scope","$http","$location","$translate","$timeout","socket","xAlert","Auth","stResource","Modal",function(a,b,c,d,e,f,g,h,i,j){a.$location=c,a.conf={mailRoomsByPage:{name:"10",value:10},labels:["fullname","name","email"],test:"OPEN"},a.mailRoomsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.mailRooms={checked:[]},a.check=function(b,c){c?a.mailRooms.checked=angular.copy(_.pluck(a.displayedMailRooms,"id")):a.mailRooms.checked=[]},a.initList=function(b){f.unsyncUpdates("mail_room"),b.search.predicateObject||(b.search.predicateObject={}),b.sort.predicate="createdAt",b.sort.reverse=!0,h.isAdmin()?(f.socket.on("mail_room:save",function(){e(function(){g.show(d.instant("MESSAGE_MAIL_NEW_INCOMING_MAIL"),"success"),a.initList(b)},2e3)}),f.socket.on("mail_room:remove",function(c){a.mailRooms.checked=_.without(a.mailRooms.mailRooms,c.id),a.initList(b)})):(f.socket.on("mail_room:save",function(c){c.UserId===h.getCurrentUser().id&&a.initList(b)}),f.socket.on("mail_room:remove",function(c){c.UserId===h.getCurrentUser().id&&(a.mailRooms.checked=_.without(a.mailRooms.checked,c.id),a.initList(b))}),b.search.predicateObject.UserId=h.getCurrentUser().id),b.url="/api/mail/rooms",i.getPage(b).then(function(c){a.displayedMailRooms=c.mailRooms,b.pagination.numberOfPages=c.total_pages})},a.deleteItems=j.confirm["delete"](function(){b["delete"]("/api/mail/rooms",{params:{id:a.mailRooms.checked}}).success(function(){g.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){g.show(d.instant(a.message),"danger")})}),a.$on("$destroy",function(){f.unsyncUpdates("mail_room")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.inbox.incoming",{url:"/incoming",templateUrl:"app/mail/inbox/incoming/incoming.html",controller:"MailIncomingCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/inbox.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("MailRoomCtrl",["$scope","$http","$stateParams","$timeout","$cookieStore","$location","$translate","$log","xAlert","Auth","socket","FileUploader",function(a,b,c,d,e,f,g,h,i,j,k,l){function m(){a.lastMessage=_.reject(a.mailRoom.MailMessages,function(a){return"RECEIVED"!==a.status}),a.lastMessage=_.sortByOrder(a.lastMessage,["id"],["desc"])[0],a.lastMessage&&(a.form.subject=a.mailRoom.subject,a.form.from=a.mailRoom.MailAccount,a.form.to=[a.lastMessage.From.email],a.form.cc=a.lastMessage.To.concat(a.lastMessage.Cc),a.form.cc=_.pluck(a.form.cc,"email"),a.form.cc=_.remove(a.form.cc,function(b){return a.mailRoom.MailAccount?b!==a.mailRoom.MailAccount.address:void 0}),a.form.cc=a.form.cc,a.form.inReplyTo=a.lastMessage.messageId,a.form.MailRoomId=a.lastMessage.MailRoomId)}var n=a.uploader=new l({url:"api/mail/messages",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+e.get("token")}});n.onBeforeUploadItem=function(b){var c={mailAccountId:a.form.from.id,status:"SENDING",roomStatus:"OPEN",from:a.form.from.address,to:a.form.sto.join(";"),cc:a.form.scc.join(";"),subject:a.form.subject||null,html:a.form.html||null,text:a.form.text||null,MailRoomId:a.mailRoom.id};a.mailRoom.roomId&&(c.inReplyTo=a.mailRoom.roomId),b.formData.push(c)},n.onSuccessItem=function(a,b,c,d){console.info("onSuccessItem",a,b,c,d)},n.onErrorItem=function(a,b,c,d){console.info("onErrorItem",a,b,c,d)},n.onCompleteAll=function(){console.log("onCompleteAll"),f.path("/mail/inbox/incoming")},a.initRoomView=function(){a.Auth=j,a.forms={},a.form={to:[],sto:[],cc:[],scc:[]},b.get("/api/agents").success(function(b){a.agents=b.rows}),b.get("/api/mail/accounts").success(function(b){a.mailAccounts=b.rows}),b.get("/api/mail/rooms/"+c.id).success(function(c){a.mailRoom=c,k.syncUpdatesByAttributes("mail_message",{MailRoomId:a.mailRoom.id},a.mailRoom.MailMessages),"NEW"===a.mailRoom.status&&b.put("/api/mail/rooms/"+a.mailRoom.id,{status:"OPEN"}),m()}).error(function(){f.path("/mail/inbox/incoming")})},a.getMailString=function(a){return a.fullname?a.fullname+" <"+a.email+">":"<"+a.email+">"},a.sendMail=function(){if(n.queue.length)n.uploadAll();else{if(!a.form.to.length)return a.forms.compose.to.$valid=!1,void(a.forms.compose.to.$invalid=!0);a.forms.compose.to.$valid=!0,a.forms.compose.to.$invalid=!1;var c={mailAccountId:a.form.from.id,status:"SENDING",roomStatus:"OPEN",from:a.form.from.address,to:a.form.sto.join(";"),cc:a.form.scc.join(";"),subject:a.form.subject||null,html:a.form.html||null,text:a.form.text||null,MailRoomId:a.mailRoom.id};a.mailRoom.roomId&&(c.inReplyTo=a.mailRoom.roomId),h.debug(c),b.post("/api/mail/messages",c).success(function(){i.show(g.instant("MESSAGE_MAIL_MESSAGE_SEND_SUCCESS"),"success"),Metronic.scrollTop()}).error(function(){i.show(g.instant("MESSAGE_MAIL_MESSAGE_SEND_FAILURE"),"danger")})}},a.cancel=function(){a.form.sto=[],a.form.scc=[],delete a.form.text},a.updateStatus=function(d){b.put("/api/mail/rooms/"+c.id,{status:d}).success(function(b){a.mailRoom.status=b.status,i.show(g.instant("MESSAGE_STATUS_UPDATE_SUCCESS"),"success")}).error(function(){i.show(g.instant("MESSAGE_STATUS_UPDATE_FAILURE"),"danger")})},a.assignAgent=function(a){b.put("/api/mail/rooms/"+c.id,{UserId:a}).success(function(){i.show(g.instant("MESSAGE_MAIL_MESSAGE_ASSIGNEMNT_SUCCESS"),"success")}).error(function(){i.show(g.instant("MESSAGE_MAIL_MESSAGE_ASSIGNEMNT_FAILURE"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.inbox.room",{url:"/room/:id",templateUrl:"app/mail/inbox/room/room.html",controller:"MailRoomCtrl",authenticate:!0})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail",{url:"/mail",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MailQueueListCtrl",["$scope","$http","$translate","$rootScope","socket","Modal","stResource","xAlert",function(a,b,c,d,e,f,g,h){a.$on("$destroy",function(){e.unsyncUpdates("mail_queue")}),a.conf={queuesByPage:{name:"10",value:10}},a.queuesByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.mailQueues={checked:[]},a.check=function(b,c){c?a.mailQueues.checked=angular.copy(_.pluck(a.displayedMailQueues,"id")):a.mailQueues.checked=[]},a.getMailQueues=function(b){return _.map(a.displayedMailQueues,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){e.unsyncUpdates("mail_queue"),b.url="/api/mail/queues/",g.getPage(b).then(function(c){a.displayedMailQueues=c.rows,b.pagination.numberOfPages=c.total_pages,d.updateTableConfig(c.queuesByPage,a.displayedMailQueues.length),d.updateTableConfig(a.conf.queuesByPage,a.displayedMailQueues.length)}),e.socket.on("mail_queue:save",function(){a.initList(b)}),e.socket.on("mail_queue:remove",function(c){a.mailQueues.checked=_.without(a.mailQueues.checked,c.id),a.initList(b)})},a.deleteItem=f.confirm["delete"](function(a){b["delete"]("/api/mail/queues/"+a).success(function(){h.show(c.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){h.show(a.message,"danger")})}),a.deleteItems=f.confirm["delete"](function(){b["delete"]("/api/mail/queues/",{params:{id:a.mailQueues.checked}}).success(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){h.show(c.instant(a.message),"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.queues.list",{url:"/list",templateUrl:"app/mail/queue/list/list.html",controller:"MailQueueListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.queues",{url:"/queues",template:"<div ui-view></div>","abstract":!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").controller("MailQueueViewCtrl",["$scope","$http","$translate","$stateParams","xAlert",function(a,b,c,d,e){var f=function(){return{select:function(c){b.post("/api/mail/queues/"+a.queue.id+"/agents",{agents:c}).success(function(){a.getTeams()}).error(function(a){console.error(a)})},deselect:function(c){b.put("/api/mail/queues/"+a.queue.id+"/agents",{agents:c}).success(function(){a.getTeams()}).error(function(a){console.error(a)})}}};a.getQueue=function(){b.get("/api/mail/queues/"+d.id).success(function(b){a.queue=b}).error(function(a){console.error(a)})},a.updateMailQueue=function(){var f=angular.copy(a.queue);b.put("/api/mail/queues/"+d.id,f).success(function(){e.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(b){e.show(b.message,"success"),a.queue=f})},a.getTeams=function(){b.get("/api/teams").success(function(c){a.teams=c.rows,b.get("/api/mail/user_has_queues",{params:{MailQueueId:a.queue.id}}).success(function(b){ComponentsDropdowns.bindMailQueue(a.teams,_.pluck(b,"UserId"),f)})}).error(function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.queues.view",{url:"/view/:id",templateUrl:"app/mail/queue/view/view.html",controller:"MailQueueViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.mail.queues.view.settings",{url:"/settings",templateUrl:"app/mail/queue/view/view.settings.html"}).state("main.mail.queues.view.agents",{url:"/agents",templateUrl:"app/mail/queue/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").controller("MailQueueWizardCtrl",["$scope","$http","$location","WizardHandler","xAlert",function(a,b,c,d,e){a.forms={},a.item={},a.next=function(){d.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("/api/mail/queues",a.item).success(function(){c.path("/mail/queues/list")}).error(function(a){e.show(a.message,"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.queues.wizard",{url:"/wizard",templateUrl:"app/mail/queue/wizard/wizard.html",controller:"MailQueueWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MailRealtimeViewAgentCtrl",["$scope","$http","socket",function(a,b,c){console.log("MailRealtimeViewAgentCtrl"),a.conf={agentsByPage:{name:"10",value:10},labels:["fullname","name","email"]},a.agentsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.$on("$destroy",function(){c.unsyncUpdates("report_mail:save"),c.unsyncUpdates("report_mail:update")}),a.initAgents=function(){b.get("/api/report/mails").success(function(b){a.agents=b,c.socket.on("report_mail:save",function(b){var c=_.find(a.agents,{id:b.id});c||a.agents.unshift(b)}),c.socket.on("report_mail:update",function(b){var c=_.find(a.agents,{id:b.id}),d=a.agents.indexOf(c);c&&_.merge(a.agents[d],b)})}).error(function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("MailRealtimeViewSessionCtrl",["$scope","$http","socket",function(a,b,c){a.conf={sessionsByPage:{name:"10",value:10},labels:["fullname","name","email"]},a.sessionsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.$on("$destroy",function(){c.unsyncUpdates("report_mail:save"),c.unsyncUpdates("report_mail:update")}),a.initMails=function(){b.get("/api/report/mail/sessions").success(function(b){a.sessions=b,c.socket.on("report_mail_session:save",function(b){var c=_.find(a.sessions,{id:b.id}),d=a.sessions.indexOf(c);c?_.merge(a.sessions[d],b):a.sessions.unshift(b)})}).error(function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("MailRealtimeViewCtrl",["$scope",function(a){a.agents=[{name:"View1",link:"main.mail.realtime.view.agents"}],a.sessions=[{name:"View1",link:"main.mail.realtime.view.sessions"}]}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.realtime.view",{url:"/view",templateUrl:"app/mail/realtime/view/view.html",controller:"MailRealtimeViewCtrl"}).state("main.mail.realtime.view.agents",{url:"/agents",controller:"MailRealtimeViewAgentCtrl",templateUrl:"app/mail/realtime/view/agent/agent.html"}).state("main.mail.realtime.view.sessions",{url:"/sessions",controller:"MailRealtimeViewSessionCtrl",templateUrl:"app/mail/realtime/view/session/session.html"})}]),angular.module("xCallyShuttleApp").controller("MailStatisticsCtrl",["$scope","$http","$translate","socket",function(a,b,c,d){a.message="Hello",a.$translate=c,b.get("api/mail/rooms").success(function(b){a.mailRooms=b,d.syncUpdates("mail_room",a.mailRooms)}),b.get("api/mail/messages").success(function(b){a.mailMessages=b,d.syncUpdates("mail_message",a.mailMessages)})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.statistics",{url:"/statistics",templateUrl:"app/mail/statistics/statistics.html",controller:"MailStatisticsCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.mail.statistics.summary",{url:"/summary",templateUrl:"app/mail/statistics/statistics.summary.html",controller:"MailStatisticsCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile-old.css"]})}]}})}]),angular.module("xCallyShuttleApp").controller("MailTemplateListCtrl",["$scope","$http","$translate","$rootScope","socket","Modal","stResource","xAlert",function(a,b,c,d,e,f,g,h){a.$on("$destroy",function(){e.unsyncUpdates("mail_template")}),a.conf={templatesByPage:{name:"10",value:10}},a.templatesByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.mailTemplates={checked:[]},a.check=function(b,c){c?a.mailTemplates.checked=angular.copy(_.pluck(a.displayedMailTemplates,"id")):a.mailTemplates.checked=[]},a.getMailTemplates=function(b){return _.map(a.displayedMailTemplates,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){e.unsyncUpdates("mail_template"),b.url="/api/mail/templates/",g.getPage(b).then(function(c){a.displayedMailTemplates=c.rows,b.pagination.numberOfPages=c.total_pages,d.updateTableConfig(c.templatesByPage,a.displayedMailTemplates.length),d.updateTableConfig(a.conf.templatesByPage,a.displayedMailTemplates.length)}),e.socket.on("mail_template:save",function(){a.initList(b)}),e.socket.on("mail_template:remove",function(c){a.mailTemplates.checked=_.without(a.mailTemplates.checked,c.id),a.initList(b)})},a.deleteItem=f.confirm["delete"](function(a){b["delete"]("/api/mail/templates/"+a).success(function(){h.show(c.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){h.show(a.message,"danger")})}),a.deleteItems=f.confirm["delete"](function(){b["delete"]("/api/mail/templates/",{params:{id:a.mailTemplates.checked}}).success(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){h.show(c.instant(a.message),"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.templates.list",{url:"/list",templateUrl:"app/mail/template/list/list.html",controller:"MailTemplateListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.templates",{url:"/templates",template:"<div ui-view></div>","abstract":!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").controller("MailTemplateViewCtrl",["$scope","$http","$translate","$stateParams","xAlert",function(a,b,c,d,e){a.items={},a.initItem=function(){b.get("/api/mail/accounts").success(function(c){a.mailAccounts=c.rows,b.get("/api/mail/templates/"+d.id).success(function(b){var c=_.find(a.mailAccounts,{address:b.from});a.item={name:b.name,description:b.description,subject:b.subject,from:{address:c.address,name:c.name,id:c.id},to:[],sto:b.to.split(";"),cc:[],scc:b.cc.split(";"),html:b.html,text:b.text,MailAccountId:b.MailAccountId}}).error(function(a){e.show(a.message,"danger")})})},a.updateItem=function(){var f={name:a.item.name,description:a.item.description,from:a.item.from.address,to:a.item.sto.join(";"),cc:a.item.scc.join(";"),subject:a.item.subject||null,html:a.item.html||null,text:a.item.text||null,MailAccountId:a.item.from.id};b.put("/api/mail/templates/"+d.id,f).success(function(a){console.log(a),e.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){e.show(a.message,"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.templates.view",{url:"/view/:id",templateUrl:"app/mail/template/view/view.html",controller:"MailTemplateViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.mail.templates.view.settings",{url:"/settings",templateUrl:"app/mail/template/view/view.settings.html"}).state("main.mail.templates.view.agents",{url:"/agents",templateUrl:"app/mail/template/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").controller("MailTemplateWizardCtrl",["$scope","$http","$location","WizardHandler","xAlert",function(a,b,c,d,e){a.form={to:[],sto:[],cc:[],scc:[]},b.get("api/mail/accounts").success(function(b){a.mailAccounts=b.rows}),a.forms={},a.next=function(){d.wizard().next()},a.exitValidation=function(a){return a},a.saveTemplate=function(){var d={name:a.form.name,description:a.form.description,from:a.form.from.address,to:a.form.sto.join(";"),cc:a.form.scc.join(";"),subject:a.form.subject||null,html:a.form.html||null,text:a.form.text||null,MailAccountId:a.form.from.id};b.post("/api/mail/templates",d).success(function(){c.path("/mail/templates/list")}).error(function(a){e.show(a.message,"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.templates.wizard",{url:"/wizard",templateUrl:"app/mail/template/wizard/wizard.html",controller:"MailTemplateWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("MailTimelineListCtrl",["$scope","$http","socket",function(a,b,c){function d(b){a.events>50&&a.events.pop(),a.events.unshift(b)}a.initList=function(){a.events=[],b.get("/api/events/channel/mail").success(function(a){a.forEach(d),c.socket.on("event:chat:save",d)}).error(function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.timeline.list",{url:"/list",templateUrl:"app/mail/timeline/list/list.html",controller:"MailTimelineListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/timeline.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.mail.timeline",{url:"/timeline",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("MainCtrl",["$scope","$http","$rootScope","$cookies","$translate","$interval","socket","Auth",function(a,b,c,d,e,f,g,h){a.awesomeThings=[],a.isLoggedIn=h.isLoggedIn,a.isAdmin=h.isAdmin,a.getCurrentUser=h.getCurrentUser,a.$on("$viewContentLoaded",function(){Metronic.init()}),c.language=e.use(),a.changeLanguage=function(a){e.use(a).then(function(a){c.language=a})["catch"](function(a){console.error(a)})},a.$on("$destroy",function(){})}]),angular.module("xCallyShuttleApp").directive("ngSpinnerBar",["$rootScope",function(a){return{link:function(b,c){c.addClass("hide"),a.$on("$stateChangeStart",function(){"spinner-page"===c[0].id&&c.removeClass("hide")}),a.$on("$stateChangeSuccess",function(){"spinner-page"===c[0].id&&(c.addClass("hide"),$("body").removeClass("page-on-load"),Layout.setSidebarMenuActiveLink("match"),setTimeout(function(){Metronic.scrollTop()},1e3))}),a.$on("$spinnerStart",function(){"spinner-request"===c[0].id&&c.removeClass("hide")}),a.$on("$spinnerStop",function(){"spinner-request"===c[0].id&&c.addClass("hide")}),a.$on("$stateNotFound",function(){"spinner-page"===c[0].id&&c.addClass("hide")}),a.$on("$stateChangeError",function(){"spinner-page"===c[0].id&&c.addClass("hide")})}}}]).directive("a",function(){return{restrict:"E",link:function(a,b,c){(c.ngClick||""===c.href||"#"===c.href)&&b.on("click",function(a){a.preventDefault()})}}}).directive("nxEqual",function(){return{require:"ngModel",link:function(a,b,c,d){return c.nxEqual?(a.$watch(c.nxEqual,function(a){d.$setValidity("nxEqual",a===d.$viewValue)}),void d.$parsers.push(function(b){var e=b===a.$eval(c.nxEqual);return d.$setValidity("nxEqual",e),e?b:void 0})):void console.error("nxEqual expects a model as an argument!")}}}).directive("ngEnter",function(){return function(a,b,c){b.bind("keydown keypress",function(b){13===b.which&&(a.$apply(function(){a.$eval(c.ngEnter)}),b.preventDefault())})}}).directive("dropdownMenuHover",function(){return{link:function(a,b){b.dropdownHover()}}}).directive("uiSelectRequired",function(){return{require:"ngModel",link:function(a,b,c,d){d.$validators.uiSelectRequired=function(a){return a&&a.length}}}}).directive("rpattern",function(){return{restrict:"A",require:"ngModel",link:function(a,b,c,d){function e(a,b){return null==b||""===b||!h||a.test(b)?(d.$setValidity("pattern",!0),b):void d.$setValidity("pattern",!1)}var f,g=c.rpattern,h=!0;g&&(g.match(/^\/(.*)\/$/)?(g=new RegExp(g.substr(1,g.length-2)),f=function(a){return e(g,a)}):f=function(b){var c=a.$eval(g);if(!c||!c.test)throw new Error("Expected "+g+" to be a RegExp but was "+c);return e(c,b)}),d.$formatters.push(f),d.$parsers.push(f),c.$observe("required",function(a){h=a,f(d.$viewValue)})}}}).directive("queryBuilder",["$compile",function(a){return{restrict:"E",scope:{group:"=",fields:"=",operators:"=",properties:"="},templateUrl:"app/main/template.queryBuilderView.html",compile:function(b,c){var d,e;return d=b.contents().remove(),function(b,c,f){b.booleans=[{name:"AND"},{name:"OR"}],b.addCondition=function(a){"CONDITION"==a?b.group.rules.push({operator:"=",field:"",data:""}):b.group.rules.push({field:"",data:""})},b.removeCondition=function(a){b.group.rules.splice(a,1)},b.addGroup=function(a){b.group.rules.push({group:{"boolean":"AND",rules:[],type:a,main:!1}})},b.removeGroup=function(){b.$parent.group.rules.splice(b.$parent.$index,1)},e||(e=a(d)),c.append(e(b,function(a){return a}))}}}}]),angular.module("xCallyShuttleApp").filter("capitalize",function(){return function(a){return a?a.replace(/([^\W_]+[^\s-]*) */g,function(a){return a.charAt(0).toUpperCase()+a.substr(1).toLowerCase()}):""}}),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main",{"abstract":!0,templateUrl:"app/main/main.html",controller:"MainCtrl",resolve:{authorization:["$q","Auth","$state","$timeout","$location",function(a,b,c,d,e){return b.getToken()?a.when():(d(function(){e.path("/login")}),a.reject())}]}})}]),angular.module("xCallyShuttleApp").factory("xAlert",["$translate","Notification",function(a,b){return{show:function(c,d){switch(d){case"success":b.success({message:c,title:'<i class="glyphicon glyphicon-ok"></i> <strong>'+a.instant("MESSAGE_SUCCESS")+"!</strong>",delay:5e3});break;case"danger":b.error({message:c,title:'<i class="glyphicon glyphicon-warning-sign"></i> <strong>'+a.instant("MESSAGE_ERROR")+"!</strong>",delay:1e4});break;default:b.info(c)}}}}]).factory("stResource",["$q","$filter","$timeout","$rootScope","$http","$translate","xAlert",function(a,b,c,d,e,f,g){return{getPage:function(b){var c={page:Math.ceil(b.pagination.start/b.pagination.number),per_page:b.pagination.number};b.sort.predicate&&(c.sort_by=b.sort.predicate,c.sort_order=b.sort.reverse?"DESC":"ASC"),_.forIn(b.search.predicateObject,function(a,b){c[b]=a}),d.$broadcast("$spinnerStart"),e.get(b.url,{params:c}).success(function(a){h.resolve(a),d.$broadcast("$spinnerStop")}).error(function(a){g.show(f.instant(a.message),"danger"),
+d.$broadcast("$spinnerStop")});var h=a.defer();return h.promise}}}]),angular.module("xCallyShuttleApp").controller("MarketCtrl",["$scope",function(a){a.message="Hello"}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.market",{url:"/market",templateUrl:"app/market/market.html",controller:"MarketCtrl"})}]),angular.module("xCallyShuttleApp").controller("MotionbarCtrl",["$scope","$stateParams","$cookieStore","settings","Auth",function(a,b,c,d,e){e.loginWithToken(b.token,b.userId,b.name),a.getCurrentUser=e.getCurrentUser,d.layout.pageQuickSidebarOpened=!0}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("motionbar",{url:"/motionbar",template:"<div ui-view></div>","abstract":!0}).state("motionbar.chat",{url:"/chat?token&userId&name",templateUrl:"app/motionbar/motionbar.chat.html",controller:"MotionbarCtrl"})}]),angular.module("xCallyShuttleApp").controller("SoundListCtrl",["$scope","$http","socket","Modal","$q","FileUploader","$translate","xAlert","$cookieStore","$sce",function(a,b,c,d,e,f,g,h,i,j){a.isCollapsed=!0,a.audioSources={},a["delete"]=d.confirm["delete"](function(a){b["delete"]("/api/uploads/"+a).success(function(a){}).error(function(a){console.log(a)})}),a.getAudioSrc=function(a){return"/api/uploads/"+a},a.updateAudio=function(a,c){var d=e.defer();return b.put("/api/uploads/"+a,c).success(function(a){d.resolve()}).error(function(a){console.log(a.message),d.reject(a.message)}),d.promise},a.$on("$destroy",function(){c.unsyncUpdates("upload")}),a.initList=function(){b.get("/api/uploads").success(function(b){a.sounds=b,a.sounds.forEach(function(a){k(a)}),c.syncUpdates("upload",a.sounds)}).error(function(a){})};var k=function(c){b.get("/api/uploads/stream/"+c.id).success(function(b){a.audioSources[c.id]=b}).error(function(a){console.error(a)})};a.getSecureSrc=function(a){return j.trustAsResourceUrl("data:audio/ogg;base64,"+a)},a.getSecureDownloadSrc=function(a){return j.trustAsResourceUrl("data:application/octet-stream;charset=utf-16le;base64,"+a)};var l=a.uploader=new f({url:"/api/uploads",withCredentials:!0,headers:{Authorization:"Bearer "+i.get("token")}});l.filters.push({name:"customFilter",fn:function(a,b){return this.queue.length<10}}),l.onWhenAddingFileFailed=function(a,b,c){console.info("onWhenAddingFileFailed",a,b,c)},l.onAfterAddingFile=function(a){console.info("onAfterAddingFile",a)},l.onAfterAddingAll=function(a){console.info("onAfterAddingAll",a)},l.onBeforeUploadItem=function(a){console.info("onBeforeUploadItem",a)},l.onProgressItem=function(a,b){console.info("onProgressItem",a,b),a.isUploading=!0},l.onProgressAll=function(a){console.info("onProgressAll",a)},l.onSuccessItem=function(a,b,c,d){console.info("onSuccessItem",a,b,c,d),a.isUploading=!1},l.onErrorItem=function(a,b,c,d){console.info("onErrorItem",a,b,c,d),a.responseMessage=b,a.isUploading=!1},l.onCancelItem=function(a,b,c,d){console.info("onCancelItem",a,b,c,d),a.isUploading=!1},l.onCompleteItem=function(a,b,c,d){console.info("onCompleteItem",a,b,c,d),a.isUploading=!1},l.onCompleteAll=function(){console.info("onCompleteAll")},console.info("uploader",l)}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sounds.list",{url:"/list",templateUrl:"app/sound/list/list.html",controller:"SoundListCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js"]})}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.sounds",{url:"/sounds",templateUrl:"app/sound/sound.html","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("SquareOdbcListCtrl",["$scope","$http","socket","$rootScope","$translate","xAlert","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={odbcsByPage:{name:"10",value:10}},a.odbcsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.Odbcs={checked:[]},a.check=function(b,c){c?a.Odbcs.checked=angular.copy(_.pluck(a.displayedOdbcs,"id")):a.Odbcs.checked=[]},a.getOdbcs=function(b){return _.map(a.displayedOdbcs,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){c.unsyncUpdates("square_odbc"),b.url="/api/square/odbc",h.getPage(b).then(function(c){a.displayedOdbcs=c.rows,b.pagination.numberOfPages=c.total_pages,d.updateTableConfig(a.odbcsByPage,a.displayedOdbcs.length),d.updateTableConfig(a.conf.odbcsByPage,a.displayedOdbcs.length)}),c.socket.on("square_odbc:save",function(){a.initList(b)}),c.socket.on("square_odbc:remove",function(c){a.Odbcs.checked=_.without(a.Odbcs.checked,c.id),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/square/odbc/"+a).success(function(){f.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(a.message,"danger")})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/square/odbc",{params:{id:a.Odbcs.checked}}).success(function(){f.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(a.message,"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.odbcs.list",{url:"/list",templateUrl:"app/square/odbc/list/list.html",controller:"SquareOdbcListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.odbcs",{url:"/odbcs",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("SquareOdbcViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$location",function(a,b,c,d,e,f){a.getOdbc=function(){b.get("/api/square/odbc/"+e.id).success(function(b){delete b.pwd,a.odbc=b}).error(function(a){console.error(a),f.path("/square/odbcs/list")})},a.updateOdbc=function(){var f=angular.copy(a.odbc);b.put("/api/square/odbc/"+e.id,f).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(b){c.show(d.instant(b.message),"danger"),a.odbc=f})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.odbcs.view",{url:"/view/:id",templateUrl:"app/square/odbc/view/view.html",controller:"SquareOdbcViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.square.odbcs.view.settings",{url:"/settings",templateUrl:"app/square/odbc/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("SquareOdbcWizardCtrl",["$scope","$http","WizardHandler","$location","xAlert","$translate",function(a,b,c,d,e,f){a.forms={odbc:void 0},a.item={},a.next=function(){b.post("/api/square/odbc/validate/",a.item).success(function(a){a.length?e.show(f.instant("MESSAGE_EXIST_ODBC"),"danger"):c.wizard().next()}).error(function(a){e.show(f.instant(a.message),"danger")})},a.previous=function(){c.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("/api/square/odbc/",a.item).success(function(){d.path("/square/odbcs/list")}).error(function(a){e.show(f.instant(a.message),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.odbcs.wizard",{url:"/wizard",templateUrl:"app/square/odbc/wizard/wizard.html",controller:"SquareOdbcWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("SquareProjectListCtrl",["$scope","$http","socket","$rootScope","$translate","xAlert","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={projectsByPage:{name:"10",value:10}},a.projectsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.Projects={checked:[]},a.check=function(b,c){c?a.Projects.checked=angular.copy(_.pluck(a.displayedProjects,"id")):a.Projects.checked=[]},a.getProjects=function(b){return _.map(a.displayedProjects,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){c.unsyncUpdates("square_project"),b.url="/api/square/projects",h.getPage(b).then(function(c){a.displayedProjects=c.rows,b.pagination.numberOfPages=c.total_pages,d.updateTableConfig(a.projectsByPage,a.displayedProjects.length),d.updateTableConfig(a.conf.projectsByPage,a.displayedProjects.length)}),c.socket.on("square_project:save",function(){a.initList(b)}),c.socket.on("square_project:remove",function(c){a.Projects.checked=_.without(a.Projects.checked,c.id),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/square/projects/"+a).success(function(){f.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(a.message,"danger")})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/square/projects",{params:{id:a.Projects.checked}}).success(function(){f.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(a.message,"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.projects.list",{url:"/list",templateUrl:"app/square/project/list/list.html",controller:"SquareProjectListCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.projects",{url:"/projects",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("SquareProjectViewCtrl",["$scope","$http","$stateParams","socket","Auth","Modal","xAlert","$translate","$rootScope",function(a,b,c,d,e,f,g,h,i){a.squareProject={},a.getProject=function(){b.get("/api/square/projects/"+c.id).success(function(b){a.squareProject=b,angular.element(document).ready(function(){window.onerror=function(a,b,c){try{if(null!=a&&-1!=a.indexOf("Script error."));else{var d=new Image;d.src="assets/plugins/mxgraph/images/1x1.png?msg="+encodeURIComponent(a)+"&url="+encodeURIComponent(b)+"&lnum="+encodeURIComponent(c)}}catch(e){}},b.token=e.getToken();var a=new EditorUi(new Editor);a.openString(b.preproduction,b.name,b),a.editor.graphChangeListener=function(a,b){var c=b.properties.rtChange||!1;c||(this.modified=!0)}}),d.syncUpdates("square_project",[b],function(a,c,d){c.id===b.id})})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.projects.view",{url:"/view/:id",templateUrl:"app/square/project/view/view.html",controller:"SquareProjectViewCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",serie:!0,cache:!1,files:["assets/plugins/mxgraph/css/common.css","assets/plugins/mxgraph/css/explorer.css","assets/plugins/mxgraph/styles/grapheditor.css","assets/plugins/mxgraph/styles/custom.css","assets/plugins/mxgraph/js/custom.js","assets/plugins/mxgraph/js/mxClient.js","assets/plugins/mxgraph/js/Editor.js","assets/plugins/mxgraph/js/Graph.js","assets/plugins/mxgraph/js/EditorUi.js","assets/plugins/mxgraph/js/Actions.js","assets/plugins/mxgraph/js/Menus.js","assets/plugins/mxgraph/js/Sidebar.js","assets/plugins/mxgraph/js/Toolbar.js","assets/plugins/mxgraph/js/Dialogs.js"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("SquareProjectWizardCtrl",["$scope","$http","WizardHandler","$location","xAlert","$translate",function(a,b,c,d,e,f){a.forms={project:void 0},a.item={},a.next=function(){b.post("/api/square/projects/validate/",a.item).success(function(a){a.length?e.show(f.instant("MESSAGE_EXIST_PROJECT"),"danger"):c.wizard().next()}).error(function(a){e.show(f.instant(a.message),"danger")})},a.previous=function(){c.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("/api/square/projects/",a.item).success(function(){d.path("/square/projects/list")}).error(function(a){e.show(f.instant(a.message),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square.projects.wizard",{url:"/wizard",templateUrl:"app/square/project/wizard/wizard.html",controller:"SquareProjectWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.square",{url:"/square",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("TeamListCtrl",["$scope","$http","$translate","$rootScope","xAlert","socket","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={teamsByPage:{name:"10",value:10}},a.teamsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.teams={checked:[]},a.check=function(b,c){c?a.teams.checked=angular.copy(_.pluck(a.displayedTeams,"id")):a.teams.checked=[]},a.getTeams=function(b){return _.map(a.displayedTeams,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){f.unsyncUpdates("team"),b.url="/api/teams/",h.getPage(b).then(function(c){a.displayedTeams=c.rows,b.pagination.numberOfPages=c.total_pages,d.updateTableConfig(a.teamsByPage,a.displayedTeams.length),d.updateTableConfig(a.conf.teamsByPage,a.displayedTeams.length)}),f.socket.on("team:save",function(){a.initList(b)}),f.socket.on("team:remove",function(c){a.teams.checked=_.without(a.teams.checked,c.id),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("api/teams/"+a).success(function(){e.show(c.instant("MESSAGE_TEAM_DELETE_SUCCESS"),"success")}).error(function(){e.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/teams",{params:{id:a.teams.checked}}).success(function(){e.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){e.show(c.instant(a.message),"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.teams.list",{url:"/list",templateUrl:"app/team/list/list.html",controller:"TeamListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.teams",{url:"/teams",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("TeamViewCtrl",["$scope","$http","$stateParams","$translate","xAlert",function(a,b,c,d,e){a.message="Hello";var f=function(){return{select:function(c){b.post("/api/teams/"+a.team.id+"/agents",{agents:c}).error(function(a){console.error(a)})},deselect:function(c){b.put("/api/teams/"+a.team.id+"/agents",{agents:c}).error(function(a){console.error(a)})}}};a.initView=function(){b.get("/api/teams/"+c.id).success(function(b){a.team=b}).error(function(a){e.show(a.message,"danger")})},a.initAgents=function(){b.get("/api/agents").success(function(d){a.agents=d.rows,b.get("/api/user_has_teams",{params:{TeamId:c.id}}).success(function(b){ComponentsDropdowns.bindTeam(_.pluck(b,"UserId"),_.map(a.agents,function(a){return{id:a.id,name:a.name}}),f)}).error(function(a){console.error(a)})})},a.updateItem=function(){var f=angular.copy(a.team),g=angular.copy(a.team);b.put("/api/teams/"+c.id,f).success(function(){e.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(b){a.team=g,b.errors.forEach(function(a){e.show(a.message,"danger")})})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.teams.view",{url:"/view/:id",templateUrl:"app/team/view/view.html",controller:"TeamViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.teams.view.agents",{url:"/agents",templateUrl:"app/team/view/view.agents.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/scripts/components-dropdowns.js"]}])}]}}).state("main.teams.view.settings",{url:"/settings",templateUrl:"app/team/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("TeamWizardCtrl",["$scope","$http","$translate","$location","WizardHandler","xAlert",function(a,b,c,d,e,f){a.forms={info:void 0},a.item={},a.createItem=function(){b.post("api/teams",a.item).success(function(){f.show(c.instant("MESSAGE_TEAM_CREATE_SUCCESS"),"success"),d.path("/teams/list")}).error(function(a){a.errors.forEach(function(a){f.show(a.message,"danger")})})},a.goNext=function(){e.wizard().next()},a.formValidation=function(a){return a}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.teams.wizard",{url:"/wizard",templateUrl:"app/team/wizard/wizard.html",controller:"TeamWizardCtrl",authenticate:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({name:"ui.select",insertBefore:"#ng_load_plugins_before",files:["assets/plugins/ui-select/select.min.css","assets/plugins/ui-select/select.min.js"]})}]}})}]),angular.module("xCallyShuttleApp").controller("TriggerListCtrl",["$scope","$http","$translate","$rootScope","stResource","Modal","socket","xAlert",function(a,b,c,d,e,f,g,h){a.conf={TriggersByPage:{name:"10",value:10}},a.TriggersByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.onText="On",a.offText="Off",a.isActive=!0,a.size="mini",a.animate=!0,a.radioOff=!0,a.handleWidth="auto",a.labelWidth="auto",a.inverse=!0,a.offColor="danger",a.onColor="success",a.Triggers={checked:[]},a.check=function(b,c){c?a.Triggers.checked=angular.copy(_.pluck(a.displayedTriggers,"id")):a.Triggers.checked=[]},a.getTriggers=function(b){return _.map(a.displayedTriggers,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){g.unsyncUpdates("trigger"),b.url="/api/triggers",e.getPage(b).then(function(c){a.displayedTriggers=c.rows,b.pagination.numberOfPages=c.total_pages,d.updateTableConfig(a.TriggersByPage,a.displayedTriggers.length),d.updateTableConfig(a.conf.TriggersByPage,a.displayedTriggers.length)}),g.socket.on("trigger:save",function(){a.initList(b)}),g.socket.on("trigger:remove",function(c){a.Triggers.checked=_.without(a.Triggers.checked,c.id),a.initList(b)})},a.deleteItem=f.confirm["delete"](function(a){b["delete"]("/api/triggers/"+a).success(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){h.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.deleteItems=f.confirm["delete"](function(){b["delete"]("/api/triggers",{params:{id:a.Triggers.checked}}).success(function(){h.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){h.show(c.instant(a.message),"danger")})}),a.updateItem=function(a,d){b.put("api/triggers/"+a,{status:d}).success(function(a){h.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){h.show(c.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.triggers.list",{url:"/list",templateUrl:"app/trigger/list/list.html",controller:"TriggerListCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.triggers",{url:"/triggers",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("TriggerViewCtrl",["$scope","$stateParams","$http","$translate","xAlert","triggers",function(a,b,c,d,e,f){a.$triggers=f,a.forms={info:{}},a.fields={},a.properties=f.properties,a.initView=function(){c.get("/api/triggers/"+b.id).success(function(b){a.trigger=b,a.conditionsFilter=JSON.parse(b.conditions),a.actionsFilter=JSON.parse(b.actions),a.fields.conditions=a.$triggers.triggers[b.channel].conditions,a.fields.actions=a.$triggers.triggers[b.channel].actions}).error(function(a){e.show(a.message,"danger")})},a.getProperties=function(){g()};var g=function(){c.get("/api/mail/templates/").success(function(b){a.mailTemplates=b.rows;var c=[];b.rows.forEach(function(a){c.push({name:a.name,value:a.id})}),a.properties.mail.template=c}).error(function(a){e.show(a.message,"danger")})};a.updateTrigger=function(){c.put("/api/triggers/"+a.trigger.id,{name:a.trigger.name,description:a.trigger.description,conditions:angular.toJson(a.conditionsFilter),actions:angular.toJson(a.actionsFilter)}).success(function(){e.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){e.show(a.message,"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.triggers.view",{url:"/view/:id",templateUrl:"app/trigger/view/view.html",controller:"TriggerViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]})}]}}).state("main.triggers.view.settings",{url:"/settings",templateUrl:"app/trigger/view/view.settings.html"}).state("main.triggers.view.routes",{url:"/routes",templateUrl:"app/trigger/view/view.routes.html"}).state("main.triggers.view.application",{url:"/application",templateUrl:"app/trigger/view/view.application.html"})}]),angular.module("xCallyShuttleApp").controller("TriggerWizardCtrl",["$scope","$http","$location","xAlert","triggers","WizardHandler",function(a,b,c,d,e,f){a.$triggers=e,a.tempData={voice:{},mail:{},chat:{},fax:{}},a.item={},a.fields={},a.properties=e.properties,a.forms={general:{}};var g={group:{"boolean":"AND",rules:[],type:"CONDITION",main:!0}},h={group:{rules:[],type:"ACTION"}};a.conditionsFilter=_.clone(g,!0),a.actionsFilter=_.clone(h,!0),a.$watch("item.channel",function(b,c){c&&(a.tempData[c].conditionsFilter=_.clone(a.conditionsFilter,!0),a.tempData[c].actionsFilter=_.clone(a.actionsFilter,!0)),a.conditionsFilter=a.tempData[b].conditionsFilter?a.tempData[b].conditionsFilter:_.clone(g,!0),a.actionsFilter=a.tempData[b].actionsFilter?a.tempData[b].actionsFilter:_.clone(h,!0),a.fields.conditions=a.$triggers.triggers[b].conditions,a.fields.actions=a.$triggers.triggers[b].actions},!0),a.item.channel="voice",a.getProperties=function(){i()};var i=function(){b.get("/api/mail/templates/").success(function(b){a.mailTemplates=b.rows;var c=[];b.rows.forEach(function(a){c.push({name:a.name,value:a.id})}),a.properties.mail.template=c}).error(function(a){d.show(a.message,"danger")})};a.createItem=function(){a.item.conditions=angular.toJson(a.conditionsFilter),a.item.actions=angular.toJson(a.actionsFilter),b.post("/api/triggers",a.item).success(function(){c.path("/triggers/list")}).error(function(a){d.show(a.message,"danger")})},a.next=function(){f.wizard().next()},a.previous=function(){f.wizard().previous()},a.exitValidation=function(a){return a}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.triggers.wizard",{url:"/wizard",templateUrl:"app/trigger/wizard/wizard.html",controller:"TriggerWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("TrunkListCtrl",["$scope","$http","$translate","$rootScope","xAlert","socket","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={trunksByPage:{name:"10",value:10},labels:["name","host","context","description"]},a.trunksByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.trunks={checked:[]},a.check=function(b,c){c?a.trunks.checked=angular.copy(_.pluck(a.displayedTrunks,"id")):a.trunks.checked=[]},a.getTrunks=function(b){return _.map(a.displayedTrunks,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){f.unsyncUpdates("trunk"),b.url="/api/trunks",console.log(b),h.getPage(b).then(function(c){a.displayedTrunks=c.rows,b.pagination.numberOfPages=c.total_pages,d.updateTableConfig(a.trunksByPage,a.displayedTrunks.length),d.updateTableConfig(a.conf.trunksByPage,a.displayedTrunks.length)}),f.socket.on("trunk:save",function(){a.initList(b)}),f.socket.on("trunk:remove",function(c){a.trunks.checked=_.without(a.trunks.checked,c.id),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/trunks/"+a).success(function(){e.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){e.show(c.instant(a.message),"danger")})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/trunks",{params:{id:a.trunks.checked}}).success(function(){e.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){e.show(c.instant(a.message),"danger")})}),a.$on("$destroy",function(){console.log("trunks destroy")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.trunks.list",{url:"/list",templateUrl:"app/trunk/list/list.html",controller:"TrunkListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.trunks",{url:"/trunks",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("TrunkViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","socket","$location",function(a,b,c,d,e,f,g){a.getTrunk=function(){b.get("/api/trunks/"+e.id).success(function(b){b.nat=""===b.nat?[]:b.nat.split(","),b.allow=""===b.allow?[]:b.allow.split(";"),b.insecure=""===b.insecure?[]:b.insecure.split(","),b.transport=""===b.transport?[]:b.transport.split(","),delete b.secret,a.trunk=b}).error(function(a){console.error(a),g.path("/trunks/list")})},a.updateTrunk=function(){""===a.trunk.password&&delete a.trunk.password;var f=angular.copy(a.trunk);f.nat=f.nat.join(","),f.allow=f.allow.join(";"),f.insecure=f.insecure.join(","),f.transport=f.transport.join(","),b.put("/api/trunks/"+e.id,f).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(b){c.show(d.instant(b.message),"danger"),f.nat=f.nat.split(","),f.naallowt=f.allow.split(";"),f.insecure=f.insecure.split(","),f.transport=f.transport.split(","),a.trunk=f})},a.getContexts=function(){b.get("/api/voice/contexts").success(function(b){a.voiceContexts=b.rows,f.syncUpdates("voice_context",a.voiceContexts)}).error(function(a){c.show(d.instant(a.message),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.trunks.view",{url:"/view/:id",templateUrl:"app/trunk/view/view.html",controller:"TrunkViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.trunks.view.settings",{url:"/settings",templateUrl:"app/trunk/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("TrunkWizardCtrl",["$scope","$http","WizardHandler","$location","xAlert","socket","$translate",function(a,b,c,d,e,f,g){a.initWizard=function(){a.forms={},a.item={context:"from-voip-provider"}},a.next=function(d){d?b.post("/api/trunks/validate/",a.item).success(function(a){console.log(a),a.length?e.show(g.instant("MESSAGE_EXIST_TRUNK"),"danger"):c.wizard().next()}).error(function(a){e.show(g.instant(a.message),"danger")}):c.wizard().next()},a.previous=function(){c.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("/api/trunks/",a.item).success(function(){d.path("/trunks/list")}).error(function(a){e.show(a.message,"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.trunks.wizard",{url:"/wizard",templateUrl:"app/trunk/wizard/wizard.html",controller:"TrunkWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("UserListCtrl",["$scope","$http","xAlert","$rootScope","$translate","socket","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={usersByPage:{name:"10",value:10}},a.usersByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.users={checked:[]},a.check=function(b,c){c?a.users.checked=angular.copy(_.pluck(a.displayedUsers,"id")):a.users.checked=[]},a.getUsers=function(b){return _.map(a.displayedUsers,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/users/"+a).success(function(){c.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){a.errors.forEach(function(b){c.show(a.message+": "+b.message,"danger")})})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/users",{params:{id:a.users.checked}}).success(function(){c.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){a.errors.forEach(function(b){c.show(a.message+": "+b.message,"danger")})})}),a.initList=function(b){f.unsyncUpdates("user"),b.url="/api/users/",h.getPage(b).then(function(c){a.displayedUsers=c.rows,b.pagination.numberOfPages=c.total_pages,d.updateTableConfig(a.usersByPage,a.displayedUsers.length),d.updateTableConfig(a.conf.usersByPage,a.displayedUsers.length)}),f.socket.on("user:save",function(){a.initList(b)}),f.socket.on("user:remove",function(c){a.users.checked=_.without(a.users.checked,c.id),a.initList(b)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.users.list",{url:"/list",templateUrl:"app/user/list/list.html",controller:"UserListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.users",{url:"/users",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("UserViewCtrl",["$scope","$http","$stateParams","$translate","FileUploader","$cookieStore","Auth","xAlert",function(a,b,c,d,e,f,g,h){a.Auth=g,a.updatePassword=function(){var e,f;g.isAdmin()?(e="/api/users/password/"+c.id+"/reset",f={newPassword:a.user.newPwd}):(e="/api/users/password/",f={oldPassword:a.user.currentPwd,newPassword:a.user.newPwd}),b.put(e,f).success(function(a){h.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})};var i=a.uploader=new e({url:"api/users/"+c.id+"/avatar",queueLimit:1,withCredentials:!0,headers:{Authorization:"Bearer "+f.get("token")}});i.filters.push({name:"imageFilter",fn:function(a){var b="|"+a.type.slice(a.type.lastIndexOf("/")+1)+"|";return-1!=="|jpg|png|jpeg|".indexOf(b)}}),i.onSuccessItem=function(b,c,e,f){a.user.userpic=c.userpic,a.user.id===g.getCurrentUser().id&&(g.getCurrentUser().userpic=c.userpic),h.show(d.instant("MESSAGE_WELL_DONE"),"success")},i.onErrorItem=function(a,b,c,e){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")},i.onCompleteAll=function(){i.clearQueue()},a.initView=function(){b.get("/api/users/"+c.id).success(function(b){a.user=b,a.user.transport=a.user.transport?a.user.transport.split(","):[],a.user.allow=a.user.allow?a.user.allow.split(";"):[]}).error(function(a){a.errors.forEach(function(b){h.show(a.message+": "+b.message,"danger")})})},a.updateItem=function(){var e=angular.copy(a.user),f=angular.copy(a.user);delete e.password,delete e.md5secret,e.transport=e.transport.join(","),e.allow=e.allow.join(";"),b.put("/api/users/"+c.id,e).success(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(b){a.user=f,b.errors.forEach(function(a){h.show(b.message+": "+a.message,"danger")})})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.users.view",{url:"/view/:id",templateUrl:"app/user/view/view.html",
+controller:"UserViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.users.view.account",{url:"/account",templateUrl:"app/user/view/view.account.html",resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css","assets/scripts/jquery.sparkline.min.js","assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js","assets/scripts/profile.js"]})}]}})}]),angular.module("xCallyShuttleApp").controller("UserWizardCtrl",["$scope","$http","$location","WizardHandler","xAlert","$translate",function(a,b,c,d,e,f){a.forms={info:void 0,voice:void 0},a.item={role:"user",host:"dynamic",context:"from-sip"},a.next=function(){d.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("/api/users/",a.item).success(function(){e.show(f.instant("MESSAGE_WELL_DONE"),"success"),c.path("/users/list")}).error(function(a){a.errors.forEach(function(b){e.show(a.message+": "+b.message,"danger")})})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.users.wizard",{url:"/wizard",templateUrl:"app/user/wizard/wizard.html",controller:"UserWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("VariableListCreateModalCtrl",["$scope","$uibModalInstance",function(a,b){a.forms={dashboard:void 0},a.item={},a.ok=function(){a.item.model=JSON.stringify({title:a.item.name}),b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("VariableListCtrl",["$scope","$http","socket","$rootScope","$translate","xAlert","Modal","stResource","$uibModal","$log",function(a,b,c,d,e,f,g,h,i,j){a.conf={variablesByPage:{name:"10",value:10}},a.variablesByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.Variables={checked:[]},a.check=function(b,c){c?a.Variables.checked=angular.copy(_.pluck(a.displayedVariables,"id")):a.Variables.checked=[]},a.getVariables=function(b){return _.map(a.displayedVariables,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){c.unsyncUpdates("variable"),b.url="/api/variables",h.getPage(b).then(function(c){a.displayedVariables=c.rows,b.pagination.numberOfPages=c.total_pages,d.updateTableConfig(a.variablesByPage,a.displayedVariables.length),d.updateTableConfig(a.conf.variablesByPage,a.displayedVariables.length)}),c.socket.on("variable:save",function(){a.initList(b)}),c.socket.on("variable:remove",function(c){a.Variables.checked=_.without(a.Variables.checked,c.id),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/variables/"+a).success(function(){f.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(a.message,"danger")})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/variables",{params:{id:a.Variables.checked}}).success(function(){f.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(a.message,"danger")})}),a.create=function(){var a=i.open({animation:!0,templateUrl:"app/variable/list/create.modal.html",controller:"VariableListCreateModalCtrl"});a.result.then(function(a){b.post("/api/variables",a).then(function(a){f.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.show(a.data.message,"danger")})},function(){j.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.variables.list",{url:"/list",templateUrl:"app/variable/list/list.html",controller:"VariableListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.variables",{url:"/variables",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("VariableViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$location",function(a,b,c,d,e,f){a.getVariable=function(){b.get("/api/variables/"+e.id).success(function(b){a.variable=b}).error(function(a){console.error(a),f.path("/variables/list")})},a.updateVariable=function(){var f=angular.copy(a.variable);b.put("/api/variables/"+e.id,f).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(b){c.show(d.instant(b.message),"danger"),a.variable=f})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.variables.view",{url:"/view/:id",templateUrl:"app/variable/view/view.html",controller:"VariableViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.variables.view.settings",{url:"/settings",templateUrl:"app/variable/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.contexts",{url:"/contexts",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("VoiceContextListCtrl",["$scope","$http","socket","$rootScope","$translate","xAlert","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={contextsByPage:{name:"10",value:10}},a.contextsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.voiceContexts={checked:[]},a.check=function(b,c){c?a.voiceContexts.checked=angular.copy(_.pluck(a.displayedVoiceContexts,"id")):a.voiceContexts.checked=[]},a.getVoiceContexts=function(b){return _.map(a.displayedVoiceContexts,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){c.unsyncUpdates("voice_context"),b.url="/api/voice/contexts",h.getPage(b).then(function(c){a.displayedVoiceContexts=c.rows,b.pagination.numberOfPages=c.total_pages,d.updateTableConfig(a.contextsByPage,a.displayedVoiceContexts.length),d.updateTableConfig(a.conf.contextsByPage,a.displayedVoiceContexts.length)}),c.socket.on("voice_context:save",function(){a.initList(b)}),c.socket.on("voice_context:remove",function(c){a.voiceContexts.checked=_.without(a.voiceContexts.checked,c.id),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/voice/contexts/"+a).success(function(){f.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(a.message,"danger")})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/voice/contexts",{params:{id:a.voiceContexts.checked}}).success(function(){f.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(a.message,"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.contexts.list",{url:"/list",templateUrl:"app/voice/context/list/list.html",controller:"VoiceContextListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("VoiceContextViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$location",function(a,b,c,d,e,f){a.getContext=function(){b.get("/api/voice/contexts/"+e.id).success(function(b){a.context=b}).error(function(a){console.error(a),f.path("/voice/contexts/list")})},a.updateVoiceContext=function(){var f=angular.copy(a.context);b.put("/api/voice/contexts/"+e.id,f).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(b){c.show(d.instant(b.message),"danger"),a.context=f})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.contexts.view",{url:"/view/:id",templateUrl:"app/voice/context/view/view.html",controller:"VoiceContextViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.voice.contexts.view.settings",{url:"/settings",templateUrl:"app/voice/context/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").controller("VoiceContextWizardCtrl",["$scope","$http","WizardHandler","$location","xAlert","$translate",function(a,b,c,d,e,f){a.forms={context:void 0},a.item={},a.next=function(){b.post("/api/voice/contexts/validate/",a.item).success(function(a){console.log(a),a.length?e.show(f.instant("MESSAGE_EXIST_CONTEXT"),"danger"):c.wizard().next()}).error(function(a){e.show(f.instant(a.message),"danger")})},a.previous=function(){c.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("/api/voice/contexts/",a.item).success(function(){d.path("/voice/contexts/list")}).error(function(a){e.show(f.instant(a.message),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.contexts.wizard",{url:"/wizard",templateUrl:"app/voice/context/wizard/wizard.html",controller:"VoiceContextWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceMohListCtrl",["$scope","$http","$translate","$rootScope","xAlert","socket","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={mohsByPage:{name:"10",value:10},labels:["name","directory","sort","description"]},a.mohsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.mohs={checked:[]},a.check=function(b,c){c?a.mohs.checked=angular.copy(_.pluck(a.displayedMohs,"id")):a.mohs.checked=[]},a.getMohs=function(b){return _.map(a.displayedMohs,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){f.unsyncUpdates("voice_musiconhold"),b.url="/api/voice/musiconholds",h.getPage(b).then(function(c){a.displayedMohs=c.rows,b.pagination.numberOfPages=c.total_pages,d.updateTableConfig(a.mohsByPage,a.displayedMohs.length),d.updateTableConfig(a.conf.mohsByPage,a.displayedMohs.length)}),f.socket.on("voice_musiconhold:save",function(){a.initList(b)}),f.socket.on("voice_musiconhold:remove",function(c){a.mohs.checked=_.without(a.mohs.checked,c.id),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/voice/musiconholds/"+a).success(function(){e.show(c.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){e.show(a.message,"danger")})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/voice/musiconholds",{params:{id:a.mohs.checked}}).success(function(){e.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){e.show(c.instant(a.message),"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.mohs.list",{url:"/list",templateUrl:"app/voice/moh/list/list.html",controller:"VoiceMohListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.mohs",{url:"/mohs",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("VoiceMohViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","socket","Modal","$sce","$location",function(a,b,c,d,e,f,g,h,i){a.$translate=d,a.audioSources={},a.sortOptions=[{value:"random",name:"APPLICATION_RANDOM"},{value:"alpha",name:"APPLICATION_ALPHABETICAL"}],a.getMoh=function(){b.get("/api/voice/musiconholds/"+e.id).success(function(b){delete b.stamp,a.moh=b}).error(function(a){console.error(a),i.path("/voice/mohs/list")})},a.updateVoiceMoh=function(){console.log("update");var f=angular.copy(a.moh);b.put("/api/voice/musiconholds/"+e.id,f).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(b){c.show(d.instant(b.message),"danger"),a.voiceMoh=f})},a.addMohs=function(){b.post("/api/voice/musiconholds/"+e.id+"/files",a.item).success(function(){i.path("voice/mohs/view/"+e.id+"/audios")}).error(function(a){c.show(d.instant(a.message),"danger")})},a.getAudioFiles=function(){b.get("/api/voice/musiconholds/"+e.id+"/files").success(function(b){a.audioFiles=b.files,a.mohPath=b.path,a.audioFiles.forEach(function(a){j(a)})}).error(function(a){console.error(a)})},a.getSecureSrc=function(a){return h.trustAsResourceUrl(a)};var j=function(c){b.get("/api/voice/musiconholds/stream",{params:{path:encodeURI(a.mohPath+"/"+c)}}).success(function(b){a.audioSources[c]="data:audio/ogg;base64,"+b}).error(function(a){console.error(a)})};a.getSounds=function(){a.item={sounds:[]},b.get("/api/uploads").success(function(b){a.soundList=b}).error(function(a){console.error(a)})},a.deleteItem=g.confirm["delete"](function(f){b["delete"]("/api/voice/musiconholds/"+e.id+"/files",{params:{filename:f}}).success(function(){_.remove(a.audioFiles,function(a){return a===f}),c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){c.show(a.message,"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.mohs.view",{url:"/view/:id",templateUrl:"app/voice/moh/view/view.html",controller:"VoiceMohViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.voice.mohs.view.settings",{url:"/settings",templateUrl:"app/voice/moh/view/view.settings.html"}).state("main.voice.mohs.view.audios",{url:"/audios",templateUrl:"app/voice/moh/view/view.audios.html",cache:!1}).state("main.voice.mohs.view.add",{url:"/add",templateUrl:"app/voice/moh/view/view.addFiles.html",cache:!1})}]),angular.module("xCallyShuttleApp").controller("VoiceMohWizardCtrl",["$scope","$http","WizardHandler","$location","xAlert","socket","$translate",function(a,b,c,d,e,f,g){a.$translate=g,a.initWizard=function(){a.forms={},a.item={sort:"alpha"}},a.next=function(){b.post("/api/voice/musiconholds/validate/",a.item).success(function(a){console.log(a),a.length?e.show(g.instant("MESSAGE_EXIST_MOH"),"danger"):c.wizard().next()}).error(function(a){e.show(g.instant(a.message),"danger")})},a.previous=function(){c.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("/api/voice/musiconholds/",a.item).success(function(a){d.path("/voice/mohs/view/"+a.id+"/audios")}).error(function(a){e.show(g.instant(a.message),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.mohs.wizard",{url:"/wizard",templateUrl:"app/voice/moh/wizard/wizard.html",controller:"VoiceMohWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceQueueListCtrl",["$scope","$http","socket","$translate","$rootScope","Modal","xAlert","stResource",function(a,b,c,d,e,f,g,h){a.conf={voiceQueuesByPage:{name:"10",value:10},labels:["name","description","strategy","context"]},a.voiceQueuesByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.queues={checked:[]},a.check=function(b,c){c?a.queues.checked=angular.copy(_.pluck(a.displayedQueues,"name")):a.queues.checked=[]},a.getQueues=function(b){return _.map(a.displayedQueues,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){c.unsyncUpdates("voice_queue"),b.url="/api/voice/queues",h.getPage(b).then(function(c){a.displayedQueues=c.rows,b.pagination.numberOfPages=c.total_pages,e.updateTableConfig(a.voiceQueuesByPage,a.displayedQueues.length),e.updateTableConfig(a.conf.voiceQueuesByPage,a.displayedQueues.length)}),c.socket.on("voice_queue:save",function(){a.initList(b)}),c.socket.on("voice_queue:remove",function(c){console.log("remove"),a.queues.checked=_.without(a.queues.checked,c.name),a.initList(b)})},a.deleteItem=f.confirm["delete"](function(a){b["delete"]("/api/voice/queues/"+a).success(function(){g.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){g.show(a.message,"danger")})}),a.deleteItems=f.confirm["delete"](function(){b["delete"]("/api/voice/queues",{params:{name:a.queues.checked}}).success(function(){g.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){g.show(d.instant(a.message),"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.queues.list",{url:"/list",templateUrl:"app/voice/queue/list/list.html",controller:"VoiceQueueListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.queues",{url:"/queues",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("VoiceQueueViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","socket","$location",function(a,b,c,d,e,f,g){a.binaryChoices=[{name:"Yes",value:1},{name:"No",value:0}],a.monitorFormats=[{name:"wav",value:"wav"},{name:"gsm",value:"gsm"},{name:"Inactive",value:""}],a.queueAnnounces=[{display_name:"Default",value:null},{display_name:"Disabled",value:""}];var h=function(){return{select:function(c){b.post("/api/voice/queues/"+a.queue.name+"/agents",{agents:c}).success(function(){a.getTeams()}).error(function(a){console.error(a)})},deselect:function(c){b.put("/api/voice/queues/"+a.queue.name+"/agents",{agents:c}).success(function(){a.getTeams()}).error(function(a){console.error(a)})}}};a.getQueue=function(){b.get("/api/voice/queues/"+e.id).success(function(b){b.joinempty=""===b.joinempty?[]:b.joinempty.split(","),b.leavewhenempty=""===b.leavewhenempty?[]:b.leavewhenempty.split(","),b.periodic_announce=""===b.periodic_announce?[]:b.periodic_announce.split(","),a.queue=b}).error(function(a){g.path("/voice/queues/list")})},a.updateVoiceQueue=function(){var f=angular.copy(a.queue);f.joinempty=f.joinempty.join(","),f.leavewhenempty=f.leavewhenempty.join(","),f.periodic_announce=f.periodic_announce.join(","),f.context||(f.context=null),b.put("/api/voice/queues/"+e.id,f).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(b){c.show(d.instant(b.message),"danger"),f.joinempty=f.joinempty.split(","),f.leavewhenempty=f.leavewhenempty.split(","),f.periodic_announce=f.periodic_announce.split(","),a.queue=f})},a.getTeams=function(){b.get("/api/teams").success(function(c){a.teams=c.rows,b({url:"/api/voice/user_has_queues",method:"GET",params:{queue:a.queue.name}}).success(function(b){ComponentsDropdowns.bindQueue(a.teams,_.pluck(b,"UserId"),h)})}).error(function(a){console.error(a)})},a.getContexts=function(){b.get("/api/voice/contexts").success(function(b){a.voiceContexts=b.rows,f.syncUpdates("voice_context",a.voiceContexts)}).error(function(a){c.show(d.instant(a.message),"danger")})},a.getMohs=function(){b.get("/api/voice/musiconholds").success(function(b){a.voiceMohs=b.rows,f.syncUpdates("voice_musiconhold",a.voiceMohs)}).error(function(a){c.show(a.message,"danger")})},a.getSounds=function(){b.get("/api/uploads").success(function(b){a.queueAnnounces=a.queueAnnounces.concat(b),a.periodicAnnounces=angular.copy(b),b.unshift({display_name:"None",converted_path:null,value:""}),a.sounds=b,f.syncUpdates("upload",a.sounds)}).error(function(a){console.error(a)})},a.returnAnnouncePath=function(a){return console.log("func"),a.converted_path?a.converted_path+"/"+a.save_name:null===a.value?null:a.value}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.queues.view",{url:"/view/:id",templateUrl:"app/voice/queue/view/view.html",controller:"VoiceQueueViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.voice.queues.view.settings",{url:"/settings",templateUrl:"app/voice/queue/view/view.settings.html"}).state("main.voice.queues.view.agents",{url:"/agents",templateUrl:"app/voice/queue/view/view.agents.html",cache:!1,serie:!0,resolve:{deps:["$ocLazyLoad",function(a){return a.load({insertBefore:"#ng_load_plugins_before",files:["assets/plugins/jquery-multi-select/css/multi-select.css","assets/plugins/jquery-multi-select/js/jquery.multi-select.js","assets/scripts/components-dropdowns.js"]})}]}})}]),angular.module("xCallyShuttleApp").controller("VoiceQueueWizardCtrl",["$scope","$http","WizardHandler","$location","xAlert","socket","$translate",function(a,b,c,d,e,f,g){a.forms={queue:void 0},a.item={},a.next=function(){b.post("/api/voice/queues/validate/",a.item).success(function(a){console.log(a),a.length?e.show(g.instant("MESSAGE_EXIST_QUEUE"),"danger"):c.wizard().next()}).error(function(a){e.show(g.instant(a.message),"danger")})},a.previous=function(){c.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("/api/voice/queues/",a.item).success(function(){d.path("/voice/queues/list")}).error(function(a){e.show(g.instant(a.message),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.queues.wizard",{url:"/wizard",templateUrl:"app/voice/queue/wizard/wizard.html",controller:"VoiceQueueWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.realtime",{url:"/realtime",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewAgentCtrl",["$scope","$http","$log","$uibModal","$translate","socket","xAlert",function(a,b,c,d,e,f,g){a.conf={agentsByPage:{name:"10",value:10},labels:["fullname","name","email"]},a.agentsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.$on("$destroy",function(){f.unsyncUpdates("user_has_voice_queue")}),a.groups=[],a.pauses=["pausa1","pausa2","pausa3"],a.pause=function(f,h){var i=d.open({animation:!0,size:f,templateUrl:"app/voice/realtime/view/agent/pause.modal.html",controller:"VoiceRealtimeViewAgentPauseModalCtrl",resolve:{items:function(){return a.pauses},data:function(){return h}}});i.result.then(function(a){b.post("/api/ami",a).then(function(a){console.log(a),g.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.log(a),g.show(a.data.message,"danger")})},function(){c.info("Modal dismissed at: "+new Date)})},a.add=function(f,h){var i=d.open({animation:!0,size:f,templateUrl:"app/voice/realtime/view/agent/queue.modal.add.html",controller:"VoiceRealtimeViewAgentQueueModalCtrl",resolve:{pauses:function(){return a.pauses},data:function(){return h}}});i.result.then(function(a){console.log(a),b.post("/api/voice/user_has_queues",a).then(function(){a.login?b.post("/api/ami",a).then(function(){g.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.show(a.data.message,"danger")}):g.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.show(a.data.message,"danger")})},function(){c.info("Modal dismissed at: "+new Date)})},a.remove=function(a,f){var h=d.open({animation:!0,size:a,templateUrl:"app/voice/realtime/view/agent/queue.modal.remove.html",controller:"VoiceRealtimeViewAgentQueueModalCtrl",resolve:{pauses:function(){return null},data:function(){return f}}});h.result.then(function(a){_.isArray(a)?a.forEach(function(a){b.post("/api/ami",a).then(function(){a.logout?b.put("/api/voice/queues/"+a.queue+"/agents",{agents:[a.UserId]}).then(function(){g.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.show(a.data.message,"danger")}):g.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.show(a.data.message,"danger")})}):b.post("/api/ami",a).then(function(){a.logout?b.put("/api/voice/queues/"+a.queue+"/agents",{agents:[a.UserId]}).then(function(){g.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.show(a.data.message,"danger")}):g.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.show(a.data.message,"danger")})},function(){c.info("Modal dismissed at: "+new Date)})},a.initAgents=function(){b.get("/api/voice/user_has_queues").success(function(b){a.agents=b,a.groups=_.map(_.groupBy(a.agents,"membername"),function(a,b){return{membername:b,queues:a}}),f.socket.on("user_has_voice_queue:save",function(b){var c=_.find(a.groups,{membername:b.membername}),d=a.groups.indexOf(c);if(c){var e=_.find(c.queues,{queue:b.queue});e?_.merge(e,b):a.groups[d].queues.push(b)}else{var f={membername:b.membername,queues:[b]};a.groups.unshift(f)}}),f.socket.on("user_has_voice_queue:remove",function(b){var c=_.find(a.groups,{membername:b.membername});_.remove(c.queues,{queue:b.queue}),c.queues.length||_.remove(a.groups,{membername:b.membername})}),f.socket.on("report_agent:save",function(b){var c=_.find(a.groups,{membername:b.membername}),d=a.groups.indexOf(c);if(c){var e=_.find(c.queues,{queue:b.queue});e?_.merge(e,b):a.groups[d].queues.push(b)}else{var f={membername:b.membername,queues:[b]};a.groups.unshift(f)}})}).error(function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewAgentPauseModalCtrl",["$scope","$uibModalInstance","items","data",function(a,b,c,d){a.items=c,a.data=d,a.selected={item:a.items[0],queue:_.isArray(d)?a.data[0].queue:a.data.queue,membername:_.isArray(d)?a.data[0].membername:a.data.membername,"interface":_.isArray(d)?a.data[0]["interface"]:a.data["interface"]},a.ok=function(c){var e={action:"QueuePause","interface":a.selected["interface"],paused:c,reason:a.selected.item};_.isArray(d)||(e.queue=a.selected.queue),b.close(e)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewAgentQueueModalCtrl",["$scope","$uibModalInstance","$http","pauses","data",function(a,b,c,d,e){a.initAdd=function(){a.data=e,a.pauses=d,a.selected={membername:a.data[0].membername,"interface":a.data[0]["interface"],penalty:0,paused:!1,reason:a.pauses[0],UserId:a.data[0].UserId},c.get("/api/voice/queues",{params:{page:0,per_page:100}}).success(function(b){a.queues=_.reject(b.rows,function(b){return _.find(a.data,{queue:b.name})?!0:!1}),a.selected.queue=a.queues[0]?a.queues[0].name:null,console.log(a.queues)}).error(function(a){console.error(a)})},a.initRemove=function(){a.data=e,_.isArray(e)?a.selected={membername:a.data[0].membername,"interface":a.data[0]["interface"],logout:!1,UserId:a.data[0].UserId}:a.selected={membername:a.data.membername,"interface":a.data["interface"],queue:a.data.queue,logout:!1,UserId:a.data.UserId}},a.okAdd=function(){console.log(a.selected);var c={action:"QueueAdd",logged:a.data[0].logged,loggedAt:a.data[0].loggedAt,queue:a.selected.queue,membername:a.selected.membername,"interface":a.selected["interface"],penalty:a.selected.penalty,paused:a.selected.paused,UserId:a.selected.UserId};c.paused&&(c.reason=a.selected.reason),b.close(c)},a.okRemove=function(){var c;_.isArray(a.data)?(c=[],a.data.forEach(function(b){c.push({action:"QueueRemove",queue:b.queue,"interface":b["interface"],logout:a.selected.logout,UserId:b.UserId})})):c={action:"QueueRemove",queue:a.selected.queue,logout:a.selected.logout,"interface":a.selected["interface"],UserId:a.selected.UserId},b.close(c)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewAgentReportCtrl",["$scope","$http","socket",function(a,b,c){a.$on("$destroy",function(){c.unsyncUpdates("report_agent")}),a.conf={agentsByPage:{name:"10",value:10},labels:["fullname","name","email"]},a.agentsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.initReport=function(){a.agents=[],b.get("/api/report/agents").success(function(b){a.agents=b,c.syncUpdates("report_agent",a.agents)}).error(function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").filter("VoiceRealtimeViewAgentReportFilter",function(){return function(a){return new Date(1970,0,1).setSeconds(a)}}),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewQueueReportCtrl",["$scope","$http","socket",function(a,b,c){a.$on("$destroy",function(){c.unsyncUpdates("report_queue")}),a.conf={queuesByPage:{name:"10",value:10},labels:["fullname","name","email"]},a.queuesByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.initReport=function(){a.queues=[],b.get("/api/report/queues").success(function(b){console.log(b),a.queues=b,c.syncUpdates("report_queue",a.queues)}).error(function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").filter("VoiceRealtimeViewQueueReportFilter",function(){return function(a){return new Date(1970,0,1).setSeconds(a)}}),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewQueuePauseModalCtrl",["$scope","$uibModalInstance","items","data",function(a,b,c,d){a.items=c,a.data=d,console.log(d),a.selected={item:a.items[0],queue:_.isArray(d)?a.data[0].queue:a.data.queue,membername:_.isArray(d)?a.data[0].membername:a.data.membername,"interface":_.isArray(d)?a.data[0]["interface"]:a.data["interface"]},a.ok=function(c,e){var f;_.isArray(d)?(f=[],d.forEach(function(b){f.push({action:"QueuePause",queue:b.queue,membername:b.membername,"interface":b["interface"],paused:c,reason:a.selected.item})})):f={action:"QueuePause",queue:a.selected.queue,membername:a.selected.membername,"interface":a.selected["interface"],paused:c,reason:a.selected.item},b.close(f)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewQueueCtrl",["$scope","$http","$log","$uibModal","$translate","socket","xAlert",function(a,b,c,d,e,f,g){a.conf={agentsByPage:{name:"10",value:10},labels:["fullname","name","email"]},a.agentsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.$on("$destroy",function(){f.unsyncUpdates("user_has_voice_queue")}),a.groups=[],a.pauses=["pausa1","pausa2","pausa3"],a.pause=function(f,h){var i=d.open({animation:!0,size:f,templateUrl:"app/voice/realtime/view/queue/pause.modal.html",controller:"VoiceRealtimeViewQueuePauseModalCtrl",resolve:{items:function(){return a.pauses},data:function(){return h}}});i.result.then(function(a){_.isArray(a)?a.forEach(function(a){b.post("/api/ami",a).then(function(a){console.log(a),g.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.log(a),g.show(a.data.message,"danger")})}):b.post("/api/ami",a).then(function(a){console.log(a),g.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){console.log(a),g.show(a.data.message,"danger")})},function(){c.info("Modal dismissed at: "+new Date)})},a.add=function(f,h){var i=d.open({animation:!0,size:f,templateUrl:"app/voice/realtime/view/queue/queue.modal.add.html",controller:"VoiceRealtimeViewQueueQueueModalCtrl",resolve:{pauses:function(){return a.pauses},data:function(){return h}}});i.result.then(function(a){console.log("action",a),b.post("/api/voice/user_has_queues",a).then(function(){a.login?b.post("/api/ami",a).then(function(){g.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.show(a.data.message,"danger")}):g.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.show(a.message,"danger")}),console.log(a)},function(){c.info("Modal dismissed at: "+new Date)})},a.remove=function(a,f){var h=d.open({animation:!0,size:a,templateUrl:"app/voice/realtime/view/queue/queue.modal.remove.html",controller:"VoiceRealtimeViewQueueQueueModalCtrl",resolve:{pauses:function(){return null},data:function(){return f}}});h.result.then(function(a){_.isArray(a)?a.forEach(function(a){
+b.post("/api/ami",a).then(function(){a.logout?b.put("/api/voice/queues/"+a.queue+"/agents",{agents:[a.UserId]}).then(function(){g.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.show(a.data.message,"danger")}):g.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.show(a.data.message,"danger")})}):b.post("/api/ami",a).then(function(){a.logout?b.put("/api/voice/queues/"+a.queue+"/agents",{agents:[a.UserId]}).then(function(){g.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.show(a.data.message,"danger")}):g.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){g.show(a.data.message,"danger")})},function(){c.info("Modal dismissed at: "+new Date)})},a.initQueues=function(){b.get("/api/voice/user_has_queues").success(function(b){a.queues=b,a.groups=_.map(_.groupBy(a.queues,"queue"),function(a,b){return{queue:b,agents:a}}),console.log("ok"),f.socket.on("user_has_voice_queue:save",function(b){console.log("item",b);var c=_.find(a.groups,{queue:b.queue}),d=a.groups.indexOf(c);if(c){var e=_.find(c.agents,{membername:b.membername});e?_.merge(e,b):a.groups[d].agents.push(b)}else{var f={queue:b.queue,agents:[b]};a.groups.unshift(f)}}),f.socket.on("user_has_voice_queue:remove",function(b){var c=_.find(a.groups,{queue:b.queue});_.remove(c.agents,{membername:b.membername}),c.agents.length||_.remove(a.groups,{queue:b.queue})}),f.socket.on("report_agent:save",function(b){var c=_.find(a.groups,{queue:b.queue}),d=a.groups.indexOf(c);if(c){var e=_.find(c.agents,{membername:b.membername});e?_.merge(e,b):a.groups[d].agents.push(b)}else{var f={queue:b.queue,agents:[b]};a.groups.unshift(f)}})}).error(function(a){console.error(a)})}}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewQueueQueueModalCtrl",["$scope","$uibModalInstance","$http","pauses","data",function(a,b,c,d,e){a.initAdd=function(){a.data=e,a.pauses=d,a.selected={penalty:0,paused:!1,reason:a.pauses[0]},a.$watch("selected.agent",function(b){b&&(a.selected.membername=b.name,a.selected["interface"]="SIP/"+b.name,a.selected.UserId=b.id)}),c.get("/api/agents",{params:{page:0,per_page:500}}).success(function(b){a.agents=_.reject(b.rows,function(b){return _.find(a.data,{membername:b.name})?!0:!1}),a.selected.queue=a.data[0]?a.data[0].queue:null}).error(function(a){console.error(a)})},a.initRemove=function(){a.data=e,console.log(e),_.isArray(e)?a.selected={queue:a.data[0].queue,logout:!1}:a.selected={membername:a.data.membername,"interface":a.data["interface"],queue:a.data.queue,logout:!1,UserId:a.data.UserId}},a.okAdd=function(){var c={action:"QueueAdd",queue:a.selected.queue,membername:a.selected.membername,"interface":a.selected["interface"],penalty:a.selected.penalty,paused:a.selected.paused,UserId:a.selected.UserId};c.paused&&(c.reason=a.selected.reason),b.close(c)},a.okRemove=function(){var c;_.isArray(a.data)?(c=[],a.data.forEach(function(b){c.push({action:"QueueRemove",queue:b.queue,"interface":b["interface"],logout:a.selected.logout,UserId:b.UserId})})):c={action:"QueueRemove",queue:a.selected.queue,logout:a.selected.logout,"interface":a.selected["interface"],UserId:a.selected.UserId},b.close(c)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("VoiceRealtimeViewCtrl",["$scope",function(a){a.agents=[{name:"View1",link:"main.voice.realtime.view.agents"},{name:"View2",link:"main.voice.realtime.view.areports"}],a.queues=[{name:"View1",link:"main.voice.realtime.view.queues"},{name:"View2",link:"main.voice.realtime.view.qreports"}]}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.realtime.view",{url:"/view",templateUrl:"app/voice/realtime/view/view.html",controller:"VoiceRealtimeViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.voice.realtime.view.queues",{url:"/queues",controller:"VoiceRealtimeViewQueueCtrl",templateUrl:"app/voice/realtime/view/queue/queue.html"}).state("main.voice.realtime.view.qreports",{url:"/qreport/:search",controller:"VoiceRealtimeViewQueueReportCtrl",templateUrl:"app/voice/realtime/view/qreport/report.html"}).state("main.voice.realtime.view.agents",{url:"/agents",controller:"VoiceRealtimeViewAgentCtrl",templateUrl:"app/voice/realtime/view/agent/agent.html"}).state("main.voice.realtime.view.areports",{url:"/areport",controller:"VoiceRealtimeViewAgentReportCtrl",templateUrl:"app/voice/realtime/view/areport/report.html"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.routes.inbound",{url:"/inbound",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInboundListCtrl",["$scope","$http","socket","$translate","$rootScope","xAlert","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={routesByPage:{name:"10",value:10}},a.routesByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.routes={checked:[]},a.check=function(b){b?a.routes.checked=angular.copy(_.pluck(a.displayedRoutes,"id")):a.routes.checked=[]},a.getRoutes=function(b){return _.map(a.displayedRoutes,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){c.unsyncUpdates("voice_extension"),b.url="/api/voice/extensions/route/inbound",h.getPage(b).then(function(c){a.displayedRoutes=c.rows,b.pagination.numberOfPages=c.total_pages,e.updateTableConfig(a.routesByPage,a.displayedRoutes.length),e.updateTableConfig(a.conf.routesByPage,a.displayedRoutes.length)}),c.socket.on("voice_extension:save",function(c){"inbound"===c.type&&a.initList(b)}),c.socket.on("voice_extension:remove",function(c){"inbound"===c.type&&(a.routes.checked=_.without(a.routes.checked,c.id),a.initList(b))})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/voice/extensions/"+a).success(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(a.message,"danger")})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/voice/extensions/",{params:{id:a.routes.checked}}).success(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(d.instant(a.message),"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.routes.inbound.list",{url:"/list",templateUrl:"app/voice/route/inbound/list/list.html",controller:"VoiceRouteInboundListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInboundViewCtrl",["$scope","$http","$translate","$stateParams","socket","$location","WizardHandler","Modal","xAlert","application","interval",function(a,b,c,d,e,f,g,h,i,j,k){a.$translate=c,a.$application=j.application,a.$interval=k.interval,a.initApplication=function(){a.forms={settings:void 0,interval:void 0},a.application={VoiceExtensionId:d.id,type:"inbound"},a.interval={intType:"always",t_from:moment(new Date),t_to:moment(new Date),wd_from:"always",wd_to:"always",md_from:"always",md_to:"always",m_from:"always",m_to:"always",alwaysTime:!0},a.main={app:""}},a.joinInterval=function(a){console.log(a);var b,c,d,e;return b=a.t_from&&a.t_to&&!a.alwaysTime?moment(a.t_from).format("HH:mm")+"-"+moment(a.t_to).format("HH:mm"):"*",a.wd_from&&"always"!==a.wd_from?(c=a.wd_from.toLowerCase(),a.wd_to&&"always"!==a.wd_to&&(c+="-"+a.wd_to.toLowerCase())):c="*",a.md_from&&"always"!==a.md_from?(d=a.md_from,a.md_to&&"always"!==a.md_to&&(d+="-"+a.md_to)):d="*",a.m_from&&"always"!==a.m_from?(e=a.m_from.toLowerCase(),a.m_to&&"always"!==a.m_to&&(e+="-"+a.m_to.toLowerCase())):e="*",b+","+c+","+d+","+e},a.$watch("main.app",function(c){if(c){var e,f;switch(d.appId||(a.application={VoiceExtensionId:d.id,type:"inbound",interval:a.application.interval}),c){case"Queue":e="api/voice/queues",f="/api/uploads";break;case"Playback":e="/api/uploads";break;case"AGI":e="/api/square/projects";break;case"Goto":e="/api/voice/contexts";break;default:e=null,f=null}e&&b.get(e).success(function(b){a.items="Playback"!==c?b.rows:b}),f&&b.get(f).success(function(b){a.items2=b})}},!0),a.getIntervals=function(){b.get("/api/intervals").success(function(b){a.Intervals=b.rows,e.syncUpdates("interval",a.Intervals)}).error(function(a){i.show(c.instant(a.message),"danger")})},a.getRouteApplications=function(){b.get("/api/voice/extensions/"+d.id+"/applications").success(function(b){a.routeApplications=b,e.unsyncUpdates("voice_extension"),e.socket.on("voice_extension:remove",function(b){b.where.appGroup&&_.remove(a.routeApplications,function(a){return b.where.appGroup==a.appGroup})}),e.socket.on("voice_extension:save",function(b){if(b.VoiceExtensionId===d.id&&b.isApp){var c=_.find(a.routeApplications,{id:b.id});c||a.routeApplications.push(b)}})})},a.sortableOptions={stop:function(){b.post("api/voice/extensions/"+d.id+"/applications",{applications:_.pluck(a.routeApplications,"appGroup")}).success(function(b){a.getRouteApplications()}).error(function(a){console.error(a)})},"ui-floating":!0},a.getRoute=function(){b.get("/api/voice/extensions/"+d.id).success(function(b){a.route=b,e.socket.on("voice_extension:update",function(b){b.id==d.id&&(a.route=b)})}).error(function(a){f.path("/voice/routes/inbound/list")})},a.getApplication=function(){b.get("/api/voice/extensions/applications/"+d.appId).success(function(b){var c=_.filter(a.$application.applications,function(a){return a.value===b.app});if(c.length>0&&!b.customApp?a.main.app=b.app:a.main.app="custom",a.application=b,a.interval.t_from=moment(new Date),a.interval.t_to=moment(new Date),"Queue"===b.app&&(a.application.app_options=b.app_options?b.app_options.split(","):[]),a.interval.intType=b.IntervalId?"list":"*,*,*,*"===b.interval?"always":"custom",a.interval.IntervalId=b.IntervalId,!b.IntervalId){var d,e=b.interval?b.interval.split(","):["*","*","*","*"];e.forEach(function(b,c){switch(c){case 0:"*"!==b?(d=b.split("-"),a.interval.t_from=moment(d[0],"HH:mm"),a.interval.t_to=moment(d[1],"HH:mm"),a.interval.alwaysTime=!1):(a.interval.t_from=moment(new Date),a.interval.t_to=moment(new Date),a.interval.alwaysTime=!0);break;case 1:"*"!==b?(d=b.split("-"),a.interval.wd_from=_.capitalize(d[0]),a.interval.wd_to=d[1]?_.capitalize(d[1]):"always"):(a.interval.wd_from="always",a.interval.wd_to="always");break;case 2:"*"!==b?(d=b.split("-"),a.interval.md_from=d[0],a.interval.md_to=d[1]?d[1]:"always"):(a.interval.md_from="always",a.interval.md_to="always");break;case 3:"*"!==b?(d=b.split("-"),a.interval.m_from=_.capitalize(d[0]),a.interval.m_to=d[1]?_.capitalize(d[1]):"always"):(a.interval.m_from="always",a.interval.m_to="always")}})}}).error(function(a){f.path("/voice/routes/inbound/view/"+d.id+"/applications")})},a.updateRoute=function(){var e=angular.copy(a.route);b.put("/api/voice/extensions/"+d.id,e).success(function(){i.show(c.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(b){i.show(c.instant(b.message),"danger"),a.route=e})},a.getContexts=function(){b.get("/api/voice/contexts").success(function(b){a.voiceContexts=b.rows,e.syncUpdates("voice_context",a.voiceContexts)}).error(function(a){i.show(c.instant(a.message),"danger")})},a.createItem=function(){switch(a.application.app=a.main.app,a.application.exten=a.route.exten,a.application.context=a.route.context,a.application.app_options&&"Queue"===a.application.app&&(a.application.app_options=a.application.app_options.join(",")),a.interval.intType){case"list":a.application.IntervalId=a.interval.IntervalId,a.application.interval=_.result(_.find(a.Intervals,{id:a.interval.IntervalId}),"name");break;case"custom":a.application.IntervalId=null,a.application.interval=a.joinInterval(a.interval);break;case"always":a.application.IntervalId=null,a.application.interval="*,*,*,*"}b.post("/api/voice/extensions/",a.application).success(function(){f.path("/voice/routes/inbound/view/"+d.id+"/applications")}).error(function(a){i.show(c.instant(a.message),"danger")})},a.updateItem=function(){switch(a.application.app_options&&"Queue"===a.application.app&&(a.application.app_options=a.application.app_options.join(",")),a.interval.intType){case"list":a.application.IntervalId=a.interval.IntervalId,a.application.interval=_.result(_.find(a.Intervals,{id:a.interval.IntervalId}),"name");break;case"custom":a.application.IntervalId=null,a.application.interval=a.joinInterval(a.interval);break;case"always":a.application.IntervalId=null,a.application.interval="*,*,*,*"}b.put("/api/voice/extensions/applications/"+d.appId,a.application).success(function(){i.show(c.instant("MESSAGE_WELL_DONE")+"!","success"),f.path("/voice/routes/inbound/view/"+d.id+"/applications")}).error(function(a){i.show(c.instant(a.message),"danger")})},a.deleteItem=h.confirm["delete"](function(d){b["delete"]("/api/voice/extensions/"+d).success(function(){a.getRouteApplications(),i.show(c.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){i.show(c.instant(a.message),"danger")})}),a.goNext=function(){g.wizard().next()},a.previous=function(){g.wizard().previous()},a.formValidation=function(a){return a},a.$on("destroy",function(){e.unsyncUpdates("voice_extension")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.routes.inbound.view",{url:"/view/:id",templateUrl:"app/voice/route/inbound/view/view.html",controller:"VoiceRouteInboundViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.voice.routes.inbound.view.settings",{url:"/settings",templateUrl:"app/voice/route/inbound/view/view.settings.html"}).state("main.voice.routes.inbound.view.applications",{url:"/applications",templateUrl:"app/voice/route/inbound/view/view.applications.html",cache:!1}).state("main.voice.routes.inbound.view.application",{url:"/application",templateUrl:"app/voice/route/inbound/view/view.application.html",authenticate:!0}).state("main.voice.routes.inbound.view.applications.settings",{url:"/settings/:appId",templateUrl:"app/voice/route/inbound/view/view.applicationSettings.html",authenticate:!0,controller:"VoiceRouteInboundViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInboundWizardCtrl",["$scope","$http","WizardHandler","$location","xAlert","socket","$translate",function(a,b,c,d,e,f,g){a.forms={route:void 0},a.item={type:"inbound",appdata:"Inbound Call",context:"from-voip-provider"},a.next=function(){b.post("/api/voice/extensions/validate/",a.item).success(function(a){console.log(a),a.length?e.show(g.instant("MESSAGE_EXIST_ROUTE"),"danger"):c.wizard().next()}).error(function(a){e.show(g.instant(a.message),"danger")})},a.previous=function(){c.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("/api/voice/extensions/",a.item).success(function(a){d.path("/voice/routes/inbound/view/"+a.id+"/applications")}).error(function(a){e.show(g.instant(a.message),"danger")})},a.getContexts=function(){b.get("/api/voice/contexts").success(function(b){a.voiceContexts=b,f.syncUpdates("voice_context",a.voiceContexts)}).error(function(a){e.show(g.instant(a.message),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.routes.inbound.wizard",{url:"/wizard",templateUrl:"app/voice/route/inbound/wizard/wizard.html",controller:"VoiceRouteInboundWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.routes.internal",{url:"/internal",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInternalListCtrl",["$scope","$http","socket","$translate","$rootScope","xAlert","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={routesByPage:{name:"10",value:10}},a.routesByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.routes={checked:[]},a.check=function(b){b?a.routes.checked=angular.copy(_.pluck(a.displayedRoutes,"id")):a.routes.checked=[]},a.getRoutes=function(b){return _.map(a.displayedRoutes,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){c.unsyncUpdates("voice_extension"),b.url="/api/voice/extensions/route/internal",h.getPage(b).then(function(c){a.displayedRoutes=c.rows,b.pagination.numberOfPages=c.total_pages,e.updateTableConfig(a.routesByPage,a.displayedRoutes.length),e.updateTableConfig(a.conf.routesByPage,a.displayedRoutes.length)}),c.socket.on("voice_extension:save",function(c){"internal"===c.type&&a.initList(b)}),c.socket.on("voice_extension:remove",function(c){"internal"===c.type&&(a.routes.checked=_.without(a.routes.checked,c.id),a.initList(b))})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/voice/extensions/"+a).success(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(a.message,"danger")})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/voice/extensions/",{params:{id:a.routes.checked}}).success(function(){f.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(d.instant(a.message),"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.routes.internal.list",{url:"/list",templateUrl:"app/voice/route/internal/list/list.html",controller:"VoiceRouteInternalListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInternalViewCtrl",["$scope","$http","$translate","$stateParams","socket","$location","WizardHandler","Modal","xAlert","application","interval",function(a,b,c,d,e,f,g,h,i,j,k){a.$translate=c,a.$application=j.application,a.$interval=k.interval,a.initApplication=function(){a.forms={settings:void 0,interval:void 0},a.application={VoiceExtensionId:d.id,type:"internal"},a.interval={intType:"always",t_from:moment(new Date),t_to:moment(new Date),wd_from:"always",wd_to:"always",md_from:"always",md_to:"always",m_from:"always",m_to:"always",alwaysTime:!0},a.main={app:""}},a.joinInterval=function(a){console.log(a);var b,c,d,e;return b=a.t_from&&a.t_to&&!a.alwaysTime?moment(a.t_from).format("HH:mm")+"-"+moment(a.t_to).format("HH:mm"):"*",a.wd_from&&"always"!==a.wd_from?(c=a.wd_from.toLowerCase(),a.wd_to&&"always"!==a.wd_to&&(c+="-"+a.wd_to.toLowerCase())):c="*",a.md_from&&"always"!==a.md_from?(d=a.md_from,a.md_to&&"always"!==a.md_to&&(d+="-"+a.md_to)):d="*",a.m_from&&"always"!==a.m_from?(e=a.m_from.toLowerCase(),a.m_to&&"always"!==a.m_to&&(e+="-"+a.m_to.toLowerCase())):e="*",b+","+c+","+d+","+e},a.$watch("main.app",function(c){if(c){var e,f;switch(d.appId||(a.application={VoiceExtensionId:d.id,type:"internal",interval:a.application.interval}),c){case"Queue":e="api/voice/queues",f="/api/uploads";break;case"Playback":e="/api/uploads";break;case"AGI":e="/api/square/projects";break;case"Goto":e="/api/voice/contexts";break;default:e=null,f=null}e&&b.get(e).success(function(b){a.items="Playback"!==c?b.rows:b}),f&&b.get(f).success(function(b){a.items2=b})}},!0),a.getIntervals=function(){b.get("/api/intervals").success(function(b){a.Intervals=b.rows,e.syncUpdates("interval",a.Intervals)}).error(function(a){i.show(c.instant(a.message),"danger")})},a.getRouteApplications=function(){b.get("/api/voice/extensions/"+d.id+"/applications").success(function(b){a.routeApplications=b,e.unsyncUpdates("voice_extension"),e.socket.on("voice_extension:remove",function(b){b.where.appGroup&&_.remove(a.routeApplications,function(a){return b.where.appGroup==a.appGroup})}),e.socket.on("voice_extension:save",function(b){if(b.VoiceExtensionId===d.id&&b.isApp){var c=_.find(a.routeApplications,{id:b.id});c||a.routeApplications.push(b)}})})},a.sortableOptions={stop:function(){b.post("api/voice/extensions/"+d.id+"/applications",{applications:_.pluck(a.routeApplications,"appGroup")}).success(function(b){a.getRouteApplications()}).error(function(a){console.error(a)})},"ui-floating":!0},a.getRoute=function(){b.get("/api/voice/extensions/"+d.id).success(function(b){a.route=b,e.socket.on("voice_extension:update",function(b){b.id==d.id&&(a.route=b)})}).error(function(a){console.error(a),f.path("/voice/routes/internal/list")})},a.getApplication=function(){b.get("/api/voice/extensions/applications/"+d.appId).success(function(b){var c=_.filter(a.applications,function(a){return a.value===b.app});if(c.length>0&&!b.customApp?a.main.app=b.app:a.main.app="custom",a.application=b,a.interval.t_from=moment(new Date),a.interval.t_to=moment(new Date),"Queue"===b.app&&(a.application.app_options=b.app_options?b.app_options.split(","):[]),a.interval.intType=b.IntervalId?"list":"custom",a.interval.IntervalId=b.IntervalId,!b.IntervalId){var d,e=b.interval?b.interval.split(","):["*","*","*","*"];e.forEach(function(b,c){switch(c){case 0:"*"!==b?(d=b.split("-"),a.interval.t_from=moment(d[0],"HH:mm"),a.interval.t_to=moment(d[1],"HH:mm"),a.interval.alwaysTime=!1):(a.interval.t_from=moment(new Date),a.interval.t_to=moment(new Date),a.interval.alwaysTime=!0);break;case 1:"*"!==b?(d=b.split("-"),a.interval.wd_from=_.capitalize(d[0]),a.interval.wd_to=d[1]?_.capitalize(d[1]):"always"):(a.interval.wd_from="always",a.interval.wd_to="always");break;case 2:"*"!==b?(d=b.split("-"),a.interval.md_from=d[0],a.interval.md_to=d[1]?d[1]:"always"):(a.interval.md_from="always",a.interval.md_to="always");break;case 3:"*"!==b?(d=b.split("-"),a.interval.m_from=_.capitalize(d[0]),a.interval.m_to=d[1]?_.capitalize(d[1]):"always"):(a.interval.m_from="always",a.interval.m_to="always")}})}}).error(function(a){f.path("/voice/routes/internal/view/"+d.id+"/applications")})},a.updateRoute=function(){var e=angular.copy(a.route);b.put("/api/voice/extensions/"+d.id,e).success(function(){i.show(c.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(b){i.show(c.instant(b.message),"danger"),a.route=e})},a.getContexts=function(){b.get("/api/voice/contexts").success(function(b){a.voiceContexts=b.rows,e.syncUpdates("voice_context",a.voiceContexts)}).error(function(a){i.show(c.instant(a.message),"danger")})},a.createItem=function(){switch(a.application.app=a.main.app,a.application.exten=a.route.exten,a.application.context=a.route.context,a.application.app_options&&"Queue"===a.application.app&&(a.application.app_options=a.application.app_options.join(",")),a.interval.intType){case"list":a.application.IntervalId=a.interval.IntervalId,a.application.interval=_.result(_.find(a.Intervals,{id:a.interval.IntervalId}),"name");break;case"custom":a.application.IntervalId=null,a.application.interval=a.joinInterval(a.interval);break;case"always":a.application.IntervalId=null,a.application.interval="*,*,*,*"}b.post("/api/voice/extensions/",a.application).success(function(){f.path("/voice/routes/internal/view/"+d.id+"/applications")}).error(function(a){i.show(c.instant(a.message),"danger")})},a.updateItem=function(){switch(a.application.app_options&&"Queue"===a.application.app&&(a.application.app_options=a.application.app_options.join(",")),a.interval.intType){case"list":a.application.IntervalId=a.interval.IntervalId,a.application.interval=_.result(_.find(a.Intervals,{id:a.interval.IntervalId}),"name");break;case"custom":a.application.IntervalId=null,a.application.interval=a.joinInterval(a.interval);break;case"always":a.application.IntervalId=null,a.application.interval="*,*,*,*"}b.put("/api/voice/extensions/applications/"+d.appId,a.application).success(function(){i.show(c.instant("MESSAGE_WELL_DONE")+"!","success"),f.path("/voice/routes/internal/view/"+d.id+"/applications")}).error(function(a){i.show(c.instant(a.message),"danger")})},a.deleteItem=h.confirm["delete"](function(d){b["delete"]("/api/voice/extensions/"+d).success(function(b){a.getRouteApplications(),i.show(c.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){i.show(c.instant(a.message),"danger")})}),a.goNext=function(){g.wizard().next()},a.previous=function(){g.wizard().previous()},a.formValidation=function(a){return a},a.$on("destroy",function(){e.unsyncUpdates("voice_extension")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.routes.internal.view",{url:"/view/:id",templateUrl:"app/voice/route/internal/view/view.html",controller:"VoiceRouteInternalViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.voice.routes.internal.view.settings",{url:"/settings",templateUrl:"app/voice/route/internal/view/view.settings.html"}).state("main.voice.routes.internal.view.applications",{url:"/applications",templateUrl:"app/voice/route/internal/view/view.applications.html",cache:!1}).state("main.voice.routes.internal.view.application",{url:"/application",templateUrl:"app/voice/route/internal/view/view.application.html",authenticate:!0}).state("main.voice.routes.internal.view.applications.settings",{url:"/settings/:appId",templateUrl:"app/voice/route/internal/view/view.applicationSettings.html",authenticate:!0,controller:"VoiceRouteInternalViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteInternalWizardCtrl",["$scope","$http","WizardHandler","$location","xAlert","socket","$translate",function(a,b,c,d,e,f,g){a.forms={route:void 0},a.item={type:"internal",appdata:"Iternal Call",context:"from-sip"},a.next=function(){b.post("/api/voice/extensions/validate/",a.item).success(function(a){console.log(a),a.length?e.show(g.instant("MESSAGE_EXIST_ROUTE"),"danger"):c.wizard().next()}).error(function(a){e.show(g.instant(a.message),"danger")})},a.previous=function(){c.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("/api/voice/extensions/",a.item).success(function(a){d.path("/voice/routes/internal/view/"+a.id+"/applications")}).error(function(a){e.show(g.instant(a.message),"danger")})},a.getContexts=function(){b.get("/api/voice/contexts").success(function(b){a.voiceContexts=b,f.syncUpdates("voice_context",a.voiceContexts)}).error(function(a){e.show(g.instant(a.message),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.routes.internal.wizard",{url:"/wizard",templateUrl:"app/voice/route/internal/wizard/wizard.html",controller:"VoiceRouteInternalWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteOutboundListCtrl",["$scope","$http","socket","$rootScope","$translate","xAlert","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={routesByPage:{name:"10",value:10}},a.routesByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.routes={checked:[]},a.check=function(b){b?a.routes.checked=angular.copy(_.pluck(a.displayedRoutes,"id")):a.routes.checked=[]},a.getRoutes=function(b){return _.map(a.displayedRoutes,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){c.unsyncUpdates("voice_extension"),b.url="/api/voice/extensions/route/outbound",h.getPage(b).then(function(c){a.displayedRoutes=c.rows,b.pagination.numberOfPages=c.total_pages,d.updateTableConfig(a.routesByPage,a.displayedRoutes.length),d.updateTableConfig(a.conf.routesByPage,a.displayedRoutes.length)}),c.socket.on("voice_extension:save",function(c){"outbound"===c.type&&a.initList(b)}),c.socket.on("voice_extension:remove",function(c){"outbound"===c.type&&(a.routes.checked=_.without(a.routes.checked,c.id),a.initList(b))})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/voice/extensions/"+a).success(function(){f(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(a.message,"danger")})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/voice/extensions/",{params:{id:a.routes.checked}}).success(function(){f.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(e.instant(a.message),"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.routes.outbound.list",{url:"/list",templateUrl:"app/voice/route/outbound/list/list.html",controller:"VoiceRouteOutboundListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.routes.outbound",{url:"/outbound",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteOutboundViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","socket","$location","WizardHandler","Modal","application","interval",function(a,b,c,d,e,f,g,h,i,j,k){a.$translate=d,a.$application=j.application,a.$interval=k.interval,a.initApplication=function(){a.forms={info:void 0,interval:void 0},a.application={VoiceExtensionId:e.id,type:"outbound"},a.interval={intType:"always",t_from:moment(new Date),t_to:moment(new Date),wd_from:"always",wd_to:"always",md_from:"always",md_to:"always",m_from:"always",m_to:"always",alwaysTime:!0},a.main={app:""},a.applications=[{name:"Dial",value:"Dial"},{name:"Custom",value:"custom"}]},a.joinInterval=function(a){console.log(a);var b,c,d,e;return b=a.t_from&&a.t_to&&!a.alwaysTime?moment(a.t_from).format("HH:mm")+"-"+moment(a.t_to).format("HH:mm"):"*",a.wd_from&&"always"!==a.wd_from?(c=a.wd_from.toLowerCase(),a.wd_to&&"always"!==a.wd_to&&(c+="-"+a.wd_to.toLowerCase())):c="*",a.md_from&&"always"!==a.md_from?(d=a.md_from,a.md_to&&"always"!==a.md_to&&(d+="-"+a.md_to)):d="*",a.m_from&&"always"!==a.m_from?(e=a.m_from.toLowerCase(),a.m_to&&"always"!==a.m_to&&(e+="-"+a.m_to.toLowerCase())):e="*",b+","+c+","+d+","+e},a.$watch("main.app",function(c){if(c){var d,f;switch(e.appId||(a.application={VoiceExtensionId:e.id,type:"outbound",interval:a.application.interval}),c){case"Dial":d="api/trunks",f="/api/voice/contexts";break;default:d=null,f=null}d&&b.get(d).success(function(b){a.items="Dial"===c?b.rows:b}),f&&b.get(f).success(function(b){a.items2="Dial"===c?b.rows:b})}},!0),a.$watch("application.TrunkId",function(b){b&&(a.application.trunk=_.result(_.find(a.items,{id:b}),"name"))},!0),a.getIntervals=function(){b.get("/api/intervals").success(function(b){a.Intervals=b.rows,f.syncUpdates("interval",a.Intervals)}).error(function(a){c.show(d.instant(a.message),"danger")})},a.getRouteApplications=function(){b.get("/api/voice/extensions/"+e.id+"/applications").success(function(b){a.routeApplications=b,f.unsyncUpdates("voice_extension"),f.socket.on("voice_extension:remove",function(b){b.where.appGroup&&_.remove(a.routeApplications,function(a){return b.where.appGroup==a.appGroup})}),f.socket.on("voice_extension:save",function(b){if(b.VoiceExtensionId===e.id&&b.isApp){var c=_.find(a.routeApplications,{id:b.id});c||a.routeApplications.push(b)}})})},a.sortableOptions={stop:function(){b.post("api/voice/extensions/"+e.id+"/applications",{applications:_.pluck(a.routeApplications,"appGroup")}).success(function(){a.getRouteApplications()}).error(function(a){console.error(a)})},"ui-floating":!0},a.getRoute=function(){b.get("/api/voice/extensions/"+e.id).success(function(b){a.route=b,f.socket.on("voice_extension:update",function(b){b.id==e.id&&(a.route=b)})}).error(function(a){g.path("/voice/routes/outbound/list")})},a.getApplication=function(){b.get("/api/voice/extensions/applications/"+e.appId).success(function(b){var c=_.filter(a.applications,function(a){return a.value===b.app});if(c.length>0&&!b.customApp?a.main.app=b.app:a.main.app="custom",a.application=b,
+a.interval.intType=b.IntervalId?"list":"custom",a.interval.IntervalId=b.IntervalId,!b.IntervalId){var d,e=b.interval?b.interval.split(","):["*","*","*","*"];e.forEach(function(b,c){switch(c){case 0:"*"!==b?(d=b.split("-"),a.interval.t_from=moment(d[0],"HH:mm"),a.interval.t_to=moment(d[1],"HH:mm"),a.interval.alwaysTime=!1):(a.interval.t_from=moment(new Date),a.interval.t_to=moment(new Date),a.interval.alwaysTime=!0);break;case 1:"*"!==b?(d=b.split("-"),a.interval.wd_from=_.capitalize(d[0]),a.interval.wd_to=d[1]?_.capitalize(d[1]):"always"):(a.interval.wd_from="always",a.interval.wd_to="always");break;case 2:"*"!==b?(d=b.split("-"),a.interval.md_from=d[0],a.interval.md_to=d[1]?d[1]:"always"):(a.interval.md_from="always",a.interval.md_to="always");break;case 3:"*"!==b?(d=b.split("-"),a.interval.m_from=_.capitalize(d[0]),a.interval.m_to=d[1]?_.capitalize(d[1]):"always"):(a.interval.m_from="always",a.interval.m_to="always")}})}}).error(function(a){console.error(a),g.path("/voice/routes/outbound/view/"+e.id+"/routes")})},a.updateRoute=function(){var f=angular.copy(a.route);b.put("/api/voice/extensions/"+e.id,f).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(b){c.show(d.instant(b.message),"danger"),a.route=f})},a.getContexts=function(){b.get("/api/voice/contexts").success(function(b){a.voiceContexts=b.rows,f.syncUpdates("voice_context",a.voiceContexts)}).error(function(a){c.show(d.instant(a.message),"danger")})},a.createItem=function(){switch(a.application.app=a.main.app,a.application.exten=a.route.exten,a.application.context=a.route.context,a.interval.intType){case"list":a.application.IntervalId=a.interval.IntervalId,a.application.interval=_.result(_.find(a.Intervals,{id:a.interval.IntervalId}),"name");break;case"custom":a.application.IntervalId=null,a.application.interval=a.joinInterval(a.interval);break;case"always":a.application.IntervalId=null,a.application.interval="*,*,*,*"}b.post("/api/voice/extensions/",a.application).success(function(){g.path("/voice/routes/outbound/view/"+e.id+"/routes")}).error(function(a){c.show(d.instant(a.message),"danger")})},a.updateItem=function(){switch(a.interval.intType){case"list":a.application.IntervalId=a.interval.IntervalId,a.application.interval=_.result(_.find(a.Intervals,{id:a.interval.IntervalId}),"name");break;case"custom":a.application.IntervalId=null,a.application.interval=a.joinInterval(a.interval);break;case"always":a.application.IntervalId=null,a.application.interval="*,*,*,*"}b.put("/api/voice/extensions/applications/"+e.appId,a.application).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success"),g.path("/voice/routes/outbound/view/"+e.id+"/routes")}).error(function(a){c.show(d.instant(a.message),"danger")})},a.deleteItem=i.confirm["delete"](function(e){b["delete"]("/api/voice/extensions/"+e).success(function(b){a.getRouteApplications(),c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){c.show(d.instant(a.message),"danger")})}),a.goNext=function(){h.wizard().next()},a.previous=function(){h.wizard().previous()},a.formValidation=function(a){return a},a.$on("destroy",function(){f.unsyncUpdates("voice_extension")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.routes.outbound.view",{url:"/view/:id",templateUrl:"app/voice/route/outbound/view/view.html",controller:"VoiceRouteOutboundViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.voice.routes.outbound.view.settings",{url:"/settings",templateUrl:"app/voice/route/outbound/view/view.settings.html"}).state("main.voice.routes.outbound.view.routes",{url:"/routes",templateUrl:"app/voice/route/outbound/view/view.routes.html",cache:!1}).state("main.voice.routes.outbound.view.route",{url:"/route",templateUrl:"app/voice/route/outbound/view/view.route.html",authenticate:!0}).state("main.voice.routes.outbound.view.routes.settings",{url:"/settings/:appId",templateUrl:"app/voice/route/outbound/view/view.routeSettings.html",authenticate:!0,controller:"VoiceRouteOutboundViewCtrl"})}]),angular.module("xCallyShuttleApp").controller("VoiceRouteOutboundWizardCtrl",["$scope","$http","WizardHandler","$location","xAlert","socket","$translate",function(a,b,c,d,e,f,g){a.forms={route:void 0},a.item={type:"outbound",appdata:"Outbound Call",context:"from-sip"},a.next=function(){b.post("/api/voice/extensions/validate/",a.item).success(function(a){console.log(a),a.length?e.show(g.instant("MESSAGE_EXIST_ROUTE"),"danger"):c.wizard().next()}).error(function(a){e.show(g.instant(a.message),"danger")})},a.previous=function(){c.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("/api/voice/extensions/",a.item).success(function(a){d.path("/voice/routes/outbound/view/"+a.id+"/routes")}).error(function(a){e.show(g.instant(a.message),"danger")})},a.getContexts=function(){b.get("/api/voice/contexts").success(function(b){a.voiceContexts=b,f.syncUpdates("voice_context",a.voiceContexts)}).error(function(a){e.show(g.instant(a.message),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.routes.outbound.wizard",{url:"/wizard",templateUrl:"app/voice/route/outbound/wizard/wizard.html",controller:"VoiceRouteOutboundWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.routes",{url:"/routes",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice",{url:"/voice",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("VoiceVoicemailListCtrl",["$scope","$http","$translate","$rootScope","xAlert","socket","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={voicemailsByPage:{name:"10",value:10},labels:["mailbox","fullname","email"]},a.voicemailsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.voicemails={checked:[]},a.check=function(b,c){c?a.voicemails.checked=angular.copy(_.pluck(a.displayedVoicemails,"uniqueid")):a.voicemails.checked=[]},a.getVoicemails=function(b){return _.map(a.displayedVoicemails,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){f.unsyncUpdates("voice_voicemail"),b.url="/api/voice/voicemails",h.getPage(b).then(function(c){a.displayedVoicemails=c.rows,b.pagination.numberOfPages=c.total_pages,d.updateTableConfig(a.voicemailsByPage,a.displayedVoicemails.length),d.updateTableConfig(a.conf.voicemailsByPage,a.displayedVoicemails.length)}),f.socket.on("voice_voicemail:save",function(){a.initList(b)}),f.socket.on("voice_voicemail:remove",function(c){a.voicemails.checked=_.without(a.voicemails.checked,c.uniqueid),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/voice/voicemails/"+a).success(function(){e.show(c.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){e.show(a.message,"danger")})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/voice/voicemails",{params:{uniqueid:a.voicemails.checked}}).success(function(){e.show(c.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){e.show(c.instant(a.message),"danger")})})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.voicemails.list",{url:"/list",templateUrl:"app/voice/voicemail/list/list.html",controller:"VoiceVoicemailListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("VoiceVoicemailViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","socket","$sce","Modal","$location",function(a,b,c,d,e,f,g,h,i){a.getVoicemail=function(){b.get("/api/voice/voicemails/"+e.uniqueid).success(function(b){delete b.password,delete b.stamp,a.voicemail=b}).error(function(a){console.error(a),i.path("/voice/voicemails/list")})},a.updateVoiceVoicemail=function(){var f=angular.copy(a.voicemail);b.put("/api/voice/voicemails/"+e.uniqueid,f).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(b){c.show(d.instant(b.message),"danger"),a.voicemail=f})},a.getContexts=function(){b.get("/api/voice/contexts").success(function(b){a.voiceContexts=b.rows,f.syncUpdates("voice_context",a.voiceContexts)}).error(function(a){c.show(a.message,"danger")})},a.getMessages=function(){b.get("/api/voice/voicemails/"+e.uniqueid+"/messages/").success(function(b){a.voicemailMessages=b,f.syncUpdates("voice_voicemail_messages",a.voicemailMessages)}).error(function(a){c.show(a.message,"danger")})},a.encodeRecording=function(a){return g.trustAsResourceUrl("data:audio/ogg;base64,"+j(a.data))},a.returnMessageDate=function(a){return a.split("T")[0]},a.returnDuration=function(a){return 1e3*a},a.deleteItem=h.confirm["delete"](function(a){b["delete"]("/api/voice/voicemails/messages/"+a+"/delete").success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){console.log(a),c.show(a.message,"danger")})});var j=function(a){for(var b=new Uint8Array(a),c=b.byteLength,d="",e=0;c>e;e++)d+=String.fromCharCode(b[e]);return window.btoa(d)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.voicemails.view",{url:"/view/:uniqueid",templateUrl:"app/voice/voicemail/view/view.html",controller:"VoiceVoicemailViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.voice.voicemails.view.settings",{url:"/settings",templateUrl:"app/voice/voicemail/view/view.settings.html"}).state("main.voice.voicemails.view.messages",{url:"/messages",templateUrl:"app/voice/voicemail/view/view.messages.html"})}]),angular.module("xCallyShuttleApp").controller("VoicemailCtrl",["$scope",function(a){a.message="Hello"}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.voicemails",{url:"/voicemails",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("VoiceVoicemailWizardCtrl",["$scope","$http","WizardHandler","$location","xAlert","socket","$translate",function(a,b,c,d,e,f,g){a.initWizard=function(){a.forms={},a.item={}},a.next=function(){b.post("/api/voice/voicemails/validate/",a.item).success(function(a){a.length?e.show(g.instant("MESSAGE_EXIST_MAILBOX"),"danger"):c.wizard().next()}).error(function(a){e.show(a.message,"danger")})},a.previous=function(){c.wizard().previous()},a.exitValidation=function(a){return a},a.createItem=function(){a.item.customer_id=a.item.mailbox,b.post("/api/voice/voicemails/",a.item).success(function(){d.path("/voice/voicemails/list")}).error(function(a){e.show(a.message,"danger")})},a.getContexts=function(){b.get("/api/voice/contexts").success(function(b){a.voiceContexts=b.rows,f.syncUpdates("voice_context",a.voiceContexts)}).error(function(a){e.show(a.message,"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.voice.voicemails.wizard",{url:"/wizard",templateUrl:"app/voice/voicemail/wizard/wizard.html",controller:"VoiceVoicemailWizardCtrl"})}]),angular.module("xCallyShuttleApp").controller("YourdashboardListCreateModalCtrl",["$scope","$uibModalInstance",function(a,b){a.forms={dashboard:void 0},a.item={},a.ok=function(){a.item.model=JSON.stringify({title:a.item.name}),b.close(a.item)},a.cancel=function(){b.dismiss("cancel")}}]),angular.module("xCallyShuttleApp").controller("YourdashboardListCtrl",["$scope","$http","socket","$rootScope","$translate","xAlert","Modal","stResource","$uibModal","$log",function(a,b,c,d,e,f,g,h,i,j){a.conf={dashboardsByPage:{name:"10",value:10}},a.dashboardsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.dashboards={checked:[]},a.check=function(b,c){c?a.dashboards.checked=angular.copy(_.pluck(a.displayedDashboards,"id")):a.dashboards.checked=[]},a.getDashboards=function(b){return _.map(a.displayedDashboards,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){b.url="/api/dashboards",h.getPage(b).then(function(c){a.displayedDashboards=c.rows,b.pagination.numberOfPages=c.total_pages,d.updateTableConfig(a.dashboardsByPage,a.displayedDashboards.length),d.updateTableConfig(a.conf.dashboardsByPage,a.displayedDashboards.length)}),c.socket.on("dashboard:save",function(){a.initList(b)}),c.socket.on("dashboard:remove",function(c){a.dashboards.checked=_.without(a.dashboards.checked,c.id),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/dashboards/"+a).success(function(){f.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(a.message,"danger")})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/dashboards",{params:{id:a.dashboards.checked}}).success(function(){f.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){f.show(a.message,"danger")})}),a.create=function(){var a=i.open({animation:!0,templateUrl:"app/yourdashboard/list/create.modal.html",controller:"YourdashboardListCreateModalCtrl"});a.result.then(function(a){b.post("/api/dashboards",a).then(function(a){f.show(e.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){f.show(a.data.message,"danger")})},function(){j.info("Modal dismissed at: "+new Date)})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.yourdashboards.list",{url:"/list",templateUrl:"app/yourdashboard/list/list.html",controller:"YourdashboardListCtrl"})}]),angular.module("xCallyShuttleApp").controller("YourdashboardShowCtrl",["$scope","localStorageService","$http","xAlert","$translate","Auth","$stateParams","$location",function(a,b,c,d,e,f,g,h){a.Auth=f,a.dashboard={name:"dashboard",structure:"4-8",enableconfirmdelete:!0,editable:f.isAdmin()?!0:!1,maximizable:!0,collapsible:!0},a.getDashboard=function(){c.get("/api/dashboards/"+g.id).success(function(b){b.model=JSON.parse(b.model),a.dashboard=_.merge(a.dashboard,b)}).error(function(a){h.path("/yourdashboards/list")})};var i=function(b,f,h){var i=angular.copy(a.dashboard);i.name=a.dashboard.model.title,i.model=JSON.stringify(i.model),c.put("/api/dashboards/"+g.id,i).success(function(){d.show(e.instant("MESSAGE_DASHBOARD_SAVED")+"!","success")}).error(function(b){d.show(b.message,"danger"),i.model=JSON.parse(i.model),i.name="dashboard",a.dashboard=i})};a.$on("adfDashboardChanged",i),a.$on("destroy",function(){console.log("main dashboard")})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.yourdashboards.show",{url:"/show/:id",templateUrl:"app/yourdashboard/show/show.html",controller:"YourdashboardShowCtrl"})}]),angular.module("xCallyShuttleApp").controller("YourdashboardViewCtrl",["$scope","$http","xAlert","$translate","$stateParams","$location",function(a,b,c,d,e,f){a.radioSwitch={isActive:!0,size:"small",animate:!0,radioOff:!0,handleWidth:"auto",labelWidth:"auto",inverse:!0,offColor:"danger",onColor:"success"},a.getDashboard=function(){b.get("/api/dashboards/"+e.id).success(function(b){delete b.model,a.dashboard=b}).error(function(a){f.path("/yourdashboards/list")})},a.updateDashboard=function(){var f=angular.copy(a.dashboard);b.put("/api/dashboards/"+e.id,f).success(function(){c.show(d.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(b){c.show(d.instant(b.message),"danger"),a.dashboard=f})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.yourdashboards.view",{url:"/view/:id",templateUrl:"app/yourdashboard/view/view.html",controller:"YourdashboardViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css","assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.yourdashboards.view.settings",{url:"/settings",templateUrl:"app/yourdashboard/view/view.settings.html"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.yourdashboards",{url:"/yourdashboards",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").controller("ZendeskListCtrl",["$scope","$http","$rootScope","xAlert","$translate","socket","Modal","stResource",function(a,b,c,d,e,f,g,h){a.conf={accountsByPage:{name:"10",value:10}},a.accountsByPage=[{name:"10",value:10},{name:"25",value:25},{name:"50",value:50},{name:"All",value:0}],a.accounts={checked:[]},a.check=function(b,c){c?a.accounts.checked=angular.copy(_.pluck(a.displayedZdAccounts,"id")):a.accounts.checked=[]},a.getAccounts=function(b){return _.map(a.displayedZdAccounts,function(a){var c={};return b.forEach(function(b){c[b]=a[b]}),c})},a.initList=function(b){f.unsyncUpdates("zendesk_account"),b.url="/api/zendesk/accounts",h.getPage(b).then(function(d){a.displayedZdAccounts=d.rows,b.pagination.numberOfPages=d.total_pages,c.updateTableConfig(a.accountsByPage,a.displayedZdAccounts.length),c.updateTableConfig(a.conf.accountsByPage,a.displayedZdAccounts.length)}),f.socket.on("zendesk_account:save",function(){a.initList(b)}),f.socket.on("zendesk_account:remove",function(c){a.accounts.checked=_.without(a.accounts.checked,c.id),a.initList(b)})},a.deleteItem=g.confirm["delete"](function(a){b["delete"]("/api/zendesk/accounts/"+a).success(function(){d.show(e.instant("MESSAGE_WELL_DONE")+"!","success")}).error(function(a){d.show(e.instant(a.message),"danger")})}),a.deleteItems=g.confirm["delete"](function(){b["delete"]("/api/zendesk/accounts",{params:{id:a.accounts.checked}}).success(function(){d.show(e.instant("MESSAGE_WELL_DONE"),"success")}).error(function(a){d.show(e.instant(a.message),"danger")})}),a.checkAccount=function(a){b.get("/api/zendesk/accounts/"+a+"/check").then(function(){d.show(e.instant("MESSAGE_ACCOUNT_VERIFIED"),"success")})["catch"](function(){d.show(e.instant("MESSAGE_ACCOUNT_INVALID"),"danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.list",{url:"/list",templateUrl:"app/zendesk/list/list.html",controller:"ZendeskListCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{name:"smart-table",insertBefore:"#ng_load_plugins_before",files:["assets/css/smart_table.css"]}])}]}})}]),angular.module("xCallyShuttleApp").controller("ZendeskViewCtrl",["$scope","$http","$stateParams","$translate","$location","WizardHandler","socket","xAlert","Modal",function(a,b,c,d,e,f,g,h,i){a.$stateParams=c,a.initCustomField=function(){a.forms={},a.field={}},a.initConfiguration=function(){a.formsConfiguration={},a.configuration={}},a.goNext=function(){f.wizard().next()},a.formValidation=function(a){return a},a.$on("$destroy",function(){g.unsyncUpdates("zendesk_field"),g.unsyncUpdates("zendesk_configuration"),g.unsyncUpdates("zendesk_text")}),a.initView=function(){b.get("/api/zendesk/accounts/"+c.id).success(function(b){a.account=b}).error(function(a){h.show(a.message,"danger")})},a.updateItem=function(){b.put("/api/zendesk/accounts/"+c.id,a.account).success(function(){h.show(d.instant("MESSAGE_WELL_DONE")+".","success")}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.getCustomFields=function(){b.get("/api/zendesk/fields",{params:{ZendeskAccountId:c.id}}).success(function(b){a.customFields=b,g.socket.on("zendesk_field:remove",function(b){_.remove(a.customFields,{id:b.id})})}).error(function(a){h.show(a.message,"danger")})},a.deleteItem=i.confirm["delete"](function(a){b["delete"]("api/zendesk/fields/"+a).success(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.getCustomField=function(){b.get("/api/zendesk/fields/"+c.fieldId).success(function(b){a.field=b}).error(function(a){h.show(a.message,"danger")})},a.updateField=function(){b.put("/api/zendesk/fields/"+c.fieldId,a.field).success(function(){h.show(d.instant("MESSAGE_WELL_DONE")+".","success"),e.path("/zendesk/view/"+c.id+"/fields")}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.createItem=function(){a.field.ZendeskAccountId=c.id,b.post("api/zendesk/fields",a.field).success(function(){e.path("zendesk/view/"+c.id+"/fields")}).error(function(){h.show("Something went wrong!","danger")})},a.getConfigurations=function(){b.get("/api/zendesk/configurations",{params:{ZendeskAccountId:c.id}}).success(function(b){a.configurations=b,g.socket.on("zendesk_configuration:remove",function(b){_.remove(a.configurations,{id:b.id})})}).error(function(a){h.show(a.message,"danger")})},a.deleteConfiguration=i.confirm["delete"](function(a){b["delete"]("api/zendesk/configurations/"+a).success(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})}),a.createConfiguration=function(){a.configuration.ZendeskAccountId=c.id,b.post("api/zendesk/configurations",a.configuration).success(function(a){e.path("zendesk/view/"+c.id+"/configurations/settings/"+a.id)}).error(function(){h.show("Something went wrong!","danger")})},a.fieldType=["string","variable"],a.getConfiguration=function(){b.get("/api/zendesk/configurations/"+c.configurationId).success(function(b){a.subjectConfig=b.Subject,g.socket.on("zendesk_text:remove",function(b){_.remove(a.subjectConfig,{id:b.id})})}).error(function(a){h.show(a.message,"danger")})},a.getVariables=function(){b.get("/api/variables").success(function(b){a.variables=b.rows}).error(function(a){h.show(a.message,"danger")})},a.removeItemFromSubject=function(a){b["delete"]("api/zendesk/texts/"+a.id).success(function(){h.show(d.instant("MESSAGE_WELL_DONE"),"success")}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG"),"danger")})},a.addItemSubject=function(){var d={type:"string",content:""};b.post("/api/zendesk/configurations/"+c.configurationId+"/subject",d).success(function(b){a.subjectConfig.push(b)}).error(function(){h.show("Something went wrong!","danger")})},a.updateSubjectText=function(a){b.put("/api/zendesk/texts/"+a.id,a).success(function(){}).error(function(){h.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})},a.changeType=function(b){"variable"===b.type?b.content="":"string"===b.type&&(b.VariableId=null),a.updateSubjectText(b)}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.view",{url:"/view/:id",templateUrl:"app/zendesk/view/view.html",controller:"ZendeskViewCtrl",resolve:{deps:["$ocLazyLoad",function(a){return a.load([{insertBefore:"#ng_load_plugins_before",files:["assets/css/profile.css","assets/css/tasks.css"]}])}]}}).state("main.zendesk.view.account",{url:"/account",templateUrl:"app/zendesk/view/view.account.html"}).state("main.zendesk.view.fields",{url:"/fields",templateUrl:"app/zendesk/view/view.fields.html"}).state("main.zendesk.view.fields.settings",{url:"/settings/:fieldId",templateUrl:"app/zendesk/view/view.fieldSettings.html",controller:"ZendeskViewCtrl"}).state("main.zendesk.view.field",{url:"/field",templateUrl:"app/zendesk/view/view.field.html"}).state("main.zendesk.view.configurations",{url:"/configurations",templateUrl:"app/zendesk/view/view.configurations.html"}).state("main.zendesk.view.configurations.settings",{url:"/settings/:configurationId",templateUrl:"app/zendesk/view/view.configurationSettings.html",controller:"ZendeskViewCtrl"}).state("main.zendesk.view.configuration",{url:"/configuration",templateUrl:"app/zendesk/view/view.configuration.html"})}]),angular.module("xCallyShuttleApp").controller("ZendeskWizardCtrl",["$scope","$http","$location","$translate","xAlert","WizardHandler",function(a,b,c,d,e,f){a.translate=d,a.initWizard=function(){a.$translate=d,a.forms={},a.item={},a.item.authType="password"},a.next=function(){f.wizard().next()},a.exitValidation=function(a){return a},a.createItem=function(){b.post("api/zendesk/accounts",a.item).success(function(){e.show(d.instant("MESSAGE_WELL_DONE")+".","success"),c.path("/zendesk/list")}).error(function(){e.show(d.instant("MESSAGE_SOMETHING_WENT_WRONG")+".","danger")})}}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk.wizard",{url:"/wizard",templateUrl:"app/zendesk/wizard/wizard.html",controller:"ZendeskWizardCtrl"})}]),angular.module("xCallyShuttleApp").config(["$stateProvider",function(a){a.state("main.zendesk",{url:"/zendesk",template:"<div ui-view></div>","abstract":!0})}]),angular.module("xCallyShuttleApp").service("application",function(){var a={applications:[{name:"Queue",value:"Queue"},{name:"Playback",value:"Playback"},{name:"Dial",value:"Dial"},{name:"Cally-Square IVR",value:"AGI"},{name:"GoTo",value:"Goto"},{name:"Hangup",value:"Hangup"},{name:"Set",value:"Set"},{name:"Custom",value:"custom"},{name:"VoiceMail",value:"Voicemail"}],queueOptions:[{value:"C",name:"APPLICATION_QUEUE_OPTION_C"},{value:"c",name:"APPLICATION_QUEUE_OPTION_c"},{value:"d",name:"APPLICATION_QUEUE_OPTION_d"},{value:"F",name:"APPLICATION_QUEUE_OPTION_F"},{value:"h",name:"APPLICATION_QUEUE_OPTION_h"},{value:"H",name:"APPLICATION_QUEUE_OPTION_H"},{value:"n",name:"APPLICATION_QUEUE_OPTION_n"},{value:"i",name:"APPLICATION_QUEUE_OPTION_i"},{value:"I",name:"APPLICATION_QUEUE_OPTION_I"},{value:"r",name:"APPLICATION_QUEUE_OPTION_r"},{value:"R",name:"APPLICATION_QUEUE_OPTION_R"},{value:"t",name:"APPLICATION_QUEUE_OPTION_t"},{value:"T",name:"APPLICATION_QUEUE_OPTION_T"},{value:"w",name:"APPLICATION_QUEUE_OPTION_w"},{value:"W",name:"APPLICATION_QUEUE_OPTION_W"},{value:"k",name:"APPLICATION_QUEUE_OPTION_k"},{value:"K",name:"APPLICATION_QUEUE_OPTION_K"},{value:"x",name:"APPLICATION_QUEUE_OPTION_x"},{value:"X",name:"APPLICATION_QUEUE_OPTION_X"}],audioOptions:[{value:"skip",name:"APPLICATION_PLAYBACK_OPTION_SKIP"},{value:"noanswer",name:"APPLICATION_PLAYBACK_OPTION_NOANSWER"},{value:"j",name:"APPLICATION_PLAYBACK_OPTION_J"},{value:"say",name:"APPLICATION_PLAYBACK_OPTION_SAY"}],hangupCauses:[{value:"",name:"--"},{value:"1",name:"APPLICATION_HANGUP_CAUSE_1"},{value:"16",name:"APPLICATION_HANGUP_CAUSE_16"},{value:"17",name:"APPLICATION_HANGUP_CAUSE_17"},{value:"18",name:"APPLICATION_HANGUP_CAUSE_18"},{value:"21",name:"APPLICATION_HANGUP_CAUSE_21"},{value:"22",name:"APPLICATION_HANGUP_CAUSE_22"},{value:"27",name:"APPLICATION_HANGUP_CAUSE_27"},{value:"38",name:"APPLICATION_HANGUP_CAUSE_38"},{value:"41",name:"APPLICATION_HANGUP_CAUSE_41"}],intTypes:[{value:"always",name:"APPLICATION_ALWAYS"},{value:"custom",name:"APPLICATION_CUSTOM"},{value:"list",name:"APPLICATION_FROM_LIST"}]};return{application:a}}),angular.module("xCallyShuttleApp").factory("Auth",["$location","$rootScope","$http","User","$cookieStore","$q",function(a,b,c,d,e,f){var g={};return e.get("token")&&(g=d.me()),{login:function(a,h){var i=h||angular.noop,j=f.defer();return c.post("/auth/local",{name:a.name,password:a.password,remember:a.remember}).success(function(a){return e.put("token",a.token),e.put("userId",a.userId),g=d.me({},function(){b.$broadcast("login")}),j.resolve(a),i()}).error(function(a){return this.logout(),j.reject(a),i(a)}.bind(this)),j.promise},loginWithToken:function(a,b,c){e.put("token",a),e.put("userId",b),e.put("name",c),g=d.me()},logout:function(){c.put("/api/users/"+g.id,{online:!1}).success(function(){e.remove("token"),e.remove("userId"),g={},b.$broadcast("logout")}).error(function(a){return a})},createUser:function(a,b){var c=b||angular.noop;return d.save(a,function(b){return e.put("token",b.token),g=d.me(),c(a)},function(a){return this.logout(),c(a)}.bind(this)).$promise},changePassword:function(a,b,c){var e=c||angular.noop;return d.changePassword({id:g.id},{oldPassword:a,newPassword:b},function(a){return e(null,a)},function(a){return e(a)}).$promise},getCurrentUser:function(){return g},isLoggedIn:function(){return g.hasOwnProperty("role")},isLoggedInAsync:function(a){g.hasOwnProperty("$promise")?g.$promise.then(function(){a(!0)})["catch"](function(){a(!1)}):a(g.hasOwnProperty("role")?!0:!1)},isAdmin:function(){return"admin"===g.role},getRole:function(){return g.role},getToken:function(){return e.get("token")},getUserId:function(){return console.log(e.get("userId")),e.get("userId")},getName:function(){return e.get("name")}}}]),angular.module("xCallyShuttleApp").factory("User",["$resource",function(a){return a("/api/users/:id/:controller",{id:"@id"},{changePassword:{method:"PUT",params:{controller:"password"}},me:{method:"GET",params:{id:"me"}}})}]),angular.module("xCallyShuttleApp").service("automations",function(){var a={voice:{conditions:[],actions:[]},mail:{conditions:[{name:"APPLICATION_STATUS",value:"status",propertyField:"select",operators:"equals"},{name:"APPLICATION_HOURS_SINCE_CREATED",value:"createdAt",propertyField:"number",operators:"noequals"}],actions:[{name:"APPLICATION_STATUS",value:"status",propertyField:"select"}]},chat:{conditions:[],actions:[]},fax:{conditions:[{name:"APPLICATION_STATUS",value:"status",propertyField:"select",operators:"equals"},{name:"APPLICATION_HOURS_SINCE_CREATED",value:"createdAt",propertyField:"number",operators:"noequals"}],actions:[{name:"APPLICATION_STATUS",value:"status",propertyField:"select"}]}},b=["voice","mail","chat","fax"],c={equals:[{value:"=",name:"APPLICATION_EQUALS_TO"},{value:"<>",name:"APPLICATION_NOT_EQUALS_TO"}],all:[{value:"=",name:"APPLICATION_EQUALS_TO"},{value:"<>",name:"APPLICATION_NOT_EQUALS_TO"},{value:">=",name:"APPLICATION_GTE_TO"},{value:"<=",name:"APPLICATION_LTE_TO"},{value:">",name:"APPLICATION_GREATER_THAN"},{value:"<",name:"APPLICATION_LESS_THAN"}],noequals:[{value:">=",name:"APPLICATION_GTE_TO"},{value:"<=",name:"APPLICATION_LTE_TO"},{value:">",name:"APPLICATION_GREATER_THAN"},{value:"<",name:"APPLICATION_LESS_THAN"}]},d={voice:{},mail:{status:[{name:"APPLICATION_STATUS_NEW",value:"NEW"},{name:"APPLICATION_STATUS_OPEN",value:"OPEN"},{name:"APPLICATION_STATUS_PENDING",value:"PENDING"},{name:"APPLICATION_STATUS_CLOSED",value:"CLOSED"},{name:"APPLICATION_STATUS_SOLVED",value:"SOLVED"}]},chat:{},fax:{status:[{name:"APPLICATION_STATUS_NEW",value:"NEW"},{name:"APPLICATION_STATUS_OPEN",value:"OPEN"},{name:"APPLICATION_STATUS_PENDING",value:"PENDING"},{name:"APPLICATION_STATUS_CLOSED",value:"CLOSED"},{name:"APPLICATION_STATUS_SOLVED",value:"SOLVED"}]}};return{automations:a,properties:d,channels:b,operators:c}}),angular.module("xCallyShuttleApp").controller("FooterController",["$scope",function(a){a.$on("$includeContentLoaded",function(){Layout.initFooter()})}]),angular.module("xCallyShuttleApp").controller("HeaderController",["$scope","$rootScope","$location","$state","$http","$notification","Auth","xAlert","socket","ngAudio","settings","toastr","localStorageService",function(a,b,c,d,e,f,g,h,i,j,k,l,m){a.toggleQuickSidebar=function(){k.layout.pageQuickSidebarOpened=!k.layout.pageQuickSidebarOpened,k.layout.pageQuickSidebarOpened||m.remove("chatRoomId")},a.initHeader=function(){var c=j.load("api/xchatty/assets?resource=notification/xc_blubb.mp3");"agent"===g.getCurrentUser().role&&(i.socket.on("report_mail:save",function(a){c.play();var b=f("MAIL CHANNEL",{icon:"assets/images/media/channels/mail64.png",body:"NEW Incoming Mail Message!",delay:1e3*a.timeslot});b.$on("click",function(){e.put("/api/report/mails/"+a.id,{connect:!0}).success(function(){b.close(),h.show("Mail properly assigned","success")}).error(function(a){h.show(a.message,"danger")})})}),i.socket.on("report_chat:save",function(a){c.play();var d=f("CHAT CHANNEL",{icon:"assets/images/media/channels/chat64.png",body:"NEW Incoming Chat Visitor!",delay:1e3*a.timeslot
+});d.$on("click",function(){e.put("/api/report/chats/"+a.id,{connect:!0}).success(function(){d.close(),h.show("Chat properly assigned","success"),b.$broadcast("chatMessageEvent",{type:"external",chatRoomId:a.chatroomid})}).error(function(a){h.show(a.message,"danger")})})}),i.socket.on("chat_message:save",function(a){var d=m.get("chatRoomId");if(!d||d!==a.ChatRoomId){c.play();var e=f(a.User.fullname,{icon:"assets/images/media/channels/chat64.png",body:a.body.length>35?a.body.substring(0,35)+"...":a.body,delay:1e4});e.$on("click",function(){b.$broadcast("chatMessageEvent",{type:"internal",chatRoomId:a.ChatRoomId})})}})),e({url:"/api/fax/user_has_queues",method:"GET",params:{UserId:g.getCurrentUser().id}}).success(function(b){a.faxQueues=_.pluck(b,"FaxQueueId"),a.faxQueues.forEach(function(a){i.socket.on("FAX:QUEUE:"+a,function(a,b){var c=f("FAX CHANNEL",{icon:"assets/images/media/channels/telephone124.png",body:"NEW Incoming Fax Message!",delay:1e3*a.timeout});c.$on("click",function(){e.put("/api/fax/rooms/"+a.roomId,{UserId:g.getCurrentUser().id}).success(function(){c.close(),b(g.getCurrentUser().id),l.success("Fax properly assigned","Success",{closeButton:!0,timeOut:5e3})}).error(function(){l.warning("Fax already assigned","Warning",{closeButton:!0,timeOut:5e3})})})})}),i.socket.on("FAX:AGENT:"+g.getCurrentUser().id,function(a,b){var c=f("FAX CHANNEL",{icon:"assets/images/media/channels/telephone124.png",body:"NEW Incoming Fax Message!",delay:1e3*a.timeout});c.$on("click",function(){e.put("/api/fax/rooms/"+a.roomId,{UserId:g.getCurrentUser().id}).success(function(){c.close(),b(g.getCurrentUser().id),l.success("Fax properly assigned","Success",{closeButton:!0,timeOut:5e3})}).error(function(){b(g.getCurrentUser().id),l.warning("Fax already assigned","Warning",{closeButton:!0,timeOut:5e3})})})})}).error(function(a){console.error(a)}),i.socket.on("user_has_fax_queue:save",function(b){b=_.map(b,function(a){return a.UserId=parseInt(a.UserId,10),a}),b=_.find(b,{UserId:g.getCurrentUser().id}),b&&-1===_.indexOf(a.faxQueues,b.FaxQueueId)&&(a.faxQueues.push(b.FaxQueueId),i.socket.on("FAX:QUEUE:"+b.FaxQueueId,function(a,b){var c=f("FAX CHANNEL",{icon:"assets/images/media/channels/telephone124.png",body:"NEW Incoming Fax Message!",delay:1e3*a.timeout});c.$on("click",function(){e.put("/api/fax/rooms/"+a.roomId,{UserId:g.getCurrentUser().id}).success(function(){c.close(),b(g.getCurrentUser().id),l.success("Fax properly assigned","Success",{closeButton:!0,timeOut:5e3})}).error(function(){b(g.getCurrentUser().id),l.warning("Fax already assigned","Warning",{closeButton:!0,timeOut:5e3})})})}))}),i.socket.on("user_has_fax_queue:remove",function(b){_.indexOf(b.where.UserId,g.getCurrentUser().id.toString())>=0&&_.indexOf(a.faxQueues,b.where.FaxQueueId)>=0&&(a.faxQueues=_.remove(a.faxQueues,b.where.FaxQueueId),i.socket.removeAllListeners("FAX:QUEUE:"+b.where.FaxQueueId))})},a.logout=function(){e.get("/auth/local/logout").success(function(){g.logout(),c.path("/login")}).error(function(a){console.error(a)})},a.isActive=function(a){return a===c.path()}}]),angular.module("xCallyShuttleApp").service("interval",function(){var a={months:[{value:"always",name:"APPLICATION_ALWAYS"},{value:"jan",name:"APPLICATION_JANUARY"},{value:"feb",name:"APPLICATION_FEBRUARY"},{value:"mar",name:"APPLICATION_MARCH"},{value:"apr",name:"APPLICATION_APRIL"},{value:"may",name:"APPLICATION_MAY"},{value:"jun",name:"APPLICATION_JUNE"},{value:"jul",name:"APPLICATION_JULY"},{value:"aug",name:"APPLICATION_AUGUST"},{value:"sep",name:"APPLICATION_SEPTEMBER"},{value:"oct",name:"APPLICATION_OCTOBER"},{value:"nov",name:"APPLICATION_NOVEMBER"},{value:"dec",name:"APPLICATION_DECEMBER"}],daysOfWeek:[{value:"always",name:"APPLICATION_ALWAYS"},{value:"mon",name:"APPLICATION_MONDAY"},{value:"tue",name:"APPLICATION_TUESDAY"},{value:"wed",name:"APPLICATION_WEDNESDAY"},{value:"thu",name:"APPLICATION_THURSDAY"},{value:"fri",name:"APPLICATION_FRIDAY"},{value:"sat",name:"APPLICATION_SATURDAY"},{value:"sun",name:"APPLICATION_SUNDAY"}],daysOfMonth:["always",1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]};return{interval:a}}),angular.module("xCallyShuttleApp").factory("Modal",["$rootScope","$uibModal",function(a,b){function c(c,d){console.log("openModal",d);var e=a.$new();return c=c||{},d=d||"modal-default",angular.extend(e,c),b.open({templateUrl:"components/modal/delete.html",windowClass:d,scope:e})}return{confirm:{"delete":function(a){return a=a||angular.noop,function(){var b,d=Array.prototype.slice.call(arguments),e=d.shift();b=c({modal:{dismissable:!0,title:"Confirm Delete",html:"<p>Are you sure you want to delete"+(e?"<strong> "+e+"</strong>":" selected items")+"?</p>",buttons:[{classes:"btn red",text:"Delete",click:function(a){b.close(a)}},{classes:"btn default",text:"Cancel",click:function(a){b.dismiss(a)}}]}},"over-topbar center"),b.result.then(function(b){a.apply(b,d)})}}}}}]),angular.module("xCallyShuttleApp").controller("QuickSidebarControllerAddModal",["$scope","$uibModalInstance","Agent","items",function(a,b,c,d){a.items=d,a.agents=c.get(function(b){a.agents=b,a.items.forEach(function(b){_.remove(a.agents.rows,{id:b.id})})}),a.selected={items:[]},a.modal={title:"APPLICATION_AGENTS_SELECTION"},a.ok=function(){b.close(_.union(_.pluck(a.selected.items,"id"),_.pluck(a.items,"id")))},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").controller("QuickSidebarControllerCloseModal",["$scope","$uibModalInstance",function(a,b){a.modal={title:"APPLICATION_CONFIRM_CLOSE",text:"MESSAGE_ARE_YOU_SURE_YOU_WANT_TO_CLOSE_THE_CHAT"},a.ok=function(){b.close()},a.cancel=function(){b.dismiss()}}]),angular.module("xCallyShuttleApp").controller("QuickSidebarController",["$scope","$rootScope","$window","$http","$uibModal","$log","$timeout","Auth","Agent","User","ChatRoom","ChatMessage","socket","settings","localStorageService","xAlert","$translate",function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){a.emojiMessage={},a.options={link:!0,linkTarget:"_blank",pdf:{embed:!1},image:{embed:!0},audio:{embed:!0},code:{highlight:!0,lineNumbers:!1},basicVideo:!1,video:{embed:!1,width:null,height:null,ytTheme:"dark",details:!1,ytAuthKey:"_nkO9h1A7HlVyiUICO17oA"}};var r=a.currentUser=h.getCurrentUser();a.message={body:"",user:""},a.$on("$includeContentLoaded",function(){o.get("chatRoomId")&&k.get({id:o.get("chatRoomId")},t,u),o.get("currentTab")&&(a.currentTab=o.get("currentTab"))});var s=angular.element(c);a.getWindowDimensions=function(){return{h:s.height(),w:s.width()}},a.$watch(a.getWindowDimensions,function(b){a.style={height:b.h-46-46-46+"px"},a.style2={height:b.h-46-46-46-180+"px"}},!0),s.bind("resize",function(){a.$apply()}),a.agents=i.get({page:0,per_page:1e3},function(){m.syncUpdates("agent",a.agents.rows)}),a.users=j.get({page:0,per_page:1e3},function(){m.syncUpdates("user",a.users.rows)}),a.chatRooms=k.me(function(b){a.chatRooms=b,m.syncUpdates("chat_room",a.chatRooms)},function(a){console.error(a)}),a.currentTab=0,a.messagesTab=!1,b.$on("chatMessageEvent",function(b,c){switch(c.type){case"internal":a.currentTab=0;break;case"external":a.currentTab=2}k.get({id:c.chatRoomId},t,u)}),a.goToTab=function(b){a.currentTab=b,a.messagesTab=!1,a.chatRoom=null,o.set("currentTab",a.currentTab),o.set("messagesTab",a.messagesTab),o.remove("chatRoomId"),m.unsyncUpdates("chat_message"),m.unsyncUpdates("chat_room")},a.goToMessage=function(a,b){a?k.users({users:[r.id,a]},t,u):k.get({id:b},t,u)},a.sendMessage=function(){a.message.body.trim().length&&l.save({ChatRoomId:a.chatRoom.id,body:a.message.body},function(){a.message.body=""},function(a){console.error(a)})},a.goBack=function(){a.messagesTab=!1,a.chatRoom=null,o.set("messagesTab",a.messagesTab),o.remove("chatRoomId"),m.unsyncUpdates("chat_message"),m.unsyncUpdates("user_has_chat_room")},a.chatRoomsGroupsGreaterThan=function(a){return function(b){return b.Users?"external"!==b.type&&b.Users.length>a:!1}},a.closeChatRoom=function(a,b){var c=e.open({animation:!0,size:b,templateUrl:"components/quickSidebar/modal/close.html",controller:"QuickSidebarControllerCloseModal"});c.result.then(function(){d.put("/api/chat/rooms/"+a,{status:"close"}).then(function(){p.show(q.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){p.show(a.data.message,"danger")})},function(){f.info("Modal dismissed at: "+new Date)})},a.addAgent=function(b,c){var g=e.open({animation:!0,size:c,templateUrl:"components/quickSidebar/modal/add.html",controller:"QuickSidebarControllerAddModal",resolve:{items:function(){return _.map(a.chatRoom.Users?a.chatRoom.Users:[],function(a){return{id:a.id,fullname:a.fullname}})}}});g.result.then(function(c){d.put("/api/chat/rooms/"+b+"/users",{users:c}).then(function(b){m.unsyncUpdates("chat_message"),a.chatRoom=b.data,a.currentTab=3,a.messagesTab=!0;var c=_.find(a.chatRooms,{id:b.id}),d=a.chatRooms.indexOf(c);c?_.merge(a.chatRooms[d],b.data):a.chatRooms.push(b.data),m.socket.on("chat_message:save",function(c){c.ChatRoomId===b.data.id&&(a.chatRoom.ChatMessages.push(c),angular.element("page-quick-sidebar-chat-user-messages").mCustomScrollbar("scrollTo","last"))}),p.show(q.instant("MESSAGE_WELL_DONE"),"success")})["catch"](function(a){p.show(a.data.message,"danger")})},function(){f.info("Modal dismissed at: "+new Date)})};var t=function(b){a.messagesTab=!0,n.layout.pageQuickSidebarOpened=!0,o.set("chatRoomId",b.id),o.set("messagesTab",a.messagesTab),a.chatRoom=b;var c=_.find(a.chatRooms,{id:b.id}),d=a.chatRooms.indexOf(c);c?_.merge(a.chatRooms[d],b):a.chatRooms.push(b),g(function(){angular.element("page-quick-sidebar-chat-user-messages").mCustomScrollbar("scrollTo","last")},1e3),m.socket.on("chat_message:save",function(c){c.ChatRoomId===b.id&&(a.chatRoom.ChatMessages.push(c),angular.element("page-quick-sidebar-chat-user-messages").mCustomScrollbar("scrollTo","last"))}),m.socket.on("chat_room:save",function(b){b.id===a.chatRoom.id&&(a.chatRoom.status=b.status)})},u=function(a){console.error(a)};a.$on("$destroy",function(){m.unsyncUpdates("agent"),m.unsyncUpdates("user")})}]),angular.module("xCallyShuttleApp").directive("resizeQuickSidebar",["$window",function(a){return function(b){var c=angular.element(a);b.getWindowDimensions=function(){return{h:c.height(),w:c.width()}},b.$watch(b.getWindowDimensions,function(a){b.style={height:a.h-46-46-46+"px"}},!0),c.bind("resize",function(){b.$apply()})}}]),angular.module("xCallyShuttleApp").controller("SidebarController",["$scope","$rootScope","$resource","$location","Auth","$http","xAlert","$stateParams","socket",function(a,b,c,d,e,f,g,h,i){a.Auth=e,a.$stateParams=h,a.$on("$includeContentLoaded",function(){Metronic.init(),Layout.initSidebar()}),a.isAssociated=function(a){if(e.isAdmin())return!0;if(e.getCurrentUser().Modules)for(var b=0;b<e.getCurrentUser().Modules.length;b++)if(e.getCurrentUser().Modules[b].name===a)return!0;return!1},a.getSidebarDashboards=function(){f.get("/api/dashboards").then(function(b){a.dashboards=b.data.rows,i.syncUpdates("dashboard",a.dashboards)})["catch"](function(a){g.show("Error loading your dashboards","danger")})},a.isActive=function(a){return a===d.path()},a.$on("destroy",function(){i.unsyncUpdates("dashboard")})}]),angular.module("xCallyShuttleApp").factory("socket",["$rootScope","socketFactory","Auth",function(a,b,c){var d=c.getCurrentUser(),e=io("",{query:"token="+c.getToken()+"&userId="+(d.id||c.getUserId())+"&name="+(d.name||c.getName())+"&role="+(d.role||"agent")+"&source=browser",path:"/socket.io-client"}),f=b({ioSocket:e});return a.$on("login",function(){e=io("",{forceNew:!0,query:"token="+c.getToken()+"&userId="+c.getCurrentUser().id+"&name="+c.getCurrentUser().name+"&role="+c.getCurrentUser().role+"&source=browser",path:"/socket.io-client"})}),a.$on("logout",function(){f&&f.disconnect(!0)}),{socket:f,syncUpdates:function(a,b,c){c=c||angular.noop,f.on(a+":save",function(a){var d=_.find(b,{id:a.id}),e=b.indexOf(d),f="created";d?(_.merge(b[e],a),f="updated"):b.unshift(a),c(f,a,b)}),f.on(a+":remove",function(a){var d="deleted";_.remove(b,{id:a.id}),c(d,a,b)})},unsyncUpdates:function(a){f.removeAllListeners(a+":save"),f.removeAllListeners(a+":remove")},syncUpdatesByAttributes:function(a,b,c,d){d=d||angular.noop,f.on(a+":save",function(e){console.log(a),console.log(e);var f=!0;if(_.forIn(b,function(a,b){return e[b]&&e[b]===a?!0:f=!1}),f){var g=_.find(c,{id:e.id}),h=c.indexOf(g),i="created";g?(_.merge(c[h],e),i="updated"):c.unshift(e),d(i,e,c)}}),f.on(a+":remove",function(a){var b="deleted";_.remove(c,{id:a.id}),d(b,a,c)})},syncMailMessageUpdates:function(a,b,c,d){d=d||angular.noop,f.on(a+":"+b+":save",function(a){var b=_.find(c,{id:a.id}),e=c.indexOf(b),f="created";b?(_.merge(c[e],a),f="updated"):c.unshift(a),d(f,a)}),f.on(a+":"+b+":remove",function(a){var b="deleted";_.remove(c,{id:a.id}),d(b,a,c)})},unsyncMailMessageUpdates:function(a,b){f.removeAllListeners(a+":"+b+":save"),f.removeAllListeners(a+":"+b+":remove")},syncFaxMessageUpdates:function(a,b,c,d){d=d||angular.noop,f.on(a+":"+b+":save",function(a){var b=_.find(c,{id:a.id}),e=c.indexOf(b),f="created";b?(_.merge(c[e],a),f="updated"):c.unshift(a),d(f,a)}),f.on(a+":"+b+":remove",function(a){var b="deleted";_.remove(c,{id:a.id}),d(b,a,c)})},unsyncFaxMessageUpdates:function(a,b){f.removeAllListeners(a+":"+b+":save"),f.removeAllListeners(a+":"+b+":remove")}}}]),angular.module("xCallyShuttleApp").service("triggers",function(){var a={voice:{conditions:[],actions:[]},mail:{conditions:[{name:"APPLICATION_FROM",value:"from",propertyField:"input",operators:"equals"},{name:"APPLICATION_CC",value:"cc",propertyField:"input",operators:"equals"},{name:"APPLICATION_SUBJECT",value:"subject",propertyField:"input",operators:"equals"}],actions:[{name:"APPLICATION_TEMPLATE",value:"template",propertyField:"select"}]},chat:{conditions:[],actions:[]},fax:{conditions:[],actions:[]}},b={equals:[{value:"=",name:"APPLICATION_EQUALS_TO"},{value:"<>",name:"APPLICATION_NOT_EQUALS_TO"}],all:[{value:"=",name:"APPLICATION_EQUALS_TO"},{value:"<>",name:"APPLICATION_NOT_EQUALS_TO"},{value:">=",name:"APPLICATION_GTE_TO"},{value:"<=",name:"APPLICATION_LTE_TO"},{value:">",name:"APPLICATION_GREATER_THAN"},{value:"<",name:"APPLICATION_LESS_THAN"}],noequals:[{value:">=",name:"APPLICATION_GTE_TO"},{value:"<=",name:"APPLICATION_LTE_TO"},{value:">",name:"APPLICATION_GREATER_THAN"},{value:"<",name:"APPLICATION_LESS_THAN"}]},c={voice:{},mail:{},chat:{},fax:{}},d=["voice","mail","chat","fax"];return{triggers:a,properties:c,operators:b,channels:d}}),function(a,b){angular.module("adf.widget.counter",["adf.provider"]).value("apiServiceUrlCounter","/api/widgets/counter").config(["dashboardProvider",function(a){a.widget("counter",{title:"Counter",description:"Counter for db results",templateUrl:"{widgetsPath}/counter/src/view.html",controller:"apiwidgetCounterViewCtrl",edit:{templateUrl:"{widgetsPath}/counter/src/edit.html",controller:"apiwidgetCounterEditCtrl"}})}]).service("apiServiceCounter",["$q","$http","apiServiceUrlCounter",function(a,b,c){return{get:function(d){var e=a.defer();return b.get(c,{params:{condition:encodeURIComponent(d.condition),table:d.report}}).success(function(a){a?e.resolve(a):e.reject()}).error(function(a){console.log(a),e.reject()}),e.promise}}}]).controller("apiwidgetCounterEditCtrl",["$scope",function(a){a.config.reportTables=[{name:"Agents",value:"agent"},{name:"Calls",value:"call"},{name:"Dials",value:"dial"},{name:"Members",value:"member"},{name:"Queues",value:"queue"}],a.config.colors=[{name:"Blue",value:"blue-madison"},{name:"Red",value:"red-intense"},{name:"Green",value:"green-haze"},{name:"Purple",value:"purple-plum"},{name:"Orange",value:"yellow-casablanca"},{name:"Yellow",value:"yellow-crusta"}],a.config.icons=[{name:"Talk bubbles",value:"fa-comments"},{name:"Bar Chart",value:"fa-bar-chart"},{name:"Shopping Cart",value:"fa-shopping-cart"},{name:"Globe",value:"fa-globe"}],a.config.timeout=a.config.timeout?a.config.timeout:1,a.config.color=a.config.color?a.config.color:"blue-madison",a.config.icon=a.config.icon?a.config.icon:"fa-comments",a.config.link=a.config.link?a.config.link:"#",a.config.linkText=a.config.linkText?a.config.linkText:"VIEW MORE"}]).controller("apiwidgetCounterViewCtrl",["$scope","$interval","apiServiceCounter",function(a,b,c){a.config.timeout=a.config.timeout?a.config.timeout:1,a.config.color=a.config.color?a.config.color:"blue-madison",a.config.icon=a.config.icon?a.config.icon:"fa-comments",a.config.link=a.config.link?a.config.link:"#",a.config.linkText=a.config.linkText?a.config.linkText:"VIEW MORE",a.counterApiCall=function(){a.config.condition&&a.config.report&&c.get(a.config).then(function(b){a.count=parseInt(b[0].count)})},a.counterApiCall();var d=b(function(){a.counterApiCall()},1e3*parseInt(a.config.timeout));a.$on("$destroy",function(){b.cancel(d)})}]),angular.module("adf.widget.counter").run(["$templateCache",function(a){a.put("{widgetsPath}/counter/src/edit.html","<form role=form><div class=form-group><label class=control-label>{{'APPLICATION_REPORT' | translate}}</label><ui-select data-ng-model=config.report name=report theme=bootstrap><ui-select-match placeholder=\"{{ 'APPLICATION_REPORT' | translate }}\">{{$select.selected.name}}</ui-select-match><ui-select-choices repeat=\"report.value as report in config.reportTables | filter: $select.search\"><div ng-bind-html=\"report.name | highlight: $select.search\"></div></ui-select-choices></ui-select></div><div class=form-group><label for=condition>{{'APPLICATION_CONDITION' | translate}}</label> <input type=text class=form-control id=condition ng-model=config.condition placeholder=\"{{'APPLICATION_CONDITION' | translate}}\"></div><div class=form-group><label for=condition>{{'APPLICATION_REFRESH_TIMEOUT' | translate}}</label> <input type=number class=form-control id=timeout ng-model=config.timeout placeholder=\"{{'APPLICATION_REFRESH_TIMEOUT' | translate}}\" min=1></div><div class=form-group><label class=control-label>{{'APPLICATION_WIDGET_COLOR' | translate}}</label><ui-select data-ng-model=config.color name=color theme=bootstrap><ui-select-match placeholder=\"{{ 'APPLICATION_WIDGET_COLOR' | translate }}\">{{$select.selected.name}}</ui-select-match><ui-select-choices repeat=\"color.value as color in config.colors | filter: $select.search\"><div ng-bind-html=\"color.name | highlight: $select.search\"></div></ui-select-choices></ui-select></div><div class=form-group><label class=control-label>{{'APPLICATION_WIDGET_ICON' | translate}}</label><ui-select data-ng-model=config.icon name=icon theme=bootstrap><ui-select-match placeholder=\"{{ 'APPLICATION_WIDGET_ICON' | translate }}\">{{$select.selected.name}}</ui-select-match><ui-select-choices repeat=\"icon.value as icon in config.icons | filter: $select.search\"><div ng-bind-html=\"icon.name | highlight: $select.search\"></div></ui-select-choices></ui-select></div><div class=form-group><label for=condition>{{'APPLICATION_WIDGET_DETAILS' | translate}}</label> <input type=text class=form-control id=details ng-model=config.details maxlength=30 placeholder=\"{{'APPLICATION_WIDGET_DETAILS' | translate}}\"></div><div class=form-group><label for=condition>{{'APPLICATION_WIDGET_LINK' | translate}}</label> <input type=text class=form-control id=link ng-model=config.link placeholder=http://yourlink></div><div class=form-group><label for=condition>{{'APPLICATION_WIDGET_LINK_TEXT' | translate}}</label> <input type=text class=form-control id=linkText ng-model=config.linkText maxlength=30 placeholder=\"{{'APPLICATION_WIDGET_LINK_TEXT' | translate}}\"></div></form>"),a.put("{widgetsPath}/counter/src/view.html",'<div class=dashboard-stat ng-class=config.color ng-if="count || count === 0"><div class=visual><i class=fa ng-class=config.icon></i></div><div class=details><div class=number>{{count}}</div><div class=desc>{{config.details}}</div></div><a class=more href={{config.link}}>{{config.linkText}} <i class="m-icon-swapright m-icon-white"></i></a></div><div class="alert alert-danger" role=alert ng-if=!config.report><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_WIDGET_SELECT_REPORT\' | translate}}</div><div class="alert alert-danger" role=alert ng-if="!count && count != 0"><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_ENTER_VALID_CONDITION\' | translate}}</div>')}])}(window),function(a,b){angular.module("adf.widget.pie-chart",["adf.provider"]).value("apiServiceUrlPieChart","/api/widgets/piechart").config(["dashboardProvider",function(a){a.widget("pie-chart",{title:"Pie-Chart",description:"Display a pie-chart starting from DB values",templateUrl:"{widgetsPath}/pie-chart/src/view.html",controller:"apiWidgetPieChartViewCtrl",edit:{templateUrl:"{widgetsPath}/pie-chart/src/edit.html",controller:"apiWidgetPieChartEditCtrl"}})}]).service("apiServicePieChart",["$q","$http","apiServiceUrlPieChart",function(a,b,c){return{get:function(d){var e=a.defer();return b.get(c,{params:{condition:encodeURIComponent(d.condition),table:d.report,fields:d.fields}}).success(function(a){a?e.resolve(a):e.reject()}).error(function(a){console.log(a),e.reject()}),e.promise}}}]).controller("apiWidgetPieChartEditCtrl",["$scope",function(a){function b(){return a.config.fields||(a.config.fields=[{column:"",alias:""}]),a.config.fields}a.config.reportTables=[{name:"Agents",value:"agent"},{name:"Calls",value:"call"},{name:"Dials",value:"dial"},{name:"Members",value:"member"},{name:"Queues",value:"queue"}],a.config.timeout=a.config.timeout?a.config.timeout:1,a.config.fields=a.config.fields?a.config.fields:[{column:"",alias:""}],a.addField=function(){b().push({})},a.removeField=function(a){b().splice(a,1)}}]).controller("apiWidgetPieChartViewCtrl",["$scope","$interval","apiServicePieChart",function(a,b,c){a.config.timeout=a.config.timeout?a.config.timeout:1,a.pieChartApiCall=function(){a.config.report&&a.config.fields.length&&""!==a.config.fields[0].column&&""!==a.config.fields[0].alias&&c.get(a.config).then(function(b){if(b&&1===b.length){a.labels=[],a.data=[];for(var c in b[0])a.labels.push(c),a.data.push(b[0][c])}else a.labels=[],a.data=[]})},a.pieChartApiCall();var d=b(function(){a.pieChartApiCall()},1e3*parseInt(a.config.timeout));a.$on("$destroy",function(){b.cancel(d)})}]),angular.module("adf.widget.pie-chart").run(["$templateCache",function(a){a.put("{widgetsPath}/pie-chart/src/edit.html",'<form role=form><div class=form-group><label class=control-label>{{\'APPLICATION_REPORT\' | translate}}</label><ui-select data-ng-model=config.report name=report theme=bootstrap><ui-select-match placeholder="{{ \'APPLICATION_REPORT\' | translate }}">{{$select.selected.name}}</ui-select-match><ui-select-choices repeat="report.value as report in config.reportTables | filter: $select.search"><div ng-bind-html="report.name | highlight: $select.search"></div></ui-select-choices></ui-select></div><div><label class=control-label>{{\'APPLICATION_FIELDS\' | translate}}</label></div><div class=padding-bottom ng-repeat="field in config.fields"><div class=form-group><div class=input-group><input type=text class=form-control ng-model=field.column> <span class=input-group-addon>as</span> <input type=text class=form-control ng-model=field.alias> <span class=input-group-btn ng-if="config.fields.length>1"><button class="btn btn-danger" type=button data-ng-click=removeField($index)><i class="fa fa-times"></i> {{\'APPLICATION_REMOVE\' | translate}}</button></span></div></div></div><button type=button class="btn btn-sm green mbottom20" ng-click=addField()><i class="fa fa-plus"></i> {{\'APPLICATION_ADD_FIELD\' | translate}}</button><div class=form-group><label for=condition>{{\'APPLICATION_CONDITION\' | translate}}</label> <input type=text class=form-control id=condition ng-model=config.condition placeholder="{{\'APPLICATION_CONDITION\' | translate}}"></div><div class=form-group><label for=condition>{{\'APPLICATION_REFRESH_TIMEOUT\' | translate}}</label> <input type=number class=form-control id=timeout ng-model=config.timeout placeholder="{{\'APPLICATION_REFRESH_TIMEOUT\' | translate}}" min=1></div></form>'),a.put("{widgetsPath}/pie-chart/src/view.html",'<div ng-if=labels.length ng-style=config.style><canvas id=doughnut class="chart chart-doughnut" chart-data=data chart-labels=labels legend=true></canvas></div><div class="alert alert-danger" role=alert ng-if=!config.report><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_WIDGET_SELECT_REPORT\' | translate}}</div><div class="alert alert-danger" role=alert ng-if=!labels.length><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_ENTER_VALID_CONDITION\' | translate}}</div><div class="alert alert-danger" role=alert ng-if=!labels.length><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_ENTER_ONE_VALID_METRIC_AND_CHECK_OTHER\' | translate}}</div>')}])}(window),function(a,b){angular.module("adf.widget.table",["adf.provider"]).value("apiServiceUrlTable","/api/widgets/table").config(["dashboardProvider",function(a){a.widget("table",{title:"Table",description:"Show tabbed results from db",templateUrl:"{widgetsPath}/table/src/view.html",controller:"apiWidgetTableViewCtrl",edit:{templateUrl:"{widgetsPath}/table/src/edit.html",controller:"apiWidgetTableEditCtrl"}})}]).service("apiServiceTable",["$q","$http","apiServiceUrlTable",function(a,b,c){return{get:function(d){var e=a.defer();return b.get(c,{params:{condition:encodeURIComponent(d.condition),table:d.report,fields:d.fields}}).success(function(a){a?e.resolve(a):e.reject()}).error(function(a){console.log(a),e.reject()}),e.promise}}}]).controller("apiWidgetTableEditCtrl",["$scope",function(a){function b(){return a.config.fields||(a.config.fields=[{column:"",alias:""}]),a.config.fields}a.config.reportTables=[{name:"Agents",value:"agent"},{name:"Calls",value:"call"},{name:"Dials",value:"dial"},{name:"Members",value:"member"},{name:"Queues",value:"queue"}],a.config.timeout=a.config.timeout?a.config.timeout:1,a.config.height=a.config.height?a.config.height:350,a.config.fields=a.config.fields?a.config.fields:[{column:"",alias:""}],a.addField=function(){b().push({})},a.removeField=function(a){b().splice(a,1)}}]).controller("apiWidgetTableViewCtrl",["$scope","$interval","apiServiceTable",function(a,b,c){a.config.timeout=a.config.timeout?a.config.timeout:1,a.config.height=a.config.height?a.config.height:350,a.config.style={"max-height":a.config.height+"px",overflow:"scroll"},a.tableApiCall=function(){a.config.condition&&a.config.report&&a.config.fields.length&&""!==a.config.fields[0].column&&""!==a.config.fields[0].alias&&c.get(a.config).then(function(b){a.results=b})},a.tableApiCall();var d=b(function(){a.tableApiCall()},1e3*parseInt(a.config.timeout));a.$on("$destroy",function(){b.cancel(d)})}]),angular.module("adf.widget.table").run(["$templateCache",function(a){a.put("{widgetsPath}/table/src/edit.html",'<form role=form><div class=form-group><label class=control-label>{{\'APPLICATION_REPORT\' | translate}}</label><ui-select data-ng-model=config.report name=report theme=bootstrap><ui-select-match placeholder="{{ \'APPLICATION_REPORT\' | translate }}">{{$select.selected.name}}</ui-select-match><ui-select-choices repeat="report.value as report in config.reportTables | filter: $select.search"><div ng-bind-html="report.name | highlight: $select.search"></div></ui-select-choices></ui-select></div><div><label class=control-label>{{\'APPLICATION_METRICS\' | translate}}</label></div><div class=padding-bottom ng-repeat="field in config.fields"><div class=form-group><div class=input-group><input type=text class=form-control ng-model=field.column> <span class=input-group-addon>as</span> <input type=text class=form-control ng-model=field.alias> <span class=input-group-btn ng-if="config.fields.length>1"><button class="btn btn-danger" type=button data-ng-click=removeField($index)><i class="fa fa-times"></i> {{\'APPLICATION_REMOVE\' | translate}}</button></span></div></div></div><button type=button class="btn btn-sm green mbottom20" ng-click=addField()><i class="fa fa-plus"></i> {{\'APPLICATION_ADD_FIELD\' | translate}}</button><div class=form-group><label for=condition>{{\'APPLICATION_CONDITION\' | translate}}</label> <input type=text class=form-control id=condition ng-model=config.condition placeholder="{{\'APPLICATION_CONDITION\' | translate}}"></div><div class=form-group><label for=condition>{{\'APPLICATION_REFRESH_TIMEOUT\' | translate}}</label> <input type=number class=form-control id=timeout ng-model=config.timeout placeholder="{{\'APPLICATION_REFRESH_TIMEOUT\' | translate}}" min=1></div><div class=form-group><label for=condition>{{\'APPLICATION_WIDGET_MAX_HEIGHT\' | translate}}</label> <input type=number class=form-control id=height ng-model=config.height placeholder="{{\'APPLICATION_WIDGET_MAX_HEIGHT\' | translate}}" min=350></div></form>'),a.put("{widgetsPath}/table/src/view.html",'<div ng-if=results ng-style=config.style><table st-table=results class="table table-striped table-bordered table-hover"><div class=table-responsive><thead><tr><th colspan={{config.fields.length}}><div class=row><div class=col-md-6></div><div class=col-md-6><div class="input-group input-medium pull-right"><input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class=form-control type=search> <span class=input-group-addon><i class="fa fa-search"></i></span></div></div></div></th></tr><tr><th ng-repeat="field in config.fields">{{field.alias}}</th></tr></thead><tbody><tr data-ng-repeat="result in results" class=animate-repeat><td ng-repeat="field in config.fields">{{result[field.alias]}}</td></tr><tr data-ng-hide=results.length><td colspan={{config.fields.length}} style=text-align:center;><i>{{ \'MESSAGE_NO_RESULTS_AVAILABLE\' | translate }}</i></td></tr></tbody><tfoot><tr><td colspan={{config.fields.length}} class=text-center><div st-pagination class=pagination st-items-by-page=10 st-displayed-pages=3></div></td></tr></tfoot></div></table></div><div class="alert alert-danger" role=alert ng-if=!config.report><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_WIDGET_SELECT_REPORT\' | translate}}</div><div class="alert alert-danger" role=alert ng-if=!results><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_ENTER_VALID_CONDITION\' | translate}}</div><div class="alert alert-danger" role=alert ng-if=!results><span class="glyphicon glyphicon-exclamation-sign" aria-hidden=true></span> <span class=sr-only>{{\'APPLICATION_ERROR\' | translate}}:</span> {{\'MESSAGE_ENTER_ONE_VALID_FIELD_AND_CHECK_OTHER\' | translate}}</div>')}])}(window),function(){angular.module("pdf",[]).directive("ngPdf",["$window",function(a){return{restrict:"E",templateUrl:function(a,b){return b.templateUrl?b.templateUrl:"partials/viewer.html"},link:function(b,c,d){var e=d.pdfUrl,f=null,g=d.page?d.page:1,h=d.scale>0?d.scale:1,i=c.find("canvas"),j=i[0],k=j.getContext("2d"),l=angular.element(a);l.on("scroll",function(){b.$apply(function(){b.scroll=l[0].scrollY})}),PDFJS.disableWorker=!0,b.pageNum=g,b.renderPage=function(a){f.getPage(a).then(function(a){var e,f,g,i={};"page-fit"!==d.scale||h?e=a.getViewport(h):(e=a.getViewport(1),f=c[0].clientWidth/e.width,g=c[0].clientHeight/e.height,h=Math.min(f,g)),j.height=e.height,j.width=e.width,i={canvasContext:k,viewport:e},a.render(i).promise.then(function(){"function"==typeof b.onPageRender&&b.onPageRender()})})},b.goPrevious=function(){b.pageToDisplay<=1||(b.pageNum=parseInt(b.pageNum)-1);
+},b.goNext=function(){b.pageToDisplay>=f.numPages||(b.pageNum=parseInt(b.pageNum)+1)},b.zoomIn=function(){return h=parseFloat(h)+.2,b.renderPage(b.pageToDisplay),h},b.zoomOut=function(){return h=parseFloat(h)-.2,b.renderPage(b.pageToDisplay),h},b.changePage=function(){b.renderPage(b.pageToDisplay)},b.rotate=function(){"rotate0"===j.getAttribute("class")?j.setAttribute("class","rotate90"):"rotate90"===j.getAttribute("class")?j.setAttribute("class","rotate180"):"rotate180"===j.getAttribute("class")?j.setAttribute("class","rotate270"):j.setAttribute("class","rotate0")},PDFJS.getDocument(e,null,null,b.onProgress).then(function(a){"function"==typeof b.onLoad&&b.onLoad(),f=a,b.renderPage(b.pageToDisplay),b.$apply(function(){b.pageCount=a.numPages})},function(a){a&&"function"==typeof b.onError&&b.onError(a)}),b.$watch("pageNum",function(a){b.pageToDisplay=parseInt(a),null!==f&&b.renderPage(b.pageToDisplay)})}}}])}(),function(a){a.module("angular-elastic-builder",["RecursionHelper"])}(window.angular),function(a){a.module("angular-elastic-builder").directive("elasticBuilder",["elasticQueryService",function(a){return{scope:{data:"=elasticBuilder"},templateUrl:"angular-elastic-builder/BuilderDirective.html",link:function(b){var c=b.data;b.filters=[],b.removeChild=function(a){b.filters.splice(a,1)},b.addRule=function(){b.filters.push({})},b.addGroup=function(){b.filters.push({type:"group",subType:"and",rules:[]})},b.$watch("data.needsUpdate",function(d){d&&(b.filters=a.toFilters(c.query,b.data.fields),b.data.needsUpdate=!1)}),b.$watch("filters",function(d){d&&(c.query=a.toQuery(b.filters,b.data.fields))},!0)}}}])}(window.angular),function(a){var b=a.module("angular-elastic-builder");b.directive("elasticBuilderChooser",["RecursionHelper","groupClassHelper",function(a,b){return{scope:{elasticFields:"=",item:"=elasticBuilderChooser",onRemove:"&"},templateUrl:"angular-elastic-builder/ChooserDirective.html",compile:function(c){return a.compile(c,function(a,c,d){var e=a.depth=+d.depth,f=a.item;a.getGroupClassName=function(){var a=e;return"group"===f.type&&a++,b(a)}})}}}])}(window.angular),function(a){var b=a.module("angular-elastic-builder");b.directive("elasticBuilderGroup",["RecursionHelper","groupClassHelper",function(a,b){return{scope:{elasticFields:"=",group:"=elasticBuilderGroup",onRemove:"&"},templateUrl:"angular-elastic-builder/GroupDirective.html",compile:function(c){return a.compile(c,function(a,c,d){var e=a.depth=+d.depth,f=a.group;a.addRule=function(){f.rules.push({})},a.addGroup=function(){f.rules.push({type:"group",subType:"and",rules:[]})},a.removeChild=function(a){f.rules.splice(a,1)},a.getGroupClassName=function(){return b(e+1)}})}}}])}(window.angular),function(a){var b=a.module("angular-elastic-builder");b.directive("elasticBuilderRule",[function(){return{scope:{elasticFields:"=",rule:"=elasticBuilderRule",onRemove:"&"},templateUrl:"angular-elastic-builder/RuleDirective.html",link:function(a){a.getType=function(){var b=a.elasticFields,c=a.rule.field;return b&&c?"boolean"===b[c].subType?"boolean":b[c].type:void 0}}}}])}(window.angular),function(a){var b=a.module("angular-elastic-builder");b.directive("elasticType",[function(){return{scope:{type:"=elasticType",rule:"=",guide:"="},template:'<ng-include src="getTemplateUrl()" />',link:function(a){a.getTemplateUrl=function(){var b=a.type;if(b)return b=b.charAt(0).toUpperCase()+b.slice(1),"angular-elastic-builder/types/"+b+".html"},a.booleans=["False","True"],a.booleansOrder=["True","False"],a.inputNeeded=function(){var b=["equals","notEquals","gt","gte","lt","lte"];return~b.indexOf(a.rule.subType)}}}}])}(window.angular),function(a){a.module("angular-elastic-builder").factory("groupClassHelper",function(){return function(a){var b=[""];return b[a%b.length]}})}(window.angular),function(a){function b(a,b){var c=a.map(d.bind(a,b));return c}function c(a,b){var c=a.map(e.bind(a,b)).filter(function(a){return!!a});return c}function d(a,b,c){c!==!1&&(c=!0);var e=Object.keys(b)[0],g={or:"group",and:"group",range:"number"},h=g[e]||"item",i=f(h);switch(e){case"or":case"and":i.rules=b[e].map(d.bind(b,a)),i.subType=e;break;case"missing":case"exists":i.field=b[e].field,i.subType={exists:"exists",missing:"notExists"}[e],delete i.value;break;case"term":case"terms":i.field=Object.keys(b[e])[0];var j=a[Object.keys(b[e])[0]];if("multi"===j.type){var k=b[e][i.field];"string"==typeof k&&(k=[k]),i.value=b[e][i.field]}else i.subType=c?"equals":"notEquals",i.value=b[e][i.field],"number"==typeof i.value&&(i.subType="boolean");break;case"range":i.field=Object.keys(b[e])[0],i.subType=Object.keys(b[e][i.field])[0],i.value=b[e][i.field][i.subType];break;case"not":i=d(a,b[e].filter,!1);break;default:i.field=Object.keys(b[e])[0]}return i}function e(a,b){var c={};if("group"===b.type)return c[b.subType]=b.rules.map(e.bind(b,a)).filter(function(a){return!!a}),c;var d=b.field,f=a[d];if(d){switch(f.type){case"term":case"multiterm":if("boolean"===f.subType&&(b.subType="boolean"),!b.subType)return;switch(b.subType){case"equals":case"boolean":if(void 0===b.value)return;c.term={},c.term[d]=b.value;break;case"notEquals":if(void 0===b.value)return;c.not={filter:{term:{}}},c.not.filter.term[d]=b.value;break;case"exists":c.exists={field:d};break;case"notExists":c.missing={field:d};break;default:throw new Error("unexpected subtype "+b.subType)}break;case"number":c.range={},c.range[d]={},c.range[d][b.subType]=b.value;break;case"date":if("exists"===b.subType)c.exists={field:d};else{if("notExists"!==b.subType)throw new Error("unexpected subtype");c.missing={field:d}}break;case"multi":c.terms={},c.terms[d]=b.value;break;default:throw new Error("unexpected type")}return c}}function f(b){var c={group:{type:"group",subType:"",rules:[]},item:{field:"",subType:"",value:""},number:{field:"",subType:"",value:null}};return a.copy(c[b])}a.module("angular-elastic-builder").factory("elasticQueryService",[function(){return{toFilters:b,toQuery:c}}])}(window.angular),function(a){a.module("angular-elastic-builder").run(["$templateCache",function(a){a.put("angular-elastic-builder/BuilderDirective.html",'<!-- <div class="elastic-builder">\n  <div class="filter-panels">\n    <div class="list-group form-inline">\n      <div\n        data-ng-repeat="filter in filters"\n        data-elastic-builder-chooser="filter"\n        data-elastic-fields="data.fields"\n        data-on-remove="removeChild($index)"\n        data-depth="0"></div>\n      <div class="list-group-item actions">\n        <a class="btn btn-xs btn-primary" title="Add Rule" data-ng-click="addRule()">\n          <i class="fa fa-plus"></i>\n        </a>\n        <a class="btn btn-xs btn-primary" title="Add Group" data-ng-click="addGroup()">\n          <i class="fa fa-list"></i>\n        </a>\n      </div>\n    </div>\n  </div>\n</div> -->\n\n<!-- <div class="elastic-builder">\n  <div class="filter-panels"> -->\n    <div class="list-group form-inline list-group-item-custom" ng-switch="data.type">\n      <div\n        data-ng-repeat="filter in filters"\n        data-elastic-builder-chooser="filter"\n        data-elastic-fields="data.fields"\n        data-on-remove="removeChild($index)"\n        data-depth="0">\n      </div>\n      <div class="list-group-item actions list-group-item-custom" ng-switch-when="condition">\n        <a href="#" class="btn green btn-sm" data-ng-click="addGroup()">\n				  <i class="icon-plus"></i> {{ \'APPLICATION_ADD_GROUP\' | translate }}\n				</a>\n      </div>\n      <div class="list-group-item actions list-group-item-custom" ng-switch-when="action">\n        <a href="#" class="btn green btn-sm" data-ng-click="addRule()">\n				  <i class="icon-plus"></i> {{ \'APPLICATION_ADD_ACTION\' | translate }}\n				</a>\n      </div>\n      <div class="list-group-item actions list-group-item-custom" ng-switch-default>\n        <a href="#" class="btn green btn-sm" data-ng-click="addRule()">\n				  <i class="icon-plus"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\n				</a>\n        <a href="#" class="btn green btn-sm" data-ng-click="addGroup()">\n				  <i class="icon-plus"></i> {{ \'APPLICATION_ADD_GROUP\' | translate }}\n				</a>\n      </div>\n    </div>\n  <!-- </div>\n</div> -->\n'),a.put("angular-elastic-builder/ChooserDirective.html",'<!-- <div\n  class="list-group-item elastic-builder-chooser"\n  data-ng-class="getGroupClassName()">\n\n  <div data-ng-if="item.type === \'group\'"\n    data-elastic-builder-group="item"\n    data-depth="{{ depth }}"\n    data-elastic-fields="elasticFields"\n    data-on-remove="onRemove()"></div>\n\n  <div data-ng-if="item.type !== \'group\'"\n    data-elastic-builder-rule="item"\n    data-elastic-fields="elasticFields"\n    data-on-remove="onRemove()"></div>\n\n</div> -->\n\n\n<div class="list-group-item elastic-builder-chooser list-group-item-custom" data-ng-class="getGroupClassName()">\n  <div data-ng-if="item.type === \'group\'"\n    data-elastic-builder-group="item"\n    data-depth="{{ depth }}"\n    data-elastic-fields="elasticFields"\n    data-on-remove="onRemove()"></div>\n  <div data-ng-if="item.type !== \'group\'"\n    data-elastic-builder-rule="item"\n    data-elastic-fields="elasticFields"\n    data-on-remove="onRemove()"></div>\n</div>\n'),a.put("angular-elastic-builder/GroupDirective.html",'<!-- <div class="elastic-builder-group">\n  <h5>If\n    <select data-ng-model="group.subType" class="form-control">\n      <option value="and">all</option>\n      <option value="or">any</option>\n    </select>\n    of these conditions are met\n  </h5>\n  <div\n    data-ng-repeat="rule in group.rules"\n    data-elastic-builder-chooser="rule"\n    data-elastic-fields="elasticFields"\n    data-depth="{{ +depth + 1 }}"\n    data-on-remove="removeChild($index)"></div>\n\n  <div class="list-group-item actions" data-ng-class="getGroupClassName()">\n    <a class="btn btn-xs btn-primary" title="Add Sub-Rule" data-ng-click="addRule()">\n      <i class="fa fa-plus"></i>\n    </a>\n    <a class="btn btn-xs btn-primary" title="Add Sub-Group" data-ng-click="addGroup()">\n      <i class="fa fa-list"></i>\n    </a>\n  </div>\n\n  <a class="btn btn-xs btn-danger remover" data-ng-click="onRemove()">\n    <i class="fa fa-minus"></i>\n  </a>\n</div> -->\n\n\n<!-- BEGIN Portlet PORTLET-->\n<div class="portlet light">\n  <div class="portlet-title">\n    <div class="caption" data-ng-class="{\'font-blue-hoki\': data.type === \'condition\', \'font-red-flamingo\': data.type === \'action\'}">\n      <!-- <i class="icon-people font-green-sharp"></i> -->\n      <h5><span class="caption-subject">{{ \'APPLICATION_IF\' | translate }}</span>\n        <select data-ng-model="group.subType" class="form-control">\n          <option value="and"><strong>{{ \'APPLICATION_ALL\' | translate | lowercase }}</strong></option>\n          <option value="or"><strong>{{ \'APPLICATION_ANY\' | translate | lowercase }}</strong></option>\n        </select>\n        <span class="caption-subject">{{group.subType == \'and\' ? \'MESSAGE_CODITIONS_MET_ALL\' : \'MESSAGE_CODITIONS_MET_ANY\' | translate}}</span>\n      </h5>\n    </div>\n  </div>\n  <div class="portlet-body">\n    <div class="elastic-builder-group">\n      <div\n        data-ng-repeat="rule in group.rules"\n        data-elastic-builder-chooser="rule"\n        data-elastic-fields="elasticFields"\n        data-depth="{{ +depth + 1 }}"\n        data-on-remove="removeChild($index)"></div>\n\n      <div class="list-group-item actions list-group-item-custom" data-ng-class="getGroupClassName()">\n        <a href="#" class="btn green btn-sm" data-ng-click="addRule()">\n          <i class="icon-plus"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\n        </a>\n        <a class="btn red btn-sm remover" data-ng-click="onRemove()">\n          <i class="icon-trash"></i> {{ \'APPLICATION_REMOVE_GROUP\' | translate }}\n        </a>\n      </div>\n    </div>\n  </div>\n</div>\n<!-- END Portlet PORTLET-->\n'),a.put("angular-elastic-builder/RuleDirective.html",'<!-- <div class="elastic-builder-rule">\n  <select class="form-control" data-ng-model="rule.field" data-ng-options="key as key for (key, value) in elasticFields"></select>\n\n  <span data-elastic-type="getType()" data-rule="rule" data-guide="elasticFields[rule.field]"></span>\n\n  <a class="btn btn-xs btn-danger remover" data-ng-click="onRemove()">\n    <i class="fa fa-minus"></i>\n  </a>\n\n</div> -->\n<!-- <div class="elastic-builder-rule"> -->\n  <!-- <select class="form-control" data-ng-model="rule.field" data-ng-options="key as key for (key, value) in elasticFields"></select> -->\n  {{elasticFields[rule.field].action.label | translate}}\n  <select class="form-control" data-ng-model="rule.field" >\n  <option ng-repeat="option in elasticFields" value="{{option.value}}">{{ option.label | translate }}</option>\n  </select>\n  <!-- <ui-select class="form-control" data-ng-model="rule.field" theme="bootstrap">\n    <ui-select-match placeholder="{{\'APPLICATION_CONDITION\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n    <ui-select-choices repeat="value.value as key for (key, value) in elasticFields | filter: $select.search">\n      {{$translate.instant(key.name)}}\n    </ui-select-choices>\n  </ui-select> -->\n\n  <span data-elastic-type="getType()" data-rule="rule" data-guide="elasticFields[rule.field]"></span>\n\n  <!-- <a class="btn btn-xs btn-danger remover" data-ng-click="onRemove()">\n    <i class="fa fa-minus"></i>\n  </a> -->\n\n  <a class="btn remover" data-ng-click="onRemove()">\n    <i class="icon-trash"></i>\n  </a>\n\n<!-- </div> -->\n'),a.put("angular-elastic-builder/types/Boolean.html",'<span class="boolean-rule">\n  Equals\n\n  <!-- This is a weird hack to make sure these are numbers -->\n  <select\n    data-ng-model="rule.value"\n    class="form-control"\n    data-ng-options="booleans.indexOf(choice) as choice for choice in booleansOrder">\n  </select>\n</span>\n'),a.put("angular-elastic-builder/types/Date.html",'<span class="date-rule">\n  <select data-ng-model="rule.subType" class="form-control">\n\n    <optgroup label="Generic">\n      <option value="exists">Exists</option>\n      <option value="notExists">! Exists</option>\n    </optgroup>\n  </select>\n\n</span>\n'),a.put("angular-elastic-builder/types/Multi.html",'<!-- <span class="multi-rule">\n  <span data-ng-repeat="choice in guide.choices">\n    <label class="checkbox">\n      <input type="checkbox" data-ng-model="rule.values[choice]">\n      {{ choice }}\n    </label>\n  </span>\n</span> -->\n\n<span class="multi-rule">\n  {{guide.action.midterm | translate}}\n  <!-- Range Fields -->\n  <!-- <select data-ng-model="rule.values" class="form-control"> -->\n  <select data-ng-model="rule.value" class="form-control">\n    <!-- <optgroup label="Numeral"> -->\n      <option data-ng-repeat="(key, value) in guide.choices" value="{{value}}">{{key}}</option>\n    <!-- </optgroup> -->\n\n    <!-- <optgroup label="Generic">\n      <option value="exists">Exists</option>\n      <option value="notExists">! Exists</option>\n    </optgroup> -->\n  </select>\n\n  <!-- <input data-ng-if="inputNeeded()"\n    class="form-control"\n    data-ng-model="rule.value"\n    type="number"\n    min="{{ guide.minimum }}"\n    max="{{ guide.maximum }}"> -->\n</span>\n'),a.put("angular-elastic-builder/types/Multiterm.html",'<span class="elastic-multiterm">\n  <select data-ng-model="rule.subType" class="form-control">\n      <option value="equals">{{ \'APPLICATION_EQUALS_TO\' | translate }}</option>\n      <option value="notEquals">{{ \'APPLICATION_NOT_EQUALS_TO\' | translate }}</option>\n  </select>\n  <select data-ng-model="rule.value" class="form-control">\n      <option data-ng-repeat="(key, value) in guide.choices" value="{{value}}">{{value | capitalize}}</option>\n  </select>\n</span>\n'),a.put("angular-elastic-builder/types/Number.html",'<span class="number-rule">\n  <select data-ng-model="rule.subType" class="form-control">\n    <!-- <optgroup label="Numeral"> -->\n      <option value="equals">=</option>\n      <option value="gt">&gt;</option>\n      <option value="gte">&ge;</option>\n      <option value="lt">&lt;</option>\n      <option value="lte">&le;</option>\n    <!-- </optgroup> -->\n\n    <!-- <optgroup label="Generic"> -->\n      <!-- <option value="exists">Exists</option>\n      <option value="notExists">! Exists</option> -->\n    <!-- </optgroup> -->\n  </select>\n\n  <!-- Range Fields -->\n  <input data-ng-if="inputNeeded()"\n    class="form-control"\n    data-ng-model="rule.value"\n    type="number"\n    min="{{ guide.minimum }}"\n    max="{{ guide.maximum }}">\n\n    <!-- <span class="help-block">{{rule.help}}</span> -->\n\n</span>\n'),a.put("angular-elastic-builder/types/Term.html",'<!-- <span class="elastic-term">\n  <select data-ng-model="rule.subType" class="form-control"> -->\n    <!-- Term Options -->\n    <!-- <optgroup label="Text">\n      <option value="equals">Equals</option>\n      <option value="notEquals">! Equals</option>\n    </optgroup> -->\n\n    <!-- Generic Options -->\n    <!-- <optgroup label="Generic">\n      <option value="exists">Exists</option>\n      <option value="notExists">! Exists</option>\n    </optgroup>\n\n  </select>\n  <input\n    data-ng-if="inputNeeded()"\n    class="form-control"\n    data-ng-model="rule.value"\n    type="text">\n</span> -->\n\n\n<span class="elastic-term">\n  <select data-ng-model="rule.subType" class="form-control">\n    <!-- Term Options -->\n    <!-- <optgroup label="Text"> -->\n      <option value="equals">{{ \'APPLICATION_EQUALS_TO\' | translate }}</option>\n      <option value="notEquals">{{ \'APPLICATION_NOT_EQUALS_TO\' | translate }}</option>\n    <!-- </optgroup> -->\n\n    <!-- Generic Options -->\n    <!-- <optgroup label="Generic">\n      <option value="exists">Exists</option>\n      <option value="notExists">! Exists</option>\n    </optgroup> -->\n\n  </select>\n  <input\n    data-ng-if="inputNeeded()"\n    class="form-control input-medium"\n    data-ng-model="rule.value"\n    type="text">\n</span>\n')}])}(window.angular);var Metronic=function(){var a,b=!1,c=!1,d=!1,e=!1,f=[],g="assets/",h="img/",i="plugins/",j="css/",k={blue:"#89C4F4",red:"#F3565D",green:"#1bbc9b",purple:"#9b59b6",grey:"#95a5a6",yellow:"#F8CB00"},l=function(){"rtl"===$("body").css("direction")&&(b=!0),c=!!navigator.userAgent.match(/MSIE 8.0/),d=!!navigator.userAgent.match(/MSIE 9.0/),e=!!navigator.userAgent.match(/MSIE 10.0/),e&&$("html").addClass("ie10"),(e||d||c)&&$("html").addClass("ie")},m=function(){for(var a=0;a<f.length;a++){var b=f[a];b.call()}},n=function(){var a;if(c){var b;$(window).resize(function(){b!=document.documentElement.clientHeight&&(a&&clearTimeout(a),a=setTimeout(function(){m()},50),b=document.documentElement.clientHeight)})}else $(window).resize(function(){a&&clearTimeout(a),a=setTimeout(function(){m()},50)})},o=function(){$("body").on("click",".portlet > .portlet-title > .tools > a.remove",function(a){a.preventDefault();var b=$(this).closest(".portlet");$("body").hasClass("page-portlet-fullscreen")&&$("body").removeClass("page-portlet-fullscreen"),b.find(".portlet-title .fullscreen").tooltip("destroy"),b.find(".portlet-title > .tools > .reload").tooltip("destroy"),b.find(".portlet-title > .tools > .remove").tooltip("destroy"),b.find(".portlet-title > .tools > .config").tooltip("destroy"),b.find(".portlet-title > .tools > .collapse, .portlet > .portlet-title > .tools > .expand").tooltip("destroy"),b.remove()}),$("body").on("click",".portlet > .portlet-title .fullscreen",function(a){a.preventDefault();var b=$(this).closest(".portlet");if(b.hasClass("portlet-fullscreen"))$(this).removeClass("on"),b.removeClass("portlet-fullscreen"),$("body").removeClass("page-portlet-fullscreen"),b.children(".portlet-body").css("height","auto");else{var c=Metronic.getViewPort().height-b.children(".portlet-title").outerHeight()-parseInt(b.children(".portlet-body").css("padding-top"))-parseInt(b.children(".portlet-body").css("padding-bottom"));$(this).addClass("on"),b.addClass("portlet-fullscreen"),$("body").addClass("page-portlet-fullscreen"),b.children(".portlet-body").css("height",c)}}),$("body").on("click",".portlet > .portlet-title > .tools > a.reload",function(a){a.preventDefault();var b=$(this).closest(".portlet").children(".portlet-body"),c=$(this).attr("data-url"),d=$(this).attr("data-error-display");c?(Metronic.blockUI({target:b,animate:!0,overlayColor:"none"}),$.ajax({type:"GET",cache:!1,url:c,dataType:"html",success:function(a){Metronic.unblockUI(b),b.html(a)},error:function(a,c,e){Metronic.unblockUI(b);var f="Error on reloading the content. Please check your connection and try again.";"toastr"==d&&toastr?toastr.error(f):"notific8"==d&&$.notific8?($.notific8("zindex",11500),$.notific8(f,{theme:"ruby",life:3e3})):alert(f)}})):(Metronic.blockUI({target:b,animate:!0,overlayColor:"none"}),window.setTimeout(function(){Metronic.unblockUI(b)},1e3))}),$('.portlet .portlet-title a.reload[data-load="true"]').click(),$("body").on("click",".portlet > .portlet-title > .tools > .collapse, .portlet .portlet-title > .tools > .expand",function(a){a.preventDefault()})},p=function(){if($().uniform){var a=$("input[type=checkbox]:not(.toggle, .make-switch, .icheck), input[type=radio]:not(.toggle, .star, .make-switch, .icheck)");a.size()>0&&a.each(function(){0===$(this).parents(".checker").size()&&$(this).show()})}},q=function(){$().iCheck&&$(".icheck").each(function(){var a=$(this).attr("data-checkbox")?$(this).attr("data-checkbox"):"icheckbox_minimal-grey",b=$(this).attr("data-radio")?$(this).attr("data-radio"):"iradio_minimal-grey";a.indexOf("_line")>-1||b.indexOf("_line")>-1?$(this).iCheck({checkboxClass:a,radioClass:b,insert:'<div class="icheck_line-icon"></div>'+$(this).attr("data-label")}):$(this).iCheck({checkboxClass:a,radioClass:b})})},r=function(){$().bootstrapSwitch&&$(".make-switch").bootstrapSwitch()},s=function(){$().confirmation&&$("[data-toggle=confirmation]").confirmation({container:"body",btnOkClass:"btn-xs btn-success",btnCancelClass:"btn-xs btn-danger"})},t=function(){$("body").on("shown.bs.collapse",".accordion.scrollable",function(a){Metronic.scrollTo($(a.target))})},u=function(){if(location.hash){var a=location.hash.substr(1);$('a[href="#'+a+'"]').parents(".tab-pane:hidden").each(function(){var a=$(this).attr("id");$('a[href="#'+a+'"]').click()}),$('a[href="#'+a+'"]').click()}},v=function(){$("body").on("hide.bs.modal",function(){$(".modal:visible").size()>1&&$("html").hasClass("modal-open")===!1?$("html").addClass("modal-open"):$(".modal:visible").size()<=1&&$("html").removeClass("modal-open")}),$("body").on("show.bs.modal",".modal",function(){$(this).hasClass("modal-scroll")&&$("body").addClass("modal-open-noscroll")}),$("body").on("hide.bs.modal",".modal",function(){$("body").removeClass("modal-open-noscroll")}),$("body").on("hidden.bs.modal",".modal:not(.modal-cached)",function(){$(this).removeData("bs.modal")})},w=function(){$(".tooltips").tooltip(),$(".portlet > .portlet-title .fullscreen").tooltip({container:"body",title:"Fullscreen"}),$(".portlet > .portlet-title > .tools > .reload").tooltip({container:"body",title:"Reload"}),$(".portlet > .portlet-title > .tools > .remove").tooltip({container:"body",title:"Remove"}),$(".portlet > .portlet-title > .tools > .config").tooltip({container:"body",title:"Settings"}),$(".portlet > .portlet-title > .tools > .collapse, .portlet > .portlet-title > .tools > .expand").tooltip({container:"body",title:"Collapse/Expand"})},x=function(){$("body").on("click",".dropdown-menu.hold-on-click",function(a){a.stopPropagation()})},y=function(){$("body").on("click",'[data-close="alert"]',function(a){$(this).parent(".alert").hide(),$(this).closest(".note").hide(),a.preventDefault()}),$("body").on("click",'[data-close="note"]',function(a){$(this).closest(".note").hide(),a.preventDefault()}),$("body").on("click",'[data-remove="note"]',function(a){$(this).closest(".note").remove(),a.preventDefault()})},z=function(){$('[data-hover="dropdown"]').not(".hover-initialized").each(function(){$(this).dropdownHover(),$(this).addClass("hover-initialized")})},A=function(){$(".popovers").popover(),$(document).on("click.bs.popover.data-api",function(b){a&&a.popover("hide")})},B=function(){Metronic.initSlimScroll(".scroller")},C=function(){jQuery.fancybox&&$(".fancybox-button").size()>0&&$(".fancybox-button").fancybox({groupAttr:"data-rel",prevEffect:"none",nextEffect:"none",closeBtn:!0,helpers:{title:{type:"inside"}}})},D=function(){(c||d)&&$("input[placeholder]:not(.placeholder-no-fix), textarea[placeholder]:not(.placeholder-no-fix)").each(function(){var a=$(this);""===a.val()&&""!==a.attr("placeholder")&&a.addClass("placeholder").val(a.attr("placeholder")),a.focus(function(){a.val()==a.attr("placeholder")&&a.val("")}),a.blur(function(){(""===a.val()||a.val()==a.attr("placeholder"))&&a.val(a.attr("placeholder"))})})},E=function(){$().select2&&$(".select2me").select2({placeholder:"Select"})};return{init:function(){l(),n(),p(),q(),r(),B(),C(),E(),o(),y(),x(),u(),w(),A(),t(),v(),s(),D()},initAjax:function(){p(),q(),r(),z(),B(),E(),C(),x(),w(),A(),t(),s()},initComponents:function(){this.initAjax()},setLastPopedPopover:function(b){a=b},addResizeHandler:function(a){f.push(a)},runResizeHandlers:function(){m()},scrollTo:function(a,b){var c=a&&a.size()>0?a.offset().top:0;a&&($("body").hasClass("page-header-fixed")&&(c-=$(".page-header").height()),c+=b?b:-1*a.height()),$("html,body").animate({scrollTop:c},"slow")},initSlimScroll:function(a){$(a).each(function(){if(!$(this).attr("data-initialized")){var a;a=$(this).attr("data-height")?$(this).attr("data-height"):$(this).css("height"),$(this).slimScroll({allowPageScroll:!0,size:"7px",color:$(this).attr("data-handle-color")?$(this).attr("data-handle-color"):"#bbb",wrapperClass:$(this).attr("data-wrapper-class")?$(this).attr("data-wrapper-class"):"slimScrollDiv",railColor:$(this).attr("data-rail-color")?$(this).attr("data-rail-color"):"#eaeaea",position:b?"left":"right",height:a,alwaysVisible:"1"==$(this).attr("data-always-visible")?!0:!1,railVisible:"1"==$(this).attr("data-rail-visible")?!0:!1,disableFadeOut:!0}),$(this).attr("data-initialized","1")}})},destroySlimScroll:function(a){$(a).each(function(){if("1"===$(this).attr("data-initialized")){$(this).removeAttr("data-initialized"),$(this).removeAttr("style");var a={};$(this).attr("data-handle-color")&&(a["data-handle-color"]=$(this).attr("data-handle-color")),$(this).attr("data-wrapper-class")&&(a["data-wrapper-class"]=$(this).attr("data-wrapper-class")),$(this).attr("data-rail-color")&&(a["data-rail-color"]=$(this).attr("data-rail-color")),$(this).attr("data-always-visible")&&(a["data-always-visible"]=$(this).attr("data-always-visible")),$(this).attr("data-rail-visible")&&(a["data-rail-visible"]=$(this).attr("data-rail-visible")),$(this).slimScroll({wrapperClass:$(this).attr("data-wrapper-class")?$(this).attr("data-wrapper-class"):"slimScrollDiv",destroy:!0});var b=$(this);$.each(a,function(a,c){b.attr(a,c)})}})},scrollTop:function(){Metronic.scrollTo()},blockUI:function(a){a=$.extend(!0,{},a);var b="";if(b=a.animate?'<div class="loading-message '+(a.boxed?"loading-message-boxed":"")+'"><div class="block-spinner-bar"><div class="bounce1"></div><div class="bounce2"></div><div class="bounce3"></div></div></div>':a.iconOnly?'<div class="loading-message '+(a.boxed?"loading-message-boxed":"")+'"><img src="'+this.getGlobalImgPath()+'loading-spinner-blue.gif" align=""></div>':a.textOnly?'<div class="loading-message '+(a.boxed?"loading-message-boxed":"")+'"><span>&nbsp;&nbsp;'+(a.message?a.message:"LOADING...")+"</span></div>":'<div class="loading-message '+(a.boxed?"loading-message-boxed":"")+'"><img src="'+this.getGlobalImgPath()+'loading-spinner-blue.gif" align=""><span>&nbsp;&nbsp;'+(a.message?a.message:"LOADING...")+"</span></div>",a.target){var c=$(a.target);c.height()<=$(window).height()&&(a.cenrerY=!0),c.block({message:b,baseZ:a.zIndex?a.zIndex:1e3,centerY:void 0!==a.cenrerY?a.cenrerY:!1,css:{top:"10%",border:"0",padding:"0",backgroundColor:"none"},overlayCSS:{backgroundColor:a.overlayColor?a.overlayColor:"#555",opacity:a.boxed?.05:.1,cursor:"wait"}})}else $.blockUI({message:b,baseZ:a.zIndex?a.zIndex:1e3,css:{border:"0",padding:"0",backgroundColor:"none"},overlayCSS:{backgroundColor:a.overlayColor?a.overlayColor:"#555",opacity:a.boxed?.05:.1,cursor:"wait"}})},unblockUI:function(a){a?$(a).unblock({onUnblock:function(){$(a).css("position",""),$(a).css("zoom","")}}):$.unblockUI()},startPageLoading:function(a){a&&a.animate?($(".page-spinner-bar").remove(),$("body").append('<div class="page-spinner-bar"><div class="bounce1"></div><div class="bounce2"></div><div class="bounce3"></div></div>')):($(".page-loading").remove(),$("body").append('<div class="page-loading"><img src="'+this.getGlobalImgPath()+'loading-spinner-blue.gif"/>&nbsp;&nbsp;<span>'+(a&&a.message?a.message:"Loading...")+"</span></div>"))},stopPageLoading:function(){$(".page-loading, .page-spinner-bar").remove()},alert:function(a){a=$.extend(!0,{container:"",place:"append",type:"success",message:"",close:!0,reset:!0,focus:!0,closeInSeconds:0,icon:""},a);var b=Metronic.getUniqueID("Metronic_alert"),c='<div id="'+b+'" class="Metronic-alerts alert alert-'+a.type+' fade in">'+(a.close?'<button type="button" class="close" data-dismiss="alert" aria-hidden="true"></button>':"")+(""!==a.icon?'<i class="fa-lg fa fa-'+a.icon+'"></i>  ':"")+a.message+"</div>";return a.reset&&$(".Metronic-alerts").remove(),a.container?"append"==a.place?$(a.container).append(c):$(a.container).prepend(c):$("body").hasClass("page-container-bg-solid")?$(".page-title").after(c):$(".page-bar").size()>0?$(".page-bar").after(c):$(".page-breadcrumb").after(c),a.focus&&Metronic.scrollTo($("#"+b)),a.closeInSeconds>0&&setTimeout(function(){$("#"+b).remove()},1e3*a.closeInSeconds),b},initUniform:function(a){a?$(a).each(function(){0===$(this).parents(".checker").size()&&($(this).show(),$(this).uniform())}):p()},updateUniform:function(a){$.uniform.update(a)},initFancybox:function(){C()},getActualVal:function(a){return a=$(a),a.val()===a.attr("placeholder")?"":a.val()},getURLParameter:function(a){var b,c,d=window.location.search.substring(1),e=d.split("&");for(b=0;b<e.length;b++)if(c=e[b].split("="),c[0]==a)return unescape(c[1]);return null},isTouchDevice:function(){try{return document.createEvent("TouchEvent"),!0}catch(a){return!1}},getViewPort:function(){var a=window,b="inner";return"innerWidth"in window||(b="client",a=document.documentElement||document.body),{width:a[b+"Width"],height:a[b+"Height"]}},getUniqueID:function(a){return"prefix_"+Math.floor(Math.random()*(new Date).getTime())},isIE8:function(){return c},isIE9:function(){return d},isRTL:function(){return b},isAngularJsApp:function(){return"undefined"==typeof angular?!1:!0},getAssetsPath:function(){return g},setAssetsPath:function(a){g=a},setGlobalImgPath:function(a){h=a},getGlobalImgPath:function(){return g+h},setGlobalPluginsPath:function(a){i=a},getGlobalPluginsPath:function(){return g+i},getGlobalCssPath:function(){return g+j},getBrandColor:function(a){return k[a]?k[a]:""},getResponsiveBreakpoint:function(a){var b={xs:480,sm:768,md:900,lg:1200};return b[a]?b[a]:0}}}(),Layout=function(){var a="img/",b="css/",c=Metronic.getResponsiveBreakpoint("md"),d=function(){var a,b=$(".page-content"),d=$(".page-sidebar"),e=$("body");if(e.hasClass("page-footer-fixed")===!0&&e.hasClass("page-sidebar-fixed")===!1){var f=Metronic.getViewPort().height-$(".page-footer").outerHeight()-$(".page-header").outerHeight();b.height()<f&&b.attr("style","min-height:"+f+"px")}else{if(e.hasClass("page-sidebar-fixed"))a=g(),e.hasClass("page-footer-fixed")===!1&&(a-=$(".page-footer").outerHeight());else{var h=$(".page-header").outerHeight(),i=$(".page-footer").outerHeight();a=Metronic.getViewPort().width<c?Metronic.getViewPort().height-h-i:d.height()+20,a+h+i<=Metronic.getViewPort().height&&(a=Metronic.getViewPort().height-h-i)}b.attr("style","min-height:"+a+"px");
+}},e=function(a,b){var d=location.hash.toLowerCase(),e=$(".page-sidebar-menu");if("click"===a||"set"===a?b=$(b):"match"===a&&e.find("li > a").each(function(){var a=$(this).attr("href").toLowerCase();return a.length>1&&d.substr(1,a.length-1)==a.substr(1)?void(b=$(this)):void 0}),b&&0!=b.size()&&"javascript:;"!==b.attr("href").toLowerCase()&&"#"!==b.attr("href").toLowerCase()){parseInt(e.data("slide-speed")),e.data("keep-expanded");e.find("li.active").removeClass("active"),e.find("li > a > .selected").remove(),e.hasClass("page-sidebar-menu-hover-submenu")===!1?e.find("li.open").each(function(){0===$(this).children(".sub-menu").size()&&($(this).removeClass("open"),$(this).find("> a > .arrow.open").removeClass("open"))}):e.find("li.open").removeClass("open"),b.parents("li").each(function(){$(this).addClass("active"),$(this).find("> a > span.arrow").addClass("open"),1===$(this).parent("ul.page-sidebar-menu").size()&&$(this).find("> a").append('<span class="selected"></span>'),1===$(this).children("ul.sub-menu").size()&&$(this).addClass("open")}),"click"===a&&Metronic.getViewPort().width<c&&$(".page-sidebar").hasClass("in")&&$(".page-header .responsive-toggler").click()}},f=function(){jQuery(".page-sidebar").on("click","li > a",function(a){var b=$(this).next().hasClass("sub-menu");if(!(Metronic.getViewPort().width>=c&&1===$(this).parents(".page-sidebar-menu-hover-submenu").size())){if(b===!1)return void(Metronic.getViewPort().width<c&&$(".page-sidebar").hasClass("in")&&$(".page-header .responsive-toggler").click());if(!$(this).next().hasClass("sub-menu always-open")){var e=$(this).parent().parent(),f=$(this),g=$(".page-sidebar-menu"),h=jQuery(this).next(),i=g.data("auto-scroll"),j=parseInt(g.data("slide-speed")),k=g.data("keep-expanded");k!==!0&&(e.children("li.open").children("a").children(".arrow").removeClass("open"),e.children("li.open").children(".sub-menu:not(.always-open)").slideUp(j),e.children("li.open").removeClass("open"));var l=-200;h.is(":visible")?(jQuery(".arrow",jQuery(this)).removeClass("open"),jQuery(this).parent().removeClass("open"),h.slideUp(j,function(){i===!0&&$("body").hasClass("page-sidebar-closed")===!1&&($("body").hasClass("page-sidebar-fixed")?g.slimScroll({scrollTo:f.position().top}):Metronic.scrollTo(f,l)),d()})):b&&(jQuery(".arrow",jQuery(this)).addClass("open"),jQuery(this).parent().addClass("open"),h.slideDown(j,function(){i===!0&&$("body").hasClass("page-sidebar-closed")===!1&&($("body").hasClass("page-sidebar-fixed")?g.slimScroll({scrollTo:f.position().top}):Metronic.scrollTo(f,l)),d()})),a.preventDefault()}}}),jQuery(".page-sidebar").on("click"," li > a.ajaxify",function(a){a.preventDefault(),Metronic.scrollTop();var b=$(this).attr("href"),d=jQuery(".page-sidebar ul"),e=($(".page-content"),$(".page-content .page-content-body"));d.children("li.active").removeClass("active"),d.children("arrow.open").removeClass("open"),$(this).parents("li").each(function(){$(this).addClass("active"),$(this).children("a > span.arrow").addClass("open")}),$(this).parents("li").addClass("active"),Metronic.getViewPort().width<c&&$(".page-sidebar").hasClass("in")&&$(".page-header .responsive-toggler").click(),Metronic.startPageLoading();var f=$(this);$.ajax({type:"GET",cache:!1,url:b,dataType:"html",success:function(a){0===f.parents("li.open").size()&&$(".page-sidebar-menu > li.open > a").click(),Metronic.stopPageLoading(),e.html(a),Layout.fixContentHeight(),Metronic.initAjax()},error:function(a,b,c){Metronic.stopPageLoading(),e.html("<h4>Could not load the requested content.</h4>")}})}),jQuery(".page-content").on("click",".ajaxify",function(a){a.preventDefault(),Metronic.scrollTop();var b=$(this).attr("href"),d=($(".page-content"),$(".page-content .page-content-body"));Metronic.startPageLoading(),Metronic.getViewPort().width<c&&$(".page-sidebar").hasClass("in")&&$(".page-header .responsive-toggler").click(),$.ajax({type:"GET",cache:!1,url:b,dataType:"html",success:function(a){Metronic.stopPageLoading(),d.html(a),Layout.fixContentHeight(),Metronic.initAjax()},error:function(a,b,c){d.html("<h4>Could not load the requested content.</h4>"),Metronic.stopPageLoading()}})}),i(),$(".page-sidebar").on("click",".sidebar-search .remove",function(a){a.preventDefault(),$(".sidebar-search").removeClass("open")}),$(".page-sidebar .sidebar-search").on("keypress","input.form-control",function(a){return 13==a.which?($(".sidebar-search").submit(),!1):void 0}),$(".sidebar-search .submit").on("click",function(a){a.preventDefault(),$("body").hasClass("page-sidebar-closed")&&$(".sidebar-search").hasClass("open")===!1?(1===$(".page-sidebar-fixed").size()&&$(".page-sidebar .sidebar-toggler").click(),$(".sidebar-search").addClass("open")):$(".sidebar-search").submit()}),0!==$(".sidebar-search").size()&&($(".sidebar-search .input-group").on("click",function(a){a.stopPropagation()}),$("body").on("click",function(){$(".sidebar-search").hasClass("open")&&$(".sidebar-search").removeClass("open")}))},g=function(){var a=Metronic.getViewPort().height-$(".page-header").outerHeight();return $("body").hasClass("page-footer-fixed")&&(a-=$(".page-footer").outerHeight()),a},h=function(){var a=$(".page-sidebar-menu");return Metronic.destroySlimScroll(a),0===$(".page-sidebar-fixed").size()?void d():void(Metronic.getViewPort().width>=c&&(a.attr("data-height",g()),Metronic.initSlimScroll(a),d()))},i=function(){var a=$("body");a.hasClass("page-sidebar-fixed")&&$(".page-sidebar").on("mouseenter",function(){a.hasClass("page-sidebar-closed")&&$(this).find(".page-sidebar-menu").removeClass("page-sidebar-menu-closed")}).on("mouseleave",function(){a.hasClass("page-sidebar-closed")&&$(this).find(".page-sidebar-menu").addClass("page-sidebar-menu-closed")})},j=function(){var a=$("body");$.cookie&&"1"===$.cookie("sidebar_closed")&&Metronic.getViewPort().width>=c?($("body").addClass("page-sidebar-closed"),$(".page-sidebar-menu").addClass("page-sidebar-menu-closed")):$.cookie&&$.cookie("sidebar_closed","0"),$("body").on("click",".sidebar-toggler",function(b){var c=$(".page-sidebar"),d=$(".page-sidebar-menu");$(".sidebar-search",c).removeClass("open"),a.hasClass("page-sidebar-closed")?(a.removeClass("page-sidebar-closed"),d.removeClass("page-sidebar-menu-closed"),$.cookie&&$.cookie("sidebar_closed","0")):(a.addClass("page-sidebar-closed"),d.addClass("page-sidebar-menu-closed"),a.hasClass("page-sidebar-fixed")&&d.trigger("mouseleave"),$.cookie&&$.cookie("sidebar_closed","1")),$(window).trigger("resize")})},k=function(){$(".page-header").on("click",'.hor-menu a[data-toggle="tab"]',function(a){a.preventDefault();var b=$(".hor-menu .nav"),c=b.find("li.current");$("li.active",c).removeClass("active"),$(".selected",c).remove();var d=$(this).parents("li").last();d.addClass("current"),d.find("a:first").append('<span class="selected"></span>')}),$(".page-header").on("click",".search-form",function(a){$(this).addClass("open"),$(this).find(".form-control").focus(),$(".page-header .search-form .form-control").on("blur",function(a){$(this).closest(".search-form").removeClass("open"),$(this).unbind("blur")})}),$(".page-header").on("keypress",".hor-menu .search-form .form-control",function(a){return 13==a.which?($(this).closest(".search-form").submit(),!1):void 0}),$(".page-header").on("mousedown",".search-form.open .submit",function(a){a.preventDefault(),a.stopPropagation(),$(this).closest(".search-form").submit()}),$('[data-hover="megamenu-dropdown"]').not(".hover-initialized").each(function(){$(this).dropdownHover(),$(this).addClass("hover-initialized")}),$(document).on("click",".mega-menu-dropdown .dropdown-menu",function(a){a.stopPropagation()})},l=function(){$("body").on("shown.bs.tab",'a[data-toggle="tab"]',function(){d()})},m=function(){var a=300,b=500;navigator.userAgent.match(/iPhone|iPad|iPod/i)?$(window).bind("touchend touchcancel touchleave",function(c){$(this).scrollTop()>a?$(".scroll-to-top").fadeIn(b):$(".scroll-to-top").fadeOut(b)}):$(window).scroll(function(){$(this).scrollTop()>a?$(".scroll-to-top").fadeIn(b):$(".scroll-to-top").fadeOut(b)}),$(".scroll-to-top").click(function(a){return a.preventDefault(),$("html, body").animate({scrollTop:0},b),!1})},n=function(){var a,b=$(".full-height-content");if(a=Metronic.getViewPort().height-$(".page-header").outerHeight(!0)-$(".page-footer").outerHeight(!0)-$(".page-title").outerHeight(!0)-$(".page-bar").outerHeight(!0),b.hasClass("portlet")){var d=b.find(".portlet-body");if(Metronic.getViewPort().width<c)return void Metronic.destroySlimScroll(d.find(".full-height-content-body"));a=a-b.find(".portlet-title").outerHeight(!0)-parseInt(b.find(".portlet-body").css("padding-top"))-parseInt(b.find(".portlet-body").css("padding-bottom"))-2,b.hasClass("full-height-content-scrollable")?(a-=35,d.find(".full-height-content-body").css("height",a),Metronic.initSlimScroll(d.find(".full-height-content-body"))):d.css("min-height",a)}else{if(Metronic.getViewPort().width<c)return void Metronic.destroySlimScroll(b.find(".full-height-content-body"));b.hasClass("full-height-content-scrollable")?(a-=35,b.find(".full-height-content-body").css("height",a),Metronic.initSlimScroll(b.find(".full-height-content-body"))):b.css("min-height",a)}};return{initHeader:function(){k()},setSidebarMenuActiveLink:function(a,b){e(a,b)},initSidebar:function(){h(),f(),j(),Metronic.isAngularJsApp()&&e("match"),Metronic.addResizeHandler(h)},initContent:function(){n(),l(),Metronic.addResizeHandler(d),Metronic.addResizeHandler(n)},initFooter:function(){m()},init:function(){this.initHeader(),this.initSidebar(),this.initContent(),this.initFooter()},fixContentHeight:function(){d()},initFixedSidebarHoverEffect:function(){i()},initFixedSidebar:function(){h()},getLayoutImgPath:function(){return Metronic.getAssetsPath()+a},getLayoutCssPath:function(){return Metronic.getAssetsPath()+b}}}();angular.module("xCallyShuttleApp").run(["$templateCache",function(a){a.put("app/agent/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-people"></i>\n					<a href="/agents/list">{{ \'APPLICATION_AGENTS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-people font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_AGENTS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="agents.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle" href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_AGENT\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/agents/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getAgents([\'name\', \'fullname\', \'email\'])" csv-header="[\'Username\', \'Fullname\', \'Email\']" field-separator=";" filename="agents.csv">\n					<i class="icon-cloud-download"></i></a>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedAgents" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="5">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.agentsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="agentByPage in agentsByPage | filter: $select.search">\n													<div ng-bind-html="agentByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(agent, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="fullname">{{ \'APPLICATION_FULLNAME\' | translate }}</th>\n						    <th st-sort="name">{{ \'APPLICATION_USERNAME\' | translate }}</th>\n						    <th st-sort="email">{{ \'APPLICATION_EMAIL\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="agent in displayedAgents" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="agents.checked" checklist-value="agent.id"></td>\n								<td>{{agent.fullname}}</td>\n					      <td>{{agent.name}}</td>\n					      <td><a data-ng-href="mailto:{{agent.email}}">{{agent.email}}</a></td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/agents/view/{{agent.id}}/account">\n										{{ \'APPLICATION_PROFILE\' | translate }}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(agent.fullname,agent.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedAgents.length">\n								<td colspan="5" style="text-align:center;">\n									<i>No agents available</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="fullname" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_USERNAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="email" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_EMAIL\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td/>\n						  </tr>\n					    <tr>\n					      <td colspan="5" class="text-center">\n									<div class="pagination" st-pagination st-items-by-page="conf.agentsByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n					</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/agent/view/view.account.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_ACCOUNT\' | translate}}</span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li data-ng-class="{\'active\': Auth.isAdmin()}" data-ng-show="Auth.isAdmin()">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_PERSONAL_INFO\' | translate}}</a>\n					</li>\n					<li data-ng-show="Auth.isAdmin()">\n						<a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_CHANGE_AVATAR\' | translate}}</a>\n					</li>\n					<li data-ng-show="Auth.isAdmin() || agent.id === Auth.getCurrentUser().id" data-ng-class="{\'active\': !Auth.isAdmin() && agent.id === Auth.getCurrentUser().id}">\n						<a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_CHANGE_PASSWORD\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n\n			<div class="portlet-body">\n				<div class="tab-content">\n					<!-- PERSONAL INFO TAB -->\n					<div class="tab-pane" data-ng-class="{\'active\': Auth.isAdmin()}" data-ng-show="Auth.isAdmin()" id="tab_1_1">\n						<form name="forms.info" data-ng-submit="updateItem()" novalidate>\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="agent.fullname" required/>\n								<span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START USERNAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="agent.name" required/>\n								<span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END USERNAME -->\n\n							<!-- START EMAIL -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$invalid}">\n								<label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="agent.email" required/>\n								<span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n								<span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.email" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n								</span>\n							</div>\n							<!-- END EMAIL -->\n\n							<!-- START INTERNAL -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$invalid}">\n								<label class="control-label">{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="internal" placeholder="{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}" class="form-control" data-ng-model="agent.internal" required disabled/>\n								<span data-ng-show="(forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END INTERNAL -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END PERSONAL INFO TAB -->\n					<!-- CHANGE AVATAR TAB -->\n					<div class="tab-pane" data-ng-show="Auth.isAdmin()" id="tab_1_2">\n						<form action="#" role="form">\n							<div class="form-group">\n								<div class="fileinput fileinput-new" data-provides="fileinput">\n									<div class="fileinput-new thumbnail" style="width: 200px; height: 150px;">\n										<img src="http://www.placehold.it/200x150/EFEFEF/AAAAAA&amp;text=no+image" alt=""/>\n									</div>\n									<div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px;">\n									</div>\n									<div>\n										<span class="btn default btn-file" data-ng-show="!uploader.queue[0]">\n											<span> {{ \'APPLICATION_SELECT_IMAGE\' | translate }} </span>\n											<input type="file" nv-file-select="" uploader="uploader" /><br/>\n										</span>\n										<button type="button" class="btn default" data-ng-show="uploader.queue[0]" data-dismiss="fileinput" ng-click="uploader.queue[0].remove()">\n											{{ \'APPLICATION_REMOVE\' | translate }}\n										</button>\n										<button type="button" class="btn green-haze" data-ng-show="uploader.queue[0]" data-ng-click="uploader.queue[0].upload()" ng-disabled="uploader.queue[0].isReady || uploader.queue[0].isUploading || uploader.queue[0].isSuccess">\n											{{ \'APPLICATION_CONFIRM\' | translate }}\n										</button>\n									</div>\n									<p>\n										</br> {{ \'MESSAGE_SUPPORTED_FORMATS\' | translate }} <b>jpg, png, jpeg</b>.\n									</p>\n								</div>\n							</div>\n						</form>\n						<div class="row">\n							<div class="col-md-2">\n								<table class="table" border="0">\n									<tbody>\n									<tr data-ng-repeat="item in uploader.queue">\n											<td style="border-top-style:none">\n												<strong>\n													{{ item.file.name }}\n												</strong>\n											</td>\n											<td data-ng-show="uploader.isHTML5" nowrap style="border-top-style:none">\n												{{ item.file.size/1024/1024|number:2 }} MB\n											</td>\n											<td nowrap style="border-top-style:none">\n												<button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n														<span class="glyphicon glyphicon-trash"></span> Remove\n												</button>\n											</td>\n										</tr>\n									</tbody>\n								</table>\n							</div>\n						</div>\n					</div>\n					<!-- END CHANGE AVATAR TAB -->\n					<!-- CHANGE PASSWORD TAB -->\n					<div class="tab-pane" data-ng-show="Auth.isAdmin() || agent.id === Auth.getCurrentUser().id" data-ng-class="{\'active\': !Auth.isAdmin() && agent.id === Auth.getCurrentUser().id}" id="tab_1_3">\n						<form name="forms.changePwd" data-ng-submit="forms.changePwd.$valid && updatePassword()" novalidate>\n							<!-- START CURRENT PWD -->\n							<div class="form-group" data-ng-if="!Auth.isAdmin()" data-ng-class="{\'has-error\': (forms.changePwd.current_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.current_pwd.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CURRENT_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="password" name="current_pwd" placeholder="{{\'APPLICATION_CURRENT_PASSWORD\' | translate}}" class="form-control" data-ng-model="agent.currentPwd" required/>\n								<span data-ng-show="(forms.changePwd.current_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.current_pwd.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END CURRENT PWD -->\n							<!-- START NEW PWD -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NEW_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="password" name="new_pwd" placeholder="{{\'APPLICATION_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="agent.newPwd" required/>\n								<span data-ng-show="(forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NEW PWD -->\n							<!-- START RE-NEW PWD -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.changePwd.re_new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.re_new_pwd.$invalid}">\n								<label class="control-label">{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="password" name="re_new_pwd" placeholder="{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="agent.reNewPwd" nx-equal="agent.newPwd" required/>\n								<span data-ng-show="(forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END RE-NEW PWD -->\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END CHANGE PASSWORD TAB -->\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/agent/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-people"></i>\n					<a href="/agents/list">{{ \'APPLICATION_AGENTS\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<a href="#">{{agent.fullname}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-userpic">\n					<img ng-src="api/users/avatar/{{agent.userpic ? agent.userpic : \'unknown_avatar\'}}" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n\n				<!-- START SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{agent.fullname}}\n					</div>\n					<div class="profile-usertitle-job">\n						{{agent.role}}\n					</div>\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.agents.view.account\')}">\n							<a data-ng-href="/agents/view/{{agent.id}}/account">\n							<i class="icon-user"></i>\n							{{ \'APPLICATION_ACCOUNT\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/agent/wizard/wizard.html",'<div class="col-md-12">\n  <!-- BEGIN PAGE HEADER-->\n	<div class="page-bar">\n		<ul class="page-breadcrumb">\n			<li>\n				<i class="icon-rocket"></i>\n				<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-people"></i>\n				<a href="/agents/list">{{ \'APPLICATION_AGENTS\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-options"></i>\n				<a href="/agents/wizard">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n			</li>\n		</ul>\n	</div>\n  <!-- END PAGE HEADER-->\n\n  <!-- BEGIN PORTLET-->\n  <div class="portlet light bordered" ng-init="getFirstFreeInternal();">\n  	<div class="portlet-title">\n  		<div class="caption font-green-sharp">\n  			<i class="icon-user font-green-sharp"></i>\n  			<span class="caption-subject">{{ \'APPLICATION_AGENT\' | translate }} WIZARD</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n  		<wizard on-finish="createItem()">\n				<wz-step title="{{\'APPLICATION_ACCOUNT\' | translate}}" canexit="exitValidation(forms.info.$valid)">\n			    <form name="forms.info" novalidate>\n\n			      <!-- START NAME -->\n			      <div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.fullname" required/>\n							<span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END NAME -->\n\n			      <!-- START USERNAME -->\n			      <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.name" required ng-remote-validate="/api/agents/validate/name"/>\n							<span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.required" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n							<span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.ngRemoteValidate" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_USERNAME\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END USERNAME -->\n\n			      <!-- START EMAIL -->\n			      <div class="form-group" data-ng-class="{\'has-error\': (forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="item.email" required ng-remote-validate="/api/agents/validate/email"/>\n			        <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.required" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n			        <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.email" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n			        </span>\n							<span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.ngRemoteValidate" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_EMAIL\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END EMAIL -->\n\n			      <!-- START PASSWORD -->\n			      <div class="form-group" data-ng-class="{\'has-error\': (forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" required/>\n			        <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.required" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END PASSWORD -->\n\n			      <!-- START RE PASSWORD -->\n			      <div class="form-group" data-ng-class="{\'has-error\': (forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="password" name="rpassword" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.rpassword" nx-equal="item.password" required/>\n			        <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.required" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n			        <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.nxEqual" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END RE PASSWORD -->\n\n						<!-- START INTERNAL -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$invalid}">\n							<label class="control-label">{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<div class="input-group">\n							<input type="number" min="1" name="internal" placeholder="{{\'APPLICATION_INTERNAL_NUMBER\' | translate}}" class="form-control" data-ng-model="item.internal" data-ng-disabled="!item.internalEnabled" data-ng-required="item.internalEnabled" ng-remote-validate="/api/agents/validate/internal"/>\n							<span class="input-group-addon">\n								<input type="checkbox" data-ng-model="item.internalEnabled">\n							</span>\n							</div>\n							<span data-ng-show="(forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n							<span data-ng-show="(forms.info.internal.$touched || forms.info.$submitted) && forms.info.internal.$error.ngRemoteValidate" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_INTERNAL\' | translate}}.\n							</span>\n						</div>\n						<!-- END INTERNAL -->\n\n			      <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n			    </form>\n			  </wz-step>\n\n				<wz-step title="{{\'APPLICATION_VOICE\' | translate}}" canexit="exitValidation(forms.voice.$valid)">\n					<form name="forms.voice" novalidate>\n\n						<!-- START ACCOUNTCODE -->\n						<!-- <div class="form-group" data-ng-class="{\'has-error\': (forms.voice.accountcode.$touched || forms.voice.$submitted) && forms.voice.accountcode.$invalid}">\n							<label class="control-label">{{\'APPLICATION_ACCOUNTCODE\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<input type="number" name="accountcode" placeholder="{{\'APPLICATION_ACCOUNTCODE\' | translate}}" class="form-control" data-ng-model="item.accountcode" required/>\n							<span class="help-block">\n								{{ \'DESCRIPTION_VOICE_HOST\' | translate }}\n							</span>\n							<span data-ng-show="(forms.voice.accountcode.$touched || forms.voice.$submitted) && forms.voice.accountcode.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div> -->\n						<!-- END ACCOUNTCODE -->\n\n						<!-- START TRANSPORT -->\n						<div class="form-group">\n							<label class="control-label">{{ \'APPLICATION_TRANSPORT\' | translate}}</label>\n							<ui-select multiple name="transport" ng-model="item.transport" theme="bootstrap" ng-disabled="disabled">\n						    <ui-select-match placeholder="Select transport...">{{$item}}</ui-select-match>\n						    <ui-select-choices repeat="transport in [\'udp\', \'tcp\', \'ws\', \'wss\'] | filter: $select.search">\n						    	{{transport}}\n						    </ui-select-choices>\n						  </ui-select>\n							<span class="help-block">\n								{{ \'DESCRIPTION_VOICE_TRANSPORT\' | translate }}\n							</span>\n						</div>\n						<!-- END TRANSPORT -->\n\n						<!-- START HOST -->\n						<!-- <div class="form-group" data-ng-class="{\'has-error\': (forms.voice.host.$touched || forms.voice.$submitted) && forms.voice.host.$invalid}">\n							<label class="control-label">{{\'APPLICATION_HOST\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="item.host" required/>\n							<span class="help-block">\n								{{ \'DESCRIPTION_VOICE_HOST\' | translate }}\n							</span>\n							<span data-ng-show="(forms.voice.host.$touched || forms.voice.$submitted) && forms.voice.host.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div> -->\n						<!-- END HOST -->\n\n						<!-- START NAT -->\n						<!-- <div class="form-group">\n							<label class="control-label">{{ \'APPLICATION_NAT\' | translate}}</label>\n							<ui-select multiple ng-model="item.nat" name="nat" theme="bootstrap" ng-disabled="disabled">\n								<ui-select-match placeholder="{{ \'APPLICATION_SEARCH_FILTER\' | translate }}">{{$item}}</ui-select-match>\n								<ui-select-choices repeat="nat in [\'yes\', \'no\', \'never\', \'route\', \'force_rport\', \'comedia\'] | filter: $select.search">\n									{{nat}}\n								</ui-select-choices>\n							</ui-select>\n							<span class="help-block">\n								{{ \'DESCRIPTION_VOICE_NAT\' | translate }}\n							</span>\n						</div> -->\n\n						<!-- END NAT -->\n\n						<!-- START TYPE -->\n						<!-- <div class="form-group" data-ng-class="{\'has-error\': (forms.voice.type.$touched || forms.voice.$submitted) && forms.voice.type.$invalid}">\n							<label class="control-label">{{\'APPLICATION_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<ui-select data-ng-model="item.type" name="type" theme="bootstrap" required>\n								<ui-select-match placeholder="{{ \'APPLICATION_SEARCH_FILTER\' | translate }}">{{$select.selected}}</ui-select-match>\n								<ui-select-choices repeat="type in [\'friend\', \'user\', \'peer\'] | filter: $select.search">\n									<div ng-bind-html="type | highlight: $select.search"></div>\n								</ui-select-choices>\n							</ui-select>\n							<span class="help-block">\n								{{ \'DESCRIPTION_VOICE_TYPE\' | translate }}\n							</span>\n							<span data-ng-show="(forms.voice.type.$touched || forms.voice.$submitted) && forms.voice.type.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div> -->\n						<!-- END TYPE -->\n\n						<!-- START CODEC -->\n						<div class="form-group">\n							<label class="control-label">{{ \'APPLICATION_ALLOWED_CODECS\' | translate}}</label>\n							<ui-select multiple ng-model="item.allow" name="allow" theme="bootstrap" ng-disabled="disabled">\n						    <ui-select-match placeholder="Select codec...">{{$item}}</ui-select-match>\n						    <ui-select-choices repeat="allow in [\'g729\', \'ilbc\', \'gsm\', \'ulaw\', \'alaw\'] | filter: $select.search">\n						    	{{allow}}\n						    </ui-select-choices>\n						  </ui-select>\n							<span class="help-block">\n								{{ \'DESCRIPTION_VOICE_CODEC\' | translate }}\n							</span>\n						</div>\n						<!-- END CODEC -->\n\n						<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n						<input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n					</form>\n				</wz-step>\n\n				<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n					<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n					<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n				</wz-step>\n  		</wizard>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),
+a.put("app/automation/list/list.html",'<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-bulb"></i>\n						<a href="#">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-bulb font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="Automations.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_AUTOMATION\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/automations/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getAutomations([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="automations.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedAutomations" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="6">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.AutomationsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="AutomationByPage in AutomationsByPage | filter: $select.search">\n													<div ng-bind-html="AutomationByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<!-- <th st-sort="id" width="5%" st-sort-default="reverse">{{ \'APPLICATION_ID\' | translate }}</th> -->\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(Automation, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n								<th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th st-sort="channel">{{ \'APPLICATION_CHANNEL\' | translate }}</th>\n								<th>{{ \'APPLICATION_STATUS\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="Automation in displayedAutomations">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="Automations.checked" checklist-value="Automation.id"></td>\n					      <td>{{Automation.name}}</td>\n								<td>{{Automation.description}}</td>\n								<td>{{Automation.channel | capitalize}}</td>\n								<td>\n									<input\n										data-ng-change="updateItem(Automation.id, Automation.status)",\n								    bs-switch\n								    ng-model="Automation.status"\n								    type="checkbox"\n								    switch-active="{{ isActive }}"\n								    switch-on-text="{{ onText }}"\n								    switch-off-text="{{ offText }}"\n								    switch-on-color="{{ onColor }}"\n								    switch-off-color="{{ offColor }}"\n								    switch-animate="{{ animate }}"\n								    switch-size="{{ size }}"\n								    switch-label="{{ label }}"\n								    switch-icon="{{ icon }}"\n								    switch-radio-off="{{ radioOff }}"\n								    switch-label-width="{{ labelWidth }}"\n								    switch-handle-width="{{ handleWidth }}">\n								</td>\n					      <td>\n									<a class="btn default btn-xs blue-stripe" data-ng-href="/automations/view/{{Automation.id}}/settings">\n										{{ \'APPLICATION_EDIT\' | translate }}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(Automation.name, Automation.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedAutomations.length">\n								<td colspan="6" class="text-center">\n									<i>No available automations</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_USERNAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="channel" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_CHANNEL\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n								</td>\n								<td/>\n								<td/>\n						  </tr>\n					    <tr>\n					      <td colspan="6" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.AutomationsByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/automation/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row" data-ng-init="initView()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-settings"></i>\n					<a href="/automations/list">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a>\n					<i class="fa fa-angle-right" data-ng-show="automation"></i>\n				</li>\n				<li data-ng-show="automation">\n					<a href="#">{{ automation.description || automation.name }}</a>\n				</li>\n			</ul>\n		</div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/automation.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{ automation.name }}\n					</div>\n					<div class="profile-usertitle-job">\n						{{ automation.description }}\n					</div>\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.automations.view.settings\')}">\n							<a href="/automations/view/{{automation.id}}/settings">\n							<i class="icon-bulb"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate }} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/automation/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_CONDITIONS\' | translate}} & {{\'APPLICATION_ACTIONS\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n			<div class="portlet-body">\n				<!-- <pre>\n					{{conditionsData.query | json}}\n				</pre>\n				<pre>\n					{{actionsData.query | json}}\n				</pre> -->\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.general" data-ng-submit="forms.general.$valid && updateAutomation()" novalidate>\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="automation.name" required/>\n								<span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="automation.description"/>\n							</div>\n							<!-- END DESCRIPTION -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END GENERAL TAB -->\n					<div class="tab-pane" id="tab_1_2">\n					<div class="portlet light bordered">\n						<div class="portlet-title">\n							<div class="caption font-blue-hoki">\n								<i class="icon-tag font-blue-hoki"></i>\n								<span class="caption-subject">{{ \'APPLICATION_CONDITIONS\' | translate }}</a> </span>\n							</div>\n						</div>\n						<div class="portlet-body">\n							<query-builder group="conditionsFilter.group" fields="fields.conditions" operators="$automations.operators" properties="properties[automation.channel]"></query-builder>\n						</div>\n					</div>\n					<div class="portlet light bordered">\n						<div class="portlet-title">\n							<div class="caption font-blue-hoki">\n								<i class="icon-tag font-blue-hoki"></i>\n								<span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }}</a> </span>\n							</div>\n						</div>\n						<div class="portlet-body">\n							<query-builder group="actionsFilter.group" fields="fields.actions" properties="properties[automation.channel]"></query-builder>\n						</div>\n					</div>\n\n						<input class="btn green-haze" type="button" value="{{\'APPLICATION_UPDATE\' | translate}}" data-ng-click="updateAutomation()"/>\n					</div>\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/automation/wizard/wizard.html",'<div class="row">\n	<div class="col-md-12">\n		<!-- BEGIN PAGE HEADER-->\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-settings"></i>\n					<a href="/automations/list">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n		<!-- END PAGE HEADER-->\n\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-bulb font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_AUTOMATIONS\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="createItem()">\n					<!-- <pre>\n						{{item | json}}\n					</pre>\n					<pre>\n						{{conditionsData.query | json}}\n					</pre>\n					<pre>\n						{{actionsData.query | json}}\n					</pre> -->\n					<wz-step title="{{\'APPLICATION_GENERAL\' | translate}}" canexit="exitValidation(forms.general.$valid)">\n						<form name="forms.general" data-ng-submit="submit()" novalidate>\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.general.name.$touched && forms.general.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n								<span data-ng-show="forms.general.name.$touched && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n							</div>\n							<!-- END DESCRIPTION -->\n\n							<button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n						</form>\n					</wz-step>\n	        <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(conditionsData.query.length && actionsData.query.length)">\n						<div class="portlet light bordered">\n							<div class="portlet-title">\n								<div class="caption font-blue-hoki">\n									<i class="icon-tag font-blue-hoki"></i>\n									<span class="caption-subject">{{ \'APPLICATION_CHANNEL\' | translate }}</a> </span>\n								</div>\n							</div>\n							<div class="portlet-body">\n								<div class="form-group"  >\n									<label class="control-label">{{ \'APPLICATION_CHANNEL\' | translate }}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="item.channel" name="channel" theme="bootstrap" required>\n										<ui-select-match placeholder="{{ \'APPLICATION_CHANNEL\' | translate }}">{{$select.selected | capitalize}}</ui-select-match>\n										<ui-select-choices repeat="channel in $automations.channels | filter: $select.search">\n											<div ng-bind-html="channel | highlight: $select.search | capitalize"></div>\n										</ui-select-choices>\n									</ui-select>\n								</div>\n							</div>\n						</div>\n						<div class="portlet light bordered">\n							<div class="portlet-title">\n								<div class="caption font-blue-hoki">\n									<i class="icon-tag font-blue-hoki"></i>\n									<span class="caption-subject">{{ \'APPLICATION_CONDITIONS\' | translate }}</a> </span>\n								</div>\n							</div>\n							<div class="portlet-body">\n								<query-builder group="conditionsFilter.group" fields="fields.conditions" operators="$automations.operators" properties="properties[item.channel]"></query-builder>\n							</div>\n						</div>\n						<div class="portlet light bordered">\n							<div class="portlet-title">\n								<div class="caption font-blue-hoki">\n									<i class="icon-tag font-blue-hoki"></i>\n									<span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }}</a> </span>\n								</div>\n							</div>\n							<div class="portlet-body">\n								<query-builder group="actionsFilter.group" fields="fields.actions" properties="properties[item.channel]"></query-builder>\n							</div>\n						</div>\n						<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n						<button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n					</wz-step>\n					<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n						<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n						<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n						<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n					</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/chat/preview/preview.html",'<style>\n  .xc_footer\n  {\n  	text-align: center;\n  	padding-bottom: 5px;\n  }\n\n  .xc_powered\n  {\n  	color: grey;\n    font: 10px/16px "Lucida Grande","Lucida Sans Unicode",Arial,Verdana,sans-serif;\n  	padding-bottom: 5px;\n  }\n\n  .xc_chat_container\n  {\n  	//width:379px;\n  	//position:fixed;\n  	//bottom:0;\n  	//right:50px;\n  	z-index:9999;\n  	background-color:transparent;\n  }\n\n  .xc_chat_container *\n  {\n  	font-family:Arial,Helvetica,sans-serif;\n  	font-size:13px;\n  	margin:0;\n  	padding:0;\n  }\n\n  .xc_chat_container p\n  {\n  	margin:5px 0;\n  }\n\n  .xc_signup_wrapper\n  {\n  	max-height:375px;\n  }\n\n  .xc_conversation_container\n  {\n  	max-height:375px;\n  	list-style:none;\n  	overflow:auto;\n  	margin:0;\n  	padding:20px 10px;\n  }\n\n  .xc_conversation_container a\n  {\n  	color:#036;\n  }\n\n  .xc_conversation_container a.xc_btn_style\n  {\n  	color:#fff;\n  }\n\n  div.xc_chat_head\n  {\n  	color:#fff;\n  	background:{{chatWebsite.color}};\n  	//border-radius: 20px 20px 0px 0px !important;\n  	height:52px;\n  	line-height:55px;\n  	cursor:pointer;\n  }\n\n  div.xc_chat_head.rounded\n  {\n  	border-radius: 20px 20px 0px 0px !important;\n  }\n\n  div.xc_chat_head.squared\n  {\n  	//border-radius: 20px 20px 0px 0px !important;\n  }\n\n  .xc_chat_head-title\n  {\n  	margin:5px 0 0 15px;\n  	color: #fff;\n  }\n\n  .xc_header_icon\n  {\n  	display:block;\n  	background-image:url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/icon_visitorchat.png);\n  	width:21px;\n  	height:16px;\n  	float:right;\n  	margin:20px 20px 0 0;\n  }\n\n  .xc_header_icon span.xc_notification_badge span\n  {\n  	display:block;\n  	height:16px;\n  	width:15px;\n  	text-align:center;\n  	font-size:9px;\n  	color:#555;\n  	position:relative;\n  	top:-20px;\n  	left:4px;\n  	margin:0;\n  	padding:0;\n  }\n\n  .xc_sub-head-spacer\n  {\n  	padding:1px;\n  }\n\n  .xc_conversation\n  {\n  	display:none;\n  	margin:0 12px 0 11px;\n  }\n\n  .xc_chat_toggle_container\n  {\n  	/*background:mediumslateblue center -52px;*/\n  	background: white;\n  	border-style: solid;\n    border-width: 1px;\n  	border-color: {{chatWebsite.color}};\n  	//display:none;\n  }\n\n  .xc_signup_wrapper,.xc_notifications_wrapper,.xc_enquiry_wrapper\n  {\n  	//display:none;\n    display:block;\n  	overflow:auto;\n  	line-height:1;\n  	padding:25px;\n  }\n\n  .xc_exit_chat_container\n  {\n  	text-align:right;\n  	width:95%;\n  	margin:0 auto;\n  	padding:5px 1px 0 0;\n  }\n\n  .xc_exit_chat_container span,.xc_exit_chat_container a\n  {\n  	font-size:80%;\n  	color:#666;\n  	text-decoration:none;\n  }\n\n  .xc_exit_chat_container a:hover\n  {\n  	color:#333;\n  }\n\n  a.xc_btn_exit_chat_confirm:hover\n  {\n  	color:red;\n  }\n\n  a.xc_btn_exit_chat_cancel:hover\n  {\n  	color:#0c0;\n  }\n\n  form.xc_form_reply\n  {\n  	position:relative;\n  }\n\n  .xc_form_reply\n  {\n  	/*background-color:#e3e3e3;*/\n  	text-align:center;\n  	/*border-top:1px solid #d3d3d3;*/\n  }\n\n  .xc_input_message\n  {\n  	height:100px;\n  	margin:10px auto 5px;\n  }\n\n  .xc_input_enquiry_message\n  {\n  	height:100px;\n  }\n\n  .xc_form_signup,.xc_form_enquiry\n  {\n  	text-align:center;\n  }\n\n  .xc_chat_container textarea,.xc_chat_container input[type=text]\n  {\n  	width:95%;\n  	min-width:95%;\n  	max-width:95%;\n  	-webkit-box-sizing:border-box;\n  	-moz-box-sizing:border-box;\n  	box-sizing:border-box;\n  	background-color:#fff;\n  	border:1px solid #ccc;\n  	-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);\n  	-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);\n  	box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);\n  	-webkit-transition:border linear .2s, box-shadow linear .2s;\n  	-moz-transition:border linear .2s, box-shadow linear .2s;\n  	-o-transition:border linear .2s, box-shadow linear .2s;\n  	transition:border linear .2s, box-shadow linear .2s;\n  	display:inline-block;\n  	font-size:14px;\n  	line-height:20px;\n  	color:#555;\n  	-webkit-border-radius:4px;\n  	-moz-border-radius:4px;\n  	border-radius:4px;\n  	vertical-align:middle;\n  	margin:3px 0;\n  	padding:4px 6px;\n  	resize: none;\n  }\n\n  .xc_chat_container textarea:focus,.xc_chat_container input[type=text]:focus\n  {\n  	outline: {{chatWebsite.color_focus}} auto 5px;\n  }\n\n  .xc_chat_container input[type=text]\n  {\n    	height: 30px;\n  }\n\n  .xc_message_sending textarea, .xc_enquiry_sending textarea\n  {\n    	background: #fff url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/loading.gif) 98% 5px no-repeat;\n  }\n\n  .xc_chatrow\n  {\n  	display:block;\n  	border-top:1px dashed #e3e3e3;\n  	margin:5px 0;\n    	clear: both;\n  }\n\n  .xc_chatrow p\n  {\n  	color:#444;\n  	word-wrap:break-word;\n  }\n\n  .xc_time\n  {\n  	float:right;\n  	font-size:80%;\n  	color:#ccc;\n  	padding-left:12px;\n  	margin:3px;\n  }\n\n  .xc_submission_pending\n  {\n  	background:transparent url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/bullet_clock.png) left center no-repeat;\n  }\n\n  .xc_submission_confirmed\n  {\n  	background:transparent url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/bullet_tick.png) left center no-repeat;\n  }\n\n  .xc_fullname\n  {\n  	font-weight:700;\n  }\n\n  .xc_fullname:after\n  {\n  	content:":";\n  }\n\n  .xc_avatar\n  {\n    	float: left;\n    	margin: 0 5px 5px 0;\n    	display: inline-block;\n    	width: 40px;\n    	height: 40px;\n    	border-radius: 5px;\n    	-moz-border-radius: 5px;\n    	-webkit-border-radius: 5px;\n  }\n\n  .xc_smilie\n  {\n  	background-repeat:no-repeat;\n  	display:inline-block;\n  	width:18px;\n  	height:18px;\n  	text-indent:-9999px;\n  	white-space:nowrap;\n  }\n\n  .xc_btn_load_more\n  {\n  	width:100%!important;\n  }\n\n  .xc_notifications_wrapper\n  {\n  	text-shadow:0 1px 0 rgba(255,255,255,0.5);\n  }\n\n  .xc_notification_success\n  {\n  	color:#468847;\n  }\n\n  .xc_notification_error\n  {\n  	color:#b94a48;\n  }\n\n  .xc_errorlist\n  {\n  	margin:0 0 0 25px;\n  	padding:0;\n  }\n\n  i.xc_btn_notifications_close\n  {\n  	float:right;\n  	font-weight:700;\n  	font-size:20px;\n  	color:#ccc;\n  	cursor:pointer;\n  	margin:-15px 0 0;\n  	padding:0;\n  }\n\n  .xc_btn_style\n  {\n  	width:95%;\n  	text-align:center;\n  	line-height:1.2;\n  	font-size:90%;\n  	-moz-box-shadow:inset 0 1px 0 0 {{chatWebsite.color_button}};\n  	-webkit-box-shadow:inset 0 1px 0 0 {{chatWebsite.color_button}};\n  	box-shadow:inset 0 1px 0 0 {{chatWebsite.color_button}};\n  	background:0;\n  	background-color:{{chatWebsite.color_button}};\n  	-moz-border-radius:4px;\n  	-webkit-border-radius:4px;\n  	border-radius:4px;\n  	border:1px solid {{chatWebsite.color_button}};\n  	display:inline-block;\n  	color:#fff;\n  	font-weight:700;\n  	text-decoration:none;\n  	text-shadow:1px 1px 0 #000c17;\n  	margin:0 auto 5px;\n  	padding:2px 0;\n  }\n\n  .xc_btn_style:hover\n  {\n  	background:0;\n  	background-color:{{chatWebsite.color_button}};\n      color: #fff;\n    	text-decoration: none;\n  }\n\n  .xc_btn_style:active\n  {\n  	position:relative;\n  	top:1px;\n  }\n\n  .xc_composing_container\n  {\n    	display: none;\n    width: 95%;\n    margin: 0 auto;\n    background: transparent url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/bullet_pencil.png) 6px center no-repeat;\n    padding-left: 19px;\n    font-style: italic;\n  }\n\n  @media only screen and (max-height: 620px) {\n  	.xc_conversation_container\n  	{\n  		max-height:300px!important;\n  	}\n  }\n\n  @media only screen and (max-height: 545px) {\n  	.xc_conversation_container\n  	{\n  		max-height:200px!important;\n  	}\n  }\n\n  @media only screen and (max-height: 445px) {\n  	.xc_conversation_container\n  	{\n  		max-height:150px!important;\n  	}\n  }\n\n  @media only screen and (max-width: 480px) {\n  	.xc_chat_container\n  	{\n  		width:95%!important;\n  		right:auto!important;\n  		-webkit-border-top-left-radius:15px;\n  		-webkit-border-top-right-radius:15px;\n  		-moz-border-radius-topleft:15px;\n  		-moz-border-radius-topright:15px;\n  		border-top-left-radius:15px;\n  		border-top-right-radius:15px;\n  		box-shadow:0 0 5px rgba(0,0,0,.5);\n  		-webkit-box-shadow:0 0 5px rgba(0,0,0,.5);\n  		-moz-box-shadow:0 0 5px rgba(0,0,0,.5);\n  	}\n\n  	div.xc_chat_head\n  	{\n  		background-color:#036;\n  		background-image:none;\n  		line-height:25px;\n  		height:auto;\n  		-webkit-border-top-left-radius:15px;\n  		-webkit-border-top-right-radius:15px;\n  		-moz-border-radius-topleft:15px;\n  		-moz-border-radius-topright:15px;\n  		border-top-left-radius:15px;\n  		border-top-right-radius:15px;\n  		padding:10px;\n  	}\n\n  	.xc_chat_toggle_container\n  	{\n  		background-color:#fff;\n  		background-image:none;\n  		border-color:#036;\n  		border-style:solid;\n  		border-width:0 1px;\n  	}\n\n  	.xc_header_icon\n  	{\n  		background-image:url({{chatWebsite.remote}}/api/xchatty/assets?resource=images/icon_visitorchat.png);\n  		margin:0;\n  	}\n\n  	.xc_header_icon span.xc_notification_badge span\n  	{\n  		top:-5px;\n  		left:5px;\n  	}\n\n  	.xc_notification_success\n  	{\n  		background-color:#dff0d8;\n  		border:1px solid #d6e9c6;\n  	}\n\n  	.xc_conversation_container\n  	{\n  		max-height:375px;\n  		border-color:#036;\n  	}\n\n  	.xc_notification_error\n  	{\n  		background-color:#f2dede;\n  		border:1px solid #eed3d7;\n  	}\n\n  	.xc_sub-head-spacer\n  	{\n  		display:none;\n  		padding:0;\n  	}\n\n  	.xc_chat_head-title,.xc_conversation\n  	{\n  		margin:0;\n  	}\n  }\n</style>\n<div class="xc_chat_container">\n    <div class="xc_chat_head {{chatWebsite.header_shape}}">\n      <i class="xc_header_icon">\n        <span class="xc_notification_badge">\n          <span class="xc_notification_badge_number"></span>\n        </span>\n      </i>\n      <span class="xc_chat_head-title">{{statePreview.state == \'online\' ? chatWebsite.header_online : chatWebsite.header_offline}}</span>\n    </div>\n    <div class="xc_chat_toggle_container">\n        <div class="xc_sub-head-spacer"></div>\n        <div class="xc_notifications_wrapper">\n            <!--<i class="xc_btn_notifications_close">&times;</i>-->\n            <ul class="xc_errorlist"></ul>\n        </div>\n        <div class="xc_enquiry_wrapper" data-ng-show=\'statePreview.state == "offline"\'>\n            <form class="xc_form_enquiry" accept-charset="UTF-8">\n                <p ng-bind-html=\'chatWebsite.offline_message\'></p>\n                <input maxlength="45" type="text" name="data[Enquiry][fullname]" placeholder="{{chatWebsite.username_placeholder}}" class="xc_input_enquiry_fullname" />\n                <input maxlength="85" type="text" name="data[Enquiry][email]" placeholder="{{chatWebsite.email_placeholder}}" class="xc_input_enquiry_email" />\n                <textarea maxlength="1500" placeholder="{{chatWebsite.enquiry_message_placeholder}}" name="data[Enquiry][message]" class="xc_input_enquiry_message"></textarea>\n                <a href="#" class="xc_btn_enquiry xc_btn_style">{{chatWebsite.enquiry_button}}</a></form>\n        </div>\n        <div class="xc_signup_wrapper" data-ng-show=\'statePreview.state == "online"\'>\n            <form class="xc_form_signup" accept-charset="UTF-8">\n                <p ng-bind-html=\'chatWebsite.online_message\'></p>\n                <input maxlength="45" type="text" name="data[Discussion][fullname]" placeholder="{{chatWebsite.username_placeholder}}" class="xc_input_fullname" />\n                <input maxlength="85" type="text" name="data[Discussion][email]" placeholder="{{chatWebsite.email_placeholder}}" class="xc_input_email" />\n                <input type="hidden" class="xc_input_visitor_time" name="data[Discussion][visitor_time]" /><a href="#" class="xc_btn_signup xc_btn_style">{{chatWebsite.start_chat_button}}</a></form>\n        </div>\n        <!-- <div class="xc_conversation">\n            <div class="xc_conversation_container">\n                <p class="xc_message_intro" data-id="-10">{FirstMessageText}</p>\n            </div>\n            <div class="xc_composing_container"></div>\n            <form class="xc_form_reply" accept-charset="UTF-8">\n                <div class="xc_exit_chat_container"><a href="#" class="xc_btn_exit_chat">{ExitChatButtonText}</a>\n                    <div class="xc_exit_chat_confirmation_wrapper" style="display: none;"><span>{ExitChatQuestionText} </span><a href="#" class="xc_btn_exit_chat_confirm">{ExitChatButtonConfirmText}</a><span> | </span><a href="#" class="xc_btn_exit_chat_cancel">{ExitChatButtonCancelText}</a></div>\n                </div>\n                <textarea maxlength="750" placeholder="{MessagePlaceholderText}" name="data[Message][message]" class="xc_input_message"></textarea><a href="#" class="xc_btn_send xc_btn_style">{MessageSendButtonText}</a></form>\n        </div> -->\n        <div class="xc_footer">\n            <div class="xc_powered"><a>Powered by Xenialab | Trademark xCALLY</a></div>\n        </div>\n    </div>\n</div>\n'),a.put("app/chat/queue/list/list.html",'<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-bubble"></i>\n						<a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-layers"></i>\n						<a href="/chat/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_QUEUE\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="chatQueues.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_QUEUE\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<!-- <li>\n								<a href="#" data-ng-click="open()">\n								<i class="icon-user"></i> {{ \'APPLICATION_QUICK\' | translate }} </a>\n							</li> -->\n							<li>\n								<a href="/chat/queues/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n							<!-- <li>\n								<a href="#">\n								<i class="icon-users"></i> {{ \'APPLICATION_BULK\' | translate }} </a>\n							</li> -->\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getChatQueues([\'name\', \'description\', \'timeout\', \'strategy\'])" csv-header="[\'Username\', \'Description\', \'Timeout\', \'Strategy\']" field-separator=";" filename="chat_queues.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedChatQueues" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="6">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.chatQueuesByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="chatQueueByPage in chatQueuesByPage | filter: $select.search">\n													<div ng-bind-html="chatQueueByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(queue, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n								<th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th st-sort="strategy">{{ \'APPLICATION_STRATEGY\' | translate }}</th>\n								<th st-sort="timeout">{{ \'APPLICATION_AGENT_TIMEOUT\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="chatQueue in displayedChatQueues" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="chatQueues.checked" checklist-value="chatQueue.id"></td>\n					      <td>{{chatQueue.name}}</td>\n								<td>{{chatQueue.description}}</td>\n								<td>{{chatQueue.strategy | uppercase}}</td>\n								<td>{{chatQueue.timeout}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/chat/queues/view/{{chatQueue.id}}/settings">\n										{{ \'APPLICATION_EDIT\' | translate }}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(chatQueue.name,chatQueue.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedChatQueues.length">\n								<td colspan="6" style="text-align:center;">\n									<i>No chat queues available</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="strategy" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_STRATEGY\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td/>\n								<td/>\n						  </tr>\n					    <tr>\n					      <td colspan="6" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.chatQueuesByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/chat/queue/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n				</div>\n			</div>\n			<div class="portlet-body" style="width: 50%; margin: 0 auto;">\n				<!-- BEGIN FORM-->\n				<form action="index.html" class="form-horizontal form-row-seperated">\n					<div class="form-body text-center">\n						<div class="form-group last">\n							<div class="col-md-9" id="multi-select-team">\n							</div>\n						</div>\n					</div>\n				</form>\n				<!-- END FORM-->\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/chat/queue/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getQueue()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-bubble"></i>\n					<a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-layers"></i>\n					<a href="/chat/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n					<i data-ng-show="queue" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="queue">\n					<a href="#">{{queue.name}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/queue.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{queue.name}}\n					</div>\n					<!-- <div class="profile-usertitle-job">\n						{{user.role}}\n					</div> -->\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.chat.queues.view.settings\')}">\n							<a data-ng-href="/chat/queues/view/{{queue.id}}/settings">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n						<li data-ng-class="{active: $state.is(\'main.chat.queues.view.agents\')}">\n							<a data-ng-href="/chat/queues/view/{{queue.id}}/agents">\n							<i class="icon-users"></i>\n							{{ \'APPLICATION_AGENTS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/chat/queue/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<form name="forms.general" data-ng-submit="forms.general.$valid && updateChatQueue()" novalidate>\n					<!-- START NAME -->\n					<div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n						<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n						<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="queue.name" required/>\n						<span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n							<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n						</span>\n					</div>\n					<!-- END NAME -->\n\n					<!-- START DESCRIPTION -->\n					<div class="form-group">\n						<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n						<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="queue.description"/>\n					</div>\n					<!-- END DESCRIPTION -->\n\n					<!-- START TIMEOUT -->\n					<div class="form-group">\n						<label class="control-label">{{\'APPLICATION_AGENT\' | translate}} {{\'APPLICATION_TIMEOUT\' | translate}}</label>\n						<input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" min="1" data-ng-model="queue.timeout"/>\n					</div>\n					<!-- END TIMEOUT -->\n\n					<!-- START HEADER SHAPE -->\n					<div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n						<label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}</label>\n						<!-- <input colorpicker type="text" name="animationToggle" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" class="form-control" data-ng-model="chatWebsite.animation" required/> -->\n						<ui-select data-ng-model="queue.strategy" name="strategy" theme="bootstrap">\n							<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n							<ui-select-choices repeat="strategy in [\'rrmemory\',\'beepall\'] | filter: $select.search">\n								<div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n							</ui-select-choices>\n						</ui-select>\n					</div>\n					<!-- END HEADER SHAPE -->\n					<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n				</form>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/chat/queue/wizard/wizard.html",'<div class="col-md-12">\n  <!-- BEGIN PAGE HEADER-->\n	<div class="page-bar">\n		<ul class="page-breadcrumb">\n			<li>\n				<i class="icon-rocket"></i>\n				<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-envelope"></i>\n				<a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n        <i class="fa fa-angle-right"></i>\n			</li>\n      <li>\n				<i class="icon-layers"></i>\n				<a href="/chat/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n			</li>\n		</ul>\n	</div>\n  <!-- END PAGE HEADER-->\n\n  <!-- BEGIN PORTLET-->\n  <div class="portlet light bordered">\n  	<div class="portlet-title">\n  		<div class="caption font-green-sharp">\n  			<i class="icon-layers font-green-sharp"></i>\n  			<span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }} WIZARD</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n  		<wizard on-finish="createItem()">\n				<wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.info.$valid)">\n					<form name="forms.general" data-ng-submit="forms.general.$valid && createItem()" novalidate>\n						<!-- START NAME -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n							<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n							<span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END NAME -->\n\n						<!-- START DESCRIPTION -->\n						<div class="form-group">\n							<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n							<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n						</div>\n						<!-- END DESCRIPTION -->\n\n						<!-- START TIMEOUT -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.timeout.$touched || forms.general.$submitted) && forms.general.timeout.$invalid}">\n							<label class="control-label">{{\'APPLICATION_AGENT_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<input type="number" name="timeout" placeholder="Timeout" class="form-control" data-ng-model="item.timeout" required/>\n              <span data-ng-show="(forms.general.timeout.$touched || forms.general.$submitted) && forms.general.timeout.$invalid && forms.general.timeout.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n            </div>\n						<!-- END TIMEOUT -->\n\n						<!-- START HEADER SHAPE -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n							<label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<ui-select data-ng-model="item.strategy" name="strategy" theme="bootstrap" required>\n								<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n								<ui-select-choices repeat="strategy in [\'rrmemory\',\'beepall\'] | filter: $select.search">\n									<div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n								</ui-select-choices>\n							</ui-select>\n              <span data-ng-show="(forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid && forms.general.strategy.$error.required" class="help-block help-block-error">\n                <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n              </span>\n						</div>\n						<!-- END HEADER SHAPE -->\n						<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CREATE\' | translate}}"/>\n					</form>\n			  </wz-step>\n\n				<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n					<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n					<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n				</wz-step>\n  		</wizard>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),a.put("app/chat/realtime/view/agent/agent.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n	<div class="col-md-12">\n		<!-- START TABLE -->\n		<table st-table="displayedAgents" st-safe-src="agents" class="table table-striped table-bordered table-hover">\n			<div class="table-responsive">\n			  <thead>\n					<tr>\n						<th colspan="12">\n							<div class="row">\n								<div class="col-md-6">\n									<ui-select class="input-xsmall" ng-model="conf.agentsByPage" theme="bootstrap" ng-disabled="disabled">\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n										<ui-select-choices repeat="agentByPage in agentsByPage | filter: $select.search">\n											<div ng-bind-html="agentByPage.name | highlight: $select.search"></div>\n										</ui-select-choices>\n									</ui-select>\n								</div>\n								<div class="col-md-6">\n									<div class="input-group input-medium pull-right">\n										<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n										<span class="input-group-addon">\n											<i class="fa fa-search"></i>\n										</span>\n									</div>\n								</div>\n							</div>\n						</th>\n					</tr>\n				  <tr>\n						<th></th>\n						<th st-sort="uniqueid" reverse class="input-small">{{ \'APPLICATION_UNIQUEID\' | translate }}</th>\n				    <th st-sort="queue" class="input-medium">{{ \'APPLICATION_QUEUE\' | translate }}</th>\n				    <th st-sort="membername" class="input-medium">{{ \'APPLICATION_AGENT\' | translate }}</th>\n						<th st-sort="from" class="input-small">{{ \'APPLICATION_VISITOR\' | translate }}</th>\n						<th st-sort="accountname" class="input-small">{{ \'APPLICATION_WEB_SITE\' | translate }}</th>\n						<th st-sort="agentcalledAt" st-sort-default="reverse">{{ \'APPLICATION_CALLED_AT\' | translate }}</th>\n						<th st-sort="agentconnectAt">{{ \'APPLICATION_CONNECTED_AT\' | translate }}</th>\n						<th st-sort="agentringnoanswerAt">{{ \'APPLICATION_UNASWER_AT\' | translate }}</th>\n						<th st-sort="reason">{{ \'APPLICATION_REASON\' | translate }}</th>\n				  </tr>\n			  </thead>\n			  <tbody>\n			    <tr data-ng-repeat="agent in displayedAgents">\n						<td>\n							<span>\n								<i data-ng-class="{\'icon-user font-yellow\': agent.lastevent === \'called\',\n								\'icon-user-following font-green\': agent.lastevent === \'agent\',\n								\'icon-user-unfollow font-red\': agent.lastevent === \'timeout\',\n								\'icon-user-unfollow font-blue\': agent.lastevent === \'answered_elsewhere\'}"></i>\n							</span>\n						</td>\n						<td>{{agent.uniqueid}}</td>\n						<td>{{agent.chatqueuename}}</td>\n						<td>{{agent.fullname}}</td>\n						<td>{{agent.visitorname}} {{agent.visitoremail}}</td>\n						<td>{{agent.websitename}}</td>\n						<td>\n							<time is="relative-time" datetime="{{agent.agentcalledAt}}">\n								April 1, 2014\n							</time>\n						</td>\n						<td>\n							<time is="relative-time" datetime="{{agent.agentconnectedAt}}" data-ng-show="agent.agentconnectedAt">\n								April 1, 2014\n							</time>\n						</td>\n						<td>\n							<time is="relative-time" datetime="{{agent.agentringnoanswerAt}}" data-ng-show="agent.agentringnoanswerAt">\n								April 1, 2014\n							</time>\n						</td>\n						<td>\n							{{agent.reason | uppercase}}\n						</td>\n			    </tr>\n					<tr data-ng-hide="displayedAgents.length">\n						<td colspan="11" style="text-align:center;">\n							<i>No agents available</i>\n						</td>\n					</tr>\n			  </tbody>\n			  <tfoot>\n					<tr>\n						<td/>\n						<td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="uniqueid" data-ng-model="filters.uniqueid" placeholder="{{ \'APPLICATION_UNIQUEID\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="queue" placeholder="{{ \'APPLICATION_QUEUE\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="membername" placeholder="{{ \'APPLICATION_AGENT\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="from" placeholder="{{ \'APPLICATION_VISITOR\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n						<td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="accountname" placeholder="{{ \'APPLICATION_WEB_SITE\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n						<td colspan="7"></td>\n				  </tr>\n			    <tr>\n			      <td colspan="12" class="text-center">\n							<div class="pagination" st-pagination st-items-by-page="conf.agentsByPage.value" st-displayed-pages="7"></div>\n			      </td>\n			    </tr>\n			  </tfoot>\n			</div>\n		</table>\n		<!-- END TABLE -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/chat/realtime/view/session/session.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initChats()">\n	<div class="col-md-12">\n		<!-- START TABLE -->\n		<table st-table="displayedChats" st-safe-src="sessions" class="table table-striped table-bordered table-hover">\n			<div class="table-responsive">\n			  <thead>\n					<tr>\n						<th colspan="12">\n							<div class="row">\n								<div class="col-md-6">\n									<ui-select class="input-xsmall" ng-model="conf.sessionsByPage" theme="bootstrap" ng-disabled="disabled">\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n										<ui-select-choices repeat="sessionByPage in sessionsByPage | filter: $select.search">\n											<div ng-bind-html="sessionByPage.name | highlight: $select.search"></div>\n										</ui-select-choices>\n									</ui-select>\n								</div>\n								<div class="col-md-6">\n									<div class="input-group input-medium pull-right">\n										<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n										<span class="input-group-addon">\n											<i class="fa fa-search"></i>\n										</span>\n									</div>\n								</div>\n							</div>\n						</th>\n					</tr>\n				  <tr>\n						<th></th>\n						<th st-sort="uniqueid" reverse class="input-small">{{ \'APPLICATION_UNIQUEID\' | translate }}</th>\n				    <th st-sort="queue" class="input-medium">{{ \'APPLICATION_QUEUE\' | translate }}</th>\n				    <th st-sort="membername" class="input-medium">{{ \'APPLICATION_AGENT\' | translate }}</th>\n						<th st-sort="visitorname" class="input-medium">{{ \'APPLICATION_VISITOR\' | translate }}</th>\n						<th st-sort="websitename" class="input-small">{{ \'APPLICATION_WEB_SITE\' | translate }}</th>\n						<th st-sort="sessioncalledAt" st-sort-default="reverse">{{ \'APPLICATION_JOIN_AT\' | translate }}</th>\n						<th st-sort="sessionconnectAt">{{ \'APPLICATION_LEAVE_AT\' | translate }}</th>\n						<th st-sort="sessionringnoanswerAt">{{ \'APPLICATION_UNMANAGED_AT\' | translate }}</th>\n				  </tr>\n			  </thead>\n			  <tbody>\n			    <tr data-ng-repeat="session in displayedChats">\n						<td>\n							<span>\n								<i data-ng-class="{\'icon-user font-yellow\': session.mailjoinAt && !session.mailleaveAt,\n								\'icon-user-following font-green\': session.fullname,\n								\'icon-user-unfollow font-red\': session.mailunmanagedAt}"></i>\n							</span>\n						</td>\n						<td>{{session.uniqueid}}</td>\n						<td>{{session.chatqueuename}}</td>\n						<td>{{session.fullname}}</td>\n						<td>{{session.visitorname + \' [\' + session.visitoremail + \']\'}}</td>\n						<td>{{session.websitename}}</td>\n						<td>\n							<time is="relative-time" datetime="{{session.chatjoinAt}}">\n								April 1, 2014\n							</time>\n						</td>\n						<td>\n							<time is="relative-time" datetime="{{session.chatleaveAt}}" data-ng-show="session.chatleaveAt">\n								April 1, 2014\n							</time>\n						</td>\n						<td>\n							<time is="relative-time" datetime="{{session.chatunmanagedAt}}" data-ng-show="session.chatunmanagedAt">\n								April 1, 2014\n							</time>\n						</td>\n			    </tr>\n					<tr data-ng-hide="displayedChats.length">\n						<td colspan="11" style="text-align:center;">\n							<i>No sessions available</i>\n						</td>\n					</tr>\n			  </tbody>\n			  <tfoot>\n					<tr>\n						<td/>\n						<td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="uniqueid" data-ng-model="filters.uniqueid" placeholder="{{ \'APPLICATION_UNIQUEID\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="queue" placeholder="{{ \'APPLICATION_QUEUE\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="membername" placeholder="{{ \'APPLICATION_AGENT\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="visitorname" placeholder="{{ \'APPLICATION_VISITOR\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n						<td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="websitename" placeholder="{{ \'APPLICATION_WEB_SITE\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n						<td colspan="7"></td>\n				  </tr>\n			    <tr>\n			      <td colspan="12" class="text-center">\n							<div class="pagination" st-pagination st-items-by-page="conf.sessionsByPage.value" st-displayed-pages="7"></div>\n			      </td>\n			    </tr>\n			  </tfoot>\n			</div>\n		</table>\n		<!-- END TABLE -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/chat/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-energy"></i>\n					<a href="/chat/realtime/list">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<div>\n		    <nav class="navbar navbar-default" role="navigation">\n		        <div class="navbar-header">\n		            <button type="button" class="navbar-toggle" ng-init="navCollapsed = true" ng-click="navCollapsed = !navCollapsed">\n		                <span class="sr-only">Toggle navigation</span>\n		                <span class="icon-bar"></span>\n		                <span class="icon-bar"></span>\n		                <span class="icon-bar"></span>\n		            </button>\n		            <!-- <a class="navbar-brand" ui-sref="home">Brand</a> -->\n		        </div>\n\n		        <!-- Collect the nav links, forms, and other content for toggling -->\n		        <div class="collapse navbar-collapse" ng-class="!navCollapsed && \'in\'">\n		            <ul class="nav navbar-nav">\n		                <li dropdown>\n		                    <a href="#" dropdown-toggle>\n		                        {{ \'APPLICATION_AGENTS\' | translate }}\n		                        <b class=\'caret\'></b>\n		                    </a>\n		                    <tree tree=\'agents\'></tree>\n		                </li>\n										<li dropdown>\n		                    <a href="#" dropdown-toggle>\n		                        {{ \'APPLICATION_SESSIONS\' | translate }}\n		                        <b class=\'caret\'></b>\n		                    </a>\n		                    <tree tree=\'sessions\'></tree>\n		                </li>\n		            </ul>\n		            <!-- <ul class="nav navbar-nav">\n		                <li dropdown>\n		                    <a href="#" dropdown-toggle>\n		                        {{ \'APPLICATION_QUEUES\' | translate }}\n		                        <b class=\'caret\'></b>\n		                    </a>\n		                    <tree tree=\'queues\'></tree>\n		                </li>\n		            </ul> -->\n		        </div>\n		        <!-- /.navbar-collapse -->\n		    </nav>\n		</div>\n		<div ui-view></div>\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/chat/statistic/statistic.conversation.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="col-md-12">\n	<!-- BEGIN Portlet PORTLET-->\n	<div class="portlet light bordered">\n		<div class="portlet-title">\n			<div class="caption font-green-sharp">\n				<i class="icon-notebook font-green-sharp"></i>\n				<span class="caption-subject">{{ \'APPLICATION_CONVERSATIONS\' | translate }}</a> </span>\n			</div>\n			<div class="actions">\n				<a class="btn btn-icon-only btn-default" href="#" ng-csv="displayedChatRooms" filename="rooms.csv">\n				<i class="icon-cloud-download"></i></a>\n				<a class="btn btn-icon-only btn-default fullscreen" href="#"></a>\n			</div>\n		</div>\n		<div class="portlet-body">\n			<!-- START TABLE -->\n			<table st-table="displayedChatRooms" st-safe-src="chatRooms" class="table table-bordered table-hover">\n				<div class="table-responsive">\n					<thead>\n						<tr>\n							<th colspan="9">\n								<div class="row">\n									<div class="col-md-6">\n										<select class="form-control input-small select2me" data-ng-model="conf.chatRoomsByPage">\n											<option value="10">10</option>\n											<option value="25">25</option>\n											<option value="50">50</option>\n											<option value="{{chatRooms.length}}">{{ \'APPLICATION_ALL\' | translate }}</option>\n										</select>\n									</div>\n									<div class="col-md-6">\n										<div class="input-group input-medium pull-right">\n											<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search"/>\n											<span class="input-group-addon">\n												<i class="fa fa-search"></i>\n											</span>\n										</div>\n									</div>\n								</div>\n							</th>\n						</tr>\n						<tr>\n							<th st-sort="type">{{ \'APPLICATION_TYPE\' | translate }}</th>\n							<th st-sort="users">{{ \'APPLICATION_USERS\' | translate }}</th>\n							<th st-sort="visitor">{{ \'APPLICATION_VISITOR\' | translate }}</th>\n							<th st-sort="status">{{ \'APPLICATION_STATUS\' | translate }}</th>\n							<th st-sort="createdAt">{{ \'APPLICATION_TIME\' | translate }}</th>\n						</tr>\n					</thead>\n					<tbody>\n						<tr data-ng-repeat="chatRoom in displayedChatRooms" data-ng-click="$location.path(\'/chat/statistics/conversation/\' + chatRoom.id)">\n							<td style="text-align: center;">{{chatRoom.type | uppercase}}</td>\n							<td style="text-align: center;">{{getUsersFullname(chatRoom.Users)}}</td>\n							<td style="text-align: center;">{{chatRoom.ChatVisitor.email}}</td>\n							<td style="text-align: center;">\n								<span class="label label-sm label-success" data-ng-class="{\'label-success\': chatRoom.status == \'close\', \'label-warning\': chatRoom.status == \'open\'}">\n									{{chatRoom.status | capitalize}}\n								</span>\n							</td>\n							<td style="text-align: center;">\n								<time is="relative-time" datetime="{{chatRoom.createdAt}}">\n									April 1, 2014\n								</time>\n							</td>\n						</tr>\n					</tbody>\n					<tfoot>\n						<tr>\n							<td colspan="9" class="text-center">\n								<div st-pagination class="pagination" st-items-by-page="conf.chatRoomsByPage" st-displayed-pages="7"></div>\n							</td>\n						</tr>\n					</tfoot>\n			</div>\n			</table>\n			<!-- END TABLE -->\n		</div>\n	</div>\n	<!-- END Portlet PORTLET-->\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/chat/statistic/statistic.conversation.view.html",'<!-- BEGIN PAGE CONTENT-->\n<div data-ng-init="initRoomView()">\n	<div class="col-md-6">\n		<!-- BEGIN PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-book-open font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_TRANSCRIPT\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="chatRoom.ChatMessages" filename="chatMessages.csv">\n					<i class="icon-cloud-download"></i></a>\n					<a class="btn btn-icon-only btn-default fullscreen" href="#"></a>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<div class="scroller" style="height: 352px;" data-always-visible="1" data-rail-visible1="1">\n					<ul class="chats">\n						<li data-ng-class="{\'out\': chatMessage.visitorId, \'in\': chatMessage.userId}" data-ng-repeat="chatMessage in chatRoom.ChatMessages | orderBy:\'-createdAt\'">\n							<img class="avatar" data-ng-src="api/users/{{chatMessage.userId ? chatMessage.userId : \'avatar\'}}/avatar"/>\n							<div class="message">\n								<span class="arrow">\n								</span>\n								<a href="#" class="name">\n								{{chatMessage.fullname}} </a>\n								<span class="datetime">\n									<time is="relative-time" datetime="{{chatMessage.createdAt}}">\n										April 1, 2014\n									</time>\n								</span>\n								<span class="body">\n									{{chatMessage.body}}\n								</span>\n							</div>\n						</li>\n					</ul>\n				</div>\n			</div>\n		<!-- END PORTLET-->\n		</div>\n	</div>\n	<div class="col-md-6">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-user font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_VISITOR\' | translate }}:</a> </span>\n					<span class="caption-helper">{{chatRoom.ChatVisitor.fullname}}</span>\n				</div>\n				<div class="actions">\n					<a class="btn btn-icon-only btn-default fullscreen" href="#"></a>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<div class="row static-info" data-ng-show="chatRoom.ChatVisitor.fullname">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_FULLNAME\' | translate}}\n					</div>\n					<div class="col-md-8 value">\n						{{chatRoom.ChatVisitor.fullname}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatRoom.ChatVisitor.email">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_EMAIL\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatRoom.ChatVisitor.email}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatRoom.ChatVisitor.remote_address">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_REMOTE_ADDRESS\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatRoom.ChatVisitor.remote_address}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatRoom.ChatVisitor.referer">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_REFERER\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatRoom.ChatVisitor.referer}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatRoom.ChatVisitor.browser">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_BROWSER\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatRoom.ChatVisitor.browser}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatRoom.ChatVisitor.engine">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_ENGINE\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatRoom.ChatVisitor.engine}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatRoom.ChatVisitor.os">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_OS\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatRoom.ChatVisitor.os}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatRoom.ChatVisitor.device">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_DEVICE\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatRoom.ChatVisitor.device}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatRoom.ChatVisitor.country">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_COUNTRY\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatRoom.ChatVisitor.country}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatRoom.ChatVisitor.region">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_REGION\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatRoom.ChatVisitor.region}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatRoom.ChatVisitor.city">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_CITY\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatRoom.ChatVisitor.city}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatRoom.ChatVisitor.latitude">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_LATITUDE\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatRoom.ChatVisitor.latitude}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatRoom.ChatVisitor.longitude">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_LONGITUDE\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatRoom.ChatVisitor.longitude}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatRoom.ChatVisitor.createdAt">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_ARRIVAL_TIME\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						<time is="relative-time" datetime="{{chatRoom.ChatVisitor.createdAt}}">\n							April 1, 2014\n						</time>\n					</div>\n				</div>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered" data-ng-repeat="user in chatRoom.Users">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-earphones-alt font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_AGENT\' | translate }}:</a> </span>\n					<span class="caption-helper">{{user.fullname}}</span>\n				</div>\n				<div class="actions">\n					<a class="btn btn-icon-only btn-default fullscreen" href="#"></a>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<div class="row static-info">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_FULLNAME\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{user.fullname}}\n					</div>\n				</div>\n				<div class="row static-info">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_USERNAME\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{user.name}}\n					</div>\n				</div>\n				<div class="row static-info">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_ROLE\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{user.role | uppercase}}\n					</div>\n				</div>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/chat/statistic/statistic.enquiry.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="col-md-12">\n	<!-- BEGIN Portlet PORTLET-->\n	<div class="portlet light bordered">\n		<div class="portlet-title">\n			<div class="caption font-green-sharp">\n				<i class="icon-question font-green-sharp"></i>\n				<span class="caption-subject">{{ \'APPLICATION_ENQUIRIES\' | translate }}</a> </span>\n			</div>\n			<div class="actions">\n				<a class="btn btn-icon-only btn-default" href="#" ng-csv="displayedChatEnquiries" filename="enquiries.csv">\n				<i class="icon-cloud-download"></i></a>\n				<a class="btn btn-icon-only btn-default fullscreen" href="#"></a>\n			</div>\n		</div>\n		<div class="portlet-body">\n			<!-- START TABLE -->\n			<table st-table="displayedChatEnquiries" st-safe-src="chatEnquiries" class="table table-bordered table-hover">\n				<div class="table-responsive">\n					<thead>\n						<tr>\n							<th colspan="9">\n								<div class="row">\n									<div class="col-md-6">\n										<select class="form-control input-small select2me" data-ng-model="conf.chatEnquiriesByPage">\n											<option value="10">10</option>\n											<option value="25">25</option>\n											<option value="50">50</option>\n											<option value="{{chatEnquiries.length}}">{{ \'APPLICATION_ALL\' | translate }}</option>\n										</select>\n									</div>\n									<div class="col-md-6">\n										<div class="input-group input-medium pull-right">\n											<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search"/>\n											<span class="input-group-addon">\n												<i class="fa fa-search"></i>\n											</span>\n										</div>\n									</div>\n								</div>\n							</th>\n						</tr>\n						<tr>\n							<th st-sort="type">{{ \'APPLICATION_USERNAME\' | translate }}</th>\n							<th st-sort="users">{{ \'APPLICATION_EMAIL\' | translate }}</th>\n							<th st-sort="createdAt">{{ \'APPLICATION_TIME\' | translate }}</th>\n						</tr>\n					</thead>\n					<tbody>\n						<tr data-ng-repeat="chatEnquiry in displayedChatEnquiries" data-ng-click="$location.path(\'/chat/statistics/enquiry/\' + chatEnquiry.id)">\n							<td style="text-align: center;">{{chatEnquiry.username}}</td>\n							<td style="text-align: center;">{{chatEnquiry.email}}</td>\n							<td style="text-align: center;">\n								<time is="relative-time" datetime="{{chatEnquiry.createdAt}}">\n									April 1, 2014\n								</time>\n							</td>\n						</tr>\n					</tbody>\n					<tfoot>\n						<tr>\n							<td colspan="9" class="text-center">\n								<div st-pagination class="pagination" st-items-by-page="conf.chatEnquiriesByPage" st-displayed-pages="7"></div>\n							</td>\n						</tr>\n					</tfoot>\n			</div>\n			</table>\n			<!-- END TABLE -->\n		</div>\n	</div>\n	<!-- END Portlet PORTLET-->\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/chat/statistic/statistic.enquiry.view.html",'<!-- BEGIN PAGE CONTENT-->\n<div data-ng-init="initEnquiryView()">\n	<div class="col-md-6">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-book-open font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_TEXT\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="chatEnquiry" filename="chatEnquery.csv">\n					<i class="icon-cloud-download"></i></a>\n					<a class="btn btn-icon-only btn-default fullscreen" href="#"></a>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- BEGIN PAGE CONTENT-->\n				<div class="note note-warning">\n					<h4 class="block">{{chatEnquiry.ChatVisitor.fullname}} -\n						<time is="relative-time" datetime="{{chatEnquiry.createdAt}}">\n							April 1, 2014\n						</time>\n					</h4>\n					<p>\n						 {{chatEnquiry.text}}\n					</p>\n				</div>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n	<div class="col-md-6">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-user font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_VISITOR\' | translate }}:</a> </span>\n					<span class="caption-helper">{{chatEnquiry.ChatVisitor.fullname}}</span>\n				</div>\n				<div class="actions">\n					<a class="btn btn-icon-only btn-default fullscreen" href="#"></a>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<div class="row static-info" data-ng-show="chatEnquiry.ChatVisitor.fullname">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_FULLNAME\' | translate}}\n					</div>\n					<div class="col-md-8 value">\n						{{chatEnquiry.ChatVisitor.fullname}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatEnquiry.ChatVisitor.email">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_EMAIL\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatEnquiry.ChatVisitor.email}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatEnquiry.ChatVisitor.remote_address">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_REMOTE_ADDRESS\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatEnquiry.ChatVisitor.remote_address}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatEnquiry.ChatVisitor.referer">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_REFERER\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatEnquiry.ChatVisitor.referer}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatEnquiry.ChatVisitor.browser">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_BROWSER\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatEnquiry.ChatVisitor.browser}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatEnquiry.ChatVisitor.engine">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_ENGINE\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatEnquiry.ChatVisitor.engine}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatEnquiry.ChatVisitor.os">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_OS\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatEnquiry.ChatVisitor.os}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatEnquiry.ChatVisitor.device">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_DEVICE\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatEnquiry.ChatVisitor.device}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatEnquiry.ChatVisitor.country">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_COUNTRY\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatEnquiry.ChatVisitor.country}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatEnquiry.ChatVisitor.region">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_REGION\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatEnquiry.ChatVisitor.region}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatEnquiry.ChatVisitor.city">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_CITY\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatEnquiry.ChatVisitor.city}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatEnquiry.ChatVisitor.latitude">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_LATITUDE\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatEnquiry.ChatVisitor.latitude}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatEnquiry.ChatVisitor.longitude">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_LONGITUDE\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatEnquiry.ChatVisitor.longitude}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatEnquiry.ChatVisitor.createdAt">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_ARRIVAL_TIME\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						<time is="relative-time" datetime="{{chatEnquiry.ChatVisitor.createdAt}}">\n							April 1, 2014\n						</time>\n					</div>\n				</div>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/chat/statistic/statistic.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initList()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-bubble"></i>\n					<a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-eyeglass"></i>\n					<a href="/chat/statistics">{{ \'APPLICATION_STATISTICS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img src="assets/images/media/statistics.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<!-- <div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{chatWebsite.name}}\n					</div>\n					<div class="profile-usertitle-job">\n						{{chatWebsite.address}}\n					</div>\n				</div> -->\n				<!-- END SIDEBAR USER TITLE -->\n				<!-- SIDEBAR BUTTONS -->\n				<!-- <div class="profile-userbuttons">\n					<button type="button" class="btn btn-circle green-haze btn-sm">Follow</button>\n					<button type="button" class="btn btn-circle btn-danger btn-sm">Message</button>\n				</div> -->\n				<!-- END SIDEBAR BUTTONS -->\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.chat.statistics.summary\')}">\n							<a ng-href="/chat/statistics/summary">\n							<i class="icon-list"></i>\n							{{ \'APPLICATION_SUMMARY\' | translate }} </a>\n						</li>\n						<li data-ng-class="{active: $state.is(\'main.chat.statistics.enquiry\') || $state.is(\'main.chat.statistics.enquiries\')}">\n							<a ng-href="/chat/statistics/enquiries">\n							<i class="icon-question"></i>\n							{{ \'APPLICATION_ENQUIRIES\' | translate }} </a>\n						</li>\n						<li data-ng-class="{active: $state.is(\'main.chat.statistics.conversation\') || $state.is(\'main.chat.statistics.conversations\')}">\n							<a ng-href="/chat/statistics/conversations">\n							<i class="icon-notebook"></i>\n							{{ \'APPLICATION_CONVERSATIONS\' | translate }} </a>\n						</li>\n						<li data-ng-class="{active: $state.is(\'main.chat.statistics.visitor\') || $state.is(\'main.chat.statistics.visitors\')}">\n							<a ng-href="/chat/statistics/visitors">\n							<i class="icon-users"></i>\n							{{ \'APPLICATION_VISITORS\' | translate }} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/chat/statistic/statistic.summary.html",'<div class="col-md-12">\n	<!-- BEGIN Portlet PORTLET-->\n	<div class="portlet light bordered" data-ng-show="online">\n		<div class="portlet-title">\n			<div class="caption font-green-sharp">\n				<i class="icon-notebook font-green-sharp"></i>\n				<span class="caption-subject">{{ \'APPLICATION_LOCATIONS\' | translate }}</a> </span>\n			</div>\n		</div>\n		<div class="portlet-body">\n			<map center="0, 0" zoom="2">\n				<marker data-ng-show="chatVisitor.latitude && chatVisitor.longitude" data-ng-repeat="chatVisitor in chatVisitors" position="{{chatVisitor.latitude}}, {{chatVisitor.longitude}}" title="{{chatVisitor.fullname}}"></marker>\n			</map>\n		</div>\n	</div>\n	<!-- END Portlet PORTLET-->\n\n\n	<!-- BEGIN Portlet PORTLET-->\n	<div class="portlet light bordered">\n		<div class="portlet-title">\n			<div class="caption font-green-sharp">\n				<i class="icon-notebook font-green-sharp"></i>\n				<span class="caption-subject">{{ \'APPLICATION_CONVERSATIONS\' | translate }}</a> </span>\n			</div>\n		</div>\n		<div class="portlet-body">\n			<div class="row">\n				<div class="col-md-6">\n					<div class="portlet sale-summary">\n						<div class="portlet-body">\n							<ul class="list-unstyled">\n								<li>\n									<span class="sale-info">\n									{{ \'APPLICATION_OPENED\' | translate }} <i class="fa fa-img-up"></i>\n									</span>\n									<span class="sale-num">\n									{{ (chatRooms | filter:{ status:\'open\' }).length }} </span>\n								</li>\n								<li>\n									<span class="sale-info">\n									{{ \'APPLICATION_CLOSED\' | translate }} <i class="fa fa-img-down"></i>\n									</span>\n									<span class="sale-num">\n									{{ (chatRooms | filter:{ status:\'close\' }).length }} </span>\n								</li>\n							</ul>\n						</div>\n					</div>\n				</div>\n				<div class="col-md-6">\n					<canvas class="chart chart-pie" data="[(chatRooms | filter:{ status:\'open\' }).length, (chatRooms | filter:{ status:\'close\' }).length]" labels="[$translate.instant(\'APPLICATION_OPENED\'), $translate.instant(\'APPLICATION_CLOSED\')]" legend="true"></canvas>\n				</div>\n			</div>\n		</div>\n	</div>\n	<!-- END Portlet PORTLET-->\n\n	<!-- BEGIN Portlet PORTLET-->\n	<div class="portlet light bordered">\n		<div class="portlet-title">\n			<div class="caption font-green-sharp">\n				<i class="icon-users font-green-sharp"></i>\n				<span class="caption-subject">{{ \'APPLICATION_VISITORS\' | translate }}</a> </span>\n			</div>\n		</div>\n		<div class="portlet-body">\n			<div class="row">\n				<div class="col-md-6">\n					<div class="portlet sale-summary">\n						<div class="portlet-body">\n							<ul class="list-unstyled">\n								<li>\n									<span class="sale-info">\n									{{ \'APPLICATION_PENDING\' | translate }} <i class="fa fa-img-up"></i>\n									</span>\n									<span class="sale-num">\n									{{ (chatVisitors | filter:{ status:\'pending\' }).length }} </span>\n								</li>\n								<li>\n									<span class="sale-info">\n									{{ \'APPLICATION_SERVED\' | translate }} <i class="fa fa-img-down"></i>\n									</span>\n									<span class="sale-num">\n									{{ (chatVisitors | filter:{ status:\'served\' }:true).length }} </span>\n								</li>\n								<li>\n									<span class="sale-info">\n									{{ \'APPLICATION_UNSERVED\' | translate }} </span>\n									<span class="sale-num">\n									{{ (chatVisitors | filter:{ status:\'unserved\' }).length }} </span>\n								</li>\n							</ul>\n						</div>\n					</div>\n				</div>\n				<div class="col-md-6">\n					<canvas class="chart chart-pie" data="[(chatVisitors | filter:{ status:\'pending\' }).length, (chatVisitors | filter:{ status:\'served\' }:true).length, (chatVisitors | filter:{ status:\'unserved\' }).length]" labels="[$translate.instant(\'APPLICATION_PENDING\'), $translate.instant(\'APPLICATION_SERVED\'), $translate.instant(\'APPLICATION_UNSERVED\')]" legend="true"></canvas>\n				</div>\n			</div>\n		</div>\n	</div>\n	<!-- END Portlet PORTLET-->\n\n	<!-- BEGIN Portlet PORTLET-->\n	<div class="portlet light bordered">\n		<div class="portlet-title">\n			<div class="caption font-green-sharp">\n				<i class="icon-question font-green-sharp"></i>\n				<span class="caption-subject">{{ \'APPLICATION_ENQUIRIES\' | translate }}</a> </span>\n			</div>\n		</div>\n		<div class="portlet-body">\n			<div class="row">\n				<div class="col-md-6">\n					<div class="portlet sale-summary">\n						<div class="portlet-body">\n							<ul class="list-unstyled">\n								<li>\n									<span class="sale-info">\n									{{ \'APPLICATION_READ\' | translate }}<i class="fa fa-img-up"></i>\n									</span>\n									<span class="sale-num">\n									{{(chatEnquiries | filter:{ read:true }).length}} </span>\n								</li>\n								<li>\n									<span class="sale-info">\n									{{ \'APPLICATION_UNREAD\' | translate }}<i class="fa fa-img-down"></i>\n									</span>\n									<span class="sale-num">\n									{{(chatEnquiries | filter:{ read:false }).length}} </span>\n								</li>\n							</ul>\n						</div>\n					</div>\n				</div>\n				<div class="col-md-6">\n					<canvas class="chart chart-pie" data="[(chatEnquiries | filter:{ read:true }).length, (chatEnquiries | filter:{ read:false }).length]" labels="[$translate.instant(\'APPLICATION_READ\'), $translate.instant(\'APPLICATION_UNREAD\')]" legend="true" ng-show="true"></canvas>\n				</div>\n			</div>\n		</div>\n	</div>\n	<!-- END Portlet PORTLET-->\n</div>\n'),a.put("app/chat/statistic/statistic.visitor.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="col-md-12">\n	<!-- BEGIN Portlet PORTLET-->\n	<div class="portlet light bordered">\n		<div class="portlet-title">\n			<div class="caption font-green-sharp">\n				<i class="icon-users font-green-sharp"></i>\n				<span class="caption-subject">{{ \'APPLICATION_VISITORS\' | translate }}</a> </span>\n			</div>\n			<div class="actions">\n				<a class="btn btn-icon-only btn-default" href="#" ng-csv="displayedChatVisitors" filename="visitors.csv">\n				<i class="icon-cloud-download"></i></a>\n				<a class="btn btn-icon-only btn-default fullscreen" href="#"></a>\n			</div>\n		</div>\n		<div class="portlet-body">\n			<!-- START TABLE -->\n			<table st-table="displayedChatVisitors" st-safe-src="chatVisitors" class="table table-bordered table-hover">\n				<div class="table-responsive">\n					<thead>\n						<tr>\n							<th colspan="9">\n								<div class="row">\n									<div class="col-md-6">\n										<select class="form-control input-small select2me" data-ng-model="conf.chatVisitorsByPage">\n											<option value="10">10</option>\n											<option value="25">25</option>\n											<option value="50">50</option>\n											<option value="{{chatVisitors.length}}">{{ \'APPLICATION_ALL\' | translate }}</option>\n										</select>\n									</div>\n									<div class="col-md-6">\n										<div class="input-group input-medium pull-right">\n											<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n											<span class="input-group-addon">\n												<i class="fa fa-search"></i>\n											</span>\n										</div>\n									</div>\n								</div>\n							</th>\n						</tr>\n						<tr>\n							<th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n							<th st-sort="email">{{ \'APPLICATION_EMAIL\' | translate }}</th>\n							<th st-sort="remote_address">{{ \'APPLICATION_REMOTE_ADDRESS\' | translate }}</th>\n							<th st-sort="referer">{{ \'APPLICATION_ORIGIN\' | translate }}</th>\n							<th st-sort="device">{{ \'APPLICATION_DEVICE\' | translate }}</th>\n							<th st-sort="browser">{{ \'APPLICATION_BROWSER\' | translate }}</th>\n							<th st-sort="visitor_language">{{ \'APPLICATION_LANGUAGES\' | translate }}</th>\n							<th st-sort="status">{{ \'APPLICATION_STATUS\' | translate }}</th>\n							<th st-sort="createdAt">{{ \'APPLICATION_TIME\' | translate }}</th>\n						</tr>\n					</thead>\n					<tbody>\n						<tr data-ng-repeat="chatVisitor in displayedChatVisitors" data-ng-click="$location.path(\'/chat/statistics/visitor/\' + chatVisitor.id)">\n							<td>{{chatVisitor.fullname}}</td>\n							<td>{{chatVisitor.email}}</td>\n							<td>{{chatVisitor.remote_address}}</td>\n							<td>{{chatVisitor.referer}}</td>\n							<td class="centered-td">{{chatVisitor.device ? chatVisitor.device : \'--\'}}</td>\n							<td class="centered-td">\n								<img data-ng-show="chatVisitor.browser.includes(\'Chrome\')" data-ng-src="assets/images/browsers/chrome/chrome_16x16.png" data-title="{{chatVisitor.browser}}" bs-tooltip>\n								<img data-ng-show="chatVisitor.browser.includes(\'Safari\')" data-ng-src="assets/images/browsers/safari/safari_16x16.png">\n								<img data-ng-show="chatVisitor.browser.includes(\'Firefox\')" data-ng-src="assets/images/browsers/firefox/firefox_16x16.png">\n								<img data-ng-show="chatVisitor.browser.includes(\'Explorer\')" data-ng-src="assets/images/browsers/internet-explorer/internet-explorer_16x16.png">\n							</td>\n							<td class="centered-td">\n								<img data-ng-show="chatVisitor.visitor_language.includes(\'IT\') || chatVisitor.visitor_language.includes(\'it\')" data-ng-src="assets/images/flags/it.png">\n								<img data-ng-show="chatVisitor.visitor_language.includes(\'US\') || chatVisitor.visitor_language.includes(\'us\')" data-ng-src="assets/images/flags/us.png">\n								<img data-ng-show="chatVisitor.visitor_language.includes(\'EN\') || chatVisitor.visitor_language.includes(\'en\')" data-ng-src="assets/images/flags/en_EN.png">\n							</td>\n							<td class="centered-td">\n								<span class="label label-sm label-success" data-ng-class="{\'label-warning\': chatVisitor.status == \'pending\', \'label-danger\': chatVisitor.status == \'unserved\'}">\n									{{ $translate.instant(\'APPLICATION_\' + $filter(\'uppercase\')(chatVisitor.status)) }}\n								</span>\n							</td>\n							<td style="text-align: center;">\n								<time is="relative-time" datetime="{{chatVisitor.createdAt}}">\n									April 1, 2014\n								</time>\n							</td>\n						</tr>\n					</tbody>\n					<tfoot>\n						<tr>\n							<td colspan="9" class="text-center">\n								<div st-pagination class="pagination" st-items-by-page="conf.chatVisitorsByPage" st-displayed-pages="7"></div>\n							</td>\n						</tr>\n					</tfoot>\n			</div>\n			</table>\n			<!-- END TABLE -->\n		</div>\n	</div>\n	<!-- END Portlet PORTLET-->\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/chat/statistic/statistic.visitor.view.html",'<!-- BEGIN PAGE CONTENT-->\n<div data-ng-init="initVisitorView()">\n	<div class="col-md-6">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-pin font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_LOCATION\' | translate }}</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- BEGIN PAGE CONTENT-->\n				<map center="{{chatVisitor.latitude}}, {{chatVisitor.longitude}}" zoom="8">\n					<marker position="{{chatVisitor.latitude}}, {{chatVisitor.longitude}}" title="{{chatVisitor.fullname}}"></marker>\n				</map>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n	<div class="col-md-6">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-user font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_VISITOR\' | translate }}:</a> </span>\n					<span class="caption-helper">{{chatVisitor.fullname}}</span>\n				</div>\n				<div class="actions">\n					<a class="btn btn-icon-only btn-default fullscreen" href="#"></a>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<div class="row static-info" data-ng-show="chatVisitor.longitude && chatVisitor.latitude">\n				</div>\n				<div class="row static-info" data-ng-show="chatVisitor.fullname">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_FULLNAME\' | translate}}\n					</div>\n					<div class="col-md-8 value">\n						{{chatVisitor.fullname}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatVisitor.email">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_EMAIL\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatVisitor.email}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatVisitor.remote_address">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_REMOTE_ADDRESS\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatVisitor.remote_address}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatVisitor.referer">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_REFERER\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatVisitor.referer}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatVisitor.browser">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_BROWSER\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatVisitor.browser}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatVisitor.engine">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_ENGINE\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatVisitor.engine}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatVisitor.os">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_OS\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatVisitor.os}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatVisitor.device">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_DEVICE\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatVisitor.device}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatVisitor.country">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_COUNTRY\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatVisitor.country}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatVisitor.region">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_REGION\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatVisitor.region}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatVisitor.city">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_CITY\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatVisitor.city}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatVisitor.latitude">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_LATITUDE\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatVisitor.latitude}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatVisitor.longitude">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_LONGITUDE\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						{{chatVisitor.longitude}}\n					</div>\n				</div>\n				<div class="row static-info" data-ng-show="chatVisitor.createdAt">\n					<div class="col-md-4 name">\n						{{\'APPLICATION_ARRIVAL_TIME\' | translate}}\n					</div>\n					<div class="col-md-4 value">\n						<time is="relative-time" datetime="{{chatVisitor.createdAt}}">\n							April 1, 2014\n						</time>\n					</div>\n				</div>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/chat/timeline/list/list.html",'<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-envelope"></i>\n						<a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-list"></i>\n						<a href="/mail/timeline/list"> Timeline</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initList()">\n	<div class="col-md-12">\n    <h3 class="page-title">\n				Timeline\n			</h3>\n			<!-- END PAGE HEADER-->\n			<!-- BEGIN PAGE CONTENT-->\n			<div class="timeline">\n				<!-- TIMELINE ITEM -->\n				<div class="timeline-item" data-ng-repeat="event in events | orderBy:\'-id\'"  ng-animate=" \'animate\' ">\n					<div class="timeline-badge">\n						<div class="timeline-icon">\n							<i class="icon-envelope font-green-haze"></i>\n						</div>\n					</div>\n					<div class="timeline-body">\n						<div class="timeline-body-arrow"></div>\n						<div class="timeline-body-head">\n							<div class="timeline-body-head-caption">\n								<span class="timeline-body-alerttitle" data-ng-class="{\'font-red\': event.name == \'INCOMING\', \'font-blue\': event.name == \'ATTEMPT\', \'font-green\': event.name == \'TAKEN\'}">{{event.name | uppercase}}</span>\n								<span class="timeline-body-time font-grey-cascade">at {{event.createdAt | date:\'yyyy-MM-dd HH:mm:ss\'}}</span>\n							</div>\n							<div class="timeline-body-head-actions">\n								<div class="btn-group">\n									<a class="btn btn-circle btn-sm dropdown-toggle btn-success" href="/mail/inbox/room/{{event.MailRoomId}}">Go To Mail</a>\n								</div>\n							</div>\n						</div>\n						<div class="timeline-body-content">\n							<span class="font-grey-cascade" data-ng-show="event.User">\n							{{event.MailRoom.subject ? event.MailRoom.subject + \' - \' : \'\'}}<a href="/agents/view/{{event.UserId}}/account">{{event.User.fullname}}</a>\n							</span>\n						</div>\n					</div>\n				</div>\n				<!-- END TIMELINE ITEM -->\n			</div>\n			<!-- END PAGE CONTENT-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/chat/website/list/list.html",'<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-bubble"></i>\n						<a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-globe"></i>\n						<a href="/chat/websites/list">{{ \'APPLICATION_WEB_SITES\' | translate }}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_WEB_SITES\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="chatWebsites.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_WEB_SITE\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<!-- <li>\n								<a href="#" data-ng-click="open()">\n								<i class="icon-user"></i> {{ \'APPLICATION_QUICK\' | translate }} </a>\n							</li> -->\n							<li>\n								<a href="/chat/websites/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n							<!-- <li>\n								<a href="#">\n								<i class="icon-users"></i> {{ \'APPLICATION_BULK\' | translate }} </a>\n							</li> -->\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getChatWebsites([\'name\', \'address\', \'description\', \'remote\'])" csv-header="[\'Name\', \'Address\', \'Description\', \'Remote\']" field-separator=";" filename="chat_websites.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedChatWebsites" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="5">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.chatWebsitesByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="chatWebsiteByPage in chatWebsitesByPage | filter: $select.search">\n													<div ng-bind-html="chatWebsiteByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(agent, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n								<th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n						    <th st-sort="address">{{ \'APPLICATION_WEB_ADDRESS\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="chatWebsite in displayedChatWebsites" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="chatWebsites.checked" checklist-value="chatWebsite.id"></td>\n					      <td>{{chatWebsite.name}}</td>\n								<td>{{chatWebsite.description}}</td>\n					      <td><a ng-href="{{chatWebsite.address}}">{{chatWebsite.address}}</a></td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/chat/websites/view/{{chatWebsite.id}}/snippet/view">\n										{{ \'APPLICATION_PROFILE\' | translate }}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(chatWebsite.name,chatWebsite.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedChatWebsites.length">\n								<td colspan="5" style="text-align:center;">\n									<i>{{\'MESSAGE_NO_AVAILABLE_WEBSITES\' | translate}}</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="address" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_WEB_ADDRESS\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td/>\n						  </tr>\n					    <tr>\n					      <td colspan="5" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.chatWebsitesByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/chat/website/view/action/list/list.html",'<div class="row" data-ng-init="initActons()">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title  tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n				</div>\n				<div class="actions">\n					<div class="btn-group">\n						<a class="btn green-jungle " href="/chat/websites/view/{{chatWebsite.id}}/actions/wizard" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACTION\' | translate }}\n						</a>\n					</div>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table class="table table-striped table-bordered table-hover">\n					  <thead>\n						  <tr>\n						    <th class="input-small" align="center">{{\'APPLICATION_APPLICATION\' | translate}}</th>\n								<th class="input-small" align="center">{{\'APPLICATION_TIMEOUT\' | translate}} [s]</th>\n						    <th align="center">{{ \'APPLICATION_INTERVAL\' | translate }}</th>\n								<th class="input-small">{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody ui-sortable="sortableOptions" data-ng-model="chatApplications">\n					    <tr data-ng-repeat="application in chatApplications">\n								<td align="center">\n									<span>\n										<i data-ng-class="application.User ? \'icon-user\' : \'icon-docs\'"></i>\n									</span>\n								</td>\n								<td align="center">{{application.timeout}}</td>\n								<td align="center">{{application.Interval ? application.Interval.name : application.interval}}</td>\n								<td>\n									<a class="btn default btn-xs blue-stripe" data-ng-href="/chat/websites/view/{{chatWebsite.id}}/actions/view/{{application.id}}">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(application.app, application.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="chatApplications.length">\n								<td colspan="5" style="text-align:center;">\n									<i>No applications available</i>\n								</td>\n							</tr>\n					  </tbody>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/chat/website/view/action/view/view.html",'\n<div class="row" data-ng-init="initAction()">\n	<div class="col-md-12">\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-directions font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }}</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<form name="forms.settings" ng-submit="updateItem()" novalidate>\n					<!-- START APP -->\n					<div class="form-group"  data-ng-class="{\'has-error\': (forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid}">\n						<label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n						<ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n							<ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n							<ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n								<div ng-bind-html="app.name | highlight: $select.search"></div>\n							</ui-select-choices>\n						</ui-select>\n						<span data-ng-show="(forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid && forms.settings.app.$error.required" class="help-block help-block-error">\n							<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n						</span>\n					</div>\n					<!-- END APP -->\n\n					<!-- START HOST -->\n					<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n						<label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n						<input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="0" required/>\n						<span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n							<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n						</span>\n					</div>\n					<!-- END HOST -->\n\n					<div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n						<!-- START QUEUE -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n							<label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<ui-select class="input-medium" data-ng-model="application.ChatQueueId" name="queue" theme="bootstrap" required>\n								<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n								<ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n									<div ng-bind-html="queue.name | highlight: $select.search"></div>\n								</ui-select-choices>\n							</ui-select>\n							<span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END QUEUE -->\n					</div>\n\n					<div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n						<!-- START AGENT -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$invalid}">\n							<label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n								<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n								<ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n									<div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n								</ui-select-choices>\n							</ui-select>\n							<span data-ng-show="(forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END AGENT -->\n					</div>\n\n					<!-- START INTERVAL_TYPE -->\n					<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$invalid}">\n						<label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n						<ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n							<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n							<ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n								{{ intType.name | translate }}\n							</ui-select-choices>\n						</ui-select>\n						<span data-ng-show="(forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$error.required" class="help-block help-block-error">\n							<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n						</span>\n					</div>\n					<!-- END INTERVAL_TYPE -->\n\n					<div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n						<!-- START TIME -->\n						<div class="form-group">\n							<label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n							<div class="input-group input-large">\n								<fieldset class="pull-left" ng-disabled="application.alwaysTime">\n									<uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n								</fieldset>\n								<div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n								<fieldset ng-disabled="application.alwaysTime"><uib-timepicker  name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n								<!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n							</div>\n						</div>\n						<!-- END TIME -->\n\n						<!-- START ALWAYS -->\n						<div class="form-group">\n							<label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n							<div class="input-group input-large">\n								<label class="control-label pointer-cursor">\n									<input\n										bs-switch\n										data-ng-model="application.alwaysTime"\n										type="checkbox"\n										switch-active="{{ isActive }}"\n										switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n										switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n										switch-on-color="{{ onColor }}"\n										switch-off-color="{{ offColor }}"\n										switch-animate="{{ animate }}"\n										switch-size="{{ size }}"\n										switch-label="{{ label }}"\n										switch-icon="{{ icon }}"\n										switch-radio-off="{{ radioOff }}"\n										switch-label-width="{{ labelWidth }}"\n										switch-handle-width="{{ handleWidth }}">\n									<!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n								</label>\n							</div>\n						</div>\n						<!-- END ALWAYS -->\n\n						<!-- START WEEKDAY -->\n						<div class="form-group">\n							<label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n							<div class="input-group input-large">\n								<ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n									<ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n									<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n										{{ weekDay.name | translate}}\n									</ui-select-choices>\n								</ui-select>\n								<span class="input-group-addon">to</span>\n								<ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n									<ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n									<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n										{{ weekDay.name | translate }}\n									</ui-select-choices>\n								</ui-select>\n							</div>\n						</div>\n						<!-- END WEEKDAY -->\n\n						<!-- START MONTHDAY -->\n						<div class="form-group">\n							<label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n							<div class="input-group input-large">\n								<ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n									<ui-select-match>{{$select.selected}}</ui-select-match>\n									<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n										{{monthDay}}\n									</ui-select-choices>\n								</ui-select>\n								<span class="input-group-addon">to</span>\n								<ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n									<ui-select-match>{{$select.selected}}</ui-select-match>\n									<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n										{{monthDay}}\n									</ui-select-choices>\n								</ui-select>\n							</div>\n						</div>\n						<!-- END MONTHDAY -->\n\n						<!-- START MONTH -->\n						<div class="form-group">\n							<label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n							<div class="input-group input-large">\n								<ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n									<ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n									<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n										{{ month.name | translate }}\n									</ui-select-choices>\n								</ui-select>\n								<span class="input-group-addon">to</span>\n								<ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n									<ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n									<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n										{{ month.name | translate }}\n									</ui-select-choices>\n								</ui-select>\n							</div>\n						</div>\n						<!-- END MONTH -->\n					</div>\n\n					<div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n						<!-- START INTERVALS -->\n						<div class="form-group inpu" data-ng-class="{\'has-error\': (forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$invalid}">\n							<label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n								<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n								<ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n									{{ interval.name}}\n								</ui-select-choices>\n							</ui-select>\n							<span data-ng-show="(forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END INTERVALS -->\n\n					</div>\n					<button class="btn green-haze" type="submit">{{\'APPLICATION_UPDATE\' | translate}}</button>\n				</form>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/chat/website/view/action/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n	<div class="col-md-12">\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-directions font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="createItem()">\n					<wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.action.$valid)">\n						<form name="forms.action" novalidate>\n							<!-- START APP -->\n							<div class="form-group"  data-ng-class="{\'has-error\': forms.action.$submitted && forms.action.app.$invalid}">\n								<label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n									<ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n									<ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n										<div ng-bind-html="app.name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span data-ng-show="forms.action.$submitted && forms.action.app.$invalid" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END APP -->\n\n							<!-- START HOST -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n								<label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="0" required/>\n								<span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END HOST -->\n\n							<div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n								<!-- START QUEUE -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$invalid}">\n									<label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="application.ChatQueueId" name="queue" theme="bootstrap" required>\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n										<ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n											<div ng-bind-html="queue.name | highlight: $select.search"></div>\n										</ui-select-choices>\n									</ui-select>\n									<span data-ng-show="(forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END QUEUE -->\n							</div>\n\n							<div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n								<!-- START AGENT -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$invalid}">\n									<label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n										<ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n											<div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n										</ui-select-choices>\n									</ui-select>\n									<span data-ng-show="(forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END AGENT -->\n							</div>\n\n							<!-- START INTERVAL_TYPE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$invalid}">\n								<label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n									<ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n										{{ intType.name | translate }}\n									</ui-select-choices>\n								</ui-select>\n								<span data-ng-show="(forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END INTERVAL_TYPE -->\n\n							<div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n								<!-- START TIME -->\n								<div class="form-group">\n									<label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n									<div class="input-group input-large">\n										<fieldset class="pull-left" ng-disabled="application.alwaysTime">\n											<uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n										</fieldset>\n										<div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n										<fieldset ng-disabled="application.alwaysTime"><uib-timepicker  name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n										<!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n									</div>\n								</div>\n								<!-- END TIME -->\n\n								<!-- START ALWAYS -->\n								<div class="form-group">\n									<label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n									<div class="input-group input-large">\n										<label class="control-label pointer-cursor">\n											<input\n												bs-switch\n												data-ng-model="application.alwaysTime"\n												type="checkbox"\n												switch-active="{{ isActive }}"\n												switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n												switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n												switch-on-color="{{ onColor }}"\n												switch-off-color="{{ offColor }}"\n												switch-animate="{{ animate }}"\n												switch-size="{{ size }}"\n												switch-label="{{ label }}"\n												switch-icon="{{ icon }}"\n												switch-radio-off="{{ radioOff }}"\n												switch-label-width="{{ labelWidth }}"\n												switch-handle-width="{{ handleWidth }}">\n											<!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n										</label>\n									</div>\n								</div>\n								<!-- END ALWAYS -->\n\n								<!-- START WEEKDAY -->\n								<div class="form-group">\n									<label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n									<div class="input-group input-large">\n										<ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n											<ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n											<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n												{{ weekDay.name | translate}}\n											</ui-select-choices>\n										</ui-select>\n										<span class="input-group-addon">to</span>\n										<ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n											<ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n											<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n												{{ weekDay.name | translate }}\n											</ui-select-choices>\n										</ui-select>\n									</div>\n								</div>\n								<!-- END WEEKDAY -->\n\n								<!-- START MONTHDAY -->\n								<div class="form-group">\n									<label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n									<div class="input-group input-large">\n										<ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n											<ui-select-match>{{$select.selected}}</ui-select-match>\n											<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n												{{monthDay}}\n											</ui-select-choices>\n										</ui-select>\n										<span class="input-group-addon">to</span>\n										<ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n											<ui-select-match>{{$select.selected}}</ui-select-match>\n											<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n												{{monthDay}}\n											</ui-select-choices>\n										</ui-select>\n									</div>\n								</div>\n								<!-- END MONTHDAY -->\n\n								<!-- START MONTH -->\n								<div class="form-group">\n									<label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n									<div class="input-group input-large">\n										<ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n											<ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n											<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n												{{ month.name | translate }}\n											</ui-select-choices>\n										</ui-select>\n										<span class="input-group-addon">to</span>\n										<ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n											<ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n											<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n												{{ month.name | translate }}\n											</ui-select-choices>\n										</ui-select>\n									</div>\n								</div>\n								<!-- END MONTH -->\n							</div>\n\n							<div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n								<!-- START INTERVALS -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$invalid}">\n									<label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n										<ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n											{{ interval.name}}\n										</ui-select-choices>\n									</ui-select>\n									<span data-ng-show="(forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END INTERVALS -->\n\n							</div>\n\n							<input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONTINUE\' | translate}}"/>\n						</form>\n					</wz-step>\n					<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n						<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n						<!-- <button class="btn green-haze" type="button" wz-previous><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button> -->\n						<input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n					</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/chat/website/view/snippet/view/view.html",'<div class="row" data-ng-init="getSnippetCode()">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SNIPPET\' | translate}}</span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_EMBEDDING\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_APPEARANCE\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_FORMS\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_4" data-toggle="tab">{{\'APPLICATION_LABELS\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_5" data-toggle="tab">{{\'APPLICATION_SETTINGS\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n			<div class="portlet-body">\n				<div class="row">\n						<div class="col-md-8">\n							<div class="tab-content">\n								<!-- EMBEDDING TAB -->\n								<div class="tab-pane active" id="tab_1_1">\n									<h3>{{\'APPLICATION_EMBED_SNIPPET\' | translate}}</h3>\n									<p>\n										{{\'MESSAGE_EMBED_SNIPPET\' | translate}}\n									</p>\n									<div class="form-body">\n										<div class="form-group">\n											<div class="col-md-12">\n												<textarea name="snippet" rows="13" style="resize:none;cursor:text;" class="form-control" readonly data-ng-model="snippetCode"></textarea>\n											</div>\n										</div>\n									</div>\n								</div>\n								<!-- END EMBEDDING TAB -->\n\n								<!-- APPEARANCE TAB -->\n								<div class="tab-pane" id="tab_1_2">\n									<form name="forms.formAppearance" data-ng-submit="forms.formAppearance.$valid && updateItem()" novalidate>\n\n										<!-- START MAIN COLOR -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.mainColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.host.$invalid}">\n											<label class="control-label">{{\'APPLICATION_MAIN_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n											<input colorpicker type="text" name="mainColor" placeholder="{{\'APPLICATION_MAIN_COLOR\' | translate}}" style="color:{{chatWebsite.color}}" class="form-control" data-ng-model="chatWebsite.color" required/>\n											<span data-ng-show="(forms.formAppearance.mainColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.mainColor.$invalid && forms.formAppearance.mainColor.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END MAIN COLOR -->\n\n										<!-- START FOCUS COLOR -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.focusColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.focusColor.$invalid}">\n											<label class="control-label">{{\'APPLICATION_FOCUS_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n											<input colorpicker type="text" name="focusColor" placeholder="{{\'APPLICATION_FOCUS_COLOR\' | translate}}" style="color:{{chatWebsite.color_focus}}" class="form-control" data-ng-model="chatWebsite.color_focus" required/>\n											<span data-ng-show="(forms.formAppearance.focusColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.focusColor.$invalid && forms.formAppearance.focusColor.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END FOCUS COLOR -->\n\n										<!-- START BUTTON COLOR -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.buttonColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.buttonColor.$invalid}">\n											<label class="control-label">{{\'APPLICATION_BUTTON_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n											<input colorpicker type="text" name="buttonColor" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" style="color:{{chatWebsite.color_button}}" class="form-control" data-ng-model="chatWebsite.color_button" required/>\n											<span data-ng-show="(forms.formAppearance.buttonColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.buttonColor.$invalid && forms.formAppearance.buttonColor.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END BUTTON COLOR -->\n\n										<!-- START HEADER SHAPE -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.headerShape.$touched || forms.formAppearance.$submitted) && forms.formAppearance.headerShape.$invalid}">\n											<label class="control-label">{{\'APPLICATION_ANIMATION\' | translate}}</label>\n											<!-- <input colorpicker type="text" name="animationToggle" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" class="form-control" data-ng-model="chatWebsite.animation" required/> -->\n											<ui-select data-ng-model="chatWebsite.header_shape" name="headerShape" theme="bootstrap">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant(\'APPLICATION_\' + $select.selected.toUpperCase())}}</ui-select-match>\n												<ui-select-choices repeat="headerShape in [\'rounded\',\'squared\'] | filter: $select.search">\n													<div ng-bind-html="$translate.instant(\'APPLICATION_\' + headerShape.toUpperCase()) | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<!-- END HEADER SHAPE -->\n\n										<!-- START ANIMATION TOGGLE -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.animationToggle.$touched || forms.formAppearance.$submitted) && forms.formAppearance.animationToggle.$invalid}">\n											<label class="control-label">{{\'APPLICATION_ANIMATION\' | translate}}</label>\n											<!-- <input colorpicker type="text" name="animationToggle" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" class="form-control" data-ng-model="chatWebsite.animation" required/> -->\n											<ui-select data-ng-model="chatWebsite.animation" name="animationToggle" theme="bootstrap">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected ? \'On\' : \'Off\'}}</ui-select-match>\n												<ui-select-choices repeat="animationToggle in [true, false] | filter: $select.search">\n													<div ng-bind-html="animationToggle ? \'On\' : \'Off\' | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<!-- END ANIMATION TOGGLE -->\n\n\n										<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n									</form>\n								</div>\n								<!-- END APPEARANCE TAB -->\n\n								<!-- FORMS TAB -->\n								<div class="tab-pane" id="tab_1_3">\n									<form name="forms.formFunctionality" data-ng-submit="forms.formFunctionality.$valid && updateItem()" novalidate>\n\n										<!-- START DOWNLOAD TRANSCRIPT -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.formFunctionality.animationToggle.$touched || forms.formFunctionality.$submitted) && forms.formFunctionality.animationToggle.$invalid}">\n											<label class="control-label">{{\'APPLICATION_DOWNLOAD_TRANSCRIPT\' | translate}}</label>\n											<ui-select data-ng-model="chatWebsite.download_transcript" name="downloadTranscript" theme="bootstrap">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected ? \'On\' : \'Off\'}}</ui-select-match>\n												<ui-select-choices repeat="downloadTranscript in [true, false] | filter: $select.search">\n													<div ng-bind-html="downloadTranscript ? \'On\' : \'Off\' | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<!-- END DOWNLOAD TRANSCRIPT -->\n\n										<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n									</form>\n								</div>\n								<!-- END FORMS TAB -->\n\n								<!-- STRINGS TAB -->\n								<div class="tab-pane" id="tab_1_4">\n									<form name="forms.formLabel" data-ng-submit="forms.formLabel.$valid && updateItem()" novalidate>\n\n										<h4 class="block" data-ng-show="statePreview.state == \'online\'">{{\'APPLICATION_ONLINE_STATE\' | translate}}</h4>\n\n										<!-- START HEADER ONLINE -->\n										<div class="form-group" data-ng-show="statePreview.state == \'online\'" data-ng-class="{\'has-error\': (forms.formLabel.headerOnline.$touched || forms.formLabel.$submitted) && forms.formLabel.headerOnline.$invalid}">\n											<label class="control-label">{{\'APPLICATION_HEADER_ONLINE\' | translate}}</label>\n											<input type="text" name="headerOnline" placeholder="{{\'APPLICATION_HEADER_ONLINE\' | translate}}" class="form-control" data-ng-model="chatWebsite.header_online"/>\n										</div>\n										<!-- END HEADER ONLINE -->\n\n										<!-- START ONLINE MESSAGE-->\n										<div class="form-group" data-ng-show="statePreview.state == \'online\'" data-ng-class="{\'has-error\': (forms.formLabel.onlineMessage.$touched || forms.formLabel.$submitted) && forms.formLabel.onlineMessage.$invalid}">\n											<label class="control-label">{{\'APPLICATION_ONLINE_MESSAGE\' | translate}}</label>\n											<input type="text" name="onlineMessage" placeholder="{{\'APPLICATION_ONLINE_MESSAGE\' | translate}}" class="form-control" data-ng-model="chatWebsite.online_message"/>\n										</div>\n										<!-- END HEADER ONLINE -->\n\n										<!-- START USERNAME PLACEHOLDER -->\n										<div class="form-group" data-ng-show="statePreview.state == \'online\' || statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.usernamePlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.usernamePlaceholder.$invalid}">\n											<label class="control-label">{{\'APPLICATION_USERNAME_PLACEHOLDER\' | translate}}</label>\n											<input type="text" name="usernamePlaceholder" placeholder="{{\'APPLICATION_USERNAME_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="chatWebsite.username_placeholder"/>\n										</div>\n										<!-- END USERNAME PLACEHOLDER -->\n\n										<!-- START EMAIL PLACEHOLDER -->\n										<div class="form-group" data-ng-show="statePreview.state == \'online\' || statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.emailPlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.emailPlaceholder.$invalid}">\n											<label class="control-label">{{\'APPLICATION_EMAIL_PLACEHOLDER\' | translate}}</label>\n											<input type="text" name="emailPlaceholder" placeholder="{{\'APPLICATION_EMAIL_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="chatWebsite.email_placeholder"/>\n										</div>\n										<!-- END EMAIL PLACEHOLDER -->\n\n										<!-- START START CHAT BUTTON -->\n										<div class="form-group" data-ng-show="statePreview.state == \'online\'" data-ng-class="{\'has-error\': (forms.formLabel.startChatButton.$touched || forms.formLabel.$submitted) && forms.formLabel.startChatButton.$invalid}">\n											<label class="control-label">{{\'APPLICATION_START_CHAT_BUTTON\' | translate}}</label>\n											<input type="text" name="startChatButton" placeholder="{{\'APPLICATION_START_CHAT_BUTTON\' | translate}}" class="form-control" data-ng-model="chatWebsite.start_chat_button"/>\n										</div>\n										<!-- END START CHAT BUTTON -->\n\n										<h4 class="block" data-ng-show="statePreview.state == \'offline\'">{{\'APPLICATION_OFFLINE_STATE\' | translate}}</h4>\n\n										<!-- START HEADER OFFLINE -->\n										<div class="form-group" data-ng-show="statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.headerOffline.$touched || forms.formLabel.$submitted) && forms.formLabel.headerOnline.$invalid}">\n											<label class="control-label">{{\'APPLICATION_HEADER_OFFLINE\' | translate}}</label>\n											<input type="text" name="headerOffline" placeholder="{{\'APPLICATION_HEADER_OFFLINE\' | translate}}" class="form-control" data-ng-model="chatWebsite.header_offline"/>\n										</div>\n										<!-- END HEADER OFFLINE -->\n\n										<!-- START OFFLINE MESSAGE-->\n										<div class="form-group" data-ng-show="statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.offlineMessage.$touched || forms.formLabel.$submitted) && forms.formLabel.onlineMessage.$invalid}">\n											<label class="control-label">{{\'APPLICATION_OFFLINE_MESSAGE\' | translate}}</label>\n											<input type="text" name="offlineMessage" placeholder="{{\'APPLICATION_OFFLINE_MESSAGE\' | translate}}" class="form-control" data-ng-model="chatWebsite.offline_message"/>\n										</div>\n										<!-- END OFFLINE MESSAGE -->\n\n										<!-- START ENQUIRY MESSAGE PLACEHOLDER-->\n										<div class="form-group" data-ng-show="statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.enquiryMessagePlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.onlineMessage.$invalid}">\n											<label class="control-label">{{\'APPLICATION_ENQUIRY_MESSAGE_PLACEHOLDER\' | translate}}</label>\n											<input type="text" name="enquiryMessagePlaceholder" placeholder="{{\'APPLICATION_ENQUIRY_MESSAGE_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="chatWebsite.enquiry_message_placeholder"/>\n										</div>\n										<!-- END ENQUIRY MESSAGE PLACEHOLDER -->\n\n										<!-- START ENQUIRY BUTTON -->\n										<div class="form-group" data-ng-show="statePreview.state == \'offline\'" data-ng-class="{\'has-error\': (forms.formLabel.enquiryButton.$touched || forms.formLabel.$submitted) && forms.formLabel.startChatButton.$invalid}">\n											<label class="control-label">{{\'APPLICATION_ENQUIRY_BUTTON\' | translate}}</label>\n											<input type="text" name="enquiryButton" placeholder="{{\'APPLICATION_ENQUIRY_BUTTON\' | translate}}" class="form-control" data-ng-model="chatWebsite.enquiry_button"/>\n										</div>\n										<!-- END ENQUIRY BUTTON -->\n\n										<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n									</form>\n								</div>\n								<!-- END STRINGS TAB -->\n\n								<!-- SETTINGS TAB -->\n								<div class="tab-pane" id="tab_1_5">\n									<form name="forms.formSetting" data-ng-submit="forms.formSetting.$valid && updateItem()" novalidate>\n\n										<!-- START NAME -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.name.$touched || forms.formSetting.$submitted) && forms.formSetting.name.$invalid}">\n											<label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n											<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="chatWebsite.name" required/>\n											<span data-ng-show="(forms.formSetting.name.$touched || forms.formSetting.$submitted) && forms.formSettings.name.$invalid && forms.formSetting.name.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END NAME -->\n\n										<!-- START ADDRESS -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.address.$touched || forms.formSetting.$submitted) && forms.formSetting.address.$invalid}">\n											<label class="control-label">{{\'APPLICATION_WEB_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n											<input type="url" name="address" placeholder="{{\'APPLICATION_WEB_ADDRESS\' | translate}}" class="form-control" data-ng-model="chatWebsite.address" required/>\n											<span data-ng-show="(forms.formSetting.address.$touched || forms.formSetting.$submitted) && forms.formSetting.address.$invalid && forms.formSetting.address.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END ADDRESS -->\n\n										<!-- START REMOTE IP -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.remote.$touched || forms.formSetting.$submitted) && forms.formSetting.remote.$invalid}">\n											<label class="control-label">{{\'APPLICATION_REMOTE\' | translate}} <span class="required" aria-required="true">*</span></label>\n											<input type="url" name="remote" placeholder="{{\'APPLICATION_REMOTE\' | translate}}" class="form-control" data-ng-model="chatWebsite.remote" required/>\n											<span data-ng-show="(forms.formSetting.remote.$touched || forms.formSetting.$submitted) && forms.formSetting.remote.$invalid && forms.formSetting.remote.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END REMOTE IP -->\n\n										<!-- START DESCRIPTION -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.description.$touched || forms.formSetting.$submitted) && forms.formSetting.description.$invalid}">\n											<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n											<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="chatWebsite.description"/>\n										</div>\n										<!-- END DESCRIPTION -->\n\n										<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n									</form>\n								</div>\n								<!-- END SETTINGS TAB -->\n							</div>\n						</div>\n						<div class="col-md-4">\n							<!-- START STATE -->\n							<div class="form-group">\n								<!-- <label class="control-label">{{\'APPLICATION_ANIMATION\' | translate}}</label> -->\n								<!-- <input colorpicker type="text" name="animationToggle" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" class="form-control" data-ng-model="chatWebsite.animation" required/> -->\n								<ui-select data-ng-model="statePreview.state" name="statePreview" theme="bootstrap">\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected}}</ui-select-match>\n									<ui-select-choices repeat="statePreview in [\'online\',\'offline\'] | filter: $select.search">\n										<div ng-bind-html="statePreview | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n							</div>\n							<!-- END STATE -->\n							<preview></preview>\n						</div>\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),
+a.put("app/chat/website/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-bubble"></i>\n					<a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-globe"></i>\n					<a href="/chat/websites/list">{{ \'APPLICATION_WEB_SITES\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<a href="#">{{chatWebsite.name}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img src="assets/images/media/website.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{chatWebsite.name}}\n					</div>\n					<div class="profile-usertitle-job">\n						{{chatWebsite.address}}\n					</div>\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.includes(\'main.chat.websites.view.snippet\')}">\n							<a ng-href="/chat/websites/view/{{chatWebsite.id}}/snippet/view">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SNIPPET\' | translate }} </a>\n						</li>\n						<li data-ng-class="{active: $state.includes(\'main.chat.websites.view.actions\')}">\n							<a ng-href="/chat/websites/view/{{chatWebsite.id}}/actions/list">\n							<i class="icon-directions"></i>\n							{{ \'APPLICATION_ACTIONS\' | translate }} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/chat/website/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-bubble"></i>\n						<a href="#">{{ \'APPLICATION_CHAT\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-globe"></i>\n						<a href="/chat/websites/list">{{ \'APPLICATION_WEB_SITES\' | translate }}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_WEB_SITE\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="createItem()">\n          <wz-step title="{{\'APPLICATION_WEB_SITE_INFO\' | translate}}" canexit="exitValidation(forms.formSetting.$valid)">\n						<form name="forms.formSetting" novalidate>\n\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.name.$touched || forms.formSetting.$submitted) && forms.formSetting.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n								<span data-ng-show="forms.formSetting.name.$touched && !forms.formSettings.name.$valid && forms.formSetting.name.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START ADDRESS -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.address.$touched || forms.formSetting.$submitted) && forms.formSetting.address.$invalid}">\n								<label class="control-label">{{\'APPLICATION_WEB_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="url" name="address" placeholder="{{\'APPLICATION_WEB_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.address" required/>\n								<span data-ng-show="(forms.formSetting.address.$touched || forms.formSetting.$submitted) && forms.formSetting.address.$invalid && forms.formSetting.address.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END ADDRESS -->\n\n							<!-- START REMOTE IP -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formSetting.remote.$touched || forms.formSetting.$submitted) && forms.formSetting.remote.$invalid}">\n								<label class="control-label">{{\'APPLICATION_REMOTE\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="url" name="remote" placeholder="{{\'APPLICATION_REMOTE\' | translate}}" class="form-control" data-ng-model="item.remote" required/>\n								<span data-ng-show="(forms.formSetting.remote.$touched || forms.formSetting.$submitted) && forms.formSetting.remote.$invalid && forms.formSetting.remote.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END REMOTE IP -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.form.description"/>\n							</div>\n							<!-- END DESCRIPTION -->\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n						</form>\n					</wz-step>\n\n					<wz-step title="{{\'APPLICATION_WEB_SITE_APPEARANCE\' | translate}}" canexit="exitValidation(forms.formAppearance.$valid)">\n						<form name="forms.formAppearance" novalidate>\n\n							<!-- START MAIN COLOR -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.mainColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.host.$invalid}">\n								<label class="control-label">{{\'APPLICATION_MAIN_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input colorpicker type="text" name="mainColor" placeholder="{{\'APPLICATION_MAIN_COLOR\' | translate}}" style="color:{{item.color}}" class="form-control" data-ng-model="item.color" required/>\n								<span data-ng-show="(forms.formAppearance.mainColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.mainColor.$invalid && forms.formAppearance.mainColor.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END MAIN COLOR -->\n\n							<!-- START FOCUS COLOR -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.focusColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.focusColor.$invalid}">\n								<label class="control-label">{{\'APPLICATION_FOCUS_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input colorpicker type="text" name="focusColor" placeholder="{{\'APPLICATION_FOCUS_COLOR\' | translate}}" style="color:{{item.color_focus}}" class="form-control" data-ng-model="item.color_focus" required/>\n								<span data-ng-show="(forms.formAppearance.focusColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.focusColor.$invalid && forms.formAppearance.focusColor.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END FOCUS COLOR -->\n\n							<!-- START BUTTON COLOR -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.buttonColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.buttonColor.$invalid}">\n								<label class="control-label">{{\'APPLICATION_BUTTON_COLOR\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input colorpicker type="text" name="buttonColor" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" style="color:{{item.color_button}}" class="form-control" data-ng-model="item.color_button" required/>\n								<span data-ng-show="(forms.formAppearance.buttonColor.$touched || forms.formAppearance.$submitted) && forms.formAppearance.buttonColor.$invalid && forms.formAppearance.buttonColor.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END BUTTON COLOR -->\n\n							<!-- START HEADER SHAPE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.headerShape.$touched || forms.formAppearance.$submitted) && forms.formAppearance.headerShape.$invalid}">\n								<label class="control-label">{{\'APPLICATION_HEADER_SHAPE\' | translate}}</label>\n								<!-- <input colorpicker type="text" name="animationToggle" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" class="form-control" data-ng-model="item.animation" required/> -->\n								<ui-select data-ng-model="item.header_shape" name="headerShape" theme="bootstrap">\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant(\'APPLICATION_\' + $select.selected.toUpperCase())}}</ui-select-match>\n									<ui-select-choices repeat="headerShape in [\'rounded\',\'squared\'] | filter: $select.search">\n										<div ng-bind-html="$translate.instant(\'APPLICATION_\' + headerShape.toUpperCase()) | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n							</div>\n							<!-- END HEADER SHAPE -->\n\n							<!-- START ANIMATION TOGGLE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formAppearance.animationToggle.$touched || forms.formAppearance.$submitted) && forms.formAppearance.animationToggle.$invalid}">\n								<label class="control-label">{{\'APPLICATION_ANIMATION\' | translate}}</label>\n								<ui-select data-ng-model="item.animation" name="animationToggle" theme="bootstrap">\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected  ? \'On\' : \'Off\'}}</ui-select-match>\n									<ui-select-choices repeat="filter in [true,false] | filter: $select.search">\n										<div ng-bind-html="filter ? \'On\' : \'Off\' | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n							</div>\n							<!-- END ANIMATION TOGGLE -->\n\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n						</form>\n					</wz-step>\n\n					<wz-step title="{{\'APPLICATION_LABELS\' | translate}}" canexit="exitValidation(forms.formLabel.$valid)">\n						<form name="forms.formLabel" novalidate>\n\n							<!-- START HEADER ONLINE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.headerOnline.$touched || forms.formLabel.$submitted) && forms.formLabel.headerOnline.$invalid}">\n								<label class="control-label">{{\'APPLICATION_HEADER_ONLINE\' | translate}}</label>\n								<input type="text" name="headerOnline" placeholder="{{\'APPLICATION_HEADER_ONLINE\' | translate}}" class="form-control" data-ng-model="item.header_online"/>\n							</div>\n							<!-- END HEADER ONLINE -->\n\n							<!-- START ONLINE MESSAGE-->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.onlineMessage.$touched || forms.formLabel.$submitted) && forms.formLabel.onlineMessage.$invalid}">\n								<label class="control-label">{{\'APPLICATION_ONLINE_MESSAGE\' | translate}}</label>\n								<input type="text" name="onlineMessage" placeholder="{{\'APPLICATION_ONLINE_MESSAGE\' | translate}}" class="form-control" data-ng-model="item.online_message"/>\n							</div>\n							<!-- END HEADER ONLINE -->\n\n							<!-- START USERNAME PLACEHOLDER -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.usernamePlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.usernamePlaceholder.$invalid}">\n								<label class="control-label">{{\'APPLICATION_USERNAME_PLACEHOLDER\' | translate}}</label>\n								<input type="text" name="usernamePlaceholder" placeholder="{{\'APPLICATION_USERNAME_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="item.username_placeholder"/>\n							</div>\n							<!-- END USERNAME PLACEHOLDER -->\n\n							<!-- START EMAIL PLACEHOLDER -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.emailPlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.emailPlaceholder.$invalid}">\n								<label class="control-label">{{\'APPLICATION_EMAIL_PLACEHOLDER\' | translate}}</label>\n								<input type="text" name="emailPlaceholder" placeholder="{{\'APPLICATION_EMAIL_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="item.email_placeholder"/>\n							</div>\n							<!-- END EMAIL PLACEHOLDER -->\n\n							<!-- START START CHAT BUTTON -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.startChatButton.$touched || forms.formLabel.$submitted) && forms.formLabel.startChatButton.$invalid}">\n								<label class="control-label">{{\'APPLICATION_START_CHAT_BUTTON\' | translate}}</label>\n								<input type="text" name="startChatButton" placeholder="{{\'APPLICATION_START_CHAT_BUTTON\' | translate}}" class="form-control" data-ng-model="item.start_chat_button"/>\n							</div>\n							<!-- END START CHAT BUTTON -->\n\n							<!-- START HEADER OFFLINE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.headerOffline.$touched || forms.formLabel.$submitted) && forms.formLabel.headerOnline.$invalid}">\n								<label class="control-label">{{\'APPLICATION_HEADER_OFFLINE\' | translate}}</label>\n								<input type="text" name="headerOffline" placeholder="{{\'APPLICATION_HEADER_OFFLINE\' | translate}}" class="form-control" data-ng-model="item.header_offline"/>\n							</div>\n							<!-- END HEADER OFFLINE -->\n\n							<!-- START OFFLINE MESSAGE-->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.offlineMessage.$touched || forms.formLabel.$submitted) && forms.formLabel.onlineMessage.$invalid}">\n								<label class="control-label">{{\'APPLICATION_OFFLINE_MESSAGE\' | translate}}</label>\n								<input type="text" name="offlineMessage" placeholder="{{\'APPLICATION_OFFLINE_MESSAGE\' | translate}}" class="form-control" data-ng-model="item.offline_message"/>\n							</div>\n							<!-- END OFFLINE MESSAGE -->\n\n							<!-- START ENQUIRY MESSAGE PLACEHOLDER-->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.enquiryMessagePlaceholder.$touched || forms.formLabel.$submitted) && forms.formLabel.onlineMessage.$invalid}">\n								<label class="control-label">{{\'APPLICATION_ENQUIRY_MESSAGE_PLACEHOLDER\' | translate}}</label>\n								<input type="text" name="enquiryMessagePlaceholder" placeholder="{{\'APPLICATION_ENQUIRY_MESSAGE_PLACEHOLDER\' | translate}}" class="form-control" data-ng-model="item.enquiry_message_placeholder"/>\n							</div>\n							<!-- END ENQUIRY MESSAGE PLACEHOLDER -->\n\n							<!-- START ENQUIRY BUTTON -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formLabel.enquiryButton.$touched || forms.formLabel.$submitted) && forms.formLabel.startChatButton.$invalid}">\n								<label class="control-label">{{\'APPLICATION_ENQUIRY_BUTTON\' | translate}}</label>\n								<input type="text" name="enquiryButton" placeholder="{{\'APPLICATION_ENQUIRY_BUTTON\' | translate}}" class="form-control" data-ng-model="item.enquiry_button"/>\n							</div>\n							<!-- END ENQUIRY BUTTON -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n						</form>\n					</wz-step>\n\n					<wz-step title="{{\'APPLICATION_FORMS\' | translate}}" canexit="exitValidation(forms.formAppearance.$valid)">\n						<form name="forms.formFunctionality" novalidate>\n\n							<!-- START DOWNLOAD TRANSCRIPT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formFunctionality.animationToggle.$touched || forms.formFunctionality.$submitted) && forms.formFunctionality.animationToggle.$invalid}">\n								<label class="control-label">{{\'APPLICATION_DOWNLOAD_TRANSCRIPT\' | translate}}</label>\n								<ui-select data-ng-model="item.download_transcript" name="downloadTranscript" theme="bootstrap">\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected ? \'On\' : \'Off\'}}</ui-select-match>\n									<ui-select-choices repeat="downloadTranscript in [true, false] | filter: $select.search">\n										<div ng-bind-html="downloadTranscript ? \'On\' : \'Off\' | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n							</div>\n							<!-- END DOWNLOAD TRANSCRIPT -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n						</form>\n					</wz-step>\n\n					<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n						<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n						<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n					</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/dashboard/dashboard.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/dashboard/voice">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<div>\n		    <nav class="navbar navbar-default" role="navigation">\n		        <div class="navbar-header">\n		            <button type="button" class="navbar-toggle" ng-init="navCollapsed = true" ng-click="navCollapsed = !navCollapsed">\n		                <span class="sr-only">Toggle navigation</span>\n		                <span class="icon-bar"></span>\n		                <span class="icon-bar"></span>\n		                <span class="icon-bar"></span>\n		            </button>\n		            <!-- <a class="navbar-brand" ui-sref="home">Brand</a> -->\n		        </div>\n\n		        <!-- Collect the nav links, forms, and other content for toggling -->\n		        <div class="collapse navbar-collapse" ng-class="!navCollapsed && \'in\'">\n		            <ul class="nav navbar-nav">\n									<!-- <li dropdown>\n											<a href="#" dropdown-toggle>\n													{{ \'APPLICATION_VOICE\' | translate }}\n													<b class=\'caret\'></b>\n											</a>\n											<tree tree=\'voice\'></tree>\n									</li>\n									<li dropdown>\n											<a href="#" dropdown-toggle>\n													{{ \'APPLICATION_MAIL\' | translate }}\n													<b class=\'caret\'></b>\n											</a>\n											<tree tree=\'mail\'></tree>\n									</li> -->\n		                <li data-ng-class="{active: $state.is(\'main.dashboard.voice\')}">\n		                    <a href="/dashboard/voice">\n													<b class=\'icon-earphones-alt\'></b>\n		                        {{ \'APPLICATION_VOICE\' | translate }}\n		                    </a>\n		                    <!-- <tree tree=\'voice\'></tree> -->\n		                </li>\n										<li data-ng-class="{active: $state.is(\'main.dashboard.mail\')}">\n		                    <a href="/dashboard/mail">\n													<b class=\'icon-envelope\'></b>\n		                        {{ \'APPLICATION_MAIL\' | translate }}\n		                    </a>\n		                    <!-- <tree tree=\'mail\'></tree> -->\n		                </li>\n		            </ul>\n		            <!-- <ul class="nav navbar-nav">\n		                <li dropdown>\n		                    <a href="#" dropdown-toggle>\n		                        {{ \'APPLICATION_QUEUES\' | translate }}\n		                        <b class=\'caret\'></b>\n		                    </a>\n		                    <tree tree=\'queues\'></tree>\n		                </li>\n		            </ul> -->\n		        </div>\n		        <!-- /.navbar-collapse -->\n		    </nav>\n		</div>\n		<div ui-view></div>\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/dashboard/mail/mail.html",'<div class="col-md-12">\nThis is the mail view.\n</div>\n'),a.put("app/dashboard/voice/voice.html",'<div class="row" ng-init=\'getQueueStats()\'>\n  <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n    <div class="dashboard-stat red-intense">\n      <div class="visual">\n        <i class="fa fa-comments"></i>\n      </div>\n      <div class="details">\n        <div class="number">\n          {{queueStats.abandonedCalls}}\n        </div>\n        <div class="desc">\n          {{\'APPLICATION_DASHBOARD_ABANDONED\' | translate}}\n        </div>\n      </div>\n      <a class="more" href="/voice/realtime/view/queues">\n      {{\'APPLICATION_VIEW_MORE\' | translate}} <i class="m-icon-swapright m-icon-white"></i>\n      </a>\n    </div>\n  </div>\n  <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n    <div class="dashboard-stat green-haze">\n      <div class="visual">\n        <i class="fa fa-bar-chart-o"></i>\n      </div>\n      <div class="details">\n        <div class="number">\n          {{queueStats.completedCalls}}\n        </div>\n        <div class="desc">\n          {{\'APPLICATION_DASHBOARD_COMPLETED\' | translate}}\n        </div>\n      </div>\n      <a class="more" href="/voice/realtime/view/queues">\n      {{\'APPLICATION_VIEW_MORE\' | translate}} <i class="m-icon-swapright m-icon-white"></i>\n      </a>\n    </div>\n  </div>\n  <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n    <div class="dashboard-stat purple-plum">\n      <div class="visual">\n        <i class="fa fa-shopping-cart"></i>\n      </div>\n      <div class="details">\n        <div class="number">\n          {{queueStats.waitCalls}}\n        </div>\n        <div class="desc">\n          {{\'APPLICATION_DASHBOARD_WAIT\' | translate}}\n        </div>\n      </div>\n      <a class="more" href="/voice/realtime/view/queues">\n      {{\'APPLICATION_VIEW_MORE\' | translate}} <i class="m-icon-swapright m-icon-white"></i>\n      </a>\n    </div>\n  </div>\n  <div class="col-lg-3 col-md-3 col-sm-6 col-xs-12">\n    <div class="dashboard-stat blue-madison">\n      <div class="visual">\n        <i class="fa fa-globe"></i>\n      </div>\n      <div class="details">\n        <div class="number">\n          {{queueStats.activeCalls}}\n        </div>\n        <div class="desc">\n          {{\'APPLICATION_DASHBOARD_ACTIVE\' | translate}}\n        </div>\n      </div>\n      <a class="more" href="/voice/realtime/view/queues">\n      {{\'APPLICATION_VIEW_MORE\' | translate}} <i class="m-icon-swapright m-icon-white"></i>\n      </a>\n    </div>\n  </div>\n</div>\n'),a.put("app/fax/account/list/list.html",'<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-paper-plane"></i>\n						<a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-notebook"></i>\n						<a href="/fax/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="fax_accounts.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/fax/accounts/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getFaxAccounts([\'name\', \'description\', \'phone\'])" csv-header="[\'Name\', \'Description\', \'Phone\']" field-separator=";" filename="fax_accounts.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedFaxAccounts" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="5">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.faxAccountsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="faxAccountByPage in faxAccountsByPage | filter: $select.search">\n													<div ng-bind-html="faxAccountByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(faxAccount, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n								<th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th st-sort="phone">{{ \'APPLICATION_PHONE\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="faxAccount in displayedFaxAccounts" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="fax_accounts.checked" checklist-value="faxAccount.id"></td>\n					      <td>{{faxAccount.name}}</td>\n								<td>{{faxAccount.description}}</td>\n								<td>{{faxAccount.phone}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/fax/accounts/view/{{faxAccount.id}}/settings">\n										{{ \'APPLICATION_EDIT\' | translate }}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(faxAccount.name,faxAccount.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedFaxAccounts.length">\n								<td colspan="5" style="text-align:center;">\n									<i>No fax account available</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td></td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="phone" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_PHONE\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n						    </td>\n						  </tr>\n					    <tr>\n					      <td colspan="5" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.faxAccountsByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/fax/account/view/view.applications.html",'<div class="row" data-ng-init="initApplication()">\n	<div class="col-md-12">\n\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="createItem()">\n	        <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="formValidation(forms.info.$valid)">\n							<form name="forms.info" novalidate>\n								<!-- START APP -->\n								<div class="form-group"  data-ng-class="{\'has-error\': (forms.info.app.$touched || forms.info.$submitted) && forms.info.app.$invalid}">\n									<label class="control-label">{{\'APPLICATION_APPLICATION\' | translate}}</label>\n									<ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n				            <ui-select-match placeholder="{{\'APPLICATION_APPLICATION\' | translate}}">{{$select.selected | uppercase}}</ui-select-match>\n				            <ui-select-choices repeat="filter in [\'queue\', \'agent\'] | filter: $select.search">\n				              <div ng-bind-html="filter | uppercase | highlight: $select.search"></div>\n				            </ui-select-choices>\n				          </ui-select>\n									<span data-ng-show="(forms.info.app.$touched || forms.info.$submitted) && forms.info.app.$invalid && forms.info.app.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END APP -->\n\n								<!-- START APPADATA -->\n								<div class="form-group"  data-ng-class="{\'has-error\': (forms.info.appdata.$touched || forms.info.$submitted) && forms.info.appdata.$invalid}">\n									<label class="control-label">{{\'APPLICATION_ARGUMENTS\' | translate}}</label>\n									<ui-select data-ng-model="application.appdata" name="appdata" theme="bootstrap" required>\n				            <ui-select-match placeholder="{{\'APPLICATION_ARGUMENTS\' | translate}}">{{$select.selected.name}}</ui-select-match>\n				            <ui-select-choices repeat="item in items | filter: $select.search">\n				              <div data-ng-bind-html="item.name | highlight: $select.search"></div>\n				            </ui-select-choices>\n				          </ui-select>\n									<span data-ng-show="(forms.info.appdata.$touched || forms.info.$submitted) && forms.info.appdata.$invalid && forms.info.appdata.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END APPADATA -->\n\n								<!-- START TIMEOUT -->\n								<div class="form-group"  data-ng-class="{\'has-error\': (forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid}">\n									<label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}</label>\n									<input type="text" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" required>\n									<span data-ng-show="(forms.info.timeout.$touched || forms.info.$submitted) && forms.info.timeout.$invalid && forms.info.timeout.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END TIMEOUT -->\n\n								<!-- START INTERVAL -->\n								<!-- <div class="form-group" data-ng-class="{\'has-error\': (forms.info.interval.$touched || forms.info.$submitted) && forms.info.interval.$invalid}">\n									<label class="control-label">{{\'APPLICATION_INTERVAL\' | translate}}</label>\n									<input type="text" name="interval" placeholder="*|*|*|*" class="form-control" data-ng-model="application.interval">\n									<span data-ng-show="(forms.info.info.interval.$touched || forms.info.$submitted) && forms.info.interval.$invalid && forms.info.interval.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div> -->\n								<!-- END INTERVAL -->\n\n								<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n							</form>\n						</wz-step>\n\n						<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n							<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n							<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n						</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/fax/account/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row" data-ng-init="initView()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-paper-plane"></i>\n					<a href="/">{{ \'APPLICATION_FAX\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-notebook"></i>\n					<a href="/fax/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n					<i class="fa fa-angle-right" data-ng-show="account"></i>\n				</li>\n				<li data-ng-show="account">\n					<a href="#">{{ account.name || account.description }}</a>\n				</li>\n			</ul>\n		</div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/account.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{ account.name || account.description }}\n					</div>\n					<div class="profile-usertitle-job">\n						{{ account.phone }}\n					</div>\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.fax.accounts.view.settings\')}">\n							<a href="/fax/accounts/view/{{account.id}}/settings">\n							<i class="icon-settings"></i>\n							{{\'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n						<li data-ng-class="{active: $state.is(\'main.fax.accounts.view.routes\') || $state.is(\'main.fax.accounts.view.applications\')}">\n							<a href="/fax/accounts/view/{{account.id}}/routes">\n							<i class="icon-directions"></i>\n							{{\'APPLICATION_ROUTES\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/fax/account/view/view.routes.html",'<div class="row" data-ng-init="getFaxApplications()">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title  tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ROUTES\' | translate}}</span>\n				</div>\n				<div class="actions">\n					<div class="btn-group">\n						<a class="btn green-jungle " href="/fax/accounts/view/{{account.id}}/applications" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_APPLICATION\' | translate }}\n						</a>\n					</div>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table class="table table-striped table-bordered table-hover">\n					  <thead>\n						  <tr>\n								<!-- <th width="5%">{{ \'APPLICATION_ID\' | translate }}</th> -->\n						    <th>{{\'APPLICATION_APPLICATION\' | translate}}</th>\n						    <th>{{\'APPLICATION_ARGUMENTS\' | translate}}</th>\n								<th>{{\'APPLICATION_TIMEOUT\' | translate}}</th>\n						    <!-- <th>{{\'APPLICATION_INTERVAL\' | translate}}</th> -->\n								<th width="5%">{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n						<tbody ui-sortable="sortableOptions" data-ng-model="faxApplications">\n					    <tr data-ng-repeat="application in faxApplications | orderBy:\'priority\'">\n								<td><span data-ng-class="{\'label-info\': application.app == \'agent\', \'label-success\': application.app == \'queue\'}" class="label label-sm"> {{application.app}} </span></td>\n								<td>{{getAppdata(application.app, application.appdata)}}</td>\n								<td>{{application.timeout}}</td>\n								<!-- <td>{{application.interval}}</td> -->\n					      <td>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(application.app,application.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="faxApplications.length">\n								<td colspan="5" style="text-align:center;">\n									<i>No applications available</i>\n								</td>\n							</tr>\n					  </tbody>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/fax/account/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n			<div class="portlet-body">\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.formSetting" data-ng-submit="forms.formSetting.$valid && updateItemFaxAccount()" novalidate>\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n								<span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n							</div>\n							<!-- END DESCRIPTION -->\n\n							<!-- START TRUNKS -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.trunk.$invalid}">\n								<label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="account.TrunkId" name="trunk" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_TRUNK\' | translate}}">{{$select.selected.name}}</ui-select-match>\n									<ui-select-choices repeat="trunk.id as trunk in trunks | filter: $select.search">\n										<div data-ng-bind="trunk.name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span data-ng-show="forms.formSetting.trunk.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- START TRUNKS -->\n\n							<!-- START PHONE -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.phone.$invalid}">\n								<label class="control-label">{{\'APPLICATION_PHONE\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="account.phone" required/>\n								<span data-ng-show="forms.formSetting.phone.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END PHONE -->\n\n							<!-- START ECM -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_ECM\' | translate}}<span class="required" aria-required="true">*</span></label><br>\n								<!-- <button type="button" name="ecm" class="btn btn-default form-control" data-ng-model="account.ecm" bs-checkbox>{{account.ecm ? \'ENABLED\' : \'DISABLED\'}}</button> -->\n								<input\n									bs-switch\n									ng-model="account.ecm"\n									type="checkbox"\n									switch-active="{{ isActive }}"\n									switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n									switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n									switch-on-color="{{ onColor }}"\n									switch-off-color="{{ offColor }}"\n									switch-animate="{{ animate }}"\n									switch-size="{{ size }}"\n									switch-label="{{ label }}"\n									switch-icon="{{ icon }}"\n									switch-radio-off="{{ radioOff }}"\n									switch-label-width="{{ labelWidth }}"\n									switch-handle-width="{{ handleWidth }}">\n							</div>\n							<!-- END ECM -->\n\n							<!-- START FAXHEADER -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.faxheader.$invalid}">\n								<label class="control-label">{{\'APPLICATION_FAXHEADER\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="faxheader" placeholder="{{\'APPLICATION_FAXHEADER\' | translate}}" class="form-control" data-ng-model="account.faxheader" required/>\n								<span data-ng-show="forms.formSetting.faxheader.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END FAXHEADER -->\n\n							<!-- START LOCALID -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.localid.$invalid}">\n								<label class="control-label">{{\'APPLICATION_LOCALID\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="localid" placeholder="{{\'APPLICATION_LOCALID\' | translate}}" class="form-control" data-ng-model="account.localid" required/>\n								<span data-ng-show="forms.formSetting.localid.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END LOCALID -->\n\n							<!-- START MAXRATE -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.maxrate.$invalid}">\n								<label class="control-label">{{\'APPLICATION_MAXRATE\' | translate}}</label>\n								<ui-select data-ng-model="account.maxrate" name="maxrate" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_MAXRATE\' | translate}}">{{$select.selected}}</ui-select-match>\n									<ui-select-choices repeat="maxrate in [\'9600\', \'14400\', \'33600\'] | filter: $select.search">\n										<div data-ng-bind="maxrate | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span data-ng-show="forms.formSetting.maxrate.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- START MAXRATE -->\n\n							<!-- START MINRATE -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.minrate.$invalid}">\n								<label class="control-label">{{\'APPLICATION_MINRATE\' | translate}}</label>\n								<ui-select data-ng-model="account.minrate" name="minrate" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_MAXRATE\' | translate}}">{{$select.selected}}</ui-select-match>\n									<ui-select-choices repeat="minrate in [\'9600\', \'14400\', \'33600\'] | filter: $select.search">\n										<div data-ng-bind="minrate | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span data-ng-show="forms.formSetting.minrate.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- START MINRATE -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END GENERAL TAB -->\n\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/fax/account/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-paper-plane"></i>\n						<a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-notebook"></i>\n						<a href="/fax/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initWizard()">\n	<div class="col-md-12">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="createItem()">\n          <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="exitValidation(forms.formSetting.$valid)">\n						<form name="forms.formSetting" novalidate>\n\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n								<span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n							</div>\n							<!-- END DESCRIPTION -->\n\n							<!-- START TRUNKS -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.trunk.$invalid}">\n								<label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="item.TrunkId" name="trunk" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_TRUNK\' | translate}}">{{$select.selected.name}}</ui-select-match>\n									<ui-select-choices repeat="trunk.id as trunk in trunks | filter: $select.search">\n										<div data-ng-bind="trunk.name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span data-ng-show="forms.formSetting.trunk.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- START TRUNKS -->\n\n							<!-- START PHONE -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.phone.$invalid}">\n								<label class="control-label">{{\'APPLICATION_PHONE\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="phone" placeholder="{{\'APPLICATION_PHONE\' | translate}}" class="form-control" data-ng-model="item.phone" required/>\n								<span data-ng-show="forms.formSetting.phone.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END PHONE -->\n\n							<!-- START ECM -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_ECM\' | translate}}<span class="required" aria-required="true">*</span></label><br>\n								<!-- <button type="button" name="ecm" class="btn btn-default form-control" data-ng-model="item.ecm" bs-checkbox>{{item.ecm ? \'ENABLED\' : \'DISABLED\'}}</button> -->\n								<input\n									bs-switch\n									ng-model="item.ecm"\n									type="checkbox"\n									switch-active="{{ isActive }}"\n									switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n									switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n									switch-on-color="{{ onColor }}"\n									switch-off-color="{{ offColor }}"\n									switch-animate="{{ animate }}"\n									switch-size="{{ size }}"\n									switch-label="{{ label }}"\n									switch-icon="{{ icon }}"\n									switch-radio-off="{{ radioOff }}"\n									switch-label-width="{{ labelWidth }}"\n									switch-handle-width="{{ handleWidth }}">\n							</div>\n							<!-- END ECM -->\n\n							<!-- START FAXHEADER -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.faxheader.$invalid}">\n								<label class="control-label">{{\'APPLICATION_FAXHEADER\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="faxheader" placeholder="{{\'APPLICATION_FAXHEADER\' | translate}}" class="form-control" data-ng-model="item.faxheader" required/>\n								<span data-ng-show="forms.formSetting.faxheader.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END FAXHEADER -->\n\n							<!-- START LOCALID -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.localid.$invalid}">\n								<label class="control-label">{{\'APPLICATION_LOCALID\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="localid" placeholder="{{\'APPLICATION_LOCALID\' | translate}}" class="form-control" data-ng-model="item.localid" required/>\n								<span data-ng-show="forms.formSetting.localid.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END LOCALID -->\n\n							<!-- START MAXRATE -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.maxrate.$invalid}">\n								<label class="control-label">{{\'APPLICATION_MAXRATE\' | translate}}</label>\n								<ui-select data-ng-model="item.maxrate" name="maxrate" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_MAXRATE\' | translate}}">{{$select.selected}}</ui-select-match>\n									<ui-select-choices repeat="maxrate in [\'9600\', \'14400\', \'33600\'] | filter: $select.search">\n										<div data-ng-bind="maxrate | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span data-ng-show="forms.formSetting.maxrate.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- START MAXRATE -->\n\n							<!-- START MINRATE -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.minrate.$invalid}">\n								<label class="control-label">{{\'APPLICATION_MINRATE\' | translate}}</label>\n								<ui-select data-ng-model="item.minrate" name="minrate" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_MAXRATE\' | translate}}">{{$select.selected}}</ui-select-match>\n									<ui-select-choices repeat="minrate in [\'9600\', \'14400\', \'33600\'] | filter: $select.search">\n										<div data-ng-bind="minrate | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span data-ng-show="forms.formSetting.minrate.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- START MINRATE -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="next()"/>\n\n						</form>\n					</wz-step>\n\n					<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n						<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n						<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n					</wz-step>\n\n				</wizard>\n\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/fax/automation/list/list.html",'<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-envelope"></i>\n						<a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-settings"></i>\n						<a href="#">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-settings font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="faxAutomations.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_AUTOMATION\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/fax/automations/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getFaxAutomations([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="fax_automations.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedFaxAutomations" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="6">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.faxAutomationsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="faxAutomationByPage in faxAutomationsByPage | filter: $select.search">\n													<div ng-bind-html="faxAutomationByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<!-- <th st-sort="id" width="5%" st-sort-default="reverse">{{ \'APPLICATION_ID\' | translate }}</th> -->\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(faxAutomation, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n								<th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th>{{ \'APPLICATION_STATUS\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="faxAutomation in displayedFaxAutomations">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="faxAutomations.checked" checklist-value="faxAutomation.id"></td>\n					      <td>{{faxAutomation.name}}</td>\n								<td>{{faxAutomation.description}}</td>\n								<td>\n									<input\n										data-ng-change="updateItem(faxAutomation.id, faxAutomation.status)",\n								    bs-switch\n								    ng-model="faxAutomation.status"\n								    type="checkbox"\n								    switch-active="{{ isActive }}"\n								    switch-on-text="{{ onText }}"\n								    switch-off-text="{{ offText }}"\n								    switch-on-color="{{ onColor }}"\n								    switch-off-color="{{ offColor }}"\n								    switch-animate="{{ animate }}"\n								    switch-size="{{ size }}"\n								    switch-label="{{ label }}"\n								    switch-icon="{{ icon }}"\n								    switch-radio-off="{{ radioOff }}"\n								    switch-label-width="{{ labelWidth }}"\n								    switch-handle-width="{{ handleWidth }}">\n								</td>\n					      <td>\n									<a class="btn default btn-xs blue-stripe" data-ng-href="/fax/automations/view/{{faxAutomation.id}}/settings">\n										{{ \'APPLICATION_EDIT\' | translate }}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(faxAutomation.name, faxAutomation.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedFaxAutomations.length">\n								<td colspan="6" class="text-center">\n									<i>{{\'MESSAGE_NO_AVAILABLE_AUTOMATIONS\' | translate}}</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_USERNAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td/>\n								<td/>\n						  </tr>\n					    <tr>\n					      <td colspan="6" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.faxAutomationsByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/fax/automation/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row" data-ng-init="initView()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-envelope"></i>\n					<a href="/">{{ \'APPLICATION_FAX\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-settings"></i>\n					<a href="/fax/automations/list">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a>\n					<i class="fa fa-angle-right" data-ng-show="automation"></i>\n				</li>\n				<li data-ng-show="automation">\n					<a href="#">{{ automation.description || automation.name }}</a>\n				</li>\n			</ul>\n		</div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/automation.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{ automation.name }}\n					</div>\n					<div class="profile-usertitle-job">\n						{{automation.description}}\n					</div>\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.fax.automations.view.settings\')}">\n							<a href="/fax/automations/view/{{automation.id}}/settings">\n							<i class="icon-settings"></i>\n							{{\'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/fax/automation/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_2" data-toggle="tab">OR {{\'APPLICATION_CONDITIONS\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_3" data-toggle="tab">AND {{\'APPLICATION_CONDITIONS\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_4" data-toggle="tab">{{\'APPLICATION_ACTIONS\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n			<div class="portlet-body">\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.info" data-ng-submit="forms.info.$valid && updateAutomation()" novalidate>\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="automation.name" required/>\n								<span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="automation.description"/>\n							</div>\n							<!-- END DESCRIPTION -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END GENERAL TAB -->\n\n					<!-- IMAP TAB -->\n					<div class="tab-pane" id="tab_1_2">\n						<div class="row">\n							<div class="col-md-12">\n								<a href="#" data-ng-click="addNewCondition(\'or\')">\n									<i class="icon-plus"></i>\n								</a>\n								<i class="icon-people"></i>\n								<span class="caption-subject">Meet <strong>all</strong> of the following conditions:</a> </span>\n							</div>\n						</div>\n						<div class="row" data-ng-repeat="condition in automation.BusinessConditions | filter: {type: \'or\'}">\n							<div class="col-md-12">\n								<div class="row">\n									<div class="col-md-12">\n										<hr>\n									</div>\n								</div>\n								<div class="row">\n									<div class="col-md-4">\n										<div class="form-group">\n											<ui-select data-ng-model="condition.condition" theme="bootstrap" on-select="updateCondition(condition.id, \'condition\', $item.key)" required>\n												<ui-select-match placeholder="-- Click to select condition. --">{{$select.selected.value}}</ui-select-match>\n												<ui-select-choices repeat="condition.key as condition in automations.conditions | filter: $select.search">\n													<div data-ng-bind="condition.value | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n									</div>\n									<div class="col-md-3">\n										<div class="form-group">\n											<ui-select data-ng-model="condition.operator" theme="bootstrap" on-select="updateCondition(condition.id, \'operator\', $item.key)" required>\n												<ui-select-match>{{$select.selected.value}}</ui-select-match>\n												<ui-select-choices repeat="operator.key as operator in getOperatorsByCondition(condition.condition) | filter: $select.search">\n													<div data-ng-bind="operator.value | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n									</div>\n									<div class="col-md-4" data-ng-switch="condition.condition">\n										<div class="form-group" data-ng-switch-when="status">\n											<ui-select data-ng-model="condition.attribute" theme="bootstrap" on-select="updateCondition(condition.id, \'attribute\', $item.key)" required>\n												<ui-select-match>{{$select.selected.value}}</ui-select-match>\n												<ui-select-choices repeat="attribute.key as attribute in getAttributesByCondition(condition.condition) | filter: $select.search">\n													<div data-ng-bind="attribute.value | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="form-group" data-ng-switch-when="createdAt">\n											<input class="form-control" type="text" name="attributeOr{{$index}}" value="" data-ng-model="condition.attribute" ng-blur="updateCondition(condition.id, \'attribute\', condition.attribute)" data-ng-class="{\'has-error\': forms.and.attributeAnd{{$index}}.$invalid}" required>\n										</div>\n									</div>\n									<div class="col-md-1">\n										<a href="#" data-ng-click="removeCondition(condition.id)">\n											<i class="icon-close"></i>\n										</a>\n									</div>\n								</div>\n							</div>\n						</div>\n						<div class="row" data-ng-hide="automation.BusinessConditions.length">\n							<div class="col-md-12 text-center">\n								<hr>\n								<i>Add condition</i>\n							</div>\n						</div>\n					</div>\n					<!-- END IMAP TAB -->\n\n					<div class="tab-pane" id="tab_1_3">\n						<div class="row">\n							<div class="col-md-12">\n								<a href="#" data-ng-click="addNewCondition(\'and\')">\n									<i class="icon-plus"></i>\n								</a>\n								<i class="icon-people"></i>\n								<span class="caption-subject">Meet <strong>all</strong> of the following conditions:</a> </span>\n							</div>\n						</div>\n						<div class="row" data-ng-repeat="condition in automation.BusinessConditions | filter: {type: \'and\'}">\n							<div class="col-md-12">\n								<div class="row">\n									<div class="col-md-12">\n										<hr>\n									</div>\n								</div>\n								<div class="row">\n									<div class="col-md-4">\n										<div class="form-group">\n											<ui-select data-ng-model="condition.condition" name="conditionAnd{{$index}}" theme="bootstrap" on-select="updateCondition(condition.id, \'condition\', $item.key)" required>\n												<ui-select-match placeholder="-- Click to select condition. --">{{$select.selected.value}}</ui-select-match>\n												<ui-select-choices repeat="condition.key as condition in automations.conditions | filter: $select.search">\n													<div data-ng-bind="condition.value | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n									</div>\n									<div class="col-md-3">\n										<div class="form-group">\n											<ui-select data-ng-model="condition.operator" name="operatorAnd{{$index}}" theme="bootstrap" on-select="updateCondition(condition.id, \'operator\', $item.key)" required>\n												<ui-select-match>{{$select.selected.value}}</ui-select-match>\n												<ui-select-choices repeat="operator.key as operator in getOperatorsByCondition(condition.condition) | filter: $select.search">\n													<div data-ng-bind="operator.value | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n									</div>\n									<div class="col-md-4" data-ng-switch="condition.condition">\n										<div class="form-group" data-ng-switch-when="status">\n											<ui-select data-ng-model="condition.attribute" name="attributeAnd{{$index}}" theme="bootstrap" on-select="updateCondition(condition.id, \'attribute\', $item.key)" required>\n												<ui-select-match>{{$select.selected.value}}</ui-select-match>\n												<ui-select-choices repeat="attribute.key as attribute in getAttributesByCondition(condition.condition) | filter: $select.search">\n													<div data-ng-bind="attribute.value | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="form-group" data-ng-switch-when="createdAt">\n											<input class="form-control" type="text" name="attributeOr{{$index}}" value="" data-ng-model="condition.attribute" data-ng-blur="updateCondition(condition.id, \'attribute\', condition.attribute)" data-ng-class="{\'has-error\': forms.and.attributeAnd{{$index}}.$invalid}" required>\n											<span data-ng-show="forms.and.attributeAnd{{$index}}.$invalid && forms.and.attributeAnd{{$index}}.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n									</div>\n									<div class="col-md-1">\n										<a href="#" data-ng-click="removeCondition(condition.id)">\n											<i class="icon-close"></i>\n										</a>\n									</div>\n								</div>\n							</div>\n						</div>\n						<div class="row" data-ng-hide="automation.BusinessConditions.length">\n							<div class="col-md-12 text-center">\n								<hr>\n								<i>Add condition</i>\n							</div>\n						</div>\n					</div>\n\n					<!-- SMTP TAB -->\n					<div class="tab-pane" id="tab_1_4">\n						<div class="row">\n							<div class="col-md-12">\n								<a href="#" data-ng-click="addNewAction()">\n									<i class="icon-plus"></i>\n								</a>\n								<i class="icon-people"></i>\n								<span class="caption-subject">Meet <strong>all</strong> of the following conditions:</a> </span>\n							</div>\n						</div>\n						<div class="row" data-ng-repeat="action in automation.BusinessActions">\n							<div class="col-md-12">\n								<div class="row">\n									<div class="col-md-12">\n										<hr>\n									</div>\n								</div>\n								<div class="row">\n									<div class="col-md-4">\n										<div class="form-group">\n											<ui-select data-ng-model="action.condition" theme="bootstrap" on-select="updateAction(action.id, \'condition\', $item.key)" required>\n												<ui-select-match placeholder="-- Click to select condition. --">{{$select.selected.value}}</ui-select-match>\n												<ui-select-choices repeat="action.key as action in automations.actions | filter: $select.search">\n													<div data-ng-bind="action.value | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n									</div>\n									<div class="col-md-3" data-ng-switch="action.condition">\n										<div class="form-group" data-ng-switch-when="status">\n											<ui-select data-ng-model="action.attribute" theme="bootstrap" on-select="updateAction(action.id, \'attribute\', $item.key)" required>\n												<ui-select-match>{{$select.selected.value}}</ui-select-match>\n												<ui-select-choices repeat="attribute.key as attribute in getAttributesByCondition(action.condition) | filter: $select.search">\n													<div data-ng-bind="attribute.value | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="form-group" data-ng-switch-when="createdAt">\n											<input class="form-control" type="text" data-ng-model="action.attribute" data-ng-blur="updateAction(action.id, \'attribute\', action.attribute)" data-ng-class="{\'has-error\': forms.and.attributeAnd{{$index}}.$invalid}" required>\n										</div>\n									</div>\n									<div class="col-md-4">\n									</div>\n									<div class="col-md-1">\n										<a href="#" data-ng-click="removeAction(action.id)">\n											<i class="icon-close"></i>\n										</a>\n									</div>\n								</div>\n							</div>\n						</div>\n						<div class="row" data-ng-hide="automation.BusinessActions.length">\n							<div class="col-md-12 text-center">\n								<hr>\n								<i>Add condition</i>\n							</div>\n						</div>\n\n					</div>\n					<!-- END SMTP TAB -->\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/fax/automation/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n	<div class="col-md-12">\n		<!-- BEGIN PAGE HEADER-->\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-envelope"></i>\n					<a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-settings"></i>\n					<a href="/fax/automations/list">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n		<!-- END PAGE HEADER-->\n\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-settings font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_AUTOMATIONS\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="createItem()">\n	        <wz-step title="{{\'APPLICATION_NEW_AUTOMATION\' | translate}}" canexit="formValidation(forms.automation.$valid && forms.automation.$valid)">\n						<form name="forms.automation" novalidate>\n							<div class="row">\n								<div class="col-md-12">\n									<div class="form-group" data-ng-class="{\'has-error\': forms.automation.name.$invalid && forms.automation.$submitted}">\n										<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n										<input class="form-control" type="text" name="name" value="" data-ng-model="automations.name" required>\n										<span data-ng-show="forms.automation.name.$invalid && forms.automation.name.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n\n									<div class="form-group" data-ng-class="{\'has-error\': forms.automation.description.$invalid && forms.automation.$submitted}">\n										<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n										<input class="form-control" type="text" name="description" value="" data-ng-model="automations.description">\n										<span data-ng-show="forms.automation.description.$invalid && forms.automation.description.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n								</div>\n							</div>\n\n							<div class="row">\n								<div class="col-md-12">\n									<hr>\n								</div>\n							</div>\n\n							<div class="row">\n								<div class="col-md-12">\n									<a href="#" data-ng-click="addNewChoice(\'or\')">\n										<i class="icon-plus"></i>\n									</a>\n									<i class="icon-user"></i>\n									<span class="caption-subject">Meet <strong>any</strong> of the following conditions:</a> </span>\n								</div>\n							</div>\n							<div class="row" data-ng-repeat="automation in automations.or">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-12">\n											<hr>\n										</div>\n									</div>\n									<div class="row">\n										<div class="col-md-4">\n											<div class="form-group" data-ng-class="{\'has-error\': forms.automation.conditionOr{{$index}}.$invalid && forms.automation.$submitted && forms.automation.$submitted}">\n												<ui-select data-ng-model="automations.or[$index].condition" name="conditionOr{{$index}}" theme="bootstrap" required>\n													<ui-select-match placeholder="-- Click to select condition. --">{{$select.selected.value}}</ui-select-match>\n													<ui-select-choices repeat="condition in automations.or[$index].conditions | filter: $select.search">\n														<div data-ng-bind="condition.value | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n												<span data-ng-show="forms.automation.conditionOr{{$index}}.$invalid && forms.automation.conditionOr{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<div class="col-md-3">\n											<div class="form-group" data-ng-class="{\'has-error\': forms.automation.operatorOr{{$index}}.$invalid && forms.automation.$submitted}">\n												<ui-select data-ng-model="automations.or[$index].operator" name="operatorOr{{$index}}" theme="bootstrap" required>\n													<ui-select-match>{{$select.selected.value}}</ui-select-match>\n													<ui-select-choices repeat="operator.key as operator in automations.or[$index].condition.operators | filter: $select.search">\n														<div data-ng-bind="operator.value | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n												<span data-ng-show="forms.automation.operatorOr{{$index}}.$invalid && forms.automation.operatorOr{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<div class="col-md-4" data-ng-switch="automations.or[$index].condition.input">\n											<div class="form-group" data-ng-switch-when="ui-select" data-ng-class="{\'has-error\': forms.automation.attributeOr{{$index}}.$invalid && forms.automation.attributeOr{{$index}}.$error.required && forms.automation.$submitted}">\n												<ui-select data-ng-model="automations.or[$index].attribute" name="attributeOr{{$index}}" theme="bootstrap" required>\n													<ui-select-match>{{$select.selected.value}}</ui-select-match>\n													<ui-select-choices repeat="attribute.key as attribute in automations.or[$index].condition.attributes | filter: $select.search">\n														<div data-ng-bind="attribute.value | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n												<span data-ng-show="forms.automation.attributeOr{{$index}}.$invalid && forms.automation.attributeOr{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n											<div class="form-group" data-ng-switch-when="number">\n												<input class="form-control" type="text" min="0" name="attributeOr{{$index}}" value="" data-ng-model="automations.or[$index].attribute" required>\n												<span data-ng-show="forms.automation.attributeOr{{$index}}.$invalid && forms.automation.attributeOr{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<div class="col-md-1">\n											<a href="#" data-ng-click="removeChoice(\'or\', $index)">\n												<i class="icon-close"></i>\n											</a>\n										</div>\n									</div>\n								</div>\n							</div>\n							<div class="row" data-ng-hide="automations.or.length">\n								<div class="col-md-12 text-center">\n									<hr>\n									<i>Add condition</i>\n								</div>\n							</div>\n\n							<div class="row">\n								<div class="col-md-12">\n									<a href="#" data-ng-click="addNewChoice(\'and\')">\n										<i class="icon-plus"></i>\n									</a>\n									<i class="icon-people"></i>\n									<span class="caption-subject">Meet <strong>all</strong> of the following conditions:</a> </span>\n								</div>\n							</div>\n							<div class="row" data-ng-repeat="automation in automations.and">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-12">\n											<hr>\n										</div>\n									</div>\n									<div class="row">\n										<div class="col-md-4">\n											<div class="form-group" data-ng-class="{\'has-error\': forms.automation.conditionAnd{{$index}}.$invalid && forms.automation.$submitted}">\n												<ui-select data-ng-model="automations.and[$index].condition" name="conditionAnd{{$index}}" theme="bootstrap" required>\n													<ui-select-match placeholder="-- Click to select condition. --">{{$select.selected.value}}</ui-select-match>\n													<ui-select-choices repeat="condition in automations.and[$index].conditions | filter: $select.search">\n														<div data-ng-bind="condition.value | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n												<span data-ng-show="forms.automation.conditionAnd{{$index}}.$invalid && forms.automation.conditionAnd{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<div class="col-md-3">\n											<div class="form-group" data-ng-class="{\'has-error\': forms.automation.operatorAnd{{$index}}.$invalid && forms.automation.$submitted}">\n												<ui-select data-ng-model="automations.and[$index].operator" name="operatorAnd{{$index}}" theme="bootstrap" required>\n													<ui-select-match>{{$select.selected.value}}</ui-select-match>\n													<ui-select-choices repeat="operator.key as operator in automations.and[$index].condition.operators | filter: $select.search">\n														<div data-ng-bind="operator.value | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n												<span data-ng-show="forms.automation.operatorAnd{{$index}}.$invalid && forms.automation.operatorAnd{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<div class="col-md-4" data-ng-switch="automations.and[$index].condition.input">\n											<div class="form-group" data-ng-switch-when="ui-select" data-ng-class="{\'has-error\': forms.automation.attributeAnd{{$index}}.$invalid && forms.automation.$submitted}">\n												<ui-select data-ng-model="automations.and[$index].attribute" name="attributeAnd{{$index}}" theme="bootstrap" required>\n													<ui-select-match>{{$select.selected.value}}</ui-select-match>\n													<ui-select-choices repeat="attribute.key as attribute in automations.and[$index].condition.attributes | filter: $select.search">\n														<div data-ng-bind="attribute.value | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n												<span data-ng-show="forms.automation.attributeAnd{{$index}}.$invalid && forms.automation.attributeAnd{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n											<div class="form-group" data-ng-switch-when="number">\n												<input class="form-control" type="text" min="0" name="attributeAnd{{$index}}" value="" data-ng-model="automations.and[$index].attribute" data-ng-class="{\'has-error\': forms.automation.attributeAnd{{$index}}.$invalid}" required>\n												<span data-ng-show="forms.automation.attributeAnd{{$index}}.$invalid && forms.automation.attributeAnd{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<div class="col-md-1">\n											<a href="#" data-ng-click="removeChoice(\'and\', $index)">\n												<i class="icon-close"></i>\n											</a>\n										</div>\n									</div>\n								</div>\n							</div>\n							<div class="row" data-ng-hide="automations.and.length">\n								<div class="col-md-12 text-center">\n									<hr>\n									<i>Add condition</i>\n								</div>\n							</div>\n\n							<div class="row">\n								<div class="col-md-12">\n									<a href="#" data-ng-click="addNewChoice(\'actions\')">\n										<i class="icon-plus"></i>\n									</a>\n									<i class="icon-magic-wand"></i>\n									<span class="caption-subject">Perform these actions:</a> </span>\n								</div>\n							</div>\n							<div class="row" data-ng-repeat="automation in automations.actions">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-12">\n											<hr>\n										</div>\n									</div>\n									<div class="row">\n										<div class="col-md-4">\n											<div class="form-group" data-ng-class="{\'has-error\': forms.actions.conditionAction{{$index}}.$invalid && forms.automation.$submitted}">\n												<ui-select data-ng-model="automations.actions[$index].condition" name="conditionAction{{$index}}" theme="bootstrap" required>\n													<ui-select-match placeholder="-- Click to select condition. --">{{$select.selected.value}}</ui-select-match>\n													<ui-select-choices repeat="action in automations.actions[$index].actions | filter: $select.search">\n														<div data-ng-bind="action.value | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n												<span data-ng-show="forms.actions.conditionAction{{$index}}.$invalid && forms.actions.conditionAction{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<div class="col-md-3" data-ng-switch="automations.actions[$index].condition.input">\n											<div class="form-group" data-ng-switch-when="ui-select" data-ng-class="{\'has-error\': forms.actions.attributeAction{{$index}}.$invalid && forms.automation.$submitted}">\n												<ui-select data-ng-model="automations.actions[$index].attribute" name="attributeAction{{$index}}" theme="bootstrap" required>\n													<ui-select-match>{{$select.selected.value}}</ui-select-match>\n													<ui-select-choices repeat="attribute.key as attribute in automations.actions[$index].condition.attributes | filter: $select.search">\n														<div data-ng-bind="attribute.value | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n												<span data-ng-show="forms.actions.attributeAction{{$index}}.$invalid && forms.actions.attributeAction{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n											<div class="form-group" data-ng-switch-when="number" data-ng-class="{\'has-error\': forms.actions.attributeAction{{$index}}.$invalid}">\n												<input class="form-control" type="text" min="0" name="attributeAction{{$index}}" value="" data-ng-model="automations.actions[$index].attribute" required>\n												<span data-ng-show="forms.actions.attributeAction{{$index}}.$invalid && forms.actions.attributeAction{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<div class="col-md-4">\n										</div>\n										<div class="col-md-1">\n											<a href="#" data-ng-click="removeChoice(\'actions\', $index)">\n												<i class="icon-close"></i>\n											</a>\n										</div>\n									</div>\n								</div>\n							</div>\n							<div class="row" data-ng-hide="automations.actions.length">\n								<div class="col-md-12 text-center">\n									<hr>\n									<i>Add action</i>\n								</div>\n							</div>\n							<div class="row">\n								<div class="col-md-12">\n									<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n								</div>\n							</div>\n						</form>\n					</wz-step>\n					<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n						<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n						<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n					</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/fax/inbox/inbox.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-paper-plane"></i>\n						<a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-note"></i>\n						<a href="/fax/inbox/incoming">{{ \'APPLICATION_INBOX\' | translate }}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n<!-- END PAGE CONTENT-->\n<div class="row inbox">\n	<div class="col-md-12" ui-view>\n	</div>\n</div>\n'),a.put("app/fax/inbox/incoming/incoming.html",'<!-- END PAGE HEADER-->\n<div data-ng-init="getRooms()">\n	<!-- <pre>\n		{{faxRooms | json}}\n	</pre> -->\n	<div class="inbox-header">\n		<h1 class="pull-left">Inbox</h1>\n	</div>\n	<div class="inbox-content">\n		<table class="table table-advance" st-table="displayedFaxRooms" st-safe-src="faxRooms">\n			<thead>\n				<tr>\n					<th colspan="8" style="background: #eef4f7; border: none; border-bottom: solid 5px #fff;">\n						<div class="row">\n							<div class="col-md-6">\n								<input type="checkbox" class="mail-checkbox mail-group-checkbox checker" data-ng-model="checked" data-ng-change="switchCheckbox(displayedFaxRooms, checked)">\n								<div class="btn-group">\n									<a data-ng-href="/fax/inbox/compose" class="btn btn-sm blue">{{\'APPLICATION_NEW_MESSAGE\' | translate}} <i class="fa fa-plus"></i></a>\n									<!-- <a class="btn btn-sm blue dropdown-toggle" href="#" data-toggle="dropdown">\n										{{\'APPLICATION_MORE\' | translate}} <i class="fa fa-angle-down"></i>\n									</a> -->\n									<ul class="dropdown-menu">\n										<li>\n											<a href="#" data-ng-click="markAsRead(true)">\n											<i class="icon-paper-plane-open"></i> {{\'APPLICATION_MARK_AS_READ\' | translate}} </a>\n										</li>\n										<li>\n											<a href="#" data-ng-click="markAsRead(false)">\n											<i class="icon-paper-plane"></i> {{\'APPLICATION_MARK_AS_UNREAD\' | translate}} </a>\n										</li>\n										<li class="divider">\n										</li>\n										<li>\n											<a href="#" data-ng-click="deleteMessage()">\n											<i class="icon-trash"></i> {{\'APPLICATION_DELETE\' | translate}} </a>\n										</li>\n									</ul>\n								</div>\n							</div>\n							<div class="col-md-6">\n								<div class="input-group input-medium pull-right">\n									<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n									<span class="input-group-addon btn green" style="cursor: default;">\n										<i class="icon-magnifier" style="color: white;"></i>\n									</span>\n								</div>\n								<ui-select data-ng-model="conf.faxRoomsByPage" theme="bootstrap" style="width: 100px;" class="pull-right margin-right-10">\n									<ui-select-match placeholder="{{ \'APPLICATION_SEARCH\' | translate }}">{{$select.selected}}</ui-select-match>\n									<ui-select-choices repeat="p in [10, 20, 35, 50] | filter: $select.search">\n										<span ng-bind-html="p | highlight: $select.search"></span>\n									</ui-select-choices>\n								</ui-select>\n							</div>\n						</div>\n					</th>\n				</tr>\n			</thead>\n			<tbody>\n				<tr data-ng-repeat="faxRoom in displayedFaxRooms | orderBy:\'-updatedAt\'" data-ng-class="{unread: !faxRoom.read}" data-ng-click="go(\'/fax/inbox/room/\' + faxRoom.id, faxRoom.id, \'OPEN\')" class="animate-repeat">\n					<td class="inbox-small-cells" style="border: none;">\n						<input type="checkbox" class="checker" checklist-model="checkedMailMessages.id" checklist-value="faxRoom.id">\n					</td>\n					<!-- <td class="inbox-small-cells" style="border: none;">\n						<i class="fa fa-star" data-ng-class="{\'inbox-started\': faxRoom.favorite}" data-ng-click="markAsFavorite(faxRoom.id, faxRoom.favorite)"></i>\n					</td> -->\n					<td class="view-message hidden-xs" style="cursor:pointer; border:none;">\n						#{{faxRoom.id}}\n					</td>\n					<!-- <td class="inbox-small-cells" style="border: none;">\n						<i class="fa fa-star" data-ng-class="{\'inbox-started\': faxRoom.favorite}" data-ng-click="markAsFavorite(faxRoom.id, faxRoom.favorite)"></i>\n					</td> -->\n					<!-- <td class="view-message hidden-xs" style="cursor:pointer; border:none;">\n						{{faxRoom.subject}}\n					</td> -->\n					<td class="view-message" style="cursor:pointer; border:none;">\n					 	{{faxRoom.from}}\n					</td>\n					<td class="view-message" style="cursor:pointer; border:none;">\n					 	{{faxRoom.MailAccount.description ? faxRoom.MailAccount.description : faxRoom.MailAccount.name}}\n					</td>\n					<td class="view-message" style="cursor:pointer; border:none;" data-ng-switch="faxRoom.status">\n						<span class="badge badge-default" data-ng-class="{\n						\'badge-danger\': faxRoom.status == \'NEW\',\n						\'badge-warning\': faxRoom.status == \'OPEN\',\n						\'badge-info\': faxRoom.status == \'PENDING\',\n						\'badge-success\': faxRoom.status == \'CLOSED\'}"> {{faxRoom.status | uppercase}} </span>\n					</td>\n					<td class="view-message" style="cursor:pointer; border:none;">\n						<span class="badge badge-success badge-roundless" data-ng-show="faxRoom.User.fullname"> {{faxRoom.User.fullname}} </span>\n						<span class="badge badge-default badge-roundless" data-ng-hide="faxRoom.User.fullname"> {{\'APPLICATION_UNASSIGNED\' | translate}} </span>\n					</td>\n					<td class="view-message text-right" context-menu="menuOptions" style="border: none;">\n						<time is="relative-time" datetime="{{faxRoom.updatedAt}}">\n							April 1, 2014\n						</time>\n					</td>\n				</tr>\n				<tr data-ng-hide="faxRooms.length">\n					<td colspan="6" class="text-center">\n						<i>{{\'MESSAGE_NO_AVAILABLE_MESSAGES\' | translate}}</i>\n					</td>\n				</tr>\n				<tr>\n					<td colspan="8" class="text-center" style="border: none;">\n						<div st-pagination class="pagination" st-items-by-page="conf.faxRoomsByPage" st-displayed-pages="7"></div>\n					</td>\n				</tr>\n			</tbody>\n		</table>\n	</div>\n</div>\n'),
+a.put("app/fax/inbox/room/room.html",'<!-- BEGIN TODO CONTENT -->\n<div class="todo-content" data-ng-init="initRoomView()">\n	<div class="portlet light">\n		<!-- PROJECT HEAD -->\n		<div class="portlet-title">\n			<div class="caption" data-ng-show="faxRoom">\n				<i class="icon-bar-chart font-green-sharp hide"></i>\n				<span class="badge badge-default" data-ng-class="{\'badge-error\': faxRoom.status == \'NEW\',\n				\'badge-warning\': faxRoom.status == \'OPEN\',\n				\'badge-info\': faxRoom.status == \'PENDING\',\n				\'badge-success\': faxRoom.status == \'CLOSED\'}"> {{faxRoom.status | uppercase}} </span>\n			</div>\n			<div class="actions" data-ng-show="faxRoom">\n				<div class="btn-group" data-ng-show="Auth.isAdmin()">\n					<a class="btn grey-salsa btn-circle btn-sm" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n					{{ \'APPLICATION_ASSIGN\' | translate }} <i class="fa fa-angle-down"></i>\n					</a>\n					<ul class="dropdown-menu pull-right">\n						<li data-ng-repeat="agent in agents">\n							<a href="#" data-ng-click="assignAgent(agent.id)">\n							{{agent.fullname}} <span class="badge badge-default"> {{agent.fullname | uppercase | limitTo : 1}} </span>\n							</a>\n						</li>\n					</ul>\n				</div>\n				<div class="btn-group">\n					<a class="btn green-haze btn-circle btn-sm" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n					{{ \'APPLICATION_STATUS\' | translate }} <i class="fa fa-angle-down"></i>\n					</a>\n					<ul class="dropdown-menu pull-right">\n						<li>\n							<a href="#" data-ng-click="updateStatus(\'PENDING\')">\n							{{\'STATUS_PENING\' | translate}} <span class="badge badge-danger">\n							P </span>\n							</a>\n						</li>\n						<li>\n							<a href="#" data-ng-click="updateStatus(\'CLOSED\')">\n							{{\'STATUS_CLOSED\' | translate}} <span class="badge badge-success">\n							C </span>\n							</a>\n						</li>\n					</ul>\n				</div>\n			</div>\n		</div>\n		<!-- end PROJECT HEAD -->\n		<div class="portlet-body">\n			<div class="row">\n				<div data-ng-show="faxRoom" data-ng-class="{\'col-md-7 col-sm-7\': faxRoom}">\n					<div class="scroller" id="faxMessages" style="height: 500px; overflow-y: scroll; width: auto;" data-always-visible="1" data-rail-visible1="1" data-initialized="1">\n						<ul class="chats">\n							<li data-ng-class="{\'in\': faxMessage.status == \'RECEIVED\', \'out\': (faxMessage.status == \'SENT\' || faxMessage.status == \'SENDING\' || faxMessage.status == \'FAILED\' || faxMessage.status == \'NOT SENT\')}" data-ng-repeat="faxMessage in faxRoom.FaxMessages | orderBy:\'createdAt\'">\n							<img class="avatar" alt="" data-ng-src="api/users/avatar/{{getCurrentUser().userpic && faxMessage.status === \'SENT\' ? getCurrentUser().userpic : \'unknown_avatar\'}}">\n							<div class="message">\n								<span class="arrow">\n								</span>\n								<span class="bold">{{\'APPLICATION_FROM\' | translate}}: </span>\n								<span>{{faxMessage.From.fullname}} </span>\n								<span> &#60;{{faxMessage.From.phone}}&#62; </span>\n								<br>\n								<span class="bold">{{\'APPLICATION_TO\' | translate}}: </span>\n								<span>{{faxMessage.To.fullname}} </span>\n								<span> &#60;{{faxMessage.To.phone}}&#62; </span>\n								<br>\n								<span class="todo-tasklist-date">\n									<i class="fa fa-calendar"></i>\n									<time is="relative-time" datetime="{{faxMessage.createdAt}}">\n										April 1, 2014\n									</time>\n								</span>\n								<span data-ng-show="faxMessage.status == \'FAILED\' || faxMessage.status == \'SENDING\'" class="badge badge-default" data-ng-class="{\'badge-error\': faxMessage.status == \'FAILED\', \'badge-warning\': faxMessage.status == \'SENDING\'}"> {{faxMessage.status | uppercase}} </span>\n								<br>\n								<br>\n								<span class="body">\n									<div class="wrapper" ng-controller="FaxInboxRoomCtrl" style="max-height:600px; overflow:auto;">\n					          <ng-pdf pdf-url="/api/fax/messages/{{faxMessage.id}}/content" template-url="/assets/plugins/angular-pdf/example/partials/viewer.html" scale="0.5" page=1></ng-pdf>\n					        </div>\n								</span>\n								<br>\n							</div>\n						</li>\n						</ul>\n					</div>\n				</div>\n				<div data-ng-class="{\'col-md-5 col-sm-5\': faxRoom, \'col-md-12 col-sm-12\': !faxRoom}">\n					<form name="forms.compose" data-ng-submit="forms.compose.$valid && sendFax()" class="form-horizontal" novalidate>\n						<!-- TASK HEAD -->\n						<div class="form">\n							<div class="form-group">\n								<div class="col-md-12 col-sm-12">\n									<div class="todo-taskbody-user">\n										<img class="todo-userpic pull-left" data-ng-src="api/users/avatar/{{getCurrentUser().userpic ? getCurrentUser().userpic : \'unknown_avatar\'}}" width="50px" height="50px">\n										<span class="todo-username pull-left">{{ getCurrentUser().fullname }}</span>\n									</div>\n								</div>\n							</div>\n							<!-- END TASK HEAD -->\n\n							<!-- FAX FROM -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.compose.from.$invalid && forms.compose.$submitted}">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-1">\n											<label class="control-label">{{\'APPLICATION_FROM\' | translate}}:</label>\n										</div>\n										<div class="col-md-11">\n											<ui-select data-ng-model="form.from" theme="bootstrap" name="from" required ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_FROM\' | translate}}...">{{$select.selected.name}} - {{$select.selected.phone}}</ui-select-match>\n												<ui-select-choices repeat="faxAccount in faxAccounts | filter: $select.search">\n													<div ng-bind-html="faxAccount.name | highlight: $select.search"></div>\n													<small ng-bind-html="faxAccount.phone | highlight: $select.search"></small>\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="forms.compose.from.$invalid && forms.compose.$submitted" class="help-block help-block-error">\n							          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							        </span>\n										</div>\n									</div>\n								</div>\n							</div>\n\n							<!-- FAX TO -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.compose.to.$invalid && forms.compose.$submitted}">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-1">\n											<label class="control-label">{{\'APPLICATION_TO\' | translate}}:</label>\n										</div>\n										<div class="col-md-11">\n											<ui-select tagging tagging-label="" multiple required data-ng-model="form.sto" theme="bootstrap" name="to" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_TO\' | translate}}...">{{$item}}</ui-select-match>\n												<ui-select-choices repeat="to in form.to | filter:$select.search">\n													{{to}}\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="forms.compose.to.$invalid && forms.compose.$submitted" class="help-block help-block-error">\n							          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							        </span>\n										</div>\n									</div>\n								</div>\n							</div>\n\n							<!-- TASK DESC -->\n							<div class="form-group">\n								<div class="col-md-12">\n									<!-- <textarea class="form-control todo-taskbody-taskdesc" rows="8" data-ng-model="form.text" name="text" style="resize: none;"></textarea> -->\n									<div class="inbox-editor inbox-wysihtml5" text-angular data-ng-model="form.html" name="html"></div>\n								</div>\n							</div>\n							<!-- END TASK DESC -->\n\n							<!-- START ATTACH -->\n							<div class="form-group">\n								<div class="col-md-6">\n									<input type="file" nv-file-select uploader="uploader" name="file">\n									<table class="table" border="0">\n										<tbody>\n										<tr data-ng-repeat="item in uploader.queue">\n												<td style="border-top-style:none">\n													<strong>\n														{{ item.file.name }}\n													</strong>\n												</td>\n												<td data-ng-show="uploader.isHTML5" nowrap style="border-top-style:none">\n													{{ item.file.size/1024/1024|number:2 }} MB\n												</td>\n												<td nowrap style="border-top-style:none">\n													<button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n															<span class="glyphicon glyphicon-trash"></span> Remove\n													</button>\n												</td>\n											</tr>\n										</tbody>\n									</table>\n								</div>\n								<div class="col-md-6">\n									<div class="form-actions right todo-form-actions">\n										<button class="btn btn-circle btn-sm green-haze">{{ \'APPLICATION_SEND\' | translate }}</button>\n										<input type="button" name="cancel" value="{{ \'APPLICATION_CANCEL\' | translate }}" class="btn btn-circle btn-sm btn-default" data-ng-click="cancel()">\n									</div>\n								</div>\n							</div>\n							<!-- END ATTACH -->\n\n						</div>\n					</form>\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n<!-- END TODO CONTENT -->\n'),a.put("app/fax/queue/list/list.html",'<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-paper-plane"></i>\n						<a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-layers"></i>\n						<a href="/fax/queues/lis">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-layers font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="faxQueues.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_QUEUE\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/fax/queues/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getFaxQueues([\'name\', \'description\', \'timeout\', \'strategy\'])" csv-header="[\'Name\', \'Description\', \'Timeout\', \'Strategy\']" field-separator=";" filename="fax_queues.csv">\n					<i class="icon-cloud-download"></i></a>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedFaxQueues" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="7">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.queuesByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="queueByPage in queuesByPage | filter: $select.search">\n													<div ng-bind-html="queueByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(queue, checked)" checklist-model checklist-value="id"></th>\n								<th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n								<th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th st-sort="strategy">{{ \'APPLICATION_STRATEGY\' | translate}}</th>\n								<th st-sort="timeout">{{ \'APPLICATION_AGENT_TIMEOUT\' | translate }}</th>\n						    <th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="queue in displayedFaxQueues" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="faxQueues.checked" checklist-value="queue.id"></td>\n					      <td>{{queue.name}}</td>\n								<td>{{queue.description}}</td>\n								<td>{{queue.strategy | uppercase}}</td>\n								<td>{{queue.timeout}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/fax/queues/view/{{queue.id}}/settings">\n										{{ \'APPLICATION_PROFILE\' | translate }}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(queue.name, queue.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedFaxQueues.length">\n								<td colspan="6" class="text-center">\n									<i>No available queues</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="strategy" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_STRATEGY\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td/>\n								<td/>\n						  </tr>\n					    <tr>\n					      <td colspan="67" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.queuesByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/fax/queue/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n				</div>\n			</div>\n			<div class="portlet-body" style="width: 50%; margin: 0 auto;">\n				<!-- BEGIN FORM-->\n				<form action="index.html" class="form-horizontal form-row-seperated">\n					<div class="form-body text-center">\n						<div class="form-group last">\n							<div class="col-md-9" id="multi-select-team">\n							</div>\n						</div>\n					</div>\n				</form>\n				<!-- END FORM-->\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/fax/queue/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getQueue()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-paper-plane"></i>\n					<a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-layers"></i>\n					<a href="/fax/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n					<i data-ng-show="queue" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="queue">\n					<a href="#">{{queue.name}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/queue.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{queue.name}}\n					</div>\n					<!-- <div class="profile-usertitle-job">\n						{{user.role}}\n					</div> -->\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.fax.queues.view.settings\')}">\n							<a data-ng-href="/fax/queues/view/{{queue.id}}/settings">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n						<li data-ng-class="{active: $state.is(\'main.fax.queues.view.agents\')}">\n							<a data-ng-href="/fax/queues/view/{{queue.id}}/agents">\n							<i class="icon-people"></i>\n							{{ \'APPLICATION_AGENTS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/fax/queue/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<form name="forms.general" data-ng-submit="forms.general.$valid && updateFaxQueue()" novalidate>\n					<!-- START NAME -->\n					<div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n						<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n						<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="queue.name" required/>\n						<span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n							<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n						</span>\n					</div>\n					<!-- END NAME -->\n\n					<!-- START DESCRIPTION -->\n					<div class="form-group">\n						<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n						<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="queue.description"/>\n					</div>\n					<!-- END DESCRIPTION -->\n\n					<!-- START TIMEOUT -->\n					<div class="form-group">\n						<label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}</label>\n						<input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" min="1" data-ng-model="queue.timeout"/>\n					</div>\n					<!-- END TIMEOUT -->\n\n					<!-- START HEADER SHAPE -->\n					<div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n						<label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}</label>\n						<!-- <input colorpicker type="text" name="animationToggle" placeholder="{{\'APPLICATION_BUTTON_COLOR\' | translate}}" class="form-control" data-ng-model="chatWebsite.animation" required/> -->\n						<ui-select data-ng-model="queue.strategy" name="strategy" theme="bootstrap">\n							<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n							<ui-select-choices repeat="strategy in [\'rrmemory\',\'beepall\'] | filter: $select.search">\n								<div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n							</ui-select-choices>\n						</ui-select>\n					</div>\n					<!-- END HEADER SHAPE -->\n					<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n				</form>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/fax/queue/wizard/wizard.html",'<div class="col-md-12">\n  <!-- BEGIN PAGE HEADER-->\n	<div class="page-bar">\n		<ul class="page-breadcrumb">\n			<li>\n				<i class="icon-rocket"></i>\n				<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-paper-plane"></i>\n				<a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n        <i class="fa fa-angle-right"></i>\n			</li>\n      <li>\n				<i class="icon-layers"></i>\n				<a href="/fax/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n			</li>\n		</ul>\n	</div>\n  <!-- END PAGE HEADER-->\n\n  <!-- BEGIN PORTLET-->\n  <div class="portlet light bordered">\n  	<div class="portlet-title">\n  		<div class="caption font-green-sharp">\n  			<i class="icon-layers font-green-sharp"></i>\n  			<span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }} WIZARD</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n  		<wizard on-finish="createItem()">\n				<wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.info.$valid)">\n					<form name="forms.general" data-ng-submit="forms.general.$valid && createItem()" novalidate>\n						<!-- START NAME -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n							<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n							<span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END NAME -->\n\n						<!-- START DESCRIPTION -->\n						<div class="form-group">\n							<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n							<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n						</div>\n						<!-- END DESCRIPTION -->\n\n						<!-- START TIMEOUT -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.timeout.$touched || forms.general.$submitted) && forms.general.timeout.$invalid}">\n							<label class="control-label">{{\'APPLICATION_AGENT_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<input type="number" min="0" name="timeout" placeholder="Timeout" class="form-control" data-ng-model="item.timeout" required/>\n							<span data-ng-show="(forms.general.timeout.$touched || forms.general.$submitted) && forms.general.timeout.$invalid && forms.general.timeout.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END TIMEOUT -->\n\n						<!-- START STRATEGY -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n							<label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<ui-select data-ng-model="item.strategy" name="strategy" theme="bootstrap" required>\n								<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n								<ui-select-choices repeat="strategy in [\'rrmemory\',\'beepall\'] | filter: $select.search">\n									<div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n								</ui-select-choices>\n							</ui-select>\n							<span data-ng-show="(forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid && forms.general.strategy.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END STRATEGY -->\n						<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n					</form>\n			  </wz-step>\n\n				<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n					<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n					<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n				</wz-step>\n  		</wizard>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),a.put("app/fax/timeline/list/list.html",'<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-paper-plane"></i>\n						<a href="#">{{ \'APPLICATION_FAX\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-list"></i>\n						<a href="/fax/timeline/list"> {{\'APPLICATION_TIMELINE\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initList()">\n	<div class="col-md-12">\n    <h3 class="page-title">\n				{{\'APPLICATION_TIMELINE\' | translate}}\n			</h3>\n			<!-- END PAGE HEADER-->\n			<!-- BEGIN PAGE CONTENT-->\n			<div class="timeline">\n				<!-- TIMELINE ITEM -->\n				<div class="timeline-item" data-ng-repeat="event in events | orderBy:\'-id\'">\n					<div class="timeline-badge">\n						<div class="timeline-icon">\n							<i class="icon-paper-plane font-green-haze"></i>\n						</div>\n					</div>\n					<div class="timeline-body">\n						<div class="timeline-body-arrow"></div>\n						<div class="timeline-body-head">\n							<div class="timeline-body-head-caption">\n								<span class="timeline-body-alerttitle" data-ng-class="{\'font-red\': event.name == \'INCOMING\', \'font-blue\': event.name == \'ATTEMPT\', \'font-green\': event.name == \'TAKEN\'}">{{event.name | uppercase}}</span>\n								<span class="timeline-body-time font-grey-cascade">{{\'APPLICATION_AT\' | translate}} {{event.createdAt | date:\'yyyy-MM-dd HH:mm:ss\'}}</span>\n							</div>\n							<div class="timeline-body-head-actions">\n								<div class="btn-group">\n									<a class="btn btn-circle btn-sm dropdown-toggle btn-success" href="/fax/inbox/room/{{event.FaxRoomId}}">{{\'APPLICATION_GO_TO\' | translate}} {{\'APPLICATION_FAX\' | translate}}</a>\n								</div>\n							</div>\n						</div>\n						<div class="timeline-body-content">\n							<span class="font-grey-cascade" data-ng-show="event.User">\n							{{event.FaxRoom.subject ? event.FaxRoom.subject + \' - \' : \'\'}}<a href="/agents/view/{{event.UserId}}/account">{{event.User.fullname}}</a>\n							</span>\n						</div>\n					</div>\n				</div>\n				<!-- END TIMELINE ITEM -->\n			</div>\n			<!-- END PAGE CONTENT-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/integration/list/list.html",'\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-game-controller"></i>\n					<a href="/integrations/list">{{ \'APPLICATION_INTEGRATIONS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered" data-ng-init="initList()">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-eye font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_INTEGRATIONS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n				  <span class="btn green-jungle btn-file">\n            <span> <i class="icon-plus"></i> New App </span>\n            <input type="file" accept=".zip" nv-file-select="" uploader="uploader"/>\n          </span>\n          <a class="btn btn-icon-only btn-default" href="#" ng-csv="displayedIntegrations" filename="integrations.csv">\n					<i class="icon-cloud-download"></i></a>\n					<a class="btn btn-icon-only btn-default fullscreen" href="#"></a>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedIntegrations" st-safe-src="integrations" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="6">\n									<div class="row">\n										<div class="col-md-6">\n											<select class="form-control input-small select2me" data-ng-model="integrationsByPage">\n												<option value="10">10</option>\n												<option value="25">25</option>\n												<option value="50">50</option>\n												<option value="{{integrations.length}}">{{ \'APPLICATION_ALL\' | translate }}</option>\n											</select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th st-sort="id" width="5%" st-sort-default="reverse">{{ \'APPLICATION_ID\' | translate }}</th>\n						    <th st-sort="fullname">{{ \'APPLICATION_NAME\' | translate }}</th>\n								<th st-sort="name">{{ \'APPLICATION_FILENAME\' | translate }}</th>\n								<th st-sort="name">{{ \'APPLICATION_VERSION\' | translate }}</th>\n						    <th st-sort="name">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n						    <th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="integration in displayedIntegrations">\n								<td>{{integration.id}}</td>\n								<td>{{integration.name}}</td>\n								<td>{{integration.filename}}</td>\n								<td>{{integration.version}}</td>\n					      <td>{{integration.description}}</td>\n								<td>\n									<span class="btn default btn-xs blue-stripe btn-file">\n				            <span> {{ \'APPLICATION_UPDATE\' | translate }} </span>\n				            <input type="file" accept=".zip" nv-file-select="" uploader="uploader"/>\n				          </span>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(integration.name, integration.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="integrations.length">\n								<td colspan="6" style="text-align:center;">\n									<i>No integrations available</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="id" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="filename" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_FILENAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n						    </td>\n								<td>\n						    </td>\n								<td>\n						    </td>\n						  </tr>\n					    <tr>\n					      <td colspan="6" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="integrationsByPage" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/interval/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-clock"></i>\n					<a href="/intervals/list">{{ \'APPLICATION_INTERVALS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-clock font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_INTERVALS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="intervals.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_INTERVAL\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/intervals/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getIntervals([\'name\'])" csv-header="[\'Name\']" field-separator=";" filename="intervals.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedIntervals" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="3">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.intervalsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="intervalByPage in intervalsByPage | filter: $select.search">\n													<div ng-bind-html="intervalByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(interval, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="interval in displayedIntervals">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="intervals.checked" checklist-value="interval.id"></td>\n								<td>{{interval.name}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/intervals/view/{{interval.id}}/settings">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(interval.name,interval.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedIntervals.length">\n								<td colspan="3" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_INTERVALS_AVAILABLE\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n						    </td>\n						  </tr>\n					    <tr>\n					      <td colspan="3" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.intervalsByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/interval/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getInterval()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-clock"></i>\n					<a href="/intervals/list">{{ \'APPLICATION_INTERVALS\' | translate }}</a>\n					<i data-ng-show="interval" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="interval">\n					<a href="#">{{interval.name}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/interval.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{interval.name}}\n					</div>\n					<!-- <div class="profile-usertitle-job">\n						{{user.role}}\n					</div> -->\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.intervals.view.settings\')}">\n							<a data-ng-href="/intervals/view/{{interval.id}}/settings">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n						<li data-ng-class="{active: $state.is(\'main.intervals.view.subintervals\') || $state.is(\'main.intervals.view.subinterval\') || $state.is(\'main.intervals.view.subintervals.settings\')}">\n							<a data-ng-href="/intervals/view/{{interval.id}}/subintervals">\n							<i class="icon-list"></i>\n							{{ \'APPLICATION_SUBINTERVALS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/interval/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_INTERVAL\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n\n			<div class="portlet-body">\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.general" data-ng-submit="forms.general.$valid && updateInterval()" novalidate>\n\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="interval.name" required/>\n								<span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END ADVANCED TAB -->\n\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/interval/view/view.subinterval.html",'\n<div class="row" data-ng-init="initSubInterval()">\n	<div class="col-md-12">\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_NEW_SUBINTERVAL\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="createItem()">\n          <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.subinterval.name.$valid)">\n            <form name="forms.subinterval" novalidate>\n\n              <!-- START NAME -->\n              <div class="form-group" data-ng-class="{\'has-error\': (forms.subinterval.name.$touched || forms.subinterval.$submitted) && forms.subinterval.name.$invalid}">\n                <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n                <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="subinterval.name" required/>\n                <span data-ng-show="(forms.subinterval.name.$touched || forms.subinterval.$submitted) && forms.subinterval.name.$error.required" class="help-block help-block-error">\n                  <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                </span>\n              </div>\n              <!-- END NAME -->\n\n							<!-- START TIME -->\n              <div class="form-group">\n                <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n                <div class="input-group input-large">\n									<fieldset class="pull-left" ng-disabled="splittedInterval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="splittedInterval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n                  <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n									<fieldset ng-disabled="splittedInterval.alwaysTime"><uib-timepicker  name="t_to" data-ng-model="splittedInterval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n									<label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="splittedInterval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label>\n                </div>\n              </div>\n              <!-- END TIME -->\n\n              <!-- START WEEKDAY -->\n              <div class="form-group">\n                <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n                <div class="input-group input-large">\n                  <ui-select data-ng-model="splittedInterval.wd_from" theme="bootstrap" name="wd_from">\n                    <ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n                    <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n                      {{$translate.instant(weekDay.name)}}\n                    </ui-select-choices>\n                  </ui-select>\n                  <span class="input-group-addon">to</span>\n                  <ui-select data-ng-model="splittedInterval.wd_to" theme="bootstrap" name="wd_to">\n                    <ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n                    <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n                      {{$translate.instant(weekDay.name)}}\n                    </ui-select-choices>\n                  </ui-select>\n                </div>\n              </div>\n              <!-- END WEEKDAY -->\n\n              <!-- START MONTHDAY -->\n              <div class="form-group">\n                <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n                <div class="input-group input-large">\n                  <ui-select data-ng-model="splittedInterval.md_from" theme="bootstrap" name="md_from">\n                    <ui-select-match>{{$select.selected}}</ui-select-match>\n                    <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n                      {{monthDay}}\n                    </ui-select-choices>\n                  </ui-select>\n                  <span class="input-group-addon">to</span>\n                  <ui-select data-ng-model="splittedInterval.md_to" theme="bootstrap" name="md_to">\n                    <ui-select-match>{{$select.selected}}</ui-select-match>\n                    <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n                      {{monthDay}}\n                    </ui-select-choices>\n                  </ui-select>\n                </div>\n              </div>\n              <!-- END MONTHDAY -->\n\n              <!-- START MONTH -->\n              <div class="form-group">\n                <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n                <div class="input-group input-large">\n                  <ui-select data-ng-model="splittedInterval.m_from" theme="bootstrap" name="m_from">\n                    <ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n                    <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n                      {{$translate.instant(month.name)}}\n                    </ui-select-choices>\n                  </ui-select>\n                  <span class="input-group-addon">to</span>\n                  <ui-select data-ng-model="splittedInterval.m_to" theme="bootstrap" name="m_to">\n                    <ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n                    <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n                      {{$translate.instant(month.name)}}\n                    </ui-select-choices>\n                  </ui-select>\n                </div>\n              </div>\n              <!-- END MONTH -->\n\n\n\n							<button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n            </form>\n          </wz-step>\n\n\n						<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n							<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n							<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n							<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n						</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/interval/view/view.subintervalSettings.html",'\n<div class="row" data-ng-init="getSubInterval()">\n	<div class="col-md-12">\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_SUBINTERVAL_SETTINGS\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="updateItem()">\n					<div class="profile-usertitle-name">\n						{{subinterval.name}}\n					</div>\n          <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.subinterval.name.$valid)">\n            <form name="forms.subinterval" novalidate>\n\n              <!-- START NAME -->\n              <div class="form-group" data-ng-class="{\'has-error\': (forms.subinterval.name.$touched || forms.subinterval.$submitted) && forms.subinterval.name.$invalid}">\n                <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n                <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="subinterval.name" required/>\n                <span data-ng-show="(forms.subinterval.name.$touched || forms.subinterval.$submitted) && forms.subinterval.name.$error.required" class="help-block help-block-error">\n                  <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                </span>\n              </div>\n              <!-- END NAME -->\n\n              <!-- START TIME -->\n              <div class="form-group">\n                <label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n                <div class="input-group input-large">\n									<fieldset class="pull-left" ng-disabled="splittedInterval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="splittedInterval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n                  <div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n									<fieldset ng-disabled="splittedInterval.alwaysTime"><uib-timepicker  name="t_to" data-ng-model="splittedInterval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n									<label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="splittedInterval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label>\n                </div>\n              </div>\n              <!-- END TIME -->\n\n              <!-- START WEEKDAY -->\n              <div class="form-group">\n                <label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n                <div class="input-group input-large">\n                  <ui-select data-ng-model="splittedInterval.wd_from" theme="bootstrap" name="wd_from">\n                    <ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n                    <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n                      {{$translate.instant(weekDay.name)}}\n                    </ui-select-choices>\n                  </ui-select>\n                  <span class="input-group-addon">to</span>\n                  <ui-select data-ng-model="splittedInterval.wd_to" theme="bootstrap" name="wd_to">\n                    <ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n                    <ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n                      {{$translate.instant(weekDay.name)}}\n                    </ui-select-choices>\n                  </ui-select>\n                </div>\n              </div>\n              <!-- END WEEKDAY -->\n\n              <!-- START MONTHDAY -->\n              <div class="form-group">\n                <label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n                <div class="input-group input-large">\n                  <ui-select data-ng-model="splittedInterval.md_from" theme="bootstrap" name="md_from">\n                    <ui-select-match>{{$select.selected}}</ui-select-match>\n                    <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n                      {{monthDay}}\n                    </ui-select-choices>\n                  </ui-select>\n                  <span class="input-group-addon">to</span>\n                  <ui-select data-ng-model="splittedInterval.md_to" theme="bootstrap" name="md_to">\n                    <ui-select-match>{{$select.selected}}</ui-select-match>\n                    <ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n                      {{monthDay}}\n                    </ui-select-choices>\n                  </ui-select>\n                </div>\n              </div>\n              <!-- END MONTHDAY -->\n\n              <!-- START MONTH -->\n              <div class="form-group">\n                <label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n                <div class="input-group input-large">\n                  <ui-select data-ng-model="splittedInterval.m_from" theme="bootstrap" name="m_from">\n                    <ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n                    <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n                      {{$translate.instant(month.name)}}\n                    </ui-select-choices>\n                  </ui-select>\n                  <span class="input-group-addon">to</span>\n                  <ui-select data-ng-model="splittedInterval.m_to" theme="bootstrap" name="m_to">\n                    <ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n                    <ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n                      {{$translate.instant(month.name)}}\n                    </ui-select-choices>\n                  </ui-select>\n                </div>\n              </div>\n              <!-- END MONTH -->\n\n\n\n							<button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n            </form>\n          </wz-step>\n\n\n						<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n							<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n							<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n							<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n						</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/interval/view/view.subintervals.html",'<div ui-view class="profile-content">\n<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title  tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SUBINTERVALS\' | translate}}</span>\n				</div>\n				<div class="actions">\n					<div class="btn-group">\n						<a class="btn green-jungle " href="/intervals/view/{{interval.id}}/subinterval" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_SUBINTERVAL\' | translate }}\n						</a>\n					</div>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table class="table table-striped table-bordered table-hover">\n					  <thead>\n						  <tr>\n						    <th>{{ \'APPLICATION_NAME\' | translate }}</th>\n						    <th>{{ \'APPLICATION_TIME\' | translate }}</th>\n								<th width="20%">{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody data-ng-model="subIntervals">\n					    <tr data-ng-repeat="subinterval in subIntervals">\n								<td>{{subinterval.name}}</td>\n								<td>{{subinterval.interval}}</td>\n					      <td>\n									<a class="btn default btn-xs blue-stripe" data-ng-href="/intervals/view/{{interval.id}}/subintervals/settings/{{subinterval.id}}">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(subinterval.name+\' interval\',subinterval.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="subIntervals.length">\n								<td colspan="3" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_SUBINTERVALS_AVAILABLE\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n	</div>\n</div>\n</div>\n'),a.put("app/interval/wizard/wizard.html",'<div class="col-md-12">\n  <!-- BEGIN PAGE HEADER-->\n	<div class="page-bar">\n		<ul class="page-breadcrumb">\n			<li>\n				<i class="icon-rocket"></i>\n				<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-clock"></i>\n				<a href="/intervals/list">{{ \'APPLICATION_INTERVALS\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-options"></i>\n				<a href="/intervals/wizard">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n			</li>\n		</ul>\n	</div>\n  <!-- END PAGE HEADER-->\n\n  <!-- BEGIN PORTLET-->\n  <div class="portlet light bordered" data-ng-init="getContexts()">\n  	<div class="portlet-title">\n  		<div class="caption font-green-sharp">\n  			<i class="icon-clock font-green-sharp"></i>\n  			<span class="caption-subject">{{ \'APPLICATION_INTERVAL\' | translate }} WIZARD</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n  		<wizard on-finish="createItem()">\n				<wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.interval.$valid)">\n			    <form name="forms.interval" novalidate>\n\n            <!-- START NAME -->\n            <div class="form-group" data-ng-class="{\'has-error\': (forms.interval.name.$touched || forms.interval.$submitted) && forms.interval.name.$invalid}">\n              <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n              <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n              <span data-ng-show="(forms.interval.name.$touched || forms.interval.$submitted) && forms.interval.name.$error.required" class="help-block help-block-error">\n                <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n              </span>\n            </div>\n            <!-- END NAME -->\n\n						<button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n			    </form>\n			  </wz-step>\n\n				<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n					<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n					<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n					<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n				</wz-step>\n  		</wizard>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),a.put("app/login/login.html",'<!-- BEGIN LOGO -->\n<div class="logo">\n	<a href="index.html">\n	<img src="assets/images/logo-big.png" alt=""/>\n	</a>\n</div>\n<!-- END LOGO -->\n<!-- BEGIN LOGIN -->\n<div class="content">\n	<!-- BEGIN LOGIN FORM -->\n	<form class="login-form" name="loginForm" data-ng-show="!flagLogin1" data-ng-submit="login(loginForm)" novalidate>\n		<h3 class="form-title">Sign In</h3>\n		<div class="alert alert-danger" data-ng-class="{\'display-hide\': !loginSubmitted || !errorLogin}">\n			<button class="close" data-close="alert"></button>\n			<span>{{ errorLog ? errorLog : \'Enter any username and password.\'}}</span>\n		</div>\n		<div class="form-group" data-ng-class="{\'has-error\': loginSubmitted && loginForm.name.$invalid}">\n			<label class="control-label">Username</label>\n      <div class="input-icon">\n        <i class="fa fa-user"></i>\n        <input ng-enter="login(loginForm)" class="form-control form-control-solid placeholder-no-fix" type="text" autocomplete="off" placeholder="Username" name="name" ng-model="userLogin.name" required/>\n      </div>\n      <span data-ng-show="loginSubmitted && loginForm.name.$invalid" class="help-block">Username is required.</span>\n		</div>\n		<div class="form-group" data-ng-class="{\'has-error\': loginSubmitted && loginForm.password.$invalid}">\n			<label class="control-label">Password</label>\n      <div class="input-icon">\n        <i class="fa fa-lock"></i>\n        <input ng-enter="login(loginForm)" class="form-control form-control-solid placeholder-no-fix" type="password" autocomplete="off" placeholder="Password" name="password" ng-model="userLogin.password" required/>\n      </div>\n      <span data-ng-show="loginSubmitted && loginForm.password.$invalid" class="help-block">Password is required.</span>\n		</div>\n		<div class="form-actions">\n			<button type="submit" class="btn btn-success uppercase">Login</button>\n      <label class="rememberme check">\n        <input type="checkbox"> Remember me\n      </label>\n			<!-- <label class="rememberme check">\n			<input type="checkbox" name="remember" value="1"/>Remember </label> -->\n			<!-- <a href="javascript:;" id="forget-password" class="forget-password">Forgot Password?</a> -->\n		</div>\n		<div class="login-options">\n			<h4>Follow Us on</h4>\n			<ul class="social-icons">\n				<li>\n					<a class="social-icon-color facebook" data-original-title="facebook" href="https://www.facebook.com/xenialab"></a>\n				</li>\n				<li>\n					<a class="social-icon-color twitter" data-original-title="Twitter" href="https://twitter.com/xenialab"></a>\n				</li>\n				<li>\n					<a class="social-icon-color googleplus" data-original-title="Goole Plus" href="#"></a>\n				</li>\n				<li>\n					<a class="social-icon-color linkedin" data-original-title="Linkedin" href="#"></a>\n				</li>\n			</ul>\n		</div>\n	</form>\n</div>\n<div class="copyright">\n	 2016 © xCALLY MOTION.\n</div>\n<!-- END LOGIN -->\n'),a.put("app/mail/account/list/list.html",'<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-envelope"></i>\n						<a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-notebook"></i>\n						<a href="#">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="mailAccounts.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/mail/accounts/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getMailAccounts([\'name\', \'description\', {MailServerIn:\'username\'}])" csv-header="[\'Name\', \'Description\', \'Email Address\']" field-separator=";" filename="mail_accounts.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedMailAccounts" st-pipe="initList" class="table table-striped table-bordered table-hover">\n				  <thead>\n						<tr>\n							<th colspan="6">\n								<div class="row">\n									<div class="col-md-6">\n										<ui-select class="input-xsmall" ng-model="conf.mailAccountsByPage" theme="bootstrap" ng-disabled="disabled">\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n											<ui-select-choices repeat="mailAccountByPage in mailAccountsByPage | filter: $select.search">\n												<div ng-bind-html="mailAccountByPage.name | highlight: $select.search"></div>\n											</ui-select-choices>\n										</ui-select>\n									</div>\n									<div class="col-md-6">\n										<div class="input-group input-medium pull-right">\n											<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n											<span class="input-group-addon">\n												<i class="fa fa-search"></i>\n											</span>\n										</div>\n									</div>\n								</div>\n							</th>\n						</tr>\n					  <tr>\n							<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(mailAccount, checked)" checklist-model checklist-value="id"></th>\n					    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n							<th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n							<th st-sort="email">{{ \'APPLICATION_EMAIL\' | translate }}</th>\n							<th st-sort="description"> IMAP</th>\n							<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n					  </tr>\n				  </thead>\n				  <tbody>\n				    <tr data-ng-repeat="mailAccount in displayedMailAccounts">\n							<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="mailAccounts.checked" checklist-value="mailAccount.id"></td>\n				      <td>{{mailAccount.name}}</td>\n							<td>{{mailAccount.description}}</td>\n							<td><a ng-href="mailto:{{mailAccount.MailServerIn.username}}">{{mailAccount.MailServerIn.username}}</a></td>\n							<td>\n								<span class="label label-sm" data-ng-class="mailAccount.MailServerIn.state === \'CONNECTED\' ? \'label-success\' : \'label-danger\'">\n									{{ mailAccount.MailServerIn.state | uppercase }}\n								</span>\n							</td>\n				      <td>\n				        <a class="btn default btn-xs blue-stripe" data-ng-href="/mail/accounts/view/{{mailAccount.id}}/settings">\n									{{ \'APPLICATION_PROFILE\' | translate }}\n				        </a>\n				        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(mailAccount.name, mailAccount.id)">\n									{{ \'APPLICATION_DELETE\' | translate }}\n				        </a>\n				      </td>\n				    </tr>\n						<tr data-ng-hide="displayedMailAccounts.length">\n							<td colspan="6" class="text-center">\n							<i>{{ \'MESSAGE_NO_AVAILABLE_ACCOUNTS\' | translate }}</i>\n							</td>\n						</tr>\n				  </tbody>\n				  <tfoot>\n						<tr>\n							<td/>\n					    <td>\n								<div class="input-icon right">\n									<i class="fa fa-search"></i>\n									<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_USERNAME\' | translate | lowercase}}" class="form-control" type="search"/>\n								</div>\n					    </td>\n							<td>\n								<div class="input-icon right">\n									<i class="fa fa-search"></i>\n									<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n								</div>\n					    </td>\n							<!-- <td>\n								<div class="input-icon right">\n									<i class="fa fa-search"></i>\n									<input st-search="address" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_EMAIL\' | translate | lowercase}}" class="form-control" type="search"/>\n								</div>\n					    </td> -->\n					    <td/>\n							<td/>\n					  </tr>\n						<tr>\n							<td colspan="6" class="text-center">\n								<div class="pagination" st-pagination st-items-by-page="conf.mailAccountsByPage.value" st-displayed-pages="7"></div>\n							</td>\n						</tr>\n				  </tfoot>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/mail/account/view/action/list/list.html",'<div class="row" data-ng-init="initActons()">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title  tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n				</div>\n				<div class="actions">\n					<div class="btn-group">\n						<a class="btn green-jungle " href="/mail/accounts/view/{{account.id}}/actions/wizard" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACTION\' | translate }}\n						</a>\n					</div>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table class="table table-striped table-bordered table-hover">\n					  <thead>\n						  <tr>\n						    <th class="input-small" align="center">{{\'APPLICATION_APPLICATION\' | translate}}</th>\n								<th class="input-small" align="center">{{\'APPLICATION_TIMEOUT\' | translate}} [s]</th>\n						    <th align="center">{{ \'APPLICATION_INTERVAL\' | translate }}</th>\n								<th class="input-small">{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody ui-sortable="sortableOptions" data-ng-model="mailApplications">\n					    <tr data-ng-repeat="application in mailApplications">\n								<!-- <td><span data-ng-class="{\'label-info\': application.app == \'agent\', \'label-success\': application.app == \'queue\'}" class="label label-sm"> {{application.app}} </span></td> -->\n								<td align="center">\n									<span>\n										<i data-ng-class="application.User ? \'icon-user\' : \'icon-docs\'"></i>\n									</span>\n								</td>\n								<td align="center">{{application.timeout}}</td>\n								<td align="center">{{application.Interval ? application.Interval.name : application.interval}}</td>\n								<td>\n									<a class="btn default btn-xs blue-stripe" data-ng-href="/mail/accounts/view/{{account.id}}/actions/view/{{application.id}}">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(application.app, application.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="mailApplications.length">\n								<td colspan="5" style="text-align:center;">\n									<i>No applications available</i>\n								</td>\n							</tr>\n					  </tbody>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/mail/account/view/action/view/view.html",'\n<div class="row" data-ng-init="initAction()">\n	<div class="col-md-12">\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-directions font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }}</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<form name="forms.settings" ng-submit="updateItem()" novalidate>\n					<!-- START APP -->\n					<div class="form-group"  data-ng-class="{\'has-error\': (forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid}">\n						<label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n						<ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n							<ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n							<ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n								<div ng-bind-html="app.name | highlight: $select.search"></div>\n							</ui-select-choices>\n						</ui-select>\n						<span data-ng-show="(forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid && forms.settings.app.$error.required" class="help-block help-block-error">\n							<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n						</span>\n					</div>\n					<!-- END APP -->\n\n					<!-- START HOST -->\n					<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n						<label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n						<input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="0" required/>\n						<span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n							<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n						</span>\n					</div>\n					<!-- END HOST -->\n\n					<div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n						<!-- START QUEUE -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n							<label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<ui-select data-ng-model="application.MailQueueId" name="queue" theme="bootstrap" required>\n								<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n								<ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n									<div ng-bind-html="queue.name | highlight: $select.search"></div>\n								</ui-select-choices>\n							</ui-select>\n							<span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END QUEUE -->\n					</div>\n\n					<div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n						<!-- START AGENT -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$invalid}">\n							<label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n								<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n								<ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n									<div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n								</ui-select-choices>\n							</ui-select>\n							<span data-ng-show="(forms.settings.agent.$touched || forms.settings.$submitted) && forms.settings.agent.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END AGENT -->\n					</div>\n\n					<!-- START INTERVAL_TYPE -->\n					<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$invalid}">\n						<label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n						<ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n							<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n							<ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n								{{ intType.name | translate }}\n							</ui-select-choices>\n						</ui-select>\n						<span data-ng-show="(forms.settings.intType.$touched || forms.settings.$submitted) && forms.settings.intType.$error.required" class="help-block help-block-error">\n							<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n						</span>\n					</div>\n					<!-- END INTERVAL_TYPE -->\n\n					<div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n						<!-- START TIME -->\n						<div class="form-group">\n							<label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n							<div class="input-group input-large">\n								<fieldset class="pull-left" ng-disabled="application.alwaysTime">\n									<uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n								</fieldset>\n								<div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n								<fieldset ng-disabled="application.alwaysTime"><uib-timepicker  name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n								<!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n							</div>\n						</div>\n						<!-- END TIME -->\n\n						<!-- START ALWAYS -->\n						<div class="form-group">\n							<label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n							<div class="input-group input-large">\n								<label class="control-label pointer-cursor">\n									<input\n										bs-switch\n										data-ng-model="application.alwaysTime"\n										type="checkbox"\n										switch-active="{{ isActive }}"\n										switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n										switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n										switch-on-color="{{ onColor }}"\n										switch-off-color="{{ offColor }}"\n										switch-animate="{{ animate }}"\n										switch-size="{{ size }}"\n										switch-label="{{ label }}"\n										switch-icon="{{ icon }}"\n										switch-radio-off="{{ radioOff }}"\n										switch-label-width="{{ labelWidth }}"\n										switch-handle-width="{{ handleWidth }}">\n									<!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n								</label>\n							</div>\n						</div>\n						<!-- END ALWAYS -->\n\n						<!-- START WEEKDAY -->\n						<div class="form-group">\n							<label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n							<div class="input-group input-large">\n								<ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n									<ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n									<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n										{{ weekDay.name | translate}}\n									</ui-select-choices>\n								</ui-select>\n								<span class="input-group-addon">to</span>\n								<ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n									<ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n									<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n										{{ weekDay.name | translate }}\n									</ui-select-choices>\n								</ui-select>\n							</div>\n						</div>\n						<!-- END WEEKDAY -->\n\n						<!-- START MONTHDAY -->\n						<div class="form-group">\n							<label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n							<div class="input-group input-large">\n								<ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n									<ui-select-match>{{$select.selected}}</ui-select-match>\n									<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n										{{monthDay}}\n									</ui-select-choices>\n								</ui-select>\n								<span class="input-group-addon">to</span>\n								<ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n									<ui-select-match>{{$select.selected}}</ui-select-match>\n									<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n										{{monthDay}}\n									</ui-select-choices>\n								</ui-select>\n							</div>\n						</div>\n						<!-- END MONTHDAY -->\n\n						<!-- START MONTH -->\n						<div class="form-group">\n							<label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n							<div class="input-group input-large">\n								<ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n									<ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n									<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n										{{ month.name | translate }}\n									</ui-select-choices>\n								</ui-select>\n								<span class="input-group-addon">to</span>\n								<ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n									<ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n									<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n										{{ month.name | translate }}\n									</ui-select-choices>\n								</ui-select>\n							</div>\n						</div>\n						<!-- END MONTH -->\n					</div>\n\n					<div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n						<!-- START INTERVALS -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$invalid}">\n							<label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n								<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n								<ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n									{{ interval.name}}\n								</ui-select-choices>\n							</ui-select>\n							<span data-ng-show="(forms.settings.IntervalId.$touched || forms.settings.$submitted) && forms.settings.IntervalId.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END INTERVALS -->\n\n					</div>\n					<button class="btn green-haze" type="submit">{{\'APPLICATION_UPDATE\' | translate}}</button>\n				</form>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/mail/account/view/action/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n	<div class="col-md-12">\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-directions font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_ACTION\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="createItem()">\n					<wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.action.$valid)">\n						<form name="forms.action" novalidate>\n							<!-- START APP -->\n							<div class="form-group"  data-ng-class="{\'has-error\': forms.action.$submitted && forms.action.app.$invalid}">\n								<label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="application.app" name="app" theme="bootstrap" required>\n									<ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n									<ui-select-choices repeat="app.value as app in apps | filter: $select.search">\n										<div ng-bind-html="app.name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span data-ng-show="forms.action.$submitted && forms.action.app.$invalid" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END APP -->\n\n							<!-- START HOST -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid}">\n								<label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="number" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="application.timeout" min="0" required/>\n								<span data-ng-show="(forms.action.timeout.$touched || forms.action.$submitted) && forms.action.timeout.$invalid && forms.action.timeout.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END HOST -->\n\n							<div class="app-settings" ng-slide-down="application.app === \'queue\'" lazy-render duration="1" data-ng-init="getQueues()">\n								<!-- START QUEUE -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$invalid}">\n									<label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="application.MailQueueId" name="queue" theme="bootstrap" required>\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n										<ui-select-choices repeat="queue.id as queue in queues | filter: $select.search">\n											<div ng-bind-html="queue.name | highlight: $select.search"></div>\n										</ui-select-choices>\n									</ui-select>\n									<span data-ng-show="(forms.action.queue.$touched || forms.action.$submitted) && forms.action.queue.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END QUEUE -->\n							</div>\n\n							<div class="app-settings" ng-slide-down="application.app === \'agent\'" lazy-render duration="1" data-ng-init="getAgents()">\n								<!-- START AGENT -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$invalid}">\n									<label class="control-label">{{\'APPLICATION_AGENT\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="application.UserId" name="agent" theme="bootstrap" required>\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.fullname}}</ui-select-match>\n										<ui-select-choices repeat="agent.id as agent in agents | filter: $select.search">\n											<div ng-bind-html="agent.fullname | highlight: $select.search"></div>\n										</ui-select-choices>\n									</ui-select>\n									<span data-ng-show="(forms.action.agent.$touched || forms.action.$submitted) && forms.action.agent.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END AGENT -->\n							</div>\n\n							<!-- START INTERVAL_TYPE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$invalid}">\n								<label class="control-label">{{ \'APPLICATION_INTERVAL_TYPE\' | translate }}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="application.intType" theme="bootstrap" name="intType" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name | translate }}</ui-select-match>\n									<ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n										{{ intType.name | translate }}\n									</ui-select-choices>\n								</ui-select>\n								<span data-ng-show="(forms.action.intType.$touched || forms.action.$submitted) && forms.action.intType.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END INTERVAL_TYPE -->\n\n							<div class="app-settings" ng-slide-down="application.intType === \'custom\'" lazy-render duration="1">\n								<!-- START TIME -->\n								<div class="form-group">\n									<label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n									<div class="input-group input-large">\n										<fieldset class="pull-left" ng-disabled="application.alwaysTime">\n											<uib-timepicker name="t_from" data-ng-model="application.t_from" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker>\n										</fieldset>\n										<div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n										<fieldset ng-disabled="application.alwaysTime"><uib-timepicker  name="t_to" data-ng-model="application.t_to" show-meridian="false" show-spinners="false" mousewheel="false"></uib-timepicker></fieldset>\n										<!-- <label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="application.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label> -->\n									</div>\n								</div>\n								<!-- END TIME -->\n\n								<!-- START ALWAYS -->\n								<div class="form-group">\n									<label class="control-label">{{ \'APPLICATION_ALWAYS\' | translate }}</label>\n									<div class="input-group input-large">\n										<label class="control-label pointer-cursor">\n											<input\n												bs-switch\n												data-ng-model="application.alwaysTime"\n												type="checkbox"\n												switch-active="{{ isActive }}"\n												switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n												switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n												switch-on-color="{{ onColor }}"\n												switch-off-color="{{ offColor }}"\n												switch-animate="{{ animate }}"\n												switch-size="{{ size }}"\n												switch-label="{{ label }}"\n												switch-icon="{{ icon }}"\n												switch-radio-off="{{ radioOff }}"\n												switch-label-width="{{ labelWidth }}"\n												switch-handle-width="{{ handleWidth }}">\n											<!-- <input type="checkbox" data-ng-model="application.alwaysTime"> -->\n										</label>\n									</div>\n								</div>\n								<!-- END ALWAYS -->\n\n								<!-- START WEEKDAY -->\n								<div class="form-group">\n									<label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n									<div class="input-group input-large">\n										<ui-select data-ng-model="application.wd_from" theme="bootstrap" name="wd_from">\n											<ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n											<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n												{{ weekDay.name | translate}}\n											</ui-select-choices>\n										</ui-select>\n										<span class="input-group-addon">to</span>\n										<ui-select data-ng-model="application.wd_to" theme="bootstrap" name="wd_to">\n											<ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n											<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n												{{ weekDay.name | translate }}\n											</ui-select-choices>\n										</ui-select>\n									</div>\n								</div>\n								<!-- END WEEKDAY -->\n\n								<!-- START MONTHDAY -->\n								<div class="form-group">\n									<label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n									<div class="input-group input-large">\n										<ui-select data-ng-model="application.md_from" theme="bootstrap" name="md_from">\n											<ui-select-match>{{$select.selected}}</ui-select-match>\n											<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n												{{monthDay}}\n											</ui-select-choices>\n										</ui-select>\n										<span class="input-group-addon">to</span>\n										<ui-select data-ng-model="application.md_to" theme="bootstrap" name="md_to">\n											<ui-select-match>{{$select.selected}}</ui-select-match>\n											<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n												{{monthDay}}\n											</ui-select-choices>\n										</ui-select>\n									</div>\n								</div>\n								<!-- END MONTHDAY -->\n\n								<!-- START MONTH -->\n								<div class="form-group">\n									<label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n									<div class="input-group input-large">\n										<ui-select data-ng-model="application.m_from" theme="bootstrap" name="m_from">\n											<ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n											<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n												{{ month.name | translate }}\n											</ui-select-choices>\n										</ui-select>\n										<span class="input-group-addon">to</span>\n										<ui-select data-ng-model="application.m_to" theme="bootstrap" name="m_to">\n											<ui-select-match placeholder="">{{ $select.selected.name | translate }}</ui-select-match>\n											<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n												{{ month.name | translate }}\n											</ui-select-choices>\n										</ui-select>\n									</div>\n								</div>\n								<!-- END MONTH -->\n							</div>\n\n							<div class="app-settings" ng-slide-down="application.intType === \'list\'" lazy-render duration="1" data-ng-init="getIntervals()">\n\n								<!-- START INTERVALS -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$invalid}">\n									<label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="application.IntervalId" theme="bootstrap" name="IntervalId" required>\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{ $select.selected.name}}</ui-select-match>\n										<ui-select-choices repeat="interval.id as interval in intervals | filter: $select.search">\n											{{ interval.name}}\n										</ui-select-choices>\n									</ui-select>\n									<span data-ng-show="(forms.action.IntervalId.$touched || forms.action.$submitted) && forms.action.IntervalId.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END INTERVALS -->\n\n							</div>\n\n							<input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONTINUE\' | translate}}"/>\n						</form>\n					</wz-step>\n					<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n						<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n						<!-- <button class="btn green-haze" type="button" wz-previous><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button> -->\n						<input class="btn green-haze" type="submit" data-ng-click="next()" value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n					</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/mail/account/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row" data-ng-init="initView()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-envelope"></i>\n					<a href="/">{{ \'APPLICATION_MAIL\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-notebook"></i>\n					<a href="/mail/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n					<i class="fa fa-angle-right" data-ng-show="account"></i>\n				</li>\n				<li data-ng-show="account">\n					<a href="#">{{ account.description || account.name }}</a>\n				</li>\n			</ul>\n		</div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img ng-src="assets/images/media/account.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{ account.description || account.name }}\n					</div>\n					<div class="profile-usertitle-job">\n						{{account.email}}\n					</div>\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li ng-class="{active: $state.is(\'main.mail.accounts.view.settings\')}">\n							<a href="/mail/accounts/view/{{account.id}}/settings">\n							<i class="icon-settings"></i>\n							{{\'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n						<li ng-class="{active: $state.includes(\'main.mail.accounts.view.actions\')}">\n							<a href="/mail/accounts/view/{{account.id}}/actions/list">\n							<i class="icon-directions"></i>\n							{{\'APPLICATION_ACTIONS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/mail/account/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_2" data-toggle="tab">IMAP</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_3" data-toggle="tab">SMTP</a>\n					</li>\n				</ul>\n			</div>\n			<div class="portlet-body">\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.formInfo" data-ng-submit="forms.formInfo.$valid && updateItemMailAccount()" novalidate>\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formInfo.name.$touched || forms.formInfo.$submitted) && forms.formInfo.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n								<span data-ng-show="(forms.formInfo.name.$touched || forms.formInfo.$submitted) && forms.formInfo.name.$invalid && forms.formInfo.name.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n							</div>\n							<!-- END DESCRIPTION -->\n\n							<!-- START EMAIL -->\n							<!-- <div class="form-group" data-ng-class="{\'has-error\': (forms.formInfo.address.$touched || forms.formInfo.$submitted) && forms.formInfo.address.$invalid}">\n								<label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="address" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="account.address" required/>\n								<span data-ng-show="(forms.formInfo.infoEmail.$touched || forms.formInfo.$submitted) && forms.formInfo.address.$invalid && forms.formInfo.address.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div> -->\n							<!-- END EMAIL -->\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END GENERAL TAB -->\n\n					<!-- IMAP TAB -->\n					<div class="tab-pane" id="tab_1_2">\n						<form name="forms.formIn" data-ng-submit="forms.formIn.$valid && updateItemMailServerIn()" novalidate>\n							<!-- START PROTOCOL -->\n							<!-- <div class="form-group">\n								<label class="control-label">IMAP/POP3</label>\n								<button type="button" name="protocol" class="btn btn-default form-control" data-ng-model="account.MailServerIn.protocol" bs-checkbox>{{account.MailServerIn.protocol ? \'IMAP\' : \'POP3\'}}</button>\n							</div> -->\n							<!-- END PROTOCOL -->\n\n							<!-- START HOST -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formIn.host.$touched || forms.formIn.$submitted) && forms.formIn.host.$invalid}">\n								<label class="control-label">{{\'APPLICATION_HOST\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.host" required/>\n								<span data-ng-show="(forms.formIn.host.$touched || forms.formIn.$submitted) && forms.formIn.host.$invalid && forms.formIn.host.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END HOST -->\n\n							<!-- START USERNAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formIn.username.$touched || forms.formIn.$submitted) && forms.formIn.username.$invalid}">\n								<label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.username" name="username" required/>\n								<span data-ng-show="(forms.formIn.username.$touched || forms.formIn.$submitted) && forms.formIn.username.$invalid && forms.formIn.username.$error.required"  class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END USERNAME -->\n\n							<!-- START PASSWORD -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formIn.password.$touched || forms.formIn.$submitted) && forms.formIn.password.$invalid}">\n								<label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.password" required/>\n								<span data-ng-show="(forms.formIn.password.$touched || forms.formIn.$submitted) && forms.formIn.password.$invalid && forms.formIn.password.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END PASSWORD -->\n\n							<!-- START PORT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formIn.port.$touched || forms.formIn.$submitted) && forms.formIn.port.$invalid}">\n								<label class="control-label">{{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="number" name="port" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.port" required/>\n								<span data-ng-show="(forms.formIn.port.$touched || forms.formIn.$submitted) && forms.formIn.port.$invalid && forms.formIn.port.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n								<span data-ng-show="(forms.formIn.port.$touched || forms.formIn.$submitted) && forms.formIn.port.$invalid && forms.formIn.port.$error.number" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END PORT -->\n\n							<!-- START MAILBOX -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_MAILBOX\' | translate}}</label>\n								<input type="text" name="mailbox" placeholder="{{\'APPLICATION_MAILBOX\' | translate}}" class="form-control" data-ng-model="account.MailServerIn.mailbox"/>\n							</div>\n							<!-- END MAILBOX -->\n\n							<!-- START SEARCH FILTER -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_SEARCH_FILTER\' | translate}}</label>\n								<ui-select data-ng-model="account.MailServerIn.filter" name="filter" theme="bootstrap">\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected}}</ui-select-match>\n									<ui-select-choices repeat="filter in [\'UNSEEN\'] | filter: $select.search">\n										<div ng-bind-html="filter | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<!-- <input type="text" name="filter" placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}" class="form-control" data-ng-model="forms.formIn.form.filter"/> -->\n							</div>\n							<!-- START SEARCH FILTER -->\n\n							<!-- START DELETE -->\n							<div class="form-group" data-ng-show="account.MailServerIn.protocol">\n								<label class="control-label">{{\'APPLICATION_DELETE_MAIL_FROM_SERVER\' | translate}}</label><br>\n								<!-- <button type="button" name="delete"  class="btn btn-default form-control" data-ng-model="account.MailServerIn.delete" btn-checkbox> {{account.MailServerIn.delete ? $translate.instant(\'APPLICATION_YES\') : $translate.instant(\'APPLICATION_NO\') | uppercase}} </button> -->\n								<input\n									bs-switch\n									ng-model="account.MailServerIn.delete"\n									type="checkbox"\n									switch-active="{{ isActive }}"\n									switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n									switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n									switch-on-color="{{ onColor }}"\n									switch-off-color="{{ offColor }}"\n									switch-animate="{{ animate }}"\n									switch-size="{{ size }}"\n									switch-label="{{ label }}"\n									switch-icon="{{ icon }}"\n									switch-radio-off="{{ radioOff }}"\n									switch-label-width="{{ labelWidth }}"\n									switch-handle-width="{{ handleWidth }}">\n							</div>\n							<!-- END DELETE -->\n\n							<!-- START SSL -->\n							<div class="form-group">\n								<label class="control-label">SSL</label><br>\n								<!-- <button type="button" name="ssl"  class="btn btn-default form-control" data-ng-model="account.MailServerIn.ssl" btn-checkbox> {{account.MailServerIn.ssl ? $translate.instant(\'APPLICATION_ENABLED\') : $translate.instant(\'APPLICATION_DISABLED\') | uppercase}} </button> -->\n								<input\n									bs-switch\n									ng-model="account.MailServerIn.ssl"\n									type="checkbox"\n									switch-active="{{ isActive }}"\n									switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n									switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n									switch-on-color="{{ onColor }}"\n									switch-off-color="{{ offColor }}"\n									switch-animate="{{ animate }}"\n									switch-size="{{ size }}"\n									switch-label="{{ label }}"\n									switch-icon="{{ icon }}"\n									switch-radio-off="{{ radioOff }}"\n									switch-label-width="{{ labelWidth }}"\n									switch-handle-width="{{ handleWidth }}">\n							</div>\n							<!-- END SSL -->\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END IMAP TAB -->\n\n					<!-- SMTP TAB -->\n					<div class="tab-pane" id="tab_1_3">\n						<form name="forms.formOut" data-ng-submit="forms.formOut.$valid && updateItemMailServerOut()" novalidate>\n\n							<!-- START HOST -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.host.$touched || forms.formOut.$submitted) && forms.formOut.host.$invalid}">\n								<label class="control-label">{{\'APPLICATION_HOST\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="account.MailServerOut.host" required/>\n								<span data-ng-show="(forms.formOut.host.$touched || forms.formOut.$submitted) && forms.formOut.host.$invalid && forms.formOut.host.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END HOST -->\n\n							<!-- START USERNAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.username.$touched || forms.formOut.$submitted) && forms.formOut.username.$invalid}">\n								<label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="account.MailServerOut.username" required/>\n								<span data-ng-show="(forms.formOut.username.$touched || forms.formOut.$submitted) && forms.formOut.username.$invalid && forms.formOut.username.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END USERNAME -->\n\n							<!-- START PASSWORD -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.password.$touched || forms.formOut.$submitted) && forms.formOut.password.$invalid}">\n								<label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="account.MailServerOut.password" required/>\n								<span data-ng-show="(forms.formOut.password.$touched || forms.formOut.$submitted) && forms.formOut.password.$invalid && forms.formOut.password.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END PASSWORD -->\n\n							<!-- START PORT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.formOut.port.$touched || forms.formOut.$submitted) && forms.formOut.port.$invalid}">\n								<label class="control-label">{{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="number" name="port" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="account.MailServerOut.port" required/>\n								<span data-ng-show="(forms.formOut.form.$touched || forms.formOut.$submitted) && forms.formOut.port.$invalid && forms.formOut.port.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n								<span data-ng-show="(forms.formOut.form.$touched || forms.formOut.$submitted) && forms.formOut.port.$invalid && forms.formOut.port.$error.number" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END PORT -->\n\n							<!-- START SSL -->\n							<div class="form-group">\n								<label class="control-label">SSL</label><br>\n								<!-- <button type="button" name="ssl"  class="btn btn-default form-control" data-ng-model="account.MailServerOut.ssl" btn-checkbox> {{account.MailServerOut.ssl ? $translate.instant(\'APPLICATION_ENABLED\') : $translate.instant(\'APPLICATION_DISABLED\') | uppercase}} </button> -->\n								<input\n									bs-switch\n									ng-model="account.MailServerOut.ssl"\n									type="checkbox"\n									switch-active="{{ isActive }}"\n									switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n									switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n									switch-on-color="{{ onColor }}"\n									switch-off-color="{{ offColor }}"\n									switch-animate="{{ animate }}"\n									switch-size="{{ size }}"\n									switch-label="{{ label }}"\n									switch-icon="{{ icon }}"\n									switch-radio-off="{{ radioOff }}"\n									switch-label-width="{{ labelWidth }}"\n									switch-handle-width="{{ handleWidth }}">\n							</div>\n							<!-- END SSL -->\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END SMTP TAB -->\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),
+a.put("app/mail/account/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n	<div class="col-md-12">\n		<!-- BEGIN PAGE HEADER-->\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-envelope"></i>\n					<a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-notebook"></i>\n					<a href="/mail/accounts/list">{{ \'APPLICATION_ACCOUNTS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n		<!-- END PAGE HEADER-->\n\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="createItem()">\n	        <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="formValidation(forms.info.$valid)">\n							<form name="forms.info" novalidate>\n								<!-- START NAME -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n									<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="info.name" required/>\n									<span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END NAME -->\n\n								<!-- START DESCRIPTION -->\n								<div class="form-group">\n									<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n									<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="info.description"/>\n								</div>\n								<!-- END DESCRIPTION -->\n\n								<!-- START EMAIL -->\n								<!-- <div class="form-group" data-ng-class="{\'has-error\': (forms.info.address.$touched || forms.info.$submitted) && forms.info.address.$invalid}">\n									<label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<input type="email" name="address" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="info.address" required/>\n									<span data-ng-show="(forms.info.address.$touched || forms.info.$submitted) && forms.info.address.$invalid && forms.info.address.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div> -->\n								<!-- END EMAIL -->\n								<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n							</form>\n						</wz-step>\n\n						<wz-step title="IMAP" canexit="formValidation(forms.in.$valid)">\n							<form name="forms.in" novalidate>\n								<!-- START PROTOCOL -->\n								<!-- <div class="form-group">\n									<label class="control-label">IMAP/POP3</label>\n									<button type="button" name="protocol" class="btn btn-default form-control" data-ng-model="in.protocol" bs-checkbox>{{in.protocol ? \'IMAP\' : \'POP3\'}}</button>\n								</div> -->\n								<!-- END PROTOCOL -->\n\n								<!-- START HOST -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.in.host.$touched || forms.in.$submitted) && forms.in.host.$invalid}">\n									<label class="control-label">{{\'APPLICATION_HOST\' | translate}} <span class="required" aria-required="true">*</span></label>\n									<input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="in.host" required/>\n									<span data-ng-show="(forms.in.host.$touched || forms.in.$submitted) && forms.in.host.$invalid && forms.in.host.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END HOST -->\n\n								<!-- START USERNAME -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.in.username.$touched || forms.in.$submitted) && forms.in.username.$invalid}">\n									<label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="in.username" name="username" required/>\n									<span data-ng-show="(forms.in.username.$touched || forms.in.$submitted) && forms.in.username.$invalid && forms.in.username.$error.required"  class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END USERNAME -->\n\n								<!-- START PASSWORD -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.in.password.$touched || forms.in.$submitted) && forms.in.password.$invalid}">\n									<label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="in.password" required/>\n									<span data-ng-show="(forms.in.password.$touched || forms.in.$submitted) && forms.in.password.$invalid && forms.in.password.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END PASSWORD -->\n\n								<!-- START PORT -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.in.port.$touched || forms.in.$submitted) && forms.in.port.$invalid}">\n									<label class="control-label">{{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<input type="number" name="port" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="in.port" required/>\n									<span data-ng-show="(forms.in.port.$touched || forms.in.$submitted) && forms.in.port.$invalid && forms.in.port.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n									<span data-ng-show="(forms.in.port.$touched || forms.in.$submitted) && forms.in.port.$invalid && forms.in.port.$error.number" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END PORT -->\n\n								<!-- START MAILBOX -->\n								<div class="form-group">\n									<label class="control-label">{{\'APPLICATION_MAILBOX\' | translate}}</label>\n									<input type="text" name="mailbox" placeholder="{{\'APPLICATION_MAILBOX\' | translate}}" class="form-control" data-ng-model="in.mailbox"/>\n								</div>\n								<!-- END MAILBOX -->\n\n								<!-- START SEARCH FILTER -->\n								<div class="form-group">\n									<label class="control-label">{{\'APPLICATION_SEARCH_FILTER\' | translate}}</label>\n									<ui-select data-ng-model="in.filter" name="filter" theme="bootstrap">\n				            <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected}}</ui-select-match>\n				            <ui-select-choices repeat="filter in [\'UNSEEN\'] | filter: $select.search">\n				              <div data-ng-bind="filter | highlight: $select.search"></div>\n				            </ui-select-choices>\n				          </ui-select>\n									<!-- <input type="text" name="filter" placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}" class="form-control" data-ng-model="in.filter"/> -->\n								</div>\n								<!-- START SEARCH FILTER -->\n\n								<!-- START DELETE -->\n								<div class="form-group" data-ng-show="in.protocol">\n									<label class="control-label">{{\'APPLICATION_DELETE_MAIL_FROM_SERVER\' | translate}}</label><br>\n									<!-- <button type="button" name="delete"  class="btn btn-default form-control" data-ng-model="in.delete" btn-checkbox> {{in.delete ? $translate.instant(\'APPLICATION_YES\') : $translate.instant(\'APPLICATION_NO\') | uppercase}} </button> -->\n									<input\n										bs-switch\n										ng-model="in.delete"\n										type="checkbox"\n										switch-active="{{ isActive }}"\n										switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n										switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n										switch-on-color="{{ onColor }}"\n										switch-off-color="{{ offColor }}"\n										switch-animate="{{ animate }}"\n										switch-size="{{ size }}"\n										switch-label="{{ label }}"\n										switch-icon="{{ icon }}"\n										switch-radio-off="{{ radioOff }}"\n										switch-label-width="{{ labelWidth }}"\n										switch-handle-width="{{ handleWidth }}">\n								</div>\n								<!-- END DELETE -->\n\n								<!-- START SSL -->\n								<div class="form-group">\n									<label class="control-label">SSL</label><br>\n									<!-- <button type="button" name="ssl"  class="btn btn-default form-control" data-ng-model="in.ssl" btn-checkbox> {{in.ssl ? $translate.instant(\'APPLICATION_ENABLED\') : $translate.instant(\'APPLICATION_DISABLED\') | uppercase}} </button> -->\n									<input\n										bs-switch\n										ng-model="in.ssl"\n										type="checkbox"\n										switch-active="{{ isActive }}"\n										switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n										switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n										switch-on-color="{{ onColor }}"\n										switch-off-color="{{ offColor }}"\n										switch-animate="{{ animate }}"\n										switch-size="{{ size }}"\n										switch-label="{{ label }}"\n										switch-icon="{{ icon }}"\n										switch-radio-off="{{ radioOff }}"\n										switch-label-width="{{ labelWidth }}"\n										switch-handle-width="{{ handleWidth }}">\n								</div>\n								<!-- END SSL -->\n								<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="goNext()"/>\n							</form>\n						</wz-step>\n						<wz-step title="SMTP" canexit="formValidation(forms.out.$valid)">\n							<form name="forms.out" novalidate>\n\n								<!-- START HOST -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.out.host.$touched || forms.out.$submitted) && forms.out.host.$invalid}">\n									<label class="control-label">{{\'APPLICATION_HOST\' | translate}} <span class="required" aria-required="true">*</span></label>\n									<input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="out.host" required/>\n									<span data-ng-show="(forms.out.host.$touched || forms.out.$submitted) && forms.out.host.$invalid && forms.out.host.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END HOST -->\n\n								<!-- START USERNAME -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.out.username.$touched || forms.out.$submitted) && forms.out.username.$invalid}">\n									<label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<input type="text" name="username" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="out.username" required/>\n									<span data-ng-show="(forms.out.username.$touched || forms.out.$submitted) && forms.out.username.$invalid && forms.out.username.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END USERNAME -->\n\n								<!-- START PASSWORD -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.out.password.$touched || forms.out.$submitted) && forms.out.password.$invalid}">\n									<label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="out.password" required/>\n									<span data-ng-show="(forms.out.password.$touched || forms.out.$submitted) && forms.out.password.$invalid && forms.out.password.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END PASSWORD -->\n\n								<!-- START PORT -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.out.port.$touched || forms.out.$submitted) && forms.out.port.$invalid}">\n									<label class="control-label">{{\'APPLICATION_PORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<input type="number" name="port" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="out.port" required/>\n									<span data-ng-show="(out.$touched || forms.out.$submitted) && forms.out.port.$invalid && forms.out.port.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n									<span data-ng-show="(out.$touched || forms.out.$submitted) && forms.out.port.$invalid && forms.out.port.$error.number" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_NUMERIC_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END PORT -->\n\n								<!-- START SSL -->\n								<div class="form-group">\n									<label class="control-label">SSL</label><br>\n									<!-- <button type="button" name="ssl"  class="btn btn-default form-control" data-ng-model="out.ssl" btn-checkbox> {{out.ssl ? $translate.instant(\'APPLICATION_ENABLED\') : $translate.instant(\'APPLICATION_DISABLED\') | uppercase}} </button> -->\n									<input\n										bs-switch\n										ng-model="out.ssl"\n										type="checkbox"\n										switch-active="{{ isActive }}"\n										switch-on-text="{{ \'APPLICATION_ENABLED\' | translate }}"\n										switch-off-text="{{ \'APPLICATION_DISABLED\' | translate }}"\n										switch-on-color="{{ onColor }}"\n										switch-off-color="{{ offColor }}"\n										switch-animate="{{ animate }}"\n										switch-size="{{ size }}"\n										switch-label="{{ label }}"\n										switch-icon="{{ icon }}"\n										switch-radio-off="{{ radioOff }}"\n										switch-label-width="{{ labelWidth }}"\n										switch-handle-width="{{ handleWidth }}">\n								</div>\n								<!-- END SSL -->\n\n								<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="goNext()"/>\n								<input class="btn default" type="button" value="{{\'APPLICATION_BACK\' | translate}}" wz-previous/>\n							</form>\n						</wz-step>\n						<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n							<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n							<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n						</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/mail/automation/list/list.html",'<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-envelope"></i>\n						<a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-settings"></i>\n						<a href="#">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-settings font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="mailAutomations.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_AUTOMATION\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/mail/automations/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getMailAutomations([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="mail_automations.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedMailAutomations" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="6">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.mailAutomationsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="mailAutomationByPage in mailAutomationsByPage | filter: $select.search">\n													<div ng-bind-html="mailAutomationByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<!-- <th st-sort="id" width="5%" st-sort-default="reverse">{{ \'APPLICATION_ID\' | translate }}</th> -->\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(mailAutomation, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n								<th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th>{{ \'APPLICATION_STATUS\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="mailAutomation in displayedMailAutomations">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="mailAutomations.checked" checklist-value="mailAutomation.id"></td>\n					      <td>{{mailAutomation.name}}</td>\n								<td>{{mailAutomation.description}}</td>\n								<td>\n									<input\n										data-ng-change="updateItem(mailAutomation.id, mailAutomation.status)",\n								    bs-switch\n								    ng-model="mailAutomation.status"\n								    type="checkbox"\n								    switch-active="{{ isActive }}"\n								    switch-on-text="{{ onText }}"\n								    switch-off-text="{{ offText }}"\n								    switch-on-color="{{ onColor }}"\n								    switch-off-color="{{ offColor }}"\n								    switch-animate="{{ animate }}"\n								    switch-size="{{ size }}"\n								    switch-label="{{ label }}"\n								    switch-icon="{{ icon }}"\n								    switch-radio-off="{{ radioOff }}"\n								    switch-label-width="{{ labelWidth }}"\n								    switch-handle-width="{{ handleWidth }}">\n								</td>\n					      <td>\n									<a class="btn default btn-xs blue-stripe" data-ng-href="/mail/automations/view/{{mailAutomation.id}}/settings">\n										{{ \'APPLICATION_EDIT\' | translate }}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(mailAutomation.name, mailAutomation.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedMailAutomations.length">\n								<td colspan="6" class="text-center">\n									<i>No available automations</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_USERNAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td/>\n								<td/>\n						  </tr>\n					    <tr>\n					      <td colspan="6" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.mailAutomationsByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/mail/automation/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row" data-ng-init="initView()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-envelope"></i>\n					<a href="/">{{ \'APPLICATION_MAIL\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-settings"></i>\n					<a href="/mail/automations/list">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a>\n					<i class="fa fa-angle-right" data-ng-show="automation"></i>\n				</li>\n				<li data-ng-show="automation">\n					<a href="#">{{ automation.description || automation.name }}</a>\n				</li>\n			</ul>\n		</div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/automation.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{ automation.name }}\n					</div>\n					<div class="profile-usertitle-job">\n						{{automation.description}}\n					</div>\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.mail.automations.view.settings\')}">\n							<a href="/mail/automations/view/{{automation.id}}/settings">\n							<i class="icon-settings"></i>\n							{{\'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/mail/automation/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_2" data-toggle="tab">OR {{\'APPLICATION_CONDITIONS\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_3" data-toggle="tab">AND {{\'APPLICATION_CONDITIONS\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_4" data-toggle="tab">{{\'APPLICATION_ACTIONS\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n			<div class="portlet-body">\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.info" data-ng-submit="forms.info.$valid && updateAutomation()" novalidate>\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="automation.name" required/>\n								<span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="automation.description"/>\n							</div>\n							<!-- END DESCRIPTION -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END GENERAL TAB -->\n\n					<!-- IMAP TAB -->\n					<div class="tab-pane" id="tab_1_2">\n						<div class="row">\n							<div class="col-md-12">\n								<a href="#" data-ng-click="addNewCondition(\'or\')">\n									<i class="icon-plus"></i>\n								</a>\n								<i class="icon-people"></i>\n								<span class="caption-subject">Meet <strong>all</strong> of the following conditions:</a> </span>\n							</div>\n						</div>\n						<div class="row" data-ng-repeat="condition in automation.BusinessConditions | filter: {type: \'or\'}">\n							<div class="col-md-12">\n								<div class="row">\n									<div class="col-md-12">\n										<hr>\n									</div>\n								</div>\n								<div class="row">\n									<div class="col-md-4">\n										<div class="form-group">\n											<ui-select data-ng-model="condition.condition" theme="bootstrap" on-select="updateCondition(condition.id, \'condition\', $item.key)" required>\n												<ui-select-match placeholder="-- Click to select condition. --">{{$select.selected.value}}</ui-select-match>\n												<ui-select-choices repeat="condition.key as condition in automations.conditions | filter: $select.search">\n													<div data-ng-bind="condition.value | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n									</div>\n									<div class="col-md-3">\n										<div class="form-group">\n											<ui-select data-ng-model="condition.operator" theme="bootstrap" on-select="updateCondition(condition.id, \'operator\', $item.key)" required>\n												<ui-select-match>{{$select.selected.value}}</ui-select-match>\n												<ui-select-choices repeat="operator.key as operator in getOperatorsByCondition(condition.condition) | filter: $select.search">\n													<div data-ng-bind="operator.value | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n									</div>\n									<div class="col-md-4" data-ng-switch="condition.condition">\n										<div class="form-group" data-ng-switch-when="status">\n											<ui-select data-ng-model="condition.attribute" theme="bootstrap" on-select="updateCondition(condition.id, \'attribute\', $item.key)" required>\n												<ui-select-match>{{$select.selected.value}}</ui-select-match>\n												<ui-select-choices repeat="attribute.key as attribute in getAttributesByCondition(condition.condition) | filter: $select.search">\n													<div data-ng-bind="attribute.value | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="form-group" data-ng-switch-when="createdAt">\n											<input class="form-control" type="text" name="attributeOr{{$index}}" value="" data-ng-model="condition.attribute" ng-blur="updateCondition(condition.id, \'attribute\', condition.attribute)" data-ng-class="{\'has-error\': forms.and.attributeAnd{{$index}}.$invalid}" required>\n										</div>\n									</div>\n									<div class="col-md-1">\n										<a href="#" data-ng-click="removeCondition(condition.id)">\n											<i class="icon-close"></i>\n										</a>\n									</div>\n								</div>\n							</div>\n						</div>\n						<div class="row" data-ng-hide="automation.BusinessConditions.length">\n							<div class="col-md-12 text-center">\n								<hr>\n								<i>Add condition</i>\n							</div>\n						</div>\n					</div>\n					<!-- END IMAP TAB -->\n\n					<div class="tab-pane" id="tab_1_3">\n						<div class="row">\n							<div class="col-md-12">\n								<a href="#" data-ng-click="addNewCondition(\'and\')">\n									<i class="icon-plus"></i>\n								</a>\n								<i class="icon-people"></i>\n								<span class="caption-subject">Meet <strong>all</strong> of the following conditions:</a> </span>\n							</div>\n						</div>\n						<div class="row" data-ng-repeat="condition in automation.BusinessConditions | filter: {type: \'and\'}">\n							<div class="col-md-12">\n								<div class="row">\n									<div class="col-md-12">\n										<hr>\n									</div>\n								</div>\n								<div class="row">\n									<div class="col-md-4">\n										<div class="form-group">\n											<ui-select data-ng-model="condition.condition" name="conditionAnd{{$index}}" theme="bootstrap" on-select="updateCondition(condition.id, \'condition\', $item.key)" required>\n												<ui-select-match placeholder="-- Click to select condition. --">{{$select.selected.value}}</ui-select-match>\n												<ui-select-choices repeat="condition.key as condition in automations.conditions | filter: $select.search">\n													<div data-ng-bind="condition.value | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n									</div>\n									<div class="col-md-3">\n										<div class="form-group">\n											<ui-select data-ng-model="condition.operator" name="operatorAnd{{$index}}" theme="bootstrap" on-select="updateCondition(condition.id, \'operator\', $item.key)" required>\n												<ui-select-match>{{$select.selected.value}}</ui-select-match>\n												<ui-select-choices repeat="operator.key as operator in getOperatorsByCondition(condition.condition) | filter: $select.search">\n													<div data-ng-bind="operator.value | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n									</div>\n									<div class="col-md-4" data-ng-switch="condition.condition">\n										<div class="form-group" data-ng-switch-when="status">\n											<ui-select data-ng-model="condition.attribute" name="attributeAnd{{$index}}" theme="bootstrap" on-select="updateCondition(condition.id, \'attribute\', $item.key)" required>\n												<ui-select-match>{{$select.selected.value}}</ui-select-match>\n												<ui-select-choices repeat="attribute.key as attribute in getAttributesByCondition(condition.condition) | filter: $select.search">\n													<div data-ng-bind="attribute.value | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="form-group" data-ng-switch-when="createdAt">\n											<input class="form-control" type="text" name="attributeOr{{$index}}" value="" data-ng-model="condition.attribute" data-ng-blur="updateCondition(condition.id, \'attribute\', condition.attribute)" data-ng-class="{\'has-error\': forms.and.attributeAnd{{$index}}.$invalid}" required>\n											<span data-ng-show="forms.and.attributeAnd{{$index}}.$invalid && forms.and.attributeAnd{{$index}}.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n									</div>\n									<div class="col-md-1">\n										<a href="#" data-ng-click="removeCondition(condition.id)">\n											<i class="icon-close"></i>\n										</a>\n									</div>\n								</div>\n							</div>\n						</div>\n						<div class="row" data-ng-hide="automation.BusinessConditions.length">\n							<div class="col-md-12 text-center">\n								<hr>\n								<i>Add condition</i>\n							</div>\n						</div>\n					</div>\n\n					<!-- SMTP TAB -->\n					<div class="tab-pane" id="tab_1_4">\n						<div class="row">\n							<div class="col-md-12">\n								<a href="#" data-ng-click="addNewAction()">\n									<i class="icon-plus"></i>\n								</a>\n								<i class="icon-people"></i>\n								<span class="caption-subject">Meet <strong>all</strong> of the following conditions:</a> </span>\n							</div>\n						</div>\n						<div class="row" data-ng-repeat="action in automation.BusinessActions">\n							<div class="col-md-12">\n								<div class="row">\n									<div class="col-md-12">\n										<hr>\n									</div>\n								</div>\n								<div class="row">\n									<div class="col-md-4">\n										<div class="form-group">\n											<ui-select data-ng-model="action.condition" theme="bootstrap" on-select="updateAction(action.id, \'condition\', $item.key)" required>\n												<ui-select-match placeholder="-- Click to select condition. --">{{$select.selected.value}}</ui-select-match>\n												<ui-select-choices repeat="action.key as action in automations.actions | filter: $select.search">\n													<div data-ng-bind="action.value | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n									</div>\n									<div class="col-md-3" data-ng-switch="action.condition">\n										<div class="form-group" data-ng-switch-when="status">\n											<ui-select data-ng-model="action.attribute" theme="bootstrap" on-select="updateAction(action.id, \'attribute\', $item.key)" required>\n												<ui-select-match>{{$select.selected.value}}</ui-select-match>\n												<ui-select-choices repeat="attribute.key as attribute in getAttributesByCondition(action.condition) | filter: $select.search">\n													<div data-ng-bind="attribute.value | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="form-group" data-ng-switch-when="createdAt">\n											<input class="form-control" type="text" data-ng-model="action.attribute" data-ng-blur="updateAction(action.id, \'attribute\', action.attribute)" data-ng-class="{\'has-error\': forms.and.attributeAnd{{$index}}.$invalid}" required>\n										</div>\n									</div>\n									<div class="col-md-4">\n									</div>\n									<div class="col-md-1">\n										<a href="#" data-ng-click="removeAction(action.id)">\n											<i class="icon-close"></i>\n										</a>\n									</div>\n								</div>\n							</div>\n						</div>\n						<div class="row" data-ng-hide="automation.BusinessActions.length">\n							<div class="col-md-12 text-center">\n								<hr>\n								<i>Add condition</i>\n							</div>\n						</div>\n\n					</div>\n					<!-- END SMTP TAB -->\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),
+a.put("app/mail/automation/wizard/wizard.html",'\n<div class="row" data-ng-init="initWizard()">\n	<div class="col-md-12">\n		<!-- BEGIN PAGE HEADER-->\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-envelope"></i>\n					<a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-settings"></i>\n					<a href="/mail/automations/list">{{ \'APPLICATION_AUTOMATIONS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n		<!-- END PAGE HEADER-->\n\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-settings font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_AUTOMATIONS\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="createItem()">\n	        <wz-step title="{{\'APPLICATION_NEW_AUTOMATION\' | translate}}" canexit="formValidation(forms.automation.$valid)">\n						<form name="forms.automation" novalidate>\n							<div class="row">\n								<div class="col-md-12">\n									<div class="form-group" data-ng-class="{\'has-error\': forms.automation.name.$invalid && forms.automation.$submitted}">\n										<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n										<input class="form-control" type="text" name="name" value="" data-ng-model="automations.name" required>\n										<span data-ng-show="forms.automation.name.$invalid && forms.automation.name.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n\n									<div class="form-group" data-ng-class="{\'has-error\': forms.automation.description.$invalid && forms.automation.$submitted}">\n										<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n										<input class="form-control" type="text" name="description" value="" data-ng-model="automations.description">\n										<span data-ng-show="forms.automation.description.$invalid && forms.automation.description.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n								</div>\n							</div>\n\n							<div class="row">\n								<div class="col-md-12">\n									<hr>\n								</div>\n							</div>\n\n							<div class="row">\n								<div class="col-md-12">\n									<a href="#" data-ng-click="addNewChoice(\'or\')">\n										<i class="icon-plus"></i>\n									</a>\n									<i class="icon-user"></i>\n									<span class="caption-subject">Meet <strong>any</strong> of the following conditions:</a> </span>\n								</div>\n							</div>\n							<div class="row" data-ng-repeat="automation in automations.or">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-12">\n											<hr>\n										</div>\n									</div>\n									<div class="row">\n										<div class="col-md-4">\n											<div class="form-group" data-ng-class="{\'has-error\': forms.automation.conditionOr{{$index}}.$invalid && forms.automation.$submitted && forms.automation.$submitted}">\n												<ui-select data-ng-model="automations.or[$index].condition" name="conditionOr{{$index}}" theme="bootstrap" required>\n													<ui-select-match placeholder="-- Click to select condition. --">{{$select.selected.value}}</ui-select-match>\n													<ui-select-choices repeat="condition in automations.or[$index].conditions | filter: $select.search">\n														<div data-ng-bind="condition.value | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n												<span data-ng-show="forms.automation.conditionOr{{$index}}.$invalid && forms.automation.conditionOr{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<div class="col-md-3">\n											<div class="form-group" data-ng-class="{\'has-error\': forms.automation.operatorOr{{$index}}.$invalid && forms.automation.$submitted}">\n												<ui-select data-ng-model="automations.or[$index].operator" name="operatorOr{{$index}}" theme="bootstrap" required>\n													<ui-select-match>{{$select.selected.value}}</ui-select-match>\n													<ui-select-choices repeat="operator.key as operator in automations.or[$index].condition.operators | filter: $select.search">\n														<div data-ng-bind="operator.value | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n												<span data-ng-show="forms.automation.operatorOr{{$index}}.$invalid && forms.automation.operatorOr{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<div class="col-md-4" data-ng-switch="automations.or[$index].condition.input">\n											<div class="form-group" data-ng-switch-when="ui-select" data-ng-class="{\'has-error\': forms.automation.attributeOr{{$index}}.$invalid && forms.automation.attributeOr{{$index}}.$error.required && forms.automation.$submitted}">\n												<ui-select data-ng-model="automations.or[$index].attribute" name="attributeOr{{$index}}" theme="bootstrap" required>\n													<ui-select-match>{{$select.selected.value}}</ui-select-match>\n													<ui-select-choices repeat="attribute.key as attribute in automations.or[$index].condition.attributes | filter: $select.search">\n														<div data-ng-bind="attribute.value | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n												<span data-ng-show="forms.automation.attributeOr{{$index}}.$invalid && forms.automation.attributeOr{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n											<div class="form-group" data-ng-switch-when="number">\n												<input class="form-control" type="text" min="0" name="attributeOr{{$index}}" value="" data-ng-model="automations.or[$index].attribute" required>\n												<span data-ng-show="forms.automation.attributeOr{{$index}}.$invalid && forms.automation.attributeOr{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<div class="col-md-1">\n											<a href="#" data-ng-click="removeChoice(\'or\', $index)">\n												<i class="icon-close"></i>\n											</a>\n										</div>\n									</div>\n								</div>\n							</div>\n							<div class="row" data-ng-hide="automations.or.length">\n								<div class="col-md-12 text-center">\n									<hr>\n									<i>Add condition</i>\n								</div>\n							</div>\n							<div class="row">\n								<div class="col-md-12">\n									<a href="#" data-ng-click="addNewChoice(\'and\')">\n										<i class="icon-plus"></i>\n									</a>\n									<i class="icon-people"></i>\n									<span class="caption-subject">Meet <strong>all</strong> of the following conditions:</a> </span>\n								</div>\n							</div>\n							<div class="row" data-ng-repeat="automation in automations.and">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-12">\n											<hr>\n										</div>\n									</div>\n									<div class="row">\n										<div class="col-md-4">\n											<div class="form-group" data-ng-class="{\'has-error\': forms.automation.conditionAnd{{$index}}.$invalid && forms.automation.$submitted}">\n												<ui-select data-ng-model="automations.and[$index].condition" name="conditionAnd{{$index}}" theme="bootstrap" required>\n													<ui-select-match placeholder="-- Click to select condition. --">{{$select.selected.value}}</ui-select-match>\n													<ui-select-choices repeat="condition in automations.and[$index].conditions | filter: $select.search">\n														<div data-ng-bind="condition.value | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n												<span data-ng-show="forms.automation.conditionAnd{{$index}}.$invalid && forms.automation.conditionAnd{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<div class="col-md-3">\n											<div class="form-group" data-ng-class="{\'has-error\': forms.automation.operatorAnd{{$index}}.$invalid && forms.automation.$submitted}">\n												<ui-select data-ng-model="automations.and[$index].operator" name="operatorAnd{{$index}}" theme="bootstrap" required>\n													<ui-select-match>{{$select.selected.value}}</ui-select-match>\n													<ui-select-choices repeat="operator.key as operator in automations.and[$index].condition.operators | filter: $select.search">\n														<div data-ng-bind="operator.value | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n												<span data-ng-show="forms.automation.operatorAnd{{$index}}.$invalid && forms.automation.operatorAnd{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<div class="col-md-4" data-ng-switch="automations.and[$index].condition.input">\n											<div class="form-group" data-ng-switch-when="ui-select" data-ng-class="{\'has-error\': forms.automation.attributeAnd{{$index}}.$invalid && forms.automation.$submitted}">\n												<ui-select data-ng-model="automations.and[$index].attribute" name="attributeAnd{{$index}}" theme="bootstrap" required>\n													<ui-select-match>{{$select.selected.value}}</ui-select-match>\n													<ui-select-choices repeat="attribute.key as attribute in automations.and[$index].condition.attributes | filter: $select.search">\n														<div data-ng-bind="attribute.value | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n												<span data-ng-show="forms.automation.attributeAnd{{$index}}.$invalid && forms.automation.attributeAnd{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n											<div class="form-group" data-ng-switch-when="number">\n												<input class="form-control" type="text" min="0" name="attributeAnd{{$index}}" value="" data-ng-model="automations.and[$index].attribute" data-ng-class="{\'has-error\': forms.automation.attributeAnd{{$index}}.$invalid}" required>\n												<span data-ng-show="forms.automation.attributeAnd{{$index}}.$invalid && forms.automation.attributeAnd{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<div class="col-md-1">\n											<a href="#" data-ng-click="removeChoice(\'and\', $index)">\n												<i class="icon-close"></i>\n											</a>\n										</div>\n									</div>\n								</div>\n							</div>\n							<div class="row" data-ng-hide="automations.and.length">\n								<div class="col-md-12 text-center">\n									<hr>\n									<i>Add condition</i>\n								</div>\n							</div>\n\n							<div class="row">\n								<div class="col-md-12">\n									<a href="#" data-ng-click="addNewChoice(\'actions\')">\n										<i class="icon-plus"></i>\n									</a>\n									<i class="icon-magic-wand"></i>\n									<span class="caption-subject">Perform these actions:</a> </span>\n								</div>\n							</div>\n							<div class="row" data-ng-repeat="automation in automations.actions">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-12">\n											<hr>\n										</div>\n									</div>\n									<div class="row">\n										<div class="col-md-4">\n											<div class="form-group" data-ng-class="{\'has-error\': forms.actions.conditionAction{{$index}}.$invalid && forms.automation.$submitted}">\n												<ui-select data-ng-model="automations.actions[$index].condition" name="conditionAction{{$index}}" theme="bootstrap" required>\n													<ui-select-match placeholder="-- Click to select condition. --">{{$select.selected.value}}</ui-select-match>\n													<ui-select-choices repeat="action in automations.actions[$index].actions | filter: $select.search">\n														<div data-ng-bind="action.value | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n												<span data-ng-show="forms.actions.conditionAction{{$index}}.$invalid && forms.actions.conditionAction{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<div class="col-md-3" data-ng-switch="automations.actions[$index].condition.input">\n											<div class="form-group" data-ng-switch-when="ui-select" data-ng-class="{\'has-error\': forms.actions.attributeAction{{$index}}.$invalid && forms.automation.$submitted}">\n												<ui-select data-ng-model="automations.actions[$index].attribute" name="attributeAction{{$index}}" theme="bootstrap" required>\n													<ui-select-match>{{$select.selected.value}}</ui-select-match>\n													<ui-select-choices repeat="attribute.key as attribute in automations.actions[$index].condition.attributes | filter: $select.search">\n														<div data-ng-bind="attribute.value | highlight: $select.search"></div>\n													</ui-select-choices>\n												</ui-select>\n												<span data-ng-show="forms.actions.attributeAction{{$index}}.$invalid && forms.actions.attributeAction{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n											<div class="form-group" data-ng-switch-when="number" data-ng-class="{\'has-error\': forms.actions.attributeAction{{$index}}.$invalid}">\n												<input class="form-control" type="text" min="0" name="attributeAction{{$index}}" value="" data-ng-model="automations.actions[$index].attribute" required>\n												<span data-ng-show="forms.actions.attributeAction{{$index}}.$invalid && forms.actions.attributeAction{{$index}}.$error.required && forms.automation.$submitted" class="help-block help-block-error">\n													<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n												</span>\n											</div>\n										</div>\n										<div class="col-md-4">\n										</div>\n										<div class="col-md-1">\n											<a href="#" data-ng-click="removeChoice(\'actions\', $index)">\n												<i class="icon-close"></i>\n											</a>\n										</div>\n									</div>\n								</div>\n							</div>\n							<div class="row" data-ng-hide="automations.actions.length">\n								<div class="col-md-12 text-center">\n									<hr>\n									<i>Add action</i>\n								</div>\n							</div>\n							<div class="row">\n								<div class="col-md-12">\n									<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n								</div>\n							</div>\n						</form>\n					</wz-step>\n					<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n						<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n						<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n					</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/mail/inbox/compose/compose.html",'<form class="inbox-compose form-horizontal" id="fileupload" enctype="multipart/form-data" data-ng-init="getMessage()">\n	<pre>\n		{{mailAccounts | json}}\n	</pre>\n	<div class="inbox-compose-btn">\n		<button data-ng-click="sendMailMessage()" class="btn blue"><i class="fa fa-check"></i>{{\'APPLICATION_SEND\' | translate}}</button>\n		<button class="btn inbox-discard-btn" data-ng-click="discard()">{{\'APPLICATION_DISCARD\' | translate}}</button>\n		<button class="btn" data-ng-click="saveMessageAsDraft()">{{\'APPLICATION_SAVE_AS_DRAFT\' | translate}}</button>\n		<span class="message-info"><i>{{form.message}}</i></span>\n	</div>\n	<div class="inbox-form-group">\n		<label class="control-label">{{\'APPLICATION_FROM\' | translate}}: </label>\n		<div class="controls">\n			<ui-select data-ng-model="form.body.from" theme="bootstrap">\n        <ui-select-match placeholder="Select an account">{{$select.selected.name}} <{{$select.selected.address}}></ui-select-match>\n        <ui-select-choices repeat="account in mailAccounts | filter: $select.search">\n          <div ng-bind-html="account.name | highlight: $select.search"></div>\n          <small ng-bind-html="account.address | highlight: $select.search"></small>\n        </ui-select-choices>\n      </ui-select>\n		</div>\n	</div>\n	<div class="inbox-form-group mail-to">\n		<label class="control-label">{{\'APPLICATION_TO\' | translate}}: </label>\n		<div class="controls controls-to">\n			<input type="text" class="form-control" name="to" data-ng-model="form.body.to.address">\n			<span class="inbox-cc-bcc">\n			<span class="inbox-cc" data-ng-show="!flagCC" data-ng-click="switchFlagCC()">\n			Cc </span>\n			<span class="inbox-bcc" data-ng-show="!flagBCC" data-ng-click="switchFlagBCC()">\n			{{\'APPLICATION_BCC\' | translate}} </span>\n			</span>\n		</div>\n	</div>\n	<div class="inbox-form-group input-cc" data-ng-class="{\'display-hide\': !flagCC}">\n		<a href="javascript:;" class="close" data-ng-click="switchFlagCC()">\n		</a>\n		<label class="control-label">Cc:</label>\n		<div class="controls controls-cc">\n			<input type="text" name="cc" class="form-control" data-ng-model="form.body.cc.address">\n		</div>\n	</div>\n	<div class="inbox-form-group input-bcc" data-ng-class="{\'display-hide\': !flagBCC}">\n		<a href="javascript:;" class="close" data-ng-click="switchFlagBCC()">\n		</a>\n		<label class="control-label">{{\'APPLICATION_BCC\' | translate}}:</label>\n		<div class="controls controls-bcc">\n			<input type="text" name="bcc" class="form-control" data-ng-model="form.body.bcc.address">\n		</div>\n	</div>\n	<div class="inbox-form-group">\n		<label class="control-label">{{\'APPLICATION_SUBJECT\' | translate}}: </label>\n		<div class="controls">\n			<input type="text" class="form-control" name="subject" data-ng-model="form.subject">\n		</div>\n	</div>\n	<div class="inbox-form-group">\n		<div class="inbox-editor inbox-wysihtml5" text-angular data-ng-model="form.html"></div>\n	</div>\n	<div class="inbox-compose-btn">\n		<button data-ng-click="sendMailMessage()" class="btn blue"><i class="fa fa-check"></i>{{\'APPLICATION_SEND\' | translate}}</button>\n		<button class="btn" data-ng-click="discard()">{{\'APPLICATION_DISCARD\' | translate}}</button>\n		<button class="btn" data-ng-click="saveMessageAsDraft()">{{\'APPLICATION_DRAFT\' | translate}}</button>\n	</div>\n</form>\n'),a.put("app/mail/inbox/inbox.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-envelope"></i>\n					<a href="#">{{ \'APPLICATION_MAILS\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-note"></i>\n					<a href="/mail/inbox/incoming">{{ \'APPLICATION_INBOX\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n<div class="row inbox">\n	<div class="col-md-12" ui-view>\n	</div>\n</div>\n'),a.put("app/mail/inbox/incoming/incoming.html",'<div class="row inbox">\n	<div class="col-md-12">\n		<div class="inbox-header">\n			<h1 class="pull-left">Inbox</h1>\n			<form class="form-inline pull-right" action="#">\n				<!-- <div class="input-group input-medium">\n					<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search">\n					<span class="input-group-btn">\n					<button type="submit" class="btn green"><i class="fa fa-search"></i></button>\n					</span>\n				</div> -->\n			</form>\n		</div>\n		<div class="inbox-content">\n			<table class="table table-striped table-advance table-hover" st-table="displayedMailRooms" st-pipe="initList">\n				<thead>\n					<tr>\n						<th colspan="9">\n							<input type="checkbox" ng-change="check(null, checked)" checklist-model checklist-value="id">\n							<div class="btn-group">\n								<a data-ng-href="/mail/inbox/compose" class="btn btn-sm blue">\n									<i class="icon-plus"></i> {{\'APPLICATION_NEW_MESSAGE\' | translate}}\n								</a>\n							</div>\n							<div class="btn-group" data-ng-show="mailRooms.checked.length">\n								<a href="#" class="btn btn-sm red" data-ng-click="deleteItems()">\n									<i class="icon-trash"></i> {{\'APPLICATION_DELETE\' | translate}}\n								</a>\n							</div>\n							<div class="input-group input-medium pull-right">\n								<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n								<span class="input-group-addon">\n									<i class="fa fa-search"></i>\n								</span>\n							</div>\n						</th>\n						<!-- <th class="pagination-control" colspan="7"> -->\n							<!-- <span class="pagination-info">\n							1-30 of 789 </span>\n							<a class="btn btn-sm blue">\n							<i class="fa fa-angle-left"></i>\n							</a>\n							<a class="btn btn-sm blue">\n							<i class="fa fa-angle-right"></i>\n							</a> -->\n						<!-- </th> -->\n					</tr>\n				</thead>\n				<tbody>\n					<tr data-messageid="1" data-ng-repeat="mailRoom in displayedMailRooms" class="animate-repeat">\n						<td class="inbox-small-cells">\n							<input type="checkbox" checklist-model="mailRooms.checked" checklist-value="mailRoom.id">\n						</td>\n						<td class="inbox-small-cells" data-ng-click="go(\'/mail/inbox/room/\' + mailRoom.id, mailRoom.id, \'OPEN\')">\n							#{{mailRoom.id}}\n						</td>\n						<td class="view-message hidden-xs" data-ng-click="go(\'/mail/inbox/room/\' + mailRoom.id, mailRoom.id, \'OPEN\')">\n						 {{mailRoom.subject}}\n						</td>\n						<td class="view-message" data-ng-click="go(\'/mail/inbox/room/\' + mailRoom.id, mailRoom.id, \'OPEN\')">\n							{{mailRoom.from}}\n						</td>\n						<td class="view-message" data-ng-click="go(\'/mail/inbox/room/\' + mailRoom.id, mailRoom.id, \'OPEN\')">\n							{{mailRoom.MailAccount.description ? mailRoom.MailAccount.description : mailRoom.MailAccount.name || \'APPLICATION_UNKNOWN\' | translate | uppercase}}\n						</td>\n						<td class="view-message" data-ng-click="go(\'/mail/inbox/room/\' + mailRoom.id, mailRoom.id, \'OPEN\')">\n							<span class="badge badge-success badge-roundless" data-ng-show="mailRoom.User.fullname"> {{mailRoom.User.fullname}} </span>\n							<span class="badge badge-default badge-roundless" data-ng-hide="mailRoom.User.fullname"> UNASSIGNED </span>\n						</td>\n						<td class="view-message" data-ng-switch="mailRoom.status" data-ng-click="go(\'/mail/inbox/room/\' + mailRoom.id, mailRoom.id, \'OPEN\')">\n							<span class="badge badge-default" data-ng-class="{\n							\'badge-danger\': mailRoom.status == \'NEW\',\n							\'badge-warning\': mailRoom.status == \'OPEN\',\n							\'badge-info\': mailRoom.status == \'PENDING\',\n							\'badge-success\': mailRoom.status == \'CLOSED\'}"> {{mailRoom.status | uppercase}} </span>\n						</td>\n						<td class="view-message inbox-small-cells">\n							<i data-ng-show="mailRoom.attachment" class="fa fa-paperclip"></i>\n						</td>\n						<td class="view-message pull-right">\n							<time is="relative-time" datetime="{{mailRoom.updatedAt}}">\n								April 1, 2014\n							</time>\n						</td>\n					</tr>\n					<tr data-ng-hide="displayedMailRooms.length">\n						<td colspan="9" style="text-align:center;">\n							<i>{{ \'MESSAGE_NO_AVAILABLE_CONVERSATIONS\' | translate }}</i>\n						</td>\n					</tr>\n				</tbody>\n				<tfoot>\n					<tr>\n						<td colspan="9" class="text-center">\n							<div class="pagination" st-pagination st-items-by-page="conf.mailRoomsByPage.value" st-displayed-pages="7"></div>\n						</td>\n					</tr>\n				</tfoot>\n			</table>\n		</div>\n	</div>\n</div>\n'),a.put("app/mail/inbox/room/room.html",'<!-- BEGIN TODO CONTENT -->\n<div class="todo-content" data-ng-init="initRoomView()">\n	<div class="portlet light">\n		<!-- PROJECT HEAD -->\n		<div class="portlet-title">\n			<div class="caption" data-ng-show="mailRoom">\n				<i class="icon-bar-chart font-green-sharp hide"></i>\n				<span class="badge badge-default" data-ng-class="{\'badge-error\': mailRoom.status == \'NEW\',\n				\'badge-warning\': mailRoom.status == \'OPEN\',\n				\'badge-info\': mailRoom.status == \'PENDING\',\n				\'badge-success\': mailRoom.status == \'CLOSED\'}"> {{mailRoom.status | uppercase}} </span> -\n				<span class="caption-subject font-green-sharp bold uppercase">{{mailRoom.subject}}</span>\n			</div>\n			<div class="actions" data-ng-show="mailRoom">\n				<div class="btn-group" data-ng-show="Auth.isAdmin()">\n					<a class="btn grey-salsa btn-circle btn-sm" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n					{{ \'APPLICATION_ASSIGN\' | translate }} <i class="fa fa-angle-down"></i>\n					</a>\n					<ul class="dropdown-menu pull-right">\n						<li data-ng-repeat="agent in agents">\n							<a href="#" data-ng-click="assignAgent(agent.id)">\n							{{agent.fullname}} <span class="badge badge-default"> {{agent.fullname | uppercase | limitTo : 1}} </span>\n							</a>\n						</li>\n					</ul>\n				</div>\n				<div class="btn-group">\n					<a class="btn green-haze btn-circle btn-sm" href="#" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n					{{ \'APPLICATION_SUBMIT\' | translate }} <i class="fa fa-angle-down"></i>\n					</a>\n					<ul class="dropdown-menu pull-right">\n						<li>\n							<a href="#" data-ng-click="updateStatus(\'PENDING\')">\n							{{ \'STATUS_NEW\' | translate | uppercase }} <span class="badge badge-danger">{{ \'STATUS_NEW\' | translate | uppercase | limitTo : 1 }} </span>\n							</a>\n						</li>\n						<li>\n							<a href="#" data-ng-click="updateStatus(\'CLOSED\')">\n							{{ \'STATUS_CLOSED\' | translate | uppercase }} <span class="badge badge-success">{{ \'STATUS_CLOSED\' | translate | uppercase | limitTo : 1 }} </span>\n							</a>\n						</li>\n					</ul>\n				</div>\n			</div>\n		</div>\n		<!-- end PROJECT HEAD -->\n		<div class="portlet-body">\n			<div class="row">\n				<div data-ng-show="mailRoom" data-ng-class="{\'col-md-7 col-sm-7\': mailRoom}">\n					<div class="scroller" id="mailMessages" style="height: 500px; overflow-y: scroll; width: auto;" data-always-visible="1" data-rail-visible1="1" data-initialized="1">\n						<ul class="chats">\n							<li data-ng-class="{\'in\': mailMessage.status == \'RECEIVED\', \'out\': mailMessage.status == \'SENT\' || mailMessage.status == \'SENDING\' || mailMessage.status == \'FAILED\'}" data-ng-repeat="mailMessage in mailRoom.MailMessages | orderBy:\'createdAt\'">\n							<img class="avatar" alt="" data-ng-src="api/users/avatar/{{getCurrentUser().userpic && mailMessage.status === \'SENT\' ? getCurrentUser().userpic : \'unknown_avatar\'}}">\n							<div class="message">\n								<span class="arrow">\n								</span>\n								<span class="bold">From: </span>\n								<!-- <span>{{mailMessage.From.fullname}} </span> -->\n								<span>{{mailMessage.from}}</span>\n								<br>\n								<span class="bold">To: </span>\n								<span>{{mailMessage.to}} </span>\n								<br>\n								<span data-ng-show="mailMessage.cc" class="bold">Cc: </span>\n								<span data-ng-show="mailMessage.cc">{{mailMessage.cc}} </span>\n								<br data-ng-show="mailMessage.cc">\n								<span class="todo-tasklist-date">\n									<i class="fa fa-calendar"></i>\n									<time is="relative-time" datetime="{{mailMessage.createdAt}}">\n										April 1, 2014\n									</time>\n								</span>\n								<!-- <p data-ng-class="{\'text-danger\': mailMessage.status === \'FAILED\'}">{{mailMessage.status}}</p> -->\n								<br><br>\n								<span class="body" data-ng-bind-html="mailMessage.html || mailMessage.text" style="white-space: pre-wrap;">\n								</span>\n								<br>\n								<div data-ng-repeat="mailAttachment in mailMessage.MailAttachments">\n									<strong>{{mailAttachment.fileName}}</strong>\n									<span>\n									{{mailAttachment.length}}B </span>\n									<a target="_self" download="{{mailAttachment.fileName}}" href="api/mail/attachments/{{mailAttachment.id}}">\n										{{ \'APPLICATION_DOWNLOAD\' | translate }}\n									</a>\n								</div>\n							</div>\n						</li>\n						</ul>\n					</div>\n				</div>\n				<div data-ng-class="{\'col-md-5 col-sm-5\': mailRoom, \'col-md-12 col-sm-12\': !mailRoom}">\n					<form name="forms.compose" data-ng-submit="forms.compose.$valid && sendMail()" class="form-horizontal" novalidate>\n						<!-- START HEAD -->\n						<div class="form">\n							<div class="form-group">\n								<div class="col-md-12 col-sm-12">\n									<div class="todo-taskbody-user">\n										<img class="todo-userpic pull-left" data-ng-src="api/users/avatar/{{getCurrentUser().userpic ? getCurrentUser().userpic : \'unknown_avatar\'}}" width="50px" height="50px">\n										<span class="todo-username pull-left">{{ getCurrentUser().fullname }}</span>\n									</div>\n								</div>\n							</div>\n\n							<!-- START FROM -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.compose.from.$invalid && forms.compose.$submitted}">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-1">\n											<label class="control-label">From:</label>\n										</div>\n										<div class="col-md-11">\n											<ui-select data-ng-model="form.from" theme="bootstrap" name="from" required ng-disabled="disabled">\n												<ui-select-match placeholder="From...">{{$select.selected.name}}</ui-select-match>\n												<!-- <ui-select-match placeholder="From...">{{$select.selected.name}} - {{$select.selected.address}}</ui-select-match> -->\n												<ui-select-choices repeat="{address: mailAccount.MailServerOut.username, name: mailAccount.name, id: mailAccount.id} as mailAccount in mailAccounts | filter: $select.search">\n													<div data-ng-bind-html="mailAccount.name | highlight: $select.search"></div>\n													<small data-ng-bind-html="mailAccount.MailServerOut.username | highlight: $select.search"></small>\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="forms.compose.from.$invalid && forms.compose.$submitted" class="help-block help-block-error">\n							          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							        </span>\n										</div>\n									</div>\n								</div>\n							</div>\n							<!-- END FROM -->\n\n							<!-- FAX TO -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.compose.to.$invalid && forms.compose.$submitted}">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-1">\n											<label class="control-label">To:</label>\n										</div>\n										<div class="col-md-11">\n											<ui-select tagging tagging-label="" multiple required data-ng-model="form.sto" theme="bootstrap" name="to" ng-disabled="disabled">\n												<ui-select-match placeholder="To...">{{$item}}</ui-select-match>\n												<ui-select-choices repeat="to in form.to | filter:$select.search">\n													{{to}}\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="forms.compose.to.$invalid && forms.compose.$submitted" class="help-block help-block-error">\n							          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							        </span>\n										</div>\n									</div>\n								</div>\n							</div>\n							<!-- END TO -->\n\n							<!-- START CC -->\n							<div class="form-group">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-1">\n											<label class="control-label">Cc:</label>\n										</div>\n										<div class="col-md-11">\n											<ui-select tagging tagging-label="" multiple data-ng-model="form.scc" theme="bootstrap" name="cc" ng-disabled="disabled">\n												<ui-select-match placeholder="Cc...">{{$item}}</ui-select-match>\n												<ui-select-choices repeat="cc in form.cc">\n													{{cc}}\n												</ui-select-choices>\n											</ui-select>\n										</div>\n									</div>\n								</div>\n							</div>\n							<!-- END CC -->\n\n							<!-- START SUBJECT -->\n							<div data-ng-hide="mailRoom" class="form-group" data-ng-class="{\'has-error\': forms.compose.subject.$invalid && forms.compose.$submitted}">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-1">\n											<label class="control-label">Subject:</label>\n										</div>\n										<div class="col-md-11">\n											<input type="text" name="subject" class="form-control todo-taskbody-taskdesc" placeholder="Subject..." rows="8" data-ng-model="form.subject">\n											<span data-ng-show="forms.compose.subject.$invalid && forms.compose.$submitted" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n									</div>\n								</div>\n							</div>\n							<!-- END SUJBECT -->\n\n							<!-- START HTML -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.compose.text.$invalid && forms.compose.$submitted}">\n								<div class="col-md-12">\n									<div class="inbox-editor inbox-wysihtml5" text-angular data-ng-model="form.html" name="html"></div>\n									<!-- <textarea class="form-control todo-taskbody-taskdesc" rows="8" data-ng-model="form.text" name="text" style="resize: none;"></textarea> -->\n										<span data-ng-show="forms.compose.text.$invalid && forms.compose.$submitted" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n								</div>\n							</div>\n							<!-- END HTML -->\n\n							<!-- START ATTACH -->\n							<div class="form-group">\n								<div class="col-md-6">\n									<input type="file" nv-file-select uploader="uploader" name="file">\n									<table class="table" border="0">\n										<tbody>\n										<tr data-ng-repeat="item in uploader.queue">\n												<td style="border-top-style:none">\n													<strong>\n														{{ item.file.name }}\n													</strong>\n												</td>\n												<td data-ng-show="uploader.isHTML5" nowrap style="border-top-style:none">\n													{{ item.file.size/1024/1024|number:2 }} MB\n												</td>\n												<td nowrap style="border-top-style:none">\n													<button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n															<span class="glyphicon glyphicon-trash"></span> Remove\n													</button>\n												</td>\n											</tr>\n										</tbody>\n									</table>\n								</div>\n								<div class="col-md-6">\n									<div class="form-actions right todo-form-actions">\n										<button class="btn btn-circle btn-sm green-haze">{{ \'APPLICATION_SEND\' | translate }}</button>\n										<input type="button" name="cancel" value="{{ \'APPLICATION_CANCEL\' | translate }}" class="btn btn-circle btn-sm btn-default" data-ng-click="cancel()">\n									</div>\n								</div>\n							</div>\n							<!-- END ATTACH -->\n\n						</div>\n					</form>\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n<!-- END TODO CONTENT -->\n'),
+a.put("app/mail/queue/list/list.html",'<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-envelope"></i>\n						<a href="/square/projects">{{ \'APPLICATION_MAIL\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-layers"></i>\n						<a href="#">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-layers font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="mailQueues.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_QUEUE\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/mail/queues/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getMailQueues([\'name\', \'description\', \'timeout\', \'strategy\'])" csv-header="[\'Name\', \'Description\', \'Timeout\', \'Strategy\']" field-separator=";" filename="mail_queues.csv">\n					<i class="icon-cloud-download"></i></a>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedMailQueues" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="7">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.queuesByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="queueByPage in queuesByPage | filter: $select.search">\n													<div ng-bind-html="queueByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(queue, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n								<th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th st-sort="strategy">{{ \'APPLICATION_STRATEGY\' | translate }}</th>\n								<th st-sort="timeout">{{ \'APPLICATION_AGENT_TIMEOUT\' | translate }}</th>\n						    <th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="queue in displayedMailQueues">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="mailQueues.checked" checklist-value="queue.id"></td>\n					      <td>{{queue.name}}</td>\n								<td>{{queue.description}}</td>\n								<td>{{queue.strategy | uppercase}}</td>\n								<td>{{queue.timeout}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/mail/queues/view/{{queue.id}}/settings">\n										{{ \'APPLICATION_PROFILE\' | translate }}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(queue.name, queue.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedMailQueues.length">\n								<td colspan="6" class="text-center">\n									<i>No available queues</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="strategy" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_STRATEGY\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td/>\n								<td/>\n						  </tr>\n					    <tr>\n					      <td colspan="67" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.queuesByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/mail/queue/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<div class="note note-warning" data-ng-hide="teams.length">\n					<h4 class="block">Warning!</h4>\n					<p>\n						 {{ \'MESSAGE_NO_AVAILABLE_TEAMS\' | translate }}\n					</p>\n				</div>\n				<div  style="width: 50%; margin: 0 auto;">\n					<div class="col-md-9" id="multi-select-team" data-ng-show="teams.length"></div>\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/mail/queue/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getQueue()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-envelope"></i>\n					<a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-layers"></i>\n					<a href="/mail/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n					<i data-ng-show="queue" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="queue">\n					<a href="#">{{queue.name}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/queue.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{queue.name}}\n					</div>\n					<!-- <div class="profile-usertitle-job">\n						{{user.role}}\n					</div> -->\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.mail.queues.view.settings\')}">\n							<a data-ng-href="/mail/queues/view/{{queue.id}}/settings">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n						<li data-ng-class="{active: $state.is(\'main.mail.queues.view.agents\')}">\n							<a data-ng-href="/mail/queues/view/{{queue.id}}/agents">\n							<i class="icon-users"></i>\n							{{ \'APPLICATION_AGENTS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/mail/queue/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<form name="forms.general" data-ng-submit="forms.general.$valid && updateMailQueue()" novalidate>\n					<!-- START NAME -->\n					<div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n						<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n						<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="queue.name" required/>\n						<span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n							<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n						</span>\n					</div>\n					<!-- END NAME -->\n\n					<!-- START DESCRIPTION -->\n					<div class="form-group">\n						<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n						<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="queue.description"/>\n					</div>\n					<!-- END DESCRIPTION -->\n\n					<!-- START TIMEOUT -->\n					<div class="form-group">\n						<label class="control-label">Agent Timeout</label>\n						<input type="number" name="timeout" placeholder="Timeout" class="form-control" min="1" data-ng-model="queue.timeout"/>\n					</div>\n					<!-- END TIMEOUT -->\n\n					<!-- START HEADER SHAPE -->\n					<div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n						<label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}</label>\n						<ui-select data-ng-model="queue.strategy" name="strategy" theme="bootstrap">\n							<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n							<ui-select-choices repeat="strategy in [\'rrmemory\',\'beepall\'] | filter: $select.search">\n								<div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n							</ui-select-choices>\n						</ui-select>\n					</div>\n					<!-- END HEADER SHAPE -->\n					<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n				</form>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/mail/queue/wizard/wizard.html",'<div class="col-md-12">\n  <!-- BEGIN PAGE HEADER-->\n	<div class="page-bar">\n		<ul class="page-breadcrumb">\n			<li>\n				<i class="icon-rocket"></i>\n				<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-envelope"></i>\n				<a href="#">{{ \'APPLICATION_MAILS\' | translate }}</a>\n        <i class="fa fa-angle-right"></i>\n			</li>\n      <li>\n				<i class="icon-layers"></i>\n				<a href="/mail/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n			</li>\n		</ul>\n	</div>\n  <!-- END PAGE HEADER-->\n\n  <!-- BEGIN PORTLET-->\n  <div class="portlet light bordered">\n  	<div class="portlet-title">\n  		<div class="caption font-green-sharp">\n  			<i class="icon-layers font-green-sharp"></i>\n  			<span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }} WIZARD</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n  		<wizard on-finish="createItem()">\n				<wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.general.$valid)">\n					<form name="forms.general" data-ng-submit="forms.general.$valid && createItem()" novalidate>\n						<!-- START NAME -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n							<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n							<span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END NAME -->\n\n						<!-- START DESCRIPTION -->\n						<div class="form-group">\n							<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n							<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n						</div>\n						<!-- END DESCRIPTION -->\n\n						<!-- START TIMEOUT -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.timeout.$touched || forms.general.$submitted) && forms.general.timeout.$invalid}">\n							<label class="control-label">{{\'APPLICATION_AGENT_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<input type="number" min="0" name="timeout" placeholder="Timeout" class="form-control" data-ng-model="item.timeout" required/>\n							<span data-ng-show="(forms.general.timeout.$touched || forms.general.$submitted) && forms.general.timeout.$invalid && forms.general.timeout.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END TIMEOUT -->\n\n						<!-- START STRATEGY -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n							<label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<ui-select data-ng-model="item.strategy" name="strategy" theme="bootstrap" required>\n								<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n								<ui-select-choices repeat="strategy in [\'rrmemory\',\'beepall\'] | filter: $select.search">\n									<div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n								</ui-select-choices>\n							</ui-select>\n							<span data-ng-show="(forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid && forms.general.strategy.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END STRATEGY -->\n						<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CREATE\' | translate}}"/>\n					</form>\n			  </wz-step>\n				<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n					<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n					<input type="submit" class="btn green-haze" wz-next value="{{ \'APPLICATION_CONFIRM\' | translate }}"/>\n				</wz-step>\n  		</wizard>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),a.put("app/mail/realtime/view/agent/agent.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n	<div class="col-md-12">\n		<!-- START TABLE -->\n		<table st-table="displayedAgents" st-safe-src="agents" class="table table-striped table-bordered table-hover">\n			<div class="table-responsive">\n			  <thead>\n					<tr>\n						<th colspan="12">\n							<div class="row">\n								<div class="col-md-6">\n									<ui-select class="input-xsmall" ng-model="conf.agentsByPage" theme="bootstrap" ng-disabled="disabled">\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n										<ui-select-choices repeat="agentByPage in agentsByPage | filter: $select.search">\n											<div ng-bind-html="agentByPage.name | highlight: $select.search"></div>\n										</ui-select-choices>\n									</ui-select>\n								</div>\n								<div class="col-md-6">\n									<div class="input-group input-medium pull-right">\n										<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n										<span class="input-group-addon">\n											<i class="fa fa-search"></i>\n										</span>\n									</div>\n								</div>\n							</div>\n						</th>\n					</tr>\n				  <tr>\n						<th></th>\n						<th st-sort="uniqueid" reverse class="input-small">{{ \'APPLICATION_UNIQUEID\' | translate }}</th>\n				    <th st-sort="queue" class="input-medium">{{ \'APPLICATION_QUEUE\' | translate }}</th>\n				    <th st-sort="membername" class="input-medium">{{ \'APPLICATION_AGENT\' | translate }}</th>\n						<th st-sort="subject" class="input-small">{{ \'APPLICATION_SUBJECT\' | translate }}</th>\n						<th st-sort="from" class="input-small">{{ \'APPLICATION_FROM\' | translate }}</th>\n						<th st-sort="accountname" class="input-small">{{ \'APPLICATION_TO\' | translate }}</th>\n						<th st-sort="agentcalledAt" st-sort-default="reverse">{{ \'APPLICATION_CALLED_AT\' | translate }}</th>\n						<th st-sort="agentconnectAt">{{ \'APPLICATION_CONNECTED_AT\' | translate }}</th>\n						<th st-sort="agentringnoanswerAt">{{ \'APPLICATION_UNASWER_AT\' | translate }}</th>\n						<th st-sort="reason">{{ \'APPLICATION_REASON\' | translate }}</th>\n				  </tr>\n			  </thead>\n			  <tbody>\n			    <tr data-ng-repeat="agent in displayedAgents">\n						<td>\n							<span>\n								<i data-ng-class="{\'icon-user font-yellow\': agent.lastevent === \'called\',\n								\'icon-user-following font-green\': agent.lastevent === \'agent\',\n								\'icon-user-unfollow font-red\': agent.lastevent === \'timeout\',\n								\'icon-user-unfollow font-blue\': agent.lastevent === \'answered_elsewhere\'}"></i>\n							</span>\n						</td>\n						<td>{{agent.uniqueid}}</td>\n						<td>{{agent.mailqueuename}}</td>\n						<td>{{agent.fullname}}</td>\n						<td>{{agent.subject}}</td>\n						<td>{{agent.from}}</td>\n						<td>{{agent.accountname}}</td>\n						<td>\n							<time is="relative-time" datetime="{{agent.agentcalledAt}}">\n								April 1, 2014\n							</time>\n						</td>\n						<td>\n							<time is="relative-time" datetime="{{agent.agentconnectedAt}}" data-ng-show="agent.agentconnectedAt">\n								April 1, 2014\n							</time>\n						</td>\n						<td>\n							<time is="relative-time" datetime="{{agent.agentringnoanswerAt}}" data-ng-show="agent.agentringnoanswerAt">\n								April 1, 2014\n							</time>\n						</td>\n						<td>\n							{{agent.reason | uppercase}}\n						</td>\n			    </tr>\n					<tr data-ng-hide="displayedAgents.length">\n						<td colspan="11" style="text-align:center;">\n							<i>No agents available</i>\n						</td>\n					</tr>\n			  </tbody>\n			  <tfoot>\n					<tr>\n						<td/>\n						<td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="uniqueid" data-ng-model="filters.uniqueid" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_UNIQUEID\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="queue" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_QUEUE\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="membername" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_AGENT\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n						<td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="from" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_SUBJECT\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n						</td>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="from" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_FROM\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n						<td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="accountname" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_TO\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n						<td colspan="7"></td>\n				  </tr>\n			    <tr>\n			      <td colspan="12" class="text-center">\n							<div class="pagination" st-pagination st-items-by-page="conf.agentsByPage.value" st-displayed-pages="7"></div>\n			      </td>\n			    </tr>\n			  </tfoot>\n			</div>\n		</table>\n		<!-- END TABLE -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/mail/realtime/view/session/session.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initMails()">\n	<div class="col-md-12">\n		<!-- START TABLE -->\n		<table st-table="displayedMails" st-safe-src="sessions" class="table table-striped table-bordered table-hover">\n			<div class="table-responsive">\n			  <thead>\n					<tr>\n						<th colspan="12">\n							<div class="row">\n								<div class="col-md-6">\n									<ui-select class="input-xsmall" ng-model="conf.sessionsByPage" theme="bootstrap" ng-disabled="disabled">\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n										<ui-select-choices repeat="sessionByPage in sessionsByPage | filter: $select.search">\n											<div ng-bind-html="sessionByPage.name | highlight: $select.search"></div>\n										</ui-select-choices>\n									</ui-select>\n								</div>\n								<div class="col-md-6">\n									<div class="input-group input-medium pull-right">\n										<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n										<span class="input-group-addon">\n											<i class="fa fa-search"></i>\n										</span>\n									</div>\n								</div>\n							</div>\n						</th>\n					</tr>\n				  <tr>\n						<th></th>\n						<th st-sort="uniqueid" reverse class="input-small">{{ \'APPLICATION_UNIQUEID\' | translate }}</th>\n				    <th st-sort="queue" class="input-medium">{{ \'APPLICATION_QUEUE\' | translate }}</th>\n				    <th st-sort="membername" class="input-medium">{{ \'APPLICATION_AGENT\' | translate }}</th>\n						<th st-sort="subject" class="input-small">{{ \'APPLICATION_SUBJECT\' | translate }}</th>\n						<th st-sort="from" class="input-small">{{ \'APPLICATION_FROM\' | translate }}</th>\n						<th st-sort="accountname" class="input-small">{{ \'APPLICATION_TO\' | translate }}</th>\n						<th st-sort="sessioncalledAt" st-sort-default="reverse">{{ \'APPLICATION_JOIN_AT\' | translate }}</th>\n						<th st-sort="sessionconnectAt">{{ \'APPLICATION_LEAVE_AT\' | translate }}</th>\n						<th st-sort="sessionringnoanswerAt">{{ \'APPLICATION_UNMANAGED_AT\' | translate }}</th>\n				  </tr>\n			  </thead>\n			  <tbody>\n			    <tr data-ng-repeat="session in displayedMails">\n						<td>\n							<span>\n								<i data-ng-class="{\'icon-user font-yellow\': session.mailjoinAt && !session.mailleaveAt,\n								\'icon-user-following font-green\': session.fullname,\n								\'icon-user-unfollow font-red\': session.mailunmanagedAt}"></i>\n							</span>\n						</td>\n						<td>{{session.uniqueid}}</td>\n						<td>{{session.mailqueuename}}</td>\n						<td>{{session.fullname}}</td>\n						<td>{{session.subject}}</td>\n						<td>{{session.from}}</td>\n						<td>{{session.accountname}}</td>\n						<td>\n							<time is="relative-time" datetime="{{session.mailjoinAt}}">\n								April 1, 2014\n							</time>\n						</td>\n						<td>\n							<time is="relative-time" datetime="{{session.mailleaveAt}}" data-ng-show="session.mailleaveAt">\n								April 1, 2014\n							</time>\n						</td>\n						<td>\n							<time is="relative-time" datetime="{{session.mailunmanagedAt}}" data-ng-show="session.mailunmanagedAt">\n								April 1, 2014\n							</time>\n						</td>\n			    </tr>\n					<tr data-ng-hide="displayedMails.length">\n						<td colspan="11" style="text-align:center;">\n							<i>No sessions available</i>\n						</td>\n					</tr>\n			  </tbody>\n			  <tfoot>\n					<tr>\n						<td/>\n						<td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="uniqueid" data-ng-model="filters.uniqueid" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_UNIQUEID\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="queue" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_QUEUE\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="membername" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_AGENT\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n						<td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="from" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_SUBJECT\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n						</td>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="from" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_FROM\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n						<td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="accountname" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_TO\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n						<td colspan="7"></td>\n				  </tr>\n			    <tr>\n			      <td colspan="12" class="text-center">\n							<div class="pagination" st-pagination st-items-by-page="conf.sessionsByPage.value" st-displayed-pages="7"></div>\n			      </td>\n			    </tr>\n			  </tfoot>\n			</div>\n		</table>\n		<!-- END TABLE -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/mail/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-energy"></i>\n					<a href="/mail/realtime/list">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<div>\n		    <nav class="navbar navbar-default" role="navigation">\n		        <div class="navbar-header">\n		            <button type="button" class="navbar-toggle" ng-init="navCollapsed = true" ng-click="navCollapsed = !navCollapsed">\n		                <span class="sr-only">Toggle navigation</span>\n		                <span class="icon-bar"></span>\n		                <span class="icon-bar"></span>\n		                <span class="icon-bar"></span>\n		            </button>\n		            <!-- <a class="navbar-brand" ui-sref="home">Brand</a> -->\n		        </div>\n\n		        <!-- Collect the nav links, forms, and other content for toggling -->\n		        <div class="collapse navbar-collapse" ng-class="!navCollapsed && \'in\'">\n		            <ul class="nav navbar-nav">\n		                <li dropdown>\n		                    <a href="#" dropdown-toggle>\n		                        {{ \'APPLICATION_AGENTS\' | translate }}\n		                        <b class=\'caret\'></b>\n		                    </a>\n		                    <tree tree=\'agents\'></tree>\n		                </li>\n										<li dropdown>\n		                    <a href="#" dropdown-toggle>\n		                        {{ \'APPLICATION_SESSIONS\' | translate }}\n		                        <b class=\'caret\'></b>\n		                    </a>\n		                    <tree tree=\'sessions\'></tree>\n		                </li>\n		            </ul>\n		            <!-- <ul class="nav navbar-nav">\n		                <li dropdown>\n		                    <a href="#" dropdown-toggle>\n		                        {{ \'APPLICATION_QUEUES\' | translate }}\n		                        <b class=\'caret\'></b>\n		                    </a>\n		                    <tree tree=\'queues\'></tree>\n		                </li>\n		            </ul> -->\n		        </div>\n		        <!-- /.navbar-collapse -->\n		    </nav>\n		</div>\n		<div ui-view></div>\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/mail/statistics/statistics.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-envelope"></i>\n					<a href="/agent">{{ \'APPLICATION_MAILS\' | translate }}</a>\n				</li>\n				<li>\n					<a href="#">{{agent.fullname}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img ng-src="assets/images/media/statistics.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{agent.fullname}}\n					</div>\n					<div class="profile-usertitle-job">\n						{{agent.role}}\n					</div>\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.mail.statistics.summary\')}">\n							<a data-ng-href="/mail/statistics/summary">\n							<i class="icon-bar-chart"></i>\n							{{ \'APPLICATION_SUMMARY\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/mail/statistics/statistics.summary.html",'<div class="row">\n	<div class="col-md-12">\n		<!-- BEGIN PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_CONVERSATIONS\' | translate }}</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<div class="row">\n					<div class="col-md-6">\n						<div class="portlet sale-summary">\n							<div class="portlet-body">\n								<ul class="list-unstyled">\n									<li>\n										<span class="sale-info">\n										{{ \'APPLICATION_INBOX\' | translate }} <i class="fa fa-img-up"></i>\n										</span>\n										<span class="sale-num">\n										{{ (mailMessages | filter:{ directory:\'INBOX\' }).length }} </span>\n									</li>\n									<li>\n										<span class="sale-info">\n										{{ \'APPLICATION_SENT\' | translate }} <i class="fa fa-img-down"></i>\n										</span>\n										<span class="sale-num">\n										{{ (mailMessages | filter:{ directory:\'SENT\' }).length }} </span>\n									</li>\n									<li>\n										<span class="sale-info">\n										{{ \'APPLICATION_OUTGOING\' | translate }} <i class="fa fa-img-down"></i>\n										</span>\n										<span class="sale-num">\n										{{ (mailMessages | filter:{ directory:\'NOT SENT\' }).length }} </span>\n									</li>\n									<li>\n										<span class="sale-info">\n										{{ \'APPLICATION_DRAFT\' | translate }} <i class="fa fa-img-down"></i>\n										</span>\n										<span class="sale-num">\n										{{ (mailMessages | filter:{ directory:\'DRAFT\' }).length }} </span>\n									</li>\n									<li>\n										<span class="sale-info">\n										{{ \'APPLICATION_TRASH\' | translate }} <i class="fa fa-img-down"></i>\n										</span>\n										<span class="sale-num">\n										{{ (mailMessages | filter:{ directory:\'TRASH\' }).length }} </span>\n									</li>\n								</ul>\n							</div>\n						</div>\n					</div>\n					<div class="col-md-6">\n						<canvas class="chart chart-pie" data="[\n						(mailMessages | filter:{ directory:\'INBOX\' }).length,\n						(mailMessages | filter:{ directory:\'SENT\' }).length,\n						(mailMessages | filter:{ directory:\'NOT SENT\' }).length,\n						(mailMessages | filter:{ directory:\'DRAFT\' }).length,\n						(mailMessages | filter:{ directory:\'TRASH\' }).length]" labels="[\n						$translate.instant(\'APPLICATION_INBOX\'),\n						$translate.instant(\'APPLICATION_SENT\'),\n						$translate.instant(\'APPLICATION_OUTGOING\'),\n						$translate.instant(\'APPLICATION_DRAFT\'),\n						$translate.instant(\'APPLICATION_TRASH\')]" legend="true"></canvas>\n					</div>\n				</div>\n			</div>\n		</div>\n		<!-- END PORTLET-->\n\n		<!-- BEGIN PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-pencil font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_OTHER_INFO\' | translate }}</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<div class="row">\n					<div class="col-md-6">\n						<div class="portlet sale-summary">\n							<div class="portlet-body">\n								<ul class="list-unstyled">\n									<li>\n										<span class="sale-info">\n										{{ \'APPLICATION_READ\' | translate }} <i class="fa fa-img-up"></i>\n										</span>\n										<span class="sale-num">\n										{{ (mailMessages | filter:{ read:\'true\' }).length }} </span>\n									</li>\n									<li>\n										<span class="sale-info">\n										{{ \'APPLICATION_UNREAD\' | translate }} <i class="fa fa-img-down"></i>\n										</span>\n										<span class="sale-num">\n										{{ (mailMessages | filter:{ read:\'false\' }).length }} </span>\n									</li>\n									<li>\n										<span class="sale-info">\n										{{ \'APPLICATION_FAVORITE\' | translate }} <i class="fa fa-img-down"></i>\n										</span>\n										<span class="sale-num">\n										{{ (mailMessages | filter:{ favorite:\'true\' }).length }} </span>\n									</li>\n								</ul>\n							</div>\n						</div>\n					</div>\n					<div class="col-md-6">\n						<canvas class="chart chart-pie" data="[\n						(mailMessages | filter:{ read:\'true\' }).length,\n						(mailMessages | filter:{ read:\'false\' }).length]" labels="[\n						$translate.instant(\'APPLICATION_READ\'),\n						$translate.instant(\'APPLICATION_UNREAD\')]" legend="true"></canvas>\n					</div>\n				</div>\n			</div>\n		</div>\n		<!-- END PORTLET-->\n	</div>\n</div>\n'),a.put("app/mail/template/list/list.html",'<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-envelope"></i>\n						<a href="/square/projects">{{ \'APPLICATION_MAIL\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-docs"></i>\n						<a href="#">{{ \'APPLICATION_TEMPLATES\' | translate }}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-docs font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_TEMPLATES\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="mailTemplates.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_TEMPLATE\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/mail/templates/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getMailTemplates([\'name\', \'description\', \'timeout\', \'strategy\'])" csv-header="[\'Name\', \'Description\', \'Timeout\', \'Strategy\']" field-separator=";" filename="mail_templates.csv">\n					<i class="icon-cloud-download"></i></a>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedMailTemplates" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="7">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.templatesByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="queueByPage in templatesByPage | filter: $select.search">\n													<div ng-bind-html="queueByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(template, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n								<th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<!-- <th st-sort="strategy">{{ \'APPLICATION_STRATEGY\' | translate }}</th>\n								<th st-sort="timeout">{{ \'APPLICATION_AGENT_TIMEOUT\' | translate }}</th> -->\n						    <th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="template in displayedMailTemplates">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="mailTemplates.checked" checklist-value="template.id"></td>\n					      <td>{{template.name}}</td>\n								<td>{{template.description}}</td>\n								<!-- <td>{{template.strategy | uppercase}}</td>\n								<td>{{template.timeout}}</td> -->\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/mail/templates/view/{{template.id}}/settings">\n										{{ \'APPLICATION_PROFILE\' | translate }}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(template.name, template.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedMailTemplates.length">\n								<td colspan="6" class="text-center">\n									<i>No available templates</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<!-- <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="strategy" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_STRATEGY\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td/> -->\n								<td/>\n						  </tr>\n					    <tr>\n					      <td colspan="67" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.templatesByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/mail/template/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<div class="note note-warning" data-ng-hide="teams.length">\n					<h4 class="block">Warning!</h4>\n					<p>\n						 {{ \'MESSAGE_NO_AVAILABLE_TEAMS\' | translate }}\n					</p>\n				</div>\n				<div  style="width: 50%; margin: 0 auto;">\n					<div class="col-md-9" id="multi-select-team" data-ng-show="teams.length"></div>\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/mail/template/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initItem()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-envelope"></i>\n					<a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-docs"></i>\n					<a href="/mail/templates/list">{{ \'APPLICATION_TEMPLATES\' | translate }}</a>\n					<i data-ng-show="item" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="item">\n					<a href="#">{{item.name}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/template.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{item.name}}\n					</div>\n					<!-- <div class="profile-usertitle-job">\n						{{user.role}}\n					</div> -->\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.mail.templates.view.settings\')}">\n							<a data-ng-href="/mail/templates/view/{{item.id}}/settings">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/mail/template/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<form name="forms.template" data-ng-submit="forms.template.$valid && updateItem()" class="form-horizontal" novalidate>\n					<!-- START NAME -->\n					<div class="form-group" data-ng-class="{\'has-error\': forms.template.name.$invalid && forms.template.$submitted}">\n						<div class="col-md-12">\n							<div class="row">\n								<div class="col-md-1">\n									<label class="control-label">{{\'APPLICATION_NAME\' | translate}}:<span class="required" aria-required="true">*</span></label>\n								</div>\n								<div class="col-md-11">\n									<input type="text" name="name" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_NAME\' | translate}}..." rows="8" data-ng-model="item.name">\n									<span data-ng-show="forms.template.name.$invalid && forms.template.$submitted" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n							</div>\n						</div>\n					</div>\n					<!-- END NAME -->\n\n					<!-- START DESCRIPTION -->\n					<div class="form-group" data-ng-class="{\'has-error\': forms.template.description.$invalid && forms.template.$submitted}">\n						<div class="col-md-12">\n							<div class="row">\n								<div class="col-md-1">\n									<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}:</label>\n								</div>\n								<div class="col-md-11">\n									<input type="text" name="name" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}..." rows="8" data-ng-model="item.description">\n									<span data-ng-show="forms.template.name.$invalid && forms.template.$submitted" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n							</div>\n						</div>\n					</div>\n					<!-- END NAME -->\n\n					<!-- START FROM -->\n					<div class="form-group" data-ng-class="{\'has-error\': forms.template.from.$invalid && forms.template.$submitted}">\n						<div class="col-md-12">\n							<div class="row">\n								<div class="col-md-1">\n									<label class="control-label">From:<span class="required" aria-required="true">*</span></label>\n								</div>\n								<div class="col-md-11">\n									<ui-select data-ng-model="item.from" theme="bootstrap" name="from" required ng-disabled="disabled">\n										<ui-select-match placeholder="From...">{{$select.selected.name}}</ui-select-match>\n										<ui-select-choices repeat="{address: mailAccount.MailServerOut.username, name: mailAccount.name, id: mailAccount.id} as mailAccount in mailAccounts | filter: $select.search">\n											<div data-ng-bind-html="mailAccount.name | highlight: $select.search"></div>\n											<small data-ng-bind-html="mailAccount.MailServerOut.username | highlight: $select.search"></small>\n										</ui-select-choices>\n									</ui-select>\n									<span data-ng-show="forms.template.from.$invalid && forms.template.$submitted" class="help-block help-block-error">\n					          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n					        </span>\n								</div>\n							</div>\n						</div>\n					</div>\n					<!-- END FROM -->\n\n					<!-- FAX TO -->\n					<div class="form-group" data-ng-class="{\'has-error\': forms.template.to.$invalid && forms.template.$submitted}">\n						<div class="col-md-12">\n							<div class="row">\n								<div class="col-md-1">\n									<label class="control-label">To:<span class="required" aria-required="true">*</span></label>\n								</div>\n								<div class="col-md-11">\n									<ui-select tagging tagging-label="" multiple required data-ng-model="item.sto" theme="bootstrap" name="to" ng-disabled="disabled">\n										<ui-select-match placeholder="To...">{{$item}}</ui-select-match>\n										<ui-select-choices repeat="to in item.to | filter:$select.search">\n											{{to}}\n										</ui-select-choices>\n									</ui-select>\n									<span data-ng-show="forms.template.to.$invalid && forms.template.$submitted" class="help-block help-block-error">\n					          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n					        </span>\n								</div>\n							</div>\n						</div>\n					</div>\n					<!-- END TO -->\n\n					<!-- START CC -->\n					<div class="form-group">\n						<div class="col-md-12">\n							<div class="row">\n								<div class="col-md-1">\n									<label class="control-label">Cc:</label>\n								</div>\n								<div class="col-md-11">\n									<ui-select tagging tagging-label="" multiple data-ng-model="item.scc" theme="bootstrap" name="cc" ng-disabled="disabled">\n										<ui-select-match placeholder="Cc...">{{$item}}</ui-select-match>\n										<ui-select-choices repeat="cc in item.cc">\n											{{cc}}\n										</ui-select-choices>\n									</ui-select>\n								</div>\n							</div>\n						</div>\n					</div>\n					<!-- END CC -->\n\n					<!-- START SUBJECT -->\n					<div class="form-group" data-ng-class="{\'has-error\': forms.template.subject.$invalid && forms.template.$submitted}">\n						<div class="col-md-12">\n							<div class="row">\n								<div class="col-md-1">\n									<label class="control-label">{{\'APPLICATION_SUBJECT\' | translate}}:<span class="required" aria-required="true">*</span></label>\n								</div>\n								<div class="col-md-11">\n									<input type="text" name="subject" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_SUBJECT\' | translate}}..." rows="8" data-ng-model="item.subject">\n									<span data-ng-show="forms.template.subject.$invalid && forms.template.$submitted" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n							</div>\n						</div>\n					</div>\n					<!-- END SUJBECT -->\n\n					<!-- START HTML -->\n					<div class="form-group" data-ng-class="{\'has-error\': forms.template.text.$invalid && forms.template.$submitted}">\n						<div class="col-md-12">\n							<div class="inbox-editor inbox-wysihtml5" text-angular data-ng-model="item.html" name="html"></div>\n							<!-- <textarea class="form-control todo-taskbody-taskdesc" rows="8" data-ng-model="form.text" name="text" style="resize: none;"></textarea> -->\n								<span data-ng-show="forms.template.text.$invalid && forms.template.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n						</div>\n					</div>\n					<!-- END HTML -->\n\n					<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n				</form>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/mail/template/wizard/wizard.html",'<div class="col-md-12">\n  <!-- BEGIN PAGE HEADER-->\n	<div class="page-bar">\n		<ul class="page-breadcrumb">\n			<li>\n				<i class="icon-rocket"></i>\n				<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-envelope"></i>\n				<a href="#">{{ \'APPLICATION_MAILS\' | translate }}</a>\n        <i class="fa fa-angle-right"></i>\n			</li>\n      <li>\n				<i class="icon-docs"></i>\n				<a href="/mail/templates/list">{{ \'APPLICATION_TEMPLATES\' | translate }}</a>\n			</li>\n		</ul>\n	</div>\n  <!-- END PAGE HEADER-->\n\n  <!-- BEGIN PORTLET-->\n  <div class="portlet light bordered">\n  	<div class="portlet-title">\n  		<div class="caption font-green-sharp">\n  			<i class="icon-docs font-green-sharp"></i>\n  			<span class="caption-subject">{{ \'APPLICATION_TEMPLATES\' | translate }} WIZARD</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n  		<wizard on-finish="createItem()">\n				<wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.general.$valid)">\n					<form name="forms.template" data-ng-submit="forms.template.$valid && saveTemplate()" class="form-horizontal" novalidate>\n						<!-- START HEAD -->\n						<div class="form">\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.template.name.$invalid && forms.template.$submitted}">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-1">\n											<label class="control-label">{{\'APPLICATION_NAME\' | translate}}:<span class="required" aria-required="true">*</span></label>\n										</div>\n										<div class="col-md-11">\n											<input type="text" name="name" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_NAME\' | translate}}..." rows="8" data-ng-model="form.name">\n											<span data-ng-show="forms.template.name.$invalid && forms.template.$submitted" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n									</div>\n								</div>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.template.description.$invalid && forms.template.$submitted}">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-1">\n											<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}:</label>\n										</div>\n										<div class="col-md-11">\n											<input type="text" name="name" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}..." rows="8" data-ng-model="form.description">\n											<span data-ng-show="forms.template.name.$invalid && forms.template.$submitted" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n									</div>\n								</div>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START FROM -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.template.from.$invalid && forms.template.$submitted}">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-1">\n											<label class="control-label">From:<span class="required" aria-required="true">*</span></label>\n										</div>\n										<div class="col-md-11">\n											<ui-select data-ng-model="form.from" theme="bootstrap" name="from" required ng-disabled="disabled">\n												<ui-select-match placeholder="From...">{{$select.selected.name}}</ui-select-match>\n												<!-- <ui-select-match placeholder="From...">{{$select.selected.name}} - {{$select.selected.address}}</ui-select-match> -->\n												<ui-select-choices repeat="{address: mailAccount.MailServerOut.username, name: mailAccount.name, id: mailAccount.id} as mailAccount in mailAccounts | filter: $select.search">\n													<div data-ng-bind-html="mailAccount.name | highlight: $select.search"></div>\n													<small data-ng-bind-html="mailAccount.MailServerOut.username | highlight: $select.search"></small>\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="forms.template.from.$invalid && forms.template.$submitted" class="help-block help-block-error">\n							          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							        </span>\n										</div>\n									</div>\n								</div>\n							</div>\n							<!-- END FROM -->\n\n							<!-- FAX TO -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.template.to.$invalid && forms.template.$submitted}">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-1">\n											<label class="control-label">To:<span class="required" aria-required="true">*</span></label>\n										</div>\n										<div class="col-md-11">\n											<ui-select tagging tagging-label="" multiple required data-ng-model="form.sto" theme="bootstrap" name="to" ng-disabled="disabled">\n												<ui-select-match placeholder="To...">{{$item}}</ui-select-match>\n												<ui-select-choices repeat="to in form.to | filter:$select.search">\n													{{to}}\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="forms.template.to.$invalid && forms.template.$submitted" class="help-block help-block-error">\n							          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							        </span>\n										</div>\n									</div>\n								</div>\n							</div>\n							<!-- END TO -->\n\n							<!-- START CC -->\n							<div class="form-group">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-1">\n											<label class="control-label">Cc:</label>\n										</div>\n										<div class="col-md-11">\n											<ui-select tagging tagging-label="" multiple data-ng-model="form.scc" theme="bootstrap" name="cc" ng-disabled="disabled">\n												<ui-select-match placeholder="Cc...">{{$item}}</ui-select-match>\n												<ui-select-choices repeat="cc in form.cc">\n													{{cc}}\n												</ui-select-choices>\n											</ui-select>\n										</div>\n									</div>\n								</div>\n							</div>\n							<!-- END CC -->\n\n							<!-- START SUBJECT -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.template.subject.$invalid && forms.template.$submitted}">\n								<div class="col-md-12">\n									<div class="row">\n										<div class="col-md-1">\n											<label class="control-label">{{\'APPLICATION_SUBJECT\' | translate}}:<span class="required" aria-required="true">*</span></label>\n										</div>\n										<div class="col-md-11">\n											<input type="text" name="subject" class="form-control todo-taskbody-taskdesc" placeholder="{{\'APPLICATION_SUBJECT\' | translate}}..." rows="8" data-ng-model="form.subject">\n											<span data-ng-show="forms.template.subject.$invalid && forms.template.$submitted" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n									</div>\n								</div>\n							</div>\n							<!-- END SUJBECT -->\n\n							<!-- START HTML -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.template.text.$invalid && forms.template.$submitted}">\n								<div class="col-md-12">\n									<div class="inbox-editor inbox-wysihtml5" text-angular data-ng-model="form.html" name="html"></div>\n									<!-- <textarea class="form-control todo-taskbody-taskdesc" rows="8" data-ng-model="form.text" name="text" style="resize: none;"></textarea> -->\n										<span data-ng-show="forms.template.text.$invalid && forms.template.$submitted" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n								</div>\n							</div>\n							<!-- END HTML -->\n\n							<!-- START ATTACH -->\n							<!-- <div class="form-group">\n								<div class="col-md-6">\n									<input type="file" nv-file-select uploader="uploader" name="file">\n									<table class="table" border="0">\n										<tbody>\n										<tr data-ng-repeat="item in uploader.queue">\n												<td style="border-top-style:none">\n													<strong>\n														{{ item.file.name }}\n													</strong>\n												</td>\n												<td data-ng-show="uploader.isHTML5" nowrap style="border-top-style:none">\n													{{ item.file.size/1024/1024|number:2 }} MB\n												</td>\n												<td nowrap style="border-top-style:none">\n													<button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n															<span class="glyphicon glyphicon-trash"></span> Remove\n													</button>\n												</td>\n											</tr>\n										</tbody>\n									</table>\n								</div>\n								<div class="col-md-6">\n									<div class="form-actions right todo-form-actions">\n										<button class="btn btn-circle btn-sm green-haze">{{ \'APPLICATION_SEND\' | translate }}</button>\n										<input type="button" name="cancel" value="{{ \'APPLICATION_CANCEL\' | translate }}" class="btn btn-circle btn-sm btn-default" data-ng-click="cancel()">\n									</div>\n								</div>\n							</div> -->\n							<!-- END ATTACH -->\n						</div>\n						<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="goNext()"/>\n					</form>\n			  </wz-step>\n				<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n					<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n					<input type="submit" class="btn green-haze" wz-next value="{{ \'APPLICATION_CONFIRM\' | translate }}"/>\n				</wz-step>\n  		</wizard>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),
+a.put("app/mail/timeline/list/list.html",'<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-envelope"></i>\n						<a href="#">{{ \'APPLICATION_MAIL\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-list"></i>\n						<a href="/mail/timeline/list"> Timeline</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initList()">\n	<div class="col-md-12">\n    <h3 class="page-title">\n				Timeline\n			</h3>\n			<!-- END PAGE HEADER-->\n			<!-- BEGIN PAGE CONTENT-->\n			<div class="timeline">\n				<!-- TIMELINE ITEM -->\n				<div class="timeline-item" data-ng-repeat="event in events | orderBy:\'-id\'">\n					<div class="timeline-badge">\n						<div class="timeline-icon">\n							<i class="icon-envelope font-green-haze"></i>\n						</div>\n					</div>\n					<div class="timeline-body">\n						<div class="timeline-body-arrow"></div>\n						<div class="timeline-body-head">\n							<div class="timeline-body-head-caption">\n								<span class="timeline-body-alerttitle" data-ng-class="{\'font-red\': event.name == \'INCOMING\', \'font-blue\': event.name == \'ATTEMPT\', \'font-green\': event.name == \'TAKEN\'}">{{event.name | uppercase}}</span>\n								<span class="timeline-body-time font-grey-cascade">at {{event.createdAt | date:\'yyyy-MM-dd HH:mm:ss\'}}</span>\n							</div>\n							<div class="timeline-body-head-actions">\n								<div class="btn-group">\n									<a class="btn btn-circle btn-sm dropdown-toggle btn-success" href="/mail/inbox/room/{{event.MailRoomId}}">Go To Mail</a>\n								</div>\n							</div>\n						</div>\n						<div class="timeline-body-content">\n							<span class="font-grey-cascade" data-ng-show="event.User">\n							{{event.MailRoom.subject ? event.MailRoom.subject + \' - \' : \'\'}}<a href="/agents/view/{{event.UserId}}/account">{{event.User.fullname}}</a>\n							</span>\n						</div>\n					</div>\n				</div>\n				<!-- END TIMELINE ITEM -->\n			</div>\n			<!-- END PAGE CONTENT-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/main/main.html",'<!-- BEGIN HEADER -->\n<div data-ng-include="\'components/header/header.html\'" data-ng-controller="HeaderController" class="page-header navbar navbar-fixed-top">\n</div>\n<!-- END HEADER -->\n\n<div class="clearfix">\n</div>\n<!-- BEGIN CONTAINER -->\n<div class="page-container" data-ng-init="initMain()">\n\n  <!-- BEGIN SIDEBAR -->\n  <div data-ng-include="\'components/sidebar/sidebar.html\'" data-ng-controller="SidebarController" class="page-sidebar-wrapper">\n  </div>\n  <!-- END SIDEBAR -->\n\n  <!-- BEGIN CONTENT -->\n  <div class="page-content-wrapper">\n    <div class="page-content">\n\n      <!-- BEGIN PAGE CONTENT -->\n      <!-- <toaster-container></toaster-container> -->\n      <div ui-view class=""></div>\n      <!-- END PAGE CONTENT  -->\n\n    </div>\n  </div>\n  <!-- END CONTENT -->\n\n  <!-- BEGIN QUICK SIDEBAR -->\n  <a href="javascript:;" class="page-quick-sidebar-toggler"><i class="icon-close"></i></a>\n  <div data-ng-include="\'components/quickSidebar/quickSidebar.html\'" data-ng-controller="QuickSidebarController" class="page-quick-sidebar-wrapper">\n  </div>\n  <!-- END QUICK SIDEBAR -->\n\n</div>\n<!-- END CONTAINER -->\n\n<!-- BEGIN FOOTER -->\n<div data-ng-include="\'components/footer/footer.html\'" data-ng-controller="FooterController" class="page-footer">\n</div>\n<!-- END FOOTER -->\n\n<!-- BEGIN JAVASCRIPTS(Load javascripts at bottom, this will reduce page load time) -->\n<!-- BEGIN CORE PLUGINS -->\n<!--[if lt IE 9]>\n<script src="../../assets/global/plugins/respond.min.js"></script>\n<script src="../../assets/global/plugins/excanvas.min.js"></script>\n<![endif]-->\n\n<!-- END JAVASCRIPTS -->\n'),a.put("app/main/template.queryBuilderView.html",'\n		<div class="alert alert-warning alert-group">\n				<div class="row">\n						<ui-select data-ng-model="group.boolean" theme="bootstrap" class="col-md-2" data-ng-if="group.type == \'CONDITION\'">\n							<ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n							<ui-select-choices repeat="bool.name as bool in booleans| filter: $select.search">\n								<div ng-bind-html="bool.name | highlight: $select.search"></div>\n							</ui-select-choices>\n						</ui-select>\n						<button ng-click="addCondition(group.type)" class="btn btn-success col-md-2 left-margin" ><span class="glyphicon glyphicon-plus-sign" ></span> {{\'APPLICATION_ADD_\'+group.type | translate}}</button>\n						<button ng-click="addGroup(group.type)" data-ng-if="group.type == \'CONDITION\' && group.main" class="btn btn-success col-md-2 left-margin" ><span class="glyphicon glyphicon-plus-sign" ></span> {{\'APPLICATION_ADD_GROUP\' | translate}}</button>\n						<button ng-click="removeGroup()" data-ng-if="group.type == \'CONDITION\' && !group.main" class="btn btn-danger col-md-2 left-margin" ><span class="glyphicon glyphicon-minus-sign"></span> {{\'APPLICATION_REMOVE_GROUP\' | translate}}</button>\n				</div>\n				<div class="group-conditions">\n					<!-- <pre>\n						{{group | json}}\n					</pre> -->\n						<div ng-repeat="rule in group.rules | orderBy:\'index\'" class="condition">\n								<div ng-switch="rule.hasOwnProperty(\'group\')">\n										<div ng-switch-when="true">\n												<query-builder group="rule.group" fields="fields" operators="operators" properties="properties"></query-builder>\n										</div>\n										<div ng-switch-default="ng-switch-default">\n												<div class="row">\n															<ui-select data-ng-model="rule.field" theme="bootstrap" class="col-md-2">\n																<ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n																<ui-select-choices repeat="field in fields | filter: $select.search">\n																	<div ng-bind-html="field.name | translate | highlight: $select.search"></div>\n																</ui-select-choices>\n															</ui-select>\n															<ui-select data-ng-model="rule.operator" theme="bootstrap" class="col-md-2 left-margin" data-ng-if="group.type == \'CONDITION\' && rule.field">\n																<ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n																<ui-select-choices repeat="operator.value as operator in operators[rule.field.operators]| filter: $select.search">\n																	<div ng-bind-html="operator.name | translate | highlight: $select.search"></div>\n																</ui-select-choices>\n															</ui-select>\n															<div class="col-md-2 left-margin" ng-if="rule.field && rule.field.propertyField==\'input\'">\n																<input type="text" ng-model="rule.data" class="form-control"/>\n															</div>\n															<div class="col-md-2 left-margin" ng-if="rule.field && rule.field.propertyField==\'number\'">\n																<input type="number" ng-model="rule.data" class="form-control"/>\n															</div>\n															<ui-select ng-if="rule.field && rule.field.propertyField==\'select\'" data-ng-model="rule.data" class="col-md-2 left-margin" theme="bootstrap">\n																<ui-select-match placeholder="">{{$select.selected.name | translate}}</ui-select-match>\n																<ui-select-choices repeat="property.value as property in properties[rule.field.value]| filter: $select.search">\n																	<div ng-bind-html="property.name | translate | highlight: $select.search"></div>\n																</ui-select-choices>\n															</ui-select>\n															<button ng-click="removeCondition($index)" class="btn btn-danger remove-condition col-md-1 left-margin"><span class="glyphicon glyphicon-minus-sign"></span></button>\n												</div>\n										</div>\n								</div>\n						</div>\n				</div>\n		</div>\n'),a.put("app/market/market.html",'<div class="row" data-ng-init="getProject()">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-handbag"></i>\n						<a href="/market">Market Place</a>\n          </li>\n        </ul>\n			</div>\n		</div>\n</div>\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n  <div class="col-md-12">\n    <!-- Our Integration -->\n    <div class="headline">\n      <h3>Our Integrations</h3>\n    </div>\n    <div class="row thumbnails">\n      <div class="col-md-3">\n        <div class="our-integrations">\n          <h3> Zendesk <small> Xenialab s.r.l</small></h3>\n          <img src="https://d3kjp0zrek7zit.cloudfront.net/uploads/product/image/574/large_detail_1406764757.png" alt="Zendesk" class="img-responsive"/>\n          <div class="integration-info">\n            <p>\n               Allows your customer care to manage professional Asterisk call center solutions...\n            </p>\n            <div class="pull-right">\n                <a href="#" class="btn btn-xs green-meadow">\n									Install 1.0.0 <i class="fa fa-download"></i>\n                </a>\n                <a href="#" class="btn btn-xs grey-cascade">\n									More <i class="fa fa-link"></i>\n                </a>\n            </div>\n          </div>\n        </div>\n      </div>\n      <div class="col-md-3">\n        <div class="our-integrations">\n          <h3> SalesForce <small> Xenialab s.r.l</small></h3>\n          <img src="http://501partners.com/wp-content/uploads/SF-300x300.png" alt="Salesforce" class="img-responsive"/>\n          <div class="integration-info">\n            <p>\n               xCALLY provides a new seamless CTI integration with Salesforce, CRM leader solution....\n            </p>\n            <div class="pull-right">\n                <a href="#" class="btn btn-xs green-meadow">\n									Install 1.0.1 <i class="fa fa-download"></i>\n                </a>\n                <a href="#" class="btn btn-xs grey-cascade">\n									More <i class="fa fa-link"></i>\n                </a>\n            </div>\n          </div>\n        </div>\n      </div>\n      <div class="col-md-3">\n        <div class="our-integrations">\n          <h3> Desk.com <small> Xenialab s.r.l</small></h3>\n          <img src="http://a470.phobos.apple.com/us/r1000/088/Purple/v4/d5/5a/f3/d55af305-cbb5-fc52-dd09-5b69f979b551/mzl.fiyydcmj.png" alt="desk.com" class="img-responsive"/>\n          <div class="integration-info">\n            <p>\n               The new xCALLY – Desk Integration ensures a proper Case will be displayed on the....\n            </p>\n            <div class="pull-right">\n                <a href="#" class="btn btn-xs green-meadow">\n									Install 1.1.4 <i class="fa fa-download"></i>\n                </a>\n                <a href="#" class="btn btn-xs grey-cascade">\n									More <i class="fa fa-link"></i>\n                </a>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n    <!--/thumbnails-->\n    <!-- //End Meer Our Team -->\n  </div>\n</div>\n'),a.put("app/motionbar/motionbar.chat.html",'<div data-ng-include="\'components/quickSidebar/quickSidebar.html\'" data-ng-controller="QuickSidebarController" class="page-quick-sidebar-wrapper"></div>\n'),a.put("app/sound/list/list.html",'<div class="page-bar">\n  <ul class="page-breadcrumb">\n    <li>\n      <i class="icon-rocket"></i>\n      <a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n      <i class="fa fa-angle-right"></i>\n    </li>\n    <li>\n      <i class="icon-music-tone-alt"></i>\n      <a href="#">{{ \'APPLICATION_SOUNDS\' | translate }}</a>\n    </li>\n  </ul>\n  <div class="page-toolbar">\n  </div>\n</div>\n<!-- END PAGE HEADER-->\n<!-- BEGIN PAGE CONTENT-->\n<!-- Audio Portlets -->\n<div class="headline">\n  <h3><i class="icon-music-tone-alt sounds-title-icon"></i> {{ \'APPLICATION_SOUNDS\' | translate }}</h3>\n</div>\n<div class="portlet light bg-inverse">\n  <div class="portlet-title collapsible" ng-click="isCollapsed = !isCollapsed">\n    <div class="caption">\n      <i class="icon-puzzle font-red-flamingo"></i>\n      <span class="caption-subject bold font-red-flamingo uppercase">\n      {{\'APPLICATION_FILE_UPLOAD\' | translate}} </span>\n    </div>\n    <div class="tools">\n      <a href="" ng-class="{\'collapse\': !isCollapsed, \'expand\' : isCollapsed}">\n      </a>\n      <a href="" class="fullscreen">\n      </a>\n    </div>\n  </div>\n  <div class="portlet-body" ng-slide-down="!isCollapsed">\n    <div class="row" nv-file-drop="" uploader="uploader" filters="queueLimit, customFilter">\n    	<div class="col-md-4">\n    		<div class="portlet light bordered">\n    			<div class="portlet-title">\n    				<div class="caption font-green-sharp">\n    					<i class="icon-settings font-green-sharp"></i>\n    					<span class="caption-subject bold uppercase">{{\'APPLICATION_SELECT_FILES\' | translate}}</span>\n    					<span class="caption-helper hide"></span>\n    				</div>\n    				<div class="actions">\n    				</div>\n    			</div>\n    			<div class="portlet-body">\n    				<div ng-show="uploader.isHTML5">\n    					<div class="file-drop-zone margin-bottom-20" nv-file-over="" uploader="uploader" over-class="file-drop-zone-over">\n    						Base drop zone\n    					</div>\n    				</div>\n    				<span class="btn default btn-file">\n    				<span class="fileinput-new">\n    				{{\'APPLICATION_FILE_UPLOAD\' | translate}}</span>\n    				<input type="file" nv-file-select="" uploader="uploader" />\n    				</span>\n    				<span class="btn default btn-file">\n    				<span class="fileinput-new">\n    				{{\'APPLICATION_MULTI_FILE_UPLOAD\' | translate}}</span>\n    				<input type="file" nv-file-select="" uploader="uploader" multiple  /><br/>\n          </span>\n          <p>\n            </br>\n            {{ \'MESSAGE_SUPPORTED_FORMATS\' | translate }} <b>wav, mp3, gsm, ogg</b>.\n          </p>\n          <p>\n            {{ \'MESSAGE_MAXIMUM_SOUND_UPLOAD_SIZE\' | translate }} <b>15 Mb</b>.\n          </p>\n    			</div>\n    		</div>\n    	</div>\n    	<div class="col-md-8">\n    		<div class="portlet light bordered">\n    			<div class="portlet-title">\n    				<div class="caption font-green-sharp">\n    					<i class="icon-settings font-green-sharp"></i>\n    					<span class="caption-subject bold uppercase">{{\'APPLICATION_UPLOAD_QUEUE\' | translate}}</span>\n    					<span class="caption-helper">{{\'APPLICATION_QUEUE_LENGTH\' | translate}}: {{ uploader.queue.length }}</span>\n    				</div>\n    				<div class="actions">\n    				</div>\n    			</div>\n    			<div class="portlet-body">\n    				<div class="table-scrollable table-scrollable-borderless">\n    					<table class="table table-hover table-light">\n    						<thead>\n    							<tr class="uppercase">\n    								<th width="50%">{{\'APPLICATION_NAME\' | translate}}</th>\n    								<th ng-show="uploader.isHTML5">{{\'APPLICATION_SIZE\' | translate}}</th>\n    								<th ng-show="uploader.isHTML5">{{\'APPLICATION_PROGRESS\' | translate}}</th>\n    								<th>{{\'APPLICATION_STATUS\' | translate}}</th>\n    								<th>{{\'APPLICATION_MESSAGE\' | translate}}</th>\n    								<th>{{\'APPLICATION_ACTIONS\' | translate}}</th>\n    							</tr>\n    						</thead>\n    						<tbody>\n    							<tr ng-repeat="item in uploader.queue">\n    								<td><strong>{{ item.file.name }}</strong></td>\n    								<td ng-show="uploader.isHTML5" nowrap>{{ item.file.size/1024/1024|number:2 }} MB</td>\n    								<td ng-show="uploader.isHTML5">\n    									<div class="progress progress-sm" style="margin-bottom: 0;">\n    										<div class="progress-bar progress-bar-info" role="progressbar" ng-style="{ \'width\': item.progress + \'%\' }"></div>\n    									</div>\n    								</td>\n    								<td class="text-center">\n    									<span ng-show="item.isSuccess" class="text-success"><i class="glyphicon glyphicon-ok"></i></span>\n    									<span ng-show="item.isCancel" class="text-info"><i class="glyphicon glyphicon-ban-circle"></i></span>\n    									<span ng-show="item.isError" class="text-danger"><i class="glyphicon glyphicon-remove"></i></span>\n    									<span ng-show="item.isUploading" class="text-info"><i class="glyphicon glyphicon-upload"></i></span>\n    								</td>\n    								<td class="text-center">\n    									<span ng-show="item.responseMessage" class="text-danger">{{item.responseMessage}}</span>\n    								</td>\n    								<td nowrap>\n    									<button type="button" class="btn btn-success btn-xs" ng-click="item.upload()" ng-disabled="item.isReady || item.isUploading || item.isSuccess">\n    									<span class="glyphicon glyphicon-upload"></span> {{\'APPLICATION_UPLOAD\' | translate}}\n    									</button>\n    									<button type="button" class="btn btn-warning btn-xs" ng-click="item.cancel()" ng-disabled="!item.isUploading">\n    									<span class="glyphicon glyphicon-ban-circle"></span> {{\'APPLICATION_CANCEL\' | translate}}\n    									</button>\n    									<button type="button" class="btn btn-danger btn-xs" ng-click="item.remove()">\n    									<span class="glyphicon glyphicon-trash"></span> {{\'APPLICATION_REMOVE\' | translate}}\n    									</button>\n    								</td>\n    							</tr>\n    						</tbody>\n    					</table>\n    				</div>\n    				<div>\n    					<p>{{\'APPLICATION_UPLOAD_QUEUE_PROGRESS\' | translate}}:</p>\n    					<div class="progress progress-sm" style="">\n    						<div class="progress-bar progress-bar-info" role="progressbar" ng-style="{ \'width\': uploader.progress + \'%\' }"></div>\n    					</div>\n    				</div>\n    				<button type="button" class="btn btn-success btn-s" ng-click="uploader.uploadAll()" ng-disabled="!uploader.getNotUploadedItems().length">\n    				<span class="glyphicon glyphicon-upload"></span> {{\'APPLICATION_UPLOAD_ALL\' | translate}}\n    				</button>\n    				<button type="button" class="btn btn-warning btn-s" ng-click="uploader.cancelAll()" ng-disabled="!uploader.isUploading">\n    				<span class="glyphicon glyphicon-ban-circle"></span> {{\'APPLICATION_CANCEL_ALL\' | translate}}\n    				</button>\n    				<button type="button" class="btn btn-danger btn-s" ng-click="uploader.clearQueue()" ng-disabled="!uploader.queue.length">\n    				<span class="glyphicon glyphicon-trash"></span> {{\'APPLICATION_REMOVE_ALL\' | translate}}\n    				</button>\n    			</div>\n    		</div>\n    	</div>\n    </div>\n  </div>\n</div>\n<div class="row thumbnails" data-ng-init="initList()">\n  <div class="row" ng-show="sounds.length == 0">\n    <div class="col-md-12 page-404">\n      <div class="details">\n        <h3>{{ \'MESSAGE_NO_SOUNDS\' | translate }}</h3>\n        <p>\n          <a href="/">\n          {{ \'MESSAGE_RETURN_HOME\' | translate }} </a>\n          {{ \'MESSAGE_OR_UPLOAD_SOUND_FILE\' | translate }}\n        </p>\n      </div>\n    </div>\n  </div>\n  <div class="audio-portlet-wrapper animate-repeat" ng-repeat="sound in sounds">\n    <div class="audio-portlet">\n      <div class="audio-portlet-title"><a href="#" editable-text="sound.display_name" onbeforesave="updateAudio(sound.id,{display_name : $data})">{{ sound.display_name || "Empty" }}</a></div>\n      <img src="../assets/images/note_placeholder.png" alt="" class="img-responsive"/>\n      <div class="file-info">\n        <div class="audio-tag-wrapper">\n          <audio controls ng-src="{{getSecureSrc(audioSources[sound.id])}}" preload="none">\n            {{ \'MESSAGE_AUDIO_NOT_SUPPORTED\' | translate }}\n          </audio>\n        </div>\n        <p id="description_div">\n          <a href="#" editable-text="sound.description" onbeforesave="updateAudio(sound.id,{description : $data})">{{ sound.description || "Empty" }}</a>\n        </p>\n        <p class="float-right">\n            <button class="btn btn-xs green-meadow" tooltip-html-unsafe="<ul class=\'list-unstyled\'><li><b>Format : </b>{{sound.original_format}}</li><li><b>Duration : </b>{{sound.original_duration | date: \'mm:ss\'}}</li><li><b>Channels : </b>{{sound.original_channelCount}}</li><li><b>Bitrate : </b>{{sound.original_bitRate/1024}} kbs</li><li><b>Sample Rate : </b>{{sound.original_sampleRate/1000}} KHz</li></ul>"><i class="icon-list"></i></button>\n            <a class="btn btn-xs blue-hoki" href="{{getSecureDownloadSrc(audioSources[sound.id])}}" download="{{sound.name+\'.\'+sound.original_format}}" target="_self" tooltip="Download"><i class="icon-cloud-download"></i></a>\n            <button class="btn btn-xs red-sunglo" ng-click="delete(sound.display_name, sound.id)" tooltip="Delete"><i class="icon-close" ></i></button>\n        </p>\n      </div>\n    </div>\n  </div>\n</div>\n<!-- End Audio Portlets -->\n'),a.put("app/sound/sound.html","<!-- BEGIN PAGE CONTENT-->\n<div ui-view></div>\n<!-- END PAGE CONTENT-->\n"),a.put("app/square/odbc/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-docs"></i>\n					<a href="/square/odbcs/list">{{ \'APPLICATION_ODBCS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-docs font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_ODBCS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="Odbcs.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_ODBC\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/square/odbcs/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getOdbcs([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="square_odbcs.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedOdbcs" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="4">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.odbcsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="odbcByPage in odbcsByPage | filter: $select.search">\n													<div ng-bind-html="odbcByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(odbc, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n						    <th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="odbc in displayedOdbcs" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input data-ng-hide="odbc.defaultEntry" type="checkbox" checklist-model="Odbcs.checked" checklist-value="odbc.id"></td>\n								<td>{{odbc.name}}</td>\n					      <td>{{odbc.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/square/odbcs/view/{{odbc.id}}/settings" data-ng-class="{\'disabled\': odbc.defaultEntry}">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(odbc.name,odbc.id)" data-ng-class="{\'disabled\': odbc.defaultEntry}">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedOdbcs.length">\n								<td colspan="4" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_ODBCS_AVAILABLE\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td/>\n						  </tr>\n					    <tr>\n					      <td colspan="4" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.odbcsByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/square/odbc/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getOdbc()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-docs"></i>\n					<a href="/square/odbcs/list">{{ \'APPLICATION_ODBCS\' | translate }}</a>\n					<i data-ng-show="odbc" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="odbc">\n					<a href="#">{{odbc.name}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/odbc.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{odbc.name}}\n					</div>\n					<!-- <div class="profile-usertitle-job">\n						{{user.role}}\n					</div> -->\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.square.odbcs.view.settings\')}">\n							<a data-ng-href="/square/odbcs/view/{{odbc.id}}/settings">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/square/odbc/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_ODBC\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n\n			<div class="portlet-body">\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.general" data-ng-submit="forms.general.$valid && updateOdbc()" novalidate>\n\n							<!-- START NAME -->\n				      <div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n				        <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n				        <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="odbc.name" required/>\n								<span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n				          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n				        </span>\n				      </div>\n				      <!-- END NAME -->\n\n							<!-- START DSN -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.odbc.dsn.$touched || forms.odbc.$submitted) && forms.odbc.dsn.$invalid}">\n								<label class="control-label">{{\'APPLICATION_DSN\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="dsn" placeholder="{{\'APPLICATION_DSN\' | translate}}" class="form-control" data-ng-model="odbc.dsn" required/>\n								<span data-ng-show="(forms.odbc.dsn.$touched || forms.odbc.$submitted) && forms.odbc.dsn.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END DSN -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="odbc.description"></textarea>\n							</div>\n							<!-- END DESCRIPTION -->\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END ADVANCED TAB -->\n\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/square/odbc/wizard/wizard.html",'<div class="col-md-12">\n  <!-- BEGIN PAGE HEADER-->\n	<div class="page-bar">\n		<ul class="page-breadcrumb">\n			<li>\n				<i class="icon-rocket"></i>\n				<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-docs"></i>\n				<a href="/square/odbcs/list">{{ \'APPLICATION_ODBCS\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-options"></i>\n				<a href="/square/odbcs/wizard">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n			</li>\n		</ul>\n	</div>\n  <!-- END PAGE HEADER-->\n\n  <!-- BEGIN PORTLET-->\n  <div class="portlet light bordered">\n  	<div class="portlet-title">\n  		<div class="caption font-green-sharp">\n  			<i class="icon-docs font-green-sharp"></i>\n  			<span class="caption-subject">{{ \'APPLICATION_ODBC\' | translate }} WIZARD</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n  		<wizard on-finish="createItem()">\n				<wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.odbc.$valid)">\n			    <form name="forms.odbc" novalidate>\n\n			      <!-- START NAME -->\n			      <div class="form-group" data-ng-class="{\'has-error\': (forms.odbc.name.$touched || forms.odbc.$submitted) && forms.odbc.name.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n							<span data-ng-show="(forms.odbc.name.$touched || forms.odbc.$submitted) && forms.odbc.name.$error.required" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END NAME -->\n\n						<!-- START DSN -->\n			      <div class="form-group" data-ng-class="{\'has-error\': (forms.odbc.dsn.$touched || forms.odbc.$submitted) && forms.odbc.dsn.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_DSN\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="text" name="dsn" placeholder="{{\'APPLICATION_DSN\' | translate}}" class="form-control" data-ng-model="item.dsn" required/>\n							<span data-ng-show="(forms.odbc.dsn.$touched || forms.odbc.$submitted) && forms.odbc.dsn.$error.required" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END DSN -->\n\n						<!-- START DESCRIPTION -->\n						<div class="form-group">\n							<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n							<textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n						</div>\n						<!-- END DESCRIPTION -->\n			      <button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n			    </form>\n			  </wz-step>\n\n				<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n					<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n					<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n					<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n				</wz-step>\n  		</wizard>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),
+a.put("app/square/project/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n        <li>\n          <i class="fa fa-slack"></i>\n          <a href="/square/projects/list">{{ \'APPLICATION_PROJECTS\' | translate }}</a>\n        </li>\n			</ul>\n		</div>\n\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-docs font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_PROJECTS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="Projects.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_PROJECT\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/square/projects/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getProjects([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="square_projects.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedProjects" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="4">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.projectsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="projectByPage in projectsByPage | filter: $select.search">\n													<div ng-bind-html="projectByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(agent, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n						    <th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="project in displayedProjects" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input data-ng-hide="project.defaultEntry" type="checkbox" checklist-model="Projects.checked" checklist-value="project.id"></td>\n								<td>{{project.name}}</td>\n					      <td>{{project.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/square/projects/view/{{project.id}}" data-ng-class="{\'disabled\': project.defaultEntry}">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(project.name,project.id)" data-ng-class="{\'disabled\': project.defaultEntry}">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedProjects.length">\n								<td colspan="4" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_PROJECTS_AVAILABLE\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td/>\n						  </tr>\n					    <tr>\n					      <td colspan="4" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.projectsByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/square/project/view/view.html",'<div class="row" data-ng-init="getProject()">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="fa fa-superscript"></i>\n						<a href="/square/projects">{{ \'APPLICATION_CALLYSQUARE\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="fa fa-slack"></i>\n						<a href="/square/projects">{{ \'APPLICATION_PROJECTS\' | translate }}</a>\n            <i class="fa fa-angle-right"></i>\n					</li>\n          <li>\n						<a ng-href="/square/projects/view/{{squareProject.id}}">{{squareProject.name}}</a>\n          </li>\n				</ul>\n			</div>\n		</div>\n</div>\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n  <div class="col-md-12">\n		<div id="geEditor" class="geEditor"></div>\n  </div>\n</div>\n<!-- END PAGE CONTENT-->\n<script>\n\n\n</script>\n'),a.put("app/square/project/wizard/wizard.html",'<div class="col-md-12">\n  <!-- BEGIN PAGE HEADER-->\n	<div class="page-bar">\n		<ul class="page-breadcrumb">\n			<li>\n				<i class="icon-rocket"></i>\n				<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-docs"></i>\n				<a href="/square/projects/list">{{ \'APPLICATION_PROJECTS\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-options"></i>\n				<a href="/square/projects/wizard">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n			</li>\n		</ul>\n	</div>\n  <!-- END PAGE HEADER-->\n\n  <!-- BEGIN PORTLET-->\n  <div class="portlet light bordered">\n  	<div class="portlet-title">\n  		<div class="caption font-green-sharp">\n  			<i class="icon-docs font-green-sharp"></i>\n  			<span class="caption-subject">{{ \'APPLICATION_PROJECT\' | translate }} WIZARD</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n  		<wizard on-finish="createItem()">\n				<wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.project.$valid)">\n			    <form name="forms.project" novalidate>\n\n			      <!-- START NAME -->\n			      <div class="form-group" data-ng-class="{\'has-error\': (forms.project.name.$touched || forms.project.$submitted) && forms.project.name.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n							<span data-ng-show="(forms.project.name.$touched || forms.project.$submitted) && forms.project.name.$error.required" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END NAME -->\n\n						<!-- START DESCRIPTION -->\n						<div class="form-group">\n							<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n							<textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n						</div>\n						<!-- END DESCRIPTION -->\n			      <button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n			    </form>\n			  </wz-step>\n\n				<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n					<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n					<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n					<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n				</wz-step>\n  		</wizard>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),a.put("app/team/list/list.html",'<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-shield"></i>\n						<a href="#">{{ \'APPLICATION_TEAMS\' | translate }}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-shield font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_TEAMS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="teams.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_TEAM\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<!-- <li>\n								<a href="#">\n								<i class="icon-user"></i> {{ \'APPLICATION_QUICK\' | translate }} </a>\n							</li> -->\n							<li>\n								<a href="/teams/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n							<!-- <li>\n								<a href="#">\n								<i class="icon-users"></i> {{ \'APPLICATION_BULK\' | translate }} </a>\n							</li> -->\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getTeams([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="teams.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedTeams" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="5">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.teamsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="teamByPage in teamsByPage | filter: $select.search">\n													<div ng-bind-html="teamByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(agent, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n								<th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="team in displayedTeams" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="teams.checked" checklist-value="team.id"></td>\n					      <td>{{team.name}}</td>\n								<td>{{team.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/teams/view/{{team.id}}/settings" data-ng-class="{\'disabled\': team.defaultEntry}">\n										{{ \'APPLICATION_PROFILE\' | translate }}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(team.name, team.id)" data-ng-class="{\'disabled\': team.defaultEntry}">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n              <tr data-ng-hide="displayedTeams.length">\n								<td colspan="5" style="text-align:center;">\n									<i>No teams available</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n						    </td>\n						  </tr>\n					    <tr>\n					      <td colspan="5" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.teamsByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/team/view/view.agents.html",'<div class="row" data-ng-init="initAgents()">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n				</div>\n			</div>\n			<div class="portlet-body">\n			<!-- GENERAL TAB -->\n				<!-- BEGIN PORTLET-->\n					<!-- BEGIN FORM-->\n					<form action="index.html" class="form-horizontal form-row-seperated">\n						<div class="form-body">\n							<div class="form-group last">\n								<div class="col-md-9" id="multi-select-team">\n								</div>\n							</div>\n						</div>\n					</form>\n					<!-- END FORM-->\n				<!-- END PORTLET-->\n			<!-- END GENERAL TAB -->\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/team/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-shield"></i>\n					<a href="/teams/list">{{ \'APPLICATION_TEAMS\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<a href="#">{{team.name}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img ng-src="assets/images/media/team.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{team.name}}\n					</div>\n\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.teams.view.settings\')}">\n							<a data-ng-href="/teams/view/{{team.id}}/settings">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n						<li data-ng-class="{active: $state.is(\'main.teams.view.agents\')}">\n							<a data-ng-href="/teams/view/{{team.id}}/agents">\n							<i class="icon-users"></i>\n							{{ \'APPLICATION_AGENTS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/team/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_ACCOUNT\' | translate}}</span>\n				</div>\n			</div>\n\n			<div class="portlet-body">\n				<!-- PERSONAL INFO TAB -->\n				<div>\n\n					<form name="forms.info" data-ng-submit="updateItem()" novalidate>\n						<!-- START NAME -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n							<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="team.name" required/>\n							<span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END NAME -->\n\n						<!-- START DESCRIPTION -->\n						<div class="form-group">\n							<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n							<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="team.description"/>\n						</div>\n						<!-- END DESCRIPTION -->\n\n						<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n					</form>\n				</div>\n				<!-- END PERSONAL INFO TAB -->\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/team/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n            <i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-shield"></i>\n						<a href="/teams/list">{{ \'APPLICATION_TEAMS\' | translate }}</a>\n            <i class="fa fa-angle-right"></i>\n					</li>\n          <li>\n						<i class="icon-user-following"></i>\n						<a href="#">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div id="team" class="row" data-ng-init="getAgents()">\n	<div class="col-md-12">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_TEAM\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="createItem()">\n          <wz-step title="{{\'APPLICATION_TEAM_INFO\' | translate}}" canexit="formValidation(forms.info.$valid)">\n						<form name="forms.info" novalidate>\n\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n								<span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid && forms.info.name.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n							</div>\n							<!-- END DESCRIPTION -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="goNext()"/>\n						</form>\n					</wz-step>\n\n					<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n						<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n						<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n					</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/trigger/list/list.html",'<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-bulb"></i>\n						<a href="#">{{ \'APPLICATION_TRIGGERS\' | translate }}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-bulb font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_TRIGGERS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="Triggers.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_TRIGGER\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/triggers/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getTriggers([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="triggers.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedTriggers" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="6">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.TriggersByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="TriggerByPage in TriggersByPage | filter: $select.search">\n													<div ng-bind-html="TriggerByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<!-- <th st-sort="id" width="5%" st-sort-default="reverse">{{ \'APPLICATION_ID\' | translate }}</th> -->\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(Trigger, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n								<th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th st-sort="channel">{{ \'APPLICATION_CHANNEL\' | translate }}</th>\n								<th>{{ \'APPLICATION_STATUS\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="Trigger in displayedTriggers">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="Triggers.checked" checklist-value="Trigger.id"></td>\n					      <td>{{Trigger.name}}</td>\n								<td>{{Trigger.description}}</td>\n								<td>{{Trigger.channel | capitalize}}</td>\n								<td>\n									<input\n										data-ng-change="updateItem(Trigger.id, Trigger.status)",\n								    bs-switch\n								    ng-model="Trigger.status"\n								    type="checkbox"\n								    switch-active="{{ isActive }}"\n								    switch-on-text="{{ onText }}"\n								    switch-off-text="{{ offText }}"\n								    switch-on-color="{{ onColor }}"\n								    switch-off-color="{{ offColor }}"\n								    switch-animate="{{ animate }}"\n								    switch-size="{{ size }}"\n								    switch-label="{{ label }}"\n								    switch-icon="{{ icon }}"\n								    switch-radio-off="{{ radioOff }}"\n								    switch-label-width="{{ labelWidth }}"\n								    switch-handle-width="{{ handleWidth }}">\n								</td>\n					      <td>\n									<a class="btn default btn-xs blue-stripe" data-ng-href="/triggers/view/{{Trigger.id}}/settings">\n										{{ \'APPLICATION_EDIT\' | translate }}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(Trigger.name, Trigger.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedTriggers.length">\n								<td colspan="6" class="text-center">\n									<i>No available triggers</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_USERNAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="channel" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_CHANNEL\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n								</td>\n								<td/>\n								<td/>\n						  </tr>\n					    <tr>\n					      <td colspan="6" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.TriggersByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/trigger/view/view.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row" data-ng-init="initView();getProperties();">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-bulb"></i>\n					<a href="/triggers/list">{{ \'APPLICATION_TRIGGERS\' | translate }}</a>\n					<i class="fa fa-angle-right" data-ng-show="trigger"></i>\n				</li>\n				<li data-ng-show="trigger">\n					<a href="#">{{ trigger.description || trigger.name }}</a>\n				</li>\n			</ul>\n		</div>\n\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/trigger.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{ trigger.name }}\n					</div>\n					<div class="profile-usertitle-job">\n						{{ trigger.description }}\n					</div>\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.triggers.view.settings\')}">\n							<a href="/triggers/view/{{trigger.id}}/settings">\n							<i class="icon-bulb"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate }} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/trigger/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_SETTINGS\' | translate}}</span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_CONDITIONS\' | translate}} & {{\'APPLICATION_ACTIONS\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n			<div class="portlet-body">\n				<!-- <pre>\n					{{conditionsData.query | json}}\n				</pre>\n				<pre>\n					{{actionsData.query | json}}\n				</pre> -->\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.general" data-ng-submit="forms.general.$valid && updateTrigger()" novalidate>\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="trigger.name" required/>\n								<span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid && forms.general.name.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="trigger.description"/>\n							</div>\n							<!-- END DESCRIPTION -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END GENERAL TAB -->\n					<!-- <pre>\n						{{conditionsFilter | json}}\n					</pre> -->\n\n						<div class="portlet light bordered">\n							<div class="portlet-title">\n								<div class="caption font-blue-hoki">\n									<i class="icon-tag font-blue-hoki"></i>\n									<span class="caption-subject">{{ \'APPLICATION_CONDITIONS\' | translate }}</a> </span>\n								</div>\n							</div>\n							<div class="portlet-body">\n								<query-builder group="conditionsFilter.group" fields="fields.conditions" operators="$triggers.operators"></query-builder>\n							</div>\n						</div>\n						<div class="portlet light bordered">\n							<div class="portlet-title">\n								<div class="caption font-blue-hoki">\n									<i class="icon-tag font-blue-hoki"></i>\n									<span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }}</a> </span>\n								</div>\n							</div>\n							<div class="portlet-body">\n								<query-builder group="actionsFilter.group" fields="fields.actions" properties="properties[trigger.channel]"></query-builder>\n							</div>\n						</div>\n\n						<input class="btn green-haze" type="button" value="{{\'APPLICATION_UPDATE\' | translate}}" data-ng-click="updateTrigger()"/>\n					</div>\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/trigger/wizard/wizard.html",'\n<div class="row" data-ng-init="getProperties()">\n	<div class="col-md-12">\n		<!-- BEGIN PAGE HEADER-->\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-bulb"></i>\n					<a href="/triggers/list">{{ \'APPLICATION_TRIGGERS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n		<!-- END PAGE HEADER-->\n\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-bulb font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_TRIGGERS\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="createItem()">\n					<wz-step title="{{\'APPLICATION_GENERAL\' | translate}}" canexit="exitValidation(forms.general.$valid)">\n						<form name="forms.general" novalidate>\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name"/ required>\n								<span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n							</div>\n							<!-- END DESCRIPTION -->\n\n							<button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n						</form>\n					</wz-step>\n	        <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}">\n						<div class="portlet light bordered">\n							<div class="portlet-title">\n								<div class="caption font-blue-hoki">\n									<i class="icon-tag font-blue-hoki"></i>\n									<span class="caption-subject">{{ \'APPLICATION_CHANNEL\' | translate }}</a> </span>\n								</div>\n							</div>\n							<div class="portlet-body">\n								<div class="form-group"  >\n									<label class="control-label">{{ \'APPLICATION_CHANNEL\' | translate }}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="item.channel" name="channel" theme="bootstrap" required>\n										<ui-select-match placeholder="{{ \'APPLICATION_CHANNEL\' | translate }}">{{$select.selected | capitalize}}</ui-select-match>\n										<ui-select-choices repeat="channel in $triggers.channels | filter: $select.search">\n											<div ng-bind-html="channel | highlight: $select.search | capitalize"></div>\n										</ui-select-choices>\n									</ui-select>\n								</div>\n							</div>\n						</div>\n						<div class="portlet light bordered">\n							<div class="portlet-title">\n								<div class="caption font-blue-hoki">\n									<i class="icon-tag font-blue-hoki"></i>\n									<span class="caption-subject">{{ \'APPLICATION_CONDITIONS\' | translate }}</a> </span>\n								</div>\n							</div>\n							<div class="portlet-body">\n								<query-builder group="conditionsFilter.group" fields="fields.conditions" operators="$triggers.operators"></query-builder>\n							</div>\n						</div>\n						<div class="portlet light bordered">\n							<div class="portlet-title">\n								<div class="caption font-blue-hoki">\n									<i class="icon-tag font-blue-hoki"></i>\n									<span class="caption-subject">{{ \'APPLICATION_ACTIONS\' | translate }}</a> </span>\n								</div>\n							</div>\n							<div class="portlet-body">\n								<query-builder group="actionsFilter.group" fields="fields.actions" properties="properties[item.channel]"></query-builder>\n							</div>\n						</div>\n						<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n						<button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n					</wz-step>\n					<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n						<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n						<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n						<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n					</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/trunk/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-link"></i>\n					<a href="/trunks/list">{{ \'APPLICATION_TRUNKS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-link font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_TRUNKS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="trunks.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_TRUNK\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/trunks/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getTrunks([\'name\', \'host\', \'context\', \'description\'])" csv-header="[\'Name\', \'Host\', \'Context\', \'Description\']" field-separator=";" filename="trunks.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedTrunks" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="6">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.trunksByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="trunkByPage in trunksByPage | filter: $select.search">\n													<div ng-bind-html="trunkByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(trunk, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n						    <th st-sort="host">{{ \'APPLICATION_HOST\' | translate }}</th>\n								<th st-sort="context">{{ \'APPLICATION_CONTEXT\' | translate }}</th>\n						    <th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="trunk in displayedTrunks" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="trunks.checked" checklist-value="trunk.id"></td>\n								<td>{{trunk.name}}</td>\n                <td>{{trunk.host}}</td>\n								<td>{{trunk.context}}</td>\n					      <td>{{trunk.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/trunks/view/{{trunk.id}}/settings">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(trunk.name,trunk.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedTrunks.length">\n								<td colspan="6" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_TRUNKS_AVAILABLE\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="host" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_HOST\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="context" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_CONTEXT\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n								</td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n						    </td>\n						  </tr>\n					    <tr>\n					      <td colspan="6" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.trunksByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/trunk/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getTrunk()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-link"></i>\n					<a href="/trunks/list">{{ \'APPLICATION_TRUNKS\' | translate }}</a>\n					<i data-ng-show="trunk" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="trunk">\n					<a href="#">{{trunk.name}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/trunk.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{trunk.name}}\n					</div>\n					<!-- <div class="profile-usertitle-job">\n						{{user.role}}\n					</div> -->\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.trunks.view.settings\')}">\n							<a data-ng-href="/trunks/view/{{trunk.id}}/settings">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/trunk/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_TRUNK\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_ADVANCED\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n\n			<div class="portlet-body" data-ng-init="getContexts();">\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.general" data-ng-submit="forms.general.$valid && updateTrunk()" novalidate>\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="trunk.name" required/>\n								<span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n							<div class="row">\n								<div class="col-md-6">\n\n							<!-- START HOST -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.host.$touched || forms.general.$submitted) && forms.general.host.$invalid}">\n								<label class="control-label">{{\'APPLICATION_HOST\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="trunk.host" required/>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_HOST\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.host.$touched || forms.general.$submitted) && forms.general.host.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END HOST -->\n\n							<!-- START SECRET -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.secret.$touched || forms.general.$submitted) && forms.general.secret.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NEW_SECRET\' | translate}}</label>\n								<input type="password" name="secret" placeholder="{{\'APPLICATION_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="trunk.secret">\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_SECRET\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.secret.$touched || forms.general.$submitted) && forms.general.secret.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END SECRET -->\n\n							<!-- START CONFIRM SECRET -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.rsecret.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CONFIRM_SECRET\' | translate}}</label>\n								<input type="password" name="rsecret" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="trunk.rsecret" nx-equal="trunk.secret"/>\n								<span data-ng-show="forms.general.$submitted && (forms.general.rsecret.$invalid || forms.general.rsecret.$invalid)" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n								</span>\n							</div>\n							<!-- END CONFIRM SECRET -->\n\n							<!-- START CONTEXT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="trunk.context" name="context" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n									<ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n										<div ng-bind-html="context.name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_VOICE_CONTEXT\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END CONTEXT -->\n\n							<!-- START CALLERID -->\n							<!-- <div class="form-group" data-ng-class="{\'has-error\': (forms.general.callerid.$touched || forms.general.$submitted) && forms.general.callerid.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CALLERID\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="callerid" placeholder="{{\'APPLICATION_CALLERID\' | translate}}" class="form-control" data-ng-model="trunk.callerid" required/>\n								<span data-ng-show="(forms.general.callerid.$touched || forms.general.$submitted) && forms.general.callerid.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div> -->\n							<!-- END CALLERID -->\n\n							<!-- START TYPE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.type.$touched || forms.general.$submitted) && forms.general.type.$invalid}">\n								<label class="control-label">{{\'APPLICATION_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="trunk.type" name="type" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'user\',\'peer\',\'friend\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_TYPE\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.type.$touched || forms.general.$submitted) && forms.general.type.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END TYPE -->\n\n							<!-- START DTMFMODE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.dtmfmode.$touched || forms.general.$submitted) && forms.general.dtmfmode.$invalid}">\n								<label class="control-label">{{\'APPLICATION_DTMFMODE\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="trunk.dtmfmode" name="dtmfmode" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'rfc2833\', \'info\', \'shortinfo\', \'inband\',\'auto\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_DTMFMODE\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.dtmfmode.$touched || forms.general.$submitted) && forms.general.dtmfmode.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END DTMFMODE -->\n\n						</div>\n						<div class="col-md-6">\n\n							<!-- START DEFAULT USER -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.defaultuser.$invalid}">\n								<label class="control-label">{{\'APPLICATION_DEFAULT_USER\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="defaultuser" placeholder="{{\'APPLICATION_DEFAULT_USER\' | translate}}" class="form-control" data-ng-model="trunk.defaultuser" required/>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_DEFAULT_USER\' | translate }}\n								</span>\n								<span data-ng-show="forms.general.$submitted && (forms.general.defaultuser.$invalid)" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END DEFAULT USER -->\n\n							<!-- START NAT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.nat.$touched || forms.general.$submitted) && forms.general.nat.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAT\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select multiple data-ng-model="trunk.nat" name="nat" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\', \'no\', \'never\', \'route\', \'force_rport\', \'comedia\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_NAT\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.nat.$touched || forms.general.$submitted) && forms.general.nat.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAT -->\n\n							<!-- START QUALIFY -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.qualify.$touched || forms.general.$submitted) && forms.general.qualify.$invalid}">\n								<label class="control-label">{{\'APPLICATION_QUALIFY\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="trunk.qualify" name="qualify" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_QUALIFY\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.qualify.$touched || forms.general.$submitted) && forms.general.qualify.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END QUALIFY -->\n\n							<!-- START ALLOW -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.allow.$touched || forms.general.$submitted) && forms.general.allow.$invalid}">\n								<label class="control-label">{{\'APPLICATION_ALLOW_CODEC\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select multiple data-ng-model="trunk.allow" name="allow" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'g723\',\'gsm\',\'ulaw\',\'alaw\',\'g726\',\'g722\',\'g729\',\'ilbc\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_ALLOW_CODEC\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.allow.$touched || forms.general.$submitted) && forms.general.allow.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END ALLOW -->\n\n							<!-- START INSECURE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.insecure.$touched || forms.general.$submitted) && forms.general.insecure.$invalid}">\n								<label class="control-label">{{\'APPLICATION_INSECURE\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select multiple data-ng-model="trunk.insecure" name="insecure" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'port\',\'invite\',\'very\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_INSECURE\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.insecure.$touched || forms.general.$submitted) && forms.general.insecure.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END INSECURE -->\n\n							<!-- START CALLLIMIT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.call-limit.$touched || forms.general.$submitted) && forms.general.call-limit.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CALLLIMIT\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="number" min="0" name="call-limit" placeholder="{{\'APPLICATION_CALLLIMIT\' | translate}}" class="form-control" data-ng-model="trunk[\'call-limit\']"/>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_CALLLIMIT\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.call-limit.$touched || forms.general.$submitted) && forms.general.call-limit.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END CALLLIMIT -->\n\n						</div>\n					</div>\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="trunk.description"></textarea>\n							</div>\n							<!-- END DESCRIPTION -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END GENERAL TAB -->\n					<!-- ADVANCED TAB -->\n					<div class="tab-pane" id="tab_1_2">\n						<form name="forms.advanced" data-ng-submit="forms.advanced.$valid && updateTrunk()" novalidate>\n							<div class="row">\n								<div class="col-md-6">\n							<!-- START LIMITONPEERS -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.limitonpeers.$touched || forms.advanced.$submitted) && forms.advanced.limitonpeers.$invalid}">\n								<label class="control-label">{{\'APPLICATION_LIMITONPEERS\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="trunk.limitonpeers" name="limitonpeers" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_LIMITONPEERS\' | translate }}\n								</span>\n								<span data-ng-show="(forms.advanced.limitonpeers.$touched || forms.advanced.$submitted) && forms.advanced.limitonpeers.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END LIMITONPEERS -->\n\n							<!-- START REGISTRY -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_REGISTRY\' | translate}}</label>\n								<input type="text" name="registry" placeholder="{{\'APPLICATION_REGISTRY\' | translate}}" class="form-control" data-ng-model="trunk.registry"/>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_REGISTRY\' | translate }}\n								</span>\n							</div>\n							<!-- END REGISTRY -->\n\n							<!-- START DIRECTMEDIA -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.directmedia.$touched || forms.advanced.$submitted) && forms.advanced.directmedia.$invalid}">\n								<label class="control-label">{{\'APPLICATION_DIRECTMEDIA\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="trunk.directmedia" name="directmedia" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\', \'no\', \'nonat\', \'update\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_DIRECTMEDIA\' | translate }}\n								</span>\n								<span data-ng-show="(forms.advanced.directmedia.$touched || forms.advanced.$submitted) && forms.advanced.directmedia.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END DIRECTMEDIA -->\n\n							<!-- START CALLCOUNTER -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.callcounter.$touched || forms.advanced.$submitted) && forms.advanced.callcounter.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CALLCOUNTER\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="trunk.callcounter" name="callcounter" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_CALLCOUNTER\' | translate }}\n								</span>\n								<span data-ng-show="(forms.advanced.callcounter.$touched || forms.advanced.$submitted) && forms.advanced.callcounter.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END CALLCOUNTER -->\n\n							<!-- START FROMDOMAIN -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.advanced.$submitted && forms.advanced.fromdomain.$invalid}">\n								<label class="control-label">{{\'APPLICATION_FROMDOMAIN\' | translate}}</label>\n								<input type="text" name="fromdomain" placeholder="{{\'APPLICATION_FROMDOMAIN\' | translate}}" class="form-control" data-ng-model="trunk.fromdomain" />\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_FROMDOMAIN\' | translate }}\n								</span>\n								<span data-ng-show="forms.advanced.$submitted && (forms.advanced.fromdomain.$invalid)" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END FROMDOMAIN -->\n\n							<!-- START FROMUSER -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.advanced.$submitted && forms.advanced.fromuser.$invalid}">\n								<label class="control-label">{{\'APPLICATION_FROMUSER\' | translate}}</label>\n								<input type="text" name="fromuser" placeholder="{{\'APPLICATION_FROMUSER\' | translate}}" class="form-control" data-ng-model="trunk.fromuser" />\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_FROMUSER\' | translate }}\n								</span>\n								<span data-ng-show="forms.advanced.$submitted && (forms.advanced.fromuser.$invalid)" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END FROMUSER -->\n\n						</div>\n						<div class="col-md-6">\n\n							<!-- START OUTBOUNDPROXY -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.advanced.$submitted && forms.advanced.outboundproxy.$invalid}">\n								<label class="control-label">{{\'APPLICATION_OUTBOUNDPROXY\' | translate}}</label>\n								<input type="text" name="outboundproxy" placeholder="{{\'APPLICATION_OUTBOUNDPROXY\' | translate}}" class="form-control" data-ng-model="trunk.outboundproxy" />\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_OUTBOUNDPROXY\' | translate }}\n								</span>\n								<span data-ng-show="forms.advanced.$submitted && (forms.advanced.outboundproxy.$invalid)" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END OUTBOUNDPROXY -->\n\n							<!-- START USEREQPHONE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.usereqphone.$touched || forms.advanced.$submitted) && forms.advanced.usereqphone.$invalid}">\n								<label class="control-label">{{\'APPLICATION_USEREQPHONE\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="trunk.usereqphone" name="usereqphone" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_USEREQPHONE\' | translate }}\n								</span>\n								<span data-ng-show="(forms.advanced.usereqphone.$touched || forms.advanced.$submitted) && forms.advanced.usereqphone.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END USEREQPHONE -->\n\n							<!-- START TRUSTRPID -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.trustrpid.$touched || forms.advanced.$submitted) && forms.advanced.trustrpid.$invalid}">\n								<label class="control-label">{{\'APPLICATION_TRUSTRPID\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="trunk.trustrpid" name="trustrpid" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_TRUSTRPID\' | translate }}\n								</span>\n								<span data-ng-show="(forms.advanced.trustrpid.$touched || forms.advanced.$submitted) && forms.advanced.trustrpid.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END TRUSTRPID -->\n\n							<!-- START SENDRPID -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.sendrpid.$touched || forms.advanced.$submitted) && forms.advanced.sendrpid.$invalid}">\n								<label class="control-label">{{\'APPLICATION_SENDRPID\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="trunk.sendrpid" name="sendrpid" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_SENDRPID\' | translate }}\n								</span>\n								<span data-ng-show="(forms.advanced.sendrpid.$touched || forms.advanced.$submitted) && forms.advanced.sendrpid.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END SENDRPID -->\n\n							<!-- START ENCRYPTION -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.encryption.$touched || forms.advanced.$submitted) && forms.advanced.encryption.$invalid}">\n								<label class="control-label">{{\'APPLICATION_ENCRYPTION\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="trunk.encryption" name="encryption" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_ENCRYPTION\' | translate }}\n								</span>\n								<span data-ng-show="(forms.advanced.encryption.$touched || forms.advanced.$submitted) && forms.advanced.encryption.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END ENCRYPTION -->\n\n							<!-- START PORT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.port.$touched || forms.advanced.$submitted) && forms.advanced.port.$invalid}">\n								<label class="control-label">{{\'APPLICATION_PORT\' | translate}}</label>\n								<input type="number" min="0" name="port" placeholder="{{\'APPLICATION_PORT\' | translate}}" class="form-control" data-ng-model="trunk.port"/>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_PORT\' | translate }}\n								</span>\n								<span data-ng-show="(forms.advanced.port.$touched || forms.advanced.$submitted) && forms.advanced.port.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END PORT -->\n\n							<!-- START TRANSPORT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.transport.$touched || forms.advanced.$submitted) && forms.advanced.transport.$invalid}">\n								<label class="control-label">{{\'APPLICATION_TRANSPORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select multiple data-ng-model="trunk.transport" name="transport" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'udp\',\'wss\',\'ws\',\'tcp\',\'tls\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_TRUNK_TRANSPORT\' | translate }}\n								</span>\n								<span data-ng-show="(forms.advanced.transport.$touched || forms.advanced.$submitted) && forms.advanced.transport.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END TRANSPORT -->\n\n						</div>\n					</div>\n					<!-- START OTHER FIELDS-->\n					<div class="form-group">\n						<label class="control-label">{{\'APPLICATION_OTHER_FIELDS\' | translate}}</label>\n						<textarea type="text" name="otherFields" placeholder="{{\'APPLICATION_OTHER_FIELDS\' | translate}}" class="form-control" data-ng-model="trunk.otherFields"></textarea>\n						<span class="help-block">\n							{{ \'DESCRIPTION_TRUNK_OTHER_FIELDS\' | translate }}\n						</span>\n					</div>\n					<!-- END OTHER FIELDS -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END ADVANCED TAB -->\n\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),
+a.put("app/trunk/wizard/wizard.html",'<div class="col-md-12" data-ng-init="initWizard()">\n  <!-- BEGIN PAGE HEADER-->\n	<div class="page-bar">\n		<ul class="page-breadcrumb">\n			<li>\n				<i class="icon-rocket"></i>\n				<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-link"></i>\n				<a href="/trunks/list">{{ \'APPLICATION_TRUNKS\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-options"></i>\n				<a href="#">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n			</li>\n		</ul>\n	</div>\n  <!-- END PAGE HEADER-->\n\n  <!-- BEGIN PORTLET-->\n  <div class="portlet light bordered">\n  	<div class="portlet-title">\n  		<div class="caption font-green-sharp">\n  			<i class="icon-link font-green-sharp"></i>\n  			<span class="caption-subject">{{ \'APPLICATION_TRUNK\' | translate }} WIZARD</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n  		<wizard on-finish="createItem()">\n				<wz-step title="{{\'APPLICATION_GENERAL\' | translate}}" canexit="exitValidation(forms.general.$valid)">\n			    <form name="forms.general" novalidate>\n\n			      <!-- START NAME -->\n			      <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.name.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n							<span data-ng-show="forms.general.$submitted && forms.general.name.$invalid" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END NAME -->\n\n						<!-- START ROLE -->\n						<!-- <div class="form-group" data-ng-class="{\'has-error\': (forms.general.role.$touched || forms.general.$submitted) && forms.general.role.$invalid}">\n							<label class="control-label">{{\'APPLICATION_USAGE\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<ui-select data-ng-model="item.role" name="role" theme="bootstrap" required>\n								<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.value}}</ui-select-match>\n								<ui-select-choices repeat="type.key as type in types | filter: $select.search">\n									<div ng-bind-html="type.value | highlight: $select.search"></div>\n								</ui-select-choices>\n							</ui-select>\n							<span class="help-block">\n								{{ \'DESCRIPTION_TRUNK_ROLE\' | translate }}\n							</span>\n							<span data-ng-show="(forms.general.role.$touched || forms.general.$submitted) && forms.general.role.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div> -->\n						<!-- END ROLE -->\n\n						<!-- START HOST -->\n						<div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.host.$invalid}">\n							<label class="control-label">{{\'APPLICATION_HOST\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<input type="text" name="host" placeholder="{{\'APPLICATION_HOST\' | translate}}" class="form-control" data-ng-model="item.host" required/>\n							<span class="help-block">\n								{{ \'DESCRIPTION_TRUNK_HOST\' | translate }}\n							</span>\n							<span data-ng-show="forms.general.$submitted && forms.general.host.$invalid" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END HOST -->\n\n						<!-- START PASSWORD -->\n						<div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.password.$invalid}">\n							<label class="control-label">{{\'APPLICATION_SECRET\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.secret" required/>\n							<span class="help-block">\n								{{ \'DESCRIPTION_TRUNK_SECRET\' | translate }}\n							</span>\n							<span data-ng-show="forms.general.$submitted && forms.general.password.$invalid" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END PASSWORD -->\n\n						<!-- START CONFIRM PASSWORD -->\n						<div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.rpassword.$invalid}">\n							<label class="control-label">{{\'APPLICATION_CONFIRM_SECRET\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<input type="password" name="rpassword" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.rpassword" nx-equal="item.secret" required/>\n							<span data-ng-show="forms.general.$submitted && (forms.general.rpassword.$invalid)" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n							</span>\n						</div>\n						<!-- END CONFIRM PASSWORD -->\n\n						<!-- START DEFAULT USER -->\n						<div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.defaultuser.$invalid}">\n							<label class="control-label">{{\'APPLICATION_DEFAULT_USER\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<input type="text" name="defaultuser" placeholder="{{\'APPLICATION_DEFAULT\' | translate}} {{\'APPLICATION_USER\' | translate}}" class="form-control" data-ng-model="item.defaultuser" required/>\n							<span class="help-block">\n								{{ \'DESCRIPTION_TRUNK_DEFAULT_USER\' | translate }}\n							</span>\n							<span data-ng-show="forms.general.$submitted && (forms.general.defaultuser.$invalid)" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n							</span>\n						</div>\n						<!-- END DEFAULT USER -->\n\n						<!-- START DESCRIPTION -->\n						<div class="form-group">\n							<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n							<textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n						</div>\n						<!-- END DESCRIPTION -->\n\n						<button class="btn green-haze" type="submit" ng-click="next(true)">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n			    </form>\n			  </wz-step>\n\n				<wz-step title="{{\'APPLICATION_ADVANCED\' | translate}}" canexit="exitValidation(forms.advanced.$valid)">\n					<form name="forms.advanced" novalidate>\n\n						<!-- START REGISTRY -->\n						<div class="form-group">\n							<label class="control-label">{{\'APPLICATION_REGISTRY\' | translate}}</label>\n							<input type="text" name="registry" placeholder="{{\'APPLICATION_REGISTRY\' | translate}}" class="form-control" data-ng-model="item.registry"/>\n							<span class="help-block">\n								{{ \'DESCRIPTION_TRUNK_REGISTRY\' | translate }}\n							</span>\n						</div>\n						<!-- END REGISTRY -->\n						<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n						<button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n					</form>\n				</wz-step>\n\n				<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n					<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n					<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n					<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n				</wz-step>\n  		</wizard>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),a.put("app/user/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-eye"></i>\n					<a href="/users/list">{{ \'APPLICATION_USERS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-eye font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_USERS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="users.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_USER\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/users/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getUsers([\'name\', \'fullname\', \'email\'])" csv-header="[\'Username\', \'Fullname\', \'Email\']" field-separator=";" filename="users.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table id="table" st-table="displayedUsers" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="6">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.usersByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="userByPage in usersByPage | filter: $select.search">\n													<div ng-bind-html="userByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(user, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="fullname">{{ \'APPLICATION_FULLNAME\' | translate }}</th>\n						    <th st-sort="name">{{ \'APPLICATION_USERNAME\' | translate }}</th>\n						    <th st-sort="email">{{ \'APPLICATION_EMAIL\' | translate }}</th>\n								<th st-sort="role">{{ \'APPLICATION_ROLE\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="user in displayedUsers" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="users.checked" checklist-value="user.id"></td>\n								<td>{{user.fullname}}</td>\n					      <td>{{user.name}}</td>\n					      <td><a ng-href="mailto:{{user.email}}">{{user.email}}</a></td>\n								<td>{{user.role}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/users/view/{{user.id}}/account">\n										{{ \'APPLICATION_PROFILE\' | translate }}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(user.fullname, user.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedUsers.length">\n								<td colspan="6" style="text-align:center;">\n									<i>No users available</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="fullname" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_USERNAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="email" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_EMAIL\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="role" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_ROLE\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n								</td>\n						    <td/>\n						  </tr>\n					    <tr>\n					      <td colspan="6" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.usersByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/user/view/view.account.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_PROFILE\' | translate}} {{ \'APPLICATION_ACCOUNT\' | translate}}</span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_PERSONAL_INFO\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_CHANGE_AVATAR\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-ng-show="Auth.isAdmin() || user.id === getCurrentUser().id" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_CHANGE_PASSWORD\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n\n			<div class="portlet-body">\n				<div class="tab-content">\n					<!-- PERSONAL INFO TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.info" data-ng-submit="updateItem()" novalidate>\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="user.fullname" required/>\n								<span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START USERNAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="user.name" required/>\n								<span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END USERNAME -->\n\n							<!-- START EMAIL -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$invalid}">\n								<label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="user.email" required/>\n								<span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n								<span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.email" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n								</span>\n							</div>\n							<!-- END EMAIL -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END PERSONAL INFO TAB -->\n					<!-- CHANGE AVATAR TAB -->\n					<div class="tab-pane" id="tab_1_2">\n						<form action="#" role="form">\n							<div class="form-group">\n								<div class="fileinput fileinput-new" data-provides="fileinput">\n									<div class="fileinput-new thumbnail" style="width: 200px; height: 150px;">\n										<img src="http://www.placehold.it/200x150/EFEFEF/AAAAAA&amp;text=no+image" alt=""/>\n									</div>\n									<div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px;">\n									</div>\n									<div>\n										<span class="btn default btn-file" data-ng-show="!uploader.queue[0]">\n											<span> {{ \'APPLICATION_SELECT_IMAGE\' | translate }} </span>\n											<input type="file" nv-file-select="" uploader="uploader" /><br/>\n										</span>\n										<button type="button" class="btn default" data-ng-show="uploader.queue[0]" data-dismiss="fileinput" ng-click="uploader.queue[0].remove()">\n											<span> {{ \'APPLICATION_REMOVE\' | translate }} </span>\n										</button>\n										<button type="button" class="btn green-haze" data-ng-show="uploader.queue[0]" data-ng-click="uploader.queue[0].upload()" ng-disabled="uploader.queue[0].isReady || uploader.queue[0].isUploading || uploader.queue[0].isSuccess">\n											<span> {{ \'APPLICATION_CONFIRM\' | translate }} </span>\n										</button>\n									</div>\n									<p>\n										</br> {{ \'MESSAGE_SUPPORTED_FORMATS\' | translate }} <b>jpg, png, jpeg</b>.\n									</p>\n								</div>\n							</div>\n						</form>\n						<div class="row">\n							<div class="col-md-2">\n								<table class="table" border="0">\n									<tbody>\n									<tr data-ng-repeat="item in uploader.queue">\n											<td style="border-top-style:none">\n												<strong>\n													{{ item.file.name }}\n												</strong>\n											</td>\n											<td data-ng-show="uploader.isHTML5" nowrap style="border-top-style:none">\n												{{ item.file.size/1024/1024|number:2 }} MB\n											</td>\n											<td nowrap style="border-top-style:none">\n												<button type="button" class="btn btn-danger btn-xs" data-ng-click="item.remove()">\n														<span class="glyphicon glyphicon-trash"></span> Remove\n												</button>\n											</td>\n										</tr>\n									</tbody>\n								</table>\n							</div>\n						</div>\n					</div>\n					<!-- END CHANGE AVATAR TAB -->\n					<!-- CHANGE PASSWORD TAB -->\n					<div class="tab-pane" id="tab_1_3" data-ng-show="Auth.isAdmin() || user.id === getCurrentUser().id">\n						<form name="forms.changePwd" data-ng-submit="forms.changePwd.$valid && updatePassword()" novalidate>\n							<!-- START CURRENT PWD -->\n							<div class="form-group" data-ng-if="!Auth.isAdmin()" data-ng-class="{\'has-error\': (forms.changePwd.current_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.current_pwd.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CURRENT_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="password" name="current_pwd" placeholder="{{\'APPLICATION_CURRENT_PASSWORD\' | translate}}" class="form-control" data-ng-model="user.currentPwd" required/>\n								<span data-ng-show="(forms.changePwd.current_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.current_pwd.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END CURRENT PWD -->\n							<!-- START NEW PWD -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NEW_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="password" name="new_pwd" placeholder="{{\'APPLICATION_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="user.newPwd" required/>\n								<span data-ng-show="(forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NEW PWD -->\n							<!-- START RE-NEW PWD -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.changePwd.re_new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.re_new_pwd.$invalid}">\n								<label class="control-label">{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="password" name="re_new_pwd" placeholder="{{\'APPLICATION_RE_TYPE_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="user.reNewPwd" nx-equal="user.newPwd" required/>\n								<span data-ng-show="(forms.changePwd.new_pwd.$touched || forms.changePwd.$submitted) && forms.changePwd.new_pwd.$invalid" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END RE-NEW PWD -->\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n						<!-- <form action="#">\n							<div class="form-group">\n								<label class="control-label">Current Password</label>\n								<input type="password" class="form-control"/>\n							</div>\n							<div class="form-group">\n								<label class="control-label">New Password</label>\n								<input type="password" class="form-control"/>\n							</div>\n							<div class="form-group">\n								<label class="control-label">Re-type New Password</label>\n								<input type="password" class="form-control"/>\n							</div>\n							<div class="margin-top-10">\n								<a href="#" class="btn green-haze">Change Password </a>\n								<a href="#" class="btn default">Cancel </a>\n							</div>\n						</form> -->\n					</div>\n					<!-- END CHANGE PASSWORD TAB -->\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/user/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-eye"></i>\n					<a href="/users/list">{{ \'APPLICATION_USERS\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<a href="#">{{user.fullname}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-userpic">\n					<img ng-src="api/users/avatar/{{user.userpic ? user.userpic : \'unknown_avatar\'}}" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{user.fullname}}\n					</div>\n					<div class="profile-usertitle-job">\n						{{user.role}}\n					</div>\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.users.view.account\')}">\n							<a data-ng-href="/users/view/{{user.id}}/account">\n							<i class="icon-user"></i>\n							{{ \'APPLICATION_ACCOUNT\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/user/wizard/wizard.html",'<div class="col-md-12">\n  <!-- BEGIN PAGE HEADER-->\n	<div class="page-bar">\n		<ul class="page-breadcrumb">\n			<li>\n				<i class="icon-rocket"></i>\n				<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-eye"></i>\n				<a href="/users/list">{{ \'APPLICATION_USERS\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-options"></i>\n				<a href="/users/wizard">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n			</li>\n		</ul>\n	</div>\n  <!-- END PAGE HEADER-->\n\n  <!-- BEGIN PORTLET-->\n  <div class="portlet light bordered">\n  	<div class="portlet-title">\n  		<div class="caption font-green-sharp">\n  			<i class="icon-user font-green-sharp"></i>\n  			<span class="caption-subject">{{ \'APPLICATION_USER\' | translate }} WIZARD</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n  		<wizard on-finish="createItem()">\n				<wz-step title="{{\'APPLICATION_ACCOUNT\' | translate}}" canexit="exitValidation(forms.info.$valid)">\n			    <form name="forms.info" novalidate>\n\n			      <!-- START NAME -->\n			      <div class="form-group" data-ng-class="{\'has-error\': (forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="text" name="fullname" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.fullname" required/>\n							<span data-ng-show="(forms.info.fullname.$touched || forms.info.$submitted) && forms.info.fullname.$error.required" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END NAME -->\n\n			      <!-- START USERNAME -->\n			      <div class="form-group" data-ng-class="{\'has-error\': (forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_USERNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="text" name="name" placeholder="{{\'APPLICATION_USERNAME\' | translate}}" class="form-control" data-ng-model="item.name" required ng-remote-validate="/api/users/validate/name"/>\n							<span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.required" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n							<span data-ng-show="(forms.info.name.$touched || forms.info.$submitted) && forms.info.name.$error.ngRemoteValidate" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_USERNAME\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END USERNAME -->\n\n			      <!-- START EMAIL -->\n			      <div class="form-group" data-ng-class="{\'has-error\': (forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="item.email" required ng-remote-validate="/api/users/validate/email"/>\n			        <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.required" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n			        <span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.email" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n			        </span>\n							<span data-ng-show="(forms.info.email.$touched || forms.info.$submitted) && forms.info.email.$error.ngRemoteValidate" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_EMAIL\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END EMAIL -->\n\n			      <!-- START PASSWORD -->\n			      <div class="form-group" data-ng-class="{\'has-error\': (forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" required/>\n			        <span data-ng-show="(forms.info.password.$touched || forms.info.$submitted) && forms.info.password.$error.required" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END PASSWORD -->\n\n			      <!-- START RE PASSWORD -->\n			      <div class="form-group" data-ng-class="{\'has-error\': (forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="password" name="rpassword" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.rpassword" nx-equal="item.password" required/>\n			        <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.required" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n			        <span data-ng-show="(forms.info.rpassword.$touched || forms.info.$submitted) && forms.info.rpassword.$error.nxEqual" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END RE PASSWORD -->\n\n			      <input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" ng-click="next()"/>\n			    </form>\n			  </wz-step>\n\n				<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n					<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n					<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n				</wz-step>\n  		</wizard>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),
+a.put("app/variable/list/create.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_NEW_VARIABLE\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <form name="forms.variable" novalidate>\n\n    <!-- START NAME -->\n    <div class="form-group" data-ng-class="{\'has-error\': (forms.variable.name.$touched || forms.variable.$submitted) && forms.variable.name.$invalid}">\n      <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n      <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n      <span data-ng-show="(forms.variable.name.$touched || forms.variable.$submitted) && forms.variable.name.$error.required" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END NAME -->\n\n    <!-- START DESCRIPTION -->\n    <div class="form-group">\n      <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n      <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n    </div>\n    <!-- END DESCRIPTION -->\n\n  </form>\n</div>\n<div class="modal-footer">\n  <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.variable.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n  <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/variable/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-docs"></i>\n					<a href="/variables/list">{{ \'APPLICATION_VARIABLES\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-docs font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_VARIABLES\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="Variables.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<button class="btn green-jungle " ng-click="create()">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_VARIABLE\' | translate }}\n						</button>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getVariables([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="variables.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedVariables" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="4">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.variablesByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="variableByPage in variablesByPage | filter: $select.search">\n													<div ng-bind-html="variableByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(variable, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n						    <th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="variable in displayedVariables" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input data-ng-hide="variable.defaultEntry" type="checkbox" checklist-model="Variables.checked" checklist-value="variable.id"></td>\n								<td>{{variable.name}}</td>\n					      <td>{{variable.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/variables/view/{{variable.id}}/settings" data-ng-class="{\'disabled\': variable.defaultEntry}">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(variable.name,variable.id)" data-ng-class="{\'disabled\': variable.defaultEntry}">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedVariables.length">\n								<td colspan="4" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_VARIABLES_AVAILABLE\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td/>\n						  </tr>\n					    <tr>\n					      <td colspan="4" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.variablesByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/variable/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getVariable()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-docs"></i>\n					<a href="/variables/list">{{ \'APPLICATION_VARIABLES\' | translate }}</a>\n					<i data-ng-show="variable" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="variable">\n					<a href="#">{{variable.name}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/variable.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{variable.name}}\n					</div>\n					<!-- <div class="profile-usertitle-job">\n						{{user.role}}\n					</div> -->\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.variables.view.settings\')}">\n							<a data-ng-href="/variables/view/{{variable.id}}/settings">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/variable/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_VARIABLE\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n\n			<div class="portlet-body">\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.general" data-ng-submit="forms.general.$valid && updateVariable()" novalidate>\n\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="variable.name" required/>\n								<span data-ng-show="(forms.general.name.$touched || forms.general.$submitted) && forms.general.name.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="variable.description"></textarea>\n							</div>\n							<!-- END DESCRIPTION -->\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END ADVANCED TAB -->\n\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/voice/context/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-docs"></i>\n					<a href="/voice/contexts/list">{{ \'APPLICATION_CONTEXTS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-docs font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_CONTEXTS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="voiceContexts.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONTEXT\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/voice/contexts/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getVoiceContexts([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="voice_contexts.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedContexts" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="4">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.contextsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="contextByPage in contextsByPage | filter: $select.search">\n													<div ng-bind-html="contextByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(context, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n						    <th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="context in displayedVoiceContexts" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input data-ng-hide="context.defaultEntry" type="checkbox" checklist-model="voiceContexts.checked" checklist-value="context.id"></td>\n								<td>{{context.name}}</td>\n					      <td>{{context.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/voice/contexts/view/{{context.id}}/settings" data-ng-class="{\'disabled\': context.defaultEntry}">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(context.name,context.id)" data-ng-class="{\'disabled\': context.defaultEntry}">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedVoiceContexts.length">\n								<td colspan="4" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_CONTEXTS_AVAILABLE\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td/>\n						  </tr>\n					    <tr>\n					      <td colspan="4" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.contextsByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/voice/context/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getContext()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-docs"></i>\n					<a href="/voice/contexts/list">{{ \'APPLICATION_CONTEXTS\' | translate }}</a>\n					<i data-ng-show="context" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="context">\n					<a href="#">{{context.name}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/context.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{context.name}}\n					</div>\n					<!-- <div class="profile-usertitle-job">\n						{{user.role}}\n					</div> -->\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.voice.contexts.view.settings\')}">\n							<a data-ng-href="/voice/contexts/view/{{context.id}}/settings">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/voice/context/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_CONTEXT\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n\n			<div class="portlet-body">\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.general" data-ng-submit="forms.general.$valid && updateVoiceContext()" novalidate>\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="context.description"></textarea>\n							</div>\n							<!-- END DESCRIPTION -->\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END ADVANCED TAB -->\n\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/voice/context/wizard/wizard.html",'<div class="col-md-12">\n  <!-- BEGIN PAGE HEADER-->\n	<div class="page-bar">\n		<ul class="page-breadcrumb">\n			<li>\n				<i class="icon-rocket"></i>\n				<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-docs"></i>\n				<a href="/voice/contexts/list">{{ \'APPLICATION_CONTEXTS\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-options"></i>\n				<a href="/voice/contexts/wizard">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n			</li>\n		</ul>\n	</div>\n  <!-- END PAGE HEADER-->\n\n  <!-- BEGIN PORTLET-->\n  <div class="portlet light bordered">\n  	<div class="portlet-title">\n  		<div class="caption font-green-sharp">\n  			<i class="icon-docs font-green-sharp"></i>\n  			<span class="caption-subject">{{ \'APPLICATION_CONTEXT\' | translate }} WIZARD</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n  		<wizard on-finish="createItem()">\n				<wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.context.$valid)">\n			    <form name="forms.context" novalidate>\n\n			      <!-- START NAME -->\n			      <div class="form-group" data-ng-class="{\'has-error\': (forms.context.name.$touched || forms.context.$submitted) && forms.context.name.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n							<span data-ng-show="(forms.context.name.$touched || forms.context.$submitted) && forms.context.name.$error.required" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END NAME -->\n\n						<!-- START DESCRIPTION -->\n						<div class="form-group">\n							<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n							<textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n						</div>\n						<!-- END DESCRIPTION -->\n			      <button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n			    </form>\n			  </wz-step>\n\n				<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n					<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n					<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n					<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n				</wz-step>\n  		</wizard>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),a.put("app/voice/moh/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-music-tone"></i>\n					<a href="/voice/mohs/list">{{ \'APPLICATION_MOHS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-music-tone font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_MOHS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="mohs.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_MOH_CLASS\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/voice/mohs/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getMohs([\'name\', \'directory\', \'sort\', \'description\'])" csv-header="[\'Name\', \'Directory\', \'Sort\', \'Description\']" field-separator=";" filename="musiconholds_classes.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedMohs" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="6">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.mohsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="mohByPage in mohsByPage | filter: $select.search">\n													<div ng-bind-html="mohByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(moh, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n                <th st-sort="directory">{{ \'APPLICATION_PATH\' | translate }}</th>\n                <th st-sort="sort">{{ \'APPLICATION_SORT\' | translate }}</th>\n						    <th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="moh in displayedMohs" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="mohs.checked" checklist-value="moh.id" data-ng-hide="moh.defaultEntry"></td>\n								<td>{{moh.name}}</td>\n                <td>{{moh.directory}}</td>\n								<td>{{moh.sort | capitalize}}</td>\n					      <td>{{moh.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-class="{\'disabled\': moh.defaultEntry}" data-ng-href="/voice/mohs/view/{{moh.id}}/settings">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-class="{\'disabled\': moh.defaultEntry}" data-ng-click="deleteItem(moh.name,moh.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedMohs.length">\n								<td colspan="6" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_MOHS_AVAILABLE\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="directory" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_PATH\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="sort" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_SORT\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n								</td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n						    </td>\n						  </tr>\n					    <tr>\n					      <td colspan="6" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.mohsByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/voice/moh/view/view.addFiles.html",'\n<div class="row" data-ng-init="getSounds()">\n	<div class="col-md-12">\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_MOH\' | translate }} {{ \'APPLICATION_ADD_FILES\' | translate }}</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<div class="note note-warning" data-ng-hide="soundList.length">\n					<h4 class="block">Warning!</h4>\n					<p>\n						 {{ \'MESSAGE_NO_SOUNDS_AVAILABLE\' | translate }}\n					</p>\n				</div>\n            <form name="forms.general" data-ng-submit="(item.sounds.length > 0) && addMohs()" data-ng-show="soundList.length" novalidate>\n\n              <!-- START SOUNDS -->\n              <div class="form-group" data-ng-class="{\'has-error\': (forms.general.sounds.$touched || forms.general.$submitted) && item.sounds.length == 0}">\n                <label class="control-label">{{\'APPLICATION_SOUNDS\' | translate}}<span class="required" aria-required="true">*</span></label>\n                <ui-select multiple data-ng-model="item.sounds" theme="bootstrap" name="sounds" required>\n                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item.display_name}}</ui-select-match>\n                  <ui-select-choices repeat="sound.id as sound in soundList | filter: $select.search">\n                    {{sound.display_name}}\n                  </ui-select-choices>\n                </ui-select>\n                <span data-ng-show="(forms.general.sounds.$touched || forms.general.$submitted) && item.sounds.length == 0" class="help-block help-block-error">\n                  <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n                </span>\n              </div>\n              <!-- END OPTIONS -->\n\n							<input type="submit" class="btn green-haze" value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n						</form>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/voice/moh/view/view.audios.html",'<div ui-view class="profile-content">\n<div class="row" data-ng-init="getAudioFiles()">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title  tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AUDIOS\' | translate}}</span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="audioFiles">\n						<a class="btn green-jungle " href="/voice/mohs/view/{{moh.id}}/add" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_ADD_FILES\' | translate }}\n						</a>\n					</div>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<div class="note note-warning" data-ng-hide="audioFiles">\n					<h4 class="block">Warning!</h4>\n					<p>\n						 {{ \'MESSAGE_FOLDER_DOES_NOT_EXIST\' | translate }}\n					</p>\n				</div>\n				<!-- START TABLE -->\n				<table class="table table-striped table-bordered table-hover" data-ng-show="audioFiles">\n					  <thead>\n						  <tr>\n						    <th>{{ \'APPLICATION_NAME\' | translate }}</th>\n								<th width="30%">{{ \'APPLICATION_PREVIEW\' | translate }}</th>\n								<th width="10%">{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody data-ng-model="audioFiles">\n					    <tr data-ng-repeat="audiofile in audioFiles">\n								<td>{{audiofile}}</td>\n								<td>\n									<audio controls ng-src="{{getSecureSrc(audioSources[audiofile])}}" preload="none">\n				            Your browser does not support the audio tag.\n				          </audio></td>\n					      <td>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(audiofile,audiofile)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="audioFiles.length">\n								<td colspan="3" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_AUDIOFILES_AVAILABLE\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n	</div>\n</div>\n</div>\n'),a.put("app/voice/moh/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getMoh()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-music-tone"></i>\n					<a href="/voice/mohs/list">{{ \'APPLICATION_MOH_CLASS\' | translate }}</a>\n					<i data-ng-show="moh" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="moh">\n					<a href="#">{{moh.name}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/moh.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{moh.name}}\n					</div>\n					<!-- <div class="profile-usertitle-job">\n						{{user.role}}\n					</div> -->\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.voice.mohs.view.settings\')}">\n							<a data-ng-href="/voice/mohs/view/{{moh.id}}/settings">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n						<li data-ng-class="{active: $state.is(\'main.voice.mohs.view.audios\') || $state.is(\'main.voice.mohs.view.add\')}">\n							<a data-ng-href="/voice/mohs/view/{{moh.id}}/audios">\n							<i class="icon-list"></i>\n							{{ \'APPLICATION_AUDIOS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/voice/moh/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_MOH_CLASS\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n\n			<div class="portlet-body" data-ng-init="getContexts();">\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.general" data-ng-submit="forms.general.$valid && updateVoiceMoh()" novalidate>\n\n	            <!-- START PATH -->\n	            <div class="form-group" >\n	              <label class="control-label">{{\'APPLICATION_PATH\' | translate}}</label>\n	              <input type="text" name="path" class="form-control" data-ng-model="moh.directory" disabled/>\n	            </div>\n	            <!-- END PATH -->\n\n	            <!-- START SORT -->\n	            <div class="form-group" data-ng-class="{\'has-error\': (forms.general.sort.$touched || forms.general.$submitted) && forms.general.sort.$invalid}">\n	              <label class="control-label">{{\'APPLICATION_SORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n	              <ui-select data-ng-model="moh.sort" theme="bootstrap" name="sort" required>\n	                <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n	                <ui-select-choices repeat="sort.value as sort in sortOptions | filter: $select.search">\n	                  {{$translate.instant(sort.name)}}\n	                </ui-select-choices>\n	              </ui-select>\n	              <span data-ng-show="(forms.general.sort.$touched || forms.general.$submitted) && forms.general.sort.$error.required" class="help-block help-block-error">\n	                <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n	              </span>\n	            </div>\n	            <!-- END SORT -->\n\n	            <!-- START DESCRIPTION -->\n				      <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.description.$invalid}">\n				        <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n				        <textarea type="text" name="description" class="form-control" data-ng-model="moh.description"/></textarea>\n								<span data-ng-show="forms.general.$submitted && forms.general.description.$invalid" class="help-block help-block-error">\n				          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n				        </span>\n				      </div>\n				      <!-- END DESCRIPTION -->\n\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END GENERAL TAB -->\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/voice/moh/wizard/wizard.html",'<div class="col-md-12" data-ng-init="initWizard();getContexts();">\n  <!-- BEGIN PAGE HEADER-->\n	<div class="page-bar">\n		<ul class="page-breadcrumb">\n			<li>\n				<i class="icon-rocket"></i>\n				<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-music-tone"></i>\n				<a href="/voice/mohs/list">{{ \'APPLICATION_MOHS\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-options"></i>\n				<a href="#">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n			</li>\n		</ul>\n	</div>\n  <!-- END PAGE HEADER-->\n\n  <!-- BEGIN PORTLET-->\n  <div class="portlet light bordered">\n  	<div class="portlet-title">\n  		<div class="caption font-green-sharp">\n  			<i class="icon-music-tone font-green-sharp"></i>\n  			<span class="caption-subject">{{ \'APPLICATION_MOH_CLASS\' | translate }} WIZARD</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n  		<wizard on-finish="createItem()">\n				<wz-step title="{{\'APPLICATION_GENERAL\' | translate}}" canexit="exitValidation(forms.general.$valid)">\n			    <form name="forms.general" novalidate>\n\n			      <!-- START NAME -->\n			      <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.name.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n							<span data-ng-show="forms.general.$submitted && forms.general.name.$invalid" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END NAME -->\n\n            <!-- START SORT -->\n            <!-- <div class="form-group" data-ng-class="{\'has-error\': (forms.general.sort.$touched || forms.general.$submitted) && forms.general.sort.$invalid}">\n              <label class="control-label">{{\'APPLICATION_SORT\' | translate}}<span class="required" aria-required="true">*</span></label>\n              <ui-select data-ng-model="item.sort" theme="bootstrap" name="sort" required>\n                <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n                <ui-select-choices repeat="sort.value as sort in sortOptions | filter: $select.search">\n                  {{$translate.instant(sort.name)}}\n                </ui-select-choices>\n              </ui-select>\n              <span data-ng-show="(forms.general.sort.$touched || forms.general.$submitted) && forms.general.sort.$error.required" class="help-block help-block-error">\n                <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n              </span>\n            </div> -->\n            <!-- END SORT -->\n\n            <!-- START DESCRIPTION -->\n			      <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.description.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n			        <textarea type="text" name="description" class="form-control" data-ng-model="item.description"/></textarea>\n							<span data-ng-show="forms.general.$submitted && forms.general.description.$invalid" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END DESCRIPTION -->\n\n\n						<button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n			    </form>\n			  </wz-step>\n\n				<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n					<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n					<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n					<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n				</wz-step>\n  		</wizard>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),a.put("app/voice/queue/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-layers"></i>\n					<a href="/voice/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-layers font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_QUEUES\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="queues.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_QUEUE\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/voice/queues/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getQueues([\'name\', \'description\', \'strategy\', \'context\'])" csv-header="[\'Name\', \'Description\', \'Strategy\', \'Context\']" field-separator=";" filename="queues.csv">\n					<i class="icon-cloud-download"></i></a>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedQueues" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="6">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.voiceQueuesByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="voiceQueueByPage in voiceQueuesByPage | filter: $select.search">\n													<div ng-bind-html="voiceQueueByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(queue, checked)" checklist-model checklist-value="name"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n						    <th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n						    <th st-sort="strategy">{{ \'APPLICATION_STRATEGY\' | translate }}</th>\n								<th st-sort="context">{{ \'APPLICATION_CONTEXT\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="queue in displayedQueues" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="queues.checked" checklist-value="queue.name"></td>\n								<td>{{queue.name}}</td>\n					      <td>{{queue.description}}</td>\n					      <td>{{queue.strategy}}</td>\n								<td>{{queue.context}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/voice/queues/view/{{queue.name}}/settings">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(queue.name,queue.name)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedQueues.length">\n								<td colspan="6" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="strategy" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_STRATEGY\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="context" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_CONTEXT\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n						    </td>\n						  </tr>\n					    <tr>\n					      <td colspan="6" class="text-center">\n					        <div class="pagination" st-pagination st-items-by-page="conf.voiceQueuesByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/voice/queue/view/view.agents.html",'<div class="row" data-ng-init="getTeams()">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_AGENTS\' | translate}}</span>\n				</div>\n			</div>\n			<div class="note note-warning" data-ng-hide="teams.length">\n				<h4 class="block">Warning!</h4>\n				<p>\n					 {{ \'MESSAGE_NO_AVAILABLE_TEAMS\' | translate }}\n				</p>\n			</div>\n			<div class="portlet-body">\n				<!-- BEGIN FORM-->\n				<form action="index.html" class="form-horizontal form-row-seperated">\n					<div class="form-body text-center">\n						<div class="form-group last">\n							<div class="col-md-9" id="multi-select-team">\n							</div>\n						</div>\n					</div>\n				</form>\n				<!-- END FORM-->\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/voice/queue/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getQueue()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-layers"></i>\n					<a href="/voice/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n					<i data-ng-show="queue" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="queue">\n					<a href="#">{{queue.name}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/queue.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{queue.name}}\n					</div>\n					<!-- <div class="profile-usertitle-job">\n						{{user.role}}\n					</div> -->\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.voice.queues.view.settings\')}">\n							<a data-ng-href="/voice/queues/view/{{queue.name}}/settings">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n						<li data-ng-class="{active: $state.is(\'main.voice.queues.view.agents\')}">\n							<a data-ng-href="/voice/queues/view/{{queue.name}}/agents">\n							<i class="icon-people"></i>\n							{{ \'APPLICATION_AGENTS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/voice/queue/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_QUEUE_SETTINGS\' | translate}}</span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_PERIODIC_ANNOUNCE\' | translate}}</a>\n					</li>\n					<li>\n						<a href="#" data-target="#tab_1_3" data-toggle="tab">{{ \'APPLICATION_ADVANCED\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n\n			<div class="portlet-body" data-ng-init="getContexts();getMohs();getSounds();">\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.general" data-ng-submit="forms.general.$valid && updateVoiceQueue()" novalidate>\n							<div class="row">\n								<div class="col-md-6">\n							<!-- START STRATEGY -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$invalid}">\n								<label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="queue.strategy" name="strategy" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n									<ui-select-choices repeat="strategy in [\'ringall\', \'leastrecent\', \'fewestcalls\', \'random\', \'rrmemory\', \'linear\', \'wrandom\', \'rrordered\'] | filter: $select.search">\n										<div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_STRATEGY\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.strategy.$touched || forms.general.$submitted) && forms.general.strategy.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n				      <!-- END STRATEGY -->\n\n							<!-- START MOH -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.musiconhold.$touched || forms.general.$submitted) && forms.general.musiconhold.$invalid}">\n								<label class="control-label">{{\'APPLICATION_MOH\' | translate}}</label>\n								<ui-select data-ng-model="queue.musiconhold" name="musiconhold" theme="bootstrap">\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n									<ui-select-choices repeat="musiconhold.name as musiconhold in voiceMohs | filter: $select.search">\n										<div ng-bind-html="musiconhold.name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_VOICE_MOH\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.musiconhold.$touched || forms.general.$submitted) && forms.general.musiconhold.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END MOH -->\n\n							<!-- START TIMEOUT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.timeout.$touched || forms.general.$submitted) && forms.general.timeout.$invalid}">\n								<label class="control-label">{{\'APPLICATION_TIMEOUT\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="number" min="0" name="timeout" placeholder="{{\'APPLICATION_TIMEOUT\' | translate}}" class="form-control" data-ng-model="queue.timeout" required/>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_TIMEOUT\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.timeout.$touched || forms.general.$submitted) && forms.general.timeout.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END TIMEOUT -->\n\n							<!-- START MAXLEN -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.maxlen.$touched || forms.general.$submitted) && forms.general.maxlen.$invalid}">\n								<label class="control-label">{{\'APPLICATION_MAXLEN\' | translate}}</label>\n								<input type="number" min="0" name="maxlen" placeholder="{{\'APPLICATION_MAXLEN\' | translate}}" class="form-control" data-ng-model="queue.maxlen" required/>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_MAXLEN\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.maxlen.$touched || forms.general.$submitted) && forms.general.maxlen.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END MAXLEN -->\n\n							<!-- START RETRY -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.retry.$touched || forms.general.$submitted) && forms.general.retry.$invalid}">\n								<label class="control-label">{{\'APPLICATION_RETRY\' | translate}}</label>\n								<input type="number" min="0" name="retry" placeholder="{{\'APPLICATION_RETRY\' | translate}}" class="form-control" data-ng-model="queue.retry" required/>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_RETRY\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.retry.$touched || forms.general.$submitted) && forms.general.retry.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END RETRY -->\n\n						</div>\n						<div class="col-md-6">\n							<!-- START WRAPUPTIME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.wrapuptime.$touched || forms.general.$submitted) && forms.general.wrapuptime.$invalid}">\n								<label class="control-label">{{\'APPLICATION_WRAPUPTIME\' | translate}}</label>\n								<input type="number" min="0" name="wrapuptime" placeholder="{{\'APPLICATION_WRAPUPTIME\' | translate}}" class="form-control" data-ng-model="queue.wrapuptime" required/>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_WRAPUPTIME\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.wrapuptime.$touched || forms.general.$submitted) && forms.general.wrapuptime.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END WRAPUPTIME -->\n\n							<!-- START WEIGHT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.weight.$touched || forms.general.$submitted) && forms.general.weight.$invalid}">\n								<label class="control-label">{{\'APPLICATION_WEIGHT\' | translate}}</label>\n								<input type="number" min="0" name="weight" placeholder="{{\'APPLICATION_WEIGHT\' | translate}}" class="form-control" data-ng-model="queue.weight" required/>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_WEIGHT\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.weight.$touched || forms.general.$submitted) && forms.general.weight.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END WEIGHT -->\n\n							<!-- START JOINEMPTY -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.joinempty.$touched || forms.general.$submitted) && forms.general.joinempty.$invalid}">\n								<label class="control-label">{{\'APPLICATION_JOINEMPTY\' | translate}}</label>\n								<ui-select multiple data-ng-model="queue.joinempty" name="joinempty" theme="bootstrap">\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\',\'no\',\'strict\',\'loose\',\'paused\',\'penalty\',\'inuse\',\'ringing\',\'unavailable\',\'invalid\',\'unknown\',\'wrapup\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_JOINEMPTY\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.joinempty.$touched || forms.general.$submitted) && forms.general.joinempty.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END JOINEMPTY -->\n\n							<!-- START LEAVEWHENEMPTY -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.leavewhenempty.$touched || forms.general.$submitted) && forms.general.leavewhenempty.$invalid}">\n								<label class="control-label">{{\'APPLICATION_LEAVEWHENEMPTY\' | translate}}</label>\n								<ui-select multiple data-ng-model="queue.leavewhenempty" name="leavewhenempty" theme="bootstrap">\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\',\'no\',\'strict\',\'loose\',\'paused\',\'penalty\',\'inuse\',\'ringing\',\'unavailable\',\'invalid\',\'unknown\',\'wrapup\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_LEAVEWHENEMPTY\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.leavewhenempty.$touched || forms.general.$submitted) && forms.general.leavewhenempty.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END LEAVEWHENEMPTY -->\n\n							<!-- START ANNOUNCE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.announce.$touched || forms.general.$submitted) && forms.general.announce.$invalid}">\n								<label class="control-label">{{\'APPLICATION_ANNOUNCE\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="queue.announce" name="announce" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n									<ui-select-choices repeat="returnAnnouncePath(announce) as announce in sounds | filter: $select.search">\n										<div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_ANNOUNCE\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.announce.$touched || forms.general.$submitted) && forms.general.announce.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END ANNOUNCE -->\n						</div>\n					</div>\n					<!-- START DESCRIPTION -->\n					<div class="form-group">\n						<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n						<textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="queue.description"></textarea>\n					</div>\n					<!-- END DESCRIPTION -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n\n					<div class="tab-pane" id="tab_1_2">\n						<form name="forms.announce" data-ng-submit="forms.announce.$valid && updateVoiceQueue()" novalidate>\n							<div class="row">\n								<div class="col-md-12">\n							<!-- START PERIODIC_ANNOUNCE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.periodic_announce.$touched || forms.announce.$submitted) && forms.announce.periodic_announce.$invalid}">\n								<label class="control-label">{{\'APPLICATION_PERIODIC_ANNOUNCE\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select multiple data-ng-model="queue.periodic_announce" name="periodic_announce" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$item.display_name}}</ui-select-match>\n									<ui-select-choices repeat="returnAnnouncePath(announce) as announce in periodicAnnounces | filter: $select.search">\n										<div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_PERIODIC_ANNOUNCE\' | translate }}\n								</span>\n								<span data-ng-show="(forms.announce.periodic_announce.$touched || forms.announce.$submitted) && forms.announce.periodic_announce.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END PERIODIC_ANNOUNCE -->\n						</div>\n					</div>\n							<div class="row">\n								<div class="col-md-6">\n							<p><h3>{{\'APPLICATION_SETTINGS\' | translate}}</h3></p>\n							<!-- START ANNOUNCE_FREQUENCY -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.announce_frequency.$touched || forms.announce.$submitted) && forms.announce.announce_frequency.$invalid}">\n								<label class="control-label">{{\'APPLICATION_ANNOUNCE_FREQUENCY\' | translate}}</label>\n								<input type="number" min="0" name="announce_frequency" placeholder="{{\'APPLICATION_ANNOUNCE_FREQUENCY\' | translate}}" class="form-control" data-ng-model="queue.announce_frequency" required/>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_ANNOUNCE_FREQUENCY\' | translate }}\n								</span>\n								<span data-ng-show="(forms.announce.announce_frequency.$touched || forms.announce.$submitted) && forms.announce.announce_frequency.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END ANNOUNCE_FREQUENCY -->\n\n							<!-- START MIN_ANNOUNCE_FREQUENCY -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.min_announce_frequency.$touched || forms.announce.$submitted) && forms.announce.min_announce_frequency.$invalid}">\n								<label class="control-label">{{\'APPLICATION_MIN_ANNOUNCE_FREQUENCY\' | translate}}</label>\n								<input type="number" min="0" name="min_announce_frequency" placeholder="{{\'APPLICATION_MIN_ANNOUNCE_FREQUENCY\' | translate}}" class="form-control" data-ng-model="queue.min_announce_frequency" required/>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_MIN_ANNOUNCE_FREQUENCY\' | translate }}\n								</span>\n								<span data-ng-show="(forms.announce.min_announce_frequency.$touched || forms.announce.$submitted) && forms.announce.min_announce_frequency.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END MIN_ANNOUNCE_FREQUENCY -->\n\n							<!-- START PERIODIC_ANNOUNCE_FREQUENCY -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.periodic_announce_frequency.$touched || forms.announce.$submitted) && forms.announce.periodic_announce_frequency.$invalid}">\n								<label class="control-label">{{\'APPLICATION_PERIODIC_ANNOUNCE_FREQUENCY\' | translate}}</label>\n								<input type="number" min="0" name="periodic_announce_frequency" placeholder="{{\'APPLICATION_PERIODIC_ANNOUNCE_FREQUENCY\' | translate}}" class="form-control" data-ng-model="queue.periodic_announce_frequency"/>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_PERIODIC_ANNOUNCE_FREQUENCY\' | translate }}\n								</span>\n								<span data-ng-show="(forms.announce.periodic_announce_frequency.$touched || forms.announce.$submitted) && forms.announce.periodic_announce_frequency.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END PERIODIC_ANNOUNCE_FREQUENCY -->\n\n							<!-- START RANDOM_PERIODIC_ANNOUNCE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.random_periodic_announce.$touched || forms.announce.$submitted) && forms.announce.random_periodic_announce.$invalid}">\n								<label class="control-label">{{\'APPLICATION_RANDOM_PERIODIC_ANNOUNCE\' | translate}}</label>\n								<ui-select data-ng-model="queue.random_periodic_announce" name="random_periodic_announce" theme="bootstrap">\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_RANDOM_PERIODIC_ANNOUNCE\' | translate }}\n								</span>\n								<span data-ng-show="(forms.announce.random_periodic_announce.$touched || forms.announce.$submitted) && forms.announce.random_periodic_announce.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END RANDOM_PERIODIC_ANNOUNCE -->\n\n							<!-- START ANNOUNCE_HOLDTIME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.announce_holdtime.$touched || forms.announce.$submitted) && forms.announce.announce_holdtime.$invalid}">\n								<label class="control-label">{{\'APPLICATION_ANNOUNCE_HOLDTIME\' | translate}}</label>\n								<ui-select data-ng-model="queue.announce_holdtime" name="announce_holdtime" theme="bootstrap">\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\',\'no\',\'once\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search"></div>\n									</ui-select-choices>\n									</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_ANNOUNCE_HOLDTIME\' | translate }}\n								</span>\n								<span data-ng-show="(forms.announce.announce_holdtime.$touched || forms.announce.$submitted) && forms.announce.announce_holdtime.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END ANNOUNCE_HOLDTIME -->\n\n							<!-- START ANNOUNCE_POSITION -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.announce_position.$touched || forms.announce.$submitted) && forms.announce.announce_position.$invalid}">\n								<label class="control-label">{{\'APPLICATION_ANNOUNCE_POSITION\' | translate}}</label>\n								<ui-select data-ng-model="queue.announce_position" name="announce_position" theme="bootstrap">\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\',\'no\',\'limit\',\'more\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_ANNOUNCE_POSITION\' | translate }}\n								</span>\n								<span data-ng-show="(forms.announce.announce_position.$touched || forms.announce.$submitted) && forms.announce.announce_position.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END ANNOUNCE_POSITION -->\n\n							<!-- START ANNOUNCE_POSITION_LIMIT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.announce_position_limit.$touched || forms.announce.$submitted) && forms.announce.announce_position_limit.$invalid}">\n								<label class="control-label">{{\'APPLICATION_ANNOUNCE_POSITION_LIMIT\' | translate}}</label>\n								<input type="number" min="0" name="announce_position_limit" placeholder="{{\'APPLICATION_ANNOUNCE_POSITION_LIMIT\' | translate}}" class="form-control" data-ng-model="queue.announce_position_limit"/>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_ANNOUNCE_POSITION_LIMIT\' | translate }}\n								</span>\n								<span data-ng-show="(forms.announce.announce_position_limit.$touched || forms.announce.$submitted) && forms.announce.announce_position_limit.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END ANNOUNCE_POSITION_LIMIT -->\n\n							<!-- START REPORTHOLDTIME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.reportholdtime.$touched || forms.announce.$submitted) && forms.announce.reportholdtime.$invalid}">\n								<label class="control-label">{{\'APPLICATION_REPORTHOLDTIME\' | translate}}</label>\n								<ui-select data-ng-model="queue.reportholdtime" name="reportholdtime" theme="bootstrap">\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_REPORTHOLDTIME\' | translate }}\n								</span>\n								<span data-ng-show="(forms.announce.reportholdtime.$touched || forms.announce.$submitted) && forms.announce.reportholdtime.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END REPORTHOLDTIME -->\n\n						</div>\n							<div class="col-md-6">\n								<p><h3>{{\'APPLICATION_SOUNDS\' | translate}}</h3></p>\n								<!-- START QUEUE_REPORTHOLD -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_reporthold.$touched || forms.announce.$submitted) && forms.announce.queue_reporthold.$invalid}">\n									<label class="control-label">{{\'APPLICATION_QUEUE_REPORTHOLD\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="queue.queue_reporthold" name="queue_reporthold" theme="bootstrap" required>\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n										<ui-select-choices repeat="returnAnnouncePath(announce) as announce in queueAnnounces | filter: $select.search">\n											<div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n										</ui-select-choices>\n									</ui-select>\n									<span class="help-block">\n										{{ \'DESCRIPTION_QUEUE_REPORTHOLD\' | translate }}\n									</span>\n									<span data-ng-show="(forms.announce.queue_reporthold.$touched || forms.announce.$submitted) && forms.announce.queue_reporthold.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END QUEUE_REPORTHOLD -->\n\n								<!-- START QUEUE_YOUARENEXT -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_youarenext.$touched || forms.announce.$submitted) && forms.announce.queue_youarenext.$invalid}">\n									<label class="control-label">{{\'APPLICATION_QUEUE_YOUARENEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="queue.queue_youarenext" name="queue_youarenext" theme="bootstrap" required>\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n										<ui-select-choices repeat="returnAnnouncePath(announce) as announce in queueAnnounces | filter: $select.search">\n											<div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n										</ui-select-choices>\n									</ui-select>\n									<span class="help-block">\n										{{ \'DESCRIPTION_QUEUE_YOUARENEXT\' | translate }}\n									</span>\n									<span data-ng-show="(forms.announce.queue_youarenext.$touched || forms.announce.$submitted) && forms.announce.queue_youarenext.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END QUEUE_YOUARENEXT -->\n\n							<!-- START QUEUE_THEREARE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_thereare.$touched || forms.announce.$submitted) && forms.announce.queue_thereare.$invalid}">\n								<label class="control-label">{{\'APPLICATION_QUEUE_THEREARE\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="queue.queue_thereare" name="queue_thereare" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n									<ui-select-choices repeat="returnAnnouncePath(announce) as announce in queueAnnounces | filter: $select.search">\n										<div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_THEREARE\' | translate }}\n								</span>\n								<span data-ng-show="(forms.announce.queue_thereare.$touched || forms.announce.$submitted) && forms.announce.queue_thereare.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END QUEUE_THEREARE -->\n\n							<!-- START QUEUE_CALLSWAITING -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_callswaiting.$touched || forms.announce.$submitted) && forms.announce.queue_callswaiting.$invalid}">\n								<label class="control-label">{{\'APPLICATION_QUEUE_CALLSWAITING\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="queue.queue_callswaiting" name="queue_callswaiting" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n									<ui-select-choices repeat="returnAnnouncePath(announce) as announce in queueAnnounces | filter: $select.search">\n										<div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_CALLSWAITING\' | translate }}\n								</span>\n								<span data-ng-show="(forms.announce.queue_callswaiting.$touched || forms.announce.$submitted) && forms.announce.queue_callswaiting.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END QUEUE_CALLSWAITING -->\n\n							<!-- START QUEUE_HOLDTIME -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_holdtime.$touched || forms.announce.$submitted) && forms.announce.queue_holdtime.$invalid}">\n								<label class="control-label">{{\'APPLICATION_QUEUE_HOLDTIME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="queue.queue_holdtime" name="queue_holdtime" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n									<ui-select-choices repeat="returnAnnouncePath(announce) as announce in queueAnnounces | filter: $select.search">\n										<div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_HOLDTIME\' | translate }}\n								</span>\n								<span data-ng-show="(forms.announce.queue_holdtime.$touched || forms.announce.$submitted) && forms.announce.queue_holdtime.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END QUEUE_HOLDTIME -->\n\n							<!-- START QUEUE_MINUTES -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_minutes.$touched || forms.announce.$submitted) && forms.announce.queue_minutes.$invalid}">\n								<label class="control-label">{{\'APPLICATION_QUEUE_MINUTES\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="queue.queue_minutes" name="queue_minutes" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n									<ui-select-choices repeat="returnAnnouncePath(announce) as announce in queueAnnounces | filter: $select.search">\n										<div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_MINUTES\' | translate }}\n								</span>\n								<span data-ng-show="(forms.announce.queue_minutes.$touched || forms.announce.$submitted) && forms.announce.queue_minutes.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END QUEUE_MINUTES -->\n\n							<!-- START QUEUE_MINUTE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_minute.$touched || forms.announce.$submitted) && forms.announce.queue_minute.$invalid}">\n								<label class="control-label">{{\'APPLICATION_QUEUE_MINUTE\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="queue.queue_minute" name="queue_minute" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n									<ui-select-choices repeat="returnAnnouncePath(announce) as announce in queueAnnounces | filter: $select.search">\n										<div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_MINUTE\' | translate }}\n								</span>\n								<span data-ng-show="(forms.announce.queue_minute.$touched || forms.announce.$submitted) && forms.announce.queue_minute.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END QUEUE_MINUTE -->\n\n							<!-- START QUEUE_SECONDS -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_seconds.$touched || forms.announce.$submitted) && forms.announce.queue_seconds.$invalid}">\n								<label class="control-label">{{\'APPLICATION_QUEUE_SECONDS\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="queue.queue_seconds" name="queue_seconds" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n									<ui-select-choices repeat="returnAnnouncePath(announce) as announce in queueAnnounces | filter: $select.search">\n										<div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_SECONDS\' | translate }}\n								</span>\n								<span data-ng-show="(forms.announce.queue_seconds.$touched || forms.announce.$submitted) && forms.announce.queue_seconds.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END QUEUE_SECONDS -->\n\n							<!-- START QUEUE_THANKYOU -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.announce.queue_thankyou.$touched || forms.announce.$submitted) && forms.announce.queue_thankyou.$invalid}">\n								<label class="control-label">{{\'APPLICATION_QUEUE_THANKYOU\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="queue.queue_thankyou" name="QUEUE_THANKYOU" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n									<ui-select-choices repeat="returnAnnouncePath(announce) as announce in queueAnnounces | filter: $select.search">\n										<div ng-bind-html="announce.display_name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_THANKYOU\' | translate }}\n								</span>\n								<span data-ng-show="(forms.announce.queue_thankyou.$touched || forms.announce.$submitted) && forms.announce.queue_thankyou.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END QUEUE_THANKYOU -->\n\n						</div>\n					</div>\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END GENERAL TAB -->\n					<!-- ADVANCED TAB -->\n					<div class="tab-pane" id="tab_1_3">\n						<form name="forms.advanced" data-ng-submit="forms.advanced.$valid && updateVoiceQueue()" novalidate>\n\n							<div class="row">\n								<div class="col-md-6">\n\n							<!-- START AUTOPAUSE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.autopause.$touched || forms.advanced.$submitted) && forms.advanced.autopause.$invalid}">\n								<label class="control-label">{{\'APPLICATION_AUTOPAUSE\' | translate}}</label>\n								<ui-select data-ng-model="queue.autopause" name="autopause" theme="bootstrap">\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\',\'no\',\'all\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_AUTOPAUSE\' | translate }}\n								</span>\n								<span data-ng-show="(forms.advanced.autopause.$touched || forms.advanced.$submitted) && forms.advanced.autopause.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END AUTOPAUSE -->\n\n							<!-- START RINGINUSE -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.ringinuse.$touched || forms.advanced.$submitted) && forms.advanced.ringinuse.$invalid}">\n								<label class="control-label">{{\'APPLICATION_RINGINUSE\' | translate}}</label>\n								<ui-select data-ng-model="queue.ringinuse" name="ringinuse" theme="bootstrap">\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_RINGINUSE\' | translate }}\n								</span>\n								<span data-ng-show="(forms.advanced.ringinuse.$touched || forms.advanced.$submitted) && forms.advanced.ringinuse.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END RINGINUSE -->\n\n							<!-- START MEMBER_DELAY -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.memberdelay.$touched || forms.advanced.$submitted) && forms.advanced.memberdelay.$invalid}">\n								<label class="control-label">{{\'APPLICATION_MEMBER_DELAY\' | translate}}</label>\n								<input type="number" min="0" name="memberdelay" placeholder="{{\'APPLICATION_MEMBER_DELAY\' | translate}}" class="form-control" data-ng-model="queue.memberdelay" required/>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_MEMBER_DELAY\' | translate }}\n								</span>\n								<span data-ng-show="(forms.advanced.memberdelay.$touched || forms.advanced.$submitted) && forms.advanced.memberdelay.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END MEMBER_DELAY -->\n						</div>\n							<div class="col-md-6">\n\n							<!-- START TIMEOUTRESTART -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.timeoutrestart.$touched || forms.advanced.$submitted) && forms.advanced.timeoutrestart.$invalid}">\n								<label class="control-label">{{\'APPLICATION_TIMEOUTRESTART\' | translate}}</label>\n								<ui-select data-ng-model="queue.timeoutrestart" name="timeoutrestart" theme="bootstrap">\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="item in [\'yes\',\'no\'] | filter: $select.search">\n										<div ng-bind-html="item | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_TIMEOUTRESTART\' | translate }}\n								</span>\n								<span data-ng-show="(forms.advanced.timeoutrestart.$touched || forms.advanced.$submitted) && forms.advanced.timeoutrestart.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END TIMEOUTRESTART -->\n\n							<!-- START MONITOR_FORMAT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.monitor_format.$touched || forms.advanced.$submitted) && forms.advanced.monitor_format.$invalid}">\n								<label class="control-label">{{\'APPLICATION_MONITOR_FORMAT\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="queue.monitor_format" name="monitor_format" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n									<ui-select-choices repeat="monFormat.value as monFormat in monitorFormats | filter: $select.search">\n										<div ng-bind-html="monFormat.name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_MONITOR_FORMAT\' | translate }}\n								</span>\n								<span data-ng-show="(forms.advanced.monitor_format.$touched || forms.advanced.$submitted) && forms.advanced.monitor_format.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END MONITOR_FORMAT -->\n\n							<!-- START CONTEXT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.advanced.context.$touched || forms.advanced.$submitted) && forms.advanced.context.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}</label>\n								<ui-select data-ng-model="queue.context" name="context" theme="bootstrap">\n									<ui-select-match allow-clear placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n									<ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n										<div ng-bind-html="context.name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_QUEUE_VOICE_CONTEXT\' | translate }}\n								</span>\n								<span data-ng-show="(forms.advanced.context.$touched || forms.advanced.$submitted) && forms.advanced.context.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END CONTEXT -->\n\n						</div>\n					</div>\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END ADVANCED TAB -->\n\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),
+a.put("app/voice/queue/wizard/wizard.html",'<div class="col-md-12">\n  <!-- BEGIN PAGE HEADER-->\n	<div class="page-bar">\n		<ul class="page-breadcrumb">\n			<li>\n				<i class="icon-rocket"></i>\n				<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-layers"></i>\n				<a href="/voice/queues/list">{{ \'APPLICATION_QUEUES\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-options"></i>\n				<a href="/voice/queues/wizard">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n			</li>\n		</ul>\n	</div>\n  <!-- END PAGE HEADER-->\n\n  <!-- BEGIN PORTLET-->\n  <div class="portlet light bordered">\n  	<div class="portlet-title">\n  		<div class="caption font-green-sharp">\n  			<i class="icon-layers font-green-sharp"></i>\n  			<span class="caption-subject">{{ \'APPLICATION_QUEUE\' | translate }} WIZARD</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n  		<wizard on-finish="createItem()">\n				<wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.queue.$valid)">\n			    <form name="forms.queue" novalidate>\n\n			      <!-- START NAME -->\n			      <div class="form-group" data-ng-class="{\'has-error\': (forms.queue.name.$touched || forms.queue.$submitted) && forms.queue.name.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n							<span data-ng-show="(forms.queue.name.$touched || forms.queue.$submitted) && forms.queue.name.$error.required" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END NAME -->\n\n			      <!-- START STRATEGY -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.queue.strategy.$touched || forms.queue.$submitted) && forms.queue.strategy.$invalid}">\n							<label class="control-label">{{\'APPLICATION_STRATEGY\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<ui-select data-ng-model="item.strategy" name="strategy" theme="bootstrap" required>\n								<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.toUpperCase()}}</ui-select-match>\n								<ui-select-choices repeat="strategy in [\'ringall\', \'leastrecent\', \'fewestcalls\', \'random\', \'rrmemory\', \'linear\', \'wrandom\', \'rrordered\'] | filter: $select.search">\n									<div ng-bind-html="strategy.toUpperCase() | highlight: $select.search"></div>\n								</ui-select-choices>\n							</ui-select>\n							<span class="help-block">\n								{{ \'DESCRIPTION_QUEUE_STRATEGY\' | translate }}\n							</span>\n							<span data-ng-show="(forms.queue.strategy.$touched || forms.queue.$submitted) && forms.queue.strategy.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n			      <!-- END STRATEGY -->\n\n						<!-- START DESCRIPTION -->\n						<div class="form-group">\n							<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n							<textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n						</div>\n						<!-- END DESCRIPTION -->\n\n\n			      <button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n			    </form>\n			  </wz-step>\n\n				<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n					<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n					<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n					<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n				</wz-step>\n  		</wizard>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),a.put("app/voice/realtime/view/agent/agent.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initAgents()">\n	<div class="col-md-12">\n	 <div ng-show="selected">Selection from a modal: {{ selected }}</div>\n		<!-- BEGIN TABLE -->\n			<table st-table="displayedGroups" st-safe-src="groups" class="table table-striped table-bordered table-hover">\n				<div class="table-responsive">\n				  <thead>\n						<tr>\n							<th colspan="10">\n								<div class="row">\n									<div class="col-md-6">\n										<ui-select class="input-xsmall" ng-model="conf.agentsByPage" theme="bootstrap" ng-disabled="disabled">\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n											<ui-select-choices repeat="agentByPage in agentsByPage | filter: $select.search">\n												<div ng-bind-html="agentByPage.name | highlight: $select.search"></div>\n											</ui-select-choices>\n										</ui-select>\n									</div>\n									<div class="col-md-6">\n										<!-- <div class="input-group input-medium pull-right">\n											<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n											<span class="input-group-addon">\n												<i class="fa fa-search"></i>\n											</span>\n										</div> -->\n									</div>\n								</div>\n							</th>\n						</tr>\n						<tr>\n							<th st-sort="memebername" colspan="3">{{ \'APPLICATION_AGENT\' | translate }}</th>\n					    <th st-sort="queue">{{ \'APPLICATION_QUEUE\' | translate }}</th>\n							<th>{{ \'APPLICATION_LAST_LOGIN\' | translate }}</th>\n							<th>{{ \'APPLICATION_LAST_PAUSE\' | translate }}</th>\n							<th>{{ \'APPLICATION_LAST_INCOMING_CALL\' | translate }}</th>\n							<th>{{ \'APPLICATION_SERVED\' | translate }}</th>\n							<th colspan="2"></th>\n					  </tr>\n				  </thead>\n					<tbody>\n				    <tr data-ng-repeat-start="group in displayedGroups">\n							<td rowspan="{{group.queues.length}}" align="center" style="vertical-align:middle">{{group.membername}}</td>\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$first" align="center">\n								<span data-ng-class="{\'icon-like font-green\': queue.lastevent != \'called\' && queue.lastevent != \'connect\' ,\'icon-bell font-yellow\': queue.lastevent == \'called\', \'icon-call-in font-red\': queue.lastevent == \'connect\'}"></span>\n							</td>\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$first" align="center">\n								<span class="icon-cup" data-ng-class="queue.paused ? \'font-red\' : \'font-green\'"></span>\n							</td>\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$first" align="center">\n								{{queue.queue}}\n							</td>\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$first" align="center">\n								<time is="relative-time" datetime="{{queue.loggedAt}}" data-ng-show="queue.logged">\n									April 1, 2014\n								</time>\n								 <span class="badge badge-empty badge-danger" data-ng-show="!queue.logged"></span>\n							</td>\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$first" align="center">\n								<time is="relative-time" datetime="{{queue.pausedAt}}" data-ng-show="queue.pausedAt">\n									April 1, 2014\n								</time>\n								<span> <strong>{{queue.paused ? \'(\' + queue.reason + \')\' : \'\'}}</strong></span>\n							</td>\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$first" align="center">\n								<time is="relative-time" datetime="{{queue.lastcall}}" data-ng-show="queue.lastcall">\n									April 1, 2014\n								</time>\n							</td>\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$first" align="center">\n								{{queue.callstaken}}\n							</td>\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$first" align="center">\n								<span data-ng-show="queue.logged" class="icon-cup pull-left" style="cursor:pointer;" ng-click="pause(null, queue)"> </span>\n								<span class="icon-close font-red pull-right" style="cursor:pointer;" ng-click="remove(null, queue)"> </span>\n							</td>\n							<td rowspan="{{group.queues.length}}" align="center" style="vertical-align:middle">\n								<span data-ng-show="group.queues.length > 1" class="icon-cup pull-left" style="cursor:pointer;" ng-click="pause(null, group.queues)"> </span>\n								<span class="icon-plus font-green" style="cursor:pointer;" ng-click="add(null, group.queues)"> </span>\n								<span data-ng-show="group.queues.length > 1" class="icon-close font-red pull-right" style="cursor:pointer;" ng-click="remove(null, group.queues)"></span>\n							</td>\n				    </tr>\n						<tr data-ng-repeat="queue in group.queues" data-ng-if="$middle">\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$middle" align="center">\n								<span data-ng-class="{\'icon-like font-green\': queue.lastevent != \'called\' && queue.lastevent != \'connect\' ,\'icon-bell font-yellow\': queue.lastevent == \'called\', \'icon-call-in font-red\': queue.lastevent == \'connect\'}"></span>\n							</td>\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$middle" align="center">\n								<span class="icon-cup" data-ng-class="queue.paused ? \'font-red\' : \'font-green\'"></span>\n							</td>\n							<td align="center">\n								{{queue.queue}}\n							</td>\n							<td align="center">\n								<time is="relative-time" datetime="{{queue.loggedAt}}" data-ng-show="queue.logged">\n									April 1, 2014\n								</time>\n								<span class="badge badge-empty badge-danger" data-ng-show="!queue.logged"></span>\n							</td>\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$middle" align="center">\n								<time is="relative-time" datetime="{{queue.pausedAt}}" data-ng-show="queue.pausedAt">\n									April 1, 2014\n								</time>\n								<span> <strong>{{queue.paused ? \'(\' + queue.reason + \')\' : \'\'}}</strong></span>\n							</td>\n							<td align="center">\n								<time is="relative-time" datetime="{{queue.lastcall}}" data-ng-show="queue.lastcall">\n									April 1, 2014\n								</time>\n							</td>\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$middle" align="center">\n								{{queue.callstaken}}\n							</td>\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$middle" align="center">\n								<span data-ng-show="queue.logged" class="icon-cup pull-left" style="cursor:pointer;" ng-click="pause(null, queue)"> </span>\n								<span class="icon-close font-red pull-right" style="cursor:pointer;" ng-click="remove(null, queue)"> </span>\n							</td>\n						</tr>\n						<tr data-ng-repeat="queue in group.queues" data-ng-if="group.queues.length > 1 && $last" data-ng-repeat-end>\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$last" align="center">\n								<span data-ng-class="{\'icon-like font-green\': queue.lastevent != \'called\' && queue.lastevent != \'connect\' ,\'icon-bell font-yellow\': queue.lastevent == \'called\', \'icon-call-in font-red\': queue.lastevent == \'connect\'}"></span>\n							</td>\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$last" align="center">\n								<span class="icon-cup" data-ng-class="queue.paused ? \'font-red\': \'font-green\'"></span>\n							</td>\n							<td align="center">\n								{{queue.queue}}\n							</td>\n							<td align="center">\n								<time is="relative-time" datetime="{{queue.loggedAt}}" data-ng-show="queue.logged">\n									April 1, 2014\n								</time>\n								<span class="badge badge-empty badge-danger" data-ng-show="!queue.logged"></span>\n							</td>\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$last" align="center">\n								<time is="relative-time" datetime="{{queue.pausedAt}}" data-ng-show="queue.pausedAt">\n									April 1, 2014\n								</time>\n								<span> <strong>{{queue.paused ? \'(\' + queue.reason + \')\' : \'\'}}</strong></span>\n							</td>\n							<td align="center">\n								<time is="relative-time" datetime="{{queue.lastcall}}" data-ng-show="queue.lastcall">\n									April 1, 2014\n								</time>\n							</td>\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$last" align="center">\n								{{queue.callstaken}}\n							</td>\n							<td data-ng-repeat="queue in group.queues" data-ng-if="$last" align="center">\n								<span data-ng-show="queue.logged" class="icon-cup pull-left" style="cursor:pointer;" ng-click="pause(null, queue)"> </span>\n								<span class="icon-close font-red pull-right" style="cursor:pointer;" ng-click="remove(null, queue)"> </span>\n							</td>\n						</tr>\n						<tr data-ng-hide="displayedGroups.length">\n							<td colspan="9" style="text-align:center;">\n								<i>No agents available</i>\n							</td>\n						</tr>\n				  </tbody>\n				  <tfoot>\n						<tr>\n							<td colspan="1">\n								<div class="input-icon right">\n									<i class="fa fa-search"></i>\n									<input st-search="membername" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_AGENT\' | translate | lowercase}}" class="form-control" type="search"/>\n								</div>\n							<td colspan="9"></td>\n					  </tr>\n				    <tr>\n				      <td colspan="10" class="text-center">\n								<div class="pagination" st-pagination st-items-by-page="conf.agentsByPage.value" st-displayed-pages="7"></div>\n				      </td>\n				    </tr>\n				  </tfoot>\n				</div>\n			</table>\n		<!-- END TABLE -->\n	</div>\n\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/voice/realtime/view/agent/pause.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_PAUSE_SELECTION\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <div class="panel panel-info">\n		<!-- Default panel contents -->\n		<div class="panel-heading">\n			<h3 class="panel-title"><span class="icon-doc"></span> Summary</h3>\n		</div>\n		<!-- List group -->\n		<ul class="list-group">\n      <li class="list-group-item" data-ng-hide="data.length">\n				 {{ \'APPLICATION_QUEUE\' | translate }}: <b class="pull-right">{{ selected.queue }}</b>\n			</li>\n      <li class="list-group-item">\n				 {{ \'APPLICATION_AGENT\' | translate }}: <b class="pull-right">{{ selected.membername }}</b>\n			</li>\n      <li class="list-group-item">\n        <div class="btn-group">\n          <ui-select ng-model="selected.item" theme="bootstrap" ng-disabled="disabled" class="btn input-xlarge pull-left">\n            <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected}}</ui-select-match>\n            <ui-select-choices repeat="item in items | filter: $select.search">\n              <div ng-bind-html="item | highlight: $select.search"></div>\n            </ui-select-choices>\n          </ui-select>\n          <button class="btn btn-success pull-right" type="button" ng-click="ok(true)" style="margin-top: 7px;">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n        </div>\n			</li>\n		</ul>\n	</div>\n  <button data-ng-show="(data | isArray) ? (data | where: {paused: true}).length : data.paused " class="btn btn-danger btn-block" type="button" ng-click="ok(false, data.queue)">Exit</button>\n</div>\n<div class="modal-footer">\n  <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/voice/realtime/view/agent/queue.modal.add.html",'<div class="modal-header" data-ng-init="initAdd()">\n  <h3 class="modal-title">{{ \'APPLICATION_QUEUE_SELECTION\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <div class="panel panel-info" data-ng-show="selected.queue">\n		<!-- Default panel contents -->\n		<div class="panel-heading">\n			<h3 class="panel-title"><span class="icon-doc"></span> Summary</h3>\n		</div>\n		<!-- List group -->\n		<ul class="list-group">\n      <li class="list-group-item">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_AGENT\' | translate}}:</label>\n					<div class="col-md-10">\n            <input type="text" placeholder="{{\'APPLICATION_AGENT\' | translate}}" class="form-control" data-ng-model="selected.membername" ng-disabled="true"/>\n					</div>\n				</div>\n      </li>\n      <li class="list-group-item" data-ng-show="queues.length">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n					<div class="col-md-10">\n            <ui-select ng-model="selected.queue" theme="bootstrap" ng-disabled="disabled">\n              <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n              <ui-select-choices repeat="queue.name as queue in queues | filter: $select.search">\n                <div ng-bind-html="queue.name | highlight: $select.search"></div>\n              </ui-select-choices>\n            </ui-select>\n					</div>\n				</div>\n			</li>\n      <li class="list-group-item">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_PENALTY\' | translate}}:</label>\n					<div class="col-md-10">\n            <input type="number" min="0" max="10" placeholder="{{\'APPLICATION_PENALTY\' | translate}}" class="form-control" data-ng-model="selected.penalty"/>\n					</div>\n				</div>\n			</li>\n      <li class="list-group-item">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_PAUSE\' | translate}}:</label>\n					<div class="col-md-10">\n            <button type="button" class="btn btn-default form-control" data-ng-model="selected.paused" btn-checkbox> {{ selected.paused ? \'APPLICATION_YES\' : \'APPLICATION_NO\' | translate }} </button>\n					</div>\n				</div>\n      </li>\n      <li class="list-group-item" data-ng-show="selected.paused">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_REASON\' | translate}}:</label>\n					<div class="col-md-10">\n            <ui-select ng-model="selected.reason" theme="bootstrap" ng-disabled="disabled">\n              <ui-select-match placeholder="{{\'APPLICATION_REASON\' | translate}}">{{$select.selected}}</ui-select-match>\n              <ui-select-choices repeat="pause in pauses | filter: $select.search">\n                <div ng-bind-html="pause | highlight: $select.search"></div>\n              </ui-select-choices>\n            </ui-select>\n					</div>\n				</div>\n			</li>\n      <li class="list-group-item">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_LOGIN\' | translate}}:</label>\n					<div class="col-md-10">\n            <button type="button" class="btn btn-default form-control" data-ng-model="selected.login" btn-checkbox> {{ selected.login ? \'APPLICATION_YES\' : \'APPLICATION_NO\' | translate }} </button>\n					</div>\n				</div>\n      </li>\n		</ul>\n    <!-- End List group -->\n  </div>\n  <div class="note note-warning" data-ng-hide="selected.queue">\n    <h4 class="block">Warning!</h4>\n    <p>\n       {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n    </p>\n  </div>\n</div>\n<div class="modal-footer">\n  <button class="btn btn-success" type="button" ng-click="okAdd()" data-ng-show="selected.queue">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n  <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/voice/realtime/view/agent/queue.modal.remove.html",'<div class="modal-header" data-ng-init="initRemove()">\n  <h3 class="modal-title">{{ \'APPLICATION_QUEUE_REMOVAL\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <div class="panel panel-info">\n		<!-- Default panel contents -->\n		<div class="panel-heading">\n			<h3 class="panel-title"><span class="icon-doc"></span> Summary</h3>\n		</div>\n		<!-- List group -->\n		<ul class="list-group">\n      <li class="list-group-item" data-ng-hide="data.length">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_AGENT\' | translate}}:</label>\n					<div class="col-md-10">\n            <input type="text" placeholder="{{\'APPLICATION_AGENT\' | translate}}" class="form-control" data-ng-model="selected.membername" ng-disabled="true"/>\n					</div>\n				</div>\n      </li>\n      <li class="list-group-item" data-ng-show="data.length">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n					<div class="col-md-10">\n            <input type="text" placeholder="{{\'APPLICATION_QUEUE\' | translate}}" class="form-control" data-ng-model="selected.queue" ng-disabled="true"/>\n					</div>\n				</div>\n      </li>\n      <li class="list-group-item">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_LOGOUT\' | translate}}:</label>\n					<div class="col-md-10">\n            <button type="button" class="btn btn-default form-control" data-ng-model="selected.logout" btn-checkbox> {{ selected.logout ? \'APPLICATION_YES\' : \'APPLICATION_NO\' | translate }} </button>\n            <span class="help-block">{{ \'MESSAGE_PERMANENT_REMOVAL_FROM_QUEUE\' | translate }}. </span>\n          </div>\n				</div>\n      </li>\n		</ul>\n	</div>\n  <button class="btn btn-danger btn-block" type="button" ng-click="okRemove()">{{ \'APPLICATION_REMOVE\' | translate }}</button>\n</div>\n<div class="modal-footer">\n  <!-- <button class="btn btn-success" type="button" ng-click="okRemove()">{{ \'APPLICATION_CONFIRM\' | translate }}</button> -->\n  <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/voice/realtime/view/areport/report.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initReport()">\n	<div class="col-md-12">\n		<!-- START TABLE -->\n		<table st-table="displayedAgents" st-safe-src="agents" class="table table-striped table-bordered table-hover">\n			<div class="table-responsive">\n			  <thead>\n					<tr>\n						<th colspan="11">\n							<div class="row">\n								<div class="col-md-6">\n									<ui-select class="input-xsmall" ng-model="conf.agentsByPage" theme="bootstrap" ng-disabled="disabled">\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n										<ui-select-choices repeat="agentByPage in agentsByPage | filter: $select.search">\n											<div ng-bind-html="agentByPage.name | highlight: $select.search"></div>\n										</ui-select-choices>\n									</ui-select>\n								</div>\n								<div class="col-md-6">\n									<div class="input-group input-medium pull-right">\n										<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n										<span class="input-group-addon">\n											<i class="fa fa-search"></i>\n										</span>\n									</div>\n								</div>\n							</div>\n						</th>\n					</tr>\n				  <tr>\n						<th></th>\n						<th st-sort="uniqueid">{{ \'APPLICATION_UNIQUEID\' | translate }}</th>\n				    <th st-sort="queue">{{ \'APPLICATION_QUEUE\' | translate }}</th>\n				    <th st-sort="membername">{{ \'APPLICATION_AGENT\' | translate }}</th>\n						<th st-sort="calleridname">{{ \'APPLICATION_CALLER\' | translate }}</th>\n						<th st-sort="agentcalledAt">{{ \'APPLICATION_CALLED_AT\' | translate }}</th>\n						<th st-sort="agentconnectAt">{{ \'APPLICATION_CONNECTED_AT\' | translate }}</th>\n						<th st-sort="agentcompleteAt">{{ \'APPLICATION_COMPLETED_AT\' | translate }}</th>\n						<th st-sort="reason">{{ \'APPLICATION_REASON\' | translate }}</th>\n						<th st-sort="holdtime">{{ \'APPLICATION_HOLDTIME\' | translate }}</th>\n				    <th st-sort="talktime">{{ \'APPLICATION_TALKTIME\' | translate }}</th>\n				  </tr>\n			  </thead>\n			  <tbody>\n			    <tr data-ng-repeat="agent in displayedAgents">\n						<td><span data-ng-class="{\'icon-call-in font-yellow\': agent.lastevent === \'called\',\n							\'icon-phone font-blue\': agent.lastevent === \'connect\',\n							\'icon-call-end font-green\': agent.lastevent === \'complete\',\n							\'icon-call-end font-red\': agent.lastevent === \'answered_elsewhere\'}"></span>\n						</td>\n						<td>{{agent.uniqueid}}</td>\n						<td>{{agent.queue}}</td>\n						<td>{{agent.destcalleridname ? agent.destcalleridname + \' [\' + agent.membername + \']\' : agent.membername }}</td>\n						<td>{{agent.calleridname ? agent.calleridname + \' [\' + agent.calleridnum + \']\' : agent.calleridnum }}</td>\n						<td>\n							<time is="relative-time" datetime="{{agent.agentcalledAt}}">\n								April 1, 2014\n							</time>\n						</td>\n						<td>\n							<time is="relative-time" datetime="{{agent.agentconnectAt}}" data-ng-show="agent.agentconnectAt">\n								April 1, 2014\n							</time>\n						</td>\n						<td>\n							<time is="relative-time" datetime="{{agent.agentcompleteAt}}" data-ng-show="agent.agentcompleteAt">\n								April 1, 2014\n							</time>\n						</td>\n						<td>\n							{{agent.reason | uppercase}}\n						</td>\n						<td>{{agent.holdtime || 0 | VoiceRealtimeViewAgentReportFilter | date:\'HH:mm:ss\'}}</td>\n			      <td>{{agent.talktime || 0 | VoiceRealtimeViewAgentReportFilter | date:\'HH:mm:ss\'}}</td>\n			    </tr>\n					<tr data-ng-hide="displayedAgents.length">\n						<td colspan="11" style="text-align:center;">\n							<i>No agents available</i>\n						</td>\n					</tr>\n			  </tbody>\n			  <tfoot>\n					<tr>\n						<td/>\n						<td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="uniqueid" data-ng-model="filters.uniqueid" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_UNIQUEID\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="queue" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_QUEUE\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="membername" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_AGENT\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="calleridnum" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_CALLER\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n						<td colspan="7"></td>\n				  </tr>\n			    <tr>\n			      <td colspan="11" class="text-center">\n							<div class="pagination" st-pagination st-items-by-page="conf.agentsByPage.value" st-displayed-pages="7"></div>\n			      </td>\n			    </tr>\n			  </tfoot>\n			</div>\n		</table>\n		<!-- END TABLE -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/voice/realtime/view/qreport/report.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initReport()">\n	<div class="col-md-12">\n		<!-- START TABLE -->\n		<table st-table="displayedQueues" st-safe-src="queues" class="table table-striped table-bordered table-hover">\n			<div class="table-responsive">\n			  <thead>\n					<tr>\n						<th colspan="10">\n							<div class="row">\n								<div class="col-md-6">\n									<ui-select class="input-xsmall" ng-model="conf.queuesByPage" theme="bootstrap" ng-disabled="disabled">\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n										<ui-select-choices repeat="queueByPage in queuesByPage | filter: $select.search">\n											<div ng-bind-html="queueByPage.name | highlight: $select.search"></div>\n										</ui-select-choices>\n									</ui-select>\n								</div>\n								<div class="col-md-6">\n									<div class="input-group input-medium pull-right">\n										<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search"/>\n										<span class="input-group-addon">\n											<i class="fa fa-search"></i>\n										</span>\n									</div>\n								</div>\n							</div>\n						</th>\n					</tr>\n				  <tr>\n						<th></th>\n						<th st-sort="uniqueid">{{ \'APPLICATION_UNIQUEID\' | translate }}</th>\n				    <th st-sort="queue">{{ \'APPLICATION_QUEUE\' | translate }}</th>\n				    <th st-sort="membername">{{ \'APPLICATION_AGENT\' | translate }}</th>\n						<th st-sort="calleridname">{{ \'APPLICATION_CALLER\' | translate }}</th>\n						<th st-sort="queuecallerjoinAt">{{ \'APPLICATION_CALLED_AT\' | translate }}</th>\n						<th st-sort="queuecallerleaveAt">{{ \'APPLICATION_CONNECTED_AT\' | translate }}</th>\n						<th st-sort="queuecallerabandonAt">{{ \'APPLICATION_ABANDONED_AT\' | translate }}</th>\n				  </tr>\n			  </thead>\n			  <tbody>\n			    <tr data-ng-repeat="queue in displayedQueues">\n						<td><span data-ng-class="{\'icon-call-in font-yellow\': queue.queuecallerjoinAt && !queue.queuecallerleaveAt,\n							\'icon-phone font-blue\': queue.queuecallerjoinAt && queue.queuecallerleaveAt,\n							\'icon-call-end font-red\': queue.queuecallerjoinAt && queue.queuecallerleaveAt && queue.queuecallerabandonAt}"></span>\n						</td>\n						<td>{{queue.uniqueid}}</td>\n						<td>{{queue.queue}}</td>\n						<td>{{queue.connectedlinename ? queue.connectedlinename + \' [\' + queue.connectedlinenum + \']\' : queue.connectedlinenum }}</td>\n						<td>{{queue.calleridname ? queue.calleridname + \' [\' + queue.calleridnum + \']\' : queue.calleridnum }}</td>\n						<td>\n							<time is="relative-time" datetime="{{queue.queuecallerjoinAt}}">\n								April 1, 2014\n							</time>\n						</td>\n						<td>\n							<time is="relative-time" datetime="{{queue.queuecallerleaveAt}}" data-ng-show="queue.queuecallerleaveAt">\n								April 1, 2014\n							</time>\n						</td>\n						<td>\n							<time is="relative-time" datetime="{{queue.queuecallerabandonAt}}" data-ng-show="queue.queuecallerabandonAt">\n								April 1, 2014\n							</time>\n						</td>\n			    </tr>\n					<tr data-ng-hide="displayedQueues.length">\n						<td colspan="10" style="text-align:center;">\n							<i>No queues available</i>\n						</td>\n					</tr>\n			  </tbody>\n			  <tfoot>\n					<tr>\n						<td/>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="uniqueid" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_UNIQUEID\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n						<td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="queue" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_QUEUE\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="connectedlinename" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_AGENT\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n				    <td>\n							<div class="input-icon right">\n								<i class="fa fa-search"></i>\n								<input st-search="calleridnum" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_CALLER\' | translate | lowercase}}" class="form-control" type="search"/>\n							</div>\n				    </td>\n						<td colspan="6"></td>\n				  </tr>\n			    <tr>\n			      <td colspan="10" class="text-center">\n							<div class="pagination" st-pagination st-items-by-page="conf.queuesByPage.value" st-displayed-pages="7"></div>\n			      </td>\n			    </tr>\n			  </tfoot>\n			</div>\n		</table>\n		<!-- END TABLE -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/voice/realtime/view/queue/pause.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_PAUSE_SELECTION\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <div class="panel panel-info">\n		<!-- Default panel contents -->\n		<div class="panel-heading">\n			<h3 class="panel-title"><span class="icon-doc"></span> Summary</h3>\n		</div>\n		<!-- List group -->\n		<ul class="list-group">\n      <li class="list-group-item">\n				 {{ \'APPLICATION_QUEUE\' | translate }}: <b class="pull-right">{{ selected.queue }}</b>\n			</li>\n      <li class="list-group-item" data-ng-hide="data.length">\n				 {{ \'APPLICATION_AGENT\' | translate }}: <b class="pull-right">{{ selected.membername }}</b>\n			</li>\n      <li class="list-group-item">\n        <div class="btn-group">\n          <ui-select ng-model="selected.item" theme="bootstrap" ng-disabled="disabled" class="btn input-xlarge pull-left">\n            <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected}}</ui-select-match>\n            <ui-select-choices repeat="item in items | filter: $select.search">\n              <div ng-bind-html="item | highlight: $select.search"></div>\n            </ui-select-choices>\n          </ui-select>\n          <button class="btn btn-success pull-right" type="button" ng-click="ok(true)" style="margin-top: 7px;">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n        </div>\n			</li>\n		</ul>\n	</div>\n  <button data-ng-show="(data | isArray) ? (data | where: {paused: true}).length : data.paused " class="btn btn-danger btn-block" type="button" ng-click="ok(false, data.queue)">Exit</button>\n</div>\n<div class="modal-footer">\n  <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/voice/realtime/view/queue/queue.add.modal.html",'<div class="modal-header" data-ng-init="initAdd()">\n  <h3 class="modal-title">{{ \'APPLICATION_QUEUE_SELECTION\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <div class="panel panel-info">\n		<!-- Default panel contents -->\n		<div class="panel-heading">\n			<h3 class="panel-title"><span class="icon-doc"></span> Summary</h3>\n		</div>\n		<!-- List group -->\n		<ul class="list-group">\n      <li class="list-group-item">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_AGENT\' | translate}}:</label>\n					<div class="col-md-10">\n            <input type="text" placeholder="{{\'APPLICATION_AGENT\' | translate}}" class="form-control" data-ng-model="selected.membername" ng-disabled="true"/>\n					</div>\n				</div>\n      </li>\n      <li class="list-group-item" data-ng-show="queues.length">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n					<div class="col-md-10">\n            <ui-select ng-model="selected.queue" theme="bootstrap" ng-disabled="disabled">\n              <ui-select-match placeholder="{{\'APPLICATION_QUEUE\' | translate}}">{{$select.selected.name}}</ui-select-match>\n              <ui-select-choices repeat="queue.name as queue in queues | filter: $select.search">\n                <div ng-bind-html="queue.name | highlight: $select.search"></div>\n              </ui-select-choices>\n            </ui-select>\n					</div>\n				</div>\n			</li>\n      <li class="list-group-item">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_PENALTY\' | translate}}:</label>\n					<div class="col-md-10">\n            <input type="number" min="0" max="10" placeholder="{{\'APPLICATION_PENALTY\' | translate}}" class="form-control" data-ng-model="selected.penalty"/>\n					</div>\n				</div>\n			</li>\n      <li class="list-group-item">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_PAUSE\' | translate}}:</label>\n					<div class="col-md-10">\n            <button type="button" class="btn btn-default form-control" data-ng-model="selected.paused" ui-btn-checkbox> {{ selected.paused ? \'APPLICATION_YES\' : \'APPLICATION_NO\' | translate }} </button>\n					</div>\n				</div>\n      </li>\n      <li class="list-group-item" data-ng-show="selected.paused">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_REASON\' | translate}}:</label>\n					<div class="col-md-10">\n            <ui-select ng-model="selected.reason" theme="bootstrap" ng-disabled="disabled">\n              <ui-select-match placeholder="{{\'APPLICATION_REASON\' | translate}}">{{$select.selected}}</ui-select-match>\n              <ui-select-choices repeat="pause in pauses | filter: $select.search">\n                <div ng-bind-html="pause | highlight: $select.search"></div>\n              </ui-select-choices>\n            </ui-select>\n					</div>\n				</div>\n			</li>\n      <li class="list-group-item">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_LOGIN\' | translate}}:</label>\n					<div class="col-md-10">\n            <button type="button" class="btn btn-default form-control" data-ng-model="selected.login" ui-btn-checkbox> {{ selected.login ? \'APPLICATION_YES\' : \'APPLICATION_NO\' | translate }} </button>\n					</div>\n				</div>\n      </li>\n		</ul>\n	</div>\n</div>\n<div class="modal-footer">\n  <button class="btn btn-success" type="button" ng-click="okAdd()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n  <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/voice/realtime/view/queue/queue.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initQueues()">\n	<div class="col-md-12">\n	 <div ng-show="selected">Selection from a modal: {{ selected }}</div>\n		<!-- BEGIN TABLE -->\n			<table st-table="displayedGroups" st-safe-src="groups" class="table table-striped table-bordered table-hover">\n				<div class="table-responsive">\n				  <thead>\n						<tr>\n							<th colspan="10">\n								<div class="row">\n									<div class="col-md-6">\n										<ui-select class="input-xsmall" ng-model="conf.agentsByPage" theme="bootstrap" ng-disabled="disabled">\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n											<ui-select-choices repeat="agentByPage in agentsByPage | filter: $select.search">\n												<div ng-bind-html="agentByPage.name | highlight: $select.search"></div>\n											</ui-select-choices>\n										</ui-select>\n									</div>\n									<div class="col-md-6">\n										<!-- <div class="input-group input-medium pull-right">\n											<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n											<span class="input-group-addon">\n												<i class="fa fa-search"></i>\n											</span>\n										</div> -->\n									</div>\n								</div>\n							</th>\n						</tr>\n						<tr>\n							<th st-sort="memebername" colspan="3">{{ \'APPLICATION_QUEUE\' | translate }}</th>\n					    <th st-sort="agent">{{ \'APPLICATION_AGENT\' | translate }}</th>\n							<th>{{ \'APPLICATION_LAST_LOGIN\' | translate }}</th>\n							<th>{{ \'APPLICATION_LAST_PAUSE\' | translate }}</th>\n							<th>{{ \'APPLICATION_LAST_INCOMING_CALL\' | translate }}</th>\n							<th>{{ \'APPLICATION_SERVED\' | translate }}</th>\n							<th colspan="2"></th>\n					  </tr>\n				  </thead>\n					<tbody>\n				    <tr data-ng-repeat-start="group in displayedGroups">\n							<td rowspan="{{group.agents.length}}" align="center" style="vertical-align:middle">{{group.queue}}</td>\n							<td data-ng-repeat="agent in group.agents" data-ng-if="$first" align="center">\n								<span data-ng-class="{\'icon-like font-green\': agent.lastevent != \'called\' && agent.lastevent != \'connect\' ,\'icon-bell font-yellow\': agent.lastevent == \'called\', \'icon-call-in font-red\': agent.lastevent == \'connect\'}"></span>\n							</td>\n							<td data-ng-repeat="agent in group.agents" data-ng-if="$first" align="center">\n								<span class="icon-cup" data-ng-class="agent.paused ? \'font-red\' : \'font-green\'"></span>\n							</td>\n							<td data-ng-repeat="agent in group.agents" data-ng-if="$first" align="center">\n								{{agent.membername}}\n							</td>\n							<td data-ng-repeat="agent in group.agents" data-ng-if="$first" align="center">\n								<time is="relative-time" datetime="{{agent.loggedAt}}" data-ng-show="agent.logged">\n									April 1, 2014\n								</time>\n								 <span class="badge badge-empty badge-danger" data-ng-show="!agent.logged"></span>\n							</td>\n							<td data-ng-repeat="agent in group.agents" data-ng-if="$first" align="center">\n								<time is="relative-time" datetime="{{agent.pausedAt}}" data-ng-show="agent.pausedAt">\n									April 1, 2014\n								</time>\n								<span> <strong>{{agent.paused ? \'(\' + agent.reason + \')\' : \'\'}}</strong></span>\n							</td>\n							<td data-ng-repeat="agent in group.agents" data-ng-if="$first" align="center">\n								<time is="relative-time" datetime="{{agent.lastcall}}" data-ng-show="agent.lastcall">\n									April 1, 2014\n								</time>\n							</td>\n							<td data-ng-repeat="agent in group.agents" data-ng-if="$first" align="center">\n								{{agent.callstaken}}\n							</td>\n							<td data-ng-repeat="agent in group.agents" data-ng-if="$first" align="center">\n								<span data-ng-show="agent.logged" class="icon-cup pull-left" style="cursor:pointer;" data-ng-click="pause(null, agent)"> </span>\n								<span class="icon-close font-red pull-right" style="cursor:pointer;" data-ng-click="remove(null, agent)"> </span>\n							</td>\n							<td rowspan="{{group.agents.length}}" align="center" style="vertical-align:middle">\n								<span data-ng-show="group.agents.length > 1" class="icon-cup pull-left" style="cursor:pointer;" data-ng-click="pause(null, group.agents)"> </span>\n								<span class="icon-plus font-green" style="cursor:pointer;" data-ng-click="add(null, group.agents)"> </span>\n								<span data-ng-show="group.agents.length > 1" class="icon-close font-red pull-right" style="cursor:pointer;" data-ng-click="remove(null, group.agents)"></span>\n							</td>\n				    </tr>\n						<tr data-ng-repeat="agent in group.agents" data-ng-if="$middle">\n							<td align="center">\n								<span data-ng-class="{\'icon-like font-green\': agent.lastevent != \'called\' && agent.lastevent != \'connect\' ,\'icon-bell font-yellow\': agent.lastevent == \'called\', \'icon-call-in font-red\': agent.lastevent == \'connect\'}"></span>\n							</td>\n							<td align="center">\n								<span class="icon-cup" data-ng-class="agent.paused ? \'font-red\' : \'font-green\'"></span>\n							</td>\n							<td align="center">\n								{{agent.membername}}\n							</td>\n							<td align="center">\n								<time is="relative-time" datetime="{{agent.loggedAt}}" data-ng-show="agent.logged">\n									April 1, 2014\n								</time>\n								<span class="badge badge-empty badge-danger" data-ng-show="!agent.logged"></span>\n							</td>\n							<td align="center">\n								<time is="relative-time" datetime="{{agent.pausedAt}}" data-ng-show="agent.pausedAt">\n									April 1, 2014\n								</time>\n								<span> <strong>{{agent.paused ? \'(\' + agent.reason + \')\' : \'\'}}</strong></span>\n							</td>\n							<td align="center">\n								<time is="relative-time" datetime="{{agent.lastcall}}" data-ng-show="agent.lastcall">\n									April 1, 2014\n								</time>\n							</td>\n							<td align="center">\n								{{agent.callstaken}}\n							</td>\n							<td align="center">\n								<span data-ng-show="agent.logged" class="icon-cup pull-left" style="cursor:pointer;" data-ng-click="pause(null, agent)"> </span>\n								<span class="icon-close font-red pull-right" style="cursor:pointer;" data-ng-click="remove(null, agent)"> </span>\n							</td>\n						</tr>\n						<tr data-ng-repeat="agent in group.agents" data-ng-if="group.agents.length > 1 && $last" data-ng-repeat-end>\n							<td align="center">\n								<span data-ng-class="{\'icon-like font-green\': agent.lastevent != \'called\' && agent.lastevent != \'connect\' ,\'icon-bell font-yellow\': agent.lastevent == \'called\', \'icon-call-in font-red\': agent.lastevent == \'connect\'}"></span>\n							</td>\n							<td align="center">\n								<span class="icon-cup" data-ng-class="agent.paused ? \'font-red\': \'font-green\'"></span>\n							</td>\n							<td align="center">\n								{{agent.membername}}\n							</td>\n							<td align="center">\n								<time is="relative-time" datetime="{{agent.loggedAt}}" data-ng-show="agent.logged">\n									April 1, 2014\n								</time>\n								<span class="badge badge-empty badge-danger" data-ng-show="!agent.logged"></span>\n							</td>\n							<td align="center">\n								<time is="relative-time" datetime="{{agent.pausedAt}}" data-ng-show="agent.pausedAt">\n									April 1, 2014\n								</time>\n								<span> <strong>{{agent.paused ? \'(\' + agent.reason + \')\' : \'\'}}</strong></span>\n							</td>\n							<td align="center">\n								<time is="relative-time" datetime="{{agent.lastcall}}" data-ng-show="agent.lastcall">\n									April 1, 2014\n								</time>\n							</td>\n							<td align="center">\n								{{agent.callstaken}}\n							</td>\n							<td align="center">\n								<span data-ng-show="agent.logged" class="icon-cup pull-left" style="cursor:pointer;" data-ng-click="pause(null, agent)"> </span>\n								<span class="icon-close font-red pull-right" style="cursor:pointer;" data-ng-click="remove(null, agent)"> </span>\n							</td>\n						</tr>\n						<tr data-ng-hide="displayedGroups.length">\n							<td colspan="9" style="text-align:center;">\n								<i>No agents available</i>\n							</td>\n						</tr>\n				  </tbody>\n				  <tfoot>\n						<tr>\n							<td colspan="1">\n								<div class="input-icon right">\n									<i class="fa fa-search"></i>\n									<input st-search="queue" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_QUEUE\' | translate | lowercase}}" class="form-control" type="search"/>\n								</div>\n							<td colspan="9"></td>\n					  </tr>\n				    <tr>\n				      <td colspan="10" class="text-center">\n								<div class="pagination" st-pagination st-items-by-page="conf.agentsByPage.value" st-displayed-pages="7"></div>\n				      </td>\n				    </tr>\n				  </tfoot>\n				</div>\n			</table>\n		<!-- END TABLE -->\n	</div>\n\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/voice/realtime/view/queue/queue.modal.add.html",'<div class="modal-header" data-ng-init="initAdd()">\n  <h3 class="modal-title">{{ \'APPLICATION_QUEUE_SELECTION\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <div class="panel panel-info" data-ng-show="selected.queue">\n		<!-- Default panel contents -->\n		<div class="panel-heading">\n			<h3 class="panel-title"><span class="icon-doc"></span> Summary</h3>\n		</div>\n		<!-- List group -->\n		<ul class="list-group">\n      <li class="list-group-item">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n					<div class="col-md-10">\n            <input type="text" placeholder="{{\'APPLICATION_QUEUE\' | translate}}" class="form-control" data-ng-model="selected.queue" ng-disabled="true"/>\n					</div>\n				</div>\n      </li>\n      <li class="list-group-item" data-ng-show="agents.length">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_AGENT\' | translate}}:</label>\n					<div class="col-md-10">\n            <ui-select ng-model="selected.agent" theme="bootstrap" ng-disabled="disabled">\n              <ui-select-match placeholder="{{\'APPLICATION_AGENT\' | translate}}">{{$select.selected.name}}</ui-select-match>\n              <ui-select-choices repeat="{name: agent.name, id: agent.id} as agent in agents | filter: $select.search">\n                <div ng-bind-html="agent.name | highlight: $select.search"></div>\n              </ui-select-choices>\n            </ui-select>\n					</div>\n				</div>\n			</li>\n      <li class="list-group-item">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_PENALTY\' | translate}}:</label>\n					<div class="col-md-10">\n            <input type="number" min="0" max="10" placeholder="{{\'APPLICATION_PENALTY\' | translate}}" class="form-control" data-ng-model="selected.penalty"/>\n					</div>\n				</div>\n			</li>\n      <li class="list-group-item">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_PAUSE\' | translate}}:</label>\n					<div class="col-md-10">\n            <button type="button" class="btn btn-default form-control" data-ng-model="selected.paused" btn-checkbox> {{ selected.paused ? \'APPLICATION_YES\' : \'APPLICATION_NO\' | translate }} </button>\n					</div>\n				</div>\n      </li>\n      <li class="list-group-item" data-ng-show="selected.paused">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_REASON\' | translate}}:</label>\n					<div class="col-md-10">\n            <ui-select ng-model="selected.reason" theme="bootstrap" ng-disabled="disabled">\n              <ui-select-match placeholder="{{\'APPLICATION_REASON\' | translate}}">{{$select.selected}}</ui-select-match>\n              <ui-select-choices repeat="pause in pauses | filter: $select.search">\n                <div ng-bind-html="pause | highlight: $select.search"></div>\n              </ui-select-choices>\n            </ui-select>\n					</div>\n				</div>\n			</li>\n      <li class="list-group-item">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_LOGIN\' | translate}}:</label>\n					<div class="col-md-10">\n            <button type="button" class="btn btn-default form-control" data-ng-model="selected.login" btn-checkbox> {{ selected.login ? \'APPLICATION_YES\' : \'APPLICATION_NO\' | translate }} </button>\n					</div>\n				</div>\n      </li>\n		</ul>\n    <!-- End List group -->\n  </div>\n  <div class="note note-warning" data-ng-hide="selected.queue">\n    <h4 class="block">Warning!</h4>\n    <p>\n       {{ \'MESSAGE_NO_QUEUES_AVAILABLE\' | translate }}\n    </p>\n  </div>\n</div>\n<div class="modal-footer">\n  <button class="btn btn-success" type="button" ng-click="okAdd()" data-ng-show="selected.queue">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n  <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/voice/realtime/view/queue/queue.modal.remove.html",'<div class="modal-header" data-ng-init="initRemove()">\n  <h3 class="modal-title">{{ \'APPLICATION_QUEUE_REMOVAL\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <div class="panel panel-info">\n		<!-- Default panel contents -->\n		<div class="panel-heading">\n			<h3 class="panel-title"><span class="icon-doc"></span> Summary</h3>\n		</div>\n		<!-- List group -->\n		<ul class="list-group">\n      <li class="list-group-item">\n        <div class="form-group row" data-ng-hide="data.length">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_AGENT\' | translate}}:</label>\n					<div class="col-md-10">\n            <input type="text" placeholder="{{\'APPLICATION_AGENT\' | translate}}" class="form-control" data-ng-model="selected.membername" ng-disabled="true"/>\n					</div>\n				</div>\n      </li>\n      <li class="list-group-item">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n					<div class="col-md-10">\n            <input type="text" placeholder="{{\'APPLICATION_QUEUE\' | translate}}" class="form-control" data-ng-model="selected.queue" ng-disabled="true"/>\n					</div>\n				</div>\n      </li>\n      <li class="list-group-item">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_LOGOUT\' | translate}}:</label>\n					<div class="col-md-10">\n            <button type="button" class="btn btn-default form-control" data-ng-model="selected.logout" btn-checkbox> {{ selected.logout ? \'APPLICATION_YES\' : \'APPLICATION_NO\' | translate }} </button>\n            <span class="help-block">{{ \'MESSAGE_PERMANENT_REMOVAL_FROM_QUEUE\' | translate }}. </span>\n          </div>\n				</div>\n      </li>\n		</ul>\n	</div>\n  <button class="btn btn-danger btn-block" type="button" ng-click="okRemove()">{{ \'APPLICATION_REMOVE\' | translate }}</button>\n</div>\n<div class="modal-footer">\n  <!-- <button class="btn btn-success" type="button" ng-click="okRemove()">{{ \'APPLICATION_CONFIRM\' | translate }}</button> -->\n  <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/voice/realtime/view/queue/queue.remove.modal.html",'<div class="modal-header" data-ng-init="initRemove()">\n  <h3 class="modal-title">{{ \'APPLICATION_QUEUE_REMOVAL\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <div class="panel panel-info">\n		<!-- Default panel contents -->\n		<div class="panel-heading">\n			<h3 class="panel-title"><span class="icon-doc"></span> Summary</h3>\n		</div>\n		<!-- List group -->\n		<ul class="list-group">\n      <li class="list-group-item">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_AGENT\' | translate}}:</label>\n					<div class="col-md-10">\n            <input type="text" placeholder="{{\'APPLICATION_AGENT\' | translate}}" class="form-control" data-ng-model="selected.membername" ng-disabled="true"/>\n					</div>\n				</div>\n      </li>\n      <li class="list-group-item" data-ng-hide="data.length">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_QUEUE\' | translate}}:</label>\n					<div class="col-md-10">\n            <input type="text" placeholder="{{\'APPLICATION_QUEUE\' | translate}}" class="form-control" data-ng-model="selected.queue" ng-disabled="true"/>\n					</div>\n				</div>\n      </li>\n      <li class="list-group-item">\n        <div class="form-group row">\n					<label class="col-md-2 control-label" style="margin-top: 7px;">{{\'APPLICATION_LOGOUT\' | translate}}:</label>\n					<div class="col-md-10">\n            <button type="button" class="btn btn-default form-control" data-ng-model="selected.logout" btn-checkbox> {{ selected.logout ? \'APPLICATION_YES\' : \'APPLICATION_NO\' | translate }} </button>\n            <span class="help-block">{{ \'MESSAGE_PERMANENT_REMOVAL_FROM_QUEUE\' | translate }}. </span>\n          </div>\n				</div>\n      </li>\n		</ul>\n	</div>\n  <button class="btn btn-danger btn-block" type="button" ng-click="okRemove()">{{ \'APPLICATION_REMOVE\' | translate }}</button>\n</div>\n<div class="modal-footer">\n  <!-- <button class="btn btn-success" type="button" ng-click="okRemove()">{{ \'APPLICATION_CONFIRM\' | translate }}</button> -->\n  <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/voice/realtime/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-energy"></i>\n					<a href="/voice/realtime/list">{{ \'APPLICATION_REALTIME\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<div>\n		    <nav class="navbar navbar-default" role="navigation">\n		        <div class="navbar-header">\n		            <button type="button" class="navbar-toggle" ng-init="navCollapsed = true" ng-click="navCollapsed = !navCollapsed">\n		                <span class="sr-only">Toggle navigation</span>\n		                <span class="icon-bar"></span>\n		                <span class="icon-bar"></span>\n		                <span class="icon-bar"></span>\n		            </button>\n		            <!-- <a class="navbar-brand" ui-sref="home">Brand</a> -->\n		        </div>\n\n		        <!-- Collect the nav links, forms, and other content for toggling -->\n		        <div class="collapse navbar-collapse" ng-class="!navCollapsed && \'in\'">\n		            <ul class="nav navbar-nav">\n		                <li dropdown>\n		                    <a href="#" dropdown-toggle>\n		                        {{ \'APPLICATION_AGENTS\' | translate }}\n		                        <b class=\'caret\'></b>\n		                    </a>\n		                    <tree tree=\'agents\'></tree>\n		                </li>\n		            </ul>\n		            <ul class="nav navbar-nav">\n		                <li dropdown>\n		                    <a href="#" dropdown-toggle>\n		                        {{ \'APPLICATION_QUEUES\' | translate }}\n		                        <b class=\'caret\'></b>\n		                    </a>\n		                    <tree tree=\'queues\'></tree>\n		                </li>\n		            </ul>\n		        </div>\n		        <!-- /.navbar-collapse -->\n		    </nav>\n		</div>\n		<div ui-view></div>\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/voice/route/inbound/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-call-in"></i>\n					<a href="/voice/routes/inbound/list">{{ \'APPLICATION_INBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-users font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_INBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="routes.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_ROUTE\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/voice/routes/inbound/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getRoutes([\'context\', \'exten\', \'app\', \'appdata\', \'description\'])" csv-header="[\'Context\', \'Exten\', \'App\', \'Appdata\', \'Description\']" field-separator=";" filename="routes_inbound.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedRoutes" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="5">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.routesByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="routeByPage in routesByPage | filter: $select.search">\n													<div ng-bind-html="routeByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(checked)" checklist-model checklist-value="id"></th>\n                <th st-sort="exten">{{ \'APPLICATION_DID\' | translate }}</th>\n								<th st-sort="context">{{ \'APPLICATION_CONTEXT\' | translate }}</th>\n						    <th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="route in displayedRoutes"  class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="routes.checked" checklist-value="route.id"></td>\n								<td>{{route.exten}}</td>\n								<td>{{route.context}}</td>\n					      <td>{{route.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/voice/routes/inbound/view/{{route.id}}/settings">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(route.exten,route.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedRoutes.length">\n								<td colspan="5" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_ROUTES_AVAILABLE\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n                <td>\n                  <div class="input-icon right">\n                    <i class="fa fa-search"></i>\n                    <input st-search="exten" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DID\' | translate | lowercase}}" class="form-control" type="search"/>\n                  </div>\n                </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="context" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_CONTEXT\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n								</td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n						    </td>\n						  </tr>\n					    <tr>\n					      <td colspan="5" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.routesByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/voice/route/inbound/view/view.application.html",'\n<div class="row" data-ng-init="initApplication(); getIntervals();">\n	<div class="col-md-12">\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_NEW_APPLICATION\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="createItem()">\n					<div class="profile-usertitle-name">\n						{{(main.app | capitalize) || \'Application\'}}\n					</div>\n	        <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.settings.$valid)">\n							<form name="forms.settings" novalidate>\n								<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n									<!-- START APP -->\n									<div class="form-group"  data-ng-class="{\'has-error\': (forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n										<ui-select data-ng-model="main.app" name="app" theme="bootstrap" required>\n					            <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n					            <ui-select-choices repeat="app.value as app in $application.applications| filter: $select.search">\n					              <div ng-bind-html="app.name | highlight: $select.search"></div>\n					            </ui-select-choices>\n					          </ui-select>\n										<span data-ng-show="(forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid && forms.settings.app.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END APP -->\n\n									<div id="Queue" class="app-settings" ng-slide-down="main.app == \'Queue\'" lazy-render duration="1">\n										<!-- START QUEUE -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n											<label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n											<ui-select data-ng-model="application.queue" name="queue" theme="bootstrap" required>\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="queue.name as queue in items | filter: $select.search">\n													<div ng-bind-html="queue.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END QUEUE -->\n\n										<!-- START OPTIONS -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n											<label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n											<ui-select multiple data-ng-model="application.app_options" theme="bootstrap" name="app_options">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($item.name)}}</ui-select-match>\n												<ui-select-choices repeat="queueOpt.value as queueOpt in $application.queueOptions | filter: $select.search">\n													{{$translate.instant(queueOpt.name)}}\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END OPTIONS -->\n\n										<!-- START URL -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n											<input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.url">\n											<span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END URL -->\n\n										<!-- START AUDIOFILE -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$invalid}">\n											<label class="control-label">{{\'APPLICATION_AUDIO_FILE\' | translate}}</label>\n											<ui-select data-ng-model="application.audiofile" name="audiofile" theme="bootstrap">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n												<ui-select-choices repeat="audio.converted_path+\'/\'+audio.save_name as audio in items2 | filter: $select.search">\n													<div ng-bind-html="audio.display_name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END AUDIOFILE -->\n\n										<!-- START TIMEOUT -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n											<input type="number" name="timeout" placeholder="" class="form-control" data-ng-model="application.timeout">\n											<span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END TIMEOUT -->\n\n									</div>\n									<div id="Playback" class="app-settings" ng-slide-down="main.app == \'Playback\'" lazy-render duration="1">\n										<!-- START AUDIOFILE -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$invalid}">\n											<label class="control-label">{{\'APPLICATION_AUDIO_FILE\' | translate}}<span class="required" aria-required="true">*</span></label>\n											<ui-select data-ng-model="application.audiofile" name="audiofile" theme="bootstrap" required>\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n												<ui-select-choices repeat="audio.converted_path+\'/\'+audio.save_name as audio in items | filter: $select.search">\n													<div ng-bind-html="audio.display_name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END AUDIOFILE -->\n\n										<!-- START OPTIONS -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n											<label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n											<ui-select data-ng-model="application.app_options" theme="bootstrap" name="app_options">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n												<ui-select-choices repeat="audioOpt.value as audioOpt in $application.audioOptions | filter: $select.search">\n													{{$translate.instant(audioOpt.name)}}\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END OPTIONS -->\n									</div>\n									<div id="Dial" class="app-settings" ng-slide-down="main.app == \'Dial\'" lazy-render duration="1">\n										<!-- START INTERFACE -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.interface.$touched || forms.settings.$submitted) && forms.settings.interface.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_TYPE\' | translate }}/{{ \'APPLICATION_IDENTIFIER\' | translate }}<span class="required" aria-required="true">*</span></label>\n											<input type="text" name="interface" placeholder="SIP/0000" class="form-control" data-ng-model="application.interface" required>\n											<span data-ng-show="(forms.settings.interface.$touched || forms.settings.$submitted) && forms.settings.interface.$invalid && forms.settings.interface.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END INTERFACE -->\n\n										<!-- START TIMEOUT -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n											<input type="number" name="timeout" placeholder="" class="form-control" data-ng-model="application.timeout">\n											<span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END TIMEOUT -->\n\n										<!-- START OPTIONS -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n											<input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="application.app_options">\n											<span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END OPTIONS -->\n\n										<!-- START URL -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n											<input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.url">\n											<span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END URL -->\n									</div>\n									<div id="AGI" class="app-settings" ng-slide-down="main.app == \'AGI\'" lazy-render duration="1">\n										<!-- START PROJECT -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.project.$invalid}">\n											<label class="control-label">{{\'APPLICATION_PROJECT\' | translate}}<span class="required" aria-required="true">*</span></label>\n											<ui-select data-ng-model="application.project" name="project" theme="bootstrap" required>\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="project.name as project in items | filter: $select.search">\n													<div ng-bind-html="project.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.project.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END PROJECT -->\n\n										<!-- START URL -->\n										<!-- <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n											<div class="input-group">\n												<input type="text" name="url" placeholder="agi://127.0.0.1/square" class="form-control" data-ng-model="application.url" data-ng-disabled="!application.urlEnabled" data-ng-required="application.urlEnabled" rpattern="/^agi:\\/\\/(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\/square$/">\n												<span class="input-group-addon">\n													<input type="checkbox" data-ng-model="application.urlEnabled">\n												</span>\n											</div>\n											<span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n											<span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.pattern" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n											</span>\n										</div> -->\n										<!-- END URL -->\n\n									</div>\n									<div id="Goto" class="app-settings" ng-slide-down="main.app == \'Goto\'" lazy-render duration="1">\n										<!-- START CONTEXT -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.context.$touched || forms.settings.$submitted) && forms.settings.context.$invalid}">\n											<label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n											<ui-select data-ng-model="application.alt_context" name="context" theme="bootstrap" required>\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="context.name as context in items | filter: $select.search">\n													<div ng-bind-html="context.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.settings.context.$touched || forms.settings.$submitted) && forms.settings.context.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END CONTEXT -->\n\n										<!-- START EXTENSION -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.extension.$touched || forms.settings.$submitted) && forms.settings.extension.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_EXTENSION\' | translate }}<span class="required" aria-required="true">*</span></label>\n											<input type="text" name="extension" placeholder="" class="form-control" data-ng-model="application.alt_extension" required>\n											<span data-ng-show="(forms.settings.extension.$touched || forms.settings.$submitted) && forms.settings.extension.$invalid && forms.settings.extension.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END EXTENSION -->\n\n										<!-- START PRIORITY -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.priority.$touched || forms.settings.$submitted) && forms.settings.priority.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_PRIORITY\' | translate }}<span class="required" aria-required="true">*</span></label>\n											<input type="number" name="priority" placeholder="" class="form-control" data-ng-model="application.alt_priority" required>\n											<span data-ng-show="(forms.settings.priority.$touched || forms.settings.$submitted) && forms.settings.priority.$invalid" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END PRIORITY -->\n									</div>\n									<div id="Hangup" class="app-settings" ng-slide-down="main.app == \'Hangup\'" lazy-render duration="1">\n										<!-- START HANGUPCAUSE -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.hangupCause.$touched || forms.settings.$submitted) && forms.settings.hangupCause.$invalid}">\n											<label class="control-label">{{\'APPLICATION_HANGUP_CAUSE\' | translate}}<span class="required" aria-required="true">*</span></label>\n											<ui-select data-ng-model="application.causecode" theme="bootstrap" name="hangupCause" required>\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n												<ui-select-choices repeat="hangupCause.value as hangupCause in $application.hangupCauses | filter: $select.search">\n													{{$translate.instant(hangupCause.name)}}\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.settings.hangupCause.$touched || forms.settings.$submitted) && forms.settings.hangupCause.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END HANGUPCAUSE -->\n									</div>\n									<div id="Set" class="app-settings" ng-slide-down="main.app == \'Set\'" lazy-render duration="1">\n										<!-- START VARIABLE -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.variable.$touched || forms.settings.$submitted) && forms.settings.variable.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_VARIABLE\' | translate }}<span class="required" aria-required="true">*</span></label>\n											<input type="text" name="variable" placeholder="" class="form-control" data-ng-model="application.variable" required>\n											<span data-ng-show="(forms.settings.variable.$touched || forms.settings.$submitted) && forms.settings.variable.$invalid && forms.settings.variable.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END VARIABLE -->\n\n										<!-- START VARVALUE -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.varvalue.$touched || forms.settings.$submitted) && forms.settings.varvalue.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_VALUE\' | translate }}<span class="required" aria-required="true">*</span></label>\n											<input type="text" name="varvalue" placeholder="" class="form-control" data-ng-model="application.value" required>\n											<span data-ng-show="(forms.settings.varvalue.$touched || forms.settings.$submitted) && forms.settings.varvalue.$invalid && forms.settings.varvalue.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END VARVALUE -->\n									</div>\n									<div id="Custom" class="app-settings" ng-slide-down="main.app == \'custom\'" lazy-render duration="1">\n\n										<!-- START CUSTOMAPP -->\n										<div class="form-group"  data-ng-class="{\'has-error\': (forms.settings.customApp.$touched || forms.settings.$submitted) && forms.settings.customApp.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_CUSTOM_APP\' | translate }}<span class="required" aria-required="true">*</span></label>\n											<input type="text" name="customApp" placeholder="{{ \'APPLICATION_CUSTOM_APP\' | translate }}" class="form-control" data-ng-model="application.customApp" required>\n											<span data-ng-show="(forms.settings.customApp.$touched || forms.settings.$submitted) && forms.settings.customApp.$invalid && forms.settings.customApp.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END CUSTOMAPP -->\n\n										<!-- START APPDATA -->\n										<div class="form-group"  data-ng-class="{\'has-error\': (forms.settings.appdata.$touched || forms.settings.$submitted) && forms.settings.appdata.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_ARGUMENTS\' | translate }}</label>\n											<input type="text" name="appdata" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}" class="form-control" data-ng-model="application.appdata">\n											<span data-ng-show="(forms.settings.appdata.$touched || forms.settings.$submitted) && forms.settings.appdata.$invalid && forms.settings.appdata.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END APPDATA -->\n									</div>\n									<div id="Voicemail" class="app-settings" ng-slide-down="main.app == \'Voicemail\'" lazy-render duration="1">\n										<!-- START VOICEMAIL -->\n										<div class="form-group"  data-ng-class="{\'has-error\': (forms.settings.voicemail.$touched || forms.settings.$submitted) && forms.settings.voicemail.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_MAILBOX\' | translate }}@{{ \'APPLICATION_CONTEXT\' | translate }}<span class="required" aria-required="true">*</span></label>\n											<input type="text" name="voicemail" placeholder="{{ \'APPLICATION_MAILBOX\' | translate }}@{{ \'APPLICATION_CONTEXT\' | translate }}" class="form-control" data-ng-model="application.mailbox" required>\n											<span data-ng-show="(forms.settings.voicemail.$touched || forms.settings.$submitted) && forms.settings.voicemail.$invalid && forms.settings.voicemail.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END VOICEMAIL -->\n									</div>\n									<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n								</form>\n								</wz-step>\n									<wz-step title="{{\'APPLICATION_INTERVAL\' | translate}}" canexit="formValidation(forms.interval.IntervalId.$valid || forms.interval.hasOwnProperty(\'t_from\') || forms.interval.intType.$modelValue === \'always\')">\n										<form name="forms.interval" novalidate>\n										<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n										<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n									<!-- START INTERVAL_TYPE -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$invalid}">\n										<label class="control-label">{{\'APPLICATION_INTERVAL_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n										<ui-select data-ng-model="interval.intType" theme="bootstrap" name="intType" required>\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n											<ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n												{{$translate.instant(intType.name)}}\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END INTERVAL_TYPE -->\n									<div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'custom\'" lazy-render duration="1">\n											<!-- START TIME -->\n											<div class="form-group">\n												<label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n												<div class="input-group input-large">\n													<fieldset class="pull-left" ng-disabled="interval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="interval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n													<div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n													<fieldset ng-disabled="interval.alwaysTime"><uib-timepicker  name="t_to" data-ng-model="interval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n													<label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="interval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label>\n												</div>\n											</div>\n											<!-- END TIME -->\n\n											<!-- START WEEKDAY -->\n											<div class="form-group">\n												<label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n												<div class="input-group input-large">\n													<ui-select data-ng-model="interval.wd_from" theme="bootstrap" name="wd_from">\n														<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n														<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n															{{$translate.instant(weekDay.name)}}\n														</ui-select-choices>\n													</ui-select>\n													<span class="input-group-addon">to</span>\n													<ui-select data-ng-model="interval.wd_to" theme="bootstrap" name="wd_to">\n														<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n														<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n															{{$translate.instant(weekDay.name)}}\n														</ui-select-choices>\n													</ui-select>\n												</div>\n											</div>\n											<!-- END WEEKDAY -->\n\n											<!-- START MONTHDAY -->\n											<div class="form-group">\n												<label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n												<div class="input-group input-large">\n													<ui-select data-ng-model="interval.md_from" theme="bootstrap" name="md_from">\n														<ui-select-match>{{$select.selected}}</ui-select-match>\n														<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n															{{monthDay}}\n														</ui-select-choices>\n													</ui-select>\n													<span class="input-group-addon">to</span>\n													<ui-select data-ng-model="interval.md_to" theme="bootstrap" name="md_to">\n														<ui-select-match>{{$select.selected}}</ui-select-match>\n														<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n															{{monthDay}}\n														</ui-select-choices>\n													</ui-select>\n												</div>\n											</div>\n											<!-- END MONTHDAY -->\n\n											<!-- START MONTH -->\n											<div class="form-group">\n												<label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n												<div class="input-group input-large">\n													<ui-select data-ng-model="interval.m_from" theme="bootstrap" name="m_from">\n														<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n														<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n															{{$translate.instant(month.name)}}\n														</ui-select-choices>\n													</ui-select>\n													<span class="input-group-addon">to</span>\n													<ui-select data-ng-model="interval.m_to" theme="bootstrap" name="m_to">\n														<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n														<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n															{{$translate.instant(month.name)}}\n														</ui-select-choices>\n													</ui-select>\n												</div>\n											</div>\n											<!-- END MONTH -->\n							</div>\n\n							<div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'list\'" lazy-render duration="1">\n\n								<!-- START INTERVALS -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$invalid}">\n									<label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="interval.IntervalId" theme="bootstrap" name="IntervalId" required>\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n										<ui-select-choices repeat="interval.id as interval in Intervals | filter: $select.search">\n											{{$translate.instant(interval.name)}}\n										</ui-select-choices>\n									</ui-select>\n									<span data-ng-show="(forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END INTERVALS -->\n\n							</div>\n								<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n								<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n							</form>\n						</wz-step>\n\n						<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n							<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n							<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n							<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n						</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/voice/route/inbound/view/view.applicationSettings.html",'\n<div class="row" data-ng-init="initApplication();getIntervals();getApplication();">\n	<div class="col-md-12">\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_APPLICATION_SETTINGS\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="updateItem()">\n					<div class="profile-usertitle-name">\n						{{(main.app | capitalize) || \'Application\'}}\n					</div>\n	        <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.settings.$valid)">\n							<form name="forms.settings" novalidate>\n\n								<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n								<div id="Queue" class="app-settings" ng-slide-down="main.app == \'Queue\'" lazy-render duration="1">\n									<!-- START QUEUE -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n										<label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n										<ui-select data-ng-model="application.queue" name="queue" theme="bootstrap" required>\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n											<ui-select-choices repeat="queue.name as queue in items | filter: $select.search">\n												<div ng-bind-html="queue.name | highlight: $select.search"></div>\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END QUEUE -->\n\n									<!-- START OPTIONS -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n										<label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n										<ui-select multiple data-ng-model="application.app_options" theme="bootstrap" name="app_options">\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($item.name)}}</ui-select-match>\n											<ui-select-choices repeat="queueOpt.value as queueOpt in $application.queueOptions | filter: $select.search">\n												{{$translate.instant(queueOpt.name)}}\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END OPTIONS -->\n\n									<!-- START URL -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n										<input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.url">\n										<span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END URL -->\n\n									<!-- START AUDIOFILE -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$invalid}">\n										<label class="control-label">{{\'APPLICATION_AUDIO_FILE\' | translate}}</label>\n										<ui-select data-ng-model="application.audiofile" name="audiofile" theme="bootstrap">\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n											<ui-select-choices repeat="audio.converted_path+\'/\'+audio.save_name as audio in items2 | filter: $select.search">\n												<div ng-bind-html="audio.display_name | highlight: $select.search"></div>\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END AUDIOFILE -->\n\n									<!-- START TIMEOUT -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n										<input type="number" name="timeout" placeholder="" class="form-control" data-ng-model="application.timeout">\n										<span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END TIMEOUT -->\n\n								</div>\n								<div id="Playback" class="app-settings" ng-slide-down="main.app == \'Playback\'" lazy-render duration="1">\n									<!-- START AUDIOFILE -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$invalid}">\n										<label class="control-label">{{\'APPLICATION_AUDIO_FILE\' | translate}}<span class="required" aria-required="true">*</span></label>\n										<ui-select data-ng-model="application.audiofile" name="audiofile" theme="bootstrap" required>\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n											<ui-select-choices repeat="audio.converted_path+\'/\'+audio.save_name as audio in items | filter: $select.search">\n												<div ng-bind-html="audio.display_name | highlight: $select.search"></div>\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END AUDIOFILE -->\n\n									<!-- START OPTIONS -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n										<label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n										<ui-select data-ng-model="application.app_options" theme="bootstrap" name="app_options">\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n											<ui-select-choices repeat="audioOpt.value as audioOpt in $application.audioOptions | filter: $select.search">\n												{{$translate.instant(audioOpt.name)}}\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END OPTIONS -->\n								</div>\n								<div id="Dial" class="app-settings" ng-slide-down="main.app == \'Dial\'" lazy-render duration="1">\n									<!-- START INTERFACE -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.interface.$touched || forms.settings.$submitted) && forms.settings.interface.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_TYPE\' | translate }}/{{ \'APPLICATION_IDENTIFIER\' | translate }}<span class="required" aria-required="true">*</span></label>\n										<input type="text" name="interface" placeholder="SIP/0000" class="form-control" data-ng-model="application.interface" required>\n										<span data-ng-show="(forms.settings.interface.$touched || forms.settings.$submitted) && forms.settings.interface.$invalid && forms.settings.interface.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END INTERFACE -->\n\n									<!-- START TIMEOUT -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n										<input type="number" name="timeout" placeholder="" class="form-control" data-ng-model="application.timeout">\n										<span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END TIMEOUT -->\n\n									<!-- START OPTIONS -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n										<input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="application.app_options">\n										<span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END OPTIONS -->\n\n									<!-- START URL -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n										<input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.url">\n										<span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END URL -->\n								</div>\n								<div id="AGI" class="app-settings" ng-slide-down="main.app == \'AGI\'" lazy-render duration="1">\n									<!-- START PROJECT -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.project.$invalid}">\n										<label class="control-label">{{\'APPLICATION_PROJECT\' | translate}}<span class="required" aria-required="true">*</span></label>\n										<ui-select data-ng-model="application.project" name="project" theme="bootstrap" required>\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n											<ui-select-choices repeat="project.name as project in items | filter: $select.search">\n												<div ng-bind-html="project.name | highlight: $select.search"></div>\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.project.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END PROJECT -->\n\n									<!-- START URL -->\n									<!-- <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n										<div class="input-group">\n											<input type="text" name="url" placeholder="agi://127.0.0.1/square" class="form-control" data-ng-model="application.url" data-ng-disabled="!application.urlEnabled" data-ng-required="application.urlEnabled" rpattern="/^agi:\\/\\/(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\/square$/">\n											<span class="input-group-addon">\n												<input type="checkbox" data-ng-model="application.urlEnabled">\n											</span>\n										</div>\n										<span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n										<span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.pattern" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n										</span>\n									</div> -->\n									<!-- END URL -->\n\n								</div>\n								<div id="Goto" class="app-settings" ng-slide-down="main.app == \'Goto\'" lazy-render duration="1">\n									<!-- START CONTEXT -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.context.$touched || forms.settings.$submitted) && forms.settings.context.$invalid}">\n										<label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n										<ui-select data-ng-model="application.alt_context" name="context" theme="bootstrap" required>\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n											<ui-select-choices repeat="context.name as context in items | filter: $select.search">\n												<div ng-bind-html="context.name | highlight: $select.search"></div>\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.settings.context.$touched || forms.settings.$submitted) && forms.settings.context.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END CONTEXT -->\n\n									<!-- START EXTENSION -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.extension.$touched || forms.settings.$submitted) && forms.settings.extension.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_EXTENSION\' | translate }}<span class="required" aria-required="true">*</span></label>\n										<input type="text" name="extension" placeholder="" class="form-control" data-ng-model="application.alt_extension" required>\n										<span data-ng-show="(forms.settings.extension.$touched || forms.settings.$submitted) && forms.settings.extension.$invalid && forms.settings.extension.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END EXTENSION -->\n\n									<!-- START PRIORITY -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.priority.$touched || forms.settings.$submitted) && forms.settings.priority.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_PRIORITY\' | translate }}<span class="required" aria-required="true">*</span></label>\n										<input type="number" name="priority" placeholder="" class="form-control" data-ng-model="application.alt_priority" required>\n										<span data-ng-show="(forms.settings.priority.$touched || forms.settings.$submitted) && forms.settings.priority.$invalid" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END PRIORITY -->\n								</div>\n								<div id="Hangup" class="app-settings" ng-slide-down="main.app == \'Hangup\'" lazy-render duration="1">\n									<!-- START HANGUPCAUSE -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.hangupCause.$touched || forms.settings.$submitted) && forms.settings.hangupCause.$invalid}">\n										<label class="control-label">{{\'APPLICATION_HANGUP_CAUSE\' | translate}}<span class="required" aria-required="true">*</span></label>\n										<ui-select data-ng-model="application.causecode" theme="bootstrap" name="hangupCause" required>\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n											<ui-select-choices repeat="hangupCause.value as hangupCause in $application.hangupCauses | filter: $select.search">\n												{{$translate.instant(hangupCause.name)}}\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.settings.hangupCause.$touched || forms.settings.$submitted) && forms.settings.hangupCause.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END HANGUPCAUSE -->\n								</div>\n								<div id="Set" class="app-settings" ng-slide-down="main.app == \'Set\'" lazy-render duration="1">\n									<!-- START VARIABLE -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.variable.$touched || forms.settings.$submitted) && forms.settings.variable.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_VARIABLE\' | translate }}<span class="required" aria-required="true">*</span></label>\n										<input type="text" name="variable" placeholder="" class="form-control" data-ng-model="application.variable" required>\n										<span data-ng-show="(forms.settings.variable.$touched || forms.settings.$submitted) && forms.settings.variable.$invalid && forms.settings.variable.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END VARIABLE -->\n\n									<!-- START VARVALUE -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.varvalue.$touched || forms.settings.$submitted) && forms.settings.varvalue.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_VALUE\' | translate }}<span class="required" aria-required="true">*</span></label>\n										<input type="text" name="varvalue" placeholder="" class="form-control" data-ng-model="application.value" required>\n										<span data-ng-show="(forms.settings.varvalue.$touched || forms.settings.$submitted) && forms.settings.varvalue.$invalid && forms.settings.varvalue.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END VARVALUE -->\n								</div>\n								<div id="Custom" class="app-settings" ng-slide-down="main.app == \'custom\'" lazy-render duration="1">\n\n									<!-- START CUSTOMAPP -->\n									<div class="form-group"  data-ng-class="{\'has-error\': (forms.settings.customApp.$touched || forms.settings.$submitted) && forms.settings.customApp.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_CUSTOM_APP\' | translate }}<span class="required" aria-required="true">*</span></label>\n										<input type="text" name="customApp" placeholder="{{ \'APPLICATION_CUSTOM_APP\' | translate }}" class="form-control" data-ng-model="application.customApp" required>\n										<span data-ng-show="(forms.settings.customApp.$touched || forms.settings.$submitted) && forms.settings.customApp.$invalid && forms.settings.customApp.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END CUSTOMAPP -->\n\n									<!-- START APPDATA -->\n									<div class="form-group"  data-ng-class="{\'has-error\': (forms.settings.appdata.$touched || forms.settings.$submitted) && forms.settings.appdata.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_ARGUMENTS\' | translate }}</label>\n										<input type="text" name="appdata" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}" class="form-control" data-ng-model="application.appdata">\n										<span data-ng-show="(forms.settings.appdata.$touched || forms.settings.$submitted) && forms.settings.appdata.$invalid && forms.settings.appdata.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END APPDATA -->\n								</div>\n								<div id="Voicemail" class="app-settings" ng-slide-down="main.app == \'Voicemail\'" lazy-render duration="1">\n									<!-- START VOICEMAIL -->\n									<div class="form-group"  data-ng-class="{\'has-error\': (forms.settings.voicemail.$touched || forms.settings.$submitted) && forms.settings.voicemail.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_MAILBOX\' | translate }}@{{ \'APPLICATION_CONTEXT\' | translate }}<span class="required" aria-required="true">*</span></label>\n										<input type="text" name="voicemail" placeholder="{{ \'APPLICATION_MAILBOX\' | translate }}@{{ \'APPLICATION_CONTEXT\' | translate }}" class="form-control" data-ng-model="application.mailbox" required>\n										<span data-ng-show="(forms.settings.voicemail.$touched || forms.settings.$submitted) && forms.settings.voicemail.$invalid && forms.settings.voicemail.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END VOICEMAIL -->\n								</div>\n								<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n							</form>\n							</wz-step>\n								<wz-step title="{{\'APPLICATION_INTERVAL\' | translate}}" canexit="formValidation(forms.interval.IntervalId.$valid || forms.interval.hasOwnProperty(\'t_from\') || forms.interval.intType.$modelValue === \'always\')">\n									<form name="forms.interval" novalidate>\n										<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n										<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n								<!-- START INTERVAL_TYPE -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$invalid}">\n									<label class="control-label">{{\'APPLICATION_INTERVAL_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="interval.intType" theme="bootstrap" name="intType" required>\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n										<ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n											{{$translate.instant(intType.name)}}\n										</ui-select-choices>\n									</ui-select>\n									<span data-ng-show="(forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END INTERVAL_TYPE -->\n								<div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'custom\'" lazy-render duration="1">\n										<!-- START TIME -->\n										<div class="form-group">\n											<label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n											<div class="input-group input-large">\n												<fieldset class="pull-left" ng-disabled="interval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="interval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n												<div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n												<fieldset ng-disabled="interval.alwaysTime"><uib-timepicker  name="t_to" data-ng-model="interval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n												<label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="interval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label>\n											</div>\n											</div>\n										<!-- END TIME -->\n\n										<!-- START WEEKDAY -->\n										<div class="form-group">\n											<label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n											<div class="input-group input-large">\n												<ui-select data-ng-model="interval.wd_from" theme="bootstrap" name="wd_from">\n													<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n													<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n														{{$translate.instant(weekDay.name)}}\n													</ui-select-choices>\n												</ui-select>\n												<span class="input-group-addon">to</span>\n												<ui-select data-ng-model="interval.wd_to" theme="bootstrap" name="wd_to">\n													<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n													<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n														{{$translate.instant(weekDay.name)}}\n													</ui-select-choices>\n												</ui-select>\n											</div>\n										</div>\n										<!-- END WEEKDAY -->\n\n										<!-- START MONTHDAY -->\n										<div class="form-group">\n											<label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n											<div class="input-group input-large">\n												<ui-select data-ng-model="interval.md_from" theme="bootstrap" name="md_from">\n													<ui-select-match>{{$select.selected}}</ui-select-match>\n													<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n														{{monthDay}}\n													</ui-select-choices>\n												</ui-select>\n												<span class="input-group-addon">to</span>\n												<ui-select data-ng-model="interval.md_to" theme="bootstrap" name="md_to">\n													<ui-select-match>{{$select.selected}}</ui-select-match>\n													<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n														{{monthDay}}\n													</ui-select-choices>\n												</ui-select>\n											</div>\n										</div>\n										<!-- END MONTHDAY -->\n\n										<!-- START MONTH -->\n										<div class="form-group">\n											<label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n											<div class="input-group input-large">\n												<ui-select data-ng-model="interval.m_from" theme="bootstrap" name="m_from">\n													<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n													<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n														{{$translate.instant(month.name)}}\n													</ui-select-choices>\n												</ui-select>\n												<span class="input-group-addon">to</span>\n												<ui-select data-ng-model="interval.m_to" theme="bootstrap" name="m_to">\n													<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n													<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n														{{$translate.instant(month.name)}}\n													</ui-select-choices>\n												</ui-select>\n											</div>\n										</div>\n										<!-- END MONTH -->\n						</div>\n\n						<div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'list\'" lazy-render duration="1">\n\n							<!-- START INTERVALS -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$invalid}">\n								<label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="interval.IntervalId" theme="bootstrap" name="IntervalId" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n									<ui-select-choices repeat="interval.id as interval in Intervals | filter: $select.search">\n										{{$translate.instant(interval.name)}}\n									</ui-select-choices>\n								</ui-select>\n								<span data-ng-show="(forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END INTERVALS -->\n\n						</div>\n						<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n						<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n							</form>\n						</wz-step>\n\n						<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n							<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n							<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n							<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n						</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/voice/route/inbound/view/view.applications.html",'<div ui-view class="profile-content">\n<div class="row" data-ng-init="getRouteApplications()">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title  tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n				</div>\n				<div class="actions">\n					<div class="btn-group">\n						<a class="btn green-jungle " href="/voice/routes/inbound/view/{{route.id}}/application" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_APPLICATION\' | translate }}\n						</a>\n					</div>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table class="table table-striped table-bordered table-hover">\n					  <thead>\n						  <tr>\n						    <th>{{ \'APPLICATION_APPLICATION\' | translate }}</th>\n								<th>{{ \'APPLICATION_ARGUMENTS\' | translate }}</th>\n						    <th>{{ \'APPLICATION_TIME\' | translate }}</th>\n								<th width="20%"></th>\n						  </tr>\n					  </thead>\n					  <tbody ui-sortable="sortableOptions" data-ng-model="routeApplications">\n					    <tr data-ng-repeat="application in routeApplications | orderBy:\'priority\'">\n								<td>{{application.app}}</td>\n								<td>{{application.appdata}}</td>\n								<td>{{application.interval}}</td>\n					      <td>\n									<a class="btn default btn-xs blue-stripe" data-ng-href="/voice/routes/inbound/view/{{route.id}}/applications/settings/{{application.id}}">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(application.app+\' application\',application.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="routeApplications.length">\n								<td colspan="5" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_AVAILABLE_APPLICATIONS\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n	</div>\n</div>\n</div>\n'),a.put("app/voice/route/inbound/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getRoute()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-call-in"></i>\n					<a href="/voice/routes/inbound/list">{{ \'APPLICATION_INBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n					<i data-ng-show="route" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="route">\n					<a href="#">{{route.exten}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/inboundroute.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{route.exten}}\n					</div>\n					<!-- <div class="profile-usertitle-job">\n						{{user.role}}\n					</div> -->\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.voice.routes.inbound.view.settings\')}">\n							<a data-ng-href="/voice/routes/inbound/view/{{route.id}}/settings">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n						<li data-ng-class="{active: $state.is(\'main.voice.routes.inbound.view.applications\') || $state.is(\'main.voice.routes.inbound.view.application\') || $state.is(\'main.voice.routes.inbound.view.applications.settings\')}">\n							<a data-ng-href="/voice/routes/inbound/view/{{route.id}}/applications">\n							<i class="icon-list"></i>\n							{{ \'APPLICATION_ACTIONS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/voice/route/inbound/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_INBOUND\' | translate}} {{ \'APPLICATION_ROUTE\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n\n			<div class="portlet-body" data-ng-init="getContexts()">\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.general" data-ng-submit="forms.general.$valid && updateRoute()" novalidate>\n\n							<!-- START EXTEN -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$invalid}">\n								<label class="control-label">{{\'APPLICATION_DID\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="exten" placeholder="{{\'APPLICATION_DID\' | translate}}" class="form-control" data-ng-model="route.exten" required/>\n								<span data-ng-show="(forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END EXTEN -->\n\n							<!-- START CONTEXT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="route.context" name="context" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n									<ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n										<div ng-bind-html="context.name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END CONTEXT -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="route.description"/></textarea>\n							</div>\n							<!-- END DESCRIPTION -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END GENERAL TAB -->\n\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/voice/route/inbound/wizard/wizard.html",'<div class="col-md-12">\n  <!-- BEGIN PAGE HEADER-->\n	<div class="page-bar">\n		<ul class="page-breadcrumb">\n			<li>\n				<i class="icon-rocket"></i>\n				<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-call-in"></i>\n				<a href="/voice/routes/inbound/list">{{ \'APPLICATION_INBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-options"></i>\n				<a href="#">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n			</li>\n		</ul>\n	</div>\n  <!-- END PAGE HEADER-->\n\n  <!-- BEGIN PORTLET-->\n  <div class="portlet light bordered" data-ng-init="getContexts()">\n  	<div class="portlet-title">\n  		<div class="caption font-green-sharp">\n  			<i class="icon-call-in font-green-sharp"></i>\n  			<span class="caption-subject">{{ \'APPLICATION_INBOUND\' | translate }} {{ \'APPLICATION_ROUTE\' | translate }} WIZARD</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n  		<wizard on-finish="createItem()">\n				<wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.route.$valid)">\n			    <form name="forms.route" novalidate>\n\n            <!-- START EXTEN -->\n            <div class="form-group" data-ng-class="{\'has-error\': (forms.route.exten.$touched || forms.route.$submitted) && forms.route.exten.$invalid}">\n              <label class="control-label">{{\'APPLICATION_DID\' | translate}}<span class="required" aria-required="true">*</span></label>\n              <input type="text" name="exten" placeholder="{{\'APPLICATION_DID\' | translate}}" class="form-control" data-ng-model="item.exten" required/>\n              <span data-ng-show="(forms.route.exten.$touched || forms.route.$submitted) && forms.route.exten.$error.required" class="help-block help-block-error">\n                <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n              </span>\n            </div>\n            <!-- END EXTEN -->\n\n						<!-- START DESCRIPTION -->\n						<div class="form-group">\n							<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n							<textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/></textarea>\n						</div>\n						<!-- END DESCRIPTION -->\n\n\n						<button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n			    </form>\n			  </wz-step>\n\n				<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n					<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n					<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n					<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n				</wz-step>\n  		</wizard>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),a.put("app/voice/route/internal/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-reload"></i>\n					<a href="/voice/routes/internal/list">{{ \'APPLICATION_INTERNAL\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-users font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_INTERNAL\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="routes.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_ROUTE\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/voice/routes/internal/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getRoutes([\'context\', \'exten\', \'app\', \'appdata\', \'description\'])" csv-header="[\'Context\', \'Exten\', \'App\', \'Appdata\', \'Description\']" field-separator=";" filename="internalRoutes.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedRoutes" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="5">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.routesByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="routeByPage in routesByPage | filter: $select.search">\n													<div ng-bind-html="routeByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(checked)" checklist-model checklist-value="id"></th>\n                <th st-sort="exten">{{ \'APPLICATION_DID\' | translate }}</th>\n								<th st-sort="context">{{ \'APPLICATION_CONTEXT\' | translate }}</th>\n						    <th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="route in displayedRoutes"  class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="routes.checked" checklist-value="route.id"></td>\n								<td>{{route.exten}}</td>\n								<td>{{route.context}}</td>\n					      <td>{{route.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/voice/routes/internal/view/{{route.id}}/settings">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(route.exten,route.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedRoutes.length">\n								<td colspan="5" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_ROUTES_AVAILABLE\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n                <td>\n                  <div class="input-icon right">\n                    <i class="fa fa-search"></i>\n                    <input st-search="exten" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DID\' | translate | lowercase}}" class="form-control" type="search"/>\n                  </div>\n                </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="context" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_CONTEXT\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n								</td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n						    </td>\n						  </tr>\n					    <tr>\n					      <td colspan="5" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.routesByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/voice/route/internal/view/view.application.html",'\n<div class="row" data-ng-init="initApplication(); getIntervals();">\n	<div class="col-md-12">\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_NEW_APPLICATION\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="createItem()">\n					<div class="profile-usertitle-name">\n						{{(main.app | capitalize) || \'Application\'}}\n					</div>\n	        <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.settings.$valid)">\n							<form name="forms.settings" novalidate>\n								<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n									<!-- START APP -->\n									<div class="form-group"  data-ng-class="{\'has-error\': (forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n										<ui-select data-ng-model="main.app" name="app" theme="bootstrap" required>\n					            <ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n					            <ui-select-choices repeat="app.value as app in $application.applications| filter: $select.search">\n					              <div ng-bind-html="app.name | highlight: $select.search"></div>\n					            </ui-select-choices>\n					          </ui-select>\n										<span data-ng-show="(forms.settings.app.$touched || forms.settings.$submitted) && forms.settings.app.$invalid && forms.settings.app.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END APP -->\n\n									<div id="Queue" class="app-settings" ng-slide-down="main.app == \'Queue\'" lazy-render duration="1">\n										<!-- START QUEUE -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n											<label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n											<ui-select data-ng-model="application.queue" name="queue" theme="bootstrap" required>\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="queue.name as queue in items | filter: $select.search">\n													<div ng-bind-html="queue.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END QUEUE -->\n\n										<!-- START OPTIONS -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n											<label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n											<ui-select multiple data-ng-model="application.app_options" theme="bootstrap" name="app_options">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($item.name)}}</ui-select-match>\n												<ui-select-choices repeat="queueOpt.value as queueOpt in $application.queueOptions | filter: $select.search">\n													{{$translate.instant(queueOpt.name)}}\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END OPTIONS -->\n\n										<!-- START URL -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n											<input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.url">\n											<span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END URL -->\n\n										<!-- START AUDIOFILE -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$invalid}">\n											<label class="control-label">{{\'APPLICATION_AUDIO_FILE\' | translate}}</label>\n											<ui-select data-ng-model="application.audiofile" name="audiofile" theme="bootstrap">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n												<ui-select-choices repeat="audio.converted_path+\'/\'+audio.save_name as audio in items2 | filter: $select.search">\n													<div ng-bind-html="audio.display_name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END AUDIOFILE -->\n\n										<!-- START TIMEOUT -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n											<input type="number" name="timeout" placeholder="" class="form-control" data-ng-model="application.timeout">\n											<span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END TIMEOUT -->\n\n									</div>\n									<div id="Playback" class="app-settings" ng-slide-down="main.app == \'Playback\'" lazy-render duration="1">\n										<!-- START AUDIOFILE -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$invalid}">\n											<label class="control-label">{{\'APPLICATION_AUDIO_FILE\' | translate}}<span class="required" aria-required="true">*</span></label>\n											<ui-select data-ng-model="application.audiofile" name="audiofile" theme="bootstrap" required>\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n												<ui-select-choices repeat="audio.converted_path+\'/\'+audio.save_name as audio in items | filter: $select.search">\n													<div ng-bind-html="audio.display_name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END AUDIOFILE -->\n\n										<!-- START OPTIONS -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n											<label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n											<ui-select data-ng-model="application.app_options" theme="bootstrap" name="app_options">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n												<ui-select-choices repeat="audioOpt.value as audioOpt in $application.audioOptions | filter: $select.search">\n													{{$translate.instant(audioOpt.name)}}\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END OPTIONS -->\n									</div>\n									<div id="Dial" class="app-settings" ng-slide-down="main.app == \'Dial\'" lazy-render duration="1">\n										<!-- START INTERFACE -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.interface.$touched || forms.settings.$submitted) && forms.settings.interface.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_TYPE\' | translate }}/{{ \'APPLICATION_IDENTIFIER\' | translate }}<span class="required" aria-required="true">*</span></label>\n											<input type="text" name="interface" placeholder="SIP/0000" class="form-control" data-ng-model="application.interface" required>\n											<span data-ng-show="(forms.settings.interface.$touched || forms.settings.$submitted) && forms.settings.interface.$invalid && forms.settings.interface.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END INTERFACE -->\n\n										<!-- START TIMEOUT -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n											<input type="number" name="timeout" placeholder="" class="form-control" data-ng-model="application.timeout">\n											<span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END TIMEOUT -->\n\n										<!-- START OPTIONS -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n											<input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="application.app_options">\n											<span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END OPTIONS -->\n\n										<!-- START URL -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n											<input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.url">\n											<span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END URL -->\n									</div>\n									<div id="AGI" class="app-settings" ng-slide-down="main.app == \'AGI\'" lazy-render duration="1">\n										<!-- START PROJECT -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.project.$invalid}">\n											<label class="control-label">{{\'APPLICATION_PROJECT\' | translate}}<span class="required" aria-required="true">*</span></label>\n											<ui-select data-ng-model="application.project" name="project" theme="bootstrap" required>\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="project.name as project in items | filter: $select.search">\n													<div ng-bind-html="project.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.project.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END PROJECT -->\n\n										<!-- START URL -->\n										<!-- <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n											<div class="input-group">\n												<input type="text" name="url" placeholder="agi://127.0.0.1/square" class="form-control" data-ng-model="application.url" data-ng-disabled="!application.urlEnabled" data-ng-required="application.urlEnabled" rpattern="/^agi:\\/\\/(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\/square$/">\n												<span class="input-group-addon">\n													<input type="checkbox" data-ng-model="application.urlEnabled">\n												</span>\n											</div>\n											<span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n											<span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.pattern" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n											</span>\n										</div> -->\n										<!-- END URL -->\n\n									</div>\n									<div id="Goto" class="app-settings" ng-slide-down="main.app == \'Goto\'" lazy-render duration="1">\n										<!-- START CONTEXT -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.context.$touched || forms.settings.$submitted) && forms.settings.context.$invalid}">\n											<label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n											<ui-select data-ng-model="application.alt_context" name="context" theme="bootstrap" required>\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="context.name as context in items | filter: $select.search">\n													<div ng-bind-html="context.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.settings.context.$touched || forms.settings.$submitted) && forms.settings.context.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END CONTEXT -->\n\n										<!-- START EXTENSION -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.extension.$touched || forms.settings.$submitted) && forms.settings.extension.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_EXTENSION\' | translate }}<span class="required" aria-required="true">*</span></label>\n											<input type="text" name="extension" placeholder="" class="form-control" data-ng-model="application.alt_extension" required>\n											<span data-ng-show="(forms.settings.extension.$touched || forms.settings.$submitted) && forms.settings.extension.$invalid && forms.settings.extension.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END EXTENSION -->\n\n										<!-- START PRIORITY -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.priority.$touched || forms.settings.$submitted) && forms.settings.priority.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_PRIORITY\' | translate }}<span class="required" aria-required="true">*</span></label>\n											<input type="number" name="priority" placeholder="" class="form-control" data-ng-model="application.alt_priority" required>\n											<span data-ng-show="(forms.settings.priority.$touched || forms.settings.$submitted) && forms.settings.priority.$invalid" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END PRIORITY -->\n									</div>\n									<div id="Hangup" class="app-settings" ng-slide-down="main.app == \'Hangup\'" lazy-render duration="1">\n										<!-- START HANGUPCAUSE -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.hangupCause.$touched || forms.settings.$submitted) && forms.settings.hangupCause.$invalid}">\n											<label class="control-label">{{\'APPLICATION_HANGUP_CAUSE\' | translate}}<span class="required" aria-required="true">*</span></label>\n											<ui-select data-ng-model="application.causecode" theme="bootstrap" name="hangupCause" required>\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n												<ui-select-choices repeat="hangupCause.value as hangupCause in $application.hangupCauses | filter: $select.search">\n													{{$translate.instant(hangupCause.name)}}\n												</ui-select-choices>\n											</ui-select>\n											<span data-ng-show="(forms.settings.hangupCause.$touched || forms.settings.$submitted) && forms.settings.hangupCause.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END HANGUPCAUSE -->\n									</div>\n									<div id="Set" class="app-settings" ng-slide-down="main.app == \'Set\'" lazy-render duration="1">\n										<!-- START VARIABLE -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.variable.$touched || forms.settings.$submitted) && forms.settings.variable.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_VARIABLE\' | translate }}<span class="required" aria-required="true">*</span></label>\n											<input type="text" name="variable" placeholder="" class="form-control" data-ng-model="application.variable" required>\n											<span data-ng-show="(forms.settings.variable.$touched || forms.settings.$submitted) && forms.settings.variable.$invalid && forms.settings.variable.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END VARIABLE -->\n\n										<!-- START VARVALUE -->\n										<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.varvalue.$touched || forms.settings.$submitted) && forms.settings.varvalue.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_VALUE\' | translate }}<span class="required" aria-required="true">*</span></label>\n											<input type="text" name="varvalue" placeholder="" class="form-control" data-ng-model="application.value" required>\n											<span data-ng-show="(forms.settings.varvalue.$touched || forms.settings.$submitted) && forms.settings.varvalue.$invalid && forms.settings.varvalue.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END VARVALUE -->\n									</div>\n									<div id="Custom" class="app-settings" ng-slide-down="main.app == \'custom\'" lazy-render duration="1">\n\n										<!-- START CUSTOMAPP -->\n										<div class="form-group"  data-ng-class="{\'has-error\': (forms.settings.customApp.$touched || forms.settings.$submitted) && forms.settings.customApp.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_CUSTOM_APP\' | translate }}<span class="required" aria-required="true">*</span></label>\n											<input type="text" name="customApp" placeholder="{{ \'APPLICATION_CUSTOM_APP\' | translate }}" class="form-control" data-ng-model="application.customApp" required>\n											<span data-ng-show="(forms.settings.customApp.$touched || forms.settings.$submitted) && forms.settings.customApp.$invalid && forms.settings.customApp.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END CUSTOMAPP -->\n\n										<!-- START APPDATA -->\n										<div class="form-group"  data-ng-class="{\'has-error\': (forms.settings.appdata.$touched || forms.settings.$submitted) && forms.settings.appdata.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_ARGUMENTS\' | translate }}</label>\n											<input type="text" name="appdata" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}" class="form-control" data-ng-model="application.appdata">\n											<span data-ng-show="(forms.settings.appdata.$touched || forms.settings.$submitted) && forms.settings.appdata.$invalid && forms.settings.appdata.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END APPDATA -->\n									</div>\n									<div id="Voicemail" class="app-settings" ng-slide-down="main.app == \'Voicemail\'" lazy-render duration="1">\n										<!-- START VOICEMAIL -->\n										<div class="form-group"  data-ng-class="{\'has-error\': (forms.settings.voicemail.$touched || forms.settings.$submitted) && forms.settings.voicemail.$invalid}">\n											<label class="control-label">{{ \'APPLICATION_MAILBOX\' | translate }}@{{ \'APPLICATION_CONTEXT\' | translate }}<span class="required" aria-required="true">*</span></label>\n											<input type="text" name="voicemail" placeholder="{{ \'APPLICATION_MAILBOX\' | translate }}@{{ \'APPLICATION_CONTEXT\' | translate }}" class="form-control" data-ng-model="application.mailbox" required>\n											<span data-ng-show="(forms.settings.voicemail.$touched || forms.settings.$submitted) && forms.settings.voicemail.$invalid && forms.settings.voicemail.$error.required" class="help-block help-block-error">\n												<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n											</span>\n										</div>\n										<!-- END VOICEMAIL -->\n									</div>\n									<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n								</form>\n								</wz-step>\n									<wz-step title="{{\'APPLICATION_INTERVAL\' | translate}}" canexit="formValidation(forms.interval.IntervalId.$valid || forms.interval.hasOwnProperty(\'t_from\') || forms.interval.intType.$modelValue === \'always\')">\n										<form name="forms.interval" novalidate>\n											<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n											<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n											<!-- START INTERVAL_TYPE -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$invalid}">\n										<label class="control-label">{{\'APPLICATION_INTERVAL_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n										<ui-select data-ng-model="interval.intType" theme="bootstrap" name="intType" required>\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n											<ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n												{{$translate.instant(intType.name)}}\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END INTERVAL_TYPE -->\n									<div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'custom\'" lazy-render duration="1">\n											<!-- START TIME -->\n											<div class="form-group">\n												<label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n												<div class="input-group input-large">\n													<fieldset class="pull-left" ng-disabled="interval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="interval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n													<div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n													<fieldset ng-disabled="interval.alwaysTime"><uib-timepicker  name="t_to" data-ng-model="interval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n													<label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="interval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label>\n												</div>\n											</div>\n											<!-- END TIME -->\n\n											<!-- START WEEKDAY -->\n											<div class="form-group">\n												<label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n												<div class="input-group input-large">\n													<ui-select data-ng-model="interval.wd_from" theme="bootstrap" name="wd_from">\n														<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n														<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n															{{$translate.instant(weekDay.name)}}\n														</ui-select-choices>\n													</ui-select>\n													<span class="input-group-addon">to</span>\n													<ui-select data-ng-model="interval.wd_to" theme="bootstrap" name="wd_to">\n														<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n														<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n															{{$translate.instant(weekDay.name)}}\n														</ui-select-choices>\n													</ui-select>\n												</div>\n											</div>\n											<!-- END WEEKDAY -->\n\n											<!-- START MONTHDAY -->\n											<div class="form-group">\n												<label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n												<div class="input-group input-large">\n													<ui-select data-ng-model="interval.md_from" theme="bootstrap" name="md_from">\n														<ui-select-match>{{$select.selected}}</ui-select-match>\n														<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n															{{monthDay}}\n														</ui-select-choices>\n													</ui-select>\n													<span class="input-group-addon">to</span>\n													<ui-select data-ng-model="interval.md_to" theme="bootstrap" name="md_to">\n														<ui-select-match>{{$select.selected}}</ui-select-match>\n														<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n															{{monthDay}}\n														</ui-select-choices>\n													</ui-select>\n												</div>\n											</div>\n											<!-- END MONTHDAY -->\n\n											<!-- START MONTH -->\n											<div class="form-group">\n												<label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n												<div class="input-group input-large">\n													<ui-select data-ng-model="interval.m_from" theme="bootstrap" name="m_from">\n														<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n														<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n															{{$translate.instant(month.name)}}\n														</ui-select-choices>\n													</ui-select>\n													<span class="input-group-addon">to</span>\n													<ui-select data-ng-model="interval.m_to" theme="bootstrap" name="m_to">\n														<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n														<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n															{{$translate.instant(month.name)}}\n														</ui-select-choices>\n													</ui-select>\n												</div>\n											</div>\n											<!-- END MONTH -->\n							</div>\n\n							<div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'list\'" lazy-render duration="1">\n\n								<!-- START INTERVALS -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$invalid}">\n									<label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="interval.IntervalId" theme="bootstrap" name="IntervalId" required>\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n										<ui-select-choices repeat="interval.id as interval in Intervals | filter: $select.search">\n											{{$translate.instant(interval.name)}}\n										</ui-select-choices>\n									</ui-select>\n									<span data-ng-show="(forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END INTERVALS -->\n\n							</div>\n							<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n							<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n						</form>\n						</wz-step>\n\n						<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n							<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n							<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n							<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n						</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/voice/route/internal/view/view.applicationSettings.html",'\n<div class="row" data-ng-init="initApplication();getIntervals();getApplication();">\n	<div class="col-md-12">\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_APPLICATION_SETTINGS\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="updateItem()">\n					<div class="profile-usertitle-name">\n						{{(main.app | capitalize) || \'Application\'}}\n					</div>\n	        <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.settings.$valid)">\n							<form name="forms.settings" novalidate>\n\n								<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n								<div id="Queue" class="app-settings" ng-slide-down="main.app == \'Queue\'" lazy-render duration="1">\n									<!-- START QUEUE -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$invalid}">\n										<label class="control-label">{{\'APPLICATION_QUEUE\' | translate}}<span class="required" aria-required="true">*</span></label>\n										<ui-select data-ng-model="application.queue" name="queue" theme="bootstrap" required>\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n											<ui-select-choices repeat="queue.name as queue in items | filter: $select.search">\n												<div ng-bind-html="queue.name | highlight: $select.search"></div>\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.settings.queue.$touched || forms.settings.$submitted) && forms.settings.queue.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END QUEUE -->\n\n									<!-- START OPTIONS -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n										<label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n										<ui-select multiple data-ng-model="application.app_options" theme="bootstrap" name="app_options">\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($item.name)}}</ui-select-match>\n											<ui-select-choices repeat="queueOpt.value as queueOpt in $application.queueOptions | filter: $select.search">\n												{{$translate.instant(queueOpt.name)}}\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END OPTIONS -->\n\n									<!-- START URL -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n										<input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.url">\n										<span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END URL -->\n\n									<!-- START AUDIOFILE -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$invalid}">\n										<label class="control-label">{{\'APPLICATION_AUDIO_FILE\' | translate}}</label>\n										<ui-select data-ng-model="application.audiofile" name="audiofile" theme="bootstrap">\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n											<ui-select-choices repeat="audio.converted_path+\'/\'+audio.save_name as audio in items2 | filter: $select.search">\n												<div ng-bind-html="audio.display_name | highlight: $select.search"></div>\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END AUDIOFILE -->\n\n									<!-- START TIMEOUT -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n										<input type="number" name="timeout" placeholder="" class="form-control" data-ng-model="application.timeout">\n										<span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END TIMEOUT -->\n\n								</div>\n								<div id="Playback" class="app-settings" ng-slide-down="main.app == \'Playback\'" lazy-render duration="1">\n									<!-- START AUDIOFILE -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$invalid}">\n										<label class="control-label">{{\'APPLICATION_AUDIO_FILE\' | translate}}<span class="required" aria-required="true">*</span></label>\n										<ui-select data-ng-model="application.audiofile" name="audiofile" theme="bootstrap" required>\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.display_name}}</ui-select-match>\n											<ui-select-choices repeat="audio.converted_path+\'/\'+audio.save_name as audio in items | filter: $select.search">\n												<div ng-bind-html="audio.display_name | highlight: $select.search"></div>\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.settings.audiofile.$touched || forms.settings.$submitted) && forms.settings.audiofile.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END AUDIOFILE -->\n\n									<!-- START OPTIONS -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n										<label class="control-label">{{\'APPLICATION_OPTIONS\' | translate}}</label>\n										<ui-select data-ng-model="application.app_options" theme="bootstrap" name="app_options">\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n											<ui-select-choices repeat="audioOpt.value as audioOpt in $application.audioOptions | filter: $select.search">\n												{{$translate.instant(audioOpt.name)}}\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END OPTIONS -->\n								</div>\n								<div id="Dial" class="app-settings" ng-slide-down="main.app == \'Dial\'" lazy-render duration="1">\n									<!-- START INTERFACE -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.interface.$touched || forms.settings.$submitted) && forms.settings.interface.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_TYPE\' | translate }}/{{ \'APPLICATION_IDENTIFIER\' | translate }}<span class="required" aria-required="true">*</span></label>\n										<input type="text" name="interface" placeholder="SIP/0000" class="form-control" data-ng-model="application.interface" required>\n										<span data-ng-show="(forms.settings.interface.$touched || forms.settings.$submitted) && forms.settings.interface.$invalid && forms.settings.interface.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END INTERFACE -->\n\n									<!-- START TIMEOUT -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_TIMEOUT\' | translate }}</label>\n										<input type="number" name="timeout" placeholder="" class="form-control" data-ng-model="application.timeout">\n										<span data-ng-show="(forms.settings.timeout.$touched || forms.settings.$submitted) && forms.settings.timeout.$invalid && forms.settings.timeout.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END TIMEOUT -->\n\n									<!-- START OPTIONS -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_OPTIONS\' | translate }}</label>\n										<input type="text" name="app_options" placeholder="" class="form-control" data-ng-model="application.app_options">\n										<span data-ng-show="(forms.settings.app_options.$touched || forms.settings.$submitted) && forms.settings.app_options.$invalid && forms.settings.app_options.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END OPTIONS -->\n\n									<!-- START URL -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n										<input type="text" name="url" placeholder="{{ \'APPLICATION_URL\' | translate }}" class="form-control" data-ng-model="application.url">\n										<span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END URL -->\n								</div>\n								<div id="AGI" class="app-settings" ng-slide-down="main.app == \'AGI\'" lazy-render duration="1">\n									<!-- START PROJECT -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.project.$invalid}">\n										<label class="control-label">{{\'APPLICATION_PROJECT\' | translate}}<span class="required" aria-required="true">*</span></label>\n										<ui-select data-ng-model="application.project" name="project" theme="bootstrap" required>\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n											<ui-select-choices repeat="project.name as project in items | filter: $select.search">\n												<div ng-bind-html="project.name | highlight: $select.search"></div>\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.settings.project.$touched || forms.settings.$submitted) && forms.settings.project.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END PROJECT -->\n\n									<!-- START URL -->\n									<!-- <div class="form-group" data-ng-class="{\'has-error\': (forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_URL\' | translate }}</label>\n										<div class="input-group">\n											<input type="text" name="url" placeholder="agi://127.0.0.1/square" class="form-control" data-ng-model="application.url" data-ng-disabled="!application.urlEnabled" data-ng-required="application.urlEnabled" rpattern="/^agi:\\/\\/(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\/square$/">\n											<span class="input-group-addon">\n												<input type="checkbox" data-ng-model="application.urlEnabled">\n											</span>\n										</div>\n										<span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n										<span data-ng-show="(forms.settings.url.$touched || forms.settings.$submitted) && forms.settings.url.$invalid && forms.settings.url.$error.pattern" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_FORMAT\' | translate}}.\n										</span>\n									</div> -->\n									<!-- END URL -->\n\n								</div>\n								<div id="Goto" class="app-settings" ng-slide-down="main.app == \'Goto\'" lazy-render duration="1">\n									<!-- START CONTEXT -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.context.$touched || forms.settings.$submitted) && forms.settings.context.$invalid}">\n										<label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n										<ui-select data-ng-model="application.alt_context" name="context" theme="bootstrap" required>\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n											<ui-select-choices repeat="context.name as context in items | filter: $select.search">\n												<div ng-bind-html="context.name | highlight: $select.search"></div>\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.settings.context.$touched || forms.settings.$submitted) && forms.settings.context.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END CONTEXT -->\n\n									<!-- START EXTENSION -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.extension.$touched || forms.settings.$submitted) && forms.settings.extension.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_EXTENSION\' | translate }}<span class="required" aria-required="true">*</span></label>\n										<input type="text" name="extension" placeholder="" class="form-control" data-ng-model="application.alt_extension" required>\n										<span data-ng-show="(forms.settings.extension.$touched || forms.settings.$submitted) && forms.settings.extension.$invalid && forms.settings.extension.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END EXTENSION -->\n\n									<!-- START PRIORITY -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.priority.$touched || forms.settings.$submitted) && forms.settings.priority.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_PRIORITY\' | translate }}<span class="required" aria-required="true">*</span></label>\n										<input type="number" name="priority" placeholder="" class="form-control" data-ng-model="application.alt_priority" required>\n										<span data-ng-show="(forms.settings.priority.$touched || forms.settings.$submitted) && forms.settings.priority.$invalid" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END PRIORITY -->\n								</div>\n								<div id="Hangup" class="app-settings" ng-slide-down="main.app == \'Hangup\'" lazy-render duration="1">\n									<!-- START HANGUPCAUSE -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.hangupCause.$touched || forms.settings.$submitted) && forms.settings.hangupCause.$invalid}">\n										<label class="control-label">{{\'APPLICATION_HANGUP_CAUSE\' | translate}}<span class="required" aria-required="true">*</span></label>\n										<ui-select data-ng-model="application.causecode" theme="bootstrap" name="hangupCause" required>\n											<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n											<ui-select-choices repeat="hangupCause.value as hangupCause in $application.hangupCauses | filter: $select.search">\n												{{$translate.instant(hangupCause.name)}}\n											</ui-select-choices>\n										</ui-select>\n										<span data-ng-show="(forms.settings.hangupCause.$touched || forms.settings.$submitted) && forms.settings.hangupCause.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END HANGUPCAUSE -->\n								</div>\n								<div id="Set" class="app-settings" ng-slide-down="main.app == \'Set\'" lazy-render duration="1">\n									<!-- START VARIABLE -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.variable.$touched || forms.settings.$submitted) && forms.settings.variable.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_VARIABLE\' | translate }}<span class="required" aria-required="true">*</span></label>\n										<input type="text" name="variable" placeholder="" class="form-control" data-ng-model="application.variable" required>\n										<span data-ng-show="(forms.settings.variable.$touched || forms.settings.$submitted) && forms.settings.variable.$invalid && forms.settings.variable.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END VARIABLE -->\n\n									<!-- START VARVALUE -->\n									<div class="form-group" data-ng-class="{\'has-error\': (forms.settings.varvalue.$touched || forms.settings.$submitted) && forms.settings.varvalue.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_VALUE\' | translate }}<span class="required" aria-required="true">*</span></label>\n										<input type="text" name="varvalue" placeholder="" class="form-control" data-ng-model="application.value" required>\n										<span data-ng-show="(forms.settings.varvalue.$touched || forms.settings.$submitted) && forms.settings.varvalue.$invalid && forms.settings.varvalue.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END VARVALUE -->\n								</div>\n								<div id="Custom" class="app-settings" ng-slide-down="main.app == \'custom\'" lazy-render duration="1">\n\n									<!-- START CUSTOMAPP -->\n									<div class="form-group"  data-ng-class="{\'has-error\': (forms.settings.customApp.$touched || forms.settings.$submitted) && forms.settings.customApp.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_CUSTOM_APP\' | translate }}<span class="required" aria-required="true">*</span></label>\n										<input type="text" name="customApp" placeholder="{{ \'APPLICATION_CUSTOM_APP\' | translate }}" class="form-control" data-ng-model="application.customApp" required>\n										<span data-ng-show="(forms.settings.customApp.$touched || forms.settings.$submitted) && forms.settings.customApp.$invalid && forms.settings.customApp.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END CUSTOMAPP -->\n\n									<!-- START APPDATA -->\n									<div class="form-group"  data-ng-class="{\'has-error\': (forms.settings.appdata.$touched || forms.settings.$submitted) && forms.settings.appdata.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_ARGUMENTS\' | translate }}</label>\n										<input type="text" name="appdata" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}" class="form-control" data-ng-model="application.appdata">\n										<span data-ng-show="(forms.settings.appdata.$touched || forms.settings.$submitted) && forms.settings.appdata.$invalid && forms.settings.appdata.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END APPDATA -->\n								</div>\n								<div id="Voicemail" class="app-settings" ng-slide-down="main.app == \'Voicemail\'" lazy-render duration="1">\n									<!-- START VOICEMAIL -->\n									<div class="form-group"  data-ng-class="{\'has-error\': (forms.settings.voicemail.$touched || forms.settings.$submitted) && forms.settings.voicemail.$invalid}">\n										<label class="control-label">{{ \'APPLICATION_MAILBOX\' | translate }}@{{ \'APPLICATION_CONTEXT\' | translate }}<span class="required" aria-required="true">*</span></label>\n										<input type="text" name="voicemail" placeholder="{{ \'APPLICATION_MAILBOX\' | translate }}@{{ \'APPLICATION_CONTEXT\' | translate }}" class="form-control" data-ng-model="application.mailbox" required>\n										<span data-ng-show="(forms.settings.voicemail.$touched || forms.settings.$submitted) && forms.settings.voicemail.$invalid && forms.settings.voicemail.$error.required" class="help-block help-block-error">\n											<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n										</span>\n									</div>\n									<!-- END VOICEMAIL -->\n								</div>\n								<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n							</form>\n							</wz-step>\n								<wz-step title="{{\'APPLICATION_INTERVAL\' | translate}}" canexit="formValidation(forms.interval.IntervalId.$valid || forms.interval.hasOwnProperty(\'t_from\') || forms.interval.intType.$modelValue === \'always\')">\n									<form name="forms.interval" novalidate>\n										<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n										<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n								<!-- START INTERVAL_TYPE -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$invalid}">\n									<label class="control-label">{{\'APPLICATION_INTERVAL_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="interval.intType" theme="bootstrap" name="intType" required>\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n										<ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n											{{$translate.instant(intType.name)}}\n										</ui-select-choices>\n									</ui-select>\n									<span data-ng-show="(forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END INTERVAL_TYPE -->\n								<div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'custom\'" lazy-render duration="1">\n										<!-- START TIME -->\n										<div class="form-group">\n											<label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n											<div class="input-group input-large">\n												<fieldset class="pull-left" ng-disabled="interval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="interval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n												<div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n												<fieldset ng-disabled="interval.alwaysTime"><uib-timepicker  name="t_to" data-ng-model="interval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n												<label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="interval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label>\n											</div>\n										</div>\n										<!-- END TIME -->\n\n										<!-- START WEEKDAY -->\n										<div class="form-group">\n											<label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n											<div class="input-group input-large">\n												<ui-select data-ng-model="interval.wd_from" theme="bootstrap" name="wd_from">\n													<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n													<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n														{{$translate.instant(weekDay.name)}}\n													</ui-select-choices>\n												</ui-select>\n												<span class="input-group-addon">to</span>\n												<ui-select data-ng-model="interval.wd_to" theme="bootstrap" name="wd_to">\n													<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n													<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n														{{$translate.instant(weekDay.name)}}\n													</ui-select-choices>\n												</ui-select>\n											</div>\n										</div>\n										<!-- END WEEKDAY -->\n\n										<!-- START MONTHDAY -->\n										<div class="form-group">\n											<label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n											<div class="input-group input-large">\n												<ui-select data-ng-model="interval.md_from" theme="bootstrap" name="md_from">\n													<ui-select-match>{{$select.selected}}</ui-select-match>\n													<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n														{{monthDay}}\n													</ui-select-choices>\n												</ui-select>\n												<span class="input-group-addon">to</span>\n												<ui-select data-ng-model="interval.md_to" theme="bootstrap" name="md_to">\n													<ui-select-match>{{$select.selected}}</ui-select-match>\n													<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n														{{monthDay}}\n													</ui-select-choices>\n												</ui-select>\n											</div>\n										</div>\n										<!-- END MONTHDAY -->\n\n										<!-- START MONTH -->\n										<div class="form-group">\n											<label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n											<div class="input-group input-large">\n												<ui-select data-ng-model="interval.m_from" theme="bootstrap" name="m_from">\n													<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n													<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n														{{$translate.instant(month.name)}}\n													</ui-select-choices>\n												</ui-select>\n												<span class="input-group-addon">to</span>\n												<ui-select data-ng-model="interval.m_to" theme="bootstrap" name="m_to">\n													<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n													<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n														{{$translate.instant(month.name)}}\n													</ui-select-choices>\n												</ui-select>\n											</div>\n										</div>\n										<!-- END MONTH -->\n						</div>\n\n						<div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'list\'" lazy-render duration="1">\n\n							<!-- START INTERVALS -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$invalid}">\n								<label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="interval.IntervalId" theme="bootstrap" name="IntervalId" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n									<ui-select-choices repeat="interval.id as interval in Intervals | filter: $select.search">\n										{{$translate.instant(interval.name)}}\n									</ui-select-choices>\n								</ui-select>\n								<span data-ng-show="(forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END INTERVALS -->\n\n						</div>\n						<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n						<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n					</form>\n						</wz-step>\n\n						<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n							<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n							<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n							<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n						</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/voice/route/internal/view/view.applications.html",'<div ui-view class="profile-content">\n<div class="row" data-ng-init="getRouteApplications()">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title  tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n				</div>\n				<div class="actions">\n					<div class="btn-group">\n						<a class="btn green-jungle " href="/voice/routes/internal/view/{{route.id}}/application" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_APPLICATION\' | translate }}\n						</a>\n					</div>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table class="table table-striped table-bordered table-hover">\n					  <thead>\n						  <tr>\n						    <th>{{ \'APPLICATION_APPLICATION\' | translate }}</th>\n								<th>{{ \'APPLICATION_ARGUMENTS\' | translate }}</th>\n						    <th>{{ \'APPLICATION_TIME\' | translate }}</th>\n								<th></th>\n						  </tr>\n					  </thead>\n					  <tbody ui-sortable="sortableOptions" data-ng-model="routeApplications">\n					    <tr data-ng-repeat="application in routeApplications | orderBy:\'priority\'">\n								<td>{{application.app}}</td>\n								<td>{{application.appdata}}</td>\n								<td>{{application.interval}}</td>\n					      <td>\n									<a class="btn default btn-xs blue-stripe" data-ng-href="/voice/routes/inbound/view/{{route.id}}/applications/settings/{{application.id}}">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(application.app+\' application\',application.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="routeApplications.length">\n								<td colspan="4" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_AVAILABLE_APPLICATIONS\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n	</div>\n</div>\n</div>\n'),a.put("app/voice/route/internal/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getRoute()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-reload"></i>\n					<a href="/voice/routes/internal/list">{{ \'APPLICATION_INTERNAL\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n					<i data-ng-show="route" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="route">\n					<a href="#">{{route.exten}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/internalroute.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{route.exten}}\n					</div>\n					<!-- <div class="profile-usertitle-job">\n						{{user.role}}\n					</div> -->\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.voice.routes.internal.view.settings\')}">\n							<a data-ng-href="/voice/routes/internal/view/{{route.id}}/settings">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n						<li data-ng-class="{active: $state.is(\'main.voice.routes.internal.view.applications\') || $state.is(\'main.voice.routes.internal.view.application\') || $state.is(\'main.voice.routes.internal.view.applications.settings\')}">\n							<a data-ng-href="/voice/routes/internal/view/{{route.id}}/applications">\n							<i class="icon-list"></i>\n							{{ \'APPLICATION_ACTIONS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/voice/route/internal/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_INTERNAL\' | translate}} {{ \'APPLICATION_ROUTE\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n\n			<div class="portlet-body" data-ng-init="getContexts()">\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.general" data-ng-submit="forms.general.$valid && updateRoute()" novalidate>\n\n							<!-- START EXTEN -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$invalid}">\n								<label class="control-label">{{\'APPLICATION_DID\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="exten" placeholder="{{\'APPLICATION_DID\' | translate}}" class="form-control" data-ng-model="route.exten" required/>\n								<span data-ng-show="(forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END EXTEN -->\n\n							<!-- START CONTEXT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="route.context" name="context" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n									<ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n										<div ng-bind-html="context.name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END CONTEXT -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="route.description"/></textarea>\n							</div>\n							<!-- END DESCRIPTION -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END GENERAL TAB -->\n\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/voice/route/internal/wizard/wizard.html",'<div class="col-md-12">\n  <!-- BEGIN PAGE HEADER-->\n	<div class="page-bar">\n		<ul class="page-breadcrumb">\n			<li>\n				<i class="icon-rocket"></i>\n				<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-reload"></i>\n				<a href="/voice/routes/internal/list">{{ \'APPLICATION_INTERNAL\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-options"></i>\n				<a href="#">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n			</li>\n		</ul>\n	</div>\n  <!-- END PAGE HEADER-->\n\n  <!-- BEGIN PORTLET-->\n  <div class="portlet light bordered" data-ng-init="getContexts()">\n  	<div class="portlet-title">\n  		<div class="caption font-green-sharp">\n  			<i class="icon-reload font-green-sharp"></i>\n  			<span class="caption-subject">{{ \'APPLICATION_INTERNAL\' | translate }} {{ \'APPLICATION_ROUTE\' | translate }} WIZARD</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n  		<wizard on-finish="createItem()">\n				<wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.route.$valid)">\n			    <form name="forms.route" novalidate>\n\n            <!-- START EXTEN -->\n            <div class="form-group" data-ng-class="{\'has-error\': (forms.route.exten.$touched || forms.route.$submitted) && forms.route.exten.$invalid}">\n              <label class="control-label">{{\'APPLICATION_DID\' | translate}}<span class="required" aria-required="true">*</span></label>\n              <input type="text" name="exten" placeholder="{{\'APPLICATION_DID\' | translate}}" class="form-control" data-ng-model="item.exten" required/>\n              <span data-ng-show="(forms.route.exten.$touched || forms.route.$submitted) && forms.route.exten.$error.required" class="help-block help-block-error">\n                <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n              </span>\n            </div>\n            <!-- END EXTEN -->\n\n						<!-- START DESCRIPTION -->\n						<div class="form-group">\n							<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n							<textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/></textarea>\n						</div>\n						<!-- END DESCRIPTION -->\n\n\n						<button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n			    </form>\n			  </wz-step>\n\n				<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n					<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n					<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n					<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n				</wz-step>\n  		</wizard>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),a.put("app/voice/route/outbound/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-call-out"></i>\n					<a href="/voice/routes/outbound/list">{{ \'APPLICATION_OUTBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-users font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_OUTBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="routes.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_ROUTE\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<!-- <li>\n								<a href="#">\n								<i class="icon-user"></i> {{ \'APPLICATION_QUICK\' | translate }} </a>\n							</li> -->\n							<li>\n								<a href="/voice/routes/outbound/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n							<!-- <li>\n								<a href="#">\n								<i class="icon-users"></i> {{ \'APPLICATION_BULK\' | translate }} </a>\n							</li> -->\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getRoutes([\'context\', \'exten\', \'app\', \'appdata\', \'description\'])" csv-header="[\'Context\', \'Exten\', \'App\', \'Appdata\', \'Description\']" field-separator=";" filename="routes_outobund.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedRoutes" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="5">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.routesByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="routeByPage in routesByPage | filter: $select.search">\n													<div ng-bind-html="routeByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(checked)" checklist-model checklist-value="id"></th>\n                <th st-sort="exten">{{ \'APPLICATION_PATTERN\' | translate }}</th>\n								<th st-sort="context">{{ \'APPLICATION_CONTEXT\' | translate }}</th>\n						    <th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="route in displayedRoutes"  class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="routes.checked" checklist-value="route.id"></td>\n								<td>{{route.exten}}</td>\n								<td>{{route.context}}</td>\n					      <td>{{route.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/voice/routes/outbound/view/{{route.id}}/settings">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(route.name,route.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedRoutes.length">\n								<td colspan="5" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_ROUTES_AVAILABLE\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="id" class="form-control" type="search"/>\n									</div>\n						    </td>\n                <td>\n                  <div class="input-icon right">\n                    <i class="fa fa-search"></i>\n                    <input st-search="exten" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_PATTERN\' | translate | lowercase}}" class="form-control" type="search"/>\n                  </div>\n                </td>\n								<td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="context" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_CONTEXT\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n								</td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n						    </td>\n						  </tr>\n					    <tr>\n					      <td colspan="5" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.routesByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/voice/route/outbound/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getRoute()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-call-out"></i>\n					<a href="/voice/routes/outbound/list">{{ \'APPLICATION_OUTBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n					<i data-ng-show="route" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="route">\n					<a href="#">{{route.exten}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/outboundroute.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{route.exten}}\n					</div>\n					<!-- <div class="profile-usertitle-job">\n						{{user.role}}\n					</div> -->\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.voice.routes.outbound.view.settings\')}">\n							<a data-ng-href="/voice/routes/outbound/view/{{route.id}}/settings">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n						<li data-ng-class="{active: $state.is(\'main.voice.routes.outbound.view.routes\') || $state.is(\'main.voice.routes.outbound.view.route\') || $state.is(\'main.voice.routes.outbound.view.routes.settings\')}">\n							<a data-ng-href="/voice/routes/outbound/view/{{route.id}}/routes">\n							<i class="icon-list"></i>\n							{{ \'APPLICATION_ACTIONS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/voice/route/outbound/view/view.route.html",'<div class="row" data-ng-init="initApplication();getIntervals();">\n	<div class="col-md-12">\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_NEW_ROUTE\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<div class="profile-usertitle-name">\n					{{(main.app | capitalize) || \'Application\'}}\n				</div>\n				<wizard on-finish="createItem()">\n	        <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="formValidation(forms.info.$valid)">\n							<form name="forms.info" novalidate>\n								<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n								<!-- START APP -->\n								<div class="form-group"  data-ng-class="{\'has-error\': (forms.info.app.$touched || forms.info.$submitted) && forms.info.app.$invalid}">\n									<label class="control-label">{{ \'APPLICATION_APPLICATION\' | translate }}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="main.app" name="app" theme="bootstrap" required>\n										<ui-select-match placeholder="{{ \'APPLICATION_APPLICATION\' | translate }}">{{$select.selected.name}}</ui-select-match>\n										<ui-select-choices repeat="app.value as app in applications | filter: $select.search">\n											<div ng-bind-html="app.name | highlight: $select.search"></div>\n										</ui-select-choices>\n									</ui-select>\n									<span data-ng-show="(forms.info.app.$touched || forms.info.$submitted) && forms.info.app.$invalid && forms.info.app.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END APP -->\n								<div id="Dial" class="app-settings" ng-slide-down="main.app == \'Dial\'" lazy-render duration="1">\n								<!-- START TRUNK -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$invalid}">\n									<label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="application.TrunkId" name="trunk" theme="bootstrap" required>\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n										<ui-select-choices repeat="trunk.id as trunk in items | filter: $select.search">\n											<div ng-bind-html="trunk.name | highlight: $select.search"></div>\n										</ui-select-choices>\n									</ui-select>\n									<span class="help-block">\n										{{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n									</span>\n									<span data-ng-show="(forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END TRUNK -->\n\n								<!-- START CONTEXT -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.info.context.$touched || forms.info.$submitted) && forms.info.context.$invalid}">\n									<label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="application.context" name="context" theme="bootstrap" required>\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n										<ui-select-choices repeat="context.name as context in items2 | filter: $select.search">\n											<div ng-bind-html="context.name | highlight: $select.search"></div>\n										</ui-select-choices>\n									</ui-select>\n									<span class="help-block">\n										{{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n									</span>\n									<span data-ng-show="(forms.info.context.$touched || forms.info.$submitted) && forms.info.context.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END CONTEXT -->\n\n								<!-- START CALLERID -->\n								<div class="form-group"  data-ng-class="{\'has-error\': (forms.info.callerID.$touched || forms.info.$submitted) && forms.info.callerID.$invalid}">\n									<label class="control-label">{{ \'APPLICATION_CALLERID\' | translate }}</label>\n									<input type="text" name="callerID" placeholder="{{ \'APPLICATION_CALLERID\' | translate }}" class="form-control" data-ng-model="application.callerID">\n									<span data-ng-show="(forms.info.callerID.$touched || forms.info.$submitted) && forms.info.callerID.$invalid" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END CALLERID -->\n\n									<!-- START CUTDIGITS -->\n								<div class="form-group">\n									<label class="control-label">{{\'APPLICATION_CUTDIGITS\' | translate}}</label>\n									<input type="number" class="form-control" name="cutdigits" data-ng-model="application.cutdigits">\n									<span class="help-block">\n										{{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n									</span>\n								</div>\n								<!-- END CUTDIGITS -->\n							</div>\n							<div id="Custom" class="app-settings" ng-slide-down="main.app == \'custom\'" lazy-render duration="1">\n\n								<!-- START CUSTOMAPP -->\n								<div class="form-group"  data-ng-class="{\'has-error\': (forms.info.customApp.$touched || forms.info.$submitted) && forms.info.customApp.$invalid}">\n									<label class="control-label">{{ \'APPLICATION_CUSTOM_APP\' | translate }}<span class="required" aria-required="true">*</span></label>\n									<input type="text" name="customApp" placeholder="{{ \'APPLICATION_CUSTOM_APP\' | translate }}" class="form-control" data-ng-model="application.customApp" required>\n									<span data-ng-show="(forms.info.customApp.$touched || forms.info.$submitted) && forms.info.customApp.$invalid && forms.info.customApp.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END CUSTOMAPP -->\n\n								<!-- START APPDATA -->\n								<div class="form-group"  data-ng-class="{\'has-error\': (forms.info.appdata.$touched || forms.info.$submitted) && forms.info.appdata.$invalid}">\n									<label class="control-label">{{ \'APPLICATION_ARGUMENTS\' | translate }}</label>\n									<input type="text" name="appdata" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}" class="form-control" data-ng-model="application.appdata">\n									<span data-ng-show="(forms.info.appdata.$touched || forms.info.$submitted) && forms.info.appdata.$invalid && forms.info.appdata.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END APPDATA -->\n							</div>\n							<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n							</form>\n							</wz-step>\n								<wz-step title="{{\'APPLICATION_INTERVAL\' | translate}}" canexit="formValidation(forms.interval.IntervalId.$valid || forms.interval.hasOwnProperty(\'t_from\') || forms.interval.intType.$modelValue === \'always\')">\n									<form name="forms.interval" novalidate>\n										<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n										<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n									<!-- START INTERVAL_TYPE -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$invalid}">\n									<label class="control-label">{{\'APPLICATION_INTERVAL_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="interval.intType" theme="bootstrap" name="intType" required>\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n										<ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n											{{$translate.instant(intType.name)}}\n										</ui-select-choices>\n									</ui-select>\n									<span data-ng-show="(forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END INTERVAL_TYPE -->\n								<div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'custom\'" lazy-render duration="1">\n										<!-- START TIME -->\n										<div class="form-group">\n											<label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n											<div class="input-group input-large">\n												<fieldset class="pull-left" ng-disabled="interval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="interval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n												<div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n												<fieldset ng-disabled="interval.alwaysTime"><uib-timepicker  name="t_to" data-ng-model="interval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n												<label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="interval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label>\n											</div>\n										</div>\n										<!-- END TIME -->\n\n										<!-- START WEEKDAY -->\n										<div class="form-group">\n											<label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n											<div class="input-group input-large">\n												<ui-select data-ng-model="interval.wd_from" theme="bootstrap" name="wd_from">\n													<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n													<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n														{{$translate.instant(weekDay.name)}}\n													</ui-select-choices>\n												</ui-select>\n												<span class="input-group-addon">to</span>\n												<ui-select data-ng-model="interval.wd_to" theme="bootstrap" name="wd_to">\n													<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n													<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n														{{$translate.instant(weekDay.name)}}\n													</ui-select-choices>\n												</ui-select>\n											</div>\n										</div>\n										<!-- END WEEKDAY -->\n\n										<!-- START MONTHDAY -->\n										<div class="form-group">\n											<label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n											<div class="input-group input-large">\n												<ui-select data-ng-model="interval.md_from" theme="bootstrap" name="md_from">\n													<ui-select-match>{{$select.selected}}</ui-select-match>\n													<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n														{{monthDay}}\n													</ui-select-choices>\n												</ui-select>\n												<span class="input-group-addon">to</span>\n												<ui-select data-ng-model="interval.md_to" theme="bootstrap" name="md_to">\n													<ui-select-match>{{$select.selected}}</ui-select-match>\n													<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n														{{monthDay}}\n													</ui-select-choices>\n												</ui-select>\n											</div>\n										</div>\n										<!-- END MONTHDAY -->\n\n										<!-- START MONTH -->\n										<div class="form-group">\n											<label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n											<div class="input-group input-large">\n												<ui-select data-ng-model="interval.m_from" theme="bootstrap" name="m_from">\n													<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n													<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n														{{$translate.instant(month.name)}}\n													</ui-select-choices>\n												</ui-select>\n												<span class="input-group-addon">to</span>\n												<ui-select data-ng-model="interval.m_to" theme="bootstrap" name="m_to">\n													<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n													<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n														{{$translate.instant(month.name)}}\n													</ui-select-choices>\n												</ui-select>\n											</div>\n										</div>\n										<!-- END MONTH -->\n						</div>\n\n						<div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'list\'" lazy-render duration="1">\n\n							<!-- START INTERVALS -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$invalid}">\n								<label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="interval.IntervalId" theme="bootstrap" name="IntervalId" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n									<ui-select-choices repeat="interval.id as interval in Intervals | filter: $select.search">\n										{{$translate.instant(interval.name)}}\n									</ui-select-choices>\n								</ui-select>\n								<span data-ng-show="(forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END INTERVALS -->\n\n						</div>\n\n						<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n						<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n							</form>\n						</wz-step>\n\n						<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n							<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n							<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n							<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n						</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/voice/route/outbound/view/view.routeSettings.html",'\n<div class="row" data-ng-init="initApplication();getApplication();getIntervals();">\n	<div class="col-md-12">\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_APPLICATION_SETTINGS\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="updateItem()">\n					<div class="profile-usertitle-name">\n						{{(main.app | capitalize) || \'Application\'}}\n					</div>\n	        <wz-step title="{{\'APPLICATION_APPLICATION\' | translate}}" canexit="formValidation(forms.info.$valid)">\n						<form name="forms.info" novalidate>\n							<div id="Dial" class="app-settings" ng-slide-down="main.app == \'Dial\'" lazy-render duration="1">\n							<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n\n							<!-- START TRUNK -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$invalid}">\n								<label class="control-label">{{\'APPLICATION_TRUNK\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="application.TrunkId" name="trunk" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n									<ui-select-choices repeat="trunk.id as trunk in items | filter: $select.search">\n										<div ng-bind-html="trunk.name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n								</span>\n								<span data-ng-show="(forms.info.trunk.$touched || forms.info.$submitted) && forms.info.trunk.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END TRUNK -->\n\n							<!-- START CONTEXT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.info.context.$touched || forms.info.$submitted) && forms.info.context.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="application.context" name="context" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n									<ui-select-choices repeat="context.name as context in items2 | filter: $select.search">\n										<div ng-bind-html="context.name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n								</span>\n								<span data-ng-show="(forms.info.context.$touched || forms.info.$submitted) && forms.info.context.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END CONTEXT -->\n\n							<!-- START CALLERID -->\n							<div class="form-group"  data-ng-class="{\'has-error\': (forms.info.callerID.$touched || forms.info.$submitted) && forms.info.callerID.$invalid}">\n								<label class="control-label">{{ \'APPLICATION_CALLERID\' | translate }}</label>\n								<input type="text" name="callerID" placeholder="{{ \'APPLICATION_CALLERID\' | translate }}" class="form-control" data-ng-model="application.callerID">\n								<span data-ng-show="(forms.info.callerID.$touched || forms.info.$submitted) && forms.info.callerID.$invalid" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END CALLERID -->\n\n								<!-- START CUTDIGITS -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_CUTDIGITS\' | translate}}</label>\n								<input type="number" class="form-control" name="cutdigits" data-ng-model="application.cutdigits">\n								<span class="help-block">\n									{{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n								</span>\n							</div>\n							<!-- END CUTDIGITS -->\n						</div>\n						<div id="Custom" class="app-settings" ng-slide-down="main.app == \'custom\'" lazy-render duration="1">\n\n							<!-- START CUSTOMAPP -->\n							<div class="form-group"  data-ng-class="{\'has-error\': (forms.info.customApp.$touched || forms.info.$submitted) && forms.info.customApp.$invalid}">\n								<label class="control-label">{{ \'APPLICATION_CUSTOM_APP\' | translate }}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="customApp" placeholder="{{ \'APPLICATION_CUSTOM_APP\' | translate }}" class="form-control" data-ng-model="application.customApp" required>\n								<span data-ng-show="(forms.info.customApp.$touched || forms.info.$submitted) && forms.info.customApp.$invalid && forms.info.customApp.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END CUSTOMAPP -->\n\n							<!-- START APPDATA -->\n							<div class="form-group"  data-ng-class="{\'has-error\': (forms.info.appdata.$touched || forms.info.$submitted) && forms.info.appdata.$invalid}">\n								<label class="control-label">{{ \'APPLICATION_ARGUMENTS\' | translate }}</label>\n								<input type="text" name="appdata" placeholder="{{ \'APPLICATION_ARGUMENTS\' | translate }}" class="form-control" data-ng-model="application.appdata">\n								<span data-ng-show="(forms.info.appdata.$touched || forms.info.$submitted) && forms.info.appdata.$invalid && forms.info.appdata.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END APPDATA -->\n						</div>\n						<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n					</form>\n					</wz-step>\n						<wz-step title="{{\'APPLICATION_INTERVAL\' | translate}}" canexit="formValidation(forms.interval.IntervalId.$valid || forms.interval.hasOwnProperty(\'t_from\') || forms.interval.intType.$modelValue === \'always\')">\n							<form name="forms.interval" novalidate>\n								<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n								<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n						<!-- START INTERVAL_TYPE -->\n						<div class="form-group" data-ng-class="{\'has-error\': (forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$invalid}">\n							<label class="control-label">{{\'APPLICATION_INTERVAL_TYPE\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<ui-select data-ng-model="interval.intType" theme="bootstrap" name="intType" required>\n								<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n								<ui-select-choices repeat="intType.value as intType in $application.intTypes | filter: $select.search">\n									{{$translate.instant(intType.name)}}\n								</ui-select-choices>\n							</ui-select>\n							<span data-ng-show="(forms.interval.intType.$touched || forms.interval.$submitted) && forms.interval.intType.$error.required" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END INTERVAL_TYPE -->\n						<div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'custom\'" lazy-render duration="1">\n								<!-- START TIME -->\n								<div class="form-group">\n									<label class="control-label">{{ \'APPLICATION_TIME\' | translate }}</label>\n									<div class="input-group input-large">\n										<fieldset class="pull-left" ng-disabled="interval.alwaysTime"><uib-timepicker name="t_from" data-ng-model="interval.t_from" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n										<div class="input-group-addon col-md-1 interval-to pull-left">to</div>\n										<fieldset ng-disabled="interval.alwaysTime"><uib-timepicker  name="t_to" data-ng-model="interval.t_to" show-meridian="false" show-spinners="false"></uib-timepicker></fieldset>\n										<label class="control-label pointer-cursor"><input type="checkbox" data-ng-model="interval.alwaysTime">{{\'APPLICATION_ALWAYS\' | translate}}</label>\n									</div>\n								</div>\n								<!-- END TIME -->\n\n								<!-- START WEEKDAY -->\n								<div class="form-group">\n									<label class="control-label">{{ \'APPLICATION_WEEKDAY\' | translate }}</label>\n									<div class="input-group input-large">\n										<ui-select data-ng-model="interval.wd_from" theme="bootstrap" name="wd_from">\n											<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n											<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n												{{$translate.instant(weekDay.name)}}\n											</ui-select-choices>\n										</ui-select>\n										<span class="input-group-addon">to</span>\n										<ui-select data-ng-model="interval.wd_to" theme="bootstrap" name="wd_to">\n											<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n											<ui-select-choices repeat="weekDay.value as weekDay in $interval.daysOfWeek | filter: $select.search">\n												{{$translate.instant(weekDay.name)}}\n											</ui-select-choices>\n										</ui-select>\n									</div>\n								</div>\n								<!-- END WEEKDAY -->\n\n								<!-- START MONTHDAY -->\n								<div class="form-group">\n									<label class="control-label">{{ \'APPLICATION_MONTHDAY\' | translate }}</label>\n									<div class="input-group input-large">\n										<ui-select data-ng-model="interval.md_from" theme="bootstrap" name="md_from">\n											<ui-select-match>{{$select.selected}}</ui-select-match>\n											<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n												{{monthDay}}\n											</ui-select-choices>\n										</ui-select>\n										<span class="input-group-addon">to</span>\n										<ui-select data-ng-model="interval.md_to" theme="bootstrap" name="md_to">\n											<ui-select-match>{{$select.selected}}</ui-select-match>\n											<ui-select-choices repeat="monthDay in $interval.daysOfMonth | filter: $select.search">\n												{{monthDay}}\n											</ui-select-choices>\n										</ui-select>\n									</div>\n								</div>\n								<!-- END MONTHDAY -->\n\n								<!-- START MONTH -->\n								<div class="form-group">\n									<label class="control-label">{{ \'APPLICATION_MONTH\' | translate }}</label>\n									<div class="input-group input-large">\n										<ui-select data-ng-model="interval.m_from" theme="bootstrap" name="m_from">\n											<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n											<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n												{{$translate.instant(month.name)}}\n											</ui-select-choices>\n										</ui-select>\n										<span class="input-group-addon">to</span>\n										<ui-select data-ng-model="interval.m_to" theme="bootstrap" name="m_to">\n											<ui-select-match placeholder="">{{$translate.instant($select.selected.name)}}</ui-select-match>\n											<ui-select-choices repeat="month.value as month in $interval.months | filter: $select.search">\n												{{$translate.instant(month.name)}}\n											</ui-select-choices>\n										</ui-select>\n									</div>\n								</div>\n								<!-- END MONTH -->\n							</div>\n\n							<div id="customInterval" class="app-settings" ng-slide-down="interval.intType == \'list\'" lazy-render duration="1">\n\n								<!-- START INTERVALS -->\n								<div class="form-group" data-ng-class="{\'has-error\': (forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$invalid}">\n									<label class="control-label">{{\'APPLICATION_INTERVALS\' | translate}}<span class="required" aria-required="true">*</span></label>\n									<ui-select data-ng-model="interval.IntervalId" theme="bootstrap" name="IntervalId" required>\n										<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\n										<ui-select-choices repeat="interval.id as interval in Intervals | filter: $select.search">\n											{{$translate.instant(interval.name)}}\n										</ui-select-choices>\n									</ui-select>\n									<span data-ng-show="(forms.interval.IntervalId.$touched || forms.interval.$submitted) && forms.interval.IntervalId.$error.required" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END INTERVALS -->\n\n							</div>\n							<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n							<button class="btn green-haze" type="submit" ng-click="goNext()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n							</form>\n						</wz-step>\n\n						<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n							<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n							<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n							<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n						</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/voice/route/outbound/view/view.routes.html",'<div ui-view class="profile-content">\n<div class="row" data-ng-init="getRouteApplications()">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title  tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACTIONS\' | translate}}</span>\n				</div>\n				<div class="actions">\n					<div class="btn-group">\n						<a class="btn green-jungle " href="/voice/routes/outbound/view/{{route.id}}/route" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_ROUTE\' | translate }}\n						</a>\n					</div>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table class="table table-striped table-bordered table-hover">\n					  <thead>\n						  <tr>\n								<th>{{ \'APPLICATION_APPLICATION\' | translate }}</th>\n								<th>{{ \'APPLICATION_CONTEXT\' | translate }}</th>\n								<th>{{ \'APPLICATION_ARGUMENTS\' | translate }}</th>\n						    <th>{{ \'APPLICATION_TIME\' | translate }}</th>\n								<th></th>\n						  </tr>\n					  </thead>\n					  <tbody ui-sortable="sortableOptions" data-ng-model="routeApplications">\n					    <tr data-ng-repeat="application in routeApplications | orderBy:\'priority\'">\n								<td>{{application.app}}</td>\n								<td>{{application.context}}</td>\n								<td>{{application.appdata}}</td>\n								<td>{{application.interval}}</td>\n					      <td>\n									<a class="btn default btn-xs blue-stripe" data-ng-href="/voice/routes/outbound/view/{{route.id}}/routes/settings/{{application.id}}">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(\'Route\',application.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="routeApplications.length">\n								<td colspan="5" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_ROUTES_AVAILABLE\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n	</div>\n</div>\n</div>\n'),a.put("app/voice/route/outbound/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_OUTBOUND\' | translate}} {{ \'APPLICATION_ROUTE\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n\n			<div class="portlet-body" data-ng-init="getContexts()">\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.general" data-ng-submit="forms.general.$valid && updateRoute()" novalidate>\n\n							<!-- START EXTEN -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$invalid}">\n								<label class="control-label">{{\'APPLICATION_PATTERN\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="exten" placeholder="{{\'APPLICATION_PATTERN\' | translate}}" class="form-control" data-ng-model="route.exten" required/>\n								<span data-ng-show="(forms.general.exten.$touched || forms.general.$submitted) && forms.general.exten.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END EXTEN -->\n\n							<!-- START CONTEXT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="route.context" name="context" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n									<ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n										<div ng-bind-html="context.name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END CONTEXT -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="route.description"/></textarea>\n							</div>\n							<!-- END DESCRIPTION -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END GENERAL TAB -->\n\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/voice/route/outbound/wizard/wizard.html",'<div class="col-md-12">\n  <!-- BEGIN PAGE HEADER-->\n	<div class="page-bar">\n		<ul class="page-breadcrumb">\n			<li>\n				<i class="icon-rocket"></i>\n				<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-call-out"></i>\n				<a href="/voice/routes/outbound/list">{{ \'APPLICATION_OUTBOUND\' | translate }} {{ \'APPLICATION_ROUTES\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-options"></i>\n				<a href="#">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n			</li>\n		</ul>\n	</div>\n  <!-- END PAGE HEADER-->\n\n  <!-- BEGIN PORTLET-->\n  <div class="portlet light bordered" data-ng-init="getContexts()">\n  	<div class="portlet-title">\n  		<div class="caption font-green-sharp">\n  			<i class="icon-call-out font-green-sharp"></i>\n  			<span class="caption-subject">{{ \'APPLICATION_OUTBOUND\' | translate }} {{ \'APPLICATION_ROUTE\' | translate }} WIZARD</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n  		<wizard on-finish="createItem()">\n				<wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="exitValidation(forms.route.$valid)">\n			    <form name="forms.route" novalidate>\n\n            <!-- START EXTEN -->\n            <div class="form-group" data-ng-class="{\'has-error\': (forms.route.exten.$touched || forms.route.$submitted) && forms.route.exten.$invalid}">\n              <label class="control-label">{{\'APPLICATION_PATTERN\' | translate}}<span class="required" aria-required="true">*</span></label>\n              <input type="text" name="exten" placeholder="{{\'APPLICATION_PATTERN\' | translate}}" class="form-control" data-ng-model="item.exten" required/>\n              <span data-ng-show="(forms.route.exten.$touched || forms.route.$submitted) && forms.route.exten.$error.required" class="help-block help-block-error">\n                <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n              </span>\n            </div>\n            <!-- END EXTEN -->\n\n						<!-- START DESCRIPTION -->\n						<div class="form-group">\n							<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n							<textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/></textarea>\n						</div>\n						<!-- END DESCRIPTION -->\n\n\n						<button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n			    </form>\n			  </wz-step>\n\n				<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n					<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n					<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n					<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n				</wz-step>\n  		</wizard>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),a.put("app/voice/voicemail/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-envelope-letter"></i>\n					<a href="/voice/voicemails/list">{{ \'APPLICATION_VOICEMAILS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-envelope-letter font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_VOICEMAILS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="voicemails.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle " href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_VOICEMAIL\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/voice/voicemails/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getVoicemails([\'mailbox\', \'fullname\', \'email\'])" csv-header="[\'Mailbox\', \'Fullname\', \'Email\']" field-separator=";" filename="voicemails.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedVoicemails" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="5">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.voicemailsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="voicemailByPage in voicemailsByPage | filter: $select.search">\n													<div ng-bind-html="voicemailByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(voicemail, checked)" checklist-model checklist-value="uniqueid"></th>\n						    <th st-sort="mailbox">{{ \'APPLICATION_MAILBOX\' | translate }}</th>\n						    <th st-sort="fullname">{{ \'APPLICATION_FULLNAME\' | translate }}</th>\n						    <th st-sort="email">{{ \'APPLICATION_EMAIL\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="voicemail in displayedVoicemails" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="voicemails.checked" checklist-value="voicemail.uniqueid"></td>\n								<td>{{voicemail.mailbox}}</td>\n                <td>{{voicemail.fullname}}</td>\n					      <td>{{voicemail.email}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/voice/voicemails/view/{{voicemail.uniqueid}}/settings">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(voicemail.mailbox,voicemail.uniqueid)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedVoicemails.length">\n								<td colspan="5" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_VOICEMAILS_AVAILABLE\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="mailbox" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_MAILBOX\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="fullname" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_FULLNAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="email" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_EMAIL\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n						    </td>\n						  </tr>\n					    <tr>\n					      <td colspan="5" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.voicemailsByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/voice/voicemail/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getVoicemail()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-envelope-letter"></i>\n					<a href="/voice/voicemails/list">{{ \'APPLICATION_VOICEMAILS\' | translate }}</a>\n					<i data-ng-show="voicemail" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="voicemail">\n					<a href="#">{{voicemail.mailbox}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/voicemail.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{voicemail.mailbox}}\n					</div>\n					<!-- <div class="profile-usertitle-job">\n						{{user.role}}\n					</div> -->\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.voice.voicemails.view.settings\')}">\n							<a data-ng-href="/voice/voicemails/view/{{voicemail.uniqueid}}/settings">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n            <li data-ng-class="{active: $state.is(\'main.voice.voicemails.view.messages\')}">\n              <a data-ng-href="/voice/voicemails/view/{{voicemail.uniqueid}}/messages">\n              <i class="icon-speech"></i>\n              {{ \'APPLICATION_MESSAGES\' | translate}} </a>\n            </li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/voice/voicemail/view/view.messages.html",'<div class="row" data-ng-init="getMessages()">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title  tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_MESSAGES\' | translate}}</span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table class="table table-striped table-bordered table-hover">\n					  <thead>\n						  <tr>\n						    <th>{{ \'APPLICATION_CALLERID\' | translate }}</th>\n						    <th>{{ \'APPLICATION_DATE\' | translate }}</th>\n								<th>{{ \'APPLICATION_DURATION\' | translate }}</th>\n								<th>{{ \'APPLICATION_RECORDING\' | translate }}</th>\n								<th width="20%">{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody data-ng-model="voicemailMessages">\n					    <tr data-ng-repeat="message in voicemailMessages">\n								<td>{{message.callerid}}</td>\n								<td>{{returnMessageDate(message.stamp)}}</td>\n								<td>{{returnDuration(message.duration) | date: \'mm:ss\'}}</td>\n								<td>\n									<audio controls ng-src="{{encodeRecording(message.recording)}}" preload="none">\n			            Your browser does not support the audio tag.\n			          </audio>\n							</td>\n					      <td>\n									<a class="btn default btn-xs green-stripe" href="/api/voice/voicemails/messages/{{message.id}}/download" target="_self">\n										{{ \'APPLICATION_DOWNLOAD\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(\'message\',message.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="voicemailMessages.length">\n								<td colspan="5" style="text-align:center;">\n									<i>No messages available</i>\n								</td>\n							</tr>\n					  </tbody>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/voice/voicemail/view/view.settings.html",'<div class="row" data-ng-init="getContexts()">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_VOICEMAIL\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n					</li>\n					<!-- <li>\n						<a href="#" data-target="#tab_1_2" data-toggle="tab">{{ \'APPLICATION_ADVANCED\' | translate}}</a>\n					</li> -->\n				</ul>\n			</div>\n\n			<div class="portlet-body">\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.general" data-ng-submit="forms.general.$valid && updateVoiceVoicemail()" novalidate>\n\n							<!-- START MAILBOX -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.mailbox.$invalid}">\n								<label class="control-label">{{\'APPLICATION_MAILBOX\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="mailbox" placeholder="{{\'APPLICATION_MAILBOX\' | translate}}" class="form-control" data-ng-model="voicemail.mailbox" required/>\n								<span data-ng-show="forms.general.$submitted && forms.general.mailbox.$invalid" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END MAILBOX -->\n\n							<!-- START PASSWORD -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.password.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NEW_PASSWORD\' | translate}}</label>\n								<input type="password" name="password" placeholder="{{\'APPLICATION_NEW_PASSWORD\' | translate}}" class="form-control" data-ng-model="voicemail.password" />\n								<span data-ng-show="forms.general.$submitted && forms.general.password.$invalid" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END PASSWORD -->\n\n							<!-- START CONFIRM PASSWORD -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.rpassword.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}</label>\n								<input type="password" name="rpassword" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="voicemail.rpassword" nx-equal="voicemail.password"/>\n								<span data-ng-show="forms.general.$submitted && (forms.general.rpassword.$invalid || forms.general.rpassword.$invalid)" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n								</span>\n							</div>\n							<!-- END CONFIRM PASSWORD -->\n\n							<!-- START FULLNAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.fullname.$invalid}">\n								<label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="text" name="fullname" placeholder="{{\'APPLICATION_FULLNAME\' | translate}}" class="form-control" data-ng-model="voicemail.fullname" required/>\n								<span data-ng-show="forms.general.$submitted && forms.general.fullname.$invalid" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END FULLNAME -->\n\n							<!-- START EMAIL -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.email.$invalid}">\n								<label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="voicemail.email" required/>\n								<span data-ng-show="forms.general.$submitted && forms.general.host.$invalid" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END EMAIL -->\n\n							<!-- START CONTEXT -->\n							<div class="form-group" data-ng-class="{\'has-error\': (forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$invalid}">\n								<label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n								<ui-select data-ng-model="voicemail.context" name="context" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n									<ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n										<div ng-bind-html="context.name | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span class="help-block">\n									{{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n								</span>\n								<span data-ng-show="(forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$error.required" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END CONTEXT -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END GENERAL TAB -->\n					<!-- ADVANCED TAB -->\n					<!-- <div class="tab-pane" id="tab_1_2">\n						<form name="forms.advanced" data-ng-submit="updateVoiceVoicemail()" novalidate>\n\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div> -->\n					<!-- END ADVANCED TAB -->\n\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/voice/voicemail/wizard/wizard.html",'<div class="col-md-12" data-ng-init="initWizard();getContexts();">\n  <!-- BEGIN PAGE HEADER-->\n	<div class="page-bar">\n		<ul class="page-breadcrumb">\n			<li>\n				<i class="icon-rocket"></i>\n				<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-envelope-letter"></i>\n				<a href="/voice/voicemails/list">{{ \'APPLICATION_VOICEMAILS\' | translate }}</a>\n				<i class="fa fa-angle-right"></i>\n			</li>\n			<li>\n				<i class="icon-options"></i>\n				<a href="#">{{ \'APPLICATION_WIZARD\' | translate }}</a>\n			</li>\n		</ul>\n	</div>\n  <!-- END PAGE HEADER-->\n\n  <!-- BEGIN PORTLET-->\n  <div class="portlet light bordered">\n  	<div class="portlet-title">\n  		<div class="caption font-green-sharp">\n  			<i class="icon-envelope-letter font-green-sharp"></i>\n  			<span class="caption-subject">{{ \'APPLICATION_VOICEMAIL\' | translate }} WIZARD</a> </span>\n  		</div>\n  	</div>\n  	<div class="portlet-body">\n  		<wizard on-finish="createItem()">\n				<wz-step title="{{\'APPLICATION_GENERAL\' | translate}}" canexit="exitValidation(forms.general.$valid)">\n			    <form name="forms.general" novalidate>\n\n			      <!-- START MAILBOX -->\n			      <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.mailbox.$invalid}">\n			        <label class="control-label">{{\'APPLICATION_MAILBOX\' | translate}}<span class="required" aria-required="true">*</span></label>\n			        <input type="text" name="mailbox" placeholder="{{\'APPLICATION_MAILBOX\' | translate}}" class="form-control" data-ng-model="item.mailbox" required/>\n							<span data-ng-show="forms.general.$submitted && forms.general.mailbox.$invalid" class="help-block help-block-error">\n			          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n			        </span>\n			      </div>\n			      <!-- END MAILBOX -->\n\n						<!-- START PASSWORD -->\n						<div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.password.$invalid}">\n							<label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<input type="password" name="password" placeholder="{{\'APPLICATION_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.password" required/>\n							<span data-ng-show="forms.general.$submitted && forms.general.password.$invalid" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n							</span>\n						</div>\n						<!-- END PASSWORD -->\n\n						<!-- START CONFIRM PASSWORD -->\n						<div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.rpassword.$invalid}">\n							<label class="control-label">{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}<span class="required" aria-required="true">*</span></label>\n							<input type="password" name="rpassword" placeholder="{{\'APPLICATION_CONFIRM_PASSWORD\' | translate}}" class="form-control" data-ng-model="item.rpassword" nx-equal="item.password" required/>\n							<span data-ng-show="forms.general.$submitted && (forms.general.rpassword.$invalid || forms.general.rpassword.$invalid)" class="help-block help-block-error">\n								<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_WRONG_PASSWORD\' | translate}}.\n							</span>\n						</div>\n						<!-- END CONFIRM PASSWORD -->\n\n            <!-- START FULLNAME -->\n            <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.fullname.$invalid}">\n              <label class="control-label">{{\'APPLICATION_FULLNAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n              <input type="text" name="fullname" placeholder="{{\'APPLICATION_FULLNAME\' | translate}}" class="form-control" data-ng-model="item.fullname" required/>\n              <span data-ng-show="forms.general.$submitted && forms.general.fullname.$invalid" class="help-block help-block-error">\n                <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n              </span>\n            </div>\n            <!-- END FULLNAME -->\n\n            <!-- START EMAIL -->\n            <div class="form-group" data-ng-class="{\'has-error\': forms.general.$submitted && forms.general.email.$invalid}">\n              <label class="control-label">{{\'APPLICATION_EMAIL\' | translate}}<span class="required" aria-required="true">*</span></label>\n              <input type="email" name="email" placeholder="{{\'APPLICATION_EMAIL\' | translate}}" class="form-control" data-ng-model="item.email" required/>\n              <span data-ng-show="forms.general.$submitted && forms.general.host.$invalid" class="help-block help-block-error">\n                <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n              </span>\n            </div>\n            <!-- END EMAIL -->\n\n            <!-- START CONTEXT -->\n            <div class="form-group" data-ng-class="{\'has-error\': (forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$invalid}">\n              <label class="control-label">{{\'APPLICATION_CONTEXT\' | translate}}<span class="required" aria-required="true">*</span></label>\n              <ui-select data-ng-model="item.context" name="context" theme="bootstrap" required>\n                <ui-select-match placeholder="{{\'APPLICATION_SEARCH_FILTER\' | translate}}">{{$select.selected.name}}</ui-select-match>\n                <ui-select-choices repeat="context.name as context in voiceContexts | filter: $select.search">\n                  <div ng-bind-html="context.name | highlight: $select.search"></div>\n                </ui-select-choices>\n              </ui-select>\n              <span class="help-block">\n                {{ \'DESCRIPTION_VOICE_CONTEXT\' | translate }}\n              </span>\n              <span data-ng-show="(forms.general.context.$touched || forms.general.$submitted) && forms.general.context.$error.required" class="help-block help-block-error">\n                <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n              </span>\n            </div>\n            <!-- END CONTEXT -->\n\n						<button class="btn green-haze" type="submit" ng-click="next()">{{\'APPLICATION_CONTINUE\' | translate}} <i class="fa fa-angle-right"></i></button>\n					</form>\n				</wz-step>\n\n				<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n					<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n					<button class="btn green-haze" type="button" ng-click="previous()"><i class="fa fa-angle-left"></i> {{\'APPLICATION_BACK\' | translate}}</button>\n					<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n				</wz-step>\n  		</wizard>\n  	</div>\n  </div>\n  <!-- END PORTLET-->\n</div>\n'),a.put("app/yourdashboard/list/create.modal.html",'<div class="modal-header">\n  <h3 class="modal-title">{{ \'APPLICATION_NEW_DASHBOARD\' | translate }}</h3>\n</div>\n<div class="modal-body">\n  <form name="forms.dashboard" novalidate>\n\n    <!-- START NAME -->\n    <div class="form-group" data-ng-class="{\'has-error\': (forms.dashboard.name.$touched || forms.dashboard.$submitted) && forms.dashboard.name.$invalid}">\n      <label class="control-label">{{\'APPLICATION_NAME\' | translate}}<span class="required" aria-required="true">*</span></label>\n      <input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n      <span data-ng-show="(forms.dashboard.name.$touched || forms.dashboard.$submitted) && forms.dashboard.name.$error.required" class="help-block help-block-error">\n        <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n      </span>\n    </div>\n    <!-- END NAME -->\n\n    <!-- START DESCRIPTION -->\n    <div class="form-group">\n      <label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n      <textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"></textarea>\n    </div>\n    <!-- END DESCRIPTION -->\n\n  </form>\n</div>\n<div class="modal-footer">\n  <button class="btn btn-success" type="button" ng-click="ok()" ng-disabled="forms.dashboard.$invalid">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n  <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("app/yourdashboard/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-screen-desktop"></i>\n					<a href="/yourdashboards/list">{{ \'APPLICATION_YOUR_DASHBOARDS\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-docs font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_YOUR_DASHBOARDS\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="dashboards.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<button class="btn green-jungle " ng-click="create()">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_DASHBOARD\' | translate }}\n						</button>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getDashboards([\'name\', \'description\'])" csv-header="[\'Name\', \'Description\']" field-separator=";" filename="dashboards.csv">\n					<i class="icon-cloud-download"></i></a>\n					<!-- <a class="btn btn-icon-only btn-default fullscreen" href="#"></a> -->\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedDashboards" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="4">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.dashboardsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="dashboardByPage in dashboardsByPage | filter: $select.search">\n													<div ng-bind-html="dashboardByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(dashboard, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n						    <th st-sort="description">{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="dashboard in displayedDashboards" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input data-ng-hide="dashboard.defaultEntry" type="checkbox" checklist-model="dashboards.checked" checklist-value="dashboard.id"></td>\n								<td>{{dashboard.name}}</td>\n					      <td>{{dashboard.description}}</td>\n					      <td>\n									<a class="btn default btn-xs green-stripe" data-ng-href="/yourdashboards/show/{{dashboard.id}}">\n										{{ \'APPLICATION_VIEW\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/yourdashboards/view/{{dashboard.id}}/settings">\n										{{ \'APPLICATION_SETTINGS\' | translate}}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(dashboard.name,dashboard.id)" data-ng-class="{\'disabled\': dashboard.defaultEntry}">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedDashboards.length">\n								<td colspan="4" style="text-align:center;">\n									<i>{{ \'MESSAGE_NO_DASHBOARDS_AVAILABLE\' | translate }}</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="description" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_DESCRIPTION\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td/>\n						  </tr>\n					    <tr>\n					      <td colspan="4" class="text-center">\n					        <div st-pagination class="pagination" st-items-by-page="conf.dashboardsByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n				</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/yourdashboard/show/show.html",'<div class="col-md-12" ng-init="getDashboard()">\n  <adf-dashboard\n          name="{{dashboard.name}}"\n          collapsible="{{dashboard.collapsible}}"\n          maximizable="{{dashboard.maximizable}}"\n          enableconfirmdelete="{{dashboard.enableconfirmdelete}}"\n          structure="{{dashboard.structure}}"\n          editable="{{dashboard.editable}}"\n          adf-model="dashboard.model"/>\n</div>\n'),a.put("app/yourdashboard/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="getDashboard()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-screen-desktop"></i>\n					<a href="/yourdashboards/list">{{ \'APPLICATION_YOUR_DASHBOARDS\' | translate }}</a>\n					<i data-ng-show="dashboard" class="fa fa-angle-right"></i>\n				</li>\n				<li data-ng-show="dashboard">\n					<a href="#">{{dashboard.name}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img data-ng-src="assets/images/media/dashboard.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{dashboard.name}}\n					</div>\n					<!-- <div class="profile-usertitle-job">\n						{{user.role}}\n					</div> -->\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.yourdashboards.view.settings\')}">\n							<a data-ng-href="/yourdashboards/view/{{dashboard.id}}/settings">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_SETTINGS\' | translate}} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/yourdashboard/view/view.settings.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{ \'APPLICATION_DASHBOARD\' | translate}} {{ \'APPLICATION_SETTINGS\' | translate}} </span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{ \'APPLICATION_GENERAL\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n\n			<div class="portlet-body">\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.general" data-ng-submit="forms.general.$valid && updateDashboard()" novalidate>\n\n							<!-- START VISIBLE TO ADMIN -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_VISIBLE_TO_ADMIN\' | translate}}</label><br>\n								<input\n									bs-switch\n									ng-model="dashboard.admin"\n									type="checkbox"\n									switch-active="{{ radioSwitch.isActive }}"\n									switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n									switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n									switch-on-color="{{ radioSwitch.onColor }}"\n									switch-off-color="{{ radioSwitch.offColor }}"\n									switch-animate="{{ radioSwitch.animate }}"\n									switch-size="{{ radioSwitch.size }}"\n									switch-label="{{ radioSwitch.label }}"\n									switch-icon="{{ radioSwitch.icon }}"\n									switch-radio-off="{{ radioSwitch.radioOff }}"\n									switch-label-width="{{ radioSwitch.labelWidth }}"\n									switch-handle-width="{{ radioSwitch.handleWidth }}">\n							</div>\n							<!-- END VISIBLE TO ADMIN -->\n\n							<!-- START VISIBLE TO USER -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_VISIBLE_TO_USER\' | translate}}</label><br>\n								<input\n									bs-switch\n									ng-model="dashboard.user"\n									type="checkbox"\n									switch-active="{{ radioSwitch.isActive }}"\n									switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n									switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n									switch-on-color="{{ radioSwitch.onColor }}"\n									switch-off-color="{{ radioSwitch.offColor }}"\n									switch-animate="{{ radioSwitch.animate }}"\n									switch-size="{{ radioSwitch.size }}"\n									switch-label="{{ radioSwitch.label }}"\n									switch-icon="{{ radioSwitch.icon }}"\n									switch-radio-off="{{ radioSwitch.radioOff }}"\n									switch-label-width="{{ radioSwitch.labelWidth }}"\n									switch-handle-width="{{ radioSwitch.handleWidth }}">\n							</div>\n							<!-- END VISIBLE TO USER -->\n\n							<!-- START VISIBLE TO AGENT -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_VISIBLE_TO_AGENT\' | translate}}</label><br>\n								<input\n									bs-switch\n									ng-model="dashboard.agent"\n									type="checkbox"\n									switch-active="{{ radioSwitch.isActive }}"\n									switch-on-text="{{ \'APPLICATION_YES\' | translate }}"\n									switch-off-text="{{ \'APPLICATION_NO\' | translate }}"\n									switch-on-color="{{ radioSwitch.onColor }}"\n									switch-off-color="{{ radioSwitch.offColor }}"\n									switch-animate="{{ radioSwitch.animate }}"\n									switch-size="{{ radioSwitch.size }}"\n									switch-label="{{ radioSwitch.label }}"\n									switch-icon="{{ radioSwitch.icon }}"\n									switch-radio-off="{{ radioSwitch.radioOff }}"\n									switch-label-width="{{ radioSwitch.labelWidth }}"\n									switch-handle-width="{{ radioSwitch.handleWidth }}">\n							</div>\n							<!-- END VISIBLE TO AGENT -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<textarea type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="dashboard.description"></textarea>\n							</div>\n							<!-- END DESCRIPTION -->\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END ADVANCED TAB -->\n\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/zendesk/list/list.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<i class="icon-handbag"></i>\n					<a href="/zendesk/list">{{ \'APPLICATION_ZENDESK\' | translate }}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-handbag font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_ZENDESK\' | translate }}</a> </span>\n				</div>\n				<div class="actions">\n					<div class="btn-group" data-ng-show="accounts.checked.length">\n						<a class="btn red" href="#" data-ng-click="deleteItems()">\n							<i class="icon-trash"></i> {{ \'APPLICATION_DELETE\' | translate }}\n						</a>\n					</div>\n					<div class="btn-group">\n						<a class="btn green-jungle" href="#" data-toggle="dropdown">\n							<i class="icon-plus"></i> {{ \'APPLICATION_NEW_ACCOUNT\' | translate }} <i class="fa fa-angle-down"></i>\n						</a>\n						<ul class="dropdown-menu pull-right">\n							<li>\n								<a href="/zendesk/wizard">\n								<i class="icon-user-following"></i> {{ \'APPLICATION_WIZARD\' | translate }} </a>\n							</li>\n						</ul>\n					</div>\n					<a class="btn btn-icon-only btn-default" href="#" ng-csv="getAccounts([\'name\',\'username\',\'remoteUri\',\'authType\',\'token\',\'password\'])" csv-header="[\'Name\', \'Username\', \'Remote Address\', \'Authentication Type\', \'Token\', \'Password\']" field-separator=";" filename="zendesk_accounts.csv">\n					<i class="icon-cloud-download"></i></a>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<!-- START TABLE -->\n				<table st-table="displayedZdAccounts" st-pipe="initList" class="table table-striped table-bordered table-hover">\n					<div class="table-responsive">\n					  <thead>\n							<tr>\n								<th colspan="7">\n									<div class="row">\n										<div class="col-md-6">\n											<ui-select class="input-xsmall" ng-model="conf.accountsByPage" theme="bootstrap" ng-disabled="disabled">\n												<ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n												<ui-select-choices repeat="accountByPage in accountsByPage | filter: $select.search">\n													<div ng-bind-html="accountByPage.name | highlight: $select.search"></div>\n												</ui-select-choices>\n											</ui-select>\n										</div>\n										<div class="col-md-6">\n											<div class="input-group input-medium pull-right">\n												<input st-search placeholder="{{ \'APPLICATION_SEARCH\' | translate }}" class="form-control" type="search" />\n												<span class="input-group-addon">\n													<i class="fa fa-search"></i>\n												</span>\n											</div>\n										</div>\n									</div>\n								</th>\n							</tr>\n						  <tr>\n								<th class="small-cells" style="text-align: center; vertical-align: middle"><input type="checkbox" ng-change="check(account, checked)" checklist-model checklist-value="id"></th>\n						    <th st-sort="name">{{ \'APPLICATION_NAME\' | translate }}</th>\n						    <th st-sort="username">{{ \'APPLICATION_EMAIL\' | translate }}</th>\n								<th st-sort="remoteUri">{{ \'APPLICATION_REMOTE_ADDRESS\' | translate }}</th>\n								<th>{{ \'APPLICATION_DESCRIPTION\' | translate }}</th>\n								<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n						  </tr>\n					  </thead>\n					  <tbody>\n					    <tr data-ng-repeat="account in displayedZdAccounts" class="animate-repeat">\n								<td style="text-align: center; vertical-align: middle"><input type="checkbox" checklist-model="accounts.checked" checklist-value="account.id"></td>\n					      <td>{{account.name}}</td>\n					      <td>{{account.username}}</td>\n								<td>{{account.remoteUri}}</td>\n								<td>{{account.description}}</td>\n					      <td>\n					        <a class="btn default btn-xs blue-stripe" data-ng-href="/zendesk/view/{{account.id}}/account">\n										{{ \'APPLICATION_EDIT\' | translate }}\n					        </a>\n									<a class="btn default btn-xs green-stripe" data-ng-click="checkAccount(account.id)">\n										{{ \'APPLICATION_CHECK_CONNECTION\' | translate }}\n					        </a>\n					        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(account.name,account.id)">\n										{{ \'APPLICATION_DELETE\' | translate }}\n					        </a>\n					      </td>\n					    </tr>\n							<tr data-ng-hide="displayedZdAccounts.length">\n								<td colspan="7" style="text-align:center;">\n									<i>No account available</i>\n								</td>\n							</tr>\n					  </tbody>\n					  <tfoot>\n							<tr>\n								<td/>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="name" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_NAME\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="email" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_EMAIL\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td>\n									<div class="input-icon right">\n										<i class="fa fa-search"></i>\n										<input st-search="remoteUri" placeholder="{{ \'APPLICATION_SEARCH\' | translate }} {{ \'APPLICATION_BY\' | translate | lowercase }} {{ \'APPLICATION_REMOTE_ADDRESS\' | translate | lowercase}}" class="form-control" type="search"/>\n									</div>\n						    </td>\n						    <td/>\n								<td/>\n						  </tr>\n					    <tr>\n					      <td colspan="7" class="text-center">\n									<div class="pagination" st-pagination st-items-by-page="conf.accountsByPage.value" st-displayed-pages="7"></div>\n					      </td>\n					    </tr>\n					  </tfoot>\n					</div>\n				</table>\n				<!-- END TABLE -->\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("app/zendesk/view/view.account.html",'<div class="row">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_ACCOUNT\' | translate}}</span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_GENERALS\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n			<div class="portlet-body">\n				<div class="tab-content">\n					<!-- GENERAL TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n						<form name="forms.formSetting" data-ng-submit="forms.formSetting.$valid && updateItem()" novalidate>\n\n              <!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.name" required/>\n								<span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="account.description"/>\n							</div>\n							<!-- END DESCRIPTION -->\n\n              <!-- START USERNAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n								<label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="username" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.username" required/>\n								<span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END USERNAME -->\n\n              <!-- START REMOTE ADDRESS -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n								<label class="control-label">{{\'APPLICATION_REMOTE_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="url" name="remoteUri" placeholder="{{\'APPLICATION_REMOTE_ADDRESS\' | translate}}" class="form-control" data-ng-model="account.remoteUri" required />\n								<span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END USERNAME -->\n\n							<!-- START AUTH TYPE -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.authType.$invalid}">\n								<label class="control-label">{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}</label>\n								<ui-select data-ng-model="account.authType" name="authType" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="type in [\'password\', \'token\'] | filter: $select.search">\n										<div data-ng-bind="type | capitalize | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span data-ng-show="forms.formSetting.authType.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- START AUTH TYPE -->\n\n              <!-- START PASSWORD -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}" ng-slide-down="account.authType == \'password\'" lazy-render duration="1">\n								<label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="password" name="password" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.password" required/>\n								<span data-ng-show="forms.formSetting.password.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END PASSWORD -->\n\n              <!-- START TOKEN -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.token.$invalid}" ng-slide-down="account.authType == \'token\'" lazy-render duration="1">\n								<label class="control-label">{{\'APPLICATION_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="token" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="account.token" required/>\n								<span data-ng-show="forms.formSetting.token.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END TOKEN -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_UPDATE\' | translate}}"/>\n						</form>\n					</div>\n					<!-- END GENERAL TAB -->\n\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/zendesk/view/view.configuration.html",'<div class="row" data-ng-init="initConfiguration()">\n	<div class="col-md-12">\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_CONFIGURATION\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="createConfiguration()">\n	        <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="formValidation(formsConfiguration.info.$valid)">\n							<form name="formsConfiguration.info" novalidate>\n								<!-- START NAME -->\n								<div class="form-group" data-ng-class="{\'has-error\': formsConfiguration.info.$submitted && formsConfiguration.info.name.$invalid}">\n									<label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n									<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="configuration.name" required/>\n									<span data-ng-show="formsConfiguration.info.name.$invalid && formsConfiguration.info.$submitted" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END NAME -->\n\n								<!-- START DESCRIPTION -->\n								<div class="form-group">\n									<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n									<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="configuration.description"/>\n								</div>\n								<!-- END DESCRIPTION -->\n\n								<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n							</form>\n						</wz-step>\n\n						<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n							<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n							<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n						</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/zendesk/view/view.configurationSettings.html",'<div class="row" data-ng-init="getConfiguration();getVariables();">\n	<div class="col-md-12">\n		<div class="portlet light">\n			<div class="portlet-title tabbable-line">\n				<div class="caption caption-md">\n					<i class="icon-globe theme-font hide"></i>\n					<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATION\' | translate}}</span>\n				</div>\n				<ul class="nav nav-tabs">\n					<li class="active">\n						<a href="#" data-target="#tab_1_1" data-toggle="tab">{{\'APPLICATION_SUBJECT\' | translate}}</a>\n					</li>\n          <li>\n						<a href="#" data-target="#tab_1_2" data-toggle="tab">{{\'APPLICATION_DESCRIPTION\' | translate}}</a>\n					</li>\n          <li>\n						<a href="#" data-target="#tab_1_3" data-toggle="tab">{{\'APPLICATION_FIELDS\' | translate}}</a>\n					</li>\n				</ul>\n			</div>\n			<div class="portlet-body">\n				<div class="tab-content">\n					<!-- SUBJECT TAB -->\n					<div class="tab-pane active" id="tab_1_1">\n            <div class="row">\n              <div class="col-md-9">\n                <span class="caption-subject">All following fields will be join by blank space:</span>\n              </div>\n              <div class="col-md-3 pull-rigth">\n                <button class="btn btn-icon-only green" data-ng-click="addItemSubject()"><i class="fa fa-plus"></i></button>\n              </div>\n            </div>\n            <hr>\n            <div class="row" data-ng-repeat="subjectItem in subjectConfig">\n              <div class="col-md-3">\n                <ui-select ng-model="subjectItem.type" theme="bootstrap" ng-disabled="disabled" data-ng-change="changeType(subjectItem)">\n                  <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n                  <ui-select-choices repeat="item in fieldType | filter: $select.search">\n                    <div ng-bind-html="item | highlight: $select.search | capitalize"></div>\n                  </ui-select-choices>\n                </ui-select>\n              </div>\n              <div class="col-md-6" data-ng-if="subjectItem.type==\'string\'">\n                <div class="form-group">\n                  <input type="text" class="form-control" data-ng-model="subjectItem.content" data-ng-change="updateSubjectText(subjectItem)">\n                </div>\n              </div>\n              <div class="col-md-6" data-ng-if="subjectItem.type==\'variable\'">\n                <div class="form-group">\n                  <ui-select theme="bootstrap" ng-disabled="disabled" data-ng-model="subjectItem.VariableId" data-ng-change="updateSubjectText(subjectItem)">\n                    <ui-select-match placeholder="{{\'APPLICATION_SEARCH\' | translate}}">{{$select.selected.name}}</ui-select-match>\n                    <ui-select-choices repeat="variable.id as variable in variables | filter: $select.search">\n                      <div ng-bind-html="variable.name | highlight: $select.search"></div>\n                    </ui-select-choices>\n                  </ui-select>\n                </div>\n              </div>\n              <div class="col-md-3">\n                <div class="form-group">\n                  <button class="btn btn-icon-only red" data-ng-click="removeItemFromSubject(subjectItem)"><i class="fa fa-times"></i></button>\n                </div>\n              </div>\n            </div>\n					</div>\n					<!-- END SUBJECT TAB -->\n          <!-- DESCRIPTION TAB -->\n					<div class="tab-pane active" id="tab_1_2">\n\n					</div>\n					<!-- END DESCRIPTION TAB -->\n          <!-- FIELDS TAB -->\n					<div class="tab-pane active" id="tab_1_3">\n\n					</div>\n					<!-- END FIELDS TAB -->\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/zendesk/view/view.configurations.html",'<div ui-view class="profile-content">\n	<div class="row" data-ng-init="getConfigurations()">\n		<div class="col-md-12">\n			<div class="portlet light">\n				<div class="portlet-title  tabbable-line">\n					<div class="caption caption-md">\n						<i class="icon-globe theme-font hide"></i>\n						<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CONFIGURATIONS\' | translate}}</span>\n					</div>\n					<div class="actions">\n						<div class="btn-group">\n							<a class="btn green-jungle " href="/zendesk/view/{{account.id}}/configuration" data-toggle="dropdown">\n								<i class="icon-plus"></i> {{ \'APPLICATION_NEW_CONFIGURATION\' | translate }}\n							</a>\n						</div>\n					</div>\n				</div>\n				<div class="portlet-body">\n					<!-- START TABLE -->\n					<table class="table table-striped table-bordered table-hover">\n						  <thead>\n							  <tr>\n							    <th>{{\'APPLICATION_NAME\' | translate}}</th>\n									<th>{{\'APPLICATION_DESCRIPTION\' | translate}}</th>\n									<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n							  </tr>\n						  </thead>\n							<tbody>\n						    <tr data-ng-repeat="configuration in configurations">\n									<td>{{configuration.name}}</td>\n									<td>{{configuration.description}}</td>\n						      <td>\n										<a class="btn default btn-xs blue-stripe" data-ng-href="/zendesk/view/{{account.id}}/configurations/settings/{{configuration.id}}">\n											{{ \'APPLICATION_SETTINGS\' | translate}}\n						        </a>\n						        <a class="btn default btn-xs red-stripe" data-ng-click="deleteConfiguration(configuration.name,configuration.id)">\n											{{ \'APPLICATION_DELETE\' | translate }}\n						        </a>\n						      </td>\n						    </tr>\n								<tr data-ng-hide="configurations.length">\n									<td colspan="5" style="text-align:center;">\n										<i>No configuration available</i>\n									</td>\n								</tr>\n						  </tbody>\n					</table>\n					<!-- END TABLE -->\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/zendesk/view/view.field.html",'<div class="row" data-ng-init="initCustomField()">\n	<div class="col-md-12">\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_CUSTOM_FIELD\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="createItem()">\n	        <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="formValidation(forms.info.$valid)">\n							<form name="forms.info" novalidate>\n								<!-- START NAME -->\n								<div class="form-group" data-ng-class="{\'has-error\': forms.info.$submitted && forms.info.name.$invalid}">\n									<label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n									<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="field.name" required/>\n									<span data-ng-show="forms.info.name.$invalid && forms.info.$submitted" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END NAME -->\n\n								<!-- START CUSTOM FIELD ID -->\n								<div class="form-group" data-ng-class="{\'has-error\': forms.info.$submitted && forms.info.custom_field_id.$invalid}">\n									<label class="control-label">{{\'APPLICATION_CUSTOM_FIELD_ID\' | translate}} <span class="required" aria-required="true">*</span></label>\n									<input type="text" name="custom_field_id" placeholder="{{\'APPLICATION_CUSTOM_FIELD_ID\' | translate}}" class="form-control" data-ng-model="field.custom_field_id" required ng-remote-validate="/api/zendesk/fields/validate/custom_field_id/{{$stateParams.id}}"/>\n									<span data-ng-show="forms.info.custom_field_id.$invalid && forms.info.$submitted" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n									<span data-ng-show="(forms.info.custom_field_id.$touched || forms.info.$submitted) && forms.info.custom_field_id.$error.ngRemoteValidate" class="help-block help-block-error">\n					          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_CUSTOM_FIELD\' | translate}}.\n					        </span>\n								</div>\n								<!-- END CUSTOM FIELD ID -->\n\n								<!-- START DESCRIPTION -->\n								<div class="form-group">\n									<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n									<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="field.description"/>\n								</div>\n								<!-- END DESCRIPTION -->\n\n								<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n							</form>\n						</wz-step>\n\n						<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n							<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n							<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n						</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/zendesk/view/view.fieldSettings.html",'<div class="row" data-ng-init="initCustomField();getCustomField();">\n	<div class="col-md-12">\n\n		<!-- BEGIN  PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_CUSTOM_FIELD\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="updateField()">\n	        <wz-step title="{{\'APPLICATION_SETTINGS\' | translate}}" canexit="formValidation(forms.info.$valid)">\n							<form name="forms.info" novalidate>\n\n								<!-- START NAME -->\n								<div class="form-group" data-ng-class="{\'has-error\': forms.info.$submitted && forms.info.name.$invalid}">\n									<label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n									<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="field.name" required/>\n									<span data-ng-show="forms.info.name.$invalid && forms.info.$submitted" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END NAME -->\n\n								<!-- START CUSTOM FIELD ID -->\n								<div class="form-group" data-ng-class="{\'has-error\': forms.info.$submitted && forms.info.custom_field_id.$invalid}">\n									<label class="control-label">{{\'APPLICATION_CUSTOM_FIELD_ID\' | translate}} <span class="required" aria-required="true">*</span></label>\n									<input type="text" name="custom_field_id" placeholder="{{\'APPLICATION_CUSTOM_FIELD_ID\' | translate}}" class="form-control" data-ng-model="field.custom_field_id" required/>\n									<span data-ng-show="forms.info.custom_field_id.$invalid && forms.info.$submitted" class="help-block help-block-error">\n										<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n									</span>\n								</div>\n								<!-- END CUSTOM FIELD ID -->\n\n								<!-- START DESCRIPTION -->\n								<div class="form-group">\n									<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n									<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="field.description"/>\n								</div>\n								<!-- END DESCRIPTION -->\n\n								<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="goNext()"/>\n							</form>\n						</wz-step>\n\n						<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n							<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n							<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n						</wz-step>\n				</wizard>\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/zendesk/view/view.fields.html",'<div ui-view class="profile-content">\n	<div class="row" data-ng-init="getCustomFields()">\n		<div class="col-md-12">\n			<div class="portlet light">\n				<div class="portlet-title  tabbable-line">\n					<div class="caption caption-md">\n						<i class="icon-globe theme-font hide"></i>\n						<span class="caption-subject font-blue-madison bold uppercase">{{\'APPLICATION_CUSTOM_FIELDS\' | translate}}</span>\n					</div>\n					<div class="actions">\n						<div class="btn-group">\n							<a class="btn green-jungle " href="/zendesk/view/{{account.id}}/field" data-toggle="dropdown">\n								<i class="icon-plus"></i> {{ \'APPLICATION_NEW_CUSTOM_FIELD\' | translate }}\n							</a>\n						</div>\n					</div>\n				</div>\n				<div class="portlet-body">\n					<!-- START TABLE -->\n					<table class="table table-striped table-bordered table-hover">\n						  <thead>\n							  <tr>\n							    <th>{{\'APPLICATION_NAME\' | translate}}</th>\n							    <th>{{\'APPLICATION_CUSTOM_FIELD_ID\' | translate}}</th>\n									<th>{{\'APPLICATION_DESCRIPTION\' | translate}}</th>\n									<th>{{ \'APPLICATION_ACTIONS\' | translate }}</th>\n							  </tr>\n						  </thead>\n							<tbody>\n						    <tr data-ng-repeat="field in customFields">\n									<td>{{field.name}}</td>\n									<td>{{field.custom_field_id}}</td>\n									<td>{{field.description}}</td>\n						      <td>\n										<a class="btn default btn-xs blue-stripe" data-ng-href="/zendesk/view/{{account.id}}/fields/settings/{{field.id}}">\n											{{ \'APPLICATION_SETTINGS\' | translate}}\n						        </a>\n						        <a class="btn default btn-xs red-stripe" data-ng-click="deleteItem(field.name,field.id)">\n											{{ \'APPLICATION_DELETE\' | translate }}\n						        </a>\n						      </td>\n						    </tr>\n								<tr data-ng-hide="customFields.length">\n									<td colspan="5" style="text-align:center;">\n										<i>No custom fields available</i>\n									</td>\n								</tr>\n						  </tbody>\n					</table>\n					<!-- END TABLE -->\n				</div>\n			</div>\n		</div>\n	</div>\n</div>\n'),a.put("app/zendesk/view/view.html",'<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initView()">\n	<div class="col-md-12">\n		<div class="page-bar">\n			<ul class="page-breadcrumb">\n				<li>\n					<i class="icon-rocket"></i>\n					<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n          <i class="icon-handbag"></i>\n          <a href="/zendesk/list">{{ \'APPLICATION_ZENDESK\' | translate }}</a>\n					<i class="fa fa-angle-right"></i>\n				</li>\n				<li>\n					<a href="#">{{account.name}}</a>\n				</li>\n			</ul>\n		</div>\n\n		<!-- BEGIN PROFILE SIDEBAR -->\n		<div class="profile-sidebar">\n			<!-- PORTLET MAIN -->\n			<div class="portlet light profile-sidebar-portlet">\n				<!-- SIDEBAR USERPIC -->\n				<div class="profile-image">\n					<img src="assets/images/media/zendesk.png" class="img-responsive">\n				</div>\n				<!-- END SIDEBAR USERPIC -->\n				<!-- SIDEBAR USER TITLE -->\n				<div class="profile-usertitle">\n					<div class="profile-usertitle-name">\n						{{account.name}}\n					</div>\n					<div class="profile-usertitle-job">\n						{{account.remoteUri}}\n					</div>\n				</div>\n				<!-- END SIDEBAR USER TITLE -->\n				<!-- SIDEBAR MENU -->\n				<div class="profile-usermenu">\n					<ul class="nav">\n						<li data-ng-class="{active: $state.is(\'main.zendesk.view.account\')}">\n							<a ng-href="/zendesk/view/{{account.id}}/account">\n							<i class="icon-user"></i>\n							{{ \'APPLICATION_ACCOUNT\' | translate }} </a>\n						</li>\n						<li data-ng-class="{active: $state.includes(\'main.zendesk.view.fields\') || $state.is(\'main.zendesk.view.field\')}">\n							<a ng-href="/zendesk/view/{{account.id}}/fields">\n							<i class="icon-list"></i>\n							{{ \'APPLICATION_CUSTOM_FIELDS\' | translate }} </a>\n						</li>\n						<li data-ng-class="{active: $state.includes(\'main.zendesk.view.configurations\') || $state.is(\'main.zendesk.view.configuration\')}">\n							<a ng-href="/zendesk/view/{{account.id}}/configurations">\n							<i class="icon-settings"></i>\n							{{ \'APPLICATION_CONFIGURATIONS\' | translate }} </a>\n						</li>\n					</ul>\n				</div>\n				<!-- END MENU -->\n			</div>\n			<!-- END PORTLET MAIN -->\n		</div>\n		<!-- END BEGIN PROFILE SIDEBAR -->\n		<!-- BEGIN PROFILE CONTENT -->\n		<div ui-view class="profile-content">\n		</div>\n		<!-- END PROFILE CONTENT -->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),a.put("app/zendesk/wizard/wizard.html",'<!-- BEGIN PAGE HEADER-->\n<div class="row">\n	<div class="col-md-12">\n			<div class="page-bar">\n				<ul class="page-breadcrumb">\n					<li>\n						<i class="icon-rocket"></i>\n						<a href="/">{{ \'APPLICATION_DASHBOARD\' | translate }}</a>\n						<i class="fa fa-angle-right"></i>\n					</li>\n					<li>\n						<i class="icon-handbag"></i>\n						<a href="/zendesk/list">{{ \'APPLICATION_ZENDESK\' | translate }}</a>\n					</li>\n				</ul>\n			</div>\n		</div>\n</div>\n<!-- END PAGE HEADER-->\n\n<!-- BEGIN PAGE CONTENT-->\n<div class="row" data-ng-init="initWizard()">\n	<div class="col-md-12">\n		<!-- BEGIN Portlet PORTLET-->\n		<div class="portlet light bordered">\n			<div class="portlet-title">\n				<div class="caption font-green-sharp">\n					<i class="icon-notebook font-green-sharp"></i>\n					<span class="caption-subject">{{ \'APPLICATION_ACCOUNT\' | translate }} WIZARD</a> </span>\n				</div>\n			</div>\n			<div class="portlet-body">\n				<wizard on-finish="createItem()">\n          <wz-step title="{{\'APPLICATION_ACCOUNT_INFO\' | translate}}" canexit="exitValidation(forms.formSetting.$valid)">\n						<form name="forms.formSetting" novalidate>\n\n							<!-- START NAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.name.$invalid}">\n								<label class="control-label">{{\'APPLICATION_NAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="name" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.name" required/>\n								<span data-ng-show="forms.formSetting.name.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END NAME -->\n\n							<!-- START DESCRIPTION -->\n							<div class="form-group">\n								<label class="control-label">{{\'APPLICATION_DESCRIPTION\' | translate}}</label>\n								<input type="text" name="description" placeholder="{{\'APPLICATION_DESCRIPTION\' | translate}}" class="form-control" data-ng-model="item.description"/>\n							</div>\n							<!-- END DESCRIPTION -->\n\n              <!-- START USERNAME -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.username.$invalid}">\n								<label class="control-label">{{\'APPLICATION_USERNAME\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="username" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.username" required ng-remote-validate="/api/zendesk/accounts/validate/username"/>\n								<span data-ng-show="forms.formSetting.username.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n								<span data-ng-show="(forms.formSetting.username.$touched || forms.formSetting.$submitted) && forms.formSetting.username.$error.ngRemoteValidate" class="help-block help-block-error">\n				          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_USERNAME\' | translate}}.\n				        </span>\n							</div>\n							<!-- END USERNAME -->\n\n              <!-- START REMOTE ADDRESS -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.remoteUri.$invalid}">\n								<label class="control-label">{{\'APPLICATION_REMOTE_ADDRESS\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="url" name="remoteUri" placeholder="{{\'APPLICATION_REMOTE_ADDRESS\' | translate}}" class="form-control" data-ng-model="item.remoteUri" required ng-remote-validate="/api/zendesk/accounts/validate/remoteUri"/>\n								<span data-ng-show="forms.formSetting.remoteUri.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n								<span data-ng-show="(forms.formSetting.remoteUri.$touched || forms.formSetting.$submitted) && forms.formSetting.remoteUri.$error.ngRemoteValidate" class="help-block help-block-error">\n				          <strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_EXIST_DOMAIN\' | translate}}.\n				        </span>\n							</div>\n							<!-- END USERNAME -->\n\n							<!-- START AUTH TYPE -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.authType.$invalid}">\n								<label class="control-label">{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}</label>\n								<ui-select data-ng-model="item.authType" name="authType" theme="bootstrap" required>\n									<ui-select-match placeholder="{{\'APPLICATION_AUTHENTICATION_TYPE\' | translate}}">{{$select.selected | capitalize}}</ui-select-match>\n									<ui-select-choices repeat="type in [\'password\', \'token\'] | filter: $select.search">\n										<div data-ng-bind="type | capitalize | highlight: $select.search"></div>\n									</ui-select-choices>\n								</ui-select>\n								<span data-ng-show="forms.formSetting.authType.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- START AUTH TYPE -->\n\n              <!-- START PASSWORD -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.password.$invalid}" ng-slide-down="item.authType == \'password\'" lazy-render duration="1">\n								<label class="control-label">{{\'APPLICATION_PASSWORD\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="password" name="password" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.password" required/>\n								<span data-ng-show="forms.formSetting.password.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END PASSWORD -->\n\n              <!-- START TOKEN -->\n							<div class="form-group" data-ng-class="{\'has-error\': forms.formSetting.$submitted && forms.formSetting.token.$invalid}" ng-slide-down="item.authType == \'token\'" lazy-render duration="1">\n								<label class="control-label">{{\'APPLICATION_TOKEN\' | translate}} <span class="required" aria-required="true">*</span></label>\n								<input type="text" name="token" placeholder="{{\'APPLICATION_NAME\' | translate}}" class="form-control" data-ng-model="item.token" required/>\n								<span data-ng-show="forms.formSetting.token.$invalid && forms.formSetting.$submitted" class="help-block help-block-error">\n									<strong>{{\'APPLICATION_WARNING\' | translate}}!</strong> {{\'MESSAGE_REQUIRED_FIELD\' | translate}}.\n								</span>\n							</div>\n							<!-- END TOKEN -->\n\n							<input class="btn green-haze" type="submit" value="{{\'APPLICATION_CONTINUE\' | translate}}" data-ng-click="next()"/>\n\n						</form>\n					</wz-step>\n\n					<wz-step title="{{\'APPLICATION_CONFIRM\' | translate}}">\n						<p>{{\'MESSAGE_CONFIGURATION_COMPLETED\' | translate}}</p>\n						<input type="submit" class="btn green-haze" wz-next value="{{\'APPLICATION_CONFIRM\' | translate}}"/>\n					</wz-step>\n\n				</wizard>\n\n			</div>\n		</div>\n		<!-- END Portlet PORTLET-->\n	</div>\n</div>\n<!-- END PAGE CONTENT-->\n'),
+a.put("components/footer/footer.html",'<!-- BEGIN FOOTER -->\n<div class="page-footer">\n  <div class="page-footer-inner">\n     2015 &copy; xCALLY MOTION by Xenialab srl.\n  </div>\n  <div class="scroll-to-top">\n    <i class="icon-arrow-up"></i>\n  </div>\n</div>\n<!-- END FOOTER -->\n'),a.put("components/header/header.html",'<!-- BEGIN HEADER INNER -->\n<div class="page-header-inner" data-ng-init="initHeader()">\n  <!-- BEGIN LOGO -->\n  <div class="page-logo">\n    <a href="/">\n    <img src="assets/images/logo.png" alt="logo" class="logo-default"/>\n    </a>\n    <div class="menu-toggler sidebar-toggler">\n      <!-- DOC: Remove the above "hide" to enable the sidebar toggler button on header -->\n    </div>\n  </div>\n  <!-- END LOGO -->\n  <!-- BEGIN HEADER SEARCH BOX -->\n  <!-- DOC: Apply "search-form-expanded" right after the "search-form" class to have half expanded search box -->\n  <form class="search-form hide" action="extra_search.html" method="GET">\n    <div class="input-group">\n      <input type="text" class="form-control" placeholder="Search..." name="query">\n      <span class="input-group-btn">\n      <a href="javascript:;" class="btn submit"><i class="icon-magnifier"></i></a>\n      </span>\n    </div>\n  </form>\n  <!-- END HEADER SEARCH BOX -->\n  <!-- BEGIN RESPONSIVE MENU TOGGLER -->\n  <a href="javascript:;" class="menu-toggler responsive-toggler" data-toggle="collapse" data-target=".navbar-collapse">\n  </a>\n  <!-- END RESPONSIVE MENU TOGGLER -->\n  <!-- BEGIN TOP NAVIGATION MENU -->\n  <div class="top-menu">\n    <ul class="nav navbar-nav pull-right">\n      <!-- BEGIN LANGUAGE BAR -->\n      <!-- DOC: Apply "dropdown-dark" class after below "dropdown-extended" to change the dropdown styte -->\n      <li class="dropdown dropdown-language">\n        <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">\n        <img ng-src="assets/images/flags/{{ language }}.png">\n        <i class="fa fa-angle-down"></i>\n        </a>\n        <ul class="dropdown-menu dropdown-menu-default">\n          <li>\n            <a href="#" ng-click="changeLanguage(\'it\')">\n            <img alt="" src="assets/images/flags/it.png"> Italian </a>\n          </li>\n          <li>\n            <a href="#" ng-click="changeLanguage(\'en_EN\')">\n            <img alt="" src="assets/images/flags/en_EN.png"> English </a>\n          </li>\n        </ul>\n      </li>\n      <!-- END LANGUAGE BAR -->\n      <!-- BEGIN USER LOGIN DROPDOWN -->\n      <!-- DOC: Apply "dropdown-dark" class after below "dropdown-extended" to change the dropdown styte -->\n      <li class="dropdown dropdown-user">\n        <a href="#" class="dropdown-toggle" dropdown-menu-hover data-toggle="dropdown" data-close-others="true">\n        <img class="img-circle" data-ng-src="api/users/avatar/{{getCurrentUser().userpic || \'unknown_avatar\'}}" alt="...">\n        <span class="username username-hide-on-mobile">\n          {{ getCurrentUser().fullname }} </span>\n        <i class="fa fa-angle-down"></i>\n        </a>\n        <ul class="dropdown-menu dropdown-menu-default">\n          <li>\n            <a ng-href=" {{isAdmin() ? \'/users/view/\'+getCurrentUser().id+\'/account\' : \'/agents/view/\'+getCurrentUser().id+\'/account\'}}">\n            <i class="icon-key"></i>Change password</a>\n          </li>\n          <!-- <li>\n            <a href="#">\n            <i class="icon-calendar"></i> My Calendar </a>\n          </li> -->\n          <!-- <li>\n            <a href="#">\n            <i class="icon-envelope-open"></i> My Inbox <span class="badge badge-danger">\n            3 </span>\n            </a>\n          </li> -->\n          <!-- <li>\n            <a href="#/todo">\n            <i class="icon-rocket"></i> My Tasks <span class="badge badge-success">\n            7 </span>\n            </a>\n          </li> -->\n          <!-- <li class="divider">\n          </li> -->\n          <!-- <li>\n            <a href="#">\n            <i class="icon-lock"></i> Lock Screen </a>\n          </li> -->\n          <li data-ng-click="logout()">\n            <a href="#">\n            <i class="icon-logout"></i> Log Out </a>\n          </li>\n        </ul>\n      </li>\n      <!-- END USER LOGIN DROPDOWN -->\n      <!-- BEGIN QUICK SIDEBAR TOGGLER -->\n      <!-- DOC: Apply "dropdown-dark" class after below "dropdown-extended" to change the dropdown styte -->\n      <li class="dropdown dropdown-quick-sidebar-toggler" data-ng-click="toggleQuickSidebar()">\n        <a href="#" class="dropdown-toggle">\n        <i class="icon-logout"></i>\n        </a>\n      </li>\n      <!-- END QUICK SIDEBAR TOGGLER -->\n    </ul>\n  </div>\n  <!-- END TOP NAVIGATION MENU -->\n</div>\n<!-- END HEADER INNER -->\n'),a.put("components/modal/delete.html",'<div class="modal-header">\n  <button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">&times;</button>\n  <h4 ng-if="modal.title" ng-bind="modal.title" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n  <p ng-if="modal.text" ng-bind="modal.text"></p>\n  <div ng-if="modal.html" ng-bind-html="modal.html"></div>\n</div>\n<div class="modal-footer">\n  <button ng-repeat="button in modal.buttons" ng-class="button.classes" ng-click="button.click($event)" ng-bind="button.text" class="btn"></button>\n</div>\n'),a.put("components/quickSidebar/modal/add.html",'<div class="modal-header">\n  <button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">&times;</button>\n  <h4 ng-if="modal.title" ng-bind="modal.title | translate" class="modal-title"></h4>\n</div>\n\n<div class="modal-body">\n  <div class="portlet box blue">\n		<div class="portlet-title">\n			<div class="caption">\n				<i class="icon-people"></i>{{\'APPLICATION_SELECTED_AGENTS\' | translate}}\n			</div>\n		</div>\n		<div class="portlet-body">\n			<ul>\n				<li data-ng-repeat="item in items">\n					 {{item.fullname}}\n				</li>\n\n        <li data-ng-repeat="item in selected.items">\n					 {{item.fullname}}\n				</li>\n			</ul>\n		</div>\n	</div>\n\n  <ui-select multiple name="items" ng-model="selected.items" theme="bootstrap">\n    <ui-select-match placeholder="{{\'APPLICATION_SELECTED_AGENTS\' | translate}}">{{$item.fullname}}</ui-select-match>\n    <ui-select-choices repeat="{id: agent.id, fullname: agent.fullname} as agent in agents.rows | filter: $select.search">\n      {{agent.fullname}}\n    </ui-select-choices>\n  </ui-select>\n</div>\n\n<div class="modal-footer">\n  <button class="btn btn-success" type="button" data-ng-click="ok()" data-ng-show="selected.items.length">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n  <button class="btn default" type="button" data-ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n</div>\n'),a.put("components/quickSidebar/modal/close.html",'<div class="modal-header">\n  <button ng-if="modal.dismissable" type="button" ng-click="$dismiss()" class="close">&times;</button>\n  <h4 ng-if="modal.title" ng-bind="modal.title | translate" class="modal-title"></h4>\n</div>\n<div class="modal-body">\n  <p ng-if="modal.text" ng-bind="modal.text | translate"></p>\n  <!-- <div ng-if="modal.html" ng-bind-html="modal.html"></div> -->\n</div>\n<div class="modal-footer">\n  <button class="btn btn-danger" type="button" ng-click="ok()">{{ \'APPLICATION_CONFIRM\' | translate }}</button>\n  <button class="btn default" type="button" ng-click="cancel()">{{ \'APPLICATION_CANCEL\' | translate }}</button>\n  <!-- <button ng-repeat="button in modal.buttons" ng-class="button.classes" ng-click="button.click($event)" ng-bind="button.text" class="btn"></button> -->\n</div>\n'),a.put("components/quickSidebar/quickSidebar.html",'<div class="page-quick-sidebar">\n  <div class="nav-justified">\n    <ul class="nav nav-tabs nav-justified">\n      <li data-ng-class="{active:currentTab==0}" data-ng-click="goToTab(0)">\n        <a href="#">\n          <!-- <i class="icon-people"></i> <span class="badge badge-danger">2</span> -->\n          <i class="icon-people"></i>\n        </a>\n      </li>\n      <li data-ng-class="{active:currentTab==1}" data-ng-click="goToTab(1)">\n        <a href="#">\n          <!-- <i class="icon-eye"></i> <span class="badge badge-success">7</span> -->\n        <i class="icon-eye"></i>\n        </a>\n      </li>\n      <li data-ng-class="{active:currentTab==2}" data-ng-click="goToTab(2)">\n        <a href="#">\n          <!-- <i class="icon-globe"></i> <span class="badge badge-success">7</span> -->\n        <i class="icon-globe"></i>\n        </a>\n      </li>\n      <li data-ng-class="{active:currentTab==3}" data-ng-click="goToTab(3)">\n        <a href="#">\n          <!-- <i class="icon-bubbles"></i> <span class="badge badge-success">7</span> -->\n        <i class="icon-bubbles"></i>\n        </a>\n      </li>\n    </ul>\n    <div class="tab-content">\n      <div class="tab-pane page-quick-sidebar-chat" ng-class="{active:currentTab==0 && !messagesTab}">\n        <div class="page-quick-sidebar-chat-users" data-rail-color="#ddd" data-wrapper-class="page-quick-sidebar-list" >\n          <div class="quicksidebar-search">\n            <div class="input-group">\n							<input type="search" class="form-control" placeholder="{{\'APPLICATION_SEARCH\' | translate}} {{\'APPLICATION_AGENT\' | translate}}..." ng-model="searchAgent">\n							<span class="input-group-btn">\n							<i class="icon-magnifier"></i>\n							</span>\n						</div>\n          </div>\n          <ul class="media-list list-items" data-ng-style="style" ng-scrollbars>\n            <li class="media animate-repeat" data-ng-repeat="agent in agents.rows | orderBy:\'-online\' | filter:searchAgent as resultsAgent" data-ng-if="agent.id !== currentUser.id">\n              <div class="media-status">\n                <!-- <span class="badge badge-success">8</span> -->\n              </div>\n              <img class="media-object" data-ng-src="api/users/avatar/{{agent.userpic ? agent.userpic : \'unknown_avatar\'}}" alt="{{agent.fullname}}">\n              <div class="media-body" data-ng-click="goToMessage(agent.id)">\n                <h4 class="media-heading"><span class="item-status">{{agent.fullname | characters:15 :true}} {{agent.internal}}</h4>\n                <div class="media-heading-small">\n                   <span class="badge badge-empty" data-ng-class="agent.online ? \'badge-success\' : \'badge-danger\'"></span></span> {{\'APPLICATION_LAST_SEEN\' | translate | lowercase}} <time is="relative-time" datetime="{{agent.updatedAt}}">April 1, 2014</time>\n                </div>\n              </div>\n            </li>\n            <li class="media animate-repeat" ng-if="agents.rows.length == 0">\n              <div class="media-body" style="text-align: center;">\n                <h4 class="media-heading"><i>{{\'MESSAGE_NO_AGENTS_FOUND\' | translate | lowercase}}</i></h4>\n              </div>\n            </li>\n            <li class="media animate-repeat" ng-if="resultsAgent.length == 0">\n              <div class="media-body" style="text-align: center;">\n                <h4 class="media-heading"><i>{{\'MESSAGE_NO_AGENTS_FOUND\' | translate | lowercase}}</i></h4>\n              </div>\n            </li>\n          </ul>\n        </div>\n      </div>\n      <div class="tab-pane page-quick-sidebar-chat" ng-class="{active:currentTab==1 && !messagesTab}">\n        <div class="page-quick-sidebar-chat-users" data-rail-color="#ddd" data-wrapper-class="page-quick-sidebar-list">\n          <div class="quicksidebar-search">\n            <div class="input-group">\n              <input type="search" class="form-control" placeholder="{{\'APPLICATION_SEARCH\' | translate}} {{\'APPLICATION_USER\' | translate}}..." ng-model="searchUser">\n              <span class="input-group-btn">\n              <i class="icon-magnifier"></i>\n              </span>\n            </div>\n          </div>\n          <ul class="media-list list-items"  data-ng-style="style" ng-scrollbars>\n            <li class="media animate-repeat" data-ng-repeat="user in users.rows | orderBy:\'-online\' | filter:searchUser as resultsUser" data-ng-if="user.id !== currentUser.id">\n              <div class="media-status">\n                <!-- <span class="badge badge-success">3</span> -->\n              </div>\n              <img class="media-object" data-ng-src="api/users/avatar/{{user.userpic ? user.userpic : \'unknown_avatar\'}}" alt="{{user.fullname}}">\n              <div class="media-body" data-ng-click="goToMessage(user.id)">\n                <h4 class="media-heading">{{user.fullname | characters:15 :true}} {{user.internal}}</h4>\n                <div class="media-heading-small">\n                   <span class="badge badge-empty" data-ng-class="user.online ? \'badge-success\' : \'badge-danger\'"></span> {{\'APPLICATION_LAST_SEEN\' | translate | lowercase}} <time is="relative-time" datetime="{{user.updatedAt}}">April 1, 2014</time>\n                </div>\n              </div>\n            </li>\n            <li class="media animate-repeat" ng-if="users.rows.length == 0">\n              <div class="media-body" style="text-align: center;">\n                <h4 class="media-heading"><i>{{\'MESSAGE_NO_USERS_FOUND\' | translate | lowercase}}</i></h4>\n              </div>\n            </li>\n            <li class="media animate-repeat" ng-if="resultsUser.length == 0">\n              <div class="media-body" style="text-align: center;">\n                <h4 class="media-heading"><i>{{\'MESSAGE_NO_USERS_FOUND\' | translate | lowercase}}</i></h4>\n              </div>\n            </li>\n          </ul>\n        </div>\n      </div>\n      <div class="tab-pane page-quick-sidebar-chat" ng-class="{active:currentTab==2 && !messagesTab}">\n        <div class="page-quick-sidebar-chat-users" data-rail-color="#ddd" data-wrapper-class="page-quick-sidebar-list">\n          <div class="quicksidebar-search">\n            <div class="input-group">\n              <input type="search" class="form-control" placeholder="{{\'APPLICATION_SEARCH\' | translate}} {{\'APPLICATION_USER\' | translate}}..." ng-model="searchChatRoomsExternals">\n              <span class="input-group-btn">\n              <i class="icon-magnifier"></i>\n              </span>\n            </div>\n          </div>\n          <ul class="media-list list-items"  data-ng-style="style" ng-scrollbars>\n            <li class="media animate-repeat" data-ng-repeat="chatRoom in chatRooms | filter:{type:\'external\'} | filter:searchChatRoomsExternals as resultsChatRoomsExternals">\n              <div class="media-status">\n                <!-- <span class="badge badge-success">3</span> -->\n              </div>\n              <img class="media-object" data-ng-src="api/users/avatar/{{user.userpic ? user.userpic : \'unknown_avatar\'}}" alt="{{user.fullname}}">\n              <div class="media-body" data-ng-click="goToMessage(null, chatRoom.id)">\n                <h4 class="media-heading">{{chatRoom.ChatVisitor.email}}</h4>\n                <div class="media-heading-small">\n                   {{\'APPLICATION_LAST_SEEN\' | translate | lowercase}} <time is="relative-time" datetime="{{chatRoom.createdAt}}">April 1, 2014</time>\n                </div>\n              </div>\n            </li>\n            <li class="media animate-repeat" data-ng-if="resultsChatRoomsExternals.length === 0">\n              <div class="media-body" style="text-align: center;">\n                <h4 class="media-heading"><i>{{\'MESSAGE_NO_CHATS_FOUND\' | translate | lowercase}}</i></h4>\n              </div>\n            </li>\n          </ul>\n        </div>\n      </div>\n      <div class="tab-pane page-quick-sidebar-chat" ng-class="{active:currentTab==3 && !messagesTab}">\n        <div class="page-quick-sidebar-chat-users" data-rail-color="#ddd" data-wrapper-class="page-quick-sidebar-list">\n          <div class="quicksidebar-search">\n            <div class="input-group">\n              <input type="search" class="form-control" placeholder="{{\'APPLICATION_SEARCH\' | translate}} {{\'APPLICATION_USER\' | translate}}..." ng-model="searchChatRoomsGroups">\n              <span class="input-group-btn">\n              <i class="icon-magnifier"></i>\n              </span>\n            </div>\n          </div>\n          <ul class="media-list list-items"  data-ng-style="style" ng-scrollbars>\n            <li class="media animate-repeat" data-ng-repeat="chatRoom in chatRooms | filter:chatRoomsGroupsGreaterThan(2) | filter:searchChatRoomsGroups as resultsChatRoomsGroups">\n              <div class="media-status">\n                <!-- <span class="badge badge-success">3</span> -->\n              </div>\n              <img class="media-object" data-ng-src="api/users/avatar/{{user.userpic ? user.userpic : \'unknown_avatar\'}}" alt="{{user.fullname}}">\n              <div class="media-body" data-ng-click="goToMessage(null, chatRoom.id)">\n                <h4 class="media-heading">{{chatRoom.name}}</h4>\n                <div class="media-heading-small">\n                   {{\'APPLICATION_LAST_SEEN\' | translate | lowercase}} <time is="relative-time" datetime="{{chatRoom.updatedAt}}">April 1, 2014</time>\n                </div>\n                <div class="media-heading-small">\n                  <div data-ng-repeat="user in chatRoom.Users | map: \'fullname\'" class="inline">\n                    {{ $last ? user : user + \', \'}}\n                  </div>\n                </div>\n              </div>\n            </li>\n            <!-- <li class="media animate-repeat" ng-if="chatRooms.length == 0">\n              <div class="media-body" style="text-align: center;">\n                <h4 class="media-heading"><i>{{\'MESSAGE_NO_CHAT_FOUND\' | translate | lowercase}}</i></h4>\n              </div>\n            </li> -->\n            <li class="media animate-repeat" data-ng-if="resultsChatRoomsGroups.length === 0">\n              <div class="media-body" style="text-align: center;">\n                <h4 class="media-heading"><i>{{\'MESSAGE_NO_CHATS_FOUND\' | translate | lowercase}}</i></h4>\n              </div>\n            </li>\n          </ul>\n        </div>\n      </div>\n      <div class="tab-pane page-quick-sidebar-chat page-quick-sidebar-content-item-shown" ng-class="{active:messagesTab}">\n        <div class="page-quick-sidebar-chat-users" data-rail-color="#ddd" data-wrapper-class="page-quick-sidebar-list" >\n          <div class="quicksidebar-search">\n            <div class="input-group">\n              <input type="search" class="form-control" placeholder="{{\'APPLICATION_SEARCH\' | translate}} {{\'APPLICATION_MESSAGE\' | translate}}..." ng-model="searchMessage">\n              <span class="input-group-btn">\n              <i class="icon-magnifier"></i>\n              </span>\n            </div>\n          </div>\n        </div>\n        <div class="page-quick-sidebar-item">\n          <div class="page-quick-sidebar-chat-user" data-wrapper-class="page-quick-sidebar-list">\n            <div class="page-quick-sidebar-nav">\n                <a href="#" class="page-quick-sidebar-back-to-list" data-ng-click="goBack()"><i class="icon-arrow-left"></i>Back</a>\n            </div>\n            <div id="page-quick-sidebar-chat-user-messages" class="page-quick-sidebar-chat-user-messages" data-ng-style="style2" ng-scrollbars>\n              <div class="post animate-repea" data-ng-repeat="chatMessage in chatRoom.ChatMessages | filter:searchMessage as resultsMessage" data-ng-class="chatMessage.UserId === currentUser.id ? \'in\' : \'out\'">\n                <img class="avatar" alt="" ng-src="api/users/avatar/unknown_avatar"/>\n                <div class="message">\n                  <span class="arrow"></span>\n                  <a href="#" class="name">{{chatMessage.User.fullname || chatMessage.ChatVisitor .fullname}}</a> -\n                  <span class="datetime">\n                    <time is="relative-time" datetime="{{chatMessage.createdAt}}">\n                      April 1, 2014\n                    </time>\n                  </span>\n                  <ng-emoticons class="body" emoticons-data="chatMessage.body" emoticons-options="options"/>\n                  <!-- <div class="body" ng-bind-html="chatMessage.body"></div>\n                  <!-- <div ng-bind-html="chatMessage.body | emoticons:{\'linkTarget\':\'_blank\',\'newLine\':true}" class="ng-emoticons"></div> --> -->\n                </div>\n              </div>\n\n              <div class="media-body" style="text-align: center;" data-ng-if="resultsMessage.length == 0">\n                <h5 class="media-heading"><i>{{\'MESSAGE_NO_MESSAGES_FOUND\' | translate | lowercase}}</i></h5>\n              </div>\n\n              <div class="media-body" style="text-align: center;" data-ng-if="chatRoom.status === \'close\'">\n                <h5 class="media-heading"><i>{{\'MESSAGE_CHAT_CLOSED\' | translate | lowercase}}</i></h5>\n              </div>\n\n            </div>\n            <div class="page-quick-sidebar-chat-user-form">\n              <textarea rows="3" class="form-control" style="border:none;resize: none;" placeholder="Type a message here..." ng-enter="sendMessage()" data-ng-model="message.body" data-ng-disabled="chatRoom.status === \'close\'"></textarea>\n              <div class="btn-group" style="width:100%;background-color:white">\n                <button type="button" class="btn btn-default" style="border:none" data-ng-disabled="chatRoom.status === \'close\'" data-ng-click="addAgent(chatRoom.id)"><i class="icon-plus font-blue"></i></button>\n                <button type="button" class="btn btn-default pull-right" style="border:none" data-ng-disabled="chatRoom.status === \'close\'" data-ng-click="closeChatRoom(chatRoom.id)" data-ng-show="chatRoom.type === \'external\'"><i class="icon-close font-red"></i></button>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n'),a.put("components/sidebar/sidebar.html",'<div id="page-sidebar" class="page-sidebar navbar-collapse collapse">\n  <!-- BEGIN SIDEBAR MENU -->\n  <!-- DOC: Apply "page-sidebar-menu-light" class right after "page-sidebar-menu" to enable light sidebar menu style(without borders) -->\n  <!-- DOC: Apply "page-sidebar-menu-hover-submenu" class right after "page-sidebar-menu" to enable hoverable(hover vs accordion) sub menu mode -->\n  <!-- DOC: Apply "page-sidebar-menu-closed" class right after "page-sidebar-menu" to collapse("page-sidebar-closed" class must be applied to the body element) the sidebar sub menu mode -->\n  <!-- DOC: Set data-auto-scroll="false" to disable the sidebar from auto scrolling/focusing -->\n  <!-- DOC: Set data-keep-expand="true" to keep the submenues expanded -->\n  <!-- DOC: Set data-auto-speed="200" to adjust the sub menu slide up/down speed -->\n  <ul class="page-sidebar-menu" data-keep-expanded="false" data-auto-scroll="true" data-slide-speed="200" data-ng-class="{\'page-sidebar-menu-closed\': settings.layout.pageSidebarClosed}">\n    <!-- DOC: To remove the search box from the sidebar you just need to completely remove the below "sidebar-search-wrapper" LI element -->\n    <li class="sidebar-search-wrapper">\n      <!-- BEGIN RESPONSIVE QUICK SEARCH FORM -->\n      <!-- DOC: Apply "sidebar-search-bordered" class the below search form to have bordered search box -->\n      <!-- DOC: Apply "sidebar-search-bordered sidebar-search-solid" class the below search form to have bordered & solid search box -->\n      <form class="sidebar-search sidebar-search-bordered" action="extra_search.html" method="POST">\n        <a href="javascript:;" class="remove">\n        <i class="icon-close"></i>\n        </a>\n        <!-- <div class="input-group">\n          <input type="text" class="form-control" placeholder="Search...">\n          <span class="input-group-btn">\n          <a href="javascript:;" class="btn submit"><i class="icon-magnifier"></i></a>\n          </span>\n        </div> -->\n      </form>\n      <!-- END RESPONSIVE QUICK SEARCH FORM -->\n    </li>\n\n    <!-- START DASHBOARD CASE -->\n    <li class="start" data-ng-show="isAssociated(\'dashboard\')" data-ng-class="{active: $state.is(\'main.dashboard\')}">\n      <a href="/dashboard/voice">\n        <i class="icon-rocket"></i>\n        <span class="title">{{\'APPLICATION_DASHBOARD\' | translate}}</span>\n        <span data-ng-show="$state.includes(\'main.dashboard\')" class="selected"></span>\n      </a>\n    </li>\n    <!-- END DASHBOARD CASE -->\n\n    <!-- START YOURDASHBOARD LIST CASE -->\n    <li data-ng-class="{active: $state.is(\'main.yourdashboards.show\')}" data-ng-show="Auth.isAdmin()">\n      <a href="javascript:;">\n        <i class="icon-screen-desktop"></i>\n        <span class="title" >{{\'APPLICATION_YOUR_DASHBOARDS\' | translate}}</span>\n        <span class="arrow" data-ng-class="{ open: $state.includes(\'main.yourdashboards.show\') }"></span>\n      </a>\n      <ul class="sub-menu" data-ng-init="getSidebarDashboards()">\n        <li data-ng-class="{active: $stateParams.id == dashboard.id && $state.includes(\'main.yourdashboards.show\')}" data-ng-repeat="dashboard in dashboards" data-ng-show="dashboard[Auth.getRole()] && dashboard.visible">\n          <a href="/yourdashboards/show/{{dashboard.id}}" >\n          <i class="icon-screen-tablet"></i>\n          <span class="title" >{{dashboard.name}}  </span>\n          </a>\n        </li>\n       </ul>\n    </li>\n    <!-- END YOURDASHBOARD LIST CASE -->\n\n    <!-- START STAFF SEPARATOR -->\n    <li class="heading" data-ng-show="Auth.isAdmin()">\n      <h3 class="uppercase"> <span >{{\'APPLICATION_STAFF\' | translate}}  </span> </h3>\n    </li>\n    <!-- END STAFF SEPARATOR -->\n\n    <!-- START USERS CASE -->\n    <!-- <li data-ng-show="isAssociated(\'users\')" data-ng-class="{active: $state.includes(\'main.users\')}"> -->\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.users\')}">\n      <a href="/users/list">\n        <i class="icon-eye"></i>\n        <span class="title" >{{\'APPLICATION_USERS\' | translate}}</span>\n        <span data-ng-show="$state.includes(\'main.users\')" class="selected"></span>\n      </a>\n    </li>\n    <!-- END USERS CASE -->\n\n    <!-- START AGENTS CASE -->\n    <!-- <li data-ng-show="isAssociated(\'agents\')" data-ng-class="{active: $state.includes(\'main.agents\')}"> -->\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.agents\')}">\n      <a href="/agents/list">\n        <i class="icon-people"></i>\n        <span class="title" >{{\'APPLICATION_AGENTS\' | translate}}</span>\n        <span data-ng-show="$state.includes(\'main.agents\')" class="selected"></span>\n      </a>\n    </li>\n    <!-- END AGENTS CASE -->\n\n    <!-- START TEAMS CASE -->\n    <li data-ng-show="isAssociated(\'teams\')" data-ng-class="{active: $state.includes(\'main.teams\')}">\n      <a href="/teams/list">\n        <i class="icon-shield"></i>\n        <span class="title" >{{\'APPLICATION_TEAMS\' | translate}}</span>\n        <span data-ng-show="$state.includes(\'main.teams\')" class="selected"></span>\n      </a>\n    </li>\n    <!-- END TEAMS CASE -->\n    <!-- END STAFF SEPARATOR -->\n\n    <!-- START CHANNELS SEPARATOR -->\n    <li class="heading">\n      <h3 class="uppercase"> <span >{{\'APPLICATION_CHANNELS\' | translate}}  </span> </h3>\n    </li>\n\n    <!-- START icon-link CASE -->\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{ active: $state.includes(\'main.voice\') }">\n      <a href="javascript:;">\n        <i class="icon-earphones-alt"></i>\n        <span class="title">{{ \'APPLICATION_VOICE\' | translate}}</span>\n        <span class="arrow" data-ng-class="{ open: $state.includes(\'main.voice\') }"></span>\n      </a>\n\n      <ul class="sub-menu">\n        <li data-ng-class="{active: $state.includes(\'main.voice.queues\')}">\n          <a href="/voice/queues/list">\n          <i class="icon-docs"></i>\n          <span class="title">{{\'APPLICATION_QUEUES\' | translate}}</span>\n          </a>\n        </li>\n        <li>\n          <a href="javascript:;">\n          <i class="icon-directions"></i>\n          <span class="title"> {{ \'APPLICATION_ROUTES\' | translate}} </span>\n          <span class="arrow" data-ng-class="{ open: $state.includes(\'main.voice.routes\') }"></span>\n          <ul class="sub-menu">\n            <li data-ng-class="{active: $state.includes(\'main.voice.routes.inbound\')}">\n              <a href="/voice/routes/inbound/list">\n              <i class="icon-call-in"></i>\n              <span class="title"> {{\'APPLICATION_INBOUND\' | translate}} </span>\n              </a>\n            </li>\n            <li data-ng-class="{active: $state.includes(\'main.voice.routes.outbound\')}">\n              <a href="/voice/routes/outbound/list">\n              <i class="icon-call-out"></i>\n              <span class="title"> {{\'APPLICATION_OUTBOUND\' | translate}} </span>\n              </a>\n            </li>\n            <li data-ng-class="{active: $state.includes(\'main.voice.routes.internal\')}">\n              <a href="/voice/routes/internal/list">\n              <i class="icon-reload"></i>\n              <span class="title"> {{\'APPLICATION_INTERNALS\' | translate}} </span>\n              </a>\n            </li>\n          </ul>\n          </a>\n        </li>\n        <li data-ng-class="{active: $state.includes(\'main.voice.contexts\')}">\n          <a href="/voice/contexts/list">\n          <i class="icon-docs"></i>\n          <span class="title"> {{\'APPLICATION_CONTEXTS\' | translate}} </span>\n          </a>\n        </li>\n        <li data-ng-class="{active: $state.includes(\'main.voice.voicemails\')}">\n          <a href="/voice/voicemails/list">\n          <i class="icon-envelope-letter"></i>\n          <span class="title"> {{\'APPLICATION_VOICEMAILS\' | translate}} </span>\n          </a>\n        </li>\n        <li data-ng-class="{active: $state.includes(\'main.voice.mohs\')}">\n          <a href="/voice/mohs/list">\n          <i class="icon-music-tone"></i>\n          <span class="title"> {{\'APPLICATION_MOH\' | translate}} </span>\n          </a>\n        </li>\n        <!-- START REALTIME CASE -->\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.voice.realtime\')}">\n          <a href="/voice/realtime/view/agents">\n          <i class="icon-energy"></i>\n          <span class="title">{{\'APPLICATION_REALTIME\' | translate}}</span>\n          </a>\n        </li>\n        <!-- END REALTIME CASE -->\n      </ul>\n    </li>\n    <!-- END icon-link CASE -->\n\n    <!-- START CHAT CASE -->\n    <li data-ng-show="isAssociated(\'chat\')" data-ng-class="{ active: $state.includes(\'main.chat\') }">\n      <a href="javascript:;">\n        <i class="icon-bubble"></i>\n        <span class="title">{{\'APPLICATION_CHAT\' | translate}}</span>\n        <span class="arrow" data-ng-class="{ open: $state.includes(\'main.chat\') }"></span>\n      </a>\n      <ul class="sub-menu">\n        <li data-ng-class="{active: $state.includes(\'main.chat.websites\')}">\n          <a href="/chat/websites/list">\n          <i class="icon-globe"></i>\n          <span class="title"> {{\'APPLICATION_WEB_SITES\' | translate}} </span>\n          </a>\n        </li>\n        <li data-ng-class="{active: $state.includes(\'main.chat.queues\')}">\n          <a href="/chat/queues/list">\n          <i class="icon-docs"></i>\n          <span class="title"> {{\'APPLICATION_QUEUES\' | translate}} </span>\n          </a>\n        </li>\n        <!-- START REALTIME CASE -->\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.chat.realtime\')}">\n          <a href="/chat/realtime/view/agents">\n          <i class="icon-energy"></i>\n          <span class="title">{{\'APPLICATION_REALTIME\' | translate}}</span>\n          </a>\n        </li>\n        <!-- END REALTIME CASE -->\n      </ul>\n    </li>\n    <!-- END CHAT CASE -->\n\n    <!-- START MAIL CASE -->\n    <li data-ng-class="{ active: $state.includes(\'main.mail\') }">\n      <a href="javascript:;">\n        <i class="icon-envelope"></i>\n        <span class="title">{{\'APPLICATION_MAIL\' | translate}}</span>\n        <span class="arrow" data-ng-class="{ open: $state.includes(\'main.mail\') }"></span>\n      </a>\n\n      <ul class="sub-menu">\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.mail.accounts\') || $state.includes(\'main.mail.account\')}">\n          <a href="/mail/accounts/list">\n          <i class="icon-notebook"></i>\n          <span class="title"> {{\'APPLICATION_ACCOUNTS\' | translate}} </span>\n          </a>\n        </li>\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.mail.queues\') || $state.includes(\'main.mail.queue\')}">\n          <a href="/mail/queues/list">\n          <i class="icon-docs"></i>\n          <span class="title"> {{\'APPLICATION_QUEUES\' | translate}} </span>\n          </a>\n        </li>\n        <li data-ng-class="{active: $state.includes(\'main.mail.inbox\')}">\n          <a href="/mail/inbox/incoming">\n          <i class="icon-note"></i>\n          <span class="title"> {{\'APPLICATION_INBOX\' | translate}} </span>\n          </a>\n        </li>\n        <!-- <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.mail.statistics\')}">\n          <a href="/mail/statistics/summary">\n          <i class="icon-eyeglass"></i>\n          <span class="title"> {{\'APPLICATION_STATISTICS\' | translate}} </span>\n          </a>\n        </li> -->\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.mail.templates\')}">\n          <a href="/mail/templates/list">\n          <i class="icon-docs"></i>\n          <span class="title"> {{\'APPLICATION_TEMPLATES\' | translate}} </span>\n          </a>\n        </li>\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.mail.timeline\')}">\n          <a href="/mail/timeline/list">\n          <i class="icon-list"></i>\n          <span class="title"> {{\'APPLICATION_TIMELINE\' | translate}} </span>\n          </a>\n        </li>\n        <!-- START REALTIME CASE -->\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.mail.realtime\')}">\n          <a href="/mail/realtime/view/agents">\n          <i class="icon-energy"></i>\n          <span class="title">{{\'APPLICATION_REALTIME\' | translate}}</span>\n          </a>\n        </li>\n        <!-- END REALTIME CASE -->\n      </ul>\n    </li>\n    <!-- END MAIL CASE -->\n\n    <!-- START FAX CASE -->\n    <li data-ng-class="{active: $state.includes(\'main.fax\')}">\n    <!-- <li data-ng-show="license.fax" data-ng-class="{active: $state.includes(\'main.fax\')}"> -->\n      <a href="javascript:;">\n        <i class="icon-paper-plane"></i>\n        <span class="title"> {{ \'APPLICATION_FAX\' | translate}}</span>\n        <span class="arrow" data-ng-class="{ open: $state.includes(\'main.fax\') }"></span>\n      </a>\n\n      <ul class="sub-menu">\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.fax.accounts\')}">\n          <a href="/fax/accounts/list">\n          <i class="icon-notebook"></i>\n          <span class="title"> {{ \'APPLICATION_ACCOUNTS\' | translate}} </span>\n          </a>\n        </li>\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.fax.queues\')}">\n          <a href="/fax/queues/list">\n          <i class="icon-docs"></i>\n          <span class="title"> {{ \'APPLICATION_QUEUES\' | translate }} </span>\n          </a>\n        </li>\n        <li data-ng-class="{active: $state.includes(\'main.fax.inbox\')}">\n          <a href="/fax/inbox/incoming">\n          <i class="icon-note"></i>\n          <span class="title"> {{ \'APPLICATION_INBOX\' | translate }} </span>\n          </a>\n        </li>\n        <!-- <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.fax.statistics\')}">\n          <a href="/fax/statistics/summary">\n          <i class="icon-eyeglass"></i>\n          <span class="title"> {{ \'APPLICATION_STATISTICS\' | translate }} </span>\n          </a>\n        </li> -->\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.fax.automations\')}">\n          <a href="/fax/automations/list">\n          <i class="icon-settings"></i>\n          <span class="title"> {{\'APPLICATION_AUTOMATIONS\' | translate}} </span>\n          </a>\n        </li>\n        <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.fax.timeline\')}">\n          <a href="/fax/timeline/list">\n          <i class="icon-list"></i>\n          <span class="title"> {{\'APPLICATION_TIMELINE\' | translate}} </span>\n          </a>\n        </li>\n      </ul>\n    </li>\n    <!-- END FAX CASE -->\n    <!-- END CHANNELS SEPARATOR -->\n\n    <!-- START INTEGRATIONS SEPARATOR -->\n    <li data-ng-show="Auth.isAdmin()" class="heading">\n      <h3 class="uppercase"> <span translate> APPLICATION_INTEGRATIONS </span> </h3>\n    </li>\n    <!-- START INTEGRATION CASE -->\n    <!--\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.is(\'main.market\')}">\n      <a href="/market">\n        <i class="icon-handbag"></i>\n        <span class="title" translate>Market Place</span>\n        <span data-ng-show="$state.includes(\'main.market\')" class="selected"></span>\n      </a>\n    </li>\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.is(\'main.integrations.list\')}">\n      <a href="/integrations/list">\n        <i class="icon-game-controller"></i>\n        <span class="title" translate>Test Your App</span>\n        <span data-ng-show="$state.includes(\'main.integrations.list\')" class="selected"></span>\n      </a>\n    </li>\n    -->\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.zendesk\')}">\n      <a href="/zendesk/list">\n        <i class="icon-handbag"></i>\n        <span class="title" >{{\'APPLICATION_ZENDESK\' | translate}}</span>\n        <span data-ng-show="$state.includes(\'main.zendesk\')" class="selected"></span>\n      </a>\n    </li>\n    <!-- END INTEGRATIONS SEPARATOR -->\n\n    <!-- START TOOLS SEPARATOR -->\n    <li data-ng-show="Auth.isAdmin()" class="heading">\n      <h3 class="uppercase"> <span >{{\'APPLICATION_TOOLS\' | translate}}  </span> </h3>\n    </li>\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.triggers\')}">\n      <a href="/triggers/list">\n      <i class="icon-bulb"></i>\n      <span class="title"> {{\'APPLICATION_TRIGGERS\' | translate}} </span>\n      </a>\n    </li>\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.automations\')}">\n      <a href="/automations/list">\n      <i class="icon-settings"></i>\n      <span class="title"> {{\'APPLICATION_AUTOMATIONS\' | translate}} </span>\n      </a>\n    </li>\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.trunks\')}">\n      <a href="/trunks/list">\n      <i class="icon-link"></i>\n      <span class="title"> {{\'APPLICATION_TRUNKS\' | translate}} </span>\n      </a>\n    </li>\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.intervals\')}">\n      <a href="/intervals/list">\n      <i class="icon-clock"></i>\n      <span class="title"> {{\'APPLICATION_INTERVALS\' | translate}} </span>\n      </a>\n    </li>\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.variables\')}">\n      <a href="/variables/list">\n      <i class="fa fa-eye"></i>\n      <span class="title" >{{\'APPLICATION_VARIABLES\' | translate}}  </span>\n      </a>\n    </li>\n    <!-- START CALLYSQUARE CASE -->\n    <!-- <li data-ng-show="isAssociated(\'callysquare\')" data-ng-class="{active: $state.includes(\'main.square\')}"> -->\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.square\')}">\n      <a href="javascript:;">\n        <i class="fa fa-superscript"></i>\n        <span class="title" >{{\'APPLICATION_CALLYSQUARE\' | translate}}</span>\n        <span class="arrow"></span>\n      </a>\n      <ul class="sub-menu">\n        <li data-ng-class="{active: $state.includes(\'main.square.projects\')}">\n          <a href="/square/projects/list">\n          <i class="fa fa-slack"></i>\n          <span class="title" >{{\'APPLICATION_PROJECTS\' | translate}}  </span>\n          </a>\n        </li>\n        <li data-ng-class="{active: $state.includes(\'main.square.odbc\')}">\n          <a href="/square/odbcs/list">\n          <i class="fa fa-database"></i>\n          <span class="title" >{{\'APPLICATION_ODBC\' | translate}}  </span>\n          </a>\n        </li>\n       </ul>\n    </li>\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.yourdashboards.list\') || $state.includes(\'main.yourdashboards.settings\')}">\n      <a href="/yourdashboards/list">\n      <i class="icon-grid"></i>\n      <span class="title"> {{\'APPLICATION_DASHBOARDS_MANAGER\' | translate}} </span>\n      </a>\n    </li>\n    <!-- END CALLYSQUARE CASE -->\n\n    <!-- START AUTODIALER CASE -->\n    <!-- <li data-ng-show="Auth.isAdmin()">\n      <a href="javascript:;">\n        <i class="icon-call-out"></i>\n        <span class="title">AutoDialer</span>\n        <span class="arrow"></span>\n      </a>\n      <ul class="sub-menu">\n      </ul>\n    </li> -->\n    <!-- END AUTODIALER CASE -->\n\n    <!-- START ANALYTICS CASE -->\n    <!-- <li data-ng-show="isAssociated(\'analytics\')"> -->\n    <!-- <li data-ng-show="Auth.isAdmin()">\n      <a href="#/analytics">\n        <i class="icon-graph"></i>\n        <span class="title" >{{\'APPLICATION_ANALYTICS\' | translate}}</span>\n      </a>\n    </li> -->\n    <!-- END ANALYTICS CASE -->\n\n    <!-- END TOOLS SEPARATOR -->\n\n    <!-- START AUDIO SEPARATOR -->\n    <li data-ng-show="Auth.isAdmin()" class="heading">\n      <h3 class="uppercase"> <span >{{\'APPLICATION_AUDIO\' | translate}}  </span> </h3>\n    </li>\n    <!-- END AUDIO SEPARATOR -->\n\n    <!-- START AUDIO CASE -->\n    <!-- <li data-ng-show="isAssociated(\'audio\')" data-ng-class="{active: $state.is(\'main.sound\')}"> -->\n    <li data-ng-show="Auth.isAdmin()" data-ng-class="{active: $state.includes(\'main.sounds\')}">\n      <a href="/sounds/list">\n        <i class="icon-music-tone-alt"></i>\n        <span class="title" >{{\'APPLICATION_SOUNDS\' | translate}}</span>\n        <span data-ng-show="$state.includes(\'main.sounds\')" class="selected"></span>\n      </a>\n    </li>\n    <!-- END AUDIO CASE -->\n\n  </ul>\n  <!-- END SIDEBAR MENU -->\n</div>\n');
+}]);
\ No newline at end of file
diff --git a/public/app/808268be.app.css b/public/app/808268be.app.css
new file mode 100644
index 0000000..421845f
--- /dev/null
+++ b/public/app/808268be.app.css
@@ -0,0 +1 @@
+.badge,.btn-arrow-link,.btn-lg{vertical-align:middle}.chart-tooltip,.chart-tooltip .label,.chat-form,.dashboard-stat .more,.dashboard-stat2 .display:after,.dashboard-stat2 .progress-info,.dashboard-stat2 .progress-info .progress,.dashboard-stat:after,.dropdown-menu li>a,.feeds li .col1,.feeds li:after,.form .form-actions:after,.general-item-list>.item>.item-head:after,.portlet>.portlet-title:after,.social-icons:after,.tabbable:after,.table-toolbar:after,.tiles .tile .tile-object:after,.tiles:after{clear:both}.animate-enter{-webkit-transition:1s linear all;transition:1s linear all;opacity:0}.animate-enter.animate-enter-active{opacity:1}#faxMessages::-webkit-scrollbar-track{background-color:#fff!important}#faxMessages::-webkit-scrollbar{width:5px}.interval-to{min-height:34px;padding:9px 12px}.inbox{margin-bottom:20px}.inbox .inbox{margin-bottom:0}.inbox .tab-content{overflow:inherit}.inbox .inbox-loading{display:none;font-size:22px;font-weight:300}.inbox .inbox-nav{margin:0;padding:0;list-style:none}.inbox .inbox-nav li{position:relative}.inbox .inbox-nav li a{color:#4d82a3;display:block;font-size:15px;border-left:none;text-align:left!important;padding:8px 14px;margin-bottom:1px;background:#f4f9fd}.inbox .inbox-nav li.active a,.inbox .inbox-nav li.active:hover a{color:#fff;border-left:none;background:#169ef4!important;text-decoration:none}.inbox .inbox-nav li.active b{top:12px;right:-6px;width:6px;position:absolute;display:inline-block;border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid #169ef4}.inbox .inbox-nav li:hover a{color:#4d82a3;background:#eef4f7!important;text-decoration:none}.inbox .inbox-nav li.compose-btn a{color:#fff;text-shadow:none;text-align:center;margin-bottom:18px;background:#35aa47}.inbox .pagination-control,.inbox th.text-right{text-align:right}.inbox .inbox-nav li.compose-btn i,.inbox .inbox-nav li.compose-btn:hover i{top:1px;color:#fff;font-size:15px;position:relative;background:0 0!important}.inbox .inbox-nav li.compose-btn a:hover{background-color:#1d943b!important}.inbox .inbox-header{overflow:hidden}.inbox .inbox-header h1{margin:0 0 10px;color:#666}.inbox tr label,.inbox ul.inbox-nav{margin-bottom:0}.inbox .pagination-control .pagination-info{display:inline-block;padding-right:10px;font-size:14px;line-height:14px}.inbox tr{color:#777;font-size:13px}.inbox tr label{display:inline-block}.inbox tr.unread td{font-weight:600}.audio-portlet .audio-portlet-title,h1,h2,h3,h4,h5,h6{font-family:"Open Sans",sans-serif;font-weight:300}.inbox td i.icon-paper-clip{top:2px;color:#d8e0e5;font-size:17px;position:relative}.inbox tr i.icon-star,.inbox tr i.icon-trash{cursor:pointer}.inbox tr i.icon-star{color:#eceef0}.inbox tr i.icon-star:hover,.inbox tr i.inbox-started{color:#fd7b12}.inbox .table td,.inbox .table th{border:none}.inbox .table th{background:#eef4f7;border-bottom:solid 5px #fff}.inbox .inbox-drafts,.inbox-view-info{border-top:solid 1px #eee;border-bottom:solid 1px #eee}.inbox th label.inbox-select-all{color:#828f97;font-size:13px;padding:1px 4px 0}.inbox ul.inbox-nav li{padding:0}.inbox ul.inbox-nav li span{color:#828f97;font-size:12px;margin-right:10px}.inbox ul.inbox-nav i{color:#fff;padding:1px 0;font-size:15px;cursor:pointer;background:#d0dde4!important}.inbox ul.inbox-nav i:hover{background:#169ef4!important}.inbox td.text-right{width:100px;text-align:right}.inbox td.inbox-small-cells,.small-cells{width:10px}.inbox .table-hover tbody tr:hover>td,.inbox .table-hover tbody tr:hover>th,.inbox .table-striped tbody>tr:nth-child(odd)>td,.inbox .table-striped tbody>tr:nth-child(odd)>th{background:#f8fbfd;cursor:pointer}.inbox .table-hover tbody tr:hover>td,.inbox .table-hover tbody tr:hover>th{background:#eef4f7}.inbox .inbox-drafts{padding:8px 0;text-align:center}.inbox-view-header{margin-bottom:20px}.inbox-view-header h1{color:#666;font-size:22px;line-height:24px;margin-bottom:0!important}.inbox-view-header h1 a{top:-2px;color:#fff;cursor:pointer;font-size:13px;padding:2px 7px;line-height:16px;position:relative;background:#b0bcc4;display:inline-block}.inbox-view-header h1 a:hover{background:#aab5bc;text-decoration:none}.inbox-view-header i.icon-print{color:#94a4ab;cursor:pointer;font-size:14px;display:inline-block;padding:6px 8px!important;background:#edf1f4!important}.inbox-view-header i.icon-print:hover{background:#e7ebef!important}.inbox-view-info{color:#666;padding:5px 0;margin-bottom:10px}.inbox-view-info strong{color:#666;margin:0 10px 0 5px}.inbox-view-info .inbox-info-btn{text-align:right}.inbox-view-info .inbox-info-btn ul{text-align:left}.inbox-view-info button{top:2px;color:#94a4ab;font-size:13px;margin-left:4px;padding:3px 10px;position:relative;background:#edf1f4}.inbox-view-info button:hover{color:#94a4ab;background:#e7ebef}.inbox-view{color:#666;padding:15px 0 0}.inbox-view a{color:#169ce9}.inbox-attached{line-height:16px}.inbox-attached a{margin:0 2px}.inbox-attached span,.inbox-compose-btn button i{margin-right:3px}.inbox-attached img{height:auto;max-width:250px;margin-bottom:5px}.inbox-attached strong{color:#555;display:block;font-size:13px}.inbox-attached .margin-bottom-25{margin-bottom:25px}.inbox-attached .margin-bottom-15{margin-bottom:15px}.inbox-compose{margin-top:1px;border:1px solid #eee}.inbox-compose-btn{padding:8px 4px;background:#f0f6fa}.inbox-compose-attachment{padding:8px}.inbox-compose-attachment .btn{padding:4px 10px}.inbox-compose-btn button{color:#fff;font-size:14px;margin-left:4px;padding:4px 10px;background:#c0cfdd}.inbox-compose-btn button:hover{color:#fff;background:#4d90fe}.inbox-compose .inbox-form-group{margin-bottom:0;position:relative;border-bottom:solid 1px #eee}.inbox-compose .controls{margin-left:85px}.inbox-compose .inbox-form-group>label{width:80px;float:left;color:#979797;text-align:right}.inbox-compose .controls>input{border:none!important}.inbox-compose .controls-to{padding-right:55px}.inbox-compose .controls-bcc,.inbox-compose .controls-cc{padding-right:20px}.inbox-compose .inbox-form-group a.close{top:13px;right:10px;position:absolute}.inbox-compose .mail-to .inbox-cc-bcc{display:inline-block;top:7px;right:10px;color:#979797;font-size:14px;cursor:pointer;position:absolute}.inbox-compose .mail-to .inbox-bcc{margin-left:5px}.inbox-compose .mail-to inbox-bcc:hover,.inbox-compose .mail-to inbox-cc:hover{color:#777}.inbox-compose .wysihtml5{padding:0!important;margin:0!important;border:0!important}.inbox-compose .wysihtml5-sandbox{padding:0!important;margin:5px 0 0!important;display:block!important;border:0!important;width:100%!important;border-left:none;border-right:none}.inbox-compose .wysihtml5-toolbar{border:0;border-bottom:1px solid #eee}.inbox-compose .wysihtml5-toolbar>li{height:34px;margin-right:0;margin-bottom:0}.inbox-compose .wysihtml5-toolbar>li>a,.inbox-compose .wysihtml5-toolbar>li>div>a{background:#fff}.inbox-compose .wysihtml5-toolbar>li>a:hover,.inbox-compose .wysihtml5-toolbar>li>div>a:hover{background:#f1f1f1;border-radius:0}.inbox-compose .wysihtml5-toolbar .dropdown.open .dropdown-toggle,ul.wysihtml5-toolbar a.btn.wysihtml5-command-active{background:#eee!important}@media (max-width:480px){.inbox-compose .inbox-form-group>label{margin-top:7px}}#mailMessages::-webkit-scrollbar-track{background-color:#fff!important}#mailMessages::-webkit-scrollbar{width:5px}.inbox-editor{padding:10px;margin:0!important}blockquote{margin-top:20px;margin-left:10px;margin-bottom:20px;border-left:1px solid #666!important;padding-left:5px;display:block;opacity:.7;filter:alpha(opacity=70)}.wysiwyg-color-black{color:#000}.wysiwyg-color-silver{color:silver}.wysiwyg-color-gray{color:gray}.wysiwyg-color-white{color:#fff}.wysiwyg-color-maroon{color:maroon}.wysiwyg-color-red{color:red}.wysiwyg-color-purple{color:purple}.wysiwyg-color-fuchsia{color:#f0f}.wysiwyg-color-green{color:green}.wysiwyg-color-lime{color:#0f0}.wysiwyg-color-olive{color:olive}.wysiwyg-color-yellow{color:#ff0}.wysiwyg-color-navy{color:navy}.wysiwyg-color-blue{color:#00f}.wysiwyg-color-teal{color:teal}.wysiwyg-color-aqua{color:#0ff}.wysiwyg-color-orange{color:orange}.our-integrations h3{margin-bottom:0;padding:10px;background:#f9f9f9}.our-integrations small{display:block;font-size:12px;color:#999;margin-top:5px}.our-integrations .integration-info{padding:10px;overflow:hidden;background:#f5f5f5}.audio-portlet .audio-portlet-title{margin-bottom:0;padding:10px;background:#f9f9f9;font-size:17px;word-wrap:break-word;margin-top:20px;line-height:1.1;color:inherit;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.audio-portlet .audio-portlet-title a{display:block;word-wrap:break-word;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.audio-portlet .file-info{padding:10px;overflow:hidden;background:#f5f5f5;height:105px}.audio-portlet-wrapper{float:left;margin:0 0 0 20px;-webkit-animation:fadeInUpm .5s;animation:fadeInUpm .5s;-moz-transition:all .5s linear;-webkit-transition:all .5s linear;transition:all .5s linear}.animate-repeat{list-style:none;box-sizing:border-box}.animate-repeat.ng-enter,.animate-repeat.ng-leave,.animate-repeat.ng-move{-webkit-transition:all linear .5s;transition:all linear .5s}.animate-repeat.ng-enter,.animate-repeat.ng-leave.ng-leave-active,.animate-repeat.ng-move{opacity:0;max-height:0}.animate-repeat.ng-enter.ng-enter-active,.animate-repeat.ng-leave,.animate-repeat.ng-move.ng-move-active{opacity:1;max-height:600px}audio{-moz-transition:all .5s linear;-webkit-transition:all .5s linear;transition:all .5s linear;border-radius:0}@media (min-width:502px){.audio-portlet-wrapper{width:240px}.editable-error,audio{width:220px}}@media (max-width:501px){.audio-portlet-wrapper{width:320px}.editable-error,audio{width:300px}}.editable-error{white-space:pre-line}#description_div,.table-scrollable>.table>tbody>tr>th,.table-scrollable>.table>tfoot>tr>td,.table-scrollable>.table>tfoot>tr>th,.table-scrollable>.table>thead>tr>th{white-space:nowrap}#description_div{text-overflow:ellipsis;overflow:hidden;word-wrap:break-word}.portlet-title.collapsible{cursor:pointer}.group{background-color:#fff;padding:15px;border-radius:5px;border:1px solid #666}.group-conditions{margin-left:20px}.alert-group{margin-top:10px;margin-bottom:10px;border-color:#dcc896}.condition,.group{margin-top:15px;margin-bottom:15px}div[contenteditable]{max-height:100px;overflow:auto;display:block;width:100%;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}a,button,code,div,img,input,label,li,p,pre,select,span,table,td,textarea,th,ul{-webkit-border-radius:0!important;-moz-border-radius:0!important;border-radius:0!important}.img-circle{border-radius:50%!important}.img-rounded{border-radius:6px!important}body{color:#333;font-family:"Open Sans",sans-serif;padding:0!important;margin:0!important;font-size:13px;direction:ltr}@-ms-viewport{width:device-width}@-o-viewport{width:device-width}@viewport{width:device-width}@-ms-viewport{width:auto!important}::-webkit-scrollbar{width:12px}::-webkit-scrollbar-track{background-color:#eaeaea;border-radius:0;box-shadow:none;border:0}::-webkit-scrollbar-thumb{background-color:#cecece;border-radius:0;box-shadow:none;border:0}::-webkit-scrollbar-thumb:hover{background-color:#aaa}.bars,.chart,.pie,.primary-font{font-family:"Open Sans",sans-serif!important}h1{font-size:33px}h2{font-size:27px}h3{font-size:23px}h4{font-size:17px}h5{font-size:13px}h6{font-size:12px}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:#444}h1.block,h2.block,h3.block,h4.block,h5.block,h6.block{padding-top:10px;padding-bottom:10px}a{text-shadow:none;color:#5b9bd1}a:active,a:focus,a:hover{outline:0}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:0}.list-unstyled li>.list-unstyled{margin-left:25px}code{border:1px solid #e1e1e1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,.1);-moz-box-shadow:0 1px 4px rgba(0,0,0,.1);box-shadow:0 1px 4px rgba(0,0,0,.1)}.disabled-link .disable-target{opacity:.5!important;filter:alpha(opacity=50)!important}.disabled-link .disable-target:hover,.disabled-link:hover{cursor:not-allowed!important}a:hover{color:#3175af;cursor:pointer}.primary-link{color:#65A0D0;font-weight:600}.primary-link:hover{color:#5194ca}.rounded-2{border-radius:2px!important}.rounded-3{border-radius:3px!important}.rounded-4{border-radius:4px!important}.circle{border-radius:25px!important}.circle-right{border-radius:0 25px 25px 0!important}.circle-left{border-radius:25px 0 0 25px!important}.circle-bottom{border-radius:0 0 25px 25px!important}.circle-top{border-radius:25px 25px 0 0!important}.display-hide,.display-none{display:none}.hidden{display:none!important}.bold{font-weight:700!important}.thin{font-weight:300!important}.uppercase{text-transform:uppercase!important}.fix-margin{margin-left:0!important}.border{border:1px solid red}.font-hg{font-size:23px}.font-lg{font-size:18px}.font-md{font-size:14px}.font-sm{font-size:13px}.font-xs{font-size:11px}.inline{display:inline}.inline-block{display:inline-block}.text-align-reverse{text-align:right}.top-news a,.top-news span{text-align:left;display:block}.no-space{margin:0!important;padding:0!important}.no-margin{margin:0}.margin-bottom-5{margin-bottom:5px}.margin-bottom-10{margin-bottom:10px!important}.margin-top-10{margin-top:10px!important}.margin-top-15{margin-top:15px!important}.margin-bottom-15{margin-bottom:15px!important}.margin-bottom-20{margin-bottom:20px!important}.margin-top-20{margin-top:20px!important}.margin-bottom-25{margin-bottom:25px!important}.margin-bottom-30{margin-bottom:30px!important}.margin-right-10{margin-right:10px!important}.visible-ie8{display:none}.ie8 .visible-ie8{display:inherit!important}.visible-ie9{display:none}.ie9 .visible-ie9{display:inherit!important}.hidden-ie8{display:inherit}.ie8 .hidden-ie8{display:none!important}.hidden-ie9{display:inherit}.ie9 .hidden-ie9{display:none!important}@media (max-width:1024px){.hidden-1024{display:none}}@media (max-width:480px){.hidden-480{display:none}}@media (max-width:320px){.hidden-320{display:none}}.scrollspy-example{position:relative;height:200px;margin-top:10px;overflow:auto}.util-btn-group-margin-bottom-5 .btn-group,.util-btn-margin-bottom-5 .btn{margin-bottom:5px!important}.user-info{margin-bottom:10px!important}.user-info img{float:left;margin-right:5px}.number-stats .stat-left,.number-stats .stat-left .stat-chart{float:right}.user-info .details{display:inline-block}.user-info .label{font-weight:300;font-size:11px}.top-news{color:#fff;margin:8px 0}.top-news em{font-size:13px;margin-bottom:0;font-style:normal;display:block}.top-news em i{font-size:14px}.top-news span{font-size:18px;margin-bottom:5px}.top-news a{padding:10px;position:relative;margin-bottom:10px}.top-news a .top-news-icon{right:8px;bottom:15px;opacity:.3;font-size:35px;position:absolute;filter:alpha(opacity=30)}.blog-images{margin-bottom:0}.blog-images li{padding:0;margin:0;display:inline}.blog-images li a:hover{text-decoration:none}.blog-images li img{width:50px;height:50px;opacity:.6;margin:0 2px 8px}.blog-images li img:hover{opacity:1;box-shadow:0 0 0 4px #72c02c;transition:all .4s ease-in-out 0s;-moz-transition:all .4s ease-in-out 0s;-webkit-transition:all .4s ease-in-out 0s}.sidebar-tags li{padding:0}.sidebar-tags li a{color:#555;font-size:12px;padding:3px 5px;background:#f7f7f7;margin:0 2px 5px 0;display:inline-block}.sidebar-tags li a:hover,.sidebar-tags li a:hover i{background:#EEE;text-decoration:none;-webkit-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;transition:all .3s ease-in-out}.sidebar-tags li a i{color:#777}.ver-inline-menu{padding:0;margin:0;list-style:none}.ver-inline-menu li{position:relative;margin-bottom:1px}.ver-inline-menu li i{width:37px;height:37px;display:inline-block;color:#b9cbd5;font-size:15px;padding:12px 10px 10px 8px;margin:0 8px 0 0;text-align:center;background:#e0eaf0!important}.ver-inline-menu li a{font-size:14px;font-weight:300;color:#557386;display:block;background:#f0f6fa;border-left:solid 2px #c4d5df}.ver-inline-menu li:hover a{background:#e0eaf0;text-decoration:none}.ver-inline-menu li:hover i{color:#fff;background:#c4d5df!important}.ver-inline-menu li.active a{border-left:solid 2px #0c91e5}.ver-inline-menu li.active i{background:#0c91e5!important}.ver-inline-menu li.active a,.ver-inline-menu li.active i{color:#fff;background:#169ef4;text-decoration:none}.ver-inline-menu li.active a,.ver-inline-menu li:hover a{font-size:14px}.ver-inline-menu li.active:after{content:'';display:inline-block;border-bottom:6px solid transparent;border-top:6px solid transparent;border-left:6px solid #169ef4;position:absolute;top:12px;right:-5px}.list-separated{margin-top:10px;margin-bottom:15px}.list-separated>div{border-right1:1px solid #f5f5f5}.list-separated>div:last-child{border-right:0}@media (max-width:767px){.ver-inline-menu>li.active:after{display:none}.list-separated>div{margin-bottom:20px}}.number-stats{margin:10px 0}.number-stats .stat-number{display:inline-block;margin:0 5px}.number-stats .stat-number .title{font-size:13px;margin-bottom:3px;color:#B8C3C7}.number-stats .stat-number .number{font-size:27px;line-height:27px;color:#7D8C9D}.number-stats>div{border-right:1px solid #f5f5f5}.number-stats>div:last-child{border-right:0}.number-stats .stat-left .stat-number{float:right;text-align:right}.number-stats .stat-right{float:left!important}.number-stats .stat-right .stat-number{float:left;text-align:left}.number-stats .stat-right .stat-chart{float:left}.number-stats .stat-number{float:left;text-align:left}.number-stats .stat-chart{display:inline-block;margin:0 5px;float:left}.general-item-list>.item{padding:10px 0;border-bottom:1px solid #F1F4F7}.general-item-list>.item:last-child{border-bottom:0}.general-item-list>.item>.item-head{margin-bottom:5px}.general-item-list>.item>.item-head:after,.general-item-list>.item>.item-head:before{content:" ";display:table}.general-item-list>.item>.item-head>.item-details{display:inline-block;float:left}.general-item-list>.item>.item-head>.item-details>.item-pic{height:35px;margin-right:10px;-webkit-border-radius:100%;-moz-border-radius:100%;-ms-border-radius:100%;-o-border-radius:100%;border-radius:100%}.general-item-list>.item>.item-head>.item-details>.item-name{display:inline-block;margin-right:10px}.general-item-list>.item>.item-head>.item-details>.item-label{color:#C0C9CC}.general-item-list>.item>.item-head>.item-status{color:#C0C9CC;top:10px;position:relative;display:inline-block;float:right}.general-item-list>.item>.item-head>.item-status>.badge{margin-top:-2px}.general-item-list>.item>.item-body{color:#96a5aa}.file-drop-zone{border:2px dashed #ddd;padding:30px;text-align:center}.file-drop-zone.file-drop-zone-over{border-color:#aaa}[class*=" fa-"],[class*=" glyphicon-"],[class*=" icon-"],[class^=fa-],[class^=glyphicon-],[class^=icon-]{display:inline-block;margin-top:1px;font-size:14px;line-height:14px;-webkit-font-smoothing:antialiased}li [class*=" fa-"],li [class*=" glyphicon-"],li [class*=" icon-"],li [class^=fa-],li [class^=glyphicon-],li [class^=icon-]{display:inline-block;width:1.25em;text-align:center}li [class*=" glyphicon-"],li [class^=glyphicon-]{top:2px}li [class*=" icon-"],li [class^=icon-]{top:1px;position:relative}li [class*=" fa-"].icon-large,li [class*=" glyphicon-"].icon-large,li [class*=" icon-"].icon-large,li [class^=fa-].icon-large,li [class^=glyphicon-].icon-large,li [class^=icon-].icon-large{width:1.5625em}.fa-sm,.icon-sm{font-size:12px}.fa-lg,.icon-lg{font-size:16px!important}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.icon-state-default{color:#c6c6c6}.icon-state-success{color:#45B6AF}.icon-state-info{color:#89C4F4}.icon-state-warning{color:#dfba49}.icon-state-danger{color:#F3565D}.fa-item{font-size:14px;padding:10px 10px 10px 20px}.fa-item i{font-size:16px;display:inline-block;width:20px;color:#333}.fa-item:hover{cursor:pointer;background:#eee}.badge-danger,.badge-default,.badge-info,.badge-primary,.badge-success,.badge-warning{background-image:none}.simplelineicons-demo .item-box{display:inline-block;font-size:16px;margin:0 -.22em 1em 0;padding-left:1em;width:100%}.simplelineicons-demo .item-box .item{background-color:#fff;color:#33383e;border-radius:8px;display:inline-block;padding:10px;width:100%}.bs-glyphicons,.glyphicons-demo ul{padding-left:0;padding-bottom:1px;margin-bottom:20px;overflow:hidden;list-style:none}.simplelineicons-demo .item-box .item span{font-size:22px}@media only screen and (min-width:768px){.simplelineicons-demo .item-box{width:33.333%}}.bs-glyphicon-class{text-align:center}.glyphicons-demo ul li{float:left;width:25%;height:115px;padding:10px;margin:0 -1px -1px 0;font-size:14px;line-height:1.4;text-align:center;border:1px solid #ddd}.glyphicons-demo .glyphicon{display:block;margin:5px auto 10px;font-size:24px;color:#444}.glyphicons-demo ul li:hover{background-color:rgba(86,61,124,.1)}.badge-default,.label-default{background-color:#c6c6c6}@media (min-width:768px){.glyphicons-demo ul li{width:12.5%}}.alert.alert-borderless{border:0}.badge{font-size:11px!important;font-weight:300;height:18px;padding:3px 6px;-webkit-border-radius:12px!important;-moz-border-radius:12px!important;border-radius:12px!important;text-shadow:none!important;text-align:center}.badge.badge-roundless{-webkit-border-radius:0!important;-moz-border-radius:0!important;border-radius:0!important}.badge.badge-empty{display:inline-block;padding:0;min-width:8px;height:8px;width:8px}.badge-primary{background-color:#428bca}.badge-info{background-color:#89C4F4}.badge-success{background-color:#45B6AF}.badge-danger{background-color:#F3565D}.badge-warning{background-color:#dfba49}.nav.nav-pills>li>a>.badge,.nav.nav-stacked>li>a>.badge{margin-top:-2px}.dropdown-menu>li>a>.badge{position:absolute;margin-top:1px;right:3px;display:inline;font-size:11px;font-weight:300;text-shadow:none;height:18px;padding:3px 6px;text-align:center;vertical-align:middle;-webkit-border-radius:12px!important;-moz-border-radius:12px!important;border-radius:12px!important}.btn,.btn>i{font-size:14px}.dropdown-menu.badge-roundless{-webkit-border-radius:0!important;-moz-border-radius:0!important;border-radius:0!important}.btn{border-width:0;padding:7px 14px;outline:0!important;background-image:none!important;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;text-shadow:none}.btn-group .btn.dropdown-toggle,.btn.active,.btn.dropdown-toggle,.btn:active,.btn:disabled,.btn:focus,.btn:hover,.btn[disabled]{outline:0!important;background-image:none!important;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;text-shadow:none}.btn-default{border-width:1px;padding:6px 13px;color:#333;background-color:#fff;border-color:#ccc}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-default.active,.btn-default:active,.btn-default:focus,.btn-default:hover,.open .btn-default.dropdown-toggle{color:#333;background-color:#ededed;border-color:#b3b3b3}.btn-default.active,.btn-default:active{background-image:none;background-color:#e0e0e0}.btn-default.active:hover,.btn-default:active:hover{background-color:#e6e6e6}.open .btn-default.dropdown-toggle{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-default>i{color:#aaa}.btn-default>i[class*=icon-],.btn-default>i[class^=icon-]{color:#8c8c8c}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .btn-primary.dropdown-toggle{color:#fff;background-color:#3379b5;border-color:#2a6496}.btn-primary.active,.btn-primary:active{background-image:none;background-color:#2d6ca2}.btn-primary.active:hover,.btn-primary:active:hover{background-color:#3071a9}.open .btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#45B6AF;border-color:#3ea49d}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .btn-success.dropdown-toggle{color:#fff;background-color:#3b9c96;border-color:#307f7a}.btn-success.active,.btn-success:active{background-image:none;background-color:#348a84}.btn-success.active:hover,.btn-success:active:hover{background-color:#37918b}.open .btn-success.dropdown-toggle{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#45B6AF;border-color:#3ea49d}.btn-success .badge{color:#45B6AF;background-color:#fff}.btn-info{color:#fff;background-color:#89C4F4;border-color:#72b8f2}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .btn-info.dropdown-toggle{color:#fff;background-color:#68b4f1;border-color:#43a1ed}.btn-info.active,.btn-info:active{background-image:none;background-color:#51a8ef}.btn-info.active:hover,.btn-info:active:hover{background-color:#5aadf0}.open .btn-info.dropdown-toggle{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#89C4F4;border-color:#72b8f2}.btn-info .badge{color:#89C4F4;background-color:#fff}.btn-warning{color:#fff;background-color:#dfba49;border-color:#dbb233}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .btn-warning.dropdown-toggle{color:#fff;background-color:#daae2b;border-color:#bb9521}.btn-warning.active,.btn-warning:active{background-image:none;background-color:#c89f23}.btn-warning.active:hover,.btn-warning:active:hover{background-color:#d0a625}.open .btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#dfba49;border-color:#dbb233}.btn-warning .badge{color:#dfba49;background-color:#fff}.btn-danger{color:#fff;background-color:#F3565D;border-color:#f13e46}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .btn-danger.dropdown-toggle{color:#fff;background-color:#f1353d;border-color:#ec111b}.btn-danger.active,.btn-danger:active{background-image:none;background-color:#ef1d26}.btn-danger.active:hover,.btn-danger:active:hover{background-color:#f0262f}.open .btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#F3565D;border-color:#f13e46}.btn-danger .badge{color:#F3565D;background-color:#fff}.btn-lg,.btn-lg>i{font-size:18px}.btn-lg{padding:10px 16px;line-height:1.33}.btn-sm,.btn-xs{padding:4px 10px 5px;font-size:13px;line-height:1.5}.btn-sm>i,.btn-xs>i{font-size:13px}.btn-xs{padding:1px 5px}.btn-group .input-sm .btn-default{padding-top:3px;padding-bottom:3px}.btn-arrow-link{display:inline-block;font-size:13px}.btn-arrow-link>i{font-size:14px;line-height:14px;vertical-align:top;margin:2px 3px;color:#999}.btn-arrow-link.btn-arrow-link-lg{font-size:14px}.btn-arrow-link.btn-arrow-link-lg>i{font-size:16px;line-height:16px;margin:2px 3px 1px}.btn-circle{border-radius:25px!important}.btn-circle-right{border-radius:0 25px 25px 0!important}.btn-circle-left{border-radius:25px 0 0 25px!important}.btn-circle-bottom{border-radius:0 0 25px 25px!important}.btn-circle-top{border-radius:25px 25px 0 0!important}.btn-icon-only{height:34px;width:34px;text-align:center;padding-left:0;padding-right:0}.btn-icon-only>[class^=icon-],.btn-icon-only>i{text-align:center;margin-top:2px}.btn-sm>[class*=" glyphicon-"],.btn-sm>[class^=glyphicon-],.btn-sm>i{font-size:13px}.btn-xs>[class*=" glyphicon-"],.btn-xs>[class^=glyphicon-],.btn-xs>i{font-size:11px}.btn-group.btn-group-circle>.btn:first-child{border-radius:25px 0 0 25px!important}.btn-group.btn-group-circle>.btn:last-child{border-radius:0 25px 25px 0!important}.btn-group.btn-group-devided>.btn{margin-right:5px}.btn-group.btn-group-devided>.btn:last-child{margin-right:0}.btn-group-vertical.btn-group-vertical-circle>.btn:first-child{border-radius:25px 25px 0 0!important}.btn-group-vertical.btn-group-vertical-circle>.btn:last-child{border-radius:0 0 25px 25px!important}.carousel.image-carousel .carousel-inner{padding-top:0;padding-bottom:0}.carousel.image-carousel .carousel-control i{position:absolute;top:40%}.carousel.image-carousel.image-carousel-hoverable .carousel-control i{display:none}.carousel.image-carousel.image-carousel-hoverable:hover .carousel-control i{display:inline-block}.carousel.image-carousel .carousel-control.left i{left:10px}.carousel.image-carousel .carousel-control.right i{right:10px}.carousel.image-carousel .carousel-indicators{margin-top:10px;bottom:-7px}.carousel.image-carousel .carousel-indicators li,.carousel.image-carousel .carousel-indicators li.active{background-color:#666}.carousel.image-carousel .carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px 15px 25px;background:#333;background:rgba(0,0,0,.75)}.carousel.image-carousel .carousel-caption h2,.carousel.image-carousel .carousel-caption h3,.carousel.image-carousel .carousel-caption h4,.carousel.image-carousel .carousel-caption p{text-align:left;line-height:20px;color:#fff}.carousel.image-carousel .carousel-caption h2,.carousel.image-carousel .carousel-caption h3,.carousel.image-carousel .carousel-caption h4{margin:0 0 5px}.carousel.image-carousel .carousel-caption h2 a,.carousel.image-carousel .carousel-caption h3 a,.carousel.image-carousel .carousel-caption h4 a{color:#aaa}.carousel.image-carousel .carousel-caption p{margin-bottom:0}.carousel.image-carousel .carousel-caption .item{margin:0}.bars,.chart,.pie{overflow:hidden;height:300px;width:100%;font-size:14px}.item-list.table .percent{width:30px;float:right;margin-right:10px;margin-top:3px}.chart-tooltip{z-index:100;background-color:#736e6e!important;padding:5px!important;color:#fff}.chart-tooltip .label{display:block;margin-bottom:2px}.bar-chart,.line-chart{display:none}.chats{margin:-15px 0 0;padding:0}.chats li{list-style:none;padding:5px 0;margin:10px auto;font-size:12px}.chats li .body{display:block}.chats li .avatar{height:45px;width:45px;-webkit-border-radius:50%!important;-moz-border-radius:50%!important;border-radius:50%!important}.chats li.in .avatar{float:left;margin-right:10px}.chats li.out .avatar{float:right;margin-left:10px}.chats li .name{color:#3590c1;font-size:13px;font-weight:400}.chats li .datetime{color:#333;font-size:13px;font-weight:400}.chats li .message{border-radius:5px!important;-webkit-border-readius:5px!important;-moz-border-radius:5px!important;display:block;padding:5px;position:relative}.chats li.in .message .arrow,.chats li.out .message .arrow{display:block;position:absolute;top:5px;border-top:8px solid transparent;border-bottom:8px solid transparent}.chats li.in .message{text-align:left;border-left:2px solid #e9e9e9;margin-left:65px;background:#e9e9e9}.chats li.in .message .arrow{left:-8px;width:0;height:0;border-right:8px solid #e9e9e9}.chats li.out .message{border-right:2px solid #C7E9E6;margin-right:65px;background:#C7E9E6;text-align:right}.chats li.out .message .arrow{right:-8px;border-left:8px solid #C7E9E6}.chats li.out .datetime,.chats li.out .name{text-align:right}.chat-form{margin-top:15px;padding:10px;background-color:#e9eff3;overflow:hidden}.chat-form .input-cont{margin-right:40px}.chat-form .input-cont .form-control{border:1px solid #ddd;width:100%!important;margin-top:0;background-color:#fff!important}.chat-form .input-cont .form-control:focus{border:1px solid #4b8df9!important}.chat-form .btn-cont{margin-top:-42px;position:relative;float:right;width:44px}.chat-form .btn-cont .arrow{position:absolute;top:17px;right:43px;border-top:8px solid transparent;border-bottom:8px solid transparent;border-right:8px solid #4d90fe;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.chat-form .btn-cont .btn{margin-top:8px}.chat-form .btn-cont:hover .arrow{border-right-color:#0362fd}.chat-form .btn-cont:hover .btn{background-color:#0362fd}.close{display:inline-block;margin-top:0;margin-right:0;width:9px;height:9px;background-repeat:no-repeat!important;text-indent:-10000px;outline:0;background-image:url(../../assets/images/remove-icon-small.png)!important}.dropdown.open>.dropdown-toggle,.dropup.open>.dropdown-toggle{border-color:#ddd}.dropdown-menu{min-width:175px;position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;list-style:none;text-shadow:none;padding:0;margin:10px 0 0;background-color:#fffff;box-shadow:5px 5px rgba(102,102,102,.1);border:1px solid #eee;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.dropdown-menu li.divider{background:#f1f3f6}.dropdown-menu li>a{padding:8px 14px;color:#555;text-decoration:none;display:block;font-weight:300;line-height:18px;white-space:nowrap}.dropdown-menu li>a>[class*=" fa-"],.dropdown-menu li>a>[class^=fa-]{color:#888}.dropdown-menu li>a>[class*=" icon-"],.dropdown-menu li>a>[class^=icon-]{color:#666}.dropdown-menu li>a>[class*=" glyphicon-"],.dropdown-menu li>a>[class^=glyphicon-]{color:#888}.dropdown-menu .active>a,.dropdown-menu .active>a:hover,.dropdown-menu li>a:hover{text-decoration:none;background-image:none;background-color:#f6f6f6;color:#555;filter:none}.dropdown-menu.bottom-up{top:auto;bottom:100%;margin-bottom:2px}.btn-group>.dropdown-menu,.dropdown-toggle>.dropdown-menu,.dropdown>.dropdown-menu{margin-top:10px}.btn-group>.dropdown-menu:before,.dropdown-toggle>.dropdown-menu:before,.dropdown>.dropdown-menu:before{position:absolute;top:-8px;left:9px;right:auto;display:inline-block!important;border-right:8px solid transparent;border-bottom:8px solid #e0e0e0;border-left:8px solid transparent;content:''}.btn-group>.dropdown-menu:after,.dropdown-toggle>.dropdown-menu:after,.dropdown>.dropdown-menu:after{position:absolute;top:-7px;left:10px;right:auto;display:inline-block!important;border-right:7px solid transparent;border-bottom:7px solid #fff;border-left:7px solid transparent;content:''}.btn-group>.dropdown-menu.pull-left:before,.dropdown-toggle>.dropdown-menu.pull-left:before,.dropdown>.dropdown-menu.pull-left:before{left:auto;right:9px}.btn-group>.dropdown-menu.pull-left:after,.dropdown-toggle>.dropdown-menu.pull-left:after,.dropdown>.dropdown-menu.pull-left:after{left:auto;right:10px}.btn-group>.dropdown-menu.pull-right:before,.dropdown-toggle>.dropdown-menu.pull-right:before,.dropdown>.dropdown-menu.pull-right:before{left:auto;right:9px}.btn-group>.dropdown-menu.pull-right:after,.dropdown-toggle>.dropdown-menu.pull-right:after,.dropdown>.dropdown-menu.pull-right:after{left:auto;right:10px}.btn-group.dropup>.dropdown-menu,.dropdown-toggle.dropup>.dropdown-menu,.dropdown.dropup>.dropdown-menu{margin-top:0;margin-bottom:10px}.btn-group.dropup>.dropdown-menu:after,.btn-group.dropup>.dropdown-menu:before,.dropdown-toggle.dropup>.dropdown-menu:after,.dropdown-toggle.dropup>.dropdown-menu:before,.dropdown.dropup>.dropdown-menu:after,.dropdown.dropup>.dropdown-menu:before{display:none!important}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:5px;left:100%;margin-top:-6px;margin-left:-1px}.dropdown-submenu>a:after{position:absolute;display:inline-block;font-size:14px;right:7px;top:7px;font-family:FontAwesome;height:auto;content:"\f105";font-weight:300}.label,.table.table-light>thead>tr>th{font-family:"Open Sans",sans-serif}.dropdown-submenu:hover>.dropdown-menu{display:block}.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}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px}.nav.pull-right>li>.dropdown-menu,.nav>li>.dropdown-menu.pull-right{right:0;left:auto}.nav.pull-right>li>.dropdown-menu:before,.nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.nav.pull-right>li>.dropdown-menu:after,.nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.nav.pull-right>li>.dropdown-menu .dropdown-menu,.nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:absolute;float:left;width:auto;margin-top:0;background-color:#fff;border:1px solid #efefef;box-shadow:5px 5px rgba(102,102,102,.1)}.navbar-nav .open .dropdown-menu>li>a{padding:6px 0 6px 13px;color:#333}.navbar-nav .open .dropdown-menu>li>a:active,.navbar-nav .open .dropdown-menu>li>a:hover{ackground-color:#eee}}.feeds li .col1,.feeds li .col1>.cont>.cont-col2{width:100%;float:left}.dropdown-checkboxes,.dropdown-content,.dropdown-radiobuttons{padding:5px}.dropdown-content form{margin:0}.dropdown.inline .dropdown-menu{display:inline-block;position:relative}.dropdown-checkboxes label,.dropdown-radiobuttons label{display:block;font-weight:300;color:#333;margin-bottom:4px;margin-top:4px}.dropdown-checkboxes label .radio,.dropdown-radiobuttons label .radio{margin-right:3px}.feeds{margin:0;padding:0;list-style:none}.feeds li{background-color:#fafafa;color:#82949a;margin-bottom:7px}.feeds li:after,.feeds li:before{display:table;line-height:0;content:""}.feeds li:last-child{margin-bottom:0}.feeds li .col1>.cont{float:left;margin-right:75px;overflow:hidden}.feeds li .col1>.cont>.cont-col1{float:left;margin-right:-100%}.feeds li .col1>.cont>.cont-col1>.label{display:inline-block;padding:5px 4px 6px 5px;vertical-align:middle;text-align:center}.feeds li .col1>.cont>.cont-col1>.label>i{text-align:center;font-size:14px}.feeds li .col1>.cont>.cont-col2>.desc{margin-left:35px;padding-top:4px;padding-bottom:5px;overflow:hidden}.modal,.modal-open{overflow-y:auto!important}.feeds li .col2{float:left;width:75px;margin-left:-75px}.feeds li .col2>.date{padding:4px 9px 5px 4px;text-align:right;font-style:italic;color:#c1cbd0}.static-info{margin-bottom:10px}.static-info .name{font-size:14px}.static-info .value{font-size:14px;font-weight:600}.static-info.align-reverse .name,.static-info.align-reverse .value{text-align:right}.help-block{margin-top:5px;margin-bottom:5px}.help-inline{font-size:13px;color:#737373;display:inline-block;padding:5px}.form-inline input{margin-bottom:0!important}.control-label{margin-top:1px}.control-label .required{color:#e02222;font-size:12px;padding-left:2px}.form{padding:0!important}.form .form-body{padding:10px}.portlet.light .form .form-body{padding-left:0;padding-right:0}.form .form-actions{padding:20px 10px;margin:0;background-color:#f5f5f5;border-top:1px solid #e5e5e5}.portlet.light .form .form-actions{background:0 0;padding-left:0;padding-right:0}.portlet .form .form-actions{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;-ms-border-radius:0 0 4px 4px;-o-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.form .form-actions:after,.form .form-actions:before{content:" ";display:table}.form .form-actions.right{padding-left:0;padding-right:10px;text-align:right}.portlet.light .form .form-actions.right{padding-right:0}.form .form-actions.left{padding-left:10px;padding-right:0;text-align:left}.checkbox-list>label.checkbox-inline:first-child,.checkbox>label,.form-horizontal .checkbox>label,.portlet.light .form .form-actions.left,.radio-list>label.radio-inline:first-child{padding-left:0}.form .form-actions.nobg{background-color:transparent}.form .form-actions.top{margin-top:0;margin-bottom:20px;border-top:0;border-bottom:1px solid #e5e5e5}.portlet.light .form .form-actions.top{background:0 0}.form .form-actions .btn-set{display:inline-block}@media (max-width:767px){.form .form-actions .btn-set{margin-bottom:3px;margin-top:3px;float:left!important}}.form .form-section{margin:30px 0 25px;padding-bottom:5px;border-bottom:1px solid #eee}.form .form-bordered .form-group .help-block,.form .form-row-seperated .form-group .help-block,.form-horizontal .radio-list>label{margin-bottom:0}.form .form-section:first-child{margin-top:5px}.checkbox,.form-horizontal .checkbox{padding:0}.checkbox-list>label{display:block}.checkbox-list>label.checkbox-inline{display:inline-block}.input-icon>i,.radio-list>label{display:block}.form-control-static,.icon-btn,.input-inline,.radio-list>label.radio-inline{display:inline-block}.form-horizontal .radio-list .radio{padding-top:1px}.form-horizontal .radio>span{margin-top:2px}.form .form-row-seperated .portlet-body{padding:0}.form .form-row-seperated .form-group{margin:0;border-bottom:1px solid #efefef;padding:15px 0}.form .form-row-seperated .form-group.last{border-bottom:0;margin-bottom:0;padding-bottom:13px}.form .form-row-seperated .form-body{padding:0}.form .form-row-seperated .form-actions{padding-left:15px!important;padding-right:15px!important}.form .form-bordered .form-group{margin:0;border-bottom:1px solid #efefef}.form .form-bordered .form-group>div{padding:15px;border-left:1px solid #efefef}.form .form-bordered .form-group.last{border-bottom:0}.form .form-bordered .form-group .control-label{padding-top:20px}@media (max-width:991px){.form .form-bordered .form-group>div{border-left:0}.form .form-bordered .form-group .control-label{padding-top:10px}}.form .form-bordered .form-group .form-control{margin:0}.form .form-bordered .form-body{margin:0;padding:0}.form .form-bordered .form-actions{margin-top:0;padding-left:16px!important;padding-right:16px!important}@media (max-width:991px){.form .form-bordered .form-actions{padding-left:15px!important;padding-right:15px!important}}.form .form-horizontal.form-bordered.form-row-stripped .form-group:nth-child(even){background-color:#fcfcfc}.form .form-horizontal.form-bordered.form-row-stripped .form-control{background:#fff!important}.form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even)>div{background-color:#fff}.form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even){background-color:#fcfcfc}.form-control::-moz-placeholder{color:#b3b3b3;opacity:1}.form-control:-ms-input-placeholder{color:#b3b3b3}.form-control::-webkit-input-placeholder{color:#b3b3b3}.form-control{font-size:14px;font-weight:400;color:#333;background-color:#fff;border:1px solid #e5e5e5;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#999;outline:0;-webkit-box-shadow:none;box-shadow:none}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee}.form-control.height-auto{height:auto}.form-control.form-control-solid{background-color:#F1F3F8;border-color:#F1F3F8;color:#A6B2BA}.note .highlight,.note code,.uneditable-input{background-color:#fff}.form-control.form-control-solid:focus{border-color:#e3e7f1}.form-control.form-control-solid::-moz-placeholder{color:#acb7be;opacity:1}.form-control.form-control-solid:-ms-input-placeholder{color:#acb7be}.form-control.form-control-solid::-webkit-input-placeholder{color:#acb7be}.uneditable-input{padding:6px 12px;min-width:206px;font-size:14px;font-weight:400;height:34px;color:#333;border:1px solid #e5e5e5;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.icon-btn,.icon-btn:hover{-webkit-transition:all .3s ease;-moz-transition:all .3s ease;-ms-transition:all .3s ease;-o-transition:all .3s ease}.input-mini{width:45px!important}.input-xsmall{width:80px!important}.input-small{width:145px!important}.input-medium{width:240px!important}.input-large{width:320px!important}.input-xlarge{width:420px!important}.input-inline{width:auto;vertical-align:middle}.form-group .input-inline{margin-right:5px}.input-sm{height:28px;padding:5px 10px;font-size:13px}select.input-sm{height:28px;line-height:28px;padding:2px 10px}@media (max-width:768px){.input-large{width:250px!important}.input-xlarge{width:300px!important}}.input-group .btn-default{border-color:#e5e5e5}.input-group .input-group-addon{border-color:#e5e5e5;background:#e5e5e5;min-width:39px}.input-group .input-group-addon>i{color:#999}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .help-inline,.has-success .radio,.has-success .radio-inline{color:#3c763d}input[type=text].spinner,input[type=password].spinner,input[type=datetime].spinner,input[type=datetime-local].spinner,input[type=date].spinner,input[type=month].spinner,input[type=time].spinner,input[type=week].spinner,input[type=number].spinner,input[type=email].spinner,input[type=url].spinner,input[type=search].spinner,input[type=tel].spinner,input[type=color].spinner{background-image:url(../../assets/images/input-spinner.gif)!important;background-repeat:no-repeat;background-position:right 8px}label{font-weight:400;font-size:14px}.form-control-static{margin:2px 0}.has-success .form-control{border-color:#d6e9c6;-webkit-box-shadow:none;box-shadow:none}.has-success .form-control:focus{border-color:#bbdba1;-webkit-box-shadow:none;box-shadow:none}.has-success .input-group-addon{color:#3c763d;border-color:#d6e9c6;background-color:#dff0d8}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .help-inline,.has-warning .radio,.has-warning .radio-inline{color:#8a6d3b}.has-warning .form-control{border-color:#faebcc;-webkit-box-shadow:none;box-shadow:none}.has-warning .form-control:focus{border-color:#f5d89e;-webkit-box-shadow:none;box-shadow:none}.has-warning .input-group-addon{color:#8a6d3b;border-color:#faebcc;background-color:#fcf8e3}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .help-inline,.has-error .radio,.has-error .radio-inline{color:#a94442}.has-error .form-control{border-color:#ebccd1;-webkit-box-shadow:none;box-shadow:none}.has-error .form-control:focus{border-color:#dca7b0;-webkit-box-shadow:none;box-shadow:none}.has-error .input-group-addon{color:#a94442;border-color:#ebccd1;background-color:#f2dede}.input-circle{border-radius:25px!important}.input-circle-right{border-radius:0 25px 25px 0!important}.input-circle-left{border-radius:25px 0 0 25px!important}.input-circle-bottom{border-radius:0 0 25px 25px!important}.input-circle-top{border-radius:25px 25px 0 0!important}.icon-btn{height:60px;min-width:80px;margin:5px 5px 0 0;border:1px solid #ddd;padding:12px 0 0;background-color:#fafafa;background-image:none;filter:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;color:#646464;text-shadow:none;text-align:center;cursor:pointer;position:relative;transition:all .3s ease}.loading-message,.page-loading{min-width:125px;vertical-align:middle}[class^=m-icon-],[class^=m-icon-big-]{background-image:url(../../assets/images/syncfusion-icons.png);background-position:0 0;background-repeat:no-repeat}.icon-btn:hover,.icon-btn:hover>.badge{-webkit-box-shadow:none;-moz-box-shadow:none}.close,.icon-btn:hover{text-shadow:0 1px 0 #fff}.icon-btn:hover{text-decoration:none;border-color:#999;color:#444;transition:all .3s ease;box-shadow:none}.icon-btn:hover>.badge{-webkit-transition:all .3s ease;-moz-transition:all .3s ease;-ms-transition:all .3s ease;-o-transition:all .3s ease;transition:all .3s ease;box-shadow:none}.icon-btn>div{margin-top:5px;margin-bottom:20px;color:#000;font-size:12px;font-weight:300}.icon-btn>.badge{position:absolute;font-size:11px;font-weight:300;top:-5px;right:-5px;padding:3px 6px;color:#fff;text-shadow:none;border-width:0;border-style:solid;-webkit-border-radius:12px;-moz-border-radius:12px;border-radius:12px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.input-group .input-icon>.form-control,.tabs-left.nav-tabs>li>a:focus,.tabs-left.nav-tabs>li>a:hover{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;-ms-border-radius:4px 0 0 4px;-o-border-radius:4px 0 0 4px}.icon-btn>i{font-size:18px}.ie8 .icon-btn:hover{filter:none}.input-icon{position:relative}.input-icon>.form-control{padding-left:33px}.input-group .input-icon>.form-control{border-radius:4px 0 0 4px}.input-icon>i{color:#ccc;position:absolute;margin:11px 2px 4px 10px;z-index:3;width:16px;height:16px;font-size:16px;text-align:center}.modal .input-icon>i{z-index:10055}.has-success .input-icon>i{color:#45B6AF}.has-warning .input-icon>i{color:#dfba49}.has-info .input-icon>i{color:#89C4F4}.has-error .input-icon>i{color:#F3565D}.input-icon.right>.form-control{padding-right:33px;padding-left:12px}.input-group .input-icon.right>.form-control{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;-ms-border-radius:0 4px 4px 0;-o-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-icon.right>i{right:8px;float:right}.input-icon.input-icon-lg>i{margin-top:16px}.input-icon.input-icon-sm>i{margin-top:8px;font-size:13px}.label{text-shadow:none!important;font-size:13px;font-weight:300;padding:3px 6px;color:#fff}.label.label-sm{font-size:12px;padding:0 4px 1px}h1 .label,h2 .label,h3 .label,h4 .label,h5 .label,h6 .label{font-size:75%}.label-default[href]:focus,.label-default[href]:hover{background-color:#adadad}.label-primary{background-color:#428bca}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#3071a9}.label-success{background-color:#45B6AF}.label-success[href]:focus,.label-success[href]:hover{background-color:#37918b}.label-info{background-color:#89C4F4}.label-info[href]:focus,.label-info[href]:hover{background-color:#5aadf0}.label-warning{background-color:#dfba49}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#d0a625}.label-danger{background-color:#F3565D}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#f0262f}.label.label-icon{padding:4px 0 4px 4px;margin-right:2px;text-align:center!important}.label.label-icon>i{font-size:12px;text-align:center!important}.note p,.page-loading,.panel .panel-body{font-size:13px}.ie8 .label.label-icon,.ie9 .label.label-icon{padding:3px 0 3px 3px}.text-default{color:#c6c6c6}.text-primary{color:#428bca}.text-success{color:#45B6AF}.text-info{color:#89C4F4}.text-warning{color:#dfba49}.text-danger{color:#F3565D}.list-group .list-group-item-success{color:#3c763d;background-color:#dff0d8}.list-group a.list-group-item-success{color:#3c763d}.list-group a.list-group-item-success .list-group-item-heading{color:inherit}.list-group a.list-group-item-success:focus,.list-group a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}.list-group a.list-group-item-success.active,.list-group a.list-group-item-success.active:focus,.list-group a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group .list-group-item-info{color:#31708f;background-color:#d9edf7}.list-group a.list-group-item-info{color:#31708f}.list-group a.list-group-item-info .list-group-item-heading{color:inherit}.list-group a.list-group-item-info:focus,.list-group a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}.list-group a.list-group-item-info.active,.list-group a.list-group-item-info.active:focus,.list-group a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group .list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}.list-group a.list-group-item-warning{color:#8a6d3b}.list-group a.list-group-item-warning .list-group-item-heading{color:inherit}.list-group a.list-group-item-warning:focus,.list-group a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}.list-group a.list-group-item-warning.active,.list-group a.list-group-item-warning.active:focus,.list-group a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group .list-group-item-danger{color:#a94442;background-color:#f2dede}.list-group a.list-group-item-danger{color:#a94442}.list-group a.list-group-item-danger .list-group-item-heading{color:inherit}.list-group a.list-group-item-danger:focus,.list-group a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}.list-group a.list-group-item-danger.active,.list-group a.list-group-item-danger.active:focus,.list-group a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.loading-message{display:inline-block;padding:10px;margin:0 auto;color:#000!important;font-size:13px;font-weight:400;text-align:center}.loading-message.loading-message-boxed{border:1px solid #ddd;background-color:#eee;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 8px rgba(0,0,0,.1);-moz-box-shadow:0 1px 8px rgba(0,0,0,.1);box-shadow:0 1px 8px rgba(0,0,0,.1)}.loading-message>span{line-height:20px;vertical-align:middle}.page-loading{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;position:fixed;top:50%;left:50%;margin-left:-60px;margin-top:-30px;padding:7px;text-align:center;color:#333;border:1px solid #ddd;background-color:#eee;-webkit-box-shadow:0 1px 8px rgba(0,0,0,.1);-moz-box-shadow:0 1px 8px rgba(0,0,0,.1);box-shadow:0 1px 8px rgba(0,0,0,.1)}.block-spinner-bar>div,.page-spinner-bar>div{border-radius:100%!important;display:inline-block}.panel,.well{-webkit-box-shadow:none!important}.page-loading>span{line-height:20px;vertical-align:middle}.page-spinner-bar{position:fixed;z-index:10051;width:100px;top:40%;left:50%;margin-left:-55px;text-align:center}.page-spinner-bar>div{margin:0 5px;width:18px;height:18px;-webkit-animation:bounceDelay 1.4s infinite ease-in-out;animation:bounceDelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.page-spinner-bar .bounce1{-webkit-animation-delay:-.32s;animation-delay:-.32s}.page-spinner-bar .bounce2{-webkit-animation-delay:-.16s;animation-delay:-.16s}.block-spinner-bar{display:inline-block;width:80px;text-align:center}.block-spinner-bar>div{margin:0 2px;width:15px;height:15px;-webkit-animation:bounceDelay 1.4s infinite ease-in-out;animation:bounceDelay 1.4s infinite ease-in-out;-webkit-animation-fill-mode:both;animation-fill-mode:both}.note,.tabs-right.nav-tabs>li>a:focus,.tabs-right.nav-tabs>li>a:hover{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;-ms-border-radius:0 4px 4px 0;-o-border-radius:0 4px 4px 0}.block-spinner-bar .bounce1{-webkit-animation-delay:-.32s;animation-delay:-.32s}.block-spinner-bar .bounce2{-webkit-animation-delay:-.16s;animation-delay:-.16s}[class^=m-icon-]{display:inline-block;width:14px;height:14px;margin-top:3px;line-height:14px;vertical-align:top}[class^=m-icon-big-]{display:inline-block;width:30px;height:30px;margin:6px;vertical-align:middle}.btn.m-icon-big{padding:9px 16px 8px}.btn.m-icon-big.m-icon-only{padding:9px 8px 8px 0}.btn.m-icon-big [class^=m-icon-big-]{margin:0 0 0 10px}.btn.m-icon-ony>i{margin-left:0}.btn.m-icon{padding:7px 14px}.btn.m-icon [class^=m-icon-]{margin:4px 0 0 5px}.btn.m-icon.m-icon-only{padding:7px 10px 7px 6px}.m-icon-white{background-image:url(../../assets/images/syncfusion-icons-white.png)}.m-icon-swapright{background-position:-27px -10px}.m-icon-swapdown{background-position:-68px -10px}.m-icon-swapleft{background-position:-8px -10px}.m-icon-swapup{background-position:-46px -10px}.m-icon-big-swapright{background-position:-42px -28px}.m-icon-big-swapdown{background-position:-115px -28px}.m-icon-big-swapleft{background-position:-6px -28px}.m-icon-big-swapup{background-position:-78px -28px}.modal{z-index:10050;outline:0}.modal .modal-header{border-bottom:1px solid #EFEFEF}.modal .modal-header h3{font-weight:300}.modal .modal-header .close{margin-top:0!important}.modal .modal-dialog{z-index:10051}.modal>.loading{position:absolute;top:50%;left:50%;margin-top:-22px;margin-left:-22px}.modal.in .page-loading{display:none}.modal-open-noscroll{overflow-y:hidden!important}.modal-full.modal-dialog{width:99%}@media (max-width:768px){.modal-full.modal-dialog{width:auto}}.note{margin:0 0 20px;padding:15px 30px 15px 15px;border-left:5px solid #eee;border-radius:0 4px 4px 0}.note h1,.note h2,.note h3,.note h4,.note h5,.note h6{margin-top:0}.note h1 .close,.note h2 .close,.note h3 .close,.note h4 .close,.note h5 .close,.note h6 .close{margin-right:-10px}.note p:last-child{margin-bottom:0}.note.note-default{background-color:#d3d3d3;border-color:#a0a0a0;color:#333,80%}.note.note-default.note-bordered{background-color:#c9c9c9;border-color:#a5a5a5}.note.note-primary{background-color:#5697d0;border-color:#2a7696;color:#D8E3F2,80%}.note.note-primary.note-bordered{background-color:#468dcb;border-color:#2c7c9e}.note.note-success{background-color:#eef7ea;border-color:#bbdba1;color:#3c763d,80%}.note.note-success.note-bordered{background-color:#e2f1dc;border-color:#c1dea8}.note.note-info{background-color:#eef7fb;border-color:#91d9e8;color:#31708f,80%}.note.note-info.note-bordered{background-color:#ddeff8;border-color:#9adcea}.note.note-warning{background-color:#fcf8e3;border-color:#f2cf87;color:#8a6d3b,80%}.note.note-warning.note-bordered{background-color:#faf3d1;border-color:#f3d390}.note.note-danger{background-color:#f9f0f0;border-color:#dca7b0;color:#a94442,80%}.note.note-danger.note-bordered{background-color:#f3e2e2;border-color:#dfaeb7}.pagination{margin:10px 0}.pagination.pagination-circle>li:first-child>a{border-radius:25px 0 0 25px!important}.pagination.pagination-circle>li:last-child>a{border-radius:0 25px 25px 0!important}.dashboard-stat,.portlet{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px}.pagination .active>a,.pagination .active>a:hover{background:#eee;border-color:#ddd;color:#333}.panel{-moz-box-shadow:none!important;box-shadow:none!important}.panel-group .panel{overflow:visible}.panel .panel-title>a:hover{text-decoration:none}.accordion .panel .panel-heading,.accordion .panel .panel-title{padding:0}.accordion .panel .panel-title .accordion-toggle{display:block;padding:10px 15px}.accordion .panel .panel-title .accordion-toggle.accordion-toggle-styled{background:url(../../assets/images/accordion-plusminus.png) right -19px no-repeat;margin-right:15px}.accordion .panel .panel-title .accordion-toggle.accordion-toggle-styled.collapsed{background-position:right 12px}.panel-default{border-color:#e0e0e0}.panel-default>.panel-heading{color:#333;background-color:#f9f9f9;border-color:#e0e0e0}.panel-default>.panel-heading+.panel-collapse .panel-body{border-top-color:#e0e0e0}.panel-default>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#e0e0e0}.panel-primary{border-color:#3595bd}.panel-primary>.panel-heading{color:#D8E3F2;background-color:#428bca;border-color:#3595bd}.panel-primary>.panel-heading+.panel-collapse .panel-body{border-top-color:#3595bd}.panel-primary>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#3595bd}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse .panel-body{border-top-color:#d6e9c6}.panel-success>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse .panel-body{border-top-color:#bce8f1}.panel-info>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse .panel-body{border-top-color:#faebcc}.panel-warning>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse .panel-body{border-top-color:#ebccd1}.panel-danger>.panel-footer+.panel-collapse .panel-body{border-bottom-color:#ebccd1}.accordion-heading{background:#eee}.accordion-heading a,.accordion-heading a:hover{text-decoration:none}.popover{box-shadow:5px 5px rgba(102,102,102,.1);padding:0}.portlet.calendar .fc-button,.progress{-webkit-box-shadow:none;-moz-box-shadow:none}.popover .popover-title{margin:0!important}.popover.name .popover-content,.popover.name .popover-title,name .popover .popover-content{color:#F3565D}.popovers.yellow+.popover,.popovers.yellow+.popover .popover-content,.popovers.yellow+.popover .popover-title{background:#ff0}.page-portlet-fullscreen{overflow:hidden}.portlet{margin-top:0;margin-bottom:25px;padding:0;border-radius:4px}.portlet.portlet-fullscreen{z-index:10060;margin:0;position:fixed;top:0;left:0;bottom:0;right:0;width:100%;height:100%;background:#fff}.portlet.portlet-fullscreen>.portlet-body{overflow-y:auto;overflow-x:hidden;padding:0 10px}.portlet.portlet-fullscreen>.portlet-title{padding:0 10px}.portlet>.portlet-title{border-bottom:1px solid #eee;padding:0;margin-bottom:10px;min-height:41px;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;-ms-border-radius:4px 4px 0 0;-o-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.portlet>.portlet-title:after,.portlet>.portlet-title:before{content:" ";display:table}.portlet>.portlet-title>.caption{float:left;display:inline-block;font-size:18px;line-height:18px;font-weight:300;padding:10px 0}.portlet>.portlet-title>.caption.bold{font-weight:400}.portlet>.portlet-title>.caption>i{float:left;margin-top:4px;display:inline-block;font-size:13px;margin-right:5px;color:#666}.portlet>.portlet-title>.caption>i.glyphicon{margin-top:2px}.portlet>.portlet-title>.caption>.caption-helper{padding:0;margin:0;line-height:13px;color:#9eacb4;font-size:13px;font-weight:400}.portlet>.portlet-title>.actions{float:right;display:inline-block;padding:6px 0}.portlet>.portlet-title>.actions>.dropdown-menu i{color:#555}.portlet>.portlet-title>.actions>.btn,.portlet>.portlet-title>.actions>.btn-group>.btn,.portlet>.portlet-title>.actions>.btn-group>.btn.btn-sm,.portlet>.portlet-title>.actions>.btn.btn-sm{padding:4px 10px;font-size:13px;line-height:1.5}.portlet>.portlet-title>.actions>.btn-group>.btn.btn-default,.portlet>.portlet-title>.actions>.btn-group>.btn.btn-sm.btn-default,.portlet>.portlet-title>.actions>.btn.btn-default,.portlet>.portlet-title>.actions>.btn.btn-sm.btn-default{padding:3px 9px}.portlet>.portlet-title>.actions>.btn-group>.btn.btn-sm>i,.portlet>.portlet-title>.actions>.btn-group>.btn>i,.portlet>.portlet-title>.actions>.btn.btn-sm>i,.portlet>.portlet-title>.actions>.btn>i{font-size:13px}.portlet>.portlet-title>.actions .btn-icon-only{padding:5px 7px 3px}.portlet>.portlet-title>.actions .btn-icon-only.btn-default{padding:4px 6px 2px}.portlet>.portlet-title>.actions .btn-icon-only.btn-default>i{font-size:14px}.portlet>.portlet-title>.actions .btn-icon-only.btn-default.fullscreen{font-family:FontAwesome;color:#a0a0a0;padding-top:3px}.portlet>.portlet-title>.actions .btn-icon-only.btn-default.fullscreen.btn-sm{padding:3px!important;height:27px;width:27px}.portlet>.portlet-title>.actions .btn-icon-only.btn-default.fullscreen:before{content:"\f065"}.portlet>.portlet-title>.actions .btn-icon-only.btn-default.fullscreen.on:before{content:"\f066"}.portlet>.portlet-title>.tools{float:right;display:inline-block;padding:12px 0 8px}.portlet>.portlet-title>.tools>a{display:inline-block;height:16px;margin-left:5px;opacity:1;filter:alpha(opacity=100)}.portlet>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon.png);background-repeat:no-repeat;width:11px}.portlet>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon.png);background-repeat:no-repeat;width:12px}.portlet>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon.png);width:13px}.portlet>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon.png);width:14px;visibility:visible}.portlet>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon.png);width:14px;visibility:visible}.portlet>.portlet-title>.tools>a.fullscreen{display:inline-block;top:-3px;position:relative;font-size:13px;font-family:FontAwesome;color:#ACACAC}.portlet>.portlet-title>.tools>a.fullscreen:before{content:"\f065"}.portlet>.portlet-title>.tools>a.fullscreen.on:before{content:"\f066"}.portlet>.portlet-title>.tools>a:hover{text-decoration:none;-webkit-transition:all .1s ease-in-out;-moz-transition:all .1s ease-in-out;-o-transition:all .1s ease-in-out;-ms-transition:all .1s ease-in-out;transition:all .1s ease-in-out;opacity:.8;filter:alpha(opacity=80)}.portlet>.portlet-title>.pagination{float:right;display:inline-block;margin:2px 0 0;border:0;padding:4px 0}.portlet>.portlet-title>.nav-tabs{background:0 0;margin:0;float:right;display:inline-block;border:0}.portlet>.portlet-title>.nav-tabs>li{background:0 0;margin:0;border:0}.portlet>.portlet-title>.nav-tabs>li>a{background:0 0;margin:5px 0 0 1px;border:0;padding:8px 10px;color:#fff}.portlet>.portlet-title>.nav-tabs>li.active>a,.portlet>.portlet-title>.nav-tabs>li:hover>a{color:#333;background:#fff;border:0}.portlet>.portlet-body{clear:both;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;-ms-border-radius:0 0 4px 4px;-o-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.portlet>.portlet-empty{min-height:125px}.portlet.full-height-content{margin-bottom:0}.portlet.bordered{border-left:2px solid #e6e9ec!important}.portlet.bordered>.portlet-title{border-bottom:0}.portlet.solid{padding:0 10px 10px;border:0}.portlet.solid>.portlet-title{border-bottom:0;margin-bottom:10px}.portlet.solid>.portlet-title>.caption{padding:16px 0 2px}.portlet.solid>.portlet-title>.actions{padding:12px 0 6px}.portlet.solid>.portlet-title>.tools{padding:14px 0 6px}.portlet.solid.bordered>.portlet-title{margin-bottom:10px}.portlet.box{padding:0!important}.portlet.box>.portlet-title{border-bottom:0;padding:0 10px;margin-bottom:0;color:#fff}.portlet.box>.portlet-title>.caption{padding:11px 0 9px}.portlet.box>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.box>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.box>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.box>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.box>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.box>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box>.portlet-title>.actions{padding:7px 0 5px}.portlet.box>.portlet-body{background-color:#fff;padding:10px}.portlet.box.portlet-fullscreen>.portlet-body{padding:10px}.portlet.light{padding:12px 20px 15px;background-color:#fff}.portlet.light.bordered{border:1px solid #e1e1e1!important}.portlet.light.bordered>.portlet-title{border-bottom:1px solid #eee}.portlet.light.bg-inverse{background:#F7F7F7}.portlet.light>.portlet-title{padding:0;min-height:48px}.portlet.light>.portlet-title>.caption{color:#666;padding:10px 0}.portlet.light>.portlet-title>.caption>.caption-subject{font-size:16px}.portlet.light>.portlet-title>.caption>i{color:#777;font-size:15px;font-weight:300;margin-top:3px}.portlet.light>.portlet-title>.caption.caption-md>.caption-subject{font-size:15px}.portlet.light>.portlet-title>.caption.caption-md>i{font-size:14px}.portlet.light>.portlet-title>.actions{padding:6px 0 14px}.portlet.light>.portlet-title>.actions .btn-default{color:#666}.portlet.light>.portlet-title>.actions .btn-icon-only{height:27px;width:27px}.portlet.light>.portlet-title>.actions .dropdown-menu li>a{color:#555}.portlet.light>.portlet-title>.inputs{float:right;display:inline-block;padding:4px 0}.portlet.light>.portlet-title>.inputs>.portlet-input .input-icon>i{font-size:14px;margin-top:9px}.portlet.light>.portlet-title>.inputs>.portlet-input .input-icon>.form-control{height:30px;padding:2px 26px 3px 10px;font-size:13px}.portlet.light>.portlet-title>.inputs>.portlet-input>.form-control{height:30px;padding:3px 10px;font-size:13px}.portlet.light>.portlet-title>.pagination{padding:2px 0 13px}.portlet.light>.portlet-title>.tools{padding:10px 0 13px;margin-top:2px}.portlet.light>.portlet-title>.nav-tabs>li{margin:0;padding:0}.portlet.light>.portlet-title>.nav-tabs>li>a{margin:0;padding:12px 13px 13px;font-size:13px;color:#666}.portlet.light>.portlet-title>.nav-tabs>li.active>a,.portlet.light>.portlet-title>.nav-tabs>li:hover>a{margin:0;background:0 0;color:#333}.blue.btn.active,.blue.btn:active,.btn.default.active,.btn.default:active,.open .blue.btn.dropdown-toggle,.open .btn.default.dropdown-toggle,.progress,.progress-striped .progress>.progress-bar-default,.progress-striped .progress>.progress-bar-info,.progress-striped .progress>.progress-bar-success,.progress-striped .progress>.progress-bar-warning{background-image:none}.portlet.light.form-fit{padding:0}.portlet.light.form-fit>.portlet-title{padding:17px 20px 10px;margin-bottom:0}.portlet.light .portlet-body{padding-top:8px}.portlet.light.portlet-fullscreen>.portlet-body{padding:8px 0}.tab-pane>p:last-child{margin-bottom:0}.tabs-reversed>li{float:right;margin-right:0}.tabs-reversed>li>a{margin-right:0}.portlet-sortable:not(.portlet-fullscreen)>.portlet-title{cursor:move}.portlet-sortable-placeholder{border:2px dashed #eee;margin-bottom:25px}.portlet-sortable-empty{height:45px}.progress{border:0;filter:none;box-shadow:none}.progress.progress-sm{height:12px}.progress>.progress-bar-default{background-color:#c6c6c6}.progress>.progress-bar-success{background-color:#45B6AF}.progress>.progress-bar-info{background-color:#89C4F4}.progress>.progress-bar-danger{background-color:#F3565D}.progress-striped .progress>.progress-bar-danger{background-image:none}.progress>.progress-bar-warning{background-color:#dfba49}.dashboard-stat{display:block;margin-bottom:25px;overflow:hidden;border-radius:4px}.dashboard-stat:after,.dashboard-stat:before{content:" ";display:table}.portlet .dashboard-stat:last-child{margin-bottom:0}.dashboard-stat .visual{width:80px;height:80px;display:block;float:left;padding-top:10px;padding-left:15px;margin-bottom:15px;font-size:35px;line-height:35px}.dashboard-stat .visual>i{margin-left:-35px;font-size:110px;line-height:110px}.dashboard-stat .details{position:absolute;right:15px;padding-right:15px}.dashboard-stat .details .number{padding-top:25px;text-align:right;font-size:34px;line-height:36px;letter-spacing:-1px;margin-bottom:0;font-weight:300}.dashboard-stat .details .desc{text-align:right;font-size:16px;letter-spacing:0;font-weight:300}.dashboard-stat .more{display:block;padding:6px 10px;position:relative;text-transform:uppercase;font-weight:300;font-size:11px;opacity:.7;filter:alpha(opacity=70)}.dashboard-stat .more:hover{text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.dashboard-stat .more>i{display:inline-block;margin-top:1px;float:right}.dashboard-stat-light{padding-bottom:20px;margin-bottom:20px}.dashboard-stat-light .details{margin-bottom:5px}.dashboard-stat-light .details .number{font-weight:300;margin-bottom:0}.dashboard-stat2,.dashboard-stat2 .display{margin-bottom:20px}.dashboard-stat2{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;background:#fff;padding:15px 15px 30px}.dashboard-stat2 .display:after,.dashboard-stat2 .display:before{content:" ";display:table}.dashboard-stat2 .display .number{float:left;display:inline-block}.dashboard-stat2 .display .number h3{margin:0 0 2px;padding:0;font-size:30px;font-weight:400}.dashboard-stat2 .display .number h3>small{font-size:23px}.dashboard-stat2 .display .number small{font-size:14px;color:#AAB5BC;font-weight:600;text-transform:uppercase}.dashboard-stat2 .display .icon{display:inline-block;float:right;padding:7px 0 0}.dashboard-stat2 .display .icon>i{color:#cbd4e0;font-size:26px}.dashboard-stat2 .progress-info .progress{margin:0;height:4px;display:block}.dashboard-stat2 .progress-info .status{margin-top:5px;font-size:11px;color:#AAB5BC;font-weight:600;text-transform:uppercase}.dashboard-stat2 .progress-info .status .status-title{float:left;display:inline-block}.dashboard-stat2 .progress-info .status .status-number{float:right;display:inline-block}.text-stat h3{margin-top:5px;margin-bottom:0;font-size:18px}.text-stat span{font-size:13px!important}@media (max-width:767px){.text-stat{margin-top:20px}}.social-icons{padding:0;margin:0}.social-icons:after,.social-icons:before{content:" ";display:table}.social-icons li{float:left;display:inline;list-style:none;margin-right:5px;margin-bottom:5px;text-indent:-9999px}.social-icons li>a{-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;width:28px;height:28px;display:block;background-position:0 0;background-repeat:no-repeat;transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;-ms-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-webkit-transition:all .3s ease-in-out}.social-icons li:hover>a{background-position:0 -38px}.social-icons li .amazon{background:url(../../assets/images/social/amazon.png) no-repeat}.social-icons li .behance{background:url(../../assets/images/social/behance.png) no-repeat}.social-icons li .blogger{background:url(../../assets/images/social/blogger.png) no-repeat}.social-icons li .deviantart{background:url(../../assets/images/social/deviantart.png) no-repeat}.social-icons li .dribbble{background:url(../../assets/images/social/dribbble.png) no-repeat}.social-icons li .dropbox{background:url(../../assets/images/social/dropbox.png) no-repeat}.social-icons li .evernote{background:url(../../assets/images/social/evernote.png) no-repeat}.social-icons li .facebook{background:url(../../assets/images/social/facebook.png) no-repeat}.social-icons li .forrst{background:url(../../assets/images/social/forrst.png) no-repeat}.social-icons li .github{background:url(../../assets/images/social/github.png) no-repeat}.social-icons li .googleplus{background:url(../../assets/images/social/googleplus.png) no-repeat}.social-icons li .jolicloud{background:url(../../assets/images/social/jolicloud.png) no-repeat}.social-icons li .last-fm{background:url(../../assets/images/social/last-fm.png) no-repeat}.social-icons li .linkedin{background:url(../../assets/images/social/linkedin.png) no-repeat}.social-icons li .picasa{background:url(../../assets/images/social/picasa.png) no-repeat}.social-icons li .pintrest{background:url(../../assets/images/social/pintrest.png) no-repeat}.social-icons li .rss{background:url(../../assets/images/social/rss.png) no-repeat}.social-icons li .skype{background:url(../../assets/images/social/skype.png) no-repeat}.social-icons li .spotify{background:url(../../assets/images/social/spotify.png) no-repeat}.social-icons li .stumbleupon{background:url(../../assets/images/social/stumbleupon.png) no-repeat}.social-icons li .tumblr{background:url(../../assets/images/social/tumblr.png) no-repeat}.social-icons li .twitter{background:url(../../assets/images/social/twitter.png) no-repeat}.social-icons li .vimeo{background:url(../../assets/images/social/vimeo.png) no-repeat}.social-icons li .wordpress{background:url(../../assets/images/social/wordpress.png) no-repeat}.social-icons li .xing{background:url(../../assets/images/social/xing.png) no-repeat}.social-icons li .yahoo{background:url(../../assets/images/social/yahoo.png) no-repeat}.social-icons li .youtube{background:url(../../assets/images/social/youtube.png) no-repeat}.social-icons li .vk{background:url(../../assets/images/social/vk.png) no-repeat}.social-icons li .instagram{background:url(../../assets/images/social/instagram.png) no-repeat}.social-icons li .reddit{background:url(../../assets/images/social/reddit.png) no-repeat}.social-icons li .aboutme{background:url(../../assets/images/social/aboutme.png) no-repeat}.social-icons li .flickr{background:url(../../assets/images/social/flickr.png) no-repeat}.social-icons li .foursquare{background:url(../../assets/images/social/foursquare.png) no-repeat}.social-icons li .gravatar{background:url(../../assets/images/social/gravatar.png) no-repeat}.social-icons li .klout{background:url(../../assets/images/social/klout.png) no-repeat}.social-icons li .myspace{background:url(../../assets/images/social/myspace.png) no-repeat}.social-icons li .quora{background:url(../../assets/images/social/quora.png) no-repeat}.social-icons.social-icons-color>li>a{opacity:.7;background-position:0 -38px!important}.social-icons.social-icons-color>li>a:hover{opacity:1}.social-icons.social-icons-circle>li>a{border-radius:25px!important}.social-icon{display:inline-block!important;width:28px;height:28px;background-position:0 0;background-repeat:no-repeat;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;transition:all .3s ease-in-out;-o-transition:all .3s ease-in-out;-ms-transition:all .3s ease-in-out;-moz-transition:all .3s ease-in-out;-webkit-transition:all .3s ease-in-out}.social-icon.social-icon-circle{border-radius:25px!important}.social-icon.amazon{background:url(../../assets/images/social/amazon.png) no-repeat}.social-icon.behance{background:url(../../assets/images/social/behance.png) no-repeat}.social-icon.blogger{background:url(../../assets/images/social/blogger.png) no-repeat}.social-icon.deviantart{background:url(../../assets/images/social/deviantart.png) no-repeat}.social-icon.dribbble{background:url(../../assets/images/social/dribbble.png) no-repeat}.social-icon.dropbox{background:url(../../assets/images/social/dropbox.png) no-repeat}.social-icon.evernote{background:url(../../assets/images/social/evernote.png) no-repeat}.social-icon.facebook{background:url(../../assets/images/social/facebook.png) no-repeat}.social-icon.forrst{background:url(../../assets/images/social/forrst.png) no-repeat}.social-icon.github{background:url(../../assets/images/social/github.png) no-repeat}.social-icon.googleplus{background:url(../../assets/images/social/googleplus.png) no-repeat}.social-icon.jolicloud{background:url(../../assets/images/social/jolicloud.png) no-repeat}.social-icon.last-fm{background:url(../../assets/images/social/last-fm.png) no-repeat}.social-icon.linkedin{background:url(../../assets/images/social/linkedin.png) no-repeat}.social-icon.picasa{background:url(../../assets/images/social/picasa.png) no-repeat}.social-icon.pintrest{background:url(../../assets/images/social/pintrest.png) no-repeat}.social-icon.rss{background:url(../../assets/images/social/rss.png) no-repeat}.social-icon.skype{background:url(../../assets/images/social/skype.png) no-repeat}.social-icon.spotify{background:url(../../assets/images/social/spotify.png) no-repeat}.social-icon.stumbleupon{background:url(../../assets/images/social/stumbleupon.png) no-repeat}.social-icon.tumblr{background:url(../../assets/images/social/tumblr.png) no-repeat}.social-icon.twitter{background:url(../../assets/images/social/twitter.png) no-repeat}.social-icon.vimeo{background:url(../../assets/images/social/vimeo.png) no-repeat}.social-icon.wordpress{background:url(../../assets/images/social/wordpress.png) no-repeat}.social-icon.xing{background:url(../../assets/images/social/xing.png) no-repeat}.social-icon.yahoo{background:url(../../assets/images/social/yahoo.png) no-repeat}.social-icon.youtube{background:url(../../assets/images/social/youtube.png) no-repeat}.social-icon.vk{background:url(../../assets/images/social/vk.png) no-repeat}.social-icon.instagram{background:url(../../assets/images/social/instagram.png) no-repeat}.social-icon.reddit{background:url(../../assets/images/social/reddit.png) no-repeat}.social-icon.aboutme{background:url(../../assets/images/social/aboutme.png) no-repeat}.social-icon.flickr{background:url(../../assets/images/social/flickr.png) no-repeat}.social-icon.foursquare{background:url(../../assets/images/social/foursquare.png) no-repeat}.social-icon.gravatar{background:url(../../assets/images/social/gravatar.png) no-repeat}.social-icon.klout{background:url(../../assets/images/social/klout.png) no-repeat}.social-icon.myspace{background:url(../../assets/images/social/myspace.png) no-repeat}.social-icon.quora{background:url(../../assets/images/social/quora.png) no-repeat}.social-icon:hover{background-position:0 -38px}.social-icon-color{opacity:.7;background-position:0 -38px!important}.social-icon-color:hover{opacity:1}.table.table-bordered thead>tr>th{border-bottom:0}.table tr.heading>th{background-color:#eee!important}.table td .img-responsive{width:100%}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background:#a6c8e6;color:#132339}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background:#92bce0}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background:#dff0d8;color:#3c763d}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background:#d9edf7;color:#31708f}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background:#fcf8e3;color:#8a6d3b}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background:#f2dede;color:#a94442}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background:#ebcccc}.table-scrollable{width:100%;overflow-x:auto;overflow-y:hidden;border:1px solid #ddd;margin:10px 0!important}.table-scrollable.table-scrollable-borderless,.table-scrollable>.table-bordered{border:0}.table-scrollable>.table{width:100%!important;margin:0!important;background-color:#fff}.table-scrollable>.table-bordered>tbody>tr>td:first-child,.table-scrollable>.table-bordered>tbody>tr>th:first-child,.table-scrollable>.table-bordered>tfoot>tr>td:first-child,.table-scrollable>.table-bordered>tfoot>tr>th:first-child,.table-scrollable>.table-bordered>thead>tr>td:first-child,.table-scrollable>.table-bordered>thead>tr>th:first-child{border-left:0}.table-scrollable>.table-bordered>tbody>tr>td:last-child,.table-scrollable>.table-bordered>tbody>tr>th:last-child,.table-scrollable>.table-bordered>tfoot>tr>td:last-child,.table-scrollable>.table-bordered>tfoot>tr>th:last-child,.table-scrollable>.table-bordered>thead>tr>td:last-child,.table-scrollable>.table-bordered>thead>tr>th:last-child{border-right:0}.table-scrollable>.table-bordered>tbody>tr:last-child>td,.table-scrollable>.table-bordered>tbody>tr:last-child>th,.table-scrollable>.table-bordered>tfoot>tr:last-child>td,.table-scrollable>.table-bordered>tfoot>tr:last-child>th,.table-scrollable>.table-bordered>thead>tr:last-child>td,.table-scrollable>.table-bordered>thead>tr:last-child>th{border-bottom:0}.flip-scroll table{width:100%}@media only screen and (max-width:768px){.flip-scroll .flip-content:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0}.flip-scroll * html .flip-content{zoom:1}.flip-scroll td,.flip-scroll th{margin:0;vertical-align:top}.flip-scroll th{border:0!important;border-bottom:1px solid #ddd!important;border-right:1px solid #ddd!important;font-size:13px!important;padding:5px;width:auto!important;display:block;text-align:right}.flip-scroll table{border-collapse:collapse;border-spacing:0;display:block;position:relative;width:100%}.flip-scroll thead{display:block;float:left}.flip-scroll tbody{display:block;width:auto;position:relative;overflow-x:auto;white-space:nowrap}.flip-scroll thead tr{display:block}.flip-scroll tbody tr{display:inline-block;vertical-align:top;margin-left:-5px}.flip-scroll td{display:block;min-height:1.25em;text-align:left;border-top:0!important;border-left:0!important;border-right:0!important;border-bottom:0}.flip-scroll th{border-left:0}.flip-scroll tbody tr{border-left:1px solid #ddd}.flip-scroll td:last-child,.flip-scroll th:last-child{border-bottom:1px solid #ddd}}.centered-td,.page-404,.tiles .tile .tile-body>i{text-align:center}.table-toolbar{margin-bottom:15px}.table-toolbar:after,.table-toolbar:before{content:" ";display:table}.table.table-full-width{width:100%!important}.table .btn{margin-top:0;margin-left:0;margin-right:5px}.table thead tr th{font-size:14px;font-weight:600}.table-advance{margin-bottom:10px!important}.table-advance thead{color:#999}.table-advance thead tr th{background-color:#DDD;font-size:14px;font-weight:400;color:#666}.table-advance div.danger,.table-advance div.important,.table-advance div.info,.table-advance div.success,.table-advance div.warning{position:absolute;margin-top:-5px;float:left;width:2px;height:30px;margin-right:20px!important}.table-advance tr td{border-left-width:0}.table-advance tr td:first-child{border-left-width:1px!important}.table-advance tr td.highlight:first-child a{margin-left:15px}.table-advance td.highlight div.primary{border-left:2px solid #428bca}.table-advance td.highlight div.success{border-left:2px solid #45B6AF}.table-advance td.highlight div.info{border-left:2px solid #89C4F4}.table-advance td.highlight div.warning{border-left:2px solid #dfba49}.table-advance td.highlight div.danger{border-left:2px solid #F3565D}@media (max-width:767px){.table-advance tr>td.highlight:first-child a{margin-left:8px}}.table.table-light{border:0!important}.table.table-light>thead>tr:hover>th{background:0 0}.table.table-light>thead>tr.uppercase{text-transform:uppercase}.table.table-light>thead>tr>th{font-weight:600;font-size:13px;color:#a7b3b9;border:0;border-bottom:1px solid #F2F5F8}.table.table-light>tbody>tr:last-child>td{border:0}.table.table-light>tbody>tr>td{border:0;border-bottom:1px solid #F2F5F8;color:#9ca8b0;vertical-align:middle}.table.table-light>tbody>tr>td.fit{width:1px;padding-right:3px}.table.table-light>tbody>tr>td .user-pic{display:inline-block;vertical-align:middle;height:30px;-webkit-border-radius:100%;-moz-border-radius:100%;-ms-border-radius:100%;-o-border-radius:100%;border-radius:100%}.table.table-light.table-hover>tbody>tr:hover>td,.table.table-light.table-hover>tbody>tr:hover>th,.table.table-light.table-hover>tbody>tr>td:hover,.table.table-light.table-hover>tbody>tr>th:hover{background:#f9fafb}.nav-pills,.nav-tabs{margin-bottom:10px}.nav-pills>li>a,.nav-tabs>li>a{font-size:14px}.nav-pills>li>a>.badge,.nav-tabs>li>a>.badge{margin-top:-3px}.nav-pills>li .dropdown-menu:after,.nav-pills>li .dropdown-menu:before,.nav-tabs>li .dropdown-menu:after,.nav-tabs>li .dropdown-menu:before{display:none}.nav-pills.nav-pills-sm>li>a,.nav-pills.nav-tabs-sm>li>a,.nav-tabs.nav-pills-sm>li>a,.nav-tabs.nav-tabs-sm>li>a{font-size:13px}.nav-pills .dropdown.open>.dropdown-toggle,.nav-tabs .dropdown.open>.dropdown-toggle{background:#eee;color:#0d638f;border-color:transparent}.tabs-left.nav-tabs,.tabs-right.nav-tabs{border-bottom:0}.tabs-left.nav-tabs>li,.tabs-right.nav-tabs>li{float:none}.tabs-left.nav-tabs>li>a,.tabs-right.nav-tabs>li>a{margin-right:0;margin-bottom:3px}.tabs-left.nav-tabs{border-right:1px solid #ddd}.tabs-left.nav-tabs>li>a{display:block;margin-right:-1px}.tabs-left.nav-tabs>li>a:focus,.tabs-left.nav-tabs>li>a:hover{border-radius:4px 0 0 4px;border-color:#eee #ddd #eee #eee}.tabs-left.nav-tabs>li.active>a,.tabs-left.nav-tabs>li.active>a:hover>li.active>a:focus{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;-ms-border-radius:4px 0 0 4px;-o-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;border-color:#ddd transparent #ddd #ddd}.tabs-right.nav-tabs{border-left:1px solid #ddd}.tabs-right.nav-tabs>li>a{display:block;margin-left:-1px}.tabbable:after,.tabbable:before,.tiles:after,.tiles:before{display:table;content:" "}.tabs-right.nav-tabs>li>a:focus,.tabs-right.nav-tabs>li>a:hover{border-radius:0 4px 4px 0;border-color:#eee #eee #eee #ddd}.tabs-right.nav-tabs>li.active>a,.tabs-right.nav-tabs>li.active>a:hover>li.active>a:focus{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;-ms-border-radius:0 4px 4px 0;-o-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;border-color:#ddd #ddd #ddd transparent}.tabs-below>.nav-pills,.tabs-below>.nav-tabs{border-bottom:0;margin-bottom:0;margin-top:10px}.tabs-below>.nav-tabs{border-top:1px solid #ddd;margin-bottom:0;margin-top:10px}.tabs-below>.nav-tabs>li>a{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a:focus,.tabs-below>.nav-tabs>li>a:hover{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>li>a .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.tabs-below>.nav-tabs .active a,.tabs-below>.nav-tabs .active a:hover .active a:focus{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;-ms-border-radius:0 0 4px 4px;-o-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;border-color:transparent #ddd #ddd}.tabbable-custom{margin-bottom:15px;padding:0;overflow:hidden}.tabbable-custom>.nav-tabs{border:none;margin:0}.tabbable-custom>.nav-tabs>li.active>a,.tabbable-custom>.nav-tabs>li>a{-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0}.tabbable-custom>.nav-tabs>li{margin-right:2px;border-top:2px solid transparent}.tabbable-custom>.nav-tabs>li>a{margin-right:0;border-radius:0}.tabbable-custom>.nav-tabs>li>a:hover{background:0 0;border-color:transparent}.tabbable-custom>.nav-tabs>li.active{border-top:3px solid #F3565D;margin-top:0;position:relative}.tabbable-custom>.nav-tabs>li.active>a{border-top:none;font-weight:400;border-radius:0}.tabbable-custom>.nav-tabs>li.active>a:hover{-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;border-top:none;background:#fff;border-color:#d4d4d4 #d4d4d4 transparent}.tabbable-custom>.tab-content{background-color:#fff;border:1px solid #ddd;padding:10px;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;-ms-border-radius:0 0 4px 4px;-o-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabbable-custom.nav-justified>.tab-content{margin-top:-1px}.tabbable-custom.boxless>.tab-content{padding:15px 0;border-left:none;border-right:none;border-bottom:none}.tabbable-custom.tabs-below.nav-justified .tab-content{margin-top:0;margin-bottom:-2px;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;-ms-border-radius:4px 4px 0 0;-o-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.tabbable-custom.tabbable-full-width>.nav-tabs>li>a{color:#424242;font-size:15px;padding:9px 15px}.tabbable-custom.tabbable-full-width>.tab-content{padding:15px 0;border-left:none;border-right:none;border-bottom:none}.tabbable-custom.tabs-below .nav-tabs>li>a{border-top:none;border-bottom:2px solid transparent;margin-top:-1px}.tabbable-custom.tabs-below .nav-tabs>li.active{border-top:none;border-bottom:3px solid #d12610;margin-bottom:0;position:relative}.tabbable-custom.tabs-below .nav-tabs>li.active>a{border-bottom:none}.tabbable-custom.tabs-below .nav-tabs>li.active>a:hover{background:#fff;border-color:#d4d4d4 #d4d4d4 transparent}.tabbable-custom.tabbable-noborder .tab-content,.tabbable-custom.tabbable-noborder>.nav-tabs>li>a{border:0}.tabbable-line>.nav-tabs{border:none;margin:0}.tabbable-line>.nav-tabs>li{margin-right:2px}.tabbable-line>.nav-tabs>li>a{border:0;margin-right:0;color:#737373}.tabbable-line>.nav-tabs>li>a>i{color:#a6a6a6}.tabbable-line>.nav-tabs>li.open,.tabbable-line>.nav-tabs>li:hover{border-bottom:4px solid #fbcdcf}.tabbable-line>.nav-tabs>li.open>a,.tabbable-line>.nav-tabs>li:hover>a{border:0;background:0 0!important;color:#333}.tabbable-line>.nav-tabs>li.open>a>i,.tabbable-line>.nav-tabs>li:hover>a>i{color:#a6a6a6}.tabbable-line>.nav-tabs>li.open .dropdown-menu,.tabbable-line>.nav-tabs>li:hover .dropdown-menu{margin-top:0}.tabbable-line>.nav-tabs>li.active{border-bottom:4px solid #F3565D;position:relative}.tabbable-line>.nav-tabs>li.active>a{border:0;color:#333}.tabbable-line>.nav-tabs>li.active>a>i{color:#404040}.tabbable-line>.tab-content{margin-top:-3px;background-color:#fff;border:0;border-top:1px solid #eee;padding:15px 0}.portlet .tabbable-line>.tab-content{padding-bottom:0}.tabbable-line.tabs-below>.nav-tabs>li{border-top:4px solid transparent}.tabbable-line.tabs-below>.nav-tabs>li>a{margin-top:0}.tabbable-line.tabs-below>.nav-tabs>li:hover{border-bottom:0;border-top:4px solid #fbcdcf}.tabbable-line.tabs-below>.nav-tabs>li.active{margin-bottom:-2px;border-bottom:0;border-top:4px solid #F3565D}.tabbable-line.tabs-below>.tab-content{margin-top:-10px;border-top:0;border-bottom:1px solid #eee;padding-bottom:15px}.tiles{margin-right:-10px}.tiles .tile{display:block;float:left;height:135px;width:135px!important;cursor:pointer;text-decoration:none;color:#fff;position:relative;font-weight:300;font-size:12px;letter-spacing:.02em;line-height:20px;overflow:hidden;border:4px solid transparent;margin:0 10px 10px 0}.tiles .tile .tile-body>.content,.tiles .tile.image .tile-body h3,.tiles .tile.selected .check:after{display:inline-block}.tiles .tile:after,.tiles .tile:before{content:"";float:left}.tiles .tile.double{width:280px!important}.tiles .tile.double-down{height:280px!important}.tiles .tile.double-down i{margin-top:95px}.tiles .tile:hover{border-color:#aaa!important}.tiles .tile.selected,.tiles .tile:active{border-color:#ccc!important}.tiles .tile.selected .corner:after{content:"";display:inline-block;border-left:40px solid transparent;border-bottom:40px solid transparent;border-right:40px solid #ccc;position:absolute;top:-3px;right:-3px}.tiles .tile.selected .check:after{font-family:FontAwesome;font-size:13px;content:"\f00c";position:absolute;top:2px;right:2px}.tiles .tile.icon{padding:0}.tiles .tile.image .tile-body{padding:0!important}.tiles .tile.image .tile-body>img{width:100%;height:auto;min-height:100%;max-width:100%}.tiles .tile .tile-body{height:100%;vertical-align:top;padding:10px;overflow:hidden;position:relative;font-weight:400;font-size:12px;color:#fff;margin-bottom:10px}.tiles .tile .tile-body p{font-weight:400;font-size:13px;color:#fff;overflow:hidden}.tiles .tile .tile-body p:active{color:rgba(0,0,0,.4)}.tiles .tile .tile-body p:hover{color:#fff}.tiles .tile .tile-body img{float:left;margin-right:10px}.tiles .tile .tile-body img.pull-right{float:right!important;margin-left:10px;margin-right:0}.close,.float-right{float:right}.tiles .tile .tile-body>i{margin-top:17px;display:block;font-size:56px;line-height:56px}.tiles .tile .tile-body h1,.tiles .tile .tile-body h2,.tiles .tile .tile-body h3,.tiles .tile .tile-body h4,.tiles .tile .tile-body h5,.tiles .tile .tile-body h6,.tiles .tile .tile-body p{padding:0;margin:0;line-height:14px}.tiles .tile .tile-body h1:hover,.tiles .tile .tile-body h2:hover,.tiles .tile .tile-body h3:hover,.tiles .tile .tile-body h4:hover,.tiles .tile .tile-body h5:hover,.tiles .tile .tile-body h6:hover,.tiles .tile .tile-body p:hover{color:#fff}.tiles .tile .tile-body h3,.tiles .tile .tile-body h4{margin-bottom:5px}.tiles .tile .tile-object{position:absolute;bottom:0;left:0;right:0;min-height:30px;background-color:transparent}.tiles .tile .tile-object:after,.tiles .tile .tile-object:before{display:table;content:""}.tiles .tile .tile-object>.name{position:absolute;bottom:0;left:0;margin-bottom:5px;margin-left:10px;margin-right:15px;font-weight:400;font-size:13px;color:#fff}.tiles .tile .tile-object>.name>i{vertical-align:middle;display:block;font-size:24px;height:18px;width:24px}.tiles .tile .tile-object>.number{position:absolute;bottom:0;right:0;color:#fff;text-align:center;font-weight:600;font-size:14px;letter-spacing:.01em;line-height:14px;margin-bottom:8px;margin-right:10px}.well{background-color:#eee;border:0;-moz-box-shadow:none!important;box-shadow:none!important}.blue.btn,.btn.default{border-color:""}@-webkit-keyframes fadeInUpm{0%{opacity:0;-webkit-transform:translateY(15px)}100%{opacity:1;-webkit-transform:translateY(0)}}@-moz-keyframes fadeInUpm{0%{opacity:0;-moz-transform:translateY(15px)}100%{opacity:1;-moz-transform:translateY(0)}}@-o-keyframes fadeInUpm{0%{opacity:0;-o-transform:translateY(15px)}100%{opacity:1;-o-transform:translateY(0)}}@keyframes fadeInUpm{0%{opacity:0;transform:translateY(15px)}100%{opacity:1;transform:translateY(0)}}.fade-in-up{-webkit-animation:fadeInUpm .5s;animation:fadeInUpm .5s}@-webkit-keyframes bounceDelay{0%,100%,80%{-webkit-transform:scale(0)}40%{-webkit-transform:scale(1)}}@keyframes bounceDelay{0%,100%,80%{transform:scale(0);-webkit-transform:scale(0)}40%{transform:scale(1);-webkit-transform:scale(1)}}.btn.default{color:#333;background-color:#E5E5E5}.btn.default.active,.btn.default:active,.btn.default:focus,.btn.default:hover,.open .btn.default.dropdown-toggle{color:#333;background-color:#d3d3d3}.btn.default.active,.btn.default:active{background-color:#c6c6c6}.btn.default.active:hover,.btn.default:active:hover{background-color:#ccc}.btn.default.disabled,.btn.default.disabled.active,.btn.default.disabled:active,.btn.default.disabled:focus,.btn.default.disabled:hover,.btn.default[disabled],.btn.default[disabled].active,.btn.default[disabled]:active,.btn.default[disabled]:focus,.btn.default[disabled]:hover,fieldset[disabled] .btn.default,fieldset[disabled] .btn.default.active,fieldset[disabled] .btn.default:active,fieldset[disabled] .btn.default:focus,fieldset[disabled] .btn.default:hover{background-color:#E5E5E5}.btn.default .badge{color:#E5E5E5;background-color:#333}.blue.btn{color:#FFF;background-color:#4B8DF8}.blue.btn.active,.blue.btn:active,.blue.btn:focus,.blue.btn:hover,.open .blue.btn.dropdown-toggle{color:#FFF;background-color:#2977f7}.blue.btn.active,.blue.btn:active{background-color:#1068f6}.blue.btn.active:hover,.blue.btn:active:hover{background-color:#1a6ef6}.blue.btn.disabled,.blue.btn.disabled.active,.blue.btn.disabled:active,.blue.btn.disabled:focus,.blue.btn.disabled:hover,.blue.btn[disabled],.blue.btn[disabled].active,.blue.btn[disabled]:active,.blue.btn[disabled]:focus,.blue.btn[disabled]:hover,fieldset[disabled] .blue.btn,fieldset[disabled] .blue.btn.active,fieldset[disabled] .blue.btn:active,fieldset[disabled] .blue.btn:focus,fieldset[disabled] .blue.btn:hover{background-color:#4B8DF8}.blue.btn .badge{color:#4B8DF8;background-color:#FFF}.portlet.blue,.portlet.box.blue>.portlet-title,.portlet>.portlet-body.blue{background-color:#4B8DF8}.btn.blue-stripe{border-left:3px solid #4B8DF8}.portlet.solid.blue>.portlet-body,.portlet.solid.blue>.portlet-title{border:0;color:#FFF}.portlet.solid.blue>.portlet-title>.caption>i{color:#FFF}.portlet.solid.blue>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.blue>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.blue>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.blue>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.blue>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.blue>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.blue{border:1px solid #7cacfa;border-top:0}.portlet.box.blue>.portlet-title>.caption,.portlet.box.blue>.portlet-title>.caption>i{color:#FFF}.portlet.box.blue>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #b7d1fc;color:#d0e1fd}.portlet.box.blue>.portlet-title>.actions .btn-default>i{color:#deeafe}.portlet.box.blue>.portlet-title>.actions .btn-default.active,.portlet.box.blue>.portlet-title>.actions .btn-default:active,.portlet.box.blue>.portlet-title>.actions .btn-default:focus,.portlet.box.blue>.portlet-title>.actions .btn-default:hover{border:1px solid #e8f0fe;color:#fff}.dashboard-stat.blue{background-color:#4B8DF8}.dashboard-stat.blue.dashboard-stat-light:hover{background-color:#3781f7}.dashboard-stat.blue .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.blue .details .number{color:#FFF}.dashboard-stat.blue .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.blue .more{color:#FFF;background-color:#3781f7}.bg-blue{border-color:#4B8DF8!important;background-image:none!important;background-color:#4B8DF8!important;color:#FFF!important}.font-blue{color:#4B8DF8!important}.progress-bar.blue{background:#4B8DF8!important;color:#FFF!important}.blue-madison.btn{color:#FFF;background-color:#578ebe;border-color:""}.blue-madison.btn.active,.blue-madison.btn:active,.blue-madison.btn:focus,.blue-madison.btn:hover,.open .blue-madison.btn.dropdown-toggle{color:#FFF;background-color:#437cae}.blue-madison.btn.active,.blue-madison.btn:active{background-image:none;background-color:#3c6f9c}.blue-madison.btn.active:hover,.blue-madison.btn:active:hover{background-color:#3f74a3}.open .blue-madison.btn.dropdown-toggle{background-image:none}.blue-madison.btn.disabled,.blue-madison.btn.disabled.active,.blue-madison.btn.disabled:active,.blue-madison.btn.disabled:focus,.blue-madison.btn.disabled:hover,.blue-madison.btn[disabled],.blue-madison.btn[disabled].active,.blue-madison.btn[disabled]:active,.blue-madison.btn[disabled]:focus,.blue-madison.btn[disabled]:hover,fieldset[disabled] .blue-madison.btn,fieldset[disabled] .blue-madison.btn.active,fieldset[disabled] .blue-madison.btn:active,fieldset[disabled] .blue-madison.btn:focus,fieldset[disabled] .blue-madison.btn:hover{background-color:#578ebe}.blue-madison.btn .badge{color:#578ebe;background-color:#FFF}.portlet.blue-madison,.portlet.box.blue-madison>.portlet-title,.portlet>.portlet-body.blue-madison{background-color:#578ebe}.btn.blue-madison-stripe{border-left:3px solid #578ebe}.portlet.solid.blue-madison>.portlet-body,.portlet.solid.blue-madison>.portlet-title{border:0;color:#FFF}.portlet.solid.blue-madison>.portlet-title>.caption>i{color:#FFF}.portlet.solid.blue-madison>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.blue-madison>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.blue-madison>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.blue-madison>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.blue-madison>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.blue-madison>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.blue-madison{border:1px solid #7ca7cc;border-top:0}.portlet.box.blue-madison>.portlet-title>.caption,.portlet.box.blue-madison>.portlet-title>.caption>i{color:#FFF}.portlet.box.blue-madison>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #a8c4dd;color:#bad1e4}.portlet.box.blue-madison>.portlet-title>.actions .btn-default>i{color:#c5d8e9}.portlet.box.blue-madison>.portlet-title>.actions .btn-default.active,.portlet.box.blue-madison>.portlet-title>.actions .btn-default:active,.portlet.box.blue-madison>.portlet-title>.actions .btn-default:focus,.portlet.box.blue-madison>.portlet-title>.actions .btn-default:hover{border:1px solid #cdddec;color:#dfeaf3}.dashboard-stat.blue-madison{background-color:#578ebe}.dashboard-stat.blue-madison.dashboard-stat-light:hover{background-color:#4884b8}.dashboard-stat.blue-madison .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.blue-madison .details .number{color:#FFF}.dashboard-stat.blue-madison .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.blue-madison .more{color:#FFF;background-color:#4884b8}.bg-blue-madison{border-color:#578ebe!important;background-image:none!important;background-color:#578ebe!important;color:#FFF!important}.font-blue-madison{color:#578ebe!important}.progress-bar.blue-madison{background:#578ebe!important;color:#FFF!important}.blue-chambray.btn{color:#FFF;background-color:#2C3E50;border-color:""}.blue-chambray.btn.active,.blue-chambray.btn:active,.blue-chambray.btn:focus,.blue-chambray.btn:hover,.open .blue-chambray.btn.dropdown-toggle{color:#FFF;background-color:#1f2c39}.blue-chambray.btn.active,.blue-chambray.btn:active{background-image:none;background-color:#161f29}.blue-chambray.btn.active:hover,.blue-chambray.btn:active:hover{background-color:#1a242f}.open .blue-chambray.btn.dropdown-toggle{background-image:none}.blue-chambray.btn.disabled,.blue-chambray.btn.disabled.active,.blue-chambray.btn.disabled:active,.blue-chambray.btn.disabled:focus,.blue-chambray.btn.disabled:hover,.blue-chambray.btn[disabled],.blue-chambray.btn[disabled].active,.blue-chambray.btn[disabled]:active,.blue-chambray.btn[disabled]:focus,.blue-chambray.btn[disabled]:hover,fieldset[disabled] .blue-chambray.btn,fieldset[disabled] .blue-chambray.btn.active,fieldset[disabled] .blue-chambray.btn:active,fieldset[disabled] .blue-chambray.btn:focus,fieldset[disabled] .blue-chambray.btn:hover{background-color:#2C3E50}.blue-chambray.btn .badge{color:#2C3E50;background-color:#FFF}.portlet.blue-chambray,.portlet.box.blue-chambray>.portlet-title,.portlet>.portlet-body.blue-chambray{background-color:#2C3E50}.btn.blue-chambray-stripe{border-left:3px solid #2C3E50}.portlet.solid.blue-chambray>.portlet-body,.portlet.solid.blue-chambray>.portlet-title{border:0;color:#FFF}.portlet.solid.blue-chambray>.portlet-title>.caption>i{color:#FFF}.portlet.solid.blue-chambray>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.blue-chambray>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.blue-chambray>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.blue-chambray>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.blue-chambray>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.blue-chambray>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.blue-chambray{border:1px solid #3e5771;border-top:0}.portlet.box.blue-chambray>.portlet-title>.caption,.portlet.box.blue-chambray>.portlet-title>.caption>i{color:#FFF}.portlet.box.blue-chambray>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #547698;color:#5f83a7}.portlet.box.blue-chambray>.portlet-title>.actions .btn-default>i{color:#698aac}.portlet.box.blue-chambray>.portlet-title>.actions .btn-default.active,.portlet.box.blue-chambray>.portlet-title>.actions .btn-default:active,.portlet.box.blue-chambray>.portlet-title>.actions .btn-default:focus,.portlet.box.blue-chambray>.portlet-title>.actions .btn-default:hover{border:1px solid #6f90b0;color:#809cb9}.dashboard-stat.blue-chambray{background-color:#2C3E50}.dashboard-stat.blue-chambray.dashboard-stat-light:hover{background-color:#253443}.dashboard-stat.blue-chambray .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.blue-chambray .details .number{color:#FFF}.dashboard-stat.blue-chambray .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.blue-chambray .more{color:#FFF;background-color:#253443}.bg-blue-chambray{border-color:#2C3E50!important;background-image:none!important;background-color:#2C3E50!important;color:#FFF!important}.font-blue-chambray{color:#2C3E50!important}.progress-bar.blue-chambray{background:#2C3E50!important;color:#FFF!important}.blue-ebonyclay.btn{color:#FFF;background-color:#22313F;border-color:""}.blue-ebonyclay.btn.active,.blue-ebonyclay.btn:active,.blue-ebonyclay.btn:focus,.blue-ebonyclay.btn:hover,.open .blue-ebonyclay.btn.dropdown-toggle{color:#FFF;background-color:#151f28}.blue-ebonyclay.btn.active,.blue-ebonyclay.btn:active{background-image:none;background-color:#0d1217}.blue-ebonyclay.btn.active:hover,.blue-ebonyclay.btn:active:hover{background-color:#10171e}.open .blue-ebonyclay.btn.dropdown-toggle{background-image:none}.blue-ebonyclay.btn.disabled,.blue-ebonyclay.btn.disabled.active,.blue-ebonyclay.btn.disabled:active,.blue-ebonyclay.btn.disabled:focus,.blue-ebonyclay.btn.disabled:hover,.blue-ebonyclay.btn[disabled],.blue-ebonyclay.btn[disabled].active,.blue-ebonyclay.btn[disabled]:active,.blue-ebonyclay.btn[disabled]:focus,.blue-ebonyclay.btn[disabled]:hover,fieldset[disabled] .blue-ebonyclay.btn,fieldset[disabled] .blue-ebonyclay.btn.active,fieldset[disabled] .blue-ebonyclay.btn:active,fieldset[disabled] .blue-ebonyclay.btn:focus,fieldset[disabled] .blue-ebonyclay.btn:hover{background-color:#22313F}.blue-ebonyclay.btn .badge{color:#22313F;background-color:#FFF}.portlet.blue-ebonyclay,.portlet.box.blue-ebonyclay>.portlet-title,.portlet>.portlet-body.blue-ebonyclay{background-color:#22313F}.btn.blue-ebonyclay-stripe{border-left:3px solid #22313F}.portlet.solid.blue-ebonyclay>.portlet-body,.portlet.solid.blue-ebonyclay>.portlet-title{border:0;color:#FFF}.portlet.solid.blue-ebonyclay>.portlet-title>.caption>i{color:#FFF}.portlet.solid.blue-ebonyclay>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.blue-ebonyclay>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.blue-ebonyclay>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.blue-ebonyclay>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.blue-ebonyclay>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.blue-ebonyclay>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.blue-ebonyclay{border:1px solid #344b60;border-top:0}.portlet.box.blue-ebonyclay>.portlet-title>.caption,.portlet.box.blue-ebonyclay>.portlet-title>.caption>i{color:#FFF}.portlet.box.blue-ebonyclay>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #496a88;color:#527798}.portlet.box.blue-ebonyclay>.portlet-title>.actions .btn-default>i{color:#587ea2}.portlet.box.blue-ebonyclay>.portlet-title>.actions .btn-default.active,.portlet.box.blue-ebonyclay>.portlet-title>.actions .btn-default:active,.portlet.box.blue-ebonyclay>.portlet-title>.actions .btn-default:focus,.portlet.box.blue-ebonyclay>.portlet-title>.actions .btn-default:hover{border:1px solid #5d83a7;color:#6d90b0}.dashboard-stat.blue-ebonyclay{background-color:#22313F}.dashboard-stat.blue-ebonyclay.dashboard-stat-light:hover{background-color:#1b2732}.dashboard-stat.blue-ebonyclay .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.blue-ebonyclay .details .number{color:#FFF}.dashboard-stat.blue-ebonyclay .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.blue-ebonyclay .more{color:#FFF;background-color:#1b2732}.bg-blue-ebonyclay{border-color:#22313F!important;background-image:none!important;background-color:#22313F!important;color:#FFF!important}.font-blue-ebonyclay{color:#22313F!important}.progress-bar.blue-ebonyclay{background:#22313F!important;color:#FFF!important}.blue-hoki.btn{color:#FFF;background-color:#67809F;border-color:""}.blue-hoki.btn.active,.blue-hoki.btn:active,.blue-hoki.btn:focus,.blue-hoki.btn:hover,.open .blue-hoki.btn.dropdown-toggle{color:#FFF;background-color:#586e8b}.blue-hoki.btn.active,.blue-hoki.btn:active{background-image:none;background-color:#4e627b}.blue-hoki.btn.active:hover,.blue-hoki.btn:active:hover{background-color:#526781}.open .blue-hoki.btn.dropdown-toggle{background-image:none}.blue-hoki.btn.disabled,.blue-hoki.btn.disabled.active,.blue-hoki.btn.disabled:active,.blue-hoki.btn.disabled:focus,.blue-hoki.btn.disabled:hover,.blue-hoki.btn[disabled],.blue-hoki.btn[disabled].active,.blue-hoki.btn[disabled]:active,.blue-hoki.btn[disabled]:focus,.blue-hoki.btn[disabled]:hover,fieldset[disabled] .blue-hoki.btn,fieldset[disabled] .blue-hoki.btn.active,fieldset[disabled] .blue-hoki.btn:active,fieldset[disabled] .blue-hoki.btn:focus,fieldset[disabled] .blue-hoki.btn:hover{background-color:#67809F}.blue-hoki.btn .badge{color:#67809F;background-color:#FFF}.portlet.blue-hoki,.portlet.box.blue-hoki>.portlet-title,.portlet>.portlet-body.blue-hoki{background-color:#67809F}.btn.blue-hoki-stripe{border-left:3px solid #67809F}.portlet.solid.blue-hoki>.portlet-body,.portlet.solid.blue-hoki>.portlet-title{border:0;color:#FFF}.portlet.solid.blue-hoki>.portlet-title>.caption>i{color:#FFF}.portlet.solid.blue-hoki>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.blue-hoki>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.blue-hoki>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.blue-hoki>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.blue-hoki>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.blue-hoki>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.blue-hoki{border:1px solid #869ab3;border-top:0}.portlet.box.blue-hoki>.portlet-title>.caption,.portlet.box.blue-hoki>.portlet-title>.caption>i{color:#FFF}.portlet.box.blue-hoki>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #acb9ca;color:#bbc7d4}.portlet.box.blue-hoki>.portlet-title>.actions .btn-default>i{color:#c5ceda}.portlet.box.blue-hoki>.portlet-title>.actions .btn-default.active,.portlet.box.blue-hoki>.portlet-title>.actions .btn-default:active,.portlet.box.blue-hoki>.portlet-title>.actions .btn-default:focus,.portlet.box.blue-hoki>.portlet-title>.actions .btn-default:hover{border:1px solid #cbd4de;color:#dbe1e8}.dashboard-stat.blue-hoki{background-color:#67809F}.dashboard-stat.blue-hoki.dashboard-stat-light:hover{background-color:#5e7694}.dashboard-stat.blue-hoki .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.blue-hoki .details .number{color:#FFF}.dashboard-stat.blue-hoki .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.blue-hoki .more{color:#FFF;background-color:#5e7694}.bg-blue-hoki{border-color:#67809F!important;background-image:none!important;background-color:#67809F!important;color:#FFF!important}.font-blue-hoki{color:#67809F!important}.progress-bar.blue-hoki{background:#67809F!important;color:#FFF!important}.blue-steel.btn{color:#FFF;background-color:#4B77BE;border-color:""}.blue-steel.btn.active,.blue-steel.btn:active,.blue-steel.btn:focus,.blue-steel.btn:hover,.open .blue-steel.btn.dropdown-toggle{color:#FFF;background-color:#3d66a8}.blue-steel.btn.active,.blue-steel.btn:active{background-image:none;background-color:#365b96}.blue-steel.btn.active:hover,.blue-steel.btn:active:hover{background-color:#395f9d}.open .blue-steel.btn.dropdown-toggle{background-image:none}.blue-steel.btn.disabled,.blue-steel.btn.disabled.active,.blue-steel.btn.disabled:active,.blue-steel.btn.disabled:focus,.blue-steel.btn.disabled:hover,.blue-steel.btn[disabled],.blue-steel.btn[disabled].active,.blue-steel.btn[disabled]:active,.blue-steel.btn[disabled]:focus,.blue-steel.btn[disabled]:hover,fieldset[disabled] .blue-steel.btn,fieldset[disabled] .blue-steel.btn.active,fieldset[disabled] .blue-steel.btn:active,fieldset[disabled] .blue-steel.btn:focus,fieldset[disabled] .blue-steel.btn:hover{background-color:#4B77BE}.blue-steel.btn .badge{color:#4B77BE;background-color:#FFF}.portlet.blue-steel,.portlet.box.blue-steel>.portlet-title,.portlet>.portlet-body.blue-steel{background-color:#4B77BE}.btn.blue-steel-stripe{border-left:3px solid #4B77BE}.portlet.solid.blue-steel>.portlet-body,.portlet.solid.blue-steel>.portlet-title{border:0;color:#FFF}.portlet.solid.blue-steel>.portlet-title>.caption>i{color:#FFF}.portlet.solid.blue-steel>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.blue-steel>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.blue-steel>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.blue-steel>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.blue-steel>.portlet-title>.tools>a.collapse{background-image:url(../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.blue-steel>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.blue-steel{border:1px solid #7093cc;border-top:0}.portlet.box.blue-steel>.portlet-title>.caption,.portlet.box.blue-steel>.portlet-title>.caption>i{color:#FFF}.portlet.box.blue-steel>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #9db5dc;color:#b0c3e3}.portlet.box.blue-steel>.portlet-title>.actions .btn-default>i{color:#bbcce7}.portlet.box.blue-steel>.portlet-title>.actions .btn-default.active,.portlet.box.blue-steel>.portlet-title>.actions .btn-default:active,.portlet.box.blue-steel>.portlet-title>.actions .btn-default:focus,.portlet.box.blue-steel>.portlet-title>.actions .btn-default:hover{border:1px solid #c3d2e9;color:#d6e0f0}.dashboard-stat.blue-steel{background-color:#4B77BE}.dashboard-stat.blue-steel.dashboard-stat-light:hover{background-color:#416db4}.dashboard-stat.blue-steel .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.blue-steel .details .number{color:#FFF}.dashboard-stat.blue-steel .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.blue-steel .more{color:#FFF;background-color:#416db4}.bg-blue-steel{border-color:#4B77BE!important;background-image:none!important;background-color:#4B77BE!important;color:#FFF!important}.font-blue-steel{color:#4B77BE!important}.progress-bar.blue-steel{background:#4B77BE!important;color:#FFF!important}.blue-soft.btn{color:#FFF;background-color:#4c87b9;border-color:""}.blue-soft.btn.active,.blue-soft.btn:active,.blue-soft.btn:focus,.blue-soft.btn:hover,.open .blue-soft.btn.dropdown-toggle{color:#FFF;background-color:#3f75a2}.blue-soft.btn.active,.blue-soft.btn:active{background-image:none;background-color:#386890}.blue-soft.btn.active:hover,.blue-soft.btn:active:hover{background-color:#3b6d97}.open .blue-soft.btn.dropdown-toggle{background-image:none}.blue-soft.btn.disabled,.blue-soft.btn.disabled.active,.blue-soft.btn.disabled:active,.blue-soft.btn.disabled:focus,.blue-soft.btn.disabled:hover,.blue-soft.btn[disabled],.blue-soft.btn[disabled].active,.blue-soft.btn[disabled]:active,.blue-soft.btn[disabled]:focus,.blue-soft.btn[disabled]:hover,fieldset[disabled] .blue-soft.btn,fieldset[disabled] .blue-soft.btn.active,fieldset[disabled] .blue-soft.btn:active,fieldset[disabled] .blue-soft.btn:focus,fieldset[disabled] .blue-soft.btn:hover{background-color:#4c87b9}.blue-soft.btn .badge{color:#4c87b9;background-color:#FFF}.portlet.blue-soft,.portlet.box.blue-soft>.portlet-title,.portlet>.portlet-body.blue-soft{background-color:#4c87b9}.btn.blue-soft-stripe{border-left:3px solid #4c87b9}.portlet.solid.blue-soft>.portlet-body,.portlet.solid.blue-soft>.portlet-title{border:0;color:#FFF}.portlet.solid.blue-soft>.portlet-title>.caption>i{color:#FFF}.portlet.solid.blue-soft>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.blue-soft>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.blue-soft>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.blue-soft>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.blue-soft>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.blue-soft>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.blue-soft{border:1px solid #71a0c7;border-top:0}.portlet.box.blue-soft>.portlet-title>.caption,.portlet.box.blue-soft>.portlet-title>.caption>i{color:#FFF}.portlet.box.blue-soft>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #9dbdd9;color:#afc9e0}.portlet.box.blue-soft>.portlet-title>.actions .btn-default>i{color:#bad1e4}.portlet.box.blue-soft>.portlet-title>.actions .btn-default.active,.portlet.box.blue-soft>.portlet-title>.actions .btn-default:active,.portlet.box.blue-soft>.portlet-title>.actions .btn-default:focus,.portlet.box.blue-soft>.portlet-title>.actions .btn-default:hover{border:1px solid #c1d6e7;color:#d4e2ee}.dashboard-stat.blue-soft{background-color:#4c87b9}.dashboard-stat.blue-soft.dashboard-stat-light:hover{background-color:#447dad}.dashboard-stat.blue-soft .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.blue-soft .details .number{color:#FFF}.dashboard-stat.blue-soft .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.blue-soft .more{color:#FFF;background-color:#447dad}.bg-blue-soft{border-color:#4c87b9!important;background-image:none!important;background-color:#4c87b9!important;color:#FFF!important}.font-blue-soft{color:#4c87b9!important}.progress-bar.blue-soft{background:#4c87b9!important;color:#FFF!important}.blue-dark.btn{color:#FFF;background-color:#5e738b;border-color:""}.blue-dark.btn.active,.blue-dark.btn:active,.blue-dark.btn:focus,.blue-dark.btn:hover,.open .blue-dark.btn.dropdown-toggle{color:#FFF;background-color:#506176}.blue-dark.btn.active,.blue-dark.btn:active{background-image:none;background-color:#455566}.blue-dark.btn.active:hover,.blue-dark.btn:active:hover{background-color:#495a6d}.open .blue-dark.btn.dropdown-toggle{background-image:none}.blue-dark.btn.disabled,.blue-dark.btn.disabled.active,.blue-dark.btn.disabled:active,.blue-dark.btn.disabled:focus,.blue-dark.btn.disabled:hover,.blue-dark.btn[disabled],.blue-dark.btn[disabled].active,.blue-dark.btn[disabled]:active,.blue-dark.btn[disabled]:focus,.blue-dark.btn[disabled]:hover,fieldset[disabled] .blue-dark.btn,fieldset[disabled] .blue-dark.btn.active,fieldset[disabled] .blue-dark.btn:active,fieldset[disabled] .blue-dark.btn:focus,fieldset[disabled] .blue-dark.btn:hover{background-color:#5e738b}.blue-dark.btn .badge{color:#5e738b;background-color:#FFF}.portlet.blue-dark,.portlet.box.blue-dark>.portlet-title,.portlet>.portlet-body.blue-dark{background-color:#5e738b}.btn.blue-dark-stripe{border-left:3px solid #5e738b}.portlet.solid.blue-dark>.portlet-body,.portlet.solid.blue-dark>.portlet-title{border:0;color:#FFF}.portlet.solid.blue-dark>.portlet-title>.caption>i{color:#FFF}.portlet.solid.blue-dark>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.blue-dark>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.blue-dark>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.blue-dark>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.blue-dark>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.blue-dark>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.blue-dark{border:1px solid #788da4;border-top:0}.portlet.box.blue-dark>.portlet-title>.caption,.portlet.box.blue-dark>.portlet-title>.caption>i{color:#FFF}.portlet.box.blue-dark>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #9dacbd;color:#acb8c7}.portlet.box.blue-dark>.portlet-title>.actions .btn-default>i{color:#b5c0cd}.portlet.box.blue-dark>.portlet-title>.actions .btn-default.active,.portlet.box.blue-dark>.portlet-title>.actions .btn-default:active,.portlet.box.blue-dark>.portlet-title>.actions .btn-default:focus,.portlet.box.blue-dark>.portlet-title>.actions .btn-default:hover{border:1px solid #bbc5d1;color:#cad2db}.dashboard-stat.blue-dark{background-color:#5e738b}.dashboard-stat.blue-dark.dashboard-stat-light:hover{background-color:#56697f}.dashboard-stat.blue-dark .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.blue-dark .details .number{color:#FFF}.dashboard-stat.blue-dark .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.blue-dark .more{color:#FFF;background-color:#56697f}.bg-blue-dark{border-color:#5e738b!important;background-image:none!important;background-color:#5e738b!important;color:#FFF!important}.font-blue-dark{color:#5e738b!important}.progress-bar.blue-dark{background:#5e738b!important;color:#FFF!important}.blue-sharp.btn{color:#FFF;background-color:#5C9BD1;border-color:""}.blue-sharp.btn.active,.blue-sharp.btn:active,.blue-sharp.btn:focus,.blue-sharp.btn:hover,.open .blue-sharp.btn.dropdown-toggle{color:#FFF;background-color:#408ac9}.blue-sharp.btn.active,.blue-sharp.btn:active{background-image:none;background-color:#357dbb}.blue-sharp.btn.active:hover,.blue-sharp.btn:active:hover{background-color:#3782c3}.open .blue-sharp.btn.dropdown-toggle{background-image:none}.blue-sharp.btn.disabled,.blue-sharp.btn.disabled.active,.blue-sharp.btn.disabled:active,.blue-sharp.btn.disabled:focus,.blue-sharp.btn.disabled:hover,.blue-sharp.btn[disabled],.blue-sharp.btn[disabled].active,.blue-sharp.btn[disabled]:active,.blue-sharp.btn[disabled]:focus,.blue-sharp.btn[disabled]:hover,fieldset[disabled] .blue-sharp.btn,fieldset[disabled] .blue-sharp.btn.active,fieldset[disabled] .blue-sharp.btn:active,fieldset[disabled] .blue-sharp.btn:focus,fieldset[disabled] .blue-sharp.btn:hover{background-color:#5C9BD1}.blue-sharp.btn .badge{color:#5C9BD1;background-color:#FFF}.portlet.blue-sharp,.portlet.box.blue-sharp>.portlet-title,.portlet>.portlet-body.blue-sharp{background-color:#5C9BD1}.btn.blue-sharp-stripe{border-left:3px solid #5C9BD1}.portlet.solid.blue-sharp>.portlet-body,.portlet.solid.blue-sharp>.portlet-title{border:0;color:#FFF}.portlet.solid.blue-sharp>.portlet-title>.caption>i{color:#FFF}.portlet.solid.blue-sharp>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.blue-sharp>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.blue-sharp>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.blue-sharp>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.blue-sharp>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.blue-sharp>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.blue-sharp{border:1px solid #84b3dc;border-top:0}.portlet.box.blue-sharp>.portlet-title>.caption,.portlet.box.blue-sharp>.portlet-title>.caption>i{color:#FFF}.portlet.box.blue-sharp>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #b4d1ea;color:#c7ddef}.portlet.box.blue-sharp>.portlet-title>.actions .btn-default>i{color:#d3e4f3}.portlet.box.blue-sharp>.portlet-title>.actions .btn-default.active,.portlet.box.blue-sharp>.portlet-title>.actions .btn-default:active,.portlet.box.blue-sharp>.portlet-title>.actions .btn-default:focus,.portlet.box.blue-sharp>.portlet-title>.actions .btn-default:hover{border:1px solid #dbe9f5;color:#eff5fb}.dashboard-stat.blue-sharp{background-color:#5C9BD1}.dashboard-stat.blue-sharp.dashboard-stat-light:hover{background-color:#4c91cd}.dashboard-stat.blue-sharp .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.blue-sharp .details .number{color:#FFF}.dashboard-stat.blue-sharp .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.blue-sharp .more{color:#FFF;background-color:#4c91cd}.bg-blue-sharp{border-color:#5C9BD1!important;background-image:none!important;background-color:#5C9BD1!important;color:#FFF!important}.font-blue-sharp{color:#5C9BD1!important}.progress-bar.blue-sharp{background:#5C9BD1!important;color:#FFF!important}.green.btn{color:#FFF;background-color:#35aa47;border-color:""}.green.btn.active,.green.btn:active,.green.btn:focus,.green.btn:hover,.open .green.btn.dropdown-toggle{color:#FFF;background-color:#2d8f3c}.green.btn.active,.green.btn:active{background-image:none;background-color:#267b34}.green.btn.active:hover,.green.btn:active:hover{background-color:#298337}.open .green.btn.dropdown-toggle{background-image:none}.green.btn.disabled,.green.btn.disabled.active,.green.btn.disabled:active,.green.btn.disabled:focus,.green.btn.disabled:hover,.green.btn[disabled],.green.btn[disabled].active,.green.btn[disabled]:active,.green.btn[disabled]:focus,.green.btn[disabled]:hover,fieldset[disabled] .green.btn,fieldset[disabled] .green.btn.active,fieldset[disabled] .green.btn:active,fieldset[disabled] .green.btn:focus,fieldset[disabled] .green.btn:hover{background-color:#35aa47}.green.btn .badge{color:#35aa47;background-color:#FFF}.portlet.box.green>.portlet-title,.portlet.green,.portlet>.portlet-body.green{background-color:#35aa47}.btn.green-stripe{border-left:3px solid #35aa47}.portlet.solid.green>.portlet-body,.portlet.solid.green>.portlet-title{border:0;color:#FFF}.portlet.solid.green>.portlet-title>.caption>i{color:#FFF}.portlet.solid.green>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.green>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.green>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.green>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.green>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.green>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.green{border:1px solid #4bc75e;border-top:0}.portlet.box.green>.portlet-title>.caption,.portlet.box.green>.portlet-title>.caption>i{color:#FFF}.portlet.box.green>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #7ad588;color:#8ddc99}.portlet.box.green>.portlet-title>.actions .btn-default>i{color:#99dfa4}.portlet.box.green>.portlet-title>.actions .btn-default.active,.portlet.box.green>.portlet-title>.actions .btn-default:active,.portlet.box.green>.portlet-title>.actions .btn-default:focus,.portlet.box.green>.portlet-title>.actions .btn-default:hover{border:1px solid #a1e2ab;color:#b4e8bc}.dashboard-stat.green{background-color:#35aa47}.dashboard-stat.green.dashboard-stat-light:hover{background-color:#309a41}.dashboard-stat.green .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.green .details .number{color:#FFF}.dashboard-stat.green .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.green .more{color:#FFF;background-color:#309a41}.bg-green{border-color:#35aa47!important;background-image:none!important;background-color:#35aa47!important;color:#FFF!important}.font-green{color:#35aa47!important}.progress-bar.green{background:#35aa47!important;color:#FFF!important}.green-meadow.btn{color:#FFF;background-color:#1BBC9B;border-color:""}.green-meadow.btn.active,.green-meadow.btn:active,.green-meadow.btn:focus,.green-meadow.btn:hover,.open .green-meadow.btn.dropdown-toggle{color:#FFF;background-color:#179d81}.green-meadow.btn.active,.green-meadow.btn:active{background-image:none;background-color:#13866f}.green-meadow.btn.active:hover,.green-meadow.btn:active:hover{background-color:#158f76}.open .green-meadow.btn.dropdown-toggle{background-image:none}.green-meadow.btn.disabled,.green-meadow.btn.disabled.active,.green-meadow.btn.disabled:active,.green-meadow.btn.disabled:focus,.green-meadow.btn.disabled:hover,.green-meadow.btn[disabled],.green-meadow.btn[disabled].active,.green-meadow.btn[disabled]:active,.green-meadow.btn[disabled]:focus,.green-meadow.btn[disabled]:hover,fieldset[disabled] .green-meadow.btn,fieldset[disabled] .green-meadow.btn.active,fieldset[disabled] .green-meadow.btn:active,fieldset[disabled] .green-meadow.btn:focus,fieldset[disabled] .green-meadow.btn:hover{background-color:#1BBC9B}.green-meadow.btn .badge{color:#1BBC9B;background-color:#FFF}.portlet.box.green-meadow>.portlet-title,.portlet.green-meadow,.portlet>.portlet-body.green-meadow{background-color:#1BBC9B}.btn.green-meadow-stripe{border-left:3px solid #1BBC9B}.portlet.solid.green-meadow>.portlet-body,.portlet.solid.green-meadow>.portlet-title{border:0;color:#FFF}.portlet.solid.green-meadow>.portlet-title>.caption>i{color:#FFF}.portlet.solid.green-meadow>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.green-meadow>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.green-meadow>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.green-meadow>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.green-meadow>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.green-meadow>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.green-meadow{border:1px solid #2ae0bb;border-top:0}.portlet.box.green-meadow>.portlet-title>.caption,.portlet.box.green-meadow>.portlet-title>.caption>i{color:#FFF}.portlet.box.green-meadow>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #5fe8cc;color:#75ebd3}.portlet.box.green-meadow>.portlet-title>.actions .btn-default>i{color:#83edd7}.portlet.box.green-meadow>.portlet-title>.actions .btn-default.active,.portlet.box.green-meadow>.portlet-title>.actions .btn-default:active,.portlet.box.green-meadow>.portlet-title>.actions .btn-default:focus,.portlet.box.green-meadow>.portlet-title>.actions .btn-default:hover{border:1px solid #8ceeda;color:#a2f2e1}.dashboard-stat.green-meadow{background-color:#1BBC9B}.dashboard-stat.green-meadow.dashboard-stat-light:hover{background-color:#18aa8c}.dashboard-stat.green-meadow .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.green-meadow .details .number{color:#FFF}.dashboard-stat.green-meadow .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.green-meadow .more{color:#FFF;background-color:#18aa8c}.bg-green-meadow{border-color:#1BBC9B!important;background-image:none!important;background-color:#1BBC9B!important;color:#FFF!important}.font-green-meadow{color:#1BBC9B!important}.progress-bar.green-meadow{background:#1BBC9B!important;color:#FFF!important}.green-seagreen.btn{color:#FFF;background-color:#1BA39C;border-color:""}.green-seagreen.btn.active,.green-seagreen.btn:active,.green-seagreen.btn:focus,.green-seagreen.btn:hover,.open .green-seagreen.btn.dropdown-toggle{color:#FFF;background-color:#16847f}.green-seagreen.btn.active,.green-seagreen.btn:active{background-image:none;background-color:#126e6a}.green-seagreen.btn.active:hover,.green-seagreen.btn:active:hover{background-color:#147772}.open .green-seagreen.btn.dropdown-toggle{background-image:none}.green-seagreen.btn.disabled,.green-seagreen.btn.disabled.active,.green-seagreen.btn.disabled:active,.green-seagreen.btn.disabled:focus,.green-seagreen.btn.disabled:hover,.green-seagreen.btn[disabled],.green-seagreen.btn[disabled].active,.green-seagreen.btn[disabled]:active,.green-seagreen.btn[disabled]:focus,.green-seagreen.btn[disabled]:hover,fieldset[disabled] .green-seagreen.btn,fieldset[disabled] .green-seagreen.btn.active,fieldset[disabled] .green-seagreen.btn:active,fieldset[disabled] .green-seagreen.btn:focus,fieldset[disabled] .green-seagreen.btn:hover{background-color:#1BA39C}.green-seagreen.btn .badge{color:#1BA39C;background-color:#FFF}.portlet.box.green-seagreen>.portlet-title,.portlet.green-seagreen,.portlet>.portlet-body.green-seagreen{background-color:#1BA39C}.btn.green-seagreen-stripe{border-left:3px solid #1BA39C}.portlet.solid.green-seagreen>.portlet-body,.portlet.solid.green-seagreen>.portlet-title{border:0;color:#FFF}.portlet.solid.green-seagreen>.portlet-title>.caption>i{color:#FFF}.portlet.solid.green-seagreen>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.green-seagreen>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.green-seagreen>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.green-seagreen>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.green-seagreen>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.green-seagreen>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.green-seagreen{border:1px solid #22cfc6;border-top:0}.portlet.box.green-seagreen>.portlet-title>.caption,.portlet.box.green-seagreen>.portlet-title>.caption>i{color:#FFF}.portlet.box.green-seagreen>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #4de1da;color:#63e5de}.portlet.box.green-seagreen>.portlet-title>.actions .btn-default>i{color:#70e7e1}.portlet.box.green-seagreen>.portlet-title>.actions .btn-default.active,.portlet.box.green-seagreen>.portlet-title>.actions .btn-default:active,.portlet.box.green-seagreen>.portlet-title>.actions .btn-default:focus,.portlet.box.green-seagreen>.portlet-title>.actions .btn-default:hover{border:1px solid #78e9e3;color:#8eece8}.dashboard-stat.green-seagreen{background-color:#1BA39C}.dashboard-stat.green-seagreen.dashboard-stat-light:hover{background-color:#18918b}.dashboard-stat.green-seagreen .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.green-seagreen .details .number{color:#FFF}.dashboard-stat.green-seagreen .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.green-seagreen .more{color:#FFF;background-color:#18918b}.bg-green-seagreen{border-color:#1BA39C!important;background-image:none!important;background-color:#1BA39C!important;color:#FFF!important}.font-green-seagreen{color:#1BA39C!important}.progress-bar.green-seagreen{background:#1BA39C!important;color:#FFF!important}.green-turquoise.btn{color:#FFF;background-color:#36D7B7;border-color:""}.green-turquoise.btn.active,.green-turquoise.btn:active,.green-turquoise.btn:focus,.green-turquoise.btn:hover,.open .green-turquoise.btn.dropdown-toggle{color:#FFF;background-color:#27c3a4}.green-turquoise.btn.active,.green-turquoise.btn:active{background-image:none;background-color:#22ad92}.green-turquoise.btn.active:hover,.green-turquoise.btn:active:hover{background-color:#24b699}.open .green-turquoise.btn.dropdown-toggle{background-image:none}.green-turquoise.btn.disabled,.green-turquoise.btn.disabled.active,.green-turquoise.btn.disabled:active,.green-turquoise.btn.disabled:focus,.green-turquoise.btn.disabled:hover,.green-turquoise.btn[disabled],.green-turquoise.btn[disabled].active,.green-turquoise.btn[disabled]:active,.green-turquoise.btn[disabled]:focus,.green-turquoise.btn[disabled]:hover,fieldset[disabled] .green-turquoise.btn,fieldset[disabled] .green-turquoise.btn.active,fieldset[disabled] .green-turquoise.btn:active,fieldset[disabled] .green-turquoise.btn:focus,fieldset[disabled] .green-turquoise.btn:hover{background-color:#36D7B7}.green-turquoise.btn .badge{color:#36D7B7;background-color:#FFF}.portlet.box.green-turquoise>.portlet-title,.portlet.green-turquoise,.portlet>.portlet-body.green-turquoise{background-color:#36D7B7}.btn.green-turquoise-stripe{border-left:3px solid #36D7B7}.portlet.solid.green-turquoise>.portlet-body,.portlet.solid.green-turquoise>.portlet-title{border:0;color:#FFF}.portlet.solid.green-turquoise>.portlet-title>.caption>i{color:#FFF}.portlet.solid.green-turquoise>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.green-turquoise>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.green-turquoise>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.green-turquoise>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.green-turquoise>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.green-turquoise>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.green-turquoise{border:1px solid #61dfc6;border-top:0}.portlet.box.green-turquoise>.portlet-title>.caption,.portlet.box.green-turquoise>.portlet-title>.caption>i{color:#FFF}.portlet.box.green-turquoise>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #94ead9;color:#a9eee0}.portlet.box.green-turquoise>.portlet-title>.actions .btn-default>i{color:#b6f0e5}.portlet.box.green-turquoise>.portlet-title>.actions .btn-default.active,.portlet.box.green-turquoise>.portlet-title>.actions .btn-default:active,.portlet.box.green-turquoise>.portlet-title>.actions .btn-default:focus,.portlet.box.green-turquoise>.portlet-title>.actions .btn-default:hover{border:1px solid #bef2e8;color:#d3f6ef}.dashboard-stat.green-turquoise{background-color:#36D7B7}.dashboard-stat.green-turquoise.dashboard-stat-light:hover{background-color:#29cfae}.dashboard-stat.green-turquoise .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.green-turquoise .details .number{color:#FFF}.dashboard-stat.green-turquoise .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.green-turquoise .more{color:#FFF;background-color:#29cfae}.bg-green-turquoise{border-color:#36D7B7!important;background-image:none!important;background-color:#36D7B7!important;color:#FFF!important}.font-green-turquoise{color:#36D7B7!important}.progress-bar.green-turquoise{background:#36D7B7!important;color:#FFF!important}.green-haze.btn{color:#FFF;background-color:#44b6ae;border-color:""}.green-haze.btn.active,.green-haze.btn:active,.green-haze.btn:focus,.green-haze.btn:hover,.open .green-haze.btn.dropdown-toggle{color:#FFF;background-color:#3a9c95}.green-haze.btn.active,.green-haze.btn:active{background-image:none;background-color:#338983}.green-haze.btn.active:hover,.green-haze.btn:active:hover{background-color:#36918b}.open .green-haze.btn.dropdown-toggle{background-image:none}.green-haze.btn.disabled,.green-haze.btn.disabled.active,.green-haze.btn.disabled:active,.green-haze.btn.disabled:focus,.green-haze.btn.disabled:hover,.green-haze.btn[disabled],.green-haze.btn[disabled].active,.green-haze.btn[disabled]:active,.green-haze.btn[disabled]:focus,.green-haze.btn[disabled]:hover,fieldset[disabled] .green-haze.btn,fieldset[disabled] .green-haze.btn.active,fieldset[disabled] .green-haze.btn:active,fieldset[disabled] .green-haze.btn:focus,fieldset[disabled] .green-haze.btn:hover{background-color:#44b6ae}.green-haze.btn .badge{color:#44b6ae;background-color:#FFF}.portlet.box.green-haze>.portlet-title,.portlet.green-haze,.portlet>.portlet-body.green-haze{background-color:#44b6ae}.btn.green-haze-stripe{border-left:3px solid #44b6ae}.portlet.solid.green-haze>.portlet-body,.portlet.solid.green-haze>.portlet-title{border:0;color:#FFF}.portlet.solid.green-haze>.portlet-title>.caption>i{color:#FFF}.portlet.solid.green-haze>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.green-haze>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.green-haze>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.green-haze>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.green-haze>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.green-haze>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.green-haze{border:1px solid #67c6bf;border-top:0}.portlet.box.green-haze>.portlet-title>.caption,.portlet.box.green-haze>.portlet-title>.caption>i{color:#FFF}.portlet.box.green-haze>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #93d7d2;color:#a6deda}.portlet.box.green-haze>.portlet-title>.actions .btn-default>i{color:#b1e2de}.portlet.box.green-haze>.portlet-title>.actions .btn-default.active,.portlet.box.green-haze>.portlet-title>.actions .btn-default:active,.portlet.box.green-haze>.portlet-title>.actions .btn-default:focus,.portlet.box.green-haze>.portlet-title>.actions .btn-default:hover{border:1px solid #b9e5e2;color:#cbece9}.dashboard-stat.green-haze{background-color:#44b6ae}.dashboard-stat.green-haze.dashboard-stat-light:hover{background-color:#3ea7a0}.dashboard-stat.green-haze .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.green-haze .details .number{color:#FFF}.dashboard-stat.green-haze .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.green-haze .more{color:#FFF;background-color:#3ea7a0}.bg-green-haze{border-color:#44b6ae!important;background-image:none!important;background-color:#44b6ae!important;color:#FFF!important}.font-green-haze{color:#44b6ae!important}.progress-bar.green-haze{background:#44b6ae!important;color:#FFF!important}.green-jungle.btn{color:#FFF;background-color:#26C281;border-color:""}.green-jungle.btn.active,.green-jungle.btn:active,.green-jungle.btn:focus,.green-jungle.btn:hover,.open .green-jungle.btn.dropdown-toggle{color:#FFF;background-color:#20a46d}.green-jungle.btn.active,.green-jungle.btn:active{background-image:none;background-color:#1c8f5f}.green-jungle.btn.active:hover,.green-jungle.btn:active:hover{background-color:#1e9765}.open .green-jungle.btn.dropdown-toggle{background-image:none}.green-jungle.btn.disabled,.green-jungle.btn.disabled.active,.green-jungle.btn.disabled:active,.green-jungle.btn.disabled:focus,.green-jungle.btn.disabled:hover,.green-jungle.btn[disabled],.green-jungle.btn[disabled].active,.green-jungle.btn[disabled]:active,.green-jungle.btn[disabled]:focus,.green-jungle.btn[disabled]:hover,fieldset[disabled] .green-jungle.btn,fieldset[disabled] .green-jungle.btn.active,fieldset[disabled] .green-jungle.btn:active,fieldset[disabled] .green-jungle.btn:focus,fieldset[disabled] .green-jungle.btn:hover{background-color:#26C281}.green-jungle.btn .badge{color:#26C281;background-color:#FFF}.portlet.box.green-jungle>.portlet-title,.portlet.green-jungle,.portlet>.portlet-body.green-jungle{background-color:#26C281}.btn.green-jungle-stripe{border-left:3px solid #26C281}.portlet.solid.green-jungle>.portlet-body,.portlet.solid.green-jungle>.portlet-title{border:0;color:#FFF}.portlet.solid.green-jungle>.portlet-title>.caption>i{color:#FFF}.portlet.solid.green-jungle>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.green-jungle>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.green-jungle>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.green-jungle>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.green-jungle>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.green-jungle>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.green-jungle{border:1px solid #41da9a;border-top:0}.portlet.box.green-jungle>.portlet-title>.caption,.portlet.box.green-jungle>.portlet-title>.caption>i{color:#FFF}.portlet.box.green-jungle>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #74e4b5;color:#8ae8c1}.portlet.box.green-jungle>.portlet-title>.actions .btn-default>i{color:#96ebc8}.portlet.box.green-jungle>.portlet-title>.actions .btn-default.active,.portlet.box.green-jungle>.portlet-title>.actions .btn-default:active,.portlet.box.green-jungle>.portlet-title>.actions .btn-default:focus,.portlet.box.green-jungle>.portlet-title>.actions .btn-default:hover{border:1px solid #9feccc;color:#b4f0d7}.dashboard-stat.green-jungle{background-color:#26C281}.dashboard-stat.green-jungle.dashboard-stat-light:hover{background-color:#23b176}.dashboard-stat.green-jungle .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.green-jungle .details .number{color:#FFF}.dashboard-stat.green-jungle .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.green-jungle .more{color:#FFF;background-color:#23b176}.bg-green-jungle{border-color:#26C281!important;background-image:none!important;background-color:#26C281!important;color:#FFF!important}.font-green-jungle{color:#26C281!important}.progress-bar.green-jungle{background:#26C281!important;color:#FFF!important}.green-sharp.btn{color:#FFF;background-color:#4DB3A2;border-color:""}.green-sharp.btn.active,.green-sharp.btn:active,.green-sharp.btn:focus,.green-sharp.btn:hover,.open .green-sharp.btn.dropdown-toggle{color:#FFF;background-color:#429a8c}.green-sharp.btn.active,.green-sharp.btn:active{background-image:none;background-color:#3a897b}.green-sharp.btn.active:hover,.green-sharp.btn:active:hover{background-color:#3d9082}.open .green-sharp.btn.dropdown-toggle{background-image:none}.green-sharp.btn.disabled,.green-sharp.btn.disabled.active,.green-sharp.btn.disabled:active,.green-sharp.btn.disabled:focus,.green-sharp.btn.disabled:hover,.green-sharp.btn[disabled],.green-sharp.btn[disabled].active,.green-sharp.btn[disabled]:active,.green-sharp.btn[disabled]:focus,.green-sharp.btn[disabled]:hover,fieldset[disabled] .green-sharp.btn,fieldset[disabled] .green-sharp.btn.active,fieldset[disabled] .green-sharp.btn:active,fieldset[disabled] .green-sharp.btn:focus,fieldset[disabled] .green-sharp.btn:hover{background-color:#4DB3A2}.green-sharp.btn .badge{color:#4DB3A2;background-color:#FFF}.portlet.box.green-sharp>.portlet-title,.portlet.green-sharp,.portlet>.portlet-body.green-sharp{background-color:#4DB3A2}.btn.green-sharp-stripe{border-left:3px solid #4DB3A2}.portlet.solid.green-sharp>.portlet-body,.portlet.solid.green-sharp>.portlet-title{border:0;color:#FFF}.portlet.solid.green-sharp>.portlet-title>.caption>i{color:#FFF}.portlet.solid.green-sharp>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.green-sharp>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.green-sharp>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.green-sharp>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.green-sharp>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.green-sharp>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.green-sharp{border:1px solid #71c2b5;border-top:0}.portlet.box.green-sharp>.portlet-title>.caption,.portlet.box.green-sharp>.portlet-title>.caption>i{color:#FFF}.portlet.box.green-sharp>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #9cd5cb;color:#addcd4}.portlet.box.green-sharp>.portlet-title>.actions .btn-default>i{color:#b8e1da}.portlet.box.green-sharp>.portlet-title>.actions .btn-default.active,.portlet.box.green-sharp>.portlet-title>.actions .btn-default:active,.portlet.box.green-sharp>.portlet-title>.actions .btn-default:focus,.portlet.box.green-sharp>.portlet-title>.actions .btn-default:hover{border:1px solid #bfe4de;color:#d1ebe7}.dashboard-stat.green-sharp{background-color:#4DB3A2}.dashboard-stat.green-sharp.dashboard-stat-light:hover{background-color:#46a595}.dashboard-stat.green-sharp .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.green-sharp .details .number{color:#FFF}.dashboard-stat.green-sharp .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.green-sharp .more{color:#FFF;background-color:#46a595}.bg-green-sharp{border-color:#4DB3A2!important;background-image:none!important;background-color:#4DB3A2!important;color:#FFF!important}.font-green-sharp{color:#4DB3A2!important}.progress-bar.green-sharp{background:#4DB3A2!important;color:#FFF!important}.green-soft.btn{color:#FFF;background-color:#3faba4;border-color:""}.green-soft.btn.active,.green-soft.btn:active,.green-soft.btn:focus,.green-soft.btn:hover,.open .green-soft.btn.dropdown-toggle{color:#FFF;background-color:#35918b}.green-soft.btn.active,.green-soft.btn:active{background-image:none;background-color:#2f7e79}.green-soft.btn.active:hover,.green-soft.btn:active:hover{background-color:#318680}.open .green-soft.btn.dropdown-toggle{background-image:none}.green-soft.btn.disabled,.green-soft.btn.disabled.active,.green-soft.btn.disabled:active,.green-soft.btn.disabled:focus,.green-soft.btn.disabled:hover,.green-soft.btn[disabled],.green-soft.btn[disabled].active,.green-soft.btn[disabled]:active,.green-soft.btn[disabled]:focus,.green-soft.btn[disabled]:hover,fieldset[disabled] .green-soft.btn,fieldset[disabled] .green-soft.btn.active,fieldset[disabled] .green-soft.btn:active,fieldset[disabled] .green-soft.btn:focus,fieldset[disabled] .green-soft.btn:hover{background-color:#3faba4}.green-soft.btn .badge{color:#3faba4;background-color:#FFF}.portlet.box.green-soft>.portlet-title,.portlet.green-soft,.portlet>.portlet-body.green-soft{background-color:#3faba4}.btn.green-soft-stripe{border-left:3px solid #3faba4}.portlet.solid.green-soft>.portlet-body,.portlet.solid.green-soft>.portlet-title{border:0;color:#FFF}.portlet.solid.green-soft>.portlet-title>.caption>i{color:#FFF}.portlet.solid.green-soft>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.green-soft>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.green-soft>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.green-soft>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.green-soft>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.green-soft>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.green-soft{border:1px solid #5bc2bc;border-top:0}.portlet.box.green-soft>.portlet-title>.caption,.portlet.box.green-soft>.portlet-title>.caption>i{color:#FFF}.portlet.box.green-soft>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #87d3ce;color:#9adad6}.portlet.box.green-soft>.portlet-title>.actions .btn-default>i{color:#a5deda}.portlet.box.green-soft>.portlet-title>.actions .btn-default.active,.portlet.box.green-soft>.portlet-title>.actions .btn-default:active,.portlet.box.green-soft>.portlet-title>.actions .btn-default:focus,.portlet.box.green-soft>.portlet-title>.actions .btn-default:hover{border:1px solid #ade1dd;color:#bfe7e5}.dashboard-stat.green-soft{background-color:#3faba4}.dashboard-stat.green-soft.dashboard-stat-light:hover{background-color:#3a9c96}.dashboard-stat.green-soft .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.green-soft .details .number{color:#FFF}.dashboard-stat.green-soft .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.green-soft .more{color:#FFF;background-color:#3a9c96}.bg-green-soft{border-color:#3faba4!important;background-image:none!important;background-color:#3faba4!important;color:#FFF!important}.font-green-soft{color:#3faba4!important}.progress-bar.green-soft{background:#3faba4!important;color:#FFF!important}.grey.btn{color:#333;background-color:#E5E5E5;border-color:""}.grey.btn.active,.grey.btn:active,.grey.btn:focus,.grey.btn:hover,.open .grey.btn.dropdown-toggle{color:#333;background-color:#d3d3d3}.grey.btn.active,.grey.btn:active{background-image:none;background-color:#c6c6c6}.grey.btn.active:hover,.grey.btn:active:hover{background-color:#ccc}.open .grey.btn.dropdown-toggle{background-image:none}.grey.btn.disabled,.grey.btn.disabled.active,.grey.btn.disabled:active,.grey.btn.disabled:focus,.grey.btn.disabled:hover,.grey.btn[disabled],.grey.btn[disabled].active,.grey.btn[disabled]:active,.grey.btn[disabled]:focus,.grey.btn[disabled]:hover,fieldset[disabled] .grey.btn,fieldset[disabled] .grey.btn.active,fieldset[disabled] .grey.btn:active,fieldset[disabled] .grey.btn:focus,fieldset[disabled] .grey.btn:hover{background-color:#E5E5E5}.grey.btn .badge{color:#E5E5E5;background-color:#333}.portlet.box.grey>.portlet-title,.portlet.grey,.portlet>.portlet-body.grey{background-color:#E5E5E5}.btn.grey-stripe{border-left:3px solid #E5E5E5}.portlet.solid.grey>.portlet-body,.portlet.solid.grey>.portlet-title{border:0;color:#333}.portlet.solid.grey>.portlet-title>.caption>i{color:#333}.portlet.solid.grey>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.grey>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.grey>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.grey>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.grey>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.grey>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.grey{border:1px solid #fff;border-top:0}.portlet.box.grey>.portlet-title>.caption,.portlet.box.grey>.portlet-title>.caption>i{color:#333}.portlet.box.grey>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #fff;color:#fff}.portlet.box.grey>.portlet-title>.actions .btn-default>i{color:#fff}.portlet.box.grey>.portlet-title>.actions .btn-default.active,.portlet.box.grey>.portlet-title>.actions .btn-default:active,.portlet.box.grey>.portlet-title>.actions .btn-default:focus,.portlet.box.grey>.portlet-title>.actions .btn-default:hover{border:1px solid #fff;color:#fff}.dashboard-stat.grey{background-color:#E5E5E5}.dashboard-stat.grey.dashboard-stat-light:hover{background-color:#dbdbdb}.dashboard-stat.grey .visual>i{color:#333;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.grey .details .number{color:#333}.dashboard-stat.grey .details .desc{color:#333;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.grey .more{color:#333;background-color:#dbdbdb}.bg-grey{border-color:#E5E5E5!important;background-image:none!important;background-color:#E5E5E5!important;color:#333!important}.font-grey{color:#E5E5E5!important}.progress-bar.grey{background:#E5E5E5!important;color:#333!important}.grey-steel.btn{color:#80898e;background-color:#e9edef;border-color:""}.grey-steel.btn.active,.grey-steel.btn:active,.grey-steel.btn:focus,.grey-steel.btn:hover,.open .grey-steel.btn.dropdown-toggle{color:#80898e;background-color:#d4dce0}.grey-steel.btn.active,.grey-steel.btn:active{background-image:none;background-color:#c6d0d5}.grey-steel.btn.active:hover,.grey-steel.btn:active:hover{background-color:#cbd5da}.open .grey-steel.btn.dropdown-toggle{background-image:none}.grey-steel.btn.disabled,.grey-steel.btn.disabled.active,.grey-steel.btn.disabled:active,.grey-steel.btn.disabled:focus,.grey-steel.btn.disabled:hover,.grey-steel.btn[disabled],.grey-steel.btn[disabled].active,.grey-steel.btn[disabled]:active,.grey-steel.btn[disabled]:focus,.grey-steel.btn[disabled]:hover,fieldset[disabled] .grey-steel.btn,fieldset[disabled] .grey-steel.btn.active,fieldset[disabled] .grey-steel.btn:active,fieldset[disabled] .grey-steel.btn:focus,fieldset[disabled] .grey-steel.btn:hover{background-color:#e9edef}.grey-steel.btn .badge{color:#e9edef;background-color:#80898e}.portlet.box.grey-steel>.portlet-title,.portlet.grey-steel,.portlet>.portlet-body.grey-steel{background-color:#e9edef}.btn.grey-steel-stripe{border-left:3px solid #e9edef}.portlet.solid.grey-steel>.portlet-body,.portlet.solid.grey-steel>.portlet-title{border:0;color:#80898e}.portlet.solid.grey-steel>.portlet-title>.caption>i{color:#80898e}.portlet.solid.grey-steel>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.grey-steel>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.grey-steel>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.grey-steel>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.grey-steel>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.grey-steel>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.grey-steel{border:1px solid #fff;border-top:0}.portlet.box.grey-steel>.portlet-title>.caption,.portlet.box.grey-steel>.portlet-title>.caption>i{color:#80898e}.portlet.box.grey-steel>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #fff;color:#fff}.portlet.box.grey-steel>.portlet-title>.actions .btn-default>i{color:#fff}.portlet.box.grey-steel>.portlet-title>.actions .btn-default.active,.portlet.box.grey-steel>.portlet-title>.actions .btn-default:active,.portlet.box.grey-steel>.portlet-title>.actions .btn-default:focus,.portlet.box.grey-steel>.portlet-title>.actions .btn-default:hover{border:1px solid #fff;color:#fff}.dashboard-stat.grey-steel{background-color:#e9edef}.dashboard-stat.grey-steel.dashboard-stat-light:hover{background-color:#dde3e6}.dashboard-stat.grey-steel .visual>i{color:#80898e;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.grey-steel .details .number{color:#80898e}.dashboard-stat.grey-steel .details .desc{color:#80898e;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.grey-steel .more{color:#80898e;background-color:#dde3e6}.bg-grey-steel{border-color:#e9edef!important;background-image:none!important;background-color:#e9edef!important;color:#80898e!important}.font-grey-steel{color:#e9edef!important}.progress-bar.grey-steel{background:#e9edef!important;color:#80898e!important}.grey-cararra.btn{color:#333;background-color:#fafafa;border-color:""}.grey-cararra.btn.active,.grey-cararra.btn:active,.grey-cararra.btn:focus,.grey-cararra.btn:hover,.open .grey-cararra.btn.dropdown-toggle{color:#333;background-color:#e8e8e8}.grey-cararra.btn.active,.grey-cararra.btn:active{background-image:none;background-color:#dbdbdb}.grey-cararra.btn.active:hover,.grey-cararra.btn:active:hover{background-color:#e1e1e1}.open .grey-cararra.btn.dropdown-toggle{background-image:none}.grey-cararra.btn.disabled,.grey-cararra.btn.disabled.active,.grey-cararra.btn.disabled:active,.grey-cararra.btn.disabled:focus,.grey-cararra.btn.disabled:hover,.grey-cararra.btn[disabled],.grey-cararra.btn[disabled].active,.grey-cararra.btn[disabled]:active,.grey-cararra.btn[disabled]:focus,.grey-cararra.btn[disabled]:hover,fieldset[disabled] .grey-cararra.btn,fieldset[disabled] .grey-cararra.btn.active,fieldset[disabled] .grey-cararra.btn:active,fieldset[disabled] .grey-cararra.btn:focus,fieldset[disabled] .grey-cararra.btn:hover{background-color:#fafafa}.grey-cararra.btn .badge{color:#fafafa;background-color:#333}.portlet.box.grey-cararra>.portlet-title,.portlet.grey-cararra,.portlet>.portlet-body.grey-cararra{background-color:#fafafa}.btn.grey-cararra-stripe{border-left:3px solid #fafafa}.portlet.solid.grey-cararra>.portlet-body,.portlet.solid.grey-cararra>.portlet-title{border:0;color:#333}.portlet.solid.grey-cararra>.portlet-title>.caption>i{color:#333}.portlet.solid.grey-cararra>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.grey-cararra>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.grey-cararra>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.grey-cararra>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.grey-cararra>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.grey-cararra>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.grey-cararra{border:1px solid #fff;border-top:0}.portlet.box.grey-cararra>.portlet-title>.caption,.portlet.box.grey-cararra>.portlet-title>.caption>i{color:#333}.portlet.box.grey-cararra>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #fff;color:#fff}.portlet.box.grey-cararra>.portlet-title>.actions .btn-default>i{color:#fff}.portlet.box.grey-cararra>.portlet-title>.actions .btn-default.active,.portlet.box.grey-cararra>.portlet-title>.actions .btn-default:active,.portlet.box.grey-cararra>.portlet-title>.actions .btn-default:focus,.portlet.box.grey-cararra>.portlet-title>.actions .btn-default:hover{border:1px solid #fff;color:#fff}.dashboard-stat.grey-cararra{background-color:#fafafa}.dashboard-stat.grey-cararra.dashboard-stat-light:hover{background-color:#f0f0f0}.dashboard-stat.grey-cararra .visual>i{color:#333;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.grey-cararra .details .number{color:#333}.dashboard-stat.grey-cararra .details .desc{color:#333;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.grey-cararra .more{color:#333;background-color:#f0f0f0}.bg-grey-cararra{border-color:#fafafa!important;background-image:none!important;background-color:#fafafa!important;color:#333!important}.font-grey-cararra{color:#fafafa!important}.progress-bar.grey-cararra{background:#fafafa!important;color:#333!important}.grey-gallery.btn{color:#fff;background-color:#555;border-color:""}.grey-gallery.btn.active,.grey-gallery.btn:active,.grey-gallery.btn:focus,.grey-gallery.btn:hover,.open .grey-gallery.btn.dropdown-toggle{color:#fff;background-color:#434343}.grey-gallery.btn.active,.grey-gallery.btn:active{background-image:none;background-color:#363636}.grey-gallery.btn.active:hover,.grey-gallery.btn:active:hover{background-color:#3b3b3b}.open .grey-gallery.btn.dropdown-toggle{background-image:none}.grey-gallery.btn.disabled,.grey-gallery.btn.disabled.active,.grey-gallery.btn.disabled:active,.grey-gallery.btn.disabled:focus,.grey-gallery.btn.disabled:hover,.grey-gallery.btn[disabled],.grey-gallery.btn[disabled].active,.grey-gallery.btn[disabled]:active,.grey-gallery.btn[disabled]:focus,.grey-gallery.btn[disabled]:hover,fieldset[disabled] .grey-gallery.btn,fieldset[disabled] .grey-gallery.btn.active,fieldset[disabled] .grey-gallery.btn:active,fieldset[disabled] .grey-gallery.btn:focus,fieldset[disabled] .grey-gallery.btn:hover{background-color:#555}.grey-gallery.btn .badge{color:#555;background-color:#fff}.portlet.box.grey-gallery>.portlet-title,.portlet.grey-gallery,.portlet>.portlet-body.grey-gallery{background-color:#555}.btn.grey-gallery-stripe{border-left:3px solid #555}.portlet.solid.grey-gallery>.portlet-body,.portlet.solid.grey-gallery>.portlet-title{border:0;color:#fff}.portlet.solid.grey-gallery>.portlet-title>.caption>i{color:#fff}.portlet.solid.grey-gallery>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.grey-gallery>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.grey-gallery>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.grey-gallery>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.grey-gallery>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.grey-gallery>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.grey-gallery{border:1px solid #6e6e6e;border-top:0}.portlet.box.grey-gallery>.portlet-title>.caption,.portlet.box.grey-gallery>.portlet-title>.caption>i{color:#fff}.portlet.box.grey-gallery>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #8d8d8d;color:#9a9a9a}.portlet.box.grey-gallery>.portlet-title>.actions .btn-default>i{color:#a2a2a2}.portlet.box.grey-gallery>.portlet-title>.actions .btn-default.active,.portlet.box.grey-gallery>.portlet-title>.actions .btn-default:active,.portlet.box.grey-gallery>.portlet-title>.actions .btn-default:focus,.portlet.box.grey-gallery>.portlet-title>.actions .btn-default:hover{border:1px solid #a7a7a7;color:#b3b3b3}.dashboard-stat.grey-gallery{background-color:#555}.dashboard-stat.grey-gallery.dashboard-stat-light:hover{background-color:#4b4b4b}.dashboard-stat.grey-gallery .visual>i{color:#fff;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.grey-gallery .details .number{color:#fff}.dashboard-stat.grey-gallery .details .desc{color:#fff;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.grey-gallery .more{color:#fff;background-color:#4b4b4b}.bg-grey-gallery{border-color:#555!important;background-image:none!important;background-color:#555!important;color:#fff!important}.font-grey-gallery{color:#555!important}.progress-bar.grey-gallery{background:#555!important;color:#fff!important}.grey-cascade.btn{color:#FFF;background-color:#95A5A6;border-color:""}.grey-cascade.btn.active,.grey-cascade.btn:active,.grey-cascade.btn:focus,.grey-cascade.btn:hover,.open .grey-cascade.btn.dropdown-toggle{color:#FFF;background-color:#829596}.grey-cascade.btn.active,.grey-cascade.btn:active{background-image:none;background-color:#74898a}.grey-cascade.btn.active:hover,.grey-cascade.btn:active:hover{background-color:#798d8f}.open .grey-cascade.btn.dropdown-toggle{background-image:none}.grey-cascade.btn.disabled,.grey-cascade.btn.disabled.active,.grey-cascade.btn.disabled:active,.grey-cascade.btn.disabled:focus,.grey-cascade.btn.disabled:hover,.grey-cascade.btn[disabled],.grey-cascade.btn[disabled].active,.grey-cascade.btn[disabled]:active,.grey-cascade.btn[disabled]:focus,.grey-cascade.btn[disabled]:hover,fieldset[disabled] .grey-cascade.btn,fieldset[disabled] .grey-cascade.btn.active,fieldset[disabled] .grey-cascade.btn:active,fieldset[disabled] .grey-cascade.btn:focus,fieldset[disabled] .grey-cascade.btn:hover{background-color:#95A5A6}.grey-cascade.btn .badge{color:#95A5A6;background-color:#FFF}.portlet.box.grey-cascade>.portlet-title,.portlet.grey-cascade,.portlet>.portlet-body.grey-cascade{background-color:#95A5A6}.btn.grey-cascade-stripe{border-left:3px solid #95A5A6}.portlet.solid.grey-cascade>.portlet-body,.portlet.solid.grey-cascade>.portlet-title{border:0;color:#FFF}.portlet.solid.grey-cascade>.portlet-title>.caption>i{color:#FFF}.portlet.solid.grey-cascade>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.grey-cascade>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.grey-cascade>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.grey-cascade>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.grey-cascade>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.grey-cascade>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.grey-cascade{border:1px solid #b1bdbd;border-top:0}.portlet.box.grey-cascade>.portlet-title>.caption,.portlet.box.grey-cascade>.portlet-title>.caption>i{color:#FFF}.portlet.box.grey-cascade>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #d2d9d9;color:#e0e5e5}.portlet.box.grey-cascade>.portlet-title>.actions .btn-default>i{color:#e8ecec}.portlet.box.grey-cascade>.portlet-title>.actions .btn-default.active,.portlet.box.grey-cascade>.portlet-title>.actions .btn-default:active,.portlet.box.grey-cascade>.portlet-title>.actions .btn-default:focus,.portlet.box.grey-cascade>.portlet-title>.actions .btn-default:hover{border:1px solid #eef0f0;color:#fcfcfc}.dashboard-stat.grey-cascade{background-color:#95A5A6}.dashboard-stat.grey-cascade.dashboard-stat-light:hover{background-color:#8a9c9d}.dashboard-stat.grey-cascade .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.grey-cascade .details .number{color:#FFF}.dashboard-stat.grey-cascade .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.grey-cascade .more{color:#FFF;background-color:#8a9c9d}.bg-grey-cascade{border-color:#95A5A6!important;background-image:none!important;background-color:#95A5A6!important;color:#FFF!important}.font-grey-cascade{color:#95A5A6!important}.progress-bar.grey-cascade{background:#95A5A6!important;color:#FFF!important}.grey-silver.btn{color:#FAFCFB;background-color:#BFBFBF;border-color:""}.grey-silver.btn.active,.grey-silver.btn:active,.grey-silver.btn:focus,.grey-silver.btn:hover,.open .grey-silver.btn.dropdown-toggle{color:#FAFCFB;background-color:#adadad}.grey-silver.btn.active,.grey-silver.btn:active{background-image:none;background-color:#a0a0a0}.grey-silver.btn.active:hover,.grey-silver.btn:active:hover{background-color:#a6a6a6}.open .grey-silver.btn.dropdown-toggle{background-image:none}.grey-silver.btn.disabled,.grey-silver.btn.disabled.active,.grey-silver.btn.disabled:active,.grey-silver.btn.disabled:focus,.grey-silver.btn.disabled:hover,.grey-silver.btn[disabled],.grey-silver.btn[disabled].active,.grey-silver.btn[disabled]:active,.grey-silver.btn[disabled]:focus,.grey-silver.btn[disabled]:hover,fieldset[disabled] .grey-silver.btn,fieldset[disabled] .grey-silver.btn.active,fieldset[disabled] .grey-silver.btn:active,fieldset[disabled] .grey-silver.btn:focus,fieldset[disabled] .grey-silver.btn:hover{background-color:#BFBFBF}.grey-silver.btn .badge{color:#BFBFBF;background-color:#FAFCFB}.portlet.box.grey-silver>.portlet-title,.portlet.grey-silver,.portlet>.portlet-body.grey-silver{background-color:#BFBFBF}.btn.grey-silver-stripe{border-left:3px solid #BFBFBF}.portlet.solid.grey-silver>.portlet-body,.portlet.solid.grey-silver>.portlet-title{border:0;color:#FAFCFB}.portlet.solid.grey-silver>.portlet-title>.caption>i{color:#FAFCFB}.portlet.solid.grey-silver>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.grey-silver>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.grey-silver>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.grey-silver>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.grey-silver>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.grey-silver>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.grey-silver{border:1px solid #d9d9d9;border-top:0}.portlet.box.grey-silver>.portlet-title>.caption,.portlet.box.grey-silver>.portlet-title>.caption>i{color:#FAFCFB}.portlet.box.grey-silver>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #f7f7f7;color:#fff}.portlet.box.grey-silver>.portlet-title>.actions .btn-default>i{color:#fff}.portlet.box.grey-silver>.portlet-title>.actions .btn-default.active,.portlet.box.grey-silver>.portlet-title>.actions .btn-default:active,.portlet.box.grey-silver>.portlet-title>.actions .btn-default:focus,.portlet.box.grey-silver>.portlet-title>.actions .btn-default:hover{border:1px solid #fff;color:#fff}.dashboard-stat.grey-silver{background-color:#BFBFBF}.dashboard-stat.grey-silver.dashboard-stat-light:hover{background-color:#b5b5b5}.dashboard-stat.grey-silver .visual>i{color:#FAFCFB;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.grey-silver .details .number{color:#FAFCFB}.dashboard-stat.grey-silver .details .desc{color:#FAFCFB;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.grey-silver .more{color:#FAFCFB;background-color:#b5b5b5}.bg-grey-silver{border-color:#BFBFBF!important;background-image:none!important;background-color:#BFBFBF!important;color:#FAFCFB!important}.font-grey-silver{color:#BFBFBF!important}.progress-bar.grey-silver{background:#BFBFBF!important;color:#FAFCFB!important}.grey-salsa.btn{color:#FAFCFB;background-color:#ACB5C3;border-color:""}.grey-salsa.btn.active,.grey-salsa.btn:active,.grey-salsa.btn:focus,.grey-salsa.btn:hover,.open .grey-salsa.btn.dropdown-toggle{color:#FAFCFB;background-color:#97a3b4}.grey-salsa.btn.active,.grey-salsa.btn:active{background-image:none;background-color:#8895a9}.grey-salsa.btn.active:hover,.grey-salsa.btn:active:hover{background-color:#8e9bae}.open .grey-salsa.btn.dropdown-toggle{background-image:none}.grey-salsa.btn.disabled,.grey-salsa.btn.disabled.active,.grey-salsa.btn.disabled:active,.grey-salsa.btn.disabled:focus,.grey-salsa.btn.disabled:hover,.grey-salsa.btn[disabled],.grey-salsa.btn[disabled].active,.grey-salsa.btn[disabled]:active,.grey-salsa.btn[disabled]:focus,.grey-salsa.btn[disabled]:hover,fieldset[disabled] .grey-salsa.btn,fieldset[disabled] .grey-salsa.btn.active,fieldset[disabled] .grey-salsa.btn:active,fieldset[disabled] .grey-salsa.btn:focus,fieldset[disabled] .grey-salsa.btn:hover{background-color:#ACB5C3}.grey-salsa.btn .badge{color:#ACB5C3;background-color:#FAFCFB}.portlet.box.grey-salsa>.portlet-title,.portlet.grey-salsa,.portlet>.portlet-body.grey-salsa{background-color:#ACB5C3}.btn.grey-salsa-stripe{border-left:3px solid #ACB5C3}.portlet.solid.grey-salsa>.portlet-body,.portlet.solid.grey-salsa>.portlet-title{border:0;color:#FAFCFB}.portlet.solid.grey-salsa>.portlet-title>.caption>i{color:#FAFCFB}.portlet.solid.grey-salsa>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.grey-salsa>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.grey-salsa>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.grey-salsa>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.grey-salsa>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.grey-salsa>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.grey-salsa{border:1px solid #cacfd8;border-top:0}.portlet.box.grey-salsa>.portlet-title>.caption,.portlet.box.grey-salsa>.portlet-title>.caption>i{color:#FAFCFB}.portlet.box.grey-salsa>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #edeff2;color:#fcfcfd}.portlet.box.grey-salsa>.portlet-title>.actions .btn-default>i{color:#fff}.portlet.box.grey-salsa>.portlet-title>.actions .btn-default.active,.portlet.box.grey-salsa>.portlet-title>.actions .btn-default:active,.portlet.box.grey-salsa>.portlet-title>.actions .btn-default:focus,.portlet.box.grey-salsa>.portlet-title>.actions .btn-default:hover{border:1px solid #fff;color:#fff}.dashboard-stat.grey-salsa{background-color:#ACB5C3}.dashboard-stat.grey-salsa.dashboard-stat-light:hover{background-color:#a0aaba}.dashboard-stat.grey-salsa .visual>i{color:#FAFCFB;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.grey-salsa .details .number{color:#FAFCFB}.dashboard-stat.grey-salsa .details .desc{color:#FAFCFB;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.grey-salsa .more{color:#FAFCFB;background-color:#a0aaba}.bg-grey-salsa{border-color:#ACB5C3!important;background-image:none!important;background-color:#ACB5C3!important;color:#FAFCFB!important}.font-grey-salsa{color:#ACB5C3!important}.progress-bar.grey-salsa{background:#ACB5C3!important;color:#FAFCFB!important}.grey-salt.btn{color:#FAFCFB;background-color:#bfcad1;border-color:""}.grey-salt.btn.active,.grey-salt.btn:active,.grey-salt.btn:focus,.grey-salt.btn:hover,.open .grey-salt.btn.dropdown-toggle{color:#FAFCFB;background-color:#aab9c2}.grey-salt.btn.active,.grey-salt.btn:active{background-image:none;background-color:#9badb7}.grey-salt.btn.active:hover,.grey-salt.btn:active:hover{background-color:#a1b1bc}.open .grey-salt.btn.dropdown-toggle{background-image:none}.grey-salt.btn.disabled,.grey-salt.btn.disabled.active,.grey-salt.btn.disabled:active,.grey-salt.btn.disabled:focus,.grey-salt.btn.disabled:hover,.grey-salt.btn[disabled],.grey-salt.btn[disabled].active,.grey-salt.btn[disabled]:active,.grey-salt.btn[disabled]:focus,.grey-salt.btn[disabled]:hover,fieldset[disabled] .grey-salt.btn,fieldset[disabled] .grey-salt.btn.active,fieldset[disabled] .grey-salt.btn:active,fieldset[disabled] .grey-salt.btn:focus,fieldset[disabled] .grey-salt.btn:hover{background-color:#bfcad1}.grey-salt.btn .badge{color:#bfcad1;background-color:#FAFCFB}.portlet.box.grey-salt>.portlet-title,.portlet.grey-salt,.portlet>.portlet-body.grey-salt{background-color:#bfcad1}.btn.grey-salt-stripe{border-left:3px solid #bfcad1}.portlet.solid.grey-salt>.portlet-body,.portlet.solid.grey-salt>.portlet-title{border:0;color:#FAFCFB}.portlet.solid.grey-salt>.portlet-title>.caption>i{color:#FAFCFB}.portlet.solid.grey-salt>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.grey-salt>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.grey-salt>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.grey-salt>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.grey-salt>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.grey-salt>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.grey-salt{border:1px solid #dde3e6;border-top:0}.portlet.box.grey-salt>.portlet-title>.caption,.portlet.box.grey-salt>.portlet-title>.caption>i{color:#FAFCFB}.portlet.box.grey-salt>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #fff;color:#fff}.portlet.box.grey-salt>.portlet-title>.actions .btn-default>i{color:#fff}.portlet.box.grey-salt>.portlet-title>.actions .btn-default.active,.portlet.box.grey-salt>.portlet-title>.actions .btn-default:active,.portlet.box.grey-salt>.portlet-title>.actions .btn-default:focus,.portlet.box.grey-salt>.portlet-title>.actions .btn-default:hover{border:1px solid #fff;color:#fff}.dashboard-stat.grey-salt{background-color:#bfcad1}.dashboard-stat.grey-salt.dashboard-stat-light:hover{background-color:#b3c0c8}.dashboard-stat.grey-salt .visual>i{color:#FAFCFB;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.grey-salt .details .number{color:#FAFCFB}.dashboard-stat.grey-salt .details .desc{color:#FAFCFB;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.grey-salt .more{color:#FAFCFB;background-color:#b3c0c8}.bg-grey-salt{border-color:#bfcad1!important;background-image:none!important;background-color:#bfcad1!important;color:#FAFCFB!important}.font-grey-salt{color:#bfcad1!important}.progress-bar.grey-salt{background:#bfcad1!important;color:#FAFCFB!important}.grey-mint.btn{color:#FAFCFB;background-color:#9eacb4;border-color:""}.grey-mint.btn.active,.grey-mint.btn:active,.grey-mint.btn:focus,.grey-mint.btn:hover,.open .grey-mint.btn.dropdown-toggle{color:#FAFCFB;background-color:#8a9ba4}.grey-mint.btn.active,.grey-mint.btn:active{background-image:none;background-color:#7b8e99}.grey-mint.btn.active:hover,.grey-mint.btn:active:hover{background-color:#81939e}.open .grey-mint.btn.dropdown-toggle{background-image:none}.grey-mint.btn.disabled,.grey-mint.btn.disabled.active,.grey-mint.btn.disabled:active,.grey-mint.btn.disabled:focus,.grey-mint.btn.disabled:hover,.grey-mint.btn[disabled],.grey-mint.btn[disabled].active,.grey-mint.btn[disabled]:active,.grey-mint.btn[disabled]:focus,.grey-mint.btn[disabled]:hover,fieldset[disabled] .grey-mint.btn,fieldset[disabled] .grey-mint.btn.active,fieldset[disabled] .grey-mint.btn:active,fieldset[disabled] .grey-mint.btn:focus,fieldset[disabled] .grey-mint.btn:hover{background-color:#9eacb4}.grey-mint.btn .badge{color:#9eacb4;background-color:#FAFCFB}.portlet.box.grey-mint>.portlet-title,.portlet.grey-mint,.portlet>.portlet-body.grey-mint{background-color:#9eacb4}.btn.grey-mint-stripe{border-left:3px solid #9eacb4}.portlet.solid.grey-mint>.portlet-body,.portlet.solid.grey-mint>.portlet-title{border:0;color:#FAFCFB}.portlet.solid.grey-mint>.portlet-title>.caption>i{color:#FAFCFB}.portlet.solid.grey-mint>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.grey-mint>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.grey-mint>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.grey-mint>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.grey-mint>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.grey-mint>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.grey-mint{border:1px solid #bbc5ca;border-top:0}.portlet.box.grey-mint>.portlet-title>.caption,.portlet.box.grey-mint>.portlet-title>.caption>i{color:#FAFCFB}.portlet.box.grey-mint>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #dde2e5;color:#eceef0}.portlet.box.grey-mint>.portlet-title>.actions .btn-default>i{color:#f4f6f7}.portlet.box.grey-mint>.portlet-title>.actions .btn-default.active,.portlet.box.grey-mint>.portlet-title>.actions .btn-default:active,.portlet.box.grey-mint>.portlet-title>.actions .btn-default:focus,.portlet.box.grey-mint>.portlet-title>.actions .btn-default:hover{border:1px solid #fafbfb;color:#fff}.dashboard-stat.grey-mint{background-color:#9eacb4}.dashboard-stat.grey-mint.dashboard-stat-light:hover{background-color:#92a2ab}.dashboard-stat.grey-mint .visual>i{color:#FAFCFB;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.grey-mint .details .number{color:#FAFCFB}.dashboard-stat.grey-mint .details .desc{color:#FAFCFB;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.grey-mint .more{color:#FAFCFB;background-color:#92a2ab}.bg-grey-mint{border-color:#9eacb4!important;background-image:none!important;background-color:#9eacb4!important;color:#FAFCFB!important}.font-grey-mint{color:#9eacb4!important}.progress-bar.grey-mint{background:#9eacb4!important;color:#FAFCFB!important}.red.btn{color:#FFF;background-color:#d84a38;border-color:""}.open .red.btn.dropdown-toggle,.red.btn.active,.red.btn:active,.red.btn:focus,.red.btn:hover{color:#FFF;background-color:#c63927}.red.btn.active,.red.btn:active{background-image:none;background-color:#b03223}.red.btn.active:hover,.red.btn:active:hover{background-color:#b93524}.open .red.btn.dropdown-toggle{background-image:none}.red.btn.disabled,.red.btn.disabled.active,.red.btn.disabled:active,.red.btn.disabled:focus,.red.btn.disabled:hover,.red.btn[disabled],.red.btn[disabled].active,.red.btn[disabled]:active,.red.btn[disabled]:focus,.red.btn[disabled]:hover,fieldset[disabled] .red.btn,fieldset[disabled] .red.btn.active,fieldset[disabled] .red.btn:active,fieldset[disabled] .red.btn:focus,fieldset[disabled] .red.btn:hover{background-color:#d84a38}.red.btn .badge{color:#d84a38;background-color:#FFF}.portlet.box.red>.portlet-title,.portlet.red,.portlet>.portlet-body.red{background-color:#d84a38}.btn.red-stripe{border-left:3px solid #d84a38}.portlet.solid.red>.portlet-body,.portlet.solid.red>.portlet-title{border:0;color:#FFF}.portlet.solid.red>.portlet-title>.caption>i{color:#FFF}.portlet.solid.red>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.red>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.red>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.red>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.red>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.red>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.red{border:1px solid #e07163;border-top:0}.portlet.box.red>.portlet-title>.caption,.portlet.box.red>.portlet-title>.caption>i{color:#FFF}.portlet.box.red>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #ea9f96;color:#efb3ab}.portlet.box.red>.portlet-title>.actions .btn-default>i{color:#f1beb8}.portlet.box.red>.portlet-title>.actions .btn-default.active,.portlet.box.red>.portlet-title>.actions .btn-default:active,.portlet.box.red>.portlet-title>.actions .btn-default:focus,.portlet.box.red>.portlet-title>.actions .btn-default:hover{border:1px solid #f3c6c0;color:#f7dad6}.dashboard-stat.red{background-color:#d84a38}.dashboard-stat.red.dashboard-stat-light:hover{background-color:#d23c29}.dashboard-stat.red .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.red .details .number{color:#FFF}.dashboard-stat.red .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.red .more{color:#FFF;background-color:#d23c29}.bg-red{border-color:#d84a38!important;background-image:none!important;background-color:#d84a38!important;color:#FFF!important}.font-red{color:#d84a38!important}.progress-bar.red{background:#d84a38!important;color:#FFF!important}.red-pink.btn{color:#FFF;background-color:#E08283;border-color:""}.open .red-pink.btn.dropdown-toggle,.red-pink.btn.active,.red-pink.btn:active,.red-pink.btn:focus,.red-pink.btn:hover{color:#FFF;background-color:#d96567}.red-pink.btn.active,.red-pink.btn:active{background-image:none;background-color:#d45152}.red-pink.btn.active:hover,.red-pink.btn:active:hover{background-color:#d6595a}.open .red-pink.btn.dropdown-toggle{background-image:none}.red-pink.btn.disabled,.red-pink.btn.disabled.active,.red-pink.btn.disabled:active,.red-pink.btn.disabled:focus,.red-pink.btn.disabled:hover,.red-pink.btn[disabled],.red-pink.btn[disabled].active,.red-pink.btn[disabled]:active,.red-pink.btn[disabled]:focus,.red-pink.btn[disabled]:hover,fieldset[disabled] .red-pink.btn,fieldset[disabled] .red-pink.btn.active,fieldset[disabled] .red-pink.btn:active,fieldset[disabled] .red-pink.btn:focus,fieldset[disabled] .red-pink.btn:hover{background-color:#E08283}.red-pink.btn .badge{color:#E08283;background-color:#FFF}.portlet.box.red-pink>.portlet-title,.portlet.red-pink,.portlet>.portlet-body.red-pink{background-color:#E08283}.btn.red-pink-stripe{border-left:3px solid #E08283}.portlet.solid.red-pink>.portlet-body,.portlet.solid.red-pink>.portlet-title{border:0;color:#FFF}.portlet.solid.red-pink>.portlet-title>.caption>i{color:#FFF}.portlet.solid.red-pink>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.red-pink>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.red-pink>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.red-pink>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.red-pink>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.red-pink>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.red-pink{border:1px solid #eaabac;border-top:0}.portlet.box.red-pink>.portlet-title>.caption,.portlet.box.red-pink>.portlet-title>.caption>i{color:#FFF}.portlet.box.red-pink>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #f6dcdc;color:#fbf0f0}.portlet.box.red-pink>.portlet-title>.actions .btn-default>i{color:#fefdfd}.portlet.box.red-pink>.portlet-title>.actions .btn-default.active,.portlet.box.red-pink>.portlet-title>.actions .btn-default:active,.portlet.box.red-pink>.portlet-title>.actions .btn-default:focus,.portlet.box.red-pink>.portlet-title>.actions .btn-default:hover{border:1px solid #fff;color:#fff}.dashboard-stat.red-pink{background-color:#E08283}.dashboard-stat.red-pink.dashboard-stat-light:hover{background-color:#dc7273}.dashboard-stat.red-pink .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.red-pink .details .number{color:#FFF}.dashboard-stat.red-pink .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.red-pink .more{color:#FFF;background-color:#dc7273}.bg-red-pink{border-color:#E08283!important;background-image:none!important;background-color:#E08283!important;color:#FFF!important}.font-red-pink{color:#E08283!important}.progress-bar.red-pink{background:#E08283!important;color:#FFF!important}.red-sunglo.btn{color:#FFF;background-color:#E26A6A;border-color:""}.open .red-sunglo.btn.dropdown-toggle,.red-sunglo.btn.active,.red-sunglo.btn:active,.red-sunglo.btn:focus,.red-sunglo.btn:hover{color:#FFF;background-color:#dc4c4c}.red-sunglo.btn.active,.red-sunglo.btn:active{background-image:none;background-color:#d83737}.red-sunglo.btn.active:hover,.red-sunglo.btn:active:hover{background-color:#da3f3f}.open .red-sunglo.btn.dropdown-toggle{background-image:none}.red-sunglo.btn.disabled,.red-sunglo.btn.disabled.active,.red-sunglo.btn.disabled:active,.red-sunglo.btn.disabled:focus,.red-sunglo.btn.disabled:hover,.red-sunglo.btn[disabled],.red-sunglo.btn[disabled].active,.red-sunglo.btn[disabled]:active,.red-sunglo.btn[disabled]:focus,.red-sunglo.btn[disabled]:hover,fieldset[disabled] .red-sunglo.btn,fieldset[disabled] .red-sunglo.btn.active,fieldset[disabled] .red-sunglo.btn:active,fieldset[disabled] .red-sunglo.btn:focus,fieldset[disabled] .red-sunglo.btn:hover{background-color:#E26A6A}.red-sunglo.btn .badge{color:#E26A6A;background-color:#FFF}.portlet.box.red-sunglo>.portlet-title,.portlet.red-sunglo,.portlet>.portlet-body.red-sunglo{background-color:#E26A6A}.btn.red-sunglo-stripe{border-left:3px solid #E26A6A}.portlet.solid.red-sunglo>.portlet-body,.portlet.solid.red-sunglo>.portlet-title{border:0;color:#FFF}.portlet.solid.red-sunglo>.portlet-title>.caption>i{color:#FFF}.portlet.solid.red-sunglo>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.red-sunglo>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.red-sunglo>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.red-sunglo>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.red-sunglo>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.red-sunglo>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.red-sunglo{border:1px solid #ea9595;border-top:0}.portlet.box.red-sunglo>.portlet-title>.caption,.portlet.box.red-sunglo>.portlet-title>.caption>i{color:#FFF}.portlet.box.red-sunglo>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #f4c8c8;color:#f8dddd}.portlet.box.red-sunglo>.portlet-title>.actions .btn-default>i{color:#fbeaea}.portlet.box.red-sunglo>.portlet-title>.actions .btn-default.active,.portlet.box.red-sunglo>.portlet-title>.actions .btn-default:active,.portlet.box.red-sunglo>.portlet-title>.actions .btn-default:focus,.portlet.box.red-sunglo>.portlet-title>.actions .btn-default:hover{border:1px solid #fdf3f3;color:#fff}.dashboard-stat.red-sunglo{background-color:#E26A6A}.dashboard-stat.red-sunglo.dashboard-stat-light:hover{background-color:#df5959}.dashboard-stat.red-sunglo .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.red-sunglo .details .number{color:#FFF}.dashboard-stat.red-sunglo .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.red-sunglo .more{color:#FFF;background-color:#df5959}.bg-red-sunglo{border-color:#E26A6A!important;background-image:none!important;background-color:#E26A6A!important;color:#FFF!important}.font-red-sunglo{color:#E26A6A!important}.progress-bar.red-sunglo{background:#E26A6A!important;color:#FFF!important}.red-intense.btn{color:#FFF;background-color:#e35b5a;border-color:""}.open .red-intense.btn.dropdown-toggle,.red-intense.btn.active,.red-intense.btn:active,.red-intense.btn:focus,.red-intense.btn:hover{color:#FFF;background-color:#de3d3b}.red-intense.btn.active,.red-intense.btn:active{background-image:none;background-color:#da2726}.red-intense.btn.active:hover,.red-intense.btn:active:hover{background-color:#dc302e}.open .red-intense.btn.dropdown-toggle{background-image:none}.red-intense.btn.disabled,.red-intense.btn.disabled.active,.red-intense.btn.disabled:active,.red-intense.btn.disabled:focus,.red-intense.btn.disabled:hover,.red-intense.btn[disabled],.red-intense.btn[disabled].active,.red-intense.btn[disabled]:active,.red-intense.btn[disabled]:focus,.red-intense.btn[disabled]:hover,fieldset[disabled] .red-intense.btn,fieldset[disabled] .red-intense.btn.active,fieldset[disabled] .red-intense.btn:active,fieldset[disabled] .red-intense.btn:focus,fieldset[disabled] .red-intense.btn:hover{background-color:#e35b5a}.red-intense.btn .badge{color:#e35b5a;background-color:#FFF}.portlet.box.red-intense>.portlet-title,.portlet.red-intense,.portlet>.portlet-body.red-intense{background-color:#e35b5a}.btn.red-intense-stripe{border-left:3px solid #e35b5a}.portlet.solid.red-intense>.portlet-body,.portlet.solid.red-intense>.portlet-title{border:0;color:#FFF}.portlet.solid.red-intense>.portlet-title>.caption>i{color:#FFF}.portlet.solid.red-intense>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.red-intense>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.red-intense>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.red-intense>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.red-intense>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.red-intense>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.red-intense{border:1px solid #ea8686;border-top:0}.portlet.box.red-intense>.portlet-title>.caption,.portlet.box.red-intense>.portlet-title>.caption>i{color:#FFF}.portlet.box.red-intense>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #f3baba;color:#f7d0d0}.portlet.box.red-intense>.portlet-title>.actions .btn-default>i{color:#f9dddd}.portlet.box.red-intense>.portlet-title>.actions .btn-default.active,.portlet.box.red-intense>.portlet-title>.actions .btn-default:active,.portlet.box.red-intense>.portlet-title>.actions .btn-default:focus,.portlet.box.red-intense>.portlet-title>.actions .btn-default:hover{border:1px solid #fbe6e6;color:#fefbfb}.dashboard-stat.red-intense{background-color:#e35b5a}.dashboard-stat.red-intense.dashboard-stat-light:hover{background-color:#e04a49}.dashboard-stat.red-intense .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.red-intense .details .number{color:#FFF}.dashboard-stat.red-intense .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.red-intense .more{color:#FFF;background-color:#e04a49}.bg-red-intense{border-color:#e35b5a!important;background-image:none!important;background-color:#e35b5a!important;color:#FFF!important}.font-red-intense{color:#e35b5a!important}.progress-bar.red-intense{background:#e35b5a!important;color:#FFF!important}.red-thunderbird.btn{color:#FFF;background-color:#D91E18;border-color:""}.open .red-thunderbird.btn.dropdown-toggle,.red-thunderbird.btn.active,.red-thunderbird.btn:active,.red-thunderbird.btn:focus,.red-thunderbird.btn:hover{color:#FFF;background-color:#b91a14}.red-thunderbird.btn.active,.red-thunderbird.btn:active{background-image:none;background-color:#a21612}.red-thunderbird.btn.active:hover,.red-thunderbird.btn:active:hover{background-color:#ab1813}.open .red-thunderbird.btn.dropdown-toggle{background-image:none}.red-thunderbird.btn.disabled,.red-thunderbird.btn.disabled.active,.red-thunderbird.btn.disabled:active,.red-thunderbird.btn.disabled:focus,.red-thunderbird.btn.disabled:hover,.red-thunderbird.btn[disabled],.red-thunderbird.btn[disabled].active,.red-thunderbird.btn[disabled]:active,.red-thunderbird.btn[disabled]:focus,.red-thunderbird.btn[disabled]:hover,fieldset[disabled] .red-thunderbird.btn,fieldset[disabled] .red-thunderbird.btn.active,fieldset[disabled] .red-thunderbird.btn:active,fieldset[disabled] .red-thunderbird.btn:focus,fieldset[disabled] .red-thunderbird.btn:hover{background-color:#D91E18}.red-thunderbird.btn .badge{color:#D91E18;background-color:#FFF}.portlet.box.red-thunderbird>.portlet-title,.portlet.red-thunderbird,.portlet>.portlet-body.red-thunderbird{background-color:#D91E18}.btn.red-thunderbird-stripe{border-left:3px solid #D91E18}.portlet.solid.red-thunderbird>.portlet-body,.portlet.solid.red-thunderbird>.portlet-title{border:0;color:#FFF}.portlet.solid.red-thunderbird>.portlet-title>.caption>i{color:#FFF}.portlet.solid.red-thunderbird>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.red-thunderbird>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.red-thunderbird>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.red-thunderbird>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.red-thunderbird>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.red-thunderbird>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.red-thunderbird{border:1px solid #e9403b;border-top:0}.portlet.box.red-thunderbird>.portlet-title>.caption,.portlet.box.red-thunderbird>.portlet-title>.caption>i{color:#FFF}.portlet.box.red-thunderbird>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #ef7672;color:#f28c89}.portlet.box.red-thunderbird>.portlet-title>.actions .btn-default>i{color:#f39997}.portlet.box.red-thunderbird>.portlet-title>.actions .btn-default.active,.portlet.box.red-thunderbird>.portlet-title>.actions .btn-default:active,.portlet.box.red-thunderbird>.portlet-title>.actions .btn-default:focus,.portlet.box.red-thunderbird>.portlet-title>.actions .btn-default:hover{border:1px solid #f4a2a0;color:#f7b9b7}.dashboard-stat.red-thunderbird{background-color:#D91E18}.dashboard-stat.red-thunderbird.dashboard-stat-light:hover{background-color:#c71b16}.dashboard-stat.red-thunderbird .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.red-thunderbird .details .number{color:#FFF}.dashboard-stat.red-thunderbird .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.red-thunderbird .more{color:#FFF;background-color:#c71b16}.bg-red-thunderbird{border-color:#D91E18!important;background-image:none!important;background-color:#D91E18!important;color:#FFF!important}.font-red-thunderbird{color:#D91E18!important}.progress-bar.red-thunderbird{background:#D91E18!important;color:#FFF!important}.red-flamingo.btn{color:#FFF;background-color:#EF4836;border-color:""}.open .red-flamingo.btn.dropdown-toggle,.red-flamingo.btn.active,.red-flamingo.btn:active,.red-flamingo.btn:focus,.red-flamingo.btn:hover{color:#FFF;background-color:#ec2a15}.red-flamingo.btn.active,.red-flamingo.btn:active{background-image:none;background-color:#d72411}.red-flamingo.btn.active:hover,.red-flamingo.btn:active:hover{background-color:#e02612}.open .red-flamingo.btn.dropdown-toggle{background-image:none}.red-flamingo.btn.disabled,.red-flamingo.btn.disabled.active,.red-flamingo.btn.disabled:active,.red-flamingo.btn.disabled:focus,.red-flamingo.btn.disabled:hover,.red-flamingo.btn[disabled],.red-flamingo.btn[disabled].active,.red-flamingo.btn[disabled]:active,.red-flamingo.btn[disabled]:focus,.red-flamingo.btn[disabled]:hover,fieldset[disabled] .red-flamingo.btn,fieldset[disabled] .red-flamingo.btn.active,fieldset[disabled] .red-flamingo.btn:active,fieldset[disabled] .red-flamingo.btn:focus,fieldset[disabled] .red-flamingo.btn:hover{background-color:#EF4836}.red-flamingo.btn .badge{color:#EF4836;background-color:#FFF}.portlet.box.red-flamingo>.portlet-title,.portlet.red-flamingo,.portlet>.portlet-body.red-flamingo{background-color:#EF4836}.btn.red-flamingo-stripe{border-left:3px solid #EF4836}.portlet.solid.red-flamingo>.portlet-body,.portlet.solid.red-flamingo>.portlet-title{border:0;color:#FFF}.portlet.solid.red-flamingo>.portlet-title>.caption>i{color:#FFF}.portlet.solid.red-flamingo>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.red-flamingo>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.red-flamingo>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.red-flamingo>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.red-flamingo>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.red-flamingo>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.red-flamingo{border:1px solid #f37365;border-top:0}.portlet.box.red-flamingo>.portlet-title>.caption,.portlet.box.red-flamingo>.portlet-title>.caption>i{color:#FFF}.portlet.box.red-flamingo>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #f7a79e;color:#f9bcb6}.portlet.box.red-flamingo>.portlet-title>.actions .btn-default>i{color:#fac9c4}.portlet.box.red-flamingo>.portlet-title>.actions .btn-default.active,.portlet.box.red-flamingo>.portlet-title>.actions .btn-default:active,.portlet.box.red-flamingo>.portlet-title>.actions .btn-default:focus,.portlet.box.red-flamingo>.portlet-title>.actions .btn-default:hover{border:1px solid #fbd2cd;color:#fde7e5}.dashboard-stat.red-flamingo{background-color:#EF4836}.dashboard-stat.red-flamingo.dashboard-stat-light:hover{background-color:#ed3723}.dashboard-stat.red-flamingo .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.red-flamingo .details .number{color:#FFF}.dashboard-stat.red-flamingo .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.red-flamingo .more{color:#FFF;background-color:#ed3723}.bg-red-flamingo{border-color:#EF4836!important;background-image:none!important;background-color:#EF4836!important;color:#FFF!important}.font-red-flamingo{color:#EF4836!important}.progress-bar.red-flamingo{background:#EF4836!important;color:#FFF!important}.red-soft.btn{color:#FFF;background-color:#d05454;border-color:""}.open .red-soft.btn.dropdown-toggle,.red-soft.btn.active,.red-soft.btn:active,.red-soft.btn:focus,.red-soft.btn:hover{color:#FFF;background-color:#c83838}.red-soft.btn.active,.red-soft.btn:active{background-image:none;background-color:#b53232}.red-soft.btn.active:hover,.red-soft.btn:active:hover{background-color:#bd3434}.open .red-soft.btn.dropdown-toggle{background-image:none}.red-soft.btn.disabled,.red-soft.btn.disabled.active,.red-soft.btn.disabled:active,.red-soft.btn.disabled:focus,.red-soft.btn.disabled:hover,.red-soft.btn[disabled],.red-soft.btn[disabled].active,.red-soft.btn[disabled]:active,.red-soft.btn[disabled]:focus,.red-soft.btn[disabled]:hover,fieldset[disabled] .red-soft.btn,fieldset[disabled] .red-soft.btn.active,fieldset[disabled] .red-soft.btn:active,fieldset[disabled] .red-soft.btn:focus,fieldset[disabled] .red-soft.btn:hover{background-color:#d05454}.red-soft.btn .badge{color:#d05454;background-color:#FFF}.portlet.box.red-soft>.portlet-title,.portlet.red-soft,.portlet>.portlet-body.red-soft{background-color:#d05454}.btn.red-soft-stripe{border-left:3px solid #d05454}.portlet.solid.red-soft>.portlet-body,.portlet.solid.red-soft>.portlet-title{border:0;color:#FFF}.portlet.solid.red-soft>.portlet-title>.caption>i{color:#FFF}.portlet.solid.red-soft>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.red-soft>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.red-soft>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.red-soft>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.red-soft>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.red-soft>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.red-soft{border:1px solid #db7c7c;border-top:0}.portlet.box.red-soft>.portlet-title>.caption,.portlet.box.red-soft>.portlet-title>.caption>i{color:#FFF}.portlet.box.red-soft>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #e8acac;color:#eec0c0}.portlet.box.red-soft>.portlet-title>.actions .btn-default>i{color:#f1cccc}.portlet.box.red-soft>.portlet-title>.actions .btn-default.active,.portlet.box.red-soft>.portlet-title>.actions .btn-default:active,.portlet.box.red-soft>.portlet-title>.actions .btn-default:focus,.portlet.box.red-soft>.portlet-title>.actions .btn-default:hover{border:1px solid #f3d4d4;color:#f9e8e8}.dashboard-stat.red-soft{background-color:#d05454}.dashboard-stat.red-soft.dashboard-stat-light:hover{background-color:#c44}.dashboard-stat.red-soft .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.red-soft .details .number{color:#FFF}.dashboard-stat.red-soft .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.red-soft .more{color:#FFF;background-color:#c44}.bg-red-soft{border-color:#d05454!important;background-image:none!important;background-color:#d05454!important;color:#FFF!important}.font-red-soft{color:#d05454!important}.progress-bar.red-soft{background:#d05454!important;color:#FFF!important}.red-haze.btn{color:#FFF;background-color:#f36a5a;border-color:""}.open .red-haze.btn.dropdown-toggle,.red-haze.btn.active,.red-haze.btn:active,.red-haze.btn:focus,.red-haze.btn:hover{color:#FFF;background-color:#f14c39}.red-haze.btn.active,.red-haze.btn:active{background-image:none;background-color:#ef3621}.red-haze.btn.active:hover,.red-haze.btn:active:hover{background-color:#f03f2a}.open .red-haze.btn.dropdown-toggle{background-image:none}.red-haze.btn.disabled,.red-haze.btn.disabled.active,.red-haze.btn.disabled:active,.red-haze.btn.disabled:focus,.red-haze.btn.disabled:hover,.red-haze.btn[disabled],.red-haze.btn[disabled].active,.red-haze.btn[disabled]:active,.red-haze.btn[disabled]:focus,.red-haze.btn[disabled]:hover,fieldset[disabled] .red-haze.btn,fieldset[disabled] .red-haze.btn.active,fieldset[disabled] .red-haze.btn:active,fieldset[disabled] .red-haze.btn:focus,fieldset[disabled] .red-haze.btn:hover{background-color:#f36a5a}.red-haze.btn .badge{color:#f36a5a;background-color:#FFF}.portlet.box.red-haze>.portlet-title,.portlet.red-haze,.portlet>.portlet-body.red-haze{background-color:#f36a5a}.btn.red-haze-stripe{border-left:3px solid #f36a5a}.portlet.solid.red-haze>.portlet-body,.portlet.solid.red-haze>.portlet-title{border:0;color:#FFF}.portlet.solid.red-haze>.portlet-title>.caption>i{color:#FFF}.portlet.solid.red-haze>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.red-haze>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.red-haze>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.red-haze>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.red-haze>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.red-haze>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.red-haze{border:1px solid #f6958a;border-top:0}.portlet.box.red-haze>.portlet-title>.caption,.portlet.box.red-haze>.portlet-title>.caption>i{color:#FFF}.portlet.box.red-haze>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #fbc8c3;color:#fcdeda}.portlet.box.red-haze>.portlet-title>.actions .btn-default>i{color:#fdebe9}.portlet.box.red-haze>.portlet-title>.actions .btn-default.active,.portlet.box.red-haze>.portlet-title>.actions .btn-default:active,.portlet.box.red-haze>.portlet-title>.actions .btn-default:focus,.portlet.box.red-haze>.portlet-title>.actions .btn-default:hover{border:1px solid #fef3f2;color:#fff}.dashboard-stat.red-haze{background-color:#f36a5a}.dashboard-stat.red-haze.dashboard-stat-light:hover{background-color:#f25947}.dashboard-stat.red-haze .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.red-haze .details .number{color:#FFF}.dashboard-stat.red-haze .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.red-haze .more{color:#FFF;background-color:#f25947}.bg-red-haze{border-color:#f36a5a!important;background-image:none!important;background-color:#f36a5a!important;color:#FFF!important}.font-red-haze{color:#f36a5a!important}.progress-bar.red-haze{background:#f36a5a!important;color:#FFF!important}.yellow.btn{color:#FFF;background-color:#FFB848;border-color:""}.open .yellow.btn.dropdown-toggle,.yellow.btn.active,.yellow.btn:active,.yellow.btn:focus,.yellow.btn:hover{color:#FFF;background-color:#ffaa24}.yellow.btn.active,.yellow.btn:active{background-image:none;background-color:#ffa00b}.yellow.btn.active:hover,.yellow.btn:active:hover{background-color:#ffa415}.open .yellow.btn.dropdown-toggle{background-image:none}.yellow.btn.disabled,.yellow.btn.disabled.active,.yellow.btn.disabled:active,.yellow.btn.disabled:focus,.yellow.btn.disabled:hover,.yellow.btn[disabled],.yellow.btn[disabled].active,.yellow.btn[disabled]:active,.yellow.btn[disabled]:focus,.yellow.btn[disabled]:hover,fieldset[disabled] .yellow.btn,fieldset[disabled] .yellow.btn.active,fieldset[disabled] .yellow.btn:active,fieldset[disabled] .yellow.btn:focus,fieldset[disabled] .yellow.btn:hover{background-color:#FFB848}.yellow.btn .badge{color:#FFB848;background-color:#FFF}.portlet.box.yellow>.portlet-title,.portlet.yellow,.portlet>.portlet-body.yellow{background-color:#FFB848}.btn.yellow-stripe{border-left:3px solid #FFB848}.portlet.solid.yellow>.portlet-body,.portlet.solid.yellow>.portlet-title{border:0;color:#FFF}.portlet.solid.yellow>.portlet-title>.caption>i{color:#FFF}.portlet.solid.yellow>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.yellow>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.yellow>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.yellow>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.yellow>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.yellow>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.yellow{border:1px solid #ffcc7b;border-top:0}.portlet.box.yellow>.portlet-title>.caption,.portlet.box.yellow>.portlet-title>.caption>i{color:#FFF}.portlet.box.yellow>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #ffe4b8;color:#ffedd2}.portlet.box.yellow>.portlet-title>.actions .btn-default>i{color:#fff3e1}.portlet.box.yellow>.portlet-title>.actions .btn-default.active,.portlet.box.yellow>.portlet-title>.actions .btn-default:active,.portlet.box.yellow>.portlet-title>.actions .btn-default:focus,.portlet.box.yellow>.portlet-title>.actions .btn-default:hover{border:1px solid #fff7eb;color:#fff}.dashboard-stat.yellow{background-color:#FFB848}.dashboard-stat.yellow.dashboard-stat-light:hover{background-color:#ffb034}.dashboard-stat.yellow .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.yellow .details .number{color:#FFF}.dashboard-stat.yellow .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.yellow .more{color:#FFF;background-color:#ffb034}.bg-yellow{border-color:#FFB848!important;background-image:none!important;background-color:#FFB848!important;color:#FFF!important}.font-yellow{color:#FFB848!important}.progress-bar.yellow{background:#FFB848!important;color:#FFF!important}.yellow-gold.btn{color:#FFF;background-color:#E87E04;border-color:""}.open .yellow-gold.btn.dropdown-toggle,.yellow-gold.btn.active,.yellow-gold.btn:active,.yellow-gold.btn:focus,.yellow-gold.btn:hover{color:#FFF;background-color:#c56b03}.yellow-gold.btn.active,.yellow-gold.btn:active{background-image:none;background-color:#ac5d03}.yellow-gold.btn.active:hover,.yellow-gold.btn:active:hover{background-color:#b66303}.open .yellow-gold.btn.dropdown-toggle{background-image:none}.yellow-gold.btn.disabled,.yellow-gold.btn.disabled.active,.yellow-gold.btn.disabled:active,.yellow-gold.btn.disabled:focus,.yellow-gold.btn.disabled:hover,.yellow-gold.btn[disabled],.yellow-gold.btn[disabled].active,.yellow-gold.btn[disabled]:active,.yellow-gold.btn[disabled]:focus,.yellow-gold.btn[disabled]:hover,fieldset[disabled] .yellow-gold.btn,fieldset[disabled] .yellow-gold.btn.active,fieldset[disabled] .yellow-gold.btn:active,fieldset[disabled] .yellow-gold.btn:focus,fieldset[disabled] .yellow-gold.btn:hover{background-color:#E87E04}.yellow-gold.btn .badge{color:#E87E04;background-color:#FFF}.portlet.box.yellow-gold>.portlet-title,.portlet.yellow-gold,.portlet>.portlet-body.yellow-gold{background-color:#E87E04}.btn.yellow-gold-stripe{border-left:3px solid #E87E04}.portlet.solid.yellow-gold>.portlet-body,.portlet.solid.yellow-gold>.portlet-title{border:0;color:#FFF}.portlet.solid.yellow-gold>.portlet-title>.caption>i{color:#FFF}.portlet.solid.yellow-gold>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.yellow-gold>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.yellow-gold>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.yellow-gold>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.yellow-gold>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.yellow-gold>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.yellow-gold{border:1px solid #fb9724;border-top:0}.portlet.box.yellow-gold>.portlet-title>.caption,.portlet.box.yellow-gold>.portlet-title>.caption>i{color:#FFF}.portlet.box.yellow-gold>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #fcb460;color:#fdbf79}.portlet.box.yellow-gold>.portlet-title>.actions .btn-default>i{color:#fdc788}.portlet.box.yellow-gold>.portlet-title>.actions .btn-default.active,.portlet.box.yellow-gold>.portlet-title>.actions .btn-default:active,.portlet.box.yellow-gold>.portlet-title>.actions .btn-default:focus,.portlet.box.yellow-gold>.portlet-title>.actions .btn-default:hover{border:1px solid #fdcb92;color:#fed7ab}.dashboard-stat.yellow-gold{background-color:#E87E04}.dashboard-stat.yellow-gold.dashboard-stat-light:hover{background-color:#d47304}.dashboard-stat.yellow-gold .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.yellow-gold .details .number{color:#FFF}.dashboard-stat.yellow-gold .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.yellow-gold .more{color:#FFF;background-color:#d47304}.bg-yellow-gold{border-color:#E87E04!important;background-image:none!important;background-color:#E87E04!important;color:#FFF!important}.font-yellow-gold{color:#E87E04!important}.progress-bar.yellow-gold{background:#E87E04!important;color:#FFF!important}.yellow-casablanca.btn{color:#FFF;background-color:#f2784b;border-color:""}.open .yellow-casablanca.btn.dropdown-toggle,.yellow-casablanca.btn.active,.yellow-casablanca.btn:active,.yellow-casablanca.btn:focus,.yellow-casablanca.btn:hover{color:#FFF;background-color:#f05f2a}.yellow-casablanca.btn.active,.yellow-casablanca.btn:active{background-image:none;background-color:#ee4d12}.yellow-casablanca.btn.active:hover,.yellow-casablanca.btn:active:hover{background-color:#ef541b}.open .yellow-casablanca.btn.dropdown-toggle{background-image:none}.yellow-casablanca.btn.disabled,.yellow-casablanca.btn.disabled.active,.yellow-casablanca.btn.disabled:active,.yellow-casablanca.btn.disabled:focus,.yellow-casablanca.btn.disabled:hover,.yellow-casablanca.btn[disabled],.yellow-casablanca.btn[disabled].active,.yellow-casablanca.btn[disabled]:active,.yellow-casablanca.btn[disabled]:focus,.yellow-casablanca.btn[disabled]:hover,fieldset[disabled] .yellow-casablanca.btn,fieldset[disabled] .yellow-casablanca.btn.active,fieldset[disabled] .yellow-casablanca.btn:active,fieldset[disabled] .yellow-casablanca.btn:focus,fieldset[disabled] .yellow-casablanca.btn:hover{background-color:#f2784b}.yellow-casablanca.btn .badge{color:#f2784b;background-color:#FFF}.portlet.box.yellow-casablanca>.portlet-title,.portlet.yellow-casablanca,.portlet>.portlet-body.yellow-casablanca{background-color:#f2784b}.btn.yellow-casablanca-stripe{border-left:3px solid #f2784b}.portlet.solid.yellow-casablanca>.portlet-body,.portlet.solid.yellow-casablanca>.portlet-title{border:0;color:#FFF}.portlet.solid.yellow-casablanca>.portlet-title>.caption>i{color:#FFF}.portlet.solid.yellow-casablanca>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.yellow-casablanca>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.yellow-casablanca>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.yellow-casablanca>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.yellow-casablanca>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.yellow-casablanca>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.yellow-casablanca{border:1px solid #f59c7b;border-top:0}.portlet.box.yellow-casablanca>.portlet-title>.caption,.portlet.box.yellow-casablanca>.portlet-title>.caption>i{color:#FFF}.portlet.box.yellow-casablanca>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #fac6b4;color:#fbd8cb}.portlet.box.yellow-casablanca>.portlet-title>.actions .btn-default>i{color:#fce3da}.portlet.box.yellow-casablanca>.portlet-title>.actions .btn-default.active,.portlet.box.yellow-casablanca>.portlet-title>.actions .btn-default:active,.portlet.box.yellow-casablanca>.portlet-title>.actions .btn-default:focus,.portlet.box.yellow-casablanca>.portlet-title>.actions .btn-default:hover{border:1px solid #fdeae3;color:#fffcfb}.dashboard-stat.yellow-casablanca{background-color:#f2784b}.dashboard-stat.yellow-casablanca.dashboard-stat-light:hover{background-color:#f16a38}.dashboard-stat.yellow-casablanca .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.yellow-casablanca .details .number{color:#FFF}.dashboard-stat.yellow-casablanca .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.yellow-casablanca .more{color:#FFF;background-color:#f16a38}.bg-yellow-casablanca{border-color:#f2784b!important;background-image:none!important;background-color:#f2784b!important;color:#FFF!important}.font-yellow-casablanca{color:#f2784b!important}.progress-bar.yellow-casablanca{background:#f2784b!important;color:#FFF!important}.yellow-crusta.btn{color:#FFF;background-color:#f3c200;border-color:""}.open .yellow-crusta.btn.dropdown-toggle,.yellow-crusta.btn.active,.yellow-crusta.btn:active,.yellow-crusta.btn:focus,.yellow-crusta.btn:hover{color:#FFF;background-color:#cfa500}.yellow-crusta.btn.active,.yellow-crusta.btn:active{background-image:none;background-color:#b69100}.yellow-crusta.btn.active:hover,.yellow-crusta.btn:active:hover{background-color:#c09900}.open .yellow-crusta.btn.dropdown-toggle{background-image:none}.yellow-crusta.btn.disabled,.yellow-crusta.btn.disabled.active,.yellow-crusta.btn.disabled:active,.yellow-crusta.btn.disabled:focus,.yellow-crusta.btn.disabled:hover,.yellow-crusta.btn[disabled],.yellow-crusta.btn[disabled].active,.yellow-crusta.btn[disabled]:active,.yellow-crusta.btn[disabled]:focus,.yellow-crusta.btn[disabled]:hover,fieldset[disabled] .yellow-crusta.btn,fieldset[disabled] .yellow-crusta.btn.active,fieldset[disabled] .yellow-crusta.btn:active,fieldset[disabled] .yellow-crusta.btn:focus,fieldset[disabled] .yellow-crusta.btn:hover{background-color:#f3c200}.yellow-crusta.btn .badge{color:#f3c200;background-color:#FFF}.portlet.box.yellow-crusta>.portlet-title,.portlet.yellow-crusta,.portlet>.portlet-body.yellow-crusta{background-color:#f3c200}.btn.yellow-crusta-stripe{border-left:3px solid #f3c200}.portlet.solid.yellow-crusta>.portlet-body,.portlet.solid.yellow-crusta>.portlet-title{border:0;color:#FFF}.portlet.solid.yellow-crusta>.portlet-title>.caption>i{color:#FFF}.portlet.solid.yellow-crusta>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.yellow-crusta>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.yellow-crusta>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.yellow-crusta>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.yellow-crusta>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.yellow-crusta>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.yellow-crusta{border:1px solid #ffd327;border-top:0}.portlet.box.yellow-crusta>.portlet-title>.caption,.portlet.box.yellow-crusta>.portlet-title>.caption>i{color:#FFF}.portlet.box.yellow-crusta>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #ffe064;color:#ffe57e}.portlet.box.yellow-crusta>.portlet-title>.actions .btn-default>i{color:#ffe88d}.portlet.box.yellow-crusta>.portlet-title>.actions .btn-default.active,.portlet.box.yellow-crusta>.portlet-title>.actions .btn-default:active,.portlet.box.yellow-crusta>.portlet-title>.actions .btn-default:focus,.portlet.box.yellow-crusta>.portlet-title>.actions .btn-default:hover{border:1px solid #ffea97;color:#ffefb1}.dashboard-stat.yellow-crusta{background-color:#f3c200}.dashboard-stat.yellow-crusta.dashboard-stat-light:hover{background-color:#dfb200}.dashboard-stat.yellow-crusta .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.yellow-crusta .details .number{color:#FFF}.dashboard-stat.yellow-crusta .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.yellow-crusta .more{color:#FFF;background-color:#dfb200}.bg-yellow-crusta{border-color:#f3c200!important;background-image:none!important;background-color:#f3c200!important;color:#FFF!important}.font-yellow-crusta{color:#f3c200!important}.progress-bar.yellow-crusta{background:#f3c200!important;color:#FFF!important}.yellow-lemon.btn{color:#FFF;background-color:#F7CA18;border-color:""}.open .yellow-lemon.btn.dropdown-toggle,.yellow-lemon.btn.active,.yellow-lemon.btn:active,.yellow-lemon.btn:focus,.yellow-lemon.btn:hover{color:#FFF;background-color:#e3b708}.yellow-lemon.btn.active,.yellow-lemon.btn:active{background-image:none;background-color:#cba307}.yellow-lemon.btn.active:hover,.yellow-lemon.btn:active:hover{background-color:#d5ab07}.open .yellow-lemon.btn.dropdown-toggle{background-image:none}.yellow-lemon.btn.disabled,.yellow-lemon.btn.disabled.active,.yellow-lemon.btn.disabled:active,.yellow-lemon.btn.disabled:focus,.yellow-lemon.btn.disabled:hover,.yellow-lemon.btn[disabled],.yellow-lemon.btn[disabled].active,.yellow-lemon.btn[disabled]:active,.yellow-lemon.btn[disabled]:focus,.yellow-lemon.btn[disabled]:hover,fieldset[disabled] .yellow-lemon.btn,fieldset[disabled] .yellow-lemon.btn.active,fieldset[disabled] .yellow-lemon.btn:active,fieldset[disabled] .yellow-lemon.btn:focus,fieldset[disabled] .yellow-lemon.btn:hover{background-color:#F7CA18}.yellow-lemon.btn .badge{color:#F7CA18;background-color:#FFF}.portlet.box.yellow-lemon>.portlet-title,.portlet.yellow-lemon,.portlet>.portlet-body.yellow-lemon{background-color:#F7CA18}.btn.yellow-lemon-stripe{border-left:3px solid #F7CA18}.portlet.solid.yellow-lemon>.portlet-body,.portlet.solid.yellow-lemon>.portlet-title{border:0;color:#FFF}.portlet.solid.yellow-lemon>.portlet-title>.caption>i{color:#FFF}.portlet.solid.yellow-lemon>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.yellow-lemon>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.yellow-lemon>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.yellow-lemon>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.yellow-lemon>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.yellow-lemon>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.yellow-lemon{border:1px solid #f9d549;border-top:0}.portlet.box.yellow-lemon>.portlet-title>.caption,.portlet.box.yellow-lemon>.portlet-title>.caption>i{color:#FFF}.portlet.box.yellow-lemon>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #fbe384;color:#fce99d}.portlet.box.yellow-lemon>.portlet-title>.actions .btn-default>i{color:#fcecac}.portlet.box.yellow-lemon>.portlet-title>.actions .btn-default.active,.portlet.box.yellow-lemon>.portlet-title>.actions .btn-default:active,.portlet.box.yellow-lemon>.portlet-title>.actions .btn-default:focus,.portlet.box.yellow-lemon>.portlet-title>.actions .btn-default:hover{border:1px solid #fceeb6;color:#fdf4ce}.dashboard-stat.yellow-lemon{background-color:#F7CA18}.dashboard-stat.yellow-lemon.dashboard-stat-light:hover{background-color:#f2c308}.dashboard-stat.yellow-lemon .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.yellow-lemon .details .number{color:#FFF}.dashboard-stat.yellow-lemon .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.yellow-lemon .more{color:#FFF;background-color:#f2c308}.bg-yellow-lemon{border-color:#F7CA18!important;background-image:none!important;background-color:#F7CA18!important;color:#FFF!important}.font-yellow-lemon{color:#F7CA18!important}.progress-bar.yellow-lemon{background:#F7CA18!important;color:#FFF!important}.yellow-saffron.btn{color:#FFF;background-color:#F4D03F;border-color:""}.open .yellow-saffron.btn.dropdown-toggle,.yellow-saffron.btn.active,.yellow-saffron.btn:active,.yellow-saffron.btn:focus,.yellow-saffron.btn:hover{color:#FFF;background-color:#f2c81d}.yellow-saffron.btn.active,.yellow-saffron.btn:active{background-image:none;background-color:#e8bd0d}.yellow-saffron.btn.active:hover,.yellow-saffron.btn:active:hover{background-color:#f1c40f}.open .yellow-saffron.btn.dropdown-toggle{background-image:none}.yellow-saffron.btn.disabled,.yellow-saffron.btn.disabled.active,.yellow-saffron.btn.disabled:active,.yellow-saffron.btn.disabled:focus,.yellow-saffron.btn.disabled:hover,.yellow-saffron.btn[disabled],.yellow-saffron.btn[disabled].active,.yellow-saffron.btn[disabled]:active,.yellow-saffron.btn[disabled]:focus,.yellow-saffron.btn[disabled]:hover,fieldset[disabled] .yellow-saffron.btn,fieldset[disabled] .yellow-saffron.btn.active,fieldset[disabled] .yellow-saffron.btn:active,fieldset[disabled] .yellow-saffron.btn:focus,fieldset[disabled] .yellow-saffron.btn:hover{background-color:#F4D03F}.yellow-saffron.btn .badge{color:#F4D03F;background-color:#FFF}.portlet.box.yellow-saffron>.portlet-title,.portlet.yellow-saffron,.portlet>.portlet-body.yellow-saffron{background-color:#F4D03F}.btn.yellow-saffron-stripe{border-left:3px solid #F4D03F}.portlet.solid.yellow-saffron>.portlet-body,.portlet.solid.yellow-saffron>.portlet-title{border:0;color:#FFF}.portlet.solid.yellow-saffron>.portlet-title>.caption>i{color:#FFF}.portlet.solid.yellow-saffron>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.yellow-saffron>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.yellow-saffron>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.yellow-saffron>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.yellow-saffron>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.yellow-saffron>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.yellow-saffron{border:1px solid #f7dc6f;border-top:0}.portlet.box.yellow-saffron>.portlet-title>.caption,.portlet.box.yellow-saffron>.portlet-title>.caption>i{color:#FFF}.portlet.box.yellow-saffron>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #faeaa9;color:#fbf0c1}.portlet.box.yellow-saffron>.portlet-title>.actions .btn-default>i{color:#fcf3d0}.portlet.box.yellow-saffron>.portlet-title>.actions .btn-default.active,.portlet.box.yellow-saffron>.portlet-title>.actions .btn-default:active,.portlet.box.yellow-saffron>.portlet-title>.actions .btn-default:focus,.portlet.box.yellow-saffron>.portlet-title>.actions .btn-default:hover{border:1px solid #fdf6d9;color:#fefcf1}.dashboard-stat.yellow-saffron{background-color:#F4D03F}.dashboard-stat.yellow-saffron.dashboard-stat-light:hover{background-color:#f3cb2c}.dashboard-stat.yellow-saffron .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.yellow-saffron .details .number{color:#FFF}.dashboard-stat.yellow-saffron .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.yellow-saffron .more{color:#FFF;background-color:#f3cb2c}.bg-yellow-saffron{border-color:#F4D03F!important;background-image:none!important;background-color:#F4D03F!important;color:#FFF!important}.font-yellow-saffron{color:#F4D03F!important}.progress-bar.yellow-saffron{background:#F4D03F!important;color:#FFF!important}.purple.btn{color:#FFF;background-color:#8E44AD;border-color:""}.open .purple.btn.dropdown-toggle,.purple.btn.active,.purple.btn:active,.purple.btn:focus,.purple.btn:hover{color:#FFF;background-color:#793a93}.purple.btn.active,.purple.btn:active{background-image:none;background-color:#6a3381}.purple.btn.active:hover,.purple.btn:active:hover{background-color:#703688}.open .purple.btn.dropdown-toggle{background-image:none}.purple.btn.disabled,.purple.btn.disabled.active,.purple.btn.disabled:active,.purple.btn.disabled:focus,.purple.btn.disabled:hover,.purple.btn[disabled],.purple.btn[disabled].active,.purple.btn[disabled]:active,.purple.btn[disabled]:focus,.purple.btn[disabled]:hover,fieldset[disabled] .purple.btn,fieldset[disabled] .purple.btn.active,fieldset[disabled] .purple.btn:active,fieldset[disabled] .purple.btn:focus,fieldset[disabled] .purple.btn:hover{background-color:#8E44AD}.purple.btn .badge{color:#8E44AD;background-color:#FFF}.portlet.box.purple>.portlet-title,.portlet.purple,.portlet>.portlet-body.purple{background-color:#8E44AD}.btn.purple-stripe{border-left:3px solid #8E44AD}.portlet.solid.purple>.portlet-body,.portlet.solid.purple>.portlet-title{border:0;color:#FFF}.portlet.solid.purple>.portlet-title>.caption>i{color:#FFF}.portlet.solid.purple>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.purple>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.purple>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.purple>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.purple>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.purple>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.purple{border:1px solid #a563c1;border-top:0}.portlet.box.purple>.portlet-title>.caption,.portlet.box.purple>.portlet-title>.caption>i{color:#FFF}.portlet.box.purple>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #bf8ed3;color:#c9a1da}.portlet.box.purple>.portlet-title>.actions .btn-default>i{color:#cfacde}.portlet.box.purple>.portlet-title>.actions .btn-default.active,.portlet.box.purple>.portlet-title>.actions .btn-default:active,.portlet.box.purple>.portlet-title>.actions .btn-default:focus,.portlet.box.purple>.portlet-title>.actions .btn-default:hover{border:1px solid #d4b3e1;color:#dec5e8}.dashboard-stat.purple{background-color:#8E44AD}.dashboard-stat.purple.dashboard-stat-light:hover{background-color:#823e9e}.dashboard-stat.purple .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.purple .details .number{color:#FFF}.dashboard-stat.purple .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.purple .more{color:#FFF;background-color:#823e9e}.bg-purple{border-color:#8E44AD!important;background-image:none!important;background-color:#8E44AD!important;color:#FFF!important}.font-purple{color:#8E44AD!important}.progress-bar.purple{background:#8E44AD!important;color:#FFF!important}.purple-plum.btn{color:#FFF;background-color:#8775a7;border-color:""}.open .purple-plum.btn.dropdown-toggle,.purple-plum.btn.active,.purple-plum.btn:active,.purple-plum.btn:focus,.purple-plum.btn:hover{color:#FFF;background-color:#746198}.purple-plum.btn.active,.purple-plum.btn:active{background-image:none;background-color:#685788}.purple-plum.btn.active:hover,.purple-plum.btn:active:hover{background-color:#6d5b8e}.open .purple-plum.btn.dropdown-toggle{background-image:none}.purple-plum.btn.disabled,.purple-plum.btn.disabled.active,.purple-plum.btn.disabled:active,.purple-plum.btn.disabled:focus,.purple-plum.btn.disabled:hover,.purple-plum.btn[disabled],.purple-plum.btn[disabled].active,.purple-plum.btn[disabled]:active,.purple-plum.btn[disabled]:focus,.purple-plum.btn[disabled]:hover,fieldset[disabled] .purple-plum.btn,fieldset[disabled] .purple-plum.btn.active,fieldset[disabled] .purple-plum.btn:active,fieldset[disabled] .purple-plum.btn:focus,fieldset[disabled] .purple-plum.btn:hover{background-color:#8775a7}.purple-plum.btn .badge{color:#8775a7;background-color:#FFF}.portlet.box.purple-plum>.portlet-title,.portlet.purple-plum,.portlet>.portlet-body.purple-plum{background-color:#8775a7}.btn.purple-plum-stripe{border-left:3px solid #8775a7}.portlet.solid.purple-plum>.portlet-body,.portlet.solid.purple-plum>.portlet-title{border:0;color:#FFF}.portlet.solid.purple-plum>.portlet-title>.caption>i{color:#FFF}.portlet.solid.purple-plum>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.purple-plum>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.purple-plum>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.purple-plum>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.purple-plum>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.purple-plum>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.purple-plum{border:1px solid #a294bb;border-top:0}.portlet.box.purple-plum>.portlet-title>.caption,.portlet.box.purple-plum>.portlet-title>.caption>i{color:#FFF}.portlet.box.purple-plum>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #c3bad3;color:#d0c9dd}.portlet.box.purple-plum>.portlet-title>.actions .btn-default>i{color:#d8d2e3}.portlet.box.purple-plum>.portlet-title>.actions .btn-default.active,.portlet.box.purple-plum>.portlet-title>.actions .btn-default:active,.portlet.box.purple-plum>.portlet-title>.actions .btn-default:focus,.portlet.box.purple-plum>.portlet-title>.actions .btn-default:hover{border:1px solid #ded9e7;color:#ebe8f0}.dashboard-stat.purple-plum{background-color:#8775a7}.dashboard-stat.purple-plum.dashboard-stat-light:hover{background-color:#7c699f}.dashboard-stat.purple-plum .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.purple-plum .details .number{color:#FFF}.dashboard-stat.purple-plum .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.purple-plum .more{color:#FFF;background-color:#7c699f}.bg-purple-plum{border-color:#8775a7!important;background-image:none!important;background-color:#8775a7!important;color:#FFF!important}.font-purple-plum{color:#8775a7!important}.progress-bar.purple-plum{background:#8775a7!important;color:#FFF!important}.purple-medium.btn{color:#FFF;background-color:#BF55EC;border-color:""}.open .purple-medium.btn.dropdown-toggle,.purple-medium.btn.active,.purple-medium.btn:active,.purple-medium.btn:focus,.purple-medium.btn:hover{color:#FFF;background-color:#b335e8}.purple-medium.btn.active,.purple-medium.btn:active{background-image:none;background-color:#aa1ee6}.purple-medium.btn.active:hover,.purple-medium.btn:active:hover{background-color:#ae27e7}.open .purple-medium.btn.dropdown-toggle{background-image:none}.purple-medium.btn.disabled,.purple-medium.btn.disabled.active,.purple-medium.btn.disabled:active,.purple-medium.btn.disabled:focus,.purple-medium.btn.disabled:hover,.purple-medium.btn[disabled],.purple-medium.btn[disabled].active,.purple-medium.btn[disabled]:active,.purple-medium.btn[disabled]:focus,.purple-medium.btn[disabled]:hover,fieldset[disabled] .purple-medium.btn,fieldset[disabled] .purple-medium.btn.active,fieldset[disabled] .purple-medium.btn:active,fieldset[disabled] .purple-medium.btn:focus,fieldset[disabled] .purple-medium.btn:hover{background-color:#BF55EC}.purple-medium.btn .badge{color:#BF55EC;background-color:#FFF}.portlet.box.purple-medium>.portlet-title,.portlet.purple-medium,.portlet>.portlet-body.purple-medium{background-color:#BF55EC}.btn.purple-medium-stripe{border-left:3px solid #BF55EC}.portlet.solid.purple-medium>.portlet-body,.portlet.solid.purple-medium>.portlet-title{border:0;color:#FFF}.portlet.solid.purple-medium>.portlet-title>.caption>i{color:#FFF}.portlet.solid.purple-medium>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.purple-medium>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.purple-medium>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.purple-medium>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.purple-medium>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.purple-medium>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.purple-medium{border:1px solid #d083f1;border-top:0}.portlet.box.purple-medium>.portlet-title>.caption,.portlet.box.purple-medium>.portlet-title>.caption>i{color:#FFF}.portlet.box.purple-medium>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #e5baf7;color:#eed1fa}.portlet.box.purple-medium>.portlet-title>.actions .btn-default>i{color:#f3dffb}.portlet.box.purple-medium>.portlet-title>.actions .btn-default.active,.portlet.box.purple-medium>.portlet-title>.actions .btn-default:active,.portlet.box.purple-medium>.portlet-title>.actions .btn-default:focus,.portlet.box.purple-medium>.portlet-title>.actions .btn-default:hover{border:1px solid #f6e8fc;color:#fff}.dashboard-stat.purple-medium{background-color:#BF55EC}.dashboard-stat.purple-medium.dashboard-stat-light:hover{background-color:#b843ea}.dashboard-stat.purple-medium .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.purple-medium .details .number{color:#FFF}.dashboard-stat.purple-medium .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.purple-medium .more{color:#FFF;background-color:#b843ea}.bg-purple-medium{border-color:#BF55EC!important;background-image:none!important;background-color:#BF55EC!important;color:#FFF!important}.font-purple-medium{color:#BF55EC!important}.progress-bar.purple-medium{background:#BF55EC!important;color:#FFF!important}.purple-studio.btn{color:#FFF;background-color:#8E44AD;border-color:""}.open .purple-studio.btn.dropdown-toggle,.purple-studio.btn.active,.purple-studio.btn:active,.purple-studio.btn:focus,.purple-studio.btn:hover{color:#FFF;background-color:#793a93}.purple-studio.btn.active,.purple-studio.btn:active{background-image:none;background-color:#6a3381}.purple-studio.btn.active:hover,.purple-studio.btn:active:hover{background-color:#703688}.open .purple-studio.btn.dropdown-toggle{background-image:none}.purple-studio.btn.disabled,.purple-studio.btn.disabled.active,.purple-studio.btn.disabled:active,.purple-studio.btn.disabled:focus,.purple-studio.btn.disabled:hover,.purple-studio.btn[disabled],.purple-studio.btn[disabled].active,.purple-studio.btn[disabled]:active,.purple-studio.btn[disabled]:focus,.purple-studio.btn[disabled]:hover,fieldset[disabled] .purple-studio.btn,fieldset[disabled] .purple-studio.btn.active,fieldset[disabled] .purple-studio.btn:active,fieldset[disabled] .purple-studio.btn:focus,fieldset[disabled] .purple-studio.btn:hover{background-color:#8E44AD}.purple-studio.btn .badge{color:#8E44AD;background-color:#FFF}.portlet.box.purple-studio>.portlet-title,.portlet.purple-studio,.portlet>.portlet-body.purple-studio{background-color:#8E44AD}.btn.purple-studio-stripe{border-left:3px solid #8E44AD}.portlet.solid.purple-studio>.portlet-body,.portlet.solid.purple-studio>.portlet-title{border:0;color:#FFF}.portlet.solid.purple-studio>.portlet-title>.caption>i{color:#FFF}.portlet.solid.purple-studio>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.purple-studio>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.purple-studio>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.purple-studio>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.purple-studio>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.purple-studio>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.purple-studio{border:1px solid #a563c1;border-top:0}.portlet.box.purple-studio>.portlet-title>.caption,.portlet.box.purple-studio>.portlet-title>.caption>i{color:#FFF}.portlet.box.purple-studio>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #bf8ed3;color:#c9a1da}.portlet.box.purple-studio>.portlet-title>.actions .btn-default>i{color:#cfacde}.portlet.box.purple-studio>.portlet-title>.actions .btn-default.active,.portlet.box.purple-studio>.portlet-title>.actions .btn-default:active,.portlet.box.purple-studio>.portlet-title>.actions .btn-default:focus,.portlet.box.purple-studio>.portlet-title>.actions .btn-default:hover{border:1px solid #d4b3e1;color:#dec5e8}.dashboard-stat.purple-studio{background-color:#8E44AD}.dashboard-stat.purple-studio.dashboard-stat-light:hover{background-color:#823e9e}.dashboard-stat.purple-studio .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.purple-studio .details .number{color:#FFF}.dashboard-stat.purple-studio .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.purple-studio .more{color:#FFF;background-color:#823e9e}.bg-purple-studio{border-color:#8E44AD!important;background-image:none!important;background-color:#8E44AD!important;color:#FFF!important}.font-purple-studio{color:#8E44AD!important}.progress-bar.purple-studio{background:#8E44AD!important;color:#FFF!important}.purple-wisteria.btn{color:#FFF;background-color:#9B59B6;border-color:""}.open .purple-wisteria.btn.dropdown-toggle,.purple-wisteria.btn.active,.purple-wisteria.btn:active,.purple-wisteria.btn:focus,.purple-wisteria.btn:hover{color:#FFF;background-color:#8948a3}.purple-wisteria.btn.active,.purple-wisteria.btn:active{background-image:none;background-color:#7a4092}.purple-wisteria.btn.active:hover,.purple-wisteria.btn:active:hover{background-color:#804399}.open .purple-wisteria.btn.dropdown-toggle{background-image:none}.purple-wisteria.btn.disabled,.purple-wisteria.btn.disabled.active,.purple-wisteria.btn.disabled:active,.purple-wisteria.btn.disabled:focus,.purple-wisteria.btn.disabled:hover,.purple-wisteria.btn[disabled],.purple-wisteria.btn[disabled].active,.purple-wisteria.btn[disabled]:active,.purple-wisteria.btn[disabled]:focus,.purple-wisteria.btn[disabled]:hover,fieldset[disabled] .purple-wisteria.btn,fieldset[disabled] .purple-wisteria.btn.active,fieldset[disabled] .purple-wisteria.btn:active,fieldset[disabled] .purple-wisteria.btn:focus,fieldset[disabled] .purple-wisteria.btn:hover{background-color:#9B59B6}.purple-wisteria.btn .badge{color:#9B59B6;background-color:#FFF}.portlet.box.purple-wisteria>.portlet-title,.portlet.purple-wisteria,.portlet>.portlet-body.purple-wisteria{background-color:#9B59B6}.btn.purple-wisteria-stripe{border-left:3px solid #9B59B6}.portlet.solid.purple-wisteria>.portlet-body,.portlet.solid.purple-wisteria>.portlet-title{border:0;color:#FFF}.portlet.solid.purple-wisteria>.portlet-title>.caption>i{color:#FFF}.portlet.solid.purple-wisteria>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.purple-wisteria>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.purple-wisteria>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.purple-wisteria>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.purple-wisteria>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.purple-wisteria>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.purple-wisteria{border:1px solid #b07cc6;border-top:0}.portlet.box.purple-wisteria>.portlet-title>.caption,.portlet.box.purple-wisteria>.portlet-title>.caption>i{color:#FFF}.portlet.box.purple-wisteria>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #caa7d8;color:#d5b9e0}.portlet.box.purple-wisteria>.portlet-title>.actions .btn-default>i{color:#dbc3e5}.portlet.box.purple-wisteria>.portlet-title>.actions .btn-default.active,.portlet.box.purple-wisteria>.portlet-title>.actions .btn-default:active,.portlet.box.purple-wisteria>.portlet-title>.actions .btn-default:focus,.portlet.box.purple-wisteria>.portlet-title>.actions .btn-default:hover{border:1px solid #dfcae8;color:#eadcf0}.dashboard-stat.purple-wisteria{background-color:#9B59B6}.dashboard-stat.purple-wisteria.dashboard-stat-light:hover{background-color:#924dae}.dashboard-stat.purple-wisteria .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.purple-wisteria .details .number{color:#FFF}.dashboard-stat.purple-wisteria .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.purple-wisteria .more{color:#FFF;background-color:#924dae}.bg-purple-wisteria{border-color:#9B59B6!important;background-image:none!important;background-color:#9B59B6!important;color:#FFF!important}.font-purple-wisteria{color:#9B59B6!important}.progress-bar.purple-wisteria{background:#9B59B6!important;color:#FFF!important}.purple-seance.btn{color:#FFF;background-color:#9A12B3;border-color:""}.open .purple-seance.btn.dropdown-toggle,.purple-seance.btn.active,.purple-seance.btn:active,.purple-seance.btn:focus,.purple-seance.btn:hover{color:#FFF;background-color:#7e0f93}.purple-seance.btn.active,.purple-seance.btn:active{background-image:none;background-color:#6a0c7b}.purple-seance.btn.active:hover,.purple-seance.btn:active:hover{background-color:#720d85}.open .purple-seance.btn.dropdown-toggle{background-image:none}.purple-seance.btn.disabled,.purple-seance.btn.disabled.active,.purple-seance.btn.disabled:active,.purple-seance.btn.disabled:focus,.purple-seance.btn.disabled:hover,.purple-seance.btn[disabled],.purple-seance.btn[disabled].active,.purple-seance.btn[disabled]:active,.purple-seance.btn[disabled]:focus,.purple-seance.btn[disabled]:hover,fieldset[disabled] .purple-seance.btn,fieldset[disabled] .purple-seance.btn.active,fieldset[disabled] .purple-seance.btn:active,fieldset[disabled] .purple-seance.btn:focus,fieldset[disabled] .purple-seance.btn:hover{background-color:#9A12B3}.purple-seance.btn .badge{color:#9A12B3;background-color:#FFF}.portlet.box.purple-seance>.portlet-title,.portlet.purple-seance,.portlet>.portlet-body.purple-seance{background-color:#9A12B3}.btn.purple-seance-stripe{border-left:3px solid #9A12B3}.portlet.solid.purple-seance>.portlet-body,.portlet.solid.purple-seance>.portlet-title{border:0;color:#FFF}.portlet.solid.purple-seance>.portlet-title>.caption>i{color:#FFF}.portlet.solid.purple-seance>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.purple-seance>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.purple-seance>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.purple-seance>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.purple-seance>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.purple-seance>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.purple-seance{border:1px solid #c217e1;border-top:0}.portlet.box.purple-seance>.portlet-title>.caption,.portlet.box.purple-seance>.portlet-title>.caption>i{color:#FFF}.portlet.box.purple-seance>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #d349ed;color:#d960ef}.portlet.box.purple-seance>.portlet-title>.actions .btn-default>i{color:#dc6ef0}.portlet.box.purple-seance>.portlet-title>.actions .btn-default.active,.portlet.box.purple-seance>.portlet-title>.actions .btn-default:active,.portlet.box.purple-seance>.portlet-title>.actions .btn-default:focus,.portlet.box.purple-seance>.portlet-title>.actions .btn-default:hover{border:1px solid #de77f1;color:#e48ef4}.dashboard-stat.purple-seance{background-color:#9A12B3}.dashboard-stat.purple-seance.dashboard-stat-light:hover{background-color:#8a10a0}.dashboard-stat.purple-seance .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.purple-seance .details .number{color:#FFF}.dashboard-stat.purple-seance .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.purple-seance .more{color:#FFF;background-color:#8a10a0}.bg-purple-seance{border-color:#9A12B3!important;background-image:none!important;background-color:#9A12B3!important;color:#FFF!important}.font-purple-seance{color:#9A12B3!important}.progress-bar.purple-seance{background:#9A12B3!important;color:#FFF!important}.purple-intense.btn{color:#FFF;background-color:#8775a7;border-color:""}.open .purple-intense.btn.dropdown-toggle,.purple-intense.btn.active,.purple-intense.btn:active,.purple-intense.btn:focus,.purple-intense.btn:hover{color:#FFF;background-color:#746198}.purple-intense.btn.active,.purple-intense.btn:active{background-image:none;background-color:#685788}.purple-intense.btn.active:hover,.purple-intense.btn:active:hover{background-color:#6d5b8e}.open .purple-intense.btn.dropdown-toggle{background-image:none}.purple-intense.btn.disabled,.purple-intense.btn.disabled.active,.purple-intense.btn.disabled:active,.purple-intense.btn.disabled:focus,.purple-intense.btn.disabled:hover,.purple-intense.btn[disabled],.purple-intense.btn[disabled].active,.purple-intense.btn[disabled]:active,.purple-intense.btn[disabled]:focus,.purple-intense.btn[disabled]:hover,fieldset[disabled] .purple-intense.btn,fieldset[disabled] .purple-intense.btn.active,fieldset[disabled] .purple-intense.btn:active,fieldset[disabled] .purple-intense.btn:focus,fieldset[disabled] .purple-intense.btn:hover{background-color:#8775a7}.purple-intense.btn .badge{color:#8775a7;background-color:#FFF}.portlet.box.purple-intense>.portlet-title,.portlet.purple-intense,.portlet>.portlet-body.purple-intense{background-color:#8775a7}.btn.purple-intense-stripe{border-left:3px solid #8775a7}.portlet.solid.purple-intense>.portlet-body,.portlet.solid.purple-intense>.portlet-title{border:0;color:#FFF}.portlet.solid.purple-intense>.portlet-title>.caption>i{color:#FFF}.portlet.solid.purple-intense>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.purple-intense>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.purple-intense>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.purple-intense>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.purple-intense>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.purple-intense>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.purple-intense{border:1px solid #a294bb;border-top:0}.portlet.box.purple-intense>.portlet-title>.caption,.portlet.box.purple-intense>.portlet-title>.caption>i{color:#FFF}.portlet.box.purple-intense>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #c3bad3;color:#d0c9dd}.portlet.box.purple-intense>.portlet-title>.actions .btn-default>i{color:#d8d2e3}.portlet.box.purple-intense>.portlet-title>.actions .btn-default.active,.portlet.box.purple-intense>.portlet-title>.actions .btn-default:active,.portlet.box.purple-intense>.portlet-title>.actions .btn-default:focus,.portlet.box.purple-intense>.portlet-title>.actions .btn-default:hover{border:1px solid #ded9e7;color:#ebe8f0}.dashboard-stat.purple-intense{background-color:#8775a7}.dashboard-stat.purple-intense.dashboard-stat-light:hover{background-color:#7c699f}.dashboard-stat.purple-intense .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.purple-intense .details .number{color:#FFF}.dashboard-stat.purple-intense .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.purple-intense .more{color:#FFF;background-color:#7c699f}.bg-purple-intense{border-color:#8775a7!important;background-image:none!important;background-color:#8775a7!important;color:#FFF!important}.font-purple-intense{color:#8775a7!important}.progress-bar.purple-intense{background:#8775a7!important;color:#FFF!important}.purple-sharp.btn{color:#FFF;background-color:#796799;border-color:""}.open .purple-sharp.btn.dropdown-toggle,.purple-sharp.btn.active,.purple-sharp.btn:active,.purple-sharp.btn:focus,.purple-sharp.btn:hover{color:#FFF;background-color:#685884}.purple-sharp.btn.active,.purple-sharp.btn:active{background-image:none;background-color:#5c4e75}.purple-sharp.btn.active:hover,.purple-sharp.btn:active:hover{background-color:#61527b}.open .purple-sharp.btn.dropdown-toggle{background-image:none}.purple-sharp.btn.disabled,.purple-sharp.btn.disabled.active,.purple-sharp.btn.disabled:active,.purple-sharp.btn.disabled:focus,.purple-sharp.btn.disabled:hover,.purple-sharp.btn[disabled],.purple-sharp.btn[disabled].active,.purple-sharp.btn[disabled]:active,.purple-sharp.btn[disabled]:focus,.purple-sharp.btn[disabled]:hover,fieldset[disabled] .purple-sharp.btn,fieldset[disabled] .purple-sharp.btn.active,fieldset[disabled] .purple-sharp.btn:active,fieldset[disabled] .purple-sharp.btn:focus,fieldset[disabled] .purple-sharp.btn:hover{background-color:#796799}.purple-sharp.btn .badge{color:#796799;background-color:#FFF}.portlet.box.purple-sharp>.portlet-title,.portlet.purple-sharp,.portlet>.portlet-body.purple-sharp{background-color:#796799}.btn.purple-sharp-stripe{border-left:3px solid #796799}.portlet.solid.purple-sharp>.portlet-body,.portlet.solid.purple-sharp>.portlet-title{border:0;color:#FFF}.portlet.solid.purple-sharp>.portlet-title>.caption>i{color:#FFF}.portlet.solid.purple-sharp>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.purple-sharp>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.purple-sharp>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.purple-sharp>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.purple-sharp>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.purple-sharp>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.purple-sharp{border:1px solid #9486ad;border-top:0}.portlet.box.purple-sharp>.portlet-title>.caption,.portlet.box.purple-sharp>.portlet-title>.caption>i{color:#FFF}.portlet.box.purple-sharp>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #b4aac6;color:#c2b9d0}.portlet.box.purple-sharp>.portlet-title>.actions .btn-default>i{color:#cac3d6}.portlet.box.purple-sharp>.portlet-title>.actions .btn-default.active,.portlet.box.purple-sharp>.portlet-title>.actions .btn-default:active,.portlet.box.purple-sharp>.portlet-title>.actions .btn-default:focus,.portlet.box.purple-sharp>.portlet-title>.actions .btn-default:hover{border:1px solid #cfc9db;color:#ddd8e5}.dashboard-stat.purple-sharp{background-color:#796799}.dashboard-stat.purple-sharp.dashboard-stat-light:hover{background-color:#6f5f8d}.dashboard-stat.purple-sharp .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.purple-sharp .details .number{color:#FFF}.dashboard-stat.purple-sharp .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.purple-sharp .more{color:#FFF;background-color:#6f5f8d}.bg-purple-sharp{border-color:#796799!important;background-image:none!important;background-color:#796799!important;color:#FFF!important}.font-purple-sharp{color:#796799!important}.progress-bar.purple-sharp{background:#796799!important;color:#FFF!important}.purple-soft.btn{color:#FFF;background-color:#8877a9;border-color:""}.open .purple-soft.btn.dropdown-toggle,.purple-soft.btn.active,.purple-soft.btn:active,.purple-soft.btn:focus,.purple-soft.btn:hover{color:#FFF;background-color:#75629b}.purple-soft.btn.active,.purple-soft.btn:active{background-image:none;background-color:#69588b}.purple-soft.btn.active:hover,.purple-soft.btn:active:hover{background-color:#6e5c91}.open .purple-soft.btn.dropdown-toggle{background-image:none}.purple-soft.btn.disabled,.purple-soft.btn.disabled.active,.purple-soft.btn.disabled:active,.purple-soft.btn.disabled:focus,.purple-soft.btn.disabled:hover,.purple-soft.btn[disabled],.purple-soft.btn[disabled].active,.purple-soft.btn[disabled]:active,.purple-soft.btn[disabled]:focus,.purple-soft.btn[disabled]:hover,fieldset[disabled] .purple-soft.btn,fieldset[disabled] .purple-soft.btn.active,fieldset[disabled] .purple-soft.btn:active,fieldset[disabled] .purple-soft.btn:focus,fieldset[disabled] .purple-soft.btn:hover{background-color:#8877a9}.purple-soft.btn .badge{color:#8877a9;background-color:#FFF}.portlet.box.purple-soft>.portlet-title,.portlet.purple-soft,.portlet>.portlet-body.purple-soft{background-color:#8877a9}.btn.purple-soft-stripe{border-left:3px solid #8877a9}.portlet.solid.purple-soft>.portlet-body,.portlet.solid.purple-soft>.portlet-title{border:0;color:#FFF}.portlet.solid.purple-soft>.portlet-title>.caption>i{color:#FFF}.portlet.solid.purple-soft>.portlet-title>.tools>a.remove{background-image:url(../../assets/images/portlet-remove-icon-white.png)}.portlet.solid.purple-soft>.portlet-title>.tools>a.config{background-image:url(../../assets/images/portlet-config-icon-white.png)}.portlet.solid.purple-soft>.portlet-title>.tools>a.reload{background-image:url(../../assets/images/portlet-reload-icon-white.png)}.portlet.solid.purple-soft>.portlet-title>.tools>a.expand{background-image:url(../../assets/images/portlet-expand-icon-white.png)}.portlet.solid.purple-soft>.portlet-title>.tools>a.collapse{background-image:url(../../assets/images/portlet-collapse-icon-white.png)}.portlet.solid.purple-soft>.portlet-title>.tools>a.fullscreen{color:#fdfdfd}.portlet.box.purple-soft{border:1px solid #a396bd;border-top:0}.portlet.box.purple-soft>.portlet-title>.caption,.portlet.box.purple-soft>.portlet-title>.caption>i{color:#FFF}.portlet.box.purple-soft>.portlet-title>.actions .btn-default{background:0 0!important;border:1px solid #c4bcd4;color:#d2cbde}.portlet.box.purple-soft>.portlet-title>.actions .btn-default>i{color:#dad5e4}.portlet.box.purple-soft>.portlet-title>.actions .btn-default.active,.portlet.box.purple-soft>.portlet-title>.actions .btn-default:active,.portlet.box.purple-soft>.portlet-title>.actions .btn-default:focus,.portlet.box.purple-soft>.portlet-title>.actions .btn-default:hover{border:1px solid #dfdbe8;color:#edebf2}.dashboard-stat.purple-soft{background-color:#8877a9}.dashboard-stat.purple-soft.dashboard-stat-light:hover{background-color:#7d6ba1}.dashboard-stat.purple-soft .visual>i{color:#FFF;opacity:.1;filter:alpha(opacity=10)}.dashboard-stat.purple-soft .details .number{color:#FFF}.dashboard-stat.purple-soft .details .desc{color:#FFF;opacity:1;filter:alpha(opacity=100)}.dashboard-stat.purple-soft .more{color:#FFF;background-color:#7d6ba1}.bg-purple-soft{border-color:#8877a9!important;background-image:none!important;background-color:#8877a9!important;color:#FFF!important}.font-purple-soft{color:#8877a9!important}.progress-bar.purple-soft{background:#8877a9!important;color:#FFF!important}.btn-transparent.btn{background:0 0;color:#888}@-moz-keyframes whirly-loader{0%{-moz-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes whirly-loader{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes whirly-loader{0%{-moz-transform:rotate(0);-ms-transform:rotate(0);-webkit-transform:rotate(0);transform:rotate(0)}100%{-moz-transform:rotate(360deg);-ms-transform:rotate(360deg);-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.whirly-loader:not(:required){overflow:hidden;position:relative;text-indent:-9999px;display:inline-block;width:8px;height:8px;background:0 0;-moz-border-radius:100%;-webkit-border-radius:100%;border-radius:100%;-moz-box-shadow:#FA4C61 0 26px 0 6px,#FA4C61 .91px 26.05px 0 5.93px,#FA4C61 1.82px 26.07px 0 5.87px,#FA4C61 2.74px 26.06px 0 5.8px,#FA4C61 3.66px 26.01px 0 5.73px,#FA4C61 4.57px 25.93px 0 5.67px,#FA4C61 5.49px 25.82px 0 5.6px,#FA4C61 6.4px 25.68px 0 5.53px,#FA4C61 7.31px 25.51px 0 5.47px,#FA4C61 8.22px 25.3px 0 5.4px,#FA4C61 9.12px 25.06px 0 5.33px,#FA4C61 10.01px 24.79px 0 5.27px,#FA4C61 10.9px 24.48px 0 5.2px,#FA4C61 11.78px 24.15px 0 5.13px,#FA4C61 12.64px 23.78px 0 5.07px,#FA4C61 13.5px 23.38px 0 5px,#FA4C61 14.34px 22.95px 0 4.93px,#FA4C61 15.17px 22.49px 0 4.87px,#FA4C61 15.99px 22.01px 0 4.8px,#FA4C61 16.79px 21.49px 0 4.73px,#FA4C61 17.57px 20.94px 0 4.67px,#FA4C61 18.33px 20.36px 0 4.6px,#FA4C61 19.08px 19.76px 0 4.53px,#FA4C61 19.81px 19.13px 0 4.47px,#FA4C61 20.51px 18.47px 0 4.4px,#FA4C61 21.19px 17.78px 0 4.33px,#FA4C61 21.85px 17.07px 0 4.27px,#FA4C61 22.49px 16.34px 0 4.2px,#FA4C61 23.1px 15.58px 0 4.13px,#FA4C61 23.69px 14.8px 0 4.07px,#FA4C61 24.25px 14px 0 4px,#FA4C61 24.78px 13.18px 0 3.93px,#FA4C61 25.29px 12.33px 0 3.87px,#FA4C61 25.76px 11.47px 0 3.8px,#FA4C61 26.21px 10.59px 0 3.73px,#FA4C61 26.62px 9.69px 0 3.67px,#FA4C61 27.01px 8.78px 0 3.6px,#FA4C61 27.36px 7.85px 0 3.53px,#FA4C61 27.69px 6.9px 0 3.47px,#FA4C61 27.98px 5.95px 0 3.4px,#FA4C61 28.23px 4.98px 0 3.33px,#FA4C61 28.45px 4px 0 3.27px,#FA4C61 28.64px 3.01px 0 3.2px,#FA4C61 28.8px 2.01px 0 3.13px,#FA4C61 28.92px 1.01px 0 3.07px,#FA4C61 29px 0 0 3px,#FA4C61 29.05px -1.01px 0 2.93px,#FA4C61 29.06px -2.03px 0 2.87px,#FA4C61 29.04px -3.05px 0 2.8px,#FA4C61 28.98px -4.07px 0 2.73px,#FA4C61 28.89px -5.09px 0 2.67px,#FA4C61 28.76px -6.11px 0 2.6px,#FA4C61 28.59px -7.13px 0 2.53px,#FA4C61 28.39px -8.14px 0 2.47px,#FA4C61 28.15px -9.15px 0 2.4px,#FA4C61 27.88px -10.15px 0 2.33px,#FA4C61 27.57px -11.14px 0 2.27px,#FA4C61 27.22px -12.12px 0 2.2px,#FA4C61 26.84px -13.09px 0 2.13px,#FA4C61 26.43px -14.05px 0 2.07px,#FA4C61 25.98px -15px 0 2px,#FA4C61 25.5px -15.93px 0 1.93px,#FA4C61 24.98px -16.85px 0 1.87px,#FA4C61 24.43px -17.75px 0 1.8px,#FA4C61 23.85px -18.63px 0 1.73px,#FA4C61 23.24px -19.5px 0 1.67px,#FA4C61 22.59px -20.34px 0 1.6px,#FA4C61 21.92px -21.16px 0 1.53px,#FA4C61 21.21px -21.96px 0 1.47px,#FA4C61 20.48px -22.74px 0 1.4px,#FA4C61 19.71px -23.49px 0 1.33px,#FA4C61 18.92px -24.22px 0 1.27px,#FA4C61 18.1px -24.92px 0 1.2px,#FA4C61 17.26px -25.59px 0 1.13px,#FA4C61 16.39px -26.23px 0 1.07px,#FA4C61 15.5px -26.85px 0 1px,#FA4C61 14.58px -27.43px 0 .93px,#FA4C61 13.65px -27.98px 0 .87px,#FA4C61 12.69px -28.5px 0 .8px,#FA4C61 11.71px -28.99px 0 .73px,#FA4C61 10.72px -29.44px 0 .67px,#FA4C61 9.7px -29.86px 0 .6px,#FA4C61 8.67px -30.25px 0 .53px,#FA4C61 7.63px -30.6px 0 .47px,#FA4C61 6.57px -30.91px 0 .4px,#FA4C61 5.5px -31.19px 0 .33px,#FA4C61 4.42px -31.42px 0 .27px,#FA4C61 3.32px -31.63px 0 .2px,#FA4C61 2.22px -31.79px 0 .13px,#FA4C61 1.11px -31.91px 0 .07px,#FA4C61 0 -32px 0 0,#FA4C61 -1.12px -32.05px 0 -.07px,#FA4C61 -2.24px -32.06px 0 -.13px,#FA4C61 -3.37px -32.02px 0 -.2px,#FA4C61 -4.49px -31.95px 0 -.27px,#FA4C61 -5.61px -31.84px 0 -.33px,#FA4C61 -6.74px -31.69px 0 -.4px,#FA4C61 -7.85px -31.5px 0 -.47px,#FA4C61 -8.97px -31.27px 0 -.53px,#FA4C61 -10.07px -31px 0 -.6px,#FA4C61 -11.17px -30.7px 0 -.67px,#FA4C61 -12.26px -30.35px 0 -.73px,#FA4C61 -13.34px -29.96px 0 -.8px,#FA4C61 -14.41px -29.54px 0 -.87px,#FA4C61 -15.46px -29.08px 0 -.93px,#FA4C61 -16.5px -28.58px 0 -1px,#FA4C61 -17.52px -28.04px 0 -1.07px,#FA4C61 -18.53px -27.47px 0 -1.13px,#FA4C61 -19.51px -26.86px 0 -1.2px,#FA4C61 -20.48px -26.21px 0 -1.27px,#FA4C61 -21.43px -25.53px 0 -1.33px,#FA4C61 -22.35px -24.82px 0 -1.4px,#FA4C61 -23.25px -24.07px 0 -1.47px,#FA4C61 -24.12px -23.29px 0 -1.53px,#FA4C61 -24.97px -22.48px 0 -1.6px,#FA4C61 -25.79px -21.64px 0 -1.67px,#FA4C61 -26.58px -20.77px 0 -1.73px,#FA4C61 -27.34px -19.87px 0 -1.8px,#FA4C61 -28.08px -18.94px 0 -1.87px,#FA4C61 -28.78px -17.98px 0 -1.93px,#FA4C61 -29.44px -17px 0 -2px,#FA4C61 -30.08px -15.99px 0 -2.07px,#FA4C61 -30.68px -14.96px 0 -2.13px,#FA4C61 -31.24px -13.91px 0 -2.2px,#FA4C61 -31.77px -12.84px 0 -2.27px,#FA4C61 -32.26px -11.74px 0 -2.33px,#FA4C61 -32.72px -10.63px 0 -2.4px,#FA4C61 -33.13px -9.5px 0 -2.47px,#FA4C61 -33.51px -8.35px 0 -2.53px,#FA4C61 -33.84px -7.19px 0 -2.6px,#FA4C61 -34.14px -6.02px 0 -2.67px,#FA4C61 -34.4px -4.83px 0 -2.73px,#FA4C61 -34.61px -3.64px 0 -2.8px,#FA4C61 -34.78px -2.43px 0 -2.87px,#FA4C61 -34.91px -1.22px 0 -2.93px,#FA4C61 -35px 0 0 -3px,#FA4C61 -35.05px 1.22px 0 -3.07px,#FA4C61 -35.05px 2.45px 0 -3.13px,#FA4C61 -35.01px 3.68px 0 -3.2px,#FA4C61 -34.92px 4.91px 0 -3.27px,#FA4C61 -34.8px 6.14px 0 -3.33px,#FA4C61 -34.63px 7.36px 0 -3.4px,#FA4C61 -34.41px 8.58px 0 -3.47px,#FA4C61 -34.16px 9.79px 0 -3.53px,#FA4C61 -33.86px 11px 0 -3.6px,#FA4C61 -33.52px 12.2px 0 -3.67px,#FA4C61 -33.13px 13.39px 0 -3.73px,#FA4C61 -32.7px 14.56px 0 -3.8px,#FA4C61 -32.24px 15.72px 0 -3.87px,#FA4C61 -31.73px 16.87px 0 -3.93px,#FA4C61 -31.18px 18px 0 -4px,#FA4C61 -30.59px 19.11px 0 -4.07px,#FA4C61 -29.96px 20.21px 0 -4.13px,#FA4C61 -29.29px 21.28px 0 -4.2px,#FA4C61 -28.58px 22.33px 0 -4.27px,#FA4C61 -27.83px 23.35px 0 -4.33px,#FA4C61 -27.05px 24.36px 0 -4.4px,#FA4C61 -26.23px 25.33px 0 -4.47px,#FA4C61 -25.38px 26.28px 0 -4.53px,#FA4C61 -24.49px 27.2px 0 -4.6px,#FA4C61 -23.57px 28.09px 0 -4.67px,#FA4C61 -22.62px 28.95px 0 -4.73px,#FA4C61 -21.63px 29.77px 0 -4.8px,#FA4C61 -20.62px 30.56px 0 -4.87px,#FA4C61 -19.57px 31.32px 0 -4.93px,#FA4C61 -18.5px 32.04px 0 -5px,#FA4C61 -17.4px 32.73px 0 -5.07px,#FA4C61 -16.28px 33.38px 0 -5.13px,#FA4C61 -15.13px 33.98px 0 -5.2px,#FA4C61 -13.96px 34.55px 0 -5.27px,#FA4C61 -12.77px 35.08px 0 -5.33px,#FA4C61 -11.56px 35.57px 0 -5.4px,#FA4C61 -10.33px 36.02px 0 -5.47px,#FA4C61 -9.08px 36.42px 0 -5.53px,#FA4C61 -7.82px 36.78px 0 -5.6px,#FA4C61 -6.54px 37.09px 0 -5.67px,#FA4C61 -5.25px 37.37px 0 -5.73px,#FA4C61 -3.95px 37.59px 0 -5.8px,#FA4C61 -2.64px 37.77px 0 -5.87px,#FA4C61 -1.32px 37.91px 0 -5.93px;-webkit-box-shadow:#FA4C61 0 26px 0 6px,#FA4C61 .91px 26.05px 0 5.93px,#FA4C61 1.82px 26.07px 0 5.87px,#FA4C61 2.74px 26.06px 0 5.8px,#FA4C61 3.66px 26.01px 0 5.73px,#FA4C61 4.57px 25.93px 0 5.67px,#FA4C61 5.49px 25.82px 0 5.6px,#FA4C61 6.4px 25.68px 0 5.53px,#FA4C61 7.31px 25.51px 0 5.47px,#FA4C61 8.22px 25.3px 0 5.4px,#FA4C61 9.12px 25.06px 0 5.33px,#FA4C61 10.01px 24.79px 0 5.27px,#FA4C61 10.9px 24.48px 0 5.2px,#FA4C61 11.78px 24.15px 0 5.13px,#FA4C61 12.64px 23.78px 0 5.07px,#FA4C61 13.5px 23.38px 0 5px,#FA4C61 14.34px 22.95px 0 4.93px,#FA4C61 15.17px 22.49px 0 4.87px,#FA4C61 15.99px 22.01px 0 4.8px,#FA4C61 16.79px 21.49px 0 4.73px,#FA4C61 17.57px 20.94px 0 4.67px,#FA4C61 18.33px 20.36px 0 4.6px,#FA4C61 19.08px 19.76px 0 4.53px,#FA4C61 19.81px 19.13px 0 4.47px,#FA4C61 20.51px 18.47px 0 4.4px,#FA4C61 21.19px 17.78px 0 4.33px,#FA4C61 21.85px 17.07px 0 4.27px,#FA4C61 22.49px 16.34px 0 4.2px,#FA4C61 23.1px 15.58px 0 4.13px,#FA4C61 23.69px 14.8px 0 4.07px,#FA4C61 24.25px 14px 0 4px,#FA4C61 24.78px 13.18px 0 3.93px,#FA4C61 25.29px 12.33px 0 3.87px,#FA4C61 25.76px 11.47px 0 3.8px,#FA4C61 26.21px 10.59px 0 3.73px,#FA4C61 26.62px 9.69px 0 3.67px,#FA4C61 27.01px 8.78px 0 3.6px,#FA4C61 27.36px 7.85px 0 3.53px,#FA4C61 27.69px 6.9px 0 3.47px,#FA4C61 27.98px 5.95px 0 3.4px,#FA4C61 28.23px 4.98px 0 3.33px,#FA4C61 28.45px 4px 0 3.27px,#FA4C61 28.64px 3.01px 0 3.2px,#FA4C61 28.8px 2.01px 0 3.13px,#FA4C61 28.92px 1.01px 0 3.07px,#FA4C61 29px 0 0 3px,#FA4C61 29.05px -1.01px 0 2.93px,#FA4C61 29.06px -2.03px 0 2.87px,#FA4C61 29.04px -3.05px 0 2.8px,#FA4C61 28.98px -4.07px 0 2.73px,#FA4C61 28.89px -5.09px 0 2.67px,#FA4C61 28.76px -6.11px 0 2.6px,#FA4C61 28.59px -7.13px 0 2.53px,#FA4C61 28.39px -8.14px 0 2.47px,#FA4C61 28.15px -9.15px 0 2.4px,#FA4C61 27.88px -10.15px 0 2.33px,#FA4C61 27.57px -11.14px 0 2.27px,#FA4C61 27.22px -12.12px 0 2.2px,#FA4C61 26.84px -13.09px 0 2.13px,#FA4C61 26.43px -14.05px 0 2.07px,#FA4C61 25.98px -15px 0 2px,#FA4C61 25.5px -15.93px 0 1.93px,#FA4C61 24.98px -16.85px 0 1.87px,#FA4C61 24.43px -17.75px 0 1.8px,#FA4C61 23.85px -18.63px 0 1.73px,#FA4C61 23.24px -19.5px 0 1.67px,#FA4C61 22.59px -20.34px 0 1.6px,#FA4C61 21.92px -21.16px 0 1.53px,#FA4C61 21.21px -21.96px 0 1.47px,#FA4C61 20.48px -22.74px 0 1.4px,#FA4C61 19.71px -23.49px 0 1.33px,#FA4C61 18.92px -24.22px 0 1.27px,#FA4C61 18.1px -24.92px 0 1.2px,#FA4C61 17.26px -25.59px 0 1.13px,#FA4C61 16.39px -26.23px 0 1.07px,#FA4C61 15.5px -26.85px 0 1px,#FA4C61 14.58px -27.43px 0 .93px,#FA4C61 13.65px -27.98px 0 .87px,#FA4C61 12.69px -28.5px 0 .8px,#FA4C61 11.71px -28.99px 0 .73px,#FA4C61 10.72px -29.44px 0 .67px,#FA4C61 9.7px -29.86px 0 .6px,#FA4C61 8.67px -30.25px 0 .53px,#FA4C61 7.63px -30.6px 0 .47px,#FA4C61 6.57px -30.91px 0 .4px,#FA4C61 5.5px -31.19px 0 .33px,#FA4C61 4.42px -31.42px 0 .27px,#FA4C61 3.32px -31.63px 0 .2px,#FA4C61 2.22px -31.79px 0 .13px,#FA4C61 1.11px -31.91px 0 .07px,#FA4C61 0 -32px 0 0,#FA4C61 -1.12px -32.05px 0 -.07px,#FA4C61 -2.24px -32.06px 0 -.13px,#FA4C61 -3.37px -32.02px 0 -.2px,#FA4C61 -4.49px -31.95px 0 -.27px,#FA4C61 -5.61px -31.84px 0 -.33px,#FA4C61 -6.74px -31.69px 0 -.4px,#FA4C61 -7.85px -31.5px 0 -.47px,#FA4C61 -8.97px -31.27px 0 -.53px,#FA4C61 -10.07px -31px 0 -.6px,#FA4C61 -11.17px -30.7px 0 -.67px,#FA4C61 -12.26px -30.35px 0 -.73px,#FA4C61 -13.34px -29.96px 0 -.8px,#FA4C61 -14.41px -29.54px 0 -.87px,#FA4C61 -15.46px -29.08px 0 -.93px,#FA4C61 -16.5px -28.58px 0 -1px,#FA4C61 -17.52px -28.04px 0 -1.07px,#FA4C61 -18.53px -27.47px 0 -1.13px,#FA4C61 -19.51px -26.86px 0 -1.2px,#FA4C61 -20.48px -26.21px 0 -1.27px,#FA4C61 -21.43px -25.53px 0 -1.33px,#FA4C61 -22.35px -24.82px 0 -1.4px,#FA4C61 -23.25px -24.07px 0 -1.47px,#FA4C61 -24.12px -23.29px 0 -1.53px,#FA4C61 -24.97px -22.48px 0 -1.6px,#FA4C61 -25.79px -21.64px 0 -1.67px,#FA4C61 -26.58px -20.77px 0 -1.73px,#FA4C61 -27.34px -19.87px 0 -1.8px,#FA4C61 -28.08px -18.94px 0 -1.87px,#FA4C61 -28.78px -17.98px 0 -1.93px,#FA4C61 -29.44px -17px 0 -2px,#FA4C61 -30.08px -15.99px 0 -2.07px,#FA4C61 -30.68px -14.96px 0 -2.13px,#FA4C61 -31.24px -13.91px 0 -2.2px,#FA4C61 -31.77px -12.84px 0 -2.27px,#FA4C61 -32.26px -11.74px 0 -2.33px,#FA4C61 -32.72px -10.63px 0 -2.4px,#FA4C61 -33.13px -9.5px 0 -2.47px,#FA4C61 -33.51px -8.35px 0 -2.53px,#FA4C61 -33.84px -7.19px 0 -2.6px,#FA4C61 -34.14px -6.02px 0 -2.67px,#FA4C61 -34.4px -4.83px 0 -2.73px,#FA4C61 -34.61px -3.64px 0 -2.8px,#FA4C61 -34.78px -2.43px 0 -2.87px,#FA4C61 -34.91px -1.22px 0 -2.93px,#FA4C61 -35px 0 0 -3px,#FA4C61 -35.05px 1.22px 0 -3.07px,#FA4C61 -35.05px 2.45px 0 -3.13px,#FA4C61 -35.01px 3.68px 0 -3.2px,#FA4C61 -34.92px 4.91px 0 -3.27px,#FA4C61 -34.8px 6.14px 0 -3.33px,#FA4C61 -34.63px 7.36px 0 -3.4px,#FA4C61 -34.41px 8.58px 0 -3.47px,#FA4C61 -34.16px 9.79px 0 -3.53px,#FA4C61 -33.86px 11px 0 -3.6px,#FA4C61 -33.52px 12.2px 0 -3.67px,#FA4C61 -33.13px 13.39px 0 -3.73px,#FA4C61 -32.7px 14.56px 0 -3.8px,#FA4C61 -32.24px 15.72px 0 -3.87px,#FA4C61 -31.73px 16.87px 0 -3.93px,#FA4C61 -31.18px 18px 0 -4px,#FA4C61 -30.59px 19.11px 0 -4.07px,#FA4C61 -29.96px 20.21px 0 -4.13px,#FA4C61 -29.29px 21.28px 0 -4.2px,#FA4C61 -28.58px 22.33px 0 -4.27px,#FA4C61 -27.83px 23.35px 0 -4.33px,#FA4C61 -27.05px 24.36px 0 -4.4px,#FA4C61 -26.23px 25.33px 0 -4.47px,#FA4C61 -25.38px 26.28px 0 -4.53px,#FA4C61 -24.49px 27.2px 0 -4.6px,#FA4C61 -23.57px 28.09px 0 -4.67px,#FA4C61 -22.62px 28.95px 0 -4.73px,#FA4C61 -21.63px 29.77px 0 -4.8px,#FA4C61 -20.62px 30.56px 0 -4.87px,#FA4C61 -19.57px 31.32px 0 -4.93px,#FA4C61 -18.5px 32.04px 0 -5px,#FA4C61 -17.4px 32.73px 0 -5.07px,#FA4C61 -16.28px 33.38px 0 -5.13px,#FA4C61 -15.13px 33.98px 0 -5.2px,#FA4C61 -13.96px 34.55px 0 -5.27px,#FA4C61 -12.77px 35.08px 0 -5.33px,#FA4C61 -11.56px 35.57px 0 -5.4px,#FA4C61 -10.33px 36.02px 0 -5.47px,#FA4C61 -9.08px 36.42px 0 -5.53px,#FA4C61 -7.82px 36.78px 0 -5.6px,#FA4C61 -6.54px 37.09px 0 -5.67px,#FA4C61 -5.25px 37.37px 0 -5.73px,#FA4C61 -3.95px 37.59px 0 -5.8px,#FA4C61 -2.64px 37.77px 0 -5.87px,#FA4C61 -1.32px 37.91px 0 -5.93px;box-shadow:#FA4C61 0 26px 0 6px,#FA4C61 .91px 26.05px 0 5.93px,#FA4C61 1.82px 26.07px 0 5.87px,#FA4C61 2.74px 26.06px 0 5.8px,#FA4C61 3.66px 26.01px 0 5.73px,#FA4C61 4.57px 25.93px 0 5.67px,#FA4C61 5.49px 25.82px 0 5.6px,#FA4C61 6.4px 25.68px 0 5.53px,#FA4C61 7.31px 25.51px 0 5.47px,#FA4C61 8.22px 25.3px 0 5.4px,#FA4C61 9.12px 25.06px 0 5.33px,#FA4C61 10.01px 24.79px 0 5.27px,#FA4C61 10.9px 24.48px 0 5.2px,#FA4C61 11.78px 24.15px 0 5.13px,#FA4C61 12.64px 23.78px 0 5.07px,#FA4C61 13.5px 23.38px 0 5px,#FA4C61 14.34px 22.95px 0 4.93px,#FA4C61 15.17px 22.49px 0 4.87px,#FA4C61 15.99px 22.01px 0 4.8px,#FA4C61 16.79px 21.49px 0 4.73px,#FA4C61 17.57px 20.94px 0 4.67px,#FA4C61 18.33px 20.36px 0 4.6px,#FA4C61 19.08px 19.76px 0 4.53px,#FA4C61 19.81px 19.13px 0 4.47px,#FA4C61 20.51px 18.47px 0 4.4px,#FA4C61 21.19px 17.78px 0 4.33px,#FA4C61 21.85px 17.07px 0 4.27px,#FA4C61 22.49px 16.34px 0 4.2px,#FA4C61 23.1px 15.58px 0 4.13px,#FA4C61 23.69px 14.8px 0 4.07px,#FA4C61 24.25px 14px 0 4px,#FA4C61 24.78px 13.18px 0 3.93px,#FA4C61 25.29px 12.33px 0 3.87px,#FA4C61 25.76px 11.47px 0 3.8px,#FA4C61 26.21px 10.59px 0 3.73px,#FA4C61 26.62px 9.69px 0 3.67px,#FA4C61 27.01px 8.78px 0 3.6px,#FA4C61 27.36px 7.85px 0 3.53px,#FA4C61 27.69px 6.9px 0 3.47px,#FA4C61 27.98px 5.95px 0 3.4px,#FA4C61 28.23px 4.98px 0 3.33px,#FA4C61 28.45px 4px 0 3.27px,#FA4C61 28.64px 3.01px 0 3.2px,#FA4C61 28.8px 2.01px 0 3.13px,#FA4C61 28.92px 1.01px 0 3.07px,#FA4C61 29px 0 0 3px,#FA4C61 29.05px -1.01px 0 2.93px,#FA4C61 29.06px -2.03px 0 2.87px,#FA4C61 29.04px -3.05px 0 2.8px,#FA4C61 28.98px -4.07px 0 2.73px,#FA4C61 28.89px -5.09px 0 2.67px,#FA4C61 28.76px -6.11px 0 2.6px,#FA4C61 28.59px -7.13px 0 2.53px,#FA4C61 28.39px -8.14px 0 2.47px,#FA4C61 28.15px -9.15px 0 2.4px,#FA4C61 27.88px -10.15px 0 2.33px,#FA4C61 27.57px -11.14px 0 2.27px,#FA4C61 27.22px -12.12px 0 2.2px,#FA4C61 26.84px -13.09px 0 2.13px,#FA4C61 26.43px -14.05px 0 2.07px,#FA4C61 25.98px -15px 0 2px,#FA4C61 25.5px -15.93px 0 1.93px,#FA4C61 24.98px -16.85px 0 1.87px,#FA4C61 24.43px -17.75px 0 1.8px,#FA4C61 23.85px -18.63px 0 1.73px,#FA4C61 23.24px -19.5px 0 1.67px,#FA4C61 22.59px -20.34px 0 1.6px,#FA4C61 21.92px -21.16px 0 1.53px,#FA4C61 21.21px -21.96px 0 1.47px,#FA4C61 20.48px -22.74px 0 1.4px,#FA4C61 19.71px -23.49px 0 1.33px,#FA4C61 18.92px -24.22px 0 1.27px,#FA4C61 18.1px -24.92px 0 1.2px,#FA4C61 17.26px -25.59px 0 1.13px,#FA4C61 16.39px -26.23px 0 1.07px,#FA4C61 15.5px -26.85px 0 1px,#FA4C61 14.58px -27.43px 0 .93px,#FA4C61 13.65px -27.98px 0 .87px,#FA4C61 12.69px -28.5px 0 .8px,#FA4C61 11.71px -28.99px 0 .73px,#FA4C61 10.72px -29.44px 0 .67px,#FA4C61 9.7px -29.86px 0 .6px,#FA4C61 8.67px -30.25px 0 .53px,#FA4C61 7.63px -30.6px 0 .47px,#FA4C61 6.57px -30.91px 0 .4px,#FA4C61 5.5px -31.19px 0 .33px,#FA4C61 4.42px -31.42px 0 .27px,#FA4C61 3.32px -31.63px 0 .2px,#FA4C61 2.22px -31.79px 0 .13px,#FA4C61 1.11px -31.91px 0 .07px,#FA4C61 0 -32px 0 0,#FA4C61 -1.12px -32.05px 0 -.07px,#FA4C61 -2.24px -32.06px 0 -.13px,#FA4C61 -3.37px -32.02px 0 -.2px,#FA4C61 -4.49px -31.95px 0 -.27px,#FA4C61 -5.61px -31.84px 0 -.33px,#FA4C61 -6.74px -31.69px 0 -.4px,#FA4C61 -7.85px -31.5px 0 -.47px,#FA4C61 -8.97px -31.27px 0 -.53px,#FA4C61 -10.07px -31px 0 -.6px,#FA4C61 -11.17px -30.7px 0 -.67px,#FA4C61 -12.26px -30.35px 0 -.73px,#FA4C61 -13.34px -29.96px 0 -.8px,#FA4C61 -14.41px -29.54px 0 -.87px,#FA4C61 -15.46px -29.08px 0 -.93px,#FA4C61 -16.5px -28.58px 0 -1px,#FA4C61 -17.52px -28.04px 0 -1.07px,#FA4C61 -18.53px -27.47px 0 -1.13px,#FA4C61 -19.51px -26.86px 0 -1.2px,#FA4C61 -20.48px -26.21px 0 -1.27px,#FA4C61 -21.43px -25.53px 0 -1.33px,#FA4C61 -22.35px -24.82px 0 -1.4px,#FA4C61 -23.25px -24.07px 0 -1.47px,#FA4C61 -24.12px -23.29px 0 -1.53px,#FA4C61 -24.97px -22.48px 0 -1.6px,#FA4C61 -25.79px -21.64px 0 -1.67px,#FA4C61 -26.58px -20.77px 0 -1.73px,#FA4C61 -27.34px -19.87px 0 -1.8px,#FA4C61 -28.08px -18.94px 0 -1.87px,#FA4C61 -28.78px -17.98px 0 -1.93px,#FA4C61 -29.44px -17px 0 -2px,#FA4C61 -30.08px -15.99px 0 -2.07px,#FA4C61 -30.68px -14.96px 0 -2.13px,#FA4C61 -31.24px -13.91px 0 -2.2px,#FA4C61 -31.77px -12.84px 0 -2.27px,#FA4C61 -32.26px -11.74px 0 -2.33px,#FA4C61 -32.72px -10.63px 0 -2.4px,#FA4C61 -33.13px -9.5px 0 -2.47px,#FA4C61 -33.51px -8.35px 0 -2.53px,#FA4C61 -33.84px -7.19px 0 -2.6px,#FA4C61 -34.14px -6.02px 0 -2.67px,#FA4C61 -34.4px -4.83px 0 -2.73px,#FA4C61 -34.61px -3.64px 0 -2.8px,#FA4C61 -34.78px -2.43px 0 -2.87px,#FA4C61 -34.91px -1.22px 0 -2.93px,#FA4C61 -35px 0 0 -3px,#FA4C61 -35.05px 1.22px 0 -3.07px,#FA4C61 -35.05px 2.45px 0 -3.13px,#FA4C61 -35.01px 3.68px 0 -3.2px,#FA4C61 -34.92px 4.91px 0 -3.27px,#FA4C61 -34.8px 6.14px 0 -3.33px,#FA4C61 -34.63px 7.36px 0 -3.4px,#FA4C61 -34.41px 8.58px 0 -3.47px,#FA4C61 -34.16px 9.79px 0 -3.53px,#FA4C61 -33.86px 11px 0 -3.6px,#FA4C61 -33.52px 12.2px 0 -3.67px,#FA4C61 -33.13px 13.39px 0 -3.73px,#FA4C61 -32.7px 14.56px 0 -3.8px,#FA4C61 -32.24px 15.72px 0 -3.87px,#FA4C61 -31.73px 16.87px 0 -3.93px,#FA4C61 -31.18px 18px 0 -4px,#FA4C61 -30.59px 19.11px 0 -4.07px,#FA4C61 -29.96px 20.21px 0 -4.13px,#FA4C61 -29.29px 21.28px 0 -4.2px,#FA4C61 -28.58px 22.33px 0 -4.27px,#FA4C61 -27.83px 23.35px 0 -4.33px,#FA4C61 -27.05px 24.36px 0 -4.4px,#FA4C61 -26.23px 25.33px 0 -4.47px,#FA4C61 -25.38px 26.28px 0 -4.53px,#FA4C61 -24.49px 27.2px 0 -4.6px,#FA4C61 -23.57px 28.09px 0 -4.67px,#FA4C61 -22.62px 28.95px 0 -4.73px,#FA4C61 -21.63px 29.77px 0 -4.8px,#FA4C61 -20.62px 30.56px 0 -4.87px,#FA4C61 -19.57px 31.32px 0 -4.93px,#FA4C61 -18.5px 32.04px 0 -5px,#FA4C61 -17.4px 32.73px 0 -5.07px,#FA4C61 -16.28px 33.38px 0 -5.13px,#FA4C61 -15.13px 33.98px 0 -5.2px,#FA4C61 -13.96px 34.55px 0 -5.27px,#FA4C61 -12.77px 35.08px 0 -5.33px,#FA4C61 -11.56px 35.57px 0 -5.4px,#FA4C61 -10.33px 36.02px 0 -5.47px,#FA4C61 -9.08px 36.42px 0 -5.53px,#FA4C61 -7.82px 36.78px 0 -5.6px,#FA4C61 -6.54px 37.09px 0 -5.67px,#FA4C61 -5.25px 37.37px 0 -5.73px,#FA4C61 -3.95px 37.59px 0 -5.8px,#FA4C61 -2.64px 37.77px 0 -5.87px,#FA4C61 -1.32px 37.91px 0 -5.93px;-moz-animation:whirly-loader 1.25s infinite linear;-webkit-animation:whirly-loader 1.25s infinite linear;animation:whirly-loader 1.25s infinite linear;-moz-transform-origin:50% 50%;-ms-transform-origin:50% 50%;-webkit-transform-origin:50% 50%;transform-origin:50% 50%}.checker{width:19px;height:19px}.collapse.am-collapse{animation-duration:.3s;animation-timing-function:ease;animation-fill-mode:backwards;overflow:hidden}.message-info{float:right;color:#d3d3d3;margin-right:5px}[ui-view].ng-enter{-webkit-animation:fadeInUpm .5s;animation:fadeInUpm .5s}.steps,.steps-indicator{padding-bottom:20px!important}.ui-sortable,.ui-sortable-handle{cursor:move}.page-header.navbar .search-form .input-group .form-control:hover,.pointer-cursor,button.close{cursor:pointer}.mbottom20,.step .btn:not(.ui-select-toggle,.remove-condition){margin-bottom:10px}button.close{padding:0;background:0 0;border:0;-webkit-appearance:none}.close{font-size:21px;font-weight:700;line-height:1;color:#000;opacity:.2;filter:alpha(opacity=20)}.alert{padding:15px!important;margin-bottom:20px!important;border:1px solid transparent!important;border-radius:4px!important}.alert h4{margin-top:0!important;color:inherit!important}.alert .alert-link{font-weight:700!important}.alert>p,.alert>ul{margin-bottom:0!important}.alert>p+p{margin-top:5px!important}.alert-dismissable,.alert-dismissible{padding-right:35px!important}.alert-dismissable .close,.alert-dismissible .close{position:relative!important;top:-2px!important;right:-21px!important;color:inherit!important}.alert-success{background-color:#dff0d8!important;border-color:#d6e9c6!important;color:#3c763d!important}.alert-success hr{border-top-color:#c9e2b3!important}.alert-success .alert-link{color:#2b542c!important}.alert-info{background-color:#d9edf7!important;border-color:#bce8f1!important;color:#31708f!important}.alert-info hr{border-top-color:#a6e1ec!important}.alert-info .alert-link{color:#245269!important}.alert-warning{background-color:#fcf8e3!important;border-color:#faebcc!important;color:#8a6d3b!important}.alert-warning hr{border-top-color:#f7e1b5!important}.alert-warning .alert-link{color:#66512c!important}.alert-danger{background-color:#f2dede!important;border-color:#ebccd1!important;color:#a94442!important}.alert-danger hr{border-top-color:#e4b9c0!important}.alert-danger .alert-link{color:#843534!important}.alert .close{text-indent:inherit!important;background-image:none!important;width:auto!important}.page-404 .number{position:relative;top:35px;display:inline-block;letter-spacing:-10px;margin-top:0;margin-bottom:10px;line-height:128px;font-size:128px;font-weight:300;color:#7bbbd6;text-align:right}.page-404 .details{margin-left:40px;display:inline-block;padding-top:0;text-align:left}.sounds-title-icon{font-size:17px}.ui-select-multiple input.ui-select-search{width:100%!important}.modal.fade,.over-topbar{z-index:9996!important}.list-group-item-custom{border:none}.select-group-father{font-weight:700!important}.select-group-son{font-style:italic!important}@media (max-height:908px){.modal-body-scroll{max-height:325px;overflow-y:scroll}}.widget .dashboard-stat{margin-bottom:0!important}.widget .panel-body{padding:0}.left-margin{margin-left:20px}.page-header.navbar{background-color:#2b3643}.page-header.navbar .top-menu .navbar-nav>li.dropdown .dropdown-toggle>i{color:#79869a}.page-header.navbar .top-menu .navbar-nav>li.dropdown .dropdown-toggle .badge.badge-default{background-color:#1caf9a;color:#fff}.page-header.navbar .top-menu .navbar-nav>li.dropdown .dropdown-toggle:hover,.page-header.navbar .top-menu .navbar-nav>li.dropdown.open .dropdown-toggle{background-color:#3f4f62}.page-header.navbar .top-menu .navbar-nav>li.dropdown .dropdown-toggle:hover>i,.page-header.navbar .top-menu .navbar-nav>li.dropdown.open .dropdown-toggle>i{color:#a4aebb}.page-header.navbar .top-menu .navbar-nav>li.dropdown-extended .dropdown-menu{border-color:#e7eaf0}.page-header.navbar .top-menu .navbar-nav>li.dropdown-extended .dropdown-menu:after{border-bottom-color:#eaedf2}.page-header.navbar .top-menu .navbar-nav>li.dropdown-extended .dropdown-menu>li.external{background:#eaedf2}.page-header.navbar .top-menu .navbar-nav>li.dropdown-extended .dropdown-menu>li.external>h3{color:#62878f}.page-header.navbar .top-menu .navbar-nav>li.dropdown-extended .dropdown-menu>li.external>a{color:#5b9bd1}.page-header.navbar .top-menu .navbar-nav>li.dropdown-extended .dropdown-menu>li.external>a:hover{color:#3175af;text-decoration:underline}.page-header.navbar .top-menu .navbar-nav>li.dropdown-extended .dropdown-menu .dropdown-menu-list>li>a{border-bottom:1px solid #EFF2F6!important;color:#888}.page-header.navbar .top-menu .navbar-nav>li.dropdown-extended .dropdown-menu .dropdown-menu-list>li>a:hover{background:#f8f9fa}.page-header.navbar .top-menu .navbar-nav>li.dropdown-notification .dropdown-menu .dropdown-menu-list>li>a .time{background:#f1f1f1}.page-header.navbar .top-menu .navbar-nav>li.dropdown-notification .dropdown-menu .dropdown-menu-list>li>a:hover .time{background:#e4e4e4}.page-header.navbar .top-menu .navbar-nav>li.dropdown-inbox>.dropdown-toggle>.circle{background-color:#1caf9a;color:#fff}.page-header.navbar .top-menu .navbar-nav>li.dropdown-inbox>.dropdown-toggle>.corner{border-color:transparent transparent transparent #1caf9a}.page-header.navbar .top-menu .navbar-nav>li.dropdown-inbox .dropdown-menu .dropdown-menu-list .subject .from{color:#5b9bd1}.page-header.navbar .top-menu .navbar-nav>li.dropdown-language>.dropdown-toggle>.langname,.page-header.navbar .top-menu .navbar-nav>li.dropdown-user>.dropdown-toggle>.username,.page-header.navbar .top-menu .navbar-nav>li.dropdown-user>.dropdown-toggle>i{color:#c6cfda}.page-header.navbar .top-menu .navbar-nav>li.dropdown-tasks .dropdown-menu .dropdown-menu-list .progress{background-color:#dfe2e9}.page-header.navbar .top-menu .navbar-nav>li.dropdown-user>.dropdown-menu{width:195px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-dark .dropdown-menu{background:#3f4f62;border:0}.page-header.navbar .top-menu .navbar-nav>li.dropdown-dark .dropdown-menu:after{border-bottom-color:#3f4f62}.page-header.navbar .top-menu .navbar-nav>li.dropdown-dark .dropdown-menu>li.external{background:#2f3b49}.page-header.navbar .top-menu .navbar-nav>li.dropdown-dark .dropdown-menu>li.external>h3{color:#adbaca}.page-header.navbar .top-menu .navbar-nav>li.dropdown-dark .dropdown-menu>li.external>a:hover{color:#87b6dd}.page-header.navbar .top-menu .navbar-nav>li.dropdown-dark .dropdown-menu .dropdown-menu-list>li a,.page-header.navbar .top-menu .navbar-nav>li.dropdown-dark .dropdown-menu.dropdown-menu-default>li a{color:#bcc7d4;border-bottom:1px solid #4b5e75!important}.page-header.navbar .top-menu .navbar-nav>li.dropdown-dark .dropdown-menu .dropdown-menu-list>li a>i,.page-header.navbar .top-menu .navbar-nav>li.dropdown-dark .dropdown-menu.dropdown-menu-default>li a>i{color:#9dadc0}.page-header.navbar .top-menu .navbar-nav>li.dropdown-dark .dropdown-menu .dropdown-menu-list>li a:hover,.page-header.navbar .top-menu .navbar-nav>li.dropdown-dark .dropdown-menu.dropdown-menu-default>li a:hover{background:#47596e}.page-header.navbar .top-menu .navbar-nav>li.dropdown-dark .dropdown-menu.dropdown-menu-default>li a{border-bottom:0!important}.page-header.navbar .top-menu .navbar-nav>li.dropdown-dark .dropdown-menu.dropdown-menu-default>li.divider{background:#4b5e75}.page-header.navbar .top-menu .navbar-nav>li.dropdown-notification.dropdown-dark .dropdown-menu .dropdown-menu-list>li>a .time{background:#354353}.page-header.navbar .top-menu .navbar-nav>li.dropdown-notification.dropdown-dark .dropdown-menu .dropdown-menu-list>li>a:hover .time{background:#2b3643}.page-header.navbar .search-form{background:#232c37}.page-header.navbar .search-form.open,.page-header.navbar .search-form:hover{background:#3f4f62}.page-header.navbar .search-form .input-group .form-control{color:#959fad}.page-header.navbar .search-form .input-group .form-control::-moz-placeholder{color:#929cab;opacity:1}.page-header.navbar .search-form .input-group .form-control:-ms-input-placeholder{color:#929cab}.page-header.navbar .search-form .input-group .form-control::-webkit-input-placeholder{color:#929cab}.page-header.navbar .search-form .input-group .input-group-btn .btn.submit>i{color:#959fad}.page-header.navbar .menu-toggler{background-image:url(../../assets/images/sidebar_toggler_icon_darkblue.png)}.page-header.navbar .hor-menu .navbar-nav>li.mega-menu-dropdown>.dropdown-menu{box-shadow:5px 5px rgba(63,79,98,.2)}.page-header.navbar .hor-menu .navbar-nav>li.mega-menu-dropdown>.dropdown-menu .mega-menu-content .mega-menu-submenu li>h3,.page-header.navbar .hor-menu .navbar-nav>li>a{color:#c6cfda}.page-header.navbar .hor-menu .navbar-nav>li>a>i{color:#788ea8}.page-header.navbar .hor-menu .navbar-nav>li.open>a,.page-header.navbar .hor-menu .navbar-nav>li>a:hover{color:#d5dce4;background:#3f4f62!important}.page-header.navbar .hor-menu .navbar-nav>li.open>a>i,.page-header.navbar .hor-menu .navbar-nav>li>a:hover>i{color:#889bb2}.page-header.navbar .hor-menu .navbar-nav>li.active>a,.page-header.navbar .hor-menu .navbar-nav>li.current>a{color:#fff;background:#1caf9a!important}.page-header.navbar .hor-menu .navbar-nav>li.active>a>i,.page-header.navbar .hor-menu .navbar-nav>li.current>a>i{color:#788ea8}.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu{box-shadow:5px 5px rgba(63,79,98,.2);background:#3f4f62}.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu li>a,.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu li>a>i{color:#c6cfda}.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu li:hover>a{color:#f1f3f6;background:#47596e}.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu li:hover>a>i{color:#f1f3f6}.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu li.active>a,.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu li.active>a:hover,.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu li.current>a,.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu li.current>a:hover{color:#f1f3f6;background:#47596e}.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu li.active>a:hover>i,.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu li.active>a>i,.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu li.current>a:hover>i,.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu li.current>a>i{color:#f1f3f6}.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu li.divider{background-color:#495c72}.page-header.navbar .hor-menu .navbar-nav>li .dropdown-submenu>a:after{color:#c6cfda}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li.mega-menu-dropdown>.dropdown-menu{box-shadow:5px 5px rgba(102,102,102,.1)}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li.mega-menu-dropdown>.dropdown-menu .mega-menu-content .mega-menu-submenu li>h3{color:#666}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li>a{color:#c6cfda}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li>a>i{color:#788ea8}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li>a:hover{color:#d5dce4;background:#3f4f62}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li>a:hover>i{color:#889bb2}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li.open>a{color:#333!important;background:#fff!important}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li.open>a>i{color:#333!important}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li.active>a,.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li.active>a:hover,.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li.current>a,.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li.current>a:hover{color:#fff;background:#1caf9a}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li.active>a:hover>i,.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li.active>a>i,.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li.current>a:hover>i,.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li.current>a>i{color:#788ea8}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li .dropdown-menu{box-shadow:5px 5px rgba(102,102,102,.1);background:#fff;border:1px solid #efeff5}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li .dropdown-menu li>a{color:#000}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li .dropdown-menu li>a>i{color:#888}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li .dropdown-menu li:hover>a{color:#000;background:#f2f2f7}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li .dropdown-menu li:hover>a>i{color:#666}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li .dropdown-menu li.active>a,.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li .dropdown-menu li.active>a:hover,.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li .dropdown-menu li.current>a,.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li .dropdown-menu li.current>a:hover{color:#000;background:#f2f2f7}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li .dropdown-menu li.active>a:hover>i,.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li .dropdown-menu li.active>a>i,.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li .dropdown-menu li.current>a:hover>i,.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li .dropdown-menu li.current>a>i{color:#666}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li .dropdown-menu li.divider{background-color:#f2f2f7}.page-header.navbar .hor-menu.hor-menu-light .navbar-nav>li>.dropdown-menu{border-top:0}.page-sidebar,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover{background-color:#364150}.page-sidebar .page-sidebar-menu>li>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li>a{color:#b4bcc8}.page-sidebar .page-sidebar-menu>li>a>i,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li>a>i{color:#606C7D}.page-sidebar .page-sidebar-menu>li>a>i[class*=icon-],.page-sidebar .page-sidebar-menu>li>a>i[class^=icon-],.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li>a>i[class*=icon-],.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li>a>i[class^=icon-]{color:#6b788b}.page-sidebar .page-sidebar-menu>li>a>.arrow.open:before,.page-sidebar .page-sidebar-menu>li>a>.arrow:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li>a>.arrow.open:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li>a>.arrow:before{color:#606C7D}.page-sidebar .page-sidebar-menu>li.heading>h3,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.heading>h3{color:#708096}.page-sidebar .page-sidebar-menu>li.open>a,.page-sidebar .page-sidebar-menu>li:hover>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.open>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li:hover>a{background:#2C3542;color:#b4bcc8}.page-sidebar .page-sidebar-menu>li.open>a>.arrow.open:before,.page-sidebar .page-sidebar-menu>li.open>a>.arrow:before,.page-sidebar .page-sidebar-menu>li.open>a>i,.page-sidebar .page-sidebar-menu>li:hover>a>.arrow.open:before,.page-sidebar .page-sidebar-menu>li:hover>a>.arrow:before,.page-sidebar .page-sidebar-menu>li:hover>a>i,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.open>a>.arrow.open:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.open>a>.arrow:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.open>a>i,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li:hover>a>.arrow.open:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li:hover>a>.arrow:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li:hover>a>i{color:#606C7D}.page-sidebar .page-sidebar-menu>li.active.open>a,.page-sidebar .page-sidebar-menu>li.active>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.active.open>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.active>a{background:#1caf9a;border-top-color:transparent;color:#fff}.page-sidebar .page-sidebar-menu>li.active.open>a:hover,.page-sidebar .page-sidebar-menu>li.active>a:hover,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.active.open>a:hover,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.active>a:hover{background:#1caf9a}.page-sidebar .page-sidebar-menu>li.active.open>a>.arrow.open:before,.page-sidebar .page-sidebar-menu>li.active.open>a>.arrow:before,.page-sidebar .page-sidebar-menu>li.active.open>a>i,.page-sidebar .page-sidebar-menu>li.active>a>.arrow.open:before,.page-sidebar .page-sidebar-menu>li.active>a>.arrow:before,.page-sidebar .page-sidebar-menu>li.active>a>i,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.active.open>a>.arrow.open:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.active.open>a>.arrow:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.active.open>a>i,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.active>a>.arrow.open:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.active>a>.arrow:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.active>a>i{color:#fff}.page-sidebar .page-sidebar-menu>li.active+li>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.active+li>a{border-top-color:transparent}.page-sidebar .page-sidebar-menu>li.active.open+li>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.active.open+li>a{border-top-color:#3d4957}.page-sidebar .page-sidebar-menu>li:last-child>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li:last-child>a{border-bottom:1px solid transparent!important}.page-sidebar .page-sidebar-menu li:hover>a>.arrow.open:before,.page-sidebar .page-sidebar-menu li:hover>a>.arrow:before,.page-sidebar .page-sidebar-menu li>a>.arrow.open:before,.page-sidebar .page-sidebar-menu li>a>.arrow:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li:hover>a>.arrow.open:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li:hover>a>.arrow:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li>a>.arrow.open:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li>a>.arrow:before{color:#606C7D}.page-sidebar .page-sidebar-menu li.active>a>.arrow.open:before,.page-sidebar .page-sidebar-menu li.active>a>.arrow:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li.active>a>.arrow.open:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li.active>a>.arrow:before{color:#fff}.page-sidebar-closed .page-sidebar .page-sidebar-menu:hover .sub-menu,.page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu:hover .sub-menu{background-color:#364150}.page-sidebar .page-sidebar-menu .sub-menu>li>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li>a{color:#b4bcc8}.page-sidebar .page-sidebar-menu .sub-menu>li>a>i,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li>a>i{color:#606C7D}.page-sidebar .page-sidebar-menu .sub-menu>li>a>i[class*=icon-],.page-sidebar .page-sidebar-menu .sub-menu>li>a>i[class^=icon-],.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li>a>i[class*=icon-],.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li>a>i[class^=icon-]{color:#6b788b}.page-sidebar .page-sidebar-menu .sub-menu>li>a>.arrow.open:before,.page-sidebar .page-sidebar-menu .sub-menu>li>a>.arrow:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li>a>.arrow.open:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li>a>.arrow:before{color:#606C7D}.page-sidebar .page-sidebar-menu .sub-menu>li.active>a,.page-sidebar .page-sidebar-menu .sub-menu>li.open>a,.page-sidebar .page-sidebar-menu .sub-menu>li:hover>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li.active>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li.open>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li:hover>a{background:#3e4b5c!important}.page-sidebar .page-sidebar-menu .sub-menu>li.active>a>i,.page-sidebar .page-sidebar-menu .sub-menu>li.open>a>i,.page-sidebar .page-sidebar-menu .sub-menu>li:hover>a>i,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li.active>a>i,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li.open>a>i,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li:hover>a>i{color:#959fae}.page-sidebar .page-sidebar-menu .sub-menu>li.active>a>.arrow.open:before,.page-sidebar .page-sidebar-menu .sub-menu>li.active>a>.arrow:before,.page-sidebar .page-sidebar-menu .sub-menu>li.open>a>.arrow.open:before,.page-sidebar .page-sidebar-menu .sub-menu>li.open>a>.arrow:before,.page-sidebar .page-sidebar-menu .sub-menu>li:hover>a>.arrow.open:before,.page-sidebar .page-sidebar-menu .sub-menu>li:hover>a>.arrow:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li.active>a>.arrow.open:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li.active>a>.arrow:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li.open>a>.arrow.open:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li.open>a>.arrow:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li:hover>a>.arrow.open:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu>li:hover>a>.arrow:before{color:#606C7D}.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li.open>a,.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li:hover>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li.open>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li:hover>a{background:#3a4656}.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li.active.open>a,.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li.active>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li.active.open>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li.active>a{background:#3e4b5c;border-left:4px solid #1caf9a;color:#f1f1f1}.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li.active.open>a:hover,.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li.active>a:hover,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li.active.open>a:hover,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li.active>a:hover{border-left:4px solid #1caf9a;background:#3a4656}.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li.active.open>a>.arrow.open:before,.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li.active.open>a>.arrow:before,.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li.active.open>a>i,.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li.active>a>.arrow.open:before,.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li.active>a>.arrow:before,.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li.active>a>i,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li.active.open>a>.arrow.open:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li.active.open>a>.arrow:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li.active.open>a>i,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li.active>a>.arrow.open:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li.active>a>.arrow:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li.active>a>i{color:#eee}.page-sidebar .sidebar-search .input-group .input-group-btn .btn>i,.page-sidebar-closed .page-sidebar .sidebar-search.open .remove>i,.page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.open .remove>i,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .input-group-btn .btn>i{color:#4e5c6f}.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu{background:#3a4656}.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu>li.active>a,.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu>li.open>a,.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu>li:hover>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu>li.active>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu>li.open>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu>li:hover>a{background:#3e4b5c!important}.page-sidebar .sidebar-toggler,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler{background:url(../assets/images/sidebar_inline_toggler_icon_darkblue.jpg)}.page-sidebar .sidebar-search .input-group,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group{border-bottom:1px solid #435060}.page-sidebar .sidebar-search .input-group .form-control,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control{background-color:#364150;color:#4e5c6f}.page-sidebar .sidebar-search .input-group .form-control::-moz-placeholder,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control::-moz-placeholder{color:#4e5c6f;opacity:1}.page-sidebar .sidebar-search .input-group .form-control:-ms-input-placeholder,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control:-ms-input-placeholder{color:#4e5c6f}.page-sidebar .sidebar-search .input-group .form-control::-webkit-input-placeholder,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control::-webkit-input-placeholder{color:#4e5c6f}.page-sidebar .sidebar-search.sidebar-search-bordered .input-group,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered .input-group{border:1px solid #435060}.page-sidebar-closed .page-sidebar .sidebar-search.open .input-group,.page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.open .input-group{background-color:#364150}.page-sidebar-closed .page-sidebar .sidebar-search.sidebar-search-solid .input-group,.page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid .input-group{background:0 0}.page-sidebar .sidebar-search.sidebar-search-solid .input-group,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid .input-group{border:1px solid #2c3541;background:#2c3541}.page-sidebar .sidebar-search.sidebar-search-solid .input-group .form-control,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid .input-group .form-control{background:#2c3541}.page-sidebar .sidebar-search.sidebar-search-solid.open .input-group,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid.open .input-group{border:1px solid #364150;background:#364150}.page-sidebar .sidebar-search.sidebar-search-solid.open .input-group .form-control,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid.open .input-group .form-control{background:#364150}.page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light>li.active.open>a,.page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light>li.active.open>a:hover,.page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light>li.active>a,.page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light>li.active>a:hover{border-left:0;border-right:4px solid #1caf9a}.page-quick-sidebar-wrapper,.page-quick-sidebar-wrapper .page-quick-sidebar{background:#435468}.page-quick-sidebar-toggler{background:#576d87}.page-quick-sidebar-toggler:hover{background:#51667e}.page-quick-sidebar-toggler>i,.page-quick-sidebar-wrapper{color:#d1d6de}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li>a{color:#c9ced7;background:#576d87}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li>a:hover{background:#4d6178}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li.open>a{color:#c9ced7;background:#576d87}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li.active>a{border:0;background:#435468}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li .dropdown-menu{border:0;background:#576d87;box-shadow:5px 5px rgba(142,160,182,.1)}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li .dropdown-menu:after,.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li .dropdown-menu:before{border-bottom:7px solid #576d87}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li .dropdown-menu>li>a{color:#d1d6de}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li .dropdown-menu>li>a>i{color:#ccd1d9}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li .dropdown-menu>li>a:hover{background:#5d7591;color:#d1d6de}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li .dropdown-menu>li>a:hover>i{color:#d4d9e0}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li .dropdown-menu>li.active>a{background:#59708a;color:#d1d6de}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li .dropdown-menu>li.divider{background-color:#5d7591}.page-quick-sidebar-wrapper .page-quick-sidebar .list-heading{color:#a5afbd}.page-quick-sidebar-wrapper .page-quick-sidebar .list-items>li{border-bottom-color:#495c72}.page-quick-sidebar-wrapper .page-quick-sidebar .list-items>li:hover{background:#495c72}.page-quick-sidebar-wrapper .page-quick-sidebar-item .page-quick-sidebar-nav .page-quick-sidebar-back-to-list{color:#c9ced7}.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-users .quicksidebar-search .input-group{border-bottom:1px solid #435060}.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-users .quicksidebar-search .input-group .form-control{background-color:#435468;color:#c9ced7}.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading-sub{color:#9ca7b7}.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading-small{color:#919cae}.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .datetime,.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .name{color:#bdc4ce}.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .message{color:#c9ced7;background:#576d87}.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .message .arrow{border-right-color:#576d87}.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .message .arrow{border-left-color:#576d87}.page-quick-sidebar-wrapper .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li a{color:#b7bfca}.page-quick-sidebar-wrapper .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li a .desc{text-decoration:underline}.page-quick-sidebar-wrapper .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li .desc{color:#b1b9c6}.page-quick-sidebar-wrapper .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li .date{color:#919cae}.page-footer .page-footer-inner{color:#98a6ba}.page-footer-fixed .page-footer{background-color:#28303b}@media (min-width:992px){.page-sidebar-menu.page-sidebar-menu-hover-submenu>li:hover>.sub-menu{box-shadow:5px 5px rgba(44,53,66,.2)}.page-sidebar-menu.page-sidebar-menu-hover-submenu>li:hover>.sub-menu.sidebar-search-wrapper,.page-sidebar-menu.page-sidebar-menu-hover-submenu>li:hover>.sub-menu.sidebar-toggler-wrapper{box-shadow:none}.page-sidebar-menu.page-sidebar-menu-closed>li:hover{box-shadow:5px 5px rgba(44,53,66,.2)}.page-sidebar-menu.page-sidebar-menu-closed>li:hover.sidebar-search-wrapper,.page-sidebar-menu.page-sidebar-menu-closed>li:hover.sidebar-toggler-wrapper{box-shadow:none}.page-sidebar-menu.page-sidebar-menu-closed>li:hover>.sub-menu{box-shadow:5px 5px rgba(44,53,66,.2)}.page-sidebar-menu.page-sidebar-menu-closed>li:hover>.sub-menu.sidebar-search-wrapper,.page-sidebar-menu.page-sidebar-menu-closed>li:hover>.sub-menu.sidebar-toggler-wrapper{box-shadow:none}.page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-closed>li.heading{padding:0;margin-top:15px;margin-bottom:15px;border-top:1px solid #3d4957!important}.page-sidebar-fixed:not(.page-footer-fixed) .page-content{border-bottom:0}.page-sidebar-fixed:not(.page-footer-fixed) .page-footer{background-color:#fff}.page-sidebar-fixed:not(.page-footer-fixed) .page-footer .page-footer-inner{color:#333}.page-boxed{background-color:#303a47!important}.page-boxed .page-container{background-color:#364150;border-left:1px solid #3d4957;border-bottom:1px solid #3d4957}.page-boxed.page-sidebar-reversed .page-container{border-left:0;border-right:1px solid #3d4957}.page-boxed.page-sidebar-fixed .page-container{border-left:0;border-bottom:0}.page-boxed.page-sidebar-reversed.page-sidebar-fixed .page-container{border-left:0;border-right:0;border-bottom:0}.page-boxed.page-sidebar-fixed .page-sidebar{border-left:1px solid #3d4957}.page-boxed.page-sidebar-reversed.page-sidebar-fixed .page-sidebar{border-right:1px solid #3d4957;border-left:0}.page-boxed.page-sidebar-fixed.page-footer-fixed .page-footer{background-color:#303a47!important}.page-boxed.page-sidebar-fixed.page-footer-fixed .page-footer .page-footer-inner{color:#98a6ba}.page-sidebar-menu-hover-submenu li:hover a>.arrow{border-right:8px solid #323c4b}.page-sidebar-reversed .page-sidebar-menu-hover-submenu li:hover a>.arrow{border-left:8px solid #323c4b}.page-sidebar-menu-hover-submenu li:hover>.sub-menu{background:#323c4b!important}}.pace .pace-progress-inner,.page-header.navbar,.page-header.navbar .top-menu .navbar-nav>li.dropdown-tasks .dropdown-menu .dropdown-menu-list>li .progress .progress-bar{box-shadow:none}@media (max-width:991px){.page-sidebar{background-color:#28303b}.page-sidebar .page-sidebar-menu>li>a{border-top:1px solid #364150}.page-sidebar .page-sidebar-menu>li.open>a,.page-sidebar .page-sidebar-menu>li:hover>a{background:#2e3744}.page-sidebar .page-sidebar-menu>li:last-child>a{border-bottom:0!important}.page-sidebar .page-sidebar-menu .sidebar-search input,.page-sidebar .page-sidebar-menu>li .sub-menu{background-color:#28303b!important}.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li.active.open>a,.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li.active.open>a:hover,.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li.active>a,.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li.active>a:hover,.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li.open>a,.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li:hover>a{background:#2e3744}.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu{background:#28303b!important}.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu>li.active>a,.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu>li.open>a,.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu>li:hover>a{background:#2e3744!important}}@media (max-width:480px){.page-header.navbar .top-menu{background-color:#364150}.page-header-fixed-mobile .page-header.navbar .top-menu{background-color:#2b3643}.page-header.navbar .top-menu .navbar-nav>li.dropdown-user .dropdown-toggle{background-color:#415265}.page-header-fixed-mobile .page-header.navbar .top-menu .navbar-nav>li.dropdown-user .dropdown-toggle{background:0 0}.page-header.navbar .top-menu .navbar-nav>li.dropdown-user .dropdown-toggle:hover{background-color:#3f4f62}}body{background-color:#364150}.block-spinner-bar>div,.page-spinner-bar>div{background:#20c5ad}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTQzyDMXhdD8sAj6OAJTFsBI.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTQ7aC6SjiAOpAWOKfJDfVRY.woff2) format('woff2');unicode-range:U+0460-052F,U+20B4,U+2DE0-2DFF,U+A640-A69F}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTRdwxCXfZpKo5kWAx_74bHs.woff2) format('woff2');unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTSGUML8f7tzeB6gGvgki0bE.woff2) format('woff2');unicode-range:U+02BC,U+0900-097F,U+1CD0-1CF6,U+1CF8-1CF9,U+200B-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FB}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTZ6vnaPZw6nYDxM4SVEMFKg.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTfy1_HTwRwgtl1cPga3Fy3Y.woff2) format('woff2');unicode-range:U+0370-03FF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTfgrLsWo7Jk1KvZser0olKY.woff2) format('woff2');unicode-range:U+0102-0103,U+1EA0-1EF1,U+20AB}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTYjoYw3YTyktCCer_ilOlhE.woff2) format('woff2');unicode-range:U+0100-024F,U+1E00-1EFF,U+20A0-20AB,U+20AD-20CF,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;src:local('Open Sans Light'),local('OpenSans-Light'),url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTRampu5_7CjHW5spxoeN3Vs.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215,U+E0FF,U+EFFD,U+F000}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans'),local('OpenSans'),url(http://fonts.gstatic.com/s/opensans/v13/TCmDhmS1RRL7aqhqZW19hwLUuEpTyoUstqEm5AMlJo4.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans'),local('OpenSans'),url(http://fonts.gstatic.com/s/opensans/v13/K88pR3goAWT7BTt32Z01m4X0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');unicode-range:U+0460-052F,U+20B4,U+2DE0-2DFF,U+A640-A69F}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans'),local('OpenSans'),url(http://fonts.gstatic.com/s/opensans/v13/RjgO7rYTmqiVp7vzi-Q5UYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans'),local('OpenSans'),url(http://fonts.gstatic.com/s/opensans/v13/ttwNtsRpgsxVmgGGmiUOEoX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');unicode-range:U+02BC,U+0900-097F,U+1CD0-1CF6,U+1CF8-1CF9,U+200B-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FB}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans'),local('OpenSans'),url(http://fonts.gstatic.com/s/opensans/v13/LWCjsQkB6EMdfHrEVqA1KYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans'),local('OpenSans'),url(http://fonts.gstatic.com/s/opensans/v13/xozscpT2726on7jbcb_pAoX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');unicode-range:U+0370-03FF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans'),local('OpenSans'),url(http://fonts.gstatic.com/s/opensans/v13/59ZRklaO5bWGqF5A9baEEYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');unicode-range:U+0102-0103,U+1EA0-1EF1,U+20AB}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans'),local('OpenSans'),url(http://fonts.gstatic.com/s/opensans/v13/u-WUoqrET9fUeobQW7jkRYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');unicode-range:U+0100-024F,U+1E00-1EFF,U+20A0-20AB,U+20AD-20CF,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans'),local('OpenSans'),url(http://fonts.gstatic.com/s/opensans/v13/cJZKeOuBrn4kERxqtaUH3ZBw1xU1rKptJj_0jans920.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215,U+E0FF,U+EFFD,U+F000}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans Semibold'),local('OpenSans-Semibold'),url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNSgzyDMXhdD8sAj6OAJTFsBI.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans Semibold'),local('OpenSans-Semibold'),url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNSg7aC6SjiAOpAWOKfJDfVRY.woff2) format('woff2');unicode-range:U+0460-052F,U+20B4,U+2DE0-2DFF,U+A640-A69F}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans Semibold'),local('OpenSans-Semibold'),url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNShdwxCXfZpKo5kWAx_74bHs.woff2) format('woff2');unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans Semibold'),local('OpenSans-Semibold'),url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNSiGUML8f7tzeB6gGvgki0bE.woff2) format('woff2');unicode-range:U+02BC,U+0900-097F,U+1CD0-1CF6,U+1CF8-1CF9,U+200B-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FB}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans Semibold'),local('OpenSans-Semibold'),url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNSp6vnaPZw6nYDxM4SVEMFKg.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans Semibold'),local('OpenSans-Semibold'),url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNSvy1_HTwRwgtl1cPga3Fy3Y.woff2) format('woff2');unicode-range:U+0370-03FF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans Semibold'),local('OpenSans-Semibold'),url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNSvgrLsWo7Jk1KvZser0olKY.woff2) format('woff2');unicode-range:U+0102-0103,U+1EA0-1EF1,U+20AB}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans Semibold'),local('OpenSans-Semibold'),url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNSojoYw3YTyktCCer_ilOlhE.woff2) format('woff2');unicode-range:U+0100-024F,U+1E00-1EFF,U+20A0-20AB,U+20AD-20CF,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans Semibold'),local('OpenSans-Semibold'),url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNShampu5_7CjHW5spxoeN3Vs.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215,U+E0FF,U+EFFD,U+F000}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans Bold'),local('OpenSans-Bold'),url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzAzyDMXhdD8sAj6OAJTFsBI.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans Bold'),local('OpenSans-Bold'),url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzA7aC6SjiAOpAWOKfJDfVRY.woff2) format('woff2');unicode-range:U+0460-052F,U+20B4,U+2DE0-2DFF,U+A640-A69F}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans Bold'),local('OpenSans-Bold'),url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzBdwxCXfZpKo5kWAx_74bHs.woff2) format('woff2');unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans Bold'),local('OpenSans-Bold'),url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzCGUML8f7tzeB6gGvgki0bE.woff2) format('woff2');unicode-range:U+02BC,U+0900-097F,U+1CD0-1CF6,U+1CF8-1CF9,U+200B-200D,U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FB}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans Bold'),local('OpenSans-Bold'),url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzJ6vnaPZw6nYDxM4SVEMFKg.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans Bold'),local('OpenSans-Bold'),url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzPy1_HTwRwgtl1cPga3Fy3Y.woff2) format('woff2');unicode-range:U+0370-03FF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans Bold'),local('OpenSans-Bold'),url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzPgrLsWo7Jk1KvZser0olKY.woff2) format('woff2');unicode-range:U+0102-0103,U+1EA0-1EF1,U+20AB}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans Bold'),local('OpenSans-Bold'),url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzIjoYw3YTyktCCer_ilOlhE.woff2) format('woff2');unicode-range:U+0100-024F,U+1E00-1EFF,U+20A0-20AB,U+20AD-20CF,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans Bold'),local('OpenSans-Bold'),url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzBampu5_7CjHW5spxoeN3Vs.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215,U+E0FF,U+EFFD,U+F000}@media print{body{background-color:#fff!important}.hidden-print,.page-bar,.page-footer,.page-quick-sidebar-wrapper,.page-sidebar-wrapper,.theme-panel{display:none}.no-page-break{page-break-after:avoid}.page-container{margin:0!important;padding:0!important}.page-content{min-height:300px!important;padding:0 20px 20px!important;margin:0!important}}.page-header.navbar{width:100%;margin:0;border:0;padding:0;height:46px;min-height:46px;filter:none;background-image:none}.page-header.navbar.navbar-fixed-top,.page-header.navbar.navbar-static-top{z-index:9995}.page-header.navbar .page-logo{float:left;display:block;width:235px;height:46px;padding-left:20px;padding-right:20px}.page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo{padding:0}.page-header.navbar .page-logo>.logo-image,.page-header.navbar .page-logo>a{display:inline-block;float:left}.page-header.navbar .page-logo .logo-default{margin:16px 0 0}.page-header.navbar .page-logo .logo-mini{display:none;margin-left:5px}.page-header.navbar .page-logo .text-logo{padding-left:20px;padding-top:12px}.page-header.navbar .search-form{display:inline-block;width:46px;position:relative;float:left;transition:all .6s}.page-header.navbar .search-form .input-group .form-control{height:46px;border:0;background:0 0!important;font-size:13px;padding-left:0;margin-left:12px;text-indent:-150000px}.page-header.navbar .search-form .input-group .input-group-btn{height:46px}.page-header.navbar .search-form .input-group .input-group-btn .btn.submit{margin-left:-24px;padding:0;width:46px;background:0 0;margin-top:4px;display:block}.page-header.navbar .search-form .input-group .input-group-btn .btn.submit>i{font-size:15px}.page-header.navbar .search-form.open{transition:all .6s;width:300px!important}.page-header.navbar .search-form.open .input-group .form-control{text-indent:0}.page-header.navbar .search-form.open .input-group .form-control:hover{cursor:text}.page-header.navbar .search-form.open .input-group .input-group-btn .btn.submit{margin-left:0}.page-header.navbar .menu-toggler{display:block;cursor:pointer;opacity:.7;filter:alpha(opacity=70);width:24px;height:24px;background-repeat:no-repeat;background-position:center center}.page-header.navbar .menu-toggler:hover,.page-header.navbar .top-menu .navbar-nav>li.dropdown-extended .dropdown-menu .dropdown-menu-list>li>a:hover{opacity:1;filter:alpha(opacity=100)}.page-header.navbar .menu-toggler.sidebar-toggler{float:right;margin:11px 0 0}.page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .menu-toggler.sidebar-toggler{margin-right:10.5px}.page-header.navbar .menu-toggler.responsive-toggler{display:none;float:right;margin:11px 6px 0}.page-header.navbar .top-menu{margin:0;padding:0;float:right}.page-header.navbar .top-menu .navbar-nav{padding:0;margin-right:20px;display:block}.page-header.navbar .top-menu .navbar-nav>li.dropdown{margin:0;padding:0 4px;height:46px;display:inline-block}.page-header.navbar .top-menu .navbar-nav>li.dropdown:last-child{padding-right:0}.page-header.navbar .top-menu .navbar-nav>li.dropdown>.dropdown-toggle{margin:0;padding:17px 10px 9px}.page-header.navbar .top-menu .navbar-nav>li.dropdown>.dropdown-toggle:last-child{padding-right:0}.page-header.navbar .top-menu .navbar-nav>li.dropdown>.dropdown-toggle>i{font-size:17px}.page-header.navbar .top-menu .navbar-nav>li.dropdown>.dropdown-toggle>i.glyphicon{font-size:16px}.page-header.navbar .top-menu .navbar-nav>li.dropdown>.dropdown-toggle>.badge{font-family:"Open Sans",sans-serif;position:absolute;top:10px;right:20px;font-weight:300px;padding:3px 6px}.page-header.navbar .top-menu .navbar-nav>li.dropdown>.dropdown-toggle:focus{background:0 0}.page-header.navbar .top-menu .navbar-nav>li.dropdown .dropdown-menu{margin-top:3px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.page-header.navbar .top-menu .navbar-nav>li.dropdown .dropdown-menu:before{position:absolute;top:-7px;right:9px;display:inline-block!important;border-right:7px solid transparent;border-bottom:7px solid #eee;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,.2);content:''}.page-header.navbar .top-menu .navbar-nav>li.dropdown .dropdown-menu:after{position:absolute;top:-6px;right:10px;display:inline-block!important;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.page-header.navbar .top-menu .navbar-nav>li.dropdown .dropdown-menu>li>a{color:#555}.page-header.navbar .top-menu .navbar-nav>li.dropdown-extended .dropdown-menu{min-width:160px;max-width:275px;width:275px;z-index:9995}.page-header.navbar .top-menu .navbar-nav>li.dropdown-extended .dropdown-menu>li.external{display:block;overflow:hidden;padding:15px;letter-spacing:.5px;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;-ms-border-radius:4px 4px 0 0;-o-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.page-header.navbar .top-menu .navbar-nav>li.dropdown-extended .dropdown-menu>li.external>h3{margin:0;padding:0;float:left;font-size:13px;display:inline-block}.page-header.navbar .top-menu .navbar-nav>li.dropdown-extended .dropdown-menu>li.external>a{display:inline-block;padding:0;background:0 0;clear:inherit;font-size:13px;font-weight:300;position:absolute;right:10px;border:0;margin-top:-1px}.page-bar:after,.page-container:after,.page-footer:after,.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object:after,.page-sidebar .page-sidebar-menu>li.sidebar-search-wrapper:after,.page-sidebar .page-sidebar-menu>li.sidebar-toggler-wrapper:after,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.sidebar-search-wrapper:after,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.sidebar-toggler-wrapper:after{clear:both}.page-header.navbar .top-menu .navbar-nav>li.dropdown-extended .dropdown-menu .dropdown-menu-list{padding-right:0!important;padding-left:0;list-style:none}.page-header.navbar .top-menu .navbar-nav>li.dropdown-extended .dropdown-menu .dropdown-menu-list>li>a{display:block;clear:both;font-weight:300;line-height:20px;white-space:normal;font-size:13px;padding:16px 15px 18px;text-shadow:none}.page-header.navbar .top-menu .navbar-nav>li.dropdown-extended .dropdown-menu .dropdown-menu-list>li:first-child a{border-top:none}.page-header.navbar .top-menu .navbar-nav>li.dropdown-notification .dropdown-menu .dropdown-menu-list>li a .details{overflow:hidden}.page-header.navbar .top-menu .navbar-nav>li.dropdown-notification .dropdown-menu .dropdown-menu-list>li a .details .label-icon{margin-right:10px;-webkit-border-radius:50%;-moz-border-radius:50%;-ms-border-radius:50%;-o-border-radius:50%;border-radius:50%}.page-header.navbar .top-menu .navbar-nav>li.dropdown-notification .dropdown-menu .dropdown-menu-list>li a .details .label-icon i{margin-right:2px;margin-left:1px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-notification .dropdown-menu .dropdown-menu-list>li a .details .label-icon .badge{right:15px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-notification .dropdown-menu .dropdown-menu-list>li a .time{float:right;max-width:75px;font-size:11px;font-weight:400;opacity:.7;filter:alpha(opacity=70);text-align:right;padding:1px 5px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-inbox>.dropdown-menu .dropdown-menu-list>li .photo{float:left;margin:0 6px 6px 0}.page-header.navbar .top-menu .navbar-nav>li.dropdown-inbox>.dropdown-menu .dropdown-menu-list>li .photo img{height:40px;width:40px;-webkit-border-radius:50%!important;-moz-border-radius:50%!important;-ms-border-radius:50%!important;-o-border-radius:50%!important;border-radius:50%!important}.page-header.navbar .top-menu .navbar-nav>li.dropdown-inbox>.dropdown-menu .dropdown-menu-list>li .subject{display:block;margin-left:46px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-inbox>.dropdown-menu .dropdown-menu-list>li .subject .from{font-size:13px;font-weight:600}.page-header.navbar .top-menu .navbar-nav>li.dropdown-inbox>.dropdown-menu .dropdown-menu-list>li .subject .time{font-size:12px;font-weight:400;opacity:.5;filter:alpha(opacity=50);float:right}.page-header.navbar .top-menu .navbar-nav>li.dropdown-inbox>.dropdown-menu .dropdown-menu-list>li .message{display:block!important;font-size:12px;line-height:1.3;margin-left:46px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-tasks .dropdown-menu .dropdown-menu-list>li .task{margin-bottom:5px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-tasks .dropdown-menu .dropdown-menu-list>li .task .desc{font-size:13px;font-weight:300}.page-header.navbar .top-menu .navbar-nav>li.dropdown-tasks .dropdown-menu .dropdown-menu-list>li .task .percent{float:right;font-weight:600;display:inline-block}.page-header.navbar .top-menu .navbar-nav>li.dropdown-tasks .dropdown-menu .dropdown-menu-list>li .progress{display:block;height:8px;margin:8px 0 2px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-user .dropdown-toggle{padding:14px 6px 12px 8px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-user .dropdown-toggle>.username{display:inline-block;font-size:13px;font-weight:300}.page-header.navbar .top-menu .navbar-nav>li.dropdown-user .dropdown-toggle>img{float:left;margin-top:-5px;margin-right:5px;height:29px;display:inline-block}.page-header.navbar .top-menu .navbar-nav>li.dropdown-user .dropdown-toggle>i{display:inline-block;margin:0;font-size:13px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-user .dropdown-menu{width:175px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-user .dropdown-menu>li>a{font-size:14px;font-weight:300}.page-header.navbar .top-menu .navbar-nav>li.dropdown-user .dropdown-menu>li>a i{width:15px;display:inline-block;margin-right:9px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-user .dropdown-menu>li>a .badge{margin-right:10px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-language{padding-left:0;padding-right:0;margin:0}.page-header.navbar .top-menu .navbar-nav>li.dropdown-language>.dropdown-toggle{padding:14px 3px 12px 7px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-language>.dropdown-toggle>img{margin-bottom:2px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-language>.dropdown-toggle>i{font-size:14px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-language>.dropdown-menu>li>a{font-size:13px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-language>.dropdown-menu>li>a>img{margin-bottom:2px;margin-right:5px}.page-header.navbar .top-menu .navbar-nav li.dropdown-dark .dropdown-menu:before{border-left:none;border-right:none}.page-header.navbar .top-menu .navbar-nav li.dropdown-dark .dropdown-menu .dropdown-menu-list>li.external a{background:0 0!important;border:none!important}@media (min-width:768px){.page-header.navbar .search-form.search-form-expanded{width:200px}.page-header.navbar .search-form.search-form-expanded .input-group .form-control{text-indent:0}.page-header.navbar .search-form.search-form-expanded .input-group .form-control:hover{cursor:text}.page-header.navbar .search-form.search-form-expanded .input-group .input-group-btn .btn.submit{margin-left:0}}.page-header.navbar .container{position:relative}.page-header.navbar .hor-menu .navbar-nav,.page-header.navbar .hor-menu .navbar-nav>li.mega-menu-dropdown{position:static}.page-header.navbar .hor-menu{margin:0;float:left}.page-header.navbar .hor-menu .navbar-nav.navbar-right .dropdown-menu{left:auto;right:0}.page-header.navbar .hor-menu .navbar-nav>li.mega-menu-dropdown>.dropdown-menu{left:auto;width:auto}.page-header.navbar .hor-menu .navbar-nav>li.mega-menu-dropdown>.dropdown-menu .mega-menu-content{font-family:"Open Sans",sans-serif;padding:15px;margin:0}.page-header.navbar .hor-menu .navbar-nav>li.mega-menu-dropdown>.dropdown-menu .mega-menu-content.mega-menu-responsive-content{padding:10px 18px 10px 45px}.page-header.navbar .hor-menu .navbar-nav>li.mega-menu-dropdown>.dropdown-menu .mega-menu-content .mega-menu-submenu{padding:0;margin:0}.page-header.navbar .hor-menu .navbar-nav>li.mega-menu-dropdown>.dropdown-menu .mega-menu-content .mega-menu-submenu:last-child{border-right:0}.page-header.navbar .hor-menu .navbar-nav>li.mega-menu-dropdown>.dropdown-menu .mega-menu-content .mega-menu-submenu li{padding:1px!important;margin:0!important;list-style:none}.page-header.navbar .hor-menu .navbar-nav>li.mega-menu-dropdown>.dropdown-menu .mega-menu-content .mega-menu-submenu li>h3{margin-top:5px;padding-left:6px;font-size:15px;font-weight:400}.page-header.navbar .hor-menu .navbar-nav>li.mega-menu-dropdown>.dropdown-menu .mega-menu-content .mega-menu-submenu li>a{white-space:normal;font-family:"Open Sans",sans-serif;padding:7px;margin:0;font-size:14px;font-weight:300}.page-header.navbar .hor-menu .navbar-nav>li.mega-menu-dropdown>.dropdown-menu .mega-menu-content .mega-menu-submenu li>a.iconify{padding:7px 7px 7px 30px}.page-header.navbar .hor-menu .navbar-nav>li.mega-menu-dropdown>.dropdown-menu .mega-menu-content .mega-menu-submenu li>a.iconify>i{position:absolute;top:auto!important;margin-left:-24px;font-size:15px;margin-top:3px!important}.page-header.navbar .hor-menu .navbar-nav>li.mega-menu-dropdown>.dropdown-menu .mega-menu-content .mega-menu-submenu li>a .badge,.page-header.navbar .hor-menu .navbar-nav>li.mega-menu-dropdown>.dropdown-menu .mega-menu-content .mega-menu-submenu li>a .label{margin-left:5px}.page-header.navbar .hor-menu .navbar-nav>li.mega-menu-dropdown.mega-menu-full .dropdown-menu{left:20px;right:20px}.page-header.navbar .hor-menu .navbar-nav>li.menu-dropdown .dropdown-menu:after,.page-header.navbar .hor-menu .navbar-nav>li.menu-dropdown .dropdown-menu:before{display:none!important}.page-header.navbar .hor-menu .navbar-nav>li>a{font-size:14px;font-weight:400;padding:13px}.page-header.navbar .hor-menu .navbar-nav>li>a:focus{background:0 0!important}.page-header.navbar .hor-menu .navbar-nav>li.active .selected,.page-header.navbar .hor-menu .navbar-nav>li.current .selected{left:50%;bottom:0;position:absolute;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid transparent;display:inline-block;margin:0 0 -6px -7px;width:0;height:0}.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu{margin-top:0;border:none}.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu li>a{font-family:"Open Sans",sans-serif;font-size:14px;font-weight:300;padding:9px 10px;white-space:normal}.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu li>a .badge,.page-header.navbar .hor-menu .navbar-nav>li .dropdown-menu li>a .label{font-weight:300}.page-header.navbar .hor-menu .navbar-nav>li.classic-menu-dropdown .dropdown-menu{min-width:195px;max-width:235px}.page-header.navbar .hor-menu .navbar-nav>li .dropdown-submenu>.dropdown-menu{top:0}.page-header.navbar .hor-menu .navbar-nav>li .dropdown-submenu>a:after{top:9px;right:10px}@media (min-width:992px) and (max-width:1200px){.page-boxed .page-header.navbar .top-menu .navbar-nav>li.dropdown-language .dropdown-toggle .langname,.page-boxed .page-header.navbar .top-menu .navbar-nav>li.dropdown-user .dropdown-toggle .username.username-hide-on-mobile{display:none}}@media (min-width:992px){.page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo{padding:0;width:45px}.page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo .logo-default{display:none}.page-boxed .page-header.navbar .page-logo{width:236px}.page-boxed .page-header.navbar .top-menu .navbar-nav{margin-right:0}.page-sidebar-closed.page-sidebar-closed-hide-logo.page-boxed .page-header.navbar .page-logo{width:46px}.page-boxed.page-sidebar-fixed .page-header.navbar .page-logo{width:235px}}@media (max-width:991px){.page-header.navbar{padding:0 20px;position:relative;clear:both}.page-header.navbar .page-logo{width:auto;padding:0;margin-right:10px;margin-left:0!important;padding-left:0!important}.page-header.navbar .page-logo img{margin-left:4px!important}.page-header.navbar .menu-toggler.sidebar-toggler{display:none!important}.page-header.navbar .menu-toggler.responsive-toggler{display:inline-block}.page-header.navbar .top-menu .navbar-nav{display:inline-block;margin:0 10px 0 0}.page-header.navbar .top-menu .navbar-nav>li{float:left}.page-header.navbar .top-menu .navbar-nav .nav li.dropdown i{display:inline-block;position:relative;top:1px;right:0}.page-header.navbar .top-menu .navbar-nav .open .dropdown-menu{position:absolute}.page-header-fixed.page-header-fixed-mobile .navbar-fixed-top{position:fixed}.page-boxed .page-header.navbar>.container{max-width:none!important;margin:0!important;padding:0!important}}@media (min-width:768px) and (max-width:991px){.page-boxed .page-header.navbar{margin:auto!important;padding:0}.page-boxed .page-header.navbar>.container{margin:auto!important}}@media (max-width:767px){.page-header.navbar{padding:0 10px}.page-header.navbar .page-logo{width:auto}.page-header.navbar .search-form.open{z-index:3;left:10px;right:10px;position:absolute;width:auto!important}.page-header.navbar .top-menu .navbar-nav>li.dropdown-extended>.dropdown-menu{max-width:255px;width:255px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-notification .dropdown-menu{margin-right:-190px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-notification .dropdown-menu:after,.page-header.navbar .top-menu .navbar-nav>li.dropdown-notification .dropdown-menu:before{margin-right:190px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-inbox .dropdown-menu{margin-right:-150px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-inbox .dropdown-menu:after,.page-header.navbar .top-menu .navbar-nav>li.dropdown-inbox .dropdown-menu:before{margin-right:150px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-tasks .dropdown-menu{margin-right:-110px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-tasks .dropdown-menu:after,.page-header.navbar .top-menu .navbar-nav>li.dropdown-tasks .dropdown-menu:before{margin-right:110px}}@media (max-width:580px){.page-header.navbar .top-menu .navbar-nav>li.dropdown-language .dropdown-toggle .langname,.page-header.navbar .top-menu .navbar-nav>li.dropdown-user .dropdown-toggle .username.username-hide-on-mobile{display:none}}@media (max-width:480px){.page-header-fixed.page-header-fixed-mobile .page-header.navbar{height:92px}.page-header.navbar .top-menu{display:block;clear:both}.page-header.navbar .top-menu .navbar-nav{margin-right:0}.page-header.navbar .top-menu .navbar-nav>li.dropdown .dropdown-toggle{padding:17px 6px 9px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-language .dropdown-toggle{padding:14px 4px 12px 2px}.page-header.navbar .top-menu .navbar-nav>li.dropdown-user .dropdown-toggle{padding:14px 0 12px 2px}}.pace .pace-progress{z-index:10000;top:44px;height:2px}.pace .pace-activity{top:48px;right:22px;border-radius:10px!important}.page-container{margin:0;padding:0;position:relative}.page-container:after,.page-container:before{content:" ";display:table}.page-header-fixed .page-container{margin-top:46px}.page-footer-fixed.page-footer-fixed-mobile .page-container{margin-bottom:20px!important}@media (min-width:992px){.page-footer-fixed .page-container{margin-bottom:20px!important}}@media (max-width:991px){.page-container{margin:0!important;padding:0!important}.page-header-fixed.page-header-fixed-mobile .page-container{margin-top:46px!important}}@media (max-width:480px){.page-header-fixed .pace .pace-progress{top:92px}.page-header-fixed .pace .pace-activity{top:188px;right:15px}.page-header-fixed.page-header-fixed-mobile .page-container{margin-top:92px!important}}.ie8 .page-sidebar{width:235px;float:left;position:relative;margin-right:-100%}.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover.navbar-collapse,.page-sidebar.navbar-collapse{padding:0;box-shadow:none}.page-sidebar .page-sidebar-menu,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu{list-style:none;margin:0;padding:0}.page-sidebar .page-sidebar-menu>li,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li{display:block;margin:0;padding:0;border:0}.page-sidebar .page-sidebar-menu>li.sidebar-search-wrapper,.page-sidebar .page-sidebar-menu>li.sidebar-toggler-wrapper,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.sidebar-search-wrapper,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.sidebar-toggler-wrapper{border:0!important}.page-sidebar .page-sidebar-menu>li.sidebar-search-wrapper:after,.page-sidebar .page-sidebar-menu>li.sidebar-search-wrapper:before,.page-sidebar .page-sidebar-menu>li.sidebar-toggler-wrapper:after,.page-sidebar .page-sidebar-menu>li.sidebar-toggler-wrapper:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.sidebar-search-wrapper:after,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.sidebar-search-wrapper:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.sidebar-toggler-wrapper:after,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.sidebar-toggler-wrapper:before{content:" ";display:table}.page-sidebar .page-sidebar-menu>li.start>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.start>a{border-top-color:transparent!important}.page-sidebar .page-sidebar-menu>li.last>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.last>a{border-bottom-color:transparent!important}.page-sidebar .page-sidebar-menu>li>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li>a{display:block;position:relative;margin:0;border:0;padding:10px 15px;text-decoration:none;font-size:14px;font-weight:300}.page-sidebar .page-sidebar-menu>li>a>i,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li>a>i{font-size:16px;margin-right:5px;text-shadow:none}.page-sidebar .page-sidebar-menu>li>a>i.glyphicon,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li>a>i.glyphicon{top:3px;margin-left:1px;margin-right:4px}.page-sidebar .page-sidebar-menu>li>a>[class^=icon-],.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li>a>[class^=icon-]{top:2px;margin-left:1px;margin-right:4px}.page-sidebar-fixed .page-sidebar .page-sidebar-menu>li>a,.page-sidebar-fixed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li>a{transition:all .2s ease}.page-sidebar-reversed.page-sidebar-fixed .page-sidebar .page-sidebar-menu>li>a,.page-sidebar-reversed.page-sidebar-fixed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li>a{transition:none}.page-sidebar .page-sidebar-menu>li.heading,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.heading{padding:15px}.page-sidebar .page-sidebar-menu>li.heading>h3,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.heading>h3{margin:0;padding:0;font-size:14px;font-weight:300}.page-sidebar .page-sidebar-menu>li.heading+li>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.heading+li>a{border-top:0}.page-sidebar .page-sidebar-menu>li.open>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.open>a{font-size:14px}.page-sidebar .page-sidebar-menu>li.active>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.active>a{border:none;text-shadow:none;font-size:14px}.page-sidebar .page-sidebar-menu>li.active>a>.selected,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.active>a>.selected{display:block;float:right;position:absolute;right:0;top:8px;background:0 0;width:0;height:0;border-top:12px solid transparent;border-bottom:12px solid transparent;border-right:12px solid #fff}.page-sidebar-reversed .page-sidebar .page-sidebar-menu>li.active>a>.selected,.page-sidebar-reversed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.active>a>.selected{right:auto;left:0;border-right:0;border-left:8px solid #fff}.page-container-bg-solid .page-sidebar .page-sidebar-menu>li.active>a>.selected,.page-container-bg-solid .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.active>a>.selected{border-color:transparent #F1F3FA transparent transparent}.page-container-bg-solid.page-sidebar-reversed .page-sidebar .page-sidebar-menu>li.active>a>.selected,.page-container-bg-solid.page-sidebar-reversed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu>li.active>a>.selected{border-color:transparent transparent transparent #F1F3FA}.page-sidebar .page-sidebar-menu li>a>.arrow:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li>a>.arrow:before{float:right;width:10px;text-align:center;margin-top:-1px;margin-right:5px;margin-left:5px;display:inline;font-size:16px;font-family:FontAwesome;height:auto;content:"\f104";font-weight:300;text-shadow:none}.page-sidebar .page-sidebar-menu li>a>.arrow.open:before,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li>a>.arrow.open:before{content:"\f107"}.page-sidebar .page-sidebar-menu li>a>.badge,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li>a>.badge{float:right;margin-top:1px;margin-right:0}.page-sidebar .page-sidebar-menu .sub-menu,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu{list-style:none;display:none;padding:0;margin:8px 0}.page-sidebar .page-sidebar-menu .sub-menu li,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li{background:0 0;margin:0;padding:0;margin-top:1px!important}.page-sidebar .page-sidebar-menu .sub-menu li>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li>a{display:block;margin:0;padding:6px 15px 6px 43px;text-decoration:none;font-size:14px;font-weight:300;background:0 0}.page-sidebar .page-sidebar-menu .sub-menu li>a>i,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li>a>i{font-size:14px}.page-sidebar .page-sidebar-menu .sub-menu li>.sub-menu,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li>.sub-menu{margin:0}.page-sidebar .page-sidebar-menu .sub-menu li>.sub-menu>li>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li>.sub-menu>li>a{padding-left:60px}.page-sidebar .page-sidebar-menu .sub-menu li>.sub-menu>li>.sub-menu,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li>.sub-menu>li>.sub-menu{margin:0}.page-sidebar .page-sidebar-menu .sub-menu li>.sub-menu>li>.sub-menu>li>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li>.sub-menu>li>.sub-menu>li>a{padding-left:80px}.page-sidebar .page-sidebar-menu li.active>.sub-menu,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li.active>.sub-menu{display:block}.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li>a{border:0;margin:0;padding-left:11px;border-left:4px solid transparent}.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu{margin:0;padding:1px 0}.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu li>a,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu li>a{padding-top:8px;padding-bottom:8px}.page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu li:first-child,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li .sub-menu li:first-child{margin-top:0!important}.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-light>li>a,.page-sidebar-reversed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light>li>a{padding-left:15px;padding-right:11px;border-left:0;border-right:4px solid transparent}.page-sidebar .sidebar-toggler,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler{display:block;cursor:pointer;opacity:.7;filter:alpha(opacity=70);width:30px;height:27px;margin-top:15px;margin-right:19px;float:right;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.page-sidebar .sidebar-toggler:hover,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler:hover{filter:alpha(opacity=100);opacity:1}.page-sidebar .sidebar-search,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search{padding:0;margin:22px 18px}.page-sidebar .sidebar-search .remove,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .remove{display:none}.page-sidebar .sidebar-search .remove>i,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .remove>i{font-size:16px}.page-sidebar .sidebar-search .input-group,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.page-sidebar .sidebar-search .input-group .form-control,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control{border:0;font-size:14px;padding:0;height:auto;line-height:auto;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.page-sidebar .sidebar-search .input-group .input-group-btn .btn,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .input-group-btn .btn{padding:2px 0 0;background-color:transparent;background-repeat:no-repeat;background-position:100% 3px}.page-sidebar .sidebar-search .input-group .input-group-btn .btn>i,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .input-group-btn .btn>i{font-size:15px}.page-sidebar .sidebar-search.sidebar-search-bordered,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered{margin:25px 18px}.page-sidebar .sidebar-search.sidebar-search-bordered .input-group .form-control,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered .input-group .form-control{font-size:13px;padding:6px 8px}.page-sidebar .sidebar-search.sidebar-search-bordered .input-group .input-group-btn .btn,.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered .input-group .input-group-btn .btn{margin-right:6px}@media (min-width:992px){.page-full-width .page-sidebar,.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li.open>.sub-menu,.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li>.sub-menu{display:none!important}.page-sidebar{width:235px;float:left;position:relative;margin-right:-100%}.page-sidebar.navbar-collapse{max-height:none!important}.page-sidebar-reversed .page-sidebar{float:right;margin-right:0;margin-left:-100%}.page-sidebar-reversed.page-sidebar-fixed .page-sidebar{margin-left:-235px}.page-sidebar-reversed.page-sidebar-fixed .page-sidebar-wrapper{position:relative;float:right}.page-sidebar-fixed .page-sidebar{position:fixed!important;margin-left:0;top:46px}.page-sidebar-fixed .page-sidebar-menu>li.last{margin-bottom:15px!important}.page-sidebar-closed .page-sidebar,.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed{width:45px!important}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li:hover{width:256px!important;position:relative!important;z-index:10000;display:block!important}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li:hover>a{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;-ms-border-radius:0 4px 0 0;-o-border-radius:0 4px 0 0;border-radius:0 4px 0 0}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li:hover>a>i{margin-right:10px}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li:hover>a>.title{display:inline!important;padding-left:15px}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li:hover>a>.badge{display:block!important}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li:hover>a>.selected{display:none}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li:hover.heading{width:45px!important;box-shadow:none}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li:hover>.sub-menu{width:210px;position:absolute;z-index:2000;left:46px;margin-top:0;top:100%;display:block!important;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;-ms-border-radius:0 0 4px 4px;-o-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li:hover>.sub-menu>li>a{padding-left:15px!important}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li:hover>.sub-menu>li>.sub-menu>li>a{padding-left:30px!important}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li:hover>.sub-menu>li>.sub-menu>li>.sub-menu>li>a{padding-left:45px!important}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li.heading>h3{display:none}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li.sidebar-toggler-wrapper .sidebar-toggler{margin-right:8px}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li.sidebar-search-wrapper:hover,.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li.sidebar-toggler-wrapper:hover{width:45px!important}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li>a{padding-left:11px}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li>a .selected{right:-3px!important}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li>a>.arrow,.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li>a>.badge,.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li>a>.title{display:none!important}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-toggler{margin-left:3px;margin-right:3px}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search .input-group{border-color:transparent;margin-left:-4px}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search .input-group .form-control{display:none}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search .input-group .input-group-btn .btn{display:block}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.sidebar-search-bordered .input-group{padding:5px 0 3px}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open{height:39px;margin-top:14px;margin-bottom:14px}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group{width:210px;position:relative;z-index:1;margin-left:24px;padding:0}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group .form-control{background:0 0;border:0;display:block;padding:8px}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group .input-group-btn .btn{display:block;margin-right:8px;margin-top:1px}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .remove{background-repeat:no-repeat;width:11px;height:11px;margin:9px -5px 9px -7px;display:block;float:left}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open.sidebar-search-bordered{height:36px;margin-top:23px;margin-bottom:23px}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open.sidebar-search-bordered .input-group{padding:0}.page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-closed>li>a{padding-right:11px;padding-left:7px}.page-sidebar-closed.page-sidebar-reversed .page-sidebar{margin-left:-45px;width:45px}.page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li>.sub-menu{left:auto;right:46px}.page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li:hover{margin-left:-211px}.page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li:hover>a{-webkit-border-radius:4px 0 0;-moz-border-radius:4px 0 0;-ms-border-radius:4px 0 0 0;-o-border-radius:4px 0 0;border-radius:4px 0 0}.page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li:hover>a>.title{padding-left:0;padding-right:15px}.page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li:hover>a>i{margin-right:0;margin-left:2px}.page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li.sidebar-search-wrapper:hover,.page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed>li.sidebar-toggler-wrapper:hover{margin-left:0}.page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group{margin-left:-227px}.page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group .input-group-btn .btn{margin-right:10px!important}.page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .remove{margin:9px 4px 12px -16px!important;float:right!important}.page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-closed>li>a{padding-right:7px;padding-left:11px}.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover{width:235px!important;display:absolute;z-index:10000}.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu{width:235px!important}.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .selected{display:none!important}.page-sidebar-closed.page-sidebar-fixed.page-sidebar-reversed .page-sidebar:hover{width:235px!important;display:absolute;z-index:10000;margin-left:-235px!important}.page-sidebar-closed.page-sidebar-fixed.page-sidebar-reversed .page-sidebar:hover .page-sidebar-menu{width:235px!important}.page-sidebar-closed.page-sidebar-hide .page-sidebar{display:none!important}.page-sidebar-menu.page-sidebar-menu-hover-submenu li .sub-menu{display:none;width:210px;z-index:2000;position:absolute;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.page-sidebar-menu.page-sidebar-menu-hover-submenu li .sub-menu>li>a{margin:3px}.page-sidebar-menu.page-sidebar-menu-hover-submenu li.active .sub-menu,.page-sidebar-menu.page-sidebar-menu-hover-submenu li.open .sub-menu{display:none!important}.page-sidebar-menu.page-sidebar-menu-hover-submenu li a>.arrow{display:none}.page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover>a>.arrow{display:block;float:right;position:absolute;right:0;margin-top:-20px;background:0 0;width:0;height:0;border-style:solid;border-top:12px double transparent;border-bottom:12px double transparent;border-left:0}.page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover>a>.arrow:after,.page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover>a>.arrow:before{display:none}.page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover>a>.arrow{right:auto;left:0;border-right:0}.page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover>.sub-menu{display:inline-block!important}.page-sidebar-menu.page-sidebar-menu-hover-submenu>li:hover>a>.arrow{z-index:1;right:0;margin-top:-23px}.page-sidebar-menu.page-sidebar-menu-hover-submenu>li:hover>a>.selected{display:none}.page-sidebar-menu.page-sidebar-menu-hover-submenu>li:hover>.sub-menu{margin-left:235px;margin-top:-40px}.page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-hover-submenu>li:hover>.sub-menu{margin-left:-210px!important}.page-sidebar-closed .page-sidebar-menu.page-sidebar-menu-hover-submenu>li:hover>.sub-menu{margin-left:0}.page-sidebar-menu.page-sidebar-menu-hover-submenu>li:hover>.sub-menu>li>a{padding-left:15px}.page-sidebar-menu.page-sidebar-menu-hover-submenu>li:hover>.sub-menu>li .sub-menu{margin-left:210px;margin-top:-38px!important}.page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-hover-submenu>li:hover>.sub-menu>li .sub-menu{margin-left:-210px!important}.page-sidebar-menu.page-sidebar-menu-hover-submenu>li:hover>.sub-menu>li .sub-menu>li>a{padding-left:10px;padding-right:10px}.page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-hover-submenu li:hover>.sub-menu,.page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-hover-submenu li:hover>.sub-menu>li>.sub-menu{margin-top:-41px}}@media (max-width:991px){.page-sidebar,.page-sidebar.navbar-collapse.in{border-top:0!important;margin:20px}.page-sidebar .sidebar-toggler{display:none}.page-sidebar .selected,.page-sidebar.navbar-collapse.collapse{display:none!important}.page-sidebar.navbar-collapse{max-height:none}.page-sidebar.navbar-collapse.in{position:relative;overflow:hidden!important;overflow-y:auto!important;display:block!important}.page-sidebar.navbar-collapse.navbar-no-scroll{max-height:none!important}.page-sidebar .mega-menu-responsive-content{padding:10px 18px 10px 45px}.page-full-width .page-sidebar-menu{display:block}}@media (min-width:768px) and (max-width:991px){.page-sidebar .btn-navbar.collapsed .arrow{display:none}.page-sidebar .btn-navbar .arrow{position:absolute;right:25px;width:0;height:0;top:50px;border-bottom:15px solid #5f646b;border-left:15px solid transparent;border-right:15px solid transparent}}.page-header .top-menu .dropdown-quick-sidebar-toggler>.dropdown-toggle{padding:17px 10px 9px!important}.page-header .top-menu .dropdown-quick-sidebar-toggler>.dropdown-toggle i{top:0}.page-quick-sidebar-open .page-header .top-menu .dropdown-quick-sidebar-toggler>.dropdown-toggle i:before{content:"\e066"}.page-quick-sidebar-wrapper{transition:right .3s;z-index:9994;position:fixed;top:46px;bottom:0;right:-270px;width:270px;overflow:hidden}.page-quick-sidebar-wrapper.phonebar{top:0}.page-footer-fixed .page-quick-sidebar-wrapper{bottom:33px}.page-quick-sidebar-full-height .page-quick-sidebar-wrapper{top:0;bottom:0}.page-quick-sidebar-open .page-quick-sidebar-wrapper{transition:right .3s;right:0}.page-quick-sidebar-toggler{overflow:hidden;z-index:9994;display:none;width:28px;height:27px;position:fixed;top:19px;right:15px;text-align:center;padding-top:6px}.page-quick-sidebar-open .page-quick-sidebar-toggler{display:inline-block}.page-quick-sidebar-toggler>i{font-size:17px}@media (max-width:480px){.page-sidebar,.page-sidebar.in{margin:0 10px 10px!important}.page-header-fixed.page-header-fixed-mobile .page-sidebar,.page-header-fixed.page-header-fixed-mobile .page-sidebar.in{margin-top:10px!important}.page-quick-sidebar-wrapper{top:92px}.page-quick-sidebar-toggler{top:65px}}.page-content-wrapper,.page-footer,.page-header,.page-sidebar-wrapper{transition:margin .3s}.page-quick-sidebar-open.page-quick-sidebar-push-content .page-content-wrapper,.page-quick-sidebar-open.page-quick-sidebar-push-content .page-sidebar-wrapper{transition:margin-left .3s;margin-left:-270px}.page-quick-sidebar-open.page-quick-sidebar-push-content .page-footer{transition:margin-right .3s;margin-right:270px;margin-left:-270px}.page-sidebar-reversed.page-quick-sidebar-open.page-quick-sidebar-push-content .page-sidebar-wrapper{transition:margin-right .3s;margin-right:270px}.page-quick-sidebar-open.page-quick-sidebar-push-content.page-quick-sidebar-full-height .page-header{transition:margin-left .3s;margin-left:-270px}.page-quick-sidebar-open.page-quick-sidebar-push-content.page-footer-fixed:not(.page-quick-sidebar-full-height) .page-footer{margin-left:0;margin-right:0}.page-quick-sidebar-open.page-quick-sidebar-over-content-transparent .page-quick-sidebar-wrapper{opacity:.9;filter:alpha(opacity=90)}@media (max-width:991px){.page-quick-sidebar-open.page-quick-sidebar-push-content .page-sidebar-wrapper{display:none}}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified{margin:0;padding:0}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li{display:table-cell!important;width:1%!important}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li>a{padding:15px;border:0;height:46px;font-size:13px;text-transform:uppercase;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li>a>.badge{position:absolute;top:12px;right:3px}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li>a:hover{border:0}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li .dropdown-menu{margin-top:8px;margin-right:20px}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li .dropdown-menu:before{position:absolute;top:-7px;right:19px;display:inline-block!important;border-right:7px solid transparent;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,.2);content:''}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>li .dropdown-menu:after{position:absolute;top:-6px;right:20px;display:inline-block!important;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified>.tab-content{margin:0;padding:0}.page-quick-sidebar-wrapper .page-quick-sidebar .list-heading{font-size:16px;margin:10px}.page-quick-sidebar-wrapper .page-quick-sidebar .list-items{margin:0;padding:0;list-style:none}.page-quick-sidebar-wrapper .page-quick-sidebar .list-items>li{margin:0;padding:10px;background:0 0;border-bottom-width:1px;border-bottom-style:solid}.page-quick-sidebar-wrapper .page-quick-sidebar .list-items>li:last-child{border-bottom:0}.page-quick-sidebar-wrapper .page-quick-sidebar .list-items.borderless li{border:0}.page-quick-sidebar-wrapper .page-quick-sidebar .inner-content{margin:10px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-list{position:absolute!important;width:270px!important;transition:margin .3s}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item{position:absolute!important;width:270px!important;transition:margin .3s;margin-left:270px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item .page-quick-sidebar-nav{padding:0 10px 5px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item .page-quick-sidebar-nav .page-quick-sidebar-back-to-list{vertical-align:middle;display:inline-block;font-size:14px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item .page-quick-sidebar-nav .page-quick-sidebar-back-to-list>i{font-size:17px;line-height:17px;vertical-align:top;margin-right:3px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-list{transition:margin .3s;margin-left:-270px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-list .slimScrollBar,.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-list .slimScrollRail{display:none!important}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-item{transition:margin .3s;margin-left:0}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users{padding:10px 0;position:relative}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media{padding:12px 10px 11px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object{border-radius:50%!important;width:38.57px;opacity:.8;filter:alpha(opacity=80);float:left;margin-right:10px}.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-users .quicksidebar-search{padding:0;margin:10px 22px}.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-users .quicksidebar-search .input-group .form-control{border:0;font-size:14px;padding:0;height:auto}.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-users .quicksidebar-search .input-group .input-group-btn .btn{padding:2px 0 0;background-color:transparent;background-repeat:no-repeat;background-position:100% 3px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object:after,.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object:before{content:" ";display:table}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media:hover{cursor:pointer}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media:hover .media-object{opacity:1;filter:alpha(opacity=100)}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading{margin:5px 0 0;font-size:14px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading-sub{font-size:11px;text-transform:uppercase}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading-small{font-size:10px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-status{margin-top:10px;right:10px;position:absolute;display:inline-block}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages{padding:0 10px;position:relative}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post{transition:display .3s;padding:5px 0;margin:10px auto;font-size:12px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .body{display:block;word-wrap:break-word}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .avatar{width:38.57px;border-radius:50%!important}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .avatar{float:left;margin-right:10px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .avatar{float:right;margin-left:10px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .name{font-size:12px;font-weight:300}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .datetime{font-size:12px;font-weight:300;text-style:italic}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .message{display:block;padding:5px;position:relative}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .message{text-align:left;margin-left:55px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .message .arrow{display:block;position:absolute;top:9px;left:-6px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right-width:6px;border-right-style:solid}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .message{margin-right:55px;text-align:right}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .message .arrow{display:block;position:absolute;top:9px;right:-6px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-left-width:6px;border-left-style:solid}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .datetime,.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .name{text-align:right}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-form{padding:20px 10px 15px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-form .input-group .form-control{font-size:13px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list{padding:10px 0;position:relative}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li .label{margin-top:5px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li .desc{padding:0}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list{padding:10px 0;position:relative}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list .list-items li .bootstrap-switch{margin-top:-3px;float:right;border:0;min-width:59px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list .list-items li .form-control{width:75px!important;padding:4px!important;float:right;border:0;margin-top:-4px}.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list .list-items li select.form-control{padding:4px 0!important}.page-title{padding:0;font-size:28px;letter-spacing:-1px;display:block;color:#666;margin:0 0 15px;font-weight:300;font-family:"Open Sans",sans-serif}.page-title small{font-size:14px;letter-spacing:0;font-weight:300;color:#888}.page-container-bg-solid .page-title{color:#666;margin-bottom:20px;margin-top:20px}.page-container-bg-solid .page-title small{color:#666}.page-bar{padding:0;background-color:#f7f7f7;margin-bottom:25px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.page-bar:after,.page-bar:before{content:" ";display:table}.page-bar .page-breadcrumb{display:inline-block;float:left;padding:8px;margin:0;list-style:none}.page-bar .page-breadcrumb>li{display:inline-block}.ie8 .page-bar .page-breadcrumb>li{margin-right:1px}.page-bar .page-breadcrumb>li>a,.page-bar .page-breadcrumb>li>span{color:#888;font-size:14px;text-shadow:none}.page-bar .page-breadcrumb>li>i{color:#aaa;font-size:14px;text-shadow:none}.page-bar .page-breadcrumb>li>i[class*=icon-],.page-bar .page-breadcrumb>li>i[class^=icon-]{color:gray}.page-bar .page-toolbar{display:inline-block;float:right;padding:0}.page-bar .page-toolbar .btn-fit-height{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;-ms-border-radius:0 4px 4px 0;-o-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;padding-top:8px;padding-bottom:8px}.page-container-bg-solid .page-bar{position:relative;padding:0 20px;background-color:#fff;margin:-25px -20px 0}.page-container-bg-solid .page-bar .page-breadcrumb{padding:11px 0}.page-container-bg-solid .page-bar .page-breadcrumb>li>a,.page-container-bg-solid .page-bar .page-breadcrumb>li>span{color:#888}.page-container-bg-solid .page-bar .page-breadcrumb>li>i{color:#aaa}.page-container-bg-solid .page-bar .page-breadcrumb>li>i[class*=icon-],.page-container-bg-solid .page-bar .page-breadcrumb>li>i[class^=icon-]{color:#8c8c8c}.page-container-bg-solid .page-bar .page-toolbar{padding:6px 0}.page-container-bg-solid .page-bar .page-toolbar .btn{margin-top:-2px}.page-container-bg-solid .page-bar .page-toolbar .btn.btn-sm{margin-top:0}.page-content{margin-top:0;padding:0;background-color:#fff}.page-container-bg-solid .page-content{background:#F1F3FA}.page-full-width .page-content{margin-left:0!important}@media (min-width:992px){.page-content-wrapper{float:left;width:100%}.page-content-wrapper .page-content{margin-left:235px;margin-top:0;min-height:600px;padding:25px 20px 10px}.page-content-wrapper .page-content.no-min-height{min-height:auto}.page-sidebar-fixed.page-sidebar-hover-on .page-content-wrapper .page-content{margin-left:45px}.page-sidebar-reversed .page-content-wrapper .page-content{margin-left:0!important;margin-right:235px!important}.page-sidebar-reversed.page-sidebar-fixed.page-sidebar-hover-on .page-content-wrapper .page-content{margin-left:0;margin-right:45px}.page-sidebar-reversed.page-sidebar-closed .page-content-wrapper .page-content{margin-left:0!important;margin-right:45px!important}.page-sidebar-closed .page-content-wrapper .page-content{margin-left:45px!important}.page-full-width .page-content-wrapper .page-content,.page-sidebar-closed.page-sidebar-hide .page-content-wrapper .page-content{margin-left:0!important}.page-sidebar-closed.page-sidebar-reversed.page-sidebar-hide .page-content-wrapper .page-content{margin-right:0!important}}@media (max-width:991px){.page-container-bg-solid .page-bar{margin-top:-20px}.page-boxed>.container{max-width:none!important;margin:0!important;padding:0!important}.page-content-wrapper .page-content{margin:0!important;padding:20px!important;min-height:280px}}@media (min-width:768px) and (max-width:991px){.page-boxed>.container{margin:auto!important}}@media (max-width:767px){.page-content-wrapper .page-content{padding:20px 10px 10px!important;overflow:hidden}.page-content-wrapper .page-content .page-title{margin-bottom:20px;font-size:18px}.page-content-wrapper .page-content .page-title small{font-size:13px;padding-top:3px}}@media (max-width:480px){.page-content-wrapper .page-content .page-title small{display:block;clear:both}}.page-footer{padding:8px 20px 5px;font-size:12px;height:33px}.page-footer:after,.page-footer:before{content:" ";display:table}.page-footer .page-footer-inner{float:left;display:inline-block}.page-footer-fixed.page-footer-fixed-mobile .page-footer{position:fixed;left:0;right:0;z-index:10000;bottom:0}.page-footer-fixed.page-footer-fixed-mobile.page-sidebar-fixed .page-footer{margin-left:0!important}@media (min-width:992px){.page-footer{clear:left}.page-footer-fixed .page-footer{position:fixed;left:0;right:0;z-index:10000;bottom:0}.page-sidebar-fixed.page-sidebar-closed .page-footer{margin-left:45px}.page-sidebar-fixed.page-footer-fixed .page-footer{margin-left:0!important}.page-sidebar-fixed .page-footer{margin-left:235px;padding:8px 20px 5px}.page-boxed .page-footer{padding:8px 0 5px}.page-boxed.page-sidebar-fixed .page-footer{padding-right:20px;padding-left:20px}.page-sidebar-reversed.page-sidebar-fixed .page-footer{margin-left:0;margin-right:235px;padding:8px 20px 5px}.page-sidebar-reversed.page-sidebar-fixed.page-footer-fixed .page-footer{margin-left:0;margin-right:0}.page-sidebar-reversed.page-sidebar-fixed.page-sidebar-closed .page-footer{margin-right:45px}}.aside .aside-dialog .aside-footer:after,.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.container-fluid:after,.container:after,.dataTable,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after,.scroller-footer:after{clear:both}@media (max-width:991px){.page-boxed .page-footer{padding-left:0;padding-right:0}}@media (max-width:767px){.page-boxed .page-footer,.page-footer{padding-left:10px;padding-right:10px}.page-footer-fixed .page-footer .container{padding-left:0;padding-right:0}}.scroll-to-top{padding:1px;text-align:center;position:fixed;bottom:10px;z-index:10001;display:none;right:10px}.theme-panel>.toggler,.theme-panel>.toggler-close{padding:20px;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;top:4px;cursor:pointer}.scroll-to-top>i{display:inline-block;color:#687991;font-size:30px;opacity:.6;filter:alpha(opacity=60)}.scroll-to-top:hover{cursor:pointer}.scroll-to-top:hover>i{opacity:1;filter:alpha(opacity=100)}@media (min-width:992px){.scroll-to-top{right:20px}}@media (max-width:991px){.scroll-to-top{bottom:10px;right:10px}.scroll-to-top>i{font-size:28px}}.theme-panel{width:420px;margin-top:-13px;margin-right:0;z-index:100;float:right;position:relative}.theme-panel>.toggler{right:0;position:absolute;background:url(../img/icon-color.png) center no-repeat #d5dade;border-radius:4px}.theme-panel>.toggler:hover{background-color:#3d3d3d!important}.theme-panel>.toggler-close{display:none;right:0;z-index:101;position:absolute;background:url(../img/icon-color-close.png) center no-repeat #3d3d3d!important;border-radius:4px}.theme-panel>.toggler-close:hover{background-color:#222!important}.theme-panel>.theme-options{top:4px;right:0;display:none;position:absolute;z-index:100;background:#3d3d3d;box-shadow:5px 5px rgba(61,61,61,.1);-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.modal-open .colorpicker,.modal-open .datepicker,.modal-open .daterangepicker,.modal-open .datetimepicker{z-index:10055!important}.theme-panel>.theme-options>.theme-option{color:#cfcfcf;padding:10px;border-top:1px solid #444;margin-top:0;margin-bottom:0}.theme-panel>.theme-options>.theme-option>span{text-transform:uppercase;display:inline-block;width:145px;font-size:13px;font-weight:300}.theme-panel>.theme-options>.theme-option>select.form-control{display:inline;width:135px;padding:2px;text-transform:lowercase}.theme-panel>.theme-options>.theme-option.theme-colors{border-top:0}.theme-panel>.theme-options>.theme-option.theme-colors>span{display:block;width:auto}.theme-panel>.theme-options>.theme-option.theme-colors>ul{list-style:none;padding:0;display:block;margin-bottom:10px!important;margin-top:15px}.colorpicker.dropdown-menu,.daterangepicker.dropdown-menu,.datetimepicker.dropdown-menu{padding:5px}.theme-panel>.theme-options>.theme-option.theme-colors>ul>li{width:40px;height:40px;margin:0 4px;cursor:pointer;list-style:none;float:left;border:1px solid #707070}.theme-panel>.theme-options>.theme-option.theme-colors>ul>li:first-child{margin-left:0}.theme-panel>.theme-options>.theme-option.theme-colors>ul>li.current,.theme-panel>.theme-options>.theme-option.theme-colors>ul>li:hover{border:2px solid #d64635}.theme-panel>.theme-options>.theme-option.theme-colors>ul>li.color-default{background:#333438}.theme-panel>.theme-options>.theme-option.theme-colors>ul>li.color-darkblue{background:#2b3643}.theme-panel>.theme-options>.theme-option.theme-colors>ul>li.color-blue{background:#2D5F8B}.theme-panel>.theme-options>.theme-option.theme-colors>ul>li.color-grey{background:#697380}.theme-panel>.theme-options>.theme-option.theme-colors>ul>li.color-light{background:#F9FAFD}.theme-panel>.theme-options>.theme-option.theme-colors>ul>li.color-light2{background:#F1F1F1}.page-container-bg-solid .theme-panel{position:absolute;margin-top:30px;margin-right:20px;right:0}.page-container-bg-solid .theme-panel>.toggler{background:url(../img/icon-color.png) center no-repeat #BFCAD1}.page-container-bg-solid.page-sidebar-reversed .theme-panel{margin-right:255px}.page-on-load{background:#fefefe}.datepicker .active,.datepicker .active:hover,.datepicker .selected,.datepicker .today{background-image:none!important;filter:none!important}.page-on-load .page-container,.page-on-load .page-footer,.page-on-load .page-header,.page-on-load>.clearfix{display:none;transition:all 2s}.input-group.color .input-group-btn i{position:absolute;display:block;cursor:pointer;width:20px;height:20px;right:6px}.datepaginator a{font-family:'Open Sans';font-size:13px;font-weight:300}.datepicker table td,.datepicker table th,.datetimepicker table td,.datetimepicker table th{font-family:'Open Sans'!important}#dp-calendar{right:4px!important}.datepaginator .fa-angle-right:before{content:"\f105"}.datepaginator .fa-angle-left:before{content:"\f104"}.datepicker.dropdown-menu{padding:5px;box-shadow:5px 5px rgba(102,102,102,.1);border:1px solid #efefef}.datepicker .selected{background-color:#909090!important}.datepicker .active{background-color:#4b8df8!important}.datepicker .active:hover{background-color:#2678FC!important}.datepicker .input-daterange input{text-align:left}.datepicker table td{color:#000;font-weight:300!important}.datepicker table th{color:#333;font-weight:400!important}.daterangepicker{margin-top:4px}.daterangepicker td{text-shadow:none}.daterangepicker td.active{background-color:#4b8df8;background-image:none;filter:none}.datetimepicker .active,.datetimepicker .active:hover{filter:none!important;background-image:none!important}.daterangepicker th{font-weight:400;font-size:14px}.daterangepicker .ranges input[type=text]{width:70px!important;font-size:11px;vertical-align:middle}.daterangepicker .ranges label{font-weight:300;display:block}.daterangepicker .ranges .btn{margin-top:10px}.daterangepicker .ranges li{color:#333}.daterangepicker .ranges li.active,.daterangepicker .ranges li:hover{background:#4b8df8!important;border:1px solid #4b8df8!important;color:#fff}.daterangepicker .range_inputs input{margin-bottom:0!important}.daterangepicker .fa-angle-right:before{content:"\f105"}.daterangepicker .fa-angle-left:before,.datetimepicker .fa-angle-left:before{content:"\f104"}.datetimepicker table td{color:#000;font-weight:300!important}.datetimepicker table th{font-weight:400!important}.datetimepicker .active{background-color:#4b8df8!important}.datetimepicker .active:hover{background-color:#2678FC!important}.datetimepicker .fa-angle-right:before{content:"\f105"}.editable-input table,.editable-input table td,.editable-input table th,.editable-input table tr{border:0!important}.editable-input .combodate select{margin-bottom:5px}.fileinput{margin-bottom:0}.fileinput .close{float:none}.fileinput .input-group{white-space:nowrap;overflow:hidden}.md-input{padding:5px!important;border-bottom:0!important;-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;-ms-border-radius:0 0 4px 4px;-o-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.md-editor{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.md-editor .btn-toolbar{margin-left:0;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;-ms-border-radius:4px 4px 0 0;-o-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.md-editor .btn-toolbar .btn-group .btn-sm.btn{padding-bottom:3px}.md-editor .btn-toolbar .btn-group .btn-primary{padding-top:5px;padding-bottom:7px}.md-editor.active{border:1px solid #999;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;box-shadow:none!important}.has-error .md-editor{border:1px solid #ebccd1!important}.has-success .md-editor{border:1px solid #d6e9c6!important}.has-warning .md-editor{border:1px solid #faebcc!important}.modal-open.page-overflow .modal-scrollable,.modal-open.page-overflow .page-container,.modal-open.page-overflow .page-container .navbar-fixed-bottom,.modal-open.page-overflow .page-container .navbar-fixed-top{overflow-y:auto!important}.modal-scrollable{overflow:hidden!important}.modal-backdrop{position:fixed}.bootstrap-select .btn{border-color:#e5e5e5}.has-error .bootstrap-select .btn{border-color:#ebccd1}.has-success .bootstrap-select .btn{border-color:#d6e9c6}.has-warning .bootstrap-select .btn{border-color:#faebcc}.bootstrap-select.open .btn,.bootstrap-select.open.dropup .btn{border-color:#999}.bootstrap-select .btn:focus{outline:0!important;outline-offset:0}.bootstrap-select.btn-group .dropdown-menu{margin-top:1px}.bootstrap-select.btn-group .dropdown-menu>li>dt>.text{font-weight:600;font-family:'Open Sans';font-size:14px}.bootstrap-select.btn-group .dropdown-menu .text-muted{color:#999!important}.bootstrap-select .caret{border:0;width:auto;height:auto;margin-top:-10px!important}.bootstrap-select .caret:before{content:"\f107";display:inline-block;border:0;font-family:FontAwesome;font-style:normal;font-weight:400}.form-wizard .steps>li>a.step>.desc,.form-wizard .steps>li>a.step>.number{display:inline-block;font-size:16px;font-weight:300}.bootstrap-select .selected i{color:#aaa}.bootstrap-select .dropdown-menu{z-index:9999!important}.bootstrap-switch{border-color:#e5e5e5}.bootstrap-switch.bootstrap-switch-focused{box-shadow:none;border-color:#e5e5e5}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary{color:#fff;background:#428bca}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info{color:#fff;background:#89C4F4}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success{color:#fff;background:#45B6AF}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning{color:#fff;background:#dfba49}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger{color:#fff;background:#F3565D}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default{color:#444;background:#ececec}.portlet>.portlet-title>.actions>.bootstrap-switch{border-color:transparent;margin-top:0}.bootstrap-timepicker-widget table td a{padding:4px 0}.bootstrap-timepicker-widget input,.bootstrap-timepicker-widget input:focus{outline:0!important;border:0}.modal-open .bootstrap-timepicker-widget{z-index:10055!important}.bootstrap-timepicker-widget.timepicker-orient-bottom:after,.bootstrap-timepicker-widget.timepicker-orient-bottom:before{top:auto}.toast{-webkit-box-shadow:none!important;-moz-box-shadow:none!important;box-shadow:none!important;background-color:#030303}.toast-success{background-color:#51a351}.toast-error{background-color:#bd362f}.toast-info{background-color:#2f96b4}.toast-warning{background-color:#f89406}.toast .toast-close-button{display:inline-block;margin-top:0;margin-right:0;text-indent:-100000px;width:11px;height:16px;background-repeat:no-repeat!important;background-image:url(../../assets/images/portlet-remove-icon-white.png)!important}.form-wizard .steps,.form-wizard .steps>li>a.step{background-color:#fff;background-image:none;border:0;box-shadow:none;filter:none}.toast-top-center{top:12px;margin:0 auto 0 -150px;left:50%}.toast-bottom-center{bottom:12px;margin:0 auto 0 -150px;left:50%}.form-wizard .progress{margin-bottom:30px}.form-wizard .steps{padding:10px 0;margin-bottom:15px}.form-wizard .steps>li>a.step:hover{background:0 0}.form-wizard .steps>li>a.step>.number{background-color:#eee;text-align:center!important;padding:11px 15px 13px;margin-right:10px;height:45px;width:45px;-webkit-border-radius:50%!important;-moz-border-radius:50%!important;border-radius:50%!important}.form-wizard .steps>li>a.step>.desc>i{display:none}.form-wizard .steps>li.active>a.step .number{background-color:#45B6AF;color:#fff}.form-wizard .steps>li.active>a.step .desc{color:#333}.form-wizard .steps>li.done>a.step .number{background-color:#dfba49;color:#fff}.form-wizard .steps>li.done>a.step .desc{color:#333}.form-wizard .steps>li.done>a.step .desc i{font-size:12px;font-weight:400;color:#999;display:inline-block}@media (min-width:768px) and (max-width:1200px){.form-wizard .step .desc{margin-top:10px;display:block}}.wysihtml5-sandbox{width:100%!important}.wysihtml5-toolbar li{margin:0;height:29px}.wysihtml5-toolbar li .dropdown-menu{margin-top:5px}.has-error .wysihtml5-sandbox{border:1px solid #ebccd1!important}.has-success .wysihtml5-sandbox{border:1px solid #d6e9c6!important}.has-warning .wysihtml5-sandbox{border:1px solid #faebcc!important}.note-editor{border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.note-editor .note-toolbar{border-bottom:1px solid #e5e5e5;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;-ms-border-radius:4px 4px 0 0;-o-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.note-editor .note-statusbar{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;-ms-border-radius:0 0 4px 4px;-o-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.note-editor .note-statusbar .note-resizebar{border-top:1px solid #e5e5e5}.note-editor.fullscreen{z-index:11000;width:100%!important}.note-editor .dropdown-menu:before{left:9px;right:auto}.note-editor .dropdown-menu:after{left:10px;right:auto}.note-link-dialog .checkbox{margin-left:20px}.has-error .note-editor{border:1px solid #ebccd1!important}.has-success .note-editor{border:1px solid #d6e9c6!important}.has-warning .note-editor{border:1px solid #faebcc!important}.bootbox .bootbox-close-button{margin-top:0!important}.cke{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.cke .cke-top{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;-ms-border-radius:4px 4px 0 0;-o-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.cke .cke-bottom{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;-ms-border-radius:0 0 4px 4px;-o-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.cke_bottom,.cke_dialog,.cke_dialog_footer,.cke_dialog_title,.cke_inner,.cke_reset,.cke_top{background-image:none!important;filter:none;border-top:0;border-bottom:0;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;box-shadow:none!important;text-shadow:none}.cke_dialog_tab,.cke_dialog_ui_button,.cke_dialog_ui_input_text{filter:none;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;background-image:none!important}.cke_dialog_tab,.cke_dialog_ui_button{box-shadow:none!important;text-shadow:none!important}.cke_dialog_tab:hover,.cke_dialog_ui_button:hover{text-decoration:none;text-shadow:none}.cke_dialog_ui_input_text{box-shadow:none!important}.cke_button,.cke_combo_button,.cke_toolbar,.cke_toolgroup{background-image:none!important;filter:none!important;border:0;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;box-shadow:none!important}.cke_button,.cke_combo_button,.cke_hc.cke_panel_listItem a,.cke_panel_grouptitle{background-image:none!important;filter:none;text-shadow:none}.cke_button:hover,.cke_combo_button:hover{background-color:#ddd}.cke_toolbar_break{background-image:none!important;filter:none!important;border:0;box-shadow:none!important;-webkit-box-shadow:none!important;-moz-box-shadow:none!important;-ms-box-shadow:none!important;-o-box-shadow:none!important}.has-error .cke{border:1px solid #ebccd1!important}.has-success .cke{border:1px solid #d6e9c6!important}.has-warning .cke{border:1px solid #faebcc!important}.modal-open .clockface{z-index:10055!important}.clockface .cell .inner.active,.clockface .cell .outer.active{background-color:#4b8df8!important;background-image:none;filter:none}.dataTable{width:100%;margin-top:5px}.dataTables_filter .form-control{margin-left:4px}.dataTables_filter label{line-height:32px}.dataTable .row-details{margin-top:3px;display:inline-block;cursor:pointer;width:14px;height:14px}.dataTable .row-details.row-details-close{background:url(../img/datatable-row-openclose.png) no-repeat}.dataTable .row-details.row-details-open{background:url(../img/datatable-row-openclose.png) 0 -23px no-repeat}.dataTable .details{background-color:#eee}.dataTable .details td,.dataTable .details th{padding:4px;background:0 0;border:0}.dataTable .details tr:hover td,.dataTable .details tr:hover th{background:0 0}.dataTable .details tr:nth-child(even) td,.dataTable .details tr:nth-child(even) th,.dataTable .details tr:nth-child(odd) td,.dataTable .details tr:nth-child(odd) th{background-color:#eee}.dataTable>thead>tr>th.sorting,.dataTable>thead>tr>th.sorting_asc,.dataTable>thead>tr>th.sorting_desc{padding-right:18px}.dataTable .table-checkbox{width:8px!important}@media (max-width:768px){.form-wizard .steps>li>a{text-align:left}.dataTables_wrapper .dataTables_filter .form-control,.dataTables_wrapper .dataTables_length .form-control{display:inline-block}.dataTables_wrapper .dataTables_info{top:17px}.dataTables_wrapper .dataTables_paginate{margin-top:-15px}}@media (max-width:480px){.dataTables_wrapper .dataTables_filter .form-control{width:175px!important}.dataTables_wrapper .dataTables_paginate{float:left;margin-top:20px}}.dataTables_processing{position:fixed;top:50%;left:50%;min-width:125px;margin-left:0;padding:7px;text-align:center;color:#333;font-size:13px;border:1px solid #ddd;background-color:#eee;vertical-align:middle;-webkit-box-shadow:0 1px 8px rgba(0,0,0,.1);-moz-box-shadow:0 1px 8px rgba(0,0,0,.1);box-shadow:0 1px 8px rgba(0,0,0,.1)}.dataTables_processing span{line-height:15px;vertical-align:middle}.dataTables_empty{text-align:center}.tabletools-btn-group{margin:0 0 10px}.tabletools-btn-group>.btn{margin-right:5px}.tabletools-btn-group>.btn:last-child{margin-right:0}.tabletools-dropdown-on-portlet{margin-top:-55px;float:right}.tabletools-dropdown-on-portlet>.btn{margin-right:5px}.tabletools-dropdown-on-portlet>.btn:last-child{margin-right:0}.DTTT_Print{background-color:#fff}.DTTT_Print .DTTT_PrintMessage{display:none}@media print{.DTTT_Print .DTTT_PrintMessage{display:inline-block}}.DTTT_Print .DTTT_Print_Info{display:block;position:fixed;top:35px;font-size:18px;width:700px;left:50%;margin-left:-350px;text-align:center}.DTTT_Print .page-footer,.DTTT_Print .page-header,.DTTT_Print .page-sidebar{display:none}.DTTT_Print .page-content-wrapper{float:none}.DTTT_Print .row,.DTTT_Print [class*=col-]{padding:0;margin:0}.DTTT_Print .page-content{margin:50px auto!important;border:0!important;width:800px!important;padding:0!important}.DTTT_Print .page-content .portlet{border:0;padding:0}.DTTT_Print .page-content .portlet .portlet-body{padding:0}.DTTT_Print .page-content .dataTables_wrapper{padding:0;margin:0;box-shadow:5px 5px rgba(102,102,102,.1)}@media print{.DTTT_Print .page-content .dataTables_wrapper{box-shadow:none}}.paging_bootstrap_extended{margin:0!important;padding:0!important;float:none!important;font-size:13px}.dataTables_extended_wrapper .seperator{padding:0 2px}.dataTables_extended_wrapper div.dataTables_info,.dataTables_extended_wrapper div.dataTables_length,.dataTables_extended_wrapper div.dataTables_paginate{display:inline-block;float:none!important;padding:0!important;margin:0!important;position:static!important}@media (max-width:480px){.dataTables_extended_wrapper div.dataTables_info,.dataTables_extended_wrapper div.dataTables_length,.dataTables_extended_wrapper div.dataTables_paginate{display:block;margin-bottom:10px!important}.dataTables_extended_wrapper .seperator{display:none!important}}.dataTables_extended_wrapper div.dataTables_length label{margin:0!important;padding:0!important;font-size:13px;float:none!important;display:inline-block!important}.table-container .table-actions-wrapper{display:none}.dataTables_scroll{margin-bottom:10px}.dataTables_scrollHead{border-bottom:2px solid #ddd!important}.dataTables_scrollHead thead th{border-bottom:0!important}.dataTables_scrollBody{border-bottom:1px solid #ddd!important}.dropzone{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.fancybox-overlay{z-index:100000}.fancybox-opened{z-index:100001}.spinner-buttons.btn-group-vertical .btn{text-align:center;margin:0;height:17px;width:22px;padding-left:6px;padding-right:6px;padding-top:0}.page-style-rounded .spinner-buttons.btn-group-vertical .btn.spinner-up{border-radius:0;border-top-right-radius:4px!important}.page-style-rounded .spinner-buttons.btn-group-vertical .btn.spinner-down{border-radius:0 0 4px}.external-event{display:inline-block;cursor:move;margin-bottom:5px;margin-left:5px}.fc-scroller{overflow-y:auto;overflow-x:hidden}.fc-month-view .fc-scroller{height:auto!important}.portlet .event-form-title{font-size:14px;margin-top:4px;font-weight:400;margin-bottom:10px}.portlet.calendar .fc-button{box-shadow:none;text-shadow:none;border:0 #ddd;height:35px;padding:6px 8px 7px;margin-left:2px;background:0 0;color:#fff;top:-45px;outline:0!important;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;-ms-border-radius:4px 4px 0 0;-o-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;border-style:none solid}.portlet.calendar .fc-toolbar{margin-bottom:0}.portlet.calendar .fc-toolbar h2{margin-top:3px;font-size:17px}.portlet.calendar .fc-button .fc-icon-left-single-arrow,.portlet.calendar .fc-button .fc-icon-right-single-arrow{font-family:FontAwesome;font-size:16px}.portlet.calendar .fc-header{margin-bottom:-21px}.portlet.calendar .fc-button-prev{padding-right:10px;padding-left:8px}.portlet.calendar .fc-button-next{padding-right:8px;padding-left:10px}.portlet.calendar .fc-button.fc-state-active,.portlet.calendar .fc-button.fc-state-hover{color:#666;background-color:#fff}.portlet.calendar .fc-button.fc-state-disabled{color:#ddd}.portlet.calendar .fc-button .fc-icon-left-single-arrow:after{content:""}.portlet.calendar .fc-button .fc-icon-left-single-arrow:before{content:"\f104"}.portlet.calendar .fc-button .fc-icon-right-single-arrow:after{content:""}.portlet.calendar .fc-button .fc-icon-right-single-arrow:before{content:"\f105"}.portlet.calendar .fc-text-arrow{font-size:22px;font-family:"Courier New",Courier,monospace;vertical-align:baseline}.portlet.calendar .fc-event .fc-time,.portlet.calendar .fc-event .fc-title{text-align:left;color:#fff;font-size:13px;font-weight:300;float:left}.portlet.calendar .fc-event{border:0;background-color:#69a4e0;color:#fff}.portlet.calendar .fc-event .fc-content{border:0}.portlet.calendar .fc-header-title h2{font-size:14px;line-height:20px;font-weight:400;color:#111}.portlet.calendar .fc-widget-header{background-image:none;filter:none;background-color:#eee;text-transform:uppercase;font-weight:300}.portlet.calendar.light .fc-button{top:-60px;color:#666;text-transform:uppercase;font-size:12px;padding-bottom:35px}.portlet.calendar.light .fc-button .fc-text-arrow{margin-top:-6px;display:inline-block}.portlet.calendar.light .fc-button.fc-state-active,.portlet.calendar.light .fc-button.fc-state-hover{color:#333;border-bottom:2px solid #45B6AF}.portlet.calendar.light .fc-button.fc-state-disabled{color:#aaa}.portlet.calendar .mobile .fc-button{padding:0 6px 20px;margin-left:2px;border:0;background-color:#ddd;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;color:#000;text-shadow:none;text-align:center}.portlet.calendar .mobile .fc-button.fc-state-active,.portlet.calendar .mobile .fc-button.fc-state-hover{background-color:#eee}.portlet.calendar .mobile .fc-button.fc-state-disabled{color:#bbb}.portlet.calendar .mobile .fc-button-prev{margin-right:5px;margin-top:-2px}.portlet.calendar .mobile .fc-button-next{margin-right:0;margin-top:-2px}.portlet.calendar .mobile .fc-header-space{margin:0;padding:0;width:0}.portlet.calendar .mobile .fc-header-left{position:absolute;z-index:10}.portlet.calendar .mobile .fc-header-left .fc-button{top:-2px}.portlet.calendar .mobile .fc-header-right{position:relative;right:0}.portlet.calendar .mobile .fc-header-right .fc-button{top:35px}.portlet.calendar .mobile .fc-content{margin-top:53px}.gmaps{height:300px;width:100%}.gmaps img{max-width:none}#gmap_static div{background-repeat:no-repeat;background-position:50% 50%;display:block;height:300px}#gmap_routes_instructions{margin-top:10px;margin-bottom:0}#gritter-notice-wrapper{right:1px!important}.gritter-close{left:auto!important;right:3px!important}.gritter-title{font-family:"Open Sans";font-size:18px;font-weight:300}.easy-pie-chart .number{font-size:14px!important;position:relative;text-align:center;height:75px;line-height:75px}.easy-pie-chart .number canvas{position:absolute;top:0;left:0}.bs-example,.sparkline-chart,.vmaps{position:relative}.blueimp-gallery .close{background-image:url(../../assets/images/portlet-remove-icon-white.png)!important;margin-top:-2px}.blueimp-gallery .next,.blueimp-gallery .prev{border-radius:23px!important}.ms-container .ms-list{border:1px solid #e5e5e5;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.ms-container .ms-optgroup-label{font-size:14px}.jquery-notific8-message,.ms-container .ms-selectable li.ms-elem-selectable,.ms-container .ms-selection li.ms-elem-selection{font-size:13px}.ms-container .ms-list.ms-focus{border-color:#999;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.ms-container .ms-selectable li.ms-hover,.ms-container .ms-selection li.ms-hover{color:#333;background-color:#eee}.ms-container .form-control{margin-bottom:5px}[class*=jquery-notific8],[class*=jquery-notific8]:after,[class*=jquery-notific8]:before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.left .jquery-notific8-close-sticky span,.right .jquery-notific8-close-sticky span{font-size:10px}.jquery-notific8-heading{font-weight:300;font-size:16px}.password-strength .password-verdict{display:inline-block;margin-top:6px;margin-left:5px}.password-strength .progress{margin-top:5px;margin-bottom:0}.password-strength .progress-bar{padding:2px}.scroller{padding:0 12px 0 0;margin:0;overflow:hidden}.scroller-footer{margin-top:10px}.scroller-footer:after,.scroller-footer:before{content:" ";display:table}.portlet-body .slimScrollBar{margin-right:0}.jqstooltip{width:auto!important;height:auto!important}.easy-pie-chart,.sparkline-chart{text-align:center}.sparkline-chart{margin-top:15px}.easy-pie-chart .number{font-weight:300;width:85px;margin:0 auto}.sparkline-chart .number{width:100px;margin:0 auto 10px}.easy-pie-chart .title,.sparkline-chart .title{display:block;text-align:center;color:#333;font-weight:300;font-size:16px;margin-top:5px;margin-bottom:10px}.easy-pie-chart .title:hover,.sparkline-chart .title:hover{color:#666;text-decoration:none}.easy-pie-chart .title>i,.sparkline-chart .title>i{margin-top:5px}div.tagsinput{min-height:35px;height:auto!important;margin:0;padding:5px 5px 0;overflow:auto}div.tagsinput span.tag{background:#aaa;color:#fff;border:0;padding:3px 6px;margin-top:0;margin-bottom:5px}div.tagsinput input{padding:3px 6px;width:75px!important}div.tagsinput span.tag a{color:#fff}div.tagsinput .not_valid{color:#fff;padding:3px 6px;background-color:#e02222}.slider{border:0;padding:0;display:block;margin:12px 5px;min-height:11px}.vakata-context li a .vakata-contextmenu-sep,.vakata-context li a i,iframe[src="about:blank"]{display:none}.ui-slider-vertical{width:11px}.ui-slider-horizontal .ui-slider-handle{top:-3px}.ui-slider-vertical .ui-slider-handle{left:-3px}.bs-example+.highlight:after,.bs-example:after{left:15px;text-transform:uppercase;letter-spacing:1px}.ui-slider-handle,.ui-slider-vertical{filter:none!important;background-image:none!important}.jqvmap-zoomin,.jqvmap-zoomout{height:16px;width:16px;background-color:#666}.vmaps{overflow:hidden;height:300px}.jstree-default .jstree-clicked{border:0;background-color:#e1e1e1;box-shadow:none}.jstree-default .jstree-hovered{border:0;background-color:#eee;box-shadow:none}.jstree-default .jstree-wholerow-clicked,.jstree-wholerow .jstree-wholerow-clicked{background:#e1e1e1;border:0;box-shadow:none}.jstree-default .jstree-wholerow-hovered,.jstree-wholerow .jstree-wholerow-hovered{border:0;background-color:#eee;box-shadow:none}.jstree-icon.icon-lg{margin-top:1px}.jstree-open>.jstree-anchor>.fa-folder:before{margin-left:2px;content:"\f07c"}.jstree-default.jstree-rtl .jstree-last{background:no-repeat}.vakata-context,.vakata-context ul{padding:0;min-width:125px;background-color:#fff;font-size:14px;font-family:"Segoe UI",Helvetica,Arial,sans-serif;box-shadow:5px 5px rgba(102,102,102,.1);border:1px solid #efefef}.vakata-context li{border:0}.vakata-context li a{padding:0 10px;border:0}.vakata-context .vakata-context-hover>a,.vakata-context li a:hover{background-color:#eee;color:#333;box-shadow:none;margin:0}.vakata-context .vakata-context-hover>a .ins,.vakata-context .vakata-context-hover>a .span,.vakata-context li a:hover .ins,.vakata-context li a:hover .span{border:0!important}.vakata-context li a ins,.vakata-context li a span{display:none;border:0!important}.vakata-context .vakata-context-separator a,.vakata-context-rtl .vakata-context-separator a{margin:0;border:0}.jstree-rename-input{background-color:#fff!important;border:1px solid #e5e5e5!important;outline:0!important;padding:2px 6px!important;margin-right:-4px!important}.noUi-control{margin:9px 0}.noUi-primary .noUi-connect,.noUi-primary.noUi-connect{background:#428bca}.noUi-info .noUi-connect,.noUi-info.noUi-connect{background:#89C4F4}.noUi-success .noUi-connect,.noUi-success.noUi-connect{background:#45B6AF}.noUi-warning .noUi-connect,.noUi-warning.noUi-connect{background:#dfba49}.noUi-danger .noUi-connect,.noUi-danger.noUi-connect{background:#F3565D}.noUi-default .noUi-connect,.noUi-default.noUi-connect{background:#c6c6c6}.form-recaptcha-img{margin-bottom:10px;clear:both;border:1px solid #e5e5e5;padding:5px}.form-control .select2-choice{border:1px solid #e5e5e5;background-color:#fff;background-image:none;filter:none;height:34px;padding:3px 0 0 12px}.select2-container.select2-drop-above .select2-choice{border-bottom-color:#e5e5e5;background-color:#fff;background-image:none;filter:none}.select2-drop{border:1px solid #e5e5e5;background-color:#fff;background-image:none;-webkit-box-shadow:none;box-shadow:none;filter:none;border-top:0}.select2-drop-auto-width{border-top:1px solid #e5e5e5}.select2-drop.select2-drop-above{border-top:1px solid #e5e5e5;-webkit-box-shadow:none;box-shadow:none}.select2-drop-active{border:1px solid #999;border-top:0}.select2-container .select2-choice .select2-arrow{background-image:none;background-color:#fff;filter:none;border-left:1px solid #e5e5e5}.select2-container.select2-container-active .select2-arrow,.select2-container.select2-dropdown-open .select2-arrow{border-left:0!important}.select2-container .select2-choice .select2-arrow b{background-position:0 1px}.select2-search input{background-color:#fff!important;filter:none;margin:5px 0 0;border:1px solid #e5e5e5;webkit-appearance:none!important;color:#333;outline:0;height:auto!important;min-height:26px;padding:6px!important;line-height:20px;font-size:14px;font-weight:400;vertical-align:top;-webkit-box-shadow:none;box-shadow:none}.form-control.select2-container{border:0;height:auto!important;padding:0}.select2-container-active .select2-choice,.select2-container-active .select2-choices{border:1px solid #999!important;-webkit-box-shadow:none!important;box-shadow:none!important}.select2-dropdown-open .select2-choice{border-bottom:0!important;background-image:none;background-color:#fff;filter:none;-webkit-box-shadow:none!important;box-shadow:none!important}.select2-dropdown-open.select2-drop-above .select2-choice,.select2-dropdown-open.select2-drop-above .select2-choices{border:1px solid #999!important;border-top:0!important;background-image:none;background-color:#fff;filter:none;-webkit-box-shadow:none!important;box-shadow:none!important}.select2-drop.select2-drop-above.select2-drop-active{border:1px solid #999!important;border-bottom:0!important}.select2-dropdown-open .select2-choice .select2-arrow b{background-position:-18px 1px}.select2-results{margin:5px 0}.select2-results .select2-highlighted{background:#eee;color:#333}.select2-results li em{background:#feffde;font-style:normal}.select2-results .select2-highlighted em{background:0 0}.select2-results .select2-highlighted ul{background:#fff;color:#000}.select2-results .select2-no-results,.select2-results .select2-searching,.select2-results .select2-selection-limit{padding:3px 7px 4px;background:#f4f4f4;display:list-item}.select2-container-multi,.select2-container-multi .select2-choices{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.select2-container-multi.select2-dropdown-open,.select2-container-multi.select2-dropdown-open .select2-choices{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;-ms-border-radius:4px 4px 0 0;-o-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.select2-container-multi.select2-dropdown-open.select2-drop-above,.select2-container-multi.select2-dropdown-open.select2-drop-above .select2-choices{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;-ms-border-radius:0 0 4px 4px;-o-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.select2-container-multi .select2-choices{padding-left:6px;min-height:34px;border:1px solid #e5e5e5;background-image:none;background-color:#fff;filter:none;-webkit-box-shadow:none!important;box-shadow:none!important}.select2-container-multi.select2-container-active .select2-choices{border:1px solid #999!important;background-image:none;background-color:#fff;filter:none;-webkit-box-shadow:none!important;box-shadow:none!important}.select2-container-multi .select2-choices .select2-search-choice{padding:3px 5px 3px 18px;margin:5px 0 3px 5px;border:1px solid #e5e5e5;background-image:none;background-color:#fff;filter:none;-webkit-box-shadow:none!important;box-shadow:none!important}.has-warning .select2-container .select2-choice,.has-warning .select2-container .select2-choices,.has-warning .select2-container.select2-dropdown-open .select2-choice,.has-warning .select2-container.select2-dropdown-open .select2-choices{border-color:#faebcc}.has-warning .select2-container.select2-dropdown-open .select2-choice>span{color:#faebcc}.has-error .select2-container .select2-choice,.has-error .select2-container .select2-choices,.has-error .select2-container.select2-dropdown-open .select2-choice,.has-error .select2-container.select2-dropdown-open .select2-choices{border-color:#ebccd1}.has-error .select2-container.select2-dropdown-open .select2-choice>span{color:#ebccd1}.has-success .select2-container .select2-choice,.has-success .select2-container .select2-choices,.has-success .select2-container.select2-dropdown-open .select2-choice,.has-success .select2-container.select2-dropdown-open .select2-choices{border-color:#d6e9c6}.has-success .select2-container.select2-dropdown-open .select2-choice>span{color:#d6e9c6}.modal-open .select2-drop-mask{z-index:10051}.modal-open .select2-drop{z-index:10052}.modal-open .select2-search{z-index:10053}.form-control.input-lg .select2-choice{height:46px;padding:10px 16px}.select2-container.input-lg .select2-choice .select2-arrow b{background-position:0 7px}.form-control.input-sm .select2-choice{height:30px;padding:1px 10px 5px}.select2-container.input-sm .select2-choice .select2-arrow b{background-position:0 0}.checker{margin-top:-2px!important;margin-right:2px!important}.checker input,.radio input{outline:0!important}.alert,.aside:focus,.btn[bs-select],.timepicker.dropdown-menu button,[tabindex="-1"]{outline:0}div.checker.disabled span,div.checker.disabled.active span{background-position:-152px -260px}div.checker.disabled:hover,div.radio.disabled:hover{cursor:not-allowed}div.checker,div.radio{margin-right:0;margin-left:3px}.portlet-body-morris-fit{margin-right:-20px;margin-left:-20px;margin-bottom:-15px}.portlet-body-morris-fit>svg{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;-ms-border-radius:0 0 4px 4px;-o-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.morris-hover.morris-default-style .morris-hover-row-label{text-align:left;font-weight:400;font-size:15px;color:#7D8C9D;font-family:"Open Sans",sans-serif}.morris-hover.morris-default-style .morris-hover-point{text-align:left;font-size:14px;font-weight:400;font-family:"Open Sans",sans-serif}.icheck-list>label{display:block;margin-bottom:8px}.icheck-list>label:last-child{margin-bottom:0}.form-horizontal .icheck-inline{margin-top:8px}.icheck-inline>label{display:inline-block;margin-left:15px}.icheck-inline>label:first-child{margin-left:0}div[class*=icheckbox_],div[class*=iradio_]{margin-right:5px;top:-1px!important}.icheck-colors{padding:0;margin:0;list-style:none}.icheck-colors>li{padding:0;margin:4px;float:left;display:inline-block;height:20px;width:20px;background:#000;opacity:.6;filter:alpha(opacity=60)}.icheck-colors>li:first-child{margin-left:0}.icheck-colors>li:hover{opacity:1;filter:alpha(opacity=100);cursor:pointer}.icheck-colors>li.active{height:26px;margin-top:0;opacity:.6;filter:alpha(opacity=60)}.icheck-colors>li.red{background:#d54e21}.icheck-colors>li.green{background:#78a300}.icheck-colors>li.blue{background:#0e76a8}.icheck-colors>li.aero{background:#9cc2cb}.icheck-colors>li.grey{background:#73716e}.icheck-colors>li.orange{background:#f70}.icheck-colors>li.yellow{background:#fc0}.icheck-colors>li.pink{background:#ff66b5}.icheck-colors>li.purple{background:#6a5a8c}.ui-select-match-close{margin-top:5px!important;margin-left:5px!important}.modal.disabled{-webkit-animation:noop!important;animation:noop!important}.modal.disabled.am-fade-and-slide-top .modal-dialog{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;-webkit-animation-name:fadeAndSlideFromTop;animation-name:fadeAndSlideFromTop}.modal.disabled.am-fade-and-scale .modal-dialog,.tab-pane.am-fade{-webkit-animation-duration:.3s;-webkit-animation-fill-mode:backwards}.modal.disabled.am-fade-and-slide-top.ng-enter .modal-dialog{visibility:hidden;-webkit-animation-name:fadeAndSlideFromTop;animation-name:fadeAndSlideFromTop}.modal.disabled.am-fade-and-slide-top.ng-enter-active .modal-dialog,.modal.disabled.am-fade-and-slide-top.ng-leave-active .modal-dialog{visibility:visible}.modal.disabled.am-fade-and-slide-top.ng-leave .modal-dialog{-webkit-animation-name:fadeAndSlideToTop;animation-name:fadeAndSlideToTop}.modal.disabled.am-fade-and-scale .modal-dialog{animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;animation-fill-mode:backwards;-webkit-animation-name:fadeAndScaleIn;animation-name:fadeAndScaleIn}.modal.disabled.am-fade-and-scale.ng-enter .modal-dialog{visibility:hidden;-webkit-animation-name:fadeAndScaleIn;animation-name:fadeAndScaleIn}.modal.disabled.am-fade-and-scale.ng-enter-active .modal-dialog,.modal.disabled.am-fade-and-scale.ng-leave-active .modal-dialog{visibility:visible}.modal.disabled.am-fade-and-scale.ng-leave .modal-dialog{-webkit-animation-name:fadeAndScaleOut;animation-name:fadeAndScaleOut}@-webkit-keyframes noop{from,to{opacity:1}}@keyframes noop{from,to{opacity:1}}.bs-example{padding:45px 15px 15px;margin:0 -15px 15px;background-color:#fafafa;box-shadow:inset 0 3px 6px rgba(0,0,0,.05);border-color:#e5e5e5 #eee #eee;border-style:solid;border-width:1px 0}.bs-example:after{content:"Example";position:absolute;top:15px;font-size:12px;font-weight:700;color:#bbb}.bs-example+.highlight{margin:-15px -15px 15px;border-radius:0;border-width:0 0 1px}@media (min-width:768px){.bs-example,.bs-example+.highlight{margin-left:0;margin-right:0;border-width:1px}.bs-example{background-color:#fff;border-color:#ddd;border-radius:4px 4px 0 0;box-shadow:none}.bs-example+.highlight{margin-top:-16px;border-bottom-left-radius:4px;border-bottom-right-radius:4px}}.bs-example .container{width:auto}.bs-example>.alert:last-child,.bs-example>.form-control:last-child,.bs-example>.jumbotron:last-child,.bs-example>.list-group:last-child,.bs-example>.navbar:last-child,.bs-example>.panel:last-child,.bs-example>.progress:last-child,.bs-example>.table-responsive:last-child>.table,.bs-example>.table:last-child,.bs-example>.well:last-child,.bs-example>blockquote:last-child,.bs-example>ol:last-child,.bs-example>p:last-child,.bs-example>ul:last-child{margin-bottom:0}.bs-example>p>.close{float:none}.bs-example .nav-tabs{margin-bottom:15px}.bs-footer{padding-top:40px;padding-bottom:30px;margin-top:100px;color:#787878;text-align:center;border-top:1px solid #e6e6e6}.bs-docs-nav .navbar-brand,.bs-masthead-links a{color:#fff}.bs-docs-nav,.bs-docs-nav .navbar-collapse{border-color:#a33f3e}.footer-links{margin:10px 0;padding-left:0}.footer-links li{display:inline;padding:0 2px}.footer-links li:first-child{padding-left:0}@media (min-width:768px){.bs-footer{text-align:left}.bs-footer p{margin-bottom:0}}.bs-masthead{position:relative;padding:30px 15px;text-align:center;text-shadow:0 1px 0 rgba(0,0,0,.15)}.bs-masthead h1{font-size:50px;line-height:1;color:#fff}.bs-masthead .btn-outline-inverse{margin:10px}.bs-masthead-links{margin-top:20px;margin-bottom:40px;padding:0 15px;list-style:none;text-align:center}.bs-masthead-links li{display:inline}.bs-masthead-links li+li{margin-left:20px}@media (min-width:768px){.bs-masthead{text-align:left;padding-top:140px;padding-bottom:140px}.bs-masthead h1{font-size:100px}.bs-masthead .lead{margin-right:25%;font-size:30px}.bs-masthead .btn-outline-inverse{width:auto;margin:20px 5px 20px 0;padding:18px 24px;font-size:21px}.bs-masthead-links{padding:0;text-align:left}}.bs-docs-nav{background-color:#b94846;box-shadow:0 1px 0 rgba(255,255,255,.1);text-shadow:0 -1px 0 rgba(0,0,0,.15)}.bs-docs-nav .navbar-nav>li>a{-webkit-transition:color .15s linear;transition:color .15s linear;color:#f9f1f1}.bs-docs-nav .navbar-nav>li>a:hover{color:#fff}.bs-docs-nav .navbar-nav>.active>a,.bs-docs-nav .navbar-nav>.active>a:hover{background-color:#a33f3e;color:#fff}.bs-docs-nav .navbar-toggle{border-color:#b94846}.bs-docs-nav .navbar-toggle:hover{border-color:#a33f3e;background-color:#a33f3e}.bs-old-docs{padding:15px 20px;color:#787878;background-color:#fafafa;border-top:1px solid #fff;border-bottom:1px solid #e6e6e6}.bs-old-docs strong{color:#545454}@media (max-width:991px){.navbar-toggle{margin-left:15px;display:block!important;float:left}.bs-sidebar.affix{position:static!important}}.bs-header .container,.select.dropdown-menu.select-multiple li{position:relative}.bs-sidenav{margin-top:40px;margin-bottom:20px;width:124px}.bs-sidebar .nav>li>a{display:block;font-size:13px;font-weight:500;color:#999;padding:4px 15px;text-align:right}.bs-sidebar .nav>li>a:focus,.bs-sidebar .nav>li>a:hover{padding-right:14px;color:#b94846;text-decoration:none;background-color:transparent;border-right:1px solid #b94846}.bs-sidebar .nav>.active:focus>a,.bs-sidebar .nav>.active:hover>a,.bs-sidebar .nav>.active>a{padding-right:13px;font-weight:700;color:#b94846;background-color:transparent;border-right:2px solid #b94846}.bs-sidebar .nav .nav{display:none;padding-bottom:10px}.bs-sidebar .nav .nav>li>a{padding-top:2px;padding-bottom:2px;padding-right:30px;font-size:12px;font-weight:400}.bs-sidebar .nav .nav>li>a:focus,.bs-sidebar .nav .nav>li>a:hover{padding-right:29px}.bs-sidebar .nav .nav>.active:focus>a,.bs-sidebar .nav .nav>.active:hover>a,.bs-sidebar .nav .nav>.active>a{font-weight:500;padding-right:28px}@media (min-width:992px){.bs-sidebar .nav>.active>ul{display:block}.bs-sidebar.affix .bs-sidenav,.bs-sidebar.affix-bottom .bs-sidenav{margin-top:0;margin-bottom:0}}h1[id],h2[id]{margin-top:-45px}@media (min-width:1200px){.bs-sidebar{margin-right:30px}}.am-fade.aside-backdrop,.am-fade.modal-backdrop{background-color:rgba(0,0,0,.5)}.bs-docs-aside{min-width:200px}h1[id]{padding-top:80px}h2[id]{padding-top:60px}.bs-header{padding:30px 15px 40px;font-size:16px;text-align:center;text-shadow:0 1px 0 rgba(0,0,0,.15)}.bs-header h1{color:#fff}.bs-header p{font-weight:300;line-height:1.5}@media (min-width:768px){.bs-header{font-size:21px;text-align:left}.bs-header h1{font-size:60px;line-height:1}}@media (min-width:992px){.bs-header h1,.bs-header p{margin-right:300px}}.highlight{display:none;padding:9px 14px;margin-bottom:14px;background-color:#f6f6f8;border:1px solid #e2e2e9;border-radius:4px}.highlight pre{padding:0;margin-top:0;margin-bottom:0;background-color:transparent;border:0;white-space:nowrap}.highlight pre code{font-size:inherit;color:#333}.highlight pre .lineno{display:inline-block;width:22px;padding-right:5px;margin-right:10px;text-align:right;color:#bebec5}@media (min-width:481px){.highlight{display:block}}input.ng-dirty.ng-invalid,select.ng-dirty.ng-invalid,textarea.ng-dirty.ng-invalid{color:#b94a48;border-color:#ee5f5b}input.ng-dirty.ng-invalid:focus,select.ng-dirty.ng-invalid:focus,textarea.ng-dirty.ng-invalid:focus{border-color:#e9322d;box-shadow:0 0 6px #f8b9b7}input:focus.ng-pristine.ng-invalid,select:focus.ng-pristine.ng-invalid,textarea:focus.ng-pristine.ng-invalid{color:#555;border:1px solid #ccc;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}input:focus.ng-pristine.ng-invalid:focus,select:focus.ng-pristine.ng-invalid:focus,textarea:focus.ng-pristine.ng-invalid:focus{border-color:rgba(82,168,236,.8);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6)}body .modal{overflow-y:hidden}body.modal-open{overflow-y:visible!important}.lt-ie9 .bs-sidebar{display:none!important}.modal-backdrop{z-index:1040;bottom:0}.select.dropdown-menu.select-multiple li>i{color:#fff;display:none;position:absolute;top:5px;right:10px}.bs-example+.highlight,body{position:relative}.alert.bottom-right,.alert.top,.alert.top-right{right:0}.select.dropdown-menu.select-multiple li.active>i{display:block}body{padding-top:50px}.bs-example-scope{font-size:85%}.bs-example-scope+.bs-example{margin:-15px -15px 15px}.bs-example-scope+.bs-example+.highlight>pre{border-radius:0 0 4px 4px}.aside.bs-docs-aside .aside-header{background:#b94846}.aside.bs-docs-aside .nav{margin:0}.bs-docs-social{max-height:200px}.bs-docs-social ul{list-style:none;padding:1em 0 0}.bs-docs-social ul li{height:30px}@media (max-width:991px){.bs-docs-social ul li{display:inline-block}}.bs-docs-home,.bs-header{color:#fff;background:url(../assets/images/triangular-red.png) #b94846;padding-bottom:20px}pre>code{background:0 0}.bs-example+.highlight code{padding:2.5em .5em 1em}.alert.bottom-right .close,.alert.top-right .close{padding-left:10px}.alert.bottom-left .close,.alert.top-left .close{padding-right:10px}.bs-example+.highlight:after{content:"Source";position:absolute;top:15px;font-size:12px;font-weight:700;color:#bbb}.edit-plunkr,.panel-heading[role=tab] .panel-title a,a[ng-click],input[type=checkbox]{cursor:pointer}.twitter-follow-button{position:relative;top:5px;margin-left:10px}.tab-pane.am-fade{animation-duration:.3s;-webkit-animation-timing-function:ease;animation-timing-function:ease;animation-fill-mode:backwards;opacity:1}.am-collapse,.panel-collapse.am-collapse{-webkit-animation-duration:.3s;-webkit-animation-fill-mode:backwards;overflow:hidden}.panel-collapse.am-collapse{animation-duration:.3s;-webkit-animation-timing-function:ease;animation-timing-function:ease;animation-fill-mode:backwards}.am-collapse,.am-flip-x{-webkit-animation-timing-function:ease}.panel-collapse.am-collapse2{-webkit-transition:.3s ease max-height;transition:.3s ease max-height;max-height:100px;overflow:hidden}.panel-collapse.am-collapse2.in-remove{max-height:100px;display:block}.panel-collapse.am-collapse2.in-add{max-height:0}@-webkit-keyframes expand{from{max-height:0}to{max-height:100px}}@keyframes expand{from{max-height:0}to{max-height:100px}}@-webkit-keyframes collapse{from{max-height:100px}to{max-height:0}}@keyframes collapse{from{max-height:100px}to{max-height:0}}.am-collapse{animation-duration:.3s;animation-timing-function:ease;animation-fill-mode:backwards;opacity:1}.am-fade,.am-flip-x{-webkit-animation-fill-mode:backwards}.am-collapse.am-collapse-add,.am-collapse.ng-hide-remove,.am-collapse.ng-move{-webkit-animation-name:expand;animation-name:expand}.am-collapse.am-collapse-remove,.am-collapse.ng-hide{-webkit-animation-name:collapse;animation-name:collapse}.am-collapse.ng-enter{visibility:hidden;-webkit-animation-name:expand;animation-name:expand;-webkit-animation-play-state:paused;animation-play-state:paused}.am-collapse.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-collapse.ng-leave{-webkit-animation-name:collapse;animation-name:collapse;-webkit-animation-play-state:paused;animation-play-state:paused}.am-collapse.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes expand{from{max-height:0}to{max-height:500px}}@keyframes expand{from{max-height:0}to{max-height:500px}}@-webkit-keyframes collapse{from{max-height:500px}to{max-height:0}}@keyframes collapse{from{max-height:500px}to{max-height:0}}.panel-collapse.am-collapse.in-remove{-webkit-animation-name:collapse;animation-name:collapse;display:block}.panel-collapse.am-collapse.in-add{-webkit-animation-name:expand;animation-name:expand}.am-fade{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:linear;animation-timing-function:linear;animation-fill-mode:backwards;opacity:1}.am-fade.am-fade-add,.am-fade.ng-hide-remove,.am-fade.ng-move{-webkit-animation-name:fadeIn;animation-name:fadeIn}.am-fade.am-fade-remove,.am-fade.ng-hide{-webkit-animation-name:fadeOut;animation-name:fadeOut}.am-fade.ng-enter{visibility:hidden;-webkit-animation-name:fadeIn;animation-name:fadeIn;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-fade.ng-leave{-webkit-animation-name:fadeOut;animation-name:fadeOut;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.tab-pane.am-fade.active-remove{display:none!important}.tab-pane.am-fade.active-add{-webkit-animation-name:fadeIn;animation-name:fadeIn}.aside-backdrop.am-fade,.modal-backdrop.am-fade{background:rgba(0,0,0,.5);-webkit-animation-duration:.15s;animation-duration:.15s}.aside-backdrop.am-fade.ng-leave,.modal-backdrop.am-fade.ng-leave{-webkit-animation-delay:.3s;animation-delay:.3s}.am-flip-x{-webkit-animation-duration:.4s;animation-duration:.4s;animation-timing-function:ease;animation-fill-mode:backwards}.am-flip-x-linear,.am-slide-top{-webkit-animation-fill-mode:backwards}.am-flip-x.am-flip-x-add,.am-flip-x.ng-hide-remove,.am-flip-x.ng-move{-webkit-animation-name:flipInXBounce;animation-name:flipInXBounce}.am-flip-x.am-flip-x-remove,.am-flip-x.ng-hide{-webkit-animation-name:flipOutX;animation-name:flipOutX}.am-flip-x.ng-enter{visibility:hidden;-webkit-animation-name:flipInXBounce;animation-name:flipInXBounce;-webkit-animation-play-state:paused;animation-play-state:paused}.am-flip-x.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-flip-x.ng-leave{-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-animation-play-state:paused;animation-play-state:paused}.am-flip-x.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}.am-flip-x-linear{-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-timing-function:ease;animation-timing-function:ease;animation-fill-mode:backwards}.am-slide-right,.am-slide-top{-webkit-animation-duration:.3s;-webkit-animation-timing-function:ease-in-out}.am-flip-x-linear.am-flip-x-add,.am-flip-x-linear.ng-hide-remove,.am-flip-x-linear.ng-move{-webkit-animation-name:flipInX;animation-name:flipInX}.am-flip-x-linear.am-flip-x-remove,.am-flip-x-linear.ng-hide{-webkit-animation-name:flipOutX;animation-name:flipOutX}.am-flip-x-linear.ng-enter{visibility:hidden;-webkit-animation-name:flipInX;animation-name:flipInX;-webkit-animation-play-state:paused;animation-play-state:paused}.am-flip-x-linear.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-flip-x-linear.ng-leave{-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-animation-play-state:paused;animation-play-state:paused}.am-flip-x-linear.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes flipInX{from{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}to{opacity:1;-webkit-transform:perspective(400px) rotateX(0);transform:perspective(400px) rotateX(0)}}@keyframes flipInX{from{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}to{opacity:1;-webkit-transform:perspective(400px) rotateX(0);transform:perspective(400px) rotateX(0)}}@-webkit-keyframes flipInXBounce{from{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-transform:perspective(400px) rotateX(-10deg);transform:perspective(400px) rotateX(-10deg)}70%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}to{opacity:1;-webkit-transform:perspective(400px) rotateX(0);transform:perspective(400px) rotateX(0)}}@keyframes flipInXBounce{from{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-transform:perspective(400px) rotateX(-10deg);transform:perspective(400px) rotateX(-10deg)}70%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}to{opacity:1;-webkit-transform:perspective(400px) rotateX(0);transform:perspective(400px) rotateX(0)}}@-webkit-keyframes flipOutX{from{opacity:1;-webkit-transform:perspective(400px) rotateX(0);transform:perspective(400px) rotateX(0)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}@keyframes flipOutX{from{opacity:1;-webkit-transform:perspective(400px) rotateX(0);transform:perspective(400px) rotateX(0)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}.am-slide-top{animation-duration:.3s;animation-timing-function:ease-in-out;animation-fill-mode:backwards}.am-slide-bottom,.am-slide-right{-webkit-animation-fill-mode:backwards}.am-slide-top.am-slide-top-add,.am-slide-top.ng-hide-remove,.am-slide-top.ng-move{-webkit-animation-name:slideFromTop;animation-name:slideFromTop}.am-slide-top.am-slide-top-remove,.am-slide-top.ng-hide{-webkit-animation-name:slideToTop;animation-name:slideToTop}.am-slide-top.ng-enter{visibility:hidden;-webkit-animation-name:slideFromTop;animation-name:slideFromTop;-webkit-animation-play-state:paused;animation-play-state:paused}.am-slide-top.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-slide-top.ng-leave{-webkit-animation-name:slideToTop;animation-name:slideToTop;-webkit-animation-play-state:paused;animation-play-state:paused}.am-slide-top.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}.am-slide-right{animation-duration:.3s;animation-timing-function:ease-in-out;animation-fill-mode:backwards}.am-slide-bottom,.am-slide-left{-webkit-animation-duration:.3s;-webkit-animation-timing-function:ease-in-out}.am-slide-right.am-slide-right-add,.am-slide-right.ng-hide-remove,.am-slide-right.ng-move{-webkit-animation-name:slideFromRight;animation-name:slideFromRight}.am-slide-right.am-slide-right-remove,.am-slide-right.ng-hide{-webkit-animation-name:slideToRight;animation-name:slideToRight}.am-slide-right.ng-enter{visibility:hidden;-webkit-animation-name:slideFromRight;animation-name:slideFromRight;-webkit-animation-play-state:paused;animation-play-state:paused}.am-slide-right.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-slide-right.ng-leave{-webkit-animation-name:slideToRight;animation-name:slideToRight;-webkit-animation-play-state:paused;animation-play-state:paused}.am-slide-right.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}.am-slide-bottom{animation-duration:.3s;animation-timing-function:ease-in-out;animation-fill-mode:backwards}.am-fade-and-slide-top,.am-slide-left{-webkit-animation-fill-mode:backwards}.am-slide-bottom.am-slide-bottom-add,.am-slide-bottom.ng-hide-remove,.am-slide-bottom.ng-move{-webkit-animation-name:slideFromBottom;animation-name:slideFromBottom}.am-slide-bottom.am-slide-bottom-remove,.am-slide-bottom.ng-hide{-webkit-animation-name:slideToBottom;animation-name:slideToBottom}.am-slide-bottom.ng-enter{visibility:hidden;-webkit-animation-name:slideFromBottom;animation-name:slideFromBottom;-webkit-animation-play-state:paused;animation-play-state:paused}.am-slide-bottom.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-slide-bottom.ng-leave{-webkit-animation-name:slideToBottom;animation-name:slideToBottom;-webkit-animation-play-state:paused;animation-play-state:paused}.am-slide-bottom.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}.am-slide-left{animation-duration:.3s;animation-timing-function:ease-in-out;animation-fill-mode:backwards}.am-fade-and-slide-right,.am-fade-and-slide-top{-webkit-animation-duration:.3s;-webkit-animation-timing-function:ease-in-out}.am-slide-left.am-slide-left-add,.am-slide-left.ng-hide-remove,.am-slide-left.ng-move{-webkit-animation-name:slideFromLeft;animation-name:slideFromLeft}.am-slide-left.am-slide-left-remove,.am-slide-left.ng-hide{-webkit-animation-name:slideToLeft;animation-name:slideToLeft}.am-slide-left.ng-enter{visibility:hidden;-webkit-animation-name:slideFromLeft;animation-name:slideFromLeft;-webkit-animation-play-state:paused;animation-play-state:paused}.am-slide-left.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-slide-left.ng-leave{-webkit-animation-name:slideToLeft;animation-name:slideToLeft;-webkit-animation-play-state:paused;animation-play-state:paused}.am-slide-left.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes slideFromTop{from{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@keyframes slideFromTop{from{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@-webkit-keyframes slideToTop{to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@keyframes slideToTop{to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@-webkit-keyframes slideFromRight{from{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes slideFromRight{from{-webkit-transform:translateX(100%);transform:translateX(100%)}}@-webkit-keyframes slideToRight{to{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes slideToRight{to{-webkit-transform:translateX(100%);transform:translateX(100%)}}@-webkit-keyframes slideFromBottom{from{-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes slideFromBottom{from{-webkit-transform:translateY(100%);transform:translateY(100%)}}@-webkit-keyframes slideToBottom{to{-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes slideToBottom{to{-webkit-transform:translateY(100%);transform:translateY(100%)}}@-webkit-keyframes slideFromLeft{from{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@keyframes slideFromLeft{from{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@-webkit-keyframes slideToLeft{to{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@keyframes slideToLeft{to{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}.am-fade-and-slide-top{animation-duration:.3s;animation-timing-function:ease-in-out;animation-fill-mode:backwards}.am-fade-and-slide-top.am-fade-and-slide-top-add,.am-fade-and-slide-top.ng-hide-remove,.am-fade-and-slide-top.ng-move{-webkit-animation-name:fadeAndSlideFromTop;animation-name:fadeAndSlideFromTop}.am-fade-and-slide-top.am-fade-and-slide-top-remove,.am-fade-and-slide-top.ng-hide{-webkit-animation-name:fadeAndSlideToTop;animation-name:fadeAndSlideToTop}.am-fade-and-slide-top.ng-enter{visibility:hidden;-webkit-animation-name:fadeAndSlideFromTop;animation-name:fadeAndSlideFromTop;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-slide-top.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-fade-and-slide-top.ng-leave{-webkit-animation-name:fadeAndSlideToTop;animation-name:fadeAndSlideToTop;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-slide-top.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}.am-fade-and-slide-right{animation-duration:.3s;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-fade-and-slide-bottom,.am-fade-and-slide-left{-webkit-animation-duration:.3s;-webkit-animation-timing-function:ease-in-out}.am-fade-and-slide-right.am-fade-and-slide-right-add,.am-fade-and-slide-right.ng-hide-remove,.am-fade-and-slide-right.ng-move{-webkit-animation-name:fadeAndSlideFromRight;animation-name:fadeAndSlideFromRight}.am-fade-and-slide-right.am-fade-and-slide-right-remove,.am-fade-and-slide-right.ng-hide{-webkit-animation-name:fadeAndSlideToRight;animation-name:fadeAndSlideToRight}.am-fade-and-slide-right.ng-enter{visibility:hidden;-webkit-animation-name:fadeAndSlideFromRight;animation-name:fadeAndSlideFromRight;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-slide-right.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-fade-and-slide-right.ng-leave{-webkit-animation-name:fadeAndSlideToRight;animation-name:fadeAndSlideToRight;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-slide-right.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}.am-fade-and-slide-bottom{animation-duration:.3s;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-fade-and-slide-bottom.am-fade-and-slide-bottom-add,.am-fade-and-slide-bottom.ng-hide-remove,.am-fade-and-slide-bottom.ng-move{-webkit-animation-name:fadeAndSlideFromBottom;animation-name:fadeAndSlideFromBottom}.am-fade-and-slide-bottom.am-fade-and-slide-bottom-remove,.am-fade-and-slide-bottom.ng-hide{-webkit-animation-name:fadeAndSlideToBottom;animation-name:fadeAndSlideToBottom}.am-fade-and-slide-bottom.ng-enter{visibility:hidden;-webkit-animation-name:fadeAndSlideFromBottom;animation-name:fadeAndSlideFromBottom;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-slide-bottom.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-fade-and-slide-bottom.ng-leave{-webkit-animation-name:fadeAndSlideToBottom;animation-name:fadeAndSlideToBottom;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-slide-bottom.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}.am-fade-and-slide-left{animation-duration:.3s;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-fade-and-slide-left.am-fade-and-slide-left-add,.am-fade-and-slide-left.ng-hide-remove,.am-fade-and-slide-left.ng-move{-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;-webkit-animation-name:fadeAndSlideFromLeft;animation-name:fadeAndSlideFromLeft}.am-fade-and-slide-left.am-fade-and-slide-left-remove,.am-fade-and-slide-left.ng-hide{-webkit-animation-name:fadeAndSlideToLeft;animation-name:fadeAndSlideToLeft}.am-fade-and-slide-left.ng-enter{visibility:hidden;-webkit-animation-name:fadeAndSlideFromLeft;animation-name:fadeAndSlideFromLeft;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-slide-left.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-fade-and-slide-left.ng-leave{-webkit-animation-name:fadeAndSlideToLeft;animation-name:fadeAndSlideToLeft;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-slide-left.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes fadeAndSlideFromTop{from{opacity:0;-webkit-transform:translateY(-20%);transform:translateY(-20%)}to{opacity:1}}@keyframes fadeAndSlideFromTop{from{opacity:0;-webkit-transform:translateY(-20%);transform:translateY(-20%)}to{opacity:1}}@-webkit-keyframes fadeAndSlideToTop{from{opacity:1}to{opacity:0;-webkit-transform:translateY(-20%);transform:translateY(-20%)}}@keyframes fadeAndSlideToTop{from{opacity:1}to{opacity:0;-webkit-transform:translateY(-20%);transform:translateY(-20%)}}@-webkit-keyframes fadeAndSlideFromRight{from{opacity:0;-webkit-transform:translateX(20%);transform:translateX(20%)}to{opacity:1}}@keyframes fadeAndSlideFromRight{from{opacity:0;-webkit-transform:translateX(20%);transform:translateX(20%)}to{opacity:1}}@-webkit-keyframes fadeAndSlideToRight{from{opacity:1}to{opacity:0;-webkit-transform:translateX(20%);transform:translateX(20%)}}@keyframes fadeAndSlideToRight{from{opacity:1}to{opacity:0;-webkit-transform:translateX(20%);transform:translateX(20%)}}@-webkit-keyframes fadeAndSlideFromBottom{from{opacity:0;-webkit-transform:translateY(20%);transform:translateY(20%)}to{opacity:1}}@keyframes fadeAndSlideFromBottom{from{opacity:0;-webkit-transform:translateY(20%);transform:translateY(20%)}to{opacity:1}}@-webkit-keyframes fadeAndSlideToBottom{from{opacity:1}to{opacity:0;-webkit-transform:translateY(20%);transform:translateY(20%)}}@keyframes fadeAndSlideToBottom{from{opacity:1}to{opacity:0;-webkit-transform:translateY(20%);transform:translateY(20%)}}@-webkit-keyframes fadeAndSlideFromLeft{from{opacity:0;-webkit-transform:translateX(-20%);transform:translateX(-20%)}to{opacity:1}}@keyframes fadeAndSlideFromLeft{from{opacity:0;-webkit-transform:translateX(-20%);transform:translateX(-20%)}to{opacity:1}}@-webkit-keyframes fadeAndSlideToLeft{from{opacity:1}to{opacity:0;-webkit-transform:translateX(-20%);transform:translateX(-20%)}}@keyframes fadeAndSlideToLeft{from{opacity:1}to{opacity:0;-webkit-transform:translateX(-20%);transform:translateX(-20%)}}.am-fade-and-scale{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-fade-and-scale.am-fade-and-scale-add,.am-fade-and-scale.ng-enter,.am-fade-and-scale.ng-hide-remove,.am-fade-and-scale.ng-move{-webkit-animation-name:fadeAndScaleIn;animation-name:fadeAndScaleIn}.am-fade-and-scale.am-fade-and-scale-remove,.am-fade-and-scale.ng-hide,.am-fade-and-scale.ng-leave{-webkit-animation-name:fadeAndScaleOut;animation-name:fadeAndScaleOut}.am-fade-and-scale.ng-enter{visibility:hidden;-webkit-animation-name:fadeAndScaleIn;animation-name:fadeAndScaleIn;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-scale.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-fade-and-scale.ng-leave{-webkit-animation-name:fadeAndScaleOut;animation-name:fadeAndScaleOut;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-scale.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes fadeAndScaleIn{from{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:1}}@keyframes fadeAndScaleIn{from{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}to{opacity:1}}@-webkit-keyframes fadeAndScaleOut{from{opacity:1}to{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}}@keyframes fadeAndScaleOut{from{opacity:1}to{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}}.alert.bottom,.alert.bottom-left,.alert.bottom-right,.alert.top,.alert.top-left,.alert.top-right{position:fixed;z-index:1050;margin:20px}.alert.top,.alert.top-left,.alert.top-right{top:50px}.alert.top{left:0}.alert.top-left{left:0}.alert.bottom,.alert.bottom-left,.alert.bottom-right{bottom:0}.alert.bottom{right:0;left:0}.alert.bottom-left{left:0}.aside .aside-dialog .aside-footer:after,.aside .aside-dialog .aside-footer:before,.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.aside{position:fixed;top:0;bottom:0;z-index:1049;overflow:auto;min-width:320px;background:#fff}@media (max-width:991px){.aside{min-width:240px}}.aside.left{right:auto;left:0}.aside.right{right:0;left:auto}.aside .aside-dialog .aside-header{border-bottom:1px solid #e5e5e5;min-height:16.43px;padding:6px 15px;background:#337ab7;color:#fff}.aside .aside-dialog .aside-header .close{margin-right:-8px;padding:4px 8px;color:#fff;font-size:25px;opacity:.8}.aside .aside-dialog .aside-body{position:relative;padding:15px}.aside .aside-dialog .aside-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.aside .aside-dialog .aside-footer .btn+.btn{margin-left:5px;margin-bottom:0}.aside .aside-dialog .aside-footer .btn-group .btn+.btn{margin-left:-1px}.aside .aside-dialog .aside-footer .btn-block+.btn-block{margin-left:0}.aside-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.aside-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.aside-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.datepicker.dropdown-menu{width:250px;height:270px}.datepicker.dropdown-menu button{outline:0;border:0}.datepicker.dropdown-menu tbody{height:180px}.datepicker.dropdown-menu tbody button{padding:6px}.datepicker.dropdown-menu.datepicker-mode-1 tbody button,.datepicker.dropdown-menu.datepicker-mode-2 tbody button{height:65px}.callout{margin:20px 0;padding:20px;border-left:3px solid #eee}.callout h4{margin-top:0;margin-bottom:5px}.popover.top-left,.popover.top-right{margin-top:-10px}.callout p:last-child{margin-bottom:0}.callout-danger{border-color:#eed3d7;background-color:#fdf7f7}.callout-danger h4{color:#b94a48}.callout-warning{border-color:#faebcc;background-color:#faf8f0}.callout-warning h4{color:#8a6d3b}.callout-info{border-color:#bce8f1;background-color:#f4f8fa}.callout-info h4{color:#34789a}.modal.center .modal-dialog{position:fixed;top:40%;left:50%;min-width:320px;max-width:630px;width:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.popover.top-left .arrow{margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px;left:10%}.popover.top-left .arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.bottom-left,.popover.bottom-right{margin-top:10px}.popover.top-right .arrow{margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px;left:90%}.popover.top-right .arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.bottom-left .arrow{margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px;left:10%}.popover.bottom-left .arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.bottom-right .arrow{margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px;left:90%}.popover.bottom-right .arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.timepicker.dropdown-menu{padding:0 4px}.timepicker.dropdown-menu button{border:0}.timepicker.dropdown-menu tbody button{padding:6px}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-group-xs>.btn{font-size:12px;line-height:1.5;border-radius:3px}.btn-group-sm>.btn{padding:5px 10px}.btn-group-xs>.btn{padding:1px 5px}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.tooltip.tooltip-info.top .tooltip-arrow,.tooltip.tooltip-info.top-left .tooltip-arrow,.tooltip.tooltip-info.top-right .tooltip-arrow{border-top-color:#d9edf7}.tooltip.tooltip-info.right .tooltip-arrow{border-right-color:#d9edf7}.tooltip.tooltip-info.bottom .tooltip-arrow,.tooltip.tooltip-info.bottom-left .tooltip-arrow,.tooltip.tooltip-info.bottom-right .tooltip-arrow{border-bottom-color:#d9edf7}.tooltip.tooltip-info.left .tooltip-arrow{border-left-color:#d9edf7}.tooltip.tooltip-info .tooltip-inner{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.tooltip.tooltip-info .tooltip-inner hr{border-top-color:#a6e1ec}.tooltip.tooltip-info .tooltip-inner .alert-link{color:#245269}.tooltip.tooltip-success.top .tooltip-arrow,.tooltip.tooltip-success.top-left .tooltip-arrow,.tooltip.tooltip-success.top-right .tooltip-arrow{border-top-color:#dff0d8}.tooltip.tooltip-success.right .tooltip-arrow{border-right-color:#dff0d8}.tooltip.tooltip-success.bottom .tooltip-arrow,.tooltip.tooltip-success.bottom-left .tooltip-arrow,.tooltip.tooltip-success.bottom-right .tooltip-arrow{border-bottom-color:#dff0d8}.tooltip.tooltip-success.left .tooltip-arrow{border-left-color:#dff0d8}.tooltip.tooltip-success .tooltip-inner{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.tooltip.tooltip-success .tooltip-inner hr{border-top-color:#c9e2b3}.tooltip.tooltip-success .tooltip-inner .alert-link{color:#2b542c}.tooltip.tooltip-danger.top .tooltip-arrow,.tooltip.tooltip-danger.top-left .tooltip-arrow,.tooltip.tooltip-danger.top-right .tooltip-arrow{border-top-color:#f2dede}.tooltip.tooltip-danger.right .tooltip-arrow{border-right-color:#f2dede}.tooltip.tooltip-danger.bottom .tooltip-arrow,.tooltip.tooltip-danger.bottom-left .tooltip-arrow,.tooltip.tooltip-danger.bottom-right .tooltip-arrow{border-bottom-color:#f2dede}.tooltip.tooltip-danger.left .tooltip-arrow{border-left-color:#f2dede}.tooltip.tooltip-danger .tooltip-inner{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.tooltip.tooltip-danger .tooltip-inner hr{border-top-color:#e4b9c0}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;border-width:5px 5px 0;border-top-color:#000;margin-left:-5px}.tooltip.tooltip-danger .tooltip-inner .alert-link{color:#843534}.tooltip.top-left{margin-top:-3px;padding:5px 0}.tooltip.top-left .tooltip-arrow{left:10%}.tooltip.top-right{margin-top:-3px;padding:5px 0}.tooltip.bottom-left,.tooltip.bottom-right{margin-top:3px;padding:5px 0}.tooltip.top-right .tooltip-arrow{left:90%}.tooltip.bottom-left .tooltip-arrow{top:0;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000;left:10%}.tooltip.bottom-right .tooltip-arrow{top:0;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000;left:90%}
\ No newline at end of file
diff --git a/public/assets/css/common.css b/public/assets/css/common.css
new file mode 100644
index 0000000..e91ae24
--- /dev/null
+++ b/public/assets/css/common.css
@@ -0,0 +1,25 @@
+.navbar .nav>li>a.brand {
+    padding-left:20px;
+    margin-left:0
+}
+
+.content {
+    margin-top:50px;
+    width:100%
+}
+
+footer {
+    position:fixed;
+    left:0px;
+    bottom:0px;
+    height:30px;
+    width:100%;
+    background:#ddd;
+    -webkit-box-shadow:0 8px 6px 6px black;
+    -moz-box-shadow:0 8px 6px 6px black;
+    box-shadow:0 8px 6px 6px black
+}
+
+footer p {
+    padding:5px 0 12px 10px
+}
\ No newline at end of file
diff --git a/public/assets/css/global/components.css b/public/assets/css/global/components.css
new file mode 100644
index 0000000..629354f
--- /dev/null
+++ b/public/assets/css/global/components.css
@@ -0,0 +1,12681 @@
+/*********************************
+ METRONIC SQUARE STYLE COMPONENTS
+*********************************/
+/***
+Rounded corners reset
+***/
+/* Reset rounded corners for all elements */
+div,
+input,
+select,
+textarea,
+span,
+img,
+table,
+label,
+td,
+th,
+p,
+a,
+button,
+ul,
+code,
+pre,
+li {
+  -webkit-border-radius: 0 !important;
+  -moz-border-radius: 0 !important;
+  border-radius: 0 !important;
+}
+
+/* except below bootstrap elements */
+.img-circle {
+  border-radius: 50% !important;
+}
+
+.img-rounded {
+  border-radius: 6px !important;
+}
+
+/***
+General reset
+***/
+/* Set default body */
+body {
+  color: #333333;
+  font-family: "Open Sans", sans-serif;
+  padding: 0px !important;
+  margin: 0px !important;
+  font-size: 13px;
+  direction: ltr;
+}
+
+/*
+ Internet Explorer 10 doesn't differentiate device width from viewport width, and thus doesn't
+ properly apply the media queries in Bootstrap's CSS. To address this,
+ you can optionally include the following CSS and JavaScript to work around this problem until Microsoft issues a fix.
+*/
+@-webkit-viewport {
+  width: device-width;
+}
+@-moz-viewport {
+  width: device-width;
+}
+@-ms-viewport {
+  width: device-width;
+}
+@-o-viewport {
+  width: device-width;
+}
+@viewport {
+  width: device-width;
+}
+/*
+ Internet Explorer 10 doesn't differentiate device width from viewport width,
+ and thus doesn't properly apply the media queries in Bootstrap's CSS. To address this, following CSS code applied
+*/
+@-ms-viewport {
+  width: auto !important;
+}
+/* Custom scrollbars for webkit browsers */
+::-webkit-scrollbar {
+  width: 12px;
+}
+
+::-webkit-scrollbar-track {
+  background-color: #eaeaea;
+  border-left: 1px solid #cecece;
+}
+
+::-webkit-scrollbar-thumb {
+  background-color: #cecece;
+}
+
+::-webkit-scrollbar-thumb:hover {
+  background-color: #aaaaaa;
+}
+
+::-webkit-scrollbar-track {
+  border-radius: 0;
+  box-shadow: none;
+  border: 0;
+}
+
+::-webkit-scrollbar-thumb {
+  border-radius: 0;
+  box-shadow: none;
+  border: 0;
+}
+
+/***
+General typography
+***/
+/* Headings */
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  font-family: "Open Sans", sans-serif;
+  font-weight: 300;
+}
+
+h1 {
+  font-size: 33px;
+}
+
+h2 {
+  font-size: 27px;
+}
+
+h3 {
+  font-size: 23px;
+}
+
+h4 {
+  font-size: 17px;
+}
+
+h5 {
+  font-size: 13px;
+}
+
+h6 {
+  font-size: 12px;
+}
+
+/* Headings helper text */
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small {
+  color: #444444;
+}
+
+/* Block headings */
+h1.block,
+h2.block,
+h3.block,
+h4.block,
+h5.block,
+h6.block {
+  padding-top: 10px;
+  padding-bottom: 10px;
+}
+
+/* Links */
+a {
+  text-shadow: none;
+  color: #5b9bd1;
+}
+a:hover {
+  color: #3175af;
+}
+a:focus, a:hover, a:active {
+  outline: 0;
+}
+
+/* Horizontal break */
+hr {
+  margin: 20px 0;
+  border: 0;
+  border-top: 1px solid #eee;
+  border-bottom: 0;
+}
+
+/* Unstyled List */
+.list-unstyled li > .list-unstyled {
+  margin-left: 25px;
+}
+
+/* Code */
+code {
+  border: 1px solid #e1e1e1;
+  -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
+  -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
+  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
+}
+
+/* Disabled Navigation Link */
+.disabled-link .disable-target {
+  opacity: 0.5 !important;
+  filter: alpha(opacity=50) !important;
+}
+.disabled-link .disable-target:hover {
+  cursor: not-allowed !important;
+}
+.disabled-link:hover {
+  cursor: not-allowed !important;
+}
+
+/***
+Utilities
+***/
+/* Links */
+a:hover {
+  cursor: pointer;
+}
+
+/* Primary Link */
+.primary-link {
+  color: #65A0D0;
+  font-weight: 600;
+}
+.primary-link:hover {
+  color: #5194ca;
+}
+
+/* Rounded Element */
+.rounded-2 {
+  border-radius: 2px !important;
+}
+
+.rounded-3 {
+  border-radius: 3px !important;
+}
+
+.rounded-4 {
+  border-radius: 4px !important;
+}
+
+/* Circle Element */
+.circle {
+  border-radius: 25px !important;
+}
+
+.circle-right {
+  border-radius: 0 25px 25px 0 !important;
+}
+
+.circle-left {
+  border-radius: 25px 0 0 25px !important;
+}
+
+.circle-bottom {
+  border-radius: 0 0 25px 25px !important;
+}
+
+.circle-top {
+  border-radius: 25px 25px 0 0 !important;
+}
+
+/* General utilities */
+.display-none,
+.display-hide {
+  display: none;
+}
+
+.hidden {
+  display: none !important;
+}
+
+.primary-font {
+  font-family: "Open Sans", sans-serif !important;
+}
+
+.bold {
+  font-weight: 700 !important;
+}
+
+.thin {
+  font-weight: 300 !important;
+}
+
+.uppercase {
+  text-transform: uppercase !important;
+}
+
+.fix-margin {
+  margin-left: 0px !important;
+}
+
+.border {
+  border: 1px solid red;
+}
+
+.font-hg {
+  font-size: 23px;
+}
+
+.font-lg {
+  font-size: 18px;
+}
+
+.font-md {
+  font-size: 14px;
+}
+
+.font-sm {
+  font-size: 13px;
+}
+
+.font-xs {
+  font-size: 11px;
+}
+
+.inline {
+  display: inline;
+}
+
+.inline-block {
+  display: inline-block;
+}
+
+.text-align-reverse {
+  text-align: right;
+}
+
+/* Margin and padding utilities */
+.no-space {
+  margin: 0px !important;
+  padding: 0px !important;
+}
+
+.no-margin {
+  margin: 0;
+}
+
+.margin-bottom-5 {
+  margin-bottom: 5px;
+}
+
+.margin-bottom-10 {
+  margin-bottom: 10px !important;
+}
+
+.margin-top-10 {
+  margin-top: 10px !important;
+}
+
+.margin-top-15 {
+  margin-top: 15px !important;
+}
+
+.margin-bottom-15 {
+  margin-bottom: 15px !important;
+}
+
+.margin-bottom-20 {
+  margin-bottom: 20px !important;
+}
+
+.margin-top-20 {
+  margin-top: 20px !important;
+}
+
+.margin-bottom-25 {
+  margin-bottom: 25px !important;
+}
+
+.margin-bottom-30 {
+  margin-bottom: 30px !important;
+}
+
+.margin-right-10 {
+  margin-right: 10px !important;
+}
+
+/* IE8 & IE9 mode utilities */
+.visible-ie8 {
+  display: none;
+}
+
+.ie8 .visible-ie8 {
+  display: inherit !important;
+}
+
+.visible-ie9 {
+  display: none;
+}
+
+.ie9 .visible-ie9 {
+  display: inherit !important;
+}
+
+.hidden-ie8 {
+  display: inherit;
+}
+
+.ie8 .hidden-ie8 {
+  display: none !important;
+}
+
+.hidden-ie9 {
+  display: inherit;
+}
+
+.ie9 .hidden-ie9 {
+  display: none !important;
+}
+
+/***
+Responsive Utils
+***/
+@media (max-width: 1024px) {
+  .hidden-1024 {
+    display: none;
+  }
+}
+@media (max-width: 480px) {
+  .hidden-480 {
+    display: none;
+  }
+}
+@media (max-width: 320px) {
+  .hidden-320 {
+    display: none;
+  }
+}
+/***
+Demo Utils
+***/
+.scrollspy-example {
+  position: relative;
+  height: 200px;
+  margin-top: 10px;
+  overflow: auto;
+}
+
+.util-btn-margin-bottom-5 .btn {
+  margin-bottom: 5px !important;
+}
+
+.util-btn-group-margin-bottom-5 .btn-group {
+  margin-bottom: 5px !important;
+}
+
+/***
+Users
+***/
+.user-info {
+  margin-bottom: 10px !important;
+}
+.user-info img {
+  float: left;
+  margin-right: 5px;
+}
+.user-info .details {
+  display: inline-block;
+}
+.user-info .label {
+  font-weight: 300;
+  font-size: 11px;
+}
+
+/***
+Top News Blocks(new in v1.2.2)
+***/
+.top-news {
+  color: #fff;
+  margin: 8px 0;
+}
+.top-news em {
+  font-size: 13px;
+  margin-bottom: 8px;
+  margin-bottom: 0;
+  font-style: normal;
+  display: block;
+}
+.top-news em i {
+  font-size: 14px;
+}
+.top-news span {
+  font-size: 18px;
+  margin-bottom: 5px;
+  display: block;
+  text-align: left;
+}
+.top-news a {
+  display: block;
+  text-align: left;
+  padding: 10px;
+  position: relative;
+  margin-bottom: 10px;
+}
+.top-news a .top-news-icon {
+  right: 8px;
+  bottom: 15px;
+  opacity: 0.3;
+  font-size: 35px;
+  position: absolute;
+  filter: alpha(opacity=30);
+  /*For IE8*/
+}
+
+/***
+Block Images(new in v1.2.2)
+***/
+.blog-images {
+  margin-bottom: 0;
+}
+.blog-images li {
+  padding: 0;
+  margin: 0;
+  display: inline;
+}
+.blog-images li a:hover {
+  text-decoration: none;
+}
+.blog-images li img {
+  width: 50px;
+  height: 50px;
+  opacity: 0.6;
+  margin: 0 2px 8px;
+}
+.blog-images li img:hover {
+  opacity: 1;
+  box-shadow: 0 0 0 4px #72c02c;
+  transition: all 0.4s ease-in-out 0s;
+  -moz-transition: all 0.4s ease-in-out 0s;
+  -webkit-transition: all 0.4s ease-in-out 0s;
+}
+
+/***
+Sidebar Tags
+***/
+.sidebar-tags li {
+  padding: 0;
+}
+.sidebar-tags li a {
+  color: #555;
+  font-size: 12px;
+  padding: 3px 5px;
+  background: #f7f7f7;
+  margin: 0 2px 5px 0;
+  display: inline-block;
+}
+.sidebar-tags li a:hover, .sidebar-tags li a:hover i {
+  background: #EEE;
+  text-decoration: none;
+  -webkit-transition: all 0.3s ease-in-out;
+  -moz-transition: all 0.3s ease-in-out;
+  -o-transition: all 0.3s ease-in-out;
+  transition: all 0.3s ease-in-out;
+}
+.sidebar-tags li a i {
+  color: #777;
+}
+
+/***
+Custom vertical inline menu
+***/
+.ver-inline-menu {
+  padding: 0;
+  margin: 0;
+  list-style: none;
+}
+.ver-inline-menu li {
+  position: relative;
+  margin-bottom: 1px;
+}
+.ver-inline-menu li i {
+  width: 37px;
+  height: 37px;
+  display: inline-block;
+  color: #b9cbd5;
+  font-size: 15px;
+  padding: 12px 10px 10px 8px;
+  margin: 0 8px 0 0;
+  text-align: center;
+  background: #e0eaf0 !important;
+}
+.ver-inline-menu li a {
+  font-size: 14px;
+  font-weight: 300;
+  color: #557386;
+  display: block;
+  background: #f0f6fa;
+  border-left: solid 2px #c4d5df;
+}
+.ver-inline-menu li:hover a {
+  background: #e0eaf0;
+  text-decoration: none;
+}
+.ver-inline-menu li:hover i {
+  color: #fff;
+  background: #c4d5df !important;
+}
+.ver-inline-menu li.active a {
+  border-left: solid 2px #0c91e5;
+}
+.ver-inline-menu li.active i {
+  background: #0c91e5 !important;
+}
+.ver-inline-menu li.active a, .ver-inline-menu li.active i {
+  color: #fff;
+  background: #169ef4;
+  text-decoration: none;
+}
+.ver-inline-menu li.active a, .ver-inline-menu li:hover a {
+  font-size: 14px;
+}
+.ver-inline-menu li.active:after {
+  content: '';
+  display: inline-block;
+  border-bottom: 6px solid transparent;
+  border-top: 6px solid transparent;
+  border-left: 6px solid #169ef4;
+  position: absolute;
+  top: 12px;
+  right: -5px;
+}
+
+@media (max-width: 767px) {
+  .ver-inline-menu > li.active:after {
+    display: none;
+  }
+}
+/***
+Separated List
+***/
+.list-separated {
+  margin-top: 10px;
+  margin-bottom: 15px;
+}
+.list-separated > div {
+  border-right1: 1px solid #f5f5f5;
+}
+.list-separated > div:last-child {
+  border-right: 0;
+}
+@media (max-width: 767px) {
+  .list-separated {
+    /* 767px */
+  }
+  .list-separated > div {
+    margin-bottom: 20px;
+  }
+}
+
+/***
+Number & Chart Stats
+***/
+.number-stats {
+  margin: 10px 0;
+}
+.number-stats .stat-number {
+  display: inline-block;
+  margin: 0 5px;
+}
+.number-stats .stat-number .title {
+  font-size: 13px;
+  margin-bottom: 3px;
+  color: #B8C3C7;
+}
+.number-stats .stat-number .number {
+  font-size: 27px;
+  line-height: 27px;
+  color: #7D8C9D;
+}
+.number-stats .stat-chart {
+  display: inline-block;
+  margin: 0 5px;
+}
+.number-stats > div {
+  border-right: 1px solid #f5f5f5;
+}
+.number-stats > div:last-child {
+  border-right: 0;
+}
+.number-stats .stat-left {
+  float: right;
+}
+.number-stats .stat-left .stat-number {
+  float: right;
+  text-align: right;
+}
+.number-stats .stat-left .stat-chart {
+  float: right;
+}
+.number-stats .stat-right {
+  float: left !important;
+}
+.number-stats .stat-right .stat-number {
+  float: left;
+  text-align: left;
+}
+.number-stats .stat-right .stat-chart {
+  float: left;
+}
+.number-stats .stat-number {
+  float: left;
+  text-align: left;
+}
+.number-stats .stat-chart {
+  float: left;
+}
+
+/***
+General User Record Listing
+***/
+.general-item-list > .item {
+  padding: 10px 0;
+  border-bottom: 1px solid #F1F4F7;
+}
+.general-item-list > .item:last-child {
+  border-bottom: 0;
+}
+.general-item-list > .item > .item-head {
+  margin-bottom: 5px;
+}
+.general-item-list > .item > .item-head:before, .general-item-list > .item > .item-head:after {
+  content: " ";
+  display: table;
+}
+.general-item-list > .item > .item-head:after {
+  clear: both;
+}
+.general-item-list > .item > .item-head > .item-details {
+  display: inline-block;
+  float: left;
+}
+.general-item-list > .item > .item-head > .item-details > .item-pic {
+  height: 35px;
+  margin-right: 10px;
+  -webkit-border-radius: 100%;
+  -moz-border-radius: 100%;
+  -ms-border-radius: 100%;
+  -o-border-radius: 100%;
+  border-radius: 100%;
+}
+.general-item-list > .item > .item-head > .item-details > .item-name {
+  display: inline-block;
+  margin-right: 10px;
+}
+.general-item-list > .item > .item-head > .item-details > .item-label {
+  color: #C0C9CC;
+}
+.general-item-list > .item > .item-head > .item-status {
+  color: #C0C9CC;
+  top: 10px;
+  position: relative;
+  display: inline-block;
+  float: right;
+}
+.general-item-list > .item > .item-head > .item-status > .badge {
+  margin-top: -2px;
+}
+.general-item-list > .item > .item-body {
+  color: #96a5aa;
+}
+
+/***
+File dropzone
+***/
+.file-drop-zone {
+  border: 2px dashed #ddd;
+  padding: 30px;
+  text-align: center;
+}
+.file-drop-zone.file-drop-zone-over {
+  border-color: #aaa;
+}
+
+/***
+Fontawesome Icons
+***/
+[class^="fa-"],
+[class^="glyphicon-"],
+[class^="icon-"],
+[class*=" fa-"],
+[class*=" glyphicon-"],
+[class*=" icon-"] {
+  display: inline-block;
+  margin-top: 1px;
+  font-size: 14px;
+  *margin-right: .3em;
+  line-height: 14px;
+  -webkit-font-smoothing: antialiased;
+}
+
+/* Make font awesome icons fixed width */
+li [class^="fa-"],
+li [class^="glyphicon-"],
+li [class^="icon-"],
+li [class*=" fa-"],
+li [class*=" glyphicon-"],
+li [class*=" icon-"] {
+  display: inline-block;
+  width: 1.25em;
+  text-align: center;
+}
+
+li [class^="glyphicon-"],
+li [class*=" glyphicon-"] {
+  top: 2px;
+}
+
+li [class^="icon-"],
+li [class*=" icon-"] {
+  top: 1px;
+  position: relative;
+}
+
+li [class^="fa-"].icon-large,
+li [class^="glyphicon-"].icon-large,
+li [class^="icon-"].icon-large,
+li [class*=" fa-"].icon-large,
+li [class*=" glyphicon-"].icon-large,
+li [class*=" icon-"].icon-large {
+  /* increased font size for icon-large */
+  width: 1.5625em;
+}
+
+/* Icon sizing */
+.fa-sm,
+.icon-sm {
+  font-size: 12px;
+}
+
+.fa-lg,
+.icon-lg {
+  font-size: 16px !important;
+}
+
+.fa-2x {
+  font-size: 2em;
+}
+
+.fa-3x {
+  font-size: 3em;
+}
+
+.fa-4x {
+  font-size: 4em;
+}
+
+.fa-5x {
+  font-size: 5em;
+}
+
+/* Icon coloring */
+.icon-state-default {
+  color: #c6c6c6;
+}
+
+.icon-state-success {
+  color: #45B6AF;
+}
+
+.icon-state-info {
+  color: #89C4F4;
+}
+
+.icon-state-warning {
+  color: #dfba49;
+}
+
+.icon-state-danger {
+  color: #F3565D;
+}
+
+/***
+Font Awesome 4.x Demo
+***/
+.fa-item {
+  font-size: 14px;
+  padding: 10px 10px 10px 20px;
+}
+.fa-item i {
+  font-size: 16px;
+  display: inline-block;
+  width: 20px;
+  color: #333;
+}
+.fa-item:hover {
+  cursor: pointer;
+  background: #eee;
+}
+
+/***
+Simple Line Icons Demo
+***/
+.simplelineicons-demo .item-box {
+  display: inline-block;
+  font-size: 16px;
+  margin: 0 -0.22em 1em 0;
+  padding-left: 1em;
+  width: 100%;
+}
+.simplelineicons-demo .item-box .item {
+  background-color: #fff;
+  color: #33383e;
+  border-radius: 8px;
+  display: inline-block;
+  padding: 10px;
+  width: 100%;
+}
+.simplelineicons-demo .item-box .item span {
+  font-size: 22px;
+}
+
+@media only screen and (min-width: 768px) {
+  .simplelineicons-demo .item-box {
+    width: 33.333%;
+  }
+}
+/***
+Glyphicons Demo
+***/
+.glyphicons-demo ul {
+  padding-left: 0;
+  padding-bottom: 1px;
+  margin-bottom: 20px;
+  list-style: none;
+  overflow: hidden;
+}
+
+.bs-glyphicon-class {
+  text-align: center;
+}
+
+.bs-glyphicons {
+  padding-left: 0;
+  padding-bottom: 1px;
+  margin-bottom: 20px;
+  list-style: none;
+  overflow: hidden;
+}
+
+.glyphicons-demo ul li {
+  float: left;
+  width: 25%;
+  height: 115px;
+  padding: 10px;
+  margin: 0 -1px -1px 0;
+  font-size: 14px;
+  line-height: 1.4;
+  text-align: center;
+  border: 1px solid #ddd;
+}
+
+.glyphicons-demo .glyphicon {
+  display: block;
+  margin: 5px auto 10px;
+  font-size: 24px;
+  color: #444;
+}
+
+.glyphicons-demo ul li:hover {
+  background-color: rgba(86, 61, 124, 0.1);
+}
+
+@media (min-width: 768px) {
+  .glyphicons-demo ul li {
+    width: 12.5%;
+  }
+}
+/***
+Customized Bootstrap Alerts
+***/
+.alert {
+  border-width: 1px;
+}
+.alert.alert-borderless {
+  border: 0;
+}
+
+/***
+Bootstrap Alerts
+***/
+.alert-success {
+  background-color: #dff0d8;
+  border-color: #d6e9c6;
+  color: #3c763d;
+}
+.alert-success hr {
+  border-top-color: #c9e2b3;
+}
+.alert-success .alert-link {
+  color: #2b542c;
+}
+
+.alert-info {
+  background-color: #d9edf7;
+  border-color: #bce8f1;
+  color: #31708f;
+}
+.alert-info hr {
+  border-top-color: #a6e1ec;
+}
+.alert-info .alert-link {
+  color: #245269;
+}
+
+.alert-warning {
+  background-color: #fcf8e3;
+  border-color: #faebcc;
+  color: #8a6d3b;
+}
+.alert-warning hr {
+  border-top-color: #f7e1b5;
+}
+.alert-warning .alert-link {
+  color: #66512c;
+}
+
+.alert-danger {
+  background-color: #f2dede;
+  border-color: #ebccd1;
+  color: #a94442;
+}
+.alert-danger hr {
+  border-top-color: #e4b9c0;
+}
+.alert-danger .alert-link {
+  color: #843534;
+}
+
+/***
+Custom Bootstrap Badges
+***/
+.badge {
+  font-size: 11px !important;
+  font-weight: 300;
+  text-align: center;
+  height: 18px;
+  padding: 3px 6px 3px 6px;
+  -webkit-border-radius: 12px !important;
+  -moz-border-radius: 12px !important;
+  border-radius: 12px !important;
+  text-shadow: none !important;
+  text-align: center;
+  vertical-align: middle;
+}
+.badge.badge-roundless {
+  -webkit-border-radius: 0 !important;
+  -moz-border-radius: 0 !important;
+  border-radius: 0 !important;
+}
+.badge.badge-empty {
+  display: inline-block;
+  padding: 0;
+  min-width: 8px;
+  height: 8px;
+  width: 8px;
+}
+
+/* Badge variants */
+.badge-default {
+  background-color: #c6c6c6;
+  background-image: none;
+}
+
+.badge-primary {
+  background-color: #428bca;
+  background-image: none;
+}
+
+.badge-info {
+  background-color: #89C4F4;
+  background-image: none;
+}
+
+.badge-success {
+  background-color: #45B6AF;
+  background-image: none;
+}
+
+.badge-danger {
+  background-color: #F3565D;
+  background-image: none;
+}
+
+.badge-warning {
+  background-color: #dfba49;
+  background-image: none;
+}
+
+/* Fix badge position for navs */
+.nav.nav-pills > li > a > .badge,
+.nav.nav-stacked > li > a > .badge {
+  margin-top: -2px;
+}
+
+/***
+Dropdown Menu Badges
+***/
+.dropdown-menu > li > a > .badge {
+  position: absolute;
+  margin-top: 1px;
+  right: 3px;
+  display: inline;
+  font-size: 11px;
+  font-weight: 300;
+  text-shadow: none;
+  height: 18px;
+  padding: 3px 6px 3px 6px;
+  text-align: center;
+  vertical-align: middle;
+  -webkit-border-radius: 12px !important;
+  -moz-border-radius: 12px !important;
+  border-radius: 12px !important;
+}
+.dropdown-menu.badge-roundless {
+  -webkit-border-radius: 0 !important;
+  -moz-border-radius: 0 !important;
+  border-radius: 0 !important;
+}
+
+/***
+Customized Bootstrap Buttons
+***/
+/* Default buttons */
+.btn {
+  border-width: 0;
+  padding: 7px 14px;
+  font-size: 14px;
+  outline: none !important;
+  background-image: none !important;
+  filter: none;
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+  text-shadow: none;
+}
+.btn.dropdown-toggle, .btn-group .btn.dropdown-toggle, .btn:hover, .btn:disabled, .btn[disabled], .btn:focus, .btn:active, .btn.active {
+  outline: none !important;
+  background-image: none !important;
+  filter: none;
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+  text-shadow: none;
+}
+
+.btn-default {
+  border-width: 1px;
+  padding: 6px 13px;
+}
+
+.btn-block {
+  display: block;
+  width: 100%;
+  padding-left: 0;
+  padding-right: 0;
+}
+
+/* Bootstrap buttons */
+.btn-default {
+  color: #333;
+  background-color: #fff;
+  border-color: #ccc;
+}
+.btn-default:hover, .btn-default:focus, .btn-default:active, .btn-default.active {
+  color: #333;
+  background-color: #ededed;
+  border-color: #b3b3b3;
+}
+.open .btn-default.dropdown-toggle {
+  color: #333;
+  background-color: #ededed;
+  border-color: #b3b3b3;
+}
+.btn-default:active, .btn-default.active {
+  background-image: none;
+  background-color: #e0e0e0;
+}
+.btn-default:active:hover, .btn-default.active:hover {
+  background-color: #e6e6e6;
+}
+.open .btn-default.dropdown-toggle {
+  background-image: none;
+}
+.btn-default.disabled, .btn-default.disabled:hover, .btn-default.disabled:focus, .btn-default.disabled:active, .btn-default.disabled.active, .btn-default[disabled], .btn-default[disabled]:hover, .btn-default[disabled]:focus, .btn-default[disabled]:active, .btn-default[disabled].active, fieldset[disabled] .btn-default, fieldset[disabled] .btn-default:hover, fieldset[disabled] .btn-default:focus, fieldset[disabled] .btn-default:active, fieldset[disabled] .btn-default.active {
+  background-color: #fff;
+  border-color: #ccc;
+}
+.btn-default .badge {
+  color: #fff;
+  background-color: #333;
+}
+.btn-default > i {
+  color: #aaa;
+}
+.btn-default > i[class^="icon-"],
+.btn-default > i[class*="icon-"] {
+  color: #8c8c8c;
+}
+
+.btn-primary {
+  color: #fff;
+  background-color: #428bca;
+  border-color: #357ebd;
+}
+.btn-primary:hover, .btn-primary:focus, .btn-primary:active, .btn-primary.active {
+  color: #fff;
+  background-color: #3379b5;
+  border-color: #2a6496;
+}
+.open .btn-primary.dropdown-toggle {
+  color: #fff;
+  background-color: #3379b5;
+  border-color: #2a6496;
+}
+.btn-primary:active, .btn-primary.active {
+  background-image: none;
+  background-color: #2d6ca2;
+}
+.btn-primary:active:hover, .btn-primary.active:hover {
+  background-color: #3071a9;
+}
+.open .btn-primary.dropdown-toggle {
+  background-image: none;
+}
+.btn-primary.disabled, .btn-primary.disabled:hover, .btn-primary.disabled:focus, .btn-primary.disabled:active, .btn-primary.disabled.active, .btn-primary[disabled], .btn-primary[disabled]:hover, .btn-primary[disabled]:focus, .btn-primary[disabled]:active, .btn-primary[disabled].active, fieldset[disabled] .btn-primary, fieldset[disabled] .btn-primary:hover, fieldset[disabled] .btn-primary:focus, fieldset[disabled] .btn-primary:active, fieldset[disabled] .btn-primary.active {
+  background-color: #428bca;
+  border-color: #357ebd;
+}
+.btn-primary .badge {
+  color: #428bca;
+  background-color: #fff;
+}
+
+.btn-success {
+  color: #fff;
+  background-color: #45B6AF;
+  border-color: #3ea49d;
+}
+.btn-success:hover, .btn-success:focus, .btn-success:active, .btn-success.active {
+  color: #fff;
+  background-color: #3b9c96;
+  border-color: #307f7a;
+}
+.open .btn-success.dropdown-toggle {
+  color: #fff;
+  background-color: #3b9c96;
+  border-color: #307f7a;
+}
+.btn-success:active, .btn-success.active {
+  background-image: none;
+  background-color: #348a84;
+}
+.btn-success:active:hover, .btn-success.active:hover {
+  background-color: #37918b;
+}
+.open .btn-success.dropdown-toggle {
+  background-image: none;
+}
+.btn-success.disabled, .btn-success.disabled:hover, .btn-success.disabled:focus, .btn-success.disabled:active, .btn-success.disabled.active, .btn-success[disabled], .btn-success[disabled]:hover, .btn-success[disabled]:focus, .btn-success[disabled]:active, .btn-success[disabled].active, fieldset[disabled] .btn-success, fieldset[disabled] .btn-success:hover, fieldset[disabled] .btn-success:focus, fieldset[disabled] .btn-success:active, fieldset[disabled] .btn-success.active {
+  background-color: #45B6AF;
+  border-color: #3ea49d;
+}
+.btn-success .badge {
+  color: #45B6AF;
+  background-color: #fff;
+}
+
+.btn-info {
+  color: #fff;
+  background-color: #89C4F4;
+  border-color: #72b8f2;
+}
+.btn-info:hover, .btn-info:focus, .btn-info:active, .btn-info.active {
+  color: #fff;
+  background-color: #68b4f1;
+  border-color: #43a1ed;
+}
+.open .btn-info.dropdown-toggle {
+  color: #fff;
+  background-color: #68b4f1;
+  border-color: #43a1ed;
+}
+.btn-info:active, .btn-info.active {
+  background-image: none;
+  background-color: #51a8ef;
+}
+.btn-info:active:hover, .btn-info.active:hover {
+  background-color: #5aadf0;
+}
+.open .btn-info.dropdown-toggle {
+  background-image: none;
+}
+.btn-info.disabled, .btn-info.disabled:hover, .btn-info.disabled:focus, .btn-info.disabled:active, .btn-info.disabled.active, .btn-info[disabled], .btn-info[disabled]:hover, .btn-info[disabled]:focus, .btn-info[disabled]:active, .btn-info[disabled].active, fieldset[disabled] .btn-info, fieldset[disabled] .btn-info:hover, fieldset[disabled] .btn-info:focus, fieldset[disabled] .btn-info:active, fieldset[disabled] .btn-info.active {
+  background-color: #89C4F4;
+  border-color: #72b8f2;
+}
+.btn-info .badge {
+  color: #89C4F4;
+  background-color: #fff;
+}
+
+.btn-warning {
+  color: #fff;
+  background-color: #dfba49;
+  border-color: #dbb233;
+}
+.btn-warning:hover, .btn-warning:focus, .btn-warning:active, .btn-warning.active {
+  color: #fff;
+  background-color: #daae2b;
+  border-color: #bb9521;
+}
+.open .btn-warning.dropdown-toggle {
+  color: #fff;
+  background-color: #daae2b;
+  border-color: #bb9521;
+}
+.btn-warning:active, .btn-warning.active {
+  background-image: none;
+  background-color: #c89f23;
+}
+.btn-warning:active:hover, .btn-warning.active:hover {
+  background-color: #d0a625;
+}
+.open .btn-warning.dropdown-toggle {
+  background-image: none;
+}
+.btn-warning.disabled, .btn-warning.disabled:hover, .btn-warning.disabled:focus, .btn-warning.disabled:active, .btn-warning.disabled.active, .btn-warning[disabled], .btn-warning[disabled]:hover, .btn-warning[disabled]:focus, .btn-warning[disabled]:active, .btn-warning[disabled].active, fieldset[disabled] .btn-warning, fieldset[disabled] .btn-warning:hover, fieldset[disabled] .btn-warning:focus, fieldset[disabled] .btn-warning:active, fieldset[disabled] .btn-warning.active {
+  background-color: #dfba49;
+  border-color: #dbb233;
+}
+.btn-warning .badge {
+  color: #dfba49;
+  background-color: #fff;
+}
+
+.btn-danger {
+  color: #fff;
+  background-color: #F3565D;
+  border-color: #f13e46;
+}
+.btn-danger:hover, .btn-danger:focus, .btn-danger:active, .btn-danger.active {
+  color: #fff;
+  background-color: #f1353d;
+  border-color: #ec111b;
+}
+.open .btn-danger.dropdown-toggle {
+  color: #fff;
+  background-color: #f1353d;
+  border-color: #ec111b;
+}
+.btn-danger:active, .btn-danger.active {
+  background-image: none;
+  background-color: #ef1d26;
+}
+.btn-danger:active:hover, .btn-danger.active:hover {
+  background-color: #f0262f;
+}
+.open .btn-danger.dropdown-toggle {
+  background-image: none;
+}
+.btn-danger.disabled, .btn-danger.disabled:hover, .btn-danger.disabled:focus, .btn-danger.disabled:active, .btn-danger.disabled.active, .btn-danger[disabled], .btn-danger[disabled]:hover, .btn-danger[disabled]:focus, .btn-danger[disabled]:active, .btn-danger[disabled].active, fieldset[disabled] .btn-danger, fieldset[disabled] .btn-danger:hover, fieldset[disabled] .btn-danger:focus, fieldset[disabled] .btn-danger:active, fieldset[disabled] .btn-danger.active {
+  background-color: #F3565D;
+  border-color: #f13e46;
+}
+.btn-danger .badge {
+  color: #F3565D;
+  background-color: #fff;
+}
+
+/* Button sizes */
+.btn > i {
+  font-size: 14px;
+}
+
+.btn-lg {
+  padding: 10px 16px;
+  font-size: 18px;
+  line-height: 1.33;
+  vertical-align: middle;
+}
+.btn-lg > i {
+  font-size: 18px;
+}
+
+.btn-sm,
+.btn-xs {
+  padding: 4px 10px 5px 10px;
+  font-size: 13px;
+  line-height: 1.5;
+}
+.btn-sm > i,
+.btn-xs > i {
+  font-size: 13px;
+}
+
+.btn-xs {
+  padding: 1px 5px;
+}
+.btn-xs > i {
+  font-size: 12px;
+}
+
+/* Small button in button group */
+.btn-group .input-sm .btn-default {
+  padding-top: 3px;
+  padding-bottom: 3px;
+}
+
+/* Arrow link */
+.btn-arrow-link {
+  vertical-align: middle;
+  display: inline-block;
+  font-size: 13px;
+}
+.btn-arrow-link > i {
+  font-size: 14px;
+  line-height: 14px;
+  vertical-align: top;
+  margin: 2px 3px 2px 3px;
+  color: #999;
+}
+.btn-arrow-link.btn-arrow-link-lg {
+  font-size: 14px;
+}
+.btn-arrow-link.btn-arrow-link-lg > i {
+  font-size: 16px;
+  line-height: 16px;
+  margin: 2px 3px 1px 3px;
+}
+
+/* Circle Buttons */
+.btn-circle {
+  border-radius: 25px !important;
+}
+
+.btn-circle-right {
+  border-radius: 0 25px 25px 0 !important;
+}
+
+.btn-circle-left {
+  border-radius: 25px 0 0 25px !important;
+}
+
+.btn-circle-bottom {
+  border-radius: 0 0 25px 25px !important;
+}
+
+.btn-circle-top {
+  border-radius: 25px 25px 0 0 !important;
+}
+
+.btn-icon-only {
+  height: 34px;
+  width: 34px;
+  text-align: center;
+  padding-left: 0;
+  padding-right: 0;
+}
+.btn-icon-only > [class^="icon-"],
+.btn-icon-only > i {
+  text-align: center;
+  margin-top: 2px;
+}
+
+.btn-sm > [class^="glyphicon-"],
+.btn-sm > [class*=" glyphicon-"],
+.btn-sm > i {
+  font-size: 13px;
+}
+
+.btn-xs > [class^="glyphicon-"],
+.btn-xs > [class*=" glyphicon-"],
+.btn-xs > i {
+  font-size: 11px;
+}
+
+.btn-group.btn-group-circle > .btn:first-child {
+  border-radius: 25px 0 0 25px !important;
+}
+.btn-group.btn-group-circle > .btn:last-child {
+  border-radius: 0 25px 25px 0 !important;
+}
+
+.btn-group.btn-group-devided > .btn {
+  margin-right: 5px;
+}
+.btn-group.btn-group-devided > .btn:last-child {
+  margin-right: 0;
+}
+
+.btn-group-vertical.btn-group-vertical-circle > .btn:first-child {
+  border-radius: 25px 25px 0 0 !important;
+}
+.btn-group-vertical.btn-group-vertical-circle > .btn:last-child {
+  border-radius: 0 0 25px 25px !important;
+}
+
+/***
+Image Carousel
+***/
+.carousel.image-carousel .carousel-inner {
+  padding-top: 0;
+  padding-bottom: 0;
+}
+.carousel.image-carousel .carousel-control i {
+  position: absolute;
+  top: 40%;
+}
+.carousel.image-carousel.image-carousel-hoverable .carousel-control i {
+  display: none;
+}
+.carousel.image-carousel.image-carousel-hoverable:hover .carousel-control i {
+  display: inline-block;
+}
+.carousel.image-carousel .carousel-control.left i {
+  left: 10px;
+}
+.carousel.image-carousel .carousel-control.right i {
+  right: 10px;
+}
+.carousel.image-carousel .carousel-indicators {
+  margin-top: 10px;
+  bottom: -7px;
+}
+.carousel.image-carousel .carousel-indicators li {
+  background-color: #666;
+}
+.carousel.image-carousel .carousel-indicators li.active {
+  background-color: #666;
+}
+.carousel.image-carousel .carousel-caption {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  padding: 15px 15px 25px 15px;
+  background: #333333;
+  background: rgba(0, 0, 0, 0.75);
+}
+.carousel.image-carousel .carousel-caption h4,
+.carousel.image-carousel .carousel-caption h3,
+.carousel.image-carousel .carousel-caption h2,
+.carousel.image-carousel .carousel-caption p {
+  text-align: left;
+  line-height: 20px;
+  color: #ffffff;
+}
+.carousel.image-carousel .carousel-caption h4,
+.carousel.image-carousel .carousel-caption h3,
+.carousel.image-carousel .carousel-caption h2 {
+  margin: 0 0 5px;
+}
+.carousel.image-carousel .carousel-caption h4 a,
+.carousel.image-carousel .carousel-caption h3 a,
+.carousel.image-carousel .carousel-caption h2 a {
+  color: #aaa;
+}
+.carousel.image-carousel .carousel-caption p {
+  margin-bottom: 0;
+}
+.carousel.image-carousel .carousel-caption .item {
+  margin: 0;
+}
+
+/***
+Charts and statistics
+***/
+.chart,
+.pie,
+.bars {
+  overflow: hidden;
+  height: 300px;
+  width: 100%;
+  font-family: "Open Sans", sans-serif !important;
+  font-size: 14px;
+}
+
+/***
+Statistic lists
+***/
+.item-list.table .percent {
+  width: 30px;
+  float: right;
+  margin-right: 10px;
+  margin-top: 3px;
+}
+
+/***
+Chart tooltips
+***/
+.chart-tooltip {
+  clear: both;
+  z-index: 100;
+  background-color: #736e6e !important;
+  padding: 5px !important;
+  color: #fff;
+}
+.chart-tooltip .label {
+  clear: both;
+  display: block;
+  margin-bottom: 2px;
+}
+
+/***
+Mini chart containers
+***/
+.bar-chart,
+.line-chart {
+  display: none;
+}
+
+/***
+Chats
+***/
+.chats {
+  margin: 0;
+  padding: 0;
+  margin-top: -15px;
+}
+.chats li {
+  list-style: none;
+  padding: 5px 0;
+  margin: 10px auto;
+  font-size: 12px;
+}
+.chats li .body {
+  display: block;
+}
+.chats li .avatar {
+  height: 45px;
+  width: 45px;
+  -webkit-border-radius: 50% !important;
+  -moz-border-radius: 50% !important;
+  border-radius: 50% !important;
+}
+.chats li.in .avatar {
+  float: left;
+  margin-right: 10px;
+}
+.chats li.out .avatar {
+  float: right;
+  margin-left: 10px;
+}
+.chats li .name {
+  color: #3590c1;
+  font-size: 13px;
+  font-weight: 400;
+}
+.chats li .datetime {
+  color: #333;
+  font-size: 13px;
+  font-weight: 400;
+}
+.chats li .message {
+  border-radius: 5px !important;
+  -webkit-border-readius: 5px !important;
+  -moz-border-radius: 5px !important;
+  display: block;
+  padding: 5px;
+  position: relative;
+}
+.chats li.in .message {
+  text-align: left;
+  /*border-left: 2px solid #1BBC9B;*/
+  border-left: 2px solid #e9e9e9;
+  margin-left: 65px;
+  background: #e9e9e9;
+}
+.chats li.in .message .arrow {
+  display: block;
+  position: absolute;
+  top: 5px;
+  left: -8px;
+  width: 0;
+  height: 0;
+  border-top: 8px solid transparent;
+  border-bottom: 8px solid transparent;
+  /*border-right: 8px solid #1BBC9B;*/
+  border-right: 8px solid #e9e9e9;
+}
+.chats li.out .message {
+  /*border-right: 2px solid #F3565D;*/
+  border-right: 2px solid #C7E9E6;
+  margin-right: 65px;
+  /*background: #fafafa;*/
+  background: #C7E9E6;
+  text-align: right;
+}
+.chats li.out .message .arrow {
+  display: block;
+  position: absolute;
+  top: 5px;
+  right: -8px;
+  border-top: 8px solid transparent;
+  border-bottom: 8px solid transparent;
+  /*border-left: 8px solid #F3565D;*/
+  border-left: 8px solid #C7E9E6;
+}
+.chats li.out .name,
+.chats li.out .datetime {
+  text-align: right;
+}
+
+.chat-form {
+  margin-top: 15px;
+  padding: 10px;
+  background-color: #e9eff3;
+  overflow: hidden;
+  clear: both;
+}
+.chat-form .input-cont {
+  margin-right: 40px;
+}
+.chat-form .input-cont .form-control {
+  border: 1px solid #ddd;
+  width: 100%  !important;
+  margin-top: 0;
+  background-color: #fff !important;
+}
+.chat-form .input-cont .form-control:focus {
+  border: 1px solid #4b8df9 !important;
+}
+.chat-form .btn-cont {
+  margin-top: -42px;
+  position: relative;
+  float: right;
+  width: 44px;
+}
+.chat-form .btn-cont .arrow {
+  position: absolute;
+  top: 17px;
+  right: 43px;
+  border-top: 8px solid transparent;
+  border-bottom: 8px solid transparent;
+  border-right: 8px solid #4d90fe;
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+.chat-form .btn-cont .btn {
+  margin-top: 8px;
+}
+.chat-form .btn-cont:hover .arrow {
+  border-right-color: #0362fd;
+}
+.chat-form .btn-cont:hover .btn {
+  background-color: #0362fd;
+}
+
+/***
+Customized Bootstrap Close Icon
+***/
+.close {
+  display: inline-block;
+  margin-top: 0px;
+  margin-right: 0px;
+  width: 9px;
+  height: 9px;
+  background-repeat: no-repeat !important;
+  text-indent: -10000px;
+  outline: none;
+  background-image: url("../../images/remove-icon-small.png") !important;
+}
+
+/***
+Customized Bootstrap Dropdowns
+***/
+/***
+Dropdowns
+***/
+.dropup.open > .dropdown-toggle,
+.dropdown.open > .dropdown-toggle {
+  border-color: #ddd;
+}
+
+/***
+Dropdown Menu
+***/
+.dropdown-menu {
+  min-width: 175px;
+  position: absolute;
+  top: 100%;
+  left: 0;
+  z-index: 1000;
+  display: none;
+  float: left;
+  list-style: none;
+  text-shadow: none;
+  padding: 0px;
+  margin: 10px  0px 0px 0px;
+  background-color: #fffff;
+  box-shadow: 5px 5px rgba(102, 102, 102, 0.1);
+  border: 1px solid #eee;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+.dropdown-menu li.divider {
+  background: #f1f3f6;
+}
+.dropdown-menu li > a {
+  padding: 8px 14px;
+  color: #555;
+  text-decoration: none;
+  display: block;
+  clear: both;
+  font-weight: 300;
+  line-height: 18px;
+  white-space: nowrap;
+}
+.dropdown-menu li > a > [class^="fa-"],
+.dropdown-menu li > a > [class*=" fa-"] {
+  color: #888;
+}
+.dropdown-menu li > a > [class^="icon-"],
+.dropdown-menu li > a > [class*=" icon-"] {
+  color: #666;
+}
+.dropdown-menu li > a > [class^="glyphicon-"],
+.dropdown-menu li > a > [class*=" glyphicon-"] {
+  color: #888;
+}
+.dropdown-menu li > a:hover,
+.dropdown-menu .active > a,
+.dropdown-menu .active > a:hover {
+  text-decoration: none;
+  background-image: none;
+  background-color: #f6f6f6;
+  color: #555;
+  filter: none;
+}
+.dropdown-menu.bottom-up {
+  top: auto;
+  bottom: 100%;
+  margin-bottom: 2px;
+}
+
+.dropdown > .dropdown-menu,
+.dropdown-toggle > .dropdown-menu,
+.btn-group > .dropdown-menu {
+  margin-top: 10px;
+}
+.dropdown > .dropdown-menu:before,
+.dropdown-toggle > .dropdown-menu:before,
+.btn-group > .dropdown-menu:before {
+  position: absolute;
+  top: -8px;
+  left: 9px;
+  right: auto;
+  display: inline-block !important;
+  border-right: 8px solid transparent;
+  border-bottom: 8px solid #e0e0e0;
+  border-left: 8px solid transparent;
+  content: '';
+}
+.dropdown > .dropdown-menu:after,
+.dropdown-toggle > .dropdown-menu:after,
+.btn-group > .dropdown-menu:after {
+  position: absolute;
+  top: -7px;
+  left: 10px;
+  right: auto;
+  display: inline-block !important;
+  border-right: 7px solid transparent;
+  border-bottom: 7px solid #fff;
+  border-left: 7px solid transparent;
+  content: '';
+}
+.dropdown > .dropdown-menu.pull-left:before,
+.dropdown-toggle > .dropdown-menu.pull-left:before,
+.btn-group > .dropdown-menu.pull-left:before {
+  left: auto;
+  right: 9px;
+}
+.dropdown > .dropdown-menu.pull-left:after,
+.dropdown-toggle > .dropdown-menu.pull-left:after,
+.btn-group > .dropdown-menu.pull-left:after {
+  left: auto;
+  right: 10px;
+}
+.dropdown > .dropdown-menu.pull-right:before,
+.dropdown-toggle > .dropdown-menu.pull-right:before,
+.btn-group > .dropdown-menu.pull-right:before {
+  left: auto;
+  right: 9px;
+}
+.dropdown > .dropdown-menu.pull-right:after,
+.dropdown-toggle > .dropdown-menu.pull-right:after,
+.btn-group > .dropdown-menu.pull-right:after {
+  left: auto;
+  right: 10px;
+}
+.dropdown.dropup > .dropdown-menu,
+.dropdown-toggle.dropup > .dropdown-menu,
+.btn-group.dropup > .dropdown-menu {
+  margin-top: 0px;
+  margin-bottom: 10px;
+}
+.dropdown.dropup > .dropdown-menu:after, .dropdown.dropup > .dropdown-menu:before,
+.dropdown-toggle.dropup > .dropdown-menu:after,
+.dropdown-toggle.dropup > .dropdown-menu:before,
+.btn-group.dropup > .dropdown-menu:after,
+.btn-group.dropup > .dropdown-menu:before {
+  display: none !important;
+}
+
+/* Dropdown submenu support for Bootsrap 3 */
+.dropdown-submenu {
+  position: relative;
+}
+.dropdown-submenu > .dropdown-menu {
+  top: 5px;
+  left: 100%;
+  margin-top: -6px;
+  margin-left: -1px;
+}
+.dropdown-submenu > a:after {
+  position: absolute;
+  display: inline-block;
+  font-size: 14px;
+  right: 7px;
+  top: 7px;
+  font-family: FontAwesome;
+  height: auto;
+  content: "\f105";
+  font-weight: 300;
+}
+.dropdown-submenu:hover > .dropdown-menu {
+  display: block;
+}
+.dropdown-submenu:hover > a:after {
+  border-left-color: #ffffff;
+}
+.dropdown-submenu.pull-left {
+  float: none;
+}
+.dropdown-submenu.pull-left > .dropdown-menu {
+  left: -100%;
+  margin-left: 10px;
+}
+.dropup .dropdown-submenu > .dropdown-menu {
+  top: auto;
+  bottom: 0;
+  margin-top: 0;
+  margin-bottom: -2px;
+}
+
+.nav.pull-right > li > .dropdown-menu,
+.nav > li > .dropdown-menu.pull-right {
+  right: 0;
+  left: auto;
+}
+.nav.pull-right > li > .dropdown-menu:before,
+.nav > li > .dropdown-menu.pull-right:before {
+  right: 12px;
+  left: auto;
+}
+.nav.pull-right > li > .dropdown-menu:after,
+.nav > li > .dropdown-menu.pull-right:after {
+  right: 13px;
+  left: auto;
+}
+.nav.pull-right > li > .dropdown-menu .dropdown-menu,
+.nav > li > .dropdown-menu.pull-right .dropdown-menu {
+  right: 100%;
+  left: auto;
+  margin-right: -1px;
+  margin-left: 0;
+}
+
+@media (max-width: 767px) {
+  /* 767px */
+  .navbar-nav .open .dropdown-menu {
+    position: absolute;
+    float: left;
+    width: auto;
+    margin-top: 0;
+    background-color: #ffffff;
+    border: 1px solid #efefef;
+    box-shadow: 5px 5px rgba(102, 102, 102, 0.1);
+  }
+  .navbar-nav .open .dropdown-menu > li > a {
+    padding: 6px 0 6px 13px;
+    color: #333;
+  }
+  .navbar-nav .open .dropdown-menu > li > a:hover,
+  .navbar-nav .open .dropdown-menu > li > a:active {
+    ackground-color: #eee;
+  }
+}
+/***
+Dropdown Checkboxes
+***/
+.dropdown-content {
+  padding: 5px;
+}
+.dropdown-content form {
+  margin: 0;
+}
+
+.dropdown.inline .dropdown-menu {
+  display: inline-block;
+  position: relative;
+}
+
+.dropdown-radiobuttons,
+.dropdown-checkboxes {
+  padding: 5px;
+}
+.dropdown-radiobuttons label,
+.dropdown-checkboxes label {
+  display: block;
+  font-weight: 300;
+  color: #333;
+  margin-bottom: 4px;
+  margin-top: 4px;
+}
+.dropdown-radiobuttons label .radio,
+.dropdown-checkboxes label .radio {
+  margin-right: 3px;
+}
+
+/***
+System feeds
+***/
+.feeds {
+  margin: 0px;
+  padding: 0px;
+  list-style: none;
+}
+.feeds li {
+  background-color: #fafafa;
+  color: #82949a;
+  margin-bottom: 7px;
+}
+.feeds li:before, .feeds li:after {
+  display: table;
+  line-height: 0;
+  content: "";
+}
+.feeds li:after {
+  clear: both;
+}
+.feeds li:last-child {
+  margin-bottom: 0px;
+}
+.feeds li .col1 {
+  float: left;
+  width: 100%;
+  clear: both;
+}
+.feeds li .col1 > .cont {
+  float: left;
+  margin-right: 75px;
+  overflow: hidden;
+}
+.feeds li .col1 > .cont > .cont-col1 {
+  float: left;
+  margin-right: -100%;
+}
+.feeds li .col1 > .cont > .cont-col1 > .label {
+  display: inline-block;
+  padding: 5px 4px 6px 5px;
+  vertical-align: middle;
+  text-align: center;
+}
+.feeds li .col1 > .cont > .cont-col1 > .label > i {
+  text-align: center;
+  font-size: 14px;
+}
+.feeds li .col1 > .cont > .cont-col2 {
+  float: left;
+  width: 100%;
+}
+.feeds li .col1 > .cont > .cont-col2 > .desc {
+  margin-left: 35px;
+  padding-top: 4px;
+  padding-bottom: 5px;
+  overflow: hidden;
+}
+.feeds li .col2 {
+  float: left;
+  width: 75px;
+  margin-left: -75px;
+}
+.feeds li .col2 > .date {
+  padding: 4px 9px 5px 4px;
+  text-align: right;
+  font-style: italic;
+  color: #c1cbd0;
+}
+
+/***
+Form Layouts
+****/
+/* Static info */
+.static-info {
+  margin-bottom: 10px;
+}
+.static-info .name {
+  font-size: 14px;
+}
+.static-info .value {
+  font-size: 14px;
+  font-weight: 600;
+}
+.static-info.align-reverse .name, .static-info.align-reverse .value {
+  text-align: right;
+}
+
+/* Help blocks */
+.help-block {
+  margin-top: 5px;
+  margin-bottom: 5px;
+}
+
+.help-inline {
+  font-size: 13px;
+  color: #737373;
+  display: inline-block;
+  padding: 5px;
+}
+
+.form-inline input {
+  margin-bottom: 0px !important;
+}
+
+/* Control Label */
+.control-label {
+  margin-top: 1px;
+}
+.control-label .required {
+  color: #e02222;
+  font-size: 12px;
+  padding-left: 2px;
+}
+
+.form {
+  padding: 0 !important;
+}
+.form .form-body {
+  padding: 10px;
+}
+.portlet.light .form .form-body {
+  padding-left: 0;
+  padding-right: 0;
+}
+.form .form-actions {
+  padding: 20px 10px;
+  margin: 0;
+  background-color: #f5f5f5;
+  border-top: 1px solid #e5e5e5;
+  *zoom: 1;
+}
+.portlet.light .form .form-actions {
+  background: none;
+  padding-left: 0;
+  padding-right: 0;
+}
+.portlet .form .form-actions {
+  -webkit-border-radius: 0 0 4px 4px;
+  -moz-border-radius: 0 0 4px 4px;
+  -ms-border-radius: 0 0 4px 4px;
+  -o-border-radius: 0 0 4px 4px;
+  border-radius: 0 0 4px 4px;
+}
+.form .form-actions:before, .form .form-actions:after {
+  content: " ";
+  display: table;
+}
+.form .form-actions:after {
+  clear: both;
+}
+.form .form-actions.right {
+  padding-left: 0;
+  padding-right: 10px;
+  text-align: right;
+}
+.portlet.light .form .form-actions.right {
+  padding-right: 0;
+}
+.form .form-actions.left {
+  padding-left: 10px;
+  padding-right: 0;
+  text-align: left;
+}
+.portlet.light .form .form-actions.left {
+  padding-left: 0;
+}
+.form .form-actions.nobg {
+  background-color: transparent;
+}
+.form .form-actions.top {
+  margin-top: 0;
+  margin-bottom: 20px;
+  border-top: 0;
+  border-bottom: 1px solid #e5e5e5;
+}
+.portlet.light .form .form-actions.top {
+  background: none;
+}
+.form .form-actions .btn-set {
+  display: inline-block;
+}
+@media (max-width: 767px) {
+  .form .form-actions {
+    /* 767px */
+  }
+  .form .form-actions .btn-set {
+    margin-bottom: 3px;
+    margin-top: 3px;
+    float: left !important;
+  }
+}
+.form .form-section {
+  margin: 30px 0px 25px 0px;
+  padding-bottom: 5px;
+  border-bottom: 1px solid #eee;
+}
+.form .form-section:first-child {
+  margin-top: 5px;
+}
+
+/* Checkboxes */
+.checkbox,
+.form-horizontal .checkbox {
+  padding: 0;
+}
+.checkbox > label,
+.form-horizontal .checkbox > label {
+  padding-left: 0;
+}
+
+.checkbox-list > label {
+  display: block;
+}
+.checkbox-list > label.checkbox-inline {
+  display: inline-block;
+}
+.checkbox-list > label.checkbox-inline:first-child {
+  padding-left: 0;
+}
+
+/* Radio buttons */
+.radio-list > label {
+  display: block;
+}
+.radio-list > label.radio-inline {
+  display: inline-block;
+}
+.radio-list > label.radio-inline:first-child {
+  padding-left: 0;
+}
+
+/* Radio buttons in horizontal forms */
+.form-horizontal .radio-list .radio {
+  padding-top: 1px;
+}
+.form-horizontal .radio-list > label {
+  margin-bottom: 0;
+}
+.form-horizontal .radio > span {
+  margin-top: 2px;
+}
+
+/* Rows seperated form layout */
+.form .form-row-seperated .portlet-body {
+  padding: 0;
+}
+.form .form-row-seperated .form-group {
+  margin: 0;
+  border-bottom: 1px solid #efefef;
+  padding: 15px 0;
+}
+.form .form-row-seperated .form-group.last {
+  border-bottom: 0;
+  margin-bottom: 0;
+  padding-bottom: 13px;
+}
+.form .form-row-seperated .form-group .help-block {
+  margin-bottom: 0;
+}
+.form .form-row-seperated .form-body {
+  padding: 0;
+}
+.form .form-row-seperated .form-actions {
+  padding-left: 15px !important;
+  padding-right: 15px !important;
+}
+
+/* Form bordered */
+.form .form-bordered .form-group {
+  margin: 0;
+  border-bottom: 1px solid #efefef;
+}
+.form .form-bordered .form-group > div {
+  padding: 15px;
+  border-left: 1px solid #efefef;
+}
+@media (max-width: 991px) {
+  .form .form-bordered .form-group > div {
+    /* 991px */
+    border-left: 0;
+  }
+}
+.form .form-bordered .form-group.last {
+  border-bottom: 0;
+}
+.form .form-bordered .form-group .control-label {
+  padding-top: 20px;
+}
+@media (max-width: 991px) {
+  .form .form-bordered .form-group .control-label {
+    /* 991px */
+    padding-top: 10px;
+  }
+}
+.form .form-bordered .form-group .help-block {
+  margin-bottom: 0;
+}
+.form .form-bordered .form-group .form-control {
+  margin: 0;
+}
+.form .form-bordered .form-body {
+  margin: 0;
+  padding: 0;
+}
+.form .form-bordered .form-actions {
+  margin-top: 0;
+  padding-left: 16px !important;
+  padding-right: 16px !important;
+}
+@media (max-width: 991px) {
+  .form .form-bordered .form-actions {
+    /* 991px */
+    padding-left: 15px !important;
+    padding-right: 15px !important;
+  }
+}
+
+/* Horizontal bordered form */
+.form .form-horizontal.form-bordered.form-row-stripped .form-group:nth-child(even) {
+  background-color: #fcfcfc;
+}
+.form .form-horizontal.form-bordered.form-row-stripped .form-control {
+  background: #fff !important;
+}
+.form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) {
+  background-color: #fcfcfc;
+}
+.form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) > div {
+  background-color: #ffffff;
+}
+.form .form-horizontal.form-bordered.form-label-stripped .form-group:nth-child(even) {
+  background-color: #fcfcfc;
+}
+
+/***
+Forms
+***/
+/* Input placeholder font color */
+.form-control::-moz-placeholder {
+  color: #b3b3b3;
+  opacity: 1;
+}
+.form-control:-ms-input-placeholder {
+  color: #b3b3b3;
+}
+.form-control::-webkit-input-placeholder {
+  color: #b3b3b3;
+}
+
+/* Form inputs */
+.form-control {
+  font-size: 14px;
+  font-weight: normal;
+  color: #333;
+  background-color: #fff;
+  border: 1px solid #e5e5e5;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+.form-control:focus {
+  border-color: #999;
+  outline: 0;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {
+  cursor: not-allowed;
+  background-color: #eeeeee;
+}
+.form-control.height-auto {
+  height: auto;
+}
+.form-control.form-control-solid {
+  background-color: #F1F3F8;
+  border-color: #F1F3F8;
+  color: #A6B2BA;
+}
+.form-control.form-control-solid:focus {
+  border-color: #e3e7f1;
+}
+.form-control.form-control-solid::-moz-placeholder {
+  color: #acb7be;
+  opacity: 1;
+}
+.form-control.form-control-solid:-ms-input-placeholder {
+  color: #acb7be;
+}
+.form-control.form-control-solid::-webkit-input-placeholder {
+  color: #acb7be;
+}
+
+/* Form uneditable input */
+.uneditable-input {
+  padding: 6px 12px;
+  min-width: 206px;
+  font-size: 14px;
+  font-weight: normal;
+  height: 34px;
+  color: #333;
+  background-color: #fff;
+  border: 1px solid #e5e5e5;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+
+/* Form input sizing */
+.input-mini {
+  width: 45px !important;
+}
+
+.input-xsmall {
+  width: 80px !important;
+}
+
+.input-small {
+  width: 145px !important;
+}
+
+.input-medium {
+  width: 240px !important;
+}
+
+.input-large {
+  width: 320px !important;
+}
+
+.input-xlarge {
+  width: 420px !important;
+}
+
+.input-inline {
+  display: inline-block;
+  width: auto;
+  vertical-align: middle;
+}
+
+.form-group .input-inline {
+  margin-right: 5px;
+}
+
+.input-sm {
+  height: 28px;
+  padding: 5px 10px;
+  font-size: 13px;
+}
+
+select.input-sm {
+  height: 28px;
+  line-height: 28px;
+  padding: 2px 10px;
+}
+
+@media (max-width: 768px) {
+  /* 768px */
+  .input-large {
+    width: 250px !important;
+  }
+
+  .input-xlarge {
+    width: 300px !important;
+  }
+}
+/* Input  groups */
+.input-group .btn-default {
+  border-color: #e5e5e5;
+}
+.input-group .input-group-addon {
+  border-color: #e5e5e5;
+  background: #e5e5e5;
+  min-width: 39px;
+}
+.input-group .input-group-addon > i {
+  color: #999;
+}
+
+/* Input spinner */
+input[type="text"].spinner,
+input[type="password"].spinner,
+input[type="datetime"].spinner,
+input[type="datetime-local"].spinner,
+input[type="date"].spinner,
+input[type="month"].spinner,
+input[type="time"].spinner,
+input[type="week"].spinner,
+input[type="number"].spinner,
+input[type="email"].spinner,
+input[type="url"].spinner,
+input[type="search"].spinner,
+input[type="tel"].spinner,
+input[type="color"].spinner {
+  background-image: url("../../images/input-spinner.gif") !important;
+  background-repeat: no-repeat;
+  background-position: right 8px;
+}
+
+/* Form labels */
+label {
+  font-weight: 400;
+  font-size: 14px;
+}
+
+/* Static form control */
+.form-control-static {
+  margin: 2px 0;
+  display: inline-block;
+}
+
+/* Feedback states */
+.has-success .help-block,
+.has-success .help-inline,
+.has-success .control-label,
+.has-success .radio,
+.has-success .checkbox,
+.has-success .radio-inline,
+.has-success .checkbox-inline {
+  color: #3c763d;
+}
+.has-success .form-control {
+  border-color: #d6e9c6;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+.has-success .form-control:focus {
+  border-color: #bbdba1;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+.has-success .input-group-addon {
+  color: #3c763d;
+  border-color: #d6e9c6;
+  background-color: #dff0d8;
+}
+.has-success .form-control-feedback {
+  color: #3c763d;
+}
+
+.has-warning .help-block,
+.has-warning .help-inline,
+.has-warning .control-label,
+.has-warning .radio,
+.has-warning .checkbox,
+.has-warning .radio-inline,
+.has-warning .checkbox-inline {
+  color: #8a6d3b;
+}
+.has-warning .form-control {
+  border-color: #faebcc;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+.has-warning .form-control:focus {
+  border-color: #f5d89e;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+.has-warning .input-group-addon {
+  color: #8a6d3b;
+  border-color: #faebcc;
+  background-color: #fcf8e3;
+}
+.has-warning .form-control-feedback {
+  color: #8a6d3b;
+}
+
+.has-error .help-block,
+.has-error .help-inline,
+.has-error .control-label,
+.has-error .radio,
+.has-error .checkbox,
+.has-error .radio-inline,
+.has-error .checkbox-inline {
+  color: #a94442;
+}
+.has-error .form-control {
+  border-color: #ebccd1;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+.has-error .form-control:focus {
+  border-color: #dca7b0;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+.has-error .input-group-addon {
+  color: #a94442;
+  border-color: #ebccd1;
+  background-color: #f2dede;
+}
+.has-error .form-control-feedback {
+  color: #a94442;
+}
+
+/* Circle Inputs */
+.input-circle {
+  border-radius: 25px !important;
+}
+
+.input-circle-right {
+  border-radius: 0 25px 25px 0 !important;
+}
+
+.input-circle-left {
+  border-radius: 25px 0 0 25px !important;
+}
+
+.input-circle-bottom {
+  border-radius: 0 0 25px 25px !important;
+}
+
+.input-circle-top {
+  border-radius: 25px 25px 0 0 !important;
+}
+
+/***
+Custom icon buttons
+***/
+.icon-btn {
+  height: 60px;
+  min-width: 80px;
+  margin: 5px 5px 0 0;
+  border: 1px solid #ddd;
+  padding: 12px 0px 0px 0px;
+  background-color: #fafafa;
+  background-image: none;
+  filter: none;
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+  display: inline-block;
+  color: #646464;
+  text-shadow: none;
+  text-align: center;
+  cursor: pointer;
+  position: relative;
+  -webkit-transition: all 0.3s ease;
+  -moz-transition: all 0.3s ease;
+  -ms-transition: all 0.3s ease;
+  -o-transition: all 0.3s ease;
+  transition: all 0.3s ease;
+}
+.icon-btn:hover {
+  text-decoration: none;
+  border-color: #999;
+  color: #444;
+  text-shadow: 0 1px 0px white;
+  -webkit-transition: all 0.3s ease;
+  -moz-transition: all 0.3s ease;
+  -ms-transition: all 0.3s ease;
+  -o-transition: all 0.3s ease;
+  transition: all 0.3s ease;
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+}
+.icon-btn:hover > .badge {
+  -webkit-transition: all 0.3s ease;
+  -moz-transition: all 0.3s ease;
+  -ms-transition: all 0.3s ease;
+  -o-transition: all 0.3s ease;
+  transition: all 0.3s ease;
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+}
+.icon-btn > div {
+  margin-top: 5px;
+  margin-bottom: 20px;
+  color: #000;
+  font-size: 12px;
+  font-weight: 300;
+}
+.icon-btn > .badge {
+  position: absolute;
+  font-size: 11px;
+  font-weight: 300;
+  top: -5px;
+  right: -5px;
+  padding: 3px 6px 3px 6px;
+  color: white;
+  text-shadow: none;
+  border-width: 0;
+  border-style: solid;
+  -webkit-border-radius: 12px;
+  -moz-border-radius: 12px;
+  border-radius: 12px;
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+}
+.icon-btn > i {
+  font-size: 18px;
+}
+.ie8 .icon-btn:hover {
+  filter: none;
+}
+
+/***
+Input icons
+***/
+.input-icon {
+  position: relative;
+}
+.input-icon > .form-control {
+  padding-left: 33px;
+}
+.input-group .input-icon > .form-control {
+  -webkit-border-radius: 4px 0 0 4px;
+  -moz-border-radius: 4px 0 0 4px;
+  -ms-border-radius: 4px 0 0 4px;
+  -o-border-radius: 4px 0 0 4px;
+  border-radius: 4px 0 0 4px;
+}
+.input-icon > i {
+  color: #ccc;
+  display: block;
+  position: absolute;
+  margin: 11px 2px 4px 10px;
+  z-index: 3;
+  width: 16px;
+  height: 16px;
+  font-size: 16px;
+  text-align: center;
+}
+.modal .input-icon > i {
+  z-index: 10055;
+}
+.has-success .input-icon > i {
+  color: #45B6AF;
+}
+.has-warning .input-icon > i {
+  color: #dfba49;
+}
+.has-info .input-icon > i {
+  color: #89C4F4;
+}
+.has-error .input-icon > i {
+  color: #F3565D;
+}
+.input-icon.right > .form-control {
+  padding-right: 33px;
+  padding-left: 12px;
+}
+.input-group .input-icon.right > .form-control {
+  -webkit-border-radius: 0 4px 4px 0;
+  -moz-border-radius: 0 4px 4px 0;
+  -ms-border-radius: 0 4px 4px 0;
+  -o-border-radius: 0 4px 4px 0;
+  border-radius: 0 4px 4px 0;
+}
+.input-icon.right > i {
+  right: 8px;
+  float: right;
+}
+.input-icon.input-icon-lg > i {
+  margin-top: 16px;
+}
+.input-icon.input-icon-sm > i {
+  margin-top: 8px;
+  font-size: 13px;
+}
+
+/***
+Customized Bootstrap Labels
+***/
+.label {
+  text-shadow: none !important;
+  font-size: 13px;
+  font-weight: 300;
+  padding: 3px 6px 3px 6px;
+  color: #fff;
+  font-family: "Open Sans", sans-serif;
+}
+.label.label-sm {
+  font-size: 12px;
+  padding: 0px 4px 1px 4px;
+}
+h1 .label, h2 .label, h3 .label, h4 .label, h5 .label, h6 .label {
+  font-size: 75%;
+}
+
+/* Labels variants */
+.label-default {
+  background-color: #c6c6c6;
+}
+.label-default[href]:hover, .label-default[href]:focus {
+  background-color: #adadad;
+}
+
+.label-primary {
+  background-color: #428bca;
+}
+.label-primary[href]:hover, .label-primary[href]:focus {
+  background-color: #3071a9;
+}
+
+.label-success {
+  background-color: #45B6AF;
+}
+.label-success[href]:hover, .label-success[href]:focus {
+  background-color: #37918b;
+}
+
+.label-info {
+  background-color: #89C4F4;
+}
+.label-info[href]:hover, .label-info[href]:focus {
+  background-color: #5aadf0;
+}
+
+.label-warning {
+  background-color: #dfba49;
+}
+.label-warning[href]:hover, .label-warning[href]:focus {
+  background-color: #d0a625;
+}
+
+.label-danger {
+  background-color: #F3565D;
+}
+.label-danger[href]:hover, .label-danger[href]:focus {
+  background-color: #f0262f;
+}
+
+/***
+Iconic labels
+***/
+.label.label-icon {
+  padding: 4px 0px 4px 4px;
+  margin-right: 2px;
+  text-align: center !important;
+}
+.label.label-icon > i {
+  font-size: 12px;
+  text-align: center !important;
+}
+.ie8 .label.label-icon, .ie9 .label.label-icon {
+  padding: 3px 0px 3px 3px;
+}
+
+/***
+Text states
+***/
+.text-default {
+  color: #c6c6c6;
+}
+
+.text-primary {
+  color: #428bca;
+}
+
+.text-success {
+  color: #45B6AF;
+}
+
+.text-info {
+  color: #89C4F4;
+}
+
+.text-warning {
+  color: #dfba49;
+}
+
+.text-danger {
+  color: #F3565D;
+}
+
+/***
+Customized List Group
+***/
+/* Contextual variants */
+.list-group .list-group-item-success {
+  color: #3c763d;
+  background-color: #dff0d8;
+}
+.list-group a.list-group-item-success {
+  color: #3c763d;
+}
+.list-group a.list-group-item-success .list-group-item-heading {
+  color: inherit;
+}
+.list-group a.list-group-item-success:hover, .list-group a.list-group-item-success:focus {
+  color: #3c763d;
+  background-color: #d0e9c6;
+}
+.list-group a.list-group-item-success.active, .list-group a.list-group-item-success.active:hover, .list-group a.list-group-item-success.active:focus {
+  color: #fff;
+  background-color: #3c763d;
+  border-color: #3c763d;
+}
+
+.list-group .list-group-item-info {
+  color: #31708f;
+  background-color: #d9edf7;
+}
+.list-group a.list-group-item-info {
+  color: #31708f;
+}
+.list-group a.list-group-item-info .list-group-item-heading {
+  color: inherit;
+}
+.list-group a.list-group-item-info:hover, .list-group a.list-group-item-info:focus {
+  color: #31708f;
+  background-color: #c4e3f3;
+}
+.list-group a.list-group-item-info.active, .list-group a.list-group-item-info.active:hover, .list-group a.list-group-item-info.active:focus {
+  color: #fff;
+  background-color: #31708f;
+  border-color: #31708f;
+}
+
+.list-group .list-group-item-warning {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+}
+.list-group a.list-group-item-warning {
+  color: #8a6d3b;
+}
+.list-group a.list-group-item-warning .list-group-item-heading {
+  color: inherit;
+}
+.list-group a.list-group-item-warning:hover, .list-group a.list-group-item-warning:focus {
+  color: #8a6d3b;
+  background-color: #faf2cc;
+}
+.list-group a.list-group-item-warning.active, .list-group a.list-group-item-warning.active:hover, .list-group a.list-group-item-warning.active:focus {
+  color: #fff;
+  background-color: #8a6d3b;
+  border-color: #8a6d3b;
+}
+
+.list-group .list-group-item-danger {
+  color: #a94442;
+  background-color: #f2dede;
+}
+.list-group a.list-group-item-danger {
+  color: #a94442;
+}
+.list-group a.list-group-item-danger .list-group-item-heading {
+  color: inherit;
+}
+.list-group a.list-group-item-danger:hover, .list-group a.list-group-item-danger:focus {
+  color: #a94442;
+  background-color: #ebcccc;
+}
+.list-group a.list-group-item-danger.active, .list-group a.list-group-item-danger.active:hover, .list-group a.list-group-item-danger.active:focus {
+  color: #fff;
+  background-color: #a94442;
+  border-color: #a94442;
+}
+
+/***
+UI Loading
+***/
+.loading-message {
+  display: inline-block;
+  min-width: 125px;
+  margin-left: -60px;
+  padding: 10px;
+  margin: 0 auto;
+  color: #000 !important;
+  font-size: 13px;
+  font-weight: 400;
+  text-align: center;
+  vertical-align: middle;
+}
+.loading-message.loading-message-boxed {
+  border: 1px solid #ddd;
+  background-color: #eee;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+  -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+  -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+  box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+}
+.loading-message > span {
+  line-height: 20px;
+  vertical-align: middle;
+}
+
+.page-loading {
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+  position: fixed;
+  top: 50%;
+  left: 50%;
+  min-width: 125px;
+  margin-left: -60px;
+  margin-top: -30px;
+  padding: 7px;
+  text-align: center;
+  color: #333;
+  font-size: 13px;
+  border: 1px solid #ddd;
+  background-color: #eee;
+  vertical-align: middle;
+  -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+  -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+  box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+}
+.page-loading > span {
+  line-height: 20px;
+  vertical-align: middle;
+}
+
+.page-spinner-bar {
+  position: fixed;
+  z-index: 10051;
+  width: 100px;
+  top: 40%;
+  left: 50%;
+  margin-left: -55px;
+  text-align: center;
+}
+.page-spinner-bar > div {
+  margin: 0 5px;
+  width: 18px;
+  height: 18px;
+  background: #eee;
+  border-radius: 100% !important;
+  display: inline-block;
+  -webkit-animation: bounceDelay 1.4s infinite ease-in-out;
+  animation: bounceDelay 1.4s infinite ease-in-out;
+  /* Prevent first frame from flickering when animation starts */
+  -webkit-animation-fill-mode: both;
+  animation-fill-mode: both;
+}
+.page-spinner-bar .bounce1 {
+  -webkit-animation-delay: -0.32s;
+  animation-delay: -0.32s;
+}
+.page-spinner-bar .bounce2 {
+  -webkit-animation-delay: -0.16s;
+  animation-delay: -0.16s;
+}
+
+.block-spinner-bar {
+  display: inline-block;
+  width: 80px;
+  text-align: center;
+}
+.block-spinner-bar > div {
+  margin: 0 2px;
+  width: 15px;
+  height: 15px;
+  background: #eee;
+  border-radius: 100% !important;
+  display: inline-block;
+  -webkit-animation: bounceDelay 1.4s infinite ease-in-out;
+  animation: bounceDelay 1.4s infinite ease-in-out;
+  /* Prevent first frame from flickering when animation starts */
+  -webkit-animation-fill-mode: both;
+  animation-fill-mode: both;
+}
+.block-spinner-bar .bounce1 {
+  -webkit-animation-delay: -0.32s;
+  animation-delay: -0.32s;
+}
+.block-spinner-bar .bounce2 {
+  -webkit-animation-delay: -0.16s;
+  animation-delay: -0.16s;
+}
+
+/***
+Metro icons
+***/
+[class^="m-icon-"] {
+  display: inline-block;
+  width: 14px;
+  height: 14px;
+  margin-top: 3px;
+  line-height: 14px;
+  vertical-align: top;
+  background-image: url(../../images/syncfusion-icons.png);
+  background-position: 0 0;
+  background-repeat: no-repeat;
+}
+
+[class^="m-icon-big-"] {
+  display: inline-block;
+  width: 30px;
+  height: 30px;
+  margin: 6px;
+  vertical-align: middle;
+  background-image: url(../../images/syncfusion-icons.png);
+  background-position: 0 0px;
+  background-repeat: no-repeat;
+}
+
+/* large icons */
+.btn.m-icon-big {
+  padding: 9px 16px 8px 16px;
+}
+
+.btn.m-icon-big.m-icon-only {
+  padding: 9px 8px 8px 0px;
+}
+
+.btn.m-icon-big [class^="m-icon-big-"] {
+  margin: 0 0 0 10px;
+}
+
+.btn.m-icon-ony > i {
+  margin-left: 0px;
+}
+
+/* default icons */
+.btn.m-icon {
+  padding: 7px 14px 7px 14px;
+}
+
+.btn.m-icon [class^="m-icon-"] {
+  margin: 4px 0 0 5px;
+}
+
+.btn.m-icon.m-icon-only {
+  padding: 7px 10px 7px 6px;
+}
+
+/* white icon */
+.m-icon-white {
+  background-image: url(../../images/syncfusion-icons-white.png);
+}
+
+/*  Misc */
+.m-icon-swapright {
+  background-position: -27px -10px;
+}
+
+.m-icon-swapdown {
+  background-position: -68px -10px;
+}
+
+.m-icon-swapleft {
+  background-position: -8px -10px;
+}
+
+.m-icon-swapup {
+  background-position: -46px -10px;
+}
+
+.m-icon-big-swapright {
+  background-position: -42px -28px;
+}
+
+.m-icon-big-swapdown {
+  background-position: -115px -28px;
+}
+
+.m-icon-big-swapleft {
+  background-position: -6px -28px;
+}
+
+.m-icon-big-swapup {
+  background-position: -78px -28px;
+}
+
+/***
+Customized Bootstrap Modal
+***/
+.modal {
+  z-index: 10050;
+  outline: none;
+  overflow-y: auto !important;
+  /* Fix content shifting to the right on modal open due to scrollbar closed */
+}
+.modal .modal-header {
+  border-bottom: 1px solid #EFEFEF;
+}
+.modal .modal-header h3 {
+  font-weight: 300;
+}
+.modal .modal-header .close {
+  margin-top: 0px !important;
+}
+.modal .modal-dialog {
+  z-index: 10051;
+}
+.modal > .loading {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  margin-top: -22px;
+  margin-left: -22px;
+}
+.modal.in .page-loading {
+  display: none;
+}
+
+.modal-open {
+  overflow-y: auto !important;
+}
+
+.modal-open-noscroll {
+  overflow-y: hidden !important;
+}
+
+/*.modal-backdrop {
+  border: 0;
+  outline: none;
+  z-index: 10049;
+}
+.modal-backdrop, .modal-backdrop.fade.in {
+  background-color: #333 !important;
+}*/
+
+/* Full width modal */
+.modal-full.modal-dialog {
+  width: 99%;
+}
+
+@media (max-width: 768px) {
+  .modal-full.modal-dialog {
+    width: auto;
+  }
+}
+/***
+Notes
+***/
+.note {
+  margin: 0 0 20px 0;
+  padding: 15px 30px 15px 15px;
+  border-left: 5px solid #eee;
+  -webkit-border-radius: 0 4px 4px 0;
+  -moz-border-radius: 0 4px 4px 0;
+  -ms-border-radius: 0 4px 4px 0;
+  -o-border-radius: 0 4px 4px 0;
+  border-radius: 0 4px 4px 0;
+}
+.note h1,
+.note h2,
+.note h3,
+.note h4,
+.note h5,
+.note h6 {
+  margin-top: 0;
+}
+.note h1 .close,
+.note h2 .close,
+.note h3 .close,
+.note h4 .close,
+.note h5 .close,
+.note h6 .close {
+  margin-right: -10px;
+}
+.note p {
+  font-size: 13px;
+}
+.note p:last-child {
+  margin-bottom: 0;
+}
+.note code,
+.note .highlight {
+  background-color: #fff;
+}
+.note.note-default {
+  background-color: lightgray;
+  border-color: #a0a0a0;
+  color: #333333, 80%;
+}
+.note.note-default.note-bordered {
+  background-color: #c9c9c9;
+  border-color: #a5a5a5;
+}
+.note.note-primary {
+  background-color: #5697d0;
+  border-color: #2a7696;
+  color: #D8E3F2, 80%;
+}
+.note.note-primary.note-bordered {
+  background-color: #468dcb;
+  border-color: #2c7c9e;
+}
+.note.note-success {
+  background-color: #eef7ea;
+  border-color: #bbdba1;
+  color: #3c763d, 80%;
+}
+.note.note-success.note-bordered {
+  background-color: #e2f1dc;
+  border-color: #c1dea8;
+}
+.note.note-info {
+  background-color: #eef7fb;
+  border-color: #91d9e8;
+  color: #31708f, 80%;
+}
+.note.note-info.note-bordered {
+  background-color: #ddeff8;
+  border-color: #9adcea;
+}
+.note.note-warning {
+  background-color: #fcf8e3;
+  border-color: #f2cf87;
+  color: #8a6d3b, 80%;
+}
+.note.note-warning.note-bordered {
+  background-color: #faf3d1;
+  border-color: #f3d390;
+}
+.note.note-danger {
+  background-color: #f9f0f0;
+  border-color: #dca7b0;
+  color: #a94442, 80%;
+}
+.note.note-danger.note-bordered {
+  background-color: #f3e2e2;
+  border-color: #dfaeb7;
+}
+
+/***
+Customized Bootstrap Pagination
+***/
+.pagination {
+  margin: 10px 0;
+}
+.pagination.pagination-circle > li:first-child > a {
+  border-radius: 25px 0 0 25px !important;
+}
+.pagination.pagination-circle > li:last-child > a {
+  border-radius: 0 25px 25px 0 !important;
+}
+.pagination .active > a,
+.pagination .active > a:hover {
+  background: #eee;
+  border-color: #dddddd;
+  color: #333;
+}
+
+/***
+Customized Bootstrap Panels
+***/
+.panel {
+  -webkit-box-shadow: none !important;
+  -moz-box-shadow: none !important;
+  box-shadow: none !important;
+}
+.panel-group .panel {
+  overflow: visible;
+}
+.panel .panel-body {
+  font-size: 13px;
+}
+.panel .panel-title > a:hover {
+  text-decoration: none;
+}
+.accordion .panel .panel-heading {
+  padding: 0;
+}
+.accordion .panel .panel-title {
+  padding: 0;
+}
+.accordion .panel .panel-title .accordion-toggle {
+  display: block;
+  padding: 10px 15px;
+}
+.accordion .panel .panel-title .accordion-toggle.accordion-toggle-styled {
+  background: url("../../images/accordion-plusminus.png") no-repeat;
+  background-position: right -19px;
+  margin-right: 15px;
+}
+.accordion .panel .panel-title .accordion-toggle.accordion-toggle-styled.collapsed {
+  background-position: right 12px;
+}
+
+.panel-default {
+  border-color: #e0e0e0;
+}
+.panel-default > .panel-heading {
+  color: #333333;
+  background-color: #f9f9f9;
+  border-color: #e0e0e0;
+}
+.panel-default > .panel-heading + .panel-collapse .panel-body {
+  border-top-color: #e0e0e0;
+}
+.panel-default > .panel-footer + .panel-collapse .panel-body {
+  border-bottom-color: #e0e0e0;
+}
+
+.panel-primary {
+  border-color: #3595bd;
+}
+.panel-primary > .panel-heading {
+  color: #D8E3F2;
+  background-color: #428bca;
+  border-color: #3595bd;
+}
+.panel-primary > .panel-heading + .panel-collapse .panel-body {
+  border-top-color: #3595bd;
+}
+.panel-primary > .panel-footer + .panel-collapse .panel-body {
+  border-bottom-color: #3595bd;
+}
+
+.panel-success {
+  border-color: #d6e9c6;
+}
+.panel-success > .panel-heading {
+  color: #3c763d;
+  background-color: #dff0d8;
+  border-color: #d6e9c6;
+}
+.panel-success > .panel-heading + .panel-collapse .panel-body {
+  border-top-color: #d6e9c6;
+}
+.panel-success > .panel-footer + .panel-collapse .panel-body {
+  border-bottom-color: #d6e9c6;
+}
+
+.panel-info {
+  border-color: #bce8f1;
+}
+.panel-info > .panel-heading {
+  color: #31708f;
+  background-color: #d9edf7;
+  border-color: #bce8f1;
+}
+.panel-info > .panel-heading + .panel-collapse .panel-body {
+  border-top-color: #bce8f1;
+}
+.panel-info > .panel-footer + .panel-collapse .panel-body {
+  border-bottom-color: #bce8f1;
+}
+
+.panel-warning {
+  border-color: #faebcc;
+}
+.panel-warning > .panel-heading {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+  border-color: #faebcc;
+}
+.panel-warning > .panel-heading + .panel-collapse .panel-body {
+  border-top-color: #faebcc;
+}
+.panel-warning > .panel-footer + .panel-collapse .panel-body {
+  border-bottom-color: #faebcc;
+}
+
+.panel-danger {
+  border-color: #ebccd1;
+}
+.panel-danger > .panel-heading {
+  color: #a94442;
+  background-color: #f2dede;
+  border-color: #ebccd1;
+}
+.panel-danger > .panel-heading + .panel-collapse .panel-body {
+  border-top-color: #ebccd1;
+}
+.panel-danger > .panel-footer + .panel-collapse .panel-body {
+  border-bottom-color: #ebccd1;
+}
+
+/***
+Accordions
+***/
+.accordion-heading {
+  background: #eee;
+}
+.accordion-heading a {
+  text-decoration: none;
+}
+.accordion-heading a:hover {
+  text-decoration: none;
+}
+
+/***
+Customized Bootstrap Popover
+***/
+.popover {
+  box-shadow: 5px 5px rgba(102, 102, 102, 0.1);
+  padding: 0;
+}
+.popover .popover-title {
+  margin: 0 !important;
+}
+
+.popover.name .popover-title,
+name .popover .popover-content,
+.popover.name .popover-content {
+  color: #89C4F4;
+}
+
+.popover.name .popover-title,
+name .popover .popover-content,
+.popover.name .popover-content {
+  color: #428bca;
+}
+
+.popover.name .popover-title,
+name .popover .popover-content,
+.popover.name .popover-content {
+  color: #45B6AF;
+}
+
+.popover.name .popover-title,
+name .popover .popover-content,
+.popover.name .popover-content {
+  color: #dfba49;
+}
+
+.popover.name .popover-title,
+name .popover .popover-content,
+.popover.name .popover-content {
+  color: #F3565D;
+}
+
+/* popover colors*/
+.popovers.yellow + .popover {
+  background: yellow;
+}
+
+.popovers.yellow + .popover .popover-title {
+  background: yellow;
+}
+
+.popovers.yellow + .popover .popover-content {
+  background: yellow;
+}
+
+/***
+Portlets
+***/
+/* Full Screen portlet mode */
+.page-portlet-fullscreen {
+  overflow: hidden;
+}
+
+/* Basic portlet */
+.portlet {
+  margin-top: 0px;
+  margin-bottom: 25px;
+  padding: 0px;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+.portlet.portlet-fullscreen {
+  z-index: 10060;
+  margin: 0;
+  position: fixed;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  width: 100%;
+  height: 100%;
+  background: #fff;
+}
+.portlet.portlet-fullscreen > .portlet-body {
+  overflow-y: auto;
+  overflow-x: hidden;
+  padding: 0 10px;
+}
+.portlet.portlet-fullscreen > .portlet-title {
+  padding: 0 10px;
+}
+.portlet > .portlet-title {
+  border-bottom: 1px solid #eee;
+  padding: 0;
+  margin-bottom: 10px;
+  min-height: 41px;
+  -webkit-border-radius: 4px 4px 0 0;
+  -moz-border-radius: 4px 4px 0 0;
+  -ms-border-radius: 4px 4px 0 0;
+  -o-border-radius: 4px 4px 0 0;
+  border-radius: 4px 4px 0 0;
+}
+.portlet > .portlet-title:before, .portlet > .portlet-title:after {
+  content: " ";
+  display: table;
+}
+.portlet > .portlet-title:after {
+  clear: both;
+}
+.portlet > .portlet-title > .caption {
+  float: left;
+  display: inline-block;
+  font-size: 18px;
+  line-height: 18px;
+  font-weight: 300;
+  padding: 10px 0;
+}
+.portlet > .portlet-title > .caption.bold {
+  font-weight: 400;
+}
+.portlet > .portlet-title > .caption > i {
+  float: left;
+  margin-top: 4px;
+  display: inline-block;
+  font-size: 13px;
+  margin-right: 5px;
+  color: #666;
+}
+.portlet > .portlet-title > .caption > i.glyphicon {
+  margin-top: 2px;
+}
+.portlet > .portlet-title > .caption > .caption-helper {
+  padding: 0;
+  margin: 0;
+  line-height: 13px;
+  color: #9eacb4;
+  font-size: 13px;
+  font-weight: 400;
+}
+.portlet > .portlet-title > .actions {
+  float: right;
+  display: inline-block;
+  padding: 6px 0;
+}
+.portlet > .portlet-title > .actions > .dropdown-menu i {
+  color: #555555;
+}
+.portlet > .portlet-title > .actions > .btn,
+.portlet > .portlet-title > .actions > .btn.btn-sm,
+.portlet > .portlet-title > .actions > .btn-group > .btn,
+.portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm {
+  padding: 4px 10px;
+  font-size: 13px;
+  line-height: 1.5;
+}
+.portlet > .portlet-title > .actions > .btn.btn-default,
+.portlet > .portlet-title > .actions > .btn.btn-sm.btn-default,
+.portlet > .portlet-title > .actions > .btn-group > .btn.btn-default,
+.portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm.btn-default {
+  padding: 3px 9px;
+}
+.portlet > .portlet-title > .actions > .btn > i,
+.portlet > .portlet-title > .actions > .btn.btn-sm > i,
+.portlet > .portlet-title > .actions > .btn-group > .btn > i,
+.portlet > .portlet-title > .actions > .btn-group > .btn.btn-sm > i {
+  font-size: 13px;
+}
+.portlet > .portlet-title > .actions .btn-icon-only {
+  padding: 5px 7px 3px 7px;
+}
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default {
+  padding: 4px 6px 2px 6px;
+}
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default > i {
+  font-size: 14px;
+}
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen {
+  font-family: FontAwesome;
+  color: #a0a0a0;
+  padding-top: 3px;
+}
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen.btn-sm {
+  padding: 3px 3px !important;
+  height: 27px;
+  width: 27px;
+}
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen:before {
+  content: "\f065";
+}
+.portlet > .portlet-title > .actions .btn-icon-only.btn-default.fullscreen.on:before {
+  content: "\f066";
+}
+.portlet > .portlet-title > .tools {
+  float: right;
+  display: inline-block;
+  padding: 12px 0 8px 0;
+}
+.portlet > .portlet-title > .tools > a {
+  display: inline-block;
+  height: 16px;
+  margin-left: 5px;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.portlet > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon.png);
+  background-repeat: no-repeat;
+  width: 11px;
+}
+.portlet > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon.png);
+  background-repeat: no-repeat;
+  width: 12px;
+}
+.portlet > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon.png);
+  width: 13px;
+}
+.portlet > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon.png);
+  width: 14px;
+  visibility: visible;
+}
+.portlet > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon.png);
+  width: 14px;
+  visibility: visible;
+}
+.portlet > .portlet-title > .tools > a.fullscreen {
+  display: inline-block;
+  top: -3px;
+  position: relative;
+  font-size: 13px;
+  font-family: FontAwesome;
+  color: #ACACAC;
+}
+.portlet > .portlet-title > .tools > a.fullscreen:before {
+  content: "\f065";
+}
+.portlet > .portlet-title > .tools > a.fullscreen.on:before {
+  content: "\f066";
+}
+.portlet > .portlet-title > .tools > a:hover {
+  text-decoration: none;
+  -webkit-transition: all 0.1s ease-in-out;
+  -moz-transition: all 0.1s ease-in-out;
+  -o-transition: all 0.1s ease-in-out;
+  -ms-transition: all 0.1s ease-in-out;
+  transition: all 0.1s ease-in-out;
+  opacity: 0.8;
+  filter: alpha(opacity=80);
+}
+.portlet > .portlet-title > .pagination {
+  float: right;
+  display: inline-block;
+  margin: 2px 0 0 0;
+  border: 0;
+  padding: 4px 0;
+}
+.portlet > .portlet-title > .nav-tabs {
+  background: none;
+  margin: 0;
+  float: right;
+  display: inline-block;
+  border: 0;
+}
+.portlet > .portlet-title > .nav-tabs > li {
+  background: none;
+  margin: 0;
+  border: 0;
+}
+.portlet > .portlet-title > .nav-tabs > li > a {
+  background: none;
+  margin: 5px 0 0 1px;
+  border: 0;
+  padding: 8px 10px;
+  color: #fff;
+}
+.portlet > .portlet-title > .nav-tabs > li.active > a, .portlet > .portlet-title > .nav-tabs > li:hover > a {
+  color: #333;
+  background: #fff;
+  border: 0;
+}
+.portlet > .portlet-body {
+  clear: both;
+  -webkit-border-radius: 0 0 4px 4px;
+  -moz-border-radius: 0 0 4px 4px;
+  -ms-border-radius: 0 0 4px 4px;
+  -o-border-radius: 0 0 4px 4px;
+  border-radius: 0 0 4px 4px;
+}
+.portlet > .portlet-empty {
+  min-height: 125px;
+}
+.portlet.full-height-content {
+  margin-bottom: 0;
+}
+
+/* Portlet background colors */
+/* Side bordered portlet */
+.portlet.bordered {
+  border-left: 2px solid #e6e9ec !important;
+}
+.portlet.bordered > .portlet-title {
+  border-bottom: 0;
+}
+
+/* Solid colored portlet */
+.portlet.solid {
+  padding: 0 10px 10px 10px;
+  border: 0px;
+}
+.portlet.solid > .portlet-title {
+  border-bottom: 0;
+  margin-bottom: 10px;
+}
+.portlet.solid > .portlet-title > .caption {
+  padding: 16px 0 2px 0;
+}
+.portlet.solid > .portlet-title > .actions {
+  padding: 12px 0 6px 0;
+}
+.portlet.solid > .portlet-title > .tools {
+  padding: 14px 0 6px 0;
+}
+
+/* Solid bordered portlet */
+.portlet.solid.bordered > .portlet-title {
+  margin-bottom: 10px;
+}
+
+/* Box portlet */
+.portlet.box {
+  padding: 0px !important;
+}
+.portlet.box > .portlet-title {
+  border-bottom: 0;
+  padding: 0 10px;
+  margin-bottom: 0;
+  color: #fff;
+}
+.portlet.box > .portlet-title > .caption {
+  padding: 11px 0 9px 0;
+}
+.portlet.box > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.box > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.box > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.box > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.box > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.box > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+.portlet.box > .portlet-title > .actions {
+  padding: 7px 0 5px 0;
+}
+.portlet.box > .portlet-body {
+  background-color: #fff;
+  padding: 10px;
+}
+.portlet.box.portlet-fullscreen > .portlet-body {
+  padding: 10px;
+}
+
+/* Light Portlet */
+.portlet.light {
+  padding: 12px 20px 15px 20px;
+  background-color: #fff;
+}
+.portlet.light.bordered {
+  border: 1px solid #e1e1e1 !important;
+}
+.portlet.light.bordered > .portlet-title {
+  border-bottom: 1px solid #eee;
+}
+.portlet.light.bg-inverse {
+  background: #F7F7F7;
+}
+.portlet.light > .portlet-title {
+  padding: 0;
+  min-height: 48px;
+}
+.portlet.light > .portlet-title > .caption {
+  color: #666;
+  padding: 10px 0;
+}
+.portlet.light > .portlet-title > .caption > .caption-subject {
+  font-size: 16px;
+}
+.portlet.light > .portlet-title > .caption > i {
+  color: #777;
+  font-size: 15px;
+  font-weight: 300;
+  margin-top: 3px;
+}
+.portlet.light > .portlet-title > .caption.caption-md > .caption-subject {
+  font-size: 15px;
+}
+.portlet.light > .portlet-title > .caption.caption-md > i {
+  font-size: 14px;
+}
+.portlet.light > .portlet-title > .actions {
+  padding: 6px 0 14px 0;
+}
+.portlet.light > .portlet-title > .actions .btn-default {
+  color: #666;
+}
+.portlet.light > .portlet-title > .actions .btn-icon-only {
+  height: 27px;
+  width: 27px;
+}
+.portlet.light > .portlet-title > .actions .dropdown-menu li > a {
+  color: #555;
+}
+.portlet.light > .portlet-title > .inputs {
+  float: right;
+  display: inline-block;
+  padding: 4px 0;
+}
+.portlet.light > .portlet-title > .inputs > .portlet-input .input-icon > i {
+  font-size: 14px;
+  margin-top: 9px;
+}
+.portlet.light > .portlet-title > .inputs > .portlet-input .input-icon > .form-control {
+  height: 30px;
+  padding: 2px 26px 3px 10px;
+  font-size: 13px;
+}
+.portlet.light > .portlet-title > .inputs > .portlet-input > .form-control {
+  height: 30px;
+  padding: 3px 10px;
+  font-size: 13px;
+}
+.portlet.light > .portlet-title > .pagination {
+  padding: 2px 0 13px 0;
+}
+.portlet.light > .portlet-title > .tools {
+  padding: 10px 0 13px 0;
+  margin-top: 2px;
+}
+.portlet.light > .portlet-title > .nav-tabs > li {
+  margin: 0;
+  padding: 0;
+}
+.portlet.light > .portlet-title > .nav-tabs > li > a {
+  margin: 0;
+  padding: 12px 13px 13px 13px;
+  font-size: 13px;
+  color: #666;
+}
+.portlet.light > .portlet-title > .nav-tabs > li.active > a, .portlet.light > .portlet-title > .nav-tabs > li:hover > a {
+  margin: 0;
+  background: none;
+  color: #333;
+}
+.portlet.light.form-fit {
+  padding: 0;
+}
+.portlet.light.form-fit > .portlet-title {
+  padding: 17px 20px 10px 20px;
+  margin-bottom: 0;
+}
+.portlet.light .portlet-body {
+  padding-top: 8px;
+}
+.portlet.light.portlet-fullscreen > .portlet-body {
+  padding: 8px 0;
+}
+
+.tab-pane > p:last-child {
+  margin-bottom: 0px;
+}
+
+/* Reverse aligned tabs */
+.tabs-reversed > li {
+  float: right;
+  margin-right: 0;
+}
+.tabs-reversed > li > a {
+  margin-right: 0;
+}
+
+/* jQuery UI Draggable Portlets */
+.portlet-sortable:not(.portlet-fullscreen) > .portlet-title {
+  cursor: move;
+}
+
+.portlet-sortable-placeholder {
+  border: 2px dashed #eee;
+  margin-bottom: 25px;
+}
+
+.portlet-sortable-empty {
+  height: 45px;
+}
+
+/***
+Customized Progress Bars
+***/
+.progress {
+  border: 0;
+  background-image: none;
+  filter: none;
+  box-shadow: none;
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+}
+.progress.progress-sm {
+  height: 12px;
+}
+
+.progress > .progress-bar-default {
+  background-color: #c6c6c6;
+}
+.progress-striped .progress > .progress-bar-default {
+  background-image: none;
+  background-image: none;
+}
+
+.progress > .progress-bar-success {
+  background-color: #45B6AF;
+}
+.progress-striped .progress > .progress-bar-success {
+  background-image: none;
+  background-image: none;
+}
+
+.progress > .progress-bar-info {
+  background-color: #89C4F4;
+}
+.progress-striped .progress > .progress-bar-info {
+  background-image: none;
+  background-image: none;
+}
+
+.progress > .progress-bar-danger {
+  background-color: #F3565D;
+}
+.progress-striped .progress > .progress-bar-danger {
+  background-image: none;
+  background-image: none;
+}
+
+.progress > .progress-bar-warning {
+  background-color: #dfba49;
+}
+.progress-striped .progress > .progress-bar-warning {
+  background-image: none;
+  background-image: none;
+}
+
+/***
+Dashboard Stats
+***/
+.dashboard-stat {
+  display: block;
+  margin-bottom: 25px;
+  overflow: hidden;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+.dashboard-stat:before, .dashboard-stat:after {
+  content: " ";
+  display: table;
+}
+.dashboard-stat:after {
+  clear: both;
+}
+.portlet .dashboard-stat:last-child {
+  margin-bottom: 0;
+}
+.dashboard-stat .visual {
+  width: 80px;
+  height: 80px;
+  display: block;
+  float: left;
+  padding-top: 10px;
+  padding-left: 15px;
+  margin-bottom: 15px;
+  font-size: 35px;
+  line-height: 35px;
+}
+.dashboard-stat .visual > i {
+  margin-left: -35px;
+  font-size: 110px;
+  line-height: 110px;
+}
+.dashboard-stat .details {
+  position: absolute;
+  right: 15px;
+  padding-right: 15px;
+}
+.dashboard-stat .details .number {
+  padding-top: 25px;
+  text-align: right;
+  font-size: 34px;
+  line-height: 36px;
+  letter-spacing: -1px;
+  margin-bottom: 0px;
+  font-weight: 300;
+}
+.dashboard-stat .details .desc {
+  text-align: right;
+  font-size: 16px;
+  letter-spacing: 0px;
+  font-weight: 300;
+}
+.dashboard-stat .more {
+  clear: both;
+  display: block;
+  padding: 6px 10px 6px 10px;
+  position: relative;
+  text-transform: uppercase;
+  font-weight: 300;
+  font-size: 11px;
+  opacity: 0.7;
+  filter: alpha(opacity=70);
+}
+.dashboard-stat .more:hover {
+  text-decoration: none;
+  opacity: 0.9;
+  filter: alpha(opacity=90);
+}
+.dashboard-stat .more > i {
+  display: inline-block;
+  margin-top: 1px;
+  float: right;
+}
+
+.dashboard-stat-light {
+  padding-bottom: 20px;
+  margin-bottom: 20px;
+}
+.dashboard-stat-light .details {
+  margin-bottom: 5px;
+}
+.dashboard-stat-light .details .number {
+  font-weight: 300;
+  margin-bottom: 0px;
+}
+
+/***
+Dashboard Stats 2
+***/
+.dashboard-stat2 {
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+  background: #fff;
+  padding: 15px 15px 30px 15px;
+  margin-bottom: 20px;
+}
+.dashboard-stat2 .display {
+  margin-bottom: 20px;
+}
+.dashboard-stat2 .display:before, .dashboard-stat2 .display:after {
+  content: " ";
+  display: table;
+}
+.dashboard-stat2 .display:after {
+  clear: both;
+}
+.dashboard-stat2 .display .number {
+  float: left;
+  display: inline-block;
+}
+.dashboard-stat2 .display .number h3 {
+  margin: 0 0 2px 0;
+  padding: 0;
+  font-size: 30px;
+  font-weight: 400;
+}
+.dashboard-stat2 .display .number h3 > small {
+  font-size: 23px;
+}
+.dashboard-stat2 .display .number small {
+  font-size: 14px;
+  color: #AAB5BC;
+  font-weight: 600;
+  text-transform: uppercase;
+}
+.dashboard-stat2 .display .icon {
+  display: inline-block;
+  float: right;
+  padding: 7px 0 0 0;
+}
+.dashboard-stat2 .display .icon > i {
+  color: #cbd4e0;
+  font-size: 26px;
+}
+.dashboard-stat2 .progress-info {
+  clear: both;
+}
+.dashboard-stat2 .progress-info .progress {
+  margin: 0;
+  height: 4px;
+  clear: both;
+  display: block;
+}
+.dashboard-stat2 .progress-info .status {
+  margin-top: 5px;
+  font-size: 11px;
+  color: #AAB5BC;
+  font-weight: 600;
+  text-transform: uppercase;
+}
+.dashboard-stat2 .progress-info .status .status-title {
+  float: left;
+  display: inline-block;
+}
+.dashboard-stat2 .progress-info .status .status-number {
+  float: right;
+  display: inline-block;
+}
+
+/***
+Text Stats
+***/
+.text-stat h3 {
+  margin-top: 5px;
+  margin-bottom: 0px;
+  font-size: 18px;
+}
+.text-stat span {
+  font-size: 13px !important;
+}
+
+@media (max-width: 767px) {
+  /* 767px */
+  .text-stat {
+    margin-top: 20px;
+  }
+}
+/***
+Social Icons
+***/
+.social-icons {
+  padding: 0;
+  margin: 0;
+}
+.social-icons:before, .social-icons:after {
+  content: " ";
+  display: table;
+}
+.social-icons:after {
+  clear: both;
+}
+.social-icons li {
+  float: left;
+  display: inline;
+  list-style: none;
+  margin-right: 5px;
+  margin-bottom: 5px;
+  text-indent: -9999px;
+}
+.social-icons li > a {
+  -webkit-border-radius: 2px;
+  -moz-border-radius: 2px;
+  -ms-border-radius: 2px;
+  -o-border-radius: 2px;
+  border-radius: 2px;
+  width: 28px;
+  height: 28px;
+  display: block;
+  background-position: 0 0;
+  background-repeat: no-repeat;
+  transition: all 0.3s ease-in-out;
+  -o-transition: all 0.3s ease-in-out;
+  -ms-transition: all 0.3s ease-in-out;
+  -moz-transition: all 0.3s ease-in-out;
+  -webkit-transition: all 0.3s ease-in-out;
+}
+.social-icons li:hover > a {
+  background-position: 0 -38px;
+}
+.social-icons li .amazon {
+  background: url(../../images/social/amazon.png) no-repeat;
+}
+.social-icons li .behance {
+  background: url(../../images/social/behance.png) no-repeat;
+}
+.social-icons li .blogger {
+  background: url(../../images/social/blogger.png) no-repeat;
+}
+.social-icons li .deviantart {
+  background: url(../../images/social/deviantart.png) no-repeat;
+}
+.social-icons li .dribbble {
+  background: url(../../images/social/dribbble.png) no-repeat;
+}
+.social-icons li .dropbox {
+  background: url(../../images/social/dropbox.png) no-repeat;
+}
+.social-icons li .evernote {
+  background: url(../../images/social/evernote.png) no-repeat;
+}
+.social-icons li .facebook {
+  background: url(../../images/social/facebook.png) no-repeat;
+}
+.social-icons li .forrst {
+  background: url(../../images/social/forrst.png) no-repeat;
+}
+.social-icons li .github {
+  background: url(../../images/social/github.png) no-repeat;
+}
+.social-icons li .googleplus {
+  background: url(../../images/social/googleplus.png) no-repeat;
+}
+.social-icons li .jolicloud {
+  background: url(../../images/social/jolicloud.png) no-repeat;
+}
+.social-icons li .last-fm {
+  background: url(../../images/social/last-fm.png) no-repeat;
+}
+.social-icons li .linkedin {
+  background: url(../../images/social/linkedin.png) no-repeat;
+}
+.social-icons li .picasa {
+  background: url(../../images/social/picasa.png) no-repeat;
+}
+.social-icons li .pintrest {
+  background: url(../../images/social/pintrest.png) no-repeat;
+}
+.social-icons li .rss {
+  background: url(../../images/social/rss.png) no-repeat;
+}
+.social-icons li .skype {
+  background: url(../../images/social/skype.png) no-repeat;
+}
+.social-icons li .spotify {
+  background: url(../../images/social/spotify.png) no-repeat;
+}
+.social-icons li .stumbleupon {
+  background: url(../../images/social/stumbleupon.png) no-repeat;
+}
+.social-icons li .tumblr {
+  background: url(../../images/social/tumblr.png) no-repeat;
+}
+.social-icons li .twitter {
+  background: url(../../images/social/twitter.png) no-repeat;
+}
+.social-icons li .vimeo {
+  background: url(../../images/social/vimeo.png) no-repeat;
+}
+.social-icons li .wordpress {
+  background: url(../../images/social/wordpress.png) no-repeat;
+}
+.social-icons li .xing {
+  background: url(../../images/social/xing.png) no-repeat;
+}
+.social-icons li .yahoo {
+  background: url(../../images/social/yahoo.png) no-repeat;
+}
+.social-icons li .youtube {
+  background: url(../../images/social/youtube.png) no-repeat;
+}
+.social-icons li .vk {
+  background: url(../../images/social/vk.png) no-repeat;
+}
+.social-icons li .instagram {
+  background: url(../../images/social/instagram.png) no-repeat;
+}
+.social-icons li .reddit {
+  background: url(../../images/social/reddit.png) no-repeat;
+}
+.social-icons li .aboutme {
+  background: url(../../images/social/aboutme.png) no-repeat;
+}
+.social-icons li .flickr {
+  background: url(../../images/social/flickr.png) no-repeat;
+}
+.social-icons li .foursquare {
+  background: url(../../images/social/foursquare.png) no-repeat;
+}
+.social-icons li .gravatar {
+  background: url(../../images/social/gravatar.png) no-repeat;
+}
+.social-icons li .klout {
+  background: url(../../images/social/klout.png) no-repeat;
+}
+.social-icons li .myspace {
+  background: url(../../images/social/myspace.png) no-repeat;
+}
+.social-icons li .quora {
+  background: url(../../images/social/quora.png) no-repeat;
+}
+.social-icons.social-icons-color > li > a {
+  opacity: 0.7;
+  background-position: 0 -38px !important;
+}
+.social-icons.social-icons-color > li > a:hover {
+  opacity: 1;
+}
+.social-icons.social-icons-circle > li > a {
+  border-radius: 25px !important;
+}
+
+/***
+Inline Social Icons
+***/
+.social-icon {
+  display: inline-block !important;
+  width: 28px;
+  height: 28px;
+  background-position: 0 0;
+  background-repeat: no-repeat;
+  -webkit-border-radius: 2px;
+  -moz-border-radius: 2px;
+  -ms-border-radius: 2px;
+  -o-border-radius: 2px;
+  border-radius: 2px;
+  transition: all 0.3s ease-in-out;
+  -o-transition: all 0.3s ease-in-out;
+  -ms-transition: all 0.3s ease-in-out;
+  -moz-transition: all 0.3s ease-in-out;
+  -webkit-transition: all 0.3s ease-in-out;
+}
+.social-icon.social-icon-circle {
+  border-radius: 25px !important;
+}
+
+.social-icon.amazon {
+  background: url(../../images/social/amazon.png) no-repeat;
+}
+.social-icon.behance {
+  background: url(../../images/social/behance.png) no-repeat;
+}
+.social-icon.blogger {
+  background: url(../../images/social/blogger.png) no-repeat;
+}
+.social-icon.deviantart {
+  background: url(../../images/social/deviantart.png) no-repeat;
+}
+.social-icon.dribbble {
+  background: url(../../images/social/dribbble.png) no-repeat;
+}
+.social-icon.dropbox {
+  background: url(../../images/social/dropbox.png) no-repeat;
+}
+.social-icon.evernote {
+  background: url(../../images/social/evernote.png) no-repeat;
+}
+.social-icon.facebook {
+  background: url(../../images/social/facebook.png) no-repeat;
+}
+.social-icon.forrst {
+  background: url(../../images/social/forrst.png) no-repeat;
+}
+.social-icon.github {
+  background: url(../../images/social/github.png) no-repeat;
+}
+.social-icon.googleplus {
+  background: url(../../images/social/googleplus.png) no-repeat;
+}
+.social-icon.jolicloud {
+  background: url(../../images/social/jolicloud.png) no-repeat;
+}
+.social-icon.last-fm {
+  background: url(../../images/social/last-fm.png) no-repeat;
+}
+.social-icon.linkedin {
+  background: url(../../images/social/linkedin.png) no-repeat;
+}
+.social-icon.picasa {
+  background: url(../../images/social/picasa.png) no-repeat;
+}
+.social-icon.pintrest {
+  background: url(../../images/social/pintrest.png) no-repeat;
+}
+.social-icon.rss {
+  background: url(../../images/social/rss.png) no-repeat;
+}
+.social-icon.skype {
+  background: url(../../images/social/skype.png) no-repeat;
+}
+.social-icon.spotify {
+  background: url(../../images/social/spotify.png) no-repeat;
+}
+.social-icon.stumbleupon {
+  background: url(../../images/social/stumbleupon.png) no-repeat;
+}
+.social-icon.tumblr {
+  background: url(../../images/social/tumblr.png) no-repeat;
+}
+.social-icon.twitter {
+  background: url(../../images/social/twitter.png) no-repeat;
+}
+.social-icon.vimeo {
+  background: url(../../images/social/vimeo.png) no-repeat;
+}
+.social-icon.wordpress {
+  background: url(../../images/social/wordpress.png) no-repeat;
+}
+.social-icon.xing {
+  background: url(../../images/social/xing.png) no-repeat;
+}
+.social-icon.yahoo {
+  background: url(../../images/social/yahoo.png) no-repeat;
+}
+.social-icon.youtube {
+  background: url(../../images/social/youtube.png) no-repeat;
+}
+.social-icon.vk {
+  background: url(../../images/social/vk.png) no-repeat;
+}
+.social-icon.instagram {
+  background: url(../../images/social/instagram.png) no-repeat;
+}
+.social-icon.reddit {
+  background: url(../../images/social/reddit.png) no-repeat;
+}
+.social-icon.aboutme {
+  background: url(../../images/social/aboutme.png) no-repeat;
+}
+.social-icon.flickr {
+  background: url(../../images/social/flickr.png) no-repeat;
+}
+.social-icon.foursquare {
+  background: url(../../images/social/foursquare.png) no-repeat;
+}
+.social-icon.gravatar {
+  background: url(../../images/social/gravatar.png) no-repeat;
+}
+.social-icon.klout {
+  background: url(../../images/social/klout.png) no-repeat;
+}
+.social-icon.myspace {
+  background: url(../../images/social/myspace.png) no-repeat;
+}
+.social-icon.quora {
+  background: url(../../images/social/quora.png) no-repeat;
+}
+.social-icon:hover {
+  background-position: 0 -38px;
+}
+
+.social-icon-color {
+  opacity: 0.7;
+  background-position: 0 -38px !important;
+}
+.social-icon-color:hover {
+  opacity: 1;
+}
+
+/***
+Customized Bootstrap Tables
+***/
+/***
+Default table
+***/
+.table.table-bordered thead > tr > th {
+  border-bottom: 0;
+}
+.table tr.heading > th {
+  background-color: #eee !important;
+}
+.table td .img-responsive {
+  width: 100%;
+}
+
+/* Contextual table row variants */
+.table > thead > tr > td.active,
+.table > thead > tr > th.active, .table > thead > tr.active > td, .table > thead > tr.active > th,
+.table > tbody > tr > td.active,
+.table > tbody > tr > th.active,
+.table > tbody > tr.active > td,
+.table > tbody > tr.active > th,
+.table > tfoot > tr > td.active,
+.table > tfoot > tr > th.active,
+.table > tfoot > tr.active > td,
+.table > tfoot > tr.active > th {
+  background: #a6c8e6;
+  color: #132339;
+}
+
+.table-hover > tbody > tr > td.active:hover,
+.table-hover > tbody > tr > th.active:hover, .table-hover > tbody > tr.active:hover > td, .table-hover > tbody > tr.active:hover > th {
+  background: #92bce0;
+}
+
+.table > thead > tr > td.success,
+.table > thead > tr > th.success, .table > thead > tr.success > td, .table > thead > tr.success > th,
+.table > tbody > tr > td.success,
+.table > tbody > tr > th.success,
+.table > tbody > tr.success > td,
+.table > tbody > tr.success > th,
+.table > tfoot > tr > td.success,
+.table > tfoot > tr > th.success,
+.table > tfoot > tr.success > td,
+.table > tfoot > tr.success > th {
+  background: #dff0d8;
+  color: #3c763d;
+}
+
+.table-hover > tbody > tr > td.success:hover,
+.table-hover > tbody > tr > th.success:hover, .table-hover > tbody > tr.success:hover > td, .table-hover > tbody > tr.success:hover > th {
+  background: #d0e9c6;
+}
+
+.table > thead > tr > td.info,
+.table > thead > tr > th.info, .table > thead > tr.info > td, .table > thead > tr.info > th,
+.table > tbody > tr > td.info,
+.table > tbody > tr > th.info,
+.table > tbody > tr.info > td,
+.table > tbody > tr.info > th,
+.table > tfoot > tr > td.info,
+.table > tfoot > tr > th.info,
+.table > tfoot > tr.info > td,
+.table > tfoot > tr.info > th {
+  background: #d9edf7;
+  color: #31708f;
+}
+
+.table-hover > tbody > tr > td.info:hover,
+.table-hover > tbody > tr > th.info:hover, .table-hover > tbody > tr.info:hover > td, .table-hover > tbody > tr.info:hover > th {
+  background: #c4e3f3;
+}
+
+.table > thead > tr > td.warning,
+.table > thead > tr > th.warning, .table > thead > tr.warning > td, .table > thead > tr.warning > th,
+.table > tbody > tr > td.warning,
+.table > tbody > tr > th.warning,
+.table > tbody > tr.warning > td,
+.table > tbody > tr.warning > th,
+.table > tfoot > tr > td.warning,
+.table > tfoot > tr > th.warning,
+.table > tfoot > tr.warning > td,
+.table > tfoot > tr.warning > th {
+  background: #fcf8e3;
+  color: #8a6d3b;
+}
+
+.table-hover > tbody > tr > td.warning:hover,
+.table-hover > tbody > tr > th.warning:hover, .table-hover > tbody > tr.warning:hover > td, .table-hover > tbody > tr.warning:hover > th {
+  background: #faf2cc;
+}
+
+.table > thead > tr > td.danger,
+.table > thead > tr > th.danger, .table > thead > tr.danger > td, .table > thead > tr.danger > th,
+.table > tbody > tr > td.danger,
+.table > tbody > tr > th.danger,
+.table > tbody > tr.danger > td,
+.table > tbody > tr.danger > th,
+.table > tfoot > tr > td.danger,
+.table > tfoot > tr > th.danger,
+.table > tfoot > tr.danger > td,
+.table > tfoot > tr.danger > th {
+  background: #f2dede;
+  color: #a94442;
+}
+
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr.danger:hover > th {
+  background: #ebcccc;
+}
+
+/***
+Responsive & Scrollable Tables
+***/
+.table-scrollable {
+  width: 100%;
+  overflow-x: auto;
+  overflow-y: hidden;
+  border: 1px solid #dddddd;
+  margin: 10px 0 !important;
+}
+.table-scrollable.table-scrollable-borderless {
+  border: 0;
+}
+.table-scrollable > .table {
+  width: 100% !important;
+  margin: 0 !important;
+  margin-bottom: 0;
+  background-color: #fff;
+}
+.table-scrollable > .table > thead > tr > th,
+.table-scrollable > .table > tbody > tr > th,
+.table-scrollable > .table > tfoot > tr > th,
+.table-scrollable > .table > tfoot > tr > th,
+.table-scrollable > .table > tfoot > tr > td {
+  white-space: nowrap;
+}
+.table-scrollable > .table-bordered {
+  border: 0;
+}
+.table-scrollable > .table-bordered > thead > tr > th:first-child,
+.table-scrollable > .table-bordered > tbody > tr > th:first-child,
+.table-scrollable > .table-bordered > tfoot > tr > th:first-child,
+.table-scrollable > .table-bordered > thead > tr > td:first-child,
+.table-scrollable > .table-bordered > tbody > tr > td:first-child,
+.table-scrollable > .table-bordered > tfoot > tr > td:first-child {
+  border-left: 0;
+}
+.table-scrollable > .table-bordered > thead > tr > th:last-child,
+.table-scrollable > .table-bordered > tbody > tr > th:last-child,
+.table-scrollable > .table-bordered > tfoot > tr > th:last-child,
+.table-scrollable > .table-bordered > thead > tr > td:last-child,
+.table-scrollable > .table-bordered > tbody > tr > td:last-child,
+.table-scrollable > .table-bordered > tfoot > tr > td:last-child {
+  border-right: 0;
+}
+.table-scrollable > .table-bordered > thead > tr:last-child > th,
+.table-scrollable > .table-bordered > tbody > tr:last-child > th,
+.table-scrollable > .table-bordered > tfoot > tr:last-child > th,
+.table-scrollable > .table-bordered > thead > tr:last-child > td,
+.table-scrollable > .table-bordered > tbody > tr:last-child > td,
+.table-scrollable > .table-bordered > tfoot > tr:last-child > td {
+  border-bottom: 0;
+}
+
+/***
+Responsive Flip Scroll Tables
+***/
+.flip-scroll table {
+  width: 100%;
+}
+
+@media only screen and (max-width: 768px) {
+  /* 768px */
+  .flip-scroll .flip-content:after {
+    visibility: hidden;
+    display: block;
+    font-size: 0;
+    content: " ";
+    clear: both;
+    height: 0;
+  }
+
+  .flip-scroll * html .flip-content {
+    zoom: 1;
+  }
+
+  .flip-scroll *:first-child + html .flip-content {
+    zoom: 1;
+  }
+
+  .flip-scroll table {
+    width: 100%;
+    border-collapse: collapse;
+    border-spacing: 0;
+  }
+
+  .flip-scroll th,
+  .flip-scroll td {
+    margin: 0;
+    vertical-align: top;
+  }
+
+  .flip-scroll th {
+    text-align: left;
+    border: 0 !important;
+    border-bottom: 1px solid #ddd !important;
+    border-right: 1px solid #ddd !important;
+    font-size: 13px !important;
+    padding: 5px;
+    width: auto !important;
+  }
+
+  .flip-scroll table {
+    display: block;
+    position: relative;
+    width: 100%;
+  }
+
+  .flip-scroll thead {
+    display: block;
+    float: left;
+  }
+
+  .flip-scroll tbody {
+    display: block;
+    width: auto;
+    position: relative;
+    overflow-x: auto;
+    white-space: nowrap;
+  }
+
+  .flip-scroll thead tr {
+    display: block;
+  }
+
+  .flip-scroll th {
+    display: block;
+    text-align: right;
+  }
+
+  .flip-scroll tbody tr {
+    display: inline-block;
+    vertical-align: top;
+    margin-left: -5px;
+  }
+
+  .flip-scroll td {
+    display: block;
+    min-height: 1.25em;
+    text-align: left;
+    border-top: 0 !important;
+    border-left: 0 !important;
+    border-right: 0 !important;
+  }
+
+  /* sort out borders */
+  .flip-scroll th {
+    border-bottom: 0;
+    border-left: 0;
+  }
+
+  .flip-scroll td {
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 0;
+  }
+
+  .flip-scroll tbody tr {
+    border-left: 1px solid #ddd;
+  }
+
+  .flip-scroll th:last-child,
+  .flip-scroll td:last-child {
+    border-bottom: 1px solid #ddd;
+  }
+}
+/***
+Custom tables
+***/
+.table-toolbar {
+  margin-bottom: 15px;
+}
+.table-toolbar:before, .table-toolbar:after {
+  content: " ";
+  display: table;
+}
+.table-toolbar:after {
+  clear: both;
+}
+
+.table.table-full-width {
+  width: 100% !important;
+}
+
+.table .btn {
+  margin-top: 0px;
+  margin-left: 0px;
+  margin-right: 5px;
+}
+
+.table thead tr th {
+  font-size: 14px;
+  font-weight: 600;
+}
+
+.table-advance {
+  margin-bottom: 10px !important;
+}
+
+.table-advance thead {
+  color: #999;
+}
+
+.table-advance thead tr th {
+  background-color: #DDD;
+  font-size: 14px;
+  font-weight: 400;
+  color: #666;
+}
+
+.table-advance div.success,
+.table-advance div.info,
+.table-advance div.important,
+.table-advance div.warning,
+.table-advance div.danger {
+  position: absolute;
+  margin-top: -5px;
+  float: left;
+  width: 2px;
+  height: 30px;
+  margin-right: 20px !important;
+}
+
+.table-advance tr td {
+  border-left-width: 0px;
+}
+
+.table-advance tr td:first-child {
+  border-left-width: 1px !important;
+}
+
+.table-advance tr td.highlight:first-child a {
+  margin-left: 15px;
+}
+
+.table-advance td.highlight div.primary {
+  border-left: 2px solid #428bca;
+}
+
+.table-advance td.highlight div.success {
+  border-left: 2px solid #45B6AF;
+}
+
+.table-advance td.highlight div.info {
+  border-left: 2px solid #89C4F4;
+}
+
+.table-advance td.highlight div.warning {
+  border-left: 2px solid #dfba49;
+}
+
+.table-advance td.highlight div.danger {
+  border-left: 2px solid #F3565D;
+}
+
+@media (max-width: 767px) {
+  /* 767px */
+  .table-advance tr > td.highlight:first-child a {
+    margin-left: 8px;
+  }
+}
+/***
+Light Table
+***/
+.table.table-light {
+  border: 0 !important;
+}
+.table.table-light > thead > tr:hover > th {
+  background: none;
+}
+.table.table-light > thead > tr.uppercase {
+  text-transform: uppercase;
+}
+.table.table-light > thead > tr > th {
+  font-weight: 600;
+  font-size: 13px;
+  color: #a7b3b9;
+  font-family: "Open Sans", sans-serif;
+  border: 0;
+  border-bottom: 1px solid #F2F5F8;
+}
+.table.table-light > tbody > tr:last-child > td {
+  border: 0;
+}
+.table.table-light > tbody > tr > td {
+  border: 0;
+  border-bottom: 1px solid #F2F5F8;
+  color: #9ca8b0;
+  vertical-align: middle;
+}
+.table.table-light > tbody > tr > td.fit {
+  width: 1px;
+  padding-right: 3px;
+}
+.table.table-light > tbody > tr > td .user-pic {
+  display: inline-block;
+  vertical-align: middle;
+  height: 30px;
+  -webkit-border-radius: 100%;
+  -moz-border-radius: 100%;
+  -ms-border-radius: 100%;
+  -o-border-radius: 100%;
+  border-radius: 100%;
+}
+.table.table-light.table-hover > tbody > tr > td:hover,
+.table.table-light.table-hover > tbody > tr > th:hover, .table.table-light.table-hover > tbody > tr:hover > td, .table.table-light.table-hover > tbody > tr:hover > th {
+  background: #f9fafb;
+}
+
+/***
+Customized Bootstrap Tabs
+***/
+/* Tabs and pills */
+.nav-tabs,
+.nav-pills {
+  margin-bottom: 10px;
+}
+.nav-tabs > li > a,
+.nav-pills > li > a {
+  font-size: 14px;
+}
+.nav-tabs > li > a > .badge,
+.nav-pills > li > a > .badge {
+  margin-top: -3px;
+}
+.nav-tabs > li .dropdown-menu:before, .nav-tabs > li .dropdown-menu:after,
+.nav-pills > li .dropdown-menu:before,
+.nav-pills > li .dropdown-menu:after {
+  display: none;
+}
+.nav-tabs.nav-tabs-sm > li > a, .nav-tabs.nav-pills-sm > li > a,
+.nav-pills.nav-tabs-sm > li > a,
+.nav-pills.nav-pills-sm > li > a {
+  font-size: 13px;
+}
+.nav-tabs .dropdown.open > .dropdown-toggle,
+.nav-pills .dropdown.open > .dropdown-toggle {
+  background: #eee;
+  color: #0d638f;
+  border-color: transparent;
+}
+
+/* Left and right tabs */
+.tabs-right.nav-tabs,
+.tabs-left.nav-tabs {
+  border-bottom: 0;
+}
+.tabs-right.nav-tabs > li,
+.tabs-left.nav-tabs > li {
+  float: none;
+}
+.tabs-right.nav-tabs > li > a,
+.tabs-left.nav-tabs > li > a {
+  margin-right: 0;
+  margin-bottom: 3px;
+}
+
+/* Left tabs */
+.tabs-left.nav-tabs {
+  border-right: 1px solid #ddd;
+}
+.tabs-left.nav-tabs > li > a {
+  display: block;
+  margin-right: -1px;
+}
+.tabs-left.nav-tabs > li > a:hover, .tabs-left.nav-tabs > li > a:focus {
+  -webkit-border-radius: 4px 0 0 4px;
+  -moz-border-radius: 4px 0 0 4px;
+  -ms-border-radius: 4px 0 0 4px;
+  -o-border-radius: 4px 0 0 4px;
+  border-radius: 4px 0 0 4px;
+  border-color: #eeeeee #dddddd #eeeeee #eeeeee;
+}
+.tabs-left.nav-tabs > li.active > a,
+.tabs-left.nav-tabs > li.active > a:hover
+> li.active > a:focus {
+  -webkit-border-radius: 4px 0 0 4px;
+  -moz-border-radius: 4px 0 0 4px;
+  -ms-border-radius: 4px 0 0 4px;
+  -o-border-radius: 4px 0 0 4px;
+  border-radius: 4px 0 0 4px;
+  border-color: #ddd transparent #ddd #ddd;
+  *border-right-color: #ffffff;
+}
+
+/* Right tabs */
+.tabs-right.nav-tabs {
+  border-left: 1px solid #ddd;
+}
+.tabs-right.nav-tabs > li > a {
+  display: block;
+  margin-left: -1px;
+}
+.tabs-right.nav-tabs > li > a:hover, .tabs-right.nav-tabs > li > a:focus {
+  -webkit-border-radius: 0 4px 4px 0;
+  -moz-border-radius: 0 4px 4px 0;
+  -ms-border-radius: 0 4px 4px 0;
+  -o-border-radius: 0 4px 4px 0;
+  border-radius: 0 4px 4px 0;
+  border-color: #eeeeee #eeeeee #eeeeee #dddddd;
+}
+.tabs-right.nav-tabs > li.active > a,
+.tabs-right.nav-tabs > li.active > a:hover
+> li.active > a:focus {
+  -webkit-border-radius: 0 4px 4px 0;
+  -moz-border-radius: 0 4px 4px 0;
+  -ms-border-radius: 0 4px 4px 0;
+  -o-border-radius: 0 4px 4px 0;
+  border-radius: 0 4px 4px 0;
+  border-color: #ddd #ddd #ddd transparent;
+  *border-left-color: #ffffff;
+}
+
+/* Below tabs */
+.tabs-below > .nav-tabs,
+.tabs-below > .nav-pills {
+  border-bottom: 0;
+  margin-bottom: 0px;
+  margin-top: 10px;
+}
+
+.tabs-below > .nav-tabs {
+  border-top: 1px solid #ddd;
+  margin-bottom: 0;
+  margin-top: 10px;
+}
+.tabs-below > .nav-tabs > li > a {
+  margin-top: -1px;
+  margin-bottom: 0;
+}
+.tabs-below > .nav-tabs > li > a:hover, .tabs-below > .nav-tabs > li > a:focus {
+  border-top-color: #ddd;
+  border-bottom-color: transparent;
+}
+.tabs-below > .nav-tabs > li > a .dropdown-menu {
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+.tabs-below > .nav-tabs .active a,
+.tabs-below > .nav-tabs .active a:hover
+.active a:focus {
+  -webkit-border-radius: 0 0 4px 4px;
+  -moz-border-radius: 0 0 4px 4px;
+  -ms-border-radius: 0 0 4px 4px;
+  -o-border-radius: 0 0 4px 4px;
+  border-radius: 0 0 4px 4px;
+  border-color: transparent #ddd #ddd #ddd;
+}
+
+/***
+Custom tabs
+***/
+/* In BS3.0.0 tabbable class was removed. We had to added it back */
+.tabbable:before, .tabbable:after {
+  content: " ";
+  display: table;
+}
+.tabbable:after {
+  clear: both;
+}
+
+.tabbable-custom {
+  margin-bottom: 15px;
+  padding: 0px;
+  overflow: hidden;
+  /* justified tabs */
+  /* boxless tabs */
+  /* below justified tabs */
+  /* full width tabs */
+  /* below tabs */
+}
+.tabbable-custom > .nav-tabs {
+  border: none;
+  margin: 0px;
+}
+.tabbable-custom > .nav-tabs > li {
+  margin-right: 2px;
+  border-top: 2px solid transparent;
+}
+.tabbable-custom > .nav-tabs > li > a {
+  margin-right: 0;
+  -webkit-border-radius: 0;
+  -moz-border-radius: 0;
+  -ms-border-radius: 0;
+  -o-border-radius: 0;
+  border-radius: 0;
+}
+.tabbable-custom > .nav-tabs > li > a:hover {
+  background: none;
+  border-color: transparent;
+}
+.tabbable-custom > .nav-tabs > li.active {
+  border-top: 3px solid #F3565D;
+  margin-top: 0;
+  position: relative;
+}
+.tabbable-custom > .nav-tabs > li.active > a {
+  border-top: none;
+  font-weight: 400;
+  -webkit-border-radius: 0;
+  -moz-border-radius: 0;
+  -ms-border-radius: 0;
+  -o-border-radius: 0;
+  border-radius: 0;
+}
+.tabbable-custom > .nav-tabs > li.active > a:hover {
+  -webkit-border-radius: 0;
+  -moz-border-radius: 0;
+  -ms-border-radius: 0;
+  -o-border-radius: 0;
+  border-radius: 0;
+  border-top: none;
+  background: #fff;
+  border-color: #d4d4d4 #d4d4d4 transparent;
+}
+.tabbable-custom > .tab-content {
+  background-color: #fff;
+  border: 1px solid #ddd;
+  padding: 10px;
+  -webkit-border-radius: 0 0 4px 4px;
+  -moz-border-radius: 0 0 4px 4px;
+  -ms-border-radius: 0 0 4px 4px;
+  -o-border-radius: 0 0 4px 4px;
+  border-radius: 0 0 4px 4px;
+}
+.tabbable-custom.nav-justified > .tab-content {
+  margin-top: -1px;
+}
+.tabbable-custom.boxless > .tab-content {
+  padding: 15px 0;
+  border-left: none;
+  border-right: none;
+  border-bottom: none;
+}
+.tabbable-custom.tabs-below.nav-justified .tab-content {
+  margin-top: 0px;
+  margin-bottom: -2px;
+  -webkit-border-radius: 4px 4px 0 0;
+  -moz-border-radius: 4px 4px 0 0;
+  -ms-border-radius: 4px 4px 0 0;
+  -o-border-radius: 4px 4px 0 0;
+  border-radius: 4px 4px 0 0;
+}
+.tabbable-custom.tabbable-full-width > .nav-tabs > li > a {
+  color: #424242;
+  font-size: 15px;
+  padding: 9px 15px;
+}
+.tabbable-custom.tabbable-full-width > .tab-content {
+  padding: 15px 0;
+  border-left: none;
+  border-right: none;
+  border-bottom: none;
+}
+.tabbable-custom.tabs-below .nav-tabs > li > a {
+  border-top: none;
+  border-bottom: 2px solid transparent;
+  margin-top: -1px;
+}
+.tabbable-custom.tabs-below .nav-tabs > li.active {
+  border-top: none;
+  border-bottom: 3px solid #d12610;
+  margin-bottom: 0;
+  position: relative;
+}
+.tabbable-custom.tabs-below .nav-tabs > li.active > a {
+  border-bottom: none;
+}
+.tabbable-custom.tabs-below .nav-tabs > li.active > a:hover {
+  background: #fff;
+  border-color: #d4d4d4 #d4d4d4 transparent;
+}
+
+.tabbable-custom.tabbable-noborder > .nav-tabs > li > a {
+  border: 0;
+}
+.tabbable-custom.tabbable-noborder .tab-content {
+  border: 0;
+}
+
+.tabbable-line > .nav-tabs {
+  border: none;
+  margin: 0px;
+}
+.tabbable-line > .nav-tabs > li {
+  margin-right: 2px;
+}
+.tabbable-line > .nav-tabs > li > a {
+  border: 0;
+  margin-right: 0;
+  color: #737373;
+}
+.tabbable-line > .nav-tabs > li > a > i {
+  color: #a6a6a6;
+}
+.tabbable-line > .nav-tabs > li.open, .tabbable-line > .nav-tabs > li:hover {
+  border-bottom: 4px solid #fbcdcf;
+}
+.tabbable-line > .nav-tabs > li.open > a, .tabbable-line > .nav-tabs > li:hover > a {
+  border: 0;
+  background: none !important;
+  color: #333;
+}
+.tabbable-line > .nav-tabs > li.open > a > i, .tabbable-line > .nav-tabs > li:hover > a > i {
+  color: #a6a6a6;
+}
+.tabbable-line > .nav-tabs > li.open .dropdown-menu, .tabbable-line > .nav-tabs > li:hover .dropdown-menu {
+  margin-top: 0px;
+}
+.tabbable-line > .nav-tabs > li.active {
+  border-bottom: 4px solid #F3565D;
+  position: relative;
+}
+.tabbable-line > .nav-tabs > li.active > a {
+  border: 0;
+  color: #333;
+}
+.tabbable-line > .nav-tabs > li.active > a > i {
+  color: #404040;
+}
+.tabbable-line > .tab-content {
+  margin-top: -3px;
+  background-color: #fff;
+  border: 0;
+  border-top: 1px solid #eee;
+  padding: 15px 0;
+}
+.portlet .tabbable-line > .tab-content {
+  padding-bottom: 0;
+}
+
+.tabbable-line.tabs-below > .nav-tabs > li {
+  border-top: 4px solid transparent;
+}
+.tabbable-line.tabs-below > .nav-tabs > li > a {
+  margin-top: 0;
+}
+.tabbable-line.tabs-below > .nav-tabs > li:hover {
+  border-bottom: 0;
+  border-top: 4px solid #fbcdcf;
+}
+.tabbable-line.tabs-below > .nav-tabs > li.active {
+  margin-bottom: -2px;
+  border-bottom: 0;
+  border-top: 4px solid #F3565D;
+}
+.tabbable-line.tabs-below > .tab-content {
+  margin-top: -10px;
+  border-top: 0;
+  border-bottom: 1px solid #eee;
+  padding-bottom: 15px;
+}
+
+/***
+Tiles(new in v1.1.1)
+***/
+.tiles {
+  margin-right: -10px;
+}
+.tiles:before, .tiles:after {
+  display: table;
+  content: " ";
+}
+.tiles:after {
+  clear: both;
+}
+.tiles .tile {
+  display: block;
+  letter-spacing: 0.02em;
+  float: left;
+  height: 135px;
+  width: 135px !important;
+  cursor: pointer;
+  text-decoration: none;
+  color: #ffffff;
+  position: relative;
+  font-weight: 300;
+  font-size: 12px;
+  letter-spacing: 0.02em;
+  line-height: 20px;
+  overflow: hidden;
+  border: 4px solid transparent;
+  margin: 0 10px 10px 0;
+}
+.tiles .tile:after, .tiles .tile:before {
+  content: "";
+  float: left;
+}
+.tiles .tile.double {
+  width: 280px !important;
+}
+.tiles .tile.double-down {
+  height: 280px !important;
+}
+.tiles .tile.double-down i {
+  margin-top: 95px;
+}
+.tiles .tile:hover {
+  border-color: #aaa !important;
+}
+.tiles .tile:active, .tiles .tile.selected {
+  border-color: #ccc !important;
+}
+.tiles .tile.selected .corner:after {
+  content: "";
+  display: inline-block;
+  border-left: 40px solid transparent;
+  border-bottom: 40px solid transparent;
+  border-right: 40px solid #ccc;
+  position: absolute;
+  top: -3px;
+  right: -3px;
+}
+.tiles .tile.selected .check:after {
+  content: "";
+  font-family: FontAwesome;
+  font-size: 13px;
+  content: "\f00c";
+  display: inline-block;
+  position: absolute;
+  top: 2px;
+  right: 2px;
+}
+.tiles .tile.icon {
+  padding: 0;
+}
+.tiles .tile.image .tile-body {
+  padding: 0 !important;
+}
+.tiles .tile.image .tile-body > img {
+  width: 100%;
+  height: auto;
+  min-height: 100%;
+  max-width: 100%;
+}
+.tiles .tile.image .tile-body h3 {
+  display: inline-block;
+}
+.tiles .tile .tile-body {
+  height: 100%;
+  vertical-align: top;
+  padding: 10px 10px;
+  overflow: hidden;
+  position: relative;
+  font-weight: 400;
+  font-size: 12px;
+  color: #000000;
+  color: #ffffff;
+  margin-bottom: 10px;
+}
+.tiles .tile .tile-body p {
+  font-weight: 400;
+  font-size: 13px;
+  color: #000000;
+  color: #ffffff;
+  line-height: 20px;
+  overflow: hidden;
+}
+.tiles .tile .tile-body p:hover {
+  color: rgba(0, 0, 0, 0.8);
+}
+.tiles .tile .tile-body p:active {
+  color: rgba(0, 0, 0, 0.4);
+}
+.tiles .tile .tile-body p:hover {
+  color: #ffffff;
+}
+.tiles .tile .tile-body img {
+  float: left;
+  margin-right: 10px;
+}
+.tiles .tile .tile-body img.pull-right {
+  float: right !important;
+  margin-left: 10px;
+  margin-right: 0px;
+}
+.tiles .tile .tile-body > .content {
+  display: inline-block;
+}
+.tiles .tile .tile-body > i {
+  margin-top: 17px;
+  display: block;
+  font-size: 56px;
+  line-height: 56px;
+  text-align: center;
+}
+.tiles .tile .tile-body h1,
+.tiles .tile .tile-body h2,
+.tiles .tile .tile-body h3,
+.tiles .tile .tile-body h4,
+.tiles .tile .tile-body h5,
+.tiles .tile .tile-body h6,
+.tiles .tile .tile-body p {
+  padding: 0;
+  margin: 0;
+  line-height: 14px;
+}
+.tiles .tile .tile-body h1:hover,
+.tiles .tile .tile-body h2:hover,
+.tiles .tile .tile-body h3:hover,
+.tiles .tile .tile-body h4:hover,
+.tiles .tile .tile-body h5:hover,
+.tiles .tile .tile-body h6:hover,
+.tiles .tile .tile-body p:hover {
+  color: #ffffff;
+}
+.tiles .tile .tile-body h3,
+.tiles .tile .tile-body h4 {
+  margin-bottom: 5px;
+}
+.tiles .tile .tile-object {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  right: 0;
+  min-height: 30px;
+  background-color: transparent;
+  *zoom: 1;
+}
+.tiles .tile .tile-object:before, .tiles .tile .tile-object:after {
+  display: table;
+  content: "";
+}
+.tiles .tile .tile-object:after {
+  clear: both;
+}
+.tiles .tile .tile-object > .name {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  margin-bottom: 5px;
+  margin-left: 10px;
+  margin-right: 15px;
+  font-weight: 400;
+  font-size: 13px;
+  color: #ffffff;
+}
+.tiles .tile .tile-object > .name > i {
+  vertical-align: middle;
+  display: block;
+  font-size: 24px;
+  height: 18px;
+  width: 24px;
+}
+.tiles .tile .tile-object > .number {
+  position: absolute;
+  bottom: 0;
+  right: 0;
+  margin-bottom: 0;
+  color: #ffffff;
+  text-align: center;
+  font-weight: 600;
+  font-size: 14px;
+  letter-spacing: 0.01em;
+  line-height: 14px;
+  margin-bottom: 8px;
+  margin-right: 10px;
+}
+
+/***
+Custimized Bootstrap Wells
+***/
+.well {
+  background-color: #eee;
+  border: 0;
+  -webkit-box-shadow: none !important;
+  -moz-box-shadow: none !important;
+  box-shadow: none !important;
+}
+
+/***
+AngularJS Basic Animations
+***/
+@-webkit-keyframes fadeInUpm {
+  0% {
+    opacity: 0;
+    -webkit-transform: translateY(15px);
+  }
+  100% {
+    opacity: 1;
+    -webkit-transform: translateY(0);
+  }
+}
+@-moz-keyframes fadeInUpm {
+  0% {
+    opacity: 0;
+    -moz-transform: translateY(15px);
+  }
+  100% {
+    opacity: 1;
+    -moz-transform: translateY(0);
+  }
+}
+@-o-keyframes fadeInUpm {
+  0% {
+    opacity: 0;
+    -o-transform: translateY(15px);
+  }
+  100% {
+    opacity: 1;
+    -o-transform: translateY(0);
+  }
+}
+@keyframes fadeInUpm{
+  0% {
+    opacity: 0;
+    transform: translateY(15px);
+  }
+  100% {
+    opacity: 1;
+    transform: translateY(0);
+  }
+}
+.fade-in-up {
+  -webkit-animation: fadeInUpm .5s;
+  animation: fadeInUpm .5s;
+}
+
+@-webkit-keyframes bounceDelay {
+  0%, 80%, 100% {
+    -webkit-transform: scale(0);
+  }
+  40% {
+    -webkit-transform: scale(1);
+  }
+}
+@keyframes bounceDelay {
+  0%, 80%, 100% {
+    transform: scale(0);
+    -webkit-transform: scale(0);
+  }
+  40% {
+    transform: scale(1);
+    -webkit-transform: scale(1);
+  }
+}
+/* Button */
+.btn.default {
+  color: #333333;
+  background-color: #E5E5E5;
+  border-color: "";
+}
+.btn.default:hover, .btn.default:focus, .btn.default:active, .btn.default.active {
+  color: #333333;
+  background-color: lightgray;
+}
+.open .btn.default.dropdown-toggle {
+  color: #333333;
+  background-color: lightgray;
+}
+.btn.default:active, .btn.default.active {
+  background-image: none;
+  background-color: #c6c6c6;
+}
+.btn.default:active:hover, .btn.default.active:hover {
+  background-color: #cccccc;
+}
+.open .btn.default.dropdown-toggle {
+  background-image: none;
+}
+.btn.default.disabled, .btn.default.disabled:hover, .btn.default.disabled:focus, .btn.default.disabled:active, .btn.default.disabled.active, .btn.default[disabled], .btn.default[disabled]:hover, .btn.default[disabled]:focus, .btn.default[disabled]:active, .btn.default[disabled].active, fieldset[disabled] .btn.default, fieldset[disabled] .btn.default:hover, fieldset[disabled] .btn.default:focus, fieldset[disabled] .btn.default:active, fieldset[disabled] .btn.default.active {
+  background-color: #E5E5E5;
+}
+.btn.default .badge {
+  color: #E5E5E5;
+  background-color: #333333;
+}
+
+/**********
+Blue Colors
+***********/
+/***
+Blue Default
+***/
+/* Button */
+.blue.btn {
+  color: #FFFFFF;
+  background-color: #4B8DF8;
+  border-color: "";
+}
+.blue.btn:hover, .blue.btn:focus, .blue.btn:active, .blue.btn.active {
+  color: #FFFFFF;
+  background-color: #2977f7;
+}
+.open .blue.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #2977f7;
+}
+.blue.btn:active, .blue.btn.active {
+  background-image: none;
+  background-color: #1068f6;
+}
+.blue.btn:active:hover, .blue.btn.active:hover {
+  background-color: #1a6ef6;
+}
+.open .blue.btn.dropdown-toggle {
+  background-image: none;
+}
+.blue.btn.disabled, .blue.btn.disabled:hover, .blue.btn.disabled:focus, .blue.btn.disabled:active, .blue.btn.disabled.active, .blue.btn[disabled], .blue.btn[disabled]:hover, .blue.btn[disabled]:focus, .blue.btn[disabled]:active, .blue.btn[disabled].active, fieldset[disabled] .blue.btn, fieldset[disabled] .blue.btn:hover, fieldset[disabled] .blue.btn:focus, fieldset[disabled] .blue.btn:active, fieldset[disabled] .blue.btn.active {
+  background-color: #4B8DF8;
+}
+.blue.btn .badge {
+  color: #4B8DF8;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-stripe {
+  border-left: 3px solid #4B8DF8;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue,
+.portlet.blue {
+  background-color: #4B8DF8;
+}
+
+.portlet.solid.blue > .portlet-title,
+.portlet.solid.blue > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.blue > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.blue > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.blue > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.blue > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.blue > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.blue > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.blue > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.blue {
+  border: 1px solid #7cacfa;
+  border-top: 0;
+}
+.portlet.box.blue > .portlet-title {
+  background-color: #4B8DF8;
+}
+.portlet.box.blue > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.blue > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.blue > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #b7d1fc;
+  color: #d0e1fd;
+}
+.portlet.box.blue > .portlet-title > .actions .btn-default > i {
+  color: #deeafe;
+}
+.portlet.box.blue > .portlet-title > .actions .btn-default:hover, .portlet.box.blue > .portlet-title > .actions .btn-default:focus, .portlet.box.blue > .portlet-title > .actions .btn-default:active, .portlet.box.blue > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #e8f0fe;
+  color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue {
+  background-color: #4B8DF8;
+}
+.dashboard-stat.blue.dashboard-stat-light:hover {
+  background-color: #3781f7;
+}
+.dashboard-stat.blue .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.blue .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.blue .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.blue .more {
+  color: #FFFFFF;
+  background-color: #3781f7;
+}
+
+/* General Element */
+.bg-blue {
+  border-color: #4B8DF8 !important;
+  background-image: none !important;
+  background-color: #4B8DF8 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue {
+  color: #4B8DF8 !important;
+}
+
+.progress-bar.blue {
+  background: #4B8DF8 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Blue Madison
+***/
+/* Button */
+.blue-madison.btn {
+  color: #FFFFFF;
+  background-color: #578ebe;
+  border-color: "";
+}
+.blue-madison.btn:hover, .blue-madison.btn:focus, .blue-madison.btn:active, .blue-madison.btn.active {
+  color: #FFFFFF;
+  background-color: #437cae;
+}
+.open .blue-madison.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #437cae;
+}
+.blue-madison.btn:active, .blue-madison.btn.active {
+  background-image: none;
+  background-color: #3c6f9c;
+}
+.blue-madison.btn:active:hover, .blue-madison.btn.active:hover {
+  background-color: #3f74a3;
+}
+.open .blue-madison.btn.dropdown-toggle {
+  background-image: none;
+}
+.blue-madison.btn.disabled, .blue-madison.btn.disabled:hover, .blue-madison.btn.disabled:focus, .blue-madison.btn.disabled:active, .blue-madison.btn.disabled.active, .blue-madison.btn[disabled], .blue-madison.btn[disabled]:hover, .blue-madison.btn[disabled]:focus, .blue-madison.btn[disabled]:active, .blue-madison.btn[disabled].active, fieldset[disabled] .blue-madison.btn, fieldset[disabled] .blue-madison.btn:hover, fieldset[disabled] .blue-madison.btn:focus, fieldset[disabled] .blue-madison.btn:active, fieldset[disabled] .blue-madison.btn.active {
+  background-color: #578ebe;
+}
+.blue-madison.btn .badge {
+  color: #578ebe;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-madison-stripe {
+  border-left: 3px solid #578ebe;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-madison,
+.portlet.blue-madison {
+  background-color: #578ebe;
+}
+
+.portlet.solid.blue-madison > .portlet-title,
+.portlet.solid.blue-madison > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.blue-madison > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.blue-madison > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.blue-madison > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.blue-madison > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.blue-madison > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.blue-madison > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.blue-madison > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.blue-madison {
+  border: 1px solid #7ca7cc;
+  border-top: 0;
+}
+.portlet.box.blue-madison > .portlet-title {
+  background-color: #578ebe;
+}
+.portlet.box.blue-madison > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.blue-madison > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.blue-madison > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #a8c4dd;
+  color: #bad1e4;
+}
+.portlet.box.blue-madison > .portlet-title > .actions .btn-default > i {
+  color: #c5d8e9;
+}
+.portlet.box.blue-madison > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-madison > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-madison > .portlet-title > .actions .btn-default:active, .portlet.box.blue-madison > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #cdddec;
+  color: #dfeaf3;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-madison {
+  background-color: #578ebe;
+}
+.dashboard-stat.blue-madison.dashboard-stat-light:hover {
+  background-color: #4884b8;
+}
+.dashboard-stat.blue-madison .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.blue-madison .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.blue-madison .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.blue-madison .more {
+  color: #FFFFFF;
+  background-color: #4884b8;
+}
+
+/* General Element */
+.bg-blue-madison {
+  border-color: #578ebe !important;
+  background-image: none !important;
+  background-color: #578ebe !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-madison {
+  color: #578ebe !important;
+}
+
+.progress-bar.blue-madison {
+  background: #578ebe !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Blue Chambray
+***/
+/* Button */
+.blue-chambray.btn {
+  color: #FFFFFF;
+  background-color: #2C3E50;
+  border-color: "";
+}
+.blue-chambray.btn:hover, .blue-chambray.btn:focus, .blue-chambray.btn:active, .blue-chambray.btn.active {
+  color: #FFFFFF;
+  background-color: #1f2c39;
+}
+.open .blue-chambray.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #1f2c39;
+}
+.blue-chambray.btn:active, .blue-chambray.btn.active {
+  background-image: none;
+  background-color: #161f29;
+}
+.blue-chambray.btn:active:hover, .blue-chambray.btn.active:hover {
+  background-color: #1a242f;
+}
+.open .blue-chambray.btn.dropdown-toggle {
+  background-image: none;
+}
+.blue-chambray.btn.disabled, .blue-chambray.btn.disabled:hover, .blue-chambray.btn.disabled:focus, .blue-chambray.btn.disabled:active, .blue-chambray.btn.disabled.active, .blue-chambray.btn[disabled], .blue-chambray.btn[disabled]:hover, .blue-chambray.btn[disabled]:focus, .blue-chambray.btn[disabled]:active, .blue-chambray.btn[disabled].active, fieldset[disabled] .blue-chambray.btn, fieldset[disabled] .blue-chambray.btn:hover, fieldset[disabled] .blue-chambray.btn:focus, fieldset[disabled] .blue-chambray.btn:active, fieldset[disabled] .blue-chambray.btn.active {
+  background-color: #2C3E50;
+}
+.blue-chambray.btn .badge {
+  color: #2C3E50;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-chambray-stripe {
+  border-left: 3px solid #2C3E50;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-chambray,
+.portlet.blue-chambray {
+  background-color: #2C3E50;
+}
+
+.portlet.solid.blue-chambray > .portlet-title,
+.portlet.solid.blue-chambray > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.blue-chambray > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.blue-chambray > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.blue-chambray {
+  border: 1px solid #3e5771;
+  border-top: 0;
+}
+.portlet.box.blue-chambray > .portlet-title {
+  background-color: #2C3E50;
+}
+.portlet.box.blue-chambray > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.blue-chambray > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.blue-chambray > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #547698;
+  color: #5f83a7;
+}
+.portlet.box.blue-chambray > .portlet-title > .actions .btn-default > i {
+  color: #698aac;
+}
+.portlet.box.blue-chambray > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default:active, .portlet.box.blue-chambray > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #6f90b0;
+  color: #809cb9;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-chambray {
+  background-color: #2C3E50;
+}
+.dashboard-stat.blue-chambray.dashboard-stat-light:hover {
+  background-color: #253443;
+}
+.dashboard-stat.blue-chambray .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.blue-chambray .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.blue-chambray .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.blue-chambray .more {
+  color: #FFFFFF;
+  background-color: #253443;
+}
+
+/* General Element */
+.bg-blue-chambray {
+  border-color: #2C3E50 !important;
+  background-image: none !important;
+  background-color: #2C3E50 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-chambray {
+  color: #2C3E50 !important;
+}
+
+.progress-bar.blue-chambray {
+  background: #2C3E50 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Blue Ebonyclay
+***/
+/* Button */
+.blue-ebonyclay.btn {
+  color: #FFFFFF;
+  background-color: #22313F;
+  border-color: "";
+}
+.blue-ebonyclay.btn:hover, .blue-ebonyclay.btn:focus, .blue-ebonyclay.btn:active, .blue-ebonyclay.btn.active {
+  color: #FFFFFF;
+  background-color: #151f28;
+}
+.open .blue-ebonyclay.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #151f28;
+}
+.blue-ebonyclay.btn:active, .blue-ebonyclay.btn.active {
+  background-image: none;
+  background-color: #0d1217;
+}
+.blue-ebonyclay.btn:active:hover, .blue-ebonyclay.btn.active:hover {
+  background-color: #10171e;
+}
+.open .blue-ebonyclay.btn.dropdown-toggle {
+  background-image: none;
+}
+.blue-ebonyclay.btn.disabled, .blue-ebonyclay.btn.disabled:hover, .blue-ebonyclay.btn.disabled:focus, .blue-ebonyclay.btn.disabled:active, .blue-ebonyclay.btn.disabled.active, .blue-ebonyclay.btn[disabled], .blue-ebonyclay.btn[disabled]:hover, .blue-ebonyclay.btn[disabled]:focus, .blue-ebonyclay.btn[disabled]:active, .blue-ebonyclay.btn[disabled].active, fieldset[disabled] .blue-ebonyclay.btn, fieldset[disabled] .blue-ebonyclay.btn:hover, fieldset[disabled] .blue-ebonyclay.btn:focus, fieldset[disabled] .blue-ebonyclay.btn:active, fieldset[disabled] .blue-ebonyclay.btn.active {
+  background-color: #22313F;
+}
+.blue-ebonyclay.btn .badge {
+  color: #22313F;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-ebonyclay-stripe {
+  border-left: 3px solid #22313F;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-ebonyclay,
+.portlet.blue-ebonyclay {
+  background-color: #22313F;
+}
+
+.portlet.solid.blue-ebonyclay > .portlet-title,
+.portlet.solid.blue-ebonyclay > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.blue-ebonyclay > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.blue-ebonyclay > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.blue-ebonyclay {
+  border: 1px solid #344b60;
+  border-top: 0;
+}
+.portlet.box.blue-ebonyclay > .portlet-title {
+  background-color: #22313F;
+}
+.portlet.box.blue-ebonyclay > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.blue-ebonyclay > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #496a88;
+  color: #527798;
+}
+.portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default > i {
+  color: #587ea2;
+}
+.portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default:active, .portlet.box.blue-ebonyclay > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #5d83a7;
+  color: #6d90b0;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-ebonyclay {
+  background-color: #22313F;
+}
+.dashboard-stat.blue-ebonyclay.dashboard-stat-light:hover {
+  background-color: #1b2732;
+}
+.dashboard-stat.blue-ebonyclay .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.blue-ebonyclay .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.blue-ebonyclay .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.blue-ebonyclay .more {
+  color: #FFFFFF;
+  background-color: #1b2732;
+}
+
+/* General Element */
+.bg-blue-ebonyclay {
+  border-color: #22313F !important;
+  background-image: none !important;
+  background-color: #22313F !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-ebonyclay {
+  color: #22313F !important;
+}
+
+.progress-bar.blue-ebonyclay {
+  background: #22313F !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Blue Hoki
+***/
+/* Button */
+.blue-hoki.btn {
+  color: #FFFFFF;
+  background-color: #67809F;
+  border-color: "";
+}
+.blue-hoki.btn:hover, .blue-hoki.btn:focus, .blue-hoki.btn:active, .blue-hoki.btn.active {
+  color: #FFFFFF;
+  background-color: #586e8b;
+}
+.open .blue-hoki.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #586e8b;
+}
+.blue-hoki.btn:active, .blue-hoki.btn.active {
+  background-image: none;
+  background-color: #4e627b;
+}
+.blue-hoki.btn:active:hover, .blue-hoki.btn.active:hover {
+  background-color: #526781;
+}
+.open .blue-hoki.btn.dropdown-toggle {
+  background-image: none;
+}
+.blue-hoki.btn.disabled, .blue-hoki.btn.disabled:hover, .blue-hoki.btn.disabled:focus, .blue-hoki.btn.disabled:active, .blue-hoki.btn.disabled.active, .blue-hoki.btn[disabled], .blue-hoki.btn[disabled]:hover, .blue-hoki.btn[disabled]:focus, .blue-hoki.btn[disabled]:active, .blue-hoki.btn[disabled].active, fieldset[disabled] .blue-hoki.btn, fieldset[disabled] .blue-hoki.btn:hover, fieldset[disabled] .blue-hoki.btn:focus, fieldset[disabled] .blue-hoki.btn:active, fieldset[disabled] .blue-hoki.btn.active {
+  background-color: #67809F;
+}
+.blue-hoki.btn .badge {
+  color: #67809F;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-hoki-stripe {
+  border-left: 3px solid #67809F;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-hoki,
+.portlet.blue-hoki {
+  background-color: #67809F;
+}
+
+.portlet.solid.blue-hoki > .portlet-title,
+.portlet.solid.blue-hoki > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.blue-hoki > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.blue-hoki > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.blue-hoki {
+  border: 1px solid #869ab3;
+  border-top: 0;
+}
+.portlet.box.blue-hoki > .portlet-title {
+  background-color: #67809F;
+}
+.portlet.box.blue-hoki > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.blue-hoki > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.blue-hoki > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #acb9ca;
+  color: #bbc7d4;
+}
+.portlet.box.blue-hoki > .portlet-title > .actions .btn-default > i {
+  color: #c5ceda;
+}
+.portlet.box.blue-hoki > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default:active, .portlet.box.blue-hoki > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #cbd4de;
+  color: #dbe1e8;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-hoki {
+  background-color: #67809F;
+}
+.dashboard-stat.blue-hoki.dashboard-stat-light:hover {
+  background-color: #5e7694;
+}
+.dashboard-stat.blue-hoki .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.blue-hoki .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.blue-hoki .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.blue-hoki .more {
+  color: #FFFFFF;
+  background-color: #5e7694;
+}
+
+/* General Element */
+.bg-blue-hoki {
+  border-color: #67809F !important;
+  background-image: none !important;
+  background-color: #67809F !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-hoki {
+  color: #67809F !important;
+}
+
+.progress-bar.blue-hoki {
+  background: #67809F !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Blue Stell
+***/
+/* Button */
+.blue-steel.btn {
+  color: #FFFFFF;
+  background-color: #4B77BE;
+  border-color: "";
+}
+.blue-steel.btn:hover, .blue-steel.btn:focus, .blue-steel.btn:active, .blue-steel.btn.active {
+  color: #FFFFFF;
+  background-color: #3d66a8;
+}
+.open .blue-steel.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #3d66a8;
+}
+.blue-steel.btn:active, .blue-steel.btn.active {
+  background-image: none;
+  background-color: #365b96;
+}
+.blue-steel.btn:active:hover, .blue-steel.btn.active:hover {
+  background-color: #395f9d;
+}
+.open .blue-steel.btn.dropdown-toggle {
+  background-image: none;
+}
+.blue-steel.btn.disabled, .blue-steel.btn.disabled:hover, .blue-steel.btn.disabled:focus, .blue-steel.btn.disabled:active, .blue-steel.btn.disabled.active, .blue-steel.btn[disabled], .blue-steel.btn[disabled]:hover, .blue-steel.btn[disabled]:focus, .blue-steel.btn[disabled]:active, .blue-steel.btn[disabled].active, fieldset[disabled] .blue-steel.btn, fieldset[disabled] .blue-steel.btn:hover, fieldset[disabled] .blue-steel.btn:focus, fieldset[disabled] .blue-steel.btn:active, fieldset[disabled] .blue-steel.btn.active {
+  background-color: #4B77BE;
+}
+.blue-steel.btn .badge {
+  color: #4B77BE;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-steel-stripe {
+  border-left: 3px solid #4B77BE;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-steel,
+.portlet.blue-steel {
+  background-color: #4B77BE;
+}
+
+.portlet.solid.blue-steel > .portlet-title,
+.portlet.solid.blue-steel > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.blue-steel > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.blue-steel > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.blue-steel > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.blue-steel > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.blue-steel > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.blue-steel > .portlet-title > .tools > a.collapse {
+  background-image: url(../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.blue-steel > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.blue-steel {
+  border: 1px solid #7093cc;
+  border-top: 0;
+}
+.portlet.box.blue-steel > .portlet-title {
+  background-color: #4B77BE;
+}
+.portlet.box.blue-steel > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.blue-steel > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.blue-steel > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #9db5dc;
+  color: #b0c3e3;
+}
+.portlet.box.blue-steel > .portlet-title > .actions .btn-default > i {
+  color: #bbcce7;
+}
+.portlet.box.blue-steel > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-steel > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-steel > .portlet-title > .actions .btn-default:active, .portlet.box.blue-steel > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #c3d2e9;
+  color: #d6e0f0;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-steel {
+  background-color: #4B77BE;
+}
+.dashboard-stat.blue-steel.dashboard-stat-light:hover {
+  background-color: #416db4;
+}
+.dashboard-stat.blue-steel .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.blue-steel .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.blue-steel .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.blue-steel .more {
+  color: #FFFFFF;
+  background-color: #416db4;
+}
+
+/* General Element */
+.bg-blue-steel {
+  border-color: #4B77BE !important;
+  background-image: none !important;
+  background-color: #4B77BE !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-steel {
+  color: #4B77BE !important;
+}
+
+.progress-bar.blue-steel {
+  background: #4B77BE !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Blue Soft
+***/
+/* Button */
+.blue-soft.btn {
+  color: #FFFFFF;
+  background-color: #4c87b9;
+  border-color: "";
+}
+.blue-soft.btn:hover, .blue-soft.btn:focus, .blue-soft.btn:active, .blue-soft.btn.active {
+  color: #FFFFFF;
+  background-color: #3f75a2;
+}
+.open .blue-soft.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #3f75a2;
+}
+.blue-soft.btn:active, .blue-soft.btn.active {
+  background-image: none;
+  background-color: #386890;
+}
+.blue-soft.btn:active:hover, .blue-soft.btn.active:hover {
+  background-color: #3b6d97;
+}
+.open .blue-soft.btn.dropdown-toggle {
+  background-image: none;
+}
+.blue-soft.btn.disabled, .blue-soft.btn.disabled:hover, .blue-soft.btn.disabled:focus, .blue-soft.btn.disabled:active, .blue-soft.btn.disabled.active, .blue-soft.btn[disabled], .blue-soft.btn[disabled]:hover, .blue-soft.btn[disabled]:focus, .blue-soft.btn[disabled]:active, .blue-soft.btn[disabled].active, fieldset[disabled] .blue-soft.btn, fieldset[disabled] .blue-soft.btn:hover, fieldset[disabled] .blue-soft.btn:focus, fieldset[disabled] .blue-soft.btn:active, fieldset[disabled] .blue-soft.btn.active {
+  background-color: #4c87b9;
+}
+.blue-soft.btn .badge {
+  color: #4c87b9;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-soft-stripe {
+  border-left: 3px solid #4c87b9;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-soft,
+.portlet.blue-soft {
+  background-color: #4c87b9;
+}
+
+.portlet.solid.blue-soft > .portlet-title,
+.portlet.solid.blue-soft > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.blue-soft > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.blue-soft > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.blue-soft > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.blue-soft > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.blue-soft > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.blue-soft > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.blue-soft > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.blue-soft {
+  border: 1px solid #71a0c7;
+  border-top: 0;
+}
+.portlet.box.blue-soft > .portlet-title {
+  background-color: #4c87b9;
+}
+.portlet.box.blue-soft > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.blue-soft > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.blue-soft > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #9dbdd9;
+  color: #afc9e0;
+}
+.portlet.box.blue-soft > .portlet-title > .actions .btn-default > i {
+  color: #bad1e4;
+}
+.portlet.box.blue-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-soft > .portlet-title > .actions .btn-default:active, .portlet.box.blue-soft > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #c1d6e7;
+  color: #d4e2ee;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-soft {
+  background-color: #4c87b9;
+}
+.dashboard-stat.blue-soft.dashboard-stat-light:hover {
+  background-color: #447dad;
+}
+.dashboard-stat.blue-soft .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.blue-soft .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.blue-soft .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.blue-soft .more {
+  color: #FFFFFF;
+  background-color: #447dad;
+}
+
+/* General Element */
+.bg-blue-soft {
+  border-color: #4c87b9 !important;
+  background-image: none !important;
+  background-color: #4c87b9 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-soft {
+  color: #4c87b9 !important;
+}
+
+.progress-bar.blue-soft {
+  background: #4c87b9 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Blue Dark
+***/
+/* Button */
+.blue-dark.btn {
+  color: #FFFFFF;
+  background-color: #5e738b;
+  border-color: "";
+}
+.blue-dark.btn:hover, .blue-dark.btn:focus, .blue-dark.btn:active, .blue-dark.btn.active {
+  color: #FFFFFF;
+  background-color: #506176;
+}
+.open .blue-dark.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #506176;
+}
+.blue-dark.btn:active, .blue-dark.btn.active {
+  background-image: none;
+  background-color: #455566;
+}
+.blue-dark.btn:active:hover, .blue-dark.btn.active:hover {
+  background-color: #495a6d;
+}
+.open .blue-dark.btn.dropdown-toggle {
+  background-image: none;
+}
+.blue-dark.btn.disabled, .blue-dark.btn.disabled:hover, .blue-dark.btn.disabled:focus, .blue-dark.btn.disabled:active, .blue-dark.btn.disabled.active, .blue-dark.btn[disabled], .blue-dark.btn[disabled]:hover, .blue-dark.btn[disabled]:focus, .blue-dark.btn[disabled]:active, .blue-dark.btn[disabled].active, fieldset[disabled] .blue-dark.btn, fieldset[disabled] .blue-dark.btn:hover, fieldset[disabled] .blue-dark.btn:focus, fieldset[disabled] .blue-dark.btn:active, fieldset[disabled] .blue-dark.btn.active {
+  background-color: #5e738b;
+}
+.blue-dark.btn .badge {
+  color: #5e738b;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-dark-stripe {
+  border-left: 3px solid #5e738b;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-dark,
+.portlet.blue-dark {
+  background-color: #5e738b;
+}
+
+.portlet.solid.blue-dark > .portlet-title,
+.portlet.solid.blue-dark > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.blue-dark > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.blue-dark > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.blue-dark > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.blue-dark > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.blue-dark > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.blue-dark > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.blue-dark > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.blue-dark {
+  border: 1px solid #788da4;
+  border-top: 0;
+}
+.portlet.box.blue-dark > .portlet-title {
+  background-color: #5e738b;
+}
+.portlet.box.blue-dark > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.blue-dark > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.blue-dark > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #9dacbd;
+  color: #acb8c7;
+}
+.portlet.box.blue-dark > .portlet-title > .actions .btn-default > i {
+  color: #b5c0cd;
+}
+.portlet.box.blue-dark > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-dark > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-dark > .portlet-title > .actions .btn-default:active, .portlet.box.blue-dark > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #bbc5d1;
+  color: #cad2db;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-dark {
+  background-color: #5e738b;
+}
+.dashboard-stat.blue-dark.dashboard-stat-light:hover {
+  background-color: #56697f;
+}
+.dashboard-stat.blue-dark .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.blue-dark .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.blue-dark .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.blue-dark .more {
+  color: #FFFFFF;
+  background-color: #56697f;
+}
+
+/* General Element */
+.bg-blue-dark {
+  border-color: #5e738b !important;
+  background-image: none !important;
+  background-color: #5e738b !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-dark {
+  color: #5e738b !important;
+}
+
+.progress-bar.blue-dark {
+  background: #5e738b !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Blue Sharp
+***/
+/* Button */
+.blue-sharp.btn {
+  color: #FFFFFF;
+  background-color: #5C9BD1;
+  border-color: "";
+}
+.blue-sharp.btn:hover, .blue-sharp.btn:focus, .blue-sharp.btn:active, .blue-sharp.btn.active {
+  color: #FFFFFF;
+  background-color: #408ac9;
+}
+.open .blue-sharp.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #408ac9;
+}
+.blue-sharp.btn:active, .blue-sharp.btn.active {
+  background-image: none;
+  background-color: #357dbb;
+}
+.blue-sharp.btn:active:hover, .blue-sharp.btn.active:hover {
+  background-color: #3782c3;
+}
+.open .blue-sharp.btn.dropdown-toggle {
+  background-image: none;
+}
+.blue-sharp.btn.disabled, .blue-sharp.btn.disabled:hover, .blue-sharp.btn.disabled:focus, .blue-sharp.btn.disabled:active, .blue-sharp.btn.disabled.active, .blue-sharp.btn[disabled], .blue-sharp.btn[disabled]:hover, .blue-sharp.btn[disabled]:focus, .blue-sharp.btn[disabled]:active, .blue-sharp.btn[disabled].active, fieldset[disabled] .blue-sharp.btn, fieldset[disabled] .blue-sharp.btn:hover, fieldset[disabled] .blue-sharp.btn:focus, fieldset[disabled] .blue-sharp.btn:active, fieldset[disabled] .blue-sharp.btn.active {
+  background-color: #5C9BD1;
+}
+.blue-sharp.btn .badge {
+  color: #5C9BD1;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.blue-sharp-stripe {
+  border-left: 3px solid #5C9BD1;
+}
+
+/* Portlet */
+.portlet > .portlet-body.blue-sharp,
+.portlet.blue-sharp {
+  background-color: #5C9BD1;
+}
+
+.portlet.solid.blue-sharp > .portlet-title,
+.portlet.solid.blue-sharp > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.blue-sharp > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.blue-sharp > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.blue-sharp {
+  border: 1px solid #84b3dc;
+  border-top: 0;
+}
+.portlet.box.blue-sharp > .portlet-title {
+  background-color: #5C9BD1;
+}
+.portlet.box.blue-sharp > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.blue-sharp > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.blue-sharp > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #b4d1ea;
+  color: #c7ddef;
+}
+.portlet.box.blue-sharp > .portlet-title > .actions .btn-default > i {
+  color: #d3e4f3;
+}
+.portlet.box.blue-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.blue-sharp > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #dbe9f5;
+  color: #eff5fb;
+}
+
+/* Statistic Block */
+.dashboard-stat.blue-sharp {
+  background-color: #5C9BD1;
+}
+.dashboard-stat.blue-sharp.dashboard-stat-light:hover {
+  background-color: #4c91cd;
+}
+.dashboard-stat.blue-sharp .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.blue-sharp .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.blue-sharp .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.blue-sharp .more {
+  color: #FFFFFF;
+  background-color: #4c91cd;
+}
+
+/* General Element */
+.bg-blue-sharp {
+  border-color: #5C9BD1 !important;
+  background-image: none !important;
+  background-color: #5C9BD1 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-blue-sharp {
+  color: #5C9BD1 !important;
+}
+
+.progress-bar.blue-sharp {
+  background: #5C9BD1 !important;
+  color: #FFFFFF !important;
+}
+
+/***********
+Green Colors
+************/
+/***
+Green Default
+***/
+/* Button */
+.green.btn {
+  color: #FFFFFF;
+  background-color: #35aa47;
+  border-color: "";
+}
+.green.btn:hover, .green.btn:focus, .green.btn:active, .green.btn.active {
+  color: #FFFFFF;
+  background-color: #2d8f3c;
+}
+.open .green.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #2d8f3c;
+}
+.green.btn:active, .green.btn.active {
+  background-image: none;
+  background-color: #267b34;
+}
+.green.btn:active:hover, .green.btn.active:hover {
+  background-color: #298337;
+}
+.open .green.btn.dropdown-toggle {
+  background-image: none;
+}
+.green.btn.disabled, .green.btn.disabled:hover, .green.btn.disabled:focus, .green.btn.disabled:active, .green.btn.disabled.active, .green.btn[disabled], .green.btn[disabled]:hover, .green.btn[disabled]:focus, .green.btn[disabled]:active, .green.btn[disabled].active, fieldset[disabled] .green.btn, fieldset[disabled] .green.btn:hover, fieldset[disabled] .green.btn:focus, fieldset[disabled] .green.btn:active, fieldset[disabled] .green.btn.active {
+  background-color: #35aa47;
+}
+.green.btn .badge {
+  color: #35aa47;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-stripe {
+  border-left: 3px solid #35aa47;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green,
+.portlet.green {
+  background-color: #35aa47;
+}
+
+.portlet.solid.green > .portlet-title,
+.portlet.solid.green > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.green > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.green > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.green > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.green > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.green > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.green > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.green > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.green {
+  border: 1px solid #4bc75e;
+  border-top: 0;
+}
+.portlet.box.green > .portlet-title {
+  background-color: #35aa47;
+}
+.portlet.box.green > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.green > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.green > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #7ad588;
+  color: #8ddc99;
+}
+.portlet.box.green > .portlet-title > .actions .btn-default > i {
+  color: #99dfa4;
+}
+.portlet.box.green > .portlet-title > .actions .btn-default:hover, .portlet.box.green > .portlet-title > .actions .btn-default:focus, .portlet.box.green > .portlet-title > .actions .btn-default:active, .portlet.box.green > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #a1e2ab;
+  color: #b4e8bc;
+}
+
+/* Statistic Block */
+.dashboard-stat.green {
+  background-color: #35aa47;
+}
+.dashboard-stat.green.dashboard-stat-light:hover {
+  background-color: #309a41;
+}
+.dashboard-stat.green .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.green .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.green .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.green .more {
+  color: #FFFFFF;
+  background-color: #309a41;
+}
+
+/* General Element */
+.bg-green {
+  border-color: #35aa47 !important;
+  background-image: none !important;
+  background-color: #35aa47 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green {
+  color: #35aa47 !important;
+}
+
+.progress-bar.green {
+  background: #35aa47 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Green Meadow
+***/
+/* Button */
+.green-meadow.btn {
+  color: #FFFFFF;
+  background-color: #1BBC9B;
+  border-color: "";
+}
+.green-meadow.btn:hover, .green-meadow.btn:focus, .green-meadow.btn:active, .green-meadow.btn.active {
+  color: #FFFFFF;
+  background-color: #179d81;
+}
+.open .green-meadow.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #179d81;
+}
+.green-meadow.btn:active, .green-meadow.btn.active {
+  background-image: none;
+  background-color: #13866f;
+}
+.green-meadow.btn:active:hover, .green-meadow.btn.active:hover {
+  background-color: #158f76;
+}
+.open .green-meadow.btn.dropdown-toggle {
+  background-image: none;
+}
+.green-meadow.btn.disabled, .green-meadow.btn.disabled:hover, .green-meadow.btn.disabled:focus, .green-meadow.btn.disabled:active, .green-meadow.btn.disabled.active, .green-meadow.btn[disabled], .green-meadow.btn[disabled]:hover, .green-meadow.btn[disabled]:focus, .green-meadow.btn[disabled]:active, .green-meadow.btn[disabled].active, fieldset[disabled] .green-meadow.btn, fieldset[disabled] .green-meadow.btn:hover, fieldset[disabled] .green-meadow.btn:focus, fieldset[disabled] .green-meadow.btn:active, fieldset[disabled] .green-meadow.btn.active {
+  background-color: #1BBC9B;
+}
+.green-meadow.btn .badge {
+  color: #1BBC9B;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-meadow-stripe {
+  border-left: 3px solid #1BBC9B;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-meadow,
+.portlet.green-meadow {
+  background-color: #1BBC9B;
+}
+
+.portlet.solid.green-meadow > .portlet-title,
+.portlet.solid.green-meadow > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.green-meadow > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.green-meadow > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.green-meadow > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.green-meadow > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.green-meadow > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.green-meadow > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.green-meadow > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.green-meadow {
+  border: 1px solid #2ae0bb;
+  border-top: 0;
+}
+.portlet.box.green-meadow > .portlet-title {
+  background-color: #1BBC9B;
+}
+.portlet.box.green-meadow > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.green-meadow > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.green-meadow > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #5fe8cc;
+  color: #75ebd3;
+}
+.portlet.box.green-meadow > .portlet-title > .actions .btn-default > i {
+  color: #83edd7;
+}
+.portlet.box.green-meadow > .portlet-title > .actions .btn-default:hover, .portlet.box.green-meadow > .portlet-title > .actions .btn-default:focus, .portlet.box.green-meadow > .portlet-title > .actions .btn-default:active, .portlet.box.green-meadow > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #8ceeda;
+  color: #a2f2e1;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-meadow {
+  background-color: #1BBC9B;
+}
+.dashboard-stat.green-meadow.dashboard-stat-light:hover {
+  background-color: #18aa8c;
+}
+.dashboard-stat.green-meadow .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.green-meadow .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.green-meadow .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.green-meadow .more {
+  color: #FFFFFF;
+  background-color: #18aa8c;
+}
+
+/* General Element */
+.bg-green-meadow {
+  border-color: #1BBC9B !important;
+  background-image: none !important;
+  background-color: #1BBC9B !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-meadow {
+  color: #1BBC9B !important;
+}
+
+.progress-bar.green-meadow {
+  background: #1BBC9B !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Green Seagreen
+***/
+/* Button */
+.green-seagreen.btn {
+  color: #FFFFFF;
+  background-color: #1BA39C;
+  border-color: "";
+}
+.green-seagreen.btn:hover, .green-seagreen.btn:focus, .green-seagreen.btn:active, .green-seagreen.btn.active {
+  color: #FFFFFF;
+  background-color: #16847f;
+}
+.open .green-seagreen.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #16847f;
+}
+.green-seagreen.btn:active, .green-seagreen.btn.active {
+  background-image: none;
+  background-color: #126e6a;
+}
+.green-seagreen.btn:active:hover, .green-seagreen.btn.active:hover {
+  background-color: #147772;
+}
+.open .green-seagreen.btn.dropdown-toggle {
+  background-image: none;
+}
+.green-seagreen.btn.disabled, .green-seagreen.btn.disabled:hover, .green-seagreen.btn.disabled:focus, .green-seagreen.btn.disabled:active, .green-seagreen.btn.disabled.active, .green-seagreen.btn[disabled], .green-seagreen.btn[disabled]:hover, .green-seagreen.btn[disabled]:focus, .green-seagreen.btn[disabled]:active, .green-seagreen.btn[disabled].active, fieldset[disabled] .green-seagreen.btn, fieldset[disabled] .green-seagreen.btn:hover, fieldset[disabled] .green-seagreen.btn:focus, fieldset[disabled] .green-seagreen.btn:active, fieldset[disabled] .green-seagreen.btn.active {
+  background-color: #1BA39C;
+}
+.green-seagreen.btn .badge {
+  color: #1BA39C;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-seagreen-stripe {
+  border-left: 3px solid #1BA39C;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-seagreen,
+.portlet.green-seagreen {
+  background-color: #1BA39C;
+}
+
+.portlet.solid.green-seagreen > .portlet-title,
+.portlet.solid.green-seagreen > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.green-seagreen > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.green-seagreen > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.green-seagreen {
+  border: 1px solid #22cfc6;
+  border-top: 0;
+}
+.portlet.box.green-seagreen > .portlet-title {
+  background-color: #1BA39C;
+}
+.portlet.box.green-seagreen > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.green-seagreen > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.green-seagreen > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #4de1da;
+  color: #63e5de;
+}
+.portlet.box.green-seagreen > .portlet-title > .actions .btn-default > i {
+  color: #70e7e1;
+}
+.portlet.box.green-seagreen > .portlet-title > .actions .btn-default:hover, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default:focus, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default:active, .portlet.box.green-seagreen > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #78e9e3;
+  color: #8eece8;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-seagreen {
+  background-color: #1BA39C;
+}
+.dashboard-stat.green-seagreen.dashboard-stat-light:hover {
+  background-color: #18918b;
+}
+.dashboard-stat.green-seagreen .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.green-seagreen .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.green-seagreen .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.green-seagreen .more {
+  color: #FFFFFF;
+  background-color: #18918b;
+}
+
+/* General Element */
+.bg-green-seagreen {
+  border-color: #1BA39C !important;
+  background-image: none !important;
+  background-color: #1BA39C !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-seagreen {
+  color: #1BA39C !important;
+}
+
+.progress-bar.green-seagreen {
+  background: #1BA39C !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Green Turquoise
+***/
+/* Button */
+.green-turquoise.btn {
+  color: #FFFFFF;
+  background-color: #36D7B7;
+  border-color: "";
+}
+.green-turquoise.btn:hover, .green-turquoise.btn:focus, .green-turquoise.btn:active, .green-turquoise.btn.active {
+  color: #FFFFFF;
+  background-color: #27c3a4;
+}
+.open .green-turquoise.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #27c3a4;
+}
+.green-turquoise.btn:active, .green-turquoise.btn.active {
+  background-image: none;
+  background-color: #22ad92;
+}
+.green-turquoise.btn:active:hover, .green-turquoise.btn.active:hover {
+  background-color: #24b699;
+}
+.open .green-turquoise.btn.dropdown-toggle {
+  background-image: none;
+}
+.green-turquoise.btn.disabled, .green-turquoise.btn.disabled:hover, .green-turquoise.btn.disabled:focus, .green-turquoise.btn.disabled:active, .green-turquoise.btn.disabled.active, .green-turquoise.btn[disabled], .green-turquoise.btn[disabled]:hover, .green-turquoise.btn[disabled]:focus, .green-turquoise.btn[disabled]:active, .green-turquoise.btn[disabled].active, fieldset[disabled] .green-turquoise.btn, fieldset[disabled] .green-turquoise.btn:hover, fieldset[disabled] .green-turquoise.btn:focus, fieldset[disabled] .green-turquoise.btn:active, fieldset[disabled] .green-turquoise.btn.active {
+  background-color: #36D7B7;
+}
+.green-turquoise.btn .badge {
+  color: #36D7B7;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-turquoise-stripe {
+  border-left: 3px solid #36D7B7;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-turquoise,
+.portlet.green-turquoise {
+  background-color: #36D7B7;
+}
+
+.portlet.solid.green-turquoise > .portlet-title,
+.portlet.solid.green-turquoise > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.green-turquoise > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.green-turquoise > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.green-turquoise {
+  border: 1px solid #61dfc6;
+  border-top: 0;
+}
+.portlet.box.green-turquoise > .portlet-title {
+  background-color: #36D7B7;
+}
+.portlet.box.green-turquoise > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.green-turquoise > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.green-turquoise > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #94ead9;
+  color: #a9eee0;
+}
+.portlet.box.green-turquoise > .portlet-title > .actions .btn-default > i {
+  color: #b6f0e5;
+}
+.portlet.box.green-turquoise > .portlet-title > .actions .btn-default:hover, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default:focus, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default:active, .portlet.box.green-turquoise > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #bef2e8;
+  color: #d3f6ef;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-turquoise {
+  background-color: #36D7B7;
+}
+.dashboard-stat.green-turquoise.dashboard-stat-light:hover {
+  background-color: #29cfae;
+}
+.dashboard-stat.green-turquoise .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.green-turquoise .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.green-turquoise .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.green-turquoise .more {
+  color: #FFFFFF;
+  background-color: #29cfae;
+}
+
+/* General Element */
+.bg-green-turquoise {
+  border-color: #36D7B7 !important;
+  background-image: none !important;
+  background-color: #36D7B7 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-turquoise {
+  color: #36D7B7 !important;
+}
+
+.progress-bar.green-turquoise {
+  background: #36D7B7 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Green Haze
+***/
+/* Button */
+.green-haze.btn {
+  color: #FFFFFF;
+  background-color: #44b6ae;
+  border-color: "";
+}
+.green-haze.btn:hover, .green-haze.btn:focus, .green-haze.btn:active, .green-haze.btn.active {
+  color: #FFFFFF;
+  background-color: #3a9c95;
+}
+.open .green-haze.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #3a9c95;
+}
+.green-haze.btn:active, .green-haze.btn.active {
+  background-image: none;
+  background-color: #338983;
+}
+.green-haze.btn:active:hover, .green-haze.btn.active:hover {
+  background-color: #36918b;
+}
+.open .green-haze.btn.dropdown-toggle {
+  background-image: none;
+}
+.green-haze.btn.disabled, .green-haze.btn.disabled:hover, .green-haze.btn.disabled:focus, .green-haze.btn.disabled:active, .green-haze.btn.disabled.active, .green-haze.btn[disabled], .green-haze.btn[disabled]:hover, .green-haze.btn[disabled]:focus, .green-haze.btn[disabled]:active, .green-haze.btn[disabled].active, fieldset[disabled] .green-haze.btn, fieldset[disabled] .green-haze.btn:hover, fieldset[disabled] .green-haze.btn:focus, fieldset[disabled] .green-haze.btn:active, fieldset[disabled] .green-haze.btn.active {
+  background-color: #44b6ae;
+}
+.green-haze.btn .badge {
+  color: #44b6ae;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-haze-stripe {
+  border-left: 3px solid #44b6ae;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-haze,
+.portlet.green-haze {
+  background-color: #44b6ae;
+}
+
+.portlet.solid.green-haze > .portlet-title,
+.portlet.solid.green-haze > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.green-haze > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.green-haze > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.green-haze > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.green-haze > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.green-haze > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.green-haze > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.green-haze > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.green-haze {
+  border: 1px solid #67c6bf;
+  border-top: 0;
+}
+.portlet.box.green-haze > .portlet-title {
+  background-color: #44b6ae;
+}
+.portlet.box.green-haze > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.green-haze > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.green-haze > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #93d7d2;
+  color: #a6deda;
+}
+.portlet.box.green-haze > .portlet-title > .actions .btn-default > i {
+  color: #b1e2de;
+}
+.portlet.box.green-haze > .portlet-title > .actions .btn-default:hover, .portlet.box.green-haze > .portlet-title > .actions .btn-default:focus, .portlet.box.green-haze > .portlet-title > .actions .btn-default:active, .portlet.box.green-haze > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #b9e5e2;
+  color: #cbece9;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-haze {
+  background-color: #44b6ae;
+}
+.dashboard-stat.green-haze.dashboard-stat-light:hover {
+  background-color: #3ea7a0;
+}
+.dashboard-stat.green-haze .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.green-haze .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.green-haze .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.green-haze .more {
+  color: #FFFFFF;
+  background-color: #3ea7a0;
+}
+
+/* General Element */
+.bg-green-haze {
+  border-color: #44b6ae !important;
+  background-image: none !important;
+  background-color: #44b6ae !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-haze {
+  color: #44b6ae !important;
+}
+
+.progress-bar.green-haze {
+  background: #44b6ae !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Green Jungle
+***/
+/* Button */
+.green-jungle.btn {
+  color: #FFFFFF;
+  background-color: #26C281;
+  border-color: "";
+}
+.green-jungle.btn:hover, .green-jungle.btn:focus, .green-jungle.btn:active, .green-jungle.btn.active {
+  color: #FFFFFF;
+  background-color: #20a46d;
+}
+.open .green-jungle.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #20a46d;
+}
+.green-jungle.btn:active, .green-jungle.btn.active {
+  background-image: none;
+  background-color: #1c8f5f;
+}
+.green-jungle.btn:active:hover, .green-jungle.btn.active:hover {
+  background-color: #1e9765;
+}
+.open .green-jungle.btn.dropdown-toggle {
+  background-image: none;
+}
+.green-jungle.btn.disabled, .green-jungle.btn.disabled:hover, .green-jungle.btn.disabled:focus, .green-jungle.btn.disabled:active, .green-jungle.btn.disabled.active, .green-jungle.btn[disabled], .green-jungle.btn[disabled]:hover, .green-jungle.btn[disabled]:focus, .green-jungle.btn[disabled]:active, .green-jungle.btn[disabled].active, fieldset[disabled] .green-jungle.btn, fieldset[disabled] .green-jungle.btn:hover, fieldset[disabled] .green-jungle.btn:focus, fieldset[disabled] .green-jungle.btn:active, fieldset[disabled] .green-jungle.btn.active {
+  background-color: #26C281;
+}
+.green-jungle.btn .badge {
+  color: #26C281;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-jungle-stripe {
+  border-left: 3px solid #26C281;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-jungle,
+.portlet.green-jungle {
+  background-color: #26C281;
+}
+
+.portlet.solid.green-jungle > .portlet-title,
+.portlet.solid.green-jungle > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.green-jungle > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.green-jungle > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.green-jungle > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.green-jungle > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.green-jungle > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.green-jungle > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.green-jungle > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.green-jungle {
+  border: 1px solid #41da9a;
+  border-top: 0;
+}
+.portlet.box.green-jungle > .portlet-title {
+  background-color: #26C281;
+}
+.portlet.box.green-jungle > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.green-jungle > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.green-jungle > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #74e4b5;
+  color: #8ae8c1;
+}
+.portlet.box.green-jungle > .portlet-title > .actions .btn-default > i {
+  color: #96ebc8;
+}
+.portlet.box.green-jungle > .portlet-title > .actions .btn-default:hover, .portlet.box.green-jungle > .portlet-title > .actions .btn-default:focus, .portlet.box.green-jungle > .portlet-title > .actions .btn-default:active, .portlet.box.green-jungle > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #9feccc;
+  color: #b4f0d7;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-jungle {
+  background-color: #26C281;
+}
+.dashboard-stat.green-jungle.dashboard-stat-light:hover {
+  background-color: #23b176;
+}
+.dashboard-stat.green-jungle .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.green-jungle .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.green-jungle .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.green-jungle .more {
+  color: #FFFFFF;
+  background-color: #23b176;
+}
+
+/* General Element */
+.bg-green-jungle {
+  border-color: #26C281 !important;
+  background-image: none !important;
+  background-color: #26C281 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-jungle {
+  color: #26C281 !important;
+}
+
+.progress-bar.green-jungle {
+  background: #26C281 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Green Sharp
+***/
+/* Button */
+.green-sharp.btn {
+  color: #FFFFFF;
+  background-color: #4DB3A2;
+  border-color: "";
+}
+.green-sharp.btn:hover, .green-sharp.btn:focus, .green-sharp.btn:active, .green-sharp.btn.active {
+  color: #FFFFFF;
+  background-color: #429a8c;
+}
+.open .green-sharp.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #429a8c;
+}
+.green-sharp.btn:active, .green-sharp.btn.active {
+  background-image: none;
+  background-color: #3a897b;
+}
+.green-sharp.btn:active:hover, .green-sharp.btn.active:hover {
+  background-color: #3d9082;
+}
+.open .green-sharp.btn.dropdown-toggle {
+  background-image: none;
+}
+.green-sharp.btn.disabled, .green-sharp.btn.disabled:hover, .green-sharp.btn.disabled:focus, .green-sharp.btn.disabled:active, .green-sharp.btn.disabled.active, .green-sharp.btn[disabled], .green-sharp.btn[disabled]:hover, .green-sharp.btn[disabled]:focus, .green-sharp.btn[disabled]:active, .green-sharp.btn[disabled].active, fieldset[disabled] .green-sharp.btn, fieldset[disabled] .green-sharp.btn:hover, fieldset[disabled] .green-sharp.btn:focus, fieldset[disabled] .green-sharp.btn:active, fieldset[disabled] .green-sharp.btn.active {
+  background-color: #4DB3A2;
+}
+.green-sharp.btn .badge {
+  color: #4DB3A2;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-sharp-stripe {
+  border-left: 3px solid #4DB3A2;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-sharp,
+.portlet.green-sharp {
+  background-color: #4DB3A2;
+}
+
+.portlet.solid.green-sharp > .portlet-title,
+.portlet.solid.green-sharp > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.green-sharp > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.green-sharp > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.green-sharp > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.green-sharp > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.green-sharp > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.green-sharp > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.green-sharp > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.green-sharp {
+  border: 1px solid #71c2b5;
+  border-top: 0;
+}
+.portlet.box.green-sharp > .portlet-title {
+  background-color: #4DB3A2;
+}
+.portlet.box.green-sharp > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.green-sharp > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.green-sharp > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #9cd5cb;
+  color: #addcd4;
+}
+.portlet.box.green-sharp > .portlet-title > .actions .btn-default > i {
+  color: #b8e1da;
+}
+.portlet.box.green-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.green-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.green-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.green-sharp > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #bfe4de;
+  color: #d1ebe7;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-sharp {
+  background-color: #4DB3A2;
+}
+.dashboard-stat.green-sharp.dashboard-stat-light:hover {
+  background-color: #46a595;
+}
+.dashboard-stat.green-sharp .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.green-sharp .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.green-sharp .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.green-sharp .more {
+  color: #FFFFFF;
+  background-color: #46a595;
+}
+
+/* General Element */
+.bg-green-sharp {
+  border-color: #4DB3A2 !important;
+  background-image: none !important;
+  background-color: #4DB3A2 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-sharp {
+  color: #4DB3A2 !important;
+}
+
+.progress-bar.green-sharp {
+  background: #4DB3A2 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Green Sharp
+***/
+/* Button */
+.green-soft.btn {
+  color: #FFFFFF;
+  background-color: #3faba4;
+  border-color: "";
+}
+.green-soft.btn:hover, .green-soft.btn:focus, .green-soft.btn:active, .green-soft.btn.active {
+  color: #FFFFFF;
+  background-color: #35918b;
+}
+.open .green-soft.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #35918b;
+}
+.green-soft.btn:active, .green-soft.btn.active {
+  background-image: none;
+  background-color: #2f7e79;
+}
+.green-soft.btn:active:hover, .green-soft.btn.active:hover {
+  background-color: #318680;
+}
+.open .green-soft.btn.dropdown-toggle {
+  background-image: none;
+}
+.green-soft.btn.disabled, .green-soft.btn.disabled:hover, .green-soft.btn.disabled:focus, .green-soft.btn.disabled:active, .green-soft.btn.disabled.active, .green-soft.btn[disabled], .green-soft.btn[disabled]:hover, .green-soft.btn[disabled]:focus, .green-soft.btn[disabled]:active, .green-soft.btn[disabled].active, fieldset[disabled] .green-soft.btn, fieldset[disabled] .green-soft.btn:hover, fieldset[disabled] .green-soft.btn:focus, fieldset[disabled] .green-soft.btn:active, fieldset[disabled] .green-soft.btn.active {
+  background-color: #3faba4;
+}
+.green-soft.btn .badge {
+  color: #3faba4;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.green-soft-stripe {
+  border-left: 3px solid #3faba4;
+}
+
+/* Portlet */
+.portlet > .portlet-body.green-soft,
+.portlet.green-soft {
+  background-color: #3faba4;
+}
+
+.portlet.solid.green-soft > .portlet-title,
+.portlet.solid.green-soft > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.green-soft > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.green-soft > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.green-soft > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.green-soft > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.green-soft > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.green-soft > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.green-soft > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.green-soft {
+  border: 1px solid #5bc2bc;
+  border-top: 0;
+}
+.portlet.box.green-soft > .portlet-title {
+  background-color: #3faba4;
+}
+.portlet.box.green-soft > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.green-soft > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.green-soft > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #87d3ce;
+  color: #9adad6;
+}
+.portlet.box.green-soft > .portlet-title > .actions .btn-default > i {
+  color: #a5deda;
+}
+.portlet.box.green-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.green-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.green-soft > .portlet-title > .actions .btn-default:active, .portlet.box.green-soft > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #ade1dd;
+  color: #bfe7e5;
+}
+
+/* Statistic Block */
+.dashboard-stat.green-soft {
+  background-color: #3faba4;
+}
+.dashboard-stat.green-soft.dashboard-stat-light:hover {
+  background-color: #3a9c96;
+}
+.dashboard-stat.green-soft .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.green-soft .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.green-soft .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.green-soft .more {
+  color: #FFFFFF;
+  background-color: #3a9c96;
+}
+
+/* General Element */
+.bg-green-soft {
+  border-color: #3faba4 !important;
+  background-image: none !important;
+  background-color: #3faba4 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-green-soft {
+  color: #3faba4 !important;
+}
+
+.progress-bar.green-soft {
+  background: #3faba4 !important;
+  color: #FFFFFF !important;
+}
+
+/***********
+Grey Colors
+************/
+/***
+Grey Default
+***/
+/* Button */
+.grey.btn {
+  color: #333333;
+  background-color: #E5E5E5;
+  border-color: "";
+}
+.grey.btn:hover, .grey.btn:focus, .grey.btn:active, .grey.btn.active {
+  color: #333333;
+  background-color: lightgray;
+}
+.open .grey.btn.dropdown-toggle {
+  color: #333333;
+  background-color: lightgray;
+}
+.grey.btn:active, .grey.btn.active {
+  background-image: none;
+  background-color: #c6c6c6;
+}
+.grey.btn:active:hover, .grey.btn.active:hover {
+  background-color: #cccccc;
+}
+.open .grey.btn.dropdown-toggle {
+  background-image: none;
+}
+.grey.btn.disabled, .grey.btn.disabled:hover, .grey.btn.disabled:focus, .grey.btn.disabled:active, .grey.btn.disabled.active, .grey.btn[disabled], .grey.btn[disabled]:hover, .grey.btn[disabled]:focus, .grey.btn[disabled]:active, .grey.btn[disabled].active, fieldset[disabled] .grey.btn, fieldset[disabled] .grey.btn:hover, fieldset[disabled] .grey.btn:focus, fieldset[disabled] .grey.btn:active, fieldset[disabled] .grey.btn.active {
+  background-color: #E5E5E5;
+}
+.grey.btn .badge {
+  color: #E5E5E5;
+  background-color: #333333;
+}
+
+/* Button Strip */
+.btn.grey-stripe {
+  border-left: 3px solid #E5E5E5;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey,
+.portlet.grey {
+  background-color: #E5E5E5;
+}
+
+.portlet.solid.grey > .portlet-title,
+.portlet.solid.grey > .portlet-body {
+  border: 0;
+  color: #333333;
+}
+.portlet.solid.grey > .portlet-title > .caption > i {
+  color: #333333;
+}
+.portlet.solid.grey > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.grey > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.grey > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.grey > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.grey > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.grey > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.grey {
+  border: 1px solid white;
+  border-top: 0;
+}
+.portlet.box.grey > .portlet-title {
+  background-color: #E5E5E5;
+}
+.portlet.box.grey > .portlet-title > .caption {
+  color: #333333;
+}
+.portlet.box.grey > .portlet-title > .caption > i {
+  color: #333333;
+}
+.portlet.box.grey > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid white;
+  color: white;
+}
+.portlet.box.grey > .portlet-title > .actions .btn-default > i {
+  color: white;
+}
+.portlet.box.grey > .portlet-title > .actions .btn-default:hover, .portlet.box.grey > .portlet-title > .actions .btn-default:focus, .portlet.box.grey > .portlet-title > .actions .btn-default:active, .portlet.box.grey > .portlet-title > .actions .btn-default.active {
+  border: 1px solid white;
+  color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey {
+  background-color: #E5E5E5;
+}
+.dashboard-stat.grey.dashboard-stat-light:hover {
+  background-color: #dbdbdb;
+}
+.dashboard-stat.grey .visual > i {
+  color: #333333;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.grey .details .number {
+  color: #333333;
+}
+.dashboard-stat.grey .details .desc {
+  color: #333333;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.grey .more {
+  color: #333333;
+  background-color: #dbdbdb;
+}
+
+/* General Element */
+.bg-grey {
+  border-color: #E5E5E5 !important;
+  background-image: none !important;
+  background-color: #E5E5E5 !important;
+  color: #333333 !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey {
+  color: #E5E5E5 !important;
+}
+
+.progress-bar.grey {
+  background: #E5E5E5 !important;
+  color: #333333 !important;
+}
+
+/***
+Grey Steel
+***/
+/* Button */
+.grey-steel.btn {
+  color: #80898e;
+  background-color: #e9edef;
+  border-color: "";
+}
+.grey-steel.btn:hover, .grey-steel.btn:focus, .grey-steel.btn:active, .grey-steel.btn.active {
+  color: #80898e;
+  background-color: #d4dce0;
+}
+.open .grey-steel.btn.dropdown-toggle {
+  color: #80898e;
+  background-color: #d4dce0;
+}
+.grey-steel.btn:active, .grey-steel.btn.active {
+  background-image: none;
+  background-color: #c6d0d5;
+}
+.grey-steel.btn:active:hover, .grey-steel.btn.active:hover {
+  background-color: #cbd5da;
+}
+.open .grey-steel.btn.dropdown-toggle {
+  background-image: none;
+}
+.grey-steel.btn.disabled, .grey-steel.btn.disabled:hover, .grey-steel.btn.disabled:focus, .grey-steel.btn.disabled:active, .grey-steel.btn.disabled.active, .grey-steel.btn[disabled], .grey-steel.btn[disabled]:hover, .grey-steel.btn[disabled]:focus, .grey-steel.btn[disabled]:active, .grey-steel.btn[disabled].active, fieldset[disabled] .grey-steel.btn, fieldset[disabled] .grey-steel.btn:hover, fieldset[disabled] .grey-steel.btn:focus, fieldset[disabled] .grey-steel.btn:active, fieldset[disabled] .grey-steel.btn.active {
+  background-color: #e9edef;
+}
+.grey-steel.btn .badge {
+  color: #e9edef;
+  background-color: #80898e;
+}
+
+/* Button Strip */
+.btn.grey-steel-stripe {
+  border-left: 3px solid #e9edef;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-steel,
+.portlet.grey-steel {
+  background-color: #e9edef;
+}
+
+.portlet.solid.grey-steel > .portlet-title,
+.portlet.solid.grey-steel > .portlet-body {
+  border: 0;
+  color: #80898e;
+}
+.portlet.solid.grey-steel > .portlet-title > .caption > i {
+  color: #80898e;
+}
+.portlet.solid.grey-steel > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.grey-steel > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.grey-steel > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.grey-steel > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.grey-steel > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.grey-steel > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.grey-steel {
+  border: 1px solid white;
+  border-top: 0;
+}
+.portlet.box.grey-steel > .portlet-title {
+  background-color: #e9edef;
+}
+.portlet.box.grey-steel > .portlet-title > .caption {
+  color: #80898e;
+}
+.portlet.box.grey-steel > .portlet-title > .caption > i {
+  color: #80898e;
+}
+.portlet.box.grey-steel > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid white;
+  color: white;
+}
+.portlet.box.grey-steel > .portlet-title > .actions .btn-default > i {
+  color: white;
+}
+.portlet.box.grey-steel > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-steel > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-steel > .portlet-title > .actions .btn-default:active, .portlet.box.grey-steel > .portlet-title > .actions .btn-default.active {
+  border: 1px solid white;
+  color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-steel {
+  background-color: #e9edef;
+}
+.dashboard-stat.grey-steel.dashboard-stat-light:hover {
+  background-color: #dde3e6;
+}
+.dashboard-stat.grey-steel .visual > i {
+  color: #80898e;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.grey-steel .details .number {
+  color: #80898e;
+}
+.dashboard-stat.grey-steel .details .desc {
+  color: #80898e;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.grey-steel .more {
+  color: #80898e;
+  background-color: #dde3e6;
+}
+
+/* General Element */
+.bg-grey-steel {
+  border-color: #e9edef !important;
+  background-image: none !important;
+  background-color: #e9edef !important;
+  color: #80898e !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-steel {
+  color: #e9edef !important;
+}
+
+.progress-bar.grey-steel {
+  background: #e9edef !important;
+  color: #80898e !important;
+}
+
+/***
+Grey Cararra
+***/
+/* Button */
+.grey-cararra.btn {
+  color: #333333;
+  background-color: #fafafa;
+  border-color: "";
+}
+.grey-cararra.btn:hover, .grey-cararra.btn:focus, .grey-cararra.btn:active, .grey-cararra.btn.active {
+  color: #333333;
+  background-color: #e8e8e8;
+}
+.open .grey-cararra.btn.dropdown-toggle {
+  color: #333333;
+  background-color: #e8e8e8;
+}
+.grey-cararra.btn:active, .grey-cararra.btn.active {
+  background-image: none;
+  background-color: #dbdbdb;
+}
+.grey-cararra.btn:active:hover, .grey-cararra.btn.active:hover {
+  background-color: #e1e1e1;
+}
+.open .grey-cararra.btn.dropdown-toggle {
+  background-image: none;
+}
+.grey-cararra.btn.disabled, .grey-cararra.btn.disabled:hover, .grey-cararra.btn.disabled:focus, .grey-cararra.btn.disabled:active, .grey-cararra.btn.disabled.active, .grey-cararra.btn[disabled], .grey-cararra.btn[disabled]:hover, .grey-cararra.btn[disabled]:focus, .grey-cararra.btn[disabled]:active, .grey-cararra.btn[disabled].active, fieldset[disabled] .grey-cararra.btn, fieldset[disabled] .grey-cararra.btn:hover, fieldset[disabled] .grey-cararra.btn:focus, fieldset[disabled] .grey-cararra.btn:active, fieldset[disabled] .grey-cararra.btn.active {
+  background-color: #fafafa;
+}
+.grey-cararra.btn .badge {
+  color: #fafafa;
+  background-color: #333333;
+}
+
+/* Button Strip */
+.btn.grey-cararra-stripe {
+  border-left: 3px solid #fafafa;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-cararra,
+.portlet.grey-cararra {
+  background-color: #fafafa;
+}
+
+.portlet.solid.grey-cararra > .portlet-title,
+.portlet.solid.grey-cararra > .portlet-body {
+  border: 0;
+  color: #333333;
+}
+.portlet.solid.grey-cararra > .portlet-title > .caption > i {
+  color: #333333;
+}
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.grey-cararra > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.grey-cararra {
+  border: 1px solid white;
+  border-top: 0;
+}
+.portlet.box.grey-cararra > .portlet-title {
+  background-color: #fafafa;
+}
+.portlet.box.grey-cararra > .portlet-title > .caption {
+  color: #333333;
+}
+.portlet.box.grey-cararra > .portlet-title > .caption > i {
+  color: #333333;
+}
+.portlet.box.grey-cararra > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid white;
+  color: white;
+}
+.portlet.box.grey-cararra > .portlet-title > .actions .btn-default > i {
+  color: white;
+}
+.portlet.box.grey-cararra > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default:active, .portlet.box.grey-cararra > .portlet-title > .actions .btn-default.active {
+  border: 1px solid white;
+  color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-cararra {
+  background-color: #fafafa;
+}
+.dashboard-stat.grey-cararra.dashboard-stat-light:hover {
+  background-color: #f0f0f0;
+}
+.dashboard-stat.grey-cararra .visual > i {
+  color: #333333;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.grey-cararra .details .number {
+  color: #333333;
+}
+.dashboard-stat.grey-cararra .details .desc {
+  color: #333333;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.grey-cararra .more {
+  color: #333333;
+  background-color: #f0f0f0;
+}
+
+/* General Element */
+.bg-grey-cararra {
+  border-color: #fafafa !important;
+  background-image: none !important;
+  background-color: #fafafa !important;
+  color: #333333 !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-cararra {
+  color: #fafafa !important;
+}
+
+.progress-bar.grey-cararra {
+  background: #fafafa !important;
+  color: #333333 !important;
+}
+
+/***
+Grey Gallery
+***/
+/* Button */
+.grey-gallery.btn {
+  color: #ffffff;
+  background-color: #555555;
+  border-color: "";
+}
+.grey-gallery.btn:hover, .grey-gallery.btn:focus, .grey-gallery.btn:active, .grey-gallery.btn.active {
+  color: #ffffff;
+  background-color: #434343;
+}
+.open .grey-gallery.btn.dropdown-toggle {
+  color: #ffffff;
+  background-color: #434343;
+}
+.grey-gallery.btn:active, .grey-gallery.btn.active {
+  background-image: none;
+  background-color: #363636;
+}
+.grey-gallery.btn:active:hover, .grey-gallery.btn.active:hover {
+  background-color: #3b3b3b;
+}
+.open .grey-gallery.btn.dropdown-toggle {
+  background-image: none;
+}
+.grey-gallery.btn.disabled, .grey-gallery.btn.disabled:hover, .grey-gallery.btn.disabled:focus, .grey-gallery.btn.disabled:active, .grey-gallery.btn.disabled.active, .grey-gallery.btn[disabled], .grey-gallery.btn[disabled]:hover, .grey-gallery.btn[disabled]:focus, .grey-gallery.btn[disabled]:active, .grey-gallery.btn[disabled].active, fieldset[disabled] .grey-gallery.btn, fieldset[disabled] .grey-gallery.btn:hover, fieldset[disabled] .grey-gallery.btn:focus, fieldset[disabled] .grey-gallery.btn:active, fieldset[disabled] .grey-gallery.btn.active {
+  background-color: #555555;
+}
+.grey-gallery.btn .badge {
+  color: #555555;
+  background-color: #ffffff;
+}
+
+/* Button Strip */
+.btn.grey-gallery-stripe {
+  border-left: 3px solid #555555;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-gallery,
+.portlet.grey-gallery {
+  background-color: #555555;
+}
+
+.portlet.solid.grey-gallery > .portlet-title,
+.portlet.solid.grey-gallery > .portlet-body {
+  border: 0;
+  color: #ffffff;
+}
+.portlet.solid.grey-gallery > .portlet-title > .caption > i {
+  color: #ffffff;
+}
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.grey-gallery > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.grey-gallery {
+  border: 1px solid #6e6e6e;
+  border-top: 0;
+}
+.portlet.box.grey-gallery > .portlet-title {
+  background-color: #555555;
+}
+.portlet.box.grey-gallery > .portlet-title > .caption {
+  color: #ffffff;
+}
+.portlet.box.grey-gallery > .portlet-title > .caption > i {
+  color: #ffffff;
+}
+.portlet.box.grey-gallery > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #8d8d8d;
+  color: #9a9a9a;
+}
+.portlet.box.grey-gallery > .portlet-title > .actions .btn-default > i {
+  color: #a2a2a2;
+}
+.portlet.box.grey-gallery > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default:active, .portlet.box.grey-gallery > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #a7a7a7;
+  color: #b3b3b3;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-gallery {
+  background-color: #555555;
+}
+.dashboard-stat.grey-gallery.dashboard-stat-light:hover {
+  background-color: #4b4b4b;
+}
+.dashboard-stat.grey-gallery .visual > i {
+  color: #ffffff;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.grey-gallery .details .number {
+  color: #ffffff;
+}
+.dashboard-stat.grey-gallery .details .desc {
+  color: #ffffff;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.grey-gallery .more {
+  color: #ffffff;
+  background-color: #4b4b4b;
+}
+
+/* General Element */
+.bg-grey-gallery {
+  border-color: #555555 !important;
+  background-image: none !important;
+  background-color: #555555 !important;
+  color: #ffffff !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-gallery {
+  color: #555555 !important;
+}
+
+.progress-bar.grey-gallery {
+  background: #555555 !important;
+  color: #ffffff !important;
+}
+
+/***
+Grey Cascade
+***/
+/* Button */
+.grey-cascade.btn {
+  color: #FFFFFF;
+  background-color: #95A5A6;
+  border-color: "";
+}
+.grey-cascade.btn:hover, .grey-cascade.btn:focus, .grey-cascade.btn:active, .grey-cascade.btn.active {
+  color: #FFFFFF;
+  background-color: #829596;
+}
+.open .grey-cascade.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #829596;
+}
+.grey-cascade.btn:active, .grey-cascade.btn.active {
+  background-image: none;
+  background-color: #74898a;
+}
+.grey-cascade.btn:active:hover, .grey-cascade.btn.active:hover {
+  background-color: #798d8f;
+}
+.open .grey-cascade.btn.dropdown-toggle {
+  background-image: none;
+}
+.grey-cascade.btn.disabled, .grey-cascade.btn.disabled:hover, .grey-cascade.btn.disabled:focus, .grey-cascade.btn.disabled:active, .grey-cascade.btn.disabled.active, .grey-cascade.btn[disabled], .grey-cascade.btn[disabled]:hover, .grey-cascade.btn[disabled]:focus, .grey-cascade.btn[disabled]:active, .grey-cascade.btn[disabled].active, fieldset[disabled] .grey-cascade.btn, fieldset[disabled] .grey-cascade.btn:hover, fieldset[disabled] .grey-cascade.btn:focus, fieldset[disabled] .grey-cascade.btn:active, fieldset[disabled] .grey-cascade.btn.active {
+  background-color: #95A5A6;
+}
+.grey-cascade.btn .badge {
+  color: #95A5A6;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.grey-cascade-stripe {
+  border-left: 3px solid #95A5A6;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-cascade,
+.portlet.grey-cascade {
+  background-color: #95A5A6;
+}
+
+.portlet.solid.grey-cascade > .portlet-title,
+.portlet.solid.grey-cascade > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.grey-cascade > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.grey-cascade > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.grey-cascade {
+  border: 1px solid #b1bdbd;
+  border-top: 0;
+}
+.portlet.box.grey-cascade > .portlet-title {
+  background-color: #95A5A6;
+}
+.portlet.box.grey-cascade > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.grey-cascade > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.grey-cascade > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #d2d9d9;
+  color: #e0e5e5;
+}
+.portlet.box.grey-cascade > .portlet-title > .actions .btn-default > i {
+  color: #e8ecec;
+}
+.portlet.box.grey-cascade > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default:active, .portlet.box.grey-cascade > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #eef0f0;
+  color: #fcfcfc;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-cascade {
+  background-color: #95A5A6;
+}
+.dashboard-stat.grey-cascade.dashboard-stat-light:hover {
+  background-color: #8a9c9d;
+}
+.dashboard-stat.grey-cascade .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.grey-cascade .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.grey-cascade .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.grey-cascade .more {
+  color: #FFFFFF;
+  background-color: #8a9c9d;
+}
+
+/* General Element */
+.bg-grey-cascade {
+  border-color: #95A5A6 !important;
+  background-image: none !important;
+  background-color: #95A5A6 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-cascade {
+  color: #95A5A6 !important;
+}
+
+.progress-bar.grey-cascade {
+  background: #95A5A6 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Grey Silver
+***/
+/* Button */
+.grey-silver.btn {
+  color: #FAFCFB;
+  background-color: #BFBFBF;
+  border-color: "";
+}
+.grey-silver.btn:hover, .grey-silver.btn:focus, .grey-silver.btn:active, .grey-silver.btn.active {
+  color: #FAFCFB;
+  background-color: #adadad;
+}
+.open .grey-silver.btn.dropdown-toggle {
+  color: #FAFCFB;
+  background-color: #adadad;
+}
+.grey-silver.btn:active, .grey-silver.btn.active {
+  background-image: none;
+  background-color: #a0a0a0;
+}
+.grey-silver.btn:active:hover, .grey-silver.btn.active:hover {
+  background-color: #a6a6a6;
+}
+.open .grey-silver.btn.dropdown-toggle {
+  background-image: none;
+}
+.grey-silver.btn.disabled, .grey-silver.btn.disabled:hover, .grey-silver.btn.disabled:focus, .grey-silver.btn.disabled:active, .grey-silver.btn.disabled.active, .grey-silver.btn[disabled], .grey-silver.btn[disabled]:hover, .grey-silver.btn[disabled]:focus, .grey-silver.btn[disabled]:active, .grey-silver.btn[disabled].active, fieldset[disabled] .grey-silver.btn, fieldset[disabled] .grey-silver.btn:hover, fieldset[disabled] .grey-silver.btn:focus, fieldset[disabled] .grey-silver.btn:active, fieldset[disabled] .grey-silver.btn.active {
+  background-color: #BFBFBF;
+}
+.grey-silver.btn .badge {
+  color: #BFBFBF;
+  background-color: #FAFCFB;
+}
+
+/* Button Strip */
+.btn.grey-silver-stripe {
+  border-left: 3px solid #BFBFBF;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-silver,
+.portlet.grey-silver {
+  background-color: #BFBFBF;
+}
+
+.portlet.solid.grey-silver > .portlet-title,
+.portlet.solid.grey-silver > .portlet-body {
+  border: 0;
+  color: #FAFCFB;
+}
+.portlet.solid.grey-silver > .portlet-title > .caption > i {
+  color: #FAFCFB;
+}
+.portlet.solid.grey-silver > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.grey-silver > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.grey-silver > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.grey-silver > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.grey-silver > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.grey-silver > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.grey-silver {
+  border: 1px solid #d9d9d9;
+  border-top: 0;
+}
+.portlet.box.grey-silver > .portlet-title {
+  background-color: #BFBFBF;
+}
+.portlet.box.grey-silver > .portlet-title > .caption {
+  color: #FAFCFB;
+}
+.portlet.box.grey-silver > .portlet-title > .caption > i {
+  color: #FAFCFB;
+}
+.portlet.box.grey-silver > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #f7f7f7;
+  color: white;
+}
+.portlet.box.grey-silver > .portlet-title > .actions .btn-default > i {
+  color: white;
+}
+.portlet.box.grey-silver > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-silver > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-silver > .portlet-title > .actions .btn-default:active, .portlet.box.grey-silver > .portlet-title > .actions .btn-default.active {
+  border: 1px solid white;
+  color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-silver {
+  background-color: #BFBFBF;
+}
+.dashboard-stat.grey-silver.dashboard-stat-light:hover {
+  background-color: #b5b5b5;
+}
+.dashboard-stat.grey-silver .visual > i {
+  color: #FAFCFB;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.grey-silver .details .number {
+  color: #FAFCFB;
+}
+.dashboard-stat.grey-silver .details .desc {
+  color: #FAFCFB;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.grey-silver .more {
+  color: #FAFCFB;
+  background-color: #b5b5b5;
+}
+
+/* General Element */
+.bg-grey-silver {
+  border-color: #BFBFBF !important;
+  background-image: none !important;
+  background-color: #BFBFBF !important;
+  color: #FAFCFB !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-silver {
+  color: #BFBFBF !important;
+}
+
+.progress-bar.grey-silver {
+  background: #BFBFBF !important;
+  color: #FAFCFB !important;
+}
+
+/***
+Grey Salsa
+***/
+/* Button */
+.grey-salsa.btn {
+  color: #FAFCFB;
+  background-color: #ACB5C3;
+  border-color: "";
+}
+.grey-salsa.btn:hover, .grey-salsa.btn:focus, .grey-salsa.btn:active, .grey-salsa.btn.active {
+  color: #FAFCFB;
+  background-color: #97a3b4;
+}
+.open .grey-salsa.btn.dropdown-toggle {
+  color: #FAFCFB;
+  background-color: #97a3b4;
+}
+.grey-salsa.btn:active, .grey-salsa.btn.active {
+  background-image: none;
+  background-color: #8895a9;
+}
+.grey-salsa.btn:active:hover, .grey-salsa.btn.active:hover {
+  background-color: #8e9bae;
+}
+.open .grey-salsa.btn.dropdown-toggle {
+  background-image: none;
+}
+.grey-salsa.btn.disabled, .grey-salsa.btn.disabled:hover, .grey-salsa.btn.disabled:focus, .grey-salsa.btn.disabled:active, .grey-salsa.btn.disabled.active, .grey-salsa.btn[disabled], .grey-salsa.btn[disabled]:hover, .grey-salsa.btn[disabled]:focus, .grey-salsa.btn[disabled]:active, .grey-salsa.btn[disabled].active, fieldset[disabled] .grey-salsa.btn, fieldset[disabled] .grey-salsa.btn:hover, fieldset[disabled] .grey-salsa.btn:focus, fieldset[disabled] .grey-salsa.btn:active, fieldset[disabled] .grey-salsa.btn.active {
+  background-color: #ACB5C3;
+}
+.grey-salsa.btn .badge {
+  color: #ACB5C3;
+  background-color: #FAFCFB;
+}
+
+/* Button Strip */
+.btn.grey-salsa-stripe {
+  border-left: 3px solid #ACB5C3;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-salsa,
+.portlet.grey-salsa {
+  background-color: #ACB5C3;
+}
+
+.portlet.solid.grey-salsa > .portlet-title,
+.portlet.solid.grey-salsa > .portlet-body {
+  border: 0;
+  color: #FAFCFB;
+}
+.portlet.solid.grey-salsa > .portlet-title > .caption > i {
+  color: #FAFCFB;
+}
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.grey-salsa > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.grey-salsa {
+  border: 1px solid #cacfd8;
+  border-top: 0;
+}
+.portlet.box.grey-salsa > .portlet-title {
+  background-color: #ACB5C3;
+}
+.portlet.box.grey-salsa > .portlet-title > .caption {
+  color: #FAFCFB;
+}
+.portlet.box.grey-salsa > .portlet-title > .caption > i {
+  color: #FAFCFB;
+}
+.portlet.box.grey-salsa > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #edeff2;
+  color: #fcfcfd;
+}
+.portlet.box.grey-salsa > .portlet-title > .actions .btn-default > i {
+  color: white;
+}
+.portlet.box.grey-salsa > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default:active, .portlet.box.grey-salsa > .portlet-title > .actions .btn-default.active {
+  border: 1px solid white;
+  color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-salsa {
+  background-color: #ACB5C3;
+}
+.dashboard-stat.grey-salsa.dashboard-stat-light:hover {
+  background-color: #a0aaba;
+}
+.dashboard-stat.grey-salsa .visual > i {
+  color: #FAFCFB;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.grey-salsa .details .number {
+  color: #FAFCFB;
+}
+.dashboard-stat.grey-salsa .details .desc {
+  color: #FAFCFB;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.grey-salsa .more {
+  color: #FAFCFB;
+  background-color: #a0aaba;
+}
+
+/* General Element */
+.bg-grey-salsa {
+  border-color: #ACB5C3 !important;
+  background-image: none !important;
+  background-color: #ACB5C3 !important;
+  color: #FAFCFB !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-salsa {
+  color: #ACB5C3 !important;
+}
+
+.progress-bar.grey-salsa {
+  background: #ACB5C3 !important;
+  color: #FAFCFB !important;
+}
+
+/***
+Grey Salt
+***/
+/* Button */
+.grey-salt.btn {
+  color: #FAFCFB;
+  background-color: #bfcad1;
+  border-color: "";
+}
+.grey-salt.btn:hover, .grey-salt.btn:focus, .grey-salt.btn:active, .grey-salt.btn.active {
+  color: #FAFCFB;
+  background-color: #aab9c2;
+}
+.open .grey-salt.btn.dropdown-toggle {
+  color: #FAFCFB;
+  background-color: #aab9c2;
+}
+.grey-salt.btn:active, .grey-salt.btn.active {
+  background-image: none;
+  background-color: #9badb7;
+}
+.grey-salt.btn:active:hover, .grey-salt.btn.active:hover {
+  background-color: #a1b1bc;
+}
+.open .grey-salt.btn.dropdown-toggle {
+  background-image: none;
+}
+.grey-salt.btn.disabled, .grey-salt.btn.disabled:hover, .grey-salt.btn.disabled:focus, .grey-salt.btn.disabled:active, .grey-salt.btn.disabled.active, .grey-salt.btn[disabled], .grey-salt.btn[disabled]:hover, .grey-salt.btn[disabled]:focus, .grey-salt.btn[disabled]:active, .grey-salt.btn[disabled].active, fieldset[disabled] .grey-salt.btn, fieldset[disabled] .grey-salt.btn:hover, fieldset[disabled] .grey-salt.btn:focus, fieldset[disabled] .grey-salt.btn:active, fieldset[disabled] .grey-salt.btn.active {
+  background-color: #bfcad1;
+}
+.grey-salt.btn .badge {
+  color: #bfcad1;
+  background-color: #FAFCFB;
+}
+
+/* Button Strip */
+.btn.grey-salt-stripe {
+  border-left: 3px solid #bfcad1;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-salt,
+.portlet.grey-salt {
+  background-color: #bfcad1;
+}
+
+.portlet.solid.grey-salt > .portlet-title,
+.portlet.solid.grey-salt > .portlet-body {
+  border: 0;
+  color: #FAFCFB;
+}
+.portlet.solid.grey-salt > .portlet-title > .caption > i {
+  color: #FAFCFB;
+}
+.portlet.solid.grey-salt > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.grey-salt > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.grey-salt > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.grey-salt > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.grey-salt > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.grey-salt > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.grey-salt {
+  border: 1px solid #dde3e6;
+  border-top: 0;
+}
+.portlet.box.grey-salt > .portlet-title {
+  background-color: #bfcad1;
+}
+.portlet.box.grey-salt > .portlet-title > .caption {
+  color: #FAFCFB;
+}
+.portlet.box.grey-salt > .portlet-title > .caption > i {
+  color: #FAFCFB;
+}
+.portlet.box.grey-salt > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid white;
+  color: white;
+}
+.portlet.box.grey-salt > .portlet-title > .actions .btn-default > i {
+  color: white;
+}
+.portlet.box.grey-salt > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-salt > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-salt > .portlet-title > .actions .btn-default:active, .portlet.box.grey-salt > .portlet-title > .actions .btn-default.active {
+  border: 1px solid white;
+  color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-salt {
+  background-color: #bfcad1;
+}
+.dashboard-stat.grey-salt.dashboard-stat-light:hover {
+  background-color: #b3c0c8;
+}
+.dashboard-stat.grey-salt .visual > i {
+  color: #FAFCFB;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.grey-salt .details .number {
+  color: #FAFCFB;
+}
+.dashboard-stat.grey-salt .details .desc {
+  color: #FAFCFB;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.grey-salt .more {
+  color: #FAFCFB;
+  background-color: #b3c0c8;
+}
+
+/* General Element */
+.bg-grey-salt {
+  border-color: #bfcad1 !important;
+  background-image: none !important;
+  background-color: #bfcad1 !important;
+  color: #FAFCFB !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-salt {
+  color: #bfcad1 !important;
+}
+
+.progress-bar.grey-salt {
+  background: #bfcad1 !important;
+  color: #FAFCFB !important;
+}
+
+/***
+Grey Mint
+***/
+/* Button */
+.grey-mint.btn {
+  color: #FAFCFB;
+  background-color: #9eacb4;
+  border-color: "";
+}
+.grey-mint.btn:hover, .grey-mint.btn:focus, .grey-mint.btn:active, .grey-mint.btn.active {
+  color: #FAFCFB;
+  background-color: #8a9ba4;
+}
+.open .grey-mint.btn.dropdown-toggle {
+  color: #FAFCFB;
+  background-color: #8a9ba4;
+}
+.grey-mint.btn:active, .grey-mint.btn.active {
+  background-image: none;
+  background-color: #7b8e99;
+}
+.grey-mint.btn:active:hover, .grey-mint.btn.active:hover {
+  background-color: #81939e;
+}
+.open .grey-mint.btn.dropdown-toggle {
+  background-image: none;
+}
+.grey-mint.btn.disabled, .grey-mint.btn.disabled:hover, .grey-mint.btn.disabled:focus, .grey-mint.btn.disabled:active, .grey-mint.btn.disabled.active, .grey-mint.btn[disabled], .grey-mint.btn[disabled]:hover, .grey-mint.btn[disabled]:focus, .grey-mint.btn[disabled]:active, .grey-mint.btn[disabled].active, fieldset[disabled] .grey-mint.btn, fieldset[disabled] .grey-mint.btn:hover, fieldset[disabled] .grey-mint.btn:focus, fieldset[disabled] .grey-mint.btn:active, fieldset[disabled] .grey-mint.btn.active {
+  background-color: #9eacb4;
+}
+.grey-mint.btn .badge {
+  color: #9eacb4;
+  background-color: #FAFCFB;
+}
+
+/* Button Strip */
+.btn.grey-mint-stripe {
+  border-left: 3px solid #9eacb4;
+}
+
+/* Portlet */
+.portlet > .portlet-body.grey-mint,
+.portlet.grey-mint {
+  background-color: #9eacb4;
+}
+
+.portlet.solid.grey-mint > .portlet-title,
+.portlet.solid.grey-mint > .portlet-body {
+  border: 0;
+  color: #FAFCFB;
+}
+.portlet.solid.grey-mint > .portlet-title > .caption > i {
+  color: #FAFCFB;
+}
+.portlet.solid.grey-mint > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.grey-mint > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.grey-mint > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.grey-mint > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.grey-mint > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.grey-mint > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.grey-mint {
+  border: 1px solid #bbc5ca;
+  border-top: 0;
+}
+.portlet.box.grey-mint > .portlet-title {
+  background-color: #9eacb4;
+}
+.portlet.box.grey-mint > .portlet-title > .caption {
+  color: #FAFCFB;
+}
+.portlet.box.grey-mint > .portlet-title > .caption > i {
+  color: #FAFCFB;
+}
+.portlet.box.grey-mint > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #dde2e5;
+  color: #eceef0;
+}
+.portlet.box.grey-mint > .portlet-title > .actions .btn-default > i {
+  color: #f4f6f7;
+}
+.portlet.box.grey-mint > .portlet-title > .actions .btn-default:hover, .portlet.box.grey-mint > .portlet-title > .actions .btn-default:focus, .portlet.box.grey-mint > .portlet-title > .actions .btn-default:active, .portlet.box.grey-mint > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #fafbfb;
+  color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.grey-mint {
+  background-color: #9eacb4;
+}
+.dashboard-stat.grey-mint.dashboard-stat-light:hover {
+  background-color: #92a2ab;
+}
+.dashboard-stat.grey-mint .visual > i {
+  color: #FAFCFB;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.grey-mint .details .number {
+  color: #FAFCFB;
+}
+.dashboard-stat.grey-mint .details .desc {
+  color: #FAFCFB;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.grey-mint .more {
+  color: #FAFCFB;
+  background-color: #92a2ab;
+}
+
+/* General Element */
+.bg-grey-mint {
+  border-color: #9eacb4 !important;
+  background-image: none !important;
+  background-color: #9eacb4 !important;
+  color: #FAFCFB !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-grey-mint {
+  color: #9eacb4 !important;
+}
+
+.progress-bar.grey-mint {
+  background: #9eacb4 !important;
+  color: #FAFCFB !important;
+}
+
+/***********
+Red Colors
+************/
+/***
+Red Default
+***/
+/* Button */
+.red.btn {
+  color: #FFFFFF;
+  background-color: #d84a38;
+  border-color: "";
+}
+.red.btn:hover, .red.btn:focus, .red.btn:active, .red.btn.active {
+  color: #FFFFFF;
+  background-color: #c63927;
+}
+.open .red.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #c63927;
+}
+.red.btn:active, .red.btn.active {
+  background-image: none;
+  background-color: #b03223;
+}
+.red.btn:active:hover, .red.btn.active:hover {
+  background-color: #b93524;
+}
+.open .red.btn.dropdown-toggle {
+  background-image: none;
+}
+.red.btn.disabled, .red.btn.disabled:hover, .red.btn.disabled:focus, .red.btn.disabled:active, .red.btn.disabled.active, .red.btn[disabled], .red.btn[disabled]:hover, .red.btn[disabled]:focus, .red.btn[disabled]:active, .red.btn[disabled].active, fieldset[disabled] .red.btn, fieldset[disabled] .red.btn:hover, fieldset[disabled] .red.btn:focus, fieldset[disabled] .red.btn:active, fieldset[disabled] .red.btn.active {
+  background-color: #d84a38;
+}
+.red.btn .badge {
+  color: #d84a38;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-stripe {
+  border-left: 3px solid #d84a38;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red,
+.portlet.red {
+  background-color: #d84a38;
+}
+
+.portlet.solid.red > .portlet-title,
+.portlet.solid.red > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.red > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.red > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.red > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.red > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.red > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.red > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.red > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.red {
+  border: 1px solid #e07163;
+  border-top: 0;
+}
+.portlet.box.red > .portlet-title {
+  background-color: #d84a38;
+}
+.portlet.box.red > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.red > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.red > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #ea9f96;
+  color: #efb3ab;
+}
+.portlet.box.red > .portlet-title > .actions .btn-default > i {
+  color: #f1beb8;
+}
+.portlet.box.red > .portlet-title > .actions .btn-default:hover, .portlet.box.red > .portlet-title > .actions .btn-default:focus, .portlet.box.red > .portlet-title > .actions .btn-default:active, .portlet.box.red > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #f3c6c0;
+  color: #f7dad6;
+}
+
+/* Statistic Block */
+.dashboard-stat.red {
+  background-color: #d84a38;
+}
+.dashboard-stat.red.dashboard-stat-light:hover {
+  background-color: #d23c29;
+}
+.dashboard-stat.red .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.red .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.red .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.red .more {
+  color: #FFFFFF;
+  background-color: #d23c29;
+}
+
+/* General Element */
+.bg-red {
+  border-color: #d84a38 !important;
+  background-image: none !important;
+  background-color: #d84a38 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red {
+  color: #d84a38 !important;
+}
+
+.progress-bar.red {
+  background: #d84a38 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Red Pink
+***/
+/* Button */
+.red-pink.btn {
+  color: #FFFFFF;
+  background-color: #E08283;
+  border-color: "";
+}
+.red-pink.btn:hover, .red-pink.btn:focus, .red-pink.btn:active, .red-pink.btn.active {
+  color: #FFFFFF;
+  background-color: #d96567;
+}
+.open .red-pink.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #d96567;
+}
+.red-pink.btn:active, .red-pink.btn.active {
+  background-image: none;
+  background-color: #d45152;
+}
+.red-pink.btn:active:hover, .red-pink.btn.active:hover {
+  background-color: #d6595a;
+}
+.open .red-pink.btn.dropdown-toggle {
+  background-image: none;
+}
+.red-pink.btn.disabled, .red-pink.btn.disabled:hover, .red-pink.btn.disabled:focus, .red-pink.btn.disabled:active, .red-pink.btn.disabled.active, .red-pink.btn[disabled], .red-pink.btn[disabled]:hover, .red-pink.btn[disabled]:focus, .red-pink.btn[disabled]:active, .red-pink.btn[disabled].active, fieldset[disabled] .red-pink.btn, fieldset[disabled] .red-pink.btn:hover, fieldset[disabled] .red-pink.btn:focus, fieldset[disabled] .red-pink.btn:active, fieldset[disabled] .red-pink.btn.active {
+  background-color: #E08283;
+}
+.red-pink.btn .badge {
+  color: #E08283;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-pink-stripe {
+  border-left: 3px solid #E08283;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-pink,
+.portlet.red-pink {
+  background-color: #E08283;
+}
+
+.portlet.solid.red-pink > .portlet-title,
+.portlet.solid.red-pink > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.red-pink > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.red-pink > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.red-pink > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.red-pink > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.red-pink > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.red-pink > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.red-pink > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.red-pink {
+  border: 1px solid #eaabac;
+  border-top: 0;
+}
+.portlet.box.red-pink > .portlet-title {
+  background-color: #E08283;
+}
+.portlet.box.red-pink > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.red-pink > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.red-pink > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #f6dcdc;
+  color: #fbf0f0;
+}
+.portlet.box.red-pink > .portlet-title > .actions .btn-default > i {
+  color: #fefdfd;
+}
+.portlet.box.red-pink > .portlet-title > .actions .btn-default:hover, .portlet.box.red-pink > .portlet-title > .actions .btn-default:focus, .portlet.box.red-pink > .portlet-title > .actions .btn-default:active, .portlet.box.red-pink > .portlet-title > .actions .btn-default.active {
+  border: 1px solid white;
+  color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-pink {
+  background-color: #E08283;
+}
+.dashboard-stat.red-pink.dashboard-stat-light:hover {
+  background-color: #dc7273;
+}
+.dashboard-stat.red-pink .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.red-pink .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.red-pink .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.red-pink .more {
+  color: #FFFFFF;
+  background-color: #dc7273;
+}
+
+/* General Element */
+.bg-red-pink {
+  border-color: #E08283 !important;
+  background-image: none !important;
+  background-color: #E08283 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-pink {
+  color: #E08283 !important;
+}
+
+.progress-bar.red-pink {
+  background: #E08283 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Red Sunglo
+***/
+/* Button */
+.red-sunglo.btn {
+  color: #FFFFFF;
+  background-color: #E26A6A;
+  border-color: "";
+}
+.red-sunglo.btn:hover, .red-sunglo.btn:focus, .red-sunglo.btn:active, .red-sunglo.btn.active {
+  color: #FFFFFF;
+  background-color: #dc4c4c;
+}
+.open .red-sunglo.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #dc4c4c;
+}
+.red-sunglo.btn:active, .red-sunglo.btn.active {
+  background-image: none;
+  background-color: #d83737;
+}
+.red-sunglo.btn:active:hover, .red-sunglo.btn.active:hover {
+  background-color: #da3f3f;
+}
+.open .red-sunglo.btn.dropdown-toggle {
+  background-image: none;
+}
+.red-sunglo.btn.disabled, .red-sunglo.btn.disabled:hover, .red-sunglo.btn.disabled:focus, .red-sunglo.btn.disabled:active, .red-sunglo.btn.disabled.active, .red-sunglo.btn[disabled], .red-sunglo.btn[disabled]:hover, .red-sunglo.btn[disabled]:focus, .red-sunglo.btn[disabled]:active, .red-sunglo.btn[disabled].active, fieldset[disabled] .red-sunglo.btn, fieldset[disabled] .red-sunglo.btn:hover, fieldset[disabled] .red-sunglo.btn:focus, fieldset[disabled] .red-sunglo.btn:active, fieldset[disabled] .red-sunglo.btn.active {
+  background-color: #E26A6A;
+}
+.red-sunglo.btn .badge {
+  color: #E26A6A;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-sunglo-stripe {
+  border-left: 3px solid #E26A6A;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-sunglo,
+.portlet.red-sunglo {
+  background-color: #E26A6A;
+}
+
+.portlet.solid.red-sunglo > .portlet-title,
+.portlet.solid.red-sunglo > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.red-sunglo > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.red-sunglo > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.red-sunglo {
+  border: 1px solid #ea9595;
+  border-top: 0;
+}
+.portlet.box.red-sunglo > .portlet-title {
+  background-color: #E26A6A;
+}
+.portlet.box.red-sunglo > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.red-sunglo > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.red-sunglo > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #f4c8c8;
+  color: #f8dddd;
+}
+.portlet.box.red-sunglo > .portlet-title > .actions .btn-default > i {
+  color: #fbeaea;
+}
+.portlet.box.red-sunglo > .portlet-title > .actions .btn-default:hover, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default:focus, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default:active, .portlet.box.red-sunglo > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #fdf3f3;
+  color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-sunglo {
+  background-color: #E26A6A;
+}
+.dashboard-stat.red-sunglo.dashboard-stat-light:hover {
+  background-color: #df5959;
+}
+.dashboard-stat.red-sunglo .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.red-sunglo .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.red-sunglo .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.red-sunglo .more {
+  color: #FFFFFF;
+  background-color: #df5959;
+}
+
+/* General Element */
+.bg-red-sunglo {
+  border-color: #E26A6A !important;
+  background-image: none !important;
+  background-color: #E26A6A !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-sunglo {
+  color: #E26A6A !important;
+}
+
+.progress-bar.red-sunglo {
+  background: #E26A6A !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Red Intense
+***/
+/* Button */
+.red-intense.btn {
+  color: #FFFFFF;
+  background-color: #e35b5a;
+  border-color: "";
+}
+.red-intense.btn:hover, .red-intense.btn:focus, .red-intense.btn:active, .red-intense.btn.active {
+  color: #FFFFFF;
+  background-color: #de3d3b;
+}
+.open .red-intense.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #de3d3b;
+}
+.red-intense.btn:active, .red-intense.btn.active {
+  background-image: none;
+  background-color: #da2726;
+}
+.red-intense.btn:active:hover, .red-intense.btn.active:hover {
+  background-color: #dc302e;
+}
+.open .red-intense.btn.dropdown-toggle {
+  background-image: none;
+}
+.red-intense.btn.disabled, .red-intense.btn.disabled:hover, .red-intense.btn.disabled:focus, .red-intense.btn.disabled:active, .red-intense.btn.disabled.active, .red-intense.btn[disabled], .red-intense.btn[disabled]:hover, .red-intense.btn[disabled]:focus, .red-intense.btn[disabled]:active, .red-intense.btn[disabled].active, fieldset[disabled] .red-intense.btn, fieldset[disabled] .red-intense.btn:hover, fieldset[disabled] .red-intense.btn:focus, fieldset[disabled] .red-intense.btn:active, fieldset[disabled] .red-intense.btn.active {
+  background-color: #e35b5a;
+}
+.red-intense.btn .badge {
+  color: #e35b5a;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-intense-stripe {
+  border-left: 3px solid #e35b5a;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-intense,
+.portlet.red-intense {
+  background-color: #e35b5a;
+}
+
+.portlet.solid.red-intense > .portlet-title,
+.portlet.solid.red-intense > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.red-intense > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.red-intense > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.red-intense > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.red-intense > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.red-intense > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.red-intense > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.red-intense > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.red-intense {
+  border: 1px solid #ea8686;
+  border-top: 0;
+}
+.portlet.box.red-intense > .portlet-title {
+  background-color: #e35b5a;
+}
+.portlet.box.red-intense > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.red-intense > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.red-intense > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #f3baba;
+  color: #f7d0d0;
+}
+.portlet.box.red-intense > .portlet-title > .actions .btn-default > i {
+  color: #f9dddd;
+}
+.portlet.box.red-intense > .portlet-title > .actions .btn-default:hover, .portlet.box.red-intense > .portlet-title > .actions .btn-default:focus, .portlet.box.red-intense > .portlet-title > .actions .btn-default:active, .portlet.box.red-intense > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #fbe6e6;
+  color: #fefbfb;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-intense {
+  background-color: #e35b5a;
+}
+.dashboard-stat.red-intense.dashboard-stat-light:hover {
+  background-color: #e04a49;
+}
+.dashboard-stat.red-intense .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.red-intense .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.red-intense .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.red-intense .more {
+  color: #FFFFFF;
+  background-color: #e04a49;
+}
+
+/* General Element */
+.bg-red-intense {
+  border-color: #e35b5a !important;
+  background-image: none !important;
+  background-color: #e35b5a !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-intense {
+  color: #e35b5a !important;
+}
+
+.progress-bar.red-intense {
+  background: #e35b5a !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Red Thunderbird
+***/
+/* Button */
+.red-thunderbird.btn {
+  color: #FFFFFF;
+  background-color: #D91E18;
+  border-color: "";
+}
+.red-thunderbird.btn:hover, .red-thunderbird.btn:focus, .red-thunderbird.btn:active, .red-thunderbird.btn.active {
+  color: #FFFFFF;
+  background-color: #b91a14;
+}
+.open .red-thunderbird.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #b91a14;
+}
+.red-thunderbird.btn:active, .red-thunderbird.btn.active {
+  background-image: none;
+  background-color: #a21612;
+}
+.red-thunderbird.btn:active:hover, .red-thunderbird.btn.active:hover {
+  background-color: #ab1813;
+}
+.open .red-thunderbird.btn.dropdown-toggle {
+  background-image: none;
+}
+.red-thunderbird.btn.disabled, .red-thunderbird.btn.disabled:hover, .red-thunderbird.btn.disabled:focus, .red-thunderbird.btn.disabled:active, .red-thunderbird.btn.disabled.active, .red-thunderbird.btn[disabled], .red-thunderbird.btn[disabled]:hover, .red-thunderbird.btn[disabled]:focus, .red-thunderbird.btn[disabled]:active, .red-thunderbird.btn[disabled].active, fieldset[disabled] .red-thunderbird.btn, fieldset[disabled] .red-thunderbird.btn:hover, fieldset[disabled] .red-thunderbird.btn:focus, fieldset[disabled] .red-thunderbird.btn:active, fieldset[disabled] .red-thunderbird.btn.active {
+  background-color: #D91E18;
+}
+.red-thunderbird.btn .badge {
+  color: #D91E18;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-thunderbird-stripe {
+  border-left: 3px solid #D91E18;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-thunderbird,
+.portlet.red-thunderbird {
+  background-color: #D91E18;
+}
+
+.portlet.solid.red-thunderbird > .portlet-title,
+.portlet.solid.red-thunderbird > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.red-thunderbird > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.red-thunderbird > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.red-thunderbird {
+  border: 1px solid #e9403b;
+  border-top: 0;
+}
+.portlet.box.red-thunderbird > .portlet-title {
+  background-color: #D91E18;
+}
+.portlet.box.red-thunderbird > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.red-thunderbird > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.red-thunderbird > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #ef7672;
+  color: #f28c89;
+}
+.portlet.box.red-thunderbird > .portlet-title > .actions .btn-default > i {
+  color: #f39997;
+}
+.portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:hover, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:focus, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default:active, .portlet.box.red-thunderbird > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #f4a2a0;
+  color: #f7b9b7;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-thunderbird {
+  background-color: #D91E18;
+}
+.dashboard-stat.red-thunderbird.dashboard-stat-light:hover {
+  background-color: #c71b16;
+}
+.dashboard-stat.red-thunderbird .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.red-thunderbird .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.red-thunderbird .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.red-thunderbird .more {
+  color: #FFFFFF;
+  background-color: #c71b16;
+}
+
+/* General Element */
+.bg-red-thunderbird {
+  border-color: #D91E18 !important;
+  background-image: none !important;
+  background-color: #D91E18 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-thunderbird {
+  color: #D91E18 !important;
+}
+
+.progress-bar.red-thunderbird {
+  background: #D91E18 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Red Flamingo
+***/
+/* Button */
+.red-flamingo.btn {
+  color: #FFFFFF;
+  background-color: #EF4836;
+  border-color: "";
+}
+.red-flamingo.btn:hover, .red-flamingo.btn:focus, .red-flamingo.btn:active, .red-flamingo.btn.active {
+  color: #FFFFFF;
+  background-color: #ec2a15;
+}
+.open .red-flamingo.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #ec2a15;
+}
+.red-flamingo.btn:active, .red-flamingo.btn.active {
+  background-image: none;
+  background-color: #d72411;
+}
+.red-flamingo.btn:active:hover, .red-flamingo.btn.active:hover {
+  background-color: #e02612;
+}
+.open .red-flamingo.btn.dropdown-toggle {
+  background-image: none;
+}
+.red-flamingo.btn.disabled, .red-flamingo.btn.disabled:hover, .red-flamingo.btn.disabled:focus, .red-flamingo.btn.disabled:active, .red-flamingo.btn.disabled.active, .red-flamingo.btn[disabled], .red-flamingo.btn[disabled]:hover, .red-flamingo.btn[disabled]:focus, .red-flamingo.btn[disabled]:active, .red-flamingo.btn[disabled].active, fieldset[disabled] .red-flamingo.btn, fieldset[disabled] .red-flamingo.btn:hover, fieldset[disabled] .red-flamingo.btn:focus, fieldset[disabled] .red-flamingo.btn:active, fieldset[disabled] .red-flamingo.btn.active {
+  background-color: #EF4836;
+}
+.red-flamingo.btn .badge {
+  color: #EF4836;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-flamingo-stripe {
+  border-left: 3px solid #EF4836;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-flamingo,
+.portlet.red-flamingo {
+  background-color: #EF4836;
+}
+
+.portlet.solid.red-flamingo > .portlet-title,
+.portlet.solid.red-flamingo > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.red-flamingo > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.red-flamingo > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.red-flamingo {
+  border: 1px solid #f37365;
+  border-top: 0;
+}
+.portlet.box.red-flamingo > .portlet-title {
+  background-color: #EF4836;
+}
+.portlet.box.red-flamingo > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.red-flamingo > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.red-flamingo > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #f7a79e;
+  color: #f9bcb6;
+}
+.portlet.box.red-flamingo > .portlet-title > .actions .btn-default > i {
+  color: #fac9c4;
+}
+.portlet.box.red-flamingo > .portlet-title > .actions .btn-default:hover, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default:focus, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default:active, .portlet.box.red-flamingo > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #fbd2cd;
+  color: #fde7e5;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-flamingo {
+  background-color: #EF4836;
+}
+.dashboard-stat.red-flamingo.dashboard-stat-light:hover {
+  background-color: #ed3723;
+}
+.dashboard-stat.red-flamingo .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.red-flamingo .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.red-flamingo .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.red-flamingo .more {
+  color: #FFFFFF;
+  background-color: #ed3723;
+}
+
+/* General Element */
+.bg-red-flamingo {
+  border-color: #EF4836 !important;
+  background-image: none !important;
+  background-color: #EF4836 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-flamingo {
+  color: #EF4836 !important;
+}
+
+.progress-bar.red-flamingo {
+  background: #EF4836 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Red Flamingo
+***/
+/* Button */
+.red-soft.btn {
+  color: #FFFFFF;
+  background-color: #d05454;
+  border-color: "";
+}
+.red-soft.btn:hover, .red-soft.btn:focus, .red-soft.btn:active, .red-soft.btn.active {
+  color: #FFFFFF;
+  background-color: #c83838;
+}
+.open .red-soft.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #c83838;
+}
+.red-soft.btn:active, .red-soft.btn.active {
+  background-image: none;
+  background-color: #b53232;
+}
+.red-soft.btn:active:hover, .red-soft.btn.active:hover {
+  background-color: #bd3434;
+}
+.open .red-soft.btn.dropdown-toggle {
+  background-image: none;
+}
+.red-soft.btn.disabled, .red-soft.btn.disabled:hover, .red-soft.btn.disabled:focus, .red-soft.btn.disabled:active, .red-soft.btn.disabled.active, .red-soft.btn[disabled], .red-soft.btn[disabled]:hover, .red-soft.btn[disabled]:focus, .red-soft.btn[disabled]:active, .red-soft.btn[disabled].active, fieldset[disabled] .red-soft.btn, fieldset[disabled] .red-soft.btn:hover, fieldset[disabled] .red-soft.btn:focus, fieldset[disabled] .red-soft.btn:active, fieldset[disabled] .red-soft.btn.active {
+  background-color: #d05454;
+}
+.red-soft.btn .badge {
+  color: #d05454;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-soft-stripe {
+  border-left: 3px solid #d05454;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-soft,
+.portlet.red-soft {
+  background-color: #d05454;
+}
+
+.portlet.solid.red-soft > .portlet-title,
+.portlet.solid.red-soft > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.red-soft > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.red-soft > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.red-soft > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.red-soft > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.red-soft > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.red-soft > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.red-soft > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.red-soft {
+  border: 1px solid #db7c7c;
+  border-top: 0;
+}
+.portlet.box.red-soft > .portlet-title {
+  background-color: #d05454;
+}
+.portlet.box.red-soft > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.red-soft > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.red-soft > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #e8acac;
+  color: #eec0c0;
+}
+.portlet.box.red-soft > .portlet-title > .actions .btn-default > i {
+  color: #f1cccc;
+}
+.portlet.box.red-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.red-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.red-soft > .portlet-title > .actions .btn-default:active, .portlet.box.red-soft > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #f3d4d4;
+  color: #f9e8e8;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-soft {
+  background-color: #d05454;
+}
+.dashboard-stat.red-soft.dashboard-stat-light:hover {
+  background-color: #cc4444;
+}
+.dashboard-stat.red-soft .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.red-soft .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.red-soft .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.red-soft .more {
+  color: #FFFFFF;
+  background-color: #cc4444;
+}
+
+/* General Element */
+.bg-red-soft {
+  border-color: #d05454 !important;
+  background-image: none !important;
+  background-color: #d05454 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-soft {
+  color: #d05454 !important;
+}
+
+.progress-bar.red-soft {
+  background: #d05454 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Red Haze
+***/
+/* Button */
+.red-haze.btn {
+  color: #FFFFFF;
+  background-color: #f36a5a;
+  border-color: "";
+}
+.red-haze.btn:hover, .red-haze.btn:focus, .red-haze.btn:active, .red-haze.btn.active {
+  color: #FFFFFF;
+  background-color: #f14c39;
+}
+.open .red-haze.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #f14c39;
+}
+.red-haze.btn:active, .red-haze.btn.active {
+  background-image: none;
+  background-color: #ef3621;
+}
+.red-haze.btn:active:hover, .red-haze.btn.active:hover {
+  background-color: #f03f2a;
+}
+.open .red-haze.btn.dropdown-toggle {
+  background-image: none;
+}
+.red-haze.btn.disabled, .red-haze.btn.disabled:hover, .red-haze.btn.disabled:focus, .red-haze.btn.disabled:active, .red-haze.btn.disabled.active, .red-haze.btn[disabled], .red-haze.btn[disabled]:hover, .red-haze.btn[disabled]:focus, .red-haze.btn[disabled]:active, .red-haze.btn[disabled].active, fieldset[disabled] .red-haze.btn, fieldset[disabled] .red-haze.btn:hover, fieldset[disabled] .red-haze.btn:focus, fieldset[disabled] .red-haze.btn:active, fieldset[disabled] .red-haze.btn.active {
+  background-color: #f36a5a;
+}
+.red-haze.btn .badge {
+  color: #f36a5a;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.red-haze-stripe {
+  border-left: 3px solid #f36a5a;
+}
+
+/* Portlet */
+.portlet > .portlet-body.red-haze,
+.portlet.red-haze {
+  background-color: #f36a5a;
+}
+
+.portlet.solid.red-haze > .portlet-title,
+.portlet.solid.red-haze > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.red-haze > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.red-haze > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.red-haze > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.red-haze > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.red-haze > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.red-haze > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.red-haze > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.red-haze {
+  border: 1px solid #f6958a;
+  border-top: 0;
+}
+.portlet.box.red-haze > .portlet-title {
+  background-color: #f36a5a;
+}
+.portlet.box.red-haze > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.red-haze > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.red-haze > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #fbc8c3;
+  color: #fcdeda;
+}
+.portlet.box.red-haze > .portlet-title > .actions .btn-default > i {
+  color: #fdebe9;
+}
+.portlet.box.red-haze > .portlet-title > .actions .btn-default:hover, .portlet.box.red-haze > .portlet-title > .actions .btn-default:focus, .portlet.box.red-haze > .portlet-title > .actions .btn-default:active, .portlet.box.red-haze > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #fef3f2;
+  color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.red-haze {
+  background-color: #f36a5a;
+}
+.dashboard-stat.red-haze.dashboard-stat-light:hover {
+  background-color: #f25947;
+}
+.dashboard-stat.red-haze .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.red-haze .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.red-haze .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.red-haze .more {
+  color: #FFFFFF;
+  background-color: #f25947;
+}
+
+/* General Element */
+.bg-red-haze {
+  border-color: #f36a5a !important;
+  background-image: none !important;
+  background-color: #f36a5a !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-red-haze {
+  color: #f36a5a !important;
+}
+
+.progress-bar.red-haze {
+  background: #f36a5a !important;
+  color: #FFFFFF !important;
+}
+
+/***********
+Yellow Colors
+************/
+/***
+Yellow Default
+***/
+/* Button */
+.yellow.btn {
+  color: #FFFFFF;
+  background-color: #FFB848;
+  border-color: "";
+}
+.yellow.btn:hover, .yellow.btn:focus, .yellow.btn:active, .yellow.btn.active {
+  color: #FFFFFF;
+  background-color: #ffaa24;
+}
+.open .yellow.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #ffaa24;
+}
+.yellow.btn:active, .yellow.btn.active {
+  background-image: none;
+  background-color: #ffa00b;
+}
+.yellow.btn:active:hover, .yellow.btn.active:hover {
+  background-color: #ffa415;
+}
+.open .yellow.btn.dropdown-toggle {
+  background-image: none;
+}
+.yellow.btn.disabled, .yellow.btn.disabled:hover, .yellow.btn.disabled:focus, .yellow.btn.disabled:active, .yellow.btn.disabled.active, .yellow.btn[disabled], .yellow.btn[disabled]:hover, .yellow.btn[disabled]:focus, .yellow.btn[disabled]:active, .yellow.btn[disabled].active, fieldset[disabled] .yellow.btn, fieldset[disabled] .yellow.btn:hover, fieldset[disabled] .yellow.btn:focus, fieldset[disabled] .yellow.btn:active, fieldset[disabled] .yellow.btn.active {
+  background-color: #FFB848;
+}
+.yellow.btn .badge {
+  color: #FFB848;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-stripe {
+  border-left: 3px solid #FFB848;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow,
+.portlet.yellow {
+  background-color: #FFB848;
+}
+
+.portlet.solid.yellow > .portlet-title,
+.portlet.solid.yellow > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.yellow > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.yellow > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.yellow > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.yellow > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.yellow > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.yellow > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.yellow > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.yellow {
+  border: 1px solid #ffcc7b;
+  border-top: 0;
+}
+.portlet.box.yellow > .portlet-title {
+  background-color: #FFB848;
+}
+.portlet.box.yellow > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.yellow > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.yellow > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #ffe4b8;
+  color: #ffedd2;
+}
+.portlet.box.yellow > .portlet-title > .actions .btn-default > i {
+  color: #fff3e1;
+}
+.portlet.box.yellow > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow > .portlet-title > .actions .btn-default:active, .portlet.box.yellow > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #fff7eb;
+  color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow {
+  background-color: #FFB848;
+}
+.dashboard-stat.yellow.dashboard-stat-light:hover {
+  background-color: #ffb034;
+}
+.dashboard-stat.yellow .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.yellow .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.yellow .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.yellow .more {
+  color: #FFFFFF;
+  background-color: #ffb034;
+}
+
+/* General Element */
+.bg-yellow {
+  border-color: #FFB848 !important;
+  background-image: none !important;
+  background-color: #FFB848 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow {
+  color: #FFB848 !important;
+}
+
+.progress-bar.yellow {
+  background: #FFB848 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Yellow Gold
+***/
+/* Button */
+.yellow-gold.btn {
+  color: #FFFFFF;
+  background-color: #E87E04;
+  border-color: "";
+}
+.yellow-gold.btn:hover, .yellow-gold.btn:focus, .yellow-gold.btn:active, .yellow-gold.btn.active {
+  color: #FFFFFF;
+  background-color: #c56b03;
+}
+.open .yellow-gold.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #c56b03;
+}
+.yellow-gold.btn:active, .yellow-gold.btn.active {
+  background-image: none;
+  background-color: #ac5d03;
+}
+.yellow-gold.btn:active:hover, .yellow-gold.btn.active:hover {
+  background-color: #b66303;
+}
+.open .yellow-gold.btn.dropdown-toggle {
+  background-image: none;
+}
+.yellow-gold.btn.disabled, .yellow-gold.btn.disabled:hover, .yellow-gold.btn.disabled:focus, .yellow-gold.btn.disabled:active, .yellow-gold.btn.disabled.active, .yellow-gold.btn[disabled], .yellow-gold.btn[disabled]:hover, .yellow-gold.btn[disabled]:focus, .yellow-gold.btn[disabled]:active, .yellow-gold.btn[disabled].active, fieldset[disabled] .yellow-gold.btn, fieldset[disabled] .yellow-gold.btn:hover, fieldset[disabled] .yellow-gold.btn:focus, fieldset[disabled] .yellow-gold.btn:active, fieldset[disabled] .yellow-gold.btn.active {
+  background-color: #E87E04;
+}
+.yellow-gold.btn .badge {
+  color: #E87E04;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-gold-stripe {
+  border-left: 3px solid #E87E04;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow-gold,
+.portlet.yellow-gold {
+  background-color: #E87E04;
+}
+
+.portlet.solid.yellow-gold > .portlet-title,
+.portlet.solid.yellow-gold > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.yellow-gold > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.yellow-gold > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.yellow-gold {
+  border: 1px solid #fb9724;
+  border-top: 0;
+}
+.portlet.box.yellow-gold > .portlet-title {
+  background-color: #E87E04;
+}
+.portlet.box.yellow-gold > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.yellow-gold > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.yellow-gold > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #fcb460;
+  color: #fdbf79;
+}
+.portlet.box.yellow-gold > .portlet-title > .actions .btn-default > i {
+  color: #fdc788;
+}
+.portlet.box.yellow-gold > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-gold > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #fdcb92;
+  color: #fed7ab;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow-gold {
+  background-color: #E87E04;
+}
+.dashboard-stat.yellow-gold.dashboard-stat-light:hover {
+  background-color: #d47304;
+}
+.dashboard-stat.yellow-gold .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.yellow-gold .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.yellow-gold .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.yellow-gold .more {
+  color: #FFFFFF;
+  background-color: #d47304;
+}
+
+/* General Element */
+.bg-yellow-gold {
+  border-color: #E87E04 !important;
+  background-image: none !important;
+  background-color: #E87E04 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow-gold {
+  color: #E87E04 !important;
+}
+
+.progress-bar.yellow-gold {
+  background: #E87E04 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Yellow Casablanca
+***/
+/* Button */
+.yellow-casablanca.btn {
+  color: #FFFFFF;
+  background-color: #f2784b;
+  border-color: "";
+}
+.yellow-casablanca.btn:hover, .yellow-casablanca.btn:focus, .yellow-casablanca.btn:active, .yellow-casablanca.btn.active {
+  color: #FFFFFF;
+  background-color: #f05f2a;
+}
+.open .yellow-casablanca.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #f05f2a;
+}
+.yellow-casablanca.btn:active, .yellow-casablanca.btn.active {
+  background-image: none;
+  background-color: #ee4d12;
+}
+.yellow-casablanca.btn:active:hover, .yellow-casablanca.btn.active:hover {
+  background-color: #ef541b;
+}
+.open .yellow-casablanca.btn.dropdown-toggle {
+  background-image: none;
+}
+.yellow-casablanca.btn.disabled, .yellow-casablanca.btn.disabled:hover, .yellow-casablanca.btn.disabled:focus, .yellow-casablanca.btn.disabled:active, .yellow-casablanca.btn.disabled.active, .yellow-casablanca.btn[disabled], .yellow-casablanca.btn[disabled]:hover, .yellow-casablanca.btn[disabled]:focus, .yellow-casablanca.btn[disabled]:active, .yellow-casablanca.btn[disabled].active, fieldset[disabled] .yellow-casablanca.btn, fieldset[disabled] .yellow-casablanca.btn:hover, fieldset[disabled] .yellow-casablanca.btn:focus, fieldset[disabled] .yellow-casablanca.btn:active, fieldset[disabled] .yellow-casablanca.btn.active {
+  background-color: #f2784b;
+}
+.yellow-casablanca.btn .badge {
+  color: #f2784b;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-casablanca-stripe {
+  border-left: 3px solid #f2784b;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow-casablanca,
+.portlet.yellow-casablanca {
+  background-color: #f2784b;
+}
+
+.portlet.solid.yellow-casablanca > .portlet-title,
+.portlet.solid.yellow-casablanca > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.yellow-casablanca > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.yellow-casablanca > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.yellow-casablanca {
+  border: 1px solid #f59c7b;
+  border-top: 0;
+}
+.portlet.box.yellow-casablanca > .portlet-title {
+  background-color: #f2784b;
+}
+.portlet.box.yellow-casablanca > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.yellow-casablanca > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #fac6b4;
+  color: #fbd8cb;
+}
+.portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default > i {
+  color: #fce3da;
+}
+.portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-casablanca > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #fdeae3;
+  color: #fffcfb;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow-casablanca {
+  background-color: #f2784b;
+}
+.dashboard-stat.yellow-casablanca.dashboard-stat-light:hover {
+  background-color: #f16a38;
+}
+.dashboard-stat.yellow-casablanca .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.yellow-casablanca .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.yellow-casablanca .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.yellow-casablanca .more {
+  color: #FFFFFF;
+  background-color: #f16a38;
+}
+
+/* General Element */
+.bg-yellow-casablanca {
+  border-color: #f2784b !important;
+  background-image: none !important;
+  background-color: #f2784b !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow-casablanca {
+  color: #f2784b !important;
+}
+
+.progress-bar.yellow-casablanca {
+  background: #f2784b !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Yellow Crusta
+***/
+/* Button */
+.yellow-crusta.btn {
+  color: #FFFFFF;
+  background-color: #f3c200;
+  border-color: "";
+}
+.yellow-crusta.btn:hover, .yellow-crusta.btn:focus, .yellow-crusta.btn:active, .yellow-crusta.btn.active {
+  color: #FFFFFF;
+  background-color: #cfa500;
+}
+.open .yellow-crusta.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #cfa500;
+}
+.yellow-crusta.btn:active, .yellow-crusta.btn.active {
+  background-image: none;
+  background-color: #b69100;
+}
+.yellow-crusta.btn:active:hover, .yellow-crusta.btn.active:hover {
+  background-color: #c09900;
+}
+.open .yellow-crusta.btn.dropdown-toggle {
+  background-image: none;
+}
+.yellow-crusta.btn.disabled, .yellow-crusta.btn.disabled:hover, .yellow-crusta.btn.disabled:focus, .yellow-crusta.btn.disabled:active, .yellow-crusta.btn.disabled.active, .yellow-crusta.btn[disabled], .yellow-crusta.btn[disabled]:hover, .yellow-crusta.btn[disabled]:focus, .yellow-crusta.btn[disabled]:active, .yellow-crusta.btn[disabled].active, fieldset[disabled] .yellow-crusta.btn, fieldset[disabled] .yellow-crusta.btn:hover, fieldset[disabled] .yellow-crusta.btn:focus, fieldset[disabled] .yellow-crusta.btn:active, fieldset[disabled] .yellow-crusta.btn.active {
+  background-color: #f3c200;
+}
+.yellow-crusta.btn .badge {
+  color: #f3c200;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-crusta-stripe {
+  border-left: 3px solid #f3c200;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow-crusta,
+.portlet.yellow-crusta {
+  background-color: #f3c200;
+}
+
+.portlet.solid.yellow-crusta > .portlet-title,
+.portlet.solid.yellow-crusta > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.yellow-crusta > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.yellow-crusta > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.yellow-crusta {
+  border: 1px solid #ffd327;
+  border-top: 0;
+}
+.portlet.box.yellow-crusta > .portlet-title {
+  background-color: #f3c200;
+}
+.portlet.box.yellow-crusta > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.yellow-crusta > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.yellow-crusta > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #ffe064;
+  color: #ffe57e;
+}
+.portlet.box.yellow-crusta > .portlet-title > .actions .btn-default > i {
+  color: #ffe88d;
+}
+.portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-crusta > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #ffea97;
+  color: #ffefb1;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow-crusta {
+  background-color: #f3c200;
+}
+.dashboard-stat.yellow-crusta.dashboard-stat-light:hover {
+  background-color: #dfb200;
+}
+.dashboard-stat.yellow-crusta .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.yellow-crusta .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.yellow-crusta .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.yellow-crusta .more {
+  color: #FFFFFF;
+  background-color: #dfb200;
+}
+
+/* General Element */
+.bg-yellow-crusta {
+  border-color: #f3c200 !important;
+  background-image: none !important;
+  background-color: #f3c200 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow-crusta {
+  color: #f3c200 !important;
+}
+
+.progress-bar.yellow-crusta {
+  background: #f3c200 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Yellow Lemon
+***/
+/* Button */
+.yellow-lemon.btn {
+  color: #FFFFFF;
+  background-color: #F7CA18;
+  border-color: "";
+}
+.yellow-lemon.btn:hover, .yellow-lemon.btn:focus, .yellow-lemon.btn:active, .yellow-lemon.btn.active {
+  color: #FFFFFF;
+  background-color: #e3b708;
+}
+.open .yellow-lemon.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #e3b708;
+}
+.yellow-lemon.btn:active, .yellow-lemon.btn.active {
+  background-image: none;
+  background-color: #cba307;
+}
+.yellow-lemon.btn:active:hover, .yellow-lemon.btn.active:hover {
+  background-color: #d5ab07;
+}
+.open .yellow-lemon.btn.dropdown-toggle {
+  background-image: none;
+}
+.yellow-lemon.btn.disabled, .yellow-lemon.btn.disabled:hover, .yellow-lemon.btn.disabled:focus, .yellow-lemon.btn.disabled:active, .yellow-lemon.btn.disabled.active, .yellow-lemon.btn[disabled], .yellow-lemon.btn[disabled]:hover, .yellow-lemon.btn[disabled]:focus, .yellow-lemon.btn[disabled]:active, .yellow-lemon.btn[disabled].active, fieldset[disabled] .yellow-lemon.btn, fieldset[disabled] .yellow-lemon.btn:hover, fieldset[disabled] .yellow-lemon.btn:focus, fieldset[disabled] .yellow-lemon.btn:active, fieldset[disabled] .yellow-lemon.btn.active {
+  background-color: #F7CA18;
+}
+.yellow-lemon.btn .badge {
+  color: #F7CA18;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-lemon-stripe {
+  border-left: 3px solid #F7CA18;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow-lemon,
+.portlet.yellow-lemon {
+  background-color: #F7CA18;
+}
+
+.portlet.solid.yellow-lemon > .portlet-title,
+.portlet.solid.yellow-lemon > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.yellow-lemon > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.yellow-lemon > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.yellow-lemon {
+  border: 1px solid #f9d549;
+  border-top: 0;
+}
+.portlet.box.yellow-lemon > .portlet-title {
+  background-color: #F7CA18;
+}
+.portlet.box.yellow-lemon > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.yellow-lemon > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.yellow-lemon > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #fbe384;
+  color: #fce99d;
+}
+.portlet.box.yellow-lemon > .portlet-title > .actions .btn-default > i {
+  color: #fcecac;
+}
+.portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-lemon > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #fceeb6;
+  color: #fdf4ce;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow-lemon {
+  background-color: #F7CA18;
+}
+.dashboard-stat.yellow-lemon.dashboard-stat-light:hover {
+  background-color: #f2c308;
+}
+.dashboard-stat.yellow-lemon .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.yellow-lemon .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.yellow-lemon .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.yellow-lemon .more {
+  color: #FFFFFF;
+  background-color: #f2c308;
+}
+
+/* General Element */
+.bg-yellow-lemon {
+  border-color: #F7CA18 !important;
+  background-image: none !important;
+  background-color: #F7CA18 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow-lemon {
+  color: #F7CA18 !important;
+}
+
+.progress-bar.yellow-lemon {
+  background: #F7CA18 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Yellow Saffron
+***/
+/* Button */
+.yellow-saffron.btn {
+  color: #FFFFFF;
+  background-color: #F4D03F;
+  border-color: "";
+}
+.yellow-saffron.btn:hover, .yellow-saffron.btn:focus, .yellow-saffron.btn:active, .yellow-saffron.btn.active {
+  color: #FFFFFF;
+  background-color: #f2c81d;
+}
+.open .yellow-saffron.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #f2c81d;
+}
+.yellow-saffron.btn:active, .yellow-saffron.btn.active {
+  background-image: none;
+  background-color: #e8bd0d;
+}
+.yellow-saffron.btn:active:hover, .yellow-saffron.btn.active:hover {
+  background-color: #f1c40f;
+}
+.open .yellow-saffron.btn.dropdown-toggle {
+  background-image: none;
+}
+.yellow-saffron.btn.disabled, .yellow-saffron.btn.disabled:hover, .yellow-saffron.btn.disabled:focus, .yellow-saffron.btn.disabled:active, .yellow-saffron.btn.disabled.active, .yellow-saffron.btn[disabled], .yellow-saffron.btn[disabled]:hover, .yellow-saffron.btn[disabled]:focus, .yellow-saffron.btn[disabled]:active, .yellow-saffron.btn[disabled].active, fieldset[disabled] .yellow-saffron.btn, fieldset[disabled] .yellow-saffron.btn:hover, fieldset[disabled] .yellow-saffron.btn:focus, fieldset[disabled] .yellow-saffron.btn:active, fieldset[disabled] .yellow-saffron.btn.active {
+  background-color: #F4D03F;
+}
+.yellow-saffron.btn .badge {
+  color: #F4D03F;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.yellow-saffron-stripe {
+  border-left: 3px solid #F4D03F;
+}
+
+/* Portlet */
+.portlet > .portlet-body.yellow-saffron,
+.portlet.yellow-saffron {
+  background-color: #F4D03F;
+}
+
+.portlet.solid.yellow-saffron > .portlet-title,
+.portlet.solid.yellow-saffron > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.yellow-saffron > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.yellow-saffron > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.yellow-saffron {
+  border: 1px solid #f7dc6f;
+  border-top: 0;
+}
+.portlet.box.yellow-saffron > .portlet-title {
+  background-color: #F4D03F;
+}
+.portlet.box.yellow-saffron > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.yellow-saffron > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.yellow-saffron > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #faeaa9;
+  color: #fbf0c1;
+}
+.portlet.box.yellow-saffron > .portlet-title > .actions .btn-default > i {
+  color: #fcf3d0;
+}
+.portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:hover, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:focus, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default:active, .portlet.box.yellow-saffron > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #fdf6d9;
+  color: #fefcf1;
+}
+
+/* Statistic Block */
+.dashboard-stat.yellow-saffron {
+  background-color: #F4D03F;
+}
+.dashboard-stat.yellow-saffron.dashboard-stat-light:hover {
+  background-color: #f3cb2c;
+}
+.dashboard-stat.yellow-saffron .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.yellow-saffron .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.yellow-saffron .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.yellow-saffron .more {
+  color: #FFFFFF;
+  background-color: #f3cb2c;
+}
+
+/* General Element */
+.bg-yellow-saffron {
+  border-color: #F4D03F !important;
+  background-image: none !important;
+  background-color: #F4D03F !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-yellow-saffron {
+  color: #F4D03F !important;
+}
+
+.progress-bar.yellow-saffron {
+  background: #F4D03F !important;
+  color: #FFFFFF !important;
+}
+
+/***********
+Purple Colors
+************/
+/***
+Purple Default
+***/
+/* Button */
+.purple.btn {
+  color: #FFFFFF;
+  background-color: #8E44AD;
+  border-color: "";
+}
+.purple.btn:hover, .purple.btn:focus, .purple.btn:active, .purple.btn.active {
+  color: #FFFFFF;
+  background-color: #793a93;
+}
+.open .purple.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #793a93;
+}
+.purple.btn:active, .purple.btn.active {
+  background-image: none;
+  background-color: #6a3381;
+}
+.purple.btn:active:hover, .purple.btn.active:hover {
+  background-color: #703688;
+}
+.open .purple.btn.dropdown-toggle {
+  background-image: none;
+}
+.purple.btn.disabled, .purple.btn.disabled:hover, .purple.btn.disabled:focus, .purple.btn.disabled:active, .purple.btn.disabled.active, .purple.btn[disabled], .purple.btn[disabled]:hover, .purple.btn[disabled]:focus, .purple.btn[disabled]:active, .purple.btn[disabled].active, fieldset[disabled] .purple.btn, fieldset[disabled] .purple.btn:hover, fieldset[disabled] .purple.btn:focus, fieldset[disabled] .purple.btn:active, fieldset[disabled] .purple.btn.active {
+  background-color: #8E44AD;
+}
+.purple.btn .badge {
+  color: #8E44AD;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-stripe {
+  border-left: 3px solid #8E44AD;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple,
+.portlet.purple {
+  background-color: #8E44AD;
+}
+
+.portlet.solid.purple > .portlet-title,
+.portlet.solid.purple > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.purple > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.purple > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.purple > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.purple > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.purple > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.purple > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.purple > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.purple {
+  border: 1px solid #a563c1;
+  border-top: 0;
+}
+.portlet.box.purple > .portlet-title {
+  background-color: #8E44AD;
+}
+.portlet.box.purple > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.purple > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.purple > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #bf8ed3;
+  color: #c9a1da;
+}
+.portlet.box.purple > .portlet-title > .actions .btn-default > i {
+  color: #cfacde;
+}
+.portlet.box.purple > .portlet-title > .actions .btn-default:hover, .portlet.box.purple > .portlet-title > .actions .btn-default:focus, .portlet.box.purple > .portlet-title > .actions .btn-default:active, .portlet.box.purple > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #d4b3e1;
+  color: #dec5e8;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple {
+  background-color: #8E44AD;
+}
+.dashboard-stat.purple.dashboard-stat-light:hover {
+  background-color: #823e9e;
+}
+.dashboard-stat.purple .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.purple .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.purple .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.purple .more {
+  color: #FFFFFF;
+  background-color: #823e9e;
+}
+
+/* General Element */
+.bg-purple {
+  border-color: #8E44AD !important;
+  background-image: none !important;
+  background-color: #8E44AD !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple {
+  color: #8E44AD !important;
+}
+
+.progress-bar.purple {
+  background: #8E44AD !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Purple Plum
+***/
+/* Button */
+.purple-plum.btn {
+  color: #FFFFFF;
+  background-color: #8775a7;
+  border-color: "";
+}
+.purple-plum.btn:hover, .purple-plum.btn:focus, .purple-plum.btn:active, .purple-plum.btn.active {
+  color: #FFFFFF;
+  background-color: #746198;
+}
+.open .purple-plum.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #746198;
+}
+.purple-plum.btn:active, .purple-plum.btn.active {
+  background-image: none;
+  background-color: #685788;
+}
+.purple-plum.btn:active:hover, .purple-plum.btn.active:hover {
+  background-color: #6d5b8e;
+}
+.open .purple-plum.btn.dropdown-toggle {
+  background-image: none;
+}
+.purple-plum.btn.disabled, .purple-plum.btn.disabled:hover, .purple-plum.btn.disabled:focus, .purple-plum.btn.disabled:active, .purple-plum.btn.disabled.active, .purple-plum.btn[disabled], .purple-plum.btn[disabled]:hover, .purple-plum.btn[disabled]:focus, .purple-plum.btn[disabled]:active, .purple-plum.btn[disabled].active, fieldset[disabled] .purple-plum.btn, fieldset[disabled] .purple-plum.btn:hover, fieldset[disabled] .purple-plum.btn:focus, fieldset[disabled] .purple-plum.btn:active, fieldset[disabled] .purple-plum.btn.active {
+  background-color: #8775a7;
+}
+.purple-plum.btn .badge {
+  color: #8775a7;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-plum-stripe {
+  border-left: 3px solid #8775a7;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-plum,
+.portlet.purple-plum {
+  background-color: #8775a7;
+}
+
+.portlet.solid.purple-plum > .portlet-title,
+.portlet.solid.purple-plum > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.purple-plum > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.purple-plum > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.purple-plum > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.purple-plum > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.purple-plum > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.purple-plum > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.purple-plum > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.purple-plum {
+  border: 1px solid #a294bb;
+  border-top: 0;
+}
+.portlet.box.purple-plum > .portlet-title {
+  background-color: #8775a7;
+}
+.portlet.box.purple-plum > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.purple-plum > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.purple-plum > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #c3bad3;
+  color: #d0c9dd;
+}
+.portlet.box.purple-plum > .portlet-title > .actions .btn-default > i {
+  color: #d8d2e3;
+}
+.portlet.box.purple-plum > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-plum > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-plum > .portlet-title > .actions .btn-default:active, .portlet.box.purple-plum > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #ded9e7;
+  color: #ebe8f0;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-plum {
+  background-color: #8775a7;
+}
+.dashboard-stat.purple-plum.dashboard-stat-light:hover {
+  background-color: #7c699f;
+}
+.dashboard-stat.purple-plum .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.purple-plum .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.purple-plum .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.purple-plum .more {
+  color: #FFFFFF;
+  background-color: #7c699f;
+}
+
+/* General Element */
+.bg-purple-plum {
+  border-color: #8775a7 !important;
+  background-image: none !important;
+  background-color: #8775a7 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-plum {
+  color: #8775a7 !important;
+}
+
+.progress-bar.purple-plum {
+  background: #8775a7 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Purple Medium
+***/
+/* Button */
+.purple-medium.btn {
+  color: #FFFFFF;
+  background-color: #BF55EC;
+  border-color: "";
+}
+.purple-medium.btn:hover, .purple-medium.btn:focus, .purple-medium.btn:active, .purple-medium.btn.active {
+  color: #FFFFFF;
+  background-color: #b335e8;
+}
+.open .purple-medium.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #b335e8;
+}
+.purple-medium.btn:active, .purple-medium.btn.active {
+  background-image: none;
+  background-color: #aa1ee6;
+}
+.purple-medium.btn:active:hover, .purple-medium.btn.active:hover {
+  background-color: #ae27e7;
+}
+.open .purple-medium.btn.dropdown-toggle {
+  background-image: none;
+}
+.purple-medium.btn.disabled, .purple-medium.btn.disabled:hover, .purple-medium.btn.disabled:focus, .purple-medium.btn.disabled:active, .purple-medium.btn.disabled.active, .purple-medium.btn[disabled], .purple-medium.btn[disabled]:hover, .purple-medium.btn[disabled]:focus, .purple-medium.btn[disabled]:active, .purple-medium.btn[disabled].active, fieldset[disabled] .purple-medium.btn, fieldset[disabled] .purple-medium.btn:hover, fieldset[disabled] .purple-medium.btn:focus, fieldset[disabled] .purple-medium.btn:active, fieldset[disabled] .purple-medium.btn.active {
+  background-color: #BF55EC;
+}
+.purple-medium.btn .badge {
+  color: #BF55EC;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-medium-stripe {
+  border-left: 3px solid #BF55EC;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-medium,
+.portlet.purple-medium {
+  background-color: #BF55EC;
+}
+
+.portlet.solid.purple-medium > .portlet-title,
+.portlet.solid.purple-medium > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.purple-medium > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.purple-medium > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.purple-medium > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.purple-medium > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.purple-medium > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.purple-medium > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.purple-medium > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.purple-medium {
+  border: 1px solid #d083f1;
+  border-top: 0;
+}
+.portlet.box.purple-medium > .portlet-title {
+  background-color: #BF55EC;
+}
+.portlet.box.purple-medium > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.purple-medium > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.purple-medium > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #e5baf7;
+  color: #eed1fa;
+}
+.portlet.box.purple-medium > .portlet-title > .actions .btn-default > i {
+  color: #f3dffb;
+}
+.portlet.box.purple-medium > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-medium > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-medium > .portlet-title > .actions .btn-default:active, .portlet.box.purple-medium > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #f6e8fc;
+  color: white;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-medium {
+  background-color: #BF55EC;
+}
+.dashboard-stat.purple-medium.dashboard-stat-light:hover {
+  background-color: #b843ea;
+}
+.dashboard-stat.purple-medium .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.purple-medium .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.purple-medium .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.purple-medium .more {
+  color: #FFFFFF;
+  background-color: #b843ea;
+}
+
+/* General Element */
+.bg-purple-medium {
+  border-color: #BF55EC !important;
+  background-image: none !important;
+  background-color: #BF55EC !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-medium {
+  color: #BF55EC !important;
+}
+
+.progress-bar.purple-medium {
+  background: #BF55EC !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Purple Studio
+***/
+/* Button */
+.purple-studio.btn {
+  color: #FFFFFF;
+  background-color: #8E44AD;
+  border-color: "";
+}
+.purple-studio.btn:hover, .purple-studio.btn:focus, .purple-studio.btn:active, .purple-studio.btn.active {
+  color: #FFFFFF;
+  background-color: #793a93;
+}
+.open .purple-studio.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #793a93;
+}
+.purple-studio.btn:active, .purple-studio.btn.active {
+  background-image: none;
+  background-color: #6a3381;
+}
+.purple-studio.btn:active:hover, .purple-studio.btn.active:hover {
+  background-color: #703688;
+}
+.open .purple-studio.btn.dropdown-toggle {
+  background-image: none;
+}
+.purple-studio.btn.disabled, .purple-studio.btn.disabled:hover, .purple-studio.btn.disabled:focus, .purple-studio.btn.disabled:active, .purple-studio.btn.disabled.active, .purple-studio.btn[disabled], .purple-studio.btn[disabled]:hover, .purple-studio.btn[disabled]:focus, .purple-studio.btn[disabled]:active, .purple-studio.btn[disabled].active, fieldset[disabled] .purple-studio.btn, fieldset[disabled] .purple-studio.btn:hover, fieldset[disabled] .purple-studio.btn:focus, fieldset[disabled] .purple-studio.btn:active, fieldset[disabled] .purple-studio.btn.active {
+  background-color: #8E44AD;
+}
+.purple-studio.btn .badge {
+  color: #8E44AD;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-studio-stripe {
+  border-left: 3px solid #8E44AD;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-studio,
+.portlet.purple-studio {
+  background-color: #8E44AD;
+}
+
+.portlet.solid.purple-studio > .portlet-title,
+.portlet.solid.purple-studio > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.purple-studio > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.purple-studio > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.purple-studio > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.purple-studio > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.purple-studio > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.purple-studio > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.purple-studio > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.purple-studio {
+  border: 1px solid #a563c1;
+  border-top: 0;
+}
+.portlet.box.purple-studio > .portlet-title {
+  background-color: #8E44AD;
+}
+.portlet.box.purple-studio > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.purple-studio > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.purple-studio > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #bf8ed3;
+  color: #c9a1da;
+}
+.portlet.box.purple-studio > .portlet-title > .actions .btn-default > i {
+  color: #cfacde;
+}
+.portlet.box.purple-studio > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-studio > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-studio > .portlet-title > .actions .btn-default:active, .portlet.box.purple-studio > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #d4b3e1;
+  color: #dec5e8;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-studio {
+  background-color: #8E44AD;
+}
+.dashboard-stat.purple-studio.dashboard-stat-light:hover {
+  background-color: #823e9e;
+}
+.dashboard-stat.purple-studio .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.purple-studio .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.purple-studio .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.purple-studio .more {
+  color: #FFFFFF;
+  background-color: #823e9e;
+}
+
+/* General Element */
+.bg-purple-studio {
+  border-color: #8E44AD !important;
+  background-image: none !important;
+  background-color: #8E44AD !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-studio {
+  color: #8E44AD !important;
+}
+
+.progress-bar.purple-studio {
+  background: #8E44AD !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Purple Wisteria
+***/
+/* Button */
+.purple-wisteria.btn {
+  color: #FFFFFF;
+  background-color: #9B59B6;
+  border-color: "";
+}
+.purple-wisteria.btn:hover, .purple-wisteria.btn:focus, .purple-wisteria.btn:active, .purple-wisteria.btn.active {
+  color: #FFFFFF;
+  background-color: #8948a3;
+}
+.open .purple-wisteria.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #8948a3;
+}
+.purple-wisteria.btn:active, .purple-wisteria.btn.active {
+  background-image: none;
+  background-color: #7a4092;
+}
+.purple-wisteria.btn:active:hover, .purple-wisteria.btn.active:hover {
+  background-color: #804399;
+}
+.open .purple-wisteria.btn.dropdown-toggle {
+  background-image: none;
+}
+.purple-wisteria.btn.disabled, .purple-wisteria.btn.disabled:hover, .purple-wisteria.btn.disabled:focus, .purple-wisteria.btn.disabled:active, .purple-wisteria.btn.disabled.active, .purple-wisteria.btn[disabled], .purple-wisteria.btn[disabled]:hover, .purple-wisteria.btn[disabled]:focus, .purple-wisteria.btn[disabled]:active, .purple-wisteria.btn[disabled].active, fieldset[disabled] .purple-wisteria.btn, fieldset[disabled] .purple-wisteria.btn:hover, fieldset[disabled] .purple-wisteria.btn:focus, fieldset[disabled] .purple-wisteria.btn:active, fieldset[disabled] .purple-wisteria.btn.active {
+  background-color: #9B59B6;
+}
+.purple-wisteria.btn .badge {
+  color: #9B59B6;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-wisteria-stripe {
+  border-left: 3px solid #9B59B6;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-wisteria,
+.portlet.purple-wisteria {
+  background-color: #9B59B6;
+}
+
+.portlet.solid.purple-wisteria > .portlet-title,
+.portlet.solid.purple-wisteria > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.purple-wisteria > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.purple-wisteria > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.purple-wisteria {
+  border: 1px solid #b07cc6;
+  border-top: 0;
+}
+.portlet.box.purple-wisteria > .portlet-title {
+  background-color: #9B59B6;
+}
+.portlet.box.purple-wisteria > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.purple-wisteria > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.purple-wisteria > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #caa7d8;
+  color: #d5b9e0;
+}
+.portlet.box.purple-wisteria > .portlet-title > .actions .btn-default > i {
+  color: #dbc3e5;
+}
+.portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default:active, .portlet.box.purple-wisteria > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #dfcae8;
+  color: #eadcf0;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-wisteria {
+  background-color: #9B59B6;
+}
+.dashboard-stat.purple-wisteria.dashboard-stat-light:hover {
+  background-color: #924dae;
+}
+.dashboard-stat.purple-wisteria .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.purple-wisteria .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.purple-wisteria .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.purple-wisteria .more {
+  color: #FFFFFF;
+  background-color: #924dae;
+}
+
+/* General Element */
+.bg-purple-wisteria {
+  border-color: #9B59B6 !important;
+  background-image: none !important;
+  background-color: #9B59B6 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-wisteria {
+  color: #9B59B6 !important;
+}
+
+.progress-bar.purple-wisteria {
+  background: #9B59B6 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Purple Seance
+***/
+/* Button */
+.purple-seance.btn {
+  color: #FFFFFF;
+  background-color: #9A12B3;
+  border-color: "";
+}
+.purple-seance.btn:hover, .purple-seance.btn:focus, .purple-seance.btn:active, .purple-seance.btn.active {
+  color: #FFFFFF;
+  background-color: #7e0f93;
+}
+.open .purple-seance.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #7e0f93;
+}
+.purple-seance.btn:active, .purple-seance.btn.active {
+  background-image: none;
+  background-color: #6a0c7b;
+}
+.purple-seance.btn:active:hover, .purple-seance.btn.active:hover {
+  background-color: #720d85;
+}
+.open .purple-seance.btn.dropdown-toggle {
+  background-image: none;
+}
+.purple-seance.btn.disabled, .purple-seance.btn.disabled:hover, .purple-seance.btn.disabled:focus, .purple-seance.btn.disabled:active, .purple-seance.btn.disabled.active, .purple-seance.btn[disabled], .purple-seance.btn[disabled]:hover, .purple-seance.btn[disabled]:focus, .purple-seance.btn[disabled]:active, .purple-seance.btn[disabled].active, fieldset[disabled] .purple-seance.btn, fieldset[disabled] .purple-seance.btn:hover, fieldset[disabled] .purple-seance.btn:focus, fieldset[disabled] .purple-seance.btn:active, fieldset[disabled] .purple-seance.btn.active {
+  background-color: #9A12B3;
+}
+.purple-seance.btn .badge {
+  color: #9A12B3;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-seance-stripe {
+  border-left: 3px solid #9A12B3;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-seance,
+.portlet.purple-seance {
+  background-color: #9A12B3;
+}
+
+.portlet.solid.purple-seance > .portlet-title,
+.portlet.solid.purple-seance > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.purple-seance > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.purple-seance > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.purple-seance > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.purple-seance > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.purple-seance > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.purple-seance > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.purple-seance > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.purple-seance {
+  border: 1px solid #c217e1;
+  border-top: 0;
+}
+.portlet.box.purple-seance > .portlet-title {
+  background-color: #9A12B3;
+}
+.portlet.box.purple-seance > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.purple-seance > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.purple-seance > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #d349ed;
+  color: #d960ef;
+}
+.portlet.box.purple-seance > .portlet-title > .actions .btn-default > i {
+  color: #dc6ef0;
+}
+.portlet.box.purple-seance > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-seance > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-seance > .portlet-title > .actions .btn-default:active, .portlet.box.purple-seance > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #de77f1;
+  color: #e48ef4;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-seance {
+  background-color: #9A12B3;
+}
+.dashboard-stat.purple-seance.dashboard-stat-light:hover {
+  background-color: #8a10a0;
+}
+.dashboard-stat.purple-seance .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.purple-seance .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.purple-seance .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.purple-seance .more {
+  color: #FFFFFF;
+  background-color: #8a10a0;
+}
+
+/* General Element */
+.bg-purple-seance {
+  border-color: #9A12B3 !important;
+  background-image: none !important;
+  background-color: #9A12B3 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-seance {
+  color: #9A12B3 !important;
+}
+
+.progress-bar.purple-seance {
+  background: #9A12B3 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Purple Intense
+***/
+/* Button */
+.purple-intense.btn {
+  color: #FFFFFF;
+  background-color: #8775a7;
+  border-color: "";
+}
+.purple-intense.btn:hover, .purple-intense.btn:focus, .purple-intense.btn:active, .purple-intense.btn.active {
+  color: #FFFFFF;
+  background-color: #746198;
+}
+.open .purple-intense.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #746198;
+}
+.purple-intense.btn:active, .purple-intense.btn.active {
+  background-image: none;
+  background-color: #685788;
+}
+.purple-intense.btn:active:hover, .purple-intense.btn.active:hover {
+  background-color: #6d5b8e;
+}
+.open .purple-intense.btn.dropdown-toggle {
+  background-image: none;
+}
+.purple-intense.btn.disabled, .purple-intense.btn.disabled:hover, .purple-intense.btn.disabled:focus, .purple-intense.btn.disabled:active, .purple-intense.btn.disabled.active, .purple-intense.btn[disabled], .purple-intense.btn[disabled]:hover, .purple-intense.btn[disabled]:focus, .purple-intense.btn[disabled]:active, .purple-intense.btn[disabled].active, fieldset[disabled] .purple-intense.btn, fieldset[disabled] .purple-intense.btn:hover, fieldset[disabled] .purple-intense.btn:focus, fieldset[disabled] .purple-intense.btn:active, fieldset[disabled] .purple-intense.btn.active {
+  background-color: #8775a7;
+}
+.purple-intense.btn .badge {
+  color: #8775a7;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-intense-stripe {
+  border-left: 3px solid #8775a7;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-intense,
+.portlet.purple-intense {
+  background-color: #8775a7;
+}
+
+.portlet.solid.purple-intense > .portlet-title,
+.portlet.solid.purple-intense > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.purple-intense > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.purple-intense > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.purple-intense > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.purple-intense > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.purple-intense > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.purple-intense > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.purple-intense > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.purple-intense {
+  border: 1px solid #a294bb;
+  border-top: 0;
+}
+.portlet.box.purple-intense > .portlet-title {
+  background-color: #8775a7;
+}
+.portlet.box.purple-intense > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.purple-intense > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.purple-intense > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #c3bad3;
+  color: #d0c9dd;
+}
+.portlet.box.purple-intense > .portlet-title > .actions .btn-default > i {
+  color: #d8d2e3;
+}
+.portlet.box.purple-intense > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-intense > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-intense > .portlet-title > .actions .btn-default:active, .portlet.box.purple-intense > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #ded9e7;
+  color: #ebe8f0;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-intense {
+  background-color: #8775a7;
+}
+.dashboard-stat.purple-intense.dashboard-stat-light:hover {
+  background-color: #7c699f;
+}
+.dashboard-stat.purple-intense .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.purple-intense .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.purple-intense .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.purple-intense .more {
+  color: #FFFFFF;
+  background-color: #7c699f;
+}
+
+/* General Element */
+.bg-purple-intense {
+  border-color: #8775a7 !important;
+  background-image: none !important;
+  background-color: #8775a7 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-intense {
+  color: #8775a7 !important;
+}
+
+.progress-bar.purple-intense {
+  background: #8775a7 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Purple Sharp
+***/
+/* Button */
+.purple-sharp.btn {
+  color: #FFFFFF;
+  background-color: #796799;
+  border-color: "";
+}
+.purple-sharp.btn:hover, .purple-sharp.btn:focus, .purple-sharp.btn:active, .purple-sharp.btn.active {
+  color: #FFFFFF;
+  background-color: #685884;
+}
+.open .purple-sharp.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #685884;
+}
+.purple-sharp.btn:active, .purple-sharp.btn.active {
+  background-image: none;
+  background-color: #5c4e75;
+}
+.purple-sharp.btn:active:hover, .purple-sharp.btn.active:hover {
+  background-color: #61527b;
+}
+.open .purple-sharp.btn.dropdown-toggle {
+  background-image: none;
+}
+.purple-sharp.btn.disabled, .purple-sharp.btn.disabled:hover, .purple-sharp.btn.disabled:focus, .purple-sharp.btn.disabled:active, .purple-sharp.btn.disabled.active, .purple-sharp.btn[disabled], .purple-sharp.btn[disabled]:hover, .purple-sharp.btn[disabled]:focus, .purple-sharp.btn[disabled]:active, .purple-sharp.btn[disabled].active, fieldset[disabled] .purple-sharp.btn, fieldset[disabled] .purple-sharp.btn:hover, fieldset[disabled] .purple-sharp.btn:focus, fieldset[disabled] .purple-sharp.btn:active, fieldset[disabled] .purple-sharp.btn.active {
+  background-color: #796799;
+}
+.purple-sharp.btn .badge {
+  color: #796799;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-sharp-stripe {
+  border-left: 3px solid #796799;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-sharp,
+.portlet.purple-sharp {
+  background-color: #796799;
+}
+
+.portlet.solid.purple-sharp > .portlet-title,
+.portlet.solid.purple-sharp > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.purple-sharp > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.purple-sharp > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.purple-sharp {
+  border: 1px solid #9486ad;
+  border-top: 0;
+}
+.portlet.box.purple-sharp > .portlet-title {
+  background-color: #796799;
+}
+.portlet.box.purple-sharp > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.purple-sharp > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.purple-sharp > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #b4aac6;
+  color: #c2b9d0;
+}
+.portlet.box.purple-sharp > .portlet-title > .actions .btn-default > i {
+  color: #cac3d6;
+}
+.portlet.box.purple-sharp > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default:active, .portlet.box.purple-sharp > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #cfc9db;
+  color: #ddd8e5;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-sharp {
+  background-color: #796799;
+}
+.dashboard-stat.purple-sharp.dashboard-stat-light:hover {
+  background-color: #6f5f8d;
+}
+.dashboard-stat.purple-sharp .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.purple-sharp .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.purple-sharp .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.purple-sharp .more {
+  color: #FFFFFF;
+  background-color: #6f5f8d;
+}
+
+/* General Element */
+.bg-purple-sharp {
+  border-color: #796799 !important;
+  background-image: none !important;
+  background-color: #796799 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-sharp {
+  color: #796799 !important;
+}
+
+.progress-bar.purple-sharp {
+  background: #796799 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Purple Soft
+***/
+/* Button */
+.purple-soft.btn {
+  color: #FFFFFF;
+  background-color: #8877a9;
+  border-color: "";
+}
+.purple-soft.btn:hover, .purple-soft.btn:focus, .purple-soft.btn:active, .purple-soft.btn.active {
+  color: #FFFFFF;
+  background-color: #75629b;
+}
+.open .purple-soft.btn.dropdown-toggle {
+  color: #FFFFFF;
+  background-color: #75629b;
+}
+.purple-soft.btn:active, .purple-soft.btn.active {
+  background-image: none;
+  background-color: #69588b;
+}
+.purple-soft.btn:active:hover, .purple-soft.btn.active:hover {
+  background-color: #6e5c91;
+}
+.open .purple-soft.btn.dropdown-toggle {
+  background-image: none;
+}
+.purple-soft.btn.disabled, .purple-soft.btn.disabled:hover, .purple-soft.btn.disabled:focus, .purple-soft.btn.disabled:active, .purple-soft.btn.disabled.active, .purple-soft.btn[disabled], .purple-soft.btn[disabled]:hover, .purple-soft.btn[disabled]:focus, .purple-soft.btn[disabled]:active, .purple-soft.btn[disabled].active, fieldset[disabled] .purple-soft.btn, fieldset[disabled] .purple-soft.btn:hover, fieldset[disabled] .purple-soft.btn:focus, fieldset[disabled] .purple-soft.btn:active, fieldset[disabled] .purple-soft.btn.active {
+  background-color: #8877a9;
+}
+.purple-soft.btn .badge {
+  color: #8877a9;
+  background-color: #FFFFFF;
+}
+
+/* Button Strip */
+.btn.purple-soft-stripe {
+  border-left: 3px solid #8877a9;
+}
+
+/* Portlet */
+.portlet > .portlet-body.purple-soft,
+.portlet.purple-soft {
+  background-color: #8877a9;
+}
+
+.portlet.solid.purple-soft > .portlet-title,
+.portlet.solid.purple-soft > .portlet-body {
+  border: 0;
+  color: #FFFFFF;
+}
+.portlet.solid.purple-soft > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.solid.purple-soft > .portlet-title > .tools > a.remove {
+  background-image: url(../../images/portlet-remove-icon-white.png);
+}
+.portlet.solid.purple-soft > .portlet-title > .tools > a.config {
+  background-image: url(../../images/portlet-config-icon-white.png);
+}
+.portlet.solid.purple-soft > .portlet-title > .tools > a.reload {
+  background-image: url(../../images/portlet-reload-icon-white.png);
+}
+.portlet.solid.purple-soft > .portlet-title > .tools > a.expand {
+  background-image: url(../../images/portlet-expand-icon-white.png);
+}
+.portlet.solid.purple-soft > .portlet-title > .tools > a.collapse {
+  background-image: url(../../images/portlet-collapse-icon-white.png);
+}
+.portlet.solid.purple-soft > .portlet-title > .tools > a.fullscreen {
+  color: #fdfdfd;
+}
+
+.portlet.box.purple-soft {
+  border: 1px solid #a396bd;
+  border-top: 0;
+}
+.portlet.box.purple-soft > .portlet-title {
+  background-color: #8877a9;
+}
+.portlet.box.purple-soft > .portlet-title > .caption {
+  color: #FFFFFF;
+}
+.portlet.box.purple-soft > .portlet-title > .caption > i {
+  color: #FFFFFF;
+}
+.portlet.box.purple-soft > .portlet-title > .actions .btn-default {
+  background: transparent !important;
+  background-color: transparent !important;
+  border: 1px solid #c4bcd4;
+  color: #d2cbde;
+}
+.portlet.box.purple-soft > .portlet-title > .actions .btn-default > i {
+  color: #dad5e4;
+}
+.portlet.box.purple-soft > .portlet-title > .actions .btn-default:hover, .portlet.box.purple-soft > .portlet-title > .actions .btn-default:focus, .portlet.box.purple-soft > .portlet-title > .actions .btn-default:active, .portlet.box.purple-soft > .portlet-title > .actions .btn-default.active {
+  border: 1px solid #dfdbe8;
+  color: #edebf2;
+}
+
+/* Statistic Block */
+.dashboard-stat.purple-soft {
+  background-color: #8877a9;
+}
+.dashboard-stat.purple-soft.dashboard-stat-light:hover {
+  background-color: #7d6ba1;
+}
+.dashboard-stat.purple-soft .visual > i {
+  color: #FFFFFF;
+  opacity: 0.1;
+  filter: alpha(opacity=10);
+}
+.dashboard-stat.purple-soft .details .number {
+  color: #FFFFFF;
+}
+.dashboard-stat.purple-soft .details .desc {
+  color: #FFFFFF;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dashboard-stat.purple-soft .more {
+  color: #FFFFFF;
+  background-color: #7d6ba1;
+}
+
+/* General Element */
+.bg-purple-soft {
+  border-color: #8877a9 !important;
+  background-image: none !important;
+  background-color: #8877a9 !important;
+  color: #FFFFFF !important;
+}
+
+/* General Text & Icon Font Colors */
+.font-purple-soft {
+  color: #8877a9 !important;
+}
+
+.progress-bar.purple-soft {
+  background: #8877a9 !important;
+  color: #FFFFFF !important;
+}
+
+/***
+Transparent Button
+***/
+.btn-transparent.btn {
+  background: transparent;
+  color: #888;
+}
diff --git a/public/assets/css/global/custom-whirly.css b/public/assets/css/global/custom-whirly.css
new file mode 100644
index 0000000..ea7a78a
--- /dev/null
+++ b/public/assets/css/global/custom-whirly.css
@@ -0,0 +1,57 @@
+@-moz-keyframes whirly-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@-webkit-keyframes whirly-loader {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@keyframes whirly-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    -ms-transform: rotate(360deg);
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.whirly-loader:not(:required) {
+  overflow: hidden;
+  position: relative;
+  text-indent: -9999px;
+  display: inline-block;
+  width: 8px;
+  height: 8px;
+  background: transparent;
+  -moz-border-radius: 100%;
+  -webkit-border-radius: 100%;
+  border-radius: 100%;
+  -moz-box-shadow: #FA4C61 0px 26px 0 6px, #FA4C61 0.90971px 26.05079px 0 5.93333px, #FA4C61 1.82297px 26.06967px 0 5.86667px, #FA4C61 2.73865px 26.05647px 0 5.8px, #FA4C61 3.65561px 26.01104px 0 5.73333px, #FA4C61 4.57274px 25.93327px 0 5.66667px, #FA4C61 5.48887px 25.8231px 0 5.6px, #FA4C61 6.40287px 25.68049px 0 5.53333px, #FA4C61 7.31358px 25.50548px 0 5.46667px, #FA4C61 8.21985px 25.2981px 0 5.4px, #FA4C61 9.12054px 25.05847px 0 5.33333px, #FA4C61 10.01448px 24.78672px 0 5.26667px, #FA4C61 10.90054px 24.48302px 0 5.2px, #FA4C61 11.77757px 24.1476px 0 5.13333px, #FA4C61 12.64443px 23.78072px 0 5.06667px, #FA4C61 13.5px 23.38269px 0 5px, #FA4C61 14.34315px 22.95384px 0 4.93333px, #FA4C61 15.17277px 22.49455px 0 4.86667px, #FA4C61 15.98776px 22.00526px 0 4.8px, #FA4C61 16.78704px 21.48643px 0 4.73333px, #FA4C61 17.56953px 20.93855px 0 4.66667px, #FA4C61 18.33418px 20.36217px 0 4.6px, #FA4C61 19.07995px 19.75787px 0 4.53333px, #FA4C61 19.80582px 19.12626px 0 4.46667px, #FA4C61 20.5108px 18.468px 0 4.4px, #FA4C61 21.1939px 17.78379px 0 4.33333px, #FA4C61 21.85416px 17.07434px 0 4.26667px, #FA4C61 22.49067px 16.34043px 0 4.2px, #FA4C61 23.10251px 15.58284px 0 4.13333px, #FA4C61 23.68881px 14.80241px 0 4.06667px, #FA4C61 24.24871px 14.0px 0 4px, #FA4C61 24.7814px 13.1765px 0 3.93333px, #FA4C61 25.28607px 12.33284px 0 3.86667px, #FA4C61 25.76198px 11.46997px 0 3.8px, #FA4C61 26.2084px 10.58888px 0 3.73333px, #FA4C61 26.62462px 9.69057px 0 3.66667px, #FA4C61 27.01001px 8.77608px 0 3.6px, #FA4C61 27.36392px 7.84648px 0 3.53333px, #FA4C61 27.68577px 6.90284px 0 3.46667px, #FA4C61 27.97502px 5.94627px 0 3.4px, #FA4C61 28.23116px 4.97791px 0 3.33333px, #FA4C61 28.4537px 3.99891px 0 3.26667px, #FA4C61 28.64223px 3.01042px 0 3.2px, #FA4C61 28.79635px 2.01364px 0 3.13333px, #FA4C61 28.91571px 1.00976px 0 3.06667px, #FA4C61 29px 0.0px 0 3px, #FA4C61 29.04896px -1.01441px 0 2.93333px, #FA4C61 29.06237px -2.03224px 0 2.86667px, #FA4C61 29.04004px -3.05223px 0 2.8px, #FA4C61 28.98185px -4.07313px 0 2.73333px, #FA4C61 28.88769px -5.09368px 0 2.66667px, #FA4C61 28.75754px -6.1126px 0 2.6px, #FA4C61 28.59138px -7.12863px 0 2.53333px, #FA4C61 28.38926px -8.14049px 0 2.46667px, #FA4C61 28.15127px -9.1469px 0 2.4px, #FA4C61 27.87755px -10.1466px 0 2.33333px, #FA4C61 27.56827px -11.1383px 0 2.26667px, #FA4C61 27.22365px -12.12075px 0 2.2px, #FA4C61 26.84398px -13.09268px 0 2.13333px, #FA4C61 26.42956px -14.05285px 0 2.06667px, #FA4C61 25.98076px -15.0px 0 2px, #FA4C61 25.49798px -15.93291px 0 1.93333px, #FA4C61 24.98167px -16.85035px 0 1.86667px, #FA4C61 24.43231px -17.75111px 0 1.8px, #FA4C61 23.85046px -18.63402px 0 1.73333px, #FA4C61 23.23668px -19.49789px 0 1.66667px, #FA4C61 22.5916px -20.34157px 0 1.6px, #FA4C61 21.91589px -21.16393px 0 1.53333px, #FA4C61 21.21024px -21.96384px 0 1.46667px, #FA4C61 20.4754px -22.74023px 0 1.4px, #FA4C61 19.71215px -23.49203px 0 1.33333px, #FA4C61 18.92133px -24.2182px 0 1.26667px, #FA4C61 18.10379px -24.91772px 0 1.2px, #FA4C61 17.26042px -25.58963px 0 1.13333px, #FA4C61 16.39217px -26.23295px 0 1.06667px, #FA4C61 15.5px -26.84679px 0 1px, #FA4C61 14.58492px -27.43024px 0 0.93333px, #FA4C61 13.64796px -27.98245px 0 0.86667px, #FA4C61 12.69018px -28.50262px 0 0.8px, #FA4C61 11.7127px -28.98995px 0 0.73333px, #FA4C61 10.71663px -29.4437px 0 0.66667px, #FA4C61 9.70313px -29.86317px 0 0.6px, #FA4C61 8.67339px -30.2477px 0 0.53333px, #FA4C61 7.6286px -30.59666px 0 0.46667px, #FA4C61 6.57001px -30.90946px 0 0.4px, #FA4C61 5.49886px -31.18558px 0 0.33333px, #FA4C61 4.41643px -31.42451px 0 0.26667px, #FA4C61 3.32401px -31.6258px 0 0.2px, #FA4C61 2.22291px -31.78904px 0 0.13333px, #FA4C61 1.11446px -31.91388px 0 0.06667px, #FA4C61 0.0px -32px 0 0px, #FA4C61 -1.11911px -32.04713px 0 -0.06667px, #FA4C61 -2.24151px -32.05506px 0 -0.13333px, #FA4C61 -3.36582px -32.02361px 0 -0.2px, #FA4C61 -4.49065px -31.95265px 0 -0.26667px, #FA4C61 -5.61462px -31.84212px 0 -0.33333px, #FA4C61 -6.73634px -31.69198px 0 -0.4px, #FA4C61 -7.8544px -31.50227px 0 -0.46667px, #FA4C61 -8.9674px -31.27305px 0 -0.53333px, #FA4C61 -10.07395px -31.00444px 0 -0.6px, #FA4C61 -11.17266px -30.69663px 0 -0.66667px, #FA4C61 -12.26212px -30.34982px 0 -0.73333px, #FA4C61 -13.34096px -29.96429px 0 -0.8px, #FA4C61 -14.4078px -29.54036px 0 -0.86667px, #FA4C61 -15.46126px -29.07841px 0 -0.93333px, #FA4C61 -16.5px -28.57884px 0 -1px, #FA4C61 -17.52266px -28.04212px 0 -1.06667px, #FA4C61 -18.52792px -27.46878px 0 -1.13333px, #FA4C61 -19.51447px -26.85936px 0 -1.2px, #FA4C61 -20.48101px -26.21449px 0 -1.26667px, #FA4C61 -21.42625px -25.53481px 0 -1.33333px, #FA4C61 -22.34896px -24.82104px 0 -1.4px, #FA4C61 -23.2479px -24.07391px 0 -1.46667px, #FA4C61 -24.12186px -23.29421px 0 -1.53333px, #FA4C61 -24.96967px -22.48279px 0 -1.6px, #FA4C61 -25.79016px -21.64052px 0 -1.66667px, #FA4C61 -26.58223px -20.76831px 0 -1.73333px, #FA4C61 -27.34477px -19.86714px 0 -1.8px, #FA4C61 -28.07674px -18.938px 0 -1.86667px, #FA4C61 -28.7771px -17.98193px 0 -1.93333px, #FA4C61 -29.44486px -17.0px 0 -2px, #FA4C61 -30.07908px -15.99333px 0 -2.06667px, #FA4C61 -30.67884px -14.96307px 0 -2.13333px, #FA4C61 -31.24325px -13.91039px 0 -2.2px, #FA4C61 -31.7715px -12.83652px 0 -2.26667px, #FA4C61 -32.26278px -11.74269px 0 -2.33333px, #FA4C61 -32.71634px -10.63018px 0 -2.4px, #FA4C61 -33.13149px -9.5003px 0 -2.46667px, #FA4C61 -33.50755px -8.35437px 0 -2.53333px, #FA4C61 -33.84391px -7.19374px 0 -2.6px, #FA4C61 -34.14px -6.0198px 0 -2.66667px, #FA4C61 -34.39531px -4.83395px 0 -2.73333px, #FA4C61 -34.60936px -3.63759px 0 -2.8px, #FA4C61 -34.78173px -2.43218px 0 -2.86667px, #FA4C61 -34.91205px -1.21916px 0 -2.93333px, #FA4C61 -35px 0.0px 0 -3px, #FA4C61 -35.04531px 1.22381px 0 -3.06667px, #FA4C61 -35.04775px 2.45078px 0 -3.13333px, #FA4C61 -35.00717px 3.6794px 0 -3.2px, #FA4C61 -34.92345px 4.90817px 0 -3.26667px, #FA4C61 -34.79654px 6.13557px 0 -3.33333px, #FA4C61 -34.62643px 7.36007px 0 -3.4px, #FA4C61 -34.41316px 8.58016px 0 -3.46667px, #FA4C61 -34.15683px 9.79431px 0 -3.53333px, #FA4C61 -33.85761px 11.001px 0 -3.6px, #FA4C61 -33.5157px 12.19872px 0 -3.66667px, #FA4C61 -33.13137px 13.38594px 0 -3.73333px, #FA4C61 -32.70493px 14.56117px 0 -3.8px, #FA4C61 -32.23675px 15.72291px 0 -3.86667px, #FA4C61 -31.72725px 16.86968px 0 -3.93333px, #FA4C61 -31.17691px 18px 0 -4px, #FA4C61 -30.58627px 19.11242px 0 -4.06667px, #FA4C61 -29.95589px 20.2055px 0 -4.13333px, #FA4C61 -29.28642px 21.27783px 0 -4.2px, #FA4C61 -28.57852px 22.32799px 0 -4.26667px, #FA4C61 -27.83295px 23.35462px 0 -4.33333px, #FA4C61 -27.05047px 24.35635px 0 -4.4px, #FA4C61 -26.23192px 25.33188px 0 -4.46667px, #FA4C61 -25.37819px 26.27988px 0 -4.53333px, #FA4C61 -24.49018px 27.1991px 0 -4.6px, #FA4C61 -23.56888px 28.0883px 0 -4.66667px, #FA4C61 -22.6153px 28.94626px 0 -4.73333px, #FA4C61 -21.6305px 29.77183px 0 -4.8px, #FA4C61 -20.61558px 30.56385px 0 -4.86667px, #FA4C61 -19.57168px 31.32124px 0 -4.93333px, #FA4C61 -18.5px 32.04294px 0 -5px, #FA4C61 -17.40175px 32.72792px 0 -5.06667px, #FA4C61 -16.27818px 33.37522px 0 -5.13333px, #FA4C61 -15.1306px 33.98389px 0 -5.2px, #FA4C61 -13.96034px 34.55305px 0 -5.26667px, #FA4C61 -12.76875px 35.08186px 0 -5.33333px, #FA4C61 -11.55724px 35.56951px 0 -5.4px, #FA4C61 -10.32721px 36.01527px 0 -5.46667px, #FA4C61 -9.08014px 36.41843px 0 -5.53333px, #FA4C61 -7.81748px 36.77835px 0 -5.6px, #FA4C61 -6.54075px 37.09443px 0 -5.66667px, #FA4C61 -5.25147px 37.36612px 0 -5.73333px, #FA4C61 -3.95118px 37.59293px 0 -5.8px, #FA4C61 -2.64145px 37.77443px 0 -5.86667px, #FA4C61 -1.32385px 37.91023px 0 -5.93333px;
+  -webkit-box-shadow: #FA4C61 0px 26px 0 6px, #FA4C61 0.90971px 26.05079px 0 5.93333px, #FA4C61 1.82297px 26.06967px 0 5.86667px, #FA4C61 2.73865px 26.05647px 0 5.8px, #FA4C61 3.65561px 26.01104px 0 5.73333px, #FA4C61 4.57274px 25.93327px 0 5.66667px, #FA4C61 5.48887px 25.8231px 0 5.6px, #FA4C61 6.40287px 25.68049px 0 5.53333px, #FA4C61 7.31358px 25.50548px 0 5.46667px, #FA4C61 8.21985px 25.2981px 0 5.4px, #FA4C61 9.12054px 25.05847px 0 5.33333px, #FA4C61 10.01448px 24.78672px 0 5.26667px, #FA4C61 10.90054px 24.48302px 0 5.2px, #FA4C61 11.77757px 24.1476px 0 5.13333px, #FA4C61 12.64443px 23.78072px 0 5.06667px, #FA4C61 13.5px 23.38269px 0 5px, #FA4C61 14.34315px 22.95384px 0 4.93333px, #FA4C61 15.17277px 22.49455px 0 4.86667px, #FA4C61 15.98776px 22.00526px 0 4.8px, #FA4C61 16.78704px 21.48643px 0 4.73333px, #FA4C61 17.56953px 20.93855px 0 4.66667px, #FA4C61 18.33418px 20.36217px 0 4.6px, #FA4C61 19.07995px 19.75787px 0 4.53333px, #FA4C61 19.80582px 19.12626px 0 4.46667px, #FA4C61 20.5108px 18.468px 0 4.4px, #FA4C61 21.1939px 17.78379px 0 4.33333px, #FA4C61 21.85416px 17.07434px 0 4.26667px, #FA4C61 22.49067px 16.34043px 0 4.2px, #FA4C61 23.10251px 15.58284px 0 4.13333px, #FA4C61 23.68881px 14.80241px 0 4.06667px, #FA4C61 24.24871px 14.0px 0 4px, #FA4C61 24.7814px 13.1765px 0 3.93333px, #FA4C61 25.28607px 12.33284px 0 3.86667px, #FA4C61 25.76198px 11.46997px 0 3.8px, #FA4C61 26.2084px 10.58888px 0 3.73333px, #FA4C61 26.62462px 9.69057px 0 3.66667px, #FA4C61 27.01001px 8.77608px 0 3.6px, #FA4C61 27.36392px 7.84648px 0 3.53333px, #FA4C61 27.68577px 6.90284px 0 3.46667px, #FA4C61 27.97502px 5.94627px 0 3.4px, #FA4C61 28.23116px 4.97791px 0 3.33333px, #FA4C61 28.4537px 3.99891px 0 3.26667px, #FA4C61 28.64223px 3.01042px 0 3.2px, #FA4C61 28.79635px 2.01364px 0 3.13333px, #FA4C61 28.91571px 1.00976px 0 3.06667px, #FA4C61 29px 0.0px 0 3px, #FA4C61 29.04896px -1.01441px 0 2.93333px, #FA4C61 29.06237px -2.03224px 0 2.86667px, #FA4C61 29.04004px -3.05223px 0 2.8px, #FA4C61 28.98185px -4.07313px 0 2.73333px, #FA4C61 28.88769px -5.09368px 0 2.66667px, #FA4C61 28.75754px -6.1126px 0 2.6px, #FA4C61 28.59138px -7.12863px 0 2.53333px, #FA4C61 28.38926px -8.14049px 0 2.46667px, #FA4C61 28.15127px -9.1469px 0 2.4px, #FA4C61 27.87755px -10.1466px 0 2.33333px, #FA4C61 27.56827px -11.1383px 0 2.26667px, #FA4C61 27.22365px -12.12075px 0 2.2px, #FA4C61 26.84398px -13.09268px 0 2.13333px, #FA4C61 26.42956px -14.05285px 0 2.06667px, #FA4C61 25.98076px -15.0px 0 2px, #FA4C61 25.49798px -15.93291px 0 1.93333px, #FA4C61 24.98167px -16.85035px 0 1.86667px, #FA4C61 24.43231px -17.75111px 0 1.8px, #FA4C61 23.85046px -18.63402px 0 1.73333px, #FA4C61 23.23668px -19.49789px 0 1.66667px, #FA4C61 22.5916px -20.34157px 0 1.6px, #FA4C61 21.91589px -21.16393px 0 1.53333px, #FA4C61 21.21024px -21.96384px 0 1.46667px, #FA4C61 20.4754px -22.74023px 0 1.4px, #FA4C61 19.71215px -23.49203px 0 1.33333px, #FA4C61 18.92133px -24.2182px 0 1.26667px, #FA4C61 18.10379px -24.91772px 0 1.2px, #FA4C61 17.26042px -25.58963px 0 1.13333px, #FA4C61 16.39217px -26.23295px 0 1.06667px, #FA4C61 15.5px -26.84679px 0 1px, #FA4C61 14.58492px -27.43024px 0 0.93333px, #FA4C61 13.64796px -27.98245px 0 0.86667px, #FA4C61 12.69018px -28.50262px 0 0.8px, #FA4C61 11.7127px -28.98995px 0 0.73333px, #FA4C61 10.71663px -29.4437px 0 0.66667px, #FA4C61 9.70313px -29.86317px 0 0.6px, #FA4C61 8.67339px -30.2477px 0 0.53333px, #FA4C61 7.6286px -30.59666px 0 0.46667px, #FA4C61 6.57001px -30.90946px 0 0.4px, #FA4C61 5.49886px -31.18558px 0 0.33333px, #FA4C61 4.41643px -31.42451px 0 0.26667px, #FA4C61 3.32401px -31.6258px 0 0.2px, #FA4C61 2.22291px -31.78904px 0 0.13333px, #FA4C61 1.11446px -31.91388px 0 0.06667px, #FA4C61 0.0px -32px 0 0px, #FA4C61 -1.11911px -32.04713px 0 -0.06667px, #FA4C61 -2.24151px -32.05506px 0 -0.13333px, #FA4C61 -3.36582px -32.02361px 0 -0.2px, #FA4C61 -4.49065px -31.95265px 0 -0.26667px, #FA4C61 -5.61462px -31.84212px 0 -0.33333px, #FA4C61 -6.73634px -31.69198px 0 -0.4px, #FA4C61 -7.8544px -31.50227px 0 -0.46667px, #FA4C61 -8.9674px -31.27305px 0 -0.53333px, #FA4C61 -10.07395px -31.00444px 0 -0.6px, #FA4C61 -11.17266px -30.69663px 0 -0.66667px, #FA4C61 -12.26212px -30.34982px 0 -0.73333px, #FA4C61 -13.34096px -29.96429px 0 -0.8px, #FA4C61 -14.4078px -29.54036px 0 -0.86667px, #FA4C61 -15.46126px -29.07841px 0 -0.93333px, #FA4C61 -16.5px -28.57884px 0 -1px, #FA4C61 -17.52266px -28.04212px 0 -1.06667px, #FA4C61 -18.52792px -27.46878px 0 -1.13333px, #FA4C61 -19.51447px -26.85936px 0 -1.2px, #FA4C61 -20.48101px -26.21449px 0 -1.26667px, #FA4C61 -21.42625px -25.53481px 0 -1.33333px, #FA4C61 -22.34896px -24.82104px 0 -1.4px, #FA4C61 -23.2479px -24.07391px 0 -1.46667px, #FA4C61 -24.12186px -23.29421px 0 -1.53333px, #FA4C61 -24.96967px -22.48279px 0 -1.6px, #FA4C61 -25.79016px -21.64052px 0 -1.66667px, #FA4C61 -26.58223px -20.76831px 0 -1.73333px, #FA4C61 -27.34477px -19.86714px 0 -1.8px, #FA4C61 -28.07674px -18.938px 0 -1.86667px, #FA4C61 -28.7771px -17.98193px 0 -1.93333px, #FA4C61 -29.44486px -17.0px 0 -2px, #FA4C61 -30.07908px -15.99333px 0 -2.06667px, #FA4C61 -30.67884px -14.96307px 0 -2.13333px, #FA4C61 -31.24325px -13.91039px 0 -2.2px, #FA4C61 -31.7715px -12.83652px 0 -2.26667px, #FA4C61 -32.26278px -11.74269px 0 -2.33333px, #FA4C61 -32.71634px -10.63018px 0 -2.4px, #FA4C61 -33.13149px -9.5003px 0 -2.46667px, #FA4C61 -33.50755px -8.35437px 0 -2.53333px, #FA4C61 -33.84391px -7.19374px 0 -2.6px, #FA4C61 -34.14px -6.0198px 0 -2.66667px, #FA4C61 -34.39531px -4.83395px 0 -2.73333px, #FA4C61 -34.60936px -3.63759px 0 -2.8px, #FA4C61 -34.78173px -2.43218px 0 -2.86667px, #FA4C61 -34.91205px -1.21916px 0 -2.93333px, #FA4C61 -35px 0.0px 0 -3px, #FA4C61 -35.04531px 1.22381px 0 -3.06667px, #FA4C61 -35.04775px 2.45078px 0 -3.13333px, #FA4C61 -35.00717px 3.6794px 0 -3.2px, #FA4C61 -34.92345px 4.90817px 0 -3.26667px, #FA4C61 -34.79654px 6.13557px 0 -3.33333px, #FA4C61 -34.62643px 7.36007px 0 -3.4px, #FA4C61 -34.41316px 8.58016px 0 -3.46667px, #FA4C61 -34.15683px 9.79431px 0 -3.53333px, #FA4C61 -33.85761px 11.001px 0 -3.6px, #FA4C61 -33.5157px 12.19872px 0 -3.66667px, #FA4C61 -33.13137px 13.38594px 0 -3.73333px, #FA4C61 -32.70493px 14.56117px 0 -3.8px, #FA4C61 -32.23675px 15.72291px 0 -3.86667px, #FA4C61 -31.72725px 16.86968px 0 -3.93333px, #FA4C61 -31.17691px 18px 0 -4px, #FA4C61 -30.58627px 19.11242px 0 -4.06667px, #FA4C61 -29.95589px 20.2055px 0 -4.13333px, #FA4C61 -29.28642px 21.27783px 0 -4.2px, #FA4C61 -28.57852px 22.32799px 0 -4.26667px, #FA4C61 -27.83295px 23.35462px 0 -4.33333px, #FA4C61 -27.05047px 24.35635px 0 -4.4px, #FA4C61 -26.23192px 25.33188px 0 -4.46667px, #FA4C61 -25.37819px 26.27988px 0 -4.53333px, #FA4C61 -24.49018px 27.1991px 0 -4.6px, #FA4C61 -23.56888px 28.0883px 0 -4.66667px, #FA4C61 -22.6153px 28.94626px 0 -4.73333px, #FA4C61 -21.6305px 29.77183px 0 -4.8px, #FA4C61 -20.61558px 30.56385px 0 -4.86667px, #FA4C61 -19.57168px 31.32124px 0 -4.93333px, #FA4C61 -18.5px 32.04294px 0 -5px, #FA4C61 -17.40175px 32.72792px 0 -5.06667px, #FA4C61 -16.27818px 33.37522px 0 -5.13333px, #FA4C61 -15.1306px 33.98389px 0 -5.2px, #FA4C61 -13.96034px 34.55305px 0 -5.26667px, #FA4C61 -12.76875px 35.08186px 0 -5.33333px, #FA4C61 -11.55724px 35.56951px 0 -5.4px, #FA4C61 -10.32721px 36.01527px 0 -5.46667px, #FA4C61 -9.08014px 36.41843px 0 -5.53333px, #FA4C61 -7.81748px 36.77835px 0 -5.6px, #FA4C61 -6.54075px 37.09443px 0 -5.66667px, #FA4C61 -5.25147px 37.36612px 0 -5.73333px, #FA4C61 -3.95118px 37.59293px 0 -5.8px, #FA4C61 -2.64145px 37.77443px 0 -5.86667px, #FA4C61 -1.32385px 37.91023px 0 -5.93333px;
+  box-shadow: #FA4C61 0px 26px 0 6px, #FA4C61 0.90971px 26.05079px 0 5.93333px, #FA4C61 1.82297px 26.06967px 0 5.86667px, #FA4C61 2.73865px 26.05647px 0 5.8px, #FA4C61 3.65561px 26.01104px 0 5.73333px, #FA4C61 4.57274px 25.93327px 0 5.66667px, #FA4C61 5.48887px 25.8231px 0 5.6px, #FA4C61 6.40287px 25.68049px 0 5.53333px, #FA4C61 7.31358px 25.50548px 0 5.46667px, #FA4C61 8.21985px 25.2981px 0 5.4px, #FA4C61 9.12054px 25.05847px 0 5.33333px, #FA4C61 10.01448px 24.78672px 0 5.26667px, #FA4C61 10.90054px 24.48302px 0 5.2px, #FA4C61 11.77757px 24.1476px 0 5.13333px, #FA4C61 12.64443px 23.78072px 0 5.06667px, #FA4C61 13.5px 23.38269px 0 5px, #FA4C61 14.34315px 22.95384px 0 4.93333px, #FA4C61 15.17277px 22.49455px 0 4.86667px, #FA4C61 15.98776px 22.00526px 0 4.8px, #FA4C61 16.78704px 21.48643px 0 4.73333px, #FA4C61 17.56953px 20.93855px 0 4.66667px, #FA4C61 18.33418px 20.36217px 0 4.6px, #FA4C61 19.07995px 19.75787px 0 4.53333px, #FA4C61 19.80582px 19.12626px 0 4.46667px, #FA4C61 20.5108px 18.468px 0 4.4px, #FA4C61 21.1939px 17.78379px 0 4.33333px, #FA4C61 21.85416px 17.07434px 0 4.26667px, #FA4C61 22.49067px 16.34043px 0 4.2px, #FA4C61 23.10251px 15.58284px 0 4.13333px, #FA4C61 23.68881px 14.80241px 0 4.06667px, #FA4C61 24.24871px 14.0px 0 4px, #FA4C61 24.7814px 13.1765px 0 3.93333px, #FA4C61 25.28607px 12.33284px 0 3.86667px, #FA4C61 25.76198px 11.46997px 0 3.8px, #FA4C61 26.2084px 10.58888px 0 3.73333px, #FA4C61 26.62462px 9.69057px 0 3.66667px, #FA4C61 27.01001px 8.77608px 0 3.6px, #FA4C61 27.36392px 7.84648px 0 3.53333px, #FA4C61 27.68577px 6.90284px 0 3.46667px, #FA4C61 27.97502px 5.94627px 0 3.4px, #FA4C61 28.23116px 4.97791px 0 3.33333px, #FA4C61 28.4537px 3.99891px 0 3.26667px, #FA4C61 28.64223px 3.01042px 0 3.2px, #FA4C61 28.79635px 2.01364px 0 3.13333px, #FA4C61 28.91571px 1.00976px 0 3.06667px, #FA4C61 29px 0.0px 0 3px, #FA4C61 29.04896px -1.01441px 0 2.93333px, #FA4C61 29.06237px -2.03224px 0 2.86667px, #FA4C61 29.04004px -3.05223px 0 2.8px, #FA4C61 28.98185px -4.07313px 0 2.73333px, #FA4C61 28.88769px -5.09368px 0 2.66667px, #FA4C61 28.75754px -6.1126px 0 2.6px, #FA4C61 28.59138px -7.12863px 0 2.53333px, #FA4C61 28.38926px -8.14049px 0 2.46667px, #FA4C61 28.15127px -9.1469px 0 2.4px, #FA4C61 27.87755px -10.1466px 0 2.33333px, #FA4C61 27.56827px -11.1383px 0 2.26667px, #FA4C61 27.22365px -12.12075px 0 2.2px, #FA4C61 26.84398px -13.09268px 0 2.13333px, #FA4C61 26.42956px -14.05285px 0 2.06667px, #FA4C61 25.98076px -15.0px 0 2px, #FA4C61 25.49798px -15.93291px 0 1.93333px, #FA4C61 24.98167px -16.85035px 0 1.86667px, #FA4C61 24.43231px -17.75111px 0 1.8px, #FA4C61 23.85046px -18.63402px 0 1.73333px, #FA4C61 23.23668px -19.49789px 0 1.66667px, #FA4C61 22.5916px -20.34157px 0 1.6px, #FA4C61 21.91589px -21.16393px 0 1.53333px, #FA4C61 21.21024px -21.96384px 0 1.46667px, #FA4C61 20.4754px -22.74023px 0 1.4px, #FA4C61 19.71215px -23.49203px 0 1.33333px, #FA4C61 18.92133px -24.2182px 0 1.26667px, #FA4C61 18.10379px -24.91772px 0 1.2px, #FA4C61 17.26042px -25.58963px 0 1.13333px, #FA4C61 16.39217px -26.23295px 0 1.06667px, #FA4C61 15.5px -26.84679px 0 1px, #FA4C61 14.58492px -27.43024px 0 0.93333px, #FA4C61 13.64796px -27.98245px 0 0.86667px, #FA4C61 12.69018px -28.50262px 0 0.8px, #FA4C61 11.7127px -28.98995px 0 0.73333px, #FA4C61 10.71663px -29.4437px 0 0.66667px, #FA4C61 9.70313px -29.86317px 0 0.6px, #FA4C61 8.67339px -30.2477px 0 0.53333px, #FA4C61 7.6286px -30.59666px 0 0.46667px, #FA4C61 6.57001px -30.90946px 0 0.4px, #FA4C61 5.49886px -31.18558px 0 0.33333px, #FA4C61 4.41643px -31.42451px 0 0.26667px, #FA4C61 3.32401px -31.6258px 0 0.2px, #FA4C61 2.22291px -31.78904px 0 0.13333px, #FA4C61 1.11446px -31.91388px 0 0.06667px, #FA4C61 0.0px -32px 0 0px, #FA4C61 -1.11911px -32.04713px 0 -0.06667px, #FA4C61 -2.24151px -32.05506px 0 -0.13333px, #FA4C61 -3.36582px -32.02361px 0 -0.2px, #FA4C61 -4.49065px -31.95265px 0 -0.26667px, #FA4C61 -5.61462px -31.84212px 0 -0.33333px, #FA4C61 -6.73634px -31.69198px 0 -0.4px, #FA4C61 -7.8544px -31.50227px 0 -0.46667px, #FA4C61 -8.9674px -31.27305px 0 -0.53333px, #FA4C61 -10.07395px -31.00444px 0 -0.6px, #FA4C61 -11.17266px -30.69663px 0 -0.66667px, #FA4C61 -12.26212px -30.34982px 0 -0.73333px, #FA4C61 -13.34096px -29.96429px 0 -0.8px, #FA4C61 -14.4078px -29.54036px 0 -0.86667px, #FA4C61 -15.46126px -29.07841px 0 -0.93333px, #FA4C61 -16.5px -28.57884px 0 -1px, #FA4C61 -17.52266px -28.04212px 0 -1.06667px, #FA4C61 -18.52792px -27.46878px 0 -1.13333px, #FA4C61 -19.51447px -26.85936px 0 -1.2px, #FA4C61 -20.48101px -26.21449px 0 -1.26667px, #FA4C61 -21.42625px -25.53481px 0 -1.33333px, #FA4C61 -22.34896px -24.82104px 0 -1.4px, #FA4C61 -23.2479px -24.07391px 0 -1.46667px, #FA4C61 -24.12186px -23.29421px 0 -1.53333px, #FA4C61 -24.96967px -22.48279px 0 -1.6px, #FA4C61 -25.79016px -21.64052px 0 -1.66667px, #FA4C61 -26.58223px -20.76831px 0 -1.73333px, #FA4C61 -27.34477px -19.86714px 0 -1.8px, #FA4C61 -28.07674px -18.938px 0 -1.86667px, #FA4C61 -28.7771px -17.98193px 0 -1.93333px, #FA4C61 -29.44486px -17.0px 0 -2px, #FA4C61 -30.07908px -15.99333px 0 -2.06667px, #FA4C61 -30.67884px -14.96307px 0 -2.13333px, #FA4C61 -31.24325px -13.91039px 0 -2.2px, #FA4C61 -31.7715px -12.83652px 0 -2.26667px, #FA4C61 -32.26278px -11.74269px 0 -2.33333px, #FA4C61 -32.71634px -10.63018px 0 -2.4px, #FA4C61 -33.13149px -9.5003px 0 -2.46667px, #FA4C61 -33.50755px -8.35437px 0 -2.53333px, #FA4C61 -33.84391px -7.19374px 0 -2.6px, #FA4C61 -34.14px -6.0198px 0 -2.66667px, #FA4C61 -34.39531px -4.83395px 0 -2.73333px, #FA4C61 -34.60936px -3.63759px 0 -2.8px, #FA4C61 -34.78173px -2.43218px 0 -2.86667px, #FA4C61 -34.91205px -1.21916px 0 -2.93333px, #FA4C61 -35px 0.0px 0 -3px, #FA4C61 -35.04531px 1.22381px 0 -3.06667px, #FA4C61 -35.04775px 2.45078px 0 -3.13333px, #FA4C61 -35.00717px 3.6794px 0 -3.2px, #FA4C61 -34.92345px 4.90817px 0 -3.26667px, #FA4C61 -34.79654px 6.13557px 0 -3.33333px, #FA4C61 -34.62643px 7.36007px 0 -3.4px, #FA4C61 -34.41316px 8.58016px 0 -3.46667px, #FA4C61 -34.15683px 9.79431px 0 -3.53333px, #FA4C61 -33.85761px 11.001px 0 -3.6px, #FA4C61 -33.5157px 12.19872px 0 -3.66667px, #FA4C61 -33.13137px 13.38594px 0 -3.73333px, #FA4C61 -32.70493px 14.56117px 0 -3.8px, #FA4C61 -32.23675px 15.72291px 0 -3.86667px, #FA4C61 -31.72725px 16.86968px 0 -3.93333px, #FA4C61 -31.17691px 18px 0 -4px, #FA4C61 -30.58627px 19.11242px 0 -4.06667px, #FA4C61 -29.95589px 20.2055px 0 -4.13333px, #FA4C61 -29.28642px 21.27783px 0 -4.2px, #FA4C61 -28.57852px 22.32799px 0 -4.26667px, #FA4C61 -27.83295px 23.35462px 0 -4.33333px, #FA4C61 -27.05047px 24.35635px 0 -4.4px, #FA4C61 -26.23192px 25.33188px 0 -4.46667px, #FA4C61 -25.37819px 26.27988px 0 -4.53333px, #FA4C61 -24.49018px 27.1991px 0 -4.6px, #FA4C61 -23.56888px 28.0883px 0 -4.66667px, #FA4C61 -22.6153px 28.94626px 0 -4.73333px, #FA4C61 -21.6305px 29.77183px 0 -4.8px, #FA4C61 -20.61558px 30.56385px 0 -4.86667px, #FA4C61 -19.57168px 31.32124px 0 -4.93333px, #FA4C61 -18.5px 32.04294px 0 -5px, #FA4C61 -17.40175px 32.72792px 0 -5.06667px, #FA4C61 -16.27818px 33.37522px 0 -5.13333px, #FA4C61 -15.1306px 33.98389px 0 -5.2px, #FA4C61 -13.96034px 34.55305px 0 -5.26667px, #FA4C61 -12.76875px 35.08186px 0 -5.33333px, #FA4C61 -11.55724px 35.56951px 0 -5.4px, #FA4C61 -10.32721px 36.01527px 0 -5.46667px, #FA4C61 -9.08014px 36.41843px 0 -5.53333px, #FA4C61 -7.81748px 36.77835px 0 -5.6px, #FA4C61 -6.54075px 37.09443px 0 -5.66667px, #FA4C61 -5.25147px 37.36612px 0 -5.73333px, #FA4C61 -3.95118px 37.59293px 0 -5.8px, #FA4C61 -2.64145px 37.77443px 0 -5.86667px, #FA4C61 -1.32385px 37.91023px 0 -5.93333px;
+  -moz-animation: whirly-loader 1.25s infinite linear;
+  -webkit-animation: whirly-loader 1.25s infinite linear;
+  animation: whirly-loader 1.25s infinite linear;
+  -moz-transform-origin: 50% 50%;
+  -ms-transform-origin: 50% 50%;
+  -webkit-transform-origin: 50% 50%;
+  transform-origin: 50% 50%;
+}
diff --git a/public/assets/css/global/custom.css b/public/assets/css/global/custom.css
new file mode 100644
index 0000000..774318f
--- /dev/null
+++ b/public/assets/css/global/custom.css
@@ -0,0 +1,291 @@
+/* here you can put your own css to customize and override the theme */
+/*.text_filter {
+  letter-spacing:2px;
+  font-style:italic;
+  color:#999;
+}*/
+
+/*.toolbar {
+    float: right;
+}*/
+
+/***
+Rounded Portlets
+***/
+/*
+.portlet {
+	border-radius: 4px !important;
+}
+
+.portlet .portlet-title {
+	border-radius: 4px 4px 0px 0px !important;
+}
+
+.portlet .portlet-body,
+.portlet .portlet-body .form-actions  {
+	border-radius: 0px 0px 4px 4px !important;
+}
+*/
+
+/*
+Change Quick Sidebar Width
+*/
+
+/*
+.page-quick-sidebar-wrapper {
+  right: -370px;
+  width: 370px;
+}
+
+.page-quick-sidebar-open.page-quick-sidebar-push-content .page-sidebar-wrapper {
+  margin-left: -370px;
+}
+
+.page-quick-sidebar-open.page-quick-sidebar-push-content .page-footer {
+  margin-right: 370px;
+  margin-left: -370px;
+}
+
+.page-sidebar-reversed.page-quick-sidebar-open.page-quick-sidebar-push-content .page-sidebar-wrapper {
+  margin-right: 370px;
+}
+
+.page-quick-sidebar-open.page-quick-sidebar-push-content.page-quick-sidebar-full-height .page-header {
+  margin-left: -370px;
+}
+
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-list {
+  width: 370px !important;
+}
+
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item {
+  width: 370px !important;
+  margin-left: 370px;
+}
+
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-list {
+  margin-left: -370px;
+}
+*/
+
+.float-right{
+  float: right;
+}
+
+.checker {
+  width: 19px;
+  height: 19px;
+}
+
+.collapse.am-collapse {
+  animation-duration: .3s;
+  animation-timing-function: ease;
+  animation-fill-mode: backwards;
+  overflow: hidden;
+  &.in-remove {
+    animation-name: collapse;
+    display: block;
+  }
+  &.in-add {
+    animation-name: expand;
+  }
+}
+
+.message-info {
+  float: right;
+  color: lightgrey;
+  margin-right: 5px;
+}
+
+.centered-td {
+  text-align: center;
+}
+
+[ui-view].ng-enter{
+-webkit-animation: fadeInUpm .5s;
+animation: fadeInUpm .5s;
+}
+
+.steps-indicator, .steps{
+  padding-bottom: 20px !important;
+}
+
+.ui-sortable-handle,.ui-sortable{
+  cursor: move;
+}
+
+.step .btn:not(.ui-select-toggle,.remove-condition), .mbottom20{
+  margin-bottom: 10px;
+}
+
+button.close {
+    padding: 0;
+    cursor: pointer;
+    background: 0 0;
+    border: 0;
+    -webkit-appearance: none;
+}
+.close {
+    float: right;
+    font-size: 21px;
+    font-weight: 700;
+    line-height: 1;
+    color: #000;
+    text-shadow: 0 1px 0 #fff;
+    opacity: .2;
+    filter: alpha(opacity=20);
+}
+
+.alert {
+  padding: 15px !important;
+  margin-bottom: 20px !important;
+  border: 1px solid transparent !important;
+  border-radius: 4px !important;
+}
+.alert h4 {
+  margin-top: 0 !important;
+  color: inherit !important;
+}
+.alert .alert-link {
+  font-weight: bold !important;
+}
+.alert > p,
+.alert > ul {
+  margin-bottom: 0 !important;
+}
+.alert > p + p {
+  margin-top: 5px !important;
+}
+.alert-dismissable,
+.alert-dismissible {
+  padding-right: 35px !important;
+}
+.alert-dismissable .close,
+.alert-dismissible .close {
+  position: relative !important;
+  top: -2px !important;
+  right: -21px !important;
+  color: inherit !important;
+}
+.alert-success {
+  background-color: #dff0d8 !important;
+  border-color: #d6e9c6 !important;
+  color: #3c763d !important;
+}
+.alert-success hr {
+  border-top-color: #c9e2b3 !important;
+}
+.alert-success .alert-link {
+  color: #2b542c !important;
+}
+.alert-info {
+  background-color: #d9edf7 !important;
+  border-color: #bce8f1 !important;
+  color: #31708f !important;
+}
+.alert-info hr {
+  border-top-color: #a6e1ec !important;
+}
+.alert-info .alert-link {
+  color: #245269 !important;
+}
+.alert-warning {
+  background-color: #fcf8e3 !important;
+  border-color: #faebcc !important;
+  color: #8a6d3b !important;
+}
+.alert-warning hr {
+  border-top-color: #f7e1b5 !important;
+}
+.alert-warning .alert-link {
+  color: #66512c !important;
+}
+.alert-danger {
+  background-color: #f2dede !important;
+  border-color: #ebccd1 !important;
+  color: #a94442 !important;
+}
+.alert-danger hr {
+  border-top-color: #e4b9c0 !important;
+}
+.alert-danger .alert-link {
+  color: #843534 !important;
+}
+
+.alert .close{
+text-indent: inherit !important;
+background-image: none !important;
+width: auto !important;
+}
+
+.page-404 {
+  text-align: center;
+}
+
+.page-404 .number {
+  position: relative;
+  top: 35px;
+  display: inline-block;
+  letter-spacing: -10px;
+  margin-top: 0px;
+  margin-bottom: 10px;
+  line-height: 128px;
+  font-size: 128px;
+  font-weight: 300;
+  color: #7bbbd6;
+  text-align: right;
+}
+
+.page-404 .details {
+  margin-left: 40px;
+  display: inline-block;
+  padding-top: 0px;
+  text-align: left;
+}
+
+.sounds-title-icon{
+  font-size: 17px;
+}
+
+.ui-select-multiple input.ui-select-search {
+  width: 100% !important;
+}
+
+.over-topbar, .modal.fade {
+  z-index: 9996 !important;
+}
+
+.list-group-item-custom {
+  border: none;
+}
+
+.pointer-cursor{
+  cursor: pointer;
+}
+
+.select-group-father{
+  font-weight:bold !important;
+}
+
+.select-group-son{
+  font-style: italic !important;
+}
+
+@media (max-height: 908px) {
+  .modal-body-scroll{
+    max-height: 325px;
+    overflow-y: scroll;
+  }
+}
+
+.widget .dashboard-stat{
+  margin-bottom:0px !important;
+}
+
+.widget .panel-body{
+  padding: 0px;
+}
+
+.left-margin{
+  margin-left: 20px;
+}
diff --git a/public/assets/css/global/darkblue.css b/public/assets/css/global/darkblue.css
new file mode 100644
index 0000000..cde39bb
--- /dev/null
+++ b/public/assets/css/global/darkblue.css
@@ -0,0 +1,921 @@
+/***********
+Page Header
+***********/
+/* Header search bar, toggler button & top menu */
+.page-header.navbar {
+  background-color: #2b3643;
+  /* Top notification menu/bar */
+  /* Header seaech box */
+  /* Toggler button for sidebar expand/collapse and responsive sidebar menu */
+}
+.page-header.navbar .top-menu .navbar-nav {
+  /* Extended Dropdowns */
+  /* Notification */
+  /* Inbox */
+  /* Tasks */
+  /* User */
+  /* Language */
+  /* Dark version */
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle > i {
+  color: #79869a;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle .badge.badge-default {
+  background-color: #1caf9a;
+  color: #ffffff;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle:hover {
+  background-color: #3f4f62;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle:hover > i {
+  color: #a4aebb;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown.open .dropdown-toggle {
+  background-color: #3f4f62;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown.open .dropdown-toggle > i {
+  color: #a4aebb;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu {
+  border-color: #e7eaf0;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu:after {
+  border-bottom-color: #eaedf2;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external {
+  background: #eaedf2;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > h3 {
+  color: #62878f;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > a {
+  color: #5b9bd1;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > a:hover {
+  color: #3175af;
+  text-decoration: none;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li > a {
+  border-bottom: 1px solid #EFF2F6 !important;
+  color: #888888;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li > a:hover {
+  background: #f8f9fa;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li > a .time {
+  background: #f1f1f1;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li > a:hover .time {
+  background: #e4e4e4;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-toggle > .circle {
+  background-color: #1caf9a;
+  color: #ffffff;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-toggle > .corner {
+  border-color: transparent transparent transparent #1caf9a;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox .dropdown-menu .dropdown-menu-list .subject .from {
+  color: #5b9bd1;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list .progress {
+  background-color: #dfe2e9;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-user > .dropdown-toggle > .username {
+  color: #c6cfda;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-user > .dropdown-toggle > i {
+  color: #c6cfda;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-user > .dropdown-menu {
+  width: 195px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-toggle > .langname {
+  color: #c6cfda;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu {
+  background: #3f4f62;
+  border: 0;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu:after {
+  border-bottom-color: #3f4f62;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu > li.external {
+  background: #2f3b49;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu > li.external > h3 {
+  color: #adbaca;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu > li.external > a:hover {
+  color: #87b6dd;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li a,
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu .dropdown-menu-list > li a {
+  color: #bcc7d4;
+  border-bottom: 1px solid #4b5e75 !important;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li a > i,
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu .dropdown-menu-list > li a > i {
+  color: #9dadc0;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li a:hover,
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu .dropdown-menu-list > li a:hover {
+  background: #47596e;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li a {
+  border-bottom: 0 !important;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-dark .dropdown-menu.dropdown-menu-default > li.divider {
+  background: #4b5e75;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification.dropdown-dark .dropdown-menu .dropdown-menu-list > li > a .time {
+  background: #354353;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification.dropdown-dark .dropdown-menu .dropdown-menu-list > li > a:hover .time {
+  background: #2b3643;
+}
+.page-header.navbar .search-form {
+  background: #232c37;
+}
+.page-header.navbar .search-form:hover {
+  background: #3f4f62;
+}
+.page-header.navbar .search-form .input-group .form-control {
+  color: #959fad;
+}
+.page-header.navbar .search-form .input-group .form-control::-moz-placeholder {
+  color: #929cab;
+  opacity: 1;
+}
+.page-header.navbar .search-form .input-group .form-control:-ms-input-placeholder {
+  color: #929cab;
+}
+.page-header.navbar .search-form .input-group .form-control::-webkit-input-placeholder {
+  color: #929cab;
+}
+.page-header.navbar .search-form .input-group .input-group-btn .btn.submit > i {
+  color: #959fad;
+}
+.page-header.navbar .search-form.open {
+  background: #3f4f62;
+}
+.page-header.navbar .menu-toggler {
+  background-image: url(../../images/sidebar_toggler_icon_darkblue.png);
+}
+
+/* Default Horizontal Menu */
+.page-header.navbar {
+  /* Default Mega Menu */
+  /* Light Mega Menu */
+}
+.page-header.navbar .hor-menu .navbar-nav {
+  /* Mega menu content */
+  /* Classic menu */
+}
+.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu {
+  box-shadow: 5px 5px rgba(63, 79, 98, 0.2);
+}
+.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > h3 {
+  color: #c6cfda;
+}
+.page-header.navbar .hor-menu .navbar-nav > li > a {
+  color: #c6cfda;
+}
+.page-header.navbar .hor-menu .navbar-nav > li > a > i {
+  color: #788ea8;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.open > a,
+.page-header.navbar .hor-menu .navbar-nav > li > a:hover {
+  color: #d5dce4;
+  background: #3f4f62 !important;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.open > a > i,
+.page-header.navbar .hor-menu .navbar-nav > li > a:hover > i {
+  color: #889bb2;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.active > a,
+.page-header.navbar .hor-menu .navbar-nav > li.active > a, .page-header.navbar .hor-menu .navbar-nav > li.current > a,
+.page-header.navbar .hor-menu .navbar-nav > li.current > a {
+  color: white;
+  background: #1caf9a !important;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.active > a > i,
+.page-header.navbar .hor-menu .navbar-nav > li.active > a > i, .page-header.navbar .hor-menu .navbar-nav > li.current > a > i,
+.page-header.navbar .hor-menu .navbar-nav > li.current > a > i {
+  color: #788ea8;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.active .selected, .page-header.navbar .hor-menu .navbar-nav > li.current .selected {
+  border-top: 6px solid #1caf9a;
+}
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu {
+  box-shadow: 5px 5px rgba(63, 79, 98, 0.2);
+  background: #3f4f62;
+}
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a {
+  color: #c6cfda;
+}
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a > i {
+  color: #c6cfda;
+}
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li:hover > a {
+  color: #f1f3f6;
+  background: #47596e;
+}
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li:hover > a > i {
+  color: #f1f3f6;
+}
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.active > a,
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.active > a:hover, .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.current > a,
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.current > a:hover {
+  color: #f1f3f6;
+  background: #47596e;
+}
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.active > a > i,
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.active > a:hover > i, .page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.current > a > i,
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.current > a:hover > i {
+  color: #f1f3f6;
+}
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li.divider {
+  background-color: #495c72;
+}
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-submenu > a:after {
+  color: #c6cfda;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav {
+  /* Mega menu content */
+  /* Classic menu */
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.mega-menu-dropdown > .dropdown-menu {
+  box-shadow: 5px 5px rgba(102, 102, 102, 0.1);
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > h3 {
+  color: #666;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > a {
+  color: #c6cfda;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > a > i {
+  color: #788ea8;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > a:hover {
+  color: #d5dce4;
+  background: #3f4f62;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > a:hover > i {
+  color: #889bb2;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.open > a {
+  color: #333 !important;
+  background: white !important;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.open > a > i {
+  color: #333 !important;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.active > a,
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.active > a:hover, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.current > a,
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.current > a:hover {
+  color: white;
+  background: #1caf9a;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.active > a > i,
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.active > a:hover > i, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.current > a > i,
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li.current > a:hover > i {
+  color: #788ea8;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu {
+  box-shadow: 5px 5px rgba(102, 102, 102, 0.1);
+  background: white;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li > a {
+  color: #000;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li > a > i {
+  color: #888;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li:hover > a {
+  color: #000;
+  background: #f2f2f7;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li:hover > a > i {
+  color: #666;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.active > a,
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.active > a:hover, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.current > a,
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.current > a:hover {
+  color: #000;
+  background: #f2f2f7;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.active > a > i,
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.active > a:hover > i, .page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.current > a > i,
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.current > a:hover > i {
+  color: #666;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu li.divider {
+  background-color: #f2f2f7;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li .dropdown-menu {
+  border: 1px solid #efeff5;
+}
+.page-header.navbar .hor-menu.hor-menu-light .navbar-nav > li > .dropdown-menu {
+  border-top: 0;
+}
+
+/* Page sidebar */
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover,
+.page-sidebar {
+  background-color: #364150;
+  /* Default sidebar */
+  /* light sidebar */
+  /* Sidebar search */
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu,
+.page-sidebar .page-sidebar-menu {
+  /* 1st level links */
+  /* All links */
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a,
+.page-sidebar .page-sidebar-menu > li > a {
+  border-top: 1px solid #3d4957;
+  color: #b4bcc8;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i,
+.page-sidebar .page-sidebar-menu > li > a > i {
+  color: #606C7D;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i[class^="icon-"],
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i[class*="icon-"],
+.page-sidebar .page-sidebar-menu > li > a > i[class^="icon-"],
+.page-sidebar .page-sidebar-menu > li > a > i[class*="icon-"] {
+  color: #6b788b;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > .arrow.open:before,
+.page-sidebar .page-sidebar-menu > li > a > .arrow:before,
+.page-sidebar .page-sidebar-menu > li > a > .arrow.open:before {
+  color: #606C7D;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.heading > h3,
+.page-sidebar .page-sidebar-menu > li.heading > h3 {
+  color: #708096;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:hover > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a,
+.page-sidebar .page-sidebar-menu > li:hover > a,
+.page-sidebar .page-sidebar-menu > li.open > a {
+  background: #2C3542;
+  color: #b4bcc8;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:hover > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a > i,
+.page-sidebar .page-sidebar-menu > li:hover > a > i,
+.page-sidebar .page-sidebar-menu > li.open > a > i {
+  color: #606C7D;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:hover > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:hover > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a > .arrow.open:before,
+.page-sidebar .page-sidebar-menu > li:hover > a > .arrow:before,
+.page-sidebar .page-sidebar-menu > li:hover > a > .arrow.open:before,
+.page-sidebar .page-sidebar-menu > li.open > a > .arrow:before,
+.page-sidebar .page-sidebar-menu > li.open > a > .arrow.open:before {
+  color: #606C7D;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a,
+.page-sidebar .page-sidebar-menu > li.active > a,
+.page-sidebar .page-sidebar-menu > li.active.open > a {
+  background: #1caf9a;
+  border-top-color: transparent;
+  color: #ffffff;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a:hover, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a:hover,
+.page-sidebar .page-sidebar-menu > li.active > a:hover,
+.page-sidebar .page-sidebar-menu > li.active.open > a:hover {
+  background: #1caf9a;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a > i,
+.page-sidebar .page-sidebar-menu > li.active > a > i,
+.page-sidebar .page-sidebar-menu > li.active.open > a > i {
+  color: #ffffff;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open > a > .arrow.open:before,
+.page-sidebar .page-sidebar-menu > li.active > a > .arrow:before,
+.page-sidebar .page-sidebar-menu > li.active > a > .arrow.open:before,
+.page-sidebar .page-sidebar-menu > li.active.open > a > .arrow:before,
+.page-sidebar .page-sidebar-menu > li.active.open > a > .arrow.open:before {
+  color: #ffffff;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active + li > a,
+.page-sidebar .page-sidebar-menu > li.active + li > a {
+  border-top-color: transparent;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active.open + li > a,
+.page-sidebar .page-sidebar-menu > li.active.open + li > a {
+  border-top-color: #3d4957;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li:last-child > a,
+.page-sidebar .page-sidebar-menu > li:last-child > a {
+  border-bottom: 1px solid transparent !important;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .arrow.open:before,
+.page-sidebar .page-sidebar-menu li > a > .arrow:before,
+.page-sidebar .page-sidebar-menu li > a > .arrow.open:before {
+  color: #606C7D;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li:hover > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li:hover > a > .arrow.open:before,
+.page-sidebar .page-sidebar-menu li:hover > a > .arrow:before,
+.page-sidebar .page-sidebar-menu li:hover > a > .arrow.open:before {
+  color: #606C7D;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li.active > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li.active > a > .arrow.open:before,
+.page-sidebar .page-sidebar-menu li.active > a > .arrow:before,
+.page-sidebar .page-sidebar-menu li.active > a > .arrow.open:before {
+  color: #ffffff;
+}
+.page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu:hover .sub-menu, .page-sidebar-closed
+.page-sidebar .page-sidebar-menu:hover .sub-menu {
+  background-color: #364150;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a,
+.page-sidebar .page-sidebar-menu .sub-menu > li > a {
+  color: #b4bcc8;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > i,
+.page-sidebar .page-sidebar-menu .sub-menu > li > a > i {
+  color: #606C7D;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > i[class^="icon-"],
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > i[class*="icon-"],
+.page-sidebar .page-sidebar-menu .sub-menu > li > a > i[class^="icon-"],
+.page-sidebar .page-sidebar-menu .sub-menu > li > a > i[class*="icon-"] {
+  color: #6b788b;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li > a > .arrow.open:before,
+.page-sidebar .page-sidebar-menu .sub-menu > li > a > .arrow:before,
+.page-sidebar .page-sidebar-menu .sub-menu > li > a > .arrow.open:before {
+  color: #606C7D;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li:hover > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.open > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.active > a,
+.page-sidebar .page-sidebar-menu .sub-menu > li:hover > a,
+.page-sidebar .page-sidebar-menu .sub-menu > li.open > a,
+.page-sidebar .page-sidebar-menu .sub-menu > li.active > a {
+  background: #3e4b5c !important;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li:hover > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.open > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.active > a > i,
+.page-sidebar .page-sidebar-menu .sub-menu > li:hover > a > i,
+.page-sidebar .page-sidebar-menu .sub-menu > li.open > a > i,
+.page-sidebar .page-sidebar-menu .sub-menu > li.active > a > i {
+  color: #606C7D;
+  color: #959fae;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li:hover > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li:hover > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.open > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.open > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.active > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu > li.active > a > .arrow.open:before,
+.page-sidebar .page-sidebar-menu .sub-menu > li:hover > a > .arrow:before,
+.page-sidebar .page-sidebar-menu .sub-menu > li:hover > a > .arrow.open:before,
+.page-sidebar .page-sidebar-menu .sub-menu > li.open > a > .arrow:before,
+.page-sidebar .page-sidebar-menu .sub-menu > li.open > a > .arrow.open:before,
+.page-sidebar .page-sidebar-menu .sub-menu > li.active > a > .arrow:before,
+.page-sidebar .page-sidebar-menu .sub-menu > li.active > a > .arrow.open:before {
+  color: #606C7D;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light,
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light {
+  /* 1st level links */
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li:hover > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.open > a,
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li:hover > a,
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.open > a {
+  background: #3a4656;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a,
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a,
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a {
+  background: #3e4b5c;
+  border-left: 4px solid #1caf9a;
+  color: #f1f1f1;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a:hover, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a:hover,
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a:hover,
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a:hover {
+  border-left: 4px solid #1caf9a;
+  background: #3a4656;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a > i, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > i,
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a > i,
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > i {
+  color: #eeeeee;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active > a > .arrow.open:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > .arrow:before, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > .arrow.open:before,
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a > .arrow:before,
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a > .arrow.open:before,
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > .arrow:before,
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a > .arrow.open:before {
+  color: #eeeeee;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu,
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu {
+  background: #3a4656;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li:hover > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.open > a, .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.active > a,
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li:hover > a,
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.open > a,
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.active > a {
+  background: #3e4b5c !important;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler,
+.page-sidebar .sidebar-toggler {
+  background: url(../images/sidebar_inline_toggler_icon_darkblue.jpg);
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group,
+.page-sidebar .sidebar-search .input-group {
+  border-bottom: 1px solid #435060;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control,
+.page-sidebar .sidebar-search .input-group .form-control {
+  background-color: #364150;
+  color: #4e5c6f;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control::-moz-placeholder,
+.page-sidebar .sidebar-search .input-group .form-control::-moz-placeholder {
+  color: #4e5c6f;
+  opacity: 1;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control:-ms-input-placeholder,
+.page-sidebar .sidebar-search .input-group .form-control:-ms-input-placeholder {
+  color: #4e5c6f;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control::-webkit-input-placeholder,
+.page-sidebar .sidebar-search .input-group .form-control::-webkit-input-placeholder {
+  color: #4e5c6f;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .input-group-btn .btn > i,
+.page-sidebar .sidebar-search .input-group .input-group-btn .btn > i {
+  color: #4e5c6f;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered .input-group,
+.page-sidebar .sidebar-search.sidebar-search-bordered .input-group {
+  border: 1px solid #435060;
+}
+.page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.open .input-group, .page-sidebar-closed
+.page-sidebar .sidebar-search.open .input-group {
+  background-color: #364150;
+}
+.page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.open .remove > i, .page-sidebar-closed
+.page-sidebar .sidebar-search.open .remove > i {
+  color: #4e5c6f;
+}
+.page-sidebar-closed .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid .input-group, .page-sidebar-closed
+.page-sidebar .sidebar-search.sidebar-search-solid .input-group {
+  background: none;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid .input-group,
+.page-sidebar .sidebar-search.sidebar-search-solid .input-group {
+  border: 1px solid #2c3541;
+  background: #2c3541;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid .input-group .form-control,
+.page-sidebar .sidebar-search.sidebar-search-solid .input-group .form-control {
+  background: #2c3541;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid.open .input-group,
+.page-sidebar .sidebar-search.sidebar-search-solid.open .input-group {
+  border: 1px solid #364150;
+  background: #364150;
+}
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-solid.open .input-group .form-control,
+.page-sidebar .sidebar-search.sidebar-search-solid.open .input-group .form-control {
+  background: #364150;
+}
+
+.page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light {
+  /* 1st level links */
+}
+.page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light > li.active > a, .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a {
+  border-left: 0;
+  border-right: 4px solid #1caf9a;
+}
+.page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light > li.active > a:hover, .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a:hover {
+  border-left: 0;
+  border-right: 4px solid #1caf9a;
+}
+
+/*************
+Quick Sidebar
+*************/
+/***
+Quick Sidebar Layout
+***/
+.page-quick-sidebar-wrapper {
+  background: #435468;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar {
+  background: #435468;
+}
+
+/***
+Quick Sidebar Toggler
+***/
+.page-quick-sidebar-toggler {
+  background: #576d87;
+}
+.page-quick-sidebar-toggler:hover {
+  background: #51667e;
+}
+.page-quick-sidebar-toggler > i {
+  color: #d1d6de;
+}
+
+/***
+Quick Sidebar Content
+***/
+.page-quick-sidebar-wrapper {
+  color: #d1d6de;
+  /* Quick sidebar chat */
+  /* Quick sidebar alerts */
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar {
+  /* Quick sidebar tabs */
+  /* Quick sidebar general list heading */
+  /* Quick sidebar general list-items */
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li > a {
+  color: #c9ced7;
+  background: #576d87;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li > a:hover {
+  background: #4d6178;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li.open > a {
+  color: #c9ced7;
+  background: #576d87;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li.active > a {
+  border: 0;
+  background: #435468;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu {
+  border: 0;
+  background: #576d87;
+  box-shadow: 5px 5px rgba(142, 160, 182, 0.1);
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu:before {
+  border-bottom: 7px solid #576d87;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu:after {
+  border-bottom: 7px solid #576d87;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu > li > a {
+  color: #d1d6de;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu > li > a > i {
+  color: #ccd1d9;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu > li > a:hover {
+  background: #5d7591;
+  color: #d1d6de;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu > li > a:hover > i {
+  color: #d4d9e0;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu > li.active > a {
+  background: #59708a;
+  color: #d1d6de;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu > li.divider {
+  background-color: #5d7591;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .list-heading {
+  color: #a5afbd;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .list-items {
+  margin: 0;
+  padding: 0;
+  list-style: none;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .list-items > li {
+  border-bottom-color: #495c72;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .list-items > li:hover {
+  background: #495c72;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar-item {
+  /* back to list */
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar-item .page-quick-sidebar-nav .page-quick-sidebar-back-to-list {
+  color: #c9ced7;
+}
+/* Giuseppe Careri quicksidebar-search */
+.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-users .quicksidebar-search .input-group{
+  border-bottom: 1px solid #435060;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-users .quicksidebar-search .input-group .form-control{
+  background-color: #435468;
+  color: #c9ced7;
+}
+/* end quicksidebar-search */
+.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading-sub {
+  color: #9ca7b7;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading-small {
+  color: #919cae;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .name {
+  color: #bdc4ce;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .datetime {
+  color: #bdc4ce;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .message {
+  color: #c9ced7;
+  background: #576d87;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .message .arrow {
+  border-right-color: #576d87;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .message .arrow {
+  border-left-color: #576d87;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li a {
+  color: #b7bfca;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li a .desc {
+  text-decoration: underline;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li .desc {
+  color: #b1b9c6;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li .date {
+  color: #919cae;
+}
+
+/******
+Page Footer
+******/
+.page-footer .page-footer-inner {
+  color: #98a6ba;
+}
+.page-footer-fixed .page-footer {
+  background-color: #28303b;
+}
+
+@media (min-width: 992px) {
+  /* 992px */
+  /* Sidebar menu closed */
+  .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu {
+    box-shadow: 5px 5px rgba(44, 53, 66, 0.2);
+  }
+  .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu.sidebar-toggler-wrapper, .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu.sidebar-search-wrapper {
+    box-shadow: none;
+  }
+
+  .page-sidebar-menu.page-sidebar-menu-closed > li:hover {
+    box-shadow: 5px 5px rgba(44, 53, 66, 0.2);
+  }
+  .page-sidebar-menu.page-sidebar-menu-closed > li:hover.sidebar-toggler-wrapper, .page-sidebar-menu.page-sidebar-menu-closed > li:hover.sidebar-search-wrapper {
+    box-shadow: none;
+  }
+  .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu {
+    box-shadow: 5px 5px rgba(44, 53, 66, 0.2);
+  }
+  .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu.sidebar-toggler-wrapper, .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu.sidebar-search-wrapper {
+    box-shadow: none;
+  }
+
+  /* Light sidebar menu */
+  .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-closed > li.heading {
+    padding: 0;
+    margin-top: 15px;
+    margin-bottom: 15px;
+    border-top: 1px solid #3d4957 !important;
+  }
+
+  /* Fixed Sidebar */
+  .page-sidebar-fixed:not(.page-footer-fixed) .page-content {
+    border-bottom: 0;
+  }
+  .page-sidebar-fixed:not(.page-footer-fixed) .page-footer {
+    background-color: #fff;
+  }
+  .page-sidebar-fixed:not(.page-footer-fixed) .page-footer .page-footer-inner {
+    color: #333;
+  }
+
+  /* Boxed Layout */
+  .page-boxed {
+    background-color: #303a47 !important;
+    /* Page container */
+    /* Page sidebar */
+    /* Page footer */
+  }
+  .page-boxed .page-container {
+    background-color: #364150;
+    border-left: 1px solid #3d4957;
+    border-bottom: 1px solid #3d4957;
+  }
+  .page-boxed.page-sidebar-reversed .page-container {
+    border-left: 0;
+    border-right: 1px solid #3d4957;
+  }
+  .page-boxed.page-sidebar-fixed .page-container {
+    border-left: 0;
+    border-bottom: 0;
+  }
+  .page-boxed.page-sidebar-reversed.page-sidebar-fixed .page-container {
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 0;
+  }
+  .page-boxed.page-sidebar-fixed .page-sidebar {
+    border-left: 1px solid #3d4957;
+  }
+  .page-boxed.page-sidebar-reversed.page-sidebar-fixed .page-sidebar {
+    border-right: 1px solid #3d4957;
+    border-left: 0;
+  }
+  .page-boxed.page-sidebar-fixed.page-footer-fixed .page-footer {
+    background-color: #303a47 !important;
+  }
+  .page-boxed.page-sidebar-fixed.page-footer-fixed .page-footer .page-footer-inner {
+    color: #98a6ba;
+  }
+
+  /* Sidebar Menu Wirh Hoverable Submenu */
+  .page-sidebar-menu-hover-submenu li:hover a > .arrow {
+    border-right: 8px solid #323c4b;
+  }
+  .page-sidebar-reversed .page-sidebar-menu-hover-submenu li:hover a > .arrow {
+    border-left: 8px solid #323c4b;
+  }
+  .page-sidebar-menu-hover-submenu li:hover > .sub-menu {
+    background: #323c4b !important;
+  }
+}
+@media (max-width: 991px) {
+  /* 991px */
+  /* Page sidebar */
+  .page-sidebar {
+    background-color: #28303b;
+    /* light sidebar */
+  }
+  .page-sidebar .page-sidebar-menu > li > a {
+    border-top: 1px solid #364150;
+  }
+  .page-sidebar .page-sidebar-menu > li:hover > a, .page-sidebar .page-sidebar-menu > li.open > a {
+    background: #2e3744;
+  }
+  .page-sidebar .page-sidebar-menu > li:last-child > a {
+    border-bottom: 0 !important;
+  }
+  .page-sidebar .page-sidebar-menu > li .sub-menu {
+    background-color: #28303b !important;
+  }
+  .page-sidebar .page-sidebar-menu .sidebar-search input {
+    background-color: #28303b !important;
+  }
+  .page-sidebar .page-sidebar-menu.page-sidebar-menu-light {
+    /* 1st level links */
+  }
+  .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li:hover > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.open > a {
+    background: #2e3744;
+  }
+  .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a {
+    background: #2e3744;
+  }
+  .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active > a:hover, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li.active.open > a:hover {
+    background: #2e3744;
+  }
+  .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu {
+    background: #28303b !important;
+  }
+  .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li:hover > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.open > a, .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu > li.active > a {
+    background: #2e3744 !important;
+  }
+}
+@media (max-width: 480px) {
+  /* 480px */
+  .page-header.navbar {
+    /* Top menu */
+  }
+  .page-header.navbar .top-menu {
+    background-color: #364150;
+  }
+  .page-header-fixed-mobile .page-header.navbar .top-menu {
+    background-color: #2b3643;
+  }
+  .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle {
+    background-color: #415265;
+  }
+  .page-header-fixed-mobile .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle {
+    background: none;
+  }
+  .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle:hover {
+    background-color: #3f4f62;
+  }
+}
+/****
+Boby
+****/
+body {
+  background-color: #364150;
+}
+
+/****
+ CSS3 Spinner Bar
+****/
+.page-spinner-bar > div,
+.block-spinner-bar > div {
+  background: #20c5ad;
+}
diff --git a/public/assets/css/global/google-open-sans.css b/public/assets/css/global/google-open-sans.css
new file mode 100644
index 0000000..0fced4d
--- /dev/null
+++ b/public/assets/css/global/google-open-sans.css
@@ -0,0 +1,284 @@
+/* fallback */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  src: local('Open Sans Light'), local('OpenSans-Light'), url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTQzyDMXhdD8sAj6OAJTFsBI.woff2) format('woff2');
+}
+/* cyrillic-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  src: local('Open Sans Light'), local('OpenSans-Light'), url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTQ7aC6SjiAOpAWOKfJDfVRY.woff2) format('woff2');
+  unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
+}
+/* cyrillic */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  src: local('Open Sans Light'), local('OpenSans-Light'), url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTRdwxCXfZpKo5kWAx_74bHs.woff2) format('woff2');
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* devanagari */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  src: local('Open Sans Light'), local('OpenSans-Light'), url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTSGUML8f7tzeB6gGvgki0bE.woff2) format('woff2');
+  unicode-range: U+02BC, U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200B-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB;
+}
+/* greek-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  src: local('Open Sans Light'), local('OpenSans-Light'), url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTZ6vnaPZw6nYDxM4SVEMFKg.woff2) format('woff2');
+  unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  src: local('Open Sans Light'), local('OpenSans-Light'), url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTfy1_HTwRwgtl1cPga3Fy3Y.woff2) format('woff2');
+  unicode-range: U+0370-03FF;
+}
+/* vietnamese */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  src: local('Open Sans Light'), local('OpenSans-Light'), url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTfgrLsWo7Jk1KvZser0olKY.woff2) format('woff2');
+  unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
+}
+/* latin-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  src: local('Open Sans Light'), local('OpenSans-Light'), url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTYjoYw3YTyktCCer_ilOlhE.woff2) format('woff2');
+  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 300;
+  src: local('Open Sans Light'), local('OpenSans-Light'), url(http://fonts.gstatic.com/s/opensans/v13/DXI1ORHCpsQm3Vp6mXoaTRampu5_7CjHW5spxoeN3Vs.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
+}
+/* fallback */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Open Sans'), local('OpenSans'), url(http://fonts.gstatic.com/s/opensans/v13/TCmDhmS1RRL7aqhqZW19hwLUuEpTyoUstqEm5AMlJo4.woff2) format('woff2');
+}
+/* cyrillic-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Open Sans'), local('OpenSans'), url(http://fonts.gstatic.com/s/opensans/v13/K88pR3goAWT7BTt32Z01m4X0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');
+  unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
+}
+/* cyrillic */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Open Sans'), local('OpenSans'), url(http://fonts.gstatic.com/s/opensans/v13/RjgO7rYTmqiVp7vzi-Q5UYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* devanagari */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Open Sans'), local('OpenSans'), url(http://fonts.gstatic.com/s/opensans/v13/ttwNtsRpgsxVmgGGmiUOEoX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');
+  unicode-range: U+02BC, U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200B-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB;
+}
+/* greek-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Open Sans'), local('OpenSans'), url(http://fonts.gstatic.com/s/opensans/v13/LWCjsQkB6EMdfHrEVqA1KYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');
+  unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Open Sans'), local('OpenSans'), url(http://fonts.gstatic.com/s/opensans/v13/xozscpT2726on7jbcb_pAoX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');
+  unicode-range: U+0370-03FF;
+}
+/* vietnamese */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Open Sans'), local('OpenSans'), url(http://fonts.gstatic.com/s/opensans/v13/59ZRklaO5bWGqF5A9baEEYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');
+  unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
+}
+/* latin-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Open Sans'), local('OpenSans'), url(http://fonts.gstatic.com/s/opensans/v13/u-WUoqrET9fUeobQW7jkRYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2');
+  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 400;
+  src: local('Open Sans'), local('OpenSans'), url(http://fonts.gstatic.com/s/opensans/v13/cJZKeOuBrn4kERxqtaUH3ZBw1xU1rKptJj_0jans920.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
+}
+/* fallback */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 600;
+  src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNSgzyDMXhdD8sAj6OAJTFsBI.woff2) format('woff2');
+}
+/* cyrillic-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 600;
+  src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNSg7aC6SjiAOpAWOKfJDfVRY.woff2) format('woff2');
+  unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
+}
+/* cyrillic */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 600;
+  src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNShdwxCXfZpKo5kWAx_74bHs.woff2) format('woff2');
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* devanagari */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 600;
+  src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNSiGUML8f7tzeB6gGvgki0bE.woff2) format('woff2');
+  unicode-range: U+02BC, U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200B-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB;
+}
+/* greek-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 600;
+  src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNSp6vnaPZw6nYDxM4SVEMFKg.woff2) format('woff2');
+  unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 600;
+  src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNSvy1_HTwRwgtl1cPga3Fy3Y.woff2) format('woff2');
+  unicode-range: U+0370-03FF;
+}
+/* vietnamese */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 600;
+  src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNSvgrLsWo7Jk1KvZser0olKY.woff2) format('woff2');
+  unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
+}
+/* latin-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 600;
+  src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNSojoYw3YTyktCCer_ilOlhE.woff2) format('woff2');
+  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 600;
+  src: local('Open Sans Semibold'), local('OpenSans-Semibold'), url(http://fonts.gstatic.com/s/opensans/v13/MTP_ySUJH_bn48VBG8sNShampu5_7CjHW5spxoeN3Vs.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
+}
+/* fallback */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 700;
+  src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzAzyDMXhdD8sAj6OAJTFsBI.woff2) format('woff2');
+}
+/* cyrillic-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 700;
+  src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzA7aC6SjiAOpAWOKfJDfVRY.woff2) format('woff2');
+  unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F;
+}
+/* cyrillic */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 700;
+  src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzBdwxCXfZpKo5kWAx_74bHs.woff2) format('woff2');
+  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
+}
+/* devanagari */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 700;
+  src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzCGUML8f7tzeB6gGvgki0bE.woff2) format('woff2');
+  unicode-range: U+02BC, U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200B-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB;
+}
+/* greek-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 700;
+  src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzJ6vnaPZw6nYDxM4SVEMFKg.woff2) format('woff2');
+  unicode-range: U+1F00-1FFF;
+}
+/* greek */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 700;
+  src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzPy1_HTwRwgtl1cPga3Fy3Y.woff2) format('woff2');
+  unicode-range: U+0370-03FF;
+}
+/* vietnamese */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 700;
+  src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzPgrLsWo7Jk1KvZser0olKY.woff2) format('woff2');
+  unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB;
+}
+/* latin-ext */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 700;
+  src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzIjoYw3YTyktCCer_ilOlhE.woff2) format('woff2');
+  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
+}
+/* latin */
+@font-face {
+  font-family: 'Open Sans';
+  font-style: normal;
+  font-weight: 700;
+  src: local('Open Sans Bold'), local('OpenSans-Bold'), url(http://fonts.gstatic.com/s/opensans/v13/k3k702ZOKiLJc3WVjuplzBampu5_7CjHW5spxoeN3Vs.woff2) format('woff2');
+  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
+}
diff --git a/public/assets/css/global/layout.css b/public/assets/css/global/layout.css
new file mode 100644
index 0000000..94d6534
--- /dev/null
+++ b/public/assets/css/global/layout.css
@@ -0,0 +1,2630 @@
+@media print {
+  body {
+    background-color: #fff !important;
+  }
+
+  .page-bar {
+    display: none;
+  }
+
+  .page-sidebar-wrapper {
+    display: none;
+  }
+
+  .page-quick-sidebar-wrapper {
+    display: none;
+  }
+
+  .theme-panel {
+    display: none;
+  }
+
+  .hidden-print {
+    display: none;
+  }
+
+  .page-footer {
+    display: none;
+  }
+
+  .no-page-break {
+    page-break-after: avoid;
+  }
+
+  .page-container {
+    margin: 0px !important;
+    padding: 0px !important;
+  }
+
+  .page-content {
+    padding: 0 !important;
+    min-height: 300px !important;
+    padding: 0px 20px 20px !important;
+    margin: 0 !important;
+  }
+}
+/***
+Page Header
+***/
+.page-header.navbar {
+  width: 100%;
+  padding: 0 20px 0 20px;
+  margin: 0;
+  border: 0px;
+  padding: 0px;
+  box-shadow: none;
+  height: 46px;
+  min-height: 46px;
+  filter: none;
+  background-image: none;
+  /* Fixed header */
+  /* Header logo */
+  /* Search box */
+  /* Menu Toggler */
+  /* Top menu */
+}
+.page-header.navbar.navbar-fixed-top {
+  z-index: 9995;
+}
+.page-header.navbar.navbar-static-top {
+  z-index: 9995;
+}
+.page-header.navbar .page-logo {
+  float: left;
+  display: block;
+  width: 235px;
+  height: 46px;
+  padding-left: 20px;
+  padding-right: 20px;
+}
+.page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo {
+  padding: 0;
+}
+.page-header.navbar .page-logo > .logo-image,
+.page-header.navbar .page-logo > a {
+  display: inline-block;
+  float: left;
+}
+.page-header.navbar .page-logo .logo-default {
+  margin: 16px 0 0 0;
+}
+.page-header.navbar .page-logo .logo-mini {
+  display: none;
+  margin-left: 5px;
+}
+.page-header.navbar .page-logo .text-logo {
+  padding-left: 20px;
+  padding-top: 12px;
+}
+.page-header.navbar .search-form {
+  display: inline-block;
+  width: 46px;
+  position: relative;
+  float: left;
+  transition: all 0.6s;
+}
+.page-header.navbar .search-form .input-group .form-control {
+  height: 46px;
+  border: 0;
+  background: transparent !important;
+  font-size: 13px;
+  padding-left: 0;
+  margin-left: 12px;
+  text-indent: -150000px;
+}
+.page-header.navbar .search-form .input-group .form-control:hover {
+  cursor: pointer;
+}
+.page-header.navbar .search-form .input-group .input-group-btn {
+  height: 46px;
+}
+.page-header.navbar .search-form .input-group .input-group-btn .btn.submit {
+  margin-left: -24px;
+  padding: 0;
+  width: 46px;
+  background: none;
+  margin-top: 4px;
+  display: block;
+}
+.page-header.navbar .search-form .input-group .input-group-btn .btn.submit > i {
+  font-size: 15px;
+}
+.page-header.navbar .search-form.open {
+  transition: all 0.6s;
+  width: 300px !important;
+}
+.page-header.navbar .search-form.open .input-group .form-control {
+  text-indent: 0;
+}
+.page-header.navbar .search-form.open .input-group .form-control:hover {
+  cursor: text;
+}
+.page-header.navbar .search-form.open .input-group .input-group-btn .btn.submit {
+  margin-left: 0;
+}
+.page-header.navbar .menu-toggler {
+  display: block;
+  cursor: pointer;
+  opacity: 0.7;
+  filter: alpha(opacity=70);
+  width: 24px;
+  height: 24px;
+  background-repeat: no-repeat;
+  background-position: center center;
+}
+.page-header.navbar .menu-toggler:hover {
+  filter: alpha(opacity=100);
+  opacity: 1;
+}
+.page-header.navbar .menu-toggler.sidebar-toggler {
+  float: right;
+  margin: 11px 0 0 0;
+}
+.page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .menu-toggler.sidebar-toggler {
+  margin-right: 10.5px;
+}
+.page-header.navbar .menu-toggler.responsive-toggler {
+  display: none;
+  float: right;
+  margin: 11px 6px 0 6px;
+}
+.page-header.navbar .top-menu {
+  margin: 0;
+  padding: 0;
+  float: right;
+}
+.page-header.navbar .top-menu .navbar-nav {
+  padding: 0;
+  margin-right: 20px;
+  display: block;
+  /* Extended Dropdowns */
+  /* Notification */
+  /* Inbox */
+  /* Tasks */
+  /* User */
+  /* Language */
+  /* Dark version */
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown {
+  margin: 0px;
+  padding: 0px 4px;
+  height: 46px;
+  display: inline-block;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown:last-child {
+  padding-right: 0px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle {
+  margin: 0px;
+  padding: 17px 10px 9px 10px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle:last-child {
+  padding-right: 0;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle > i {
+  font-size: 17px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle > i.glyphicon {
+  font-size: 16px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle > .badge {
+  font-family: "Open Sans", sans-serif;
+  position: absolute;
+  top: 10px;
+  right: 20px;
+  font-weight: 300px;
+  padding: 3px 6px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown > .dropdown-toggle:focus {
+  background: none;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-menu {
+  margin-top: 3px;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-menu:before {
+  position: absolute;
+  top: -7px;
+  right: 9px;
+  display: inline-block !important;
+  border-right: 7px solid transparent;
+  border-bottom: 7px solid #eee;
+  border-left: 7px solid transparent;
+  border-bottom-color: rgba(0, 0, 0, 0.2);
+  content: '';
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-menu:after {
+  position: absolute;
+  top: -6px;
+  right: 10px;
+  display: inline-block !important;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #fff;
+  border-left: 6px solid transparent;
+  content: '';
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-menu > li > a {
+  color: #555;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu {
+  min-width: 160px;
+  max-width: 275px;
+  width: 275px;
+  z-index: 9995;
+  /* header notifications dropdowns */
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external {
+  display: block;
+  overflow: hidden;
+  padding: 15px 15px;
+  letter-spacing: 0.5px;
+  -webkit-border-radius: 4px 4px 0 0;
+  -moz-border-radius: 4px 4px 0 0;
+  -ms-border-radius: 4px 4px 0 0;
+  -o-border-radius: 4px 4px 0 0;
+  border-radius: 4px 4px 0 0;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > h3 {
+  margin: 0;
+  padding: 0;
+  float: left;
+  font-size: 13px;
+  display: inline-block;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > a {
+  display: inline-block;
+  padding: 0;
+  background: none;
+  clear: inherit;
+  font-size: 13px;
+  font-weight: 300;
+  position: absolute;
+  right: 10px;
+  border: 0;
+  margin-top: -1px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu > li.external > a:hover {
+  text-decoration: underline;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list {
+  padding-right: 0 !important;
+  padding-left: 0;
+  list-style: none;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li > a {
+  display: block;
+  clear: both;
+  font-weight: 300;
+  line-height: 20px;
+  white-space: normal;
+  font-size: 13px;
+  padding: 16px 15px 18px;
+  text-shadow: none;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li > a:hover {
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-extended .dropdown-menu .dropdown-menu-list > li:first-child a {
+  border-top: none;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .details {
+  overflow: hidden;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .details .label-icon {
+  margin-right: 10px;
+  -webkit-border-radius: 50%;
+  -moz-border-radius: 50%;
+  -ms-border-radius: 50%;
+  -o-border-radius: 50%;
+  border-radius: 50%;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .details .label-icon i {
+  margin-right: 2px;
+  margin-left: 1px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .details .label-icon .badge {
+  right: 15px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu .dropdown-menu-list > li a .time {
+  float: right;
+  max-width: 75px;
+  font-size: 11px;
+  font-weight: 400;
+  opacity: 0.7;
+  filter: alpha(opacity=70);
+  text-align: right;
+  padding: 1px 5px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .photo {
+  float: left;
+  margin: 0 6px 6px 0;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .photo img {
+  height: 40px;
+  width: 40px;
+  -webkit-border-radius: 50% !important;
+  -moz-border-radius: 50% !important;
+  -ms-border-radius: 50% !important;
+  -o-border-radius: 50% !important;
+  border-radius: 50% !important;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .subject {
+  display: block;
+  margin-left: 46px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .subject .from {
+  font-size: 13px;
+  font-weight: 600;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .subject .time {
+  font-size: 12px;
+  font-weight: 400;
+  opacity: 0.5;
+  filter: alpha(opacity=50);
+  float: right;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox > .dropdown-menu .dropdown-menu-list > li .message {
+  display: block !important;
+  font-size: 12px;
+  line-height: 1.3;
+  margin-left: 46px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .task {
+  margin-bottom: 5px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .task .desc {
+  font-size: 13px;
+  font-weight: 300;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .task .percent {
+  float: right;
+  font-weight: 600;
+  display: inline-block;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .progress {
+  display: block;
+  height: 8px;
+  margin: 8px 0 2px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu .dropdown-menu-list > li .progress .progress-bar {
+  box-shadow: none;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle {
+  padding: 14px 6px 12px 8px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle > .username {
+  display: inline-block;
+  font-size: 13px;
+  font-weight: 300;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle > img {
+  float: left;
+  margin-top: -5px;
+  margin-right: 5px;
+  height: 29px;
+  display: inline-block;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle > i {
+  display: inline-block;
+  margin-top: 5px;
+  margin: 0;
+  font-size: 13px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-menu {
+  width: 175px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-menu > li > a {
+  font-size: 14px;
+  font-weight: 300;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-menu > li > a i {
+  width: 15px;
+  display: inline-block;
+  margin-right: 9px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-menu > li > a .badge {
+  margin-right: 10px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-language {
+  padding-left: 0;
+  padding-right: 0;
+  margin: 0;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-toggle {
+  padding: 14px 3px 12px 7px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-toggle > img {
+  margin-bottom: 2px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-toggle > i {
+  font-size: 14px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-menu > li > a {
+  font-size: 13px;
+}
+.page-header.navbar .top-menu .navbar-nav > li.dropdown-language > .dropdown-menu > li > a > img {
+  margin-bottom: 2px;
+  margin-right: 5px;
+}
+.page-header.navbar .top-menu .navbar-nav li.dropdown-dark .dropdown-menu:before {
+  border-left: none;
+  border-right: none;
+}
+.page-header.navbar .top-menu .navbar-nav li.dropdown-dark .dropdown-menu .dropdown-menu-list > li.external a {
+  background: none !important;
+  border: none !important;
+}
+
+/* Allow expanded search for above 768px */
+@media (min-width: 768px) {
+  /* 768px */
+  .page-header.navbar {
+    /* Search box */
+  }
+  .page-header.navbar .search-form.search-form-expanded {
+    width: 200px;
+  }
+  .page-header.navbar .search-form.search-form-expanded .input-group .form-control {
+    text-indent: 0;
+  }
+  .page-header.navbar .search-form.search-form-expanded .input-group .form-control:hover {
+    cursor: text;
+  }
+  .page-header.navbar .search-form.search-form-expanded .input-group .input-group-btn .btn.submit {
+    margin-left: 0;
+  }
+}
+/***
+Horizontal Menu
+***/
+.page-header.navbar {
+  /* Header container */
+  /* Mega menu */
+}
+.page-header.navbar .container {
+  position: relative;
+}
+.page-header.navbar .hor-menu {
+  margin: 0 0 0 -17px;
+  margin: 0;
+  float: left;
+}
+.page-header.navbar .hor-menu .navbar-nav {
+  position: static;
+  /* Mega menu */
+  /* Mega Menu Dropdown */
+  /* Classic menu */
+}
+.page-header.navbar .hor-menu .navbar-nav.navbar-right .dropdown-menu {
+  left: auto;
+  right: 0;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown {
+  position: static;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu {
+  left: auto;
+  width: auto;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content {
+  font-family: "Open Sans", sans-serif;
+  padding: 15px;
+  margin: 0;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content.mega-menu-responsive-content {
+  padding: 10px 18px 10px 45px;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu {
+  padding: 0;
+  margin: 0;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu:last-child {
+  border-right: 0;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li {
+  padding: 1px !important;
+  margin: 0 !important;
+  list-style: none;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > h3 {
+  margin-top: 5px;
+  padding-left: 6px;
+  font-size: 15px;
+  font-weight: 400;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a {
+  white-space: normal;
+  font-family: "Open Sans", sans-serif;
+  padding: 7px;
+  margin: 0;
+  font-size: 14px;
+  font-weight: 300;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a.iconify {
+  padding: 7px 7px 7px 30px;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a.iconify > i {
+  position: absolute;
+  top: auto !important;
+  margin-left: -24px;
+  font-size: 15px;
+  margin-top: 3px !important;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a .badge,
+.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown > .dropdown-menu .mega-menu-content .mega-menu-submenu li > a .label {
+  margin-left: 5px;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.mega-menu-dropdown.mega-menu-full .dropdown-menu {
+  left: 20px;
+  right: 20px;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.menu-dropdown .dropdown-menu:after, .page-header.navbar .hor-menu .navbar-nav > li.menu-dropdown .dropdown-menu:before {
+  display: none !important;
+}
+.page-header.navbar .hor-menu .navbar-nav > li > a {
+  font-size: 14px;
+  font-weight: 400;
+  padding: 13px 13px;
+}
+.page-header.navbar .hor-menu .navbar-nav > li > a:focus {
+  background: none !important;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.current .selected, .page-header.navbar .hor-menu .navbar-nav > li.active .selected {
+  left: 50%;
+  bottom: 0;
+  position: absolute;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-top: 6px solid transparent;
+  display: inline-block;
+  margin: 0;
+  width: 0;
+  height: 0px;
+  margin-left: -7px;
+  margin-bottom: -6px;
+}
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu {
+  margin-top: 0;
+  border: none;
+}
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a {
+  font-family: "Open Sans", sans-serif;
+  font-size: 14px;
+  font-weight: 300;
+  padding: 9px 10px;
+  white-space: normal;
+}
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a .label,
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-menu li > a .badge {
+  font-weight: 300;
+}
+.page-header.navbar .hor-menu .navbar-nav > li.classic-menu-dropdown .dropdown-menu {
+  min-width: 195px;
+  max-width: 235px;
+}
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-submenu > .dropdown-menu {
+  top: 0;
+}
+.page-header.navbar .hor-menu .navbar-nav > li .dropdown-submenu > a:after {
+  top: 9px;
+  right: 10px;
+}
+
+/* Form medium devices upto large devices */
+@media (min-width: 992px) and (max-width: 1200px) {
+  /* 992px 1200px */
+  /* Boxed layout */
+  .page-boxed .page-header.navbar {
+    /* Top menu */
+  }
+  .page-boxed .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle .username.username-hide-on-mobile {
+    display: none;
+  }
+  .page-boxed .page-header.navbar .top-menu .navbar-nav > li.dropdown-language .dropdown-toggle .langname {
+    display: none;
+  }
+}
+@media (min-width: 992px) {
+  /* 992px */
+  /* Page header */
+  .page-header.navbar {
+    /* Header logo */
+  }
+  .page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo {
+    padding: 0;
+  }
+  .page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo {
+    width: 45px;
+  }
+  .page-sidebar-closed.page-sidebar-closed-hide-logo .page-header.navbar .page-logo .logo-default {
+    display: none;
+  }
+
+  /* Boxed Layout */
+  .page-boxed .page-header.navbar {
+    /* Page logo */
+    /* Top menu */
+  }
+  .page-boxed .page-header.navbar .page-logo {
+    width: 236px;
+  }
+  .page-boxed .page-header.navbar .top-menu .navbar-nav {
+    margin-right: 0px;
+  }
+
+  /* Sidebar closed & logo hidden */
+  .page-sidebar-closed.page-sidebar-closed-hide-logo.page-boxed .page-header.navbar {
+    /* Page logo */
+  }
+  .page-sidebar-closed.page-sidebar-closed-hide-logo.page-boxed .page-header.navbar .page-logo {
+    width: 46px;
+  }
+
+  /* Boxed layout & page sidebar fixed layout */
+  .page-boxed.page-sidebar-fixed .page-header.navbar {
+    /* Page logo */
+  }
+  .page-boxed.page-sidebar-fixed .page-header.navbar .page-logo {
+    width: 235px;
+  }
+}
+@media (max-width: 991px) {
+  /* 991px */
+  /* Page header */
+  .page-header.navbar {
+    padding: 0 20px 0 20px;
+    position: relative;
+    clear: both;
+    /* Page logo */
+    /* Menu Toggler */
+    /* Top Menu */
+  }
+  .page-header.navbar .page-logo {
+    width: auto;
+    padding: 0;
+    margin-right: 10px;
+    margin-left: 0px !important;
+    padding-left: 0px !important;
+  }
+  .page-header.navbar .page-logo img {
+    margin-left: 4px !important;
+  }
+  .page-header.navbar .menu-toggler.sidebar-toggler {
+    display: none !important;
+  }
+  .page-header.navbar .menu-toggler.responsive-toggler {
+    display: inline-block;
+  }
+  .page-header.navbar .top-menu .navbar-nav {
+    display: inline-block;
+    margin: 0 10px 0 0;
+  }
+  .page-header.navbar .top-menu .navbar-nav > li {
+    float: left;
+  }
+  .page-header.navbar .top-menu .navbar-nav .nav li.dropdown i {
+    display: inline-block;
+    position: relative;
+    top: 1px;
+    right: 0px;
+  }
+  .page-header.navbar .top-menu .navbar-nav .open .dropdown-menu {
+    position: absolute;
+  }
+
+  /* Fixed header for mobile */
+  .page-header-fixed.page-header-fixed-mobile .navbar-fixed-top {
+    position: fixed;
+  }
+
+  /* Boxed Layout */
+  .page-boxed .page-header.navbar > .container {
+    max-width: none !important;
+    margin: 0 !important;
+    padding: 0 !important;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  /* 768px & 991px */
+  /* Boxed Layout */
+  .page-boxed .page-header.navbar {
+    margin: auto !important;
+    padding: 0;
+  }
+  .page-boxed .page-header.navbar > .container {
+    margin: auto !important;
+  }
+}
+@media (max-width: 767px) {
+  /* 767px */
+  /* Page header */
+  .page-header.navbar {
+    padding: 0 10px 0 10px;
+    /* Header logo */
+    /* Search box */
+    /* Top navigation menu*/
+  }
+  .page-header.navbar .page-logo {
+    width: auto;
+  }
+  .page-header.navbar .search-form.open {
+    z-index: 3;
+    left: 10px;
+    right: 10px;
+    position: absolute;
+    width: auto !important;
+  }
+  .page-header.navbar .top-menu .navbar-nav > li.dropdown-extended > .dropdown-menu {
+    max-width: 255px;
+    width: 255px;
+  }
+  .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu {
+    margin-right: -190px;
+  }
+  .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu:after, .page-header.navbar .top-menu .navbar-nav > li.dropdown-notification .dropdown-menu:before {
+    margin-right: 190px;
+  }
+  .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox .dropdown-menu {
+    margin-right: -150px;
+  }
+  .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox .dropdown-menu:after, .page-header.navbar .top-menu .navbar-nav > li.dropdown-inbox .dropdown-menu:before {
+    margin-right: 150px;
+  }
+  .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu {
+    margin-right: -110px;
+  }
+  .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu:after, .page-header.navbar .top-menu .navbar-nav > li.dropdown-tasks .dropdown-menu:before {
+    margin-right: 110px;
+  }
+}
+@media (max-width: 580px) {
+  /* Page header */
+  .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle .username.username-hide-on-mobile {
+    display: none;
+  }
+  .page-header.navbar .top-menu .navbar-nav > li.dropdown-language .dropdown-toggle .langname {
+    display: none;
+  }
+}
+@media (max-width: 480px) {
+  /* 480px */
+  /* Fixed header for mobile */
+  .page-header-fixed.page-header-fixed-mobile .page-header.navbar {
+    height: 92px;
+  }
+
+  .page-header.navbar {
+    /* Top menu */
+  }
+  .page-header.navbar .top-menu {
+    display: block;
+    clear: both;
+  }
+  .page-header.navbar .top-menu .navbar-nav {
+    margin-right: 0;
+  }
+  .page-header.navbar .top-menu .navbar-nav > li.dropdown .dropdown-toggle {
+    padding: 17px 6px 9px 6px;
+  }
+  .page-header.navbar .top-menu .navbar-nav > li.dropdown-language .dropdown-toggle {
+    padding: 14px 4px 12px 2px;
+  }
+  .page-header.navbar .top-menu .navbar-nav > li.dropdown-user .dropdown-toggle {
+    padding: 14px 0px 12px 2px;
+  }
+}
+/***
+Pace - Page Progress
+***/
+.pace .pace-progress {
+  z-index: 10000;
+  top: 44px;
+  height: 2px;
+}
+
+.pace .pace-progress-inner {
+  box-shadow: none;
+}
+
+.pace .pace-activity {
+  top: 48px;
+  right: 22px;
+  border-radius: 10px !important;
+}
+
+@media (max-width: 480px) {
+  /* 480px */
+  .page-header-fixed .pace .pace-progress {
+    top: 92px;
+  }
+
+  .page-header-fixed .pace .pace-activity {
+    top: 188px;
+    right: 15px;
+  }
+}
+/***
+Page container
+***/
+.page-container {
+  margin: 0px;
+  padding: 0px;
+  position: relative;
+  /* Fixed header */
+  /* Fixed footer for mobile */
+}
+.page-container:before, .page-container:after {
+  content: " ";
+  display: table;
+}
+.page-container:after {
+  clear: both;
+}
+.page-header-fixed .page-container {
+  margin-top: 46px;
+}
+.page-footer-fixed.page-footer-fixed-mobile .page-container {
+  margin-bottom: 20px !important;
+}
+
+@media (min-width: 992px) {
+  /* Page container in fixed footer */
+  .page-footer-fixed .page-container {
+    margin-bottom: 20px !important;
+  }
+}
+@media (max-width: 991px) {
+  /* Page container */
+  .page-container {
+    margin: 0 !important;
+    padding: 0 !important;
+  }
+  .page-header-fixed.page-header-fixed-mobile .page-container {
+    margin-top: 46px !important;
+  }
+}
+@media (max-width: 480px) {
+  /* Page container */
+  .page-header-fixed.page-header-fixed-mobile .page-container {
+    margin-top: 92px !important;
+  }
+}
+/***
+Page sidebar
+***/
+/* IE8 fix */
+.ie8 .page-sidebar {
+  width: 235px;
+  float: left;
+  position: relative;
+  margin-right: -100%;
+}
+
+/* Page Sidebar */
+.page-sidebar,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover {
+  /* Default sidebar menu */
+  /* light sidebar menu */
+}
+.page-sidebar.navbar-collapse,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover.navbar-collapse {
+  padding: 0;
+  box-shadow: none;
+}
+.page-sidebar .page-sidebar-menu,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu {
+  list-style: none;
+  margin: 0;
+  padding: 0;
+  /* 1st level links */
+  /* all links */
+}
+.page-sidebar .page-sidebar-menu > li,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li {
+  display: block;
+  margin: 0;
+  padding: 0;
+  border: 0px;
+}
+.page-sidebar .page-sidebar-menu > li.sidebar-toggler-wrapper, .page-sidebar .page-sidebar-menu > li.sidebar-search-wrapper,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-toggler-wrapper,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-search-wrapper {
+  border: 0 !important;
+}
+.page-sidebar .page-sidebar-menu > li.sidebar-toggler-wrapper:before, .page-sidebar .page-sidebar-menu > li.sidebar-toggler-wrapper:after, .page-sidebar .page-sidebar-menu > li.sidebar-search-wrapper:before, .page-sidebar .page-sidebar-menu > li.sidebar-search-wrapper:after,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-toggler-wrapper:before,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-toggler-wrapper:after,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-search-wrapper:before,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-search-wrapper:after {
+  content: " ";
+  display: table;
+}
+.page-sidebar .page-sidebar-menu > li.sidebar-toggler-wrapper:after, .page-sidebar .page-sidebar-menu > li.sidebar-search-wrapper:after,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-toggler-wrapper:after,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.sidebar-search-wrapper:after {
+  clear: both;
+}
+.page-sidebar .page-sidebar-menu > li.start > a,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.start > a {
+  border-top-color: transparent !important;
+}
+.page-sidebar .page-sidebar-menu > li.last > a,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.last > a {
+  border-bottom-color: transparent !important;
+}
+.page-sidebar .page-sidebar-menu > li > a,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a {
+  display: block;
+  position: relative;
+  margin: 0;
+  border: 0px;
+  padding: 10px 15px;
+  text-decoration: none;
+  font-size: 14px;
+  font-weight: 300;
+}
+.page-sidebar .page-sidebar-menu > li > a > i,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i {
+  font-size: 16px;
+  margin-right: 5px;
+  text-shadow: none;
+}
+.page-sidebar .page-sidebar-menu > li > a > i.glyphicon,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > i.glyphicon {
+  top: 3px;
+  margin-left: 1px;
+  margin-right: 4px;
+}
+.page-sidebar .page-sidebar-menu > li > a > [class^="icon-"],
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a > [class^="icon-"] {
+  top: 2px;
+  margin-left: 1px;
+  margin-right: 4px;
+}
+.page-sidebar-fixed .page-sidebar .page-sidebar-menu > li > a, .page-sidebar-fixed
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a {
+  transition: all 0.2s ease;
+}
+.page-sidebar-reversed.page-sidebar-fixed .page-sidebar .page-sidebar-menu > li > a, .page-sidebar-reversed.page-sidebar-fixed
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li > a {
+  transition: none;
+}
+.page-sidebar .page-sidebar-menu > li.heading,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.heading {
+  padding: 15px 15px 15px 15px;
+}
+.page-sidebar .page-sidebar-menu > li.heading > h3,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.heading > h3 {
+  margin: 0;
+  padding: 0;
+  font-size: 14px;
+  font-weight: 300;
+}
+.page-sidebar .page-sidebar-menu > li.heading + li > a,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.heading + li > a {
+  border-top: 0;
+}
+.page-sidebar .page-sidebar-menu > li.open > a,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.open > a {
+  font-size: 14px;
+}
+.page-sidebar .page-sidebar-menu > li.active > a,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a {
+  border: none;
+  text-shadow: none;
+  font-size: 14px;
+}
+.page-sidebar .page-sidebar-menu > li.active > a > .selected,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .selected {
+  display: block;
+  background-image: none;
+  /* will be set in a theme css file*/
+  float: right;
+  position: absolute;
+  right: 0px;
+  top: 8px;
+  background: none;
+  width: 0;
+  height: 0;
+  border-top: 12px solid transparent;
+  border-bottom: 12px solid transparent;
+  border-right: 12px solid #ffffff;
+}
+.page-sidebar-reversed .page-sidebar .page-sidebar-menu > li.active > a > .selected, .page-sidebar-reversed
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .selected {
+  right: auto;
+  left: 0;
+  border-right: 0;
+  border-left: 8px solid #ffffff;
+}
+.page-container-bg-solid .page-sidebar .page-sidebar-menu > li.active > a > .selected, .page-container-bg-solid
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .selected {
+  border-color: transparent #F1F3FA transparent transparent;
+}
+.page-container-bg-solid.page-sidebar-reversed .page-sidebar .page-sidebar-menu > li.active > a > .selected, .page-container-bg-solid.page-sidebar-reversed
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu > li.active > a > .selected {
+  border-color: transparent transparent transparent #F1F3FA;
+}
+.page-sidebar .page-sidebar-menu li > a > .arrow:before,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .arrow:before {
+  float: right;
+  width: 10px;
+  text-align: center;
+  margin-top: -1px;
+  margin-right: 5px;
+  margin-left: 5px;
+  display: inline;
+  font-size: 16px;
+  font-family: FontAwesome;
+  height: auto;
+  content: "\f104";
+  font-weight: 300;
+  text-shadow: none;
+}
+.page-sidebar .page-sidebar-menu li > a > .arrow.open:before,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .arrow.open:before {
+  content: "\f107";
+}
+.page-sidebar .page-sidebar-menu li > a > .badge,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li > a > .badge {
+  float: right;
+  margin-top: 1px;
+  margin-right: 0px;
+}
+.page-sidebar .page-sidebar-menu .sub-menu,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu {
+  list-style: none;
+  display: none;
+  padding: 0;
+  margin: 8px 0px 8px 0px;
+}
+.page-sidebar .page-sidebar-menu .sub-menu li,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li {
+  background: none;
+  margin: 0px;
+  padding: 0px;
+  margin-top: 1px !important;
+  /* 2nd level sub menu */
+}
+.page-sidebar .page-sidebar-menu .sub-menu li > a,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > a {
+  display: block;
+  margin: 0;
+  padding: 6px 15px 6px 43px;
+  text-decoration: none;
+  font-size: 14px;
+  font-weight: 300;
+  background: none;
+}
+.page-sidebar .page-sidebar-menu .sub-menu li > a > i,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > a > i {
+  font-size: 14px;
+}
+.page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu {
+  margin: 0;
+}
+.page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu > li,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu > li {
+  /* 3rd level sub menu */
+}
+.page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu > li > a,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu > li > a {
+  padding-left: 60px;
+}
+.page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu > li > .sub-menu,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu > li > .sub-menu {
+  margin: 0;
+}
+.page-sidebar .page-sidebar-menu .sub-menu li > .sub-menu > li > .sub-menu > li > a,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .sub-menu li > .sub-menu > li > .sub-menu > li > a {
+  padding-left: 80px;
+}
+.page-sidebar .page-sidebar-menu li.active > .sub-menu,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu li.active > .sub-menu {
+  display: block;
+}
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li > a,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li > a {
+  border: 0;
+  margin: 0;
+  padding-left: 11px;
+  border-left: 4px solid transparent;
+}
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu {
+  margin: 0;
+  padding: 1px 0;
+}
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu li > a,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu li > a {
+  padding-top: 8px;
+  padding-bottom: 8px;
+}
+.page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu li:first-child,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li .sub-menu li:first-child {
+  margin-top: 0 !important;
+}
+.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-light > li > a, .page-sidebar-reversed
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu.page-sidebar-menu-light > li > a {
+  padding-left: 15px;
+  padding-right: 11px;
+  border-left: 0;
+  border-right: 4px solid transparent;
+}
+.page-sidebar .sidebar-toggler,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler {
+  display: block;
+  cursor: pointer;
+  opacity: 0.7;
+  filter: alpha(opacity=70);
+  width: 30px;
+  height: 27px;
+  margin-top: 15px;
+  margin-right: 19px;
+  float: right;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+.page-sidebar .sidebar-toggler:hover,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-toggler:hover {
+  filter: alpha(opacity=100);
+  opacity: 1;
+}
+.page-sidebar .sidebar-search,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search {
+  padding: 0;
+  margin: 22px 18px 22px 18px;
+}
+.page-sidebar .sidebar-search .remove,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .remove {
+  display: none;
+}
+.page-sidebar .sidebar-search .remove > i,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .remove > i {
+  font-size: 16px;
+}
+.page-sidebar .sidebar-search .input-group,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group {
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+.page-sidebar .sidebar-search .input-group .form-control,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .form-control {
+  border: 0;
+  font-size: 14px;
+  padding: 0;
+  height: auto;
+  line-height: auto;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+.page-sidebar .sidebar-search .input-group .input-group-btn .btn,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .input-group-btn .btn {
+  padding: 2px 0 0 0;
+  background-color: transparent;
+  background-repeat: no-repeat;
+  background-position: 100% 3px;
+}
+.page-sidebar .sidebar-search .input-group .input-group-btn .btn > i,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search .input-group .input-group-btn .btn > i {
+  font-size: 15px;
+}
+.page-sidebar .sidebar-search.sidebar-search-bordered,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered {
+  margin: 25px 18px 25px 18px;
+}
+.page-sidebar .sidebar-search.sidebar-search-bordered .input-group .form-control,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered .input-group .form-control {
+  font-size: 13px;
+  padding: 6px 8px;
+}
+.page-sidebar .sidebar-search.sidebar-search-bordered .input-group .input-group-btn .btn,
+.page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .sidebar-search.sidebar-search-bordered .input-group .input-group-btn .btn {
+  margin-right: 6px;
+}
+
+@media (min-width: 992px) {
+  /* 992px */
+  .page-sidebar {
+    width: 235px;
+    float: left;
+    position: relative;
+    margin-right: -100%;
+  }
+  .page-full-width .page-sidebar {
+    display: none !important;
+  }
+  .page-sidebar.navbar-collapse {
+    max-height: none !important;
+  }
+
+  .page-sidebar-reversed .page-sidebar {
+    float: right;
+    margin-right: 0;
+    margin-left: -100%;
+  }
+  .page-sidebar-reversed.page-sidebar-fixed .page-sidebar {
+    margin-left: -235px;
+  }
+  .page-sidebar-reversed.page-sidebar-fixed .page-sidebar-wrapper {
+    position: relative;
+    float: right;
+  }
+
+  .page-sidebar-fixed .page-sidebar {
+    position: fixed !important;
+    margin-left: 0;
+    top: 46px;
+  }
+  .page-sidebar-fixed .page-sidebar-menu > li.last {
+    margin-bottom: 15px !important;
+  }
+
+  /* Sidebar Closed */
+  .page-sidebar-closed .page-sidebar {
+    width: 45px !important;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed {
+    /* sidebar */
+    width: 45px !important;
+    /* sidebar toggler */
+    /* sidebar search */
+    /* sidebar bordered search */
+    /* sidebar search expanded */
+    /* sidebar bordered search expanded */
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li {
+    /* hide opened sub menu */
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.open > .sub-menu,
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > .sub-menu {
+    display: none !important;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover {
+    width: 256px !important;
+    position: relative !important;
+    z-index: 10000;
+    display: block !important;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a {
+    -webkit-border-radius: 0 4px 0 0;
+    -moz-border-radius: 0 4px 0 0;
+    -ms-border-radius: 0 4px 0 0;
+    -o-border-radius: 0 4px 0 0;
+    border-radius: 0 4px 0 0;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > i {
+    margin-right: 10px;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > .title {
+    display: inline !important;
+    padding-left: 15px;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > .badge {
+    display: block !important;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > .selected {
+    display: none;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover.heading {
+    width: 45px !important;
+    box-shadow: none;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu {
+    width: 210px;
+    position: absolute;
+    z-index: 2000;
+    left: 46px;
+    margin-top: 0;
+    top: 100%;
+    display: block !important;
+    -webkit-border-radius: 0 0 4px 4px;
+    -moz-border-radius: 0 0 4px 4px;
+    -ms-border-radius: 0 0 4px 4px;
+    -o-border-radius: 0 0 4px 4px;
+    border-radius: 0 0 4px 4px;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu > li > a {
+    padding-left: 15px !important;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu > li > .sub-menu > li > a {
+    padding-left: 30px !important;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > .sub-menu > li > .sub-menu > li > .sub-menu > li > a {
+    padding-left: 45px !important;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.heading > h3 {
+    display: none;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-toggler-wrapper .sidebar-toggler {
+    margin-right: 8px;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-toggler-wrapper:hover {
+    width: 45px !important;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-search-wrapper:hover {
+    width: 45px !important;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a {
+    padding-left: 11px;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a .selected {
+    right: -3px !important;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a > .badge,
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a > .title,
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > a > .arrow {
+    display: none !important;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-toggler {
+    margin-left: 3px;
+    margin-right: 3px;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search .input-group {
+    border-color: transparent;
+    margin-left: -4px;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search .input-group .form-control {
+    display: none;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search .input-group .input-group-btn .btn {
+    display: block;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.sidebar-search-bordered .input-group {
+    padding: 5px 0 3px 0;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open {
+    height: 39px;
+    margin-top: 14px;
+    margin-bottom: 14px;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group {
+    width: 210px;
+    position: relative;
+    z-index: 1;
+    margin-left: 24px;
+    padding: 0;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group .form-control {
+    background: none;
+    border: 0;
+    display: block;
+    padding: 8px 8px;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group .input-group-btn .btn {
+    display: block;
+    margin-right: 8px;
+    margin-top: 1px;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .remove {
+    background-repeat: no-repeat;
+    width: 11px;
+    height: 11px;
+    margin: 9px -5px 9px -7px;
+    display: block;
+    float: left;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open.sidebar-search-bordered {
+    height: 36px;
+    margin-top: 23px;
+    margin-bottom: 23px;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open.sidebar-search-bordered .input-group {
+    padding: 0;
+  }
+  .page-sidebar-closed .page-sidebar .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-closed > li > a {
+    padding-right: 11px;
+    padding-left: 7px;
+  }
+  .page-sidebar-closed.page-sidebar-reversed .page-sidebar {
+    margin-left: -45px;
+    width: 45px;
+  }
+  .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed {
+    /* sidebar */
+    /* sidebar search */
+  }
+  .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li > .sub-menu {
+    left: auto;
+    right: 46px;
+  }
+  .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover {
+    margin-left: -211px;
+  }
+  .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a {
+    -webkit-border-radius: 4px 0 0 0;
+    -moz-border-radius: 4px 0 0 0;
+    -ms-border-radius: 4px 0 0 0;
+    -o-border-radius: 4px 0 0 0;
+    border-radius: 4px 0 0 0;
+  }
+  .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > .title {
+    padding-left: 0;
+    padding-right: 15px;
+  }
+  .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li:hover > a > i {
+    margin-right: 0;
+    margin-left: 2px;
+  }
+  .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-search-wrapper:hover, .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed > li.sidebar-toggler-wrapper:hover {
+    margin-left: 0;
+  }
+  .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group {
+    margin-left: -227px;
+  }
+  .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .input-group .input-group-btn .btn {
+    margin-right: 10px !important;
+  }
+  .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-closed .sidebar-search.open .remove {
+    margin: 9px 4px 12px -16px  !important;
+    float: right !important;
+  }
+  .page-sidebar-closed.page-sidebar-reversed .page-sidebar .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-closed > li > a {
+    padding-right: 7px;
+    padding-left: 11px;
+  }
+  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover {
+    width: 235px !important;
+    display: absolute;
+    z-index: 10000;
+  }
+  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu {
+    width: 235px !important;
+  }
+  .page-sidebar-closed.page-sidebar-fixed .page-sidebar:hover .page-sidebar-menu .selected {
+    display: none !important;
+  }
+  .page-sidebar-closed.page-sidebar-fixed.page-sidebar-reversed .page-sidebar:hover {
+    width: 235px !important;
+    display: absolute;
+    z-index: 10000;
+    margin-left: -235px !important;
+  }
+  .page-sidebar-closed.page-sidebar-fixed.page-sidebar-reversed .page-sidebar:hover .page-sidebar-menu {
+    width: 235px !important;
+  }
+  .page-sidebar-closed.page-sidebar-hide .page-sidebar {
+    display: none !important;
+  }
+
+  /* Sidebar Menu Wirh Hoverable Submenu */
+  .page-sidebar-menu.page-sidebar-menu-hover-submenu li .sub-menu {
+    display: none;
+    width: 210px;
+    z-index: 2000;
+    position: absolute;
+    -webkit-border-radius: 4px;
+    -moz-border-radius: 4px;
+    -ms-border-radius: 4px;
+    -o-border-radius: 4px;
+    border-radius: 4px;
+  }
+  .page-sidebar-menu.page-sidebar-menu-hover-submenu li .sub-menu > li > a {
+    margin: 3px;
+  }
+  .page-sidebar-menu.page-sidebar-menu-hover-submenu li.active .sub-menu, .page-sidebar-menu.page-sidebar-menu-hover-submenu li.open .sub-menu {
+    display: none !important;
+  }
+  .page-sidebar-menu.page-sidebar-menu-hover-submenu li a > .arrow {
+    display: none;
+  }
+  .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > a > .arrow {
+    display: block;
+    float: right;
+    position: absolute;
+    right: 0;
+    margin-top: -20px;
+    background: none;
+    width: 0;
+    height: 0;
+    border-style: solid;
+    border-top: 12px double transparent;
+    border-bottom: 12px double transparent;
+    border-left: 0;
+  }
+  .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > a > .arrow:after, .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > a > .arrow:before {
+    display: none;
+  }
+  .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > a > .arrow {
+    right: auto;
+    left: 0;
+    border-right: 0;
+  }
+  .page-sidebar-menu.page-sidebar-menu-hover-submenu li:hover > .sub-menu {
+    display: inline-block !important;
+  }
+  .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > a > .arrow {
+    z-index: 1;
+    right: 0px;
+    margin-top: -23px;
+  }
+  .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > a > .selected {
+    display: none;
+  }
+  .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu {
+    margin-left: 235px;
+    margin-top: -40px;
+  }
+  .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu {
+    margin-left: -210px !important;
+  }
+  .page-sidebar-closed .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu {
+    margin-left: 0;
+  }
+  .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu > li > a {
+    padding-left: 15px;
+  }
+  .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu > li .sub-menu {
+    margin-left: 210px;
+    margin-top: -38px !important;
+  }
+  .page-sidebar-reversed .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu > li .sub-menu {
+    margin-left: -210px !important;
+  }
+  .page-sidebar-menu.page-sidebar-menu-hover-submenu > li:hover > .sub-menu > li .sub-menu > li > a {
+    padding-left: 10px;
+    padding-right: 10px;
+  }
+
+  .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-hover-submenu li:hover > .sub-menu {
+    margin-top: -41px;
+  }
+  .page-sidebar-menu.page-sidebar-menu-light.page-sidebar-menu-hover-submenu li:hover > .sub-menu > li > .sub-menu {
+    margin-top: -41px;
+  }
+}
+@media (max-width: 991px) {
+  /* 991px */
+  .page-sidebar {
+    border-top: 0 !important;
+    margin: 20px;
+  }
+  .page-sidebar .sidebar-toggler {
+    display: none;
+  }
+  .page-sidebar .selected {
+    display: none !important;
+  }
+  .page-sidebar.navbar-collapse {
+    max-height: none;
+    /* set some max height to have a scrollable menu on mobile devices */
+  }
+  .page-sidebar.navbar-collapse.collapse {
+    display: none !important;
+  }
+  .page-sidebar.navbar-collapse.in {
+    border-top: 0 !important;
+    margin: 20px;
+    position: relative;
+    overflow: hidden !important;
+    overflow-y: auto !important;
+    display: block !important;
+  }
+  .page-sidebar.navbar-collapse.navbar-no-scroll {
+    max-height: none !important;
+  }
+  .page-sidebar .mega-menu-responsive-content {
+    padding: 10px 18px 10px 45px;
+  }
+
+  .page-full-width .page-sidebar-menu {
+    display: block;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  /* 768px & 991px */
+  .page-sidebar .btn-navbar.collapsed .arrow {
+    display: none;
+  }
+  .page-sidebar .btn-navbar .arrow {
+    position: absolute;
+    right: 25px;
+    width: 0;
+    height: 0;
+    top: 50px;
+    border-bottom: 15px solid #5f646b;
+    border-left: 15px solid transparent;
+    border-right: 15px solid transparent;
+  }
+}
+@media (max-width: 480px) {
+  /* 480px */
+  /* Page sidebar */
+  .page-sidebar,
+  .page-sidebar.in {
+    margin: 0 10px 10px 10px !important;
+  }
+  .page-header-fixed.page-header-fixed-mobile .page-sidebar, .page-header-fixed.page-header-fixed-mobile
+  .page-sidebar.in {
+    margin-top: 10px !important;
+  }
+}
+/******************
+Page Quick Sidebar
+******************/
+/***
+Quick Sidebar Layout
+***/
+/* Quick sidebar toggler */
+.page-header .top-menu .dropdown-quick-sidebar-toggler > .dropdown-toggle {
+  padding: 17px 10px 9px 10px !important;
+}
+.page-header .top-menu .dropdown-quick-sidebar-toggler > .dropdown-toggle i {
+  top: 0px;
+}
+.page-quick-sidebar-open .page-header .top-menu .dropdown-quick-sidebar-toggler > .dropdown-toggle i:before {
+  content: "\e066";
+}
+
+/* Quick sidebar wrapper */
+.page-quick-sidebar-wrapper {
+  transition: right 0.3s;
+  z-index: 9994;
+  position: fixed;
+  top: 46px;
+  bottom: 0;
+  right: -270px;
+  width: 270px;
+}
+
+/* Quick sidebar wrapper */
+.page-quick-sidebar-wrapper.phonebar{
+  top: 0px;
+}
+
+.page-footer-fixed .page-quick-sidebar-wrapper {
+  bottom: 33px;
+}
+.page-quick-sidebar-full-height .page-quick-sidebar-wrapper {
+  top: 0;
+  bottom: 0;
+}
+.page-quick-sidebar-open .page-quick-sidebar-wrapper {
+  transition: right 0.3s;
+  right: 0;
+}
+
+/***
+Quick Sidebar Toggler
+***/
+.page-quick-sidebar-toggler {
+  overflow: hidden;
+  z-index: 9994;
+  display: none;
+  width: 28px;
+  height: 27px;
+  position: fixed;
+  top: 19px;
+  right: 15px;
+  text-align: center;
+  padding-top: 6px;
+}
+.page-quick-sidebar-open .page-quick-sidebar-toggler {
+  display: inline-block;
+}
+.page-quick-sidebar-toggler > i {
+  font-size: 17px;
+}
+
+/* quick sidebar top position fix for mobile view */
+@media (max-width: 480px) {
+  /* 480px */
+  .page-quick-sidebar-wrapper {
+    top: 92px;
+  }
+
+  .page-quick-sidebar-toggler {
+    top: 65px;
+  }
+}
+.page-header,
+.page-sidebar-wrapper,
+.page-content-wrapper,
+.page-footer {
+  transition: margin 0.3s;
+}
+
+/* Quick sidebar with push content */
+.page-quick-sidebar-open.page-quick-sidebar-push-content .page-sidebar-wrapper {
+  transition: margin-left 0.3s;
+  margin-left: -270px;
+}
+.page-quick-sidebar-open.page-quick-sidebar-push-content .page-content-wrapper {
+  transition: margin-left 0.3s;
+  margin-left: -270px;
+}
+.page-quick-sidebar-open.page-quick-sidebar-push-content .page-footer {
+  transition: margin-right 0.3s;
+  margin-right: 270px;
+  margin-left: -270px;
+}
+
+/* Page sidebar reversed */
+.page-sidebar-reversed.page-quick-sidebar-open.page-quick-sidebar-push-content .page-sidebar-wrapper {
+  transition: margin-right 0.3s;
+  margin-right: 270px;
+}
+
+/* Quick sidebar with full height content */
+.page-quick-sidebar-open.page-quick-sidebar-push-content.page-quick-sidebar-full-height .page-header {
+  transition: margin-left 0.3s;
+  margin-left: -270px;
+}
+
+.page-quick-sidebar-open.page-quick-sidebar-push-content.page-footer-fixed:not(.page-quick-sidebar-full-height) .page-footer {
+  margin-left: 0;
+  margin-right: 0;
+}
+
+/* Quick sidebar with transparent content */
+.page-quick-sidebar-open.page-quick-sidebar-over-content-transparent .page-quick-sidebar-wrapper {
+  opacity: 0.9;
+  filter: alpha(opacity=90);
+}
+
+/* Hide the responsive menu if its shown while the quick sidebar opened on mobile  */
+@media (max-width: 991px) {
+  /* 991px */
+  .page-quick-sidebar-open.page-quick-sidebar-push-content .page-sidebar-wrapper {
+    display: none;
+  }
+}
+/***
+Quick Sidebar Content
+***/
+.page-quick-sidebar-wrapper {
+  overflow: hidden;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar {
+  /* Quick sidebar tabs */
+  /* Quick sidebar tabs content */
+  /* Quick sidebar general list heading */
+  /* Quick sidebar general list-items */
+  /* Inner content */
+  /* Quick sidebar list */
+  /* Quick sidebar list item */
+  /* Quick sidebar list item shown */
+  /* Quick sidebar chat */
+  /* Quick sidebar alerts */
+  /* Quick sidebar settings */
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified {
+  margin: 0;
+  padding: 0;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li {
+  display: table-cell !important;
+  width: 1%  !important;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li > a {
+  padding: 15px 15px;
+  border: 0;
+  height: 46px;
+  font-size: 13px;
+  text-transform: uppercase;
+  -webkit-border-radius: 0;
+  -moz-border-radius: 0;
+  -ms-border-radius: 0;
+  -o-border-radius: 0;
+  border-radius: 0;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li > a > .badge {
+  position: absolute;
+  top: 12px;
+  right: 3px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li > a:hover {
+  border: 0;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu {
+  margin-top: 8px;
+  margin-right: 20px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu:before {
+  position: absolute;
+  top: -7px;
+  right: 19px;
+  display: inline-block !important;
+  border-right: 7px solid transparent;
+  border-left: 7px solid transparent;
+  border-bottom-color: rgba(0, 0, 0, 0.2);
+  content: '';
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > li .dropdown-menu:after {
+  position: absolute;
+  top: -6px;
+  right: 20px;
+  display: inline-block !important;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #fff;
+  border-left: 6px solid transparent;
+  content: '';
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .nav-justified > .tab-content {
+  margin: 0;
+  padding: 0;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .list-heading {
+  font-size: 16px;
+  margin: 10px 10px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .list-items {
+  margin: 0;
+  padding: 0;
+  list-style: none;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .list-items > li {
+  margin: 0;
+  padding: 10px;
+  background: none;
+  border-bottom-width: 1px;
+  border-bottom-style: solid;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .list-items > li:last-child {
+  border-bottom: 0;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .list-items.borderless li {
+  border: 0;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .inner-content {
+  margin: 10px 10px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-list {
+  position: absolute !important;
+  width: 270px !important;
+  transition: margin 0.3s;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item {
+  position: absolute !important;
+  width: 270px !important;
+  transition: margin 0.3s;
+  margin-left: 270px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item .page-quick-sidebar-nav {
+  padding: 0px 10px 5px 10px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item .page-quick-sidebar-nav .page-quick-sidebar-back-to-list {
+  vertical-align: middle;
+  display: inline-block;
+  font-size: 14px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-item .page-quick-sidebar-nav .page-quick-sidebar-back-to-list > i {
+  font-size: 17px;
+  line-height: 17px;
+  vertical-align: top;
+  margin-right: 3px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-list {
+  transition: margin 0.3s;
+  margin-left: -270px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-list .slimScrollBar,
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-list .slimScrollRail {
+  display: none !important;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-content-item-shown .page-quick-sidebar-item {
+  transition: margin 0.3s;
+  margin-left: 0;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users {
+  padding: 10px 0;
+  position: relative;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media {
+  padding: 12px 10px 11px 10px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object {
+  border-radius: 50% !important;
+  width: 38.57143px;
+  opacity: 0.8;
+  filter: alpha(opacity=80);
+  float: left;
+  margin-right: 10px;
+}
+/* Giuseppe Careri quicksidebar-search */
+.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-users .quicksidebar-search {
+  padding: 0;
+  margin: 10px 22px 10px 22px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-users .quicksidebar-search .input-group .form-control{
+  border: 0;
+  font-size: 14px;
+  padding: 0;
+  height: auto;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar-chat .page-quick-sidebar-chat-users .quicksidebar-search .input-group .input-group-btn .btn{
+  padding: 2px 0 0 0;
+background-color: transparent;
+background-repeat: no-repeat;
+background-position: 100% 3px;
+}
+/* end quicksidebar-search */
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object:before, .page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object:after {
+  content: " ";
+  display: table;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-object:after {
+  clear: both;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media:hover {
+  cursor: pointer;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media:hover .media-object {
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading {
+  margin: 5px 0 0 0;
+  font-size: 14px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading-sub {
+  font-size: 11px;
+  text-transform: uppercase;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-body .media-heading-small {
+  font-size: 10px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-users .media-list .media .media-status {
+  margin-top: 10px;
+  right: 10px;
+  position: absolute;
+  display: inline-block;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages {
+  padding: 0px 10px;
+  position: relative;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post {
+  transition: display 0.3s;
+  padding: 5px 0;
+  margin: 10px auto;
+  font-size: 12px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .body {
+  display: block;
+  word-wrap: break-word;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .avatar {
+  width: 38.57143px;
+  border-radius: 50% !important;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .avatar {
+  float: left;
+  margin-right: 10px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .avatar {
+  float: right;
+  margin-left: 10px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .name {
+  font-size: 12px;
+  font-weight: 300;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .datetime {
+  font-size: 12px;
+  font-weight: 300;
+  text-style: italic;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post .message {
+  display: block;
+  padding: 5px;
+  position: relative;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .message {
+  text-align: left;
+  margin-left: 55px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.in .message .arrow {
+  display: block;
+  position: absolute;
+  top: 9px;
+  left: -6px;
+  width: 0;
+  height: 0;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-right-width: 6px;
+  border-right-style: solid;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .message {
+  margin-right: 55px;
+  text-align: right;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .message .arrow {
+  display: block;
+  position: absolute;
+  top: 9px;
+  right: -6px;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-left-width: 6px;
+  border-left-style: solid;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .name,
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-messages .post.out .datetime {
+  text-align: right;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-form {
+  padding: 20px 10px 15px 10px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-chat .page-quick-sidebar-chat-user .page-quick-sidebar-chat-user-form .input-group .form-control {
+  font-size: 13px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list {
+  padding: 10px 0;
+  position: relative;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li .label {
+  margin-top: 5px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-alerts .page-quick-sidebar-alerts-list .feeds li .desc {
+  padding: 0;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list {
+  padding: 10px 0;
+  position: relative;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list .list-items li .bootstrap-switch {
+  margin-top: -3px;
+  float: right;
+  border: 0;
+  min-width: 59px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list .list-items li .form-control {
+  width: 75px !important;
+  padding: 4px 4px !important;
+  float: right;
+  border: 0;
+  margin-top: -4px;
+}
+.page-quick-sidebar-wrapper .page-quick-sidebar .page-quick-sidebar-settings .page-quick-sidebar-settings-list .list-items li select.form-control {
+  padding: 4px 0px !important;
+}
+
+/***
+Page content
+***/
+/* Page title */
+.page-title {
+  padding: 0px;
+  font-size: 28px;
+  letter-spacing: -1px;
+  display: block;
+  color: #666;
+  margin: 0px 0px 15px 0px;
+  font-weight: 300;
+  font-family: "Open Sans", sans-serif;
+  /* subtitle */
+}
+.page-title small {
+  font-size: 14px;
+  letter-spacing: 0px;
+  font-weight: 300;
+  color: #888;
+}
+.page-container-bg-solid .page-title {
+  color: #666;
+  margin-bottom: 20px;
+  margin-top: 20px;
+}
+.page-container-bg-solid .page-title small {
+  color: #666;
+}
+
+/* Page breadcrumb */
+.page-bar {
+  padding: 0px;
+  background-color: #f7f7f7;
+  margin-bottom: 25px;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+.page-bar:before, .page-bar:after {
+  content: " ";
+  display: table;
+}
+.page-bar:after {
+  clear: both;
+}
+.page-bar .page-breadcrumb {
+  display: inline-block;
+  float: left;
+  padding: 8px;
+  margin: 0;
+  list-style: none;
+}
+.page-bar .page-breadcrumb > li {
+  display: inline-block;
+}
+.ie8 .page-bar .page-breadcrumb > li {
+  margin-right: 1px;
+}
+.page-bar .page-breadcrumb > li > a,
+.page-bar .page-breadcrumb > li > span {
+  color: #888;
+  font-size: 14px;
+  text-shadow: none;
+}
+.page-bar .page-breadcrumb > li > i {
+  color: #aaa;
+  font-size: 14px;
+  text-shadow: none;
+}
+.page-bar .page-breadcrumb > li > i[class^="icon-"],
+.page-bar .page-breadcrumb > li > i[class*="icon-"] {
+  color: gray;
+}
+.page-bar .page-toolbar {
+  display: inline-block;
+  float: right;
+  padding: 0;
+}
+.page-bar .page-toolbar .btn-fit-height {
+  -webkit-border-radius: 0 4px 4px 0;
+  -moz-border-radius: 0 4px 4px 0;
+  -ms-border-radius: 0 4px 4px 0;
+  -o-border-radius: 0 4px 4px 0;
+  border-radius: 0 4px 4px 0;
+  padding-top: 8px;
+  padding-bottom: 8px;
+}
+.page-container-bg-solid .page-bar {
+  position: relative;
+  padding: 0px 20px;
+  background-color: #ffffff;
+  margin: -25px -20px 0 -20px;
+}
+.page-container-bg-solid .page-bar .page-breadcrumb {
+  padding: 11px 0;
+}
+.page-container-bg-solid .page-bar .page-breadcrumb > li > a,
+.page-container-bg-solid .page-bar .page-breadcrumb > li > span {
+  color: #888;
+}
+.page-container-bg-solid .page-bar .page-breadcrumb > li > i {
+  color: #aaa;
+}
+.page-container-bg-solid .page-bar .page-breadcrumb > li > i[class^="icon-"],
+.page-container-bg-solid .page-bar .page-breadcrumb > li > i[class*="icon-"] {
+  color: #8c8c8c;
+}
+.page-container-bg-solid .page-bar .page-toolbar {
+  padding: 6px 0;
+}
+.page-container-bg-solid .page-bar .page-toolbar .btn {
+  margin-top: -2px;
+}
+.page-container-bg-solid .page-bar .page-toolbar .btn.btn-sm {
+  margin-top: 0px;
+}
+
+/* Page content */
+.page-content {
+  margin-top: 0px;
+  padding: 0px;
+  background-color: #fff;
+}
+.page-container-bg-solid .page-content {
+  background: #F1F3FA;
+}
+.page-full-width .page-content {
+  margin-left: 0px !important;
+}
+
+@media (min-width: 992px) {
+  /* 992px */
+  /* Page content */
+  .page-content-wrapper {
+    float: left;
+    width: 100%;
+  }
+  .page-content-wrapper .page-content {
+    margin-left: 235px;
+    margin-top: 0px;
+    min-height: 600px;
+    padding: 25px 20px 10px 20px;
+  }
+  .page-content-wrapper .page-content.no-min-height {
+    min-height: auto;
+  }
+  .page-sidebar-fixed.page-sidebar-hover-on .page-content-wrapper .page-content {
+    margin-left: 45px;
+  }
+  .page-sidebar-reversed .page-content-wrapper .page-content {
+    margin-left: 0 !important;
+    margin-right: 235px !important;
+  }
+  .page-sidebar-reversed.page-sidebar-fixed.page-sidebar-hover-on .page-content-wrapper .page-content {
+    margin-left: 0;
+    margin-right: 45px;
+  }
+  .page-sidebar-reversed.page-sidebar-closed .page-content-wrapper .page-content {
+    margin-left: 0 !important;
+    margin-right: 45px !important;
+  }
+  .page-sidebar-closed .page-content-wrapper .page-content {
+    margin-left: 45px !important;
+  }
+  .page-sidebar-closed.page-sidebar-hide .page-content-wrapper .page-content {
+    margin-left: 0 !important;
+  }
+  .page-sidebar-closed.page-sidebar-reversed.page-sidebar-hide .page-content-wrapper .page-content {
+    margin-right: 0 !important;
+  }
+  .page-full-width .page-content-wrapper .page-content {
+    margin-left: 0px !important;
+  }
+}
+@media (max-width: 991px) {
+  /* 991px */
+  /* Bg solid content's breadcrumb */
+  .page-container-bg-solid .page-bar {
+    margin-top: -20px;
+  }
+
+  /* Boxed page container  */
+  .page-boxed > .container {
+    max-width: none !important;
+    margin: 0 !important;
+    padding: 0 !important;
+  }
+
+  /* Page content */
+  .page-content-wrapper .page-content {
+    margin: 0px !important;
+    padding: 20px 20px 20px 20px !important;
+    min-height: 280px;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  /*  768px & 991px */
+  /* Boxed page container */
+  .page-boxed > .container {
+    margin: auto !important;
+  }
+}
+@media (max-width: 767px) {
+  /* 767px */
+  /* Page content */
+  .page-content-wrapper .page-content {
+    padding: 20px 10px 10px 10px !important;
+    overflow: hidden;
+    /* Page title */
+  }
+  .page-content-wrapper .page-content .page-title {
+    margin-bottom: 20px;
+    font-size: 18px;
+  }
+  .page-content-wrapper .page-content .page-title small {
+    font-size: 13px;
+    padding-top: 3px;
+  }
+}
+@media (max-width: 480px) {
+  /* 480px */
+  /* Dashboard date range panel */
+  .page-content-wrapper .page-content .page-title small {
+    display: block;
+    clear: both;
+  }
+}
+/***
+Page footer
+***/
+.page-footer {
+  padding: 8px 20px 5px 20px;
+  font-size: 12px;
+  height: 33px;
+}
+.page-footer:before, .page-footer:after {
+  content: " ";
+  display: table;
+}
+.page-footer:after {
+  clear: both;
+}
+.page-footer .page-footer-inner {
+  float: left;
+  display: inline-block;
+}
+.page-footer-fixed.page-footer-fixed-mobile .page-footer {
+  position: fixed;
+  left: 0;
+  right: 0;
+  z-index: 10000;
+  bottom: 0;
+}
+.page-footer-fixed.page-footer-fixed-mobile.page-sidebar-fixed .page-footer {
+  margin-left: 0 !important;
+}
+
+@media (min-width: 992px) {
+  /* 992px */
+  /* Default footer */
+  .page-footer {
+    clear: left;
+  }
+
+  /* Fixed footer */
+  .page-footer-fixed .page-footer {
+    position: fixed;
+    left: 0;
+    right: 0;
+    z-index: 10000;
+    bottom: 0;
+  }
+
+  /* Footer with footer sidebar */
+  .page-sidebar-fixed.page-sidebar-closed .page-footer {
+    margin-left: 45px;
+  }
+  .page-sidebar-fixed.page-footer-fixed .page-footer {
+    margin-left: 0 !important;
+  }
+
+  /* Fixed Sidebar */
+  .page-sidebar-fixed .page-footer {
+    margin-left: 235px;
+    padding: 8px 20px 5px 20px;
+  }
+
+  /* Boxed page */
+  .page-boxed .page-footer {
+    padding: 8px 0 5px 0;
+  }
+  .page-boxed.page-sidebar-fixed .page-footer {
+    padding-right: 20px;
+    padding-left: 20px;
+  }
+
+  /* Page sidebar reversed */
+  .page-sidebar-reversed.page-sidebar-fixed .page-footer {
+    margin-left: 0;
+    margin-right: 235px;
+    padding: 8px 20px 5px 20px;
+  }
+  .page-sidebar-reversed.page-sidebar-fixed.page-footer-fixed .page-footer {
+    margin-left: 0;
+    margin-right: 0;
+  }
+  .page-sidebar-reversed.page-sidebar-fixed.page-sidebar-closed .page-footer {
+    margin-right: 45px;
+  }
+}
+@media (max-width: 991px) {
+  /* 991px */
+  /* Boxed Layout */
+  .page-boxed .page-footer {
+    padding-left: 0px;
+    padding-right: 0px;
+  }
+}
+@media (max-width: 767px) {
+  /* 767px */
+  /* Default footer & boxed footer */
+  .page-footer,
+  .page-boxed .page-footer {
+    padding-left: 10px;
+    padding-right: 10px;
+  }
+
+  /* Fixed footer */
+  .page-footer-fixed .page-footer .container {
+    padding-left: 0;
+    padding-right: 0;
+  }
+}
+/* Scroll Top Top */
+.scroll-to-top {
+  display: inline-block;
+  padding: 1px;
+  text-align: center;
+  position: fixed;
+  bottom: 10px;
+  z-index: 10001;
+  display: none;
+  right: 10px;
+}
+.scroll-to-top > i {
+  display: inline-block;
+  color: #687991;
+  font-size: 30px;
+  opacity: 0.6;
+  filter: alpha(opacity=60);
+}
+.scroll-to-top:hover {
+  cursor: pointer;
+}
+.scroll-to-top:hover > i {
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+
+@media (min-width: 992px) {
+  /* 992px */
+  .scroll-to-top {
+    right: 20px;
+  }
+}
+@media (max-width: 991px) {
+  /* 991px */
+  .scroll-to-top {
+    bottom: 10px;
+    right: 10px;
+  }
+  .scroll-to-top > i {
+    font-size: 28px;
+  }
+}
+/***
+Theme Panel
+***/
+.theme-panel {
+  width: 420px;
+  margin-top: -13px;
+  margin-right: 0px;
+  z-index: 100;
+  float: right;
+  position: relative;
+  /* content solid bg color */
+}
+.theme-panel > .toggler {
+  top: 4px;
+  right: 0;
+  padding: 20px;
+  cursor: pointer;
+  position: absolute;
+  background: #d5dade url(../img/icon-color.png) center no-repeat;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+.theme-panel > .toggler:hover {
+  background-color: #3d3d3d !important;
+}
+.theme-panel > .toggler-close {
+  display: none;
+  top: 4px;
+  right: 0;
+  padding: 20px;
+  z-index: 101;
+  cursor: pointer;
+  position: absolute;
+  background: #3d3d3d url(../img/icon-color-close.png) center no-repeat !important;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+.theme-panel > .toggler-close:hover {
+  background-color: #222 !important;
+}
+.theme-panel > .theme-options {
+  top: 4px;
+  right: 0;
+  display: none;
+  position: absolute;
+  z-index: 100;
+  background: #3d3d3d;
+  box-shadow: 5px 5px rgba(61, 61, 61, 0.1);
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+.theme-panel > .theme-options > .theme-option {
+  color: #cfcfcf;
+  padding: 10px;
+  border-top: 1px solid #444;
+  margin-top: 0px;
+  margin-bottom: 0px;
+}
+.theme-panel > .theme-options > .theme-option > span {
+  text-transform: uppercase;
+  display: inline-block;
+  width: 145px;
+  font-size: 13px;
+  font-weight: 300;
+}
+.theme-panel > .theme-options > .theme-option > select.form-control {
+  display: inline;
+  width: 135px;
+  padding: 2px;
+  text-transform: lowercase;
+}
+.theme-panel > .theme-options > .theme-option.theme-colors {
+  border-top: 0;
+}
+.theme-panel > .theme-options > .theme-option.theme-colors > span {
+  display: block;
+  width: auto;
+}
+.theme-panel > .theme-options > .theme-option.theme-colors > ul {
+  list-style: none;
+  padding: 0;
+  display: block;
+  margin-bottom: 10px !important;
+  margin-top: 15px;
+}
+.theme-panel > .theme-options > .theme-option.theme-colors > ul > li {
+  width: 40px;
+  height: 40px;
+  margin: 0 4px;
+  cursor: pointer;
+  list-style: none;
+  float: left;
+  border: solid 1px #707070;
+  /* theme colors */
+}
+.theme-panel > .theme-options > .theme-option.theme-colors > ul > li:first-child {
+  margin-left: 0;
+}
+.theme-panel > .theme-options > .theme-option.theme-colors > ul > li:hover, .theme-panel > .theme-options > .theme-option.theme-colors > ul > li.current {
+  border: solid 2px #d64635;
+}
+.theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-default {
+  background: #333438;
+}
+.theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-darkblue {
+  background: #2b3643;
+}
+.theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-blue {
+  background: #2D5F8B;
+}
+.theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-grey {
+  background: #697380;
+}
+.theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-light {
+  background: #F9FAFD;
+}
+.theme-panel > .theme-options > .theme-option.theme-colors > ul > li.color-light2 {
+  background: #F1F1F1;
+}
+.page-container-bg-solid .theme-panel {
+  position: absolute;
+  margin-top: 30px;
+  margin-right: 20px;
+  right: 0;
+}
+.page-container-bg-solid .theme-panel > .toggler {
+  background: #BFCAD1 url(../img/icon-color.png) center no-repeat;
+}
+.page-container-bg-solid.page-sidebar-reversed .theme-panel {
+  margin-right: 255px;
+}
+
+/***
+Page Loading
+***/
+.page-on-load {
+  background: #fefefe;
+}
+.page-on-load .page-header,
+.page-on-load .page-container,
+.page-on-load .page-footer,
+.page-on-load > .clearfix {
+  display: none;
+  transition: all 2s;
+}
diff --git a/public/assets/css/global/plugins.css b/public/assets/css/global/plugins.css
new file mode 100644
index 0000000..0fc5f9c
--- /dev/null
+++ b/public/assets/css/global/plugins.css
@@ -0,0 +1,2320 @@
+/******************************
+ 3RD PARTY PLUGIN CUSTOMIZATION
+******************************/
+/***
+Bootstrap Colorpicker
+***/
+.input-group.color .input-group-btn i {
+  position: absolute;
+  display: block;
+  cursor: pointer;
+  width: 20px;
+  height: 20px;
+  right: 6px;
+}
+
+.colorpicker.dropdown-menu {
+  padding: 5px;
+}
+
+/* change z-index when opened in modal */
+.modal-open .colorpicker {
+  z-index: 10055 !important;
+}
+
+/***
+Bootstrap Datepaginator
+***/
+.datepaginator a {
+  font-family: 'Open Sans';
+  font-size: 13px;
+  font-weight: 300;
+}
+
+.datepicker .today {
+  background-image: none !important;
+  filter: none !important;
+}
+
+#dp-calendar {
+  right: 4px !important;
+}
+
+.datepaginator .fa-angle-right:before {
+  content: "\f105";
+}
+
+.datepaginator .fa-angle-left:before {
+  content: "\f104";
+}
+
+/***
+Bootstrap Datepicker
+***/
+.datepicker.dropdown-menu {
+  padding: 5px;
+}
+
+.datepicker .selected {
+  background-color: #909090 !important;
+  background-image: none !important;
+  filter: none !important;
+}
+
+.datepicker .active {
+  background-color: #4b8df8 !important;
+  background-image: none !important;
+  filter: none !important;
+}
+
+.datepicker .active:hover {
+  background-color: #2678FC !important;
+  background-image: none !important;
+  filter: none !important;
+}
+
+.datepicker .input-daterange input {
+  text-align: left;
+}
+
+/* change z-index when opened in modal */
+.modal-open .datepicker {
+  z-index: 10055 !important;
+}
+
+.datepicker table td {
+  color: #000;
+  font-weight: 300  !important;
+  font-family: 'Open Sans' !important;
+}
+
+.datepicker table th {
+  color: #333;
+  font-family: 'Open Sans' !important;
+  font-weight: 400  !important;
+}
+
+.datepicker.dropdown-menu {
+  box-shadow: 5px 5px rgba(102, 102, 102, 0.1);
+  border: 1px solid #efefef;
+}
+
+/***
+Bootstrap Daterangepicker
+***/
+.modal-open .daterangepicker {
+  z-index: 10055 !important;
+}
+
+.daterangepicker {
+  margin-top: 4px;
+}
+
+.daterangepicker td {
+  text-shadow: none;
+}
+
+.daterangepicker td.active {
+  background-color: #4b8df8;
+  background-image: none;
+  filter: none;
+}
+
+.daterangepicker th {
+  font-weight: 400;
+  font-size: 14px;
+}
+
+.daterangepicker .ranges input[type="text"] {
+  width: 70px !important;
+  font-size: 11px;
+  vertical-align: middle;
+}
+
+.daterangepicker .ranges label {
+  font-weight: 300;
+  display: block;
+}
+
+.daterangepicker .ranges .btn {
+  margin-top: 10px;
+}
+
+.daterangepicker.dropdown-menu {
+  padding: 5px;
+}
+
+.daterangepicker .ranges li {
+  color: #333;
+}
+
+.daterangepicker .ranges li.active,
+.daterangepicker .ranges li:hover {
+  background: #4b8df8 !important;
+  border: 1px solid #4b8df8 !important;
+  color: #fff;
+}
+
+.daterangepicker .range_inputs input {
+  margin-bottom: 0 !important;
+}
+
+.daterangepicker .fa-angle-right:before {
+  content: "\f105";
+}
+
+.daterangepicker .fa-angle-left:before {
+  content: "\f104";
+}
+
+/***
+Bootstrap  Datetimepicker
+***/
+.datetimepicker table td {
+  color: #000;
+  font-weight: 300  !important;
+  font-family: 'Open Sans' !important;
+}
+
+.datetimepicker table th {
+  font-family: 'Open Sans' !important;
+  font-weight: 400  !important;
+}
+
+.datetimepicker.dropdown-menu {
+  padding: 5px;
+}
+
+.datetimepicker .active {
+  background-color: #4b8df8 !important;
+  background-image: none !important;
+  filter: none !important;
+}
+
+.datetimepicker .active:hover {
+  background-color: #2678FC !important;
+  background-image: none !important;
+  filter: none !important;
+}
+
+.datetimepicker .fa-angle-left:before {
+  content: "\f104";
+}
+
+.datetimepicker .fa-angle-right:before {
+  content: "\f105";
+}
+
+/* change z-index when opened in modal */
+.modal-open .datetimepicker {
+  z-index: 10055 !important;
+}
+
+/***
+Bootstrap Editable
+***/
+.editable-input table,
+.editable-input table th,
+.editable-input table td,
+.editable-input table tr {
+  border: 0 !important;
+}
+
+.editable-input .combodate select {
+  margin-bottom: 5px;
+}
+
+/***
+Jansy File Input plugin css changes
+***/
+.fileinput {
+  margin-bottom: 0;
+}
+.fileinput .close {
+  float: none;
+}
+.fileinput .input-group {
+  white-space: nowrap;
+  overflow: hidden;
+}
+
+/***
+Bootstrap Markdown
+***/
+.md-input {
+  padding: 5px !important;
+  border-bottom: 0 !important;
+  -webkit-border-radius: 0 0 4px 4px;
+  -moz-border-radius: 0 0 4px 4px;
+  -ms-border-radius: 0 0 4px 4px;
+  -o-border-radius: 0 0 4px 4px;
+  border-radius: 0 0 4px 4px;
+}
+
+.md-editor {
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+.md-editor .btn-toolbar {
+  margin-left: 0px;
+  -webkit-border-radius: 4px 4px 0 0;
+  -moz-border-radius: 4px 4px 0 0;
+  -ms-border-radius: 4px 4px 0 0;
+  -o-border-radius: 4px 4px 0 0;
+  border-radius: 4px 4px 0 0;
+}
+.md-editor .btn-toolbar .btn-group .btn-sm.btn {
+  padding-bottom: 3px;
+}
+.md-editor .btn-toolbar .btn-group .btn-primary {
+  padding-top: 5px;
+  padding-bottom: 7px;
+}
+
+.md-editor.active {
+  border: 1px solid #999999;
+  -webkit-box-shadow: none !important;
+  -moz-box-shadow: none !important;
+  box-shadow: none !important;
+}
+
+/***
+Error state for WYSIWYG Editors
+***/
+.has-error .md-editor {
+  border: 1px solid #ebccd1 !important;
+}
+
+.has-success .md-editor {
+  border: 1px solid #d6e9c6 !important;
+}
+
+.has-warning .md-editor {
+  border: 1px solid #faebcc !important;
+}
+
+/***
+Bootstrap Modal
+***/
+/* fix: content shifting to the right on modal open */
+.modal-open.page-overflow .page-container,
+.modal-open.page-overflow .page-container .navbar-fixed-top,
+.modal-open.page-overflow .page-container .navbar-fixed-bottom,
+.modal-open.page-overflow .modal-scrollable {
+  overflow-y: auto !important;
+}
+
+.modal-scrollable {
+  overflow: hidden !important;
+}
+
+/* BS 3.3.1 fix */
+.modal-backdrop {
+  position: fixed;
+  bottom: 0;
+}
+
+/***
+Bootstrap Select
+***/
+.bootstrap-select .btn {
+  border-color: #e5e5e5;
+}
+
+.has-error .bootstrap-select .btn {
+  border-color: #ebccd1;
+}
+
+.has-success .bootstrap-select .btn {
+  border-color: #d6e9c6;
+}
+
+.has-warning .bootstrap-select .btn {
+  border-color: #faebcc;
+}
+
+.bootstrap-select.open .btn {
+  border-color: #999;
+}
+
+.bootstrap-select.open.dropup .btn {
+  border-color: #999;
+}
+
+.bootstrap-select .btn:focus {
+  outline: none !important;
+  outline-offset: 0;
+}
+
+.bootstrap-select.btn-group .dropdown-menu {
+  margin-top: 1px;
+}
+
+.bootstrap-select.btn-group .dropdown-menu > li > dt > .text {
+  font-weight: 600;
+  font-family: 'Open Sans';
+  font-size: 14px;
+}
+
+.bootstrap-select.btn-group .dropdown-menu .text-muted {
+  color: #999 !important;
+}
+
+.bootstrap-select .caret {
+  border: 0;
+  width: auto;
+  height: auto;
+  margin-top: -10px !important;
+}
+
+.bootstrap-select .caret:before {
+  content: "\f107";
+  display: inline-block;
+  border: 0;
+  font-family: FontAwesome;
+  font-style: normal;
+  font-weight: normal;
+}
+
+.bootstrap-select .selected i {
+  color: #aaa;
+}
+
+.bootstrap-select .dropdown-menu {
+  z-index: 9999 !important;
+}
+
+/***
+Bootstrap Switch
+***/
+.bootstrap-switch {
+  border-color: #e5e5e5;
+}
+.bootstrap-switch.bootstrap-switch-focused {
+  box-shadow: none;
+  border-color: #e5e5e5;
+}
+
+/***
+Color variants
+***/
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary {
+  color: #fff;
+  background: #428bca;
+}
+
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info {
+  color: #fff;
+  background: #89C4F4;
+}
+
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success {
+  color: #fff;
+  background: #45B6AF;
+}
+
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning {
+  color: #fff;
+  background: #dfba49;
+}
+
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger {
+  color: #fff;
+  background: #F3565D;
+}
+
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default {
+  color: #444;
+  background: #ececec;
+}
+
+/* Bootstrap switch on portlet headers */
+.portlet > .portlet-title > .actions > .bootstrap-switch {
+  border-color: transparent;
+  margin-top: 0px;
+}
+
+/***
+Bootstrap Time Picker
+***/
+.bootstrap-timepicker-widget table td a {
+  padding: 4px 0;
+}
+
+.bootstrap-timepicker-widget input,
+.bootstrap-timepicker-widget input:focus {
+  outline: none !important;
+  border: 0;
+}
+
+.modal-open .bootstrap-timepicker-widget {
+  z-index: 10055 !important;
+}
+
+.bootstrap-timepicker-widget.timepicker-orient-bottom:before,
+.bootstrap-timepicker-widget.timepicker-orient-bottom:after {
+  top: auto;
+}
+
+/***
+Toastr Notifications
+***/
+.toast {
+  -webkit-box-shadow: none !important;
+  -moz-box-shadow: none !important;
+  box-shadow: none !important;
+}
+
+.toast {
+  background-color: #030303;
+}
+
+.toast-success {
+  background-color: #51a351;
+}
+
+.toast-error {
+  background-color: #bd362f;
+}
+
+.toast-info {
+  background-color: #2f96b4;
+}
+
+.toast-warning {
+  background-color: #f89406;
+}
+
+.toast .toast-close-button {
+  display: inline-block;
+  margin-top: 0px;
+  margin-right: 0px;
+  text-indent: -100000px;
+  width: 11px;
+  height: 16px;
+  background-repeat: no-repeat !important;
+  background-image: url("../../images/portlet-remove-icon-white.png") !important;
+}
+
+.toast-top-center {
+  top: 12px;
+  margin: 0 auto;
+  left: 50%;
+  margin-left: -150px;
+}
+
+.toast-bottom-center {
+  bottom: 12px;
+  margin: 0 auto;
+  left: 50%;
+  margin-left: -150px;
+}
+
+/***
+Bootstrap Wizard
+***/
+.form-wizard .progress {
+  margin-bottom: 30px;
+}
+.form-wizard .steps {
+  padding: 10px 0;
+  margin-bottom: 15px;
+  background-color: #fff;
+  background-image: none;
+  filter: none;
+  border: 0px;
+  box-shadow: none;
+}
+.form-wizard .steps > li > a.step {
+  background-color: #fff;
+  background-image: none;
+  filter: none;
+  border: 0px;
+  box-shadow: none;
+}
+.form-wizard .steps > li > a.step:hover {
+  background: none;
+}
+.form-wizard .steps > li > a.step > .number {
+  background-color: #eee;
+  display: inline-block;
+  text-align: center !important;
+  font-size: 16px;
+  font-weight: 300;
+  padding: 11px 15px 13px 15px;
+  margin-right: 10px;
+  height: 45px;
+  width: 45px;
+  -webkit-border-radius: 50% !important;
+  -moz-border-radius: 50% !important;
+  border-radius: 50% !important;
+}
+.form-wizard .steps > li > a.step > .desc {
+  display: inline-block;
+  font-size: 16px;
+  font-weight: 300;
+}
+.form-wizard .steps > li > a.step > .desc > i {
+  display: none;
+}
+.form-wizard .steps > li.active > a.step .number {
+  background-color: #45B6AF;
+  color: #fff;
+}
+.form-wizard .steps > li.active > a.step .desc {
+  color: #333;
+}
+.form-wizard .steps > li.done > a.step .number {
+  background-color: #dfba49;
+  color: #fff;
+}
+.form-wizard .steps > li.done > a.step .desc {
+  color: #333;
+}
+.form-wizard .steps > li.done > a.step .desc i {
+  font-size: 12px;
+  font-weight: normal;
+  color: #999;
+  display: inline-block;
+}
+
+@media (min-width: 768px) and (max-width: 1200px) {
+  /* 768px & 1200px */
+  .form-wizard .step .desc {
+    margin-top: 10px;
+    display: block;
+  }
+}
+@media (max-width: 768px) {
+  /* 768px */
+  .form-wizard .steps > li > a {
+    text-align: left;
+  }
+}
+/***
+wysihtml5
+***/
+.wysihtml5-sandbox {
+  width: 100% !important;
+}
+
+.wysihtml5-toolbar li {
+  margin: 0px;
+  height: 29px;
+}
+
+.wysihtml5-toolbar li .dropdown-menu {
+  margin-top: 5px;
+}
+
+/***
+Error state for WYSIWYG Editors
+***/
+.has-error .wysihtml5-sandbox {
+  border: 1px solid #ebccd1 !important;
+}
+
+.has-success .wysihtml5-sandbox {
+  border: 1px solid #d6e9c6 !important;
+}
+
+.has-warning .wysihtml5-sandbox {
+  border: 1px solid #faebcc !important;
+}
+
+/***
+Error state for WYSIWYG Editors
+***/
+.note-editor {
+  border: 1px solid #e5e5e5;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+.note-editor .note-toolbar {
+  border-bottom: 1px solid #e5e5e5;
+  -webkit-border-radius: 4px 4px 0 0;
+  -moz-border-radius: 4px 4px 0 0;
+  -ms-border-radius: 4px 4px 0 0;
+  -o-border-radius: 4px 4px 0 0;
+  border-radius: 4px 4px 0 0;
+}
+.note-editor .note-statusbar {
+  -webkit-border-radius: 0 0 4px 4px;
+  -moz-border-radius: 0 0 4px 4px;
+  -ms-border-radius: 0 0 4px 4px;
+  -o-border-radius: 0 0 4px 4px;
+  border-radius: 0 0 4px 4px;
+}
+.note-editor .note-statusbar .note-resizebar {
+  border-top: 1px solid #e5e5e5;
+}
+.note-editor.fullscreen {
+  z-index: 11000;
+  width: 100% !important;
+}
+.note-editor .dropdown-menu:before {
+  left: 9px;
+  right: auto;
+}
+.note-editor .dropdown-menu:after {
+  left: 10px;
+  right: auto;
+}
+
+.note-link-dialog .checkbox {
+  margin-left: 20px;
+}
+
+.has-error .note-editor {
+  border: 1px solid #ebccd1 !important;
+}
+
+.has-success .note-editor {
+  border: 1px solid #d6e9c6 !important;
+}
+
+.has-warning .note-editor {
+  border: 1px solid #faebcc !important;
+}
+
+/***
+Bootbox
+***/
+.bootbox .bootbox-close-button {
+  margin-top: 0px !important;
+}
+
+/***
+CKEditor css changes
+***/
+.cke {
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+.cke .cke-top {
+  -webkit-border-radius: 4px 4px 0 0;
+  -moz-border-radius: 4px 4px 0 0;
+  -ms-border-radius: 4px 4px 0 0;
+  -o-border-radius: 4px 4px 0 0;
+  border-radius: 4px 4px 0 0;
+}
+.cke .cke-bottom {
+  -webkit-border-radius: 0 0 4px 4px;
+  -moz-border-radius: 0 0 4px 4px;
+  -ms-border-radius: 0 0 4px 4px;
+  -o-border-radius: 0 0 4px 4px;
+  border-radius: 0 0 4px 4px;
+}
+
+.cke_bottom,
+.cke_inner,
+.cke_top,
+.cke_reset,
+.cke_dialog_title,
+.cke_dialog_footer,
+.cke_dialog {
+  background-image: none !important;
+  filter: none;
+  border-top: 0;
+  border-bottom: 0;
+  -webkit-box-shadow: none !important;
+  -moz-box-shadow: none !important;
+  box-shadow: none !important;
+  text-shadow: none;
+}
+
+.cke_dialog_ui_button,
+.cke_dialog_tab {
+  background-image: none !important;
+  filter: none;
+  -webkit-box-shadow: none !important;
+  -moz-box-shadow: none !important;
+  box-shadow: none !important;
+  text-shadow: none !important;
+}
+
+.cke_dialog_ui_button:hover,
+.cke_dialog_tab:hover {
+  text-decoration: none;
+  text-shadow: none;
+}
+
+.cke_dialog_ui_input_text {
+  background-image: none !important;
+  filter: none;
+  -webkit-box-shadow: none !important;
+  -moz-box-shadow: none !important;
+  box-shadow: none !important;
+}
+
+.cke_combo_button,
+.cke_button,
+.cke_toolbar,
+.cke_toolgroup {
+  background-image: none !important;
+  filter: none !important;
+  border: 0;
+  -webkit-box-shadow: none !important;
+  -moz-box-shadow: none !important;
+  box-shadow: none !important;
+}
+
+.cke_button,
+.cke_combo_button,
+.cke_panel_grouptitle,
+.cke_hc.cke_panel_listItem a {
+  background-image: none !important;
+  filter: none;
+  text-shadow: none;
+}
+
+.cke_button:hover,
+.cke_combo_button:hover {
+  background-color: #ddd;
+}
+
+.cke_toolbar_break {
+  background-image: none !important;
+  filter: none !important;
+  border: 0;
+  box-shadow: none !important;
+  -webkit-box-shadow: none !important;
+  -moz-box-shadow: none !important;
+  -ms-box-shadow: none !important;
+  -o-box-shadow: none !important;
+}
+
+/***
+Error state for WYSIWYG Editors
+***/
+.has-error .cke {
+  border: 1px solid #ebccd1 !important;
+}
+
+.has-success .cke {
+  border: 1px solid #d6e9c6 !important;
+}
+
+.has-warning .cke {
+  border: 1px solid #faebcc !important;
+}
+
+/***
+Clockface
+***/
+.modal-open .clockface {
+  z-index: 10055 !important;
+}
+
+.clockface .cell .inner.active,
+.clockface .cell .outer.active {
+  background-color: #4b8df8 !important;
+  background-image: none;
+  filter: none;
+}
+
+/***
+Datatables Plugin(in v1.3)
+***/
+.dataTable {
+  width: 100%;
+  clear: both;
+  margin-top: 5px;
+}
+
+.dataTables_filter .form-control {
+  margin-left: 4px;
+}
+.dataTables_filter label {
+  line-height: 32px;
+}
+
+.dataTable .row-details {
+  margin-top: 3px;
+  display: inline-block;
+  cursor: pointer;
+  width: 14px;
+  height: 14px;
+}
+
+.dataTable .row-details.row-details-close {
+  background: url("../img/datatable-row-openclose.png") no-repeat 0 0;
+}
+
+.dataTable .row-details.row-details-open {
+  background: url("../img/datatable-row-openclose.png") no-repeat 0 -23px;
+}
+
+.dataTable .details {
+  background-color: #eee;
+}
+
+.dataTable .details td,
+.dataTable .details th {
+  padding: 4px;
+  background: none;
+  border: 0;
+}
+
+.dataTable .details tr:hover td,
+.dataTable .details tr:hover th {
+  background: none;
+}
+
+.dataTable .details tr:nth-child(odd) td,
+.dataTable .details tr:nth-child(odd) th {
+  background-color: #eee;
+}
+
+.dataTable .details tr:nth-child(even) td,
+.dataTable .details tr:nth-child(even) th {
+  background-color: #eee;
+}
+
+.dataTable > thead > tr > th.sorting,
+.dataTable > thead > tr > th.sorting_asc,
+.dataTable > thead > tr > th.sorting_desc {
+  padding-right: 18px;
+}
+
+.dataTable .table-checkbox {
+  width: 8px !important;
+}
+
+@media (max-width: 768px) {
+  .dataTables_wrapper .dataTables_length .form-control,
+  .dataTables_wrapper .dataTables_filter .form-control {
+    display: inline-block;
+  }
+
+  .dataTables_wrapper .dataTables_info {
+    top: 17px;
+  }
+
+  .dataTables_wrapper .dataTables_paginate {
+    margin-top: -15px;
+  }
+}
+@media (max-width: 480px) {
+  .dataTables_wrapper .dataTables_filter .form-control {
+    width: 175px !important;
+  }
+
+  .dataTables_wrapper .dataTables_paginate {
+    float: left;
+    margin-top: 20px;
+  }
+}
+.dataTables_processing {
+  position: fixed;
+  top: 50%;
+  left: 50%;
+  min-width: 125px;
+  margin-left: 0;
+  padding: 7px;
+  text-align: center;
+  color: #333;
+  font-size: 13px;
+  border: 1px solid #ddd;
+  background-color: #eee;
+  vertical-align: middle;
+  -webkit-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+  -moz-box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+  box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
+}
+
+.dataTables_processing span {
+  line-height: 15px;
+  vertical-align: middle;
+}
+
+.dataTables_empty {
+  text-align: center;
+}
+
+/***
+TableTools
+***/
+.tabletools-btn-group {
+  margin: 0 0 10px 0;
+}
+.tabletools-btn-group > .btn {
+  margin-right: 5px;
+}
+.tabletools-btn-group > .btn:last-child {
+  margin-right: 0;
+}
+
+.tabletools-dropdown-on-portlet {
+  margin-top: -55px;
+  float: right;
+}
+.tabletools-dropdown-on-portlet > .btn {
+  margin-right: 5px;
+}
+.tabletools-dropdown-on-portlet > .btn:last-child {
+  margin-right: 0;
+}
+
+.DTTT_Print {
+  background-color: #fff;
+}
+.DTTT_Print .DTTT_PrintMessage {
+  display: none;
+}
+@media print {
+  .DTTT_Print .DTTT_PrintMessage {
+    display: inline-block;
+  }
+}
+.DTTT_Print .DTTT_Print_Info {
+  display: block;
+  position: fixed;
+  top: 35px;
+  font-size: 18px;
+  width: 700px;
+  left: 50%;
+  margin-left: -350px;
+  text-align: center;
+}
+.DTTT_Print .page-sidebar,
+.DTTT_Print .page-header,
+.DTTT_Print .page-footer {
+  display: none;
+}
+.DTTT_Print .page-content-wrapper {
+  float: none;
+}
+.DTTT_Print .row,
+.DTTT_Print [class*="col-"] {
+  padding: 0;
+  margin: 0;
+}
+.DTTT_Print .page-content {
+  margin: 50px auto !important;
+  border: 0 !important;
+  width: 800px !important;
+  padding: 0 !important;
+}
+.DTTT_Print .page-content .portlet {
+  border: 0;
+  padding: 0;
+}
+.DTTT_Print .page-content .portlet .portlet-body {
+  padding: 0;
+}
+.DTTT_Print .page-content .dataTables_wrapper {
+  padding: 0;
+  margin: 0;
+  box-shadow: 5px 5px rgba(102, 102, 102, 0.1);
+}
+@media print {
+  .DTTT_Print .page-content .dataTables_wrapper {
+    box-shadow: none;
+  }
+}
+
+/***
+Extended pagination
+***/
+.paging_bootstrap_extended {
+  margin: 0 !important;
+  padding: 0 !important;
+  float: none !important;
+  font-size: 13px;
+}
+
+.dataTables_extended_wrapper .seperator {
+  padding: 0 2px;
+}
+
+.dataTables_extended_wrapper div.dataTables_paginate,
+.dataTables_extended_wrapper div.dataTables_length,
+.dataTables_extended_wrapper div.dataTables_info {
+  display: inline-block;
+  float: none !important;
+  padding: 0 !important;
+  margin: 0 !important;
+  position: static !important;
+}
+
+@media (max-width: 480px) {
+  .dataTables_extended_wrapper div.dataTables_paginate,
+  .dataTables_extended_wrapper div.dataTables_length,
+  .dataTables_extended_wrapper div.dataTables_info {
+    display: block;
+    margin-bottom: 10px !important;
+  }
+
+  .dataTables_extended_wrapper .seperator {
+    display: none !important;
+  }
+}
+.dataTables_extended_wrapper div.dataTables_length label {
+  margin: 0 !important;
+  padding: 0 !important;
+  font-size: 13px;
+  float: none !important;
+  display: inline-block !important;
+}
+
+.table-container .table-actions-wrapper {
+  display: none;
+}
+
+/***
+Scroller Extension
+***/
+.dataTables_scroll {
+  margin-bottom: 10px;
+}
+
+.dataTables_scrollHead {
+  border-bottom: 2px solid #ddd !important;
+}
+.dataTables_scrollHead thead th {
+  border-bottom: 0 !important;
+}
+
+.dataTables_scrollBody {
+  border-bottom: 1px solid #ddd !important;
+}
+
+/***
+Dropzone css changes(new in v1.1.1)
+***/
+.dropzone {
+  -webkit-border-radius: 0px;
+  -moz-border-radius: 0px;
+  border-radius: 0px;
+}
+
+/***
+Fancy box fix overlay fix
+***/
+.fancybox-overlay {
+  z-index: 100000;
+}
+
+.fancybox-opened {
+  z-index: 100001;
+}
+
+/***
+FuelUX Spinners
+***/
+.spinner-buttons.btn-group-vertical .btn {
+  text-align: center;
+  margin: 0;
+  height: 17px;
+  width: 22px;
+  padding-left: 6px;
+  padding-right: 6px;
+  padding-top: 0px;
+}
+.page-style-rounded .spinner-buttons.btn-group-vertical .btn.spinner-up {
+  border-radius: 0;
+  border-top-right-radius: 4px !important;
+}
+.page-style-rounded .spinner-buttons.btn-group-vertical .btn.spinner-down {
+  border-radius: 0;
+  border-bottom-right-radius: 4px;
+}
+
+/***
+Fullcalendar
+***/
+/* External events */
+.external-event {
+  display: inline-block;
+  cursor: move;
+  margin-bottom: 5px;
+  margin-left: 5px;
+}
+
+.fc-scroller {
+  overflow-y: auto;
+  overflow-x: hidden;
+}
+
+.fc-month-view .fc-scroller {
+  height: auto !important;
+}
+
+.portlet .event-form-title {
+  font-size: 14px;
+  margin-top: 4px;
+  font-weight: 400;
+  margin-bottom: 10px;
+}
+.portlet.calendar .fc-button {
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+  text-shadow: none;
+  border: 0;
+  height: 35px;
+  padding: 6px 8px 7px 8px;
+  margin-left: 2px;
+  border-top-style: none;
+  border-bottom-style: none;
+  border-right-style: solid;
+  border-left-style: solid;
+  border-color: #ddd;
+  background: transparent;
+  color: #fff;
+  top: -45px;
+  outline: none !important;
+  -webkit-border-radius: 4px 4px 0 0;
+  -moz-border-radius: 4px 4px 0 0;
+  -ms-border-radius: 4px 4px 0 0;
+  -o-border-radius: 4px 4px 0 0;
+  border-radius: 4px 4px 0 0;
+}
+.portlet.calendar .fc-toolbar {
+  margin-bottom: 0px;
+}
+.portlet.calendar .fc-toolbar h2 {
+  margin-top: 3px;
+  font-size: 17px;
+}
+.portlet.calendar .fc-header {
+  margin-bottom: -21px;
+}
+.portlet.calendar .fc-button-prev {
+  padding-right: 10px;
+  padding-left: 8px;
+}
+.portlet.calendar .fc-button-next {
+  padding-right: 8px;
+  padding-left: 10px;
+}
+.portlet.calendar .fc-button.fc-state-active, .portlet.calendar .fc-button.fc-state-hover {
+  color: #666;
+  background-color: #fff;
+}
+.portlet.calendar .fc-button.fc-state-disabled {
+  color: #ddd;
+}
+.portlet.calendar .fc-button .fc-icon-left-single-arrow {
+  font-family: FontAwesome;
+  font-size: 16px;
+}
+.portlet.calendar .fc-button .fc-icon-left-single-arrow:after {
+  content: "";
+}
+.portlet.calendar .fc-button .fc-icon-left-single-arrow:before {
+  content: "\f104";
+}
+.portlet.calendar .fc-button .fc-icon-right-single-arrow {
+  font-family: FontAwesome;
+  font-size: 16px;
+}
+.portlet.calendar .fc-button .fc-icon-right-single-arrow:after {
+  content: "";
+}
+.portlet.calendar .fc-button .fc-icon-right-single-arrow:before {
+  content: "\f105";
+}
+.portlet.calendar .fc-text-arrow {
+  font-size: 22px;
+  font-family: "Courier New", Courier, monospace;
+  vertical-align: baseline;
+}
+.portlet.calendar .fc-event {
+  border: 0px;
+  background-color: #69a4e0;
+  color: #fff;
+}
+.portlet.calendar .fc-event .fc-content {
+  border: 0px;
+}
+.portlet.calendar .fc-event .fc-time {
+  float: left;
+  text-align: left;
+  color: #fff;
+  font-size: 13px;
+  font-weight: 300;
+}
+.portlet.calendar .fc-event .fc-title {
+  text-align: left;
+  float: left;
+  color: #fff;
+  font-size: 13px;
+  font-weight: 300;
+}
+.portlet.calendar .fc-header-title h2 {
+  font-size: 14px;
+  line-height: 20px;
+  font-weight: 400;
+  color: #111;
+}
+.portlet.calendar .fc-widget-header {
+  background-image: none;
+  filter: none;
+  background-color: #eee;
+  text-transform: uppercase;
+  font-weight: 300;
+}
+.portlet.calendar.light .fc-button {
+  top: -60px;
+  color: #666;
+  text-transform: uppercase;
+  font-size: 12px;
+  padding-bottom: 35px;
+}
+.portlet.calendar.light .fc-button .fc-text-arrow {
+  margin-top: -6px;
+  display: inline-block;
+}
+.portlet.calendar.light .fc-button.fc-state-active, .portlet.calendar.light .fc-button.fc-state-hover {
+  color: #333;
+  border-bottom: 2px solid #45B6AF;
+}
+.portlet.calendar.light .fc-button.fc-state-disabled {
+  color: #aaa;
+}
+.portlet.calendar .mobile .fc-button {
+  padding: 0px 6px 20px 6px;
+  margin-left: 2px;
+  border: 0;
+  background-color: #ddd;
+  background-image: none;
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+  -webkit-border-radius: 0;
+  -moz-border-radius: 0;
+  border-radius: 0;
+  color: #000;
+  text-shadow: none;
+  text-align: center;
+}
+.portlet.calendar .mobile .fc-button.fc-state-hover, .portlet.calendar .mobile .fc-button.fc-state-active {
+  background-color: #eee;
+}
+.portlet.calendar .mobile .fc-button.fc-state-disabled {
+  color: #bbb;
+}
+.portlet.calendar .mobile .fc-button-prev {
+  margin-right: 5px;
+  margin-top: -2px;
+}
+.portlet.calendar .mobile .fc-button-next {
+  margin-right: -0px;
+  margin-top: -2px;
+}
+.portlet.calendar .mobile .fc-header-space {
+  margin: 0px;
+  padding: 0px;
+  width: 0px;
+}
+.portlet.calendar .mobile .fc-header-left {
+  position: absolute;
+  z-index: 10;
+}
+.portlet.calendar .mobile .fc-header-left .fc-button {
+  top: -2px;
+}
+.portlet.calendar .mobile .fc-header-right {
+  position: relative;
+  right: 0;
+}
+.portlet.calendar .mobile .fc-header-right .fc-button {
+  top: 35px;
+}
+.portlet.calendar .mobile .fc-content {
+  margin-top: 53px;
+}
+
+/***
+Google Maps
+***/
+.gmaps {
+  height: 300px;
+  width: 100%;
+  /* important!  bootstrap sets max-width on img to 100% which conflicts with google map canvas*/
+}
+.gmaps img {
+  max-width: none;
+}
+
+#gmap_static div {
+  background-repeat: no-repeat;
+  background-position: 50% 50%;
+  height: 100%;
+  display: block;
+  height: 300px;
+}
+
+#gmap_routes_instructions {
+  margin-top: 10px;
+  margin-bottom: 0px;
+}
+
+/***
+Gritter notification modify
+***/
+#gritter-notice-wrapper {
+  right: 1px !important;
+}
+
+.gritter-close {
+  left: auto !important;
+  right: 3px !important;
+}
+
+.gritter-title {
+  font-family: "Open Sans";
+  font-size: 18px;
+  font-weight: 300;
+}
+
+/***
+Dashboard Charts(new in v1.2.1)
+***/
+.easy-pie-chart,
+.sparkline-chart {
+  text-align: center;
+}
+
+.sparkline-chart {
+  margin-top: 15px;
+  position: relative;
+}
+
+.easy-pie-chart .number {
+  font-size: 14px !important;
+  font-weight: 300;
+  margin: 0 auto;
+  position: relative;
+  text-align: center;
+  width: 75px;
+  height: 75px;
+  line-height: 75px;
+}
+.easy-pie-chart .number canvas {
+  position: absolute;
+  top: 0;
+  left: 0;
+}
+
+.sparkline-chart .number {
+  width: 100px;
+  margin: 0 auto;
+  margin-bottom: 10px;
+}
+
+.sparkline-chart .title,
+.easy-pie-chart .title {
+  display: block;
+  text-align: center;
+  color: #333;
+  font-weight: 300;
+  font-size: 16px;
+  margin-top: 5px;
+  margin-bottom: 10px;
+}
+
+.sparkline-chart .title:hover,
+.easy-pie-chart .title:hover {
+  color: #666;
+  text-decoration: none;
+}
+
+.sparkline-chart .title > i,
+.easy-pie-chart .title > i {
+  margin-top: 5px;
+}
+
+/***
+jQuery File Upload
+***/
+.blueimp-gallery .close {
+  background-image: url("../../images/portlet-remove-icon-white.png") !important;
+  margin-top: -2px;
+}
+
+.blueimp-gallery .prev,
+.blueimp-gallery .next {
+  border-radius: 23px !important;
+}
+
+/***
+jQuery Multi Select
+***/
+.ms-container .ms-list {
+  border: 1px solid #e5e5e5;
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+}
+
+.ms-container .ms-optgroup-label {
+  font-size: 14px;
+}
+
+.ms-container .ms-selectable li.ms-elem-selectable,
+.ms-container .ms-selection li.ms-elem-selection {
+  font-size: 13px;
+}
+
+.ms-container .ms-list.ms-focus {
+  border-color: #999999;
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+}
+
+.ms-container .ms-selectable li.ms-hover,
+.ms-container .ms-selection li.ms-hover {
+  color: #333;
+  background-color: #eee;
+}
+
+.ms-container .form-control {
+  margin-bottom: 5px;
+}
+
+/***
+jQuery Notific8 Plugin
+***/
+.jquery-notific8-message {
+  font-size: 13px;
+}
+
+[class*="jquery-notific8"],
+[class*="jquery-notific8"]:after,
+[class*="jquery-notific8"]:before {
+  -webkit-box-sizing: content-box;
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
+}
+
+.right .jquery-notific8-close-sticky span,
+.left .jquery-notific8-close-sticky span {
+  font-size: 10px;
+}
+
+.jquery-notific8-heading {
+  font-weight: 300;
+  font-size: 16px;
+}
+
+/***
+Password Strength(in v1.4)
+***/
+.password-strength .password-verdict {
+  display: inline-block;
+  margin-top: 6px;
+  margin-left: 5px;
+}
+
+.password-strength .progress {
+  margin-top: 5px;
+  margin-bottom: 0;
+}
+
+.password-strength .progress-bar {
+  padding: 2px;
+}
+
+/***
+jQuery Slimscroll
+***/
+.scroller {
+  padding: 0px;
+  margin: 0px;
+  padding-right: 12px;
+  overflow: hidden;
+}
+
+.scroller-footer {
+  margin-top: 10px;
+}
+.scroller-footer:before, .scroller-footer:after {
+  content: " ";
+  display: table;
+}
+.scroller-footer:after {
+  clear: both;
+}
+
+.portlet-body .slimScrollBar {
+  margin-right: 0px;
+}
+
+/***
+jQuery Sparkline
+***/
+.jqstooltip {
+  width: auto !important;
+  height: auto !important;
+}
+
+.easy-pie-chart,
+.sparkline-chart {
+  text-align: center;
+}
+
+.sparkline-chart {
+  margin-top: 15px;
+  position: relative;
+}
+
+.easy-pie-chart .number {
+  font-size: 16px;
+  font-weight: 300;
+  width: 85px;
+  margin: 0 auto;
+}
+
+.sparkline-chart .number {
+  width: 100px;
+  margin: 0 auto;
+  margin-bottom: 10px;
+}
+
+.sparkline-chart .title,
+.easy-pie-chart .title {
+  display: block;
+  text-align: center;
+  color: #333;
+  font-weight: 300;
+  font-size: 16px;
+  margin-top: 5px;
+  margin-bottom: 10px;
+}
+
+.sparkline-chart .title:hover,
+.easy-pie-chart .title:hover {
+  color: #666;
+  text-decoration: none;
+}
+
+.sparkline-chart .title > i,
+.easy-pie-chart .title > i {
+  margin-top: 5px;
+}
+
+/***
+Modify jquery-tags-input plugin css
+***/
+div.tagsinput {
+  min-height: 35px;
+  height: auto !important;
+  margin: 0;
+  padding: 5px 5px 0px 5px;
+  overflow: auto;
+}
+
+div.tagsinput span.tag {
+  background: #aaa;
+  color: #fff;
+  border: 0;
+  padding: 3px 6px;
+  margin-top: 0;
+  margin-bottom: 5px;
+}
+
+div.tagsinput input {
+  padding: 3px 6px;
+  width: 75px !important;
+}
+
+div.tagsinput span.tag a {
+  color: #fff;
+}
+
+div.tagsinput .not_valid {
+  color: #fff;
+  padding: 3px 6px;
+  background-color: #e02222;
+}
+
+/***
+jQuery UI Sliders(new in v1.1.1)
+***/
+.slider {
+  border: 0;
+  padding: 0;
+  display: block;
+  margin: 12px 5px;
+  min-height: 11px;
+}
+
+.ui-slider-vertical {
+  width: 11px;
+}
+
+.ui-slider-horizontal .ui-slider-handle {
+  top: -3px;
+}
+
+.ui-slider-vertical .ui-slider-handle {
+  left: -3px;
+}
+
+.ui-slider-vertical,
+.ui-slider-handle {
+  filter: none !important;
+  background-image: none !important;
+}
+
+/***
+JQVMAP Plugin
+***/
+.jqvmap-zoomin {
+  height: 16px;
+  width: 16px;
+  background-color: #666;
+}
+
+.jqvmap-zoomout {
+  height: 16px;
+  width: 16px;
+  background-color: #666;
+}
+
+.vmaps {
+  position: relative;
+  overflow: hidden;
+  height: 300px;
+}
+
+/***
+Jstree
+***/
+.jstree-default .jstree-clicked {
+  border: 0;
+  background-color: #e1e1e1;
+  box-shadow: none;
+}
+
+.jstree-default .jstree-hovered {
+  border: 0;
+  background-color: #eee;
+  box-shadow: none;
+}
+
+.jstree-default .jstree-wholerow-clicked,
+.jstree-wholerow .jstree-wholerow-clicked {
+  background: none;
+  border: 0;
+  background-color: #e1e1e1;
+  box-shadow: none;
+}
+
+.jstree-default .jstree-wholerow-hovered,
+.jstree-wholerow .jstree-wholerow-hovered {
+  border: 0;
+  background-color: #eee;
+  box-shadow: none;
+}
+
+.jstree-icon.icon-lg {
+  margin-top: 1px;
+}
+
+.jstree-open > .jstree-anchor > .fa-folder:before {
+  margin-left: 2px;
+  content: "\f07c";
+}
+
+.jstree-default.jstree-rtl .jstree-last {
+  background: transparent;
+  background-repeat: no-repeat;
+}
+
+.vakata-context,
+.vakata-context ul {
+  padding: 0;
+  min-width: 125px;
+  background-color: #ffffff;
+  font-size: 14px;
+  font-family: "Segoe UI",Helvetica, Arial, sans-serif;
+  box-shadow: 5px 5px rgba(102, 102, 102, 0.1);
+  border: 1px solid #efefef;
+}
+
+.vakata-context li {
+  border: 0;
+}
+.vakata-context li a {
+  padding: 0 10px;
+  border: 0;
+}
+.vakata-context li a i {
+  display: none;
+}
+.vakata-context li a .vakata-contextmenu-sep {
+  display: none;
+}
+
+.vakata-context .vakata-context-hover > a,
+.vakata-context li a:hover {
+  background-color: #eee;
+  color: #333;
+  box-shadow: none;
+  margin: 0;
+}
+.vakata-context .vakata-context-hover > a .span,
+.vakata-context .vakata-context-hover > a .ins,
+.vakata-context li a:hover .span,
+.vakata-context li a:hover .ins {
+  border: 0 !important;
+}
+
+.vakata-context li a span,
+.vakata-context li a ins {
+  display: none;
+  border: 0 !important;
+}
+
+.vakata-context .vakata-context-separator a,
+.vakata-context-rtl .vakata-context-separator a {
+  margin: 0;
+  border: 0;
+}
+
+.jstree-rename-input {
+  background-color: #ffffff !important;
+  border: 1px solid #e5e5e5 !important;
+  outline: none !important;
+  padding: 2px 6px !important;
+  margin-right: -4px !important;
+}
+
+/***
+NoUIRangeSlider
+***/
+.noUi-control {
+  margin: 9px 0;
+}
+
+/***
+Color variants
+***/
+.noUi-primary.noUi-connect,
+.noUi-primary .noUi-connect {
+  background: #428bca;
+}
+
+.noUi-info.noUi-connect,
+.noUi-info .noUi-connect {
+  background: #89C4F4;
+}
+
+.noUi-success.noUi-connect,
+.noUi-success .noUi-connect {
+  background: #45B6AF;
+}
+
+.noUi-warning.noUi-connect,
+.noUi-warning .noUi-connect {
+  background: #dfba49;
+}
+
+.noUi-danger.noUi-connect,
+.noUi-danger .noUi-connect {
+  background: #F3565D;
+}
+
+.noUi-default.noUi-connect,
+.noUi-default .noUi-connect {
+  background: #c6c6c6;
+}
+
+/***
+Google reCaptcha
+***/
+.form-recaptcha-img {
+  margin-bottom: 10px;
+  clear: both;
+  border: 1px solid #e5e5e5;
+  padding: 5px;
+}
+
+iframe[src="about:blank"] {
+  display: none;
+}
+
+/***
+Select2 Plugin
+***/
+.form-control .select2-choice {
+  border: 1px solid #e5e5e5;
+  background-color: #fff;
+  background-image: none;
+  filter: none;
+  height: 34px;
+  padding: 3px 0 0px 12px;
+}
+
+.select2-container.select2-drop-above .select2-choice {
+  border-bottom-color: #e5e5e5;
+  background-color: #fff;
+  background-image: none;
+  filter: none;
+}
+
+.select2-drop {
+  border: 1px solid #e5e5e5;
+  background-color: #fff;
+  background-image: none;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  filter: none;
+  border-top: 0;
+}
+
+.select2-drop-auto-width {
+  border-top: 1px solid #e5e5e5;
+}
+
+.select2-drop.select2-drop-above {
+  border-top: 1px solid #e5e5e5;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+
+.select2-drop-active {
+  border: 1px solid #999;
+  border-top: 0;
+}
+
+.select2-container .select2-choice .select2-arrow {
+  background-image: none;
+  background-color: #fff;
+  filter: none;
+  border-left: 1px solid #e5e5e5;
+}
+
+.select2-container.select2-container-active .select2-arrow,
+.select2-container.select2-dropdown-open .select2-arrow {
+  border-left: 0 !important;
+}
+
+.select2-container .select2-choice .select2-arrow b {
+  background-position: 0 1px;
+}
+
+.select2-search input {
+  border: 1px solid #e5e5e5;
+  background-color: #fff !important;
+  filter: none;
+  margin: 0;
+  outline: 0;
+  border: 1px solid #e5e5e5;
+  webkit-appearance: none !important;
+  color: #333333;
+  outline: 0;
+  box-shadow: none;
+  height: auto !important;
+  min-height: 26px;
+  padding: 6px 6px !important;
+  line-height: 20px;
+  font-size: 14px;
+  font-weight: normal;
+  vertical-align: top;
+  background-color: #ffffff;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  margin-top: 5px;
+}
+
+.form-control.select2-container {
+  border: 0;
+  height: auto !important;
+  padding: 0px;
+}
+
+.select2-container-active .select2-choice,
+.select2-container-active .select2-choices {
+  border: 1px solid #999 !important;
+  -webkit-box-shadow: none !important;
+  box-shadow: none !important;
+}
+
+.select2-dropdown-open .select2-choice {
+  border-bottom: 0 !important;
+  background-image: none;
+  background-color: #fff;
+  filter: none;
+  -webkit-box-shadow: none !important;
+  box-shadow: none !important;
+}
+
+.select2-dropdown-open.select2-drop-above .select2-choice,
+.select2-dropdown-open.select2-drop-above .select2-choices {
+  border: 1px solid #999 !important;
+  border-top: 0 !important;
+  background-image: none;
+  background-color: #fff;
+  filter: none;
+  -webkit-box-shadow: none !important;
+  box-shadow: none !important;
+}
+
+.select2-drop.select2-drop-above.select2-drop-active {
+  border: 1px solid #999 !important;
+  border-bottom: 0 !important;
+}
+
+.select2-dropdown-open .select2-choice .select2-arrow b {
+  background-position: -18px 1px;
+}
+
+.select2-results {
+  margin: 5px 0;
+}
+
+.select2-results .select2-highlighted {
+  background: #eee;
+  color: #333;
+}
+
+.select2-results li em {
+  background: #feffde;
+  font-style: normal;
+}
+
+.select2-results .select2-highlighted em {
+  background: transparent;
+}
+
+.select2-results .select2-highlighted ul {
+  background: #fff;
+  color: #000;
+}
+
+.select2-results .select2-no-results,
+.select2-results .select2-searching,
+.select2-results .select2-selection-limit {
+  padding: 3px 7px 4px;
+  background: #f4f4f4;
+  display: list-item;
+}
+
+.select2-container-multi {
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+.select2-container-multi .select2-choices {
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+.select2-container-multi.select2-dropdown-open {
+  -webkit-border-radius: 4px 4px 0 0;
+  -moz-border-radius: 4px 4px 0 0;
+  -ms-border-radius: 4px 4px 0 0;
+  -o-border-radius: 4px 4px 0 0;
+  border-radius: 4px 4px 0 0;
+}
+.select2-container-multi.select2-dropdown-open .select2-choices {
+  -webkit-border-radius: 4px 4px 0 0;
+  -moz-border-radius: 4px 4px 0 0;
+  -ms-border-radius: 4px 4px 0 0;
+  -o-border-radius: 4px 4px 0 0;
+  border-radius: 4px 4px 0 0;
+}
+.select2-container-multi.select2-dropdown-open.select2-drop-above {
+  -webkit-border-radius: 0 0 4px 4px;
+  -moz-border-radius: 0 0 4px 4px;
+  -ms-border-radius: 0 0 4px 4px;
+  -o-border-radius: 0 0 4px 4px;
+  border-radius: 0 0 4px 4px;
+}
+.select2-container-multi.select2-dropdown-open.select2-drop-above .select2-choices {
+  -webkit-border-radius: 0 0 4px 4px;
+  -moz-border-radius: 0 0 4px 4px;
+  -ms-border-radius: 0 0 4px 4px;
+  -o-border-radius: 0 0 4px 4px;
+  border-radius: 0 0 4px 4px;
+}
+
+.select2-container-multi .select2-choices {
+  padding-left: 6px;
+  min-height: 34px;
+  border: 1px solid #e5e5e5;
+  background-image: none;
+  background-color: #fff;
+  filter: none;
+  -webkit-box-shadow: none !important;
+  box-shadow: none !important;
+}
+
+.select2-container-multi.select2-container-active .select2-choices {
+  border: 1px solid #999 !important;
+  background-image: none;
+  background-color: #fff;
+  filter: none;
+  -webkit-box-shadow: none !important;
+  box-shadow: none !important;
+}
+
+.select2-container-multi .select2-choices .select2-search-choice {
+  padding: 3px 5px 3px 18px;
+  margin: 5px 0 3px 5px;
+  border: 1px solid #e5e5e5;
+  background-image: none;
+  background-color: #fff;
+  filter: none;
+  -webkit-box-shadow: none !important;
+  box-shadow: none !important;
+}
+
+/***
+Color variants
+***/
+.has-warning .select2-container .select2-choice,
+.has-warning .select2-container .select2-choices {
+  border-color: #faebcc;
+}
+
+.has-warning .select2-container.select2-dropdown-open .select2-choice,
+.has-warning .select2-container.select2-dropdown-open .select2-choices {
+  border-color: #faebcc;
+}
+
+.has-warning .select2-container.select2-dropdown-open .select2-choice > span {
+  color: #faebcc;
+}
+
+.has-error .select2-container .select2-choice,
+.has-error .select2-container .select2-choices {
+  border-color: #ebccd1;
+}
+
+.has-error .select2-container.select2-dropdown-open .select2-choice,
+.has-error .select2-container.select2-dropdown-open .select2-choices {
+  border-color: #ebccd1;
+}
+
+.has-error .select2-container.select2-dropdown-open .select2-choice > span {
+  color: #ebccd1;
+}
+
+.has-success .select2-container .select2-choice,
+.has-success .select2-container .select2-choices {
+  border-color: #d6e9c6;
+}
+
+.has-success .select2-container.select2-dropdown-open .select2-choice,
+.has-success .select2-container.select2-dropdown-open .select2-choices {
+  border-color: #d6e9c6;
+}
+
+.has-success .select2-container.select2-dropdown-open .select2-choice > span {
+  color: #d6e9c6;
+}
+
+/* Fix z-index when select2 opened in modals*/
+.modal-open .select2-drop-mask {
+  z-index: 10051;
+}
+
+.modal-open .select2-drop {
+  z-index: 10052;
+}
+
+.modal-open .select2-search {
+  z-index: 10053;
+}
+
+/***
+Bootstrap input sizes
+***/
+/* Large input size */
+.form-control.input-lg .select2-choice {
+  height: 46px;
+  padding: 10px 16px;
+}
+
+.select2-container.input-lg .select2-choice .select2-arrow b {
+  background-position: 0 7px;
+}
+
+/* Small input size */
+.form-control.input-sm .select2-choice {
+  height: 30px;
+  padding: 1px 10px 5px 10px;
+}
+
+.select2-container.input-sm .select2-choice .select2-arrow b {
+  background-position: 0 0px;
+}
+
+/***
+jQuery Uniform
+***/
+.checker {
+  margin-top: -2px !important;
+  margin-right: 2px !important;
+}
+
+.checker input,
+.radio input {
+  outline: none !important;
+}
+
+div.checker.disabled span,
+div.checker.disabled.active span {
+  background-position: -152px -260px;
+}
+
+div.checker.disabled:hover,
+div.radio.disabled:hover {
+  cursor: not-allowed;
+}
+
+div.radio,
+div.checker {
+  margin-right: 0;
+  margin-left: 3px;
+}
+
+/***
+Morris Charts
+***/
+.portlet-body-morris-fit {
+  margin-right: -20px;
+  margin-left: -20px;
+  margin-bottom: -15px;
+}
+.portlet-body-morris-fit > svg {
+  -webkit-border-radius: 0 0 4px 4px;
+  -moz-border-radius: 0 0 4px 4px;
+  -ms-border-radius: 0 0 4px 4px;
+  -o-border-radius: 0 0 4px 4px;
+  border-radius: 0 0 4px 4px;
+}
+
+.morris-hover.morris-default-style .morris-hover-row-label {
+  text-align: left;
+  font-weight: 400;
+  font-size: 15px;
+  color: #7D8C9D;
+  font-family: "Open Sans", sans-serif;
+}
+.morris-hover.morris-default-style .morris-hover-point {
+  text-align: left;
+  font-size: 14px;
+  font-weight: 400;
+  font-family: "Open Sans", sans-serif;
+}
+
+/***
+iCheck
+***/
+.icheck-list > label {
+  display: block;
+  margin-bottom: 8px;
+}
+.icheck-list > label:last-child {
+  margin-bottom: 0;
+}
+
+.form-horizontal .icheck-inline {
+  margin-top: 8px;
+}
+.icheck-inline > label {
+  display: inline-block;
+  margin-left: 15px;
+}
+.icheck-inline > label:first-child {
+  margin-left: 0;
+}
+
+div[class*='icheckbox_'],
+div[class*='iradio_'] {
+  margin-right: 5px;
+  top: -1px !important;
+}
+
+.icheck-colors {
+  padding: 0;
+  margin: 0;
+  list-style: none;
+}
+.icheck-colors > li {
+  padding: 0;
+  margin: 4px;
+  float: left;
+  display: inline-block;
+  height: 20px;
+  width: 20px;
+  background: #000000;
+  opacity: 0.6;
+  filter: alpha(opacity=60);
+}
+.icheck-colors > li:first-child {
+  margin-left: 0;
+}
+.icheck-colors > li:hover {
+  opacity: 1;
+  filter: alpha(opacity=100);
+  cursor: pointer;
+}
+.icheck-colors > li.active {
+  height: 26px;
+  margin-top: 0;
+  opacity: 0.6;
+  filter: alpha(opacity=60);
+}
+.icheck-colors > li.red {
+  background: #d54e21;
+}
+.icheck-colors > li.green {
+  background: #78a300;
+}
+.icheck-colors > li.blue {
+  background: #0e76a8;
+}
+.icheck-colors > li.aero {
+  background: #9cc2cb;
+}
+.icheck-colors > li.grey {
+  background: #73716e;
+}
+.icheck-colors > li.orange {
+  background: #f70;
+}
+.icheck-colors > li.yellow {
+  background: #fc0;
+}
+.icheck-colors > li.pink {
+  background: #ff66b5;
+}
+.icheck-colors > li.purple {
+  background: #6a5a8c;
+}
+
+/***
+AngularJS UI-select
+***/
+.ui-select-match-close {
+  margin-top: 5px !important;
+  margin-left: 5px !important;
+}
diff --git a/public/assets/css/global/strap-docs.min.css b/public/assets/css/global/strap-docs.min.css
new file mode 100644
index 0000000..3b04341
--- /dev/null
+++ b/public/assets/css/global/strap-docs.min.css
@@ -0,0 +1,9 @@
+/**
+ * angular-strap
+ * @version v2.2.3 - 2015-05-22
+ * @link http://mgcrea.github.io/angular-strap
+ * @author Olivier Louvignes <[email-masked]> (https://github.com/mgcrea)
+ * @license MIT License, http://www.opensource.org/licenses/MIT
+ */
+.carousel-inner>.item>a>img,.carousel-inner>.item>img,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.modal.disabled{-webkit-animation:noop!important;animation:noop!important}.modal.disabled.am-fade-and-slide-top .modal-dialog{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;-webkit-animation-name:fadeAndSlideFromTop;animation-name:fadeAndSlideFromTop}.modal.disabled.am-fade-and-slide-top.ng-enter .modal-dialog{visibility:hidden;-webkit-animation-name:fadeAndSlideFromTop;animation-name:fadeAndSlideFromTop}.modal.disabled.am-fade-and-slide-top.ng-enter-active .modal-dialog,.modal.disabled.am-fade-and-slide-top.ng-leave-active .modal-dialog{visibility:visible}.modal.disabled.am-fade-and-slide-top.ng-leave .modal-dialog{-webkit-animation-name:fadeAndSlideToTop;animation-name:fadeAndSlideToTop}.modal.disabled.am-fade-and-scale .modal-dialog{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;-webkit-animation-name:fadeAndScaleIn;animation-name:fadeAndScaleIn}.modal.disabled.am-fade-and-scale.ng-enter .modal-dialog{visibility:hidden;-webkit-animation-name:fadeAndScaleIn;animation-name:fadeAndScaleIn}.modal.disabled.am-fade-and-scale.ng-enter-active .modal-dialog,.modal.disabled.am-fade-and-scale.ng-leave-active .modal-dialog{visibility:visible}.modal.disabled.am-fade-and-scale.ng-leave .modal-dialog{-webkit-animation-name:fadeAndScaleOut;animation-name:fadeAndScaleOut}@-webkit-keyframes noop{from,to{opacity:1}}@keyframes noop{from,to{opacity:1}}.bs-example{position:relative;padding:45px 15px 15px;margin:0 -15px 15px;background-color:#fafafa;box-shadow:inset 0 3px 6px rgba(0,0,0,.05);border-color:#e5e5e5 #eee #eee;border-style:solid;border-width:1px 0}.bs-example:after{content:"Example";position:absolute;top:15px;left:15px;font-size:12px;font-weight:700;color:#bbb;text-transform:uppercase;letter-spacing:1px}.bs-example+.highlight{margin:-15px -15px 15px;border-radius:0;border-width:0 0 1px}@media (min-width:768px){.bs-example{margin-left:0;margin-right:0;background-color:#fff;border-width:1px;border-color:#ddd;border-radius:4px 4px 0 0;box-shadow:none}.bs-example+.highlight{margin-top:-16px;margin-left:0;margin-right:0;border-width:1px;border-bottom-left-radius:4px;border-bottom-right-radius:4px}}.bs-example .container{width:auto}.bs-example>.alert:last-child,.bs-example>.form-control:last-child,.bs-example>.jumbotron:last-child,.bs-example>.list-group:last-child,.bs-example>.navbar:last-child,.bs-example>.panel:last-child,.bs-example>.progress:last-child,.bs-example>.table-responsive:last-child>.table,.bs-example>.table:last-child,.bs-example>.well:last-child,.bs-example>blockquote:last-child,.bs-example>ol:last-child,.bs-example>p:last-child,.bs-example>ul:last-child{margin-bottom:0}.bs-example>p>.close{float:none}.bs-example .nav-tabs{margin-bottom:15px}.bs-footer{padding-top:40px;padding-bottom:30px;margin-top:100px;color:#787878;text-align:center;border-top:1px solid #e6e6e6}.footer-links{margin:10px 0;padding-left:0}.footer-links li{display:inline;padding:0 2px}.footer-links li:first-child{padding-left:0}@media (min-width:768px){.bs-footer{text-align:left}.bs-footer p{margin-bottom:0}}.bs-masthead{position:relative;padding:30px 15px;text-align:center;text-shadow:0 1px 0 rgba(0,0,0,.15)}.bs-masthead h1{font-size:50px;line-height:1;color:#fff}.bs-masthead .btn-outline-inverse{margin:10px}.bs-masthead-links{margin-top:20px;margin-bottom:40px;padding:0 15px;list-style:none;text-align:center}.bs-masthead-links li{display:inline}.bs-masthead-links li+li{margin-left:20px}.bs-masthead-links a{color:#fff}@media (min-width:768px){.bs-masthead{text-align:left;padding-top:140px;padding-bottom:140px}.bs-masthead h1{font-size:100px}.bs-masthead .lead{margin-right:25%;font-size:30px}.bs-masthead .btn-outline-inverse{width:auto;margin:20px 5px 20px 0;padding:18px 24px;font-size:21px}.bs-masthead-links{padding:0;text-align:left}}.bs-docs-nav{border-color:#a33f3e;background-color:#b94846;box-shadow:0 1px 0 rgba(255,255,255,.1);text-shadow:0 -1px 0 rgba(0,0,0,.15)}.bs-docs-nav .navbar-collapse{border-color:#a33f3e}.bs-docs-nav .navbar-brand{color:#fff}.bs-docs-nav .navbar-nav>li>a{-webkit-transition:color .15s linear;transition:color .15s linear;color:#f9f1f1}.bs-docs-nav .navbar-nav>li>a:hover{color:#fff}.bs-docs-nav .navbar-nav>.active>a,.bs-docs-nav .navbar-nav>.active>a:hover{background-color:#a33f3e;color:#fff}.bs-docs-nav .navbar-toggle{border-color:#b94846}.bs-docs-nav .navbar-toggle:hover{border-color:#a33f3e;background-color:#a33f3e}@media (max-width:991px){.navbar-toggle{margin-left:15px;display:block!important;float:left}}.bs-old-docs{padding:15px 20px;color:#787878;background-color:#fafafa;border-top:1px solid #fff;border-bottom:1px solid #e6e6e6}.bs-old-docs strong{color:#545454}@media (max-width:991px){.bs-sidebar.affix{position:static!important}}.bs-sidenav{margin-top:40px;margin-bottom:20px;width:124px}.bs-sidebar .nav>li>a{display:block;font-size:13px;font-weight:500;color:#999;padding:4px 15px;text-align:right}.bs-sidebar .nav>li>a:focus,.bs-sidebar .nav>li>a:hover{padding-right:14px;color:#b94846;text-decoration:none;background-color:transparent;border-right:1px solid #b94846}.bs-sidebar .nav>.active:focus>a,.bs-sidebar .nav>.active:hover>a,.bs-sidebar .nav>.active>a{padding-right:13px;font-weight:700;color:#b94846;background-color:transparent;border-right:2px solid #b94846}.bs-sidebar .nav .nav{display:none;padding-bottom:10px}.bs-sidebar .nav .nav>li>a{padding-top:2px;padding-bottom:2px;padding-right:30px;font-size:12px;font-weight:400}.bs-sidebar .nav .nav>li>a:focus,.bs-sidebar .nav .nav>li>a:hover{padding-right:29px}.bs-sidebar .nav .nav>.active:focus>a,.bs-sidebar .nav .nav>.active:hover>a,.bs-sidebar .nav .nav>.active>a{font-weight:500;padding-right:28px}@media (min-width:992px){.bs-sidebar .nav>.active>ul{display:block}.bs-sidebar.affix .bs-sidenav,.bs-sidebar.affix-bottom .bs-sidenav{margin-top:0;margin-bottom:0}}@media (min-width:1200px){.bs-sidebar{margin-right:30px}}.am-fade.aside-backdrop,.am-fade.modal-backdrop{background-color:rgba(0,0,0,.5)}.bs-docs-aside{min-width:200px}h1[id]{padding-top:80px;margin-top:-45px}h2[id]{padding-top:60px;margin-top:-45px}.bs-header{padding:30px 15px 40px;font-size:16px;text-align:center;text-shadow:0 1px 0 rgba(0,0,0,.15)}.bs-header h1{color:#fff}.bs-header p{font-weight:300;line-height:1.5}.bs-header .container{position:relative}@media (min-width:768px){.bs-header{font-size:21px;text-align:left}.bs-header h1{font-size:60px;line-height:1}}@media (min-width:992px){.bs-header h1,.bs-header p{margin-right:300px}}.highlight{display:none;padding:9px 14px;margin-bottom:14px;background-color:#f6f6f8;border:1px solid #e2e2e9;border-radius:4px}.highlight pre{padding:0;margin-top:0;margin-bottom:0;background-color:transparent;border:0;white-space:nowrap}.highlight pre code{font-size:inherit;color:#333}.highlight pre .lineno{display:inline-block;width:22px;padding-right:5px;margin-right:10px;text-align:right;color:#bebec5}@media (min-width:481px){.highlight{display:block}}input.ng-dirty.ng-invalid,select.ng-dirty.ng-invalid,textarea.ng-dirty.ng-invalid{color:#b94a48;border-color:#ee5f5b}input.ng-dirty.ng-invalid:focus,select.ng-dirty.ng-invalid:focus,textarea.ng-dirty.ng-invalid:focus{border-color:#e9322d;box-shadow:0 0 6px #f8b9b7}input:focus.ng-pristine.ng-invalid,select:focus.ng-pristine.ng-invalid,textarea:focus.ng-pristine.ng-invalid{color:#555;border:1px solid #ccc;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}input:focus.ng-pristine.ng-invalid:focus,select:focus.ng-pristine.ng-invalid:focus,textarea:focus.ng-pristine.ng-invalid:focus{border-color:rgba(82,168,236,.8);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(82,168,236,.6)}[tabindex="-1"]{outline:0}body .modal{overflow-y:hidden}body.modal-open{overflow-y:visible!important}.lt-ie9 .bs-sidebar{display:none!important}.btn[bs-select]{outline:0}.modal-backdrop{z-index:1040;bottom:0}.datepicker.dropdown-menu{width:250px;height:270px}.datepicker.dropdown-menu button{outline:0;border:0}.datepicker.dropdown-menu tbody{height:180px}.datepicker.dropdown-menu tbody button{padding:6px}.datepicker.dropdown-menu.datepicker-mode-1 tbody button,.datepicker.dropdown-menu.datepicker-mode-2 tbody button{height:65px}.timepicker.dropdown-menu{padding:0 4px}.timepicker.dropdown-menu button{outline:0;border:0}.timepicker.dropdown-menu tbody button{padding:6px}.select.dropdown-menu.select-multiple li{position:relative}.select.dropdown-menu.select-multiple li>i{color:#fff;display:none;position:absolute;top:5px;right:10px}.select.dropdown-menu.select-multiple li.active>i{display:block}body{position:relative;padding-top:50px}.bs-example-scope{font-size:85%}.bs-example-scope+.bs-example{margin:-15px -15px 15px}.bs-example-scope+.bs-example+.highlight>pre{border-radius:0 0 4px 4px}.aside.bs-docs-aside .aside-header{background:#b94846}.aside.bs-docs-aside .nav{margin:0}.bs-docs-social{max-height:200px}.bs-docs-social ul{list-style:none;padding:1em 0 0}.bs-docs-social ul li{height:30px}@media (max-width:991px){.bs-docs-social ul li{display:inline-block}}.bs-docs-home,.bs-header{color:#fff;background:url(../images/triangular-red.png) #b94846;padding-bottom:20px}pre>code{background:0 0}.bs-example+.highlight{position:relative}.bs-example+.highlight code{padding:2.5em .5em 1em}.bs-example+.highlight:after{content:"Source";position:absolute;top:15px;left:15px;font-size:12px;font-weight:700;color:#bbb;text-transform:uppercase;letter-spacing:1px}.edit-plunkr,.panel-heading[role=tab] .panel-title a,a[ng-click],input[type=checkbox]{cursor:pointer}.twitter-follow-button{position:relative;top:5px;margin-left:10px}.tab-pane.am-fade{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;opacity:1}.tab-pane.am-fade.active-remove{display:none!important}.tab-pane.am-fade.active-add{-webkit-animation-name:fadeIn;animation-name:fadeIn}.panel-collapse.am-collapse{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;overflow:hidden}.panel-collapse.am-collapse.in-remove{-webkit-animation-name:collapse;animation-name:collapse;display:block}.panel-collapse.am-collapse.in-add{-webkit-animation-name:expand;animation-name:expand}.panel-collapse.am-collapse2{-webkit-transition:.3s ease max-height;transition:.3s ease max-height;max-height:100px;overflow:hidden}.panel-collapse.am-collapse2.in-remove{max-height:100px;display:block}.panel-collapse.am-collapse2.in-add{max-height:0}@-webkit-keyframes expand{from{max-height:0}to{max-height:100px}}@keyframes expand{from{max-height:0}to{max-height:100px}}@-webkit-keyframes collapse{from{max-height:100px}to{max-height:0}}@keyframes collapse{from{max-height:100px}to{max-height:0}}
+/*# sourceMappingURL=../styles/docs.min.css.map */
\ No newline at end of file
diff --git a/public/assets/css/global/strap.min.css b/public/assets/css/global/strap.min.css
new file mode 100644
index 0000000..9cdb963
--- /dev/null
+++ b/public/assets/css/global/strap.min.css
@@ -0,0 +1,18 @@
+/**
+ * angular-motion
+ * @version v0.4.2 - 2015-05-20
+ * @link https://github.com/mgcrea/angular-motion
+ * @author Olivier Louvignes <[email-masked]> (https://github.com/mgcrea)
+ * @license MIT License, http://www.opensource.org/licenses/MIT
+ */
+.am-collapse{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;overflow:hidden;opacity:1}.am-collapse.am-collapse-add,.am-collapse.ng-hide-remove,.am-collapse.ng-move{-webkit-animation-name:expand;animation-name:expand}.am-collapse.am-collapse-remove,.am-collapse.ng-hide{-webkit-animation-name:collapse;animation-name:collapse}.am-collapse.ng-enter{visibility:hidden;-webkit-animation-name:expand;animation-name:expand;-webkit-animation-play-state:paused;animation-play-state:paused}.am-collapse.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-collapse.ng-leave{-webkit-animation-name:collapse;animation-name:collapse;-webkit-animation-play-state:paused;animation-play-state:paused}.am-collapse.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes expand{from{max-height:0}to{max-height:500px}}@keyframes expand{from{max-height:0}to{max-height:500px}}@-webkit-keyframes collapse{from{max-height:500px}to{max-height:0}}@keyframes collapse{from{max-height:500px}to{max-height:0}}.panel-collapse.am-collapse.in-remove{-webkit-animation-name:collapse;animation-name:collapse;display:block}.panel-collapse.am-collapse.in-add{-webkit-animation-name:expand;animation-name:expand}.am-fade{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;opacity:1}.am-fade.am-fade-add,.am-fade.ng-hide-remove,.am-fade.ng-move{-webkit-animation-name:fadeIn;animation-name:fadeIn}.am-fade.am-fade-remove,.am-fade.ng-hide{-webkit-animation-name:fadeOut;animation-name:fadeOut}.am-fade.ng-enter{visibility:hidden;-webkit-animation-name:fadeIn;animation-name:fadeIn;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-fade.ng-leave{-webkit-animation-name:fadeOut;animation-name:fadeOut;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeIn{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.tab-pane.am-fade.active-remove{display:none!important}.tab-pane.am-fade.active-add{-webkit-animation-name:fadeIn;animation-name:fadeIn}.aside-backdrop.am-fade,.modal-backdrop.am-fade{background:rgba(0,0,0,.5);-webkit-animation-duration:.15s;animation-duration:.15s}.aside-backdrop.am-fade.ng-leave,.modal-backdrop.am-fade.ng-leave{-webkit-animation-delay:.3s;animation-delay:.3s}.am-flip-x{-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-flip-x.am-flip-x-add,.am-flip-x.ng-hide-remove,.am-flip-x.ng-move{-webkit-animation-name:flipInXBounce;animation-name:flipInXBounce}.am-flip-x.am-flip-x-remove,.am-flip-x.ng-hide{-webkit-animation-name:flipOutX;animation-name:flipOutX}.am-flip-x.ng-enter{visibility:hidden;-webkit-animation-name:flipInXBounce;animation-name:flipInXBounce;-webkit-animation-play-state:paused;animation-play-state:paused}.am-flip-x.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-flip-x.ng-leave{-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-animation-play-state:paused;animation-play-state:paused}.am-flip-x.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}.am-flip-x-linear{-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-flip-x-linear.am-flip-x-add,.am-flip-x-linear.ng-hide-remove,.am-flip-x-linear.ng-move{-webkit-animation-name:flipInX;animation-name:flipInX}.am-flip-x-linear.am-flip-x-remove,.am-flip-x-linear.ng-hide{-webkit-animation-name:flipOutX;animation-name:flipOutX}.am-flip-x-linear.ng-enter{visibility:hidden;-webkit-animation-name:flipInX;animation-name:flipInX;-webkit-animation-play-state:paused;animation-play-state:paused}.am-flip-x-linear.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-flip-x-linear.ng-leave{-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-animation-play-state:paused;animation-play-state:paused}.am-flip-x-linear.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes flipInX{from{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}to{opacity:1;-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg)}}@keyframes flipInX{from{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}to{opacity:1;-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg)}}@-webkit-keyframes flipInXBounce{from{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-transform:perspective(400px) rotateX(-10deg);transform:perspective(400px) rotateX(-10deg)}70%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}to{opacity:1;-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg)}}@keyframes flipInXBounce{from{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}40%{-webkit-transform:perspective(400px) rotateX(-10deg);transform:perspective(400px) rotateX(-10deg)}70%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}to{opacity:1;-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg)}}@-webkit-keyframes flipOutX{from{opacity:1;-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}@keyframes flipOutX{from{opacity:1;-webkit-transform:perspective(400px) rotateX(0deg);transform:perspective(400px) rotateX(0deg)}to{opacity:0;-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg)}}.am-slide-top{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-slide-top.am-slide-top-add,.am-slide-top.ng-hide-remove,.am-slide-top.ng-move{-webkit-animation-name:slideFromTop;animation-name:slideFromTop}.am-slide-top.am-slide-top-remove,.am-slide-top.ng-hide{-webkit-animation-name:slideToTop;animation-name:slideToTop}.am-slide-top.ng-enter{visibility:hidden;-webkit-animation-name:slideFromTop;animation-name:slideFromTop;-webkit-animation-play-state:paused;animation-play-state:paused}.am-slide-top.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-slide-top.ng-leave{-webkit-animation-name:slideToTop;animation-name:slideToTop;-webkit-animation-play-state:paused;animation-play-state:paused}.am-slide-top.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}.am-slide-right{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-slide-right.am-slide-right-add,.am-slide-right.ng-hide-remove,.am-slide-right.ng-move{-webkit-animation-name:slideFromRight;animation-name:slideFromRight}.am-slide-right.am-slide-right-remove,.am-slide-right.ng-hide{-webkit-animation-name:slideToRight;animation-name:slideToRight}.am-slide-right.ng-enter{visibility:hidden;-webkit-animation-name:slideFromRight;animation-name:slideFromRight;-webkit-animation-play-state:paused;animation-play-state:paused}.am-slide-right.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-slide-right.ng-leave{-webkit-animation-name:slideToRight;animation-name:slideToRight;-webkit-animation-play-state:paused;animation-play-state:paused}.am-slide-right.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}.am-slide-bottom{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-slide-bottom.am-slide-bottom-add,.am-slide-bottom.ng-hide-remove,.am-slide-bottom.ng-move{-webkit-animation-name:slideFromBottom;animation-name:slideFromBottom}.am-slide-bottom.am-slide-bottom-remove,.am-slide-bottom.ng-hide{-webkit-animation-name:slideToBottom;animation-name:slideToBottom}.am-slide-bottom.ng-enter{visibility:hidden;-webkit-animation-name:slideFromBottom;animation-name:slideFromBottom;-webkit-animation-play-state:paused;animation-play-state:paused}.am-slide-bottom.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-slide-bottom.ng-leave{-webkit-animation-name:slideToBottom;animation-name:slideToBottom;-webkit-animation-play-state:paused;animation-play-state:paused}.am-slide-bottom.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}.am-slide-left{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-slide-left.am-slide-left-add,.am-slide-left.ng-hide-remove,.am-slide-left.ng-move{-webkit-animation-name:slideFromLeft;animation-name:slideFromLeft}.am-slide-left.am-slide-left-remove,.am-slide-left.ng-hide{-webkit-animation-name:slideToLeft;animation-name:slideToLeft}.am-slide-left.ng-enter{visibility:hidden;-webkit-animation-name:slideFromLeft;animation-name:slideFromLeft;-webkit-animation-play-state:paused;animation-play-state:paused}.am-slide-left.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-slide-left.ng-leave{-webkit-animation-name:slideToLeft;animation-name:slideToLeft;-webkit-animation-play-state:paused;animation-play-state:paused}.am-slide-left.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes slideFromTop{from{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@keyframes slideFromTop{from{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@-webkit-keyframes slideToTop{to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@keyframes slideToTop{to{-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@-webkit-keyframes slideFromRight{from{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes slideFromRight{from{-webkit-transform:translateX(100%);transform:translateX(100%)}}@-webkit-keyframes slideToRight{to{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes slideToRight{to{-webkit-transform:translateX(100%);transform:translateX(100%)}}@-webkit-keyframes slideFromBottom{from{-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes slideFromBottom{from{-webkit-transform:translateY(100%);transform:translateY(100%)}}@-webkit-keyframes slideToBottom{to{-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes slideToBottom{to{-webkit-transform:translateY(100%);transform:translateY(100%)}}@-webkit-keyframes slideFromLeft{from{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@keyframes slideFromLeft{from{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@-webkit-keyframes slideToLeft{to{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@keyframes slideToLeft{to{-webkit-transform:translateX(-100%);transform:translateX(-100%)}}.am-fade-and-slide-top{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-fade-and-slide-top.am-fade-and-slide-top-add,.am-fade-and-slide-top.ng-hide-remove,.am-fade-and-slide-top.ng-move{-webkit-animation-name:fadeAndSlideFromTop;animation-name:fadeAndSlideFromTop}.am-fade-and-slide-top.am-fade-and-slide-top-remove,.am-fade-and-slide-top.ng-hide{-webkit-animation-name:fadeAndSlideToTop;animation-name:fadeAndSlideToTop}.am-fade-and-slide-top.ng-enter{visibility:hidden;-webkit-animation-name:fadeAndSlideFromTop;animation-name:fadeAndSlideFromTop;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-slide-top.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-fade-and-slide-top.ng-leave{-webkit-animation-name:fadeAndSlideToTop;animation-name:fadeAndSlideToTop;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-slide-top.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}.am-fade-and-slide-right{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-fade-and-slide-right.am-fade-and-slide-right-add,.am-fade-and-slide-right.ng-hide-remove,.am-fade-and-slide-right.ng-move{-webkit-animation-name:fadeAndSlideFromRight;animation-name:fadeAndSlideFromRight}.am-fade-and-slide-right.am-fade-and-slide-right-remove,.am-fade-and-slide-right.ng-hide{-webkit-animation-name:fadeAndSlideToRight;animation-name:fadeAndSlideToRight}.am-fade-and-slide-right.ng-enter{visibility:hidden;-webkit-animation-name:fadeAndSlideFromRight;animation-name:fadeAndSlideFromRight;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-slide-right.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-fade-and-slide-right.ng-leave{-webkit-animation-name:fadeAndSlideToRight;animation-name:fadeAndSlideToRight;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-slide-right.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}.am-fade-and-slide-bottom{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-fade-and-slide-bottom.am-fade-and-slide-bottom-add,.am-fade-and-slide-bottom.ng-hide-remove,.am-fade-and-slide-bottom.ng-move{-webkit-animation-name:fadeAndSlideFromBottom;animation-name:fadeAndSlideFromBottom}.am-fade-and-slide-bottom.am-fade-and-slide-bottom-remove,.am-fade-and-slide-bottom.ng-hide{-webkit-animation-name:fadeAndSlideToBottom;animation-name:fadeAndSlideToBottom}.am-fade-and-slide-bottom.ng-enter{visibility:hidden;-webkit-animation-name:fadeAndSlideFromBottom;animation-name:fadeAndSlideFromBottom;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-slide-bottom.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-fade-and-slide-bottom.ng-leave{-webkit-animation-name:fadeAndSlideToBottom;animation-name:fadeAndSlideToBottom;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-slide-bottom.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}.am-fade-and-slide-left{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-fade-and-slide-left.am-fade-and-slide-left-add,.am-fade-and-slide-left.ng-hide-remove,.am-fade-and-slide-left.ng-move{-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards;-webkit-animation-name:fadeAndSlideFromLeft;animation-name:fadeAndSlideFromLeft}.am-fade-and-slide-left.am-fade-and-slide-left-remove,.am-fade-and-slide-left.ng-hide{-webkit-animation-name:fadeAndSlideToLeft;animation-name:fadeAndSlideToLeft}.am-fade-and-slide-left.ng-enter{visibility:hidden;-webkit-animation-name:fadeAndSlideFromLeft;animation-name:fadeAndSlideFromLeft;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-slide-left.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-fade-and-slide-left.ng-leave{-webkit-animation-name:fadeAndSlideToLeft;animation-name:fadeAndSlideToLeft;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-slide-left.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes fadeAndSlideFromTop{from{opacity:0;-webkit-transform:translateY(-20%);transform:translateY(-20%)}to{opacity:1}}@keyframes fadeAndSlideFromTop{from{opacity:0;-webkit-transform:translateY(-20%);transform:translateY(-20%)}to{opacity:1}}@-webkit-keyframes fadeAndSlideToTop{from{opacity:1}to{opacity:0;-webkit-transform:translateY(-20%);transform:translateY(-20%)}}@keyframes fadeAndSlideToTop{from{opacity:1}to{opacity:0;-webkit-transform:translateY(-20%);transform:translateY(-20%)}}@-webkit-keyframes fadeAndSlideFromRight{from{opacity:0;-webkit-transform:translateX(20%);transform:translateX(20%)}to{opacity:1}}@keyframes fadeAndSlideFromRight{from{opacity:0;-webkit-transform:translateX(20%);transform:translateX(20%)}to{opacity:1}}@-webkit-keyframes fadeAndSlideToRight{from{opacity:1}to{opacity:0;-webkit-transform:translateX(20%);transform:translateX(20%)}}@keyframes fadeAndSlideToRight{from{opacity:1}to{opacity:0;-webkit-transform:translateX(20%);transform:translateX(20%)}}@-webkit-keyframes fadeAndSlideFromBottom{from{opacity:0;-webkit-transform:translateY(20%);transform:translateY(20%)}to{opacity:1}}@keyframes fadeAndSlideFromBottom{from{opacity:0;-webkit-transform:translateY(20%);transform:translateY(20%)}to{opacity:1}}@-webkit-keyframes fadeAndSlideToBottom{from{opacity:1}to{opacity:0;-webkit-transform:translateY(20%);transform:translateY(20%)}}@keyframes fadeAndSlideToBottom{from{opacity:1}to{opacity:0;-webkit-transform:translateY(20%);transform:translateY(20%)}}@-webkit-keyframes fadeAndSlideFromLeft{from{opacity:0;-webkit-transform:translateX(-20%);transform:translateX(-20%)}to{opacity:1}}@keyframes fadeAndSlideFromLeft{from{opacity:0;-webkit-transform:translateX(-20%);transform:translateX(-20%)}to{opacity:1}}@-webkit-keyframes fadeAndSlideToLeft{from{opacity:1}to{opacity:0;-webkit-transform:translateX(-20%);transform:translateX(-20%)}}@keyframes fadeAndSlideToLeft{from{opacity:1}to{opacity:0;-webkit-transform:translateX(-20%);transform:translateX(-20%)}}.am-fade-and-scale{-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-fill-mode:backwards;animation-fill-mode:backwards}.am-fade-and-scale.am-fade-and-scale-add,.am-fade-and-scale.ng-enter,.am-fade-and-scale.ng-hide-remove,.am-fade-and-scale.ng-move{-webkit-animation-name:fadeAndScaleIn;animation-name:fadeAndScaleIn}.am-fade-and-scale.am-fade-and-scale-remove,.am-fade-and-scale.ng-hide,.am-fade-and-scale.ng-leave{-webkit-animation-name:fadeAndScaleOut;animation-name:fadeAndScaleOut}.am-fade-and-scale.ng-enter{visibility:hidden;-webkit-animation-name:fadeAndScaleIn;animation-name:fadeAndScaleIn;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-scale.ng-enter.ng-enter-active{visibility:visible;-webkit-animation-play-state:running;animation-play-state:running}.am-fade-and-scale.ng-leave{-webkit-animation-name:fadeAndScaleOut;animation-name:fadeAndScaleOut;-webkit-animation-play-state:paused;animation-play-state:paused}.am-fade-and-scale.ng-leave.ng-leave-active{-webkit-animation-play-state:running;animation-play-state:running}@-webkit-keyframes fadeAndScaleIn{from{opacity:0;-webkit-transform:scale(0.7);transform:scale(0.7)}to{opacity:1}}@keyframes fadeAndScaleIn{from{opacity:0;-webkit-transform:scale(0.7);transform:scale(0.7)}to{opacity:1}}@-webkit-keyframes fadeAndScaleOut{from{opacity:1}to{opacity:0;-webkit-transform:scale(0.7);transform:scale(0.7)}}@keyframes fadeAndScaleOut{from{opacity:1}to{opacity:0;-webkit-transform:scale(0.7);transform:scale(0.7)}}
+/*# sourceMappingURL=angular-motion.min.css.map */
+/**
+ * bootstrap-additions
+ * @version v0.3.1 - 2015-05-20
+ * @link https://github.com/mgcrea/bootstrap-additions
+ * @author Olivier Louvignes <[email-masked]> (https://github.com/mgcrea)
+ * @license MIT License, http://www.opensource.org/licenses/MIT
+ */
+@media (max-width:991px){.aside{min-width:240px}}.alert{outline:0}.alert.bottom,.alert.bottom-left,.alert.bottom-right,.alert.top,.alert.top-left,.alert.top-right{position:fixed;z-index:1050;margin:20px}.alert.top,.alert.top-left,.alert.top-right{top:50px}.alert.top{right:0;left:0}.alert.top-right{right:0}.alert.top-right .close{padding-left:10px}.alert.top-left{left:0}.alert.top-left .close{padding-right:10px}.alert.bottom,.alert.bottom-left,.alert.bottom-right{bottom:0}.alert.bottom{right:0;left:0}.alert.bottom-right{right:0}.alert.bottom-right .close{padding-left:10px}.alert.bottom-left{left:0}.alert.bottom-left .close{padding-right:10px}.aside .aside-dialog .aside-footer:after,.aside .aside-dialog .aside-footer:before,.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.aside .aside-dialog .aside-footer:after,.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.aside{position:fixed;top:0;bottom:0;z-index:1049;overflow:auto;min-width:320px;background:#fff}.aside:focus{outline:0}@media (max-width:991px){.aside{min-width:240px}}.aside.left{right:auto;left:0}.aside.right{right:0;left:auto}.aside .aside-dialog .aside-header{border-bottom:1px solid #e5e5e5;min-height:16.43px;padding:6px 15px;background:#337ab7;color:#fff}.aside .aside-dialog .aside-header .close{margin-right:-8px;padding:4px 8px;color:#fff;font-size:25px;opacity:.8}.aside .aside-dialog .aside-body{position:relative;padding:15px}.aside .aside-dialog .aside-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.aside .aside-dialog .aside-footer .btn+.btn{margin-left:5px;margin-bottom:0}.aside .aside-dialog .aside-footer .btn-group .btn+.btn{margin-left:-1px}.aside .aside-dialog .aside-footer .btn-block+.btn-block{margin-left:0}.aside-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.aside-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.aside-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.datepicker.dropdown-menu{width:250px;height:270px}.datepicker.dropdown-menu button{outline:0;border:0}.datepicker.dropdown-menu tbody{height:180px}.datepicker.dropdown-menu tbody button{padding:6px}.datepicker.dropdown-menu.datepicker-mode-1 tbody button,.datepicker.dropdown-menu.datepicker-mode-2 tbody button{height:65px}.callout{margin:20px 0;padding:20px;border-left:3px solid #eee}.callout h4{margin-top:0;margin-bottom:5px}.callout p:last-child{margin-bottom:0}.callout-danger{border-color:#eed3d7;background-color:#fdf7f7}.callout-danger h4{color:#b94a48}.callout-warning{border-color:#faebcc;background-color:#faf8f0}.callout-warning h4{color:#8a6d3b}.callout-info{border-color:#bce8f1;background-color:#f4f8fa}.callout-info h4{color:#34789a}.modal.center .modal-dialog{position:fixed;top:40%;left:50%;min-width:320px;max-width:630px;width:50%;-webkit-transform:translateX(-50%) translateY(-50%);-ms-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.popover.top-left{margin-top:-10px}.popover.top-left .arrow{margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px;left:10%}.popover.top-left .arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.top-right{margin-top:-10px}.popover.top-right .arrow{margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px;left:90%}.popover.top-right .arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.bottom-left{margin-top:10px}.popover.bottom-left .arrow{margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px;left:10%}.popover.bottom-left .arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.bottom-right{margin-top:10px}.popover.bottom-right .arrow{margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px;left:90%}.popover.bottom-right .arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.timepicker.dropdown-menu{padding:0 4px}.timepicker.dropdown-menu button{outline:0;border:0}.timepicker.dropdown-menu tbody button{padding:6px}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.tooltip.tooltip-info.top .tooltip-arrow,.tooltip.tooltip-info.top-left .tooltip-arrow,.tooltip.tooltip-info.top-right .tooltip-arrow{border-top-color:#d9edf7}.tooltip.tooltip-info.right .tooltip-arrow{border-right-color:#d9edf7}.tooltip.tooltip-info.bottom .tooltip-arrow,.tooltip.tooltip-info.bottom-left .tooltip-arrow,.tooltip.tooltip-info.bottom-right .tooltip-arrow{border-bottom-color:#d9edf7}.tooltip.tooltip-info.left .tooltip-arrow{border-left-color:#d9edf7}.tooltip.tooltip-info .tooltip-inner{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.tooltip.tooltip-info .tooltip-inner hr{border-top-color:#a6e1ec}.tooltip.tooltip-info .tooltip-inner .alert-link{color:#245269}.tooltip.tooltip-success.top .tooltip-arrow,.tooltip.tooltip-success.top-left .tooltip-arrow,.tooltip.tooltip-success.top-right .tooltip-arrow{border-top-color:#dff0d8}.tooltip.tooltip-success.right .tooltip-arrow{border-right-color:#dff0d8}.tooltip.tooltip-success.bottom .tooltip-arrow,.tooltip.tooltip-success.bottom-left .tooltip-arrow,.tooltip.tooltip-success.bottom-right .tooltip-arrow{border-bottom-color:#dff0d8}.tooltip.tooltip-success.left .tooltip-arrow{border-left-color:#dff0d8}.tooltip.tooltip-success .tooltip-inner{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.tooltip.tooltip-success .tooltip-inner hr{border-top-color:#c9e2b3}.tooltip.tooltip-success .tooltip-inner .alert-link{color:#2b542c}.tooltip.tooltip-danger.top .tooltip-arrow,.tooltip.tooltip-danger.top-left .tooltip-arrow,.tooltip.tooltip-danger.top-right .tooltip-arrow{border-top-color:#f2dede}.tooltip.tooltip-danger.right .tooltip-arrow{border-right-color:#f2dede}.tooltip.tooltip-danger.bottom .tooltip-arrow,.tooltip.tooltip-danger.bottom-left .tooltip-arrow,.tooltip.tooltip-danger.bottom-right .tooltip-arrow{border-bottom-color:#f2dede}.tooltip.tooltip-danger.left .tooltip-arrow{border-left-color:#f2dede}.tooltip.tooltip-danger .tooltip-inner{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.tooltip.tooltip-danger .tooltip-inner hr{border-top-color:#e4b9c0}.tooltip.tooltip-danger .tooltip-inner .alert-link{color:#843534}.tooltip.top-left{margin-top:-3px;padding:5px 0}.tooltip.top-left .tooltip-arrow{bottom:0;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000;left:10%}.tooltip.top-right{margin-top:-3px;padding:5px 0}.tooltip.top-right .tooltip-arrow{bottom:0;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000;left:90%}.tooltip.bottom-left{margin-top:3px;padding:5px 0}.tooltip.bottom-left .tooltip-arrow{top:0;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000;left:10%}.tooltip.bottom-right{margin-top:3px;padding:5px 0}.tooltip.bottom-right .tooltip-arrow{top:0;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000;left:90%}
+/*# sourceMappingURL=bootstrap-additions.min.css.map */
\ No newline at end of file
diff --git a/public/assets/css/inbox.css b/public/assets/css/inbox.css
new file mode 100644
index 0000000..361804f
--- /dev/null
+++ b/public/assets/css/inbox.css
@@ -0,0 +1,487 @@
+/***
+Inbox Page
+***/
+.inbox {
+  margin-bottom: 20px;
+}
+
+.inbox .inbox {
+  margin-bottom: 0px;
+}
+
+.inbox .tab-content {
+  overflow: inherit;
+}
+
+.inbox .inbox-loading {
+  display: none;
+  font-size: 22px;
+  font-weight: 300;
+}
+
+/*Inbox Menu*/
+.inbox .inbox-nav {
+  margin: 0;
+  padding: 0;
+  list-style: none;
+}
+
+.inbox .inbox-nav li {
+  position: relative;
+}
+
+.inbox .inbox-nav li a {
+  color: #4d82a3;
+  display: block;
+  font-size: 15px;
+  border-left: none;
+  text-align: left !important;
+  padding: 8px 14px;
+  margin-bottom: 1px;
+  background: #f4f9fd;
+}
+
+.inbox .inbox-nav li.active a,
+.inbox .inbox-nav li.active:hover a {
+  color: #fff;
+  border-left: none;
+  background: #169ef4 !important;
+  text-decoration: none;
+}
+
+.inbox .inbox-nav li.active b {
+  top: 12px;
+  right: -6px;
+  width: 6px;
+  position: absolute;
+  display: inline-block;
+  border-top: 6px solid transparent;
+  border-bottom: 6px solid transparent;
+  border-left: 6px solid #169ef4;
+}
+
+.inbox .inbox-nav li:hover a {
+  color: #4d82a3;
+  background: #eef4f7 !important;
+  text-decoration: none;
+}
+
+.inbox .inbox-nav li.compose-btn a {
+  color: #fff;
+  text-shadow: none;
+  text-align: center;
+  margin-bottom: 18px;
+  background: #35aa47;
+}
+
+.inbox .inbox-nav li.compose-btn i,
+.inbox .inbox-nav li.compose-btn:hover i {
+  top: 1px;
+  color: #fff;
+  font-size: 15px;
+  position: relative;
+  background: none !important;
+}
+
+.inbox .inbox-nav li.compose-btn a:hover {
+  background-color: #1d943b !important;
+}
+
+/*Inbox Content*/
+.inbox .inbox-header {
+  overflow: hidden;
+}
+
+.inbox .inbox-header h1 {
+  margin: 0;
+  color: #666;
+  margin-bottom: 10px;
+}
+
+.inbox .pagination-control {
+  text-align: right;
+}
+
+.inbox .pagination-control .pagination-info {
+  display: inline-block;
+  padding-right: 10px;
+  font-size: 14px;
+  line-height: 14px;
+}
+
+.inbox tr {
+  color: #777;
+  font-size: 13px;
+}
+
+.inbox tr label {
+  display: inline-block;
+  margin-bottom: 0;
+}
+
+.inbox tr.unread td {
+  font-weight: 600;
+}
+
+.inbox td i.icon-paper-clip {
+  top: 2px;
+  color: #d8e0e5;
+  font-size: 17px;
+  position: relative;
+}
+
+.inbox tr i.icon-star,
+.inbox tr i.icon-trash {
+  cursor: pointer;
+}
+
+.inbox tr i.icon-star {
+  color: #eceef0;
+}
+
+.inbox tr i.icon-star:hover {
+  color: #fd7b12;
+}
+
+.inbox tr i.inbox-started {
+  color: #fd7b12;
+}
+
+/*.inbox .table th,
+.inbox .table td {
+  border: none;
+}
+
+.inbox .table th {
+  background: #eef4f7;
+  border-bottom: solid 5px #fff;
+}*/
+
+.inbox th.text-right {
+  text-align: right;
+}
+
+.inbox th label.inbox-select-all {
+  color: #828f97;
+  font-size: 13px;
+  padding: 1px 4px 0;
+}
+
+.inbox ul.inbox-nav {
+  margin-bottom: 0;
+}
+
+.inbox ul.inbox-nav li {
+  padding: 0;
+}
+
+.inbox ul.inbox-nav li span {
+  color: #828f97;
+  font-size: 12px;
+  margin-right: 10px;
+}
+
+.inbox ul.inbox-nav i {
+  color: #fff;
+  padding: 1px 0;
+  font-size: 15px;
+  cursor: pointer;
+  background: #d0dde4 !important;
+}
+
+.inbox ul.inbox-nav i:hover {
+  background: #169ef4 !important;
+}
+
+.inbox td.text-right {
+  /*width: 100px;*/
+  text-align: right;
+}
+
+.inbox td.inbox-small-cells {
+  width: 10px;
+}
+
+.inbox .table-hover tbody tr:hover > td,
+.inbox .table-hover tbody tr:hover > th,
+.inbox .table-striped tbody > tr:nth-child(odd) > td,
+.inbox .table-striped tbody > tr:nth-child(odd) > th {
+  background: #f8fbfd;
+  cursor: pointer;
+}
+
+.inbox .table-hover tbody tr:hover > td,
+.inbox .table-hover tbody tr:hover > th {
+  background: #eef4f7;
+}
+
+/*Inbox Drafts*/
+.inbox .inbox-drafts {
+  padding: 8px 0;
+  text-align: center;
+  border-top: solid 1px #eee;
+  border-bottom: solid 1px #eee;
+}
+
+/*Inbox View*/
+.inbox-view-header {
+  margin-bottom: 20px;
+}
+
+.inbox-view-header h1 {
+  color: #666;
+  font-size: 22px;
+  line-height: 24px;
+  margin-bottom: 0 !important;
+}
+
+.inbox-view-header h1 a {
+  top: -2px;
+  color: #fff;
+  cursor: pointer;
+  font-size: 13px;
+  padding: 2px 7px;
+  line-height: 16px;
+  position: relative;
+  background: #b0bcc4;
+  display: inline-block;
+}
+
+.inbox-view-header h1 a:hover {
+  background: #aab5bc;
+  text-decoration: none;
+}
+
+.inbox-view-header i.icon-print {
+  color: #94a4ab;
+  cursor: pointer;
+  font-size: 14px;
+  display: inline-block;
+  padding: 6px 8px !important;
+  background: #edf1f4 !important;
+}
+
+.inbox-view-header i.icon-print:hover {
+  background: #e7ebef !important;
+}
+
+.inbox-view-info {
+  color: #666;
+  padding: 5px 0;
+  margin-bottom: 10px;
+  border-top: solid 1px #eee;
+  border-bottom: solid 1px #eee;
+}
+
+.inbox-view-info strong {
+  color: #666;
+  margin: 0 10px 0 5px;
+}
+
+.inbox-view-info .inbox-info-btn {
+  text-align: right;
+}
+
+.inbox-view-info .inbox-info-btn ul {
+  text-align: left;
+}
+
+.inbox-view-info button {
+  top: 2px;
+  color: #94a4ab;
+  font-size: 13px;
+  margin-left: 4px;
+  padding: 3px 10px;
+  position: relative;
+  background: #edf1f4;
+}
+
+.inbox-view-info button:hover {
+  color: #94a4ab;
+  background: #e7ebef;
+}
+
+.inbox-view {
+  color: #666;
+  padding: 15px 0 0;
+}
+
+.inbox-view a {
+  color: #169ce9;
+}
+
+.inbox-attached {
+  line-height: 16px;
+}
+
+.inbox-attached a {
+  margin: 0 2px;
+}
+
+.inbox-attached img {
+  height: auto;
+  max-width: 250px;
+  margin-bottom: 5px;
+}
+
+.inbox-attached span {
+  margin-right: 3px;
+}
+
+.inbox-attached strong {
+  color: #555;
+  display: block;
+  font-size: 13px;
+}
+
+.inbox-attached .margin-bottom-25 {
+  margin-bottom: 25px;
+}
+
+.inbox-attached .margin-bottom-15 {
+  margin-bottom: 15px;
+}
+
+/*Inbox Compose*/
+.inbox-compose {
+  margin-top: 1px;
+  border: solid 1px #eee;
+}
+
+.inbox-compose-btn {
+  padding: 8px 4px;
+  background: #f0f6fa;
+}
+
+.inbox-compose-attachment {
+  padding: 8px 8px;
+}
+
+.inbox-compose-attachment .btn {
+  padding: 4px 10px;
+}
+
+.inbox-compose-btn button {
+  color: #fff;
+  font-size: 14px;
+  margin-left: 4px;
+  padding: 4px 10px;
+  background: #c0cfdd;
+}
+
+.inbox-compose-btn button:hover {
+  color: #fff;
+  background: #4d90fe;
+}
+
+.inbox-compose-btn button i {
+  margin-right: 3px;
+}
+
+.inbox-compose .inbox-form-group {
+  margin-bottom: 0;
+  position: relative;
+  border-bottom: solid 1px #eee;
+}
+
+.inbox-compose .controls {
+  margin-left: 85px;
+}
+
+.inbox-compose .inbox-form-group > label {
+  width: 80px;
+  float: left;
+  color: #979797;
+  text-align: right;
+}
+
+.inbox-compose .controls > input {
+  border: none !important;
+}
+
+.inbox-compose .controls-to {
+  padding-right: 55px;
+}
+
+.inbox-compose .controls-cc {
+  padding-right: 20px;
+}
+
+.inbox-compose .controls-bcc {
+  padding-right: 20px;
+}
+
+.inbox-compose .inbox-form-group a.close {
+  top: 13px;
+  right: 10px;
+  position: absolute;
+}
+
+.inbox-compose .mail-to .inbox-cc-bcc {
+  display: inline-block;
+  top: 7px;
+  right: 10px;
+  color: #979797;
+  font-size: 14px;
+  cursor: pointer;
+  position: absolute;
+}
+
+.inbox-compose .mail-to .inbox-bcc {
+  margin-left: 5px;
+}
+
+.inbox-compose .mail-to inbox-cc:hover,
+.inbox-compose .mail-to inbox-bcc:hover {
+  color: #777;
+}
+
+.inbox-compose .wysihtml5 {
+  padding: 0px !important;
+  margin: 0px !important;
+  border: 0 !important;
+}
+
+.inbox-compose .wysihtml5-sandbox {
+  padding: 0px !important;
+  margin: 0px !important;
+  display: block !important;
+  border: 0 !important;
+  margin-top: 5px;
+  width: 100% !important;
+  border-left: none;
+  border-right: none;
+  border-color: #eee;
+}
+
+.inbox-compose .wysihtml5-toolbar {
+  border: 0;
+  border-bottom: 1px solid #eee;
+}
+
+.inbox-compose .wysihtml5-toolbar > li {
+  height: 34px;
+  margin-right: 0;
+  margin-bottom: 0;
+}
+
+.inbox-compose .wysihtml5-toolbar > li > a,
+.inbox-compose .wysihtml5-toolbar > li > div > a {
+  background: #fff;
+}
+.inbox-compose .wysihtml5-toolbar > li > a:hover,
+.inbox-compose .wysihtml5-toolbar > li > div > a:hover {
+  background: #f1f1f1;
+  border-radius: 0;
+}
+
+.inbox-compose .wysihtml5-toolbar .dropdown.open .dropdown-toggle,
+ul.wysihtml5-toolbar a.btn.wysihtml5-command-active {
+  background: #eee !important;
+}
+
+@media (max-width: 480px) {
+  .inbox-compose .inbox-form-group > label {
+    margin-top: 7px;
+  }
+}
diff --git a/public/assets/css/login-soft.css b/public/assets/css/login-soft.css
new file mode 100644
index 0000000..a110d88
--- /dev/null
+++ b/public/assets/css/login-soft.css
@@ -0,0 +1,171 @@
+/***
+Login page
+***/
+/* logo page */
+.login {
+  background-color: #666 !important;
+}
+
+.login .logo {
+  margin: 60px auto 20px auto;
+  padding: 15px;
+  text-align: center;
+}
+
+.login .content {
+  background: url(../images/bg-white-lock.png) repeat;
+  width: 360px;
+  margin: 0 auto;
+  margin-bottom: 0px;
+  padding: 30px;
+  padding-top: 20px;
+  padding-bottom: 15px;
+  -webkit-border-radius: 7px;
+  -moz-border-radius: 7px;
+  -ms-border-radius: 7px;
+  -o-border-radius: 7px;
+  border-radius: 7px;
+}
+
+.login .content h3 {
+  color: #eee;
+}
+
+.login .content h4 {
+  color: #eee;
+}
+
+.login .content p,
+.login .content label {
+  color: #fff;
+}
+
+.login .content .login-form,
+.login .content .forget-form {
+  padding: 0px;
+  margin: 0px;
+}
+
+.login .content .form-control {
+  background-color: #fff;
+}
+
+.login .content .forget-form {
+  display: none;
+}
+
+.login .content .register-form {
+  /*display: none;*/
+}
+
+.login .content .form-title {
+  font-weight: 300;
+  margin-bottom: 25px;
+}
+
+.login .content .form-actions {
+  background-color: transparent;
+  clear: both;
+  border: 0px;
+  padding: 0px 30px 25px 30px;
+  margin-left: -30px;
+  margin-right: -30px;
+}
+
+.login .content .form-actions .checkbox {
+  margin-left: 0;
+  padding-left: 0;
+}
+
+.login .content .forget-form .form-actions {
+  border: 0;
+  margin-bottom: 0;
+  padding-bottom: 20px;
+}
+
+.login .content .register-form .form-actions {
+  border: 0;
+  margin-bottom: 0;
+  padding-bottom: 0px;
+}
+
+.login .content .form-actions .checkbox {
+  margin-top: 8px;
+  display: inline-block;
+}
+
+.login .content .form-actions .btn {
+  margin-top: 1px;
+}
+
+.login .content .forget-password {
+  margin-top: 25px;
+}
+
+.login .content .create-account {
+  border-top: 1px dotted #eee;
+  padding-top: 10px;
+  margin-top: 15px;
+}
+
+.login .content .create-account a {
+  display: inline-block;
+  margin-top: 5px;
+}
+
+/* select2 dropdowns */
+.login .content .select2-container i {
+  display: inline-block;
+  position: relative;
+  color: #ccc;
+  z-index: 1;
+  top: 1px;
+  margin: 4px 4px 0px -1px;
+  width: 16px;
+  height: 16px;
+  font-size: 16px;
+  text-align: center;
+}
+
+.login .content .has-error .select2-container i {
+  color: #b94a48;
+}
+
+.login .content .select2-container a span {
+  font-size: 13px;
+}
+
+.login .content .select2-container a span img {
+  margin-left: 4px;
+}
+
+/* footer copyright */
+.login .copyright {
+  text-align: center;
+  margin: 0 auto;
+  padding: 10px;
+  color: #eee;
+  font-size: 13px;
+}
+
+@media (max-width: 480px) {
+  /***
+  Login page
+  ***/
+  .login .logo {
+    margin-top: 10px;
+  }
+
+  .login .content {
+    padding: 30px;
+    width: 222px;
+  }
+
+  .login .content h3 {
+    font-size: 22px;
+  }
+
+  .login .checkbox {
+    font-size: 13px;
+  }
+}
diff --git a/public/assets/css/login.css b/public/assets/css/login.css
new file mode 100644
index 0000000..15e3073
--- /dev/null
+++ b/public/assets/css/login.css
@@ -0,0 +1,242 @@
+/***
+Login page
+***/
+/* bg color */
+.login {
+  background-color: #364150 !important;
+}
+
+.login .logo {
+  margin: 0 auto;
+  margin-top: 60px;
+  padding: 15px;
+  text-align: center;
+}
+
+.login .content {
+  background-color: #eceef1;
+  -webkit-border-radius: 7px;
+  -moz-border-radius: 7px;
+  -ms-border-radius: 7px;
+  -o-border-radius: 7px;
+  border-radius: 7px;
+  width: 400px;
+  margin: 25px auto 10px auto;
+  padding: 30px;
+  padding-top: 10px;
+  overflow: hidden;
+  position: relative;
+}
+
+.login .content h3 {
+  color: #4db3a5;
+  text-align: center;
+  font-size: 28px;
+  font-weight: 400 !important;
+}
+
+.login .content h4 {
+  color: #555;
+}
+
+.login .content .hint {
+  color: #999;
+  padding: 0;
+  margin: 15px 0 7px 0;
+}
+
+.login .content .login-form,
+.login .content .forget-form {
+  padding: 0px;
+  margin: 0px;
+}
+
+.login .content .form-control {
+  border: none;
+  background-color: #dde3ec;
+  height: 43px;
+  color: #8290a3;
+  border: 1px solid #dde3ec;
+}
+.login .content .form-control:focus, .login .content .form-control:active {
+  border: 1px solid #c3ccda;
+}
+.login .content .form-control::-moz-placeholder {
+  color: #8290a3;
+  opacity: 1;
+}
+.login .content .form-control:-ms-input-placeholder {
+  color: #8290a3;
+}
+.login .content .form-control::-webkit-input-placeholder {
+  color: #8290a3;
+}
+
+.login .content select.form-control {
+  padding-left: 9px;
+  padding-right: 9px;
+}
+
+.login .content .forget-form {
+  display: none;
+}
+
+.login .content .register-form {
+  display: none;
+}
+
+.login .content .form-title {
+  font-weight: 300;
+  margin-bottom: 25px;
+}
+
+.login .content .form-actions {
+  clear: both;
+  border: 0px;
+  border-bottom: 1px solid #eee;
+  padding: 0px 30px 25px 30px;
+  margin-left: -30px;
+  margin-right: -30px;
+}
+
+.login-options {
+  margin-bottom: 30px;
+  overflow: hidden;
+}
+
+.login-options h4 {
+  float: left;
+  font-weight: 600;
+  font-size: 15px;
+  color: #7d91aa !important;
+}
+
+.login-options .social-icons {
+  float: right;
+  padding-top: 3px;
+}
+
+.login-options .social-icons li a {
+  border-radius: 15px 15px 15px 15px !important;
+  -moz-border-radius: 15px 15px 15px 15px !important;
+  -webkit-border-radius: 15px 15px 15px 15px !important;
+}
+
+.login .content .form-actions .checkbox {
+  margin-left: 0;
+  padding-left: 0;
+}
+
+.login .content .forget-form .form-actions {
+  border: 0;
+  margin-bottom: 0;
+  padding-bottom: 20px;
+}
+
+.login .content .register-form .form-actions {
+  border: 0;
+  margin-bottom: 0;
+  padding-bottom: 0px;
+}
+
+.login .content .form-actions .btn {
+  margin-top: 1px;
+}
+
+.login .content .form-actions .btn-success {
+  font-weight: 600;
+  padding: 10px 20px !important;
+}
+
+.login .content .form-actions .btn-default {
+  font-weight: 600;
+  padding: 10px 25px !important;
+  color: #6c7a8d;
+  background-color: #ffffff;
+  border: none;
+}
+
+.login .content .form-actions .btn-default:hover {
+  background-color: #fafaff;
+  color: #45b6af;
+}
+
+.login .content .forget-password {
+  font-size: 14px;
+  float: right;
+  display: inline-block;
+  margin-top: 10px;
+}
+
+.login .content .check {
+  color: #8290a3;
+}
+
+.login .content .rememberme {
+  margin-left: 8px;
+  margin-top: 10px;
+}
+
+.login .content .create-account {
+  margin: 0 -40px -40px -40px;
+  padding: 15px 0 17px 0;
+  text-align: center;
+  background-color: #6c7a8d;
+  -webkit-border-radius: 0 0 7px 7px;
+  -moz-border-radius: 0 0 7px 7px;
+  -ms-border-radius: 0 0 7px 7px;
+  -o-border-radius: 0 0 7px 7px;
+  border-radius: 0 0 7px 7px;
+}
+
+.login .content .create-account p a {
+  font-weight: 600;
+  font-size: 14px;
+  color: #c3cedd;
+}
+
+.login .content .create-account a {
+  display: inline-block;
+  margin-top: 5px;
+}
+
+/* footer copyright */
+.login .copyright {
+  text-align: center;
+  margin: 0 auto 30px 0;
+  padding: 10px;
+  color: #7a8ca5;
+  font-size: 13px;
+}
+
+@media (max-width: 440px) {
+  /***
+  Login page
+  ***/
+  .login .logo {
+    margin-top: 10px;
+  }
+
+  .login .content {
+    width: 280px;
+    margin-top: 10px;
+  }
+
+  .login .content h3 {
+    font-size: 22px;
+  }
+
+  .forget-password {
+    display: inline-block;
+    margin-top: 20px;
+  }
+
+  .login-options .social-icons {
+    float: left;
+    padding-top: 3px;
+  }
+
+  .login .checkbox {
+    font-size: 13px;
+  }
+}
diff --git a/public/assets/css/portfolio.css b/public/assets/css/portfolio.css
new file mode 100644
index 0000000..2dca78b
--- /dev/null
+++ b/public/assets/css/portfolio.css
@@ -0,0 +1,123 @@
+/***
+Portfolio
+***/
+/*Portfolio Filter*/
+.mix-filter {
+  list-style: none;
+  margin: 0 0 20px 0;
+  padding: 0;
+}
+
+.mix-filter li {
+  color: #555;
+  cursor: pointer;
+  padding: 6px 15px;
+  margin-right: 2px;
+  margin-bottom: 5px;
+  background: #eee;
+  display: inline-block;
+}
+
+.mix-filter li:hover,
+.mix-filter li.active {
+  color: #fff;
+  background: #0da3e2;
+}
+
+.mix-grid .mix {
+  opacity: 0;
+  display: none;
+}
+
+/*Portfolio Hover*/
+.mix-grid .mix {
+  position: relative;
+  overflow: hidden;
+  margin-bottom: 15px;
+}
+
+.mix-grid .mix .mix-inner {
+  position: relative;
+  width: 100%;
+}
+
+.mix-grid .mix .mix-details {
+  padding: 5px;
+  color: #fff;
+  width: 100%;
+  height: 100%;
+  bottom: -100%;
+  text-align: center;
+  position: absolute;
+  background: #0da3e2;
+  transition: all 0.5s ease;
+  -o-transition: all 0.5s ease;
+  -ms-transition: all 0.5s ease;
+  -moz-transition: all 0.5s ease;
+  -webkit-transition: all 0.5s ease;
+}
+
+.mix-grid .mix:hover .mix-details {
+  bottom: 0;
+  transition: all 0.5s ease;
+  -o-transition: all 0.5s ease;
+  -ms-transition: all 0.5s ease;
+  -moz-transition: all 0.5s ease;
+  -webkit-transition: all 0.5s ease;
+}
+
+.mix-grid .mix .mix-details h4 {
+  color: #fff;
+  margin-top: 30px;
+}
+
+.mix-grid .mix .mix-details p {
+  padding: 0 30px;
+}
+
+.mix-grid .mix .mix-details i {
+  color: #fff;
+  font-size: 14px;
+}
+
+.mix-grid .mix a.mix-link,
+.mix-grid .mix a.mix-preview {
+  color: #555;
+  display: block;
+  cursor: pointer;
+  margin-top: 10px;
+  position: absolute;
+  padding: 10px 15px;
+  background: #16b2f4;
+}
+
+.mix-grid .mix a.mix-preview {
+  left: 50%;
+  margin-left: 5px;
+}
+
+.mix-grid .mix a.mix-link {
+  right: 50%;
+  margin-right: 5px;
+}
+
+.mix-grid .mix a.mix-link:hover,
+.mix-grid .mix a.mix-preview:hover {
+  color: #fff;
+  padding: 9px 14px;
+  text-decoration: none;
+  border: solid 1px #eee;
+}
+
+/* Portrait tablet to landscape and desktop */
+@media (min-width: 992px) {
+  .mix-grid .mix.col-md-6.col-sm-6 .mix-details {
+    height: 50%;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  .mix-grid .mix a.mix-link,
+  .mix-grid .mix a.mix-preview {
+    margin-top: 5px;
+  }
+}
diff --git a/public/assets/css/profile-old.css b/public/assets/css/profile-old.css
new file mode 100644
index 0000000..3c70cef
--- /dev/null
+++ b/public/assets/css/profile-old.css
@@ -0,0 +1,332 @@
+/***
+Profile Page
+***/
+.profile {
+  position: relative;
+}
+
+.profile p {
+  color: #636363;
+  font-size: 13px;
+}
+
+.profile p a {
+  color: #169ef4;
+}
+
+.profile label {
+  margin-top: 10px;
+}
+
+.profile label:first-child {
+  margin-top: 0;
+}
+
+/*profile info*/
+.profile-classic .profile-image {
+  position: relative;
+}
+
+.profile-classic .profile-edit {
+  top: 0;
+  right: 0;
+  margin: 0;
+  color: #fff;
+  opacity: 0.6;
+  padding: 0 9px;
+  font-size: 11px;
+  background: #000;
+  position: absolute;
+  filter: alpha(opacity=60);
+  /*for ie*/
+}
+
+.profile-classic .profile-image img {
+  margin-bottom: 15px;
+}
+
+.profile-classic li {
+  padding: 8px 0;
+  font-size: 13px;
+  border-top: solid 1px #f5f5f5;
+}
+
+.profile-classic li:first-child {
+  border-top: none;
+}
+
+.profile-classic li span {
+  color: #666;
+  font-size: 13px;
+  margin-right: 7px;
+}
+
+/*profile tabs*/
+.profile .tabbable-custom-profile .nav-tabs > li > a {
+  padding: 6px 12px;
+}
+
+/*profile navigation*/
+.profile ul.profile-nav {
+  margin-bottom: 30px;
+}
+
+.profile ul.profile-nav li {
+  position: relative;
+}
+
+.profile ul.profile-nav li a {
+  color: #557386;
+  display: block;
+  font-size: 14px;
+  padding: 8px 10px;
+  margin-bottom: 1px;
+  background: #f0f6fa;
+  border-left: solid 2px #c4d5df;
+}
+
+.profile ul.profile-nav li a:hover {
+  color: #169ef4;
+  background: #ecf5fb;
+  text-decoration: none;
+  border-left: solid 2px #169ef4;
+}
+
+.profile ul.profile-nav li a.profile-edit {
+  top: 0;
+  right: 0;
+  margin: 0;
+  color: #fff;
+  opacity: 0.6;
+  border: none;
+  padding: 3px 9px;
+  font-size: 12px;
+  background: #000;
+  position: absolute;
+  filter: alpha(opacity=60);
+  /*for ie*/
+}
+
+.profile ul.profile-nav li a.profile-edit:hover {
+  text-decoration: underline;
+}
+
+.profile ul.profile-nav a span {
+  top: 0;
+  right: 0;
+  color: #fff;
+  font-size: 16px;
+  padding: 7px 13px;
+  position: absolute;
+  background: #169ef4;
+}
+
+.profile ul.profile-nav a:hover span {
+  background: #0b94ea;
+}
+
+/*profile information*/
+.profile-info h1 {
+  color: #383839;
+  font-size: 24px;
+  font-weight: 400;
+  margin: 0 0 10px 0;
+}
+
+.profile-info ul {
+  margin-bottom: 15px;
+}
+
+.profile-info li {
+  color: #6b6b6b;
+  font-size: 13px;
+  margin-right: 15px;
+  margin-bottom: 5px;
+  padding: 0 !important;
+}
+
+.profile-info li i {
+  color: #b5c1c9;
+  font-size: 15px;
+}
+
+.profile-info li:hover i {
+  color: #169ef4;
+}
+
+/*profile sales summary*/
+.sale-summary ul {
+  margin-top: -10px;
+}
+
+.sale-summary li {
+  padding: 10px 0;
+  overflow: hidden;
+  border-top: solid 1px #eee;
+}
+
+.sale-summary li:first-child {
+  border-top: none;
+}
+
+.sale-summary li .sale-info {
+  margin-top: 4px;
+  float: left;
+  color: #646464;
+  font-size: 14px;
+  text-transform: uppercase;
+}
+
+.sale-summary li .sale-num {
+  float: right;
+  color: #169ef4;
+  font-size: 20px;
+  font-weight: 300;
+}
+
+.sale-summary li span i {
+  top: 1px;
+  width: 13px;
+  height: 14px;
+  margin-left: 3px;
+  position: relative;
+  display: inline-block;
+}
+
+.sale-summary li i.icon-img-up {
+  background: url(../../img/icon-img-up.png) no-repeat !important;
+}
+
+.sale-summary li i.icon-img-down {
+  background: url(../../img/icon-img-down.png) no-repeat !important;
+}
+
+.sale-summary .caption h4 {
+  color: #383839;
+  font-size: 18px;
+}
+
+.sale-summary .caption {
+  border-color: #c9c9c9;
+}
+
+/*latest customers table*/
+.profile .table-advance thead tr th {
+  background: #f0f6fa;
+}
+
+.profile .table-bordered th,
+.profile .table-bordered td,
+.profile .table-bordered {
+  border-color: #e5eff6;
+}
+
+.profile .table-striped tbody > tr:nth-child(2n+1) > td,
+.profile .table-striped tbody > tr:nth-child(2n+1) > th {
+  background: #fcfcfc;
+}
+
+.profile .table-hover tbody tr:hover td,
+.profile .table-hover tbody tr:hover th {
+  background: #f5fafd;
+}
+
+/*add portfolio*/
+.add-portfolio {
+  overflow: hidden;
+  margin-bottom: 30px;
+  background: #f0f6fa;
+  padding: 12px 14px;
+}
+
+.add-portfolio span {
+  float: left;
+  display: inline-block;
+  font-weight: 300;
+  font-size: 22px;
+  margin-top: 0px;
+}
+
+.add-portfolio .btn {
+  margin-left: 20px;
+}
+
+/*portfolio block*/
+.portfolio-block {
+  background: #f7f7f7;
+  margin-bottom: 15px;
+  overflow: hidden;
+}
+
+.portfolio-stat {
+  overflow: hidden;
+}
+
+/*portfolio text*/
+.portfolio-text {
+  overflow: hidden;
+}
+
+.portfolio-text img {
+  float: left;
+  margin-right: 15px;
+}
+
+.portfolio-text .portfolio-text-info {
+  overflow: hidden;
+}
+
+/*portfolio button*/
+.portfolio-btn a {
+  display: block;
+  padding: 25px 0;
+  background: #ddd !important;
+}
+
+.portfolio-btn a:hover {
+  background: #1d943b !important;
+}
+
+.portfolio-btn span {
+  color: #fff;
+  font-size: 22px;
+  font-weight: 200;
+}
+
+/*portfolio info*/
+.portfolio-info {
+  float: left;
+  color: #616161;
+  font-size: 12px;
+  padding: 10px 25px;
+  margin-bottom: 5px;
+  text-transform: uppercase;
+}
+
+.portfolio-info span {
+  color: #16a1f2;
+  display: block;
+  font-size: 28px;
+  line-height: 28px;
+  margin-top: 0px;
+  font-weight: 200;
+  text-transform: uppercase;
+}
+
+/*portfolio settings*/
+.profile-settings {
+  background: #fafafa;
+  padding: 15px 8px 0;
+  margin-bottom: 5px;
+}
+
+.profile-settings p {
+  padding-left: 5px;
+  margin-bottom: 3px;
+}
+
+.profile-settings .controls > .radio,
+.profile-settings .controls > .checkbox {
+  font-size: 12px;
+  margin-top: 2px !important;
+}
diff --git a/public/assets/css/profile.css b/public/assets/css/profile.css
new file mode 100644
index 0000000..4cf667c
--- /dev/null
+++ b/public/assets/css/profile.css
@@ -0,0 +1,175 @@
+/***
+New Profile Page
+***/
+.profile-sidebar {
+  float: left;
+  width: 300px;
+  margin-right: 20px;
+}
+
+.profile-content {
+  overflow: hidden;
+  padding-bottom: 50px;
+}
+
+/* PROFILE SIDEBAR */
+.profile-sidebar-portlet {
+  padding: 30px 0 0 0 !important;
+}
+
+.profile-userpic img {
+  float: none;
+  margin: 0 auto;
+  width: 50%;
+  height: 50%;
+  -webkit-border-radius: 50% !important;
+  -moz-border-radius: 50% !important;
+  border-radius: 50% !important;
+}
+
+.profile-image img {
+  float: none;
+  margin: 0 auto;
+  width: 50%;
+  height: 50%;
+  /*-webkit-border-radius: 50% !important;*/
+  /*-moz-border-radius: 50% !important;*/
+  /*border-radius: 50% !important;*/
+}
+
+.profile-usertitle {
+  text-align: center;
+  margin-top: 20px;
+}
+
+.profile-usertitle-name {
+  color: #5a7391;
+  font-size: 20px;
+  font-weight: 600;
+  margin-bottom: 7px;
+}
+
+.profile-usertitle-job {
+  text-transform: uppercase;
+  color: #5b9bd1;
+  font-size: 13px;
+  font-weight: 800;
+  margin-bottom: 7px;
+}
+
+.profile-userbuttons {
+  text-align: center;
+  margin-top: 10px;
+}
+
+.profile-userbuttons .btn {
+  margin-right: 5px;
+}
+.profile-userbuttons .btn:last-child {
+  margin-right: 0;
+}
+
+.profile-userbuttons button {
+  text-transform: uppercase;
+  font-size: 11px;
+  font-weight: 600;
+  padding: 6px 15px;
+}
+
+.profile-usermenu {
+  margin-top: 30px;
+  padding-bottom: 20px;
+}
+
+.profile-usermenu ul li {
+  border-bottom: 1px solid #f0f4f7;
+}
+
+.profile-usermenu ul li:last-child {
+  border-bottom: none;
+}
+
+.profile-usermenu ul li a {
+  color: #93a3b5;
+  font-size: 16px;
+  font-weight: 400;
+}
+
+.profile-usermenu ul li a i {
+  margin-right: 8px;
+  font-size: 16px;
+}
+
+.profile-usermenu ul li a:hover {
+  background-color: #fafcfd;
+  color: #5b9bd1;
+}
+
+.profile-usermenu ul li.active a {
+  color: #5b9bd1;
+  background-color: #f6f9fb;
+  border-left: 2px solid #5b9bd1;
+  margin-left: -2px;
+}
+
+.profile-stat {
+  padding-bottom: 20px;
+  border-bottom: 1px solid #f0f4f7;
+}
+
+.profile-stat-title {
+  color: #7f90a4;
+  font-size: 25px;
+  text-align: center;
+}
+
+.profile-stat-text {
+  color: #5b9bd1;
+  font-size: 11px;
+  font-weight: 800;
+  text-align: center;
+}
+
+.profile-desc-title {
+  color: #7f90a4;
+  font-size: 17px;
+  font-weight: 600;
+}
+
+.profile-desc-text {
+  color: #7e8c9e;
+  font-size: 14px;
+}
+
+.profile-desc-link i {
+  width: 22px;
+  font-size: 19px;
+  color: #abb6c4;
+  margin-right: 5px;
+}
+
+.profile-desc-link a {
+  font-size: 14px;
+  font-weight: 600;
+  color: #5b9bd1;
+}
+
+/* END PROFILE SIDEBAR */
+/* RESPONSIVE MODE */
+@media (max-width: 991px) {
+  /* 991px */
+  /* 991px */
+  .profile-sidebar {
+    float: none;
+    width: 100% !important;
+    margin: 0;
+  }
+
+  .profile-sidebar > .portlet {
+    margin-bottom: 20px;
+  }
+
+  .profile-content {
+    overflow: visible;
+  }
+}
diff --git a/public/assets/css/smart_table.css b/public/assets/css/smart_table.css
new file mode 100644
index 0000000..d5bebf2
--- /dev/null
+++ b/public/assets/css/smart_table.css
@@ -0,0 +1,36 @@
+/*
+  User for sort in Smart Table
+*/
+.st-sort-ascent {
+  background: url('../images/sort_asc.png') no-repeat center right;
+}
+
+.st-sort-descent {
+  background: url('../images/sort_desc.png') no-repeat center right;
+}
+
+.animate-repeat {
+  list-style:none;
+  box-sizing:border-box;
+}
+
+.animate-repeat.ng-move,
+.animate-repeat.ng-enter,
+.animate-repeat.ng-leave {
+  -webkit-transition:all linear 0.5s;
+  transition:all linear 0.5s;
+}
+
+.animate-repeat.ng-leave.ng-leave-active,
+.animate-repeat.ng-move,
+.animate-repeat.ng-enter {
+  opacity:0;
+  max-height:0;
+}
+
+.animate-repeat.ng-leave,
+.animate-repeat.ng-move.ng-move-active,
+.animate-repeat.ng-enter.ng-enter-active {
+  opacity:1;
+  max-height:600px;
+}
diff --git a/public/assets/css/tasks.css b/public/assets/css/tasks.css
new file mode 100644
index 0000000..5f99718
--- /dev/null
+++ b/public/assets/css/tasks.css
@@ -0,0 +1,81 @@
+/***
+Tasks Widget
+***/
+.tasks-widget:after {
+  clear: both;
+}
+.tasks-widget .task-list {
+  list-style: none;
+  padding: 0;
+  margin: 0;
+}
+.tasks-widget .task-list > li {
+  position: relative;
+  padding: 10px 0;
+  border-bottom: 1px solid #F4F6F9;
+}
+.tasks-widget .task-list > li:hover {
+  background: #F4F6F9;
+}
+.tasks-widget .task-list > li.last-line {
+  border-bottom: none;
+}
+.tasks-widget .task-list > li.task-done {
+  background: #f6f6f6;
+}
+.tasks-widget .task-list > li.task-done:hover {
+  background: #f4f4f4;
+}
+.tasks-widget .task-list > li.task-done .task-title-sp {
+  text-decoration: line-through;
+}
+.tasks-widget .task-list > li > .task-bell {
+  margin-left: 10px;
+}
+.tasks-widget .task-list > li > .task-checkbox {
+  float: left;
+  width: 30px;
+}
+.tasks-widget .task-list > li > .task-checkbox input[type="checkbox"] {
+  cursor: pointer;
+}
+.tasks-widget .task-list > li > .task-title {
+  color: #838FA1;
+  margin-right: 10px;
+}
+.tasks-widget .task-list > li > .task-title .task-title-sp {
+  margin-right: 5px;
+}
+.tasks-widget .task-list > li .task-config-btn {
+  margin-top: -1px;
+}
+.tasks-widget .task-list > li > .task-config {
+  display: none;
+  position: absolute;
+  top: 10px;
+  right: 10px;
+}
+.tasks-widget .task-list > li:hover > .task-config {
+  display: block;
+  margin-bottom: 0 !important;
+}
+.tasks-widget .task-footer {
+  margin-top: 5px;
+}
+.tasks-widget .task-footer:before, .tasks-widget .task-footer:after {
+  content: " ";
+  display: table;
+}
+.tasks-widget .task-footer:after {
+  clear: both;
+}
+
+@media only screen and (max-width: 480px) {
+  .tasks-widget .task-config-btn {
+    float: inherit;
+    display: block;
+  }
+  .tasks-widget .task-list-projects li > .label {
+    margin-bottom: 5px;
+  }
+}
diff --git a/public/assets/css/timeline.css b/public/assets/css/timeline.css
new file mode 100644
index 0000000..cf2e058
--- /dev/null
+++ b/public/assets/css/timeline.css
@@ -0,0 +1,189 @@
+/***
+New Timeline
+***/
+.timeline {
+  margin: 0;
+  padding: 0;
+  position: relative;
+  margin-bottom: 30px;
+}
+
+.timeline:before {
+  content: '';
+  position: absolute;
+  display: block;
+  width: 4px;
+  background: #f5f6fa;
+  top: 0px;
+  bottom: 0px;
+  margin-left: 38px;
+}
+
+.timeline-item {
+  margin: 0;
+  padding: 0;
+}
+
+.timeline-badge {
+  float: left;
+  position: relative;
+  padding-right: 30px;
+  height: 80px;
+  width: 80px;
+}
+
+.timeline-badge-userpic {
+  width: 80px;
+  border: 4px #f5f6fa solid;
+  -webkit-border-radius: 50% !important;
+  -moz-border-radius: 50% !important;
+  border-radius: 50% !important;
+}
+
+.timeline-icon {
+  width: 80px;
+  height: 80px;
+  background-color: #f5f6fa;
+  -webkit-border-radius: 50% !important;
+  -moz-border-radius: 50% !important;
+  border-radius: 50% !important;
+  padding-top: 30px;
+  padding-left: 22px;
+}
+
+.timeline-icon i {
+  font-size: 34px;
+}
+
+.timeline-body {
+  position: relative;
+  padding: 20px;
+  margin-top: 20px;
+  margin-left: 110px;
+  background-color: #f5f6fa;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+}
+
+.timeline-body-arrow {
+  position: absolute;
+  top: 30px;
+  left: -14px;
+  width: 0;
+  height: 0;
+  border-style: solid;
+  border-width: 14px 14px 14px 0;
+  border-color: transparent #f5f6fa transparent transparent;
+}
+
+.timeline-body-head {
+  margin-bottom: 10px;
+}
+
+.timeline-body-head-caption {
+  float: left;
+}
+
+.timeline-body-title {
+  font-size: 16px;
+  font-weight: 600;
+}
+
+.timeline-body-alerttitle {
+  font-size: 16px;
+  font-weight: 600;
+}
+
+.timeline-body-time {
+  font-size: 14px;
+  margin-left: 10px;
+}
+
+.timeline-body-head-actions {
+  float: right;
+}
+
+.timeline-body-head-actions .btn-group {
+  margin-top: -2px;
+}
+
+.timeline-body-content {
+  font-size: 14px;
+  margin-top: 35px;
+}
+
+.timeline-body-img {
+  width: 100px;
+  height: 100px;
+  margin: 5px 20px 0 0px;
+}
+
+.page-container-bg-solid .timeline:before {
+  background: #fff;
+}
+
+.page-container-bg-solid .timeline-badge-userpic {
+  border-color: #fff;
+}
+
+.page-container-bg-solid .timeline-icon {
+  background-color: #fff;
+}
+
+.page-container-bg-solid .timeline-body {
+  background-color: #fff;
+}
+
+.page-container-bg-solid .timeline-body-arrow {
+  border-color: transparent #fff transparent transparent;
+}
+
+@media (max-width: 768px) {
+  .timeline-body-head-caption {
+    width: 100%;
+  }
+
+  .timeline-body-head-actions {
+    float: left;
+    width: 100%;
+    margin-top: 20px;
+    margin-bottom: 20px;
+  }
+}
+@media (max-width: 480px) {
+  .timeline:before {
+    margin-left: 28px;
+  }
+
+  .timeline-badge {
+    padding-right: 40px;
+    width: 60px;
+    height: 60px;
+  }
+
+  .timeline-badge-userpic {
+    width: 60px;
+  }
+
+  .timeline-icon {
+    width: 60px;
+    height: 60px;
+    padding-top: 23px;
+    padding-left: 18px;
+  }
+
+  .timeline-icon i {
+    font-size: 25px;
+  }
+
+  .timeline-body {
+    margin-left: 80px;
+  }
+
+  .timeline-body-arrow {
+    top: 17px;
+  }
+}
diff --git a/public/assets/css/todo.css b/public/assets/css/todo.css
new file mode 100644
index 0000000..a795650
--- /dev/null
+++ b/public/assets/css/todo.css
@@ -0,0 +1,307 @@
+/***
+TODO Page
+***/
+.todo-ui {
+  margin-top: 20px;
+}
+
+.todo-sidebar {
+  float: left;
+  width: 230px;
+  margin-right: 20px;
+}
+
+.todo-content {
+  overflow: hidden;
+}
+
+.todo-tasklist-item-border-green {
+  border-left: #3faba4 2px solid;
+}
+
+.todo-tasklist-item-border-blue {
+  border-left: #4c87b9 2px solid;
+}
+
+.todo-tasklist-item-border-purple {
+  border-left: #8877a9 2px solid;
+}
+
+.todo-tasklist-item-border-red {
+  border-left: #d05454 2px solid;
+}
+
+.todo-tasklist-item-border-yellow {
+  border-left: #d4ad38 2px solid;
+}
+
+.padding-top-10px {
+  padding-top: 15px;
+}
+
+.todo-userpic {
+  -webkit-border-radius: 50% !important;
+  -moz-border-radius: 50% !important;
+  border-radius: 50% !important;
+  border: 1px #cedae1 solid;
+}
+
+.todo-text-color {
+  color: #45535b;
+}
+
+/* PROJECT LIST */
+.todo-projects-config {
+  padding: 6px 9px 3px 9px !important;
+}
+.todo-projects-config > i {
+  font-size: 14px !important;
+}
+.todo-projects-config > .fa-angle-down {
+  position: relative;
+  display: inline-block;
+  top: -1px;
+  font-size: 13px !important;
+  color: #f2f2f2;
+}
+
+.todo-tasklist {
+  max-height: 800px;
+  overflow-y: auto;
+  padding: 0;
+}
+
+.todo-project-list ul li a {
+  font-size: 14px !important;
+  padding: 8px 10px;
+}
+
+.todo-project-list .nav li a .badge {
+  float: right;
+  background-color: #b4c4cd !important;
+  margin-top: 1px !important;
+}
+
+.todo-project-list .nav li a .badge-active {
+  background-color: #ffffff !important;
+  color: #637b89 !important;
+}
+
+.todo-project-list .nav .active {
+  background-color: #ffffff !important;
+}
+
+.todo-project-list .nav-pills > li.active > a {
+  background-color: #87a9c7 !important;
+}
+
+/* END PROJECT LIST */
+/* TASK HISTORY */
+.todo-task-history {
+  padding: 0;
+  margin: 0;
+}
+.todo-task-history > li {
+  padding: 5px 0;
+}
+.todo-task-history > li > .todo-task-history-desc {
+  overflow: hidden;
+}
+.todo-task-history > li > .todo-task-history-date {
+  font-size: 12px;
+  float: right;
+  width: 150px;
+  margin-left: 10px;
+  text-align: right;
+  color: #999;
+}
+
+/* TASKS LIST */
+.todo-tasklist-item {
+  background: #f6fbfc;
+  padding: 10px;
+  margin-bottom: 10px;
+  margin-bottom: 15px;
+  overflow: hidden;
+}
+.todo-tasklist-item:last-child {
+  margin-bottom: 0;
+}
+
+div .todo-tasklist-item:hover {
+  cursor: pointer;
+  background-color: #edf7f9;
+}
+
+.todo-tasklist-item img {
+  margin: 0 10px 10px 0;
+}
+
+.todo-tasklist-item-title {
+  font-size: 15px;
+  color: #2b4a5c;
+  /*font-weight: 600;*/
+  padding-top: 3px;
+  padding-bottom: 13px;
+}
+
+.todo-tasklist-item-text {
+  font-size: 13px;
+  color: #577688;
+  padding-bottom: 5px;
+}
+
+.todo-tasklist-item ul {
+  margin: 5px 0 0 0px;
+}
+
+.todo-tasklist-item li {
+  color: #577688;
+  font-size: 13px;
+  margin-right: 10px;
+  margin-bottom: 5px;
+  padding: 0 !important;
+}
+
+.todo-tasklist-item li i {
+  color: #b3bfcb;
+  font-size: 15px;
+}
+
+.todo-tasklist-controls {
+  margin-top: 5px;
+}
+
+.todo-tasklist-date {
+  color: #637b89 !important;
+  margin-right: 12px;
+}
+
+.todo-tasklist-date i {
+  color: #abbfca !important;
+  margin-right: 5px;
+}
+
+.todo-tasklist-badge {
+  background-color: #b3bfcb;
+}
+
+/* END TASKS LIST */
+/* TASK BODY */
+.todo-taskbody-tasktitle {
+  font-size: 18px;
+  color: #778d96;
+}
+
+.todo-taskbody-taskdesc {
+  font-size: 14px;
+  color: #778d96;
+}
+
+.todo-username {
+  font-size: 16px;
+  color: #2b4a5c;
+  font-weight: 600;
+  padding: 15px 0 0 15px;
+}
+
+.todo-comment-head {
+  padding-top: 3px;
+}
+
+.todo-comment {
+  position: relative;
+}
+
+.todo-comment:hover > .todo-comment-btn {
+  display: block;
+}
+
+.todo-comment-btn {
+  display: none;
+  position: absolute;
+  top: 1px;
+  right: 0px;
+  font-size: 12px;
+  color: #566e7c;
+  border-color: #a2aeb5;
+}
+
+.todo-comment-btn:hover {
+  color: #fff;
+  background-color: #a1b6c2;
+  border-color: #a1b6c2;
+}
+
+.todo-comment-username {
+  font-size: 14px;
+  color: #2b4a5c;
+  font-weight: 600;
+}
+
+.todo-comment-date {
+  font-size: 12px;
+  color: #2b4a5c;
+  font-weight: 400;
+}
+
+.todo-username-btn {
+  margin: 14px 0 0 15px;
+  color: #566e7c;
+  border-color: #a2aeb5;
+}
+
+.todo-username-btn:hover {
+  color: #fff;
+  background-color: #a1b6c2;
+  border-color: #a1b6c2;
+}
+
+.form .form-actions.todo-form-actions {
+  padding-top: 10px;
+  border: 0;
+  margin: 0 0 20px 0;
+}
+
+/* END TASK BODY */
+/* RESPONSIVE MODE */
+@media (max-width: 991px) {
+  /* 991px */
+  .todo-sidebar {
+    float: none;
+    width: 100%;
+    margin: 0;
+  }
+  .todo-sidebar > .portlet {
+    margin-bottom: 20px;
+  }
+  .todo-sidebar > .portlet .portlet-title .tools {
+    margin-left: 5px;
+  }
+
+  .todo-content {
+    overflow: visible;
+  }
+}
+.todo-tasklist-devider {
+  display: none;
+}
+
+@media (max-width: 767px) {
+  /* 767px */
+  .todo-tasklist-devider {
+    display: block;
+    height: 20px;
+    margin: 20px -10px;
+    background: #F1F3FA;
+  }
+
+  /* TASK HISTORY */
+  .todo-task-history > li {
+    padding: 9px 0;
+  }
+  .todo-task-history > li > .todo-task-history-date {
+    width: 100px;
+    font-size: 11px;
+  }
+}
diff --git a/public/assets/fonts/FontAwesome.otf b/public/assets/fonts/FontAwesome.otf
new file mode 100644
index 0000000000000000000000000000000000000000..681bdd4d4c8dddbaeb4d4f2a1f58c38cad92afe0
GIT binary patch
literal 106260
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
Vco-TlxgM#nKSH1cXm>$*{}*M)a-9GG

literal 0
HcmV?d00001

diff --git a/public/assets/fonts/Simple-Line-Icons.eot b/public/assets/fonts/Simple-Line-Icons.eot
new file mode 100644
index 0000000000000000000000000000000000000000..533fd7f421b7d5451990efac2b83e1944df50de3
GIT binary patch
literal 53572
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
Na8O+Ovj64Z{{!=8KpOx6

literal 0
HcmV?d00001

diff --git a/public/assets/fonts/Simple-Line-Icons.svg b/public/assets/fonts/Simple-Line-Icons.svg
new file mode 100644
index 0000000..bed0f14
--- /dev/null
+++ b/public/assets/fonts/Simple-Line-Icons.svg
@@ -0,0 +1,211 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+<json>
+<![CDATA[
+{
+	"fontFamily": "simple-line-icons",
+	"majorVersion": 2,
+	"minorVersion": 0,
+	"license": "MIT",
+	"designer": "Jamal Jama, Ahmad Firoz",
+	"version": "Version 2.0",
+	"fontId": "simple-line-icons",
+	"psName": "simple-line-icons",
+	"subFamily": "Regular",
+	"fullName": "simple-line-icons",
+	"description": "Font generated by IcoMoon."
+}
+]]>
+</json>
+</metadata>
+<defs>
+<font id="simple-line-icons" horiz-adv-x="1024">
+<font-face units-per-em="1024" ascent="960" descent="-64" />
+<missing-glyph horiz-adv-x="1024" />
+<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
+<glyph unicode="&#xe000;" glyph-name="user-female" d="M960.032 157.312l-278.496 132.064c37.152 18.624 182.256 24.528 194.256 57.28 0 0-57.344 88.016-71.344 202.336-5.44 44.368-14.752 102.592-24 184.592-15.008 133.008-126.88 226.416-268.192 226.416-0.080 0-0.176 0-0.256 0-0.096 0-0.192 0-0.256 0-141.312 0-253.184-93.408-268.176-226.4-9.248-82-18.56-140.224-24-184.592-14-114.336-71.344-202.336-71.344-202.336 12-32.752 157.088-38.656 194.256-57.28l-278.512-132.080c0 0-63.968-22.464-63.968-75.472v-84.528c0-35.376 28.624-61.312 63.968-61.312h896.064c35.344 0 63.968 25.936 63.968 61.312v84.528c0 53.008-63.968 75.472-63.968 75.472zM64 0v81.84c0 3.408 12.096 11.6 21.936 15.344 2.128 0.752 3.44 1.344 5.44 2.32l278.496 132.064c22.128 10.464 36.32 32.688 36.592 57.152 0.256 24.464-13.44 46.976-35.312 57.936-21.68 10.88-50.336 16.256-95.248 24.032-10.656 1.872-25.216 4.496-39.344 7.312 18.32 41.104 38.56 98.592 46.528 163.632 1.968 16.192 4.496 34.416 7.312 54.592 4.848 34.336 10.848 77.872 16.752 130.224 11.168 98.864 95.28 169.552 204.592 169.552 0.064 0 0.16 0 0.256 0 0.080 0 0.176 0 0.256 0 109.312 0 193.44-70.688 204.592-169.568 5.904-52.336 11.904-95.888 16.752-130.224 2.816-20.176 5.344-38.4 7.312-54.592 7.968-65.024 28.224-122.512 46.528-163.632-14.128-2.816-28.688-5.44-39.344-7.312-44.912-7.776-73.568-13.152-95.248-24.032-21.872-10.976-35.568-33.472-35.312-57.936 0.288-24.464 14.464-46.688 36.592-57.152l278.496-132.064c2-0.976 3.312-1.568 5.44-2.32 9.84-3.744 20.496-11.936 21.936-15.344l0.032-81.824h-896.032z" />
+<glyph unicode="&#xe001;" glyph-name="people" d="M746 124.72l-201.472 111.6c74.88 58.912 95.216 174.688 95.216 239.6v135.12c0 89.472-118.88 189.12-238.288 189.12-119.376 0-241.408-99.664-241.408-189.12v-135.12c0-59.024 24.976-178.432 100.624-239.088l-206.672-112.112c0 0-54-24.064-54-54.064v-81.088c0-29.84 24.224-54.064 54-54.064h692c29.808 0 54.032 24.224 54.032 54.064v81.088c0 31.808-54.032 54.064-54.032 54.064zM736.032-0.496h-672.032v57.216c4.592 3.344 11.008 7.216 16.064 9.536 1.504 0.688 3.008 1.408 4.432 2.224l206.688 112.096c18.848 10.224 31.344 29.184 33.248 50.528s-7.008 42.256-23.712 55.664c-53.664 43.024-76.656 138.32-76.656 189.152v135.12c0 45.968 86.656 125.12 177.408 125.12 92.432 0 174.288-78.064 174.288-125.12v-135.12c0-50.128-15.568-145.84-70.784-189.28-16.912-13.312-26-34.224-24.224-55.664 1.808-21.44 14.256-40.528 33.12-50.848l201.472-111.6c1.776-0.976 4.032-2.032 5.904-2.848 4.72-2 10.528-5.344 14.784-8.288v-57.888zM969.968 284.064l-204.464 111.6c74.88 58.912 98.224 174.688 98.224 239.6v135.12c0 89.472-121.872 190.128-241.28 190.128-77.6 0-156.944-42.192-203.12-96.224 26.336-1.632 55.376-1.664 80.464-9.664 33.712 26.256 76.368 41.872 122.656 41.872 92.432 0 177.28-79.056 177.28-126.128v-135.12c0-50.128-18.56-145.84-73.776-189.28-16.912-13.312-26-34.224-24.224-55.664 1.808-21.44 14.256-40.528 33.12-50.848l204.464-111.6c1.776-0.976 4.032-2.032 5.904-2.848 4.72-2 10.528-5.344 14.784-8.288v-56.912h-129.184c19.504-14.72 25.408-35.776 32.976-64h106.192c29.808 0 54.032 24.224 54.032 54.064v80.096c-0.016 31.84-54.048 54.096-54.048 54.096z" />
+<glyph unicode="&#xe002;" glyph-name="user-follow" d="M64.064 65.312c0 25.44 19.088 33.408 26.72 36.944l281.040 132.624c20.144 9.248 34.048 28.32 36.752 50.32 2.72 22-6.16 43.84-23.456 57.712-66.48 53.376-97.456 170.688-97.456 233.184v159.904c0 66.864 116.4 159.856 224.128 159.856 108.672 0 223.92-91.536 223.92-159.856v-159.92c0-61.552-25.6-179.312-94.256-233.36-17.504-13.776-26.592-35.68-23.968-57.808 2.624-22.16 16.592-41.312 36.848-50.624l95.92-45.504 15.808 63.872-85.008 39.776c88.656 69.776 118.656 206.832 118.656 283.648v159.92c0 105.92-146.624 223.856-287.92 223.856-141.312 0-288.128-117.936-288.128-223.856v-159.92c0-69.872 31.888-211.248 121.392-283.088l-281.040-132.624c0 0-63.952-28.496-63.952-63.968v-96.032c0-35.344 28.64-63.968 63.952-63.968h703.92v64l-703.872-0.032v64.944zM991.936 128.128h-96v96c0 17.68-14.336 32-32 32s-32-14.32-32-32v-96h-96c-17.664 0-32-14.32-32-32 0-17.664 14.336-32 32-32h96v-96c0-17.664 14.336-32 32-32s32 14.336 32 32v96h96c17.664 0 32 14.336 32 32 0 17.68-14.32 32-32 32z" />
+<glyph unicode="&#xe003;" glyph-name="user-following" d="M63.504 0.24v64.944c0 25.44 19.104 33.424 26.72 36.944l281.040 132.624c20.144 9.248 34.048 28.32 36.752 50.32 2.72 22-6.16 43.84-23.456 57.712-66.48 53.376-97.456 170.704-97.456 233.184v159.92c0 66.864 116.4 159.856 224.128 159.856 108.672 0 223.936-91.536 223.936-159.856v-159.92c0-61.552-25.6-179.312-94.256-233.376-17.504-13.776-26.592-35.68-23.968-57.808 2.624-22.16 16.592-41.312 36.848-50.624l162.24-77.248 38.144 54.064-173.664 81.344c88.656 69.776 118.656 206.848 118.656 283.664v159.92c0 105.92-146.624 223.856-287.936 223.856s-288.128-117.936-288.128-223.856v-159.92c0-69.872 31.888-211.248 121.392-283.088l-281.040-132.656c0 0-63.952-28.496-63.952-63.968v-96.032c0-35.344 28.64-63.968 63.952-63.968h639.712l-52 63.984-587.664-0.016zM1012.208 236.496c-13.904 10.912-34.032 8.432-44.912-5.472l-136.848-208.704-85.056 85.072c-12.496 12.496-32.768 12.496-45.264 0s-12.496-32.752 0-45.248l113.136-113.136c12.496-12.496 32.752-12.496 45.248 0 3.040 3.024 5.312 6.544 6.88 10.288l152.304 232.304c10.88 13.904 8.432 34.016-5.488 44.896z" />
+<glyph unicode="&#xe004;" glyph-name="user-unfollow" d="M799.12 576.144v159.92c0 105.92-146.608 223.856-287.904 223.856-141.312 0-288.128-117.936-288.128-223.856v-159.92c0-69.872 31.888-211.232 121.392-283.072l-281.040-132.64c0 0-63.952-28.496-63.952-63.968v-96.032c0-35.344 28.64-63.968 63.952-63.968h607.936v64l-607.888-0.032v64.944c0 25.44 19.104 33.424 26.72 36.944l281.040 132.624c20.144 9.248 34.048 28.336 36.752 50.336 2.72 22-6.16 43.824-23.456 57.696-66.48 53.376-97.456 170.688-97.456 233.2v159.92c0 66.864 116.4 159.856 224.128 159.856 108.688 0 223.904-91.536 223.904-159.856v-159.92c0-61.552-25.6-179.328-94.224-233.36-17.536-13.76-26.624-35.664-23.968-57.792 2.592-22.16 16.56-41.312 36.848-50.624l18.112-8.352 28.064 51.792-19.488 14.72c88.656 69.728 118.656 206.768 118.656 283.584zM924.624 81.2l90.496 90.512c12.496 12.464 12.496 32.752 0 45.248-12.48 12.48-32.752 12.48-45.232 0l-90.512-90.528-90.496 90.528c-12.496 12.48-32.768 12.48-45.248 0-12.496-12.496-12.496-32.784 0-45.248l90.496-90.512-90.496-90.496c-12.496-12.48-12.496-32.768 0-45.264 12.48-12.464 32.752-12.464 45.248 0l90.496 90.512 90.512-90.512c12.48-12.464 32.752-12.464 45.232 0 12.496 12.496 12.496 32.784 0 45.264l-90.496 90.496z" />
+<glyph unicode="&#xe005;" glyph-name="user" d="M511.728 896c108.672 0 223.92-91.536 223.92-159.856v-159.92c0-61.552-25.6-179.312-94.256-233.376-17.504-13.776-26.592-35.68-23.968-57.808 2.624-22.16 16.592-41.312 36.848-50.624l278.496-132.064c2.176-0.992 26.688-5.104 26.688-39.344l0.032-62.464-895.488-0.048v64.944c0 25.44 19.088 33.424 26.72 36.944l281.024 132.624c20.16 9.248 34.064 28.32 36.768 50.32 2.72 22-6.16 43.84-23.456 57.712-66.48 53.376-97.456 170.704-97.456 233.184v159.92c0.016 66.848 116.416 159.856 224.128 159.856zM511.728 960c-141.312 0-288.128-117.936-288.128-223.856v-159.92c0-69.872 31.888-211.248 121.392-283.088l-281.040-132.64c0 0-63.952-28.496-63.952-63.968v-96.032c0-35.344 28.64-63.968 63.952-63.968h895.552c35.344 0 63.968 28.624 63.968 63.968v96.032c0 37.6-63.968 63.968-63.968 63.968l-278.496 132.064c88.656 69.776 118.656 206.848 118.656 283.664v159.92c0 105.92-146.64 223.856-287.936 223.856v0z" />
+<glyph unicode="&#xe006;" glyph-name="trophy" d="M735.808 32.128h-449.936c-17.68 0-32-14.32-32-32s14.32-32 32-32h449.936c17.68 0 32 14.32 32 32s-14.304 32-32 32zM1017.312 838.368c-3.024 14.88-16.16 25.568-31.344 25.568h-156.624v31.936c0 17.68-14.32 32-32 32h-575.536c-17.68 0-32-14.32-32-32v-31.936h-151.776c-15.184 0-28.32-10.688-31.344-25.568-0.944-4.624-22.4-116.752 39.904-193.152 35.84-43.92 90.608-66.928 162.496-68.976 40.992-121.152 144.064-210.864 268.192-224.24v-222.912h-95.776c-17.68 0-32-14.32-32-32s14.32-32 32-32h258.688c17.68 0 32 14.32 32 32s-14.32 32-32 32h-98.912v222.88c124.336 13.12 227.632 102.8 268.736 224.080 74.336 1.088 130.736 24.24 167.392 69.168 62.304 76.416 40.848 188.528 39.904 193.152zM96.4 685.44c-28.336 34.496-31.184 85.408-29.744 114.496h123.152v-108.032c0-17.296 1.6-34.16 3.936-50.768-43.68 4.080-76.448 18.832-97.344 44.304zM765.344 691.904c0-153.088-114.72-277.664-255.712-277.664-141.056 0-255.808 124.56-255.808 277.664v171.968h511.536v-171.968zM927.6 685.44c-21.68-26.432-56.032-41.488-102.272-44.864 2.384 16.784 4.016 33.84 4.016 51.328v108.032h128c1.44-29.12-1.408-80-29.744-114.496z" />
+<glyph unicode="&#xe007;" glyph-name="speedometer" d="M511.984 923.872c-281.968 0-511.344-229.408-511.344-511.376 0-177.152 89.68-339.184 239.904-433.408 14.944-9.472 34.688-4.88 44.096 10.096s4.88 34.72-10.096 44.096c-54.096 33.952-99.040 78.048-133.424 128.88l33.552 19.376c15.312 8.848 20.56 28.4 11.712 43.712-8.88 15.344-28.464 20.56-43.712 11.712l-33.6-19.392c-24.4 50.512-39.296 105.792-43.28 163.424h35.616c17.68 0 32 14.32 32 32s-14.32 32-32 32h-35.456c4.24 58.688 19.776 114.304 44.56 164.592l32.16-18.56c5.024-2.912 10.528-4.288 15.968-4.288 11.056 0 21.808 5.744 27.744 16 8.848 15.312 3.6 34.88-11.712 43.712l-31.84 18.368c32.112 46.832 72.864 87.296 119.984 119.024l18.016-31.2c5.936-10.288 16.688-16 27.744-16 5.44 0 10.944 1.376 15.968 4.288 15.312 8.848 20.56 28.4 11.712 43.712l-17.952 31.072c49.328 23.792 103.68 38.656 160.976 42.816v-39.872c0-17.68 14.32-32 32-32s32 14.32 32 32v40c58.592-4.080 114.128-19.392 164.384-43.952l-17.36-30.048c-8.848-15.312-3.6-34.88 11.712-43.712 5.024-2.912 10.528-4.288 15.968-4.288 11.056 0 21.808 5.712 27.744 16l17.28 29.936c46.688-31.776 87.072-72.144 118.88-118.816l-29.968-17.312c-15.312-8.848-20.56-28.4-11.712-43.712 5.936-10.288 16.688-16 27.744-16 5.44 0 10.944 1.376 15.968 4.288l30.128 17.392c24.592-50.272 39.952-105.824 44.048-164.432h-35.136c-17.68 0-32-14.32-32-32s14.32-32 32-32h35.12c-4.048-56.88-18.592-111.44-42.496-161.312l-31.68 18.288c-15.28 8.848-34.912 3.568-43.712-11.712-8.848-15.312-3.6-34.88 11.712-43.712l31.776-18.352c-35.104-52.24-81.44-97.392-137.36-131.824-15.056-9.28-19.712-29.008-10.464-44.032 6.064-9.808 16.528-15.216 27.28-15.216 5.712 0 11.536 1.536 16.752 4.752 152.464 93.904 243.472 256.784 243.472 435.632 0 281.952-229.408 511.36-511.376 511.36zM748.112 512.272c15.296 8.848 20.544 28.4 11.712 43.712-8.832 15.296-28.416 20.544-43.712 11.696l-173.824-100.352c-9.28 5.248-19.856 8.496-31.28 8.496-35.28 0-63.84-28.592-63.84-63.808 0-35.248 28.576-63.84 63.84-63.84 35.28 0 63.84 28.592 63.84 63.84 0 0.064-0.016 0.144-0.016 0.208l173.28 100.048z" />
+<glyph unicode="&#xe008;" glyph-name="social-youtube" d="M940.736 770.304c-27.744 19.968-105.056 46.496-429.008 46.496-347.152 0-398.656-30.464-415.184-40.432-87.968-52.848-96.32-286.816-97.088-334.256 1.056-62.656 11.184-271.12 97.024-322.688 16.496-9.936 67.712-40.224 415.248-40.224 324.16 0 401.376 26.4 429.008 46.288 74.976 53.936 83.6 239.68 83.808 317.44-0.192 62.528-6.752 271.872-83.808 327.376zM903.36 177.424c-11.152-8.032-75.184-34.224-391.632-34.224-305.936 0-370.128 23.744-382.256 31.056-30.88 18.528-63.472 116.88-66.032 268.032 2.528 150.816 35.568 260.912 66.096 279.216 12.16 7.344 76.592 31.28 382.192 31.28 316.192 0 380.4-26.368 391.632-34.432 27.408-19.744 56.752-123.68 57.184-275.632-0.432-154.336-29.968-245.712-57.184-265.296zM720.416 473.168l-287.936 176.688c-9.904 5.968-22.224 6.128-32.256 0.464-10.064-5.68-16.288-16.336-16.288-27.872v-353.44c0-11.536 6.224-22.192 16.288-27.872 4.88-2.752 10.32-4.128 15.712-4.128 5.712 0 11.472 1.536 16.528 4.592l287.936 176.752c9.6 5.808 15.472 16.192 15.472 27.408s-5.856 21.632-15.456 27.408zM447.952 325.696v240.096l194-120.032-194-120.064z" />
+<glyph unicode="&#xe009;" glyph-name="social-twitter" d="M684.4 801.312c52.88 0 100.624-21.632 134.256-56.368 41.84 8.096 81.28 22.848 116.72 43.28-13.712-41.632-42.88-76.56-80.816-98.656 37.12 4.368 72.656 13.904 105.632 28.16-24.72-35.744-55.84-67.216-91.776-92.368 0.336-7.632 0.528-15.344 0.528-23.024 0-235.728-185.008-507.616-523.312-507.616-103.84 0-200.56 29.632-281.904 80.224 14.368-1.68 29.008-2.528 43.84-2.528 86.16 0 165.504 28.496 228.464 76.4-80.528 1.376-148.496 53.008-171.808 123.84 11.216-2.096 22.752-3.216 34.624-3.216 16.72 0 33.008 2.16 48.4 6.256-84.128 16.336-147.536 88.448-147.536 174.928 0 0.784 0 1.536 0 2.288 24.816-13.376 53.152-21.408 83.344-22.336-49.376 32.032-81.84 86.56-81.84 148.464 0 32.72 9.088 63.376 24.912 89.632 90.688-107.872 226.208-178.912 379.088-186.384-3.152 13.024-4.784 26.784-4.784 40.624 0 98.544 82.352 178.4 183.968 178.4zM960.192 717.696h0.16zM684.4 865.312c-125.664 0-229.776-91.808-245.808-210.432-102.816 20.656-196.32 75.088-263.504 154.944-12.192 14.512-30.16 22.816-48.976 22.816-1.664 0-3.344-0.064-5.024-0.192-20.592-1.648-39.12-13.12-49.776-30.784-22.32-37.024-34.096-79.44-34.096-122.656 0-28.848 5.184-56.944 15.008-83.216-10.464-11.632-16.496-26.848-16.496-42.912v-2.288c0-62.688 24.784-120.864 65.936-164.464-2.368-10.976-1.84-22.464 1.776-33.472 14.192-43.184 40.032-80.4 73.536-108.752-22.496-5.008-45.712-7.536-69.408-7.536-12.528 0-24.72 0.688-36.256 2.096-2.56 0.32-5.088 0.432-7.632 0.432-26.88 0-51.28-16.944-60.336-42.784-9.936-28.32 1.088-59.712 26.56-75.568 94.528-58.816 203.712-89.872 315.712-89.872 364.032 0 583.008 284.976 587.264 563.344 29.792 24.656 56.128 53.184 78.448 85.152 8.128 10.688 12.96 24.032 12.96 38.496 0 21.776-10.896 41.024-27.488 52.592 7.184 24.624-1.008 51.28-21.008 67.568-11.68 9.504-26 14.336-40.4 14.336-11.008 0-22.032-2.816-31.968-8.56-21.152-12.192-43.776-21.84-67.6-28.784-43.104 32.432-96.544 50.496-151.424 50.496v0z" />
+<glyph unicode="&#xe00a;" glyph-name="social-tumblr" d="M528.016 896.256v-223.872h224.32v-95.968h-223.328l-0.32-278.528c0-51.776 2.688-85.008 8.16-99.744 8.528-23.248 39.568-53.008 97.184-53.008 44.688 0 104.976 13.44 150.16 47.248v-149.312c-37.68-17.968-72.72-25.216-103.248-32.464-30.56-7.216-63.664-10.848-99.152-10.848-39.536 0-153.664 1.088-200.496 120.4-8.432 21.472-12.656 52.656-12.656 93.472v362.624h-128.848l0.624 98.128c42.656 0 170.624 25.904 170.624 221.872h116.976zM528.016 960.256h-116.976c-35.344 0-64-28.656-64-64 0-146.496-81.632-157.872-106.624-157.872-35.216 0-63.84-28.464-64-63.68l-0.624-98.128c-0.096-17.024 6.624-33.376 18.624-45.472 12.032-12.064 28.336-18.848 45.376-18.848h64.848v-298.624c0-49.376 5.6-87.632 17.088-116.88 28.848-73.44 97.376-161.008 260.064-161.008 40.288 0 78.592 4.224 113.872 12.56l7.056 1.664c29.872 7.024 68.032 15.776 109.008 35.312 22.288 10.624 36.464 33.088 36.464 57.776v149.312c0 24.224-13.68 46.368-35.344 57.216-9.056 4.56-18.88 6.784-28.656 6.784-13.568 0-27.056-4.32-38.336-12.752-38.096-28.528-86.848-34.496-111.808-34.496-25.6 0-35.12 9.28-37.216 11.744-1.088 5.024-4.128 23.776-4.128 77.008l0.224 214.528h159.408c35.344 0 64 28.656 64 64v95.968c0 35.344-28.656 64-64 64h-160.32v159.888c0 35.344-28.656 64-64 64v0z" />
+<glyph unicode="&#xe00b;" glyph-name="social-facebook" d="M581.76 879.504c3.808 0 6-0.16 6-0.16h83.568l-0.432-96h-83.008c-45.68 0-44.624-39.008-44.624-39.008v-152.192h161.632l-22.56-95.872h-139.6v-479.776h-95.904l-0.064 479.776h-127.408l-0.256 95.872h127.712c0 0 0 117.376 0 149.184 0.016 130.080 108.048 138.176 134.944 138.176zM671.328 879.344h0.16zM581.76 943.504v0c-23.008 0-67.968-3.808-110.56-29.472-40.32-24.256-88.368-73.936-88.368-172.688v-85.184h-63.712c-17.008 0-33.312-6.784-45.344-18.816-12-12.064-18.72-28.368-18.656-45.408l0.256-95.872c0.128-35.248 28.752-63.776 64-63.776h63.408l0.064-415.776c0-35.344 28.656-64 64-64h95.904c35.344 0 64 28.656 64 64v415.776h75.6c28.4 0 53.408 18.72 61.408 45.968l22.56 95.872c5.68 19.344 1.904 40.256-10.192 56.368-12.064 16.16-31.056 25.664-51.216 25.664h-97.632v63.152l63.632 0.032c35.216 0 63.84 28.464 64 63.712l0.432 92.752c0.064 1.184 0.096 2.336 0.096 3.536 0 35.344-28.592 64-63.936 64h-81.936c-1.84 0.096-4.496 0.16-7.808 0.16v0z" />
+<glyph unicode="&#xe00c;" glyph-name="social-dropbox" d="M1023.424 735.248c-0.72 10.224-6.288 19.472-14.976 24.912l-285.184 177.968c-11.6 7.216-26.432 6.32-37.056-2.288l-174.224-140.944-174.192 140.944c-10.592 8.56-25.536 9.536-37.056 2.288l-285.184-177.968c-8.688-5.44-14.256-14.688-14.976-24.912-0.752-10.224 3.472-20.16 11.312-26.752l165.216-138.816-141.536-111.184c-8.096-6.32-12.624-16.176-12.224-26.416s5.68-19.664 14.224-25.36l130.976-87.312c-6.432-5.84-10.544-14.208-10.544-23.6v-128.336c0-11.12 5.776-21.44 15.248-27.28l321.968-182.432c5.12-3.152 10.944-4.72 16.752-4.72s11.632 1.6 16.784 4.752l318.224 182.432c9.472 5.84 15.216 16.16 15.216 27.248v150.528c0 2.064-0.24 4.080-0.608 6.032l124.048 82.688c8.528 5.68 13.808 15.088 14.224 25.328 0.4 10.256-4.096 20.080-12.16 26.416l-140.912 111.152 165.312 138.88c7.856 6.592 12.080 16.528 11.328 26.752zM736.672 569.344l-224.688-140.784-224.688 140.784 224.688 146.224 224.688-146.224zM86.8 729.152l228.464 142.592 142.368-115.184-227.344-147.968-143.488 120.56zM229.92 529.776l225.968-141.6-128.064-98.032-218 145.312 120.096 94.32zM222.016 283.776l89.344-59.568c11.344-7.568 26.32-7.056 37.184 1.216l129.408 99.040v-282.8l-255.936 143.68v98.432zM798.208 185.344l-256.256-145.68v287.776l132.656-101.968c5.712-4.4 12.624-6.624 19.504-6.624 6.192 0 12.368 1.776 17.744 5.376l86.336 57.568v-96.448zM913.456 435.52l-218.032-145.328-127.44 97.936 226 141.632 119.472-94.24zM793.664 608.592l-227.344 147.968 142.4 115.184 228.464-142.592-143.52-120.56z" />
+<glyph unicode="&#xe00d;" glyph-name="social-dribbble" d="M511.984 959.728c-69.856 0-136.464-14.112-197.184-39.568-2.112-0.672-4.176-1.552-6.144-2.672-181.264-78.816-308.384-259.552-308.384-469.504 0-282.16 229.568-511.712 511.712-511.712 282.192 0 511.744 229.568 511.744 511.712 0 282.192-229.552 511.744-511.744 511.744zM959.728 447.984c0-3.584-0.192-7.12-0.272-10.672-49.024 13.008-173.392 37.44-326.8 3.744-13.52 30.896-28.512 62.576-45.28 94.816-1.408 2.704-2.784 5.28-4.176 7.952 164.128 63.344 233.888 148.672 262.768 201.952 70.688-79.216 113.76-183.552 113.76-297.792zM797.536 792.56c-14.912-35.2-69.040-126-244.72-191.888-78.896 144.224-140.224 230.672-174.592 274.64 42.256 13.264 87.184 20.416 133.76 20.416 108.432 0 207.984-38.768 285.552-103.168zM316.048 850.48c27.216-33.28 90.384-117.056 175.104-270.448-200-60.288-362.448-53.040-418.832-47.792 26.816 140.144 119.072 257.312 243.728 318.24zM64.272 447.984c0 6.896 0.208 13.744 0.528 20.576 19.248-1.936 49.152-4.080 88.288-4.080 86.896 0 217.712 10.752 369.008 58.144 2.848-5.376 5.664-10.736 8.544-16.272 14.432-27.776 27.488-55.184 39.408-82.064-27.376-8.608-55.392-19.072-83.872-31.968-182.624-82.704-268.192-200.704-298.672-252.336-76.272 80.32-123.232 188.752-123.232 308zM236.096 95.76c16.24 30.752 90.608 154.080 276.448 238.256 27.968 12.672 55.52 22.784 82.384 30.912 60.736-154.32 81.808-281.568 88.176-330.592-52.752-21.904-110.528-34.064-171.12-34.064-104.016 0-199.792 35.76-275.888 95.488zM743.616 64.96c-9.232 61.6-32.144 177.392-85.968 315.664 148.448 29.552 265.952 0.56 295.616-8.080-22.224-130.208-100.736-241.488-209.648-307.584z" />
+<glyph unicode="&#xe00e;" glyph-name="shield" d="M907.952 815.52c-11.872 11.088-27.504 17.216-43.664 17.216-1.472 0-2.944-0.064-4.4-0.16-0.912-0.064-11.184-0.688-27.28-0.688-26.656 0-78.688 1.808-127.968 13.936-63.664 15.632-137.12 88.16-158.496 102.464-10.752 7.184-23.152 10.784-35.568 10.784-12.368 0-24.784-3.6-35.536-10.752-2.592-1.744-79.504-84.032-154.752-102.496-49.248-12.128-102.288-13.936-128.912-13.936-16.096 0-26.368 0.624-27.376 0.688-1.408 0.096-2.816 0.16-4.224 0.16-16.192 0-31.872-6.16-43.776-17.28-12.944-12.096-20.32-29.008-20.32-46.72v-160.032c0-591.632 387.12-667.808 403.568-670.784 3.744-0.656 7.536-1.008 11.312-1.008s7.6 0.336 11.312 1.008c16.432 2.976 406.4 79.152 406.4 670.784v160.032c0.032 17.744-7.344 34.688-20.32 46.784zM864.304 608.704c0-544.912-353.712-607.776-353.712-607.776s-350.88 62.88-350.88 607.776c0 139.68 0 160.032 0 160.032s12.096-0.848 31.68-0.848c33.568 0 90.032 2.464 144.16 15.776 88.624 21.744 175.024 111.408 175.024 111.408s90.256-89.664 178.784-111.408c54.192-13.312 109.68-15.776 143.248-15.776 19.568 0 31.68 0.848 31.68 0.848s0.016-20.352 0.016-160.032zM647.6 613.76c-12.496 12.496-32.768 12.496-45.248 0l-90.512-90.512-90.512 90.512c-12.496 12.496-32.768 12.496-45.264 0s-12.496-32.768 0-45.248l90.512-90.512-90.512-90.512c-12.496-12.48-12.496-32.752 0-45.248s32.768-12.496 45.264 0l90.512 90.512 90.512-90.512c12.48-12.496 32.752-12.496 45.248 0s12.496 32.768 0 45.248l-90.512 90.512 90.512 90.512c12.496 12.48 12.496 32.752 0 45.248z" />
+<glyph unicode="&#xe00f;" glyph-name="screen-tablet" d="M832.144 960h-640.288c-53.024 0-96-42.976-96-96v-832c0-53.024 42.976-96 96-96h640.288c53.024 0 96 42.976 96 96v832c0 53.024-42.976 96-96 96zM864.144 32c0-17.664-14.336-32-32-32h-640.288c-17.664 0-32 14.336-32 32v832c0 17.664 14.336 32 32 32h640.288c17.664 0 32-14.336 32-32v-832zM512.048 159.824c-35.28 0-63.84-28.592-63.84-63.824s28.56-63.84 63.84-63.84c35.264 0 63.84 28.608 63.84 63.84s-28.576 63.824-63.84 63.824zM576.048 864h-128c-17.664 0-32-14.336-32-32s14.336-32 32-32h128c17.664 0 32 14.336 32 32s-14.336 32-32 32z" />
+<glyph unicode="&#xe010;" glyph-name="screen-smartphone" d="M704.144 960h-384.288c-53.024 0-96-42.976-96-96v-832c0-53.024 42.976-96 96-96h384.288c53.024 0 96 42.976 96 96v832c0 53.024-42.976 96-96 96zM736.144 32c0-17.664-14.336-32-32-32h-384.288c-17.664 0-32 14.336-32 32v832c0 17.664 14.336 32 32 32h384.288c17.664 0 32-14.336 32-32v-832zM512.048 159.824c-35.28 0-63.84-28.592-63.84-63.824s28.576-63.84 63.84-63.84c35.28 0 63.84 28.608 63.84 63.84s-28.56 63.824-63.84 63.824zM576.048 864h-128c-17.664 0-32-14.336-32-32s14.336-32 32-32h128c17.664 0 32 14.336 32 32s-14.336 32-32 32z" />
+<glyph unicode="&#xe011;" glyph-name="screen-desktop" d="M960 864.192h-896c-35.184 0-64-28.8-64-64v-544.192c0-35.184 28.816-63.984 64-63.984h416v-96.208h-160c-17.664 0-32-14.336-32-32s14.336-32 32-32h384c17.664 0 32 14.336 32 32s-14.336 32-32 32h-160v96.208h416c35.184 0 64 28.8 64 63.984v544.192c0 35.2-28.816 64-64 64zM960 256h-896v544.192h896v-544.192z" />
+<glyph unicode="&#xe012;" glyph-name="plane" d="M934.32 894.096v0c10.432 0 17.776-1.936 21.6-3.408 4.592-12.224 10.752-56.032-34.528-101.344l-230.992-230.976 1.664-28.656c3.504-59.968 10-167.44 15.6-259.568 4.944-82 9.632-159.44 9.936-166.032 0.16-4.528 0.224-5.6-4-10.688-9.44-11.472-27.056-30.912-41.904-47.024-23.024 62.032-71.408 193.056-98.128 266.4l-34.336 94.368-71.024-71.024-130.608-125.584-18.192-18.16-0.56-25.68c-0.432-20.496-0.336-57.28-0.288-89.712 0.064-22.592 0.128-43.12-0.032-54.432-0.288-0.528 4.368-1.152 3.936-1.904-2.784 4.464-5.776 9.28-8.944 14.288-26.336 42-62.784 100.096-73.904 118.224l-8.128 13.28-13.344 8.064c-48.528 29.312-102.288 63.152-135.088 84.288 1.136 0.656 2.064-2.816 2.816-2.416h2.128c10.32 0 27.376-0.224 46.496-0.496 25.008-0.336 53.376-0.752 75.088-0.752 8.32 0 15.712 0.064 21.664 0.192l25.68 0.592 18.16 18.16 125.744 129.712 70.784 70.752-93.936 34.56c-70.592 25.968-205.808 76.464-269.056 100.224 16.224 14.944 35.776 32.688 47.184 42.128 3.184 2.624 5.664 3.968 7.376 3.968l2.256-0.064c7.056-0.336 94.688-6.064 179.408-11.6 89.936-5.872 191.44-12.496 249.152-16.16l28.848-1.808 231.024 231.040c32.448 32.4 64.32 37.248 80.448 37.248zM934.32 958.096c-37.808 0-84.224-14.528-125.68-56l-210.608-210.592c-118.624 7.504-422.432 27.6-429.968 27.808-1.344 0.064-3.008 0.128-4.88 0.128-10.256 0-27.968-1.968-48.128-18.624-23.664-19.568-73.008-65.968-73.008-65.968-11.904-11.936-17.936-26.72-16.496-40.624 0.88-8.4 5.44-23.712 26.064-31.776 12.528-4.912 211.904-79.504 303.968-113.376l-125.744-129.712c-5.568-0.128-12.464-0.192-20.256-0.192-38.336 0-97.776 1.248-121.6 1.248-3.152 0-5.68 0-7.472-0.064-7.248-0.224-22.256 3.344-61.84-29.744l-2.816-2.624c-11.872-11.872-14.656-23.712-14.912-31.536-0.256-8.064 1.904-19.68 13.568-29.024 7.008-5.664 96.848-63.184 170.528-107.68 17.664-28.816 98.944-158 103.184-165.008 6.192-10.464 16.32-16.432 28.432-16.816 0.336 0 0.656 0 1.008 0 11.776 0 23.872 5.84 35.712 17.344 33.504 39.184 28.88 55.408 29.024 62.224 0.528 21.376-0.368 111.936 0.4 147.84l130.592 125.6c33.376-91.68 106.336-289.008 111.216-301.568 8.128-20.624 23.44-25.152 31.84-26 1.376-0.16 2.784-0.224 4.16-0.224 12.624 0 25.712 5.936 36.432 16.656 0 0 46.256 49.088 65.904 72.976 19.68 23.872 18.912 44.256 18.528 53.872-0.16 6.656-18.688 308.816-25.568 426.816l210.656 210.656c74.656 74.688 62.784 164.688 35.056 192.368-12.24 12.304-37.024 21.616-67.296 21.616v0z" />
+<glyph unicode="&#xe013;" glyph-name="notebook" d="M849.152 960h-638c-46 0-66.032-34-66.032-66v-127.312h-34.928c-17.312 0-31.344-14.032-31.344-31.344s14.032-31.344 31.344-31.344h34.928v-128.752h-31.936c-17.312 0-31.344-14.032-31.344-31.344s14.032-31.344 31.344-31.344h31.936v-129.44h-32.624c-17.312 0-31.344-14.032-31.344-31.344s14.032-31.344 31.344-31.344h32.624v-128.464h-32.624c-17.312 0-31.344-14.032-31.344-31.344s14.032-31.344 31.344-31.344h32.624v-129.28c0-53.024 41.536-64 64.528-64h639.504c53.024 0 96 42.976 96 96v832c0 53.024-42.96 96-96 96zM209.12 0v129.28h33.344c17.312 0 31.344 14.032 31.344 31.344s-14.032 31.344-31.344 31.344h-33.344v128.464h33.344c17.312 0 31.344 14.032 31.344 31.344s-14.032 31.344-31.344 31.344h-33.344v129.44h34.032c17.312 0 31.344 14.032 31.344 31.344s-14.032 31.344-31.344 31.344h-34.032v128.752h31.024c17.312 0 31.344 14.032 31.344 31.344s-14.032 31.344-31.344 31.344h-31.024v127.312c0 0.752 0.064 1.376 0.16 1.936 0.496 0.032 1.12 0.064 1.872 0.064h510v-896h-512.032zM881.152 32c0-17.664-14.336-32-32-32h-64v896h64c17.664 0 32-14.336 32-32v-832z" />
+<glyph unicode="&#xe014;" glyph-name="mustache" d="M792.848 223.28c-101.344 0-158.864 47.632-196.944 79.152-13.472 11.152-25.728 21.904-36.88 31.664-16.912 14.848-38 33.344-45.344 35.904-0.224 0-3.712 0.16-3.936 0.192-1.168-0.096-4.144-0.688-4.448-0.72-5.072-2.064-23.088-17.568-37.568-30-13.136-11.28-28.112-24.16-45.040-37.376l-3.088-2.368c-43.472-33.936-97.584-76.16-193.152-76.16-70.992 0-140.928 32.128-182.576 83.872-27.92 34.688-57.296 95.024-38.672 185.472 2.256 10.944 10.016 19.904 20.432 23.632 10.48 3.776 22.016 1.712 30.608-5.376 0.624-0.464 22.576-17.344 59.056-17.344 18.368 0 37.504 4.336 56.832 12.944 33.136 14.752 56.736 56.128 81.712 84.064 34.176 38.16 72.848 81.408 136.688 81.904 44.048 0 83.792-16.288 119.248-48.496 35.312 32.064 74.768 48.256 117.68 48.256 65.104-0.496 104.592-43.776 139.44-82 25.44-27.872 49.472-69.216 82.608-83.968 19.328-8.592 38.672-12.944 57.488-12.944 37.872 0 61.504 17.312 62.448 18.064 8.768 6.496 20.32 8.192 30.48 4.224 10.144-4 17.68-12.88 19.712-23.664 17.088-89.44-12.96-149.408-41.184-183.968-42.768-52.4-113.904-84.96-185.6-84.96zM510.736 434.128c0.992 0 3.68-0.096 4.624-0.192 0.032 0 4.688-0.336 4.688-0.368 0.336-0.032 3.008-0.368 3.296-0.432 23.152-3.28 44.624-22.128 77.216-50.688 10.704-9.408 22.496-19.744 35.472-30.496 34.784-28.816 78.096-64.656 156.816-64.656 53.312 0 105.744 23.632 136.784 61.68 20.4 24.976 31.008 54.72 31.68 88.784-15.024-4.688-33.28-8.192-54.32-8.192-27.664 0-55.568 6.192-82.976 18.368-45.248 20.096-76.304 69.12-103.68 99.152-34.528 37.872-57.472 61.088-92.080 61.376-46.16 0-75.952-29.056-94.416-50.912-6.032-7.12-14.816-11.216-24.096-11.216v0c-9.28 0-18.080 4.128-24.080 11.248-18.528 21.936-48.416 51.12-93.84 51.12-35.088-0.256-57.408-23.28-90.992-60.848-27.056-30.224-57.696-79.472-103.232-99.68-27.392-12.192-55.104-18.368-82.304-18.368-20.4 0-38.064 3.408-52.624 8.032-0.032-34.72 10.112-64.912 30.336-90.032 29.936-37.152 81.040-60.256 133.44-60.256 74 0 114.896 31.936 154.464 62.816l3.088 2.416c16.048 12.528 30.24 24.752 42.688 35.44 28.512 24.496 47.328 40.688 67.648 44.288v0c0.016-0.016 9.696 1.616 16.4 1.616z" />
+<glyph unicode="&#xe015;" glyph-name="mouse" d="M513.584 960c-158.128 0-289.504-128.224-289.504-286.336v-451.312c0-158.128 131.376-286.352 289.504-286.352s286.352 128.224 286.352 286.336v451.328c0 158.112-128.224 286.336-286.352 286.336zM735.936 222.336c0-122.592-99.744-222.336-222.352-222.336s-225.504 99.744-225.504 222.336v451.328c0 122.592 102.912 222.336 225.504 222.336s222.352-99.744 222.352-222.336v-451.328zM512.336 768c-17.664 0-32-14.336-32-32v-160c0-17.664 14.336-32 32-32s32 14.336 32 32v160c0 17.664-14.336 32-32 32z" />
+<glyph unicode="&#xe016;" glyph-name="magnet" d="M960.288 899.824v29.008c0 17.68-14.32 32-32 32h-224.624c-17.68 0-32-14.32-32-32v-130.656c0-0.048 0.032-0.096 0.032-0.144v-397.52c0-96.32-54.336-174.656-150.656-174.656s-168.656 78.336-168.656 174.656v499.312h-0.096v29.008c0 17.68-14.32 32-32 32h-224.624c-17.68 0-32-14.32-32-32v-130.656c0-0.656 0.336-1.2 0.368-1.84v-410.496c0-248.912 198.784-450.656 447.664-450.656s448.656 201.744 448.656 450.656v513.984h-0.064zM896.288 896.832v-128.336h-160.256v128.336h160.256zM288.288 896.832v-128.336h-160.256v128.336h160.256zM511.68-0.832c-213.216 0-383.664 173.472-383.664 386.656v318.672h160.336v-303.984c0-131.808 100.848-238.656 232.656-238.656s214.672 106.848 214.672 238.656v303.984h160.656v-318.672c0-213.184-171.424-386.656-384.656-386.656z" />
+<glyph unicode="&#xe017;" glyph-name="magic-wand" d="M1020.512 530.624l-102.784 153.68 51.152 178.816c3.184 11.216 0.064 23.28-8.224 31.504-8.256 8.256-20.256 11.312-31.536 8.032l-178.512-52.128-154.288 103.904c-9.712 6.528-22.16 7.312-32.464 1.936-10.368-5.312-17.024-15.872-17.408-27.504l-5.536-185.936-146.496-114.592c-9.184-7.184-13.712-18.816-11.872-30.32s9.808-21.088 20.816-25.024l137.456-49.28c-0.928-0.736-1.904-1.392-2.768-2.256l-530.752-530.752c-12.496-12.496-12.496-32.752 0-45.248 6.256-6.256 14.432-9.376 22.624-9.376s16.368 3.12 22.624 9.376l530.752 530.752c2.064 2.064 3.664 4.4 5.040 6.816l53.792-147.552c4-10.944 13.632-18.848 25.152-20.656 1.632-0.256 3.28-0.368 4.912-0.368 9.808 0 19.184 4.528 25.312 12.432l113.776 147.168 183.904 6.56c11.664 0.4 22.16 7.12 27.44 17.536 5.264 10.384 4.448 22.848-2.112 32.48zM794.048 537.456c-9.504-0.32-18.368-4.88-24.192-12.4l-87.472-113.104-48.976 134.32c-3.248 8.944-10.32 15.936-19.28 19.152l-134.592 48.256 112.624 88.064c7.504 5.872 11.968 14.752 12.288 24.256l4.256 142.944 118.592-79.872c7.904-5.312 17.776-6.816 26.848-4.192l137.248 40.096-39.344-137.472c-2.592-9.152-1.008-18.976 4.336-26.848l80.56-118.128-142.896-5.072z" />
+<glyph unicode="&#xe018;" glyph-name="hourglass" d="M833.056 895.392h-64.464v-215.408c0-104.384-56.656-183.36-178.096-245.2 126.064-63.808 179.104-142.16 179.104-259.072 0-76.128-0.336-140-0.592-175.12h64.064c17.68 0 32-14.288 32-31.968s-14.32-32-32-32h-642.128c-17.68 0-32 14.32-32 32s14.32 31.968 32 31.968h65.936c-0.24 35.12-0.592 99.008-0.592 175.12 0 116.912 52.288 195.248 178.144 259.056-121.232 61.84-177.136 140.816-177.136 245.2v215.424h-66.352c-17.68 0-32 14.304-32 32 0 17.664 14.32 31.984 32 31.984h642.128c17.68 0 32-14.32 32-31.984-0.016-17.696-14.32-32-32.016-32zM320.272 175.712c0-76.288 0.352-140.224 0.592-175.12h384.176c0.224 34.912 0.592 98.848 0.592 175.12 0 89.008-33.12 158.032-193.184 224.4-160.016-66.368-192.176-135.392-192.176-224.4zM704.624 895.392h-383.36v-215.408c0-61.376 20.64-140.416 191.168-210.528 170.56 70.112 192.192 149.152 192.192 210.528v215.408z" />
+<glyph unicode="&#xe019;" glyph-name="graduation" d="M990.848 263.696v258.144l16.096 8.496c10.464 5.44 17.056 16.224 17.184 28.032 0.128 11.776-6.256 22.688-16.592 28.368l-481.44 257.6c-9.632 5.28-21.28 5.248-30.976-0.096l-478.8-257.92c-10.192-5.68-16.496-16.464-16.432-28.16s6.496-22.4 16.816-27.968l210.384-111.984c-2.64-4.656-4.272-9.968-4.272-15.696v-270.784c0-9.12 3.904-17.84 10.72-23.904 6.944-6.16 73.44-60.096 276.752-60.096 202.592 0 270.88 50.976 278 56.784 7.44 6.064 11.744 15.152 11.744 24.784v277.728c0 4.496-0.944 8.768-2.608 12.64l129.424 68.368v-224.512c-18.976-11.104-31.84-31.472-31.84-55.024 0-35.344 28.656-64 64-64s64 28.656 64 64c0 23.696-13.040 44.144-32.16 55.2zM736.032 147.632c-25.152-12.096-91.712-35.904-225.744-35.904-134.88 0-199.936 25.344-223.472 37.536v237.136l207.808-110.624c4.72-2.56 9.968-3.84 15.184-3.84 5.088 0 10.192 1.216 14.816 3.664l211.408 111.664v-239.632zM510.064 340.192l-411.6 218.56 412.32 220.976 413.6-220.336-414.32-219.2z" />
+<glyph unicode="&#xe01a;" glyph-name="ghost" d="M511.984 960.128c-229.216 0-415.68-199.904-415.68-445.6v-546.672c0-13.216 8.16-25.088 20.496-29.84 3.712-1.472 7.632-2.16 11.504-2.16 8.848 0 17.536 3.68 23.712 10.528l120.592 133.12 94.432-130.432c5.968-8.256 15.504-13.152 25.68-13.216h0.224c10.096 0 19.632 4.784 25.664 12.912l94.816 127.344 93.184-127.152c6.032-8.224 15.6-13.088 25.808-13.088 10.192 0 19.776 4.848 25.808 13.056l95.568 130.288 118-132.624c8.816-9.904 22.944-13.376 35.28-8.624 12.4 4.72 20.624 16.624 20.624 29.904v546.672c0 245.68-186.496 445.584-415.712 445.584zM863.696 51.968l-88.4 99.376c-6.432 7.216-15.808 11.312-25.408 10.688-9.664-0.464-18.592-5.248-24.32-13.024l-93.12-127.008-93.008 126.912c-6 8.192-15.536 13.056-25.68 13.088h-0.128c-10.128 0-19.632-4.784-25.664-12.912l-94.688-127.152-92 127.088c-5.664 7.808-14.528 12.656-24.16 13.152-0.592 0.032-1.152 0.064-1.744 0.064-9.008 0-17.632-3.808-23.712-10.528l-91.376-100.848v463.68c0 210.4 157.776 381.6 351.68 381.6 193.936 0 351.712-171.184 351.712-381.6v-462.576zM672 607.84c-35.28 0-63.84-28.592-63.84-63.808 0-35.248 28.56-63.84 63.84-63.84s63.84 28.592 63.84 63.84c0 35.216-28.56 63.808-63.84 63.808zM352 607.84c-35.28 0-63.84-28.592-63.84-63.808 0-35.248 28.576-63.84 63.84-63.84s63.84 28.592 63.84 63.84c0 35.216-28.56 63.808-63.84 63.808z" />
+<glyph unicode="&#xe01b;" glyph-name="game-controller" d="M743.216 884.448c-25.6 12.016-49.808 23.328-71.84 34.384-56.464 28.288-107.664 42.032-156.464 42.032-98.288 0-166.304-56.704-208.96-99.36l-206.848-207.072c-110.688-110.8-128.368-223.6-57.264-365.808 11.024-22.080 22.368-46.336 34.368-72.032 64.704-138.384 131.584-281.488 241.056-281.488 3.072 0 6.112 0.096 9.216 0.336 112.976 8.848 145.024 154.288 173.312 282.592 4.496 20.32 8.752 39.808 13.12 57.28 7.6 30.208 22.56 48.976 63.552 90.064l5.632 5.664 3.472 3.472 9.12 9.088c41.088 41.088 59.856 56.032 90.096 63.664 17.312 4.352 36.752 8.64 57.024 13.088 128.224 28.304 273.6 60.368 282.4 173.52 8.88 114.832-138.464 183.84-280.992 250.576zM958.464 639.664c-6.224-79.776-184.816-103.328-291.104-129.984-47.008-11.872-75.616-36.752-118.784-79.936-3.008-3.008-6.032-6.016-9.088-9.072-3.024-3.024-6.032-6.096-9.056-9.088-43.168-43.216-68-71.808-79.824-118.88-26.672-106.384-50.192-285.168-129.872-291.44-1.44-0.112-2.88-0.144-4.32-0.144-84.544 0-155.68 192.24-218.448 317.664-63.744 127.504-36.432 210.224 45.36 292.096 15.696 15.728 35.216 35.248 59.136 59.184 24.432 24.464 53.488 53.552 87.92 88 23.904 23.936 43.408 43.424 59.12 59.184 50.8 50.848 101.936 80.64 163.92 80.64 37.808 0 79.632-11.056 127.872-35.248 127.456-63.904 323.888-136.48 317.168-222.976zM478.784 608.72h64v64h-64v-64zM478.784 704.72h64v64h-64v-64zM574.784 704.72h64v64h-64v-64zM574.784 608.72h64v64h-64v-64zM329.888 416.56l24.336 24.336c12 12 12 31.472 0 43.456-12 12-31.44 12-43.44 0l-24.352-24.352-24.352 24.352c-12 12-31.44 12-43.44 0s-12-31.456 0-43.456l24.352-24.352-24.352-24.352c-12-11.984-12-31.44 0-43.44s31.456-12 43.44 0l24.352 24.336 25.056-25.056c12-12 31.44-12 43.44 0s12 31.472 0 43.472l-25.040 25.056z" />
+<glyph unicode="&#xe01c;" glyph-name="fire" d="M508.416-63.28c-241.248 0-412.368 167.28-412.368 397.776 0 122.368 73.376 254.192 76.496 259.712 6.368 11.344 18.88 17.504 31.936 16.064 12.912-1.664 23.536-10.976 26.88-23.568 0.192-0.752 19.968-74.752 46.064-115.84 17.536-27.648 35.312-47.184 55.312-60.752-13.536 58.656-23.904 146.912-7.024 237.472 46.336 248.576 241.984 308.048 250.368 310.448 10.784 3.088 22.224 0.32 30.432-7.152 8.192-7.504 11.936-18.752 9.808-29.664-0.32-1.744-32.624-175.776 35.936-324.064 6.224-13.472 14.912-29.12 24.256-44.784 2.656 21.504 6.784 44.368 13.12 66.56 25.152 87.968 90.192 118 92.944 119.216 10.848 4.944 23.504 3.312 32.88-4.032 9.344-7.376 13.84-19.28 11.68-31.008-0.336-2.16-9.408-62.032 41.536-146.944 46-76.672 59.28-126.368 59.28-221.68 0-230.48-176.432-397.76-419.536-397.76zM195.696 492.32c-17.568-44.304-35.664-103.248-35.664-157.808 0-193.408 144.192-333.776 348.368-333.776 206 0 355.536 140.368 355.536 333.776 0 83.536-10.32 122.32-50.16 188.752-26.624 44.368-39.776 84.256-46.064 116-6.336-10.256-12.224-22.784-16.528-37.872-19.504-68.192-14.592-147.936-14.528-148.752 0.944-14.272-7.744-27.472-21.248-32.256s-28.528-0.064-36.816 11.664c-2.4 3.408-59.312 83.968-84.4 138.24-52.096 112.592-51.216 234.336-45.904 304.464-52.72-30.72-133.664-99.344-159.664-238.912-25.312-135.808 23.872-271.6 24.4-272.944 4.256-11.088 2-23.664-5.808-32.592-7.84-8.88-19.904-12.816-31.536-10.032-3.968 0.976-94.032 24.4-152.336 116.288-10.416 16.464-19.76 36.384-27.648 55.76z" />
+<glyph unicode="&#xe01d;" glyph-name="eyeglass" d="M1025.376 308.208c-0.976 13.84-53.008 319.312-61.152 368.224-0.784 4.688-1.408 9.68-2.096 14.944-6.288 49.152-18.032 140.624-165.472 140.624-17.68 0-32-14.32-32-32s14.32-32 32-32c91.12 0 95.936-37.408 102-84.784 0.784-6.064 1.536-11.872 2.432-17.28 3.744-22.528 20.704-112.16 35.344-201.024-37.552 28.624-84.288 45.808-135.12 45.808-81.648 0-154.32-43.952-194.272-109.36-19.216 7.264-51.824 16.336-95.392 16.336-42.944 0-74.512-9.136-94.032-17.088-38.848 65.824-110.304 110.128-192.272 110.128-53.264 0-102.736-18.72-141.84-49.84 14.832 89.984 32.4 182.032 36.208 205.024 0.912 5.408 1.664 11.216 2.432 17.28 6.064 47.376 10.88 84.784 102 84.784 17.68 0 32 14.32 32 32s-14.32 32-32 32c-147.44 0-159.184-91.472-165.472-140.624-0.688-5.248-1.312-10.256-2.096-14.944-8.16-48.912-57.008-352.368-57.968-366.224-0.224-3.088 0.144-6.048 0.752-8.944-0.304-4.624-0.72-9.216-0.72-13.904 0-123.344 103.344-223.344 226.688-223.344s223.344 100 223.344 223.344c0 18.656-2.544 36.672-6.848 53.984 13.12 5.28 36.832 12.336 69.808 12.336 32.176 0 56.464-6.432 70.304-11.328-4.608-17.632-7.328-35.968-7.328-54.992 0-123.344 103.344-223.344 226.688-223.344s223.344 100 223.344 223.344c0 3.344-0.352 6.608-0.496 9.92 0.976 3.488 1.52 7.136 1.232 10.944zM225.344 128.016c-88.192 0-162.688 72.976-162.688 159.344s74.496 159.344 162.688 159.344c87.872 0 159.344-71.472 159.344-159.344s-71.472-159.344-159.344-159.344zM801.312 128.016c-88.192 0-162.688 72.976-162.688 159.344s74.496 159.344 162.688 159.344c76 0 139.632-53.488 155.456-124.784 0.656-6.528 1.2-12.672 1.616-18.288 0.192-2.688 0.912-5.216 1.84-7.664 0.16-2.88 0.432-5.712 0.432-8.624 0-87.856-71.472-159.328-159.344-159.328z" />
+<glyph unicode="&#xe01e;" glyph-name="envelope-open" d="M1023.312 486.704c-1.36 11.312-5.616 21.712-12.096 30.464h0.16l-0.88 0.88c-3.28 4.32-7.12 8.128-11.408 11.504l-417.28 403.408c-36.224 36.224-99.504 36.288-135.776 0l-417.216-400.256c-9.024-8.4-28.88-31.088-28.88-53.344v-479.52c0-35.184 28.816-64 64-64h896c35.184 0 64 28.816 64 64v478.256c0.224 2.88-0.064 5.76-0.624 8.608zM269.792 233.664l-205.856-189.568v371.184l205.856-181.616zM335.568 207.28c2.288 1.52 4.464 3.248 6.368 5.408 0.368 0.416 0.624 0.912 0.96 1.344l141.168 130c7.248 5.84 15.84 8.912 24.88 8.912 9.184 0 18.368-3.216 24.528-8l383.6-345.104h-806.736l225.232 207.44zM757.456 229.44l202.48 179.696v-361.84l-202.48 182.144zM103.776 517.168l387.504 370.544c6.064 6.032 14.096 9.376 22.624 9.376 8.56 0 16.592-3.344 22.656-9.376l361.376-344.352h-0.976l54.896-55.792-242.304-215.040-135.248 121.664c-37.68 29.536-91.776 30.816-131.68-1.376l-125.504-115.584-241.792 213.344 26.992 26.592h1.456z" />
+<glyph unicode="&#xe01f;" glyph-name="envolope-letter" d="M1023.312 486.72c-1.36 11.312-5.616 21.712-12.096 30.464h0.16l-0.88 0.88c-3.28 4.32-7.12 8.128-11.408 11.504l-167.152 168.384v103.264c0 17.68-14.32 32-32 32h-101.328l-116.8 99.712c-36.224 36.224-99.504 36.288-135.776 0l-116.4-99.712h-105.696c-17.68 0-32-14.32-32-32v-105.376l-163.12-163.12c-17.344-11.472-28.88-31.088-28.88-53.344v-479.504c0-35.184 28.816-64 64-64h896c35.184 0 64 28.816 64 64v478.24c0.224 2.88-0.064 5.76-0.624 8.608zM268.864 234.496l-204.928-190.080v370.896l204.928-180.816zM330.56 204.496c4.224 1.808 8.128 4.528 11.376 8.224 1.712 1.936 3.056 4.064 4.224 6.256l137.904 127.936c7.248 5.84 15.84 8.912 24.88 8.912 9.184 0 18.368-3.216 24.528-8l383.84-347.936h-807.312l220.56 204.608zM758.336 230.272l201.6 178.896v-361.632l-201.6 182.736zM897.936 543.376h-0.976l54.896-55.792-119.92-106.432v228.208l66-65.984zM491.28 887.68c6.064 6.032 14.096 9.376 22.624 9.376 8.56 0 16.592-3.344 22.656-9.376l64.624-54.464h-174.432l64.528 54.464zM767.936 769.216v-444.848l-57.312-50.88-136.32 123.568c-37.68 29.536-91.776 30.816-131.68-1.376l-126.624-117.44-60.064 53.008v437.968h512zM103.776 517.184l88.16 88.128v-217.616l-116.624 102.896 26.992 26.592h1.472z" />
+<glyph unicode="&#xe020;" glyph-name="energy" d="M595.344 895.28h0.176zM595.344 895.28l-72.208-379.376 261.584-0.88-356.064-514.304 72.208 417.376-261.568 0.912 356.048 476.272zM595.392 959.28c-1.728 0-3.456-0.064-5.152-0.192-11.296-0.912-18.784-4.688-27.664-10.656-4.928-3.28-9.44-7.28-13.392-11.936-1.168-1.376-2.272-2.816-3.296-4.288l-358.608-474.608c-14.16-19.408-16.24-45.024-5.36-66.432 10.864-21.408 32.832-34.976 56.912-35.152l184.736-1.344-58.080-342.192c-5.52-29.408 10.16-58.72 37.76-70.528 8.224-3.536 16.864-5.216 25.392-5.216 20.112 0 36.64 9.408 49.040 26.4l359.056 514.304c14.16 19.408 16.224 45.056 5.36 66.432-10.864 21.408-32.832 34.976-56.912 35.152l-184.736 0.32 57.456 300.88c1.2 4.848 1.824 9.872 1.824 15.056 0 34.624-27.568 62.848-62.064 63.968-0.768 0.032-1.52 0.032-2.272 0.032v0z" />
+<glyph unicode="&#xe021;" glyph-name="emotsmile" d="M781.264 352.848c-16.256 7.28-35.088-0.064-42.256-16.192-0.656-1.424-66.128-144.208-229.44-146.128-1.008 0-2-0.032-3.008-0.032-153.664 0-219.936 140.368-222.688 146.4-7.312 16-26.192 23.12-42.32 15.872-16.096-7.28-23.248-26.208-15.968-42.336 3.408-7.568 85.376-183.936 280.848-183.936 1.28 0 2.592 0.032 3.872 0.032 203.872 2.4 283.84 176.656 287.12 184.064 7.248 16.16-0.032 35.072-16.16 42.256zM512 960c-282.784 0-512-229.216-512-512s229.216-512 512-512 512 229.216 512 512-229.216 512-512 512zM512 0c-247.024 0-448 200.976-448 448s200.976 448 448 448 448-200.976 448-448-200.976-448-448-448zM351.504 480.176c35.264 0 63.84 28.592 63.84 63.824s-28.576 63.824-63.84 63.824c-35.28 0-63.84-28.592-63.84-63.824s28.56-63.824 63.84-63.824zM671.504 480.176c35.264 0 63.84 28.592 63.84 63.824s-28.576 63.824-63.84 63.824c-35.28 0-63.84-28.592-63.84-63.824s28.56-63.824 63.84-63.824z" />
+<glyph unicode="&#xe022;" glyph-name="disc" d="M512 960c-282.784 0-512-229.216-512-512s229.216-512 512-512 512 229.216 512 512-229.216 512-512 512zM960 448c0-66.32-14.592-129.264-40.56-185.936l-283.216 151.552c3.024 10.976 4.784 22.464 4.784 34.384 0 71.248-57.744 129.008-129.008 129.008-14.624 0-28.624-2.544-41.712-7.024l-169.616 272.912c62.992 33.84 134.944 53.104 211.328 53.104 247.024 0 448-200.976 448-448zM512 512.992c35.84 0 65.008-29.152 65.008-65.008s-29.168-64.992-65.008-64.992-64.992 29.168-64.992 65.008 29.152 64.992 64.992 64.992zM246.576 808.624l170.176-273.84c-0.752-0.832-1.536-1.648-2.288-2.512l-283.168 151.52c30.208 48.576 69.392 90.976 115.28 124.832zM64 448c0 63.68 13.44 124.256 37.504 179.168l284.368-152.16c-1.856-8.72-2.88-17.728-2.88-27.008 0-71.248 57.744-129.008 129.008-129.008 12.4 0 24.352 1.84 35.696 5.104l170.192-273.792c-61.68-32.048-131.664-50.304-205.888-50.304-247.024 0-448 200.976-448 448zM772.448 83.84l-169.504 272.688c0.496 0.496 0.96 1.024 1.456 1.536l284.288-152.144c-30.752-47.632-70.24-89.088-116.24-122.080z" />
+<glyph unicode="&#xe023;" glyph-name="cursor-move" d="M1016.4 463.36l-8.48 8.080c-0.16 0.16-0.336 0.224-0.528 0.368l-129.744 118.432c-9.344 8.944-24.448 8.944-33.824 0l-5.488-8.064c-9.344-8.944-6.304-23.408 3.040-32.336l76.464-69.344h-371.344v373.344l69.344-76.464c8.944-9.344 23.408-12.384 32.336-3.024l8.064 5.472c8.944 9.376 8.944 24.48 0 33.84l-113.168 123.968c-2.752 5.552-7.008 10.144-12.32 13.296l-1.424 1.488c-4.432 4.672-10.336 7.008-16.224 6.976-5.904 0.032-11.776-2.304-16.288-6.976l-8.096-8.464c-0.16-0.16-0.176-0.368-0.336-0.544l-115.504-127.744c-8.928-9.328-8.928-24.448 0-33.824l8.064-5.472c8.928-9.344 23.424-6.32 32.368 3.024l69.152 77.104v-375.984h-376.304l76.464 69.344c9.344 8.944 12.384 23.408 3.040 32.336l-5.472 8.064c-9.36 8.944-24.496 8.944-33.84 0l-123.984-113.184c-5.536-2.736-10.128-7.008-13.28-12.288l-1.488-1.424c-4.688-4.448-7.008-10.352-6.976-16.24-0.016-5.904 2.288-11.776 6.976-16.288l8.464-8.096c0.16-0.16 0.368-0.176 0.528-0.336l127.744-115.504c9.344-8.928 24.464-8.928 33.84 0l5.472 8.064c9.344 8.944 6.304 23.44-3.040 32.368l-77.12 69.152h379.008v-376.96l-69.152 77.104c-8.944 9.344-23.44 12.368-32.368 3.024l-8.064-5.472c-8.928-9.376-8.928-24.496 0-33.824l115.504-127.744c0.16-0.176 0.192-0.368 0.336-0.528l8.096-8.48c4.512-4.672 10.384-7.008 16.288-6.976 5.872-0.032 11.776 2.304 16.224 6.976l8.096 8.48c0.16 0.16 0.224 0.336 0.368 0.528l118.432 129.744c8.944 9.344 8.944 24.464 0 33.824l-8.064 5.488c-8.944 9.344-23.408 6.304-32.336-3.040l-69.344-76.464v374.336h373.968l-77.104-69.152c-9.344-8.944-12.368-23.44-3.024-32.368l5.472-8.064c9.376-8.928 24.496-8.928 33.824 0l127.744 115.504c0.176 0.176 0.368 0.192 0.528 0.336l8.48 8.096c4.672 4.496 7.008 10.368 6.976 16.288 0.032 5.856-2.304 11.776-6.976 16.224z" />
+<glyph unicode="&#xe024;" glyph-name="crop" d="M992 160h-128v593.904l119.456 119.296c12.48 12.496 12.48 32.768 0 45.264-12.496 12.496-32.768 12.496-45.264 0l-118.608-118.464h-595.584v128c0 17.68-14.32 32-32 32s-32-14.32-32-32v-128h-128c-17.68 0-32-14.32-32-32 0-17.664 14.32-32 32-32h128v-608c0-2.944 0.944-5.6 1.68-8.288 0.32-1.216 0.256-2.464 0.72-3.632 3.216-8.064 9.6-14.432 17.664-17.68 1.376-0.56 2.88-0.496 4.288-0.848 2.528-0.64 4.928-1.552 7.648-1.552h608v-128c0-17.68 14.32-32 32-32s32 14.32 32 32v128h128c17.68 0 32 14.32 32 32s-14.32 32-32 32zM755.488 736l-531.488-530.784v530.784h531.488zM269.28 160l530.72 529.984v-529.984h-530.72z" />
+<glyph unicode="&#xe025;" glyph-name="credit-card" d="M928.144 784h-832.288c-53.024 0-96-42.976-96-96v-480c0-53.024 42.976-96 96-96h832.288c53.024 0 96 42.976 96 96v480c0 53.024-42.976 96-96 96zM95.856 720h832.288c17.664 0 32-14.336 32-32v-64h-896.288v64c0 17.664 14.352 32 32 32zM928.144 176h-832.288c-17.664 0-32 14.336-32 32v288h896.288v-288c0-17.664-14.352-32-32-32z" />
+<glyph unicode="&#xe026;" glyph-name="chemistry" d="M810.416-10.72l-170.4 201.664v353.504h21.312c17.68 0 32 14.32 32 32s-14.32 32-32 32h-53.312c-17.68 0-32-14.32-32-32v-397.824c0-7.936 2.944-15.568 8.256-21.44l130.368-157.344h-405.28l130.368 157.344c5.312 5.872 8.256 13.504 8.256 21.44v397.824c0 17.68-14.32 32-32 32h-53.312c-17.68 0-32-14.32-32-32s14.32-32 32-32h21.312v-353.504l-170.4-201.664c-8.464-9.376-10.624-22.88-5.504-34.432 5.152-11.568 16.592-19.008 29.248-19.008h549.344c12.656 0 24.096 7.44 29.248 19.008 5.12 11.552 2.976 25.056-5.504 34.432zM480 640.32c35.264 0 63.84 28.592 63.84 63.84 0 35.216-28.576 63.808-63.84 63.808-35.28 0-63.84-28.592-63.84-63.808 0-35.248 28.56-63.84 63.84-63.84zM688.48 735.312c62.368 0 112.928 50.336 112.928 112.416s-50.544 112.416-112.928 112.416c-62.352 0-112.928-50.336-112.928-112.416s50.576-112.416 112.928-112.416zM687.984 896.336c26.656 0 48.336-21.584 48.336-48.128 0-26.528-21.68-48.128-48.336-48.128s-48.336 21.6-48.336 48.128c0.016 26.544 21.68 48.128 48.336 48.128z" />
+<glyph unicode="&#xe027;" glyph-name="bell" d="M905.616 248.112c-37.344 45.424-88.48 109.744-88.48 175.36v208.96c0 180.016-134.64 326.48-306.688 326.48-172.080 0-305.664-146.464-305.664-326.48v-208.96c0-64.512-55.488-125.488-90.672-172.8-31.648-42.512-56.624-76.096-39.76-109.664 14.832-29.536 51.968-33.328 82.656-33.328h183.36c0.048-94.208 76.448-170.576 170.672-170.576 94.24 0 170.64 76.368 170.688 170.576h187.664c19.52 0 65.152 0 80.864 33.2 15.856 33.616-9.52 64.512-44.64 107.232zM511.008 4.144c-57.216 0-103.632 46.352-103.712 103.536h207.424c-0.080-57.184-46.464-103.536-103.712-103.536zM869.392 175.808h-712.384c-4.896 0-8.992 0.16-12.368 0.368 6.592 10.208 16.272 23.248 24.144 33.856 38.992 52.4 104.144 126.368 104.144 213.424v208.96c0 142.464 103.040 258.352 237.52 258.352s238.56-115.888 238.56-258.352v-208.96c0-90.016 60.080-165.248 103.968-218.608 7.392-8.992 16.24-19.76 23.12-28.96-2.032-0.048-4.272-0.080-6.704-0.080z" />
+<glyph unicode="&#xe028;" glyph-name="badge" d="M1021.056 120.032l-187.264 346.304c19.104 43.36 29.792 91.28 29.792 141.696 0 194.304-157.52 351.808-351.808 351.808-194.336 0-351.84-157.52-351.84-351.808 0-51.632 11.216-100.624 31.184-144.784l-188.096-343.056c-6.064-11.024-5.056-24.624 2.528-34.688 7.6-10.032 20.432-14.752 32.688-11.872l160.624 36.848 54.976-153.12c4.288-11.904 15.152-20.16 27.744-21.088 0.816-0.064 1.6-0.096 2.368-0.096 11.712 0 22.592 6.432 28.192 16.88l163.696 304.976c11.808-1.2 23.792-1.808 35.92-1.808 11.12 0 22.096 0.576 32.944 1.6l167.248-305.008c5.664-10.32 16.432-16.624 28.064-16.624 0.816 0 1.664 0.032 2.496 0.096 12.56 1.008 23.376 9.248 27.632 21.088l54.976 153.12 160.624-36.848c12.32-2.976 25.024 1.808 32.624 11.808 7.632 9.984 8.656 23.52 2.688 34.576zM289.776 46.656l-40.256 112.16c-5.504 15.248-21.472 24.128-37.28 20.368l-118.8-27.248 135.408 246.976c44.592-60.24 107.952-105.68 181.44-127.792l-120.512-224.464zM224.224 608.032c0 158.544 129.008 287.536 287.568 287.536 158.544 0 287.536-128.992 287.536-287.536s-128.992-287.568-287.536-287.568c-158.576 0-287.568 129.024-287.568 287.568zM811.744 179.184c-15.872 3.744-31.776-5.12-37.28-20.368l-40.528-112.976-123.152 224.56c75.44 22.096 140.336 68.736 185.504 130.736l134.848-249.328-119.392 27.376z" />
+<glyph unicode="&#xe029;" glyph-name="anchor" d="M1021.024 228.592l-82.288 151.296c-0.128 0.208-0.096 0.4-0.224 0.592l-5.872 10.144c-3.28 5.616-8.432 9.232-14.192 10.592-5.696 1.408-11.984 0.544-17.408-2.976l-9.84-6.336c-0.192-0.112-0.304-0.288-0.496-0.416l-145.6-98.32c-10.88-7.008-14.416-21.68-7.936-32.912l6.544-7.2c6.48-11.184 21.264-11.648 32.16-4.64l87.040 59.184c-20.608-166-154.736-293.392-318.96-308.176v641.6h128.048c17.664 0 32 14.336 32 32s-14.336 32-32 32h-129.44c-0.24 0.832-0.448 1.664-0.768 2.464 57.104 13.28 99.696 64.368 99.696 125.536 0 71.248-57.744 129.008-129.008 129.008-71.248 0-128.992-57.744-128.992-129.008 0-60.816 42.112-111.664 98.736-125.28-0.336-0.88-0.576-1.808-0.848-2.72h-129.376c-17.664 0-32-14.336-32-32s14.336-32 32-32h127.984v-641.584c-164.176 14.784-298.16 142.128-318.816 308.112l86.944-59.12c10.88-7.008 25.664-6.544 32.144 4.64l6.56 7.2c6.48 11.216 2.944 25.904-7.952 32.912l-145.6 98.32c-0.192 0.144-0.304 0.32-0.48 0.416l-9.856 6.336c-5.408 3.52-11.696 4.368-17.408 2.976-5.744-1.36-10.912-4.992-14.192-10.592l-5.872-10.16c-0.112-0.192-0.096-0.384-0.208-0.592l-82.272-151.296c-6.496-11.168-2.944-25.872 7.952-32.896l9.12-3.424c10.88-6.992 24.256-0.64 30.752 10.544l47.904 88.976c29.376-204.72 205.104-357.824 413.28-357.824 208.064 0 383.92 153.088 413.36 357.712l47.84-88.864c6.496-11.184 19.888-17.536 30.768-10.544l9.12 3.424c10.896 7.024 14.448 21.728 7.952 32.896zM447.504 833.024c0 35.84 29.152 65.008 64.992 65.008s65.008-29.152 65.008-65.008-29.152-65.008-65.008-65.008c-35.824 0.016-64.992 29.168-64.992 65.008z" />
+<glyph unicode="&#xe02a;" glyph-name="wallet" d="M1023.648 669.52c0.464 23.664-5.904 78.848-77.84 98.064l-722.416 144.624c-52.944 0-96-43.056-96-96v-128.704l-32 0.080c-52.752-0.224-95.632-43.152-95.632-95.968v-511.808c0-52.944 43.056-96 96-96h832.464c52.944 0 96 43.056 96 96l-0.576 589.712zM191.392 816.208c0 16.72 12.88 30.464 29.216 31.872l706-142.88c0.256-0.128-5.248-17.936-30.88-17.6h-704.336v128.608zM960.24 79.792c0-17.664-14.336-32-32-32h-832.48c-17.664 0-32 14.336-32 32v511.824c0 17.664 14.336 32 32 32h800.064c31.408 0 64.4 10.704 64.4 31.888v-575.712zM191.824 399.504c-35.344 0-64-28.656-64-64s28.656-64 64-64 64 28.656 64 64-28.656 64-64 64z" />
+<glyph unicode="&#xe02b;" glyph-name="vector" d="M992 288h-32.272v1.616c0 161.92-86.528 303.808-215.664 382.384h160.816c11.088-19.040 31.504-32 55.12-32 35.344 0 64 28.656 64 64s-28.656 64-64 64c-23.632 0-44.032-12.96-55.12-32h-296.88v32c0 17.664-14.336 32-32 32h-128c-17.664 0-32-14.336-32-32v-32h-296.88c-11.088 19.040-31.488 32-55.12 32-35.344 0-64-28.656-64-64s28.656-64 64-64c23.632 0 44.032 12.96 55.12 32h160.8c-129.136-78.592-215.648-220.464-215.648-382.384v-1.616h-32.272c-17.664 0-32-14.336-32-32v-128c0-17.664 14.336-32 32-32h128c17.664 0 32 14.336 32 32v128c0 17.664-14.336 32-32 32h-31.728v1.616c0 178.448 122.464 328.672 287.728 371.392v-21.008c0-17.664 14.336-32 32-32h128c17.664 0 32 14.336 32 32v21.008c165.264-42.736 287.728-192.96 287.728-371.392v-1.616h-31.728c-17.664 0-32-14.336-32-32v-128c0-17.664 14.336-32 32-32h128c17.664 0 32 14.336 32 32v128c0 17.664-14.336 32-32 32zM128 160h-64v64h64v-64zM544 672h-64v64h64v-64zM960 160h-64v64h64v-64z" />
+<glyph unicode="&#xe02c;" glyph-name="speech" d="M960 896.4h-896c-35.344 0-64-28.656-64-64v-577.504c0-35.344 28.656-64 64-64h127.536v-159.312c0-12.912 7.744-24.528 19.632-29.504 4-1.68 8.224-2.496 12.368-2.496 8.256 0 16.336 3.184 22.432 9.184l185.024 182.128h529.008c35.344 0 64 28.656 64 64v577.504c0 35.344-28.656 64-64 64zM960 254.912h-555.216l-149.248-146.912v146.912h-191.536v577.488h896v-577.488zM224 510.992h576c17.664 0 32 14.336 32 32s-14.336 32-32 32h-576c-17.664 0-32-14.336-32-32s14.336-32 32-32zM224 638.992h576c17.664 0 32 14.336 32 32s-14.336 32-32 32h-576c-17.664 0-32-14.336-32-32s14.336-32 32-32zM224 382.992h384c17.664 0 32 14.336 32 32s-14.336 32-32 32h-384c-17.664 0-32-14.336-32-32s14.336-32 32-32z" />
+<glyph unicode="&#xe02d;" glyph-name="puzzle" d="M512-64.16c-20.288 0-39.376 7.872-53.744 22.192l-436.512 436.496c-29.536 29.68-29.536 77.952-0.064 107.568l159.904 159.872c9.872 9.872 25.024 12.224 37.44 5.744 12.368-6.464 19.12-20.224 16.688-33.968-1.632-9.152-2.368-16.496-2.368-23.12 0-70 56.976-128.144 127.008-128.144 70.096 0 121.28 58.144 121.28 128.144 0 70.096-51.184 127.088-121.28 127.088-6.56 0-13.872-0.752-23.024-2.368-13.872-2.56-27.504 4.32-33.968 16.688-6.464 12.4-4.128 27.568 5.744 37.44l149.088 149.12c28.88 28.752 78.816 28.688 107.568 0.064l109.152-109.216c22.784 70.816 89.28 122.224 167.536 122.224 97.024 0 175.968-78.976 175.968-176.032 0-78.256-51.376-144.752-122.224-167.504l106.032-105.968c29.6-29.68 29.6-77.952 0.032-107.6l-436.448-436.464c-14.432-14.384-33.52-22.256-53.808-22.256zM174.896 564.784l-107.904-107.872c-4.656-4.688-4.656-12.432 0.064-17.184l436.368-436.384c6.128-6.064 10.944-6.128 17.184 0.064l436.352 436.384c4.688 4.72 4.688 12.4-0.032 17.152l-153.904 153.808c-9.632 9.632-12.128 24.32-6.192 36.56s18.848 19.504 32.528 17.84l4.88-0.624c2.688-0.368 5.376-0.816 8.192-0.816 61.744 0 111.968 50.192 111.968 111.904 0 61.776-50.224 112.032-111.968 112.032-61.712 0-111.936-50.256-111.936-112.032 0-2.56 0.4-5.056 0.752-7.568l0.688-5.712c1.44-13.504-5.776-26.432-18.032-32.288-12.16-5.808-26.816-3.312-36.4 6.256l-156.944 157.024c-6.128 6.064-10.944 6.128-17.184-0.064l-97.12-97.12c83.28-20.624 139.376-95.968 139.376-185.536 0-105.312-79.92-192.128-185.296-192.128-89.536 0.016-164.848 63.088-185.44 146.304z" />
+<glyph unicode="&#xe02e;" glyph-name="printer" d="M952.736 705.072h-120.72v254.448h-640.032v-254.448h-120.72c-39.312 0-71.312-32-71.312-71.344v-433.888c0-39.344 32-71.344 71.312-71.344h120.72v-192.016h640.032v192.016h120.72c39.312 0 71.312 32 71.312 71.344v433.888c0 39.344-32 71.344-71.312 71.344zM255.984 896.512h512.032v-191.44h-512.032v191.44zM768.016 0.48h-512.032v352.4h512.032v-352.4zM960.048 199.84c0-4.080-3.28-7.344-7.312-7.344h-120.72v224.384h-640.032v-224.368h-120.72c-4.032 0-7.312 3.264-7.312 7.344v433.872c0 4.064 3.28 7.344 7.312 7.344h881.472c4.032 0 7.312-3.28 7.312-7.344v-433.888zM832 576.56h-32c-17.664 0-32-14.336-32-32s14.336-32 32-32h32c17.664 0 32 14.336 32 32s-14.336 32-32 32z" />
+<glyph unicode="&#xe02f;" glyph-name="present" d="M1024 639.504c0 35.344-28.656 64-64 64h-109.248c28.272 27.888 46.368 64.448 46.368 109.472 0 55.44-31.84 115.664-121.216 115.664-117.6 0-215.84-125.216-262-195.408-46.192 70.176-147.44 195.392-265.024 195.392-89.376 0-121.216-60.224-121.216-115.664 0-45.008 18.592-81.584 47.44-109.472h-111.104c-35.344 0-64-28.656-64-64v-191.568h64.56v-416.56c0-35.344 28.656-64 64-64h767.68c35.344 0 64 28.656 64 64v416.576h63.76v191.568zM775.904 864.624c39.568 0 57.216-16.624 57.216-51.664 0-71.088-79.344-109.44-153.968-109.44h-108.336c45.472 67.536 125.504 161.104 205.088 161.104zM248.88 864.624c79.6 0 162.656-93.568 208.128-161.088h-108.368c-74.624 0-156.976 39.344-156.976 110.432 0 35.024 17.648 50.656 57.216 50.656zM960 511.936h-416v127.568h416v-127.568zM64 639.504h416v-127.568h-416v127.568zM128.56 447.936h351.44v-416.56h-351.44v416.56zM896.256 31.376h-352.256v416.56h352.256v-416.56z" />
+<glyph unicode="&#xe030;" glyph-name="playlist" d="M33.76 896.24h448c17.664 0 32 14.336 32 32s-14.336 32-32 32h-448c-17.664 0-32-14.336-32-32s14.32-32 32-32zM33.76 704.24h448c17.664 0 32 14.336 32 32s-14.336 32-32 32h-448c-17.664 0-32-14.336-32-32s14.32-32 32-32zM513.76 544.24c0 17.664-14.336 32-32 32h-448c-17.664 0-32-14.336-32-32s14.336-32 32-32h448c17.664 0 32 14.336 32 32zM1012.88 635.456l-312.912 312.896c-9.904 9.92-24.656 11.84-36.592 6.016-12.544-4.336-21.616-16.112-21.616-30.128v-708.4c-33.92 25.136-78.432 40.528-127.376 40.528-106.064 0-192.096-71.776-192.096-160.288 0-88.528 86.032-160.336 192.096-160.336 106.128 0 192.096 71.808 192.096 160.336 0 4.016-0.368 7.936-0.72 11.872v744.096l261.84-261.856c12.496-12.496 32.768-12.496 45.264 0s12.496 32.768 0.016 45.264zM641.76 92.976c-2.304-44.496-54.192-92.816-128.128-92.816-75.648 0-128.352 50.56-128.352 95.872 0 45.344 52.704 95.84 128.352 95.84 73.936 0 125.824-48.256 128.128-92.784v-6.112z" />
+<glyph unicode="&#xe031;" glyph-name="pin" d="M1014.848 580.336l-368.16 370.016c-7.936 7.968-19.376 11.216-30.32 8.496-10.912-2.656-19.6-10.848-22.944-21.568-22.16-71.312-24.72-135.84-7.792-194.688-1.552-1.072-3.040-2.24-4.416-3.616l-171.104-171.072c-55.2 25.6-114.544 39.456-173.696 39.456-37.6 0-74.464-5.568-109.568-16.464-10.688-3.344-18.88-12-21.568-22.848-2.688-10.88 0.464-22.336 8.368-30.288l218.976-220.384-306.16-311.040-26.624-70.128 64.368 24.88 313.36 311.040 221.824-223.264c6.064-6.128 14.288-9.44 22.688-9.44 2.528 0 5.088 0.32 7.632 0.912 10.912 2.688 19.6 10.88 22.944 21.6 28.976 93.232 20.48 193.344-20.336 283.12l174.704 174.736c0.624 0.624 1.056 1.328 1.632 2 26.368-7.536 53.696-11.568 82.048-11.568 35.216 0 72.56 5.056 110.976 17.008 10.688 3.312 18.88 12 21.568 22.848 2.656 10.848-0.496 22.304-8.4 30.256zM603.152 135.856l-402.784 405.408c103.376 12.064 214.848-29.6 295.568-110.32 80.32-80.304 119.504-191.296 107.216-295.088zM600.224 403.456c-16.832 25.728-36.464 50.176-59.024 72.752-22.464 22.464-47.008 42.256-72.96 59.328l144.128 144.096c14.704-25.568 33.664-50 57.008-73.328 23.856-23.84 49.088-43.136 75.6-58.064l-144.752-144.784zM714.624 651.552c-61.536 61.536-85.248 130.128-72.688 212.88l286.912-288.4c-82.656-11.856-151.6 12.896-214.224 75.52z" />
+<glyph unicode="&#xe032;" glyph-name="picture" d="M960 880.096h-896c-35.184 0-64-28.816-64-64v-736.192c0-35.184 28.816-64 64-64h896c35.184 0 64 28.816 64 64v736.192c0 35.184-28.816 64-64 64zM960 79.904h-896v188.56l256.848 248.912 264.784-264.496c10.912-13.248 30.336-11.568 44.128-1.12l116.88 105.808 210.8-216.384c0.8-0.8 1.696-1.392 2.56-2.080v-59.2zM960 230.208l-188.032 192.416c-11.408 11.248-29.28 12.4-41.936 2.752l-120.56-105.024-264.944 262.080c-5.664 6.848-13.84 11.024-22.688 11.6-8.816 0.32-17.504-2.56-23.968-8.624l-233.872-227.6v458.288h896v-585.888zM736 559.872c35.28 0 63.84 28.608 63.84 63.84 0 35.216-28.56 63.824-63.84 63.824s-63.84-28.608-63.84-63.824c0-35.232 28.56-63.84 63.84-63.84z" />
+<glyph unicode="&#xe033;" glyph-name="map" d="M993.184 824.992l-320.96 133.072-319.44-126.432-321.968 126.368c-2.752 0.816-5.44 1.12-7.968 1.12-13.136 0.064-22.848-9.744-22.848-24.496v-830c0-17.568 13.872-35.872 30.816-40.56l322.336-127.184 319.008 129.504 321.024-126.128c2.752-0.752 5.44-1.12 7.968-1.12 13.12 0 22.848 9.744 22.848 24.496v820.736c0 17.568-13.872 35.888-30.816 40.624zM384 778.864l256 100.304v-761.504l-256-101.184v762.384zM64 873.312l256-94.576v-761.76l-256 104.272v752.064zM960 22l-256 96.384v759.824l256-110.384v-745.824z" />
+<glyph unicode="&#xe034;" glyph-name="layers" d="M21.84 658.192l475.088-258.72c4.784-2.592 10.032-3.904 15.312-3.904 5.216 0 10.432 1.28 15.184 3.84l480.096 258.72c10.464 5.632 16.976 16.624 16.816 28.528-0.16 11.936-6.912 22.752-17.504 28.16l-475.12 241.28c-9.056 4.592-19.744 4.624-28.88 0.064l-480.048-241.28c-10.624-5.344-17.44-16.16-17.632-28.064s6.256-22.944 16.688-28.624zM517.152 891.712l406.16-206.272-410.976-221.472-406.176 221.184 410.992 206.56zM1001.344 479.68l-94.976 48.224-68.56-36.976 80-40.624-410.96-221.456-406.192 221.184 85.312 42.88-68.368 37.248-100.32-50.4c-10.624-5.344-17.44-16.16-17.632-28.064s6.256-22.944 16.688-28.624l475.088-258.72c4.784-2.592 10.032-3.904 15.312-3.904 5.216 0 10.432 1.28 15.184 3.84l480.096 258.72c10.464 5.632 16.976 16.624 16.816 28.528-0.144 11.936-6.896 22.752-17.488 28.144zM1001.344 255.68l-89.968 44.224-68.56-36.976 75.008-36.624-410.976-221.456-406.192 221.184 79.312 35.872-68.368 37.248-94.32-43.408c-10.624-5.344-17.44-16.16-17.632-28.064s6.256-22.944 16.688-28.624l475.088-258.72c4.784-2.592 10.032-3.904 15.312-3.904 5.216 0 10.432 1.28 15.184 3.84l480.096 258.72c10.464 5.632 16.976 16.624 16.816 28.528-0.144 11.952-6.896 22.768-17.488 28.16z" />
+<glyph unicode="&#xe035;" glyph-name="handbag" d="M1022.736 17.36l-83.408 503.776c-7.44 65.312-66.976 118.432-132.72 118.432h-70.656v85.28c0 130.16-92.848 236.032-222.976 236.032-130.096 0-224.944-105.872-224.944-236.032v-85.28h-76.672c-65.744 0-125.28-53.12-132.528-117.056l-77.28-504.16c-2.976-26.56 2.224-47.504 15.408-62.288 12.432-13.904 30.528-20.976 53.744-20.976h873.568c32.912 0 51.776 13.216 61.84 24.32 9.216 10.208 19.648 28.144 16.624 57.952zM352.048 724.864c0 94.848 66.128 172.032 160.944 172.032s158.976-77.184 158.976-172.032v-85.28h-319.92v85.28zM947.168-0.448l-872.496-0.448c-5.504 0-11.008 2.944-9.712 10.688l77.248 504.096c3.84 33.44 35.504 61.68 69.152 61.68h76.688v-72.928c-19.072-11.072-32.048-31.488-32.048-55.136 0-35.344 28.656-64 64-64s64 28.656 64 64c0 23.616-12.928 44-31.952 55.088v72.992h319.904v-72.992c-19.008-11.088-31.952-31.488-31.952-55.088 0-35.344 28.656-64 64-64s64 28.656 64 64c0 23.648-12.976 44.064-32.048 55.152v72.928h70.656c33.664 0 65.312-28.256 69.408-63.44l83.344-503.28c0.4-4.096-2.816-9.312-12.192-9.312z" />
+<glyph unicode="&#xe036;" glyph-name="globe-alt" d="M929.504 545.584c0 168.784-88.976 321.872-237.968 409.568-15.248 9.008-34.88 3.872-43.808-11.376-8.944-15.216-3.872-34.848 11.376-43.808 129.248-76.032 206.4-208.528 206.4-354.368 0-242.368-175.936-418.288-418.32-418.288-54.192 0-106.784 10.16-156.32 30.16-16.368 6.656-35.056-1.28-41.664-17.664-6.624-16.4 1.28-35.056 17.664-41.664 57.216-23.12 117.872-34.848 180.32-34.848 0.192 0 0.384 0.016 0.576 0.016v-63.008h-92.928c-18.464 0-33.44-14.304-33.44-31.952s14.976-31.936 33.44-31.936h252.848c18.464 0 33.44 14.304 33.44 31.936 0 17.664-14.976 31.952-33.44 31.952h-96.384v66.8c245.808 28.56 418.208 220.912 418.208 478.48zM799.376 542.704c0 194.656-157.744 353.408-352.4 353.408-194.688 0-352.464-158.752-352.464-353.408s157.776-351.44 352.464-351.44c194.656 0 352.4 156.784 352.4 351.44zM158.496 542.704c0 159.024 129.408 289.408 288.464 289.408 159.024 0 288.4-130.368 288.4-289.408s-129.376-287.44-288.4-287.44c-159.056 0-288.464 128.4-288.464 287.44z" />
+<glyph unicode="&#xe037;" glyph-name="globe" d="M1025.024 448c0 272.016-213.664 495.104-482.32 511.024-5.536 0.608-11.088 1.008-16.72 1.008-1.664 0-3.328-0.176-4.992-0.224-2.992 0.048-5.968 0.224-8.992 0.224-282.88 0-513.024-229.696-513.024-512.032s230.144-512.032 513.024-512.032c3.024 0 6 0.176 9.008 0.24 1.664-0.064 3.328-0.24 4.992-0.24 5.632 0 11.184 0.4 16.72 1.008 268.64 15.92 482.304 238.976 482.304 511.024zM929.568 283.168c-17.632 5.12-61.92 16.24-140.064 25.392 6.464 44.192 10 90.896 10 139.44 0 38.256-2.208 75.344-6.288 111.008 99.008 11.824 142.384 26.72 145.296 27.744l-11.92 33.584c22.24-53.088 34.56-111.296 34.56-172.336 0-58.192-11.28-113.76-31.584-164.832zM285.488 448c0 35.808 2.368 70.768 6.704 104.4 51.888-4.080 113.936-7.088 186.864-7.792v-222.064c-70.992-0.688-131.664-3.568-182.688-7.472-7.040 42.192-10.88 86.88-10.88 132.928zM542.944 891.776c78.464-22.736 145.648-131.696 175.744-276.112-48.368-3.856-106.624-6.672-175.744-7.328v283.44zM479.056 890.992v-282.624c-68.368 0.688-126.88 3.472-176.064 7.232 30.704 142.608 98.432 250.752 176.064 275.392zM479.056 258.768v-253.744c-72.4 22.976-136.192 118.576-169.36 247.024 47.76 3.504 104.096 6.064 169.36 6.72zM542.944 4.224v254.56c65.952-0.624 122.064-3.28 169.216-6.928-32.608-130.128-96-226.416-169.216-247.632zM542.944 322.544v222.032c73.312 0.688 134.992 3.776 186.192 8 4.208-33.696 6.496-68.704 6.496-104.592 0-46.128-3.712-90.864-10.528-133.12-50.416 4.080-110.8 7.008-182.16 7.68zM914.8 646.064c-9.664-3.008-50.064-14.48-131.024-24.032-18.048 95.952-50.672 177.968-93.12 237.168 97.536-42.384 177.136-118.304 224.144-213.136zM358.816 869.408c-52.208-59.952-94.832-146.16-118.096-248.112-72.48 7.856-115.92 17.088-133.312 21.28 50.72 104.64 141.040 186.752 251.408 226.832zM83.632 582.816c12.32-3.344 58.912-14.944 145.552-24.528-4.96-35.44-7.68-72.304-7.68-110.304 0-48.272 4.368-94.72 12.24-138.688-74.4-8.032-120.16-17.648-140.688-22.608-19.44 50.096-30.208 104.448-30.208 161.312 0 46.96 7.312 92.256 20.784 134.816zM121.088 227.648c23.264 4.944 64.912 12.464 126.592 18.928 24.288-89.712 63.792-165.616 111.136-219.968-101.12 36.72-185.296 108.752-237.728 201.040zM690.656 36.816c38.224 53.264 68.48 125.024 87.296 208.8 63.408-7.28 103.216-15.792 123.296-20.864-48.016-83.072-121.856-149.392-210.592-187.936z" />
+<glyph unicode="&#xe038;" glyph-name="frame" d="M224 848h-192c-17.664 0-32-14.336-32-32v-192c0-17.664 14.336-32 32-32s32 14.336 32 32v160h160c17.664 0 32 14.336 32 32s-14.336 32-32 32zM992 304c-17.664 0-32-14.336-32-32v-160h-160c-17.664 0-32-14.336-32-32s14.336-32 32-32h192c17.664 0 32 14.336 32 32v192c0 17.664-14.336 32-32 32zM224 112h-160v160c0 17.664-14.336 32-32 32s-32-14.336-32-32v-192c0-17.664 14.336-32 32-32h192c17.664 0 32 14.336 32 32s-14.336 32-32 32zM992 848h-192c-17.664 0-32-14.336-32-32s14.336-32 32-32h160v-160c0-17.664 14.336-32 32-32s32 14.336 32 32v192c0 17.664-14.336 32-32 32z" />
+<glyph unicode="&#xe039;" glyph-name="folder-alt" d="M960.16 752h-480l-96 96h-320c-35.344 0-64-28.656-64-64v-160h-0.304v-64h0.304v-448c0-35.344 28.656-64 64-64h896c35.344 0 64 28.656 64 64v576c0 35.344-28.656 64-64 64zM64.144 784h290.752l78.624-77.248 20.112-18.752h506.528v-64h-896v160zM64.144 112v448h896v-448h-896z" />
+<glyph unicode="&#xe03a;" glyph-name="film" d="M800 687.712h64c17.664 0 32 14.336 32 32v32c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32zM800 495.712h64c17.664 0 32 14.336 32 32v32c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32zM800 303.712h64c17.664 0 32 14.336 32 32v32c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32zM800 111.712h64c17.664 0 32 14.336 32 32v32c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32zM160 687.712h64c17.664 0 32 14.336 32 32v32c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32zM160 495.712h64c17.664 0 32 14.336 32 32v32c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32zM160 303.712h64c17.664 0 32 14.336 32 32v32c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32zM160 111.712h64c17.664 0 32 14.336 32 32v32c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32zM960 944.096h-896c-35.184 0-64-28.816-64-64v-864.192c0-35.184 28.816-64 64-64h896c35.184 0 64 28.816 64 64v864.192c0 35.184-28.816 64-64 64zM960 15.904h-896v864.192h896v-864.192z" />
+<glyph unicode="&#xe03b;" glyph-name="feed" d="M101.872 629.744c-18.128 0-32.768-14.656-32.768-32.768 0-18.096 14.64-32.768 32.768-32.768 303.008 0 525.344-224.368 525.344-527.36 0-18.096 14.656-32.752 32.768-32.752s32.768 14.656 32.768 32.752c0 340.368-250.528 592.896-590.88 592.896zM102.16 957.376c-18.112 0-32.768-14.656-32.768-32.768s14.656-32.768 32.768-32.768c470.176 0 852.672-382.496 852.672-852.656 0-18.096 14.656-32.752 32.768-32.752s32.768 14.656 32.768 32.752c-0.016 506.288-411.92 918.192-918.208 918.192zM184.016 300.4c-99.472 0-180.368-81.12-180.368-180.88 0-99.712 80.912-180.912 180.368-180.912s180.4 81.184 180.4 180.912c0 99.76-80.928 180.88-180.4 180.88zM184.016 1.968c-64.608 0-117.168 52.752-117.168 117.568s52.56 117.536 117.168 117.536c64.624 0 117.216-52.72 117.216-117.536s-52.592-117.568-117.216-117.568z" />
+<glyph unicode="&#xe03c;" glyph-name="earphones-alt" d="M1023.84 387.456c0.096 21.056-3.216 100.496-5.744 123.216-29.12 260.752-240.752 450-503.184 450-273.344 0-494.816-210.624-509.84-489.904-0.32-6.096-2.56-49.344-2.72-75.088l-0.080-14.32c-1.312-5.92-2.112-12.032-2.112-18.336v-214.656c0-46.88 38.128-85.008 85.008-85.008h86.288c46.88 0 85.024 38.128 85.024 85.008v214.64c0 46.88-38.16 85.008-85.024 85.008h-86.304c-5.888 0-11.632-0.608-17.184-1.744 0.48 10.384 0.912 18.576 1.024 21.056 13.168 244.784 207.136 429.344 445.92 429.344 229.28 0 414.128-165.344 439.568-393.12 1.072-9.504 2.448-33.664 3.552-57.92-6.192 1.44-12.576 2.384-19.2 2.384h-85.28c-46.88 0-85.008-38.128-85.008-85.008v-213.664c0-32.368 18.4-60.256 45.088-74.592l-205.44-80.656v5.216c0 17.664-14.336 32-32 32h-96c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32h96c0.272 0 0.512 0.080 0.784 0.080l57.36 0.224 329.552 129.376c4.32 1.792 7.984 4.464 10.992 7.664 28.848 13.616 48.992 42.736 48.992 76.688v213.664c0 5.216-0.64 10.288-1.552 15.232 0.88 2.944 1.504 6 1.52 9.216zM85.152 384.016h86.288c11.6 0 21.024-9.408 21.024-21.008v-214.656c0-11.6-9.44-21.008-21.024-21.008h-86.288c-11.6 0-21.008 9.408-21.008 21.008v214.656c0.016 11.6 9.424 21.008 21.008 21.008zM832.528 363.008c0 11.6 9.408 21.008 21.008 21.008h85.28c11.6 0 21.024-9.408 21.024-21.008v-213.664c0-11.6-9.44-21.008-21.024-21.008h-85.28c-11.6 0-21.008 9.408-21.008 21.008v213.664z" />
+<glyph unicode="&#xe03d;" glyph-name="earphones" d="M1023.84 355.44c0.096 21.056-3.216 100.496-5.744 123.216-29.12 260.752-240.752 450-503.184 450-273.344 0-494.816-210.624-509.84-489.904-0.32-6.096-2.56-49.344-2.72-75.088l-0.080-14.32c-1.312-5.92-2.112-12.032-2.112-18.336v-278.656c0-46.88 38.128-85.008 85.008-85.008h86.288c46.88 0 85.024 38.128 85.024 85.008v278.64c0 46.88-38.16 85.008-85.024 85.008h-86.32c-5.888 0-11.632-0.608-17.184-1.744 0.48 10.384 0.912 18.592 1.024 21.056 13.184 244.784 207.136 429.344 445.936 429.344 229.28 0 414.128-165.344 439.568-393.12 1.088-9.504 2.464-33.664 3.568-57.92-6.24 1.44-12.608 2.384-19.232 2.384h-85.28c-46.88 0-85.008-38.128-85.008-85.008v-277.664c0-46.896 38.128-85.008 85.008-85.008h85.28c46.88 0 85.024 38.128 85.024 85.008v277.664c0 5.216-0.64 10.288-1.568 15.216 0.928 2.944 1.536 6.016 1.568 9.232zM85.136 352h86.288c11.6 0 21.024-9.408 21.024-21.008v-278.656c0-11.616-9.44-21.008-21.024-21.008h-86.288c-11.6 0-21.008 9.408-21.008 21.008v278.656c0.032 11.6 9.44 21.008 21.008 21.008zM959.84 53.344c0-11.6-9.44-21.008-21.024-21.008h-85.28c-11.6 0-21.008 9.408-21.008 21.008v277.648c0 11.6 9.408 21.008 21.008 21.008h85.28c11.6 0 21.024-9.408 21.024-21.008v-277.648z" />
+<glyph unicode="&#xe03e;" glyph-name="drop" d="M510.4-62.704c-193.312 0-350.592 155.12-350.592 345.776 0 222.688 311.632 644.848 324.912 662.72 6 8.064 15.408 12.848 25.472 12.912 11.184 0.096 19.568-4.592 25.664-12.56 13.408-17.536 328.336-432.224 328.336-663.056 0-190.672-158.72-345.792-353.792-345.792zM510.752 872.304c-74.4-105.664-286.944-422.064-286.944-589.216 0-155.376 128.56-281.776 286.592-281.776 159.776 0 289.776 126.4 289.776 281.776 0.016 173.36-214.144 485.024-289.424 589.216z" />
+<glyph unicode="&#xe03f;" glyph-name="drawar" d="M1022.976 450.016l-117.504 407.088c-3.84 13.872-16.464 23.472-30.848 23.472h-735.344c-14.496 0-27.184-9.744-30.944-23.776l-107.392-386.352c-1.984-7.504-1.008-15.008 2-21.536-1.728-5.792-2.944-11.824-2.944-18.176v-351.312c0-35.344 28.656-64 64-64h896c35.344 0 64 28.656 64 64v351.312c0 1.712-0.368 3.328-0.496 5.008 0.832 4.592 0.816 9.44-0.528 14.272zM163.904 816.576h686.368l93.12-321.84h-298.336c-1.44-76.816-55.904-129.68-133.056-129.68s-130.624 52.88-132.064 129.68h-305.776l89.744 321.84zM960 79.424h-896v351.312h263.12c27.936-80.432 95.776-129.68 184.88-129.68s157.936 49.248 185.872 129.68h262.128v-351.312z" />
+<glyph unicode="&#xe040;" glyph-name="docs" d="M768 960h-352c-35.344 0-64-28.656-64-64h352v-256h256v-512h-224v-64h224c35.344 0 64 28.656 64 64v575.984l-256 256.016zM768 704v165.504l165.472-165.504h-165.472zM64 832c-35.344 0-64-28.656-64-64v-768c0-35.344 28.656-64 64-64h544c35.344 0 64 28.656 64 64v575.984l-256 256.016h-352zM608 0h-544v768h288v-256h256v-512zM416 576v165.504l165.472-165.504h-165.472z" />
+<glyph unicode="&#xe041;" glyph-name="directions" d="M1017.056 773.936l-99.696 111.344c-6.064 6.848-14.784 10.752-23.936 10.752h-350.256v33.968c0 16.56-14.336 30-32 30s-32-13.44-32-30v-33.968h-255.808c-17.68 0-32-14.32-32-32v-223.664c0-17.68 14.32-32 32-32h255.808v-64.096h-348.592c-9.152 0-17.872-3.904-23.936-10.752l-99.68-113.312c-10.752-12.128-10.752-30.368 0-42.496l99.68-112.288c6.112-6.848 14.784-9.744 23.936-9.744h348.592v-289.68c0-16.56 14.336-30 32-30s32 13.44 32 30v289.68h256.464c17.68 0 32 14.32 32 32v224.608c0 17.68-14.32 32-32 32h-256.464v64.096h350.256c9.152 0 17.872 3.904 23.936 10.752l99.696 112.32c10.736 12.112 10.736 30.352 0 42.48zM767.648 319.68h-622.688l-71.28 79.28 71.28 81.312h622.688v-160.592zM879.040 672.368h-623.68v159.664h623.68l71.28-79.344-71.28-80.32z" />
+<glyph unicode="&#xe042;" glyph-name="direction" d="M966.912 661.84l-179.12 192c-6.080 6.48-14.544 10.16-23.424 10.16h-267.12l-1.008 66c0 16.56-14.336 30-32 30s-30-13.44-30-30l-0.976-66h-352.768c-17.68 0-32-14.32-32-32v-384c0-17.68 14.32-32 32-32h352.336v-450c0-16.56 14.336-30 32-30s32 13.44 32 30v450h267.536c8.88 0 17.344 3.68 23.408 10.16l179.12 192c11.472 12.304 11.472 31.376 0.016 43.68zM750.464 480h-637.968v320h637.968l149.28-160-149.28-160z" />
+<glyph unicode="&#xe043;" glyph-name="diamond" d="M1018.72 664.528l-139.872 267.44c-8.16 15.6-29.264 28.352-46.848 28.352h-321.936c-0.352 0.016-0.704 0.112-1.056 0.128-0.288 0-0.56-0.112-0.848-0.128h-316.16c-17.6 0-38.752-12.72-47.024-28.256l-139.504-262.288c-8.288-15.536-6.624-39.936 3.632-54.256l480.016-669.152c5.152-7.184 12-10.816 18.832-10.816 6.784 0 13.584 3.536 18.768 10.592l487.904 664.256c10.384 14.192 12.256 38.544 4.096 54.128zM942.368 672.368h-171.456l68.656 196.608 102.8-196.608zM575.344 896.32h205.968l-63.888-182.928-142.080 182.928zM668.24 672.368h-297.648l140.672 202.096 156.976-202.096zM313.888 702.912l-64.176 193.408h198.816l-134.64-193.408zM680.752 608.368l-172.032-492.544-163.456 492.544h335.488zM436.928 128.912l-343.936 479.456h184.832l159.104-479.456zM748.544 608.368h185.168l-352.976-480.56 167.808 480.56zM188.48 877.584l68.096-205.216h-177.248l109.152 205.216z" />
+<glyph unicode="&#xe044;" glyph-name="cup" d="M832.56 544.208c-8.336 0-35.2 0.16-64.304 0.368l0.112 63.968c0 35.344-28.656 64-64 64l-640.496 0.16c-35.344 0-64-28.656-64-64v-480.944c0-106.032 85.968-192 192-192h384.656c106.032 0 191.008 85.968 191.008 192l0.064 32.848c29.024-0.224 58.608-0.4 64.976-0.4 105.776 0 191.568 85.040 191.568 191.072-0.016 106.048-85.808 192.928-191.584 192.928zM703.536 127.76c0-70.592-56.4-128-127.008-128h-384.656c-70.592 0-128 57.408-128 128l-0.096 480.944 640.592-0.192-0.832-480.752zM832.56 223.28c-6.352 0-35.888 0.192-64.864 0.4l0.448 256.816c29.12-0.208 56.048-0.368 64.4-0.368 73.12 0 128.624-54.544 128.624-127.84s-55.488-129.008-128.608-129.008zM575.872 736.24c17.664 0 32 14.336 32 32v160c0 17.664-14.336 32-32 32s-32-14.336-32-32v-160c0-17.68 14.336-32 32-32zM191.872 736.24c17.664 0 32 14.336 32 32v160c0 17.664-14.336 32-32 32s-32-14.336-32-32v-160c0-17.68 14.336-32 32-32zM383.872 736.24c17.664 0 32 14.336 32 32v160c0 17.664-14.336 32-32 32s-32-14.336-32-32v-160c0-17.68 14.336-32 32-32z" />
+<glyph unicode="&#xe045;" glyph-name="compass" d="M733.184 679.728l-313.152-134.64c-5.664-2.88-10.256-7.472-13.152-13.152l-143.456-289.216c-5.872-11.536-3.744-25.536 5.312-34.784 5.808-5.904 13.632-9.024 21.536-9.024 4.432 0 8.944 0.976 13.12 3.008l305.728 126.976c5.6 2.688 10.224 7.056 13.216 12.496l150.88 296.896c6.432 11.6 4.528 26.032-4.656 35.568-9.216 9.536-23.584 11.872-35.376 5.872zM357.856 295.184l87.008 177.68 87.872-109.984-174.88-67.696zM584.704 400.384l-88.8 111.152 176.784 69.76-87.984-180.912zM512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448-200.976 448-448-200.976-449.008-448-449.008z" />
+<glyph unicode="&#xe046;" glyph-name="call-out" d="M1000.352 188.384c-15.664 11.008-187.056 124.976-208.064 137.808-9.152 5.6-20.32 8.336-32.464 8.336-15.664 0-33.008-4.56-49.936-13.472-16.496-8.688-66.464-37.12-90.912-51.088-21.536 15.12-72.128 53.872-151.84 133.664-79.216 79.184-118.32 130.192-133.536 151.84 13.936 24.432 42.336 74.4 50.976 90.848 16.368 31.008 18.224 61.968 4.944 82.848-12.464 19.68-125.968 191.808-137.68 208-11.024 15.28-30.816 23.536-52.288 23.536-16.944 0-34.912-5.12-50.496-15.968-1.504-1.072-152.096-110.256-150.096-172.352 5.552-174.432 175.056-379.424 316.272-520.688s346.224-310.816 521.344-316.4h1.44c61.312 0 169.088 148.688 170.128 150.16 28.272 40.4 17.968 84.88-7.792 102.928zM956.144 122.736c-40.592-56.224-98.224-114.944-120.784-123.344-120.032 5.632-288.464 111.12-474.88 297.568-186.4 186.464-291.872 354.704-297.44 474.336 8.096 22.624 66.816 80.624 122.528 120.912 4.128 2.848 9.216 4.496 13.968 4.496 1.056 0 1.936-0.096 2.624-0.224 18-26.16 114.624-172.432 132.16-199.776 0.064-2.88-0.912-10.192-6.4-20.624-5.84-11.12-24.032-43.536-49.904-88.88l-20.128-35.28 23.344-33.248c17.408-24.72 58.816-78.464 140.624-160.288 82.16-82.192 135.712-123.472 160.336-140.784l33.248-23.344 35.28 20.16c34.192 19.536 75.504 42.944 88.944 50 10.784 5.68 18.16 6.128 20.16 6.128 0.32 0 0.592 0 0.816-0.032 24.496-15.376 173.936-114.592 200.32-132.688 0.432-2.56 0.032-8.128-4.816-15.088zM683.904 577.728l275.248 273.568-0.88-155.056c-0.288-12.944 9.968-24.192 22.912-23.888l16.416 0.016c12.96 0.32 23.648 8 23.92 20.928l0.656 231.008c0 0.224-0.864 0.384-0.864 0.608l1.264 11.712c0.128 6.496-1.376 12.288-5.6 16.432-4.128 4.176-9.936 6.72-16.384 6.544l-11.696-0.272c-0.224 0-0.4-0.096-0.656-0.128l-229.472 1.024c-12.928-0.288-23.616-10.976-23.92-23.92l-0.032-16.416c1.968-15.232 13.936-24.16 26.88-23.872l151.248-0.4-274.288-272.624c-12.496-12.496-12.496-32.768 0-45.264 12.496-12.48 32.752-12.48 45.248 0z" />
+<glyph unicode="&#xe047;" glyph-name="call-in" d="M1000.352 188.384c-15.664 11.008-187.056 124.976-208.064 137.808-9.152 5.6-20.32 8.336-32.464 8.336-15.664 0-33.008-4.56-49.936-13.472-16.496-8.688-66.464-37.12-90.912-51.088-21.536 15.12-72.128 53.872-151.84 133.664-79.216 79.184-118.32 130.192-133.536 151.84 13.936 24.432 42.336 74.4 50.976 90.848 16.368 31.008 18.224 61.968 4.944 82.848-12.464 19.68-125.968 191.808-137.68 208-11.024 15.28-30.816 23.536-52.288 23.536-16.944 0-34.912-5.12-50.496-15.968-1.504-1.072-152.096-110.256-150.096-172.352 5.552-174.432 175.056-379.424 316.272-520.688s346.224-310.816 521.344-316.4h1.44c61.312 0 169.088 148.688 170.128 150.16 28.272 40.4 17.968 84.88-7.792 102.928zM956.144 122.736c-40.592-56.224-98.224-114.944-120.784-123.344-120.032 5.632-288.464 111.12-474.88 297.568-186.4 186.464-291.872 354.704-297.44 474.336 8.096 22.624 66.816 80.624 122.528 120.912 4.128 2.848 9.216 4.496 13.968 4.496 1.056 0 1.936-0.096 2.624-0.224 18-26.16 114.624-172.432 132.16-199.776 0.064-2.88-0.912-10.192-6.4-20.624-5.84-11.12-24.032-43.536-49.904-88.88l-20.128-35.28 23.344-33.248c17.408-24.72 58.816-78.464 140.624-160.288 82.16-82.192 135.712-123.472 160.336-140.784l33.248-23.344 35.28 20.16c34.192 19.536 75.504 42.944 88.944 50 10.784 5.68 18.16 6.128 20.16 6.128 0.32 0 0.592 0 0.816-0.032 24.496-15.376 173.936-114.592 200.32-132.688 0.432-2.56 0.032-8.128-4.816-15.088zM643.84 583.488c4.128-4.176 9.936-6.72 16.384-6.544l11.712 0.272c0.224 0 0.384 0.096 0.64 0.112l229.504-1.008c12.912 0.304 23.616 10.992 23.92 23.936l0.016 16.416c-1.952 15.232-13.936 24.16-26.864 23.872l-151.504 0.4 261.952 261.6c12.496 12.496 12.496 32.768 0 45.264-12.496 12.48-32.752 12.48-45.248 0l-262.672-262.32 0.88 154.832c0.288 12.928-9.968 24.192-22.896 23.888l-16.416-0.016c-12.96-0.32-23.664-8.016-23.936-20.944l-0.656-231.008c0-0.224 0.88-0.384 0.88-0.608l-1.28-11.712c-0.128-6.496 1.392-12.272 5.584-16.432z" />
+<glyph unicode="&#xe048;" glyph-name="call-end" d="M961.696 760.448c0-1.056-0.096-1.936-0.224-2.624-26.16-18-172.432-114.624-199.776-132.16-2.88-0.064-10.192 0.912-20.624 6.4-11.12 5.84-43.536 24.032-88.88 49.904l-35.28 20.128-33.248-23.344c-24.72-17.408-78.464-58.816-160.288-140.624-82.176-82.16-123.456-135.712-140.768-160.336l-23.344-33.248 20.16-35.28c19.536-34.192 42.944-75.504 50-88.944 5.68-10.784 6.128-18.16 6.128-20.16 0-0.32 0-0.592-0.032-0.816-15.36-24.496-114.592-173.936-132.672-200.32-2.56-0.432-8.128-0.032-15.088 4.816-56.256 40.608-114.96 98.24-123.376 120.8 5.632 120.032 111.12 288.464 297.568 474.88 186.464 186.4 354.72 291.872 474.352 297.44 22.624-8.096 80.624-66.816 120.912-122.528 2.832-4.128 4.48-9.232 4.48-13.984zM1023.696 760.448c0 16.944-5.12 34.912-15.968 50.496-1.056 1.504-108.256 152.096-170.336 150.096-174.432-5.552-379.44-175.056-520.704-316.272-141.232-141.216-310.8-346.224-316.384-521.344v-1.44c0-61.312 148.672-169.088 150.144-170.128 40.4-28.288 84.88-17.968 102.944 7.776 11.008 15.664 124.976 187.056 137.808 208.064 5.6 9.152 8.336 20.32 8.336 32.464 0 15.664-4.576 33.008-13.472 49.936-8.688 16.496-37.12 66.464-51.088 90.912 15.12 21.536 53.872 72.128 133.664 151.84 79.184 79.216 130.192 118.32 151.84 133.536 24.432-13.936 74.4-42.336 90.848-50.976 31.008-16.368 61.968-18.224 82.848-4.944 19.68 12.464 189.808 125.968 206 137.68 15.28 11.056 23.52 30.848 23.52 52.304v0z" />
+<glyph unicode="&#xe049;" glyph-name="calculator" d="M960 960.096h-896c-35.184 0-64-28.816-64-64v-896.192c0-35.184 28.816-64 64-64h896c35.184 0 64 28.816 64 64v896.192c0 35.184-28.816 64-64 64zM960-0.096h-896v896.192h896v-896.192zM224 607.696h64v-64c0-17.664 14.336-32 32-32s32 14.336 32 32v64h64c17.664 0 32 14.336 32 32s-14.336 32-32 32h-64v64c0 17.664-14.336 32-32 32s-32-14.336-32-32v-64h-64c-17.664 0-32-14.336-32-32s14.336-32 32-32zM433.136 368.848c-12.496 12.496-32.752 12.496-45.248 0l-67.888-67.872-67.888 67.872c-12.496 12.496-32.752 12.496-45.264 0-12.496-12.496-12.496-32.768 0-45.264l67.872-67.872-67.872-67.872c-12.496-12.496-12.496-32.768 0-45.264s32.752-12.496 45.264 0l67.888 67.856 67.888-67.872c12.496-12.496 32.752-12.496 45.248 0s12.496 32.768 0 45.264l-67.872 67.872 67.872 67.872c12.496 12.512 12.496 32.768 0 45.28zM608 607.696h192c17.664 0 32 14.336 32 32s-14.336 32-32 32h-192c-17.664 0-32-14.336-32-32s14.336-32 32-32zM608 287.696h192c17.664 0 32 14.336 32 32s-14.336 32-32 32h-192c-17.664 0-32-14.336-32-32s14.336-32 32-32zM608 159.696h192c17.664 0 32 14.336 32 32s-14.336 32-32 32h-192c-17.664 0-32-14.336-32-32s14.336-32 32-32z" />
+<glyph unicode="&#xe04a;" glyph-name="bubbles" d="M424.816 280.656c230.944 0 409.904 131.904 407.152 327.632 0 173.184-183.216 311.632-414.16 311.632-230.976 0-418.16-138.448-418.16-311.632 0-107.872 52.912-222.88 163.408-279.376 0-0.656-0.192-1.152-0.192-1.872 0-46.88-39.024-111.152-54.4-137.664h0.064c-1.216-2.88-1.952-6-1.952-9.344 0-13.12 10.576-23.664 23.696-23.664 1.936 0 5.088 0.4 6.224 0.4 0.32 0 0.432 0 0.4-0.096 81.664 13.344 202.256 105.248 220.128 127.024 18.336-2.72 30.72-3.152 46.080-3.152 6.528 0.016 13.472 0.112 21.712 0.112zM330.688 349.536l-40.976-34.032c-9.504-10.976-50.8-45.44-86.352-67.808 21.648 61.68 20.704 81.216 20.704 81.216l3.008 39.152-34.88 17.808c-88.672 45.344-128.528 139.744-128.528 222.4 0 137.664 158.864 247.632 354.16 247.632 195.28 0 350.16-109.968 350.16-247.632-0.608-152.608-145.872-264.624-341.152-264.624 0 0-29.808-1.152-60.4 3.376l-35.744 2.512zM1024.336 349.808c0 86.736-33.888 152.88-118.448 202.512-2.064-23.072-8.64-47.824-15.792-69.568 54.656-37.776 70.256-76.56 70.256-132.944 0-69.024-32.16-119.088-106.912-157.344l-31.84-15.808c0 0 3.312-82 8.224-102.752-62.448 45.776-83.904 84-83.904 84l-33.664-5.184c-13.312-1.936-49.312-1.968-49.312-1.968-86.944 0-151.376 20.72-206.336 63.744 14.928 0.912-89.184 0.88-91.504-1.152 63.568-77.632 167.472-126.592 297.84-126.592 7.088 0 13.088-0.064 18.72-0.064 13.28 0 24 0.368 39.84 2.688 15.488-18.784 102.224-101.504 172.816-113.008-0.032 0.064 0.064 0.064 0.368 0.064 0.944 0 3.68-0.336 5.344-0.336 11.344 0 20.496 9.12 20.496 20.464 0 2.88-0.656 5.6-1.68 8.064h0.064c-13.28 22.88-34.128 89.744-34.128 130.256 0 0.624-0.192 1.056-0.192 1.632 95.504 48.832 139.744 120.080 139.744 213.296z" />
+<glyph unicode="&#xe04b;" glyph-name="briefcase" d="M960.016 768.528h-255.6v62c0 52.944-43.056 96-96 96h-192.432c-52.944 0-96-43.056-96-96v-62h-255.968c-35.184 0-64-28.816-64-64v-224.256h-0.032v-64h0.032v-382.816c0-35.184 28.816-64 64-64h896c35.184 0 64 28.816 64 64v671.072c0 35.184-28.816 64-64 64zM383.984 830.528c0 17.664 14.336 32 32 32h192.432c17.664 0 32-14.336 32-32v-62h-256.432v62zM64.016 704.528h896v-224.256h-352.368v32.752c0 35.28-28.72 64-64 64h-63.744c-35.28 0-64-28.72-64-64v-32.752h-351.888v224.256zM543.696 351.872h-63.808v161.152h63.744l0.064-161.152zM64.016 33.472v382.816h351.872v-64.4c0-35.28 28.72-64 64-64h63.744c35.28 0 64 28.72 64 64v64.4h352.368v-382.816h-895.984z" />
+<glyph unicode="&#xe04c;" glyph-name="book-open" d="M952.080 958.448l-423.040-114.592c-10.752-2.88-34.096-2.848-44.816 0.16l-412.144 114.208c-36.784 10.128-72.416-16.4-72.416-54.272v-778.112c0-32.096 24.336-62.784 55.312-71.408l412.16-114.224c11.024-3.056 25.216-4.752 39.936-4.752 10.096 0 25.008 0.784 38.72 4.528l423.024 114.592c31.056 8.4 55.504 39.024 55.504 71.248v778.128c0.016 37.84-35.616 64.464-72.24 54.496zM480 3.056l-408.928 113.056c-3.088 0.848-7.408 6.496-7.408 9.712v768.032l403.472-111.536c3.904-1.088 8.288-1.936 12.864-2.656v-776.608zM960.336 125.824c0-3.152-5.184-8.656-8.256-9.504l-408.080-110.528v775.92c0.592 0.144 1.2 0.224 1.792 0.384l414.528 112.128v-768.4zM642 593.696c2.88 0 5.808 0.368 8.688 1.184l223.936 63.024c17.024 4.816 26.944 22.464 22.16 39.472s-22.56 26.88-39.472 22.16l-223.936-63.024c-17.024-4.816-26.944-22.464-22.16-39.472 3.968-14.128 16.816-23.344 30.784-23.344zM642 401.696c2.88 0 5.808 0.368 8.688 1.184l223.936 63.024c17.024 4.816 26.944 22.464 22.16 39.472s-22.56 26.88-39.472 22.16l-223.936-63.024c-17.024-4.816-26.944-22.464-22.16-39.456 3.968-14.128 16.816-23.36 30.784-23.36zM642 209.696c2.88 0 5.808 0.368 8.688 1.184l223.936 63.024c17.024 4.816 26.944 22.464 22.16 39.472s-22.56 26.88-39.472 22.16l-223.936-63.024c-17.024-4.816-26.944-22.464-22.16-39.472 3.968-14.112 16.816-23.344 30.784-23.344zM394.624 656.512l-223.936 63.024c-16.912 4.72-34.688-5.152-39.472-22.16s5.12-34.656 22.16-39.472l223.936-63.024c2.88-0.816 5.808-1.184 8.688-1.184 13.968 0 26.816 9.216 30.784 23.344 4.784 16.992-5.12 34.656-22.16 39.472zM394.624 464.512l-223.936 63.024c-16.912 4.72-34.688-5.152-39.472-22.16s5.12-34.656 22.16-39.472l223.936-63.024c2.88-0.816 5.808-1.184 8.688-1.184 13.968 0 26.816 9.216 30.784 23.344 4.784 16.992-5.12 34.656-22.16 39.472zM394.624 272.512l-223.936 63.024c-16.912 4.72-34.688-5.152-39.472-22.16s5.12-34.656 22.16-39.472l223.936-63.024c2.88-0.816 5.808-1.184 8.688-1.184 13.968 0 26.816 9.216 30.784 23.344 4.784 17.008-5.12 34.656-22.16 39.472z" />
+<glyph unicode="&#xe04d;" glyph-name="basket-loaded" d="M1015.664 676c-5.968 8.464-15.664 13.504-26 13.504h-99.744l-205.136 174.832c-24.976 24.976-65.52 25.008-90.496 0l-201.648-174.832h-82.096l-51.408 177.28c-20.16 69.808-68.064 77.344-87.712 77.344h-137.088c-17.568 0-31.776-14.224-31.776-31.776s14.224-31.776 31.776-31.776h137.056c4.336 0 17.568 0 26.592-31.184l176.848-649.936c3.84-13.712 16.336-23.184 30.592-23.184h431.968c13.408 0 25.376 8.4 29.904 21.024l152.256 449.68c3.504 9.744 2.048 20.592-3.888 29.024zM639.536 819.072l152.032-129.584h-304.112l152.080 129.584zM815.024 239.808h-385.488l-101.152 386.128h616.096l-129.456-386.128zM752 111.872c-44.192 0-80-35.808-80-80s35.808-80 80-80 80 35.808 80 80-35.808 80-80 80zM464 111.872c-44.192 0-80-35.808-80-80s35.808-80 80-80 80 35.808 80 80-35.808 80-80 80z" />
+<glyph unicode="&#xe04e;" glyph-name="basket" d="M1015.664 676c-5.968 8.464-15.664 13.504-26 13.504h-679.136l-51.408 177.28c-20.16 69.808-68.064 77.344-87.712 77.344h-137.072c-17.568 0-31.776-14.224-31.776-31.776s14.224-31.776 31.776-31.776h137.056c4.336 0 17.568 0 26.592-31.184l176.848-649.936c3.84-13.712 16.336-23.184 30.592-23.184h431.968c13.408 0 25.376 8.4 29.904 21.024l152.256 449.68c3.504 9.744 2.048 20.592-3.888 29.024zM815.024 239.808h-385.488l-101.152 386.128h616.096l-129.456-386.128zM752 111.872c-44.192 0-80-35.808-80-80s35.808-80 80-80 80 35.808 80 80-35.808 80-80 80zM464 111.872c-44.192 0-80-35.808-80-80s35.808-80 80-80 80 35.808 80 80-35.808 80-80 80z" />
+<glyph unicode="&#xe04f;" glyph-name="bag" d="M864 801.296h-191.184v61.376c0 52.944-43.056 96-96 96h-127.632c-52.944 0-96-43.056-96-96v-61.376h-193.184c-35.344 0-64-28.656-64-64v-735.968c0-35.344 28.656-64 64-64h704c35.344 0 64 28.656 64 64v735.968c0 35.344-28.656 64-64 64zM417.184 862.672c0 17.664 14.336 32 32 32h127.632c17.664 0 32-14.336 32-32v-61.376h-191.632v61.376zM864 1.328h-704v735.968h193.184v-65.84c0 0-0.848-31.968 31.808-31.968 36 0 32.192 31.968 32.192 31.968v65.84h191.632v-65.84c0 0-2.128-32.128 31.872-32.128 32 0 32.128 32.128 32.128 32.128v65.84h191.184v-735.968z" />
+<glyph unicode="&#xe050;" glyph-name="action-undo" d="M990.064 17.664c-0.336 0-0.72 0-1.088 0.032-16.192 0.528-26.4 13.088-27.776 29.216-1.088 11.872-33.968 299.088-482.256 298.784v-183.664c0-12.368-7.12-23.664-18.336-28.944-11.088-5.312-24.432-3.68-33.968 4.224l-414.976 343.776c-7.44 6.096-11.712 15.184-11.68 24.784s4.336 18.688 11.776 24.752l414.96 340.56c9.568 7.808 22.784 9.312 33.936 4.096 11.152-5.312 18.288-16.56 18.288-28.912v-179.632c185.968-5.904 330.992-65.712 424.336-174.976 151.936-177.776 118.032-436.16 116.432-446.912-2.368-15.664-13.872-27.184-29.648-27.184zM446.944 410.192c0.032 0 0.064 0 0.064 0 320.224-0.192 442.592-108.32 512.464-203.808-10.224 76.496-40.064 168.72-105.008 244.032-86.336 100.096-225.44 152.848-407.536 152.848-17.68 0-32 14.32-32 32v143.776l-332.432-273.36 332.432-275.904v148.4c0 8.496 3.376 16.656 9.408 22.656 6 5.984 14.128 9.36 22.608 9.36z" />
+<glyph unicode="&#xe051;" glyph-name="action-redo" d="M33.936 17.664c0.336 0 0.72 0 1.088 0.032 16.192 0.528 26.4 13.088 27.776 29.216 1.088 11.872 32.976 299.088 481.248 298.784l1.008-183.664c0-12.368 7.12-23.664 18.336-28.944 11.088-5.312 24.432-3.68 33.968 4.224l414.976 343.776c7.44 6.096 11.712 15.184 11.68 24.784s-4.336 18.688-11.776 24.752l-414.96 340.56c-9.568 7.808-22.784 9.312-33.936 4.096-11.152-5.312-18.288-16.56-18.288-28.912l-1.008-179.632c-185.952-5.888-329.968-65.712-423.328-174.96-151.936-177.776-118.032-436.16-116.432-446.912 2.368-15.68 13.872-27.2 29.648-27.2zM577.056 410.192c-0.032 0-0.064 0-0.064 0-320.208-0.192-442.592-108.32-512.464-203.824 10.224 76.496 40.064 168.72 105.008 244.032 86.336 100.096 225.44 152.848 407.536 152.848 17.68 0 32 14.32 32 32v143.776l332.432-273.344-332.448-275.904v148.4c0 8.496-3.376 16.656-9.408 22.656-5.984 5.984-14.112 9.36-22.592 9.36z" />
+<glyph unicode="&#xe052;" glyph-name="wrench" d="M1006.368 744.064c-10.784 4.976-23.584 3.088-32.56-4.848l-161.312-144.896-145.632 149.408 144.192 166.528c7.84 9.056 9.744 21.536 4.864 32.512s-15.664 17.696-27.52 17.696h-8.688c-89.12 0-242.976-7.664-311.664-77.344l-13.856-13.76c-73.28-74.768-86.288-197.376-47.68-290.576l-369.28-376.896c-49.792-50.48-49.792-132.32 0-182.816l45.072-45.696c24.896-25.232 57.536-37.856 90.176-37.856 32.624 0 65.264 12.624 90.144 37.856l374.72 377.728c35.44-19.152 84-31.664 124.784-31.664 65.376 0 127.344 26.368 174.528 74.256l13.664 13.84c74.608 75.648 73.456 237.296 73.792 308.416 0.032 12.096-6.928 23.088-17.744 28.112zM905.664 450.992l-11.872-13.872c-35.744-36.272-82.496-53.648-131.664-53.648-24.32 0-57.088 4.576-79.216 13.792-20 8.304-38.576 20.288-55.2 35.424l-410.176-413.616c-12.032-12.224-28.032-18.944-45.056-18.944s-33.040 6.72-45.088 18.944l-45.056 45.68c-24.864 25.216-24.864 66.224-0.016 91.44l400.784 408.864c-13.44 19.568-22.592 40.896-28.048 62.976h-0.016c-15.424 62.384-6.432 148.608 42.016 198.048l13.792 13.92c41.552 42.16 149.456 54.624 209.2 58.304l-117.36-135.536c-10.496-12.128-9.968-30.4 1.216-41.872l185.536-190.336c11.248-11.584 29.44-12.256 41.552-1.52l130.608 117.632c-3.888-63.36-16.192-155.376-55.936-195.68z" />
+<glyph unicode="&#xe053;" glyph-name="umbrella" d="M1024.32 450.416c0-17.664-14.288-31.984-31.968-31.984h-448.88v-324.192c0-87.152-70.912-158.080-158.096-158.080s-158.112 70.928-158.112 158.080c0 17.664 14.32 31.984 31.984 31.984s31.984-14.32 31.984-31.984c0-51.904 42.224-94.128 94.16-94.128 51.92 0 94.16 42.224 94.16 94.128v324.192h-447.888c-17.664 0-31.984 14.336-31.984 31.984 0 247.296 180.912 404.112 479.856 414.48v62.976c0 17.664 14.32 31.968 31.984 31.968 17.68 0 31.968-14.32 31.968-31.968v-62.976c299.008-10.352 480.832-167.184 480.832-414.48zM959.152 482.384c-15.776 200.528-178.896 319.12-447.648 319.12s-430.896-118.592-446.656-319.104h894.304z" />
+<glyph unicode="&#xe054;" glyph-name="trash" d="M896.8 800.976h-225.28v87.264c0 40.528-33.008 72.496-73.536 72.496h-171.984c-40.528 0-73.52-31.968-73.52-72.496v-87.264h-225.28c-17.664 0-32-14.336-32-32s14.336-32 32-32h44.016l74.24-739.92c3.104-34.624 32.608-61.776 67.136-61.776h398.8c34.528 0 64 27.152 67.088 61.472l74.304 740.24h44.016c17.68 0 32 14.336 32 32s-14.32 31.984-32 31.984zM416.48 888.24c0 5.232 4.272 9.504 9.52 9.504h171.984c5.248 0 9.536-4.272 9.536-9.504v-87.264h-191.040v87.264zM714.768 2.8c-0.16-1.776-2.256-3.536-3.376-3.536h-398.8c-1.12 0-3.232 1.744-3.424 3.84l-73.632 733.856h552.912l-73.68-734.16z" />
+<glyph unicode="&#xe055;" glyph-name="tag" d="M1023.984 543.728v338.368c0 42.944-34.944 77.904-77.872 77.904h-345.376c-21.68 0-54.496 0-75.92-21.44l-505.936-505.952c-12.16-12.16-18.88-28.304-18.88-45.488 0-17.216 6.688-33.376 18.848-45.536l386.8-386.72c12.112-12.176 28.272-18.864 45.456-18.864s33.36 6.688 45.488 18.848l505.952 505.968c21.696 21.648 21.568 52.816 21.44 82.912zM957.296 506.064l-506.416-505.936-386.752 387.216 505.392 505.504c5.088 3.152 23.408 3.152 30.992 3.152l14.4-0.048 331.2 0.048c7.664 0 13.872-6.24 13.872-13.904v-338.624c0.064-12.176 0.128-32.544-2.688-37.408zM768.016 832c-70.688 0-128-57.312-128-128s57.312-128 128-128 128 57.312 128 128-57.312 128-128 128zM768.016 640c-35.344 0-64 28.656-64 64s28.656 64 64 64 64-28.656 64-64-28.656-64-64-64z" />
+<glyph unicode="&#xe056;" glyph-name="support" d="M512 960c-282.768 0-512-229.232-512-512s229.232-512 512-512 512 229.232 512 512-229.232 512-512 512zM640 877.024c144.224-42.992 257.648-156.8 300.704-301.024h-207.568c-22.416 38.528-54.592 70.672-93.136 93.056v207.968zM703.632 447.792c0-105.936-85.792-191.808-191.632-191.808s-191.632 85.872-191.632 191.808 85.808 191.824 191.632 191.824 191.632-85.888 191.632-191.824zM448 891.072c20.912 2.992 42.256 4.624 64 4.624 21.728 0 43.088-1.632 64-4.624v-195.808c-20.48 5.296-41.856 8.4-64 8.4s-43.504-3.104-64-8.4v195.808zM384 877.024v-207.968c-38.56-22.384-70.72-54.544-93.136-93.056h-207.568c43.040 144.224 156.48 258.032 300.704 301.024zM64.304 447.84c0 21.824 1.856 43.168 4.88 64.16h195.392c-5.312-20.512-8.24-41.984-8.24-64.176 0-22.064 2.912-43.424 8.16-63.824h-195.36c-2.976 20.88-4.832 42.144-4.832 63.84zM384 18.672c-144.336 43.008-257.808 156.976-300.8 301.328h207.472c22.432-38.656 54.656-70.944 93.328-93.392v-207.936zM576 4.624c-20.912-2.992-42.272-4.624-64-4.624-21.744 0-43.088 1.648-64 4.624v195.776c20.496-5.296 41.856-8.4 64-8.4s43.52 3.104 64 8.4v-195.776zM640 18.672v207.936c38.656 22.448 70.896 54.736 93.312 93.392h207.472c-42.992-144.336-156.464-258.32-300.784-301.328zM759.504 384c5.248 20.4 8.16 41.76 8.16 63.824 0 22.192-2.928 43.664-8.256 64.176h195.408c3.008-20.992 4.88-42.336 4.88-64.16 0-21.696-1.84-42.976-4.832-63.84h-195.36z" />
+<glyph unicode="&#xe057;" glyph-name="size-fullscreen" d="M685.904 576.816l275.264 273.568-0.896-155.072c-0.288-12.928 9.968-24.176 22.912-23.888l16.416 0.016c12.944 0.304 23.648 8 23.92 20.928l0.672 231.008c0 0.224-0.88 0.4-0.88 0.624l1.264 11.712c0.128 6.496-1.392 12.288-5.584 16.432-4.144 4.176-9.952 6.72-16.4 6.544l-11.696-0.272c-0.224 0-0.4-0.080-0.64-0.112l-229.488 1.008c-12.928-0.288-23.632-10.976-23.92-23.92l-0.032-16.416c1.968-15.248 13.952-24.16 26.88-23.872l151.248-0.4-274.288-272.624c-12.496-12.496-12.496-32.752 0-45.264 12.496-12.48 32.752-12.48 45.248 0zM339.088 319.184l-275.264-272.72 0.88 154.224c0.304 12.944-9.968 24.192-22.896 23.904l-17.424-0.032c-12.96-0.32-23.648-8-23.92-20.944l-0.672-231.008c0-0.224 0.88-0.368 0.88-0.624l-1.264-11.68c-0.144-6.496 1.376-12.32 5.584-16.432 4.128-4.192 9.952-6.72 16.384-6.56l11.712 0.288c0.224 0 0.384 0.096 0.64 0.096l230.496-1.008c12.928 0.32 23.616 11.008 23.92 23.936l0.032 16.432c-1.968 15.216-13.952 24.16-26.88 23.872l-151.248 0.4 274.272 272.592c12.496 12.496 12.496 32.752 0 45.248s-32.736 12.512-45.232 0.016zM1024.208-27.376l-0.672 231.008c-0.288 12.944-10.992 20.624-23.92 20.944l-16.416 0.032c-12.944 0.288-23.184-10.976-22.912-23.904l0.896-155.072-275.28 273.552c-12.496 12.496-32.752 12.496-45.248 0s-12.496-32.752 0-45.248l274.272-272.592-151.232-0.4c-12.928 0.288-24.912-8.656-26.88-23.872l0.032-16.432c0.304-12.944 11.008-23.632 23.92-23.936l229.504 1.008c0.24 0 0.416-0.096 0.64-0.096l11.696-0.288c6.448-0.16 12.272 2.368 16.4 6.56 4.192 4.128 5.696 9.936 5.584 16.432l-1.264 11.68c0 0.256 0.88 0.4 0.88 0.624zM110.048 894.672l151.264 0.4c12.928-0.288 24.912 8.64 26.88 23.872l-0.032 16.432c-0.32 12.944-11.008 23.648-23.92 23.92l-230.512-0.992c-0.256 0.032-0.416 0.112-0.64 0.112l-11.712 0.272c-6.432 0.176-12.272-2.368-16.384-6.544-4.208-4.144-5.728-9.936-5.584-16.432l1.264-11.712c0-0.224-0.88-0.384-0.88-0.624l0.672-231.008c0.288-12.928 10.976-20.624 23.92-20.928l17.424-0.016c12.928-0.288 23.184 10.96 22.896 23.888l-0.88 154.224 275.264-272.72c12.48-12.496 32.752-12.496 45.248 0s12.496 32.768 0 45.264l-274.288 272.592z" />
+<glyph unicode="&#xe058;" glyph-name="size-actual" d="M383.2 613.2l-0.672 231.008c-0.288 12.928-10.992 20.624-23.92 20.928l-16.416 0.016c-12.944 0.288-23.184-10.976-22.912-23.888l0.896-155.248-266.272 263.728c-12.496 12.496-32.752 12.496-45.248 0s-12.496-32.752 0-45.248l265.12-262.608-151.088-0.4c-12.928 0.288-24.912-8.64-26.88-23.872l0.032-16.416c0.32-12.944 11.008-23.648 23.92-23.936l229.504 1.008c0.256-0.016 0.416-0.112 0.64-0.112l11.696-0.272c6.448-0.176 12.272 2.352 16.4 6.544 4.208 4.144 5.712 9.952 5.584 16.432l-1.264 11.712c0.016 0.224 0.88 0.4 0.88 0.624zM645.984 584.432c4.128-4.176 9.952-6.72 16.4-6.544l11.696 0.272c0.224 0 0.384 0.080 0.64 0.112l229.504-1.008c12.928 0.288 23.616 10.992 23.92 23.936l0.032 16.416c-1.968 15.248-13.952 24.16-26.88 23.872l-151.088 0.4 265.12 262.608c12.496 12.496 12.496 32.752 0 45.248s-32.752 12.496-45.248 0l-266.256-263.712 0.88 155.232c0.304 12.928-9.952 24.176-22.896 23.888l-16.416-0.016c-12.96-0.304-23.648-8-23.92-20.928l-0.672-231.008c0-0.224 0.88-0.384 0.88-0.624l-1.264-11.712c-0.144-6.496 1.36-12.288 5.568-16.432zM378.016 312.576c-4.144 4.176-9.952 6.704-16.4 6.544l-11.696-0.288c-0.224 0-0.384-0.096-0.64-0.112l-229.52 1.008c-12.928-0.304-23.616-10.992-23.92-23.92l-0.032-16.432c1.968-15.216 13.952-24.16 26.88-23.856l151.248-0.4-265.28-263.616c-12.496-12.496-12.496-32.752 0-45.248s32.752-12.496 45.248 0l266.272 264.576-0.896-156.080c-0.288-12.944 9.968-24.192 22.912-23.904l16.416 0.032c12.944 0.32 23.648 8 23.92 20.928l0.672 231.008c0 0.224-0.88 0.368-0.88 0.608l1.264 12.704c0.144 6.496-1.36 12.288-5.568 16.448zM750.064 255.104l151.248 0.4c12.928-0.304 24.912 8.64 26.88 23.856l-0.032 16.432c-0.32 12.944-11.008 23.632-23.92 23.92h-229.504c-0.256 0.016-0.416 0.112-0.64 0.112l-13.696 0.272c-6.448 0.176-12.288-4.352-16.4-8.544-4.208-4.144-5.712-9.936-5.584-16.432l1.264-11.696c0-0.24-0.88-0.384-0.88-0.608l0.672-231.008c0.288-12.928 10.976-20.608 23.92-20.928l17.424-0.032c12.944-0.288 23.184 10.976 22.896 23.904l-0.88 154.528 267.264-263.024c12.496-12.496 32.752-12.496 45.248 0s12.496 32.752 0 45.248l-265.28 263.6z" />
+<glyph unicode="&#xe059;" glyph-name="shuffle" d="M402.304 454.144l39.264 55.248-134.304 183.28h-304.528v-64h271.488l128.080-174.528zM918.784 628.672l-77.536-69.536c-9.344-8.944-12.368-23.44-3.024-32.368l5.472-8.064c9.376-8.944 24.496-8.944 33.824 0l127.744 115.504c0.176 0.16 0.384 0.192 0.544 0.336l8.464 8.096c4.672 4.496 7.008 10.368 6.976 16.288 0.032 5.872-2.304 11.776-6.976 16.224l-8.464 8.096c-0.16 0.16-0.336 0.224-0.544 0.368l-129.728 118.432c-9.36 8.944-24.464 8.944-33.84 0l-5.472-8.064c-9.36-8.944-6.32-23.408 3.024-32.336l76.048-68.976h-231.76l-409.312-576h-271.488v-64h304.512l409.328 576h202.208zM1005.808 107.232c-0.16 0.16-0.336 0.224-0.544 0.368l-129.728 118.432c-9.36 8.944-24.464 8.944-33.84 0l-5.472-8.064c-9.36-8.944-6.32-23.408 3.024-32.336l76.336-69.232-199.008 0.272-114.432 177.008-39.28-55.248 120.656-185.76 234.944-0.288-77.216-69.248c-9.344-8.944-12.368-23.44-3.024-32.368l5.472-8.064c9.376-8.944 24.496-8.944 33.824 0l127.744 115.504c0.176 0.16 0.384 0.192 0.544 0.336l8.464 8.096c4.672 4.496 7.008 10.368 6.976 16.288 0.032 5.872-2.304 11.776-6.976 16.224l-8.464 8.080z" />
+<glyph unicode="&#xe05a;" glyph-name="share-alt" d="M901.84 10.624h-832v640h257.6l64.72 62.336-1.664 1.664h-320.656c-35.344 0-64-28.656-64-64v-640c0-35.344 28.656-64 64-64h832c35.344 0 64 28.656 64 64v500.672l-64-61.088v-439.584zM270.128 266.624h64.48c44.864 254.496 266.544 448 533.888 448 11.216 0 21.856-0.096 32.624-0.176l-117.248-117.232c-12.464-12.496-12.464-32.752 0-45.248 6.256-6.256 14.464-9.376 22.656-9.376s16.336 3.12 22.592 9.376l189.024 194-189.024 194.032c-12.464 12.496-32.72 12.496-45.248 0-12.464-12.496-12.464-32.752 0-45.248l116.176-116.16c-10.032 0.016-19.968 0.048-30.208 0.048-303.056 0-553.568-221.952-599.712-512.016z" />
+<glyph unicode="&#xe05b;" glyph-name="share" d="M864 256c-52.688 0-99.296-25.584-128.432-64.88l-421.36 214.72c3.664 13.456 5.792 27.536 5.792 42.16 0 18.304-3.216 35.808-8.88 52.176l423.76 205.616c29.088-39.808 76.016-65.792 129.12-65.792 88.368 0 160 71.648 160 160 0 88.368-71.632 160-160 160s-160-71.632-160-160c0-12.432 1.568-24.464 4.24-36.080l-429.84-208.576c-29.28 32.272-71.392 52.656-118.4 52.656-88.368 0-160-71.632-160-160 0-88.352 71.632-160 160-160 50.896 0 96.128 23.824 125.424 60.864l423.104-215.632c-2.864-11.968-4.528-24.384-4.528-37.232 0-88.368 71.632-160 160-160s160 71.632 160 160-71.632 160-160 160zM864 896c53.008 0 96-42.992 96-96s-42.992-96-96-96-96 42.992-96 96 42.992 96 96 96zM160 352c-53.024 0-96 42.992-96 96s42.976 96 96 96c53.008 0 96-42.992 96-96s-42.992-96-96-96zM864 0c-53.008 0-96 42.992-96 96s42.992 96 96 96 96-42.992 96-96-42.992-96-96-96z" />
+<glyph unicode="&#xe05c;" glyph-name="rocket" d="M209.68 76.736c-20.112-41.808-32.8-69.664-144.688-73.728 3.216 107.968 23.792 119.552 64.992 140.080 17.296 8.624 38.832 19.344 62.112 37.248l-38.96 49.744c-18.4-14.128-35.328-21.568-51.696-29.712-68.64-34.224-100.992-67.936-100.992-228.656l0.544-32.704 31.456 0.704c169.632 0 201.328 38.32 233.104 104.32 6.96 14.464 10.832 24.24 22.56 43.728l-47.456 43.104c-14.224-19.408-23.104-37.872-30.976-54.128zM704.96 771.344c-70.768 0-128.352-57.584-128.352-128.336 0-70.784 57.6-128.352 128.352-128.352s128.336 57.584 128.336 128.352c0 70.752-57.6 128.336-128.336 128.336zM704.96 578.928c-35.328 0-64.080 28.752-64.080 64.080 0 35.312 28.752 64.080 64.080 64.080s64.080-28.768 64.080-64.080c-0.016-35.344-28.752-64.080-64.080-64.080zM1023.776 930.688c-0.976 15.968-13.632 28.768-29.6 29.952 0 0-179.088 13.056-351.376-51.28-62.944-23.504-114.752-60.736-163.104-117.136-40.32-47.024-80.384-132.032-115.744-202.608-13.664-27.248-26.72-53.312-37.792-73.216h-178.016c-9.152 0-17.856-3.92-23.936-10.768l-117.296-127.136c-7.504-8.464-9.984-20.256-6.528-31.008 3.44-10.784 12.32-18.944 23.328-21.44l190.944-43.664c13.008-16.064 34.688-40.096 69.376-78.592l72.336-80.192 38.944-164.72c2.56-10.848 10.608-19.6 21.232-23.056 3.232-1.024 6.576-1.568 9.904-1.568 7.536 0 14.944 2.656 20.832 7.712l118.56 117.936c7.088 6.064 11.184 14.944 11.184 24.288v165.12c15.936 9.904 44.192 25.152 70.784 40.032 72.464 40.496 180.624 90.912 225.472 130.784 63.152 56.128 86.16 97.28 108.752 158.112 53.712 144.688 42.288 344.032 41.744 352.448zM922 600.528c-19.712-53.072-37.568-84.832-91.248-132.56-39.664-35.232-148.128-85.824-214.192-122.768-49.312-27.568-78.848-43.664-91.792-54.256-7.44-6.064-11.76-15.152-11.76-24.784v-167.248l-67.52-74.192-28.752 121.6c-1.232 5.216-3.776 10.064-7.392 14.064-58.848 65.216-147.744 163.808-154.56 171.632-4.448 5.408-10.608 9.248-17.568 10.848l-146.592 33.536 71.904 76h182.032c11.12 0 21.456 5.776 27.264 15.248 14.080 22.928 30.416 55.536 49.344 93.296 32.048 63.952 71.92 148.544 107.12 189.632 41.584 48.528 83.824 79.008 136.896 98.848 118.096 44.128 239.968 48.768 295.68 48.352 1.040-59.008-1.184-195.824-38.864-297.248z" />
+<glyph unicode="&#xe05d;" glyph-name="question" d="M512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512.016 229.216 512.016 512 0 282.768-229.232 512-512.016 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448.016-200.976 448.016-448-200.992-449.008-448.016-449.008zM464.944 159.52h80.512v81.248h-80.512v-81.248zM511.056 736.464c-46.88 0-85.504-12.64-115.84-37.888-30.336-25.264-45.088-75.856-44.336-117.776l1.184-2.336h73.44c0 25.008 8.336 60.944 25.008 73.84 16.656 12.88 36.848 19.328 60.56 19.328 27.328 0 48.336-7.424 63.072-22.272 14.72-14.848 22.064-36.080 22.064-63.664 0-23.184-5.44-42.976-16.368-59.376-10.96-16.4-29.328-39.84-55.088-70.32-26.576-23.968-42.992-43.232-49.232-57.808-6.256-14.592-9.504-40.768-9.744-78.512h76.96c0 23.68 1.504 41.136 4.496 52.336 2.976 11.184 11.504 23.824 25.568 37.888 30.224 29.152 54.496 57.664 72.88 85.552 18.336 27.856 27.52 58.592 27.52 92.192 0 46.88-14.176 83.408-42.576 109.568-28.416 26.176-68.272 39.248-119.568 39.248z" />
+<glyph unicode="&#xe05e;" glyph-name="pie-chart" d="M575.6 866.592c-17.664 0-32-14.336-32-32s14.336-32 32-32c226.448 0 384.4-165.472 384.4-391.904 0-226.464-184.224-410.688-410.672-410.688-226.432 0-391.92 163.6-391.92 390.064 0 17.664-14.336 32-32 32s-32-14.336-32-32c0-261.744 194.192-454.064 455.92-454.064s474.672 212.944 474.672 474.688c0 261.712-186.672 455.904-448.4 455.904zM480.256 511.744v416.256c0 17.664-14.336 32-32 32-249.248 0-448.256-199.008-448.256-448.256 0-17.664 14.336-32 32-32h416.256c17.664 0 32 14.336 32 32zM416.256 543.744h-350.944c15.456 188.496 162.448 335.488 350.944 350.944v-350.944z" />
+<glyph unicode="&#xe05f;" glyph-name="pencil" d="M964.256 910.336c-34.864 33.408-73.328 50.336-114.384 50.336-64.192 0-111.024-41.472-123.84-54.176-18.032-17.856-633.152-633.2-633.152-633.2-4.016-4.032-6.944-9.072-8.448-14.592-13.872-51.264-83.36-278.72-84.048-281.008-3.568-11.648-0.384-24.336 8.208-32.928 6.176-6.144 14.4-9.44 22.832-9.44 3.312 0 6.656 0.496 9.92 1.568 2.352 0.768 237.136 76.656 275.776 88.192 5.088 1.536 9.744 4.288 13.536 8.032 24.416 24.128 598.128 591.456 636.208 630.784 39.392 40.592 58.96 82.864 58.208 125.616-0.784 42.208-21.248 82.848-60.816 120.816zM715.84 804.16c16.304-3.952 54.752-16.864 94.016-56.48 39.68-40.032 50.416-85.792 52.416-96.208-125.824-125.168-415.456-411.728-529.632-524.672-10.544 24.56-27.584 54.144-54.992 81.76-33.472 33.728-67.536 52.784-93.808 63.504 112.992 113.008 408.080 408.224 532 532.096zM140.384 218.048c17.584-4.672 54.112-18.224 91.344-55.76 28.672-28.912 42.208-60.8 48.288-80.24-44.48-14.304-141.872-47.92-203.76-67.872 18.336 60.336 49.312 154.304 64.128 203.872zM920.416 709.632c-1.312-1.344-3.472-3.536-6.064-6.16-10.112 26.048-27.856 59.52-58.576 90.496-31.392 31.648-63.232 50.32-88.752 61.36 2.176 2.16 3.856 3.856 4.512 4.496 3.664 3.616 36.896 35.376 78.32 35.376 23.84 0 47.248-10.88 69.616-32.32 26.512-25.424 40.176-50.512 40.624-74.592 0.432-24.576-12.912-51.040-39.68-78.656z" />
+<glyph unicode="&#xe060;" glyph-name="note" d="M799.344-0.288h-736v800h449.6l64.704 62.336-1.664 1.664h-512.64c-35.344 0-64-28.656-64-64v-800c0-35.344 28.656-64 64-64h736c35.344 0 64 28.656 64 64v468.656l-64-61.088v-407.568zM974.224 918.56c-28.88 27.68-60.752 41.712-94.752 41.712-53.216 0-92.032-34.368-102.592-44.896-14.976-14.784-439.168-438.352-439.168-438.352-3.328-3.392-5.76-7.536-7.008-12.144-11.488-42.448-69.072-230.992-69.648-232.864-2.976-9.664-0.32-20.192 6.8-27.216 5.104-5.12 11.92-7.84 18.912-7.84 2.752 0 5.52 0.4 8.24 1.248 1.952 0.656 196.496 63.568 228.512 73.12 4.224 1.248 8.048 3.536 11.216 6.624 20.208 19.936 410.112 403.792 441.664 436.384 32.624 33.664 48.848 68.656 48.224 104.096-0.592 35.008-17.616 68.704-50.4 100.128zM930.432 758.88c-17.808-18.368-157.248-156.16-414.448-409.536l-19.68-19.408c-29.488-9.12-100.096-31.808-153.472-49.024 17.184 56.752 37.808 125.312 47.008 157.744 54.96 54.88 418.384 417.744 432.192 431.376 2.688 2.688 27.216 26.256 57.44 26.256 17.152 0 33.68-7.824 50.464-23.92 20.064-19.248 30.4-37.744 30.688-55.024 0.32-17.792-9.84-37.456-30.192-58.464z" />
+<glyph unicode="&#xe061;" glyph-name="music-tone-alt" d="M991.728 254.592c0.016 0.56 0.16 1.072 0.16 1.632v667.024c0.384 3.504 0.256 7.12-0.576 10.752-2.736 14.912-15.728 26.224-31.424 26.224-5.888 0-11.344-1.696-16.080-4.48l-597.872-155.648c-10.768-2.672-18.752-10.72-22.032-20.672-2.48-4.544-4-9.664-4-15.2v-572.544c-30.464 20.384-69.408 32.656-111.872 32.656-97.536 0-176.64-64.608-176.64-144.272 0-79.68 79.104-144.304 176.64-144.304 97.568 0 176.608 64.608 176.608 144.304 0 4.064-0.336 8.064-0.736 12.048 0 0.032 0 0.064 0 0.096v651.648l544 141.6v-533.76c-30.448 20.384-69.408 32.656-111.872 32.656-97.536 0-176.64-64.624-176.64-144.272 0-79.68 79.104-144.304 176.64-144.304 97.568 0 176.608 64.608 176.608 144.304-0.016 4.912-0.32 9.744-0.912 14.512zM208.704 0.048c-66.56 0-112.96 42.192-112.96 80 0 37.824 46.384 79.952 112.96 79.952 59.232 0 102.4-33.392 111.184-67.408v-0.368c0-3.232 0.624-6.288 1.52-9.216 0.064-0.992 0.224-1.968 0.224-2.96 0-37.808-46.4-80-112.928-80zM815.696 160.048c-65.968 0-111.952 42.176-111.952 80s45.984 79.952 111.952 79.952c65.952 0 111.936-42.128 111.936-79.952s-45.968-80-111.936-80z" />
+<glyph unicode="&#xe062;" glyph-name="music-tone" d="M852.608 636.704l-312.912 312.912c-9.92 9.92-24.672 11.84-36.608 6.016-12.544-4.336-21.6-16.112-21.6-30.128v-708.4c-33.92 25.12-78.432 40.528-127.376 40.528-106.064 0-192.112-71.776-192.112-160.288 0-88.544 86.048-160.336 192.112-160.336 106.112 0 192.080 71.776 192.080 160.336 0 3.92-0.368 7.76-0.704 11.632v744.336l261.872-261.856c12.48-12.496 32.752-12.496 45.248 0s12.496 32.768 0 45.248zM353.376 1.424c-75.648 0-128.352 50.544-128.352 95.872s52.72 95.824 128.352 95.824c74.032 0 126-48.4 128.128-92.992v-5.68c-2.144-44.576-54.096-93.024-128.128-93.024z" />
+<glyph unicode="&#xe063;" glyph-name="microphone" d="M510.88 256h7.6c88.96 0 153.52 65.6 153.52 155.968v381.408c0 93.44-67.44 166.624-153.536 166.624h-7.584c-87.616 0-158.88-74.752-158.88-166.624v-381.408c0-88.912 68.304-155.968 158.88-155.968zM416 793.376c0 56.592 42.56 102.624 94.88 102.624h7.6c51.024 0 89.52-44.128 89.52-102.624v-381.408c0-54.992-35.968-91.968-89.536-91.968h-7.584c-55.872 0-94.88 37.808-94.88 91.968v381.408zM800 608c-17.68 0-32-14.336-32-32v-133.072c0-190.4-67.968-282.928-207.744-282.928h-95.136c-182.8 0-209.12 153.84-209.12 282.928v133.072c0 17.664-14.336 32-32 32s-32-14.336-32-32v-133.072c0-220.496 91.888-346.928 273.12-346.928h14.88v-96h-160c-17.664 0-32-14.336-32-32s14.336-32 32-32h384c17.664 0 32 14.336 32 32s-14.336 32-32 32h-160v96h16.256c123.968 0 271.744 60.192 271.744 346.928v133.072c0 17.664-14.32 32-32 32z" />
+<glyph unicode="&#xe064;" glyph-name="loop" d="M960 858.16h-896c-35.344 0-64-28.656-64-64v-576c0-35.36 28.656-64 64-64h160c20.496 0 32 26.32 32 31.984v0.016c0 5.824-10.88 32.416-32 32.416h-120.96c-21.376 0-38.72 17.344-38.72 38.72v496.704c0 21.392 17.328 38.72 38.72 38.72l818.272 1.008c21.376 0 38.72-17.328 38.72-38.72v-497.696c0-21.376-17.344-38.72-38.72-38.72h-403.168l75.984 68.912c9.344 8.944 12.368 23.408 3.024 32.336l-5.472 8.064c-9.376 8.944-24.496 8.944-33.84 0l-129.728-118.432c-0.192-0.16-0.368-0.224-0.528-0.368l-8.48-8.096c-4.672-4.432-7.008-10.336-6.976-16.224-0.032-5.904 2.288-11.776 6.976-16.288l8.48-8.096c0.16-0.16 0.368-0.192 0.528-0.336l127.728-115.504c9.344-8.944 24.464-8.944 33.84 0l5.472 8.064c9.344 8.944 6.32 23.44-3.024 32.368l-77.136 69.168h445.008c35.344 0 64 28.64 64 64v576c0 35.344-28.656 64-64 64z" />
+<glyph unicode="&#xe065;" glyph-name="logout" d="M116.832 416.336h554.448c17.696 0 32 14.336 32 32s-14.304 32-32 32h-552.448l115.76 115.76c12.496 12.496 12.496 32.752 0 45.248s-32.752 12.496-45.248 0l-189.008-194 189.008-194c6.256-6.256 14.432-9.376 22.624-9.376s16.368 3.12 22.624 9.376c12.496 12.496 12.496 32.752 0 45.248l-117.76 117.744zM959.664 960h-544c-35.36 0-64-28.656-64-64v-288h64.416v248.976c0 21.376 17.344 38.72 38.72 38.72h464.72c21.392 0 38.72-17.344 38.72-38.72l1.008-818.288c0-21.376-17.328-38.72-38.72-38.72h-465.712c-21.376 0-38.72 17.344-38.72 38.72v250.368l-64.416-0.080v-288.976c0-35.344 28.64-64 64-64h543.984c35.36 0 64.016 28.656 64.016 64v896c-0.016 35.344-28.672 64-64.016 64z" />
+<glyph unicode="&#xe066;" glyph-name="login" d="M532.528 298.592c-12.512-12.496-12.512-32.752 0-45.248 6.256-6.256 14.432-9.376 22.624-9.376s16.368 3.12 22.624 9.376l189.008 194-189.008 194.016c-12.496 12.496-32.752 12.496-45.248 0-12.512-12.496-12.512-32.752 0-45.248l115.744-115.76h-616.432c-17.68 0-32-14.336-32-32s14.32-32 32-32h618.448l-117.76-117.76zM960.16 960h-576c-35.36 0-64.016-28.656-64.016-64v-288h64.432v248.976c0 21.376 17.344 38.72 38.72 38.72h496.704c21.408 0 38.72-17.344 38.72-38.72l1.008-818.288c0-21.376-17.312-38.72-38.72-38.72h-497.696c-21.376 0-38.72 17.344-38.72 38.72v250.368l-64.432-0.080v-288.976c0-35.344 28.656-64 64.016-64h576c35.344 0 64 28.656 64 64v896c-0.016 35.344-28.672 64-64.016 64z" />
+<glyph unicode="&#xe067;" glyph-name="list" d="M96 512h-64c-17.664 0-32-14.336-32-32v-64c0-17.664 14.336-32 32-32h64c17.664 0 32 14.336 32 32v64c0 17.664-14.336 32-32 32zM992 480h-672c-17.664 0-32-14.336-32-32s14.336-32 32-32h672c17.664 0 32 14.336 32 32s-14.336 32-32 32zM96 256h-64c-17.664 0-32-14.336-32-32v-64c0-17.664 14.336-32 32-32h64c17.664 0 32 14.336 32 32v64c0 17.664-14.336 32-32 32zM992 224h-672c-17.664 0-32-14.336-32-32s14.336-32 32-32h672c17.664 0 32 14.336 32 32s-14.336 32-32 32zM96 768h-64c-17.664 0-32-14.336-32-32v-64c0-17.664 14.336-32 32-32h64c17.664 0 32 14.336 32 32v64c0 17.664-14.336 32-32 32zM320 672h672c17.664 0 32 14.336 32 32s-14.336 32-32 32h-672c-17.664 0-32-14.336-32-32s14.336-32 32-32z" />
+<glyph unicode="&#xe068;" glyph-name="like" d="M608.544-63.744c-290.832 0-293.072 12.064-329.088 39.184-19.104 14.368-55.152 24.32-186.816 32.896-9.552 0.624-18.64 4.288-24.736 11.68-2.8 3.408-68.592 99.36-68.592 253.040 0 151.44 47.088 220.464 49.104 223.664 5.84 9.36 16.096 15.040 27.12 15.040 108.112 0 257.984 138 358.736 378.896 17.424 41.664 21.024 69.072 85.024 69.072 36.4 0 77.2-26.064 97.344-59.504 41.328-68.32 20.336-215.056 0.928-293.472 66 0.528 185.472 1.424 242.32 1.424 79.072 0 131.408-47.152 132.992-116.080 0.528-22.752-2.464-51.808-9.040-66.848 17.408-17.36 39.856-43.536 40.832-77.248 1.216-43.52-27.28-76.656-45.472-95.664 4.176-12.656 12.528-29.44 11.712-49.504-2-49.344-40.096-81.136-63.824-97.728 1.968-13.504 3.504-38.976-0.832-58.672-17.12-78.608-132.4-110.176-317.712-110.176zM109.616 73.232c114.688-9.488 176-22.336 208.336-46.672 25.024-18.848 21.168-26.32 290.592-26.32 82.176 0 242.896 3.424 255.216 59.84 4.896 22.56-18.896 44.736-18.976 44.912-6.496 16.032 0.736 34.848 16.576 41.776 0.256 0.128 64.144 23.008 65.6 58.72 0.96 22.832-14.72 36.544-15.072 37.12-9.328 14.464-5.92 34.304 8.224 44.16 0.16 0.128 41.552 25.216 40.544 59.424-0.784 27.168-36.576 46.288-37.664 46.928-8 4.576-13.824 12.496-15.648 21.552-1.792 9.040 0.224 18.528 5.84 25.872 0 0 16.272 25.856 15.68 50.112-1.168 51.92-57.008 53.552-68.992 53.552-80.72 0-288.032-0.816-288.032-0.816-11.184-0.048-20.864 5.232-26.88 14.176-6 8.944-6.448 20.048-2.928 30.224 31.264 90.032 48.72 231.28 19.728 279.536-8.544 14.224-10.496 28.432-42.496 28.432-4.432 0-14.992-3.504-26-29.744-106.928-255.84-266.64-403.824-397.456-417.168-11.28-25.728-32.496-79.040-32.496-175.776 0-98.736 31.28-175.12 46.304-199.84z" />
+<glyph unicode="&#xe069;" glyph-name="home" d="M1016.704 446.64l-480.368 503.168c-6.032 6.304-14.368 9.84-23.088 9.84-8.704 0-17.040-3.552-23.088-9.84l-482.848-503.152c-12.24-12.752-11.808-32.992 0.944-45.248 12.752-12.224 32.992-11.872 45.248 0.944l43.008 44.832v-478.832c0-17.68 14.336-32 32-32h223.552c17.632 0 31.936 14.256 32 31.904l1.008 319.664h254.992v-319.568c0-17.68 14.32-32 32-32h223.472c17.68 0 32 14.32 32 32v478.992l42.992-45.040c6.288-6.528 14.688-9.84 23.088-9.84 7.968 0 15.968 2.944 22.16 8.944 12.736 12.224 13.152 32.48 0.928 45.232zM863.536 505.184v-504.832h-159.472v319.552c0 17.68-14.32 32-32 32h-318.88c-17.632 0-31.936-14.256-32-31.904l-1.008-319.664h-159.664v504.848c0 2.64-0.416 5.168-1.008 7.632l353.76 368.624 351.424-368.208c-0.688-2.592-1.152-5.264-1.152-8.048z" />
+<glyph unicode="&#xe06a;" glyph-name="grid" d="M960-64h-320c-35.344 0-64 28.656-64 64v320c0 35.344 28.656 64 64 64h320c35.344 0 64-28.656 64-64v-320c0-35.344-28.656-64-64-64zM960 320h-320v-320h320v320zM960 512h-320c-35.344 0-64 28.656-64 64v320c0 35.344 28.656 64 64 64h320c35.344 0 64-28.656 64-64v-320c0-35.344-28.656-64-64-64zM960 896h-320v-320h320v320zM384-64h-320c-35.344 0-64 28.656-64 64v320c0 35.344 28.656 64 64 64h320c35.344 0 64-28.656 64-64v-320c0-35.344-28.656-64-64-64zM384 320h-320v-320h320v320zM384 512h-320c-35.344 0-64 28.656-64 64v320c0 35.344 28.656 64 64 64h320c35.344 0 64-28.656 64-64v-320c0-35.344-28.656-64-64-64zM384 896h-320v-320h320v320z" />
+<glyph unicode="&#xe06b;" glyph-name="graph" d="M944 736c-44.192 0-80-35.824-80-80 0-9.072 1.84-17.632 4.608-25.76l-195.008-167.92c-13.68 10.896-30.752 17.68-49.6 17.68-21.744 0-41.408-8.736-55.808-22.816l-152.752 76.48c-2.976 41.488-37.2 74.336-79.44 74.336-44.176 0-80-35.824-80-80 0-12.096 2.88-23.44 7.68-33.712l-155.744-179.584c-8.736 3.264-18.064 5.296-27.936 5.296-44.176 0-80-35.824-80-80s35.824-80 80-80 80 35.824 80 80c0 10.64-2.176 20.768-5.952 30.048l158.272 181.92c7.536-2.336 15.376-3.968 23.68-3.968 23.28 0 44.048 10.112 58.672 26l149.408-74.912c0.528-43.744 36.048-79.088 79.92-79.088 44.192 0 80 35.824 80 80 0 1.424-0.336 2.752-0.416 4.16l208.096 178.768c9.904-4.384 20.784-6.928 32.32-6.928 44.192 0 80 35.808 80 80 0 44.176-35.808 80-80 80z" />
+<glyph unicode="&#xe06c;" glyph-name="equalizer" d="M160.048 572.128v355.872c0 17.664-14.336 32-32 32s-32-14.336-32-32v-355.84c-55.328-14.256-96.4-64.448-96.4-124.16 0-59.728 41.072-109.904 96.4-124.176v-355.824c0-17.664 14.336-32 32-32s32 14.336 32 32v355.856c55.28 14.304 96.304 64.448 96.304 124.144 0 59.68-41.024 109.84-96.304 124.128zM128.416 383.968c-0.112 0-0.24 0.032-0.368 0.032-0.144 0-0.272-0.032-0.416-0.048-35.152 0.208-63.696 28.848-63.696 64.048 0 35.184 28.56 63.84 63.712 64.032 0.128 0 0.272-0.032 0.4-0.032s0.24 0.032 0.368 0.032c35.136-0.224 63.664-28.864 63.664-64.032 0-35.184-28.528-63.808-63.664-64.032zM544.064 380.128v547.872c0 17.664-14.336 32-32 32s-32-14.336-32-32v-547.84c-55.328-14.272-96.4-64.432-96.4-124.16s41.072-109.904 96.4-124.176v-163.824c0-17.664 14.336-32 32-32s32 14.336 32 32v163.856c55.264 14.304 96.288 64.448 96.288 124.144-0.016 59.664-41.024 109.824-96.288 124.128zM512.416 191.968c-0.128 0-0.24 0.032-0.368 0.032-0.144 0-0.272-0.032-0.416-0.048-35.152 0.208-63.696 28.848-63.696 64.048 0 35.216 28.608 63.872 63.792 64.032 0.112 0 0.224-0.032 0.336-0.032 0.096 0 0.192 0.032 0.288 0.032 35.168-0.192 63.744-28.832 63.744-64.032 0-35.184-28.528-63.808-63.68-64.032zM928.064 764.128v163.872c0 17.664-14.336 32-32 32-17.68 0-32-14.336-32-32v-163.84c-55.328-14.256-96.4-64.432-96.4-124.16s41.072-109.92 96.4-124.176v-547.824c0-17.664 14.32-32 32-32 17.664 0 32 14.336 32 32v547.856c55.264 14.304 96.288 64.448 96.288 124.144-0.016 59.664-41.024 109.824-96.288 124.128zM896.416 575.968c-0.128 0-0.24 0.032-0.352 0.032-0.144 0-0.288-0.032-0.416-0.032-35.152 0.192-63.712 28.832-63.712 64.032 0 35.184 28.56 63.84 63.696 64.032 0.144 0 0.288-0.032 0.416-0.032s0.24 0.032 0.352 0.032c35.136-0.24 63.664-28.864 63.664-64.032 0.032-35.184-28.496-63.808-63.648-64.032z" />
+<glyph unicode="&#xe06d;" glyph-name="dislike" d="M415.44 959.76c290.832 0 293.088-12.064 329.104-39.184 19.104-14.368 55.152-24.336 186.832-32.912 9.568-0.624 18.64-4.288 24.736-11.68 2.8-3.408 68.592-99.36 68.592-253.024 0-151.44-47.088-220.48-49.104-223.696-5.84-9.344-16.096-15.024-27.12-15.024-108.112 0-257.984-138-358.752-378.912-17.424-41.664-21.008-69.056-85.024-69.056-36.4 0-77.2 26.064-97.376 59.504-41.312 68.32-20.336 215.056-0.912 293.472-66-0.528-185.472-1.44-242.32-1.44-79.072 0-131.392 47.152-133.008 116.096-0.512 22.752 2.464 51.824 9.056 66.832-17.392 17.36-39.856 43.552-40.832 77.264-1.232 43.504 27.28 76.64 45.456 95.664-4.16 12.656-12.512 29.44-11.712 49.504 2.016 49.344 40.096 81.152 63.84 97.744-1.952 13.456-3.488 38.944 0.832 58.624 17.12 78.624 132.4 110.224 317.712 110.224zM914.384 822.752c-114.688 9.488-176 22.336-208.336 46.688-25.024 18.832-21.152 26.304-290.608 26.304-82.176 0-242.896-3.424-255.216-59.824-4.912-22.56 18.88-44.752 18.976-44.912 6.496-16.048-0.752-34.848-16.592-41.776-0.256-0.128-64.128-23.024-65.6-58.736-0.944-22.832 14.72-36.544 15.088-37.104 9.312-14.464 5.904-34.32-8.224-44.16-0.16-0.128-41.568-25.216-40.544-59.44 0.784-27.152 36.576-46.288 37.664-46.928 8-4.576 13.824-12.496 15.632-21.568 1.808-9.024-0.224-18.528-5.824-25.84 0 0-16.272-25.872-15.696-50.112 1.184-51.936 57.024-53.568 69.008-53.568 80.72 0 288.032 0.848 288.032 0.848 11.184 0.032 20.864-5.248 26.864-14.192s6.464-20.064 2.928-30.224c-31.248-90.032-48.704-231.28-19.712-279.536 8.528-14.224 10.496-28.432 42.496-28.432 4.432 0 14.992 3.504 26 29.744 106.992 255.808 266.704 403.808 397.52 417.152 11.28 25.728 32.496 79.040 32.496 175.792-0.032 98.736-31.312 175.104-46.352 199.824z" />
+<glyph unicode="&#xe06e;" glyph-name="cursor" d="M921.088 856.768l-336.256-785.792-119.312 344.512-344.192 104.032 799.76 337.248zM1004.464 959.232c-6.096 0-13.52-1.728-22.096-5.36l-954.656-405.072c-34.384-14.592-36.56-42.704-4.848-62.464l395.296-123.584 129.36-403.264c9.28-15.184 20.496-22.72 31.264-22.72 11.936 0 23.296 9.152 31.040 27.248l408.272 953.728c11.056 25.888 4.768 41.488-13.632 41.488v0z" />
+<glyph unicode="&#xe06f;" glyph-name="control-start" d="M974.944 894.608c0 23.232-12.592 44.656-32.912 55.936-9.68 5.392-20.368 8.064-31.088 8.064-11.712 0-23.472-3.232-33.776-9.648l-735.728-446.592c-15.952-9.904-26.512-26.208-29.376-44.4v470.032c0 17.664-14.336 32-32 32s-32-14.336-32-32v-960c0-17.664 14.336-32 32-32s32 14.336 32 32v470.064c2.88-18.208 13.44-34.512 29.376-44.384l736.72-446.64c10.32-6.432 22.064-9.664 33.776-9.664 10.72 0 21.408 2.688 31.088 8.064 20.32 11.28 32.912 32.688 32.912 55.936l-0.992 893.232zM175.2 448.016l735.744 446.592 1.008-893.216-736.752 446.624z" />
+<glyph unicode="&#xe070;" glyph-name="control-rewind" d="M573.92 762.096l-505.28-314.096 505.28-314.096v246.976l384-246.976v628.192l-384-246.992v255.84zM571.264 826.096c10.704 0 22.736-2.672 32.416-8.064 20.32-11.28 34.24-32.704 34.24-55.936v-131.84l298.224 186.192c10.32 6.4 21.376 9.648 33.12 9.648 10.688 0 15.728-2.672 25.424-8.064 20.32-11.28 27.232-32.704 27.232-55.936v-628.192c0-23.248-7.248-44.656-27.568-55.936-9.68-5.376-17.728-8.064-28.432-8.064-11.728 0-20.784 3.216-31.104 9.664l-296.896 186.176v-131.84c0-23.248-13.92-44.656-34.24-55.936-9.68-5.376-21.040-8.064-31.76-8.064-11.712 0-23.792 3.216-34.112 9.664l-505.456 314.096c-18.768 11.648-30.272 32.208-30.272 54.336s11.376 42.672 30.16 54.352l505.264 314.096c10.304 6.416 22.032 9.648 33.76 9.648v0z" />
+<glyph unicode="&#xe071;" glyph-name="control-play" d="M144.624 894.608l735.744-446.592-736.736-446.624 0.992 893.216zM144.624 958.608c-10.72 0-21.408-2.672-31.088-8.064-20.32-11.28-32.912-32.704-32.912-55.936l-0.992-893.216c0-23.248 12.592-44.656 32.912-55.936 9.68-5.376 20.368-8.064 31.088-8.064 11.712 0 23.472 3.216 33.776 9.664l736.72 446.624c18.816 11.664 30.256 32.224 30.256 54.336s-11.44 42.672-30.256 54.352l-735.728 446.608c-10.304 6.4-22.064 9.632-33.776 9.632v0z" />
+<glyph unicode="&#xe072;" glyph-name="control-pause" d="M416.272 960h-224.208c-17.664 0-32-14.32-32-32v-960c0-17.664 14.336-32 32-32h224.208c17.68 0 32 14.336 32 32v960c0 17.68-14.32 32-32 32zM384.272 0h-160.208v896h160.208v-896zM831.936 960h-223.056c-17.68 0-32-14.32-32-32v-960c0-17.664 14.32-32 32-32h223.056c17.68 0 32 14.336 32 32v960c0 17.68-14.304 32-32 32zM799.936 0h-159.056v896h159.056v-896z" />
+<glyph unicode="&#xe073;" glyph-name="control-forward" d="M450.080 762.096l505.28-314.096-505.28-314.096v246.976l-384-246.976v628.192l384-246.992v255.84zM452.736 826.096c-10.72 0-22.736-2.672-32.432-8.064-20.304-11.28-34.224-32.704-34.224-55.936v-131.84l-298.224 186.192c-10.32 6.4-21.376 9.648-33.12 9.648-10.688 0-15.728-2.672-25.44-8.064-20.288-11.28-27.216-32.704-27.216-55.936v-628.192c0-23.248 7.248-44.656 27.568-55.936 9.68-5.376 17.728-8.064 28.432-8.064 11.728 0 20.784 3.216 31.104 9.664l296.896 186.176v-131.84c0-23.248 13.92-44.656 34.224-55.936 9.696-5.376 21.056-8.064 31.776-8.064 11.712 0 23.792 3.216 34.112 9.664l505.456 314.096c18.784 11.664 30.288 32.224 30.288 54.336s-11.376 42.672-30.16 54.352l-505.28 314.096c-10.304 6.416-22.048 9.648-33.76 9.648v0z" />
+<glyph unicode="&#xe074;" glyph-name="control-end" d="M943.936 960c-17.664 0-32-14.336-32-32v-470c-2.88 18.192-13.44 34.464-29.376 44.368l-735.712 446.608c-10.32 6.4-22.064 9.648-33.776 9.648-10.72 0-21.408-2.672-31.088-8.064-20.32-11.28-32.912-32.704-32.912-55.936l-1.008-893.232c0-23.248 12.592-44.656 32.912-55.936 9.68-5.376 20.368-8.064 31.088-8.064 11.712 0 23.472 3.216 33.776 9.664l736.72 446.608c15.936 9.872 26.496 26.16 29.376 44.352v-470.016c0-17.664 14.336-32 32-32s32 14.336 32 32v960c0 17.664-14.32 32-32 32zM112.064 1.392l0.992 893.216 735.744-446.592-736.736-446.624z" />
+<glyph unicode="&#xe075;" glyph-name="calender" d="M960 864.112h-256.224v63.776c0 17.68-14.32 32-32 32s-32-14.32-32-32v-63.76h-256v63.76c0 17.68-14.32 32-32 32s-32-14.32-32-32v-63.76h-255.776c-35.344 0-64-28.656-64-64v-800c0-35.344 28.656-64 64-64h896c35.344 0 64 28.656 64 64v800c0 35.328-28.656 63.984-64 63.984zM960 0.128h-896v800h255.776v-32.24c0-17.68 14.32-32 32-32s32 14.32 32 32v32.224h256v-32.24c0-17.68 14.32-32 32-32s32 14.32 32 32v32.24h256.224v-799.984zM736 448.112h64c17.664 0 32 14.336 32 32v64c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-64c0-17.664 14.336-32 32-32zM736 192.128h64c17.664 0 32 14.32 32 32v64c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-64c0-17.696 14.336-32 32-32zM544 320.128h-64c-17.664 0-32-14.336-32-32v-64c0-17.68 14.336-32 32-32h64c17.664 0 32 14.32 32 32v64c0 17.648-14.336 32-32 32zM544 576.112h-64c-17.664 0-32-14.336-32-32v-64c0-17.664 14.336-32 32-32h64c17.664 0 32 14.336 32 32v64c0 17.68-14.336 32-32 32zM288 576.112h-64c-17.664 0-32-14.336-32-32v-64c0-17.664 14.336-32 32-32h64c17.664 0 32 14.336 32 32v64c0 17.68-14.336 32-32 32zM288 320.128h-64c-17.664 0-32-14.336-32-32v-64c0-17.68 14.336-32 32-32h64c17.664 0 32 14.32 32 32v64c0 17.648-14.336 32-32 32z" />
+<glyph unicode="&#xe076;" glyph-name="bulb" d="M511.984 960c-198.032 0-353.12-161.104-353.12-359.136 0-149.2 73.28-220.256 131.184-272.128 37.28-33.424 62.368-53.552 62.368-78.352v-54.256c0-1.392 0.192-2.752 0.368-4.128h-0.72v-92.624c0.016-97.712 63.2-163.376 161.072-163.376 94.464 0 158.944 65.664 158.944 163.376v92.624h-0.928c0.176 1.376 0.416 2.736 0.416 4.128v54.256c0 37.76 28.032 60.592 70.528 97.696 57.504 50.208 123.024 112.688 123.024 252.784 0.016 198.032-155.104 359.136-353.136 359.136zM510.768 0c-59.904 0-94.688 37.152-94.688 99.376l-0.464 42.672c23.024-7.872 54.384-14.048 96.384-14.048 41.424 0 72.848 6.624 96.080 14.768v-43.392c0-63.152-35.248-99.376-97.312-99.376zM700.016 396.288c-43.472-37.968-92.432-77.216-92.432-145.904v-40.432c-15.184-8.48-43.184-18.56-96.128-18.56-55.568 0-81.92 9.856-95.024 17.472v41.536c0 54.608-42.688 89.296-83.68 126.016-54.32 48.672-109.872 103.84-109.872 224.464-0.016 162.72 126.384 295.12 289.104 295.12 162.752 0 289.152-132.4 289.152-295.136 0-111.024-48.464-158.576-101.12-204.576z" />
+<glyph unicode="&#xe077;" glyph-name="chart" d="M272.064 640.016h-224.064c-17.68 0-32-14.32-32-32v-640.016c0-17.68 14.32-32 32-32h224.064c17.68 0 32 14.32 32 32v640.016c0 17.68-14.32 32-32 32zM240.064 0h-160.064v576.016h160.064v-576.016zM623.744 449.744h-224.080c-17.68 0-32-14.32-32-32v-449.744c0-17.68 14.32-32 32-32h224.080c17.68 0 32 14.32 32 32v449.744c0 17.696-14.304 32-32 32zM591.744 0h-160.080v385.744h160.080v-385.744zM976 960h-223.728c-17.68 0-32-14.32-32-32v-960c0-17.68 14.32-32 32-32h223.728c17.68 0 32 14.32 32 32v960c0 17.68-14.32 32-32 32zM944 0h-159.728v896h159.728v-896z" />
+<glyph unicode="&#xe078;" glyph-name="arrow-up-circle" d="M1024 448c0 282.784-229.232 512-512 512-282.784 0-512-229.216-512-512 0-282.768 229.216-512 512-512 282.768 0 512 229.232 512 512zM63.008 448c0 247.024 201.968 448 448.992 448s448-200.976 448-448-200.976-448-448-448-448.992 200.976-448.992 448zM544.336 223.68v360.464l115.76-115.76c12.496-12.496 32.752-12.496 45.248 0s12.496 32.752 0 45.248l-194 189.008-194-189.008c-6.256-6.256-9.376-14.432-9.376-22.624s3.12-16.368 9.376-22.624c12.496-12.496 32.752-12.496 45.248 0l117.744 117.76v-362.464c0-17.68 14.336-32 32-32s32 14.32 32 32z" />
+<glyph unicode="&#xe079;" glyph-name="arrow-right-circle" d="M512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448-200.976 448-448-200.976-449.008-448-449.008zM532.368 641.36c-12.496-12.496-12.496-32.752 0-45.248l115.76-115.76h-360.448c-17.68 0-32-14.336-32-32s14.32-32 32-32h362.464l-117.76-117.744c-12.496-12.496-12.496-32.752 0-45.248 6.256-6.256 14.432-9.376 22.624-9.376s16.368 3.12 22.624 9.376l189.008 194-189.008 194c-12.512 12.496-32.752 12.496-45.264 0z" />
+<glyph unicode="&#xe07a;" glyph-name="arrow-left-circle" d="M512 960c-282.784 0-512-229.232-512-512 0-282.784 229.216-512 512-512 282.768 0 512 229.216 512 512 0 282.768-229.232 512-512 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448-200.976 448-448-200.976-449.008-448-449.008zM736.32 480.336h-360.464l115.76 115.76c12.496 12.496 12.496 32.752 0 45.248s-32.752 12.496-45.248 0l-189.008-194 189.008-194c6.256-6.256 14.432-9.376 22.624-9.376s16.368 3.12 22.624 9.376c12.496 12.496 12.496 32.752 0 45.248l-117.76 117.744h362.464c17.68 0 32 14.336 32 32s-14.32 32-32 32z" />
+<glyph unicode="&#xe07b;" glyph-name="arrow-down-circle" d="M0 448c0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512-282.768 0-512-229.232-512-512zM961.008 448c0-247.024-201.968-448-449.008-448s-448 200.976-448 448 200.976 448 448 448 449.008-200.976 449.008-448zM479.664 672.32v-360.448l-115.76 115.76c-12.496 12.496-32.752 12.496-45.248 0s-12.496-32.752 0-45.248l194.016-189.008 194 189.008c6.256 6.256 9.376 14.432 9.376 22.624s-3.12 16.368-9.376 22.624c-12.496 12.496-32.752 12.496-45.248 0l-117.744-117.76v362.448c0 17.68-14.336 32-32 32s-32.016-14.32-32.016-32z" />
+<glyph unicode="&#xe07c;" glyph-name="ban" d="M512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512zM64 448c0 112.272 41.616 214.96 110.096 293.664l631.856-631.856c-78.736-68.88-181.536-110.816-293.952-110.816-247.024 0-448 201.984-448 449.008zM851.024 155.216l-631.616 631.616c78.576 67.936 180.832 109.168 292.592 109.168 247.024 0 448-200.976 448-448 0-111.664-41.152-214.032-108.976-292.784z" />
+<glyph unicode="&#xe07d;" glyph-name="bubble" d="M512 832c247.024 0 448-143.552 448-320 0-176.432-200.976-320-448-320l-26.512-0.096c-17.584 0-29.088 0.464-47.072 3.152l-35.856 5.12-23.008-27.84c-10.576-12.784-64.544-57.12-124.112-85.664 12.112 32.032 21.040 67.008 21.84 101.6l0.32 1.904v44.624l-34.864 17.808c-113.6 58.112-178.736 152.64-178.736 259.392 0 176.448 200.976 320 448 320zM512 896c-282.8 0-512-171.936-512-384 0-132.064 78.256-247.152 213.584-316.336 0-0.816-0.256-1.408-0.256-2.32 0-57.376-32.16-120.464-51.008-152.944h0.048c-1.488-3.488-2.368-7.312-2.368-11.408 0-16.080 12.96-28.992 29.008-28.992 2.416 0 6.256 0.496 7.664 0.496 0.336 0 0.528 0 0.496-0.096 100 16.336 209.952 104.688 231.824 131.344 22.48-3.344 37.664-3.84 56.48-3.84 7.936 0 16.496 0.096 26.528 0.096 282.752 0 512 171.904 512 384 0 212.064-229.248 384-512 384v0z" />
+<glyph unicode="&#xe07e;" glyph-name="camrecorder" d="M638.128 736.624c1.28 0 2.32-1.008 2.32-2.24v-127.872c0-23.664 13.056-45.424 34-56.528 9.408-5.008 19.712-7.472 30-7.472 12.56 0 27.056 3.68 37.84 10.992l217.712 123.232v-456.416l-218.912 119.52c-10.976 7.664-23.776 11.536-36.656 11.536-10.128 0-20.256-2.4-29.568-7.216-21.12-11.024-34.4-32.88-34.432-56.688l-0.16-125.84c0-1.248-1.008-2.256-2.288-2.256h-571.696c-1.28 0-2.288 0.992-2.288 2.224l0.16 572.784c0 1.248 1.008 2.24 2.288 2.24h571.68zM990.368 768.656c-6.816 0-20.288-2.016-27.968-9.664l-257.968-152.48v127.872c0 36.56-29.68 66.24-66.32 66.24h-571.68c-36.672 0-66.288-29.664-66.288-66.24l-0.144-572.752c0-36.56 29.632-66.256 66.288-66.256h571.712c36.656 0 66.288 29.68 66.288 66.256l0.16 125.744 262.976-153.312c7.712-7.68 16.256-6.688 23.088-6.688 7.088 0 12.368 2.16 13.024 2.432 12.432 5.184 20.464 17.184 20.464 30.688v574.976c0 13.504-8.032 25.552-20.464 30.656-0.72 0.32-6.032 2.528-13.168 2.528v0z" />
+<glyph unicode="&#xe07f;" glyph-name="camera" d="M928 736h-147.184l-76.816 128h-384l-76.8-128h-147.2c-32 0-96-32-96-95.008v-512.992c0-53.008 48-96 89.328-96h840.672c42 0 94 44.992 94 94.992v513.008c0 32-32 96-96 96zM960 126.992c0-12.624-20.464-30.288-30-31.008h-840.48c-7.408 0.608-25.52 15.040-25.52 32.016v512.992c0 20.272 27.232 30.496 32 31.008h183.44l76.8 128h313.648l57.12-96.944 17.6-31.056h183.392c22.56 0 31.68-29.472 32-32v-513.008zM512 640c-123.712 0-224-100.288-224-224s100.288-224 224-224 224 100.288 224 224-100.288 224-224 224zM512 256c-88.224 0-160 71.776-160 160s71.776 160 160 160 160-71.776 160-160-71.776-160-160-160z" />
+<glyph unicode="&#xe080;" glyph-name="check" d="M512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448-200.976 448-448-200.976-449.008-448-449.008zM716.336 635.344l-300.4-302.288-135.28 135.28c-12.496 12.496-32.752 12.496-45.264 0-12.496-12.496-12.496-32.752 0-45.248l158.384-158.4c12.496-12.48 32.752-12.48 45.264 0 1.44 1.44 2.672 3.008 3.792 4.64l318.784 320.752c12.48 12.496 12.48 32.752 0 45.264-12.512 12.496-32.768 12.496-45.28 0z" />
+<glyph unicode="&#xe081;" glyph-name="clock" d="M512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448-200.976 448-448-200.976-449.008-448-449.008zM544 460.992v307.008c0 17.664-14.336 32-32 32s-32-14.336-32-32v-320c0-9.056 3.792-17.2 9.856-23.008 0.528-0.624 0.96-1.296 1.536-1.888l158.384-158.4c12.496-12.48 32.752-12.48 45.248 0 12.496 12.496 12.496 32.768 0 45.264l-151.024 151.024z" />
+<glyph unicode="&#xe082;" glyph-name="close" d="M512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448-200.976 448-448-200.976-449.008-448-449.008zM693.008 629.008c-12.496 12.496-32.752 12.496-45.248 0l-135.76-135.76-135.76 135.76c-12.496 12.496-32.752 12.496-45.264 0-12.496-12.496-12.496-32.752 0-45.248l135.76-135.76-135.76-135.76c-12.496-12.48-12.496-32.768 0-45.248 12.496-12.496 32.752-12.496 45.264 0l135.76 135.76 135.76-135.76c12.496-12.496 32.752-12.496 45.248 0 12.496 12.48 12.496 32.768 0 45.248l-135.76 135.76 135.76 135.76c12.512 12.512 12.512 32.768 0 45.248z" />
+<glyph unicode="&#xe083;" glyph-name="cloud-download" d="M763.024 700c-44.624 118.432-140.56 193.44-285.456 193.44-184.384 0-313.392-136.912-324.48-315.536-88.912-28.432-153.088-119.12-153.088-221.84 0-125.744 98.848-231.968 215.824-231.968h28.448c17.664 0 32 14.32 32 32s-14.336 32-32 32h-28.448c-82.304 0-152.832 76.912-152.832 167.968 0 80.464 56.416 153.056 127.184 165.216l29.040 5.008-2.592 29.344-0.24 0.368c0.016 155.872 102.608 273.44 261.184 273.44 127.104 0 198.512-62.624 231.552-169.44l6.832-22.032 23.072-0.496c118.864-2.496 223.088-98.944 223.088-218.784 0-109.056-72.272-230.592-181.712-230.592h-9.104c-17.664 0-32-14.32-32-32s14.336-32 32-32v0.096c160 4.224 252.24 157.088 252.24 294.496-0.032 147.728-115.792 265.744-260.512 281.312zM646.336 184.528c-8.944 9.344-23.408 9.344-32.336 0l-70.384-77.648v322.144c0 17.664-14.336 32-32 32s-32-14.336-32-32v-322.432l-68.112 75.936c-8.944 9.344-23.44 11.344-32.368 2l-8.064-4.416c-8.944-9.376-8.944-24.48 0-33.824l115.504-127.744c0.16-0.16 0.192-0.368 0.336-0.528l8.096-8.464c4.496-4.688 10.368-7.008 16.288-6.976 5.872-0.032 11.776 2.288 16.224 6.976l8.096 8.464c0.16 0.16 0.24 0.336 0.368 0.528l118.432 129.744c8.944 9.344 8.944 20.448 0 29.824l-8.080 6.416z" />
+<glyph unicode="&#xe084;" glyph-name="cloud-upload" d="M763.024 700.032c-44.624 118.432-140.56 193.44-285.472 193.44-184.384 0-313.392-136.912-324.48-315.536-88.896-28.432-153.072-119.12-153.072-221.84 0-125.744 98.848-231.968 215.824-231.968h92.448c17.664 0 32 14.336 32 32 0 17.68-14.336 32-32 32h-92.448c-82.304 0-152.832 76.912-152.832 167.968 0 80.464 56.416 153.056 127.184 165.216l29.040 5.008-2.576 29.328-0.24 0.368c0 155.872 102.576 273.44 261.152 273.44 127.104 0 198.512-62.624 231.536-169.44l6.848-22.032 23.056-0.496c118.88-2.496 223.104-98.944 223.104-218.768 0-109.056-72.272-230.592-181.696-230.592h-73.12c-17.664 0-32-14.336-32-32 0-17.68 14.336-32 32-32l72.88 0.096c160 4.224 243.344 157.072 243.344 294.496 0 147.712-115.76 265.744-260.48 281.312zM535.984 445.056c-0.176 0.192-0.24 0.352-0.352 0.512l-8.096 8.464c-4.432 4.688-10.336 7.008-16.24 6.976-5.904 0.048-11.776-2.288-16.288-6.976l-8.096-8.464c-0.16-0.16-0.192-0.352-0.336-0.512l-115.504-127.744c-8.944-9.344-8.944-24.464 0-33.84l8.064-5.472c8.944-9.344 23.44-6.32 32.368 3.024l68.112 75.936v-322.432c0-17.664 14.336-32 32-32s32 14.336 32 32v322.128l70.368-77.632c8.944-9.344 23.408-12.368 32.336-3.024l8.064 5.472c8.944 9.376 8.944 24.496 0 33.84l-118.4 129.744z" />
+<glyph unicode="&#xe085;" glyph-name="doc" d="M560 960h-352c-35.344 0-64-28.656-64-64v-896c0-35.344 28.656-64 64-64h608c35.344 0 64 28.656 64 64v639.984l-320 320.016zM816 613.472v-5.472h-288v288h5.504l282.496-282.528zM208 0v896h256v-352h352v-544h-608z" />
+<glyph unicode="&#xe086;" glyph-name="envolope" d="M1023.456 728c0.992 6.144 0.176 12.48-2.48 18.272-8.064 35.44-33.68 53.728-76.976 53.728h-832c-38.080 0-79.104-14-99.28-41.472-1.744-1.328-3.408-2.832-4.912-4.576-6.448-7.44-8.704-17.008-7.264-26.032-0.288-2.592-0.544-5.2-0.544-7.92v-512c0-53.024 58.992-112 112-112h832c53.024 0 80 58.976 80 112v512c0 2.832-0.368 5.312-0.544 8zM112 736h832c0.192 0 0.288 0 0.432 0l-432.432-344.656-430.688 343.248c9.792 1.808 21.84 1.408 30.688 1.408zM944 160h-832c-17.648 0-48 30.336-48 48v458.448l427.040-341.648c6.016-5.2 13.488-7.792 20.96-7.792s14.944 2.592 20.976 7.792l427.024 341.632v-458.432c0-17.664 1.664-48-16-48z" />
+<glyph unicode="&#xe087;" glyph-name="eye" d="M515.472 638.592c-106.032 0-192-85.968-192-192 0-106.016 85.968-192 192-192s192 85.968 192 192c0 106.032-85.968 192-192 192zM515.472 318.592c-70.576 0-129.472 58.816-129.472 129.392s57.424 128 128 128c70.592 0 128-57.424 128-128s-55.936-129.392-126.528-129.392zM1023.68 455.424c-0.368 1.616-0.208 3.328-0.688 4.912-0.208 0.672-0.624 1.056-0.864 1.648-0.336 0.912-0.256 1.984-0.72 2.864-93.072 213.104-293.664 335.76-507.424 335.76s-418.368-122.432-511.488-335.552c-0.4-0.896-0.336-1.824-0.656-2.848-0.224-0.624-0.688-0.976-0.896-1.568-0.496-1.616-0.304-3.296-0.608-4.928-0.592-2.88-1.136-5.68-1.136-8.592 0-2.944 0.544-5.664 1.136-8.592 0.32-1.6 0.112-3.344 0.608-4.88 0.208-0.72 0.672-1.024 0.896-1.68 0.336-0.88 0.256-1.968 0.656-2.848 93.136-213.056 295.744-333.712 509.504-333.712 213.776 0 416.336 120.4 509.44 333.504 0.464 0.912 0.368 1.872 0.72 2.88 0.224 0.56 0.656 0.976 0.848 1.6 0.496 1.568 0.336 3.28 0.688 4.912 0.56 2.864 1.088 5.664 1.088 8.624 0 2.816-0.528 5.6-1.104 8.496zM512 159.408c-181.296 0-359.744 95.568-447.424 287.68 86.848 191.472 267.68 289.504 449.424 289.504 181.68 0 358.496-98.144 445.376-289.712-86.816-191.408-265.632-287.472-447.376-287.472z" />
+<glyph unicode="&#xe088;" glyph-name="flag" d="M680 864.672c-160 0-202.656 96-405.312 96-130.688 0-210.688-98.688-210.688-98.688v-894.656c0-17.664 14.336-32 32-32s32 14.336 32 32v407.872c33.76 21.776 80.336 41.472 138.688 41.472 202.656 0 261.312-96 421.312-96s272 96 272 96v544c0 0-120-96-280-96zM896 449.28c-36.16-23.584-112.784-64.608-208-64.608-62.912 0-105.84 17.264-160.224 39.136-66.272 26.64-141.408 56.864-261.088 56.864-54.688 0-101.072-13.76-138.688-32.16v387.472c24.096 21.92 76.624 60.688 146.688 60.688 94.112 0 147.088-22.848 203.184-47.008 55.872-24.080 113.664-48.992 202.128-48.992 85.248 0 160.128 23.568 216 48.912v-400.304z" />
+<glyph unicode="&#xe089;" glyph-name="folder" d="M354.752 784l78.624-77.248 20.112-18.752h506.512v-576h-896v672h288zM384 848h-320c-35.344 0-64-28.656-64-64v-672c0-35.344 28.656-64 64-64h896c35.344 0 64 28.656 64 64v576c0 35.344-28.656 64-64 64h-480l-96 96z" />
+<glyph unicode="&#xe08a;" glyph-name="heart" d="M287.984 845.84c31.376 0 88.096-15.008 180.096-105.616l45.616-44.912 44.928 45.632c63.872 64.896 131.84 105.2 177.376 105.2 61.408 0 109.808-21.008 157.008-68.096 44.464-44.368 68.992-103.36 68.992-166.112 0.032-62.784-24.448-121.824-69.408-166.672-3.664-3.712-196.992-212.304-358.96-387.104-7.632-7.248-16.352-8.32-20.992-8.32-4.576 0-13.2 1.024-20.8 8.096-39.472 43.904-325.552 362-358.816 395.232-44.528 44.416-69.024 103.456-69.024 166.224 0.016 62.752 24.512 121.728 69.040 166.144 43.296 43.264 93.984 60.304 154.944 60.304zM287.984 909.84c-76.528 0-144-22.896-200.176-79.008-117.072-116.768-117.072-306.128 0-422.96 33.424-33.44 357.856-394.336 357.856-394.336 18.48-18.496 42.752-27.68 66.96-27.68 24.224 0 48.4 9.184 66.912 27.68 0 0 354.88 383.024 358.656 386.848 117.040 116.88 117.040 306.24 0 423.008-58.112 58-123.024 86.784-202.208 86.784-75.648 0-160-60.32-223.008-124.32-64.992 63.984-146.736 123.984-224.992 123.984v0z" />
+<glyph unicode="&#xe08b;" glyph-name="info" d="M576 224h-32v286c0 0.336-0.096 0.656-0.096 1.008s0.096 0.656 0.096 0.992c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32s14.336-32 32-32h32v-256h-32c-17.664 0-32-14.336-32-32s14.336-32 32-32h128c17.664 0 32 14.336 32 32s-14.336 32-32 32zM512 608c35.344 0 64 28.656 64 64s-28.656 64-64 64-64-28.656-64-64 28.656-64 64-64zM512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448-200.976 448-448-200.976-449.008-448-449.008z" />
+<glyph unicode="&#xe08c;" glyph-name="key" d="M655.696 960c-159.056 0-288-129.152-288-288.464 0-71.408 26.032-136.624 68.944-187.008-8.832 0.544-17.84-2.432-24.592-9.184l-322.384-324.384c-12.48-12.496-12.48-32.768 0-45.248 0.24-0.24 0.512-0.384 0.768-0.624 0.080-0.080 0.128-0.176 0.208-0.256l156.912-159.904c12.48-12.496 32.752-12.496 45.248 0s12.496 32.768 0 45.248l-135.472 138.064 82.496 83.008 135.728-138.32c12.48-12.496 32.752-12.496 45.248 0s12.48 32.768 0 45.248l-135.856 138.448 172.384 173.472c6.672 6.672 9.664 15.536 9.216 24.272 50.624-44.288 116.672-71.312 189.168-71.312 159.056 0 288 129.152 288 288.48-0.016 159.312-128.944 288.464-288.016 288.464zM655.696 448c-123.248 0-224 100.272-224 224 0 123.744 100.752 224 224 224s224-100.256 224-224c0-123.728-100.736-224-224-224z" />
+<glyph unicode="&#xe08d;" glyph-name="link" d="M295.664 227.552c6.256-6.256 14.432-9.376 22.624-9.376s16.368 3.12 22.624 9.376l387.664 390.688c12.496 12.496 12.496 32.752 0 45.248s-32.752 12.496-45.248 0l-387.664-390.688c-12.512-12.496-12.512-32.752 0-45.248zM475.872 295.696c10.576-46.624-0.832-92.4-36.864-128.432l-129.248-125.248c-27.2-27.184-63.36-42.16-101.824-42.16s-74.624 14.976-101.808 42.16c-56.144 56.16-56.144 147.536-0.336 203.344l126.256 130.256c27.2 27.184 63.36 42.176 101.824 42.176 13.152 0 25.824-2.352 38.176-5.744l49.952 49.952c-27.872 13.024-57.952 19.792-88.128 19.792-53.232 0-106.464-20.32-147.072-60.928l-125.936-129.936c-81.216-81.216-81.216-212.912 0-294.16 40.608-40.624 93.84-60.912 147.072-60.912s106.464 20.288 147.072 60.912l128.944 124.944c62.128 62.128 75.568 148.72 42.656 224.72l-50.736-50.736zM963.136 899.216c-40.624 40.608-93.84 60.928-147.056 60.928-53.248 0-106.496-20.32-147.088-60.928l-128.928-124.944c-64.4-64.4-77.536-160.464-39.792-238.032l49.664 49.648c-14.704 49.104-3.408 104.336 35.056 142.832l129.248 125.248c27.216 27.184 63.344 42.176 101.84 42.176 38.432 0 74.624-14.992 101.808-42.176 56.128-56.16 56.128-147.536 0.32-203.344l-129.248-129.248c-27.184-27.184-63.376-42.16-101.808-42.16-9.808 0-18.432-0.992-27.84 0.928l-50.976-51.008c25.472-10.592 51.632-13.936 78.816-13.936 53.216 0 106.432 20.304 147.056 60.928l128.944 128.944c81.2 81.216 81.2 212.896-0.016 294.144z" />
+<glyph unicode="&#xe08e;" glyph-name="lock" d="M800 576h-32v122.128c0 146.848-106.256 261.872-257.184 261.872-151.536 0-254.816-117.472-254.816-261.872v-122.128h-32c-70.592 0-128-57.408-128-128v-384c0-70.592 57.408-128 128-128h576c70.592 0 128 57.408 128 128v384c0 70.592-57.408 128-128 128zM320 698.128c0 109.088 74.56 197.872 190.816 197.872 115.056 0 193.184-86.912 193.184-197.872v-122.128h-384v122.128zM864 64c0-35.28-28.72-64-64-64h-576c-35.28 0-64 28.72-64 64v384c0 35.28 28.72 64 64 64h576c35.28 0 64-28.72 64-64v-384zM512 384c-35.344 0-64-28.656-64-64 0-23.632 12.96-44.032 32-55.12v-104.88c0-17.664 14.336-32 32-32s32 14.336 32 32v104.88c19.040 11.088 32 31.504 32 55.12 0 35.344-28.656 64-64 64z" />
+<glyph unicode="&#xe08f;" glyph-name="lock-open" d="M800 574.896h-456.96l-16.56 74.272c-28.24 105.376 20.816 210.432 133.088 240.512 111.136 29.776 209.088-33.936 237.824-141.12l13.6-53.968c4.576-17.072 22.112-27.2 39.2-22.624 17.072 4.576 27.2 22.112 22.624 39.184l-13.616 53.968c-37.984 141.84-170.384 225.44-316.192 186.384-146.368-39.216-215.712-179.424-178.336-318.912l12.864-57.696h-53.536c-70.592 0-128-57.408-128-128v-384c0-70.592 57.408-128 128-128h576c70.592 0 128 57.408 128 128v384c0 70.592-57.408 128-128 128zM864 62.896c0-35.28-28.72-64-64-64h-576c-35.28 0-64 28.72-64 64v384c0 35.28 28.72 64 64 64h576c35.28 0 64-28.72 64-64v-384zM512 382.896c-35.344 0-64-28.656-64-64 0-23.632 12.96-44.032 32-55.12v-104.88c0-17.664 14.336-32 32-32s32 14.336 32 32v104.88c19.040 11.088 32 31.504 32 55.12 0 35.344-28.656 64-64 64z" />
+<glyph unicode="&#xe090;" glyph-name="magnifier" d="M1014.64-9.040l-310.928 312.832c57.952 69.408 92.88 158.704 92.88 256.208 0 220.912-179.088 400-400 400s-400-179.088-400-400c0-220.912 179.088-400 400-400 100.368 0 192.048 37.056 262.288 98.144l310.496-312.448c12.496-12.496 32.768-12.496 45.264 0 12.48 12.496 12.48 32.752 0 45.264zM396.592 223.472c-185.856 0-336.528 150.672-336.528 336.528s150.672 336.528 336.528 336.528 336.528-150.672 336.528-336.528-150.672-336.528-336.528-336.528z" />
+<glyph unicode="&#xe091;" glyph-name="magnifier-add" d="M1014.624-9.040l-283.024 284.768c60.608 72.4 97.088 165.76 97.088 267.712 0 230.064-185.504 416.56-415.552 416.56s-416.544-186.496-416.544-416.544c0-230.048 186.496-416.544 416.544-416.544 105.008 0 200.672 38.96 273.696 103.072l282.528-284.304c12.496-12.496 32.768-12.496 45.248 0 12.512 12.512 12.512 32.768 0.016 45.28zM412.592 192c-193.552 0-352 158.448-352 352s158.448 352 352 352 352-158.448 352-352-158.448-352-352-352zM572.592 576h-128v128c0 17.664-14.336 32-32 32s-32-14.336-32-32v-128h-128c-17.664 0-32-14.336-32-32s14.336-32 32-32h128v-128c0-17.664 14.336-32 32-32s32 14.336 32 32v128h128c17.664 0 32 14.336 32 32s-14.32 32-32 32z" />
+<glyph unicode="&#xe092;" glyph-name="magnifier-remove" d="M1014.624-9.040l-283.024 284.768c60.608 72.4 97.088 165.76 97.088 267.712 0 230.064-185.504 416.56-415.552 416.56s-416.544-186.496-416.544-416.544c0-230.048 186.496-416.544 416.544-416.544 105.008 0 200.672 38.96 273.696 103.072l282.528-284.304c12.496-12.496 32.768-12.496 45.248 0 12.512 12.512 12.512 32.768 0.016 45.28zM412.592 192c-193.552 0-352 158.448-352 352s158.448 352 352 352 352-158.448 352-352-158.448-352-352-352zM572.592 576h-320c-17.664 0-32-14.336-32-32s14.336-32 32-32h320c17.664 0 32 14.336 32 32s-14.32 32-32 32z" />
+<glyph unicode="&#xe093;" glyph-name="paper-clip" d="M172.72-47.632c-43.408 0-85.088 17.968-118.304 51.216-73.648 73.888-73.648 194.064-0.016 267.904l574.272 609.824c89.6 89.744 226.848 81.68 327.008-18.608 44.88-44.96 70.064-109.776 69.12-177.904-0.944-67.408-27.28-131.92-72.288-177.008l-434.016-462.048c-12.080-12.944-32.336-13.536-45.232-1.392-12.864 12.16-13.488 32.448-1.36 45.344l434.672 462.752c34 34.064 53.504 82.384 54.224 133.248 0.72 50.896-17.664 98.88-50.368 131.664-61.44 61.568-161.472 93.808-235.84 19.264l-574.256-609.824c-49.376-49.504-49.36-129.008-0.64-177.856 22.848-22.864 49.968-34 78.848-32.256 28.576 1.744 57.952 16.4 82.72 41.232l456.928 486.336c16.56 16.592 49.84 57.264 15.968 91.216-19.184 19.216-32.656 18.032-37.088 17.664-12.656-1.12-27.44-9.872-42.784-25.264l-343.92-365.776c-12.144-12.912-32.416-13.536-45.232-1.36-12.88 12.128-13.472 32.448-1.36 45.312l344.544 366.464c27.088 27.216 54.784 41.968 82.976 44.496 22 1.952 54.72-2.736 88.096-36.208 49.536-49.632 43.376-122.432-15.28-181.216l-456.928-486.304c-36.48-36.608-80.528-57.872-124.72-60.592-3.248-0.224-6.496-0.32-9.744-0.32z" />
+<glyph unicode="&#xe094;" glyph-name="paper-plane" d="M1004.032 960c-6.096 0-13.52-1.728-22.096-5.36l-954.656-405.088c-34.368-14.576-36.544-42.688-4.832-62.448l269.76-168.032c31.712-19.744 73.648-62.080 93.184-94.048l161.712-264.768c9.28-15.184 20.496-22.72 31.28-22.72 11.92 0 23.28 9.152 31.024 27.232l408.256 953.744c11.056 25.872 4.752 41.488-13.632 41.488zM325.552 376.080l-218.656 136.208 733.616 311.248-472.192-480.192c-14.432 12.8-29.088 24.224-42.768 32.736zM572.72 44.736l-130.432 213.52c-7.696 12.608-17.856 26.048-29.184 39.392l474.384 482.384-314.768-735.296z" />
+<glyph unicode="&#xe095;" glyph-name="plus" d="M512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448-200.976 448-448-200.976-449.008-448-449.008zM736 480h-192v192c0 17.664-14.336 32-32 32s-32-14.336-32-32v-192h-192c-17.664 0-32-14.336-32-32s14.336-32 32-32h192v-192c0-17.664 14.336-32 32-32s32 14.336 32 32v192h192c17.664 0 32 14.336 32 32s-14.336 32-32 32z" />
+<glyph unicode="&#xe096;" glyph-name="location-pin" d="M515.664 960.368c-209.904 0-387.664-178.768-387.664-390.544 0-221.76 206.032-448.544 344.624-607.936 0.528-0.64 22.928-25.52 50.528-25.52h2.448c27.6 0 49.84 24.88 50.4 25.52 130.064 149.52 320 396.048 320 607.936 0 211.776-138.656 390.544-380.336 390.544zM528.496 4.816c-1.12-1.12-2.752-2.368-4.192-3.408-1.472 1.008-3.072 2.288-4.256 3.408l-16.736 19.248c-131.392 150.736-311.312 357.152-311.312 545.76 0 177.008 148.224 326.56 323.664 326.56 218.528 0 316.336-164 316.336-326.56 0-143.184-102.128-333.296-303.504-565.008zM513.12 766.592c-106.032 0-192-85.968-192-192s85.968-192 192-192 192 85.968 192 192-85.968 192-192 192zM513.12 446.592c-70.576 0-129.472 58.816-129.472 129.408 0 70.576 57.424 128 128 128 70.624 0 128-57.424 128-128 0.032-70.592-55.904-129.408-126.528-129.408z" />
+<glyph unicode="&#xe097;" glyph-name="power" d="M701.552 795.904c-16 7.456-35.024 0.592-42.528-15.424-7.52-16-0.592-35.040 15.408-42.544 162.336-76 250.496-251.952 214.352-427.872-42.912-208.88-247.664-343.808-456.56-301.024-101.168 20.784-184.208 79.712-241.056 165.936-56.864 86.256-76.736 189.504-55.952 290.672 24.704 120.224 102.624 219.328 213.76 271.904 15.968 7.552 22.8 26.624 15.232 42.608-7.552 15.952-26.592 22.736-42.592 15.232-129.504-61.264-220.288-176.736-249.088-316.864-24.224-117.936-1.072-238.256 65.184-338.784 66.272-100.48 163.696-169.168 281.632-193.408 30.432-6.256 60.816-9.248 90.752-9.248 209.456 0 397.648 147.12 441.376 360.112 42.112 205.008-60.656 410.096-249.92 498.704zM512.016 544c17.664 0 32 14.336 32 32v352c0 17.664-14.336 32-32 32s-32-14.336-32-32v-352c0-17.664 14.336-32 32-32z" />
+<glyph unicode="&#xe098;" glyph-name="refresh" d="M497.408 61.44c-0.080 0.192-0.272 0.32-0.384 0.48l-91.92 143.664c-6.528 10.72-20.688 14.528-31.728 8.512l-8.192-5.040c-11.008-6-10.768-21.536-4.256-32.256l58.928-91.408c-5.024 1.104-10.096 2-15.056 3.296-103.184 26.992-190.496 96.832-239.536 191.6-46.336 89.52-55.040 191.696-24.512 287.744 30.512 96.048 99.776 174.464 189.296 220.784 15.248 7.888 21.2 26.64 13.312 41.856-7.872 15.264-26.64 21.232-41.856 13.328-104.272-53.952-184.4-145.28-219.968-257.152-35.552-111.856-25.424-230.88 28.544-335.136 57.136-110.336 158.832-191.664 279.024-223.136 1.36-0.352 2.784-0.56 4.16-0.912l-81.312-41.232c-11.008-6.032-14.656-19.632-8.128-30.352l3.152-8.176c6.56-10.72 17.84-14.528 28.816-8.512l148.832 76.208c0.192 0.128 0.384 0.096 0.576 0.224l9.984 5.456c5.52 3.024 9.168 7.968 10.624 13.504 1.52 5.52 0.816 11.664-2.448 16.992l-5.952 9.664zM913.904 639.184c-57.056 110.304-155.584 191.632-275.76 223.12-8.56 2.24-17.312 3.984-26.048 5.712l79.824 40.48c11.008 6.032 17.568 19.632 11.040 30.368l-3.152 8.16c-6.56 10.736-20.752 14.528-31.728 8.528l-148.816-76.208c-0.176-0.112-0.384-0.080-0.576-0.208l-9.968-5.472c-5.536-3.040-9.168-7.968-10.624-13.504-1.52-5.52-0.816-11.648 2.464-16.976l5.92-9.712c0.096-0.192 0.272-0.304 0.384-0.496l91.92-143.648c6.512-10.736 20.688-14.528 31.712-8.512l7.216 5.024c11.008 6 11.728 21.536 5.232 32.24l-59.2 91.856c13.008-2 25.968-4.416 38.624-7.76 103.232-27.040 187.392-96.864 236.4-191.568 46.32-89.52 55.024-191.696 24.48-287.728-30.512-96.048-96.656-174.448-186.176-220.816-15.232-7.888-21.168-26.608-13.28-41.872 5.52-10.64 16.336-16.768 27.6-16.768 4.8 0 9.664 1.12 14.272 3.488 104.272 53.936 181.248 145.28 216.816 257.12 35.536 111.904 25.392 230.928-28.576 335.152z" />
+<glyph unicode="&#xe099;" glyph-name="reload" d="M511.28 960c-255.808 0-463.92-208.128-463.92-463.936 0-240.448 185.296-441.536 423.568-462.096l-91.856-46.56c-11.344-6.224-18.096-20.224-11.376-31.28l3.248-8.4c6.752-11.056 21.376-14.976 32.688-8.784l153.312 78.496c0.192 0.128 0.4 0.096 0.592 0.224l10.288 5.632c5.68 3.12 9.44 8.224 10.944 13.904 1.568 5.68 0.848 12-2.528 17.504l-6.096 10c-0.096 0.192-0.288 0.32-0.4 0.496l-94.688 147.968c-6.72 11.056-21.312 14.976-32.688 8.784l-7.44-5.184c-11.344-6.192-12.096-22.192-5.376-33.216l55.872-86.672c-0.304 0.016-0.576 0.128-0.864 0.144-209.28 13.728-373.2 189.040-373.2 399.040 0 220.528 179.408 399.936 399.92 399.936 220.544 0 400.96-179.408 400.96-399.936 0-126.976-58.32-243.6-160-319.968-14.128-10.624-16.976-30.688-6.368-44.816 10.624-14.16 30.688-16.976 44.816-6.368 117.936 88.592 185.568 223.872 185.568 371.152-0.016 255.808-209.152 463.936-464.976 463.936z" />
+<glyph unicode="&#xe09a;" glyph-name="settings" d="M960.496 544.944l-82.128 18.224c-6.4 20.48-14.784 40.080-24.4 58.928l44.432 74.032c16.592 26.512 24.976 65.52 0 90.512l-45.28 45.248c-24.976 24.992-67.152 20.496-92.624 2.832l-72.032-45.888c-18.688 9.696-38.224 18-58.528 24.56l-18.432 83.12c-5.504 30.48-32.16 63.488-67.504 63.488h-64c-35.344 0-57.008-33.504-64-64l-20.528-82.128c-21.68-6.912-42.496-15.744-62.336-26.208l-73.84 47.024c-25.456 17.664-67.648 22.16-92.624-2.832l-45.264-45.248c-24.992-25.008-16.608-64 0-90.512l46.752-77.92c-8.768-17.664-16.544-35.936-22.544-55.024l-82.112-18.224c-30.496-5.488-63.504-32.144-63.504-67.488v-64c0-35.344 33.504-57.008 64-64l83.152-20.784c5.744-17.632 12.928-34.56 21.056-50.976l-46.8-78c-16.592-26.496-24.976-65.504 0-90.496l45.28-45.248c24.976-25.008 67.152-20.496 92.624-2.848l74 47.152c19.952-10.528 40.88-19.44 62.704-26.336l20.48-81.904c7.008-30.496 28.656-64 64-64h64c35.344 0 62 33.008 67.504 63.504l18.464 83.344c20.096 6.496 39.376 14.688 57.84 24.256l72.192-46c25.472-17.664 67.664-22.16 92.624 2.848l45.28 45.248c24.976 25.008 16.592 64 0 90.496l-44.464 74.128c8.944 17.568 16.688 35.84 22.912 54.848l83.152 20.768c30.496 7.008 64 28.656 64 64v64c0 35.344-32.992 62-63.504 67.504zM960.032 417.952c-2.72-1.952-7.84-4.64-14.336-6.144l-118.656-29.632-11.008-33.632c-4.976-15.152-11.408-30.528-19.12-45.712l-16.064-31.568 62.688-104.528c4-6.4 5.872-12.128 6.432-15.504l-42.096-42.032c-4.064 1.28-8.688 2.944-10.912 4.464l-105.344 67.184-32.752-16.944c-15.776-8.192-31.968-14.976-48.096-20.192l-34.88-11.28-26.368-119.12c-1.216-6.368-4.624-11.504-6.96-13.344h-57.6c-1.952 2.72-4.624 7.84-6.112 14.32l-29.456 117.808-34.096 10.816c-17.568 5.536-35.088 12.912-52.144 21.904l-32.912 17.376-105.36-67.152c-4.304-2.912-8.912-4.56-13.088-4.56l-41.968 40.848c0.56 3.312 2.304 8.784 5.792 14.368l65.456 109.056-15.568 31.344c-7.264 14.784-13.024 28.656-17.504 42.4l-10.992 33.664-117.488 29.376c-7.392 1.68-12.736 4.432-15.52 6.4v59.504c0.032-0.016 0.080-0.032 0.144-0.032 1.072 0 6.336 3.744 10.72 4.544l120.72 26.736 11.088 35.28c4.512 14.368 10.672 29.344 18.816 45.776l15.568 31.36-64.768 107.92c-4.016 6.432-5.872 12.16-6.432 15.52l42.080 42.064c4.080-1.312 8.672-2.96 10.88-4.48l107.312-68.4 32.88 17.344c16.88 8.896 34.336 16.24 51.904 21.824l34.016 10.832 29.184 116.768c1.696 7.392 4.416 12.736 6.4 15.52h59.488c-0.432-0.656 3.68-6.24 4.528-10.864l26.88-121.408 34.848-11.264c16.336-5.28 32.752-12.16 48.72-20.448l32.752-17.008 103.152 65.712c4.32 2.944 8.944 4.576 13.088 4.576l42-40.816c-0.56-3.328-2.32-8.816-5.808-14.416l-63.344-105.488 16.16-31.616c8.72-17.056 15.376-33.056 20.32-48.928l11.056-35.344 118.288-26.256c7.152-1.328 12.72-5.456 13.904-7.696l-0.512-56.8zM512.432 640.32c-106.272 0-192.736-86.288-192.736-192.32 0-106.016 86.464-192.304 192.736-192.304s192.736 86.288 192.736 192.304c0 106.032-86.464 192.32-192.736 192.32zM512 320c-70.576 0-128 57.424-128 128 0 70.592 57.424 128 128 128 70.592 0 128-57.408 128-128 0-70.576-57.424-128-128-128z" />
+<glyph unicode="&#xe09b;" glyph-name="star" d="M512 882.512l137.472-285.088 312.608-46.464-226.416-225.84 7.616-45.312 45.28-270.16-276.608 148.784-276.592-148.848 45.296 270.224 7.584 45.312-226.336 225.872 312.592 46.464 20.544 42.544 116.96 242.512zM511.984 944.448c-28.656 0-54.784-16.176-66.976-41.456l-115.904-240.64-266.704-39.664c-27.392-4.096-50.144-22.8-58.976-48.384-8.816-25.664-2.144-53.904 17.2-73.152l195.408-195.2-45.328-270.656c-4.56-27.28 7.232-54.624 30.368-70.576 12.72-8.736 27.664-13.152 42.624-13.152 12.32 0 24.64 2.992 35.792 8.976l232.496 125.184 232.512-125.184c11.184-5.984 23.504-8.976 35.776-8.976 14.96 0 29.904 4.416 42.656 13.152 23.104 15.952 34.912 43.296 30.32 70.576l-45.344 270.656 195.504 195.2c19.344 19.248 25.968 47.504 17.152 73.152-8.848 25.616-31.6 44.32-58.976 48.384l-266.656 39.664-115.968 240.64c-12.112 25.312-38.256 41.456-66.976 41.456v0z" />
+<glyph unicode="&#xe09c;" glyph-name="symble-female" d="M623.696 960.224c-220.912 0-400-179.072-400-400 0-98.512 35.68-188.672 94.736-258.368l-127.312-128.096-135.264 136.544c-12.48 12.496-32.752 12.496-45.248 0s-12.496-32.752 0-45.248l135.392-136.688-136.352-137.184c-12.496-12.496-12.496-32.784 0-45.248 12.48-12.496 32.752-12.496 45.248 0l136.144 136.992 136.464-137.76c12.496-12.496 32.752-12.496 45.248 0s12.496 32.752 0 45.248l-136.608 137.904 127.408 128.192c69.952-59.968 160.768-96.288 260.128-96.288 220.912 0 400 179.088 400 400 0.016 220.928-179.072 400-399.984 400zM623.696 223.68c-185.856 0-336.528 150.688-336.528 336.544s150.672 336.528 336.528 336.528 336.528-150.672 336.528-336.528c0.016-185.856-150.656-336.544-336.528-336.544z" />
+<glyph unicode="&#xe09d;" glyph-name="symbol-male" d="M1023.296 937.344c0.144 6.48-1.376 12.288-5.584 16.432-4.144 4.176-9.952 6.72-16.4 6.528l-11.696-0.272c-0.224 0-0.384-0.080-0.64-0.112l-293.504 1.024c-12.928-0.288-23.616-10.992-23.92-23.92l-0.032-16.432c1.968-15.248 13.952-24.16 26.88-23.872l215.216-0.432-256.144-254.592c-69.488 58.24-159.008 93.36-256.768 93.36-220.928 0-400-179.072-400-400 0-220.912 179.072-400 400-400 220.912 0 400 179.088 400 400 0 100.112-36.864 191.568-97.664 261.712l256.896 255.312-0.944-219.152c-0.304-12.928 9.952-24.176 22.896-23.888l16.416 0.032c12.96 0.304 23.648 8 23.92 20.928l0.672 295.008c0 0.24-0.88 0.4-0.88 0.624l1.28 11.712zM737.232 335.056c0-185.856-150.672-336.528-336.544-336.528-185.856 0-336.528 150.672-336.528 336.528s150.672 336.528 336.528 336.528c185.872 0.016 336.544-150.656 336.544-336.528z" />
+<glyph unicode="&#xe09e;" glyph-name="target" d="M992 480h-97.44c-15.392 186.528-164.048 335.040-350.56 350.464v97.536c0 17.664-14.336 32-32 32s-32-14.336-32-32v-97.536c-186.496-15.424-335.168-163.936-350.576-350.464h-97.424c-17.664 0-32-14.336-32-32s14.336-32 32-32h97.424c15.408-186.512 164.080-335.040 350.576-350.464v-97.536c0-17.664 14.336-32 32-32s32 14.336 32 32v97.536c186.512 15.424 335.168 163.952 350.56 350.464h97.44c17.664 0 32 14.336 32 32s-14.336 32-32 32zM480 766.416v-286.416h-286.448c15.008 151.2 135.248 271.408 286.448 286.416zM193.552 416h286.448v-286.416c-151.2 15.008-271.44 135.216-286.448 286.416zM544 129.584v286.416h286.448c-15.008-151.2-135.248-271.408-286.448-286.416zM544 480v286.416c151.2-15.008 271.44-135.216 286.448-286.416h-286.448z" />
+<glyph unicode="&#xe09f;" glyph-name="volume-1" d="M654.768 894.096c-10.432 5.552-23.088 4.928-32.912-1.696l-321.088-252.112-106.624-0.080c-54.512 0-98.88-38.656-98.88-86.4l1.712-211.136c0-47.536 44.352-86.224 98.864-86.224l106.592-0.064 319.392-252.752c5.376-3.632 11.632-5.472 17.904-5.472 5.152 0 10.32 1.248 15.008 3.744 10.464 5.536 17.008 16.4 17.008 28.256v835.68c-0.016 11.824-6.544 22.688-16.976 28.256zM607.728 90.368l-277.6 224.528c-5.28 3.568-11.52 5.472-17.888 5.472l-116.384 0.064c-20.544 0-34.88 11.712-34.88 22.464l-1.712 211.152c0 10.48 14.336 22.16 34.896 22.16l116.4 0.080c6.352 0 12.576 1.904 17.856 5.456l279.312 224v-715.376zM789.824 612.368c-17.712 2.928-33.936-8.864-36.848-26.304-2.912-17.424 8.88-33.92 26.288-36.832 50.32-8.4 85.472-52.304 85.472-106.752 0-51.84-36.368-96.688-86.496-106.688-17.344-3.44-28.592-20.288-25.12-37.632 3.024-15.216 16.368-25.744 31.344-25.744 2.064 0 4.192 0.192 6.288 0.624 79.968 15.904 138 87.184 138 169.44-0.016 85.024-58.448 156.464-138.928 169.888z" />
+<glyph unicode="&#xe0a0;" glyph-name="volume-2" d="M574.496 894.096c-10.432 5.552-23.088 4.928-32.912-1.696l-321.088-252.112-106.624-0.080c-54.512 0-98.88-38.656-98.88-86.4l1.712-211.136c0-47.536 44.352-86.224 98.864-86.224l106.592-0.064 319.392-252.752c5.376-3.632 11.632-5.472 17.904-5.472 5.152 0 10.32 1.248 15.008 3.744 10.464 5.536 17.008 16.4 17.008 28.256v835.68c0 11.824-6.528 22.688-16.976 28.256zM527.472 90.368l-277.6 224.528c-5.28 3.568-11.52 5.472-17.888 5.472l-116.384 0.064c-20.544 0-34.88 11.712-34.88 22.464l-1.712 211.152c0 10.48 14.336 22.16 34.896 22.16l116.4 0.080c6.352 0 12.576 1.904 17.856 5.456l279.312 224v-715.376zM848.464 442.496c0 85.008-58.432 156.432-138.912 169.872-17.712 2.928-33.936-8.864-36.848-26.304-2.912-17.424 8.88-33.92 26.288-36.832 50.32-8.4 85.472-52.304 85.472-106.752 0-51.84-36.368-96.688-86.496-106.688-17.344-3.44-28.592-20.288-25.12-37.632 3.024-15.216 16.368-25.744 31.344-25.744 2.064 0 4.192 0.192 6.288 0.624 79.952 15.936 137.984 87.216 137.984 169.456zM806 736.096c-16.528 6.16-35.008-2.24-41.152-18.8-6.192-16.56 2.224-34.992 18.784-41.168 96.528-36.016 161.376-129.904 161.376-233.632 0-103.776-64.848-197.84-161.312-234-16.56-6.224-24.944-24.656-18.752-41.184 4.816-12.88 17.008-20.784 29.968-20.784 3.744 0 7.536 0.656 11.216 2.032 121.344 45.504 202.88 163.632 202.88 293.936s-81.6 248.288-203.008 293.6z" />
+<glyph unicode="&#xe0a1;" glyph-name="volume-off" d="M575.536 894.096c-10.432 5.552-23.088 4.928-32.912-1.696l-321.104-252.112-106.624-0.080c-54.512 0-98.88-38.656-98.88-86.4l1.712-211.136c0-47.536 44.352-86.224 98.864-86.224l106.592-0.064 319.392-252.752c5.376-3.632 11.632-5.472 17.904-5.472 5.152 0 10.32 1.248 15.008 3.744 10.464 5.536 17.008 16.4 17.008 28.256v835.68c0 11.824-6.528 22.688-16.96 28.256zM528.496 90.368l-277.6 224.528c-5.28 3.568-11.52 5.472-17.888 5.472l-116.384 0.064c-20.544 0-34.88 11.712-34.88 22.464l-1.728 211.152c0 10.48 14.336 22.16 34.896 22.16l116.4 0.080c6.352 0 12.576 1.904 17.856 5.456l279.328 224v-715.376zM894 447.488l104.592 105.84c12.496 12.496 12.496 32.752 0 45.248-12.464 12.496-32.752 12.496-45.248 0l-104.336-105.568-104.336 105.568c-12.464 12.496-32.752 12.496-45.248 0s-12.496-32.752 0-45.248l104.592-105.84-103.6-104.816c-12.464-12.48-12.496-32.752 0-45.248s32.784-12.496 45.28 0l103.312 104.544 103.312-104.544c12.496-12.496 32.752-12.496 45.248 0s12.496 32.768 0 45.248l-103.568 104.816z" />
+<glyph unicode="&#xe600;" glyph-name="phone" data-tags="phone" d="M262.2 923c37.4-51.6 82-118.2 133.6-199.6 13-22 11-48.4-5.8-79.4-6.4-13-22.6-42.6-48.4-89.2 28.4-40 71.6-89.2 129.8-147.2s106.6-101.4 145.2-129.8c46.4 27.2 76.2 43.8 89.2 50.4 16.8 9 33 13.6 48.4 13.6 11.6 0 22-2.6 31-7.8 59.4-36.2 126.6-80.8 201.4-133.6 14.2-10.4 22.2-24.6 24.2-42.6 2-18.2-3.6-37.4-16.4-58.2-6.4-9-16.8-22.2-31-39.8-14.2-17.4-35.6-39.4-64-65.8s-51.6-39.8-69.8-39.8h-2c-136.6 5.4-305 107.8-504.4 307.2-199.6 199.6-302 367.8-307.2 504.6 0 18 13.2 41.6 39.8 70.8 26.4 29 48.2 50 64.8 63 16.8 12.8 31 23.2 42.6 31 14.2 10.4 30.4 15.4 48.4 15.4 22.2 0 38.8-7.8 50.6-23.2zM198.2 882.4c-27.2-19.4-52.6-41.2-76.6-65-23.8-24-37.8-41.6-41.6-53.2 5.2-120.2 101-273.2 287.6-459.2s340-282.2 460-288.6c10.4 3.8 27.4 18 51.4 42.6s45.6 50.4 64.8 77.4c3.8 5.2 5.2 9.6 3.8 13.6-77.4 54.2-142 97.4-193.8 129.8-5.2 0-11.6-2-19.4-5.8-11.6-6.4-40.6-22.6-87.2-48.4l-33-19.4-33 21.4c-42.6 29.6-94.2 75.6-155 137.6-60.6 60.6-105.8 112.4-135.6 155l-23.2 31 19.4 34.8c25.8 46.4 42 75.6 48.4 87.2 3.8 7.8 5.8 14.2 5.8 19.4-46 73.4-88.6 138-127.4 193.6h-2c-5 0-9.6-1.4-13.4-3.8z" />
+<glyph unicode="&#xe601;" glyph-name="menu" data-tags="Menu" d="M27 766.4c-8.2 8.2-12.2 18.6-12.2 31.2s4 23 12.2 31.2c8.2 8.2 18.6 12.2 31.2 12.2h912.4c12.6 0 23-4 31.2-12.2s12.2-18.6 12.2-31.2c0-12.6-4-23-12.2-31.2s-18.6-12.2-31.2-12.2h-912.4c-12.6 0-23 4-31.2 12.2zM1001.8 481.2c8.2-8.2 12.2-18.6 12.2-31.2s-4-23-12.2-31.2c-8.2-8.2-18.6-12.2-31.2-12.2h-912.4c-12.6 0-23 4-31.2 12.2s-12.2 18.6-12.2 31.2c0 12.6 4 23 12.2 31.2s18.6 12.2 31.2 12.2h912.4c12.6 0 23-4 31.2-12.2zM1001.8 133.8c8.2-8.2 12.2-18.6 12.2-31.2s-4-23-12.2-31.2c-8.2-8.2-18.6-12.2-31.2-12.2h-912.4c-12.6 0-23 4-31.2 12.2s-12.2 18.6-12.2 31.2c0 12.6 4 23 12.2 31.2s18.6 12.2 31.2 12.2h912.4c12.6 0 23-4.2 31.2-12.2z" />
+<glyph unicode="&#xe602;" glyph-name="options-vertical" data-tags="options vertical" d="M388.8 63.6c0 9 0 18.2 0 27.2 0.6 2.2 1.6 4.2 2 6.4 8.8 57.2 56.4 102.4 112.2 106.2 62.4 4.4 115.2-31.2 132.4-89.2 2.2-7.6 3.8-15.6 5.8-23.4 0-9 0-18.2 0-27.2-0.6-1.8-1.6-3.4-1.8-5.4-8.6-52.8-46.6-93-98.6-104.4-4-0.8-8-2-12-3-9 0-18.2 0-27.2 0-1.8 0.6-3.6 1.6-5.4 1.8-52 8.4-91.6 45.4-103.6 96.8-1.2 5-2.6 9.6-3.8 14.2zM641.2 832.4c0-9 0-18.2 0-27.2-0.6-2.2-1.6-4.2-1.8-6.4-9-57.6-56.8-102.6-113.2-106.2-62.2-4-114.8 32-131.8 90.2-2.2 7.4-3.8 15-5.6 22.4 0 9 0 18.2 0 27.2 0.6 1.8 1.6 3.4 2 5.2 9.6 52 39.8 86 90.2 102.2 6.6 2.2 13.6 3.4 20.4 5.2 9 0 18.2 0 27.2 0 1.8-0.6 3.6-1.6 5.4-1.8 52.2-8.6 91.6-45.4 103.6-96.8 1.2-4.8 2.4-9.4 3.6-14zM641.2 461.6c0-9 0-18.2 0-27.2-0.6-2.2-1.6-4.2-2-6.4-9-57.4-58.6-103.6-114.6-106-63-2.8-116.4 35.2-131.4 93.8-1.6 6.2-3 12.4-4.4 18.6 0 9 0 18.2 0 27.2 0.6 2.2 1.6 4.2 2 6.4 8.8 57.4 58.6 103.6 114.6 106.2 63 3 116.4-35.2 131.4-93.8 1.6-6.4 3-12.6 4.4-18.8z" />
+<glyph unicode="&#xe603;" glyph-name="options" data-tags="options" d="M899.4 321.8c-9 0-18.2 0-27.2 0-2.2 0.6-4.2 1.6-6.4 2-57.2 8.8-102.4 56.4-106.2 112.2-4.4 62.4 31.2 115.2 89.2 132.4 7.6 2.2 15.6 3.8 23.4 5.8 9 0 18.2 0 27.2 0 1.8-0.6 3.4-1.6 5.4-1.8 52.8-8.6 93-46.6 104.4-98.6 0.8-4 2-8 3-12 0-9 0-18.2 0-27.2-0.6-1.8-1.6-3.6-1.8-5.4-8.4-52-45.4-91.6-96.8-103.6-5-1.2-9.6-2.6-14.2-3.8zM130.6 574.2c9 0 18.2 0 27.2 0 2.2-0.6 4.2-1.6 6.4-1.8 57.6-9 102.6-56.8 106.2-113.2 4-62.2-32-114.8-90.2-131.8-7.4-2.2-15-3.8-22.4-5.6-9 0-18.2 0-27.2 0-1.8 0.6-3.4 1.6-5.2 2-52 9.6-86 39.8-102.2 90.2-2.2 6.6-3.4 13.6-5.2 20.4 0 9 0 18.2 0 27.2 0.6 1.8 1.6 3.6 1.8 5.4 8.6 52.2 45.4 91.6 96.8 103.6 4.8 1.2 9.4 2.4 14 3.6zM501.4 574.2c9 0 18.2 0 27.2 0 2.2-0.6 4.2-1.6 6.4-2 57.4-9 103.6-58.6 106-114.6 2.8-63-35.2-116.4-93.8-131.4-6.2-1.6-12.4-3-18.6-4.4-9 0-18.2 0-27.2 0-2.2 0.6-4.2 1.6-6.4 2-57.4 8.8-103.6 58.6-106.2 114.6-3 63 35.2 116.4 93.8 131.4 6.4 1.6 12.6 3 18.8 4.4z" />
+<glyph unicode="&#xe604;" glyph-name="arrow-down" data-tags="arrow-down" d="M8.2 684.6c0 8.6 3.4 17.4 10 24 13.2 13.2 34.8 13.2 48 0l451.8-451.8 445.2 445.2c13.2 13.2 34.8 13.2 48 0s13.2-34.8 0-48l-469.2-469.4c-13.2-13.2-34.8-13.2-48 0l-475.8 475.8c-6.8 6.8-10 15.4-10 24.2z" />
+<glyph unicode="&#xe605;" glyph-name="arrow-left" data-tags="arrow-left" d="M752.145 960c8.685 0 17.572-3.434 24.237-10.099 13.33-13.33 13.33-35.143 0-48.473l-456.256-456.458 449.591-449.591c13.33-13.33 13.33-35.143 0-48.473s-35.143-13.33-48.473 0l-473.827 473.827c-13.33 13.33-13.33 35.143 0 48.473l480.492 480.694c6.665 6.665 15.552 10.099 24.237 10.099z" />
+<glyph unicode="&#xe606;" glyph-name="arrow-right" data-tags="arrow-right" d="M271.653-63.192c-8.685 0-17.572 3.434-24.237 10.099-13.33 13.33-13.33 35.143 0 48.473l456.256 456.458-449.591 449.591c-13.33 13.33-13.33 35.143 0 48.473s35.143 13.33 48.473 0l473.827-473.827c13.33-13.33 13.33-35.143 0-48.473l-480.492-480.694c-6.665-6.665-15.552-10.099-24.237-10.099z" />
+<glyph unicode="&#xe607;" glyph-name="arrow-up" data-tags="arrow-up" d="M8.2 208.6c0-8.6 3.4-17.4 10-24 13.2-13.2 34.8-13.2 48 0l451.8 451.8 445.2-445.2c13.2-13.2 34.8-13.2 48 0s13.2 34.8 0 48l-469.2 469.4c-13.2 13.2-34.8 13.2-48 0l-475.8-475.8c-6.8-6.8-10-15.4-10-24.2z" />
+<glyph unicode="&#xe608;" glyph-name="paypal" data-tags="paypal" d="M318.753 104.566h-215.653c-8.752 0-17.154 3.851-22.756 10.678s-7.877 15.579-6.302 24.331l138.284 752.159c8.227 41.135 42.010 68.442 84.371 68.442h331.881c133.383 0 223.179-85.246 223.179-212.152 0-127.956-88.222-366.89-300.548-366.89h-145.11l-58.464-253.637c-3.151-13.478-15.054-22.931-28.882-22.931zM138.634 163.556h156.663l58.289 253.637c3.151 13.478 15.054 22.931 28.882 22.931h168.741c168.566 0 241.384 203.75 241.384 307.725 0 94.348-62.84 152.987-164.015 152.987h-331.881c-8.227 0-22.756-2.626-26.256-20.48l-131.807-716.8zM421.153-64.175h-215.653c-8.752 0-16.979 3.851-22.581 10.503s-8.052 15.579-6.477 24.156l27.657 157.538c2.801 16.104 18.029 26.782 34.133 23.981s26.782-18.204 23.981-34.133l-21.53-122.88h156.663l55.839 256.088c2.976 13.653 15.054 23.281 28.882 23.281h168.741c168.566 0 241.384 203.75 241.384 307.725 0 67.742-28.532 114.478-84.546 138.809-14.879 6.477-21.88 23.981-15.229 38.859 6.477 15.054 23.981 21.88 38.859 15.404 77.369-33.608 120.079-102.225 120.079-193.072 0-127.956-88.222-366.89-300.548-366.89h-144.935l-55.839-256.088c-2.976-13.653-15.054-23.281-28.882-23.281zM459.837 546.899h-58.114c-8.752 0-16.979 3.851-22.756 10.678-5.601 6.652-8.052 15.579-6.477 24.156l38.859 215.653c2.451 14.003 14.704 24.331 29.057 24.331h93.998c35.534 0 63.891-11.378 81.92-32.733 19.605-23.281 26.081-56.364 19.080-98.549-14.178-100.299-66.691-143.535-175.568-143.535zM437.082 606.064h22.756c87.871 0 108.526 31.508 117.279 93.473 2.801 17.329 4.026 39.56-5.776 51.288-8.227 9.802-24.681 11.728-36.934 11.728h-69.317l-28.007-156.488z" />
+<glyph unicode="&#xe609;" glyph-name="social-instagram" data-tags="social-instagram" d="M511.4 191.8c-124.8 0-226.4 101.6-226.4 226.4s101.6 226.4 226.4 226.4c124.8 0 226.4-101.6 226.4-226.4 0.2-124.8-101.4-226.4-226.4-226.4zM511.4 571.2c-84.4 0-153-68.6-153-153s68.6-153 153-153c84.4 0 153 68.6 153 153s-68.6 153-153 153zM802.6-49.4h-582.2c-121.6 0-220.4 98.8-220.4 220.4v553.6c0 121.6 98.8 220.4 220.4 220.4h582.2c121.6 0 220.4-98.8 220.4-220.4v-553.6c0-121.6-98.8-220.4-220.4-220.4zM220.4 871.6c-81 0-147-66-147-147v-553.6c0-81 66-147 147-147h582.2c81 0 147 66 147 147v553.6c0 81-66 147-147 147h-582.2zM358.4 507.6h-309.4c-20.2 0-36.8 16.4-36.8 36.8s16.4 36.8 36.8 36.8h309.6c20.2 0 36.8-16.4 36.8-36.8s-16.6-36.8-37-36.8zM977.4 507.6h-313c-20.2 0-36.8 16.4-36.8 36.8s16.4 36.8 36.8 36.8h313c20.2 0 36.8-16.4 36.8-36.8s-16.4-36.8-36.8-36.8zM716.4 761.4c0 20.2 16.6 36.8 36.8 36.8h62.4c20.2 0 36.8-16.6 36.8-36.8v-62.4c0-20.2-16.6-36.8-36.8-36.8h-62.4c-20.2 0-36.8 16.6-36.8 36.8v62.4z" />
+<glyph unicode="&#xe60a;" glyph-name="social-linkedin" data-tags="social-linkedin" d="M997.795-42.431h-208.025c-14.715 0-26.608 11.893-26.608 26.608v335.017c0 114.898-59.263 114.898-78.816 114.898-52.611 0-74.986-41.524-82.243-59.465-3.427-8.063-5.039-21.77-5.039-40.92v-349.732c0-14.715-11.893-26.608-26.608-26.608h-208.227c-7.055 0-13.909 2.822-18.948 7.861s-7.861 11.893-7.66 18.948c0 5.644 2.822 567.433 0 624.882-0.403 7.257 2.217 14.312 7.257 19.553s11.893 8.265 19.351 8.265h208.227c14.715 0 26.608-11.893 26.608-26.608v-15.723c35.074 31.244 85.669 57.046 161.058 57.046 166.702 0 266.28-115.301 266.28-308.409v-359.005c0-14.715-11.893-26.608-26.608-26.608zM816.378 10.784h155.011v332.397c0 162.268-77.606 255.194-213.065 255.194-90.507 0-134.45-45.153-162.066-86.476-3.225-10.885-13.506-18.948-25.6-18.948h-1.411c-9.676 0-18.545 5.241-23.181 13.707-3.628 6.652-4.435 14.312-2.016 21.367v55.836h-154.608c1.411-111.068 0-470.476-0.403-572.876h154.809v322.923c0 26.809 2.822 46.161 8.869 60.876 23.383 57.852 72.567 92.724 131.427 92.724 83.855 0 132.031-61.279 132.031-168.113v-308.611zM247.131-42.431h-208.227c-14.715 0-26.608 11.893-26.608 26.608v626.091c0 14.715 11.893 26.608 26.608 26.608h208.227c14.715 0 26.608-11.893 26.608-26.608v-626.091c0-14.715-11.893-26.608-26.608-26.608zM65.512 10.784h155.011v572.876h-155.011v-572.876zM143.118 669.128h-1.411c-82.041 0-141.707 56.844-141.707 135.055 0 78.009 60.674 134.854 144.529 134.854 82.444 0 141.304-55.231 142.917-134.249 0-78.816-60.674-135.66-144.328-135.66zM144.529 885.619c-54.627 0-91.313-32.857-91.313-81.638 0-47.975 36.283-81.638 88.491-81.638h1.411c54.425 0 91.112 32.857 91.112 81.638-1.008 49.386-36.283 81.638-89.701 81.638z" />
+<glyph unicode="&#xe60b;" glyph-name="social-pintarest" data-tags="social-pintarest" d="M886.796 608.541c-3.822 186.292-156.115 321.283-362.524 321.283-22.331 0-45.064-1.609-67.797-4.828-165.369-22.934-292.313-142.032-316.052-296.135-16.899-109.844 18.508-241.817 135.393-271.591l16.899-4.225 9.858 14.284c3.42 4.828 33.396 49.088 28.567 85.702-2.414 18.307-13.479 29.573-20.118 36.212-1.207 1.207-2.615 2.615-3.219 3.219-18.307 28.769-25.952 77.454-18.307 118.293 18.508 100.589 102.4 173.617 208.622 181.664 7.444 0.604 14.887 0.805 22.13 0.805 110.045 0 184.481-65.584 189.712-166.978 4.828-97.974-24.544-187.297-76.85-233.166l-3.42-3.018c-12.272-10.864-21.928-19.514-42.046-22.532-5.231-0.805-10.461-1.207-15.29-1.207-40.236 0-62.164 26.556-62.969 52.709-1.006 29.372 10.662 61.561 23.136 95.761 15.29 42.046 31.183 85.702 25.349 130.766-6.237 46.673-48.685 83.087-96.767 83.087-12.272 0-24.745-2.414-36.816-6.84-87.312-33.194-100.187-147.464-68.2-239.604-7.645-36.413-17.503-72.424-27.964-110.447-31.183-114.471-63.572-232.965-39.029-371.778l5.432-30.78 28.769 11.87c27.964 11.668 43.052 37.419 55.525 58.744 2.414 4.024 4.828 8.047 7.041 11.87 40.839 64.176 63.774 140.825 81.477 215.261 44.058-33.194 89.122-43.857 153.298-36.816 177.44 19.313 269.58 209.427 266.16 378.417zM406.582 478.78l1.408 7.041-2.615 6.84c-27.36 72.223-21.124 160.138 36.615 182.067 6.237 2.414 12.674 3.621 18.911 3.621 23.538 0 44.259-17.301 47.076-39.431 4.426-32.993-8.852-68.803-22.733-107.027-13.479-37.017-27.561-75.241-26.153-114.471 1.609-49.088 41.845-101.193 113.062-101.193 7.444 0 15.088 0.604 22.934 1.811 34.804 5.231 54.117 22.331 67.998 34.804l3.219 2.817c63.371 55.727 99.382 160.541 93.749 273.402-6.84 136.399-115.678 224.918-265.556 213.652-129.358-9.858-231.356-99.181-254.089-222.504-9.858-53.111 0.402-115.275 25.349-154.505 3.018-4.627 6.438-8.248 9.657-11.467 2.213-2.414 5.834-5.834 6.035-7.444 0.805-6.84-3.42-20.923-10.662-34.804-72.827 30.982-93.347 128.956-80.874 209.628 20.118 131.973 129.961 234.172 273.402 254.089 20.52 2.817 41.040 4.225 60.957 4.225 177.842 0 309.212-114.471 312.229-272.195 3.018-146.861-73.631-311.425-221.095-327.72-10.059-1.006-19.514-1.609-28.366-1.609-53.514 0-82.282 18.508-116.885 52.91l-32.189 31.987-9.858-44.259c-18.911-84.093-40.839-172.008-84.294-240.409-2.817-4.426-5.633-9.254-8.45-14.284-1.006-1.811-2.012-3.621-3.219-5.231-8.047 107.429 18.508 204.8 44.461 299.555 10.662 39.23 21.928 80.069 29.976 120.104z" />
+<glyph unicode="&#xe60c;" glyph-name="social-github" data-tags="social-github" d="M158.6 437.4c-11.6 0-22.4 7.4-26 19-29.4 91.8-33.6 254 29.4 327.6-14 53.2-6.2 125.2 19.6 163.8 5.4 8 14.2 12.6 24 12.2 73.4-3.2 121.2-33.8 163.2-61.8 59.8 15.6 118 21 187 17.2 17-1 33.8-4.8 48.6-8.2 14-3.2 28.4-6.6 36.8-5.8 7.6 0.8 21.2 10 32.2 17.6 10.2 7 21 14.2 32.2 19.2 32 14 60.8 20.4 99.6 21.8 15 0.4 27.8-11.2 28.4-26.4s-11.2-27.8-26.4-28.2c-32.2-1.2-53.8-5.8-79.6-17.2-6.6-3-14.8-8.4-23.4-14.4-17-11.6-36.4-24.8-58-26.8-17.4-1.6-35.4 2.4-54.4 7-13.2 3-27 6.2-39.2 7-67.4 3.8-123.4-2-181.4-18.6-7.6-2.2-15.8-1-22.6 3.6l-6.8 4.6c-36.6 24.2-71.2 47.4-121.8 53.6-12.6-32.2-14.2-85.6-1.6-117.2 4.4-10.8 1.2-23.4-7.6-30.8-49.4-42-55.6-190.6-26.2-282.8 4.6-14.4-3.4-29.8-17.8-34.4-2.8-1.2-5.6-1.6-8.2-1.6zM366.6 167.4c-2 0-4 0.2-6 0.6-14.8 3.2-24 17.8-20.8 32.6l1.8 7.8c8.4 38 16.2 68.6 25.4 91.4-112.2 23.4-194 76.8-232.8 152.4-6.8 13.4-1.6 30 11.8 36.8s30 1.6 36.8-11.8c35-68.2 117.4-114.4 232.2-130.2 11-1.6 20-9.6 22.8-20.2 2.8-10.8-1.2-22.2-10.2-28.8-5.8-5.2-16.4-27-32.6-101.2l-1.8-8c-2.8-12.6-14-21.4-26.6-21.4zM316.2-32.8c-1.8 0-3.4 0.2-5.2 0.6-14.8 3-24.6 16.8-21.6 31.6 5 25.4 22.8 36 33.4 42.2 7.2 4.2 9.4 5.8 10.6 8.6 6.2 13.2 4.6 47.4 3.2 74.8-0.6 11.6-1.2 23.4-1.4 34.8-63.4-11-132.2-14.4-168.6 45.8-7.2 12-11.8 24.2-16 35.2-4.8 12.4-8.8 23.2-15.4 31.2-9.6 11.6-7.8 28.8 3.8 38.4s28.8 8 38.4-3.8c12.2-15 18.6-31.8 24.2-46.6 3.6-9.6 7-18.6 11.6-26.2 19.6-32.4 62.4-30.4 144.8-13.8 8.6 1.8 17.4-0.8 23.8-6.6 6.4-6 9.6-14.6 8.6-23.2-2-17.4-0.8-40.2 0.2-62.2 2-38.6 3.8-75-8.4-100.8-8.8-18.6-23-27-32.4-32.4-2.6-1.6-6.6-3.8-7.4-4.8-1.8-13.4-13.2-22.8-26.2-22.8zM713.8-27.6c-9 0-17.6 4.4-23 12.4-2.2 3.6-5.4 5.8-11 9.6-8.8 6.2-20.8 14.6-29.8 32-16.2 31.8-13.6 78-11 126.8 1.6 30 3.2 61 0 85.4-2.8 20.6-10 29.8-20 42.6-6.4 8.4-13.8 17.8-19.6 30.2-3.8 8.2-3.2 17.6 1.2 25.4 4.6 7.8 12.6 12.8 21.6 13.4 102.6 7.6 183.6 56 222.6 132.6 6.8 13.4 23.2 18.8 36.8 12 13.4-6.8 18.8-23.2 12-36.8-41.6-82.2-121-137.6-221.4-156.6 9-13.2 17.8-30 21.2-55.8 4-29.4 2.2-63 0.4-95.4-2-37.6-4.2-80.2 5.2-99 2.4-4.8 5.4-7 12.2-11.8 7.4-5 17.4-12 25.6-24.6s4.6-29.6-8-37.8c-4.6-3.2-9.8-4.6-15-4.6zM869.2 443c-2.4 0-5 0.4-7.4 1-14.6 4.2-23 19.2-18.8 33.8 30.2 106.2 9.6 244.2-43.2 289.2-8.6 7.4-11.8 19.2-8 29.8 12.8 36.6 4.2 91.6-10.4 124.8-6 13.8 0.2 30 14 36s30-0.2 36-14c16.8-38 27.8-97.8 16.8-147.6 65.2-72 78-225.6 47.4-333.2-3.6-12-14.4-19.8-26.4-19.8zM623.6-64.4c-5 0-10.2 1.4-14.8 4.4-5 3.2-20 12.8-47.8 56-12.6 19.6-21.8 117.2-27.4 290.4-0.4 15 11.4 27.8 26.4 28.2s27.8-11.4 28.2-26.4c3.6-113.4 12-242 19.6-264 20.4-31.6 30-38 30.4-38.2 12.6-8.2 16.4-25 8.2-37.8-5-8.2-13.8-12.6-22.8-12.6zM416.2-64.4c-9 0-17.8 4.4-23 12.6-8.2 12.6-4.4 29.6 8.2 37.8 0.4 0.2 10 6.6 30.4 38.2 7.6 21.8 15.8 150.6 19.6 264 0.4 15 13.2 27 28.2 26.4 15-0.4 27-13.2 26.4-28.2-5.6-173.2-14.8-271-27.4-290.4-27.8-43-42.8-52.8-47.8-56-4.4-3-9.6-4.4-14.6-4.4z" />
+<glyph unicode="&#xe60d;" glyph-name="social-gplus" data-tags="social-gplus" d="M976.077 812.544h-82.739v76.39c0 23.142-13.926 40.346-37.069 40.346h-59.802c-23.142 0-46.49-17.203-46.49-40.346v-76.39h-73.114c-23.142 0-45.67-20.275-45.67-43.418v-59.802c0-23.142 22.528-42.189 45.67-42.189h73.114v-77.414c0-23.142 23.347-39.322 46.49-39.322h59.802c23.142 0 37.069 16.179 37.069 39.322v77.414h82.739c23.142 0 48.333 19.046 48.333 42.189v59.802c0 23.142-25.19 43.418-48.333 43.418zM684.442 720.384v38.912h116.736v118.784h38.912v-118.784h131.072v-38.912h-131.072v-118.784h-38.912v118.784h-116.736zM522.035 418.918l-5.939 4.301c-39.117 29.082-50.381 41.574-53.658 46.49 0.41 8.192 3.277 14.541 35.84 39.936 60.621 47.514 92.774 106.906 92.774 171.827 0 40.55-9.011 78.438-26.010 110.592 3.277 1.843 6.144 4.301 8.806 7.168l57.344 60.006c7.987 7.987 12.493 17.613 12.493 28.877 0 23.142-18.842 41.165-41.984 41.165h-259.482c-153.6 0-283.443-111.616-283.443-244.941 0-129.434 82.944-222.822 207.667-236.134-0.205-3.072-0.41-5.939-0.41-9.011 0-9.421 1.024-18.432 3.277-27.238-69.018-5.53-133.53-31.334-182.682-73.114-54.886-46.694-86.426-108.954-86.426-171.008 0-116.736 134.554-201.318 319.898-201.318 90.112 0 169.165 24.166 228.762 69.632 57.754 44.032 90.726 105.267 90.726 167.936-0.205 96.051-28.672 148.070-117.555 214.835zM352.256 381.030c-21.299 20.685-34.406 34.202-34.406 59.597 0 14.336 4.301 29.491 12.698 45.466l8.192 15.36-17.613-1.434c-9.421-0.614-17.203-1.024-24.371-1.024-111.206 0-186.163 74.342-186.163 185.754 0 103.219 108.134 193.331 231.629 193.331h236.544l-39.322-38.912h-100.762l31.949-18.842c43.008-24.576 68.608-76.595 68.608-138.445 0-49.152-24.576-93.184-72.909-131.072-44.851-35.021-55.91-51.814-55.91-85.402 0-25.805 36.864-55.296 74.547-83.354l5.734-4.301c82.125-61.645 96.87-98.918 96.87-173.056 0-91.341-100.147-185.754-267.674-185.754-155.443 0-268.083 62.874-268.083 149.504 0 93.389 98.918 193.536 246.374 193.536 8.397 0 16.384 2.048 24.166 2.253 7.578 0 15.155 2.253 22.733 2.253h24.166l-16.998 14.541zM329.728 350.72c-108.134 0-199.68-70.246-199.68-153.395 0-86.835 83.149-155.034 189.235-155.034 171.418 0 207.258 82.125 207.258 150.938 0 10.035-1.229 20.275-3.686 30.515-10.65 41.984-47.309 66.765-93.798 98.099-7.578 5.12-15.565 10.445-23.757 16.179l-2.458 1.229c-22.323 7.168-46.080 11.059-70.451 11.264l-2.662 0.205zM381.542 291.738c6.349-4.506 12.698-8.602 18.842-12.698 38.707-26.214 66.765-45.261 72.704-67.994 1.434-5.734 2.048-11.878 2.048-17.818 0-42.598-16.179-99.123-155.648-99.123-77.005 0-137.421 45.261-137.421 103.219 0 54.067 69.018 101.376 147.661 101.581h2.253c17.203-0.205 33.792-2.662 49.562-7.168zM426.394 551.629c25.19 28.672 35.226 73.933 28.262 127.181-13.107 99.123-78.029 175.514-151.347 177.766h-3.277c-30.515 0-57.549-12.288-78.029-35.84-28.262-32.154-40.346-81.51-33.382-135.373 12.083-92.57 80.077-164.25 157.901-166.707h3.891c30.925 0.205 57.139 11.469 75.981 32.973zM387.482 585.83c-8.806-10.035-21.299-15.155-37.069-15.155h-2.458c-52.634 1.638-99.942 53.862-108.134 121.651v0c-6.144 38.912 2.458 73.523 20.89 94.413 10.65 12.288 23.552 18.227 38.912 18.227h1.843c47.309-1.434 91.75-59.802 101.376-132.71 5.53-38.502-0.205-69.222-15.36-86.426z" />
+<glyph unicode="&#xe60e;" glyph-name="social-reddit" data-tags="social-reddit" d="M664.6 230.2c-9.6 2.6-21.2-0.8-35.4-10.2l-1.4-1.2c-23-23-64.8-34.6-124.2-34.6s-101.2 11.6-124.2 34.6c-9.6 9.6-29 9.6-38.6 0-10-10-10-28.6 0.6-39.2 42.6-35.6 96.2-52.2 168.4-52.2 75 0 135 18.8 169 52.8 4.8 4.8 7.6 11.8 7.6 19.2 0 6.8-2.4 13.4-6.4 18-4.6 8.4-10.8 11.6-15.4 12.8zM438.2 380.6c0 44.2-37.2 84.4-78.2 84.4s-78.2-40.2-78.2-84.4c0-42.4 35.8-78.2 78.2-78.2s78.2 35.8 78.2 78.2zM659.6 458.8c-42.4 0-78.2-35.8-78.2-78.2s35.8-78.2 78.2-78.2 78.2 35.8 78.2 78.2c0 42.4-35.8 78.2-78.2 78.2zM896.6 583.6c-25.6 0-55.6-11.6-75.8-28.6-68 43.2-159.8 70-267.2 77.8l50 167 140.2-33.6c4.2-51.8 50.4-95.6 102.8-95.6 55 0 103.2 48.2 103.2 103.2s-48.2 103.2-103.2 103.2c-37.8 0-76-23-92.8-54.6l-166.8 41.8-2.4 0.2c-11.4 0-27.2-10-28.2-26.6l-66-204.2c-105.2-1.2-208.6-29.2-292.4-79.4-25 15.6-49.6 23.2-75 23.2-67.2 0-122-54.6-122-122 0-42 20.2-79.4 56.2-99.4v-25.4c0-87.2 47-163.2 135.2-220 83-57.4 195.8-89 317.6-89s237.8 31.6 320.8 89c87.2 60.4 138.4 138.6 138.4 220v26c26 22.8 52.8 63.6 52.8 105.2-0.2 67.2-58 121.8-125.4 121.8zM962 455.4c0-11.4-6.4-27.6-17-39.6-12.6 33.4-36.4 65-74.6 99.4 7.6 3.2 16 5.4 26.4 5.4 38.4 0.2 65.2-26.8 65.2-65.2zM905.8 330.6c0-78-59-137.2-107.8-172.8-84.8-52.2-184.4-79.8-288.2-79.8-107.2 0-212.2 29-288 79.6-74.8 49.8-114.2 109.6-114.2 173s39.4 123.2 114.2 173c77 51.2 177 79.6 281.8 79.6 107.2 0 212.2-29 288-79.6 74.6-49.8 114.2-109.6 114.2-173zM150.4 517.6c-32.2-25.6-59.6-59.8-78.8-98.6-7.8 12.6-14 25-14 36.4 0 38.4 26.8 65.2 65.2 65.2 13 0.2 21 0 27.6-3zM800.2 773.6c0 26.2 20.4 46.6 46.6 46.6s46.6-20.4 46.6-46.6-20.4-46.6-46.6-46.6c-26.2 0.2-46.6 20.6-46.6 46.6z" />
+<glyph unicode="&#xe60f;" glyph-name="social-skype" data-tags="social-skype" d="M977.768 385.546c3.244 22.71 4.867 45.827 4.867 68.74 0 261.779-212.911 474.893-474.893 474.893-21.899 0-44.204-1.622-65.901-4.461-42.988 23.116-91.653 35.282-140.724 35.282-163.84 0-297.061-133.221-297.061-296.859 0-48.26 11.761-95.911 34.269-138.291-3.447-23.319-5.272-47.043-5.272-70.565 0-261.779 212.911-474.893 474.893-474.893 18.452 0 37.107 1.014 55.357 3.244 47.651-30.416 102.806-46.638 159.785-46.638 163.84 0 296.859 133.221 296.859 296.859 0 53.937-14.6 106.658-42.177 152.688zM884.898 71.046c-43.19-43.19-100.778-67.118-162.015-67.118-45.218 0-88.814 13.18-126.327 38.121l-16.83 11.152-20.074-2.636c-17.033-2.23-34.471-3.244-51.707-3.244-54.951 0-108.28 10.747-158.365 32.038-48.463 20.48-92.059 49.882-129.369 87.192s-66.712 80.906-87.192 129.369c-21.291 50.085-32.038 103.414-32.038 158.365 0 21.494 1.622 43.19 5.069 64.482l2.839 18.25-8.922 16.222c-18.25 33.457-27.983 71.376-27.983 109.903 0 61.237 23.724 118.622 67.118 162.015 43.19 43.19 100.778 67.118 162.015 67.118 39.135 0 77.865-10.139 111.728-29.199l16.222-9.125 18.452 2.636c19.872 3.042 40.352 4.461 60.426 4.461 54.951 0 108.28-10.747 158.365-32.038 48.463-20.48 92.059-49.882 129.369-87.192s66.712-80.906 87.192-129.369c21.291-50.085 32.038-103.414 32.038-158.365 0-21.088-1.622-42.379-4.867-63.265l-3.042-19.872 10.747-17.236c22.508-36.296 34.471-78.067 34.471-120.852-0.203-61.034-24.13-118.622-67.32-161.812zM578.712 498.49l-96.114 21.697c-52.315 11.761-78.676 29.808-78.676 54.546 0 17.641 7.3 32.038 21.697 42.988s34.877 16.425 61.034 16.425c30.821 0 55.965-6.489 75.026-19.669 5.678-3.65 17.844-15.613 36.499-35.688 12.166-12.977 25.347-19.669 39.338-19.669 14.397 0 26.969 4.055 37.107 12.166 10.341 8.111 15.411 19.263 15.411 33.255 0 32.241-21.291 60.223-63.873 83.948-40.149 22.508-84.15 33.66-132.005 33.66-55.154 0-100.981-11.761-137.48-35.080-42.582-27.577-63.873-67.32-63.873-119.027 0-70.97 41.163-117 123.488-137.885l129.774-32.849c32.646-8.314 49.071-25.955 49.071-52.518 0-17.844-7.908-32.849-23.724-45.421-17.236-13.991-40.149-21.088-68.537-21.088-33.052 0-59.615 7.908-79.69 23.724-4.664 3.244-17.438 17.641-38.324 43.393-12.977 15.816-27.78 23.724-44.002 23.724-13.991 0-25.549-4.461-34.674-13.383s-13.586-20.277-13.586-34.269c0-31.835 17.033-59.818 51.099-83.948 39.541-28.996 92.87-43.393 159.379-43.393 67.118 0 118.825 15.208 155.324 45.624 34.471 27.983 51.707 65.901 51.707 113.552 0.608 76.648-43.393 125.11-131.396 145.185z" />
+<glyph unicode="&#xe610;" glyph-name="social-behance" data-tags="social-behance" d="M376.743 545.159c15.924 9.676 23.987 27.213 23.987 51.805 0 27.213-10.683 45.556-31.849 54.425-17.739 6.047-40.718 9.071-68.132 9.071h-152.592v-129.613h167.106c24.995 0 45.757 4.838 61.48 14.312zM360.214 596.964c0-9.272-1.613-15.32-4.636-17.134-9.272-5.644-22.778-8.466-40.517-8.466h-126.387v48.58h112.076c22.375 0 40.517-2.217 53.82-6.45 2.016-1.008 5.644-2.62 5.644-16.529zM374.929 429.254c-13.707 6.249-33.26 9.676-57.852 9.877h-168.92v-156.019h166.904c24.995 0 44.75 3.427 58.658 10.28 25.6 12.699 38.501 37.291 38.501 72.97 0.202 30.236-12.296 51.402-37.291 62.891zM188.674 398.614h128.403c24.592-0.202 36.283-4.031 41.121-6.249 7.257-3.427 13.707-7.861 13.707-26.003 0-28.825-10.885-34.066-16.126-36.687-3.83-1.814-15.118-6.047-40.718-6.047h-126.387v74.986zM848.227 507.263c-17.94 15.32-40.315 23.181-66.721 23.181-28.624 0-51.402-8.265-67.326-24.794-15.924-16.328-26.003-38.702-29.833-66.52l-0.202-1.814h194.52l-0.202 1.613c-2.217 30.035-12.296 53.014-30.236 68.334zM743.609 478.035c3.427 3.427 12.699 12.094 37.896 12.094 15.723 0 28.422-4.031 38.702-12.094h-76.598zM1026.62 455.861c-6.047 38.904-19.553 73.776-40.113 103.811-18.948 28.22-42.532 50.394-70.551 66.52v160.857h-268.498v-162.469c-16.328-9.877-31.244-21.569-45.153-35.477-31.647-31.849-52.409-72.769-62.69-121.953-7.458 10.885-16.328 20.762-26.205 29.43 1.411 1.613 2.419 2.822 3.427 4.031 23.584 28.422 35.477 65.109 35.477 109.254 0 42.129-11.288 79.219-33.663 110.261-36.485 49.789-96.554 75.792-178.394 77.203h-343.887v-651.087h323.326c31.446 0 61.48 2.822 88.894 8.668 30.639 6.45 57.65 18.545 80.428 36.082 20.157 15.118 36.888 33.865 50.192 55.836 5.241 8.265 9.877 16.932 13.707 26.003 13.304-32.454 32.655-59.263 58.457-80.025 49.991-40.315 108.447-60.674 173.757-60.674 79.42 0 142.715 24.995 188.069 74.381 30.035 31.849 47.169 64.907 51.2 98.369l2.62 22.576h2.822l0.605 38.299c1.008 37.493-0.403 67.931-3.83 90.104zM442.457 494.161l-3.225-1.613 3.427-1.209c28.825-10.482 50.797-27.213 65.512-49.991s22.173-50.797 22.173-83.049c0-33.461-8.466-63.899-25.398-90.709-10.683-17.739-24.189-32.655-40.113-44.75-17.94-13.707-39.71-23.383-64.101-28.422-24.794-5.241-51.805-7.861-80.63-7.861h-283.213v570.255h301.757c69.14-1.008 118.728-21.367 147.351-60.472 17.335-23.987 26.003-53.014 26.003-86.677 0-34.469-8.869-62.488-26.205-83.452-9.877-11.691-24.391-22.375-43.339-32.050zM781.506 659.25c-10.079 0-19.956-0.403-29.43-1.411h-64.101v88.693h187.666v-88.693h-64.101c-9.877 0.806-19.956 1.411-30.035 1.411zM681.524 365.757c1.814-42.935 16.932-73.373 45.153-90.709 17.134-10.683 37.896-16.126 61.883-16.126 25.6 0 46.564 6.652 62.488 19.754 8.668 7.055 16.328 16.731 22.778 28.825h110.463c-3.427-24.189-16.932-48.983-40.517-73.978-37.493-40.718-90.709-61.279-158.438-61.279-55.836 0-105.827 17.335-148.359 51.805-42.532 34.268-64.101 91.112-64.101 168.517 0 72.567 19.553 129.209 57.852 167.912 32.655 32.857 74.18 52.006 123.565 57.046h55.030c25.6-2.62 49.386-8.668 70.954-18.343 29.228-13.102 53.619-34.066 72.567-62.287 17.134-24.794 28.422-54.224 33.461-87.080 3.024-19.351 4.233-46.967 3.628-82.444h-308.409v-1.613zM825.65 310.123c-8.869-7.257-20.964-10.683-37.090-10.683-16.529 0-29.631 3.225-40.315 9.877-5.241 3.225-11.691 8.063-16.932 17.739h107.036c-4.031-7.66-8.265-13.304-12.699-16.932z" />
+<glyph unicode="&#xe611;" glyph-name="social-foursqare" data-tags="social-foursqare" d="M145 884.2c0.8 1.8 1.6 3.8 2.2 5.6 14.4 46.2 45.8 69.8 94.4 69.8 115.2 0.2 230.4 0 345.6 0 66 0 131.8 0 197.8 0 14.4 0 28.6-1.2 42.4-5.2 29.2-8.4 46.4-30.2 50-60.2 4.2-34.2-4.2-66.8-11-99.6-30.2-146.6-60.8-293.2-91.2-440-3.4-16-7.4-31.8-15-46.4-17.4-33.4-47.4-43.8-82.6-44-50.6-0.2-101.2-0.2-151.8 0-9.2 0-16.2-2.6-22.2-9.6-35.8-41.8-71.6-83.4-107.6-125.2-50.2-58.4-100-117.2-150.8-175.2-15.6-17.8-37-22-59.8-16.8-21 4.8-33 19.2-38.4 39.4-0.6 2-1.4 3.8-2 5.8 0 300.8 0 601.2 0 901.6zM231.2 35.8c1.4 2.6 2 4.2 3 5.4 32.2 40.4 64.4 80.6 96.8 121 36.6 45.6 73.2 91.2 109.4 137 15.6 19.6 34.2 29.8 60.2 29.2 57.6-1.2 115.4-0.4 173-0.2 27.8 0 39.4 10 45 37.2 8.6 42.6 17.6 85.4 26 128 5.6 28.4-8 44.6-36.6 44.6-62.2 0-124.4 1.8-186.4-0.6-51.8-1.8-77 21-74 74.6 2.2 40.8 21.4 61.6 62.4 61.8 79 0 158.2 0 237.2 0 24.6 0 36.4 9.4 41.4 33.4 9 42.6 17.8 85.2 26.6 128 6.2 30.6-6.8 46.6-37.8 46.6-169.4 0-338.8 0-508.4 0-30.4 0-41.4-11-41.4-41.8 0-263 0-526 0-789.2 0-4-1.2-8.6 3.6-15z" />
+<glyph unicode="&#xe612;" glyph-name="social-soundcloud" data-tags="social-soundcloud" d="M1021.8 382.2c0-88-71.4-159.4-159.4-159.4h-63.8c-17.6 0-31.8 14.2-31.8 31.8s14.2 31.8 31.8 31.8h63.8c52.8 0 95.6 42.8 95.6 95.6s-42.8 95.6-95.6 95.6h-0.4c-41.4 0-76.8 26.4-90 63.2 0 0.2-0.4 0.4-0.4 0.8-24.8 69.8-89 121-166 126.6-16.6-1-29.8-14.8-29.8-31.6v-381.8c0-17.6-14.2-31.8-31.8-31.8s-31.8 14.2-31.8 31.8v381.8c0 52.4 42.2 94.8 94.4 95.4 104-6 191.2-74.2 224.8-168.2 0.2-0.2 0.4-0.4 0.6-0.4 4.2-12.8 16.2-22 30.2-22h0.4c1.8 0 3.6-0.2 5.2-0.2 0.4 0 0.8 0 1 0 85-3.4 153-73.2 153-159v0zM416.4 222.8c-17.6 0-31.8 14.2-31.8 31.8v350.6c0 17.6 14.2 31.8 31.8 31.8s31.8-14.2 31.8-31.8v-350.6c0-17.4-14.2-31.8-31.8-31.8v0zM288.8 222.8c-17.6 0-31.8 14.2-31.8 31.8v366.6c0 17.6 14.2 31.8 31.8 31.8s31.8-14.2 31.8-31.8v-366.4c0.2-17.6-14.2-32-31.8-32v0zM161.4 222.8c-17.6 0-31.8 14.2-31.8 31.8v255c0 17.6 14.2 31.8 31.8 31.8s31.8-14.2 31.8-31.8v-255c0-17.4-14.2-31.8-31.8-31.8v0zM34 286.6c-17.6 0-31.8 14.2-31.8 31.8v127.4c0 17.6 14.2 31.8 31.8 31.8s31.8-14.2 31.8-31.8v-127.4c0-17.6-14.2-31.8-31.8-31.8v0zM671.2 286.6c17.6 0 31.8-14.2 31.8-31.8s-14.2-31.8-31.8-31.8-31.8 14.2-31.8 31.8 14.2 31.8 31.8 31.8v0z" />
+<glyph unicode="&#xe613;" glyph-name="social-spotify" data-tags="social-spotify" d="M417.534 649.254c154.872-4.207 274.082-22.039 384.676-78.137 15.627-8.014 34.461-19.434 40.671-33.86 5.81-13.424 2.404-41.473-7.413-48.485-13.824-10.018-41.673-14.826-56.099-7.413-113.8 58.904-235.013 77.737-360.634 72.728-50.288-2.004-100.777-11.42-150.264-21.037-32.257-6.411-58.904-2.805-68.32 30.454-10.218 35.262 14.826 53.294 44.879 58.904 67.519 12.021 135.839 21.237 172.503 26.847zM440.574 496.585c110.194-6.612 214.176-29.251 309.143-83.347 15.627-8.815 32.056-30.253 33.659-47.083 2.605-30.053-31.856-40.271-67.519-21.237-123.217 65.515-253.646 80.141-389.685 57.1-15.227-2.605-31.255-11.821-45.079-9.016-17.631 3.807-33.459 16.629-50.088 25.445 10.418 15.828 18.232 42.475 31.856 45.881 58.102 14.425 118.208 22.039 177.712 32.257zM420.139 343.516c115.002-1.803 199.951-19.434 277.888-63.512 20.236-11.42 44.077-26.647 24.443-51.29-7.814-9.817-39.67-11.019-53.694-3.406-100.577 53.694-207.164 60.306-316.957 46.482-18.232-2.204-36.464-10.418-53.895-8.615-16.629 1.803-32.257 13.023-48.285 20.035 11.019 13.424 20.236 36.063 33.659 38.868 53.294 11.821 107.99 17.23 136.841 21.438zM1024 447.9c0-141.248-50.088-262.061-150.064-362.036s-220.588-150.064-362.036-150.064c-141.248 0-262.061 50.088-362.036 150.064s-150.064 220.588-150.064 362.036c0 141.248 50.088 262.061 150.064 362.036 100.176 99.976 220.788 150.064 362.036 150.064s262.061-50.088 362.036-150.064c99.976-99.976 150.064-220.788 150.064-362.036zM959.887 447.9c0 124.018-43.677 229.604-131.030 316.957-87.153 87.354-192.939 131.030-316.957 131.030-123.818 0-229.604-43.677-316.957-131.030s-131.030-192.939-131.030-316.957 43.677-230.004 131.030-317.959c87.354-87.955 192.939-132.032 316.957-132.032s229.604 44.077 316.957 132.032c87.354 87.955 131.030 193.941 131.030 317.959z" />
+<glyph unicode="&#xe614;" glyph-name="social-stumbleupon" data-tags="social-stumbleupon" d="M777.2 59.4c-129.8 0-236.4 105.6-237.4 235.4v134c0 7.8 4 15 10.6 19.2s14.8 4.8 22 1.4l57.8-27 89.4 26.8c7 2 14.4 0.8 20.2-3.6s9.2-11.2 9.2-18.4v-134.8c0-15.4 12.6-28 28-28s28 12.6 28 28v137.4c0 6 2.4 11.8 6.6 16.2 4.2 4.2 10 6.6 16.2 6.6v0h164.2c12.6 0 22.8-10.2 22.8-22.8v-133.2c-0.2-130.8-106.8-237.2-237.6-237.2zM585.4 392.8v-98c1-104.6 87-189.8 191.8-189.8 105.8 0 191.8 86 191.8 191.8v110.2h-118.6v-114.6c0-40.6-33-73.6-73.6-73.6s-73.8 33-73.8 73.6v104.2l-68.4-20.4c-5.4-1.6-11.2-1.2-16.2 1.2l-33 15.4zM246.4 59.4c-131 0-237.6 106.4-237.6 237.4v133c0 12.6 10.2 22.8 22.8 22.8h164.2c12.6 0 22.8-10.2 22.8-22.8v-131.4c0-15.4 12.6-28 28-28s28 12.6 28 28v310c4.6 129.2 108.6 229.8 237 229.8 129 0 233-101.2 237-230.2v-68.6c0-10.2-6.6-19-16.4-22l-97.8-29.2c-5.4-1.6-11.2-1.2-16.2 1.2l-65.6 30.6c-8 3.8-13.2 11.8-13.2 20.8v59c0 15.4-12.6 28-28 28s-28-12.6-28-28l-0.2-306.2c-1.4-129.2-107.8-234.2-236.8-234.2zM54.6 407v-110.2c0-105.8 86-191.8 191.8-191.8 104.2 0 190 84.8 191.4 189l0.2 305.8c0 40.6 33 73.6 73.6 73.6s73.6-33 73.6-73.6v-44.4l44.6-20.8 73.2 21.8v50.8c-3.2 103.6-87.2 185.2-191.2 185.2-103.6 0-187.6-81.2-191.2-184.8v-309.2c0-40.6-33-73.6-73.6-73.6s-73.6 33-73.6 73.6v108.6h-118.8z" />
+</font></defs></svg>
\ No newline at end of file
diff --git a/public/assets/fonts/Simple-Line-Icons.ttf b/public/assets/fonts/Simple-Line-Icons.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..ecf85a424727e176aca280c28c5cca684a4d270e
GIT binary patch
literal 53368
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%0Aq0D;5;J)O7MJ4*
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
YQ-kb;m*zNHl^S^p2gRi?`=9>(e|n!Lg8%>k

literal 0
HcmV?d00001

diff --git a/public/assets/fonts/Simple-Line-Icons.woff b/public/assets/fonts/Simple-Line-Icons.woff
new file mode 100644
index 0000000000000000000000000000000000000000..b38250d4921211d6ceaa82f0b0b5769e5284579b
GIT binary patch
literal 53444
zcmc${2YegHl|R0-i`~VdcaQ)JKo9^s36db#33hc+y;&k9OIES1<|50ECCVkX<8H?-
zi6h#v<McSqcPX}L$9KL|J9qc9?=I(<PIJz`)Vtid9I^a=-z-2<a!Iayet(Hr?9R^a
z&c1o`%J;n)99umyA}|5}UU*ip^6x7Ik-p#gZ}qyyW<g+PoSC4H(<61AfAP-4DBFkQ
z^XT)-u~+}NcjqNk_AHL6E`3~kFFJk!%DyiM&wYSClfV4#PxkHExmysvvjpec=%XeN
zZrg`KluhEel0NERnJ(XV@ugRw>=8i_e@&mCI*Zm_bm)B4`~DrcC(f}e?!Nf1|N7#c
zSKzrnq~}HW=R0iU!JQZHL0J{9!*j(CY`p6e|9<$;C70rTald>$344;1V|NHL>O3H#
zmBQ`DH~YUr3)67C_#bmEKBE1sApFuNP0vjWSqUGMFnkLCB7BEG1$!kpNBbq%Qmqof
z#ILY{QX=-55Se-Cm%h2&+#J6yG9&y_;74rkXAx8AllklTNxoqMLtW>hXQBr)9lQw(
z?Rft(oSmCC321$baFrm`vtE{IN+cUtvO$WqvlRX+9HQ!A_)C?spxmUCGGCx2+T7N|
zS`#Tb-P)GHHSu1SZZoc9NgNmcT8w)%2ZFfR_~ZA&?Sj5QP&Q8Zqtdkgdidj7kJV&X
z<%ZGi>Gbx|23fV6tUcPt!}{ylcvzYY$FsAOPE`~c3%Y#F>vq*wnEe)eSP>=Bq?xp%
zYu6sdmkEbT*lzKgE9zZtFY~!rkcspbvy%^A=kOL^x-q)7H?_Vy8tq=6>fIXMcxkcM
zab2uxLnsytZK#SpxK^}CjIry~a<8XcGg}m963f@8Y++}pKe>E-e0j1z<P6(V>&rzG
zQ!Hk!+~X}*uV+lMh-;~H(9@i*PYW?&wQ!vv#6cBMtU-){o<zc+dJZYoXqr>4g^0&#
ziTZ6V%>mR_h+bu^oRzT_P|@#QxSOJ)pqIU)9#PvL!=@$QRpRU4X-`%UZmh4{G*na9
z@qAk(AbvFvX|v=eB+bM`_PoQxM7yoJ^5UV9{bkj5yU09_?}!pJnWfji-(FKQw5h)H
zV9ZzJE$*urxhR^i@qMGlDTiG-fZJVtsQ#|h4HbiJ6%}oR6*tt~TYoqbSQ9KS53VUH
zyShVEK-VK`*ySp-M2;nHh;7{(yCHEbVkvXE!sbKhCX>{`N)FfE-E>36P+P3Mnu&@x
zu(k4r__1iA5^f=j9oC4yJUCWVM)Y3b<56KBMgh1IEICicUa_UQjL1Gu$V{?VTHGIH
z;sS4{qv?1o-I|D1fZ4I}`vP4I8%{}V=v3CPuwtiA6z%rr#$<M^x_Ydys<zc`W1`PF
z;o1;wD6zGy*_%%9UE6FcZK%*+%O*nNbS^7RO?d5g?}Xj!wJ+@TdtKu7po+WPQgv73
zRB?M#d3j@dXsY4vDr=eB9aihJ$?($ED@v!T#<Epa*|Dmr(DJe6;p^k!iBKZj-*?Xa
z_?-)Mk>1Am9u;<gE;L;K`-DkG;|aydl8Fjc@s+bcGg!5cfmgGB*`S8a-rPj3s~*cH
zYg@oVpvJ?A&qwP^Y|U#8YS>E~qWWun@sK##n){mcRZG}>(*`Z9Y1$D>$O2}1z${sX
zey>yF1Szw=gCOND5M*WBn$WWMB*?EdljTPnEEX+fIihKzEd7fmL>fYzo12@K-r)2A
zpRn}8h&+b_{wzYJy_vRFkYj-+AWSgO+{duNsYWK1pZ(s%1rxcc0{6Tdy*wqp3efAs
zR*)pDZQF{C#j<rPUM8$<-Nq@kRm?7Cgw-qN8R1Xyk-60wB0kdH#+|lp%RdFQ*EBl9
z&Q?C2o|fi7r)mKLjh!`mNNkrfF8a^mrL-a37LzhBed2}TmJ)@kHGHUW=73}_o;}6M
z;g#kGQ+nT;!l)s^ABy+s|56xH(qv&|SjuT+TxSpUvVNcQ-0_pmj}lIt(9Tdi9@<$F
zyPm&2CmzWSSy1O@q_?Cg!GRI7PS`123|SrJW1f^84RzMQYQZRp7>c<(FobciOoD)2
zTobi=rM&c(8(5|VG9w688uvLM_8Y_=7WD_A{zwzF1Qb=A(R)b@uxI$TSoByQ^f+=)
z+r9T&Jt9*YLu=cd>5=sf;|`C<0ojbY=Qpk&NjuxuhZ_|(yVtL=t3)xHa)}RC4U^Iw
zsbX`VaJR%nagu5N2uT|HNC}%GLc0-%O}ef#S|Qf2>Wa&+6wbdQ$GcY5vskqAI_ZJX
zVBjKqv0Vyy)y_T3>*|*8>HOU1RBuqUh3ppv217(Q5w^$A!5<$J?h!r@{y@L`edzW;
zn;~<PAOoxjCuo;6BxWs{7Enq!LY2lvN4<<66$C6)ma34wfSP?!ctL~Qg`<Kz1|5?L
z1vSeVw<z+r?v?nE_Rc>(-$Uq1m?9ZbIPi^|$0EI3I;<g8Rjk#6p$aQ@Le>gTK#CEa
zV^Yu?fkretO{!{*6m?g6Oimn{P|p)zQ|q-mJay|59!0gH(Cn1mvF@TWo1(~09Gc2J
zK`BP0j!Aw`#8#{-iY*czuCXer2^BO`$JV~+*v;QK@M~P67Tdm{I<-(D5eg+fFMVtc
z$_K7KJRU>S(7;fC!iT2WRMi__hX>oec(7L#&1P#z@#3-NW;5)XVq3Y#Z>plkS4lxn
z86HY?%8I&U9$Zd!-0^jFbbalbxJOlOba`?xgez6ED8<GPpBUQzjhol#yHR3Ql|3ez
z8k7j_roJ}8%3N(?QVO<tkFZhLivEUm7=bR8R1AVL7H#eoGhqD&DJeOiF}WdV7&C@}
zhaQsR4P-?6-53)F7m&@^nn=p&pelXdT0j2aas5AUvqh6WnK8weh}dsq^6>}9>#ZeG
zH;PQ|XlcTH*KdA#yCqmHiZwy)j$i!dF0;Rqu}c46=rgL@tZJHyE-+~li<t3G|NS%1
zNTS*0(4uDV&I3C<!R_a7_Nh_L;Zpr;cbr!m+`eavKleqYBqTd-J#yp$ha4(Z9CshR
z^adxZ`jUys=z0CL<}`_-C_OGaG%&^8zrTWfB}piU-Mmv66h1=oF#sDZgV!{+0iU0b
z`9#uqRg8kdPP(Zzjr|6^ds_z7<2x-RI90N`S*(W0M3e%d9E_Wad^q5MD4VDNNAm$9
zwQ#bNu}yU3CL^80)woSc{9M&=sJts=sVNDki#?5DHgx^7Csy6wWA)pzmo;|p@Mvz$
zR&4EC@2LsK>+QCR^*b-@5T%P&G_LQjRaV{Dtc4s*V$QJH<uR*fbF5rsqBT+Mj=3!!
z4K}u~LRFpK*ov`rH8=j_eQU%(l}k~bHreXb{8qEe?5yxaSJp_;vXByRmbbVhhc(>j
zm2JxAuibTCO@fKlm24zU7N2cbKVueK(W-{xdSCTGQ>kR}TbAw1Mmkp3Imf!KHpX1`
zlD<fw#;XNvV&jIW*=>$y{3a7j!6L7})*6fktvgSDZ=biO$n3MaO3dCkhK<Q&amYoG
zSfcPa^!^z1Sq0gL%-`aVEpVcr6Wrk2v^$oDuxLqh!J!aAsVB-<7n{GJkE9p3=ZVt|
znj2R`up0``&=@JvHS>zeq%_r5tgR?%4F;P-WjDqY<y7S6%PtEgHhV*H2K`%P?>B4y
z%dRZz2&;kia+lBRQXOWC&s>`Idfo6UPKV?1@D!=SnF;;%WV6*>87RKT?vNF^e2c5G
zoE_M;{BHP22b<!dUG^d<as9=3XCQMxQAFA0Fh@N1c*`_NQj~z*BATLAFD610;rLWI
z&Sm-B+>b<EdR!<L)^lD?fjSjR%HN{K(Alwc3wRc;NIJ#2tDpmkH91kb7zpO(0-7@+
z-knpSoA|PpRV2WSBa*akU4`}G;LQ`0lb871y^*rctUZX9CPHX9jM(LY3MC*buz8%j
zvY|vgv{r;8cbH8i@1M{kY-Zx>qFvQltJkw;*#?*@K|8L|cM@UP>5y;2S!%P}`x2q;
z;D~UX{9iM4)Q_N}J|pyElr9lgLU!#E_6ir_9Wh=EQ?`MrGR7LI5gK#kW90{(JTIks
z7~aGfWsTJDNm)&1g7HjHP2#F#M&%ZtJD#>Pw;|j5m_I{xP#wZ;&aCP`GyBb7_yRWi
z&r~y0lt*t>6{f1!%8FTK15gY2W4)^R1BzKuZhcfynEumO@h^Az&u{<v?YIAQ@}I6S
zZ_#|(sX0N+&I#9>EV8VbHeT{iCx3eE7*!EpG22aFRz&62Te11F$!=Di@`nza9A=bn
zHrdouW{3QQ1UdGE>@eR4J9{1Km>s6WACjHwCvUms?z^XMzvRPLJa^l!JIDW{TUO53
ze|h`)=ikZ7FOVcj?A-aEckQ}u$LBwM$?ZU11a%%a2mv`55XOW<!nMNPpe$H~xI`jz
zfCLm*$E*Z0NmL982hR(F&ks$ZLSgih>l%zh&pX5foswGHNI;ToLm`!;XCzcjdvO*6
z4?@!rg)+aKYDlUmwC=9QOAQ@e(?D7jYJLrUvuWnZuHV~X3EJV}_HOA-T0^y^u7_=V
zt}AP;tF%W3V{7i}(#w43^)3J4#bbU;UEf&aEOXSCM%QfL-vQZV@oB!Az|aLt>aC>>
z5%=em%7ODo{MEi-x!)=#H`TAYwS&!?Z2nSTX4k5;)f{gdsgkDsUXhiKUwOysLPO|V
z7bIDdZL(|+HWh)pi`v?nePu%{*3_~s;Y(9(n+BU*7Hg)dqv+a8f&nP;^!VC=fPPT6
z0O7zz9+O%2)%X;brF_Y7kGE`O)rNX~%Gx%xG-7coo%=Rsy)I8neR*(TY`oPfs#Ynr
zb#;F+`b!cf=AM?Oq%%UdFfL4@pCGqtNOa}3bwP|_5TL|3g?)^14+tD+Zs`Q)iyi`f
zk}7mts;NOtce7LzdBx}z>=>+{YV!Ht*CQg2NxDS~!c%6<Ve^f~o5o#ck7n_h#fgsi
z5}(b%aLN{h*K_>ClZvDO&5@K-_grbQ)E&J3;KA!Ib~{3=ss}DUJW#zd<Z%B3c`Wbc
z%}7mVjmesA%%aG$!ZtZH*^szXKhfX3r4GV^)!o9(Kbf)@S)TvFAFhtaul~ai_O%1l
zagC3=0Q|J?lM8+kxkn3Ll5qsunn2rW&~{pI2~nW|Hj==|gMhl=E`%GdgV(3PeMqF;
z5TnuNfZrWA90$Y0@S-1}WVjqfWhtARtZHws68RQJd~T8qN)cOq%CHq7G<g}{NYm|A
zv(t2il&xx?ouJB6mbSCglZGJ|N{G`1V;@aMn`hAG$bYTP$@giqIIZ*6vO=46-ZX~o
z3^keL^#7pAz;}cQ?5zpt@8n|ozQY3}r;RA?j^e*GJv&KHXH!!|4r-0pKE*f@XD6je
zX(ArZp?w@KA^J?fJ&%OrxhXM{n-R!vU~|t%uS-t>=Y9^)O+i)#0D+KP!XL+zAetJP
zQ}mZG`cnciZpSr>_-aO<c9MX@@M-Cj0IEXXVYHy9X}FZrK5ReS5C%0Lju>+(0~>{y
zQ>iFF7@g2dh9N?ZCj?|WnHsnrxGUTwDhkr0+A>X4ngp<sG<>mGO8TVPDoLh_*F?!I
zOF-ZxwaBU!mxL^_(QCX+W{^d`2D4_bTvm($A)1RE-YU0ZHHADUMt6jlt{4g0LK>h>
zQ8}0$yt%gYwW2y($w2wv)!lK^1rjhjbFtHt0nTD^nMQZ)j-4=B<<jLI!bZcTlBUR-
zd@!R%VkJy=Y7ApNMCj@@_R3fY;GO~_Q}dczoKDm?YvSLvGoK|Elun3D>#BIIr2ekq
zp53x!GMU4+qM_wWN_LE1?JagS7r9H#^eU$EWp=w3XmH`Co@+)cEa8%nW(z`mswP<z
z#n+1L+2ZoQ6)hTEF=q>GQ^lvSa4c@WhRH>e=2jG!Y8r`JTifeIv!<EL!m@i`_(a9-
z?IW_&!ZdTn<0&zVdv3a|?(f<!^;v8rPgi67d<o;HRXATbXmI2ru&^+o^Xv)uaK2=b
zRN!_Jw~@$TdaoTw*-n-MJI8%WErXo}@gc3rT~iT>**zY6EJE8z)aLctqQ<t-Bc3F2
zkeiGW!$*y61=Xu4r)@dNuj_(1<+W$CfCr{)icW(4J*Pa_T!W2wk~XKRit;igdx}m^
z(uPj+ir$k9fO-U%qkMK6V?`ETk!Hn*fOtOy6vc1@F$$V0U^vFOjZIu^XdLiprY#V}
z(BNE5hun!GYk&_fqDU_vWq?X>RlKP=MSlT`LlkNd{}=AKV2Y>sqd{?8N0;KT;C1Fr
z_e`p(twkzcvAx9NHQU27+*@V}SS>-D6y35Uy{p_Gafnv4>Q-2J*iq^zPI!y6P0_A!
zs4J4{4|$WtC@iT^U1qaIv_%4u^V{@anq<inD>l0=p(R~aON*Q?YuM$l_E)6*p{h_t
zgF}W#VmCP&DneDozElNHIYU;bGq5DtK3pc*{1$&Xyr);%gPKdV2B96j7PHqPhMMaW
zq4S2!b_qs+8?ZyGza-6yi;9ZUrM_0U>u#Xol4LgzZVM$F{*H;^fa){{YNMszx)AJ2
z&Dk3$iB`B2{By;kCBa^&275D9?=6WWgOcVkdxH`TW@%n01cZ9n39#jW>bMJboSUFh
zZyw5mh&3>Eup*&id2k$ZR}{PVuWo2qy}!F_->UlhRr|Vr66;>m(6F|*va)w=L&KWx
z*bFfxp%v0Jo!94UvS;a<Tp3lOi`cV;J-u73faK=l+wLX(m7O~yO-oNh-?j+tK<)_3
zC1(ST0np=yz9n^=nlFS|vhXS?)eo;GN*gbLIXEv1=dcU7PMY>OW*nZ?OP1{9J0r(G
zv19uq$49bLQ@N?BshP1`_H|EH_H9U|#@frKy7%2OCS6xb&AV2=Wa$MLEM@;@9ATVY
zu;Y;{M@O%GWCv{TQ}{P~qG$iDW2{&IQS+w$c)Wj8Gi%hJ8M}2q3<nW-<TQMiZ-M?B
z@lJUW4t%+RIN2%Y<3QkRU?ijlFnaP>nlYC8M3le{gR<sVagQZU$Xg%dXqhVI_O^&7
zMRjRk{wP2bvXAZt7|E>W4?!&Cexqq{(G{C4dJt)AlN^ALnAt8L`Ags+CeidW@bKo8
zXi-0S7?{`PibK6A2_JsV?V|UAuYhwEli0dfW+szE`^F`*OVjL9ithVcm}w?iHi=$9
z2Ol<D8Jcsqs+r-*gE5bMP_>Au%?SV9J_fX<>L%5pT&{p8Ps48A3A?pf$O_9qk(eJ!
zw+yOK@slLX+f}V?U9e0EQfUCVN?o5fv~V8G>5syxfaMAm3JeyqfSh-!KfCF?@eK?D
z5GK|M+77VwJGO2bpk47AUOdOxBwKdH6-(GDeKLD;vR^v+(yHSPO&{3QabC#aV!JnV
zUdN^nG&LMw^-`fEm+IUWLh-;w&CM4Lh|j;&a5$Yl-0%`i3cQmbG{Kfxf%x~RumbPo
zCNYNQF$7i&HBVmXBB%_fVbdft04mUWLsum8k}Yj;0bI^xJ+m|E6&G}vs+Xy5RgVG@
zGykn90w*|j|NX~hxRv5H4o^HBj(Z$)-UEB~?03H)0WniefA>>;H+zshsPAHCSO6y6
z#Yw1}N!I~_q3aK$p8f}PzMN^5(N8QOsnXDlR_Y-O%Tuads)b9m-y8%~CLa3T^p9VD
z`NxZG;|5`quv<8Sw>6|n-d#YX1WcSFsJHMQ_$GRAdBYL0JSWGXML0{xng|1Pva@8+
zJY5K;UpNqjjrScHuxW6-RGWN!hYX+BF7Mc3a;WfqCoWffnr0g~a^FTau|>9%eBQC$
zI5&PCy(ClYrt{jzCzmdr9B-d47~lH*o-{pj{NeL*FT?UdP*VQjwF=PWlP76=&2?tk
zWO7-=*m(~hADO-Md_^vtq6)IShrO`s=6&7W`)*#Pr^LE~rC#_ZUQvabxijFEry=7G
z3YQ312v-Z&2%i8I4X}{N;1CUsDUp$BxX1|0N!-vRRJIM4Ai2m~7Z$b>w=Hod!Q=P&
z%4Dj-yi{etUw*>C{9OziKkcc1D%2&u=B;$stc)+)8+pDu<?w~gZmp=LbFf-6iM1Vx
zVk`JX3707*t-La5FLgHU8cR#2#x;A}UJ`pZpI;SgiAW{{@})@9Z1I;?l|d($ceOPa
zHAQ-CWo~a>F`(_l>W0$3%BCX|eUcu{;@<>q{vD8)R;(2lVFNhLI4UaELR2hW3Ki$~
z50$@Ay<zJ_+Fj{w-7}UlrN?$PIZN$;9?+t)64|6k*5YJ)ZS6>RYw;h;s!M$qEr}M1
z_=~p0s?OiiBV{KJHICoVYb*75>cH~0M6KIX)SBszl;<0Q)=Zz<2;L;xgfw!+A>$2S
z{3)PPClP`o1q5vho(JdW{}4T*o}-RMo`6wo^pR1<%^8j{b9qsKS~&2IepY-bNJ+&=
z$Pn8yR8%IWxFH2iLVs*_>-`t^1WSNJ!1s2FEaY{BofeDTJ+^*8GDD8bqM3P$F(^bu
z_AC|6ZdFx9DOpk6cld$x^uMtOTeeTGSar>K+E?Zaz|sc1Yqj_k5tt?7QetwC*CIQd
z1UkCS(t$b%^uDeGcWrFgwyaUqV7c2hw!Yk7W~n<dwEfsf7*2?+xXj%<j<&-Lb5*zp
zT9I|3$ZkzslkM2PWaC{2y2RS(`l_W@ZfS1ba^=$A70nf$MXJ}<veW7@Ns1<oSJiG9
z8wm#w?Qhw&qRH$*>_uda!?scf(Op6uBMU<>D;x#g@4*-%9|>Z$0Sdzq839U40kwIF
zx_ArXLxsRwGdy-~TKa)<DFJf&3N{jMMpX#7UsQ(6lCq(a7Hcf32h~KnjO#HIbNhYp
zVdUn6WE>5ZLi|d8Ysqk;XK$G!6^S-F%J%eDEh)7IBvCFMBK>r*1!70?BEyA|b=A10
zCkDhSR$NqRF-e6IXkRuvGcYkRFtB6CfS9Gdj!nSS8QU?yTIIbbF7-eI#P^X0oT>y8
z>Aq~xU)+;I5K2k)goA^}-6*U~(fNIGRP|hP;sRNO)v1~q@W@!tng&PMZqm#qd)Qeh
zk#Js?zB-=mAKx)Bu${h_qybvO*~B0p*iL;S=W)bGkq;FSQbJl-YRI+}=h3`AoJUf+
z343)1p}yherZ8fNhAf(iXWU5*W)MG&0hguFV=~hs%`pYuts?2;;k99XTn!{b2q!04
z&iTV14lvN}Rzv8s$=QGWDSPyL-^*RXt~Jabwx4DG^~RE=WheeMEV9?kF8Ha6#O@A<
z^}}kJTaR++`6r-4?kRT3*TPH^*)=9eeEqTK17FqeeS$^UC1mjEk7Zsu9$-b6z8Ipc
zIGz{us8A);0V(Q-1+WI#!mfq4ZZr&8j-i1sOF1t6ZWN&0i?b-;#ha&tMp-$FWn_1r
z5bmg)@h>LFV_y57%RrG!57@n*u)7LGas1#1z34KaZy#D9%ggMu-~H|_EOW(xzTcos
z_6u3&@3;x1IoT}=xqX{2TSTBw?X`P%hr_$Q_WhsGO5Q=HGITvCH3`B<`Xk>DeMP_T
z3D%Lh@aF?;3lS@mIi?S`d;sLSJk6e%-TaSx5xpUq`2_61Wv~MkXhMNWGV{h+8u-Y(
zR)ZkK&}|7yh2SyS#bAV5hF~yRSE!s4*DYa+{;?(c+iW-C7Iwv?5*DF9V3Ew`a?jVh
zOaY%_SDi%`wl`nYiLn(z9qFWgJ<I9rA;$hW3tcZNlr^O%oRuz@m+7AlBsI!l5JjV)
z9^(Yzodq7B77{`ikn-)q0lWcX*W8y<Qjq^>CKNL?FT@K+zG1)@V(RlCx;w8ZD3yte
zeyJdf$lS>%D;R=IvfGN~P-asP6Fb+ng_%-hvug^A4((rxCa=6`I0AsvrvKZ4Z{9pM
zcJnt66u!5A;`r$3@lR|od{0r<1n2YY{N7HWsjR-Ofz_uQMVlroMRu`ku${FJc1pG)
zMI2vzL%Q*7cJVFg)@-I=;}pKBkCpkDf={SLFZT<Zk&j{6i}L~&J}6~z8L?vw4;6L}
zCrI27t%jIoUa$q_rXZM*q4*9rnlmV+Jd8AxAU#lws6pY)3*T(o@6&%FN-NS<zva`7
z7j{s4^=vqi2-8P@<1@r9zX*25{=(~JB_dmq);!v08uqnQMe*5BGgcbxg8O(b6?CC_
zd+q%&iP9@D0^G$VM3jExuHgi$(tnE^-(T4m((h~9T7AE2SJNvbQU7gGh$`wIW^SDA
zAp?T)J}EcnjBq0klC4cKE-NU66{YwSGP00()PSrCuE3n|hn;X1k*@_K+Z~0}Y=omh
zNK776EJqE>=Au-tM%;r-PkupDiiQ*!=gm!N*nhZ??CvO-HGe@9NnsjY(wk;>O7*Ge
z5p|`0%ZTbx&8m6?gM>gwgyhZa5*0;WWmvy)B`Sgc)eo59cbWiAn%T+xwX4`w!-|)#
zy@Z*Oh9R4A<>hpxM;&ID6|OwV%yb=le*WYLyS#AnU2eNlziIf-YEu5ji(ZCZer|)f
z50}rI?GpN6#|iP6yI>zjK@Kjs4XeV48^cI|T>%3f^o$zp$YaG+7wiz#@R4RFkMWeX
z%X6P2RXa%<eiDKQLl>cUs7;Pj^Wxv+ej|GIkm$|*W=dRp%o0Mh<Z|Nzx)cDm370S!
zMQ~vGeW+N>(q*}6(Ubcv_d^fEw{RhD5r%9M*tt;)8KH_&hWBY}!8yPwQNmTEsfAzz
z1s*8WFbfD!%Fa$3V4&n`uhJugK(d*t_N)Oi=4JrENAwwjZ-C#t0Gy)<_-Qlfw?fzg
zF`1+gGU!1d4*9-dXW}h5zPyA7o4J$(1r3aY;?A7bM9|FQgY;r)Ak}=vPZm|$?lqaN
z)el^2GI{N3D)E0t1+MJU#DwNDnIu(zqTu1Z&^R#A*f22A;43Nd(Z~8-w$t$L^-C11
z{NRJKRbjW%O%Rni{aw|AP&UHS9#y>Ah<1b$<Hj8t2OctR;iKH|Wf;3pVC*J<T&)7%
z5MHs6gh+@bhFq5cs1YhmSPmJFEuefn3LVDX09-Sl)5<MYoRB_L($l!^aDVpj+Qw|S
zsKjPX1^;6A=;-cmI@@fvvXFjRZO;omwd{giy9sFlcBOQAWp-0@%cg96Gzz>2*7lnf
z=cRr$bZkpY%a&t9KWf?%i=>MK*3sR&N6p2>&5=L$)YkTV&g?NKFYf<Q+m4ay>X997
zKN>t#r8*H11}mXYbLi7<ST*M%(k{dyoeL?J=%c)D=B|FQshQr+%jFCIBJUN#i*m@w
zVCGUNgF&N81+1|EK5{8Uk(6Lk%6-$}GW_$2jLZ2gXl2=>J(Q6E+%upSk3c#DVR{T0
z2IQ;elrj%#9vQEni&x2h+p!y?+hN(%uin?)wV&Y1{axMrR@aLwY<{`ws`l}U8;)JU
zwnj%2OD88XnTg4z$)!>K(`J%SQso1h6~O^U=oZtT2aaad9;lQcs=Vf<hpjd#{6_tN
zdqzy*&J7K?bKzTGC)un=X52#!Z-p@ykV`c86zKL0y!-1xvn23KygahoNOb$TtR<-q
z7k++(BwABk>>45_i17NnutAIoBs65XaVOk??v&#2ADtpQ0}dzG6(F^dW=>EV_)N;J
zRR93M-nZOkmSt7;nm3s<8!qnUQsfk?ZC~D&UeQs*PI0Nyd+~-0DtJ**Hs58zWiq_{
zwK&ks9=XZ7^w2G<R^4)FskKS=ph%W;-^TDrCc~k`FYdFN;NrllX1ipshD<cMyYIra
zEsA&z$tolSjWncJtVlNuqbnJgYA2MIwHNkv!!uPiuY5ktakxt+>wP%DbG0oiubpUX
zo49u677cHJdy3~36gQVS!rbq{q<08@p<HO<aat%YL}C%RG2k{MUK=N)p-D+b(=as_
zg>4a7B+*m=;9@4Bs4Z8Y?1&@_q1Q8RyZDUFo9mO%UXq58ijiP-P9PhKM2q-w_ki<`
z_NqzNp40`Bkm9Pl>>hTzhfU@pR9_VAUY9F3&5$W<T!p4%Yze{y+8#mn(#7y!k3m`^
zMIDwSDU^cb!xVx71|H?Q-)L*5#Ub(7l##Kske~z}Kn)5z_kbtfQ6(k=ANS)q`HeIa
zDeo9-ddOVrp_X|{%{l;2@P+=;LeWF1)g9&hO>hDUr*$j$_wq`;`&ZU2l+R9Ov#jum
zh}}natt~A8le|`>a8$Z>*O6|K--2(%!7Fx+xcqc;ziVXI6@!b;O=h#Akj?7&aJ!oe
zrAhdfl{`yj&4P~O3H=4*hHPgeW~`<uaEydTu2}L&V*2bu_t}ROV<vJ;S~N*9K{b3`
zbklL}|J*Yzp;N^yH8nTQJ9p8(p_Yv>xipFTXTtH*97Z(BPsGDwKf=%_@4j2?&z)fc
zaX)>aW{sV>`69@V0Oao5(q9T4;0)kN1SGeTZ;1E9*k52+n9IO~5+od&%MCw~(DY!y
zN3e5@;sZg->dzaH5W~S1q<$3G3pes3`i*-S1|&z}Av2Pq;4HD~D*}Nj)ekj@c){}4
z^zd+6wyGA4Oi8^bkPTeyKCg4>-r@9tKtNw%Eph5!yojQ1UzN==`>G^;1i@O9$0EaS
zY3%QZ>c!B8KJ}>&qQcI;l^3oa-0RF*t?X-oK0F7$qSvBYWfBmr%i+qQu3x>^??2c!
zyl+X@dF}(KrZ2Zz#mg=-StNZqQU$*zSxg^M0r*0m&=Uq4@G!;VA<h4wEbnyg9bA2M
zeIJI}JT5UU6bYrsImieje8eGSWEdylpC}L765qt5IDp|Cb!R9<o2FWeay_JiY&Hlf
zef@ZD@_1=YP3dvb_|A=r0-~|}Gi{RSG|Uo7Ix3kczKT)Andj-bxtdaaRawpSbWIui
zaw)#2XHT-7`su%s<X30lR(zQ*(^s+Mg*XJg3sm#mE07%z!K-S6S2ZFmhZnj5??b{O
zuSOh5Kh3u@h~}0ugu(LZD=lf{F@R5~E(Bx%=XrPqhGEptUp+{#&fni8#KRZ+i`xe4
z#)i^vciZrqy1};Mz@c!wA1pnG8C-9cg?F`IRB@;~_lNGI6&JPd373h_=@V>fc9Ko$
z6a8#le@L9ur`UuDpvIS}s99FiJs1uTc4Ma^<Bx~W=;I_x*+bK>hC=D~=0k^?JJO+I
z{q!XLo7TtKL&k^qqlmHb@32W6=*K!(np*|Id-eeKpM5B!L-PZlPQ>9w(I9d!5~xUg
zf-2xMJd!kU40?bv{tCv&xsGv;jQz#?uzsl&HZV%rzv<7>P_c#j<ExJxSv__bmO7;t
z>9>lbnT{n(Ix?doh1HG0K3&+EGLF6WZLGr#q{d~<b$k6l*MRF$p46}Ox53>ZE%(!C
zcW*^SZ+8?<HFO7PK>lJkvLH7h|4Yz}m%@7isiY)*bU6;Vfxy%Z2U37Uz`}y{NeLx}
zm1Z1ktgTF>D1l@k$v6o?6I2m;%P`0n=?(o3#if~TlFI}%gnhPpbA3rBWVTTp>c{#I
zLRr@NGLR$;KGgAB%fATiUL6Rvmzu3W1{Hm`esOa3%F(j2`mjZo0R6iweRo((-JXQ+
z&Py6&8Y}PJ-zW~TqkyPIn>oF+4xY|uy*{&9vYCO?y{vy{q?l!1kpcbL%p-RV;sFXW
zON_Jn5W7dVmNb-=jjmXoWL96L+g)bA!&m9?lv?k6t6^WSKBFZX4V~-4xH$~}s7z?&
z5piOS`GEmOabv0&_p1?n4f@mEW;Mu3ZnFC<gr<;;L;z$W1a^l#YA&{3_P5yimKL-e
z*WUzH5T$w@X}$$NL^_-Z<s#g4K-uifx8Bm<v@r95e`Kud-lxr?c|TrFG08t;-_1S2
zmKjzCPwVCV{xsTuMhL;)sl-ekfyL!`f`Vr}wkXFjk%y!^#TMnbTXx6s=Vr7gy{ezl
zpVps3Ct2(sI~#xj+Mhqjoo2$Epik3Qnw$e5A$44T;smo>XP<EdO(##CU=FL)irt3Y
zIrReZKX>fNDf`6V&whSFeDh!~fN{xr5^ehya*oS@ifzWIq{)r&2n>mY^xO)bnG3HW
zZfEt3CDouD&rsA8dMJ2yW&it~46q*qio+yE_9}%#^*Fp0Jz}=NbpIW@SKp%_U>{{a
zA0HZ{-3>!~D13@bcvO_lm^F)e>(FvKw|Z#&o#({6^c;ETOoAT?hvN?>{2^fKGQIx%
z%P&8#?{11$zx;A-yxAz!a}*!tmCY{GOkF(w^2?R++IKrivRlH8wKEvIPYW^RWMHm!
z9D|N>%YlO-j>=6o*xTd+lI=>4Q(@95G!jgK48Tw5szp{n5>orDLjujc0r>TE>*ZCc
z(P-D&RBCN^#mdwwd8Gt0g+0>#;xfz{5pz4Yj*f2Dr^R)%_nTC<QmQUqSuoRBwy-x^
zTrI6*it1)>rbafTHfH1T?8elFkw#thm0K-V<jj-=#AiqM>>1s#Ay><gmicCJe5qE-
z%_euLwsi4+Jgmd6GH5XlIrgyhO`#JRM!QLW!T#lQfFO+u6E5<{tOdD3^GR1+@q%oa
z9i-+-Hy@vgp6gvo4@Y~pWNabCaIL8o>C(PKAK6y5Iu1ltw%Tg9HnQywpU;tVc)gCD
z=Y8Z*@3rI?7W_l{&Ygs}*WGRSll0vnR`eY^usMnwVs1|9iu3liZTrZfKBrT**l=67
zr;kts(%FO7v8zA1Q^H-^+ZWxn>i~I>2f7OP6znvQ5#|$N%AJtvYrz{A2#19ezyv=m
zJSKcacrs5PBYzO^0EOKNMunS=Ka%bs1|&E)0LYof6cw@t$@>8}fk$vQO__z*bF0vQ
zl%4JN8##<Y<Y-e+*^S8(s7@E60+b<r;Z)q%!xc1z%NVo99dUc`B(4eKPO`CwGbXnD
z+Q)ape}qklm<sS%<ZplT0CrJ;;@yv5yL{X+)M-*o(z0R6=JL3lxvNZ4a(gDdEeReH
zOWPV^w)m#jY|G}jt+KwYG~8TQX{%hH%BD8NY_YnQaAtc#GAVLmTbf;}X1g6t<x4M(
z<^Dd|>&_tOBb{AVqyI)5?KdH0**@ZQI<1ztr?=75QJEO-Zt;noCH0P`ZfE6118n+&
zuidmkVTDX{rfj(BYZp9fa;njh%F;|&^RQ@gQv+seJsNH;mP|hZ$Qc=kLCiNT+1>`&
z5()A8FHneS?kO#IqpsCv*ELBJCiF8&O0Cb<npxjZkfYTajtw9N&DfymRF@pDiyRz%
zrT)Z9#b!zlch)=gpGr<O)Lv3K5>@OHCa1-QBKm`pRUSHAWv_1OiJhrB(1$$EzKK#p
zpHbe)nBYYYZ5PInK#9lm$y<3lA1*EzEAyTq)Epc^Y>m2wEM>A8cpYqTDP@MoX1K*;
z_i{T$67oB|FegkIRt!Iq1pbvTlE%FDg<}E=7wS$=(a7LufnVa(!cDn+G;(RigaGtN
z3_KrALPwXflpi@@3;EaaD9}V0>BVHFVzGh9gptBQiweZU(8aOUKK3@H1kX;2zeiT^
zR2HB=PKnq?R(i8jxd}F{XGsoOU{AdOIzG<xy_<plt{3(QmkT!t_X`iA1$kl^xoBtu
z@{~Ar{tE^FEBAP(twI(_Bun)CGd8)&Kcf<_B1McW>w;k;O^T0u3iC}pNTiF<BjM1$
z`>vS%Q#BS{Cjl0jog#Zknt(ktAx+Fqp-)VhrTA@WR(cYAP!EYX3f|`IX#~rRlqu*;
zcfQaR@EB~HZWR-iu|i$$^}7q^JcL^80uu8_p1x(Z*WvJP`S?Ff+I>Fz<1F*54|*Z8
z?|57P@>6S<@87?iK25{JP4p2jr^>5uedY*VeDa?@zLkwaxO+eNEB!l<)AdiWRd3&s
zJ9J>#@&gB!FFT;WIGm#EQp3>qLO$PT9Mb$0$#CQ+z%he=<^x+BbCV3j#(;WMN=pEq
zM<zKXE)=*7q2K}*L=X?OA)ol4pS1>|FGKHR?8B|ANMP``waAo2x3~;M6|EaT_=R12
zzk1Vp!rGc+8!J<(%8ewY<)v4AeCx*hFI$dO4@|I-H&mvIeLuvS2GrLRtb;9+6fqEn
zZOdjiY}9Nvjc>$X+q4aIgblmawavZrlgEaZU;EX4a*Nk#(&U$7&CM}v7=tr#-h-D6
zbnU-m1Lm*M!(S{)TGz+~xr3qDDTq%?b@7WZ?4TqhoA#2~Za2TA+5B|-7wO<dPEW)4
zT_$WR%=|iwo@5Dgk(Q4$yc<0i*CBmLq(d1e9gJs0M;7*pgnsvbm2|1f4fM`u(@MH<
z5v|UDC$02<A!4!MyHiVlou3WN(?|aoq6rIXHvRwby#NtPe;vaI*uxa!5)<54fa|j;
zCyA`XymjS8zRRLOY?A3qCdV_oj_s9^F{fc#)4nUtht;x-mF(O;Oqspi2Ugb)kMAt$
z%j`HYy8e~#-G!hZa&qqY?#!mq6FV}}W68Te^O?TRy({YLSM2TV|LmvlOrk9q1A-Is
z^#~+-4XqKxVDpko&JA6d67zx`Za6YRSkxQkPIxlvCGl>!5fF8Amx~@tE@E{{7n02_
z8f(a~*+<1MY}a38%Q`!kGW~~Jr4q=0)xUFaaF?Gc>=|~S)$Xw9SIbtQ;Ic8}hD`us
zLbeM#q(9ZUWJxC*$d$2)p5fsheG1K8gcrF4AM{WSqB{bQrx7#~BNYI|z?}}pXyVWO
z3$Q3hP0&`Hkpz7TGZ!bAFf$X5&k2t{nln^TgpTwnnv%jIOqhQ3QE56JMv;&u1x0Sy
zCqFp}1W_<F784MZLm?og>?c17dQwjDTd);-g(03pn<RP`G&)z8q$>T`GXllrOi&xC
z(eNs`Y6sXuabTLf6-{QMelH3Tnt5wCvLy9~NiEL_H1wIEKY}dE-DWeLVdv2q<a*(Z
zKF4+#XWq))IXWsHI+VLZJUluoDTidG!shYVD!ld?yEiM#N3|mD2r_4WLZz&NXJBU)
z`LLx((>qtM0XQ_Z8elH*Z4=(@Ic^8nf#UqlkkduBi8`+U7rhIA0~MWuwm<h3WaR7r
zPN4-i(@*o(BgTjJTH%F%MbrK<ca3=B-h0J+r)7D7nlga5m;~P4%iHygEKeh;?+J#a
zaI{4eWVGc!(UvkGh6&CC&EVfo&^^z?m<fTu0xK{0u*qZ$6G~guWH5^FWQ!_WSyW;z
zUe?0A7~mP{KW|Y=?D|s(G(BrCQEpL?n>RyqKrJTrD~yYkpB=tHzw?LL+qUa3-SVLR
z@$7RqutT4FgpK`C|J2t{v-Yp+r$3c@e)!85iw`iX&E>M`Z`&f4+%6ga#QUugoBCIO
zHS-sLG4tK;mOuUUxb9=W)}!nd{)w;|=J??c7w2b`B73P#7>3<*KHjW`C5e~jsZ9(s
zj~Yvb2nw)KxFT+HJ$SYo%kx#<04=at{xEMc70gqqU#$#)!6(D<!(;5!>cjq|y!!Cr
z)u)!X>L=67#mQ50(jTZ)+m<bB)90uoIm4l=jJ@f?ju>HCG9L8uvBQVQqU`YMu_O9K
zdinA+dsQzVXG~a{$t)AW5>s@^du$eu_hR6RQBY$!C_yPD3+YFcf8qsx)_`1nOasnf
zqOeqO!U_{(-;vWJzN|loq=-8JNt>()CrGRrhxcLD7JzI0rcIl___Hlv+Pt)ou2T3e
zB<vKv#ZTRU*-!c_niohp6HijEQZ>MIguC^VUp_dr|M2kF#HMp|RA&1|uUts}+5U+u
zVMak7!`C!0h#uie$~}(5ahrz>;qH-Vh<sJ-%$H+28vmm>V+u4NaFNdD=fA-@_oD)w
zMuH#7aLG@G!(C`%n{iHKD(Pn2JKdB>Wylg@F%<&{a~n!Ac)9@V(P}#x=~qhkXrCD~
z8f?XOTaU-JqPwflYN-HZp~=;a)h2U^%O0|^#`Z=gc5geFPM^H-mH`&*YOVBZzPhqy
z?)nR_xPD~#;uY1Rvb+YQ7u7^<0tlrk?DYlhgFQWKJkiSHHVbC^Fs);t)51*p?=dv(
z7Pm&zRWU_cGuhZLEDq+f+^7GRFV^!dxvH_60+Xr|vsnAOyH>co-L|4Sr@42uN3j8`
zWR>ZzqW+t2Jef`(+SV<iedS&D{+i{gRK5J-k&)}JxUk;6tPIndwa#p(1rw6YjTNz|
zcdWN(z+U8YmQfN~qAsC|h@m{k+#l7Ph(W)`Y)H2ur_o_?*=+jn_yR(Oe*9NpN&k=g
zk#`k(HAu!MS*WB%D76z^O6IEShjogs4*vhskAH*wr1`D`4o@o}AwST8<uQz|{eRn!
z-v<mp54YM2F@d)}YH?UCui0cXg@K{-4FB_KAktSs>NNRc0Adh^qm(ZiXbWS?kNknc
zIYMvn$H$t#g}W6ruO5G7)TJovf~MC)l+O=nqjJ7HB|Y<JupxL?tT~H!dx_0kJKw?P
z?>RVnM!PXM#5ezpG59Vc_r1sYpOz6utZW*#C(Y&dL#l5As&<)h9jLrWz2#%Y6!W4b
zp17_eTZy>2U{x95NK5ej)&`@5u}tAY!!eyt@GuU!-DnIFdeFHM1PU)_NyBAHSuO1S
z2qS)Ih!6XrAufs*9et52!}r`s(-fQF4mP&4S&oQI0NnLB;HNJ<%HjE)Mh~HI6COhO
zXM=-0dkuvl%kK(^rVi(wTIcXg7IsLdfQNqtI^U1{ueCrdv4T!7a`6pRoA@#4Ya&ds
zrGQkYnwwIbdkMVc>I7>JWWcF3bz(jvwy6U7i(p_30**;K8I~nzpv)IcK}{svDzILW
zfqoKeLnQGeBx3m#?u1oN!2j&i8}B`c6~zwUw{g?`NBezMz16jpD^Clju=3Gtqw4Tm
zk^HrzT1|)DCMh=1o7s5^0Pv1X>$a<xCW0~XYneV$Jf+PY<t9^Oyuy;~-(79pBNp|p
z*pz~=Z1LEv7p0MY4j-6VibjW6apT70OZ$(mPo>r$?XOz9tk=(2Y@LsmpKt)iuSu9i
zHe8|Ax*B3hPsNGe)~$od<lxrUj-8`PN$TGncUQVfduv)(mO3{(E1G4oJOV(p5gf`K
zTQwWzZj0`<<w#_{aD@9RuY&fcVW(Cj&$frpK_h>_zz)Fa@5Ijv*g!Nb6OJ}tH*KVc
zxTD}t1D4<b+nmr|HC@#{ClnY7QLJgecn%K*j-*L_3M&|d;|TN4WV3pN0da#}#wLKk
zvEF1yN3u5&dNr$`qRYjpP=c?M*4umH)hLxjU)4`P^pO5EJBfSXN*zE6+200s@)XZz
zOaYhMfE={r!p$6&gNuQfQa<oyxQLWQ46k2hNWx3IDHi6&6l+y>gDVgQ>qN+lj2fOM
z3j?La|7Vm)MnHnHV==NRe2UdDXuYQQEs_3G-(p5O&F+%ANRWNZjOCO37WP;$Qdgo^
z>3c<)-HmW7n^8o4A6W6@`ZIt$W^8uJ6tvTq<gxtef;VRDK@&2=XHeDR!GvMkpDvJ|
zIx31s%@rlH|4~$}9>vT}=@O;7NV1evm}iHNFh!Dt!{Y24S0Rb(pkzLr6WHIgK2s2D
z@kscxTW!<td&ti8Np`y}XzF7&E1Ea`zK3LYOLH#(=X+d;gLfN%VlRR0Ae(~cK*!Kq
z#KZ<OBCJK8EV_Zr@Hl)cZ&ZpxRW8cmBC&3Gx^Q8nH)V&q`v=~%_d9D_ot@5`Xs-NC
zCYSmp$!%eeTintE2vF-c-mgFZz!&wC7l`{#^+g*Sqx8{d3VY%siuns(?-#z*S`3Nj
zF&E`7x7ckOdq#CBw_kHj?n!oyeqz$Ns&Gw|$D0f9M$y_7_ZrDjf1h{4+x*G*$!&S>
zSNYESzQnt|fWG2AT2C^)u*OUXy+iZIDQaNI6jF!ts0S#GAd`VL#wc&5#m|?KNg>g!
zu;Z2{&LB;$s{Lt>X-v~r@8=0%)9g$x`?OjdmZz0ak@<`iH6#Z7!w8obGvRn%Ud%o$
z&J08%1N6y7AR}Nq2_Epzh2R~`yp6+|fL<WIL)r$(3*aT1MT~)u5f3K=UW}+978auf
zN&;EQ-vJ&A$W-Gs;jl<QVKyf#-Z}j#tOV>)^__^wE9^8<g3XqZt1jFU>u7PQqRW<h
z^@`6PTM<%IsmS`hS782@{uQ<o{((*LxNWBKgIoWSvXHSt?q)vwMrP~D194iuA{N*6
zRS!OJ-8K`Rb7Q=7X=Ud%?TL;g)ao7j@AO}P7>Q6O8Lx)-GYKBZ_Wb*0U|56wNk!7k
zHrRN0F;aJUO_+(uErkIn(j2rFdOt#$$&;gLD8~D7m#c!m-o*5$7=J%@n%+;}$={FR
z1veL7P%J;^1=&jdEB~u6C<^g>-hB(78^V{P<*p}<dxvPuhUK#z@J@Jj17m?8$GVV6
zO~Ff}?=YhBc{@mCYt4Wd$rNS9;oZ5U=GnGz<$sGgj}PB@hk~psr)I9$xM_9B5sq3l
zr+!;JUhi!zDsJ?$%fmxusjZdvk}`*AG4Hm8hvJ?(x3k2iUx0<(Y(-kV$HVTlI7~KA
zrK9}%`peAB{B_`4*GfgD;;#^Eyz|~qsvb<kH@V6~j*`(;t77^Mi3<}AUXRDiu5@^k
zm5!2iTh@e;T%iBh5e~zh^w{)Wly2StQN<o`mb)8|#vPF&@dn)YDXg$^dDG=(+)prU
z*#=-x0?%d5uZsZ4noyWL!bkCrUXj)YMk(>UpR+iaAqsAC=zZr6^lv9KGm}iV>o5fe
zuKMy35^YDm{DFafW#H&TyZ1bFv|o`<&`PHIxB9nl?<bQlnaL#Ckk`Kb-V1w7eN@tC
z>bdaV?U5CiudS<FdpQQ6B#Z-FcnCge1>!a|v+Hb`K}N;A5I0Qavt&meU4j&pPQ6-J
z_PMgUSLr!*%cNw8-4;rU%j@V^FIP;TGbz)oR$}^5CM^}KmP*l0<ux_so9M-IC85g7
zkoa@j-(*5Q&8AJWHv{lx;!koFG_K%y<@qiITrUG0RlxLf4ti1QBuKe9BSqCj%DO<V
z97PF$`Yh5h{>9NHlh6>+A9L5bbcMQ;U5jPy>_H2A+a(X`ihebFTM8%+wp_uK{3i*e
zq7TV9E)*kdZKOfQwOHH?OX=xX^LxDQstYD`g<Z?u#<~rP{&}s)#72xu)5`%I)3uZ#
zL~%@mKYYj!s)H^afyFd|mE5irZo>PWi&YV%6T?tR(_&WhZ-GHWAp$=%6+HR0N_hh@
zSn7x<A@7(|1{bBVz!9Y?2WbIZ8i7b3pyBDyz~rX<WED99G(u5_BysGWGqWb!##eQ^
zUT`;-W{<3<q`B2c<^)&7g+FJ+?T$FJrH$?vT%D`N+hAde&(aLTZ=(ydZ4)bTovW#I
z`dw<ToM^j3!o0(00pW<>e&@8Ub*@fSp*!pA2r{Gxvu{#mdVuL!2Q`R4L0?BLiMr4d
z?BJ+l6)tRYz2K0*N#8c%-?tsqjJAnY9WHh;8tsZwRs7K!t8-5y_2CSV)inmnwg~-d
zt$085OEYj3(B1Dda1_v%B!7^k_+q>zjou?o9HfON0G;tJBQcP#P40iPsX5KN2E9=L
z+elRen<@x%qvhn&$wKa<_=P`(f$5Lxzk%!IS&WkX(m=_Whr6cY=Lzkw*coy!Xr*iB
zxzFMPboC1Z#=@-H*@H&OFXu~eg$GwKFTX<nt=PW^{KAZ}Josg`=fN*s*MBz;jx9dV
z+{PU~`5NYOIJJ*5H*b^vJG<3|RwBg6!6E4*XCLQl>%Zf*nH%y!oBJ--6@Ox({}`yv
zZP9sZt8fGg)F$RPsGY(>lRQ3~?=Cg@Uho+2%LVu|6U@V(226?@rg4&BQaJ-nPooJd
zWu$0W8vU1op68*?`Tk=k3$*_agZA3Fw1*a41Z*;rFkwyqk43<z{>Q~N^fwHWSQgb_
zmlp2oAYc+bTIfHkLH#$xJ+E1;4$DUw^6L!r4atOVbO22alx?Me#2gkv#DMtXJo04U
zT)@QiKP;Tq-{Pm4_Aw5b*#Vhh`Y!GT{=*VtxEFuWNA$P&gBWt7p@XEk=P>`K0y9t>
z_zI|*Bz)Xp9Aq<QIbui{$XFu-5Y0Uea_C}|Qi32&Q$>2d3<w-wN%S2Tvb(Bo&|hHA
zNl{*vpZ)lbsfH_F(=X8fz?#@czPo8*GUaoZB#*ydnA$jh&0lB!GW*3Zj$l4zeyU`C
zk|m!iiAk2Z=`3dZ{f9Ai(yNTHFSUQ24WC<`bekwBbKk@KfzKgw*#Vmv4m=33*kDI0
zAF{;&oM2_{{GvmB<Z$7r9N{0HogjU1b{c8*qRvfq3Eq4*cVoY6;<m5s)?DVxu&5AL
zs<O&YK8Y^Zv`eu<)zR;rzR+zICwoPJ1Cykc*dKfJrA!!q<O<C6L_JKVm!EkC)x+AQ
zt8e<&MT_-tD>B(v3EN0d6{Z6xv5IKkM&KGZh(*{*+;KZ+VHz+AHn$OkGPD>HAPn1w
z5<bp4kS3}I{rXl(!UAER3Jg|Jp7j9ManjcYdSY~t=nt?@NurT~P1AYklgk$NL|`CB
z853e<FIoInN67ZWvPz>qrl$R<xP<njCI0|{mcRR?aYa>oZl<uOPZjpiUoiCNo`Q}4
zH0HHb1EahQ`F=tM;-5@+r14>o#yjRi77h)MI8U0h3=lGXn-csATtt5$7)=X?_d~xn
zQZ7Q|bE=Yc+(Q;}{!heIu|?NmnF6w^`5%^?GQ?Y<uGE5=d+Ogh8`g`Fa(l#`bQIfL
znpyee+9J#oYqUBP_Pc_0LwrCM4!{?;t!MX%Y~xrZtzzvne;Gm9%aG)bRF5-SMQBM9
z$=!f5kluDoR%}UM+lQh}b#9+W5if97R+Zh5iZ@`zzo8Nc@w)vK%D-#L6IcV+QtT+|
z2$c_1)oos#^)svvzA}=O*3>ywx4qeFSBlqN5oMW_)#I$iPrQgv%v(-{x$11f=4PTA
zEOK|$#*U`_38ySiQo_4cth2>S#~wA~ms7BC(&dPMKME+Pe59;qw7%`iy`z%;L{&#+
zXt=}|GQ-7tY}s+FK9IT$VLldJp{eeslBPrDl}!$}*CGW*)^12FvO9eo@7VP&cG){(
zh)G(m2PsYH&T`fQJFJ(RXoh7~=re=>IDhc&Bwc~A@=l|x5Kk<8H;#=p#5#k)0AtH+
zc3YXpUv9M`EM+e7`ifx?twf@Q-5Q8H><+&_(3O0rLG{iU<3nrKAO+0p9V(Z+4Nx#P
zt2N^Dl-g~vATsi;$r5+iZ1!3MwLX7CD3<a1FoBrxW5af>f!#XDr2rr2`K1x~QVBc@
zU{S(KOd^w=o3%z}U@{6r)h%*xd&8|4wD%vncf*F;_jeIcJ$&V3yLNs4)bhb&kL;T8
zIB4xRBsWYsJX!rArE|wsBhvW<YIp6weZz)(5A}EMyL|(B8oM4lKD7MQ=XdRT?8;&N
zL52YG$ni(E^PHuTt9EoM`a`@=&%oAu8gmLpuyP&58ipZP(-PMHB%geK2@9I0Nj*f7
z85&%GwJ{ti@zxk@WN7D$`1r@jEu5i|N|w3N?b5TMj`F4fi~8K_Ph&wNIb0gRjB?dv
zQ?N`6TQR=X0anzW`q{IN(lW-%%HFiKmX-Ng<DDP5wZ<Iw6{mbPw|(@k#@w`{xx^ok
zqaSE=B(0JSOL?dz!J-EIC;=1e%RMm{R=)R1w-tx#Ey~~EQL4$eZDJ|YJXn60vEs5)
z6NaPqtyiCMmi0x;drA(#3oh$2H{9{S%{87{e{q?)=C+UB)sTBaDlYNYIjuF$`YYq?
z*O;5^YYG;X(pq#9OlEJw<Eiq259afreelUJI^I=#dCw*<7VR-)8lMGQATJrmpgjpc
z0|c3;AH}Jq@?3;H(=X=c3J_EFi~goiGGkUg^zijCK;%G?7b_ScCj(eJ>m6HWqb0|#
z{n(Ax;v!aDT&HyHyJx}|*j8l^tG=7=IWCLQ0Dfh|>10lqAVo+C&H}iC68!rfeZO>{
z&mT9-H$QYeruDd1tnOi0%^OqL{KZAch8ERp9{8Xw)EWvm7fq?1d+#3is-^atZN<JD
z>BdDio1?^TFU9Yb;a3WflkzI!Sshsa9CM%IO|2<6lBNubP{IOq#aVNku#6s{Aj|{d
zRSe|``H;qB0z*p%QO5r;A-zyWnp2u#q8mX<Dfbzg>mvp`B1`w}Te@@~6C(@zvwvvr
z>uav-#?oqi&Ej}-Z*Oy|uP-&n#E*htR;MU_3~_F(HJ5wV>0aO6y?%W+&1|~m*4+Os
z9D{A=T1!e=Yl<mT95!J|>l7W+hubp`BbRLh=9ZKLQz*=JI{PI-f%yqsg?9)N%qMNo
zpEF~MpuKp0W>&%Ew6!l;(%wEQilgn~)vSZB9AL?Hc>_BJNpmlne`U#CN3*ZGDwHT-
zP~<wJ53=Y3S|1vHz>SoAx*<nJu}X=NHdsg_lzAGALxlf8KN~|*3o#jpviXH%3D!oh
zAmB($%&V|Db#T*`esy5`wxRL%q?&9=RjV~=nr9knS(P3iT36>FfTLpgf*~ga6T}%#
zA<4znII+5!GPgDlv8zXR?i$vw9o!-o*LHW+>DN}bv{bXJzwWhPKYHOvtaa_4rt9gV
z>(`yy(l9}{qt8UiiW@FMxxhgGde|mg`8rN{Ba-_ZDGmi2vm$A&7DA$;7-Gg$QktC(
zMx;d_u*=ue=WCHr1{&VJFvoVv>2|q}yMjTN)J$9b;uWx^Wh@<XjRufT(k8Ks3Fzud
z_9TrZX)8eC=}@A?B$otS><_LWemPEexB~eVJ&qYGjF`-{GznH68Ah}zOV|i-;=Fzd
z3t8k68`MUFdFBF7Ss@dLRzzX^En8@85a5$v>AQ!~?@RDrq8GSKtRWqc`-e-p-|^&=
z#!5<>cDb}Xhhd)$y4a6g0TyuS4Xz-i^>HYhO_7el!irFf&pbnb1KgX-#0aqPnYV}l
zvp=Nm+xjc~ZDB-n{y(ej<Rs=TxPr+}EvCk)e^%Q?zr_MQffXX2e3Hj`FUj3c-7X%u
zjD41<+kX~m`wbdGkkz8G)aGZN;XdJ|q*gBz?|Hw*(?p+1@Q;A8LUZ){FjE!t6$|qe
zh?6+4%Y|3qqX6?0`1r_2AVKeQ&XaasJo!BqEOe+riHR(|5Z@rCKEdB^ing<hlHlL_
z%#6q@=Pwi%((5CI0W$M0Wg^b<M`ANks7U=cuhaU3TVd`Scs1AeU^1?ixK&^%cSvwr
zGb%tz3YGw-XY)zld@IG^5%JE)1#Jmn+~gFrCDPbwYJ<WfIB$NxM#NfFWCvoQe*^c2
z1xbiGcqJ(A{PFs*W7#hJn1ndkgiJTBYRCAtguSS#B;#~iVCtsst?gRMOtKw0-%*ET
zVPYMA#LA?k)*K$z?HhL$d56DOwtiKoECpx<sVsidMU^eptP+cUL#dlwtV=7~wS7=?
zAY)Ckxsd~@+KMDRXy^U|DXl1G%X;z4E(+$0NjF?_^g>BBH}AZ4TX`Z@T)bl4SSic4
zx)U~gvN+o0)QX+)CcCA=Sy~ga-=z9IP8-&y^1Dkg+bR+Qtd3uUt0?w|@S9GGLn-$r
z9n7p^@xh9<s|P$*kHt4}-~MjdyMF1i3%!s9h5Xq%VZhKQWUMh*5qw3ZeEztXW=wNY
zm;VtE^i(p5-%kNM61PgUm)0;G{nA@{Iew7?BT6sTfT@HmwI0VS$UB|m39z+v&MM=~
z15?1RpT>#PjO|2bFgwHEpp;FWuEF_wJxW~4vidatex)8KNk(+)s<EyuW@)}f2FYRl
z4t&k8KWF5(Brqeq8-Da!<hckKGK=P{LpmeBCF)MUYboT$pIsNTZKk<h1Hp=+KTVB2
z`#AR}Yd|2f{N>1yo}`-q$Ue7d_Rp(^A;$I8lt~b0s7DzW0znwg)USqVL_BX4kfh{N
zCYj-4G=oSQ70_?O@B+dUq{pL;z>lrP4p*u50kIy7HJVHxQyr=i;FYA0D>lVlZoP-X
zzAqqAk;=uH#;9snK4pf>v$DLlF{-)EUlAoEGHiCLPl%$!wmjO<7{wHeuVATET#L3t
zM&@->3D!$oD_n><e-A-M5~JZw+{S<{<UAX&x(cm|Kf}~9_6-C?KKm-;Wy#Mcm+(EW
zqO)A2{+FHwX105)Gns1ou4!wli4Y%fUifdF61&-MVtf5#)}i|PA*=o|J_vRjN8c*=
z>n5?1%5(p0ls`fTkDOCS>|R`)`)8^nR-RMoow6BoJs@6<KMGsGfTS2IeUSu(YhnDr
z3dFV{X-T*;>{E;t=oIHQT%ZJKZB{TJmJ`KJlR^<$Lz)}=onjmP^aP1^zS=LxR|@HR
z?DYRcHnV>_TQ*y){~g&ZP5<u*=P-V+_rD^XsZWF;?ESY9J27E4IqZEYPIRZZTu`Rq
zA#@&Aw!_b0JfJ^*On*#@tb^R29SKQA?B;8*IIRYyazB0wN!l{|Tef*WTXTUZ=@(k#
z&a3o`te6WTeZxz0){VIaFTjpBW_K8viSZz{FpLb@;6~pWk!N&wTG9|Dk)HQB@pAzf
z;<<>;i8X78#W17MX%k<?s(@H<*XhA3t>O&Jl}jhxWmusfa=u?hyzE7)I?GK3_M#)G
z>irP%ShLtIozVN)nb~XD88i>=6NM2;mpTQN;=P)fmNAhZYj=QcN*R)!@@N2sBn=LY
z7kGAY-a|`D?1lDt3u1Os!qQnzFRL*F-LjaSHk(Ven>7cm`{Tq9yy0bZ#o=-}*xM?W
z>3v)OYyGd^ctgDO4JKqT;l9js-8ZPE*vZ}EDZ_+%S^ma#`5o42E_Kr{cy!7#wS5eI
z_&EAd5+aagpcsA@1<mwJ5XAXDG=vgiC8;~bSKyC>XfDjE!Pbn$e#KX*DY*!O=~$|>
zU+<SrWI35;ugQ~>oykA*3_a6?IZxBl1p1S5JxLb|qyWexGt@ZA^%#B{;5|yGW~g6g
zIJPr2#ipUay>`BdoIZ{5knb`Hs@X`Re7Caq>^I_In(c?&G&G7Rfp+C7fqpCO<|Q>J
z3VVjVrK|cR%lDi9;<^3Cstf(b-X>z{n5F+e>^GW!voI!zd=P5|JnNk9%M_FnD2vz~
zlOE>-AQzb*0EICkzB)ff5LOUpFeX4yy$0OR(0S)}D@KW4L*(bgM#oe4gS3n6oeCfz
z#vH(_h1-PF=<8@fi7o6Hy+7}@kp)!HhzmPzBR!^&+Jq5LS-a$xP`Hmzr=}?DS^kFm
z+=A%21@EYV-<20gLKL>7C+DXt^E1Y>P?#>pMZ-Cp>2r?xAr`<UDxI^DCX51Oi|Noa
zgmFpG&a+ceBtlo@x3e=0-B7rkT2|PfT-c>%6^a-37FQ-r<TUtZC&peCvMDyAHw;*o
ziz>iNNXH^03tn_9QI@<OzUGBQiC2a=Ajk;|y3(9jo>0KW@j^DRqKd+@Q{$P<wIvmd
zZC*OMnXyEqb}Tb~Y8k6<b~i@Ko7^o8Pe!|J^;Ok%mULP5aNVi{Jv|3j)%D;9+&Xq%
zyX^4sWO2;f2J374(*LiuFM*EZIM1Bwp0nq^XD~MgGlLlbGlO$*-v9v+#}FU^5~N6w
zBF*~{Pl*yq=rkoOiX|&LEJv3063dR`tk>~vuR=?<6M6j{t&=E<?dPSG#PKE@Z*0f0
zUqUqZ`>T6Ekdz|HFL>zb?&_-Qs_Hua`j78lTpYgz7j2PjIDKUQ#JxK^uJpI&>i{dG
zuP?N)hr@#{wR)>XpUrlLQaiWy9E8u44F`MX7LwEt^%@82`!8$e8lt=3+kAr_^A>ZH
z<1&38{u9S6w9MzDHMeV@3iwLbe2J|rLqK?my@YYK>V{bECH20yo~W+z+({NOg3_<i
z*CsAh>rGG^IwzUu5SN4|FictmGOJDkTFpC~AF(%X<b4o7gk7qbJyp&X@kHf(neDrY
z(IP)VGc~@&&GooZ)8!_Kikk$T6_&#dGSGJxnt+{nQhtiw&JLWecvm4_iu7*8Bf>o-
z{^Yz9q^R&ye#3ga6$49Ug}ie;F3V5d)T-<N)$85V<E_8tTh+t8R%S!rCQ$+Ytmyiu
zoE26UpBR8?2Rvhy1iPtQiC@3bs!fjlhTZCI8vxa~u3x1fmsRI9K(5f(ps_-rttH@i
zau90Z)pN6b0<OVaRq4u=v)pfw)K&?%M~BvzbJVXz_sYfS(1dbh4`+inH@d9JmDdkN
zS1wj%BX+8^`~%_kU^Z+g2<cpTVkk=G1aFgwA8{FW%GmdlZ+9vK7BArXVVpwx(OLqO
z6*MNHH%gv~6@v`$4D|*GsAy`25e9aVkUn89CX-IJf^hC$8G<3J$CmUP#~LIHOV$nM
z15^g8T%@hs%m5Dq@h<e*)9d>SMrY8bw;C%o7yFwQP7My8f?p&-7dDl=f#xcq!R753
zTwhC}{oVUNP;T0~VVFSK>ox@e?+<QKGMkY^MvuxL*blC|QqLWzX9Bbxkan?Gqa|4(
zp)d<6`+QDg5i7dF(13lm0j}*8o()Y^7#=+gIyzX60EkBH=nM>58-?>wKeA(&4$1WQ
ze*iySK$QXvJX`q&N(C!Jwgg{YvYZaDe1qUlh3-%W_-YpTfMF)H8OmLH;SGUZaK(UQ
zt<&Ermu}aSf=bMF4wmMWUWjY;PhALSGRT2`&pizX1msSp&+O1*4#OwZXyT~f67)85
z97P%HNhU!Od|D?~sTgpiVG7OpHC?Qfh|xa43nWt&52*6(oC<S5VGD@QeP~Kvp88N=
ztTQH#$NGxJxZiN)OL|XO`^72N+2Q)4(=PYtXUX>ioO-EeMS%e>CN3{87Yi#_Yuh{0
z0t<|-eAMKHNv!};*YeI-6hbtCtxZSi<z+=FVsJaEb=_FX5(oY*imSLyS+)IfuWF=V
z$-yRD)uOt2WL0`-<@_D_FW*n>G}A{h(PD{beVj*s^YFS^bS>N^fA9UAx&15@*N}98
zv+94d@?YCR`ilg#sVtoDT>dywiIA>R@lB>D-%YvMcUdzL2J$6?1$Lq+JkmaSQ@c;R
zt9E}U6SsG+!RPVzix+wEaUyk}HFxi(J_452n^RWuLA_|s6ERlKK`sT1RC2e8{?CaL
z5~^|j9!-E?utT#c$=4ZQOt>~Ra)AjZJdU|5u32ubq2+t7q2;$@1|_OT_z!2x*kar0
ziA~Mgq4{LjbbXkX%W&`3iPng~QX@;<JB|ho{)TdIO;vFyYod?Ry?vlMyKYC@DF~#X
zb6|4~8#o^R$%?RwRJ??*)sHoWiknUhdGDGkZ0t`_C)hpQy=2lwJNJxdx0HP>*)`LU
zogL!rHlb~9UrTA{`l5bi#bB6bz`Mfde{s?vaPiryTG`zOhXG1)|0V4O(`}`_z(*u#
zL`+O}hF0QgV=C($vuf)#rv*2+*EVXeZEx3J<5Y|B?yWs>YOudGLcxzb4V)x*0dB)E
z5lyOw-064UV1qf%m|1PGtBR`uBU?7OjU-&0lwah;+#o6P=>P_P59X^6g1$cn`rd}w
zID{TX)Z*$a%$OHeE?Dx2rJfLq1oQzJ-x4g~E&(v(vYu6~JO{rHODoS2w8xcY{&*Rz
z^5541Gym^bo*|RDmCH0QsyNUw(BNHo4+j_^0Ryev;CMm2u=-j^xl;+O(?INOQW5;s
z%@c@l2<)$7q0(pKS1v_Lkh=p(TVP}4L%5b*xlQbs%kl<rSU9YIl6?wJsP&SLeM+<n
zufvN^DCG43nGL>DAXfmC_1IV~7*K%plwV+**~+D)m3>?O6lp!PO>&zxiS-Kpmv%t!
zC84o^Pq!W3%rL8~+Ih6#Ubg_H(r`JSZX`_wWvIe|LQ&rcpmR9>!v@g@Jrf^p0V6=v
z2S!^fe0p?qFHI1$klY*w&m0yB^p+qhD67ZHEmNe=HPOmeuu4}Sy6@?7`NIz!PSTnU
zi_1d~;Qr|c4q?ZLKUp(;->F^k_^#9U594Yn9^ZND{$b$);kA+`xO{1nE9AFMUPSBh
zzw){HhKBibWxAnd8~~+o+faFU*QSPsO?O@YP=38;?9kZQq488|oX%r4_{12075|n=
zZU=_yVDxZEGa4|xSi=>%ve8+z!7Zn<2Ub``{Aq<h<P<*9y=mj_$z8Wmrw)$RPwrn_
z?C#z@R-0SDxBK<bk#&W!Y}45-+0n3TvUPN8F1LNK|42^U8Lf%ldgX2!U+gJo5O??&
z;`ou5oCTlLg9!)tO%3pb7K^&&qrA)&EH(oWM>Wtr<GsCf-AEw9D#LD__OSoBvdrRf
zRb7;Kc%ZV0jwy0a@f;*MD;OOL{@Rk#9zPdf5+4DjGmE^NpeTSvUgc;KLvz)%hcGBq
zIjO=zB$`iz(^yP3r6QM{u5xbCV2vyuSQyDS6n9kTCzFYqnuIX4_W~@?Mc{AP58Sce
zLSc!?e8-+#J^m~wmiOAK-L9nV=>4}b3aQ)O)p4fKc&baBP7gQa8`~4f#C)MJU(Lpj
zT^!UwdDL;{{u34@EFSJp<?4@|I8tvt|Hy4N{GEC94px8k_|dxhy2)Y@HZj+1O{$?G
zHcY-T;9UfIJNQ?4Oz8UXDnfLg%Bn=GUI#VnyqUPWfm#y!K{jwMjl$YlrZ3%3Elx*;
z6tA2sq*CR48Pf=(6czRqU9shgZ3$a?=dC?`)5WW=faiM&93WJ?!U4ieMk)(M4|)5o
zP(h{D3y|RSDb)?fO*?hrgM^V;1G$<`ei1a;?{Zk>i*py1^B?MT>7`P|5d*nPgYU8e
zJeJkez=s+9(a!AeYFkQy^ZqqZ59~Qkj65{=5I=w5({P%RNFxrMMa(qFnj2|YqWgNV
z4#18?<HWc<h%cw~yNXIbDpn%@;mUYbP}->zLnOpkN86em3dF|-g^|h?a!ZPZ8pZZ`
zcn$#GftVlNnsjr~r&+C{roryx1gv~cl0Ij2h3@vYL?SKTT<*N5H6po9P2PHc?Ns!9
zEE<hPr)qI|cfk{AX8)kx6g}Z4voo@q>~183B(vFF>!G-m?C(ej%^u*|Ao5v407wpn
z&Ut)3Pww{Yy&j(^Hc3(}dQWV!JcXA;W9RaBbTkQD`DO9G&Zg8<q!RrekB>DQ^)cj3
zv8n$rp$)MR0$C>mo3JVL4OoTI45%XBUR&YN@nK4eHX%1P*L!Q=dmI`eq_2iXQiYmH
za5U4<kLuVyl!}wmvCvPya(v&y{6TqHh?Au{*YWGGO4B;+;!0BlZY%VkEiJ+6$-1Ss
zvq-T_=@@>`&YnCmclPYc16*%;nSQ~9#}oz+3Hxc3?C0(gFh!z&EWzIGIbijZ<b4Bb
zmLLU;HcV$xn$Y002@{zJ+k&;^18S+N6=D0?hK=3Z*G&dO>*%Jr`vLm_qcE#zv-ND+
zQ!177W}CI`T6KY<__np|o0$24-#1roLvm!&);iZ@x7qvW-`CQ)w$`$SW(u}iUGf2Y
zt-4id=&`JDn;80zP0%mkq6+0J5<`KeW7Uo*#npAeY*6X#Bp}3JscY&x{MhW=V~2Zt
z4?i}y{()B3#&>BePmJEVwY7EYouebldBnszTJ9a6d+bnO-=W9m=-iT*|BUZxe$u+_
z?C9v(ZLO6veS_=DHTT|1=0;CcMBkO^x6->%A9{qM|9wNtz->>>&p&nB0G($ZF0m@5
z=pV1Z1dk~IzhlpVBMW2<A}2XK2A_saEYkMi<ieB32L_Hmxj@;Jit^v_`n*zcMO!(u
zWu64tRQyHJ)eUt7r}@3KzMEETm4WcyYb0Od#4%r6-djzm<h=A47MeC-tTJE#&S*4#
z2-C?-w-;js>>DC<F@a*4ryvCuO7(`#_x)T`n*0JXeYKj7JgGvij#Ln`CqJF&36@Gi
zUt(@yKAlKGE|8F?XnlZ5_a6tttSXp)ptSP!RLWWF^VYf8E7nMr%_Ew87Wos1hIpId
zyWN=&rcL#7Db!yLGOrj4mVUP+?5d9GvZ?A@nwz&(%S{r)URGk?tr|_IM*@XN`^vMa
zeJQ6?U|u)-v9&d57h#(uKL*}ImBfyEd;+rsQ@iWsU??UqWxnuTeF?JdOTaaa02KhM
zq$=1(Q>>9~Gq}Hm+|7+f!Ik)bflqQ}Bq;isEl{#O&*jcK_B3SND~mr6ek5n$-0oNR
z>fjUU`|`KoMqS|I?oZfD0r^)IiTBEvF0ytxCV`9f`M;7p5_@wcf%&VVdqOgRcgG)i
zrxEkc{DI4ts9Rj3-f`{f-S7q28#g54$<eS{%`(=QWwdLETl3OPtkO(S@8JvqW$#K8
zuYvp0!&dg%3}q1CcIP5!XMXEI@5tUeS|Si$M;nhV^)>H&WYGdtCxJN|k8JC1*?f9%
z_RMrDJ$Zc6UfGzmPAVG{@lx->M`q?e{=1KKLv5V3fAC{3lxH3}*n4G!_)9>h>$vx~
z9$PnfW=l)^wo^TA=YH$i1>xUs-jSe=f@T~t^)I513c?GAApt3j^@X|#S3<#n!39yz
zdJhdQz#VYniaU*lVj<VQRhJ^+MN3exH(7daX?Iy2o9}vJX7X%ZE@C&OOQSi9Nv{i9
z8fW|KCCO184EC%m*ZcFnnMY60IUL@>gX>;Y#x_K>VW|JXQDkK6ZFdh&pP!969GeCP
zo|tUdFxu`x9>~c*uwh3_!{+(9RJyM*371l>JMJq_J#pW`#1-s1mMACrIqpYJ(98n&
z_m80KJqoF=Ce>0T*I7gz#b`X_sirh3tX9*;=MWL(WHaUwT6OzK<Cx-*!ZDdCBOPwZ
zd!phs3zG&}`vHImjYFhXL79itsfgQ3(PGApG?1A6Y#UsV0rg7P1x@wLx}GL?wbk#x
zb;t}y_W^V5aC@EAW-<gkzRt1P27J;DaEpaag7J4G7y@yBSReCtj?Ok<Z(TMT@yNaU
zNXL*j%xwf+m&s$AKATEf{Qf1%S!*}a+lERxCG#HkL1e4bdW_rf3aO^CCpq*xV`ImY
z@CAzKp0>gDx!nAwxlC?dN6yT0TFO?Zor2K<r0ZIfFo*|P3k;}h`5Ui2l2$W@8MJ5j
zy5YywY>g&C@U#s~D*0j#FW}pdZot~nwc6?}#pX(@;{&XIHC(Hb2bCBgrUubQ7=Iuh
z*wv*^o*y4P{>+wbO4FF0W|d~!L0-g6Ojnw@xTjMk9{Rl5?zE&e8mr9pBZc7jg-<St
zm&VV3a%u5n=cbJXtsB4#I^8skLs4x>D?M(6p^DC9T+j_2dU$5;(ZhXxhaa6QF3zrt
zAPZ!anA@?xL}ggBPg~ObrRELIPcetAb{+zzP+V}5QUG;GQY-|#DteNQcTf^WQ2+Du
z7U6E$cz>kHheJ{D-bS6Wm-jkSFv!3}!7fmGJoFk=z&8ppByl6C0m%$!V=5sTGUq^+
zfFuBG6MN&5inT}~rRE~ooN53tLQqoV%&q<mgjCBZ=bM-_;-y(A{MK9b?gn?8XUrC{
zyL2_7{!m=!b;Rrw?vg9-(pw5Zsh{;{vwo;s=?efk$-7GK347e((Z{Q>)zrEiVcVFe
z4Vmbz^?)#$qsZV#o-u1pdPkoq<^UnRKVb=2l2uH{I?)%S)z&I&Vn4u;a)7<E!@Z^X
z6sZpz#5>Gzlj#^x5*<t+8tm1zLYJ0RC9MHVVy}{>&tZ^6^BEodkIVgh?!E1{GSS7H
zHcq%45!-~P1w|6AdDt6n^r1+zI;*i@6%p9tnYMz1t0lCmxZYz6TBg;=1*27`R2G=B
zc{TC`ykS==dx1)yu=vgKeK3*9fps?I)I+cS41AxW&Zo`LNplVfViu+^hhtcutD`Wk
zLh(aMv(Fkkq$V168W8g&>TJ;7VG+%G=b#{D1*3L<9JNe_&`upcI#wnIRr#2FsbaiH
zv;_GXd=+-ipV3&k?>qSH^Se_zpn9bG7+58Cj$cY0bQQytdurr!8_QHo&{F6_5PxYN
zWF2oB^722)|CBep$=bcAd^Her|I!mT=uP&Q8?;WR<h7Vw#{csZ*twd0lGCYec-d~!
z8{!`MmnTg%KJkS7X8z3v`R9*6&TI{D=IegZ<8%KkBZl1WjQwT#XPz|FptZVl=X6?l
z#YuaZ{bhT`?WqzoKU4Mbq^qxhr+<laN!0ZlTDuj|Fv;mj-(Zz>@SpMxj?uoMsr~{)
zK`^#>|3yx2Uwn|W4IW%>xqp3SF1T^`Azq?g$HaXt%SxIDALN3J2f;HyRuA3X&_Xi^
z<-QWfu4QCxdVCY6Vyh}V5YCyxj8SaF=p(#^X2pnkt*j1ERvZ@<t23FNm)MQcaq%i9
zX4qRZ`TH<?cbHz6uddx6VNPqwW1X=|9O8h<Z{Aoe@sm2T(^v3AnT(wn?W@$e5IeD}
zKOpORtaRp;k7IMy(z0fgg{{Uajo5-c?l5>e8!<B`v9eaSP9QfbyC+Z_l?@cuPjwFk
zJ~<gSCY(rvYeWwc5>rCFyi?zG%bgI4fUke&EnWJZL<+oBn5>cC)HP1t+9AKmq8+zR
zHtN`R7Ud!Q4#Afx2i-2pVV7=gt~Z9UsQjjq==rzJl*Sif*~q}MIS-mL&uL>&Tx6Nz
z<s_vdLdKHEMaUxb`nbReQ#H-_rIgdH5@-;x6Eh$4Fq(rz&gc}vZ$rUR{*!~*PN6e<
zfc3+g8LK_e5{w1;A8~Wi;TAmhQ&_lJ;0snCe2`ny#m2PNCI~JwP}{nvXS&7nK<&TM
zRPz@#%~t@zAOO=y90sV+l^?z#3U=dPKmk^~ywV~_qQi<T^xfHXk3sZV&30y4>gits
zUJTYeJL>qe)jA%)mwj)wq*d(gDk{F!19j!k2)*#%EWdc*S`&~@C#4DgNo@kR<0M2A
z(7hd)?zVY(D-?=pt6k)+z`Cb%7Fa2ptz%oZj9G!1<&a==n4f5iMA|0u@3MW^5}M*I
zn~0^6wI!en-90^ZcUT*+0#k%JyQa1k8@Ek$Ih8)*K>PiJ+J4yEzSq`+po1&Byxk-x
z^xxP~)K)SS<(pdR$bQZ!+_#T&C-(2-cYF8pyM6DrIrbdj@edr}sSl`msX0@f1?awg
zPyB`WS<D6JQDcxi*o%W?p$!M~bLw1S<kPM42v2PoA4H9d7$HO`uEwLJl$rxfR~}$d
z%5WK&ozq}M2q`JZtQTVt%z*F^G(@brfZIDzS3e%9hGt3-SYC#P-5rtzP)U;3VV2_1
zJ+ulf$Im~se*JAzwSvdviCZl`qd8!61Wo-O*d2RCAw70rbo9cBy$yycmn)9$#X5Ip
zw36OfpG+j;Q~8ErU%=xIfcKy5i@?lU6raiL?s3%mrTS!aqON|x>j?rD8t~FXwFaLR
z1eC#JwI=W~Av<||V*NwsPc++-K3`0NZn_a(qq4Sy%T;A+c;AT&qoW7L(xT{dxiTK)
zob3-n!VqwS`8tx%PsL-&WSt3wMQJG~V8z$iHC^JriQ|ySw8EB715;>KI07yr+FR8C
zhki%~A7;(nb@8Cj{&tT-z=G2Q{Xl#aMOCk_9L2Tx=WFlO>ziV&4HsmCohqz`Np|>(
z0MOjuBKK>d>XrQa2vuWTOQjLn{a627xLf@1;2h6rj$lU!GaaS>fCYr^1&JY_U8x5V
zatWDf(7${20YCt8znTmkjAPc5IR<#i&bNw37*<O5?0z8B^ydm=R*-wRY|X$d*kIE`
z2AC<4a>*5XUY8%Yf&gU9(2&+iIxyF9muWYVoX{|kD~_8HQ_v5pSN(cK(6YK7LEBhQ
zE&`SOIzYqXPv4TpQXpzpBZ(9Vnevx5!$cohwPdirkssl25|EM5Qjguv4YwGpqQ=Dr
z#eWrgEA7YOU3iOtO<idVYRDVfGQ}H-LX`o$wrzP^QX65JOT1M)>|KZpju_&-tJQe>
zx~{y7y0YUpRPKgbHux?+)IjdNeJD(B&^Z6H_zU5i;MZx~=y+{Sev-a(7rS6bVo%tL
zZMhVd*f-e!z)6ziI-KMhK)HWfZ`A?Xs2dL?3af+s>Ic9H!FOSrUjd`X2wE5ULi$Ph
znHYX3PlY$yEc^>LEXc2&!QNJiNOBtK-+;(Ug!>A*Z<l-d8`<}9!V?f`l<(J(?-wXv
zvNT0rCdv>+rtGm-O~OvoihS8CNKW~(zrjo5$hS|a$SdsY2t`<$3LT?tuWyGE#tpQY
zP+n4LLU{rG4mHBJYlr{EtHEBD0VhobeGP3=gV!Nj(3TV6+YwJI1gd`tUbpTg=_nt@
z<W>%{k*KQ8h!LL55Q_oi6-f)ZMxQ|hK}Ow~cG&2xcEC4Xi-B;&N3fy~34EI*ERQSE
zkq=EFO1|jIs0z_=2G;jFEIHwQ_aS{D&L*2?yW-X3$IFj)iVo>>AL$Yt(kJ`2b%nRA
zmp`X>iTARqzlPEk)FQ%y2S5#i_ap6s6H&Hyg>zt|>2!W`XD>3Cd9+<{m@}P9<P73$
z59O?ONiS{O;P($Uzy*ljD~*KrgI@t9jDLxxqV3bgBD51^$<nnVS%;PmWY*0ZY%47!
zuCwZ&#mn%@JDEm#);#LMyUZqCaQ84JyNYn(R-GOj*uOU0oDOGGeEo1&p<s=`n>rku
zp&wrTbMY$XRu6CtI^pqRQL`Udb()*RHx(~iTp+>{B;9cm^OS!aCv8{26S+=^2Nyny
z`XR}-pqi3Zbg{Uo3%9Fqu?j#!4`WyJb0o8!%NLY$p>J`quYb#yepa*c<%V*1GTB{j
z5Y|<$R=(W5u+S~6qu-S;KP3N8yU%B5ZFaBMAsm$d6lXi@aNth<51+k{Zu{)MOUd5Z
zLSeSIrbam@*_~VZ={<dmE00%qm-9kyHUHQ0<?d?nY2^M|&-{Fkkn3KMANSfROUg|-
zuh6NNUfqknOm>`qh5hTNurl9*wdw@?ef>7NIC`AQc12f1E9q&UKwYz&OOa`wq^=l2
z59R_hQsv1sJGp?A=&DNe)}$}Y^j<unB%rXoPBm}Zao|o#mvmAe$0A8I7=mDUgdG`T
za07Ai$FG_l{q{^sFTmUItME4?0>_2mjevB5M^!WJeY-|#?B*{#6E4j(5085Vn@K>Q
z#j5iRW6x-H&e8h5k(ED1T%@O;&p-3b6aZ3Y`+CZ3L!XdsZpyH16D!u{>}EDIAIVz*
zxGO&oEmwMn@VOuTnHTho7Sx&DU!5x-AD5pt+gsUW&yIoWQp{*Jz*1b-o_p@UJ)34j
zo~XI5Y4Zm8JFRxJaGYMZ@(5xJJu5E@k4<%UO|I|in);iDR877C5U!w2AHMpAct(64
zbII2+ZIQAO+7RsUsK7N$(C+weRJh2{qN1r+Vdr6Tz-QrYix@l^IlAQ1TeP?OAH{_T
zKt5%CQ<CEwVIEP~Dl`v)#^tZ%1PUe}tf2HhVz_VxCZA0;DXqA7fDV*FT`$iFrJeUq
zJE~p12j@yAy)oWd@05h7R<OeDi%rtmPLyFvKDSq^&1FQ%X@^_eXdD}RvrDUMuQ9nz
z1EGN4X0-UM%%l%{gAz82(X=%&UL4#rlwg2n7d^H*VAi`rf(VD00F>`))tmKIaY-yT
zX~pd5j*jA{p$3z|=H}W?Os^{?O@_kQ_EtyKK6Km0g22M<bM07vYnzeEmX1?ArjL2x
zs#(}Ma(ccf3Z~}i-JRKm$quvDrY(hRPL$p^7+b$v&$dpEpRX2yC<9mlkFN;iuIgk_
zD+V7M36;Wio44(3iCIk54$xV}qwPVb&M<y(x&I!6q3tN-Y(8hOH4^TK)(oJ_dL=RY
zp-s(m9U-l@rgJ7=yD6g8i9q$&c_jb&p2qp1df*FX$98v>j&17$D?S{I*Y}-o26+V{
zYQy8}B0W$~z&v=rDm$9foY8zy^RL)%wlc_(-F%qh)AMgb1S1v`zGh$-ul5H%#>moF
z*~BQsCT)Ac=S5dT&mj5<HolyUf@8uoh$GGpR%j%J%tY4wIadRL>kq_H^XH3FtCH;v
zDbN*pYDhDb)JhqW0P#_JIew9gdJP%?-H(@BS@dYThL>_Q5rkY<Kt$!^gz)ZBdF3?#
z&c+*(;%fGIf@z1#n4peD&u9cuC?+W0+tK-zcEPicn(TtvqVoqN$)mLxOOx@2#TIM8
zZ1(8&kX1NLfqca5WOhrS#*HNla7WgVP4bwU7dZJFZcm#8h>rAbuij)9B{LN9UIkHZ
zwu*w@V%T_lL}!pBpRVfmdEm7PdcDp8&?3938K2s06|_DGL%>XBtgt-<_$MvYWCfGS
zhctkk6YayjAl49r|Cykv3tI+em)Iki`ULQ190m($c<2C1Mo{?h<6t&Sor>tZX33z7
zAD@J0B9aFpl@0(DdN3^v+GjBI%w{-mwS+t%=uIZG)+m|1TC2qvjF|Oi(Qf)BI38NR
z7Z4fDVKzH~H-)0uv4aq;`d9I0WW;O^*b|^&4vX2YwVAxY{5NXZ=gr3C;<mYP?T(0E
zFJ!zHavzVbZ`NZ<2QSYKuV6sm1S8qxfF>wC5=~Y(HqyCb+Q3M_=+rv~H*88uUX)w@
zITPF#LnQBXPIsUU(UQ$W76u$RhfbR-0ngyi7&tC&H#We6RPTi+9iuT1UNAOqXhLvp
zECDl+4*~*qCpw^A0246M;<2GxB9p8-*hc6Coy{5;s`1ym?JkqvZbEc)zL8F}pUx-s
zmhDoN+t(Njci4~vAOR&GRw(w@n6AvV3*`Y6*BBZPN?sirF*2J9ZP>cK)?}73^$5PW
z{n2|+U57chFwtrZ*z`W=wnDoVSjz!p>%>CNjE9zc9<|58N#o`+My%C}A4x*yKce}x
z=9`)yYJSE*6J3v3tyq1k3uq5b@(Nx}Ycs&@n_<_OY)x_zBOh7B+Eb)E3Vo`udHE*Q
z$JY{2qEW6X12!N=7}f<W)O}owf!6F^=&l=*7>&xN7Oy3VlHv-xqVR`x9qWAtbB@Aj
zrFZhd$|oF3to#$%#pwV}=YlGxSn9HdIJ8`0dIC>|gQa7{cd48l@zpuEtJ@hFcSa)4
z@rbkA<(_lKVov#or!x26n>qEoKH|fe3gin`E52)o-Vk)kS334iH$>Z}@&aq#QIl&Z
zZaO_Oe6pdg$eM=!z~Ryxz{Z03<$bCCjro7B-5rnD)T9#rLRjBZlN!0Tuk+S*waJ04
zB@99=Mgga9!<i#9ch3ldu{jAN8^M`$3oY2;Mrtt<n)i2<w{!{Cpaq>tCoPmjf34l?
z(wi2$#6a4X(Yq}|Z7=9vo6&7yHC<q=TEvD)r{C|K3^}`<!6}!|=b8%QGIUGk%$dyT
z)AC<veO|5J?oMtl#@YiAG<ECkMrR;1w56#y+nYi66%1B`HXTbY=IbX~qsi*T=EB%5
zO=(BaE%^cC&)&B&y{<Kual0n+sljknb(Oo$tIdy<l7p>rUu`L#94%F2LW*wf8(7@k
zY_uC=bpfp2SYKHe{K9!+PB1;=L)~@R9uQkv?_ll3`vkW$ur52Y1e^G3qk)YyM;pOA
zVN<0@y%jrCrttwE;4nw~?$F$>xnJ|F=2Mz4fr2M-CFWe3jyW=Pg*;I^i|SEPkp?OR
zBKiaMSu#^ck0_xJsUZlUZo@^Md7_KZ?TE(@<pQp$t-y#<T7oP>TB34%UZQD~60CBb
z_|oZxsTg9Z^r_<9UhS&F(?+M6Is57xdR>Nq!Dx)nwY4u)i2!XDP2%4cVzEL#9?$<M
zUVyQ0p%D9LPuAXivE1~q*j=0L?afA7EH4NqHyfOOvd^7zH;qL?BZKj=4Ga1F=GlqZ
zz_=%|zG=W@G^HXiPm9#FuS@kmHof7Aj`q&Z_RdFV%1`2I#S*Bs>5VlJ$)Xb;3VGZi
zxQq+^Sb&|E)8%r)62Wf_RfU7xStHB^*prFo<^&aKx)4)JcFtjq*Xm!W&b0Stv%RrE
z&Sv=z%cd>nb<MF>dvNer&X>SO&7bf!9Pg=ecEp;-?l$^N!D5vtrXqKBErc@JTspP6
zSlFCSXS3<_=E7G!O%apZ7)fCf(kMj=0WJ~z9W7{=E7(8RYi`rLgxQPa3#61spMn%D
z=}VD~pEB*xSLK`M3~h#013~I0_-_24Pe-`KndpV<^s-my6-8W)4@`+xV=9knUQuKm
zytAMWpajY+cCAAonKBdcendTu(ty|yzbA+Ux9Lnc;$x|v!{q|Bt9S?y5NkHn^&To0
ze4bn48}rruVW$UD;cPjT8VHB$?G6V?$!xY{98V)1RSvf;W?%DE6hyPrnT*TdU8>EP
z%~H(cPuaCDo5^FA+(v^j9*+*zWJf~rcyG@=L0~RgtG&TmyXbaEK8qP2ULUNAl$)BS
zLseC5aFE^Otak1Kpr{}?U4`<Y-kQ<4E9p`~`~eE7h3AKF#*=Qh8LN)N;iwOX2WnE~
ztRn$u_rdl^eq%gQZMT^qyKy+|^fX0J<93fT+!M!B_9>q!<hJ^t$stLC%P!Hf<}?R#
zPW-vNU76MqM?zoavH2v)3>RxYw*?|rgVXHKVTSYjy&cKUF*~}6#(edP=040a5%7;=
z;I#CCo4TNRQu9^KpKAV%K|`JQ8|nsijGUB}GJN=QI6@z2UN8Kls85uSYanvCvQ8n|
zDy)UU+l*W?Fgm5pQBncL$+RX^LXgi7s~sc*ivs@b5kmhwPo+2Xv1aNJDZ^^7LswG%
zlSsAZ?S@niizb$1^y8$sCJXXcaKju_Qi`qSnW%U#K&dD$y90<Q4r|i$^b78o#VH5|
zul4*fCsh96wI$;I<O}Wyh#;5yE6Z-Ts5fF$>~^0QK4h(S`>HJ#yZAClM%zBY={CEK
zlPsk3*zHNL{0ocE?1vN`zM2K*aylL1Exqz5*s#CB>#ud%gW%hW$UVK#*uA~l5AHv<
z+QP~gMXfghEMAM%=&{)1E_ba@{(F{hneajl*lGlSV<U`J`@hzY-`()TV2!y@W@ud;
z5rB(UZq7}_<MBu&(3>iGk`6-fbs}T=J0CQ-ELIQ5LhV69xJ(#AE>Bpm)81_`w15Sv
z)isJ*z4Qs4?jzs^rmFmLV-%~QAlba2s<rD6S<um}3CQAnNpl1$8hT%(#qUj6KK48&
z??6uq#X&W_uuE-+=UcXN3jShTR&&@1?I#SUXe^cXHwAr}aDy|=1Y^+Y%msoC=)&Os
z1MyMl1X!)BE?AXwm>h=RXIr)~`3Ld5l}3QhCb?6tSgfk5YEx(1#z-)t6(oZc^SbK;
z_H2l?gV&`K0sLl!S|iD+9tAJ-Fy_W?;%b2c0?)d+Q*ju__vW<c!d9Jk5@K-E1f~2_
z7lzqUx7dngYUk|59*KxAx&{1DbsC#IT&w=)l)#)w3uIXIhME6S#>|CO-TcCQUDK{6
zXn^>t1SrCofwpV`M3l9zDm|Ho_D85KlwO}U$6R)|R+z^IB+wWLl|q(?r*6L9<I$nv
zv>tEamV71+m6KT4nJ%|mi(Q7!9q7Ao;X=P3zQ0alhN-R*MSaX4YzmZ)963?~Ngi}-
zb@ASK-R62Lc0A}ZqHyfZH{LvU<ull@M|+~xBh|pGg-p{E?~lXdiNI=VV==o6cm9Ce
zf9p5D`K?`8;?S0QwC4X7W#Na=G?@Z->#*h={IHP^8ZPu!WZpyr0Fo>N>p(Q0!s|ja
zf%(-&!>-ALU1As9u)#|ouDp%lPxEIg@2as9cg;Ovg<u{56|PUhO|0VBzH+bf7CDjI
z+$hT12m44>xsNc~V~vt~vBT;l)q+y(^c_J)F2ArHVf|ZHo+m$G6!k(yiE;U+5aC?q
z89P6C3oH*^1lgVpvzAdUgTJ18=rKE=Y1eKaWhSezZQ!H8gV;`?^7B?Vu8;8R$LRVh
zWq%dU7G2h53dQTFV05h2uZV#Qy9qMY7tpeNTdi!$IX?+Xi+pd5ex}S`c$Ucv)Mcr&
zD!o(@!SbLRo}>ts0G4xPN0;ZSuh^n<Zd6qCCP6VER579DKH*o1JF%5L-??|kLKbpx
zNS>vnIk$Q1wgNhAAZ0K{{mt9M{@G{7%w8tsLiruLb~l>?5-4+{O{!aL@XkNbX%E<S
zX(>HDvmt8>!LN<QXqRdyy}~wksw0)2-MXu_b=OvChPJ2N?o@j^HK&Bkrt#R_??^Nz
z5@Rz9`NI6nSOPZ=HDtb!Ur<AY2Z2W&@nU6^5;{mBd{L)fU{<gZgH>TIHrG$-(pk9M
zhF~@jvkG7%fcL4l#09g>__Pp7m;x>+cX|Tka}RSggd-ua2DJPBlX9(=eYFs43p$=i
zG*LmD5{dDd`2xld{E0wr`zvu22*$%0JHRU<F1rea1I{F8vCw7{6O0<#+^F<?u-8Sx
zkD~|V)(pc0@X^FzQqhDt`&Ug1TSDctA|kXCITwoWSTQYePCY&^y`w~fk_M8$guzNv
zAF+=q=cH&VF7&4%VzB5s7s2e%f|Fu#fC@M2e$Qk}_b)VFVz*6~kDaND#_EQ#kR;?!
zH_i{FtP&oBOW|ah{*8^rP5o)XWZZ=<&Vb%X!Rdibjel}%X66{Hi$&`i#)YHP(?^B+
zXte%xSE_%$@d3Sr6-o?+;9dvw<oiLbnIGbwk8P&=8&M=Sy=&&^vGS1<(Ym_met6Vm
z4*9cGp8G-eneL<btgUflZ!+1pu{dI|h!I4Ifm72(kL2$*Zt735ZAZ$-j!v^C%A>*K
zZJs`Oa7z9*-5thvA|-t=2tI7N=j%J{-M`eBK^o!jd&1-YuX4V61>PF;B4};wz&JAj
zS4anZr%Uvq@%-PldY%&{sr-Fa$w|4TWORT1arLTtZ@?Ku8NY{>yXG@E=ot}elx9gi
zF01zxK7&JtgTnf8P#zz}p~10)Bd45K-$CJDz(Hp^DtXiOt2icb(7WlV#G$iq&AqVZ
zx)O)NcBo~qgwa{MChl`<uBn_w98`8SK9%vha<0v%Ql=#}KINNIukqfsd1y?yr}+A7
z;g#of=I@B%+4DFq-5iHMr}C|NKM(UGjLJ-PE#r7jy{0gV`%xSY^?FU(wfVg5^#_%7
z{5}0@9+mSV?t5@7DaX|n)ImKoZ3wG;n`K;&<Cw)!z@foG?I7W(d}nGaI}R!*9k^!q
z;|y<u8uCm1EA^mj>I;+y9S`H6cyvv9q5ZF3!TC`fmHq(Ft@x85SBz@D&F&Fw!V}Q%
zeOBA4E9$<Yf6Nd!JZ$WQ7U?Bu8XcGZ$ov({u(if|*7{@H5!>tbY5PwduR9-iZFjxq
zKJI?iv)l7)?^k?b-=gm||FHjZ;PJrEgAZ3}s{SD42t5*Zg#R#Ni7ZBb8a)~P_qZp1
zKK`Y|J&7MzKa#9Y?n}N@<ES}b^NmzX>MQAD#*_JV?Z>l=xj^o|y3=)kS3g|;M1#KJ
zbl#HRp8sqiTzIqiQsZ+?@ut&Fzi$3%%h{IKThF)I+Ag-eS{g0=LA$a2eeFN#_)Mp-
z^TVCL?)pOaa`)$Yv^~3eKGJi!x3~9^zQw-p^|$mt)qiDRY2X`!fx(9duM8a+`u1>o
z__2}P$V(&tHo9^2AJ+}9JHGBGW822QHNJ2BwTa1zr`AjB53K*`WZUG2rz}(FrzfYs
zR`!(dD*tH1*oJS+w#~jaSKesb_`s(0rf+Tf`FwPKV*d0(%fb&gKfC2iTR(e?XS;7l
zZt3@SPVD^ku7AAsMLz3%m2HGZF#T0#Cw`;;xHLaf=OzZ5R(wMq4oqZ5{3QAl5&pb-
zt<^YLM7`E&%#dg*arB7uSL(G%;|GPUgiD$#R#vaA$f+3z)0z-cjTFkYpn<}>dMzUS
zkJW3frkdr|YaR3#9#*gQi1TCh+5}C^IrUo7w6Fu}wG|X<+ll>$j~&|6aA^OLJq`PB
zJ$mE>M6mlosvd(&jy+g-58>_zzuK?46>jk$qMaJw2zqv0vvFeQ;hl%#^jjYv*mrp6
z?)d2b<44az?Q<t`*on09)$4j(4`}xB@ZGo`MZU+$&EEW;<0tkXJrZxq7lDDd2Z2-o
zdQlt}lX*??Hz?t6kYskx-cyHm9*1H59ym-sg|hF|pkVL0aYm0GIT_!(=g6MpJ5TP}
z9p80FeEim<Q%8>;$)n0ttCOhLUc7`F^*CN~5@%|VUGUNzN2^jJPvM}r^kx6kzyA*=
CEG^Ce

literal 0
HcmV?d00001

diff --git a/public/assets/fonts/Simple-Line-Icons.woff2 b/public/assets/fonts/Simple-Line-Icons.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..ec9373a5dd05b221e8130398f184da76f2d9f857
GIT binary patch
literal 26384
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

literal 0
HcmV?d00001

diff --git a/public/assets/fonts/fontawesome-webfont.eot b/public/assets/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000000000000000000000000000000000000..a30335d748c65c0bab5880b4e6dba53f5c79206c
GIT binary patch
literal 68875
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%0Aq&KjU6I
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
F002TuuHFCu

literal 0
HcmV?d00001

diff --git a/public/assets/fonts/fontawesome-webfont.svg b/public/assets/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000..6fd19ab
--- /dev/null
+++ b/public/assets/fonts/fontawesome-webfont.svg
@@ -0,0 +1,640 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
+<metadata></metadata>
+<defs>
+<font id="fontawesomeregular" horiz-adv-x="1536" >
+<font-face units-per-em="1792" ascent="1536" descent="-256" />
+<missing-glyph horiz-adv-x="448" />
+<glyph unicode=" "  horiz-adv-x="448" />
+<glyph unicode="&#x09;" horiz-adv-x="448" />
+<glyph unicode="&#xa0;" horiz-adv-x="448" />
+<glyph unicode="&#xa8;" horiz-adv-x="1792" />
+<glyph unicode="&#xa9;" horiz-adv-x="1792" />
+<glyph unicode="&#xae;" horiz-adv-x="1792" />
+<glyph unicode="&#xb4;" horiz-adv-x="1792" />
+<glyph unicode="&#xc6;" horiz-adv-x="1792" />
+<glyph unicode="&#xd8;" horiz-adv-x="1792" />
+<glyph unicode="&#x2000;" horiz-adv-x="768" />
+<glyph unicode="&#x2001;" horiz-adv-x="1537" />
+<glyph unicode="&#x2002;" horiz-adv-x="768" />
+<glyph unicode="&#x2003;" horiz-adv-x="1537" />
+<glyph unicode="&#x2004;" horiz-adv-x="512" />
+<glyph unicode="&#x2005;" horiz-adv-x="384" />
+<glyph unicode="&#x2006;" horiz-adv-x="256" />
+<glyph unicode="&#x2007;" horiz-adv-x="256" />
+<glyph unicode="&#x2008;" horiz-adv-x="192" />
+<glyph unicode="&#x2009;" horiz-adv-x="307" />
+<glyph unicode="&#x200a;" horiz-adv-x="85" />
+<glyph unicode="&#x202f;" horiz-adv-x="307" />
+<glyph unicode="&#x205f;" horiz-adv-x="384" />
+<glyph unicode="&#x2122;" horiz-adv-x="1792" />
+<glyph unicode="&#x221e;" horiz-adv-x="1792" />
+<glyph unicode="&#x2260;" horiz-adv-x="1792" />
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
+<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
+<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
+<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
+<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
+<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
+<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
+<glyph unicode="&#xf011;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf013;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+<glyph unicode="&#xf016;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z " />
+<glyph unicode="&#xf017;" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
+<glyph unicode="&#xf01a;" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01b;" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01c;" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
+<glyph unicode="&#xf01d;" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01e;" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+<glyph unicode="&#xf021;" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
+<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+<glyph unicode="&#xf026;" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+<glyph unicode="&#xf02b;" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
+<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57 q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -4 -0.5 -13t-0.5 -13q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5 q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
+<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142 q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5 t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68.5 -0.5t67.5 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5 t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
+<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q6 2 81.5 21.5t111.5 37.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5 q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
+<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2 t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5 q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
+<glyph unicode="&#xf035;" d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1 t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5 t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49 t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
+<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
+<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf040;" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
+<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+<glyph unicode="&#xf042;" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf043;" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
+<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
+<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
+<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
+<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+<glyph unicode="&#xf04c;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf04d;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
+<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+<glyph unicode="&#xf053;" horiz-adv-x="1280" d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
+<glyph unicode="&#xf054;" horiz-adv-x="1280" d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
+<glyph unicode="&#xf055;" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf056;" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
+<glyph unicode="&#xf057;" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf058;" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf059;" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05a;" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05b;" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf05c;" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05d;" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05e;" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+<glyph unicode="&#xf060;" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
+<glyph unicode="&#xf061;" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
+<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+<glyph unicode="&#xf065;" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf066;" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+<glyph unicode="&#xf06a;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+<glyph unicode="&#xf06b;" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
+<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="&#xf076;" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf077;" horiz-adv-x="1792" d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
+<glyph unicode="&#xf078;" horiz-adv-x="1792" d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
+<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
+<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45 t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf080;" horiz-adv-x="2048" d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
+<glyph unicode="&#xf081;" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf082;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960z" />
+<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+<glyph unicode="&#xf087;" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+<glyph unicode="&#xf088;" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
+<glyph unicode="&#xf089;" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
+<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
+<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+<glyph unicode="&#xf08c;" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf092;" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
+<glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
+<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+<glyph unicode="&#xf096;" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+<glyph unicode="&#xf09a;" horiz-adv-x="1024" d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
+<glyph unicode="&#xf09b;" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
+<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
+<glyph unicode="&#xf0a0;" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+<glyph unicode="&#xf0a2;" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5 t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+<glyph unicode="&#xf0a3;" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf0a6;" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+<glyph unicode="&#xf0a7;" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+<glyph unicode="&#xf0a8;" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0a9;" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0aa;" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0ab;" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0ac;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
+<glyph unicode="&#xf0ad;" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
+<glyph unicode="&#xf0ae;" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0b0;" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
+<glyph unicode="&#xf0b1;" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf0b2;" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " />
+<glyph unicode="&#xf0c0;" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
+<glyph unicode="&#xf0c1;" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
+<glyph unicode="&#xf0c2;" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " />
+<glyph unicode="&#xf0c3;" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
+<glyph unicode="&#xf0c4;" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
+<glyph unicode="&#xf0c5;" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
+<glyph unicode="&#xf0c6;" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" />
+<glyph unicode="&#xf0c7;" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0c8;" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0c9;" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0ca;" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf0cb;" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf0cc;" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
+<glyph unicode="&#xf0cd;" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
+<glyph unicode="&#xf0ce;" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" />
+<glyph unicode="&#xf0d0;" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+<glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d2;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0d3;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
+<glyph unicode="&#xf0d4;" d="M829 318q0 -76 -58.5 -112.5t-139.5 -36.5q-41 0 -80.5 9.5t-75.5 28.5t-58 53t-22 78q0 46 25 80t65.5 51.5t82 25t84.5 7.5q20 0 31 -2q2 -1 23 -16.5t26 -19t23 -18t24.5 -22t19 -22.5t17 -26t9 -26.5t4.5 -31.5zM755 863q0 -60 -33 -99.5t-92 -39.5q-53 0 -93 42.5 t-57.5 96.5t-17.5 106q0 61 32 104t92 43q53 0 93.5 -45t58 -101t17.5 -107zM861 1120l88 64h-265q-85 0 -161 -32t-127.5 -98t-51.5 -153q0 -93 64.5 -154.5t158.5 -61.5q22 0 43 3q-13 -29 -13 -54q0 -44 40 -94q-175 -12 -257 -63q-47 -29 -75.5 -73t-28.5 -95 q0 -43 18.5 -77.5t48.5 -56.5t69 -37t77.5 -21t76.5 -6q60 0 120.5 15.5t113.5 46t86 82.5t33 117q0 49 -20 89.5t-49 66.5t-58 47.5t-49 44t-20 44.5t15.5 42.5t37.5 39.5t44 42t37.5 59.5t15.5 82.5q0 60 -22.5 99.5t-72.5 90.5h83zM1152 672h128v64h-128v128h-64v-128 h-128v-64h128v-160h64v160zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0d5;" horiz-adv-x="1664" d="M735 740q0 -36 32 -70.5t77.5 -68t90.5 -73.5t77 -104t32 -142q0 -90 -48 -173q-72 -122 -211 -179.5t-298 -57.5q-132 0 -246.5 41.5t-171.5 137.5q-37 60 -37 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 42 -47.5 74t-15.5 73q0 36 21 85q-46 -4 -68 -4 q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q77 66 182.5 98t217.5 32h418l-138 -88h-131q74 -63 112 -133t38 -160q0 -72 -24.5 -129.5t-59 -93t-69.5 -65t-59.5 -61.5t-24.5 -66zM589 836q38 0 78 16.5t66 43.5q53 57 53 159q0 58 -17 125t-48.5 129.5 t-84.5 103.5t-117 41q-42 0 -82.5 -19.5t-65.5 -52.5q-47 -59 -47 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26zM591 -37q58 0 111.5 13t99 39t73 73t27.5 109q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -48 2 q-53 0 -105 -7t-107.5 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -70 35 -123.5t91.5 -83t119 -44t127.5 -14.5zM1401 839h213v-108h-213v-219h-105v219h-212v108h212v217h105v-217z" />
+<glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0d9;" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf0da;" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0db;" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf0dc;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0dd;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0de;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0e0;" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
+<glyph unicode="&#xf0e1;" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
+<glyph unicode="&#xf0e2;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
+<glyph unicode="&#xf0e3;" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
+<glyph unicode="&#xf0e4;" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf0e5;" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="&#xf0e6;" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
+<glyph unicode="&#xf0e7;" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
+<glyph unicode="&#xf0e8;" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" />
+<glyph unicode="&#xf0e9;" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf0ea;" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0eb;" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
+<glyph unicode="&#xf0ec;" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="&#xf0ed;" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="&#xf0ee;" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="&#xf0f0;" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf0f1;" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="&#xf0f2;" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" />
+<glyph unicode="&#xf0f3;" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5 t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+<glyph unicode="&#xf0f4;" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf0f5;" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f6;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704 q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" />
+<glyph unicode="&#xf0f7;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f8;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f9;" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0fa;" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf0fb;" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" />
+<glyph unicode="&#xf0fc;" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+<glyph unicode="&#xf0fd;" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0fe;" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf100;" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
+<glyph unicode="&#xf101;" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf102;" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf103;" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf104;" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf105;" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf106;" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf107;" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf108;" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf109;" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
+<glyph unicode="&#xf10a;" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf10b;" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf10c;" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf10d;" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
+<glyph unicode="&#xf10e;" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
+<glyph unicode="&#xf110;" horiz-adv-x="1792" d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5 t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5 q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf111;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf112;" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
+<glyph unicode="&#xf113;" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
+<glyph unicode="&#xf114;" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf115;" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
+<glyph unicode="&#xf116;" horiz-adv-x="1792" />
+<glyph unicode="&#xf117;" horiz-adv-x="1792" />
+<glyph unicode="&#xf118;" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf119;" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf11a;" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf11b;" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
+<glyph unicode="&#xf11c;" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf11d;" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+<glyph unicode="&#xf11e;" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+<glyph unicode="&#xf120;" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" />
+<glyph unicode="&#xf121;" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
+<glyph unicode="&#xf122;" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
+<glyph unicode="&#xf123;" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
+<glyph unicode="&#xf124;" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
+<glyph unicode="&#xf125;" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf126;" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="&#xf127;" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+<glyph unicode="&#xf128;" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
+<glyph unicode="&#xf129;" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf12a;" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
+<glyph unicode="&#xf12b;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" />
+<glyph unicode="&#xf12c;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" />
+<glyph unicode="&#xf12d;" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
+<glyph unicode="&#xf12e;" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
+<glyph unicode="&#xf130;" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
+<glyph unicode="&#xf131;" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
+<glyph unicode="&#xf132;" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf133;" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf134;" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
+<glyph unicode="&#xf135;" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
+<glyph unicode="&#xf136;" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
+<glyph unicode="&#xf137;" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf138;" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf139;" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf13a;" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf13b;" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
+<glyph unicode="&#xf13c;" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
+<glyph unicode="&#xf13d;" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf13e;" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" />
+<glyph unicode="&#xf140;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf141;" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf142;" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf143;" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf144;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" />
+<glyph unicode="&#xf145;" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
+<glyph unicode="&#xf146;" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
+<glyph unicode="&#xf147;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf148;" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
+<glyph unicode="&#xf149;" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
+<glyph unicode="&#xf14a;" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14b;" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14c;" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14d;" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14e;" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf150;" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf151;" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf152;" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf153;" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
+<glyph unicode="&#xf154;" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
+<glyph unicode="&#xf155;" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" />
+<glyph unicode="&#xf156;" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf157;" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
+<glyph unicode="&#xf158;" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
+<glyph unicode="&#xf159;" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf15a;" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
+<glyph unicode="&#xf15b;" d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" />
+<glyph unicode="&#xf15c;" d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" />
+<glyph unicode="&#xf15d;" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" />
+<glyph unicode="&#xf15e;" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" />
+<glyph unicode="&#xf160;" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf161;" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf162;" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
+<glyph unicode="&#xf163;" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
+<glyph unicode="&#xf164;" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
+<glyph unicode="&#xf165;" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
+<glyph unicode="&#xf166;" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf167;" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
+<glyph unicode="&#xf168;" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" />
+<glyph unicode="&#xf169;" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf16a;" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
+<glyph unicode="&#xf16b;" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
+<glyph unicode="&#xf16c;" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" />
+<glyph unicode="&#xf16d;" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" />
+<glyph unicode="&#xf16e;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
+<glyph unicode="&#xf170;" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf171;" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
+<glyph unicode="&#xf172;" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf173;" horiz-adv-x="1024" d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14 q78 2 134 29z" />
+<glyph unicode="&#xf174;" d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf175;" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
+<glyph unicode="&#xf176;" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
+<glyph unicode="&#xf177;" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf178;" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
+<glyph unicode="&#xf179;" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
+<glyph unicode="&#xf17a;" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
+<glyph unicode="&#xf17b;" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
+<glyph unicode="&#xf17c;" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
+<glyph unicode="&#xf17d;" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf17e;" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
+<glyph unicode="&#xf180;" horiz-adv-x="1280" d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324 l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" />
+<glyph unicode="&#xf181;" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf182;" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf183;" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf184;" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf185;" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
+<glyph unicode="&#xf186;" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
+<glyph unicode="&#xf187;" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf188;" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
+<glyph unicode="&#xf189;" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" />
+<glyph unicode="&#xf18a;" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
+<glyph unicode="&#xf18b;" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
+<glyph unicode="&#xf18c;" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
+<glyph unicode="&#xf18d;" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " />
+<glyph unicode="&#xf18e;" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf190;" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf191;" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf192;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf193;" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
+<glyph unicode="&#xf194;" d="M1292 898q10 216 -161 222q-231 8 -312 -261q44 19 82 19q85 0 74 -96q-4 -57 -74 -167t-105 -110q-43 0 -82 169q-13 54 -45 255q-30 189 -160 177q-59 -7 -164 -100l-81 -72l-81 -72l52 -67q76 52 87 52q57 0 107 -179q15 -55 45 -164.5t45 -164.5q68 -179 164 -179 q157 0 383 294q220 283 226 444zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf195;" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf196;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf197;" horiz-adv-x="2176" d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40 t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29 q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" />
+<glyph unicode="&#xf198;" horiz-adv-x="1664" d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9 q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102 t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" />
+<glyph unicode="&#xf199;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69 q-46 32 -141.5 92.5t-142.5 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13 t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" />
+<glyph unicode="&#xf19a;" horiz-adv-x="1792" d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5 t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21 t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286 t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273 t273 -182.5t331.5 -68z" />
+<glyph unicode="&#xf19b;" horiz-adv-x="1792" d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" />
+<glyph unicode="&#xf19c;" horiz-adv-x="2048" d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64 q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
+<glyph unicode="&#xf19d;" horiz-adv-x="2304" d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433 q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
+<glyph unicode="&#xf19e;" d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q43 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0 q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
+<glyph unicode="&#xf1a0;" horiz-adv-x="1280" d="M981 197q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -49 2q-53 0 -104.5 -7t-107 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -56 23.5 -102t61 -75.5t87 -50t100 -29t101.5 -8.5q58 0 111.5 13t99 39t73 73t27.5 109zM864 1055 q0 59 -17 125.5t-48 129t-84 103.5t-117 41q-42 0 -82.5 -19.5t-66.5 -52.5q-46 -59 -46 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26q37 0 77.5 16.5t65.5 43.5q53 56 53 159zM752 1536h417l-137 -88h-132q75 -63 113 -133t38 -160q0 -72 -24.5 -129.5 t-59.5 -93t-69.5 -65t-59 -61.5t-24.5 -66q0 -36 32 -70.5t77 -68t90.5 -73.5t77.5 -104t32 -142q0 -91 -49 -173q-71 -122 -209.5 -179.5t-298.5 -57.5q-132 0 -246.5 41.5t-172.5 137.5q-36 59 -36 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 41 -47.5 73.5 t-15.5 73.5q0 40 21 85q-46 -4 -68 -4q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q76 66 182 98t218 32z" />
+<glyph unicode="&#xf1a1;" horiz-adv-x="1792" d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26 t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37 q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191 t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf1a2;" d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54 q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83 q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1a3;" d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150 v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103 t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf1a4;" horiz-adv-x="1920" d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328 v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" />
+<glyph unicode="&#xf1a5;" d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
+<glyph unicode="&#xf1a6;" horiz-adv-x="2048" d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123 v-369h123z" />
+<glyph unicode="&#xf1a7;" d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101 v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1a8;" horiz-adv-x="2038" d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14 q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24 q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33 q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5 t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43 q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5 t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13 t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" />
+<glyph unicode="&#xf1a9;" d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10 q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14 q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14 t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44 q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" />
+<glyph unicode="&#xf1aa;" d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5 t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5 q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126 t135.5 51q85 0 145 -60.5t60 -145.5z" />
+<glyph unicode="&#xf1ab;" d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5 q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28 q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11 q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q106 35 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5 q20 0 20 -21v-418z" />
+<glyph unicode="&#xf1ac;" horiz-adv-x="1792" d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48 l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23 t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128 q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128 q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" />
+<glyph unicode="&#xf1ad;" d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9 t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9 t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9 t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" />
+<glyph unicode="&#xf1ae;" horiz-adv-x="1280" d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68t68 28t68 -28l228 -228h368l228 228q28 28 68 28t68 -28t28 -68t-28 -68zM864 1152q0 -93 -65.5 -158.5 t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf1b0;" horiz-adv-x="1664" d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5 q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819 q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5 t100.5 134t141.5 55.5z" />
+<glyph unicode="&#xf1b1;" horiz-adv-x="768" d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" />
+<glyph unicode="&#xf1b2;" horiz-adv-x="1792" d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z " />
+<glyph unicode="&#xf1b3;" horiz-adv-x="2304" d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67 t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-5 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70 v-400l434 -186q36 -16 57 -48t21 -70z" />
+<glyph unicode="&#xf1b4;" horiz-adv-x="2048" d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658 q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204 q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" />
+<glyph unicode="&#xf1b5;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5 t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217 t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" />
+<glyph unicode="&#xf1b6;" horiz-adv-x="1792" d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5 q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89 q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" />
+<glyph unicode="&#xf1b7;" d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5 q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5 q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z " />
+<glyph unicode="&#xf1b8;" horiz-adv-x="1792" d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188 l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5 t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1 q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" />
+<glyph unicode="&#xf1b9;" horiz-adv-x="2048" d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384 q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5 l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf1ba;" horiz-adv-x="2048" d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5 t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" />
+<glyph unicode="&#xf1bb;" d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384 q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" />
+<glyph unicode="&#xf1bc;" d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64 q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37 q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf1bd;" horiz-adv-x="1024" d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" />
+<glyph unicode="&#xf1be;" horiz-adv-x="2304" d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11 q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245 q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785 l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242 q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236q0 -11 -8 -19 t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786q-13 2 -22 11t-9 22v899 q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" />
+<glyph unicode="&#xf1c0;" d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127 t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5 t-103 128v128q0 69 103 128t280 93.5t385 34.5z" />
+<glyph unicode="&#xf1c1;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197 q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8 q-1 1 -1 2t-0.5 1.5t-0.5 1.5q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" />
+<glyph unicode="&#xf1c2;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4l-3 21q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5t-3.5 -21.5l-4 -21h-4l-2 21 q-2 26 -7 46l-99 438h90v107h-300z" />
+<glyph unicode="&#xf1c3;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107 h-290v-107h68l189 -272l-194 -283h-68z" />
+<glyph unicode="&#xf1c4;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" />
+<glyph unicode="&#xf1c5;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" />
+<glyph unicode="&#xf1c6;" d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400 v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79 q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" />
+<glyph unicode="&#xf1c7;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5 q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" />
+<glyph unicode="&#xf1c8;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" />
+<glyph unicode="&#xf1c9;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243 l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" />
+<glyph unicode="&#xf1ca;" d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406 q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" />
+<glyph unicode="&#xf1cb;" horiz-adv-x="1792" d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546 q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
+<glyph unicode="&#xf1cc;" horiz-adv-x="2048" d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94 q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55 t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97q14 -16 29.5 -34t34.5 -40t29 -34q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5 t-85 -189.5z" />
+<glyph unicode="&#xf1cd;" horiz-adv-x="1792" d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194 q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5 t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
+<glyph unicode="&#xf1ce;" horiz-adv-x="1792" d="M1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348q0 222 101 414.5t276.5 317t390.5 155.5v-260q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 q0 230 -145.5 406t-366.5 221v260q215 -31 390.5 -155.5t276.5 -317t101 -414.5z" />
+<glyph unicode="&#xf1d0;" horiz-adv-x="1792" d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170 t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136 q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
+<glyph unicode="&#xf1d1;" horiz-adv-x="1792" d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251 l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162 q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33 q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5 t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf1d2;" d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85 q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392 q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072 q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1d3;" horiz-adv-x="1792" d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58 q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47 q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171 v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" />
+<glyph unicode="&#xf1d4;" d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1d5;" horiz-adv-x="1280" d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5 t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153 t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" />
+<glyph unicode="&#xf1d6;" horiz-adv-x="1792" d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5 q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20 t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5 t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" />
+<glyph unicode="&#xf1d7;" horiz-adv-x="2048" d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25 q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5 q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109 q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" />
+<glyph unicode="&#xf1d8;" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" />
+<glyph unicode="&#xf1d9;" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137 l863 639l-478 -797z" />
+<glyph unicode="&#xf1da;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23 t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf1db;" d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf1dc;" horiz-adv-x="1792" d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15 t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2 t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160 q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5 q0 -26 -12 -48t-36 -22z" />
+<glyph unicode="&#xf1dd;" horiz-adv-x="1280" d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179 q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" />
+<glyph unicode="&#xf1de;" d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256 q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
+<glyph unicode="&#xf1e0;" d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5 t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" />
+<glyph unicode="&#xf1e1;" d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5 t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1e2;" horiz-adv-x="1792" d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5 t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91 q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9 t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+<glyph unicode="&#xf1e3;" horiz-adv-x="1792" d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323 l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" />
+<glyph unicode="&#xf1e4;" horiz-adv-x="1792" d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23 zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5 t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" />
+<glyph unicode="&#xf1e5;" horiz-adv-x="1792" d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf1e6;" horiz-adv-x="1792" d="M1755 1083q37 -37 37 -90t-37 -91l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234l401 400 q38 37 91 37t90 -37z" />
+<glyph unicode="&#xf1e7;" horiz-adv-x="1792" d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5 t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q3 -2 11 -7 t11 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" />
+<glyph unicode="&#xf1e8;" horiz-adv-x="1792" d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
+<glyph unicode="&#xf1e9;" d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36 q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q70 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5 t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87 q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" />
+<glyph unicode="&#xf1ea;" horiz-adv-x="2048" d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19 t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" />
+<glyph unicode="&#xf1eb;" horiz-adv-x="2048" d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121 q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
+<glyph unicode="&#xf1ec;" horiz-adv-x="1792" d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5 t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38 h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1ed;" d="M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246 q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598 q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z" />
+<glyph unicode="&#xf1ee;" horiz-adv-x="1792" d="M602 949q19 -61 31 -123.5t17 -141.5t-14 -159t-62 -145q-21 81 -67 157t-95.5 127t-99 90.5t-78.5 57.5t-33 19q-62 34 -81.5 100t14.5 128t101 81.5t129 -14.5q138 -83 238 -177zM927 1236q11 -25 20.5 -46t36.5 -100.5t42.5 -150.5t25.5 -179.5t0 -205.5t-47.5 -209.5 t-105.5 -208.5q-51 -72 -138 -72q-54 0 -98 31q-57 40 -69 109t28 127q60 85 81 195t13 199.5t-32 180.5t-39 128t-22 52q-31 63 -8.5 129.5t85.5 97.5q34 17 75 17q47 0 88.5 -25t63.5 -69zM1248 567q-17 -160 -72 -311q-17 131 -63 246q25 174 -5 361q-27 178 -94 342 q114 -90 212 -211q9 -37 15 -80q26 -179 7 -347zM1520 1440q9 -17 23.5 -49.5t43.5 -117.5t50.5 -178t34 -227.5t5 -269t-47 -300t-112.5 -323.5q-22 -48 -66 -75.5t-95 -27.5q-39 0 -74 16q-67 31 -92.5 100t4.5 136q58 126 90 257.5t37.5 239.5t-3.5 213.5t-26.5 180.5 t-38.5 138.5t-32.5 90t-15.5 32.5q-34 65 -11.5 135.5t87.5 104.5q37 20 81 20q49 0 91.5 -25.5t66.5 -70.5z" />
+<glyph unicode="&#xf1f0;" horiz-adv-x="2304" d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27 q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128 q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1f1;" horiz-adv-x="2304" d="M671 603h-13q-47 0 -47 -32q0 -22 20 -22q17 0 28 15t12 39zM1066 639h62v3q1 4 0.5 6.5t-1 7t-2 8t-4.5 6.5t-7.5 5t-11.5 2q-28 0 -36 -38zM1606 603h-12q-48 0 -48 -32q0 -22 20 -22q17 0 28 15t12 39zM1925 629q0 41 -30 41q-19 0 -31 -20t-12 -51q0 -42 28 -42 q20 0 32.5 20t12.5 52zM480 770h87l-44 -262h-56l32 201l-71 -201h-39l-4 200l-34 -200h-53l44 262h81l2 -163zM733 663q0 -6 -4 -42q-16 -101 -17 -113h-47l1 22q-20 -26 -58 -26q-23 0 -37.5 16t-14.5 42q0 39 26 60.5t73 21.5q14 0 23 -1q0 3 0.5 5.5t1 4.5t0.5 3 q0 20 -36 20q-29 0 -59 -10q0 4 7 48q38 11 67 11q74 0 74 -62zM889 721l-8 -49q-22 3 -41 3q-27 0 -27 -17q0 -8 4.5 -12t21.5 -11q40 -19 40 -60q0 -72 -87 -71q-34 0 -58 6q0 2 7 49q29 -8 51 -8q32 0 32 19q0 7 -4.5 11.5t-21.5 12.5q-43 20 -43 59q0 72 84 72 q30 0 50 -4zM977 721h28l-7 -52h-29q-2 -17 -6.5 -40.5t-7 -38.5t-2.5 -18q0 -16 19 -16q8 0 16 2l-8 -47q-21 -7 -40 -7q-43 0 -45 47q0 12 8 56q3 20 25 146h55zM1180 648q0 -23 -7 -52h-111q-3 -22 10 -33t38 -11q30 0 58 14l-9 -54q-30 -8 -57 -8q-95 0 -95 95 q0 55 27.5 90.5t69.5 35.5q35 0 55.5 -21t20.5 -56zM1319 722q-13 -23 -22 -62q-22 2 -31 -24t-25 -128h-56l3 14q22 130 29 199h51l-3 -33q14 21 25.5 29.5t28.5 4.5zM1506 763l-9 -57q-28 14 -50 14q-31 0 -51 -27.5t-20 -70.5q0 -30 13.5 -47t38.5 -17q21 0 48 13 l-10 -59q-28 -8 -50 -8q-45 0 -71.5 30.5t-26.5 82.5q0 70 35.5 114.5t91.5 44.5q26 0 61 -13zM1668 663q0 -18 -4 -42q-13 -79 -17 -113h-46l1 22q-20 -26 -59 -26q-23 0 -37 16t-14 42q0 39 25.5 60.5t72.5 21.5q15 0 23 -1q2 7 2 13q0 20 -36 20q-29 0 -59 -10q0 4 8 48 q38 11 67 11q73 0 73 -62zM1809 722q-14 -24 -21 -62q-23 2 -31.5 -23t-25.5 -129h-56l3 14q19 104 29 199h52q0 -11 -4 -33q15 21 26.5 29.5t27.5 4.5zM1950 770h56l-43 -262h-53l3 19q-23 -23 -52 -23q-31 0 -49.5 24t-18.5 64q0 53 27.5 92t64.5 39q31 0 53 -29z M2061 640q0 148 -72.5 273t-198 198t-273.5 73q-181 0 -328 -110q127 -116 171 -284h-50q-44 150 -158 253q-114 -103 -158 -253h-50q44 168 171 284q-147 110 -328 110q-148 0 -273.5 -73t-198 -198t-72.5 -273t72.5 -273t198 -198t273.5 -73q181 0 328 110 q-120 111 -165 264h50q46 -138 152 -233q106 95 152 233h50q-45 -153 -165 -264q147 -110 328 -110q148 0 273.5 73t198 198t72.5 273zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1f2;" horiz-adv-x="2304" d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42 q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604 v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569 q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73 t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
+<glyph unicode="&#xf1f3;" horiz-adv-x="2304" d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260 l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279 v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040 q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168 q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5 t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21 h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5 t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
+<glyph unicode="&#xf1f4;" horiz-adv-x="2304" d="M745 630q0 -37 -25.5 -61.5t-62.5 -24.5q-29 0 -46.5 16t-17.5 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM1530 779q0 -42 -22 -57t-66 -15l-32 -1l17 107q2 11 13 11h18q22 0 35 -2t25 -12.5t12 -30.5zM1881 630q0 -36 -25.5 -61t-61.5 -25q-29 0 -47 16 t-18 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM513 801q0 59 -38.5 85.5t-100.5 26.5h-160q-19 0 -21 -19l-65 -408q-1 -6 3 -11t10 -5h76q20 0 22 19l18 110q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM822 489l41 261q1 6 -3 11t-10 5h-76 q-14 0 -17 -33q-27 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q28 0 58 12t48 32q-4 -12 -4 -21q0 -16 13 -16h69q19 0 22 19zM1269 752q0 5 -4 9.5t-9 4.5h-77q-11 0 -18 -10l-106 -156l-44 150q-5 16 -22 16h-75q-5 0 -9 -4.5t-4 -9.5q0 -2 19.5 -59 t42 -123t23.5 -70q-82 -112 -82 -120q0 -13 13 -13h77q11 0 18 10l255 368q2 2 2 7zM1649 801q0 59 -38.5 85.5t-100.5 26.5h-159q-20 0 -22 -19l-65 -408q-1 -6 3 -11t10 -5h82q12 0 16 13l18 116q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM1958 489 l41 261q1 6 -3 11t-10 5h-76q-14 0 -17 -33q-26 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q29 0 59 12t47 32q0 -1 -2 -9t-2 -12q0 -16 13 -16h69q19 0 22 19zM2176 898v1q0 14 -13 14h-74q-11 0 -13 -11l-65 -416l-1 -2q0 -5 4 -9.5t10 -4.5h66 q19 0 21 19zM392 764q-5 -35 -26 -46t-60 -11l-33 -1l17 107q2 11 13 11h19q40 0 58 -11.5t12 -48.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1f5;" horiz-adv-x="2304" d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109 q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118 q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151 q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31 q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1f6;" horiz-adv-x="2048" d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5 l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5 l418 363q10 8 23.5 7t21.5 -11z" />
+<glyph unicode="&#xf1f7;" horiz-adv-x="2048" d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128 q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161 q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" />
+<glyph unicode="&#xf1f8;" horiz-adv-x="1408" d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704 q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167 q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf1f9;" d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5 t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf1fa;" d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53 q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24 t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61 t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" />
+<glyph unicode="&#xf1fb;" horiz-adv-x="1792" d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10 t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" />
+<glyph unicode="&#xf1fc;" horiz-adv-x="1792" d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5 t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" />
+<glyph unicode="&#xf1fd;" horiz-adv-x="1792" d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11t55.5 -11t52.5 -38q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5t47 37.5 q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-35 0 -55.5 11t-52.5 38q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38t-58 27 t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448h256v448 h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51 t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" />
+<glyph unicode="&#xf1fe;" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
+<glyph unicode="&#xf200;" horiz-adv-x="1792" d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf201;" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9 t9 -23z" />
+<glyph unicode="&#xf202;" horiz-adv-x="1792" d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20 q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50 t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1 q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" />
+<glyph unicode="&#xf203;" d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73 q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110 q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf204;" horiz-adv-x="2048" d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5 t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5 t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" />
+<glyph unicode="&#xf205;" horiz-adv-x="2048" d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5 t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
+<glyph unicode="&#xf206;" horiz-adv-x="2304" d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94 q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469 q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400 q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" />
+<glyph unicode="&#xf207;" d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5 h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" />
+<glyph unicode="&#xf208;" horiz-adv-x="2048" d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327 q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5 q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" />
+<glyph unicode="&#xf209;" horiz-adv-x="1280" d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q18 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119 t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5 t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14 q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88 q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5 t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" />
+<glyph unicode="&#xf20a;" horiz-adv-x="2048" d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206 q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307 t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14 t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" />
+<glyph unicode="&#xf20b;" d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5 t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf20c;" d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55 q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410 q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" />
+<glyph unicode="&#xf20d;" d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" />
+<glyph unicode="&#xf20e;" horiz-adv-x="2048" d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335 q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5 q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360q2 0 4.5 -1t5.5 -2.5l5 -2.5l188 199v347l-187 194 q-13 -8 -29 -10zM986 1438h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13 zM552 226h402l64 66l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224 l213 -225zM1023 946l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196 l-48 -227l130 227h-82zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" />
+<glyph unicode="&#xf210;" d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" />
+<glyph unicode="&#xf211;" d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384 q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" />
+<glyph unicode="&#xf212;" horiz-adv-x="2048" d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021 q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25 q209 0 374 -102q172 107 374 102z" />
+<glyph unicode="&#xf213;" horiz-adv-x="2048" d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101 q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284 q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" />
+<glyph unicode="&#xf214;" d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34 l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114 v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378 v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51 h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5 t-43 -34t-16.5 -53.5z" />
+<glyph unicode="&#xf215;" horiz-adv-x="2048" d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832 q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" />
+<glyph unicode="&#xf216;" horiz-adv-x="2048" d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126.5t-103.5 132.5t-108.5 126t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5 t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113 t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5 q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" />
+<glyph unicode="&#xf217;" horiz-adv-x="1664" d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920 q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf218;" horiz-adv-x="1664" d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920 q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf219;" horiz-adv-x="2048" d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20 l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" />
+<glyph unicode="&#xf21a;" horiz-adv-x="2048" d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83 q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83 q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314 v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83 q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
+<glyph unicode="&#xf21b;" d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14 t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5 q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31 t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" />
+<glyph unicode="&#xf21c;" horiz-adv-x="2304" d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5 t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105 l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226 t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" />
+<glyph unicode="&#xf21d;" d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12 q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384 q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5 t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf21e;" horiz-adv-x="1792" d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221 q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124 t127 -344z" />
+<glyph unicode="&#xf221;" horiz-adv-x="1280" d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292 q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" />
+<glyph unicode="&#xf222;" d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-382 -383q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5 q203 0 359 -126l382 382h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf223;" horiz-adv-x="1280" d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5 t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf224;" d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64 q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf225;" horiz-adv-x="1792" d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64 q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9 t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5 t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf226;" horiz-adv-x="1792" d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23 t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391 q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391 q0 -226 -154 -391q103 -57 218 -57z" />
+<glyph unicode="&#xf227;" horiz-adv-x="1920" d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230 q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9 t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128 q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -29 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" />
+<glyph unicode="&#xf228;" horiz-adv-x="2048" d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23 t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9 t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5 t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" />
+<glyph unicode="&#xf229;" d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-213 -214l140 -140q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-140 141l-78 -79q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5 t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5q203 0 359 -126l78 78l-172 172q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l172 -172l213 213h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf22a;" horiz-adv-x="1280" d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22 t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5 t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf22b;" horiz-adv-x="2048" d="M1901 621q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-132q-24 -217 -187.5 -364.5t-384.5 -147.5q-167 0 -306 87t-212 236t-54 319q15 133 88 245.5 t188 182t249 80.5q155 12 292 -52.5t224 -186t103 -271.5h132v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM576 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5 t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf22c;" horiz-adv-x="1280" d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5 t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf22d;" horiz-adv-x="1280" d="M1024 576q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1152 576q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123 t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5z" />
+<glyph unicode="&#xf22e;" horiz-adv-x="1792" />
+<glyph unicode="&#xf22f;" horiz-adv-x="1792" />
+<glyph unicode="&#xf230;" d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" />
+<glyph unicode="&#xf231;" horiz-adv-x="1280" d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5 l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5 q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" />
+<glyph unicode="&#xf232;" d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5 t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233 l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" />
+<glyph unicode="&#xf233;" horiz-adv-x="1792" d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216 q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
+<glyph unicode="&#xf234;" horiz-adv-x="2048" d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5 t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" />
+<glyph unicode="&#xf235;" horiz-adv-x="2048" d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136 q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69 t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" />
+<glyph unicode="&#xf236;" horiz-adv-x="2048" d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704 q-26 0 -45 -19t-19 -45v-384h1152z" />
+<glyph unicode="&#xf237;" d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
+<glyph unicode="&#xf238;" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56 t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
+<glyph unicode="&#xf239;" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47 t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
+<glyph unicode="&#xf23a;" horiz-adv-x="1792" d="M1792 204v-209h-642v209h134v926h-6l-314 -1135h-243l-310 1135h-8v-926h135v-209h-538v209h69q21 0 43 19.5t22 37.5v881q0 18 -22 40t-43 22h-69v209h672l221 -821h6l223 821h670v-209h-71q-19 0 -41 -22t-22 -40v-881q0 -18 21.5 -37.5t41.5 -19.5h71z" />
+<glyph unicode="&#xf23b;" d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
+<glyph unicode="&#xf23c;" horiz-adv-x="2296" d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5 q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5 q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42 q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37 q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5 q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139 q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 4 5 8q16 18 60 23h13q5 18 19 30t33 8 t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132 q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132 q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-106 2 -211 0v1q-1 -27 2.5 -86 t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103 q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34l3 9v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4l-10 -2.5t-12 -2 l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-2 0 -3 -0.5t-3 -0.5h-3q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130t-73 70 q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -2 -1 -5t-1 -4q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150 q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12 q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" />
+<glyph unicode="&#xf23d;" horiz-adv-x="2304" d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5 t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5 t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" />
+<glyph unicode="&#xf23e;" horiz-adv-x="1792" d="M896 1472q-169 0 -323 -66t-265.5 -177.5t-177.5 -265.5t-66 -323t66 -323t177.5 -265.5t265.5 -177.5t323 -66t323 66t265.5 177.5t177.5 265.5t66 323t-66 323t-177.5 265.5t-265.5 177.5t-323 66zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348 t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM496 704q16 0 16 -16v-480q0 -16 -16 -16h-32q-16 0 -16 16v480q0 16 16 16h32zM896 640q53 0 90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-114q0 -14 -9 -23 t-23 -9h-64q-14 0 -23 9t-9 23v114q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5zM896 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM544 928v-96 q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5v-96q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 146 -103 249t-249 103t-249 -103t-103 -249zM1408 192v512q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-512 q0 -26 19 -45t45 -19h896q26 0 45 19t19 45z" />
+<glyph unicode="&#xf240;" horiz-adv-x="2304" d="M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288zM2304 832v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113 v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf241;" horiz-adv-x="2304" d="M256 256v768h1280v-768h-1280zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9 h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+<glyph unicode="&#xf242;" horiz-adv-x="2304" d="M256 256v768h896v-768h-896zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9 h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+<glyph unicode="&#xf243;" horiz-adv-x="2304" d="M256 256v768h512v-768h-512zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9 h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+<glyph unicode="&#xf244;" horiz-adv-x="2304" d="M2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23 v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+<glyph unicode="&#xf245;" horiz-adv-x="1280" d="M1133 493q31 -30 14 -69q-17 -40 -59 -40h-382l201 -476q10 -25 0 -49t-34 -35l-177 -75q-25 -10 -49 0t-35 34l-191 452l-312 -312q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v1504q0 42 40 59q12 5 24 5q27 0 45 -19z" />
+<glyph unicode="&#xf246;" horiz-adv-x="1024" d="M832 1408q-320 0 -320 -224v-416h128v-128h-128v-544q0 -224 320 -224h64v-128h-64q-272 0 -384 146q-112 -146 -384 -146h-64v128h64q320 0 320 224v544h-128v128h128v416q0 224 -320 224h-64v128h64q272 0 384 -146q112 146 384 146h64v-128h-64z" />
+<glyph unicode="&#xf247;" horiz-adv-x="2048" d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128 h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" />
+<glyph unicode="&#xf248;" horiz-adv-x="2304" d="M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256 v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z" />
+<glyph unicode="&#xf249;" d="M1024 288v-416h-928q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68v-928h-416q-40 0 -68 -28t-28 -68zM1152 256h381q-15 -82 -65 -132l-184 -184q-50 -50 -132 -65v381z" />
+<glyph unicode="&#xf24a;" d="M1400 256h-248v-248q29 10 41 22l185 185q12 12 22 41zM1120 384h288v896h-1280v-1280h896v288q0 40 28 68t68 28zM1536 1312v-1024q0 -40 -20 -88t-48 -76l-184 -184q-28 -28 -76 -48t-88 -20h-1024q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68 z" />
+<glyph unicode="&#xf24b;" horiz-adv-x="2304" d="M1951 538q0 -26 -15.5 -44.5t-38.5 -23.5q-8 -2 -18 -2h-153v140h153q10 0 18 -2q23 -5 38.5 -23.5t15.5 -44.5zM1933 751q0 -25 -15 -42t-38 -21q-3 -1 -15 -1h-139v129h139q3 0 8.5 -0.5t6.5 -0.5q23 -4 38 -21.5t15 -42.5zM728 587v308h-228v-308q0 -58 -38 -94.5 t-105 -36.5q-108 0 -229 59v-112q53 -15 121 -23t109 -9l42 -1q328 0 328 217zM1442 403v113q-99 -52 -200 -59q-108 -8 -169 41t-61 142t61 142t169 41q101 -7 200 -58v112q-48 12 -100 19.5t-80 9.5l-28 2q-127 6 -218.5 -14t-140.5 -60t-71 -88t-22 -106t22 -106t71 -88 t140.5 -60t218.5 -14q101 4 208 31zM2176 518q0 54 -43 88.5t-109 39.5v3q57 8 89 41.5t32 79.5q0 55 -41 88t-107 36q-3 0 -12 0.5t-14 0.5h-455v-510h491q74 0 121.5 36.5t47.5 96.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90 t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf24c;" horiz-adv-x="2304" d="M858 295v693q-106 -41 -172 -135.5t-66 -211.5t66 -211.5t172 -134.5zM1362 641q0 117 -66 211.5t-172 135.5v-694q106 41 172 135.5t66 211.5zM1577 641q0 -159 -78.5 -294t-213.5 -213.5t-294 -78.5q-119 0 -227.5 46.5t-187 125t-125 187t-46.5 227.5q0 159 78.5 294 t213.5 213.5t294 78.5t294 -78.5t213.5 -213.5t78.5 -294zM1960 634q0 139 -55.5 261.5t-147.5 205.5t-213.5 131t-252.5 48h-301q-176 0 -323.5 -81t-235 -230t-87.5 -335q0 -171 87 -317.5t236 -231.5t323 -85h301q129 0 251.5 50.5t214.5 135t147.5 202.5t55.5 246z M2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf24d;" horiz-adv-x="1792" d="M1664 -96v1088q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5zM1792 992v-1088q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113 zM1408 1376v-160h-128v160q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h160v-128h-160q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf24e;" horiz-adv-x="2304" d="M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280q-14 -40 -45.5 -71.5t-71.5 -45.5v-1291h608q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1344q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h608v1291q-40 14 -71.5 45.5t-45.5 71.5h-491q-14 0 -23 9t-9 23v64 q0 14 9 23t23 9h491q21 57 70 92.5t111 35.5t111 -35.5t70 -92.5h491q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-491zM1088 1264q33 0 56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5zM2176 384q0 -73 -46.5 -131t-117.5 -91 t-144.5 -49.5t-139.5 -16.5t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81zM896 384q0 -73 -46.5 -131t-117.5 -91t-144.5 -49.5t-139.5 -16.5 t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81z" />
+<glyph unicode="&#xf250;" d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9 t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-77 -29 -149 -92.5 t-129.5 -152.5t-92.5 -210t-35 -253h1024q0 132 -35 253t-92.5 210t-129.5 152.5t-149 92.5q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+<glyph unicode="&#xf251;" d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9 t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -66 9 -128h1006q9 61 9 128zM1280 -128q0 130 -34 249.5t-90.5 208t-126.5 152t-146 94.5h-230q-76 -31 -146 -94.5t-126.5 -152t-90.5 -208t-34 -249.5h1024z" />
+<glyph unicode="&#xf252;" d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9 t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -206 85 -384h854q85 178 85 384zM1223 192q-54 141 -145.5 241.5t-194.5 142.5h-230q-103 -42 -194.5 -142.5t-145.5 -241.5h910z" />
+<glyph unicode="&#xf253;" d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9 t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-137 -51 -244 -196 h700q-107 145 -244 196q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+<glyph unicode="&#xf254;" d="M1504 -64q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472zM130 0q3 55 16 107t30 95t46 87t53.5 76t64.5 69.5t66 60t70.5 55t66.5 47.5t65 43q-43 28 -65 43t-66.5 47.5t-70.5 55t-66 60t-64.5 69.5t-53.5 76t-46 87 t-30 95t-16 107h1276q-3 -55 -16 -107t-30 -95t-46 -87t-53.5 -76t-64.5 -69.5t-66 -60t-70.5 -55t-66.5 -47.5t-65 -43q43 -28 65 -43t66.5 -47.5t70.5 -55t66 -60t64.5 -69.5t53.5 -76t46 -87t30 -95t16 -107h-1276zM1504 1536q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9 h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472z" />
+<glyph unicode="&#xf255;" d="M768 1152q-53 0 -90.5 -37.5t-37.5 -90.5v-128h-32v93q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-429l-32 30v172q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-224q0 -47 35 -82l310 -296q39 -39 39 -102q0 -26 19 -45t45 -19h640q26 0 45 19t19 45v25 q0 41 10 77l108 436q10 36 10 77v246q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-32h-32v125q0 40 -25 72.5t-64 40.5q-14 2 -23 2q-46 0 -79 -33t-33 -79v-128h-32v122q0 51 -32.5 89.5t-82.5 43.5q-5 1 -13 1zM768 1280q84 0 149 -50q57 34 123 34q59 0 111 -27 t86 -76q27 7 59 7q100 0 170 -71.5t70 -171.5v-246q0 -51 -13 -108l-109 -436q-6 -24 -6 -71q0 -80 -56 -136t-136 -56h-640q-84 0 -138 58.5t-54 142.5l-308 296q-76 73 -76 175v224q0 99 70.5 169.5t169.5 70.5q11 0 16 -1q6 95 75.5 160t164.5 65q52 0 98 -21 q72 69 174 69z" />
+<glyph unicode="&#xf256;" horiz-adv-x="1792" d="M880 1408q-46 0 -79 -33t-33 -79v-656h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528v-256l-154 205q-38 51 -102 51q-53 0 -90.5 -37.5t-37.5 -90.5q0 -43 26 -77l384 -512q38 -51 102 -51h688q34 0 61 22t34 56l76 405q5 32 5 59v498q0 46 -33 79t-79 33t-79 -33 t-33 -79v-272h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528h-32v656q0 46 -33 79t-79 33zM880 1536q68 0 125.5 -35.5t88.5 -96.5q19 4 42 4q99 0 169.5 -70.5t70.5 -169.5v-17q105 6 180.5 -64t75.5 -175v-498q0 -40 -8 -83l-76 -404q-14 -79 -76.5 -131t-143.5 -52 h-688q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 106 75 181t181 75q78 0 128 -34v434q0 99 70.5 169.5t169.5 70.5q23 0 42 -4q31 61 88.5 96.5t125.5 35.5z" />
+<glyph unicode="&#xf257;" horiz-adv-x="1792" d="M1073 -128h-177q-163 0 -226 141q-23 49 -23 102v5q-62 30 -98.5 88.5t-36.5 127.5q0 38 5 48h-261q-106 0 -181 75t-75 181t75 181t181 75h113l-44 17q-74 28 -119.5 93.5t-45.5 145.5q0 106 75 181t181 75q46 0 91 -17l628 -239h401q106 0 181 -75t75 -181v-668 q0 -88 -54 -157.5t-140 -90.5l-339 -85q-92 -23 -186 -23zM1024 583l-155 -71l-163 -74q-30 -14 -48 -41.5t-18 -60.5q0 -46 33 -79t79 -33q26 0 46 10l338 154q-49 10 -80.5 50t-31.5 90v55zM1344 272q0 46 -33 79t-79 33q-26 0 -46 -10l-290 -132q-28 -13 -37 -17 t-30.5 -17t-29.5 -23.5t-16 -29t-8 -40.5q0 -50 31.5 -82t81.5 -32q20 0 38 9l352 160q30 14 48 41.5t18 60.5zM1112 1024l-650 248q-24 8 -46 8q-53 0 -90.5 -37.5t-37.5 -90.5q0 -40 22.5 -73t59.5 -47l526 -200v-64h-640q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5 t90.5 -37.5h535l233 106v198q0 63 46 106l111 102h-69zM1073 0q82 0 155 19l339 85q43 11 70 45.5t27 78.5v668q0 53 -37.5 90.5t-90.5 37.5h-308l-136 -126q-36 -33 -36 -82v-296q0 -46 33 -77t79 -31t79 35t33 81v208h32v-208q0 -70 -57 -114q52 -8 86.5 -48.5t34.5 -93.5 q0 -42 -23 -78t-61 -53l-310 -141h91z" />
+<glyph unicode="&#xf258;" horiz-adv-x="2048" d="M1151 1536q61 0 116 -28t91 -77l572 -781q118 -159 118 -359v-355q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v177l-286 143h-546q-80 0 -136 56t-56 136v32q0 119 84.5 203.5t203.5 84.5h420l42 128h-686q-100 0 -173.5 67.5t-81.5 166.5q-65 79 -65 182v32 q0 80 56 136t136 56h959zM1920 -64v355q0 157 -93 284l-573 781q-39 52 -103 52h-959q-26 0 -45 -19t-19 -45q0 -32 1.5 -49.5t9.5 -40.5t25 -43q10 31 35.5 50t56.5 19h832v-32h-832q-26 0 -45 -19t-19 -45q0 -44 3 -58q8 -44 44 -73t81 -29h640h91q40 0 68 -28t28 -68 q0 -15 -5 -30l-64 -192q-10 -29 -35 -47.5t-56 -18.5h-443q-66 0 -113 -47t-47 -113v-32q0 -26 19 -45t45 -19h561q16 0 29 -7l317 -158q24 -13 38.5 -36t14.5 -50v-197q0 -26 19 -45t45 -19h384q26 0 45 19t19 45z" />
+<glyph unicode="&#xf259;" horiz-adv-x="2048" d="M816 1408q-48 0 -79.5 -34t-31.5 -82q0 -14 3 -28l150 -624h-26l-116 482q-9 38 -39.5 62t-69.5 24q-47 0 -79 -34t-32 -81q0 -11 4 -29q3 -13 39 -161t68 -282t32 -138v-227l-307 230q-34 26 -77 26q-52 0 -89.5 -36.5t-37.5 -88.5q0 -67 56 -110l507 -379 q34 -26 76 -26h694q33 0 59 20.5t34 52.5l100 401q8 30 10 88t9 86l116 478q3 12 3 26q0 46 -33 79t-80 33q-38 0 -69 -25.5t-40 -62.5l-99 -408h-26l132 547q3 14 3 28q0 47 -32 80t-80 33q-38 0 -68.5 -24t-39.5 -62l-145 -602h-127l-164 682q-9 38 -39.5 62t-68.5 24z M1461 -256h-694q-85 0 -153 51l-507 380q-50 38 -78.5 94t-28.5 118q0 105 75 179t180 74q25 0 49.5 -5.5t41.5 -11t41 -20.5t35 -23t38.5 -29.5t37.5 -28.5l-123 512q-7 35 -7 59q0 93 60 162t152 79q14 87 80.5 144.5t155.5 57.5q83 0 148 -51.5t85 -132.5l103 -428 l83 348q20 81 85 132.5t148 51.5q87 0 152.5 -54t82.5 -139q93 -10 155 -78t62 -161q0 -30 -7 -57l-116 -477q-5 -22 -5 -67q0 -51 -13 -108l-101 -401q-19 -75 -79.5 -122.5t-137.5 -47.5z" />
+<glyph unicode="&#xf25a;" horiz-adv-x="1792" d="M640 1408q-53 0 -90.5 -37.5t-37.5 -90.5v-512v-384l-151 202q-41 54 -107 54q-52 0 -89 -38t-37 -90q0 -43 26 -77l384 -512q38 -51 102 -51h718q22 0 39.5 13.5t22.5 34.5l92 368q24 96 24 194v217q0 41 -28 71t-68 30t-68 -28t-28 -68h-32v61q0 48 -32 81.5t-80 33.5 q-46 0 -79 -33t-33 -79v-64h-32v90q0 55 -37 94.5t-91 39.5q-53 0 -90.5 -37.5t-37.5 -90.5v-96h-32v570q0 55 -37 94.5t-91 39.5zM640 1536q107 0 181.5 -77.5t74.5 -184.5v-220q22 2 32 2q99 0 173 -69q47 21 99 21q113 0 184 -87q27 7 56 7q94 0 159 -67.5t65 -161.5 v-217q0 -116 -28 -225l-92 -368q-16 -64 -68 -104.5t-118 -40.5h-718q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 105 74.5 180.5t179.5 75.5q71 0 130 -35v547q0 106 75 181t181 75zM768 128v384h-32v-384h32zM1024 128v384h-32v-384h32zM1280 128v384h-32 v-384h32z" />
+<glyph unicode="&#xf25b;" d="M1288 889q60 0 107 -23q141 -63 141 -226v-177q0 -94 -23 -186l-85 -339q-21 -86 -90.5 -140t-157.5 -54h-668q-106 0 -181 75t-75 181v401l-239 628q-17 45 -17 91q0 106 75 181t181 75q80 0 145.5 -45.5t93.5 -119.5l17 -44v113q0 106 75 181t181 75t181 -75t75 -181 v-261q27 5 48 5q69 0 127.5 -36.5t88.5 -98.5zM1072 896q-33 0 -60.5 -18t-41.5 -48l-74 -163l-71 -155h55q50 0 90 -31.5t50 -80.5l154 338q10 20 10 46q0 46 -33 79t-79 33zM1293 761q-22 0 -40.5 -8t-29 -16t-23.5 -29.5t-17 -30.5t-17 -37l-132 -290q-10 -20 -10 -46 q0 -46 33 -79t79 -33q33 0 60.5 18t41.5 48l160 352q9 18 9 38q0 50 -32 81.5t-82 31.5zM128 1120q0 -22 8 -46l248 -650v-69l102 111q43 46 106 46h198l106 233v535q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5v-640h-64l-200 526q-14 37 -47 59.5t-73 22.5 q-53 0 -90.5 -37.5t-37.5 -90.5zM1180 -128q44 0 78.5 27t45.5 70l85 339q19 73 19 155v91l-141 -310q-17 -38 -53 -61t-78 -23q-53 0 -93.5 34.5t-48.5 86.5q-44 -57 -114 -57h-208v32h208q46 0 81 33t35 79t-31 79t-77 33h-296q-49 0 -82 -36l-126 -136v-308 q0 -53 37.5 -90.5t90.5 -37.5h668z" />
+<glyph unicode="&#xf25c;" horiz-adv-x="1973" d="M857 992v-117q0 -13 -9.5 -22t-22.5 -9h-298v-812q0 -13 -9 -22.5t-22 -9.5h-135q-13 0 -22.5 9t-9.5 23v812h-297q-13 0 -22.5 9t-9.5 22v117q0 14 9 23t23 9h793q13 0 22.5 -9.5t9.5 -22.5zM1895 995l77 -961q1 -13 -8 -24q-10 -10 -23 -10h-134q-12 0 -21 8.5 t-10 20.5l-46 588l-189 -425q-8 -19 -29 -19h-120q-20 0 -29 19l-188 427l-45 -590q-1 -12 -10 -20.5t-21 -8.5h-135q-13 0 -23 10q-9 10 -9 24l78 961q1 12 10 20.5t21 8.5h142q20 0 29 -19l220 -520q10 -24 20 -51q3 7 9.5 24.5t10.5 26.5l221 520q9 19 29 19h141 q13 0 22 -8.5t10 -20.5z" />
+<glyph unicode="&#xf25d;" horiz-adv-x="1792" d="M1042 833q0 88 -60 121q-33 18 -117 18h-123v-281h162q66 0 102 37t36 105zM1094 548l205 -373q8 -17 -1 -31q-8 -16 -27 -16h-152q-20 0 -28 17l-194 365h-155v-350q0 -14 -9 -23t-23 -9h-134q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h294q128 0 190 -24q85 -31 134 -109 t49 -180q0 -92 -42.5 -165.5t-115.5 -109.5q6 -10 9 -16zM896 1376q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM1792 640 q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf25e;" horiz-adv-x="1792" d="M605 303q153 0 257 104q14 18 3 36l-45 82q-6 13 -24 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13t-23.5 -14.5t-28.5 -13.5t-33.5 -9.5t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78 q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-148 0 -246 -96.5t-98 -240.5q0 -146 97 -241.5t247 -95.5zM1235 303q153 0 257 104q14 18 4 36l-45 82q-8 14 -25 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13t-23.5 -14.5t-28.5 -13.5t-33.5 -9.5 t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-147 0 -245.5 -96.5t-98.5 -240.5q0 -146 97 -241.5t247 -95.5zM896 1376 q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191 t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71z" />
+<glyph unicode="&#xf260;" horiz-adv-x="2048" d="M736 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1312 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z" />
+<glyph unicode="&#xf261;" horiz-adv-x="1792" d="M717 182l271 271l-279 279l-88 -88l192 -191l-96 -96l-279 279l279 279l40 -40l87 87l-127 128l-454 -454zM1075 190l454 454l-454 454l-271 -271l279 -279l88 88l-192 191l96 96l279 -279l-279 -279l-40 40l-87 -88zM1792 640q0 -182 -71 -348t-191 -286t-286 -191 t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf262;" horiz-adv-x="2304" d="M651 539q0 -39 -27.5 -66.5t-65.5 -27.5q-39 0 -66.5 27.5t-27.5 66.5q0 38 27.5 65.5t66.5 27.5q38 0 65.5 -27.5t27.5 -65.5zM1805 540q0 -39 -27.5 -66.5t-66.5 -27.5t-66.5 27.5t-27.5 66.5t27.5 66t66.5 27t66.5 -27t27.5 -66zM765 539q0 79 -56.5 136t-136.5 57 t-136.5 -56.5t-56.5 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM1918 540q0 80 -56.5 136.5t-136.5 56.5q-79 0 -136 -56.5t-57 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM850 539q0 -116 -81.5 -197.5t-196.5 -81.5q-116 0 -197.5 82t-81.5 197 t82 196.5t197 81.5t196.5 -81.5t81.5 -196.5zM2004 540q0 -115 -81.5 -196.5t-197.5 -81.5q-115 0 -196.5 81.5t-81.5 196.5t81.5 196.5t196.5 81.5q116 0 197.5 -81.5t81.5 -196.5zM1040 537q0 191 -135.5 326.5t-326.5 135.5q-125 0 -231 -62t-168 -168.5t-62 -231.5 t62 -231.5t168 -168.5t231 -62q191 0 326.5 135.5t135.5 326.5zM1708 1110q-254 111 -556 111q-319 0 -573 -110q117 0 223 -45.5t182.5 -122.5t122 -183t45.5 -223q0 115 43.5 219.5t118 180.5t177.5 123t217 50zM2187 537q0 191 -135 326.5t-326 135.5t-326.5 -135.5 t-135.5 -326.5t135.5 -326.5t326.5 -135.5t326 135.5t135 326.5zM1921 1103h383q-44 -51 -75 -114.5t-40 -114.5q110 -151 110 -337q0 -156 -77 -288t-209 -208.5t-287 -76.5q-133 0 -249 56t-196 155q-47 -56 -129 -179q-11 22 -53.5 82.5t-74.5 97.5 q-80 -99 -196.5 -155.5t-249.5 -56.5q-155 0 -287 76.5t-209 208.5t-77 288q0 186 110 337q-9 51 -40 114.5t-75 114.5h365q149 100 355 156.5t432 56.5q224 0 421 -56t348 -157z" />
+<glyph unicode="&#xf263;" horiz-adv-x="1280" d="M640 629q-188 0 -321 133t-133 320q0 188 133 321t321 133t321 -133t133 -321q0 -187 -133 -320t-321 -133zM640 1306q-92 0 -157.5 -65.5t-65.5 -158.5q0 -92 65.5 -157.5t157.5 -65.5t157.5 65.5t65.5 157.5q0 93 -65.5 158.5t-157.5 65.5zM1163 574q13 -27 15 -49.5 t-4.5 -40.5t-26.5 -38.5t-42.5 -37t-61.5 -41.5q-115 -73 -315 -94l73 -72l267 -267q30 -31 30 -74t-30 -73l-12 -13q-31 -30 -74 -30t-74 30q-67 68 -267 268l-267 -268q-31 -30 -74 -30t-73 30l-12 13q-31 30 -31 73t31 74l267 267l72 72q-203 21 -317 94 q-39 25 -61.5 41.5t-42.5 37t-26.5 38.5t-4.5 40.5t15 49.5q10 20 28 35t42 22t56 -2t65 -35q5 -4 15 -11t43 -24.5t69 -30.5t92 -24t113 -11q91 0 174 25.5t120 50.5l38 25q33 26 65 35t56 2t42 -22t28 -35z" />
+<glyph unicode="&#xf264;" d="M927 956q0 -66 -46.5 -112.5t-112.5 -46.5t-112.5 46.5t-46.5 112.5t46.5 112.5t112.5 46.5t112.5 -46.5t46.5 -112.5zM1141 593q-10 20 -28 32t-47.5 9.5t-60.5 -27.5q-10 -8 -29 -20t-81 -32t-127 -20t-124 18t-86 36l-27 18q-31 25 -60.5 27.5t-47.5 -9.5t-28 -32 q-22 -45 -2 -74.5t87 -73.5q83 -53 226 -67l-51 -52q-142 -142 -191 -190q-22 -22 -22 -52.5t22 -52.5l9 -9q22 -22 52.5 -22t52.5 22l191 191q114 -115 191 -191q22 -22 52.5 -22t52.5 22l9 9q22 22 22 52.5t-22 52.5l-191 190l-52 52q141 14 225 67q67 44 87 73.5t-2 74.5 zM1092 956q0 134 -95 229t-229 95t-229 -95t-95 -229t95 -229t229 -95t229 95t95 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf265;" horiz-adv-x="1720" d="M1565 1408q65 0 110 -45.5t45 -110.5v-519q0 -176 -68 -336t-182.5 -275t-274 -182.5t-334.5 -67.5q-176 0 -335.5 67.5t-274.5 182.5t-183 275t-68 336v519q0 64 46 110t110 46h1409zM861 344q47 0 82 33l404 388q37 35 37 85q0 49 -34.5 83.5t-83.5 34.5q-47 0 -82 -33 l-323 -310l-323 310q-35 33 -81 33q-49 0 -83.5 -34.5t-34.5 -83.5q0 -51 36 -85l405 -388q33 -33 81 -33z" />
+<glyph unicode="&#xf266;" horiz-adv-x="2304" d="M1494 -103l-295 695q-25 -49 -158.5 -305.5t-198.5 -389.5q-1 -1 -27.5 -0.5t-26.5 1.5q-82 193 -255.5 587t-259.5 596q-21 50 -66.5 107.5t-103.5 100.5t-102 43q0 5 -0.5 24t-0.5 27h583v-50q-39 -2 -79.5 -16t-66.5 -43t-10 -64q26 -59 216.5 -499t235.5 -540 q31 61 140 266.5t131 247.5q-19 39 -126 281t-136 295q-38 69 -201 71v50l513 -1v-47q-60 -2 -93.5 -25t-12.5 -69q33 -70 87 -189.5t86 -187.5q110 214 173 363q24 55 -10 79.5t-129 26.5q1 7 1 25v24q64 0 170.5 0.5t180 1t92.5 0.5v-49q-62 -2 -119 -33t-90 -81 l-213 -442q13 -33 127.5 -290t121.5 -274l441 1017q-14 38 -49.5 62.5t-65 31.5t-55.5 8v50l460 -4l1 -2l-1 -44q-139 -4 -201 -145q-526 -1216 -559 -1291h-49z" />
+<glyph unicode="&#xf267;" horiz-adv-x="1792" d="M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640 q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5 t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5 t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5 t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191 t191 -286t71 -348z" />
+<glyph unicode="&#xf268;" horiz-adv-x="1792" d="M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962 q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z" />
+<glyph unicode="&#xf269;" horiz-adv-x="1792" d="M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5 q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5 q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z" />
+<glyph unicode="&#xf26a;" d="M768 -92q77 0 139.5 63t100.5 166t59 234.5t21 268.5t-21 268.5t-59 234.5t-100.5 166t-139.5 63t-139.5 -63t-100.5 -166t-59 -234.5t-21 -268.5t21 -268.5t59 -234.5t100.5 -166t139.5 -63zM768 -256q-184 0 -333 77t-240 203t-141 287t-50 329t50 329t141 287t240 203 t333 77q148 0 274 -50t214.5 -136t151.5 -201t92.5 -244t29.5 -265t-29.5 -265t-92.5 -244t-151.5 -201t-214.5 -136t-274 -50z" />
+<glyph unicode="&#xf26b;" horiz-adv-x="1792" d="M716 -69q-143 35 -261.5 114t-197.5 191q-139 -300 -17 -398q26 -21 85 -24.5t127.5 9.5t141 41.5t122.5 66.5zM693 762h452q0 108 -61.5 169t-168.5 61q-103 0 -162.5 -62.5t-59.5 -167.5zM1724 1137h-34q26 102 22.5 170t-25 110t-63.5 57t-93.5 11t-115 -26.5 t-128.5 -56.5t-134 -79q129 -37 238.5 -113.5t185 -179t110 -231.5t15.5 -262h-1005q0 -60 10 -106t34 -85t69.5 -60t112.5 -21q87 0 142.5 44t72.5 122h540q-71 -230 -281.5 -377t-477.5 -147q-83 0 -159 15q-35 -40 -151 -94t-248 -78t-219 35q-78 60 -100 159t7 214 t88 242t143.5 248t173.5 226.5t177.5 183.5t156.5 112v24q-120 -37 -258.5 -137.5t-240.5 -207t-159 -195.5q4 106 34 201t80 169t118 135.5t147.5 100.5t168 65.5t180.5 29.5t185 -8q310 186 503 189h7q57 0 103 -18q80 -30 98 -132.5t-30 -248.5z" />
+<glyph unicode="&#xf26c;" horiz-adv-x="2048" d="M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23 v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf26d;" horiz-adv-x="1792" d="M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34 h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100 q-68 175 -180 287z" />
+<glyph unicode="&#xf26e;" horiz-adv-x="2304" d="M1391 390v0l-1 1q-15 18 -34.5 37.5t-62.5 57.5t-93.5 62t-95.5 24q-48 0 -83 -21.5t-51 -54t-23 -59t-7 -47.5v0v0q0 -21 7 -48t23 -59t51 -53.5t83 -21.5q45 0 95.5 24t94 62.5t62 57t34.5 37.5zM2103 390q0 21 -7 47.5t-23 59t-51 54t-83 21.5q-45 0 -95.5 -24 t-94 -62.5t-62 -57t-34.5 -37.5l-1 -1v0v0l1 -1q15 -18 34.5 -37.5t62.5 -57.5t93.5 -62t95.5 -24q48 0 83 21.5t51 53.5t23 59t7 48zM2304 393q0 -69 -24 -137.5t-68 -126t-116 -93.5t-159 -36q-68 0 -134 24t-113.5 58.5t-84.5 69.5t-59.5 59t-25.5 24t-22.5 -24 t-54.5 -58.5t-81.5 -69.5t-115 -59t-143.5 -24q-65 0 -123.5 22.5t-96.5 54t-66.5 66.5t-41 59.5t-12.5 32.5q0 -8 -8.5 -26.5t-25 -45.5t-47 -55t-69 -52.5t-96.5 -40t-125 -15.5q-71 0 -130 15.5t-98.5 39.5t-70.5 56.5t-48 63.5t-27.5 63.5t-14 54t-3.5 36.5h217 q0 -55 49 -107.5t126 -52.5q79 0 134.5 67t55.5 148q0 80 -52 136.5t-138 56.5q-5 0 -13 -0.5t-31 -5t-43 -12t-42 -24.5t-34 -40h-195l102 583h602v-174h-445q-27 -159 -41 -248q4 0 16.5 13t31.5 28.5t65 28.5t108 13t114 -20.5t82.5 -49.5t51.5 -58.5t31 -50t11 -20.5 t13 25t36.5 60.5t60.5 71.5t97 61t133 25t140.5 -25t115.5 -60.5t83.5 -71.5t56.5 -61t21 -25q2 0 22 25t56 60.5t83.5 71.5t115.5 61t140 25q92 0 164.5 -35t115.5 -93t65 -125t22 -137z" />
+<glyph unicode="&#xf270;" horiz-adv-x="1792" d="M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30 q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57 t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133 q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z" />
+<glyph unicode="&#xf271;" horiz-adv-x="1792" d="M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9 h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224 v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z" />
+<glyph unicode="&#xf272;" horiz-adv-x="1792" d="M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23 t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47 t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf273;" horiz-adv-x="1792" d="M1111 151l-46 -46q-9 -9 -22 -9t-23 9l-188 189l-188 -189q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22t9 23l189 188l-189 188q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l188 -188l188 188q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23l-188 -188l188 -188q9 -10 9 -23t-9 -22z M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf274;" horiz-adv-x="1792" d="M1303 572l-512 -512q-10 -9 -23 -9t-23 9l-288 288q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l220 -220l444 444q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23 t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47 t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf275;" horiz-adv-x="1792" d="M448 1536q26 0 45 -19t19 -45v-891l536 429q17 14 40 14q26 0 45 -19t19 -45v-379l536 429q17 14 40 14q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h384z" />
+<glyph unicode="&#xf276;" horiz-adv-x="1024" d="M512 448q66 0 128 15v-655q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v655q61 -15 128 -15zM512 1536q212 0 362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362t150 362t362 150zM512 1312q14 0 23 9t9 23t-9 23t-23 9q-146 0 -249 -103t-103 -249 q0 -14 9 -23t23 -9t23 9t9 23q0 119 84.5 203.5t203.5 84.5z" />
+<glyph unicode="&#xf277;" horiz-adv-x="1792" d="M1745 1239q10 -10 10 -23t-10 -23l-141 -141q-28 -28 -68 -28h-1344q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h576v64q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-64h512q40 0 68 -28zM768 320h256v-512q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v512zM1600 768 q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1344q-40 0 -68 28l-141 141q-10 10 -10 23t10 23l141 141q28 28 68 28h512v192h256v-192h576z" />
+<glyph unicode="&#xf278;" horiz-adv-x="2048" d="M2020 1525q28 -20 28 -53v-1408q0 -20 -11 -36t-29 -23l-640 -256q-24 -11 -48 0l-616 246l-616 -246q-10 -5 -24 -5q-19 0 -36 11q-28 20 -28 53v1408q0 20 11 36t29 23l640 256q24 11 48 0l616 -246l616 246q32 13 60 -6zM736 1390v-1270l576 -230v1270zM128 1173 v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" />
+<glyph unicode="&#xf279;" horiz-adv-x="1792" d="M512 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472q0 20 17 28l480 256q7 4 15 4zM1760 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472 q0 20 17 28l480 256q7 4 15 4zM640 1536q8 0 14 -3l512 -256q18 -10 18 -29v-1472q0 -13 -9.5 -22.5t-22.5 -9.5q-8 0 -14 3l-512 256q-18 10 -18 29v1472q0 13 9.5 22.5t22.5 9.5z" />
+<glyph unicode="&#xf27a;" horiz-adv-x="1792" d="M640 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 640q0 53 -37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-110 0 -211 18q-173 -173 -435 -229q-52 -10 -86 -13q-12 -1 -22 6t-13 18q-4 15 20 37q5 5 23.5 21.5t25.5 23.5t23.5 25.5t24 31.5t20.5 37 t20 48t14.5 57.5t12.5 72.5q-146 90 -229.5 216.5t-83.5 269.5q0 174 120 321.5t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="&#xf27b;" horiz-adv-x="1792" d="M640 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 -53 -37.5 -90.5t-90.5 -37.5 t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5 t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51 t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 130 71 248.5t191 204.5t286 136.5t348 50.5t348 -50.5t286 -136.5t191 -204.5t71 -248.5z" />
+<glyph unicode="&#xf27c;" horiz-adv-x="1024" d="M512 345l512 295v-591l-512 -296v592zM0 640v-591l512 296zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z" />
+<glyph unicode="&#xf27d;" horiz-adv-x="1792" d="M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246 q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z" />
+<glyph unicode="&#xf27e;" d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" />
+<glyph unicode="&#xf280;" d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72 h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275 l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z" />
+<glyph unicode="&#xf281;" horiz-adv-x="1792" />
+<glyph unicode="&#xf282;" horiz-adv-x="1792" />
+<glyph unicode="&#xf283;" horiz-adv-x="1792" />
+<glyph unicode="&#xf284;" horiz-adv-x="1792" />
+<glyph unicode="&#xf285;" horiz-adv-x="1792" />
+<glyph unicode="&#xf286;" horiz-adv-x="1792" />
+<glyph unicode="&#xf287;" horiz-adv-x="1792" />
+<glyph unicode="&#xf288;" horiz-adv-x="1792" />
+<glyph unicode="&#xf289;" horiz-adv-x="1792" />
+<glyph unicode="&#xf28a;" horiz-adv-x="1792" />
+<glyph unicode="&#xf28b;" horiz-adv-x="1792" />
+<glyph unicode="&#xf28c;" horiz-adv-x="1792" />
+<glyph unicode="&#xf28d;" horiz-adv-x="1792" />
+<glyph unicode="&#xf28e;" horiz-adv-x="1792" />
+<glyph unicode="&#xf500;" horiz-adv-x="1792" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/public/assets/fonts/fontawesome-webfont.ttf b/public/assets/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..d7994e13086b1ac1a216bd754c93e1bccd65f237
GIT binary patch
literal 138204
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

literal 0
HcmV?d00001

diff --git a/public/assets/fonts/fontawesome-webfont.woff b/public/assets/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000000000000000000000000000000000000..6fd4ede0f30f170eecb4156beb7235bf01fff00b
GIT binary patch
literal 81284
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
ZUtABnb?tu<H7dm8z`!-y^Nhj3{tqnJ;+y~g

literal 0
HcmV?d00001

diff --git a/public/assets/fonts/fontawesome-webfont.woff2 b/public/assets/fonts/fontawesome-webfont.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..5560193ccc5d768df40766ba54491f1822ed683c
GIT binary patch
literal 64464
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

literal 0
HcmV?d00001

diff --git a/public/assets/fonts/glyphicons-halflings-regular.eot b/public/assets/fonts/glyphicons-halflings-regular.eot
new file mode 100644
index 0000000000000000000000000000000000000000..b93a4953fff68df523aa7656497ee339d6026d64
GIT binary patch
literal 20127
zcma%hV{j!vx9y2-`@~L8?1^pLwlPU2wr$&<*tR|KBoo`2;LUg6eW-eW-tKDb)vH%`
z^`A!Vd<6hNSRMcX|Cb;E|1qflDggj6Kmr)xA10^t-vIc3*Z+F{r%|K(GyE^?|I{=9
zNq`(c8=wS`0!RZy0g3<xfGPm^&oc(t0WAJyYk&j565#r82r@tgVE(V|{tq<<xco!B
z02==gmw&z10LOnkAb<tH1OWX@JOI9bn*UMykN1D0R{xl80Mq~Cd;ISaOaQKbJU)Q^
zKV{p0n*ZTg{L}i+{3Za_e=Uyx%G?09e;&`jxw-$pR}TDt)(rrNs7n5?o%-LK0RgDo
z0?1<k<naI!SC})WF>{M(8^tv41d}oRU?8#IBFtJy*9zAN5dcxqGlMZGL>GG%R#)4J
zDJ2;)4*E1pyHia%>lMv3X7Q`UoFyoB@|xvh^)kOE3)IL&0(G&i;g08s>c%~pHkN&6
z($7!kyv|A2DsV2mq-5Ku)D#$Kn$CzqD-wm5Q*OtEOEZe^&T$<q%?GPI*ug?*jFCZ7
zl1X3>xIb0NUL<TDAlC~xMcGnHsPe)Gh+nESIamgk2)5Ql^6QPK&XkQ+!qk}`TYc#I
zf~KwkK>}$)W)Ck`6oter6KcQG9Zcy>lXip)%e&!lQgtQ*N`#abOlytt!&i3fo)cKV
zP0BWmLxS1gQv(r_r|?9>rR0ZeEJPx;Vi|h1!Eo*dohr<W65y|5+tpvz!HDS=Q}DgN
z;O&E^rmV416<Hj_N10HwLk^Lwyhx2j;kDE@F*S-tuqy|n(-6~PPF09Xvxq56At8OG
z4-2Gj5=K^(f;q@WOp+9uP|<!09J~a(Y%m)hsl;TbWEvvuQ7(qWx_eKYE@rH9B(V+`
zF8+p6+N8}}{zS_o7#)%b=2DFYa}JT{_i@;_#xxEDZ)+D4Lz{Pv;LE}#`N2bQP*W;6
z(wPX2S3Zb<sNz$mW_!uE^K&d`O<hkRPv<3DnX$`Y*)_qR>&^lJgqJZns>&vexP@fs
zkPv93Nyw$-kM5Mw^{@wPU47Y1dSkiHyl3dtHLwV&6Tm1iv{ve;sYA}Z&kmH802s9Z
zyJEn+cfl7yFu#1^#DbtP7k&aR06|n{LnYFYEphKd@dJEq@)s#S)UA&8VJY@S2+{~>
z(4?M();zvayyd^j`@4>xCqH|Au>Sfzb$mEOcD7e4z8pPVRTiMUWiw;|gXHw7LS#U<
zsT(}Z5SJ)CRMXloh$qPnK77w_)ctHmgh}QAe<2S{DU^`!uwptCoq!Owz$u6bF)vnb
zL`bM$%>baN7l#)vtS3y6h*2?xC<XQJNpZVS!tVtuR(<D$%K=CTVlwa)G)}qDJup|w
z!YRUAk-}+0)MFG#RuE2vlb~4*bP&)ex6`$^%6ySxf}MiQja9&+C4)UgIK)TIHVp>k
z>w+s)@`O4(4_<t2L?B1i*y6fuRi+P?QZCG2j9(btWTetUT@0Q|8XO(SqEH6LSB!2L
z<;M1lya0G`cm9UEex~so>I{L-!+b%)NZcQ&ND=2lyP+xI#9OzsiY8$c)ys-MI?TG6
zEP6f=vuLo!G>J7F4v|s#lJ+7A`^nEQScH3e?B_jC&{<S@1dd<&?JtuP@v(wA>sj>m
zYD?!1z4nDG_Afi$!J(<{>z{~Q)$SaXWjj~%ZvF152Hd^VoG14rFykR=_TO)mCn&K$
z-TfZ!vMBvnToyBoKRkD{3=&=qD|L!vb#jf1f}2338z)e)g>7#NPe!FoaY*jY{f)<G
z+9IWTnFJO0p&^rK`xODpSZARax-jN9(N|ZWyg~(MGSuQYzXBQR*+_`oO>Bf>ohk-K
z4{>fVS}ZCicCqgLuYR_fYx2;*-4k>kffuywghn?15s1dIOOYfl+XLf5w?wtU2Og*f
z%X5x`H55F6g1>m~%F`655-W1wFJtY>>qNSdVT`M`1Mlh!5Q6#3j={n5#za;!X&^OJ
zgq;d4UJV-F>gg?c3Y?d=kvn3e<VW2IarGgIy4I@#ozBH$Q(a($^uvXS?@=l>V)Jb^
zO5vg0G0yN0%}xy#(6oTDSVw8l=_*2k;zTP?+N=*18H5wp`s90K-C67q{W3d8vQGmr
zhpW^>1HEQV2TG#8_P_0q91h8QgHT~8=-Ij5snJ3cj?Jn5_66uV=*pq(j}yHn<uy|J
zh=_`9%JG63kQPJ-Et!mF@={HFp+sB-S+XTFvdzD^x19Lbj{TXx=?FGKvX;|1-3-zU
zl2DyEls20Izb)isO0?xrx(b1`<I3ZDSNBd*<5l=jC`?Re`XCFaI(ny#9KlP!NYbU=
z^;IWB5he_V3}{Xdl1>f$<x%N5|7+dpJoB>Ft;5VVC?bz%9X31asJeQF2jEa47H#j`
zk<KNJ>&uxf3t?g!tltVP|B#G_UfDD}`<#B#iY^i>oDd-LGF}A@Fno~dR72c&hs6bR
z2F}9(i8+PR%R|~FV$;Ke^Q_E_B<teU&M|M>c;$)xN4Ti>Lgg4vaip!%M<tZtx+eW>
z06oxAF_*)LH57w|gCW3SwoEHwjO{}}U=pKhjKSZ{u!K<P`9nrZXY)DCi*vvJQDx`q
za_kyA2Qus4JQ%8kM3_Gd%I1O+cF3~V6=ZM1u9*Ea+iXPId}M`kd7I1T0d7Zx)Wa&?
z{PLQlHM^=&Y!og~I(XQ;5lJScjK~IrV<F7J6v`iM&M1#EkRsHYX8V%Dip>?1zm1q?
zXyA6y@)}_sONiJopF}_}(~}d4FDyp|(@w}Vb;Fl5bZL%{1`}gdw#i{KMjp2@Fb9pg
ziO|u7qP{$kxH$qh8%L+)AvwZNgUT6^zsZq-MRyZid{D?t`f|KzSAD~C?WT3d0rO`0
z=qQ6{)&UXXuHY{9g|P7l_nd-%eh}4%VVaK#Nik*tOu9lBM$<%FS@`NwGEbP0&;Xbo
zObCq=y%a`jSJmx_uTLa{@2@}^&F<l?4N8$IoqA~y`|!rgD24&AtvbWWlPF%K!I`Fp
zMCDiMrV(MWM2!hiB6=^)Er#O8q+%t)I4l3iuF$d;cBXqGAn?Z0Z*?MZRuh=zmPo~-
z_rOvv7sERj79T<uPMWCHIto@agn)X&#=QQyY*6wt){yHQ7~yFoEezd#C<dQF+u)2-
zEIMy-5P*TYpqPxY25dY9J+f-E^3<^@G(=jU{U&hQ3#o`a)dOUR&JT?mTRlBfHE<p|
zO&J|*26{JJ28qC1saVtkQ1WW^G58Smr^%f>4c%z6oe-TN&idjv+8E|$FHOvBqg5hT
zMB=7SHq`_-E?5g=()*!V>rIa&LcX(RU}aLm*38U_V$C_g4)7GrW5$GnvTwJZdBmy6
z*X)wi3=R8L=esOhY0a&eH`^fSpUHV8h$J1|o^3fKO<edeL`~4AS}?bGhbI@wd%7ob
z;HUsAzX8f<5Tcj`x1L`~p_%qxb{Gobu+`2Hh*bfnN@EZ$w1F5i32YXO9vreTkznl=
zRv&F3;kE3d@_Cys2UVvUxUU=oDO~U>|9QzaiKu>yZ9wmRkW?HTkc<*v7i*ylJ#u#j
zD1-n&{B`04oG>0Jn{5PKP*4Qsz{~`VVA3578gA+JUkiPc$Iq!^K|}*p_z3(-c&5z@
zKxmdNpp2&wg&%xL<cX5MdFnpzW;X?cI|~qZbhDWm)F_t}i=(x><xZ|=$k6lbFWo~R
z1yEA-t+BaHz`?1Zi{N`F<t?_rS*zpAEN-Lg7L9qKTVj|Ih7gOmTvLqTlA1e51SXNm
zeA`1UhC`&)%k?V^ii%`|O+coBH9$HjP#Fy1CjYhyW0DPZC>3xZNzG-5Xt7jnI@{?c
z25=M>-VF|;an2Os$Nn%HgQz7m(ujC}Ii0Oesa(y#8>D+P*_m^X##E|h$M6tJr%#=P
zWP*)Px>7z`E~U^2LNCNiy%Z7!!6RI%6fF@#ZY3z`CK91}^J<kz;gXvl4j_QvxfXmA
ze1j4n*Hru_ge<*I;p<wHXN`XVFAk2bTG~Vl5{?nXF6K!!HeqOu6_U-movw7Gx`O<C
zM~<jbZlSC}oXeAQr_Y8Tq)(9YogPgPY{6ELohD$98O2Fj5_M2=J84FuR#dyoS!A-|
z*c)!)9^dk4^<2$Ks79AAMW;%o-!%g7j{1(Pnwwy1tca#dUTE1+4y#<A6VSeCR)wQ`
zCEFu?oS$y=05cpTr}VLe+YU$GFp$#&tfXaK<ia*q3-&+6KDQP!)!Ru(yh0c}7za6=
ziFP^Nq3))g21c{b{ESQRdZN3Xnpa8jUP0DA2r&uofBU7TtM^7^s}7#&aUnGsvE`fu
z>$F!EB0YF1je9<lP78|=Z6bmMhpLsL)Tz)Cn&pP#eF?{kB>hJKU7!S5MnXV{+#K;y
zF~s*H%p@vj&-ru7#(F2L+_;IH46X(z{~HTfcThqD%b{>~u@lSc<+f5#xgt9L7$gSK
ziDJ6D*R%4&YeUB@yu@4+&70MBNTnjRyqMRd+@&lU#rV%0t3OmouhC`mkN}pL>tXin
zY*p)mt=}$EGT2E<4Q>E2`6)gZ`QJhGDNpI}bZL9}m+R>q?l`OzFjW?)Y)P`fUH(_4
zCb?sm1=DD0+Q5v}BW#0n5;Nm(@RTEa3(Y17H2H67La+>ptQHJ@WMy2xRQT$|7l`8c
zYHCxYw2o-rI?(fR2-%}pbs$I%w_&LPYE{4bo}vRoAW>3!SY_zH3`ofx3F1PsQ?&iq
z*BRG>?<6%z=x#`NhlEq{K~&rU7Kc7Y-90aRnoj~rVoKae)L$3^z*Utppk?I`)CX&&
zZ^@Go<Q-E-9qdDk;`1UZ+I6D_?B@62xgSC03f%4S8VtH3(P3D_6<1>9fm&fN`b`XY
zt0xE5aw4t@qTg_k=!-5LXU+_~DlW?53!afv6W(k@FPPX-`nA!FBMp7b!ODbL1zh58
z*69I}P_-?qSLKj}JW7gP!la}K@M}L>v?rDD!DY-tu+onu9kLoJz20M4urX_xf2dfZ
zORd9Zp&28_ff=wdMpXi%IiTTNegC}~RLkdYjA39kWqlA?jO~o1`*B&85Hd%VPkYZT
z48MPe62;TOq#c%H(`wX5(Bu>nlh4Fbd*Npasdhh?oRy8a;NB2(eb}6DgwXtx=n}fE
zx67rYw=(s0r?EsPjaya}^Qc-_UT5|*@|$Q}*|>V3O~USkIe6a0_>vd~6kHuP8=m}_
zo2IGKbv;yA+TBtlCpnw)8hDn&eq?26gN$Bh;SdxaS04Fsaih_Cfb98s39xbv)=mS0
z6M<@pM2#pe32w*lYSWG>DYqB95XhgAA)*9dOxHr{t)er0Xugoy)!Vz#2C3FaUMzYl
zCxy{igFB901*<tiyD63(hW(uERHv;@J~7F`;-e`O5Ld!(Fl>R2*F4>grPF}+G`;Yh
zGi@nRjWyG3mR(BVOeBPOF=_&}2IWT%)pqdNAcL{eP`L*^FDv#Rzq<iCP<KO7gjv}{
z^5ElYuo)cUV9?9{6e*c7eWVK@LCOKKaBR<2_;6r+GhH1i-~$};rNpE_D*2ZJ=O+cz
zyj}kfz8;}sw88^SYgzvxpkB>l5U&Suq_X%JfR_lC!S|y|xd5mQ0{0!G#9hV46S~A`
z0B!{yI-4FZEtol5)mNWXcX(`x&Pc*&gh4k{w%0S#EI>rqqlH2xv7mR=9XNCI$V#NG
z4wb-@u{PfQP;tTbzK>(DF(~bKp3;L1-A*HS!VB)Ae>Acnvde15Anb`h;I&0)aZBS6
z55ZS7mL5Wp!LCt45^{2_70<L`Ib`SKM1Oi<HkO)Y>YiI_Py=X{I3>$Px5Ez0ahLQ+
z9EWUWSyzA|+g-Axp*Lx-M{!ReQO07EG7r4^)K(xbj@%ZU=0tBC5shl)1a!ifM5OkF
z0<aV&1|hwix;hV`l{C+KeqEjnn@aQGS~k&rcJ^K626yC8@~#qf$xT7;xJLzv3M&rA
z)MirFFpng+&}hRJHKQ6_3l{ABCJLmIrj8g#cem2@!i;W7Q+}Wr^IrTp((?iq1h?Cq
z7Z^k%ps^N^e})9!YkyNa0;x`m&~<4yTQHl1+dFNY1CE<&_PZ=1v!ch(qU_a1lHd~T
zC&a1>w2xQ-<+r-h1fi7B6waX15|*GGqfva)S)dVcgea`lQ~SQ$KXPR+(3Tn2I2R<0
z9tK`L*pa^+*n%>tZPiqt{_`%v?Bb7CR-!GhMON_Fbs0$#|H}G?rW|{q5fQhvw!FxI
zs-5ZK>hAbnCS#ZQVi5K0X3PjL1JRdQO+&)*!oRCqB{wen60P6!7bGiWn@vD|+E@Xq
zb!!_WiU^I|@1M}Hz6fN-m04x=><rLlCfwyIrOU}U)<7QivZH0Rm_-}Sg~$eCMDR*Z
zx`cVPn__}6Q+CU!>Exm{b@>UCW|c8<K+|Vc^j#>vC`aNbt<B+h3ox;kC6?34Wa#|Y
zXq?n@d6k6MUBqn%SYLX5^>A@KCHujh^2RWZC}iYhL^<*Z93chIBJYU&w>$CGZDR<q
ztx<5t>cHuIgF&oyesDZ#&mA;?wxx4Cm#c0V$xYG?9OL(Smh}#fFuX(K;otJmvRP{h
ze^f-qv;)HKC7geB92_@3a9@M<H_?qNxE&=>GijS(hNNVd%-rZ;%@F_f7?Fjinbe1(
zn#jQ*jKZTqE+AUTEd3y6t>*=;AO##cmdwU4gc2&rT8l`rtKW2JF<`_M#p>cj+)yCG
zgKF)y8jrfxTjGO&ccm8RU>qn|HxQ7Z#sUo$q)P5H%8iBF$({0Ya51-rA@!I<SEC1_
zHUdTwrTB3a?*}j?j1(f*^9G0kG<5JX4@l|rR&H;`Qa2VcYZ3UxZL+D>t#NHN8MxqK
zrYyl_&=}WVfQ?+ykV4*@F6)=u_~3BebR2G2>>mKaEBPm<p!ix>SW3(qYGGXj??m3L
zHec{@jWCsSD8`xUy0pqT?Sw0oD?AUK*WxZn#D>-$`eI+IT)6ki>ic}W)t$V32^ITD
zR497@LO}S|re%A+#vdv-?fXsQGVnP?QB_d0cGE+U84Q=aM=XrOwGFN3`Lpl@P0fL$
zKN1PqOwojH*($uaQFh8_)H#>Acl&UBSZ>!2W1Dinei`R4dJGX$;~60X=|SG6#jci}
z&t4*dVDR*;+6Y(G{KGj1B2!qjvDYOyPC}%hnPbJ@g(4yBJrViG1#$$X75y+Ul1{%x
zBAuD}Q@w?MFNqF-m39FGpq7RGI?%Bvyyig&oGv)lR>d<`Bqh=p>urib5DE;u$c|$J
zwim~nPb19t?LJZsm{<(Iyyt@~H!a4yywmHKW&=1r5+oj*Fx6c89heW@(2R`i!Uiy*
zp)=`Vr8sR!)KChE-6SEIy<Vn-l!RzPhNVxOkQU85Nng*5JUtkAg)b6wP&$wmih=Au
zKs;dHW6q)pI2VT$E`W=7aAbKSJnb;$l%#?edH=)1)avHvVH)345mJ;(*l$Ed1MA<a
z72%vbZD4`I;B-RS=m{iM`7(#1x>i(dvG3<1KoVt>kGV=zZiG<Y+hj@$zd#Q#=4iVE
z)x-IdMbP%iC;0pg$QUoVt(A;lO{-jJjH=;buR+E#0Eulb^`hidN&<0Z-tju^RGPcG
z(C4$AS6l7m-h>7LGonH1+~yOK-`g0)r#+O|Q>)a`I2FVW%wr3lhO(P{ksNQuR!G_d
zeTx(M!%brW_vS9?IF>bzZ2A3mWX-MEaOk^V|4d38{1D|KOlZSjBKrj7Fgf^>JyL0k
zLoI$adZJ0T+8i_Idsuj}C;6jgx9LY#Ukh;!8eJ^B1N}q=Gn4onF*a2vY7~`x$r@rJ
z`*hi&Z2lazgu{&nz>gjd>#eq*IFlXed(%$s5!HR<!{AgXHWD~USVRvxKdGTp>XKNm
zDZld+DwDI`O6hyn2uJ)F^{^;ESf9sjJ)wMSKD~R=DqPBHyP!?cGAvL<1|7K-(=?VO
zGcKcF1spUa+ki<qEk7@%dE~%eGpEl!oK*hA!YE+isq^GFdJ#{KfWIULzmRCaF}4(*
z-$*W)k94bSp|#5~htGbQ<~v1feWKv$%wM~TX}E><`6K#@QxOTsd847N8WSWztG~?~
z!gUJn>z0O=_)VCE|56hkT~n5xXTp}Ucx$Ii%bQ{5;-a4~I2e|{l9ur#*ghd*hSqO=
z)GD@ev^w&5%k}YYB~!A%3*XbPPU-N6&3Lp1LxyP@|C<{qcn&?l54+zyMk&I3YDT|E
z{lXH-e?C{huu<@~li+73lMOk&k)3s7Asn$t6!PtXJV!RkA`qdo4|OC_a?vR!kE_}k
zK5R9KB%V@R7gt@9=TGL{=#r2gl!@3G;k-6sXp&E4u20DgvbY$iE**Xqj3TyxK>3AU
z!b9}NXuINqt>Htt6fXIy5mj7oZ{A&$XJ&thR5ySE{mkxq_YooME#VCHm2+3D!f`{)
zvR^WSjy_h4v^|!RJV-RaIT2Ctv=)UMMn@fAgjQV$2G+4?&dGA8vK35c-8r<daDqE-
zlIJCF%-7v?-xOAOA*Z$Wv;j3$ldn=}pR52aU>)z9Qqa=%k(FU)?iec14<^olkOU3p
zF-6`zHiDKPafKK<gsO-HjX!gIc-J@mlI}lqM!qAHMA?>^USUU+D01>C&Wh{{q?>5m
zGQp|z*+#>IIo=|ae8CtrN@@t~uLFOeT{}vX(IY*;>wAU=u1Qo4c+a&R);$^VCr>;!
zv4L{`lHgc9$BeM)pQ#XA_(Q#=_i<x#Kw|T_b{oltLKCCP2b6F_+)lx3b*Vc?@JD8p
z>SZL4>L~8Hx}NmOC$&*Q*bq|9Aq}rWgFnMDl~d*;7c44GipcpH9PWaBy-G$*MI^F0
z?Tdxir1D<2ui+Q#^c4?uKvq=p>)lq56<F6-{L-8bs~8_dC8J3p4CdV*Iq;6IOvBJh
z^E(Ti1wkp{O6qebTnBYm)da^xs3^-TV5tGhoGrFBA^b?UK`APfD~Y+F8!rz@iSNu3
zFO1o9o^S3!%nw&2bpBxHF!V{IaC(n}+(HqYMb(3!l`YX-ru;2?$oSZD;K6*RvAS8r
zf1jgZer>=Eb|N^qz~w7rsZu)@E4$;~snz+wIxi+980O6M#RmtgLYh@|2}9BiHSpTs
zacjGKvwkUwR3lwTSsCHlwb&*(onU;)$yvdhikonn|B44JMgs*&Lo!jn`6AE>XvBiO
z*LKNX3FVz9yLcsnmL!cRVO_qv=yIM#X|u&}#f%_?Tj0>8)8P_0r0!AjWNw;S44tst
zv+NXY1{zRLf9OYMr6H-z?4CF$Y%MdbpFIN@a-LEnmkcOF>h16cH_;A|e)pJTuCJ4O
zY7!4FxT4>4aFT8a92}84>q0&?46h>&0Vv0p>u~k&qd5$C1A6Q$I4V(5X~6{15;PD@
ze6!s9xh#^QI`J+%8*=^(-!P!@9%~buBmN2VSAp@TOo6}C?az+ALP8~&a0FWZk*F5N
z^8P8IREnN`N0i@>O0?{i-FoFShYbUB`D7O4HB`Im2{yzXmyrg$k>cY6A@>bf7i3n0
z5y&cf2#`zctT>dz+hNF&+d3g;2)U!#vsb-%LC+pqKRTiiSn#FH#e!bVwR1nAf*TG^
z!RKcCy$P>?Sfq6n<%M{T0I8?p@HlgwC!<R%oqdMv88ghhaN5z;w29c{kLz0?InueY
zuDv#J^DHLyGoyzt8(sCID)#E6<WCYlz7uC1Xvs8QhV{45h-M4rLYe7xw;{g462-zX
zIV>HoWO>~mT+X<{Ylm+$Vtj9};H3$EB}P2wR$3y!TO#$iY8eO-!}+F&jMu4%E6S>m
zB(N4w9O@2=<`WNJay5PwP8javDp~o~xkSbd4t4t8)<Wt_Xc73S;VOmD#Fsb|nTsJs
z59;v?-{=r}I{BDxTN)Iz2&5m`sG^%wjY0*@1I`W29gtM7#wwIQTHvQhS2gB?6J62R
zJXy=)7L1!%o4(?3j6J3Pc%v5LFvsR9gKoej%77dCetZylr9&mT=u=p$Kn1Z^C3ySy
z3|Tg>9jqu@bHmJHq=MV~Pt|(TghCA}fhMS?s-{klV>~=VrT$nsp7mf{?cze~KKOD4
z_1Y!F)*7^W+BBTt1R2h4f1X4Oy2%?=IMhZU8c{qk3xI1=!na*Sg<=A$?K=Y=GUR9@
zQ(ylIm4Lgm>pt#%p`zHxok%vx_=8Fap1|?OM02|N%X-g5_#S~sT@A!x&8k#wVI2lo
z1Uyj{tDQRpb*>c}mjU^gYA9{7mNhFAlM=wZkXcA#MHXWMEs^3>p9X)Oa?dx7b%N*y
zLz@K^%1JaArjgri;8ptNHwz1<0y8tcURSbHsm=26^@CYJ3hwMaE<khA9_uuFNLm1L
zw+Fp#304~-S;vdG5Nug~K2qs}yD1rrg&9Fcvifn@KphT~L22BKMX?U^9@?Ph`>vC7
z3Wi-@AaXIQ)%F6#i@%M>?Mw7$6(kW@?et@wbk-APcvMCC{>iew#vkZej8%9h0JSc?
zCb~K|!9cBU+))^q*co(E^9jRl7gR4Jihyqa(Z(P&ID#TPyysVNL7(^;?Gan!OU>au
zN}miBc&XX-M$mSv%3xs)bh>Jq9#aD_l|zO?I+p4_5qI0Ms*OZyyxA`sXcyiy>-{YN
zA70%HmibZYcHW&YOHk6S&PQ+$rJ3(utuUra3V0~@=_~QZy&nc~)AS>v&<6$gErZC3
zcbC=eVkV4Vu0#}E*r=&{X)<H<fOshUJUO>Kgq|8MGCh(wsH4geLj@#8EGYa})K2;n
z{1~=ghoz=9TSCxgzr5x3@sQZZ0FZ+t{?klSI_IZa16pSx6*;=O%n!uXVZ@1IL;JEV
zfOS&yyfE9dtS*^jmgt6>jQDOIJM5Gx#Y2eAcC3l^lmoJ{o0T>IHpEC<k{}Rs{I@x*
zb<od>TbfYgPI4#LZq0<d#zAXFmb<Y9lgw&{$vCxBQ~RnTL=zZ7D-RwUE3~Z#wraN%
z_E{llZ?GrX#>PKqnPC<SBsRloBYG4ZO7Eeh-Bv2C$rMVb@bcKn3t2`<&0ke8{h|+|
z29&HD`tAtGV2ZA(;c{wT$(NWY+fHTL0b7Km+3IMcIX(?D)PQ;HB*^`ex$kl}K>D}_
zyKxz;(`fE0z~nA1s?d{X2!#ZP8wUHzFSOoTWQrk%;wCnBV_3D%3@EC|u$Ao)tO|AO
z$4&aa!wbf}rbNc<V}`mLC?8U0y^+E9xuE>P{6=ajgg(`p5kTeu$ji20`zw)X1SH*x
zN?T36{d9TY*S896Ijc^!35LLUByY4QO=ARCQ#MMCjudFc7s!z%P$6DESz%zZ#>H|i
zw3Mc@v4~{Eke;FWs`5i@ifeYPh-Sb#vCa#qJPL|&quSKF%sp8*n#t?vIE7kFWjNFh
zJC@u^bRQ^?ra|%39Ux^Dn4I}QICyDKF0mpe+Bk}!lFlqS^WpYm&xwIYxUoS-rJ)N9
z1Tz*6Rl9;x`4lwS1cgW^H_M*)Dt*DX*W?ArBf?-t|1~ge&S}xM0K;U9Ibf{okZHf~
z#4v4qc6s6Zgm8iKch5VMbQc~_V-ZviirnKCi*ouN^c_2lo&-M;YSA>W>>^5tlXObg
zacX$k0=9Tf$Eg+#9k6yV(R5-&F{=DHP8!yvSQ`Y~XRnUx@{O$-bGCksk~3&qH^dqX
zkf+ZZ?Nv5u>LBM@2?k%k&_aUb5Xjqf#!&7%zN#VZwmv65ezo^Y4S#(ed0yUn4tFOB
zh1f1SJ6_s?a{)u6VdwUC!Hv=8`%T9(^c`2hc9nt$(q{Dm2X)dK49ba+KEheQ;7^0)
ziFKw$%EHy_B1)M>=yK^=Z$U-LT36yX<F=`VawpD(xy$9hZLKdS9NJ`Zn_|f^uS`)c
z-Rl}C$-9t=SeW=txVx%`NS&LLwx4tQT@F-lQnBqQ-sOH}Jc&bP@MTU&SQLci>>EKT
zvD8IAom2&2?bTmX@_PBR4W|p?6?LQ+&UMzXxqHC5VHzf@Eb1u)kwyfy+NOM8Wa2y@
zNNDL0PE$F;yFyf^jy&RGwDXQwYw6yz>OMWvJt98X@;yr<mIFkh{a&op3>!*RQDBE-
zE*l*u=($Zi1}0-Y4lGaK?J$yQjgb<Bq)i+tJ7(x$;ieC4!=clV5G5IPlSyhAR$E4=
z$1c&+)JfppzZ*VSL$xH3n1^iI1K%)!-^sJU%xwj7WT8t7w6499b3QQ%J+gW)4)JMb
z8GVT`4`(VvLA^xbTV6K2V_8Mv*?gDDUBYV!P-qg?Dq*YIhGKXu$p#?E9&(-}opTbz
zZ#J#VgX+|T3gSW)eF}>+*ljUvNQ!;QYAoCq@>70=sJ{o{^21^?zT@r~hhf&O;Qiq+
ziGQQLG*D@5;LZ%09mwMiE4Q{IPUx-emo*;a6#DrmWr(zY27d@ezre)Z1BGZdo&pXn
z+);gOFelKDmnjq#8dL7CTiVH)dHOqWi~uE|NM^QI3EqxE6+_n>IW67~UB#J==QOGF
zp_S)c8TJ}uiaEiaER}MyB(grNn=2m&0yztA=!%3xUREyuG_jmadN*D&1nxvjZ6^+2
zORi7iX1iPi$tKasppaR9$a3IUmrrX)m*)fg1>H+$KpqeB*G>AQV((-G{}h=qItj|d
zz~{5@{?&Dab6;0c7!!%Se>w($RmlG7Jlv_zV3Ru8b2rugY0MVPOOYGlokI7%nhIy&
z-B&wE=lh2dtD!F?noD{z^O1~Tq4MhxvchzuT_oF3-t4YyA*MJ*n&+1X3<j>~6quEN
z@m~aEp=b2~mP+}TUP^FmkRS_PDMA{B<dV*k52^3iWFIaXBr1MC#nA4rRMbI6g1e0>
zaSy(P=$T~R!yc^Ye0*pl5xcpm_JWI;@-di+nruhqZ4gy7cq-)I&s&Bt3BkgT(Zdjf
zTvvv0)8xzntEtp4iXm}~cT+pi5k{w{(Z@l2XU9lHr4Vy~3ycA_T?V(QS{qwt?v|}k
z_ST!s;C4!jyV5)^6xC#v!o<DVtBeh%T7qnQl{H-3DV=+H*Qr*Tk6W^hU(ZD0kJnpt
z6l*<^aakgBhlA+xpS}v`t7iyV?zu_V<U{&GBzBLYIuzDQe~f#6w^zD>*uS%a-jQ6<
z)>o?z7=+zNNtIz1*F_HJ(w@=`E+T|9TqhC(g7kKDc8z~?RbKQ)LRMn7A1p*PcX2YR
zUAr{);~c7I#3Ssv<0i-Woj0&Z4a!u|@Xt2J1>N-|ED<3$o2V?OwL4oQ%$@!zLamVz
zB)K&Ik^~GOmDAa143{I4?XUk1<3-k{<%?&OID&>Ud%z*Rkt*)mko0RwC2=qFf-^OV
z=d@47?tY=A;=2VAh0mF(3x;!#X!%{|vn;U2XW{(nu5b&8kOr)Kop3-5_xnK5oO_3y
z!EaIb{r%D{7zwtGgFVri4_!yUIGwR(xEV3YWSI_+E}Gdl>TINWsIrfj+7DE?xp+5^
zlr3pM-Cbse*WGKOd3+*Qen^*uHk)+EpH-{u@i%y}Z!YSid<}~kA*IRSk|nf+I1N=2
zIKi+&ej%Al-M5`cP^XU>9A(m7G>58>o|}j0ZWbMg&x`*$B9j#Rnyo0#=BMLdo%=ks
zLa3(2EinQLXQ(3zDe7Bce%Oszu%?8PO648TNst4SMFvj=+{b%)ELyB!0`B?9R6<HO
z0ZCx8TWpL$G_aCzv{2o6N{#z3g%x>aO{i-63|s@|raSQGL~s)9R#J#duFaTSZ2M{X
z1?YuM*a!!|jP^QJ(hAisJuPOM`8Y-Hzl~%d@latwj}t&0{DNNC+zJARnuQfiN`HQ#
z?boY_2?*q;Qk)LUB)s8(Lz5elaW56p&fDH*AWAq7Zrbeq1!?FBGYHCnFgRu5y1jwD
zc|yBz+UW|X`zDsc{W~8m<GsO<mO_1`^L`RbrG?Z6Us2*=^_x$`JV{a_LYEsuJtJYL
ziPBF7dm}M2=6vrP;RB?Z6!7)Zvt4B!$rUPf{RA&_8%VD|7)NrR9*=&gO*sOzLhB*~
z^{cR)lY*pt9GGm(POd`WZo!H=s$8fLl_}-xnV5A+4*BbLUMGLAzH|i9_k(p_(`_J-
zjFFqtuzWuLa;BGl;mNUQM^&@rL--@GcC@@A*GDUdTjOrweNe5I+671K_l#WVI|@LM
z6mSs@4|l^kTD;Gvy}KaDi)#o4AD~D*LX@4{{bfG+FoqQ?-6%VkN)4{7vy<hZ9gNX|
zQxtE>$sh@VVnZD$lLnKlq@Hg^;ky!}ZuPdKNi2BI70;hrpvaA4+Q_+K)I@|)q1N-H
zrycZU`*YUW``Qi^`bDX-j7j^&bO+-Xg$cz2#i##($uyW{Nl&{DK{=lLWV<rkzZltE
zVX#Q@q!0kD+4jwZ#haJNHLSu>3|=<&si||2)l=8^8_z+Vho-#5LB0EqQ3v5U#*DF7
zxT)1j^`m+lW}p$>WSIG1eZ>L|YR-@Feu!YNWiw*IZYh03mq+2QVtQ}1ezRJM?0PA<
z;mK(J5@N8>u@<6Y$QAHWNE};rR|)U_&bv8dsnsza7{=zD1VBcxrALqnOf-qW(zzTn
zTAp|pEo#FsQ$~*$j|~Q;$Zy&Liu9OM;VF@#_&*nL!N2hH!Q6l*OeTxq!l>dEc{;Hw
zCQni{iN%jHU*C;?M-VUaXxf0FEJ_G=C8)C-wD!DvhY+qQ#FT3}Th8;GgV&AV94F`D
ztT6=w_Xm8)*)dBnDkZd~UWL|W=Gl<gto;(*wC9U9tZbpA!j<N3*HCbtKUlby_Vyr4
z!?d@=(#f`*(ud3VsGC{9IRi#5(w*FK!J}~s9(p0ap?ykZJBp1cTUR*jPbbAP&K)BP
zDUly$`B#Sn(aWroZGbyL&=Dg67A>u!$hc|1w7_7l!3MAt95oIp4Xp{M%clu&TXehO
z+L-1#{mjkpTF@?|w1P98OCky~S%@OR&o75P<Wn%&Jm$EVDF7;}E<;f25{W=vmcPFf
zmJVk81ZR1bRmlb|#0}DPdayCjq(27hQh>&ZHvC}Y=(2_{ib(-Al_7aZ^U?s34#H}=
zGfFi5%KnFVCKtdO^>Htpb07#BeCXMDO8U}crpe1Gm`>Q=6qB4i=nLoLZ%p$TY=OcP
z)r}Et-Ed??u~f09d3Nx3bS@ja!fV(Dfa5lXxRs#;8?Y8G+Qvz+iv7fiRkL3liip})
z&G0u8RdEC9c$$rdU53=<QkS9aMArWJ!P8{(D~hr9YfM2Q0nl|;=ukHlQj%<P$wYfa
z?$=heR#}yGJkpA2LI#>MH`p!Jn|DHjhOxHK$tW_pw9wCTf0Eo<){HoN=zG!!Gq4z4
z7PwGh)V<N7ESN6`*^`^Q73fj(wcMs7=5Iu(yJo@Q_F?W?yk3)SdLai+cM6GrKPrjs
za_NJm=uOAmRL5F_{*Yjb_BZNY?)kCB%$WE8;A{ZK>NPXW-cE#MtofE`-$9~nmmj}m
zlzZscQ2+Jq%gaB9rMgVJkbhup0Ggpb)&L01T=%>n7-?v@I8!Q(p&+!fd+Y^Pu9l+u
zek(_$^HYFVRRIFt@0Fp52g5Q#I`tC3li`;UtDLP*rA{-#Yoa5qp{cD)QYhldihWe+
zG~zuaqLY~$-1sjh2lkbXCX;lq+p~!2Z=76cvuQe*Fl>IFwpUBP+d^<W!tp~MwxCaj
zHBQw{tTF&?2^15<bHvmlCS|A$khwaGVZw*2lw&_pOQz;LcFj@Ysq%CZ)?t&74A|dB
z4WL~cZpG-0G^KuK)}aNOTySm-Lt#QyW&mN^>&E4BGc<j4bbw_-4Ttv5`+q&kCfaBq
z#Rl}~m+g*DG5=zM=t?z8cf%Vr>{m#l%Kuo6#{XGoRyFc%Hqhf|%nYd<;yiC>tyEyk
z4I+a<QbTvlzlVm5v2!^bF)s*0Cw+t*kzz%N#&QZ42CimT6ySz~?+nd>`(%%Ie=-*n
z-{mg=j&t12)LH3R?@-B1tEb7FLMePI1HK0`Ae@#)KcS%!Qt9p4_fmBl5zhO10n401
zBSfnfJ;?_r{%R)hh}BBNSl=$BiAKbuWrNGQUZ)+0=Mt&5!X*D@yGCSaMNY&@`;^a4
z;v=%D_!K!WXV1!3%4P-M*s%V2b#2jF2bk!)#2GLVuGKd#vNpRMyg`kstw0GQ8@^k^
zuqK5uR<>FeRZ#3{%!|4X!hh7hgirQ@Mwg%%ez8pF!N$xhMNQN((yS(F2-OfduxxKE
zxY#7O(VGfNuLv-ImAw5+h@gwn%!ER;*Q+001;W7W^waWT%@(T+5k!c3A-j)a8y11t
zx4~rSN0s$M8HEOzkcWW4YbKK9GQez2XJ|Nq?TFy;jmGbg;`m&%U4hIiarKmdTHt#l
zL=H;ZHE?fYxKQQXKnC+K!TAU}r086{4m}r()-QaFmU(qWhJlc$eas&y<Oz%^3FaFm
z1?*33BSANpZbOjV<(WE=T(DuY)_XOR{Jho+f)Z}g61HjnqKKN*8E0S?ATVoi0{#On
zGn@2R)R+{|FLX_EYm8{*=&UqzSkXCnZ)vWGS!9t02v^*;nhYk{U}PXVkPhlRc3UH{
zA-5Xc>?=H9EYQy8N$8^bni9TpD<bzO7YS=tCt}zYcl)|7!PRQIoif~D7yjeqW#(B3
zmpkmPyyRt85TQV!liLz!S@Olwr9!I#6DL45xU1kD`j8+MN!ST75vIA5J=~k_se^q#
zaC@(uVW_ra*o|Fs!(sX4Ik6k-(M%QP2;-Z@Rf=+&=pE`Dv8K9?k1Fg2pF%vW*HO>p
zkA^WRs?KgYgjxX4T6?`SMs$`s3vlut(YU~f2F+id(Rf_)$BIMibk9lACI~LA+i7xn
z%-+=DHV*0TCTJp~-|$VZ@g2vmd*|2QXV;HeTzt530KyK>v&253N1l}bP_J#UjLy4)
zBJili9#-ey8Kj(dxmW^ctorxd;te|xo)%46l%5qE-YhAjP`Cc03vT)vV&GAV%#Cgb
zX~2}uWNvh`2<*AuxuJpq>SyNtZwzuU)r@@dqC@v=Ocd(HnnzytN+M&|Qi#f4Q8D=h
ziE<3ziFW%+!yy(q{il8H44g^5{_+pH60Mx5Z*FgC_3hKxmeJ+wVuX?T#ZfOOD3E4C
zRJsj#wA@3uvwZwHKKGN{{Ag+8^cs?S4N@6(Wkd$CkoCst(Z&hp+l=ffZ?2m%%ffI3
zdV7coR`R+*dPbNx=*ivWeNJK=Iy_vKd`-_Hng{l?hmp=|T3U&epbmgXXWs9ySE|=G
zeQ|^ioL}tve<e`!rDYCFUej_ysJ2z(4AIN3g4xGaB0&Y<^`&A^@AOml<{gmBP!-y6
z!IsbSiZ8eH@;)gbXcV?N4*>N{s72_&h+F+W;G}?;?_s@h5>DX(rp#eaZ!E=NivgLI
zWykLKev+}sHH41NCRm7W>K+_qdoJ8x9o5Cf!)|qLtF7Izxk*p|fX8UqEY)_sI_45O
zL2u>x=r5xLE%s|d%MO>zU%KV6QKFiEeo12g#bhei4!Hm+`~Fo~4h|BJ)%ENxy9)Up
zOxupSf1QZWun=)gF{L0YWJ<(r0?$bPFANrmphJ>kG`&7E+RgrWQi}ZS#-CQJ*i#8j
zM_A0?w@4Mq@xvk^>QSvEU|VYQoVI=TaOrsLTa`RZfe8{9F~mM{L+C`9YP9?Okn<Y+
zQ`?h`EW57j4Qxm_DjacY`kEKG93n7#6{CBssPbH&1L2KSo|Htm*KD+0p<wD8e>Lw|
zmkvz>cS6`pF0FYeLdY%>u&XpPj5$*iYkj=m7wMzHqzZ5SG~$i_^f@QEPEC+<2nf-{
zE7W+n%)q$!5@2pBuXMxhUSi*%F>e_g!$T-_`ovjBh(3jK9Q^~OR{)}!0}vdTE^M+m
z9QWsA?xG>EW;U~5gEuKR)Ubfi&YWnXV;3H6Zt^NE725*`;lpSK4HS1sN?{~9a4JkD
z%}23oAovytUKfRN87XTH2c=kq1)O<qRzRUy={bH%*8V=pA##jg=-EE6(Lotu<IYEm
zZ71>5(fH_M3M-o{{@&~KD`~TRot-gqg7Q2U2o-iiF}K>m?CokhmO<lc^{s0_OssMw
zc*3nzZ5WN~$;I6TzaKlN9W+6*SX5vHzSUyIfdtNx5K}gB*a}Ei-T%?Pusx0i{k6zW
zVCCXrjNT1#YIkZ%s$(OfAJ`FBR*66B?{y$nkK6iXlBVVr@2#yGM6%0i_(U5#>DaLB
z1p6(6JYGntNOg(s!(>ZU&lzDf+Ur)^Lirm%*}Z>T)9)fAZ9>k(kvnM;ab$ptA=hoh
zVgsVaveXbMpm{|4*d<0>?l_JUFOO8A3xNLQOh%nVXjYI6X8h?a@6kDe5-m&;M0xqx
z+1U$s>(P9P)f0!{z%M@E7|9nn#IWgEx6A6JNJ(7dk`%6$3@!C!l;JK-p2?gg+W|d-
ziEzgk$w7k48NMqg$CM*4O~Abj3+_yUKTyK1p6GDsGEs;}=E_q>^LI-~pym$qhXPJf
z2`!PJDp4l(TTm#|n@bN!j;-FFOM__eLl!6{*}z=)UAcGYloj?bv!-XY1TA6Xz;82J
zLRaF{8ayzGa|}c--}|^xh)xgX>6R(sZD|Z|qX50gu=d`gEwHqC@WYU7{%<5VOnf9+
zB<I4+b1=sZ53G|-kvYcPViY)E5R#f6q2$x?f020VY)3|@p~2oGrySSwa~uPN4nC&g
zX!I>@FX?|UL%`8EIAe!*UdYl|6wRz6Y>(#8x92$#y}wMeE|ZM2X*c}dKJ^4NIf;Fm
zNwzq%QcO?$NR-7`su!*$dlIKo2y(N;qgH@1|8QNo$0wbyyJ2^}$iZ>M{BhBjTdMjK
z>gPEzgX4;g3$rU?jvDeOq`X=>)zdt|jk1Lv3u~bjHI=EGLfIR&+K3ldcc4D&Um&04
z3^F*}WaxR(ZyaB>DlmF_UP@+Q*h$&nsOB#gwLt{1#F4i-{A5J@`>B9@{^i?g_Ce&O
z<<}_We-RUFU&&MHa1#t56u<quT+%|#XvIpRJ?co{{tU0{tvlHG=;UJAM%ZgS1Wk*<
zbzK}T;?L5YLE4NLu9J0u#X!J<y<O?uV#gKBNVOZ@7SW<kFyslWRX@_C90;+zxGfEz
zb5V;-W-;gzJ|=>_oM(Ljn7djja!T|gcxSoR=)@?owC*NkDarpBj=W4}=i1@)@L|C)
zQKA+o<(pMVp*Su(`zBC0l1yTa$MRfQ#uby|$mlOM<xEsq_18&vqMDMD7Zoz%Fkm7A
z3)Py9=vTp8h$K)n9Uvzc$sVOT&zol^a%bZk8R4Y8^rZSJmY_uRt<`DC1F!?x#33tZ
ze&XW>s=G`4J|?apMzKei%jZql#gP@IkOaOjB7MJM=@1j(&!jNnyVkn5;4lvro1!vq
ztXiV8HYj5%)r1PPpIOj)f!><jg)vV+x8*ZL<Q!-CP7F3VXp#~OA}`YkX&1&s!htsT
z^$c2`mPAtTVX<qUk`r6!8Vb=Uc23%M)2;P#-xg0%R+ozayS`Bp$+go_wMt83+CODc
z2B}|cG;*tiKwHPYIq{X<`rJQAk*7&QC@O%H3Z553ow$9gREC4~b(*v-N%(bN;Y@mL
zsmAcMVly_+3OO{6?K&3Aei;$vMv!82h}`Bdn#~L=J)xK(4o*51?I7`(&5m9X))pa;
zLPfmH5<-xa-W%$*L{V<;N$-)VdNT!&jA&vHrEgBjjo5UU0If7Vhz3vkcHNAY5aT+C
zc5euR<}4<-qaBP_Zef)X2|HW=07DGXb>pc^3#LvfZ(hz}C@-3R(Cx7R427*Fwd!XO
z4~j&IkPHcBm0h_|iG;ZNrYdJ4HI!$rSyo&sibmwIgm1|J#g6%>=ML1r!kcEhm(XY&
zD@mIJt;!O%WP7CE&wwE3?1-dt;RTHdm~LvP7K`ccWXkZ0kfFa2S;wGtx_a}S2lslw
z$<4^Jg-n#Ypc(3t2N67Juasu=h)j&UNTPNDil4MQMTlnI81kY46uMH5B^U{~nmc6+
z9>(lGhhvRK9ITfpAD!XQ&BPphL3p8B4PVBN0NF6U49;ZA0Tr75AgGw7(S=Yio+xg_
zepZ*?V#KD;sHH+15ix&yCs0eSB-Z%D%uujlXvT#V$Rz@$+w!u#3GIo*AwMI#Bm^oO
zLr1e}k5W~G0xaO!C%Mb{sarxWZ4%Dn9vG`KHmPC9GWZwOOm11XJp#o0-P-${3m4g(
z6~)X9FXw%Xm~&99tj>a-ri})ZcnsfJtc10F@t9xF5vq6E)X!iUXHq-ohlO`gQdS&k
zZl})3k||u)!_=nNlvMbz%AuIr89l#I$;rG}qvDGiK?xTd5HzMQkw*p$YvFLGyQM!J
zNC^gD!kP{A84nGosi~@MLKqWQNacfs7O$dkZtm4-BZ~iA8xWZPkTK!Hp<LTap+x4*
zUK;Ha0;Jc=$HCCwcHw+aadnOZR281fO)q}D^z9=|qH9;-;e${xK|?9elJ8=LaM<65
zE6;>A5zr!9Z&+icfAJ1)NWkTd!-9`NWU>9uXXUr;`Js#NbKFgrNhTcY4GNv*71}}T
zFJh?>=EcbUd2<|fiL+H=wMw8hbX6?+_cl4XnCB#ddwdG><R|vBc*yG=?!<`t>bki*
zt*&6Dy&EIPluL@A3_;R%)shA-tDQA1!Tw4ffBRyy;2n)vm_JV06(4O<t|JggQ(KZT
zsYO62-6u^^mX>r&QAOKNZB5f(MVC}&_!B>098R{Simr!UG}?CW1Ah+X+0#~0`X)od
zLYablwmFxN21L))!_zc`IfzWi<Gu||u|EiUx`=l}NMzvxMP68pmmwjICH*y4{3)P@
z%y44Q*AVc4<$z9@nMeRAeVJ+>`5>MxPe(Dm<mb5oz44!o-XIzF2v`EK`q7j%sCMv2
zL>jjO1}HHt7TJtAW+VXHt!aKZk>y6PoMsbDXRJnov;D~Ur~2R_7(Xr)aa%wJwZh<i
zvMmaF%EvU)a6S{Gh%whrx@S36i|iv5oL=QhR4YK<CK74@mwN~dH00RX{_e6r+#l%j
z7OK<7e3kn;@H(@8>S3gr7IGgt%@;`jpL@gyc6bGCVx!9CE7NgIbUNZ!Ur1RHror0~
zr(j$^yM4j`#c2KxSP61;(Tk^pe7b~}LWj~SZC=MEpdKf;B@on9=?_n|R|0q;Y*1_@
z>nGq>)&q!;u-8H)WCwtL<LrD$x{Fa((5#4K!l=^|krt6e2?!PZN=Rmwt*1$d&$Q{J
zCgeI0rGg+wn3iR*eck$cFmbQ~E3GYxr&dJb(4{lgPt?n#^<GT#&j{om5`|wE6bW}}
ze{Pav1oDZnak%Fz$PD1ZH8xBo#FnqUG6u>&7F4vbnnfSAlK1mwnRq2&gZrEr!b1MA
z(3%vAbh3aU-IX`d7b@q`-WiT6eitu}ZH9x#d&qx}?CtDuAXak%5<-P!{a`V=$|XmJ
zUn@4lX6#ulB@a=&-9HG)a>KkH=jE7>&S&N~0X0zD=Q=t|7w;kuh#cU=NN7gBGbQTT
z;?<kJaO{>bdSt8V&IIi}<ThZP?O{MP;s77svl-cIdCj)d-BZGJap1Ull?cz;BdUt4
zMAS0={#2iyI>sDTzA0dkU}Z-Qvg;RDe8v>468p3*&hbG<I%;HTx8<Z&Ih@Xrl%AO4
zEZ252P#-|8MJE+L5IXho^0!PtBR61%3tAJ8RP$~a8%~<+5(4Lyh@;kvSLVbDc4PRn
z?4(9&{Rpo>T1I3hi9hh~Z(!H}{+>eUyF)H&gdrX=k$aB%J6I<Mis<6rrEG;E4zw&M
zYsQ6$FFc_^cwkYGT9ds?4^G_w2+$2L@}W#bXUf0JW}7J?EgbIp`jFFailmTZXuEyM
z?LcqfTM!s>;6+^^kn1mL+E+?A!A}@xV(Qa@M%HD5C@+-4Mb4lI=Xp=@9+^x+jhtOc
zYgF2aVa(uSR*n(O)e6tf3JEg2xs#dJfhEmi1iOmDYWk|wXNHU?g23^IGKB&yHnsm7
zm_+;p?YpA#N*7vXCkeN2LTNG`{QDa#U3fcFz7SB)83=<8rF)|udrEbrZL$o6W?oDR
zQx!178Ih9B#D9Ko$H(jD{4MME&<|6%MPu|TfOc#E0B}!j^MMpV69D#h2`vsEQ{(?c
zJ3Lh!3&=yS5fWL~;1wCZ?)%nmK`Eqgcu)O6rD^3%ijcxL50^z?OI(LaVDvfL0#zjZ
z2?cPvC$QCzpxpt5jMFp05OxhK0F!Q<m=7hVYzR||ecS~Bi9y8}>`rPhDi5)y=-0C}
zIM~ku&S@pl1&0=jl+rlS<4`riV~LC-#pqNde@44MB(j%)On$0Ko(@q?4`1?4149Z_
zZi!5aU@2vM$dHR6WSZpj+VboK+>u-CbNi7*lw4K^ZxxM#24_Yc`<w`lM<_9<AjZra
zPf9|W$q@ib+eT6)aN(T>jvb9NPVi75L+MlM^U~`;a7`4H0L|TYK>%hfEfXLsu1JGM
zbh|8{wuc7ucV+`Ys1kqxsj`dajwyM;^X^`)#<+a~$WFy8b2t_RS{8yNYKKlnv+>vB
zX(QTf$kqrJ;%I@EwEs{cIcH@Z3|#^S@M+5jsP<^`@8^I4_8MlBb`~cE^n+{{;qW2q
z=p1=&+fUo%T{GhVX@;56kH8K_%?X=;$OTYqW1L*)hzelm^$*?_K;9JyIWhsn4SK(|
zSmXLTUE8VQX{se#8#Rj*lz`xHtT<61V~fb;WZUpu(M)f#<N`ZtP}(nwt@v*JXMv*g
zTjkPmLef!CJNB3?7*>;I+2_zR+)y5Jv?l`CxAinx|EY!`IJ*x9_gf_k&Gx2alL!hK
zUWj1T_pk|?iv}4EP#PZvYD_-LpzU!NfcL<ZIyO_4myXe0OU}<Cprr_|XIrM73FXg`
zNRt~K9+=_-Laa5&Rt6kJaobEvjFnh>L%fK&r$W8O1KH9c2&GV~N#T$kaXGvAOl)|T
zuF9%6(i=Y3q?X%VK-D2YIY<MPA*$`<$Z)_O$(a?^Bnjd_-qk6atAX5(s0D1W1}`G9
zl)%h^mai+5Kwy1+I$Zaauh0oNm3mQUQ=`8aEAo=0zrm72grj|c8&W!-^+^6zMgm-+
zSpJe{_P`h~;t1=21VLIQ5n~@Q5Y=~VMN|L<mJfGW44?>FPH3f|g$TrXW->&^Ab`WT
z7>Oo!u1u40?jAJ8H<j_H`^tLy@LZ5-N)dU$=t?bXuTI1>y`bv}qb<AzbCJ<X7c~}%
z50@S(*;X)_P8TrUWZGQQn`AI#Eve&0+FNaAqg<m^ZNYdEveME+t5Q5DV5-rT<{g7@
zG+rSFooLii=nDW~qWOU#YzUJee#V*XI!cGhpz&<{SF!$pIm@`rT3A99J?qG9DPU@z
z9jawkO0(cqfU^RIM<K3r*yl0SKgPT>gs8)cF0&qeVjD?e+3Ggn1Im>K77ZSpbU*08
zfZkIFcv?y)!*B{|>nx@cE{KoutP+seQU?bCGE`tS0GKUO3PN~t=2u7q_6$l;uw^4c
zVu^f{uaqsZ{*a-N?2B8ngrLS8<WR!m{e>E&s6}Xtv9rR9C^b`@q8*iH)pFz<!x=AK
zf6E-O(MiUN4a^nRWR%`TBl@CGu2cFmmpRkBUAPvyvw&qDg1_6Y)ycUoITv4yV(Mk5
z=Dtmg6tsakVjdG2BV~=LD3YcTEr=j6ou|^*Qem;+#vOz?`MQ>f1|kCfiLw6u{Z%aC
z!X^5CzF6qofFJgkl<Rtc72CagCpKF^gmhb1CH>JV3oc|Qc2XdFl+y5M9*P8}A>Kh{
zWRgRwMSZ(?Jw;m%0etU5BsWT-Dj-5F;Q$OQJrQd+lv`i6>MhVo^p*^w6{~=fhe|bN
z*37oV0kji)4an^%3ABbg5RC;CS50@PV5_hKfXjYx+(DqQdKC^JIEMo6X66$qDdLRc
z!YJPSKnbY`#Ht6`g@xGzJmKzz<St<)P9XB^ZWQT2VtTE^8HdQx8o;%`J{lUpkn0!&
z^d*IdfCW?sDnD#zV!vee5Xd}&#I@u4z;`)LVXVayyf`~NUMeM>n|abYbP+_Q(v?~~
z96%cd{E0BCsH^0HaWt{y(Cuto4VE7jhB1Z??#UaU(*R&Eo+J`UN+8mcb51F|I|n*J
zJCZ3R*OdyeS9hWkc_mA7-br>3Tw=CX2bl(=TpVt#WP8Bg^vE_9bP&6ccAf3lFMgr`
z{3=h@?Ftb$RTe&@IQtiJf<Z$(x)W;Yibdk0Eou)O=h)|ox2XJhbM7gDjm$)%o0c)W
z!;CM_%5jr$Dk{vl7{DX~*^!MCEDILf;SGbcLK^kRyl}+&4r>V;O&4fzh)e1>7seG;
z=%mA4@c7{aXeJnhEg2J@Bm;=)j=O=cl#^NNkQ<{r;Bm|8Hg}bJ-S^g4`|itx)~!LN
zXtL}?f1Hs6UQ+f0-X6&TBCW=A4>bU0{rv8C4T!(wD-h>VCK4YJk`6C9$by!fxOYw-
zV#n+0{E(0ttq<e;u-JNg<=7mR)Baf(#XbsMPDR?mv12UXo+AuGM*TW4&Dbw3MHmyv
zzQ)3g$Jc}F5k_3<jP&G5r+akl<UzYyi9?xB4hK@h8+B`?3~Bn5^eKgTbZcatPPir(
zn|7xaL9v;L3{V1l&DQSp%TOnp^O8OS$m-yD0^r7mU@qJQ<RvUSI@G_}IuDMi8mq0p
z?O{gor*9fmQL7Mrb|ducn%AQOk@nhAYv{%&-E+j$)7Bpd*!L2Cg%7pf&3ZLxA5Fwj
z%8~}*Sw2G<h3E&$jhO(1=)P&U%mN)4Rk5JcPDUdUN*FM8j0Mg^@Z|6~Ym*2e3TCV6
z?5B1NxqE*aMe#2m&+Fz%OG!n`J`B2Ww|QiS6U=1^3d+6`ls$U%hB`nu)=J>_#16B}
ze8$E#X9o{B!0vbq#WUwmv5Xz6{(!^~+}sBW{xctdNHL4^vDk!0E}(g|W_q;jR|ZK<
z8w>H-8G{%R#%f!E7cO_^B?yFRKLOH)RT9GJsb+kAKq~}WIF)NRLwKZ^Q;>!2MNa|}
z-mh?=B;*&D{Nd-mQRcfVnHkChI=DRHU4ga%xJ%+QkBd|-d9uRI76@BT(bjsjwS+r)
zvx=lGNLv1?SzZ;P)Gnn>04fO7Culg*?LmbEF0fATG8S@)oJ>NT3pYAXa*vX!eUTDF
ziBrp(QyDqr0ZMTr?4uG_Nqs6f%S0g?h`1vO5fo=5S&u#wI2d4+3hWiolEU!=3_oFo
zfie<EEFWI+<HRR}kMBRY{{xT?Ubu+n1E+3-XyZ@DlC1|CziB+t8LH;pSr1_{$txb2
z{LD6Cutu@sVLZ$sgxfHzi88%ifnz%FWxPwItQ=UFSeRQ?XX#H8uXPtSY1Da8V^-Nz
zx}G&3QUOW&pFuYAPt>?+4W#`;1dd#X@g9Yj<53S<6OB!TM8w8})7k-$&q5(smc%;r
z(BlXkTp`C47+%4JA{2X}MIaPbVF!35P#p;u7+fR*46{T+LR8+<Ms(<(ewo92Plp}^
z0K5%%0PpyoHDM$82Vjt^Jp>j25oduCfDzDv6R-hU{TVVo9fz?^N3ShMt!t0NsH)pB
zRK8-S{Dn*y3b|k^*?_B70<2gHt==l7c&cT>r`C#{S}J2;s#d{M)ncW(#Y$C*lByLQ
z&?+{dR7*gpdT~(1;<m}fXp@S^XBCFbD&Le<rzooSQB^d8r#S^ok_xS36-~w}kc?Ej
z7^zYrQY=EF$c06)iin^U556ixd{lb)^l<R>M(FfF==3z`^eW)=5a9RqvF-)2?S-(G
zhS;p(u~_qBum*q}On@$#08}ynd0+spzyVco0%G6;<-i5&016cV5UKzhQ~)fX03|>L
z8ej+HzzgVr6_5ZUpa4HW0Ca!=r1%*}Oo;2no&Zz8DfR)L!@r<<lmB!F&$32&71xdc
zAQ}KMGyqI!0F2N8;eY{y00CwIf0+QV$OUD<C@ujha0p9)KwJUh;0%`lShxaZKm`>5
z2viSZpmvo5XqXyAz{Ms7`7kX>fnr1gi4X~7KpznRT0{Xc5Cfz@43PjBMBoH@z_{~(
z(Wd}IPJ9hH+%)Fc)0!hrV+(A;76rhtI|YHbEDeERV~Ya>SQg^IvlazFkSK(KG9&{q
zkPIR~EeQaaBmwA<20}m<i2yt#0ML*D!NB+q2RLvyLxH9o41nNb1p??O7J)#e3I!NY
z1wlX)g#bnj0Jty$0KoMI0Cb7`0i50h9gE~g7Om;jPg0kO>BO?)N$(z1@p)5?%}rM|
zGF()~Z&Kx@OIDRI$d0T8;JX@vj3^2%pd_+@l9~a4lntZ;AvUIjqIZbuNTR6@hNJoV
zk4F;ut)LN4ARuyn2M6F~eg-e#UH%2P;8uPGFW^vq1vj8mdIayFOZo(tphk8C7hpT~
z1Fv8?b_LNR3QD9J+!v=p%}#<WkmT3SAH~zHvL~<r009F5U;qFWp(o;x5Q1O?TufB{
c@Yw=E7;q9obAc&xg(1}n;wTCO(gbOOU|30r`2YX_

literal 0
HcmV?d00001

diff --git a/public/assets/fonts/glyphicons-halflings-regular.svg b/public/assets/fonts/glyphicons-halflings-regular.svg
new file mode 100644
index 0000000..94fb549
--- /dev/null
+++ b/public/assets/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,288 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
+<font-face units-per-em="1200" ascent="960" descent="-240" />
+<missing-glyph horiz-adv-x="500" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="400" />
+<glyph unicode=" " />
+<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
+<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xa0;" />
+<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
+<glyph unicode="&#x2000;" horiz-adv-x="650" />
+<glyph unicode="&#x2001;" horiz-adv-x="1300" />
+<glyph unicode="&#x2002;" horiz-adv-x="650" />
+<glyph unicode="&#x2003;" horiz-adv-x="1300" />
+<glyph unicode="&#x2004;" horiz-adv-x="433" />
+<glyph unicode="&#x2005;" horiz-adv-x="325" />
+<glyph unicode="&#x2006;" horiz-adv-x="216" />
+<glyph unicode="&#x2007;" horiz-adv-x="216" />
+<glyph unicode="&#x2008;" horiz-adv-x="162" />
+<glyph unicode="&#x2009;" horiz-adv-x="260" />
+<glyph unicode="&#x200a;" horiz-adv-x="72" />
+<glyph unicode="&#x202f;" horiz-adv-x="260" />
+<glyph unicode="&#x205f;" horiz-adv-x="325" />
+<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
+<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
+<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
+<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
+<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
+<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
+<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
+<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
+<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
+<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
+<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
+<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
+<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
+<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
+<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
+<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
+<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
+<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
+<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
+<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
+<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
+<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
+<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
+<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
+<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
+<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
+<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
+<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
+<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
+<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
+<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
+<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
+<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
+<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
+<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
+<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
+<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
+<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
+<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
+<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
+<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
+<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
+<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
+<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
+<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
+<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
+<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
+<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
+<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
+<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
+<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
+<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
+<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
+<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
+<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
+<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
+<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
+<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
+<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
+<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
+<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
+<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
+<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
+<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
+<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
+<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
+<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
+<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
+<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
+<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
+<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
+<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
+<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
+<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
+<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
+<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
+<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
+<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
+<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
+<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
+<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
+<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
+<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
+<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
+<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
+<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
+<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
+<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
+<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
+<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
+<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
+<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
+<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
+<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
+<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
+<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
+<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
+<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
+<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
+<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
+<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
+<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
+<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
+<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
+<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
+<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
+<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
+<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
+<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
+<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
+<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
+<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
+<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
+<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
+<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
+<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
+<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
+<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
+<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
+<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
+<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
+<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
+<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
+<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
+<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
+<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
+<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
+<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
+<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
+<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
+<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
+<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
+<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
+<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
+<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
+<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
+<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
+<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
+<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
+<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
+<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
+<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
+<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
+<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
+<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
+<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
+<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
+<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
+<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
+<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
+<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
+<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
+<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
+<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
+<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
+<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
+<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
+<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
+<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
+<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
+<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
+<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
+<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
+<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
+<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
+<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
+<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
+<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
+<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
+<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
+<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
+<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/public/assets/fonts/glyphicons-halflings-regular.ttf b/public/assets/fonts/glyphicons-halflings-regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..1413fc609ab6f21774de0cb7e01360095584f65b
GIT binary patch
literal 45404
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

literal 0
HcmV?d00001

diff --git a/public/assets/fonts/glyphicons-halflings-regular.woff b/public/assets/fonts/glyphicons-halflings-regular.woff
new file mode 100644
index 0000000000000000000000000000000000000000..9e612858f802245ddcbf59788a0db942224bab35
GIT binary patch
literal 23424
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
G`u_lkUM?>H

literal 0
HcmV?d00001

diff --git a/public/assets/fonts/glyphicons-halflings-regular.woff2 b/public/assets/fonts/glyphicons-halflings-regular.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..64539b54c3751a6d9adb44c8e3a45ba5a73b77f0
GIT binary patch
literal 18028
zcmV(~K+nH-Pew8T0RR9107h&84*&oF0I^&E07eM_0Rl|`00000000000000000000
z0000#Mn+Uk92y`7U;vDA2m}!b3WBL5f#qcZHUcCAhI9*rFaQJ~1&1OBl~F%;WnyLq
z8)b|&?3j;$^FW}&KmNW53flIFARDZ7_Wz%hpoWaWlgHTHEHf()GI0&dMi#DFPaEt6
zCO)z0v0~C~q&0zBj^;=tv8q{$8JxX)>_`b}WQGgXi46R*CHJ}6r+;}OrvwA{_SY+o
zK)H-vy{l!P`+NG*`*x6^PGgHH4!dsolgU4RKj@I8Xz~F6o?quCX&=VQ$Q{w01;M0?
zKe|5r<z7o5`*yS~8)MszG41q#5{WWPpy7G9^(-fD<g4HS2Pp6}MR#f7LIoFspeCvR
z3+c{Ov}|bDFijfL*xJ&DWaU}da`Er7tg~)(Y2IDkd3AD?w7jnSneG!-SaWI)p`xDU
zXH9Mys?(WBfmfBO!_){Max(NjX;ffVH@MAGD6y!?&l=$WE1+*S^Cx4)$U?A><_7CD
z=eO3*x!r$<gNx(8nyyp{U13{MWIQu>aX2iFh3;}xNfx0v;SwB<Fg``NKlv&}sOOia
zl_SskHz$qk-Tj7B2@DHwWBbat?O%&GCL=1*D=EFRpwKHcVF9o~HnwAo=XtT&qlRWE
zVi`v1=H&nBv?M!wAX!1fF?LWbbVvCAjN!ns70n|1u$9{ZL&9b)AXkF-t^%6Wna*`f
z*04(m<0Gx@4&<!XDochu+x!F|DAC{R)c4o_TK-_!s|@9}TbCv3Sp`&zta~M|$%-V1
ztq`DddvEXU8JrjLh=Ul_yYF^%B5>fGG+@Z;->Hhvq<wD;VB@ph6#6G_6lL5#3gkx~
zHFE%Z^IuN$3X)Ju)24Q9Ro)B9zI%GT-16@8|DPH7fB1}tA~RrY4U!xKmRBRxkiA|Q
zKr4+b2V=R(Yj3HIK~EcS6>fF4r__4$mU>Dl_1w;-9`~5rF~@!3;r~xP-hZvOfOx)A
z#>8O3N{L{naf215f>m=bzbp7_(ssu&cx)Qo-{)!)Yz3A@Z0uZaM2yJ8#<s6khOy@V
z&}wI!ds<}Wi3oZ(j|&tv|KA}5cx}QpZ^By#9KFAF@B1dVuQA$!NDxA6LE`KPadPU;
zQjo+AqqndYk0@McX!H;i$Tx}X(u#SHJ%&iNTJu#<Xz9=-I1o~2(*?vBfO^7b&8^8!
zI*Z@{F?FmY+=Z{Cp`Jcc{axky6qgRBtRkQEW;eW-3-wE{UVkT;s_VTolPg6pyu@CK
zSyeS%s7^u`F5b$ErP4Ux#VgLuk2sI{EPRQ3O?-?&iV@{?VSLbGh?0Noj@91Fh1H!U
z01AI>OGlzm?JO5gbrj~@)NB4@?>KE(K-$w}{};@dKY#K3+Vi64S<@!Z{(I{7l=!p9
z&kjG^P~0f46i13(w!hED<gesU<d5XH<k#ev<OXsrxsqH=M#%^{mn<fylX>Jga;*Eb
z`!n|++@H8VaKG<9>VDh(y89J#=;Z$ei=GnD5TesW#|Wf)^D+9NKN4J3H5PF_t=V+Z
zdeo8*h9+8&Zfc?>>1|E4B7MAx)^uy$L>szyXre7W|81fjy+RZ1>Gd}@@${~PCOXo)
z$#HZd3)V3@lNGG%(3PyIbvyJTOJAWcN@Uh!FqUkx^&BuAvc)G}0~SKI`8ZZXw$*xP
zum-ZdtPciTAUn$XWb6vrS=JX~f5?M%9S(=QsdYP?K%Odn0S0-Ad<-tBtS3W06I^FK
z8}d2eR_n!(uK~APZ-#tl@SycxkRJ@5wmypdWV{MFt<T5%<QMMP#rTv8Dn)!jr4End
z8!An$TjN_QZBN_|-%;s$96wO$ZrvL{QYl%F!EaP1Th9SiDvOmh5WrK}3{64{{_F&y
zrSMy`6AG<_-)~t&XssC4d+gCHeK9;{jV1y%Xrvg1Cy#-D2g;>YBUY#g-Vv?5AEBj1
z`$T^tRKca*sn7<ZK}0!&|7AkCI;jT+6~rYE0#BU5AkxqT6Y+wF*hUg{if$klH$Np(
z14lF>gt%s@XUD-t>bij-4q-ilku9^;QJ3Mpc`HJ_EX4TGGQ-Og)`c~qm51<|gp7D@
zp#>Grssv^#A)&M8>ulnDM_5t#Al`#jaFpZ<#YJ@>!a$w@kEZ1<@PGs#L~kxOSz7jj
zEhb?;W)eS}0IQQuk4~JT30>4rFJ3!b+77}>$_>v#2FFEnN^%(ls*o80pv0Q>#t#%H
z@`Yy-FXQ9ULKh{Up&oA_A4B!(x^9&>i`+T|eD!&QOLVd(_avv-bFX~4^><K+`NUjl
zUA`n*5<n{f%?!4-)qpuLcwM`4xUD6=$ki+M2U1n6MQw*G7TmC^qdRw?b*#WSFG;)w
z)HldC)uy>o{%mzzrg_i~SBnr%DeE|i+^}|8?kaV(Z32{`vA^l!sp15>Z72z52FgXf
z^8ZITvJ9eXBT1~iQjW|Q`Fac^ak$^N-vI^*geh5|*CdMz;n16gV_zk|Z7q8tFfCvU
zJK^Pptnn0Rc~<r0!CgppAqmePbR1#5Tubl85FQ4lTg)+g8UrHdY9Ka1?3OcBFeRlE
zzYpoom?Fp2nZ{a4hDYQEn^Tkbje;(-5yZ};a0h|L)2vg*F=grd*^|WBo1OU#S-~Fv
zcDpzl2xPHbu|lC2Y@t*8{!%Fh(i78$=lQReu7C@B0!fO~hV;@Uos_RW`!LXs+NQHy
z@F$dGXT35dG@wzAM4<{W&5|=hvLeY%j@6DPfZK{_NfpP!+NaV|XArkdMWmsrp|+Y0
zNxjY}2dUoGHC2{GT?~El9hnDW?KmWthwM10KJ(#NAOW%mXq6&t9<|PZ;%Xe7E+vTD
zfEY+f$1Mv<nx@^jBQcU4Ljg4P-dWxOH-zo(t`hB8-Ik$N3~vY;K2XYCp*Fv_2blJm
zPc;8GW*QB>egGIAK}uv<M%BWA$}X1PZ}r3ec_|6TIBdoXwlXq~Ws001rqVG;8=+eP
zbcwJ)A;^UcGF*T_xCk`{#MzU|C0f_+{M&2Zk_ZN2^_{NVK>99VZm2WLPezQQ5K<`f
zg{8Ll|GioPYfNheMj-7-S87=w4N0WxHP`1V6Y)0M&SkYzVrwp>yfsEF7wj&T0!}dB
z)R~gGfP9pOR;GY_e0~K^^oJ-3AT+m~?Al!{>>5gNe17?OWz)$)sMH*xuQiB>FT2{i
zQ>6U_<n)x#cJkNUc|V)^vL|15d~)i9%UIk7`0hyQQOX6dwG{=#lR`i}3*A_(-}<aV
z6Bs$mG_#ni!&Ir*LWx4DW1y|U7^_H;P@~Q(g7S%hUz3y7SxDI<tR$+-%3z@EM);%g
zLObKN!YkVml!Zc2Qm{14ydZQ0tvYlF^&(mmMY>8}Ay~r4li;jzG+$&?S12{)+<*k9
z<^SX#xY|jvlvTxt(m~C7{y<eW|86c<M_B#9!3F3@>{3g>7TX#o2q$xQO|fc<%8r<e
zu{@uYv6wTaDS(!pU?WCA5)2p&Mj+Ip;0XTMc8zb%VkCGB2k$Gg;JkJFCbWHte9BlD
zCR^F6kT^z*ExAP|FFuMd7tu$>E@A3=UW(o?gVg?gDV!0q6O!{MlX$6-Bu_m&0ms66
znWS&zr{O_4O&{2uCLQvA?xC5vGZ}KV1v6)#oTewgIMSnBur0PtM0&{R5t#UEy3I9)
z`LVP?3f;o}sz*7g<a{wL*dZXtI5+zcTbzINq%3Vx?sa^oH8-vb96eb6k)$k`VM?dj
z8y1_mUUalhn>5qdTxJl^gk3>;8%SOPH@B)rmFOJ)m6?PlYa$y=RX%;}KId{m<ya`&
zf~xC+0#uqMzpD#MstCV?tz>9R#2=LNwosF@OTivgMqxpRGe}5=LtAn?VVl6VWCFLD
z7l#^^H8jY~42hR)OoVF#YDW(md!g(&pJ;yMj|UBAQa}UH?ED@%ci=*(q~Opn>kE2Q
z_4Kgf|0kEA6ary41A;)^Ku(*nirvP!Y>{FZYBLXLP6QL~vRL+uMlZ?jWukMV*(dsn
zL~~KA@jU)(UeoOz^4Gkw{fJsYQ%|UA7i79qO5=DOPBcWlv%pK!A+)*F`3WJ}t9FU3
zXhC4xMV7Z%5RjDs0=&vC4WdvD?Zi5tg4@xg8-GLUI>N$N&3aS4bHrp%3_1u9wqL)i
z)XQLsI&{Hd&bQE!3m&D0vd!4D`l1$rt_{3NS?~lj#|$GN5RmvP(j3hzJOk=+0B*2v
z)Bw133RMUM%wu<VkMnpWWVN&K8^*s5oqf-N`_{oZG|c^)?fe5daI7j+I{GC?6;bAe
zUSXe$6^9Vy1KrCfsOM#a9`s`Ns00)gifk>_+$vbzOy?yk#kvR?xGsg-ipX4wKyXqd
zROKp5))>tNy$HByaEHK%$mqd>-{Yoj`oSBK;w>+eZ&TVcj^DyXjo{DDbZ>vS2cCWB
z(6&~GZ}kUdN(*2-nI!hvbnVy@z2E#F394OZD&Jb04}`Tgaj?MoY?1`{ejE2iud51%
zQ~J0sijw(hqr_Ckbj@pm$FAVASKY(D4BS0GYPkSMqSDONRaFH+O2+jL{hI<DV209S
z)XR~VgGa)M^-;}1&#S3{@xzwR6~@}^V}twZy;sZcsTJr0S5s{W-N3D9v%1<w%kip_
zCaGQ)_4?SD)S-wrJ3}!#J==&-iR8Kz)nLlnoRC&l|C1fmMV-bqBD82vt61QE6dSAF
z*iJKFHPeAzx_T}Ct>ltJSJT~e)TNDr(}=Xt7|UhcU9eoXl&QZRR<9WomW%&m)FT~j
zTgGd3-j}Uk%CRD;$@X)NNV9+RJbifYu>yr{Fk<C+0Z7wvVjq!VGjwL>O;p>_&njI>
zyBHh_72bW<C>;8}oGeY0gpHOxiV597j7mY<#?WMmkf5x~Kf<RrP*$<_TMcAZ<977s
zG-{sG-<y$aNL=Fg)E11z=zEyh@&Zlt<-N$5T)Lf&<pEj#+<|}`9f4puO~YVB6Jm!v
z!37dKVIz9-hLJpqcp?V#EU09HXG3YfV3A{zn-)630R_n7NwnfVYInEHeM$w$$$F=a
zUOHAT9sN4j{@RNZd%w-R1}Mm~Ligs&9Lc5wlF9RUjyxD1L}DW%Q=_4K^pa5dNOiqV
zfiDy5dvZ1fJ9kyK6XwwJ5_8s27to%QJf!DXz~EWpbJWE5-c5LQu!j^}nqmNv+H<%h
z5ssJ<c#g^_qKPkFd;?x87%*ynZQ!gsBex|=gx*awoyTyPQBBvZ@H#pgVq8NqXJ!Gg
zuwA`+(oi^5nIKiFlTl*U=ybY+9YY+wRG&TyaG*FVHfLWlmTb<UHm6AP5eOjK&H%@T
z4@jLl_YGv5Jmy2q={B>k*re(&tG_mX<3&2cON*2u%V29tsXUv{#-ijs2>EuNH-x3)
zPBpi+V6gI=wn}u164_j8xi-y(B?Au2o;UO=r6&)i5S3Mx*)*{_;u}~i4dh$`VgUS-
zMG6t*?DXDYX0D2Oj31MI!HF>|aG8rjrOPnxHu4wZl;!=NGjjDoBpXf?ntrwt^dqxm
zs(lE@*QB3NH)!`rH)5kks-D89g@UX&@DU9jvrs<xLUb7(M^4Zb6^^3tZR7!hc=SMz
zY6*prxO{uSb2$<j;JZB!{&!N@FRiO@L`rit7J5FDJBlZG-SI^R&~X)B26E|MJx3Zp
zy@feJ>Y)aI=9b4n<X@Mg2JK5FwM5CTI(2DlYHRLE7-h-ky&9}X`qiByDxrocwQ6k!
zk>Py3bfdX_U;#?zsan{G>DKob2LnhCJv8o}duQK)qP{7iaaf2=K`a-VNcfC582d4a
z>sBJA*%S|NEazDxXcGPW_uZ&d7xG`~JB!U>U(}acUSn=FqOA~(pn^!aMXRnqiL0;?
zebEZYouRv}-0r;Dq&<B?o>z9>s#Rt1<!G80gW3Q`9g34ikcEkn<~yB0GE=440i1w9
z%Vr=2{=&=rZq4E{&?AkG<{r866K366I$gg?dF2R5T^g;GEw`9Q*Nk^(b|;|+1mb*%
z#4u&?3d3JFi15;ot8Oc19^cux;^0|4tLG@q3aUT$?2-_vk$Lj@p(S^1tSf2`gC-^+
z=%QnjUZHg-onrhZ@o1lIHV_2Dq?*qAxhgUYKOD3{$4MNkw#KqGMg~{D*qK}6#+(MI
zLiJU8?@7)@l#?NnZ90q6`<!@a)Mc05$F6R?dVF0a42_U&5!rIVRk%it+OLoWl=%^V
zt}(_79f^HAArEdKM!qJXXY$(d|4@mB-2tz!8yh<&*Y>HL`0p4bB)A&sMyn|rE_9nh
z?NO*RrjET8D4s(-`nS{MrdYtv*kyCnJKbsftG2D#ia@;42!8xd?a3P(&Y?vCf9na<
zQ&Ni*1Qel&Xq{Z?=%f0<LS^x97`leNoS?M1&H-Xn(H4XTZqAYsYIOp+zQ7v^2WLR!
z_a_8#QR|eBZg?(rHeyy)Ce#d@UAa5k@2V9cLthMp76uClo{creD&Bgz9m%@;ZGciy
zb&;xZf|B4Crm;}`+FCG!wta2!yrIkn%Jpu&re1E<PjbmrrsBbowaz-9RpTeuXu#&D
zFm4Z8p>SRqQt5m|Myg+8T=GDc)@^};=tM>9IDr7hdvE9-M@@<0pqv45xZTeNecbL-
zWFQt4t`9>j8~X%lz}%We>Kzh_=`XO}!;4!OWH?=p*DOs#Nt({k^IvtBEL~Qafn)I^
zm*k{y7_bIs9YE}0B6%r`EIUH8US+MGY!KQA1fi-jCx9*}oz2k1nBsXp;4K<_&S<R|
z+!NEpcbfYC>N}}w<)!EylI_)v7}3&c)V;Cfuj*eJ2yc8LK=vugqTL><#65r6%#2e|
zdYzZ)9Uq7)A$ol&ynM!|RDHc_7?FlWqjW>8TIHc`jExt)f5W|;D%GC#$u!%B*S%Z0
zsj&;bIU2jrt_7%$=!h4Q29n*A^^AI8R|stsW%O@?i+pN0YOU`z;TVuPy!N#~F8Z29
zzZh1`FU(q31wa>kmw{$q=MY>XBprL<1)Py~5TW4mgY%rg$S=4C^0qr+*A^T)Q)Q-U
zGgRb9%MdE-&i#X3xW=I`%xDzAG95!RG9<s#0S@%P{4ssMj6|f(PFTtK{&eg=M$et?
zer_yKYB>)s?v_5+qx`7NdkQ)If5}BoEp~h}XoeK>kweAMxJ8tehagx~;Nr_WP?jXa
zJ&j7%Ef3w*XWf<k`Dtf*esPy5LFqg?XcIB9IkPk2PVCIR^-+n7<HvnNOxS;rSNY$k
z!q<-6euEMl;SCbnVwt5PhJlC8e8)6(eeUqB*8$mMnR$Q&;ETvMu%R;lTOg&_)?8$`
zEVa^()w5!O5o`IR%tYnnz9leJ+<2|7dp$e$)VGU<0VsrN2!{)e*i2Km_!HkTy_op@
zsnIk4PS0pBq&7e1Cq-WNe*ebQP_BP_b6V^hnOf6Jl*FDBLVJ=#%yjrBiM`Z%lGFDo
zwHH-yVfi&trZbO`$d`z6e!q^9z6z!R^x64FT@j!px;*Fv`gCn5ntcrW!_Q4ZK!=`N
zoJV-<2+l^+1!xdB0GlIyi1aL@Bfyw-3;j%CdMMseXt6XU(|7@G1YlJY;FZ<6E=3Wj
z<90D&lAbgUUnehHsAREwMtG=6$~8Hjj0}TB^$|Sk>?V*nR)|IOMrX;$*$e23m?QN`
zk>sC^GE=h6?*Cr~596s_QE@>Nnr?{EU+_^G=LZr#V&0fEXQ3IWtrM{=t^qJ62Sp=e
zrrc>bzX^6yFV!^v7;>J9>j;`qH<hDH19MMT1+`8y)sG%_MO<QWhJX7}-!&K#jas?d
zy;gZO2VIR5z1H^NXfFwADaHGprj9Kyw6No$Yqd_S(T={z#2gbNW$Y;;P#5j-{0Iqq
z{Yz6(ka&r*xSggxVdEyX?Y53QVJz#Wj2B2nNYC=~i46iAU6ds(WkjB{Reo2yZ2cFH
z1KOLbJ7d1#n3MMhVE&yyAfdi+kxdP<3vBD^E`m_9S2y(rq1mIzE*dZNSDYg|SM_8n
zmO6SnMKXq{pYHbK`f8yE_&F1K$=pH5Q;<_Q=ykx1w&1KgW?4A9Z6Hh0ujuU5gw(c)
z&7nRlgcqO=4PWSIrL^%aZQ)})*BEYH(5EdFt~HS|W2m{IuJL*etT$vJP@H=66XgN5
z8Q}8pvQ~ulll!Gl9Z+^=yi)!QQl!(y;INZ9hFT3RpTQp9WD<t=u9}FyLz|lM^T%K;
z_F;6vJrfj%Yd?0P?KC4$4d|po%oYftn%JedFIyM&26HYvVHGfC#(R&nCXS+Z{t)t^
zVSWJ}WdR7#^Eiv>DQ4uc92eVe6nO@c>H=ouLQot``E~KLNqMqJ7(G+?GWO9Ol+q$w
z!^kMv!n{vF?RqLnxVk{a_Ar;^sw0@=+~6!4&;SCh^u<XeQK8Ry4Gm-T(Vj*P>tT=I
zo&$CwvhNOjQpenw2`5*a6Gos6cs~*TD`8H9P4=#jOU_`%L<QahFX*>!W;$57NjN%4
z39(61ZC#s7^tv`_4j}wMRT9rgDo*XtZwN-L;Qc$6v8kKkhmRrxSDkUAzGPgJ?}~_t
zk<g7QLp>woGS4=6lsD`=RL|8L3O9L()N)lmEn-M15fRC{dhZ}7eYV%O-R^gsAp{q4
z!C1}_T8gy^v@SZ5R&Li5JMJy+K8iZw3LOGA0pN1~y@w7RRl#F()ii6Y5mr~Mdy@Kz
z@FT4cm^I&#Fu_9I<Lt*^+@1e0b(+y4E>X(HAFP{XLbRALqm&)>m_we>a`hfv?eE|t
z?YdDp2yAhj-~vuw^wzVDuj%w?exOcOT(ls(F*ceCe(C5HlN{lcQ;}|mRPqFDqLEzw
zR7ldY+M6xe$$qLwekmk{Z&5cME$gpC?-8)f0m$rqaS|mj9ATNJvvyCgs(f2<G?s#j
zlCyq7V=W|3+#5GMRv3jyMSve^Et#Ab=u*f=lMF{rP2hXbA~Thc4Er=Whg%hdYCNEj
z;kX^FSJSNv%HwF&_?QB}Y>{r;2E!oy$k<WRsM?7~2V-%l??892FJ&Nc|D((m<^gBU
z9InVbh@;KM5Dz*apz7ga>5{jik#(;S>do<#m0wVcU<}>)VtYmF9O0%(C>GDzPgh6X
z9OkQLMR~y7=|MtaU!LDPPY7O)L{X#SC+M|v^X2CZ?$GS>U_|aC(VA(mIvCNk+biD|
zSpj>gd(v>_Cbq>~-x^Y3o|?eHmuC?E&z>;<!5?S(?^O9r&S^X+pEvdora!<1(g^2R
zF}c9cL+{oKVWq$6?rtz|xpFbl44EDmFIBCjiJb-Y3(jwkFAqQImExJNVfoWvtZ)_T
zk4V<B4M+9tw4kQKIG^34KQl&&Fz^SMfZ1Rr!}rgT#M3;D3P+k<)V-V;IAUzgk0mWE
z!YO?vo&!phIu^NE0<F?&&>Ij`%{$Pm$hI}bl0Kd`9KD~AchY+goL1?igDxf$qxL9<
z4sW@sD)nwWr`T>e2B8MQN|p*DVTT8)3(%AZ&D|@Zh6`cJFT4G^y6`(UdPLY-&bJYJ
z*L06f2~BX9qX}u)nrpmHP<M#fk<GgBNMKYA_9QYh8<vJ<9@F-~(AqGXdLPEfJFTIn
zp64R)U5xUof+~(#vZUz{EaXw4SAp0Y;12Y-Y*XpA#>G#La#tiZ23<>`R@u8k;ueM6
znuSTY7>XEc+I-(VvL?Y>)adHo(cZ;1I7QP^q%hu#M{BEd8&mG_!EWR7ZV_&E<NEPM
zcuS4Ye{%Gqtc-n!er+G|*<cWkM>GO;d(hGGJzX|tqyYEg2-m0zLT}a{COi$9!?9yK
zGN7&yP$a|0gL`dPUt=4d^}?zrLN?HfKP0_gdRvb}1D73Hx!tXq>7{DWPV;^X{-)cm
zFa^H5oBDL3uLk<C+v0>aFDWgFF@HL6Bt+_^g~*o*t`Hgy3M?nHhWvTp^|AQDc9_H<
zg>IaSMzd7c(Sey;1SespO=8YUUArZaCc~}}tZZX80w%)fNpMExki-qB+;8xVX@dr;
z#L52S6*aM-_$P9x<jdu9ktlJz@92>FuIui;dN#qZ_MYy^C^hrY;YAMg;K`!ZpKKFc
z9feHsool)`tFSS}Su|cL0%F;h!lpR+ym|P>kE-O`3QnHbJ%gJ$dQ_HPTT~>6WNX41
zoDEUpX-g&Hh&GP3ko<AA>F4##?q*MX1K`@=W6(Gxm1=2Tb{hn8{sJyhQBoq}S>bZT
zisRz-xDBYoYxt6--g2M1yh{#<qP09xNr@s6w?MS->QWFCISux}4==r|7+fYdS$%DZ
zXVQu{yPO<)Hn=TK`E@;l!09aY{!TMbT)H-l!(l{0j=SEj@JwW0a_h-2F0MZNpyucb
zPPb+4&j?a!6Z<r#zSSW!Qu(5~6_6s0G^U8i@%ox>nPTB>$t`(XSf-}`&+#rI#`GB>
zl=$3HORwccTnA2%>$Nmz)u7j%_ywoGri1UXVNRxSf(<@vDLKKxFo;5pTI$R~a|-sQ
zd5Rfwj+$k1t0{J`qOL^q>vZUHc7a^`cKKVa{66z?wMuQAfdZBaVVv@-wamPmes$d!
z>gv^xx<0jXO<J6=m}BiiJow`eU@2UA*K~Z_jqm?*Cp?B28V2;3;6C}+*8byL=EIJc
z@2%))H|zSX{#wNl1dKR;V_`{wA-N5-aN?q$&CIR<EVd6v!|e;ZYX_h;K*-tj_Xr#R
zVD!mpcMXWrZqS|`IB=hKzaZzy6X`0CowC9wPYMg&9n}1avJ{}*L0iZ!p`>z;7HIQS
z4RBIFD?7{o^IQ=sNQ-k!ao*<ZRhqeGmf|{bY%Roxqzv&YHX(&*=PS#s1OR(zw~6*G
zAZll^YspPb$=6UL<F@2FynT_exO*?%>+V*|-^I2=UF?{d>bE9avsWbAs{sRE-y`7r
zxVAKA9amvo4T}ZAHSF-{y1GqUHlDp4DO9I3mz5h8n|}P-9nKD|$r9AS3gbF1AX=2B
zyaK3TbKYqv%~JHKQH8v+%zQ8UVEGDZY|mb>Oe3JD_Z{+Pq%HB+J1s*y6JOlk`6~H)
zKt)YMZ*RkbU!<JI!}T{8zEt+(a&daxMztju*ROn;npHenq}*@86I)b4J&uF~&?iJt
zN?o)&ELAxfueHiio3Ybyik@o*@icyb9qQo*!QuvA1&u?hUYT)4qQ$O|oMH`uQ%7^!
z_}}e+S%sZ4PL@FquF`ewt{)}v@KZ#Df*{vuY6%Mec{@2I-?T|VsMToX1VvAe%n^j)
zvdeu6s1|35v#f;_moF<I`PGAy?=_uDS;`<l<OfIk_>GPHzJltmW-=6zqO=5;S)jz{
zFSx?ryqSMxgx|Nhv3z#kFBTuTBHsViaOHs5e&vXZ@l@mVI37<+^KvTE51!pB4Tggq
zz!NlRY2ZLno0&6bA|KHPYO<dkI`ky_l{+0el>MY;;LZG&_lzuLy{@i$&B(}_*~Zk2
z>bkQ7u&Ww%CFh{aqkT{HCbPbRX&EvPRp=}WKmyHc>S_-qbwAr0<20vEoJ(!?-ucjE
zKQ+nSlRL^VnOX0h+WcjGb6WI(8;7bsMaHXDb6ynPoOXMlf9nLKre;w*#E_whR#5!!
z!^%_+X3eJVKc$fMZP;+xP$~e(CIP1R&{2m+iTQhDoC8Yl@kLM=Wily_cu>7C1wjVU
z-^~I0P06ZSNVaN~A`#cSBH2L&tk6R%dU1(u1XdAx;g+5S^Hn9-L$v@p7C<o$=Hu{J
zxrz+#TM>CF&PqV{Z?R$}4EJi36+u2JP7l(@fYfP!=e#76LGy^f>~vs0%s*x@X8`|5
zGd6JOHsQ=feES4Vo8%1P_7F5qjiIm#oRT0kO1(<jgC4I6wQ2{Xo|wjm0krd64efBC
zGt(LP9FC(njlia=(c_lTukVx-yR9~Gt`YfGKRT==f^$Uqz)t!SwGPI)kuvX+Zjvmv
zgh<^_T!LG;_|>?Z_Dk6<DV?iVez|GsZJ9q9|E_~n&^oZp@ZP#r)@50Y)8mRQBV<Zt
zDX+2G&swV0HIzU2B)jGgp<HCCR~bCFxw$OKhJS{dJFnQcxWhHg&GJ*Y)wr*`8kbb7
zRF?6Y&IrteW+;JBSq`vvJy8vQL|A_+2fW`8-8lH@zNvF93Bm{k%c!o-fCV)*0t~GU
zSfWy;Y#>oX&j=Xd8Klk(;gk3S(ZFnc^8Gc=d;8O-R9tlGyp=2I@1teAZpGWUi;}`n
zbJOS_Z2L16nVtDnPpMn{+wR9&yU9~C<-ncppPee`>@1k7hTl5Fn_3_KzQ)u{iJPp3
z)df?Xo%9ta%(dp@DhKuQj4D8=_!*ra#Ib&OXKrsYvAG%H7Kq|43WbayvsbeeimSa=
z8~{7ya9ZUAIgLLPeuNmSB&#-`Je0Lja)M$}I41KHb7dQq$wgwX+EElNxBgyyLbA2*
z=c1VJR%EPJEw(7!UE?4w@94{pI3E%(acEYd8*Wmr^R7|IM2RZ-RVXSkXy-8$!(iB*
zQA`qh2Ze!EY6}Zs7vRz&nr|L60NlIgnO3L*Yz2k2Ivfen?drnVzzu3)1V&-t5S~S?
zw#=Sdh>K@2vA25su*@>npw&7A%|Uh9T1jR$mV*H@)pU0&2#Se`7iJlOr$mp79`DKM
z5vr*XLrg7w6lc4&S{So1KGKBqcuJ!E|HVFB?vTOjQHi)g+FwJqX@Y3q(qa#6T@3{q
zhc@2T-W}XD9x4u+LCdce$*}x!Sc#+rH-sCz6j}0EE`Tk*irUq<m0`(;!&c&G7p#_P
zOJ|kT&v8z(QpAQ%C~^@e!Ck!ICE1vSkA<!Djfg-q)Xjj-!hve17Fw+LN`@{UJN)Br
zZQc5>)y^za`}^1gFnF)C!yf_l_}I<6qfbT$Gc&Eyr?!QwJR~RE4!gKVmqjbI+I^*^
z&hz^7r-dgm@Mbfc#{JTH&^6sJCZt-NTpChB^fzQ}?etydyf~+)!d%V$0faN(f`rJb
zm_YaJZ@>Fg>Ay2&bzTx3w^u-lsulc{mX4-nH*A(32O&b^EWmSu<mNHl&EF)N<Qwv@
z+ghjNCfO8{=RX6l;$%bV;UJwTS<t3aZ9alZA|`Nj-rR_)P~(S$140`CMywS0w4K@n
zvEbSGG>k{#HJk}_ULC}SB(L7`YAs>opp9o5UcnB^kVB*rmW6{s0&~_>J!_#<Q!IQA
zfO6pF51Khiw-3ES&zJ|$tcLa{0mAHdM*u;#&JjS6&2$71z|3e-)lO=LCK!MP<y1Y+
z19)^hGF`6{P@#NOEe8oq!=8hZ$>+cEWib@v-Ms`?!&=3fDot`oH9v&$f<52>{n2l*
z1FRzJ#yQbTHO}}wt0!y8Eh-0<gy=!05)T$dd<p&_-XL+(loOF(KU||XB_8&Ud`&j6
zW~wWblPi)_Dt+fy0AJi)GpeZiwq|YIuGrGcv(nscAa@~_m+trFF56NgiRrAWJI3uF
z`lhjQpmFmzF^U1!<RrqC-I>*|Um3vjX-nWH>`JN5tWB<ptoGg-$7O92<yOQsP=C)b
zJ`}#bAW@wa=e0GehF6uTNUcd|*Ba&dCiyhdjY(|NMK^uobI9q$ZChi=zU%>_gnW%;
zUJ0V?_a#+!=>ahhrbGvmvObe8=v1uI8#gNHJ#>RwxL>E^pT05Br8+$@a9aDC1~$@*
zicSQCbQcr=DCHM*?G7Hsovk|{$3oIwvymi#YoXeVfWj{Gd#XmnDgzQPRUKNAAI44y
z{1WG&rhIR4ipmvBmq$BZ*5tmPIZmhhWgq|TcuR{6lA)+vhj(cH`0;+B^72{&a7ff*
zkrIo|<cYW*47-TiTWhvB;>pd-Yxm+VVptC@QNCDk0=Re%Sz%ta7y{5Dn9(EapBS0r
zLbDKeZepar5%cAcb<^;m>1{QhMzRmRem=+0I3ERot-)gb`i|sII^A#^Gz+x>TW5A&
z3PQcpM$lDy`zb%1yf!e8&_>D02RN950KzW>GN6n@2so&Wu09x@PB=&IkIf|zZ1W}P
zAKf*&Mo5@@G=w&290aG1@3=IMCB^|G4L7*xn;r3v&HBrD4D)Zg+)f~Ls$7*P-^i#B
z4X7ac=0&58j^@2EBZCs}YPe3rqgL<Jxn$r!S8QWfkb&3miwnf<3dO#?*0r^D`z@0O
zyL}HbgfghMrA1DVzkMTz<h8XjNM2zx@b$YHrE<H$adW4nu!w{$k5e-y$OIJc^n_-#
z?T4cd%<Il(cWf@2Jy-ZR<%BHt;L>AA1L3Y}o?}$%u~)7Rk=LLFbAdSy@-Uw6lv?0K
z&P@@M`o2Rll3GoYjotf@WNNjHbe|R?IKVn*?Rzf9v9QoFMq)ODF~>L}26@z`KA82t
z43e!^z&WGqAk$Ww8j6bc3$I|;5^BHwt`?e)zf|&+l#!8uJV_Cwy-n1yS0^Q{W*a8B
zTzTYL>tt&I&9vzGQUrO?YIm6C1r>eyh|qw~-&;7s7u1achP$K3VnXd8sV8J7ZTxTh
z5+^*J5%_#X)XL2@>h(Gmv$@)fZ@ikR$v(2Rax89xscFEi!3_;ORI0dBxw)S{r50qf
zg&_a*>2Xe{s@)7OX9O!C?^6fD8tc3bQTq9}fxhbx2@QeaO9Ej+2m!u~+u%Q6?Tgz{
zjYS}bleKcVhW~1$?t*AO^p!=Xkkgwx6OTik*R3~yg^L`wUU9Dq#$Z*iW%?s6pO_f8
zJ8w#u#Eaw7=8n{zJ}C>w{enA6XYHfUf7h)!Qaev)?V=yW{b@-z`hAz;I7^|DoFChP
z1aYQnkGauh*ps6x*_S77@z1wwGmF8ky9fMbM$dr*`vsot4uvqWn)0vTRwJqH#&D%g
zL3(0dP>%Oj&vm5Re%>*4x|h<Em3JO)$O&GXE=ft3p^9G|#?0DwWLK`p_K)+<TTv{{
z-sme#4+Oqqf)?$*$pWS2gvP{&alHNwIjdG2eeVgB&W~2ncQkQT<TEB}+r+U*Sz^2(
z{JDq=6~A;9bd6M;^@ummf%1~8*<luPLU&L(KPlUFmFbIAFWF(Em5xC%IhGNzYpP8O
zT+`%G-QRPYJlIrWo{iAsK!Q9!P2vkE5P#|jye^?ECnY~D$0dPb9DZfa1?v)yz@3g&
z;g&G9%`bXU)%GaSxc!s&q+yw?s&G0kHmhpF|71o$Tvo0$rpbSM(^6^d{uv91%{b|=
z$*Kl!b^WeJ@0d+rhNnHIz4cl+;iLmd<L-)VhjV!~YbEu}d>1J2X*mK5BH1?Nx_#7(
zepgF`+n)rHXj!RiipusEq!X81;QQBXlTvLDj=Qub(ha&D=BDx3@-V*d!D9PeXUY?l
zwZ0<4=iY!sUj4G>zTS+eYX7knN-8Oynl=NdwHS*nSz_5}*5LQ@=?Yr?uj$`C1m2OR
zK`f5SD2|;=BhU#Ama<P~$VvhmI_^8ZNrt}1AvOV7X(sz*+2GbCZLT;rBdYe9QGvD6
z)XZ03krf;EL7R4cKP%`*;hM_&31edpDiHr|`}C4$VA4K?4)t-d*ee|SqdnPMHN?%7
zx3<>TKe9QaSHQ_DUj1*cUPa*JICFt1<&S3P3zsrs^yUE;tx=x^cmW!Jq!+hohv_B>
zPDMT<UQS`;VV^r@irLILT~0+N33M1<u)sr18hR(<Wra9eQt=0KCN|yzvNvA<AN<3k
zV|hxRkue$##Qs23TChJ;07NqT3L1xe)KK-*%TLpc>0D&08dC4x@cTD<NY(g*?y)&(
z$O8b2Q6sg#wt{+cv-4vv@-+5_NBvTr6Ex1qad@WizC1F1SdwV9_ihN`8RHq?sk5jC
z#WILtbwaI9L(u>$o1$x%So1Ir(G3_AVQMvQ13un~sP(cEWi$2%5q93E7t{3VJf%K?
zuwSyDke~<K40T94pahUuQl0-LemUU;AvE^<Z_y9Yyr$?J0su3Gy5f{LKemD(&L1%W
zWEvyy)Y1GLmYP8(i-d%GK_O{23yX~H+%H&Rou8u`;RWM|q&*T>7KuB2?*#DV8YzJw
z&}SCDexnUPD!%4|y~7}VzvJ4ch)WT4%sw@ItwoNt(C*RP)h?&~^g##vnhR0!HvIYx
z0td2yz9=>t3JNySl*TszmfH6`Ir;ft@RdWs3}!J88UE|gj_GMQ6$ZYphUL2~4OY7}
zB*33_bjkRf_@l;Y!7MIdb~bVe;-m78Pz|pdy=O*3kjak63UnLt!{^!!Ljg0rJD3a~
z1Q;y5Z^MF<=Hr}rd<hCKOY==|sWDSuzL8iiX7^T&s)i%HRX)g)$n}ULLiX`pwGBZP
z9gmSoR&T(}(1y>oz>yRczx+p3RxxgJE2GX&Si)14B@2t21j4hnnP#U?T3g#+{W+Zb
z5s^@>->~-}4|_*!5pIzMCEp|3+i1XKcfUxW`8|ezAh>y{WiRcjSG*asw6;Ef(k#>V
ztguN?EGkV_mGFdq!n#W)<7E}1#EZN8O$O|}qdoE|7K?F4zo1jL-v}E8v?9qz(d$&2
zMwyK&xlC9rXo_2xw7Qe0caC?o?Pc*-QAOE!+UvRuKjG+;dk|jQhDDBe?`XT7Y5lte
zqSu0t5`;>Wv%|nhj|ZiE^IqA_lZu7OWh!2Y(627zb=r7Ends}wVk7Q5o09a@ojhH7
zU0m&h*8+j4e|OqWyJ&B`V`y=>MVO;K9=hk^6EsmVAGkLT{oUtR{JqSRY{Qi{kKw1k
z6s;0SMPJOLp!som|A`*q3t0wIj-=bG8a#MC)MHcMSQU98Juv$?$CvYX)(n`P^!`5|
zv3q@@|G@6wMqh;d;m4qvdibx2Yjml}vG9mDv&!0ne02M#D`Bo}xIB0VWh8>>WtNZQ
z$&ISlJX;*ORQIO;k62qA{^6P%3!Z=Y1EbmY02{w^yB$`;%!{kur&XTGDiO2cjA)lr
zsY^XZWy^DSAaz;kZ_VG?uWnJR7qdN18$~)>(kOoybY0~QYu9||K#|$Mby{3GduV~N
zk9H7$7=RSo+?CUYF502`b76ytBy}sFak&|HIwRvB=0D|S`c#QCJ<t@a2hh9FA+>Pq
zP)uOWI)#(n&{6|C4A^G~%B~BY21aOMoz9RuuM`Ip%oBz+NoAlb7?#`E^}7xXo!4S?
zFg8I~G%!@nXi8&aJSGFcZAxQf;0m}942=i#p-&teLvE{AKm7Sl2f}Io?!IqbC|J;h
z`=5LFOnU5?^w~SV@YwNZx$k_(kLNxZ<T-w9G;`)wdHJoGV2amO-<vG?pZ@XJ#Uo$J
zb+q{_L}lvg?U~@|P1*dSegkN;ajNUGhmyA=S^CQ6@p}9uJKGF3&96BmwaXxSvK>DE
z3cf08^-rIT_>A$}B%IJBPcN^)4;90BQtiEi!gT#+EqyAUZ|}*b_}R>SGloq&6?opL
zuT_+lwQMgg6!Cso$BwUA;k-1NcrzyE>(_X$B0HocjY~=Pk~Q08+N}(|%HjO_i+*=o
z%G6C6A30Ch<0UlG;Zdj@ed!rfUY_i9mYwK8(aYuzcUzlTJ1yPz|Bb-9b33A9zRh<?
zEh+^J@0OOsX>Gl>Ny-Q<wjX~nWiOR}_^4D)POdKUaI)X<DM%#y>#JAq-+qtI@B@&w
z$;PJbyiW=!py@g2hAi0)U1v=;avka`gd@8LC4=BEbNqL&K^UAQ5%r95#x%<j2Twi<
zWI28Jof9kY(Ikv>^qRB%KLaqMnG|6xKAm}sx!Q<xJn;TKhAi-lV_zy<;)6u(yxe`r
zG8s+nu+7X=I2SJx?KI|R<|o>wo}J=2C;NROi$mfADui4)y(3wVA3k~{j^_5%H)C6K
zlYAm1eY**HZOj($)xfKIQFtIVw<YDEZ~5huBx;6h(9UoYDe-u{#QQBex`xo0d_SF-
zZ{zr8r-x@oa=@P7G8Gz%Q<2A7_lyD&aeZ-!inR%aZ-5;iEO&XuPoZbZ6OcnjG1hFD
z=btAA?MyXPGxhQ_`_b@us-{heIodKJbCj6!H57FlM3sv+z|<{D?1@zfhGGSCy3ZI2
zt4}F|%ocaJQVlIK<}Wp7+&rp6QOq<JYmAuckgc6Zxd{^=DJ9>$4&yvz9>(Crs>Gh{
zya6-FG7Dgi92#K)64=9Csj5?Zqe~_9TwSI!2quAwa1w-*uC5!}xY`?tltb0Hq740<
zsq2QelPveZ4chr$=~U3!+c&>xyfvA1`)owOqj=i4wjY=A1577Gwg&Ko7;?il9r|_*
z8P&IDV_g2D{in5OLFxsO!kx3AhO$5aKeoM|!q|VokqMlYM@HtsRuMtBY%I35#5$+G
zpp|JOeoj^U=95HLemB04Yqv{a8X<^K9G2`&ShM_6&Bi1n?o?@MXsDj9Z*A3>#XK%J
zRc*&SlFl>l)9DyRQ{*%Z+^e1XpH?0@vhpXrnPPU*d%vOhKkimm-u<I9o!2{*RVUW0
zkpjTAF;dx9>3c%Q^v3RKp9kx@A2dS?QfS=iigGr7m><)YkV=%LA5h@Uj@9=~ABPMJ
z1UE;F&;Ttg5Kc^Qy!1SuvbNEqdgu3*l`=>s5_}dUv$B%BJbMiWrrMm7OXOdi=GOmh
zZBvXXK7VqO&zojI2Om9};zCB5i|<210I{iwiGznGCx=FT89=Ef)5!lB1cZ6lbz<Vs
z!O6)(KPRgm>gDn07*he}G&w7m!;|E(L-?+<?McI~@TA!vj4RjYnCoT*FH)-pRq74Q
z67E9_umMJOIut_@Dx-Z2hEzHqy0(3L!ra}x0phZ^)OD)P*BAJetYupvu9iOfKMRY*
z59R&ZxVR$6O$s<?dV};ZTu5t!)CO9!I>cz@0<9Z<nFBx*sw*AzBdboG>I~LqYQE<f
zdA084i)nAbA%sHr3I6f)x0A6_C#f|)+7km{+VWc=8p6a>7>HnPA436}oeN2Y(VfG6
zxNZuMK3Crm^Z_AFeHc~CVRrSl0W^?+Gbteu1g8NGYa3(8f*P{(ZT>%!jtSl6WbYVv
zmE(37t0C8vJ6O-5+o*lL9XRcFbd~GSBGbGh3~R!67g&l)7n!kJlWd)~TUy<jO~Zhv
z@xvBaLkBZ#>Xus#!&G6sR%(l(h1$xyrR5j_jM1zj#giA&@(Xl26@n<9>folx!92bQ
z24h<Dc4e3SQJcr^RE3|QaY*5jX?vj3>570+<)4!$!IQ(5yOU|4_E6aN@4v0+{Kx~Z
z;q7fp%0cHziuI%!kB~w}g9@V+1wDz0wFlzX2UOvOy|&;e;t!lAR8tV2KQHgtfk8Uf
zw;rs!(4JPODERk4ckd5I2Vq|0rd@@Mwd8MID%0^fITjYIQom^q;qhP8@|eJx{?5xX
zc1@Fj*kDknlk{c-rnCloQ3hGh7OU+@e<M~mcEvZ$(y*X$K0x5}s~CQD$(YxML3psk
zFM|TBc-aWBLjK@0qr{-u^ogBxgUZ2q9fo2sjGh*5M_>fO3>fkRMcM>J?AeVP<Ux|u
zIt<28*boJGNgvZU&+HIxSJU@0MMOMk7(|dJT9}B#3C^H5%`@R9`pq2cDNIDmG&|fk
z=;qP1KP0X0%WFW{10wdnB1|TJr}_3V9m=|9t1&c+%CUUz+SxZxbB`X)efq{sF+1tq
zKf-%4B#;+_1Fv@}nSe1EebC@A=zceZ+9L=HMG!TLs$d<`aVBpK$8UGu%?r!ZUz3ID
zw2G?KI8ia%8jnZwySwx2`P0dY`Re&F893$F0%*A8SHESTm@B%nT<YZ$)QN^ti`2>&
zlfzX%cdp=N+4S#E*%^=BQ+N`A7C}|k%$|QUn0yI6S3$MS-NjO!4hm55uyju)Q6e!}
z*OVO@A#-mfC9Pha6ng((Xl^V7{d+&u+yx)_B1{~t7d5e8L^i4J>;x<7@5;+l7-Gge
zf#9diXJ$&v^rbN5V(ee%q0xBMEgS6%qZm7hNUP%G;^J44I!BmI@M*+FWz0!+s;+iQ
zU4CuI+27bvNK8v>?7PZnVxB=heJ&_ymE0nN^W#-rqB%+JXkYGDuRw>JM_LdtLkiq*
z6%%3&^BX$jnM@2bjiGc-DymKly)wVkA-pq;jSWL#7_*moZZ4I|-N}o8SK?sIv)p|c
zu~9-B%tMc=!)YMFp*SiC0>kfnH8+X5>;+FFVN{~a9YVdIg1uGkZ~kegFy{^PU(4{(
z`CbY`XmVA3esai686Yw8djCEyF7`bfB^F1)nwv+AqYLZ&Zy=eFhYT2uMd@{sP_qS4
zbJ&>PxajjZt?&c<1^!T|pLHfX=E^FJ>-l_XCZzvRV%x}@u(FtF(mS+Umw<d2c`9Rr
zR+?yr(!A0r|CD~t7GFV?aaA(6z5nz_Nm0i$V6I-ucK$u?K&%hkODCkY(1+;DS|bQF
zb4mg|54xl}b6Ewc=m`{a+NEN`d1?%=>$e+IA74e>gCdTqi;6&=euAIpxd=Y3I5xWR
zBhGoT+T`V1@91OlQ}2YO*~P4ukd*TBBdt?Plt)_ou6Y@Db`ss+Q~A-48s>?eaJYA2
zRGOa8^~Em}EFTmKIVVbMb|ob)hJJ7ITg>yHAn2i|{2ZJU!cwt9YNDT0=*WO7Bq#Xj
zg@FjEaKoolrF8%c;49|`IT&25?O$dq<?{UbIQ0;9Tr9TA6pzz%=H>8kp3#la9&6aH
z6G|{>^C(>yP7#Dr$aeFyS0Ai_$ILhL43#*mgEl(c*4?Ae;tRL&S7Vc}Szl>B`mBuI
zB9Y%xp%CZwlH!3V(`6W4-ZuETssvI&B~_O;CbULfl)X1V%(H7VSPf`_Ka9ak@8A=z
z1l|B1QKT}NLI`WVTRd;2En5u{0CRqy9PTi$ja^inu){LJ&E&6W%JJPw#&PaTxpt?k
zpC~gjN*22Q8tpGHR|tg~ye#9a8N<%odhZJnk7Oh=(PKfhYfzLAxdE36r<6<oD}e5;
zMPsE4+rk0d2jE*#p84SO^!fW~`j-|(WExf+!}WMlI2oGcLeMqZ%ofC97d<+nflE=C
zww(j#(;Qr&ut3IEyIwm>a?A;rO&ELp_Y?8Pdw(PT^Fxn!eG_|LEbSYoBrsBA|6Fgr
zt5LntyusI{Q2fdy=>ditS;}^B;I2MD4=(>7fWt0Jp~y=?VvfvzHvQhj6dyIef46J$
zl4Xu7U9v_NJV?uBBC0!kcTS0UcrV7+<p(Ba=Bk7*SXvlcpQJatnzmyl-^GA6y=0YH
zU!Qp*(5v5`qcU7GH`fZ53mR)&#Os~1d`1FKAc~R?v^F@3sPXWHk(`{v@BF<NgpL1h
zOYj$ZQX-EI8H4?Ypq8IMFE`LLGMYNju;D(Aux0jFNCc@>@~is?Fi+jrr@l3XwD|uG
zr26jUWiv>Ju48Y<K5Q0UFt#$Wh-3Y^huuiZIhuP~4SRD>^#qn7r9mwIH-<mOw=)2D
z<iCzV917q@YTEy}IJiO<?It)?BnA;jg`vU#wb|e4BpbC^HJE}Jh7S%#;t@=RHEzf3
zve@!5mXtmM3~}?iGNYp|t2UDZWtZs+?hWj`+Vz*5E0~r*FRY^QnYC-}Vte5CD38TA
z2heFf8>Pv6Y|V|V-GZ&+&gQ?S?-`&ts{@5GXPqbmyZjUACC&oVXfNwUX0}ba(v978
zp8z!v9~8Zx8qB<QXT5I&+92wF0pO{dS4(N<h_+P+tKZn8-IlF)tWr~gMeIiH-&7y0
zvL&hwU_I>@7>oFPDm^iR@+yw`79YF)w^OHB_N;&&x7c3l^3!)IY#)}x)@D(iNaOm9
zC=^*!{`7<aJO;!0Q_GA?kGJMA-q_;pS6#JcnV+|?H`ki8UM3IyaP&Y_Cob&3B{Pk)
zm4w3$nw_t--`?`O5&1RGdSO&%Hqq;;K{ebNOqKIk%%SGD!F=%uOt^n7pXHX$w+HIP
z8dL)o*Jpb{DXQ+Ru13)nl`bL_X#5zH`D&t|K|2sG@Zx^L{-A|#-X*Z;4E;wV8qs|w
zT>={3*S=%iU=KsPXh=DDZcc``Ss>057i{pdW8M@4q+Ba@Tt%OytH!4>rbIbQw^-pR
zGGYNPzw@n=PV@)b7yVbFr;glF*Qq3>F9oBN5PUXt!?2mdGcpv^o1?Thp`jP10G2Yi
z(c93td3F3SW!Le5DUwdub!aDKoVLU6g!O?Ret21l$qOC;kdd@L#M&baVu&JZGt&<6
z!VCkvgRaav6QDW2x}tUy4~Y5(B+#Ej-8vM?DM-1?J_*&PntI3E96M!`WL#<&Z5n2u
z<QPxSVI}f8nvsYEV@sQO)6fswrNtp@sU=8(-b8Mb5P$r8S==I%7kh4B)_n@!DLI2Z
z4PP(&9*0`aDCzk=7Hs;qt@l};2A|ee_lp|_XHg@k->o`P!~vBT$YOT~gU9#PB)%JZ
zcd_u<u8SkTyW@XV6qrAJ#qjS(2-MC6glNGYe|r3T`ER-;ck$QHoSn3~1RN=RR%nUZ
zKf8<#6k1k~H@+pG{73t5FQeCnhxF-1&my@?)3Sx2>=m^LYzC!pH#W`yA1!(fA;D~b
zG#73@l)NNd;n#XrKXZEfab;@kQRnOFU2Th-1m<4mJzlj9<frYer6HiQx@?8?NJ2Do
zObcl_ecl~1qF&eiOVBk0#ZN-|Dd_D_4Xx*PUVf?)>b3pv-GF$elX7ib9!uILM_$ke
zHIGB*&=5=;ynQA{y7H93%i^d)T}y@(p>8vVhJ4L)M{0Q*@D^+SPp`EW+G6E%+`Z;u
zS3goV@Dic7vc5`?!pCN4<JvL_48+Q8LQ@>4Ts@*{)zwy)9?B||AM{zKlN4T}qQRL2
zgv+{K8bv7w)#xge16;kI1fU87!W4pX)N&|cq8&i^1r`W|Hg4366r(?-ecEJ9u&Eaw
zrhyikXQB>C9d>cpPGiu=VU3Z-u4|0V_iap!_J3o+K_R5EXk@sfu~zHwwYkpncVh!R
zqNe7Cmf_|Wmeq4#(mIO&(wCK@b4(x0?W1Qtk(`$?+$uCJCGZm_%k?l32vuShgDFMa
ztc`{$8DhB9)&?~(m&EUc=LzI1=qo#zjy#2{hLT_*aj<618qQ7mD#k2ZFGou&69;=2
z1j7=Su8k}{L*h&mfs7jg^PN&9C1Z@U!p6gXk&-7xM~{X<iLOVw!aav*!V=`4l#Z}C
z96Cuv>`nqH#aGO`;Xy_zbz^rYacIq0AH%4!Oh93TzJ820%ur)8OyeS@K?sF1V(iFO
z37Nnqj1z#1{|v7=_CX`lQA|$<1gtuNMHGNJYp1D_k;WQk-b+T6VmUK(x=bWviOZ~T
z|4e%SpuaWLWD?qN2%`S*`P;BQBw(B__wTD6epvGdJ+>DBq2oV<pcqb&6wR<4FA$2v
z5~)nCP^#1#txj(+n#>lf&F*lz+#avb4<LeKI6+c0!*aYJO0uGAzkT?h&<)eF9oO@N
zFp85j%ZswAo3`tRahjKP+mG|QpZEJg2u4s0CrFBBSdJG&Nmf)%H%!ZRT+a`}C{EHW
zFUqQJ+O8kQX<pWCKhEoZ-tYH^5fsA-lA;-w;{{QY6;;y>)3P1c^Mf#olQheVvZ|Z5
z>xXfgmv!5Z^SYn+_x}K5B%G^sRwiez&z9|f!E!#oJlT2k<v)*-8Izce`)2-oo#(W-
zoudGWwGo@1CGNHF$IO1;TKoQC#d=r1zr6R{_1!X`9kp|Iknh0E@*R+w*=1K9s{o0$
zk>COV0000$L_|bHBqAarB4TD{W@grX1CUr72@caw0faEd7-K|4L_|cawbojjHdpd6
zI6~Iv5J?-Q4*&oF000000FV;^004t70Z6Qk1Xl<E0000001Beth!e-qIiLWEb%ZLV
zlu{~6UVVTb6vR4Bl(ZyCk|ase4n~5DnVFfHdC{Mq``+`wUsuh>{X9oJ{sRC2(cs?-

literal 0
HcmV?d00001

diff --git a/public/assets/images/apple/apple-touch-icon-114x114-precomposed.png b/public/assets/images/apple/apple-touch-icon-114x114-precomposed.png
new file mode 100644
index 0000000000000000000000000000000000000000..172f1b621b104c06cda714507ddb0a4ecf3f7a1c
GIT binary patch
literal 13581
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/apple/apple-touch-icon-144x144-precomposed.png b/public/assets/images/apple/apple-touch-icon-144x144-precomposed.png
new file mode 100644
index 0000000000000000000000000000000000000000..20746cf0eea8c2fe9a417838e45c7e9bb96ef4b9
GIT binary patch
literal 13580
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%0As{TT68p
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/apple/apple-touch-icon-57x57-precomposed.png b/public/assets/images/apple/apple-touch-icon-57x57-precomposed.png
new file mode 100644
index 0000000000000000000000000000000000000000..88ff2efea4db03905ea6ead55032fb9440364bbb
GIT binary patch
literal 13599
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
HVCeq>^u2Ws

literal 0
HcmV?d00001

diff --git a/public/assets/images/apple/apple-touch-icon-72x72-precomposed.png b/public/assets/images/apple/apple-touch-icon-72x72-precomposed.png
new file mode 100644
index 0000000000000000000000000000000000000000..61c017c74348d284dc4cede6f11aae21648509d9
GIT binary patch
literal 13547
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/apple/apple-touch-icon-precomposed.png b/public/assets/images/apple/apple-touch-icon-precomposed.png
new file mode 100644
index 0000000000000000000000000000000000000000..a70d9fd5d4f029b76b0df66ade327b2b90c20166
GIT binary patch
literal 13558
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
PH<4r{6vb;rje`Fd0vU1|

literal 0
HcmV?d00001

diff --git a/public/assets/images/apple/apple-touch-icon.png b/public/assets/images/apple/apple-touch-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..94e2042f181c90992caf7c88612c3d353545d454
GIT binary patch
literal 13606
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
GLH`T5gQ!se

literal 0
HcmV?d00001

diff --git a/public/assets/images/apple/splash.png b/public/assets/images/apple/splash.png
new file mode 100644
index 0000000000000000000000000000000000000000..5d3dbbded55eaa138dbc6f04a2aa585d7f47f4ac
GIT binary patch
literal 32559
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
C6yTfy

literal 0
HcmV?d00001

diff --git a/public/assets/images/apple/splash2x.png b/public/assets/images/apple/splash2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..977f37af77da695df0c13f7c22bcf5cdfa3889bd
GIT binary patch
literal 73469
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/avatars/avatar.png b/public/assets/images/avatars/avatar.png
new file mode 100644
index 0000000000000000000000000000000000000000..2a14b35d609df2c27dbe48e983af072441ddf586
GIT binary patch
literal 2016
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
S`WNW`xqRP1UOi_=_J09Ca5*~w

literal 0
HcmV?d00001

diff --git a/public/assets/images/bg-white-lock.png b/public/assets/images/bg-white-lock.png
new file mode 100644
index 0000000000000000000000000000000000000000..1b8a1f7bc0dea19ba278a66bf8cc8a688d0ff4d1
GIT binary patch
literal 137
zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%1|*NXY)uAnN?apKg7ec#$`gxH85~pclTsBt
za}(23gHjVyDhp4h+5i=4d%8G=RNQ)V){v1wfroiRlj@)B*C89U4JTaw_H^@XR-sN8
hrHLLYlX@7K8M6N{C#~uZGXQF1@O1TaS?83{1OWcnDm4HA

literal 0
HcmV?d00001

diff --git a/public/assets/images/browsers/chrome/chrome_16x16.png b/public/assets/images/browsers/chrome/chrome_16x16.png
new file mode 100644
index 0000000000000000000000000000000000000000..7f642a58661f3dedd3a1714d25655a0e16de0c04
GIT binary patch
literal 930
zcmV;T16}-yP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV000ANNkl<ZcmXxh
zOK4nW7{>AE{m%EDGc#wBOftDOO(rI3(jnLss*P#Ujd+6;#f^fBii;wOph$%jDtJL-
z5S4D~Ld1m-L{#dHDxyd+nn*FGEn=C_nlx=Dm&wdz&Yb)A3aLKphu`Ke@!tyjM?|*0
z836Q^CNtZbX*{fy9AK?EsJVr;Qe_6fR$nC)rH%5=4*=w)p*#vhwzvf7^z~9>Z%6ic
zm!Y1Lv2G)Z!Lf$ajBaHXy=wh~`K{6<4AeSE5&)*zu@SMORfB<!OvBffoyZGQGL!)l
z1~Y4L5D^C<v=@+H_s<t=l_LO_Y+DIhI53D$je66QmBty<wuT`^NR}y?HNo@1ngLj#
zh*<l6gdkSF8_&-a-P-{;^bvY7eR}AvXHOMh8eMQhx7kvtyGXS)LyqhN8H{M_9O_OP
zLL>l=LP1bLCU_0N%ks11*|w-bJ@(CmS?s;AEM=*R^yn=pyzmMxTAd&w>~C4dzTi1T
z?i^GiDGe1OcJcV^9KU1q9L?WlOXKKzF3HKO4&7Wd@aO9%acU`zwQD6TtyS@JA%ni2
zL+DR_0z^IuO#mpPEc!_j(H<s(88ZKHUz!eDJvg&rqqMRLYDfSCY;3RK^9!9A8@m<o
zegqq~CO{Y@2BZ!dngQu+Y<4Gb_DCz-O$Tdk08QcsQ1el7z5mk#1ZXV~29jj79W8Q(
zp%qawHZj+A4F{Xb`2H^+<?RXp25|$%2bX~053sO6%pwXTsuj6tq<fpT(p~nWhAA2i
zLvYo1$ZT50oxAoz*93Bn662$U2fAN{9TmWoV2%xPs)>J2pWzeq-ZO3ZB0oHp>P#Fn
z(jpXsl&5{PCe!Fo_Muc4==NtY(KU;RQs9_EZ`)QYE9yqZd+)ID?)23+Zn`Hoo?>g5
zQyf~-l4aMUU+W8q>k*#M{S8oxqd-QXlTyW1bN=MVwJ89g0~5Ci0NPo12U~|*zD%~5
zd1VV$Ca|RyKayI;(=C^&;-(PPOj_SC&YwN!-w)tQZkHkG+sPbGIJ<X{<(ccv-G{m+
zlFjB5NXYixW`sAh%TO_+Ru{$fP5t5YceP0X)$zL%1c2$Qw{rl1DYZwWJ2DJ_FTVeK
zyEoWz_~ACM{~_DK<uWb)Ht+lbVB^?}?V_~q?EC=WU+?dUJLr-CW&i*H07*qoM6N<$
Ef+;bso&W#<

literal 0
HcmV?d00001

diff --git a/public/assets/images/browsers/firefox/firefox_16x16.png b/public/assets/images/browsers/firefox/firefox_16x16.png
new file mode 100644
index 0000000000000000000000000000000000000000..efa87be78e346450f31d44940196377846dab0dc
GIT binary patch
literal 960
zcmV;x13&zUP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV000ArNkl<ZcmXxb
zS!i5U9LMqB|C~G9y_w9CWYVD{NotlR4PwQJwuz8pp?we^f(xQZ$zxTjFQN#FA}Xk$
zND)La54P%yP+U-~mVhy>BsHxKHT%pY=_Hxu&di;;>$yh}{XBf%z61c)B<S<xGwj0t
zQxbsx)QQZ#>qS1^@OUpE5#a2vu0-e;0DB>4hq`9pX8;5M(517_!%s#S06%}v>#g(G
za<60^ZBhwPEFKgRM6et|LEo*6cBvnw2HM^L(8#R4_V1&_M`PH3?(E^~!K34!?W|AK
ztJQn^(=)O?8S>YyF&ShoO18_qk`YfdiZ2d`#Z&H&pPtcyFU6BDF}j#tLgd*KFErJT
zx3<$gUbMrYp58q+S^I!WN;hJ%iiYJPQmDv`=lO3wp|Li7mWtQTKLp?ce{N_Fe9L(}
z)zTd459LH}`;Jm9hN-#kBkpZt)k;A%nh4o0m9}-(+ZhvMV+K<@m-i)l!&9s+S5CJ^
z<%9r7O=wElj3R2+@U(ITgH{7tp^9+60GZo_FbtggdYTL47FwcoNHM-oF}s3M$3Um=
zO38gevgV^L>ERtQimBW%wDK0*ViD%<7Od@M+}YDXwyjI6Hk_LOBsrlpbR=K{0S4(>
zMD-09Z(lu%pM4d+zk&^i5O#MFK^^t&Dh4ujsHuX#I2-2+_1n4?%Y;WZLE#dPE1`ve
z`w|5#Wb;TTY>XVJ;L>6Ot7~-xJqs=R5>Tm7)OB!VP+L+Q8`Hu<ofD#AO-hPz8V_&a
z$j~MfDX?5ta07jq*EQVLSH$r<_N1OQStO^FGdcGs<zOFQnY--$4nfB_mwtdGH-v&8
z)>M467R41K1|9<9RKlZo>tHoc?);%qc8=!&WR-<og6H5p!;!}rC$vZ@BdVka`b>lp
z3<D(#9T9<(gBEU23lx71`fE9b-CU>N0D!(79%KM~-Sa+djquaa7`%uIriLZ8s6O!^
zKmn2>NYb_8TQyQjx|~+I^B{m4KQj`QZP5@NpS^kcpc3g<g)+o^f+rZ64#6}TtR|6F
zWpd>f<5#oR#m8n=9{G4#uXs*?_&>q<)iP<E<Ev6>re=w~kjL6B6RK%KsWzo3*8O@;
z7y0k<))()t<X`Ph26j&$Nc*ipMbgWMGWg&9fjB$4@Fxk0jyQPNVO2}jh40<4&7ujh
i37{aS9tHr3|NIT9Ex?u-Mm4Yi0000<MNUMnLSTYwO~CR1

literal 0
HcmV?d00001

diff --git a/public/assets/images/browsers/internet-explorer/internet-explorer_16x16.png b/public/assets/images/browsers/internet-explorer/internet-explorer_16x16.png
new file mode 100644
index 0000000000000000000000000000000000000000..92c6edada5160faf274c2786d65eeb24cb6ef215
GIT binary patch
literal 914
zcmV;D18w|?P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV000A7Nkl<Zc-n<i
zX-rgC6n>SZF-GklLog<is2D6FE>xovQ)7usq^(tPsX@oM)a?&Z!BUCK2uv(6AVqCm
zq6Uq`s7UJu!;--f5Ew;*EHjMohE3nhdqbId^Jd<?pS))^T}*nClXLGm-*?W*x#uz;
zliW@&s2TX=-+qb9oGv~4I*~rntRQC1=#P^17RM;XhAq;DXm0e+-e(?4a1UhfMe7O^
zsf}$$?X>f<Def|<nx*>>`5K^-Q_QwaC%b)ZH#r9e?dcHfm(cR&TqM`GwMSpz7AP2B
zMeH}!7!~t@Z2zm}<1YqIpA{%td<_(x31AyH;fnAI*%Ty$CuFz9h51G7ZaiS73|D+H
zRV5ej2vTfnz2m?cp2F^V;K#ECsH@uPO1Ha<(t86}PV>Xga{-EzoJ`i&@YwuY(Povr
z@@lJEd3t(TxX$L`tiz80OB_t)dpc*9AmV+8t1s70F}S>Jfk?5x%?nL2Yf=Nr)m>`!
z#5=6kJXj69m@CyZ>7ac|)+_#_&pU#0Ij@RId)}K|C=#SOq(J;1gZ}Wenz>9z-*q)u
z*Ijl|?pTAC+MRNqA27H)Rs-jGnd=l^8l2*Y^|t2mV)w5yaN><jR+c#tajJQX+Jy*9
zBnI}eJ(XV}v!ADD3246CH)Ieb!QfVvA33}8Mr@8t>_2S#voHQ`pAeB{`Cd%`fBpff
zVIh7hdq`4WgA{rs>@v15S7PBwm&S)K%O5*tnL%Bg;PDgGr=F0Y4-Wgz5W@5VpTV)Z
zq`h=;%e*_@*N3`1PzII33dL&jzis3RE0?Y78LHk^%Ngfi>MUY{lR_C8RS|OILMuv`
z_{ry;IZ00iWH|#;p^qSo74D}r^sG&7WH;y?ZsRXr0v#s@);$&wbFTfknw9W}V~HuY
z4Ua~LGc$xSOK&?YKeUR_^F%)52b8I+DnZ!+S=%%O&GoKZBh+`D5n2#NO>wrsy=h-6
z_bs}NNr`t`O1C!&G{r9B*nl5L`~CEw&5NydF5l8(o1U3?C{)2l9w~p9gg#lkh8kzy
zkjp>c5imt+@FNp4JEt+~+tRN68!LLVHy9oIRky9$XkFDL1t0%=->B%H>;L&%Y2}<x
osd2_Q=6_^e<zP@$ruhT;EogBFK4mEX6951J07*qoM6N<$f<Pm&DF6Tf

literal 0
HcmV?d00001

diff --git a/public/assets/images/browsers/safari/safari_16x16.png b/public/assets/images/browsers/safari/safari_16x16.png
new file mode 100644
index 0000000000000000000000000000000000000000..53b9aafdef5b1d2da0648bfe5a8c11a7a47aaf06
GIT binary patch
literal 925
zcmV;O17iG%P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV000AINkl<ZcmXZS
zTZoip9LMqR^UV9sI48%$n7U@UClyA`1L{>#T2dliR97vll?ClprC>zVT`6H%61b5j
zqGhRJP!PLDDPCAxta)B(R$FS1&bSA6cHYDDKL1wf51&83i?8DU8!8Peqoydp&YclW
z6{f5Wt!@BtwJj<tzX4-?Wmh}43Sa@$;82-F+$cbDxk_?$yk>hxuiH`_r{<0o1juQq
z&(OEJCTN|Oy}BEyj*ZnQKvdul-WzV*o7>qv>-&?J+*QSK5zmDvrUbyTqSB$IHlx+1
zhop1Of}Tx4f8b{ozSob)iA2Y>k#o)aeObT18mu`Q+C?X<)O{yXKdErs$g*Q%*L^V&
zy!P=wa_;)ruOeS1CZX=Wf!;^neD73t*ZDgV4rLtoc1okO3hfFCVNj)5IWWMMANF#x
z_SvwobgBFH!vk*tyBvs;ZC$){X~^exS~&v}p%Q>Ac<DF+idQbT^X|cS*t+Bex)&~U
zV!flZ7u^>(Klaln4yD41D`nF-7Qs-cRhSjff)`WF9qi%L&NiO;W*;qujkIrQW=>y8
zjfm!IIclW5Y^75ijB3l(P<aMhjnI(@VGuGek>s?~Ps5?T?3vv_YtuH|N{Na%c#*ZY
zeWP!dq)z*O6>CBwW3ZvYcphrf!3UG17cQXniKp4w{01nnesHh5*G>uoU-WEuxI2rn
zj)}Az7-Tr$!@>+2`n%Y1>UXxUd!AeQ`RL(sBH!Zp5qI0E%Gf#XNVm=}Z8=|;s$NSQ
zOKif}ruqzvZ(ZiewwoM@?#CMgJrY6%7!{@)W0Rp!pYpnLi???wkpgE<?R@>Sjs<)E
z4xDgRzS})ev{Yy2i6snzMkJ1S31*7JtZFP=n-}-x)jivQJ?iYwKeGDtQ_itMd)vv2
z)7Ev|ib69z6{`?vUjbSZ#~~-!jPFE^Y3(*G@BL+C*W()iqrN`yz5-;vb0L34Hy=OS
zGw;#MWi8_hWt9jhVknhC%aWOqT3_3DrZGDD98l_umMC@N&<BX10Eu1Pk%(4){_0;7
z547}n$%av*V<^Zu64fTXVq^N>R`bW!eSq&Q->m>q-yZ%502805Ry5wH0DI%e=2W<-
zX}K4#sY5~1@4w+*|ME{@qJGO^eW6$q;4c0HyD`5e#us2!00000NkvXXu0mjfPkF%;

literal 0
HcmV?d00001

diff --git a/public/assets/images/clarotech_original.jpg b/public/assets/images/clarotech_original.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0aad599f463948de918f374787ed7de5b96033ca
GIT binary patch
literal 75977
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
UkTd+>phqA4iTN-0OL}YgFB|mIYybcN

literal 0
HcmV?d00001

diff --git a/public/assets/images/flags/en_EN.png b/public/assets/images/flags/en_EN.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff701e19f6d2c0658fb23b1d94124cba4ce60851
GIT binary patch
literal 599
zcmV-d0;v6oP)<h;3K|Lk000e1NJLTq000mG000XJ0ssI2`GA^k0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz`AI}URCwBAoHTQvnvLG!L$_YOVPIhR
z`}g19iWuE1ZBzdL{i|D>U(k2*|8J(R-+sudaynhucHbwAMTnor{mwqO^w7JHzaBsT
z{O^B8RYf5+LvDs&KmRKVd78=o{`1#HTiEo_OolaGleS)G+IQ#sUI`b*<ttPkoQ(BX
zdH(z-BO?RD#k&lb?f@B&-u_Q#y`y({1!HORg0(k0n@%tR-SPDK`}#L}kNztCZEmQ{
z)B=hyeE-bw{X3BEzCWGY&E{rcl9ShpD>pv<`1zCJ=H0jd{{2S>p`ri%{LsXJ%FbMS
z$#S`6f|?OG!^Jxczkf6Q`UNF{l0Sd`ad7zm>({^EzyAS6{{CgrkluOb3l1A>ZU2~A
zK+FZ=zkmP!`TOVhpFbzBzF<mgJlZ$!LUj7htJgj-ynFjAB?0L4|6jiYZ2)<O;r}yd
zr$cjg$jHr$OxbL1*Ua?e#~*QFwxu)O<=6CooI5XBFdeAs-_M^w$1wc=Z|$&LWbZyx
z#upb{59yi8GyMC*6cei&?XU5pqw<n{Y~wd`A)deg|1&UZN;7Io039Q%E))~L=CG!%
z=$tv3r|Yv5ZCRebeml)AZM~}fxupkx|M~vs@885Q)osT={QvXE{ra1g8}~B&`@4GU
lArU#j%I>aPmD2$N3;+$pK?>zdet`f0002ovPDHLkV1gy;I?Vt8

literal 0
HcmV?d00001

diff --git a/public/assets/images/flags/it.png b/public/assets/images/flags/it.png
new file mode 100644
index 0000000000000000000000000000000000000000..89692f74f051cd43503744c3dab65c8ba773b7e2
GIT binary patch
literal 420
zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!2~3KHq6QcQY`6?zK#qG>ra@ocD)4hB}-f*
zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrIztFq(O~IEGZ*N=lh=;=qSyMwWku
z27eMOW_|f0uQeek^e_9g7KH|eq{JVG0^UaP2Jy4}|L^JL_3uCblfVD@mnS9t`~UCn
z|MT(+KT|KOfz%~1cG~~^_2vEk{SFNQ?Cjg~|NsBWy<%2im{<n01H(p!wT!cPLjJOM
z{QKt?&dcI(HG!9Be?7A)1B<|kKl^#=|1+%p!|wFokZ}^*f+V1Mj8!5T-++ew|D(Eu
zQRDmp1_1{J-ui=S|9^ewUcuha=C)xn15*d*iih9--{1eQDdhjZ-`u;|Hhgpl|DTw^
zz@e~VvV&K>vp^YdeS=hk-Cyo6U`Hgs{l4FR(w#{P`G0<L_c^h-xw)}f1Ozc@vMMhC
znKyCal*Wg`8hwr*|299&xf;3P>;a3G2@YSmzI~fu(Z<lgz|5c*R^AeLsAxVgm>E1>
L{an^LB{Ts58L6#6

literal 0
HcmV?d00001

diff --git a/public/assets/images/flags/us.png b/public/assets/images/flags/us.png
new file mode 100644
index 0000000000000000000000000000000000000000..10f451fe85c41c6c9a06d543a57114ae2f87ecc1
GIT binary patch
literal 609
zcmV-n0-pVeP)<h;3K|Lk000e1NJLTq000mG000XJ0ssI2`GA^k00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz^GQTORCwBA
zOin+-00;m6G5q_(!0?NK;Xja^CBNtYx36zrzX0<8fe}y+AOOR1ZUO)Z1VGUKD=-j5
zV;e9~EK2V8xn<G~KHPiiGJR5}scIU=OtG5?dqju`4q&&IzW`zcYOs&ASbpf=-+v51
z^y|<6zyCpuAAkOzWvFI&_krQlM}{w-8NPjEjPks3<_JIl0d3e1G#F@-eci9GU%y&a
z{(S%by?*fzmXaTzK7IP|;lsOk@7}z5^Y?G`moJ}Ao;(N;Kr9UZn1POWZ)W`W@4ssc
z%b(v24lSHl8GioxdYUV43eaGNFJJ!u`0?-8FV3W{KUdEI1Q0`V@(!T8ZL5BM{P@wV
z<mc<xubB&<K7Ra|!G9~n>{qW|y?pud`Sa)3|NY&vWd%S0u>b>P!2!lUe;6EF*#G_c
zFVXVt@6Q{uX@40W{p0iY2Aa+A^Cu7i8KT+YH}2j52q4BskM2rJ$^k9;2Xxc_|Np=M
z&VaLlA*IO5FlECMfB<5VUNC{tBZO(|zW*;@GJN;|bTJ71`0*d;`d`2P!x=ymOA`2>
z+y@9C##^^8%gd{MW@Y91_2d742B2~OQNf=-zkmD?Vqkdk_wPTUNeuu2#KPTG{_;O4
v7C%8E5*DLB7#Kb?Fnj}}-(W6879hX?8lYRg`Y`<~00000NkvXXu0mjfD6Jtx

literal 0
HcmV?d00001

diff --git a/public/assets/images/icon-color-close.png b/public/assets/images/icon-color-close.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b7dfacce6f9320a2a288775463ea299eaf60e75
GIT binary patch
literal 1031
zcmaJ=PiWIn91f^sjMd2mryk^yoy0Z&);4Qgoo&;(I6FpHSYaZ|lGinK$&1O`nob0_
ziA+3<Q9O81MD!vu5JV6WJ&3a7K!(hVmmvr;@Z>?5FJ0Stum)b<AHMJVeZSxPz1yQB
z7Xoc3+bD_(C_{3F%pLw{Z6W`&n|Cjg=>$&Y@EFSDlIlPzuA?ak6jPms8K~;ztLw0z
zq7DEfo5Q*EB}qdjqxu-eGi}1AsQv-ZR<$C;U<ytfR*c?x{gwuX9;3&@X)bLiVZj)h
zci`CkNLHIKYEhjYI0yPYi3pewtH3j7ELZYkbX8X(YyX&~K^20FF?!EbE<Fm8$blft
za6yfWa3I1nd~Zk;#U3DVJjZeZ%L_qXlzIh;<3R1BNi;{#OBs2v7K`j+bOB>qV%buu
z#FTm&<V>@CG#d3a1R+QeLAPvS)eBl~cU?h-uI3mvHjo8;MRf|z;uuYw?xkSb4Oz>r
zm5CIL^;DbX8O~3s4os*24>ipO+Qk{T@Asd=ZnkVgHUnKW>uBWS^4)$YTS_`m#mLDb
zG*hqQXaQm57LW~+V_`6ESUM`XRdhNnDVB>>OM{9WqY0le3|-=qq8N(z@?tU);`x-&
zC-n6t6RDKIi{X%%NYuG9(q>I);W}5}=L$`^ej}JRi7Z3Mn1lMDgG^9OSTdS=5eA#;
z)wp_dFI-bDOU$tTwf=R@^&`?d{<6`uWYcJSXpvrbNK=1aoZKQ0;<_Tov)<O@vH0P4
zpmiy~ySvua89916`(F8=D8my=&z>gauI=GTdA;*Y$J~0mcmGlGLHlv~XQkZosfAr$
zTRF5G_!T{}@TRS2j#;QY`B7<|*uL^yzA^Ob^vmBL?_GOno!VH1mDO*t^Dn4);Lgp1
f8-cF_Z@(X#q^MiLFFTtnOa9YTQX}$OVsh~h$B|0z

literal 0
HcmV?d00001

diff --git a/public/assets/images/icon-color.png b/public/assets/images/icon-color.png
new file mode 100644
index 0000000000000000000000000000000000000000..b9666ee98e52467a3cec1a187bbd1163cb5e3cea
GIT binary patch
literal 1240
zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`Gjk|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*9U+m=!WZB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+*
zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn
zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV
z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj
z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA<wUD9OyvQvjKmn3P{y
zVygsnDZ~r81#n~YilM;-3^4tQ!~%UoJp+)JU<!SG@hi>Eg{v+u2}(t{7puX=A(aKG
z`a!A1`K3k4z=%sz23b{L<y@4SSdw29lAoUg3&ntp{F40QjQj!x=U`KX@XWlF{PJS3
zYF}R~&%EN2#JuEGPZwJypnko~%oHmV6H8ZPBNJzHXEPH+LsugUBWF_=OG^_cM{_e%
za}#HnUYGpj(%jU%5}4i;gkBe%dO-;xw*Y9fOKMSOS!#+~QGTuh*uz$txZUE2(>$o&
z6x?oc!l_pu=oo!av?4__ObD2EKuma|1#;lYJ~a=R){B6NdRf(^-3$zjex5FlAr-fh
z{`~)M&peSKR#Dk-mIQk@tCPbYG2b5Xj{O2<Vi%Z9c$gKoF$$b#e3bv+@Sw1Q9#c}C
z!Zf$b$9atT@3OnJi!YpTP}Jpyjs^3P=!PE*0`YBKFPSzn3;br-$Z5y@fmM*>3`3Hx
zPF6w$_bN6?4#m}u*A=*q)KB1femL2J=kvnIMcwC{+*T~Q%o5XgR(<)xD)k4O7@qt(
zAK>~`MS}0}*MPnG3u}@UrX~OAm%TALvC-D7S>k{4`OHHOfBKFr>C`ngx^Ra{O{S~#
z<cXMwuLh3BtQ@-)JFO=qGWwh^R}gES-7VsI=7NYrrqSF^eR&_}(?_4AnCRAs1uS0S
z5a|E;5MLUjw7~yGu7$mCV$HTFJYr0e&e*f(=)}k8nF~ckl*277nmdGNoe639!8d7#
zhQR(ssdLZpACc#XIKZ>?|D<F_kI(W&H4Fj?4C?P=UaVBe*94U{p00i_>zopr0LK2G
AJpcdz

literal 0
HcmV?d00001

diff --git a/public/assets/images/icons/facebook.png b/public/assets/images/icons/facebook.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a04a89c803fda829681019d73a6e383055b36d8
GIT binary patch
literal 8825
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/icons/github.png b/public/assets/images/icons/github.png
new file mode 100644
index 0000000000000000000000000000000000000000..15e02097f773e5664ccf912fde46dc01c363ae80
GIT binary patch
literal 10410
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
Uy$iVBSO5S307*qoM6N<$f^Axk*#H0l

literal 0
HcmV?d00001

diff --git a/public/assets/images/icons/google.png b/public/assets/images/icons/google.png
new file mode 100644
index 0000000000000000000000000000000000000000..401000a126a638e8c744e03bc4a236a7315a8064
GIT binary patch
literal 7968
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
Rzwb6cLsdtmLCH4e{{Us-_&@*v

literal 0
HcmV?d00001

diff --git a/public/assets/images/icons/twitter.png b/public/assets/images/icons/twitter.png
new file mode 100644
index 0000000000000000000000000000000000000000..6403a67e843fc2fc0c56be6420b8647b6673ff46
GIT binary patch
literal 8340
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/loaders/loader.gif b/public/assets/images/loaders/loader.gif
new file mode 100644
index 0000000000000000000000000000000000000000..72a9b359720cda3df4aec673cb9dd0db9ab6d2dc
GIT binary patch
literal 9315
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
Y;f!LAB7(Fg&|-|JC=aX!qtVR&0s6pG?EnA(

literal 0
HcmV?d00001

diff --git a/public/assets/images/loading-spinner-blue.gif b/public/assets/images/loading-spinner-blue.gif
new file mode 100644
index 0000000000000000000000000000000000000000..c8c451e6d4b80fe87e7da2a185951edc615b9f49
GIT binary patch
literal 5200
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
Km=r$rEcq96+U$$~

literal 0
HcmV?d00001

diff --git a/public/assets/images/loading-spinner-grey.gif b/public/assets/images/loading-spinner-grey.gif
new file mode 100644
index 0000000000000000000000000000000000000000..6d614d3da4cc1fe2e7d7327e07319dfc61b1c98d
GIT binary patch
literal 5203
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
JkD$&~{{w+$R_p)(

literal 0
HcmV?d00001

diff --git a/public/assets/images/loading.gif b/public/assets/images/loading.gif
new file mode 100644
index 0000000000000000000000000000000000000000..29bbff008e5b09c6282abb797f7044b62608b5a7
GIT binary patch
literal 2906
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
LWgH$$$#~^|IWJQ1

literal 0
HcmV?d00001

diff --git a/public/assets/images/logo-big.png b/public/assets/images/logo-big.png
new file mode 100644
index 0000000000000000000000000000000000000000..5bc02db2aaf98962d048f498e1fb4be441779370
GIT binary patch
literal 9967
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/logo.png b/public/assets/images/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..ac77af9e5a4cb92828839de4c08c7d924723a6f6
GIT binary patch
literal 2754
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/mCSB_buttons.png b/public/assets/images/mCSB_buttons.png
new file mode 100644
index 0000000000000000000000000000000000000000..985a9b8b5aba0e87e15b81c027f199d0d097cfd5
GIT binary patch
literal 2998
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
KSQU(@ZT|(at>>)(

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/account.png b/public/assets/images/media/account.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ac017dbcaec9f30f06adc02d2796bb22f774392
GIT binary patch
literal 20593
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
Q0fC>Rtt<PMjsMAi0@I<{sQ>@~

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/automation.png b/public/assets/images/media/automation.png
new file mode 100644
index 0000000000000000000000000000000000000000..b2a18ef08efdf5cf82952db3c76a26264f890161
GIT binary patch
literal 16093
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/channels/chat64.png b/public/assets/images/media/channels/chat64.png
new file mode 100644
index 0000000000000000000000000000000000000000..57ade0e260837433dd2d8cb5c1b375fa9ed424b7
GIT binary patch
literal 1312
zcmV+*1>gFKP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF000E%Nkl<ZcwX(B
zjgbvO5Xbu>Km>@uT?B{#5pWS80z`la5CJ0KB0vO)01;5XS39rf_0DY1=kC6BUA3id
z&6}D2_viHVo=AT>6_MK_a#cj`49oG3zkT{GB439WpGAbfFT8hMc6!ob)*B*nPekr}
z4A(9LARk2Jqlo;doy`AzO8_2<$fJf#$M^({w<7Yc1rW6WpvI3y<VirKTkLOY4ou{g
zh`b)mrD(kx0AT!i0^>giJI20w*f>%Q5k3M?@e%I1Zg9qY2%tzKN&sMEZ-x!V_J;Gq
zW_fCD7N3GY!MtuwfC0GYxlS_|fM<i$L;LtM*d}UO%XExSz(Cr7aV0Vct$dMc52*m4
zmPj2*Xo7K==0P3jAoc?gJRu;^JhZ{wPYM7m_9>$Bge9b5F4PGX_C`b?>}tX!?pk}Z
z0EjV<)X|2RGwZ}}bXuGzQrFsGf-nUD%zqIP?9QieL#$s)>M<19F9OkyauS3X05QoE
zYEbz#6DC1Y=2H}e7yvjt&FC>O@0bpOz&jk{0fhj-w%@C9IJ-~;ShFVJ6SQ-DF!+l7
zzBK@-{&$t#t<~l&@IyWUzjf1(3>pBfI(U0LtUIP!i>~ee$y#xYesnl6Wgh^%J<|8-
z>5$;8jj^2lkSx7aKR^q1*{TnKmOh6V9RhO}Uej2Z^$%5hEpPyYq)!&LmPDr(Ow5>U
z)~9Ru0tbLrlPyW#F|D;=XWk9~GCmxJBjP0{u_Yp}A-{2iV?P6ckoxb`V@uo*q5YS3
zh5(?Ep_t*Sw<#Df7G&pkn5Z<Gn&YRCx_?$U2LK8P6gnJHOyFHA5jy8)-nVN)S}Kir
z1ppAFZtrN6E*i6ADzWNJ>c&dP<vMGf=3fASc7SJ@nI9&A!?cQ*rA)?t2lJS3jtS^+
zxC7v?TEQxkv}R=P`40HK1mIEw#wM`E9KbiTkqPK1u%$DA_AfyvSQ`fCc49T_1;e0D
z4!CUOaI{4VCPE`rGE?DW0%~;V>v0(Bbv7u;{e9t3BMcsf7^DvgHKnkgX9GaU$^Cr*
z^r4Sp?`f<cvO6mm>UPhwL2mBvv!DfYP!I{#1WJn{z0L+DxxWLzEQv8t7e#B-tx$Qo
z{Y*=LR1{_9|Gq39(gNP)9*?_;v0!5AoK%DTp2X<I2=g-#)%Ob=<{f*%#^(4*=!Tn{
zE;M~#?@YZMt%(YAFdJHf3toMpYhI4JiIT6Em*UP?H~D&hs`{goBi2lAK3Wi%5cAO+
zZmUHmyX9m-#$#PAlh^xJ{V&#cgA*Z9LL=5dBs$o<?m#zt8!P}^WC&@3GYK5aQZ&`S
zXfn^HQvh%v&<LrUk8<W{36j;Mo!q~e3V_>usM#QQjv63{;WTM;veWAB=FPg<D%t$p
z_XzF-44C$Bur-jVJY%xjdFB8B2gThZeuONOhm1^b6p3<isoUkPdq?I%GmEbCdji15
z>CNfYUe}~ayB2`hRXP&y^%V(gBJCoHYrAO;K(BfrUfq2-)%070RsdM)j)Nj;@;{r?
zSL(iBaG%ZbZ<bTb4KXbM;Jh7EcbK9UPY$t4ss&(*DGCn&v+7=>9sr>3FrL%6u$XqV
z1Yq^*9zwYl0C;Jn-qb_Sp%%3O)YR(d;Llv66abfn<+Rh8n^|H&2>`_Nqg3}0!2bX$
WFEC6?rR&E40000<MNUMnLSTa9l3aEG

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/channels/mail64.png b/public/assets/images/media/channels/mail64.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d5b3e8ffec8faa9095c35273fb0dca6896b7b58
GIT binary patch
literal 1481
zcmV;)1vdJLP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF000G$Nkl<ZcwX(B
zft5`$5Qb+fKn17(6`%rCfC{V%Pys4nD?kOP02QDDRKWS($-Fb0z4vC4O!Dj@=j?gs
zy_=iN{PWLDGRYpvKi-ZGtpD>g|Kmf+aVP+;h{ziext<jNEF$+r<lAf@4gtVj5qTvd
z7c*slipWC|c{>w?*#JQK<AQ=OL}Z#v%mN^%e96eT1Z?1QXqy4R0};XUIps@=;Sw<6
zb*W>|^N|3cFp2{}PXhpe0FdxD3IL)zfli}*ui(R6VgvxKlrMoa#3dpDh@yN6h)|b^
z0w9|5B@n_~A_9O>lrMo0;u1Xov{L?EN^L0c!Dz`^0Vc6hykFAZJnwReRsdQk|58Mr
zI@1|opx8|(5X~;p0zfV0e<iD`wQnU0^NFI`lo0@>eF4GCh9;M&0ic!gx06D=&khj9
zOAW<Y3ey0?%LMvYxr7&h7Rn>cvqXC={oYvoW7_pWU7q0@Y=zbGu#EnI!1J#q#IomZ
zm+$~kOL>(A>LWbVL>aX_O6BW&*a652z^C+G*;C5`WN^8}761sva+avv(oWJo000?>
zW|e=G#>QGO#jf>#r~bqPw$Cu+NsACAmskS;Yv8XoNY&1NBW-6XaNH3QXs;}=pfE0*
z9qIry`oI{PzLWQ_l?C^r;&f(vy#xT3QDJH)vi)^zwWiXUK0mVUu?5FkTYtBp^vDF8
zVAZ}^0D38J$NiqzV+Gf_mXu*}q^_onVY~<z$N^(~Tyf`eDpUmJ?L@id6cG9>`LlHa
zBEGs_?nXV<x9{#<0sx{YzXiY=#r2)5DGkCx+=Hg9u)jqCpyM0^fchwD>q6iRjIB8w
zx?M_R=K)P=ZUf+#6byN<W;N&)f3K?rfFOl`wx*kWa<wXv_nL^<AV`qK?RaLZ!~jMt
zKxvfkjs8o3kaAg9>@rOb01prh0T8;U=_*i_Kv_V@YkMfYbRdEuh!;@}Rv`;=>;v%<
z08EJAF*)&}wV@O&plM`BdB#Nu=D^wr1q(DsV*tJb3{=&Wj4ZX4WtClxq2G%D*p9H_
zaw7^lF@gg^&87zB5forrU4iVwySDCNW6h!q<hu5<!7hKXIM&?)0-*sN%flELfxp&T
zf2;oBW`G5Qms;5X?GZ@*UpGJciM!Z8owsEpwr2HQm(?J+#r7UHpdfC*CTZ))i#cEj
zO!3qXti0Z;QxgNC*uXe2K|#<AK+sc0)P@|7)k7Fy2kBu$t%6(qy;ctgASzR|f>CSr
zVE{y}8)|@PvHDN|X0f5i>Qew1$%bC5PXnNa4Xn>;Tl<bEt4{}@#0I+!X4SW}?})Ve
zK>*N6S=8vAK-T!I@bcSWx((Kvgsl?Q1V~Tc?uC$N676F*GImS4G)BG^UphmmnR~78
z6aez0G?u_Hp>)@W_izb46RbMwa-uUFfcz+}h0fM(qHmH81;E|}wR?J}aZYv9<1*qx
z<W16H0N9(LRDuDcMEMdhc`+s8CTTbT`O$Y?f+{KLd2Y`WsPJ&q)e3GX0JdVYmf}1L
zdivN@iSiU#TdvcF0bmbRNO1@_`pP?X1J)3_dOUO9=RmR>fczZMo8la@xw`bG$}RwG
zii7f4VCaSB4M<pI5fsT1?pq<AbAh!vZIO~q3Y2g0L6@1GoiGS4LFwLgE2I?wo8maQ
z1dP@w?9|QO4VQq0T*RQ2Qe~A3FgPV-z4<*N#kn;tbhN2*?I?~R+yKy#t1^I)-}j3W
zI(i&r#wB$1$a<maWXK*)&Ps7nV3bnjCIj*mXA2im0?r!87Fz7pm{kA>YI-~D&?zno
zB%3PrYK+FUQ-`BOQPLU@ONEOl;bx6v3oRHKHthbF$=(l8Vg9xh7X?zDDtF^90T4Ce
jxftg^0O!I?1BLtpR;$gKdSYf500000NkvXXu0mjf;ZCUo

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/channels/screen_monitor_64.png b/public/assets/images/media/channels/screen_monitor_64.png
new file mode 100644
index 0000000000000000000000000000000000000000..fa703a9a837c1ec5f2ed89fa13a2dd7f0e39b4cf
GIT binary patch
literal 430
zcmV;f0a5;mP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF0004XNkl<ZcwX(B
z(M<zE3`AclfD)hrpaZA?sDM%+6%i_c4uA>>6+j0;7I!F@>~ZMC&#vD}`QI6jXKkOe
zAo*D&$BzW4faDCA0?7rS37P^EDR2p#0_T;c$`kMcJdE9cOaVv0eFwf$?1O6u3D>}S
z7fgwOL*N+*5?VR|{tWos22~>94!CUz`4*NX5cqyhiGa5Tqu&D#6&z0yuqj0UbyqqS
zC?rz(q;Stc&`Sy^5pV&7qt<ld<$9EWeFjv(91k!B^Z-rJSHNemrXry0V66izge-*i
z7_btw5}cR^*bNq((_X+{z+S*!z+S*!pe_a+iaHf`Ebey!2O<tc9EkkSK%}k;;P>0k
zng~fiLky^ZIWxhA1Tb6<?d5ROeMyPUuv&Kl{~Dxd>tk0ab_Z8MK+9WUQ=}||fDa%R
ziZY&c5D<%l2N}@=@1{T(`70oPt*yt72|G-1)tg{a^?$?m{{pGQuL4W~JwOxG1d}uH
Y1yMA506ns}!vFvP07*qoM6N<$f}S#{2mk;8

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/channels/telephone124.png b/public/assets/images/media/channels/telephone124.png
new file mode 100644
index 0000000000000000000000000000000000000000..3034edaa91bcb08633a136c45f4dd5725c1dfdbe
GIT binary patch
literal 1092
zcmV-K1iSl*P)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF000CFNkl<ZcwX(B
zfwc@V6o&s-0V+TRr~nn90#twsP=TicR6qx)02QDDRKWSh#JL+uCYfX>yL*yz-g$4|
zCYj{Vy?_4Pn>o|A<$<IZk}g&}_NSzGlAcTYR?*MY^sKgng7()XeUkLOa^UoHK@vbb
zk@UJ?4F6T#5`bHh-b=bSui)BoKa=#-H0Cqbu&VR`;I^a>t48~`kpqB9Kc1}tE5I7C
zilTDN001NtX7bl0eV(nWh!>6>04xbY<u@Pz2*3bFRyhR#+(fa2`}2o~x#W0C05Eqr
zfo+xoAOMjprv?C%MQfbT<cMpq>qN=%6afGPv;vbyFCdx#Ay|3>0C^#dt}Iw7tbW6+
zqSF&g)@{G1eUKP^02s{WlAafool|YjKkv>g?X!34kzXV+X=}#xgTF5oKxTKq3UCWo
zKDs|F0Iz2MS?V<OeTZ;);G;n0S|L<2zL>RO4U>*=06-i7P*d#IgC%{9ban^;Ff^3o
zxdXu0*K2@4n$iy?<)?=Nz%<_80N|T2bxmO+v9m>LA-V$qLE(#~r0au~Qhf&vK+US>
zwjBV>F^CXg-CZDe6>I7Z3&^zql-1iBsNKGLtlQukeeL6A_xGdI0Rw=9ujG2humGdT
zQWk|=u89igE(rBFjoMS7ZM(A#Zs`Ig6WC|n0f0RW4GY+i1ovsyC4CPUur82_;N+s3
zyA9^{x9@s87Qn-PS3dEoNqeU_<zGP3dtN9Yn_Kr+A{}M}v(as^1pqd{8Ux_vLNu2U
zxC@Y^0v!ZXewf)r!`_MTTyqP^0l>x$Lk5RHx;cNb6g#wam+~7S>mC4D65PrKh6R|=
z`EY>%0wo+k;>G0^QykzErh9A`4j>F3%jq#0d*cf*T%yIt%0K1NE_PdttQS9i=>kBd
z)M(m#0ML3DxRjB@52d=@vf4`x{O?U7TkQvNr$lGOK4N*#9SevNMTyPjoCR8LgYXHt
ze@e9w+A1E<5`d;kZ~(ATKx9}zLnX)sD~R)`I3RUp&A&C4Vs>}+-jQ_b<QQ}BZXq$w
z{GkiYOv-<e0;UgLa%56|3FR8-&sj-Q32sG#CEM!0>vpjKLRT@t!fM%Tb-Y;;)Ay|E
z9fJ^|vsktX(d6`k1+@zRCA+}Vn<co0yI^HisBby3fNygE?0}QRld$cQ<8V_UWUra8
z^}U>Xf+ZHPX-sgdi;@F?hC-;R3ml3CSar8Vg5(99Zm1@~tpIRud4<FcY;8kVh^5pv
z$oA$6f(exwD%1;!p>FpC*OF}Ob_0N3x5Znp<l6prEWkfqt?AV6+mI7JTzeIM%{X$~
zOvzUpOM@&R!;o%Hb&6(3Nckj0f9U?&>+rb~%B{zF1ah776Mq1)-nLNo*xD)p0000<
KMNUMnLSTa77xe)E

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/context.png b/public/assets/images/media/context.png
new file mode 100644
index 0000000000000000000000000000000000000000..b1bdd43560f2593e37b8cdb1382eadb3eee59065
GIT binary patch
literal 12545
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
Zi?62_Zfx`QeFNYhE3<8;g~s&A{{gL0OT_>H

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/dashboard.png b/public/assets/images/media/dashboard.png
new file mode 100644
index 0000000000000000000000000000000000000000..161f88d22273888173929fcfcefde72902ba1edb
GIT binary patch
literal 8730
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/inboundroute.png b/public/assets/images/media/inboundroute.png
new file mode 100644
index 0000000000000000000000000000000000000000..d9ba12e4a749a3f18696e30b7c3e430621f455d4
GIT binary patch
literal 3943
zcmeH~`8(8o7stOdW;A1xWvo5AjmcWbZNH0I>{Irgs6inL*_X^hH4~LBYmpRDwiL28
zBJOMrC1oGGLdI?wdGv2Q*YmlqbDh_Df6n`dbAI?-*XNG4r71t(Q9b|w_z7l4wg3P+
zKo9`qIY|Dc&h`h1C&YkY4}-ymC#+ZpB|ON?B?JKYg#QF6%vYLxAWDWBJBQi@dWS}M
z1YZUsA|h0;1o($|c?4Zn4Gi{q_)G670Dvd0&Fzi%_xBI_|9}3!f&bMF?A2$69?Z58
zYHMi+fWSNuDDNQ{oDXrB|A>H~kT6n2R7_k#^5}o0j{PN#l0hGrm6KOcR621|Sw;1f
z+TZFLnp)aAy8oO$qo<F-;SCIpj7?0<2xrfkTUc6I+t}JUI667IxSn@&zi^T0;puhh
zvbT@#6+i#0*8&2At_O#NhJ{B)MaSHTC6OuAxcHm5Zqw*@5)$v;yPuStlA4yDk(r&7
zoA)^XNx`$iqUXgWFJ6|Gl~=y1di|!lrnauWp|R;5qxpSH>xZ`Xe?N9~c6IlBV)piZ
z{?h+-;M@1Xq2ZCyv2oVK<ka-c?A-j1p9_mizn0l6t842Un_JtQon7wU?~X>s*1_Yj
zNif3OM-I)5E|4vpjvivq$tnod_3{cmF+R*&_)N7Y|E%G2dtcF9vBH8cCG{3(uVmZv
z+r1d-e3pBJaQ4H4`{#T{0t>b1sq~^EO(b4cCK$`yjk1|CoE;gsz^uQFB{#e7ZuN{Q
z#8fm53<39QcCM<Neyk0-dY+&~r<Y%*YWHBj-ok$SHM{vKDe|TPN>=_uKX(LdbL!eB
z72^+8A(D(M9-br&_4($v@vpXf85rK#Il;(9Tzp1v`sn*ct|Jue^yFdv>HbFU00bRT
zF#IBB^gx9S<r!LOjW==^!GGtiEhw}8#=fL{<L>Z9b};38<puh1pbCx)q##6yUxb}9
zPNvSkrt|V`cQ04q7Bv1)$~cx<yexQddy;_#msuV^s>t#ojf2aA|7d3zR@90EAbwmn
zB<dAV!RDMMzBeaKc%Tw%G05+9-#j3M!~{<X_8=>h$J2maXg-xv$fcX+^tl0@P~}-u
zH`7p%qFCi4=@rQW1g-=yCFu=Uz7i0$K(acLsz326;GjA3&FRwaTcg864fNY^_RPP?
zt(t*S5q>1AJBhHRT?_OngT}az$A{g%bopigfxk<6u~ZEqEus0hoSi!lP=lO!l92_(
z03j%p)ZW=6z(o6@gLWVHRqLj3bhNt#7Hq_+%Yn6a!U`H>Yb8H4yE!*p579eEo1o{w
z^x`m3$TZEq-<SnomqVc$PX)t-vgjCy(KId6$Q?499|4l#Ojs4)Yvx-&fs)5^5!FK5
zC!>+99>)7vl8=_(@k*X17_3u3K*sNQ5T8DR-YLL*iU9|-%k3+ml(EX<JQT56<mu5{
zTo;@h>ANZ{KR`kQcX#;q*~y!;w8sz-D}A#RxIT}koMB|%I<8{vyyOj)`0?aP@YqTP
zZa)wEF>wQ(B|odyI7?H2f~77&oQqLdb72@IsS0%C84BBtgeSM~Rub?ek6I9&9(k9a
zMTz6G@0d|;pJLtUkAiYM63u|cc1VyNo}{ZRLKHmrJLu<_#-59AjIAOLjllVcawgtb
zQ-qX(c!z1)>m4rdUAq+NPjD#A3zSuY#){Cp$sL`E_&UzSI2vS|4PYEnq*d=g%!uIc
zCIf-It?fd$z-t!~o?zW_G<F&Rac<sJv@S+tr9?9sY7dmixZDKp{=RBlxp!qQP?kPT
zGxy-^&l1n1(hj(~V0G@M#$O#UISyeN^Q(OFeyORt3xQ-~=-H;9opcF9uJ|FQeLtFz
z$-RNxRGFj6)KAlx>C;<mj3u7*{i!U2Le)*=$T(S$b|lrs)(o?AxRv-cu7&6ftuT6;
zc3-cleD1sM_0+#OoT8KR&P;*5jgJCeQ9EU<?~|p3bTQ6^gS}jkSt2(%?ghlrFGc#Z
zb$YXg>+~G?oWBdoHIW;1I2|rBpDe9fpibR5Jsr`XuTGWaUq$vfy^-%7D8yjbaks$#
z_RleVnjVBwjeoASB8si^#V=+i!dF|DZ3>$O-1IYygn{JIB(&ptsy?dWHb4p3Q}@KI
zX?GfOPM0oq3b3s@pRZmW7|U(Dag5X<z&<7i)LdR7iTcpsBfvK^P*GL*c<$>~yGCgZ
zc+s)!N8LAoMh)*YUC>{so{K$=Ztx4Ui>tvJ7~peC$B@&Y04i<^+82zW^o6dxtZ8%k
z2RufIb~siCq$*l+8?Q<Ckiv0U)yE}14)2+$QtI^FGmkM{F|oe8z`HaxniCOawLCzI
z=i4H04y^IGf(h3dGN*sC=3^y>D@HiS{O9idkmP&N#>nkQ=r!%urZYFD2A7*s1s5Pf
zS~PJMnt5@Wzrtet<6xEdr>rqg#v`!{Ehm#(`eIm^2o=Y?(HiY2xA6>A;oFN3oc2@a
zytm7JR#zMKvzHaD?k0s(x)WYZi+=A4Yqoi6i`ko6nBooN<1uby6!v!!L)(HGj}-5y
zpJ#dfvO~3Ar3~o2g_>lkRNnkgett<GFu@(}Dp%VTiM&VFEXeEw@Ld1xB#4BHS{|7=
zsr3{j#kF(jJR_;nTakC3HB5Xs&Obpj;nCa|U^F{Fg~Gxm8pq!IQps$D6kJ_0AMu|1
zBi-aNn9Mp9bWc+fb(3hb_cdG|aai8D^BuPL5><o*xOuBn(uk6`{NHwfk9BQBRcrrt
zp?LnBm3c~|DSH39rp2LEO12p!Seav>lS(yVQQt06Yn6%?yEP?HL0AxOFN7EI=J__*
zX2UujDsSxunTb6twtd$iUva>V5|r9RTH_~O8DV4?upS15K*waW8TDUAWU46ovS7(0
zUeF=Y6xa>oFJra*R3p^ak<6kgcUkbDOgo=)QFaHTw(b>JQWN~#(;Nzu8M?J^;A97N
zMK0lD!zd+S{jMvJfZs#*)RYZPaCMrwXqF)lrCi5cbX((VOU)L4lS+7M8QW54y>I@v
z-U({1ebT?~NcmHdCzV!&2(^Q`9Rrb%W#7uc2<8oIuRgr|fqeGJ!O*W567cS04Bj%3
zeT|Oz@<<p0!@{@4%P*6y>g%LJV$1|1lPp=?h8amMuRboh6QT+tDU?(5kN_8VPmy<n
zU-a9R;Zq;RKf{U9Hwz8ftL=U@k<<(y81&OdQO_x3)a}&<iUY&z6N4F(C=40eH&diM
z%t@QgME4fbZSyHJ!=)a(H*^&7`3gU3up9np#kF%n^G+s86miqtY;py8i6AK9hCe}h
zI3##rQfo|b%wHEh<W5oo->H5Bj;uWM2ayYRpnhXlCRMOg=Uw68FK!>eSvohB86s2{
zvkMDDwlkS%wtN$=O*mo-@}!~cjU1jR*#umO?!%{DOlYQoA?$fv4p$u_<%zk-c)~*<
zNrFM1m_g^d#ZPPadDXnz9}v0>K{Ul!0}Nm767*e7mjLN$B%m0FsYSz3IICRu_klZ3
zCs8;k<;K2Y%W`vcf4waCl-cVBptPo`*>)JwUE9=bo;eCF8W?sb8kCJfO`HbZSt|?S
z;`5Hg2x@V~l4`H!@Gmgv<dQ1DD0|(|Y^SrR+Pj-N3LVPrbs-i&sPv_yJR_;Ep5s}3
z_n@k8l2L$H*Scu(>j{s{FFO|?eYTJm^=eUP{$RhFazlvIr7~}6`{EKDnE(hjSy@r!
zs(|K_xij&M_{O6ZQ~RwIa$p>7ZwK@!6An-j{-HdIymeo7oHQs>9e`kt-?;SqVXdE4
zmO#lW2<7+E1hB&y_Z0Wak=@V90liU~^1v?6!J_U36ql+F_|{p*bL%Xvom*GadG3M=
zMXT&r?oAxAcGo|0BK8Q~{s?ei^4o)%QwzMO`}bbH_&Qx-4p^MfKG#8EBlE5Hepaq?
zb)*lK{rsmR#4kXPH^+gkmyLYcc_@w~T371k`1`XdzAM38DLr*R8rxf)!*EAq_N#S!
z-=f9bg!Z%-J$f5jQWK44naf9poY>F2T2{$X(h@c+*#=_@PTiV5$C+6X2|o@sckf69
zr*#}6I6WT8xjZ(oDIiZa%-F~Is8x|(snMpH*l#T6`v|Lv(T>gbvrie(Fd#N#zxnz?
zt*-D<Jiqg`YqKj>A+7l-51uYBDh~t}%vlKBZg<F)FU(!pVoY_&HRanlCO&tPVpnT2
z!xZa~nzMewSUI`9%H29%xtIa-D?FRU><eDAv5%UjSS4|j=fh@<#~*)mU0;vCYQYuX
X6ES6il4G;~d~XQGmPX|U#JK+gUzPNi

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/internalroute.png b/public/assets/images/media/internalroute.png
new file mode 100644
index 0000000000000000000000000000000000000000..315177b5632a7402eda62ffffd10ab52448e4bbe
GIT binary patch
literal 14978
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/interval.png b/public/assets/images/media/interval.png
new file mode 100644
index 0000000000000000000000000000000000000000..c84480a39502e5c29bf1ad543252365452179ebb
GIT binary patch
literal 17427
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/moh.png b/public/assets/images/media/moh.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad05087b2c1d7236a94bba6b8c9d8ffefb6a7e55
GIT binary patch
literal 12712
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
M+R^HY1uO1<0QtcC?EnA(

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/no-pic.png b/public/assets/images/media/no-pic.png
new file mode 100644
index 0000000000000000000000000000000000000000..2baebf6ce11dd9132a66b8aac6ce084fe603459d
GIT binary patch
literal 3595
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/odbc.png b/public/assets/images/media/odbc.png
new file mode 100644
index 0000000000000000000000000000000000000000..6a54b171a39bedb12735a531742783fc0d9bc1ea
GIT binary patch
literal 20192
zcmd3O`9D-&{QtezU~Cy%*^MnEOO{l&LD{oJNs6hEB}>Y_&7hQsC|hAlLM6%`!)TF0
z_GF(z_I)>u?;U!7KHtapFZlk%W9Hs-Uh6sM`Fy?3+_Nw<U}NTI1^|G~$nfMD0D$0s
zAppq$|5*;`+ynqLV02Q)I>3G=qvfrffp4@;VxV9H-7gJ{_hF@zALgNp!NQKQ4cr1u
z_4QX1t}D}DKAhT@asV)4<>HHG^bWv9r5;CZ&)XlL2@Reb7^r&n^VO@uob1rK<HV^J
zn=WElsoUAEA>IQBH0m@tt9d%DSXbkk^QNu+4%Yd@T5suSX7<W<LE83QoI>Hil7sWh
ztkIQwX%qJHNDTTeX$UcDQikGvh+|zX&W-tI(a1Y>LhZYIedtNy;K^I^oXNVn&p&<n
zIA`<ub7n}z0SI-B0|T`3puL}vvX!%IRK|Ii`nKE#-f^?Z^Cn;U9eIH-Ngkn(#sR#~
zc=A7KBKj-BN1Gb1{+fH1K2;^po&1N~ohv5B=~K#+<7x<it*E26w^8#OzW(1RxdK}W
zx({6sLGr9Ww9`BdyG*%Xs(=WL>+=@}bTIN8W9FdGW_fIIGq&RHiNtGyV3vJCH|f+z
z0|7{E*x2+3>K6t8i$Kou7oubxKc)HE=hq~%UIxBAeD@^Y{K)uF0NcxHhR}2TVC%K2
zIQz-byY}+Ie8H^S;{{shwlDHF1QSFw7_OGip-OcC*0$J7HoEl#18YjFp7T|2xo=04
zn885ii>M0eV?!dKH_AmHmY!9WFGGLPb6WMe!`sJ<D1@^F`3U_YFPhnT8pQkR1Bj1V
zXm`1HNe}(6hSwAiAdq=t2tO`wbNqcM`OvI>!+|ms2Dtw0v!)%gp`xnJKf87`xStM0
z_8%l)!DPiqVJFE)m1iq-01$KFxG{;XMt@ECakz?H4I_x07Dt2VBLtB^Bnm-Uzfqnh
z3XC(@F=6M+6aQ!-OQdjUmzHXZAO|p@cDa<<MJDs&rh?MP!ur%GQH%RHmWVZT;Rw6j
zV?PfuP8>Xl0}T6*fu}n9w}+G3YJI1#V-^}XVP_j+WLYH`GQC-sbRy`&*g!>W_H16F
z{)Xp#D5YP>VeA|dL(qd38KnJ4^xz<VpTN754><ry>D9+~{w_K#*WS4ByxV3%Mh=0t
zNXJ#vX{!e^A`c!ut#%^_iTfO9RpjC`RvY3oQ@p<xeLgXQghfa&j0gp!<VVz9@XI-Y
z#NFsSufNlk)Ryu(iv>dANW$=3F6qFLqUZ|-Yhu6&w>NC3oL<zzPR9UH6%(4lPrPx5
z9)Y1A{cu({mMW*aB?O_QjesK-iO$#yNE~L}-%&25=I^qDx=_(ggEJvKv{5fZoOE6p
zFPYAt_U66Xbbtdm(jWhKvW?RFG@3Rm<{%VvV7?2H_WhKtJnXQMIsVx{-S0IcHWted
zNJf#S5hF|qsDLNR%s&3`+=Ht(4rr?{j(Uh2Gl0m8QUuA{oOBnANRMLy2yGMT5?3P-
zrcbHtz0(fM{FSLemi!L7e)QJUt8HFlK+GSFr>SMXAOB8yvZrwaqF)?62iTzDOh9iX
zwe4s<+<F&>nT5qdf-@(^?ePgvQ>F|=2xU)jcTit;EomvMp4mteN1zk#113z7y>wvf
zzG{K6f`MycwL<<r5ddNnO}+tL&?IF-Y`v_Yg~)sTjlyE7@X*!~07SCt;GCl3(m6m2
z_7Z_Gh%$LZSZ0*{+@a$A5;=h#cG=k%>drEsBl>+SE-kz6I};qQ@1`+%CJqNN)D}N$
zv5_S;Fo^@-%jMrv7fpkW7uN1Ko2!&hm}DmJoC_`EUCf*eHMecK9r?NV>({3{l%8Ov
zKUJ4Fv2KJj#iGD>{FnKZt7%7a;?1&A#8}5_-wngyjjC8Dk$0wxDglS%f_b<6H@BC>
z&jl@>5JfQi0|*QsA$?e?qL8)muC<nJY(uDHnCFQ2_fwf`T*nSD%5yGnG;M!N(gi>!
zP%i6S5xQFlfdc$V%F4uxgO`sFg`xyP`z|ecl0%p6-D|2XOB?>0LGq~O2`i3tKkTdD
zW<_i@Z(U1m_GeZw*gkkn50TFYPtuEi3YV3hJU<ySB@8jYT-xyC3*PQCSXz70=szZo
zR={Wa?sV2N**A5wOZ<^U{JIiwtq%>Xf=hv6m01;6m=3cM?SU~Jzjry}YY&+Mu+JF)
zs#law$bCu)so<>Ag5>El5Q4ONCtyKk@)}pxOp|f{#L|+|BL6o^Ud_qg7a%?n(Qk*2
z$A1QIFi1{#nwZdmasnaYeKR+QZUYqq)C!81@*&^ozY_xu%C8hoJ-#KzbeKrbiP#ja
zA%xvG1Pqaia^AO9A##vGXXdt#?2*aBCDQk}mWG;rc4wMR$o*ENWu1(&E2Sj1w@92X
zCU&z?JAr?o>fKt)Vr7CDVpF2%>Cx6@&_2Rv#xQ|QpNz!i)+tUZERiegx<8H0ZYjwm
zF(c}w2s(G8a64$^tozMsP<9Iiuv?7$?QYkir`(v4A~QJL^io<s`DgZ8gBsfV9&XT_
zlP*a6x9G7!^X0JiM4dr%=R3f9iTDIQD87<<$^7y2C8zNLGS~HD77;Z)vOF{^>a9b1
zd#CTldwlCX9*EqL9c0^GJM+6OZ2d&W{o`96)fFsI0WyFUZzeJ-80FEqG8lffui)yS
zYB7*taymQAZ>g%kT=n}JM~&8vCvh9XgmYIpTC18h={7&Bdsl|4rUttH^zVBEVca%s
zDz<F0n43o%e^vb!nd&n1Kr4!X@j?l_=+ya%)o#+?*UFxJTG>Ft{pr)OJJ&KHwN0P7
zVlQe4Lj-?|9wt(RNXJ2!<#F>K;34?JpRCe-9l~u;qu<80W&J&p`y6#%62}|B-)MaU
zEJgy&_gp&_M%9;Yw`EnX<f|j(xiG96MGp^POz5L)ol$@iHGR&8F>7HFqm|X2^$_&E
z10c${T9<J<P5hX=e2XvitU~J=AAr=Jb@!}LnV$T=C1th46<iRiLWg9-)o}B~a3KAs
z`?!bnq}Y0g>`=a~@?-S(Q`F&QIstc7IA}&C?nIIe)`dgy6_DzYCX&4!;dLSrUOC=!
zCKzB37UE9gu0VI}L{*;yso&OXgL}UucmxDq)dQdcrtwR%g`~y;<$Voa4Ma$v3sB|_
zKebr(BzzorjEjDHSQNl-BUA<^JLtr{R8*cKd5wTPt}qwp^w<0giNCw~&qi$OU%xbo
zz#l=nxMAk<EpOwh3lw7CpTKg1iaw;QziT|5xlSP$Q8)k*gjV!<N>aq*vyni-lE{pO
z2w#|ttI)YRdJx{244@!|Db1t3O1i|9QgcjqHxeRe)cLJ{n)lx}v<yIEu(wHfbqN$9
zy5IwVPh9PZhT)gT!z!D37ueeg)^rdmAO`2h+Zi1Eh!<aO4klbW>e~WggeHjc`Qc@)
zh&8s>yVf9t`gIEX0$Z076xTL+7Laat;MifNPOY@R4L$QQU1S(G8d^~RbkNF^jMAKw
z&l|;G;A<TSJ4|E-_;xbc*8+Wf1bn+MI|u7oI>0iY0NKV>c!Mr#<_7V(IN?rWY;58o
z!dT!=yxE<sK<ZmzE@l=Gse&e8bcjP)UI{jFhd<nB96t>#Ys~F1%u@MV1YLCjD3YVK
zWPB>)Xa4H|TqXkd_rBJw_n<>|7=1OXf5ORJcIhv0#4K{Pau+7|to&uO&>$TM>X9ju
z0$a1EcGRU(&QZU{al+%E8Vm>qUKlkikO)U5n`?Qky}bT5v4ndx3P8N)N>IbtJzFdB
z$N4dt!bx!-7?+uJFj#i8WszEO3NNtGf;Bn-r9;UFDpInetIqSZMgrqs=wJA5D{Vdf
z+1)66+XtS6$YG)JI10l~VR(@R{g4NOn6^4R!!A6-5FES;xxT~tF6$FgWbn%%zK0&e
zo*mx2CaVvognJco?0#vCiPUR;cg;aEA!x(j8EpMD?y$7&V{}6YmLG=+hSGhS1rH?j
zvLx67jw0JvxB9fFN04xUke_1wI1+xcB%GyvUaMOq;w6fN_heUO0~f_Cy*;E1?Meh}
z=`nxXwClAetn}ZZ0en7_<9<+v2=MKF96q_m@;DkmByu$zf=1}qFCO)Szxl~vnooZ3
zEBzfl%VE%|n4ccQ9c*Z2X24_PwUcj}JVaG0WpKj7q2Zl@sV8CN>^k??xxT#)kt;jy
zg}VZ2JxLu0wbQ<zv_-=^GKPEt%n+GB#wU@%z3yQ9{n2T_k%ii^FTB?`=5*Nm<@4V`
z_#vzS_$A5J|EFm*GAG^m$3Z~rsB$3q{-Qz=(JT2SL6DX&eq619S@bujN|nu&1L!Z0
zjQ~gYyk*AYFUEDaA)2u~p%X7=nopiGRW53h0F+eQ8JXxfxK<ouAb19XEW}I-e)QtA
zD?>^e0`ro=m?!Vyi;gp_G@}tY8@REV2a7b4fOV6^%*Tfe#hJKbXo3;^p|pr5t6ziM
zw~tl!l~T1g&vb^rM1OV>9$}}+%?+iUqj%8;0*QKshaq(1kJA%=Zp<@6j{9ie9)@iF
z(og?({UHV@HSL67aXxc*H}%nq^5D$WqN(@F8ASRu4j|kR8)7B>o@{2cO4C$dDnWEV
z`b!vKi@@9gFd3bnAB1OXZ+5ansMHLc29f`kzQgZTwQ9f!0y+*i-kp88CkzDf{a`|}
zBbv~F62b|!rB=sf&Lavt;VBa9-*h+<XiyZ1q-3o@2sjo3k&dYh$awWeH1Pb=5s?hD
zttYutR#r4~pjwUaEsR%?SwTPGFH?XTcV{2Qy@(`fAi|uT6&TN{g~*^G(&6ShR=m)|
zH?&Eb^wFEZ2?WVi{d0p=`bY62*McYW6lhZ+5H(kvAKJBw15MMz<n1*MfGP823@tba
zNANBnfj8;^fA@xRk5ejicMu^>7uleN8KfD)St8-GBqnd0sd=k&7zHS61$FY#JgtGx
zpJ9j4U+s|#@t`F9AZ<TGV7#B04*+%3--O|3NN*6SkYVd$8-zoX5E(cznqDrZ=o3hb
zF1D4A(axC?3@`{<&lgvxsmz2#1Dq<lC5*T@9Oo_QKjFsXaPvT_Z3%#tCD)q^_0Y1?
z5Q7eq#Ud~eh^pb!i(tg>4xJiDie}mu!IE)@y;;ME6&F)?gH)`!*$Jc0)HKW;9v}eV
z3;;Tjg{f)%I{$(|3(Np0W)W_8_I=b-HXi|z+9}6%3|=62RTrJFNz*j5=&=wGOb-+T
zNh+8KslBOOFzEY~EE$}H72tMPt!bLVc0$CKrXCI>2olE};v1>T$D?=0{0puRSt()@
z!*q`9CL=)+jHCJ@h+4`QpB+7>vg8P1zKHTFeiGN=qkZ2gnjpE};(ov_5|&3Apf)zy
zD=G)lRqVct6@>U#+-G)f-h0LU?*VIxD<G$)5H~$-Zc!-hFLeQs-~kT(JkVr12*4m6
z7HT{Tr@x&}Y4N+gE74&f%)|MFWC9JFz=wIMd0FL-iSVAcyJ}tm3D0jBW6KO~FVbH9
zWsd%oAD&_?v^$+VV68!qm@Gp78#kV$odxZ@PuA#Uh;|;t1K6{epI`6z&|FkuhQ8Xl
z6L?S0!`tPr5E9_A4A!sxoCG5pc-TuE0WD4TruKh!r<8&%&}oG4mAJbn5xlP$h4(H?
zQFv&R&KUxEd0tP_B8>KI03VObo2I*}zferS>Cy(zU;=nj3L?}4Ur8T?qfiom-EMo(
zEoyh@Xb9l&eyzUbPn-1!B1oC~eAjSu)<E8`bmrDa0L**9R{zY^x=^DjJSMz5<9Q%&
z9Klepz5Hm`qY7ZSyWE~E7XdUBus}1+U2%dh)yt1_Cj8!+Jhpw!Apl4?<dTcY5Fl}U
zyrBU3z#HUWG4ycZ_I7E9LyOJsGboVY*064ZDDv=bi5GK%*Zm+gI$L2_funU#SrJ2^
z0@(`c#;}oT8$W<wL~u_il<y$x9d7L^8_5LBO>zR9kSWun@O2{&IJA>+tThqa@4aTK
z%6<2qVFu2cL?b7*fR~6>t$qEpRgzqc7+LJDp|-Fg57L~aRRqk3z4FcXV*TZs&q<qU
zKO*STQ0?Q>yMjWnGT&JUa#0Hm*Fz;L_EtUpZJ&)b;nDEdLc2~)LITxbxiCnjt+Ql2
zX*`?iWEb5_Zf%m{0$#nnLN~&;u4)dS31Rz&+#%VRWm7rEHWgHTcW2NA$r<GB4r7oB
z+6^XUu7tYo_L?@at@0Ar-6!BkeC3`-_)+llneJh}{>40RcG$g~pxjJwX@_2jajD+!
zV?H2R$j}}r*dI`C9WN$CbM!Z+>X4wh=8;(k_e5G49EZrt+n{K|R@|utSko#d?7H@S
zMVc8N0OvzfxzTw<IwW^B<&qvPi8vwVd8=EsT9v}cD4I4LfK3)%6i~>tyA|<Lr{s8P
zQDOjG4=R&H+^PYNKu^4HaKU&Phr764c)I9e3o&okLP*@D&}d%#rHTr8$wZ<_f;(E{
zw4A?*Ak}30e6Z8S2!qM&!XLk;z*2oggdES(-^v#3u;Xp}GP3JQB(92*$^!o2s}PW6
zf)!I|a>)uS7~ZM>F?WMPhu_nU@arb#Ddxx{2?R|1pwVizv05D4YyOY_X-*xynH=HA
zeX9`YV?FTIBm$M1jMJxhuHRTnnPS+J22*KYl9>3CzNBlOtBn8c_q5NViibeH&95hy
zY&-`4&EocT@$)E8>u<fyhrGMN=^clQt=adtjXit&L#X7QHS_w4&z)J5fo5bdWbDl?
zM<l)k;l1!xWjCq>K~%@ES>+*pj6L`n<D#5!9PtrZ(bjDkzN#1aoL_Wrh`W<F%}4L^
z8g_7VBcQWP*yY!M1~LL@t`-D~s)|e2BkqHNj9M-aMFU}roMmz`b1+%uov`^5BE9fW
zWs7Ln4aqO8F7Y5cx^t%zHf}#cBglcl;Z7E&rg~;KmCeNf`{Qyc!3VuWjI5OC_kG|+
z-&H(aY=J_iUZe;U3&U?-lA8bK8aS+8N7(g+5dz064d@GuYcS8UYC6pgf`Q1A>V&xH
zAUDnLz3L#bxWBYTI^4nC&CN=kZ!%*gCDcJK%%3K>#zSEK+;&YG(Z2fLn4txG(q~-Q
zGENlv*Tvth=MJ2{4AM%go1$(zylZMrrgMR{DB$a{{giWM3<(s|LEPB=F7F>vD8$V&
z^-_5~AkyJZcJ5-EYiGEYZ(1|;QNc=FC%i)z9I<GPwSI2);m;vG5<OlR6NtPkD*frP
zbv>GZkB*;T@zP%(?LBLdI~7{9|8p!L{dL2_I86Za_9#7(109g(>J?_xLC*<oKGMC`
zOFpRN$&16qR%yfr)i(UP`N}>+|12TvobLFx&&2oZ;gc4&FJc(619U}*cr`+h+SU$?
zFD;&9wC_gvO@GVZ2db?qEqhMeCfh`>D0R7KQ%6IQxJ{26s?qlR81_Q5?yEVNzJ21B
zWP2!-nmG|!#)k2H!Za?lF#WN0YKNE7ydKkE5j#JWh*em<W^&1ID3Xy}#z+=?l^jpw
z9*U}}c(x<@gVL4ee?d%iFHtdK2j8(ER9>Y#TXP8!8K67-0GGMbZDv&#Y>Wqf>An6)
z)I5r_CY}&5VUWFbS3T(>GhHC-hz{0dSpAvVrf(o+`Ax7zCad<+%EpPv<W*M-KgZm5
z;TiLH`$=>~Lv%$^EeyI}K3rLe>bE05C(%Ws7`xhXe~@yQLzFXe-kD$WW?r+oJSVUz
z_yrFfGk)8;rtborN;k%Tmuu*f0uLZImn-PH5ct+>!9n>0BuYqiJelv?THjlPfo*qH
z;X10Ir;!G*76|;PGl_E}%IK24Q%otR)&viK!QW?)Q@i32S$0|~a`whC&!&Nfs=gYJ
zdkqCgLB24eL#d@*J_~3OGg5a;|2hyws{5fx>JE9ObJms`EF-wA7O`K1zb|rfORaG{
zaJyOU3;Z$etuD_|&b-U(no}GzE&6Yq3~HY!YgXMDVZa~-XLy!Ey*!E&ONT0@{_u;=
zWO+-VCoiP)pB?HIrnEN%HxE2u39HenDX&*$(}qYWU=ktsQfH*B{S}zJZ#I<PTYDF;
zp3a}h$gg<S+ucCd`egb7Z>`<!)ErRdM4|yk7srdYBSzH1Xup`F^{#`y!_BQ6&GRYe
ze_RPaHx&=K41>p_6+{UlemqZScnm^ez<(3E;3}T&pj6={>x3YkJM(z<NhPSlen@oQ
zN3u);26z~>EZ*N-f2a4dW@)2V@wThdPUvee*AvGjcuLLP4RZx|3~#4-hc+jXvvsRR
zf755>+OH46Zj?{lm?mygPISsKyuE|_BLVp2qL0237H)DM4U}2D3TWwM^S&+HLC2#m
zWCXu`8tLf0<nVgDbCr=DBhOB{VBlMbd&%fo@X2%WWD*l?Bb7yzu;0G8HK!K)SGyOD
z#AS~#hk8vi{Q730{zB#)<{CRnwuno(93HF->EcOSm1=W6-sP5Q2LOw~fV}3r!;)`S
z<;5?<;6)tYAQ>WXKVao30>c#J|Kf-*U4LD3?JFL{B2w{`1#r*^UINva8om@7hQ+Nb
zpIjU|JpWkWC2gq972wT^>t~W?Ayfk!=%ScnVw=NH4iMEp2Ad^jnuCt#ccKd7AX@QN
zn*s0?Nd|cv>AWX0qIgru9;bOkEpQ}OeGw1`tnX+g=pc9kJk_K`j}SB&xYY>e=eVxx
ze~m-&KEOR+E9EKtyR_0nc}g8*NbjY~s9Qfh00alS-=<t*HAHzEU#2HXFyS2$C9+wp
zH3Hj?U)(P|r9lVm0~uU_`6F{4LvD@1P086v0MX7B@Sb;~<>>d?pU03m@>_LZIz(~p
zW1=~iA*zVwx7-DojSob+$UDe~`p=EY*uG6P^$4E_$l$NdV{Rr_n7|z!)OE?Pp{P7_
ztn0kf@=keJvfc;|Kzi2a3!qcCHG9O7v(LWzi+YQItklr0tv;(h5e*m?eAm!-mPg*Q
z$5$ibjU`P_pl~?X#!GS2r7c?GTRuV%Xz^h5*`t@9IK9uC8;PHBEKsPDN2__CW&1G*
zrZt~+Uo(%M`fRD5yhMu&Kp1y5zInkbkQINQE?HRk+BY={%;E={TrF(Vv{8qUIKMYG
zH`70W5k1!$?5!A06!6Jne`Fe3l^#7)0pVE@Uas>@KV?q`It2X_a8*-&X4a1#KX);2
zr`Y|nI(6jMQ=DJ-P4PJf5jE<KOx4<ZK%SAmUayrJi9xG>5rdtOOHgcO|A-UjJVjz7
z##V=E7{*(MTHl{;@pq#{G6L)*s=>iAHEugHr1KoJ<1DHBqinLkI);>DxrWo&ep0zP
zc;N=I8g_%<Q<|hL3EP#@-ZyY#*gHRm&KZb&t9rP`L1fj+-tb@zCc5v9i790F%=e*K
zf85B8qN}@`BmMPdHd&p|M{Rm6i$+!(!nzx7Iv=I^Rf^Jw=#M0*Uy>Lfnl);zO>?Vg
zepfH#(>%5Ku!=fUe`&`V;Sjlb-qmc+$GlTF9uzc7zVnvnMX{NeCkZUwjC^1jKhu#t
z_5k+qZ<>cSd&Wcw==#x8ZmzMMi$NmtU6{d`Gfxh?7N^@8G{_tL9&@@NaF6R`O72|q
z#Y8v?g#isfS$nG!uJZiSC(kucyXQ{4J<v4GlKc4R?7NL$O<F3HsWkdpm11pAlcQVm
zFu>(9{a=8q3hg*L4;?M`O79u+Jh^gBnUbHj-Ov<PzMyVdetJ*tyFv2}Fam8jO=fgn
z9Z<i&uBS{H%y8}8Isp+54zRhxcv)cGn}xP=BqLNN!@oAwSW9>8C>Gl!2GQ-N@;tyD
zRByxpp?Gnml;-JsX`waVm#ANxgrD?yG3N$*`5<w@OoJQS`2u7!zYtgz97YD>-*ETU
zcO9M^O+vQ1rI_9T|3#89QNxfChJ;T@wFhod9K@bY;KGffnBaAR*Gdhe82lavC1^Ax
z2~o=uo49$8m2TJ3;TW+~dX1qlqEAJPZ0@wwpQT($%!g|y!*{e>JSQ2D&gQ$MN!WGg
zA-CAyQqHShaZ48)J!wHf?hq>Q^thQ$$U1|doz1^6xkT4$PyZUpwFXOUTgM{&Sv!+^
zdx?sR%%yeD(z5alWQz(j#T>-d!9aM4MBPQt7do#l-HmOYo^oEjPpE!ea86?DkYc#g
z9wdd2aZ1H&k?LU2-qWbx)U_aebGm95=ebiDhY`MA;3@_TDi+T%`a`?wp>zme+G|Z#
zV(dBd)~Hh)tsDS5;(0D`E2wM3@=aZ6#59deQ4yUV;!&eko&`Nvm*dMlU#<Il1TE)X
z*|baCClm#<7oX_}H=B53Khnrz>`^G38428~XGUyQVaUv3ThXMg$GcER;~rpf<W|j!
zSEM?$E2PV5>^U&uGCcs1n&4SGkzP-F+zYZa7U3ljjWWgll)=#uE_M}(lYlT30Oq#j
zkxvfE`Ty4o0Gm;nBUKeSe^ohHUPmuF=r_z2sL&Ih7l~jZa(5Yu(@aejtcsr&wY^4Y
zhvGmbkZ{-H-X0%Nj7q&Bj`pA?IgReZQjIi##G=?J8y^Idsb<)+0-W+RwR}2sm!61%
z00lrne^*0}4#2VsaOU5BopqarjJTMAYM_|7Nu!t)8*h+$^mky9Ujxa7z&XUcE==({
zi_g<3Q#`YccUqfjx}^)9j@pXtq(SFV4MpsvK!=eK94<GBM(JBXa>)q&nVqc5Lp!DQ
zd+g9HW|F|Y0Z?z~6phMLIY`I{zUYM3oT=%hIC!oPoi*M$^WN5PTMu}HY8VGCj+Ckv
zCDTv7*;7&(wf;U$Gan5(Zi&Eo!mrn9zaw(6XPFUfeF#`s4yhHV@cW;CziV<MOeW61
zY1-sAvuOE_EGQn%v!kipQLk-VXrU0|@;7(?w@Gk*-;$7WM@`!<Z{#dyA*QH!h-^Od
zV(HSL=^%F3RAvZVjLgbr@rcm9KQszN`ZQ(`2m4mdUr^x9)v$0kXKiNwmHTySX7;h|
z8pgT191l!yNbkce0D^oMKTwi{5$IMraE5nXRXO<939U=fxvpWCQU>EMT*<9mWpA2J
zabEpOGIrXxss5GoA2|{rWq?3vbvd%pP&fm~7e2E(_D4d!XxHu6VE!Xv+wyq`oV!gl
z`orz@?&maKL~&{A_6Im=Y?+o_wqQQ692#t|yT|lP_g*j!vUf_gzFsf@ZXE*pxd@UG
zZ}#Qw;F9QQ%ake<v)X;8*8cBS%M@zzHhXh*hYW6sp;NfyggU%6(nzIVj(~xtW$Mhv
zZc?+00oH7R;0PPGkDMuT>O1VsWeg@ebjCV0FuJxta2G7oF#%^!1tVPgutHKzw3Gs%
zQ6>%l-a(rss`wsNR)@g75@!c)fZ`g-op9x(L7%X;K~>G%wLVCXQ&Y5pdhCTB(bl)e
zxQkTg<s^W2W>18}fVJvrdKY8dOr$}uV?InJw8p@k1WfdA#|P|2GvfhZ(AGDRaE=Lu
zKK5tWBm-8JA6}7d9@UyH3+!nk#R1Hv_cT5ZPOSz{Sk8ApUJ?zYNlN5$QJwT!n62&F
zzbg!!x2!7H9PAKzA3ihm2MMmjG>D=sKKbUh5;aC<-9&ME*9~GIxxVr?veg=Qv@k%u
zV)&sZ&Ax{b_L{^4cGKfy^$xxU0AdYi%GUaw3q4}Wg7DX%tzaLSN_^IWPo>n0fT+Q(
z4erzkvyzb)T`N@AIp8SD?bOo{co-KbX0kiDY}7NXH~W-MPor!HP!jk=k-jKQxcKj#
zk}k(alR?IU{TO7)3p0Co&oF_Mwqj<zh%X&<ez`N2ivkzQsK)lT0vNl~hun73>O+v+
z*IA!V!y`{3E-<Xi$u8YXb4~x<9(LGv#(agrk|6+it89_`7#UDw<gVfP9HUeDO2y%}
z0pUmpEzM$RXMHe?f1w;XZ?}IdJ87Y|jFAN*oVOA&$%|%i;S&rndzg>Ex*g*MC(jMU
z^NZW|!%Ns&6N#WA?XC+P>?A*hyWDT|M+<Th)e9U@moObC%&{?Zw07plud_&2%JNli
z@iY*R4%H^3Anbv`MYXj~;7n;uua~A|(Tle-OiT}@MxR7*)7ExDvH5k!0M#L3-*2OZ
zXX%4qo(_Jm{iX5`_-htC|FK(NE5<Rdy7QZ+8SW;7m|aA*sG=0uJmJ2i5?7JUKGnv2
zh?ufwkHir_GY<{9(-}^DZ(hEBSvWW;X(7c%SDnRYk!&AC<K3nu$(~_xWp<3K87V7k
zxxlCFu{X<Z;j3jmliLBngFry=<%!x(uM#y<qc}+JpbMan(GZh>izQE4iB%htfYL<+
zgYCxm;y{F*PZUEdov0Va@jB@}-vTqj-|c-g35^(;c=Sa3lgrRUx3>;DJ(3!k;=i&!
zU1DP=g$m<t&cod<!iU^)V3;z09;9cRWqNSDKYv{e4t`azd8~1~u|dCOMnUJ$M~AuY
zrJ0a9d>l{_ZI7RO@DoViZ^7ts<2~7a>rB(4wM*P#D@5?b4Q)idBpD1<+O)m6WzrjT
z%@ucclc<`$-P5JF06ba&4*zcSJt&&sbb(xbRodG^dy(}~Se~D+t|#m&U1Y<!yS>Bg
zc5?LMbpAABuH{Y}y4EgG6!7GDwYAnJfQh-_`Fgwy>P~O_f)hUalIf6tKw>lo4OT9T
zNUCjq%pMOTs+D_=-{hVcUmZJiKm%CO0LI8&X`>&%bBh%HJRXvcOT}jwa@R28FCrY5
zRoh!82OZkmHEK0-4Sp_*JbM5f(=8zTJG%i6M}I}4EVvp4ikA0rU-zTcrVnwRf3T=b
zzj*1@dx0>%on)&-<({nEU&Elw7#tIGr;&NnLDH)1QaU7SoiA!?MtWobpX2VZV9+M8
ze7!*T(eJfIQJ}2MI)~!yi4(q!^QSw_V~83zh#=&+6?XC%?S}?XtyOy2A#k&YV{Csd
zgL3b@IB?i`Ie1XUc|Y*u<89pEaV16;`(T13azw~mr?vUXqX=CB7vwq5^KR%#o&RU%
zSu3oAyUk9{!OUK&B7K4$LQee}`)h`>YJ~xH^krN$mgUGSo<s+V{BCTeNY`G|DtNxR
zrlbo@OP*V&!skO~ll%~R7UPw8Z@FC7lE+ewYz8i8CoN)df9FfD85YWKn+Qr!ReMwX
z6^B)6C%=RiI&W&i_!olY5l%!;3Tifxq?y-x8-EhKfe1$Wcoia4KKNgq6W_9rSS?fR
z-l}1(8MN!Utp#CC?w_l^2BY4(vkJ)5><zN5?oUYtlg6xv!&QRF5ttT4|F6bYh47%a
z9XanCn+w}&{;mgeEbSgrH#7lv_9yldoKSWk{m;o)98ve7FFa%!-nLt@mQsOJ5<fH#
zIkdR4yU))(n}eGVsGPY=16Il6L#F`2XXobCVGNWZsQO|4JpRqKef_pyx(eNI{eDiO
zhdvS*T-z^-7YTMXk|+&f5^B_f<nE=vHz~x})$U0Zn!>HQjMxJ4sZ%5Nc*|U*C-G78
zN77YR72Sy&jy|v7ZV|OWKEE#m>-8s;`8Oq<96m}N2w$z-E+Eo@MUP?6!w}Kfbmilj
zY7(mz!j8ijQ6cU940r68u~$E(zhTNsd_Cu#Ncqn`_rLOCeA^eK7CjVBZ>aBL|M~^s
zVvx#Kp803eXi79o#F9BecjJKP6n6_-wLs9$^-Gz;i#N09#&F9Pf3uxV0)mn@<H7Ke
zUG$D!k`C*2$(7|$t<8s1R@(CWZ{=Rh&aOBa&*err&0b;kmcMkWeQr7XVMw9+Xlc%R
zLZ7LA__qMs=^PuvPRcnDW1lXMbdKZ8TX^q_CzOQt>g?E4?RTVH7VtHUT^nBg2~#^J
zS8KLH<I0}Moo2ET8I2zw9BR)*;^ZD38dUbBvmW^%<r<fKk+rEL9m}5GyY`ld>kcdD
z=1KW(?Y<LbS9QjoKahe9wH+)S>T)*S%wjfI+eCa#--Sp`Q((oi(sIu2Sy5isH62#k
zsge9PRQr3?m}IbO?>^8Xa`J%+Oj-y%eeStJ{I(M4j^I73zjzx!2qPQlMi{azsVkXB
z{sEPi`yDApmD1P`Sa!|X+ZZ9pXNofMWYh6cZH6+0ReycR-)sOld$-JlTc`Db>Tw+s
z-0|4Ba{C_^92L%qj<XI?xb>3NxLvZqmZ>49R>SNGM_6Sh4rWXjEsWvd61@@{`t1uY
z{QXE#;c9k?2a}6yra<t{b-Rd4pC`RkGDxCp-Mrx-ocZTD?lD7w9ezs*HJ@=%)vH#c
z|BzmfvkV=CuE>EE!mirBH{f=3W%_P;AE>X{-$QB7*n8i5XxM75uO>e>m`Q^3yst&P
znoNo~0j;V1ve#g(sV`;NPDv7hF-m7_hiQa;^Xc2Ny`|n0M=-oigW`WCYgLwgepj`{
z%W@o_lT`d?m^r$n73%1Xw>8(Qvk)nzO^;-?LH_}Y?Y^2HnQVTG<par_V*fE-77t~O
zv{C0X7iO(k8aqa?s%oHib6bn;e2Xo6Lt4JtKiVaA;<Cf**TF15A0#@7L>>u>7I`po
zXTV@-OiJZ}rJdWmXaK^p7cj5E7Uu~_bPR;Fh(#I?eun#pJ@VM-H(KBXwa?gsezS@G
z*)>~22vP5Qq&@xwuxA@ZUOe&D{`lee+EXeT&HZteJ5Cc}4#N1RJmST0Ny!Iv`{wAZ
zWQ)8vxzTj^9PjzXH``|6Rm&77O*e#gkYc~8eM;<7?_7$$rk;Sso#RaZiM;eK_a}T9
z7KXyToZ%);CTc`lXq}cOMK9&0oz~G}_GZ(C{WQ2gYosx654TK)IBD*(6~VM)UN>?p
zDJ`_Gsm9egyo#d>?v~DVUKLlS4Ajq^95}jXX!K;AINXVYR>O;=_V~{o{=?op9qj+o
za%l>QOTVS|0v_%<`I8*&lzf4+HE%~qnR4ct>CUGnd!tFV)IIlGjPptH!H^4p9F7*l
zaC+mT?}mtS@O9@}nWwYFZ=%4gWWd-O96{<m3%)eLa*!?~g`+7sakVMtVwlFu%3tXJ
zDJ;FRh=z+|1TSdEz7;N3M!lq?N^%^8iHxiNOJv}XkC5wq#!6OL@;?HrfL(44K89W8
zgi~Kzz-H#Y(Mt#g#0gL}s`iK$8roiemlpc^$epazo?6u(H|45mNrW@^FKIuQvj>yJ
z2|`qA(bc4^Ga>(j^?Uxm!TO7DR>@S%E_0F2u|5|gu+#r4>L|nJS39+{TUAFjgRGBi
z%Ngxe@&ACWmdVWezxUd)@Y?hU;KWsWh<XX_O|QNAu-@_ul15*^_~6i;ALUdJYj!jo
z1OTLiaOMH{&H;Jfc0tZP1gXz?^+GG1VHqs|o+F!1(9b8Q5&7vuAA0>O6}4&sz3jU<
zie!p#W`nkVHD#K#w(jDJlMv?AWo;b7obD9-dOBz74L<Ch(eS~B-ESQs497E0aL@Ll
zio^Pt-Yu!d?}h&u0Nep=vW@Tx49lOAuG@jver<d8P<CruO!R;~U>^(T#dU<(OYpfL
z*rc*)qs_9b5;qV4ItQ=N+RL!X!?@x&DhJ@apU6et7;cFH?C<Wr6^3;l^01x|N$*+X
zA1!S<XfmR01+YLpFeI+u06=poTbNsThPZH;DYkb<`%}%1dz=6bI%-UC<J35-=<d|q
zZxEz)hhVJ0n8?kLoRHGB+Wz_4*N><<j>XfP(ZG4pgf=?D6*qUR980I|KPA!gPRhY&
zbPx^e+DD6rRPN*vsoJLRC)go^INZlj<K?WNI$Pujce`WIi8u{#F106xnMc=i#|F};
z9-;<2zl;liZ~x4Gy|u|)F0qS_Ec931`DJJ}Trz~4X-*POVzJhwtX`wBs_L}rx?NLc
zz^x2clPlN0sdIjzkq5NCbdW{?&K^5@{_7UCvnh;QW%59z*VAg=oWMtB3bd-`AWS(3
z;{JfglqznmNom6A$O!cwnRj<y9lsUwVV`-&)(3f_Na<&@n=|mDq0l@XkAM7KaM}OC
zZdnz6d*18;5*hO98$XP$No<f3wRfiFi;>?R@9+Zwh@mOjCpTbdmd3Q~yw!DXHyrlS
z17g^}-7LN^Vtmgz-nK3daC*{L=R|UG72W1sgQF8B$_X~Z@xZt>P$7jeLD&je?0`~?
zw7_*oaL*Lxgb|xIvbse(SwzwUbFF|ewmi+3zJC9jCQ8KTKcr1;_bu%fR7Fk#dHjn|
zg8-?lPE$MP5zIr5<KaqkZ@%KvzHqzacW8_eBPZ}GW)<05R(HZIb&o3e&J{3QLM;5d
zZBVgmV7SBKtbs7_2htBXoDcI232~UYrEPbOJ(7SK@WQ@CyeFQJrXhG)5Qco?QlMh*
zo(OQ`hTCpeM;~MSYQq^3*w8%q!l!>JqnjcNdpv+VP+dGJp;N$##(01JnsNeO<W!L^
zorTij8RKe;|CNT}4&M~nHN`->ThGabvSWISv}_HMYIW-z`ZEyzTJC=;!Y)5*%8(Ym
z_t+{{j?KeeCfIY3+}Nhm7LV0@3ij8(oF&EGWZ{6>D-ZhxKku*NyIYAZvN|Y8q3l;%
zOI+<FOkmG~Y5au8QkaIc{m9t>M;JRsak-4nuEog5X+!AhjU^dH`V5zEMz5!~I|jk)
z=+2m98?c+&5ZqmbYu6hGwn_}{N4!t5c?r5K9lgwq-PUl1`z>F8OHQd~zaWQ0xfo?s
z!|{=fa9rmZ7z#RF8&TA~&r=U5xxW3l`u$N{S-N#6RXJ`0CH;%{7_G^wi>ZWl-tOFA
zF69oDPdVG?-}h!svOQ;=2QFSCn8|X?ha~+BXgG<F@Hy*R!yJ#fx=u?oZgB!fEwrWb
z$BTnpet6wLYB=13eLn*8?xj|;1v^`-(y{rcVpeotH+hEOmGlqtWaTEYeylDm#c&xL
z{;E_=7&l{&k~tsu-OijTU|1aSN|Ql?6&_ZMkZ&cjaKPBdM#*PGHX+!fCR|PwL6WZ?
z^_tBGU%2s<4h0!wjV@Vna*COMSEHAq^`0I(NnZFi?^dHZnb_#?nt9dq$*N;`%*`)!
zMFVg}w=gb*`x}2?ep2vLV2t%-86r>*YX+rvbpLhbzhNNqGn>acNMVkM0)p@H)YNt}
zB(y(%GSTx<WA&iautH&!-~N%2I^uGL2wXWZAq{Ntdz9~+R#%vsGY9V&wAfB`QKvnM
zyC^WRw*(wB^$p7(a`D2Y7(k?4#(8G$z>|guSU|oY|0NT^vEspl%@ik?=_wyUvJn_{
z2XPI*a8Am9c#yN5j_i0HWJ8CHTKJu|8u6}+wGr=40yGSYw4<x|g>e)b{vBm&)v)d~
z#+N>TZ-OxM_j3u}tgu=*1qZ)7l-`okmhvzzv(F*II;wWCaI9}*kWK*fW+y^JLIt3T
z9ARJYAICc4dQR$Sek;H2OXO<%a2PVyghaRLxLjPZo>H>%qaAp?9PF+_DSjRO2b7+I
z(QwL?sV=&)gcSJIf=mb-;gjCBn3;^~hg}tgN@(k@uIZ=9v5)px^{~TTKiN8A<%_yN
zznJyLT(%mHyR`pY+iUu_s@eBJ&FiLI*0b{x?05|1GofwlxqRE8Z9B-zbD(uhy1i|t
z<*a-FFiES6zgBL%{a8i|TX1t-1w2A$;2;yi4pq_^g%?>}#M&1*fnkAW@oy%yb%j9h
zs0(#-O`Sl^^&&=5!og%U?1Yf?uW1RGRkW5U5*)q8JW^%tq_(9*mCKd5_Fmik-B-HS
zA8<?zJwaLYtXQ}Sn?>OABVxQf6Yr2f$fUdGPyBPW@tzB}r9aJ$>H*h1@{QM;`vFa6
zaE>AUPy)I&9-(8>WuGsbco^|Pl;9t&zX3ONeB-SQXLBz3Z2+8a8eglnYB~%&z0CqP
zw>j<GU%iSkK{cq8BM48_Waw{Wq!9gN*(<ebk#l!>`g2J&Ki^VKPHU8IUuH%}BQN;<
z5I)CtJ<#EUKjtIAUbp{BKOLSC()tLuJ6MLbgj_haGUpTp{4#knzYXIPp5!wd%=;fr
ziu}G{#^)kyo-FX7^;PFHZm{{cdrN}-rOlLMhFk6>3Uk={-MSq*i;=t~+IC;Z<cb9H
zy@F`}5-!-{84KM#=nrxgH8N<=<Z^4Se$Zf@h?w!X{B|RhFN9eBo+T7PO5R^UE07mO
zzP3lD3n$nRy5TZ=*JIxERF`GA2PKoK;$6x!2kP?0Tob31C-6mq=7lw}zyFoGe+nNZ
z8cHDamzdvlofStOppTIySt&lB;LSE${Au(w*t#aOL-;3oNN>o1qO>JxHdd8;*r4YA
z9)|-XZS~`Bw|>8aY+D2?iep|obdP^Lg=axT>9DoGsMN<Ef0cq?d$?`rxn(C;IMzJ2
z8q7CS*yTz?y##Yw;r{1+_<ljQ8ApGRjNEPfS6-K>_Th$+bC))PLm{Q<n5u<1UuTtN
zlkYWA=JM3(n-sfXMhGhldmgTDKTe&zofClPdx<O)dxZ41B<q4ViXIPEtW`ej&efkc
zxvK41P~P2iX-jFd)NG{BK7G-Dw~QG(3}aoFb<3=~_(lcx1BkIKWYnTU|4*4rfdI8-
zYR?A^&5<$vp%!rBS(8EI-MwBCSXEut@`I7Qzl<j*C?U(@-ML{G509Hw>Koj+CoI*u
z`b5|}_oAv>ch1m+f%t~K|95wj1<~@fSZd+|?Kn?b7si<=a1&K7p_=%WEry+@ARSjq
zNhFoHMWmXy{-FzHf3-AJA=<r@QXjHG;rCFpOXqy6^<AWmSev8C0oX~OrBOL~4Zh~>
z{Bo7NsjjMZ!uq9imx95<ZBLm)@{jX>QklyAa;jApS2;G{SG(7~Zcbg+=E?M2W_qBy
z3yD*^;pPITaTAsSJ;nCfNL~Q$RVH1cggx?aF<Esh5rPN|T|%xfP*gv5YG5)rX=>>w
zQt?&n2;91$fl6R(VAIOpn$o;V^B!Ef&ODH-kmO@Yx>Y9})X#!Hff)I@)}glYO*&lt
z8iM3^?(8gFvwns0NRf^p2)X-2;J8TSlqr_~s{NYA>;n1g_T#2}k6xHuDCSHs2@iaF
z6t47Zg8z4=e>3quxa0WkvcrslYaeH8yN22-wWkbmbMzn5BdiS9XlQ&n1<JBrD2Fzj
z&}8+~Zi8Wg6=(0fZ$85SLoAcsX6Rzac<F|A&PUn%!Pro__iH)odq|O7^EG#{Jk*MB
zjnhz~Xp$i8bw=I*qZ1TnS{gr_R<7{1+|d|`OH^Thq3TN~NLHoTl(_$Hzlu{#B^rG0
z3U?hJ{pg=9Vk71=XoCG`m_f#aQ`?Qh7eiYDw3+1H(`0PIpxF;=#eyLjngY`!UR83E
zC*cdD)(e^W0t7Le#4vP`#_&My{^Z<mb#9(eSbBC=F*&PPI6>LU>mL?X?D$l3&Sq`@
z8zIR?ErzSh`?LkWu~o(YZ83Kd%r5J^!VV%x!WVdEGd_Ta<|V!@B0_>L2MQMK%x+2d
zEmkJ|k%YotyoaXyCFk@*H`I~3WKLS=IIZwr&HtUF;?@JA&w1hS`z`_Ll>#?+8r!#P
zG@vxg;7Y2ou^^-1Amht(*x$=C7zW7XH+j^Sl0o&GSZfUGM20P6E8MH)`Nm3z6yk#J
z93`;c<or+Mv8(0<a8XecK^<(W@jJn}MXyYW2n|||mOot{a@|=ZJ?)QN7>wcjlLE*@
z+O5v-LH}FDe#@~grA#SH3+-s4`iZ~Ne$r#!JZ<2-S`{~R?}Nvlp)sA21~qWa#1qnn
z>&k<+pJ~8n)-?NXHwU0P;b|BQGoPerI~t5Aksw&^s5`Ib=%!Jl(};<k0{<8pLaVZw
z5`3Ho5H;7G&6}o|Zci<0JFos~3bQ&k5S*k3^qb88n1dt8|NZb3?fhxX(c0k9s9+)x
zu8?&Sm;A{&hUGuLU~*IkZd$<%A*e(`-wr3!X~r!RF;lpCqdt|^ypcq!D}fx+9P{Om
z9bb}2{~TZ^a$y$6F!d7X?w#<XZ+j0UnbM;HezmPYzyIw8fQ!tOb5~ilj}(WyKOGD7
z>unfkuX94uD&S#Ip@(i3+x4izOvnMckAaC58q4nzt<6_g@MP=Jp%+J4HZRUUz%v_e
zoy}(!GBo&V;qE?HBpV4>bh?hbdyT{u%^K9hf-B;~Rg1G2AOHSW<M${5TFbsQ>U~Vl
z#sI0IUz-Nq%raSNm7C98cfEIl3$k-Td*xy^x+ehW?Ne(I1i&YDFN7cT9<DQ>QKxq6
z`@Z+>IoFkygO4+BO^{zqXaaLtes^Qs7==t;brkG2lQ-#;Yh^vRZr;!NAJ`8AwzeM2
z6u*lhM-JT_eR7$ZOmSWfl8CZWjCoKpvJ3yY_Taw*4gRC1S!Lng0_C1snpO#vON{0x
z?N8+C&Z76anmJO>0$BgV0N}a!k(Hw8sw>Vx!xlC$9A(4X<^s=iGrPc#HUy`60C{rR
z8FMJ|=L;paguld-I`CPY0pZLFHIb<{9e4VM=Aox2Dp==~*-lVO6Vf%m0KmR@+V27!
z{y26uVv5#(K?*@QUt~xXojn}FMc`&0S*||i#qi>aVN?SPe7PEiCi|gc55$YMov+R>
zTN-3T*m0&1I#P^_JpvRLVOoR@cY!O_Lzc{17w$I9Ej)JE3gCmlF6k2~@Es@=OY5fU
z$uQVe-1xh$xVx7C)yeMOo!0F&^Eg3a_!b`>;k_dgVVd3ad=NofwM`9n$%26Nj$ea^
zg#qvzijiziJzzG7n;1k`^TK`Wi6pq7T@~j>)l;U}XIE<o#BHjsW&JiTo`&xL-PKCH
z+;c=if8_Zd<-&sBZvthn?sUJaeMXs8IANJiH?G74%zS&Zk#^W7UH>~2<paYZJubMG
z%AlQ9Xl*jHtsuTtWjx_ve6)jn#>x6=+7AL#E&NWM1!}PPx3w^H!pmozN1jQ;ma9P2
zg!J;2mLL-r!eNrlHCDclr1WJo+$-`rgtkh!!@_xvUM1|xw|#IMw<Ove_v6~enP+Dj
zW(p;L78p>|o>PUKVn)N^n_e$5Y}a0BW;+~OMklb+YPt3>v&I^WT)$Z}cS@wZs=YNI
zYAOx{KFfBv0bbe}+|u-oyS_OHUrY~yiN(s{Us$0fij^|Ol9V^pr!UOvv6(bs{Ejlj
zX{Zk-IOV=vdazWMCX*UPL(ec>Q*xEu-89`MbN95k?U0#`K(6b(jED-S5!&*`idd#`
zOQ}0KZ#rgFo>&5TRx-Sbo8E*{eba6nllt*fw0K6HLQesUNr*9ajjn@y^f=};IbLt3
zeH^G2mn68c1Hd;T-t&h)K6Z9KOT6h2pcD*#HnRfLIse^I2!IN+7#=K027W;BZ_AQ2
z2l$j>L-;A+z8he%^#*ZDFqSOlXyBbMzaIH0JDf+c7-*QK#~_+k)1T3n(1Xx>4zGi;
zs}4%W>YFX_?Y(&@FSfVca*W}{%{j-QGcvoaQ4t8ot<u_Bzs<&w9HH$sH0`mw*|D`J
zF)`a2%Gzv?*l6a+fQx=kTcLb^GQORq1WmSuvqKoCCclJFIfG&x1iC10f!$1?br!%E
zEj@Rp>m5|h!wDDv^5UGj+Zr}E7DMxmV>kh~fR~6@WJyanX>=i_b>`LJcS#?@JL{HD
zPNGRp>QhLg%8;PSl7|m}uw#u0Df_dZ!it=Od^X%2!sT+NMkoJB^w?_vZp&}_)a|Dd
zdRq;3(7UW0x+n|tcV#=pt)sbYL6Zq*4?!*Jx2u6(O_Udj8lB|@$M8*<6?Tx{nYN^k
z6(niRd)boV8<^h<Hbg2Tf~w~kmVdcDg0B;}oF;s=tW|FBEPRkK_h<4nfOLzu0tflH
z1<+o&2O58Ao&{i#5VO*rSDRZ&b)xtVZ?5UCNdwlandj)=Xp+y|y&!|u*;^W%VJ$E8
zcAG@)T(I-ySP8eEx2MOQh&_p^7mqC0YPfJv+Ut(BxCuk~nPK=&CVb^CW-3T^K~&4`
zxWDRL?HlVt2;)0`To~KKun0+Okp~KhaTMC-cgu`C+7Vo6<G;gM>xZB5xln!$Brw2F
zlD9TaA#YLjv)5s_orc8u!p<IDvEM1bknIl=HeJUweP3D1%NY5-lIIzfj>Blex;#g4
zlXJ(zLLc~ibAMfMuZpOT0wNTyZshfyJFjp|7hA-Ta{`r`K)QR!p?Uqq65&g&-xo^+
zF2cxBG5ELwwj~&|l9&?7i`VR={SL`p33TC`eLhnj;#qP{+zSeqJ3{AIr6Ek*K@P%W
zu*K80Zr_}!KH-yob^|IkmgI7CYphu<c0uGD9XU>-G@s*UOCy~ZQ9%MR!hzi&%blV9
zP=t#PDP_s^^U$XwM1wS!$}D~Ar|VN%iHz8T9AsZ#QAN{ejZMcz8vS=1WUDB7P&<XG
zi0izgOcf6TlEpCfH$JE0N~y+AN%gs@eXzz=ObyKn+1h7L?x;%ZRc@#72({6XR|JkL
z&Y!t<)*>dD{+ILm?3y6$W{4ETKLcMZ?`aMnB!A-Hd8i2}-v<h-;5!|biOH{Ti4=Ty
zhu2&eGt3?80;z4Q9JkM7>lzApH5{9XbNZUR(Eb11>nOX>-C~-(Et&K?Zs#yW67Ve%
zqKmKo7!rdCW=0(gh(ZtH;buT*--W_b=QZ^$kD2G<Ux7DATA!)+K1iJE$i6$ugJEqI
zK*N0#YMcBM@!rzr_s(@5nMps9@hAN>kY~w5e8nIfScoHL95_;x!n>wNFo$@zSNuAZ
zv}dlO%@<U<V_|2gf4ZY%p#E<6#>cUA<PdyXX-Bm_tx29f(q4Og3%+f1&AsKxS>SGb
zgq`DvzWPZQ_dc&m^CNV<S4nh8+tWq2`PVS$WSqfVBe}7tnZKbthliV2u5kX*Tv-}D
z&VOHJ=wN@lRmE5#K2n|mDfU7SgJuT<RW*acKhp)cC1kqQgtMU`vels=tm7|zO~btU
zPs6mEA1|Kw1mrO|wMUUofb=t!?r;sV#(t5~ajRiDk{3bJ`}**SDTofrt61eq01|jx
z<FCL!??T~QWP>}g(UFA{#&8n=sx<sfq3O(`w!s}B-~*SdF{Y8;R?>SKT=Eh{&JKSq
zA3KPvQ|P0{EOrNnrb~v|&5Hu^|0k~oQ2D#p<P9J|a7!=Rc8?1Jx!vR;nBM)i4I6h&
zLO|1yKEl_(8R3^}c)f2F=!aMGj41-(dM9JgfN~GvT1uKOkPy(Pw%+6ct;?I#a}bbm
z*GZ*v<;&R5a;jcy`Wp4?9j^E;t`!0ZfZN@I*nr!NO5Ndsg%Sn&K@^lCOFB^m+}O*|
zyRm0kUj5c!u73k#1i%JJr(3k9R`W-!6xhzJ#GMia?j_KtB6yiTC_$DqN)wQQ*ZaW@
zy*@Gar72%ePwxlCaWU%Oz#Rdw0n*|YJ<RG{oF}l4TaCLlZJ;Rwk1f!H&lExp(xiD#
zK%;sYdXL8U(LJQ%2*};90h)fM+|=g?dIZ1`YM%z^sH3rD@EE_E-&zU-c?$G0U`ykg
z#K%orL3tAW9+ao&p85KG?Jak|24)NZcD4-yU?;G%+x0TgY5}GN?&H|v+wLuJQ6Qn9
z3vtkbe%?HMrH^l>vo!X3OHIi{Kwduu`T4U9m7N3-06T$QxSiDkWjIEr;x7?>dfWj5
zA+klv<n0FD=i_|@&q%%u--uMEJh`t1XaqnxsvaL8R}`BFmE)QvCHEXG#es_ky^sh@
zY}-;Y=>D9!F?S>HZu_<+BDdNEnCCA{7y(ci=xNSSA^;&!o^1~)`c#9;y8QQ2IJo<g
zIm=I5)Pw50eV5Vm`kQZxv;21teStETA%Nj8!||z95CE0Ho`it5o_w`l7Nk57fwg(e
zwcoiX;#$?Ue?sX<XpO41dCj%!(#U(w-Hr=>pw3&dDsP{*@Gae+D;Bw*q!9r1+e)Jr
zc>@$Dz|=r}-sAuQ2=q<BNBjz~#!FVQEfD|};hrT;j6gfq<OBf-^hW?!f8#bo05k@E
zni`NdKwbfs54Pt|ju3!AE&^K4r|DAd-iNEdVcQ@88p2-5%7wtKxz*TGk~;(-0D<xZ
z6sw{Q)#U2u3Lt<02!Otlr2?WP242ol97+KJ2tc43fp<?vpACGfA>NiS0$>}bR(C02
zP(naIOb@i8PCgKTKy3nY^J}C}U|((0JJLr0?10tyRu=-klUd{J$qoV#fWX}ZwAHp7
z{<{++fwBY;0A+dBNX?fK>NsM&0yPMeCIlc*l7L403h2}PKFjz@k}aGT0-!L^%E?It
z$TPqxgq1;)JOm)Hn}AN`(`aADpQ{4`2!IY6X{CtTQ^2PPSV7Qd8&YZrj6gt<{O;ms
z314R|iU8=W!B&c^ebXfdm?G%EEvW$ndLV#{zlT=ZP(}p621p&<f*9ziu_!78IwIgk
zU!#3azU-*st`!vlFi1n<85p-AsTl-<2w?Psz_-d40nmzcY(DN8(1t_A48*ntxkDf`
z0nO=agC0iunOmt)*$@DQKz5XjmK7>qKtJp;&{4xtR0vceptbsn+}97w_9{Wnm@EPy
zW2>|)lU5T*2*@*_PmU{Y$DW)Z5Jf<z?#b9|q|X67QLT_5Uj#scMo3fyO%=Exz&ntr
zVJHd&?j)d5z8idk`0j)`%GVJ9qqJoCddNHAo&kNb3t@T2qzHjp1QfvM24A17(XU0i
z<8%=K9XDR%qAPYlLco6z1dSVj>>zN3fE#=nd;Kt%Pj|UV00D3l5jR{QfFPi2Kp>6)
z20xDdFgYUthH1+1ibxPBhCm(yeG)?u-Xs)YAOf1h*WA5E_xfanKTzXFRRsYMMShNa
zT@3gq(*|?2JGH!zfJXOAV=tr61%cuO5CFxIlHe5r?j=}y3RrqbmzkM>mgFssJ)`@X
zdqd;8BLEr$C%dNzXtlvo5a{1{3g{>!67Z4z(%=)FKVnOFQYQpJCk-`OF<lf$47k^T
zn1abVLC4kgQN54m^{F3>eaDSDV$l%*Bev?eb&?qH)d&7>gu%G&-9yb3oTq?1{rK`b
z0`z)lIm&1V06M`41l(h=6bSkq2Oo{ly76_;0XZ7IFAY2+`uKLC1a}fZ0Ne?Xucs&A
zqCnFLE)@Ke0L1jo*Q9{%vX_x}!|v{TM)OUYfJ`C?AOIq$lV>IZTB4}SKV2wDI1r4O
zsilsWMZtG6<Zj@Vl5da8zWB$v^3Bc(AOJdVK#Jdlz_~bZ4}vmBC^Tt;)lA&5>yJKi
zKR5Dmr6XquBqx9XNZvpcuPXvR-QdDN|JSt?4E}%O6F%FtKF{vIU2cBkL3aAv^50!`
z4hjo_Yy=Ph*;<71%t&A<9K8PLqQQUf-iT|QYORb=#QUvlZP&WBfH@5LEt32l0+k8;
YAC6CnwIZ83CIA2c07*qoM6N<$f{i@Z82|tP

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/outboundroute.png b/public/assets/images/media/outboundroute.png
new file mode 100644
index 0000000000000000000000000000000000000000..7be6d2bf397160ecef3b185829250fc2ddf032a4
GIT binary patch
literal 3999
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
PeT(#UjBiw5$3*@Q&f4*B

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/queue.png b/public/assets/images/media/queue.png
new file mode 100644
index 0000000000000000000000000000000000000000..45b67b428bbdb634a0cb846bda02e7037c75d811
GIT binary patch
literal 24648
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
Tyr~O%I|j^*P8*gVCrA7rHeUOX

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/realtime.png b/public/assets/images/media/realtime.png
new file mode 100644
index 0000000000000000000000000000000000000000..4fc164604bee2222a86527bbecee3b8c0a008ece
GIT binary patch
literal 12740
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
O_(w6bGp#W8JpF%dnRKxL

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/stage.png b/public/assets/images/media/stage.png
new file mode 100644
index 0000000000000000000000000000000000000000..e81fa1e81a2eceba95254f92f21f7be83fbdd2d2
GIT binary patch
literal 11360
zcmeHtXH-*JyYNX!B!Co^q7(rMq5^^<(jgXf5Geuz(jAq6NE4Bokm!hGLB=qM7)o@c
z2^geGOTsY9pfn{^A&DbWf<i<B5=e5-iR-R+?!WKnx9&B6&N+KOz3pf3og411N9ASJ
zWdQ(?clznD2LQmqS2%!L2R;@PnF0XN0h|sW@JbB&JkFlCOA6HH8BiW=yYf?|-?;-1
zy<sCosvDlYeuO$1dkVi}TW9sIXLaEro8I{klUcPg7ow8~s?d?i14aSntv~OX;s5EF
zRcz6>FY@OzyF|!+RFk-Sz4+y?EBKzguLV|L3zpB2+*B`5wM+@|Ev&f7q|nK(q!UI6
zl#&jHz=(mHs7L*^?l=K}!4as#fT_&)aRMC9AUIl_1qYRMbb$L(68I1d3>Lz8q_GzQ
zR#F1GBu^bv3IQ+;c_W`IA%X%XB~PWz?igTm)pYuI;s_w_JCpT0bb$4~mkw>mK;LkJ
zmE?(7r>q35GiuV^1d0W~U<^&k6D}o-0;E*Of0Kd4B>*7`&=VlSkO%_oR@C1Tu`qzC
z^bfIrSo=qi{76Z#BK?0;NfK#{cBi>QQBdw<5zV}Ep&QL#{)i5q-Qo&NHzo^Qq54;e
zu>Wo14VvG3CPx+-d~D$bx>s}cQDubzaG_|U-~a@Yqm<}F>P45O71Y>fPu!UK#IX8Y
zvE&B}F+Z=d4JwB6GR$ycul~y65B50g&a8}g0gtU<Asf6iHiEU1k&X-^Pt44yi#Lu}
z)W9->8>2&RMCOeb12Ov_u7k=ZMUU9jIB(dWfpfmx9Ho>R_F5MM_*SotLKT{53=$V(
zvzS{5=J%Qo@a~%Lzw~N9g5b$)Nr%dOvU2Iww0xLvT-hp&OCxj}!x@vu9vy<}autDr
zEom02g$V|?&w4N>Y1?-IV}2HfPzA?K!Q)@i?S(`71ZN{YhcXoSbNljWF;G=^b6OEv
zRccjBn-^wv9dZJ;I(rC*yS4!rij}PoLiUhDF-yeJMtyT*+bt4QF~EKQgR{`8fpLS!
zO9k2SuyU`Z`~^Y)79!_)P#e-PWGAs{Wv;DAy>KMTZrAguBV&Jo^d7CZme?1h=aQDz
zifJy{e@apMNew{uMG#zmKVTq1g%JhB!elP{-o0+k1dIN=#wU*kOD5FdaE9Hh9l)ob
z?`R+(kpuK%I<JezyngGpRsIR6>V@=V1R)Us7Fe=w$hZZWYfe`OKmnJPp!IXJJ7<#<
zt?F59^yDdEH|)ZN&}jvT&c01Cn<!>L_x7xGh!Mqv7#&^O9PHxp@a(2rW&nA|RaXh=
zgK$1Czrl#PG!|NT+#_>4>whRE^Uau`5rQOK3(X6K7SE7PaQ`GtUa_m#=NzbBms>t4
z9zaAQ>v{2vZd+iQV+0ske%R*%nV76pS_80;FWi*lhsG6(@?p>Wj#r(6g!T>ONI4Y*
z;mSMN=*Bcz9kt=LZt|sdA)X)mwn*mPIc4a~-NT}I7l(U~>zf-Lf#CqBOTR+Ot12gM
z@4PBkpH?^1k(G)sitJ|H229CaauPMq5Sz3)&W67b3`orG>*PQLq5IyE4vDD`5Q}z8
zGtI@xON{MqtHFF_Ks7J$fh0U#<d_-6cuExiGl6PQrmgd&L@^4#0oWhBO$+^9KR^2&
zVR39eJ%<cbaVp;KgG_u$w~s4*6+zhjsxnK`LU3%rP9zsZ0B8SQKQM)G6X%P;qy+TJ
z8#MbTkIXUQ>rLr;KptUIUxFCoLbNbg2_Xf$EJQfb#IIh8kCMcB6T$i`Y%^<ppo>wx
z3u36`>&($cmuY;$8+N|SYFWG|FU~<19$%o}`9uL?(7z8rdJ-5Uczm*Wz-eo4!MOMd
znws0#mPVfFy_1^pFPM#R`tK9t{qaJ!(*ntC|ALPb-mJ6cXss@wNj$3p@zUw@;K)0%
zvL+5Wu^v3$+SPx4#g`;bJbVVu*zl9Lu0+czR4V(@2bQ*LVV^jNB=G-v#fy{{cewpu
zASI|ZA)4yu(aWaN%M<1c-?H{lSEigq{0)Y(z)_u3*C1n|H1&A@pdHM|>w+DAi%TOF
zT25Y*AKC!S5oa0z^`3n$8^F+uAzBwR&DYrZPiGx0uMwP|p#V6eXtLllSfD~s#Ng)_
zlj%{DDM=*bRE9EuAn0DkTm`+ycmU^r8*f0b^rQLw*1}V9AC5*j14_W1yj|XUkaJUH
zm|AP|g(8-v*0%<u?O<m47ZeJPfHN*~YrZ7u;trmObtxk)!{(bm1>}jjmGoF1lzF`#
z?@<2%@p4v+VP~&FS+gL;9|6E94OZoJ$W?(91s;ETY}rLxoc26faWvW;WIEcr%NP<@
z8qT)^%U0RcoWs3|6b*-)%Wn_E2|&z@RoE(sJbW9YHNn0&(b{hy3T7Se9Zfj=A7rr7
zTDJx(eoR`uB%P+Un9@=V);Dl^vS$la!6+$2AGh9j;)zRr;xBTxAmv~GMcLPpQb6-5
zoSW?zQ4LlyGHmZgXSW5{Y=B{a=ghI1Ku|BE-R_E0D=*M=(!?3a^`d<J4FCdIg@KN`
ztnWTFKbyn1&wETO7Z=a0tTwBkz1jv@<!bn284x=lh*MG$Jesn6=>ff<Bf9Yv1{Cd+
zHmKCJHw7O)ujOR_+vBZ0U!|OACGXx;yo&`n`zE{`Q3t8_D3#97h+{}cNvXD-ZrhXE
zw|vf6^8f)hCy6v{VDNktvv+1NZh4lfAmZENUnha-2E?$|FPw+OM!RReuPj->owe=`
zwpcnfDg#N?Jn~o{oXpd8Pnf5porD!pI5%+)sb%H%Qp+L>!Vl2~W0~QI<Q}079WPm$
zEl;6pPMl~_bIhCq#`@_6>gS+XCoaJq_S<DsX(hpmGi4EL_u`Rxu$Xlr<6E#1U?>>!
z-lD}joN#V*FpMhx+P`i$7)I~z-$*_{VC+V6vv9bR^H-hhA3VnYQbK!$ZEPWco3{YG
zDi<_r^Tx!H#V(=4@dekyMGJp_P~YKC6U;qugkVEyN-@h!IN-C)Ela%@DF;P-J+_p!
zL8s~zQ9BPGHr0@|c7Q~;vnz_O(HeX<1?fx(yaMJ_4T5_#!QL*PMGYP;*9n<%gZv;M
z*CihZl|^tji3$x?KA;^g-rYJJ<_rUQhFKNXIuaOnkRlwZ=~-{JA~ZPMaeTilSaVfM
zsb5Y4rG@Y6J{^JxE$zw5xB?JgAc6`eZuS3>toH8LbRRV(FzW^k^5r+`^yOge>X+%w
zb8MeCccv>rWi|J>R2(EQ{)Wd7iPM}tuyCW*4G_GrD^yPx6S9G*?XvI@O>g>XR=xFi
ziFMA;jqHZOwPe<s(P_*RY4QBakVMaM_k6Dc#P>*Uzc}qd!IFjTOII*DVIc;dBc@>5
z`BAnmubO1FT%M5+Pg8*~e9t`^LBZgwN{MV`IDSv3^U|Kjr;qA_4r+JBOBrA|`-o}=
zNogdu^8yPUpG7HhfUu^c2f2GBYnTqNrr!jHza(I@8*UWL{Iy3CbzQd4pmla`C$D<u
z0t1X#%g$xqsKl=q@FcDd3@$`5aj<3m6|560|M8qk)df$;a`jeb{F?xA4!H}}V%O=A
ze}!S#r2U4r4qDMyAG|qoh``v6WSNie^X=Uf;~k=*zY#Q2WY^(VNs(*vp%m=+W^je^
zV%8W$P%He!8Vue<xI^}1{JE;#icAX>KF0RStxR8#)oy#4crbFGAzAyzO?}xqiBrSM
z<#&R>8Sng<{ZN4;BZ9IgDxE||o$p9%T3)xnZ8DtkXw&fzV7gj5aztpl-MEQ6-OgQ6
ztGZSNa#y|CF)-eh!gjd3sjj(`GWE-%H?Fz2*B^~O2GTvkmcCsG5ET$X4<_WD?CtH6
zpGR%G<jraMQwAiQWcGJC*hExSV{j=He0EjO`n5YcG1W9MI`V9jT7CngHb=RXt&ynH
zX^_Q~O2@w^<<G>t19P<ReeJ+GFpX`4Iee$B54M^vzC`mGy02Toz6i#!KM1N4DASVA
z<i=4XeM|a>>}&`cr+M^?Jk(w4L!z?KV$04mPI!gaatH_~3T)blfpSdh#=(YlA}5lf
zL0Po2??%w^RoYOWvzgcw&by1I-<|MD-@@lhsern-CBWJZFd>JD^z4b85^cRFB?_W%
z1QaNrDW_I)%8}~B`Rs&GXz~eptOGfe1)V6EwlHpyTC6*zvp{a5QGl%j8S;HXDgYYt
z`7U02|C#HvutV{o9D~cR^gt||{LyqrP`t0mAT!~v)1a}o?(@RRE>%O`37V{qg#_F~
zOs4eNkk(>J4f-q1w<5z^(~)2nw2p*2gJg$^7!Xs4dh>^;(l?@O2O1=s?;1D`b~}u7
z$e_K#UGKGBmSvfloA|XLRgBx$lfjT{tcW=VE25cPxVGCu4SDuGUkeI9*WxEp(5kfx
zcgUKE?~hipwH0n{^G<<6&_ACnfP{@ga^J!Egol~ildz<Qs2DV8ma4Y!GKn;q7`wo#
ztwxJ~Eml2DUjIc^6}0p4pSDbC(5LHlc_Ac47q(8Rv_jxTaHSzQ_c*+R1O<<kTo?NL
zK^IA-b64OwiHzUCP+8ybb&DyOdG*`e=?=V?=rqzq1F7Zwi#t$=-R$o!hMFMGc4A@S
zR#UGW6u0DNP7qWdW~_>FAUmb|y6(LyrQ~(ueVt?y(?>4H7n;41ROAB9hUxGo(R^EC
zrhXFc!xWScn5#RVKnt6auLq~d$$l@AxNP1OURB`tP5aLDVne3y)cup(A>~4=&=<xP
zaW|UxHkd}?BwcZ&Y|Az$9FEspVkWhmKio|}wm^0&u=|Jqul6WHW-Wl!6kA0*;EqLd
zJ8s+wEO1?D)ALaU?)*{>t%)FCPfCFyZw^g&03%^e<N1(B$@|$2FVd3E8XyUJ4=cb#
z2H|$=yDM%^P9vq=eN1zS;Wxs?CY@>dJ)76qTeOsc(2!Hv5ELrFk7L(=C>_7IQ=I#B
zS?ow^lwNF{W$%l!fCVKV8Mc>jysxYCpPqC07U;;FW9rgBra))>U$w^jW3;`U{-l=6
zf|Q|b+F)9<_yNtqOxPT)zv4$~cK|ox^YV&5L#RAs9;Y^#DT*DAe)4A2hsz#s)m*wO
zSiX)c5e0rWVcRxasOwZk61`!Zeka=S>phc>8kJ71rw25AwWb|n+BF8P0;v|Y$#JV5
zBx>?io9k~QEOgwZ7q6EHixhZ6$baIRl2E<Zg+)tRazs0n<`UUDrXhg4*)vV0c$Rv{
zjO<^p3~*g$J^RVNNP>CJF0a<clNY~E))%)#=I?S}{i!tx_cKvS6p4F+abI;7;#TUj
zg$Zztjh3G*t}Et5#8)om%EHNlzN8tz{YB!X<W2solr+!xhU-&lCH<BW-68K9pEKTP
z;c<T9!kuDf+knP9&p*GGr3N*SFk0C9TDF%`sc`ZUOyB{dydA<8yR8}yh#z-*5es5&
zaL_g;=M7>|ulVaOkMmbA`&(0s1iyH`UwIULeoDTrJOSO;j`xH$E#(@R#IhNqFiMV;
zczhMp`pj-S>eF=P!_0@wHc?#vmTLRtwfvyLQ?(r>{rPr$|KMd^cWKdRG*|R2=-w>^
zu?~(=nUK>;{f8b|ZK)SS{!Pp}NKsgecjy{)_`=>lDBBai?lZ6Q%Dcg3woIO$`>IR+
zsVLkbwiV9$V_p0a$`V-?d26?`G@)H%1goa?qA5e0<froYK}sD4cfPEu<)f!Ct|MT`
zW_JDPKha@vHlf0Clvl{p4_!e^<WV1m;GF>#KRK@>B<q#;oBB64Qq6zH`BPZT)Cfx5
zr~9AziK7=?i@cK#k^6OL=MGY$(kmG)+2o)7{}>#pY09hrJ2tco0QF(HwQKtSeJsCc
zoo4yD)>*{Tw=!|@F&m8#?J#}!Lc#2%6;_UHZ+u>v29mtHQVN5+nUvfS{%QN#vG7dG
z7bBOV?z|oT>GX<wf0I+yQjVkj!0o-U>$YO^C#h~iyYY#kM*-dKajyY)MRb`(O>4l_
zT>q+L;fhI~<k$N@3F-<{&oQb}>p1Z;l~EOSN|xRfSN_oTuGSzwTKB{7#3&Vj%L%@5
zVX^2SrnT&(M~%{Rr;zy}<0&ti>-#}-S2^N4geI1z=hcyGef9EELxdlKu)*y#YySyc
zb)!qzm^esUESPZM=2p+{3dX|D7d`_CFxte|_F}cMJ@Np*j4pfT6vfg#!GOa_i*ve0
z7<X9?mAc5I=Ppzz#kc}7JUR|vcrx!Dx#7rBxPqub%^CH4JgnASb1j<st+ON7QwkH<
zP)-f;jZ(90v}~}5%y30$u4S71t`yTUz#6*5bD;fcpoMjn0d8JQJ)saWD6bK<K5xGM
zx(~BX6#abCq5O9~Zt6sV-d?#-O7^TFKE8qeF_Ac;8xjRFcc5+d8Cq0n>mN%_%cctQ
zgW5)-LrbDx8Cq=T+#U%>=Hl{lHv!5YYaeL_on*698SPhk4t@GGz?TWFy`Eibbi&T(
z!zZeB-KXE`Rn?Rp^y(GF=UMFscDzb*v}$SEEyer@ycQw3%9nADgBP1HxJOC(eW}(V
z*QpiMzXy9?`n#%?8eAB>-tC`rMv6cdMHSg5UrV0uMD<eb)z4lx92}{}CRjdoUhfn}
z`$cfB{#0)>weV|Q9@x#g#m!QATQ>n?w`1{p=As_j4=~HrU)v+O#q<-}Cz}pCUYpeS
zY8VLpY*NSe9hG68BBY2|FC$?TSK*MsmgvyWH$998;=7w@;Uk3vw>_UD{Bq#j?&D!m
z(aqVa`GV-+8~!H9F;yTBeEt2<E&Bl@Y)aX^d_k})tBCONg2{MwbdIqPF(pX$xeve#
ztq(Zy<eY`2@odVCLEOz#-s27Md;HeJvjthtS_Bz6dGjhjORjP7{Xe3ZzBG;cJ`80p
z;3@89bsi=VUTR_X8js+1W@gS|Ey<dlYSDu30y3OnQN!m>r!)8!Ib$B<hMw4Nqt~*D
zn7(RSME%@LI=_}`mvY$?;LW79{yBEPXK?n4asEz@`eZJ_ENIS%vA!aM%H3MSm%a2k
zV`>Nq6pDrnU!8XDfmcMcF5a>iHZWUSjj^yOi&264Qz13@p<1djuL<Dviv`zWO&Eg7
z%K9Cq4J2EdR`4Hotn=j&f~HS`?4-7l$z~}+#NJu8qWWnKSWay8vjIW!XuGlc+m}W#
zHtPP1y0UDXfF58~kWjxe2XG#AeUv@(8eDY2*3*eNl^;p70TO?iAuUSIl)=ryrbL!Y
ztq({uH^=a%vE<H=XpSgo-oiT%@G$A-(~(!dH$ASLPBcI6W1~8dC!z-&xbXdsu|k(O
zc8+ie;EjpRhyNQih|>d&mG;95n^OxHCA}5cgZXlLsBgBy3G;hRDk_tpwoIpL1JOni
zX^kMzT|E@BRiKm*@T%(bIBg7)V9oOZ{(I~UYD@;8i5-qS%OFVv(nM^10&v!0HbFae
z1nRavFA)jQU+wdLlW|WnVtWEc!TWtZpeoUxz%Ydes{rX`bwube9w1JEdzdVu1ake3
z7y}@29fOel{hoERAIDz>pxNyswtY9q|H~z(JIGC$W3T)lZp)g4)8`{8k^znttQTgw
z1@Z%d@jvc#dFLF~o!uzWocIMXx3;;@fRuW=<(US!a|Tg2dvl)20`tcfvQNvb&-<>b
z0nZ&t@NuO}o3eNr_rH(r<mssZ=f4;c_81UOKvIJ{TCrJYgdz+&2EKz0`AZ^4h$Ycv
zP?&Zd;2dGR=SDN2LDN#k8K(l!2}9dgUQ(3OB?r%lBO4O~0|gEUU>SDXEBTB*WU~{<
zxd1V>Em$5XbXzDp;dq<;-F`Z}vm`gR7BJ_w@CmqTaaiJ8(<cn@fa-Dr5VIwOITJD_
zVReNul*PO*w0S+?4DiLXwT!7F?xsh+!{29oaN=GR*TEPKu-#@FqR`}RAI{ZBl~17(
z(_dO8m(Z6UqI>g17pW~(3~;;h&!4!>v0oGBMD(2ilfIl@FRD%4)`=ZrR~YYCikUwy
z^;fP-YP>)`E7zn(kdELA=gc&?y{N#(ue`!?sn*qv7@-9gHkdEVpP?Iz7+wIdUIY3s
zK$qbLe}QtT+atxL5&rHJ;ZG!!_>s7Ld(=1i2mGl&zk+uqlT<l?KOZrboG28@H@;AN
zT&=4j*t#f9vK?PmYMK$ou}{wxcUUK95o)?;yE7s(%`A|B!-f{u)2V{sj--rAOS!7_
zi~sbCt$QLa6!oMI4!s$Zt7=)QTkaZD2J(=;G@Ux+kZ342=#1gPuM4l93QeM0mQ*2_
zZ#h}aQ?JyFmSusrBh}Zw%%q)SJJ*60r<yyr7CgATv2v&ti1%r#0bWlJ#TG|-;pck9
z<>W>mpp^f(=G;w>O6%;#yw62`st<Cq=wCd$E|QrG$KVAHHJXcdy?fcJz!U#$%{l+4
zX@}}Rc}?P9@7~uyt*kls*`;CdQ4RL9;l)|`nhpdowEvyzWI@T<(Wqk)Y8y*6$gGPG
zBj;ml67bEbnNnuOQ;1Yyi}37oK51kRj8R0WzxE|`a4_yx<$!sE;P8j0$(4avt~j+l
z$S-CmC9vpDQ`_1w;68rw=H%Kx-+II=>8-WyZexOjCi&xG4ztRk*LEs)j)oCcr|)6=
z@-mYb^(U=hjPVCkD#iF~WxGof&1`y~mH4FebtVlY&taW=BVLx<Y%Kk7Jn&!~dnDYE
z98d4c1L?;)FlHQgHrvqKE^IkMVRdo4a#vxKIb%iDE1@Y#*PO#jd@g#26=;A~aE<IS
z>8W_s70oi-Z={3hGU+)nWHMzjtD+_It;&k-TXX2^P8bGt-{<~_WA0E(osAOj#^kqc
zjc${P<*n42_Q@|Q_A{1o=Yi5FoPB4>oq6_e5d~hq>lQ6Jgz0jY)NQ`8qxOxeA7p%1
zaag%MVg;i#eSBzOq1MqRUb<leO?0ay@U$bNE%7bjySIV%T6t%j6yY^&NbO~t_*;HT
zt@$;An)g^+T5W5HC=q;rkdMm?-vInVm{%>PU3niRUa?sYqsE-!Bp8amU9yU;wF+tZ
zisZJ|6>Q?b{5waa#okyz;hd&0%f+ttG5+EkAK~QuupaHvL5!UN=lurh!pDDJv|H)c
z!%OD_1`5r0%v9h<aITns#oWpsK=b^m=<_G@q}`07s3zqd*@HWGDXz@aUCEhU{x#E~
z^7_vMqHRXOQ7nGT#}n;wcJHb7XZPFm)G7eioy^~M6J1X)t$9~x&@vaxik~j~OouOR
zug}=XeSt(Ak?qBfe@gI-yeA9PwKfHL2CIzCdiL$g7$~_fXgn)Nj6-rgU650)_`3St
zcLy{s=j+xgf&DCfn{UqDrR2fJo_hm$PdDXAn$Z?OA-}R`NaI~l)L3bRsd<5{g(|!f
zxwJX2FmGu~p}@aa^|Mt^-X7^e6fn>#xa29_b+mVSRyBy5aY63n=06nUFPAOl7F><X
z*DqHDp7JyIU`^~^wdOhcf8IOd2jiIT;a+mVCC?e7ybe5JyDkSOt7%89^3%Pg`vkK)
zQA{Eo?3!Ku@0cTRFCkzZxq5E~6#zRV(Rv_w=pNVezLfaxrdQ{0p}-wabJ{Ez0aS;R
z?qF*|OuHLSd6NrQLF}>}8mTpwp1y@+w0HrQ%rCr`-j1WMy07qOidcVfL-mJ@uye8A
z!2y&j7-8f`Bfs%6A8=D9^XgU(d!4J2r6zV4>cYp+HWy9oZY|*HVD(!+l~UH&pn}xN
z+t!?+LW^gcmP}1f1#)=B-mA{zmd_^*@~o$aXdcqIp=BSFR`~*5_m12{zXsW?XKD$-
z{T<n|=fX}PpfbF*aezGfo*J)HDur*29VmMx`06CSZTHIALN_Kpt!zrRc0GdsGCn?S
z<S+8jc4qt|EU~;JcNFU<ePuLSq2s>GR&2dG@RaP8J;tT7rk})|tZMGnVT$Ri-7_(E
z3+_OnZ!+r~U+7CLUv+LRUdjQnoQ3m#Q**+HqBP_`qnX@Z{@R%rl?~FwcDzSNuAhR~
z_BOcroV{aqT?oRr(`u433&4BuJ@L@NC<3*(O$S)?*eQfABw=uQB!ZBB|G_rNM=J^i
zw0a$LfNp3Bm_slaMYmXT3`W41z~LB^?6+=`RjLpCcTd=_Wjnurfaf}W&P9t^66*WF
zKTfIteE#MSRzD2*BP@R871&z;s22ZA%I!C?as1io-$gG>0r2PK=z93+!H_He1<+}8
AO#lD@

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/statistics.png b/public/assets/images/media/statistics.png
new file mode 100644
index 0000000000000000000000000000000000000000..e3216782211ff1177e51264eb66de7b007a99df8
GIT binary patch
literal 24292
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
QsMjNgsg23q-`r#W1x3oA761SM

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/team.png b/public/assets/images/media/team.png
new file mode 100644
index 0000000000000000000000000000000000000000..0bd35f2f69f6ef30af994b02db3cfe838039dd02
GIT binary patch
literal 26479
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/template.png b/public/assets/images/media/template.png
new file mode 100644
index 0000000000000000000000000000000000000000..21a627ca6cd2e6c17e54cb8e6891be2b2dcf5459
GIT binary patch
literal 14035
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
TJ(eZ_{zEpm+ni_WarFNIqbH=$

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/trigger.png b/public/assets/images/media/trigger.png
new file mode 100644
index 0000000000000000000000000000000000000000..1e53697e5b367a24783cbd8bf5a95e389ebdab6f
GIT binary patch
literal 16383
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
C>Xrup

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/trunk.png b/public/assets/images/media/trunk.png
new file mode 100644
index 0000000000000000000000000000000000000000..d2920937168a1e3c7c38c3d38a713271355500d0
GIT binary patch
literal 15684
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/variable.png b/public/assets/images/media/variable.png
new file mode 100644
index 0000000000000000000000000000000000000000..3f427b2c9d10e79d3fd8fb0d46c190b80cf89ee3
GIT binary patch
literal 14636
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
Sz3YX*pVNjG2F0fwqW%vnT24&>

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/voicemail.png b/public/assets/images/media/voicemail.png
new file mode 100644
index 0000000000000000000000000000000000000000..981dec65966bf363a06e97159612ad04f9480740
GIT binary patch
literal 16330
zcmeIZc{G*X`#-+#+l_OK$B=|_jFB-)6uHgw)I<{JDN{u}DHX*zBK0JcS%y<RqEwXT
z$tgWZLQymsdJ08RWFCIkt={j?=lA>T_up^**7~+qtJc|jU;DaV*SN2}@1yRncA`RZ
zLI@#I2Yc%^2;uNw9MJ^epW%Hi69_SpgSExFeZF7wpIz7aCu66T4A-DjR7qH4c`3iW
z08OsUC4+yyHrmK8C(mpaO~pPGuXj-rc1#K)m4v?>Pr19|U15al$E@4R8>Z?N4*j|Q
zx@Vwm!;yo#zSUn>j`3(?BF<*|)aS^q*(+M;vOK;@YV4ne`Hk1DSZnc0?V<zTj^m?m
zf6m@ck0U}>%HHZfNN1wS5i`#Ri?R1pmAXY!eOg(wn>9bZUsER@y`}4dQn?~Vuqs#g
z{57gJ7^wN_nBdNty~-!qqfVN$ZSy5O#W)9PKw)^f=baVU^oLfxSTk(j_GT$$Mo$$f
zw?MeC6p3WM`RIz`EAWAgHR*$%cgH(84*0NYr##IP;eC=Mdi8bFWf5GNYh4+AqteOx
zD94fEe+UsWs%)g)cHT#l*h#F`EjqC4#Nm<Is(-eYuOgWGOkj)WdfI_OV{-kbM-3`V
z6VEyiF0mL%<gp0`8(Wp2ZqbQj_j^3g&90iC{JrV2UwgL@*I8dyJMj=HgAvSQracLy
zDW_)p)Y*o|KA4B9i5MZkWFwI#`Z5g1h;`k?elr(-hTYzljMmfK)!R-Q)Ep)SaT+OD
zn}_4a=?a&=r)(F9;I}^U(U@Tm%&I=>X#sx1i|PmJKC5Ah9_st}l_o8jSqM*kT3BJ#
zDa5&WYW7%Y;AOU!S?z=WS#yhIUacRnG>mzdVeqh&c&&)jK?b5XPZFO`yLTsjAi*l(
z+h0WdhmR~qup7dH8?y~b=3itVi2e2NUt*JXz?ofJo)9c)$^3CYytird#x=&$iv<sn
zt6*r=4TS}`2N9JuzBzP7K%6K2syVTeL86spw>0Ax$=h5v`slpn-T;R#_dEp={5vqP
z@0@}JEV0!Xx*MgFPWM%-onZu9!}dgGm1U<g=Sa~3JtL)%y_wQtR!=xgh8@C=Y<+Tq
z$*^JlEjL@T<BYTZU#c}6k^yMbR1-NQ;%smlU;XM@Z2RhcD%`JjVh>L~veS^@<G8|Z
zu3QsQVhIt|IyQSh{fq)%Xh-^*C<he5Ke(RFW5NWBm2rU~F5K2N5BApH8LwRH=yC3W
z(UU~g&P%TMc_$y`lM!+>QyYY_4v@?&azJjj(QoY2?1zleOw=t@yKrybLYyCCF-T?#
zIbdL}(=l07_i4$-fkUqLUTbbi1-tTb62X>}glQicz59neuXZHfTtAuY6Y55HkIvTW
zv@c`uaae$)zPp$phmVNL9RJ*1HahM2Ai{`VRooypf2*d{JzDB}rB1MEpDmBAI!!t4
zPUA~nyRD^beg0PeYDhETO(K!^S#5;FbHHglhwy#@EDe~ctbBKJ`diLSU_`7?Yct==
zfwk)UGMSSWEO(g2U1(L2soWH;*->LK-DtVK$a3H|-d;KQ@k9TftBS-8Wi|?V`Q9f4
z=d=gJT$22<dtsDy$BxUWj*t@2Dt>ni;pLvO5!VmWhkfcipTtB3mDT*bbR+3DxFG4K
zNJWhQ3MJ1epzrSJI63{!dDbvrjoy^T?kIdc{&DrCg6(-BVs|ZAqQH>cbnW^i8*a~<
z2W75(Z;x36I{=_(<F0~G!0+wu<@4VhB^%{p)h5sT&Tc<9yK!0W`oY()^WFOGayse3
z{WzzF!daB|n9+MbeIV%OsaWT}M#Z9@QnBkN)e;&<=S5p~s^K)mhvTjE;mh9@zvkZp
zUim-?6J8%^j9y!W^&ZZZ(s87i2rB;hmGfZK2h-Mkch=LS<^`Ba(cP?LJDj;e$16`x
z4?Eqp113W5tFdq64I|Q%7F_8}zCdZRQ<YON@Sp-f<vz*QBA+T~S)_{M41L-l!DHKK
zK-7t9pE?WFpC7%iMz${V_O%vo$m7Gafcvb$D?^9pOd#vh$-cn%QH}G+oX(3X36aI%
zQ)|j2UeJHzePO__>xz-2eiy6wNi>X&^afr2A;&2Qh*1feC@j**86WO%SUj@!%*VS&
zrBw5S4epX$bBy4cM>H7E=M>D@k1*~0<IwAug4*NT902Qm*F7Hpj0YpL{Bu|NKeS=(
zp~<J0>h*SbcP!dG+7PN<=_@7Rq25M;aSg!Ob~pL(3iYN4&5i|z(~Tb*v$fcO@`%i&
zjtj!P?nK|dl}1FZzTAH0fQuyeBk!i`NMp|X$d3mOOHGD=x3`s4+-|WVqI5o$`kNm;
zEOYbqpHJsV>{Zz2Gjx_<AOS%lM!l)DdUkTt)sEWci4ocPCm{ih9ZX4k-|)}}Tlh!B
zg)5L~wvLKl>a(JBX6VxQHgP6`KE`c*0=A>F&2{-Q2<W}vPXD=(Hhl5B=hedPA3Pg|
z&EE#(e*a}VH9pv4?v<zBAkg)Rw9@Z1Fz3;Vx6e9uboo9vOVhK-R7)6@^Yi(t1v5+z
z$M0NMm;LJRWfzKGm2H@w1vAHJNhImEZrH!?)G4pe>s!B>=&B4qO$#Mab-(ia&J5Y2
zQ}@3-{~22WS&NZ<lpRm5*FA~5?Ea^;>|vBRCR=K?ySY`=FU9gTMeCw9`J_M+e}dj3
z*biITm5E)F3o!c-1c{4TZh(FA?H$NJx#hJa$bEG1_V=DgJ^c(exdgLj&WqKgk*<Oo
z9Ji-uzbrJDC%^^s=^A#ODklXd#phK2er&yPg8)V&5pFKUy3pNl7Q=c4@AcgIF@5<j
zLyEy8D%@hs`~Hc)IL7Bv7SXX@G(J)?D_l1|!Ryv$uz4-S?x7%hkJ#oT=vv~t=*Wr@
z&&LZW#;+~rNj4l`pn^iNh@r5jS!b;fzC(({<wo@ICNbR=vymYt1|Whsrpop3gK4~7
zLt#}JXCYTdOTx6_RX9U@{q<?T8pTW%_>s|;%e#AX5C4tBjQ!tfr0TPtwc|6#LuS27
z6u_C-yi3alSKNFlfPuMUH1^mdCEzQk-Rs=1(R_BMY$j384~~H|+r_@utf{NGRrRMT
zB{^dsn-^4nPR>x5!In*)cv<E*8^T}%yiEn{0=#z{ddm;dh<~46|AoIR>k|$>=(+FZ
zY`06AMs_l=PphWCxci@Cx-7W(H+e%CbR;~u^X`cD_~fLH@W|7*qJB@eU8R7mRplz0
zPYm2&Q@3fMyydn|n>HHHhFz3CtJ_#HyD4;5yGWywoV`NYYSk&s2i%$5*3;f!hYuY&
zv_AQ?B3bz@ydc1hgM9klWLD1H{_fW&KXMomKWM#n&kLP2!&dCX-7sBbi*$KA#`^qH
zCVm<px0`C6NW8CvI6iok+~Bq<^+D-Q+=u8iHGR*${y1!SBx}uI1=@qR%yYGCz?=+d
zz1P_%N7{pT@6uU#@t%fJ8p2t4w2}|sx6z)xvEhx4VJl`kt9BVvpq(eY9Z~EGw@4j4
zT<o15lxYz=TkS?)Y>f?g@#CpERsA61Ftce5K9f+HAET&(RvUhm$e${XH$P~yuP64h
zd7Chp{~@x}q1j%*^!Y4}M-RR^>T)7wcGlf-{G-oWYMjkmM|i6WEZOV0e`AOM2J!Nz
zWyzx1zUAcObAGc+a=M<!5-!OYMyn@D2hIt#xQWU0t?1XxJ;KLh;{Pd&trTzLgPl&X
zV}^qzuh$;`i8<%e*z|s*r|bPUYdz75Q7jjPLeCs?k(M^u+G%%l!P=h1&7XxBNOAYa
ztCbz<ddeUD%%UknIikdvUX~FM_bkQ&IkRrkb<VVJ{yx^x)3^vYT}fQ~JFEq_oZ=eP
z@B?td1v8#cH!fLlc+NbN31uxjTc%CH0`|U`{-bh6H{}~POJ*ww0dvW0b@R!U<u9jP
zmb37u>^;IZ=s;jU$VGN8#iv|c<m72=@q&k647Z9?;L~`ltq2=jscNtzBYs|r*>l)F
zmr!2JKe2r61w}<w8t=~ye<dC8OF;YjkAjuFQe|i&)eZ7n2~3}*gcfO^Q35AXfFe|Z
z-J(ojgC#!*-oG}>s0bkkfx))qc@K>(D1!~|lMn?axR3}-B(@Km;GG;BWa?`TzRW0*
zAkp@Cxr51QA4>wI%m*eAu^k*h?zC;83R>j#e@OlxEdM_?qP+}uN0j{$Z~=AY!I$h%
z8+39dKQ_o4P)4yo%NbzX&SdA_B58sZm;B|WHNjIkj`rQ7=2t7RQBw1Kt83sLcd*}%
zkYt50*<!uJ!F0TH4<Fw7U0Dui$R;9O-_=j#xg^2s6ZmcP`eIOK<UNo*qef%5iqhCM
z$AW1jO94FB_~24&Ck85$XZ-RRo-w%0pA%b-WHOQO3MN{l2hPd)6KcPIhyP*dSfG15
z$=@#bFJ!Ok&&QO!<IukM?Ehag`p0~1thUM$B91=BadXo26K!h<bJPqIyx#YI&0oni
zk!*yAqZh(Tt7vSyc)$+ftpG{uSbn=aHrNC)jDiWHwZM<dEsw9ZL#E}wQAYT3I6NJ9
zKiepQ#I=7biA^3yxVuVAZv?^PJN6qorn?Fowa}JND1b>Q|Gy>KpI9XQ@`Y_kN9Gz;
z>A6B7QXRr;Zq>(>RaLt$FT{*pomRxq$(F-t?!?aK)f3A6q=G7P4vb`3GtnOV%6rpa
zW=Eq+=5dhMEgD#xj2c4+JsR#gMNE}zRHQz&L<Q9)r)FD=(qlzWPyeuBum#*rQ~|7o
z92uNR>&RHMY`MPVU~MXi7R_GnJvUoyyCOD!9+v%WKw1>&$uWY}&|dmj$|;d$!4vNi
zt<j=y=I^I|KJ{}$-k~&7>nc@aWFIA+FovKR)|7_KBv{cLgbz-HH{Fey{t*Uc!zFse
z0Wewt{1Sg>1L=mR%kv@uuzRM`1$(rWEYO%7RhI30a3HK@7jJpNg^v>#Wv)H#q465c
zF8NJA&zW&Mu0pV~!WOjBF*q=Di&4qKC?O~(--gk6L!(oEs?K$XP{{00KB%?aCst#(
z__B82tBg+IeZ!ls)|ZVuvxNjRrU0cMha6ap_MUs2MgOLa%nYXY^Osi@>Rpz=8MiE%
zPN=2(k`@s;k3G6GXGZ7g)OJ5w0qFI+36z(79B1s76MGl_;2kz{to7DeG`wV}^tc)%
zxg(9>XbWln!o2+NkpXdc>Ev+SYR?CGG~T?ZeqkuREm_hSqw$iA<Qp60t<xLvN%#oz
zIbHJrvh5PWRuV0JAE<PCA;C0ko;|OpftS|-OHgXuvScm8ny!a<D3#wq*L<6L>bQ33
za?@5n0COI$BE;K_XZqR)2Vk|jL!}2zB-nCFs}m6s$<)7qj!eG@h$|K1Y2?h@!`r$V
z=eN=@nvatHRrIcG#}gsWJbrEuFezZ>_CFL2X>2dOo2gCP@up~tLM=a%=oB&=NkGH~
zCH-UQ$mkkj`XyzwQFy{<99Kr3y;t-A7a>j#LDpw&v=8RTWUm9*pRE52HZKI{uHJaY
zIXn`RHKSzH!vSt13hok#Y!9^CrP-5KuZ`}{A0F=s&8<z@adx~D^lsrE50$Qy)Dda6
z`MZ-p+k35@CH22rT2=^Ay@vrOP08fRzQaeZBp_?|kFtPbKR8C``?q=#m-<IblUe7q
zrSd#blwR-9=$g7!H!X@{E5+p2(MX297#~Dx7p6DbZ947MTp6}U)$qNgr6HZHj$0k8
zS=77j(4wJWE3`7^l<_<ej-T?9@H;^zAp@feHC?Z#HfiIjCqB=Pf9;<A&}ISi(tgj|
zfQKg*pZX!V(7|=BlKvs&uiZP;Hkr4O=)4J~dGq(DkIq9)w3?Xl)BIGry7+3t3vbkt
z-M)Y8Np{zKNx97k`dpgLe$8fevWjmaCD@hTetvOaRtsoTJGWAX*WNsOk>S4Pj6bV3
z)F0~&4Y@PkCosD%NC{bqZI$Dvs<86Ah;|}o-It?Qdh{lf#7hj>^%Mwaonte`r_cUS
zvqWN38A=3Xnv>w5_cpa_7nL}d2PN=Qh3UsNC@t*20t&oj^IL(k889uP(LbFo23BE@
zr(WSUT7fqn+%LiQn7#H~_g6u;FW-GYh;v#-QqBe$)J-i5__+9bSiKgMZtD7vK!iUa
zw2JRd_{Qh4_MYPB{y*vnI|jQwXXXpH!eIf8ccRNh1Ok#WMs$An{hYsh^<zuR*VJAq
z4d-k0gN%qyk>w*CMA$-=Y5HDxV)F7wp6@*TvoJkChz$Gpj$Us>k-8Kn+tnx=3WZ|>
z<hCy@!`4x!65_8C%m|CZ3C2EC9J^(iauAqthRnHiV!=FIQ<(l!hAkm8Y+^(#O1Av%
z1xz@qgy+r3z@Ric$vO6BeVLIdRHAc^Wvj+UV`j~Foy&J5kb0QxHVegA+SENkJUn61
zB!sXWNWc-p(LJSmHrbaXqG9k#aQ2-v(+=VPz5V`)lk872lG}CA{b!$R<5u@T-VaY$
zNKv>A6n0Ey!SW)MbcfrRp~RD7YYn$SjID)!txs`fi>2iyg7uOA;AIg2?3a5Qz>$6F
zuwfl>N?TQ02N`PjMg#!nzZ^8x0h*je9d|962b4|+V`G~%Z3Y~oLOa?ehobVsAbVEc
zXYX1Bnw00j(ec2`uOT&Vf6KppTT@k-bYS$+x`Civ#_JK49?t|`STeEb=usK=tl6#?
zo!J$_lX=^!#qjXM!jsgQ#@LDZL;cNK6xDP4{rKVcH><>U@7Q=4^|stsMVRsAydZNb
z`HD+{-@}yq_PYHK7DjUYv8K<_^+ic&aIpv+(@1RyCrp*buj}9ZG5WQfPn3zaTc$Zb
zncu5|uJ|2DrdkXv8LT$DVdnI6iO3GIRZUF1$s1>&87~MKj3a8`d&33KM>HS(TCYlF
zuafj1R{h5Bw=C&o`74M~r@=JBc0PO5Q8TKiY%x*^`88J^ZFfDkK4TxQ|7fsS6lOUR
zwld&&uN6PHmQO~uaRj8<GLmrCSy1qJPGVQqI&AD(`j4*fPkUt+%yGlT89Kn@&7}=T
z!QWkIN$M!7rR-E?%yi1F1PYX8<)~!atVYqj*l3;bA}fjC>Sgo#AQP}X45ka^7XM;L
z7j1`z&2p#oU3?8YX}pcQ`UR<T+#mQ^8rxtxqrWv`<)q<O<vAGX1k)1aGOWrtNcBui
zU0DPsdmfB;!=rC+{}9ZzM&Bg4t(e^IZ->#X$44MbFb9`$LNM8-&9j<Y=Js;|sLF$0
ziIZq-Ed?_(lRSs~!GIH3Z3kENlTt$L+<r$e)qu9E5cm<NmF`a`yCI2GTg**J6Jl#&
zG+xFZPa&~EM}eOe4`!NlXbw7c8MJ)5*D>yY#&_|v4jWXyk)_`aOI#Sd3v(Yzxu|*s
zwH#J2q)vr{wBaaz{k7+2*Ai8f2-}$m?DJmN@v~2#FQ=18SEU<K+xRLsSs{b@!$%)v
z&EeZZqL_%u^)nlK^p2@^UdbRN*bVs)KLfv?=+|V}_0YTSI43=`iKRDZqcFY2=ziJr
z&R!iX<r3^qBySOeXi9dDteE-Al+6A5^B)smp#S`t->Aql%gIWM*5ayoN|P=2Xt$RG
z`{eLy8nN%AySM{j6R)t8Vk%iG_&dRbB-$9JMgP)WCW;xaUKEpbV7=>b@aj!qtrb#q
zN(b&rP_9jUAKCLEZw77%?wn-etQgTnQ7cb;*X{WSc>mADCJ&TeS)}+EBwtgb+X{2D
zqRo`(O<J6SdH84sF|hpa?jlp!nXg}`-5*~u7N8Wgk#4;jtKGtNo)r%}+9!S;!}O!O
z&rcDr^95YO=wnuzHV$eM@;Jld#8xop3aRYPX!lTSb60U@t{tlP@OE-fCp7f9dlT6E
z7o;3kL31}wOnpO64u7X__h`#Azk`QRw#qeiw9;oo4tKxiJ^To&UJ5&_(d(BWz0C2K
zD+S=ZAN6TS1rN_+CmC1_?eZ1wq4U<q^@~GYM6ztLeNZ#Jf@Z|=CI{@+K&FR!u<r|}
zuK!g!8DaZMV9I=IiVfEEZ9za>cfhoCGRjk{iJ5cKKuLB@-PHDJ4%BM=G^mQAvgo;4
zBU_CjHpx-3sZ=7{0&Ne7xxO0yiH{@5#3ve3%k;#taE=7<q3yuhjTx`$_Uw~|YEHu)
zd_{j(4$}?QV;06x1*mdP@OK91_+8pc^(0tWQ<tr-l=c6Ndhqi!hf4Q|Q0D@YTD&C(
z^e9H7lAjtqNdxWt&stkN+`K<HAdbd1VbZ_=GFA0+QQm(Sd!gN9Cm=n}W5bzX=2^cM
zMd3Sr$`fh^?3Bq#l&3RP`UjPsS5jiyYDg(;L^In*=5+xMV?<0MGJWIV33coJ6o6un
zB+3trH?Sah3XFJgsVo|>;@C2?N%PY)C(p>xo+Ad8-olhf$&_~L|8FzZ(S*{7&5vj1
z7XbUE)G;UsBDKL&A{Ii|rj1r_tYsuGD<EGip8Ju>ko}8ik8|OiakKK_##CkCpp`lh
zsZm^B1%c8LFi{e3#gc^J#angLZ)O6^yl#^<{_-*(7>J`JdvcrMQ({v<L2hlVh#hKh
z->OJUa$`XdJ1tpi1MrPPb$gmh7KVa7iACv+&bB&_B-k?ROw@@Vbbn#8yQ6j0^hL!@
zfb2}{AJujVJ5mEP=wCGB1%kT|BmWmY?-;>$%(ZB>PEoI&>#J9H>dPWGQznJn&^MP_
zZK<gr>R6q4Z5x9v@+D6S{|dp4SGd#7^Q~W3RZy=-x943WFpgj*=Dt=H+ZYhn@qP(m
z0GUl+a7h;<JDv=~+)oznoEcF2@p(N=wx%ZQW9|_E*{p}-e)H4LjQ`Gc!<sr=GsZtB
zu6y;W0vI_?F~X*lkY5KrAHkIr<2cZUCD{@?XYK=-&@CvDkXwhoJ$qC1zsNw3|BtxB
zBnYBV^K6e7n2(n0RU{R8&RO5OM@ss1&MU}e&&*395kO@jcbZOg>S9`1bY;{{swv=U
zj9^XVIK1|e->d$Z*We$}t7xIQD5LG&b#q4QPEX{i65e!jeaex)5mHQ`-U4)|d7M@}
z{U4G?=SXJ$FOo{Aai>&qfRbzxh&D}$=8to`FMFvULD_s6;WTGUsK2i+9$P@=r(bOG
zQ*33>9nt^8=(&M`9aDB%zl~mf9y_{Xucp+pyC=e-3{b+OzKq*w+Bi)FhN?iU@uE)f
zX~OK>!W@z2Qs<_ATgrWGXi54H8%sbqUFsAl!(iVfF8ZhkN2*XxgA?udrhhc%zS%nr
z&M;pEC>*1)b+>*pu&9uyLbUqgRI`VTBL7`3NiFyK&+^B_)v%e0^zoN>WI;pT&S<xZ
zRwh07y*-2teN9e%p1RU0kn+_(6bf;af-~xfXFFBlD4Ly0jy#LK@!wsAc+*!QC<!89
zixlFdIB6FCoi{%25Trd++GR;`J|AuNJ-2?XdaxMzNU2<j(@&2Hgm@r2k1{nrI3pm4
zj4US54t8Y@b(=?n+eA=WcOl3uha9enEERHcC29*ggA!oh9ttmcI=CpcFF&=f2B-hj
z>=F>xl?s$bQfRX-(Bx7yX)4^sCvsc;Dy9NLv@*tDjww;AsWT|GT95)$4Sy{)b#Vj4
zQ4xxzwb(5`BUp}<V7ajksWtvNtFnL$4ABB*87sr`Q^IWBLIaD4RE8Kv^CAppt4mIo
zQdt87G%Zn#DpyZ~l8GWvB3XNHyv(=T^AHu=l#sau*SSeSn+j}hl2C-5dBQWeu@KUL
z4|NVE;6C;w+$cY@umV*K%5m!HF_92wMOOi5G;H5-1|=6ockC#8CZ@N0)>kquA66gv
zwc5gRLXtvy5g=_sAsq=uD7xa;;*->3q^y9Sl9cW0E{nIiQ3w@ycko!kf=a7>fiilf
z^l$o)ZdJdg`@0QR?8xy8eMdoUiWyrUF?eW|O^f425(Z&2cOm`>$V1kMM+)lJIh}v3
zBP?0M_?$yl_s4))CCcLNLBnf^GE^X73mW9o5_x9`13%F<-Frjal~9fGv~&V$;drQf
z1z8is2KB-I4QlCs9#0=%Se%R$f_`pQ#luBp1LA6oCHOfnY5uN*Ryl<$a;cUf&iZl2
zxrwkfCe+na4-OUAH_Dqr=SvvV->+#pw3!(Yw|HgJW+qFrNy;3qQq>L`8r4lTc-SH5
zo%e8k&ihB2Ql>S>?=$sRQsBaq3!{|`l%@z57ST$11`mh&+oW(6$$dj3PyIT+w#x^^
zv>t^Mp%uX+MjVX;;#$Y9tRQTaQcWI;2gEEr3xU)`8L5{G0@-^FsVXEh4gACJwt%@m
z?)C8<js5xrb=PttypGsv3|D5u>Zv&`PC0%dVL;Rkh;E=4JL_jIwmU>R;jdT3)=h1R
zo)4l>H2J!6V%KR%nKoI(lic(le`<b8Q<Y2~zmBD#Y##|E)%I|(-rylzJ#{P$S^Nj1
z?F74he8(S!6wjd)&wfBYFg_@gF854T8fWy9Y=g>?R0))}6ofUbg2eUgoFrKAGG#Ky
zPo=y}K?a0@b>&iBIe=pBQ@9T#nb?LQ;rNXv(m3m?EnNC6rq;O`<-CV-=@<d<(VE^Z
z#Pm5zu<jVOZvLr;Zwxluf~15IVPU61ehHYsPjMo!tk4Pyn|XNp_$Ltwg7+~QW%J@5
z0m(zUoGKV8V{q&B_S!R%dMt1+BkP*OVmgcQbNpe2+FnwVAJd-%%sKptYt>~%(yJ_(
z925{kZ&EZ?!&xJIAlMEDtl=wBki_$8?%nXNfz!-Hg3SA}aj=zK!dmq<ns#CWX$1tA
z$47r?0`^3K;Bv8I=kld2F>wwPM))}*rXo1&ku^xX5LDZba@LaY%&Be)t`~1<!H5lv
z<WnO=ZZpYak~xK#mXb84f0_a?xhtI>8UO4&6v|{y$CwpdJ5ADHlReZXhT*P)96{i1
zMNK)0>SHW{5*-$(lRfE-TN2#*u!7TUlzlJ(_&o_bIOC1mZmI(vpZB2n>A9b)D(Z+z
z&7vu#@i!*ZzC=20(&B^K+U_jc?8oz98Bl2B@=ViGXZIhce=IhlT~kk8UOmtX1xeqc
zoe>8B_rHL+0KIXElr=7}012=7_un;jiyd0+a{MI6xXoaF_5i<;`@Ri1a6OQ|*Gbb{
z<Z;}&ix!=3Mbb|~t8H`q1b((fz&y%^jl5tUQ&PW;^x~T2P<oe<CA9_n_bTI^hVr2)
z7Y!^N*zFl#{EVQL2R<8{xY*nCPFVKA{WvR<pW<~H#cLThyb{r6ce9+EF4mti4~UTx
zVVpfmV`EN~4TTI2LLsio8njp%JfwOFjvZMotLvst@>ZDY{MLt5d{BnF$I9goJ7xbq
zdS^U#v!jQYQ+2i1Gj97#9*zA(7F6IOS+HKcR`HdCfc+Lj!>}1JtH=Y1Ye8%Nlq4P?
z33vOgoaNzXI4`c82ai;nJW=-IO4X`DAy`c*_sJswKSw|KD(A)N+jG*c+&zejL6xo~
zs8Z^1PzGHYlM>6cb;&%kq)YGLeDl)r<zHGb@na}EpRz)AQ2^fm5!XS`nN_i;+4E6h
zHEZCwL1p{nh{i;eJw^HU$1XT9*z-Of>b4xJ2%Fj1EaXR4U!D*B5p`2w^ai=lHiuau
zpsOEV?*tiU?eQ&<uavuf$D5E76jtgY-u{CMw~{VWSPHHT>S7SQejjSFJGEG{ya`2p
zT(hjAP;w@!awuqd<<FW8UxlcG)f4U$oLR>bK$0IvBCl|E-_1*Eby~SRAZADM;?WBb
zFJ(b%oAg0z47%42{ebqVjnBd^UD-Xd9mXi@+eB$Jbt7M^tougFAYRFudw6nCwkjpt
z2TC?)*=3{LI^eu}#c12non|;olJY6}_@F5ZJG@)LOEGKBuypZgb>G?c$34anphu*D
z@LN^Wv(BmXL)~&db;ASG!g&Ujx2x?3UV$n8Nr~n$Cz^f@dU|KPBDX`~UzO4f8rxwJ
zC@)l|z(c+EB4?}k)g%g%ttm%6ya8`B;EQJ@(x^e{WT~L{t7nA<l}l@?f-hO3`bE@D
z_o>4{>7dhpMT~w{?wrZ}RMrCy;Pz&y5VFoB)W@9AML^oVdha)G^E1Dv<6ri;H@d8t
zZFe|qR+bX+4?N9uJ_jb8G^jYM(bvjq6s7k%O!h<syr23!kT+8>eG&9_=+^`~v@H#G
zusR-Q{Rz3PEKIR1(g@V%0kYYSxe*4G>6J91`a1wzYjLcnnJ@sO4Zx^Oso|8#kZ&zY
zR=?CLC>WU19NO`=_^twk=V&=#QesAqGiMgt4H<J*H*u}?90kPv;Ie~@U=u1~*p3~d
zHaWp=dzejepm#%juelt~N`|8l48jYhEQ-H+_8bTEn`0F|nZUaQ1^OKOOW<uBXm;J#
zlZ*Kbc7k(l?lT;T$%c0n$s%*>mGJvdfw<NCAKs~fBT&JY?S)zSeTzp{!X3MD_2*)Z
zxp{x!a67Va@>$m_2@TxwLEr6z8y)vo_RvjQH^4)vio0M&vR&)(jYHL*^0qt%p^8QE
zbBm2a7)PMrn7wRn*iEuFn>?(WlY-_c4E=m9qGOBdeW_?0Z|=xc$w~T_oy9ZXS;nWz
z2g{&Kn=L)JOkA?*uK)d^fedHc6&EeYGAvz+{8lYDopW#=sEKb*&Q{v6?&MkFS1RPj
z&ZvXAf7*bFQCU!8Mv^Lly^B&raZh^rn}4BW06`lbD^O!n*vk~dG<iPdlStUi=Eb`K
zFCYjH4JgCt7~1hLyP)(R&Ot@IPSD*KisH%P{Vf?_*A9Tljs0V%Zu*<=oH->PU!7G}
zhaA{T_}iG_>Cn7MZ_yE>Y*4{9r=vQ*F#NOgKpr~yW34g@6olpFE>+Qu3o11ObtmUR
zak-urJVF}%zBnv9KqX)!k>dKWDp$q+lbTWr7p(+B#UL(2`orI9Pc^TpOFXsNFl&`M
z$2@b*YPpJS*S0fo;9COt4oM3SnCR<v%jr;GxcW)J8g*j_JGJFfnEpd5P>Md%9D2)5
zTl@gd+_|@g<W>Me7&Y)uRmSHss`lD+@9g4AQwR1B+{-@rN3zJy)vzfQ1%wmVcHa!|
z(cQN#ovzz<e!d<ZmQu3VRQ<f{H$X+3=VHFYS5+}bk##$fJlI5p2!zIR{;EQF{QO7$
zmFfH?heY~a8qO~r-jJr!D(;xW%6~2fOuv3gF@9yRp8w$L;yTuq=fhK3V}cHzHVLHU
z7{`^0(NsK;p|_rmc|Wzh%CCAvFjJy|*ZwKb`<3TY>!6U_rS5KgUiKP?VrERB(<RP;
zkcM}`In?y>W)@?;u2RH^eI3!N=$Eot37ium8-B{vCuhblea*ECegj_%A)#u#|8m^y
z>jAkP-fu>a$IArIv$&*gpTokZ9)sG{Awv^Jf9?y+DTHU0rK#q%QsP`Gm)7j&yW>e8
z$vVPqciYFi%-`yDs4`T10?j(VnR{9Jy9a$jZupvfb|4QEC7<u@y3@vy`U*PEr^*I(
z5l_oZ$qEA_gK5K(l>H6$LfG+GwSudc;C-V0B$S;T7ny>M-SCRj|4@-tgrOFpA=TgX
z@ClXM#Hies7T<TJ6j<st+xqX79Rfd18gj;0I+iJ?E7bOtm{kAu){)?;9;SApHEIv3
zG{?qa2Bg#+9R(IzwjIY=ag=%wC8m8g-zWI|ULnn0iN`vk4$fyyWd>eX?n}3UDMOiI
zrRLa9&eHH^11(}$jx6IF_GX8|qgeLq6iR(fgY}~q{3pa$YN&7D5SW0*mq>}GJFW$7
z=uu?YUEbBBRewjG_*_WDJZui!Knqs0($T6nS^=S|-<(3%3(!@p%oC6o5ni@<$U!C`
zZb+O7gH)k!WN(}^b7(j5jJB9eAdO#yia`rt^Kp<%fYz#LKmDV%^8SkM;Q^NejY9z&
zXeG|>PdMK0M?!Te{``PHZ4=YG^(iLPX@Wf4;>OF2eOdpMo|6xS(Ew_6sn392#$c8Q
zARW7<CM@R5MIkJMzGSI;Ptd7D5G&^ros&?bbFy-?`T1s(uMqdO2>ZzVASU><A606{
zhZ{^waU<%wX#S4+^YALsL_zs@s1D&TZ{^`WkIF^ked2xt$4#cArFst7(fl{i?D1ho
zc0zpe@H$uU?Ojxc&xgu;s&;sw<w;(*G^bw(QxjCiitk(=ccrn9Qq|HPkk?q}(_~;`
z#Qi9t?qN4}gJvk6GY?-PzAlGb$N#z-UPWh5Qw}4S7?e4F;&aEX2$KWG95AgqqU!F@
z4-E7HUV!hAEy($3eJ-{t`BRe%-Ce0kdSIO(v}?an0r~hN@Y-uk2dFF83hZfE;J{p4
zaGlW_bYgzh6;~>I?grQ{T0m{4m@^}~GR^9oMD1lps(r;Lc<tysLt(1#bJW>!q<Q$x
z{S^jtGMiB{AK2)4f`HA=7Avk6gcA%Uv<2m=^`8}6PACK#Q?gtTfzK7fs53`2C|`!*
zdM*}Oi(wogYzZ+UuMAqFVs!tOTQU3luEfHPtN(;wziDJ)GPxmv?aLQ@nH_dc#c1y#
zu)bL;79<STI|mp{>+M#!>*~TDc;E6qX!#<nJUoM{{ag?4aE;9n{@D(&yW|ZWw`W#Z
zl5R@F!^ba~fpPjLQFEY<1t??BRI~+bq&U2&-WKEqY7YYb0^`#@hw+r9@rB?!P1vpv
zny@DoH&@ACPB@U>U+lN=mvQC|J+oz&T9N^Aj$$owmLc$^0ZP-PCNh3GIY&&Hz>CsB
zRdB0k2o1b6IN0E&@s*yA&sWVR8JHVPZ=F1O_LAE#DiaU3kB~Qv!N#9Rf@zpZ6#T4-
zcb>hq`lJ1%MD0Ze`DSa4Je<y{GgAsMsaSR5EXh2C=HUxk{%t&pvYjc{)artJCArvX
zcnNx*a*^n@JqJo9VY&O74|dwByY~l!oR%Qxh$ZErIWs+z$IX-mr74S&k-TGM1Z+}=
z^}7juCr&S#3`(bfy4(nlCGF_`>nUH{k4<DfTMTAdPbuT;x!L78Gpmh9*gR|E>dC0}
za3brx%>h-sV<2&_SBm@w)AwWG9g_rcbqSOab@Zk_+KqpqzxVIOm?UeI%on}Eas1!!
zgXQ+!!{XHE7c42@wh7--_*$oZuONhsXrfcLyq<z9<)?%PBiM#{*OJ_ih3tW6IQh?=
zBxt;5-ta%I&-@Ih{-bt_&TaU{c{pSeNv<bfNDA0^{c{d771OS$PjQZoU`mN`Tq&p5
zkUDTDO#%%$!6mYYc7%oEIl<+EOS>4o&P=TZUZu3{%Pr~%#c$yRZ%Ubo%J`aB?bZ48
zHrhhbVEWlZCu2gAKIi!l9PW*HxIqLnJB03uXg}?LGQ2`iw~HamCLwyd3Hd1^8hgA5
z?w|xlzK0$Um+JZy-aTBIl*&gkkHZx94~cZW$0K=EAx99MCgm3?ai3wZgMeD<dL{1A
z8fcT|O?da~qN{uF541+lw#(<t+&>zzns#k&!U6P&zu#BARtiNN7|=#x?K@`{2u}>o
zH2m(bZ`^NvK_rzZS;K0D<9Kw8Csw-zGDwF47uxTZloPDdQ-$c}m${IiteE(m9}C}>
zP(nJ)HG+VJRuuK9<Tc;kw@@F}?3H3)tcmcSIK`J1PSYmA$yhb5NtBGQ9jIn{@SaQm
zWiZKxGVs!@?Hju`Q?>Tzg#;;cnY#NN{q3a|EN4nxtKeXVy4(CVQx|uyzf0tqOwkf~
z8;GmE78fj8i3#xxG}L$PD$=0aJ&Az^crAde)Wv8!LIny{(%f-_uRXK@D(y>!$hlC~
zji99}Pg%d$ZK^?D>8vHhUQ_|X+2#}mO20d3q#Hqlrn(Mg+Pwp5l6)ER<!>Otn%&7o
zrdmZBL)S-b&&7s)$P<UYN9_fM*HSyElq#jP=;SLZPMtcG3@vA9Dz2kF7NNnp|5hC8
z^~i-YOjp_HjWaf*fwkk%$mt2Fn^^TKx;cq6vFgU7QYWbA%_@X{^GK@vYGVSE)MY@4
z*p)24KpAv!<F)j%4L|#CL(ESz>WSm|QVw+OFYX4ZykEj-!Mm3^7w%?KB+99PT<-&R
z;#GAqeE~nSZ}WnjneI+#NHT6&vxP8mMR=^1>x$qTG>xq{{wo-R!MP}e<$K1C2EGB+
z-VBVwQ`bZ4tTZX18pD=!f3u%?p-M`?bR;|lYERUB?KaRJz0-eU^zUc4LAqiZpm!j`
zNi1*fGNaP!?0-e0_J*!=sU<7(B?Q0-TCz3*)bhconB}Gr{}&Bx0lG71h1h{Vn^(=Y
z3s0ne4ijTi9eQbe!8|-llnWpDc(Wc;MjK#_)jIA|0;4sh`n%^TKx|!-;Mmb+oQr}N
zbcjFOafGJ0hqUvNuYv2<S8Az04>^=x2E#i+8Q$>|1oP~i|MRHMvWOkU*tNO)ty~ov
zg721!CE$0ma~|k39YUDju@J0@`%*7<`fbG89L0!<QPl=Y;#btp>(om=k~$jcw;`ZT
zJO9U>R4LBZN`S4@&KYCkwoIh)rwu*!x4qJ+j(9p@Ft`3ONw=>Cb89gqm|8nBATWhf
zj5)ioZdP80D=VL9VTvokUtHmw{3TQ&&K;ISW?x!WVi#;{qzaH1-9A9`2*uOz60!`w
zaG@OeY*`}mrz(c9|J*o&d1#oFClb(;ZVJ^w25wMzoO^w_v<vbr^+_C?_tzX>i%JYE
zGK6nH{7&2H^dGqhO0G?mT)~^E8=I<I8K^(=;Px$xLB;Sr2xs1`tqST+-4540j+)*Y
zXL_phX3Vxlz+)g5KjqxsgI_BI5TvN>*N{JzRl*`y0u~59Pl7nSY=zTD0Akr$f?ROU
zab)eQga1pkzbMfjXcyVzXXXIdJ)_PvG%TewSy3@}VLnK3l7z7J0@msDFAmimc=U=d
zHGk4qHGTa+^k3o%&l?NVRXFB6D?HdXk9y|8A_6Zlnwopc4taffva3z#`g5EsKl0XM
z{)LUX4eI^$TZ<+~eVY<ZrVp(wq`Ic?1qW&SyB4W1x6kk@c^#;7BTU6F$WEBOv#su0
zN?U_(a5YkDHa}BiGIz<o5}b-tVLqrFD_d%5VJUIdMwlE{$&Fo_rtiP;k8m+b_2yZo
z#v|%g20@|PWacV$XW{!{>51560mUQ2`OdoDNV#Lrk%X;28>xCKmenGOQ|~Xbsc0uD
znUYDjH9zqnSAKNOd~0Fy+SlIqPs_C2u-akqnGJu=eM2E7A$#4D96dKH)?gD+_?P+X
z;~;06%?7-8pPSi_Cd<{1Bf?MrGBxhCQmj%ig%&qxgE^?r>1}PaGw$;(rp$Y|NhU|C
z_}|10sF$rnFelEuY)I@TAa_LgIw>r$eoUdm=Iz0sr@T$MX76@h(c50*&WK+q-35iH
zq38S2_MXx*yj`oPH$S#<E{7jjcm$qpF;nfBXMwrJ)A}v_oHxV%-cqyH9fiv3HPPpT
zyiKtt`mp^+&xcz(S8Fv-cPkzkTPzOMyxW_+xvw_%Qx>(C-t@Qm^RlAK%A^16Un1WB
z+7Wr*6S!qgKXT)OoO}0hnZ$<(>TS{1IeeShGNUDfHM3tXZ@{^B%(|GogIir^Uq`2o
zfMKtasx4szKiu>(JVi~uV6~qX=6*;y$b98N&iqK#=2_e{5}rFU^=V*boLVRIRa!f*
zi|X)mZ46jH<Kl3D9Dni$rAiSJgkpZVYPEQF{}m4%epYoc#5+6Djmhx9kYs67A<dJ%
zZ1QK>;p;N&oB}-cbL^fH_<|LJ$`vXJ<rPW#PP7iu*$po*D0gbRkHA+h6yYRSu0wY$
zTqZljU!C6}n{V{>_kajVmYrSiQhfDM;HExLG<tZ)k44X3H~#wO3N+J9T&w0C415@P
zF^bOCWo1Ow2j)M7+XRZ8X#APtbO(J@ntd@R=Z2ySqV$hAnzZ<`vC)?GqtfX5)@p+!
zO<U39@pB{R>Am+Wzn$nZoH4U4x`~+B+7vfAcqsuOi_-qCw@6chXH`wRj{f?*iTWDs
z?{`!DrcP*|Wcg5d&zrezN#e!Mnb$a*807!8-)8#X?NfFPbloCtVM+V<OPlR5s8J}Q
zn<U(CRCd>V&Kw+Nys!5}Wj7Kv58afT_0gvI)S>S#9V&ai&;hk<Sa3pJWXqdQ??&oT
zE(lj|O{Pp;*Zy;8!A!E{0vFV>(?xdJLG#n==f{}TOD{^B`q=cB)`OQmznl5?GerZ9
z?r4gqMd=LQi1v64CPB>+U=D_AeyUnix0mnQr|arT+Gw=;K}2-OkB3LlHmSLdsAN&t
z;TsfdXppmj=xlI%iATkrnT=U)u<p$-CA^gwn~7}pT(oI><gCXJLptwR>))+>j<PMy
zn6HGw*U%3Xza;Y{d(rnk&j*r|hY!@xw*1qu1eN)wS(9tHgynQtXw(*7T3qevhAY(M
vemk<Vf1t8=Plcy);m#2&^LFzWF0+auYnEQWxxM@+f<F#6uGW_=S#kdtJi9EE

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/website.png b/public/assets/images/media/website.png
new file mode 100644
index 0000000000000000000000000000000000000000..2772fd2c5fc4a979ed86bce1401ebde30292b05c
GIT binary patch
literal 17639
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
Vv}Iiih*kmsl)Ane{)XM7{{=W7f<^!U

literal 0
HcmV?d00001

diff --git a/public/assets/images/media/zendesk.png b/public/assets/images/media/zendesk.png
new file mode 100644
index 0000000000000000000000000000000000000000..73b6757d3e9d47a52e1da0d2dccde9a4982a45f9
GIT binary patch
literal 11964
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
Pb0%X$^E*}gk6-*h5oc3A

literal 0
HcmV?d00001

diff --git a/public/assets/images/note_placeholder.png b/public/assets/images/note_placeholder.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e555c8796bf0e0fe8825f1eb80bc77344722e70
GIT binary patch
literal 33879
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/portlet-collapse-icon-white.png b/public/assets/images/portlet-collapse-icon-white.png
new file mode 100644
index 0000000000000000000000000000000000000000..a415159f18616cbd40c3ca6ba99c9c163755e072
GIT binary patch
literal 240
zcmeAS@N?(olHy`uVBq!ia0vp^d_XL~!3HGNrubO_DajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_d9MUy;T978H@J(=Xl)u15Yy7n?lP^`-<7TI;qTUVIHE?6Lz
z$MuFgUSMNW*~AZGeeX~6%#uhxGJEPD1r32Yj_gbJK4J7M-zLp!X3+3RE#$(+bwx*|
zWD=NCRYE?!S)l#rFjs~_)1B4N*JN5L@$A|res1E#KGUbWH%6}6&@^vN;tQ=8x9(X6
oix$7Tw~<jZ!~Wk>KSnl&J)*JORe4o+16{}9>FVdQ&MBb@05T|A9RL6T

literal 0
HcmV?d00001

diff --git a/public/assets/images/portlet-collapse-icon.png b/public/assets/images/portlet-collapse-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..5f4901f1c38d7012f6492a95f9d908c48dd9de04
GIT binary patch
literal 269
zcmeAS@N?(olHy`uVBq!ia0vp^d_XL~!3HGNrubO_DajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_d9Me99X978H@CH?vT-=5jBp|jD)pv7d<n%LdnbSKm?9!Yel
znc7g5s}RR}L`XsUabtv7$93k7a&o>^0j3IDKPvP_H&}>uOl_zT7I>X}aS8v_;HFh~
znLa;uQ{ZDtGE|6TKC;VWR>{JoqySUti_Gc5SLPpb*u&Iex}btJM2BY;n~+6@ACsju
zU&r)AK5VQk0`AUFKe(}Pnm;wM?obDxj3P%-kkFL}zBfb+_~yFs2_!I_D^^M^_~XC{
PbUK5ltDnm{r-UW|{4`uQ

literal 0
HcmV?d00001

diff --git a/public/assets/images/portlet-config-icon-white.png b/public/assets/images/portlet-config-icon-white.png
new file mode 100644
index 0000000000000000000000000000000000000000..2f3a27211307ce19690d9628ea217f4545508417
GIT binary patch
literal 320
zcmV-G0l)r<P)<h;3K|Lk000e1NJLTq000aC000mO1^@s6B4M5f0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy;z>k7RCwBy(!Z-gVHm*ia}FhC!7ZDO
zB#XhHpcG{_P>ixDb-QKokJ#kTkj-fDYrl6?*FvbH&iy{OM@g@v^VVlM=lS)%J+|k0
zR*>UZ0Z-WHUkn9Auz>q6;R7usaKzGYq!c=6BK<g#ZMbwCBMqM86Ib-4fvLku=S||K
z-`W_WXu5-|Gs~$Vr^z#nEg9)a1v~s=fp1KZN9Z}YjxF{Wpri$|_n61vDt>T5AC95>
ze?kTgtt?}FA!-V~CrIl9&gjB^6)fbHR#@wsPvN_bQcYH%jE#Dm5NKQf1Q-CmE9SV`
SUg6;Y0000<MNUMnLSTZUq>8}+

literal 0
HcmV?d00001

diff --git a/public/assets/images/portlet-config-icon.png b/public/assets/images/portlet-config-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..f0451215541c96a4b7103ce661fe4bfc696c1bbe
GIT binary patch
literal 330
zcmeAS@N?(olHy`uVBq!ia0vp^JU}eK!3HFi66di4DajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_d9MQ=P^978H@CH?vT-=0~sp|jEDz^1adQ87g}4r`c?ym6@E
z>8NiuePHOr(vjR4!O>yQ{L!+;Pl)}Ii$Wh`l4Xi`;$}yI4()|q<&1@r0{<BviA`X=
zk@JJ8biIMV|Hdv=hC)*T>7>mM&99tQc))x_D&TB&V+EfXubhJn<B|6bKhy-gnLj!z
z<gtIeX!?V>P}-!$;fvymm){$Hh*fQ<V*Z$-Al6z{B_#0waEFCL7;93p!aCNZJcT@#
zM>B7T95(sk=-j~E(cM_VCh*uNL4kLA!w(~Y_w0|B{s2nOX`fZas%cTk<Q6p9+@XPy
Yp(4bv;as(7HqhS;p00i_>zopr0IV)|>i_@%

literal 0
HcmV?d00001

diff --git a/public/assets/images/portlet-expand-icon.png b/public/assets/images/portlet-expand-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..54b891b5a94c89bc06fa3a6d9f92d312163128f0
GIT binary patch
literal 256
zcmeAS@N?(olHy`uVBq!ia0vp^d_XL~!3HGNrubO_DajJoh?3y^w370~qErUQl>DSr
z1<%~X^wgl##FWaylc_d9MT<OL978H@CH?vT-=5jBp|jD)p}toq`}(@0s^Z+H6^dcK
z7A8L#KiVjyu{`?ju%}aE`7ef#NecVekCZRWk#~}E<Pu~2D6H_U{gHZrp?r*#<GE<o
zBl(RMOda_Sg)AXCq9MFpZWB(vZulW8(9ZBNRfSpK`DmQu)gOmVlzwxjJaX0fw~u4$
zZuZZ{Iy>Z<3l#+74+)n}Uy$XHC2rK$u!Tz?fuV7c)=%m9*hrvj89ZJ6T-G@yGywop
C7+FvN

literal 0
HcmV?d00001

diff --git a/public/assets/images/portlet-reload-icon-white.png b/public/assets/images/portlet-reload-icon-white.png
new file mode 100644
index 0000000000000000000000000000000000000000..a14730b8b13ee598b89a0890f73485c5e45ecf6e
GIT binary patch
literal 324
zcmV-K0lWT*P)<h;3K|Lk000e1NJLTq000dD000mO1^@s6&7<`>0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy=1D|BRCwCF(mx9UaU93--yIefgH<vc
zDfzRr89W3JfCu0SSd=^qrN|&D&%kCNgJO|IDU;#6?|jJMlpFl&Rd?UteY*SJ?`t`Z
zV}4z>39!O%*Gbe-K~}XTW*FiC3$f>$3g{z+9x~EX&D|?wf}EkJBu1#Y{rRZl>^xS-
z)+g;S_Gux4HsZR^*y>^SrSBFtSmTDg74(;fgM?O?qKMF!XRCV73td#0OT#Dh>fH_P
zRg5Bm!G}N%X&tiH&s7^+EKt%U7)?e+fsUra3mv^vHs+)=YknA`?la&n>u*zj7hnJ{
WI9NhaXm_9h0000<MNUMnLSTZC1Bt!>

literal 0
HcmV?d00001

diff --git a/public/assets/images/portlet-reload-icon.png b/public/assets/images/portlet-reload-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..bdb0f08e28e8c623471d3f7e272c1f13f1138788
GIT binary patch
literal 345
zcmV-f0jB<mP)<h;3K|Lk000e1NJLTq000dD000mO1^@s6&7<`>0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy`$<GWRCwBA{Qv(y1F3+CfegR`W2{}f
zRu)JF1F<_08$*T90`X3ebZ~I+W1t#FAe);J<UAn9638hB;`>lVXQ7&mp@t{|aSsqz
zfM^z|4ImBkfu?OlbIA@62C4zMU^5U40P$5OsFUtv(ExKcE0C&zY5)OkCaCp0@%Xy{
zh;IV%4Iusv#O91-1v$`q7E(1au359@1~k-~f%qiQZ+~(4%>zi~1LZwIe)<H&Ac5T=
z43td9VFBFlAWe^;f?Pl>0>rDZ*y0b3tF^Ec@f9j}8;JJ-u{BT;w#e-Sr3#p)7eH(R
r#IK-nmX9SF^}#fN1A=a;93a2|-uPG|G^l7-00000NkvXXu0mjf1!jiB

literal 0
HcmV?d00001

diff --git a/public/assets/images/portlet-remove-icon-white.png b/public/assets/images/portlet-remove-icon-white.png
new file mode 100644
index 0000000000000000000000000000000000000000..ddc6d2c17d90ac8dbed6b84d68cff957fd5e8cd7
GIT binary patch
literal 260
zcmeAS@N?(olHy`uVBq!ia0vp^+(0bA!3HD`>}{<BQj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>Jik5l0IEGZ*O8WEvzdiHDhR#M7hfR-C6y~uU$+5Vy!SU&2
z$%Z^2r@mo_+><(;9dcUsoJStEaWy#T&N>ve!op*o^lTT=De<j&49sGa_c4FW)96hS
zHZy<MIBN%cEMIIQ@0BBa19q`Ze<Zb{Q(=~1FMs$M&LgEB``q}q{ST=0n{Xf`!@}$V
z$8)w7e?lgdE|4%`dX%K_uThoFvSEjK$9cm`I#(H4Bp4WsBXr^(M9BbM%;4$j=d#Wz
Gp$P!7f?t6E

literal 0
HcmV?d00001

diff --git a/public/assets/images/portlet-remove-icon.png b/public/assets/images/portlet-remove-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..e2a02c6290d4654bd86d2b5f258996bba6f98d9f
GIT binary patch
literal 312
zcmV-80muG{P)<h;3K|Lk000e1NJLTq000XB000mO1^@s6z`ccj0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy+DSw~RCwC7l1&bRFc5`lLrgq?=imUk
zlN<C1?p*7l{vb#sCUODqP;Q{ET$^|uH~1!bBn^Z_7B+c2hWTbFQ&e5o!LLgP1J)oo
ztg31OkD!$?=F<j{AHhoKtqCq6+tbi8A87_Tl%mVN)m7q@d8?XfFmZ&o*iM0XgZmSd
zAQm`K{^(dB&=Z<LMFVzV7TjQS=ngRM9UZ_OYzjTZ8FyhOa_%#x=YD~5&W+(~D3dS8
zt23{`fzuGbXbwCP*au}X&X_MlTwc%>I`<rkJf8@s{`S{>1sDJ*f>xvCgG&+s0000<
KMNUMnLSTa6_<Ah>

literal 0
HcmV?d00001

diff --git a/public/assets/images/preview_snippet.png b/public/assets/images/preview_snippet.png
new file mode 100644
index 0000000000000000000000000000000000000000..8dab2248221b72af5d8f459ae2cb835158c5c0de
GIT binary patch
literal 21233
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/profile_user.jpg b/public/assets/images/profile_user.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..26e74b06996f34b252413d639ff68a44a1011db3
GIT binary patch
literal 79986
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/remove-icon-small.png b/public/assets/images/remove-icon-small.png
new file mode 100644
index 0000000000000000000000000000000000000000..382bb24182eb101e306034de7db2455d91285cd6
GIT binary patch
literal 193
zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{Vk|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*D5Xl097<Ln>~S1UT{?P~dpIFSq2E{@vYsbP|(xv36Qd@QRjV
zWOx@C>GHt4^3~^sK1FRVcGXH7_{%Q%e+!)YL-n`4iQ1M{^R^Q$-4f!$yiPVb{<6<^
oA5E)WX!ky#?p;VoJ&OcGB6|nVoRqr<fz~m2y85}Sb4q9e095Wn4gdfE

literal 0
HcmV?d00001

diff --git a/public/assets/images/sidebar_inline_toggler_icon_darkblue.jpg b/public/assets/images/sidebar_inline_toggler_icon_darkblue.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9d47b154f39981a37b0cd272cedfce23bdd8eefc
GIT binary patch
literal 1084
zcmex=<NpH&0WUXCHwH!~28I+MWcdGvLC~c%IlGd9k%5H)B*^gp9Rr_ZN`6u*L&^c5
z2;=|T3@r?d!~-S-V1@&zb|ywfpezu>C5UDGKfoZ!!63~b$IK|mz$D1XEXer(2;(B4
z1KF6E8G#fOuye4nvT!nUF)=c51BKa`fi}bB7=TjD>`WYtoD5vt0t`%y%q)z|%pkWg
zv2m6%GBL9VvI?;&vI{FQa2Sd>8Yzo%20Do)su+t06*fvFO;mMWxbcIUNfDRi!HcHq
z4};B`K2BQX5>o8yX6~M>5gHaQwdv5MN1sxfOD4CZF5Z0j@?%Ylw9lnlmR25~UJ;Q|
z=^2?>W#tu>RjqC99i3fMrcRqaW9F<SOP4KQv2xXxt=qQm*tzS-(PPI?oIG{q>b2`P
zZr*zG^x5+lFJFE6`tAFVpTB?}XJlq#VPR%vVPRooW6cFRS&&6hh}DpdK}py#kliRz
zq>#g@QF)?h(844!W6q5#2QNAoeGq@xWTHALSR&cw<DyM!rjj9Mt|{tV#m$r5N<i)n
zO)U*GZ)pWP__L<elqFk^TzT?k>e8)8uRi^%;U1o5QPwtX*|uZXo_$L%Z=b$=`|<0~
zzk5VvRCLT(vE#&z7e6dLBQq;IXRh3N^5)B*T2@|BSyf%LR_!`<>(#ISw-|VU(ZeLj
zEXZKbaP?DL+jjM6_ugX{ucjDTa;>V8;^LC3%zB-@I_s&2X2y$`37+aJSFN1q>hah$
zy*z<I<@cmtEMJuC7xKOM&oJNlmi#Y<y#4>S{JzT{x8jv<xqsO`qpr=WlV06BcKq?i
zFIz>ge*Jn|xi}~=;9`)==c{31q5eI6Tv<^W%ITBbQ(atDCa~`f`1-1^d4ApNyH*J=
z?fx^Eb}alSKIQD+cfs<Wf5h3<yG^J6p0xug)-nA@S^Uu{>#sjrp1)<)W$l$8PX3a<
zTfJEFU+4Z068i$`pZ{n0&v5niy_cVCv-TTajw@bMcbI$ny8jHRx1Xd5zu8#Hwf}MC
znfueZJAP+*rv1~L-u;*Lk<E@>ymC>kzjwt3D)XDvudVf;`1<N^E4{j}*M3cP`Vx5U
z;>k(NSFJv-8ftz0(uHfT{cBe)iVV0KeDV5u=gCcNt1_5%ifv7uT%H(qIhf2Zeb<uz
z=&t^M1{?N_`WN?Z&HuZ^_PuPit?RmzUsa}rPJCSEo*a}CH*KMY*6Q8fIZrfJu8vX{
z*(y3kpyZoT)vJhftxHZ*P2OuUEs8jK#k6nlJaE8N-{18;?)$sF*Z2NjU-}*xQuY6D
F0swtRsTcqN

literal 0
HcmV?d00001

diff --git a/public/assets/images/sidebar_toggler_icon_darkblue.png b/public/assets/images/sidebar_toggler_icon_darkblue.png
new file mode 100644
index 0000000000000000000000000000000000000000..b2ee4421b244eb1a1602247a74dc4b64ab8dddae
GIT binary patch
literal 135
zcmeAS@N?(olHy`uVBq!ia0vp^0w6XA8<1SE`<)7qk}PqJC<)F_D=AMbN@Z|N$xljE
z@XSq2PYp^<OsOn9nQ8-6r0MD67*cU7$>+q%zvmqo6Bv`+ym%6l76=67Fr46CoM<4$
fCeqI6(7?#h@t!qrwfoFkpe6=SS3j3^P6<r_Je(%W

literal 0
HcmV?d00001

diff --git a/public/assets/images/social/facebook.png b/public/assets/images/social/facebook.png
new file mode 100644
index 0000000000000000000000000000000000000000..db34236c69bd690e6b3253f55a52c5326b9770df
GIT binary patch
literal 2973
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
T&!OdD00000NkvXXu0mjfglT{V

literal 0
HcmV?d00001

diff --git a/public/assets/images/social/googleplus.png b/public/assets/images/social/googleplus.png
new file mode 100644
index 0000000000000000000000000000000000000000..bca8748effadfcb425de28962cb0abd2af2f7908
GIT binary patch
literal 1236
zcmV;_1S|WAP)<h;3K|Lk000e1NJLTq000~S002S=1^@s6M2WT&0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU$c1c7*RCwC#Sj$TrK^)E|aaD}Q2Wa98
z)C7tkR4k?~LZOG!*3v^M2rcwKDD~1)3mz+!ieT~NNogS`Ptu|%sfQ|*7Q||?HlRj>
z(de2;e8u$pm01}#v*zJ8Jv0L!v%9mq-~8S)BTY|F$4yymR`nttk7t)qlBDbs{_Un}
z@Qg|`kusSnwEwhb@)N$DoSc}<X0vfB#S9}gH8n5u^75u=w&+czrKMlgai7oEzO}VA
z9gD>-PH3~)e6_W;w-iN*Y;0@{$+Fyr`v)|(zrSx;U0odyg+e!pELADZylVJnu~<xv
zjg9x9UVk7E_;7S|)Va5}=a`$D8%OWT&(Dt)6cl*XcS(8?bP4Grz7-Z0P66LRbPczc
zRohyvR-51N@2C5+va<Jh78Ch^3SB~ekY;AL+r8{I#6PF^c6N3;(aS|eMG;KEpUg9b
zgj&+W!@~~hp*9~$!Oxib<KtsF91hpRe)S^hQX=Hr_V)He*wqEcQA$cmMl=$P!bu{V
zo13q+-+4S9={!kw2{Cia($dm9NK)R^)YM&ET>KXHT!yVbx?HZOD=RAl!C>&wd6J22
zDXG;$eW;xkBvC3WD__Ga`>Lv{qVx=8&(_!1`}yqD-rk-dj;IoyAxx6mf~~EsP6U2z
zadEK&@%KqIK_Z@+nThLVEVG^p1PH)pe`3e&c27ARjvl?Ap656TD%CdF>>E@$ioUP9
zx;ny-A=7jrCWj%Vte1~f4J1?x0g<nvq2VzuzaZ0eA-fEMfI>y7sHm94SU1v~7b&g*
z>V1`J@)k-6M+vpGv|Iv-ojjFHqn$Ov<w<jM^T_V*u5DpqA*}TSJqd+j;dDBC5%58H
z<8v*UdL4;G2H34Vo%(4O1u0_g2g@>wUbs+dqyFIFpgto)UINs&KWPm%>P3p16nPyc
zFbkE-2$47G5b6bfu&%Do4b>{qXjDcme1V#H8{{$6#93%y0*PP(PBe&jABmPJdNvdi
zvJaP04SLGU%f~<*<YzfQKkr&wTN?uLjbvevlrYsYlj#~rxGv?(P)c@5VPdC&Z^Vi_
zoqtH#TH@yjbA&m<|Cw;{t|zOEW>c11j`05=q~(1#aD{`!!DHk}ln=PYNQZzn;DNdu
z0LFovMoM@OpgsHtpc8N~5*O`R0k4rNodUiCr>7X|@eR<=uHQ3aLkJU2F}Oz3%1qUM
zqX;`VJBp+r!g>Zn2p=+ADZq$kY?MiturG9teU>uyQu0FD8{T1IK?L`iU7rF2{Jz4-
zYC#gd2Ks;~d-jZT99_wNc3zENq&(4v#>wnS_WdM!iHJo+nWVM=Q?nW}J%6hJe`8M4
z$Lz?rE?}5>?1jCQ!r?m0m2^#;&tJe-&VJr>CDoIVg8dRZFgQKM(6lEkTqyH|FDhX#
zbCTyeWF{6CnV({4+7B)y^qOinLo!VVC+VclJF|@RjS)5^b-I~^^wSr>Z5D$>G{G>K
yZniluES8xEj<E@xiEmbrZ{!xj|D5o*00RIa;eyQ}bz_JC0000<MNUMnLSTXgh(GrL

literal 0
HcmV?d00001

diff --git a/public/assets/images/social/linkedin.png b/public/assets/images/social/linkedin.png
new file mode 100644
index 0000000000000000000000000000000000000000..20779f9d33021a0ac9cf9294f266b9ec649b98bd
GIT binary patch
literal 3004
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/social/twitter.png b/public/assets/images/social/twitter.png
new file mode 100644
index 0000000000000000000000000000000000000000..4399f545e1367cbe2e6f230753a6d6d883df5a01
GIT binary patch
literal 3055
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/social/youtube.png b/public/assets/images/social/youtube.png
new file mode 100644
index 0000000000000000000000000000000000000000..d2e54e639c6caa85b1366cc3b7ee06230c34d230
GIT binary patch
literal 3300
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/sort_asc.png b/public/assets/images/sort_asc.png
new file mode 100644
index 0000000000000000000000000000000000000000..a88d7975fe9017e4e5f2289a94bd1ed66a5f59dc
GIT binary patch
literal 1118
zcmbVLO=#0l98awuV{<Z@!!LxlD0<K~@1>uMt6P_}u4rcI3idKFP2SpU%ZJIE?RL`X
zK?Oyo=*5GG2SxDYK=7akJqV&hrl{aWJa`y*5xh+1%i2y4V}gO?edPc9{r;a9vjc})
zn|Cxb4AYwFmvVG%_ui)U^y_4!ujsO!qzYuv8YUIR!Aw%KiWp=JrG#@>(I!s4#N7<z
zAJ+2)Qjm`ds$~Qf&n8$kY>H->?w+cxsH2#GA};A>g8lyFDGPKh!5)vuP_{)}*83+N
zJUBU!S0_i+E{*Lu1iGsNB``2iK-CyCU7?y_mv{xb_pUh>ESZqe1Y2{eAZLMSIT%EO
zFrdOH1W^=3p>Qk~I{<iyAP0F4@c|SQLc9PWs6Q-KbF^V0C#CCJ^ps%BgxCVdRVtNW
zB^0!r5{J6Fx;ze^4^WGMJ7E%~8Zh164F(Cjs-xRPw@lzMDn)CYBv|TcEd;}s<z-^i
zttX16jH@a(hk}qZ3@@%FYnSBkA2(LCcJmW9=5pAz#vPT`V|aH1OmnxokY`A}5so=J
zEs8QGS?aifO_GrkEd3MIbWMOL4iSolVT^~-I6{4)IG>J+k#s5zQ@j{%aIA!l^GQjJ
zqA1Uc2%!{8qBKfMNh#9DCnKS_*uZ8?mnf!+8@f8xtz#prVg=E`3bCBLWsNmDAX~PG
z<(4fQh=UOzE2?gKXRkc9XeI3Er?HlHECVd%SI}3`hy1_du3@$R$r(qT;k@Sft63UX
zv;)2Ea_iH>^6+4jPK-lG<IPpyQ94#vGEy>M{Zw37T<r1BFzx;hUrXn@cb9)YK9k?s
zc5~+a{$F?I@W<X;>z>~~zlHzO61x51(V4jcaKrcIVDG$-d>)z}S|7f!xxYhfUE}Kj
zug_h&HZN}go22$5Ym1}P8~vYNx7-~$TWFJ;_nh!wFYSAQJF{CCo=xpK8^7?iY1^!H
haOA^1<p<mdo-xN}_lDcv4t?_`K9d@d9`>D_`VC7fU=jcT

literal 0
HcmV?d00001

diff --git a/public/assets/images/sort_desc.png b/public/assets/images/sort_desc.png
new file mode 100644
index 0000000000000000000000000000000000000000..def071ed5afd264a036f6d9e75856366fd6ad153
GIT binary patch
literal 1127
zcmbVMOK8+U7*1U&zKRu5sR)h{1;yRWWV^4}ShvZpU2*HWU2!iy(qy)cZ89;Lb+`3m
zMbruv!GjkO!3qksP*5)lD)k}=Dp*ht-n@8G5m8XoN!zU+ih_Y;=AZe$?|)|~*Ri8v
z(dtDU$2DZy)jV65`|pB!_H}d7Cv0h=sUqzpC0fy3%q0!dg+a#Bx^W(BM*oq=xP{{a
zC9_bZ#q2IgCss)FbwX9kVQ7wPX{|b%-is;d!ri7V^Y8E8=YeU+{JuyQW*r6hnC$~D
z?i}bS=mWia!r)uCftISo2rNuBP__DOPpZoN6tBeg{;|M=DHYl)^V3chvpJv;7lTL$
z26Y&PAc{gL+#HL=wg3?#C_qs_Vi3iouqZ(YW*(kdbB&UeSJN}Lm?ZN(lsb|iR4SEF
zB^)Adw}29fgwG+0L8cM(`faLJgSNN6#-L(PcTI<y#0Ea2)<w!x=9#C{Ay`f}J4<YP
zGl^m;6RMgcpb!)+%a3bH+oO5>+l@K3y+Xf(g*^61+0|J+O6zN2mb<?j@)emk(r(ve
zMbY|HqL(df(~K(f>?UNGh6GU@A{1+eF%d@N2(^XdVmhis(y25|iAr;gV=io5OsYy0
zB}Gv|2&GUGrBPB%s*yG^841Ug8a88lRI_zlvuiTDGuXsmv6A9qjS{y&NMEf3ay^6+
zuZK85>5PD^rkl1e`{kLAR>iJ)6dP%mSYRr@k~xQcDE=$%X{_--ITM&Og5Ml}G)wJ>
zb)dhUZG9%p4iC23#JFrUCcmwHz{cugMoku~ue-kg{Mj0~%`FeCcz9jAdg}QET-kSG
za`+2B_+lRTaeAVz>E`F1pN7h>B=BbGqcz13d%ywZR&4OjkNNrF_U}#EcXDGa@V52B
z>JnIW<rtP5*FLy5xa{DKx+PmNxE(mN_xRU^jduh4%fq8D=O4becw{5@k$}r5pMp!{
qL-nP=_~ypl8%E9_dA9N#SI7Pv4V%u6t+Pk{(a)qh)UmchCw>7#s%CHi

literal 0
HcmV?d00001

diff --git a/public/assets/images/sprites/glyphicons-halflings-white.png b/public/assets/images/sprites/glyphicons-halflings-white.png
new file mode 100644
index 0000000000000000000000000000000000000000..3bf6484a29d8da269f9bc874b25493a45fae3bae
GIT binary patch
literal 8777
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
B7G?kd

literal 0
HcmV?d00001

diff --git a/public/assets/images/sprites/glyphicons-halflings.png b/public/assets/images/sprites/glyphicons-halflings.png
new file mode 100644
index 0000000000000000000000000000000000000000..a9969993201f9cee63cf9f49217646347297b643
GIT binary patch
literal 12799
zcma*OWmH^Ivn@*S;K3nSf_t!#;0f+&pm7Po8`nk}2q8f5;M%x$<L>SdAkd9FAvlc$
zx660V9e3Ox@4WZ^?7jZ%QFGU-T~%||Ug4iK6bbQY@zBuF2$hxOw9wF=A)nUSxR_5@
zEX>HBryGrjyuOFFv$Y4<+|3H@gQfEqD<)+}a~mryD|1U9*I_FOG&F%+Ww{SJ-V2BR
zjt<81Ek$}Yb*95D4RS0HCps|uLyovt;P05hchQb-u2bzLtmog&f2}1VlNhxXV);S9
zM2buBg~!q9PtF)&KGRgf3#z7B(hm5WlNClaCWFs!-P!4-u*u5+=+D|ZE9e`KvhTHT
zJBnLwGM%!u&vlE%1ytJ=!xt~y_YkFLQb6bS!E+s8l7PiPGSt9xrmg?LV&&SL?J~cI
zS(e9TF1?SGyh+M_p@o1dyWu7o7_6p;N6hO!;4~<t3w3SV570<|$VWNPP~TbX3|=X>
z2B`I;y`;$ZdtBpvK5%oQ^p4eR2L)BH>B$FQeC*t)c`L71gXHPUa|vyu`Bnz)H$Z<N
z7UVAHFsR+HLO+(tK~=M@pM7ZMPj5gkz>cXGve(}XvR!+*8a>BLV;+ryG1kt0=)ytl
zNJxFUN{V7P?#|Cp85QTa@(*Q3%K-R(Pkv1N8YU*(d(Y}9?PQ(j<e|z%-Bnrh*J1R%
z%JAF*cdp#Zk#h09fv12$TuGUsX=V-wgNcEGe0hhp%mK8EVPi6@!a;xi$k!wcIO|bJ
zPx8DZ*0Y(ggKhnp2=Ax#f<wKp{=pA29>;NzWoEVWRD-~H$=f>j<LsfOZ;WLF*F0cm
z9PSRSlSFQE>9~PN^BM2okI(gY-&_&BCV6RP&I$FnSEM3d=0fCxbxA6~l>54-upTrw
zYgX@%m>jsSGi`0cQt6b8cX~+02IghVlNblR7eI;0ps}mpWUcxty1yG56C5rh%ep(X
z?)#2d?C<4t-KLc*EAn>>M8%HvC1TyBSoPNg(4id~H8JwO#I)Bf;N*y6ai6K9_bA`4
z_g9(-R;qyH&6I$`b<fg~;S@}+8_8-ItZ!TS<!|pei*+CWiVH?M1CEFM{ij_eP4dL+
zsn%eDn^Kp7vLEn|Dq0`Wt&GpZ?eq^%pqXVR^PA!ZyoGLI7ihDaWiNi$M6h)PNwvHR
zEcA82H5fM6RnpZ!R872>42v|0V3Z8IXN*p*8g$gE98+JpXNY+jXxU0zsR^W$#V=KP
z3AEFp@OL}WqwOfsV<)A^UTF4&HF1vQecz?LWE@p^Z2){=KEC_3Iopx_eS42>DeiDG
zWMXGbYfG~W7C8s@@m<_?#Gqk;!&)_Key@^0xJxrJahv{B&{^!>TV7TEDZlP|$=ZCz
zmX=ZWtt4QZK<Y>x**)lQQoW8y-XLiOQy#T`2t}p6l*S`68ojyH@UXJ-b~@tN`WpjF
z%7%Yzv807gsO!v=!(2uR)16!&U5~VPrPHtGzUU?2w(b1Xchq}(5<TwC<%h0ow%K}h
zTlz}37c^dc?7rEmt7Zy9#q|V+5bE1c06?X{e~%TDZ!@uG_uU!n6VJy=odWKS?p#j?
zn;v){i#`+1X;Ls^(9p!?42vli(fu1D-%nf?-3VKCs1JT^-;{Pg82EGZ&|T}A#wtP(
zR^df|3P4JZ0|weuCV=JopL6MLvYycbd;-Xx_r)Hm1~(2>Ed^G|SD7IG+kvgyVksU)
z(0R)SW1V(>&q2nM%Z!C9=;pTg!(8pPSc%H01urXmQI6Gi^dkYCYfu6b4^tW))b^U+
z$2K&iOgN_OU7n#GC2jgiXU{caO5hZt0(>k+c^(r><#m|#J^s?zA6pi;^#*rp&;aqL
zRcZi0Q4HhVX3$ybclxo4FFJW*`IV`)Bj_L3rQe?5{wLJh168Ve1jZv+f1D}f0S$N=
zm4i|9cEWz&C9~ZI3q*gwWH^<6sBWuphgy@S3Qy?MJiL>gwd|E<2h9-$3;gT9V~S6r
z)cAcmE0KXOwDA5eJ02-75d~f?3;n7a9d_xPBJaO;Z)#@s7gk5$Qn(Fc^w@9c5W0zY
z59is0?Mt^@Rolcn{4%)Ioat(kxQH6}hIykSA)zht=9F_W*D#<}N(k&&;k;&gKkWIL
z0Of*sP=X(Uyu$Pw;?F@?j{}=>{aSHFcii#78FC^6JGrg-)!)MV4AKz>pXnhVgTgx8
z1&5Y=>|8RGA6++FrSy=__k_imx|z-EI@foKi>tK0Hq2LetjUotCgk2QFXaej!BWYL
zJc{fv(&qA7UUJ|AXL<Te#svgLe$GRVt~C0`%AZ+-=S0D^On=i42k@^tJ-LZGdLpRi
zdrV5?>c5z*_NW#yWzKtl(c8mEW{A>5Hj^gfZ^HC9lQNQ?RowXjmuCj4!!54Us1=hY
z0{@-phvC}yls!PmA~_z>Y&n&IW9FQcj}9(OLO-t^NN$c0o}YksCUWt|DV(MJB%%Sr
zdf}8!9ylU2TW!=T{?)g-ojAMKc>3pW;KiZ7f0;&g)k}K^#HBhE5ot)%oxq$*$W@b#
zg4p<<e2}@}ZtI091*fR6EHmhc2JFT&S+9NWaDJ!A80$GFF7R`A%xl6?3MWwFH)kiY
zKkO7P(Y}AIYl!b@wU{Hfoy`qG`h+F#SJJ{&-s<{+@b9bRRm+2<>Ou`ME|Kd1WHK@8
zzLD+0(NHWa`B{em3Ye?@aVsEi>y#0XVZfaFuq#;X5C3{*ikRx7UY4FF{ZtNHNO?A_
z#Q?hwRv~D8fPEc%B5E-ZMI&TAmikl||EERumQCRh7p;)>fdZMxvKq;ky0}7IjhJph
zW*uuu*<F&)uV|73Nr>(Y6)S;Od--8uR^R#sb$cmFCnPcj9PPCWhPN;n`i1Q#Qn>ii
z{WR|0>8F`vf&#E(c2NsoH=I7Cd-FV|%(7a`i}gZw4N~QFFG2WtS^H%@c?%9UZ+kez
z;PwGgg_r6V>Kn5n(nZ40P4qMyrCP3bDkJp@hp6&X3>gzC>=f@Hsen<%I~7W+x@}b>
z0}Et*vx_50-q@PIV=(3&Tbm}}QRo*FP2@)A#XX-8jYspIhah`9ukPBr)$8>Tmtg&R
z?JBoH17?+1@Y@r>anoKPQ}F8o9?vhcG79Cjv^V6ct709VOQwg{c0Q#rBSsSmK3Q;O
zBpNihl3S0_IGVE)^`#94#j~$;<ISbQ+zLM8Q_sWpD4<&Sicl|!a~&A@PH`UFRr4^t
zSjAA>7+u870yWiV$@={|GrBmuz4b)*bCOPkaN0{6$MvazOEBxFdKZDlbVvv{8_*kJ
zfE6C`4&Kkz<5u%dEdStd85-5UHG5IOWbo8i9azgg#zw-(P1AA049hddAB*UdG3Vn0
zX`OgM+EM|<+KhJ<=k?z~WA5waVj?T9eBdfJGebVifBKS1u<$#vl^<Wg*!!OoyJ@GG
z%+_%2Ex-A(=Z(Bs6q~agBwBL+Pcns5yTYUCI_zEv3JOnOB;7f=h8xGf|IQl+Qw37#
z{BhR?wjaFo)FpPNNRkn616I`fE=rl+<Vv=sXw)oTB*nsxZd}^hq|lwuLq2tPYK9Ch
zP~rW|kx{-S+q;ojdznAWu9)x>BvSg)xsnT5Aw_ZY#}v*LXO#htB>f}x3qDdDHoFeb
zAq7;0CW;XJ`d&G*9V)@H&739DpfWYzdQt+Kx_E1K#Cg1EMtFa8eQRk_JuUdHD*2;W
zR~XFnl!L2A?48O;_iqCVr1oxEXvOIiN_9CUVTZs3C~P+11}ebyTRLACiJuMIG#`xP
zKlC|E(S@QvN+%pBc6vPiQS8KgQAUh75C0<L{Rx=;M-*LCs2Bp<jfOoZepIeH1&E9@
zECcRp6~TSaxo9}VYr%Om){SqtW<MPRfw2-K1_c9&KORpSyh3Z*9=_y`d-Pn0_zAw+
z=kYI%Xg`=LN{&qw<HTtk2MKE0r;WoX$l}>a2xcPQDD$}*bM&z~g8+=9ltmkT$;c;s
z5_=8%i0H^fEAOQbHXf0;?D<BP;<HVQI1JZt*v)6RAq&gagO^!F$spXEh)>N5z-5+1
zDxj50yYkz4ox9p$HbZ|H?8ukAbLE^P$@h}L%i6QVcY>)i!w=hkv2zvrduut%!8>6b
zcus3bh1w~L804EZ*s96?GB&<V5y;va8bgv&LhJ<YYLxjoJ6PJ;r2T$n2GZZ+&blBq
zN@;fP%v^kz^?uH{Kpq(Ih{eCW5OnE5%HakzY6sMl!wfw!(lBl{oyDuNM|bEKU#YtR
zTTK?n-{?&5Szx)y^~WKl(fG>F7c5?m?|t$-tp2rKMy>F*=4;w*jW}^;8v`st&8)c;
z2Ct2{)?S(Z;@_mjAEjb8x=qAQvx=}S6l9?~H?PmP`-xu;ME*B8sm|!h@BX4>u(xg_
zIHmQzp4Tgf*J}Y=8STR5_s)GKcmgV!<zLBv<JCu*R*$7_b_L{9GvwPbpvkT@1&MS$
zijYfuLM?Pa-BA2}iX9A(2K)AF@cP6QkvvCLyswdDf?LI~tZ|qKPtWR#^oamFBRcUk
zs5b$Sc+=%VrL*7Ba(pp>$JKTg@LO402{{Wrg>#D4-L%vjmtJ4r?p&$F!o-BOf7ej~
z6)BuK^^g1b#(E>$s`t3i13{6-mmSp7{;QkeG5v}GAN&lM2lQT$@(aQCcFP(%UyZbF
z#$HLTqGT^@F#A29b0HqiJ<ZOKS1P#S0IU6AksffR*wx4ca5r>sRJAlh8kngU`BDI6
zJUE~&!cQ*&f95Ot$#mxU5+*^$qg_DWNdfu+1irglB7yDglzH()2!@#rpu)^3S8weW
z_FE$=j^GTY*|5SH95O8o8W9FluYwB=2PwtbW|JG6kcV^dMVmX(wG+Otj;E$%gfu^K
z!t~<3??8=()WQSycsBKy24>NjRtuZ>zxJIED;YXaU<x|u=Vd7uuZ|>z$@0z4rl+TW
zWxmvM$%4jYIpO>j5k1t1&}1VKM~s!<EQ6q8U;EP6<gFYZ!m%POxUBC$P89e*7OnrM
zdWQA)CjX#LYDI-i*mnQZr;sN<6@SPOXNM}9Rp_hcE;y>eLsCVQ`TTjn3JRXZD~>GM
z$-IT~(Y)flNqDkC%DfbxaV9?QuWCV&-U1yzrV@0jRhE;)ZO0=r-{s@W?HOFbRHDDV
zq;eLo+wOW;nI|#mNf(J?RImB9{YSO2Y`9825Lz#u4(nk3)RGv3X8B(A$TsontJ8L!
z9JP^eWxtKC?G8^xAZa1HECx*rp35s!^%;&@Jyk)NexVc)@U4$^<D$wmm?XpH-Sg4*
z8B^w;<H>X1Dag6`WKs|(HhZ#rzO2KEw3xh~-0<;|zcs0L>OcO#YYX{S<TTw)*(lZC
zIx888OkDY0a@=pFP3fhTGE0#kua@EqJ8hp4VSNt-Xfx&Iq8mr)#UbJIBdW*?_9fdi
z7f!0)Iy{xeM7LDi+*QJ?BdGeD5e0(0aSm&GvjQ!V6CD0we*R)~MbsZ|>N8m6`9pp+
zQG@q$I)T?aoe#AoR@%om_#z=c@ych!bj~lV13Qi-xg$i$hXEAB#l=t7QWENGbma4L
zbBf*X*4oNYZUd_;1{Ln_ZeAwQv4z?n9$eoxJeI?lU9^!AB2Y~AwOSq67dT9ADZ)s@
zCRYS7W$Zpkdx$3T>7$I%3EI2ik~m!f7&$Djpt6kZqDWZJ-G{*_eXs*B8$1R4+I}Kf
zqniwCI64r;>h2Lu{0c(#Atn)%E8&)=0S4BMhq9$`vu|Ct;^ur~gL`bD>J@l)P$q_A
zO7b3HGOUG`vgH{}&&Agr<FnKy|IF(G1iR*`GW247VX<aAlJ2F?Q<={Aib+`}_HyE*
zujP5~Z9@I2PBhiOY}cNA6jXAuIimavj#$XIs@HezE!U24{*GtAdHFvr(O>Fy%K^>?
z>wf**coZ2vdSDcNYSm~dZ(vk6&m6bVKmVgrx-X<>{QzA!)2*L+HLTQz$e8UcB&Djq
zl)-%s$ZtUN-R!4ZiG=L0#_P=BbUyH+YPmFl_ogkkQ$=s@T1v}rNnZ^eMaqJ|quc+6
z*ygceDOrldsL30w`H;rNu+I<VKUrjL=bDy~WtS;;K#ThRGVRMNFq&Gco*pd+ChOJI
zqAbbk-&kSt%3!MCpue~I%|gblH{=P#-)jqQC%xCp|J^jUO>jlS+G~p&0SawXCA1+D
zC%cZtjUkLNq%FadtHE?O(yQTP486A{1x<{krq#rpauNQaeyhM3*i0%tBpQHQo-u)x
z{0{&KS`>}vf2_}b160XZO2$b)cyrHq7ZSeiSbRvaxnKUH{Q`-P(nL&^fcF2){vhN-
zbX&WEjP7?b4A%0y6n_=m%l00uZ+}mCYO(!x?j$+O$*TqoD_Q5EoyDJ?w?^UIa491H
zE}87(bR`X;@u#3Qy~9wWdWQIg1`cXrk$x9=ccR|RY1~%{fAJ@uq@J3e872x0v$hmv
ze_KcL(wM|n0EOp;t{hKoohYyDmYO;!`7^Lx;0k=PWPGZpI>V5qYlzjSL_(%|mud50
z7#{p97s`U|Sn$WYF>-i{i4`kzlrV6a<}=72q2sAT7Zh{>P%*6B;Zl;~0xWymt10Mo
zl5{bmR(wJefJpNGK=fSRP|mpCI-)Nf6?Pv==FcFmpSwF1%CTOucV{yqxSyx4Zws3O
z8hr5Uyd%ezIO7?PnEO0T%af#KOiXD$e?V&OX-B|ZX-YsgSs%sv-6U+sLPuz{D4bq|
zpd&|o5tNCmpT>(uIbRf?8c}d3IpOb3sn6>_dr*26R#ev<_~vi)wleW$P<Wyn_7n0-
zl)LIgF0z;$xTz(0JgW0t|K0{|pl+d7{+{fAW)lB*Qg({z1~qrplnmDSP!2>X|5)$_
z+_|=pi(0D(AB_sjQ;sQQSM&AWqzDO1@NHw;C9cPdXRKRI#@nUW)CgFxzQ1nyd!+h&
zcjU!U=&u|>@}R(9D$%lu2TlV>@I2-n@fCr5Pr<dtPlfA<Z*`%$WS?W!M7-X@Sw}lf
zu7sLkI`BK6gTBwv0nqdk^SqiGBO}U16-Ky}DlzfpVxxnEAc|MG(;#A7b;H&MP*riE
zHr?l)sap(Q`P6U_@Ov18QJwI7yr|=6Y+TbD2PUEPfsh&V{s?8AA2dT>ZNVyKWR7hm
zWjoy^<!R*J%IXEk=E5cj6b=;i9u3uQuMH4{qOT^=OGnt_=n2>p7v8m#$qN0K#8jT-
zq`mSirDZDa1Jxm;Rg3<Jf$!Bj9`<kE;Sz+T_M)m3-f__2l^&CsYnIwV?+%t2FG{Ta
zI-67-X7Fu-xbrdN@cn6z3_k9VZ?2i{<ie%nx)UUiUTLNtHEK)0HD_qUYpV0X30}z?
zM!*@omRu>rAPhC)LcI4@-RvKT+@9&KsR3b0_0zuM!Fg7u>oF>3bzOxZPU&$ab$Z9@
zY)f7<va9`_LvY6!5H@PMYi?(=yM97@*rbrsB=oh`t5ydnN2A;15DysI3n?zsE3{ZX
zq+yK*u5H1rVq8mwv!|dvE&PWazz!0^LY7dozu5qaS3Q5~q}uAQUJN5WW+A&wvpho?
z=!z1Q9;>pKh22I7ZykL{YsdjcqeN++=0a}elQM-4;Q)(`Ep3|VFHqnXOh14`!Bus&
z9w%*EWK6AiAM{s$6~SEQS;A>ey$#`7)khZvamem{P?>k)5&7Sl&&NXKk}o!%vd;-!
zpo2p-_h^b$D<fdz<@`H3n|HeSVR76K@6|_9&-VHAVO=;`v1rN8I|9P)PS7vp83efu
z`yTr9OVLz|?h*IHce7sdT@Ktb#!>NBO>{h4JdGB=D>fvGIYN8v&XsfxU~VaefL?q}
z3ekM?<wNDtI4J<DC6XBgM26Nv#0iut=ZwA#^>iOKkCzQHkBkhg=hD!@&(L}FcHKoa
zbZ7)H1C|lHjwEb@tu=n^OvdHOo7o+W`0-y3KdP#bb~wM=Vr_gyoEq|#B?$&d$tals
ziIs-&7isBpvS|CjC|7C&3I0SE?~`a%g~$PI%;au^cUp@ER3?mn-|vyu!$7MV6(uvt
z+CcGuM(Ku2&G0tcRCo7#D$Dirfqef2qPOE5I)oCGzmR5G!o#Q~(k~)c=LpIfrhHQk
zeAva6MilEifE7rgP1M7AyWmLOXK}i8?=z<j)TsCg#MI>2;N=no)`IGm#y%aGE>-FN
zyXCp0Sln{IsfOBuCdE*#@CQof%jzuU*jkR*Su3?5t}F(#g0BD0Zzu|1MDes8U7f9;
z$JBg|mqTXt`muZ8=Z`3wx$uizZG_7>GI7tcfOHW`C2bKxNOR)XAwRkLOaHS4xwlH4
zDpU29#6wLXI;H?0Se`SRa&I_QmI{zo7p%uveBZ0KZKd9H6@U?YGArbfm)D*^5=&Rp
z`k{35?Z5GbZnv>z@NmJ%+sx=1WanWg)8r}C_>EGR8mk(NR$pW<-l8OTU^_u3M@gwS
z7}GGa1)`z5G|DZirw;FB@VhH7Dq*0qc=|9lLe{w2#`g+_nt<uBB~iQoK%j+BR{KW$
zxUoEE;u<56rl_>>_%o<~9(VZe=zI*SSz4w43-_o>4E4`M@NPKTWZuQJs)?KXbWp1M
zimd5F;?AP(LWcaI-^Sl{`~>tmxsQB9Y$Xi*{Zr#py_+I$vx7@NY`S?HFfS!hUiz$a
z{>!&e1(16T!Om)m)&k1W#*d#GslD^4!TwiF2WjFBvi=Ms!ADT)ArEW6zfVuIXcXVk
z>AHjPADW+mJzY`_Ieq(s?jbk4iD2Rb8*V3t6?I+E06(K8H!!xnDzO%GB;Z$N-{M|B
zeT`jo%9)s%op*XZKDd6*)-^lWO{#RaIGFdBH+;XXjI(8RxpBc~azG1H^2v7c^bkFE
zZ<!d@6;Xr=zrz^$h_Zbcf~Z$lrrBw0nL?BbB`hkkx&01qcs_@(`dj5M$3rI2JKgsr
zS^x~?G~LTF&PL>CVPE+E*Q=FSe8Vm&6|^3ki{9~qafiMAf7i4APZg>b%&5>nT@pHH
z%O*pOv(77<h_P}M1fVl@bA%;8!%G$2v2^1K;a|J|258iaFK<JsY+PvseEryJp$5<!
z9lXGNp5qrv`T=s~_@3Ry-B6o<m;T-lQtjLZ)m`X2mKrN#6`?5SI5G#qCc`>?ZiT{W
zBibx}Q12tRc7Py1NcZTp`Q4ey%T_nj@<r4RLoFiQ1cOG!U!@-f&DrHzjFreg6r@E|
zvE{2Q=kFJS$gwo*FVtl=epg~LzgZ(&E7V*y3ct|~AGvI-3JcYr{%DF#=;?cH6~ge-
zxOld^6>1WKg5Fz_Rjl4wlJQj)rtp8yL3r!S<K<bid;Q+mY&EMZN}!KaieT~EVI>hy
zvZvnmh!tH4T6Js-?vI0<-rzzl{mgT*S0d_7^AU_8gBg^03o-J=p(1o6kww2hx|!%T
z-jqp}m^G*W?$!R#M%Ef?&2jYxmx+lXWZszpI4d$p<r;|3!?@3AW<2Zgi0<hN9ff)N
z(zo6I+-$9Bx*(c$-bk0EGqBsb91nmH7yrN`CVj(QCaD{RJgvV-JPkoBQAwGD;nyzn
z*I;L?L=(3oeAQ<rjW4NvWy!bHdLOHMjezGb#Hb+lSX`#>UN`(S)|*c^CgdwY>Fa>>
zgGBJhwe8y#Xd*q0=@SLEgPF>+Qe4?%E*v{a`||luZ~&dqMBrRfJ{SDMaJ!s_;cSJp
zSqZHXIdc@@XteNySUZs^9SG7xK`8=NBN<V=E)OCgg+S0s%X@m8dOqs;y*2U#C_D)u
z81;Mt5p^uC3PVJP@9PH9!<3b5IE^n;kwm}NvP7!(7^P%;1DOYVJumd1Eg9zSvb@M<
z=8_n~reVNX{Rwy18un@y&;emesWi1XQooSmDu!<kFo)-HRP5pn?;0r-+4i~5mY$28
z(;>M)fRVOjw)D^)w%L2OPkTQ$Tel-J)GD3=YXy+F4in(ILy*A3m@3o73uv?JC}Q>f
zr<Ie&tGbM^0N<roTuDj*?S_O(I}B&He=e8Pl8`tjGg-O~5%TUI<1yQ05r*$Oc2#s#
z8%FWrdDtn79-cwa2pX4M_-JFx9zK7mChDM?zK(~_K9>Y&8SWmesiba0|3X-jmlMT3
z*ST|_U@O=i*sM_*48G)dgXqlwoFp5G6qSM3&%_f_*<qxyINw1$We6It<0I>n!P<uj
z?87vdPOI3mk{cGX^R<>iT>?cNI)fAUkA{qWnqdMi+aNK_yVQ&lx4UZknAc9FIzVk%
zo6JmFH~c{_tK!gt4+o2>)zoP{sR}!!vfRjI=13!z<fc;{t9y2@_q+%poab^!jwREr
z2+#Zf9d~36snX-iZ(5U>5}ijMFQ4a4?QIg-BE4T6!#%?d&L;`j5=a`4is>U;%@Rd~
zXC<xcC%fK=hCSNPW&)8o$8W+KO-SU#5LbV{{RyL+099LpC;6!uxU&{MmE<Y{b<h52
z$81YnCmIWu(0dlOntRk)&>~H7eGQhhYWhMPWf9znDbYIgwud(6$W3e>$W4$~d%qoJ
z+JE`1g$qJ%>b|z*xCKenmpV$0pM=Gl-Y*LT8K+P)2X#;XYEFF4mRb<YTI|Oo*wqC5
z0h9Vcyd1-aYw_k;tVodW95W2hdEX}FLSrp|R+GE56fkm-P)-t$V)|A=l7x|mefFZC
zXMAilrJt8o)%dz@>c~jj?DM@(1e`nL=F4Syv)TKIePQUz)bZ<lVCgA$*!Fmgxl6o%
zjdFR@&JKgonL5u$SS;U)hR2JO%(X!<3`;2ma}g7i__wVr1m~_yKAfNhm3c!NlBG8F
zi*)rX!5cY!j#B&Bh5F)#rbPS@4QDD~@ulB?(x|5|p4JWn*dAG|<;_kq<4J3{W|V%$
zFux+io?Ym>?Bi3@G@HO$Aps1DvDGkYF50O$_welu^cL7;vPiMGho74$;4fDqKbE{U
zd1h{;LfM#Fb|Z&uH~Rm_J)R~Vy4b;1?tW_A)Iz#S_=F|~pISaVkCnQ0&u%Yz%o#|!
zS-TSg87LUfFSs{tTuM3$!06ZzH&MFtG)X-l7>3)V?Txuj2HyG*5u;EY2_5vU0ujA?
zHXh5G%6e3y7v?AjhyX79pnRBVr}RmPmtrxoB7lkxEzChX^(vKd+sLh?SBic=Q)5nA
zdz7Mw3_iA>;T^_Kl~?1|5t%GZ;ki_+i>Q~Q1EVdKZ)$Sh3LM@ea&D~{2HOG++7*wF
zAC6jW4>fa~!Vp5+$Z{<)Qxb|<doy+ePfu6oC(7$`&WuO0q0$+a9a%yz_{5phPWBz7
zW*;>{unMgCv2)@%3j=7)Zc%U<^i|SAF88s!A^+Xs!OASYT%7;Jx?olg_6NFP1475N
z#0s<@E~FI}#LNQ{?B1;t+N$2k*`K$Hxb%#8tRQi*Z#No0J}Pl;HWb){l7{A8(pu#@
zfE<FZzTROa?{|??!(1M&=4t#qdoS<^Na+oYIxC;QnUK0am@X-v$)ut<3yca1@z&t9
zM)d{X_R6>-OTvEreoz1+p`9sUI%<waswQ*s(MUS7r-ADfL?@KW0)mbJ;|S&qT$0vX
z+3A>Y{e5L-oTP_^NkgpYhZjp&ykinnW;(fu1;ttpSsgYM8ABX4dHe_HxU+%M(D=~)
zYM}XUJ5guZ;=_ZcOsC`_{CiU$zN3$+x&5C`vX-V3`8&RjlBs^rf00MNYZW+jCd~7N
z%{jJuUUwY(M`8$`B>K&_48!Li682ZaRknMgQ3~dnlp8C?__!P2z@=Auv;T^$yrsNy
zCARmaA@^Yo2sS%2$`031-+h9K<HTVTe5)EQvp!MW(iadmCJS1wSbK_@ufo=dlOY}z
zCO9zVYKg|I&o<%8Sb*|F!S|!19op-p&g=TZ%N9@L#(UmyHRFj))9t+gQpBfbTesf-
za`2nVU~8Sd4Kd<Xb>MZsIHfB>s@}>Y(z988e!`%4=EDoAQ0kbk>+lCoK60Mx9P!~I
zlq~wf7kcm_NFImt3ZYlE(b3O1K^QWiFb$V^a2Jlwvm(!XYx<`i@ZMS3UwFt{;x+-v
zhx{m=m;4dgvkKp5{*lfSN3o^keSpp9{hlXj%=}e_7Ou{Yiw(J@NXuh*;pL6@$HsfB
zh?v+r^cp@jQ4E<vE>spC#RqpwPY(}_SS$wZ{S959`C25777&sgtNh%XTCo9VHJC-G
z;;wi9{-iv+ETiY;K9qvlEc04f;ZnUP>cUL_T*ms``EtGoP^B#Q>n2dSrbAg8a>*Lg
zd0EJ^=tdW~7fbcLFsqryFEcy*-<UjNQKPSE=_Pn2>8!?;n%;F+8i{eZyCDaiYxghr
z$8k>L|2&-!lhvuVdk!r-kpSFl`5F5d4DJr%M4-qOy3<bq6e{+%w<EWihn1$%KzFfu
z`LKHky~)zdoi4^H8U?2zL}?l1u6MD%jgB7&*;Qf>gdmQb<G$UVN?JmKSKB~L!OR=i
zI@^y#3#{3i>qF1=aBtRM<!CT741&i5jO+s2lsMXtwRPLCm;Sn!-GpQ>7)c_Ae?$b8
zQg4c8*KQ{XJmL)1c7#0Yn0#PTMEs4-IH<W7>Pjkn0!=;JdhMXqzMLeh`yOylXROP-
zl#z3+fwM9l3%VN(6R77ua*uI9%hO7l7{+Hcbr(peh;afUK?B4EC09J{-u{mv)+u#?
zdKVBCPt`eU@IzL)OXA`E<o1(5;mC6=k@-!Ol2~E}J9hOE??)KsP;2EQ2{Z(0gwv}f
z!It<n&*dKHQo4x|g+0u^h~lZ5Ov4IC#Tfq*CptilVN;HXz`iK4{1F;tZh8So5XLY*
zXxgB;G7CZ#<Iv1X4e=NIfHyT;2#ek12;Y}7qA*ja41jVbduyrB$HRMX3i4#!N49oM
z=DRz&*@5P2{)@K+w!!IcW58;P<<)I=(H60m7Iz@T{w1f<%~zS?f9pR^Y*#fpT<Noz
z19vhe>bu`Xp?u0m%h&X41}FNfnJ*g1!1wcbbpo%F4x!-#R9ft!8{5`Ho}04?FI#Kg
zL|k`tF1t_`ywdy8(wnTut>HND(qNnq%Sq=AvvZbXnLx|mJhi!*&lwG2g|edBdVgLy
zjvVTKHAx(+&P;P#2Xobo7_RttUi)Nllc}}hX>|N?-u5g7VJ-NNdwYcaOG?NK=5)}`
zMtOL;o|i0mSKm(UI_7BL_^6HnVOTkuPI6y@ZLR(H?c1cr-_ouSLp{5!bx^DiKd*Yb
z{K78Ci<l%%epWQ$#NR9uIf5|S3KV`ZTJ$&qJ6`ry!VhqBuPs(j#jC&+5r^-xzR6fB
zK27~T)ZekimVRRz-lpCAJu2yR?1~gIvHR5a1NYj$*q3Netl55}ts!oix2<m^q4oKA
zx&s$GFeBD?)7%@b7gCQPQkbzcY-#e<IqbmH&`NOUj{m_7zrJE%0%MGK`P$ftHCCyA
z#QEOkdexcb5q+aRNqFbL{IkS#hFvjjH9v~WbirfMFFJD$DOv0$f8V^PmC)h@B?4Tt
zm|Lni^t};e&92Z{h%k-#j#z#sF&$u2EIp%nX3YhhH9Z@UzRMIVYuCt&$V#l>&Twup
zTKm)ioN|wcYy%Qnwb)Izb<b#d)i{+1p{kvKer6Fm8jK>H>W!;Ah5Zdm_jRY`+VRJ2
zhkspZ9hbK3iQD91A$d!0*-1i#%x81|s+SPRmD}d~<1p6!A13(!vABP<Z{iwC7e4%~
z_Ln8-%lvcLY32-Y@1SO1*q92_(j#+rhCS=CLMntrY3Mry$(OvuZNSYRrU>2kNgqEG
z?AMgl^P+iRoIY(9@_I?n1829lGvAsRnHwS~|5vD2+Zi53j<5N4wNn0{q>>jF9*bI)
zL$kMXM-awNOElF>{?Jr^tOz1glbwaD-<Z?hQEA3Pbch{-zrz(GmD@~J*ag^+fZsaw
zY>M0OKOlTeW3C!1ZyxRbB>8JDof(O&R1bh%3x#>y2~<>OXO#IIedH0Q`(&&?eo-c~
z>*Ah#3~09unym~UC-UFqqI>{dmUD$Y4@evG#ORLI*{ZM)J<p{vwhmRDEF0r$s4y_e
z=sJVWn|ZM-lg`hKmi%p5C*Kde*o`ZFJEf1Ej+^5AxXqpoV)MlQbue7)^k_qkb+e;`
zWde0R#5(=H5cM$dK9LAsdS=Yk0oGNTPVR(|j6Ls{ih2+`6_F=VxMEkqB<u_yrMn-7
zem-jG!zg{VfBK=QGIg$ZuYze9uWx?aDxho7OdK|L{6b`Vwt6C>l=e1it!XzY($S3V
zLG!Y6fCjE>x6r@5FG1n|8ompSZaJ>9)q6jqU;XxCQk9zV(?C9<V#w?Lf%1Im<}?28
z%fv0sO4GSZ%zfKH*&?O&xk<I#mt_{KWN@l7yB^%JPt=7^LfPgcr~mEkBmfFP7Db0M
zd#E!M<3epZs@^{m3?RG}!71NRBMkEamf~hxD%`6taJAN-7_P+KIU~cqcmswNPF@u0
zBEd?J2tVMNdm+C_OO1xnDaP<CvO06_?;7EsCcbdr{cefhRUYuKyPaC&4Q})>+i*>w
z21+KYt1gXX&0`x3E)hS7I5}snbBzox9C@Xzcr|{B8Hw;SY1$}&BoYKXH^hpjW-RgJ
z-Fb}tannKCv>y~^`r|(1Q9;+sZlYf3XPSX|^gR01UFtu$B*R;$sPZdIZShRr>|b@J
z;#G{EdoY+O;REEjQ}X7_YzWL<b@Mth=4xckE^wJmIQPsUfw>O+Ey3>a_KDe1CjSe|
z6arqcEZ)CX!8r(si`dqbF$uu&pnf^Np{1f*TdJ<q2__L6D@tfPK*~rzVm(OhYZi{~
zO7D1Cy0z3WdT1AOu^h7D1_(%nFOYSW(8K@CEF1cpVqIf7{ZixjH(=6Z%>`r2;@SaZ
z#hb4xlaCA@Pwqj#LlUEe5L{I$k(Zj$d3(~)u(F%&xb8={N9hKxlZIO1ABsM{Mt|)2
zJ^t9Id;?%4PfR4&Ph9B9cFK~@tG3wlFW-0<w~5R`uK#F{bA6_apO|PKuT2G1V=wh!
zZWPJWbbu)nGiWn?;_;mE<K|T11{jR4I#*v{H=AUuEc3+UXA@7uIuDpTy`jcYhUz%o
zBA}z0OR6}0Iqx8Rc?*~((>fXZS_L4U*EiAA%+`h%q2^6BCC;t0iO<j7`ENmUd8a;m
zq?b}^r<Irhn?t82<3YNwQO;C@tCYRR<pR}s5&giTT+nc?H}mtH3ZX|EFpV#H_g4in
z8Tbrg7JdfQvFh#<ovHft;`1YsxU2!leoc~Y)qNFc1mAL8P2+9584$1X7q1nBToy)y
z$s4}XIl~zQ7=m5m-cT@n8wijJJ$|#uxO(nL+IWs9qk?i9%s#W2ZxqfW`jt6{wIS^q
z*iUq6jHCeqca?Re1w*!C)k-nH(eV#(PnPU`?~ov%Y+nj9)j3~WBrKHnC<W0QlTNC*
z<u_q0O?_PoEKdE%)ty@V5F=^-=y+E`(D|T`;&Jjf?_7CST84~oRyM!RwLEZ{ZM@iY
zIB{U~Ge+IK^?H|Bpj8js3(0P2EU%fWNhAH!9B5rA(2TXL071s~i2t!VlQfp=S*6A2
zkt-CN_z|1uc9QB1_^Gpz5);n_@pEbj*T#DvuqJuuKb_PutQhcu6?7{m7g7o;mzZA9
zf{W$DK$@&k565^Y7M*vmK#vF0i(Zb4TM%~5g7C?du<oAbjjU>4V=s4Qug{M|iDV@s
zC7|ef-dxiR7T&Mpre!%hiUhHM%3Qxi$Lzw6&(Tvlx9QA_7LhYq<(o~=Y>3ka-zrQa
zhGpfFK@)#)rtfz61w35^sN1=IFw&Oc!Nah+8@qhJ0UEGr;JplaxOGI82OVqZHsqfX
ze1}r{jy;G?&}Da}a7>S<aX|!tNbjGLu?E#M_FQ+tx7QwU!f|T#|0pGw8beze%W}X8
zTh%o9Dbrk*KF8LN?^<3buL7%?KbkRMr_jMII=xY`U$vl5f0r@#H-|^ToExGU<wfLd
zXr+GANZ(jz6qI7<1HwuGyQ7H^naJ1E$XxZfl>CDsFDuzusee<BvkaOnN;I1*%q9kj
z^#m2ll1tq&oMv5g`}?0u!-DOva7&B0@Z!bH=K`f(k?GfNkG{%)>CKof|Dz2BPsP8?
zY;a)Tkr2P~0^2BeO?wnzF_<l4Nvqf<W`7QjWtJDSw)B?FOMa{8DG?kxHAQnVhPF5z
zxnU_-^up4Prel^ed-PkB1+y((Pnm`A;p#0KHiAU@r9|EKB!f~*!CI?=fpguhu1lxJ
zNfwd#_vJ<v;}^GGOcxE|6OXh~-#_DXMEuzGXcF>Ul-ekY=-w26VnU%U3f19Z-pj&2
z4J_a|o4Dci+MO)mPQIM>kdPG1<w<ic`+WErB>xydiR9@#<n}&^Z@zb@F^w%zU4>8m
zh27D7GF{p|a{8({Q-Pr-;#jV{2zHR><r}G)UYxpAdB=!PS*(C~*1H#i#3#T1$j2)t
z81k%ZC~^7K<oMng7XOD4<}b)aGe_1j<vxx~;=~OWNZThvqsq&|9D#PlGC$L88fM!1
ziqq3RXQ^4C*>lGoFtIfIpoMo?exuQyX_A;;l0AP4!)JEM$EwMInZkj+8*IHP4vKRd
zKx_l-i*>A*C@{u%ct`y~s6MWAfO{@FPIX&sg8H{GMDc{4M3%$@c8&RAlw0-R<4DO3
trJqdc$mBpWeznn?E0M$F`|3v=`3%T2A17h;rxP7$%JLd=6(2u;`(N3pt&so#

literal 0
HcmV?d00001

diff --git a/public/assets/images/syncfusion-icons-white.png b/public/assets/images/syncfusion-icons-white.png
new file mode 100644
index 0000000000000000000000000000000000000000..625dcc098c4811f81277ada857d887029eb355bc
GIT binary patch
literal 5550
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

literal 0
HcmV?d00001

diff --git a/public/assets/images/syncfusion-icons.png b/public/assets/images/syncfusion-icons.png
new file mode 100644
index 0000000000000000000000000000000000000000..7ee68737669c88dedce09c50ce1febf90b54a81a
GIT binary patch
literal 8143
zcmX|GcQjnx*S@1ik6uEQ(Yxr;2}bX|6A}}>*9-|F`iS0=Ao>uD-U%jJkPy9%2%?u!
zBEETle|&eHv(H**t$WtFd++CY_Bl7fP+yabn28tw05XV{x-oXl!gfU>0<1;pZ#ZFx
zdp=rL{s2Hi{a*(Gc?AprKy2__P0i5onRkG<|1)nNHi()Un~$Hj+w&Js0U%_d(8S%;
zWQR@xvvQ`Y^9J@#$J>~eh|O3v5k`~F&Ch<1Qu_`2hk06~zWYy};4zQ9e}kKn0!yMb
z5+r>~{F4yP{xRiM$(y%dZ`Q+0ptGHrU*rFfbBfzFr-hA^guO(hSz3>bBw?hLs;u|d
zUJVZpt)qpNqlv*j03}hQE4%+KCkVKVl9w0Y=q2n1Kp`_EL_n`zey`|*_&bVS)m&Q;
z>@}!2AYDd>2u1@ahoz`~0+cmCu)-W}6W~1_;5h2yya^Zz0ggN`f6V}}!pq!n5Mc9;
zofh;y9blt=`bHgi_86#{G=KX9uoMMo+;j$IfuBNvD8#}|3#e}adM7AJ8UP|vK-B0>
zEFXXu4mgf*a)tn}a{(HS6ASrc0R-hXKh{&Z4f1VZ*(cF9L_)rV78b&+yb}<50U9YM
z9H%^G;r`HEM)7C~inY@*0C=BHi~ZWu+mH!z#KeSDN;A2G&~6XG9fz~?=D)4UY9D0)
zSPzJr`X?yT$OL;#0Q3C!k?R2OnLWw-Kun@r1BEgYc)zn?aq9D*Z=QTeYnz|nLZg3b
z531TYeYJ@E=icwoYjOMHDoXw@=6tPt0~{@G7p;kRxz;~+rd#%45`OQs^U|+W&A%-q
zcYj%CI0hlkZI=8rn?_W=De8Gir{ZNC394|uFI>}it{ba@H@J$cl0dzOA}BmvsKU+#
z_d<t<(lVfT0|Njj9o~K4d5Lgg&t9!h2Hzbj-D<w)0$^?sxGw<MtAmA2zcwlj69Itw
z`)K}p73Q-(2Ekr}2YvWUeI$P!rCzIo2m4hiRf%0;5BwbYYGPD*<HqY*_#H*QE3-)S
z8a<24@F5rOH)|zV@S(VNA}Z?R?To&Mr!qoB?Zm$D2ITzKk~4*fJ~#G~y-y2|DiO?v
zdP8Hxp_4ADC1(8Al+8?w<wU^`M>gJ8qdooc2p}HwH?C7t>|Jz&k-~RUq*_~rG}CL1
zk0jq*1H|%D>E7pm^J`*KNRs-n{jK^L#X_p0+OTNvZwA6ggD*sdhXzzX%Lv}fa2fr~
zQA1ii#8huygWHjC?lSo~7>_FYN$))=ykJ!}Csq|LOI=I-pIQ}c55N-l7w$>l!+mYk
z&%=>Xq0_|Oe*bEa!C71^-cn1DbCxQVT7)wEjoP3zm?}X{oTn`f2lBbpbed{fW7^A@
zb4Rc;UqXwCGXu5Y3T+^ieJ98!FcOO{L=T`Jp_$R_CpN@|&dR=}mnIv$#$P?O8Mi36
zB(?~i=7_79mE;*OS9~zNFPUnsTKl2dxXviPf?6UlPj>tj9Ym+B_G9J@(=+;KnCErB
z1KRH|XR_*Nf3uh#-O>D={Tufzn3ODz_SNtkcV5PP20{jR#$blJ9NkZhGl`7DrlQhf
zdpX;=6uI7Jmi*295wz)Fi8Hk`xigvhMNBKJK2@z$k(iyDjhd!b+M7foG|V2EY*ya;
zo>gsDRcN?p!ffJR`M4s!%DuwdRH-z|>NbJEYCw0uK&{m1{bz^G&LK7u7skdAL3Suv
zbzESy<RJIw@%e}#{*IhmmX1V)s>%<tYLB!ZSu`4-zH?I|+|2R4EC|rQx6NCgeH!(4
zh31fNgOB->gl?PIQ(I_NR(6(UwN|xJwdP)z6k@-;@Ke{54y&7Ja+P6i9$Oww_tXje
z!flgzljU;aaymT)xpRbY6|{``Lx*~Bk5~CYPEof#tVq|pd?mDN`}#qo$gSzE=XLqH
zCaEPsBPp0*k#vGV{)?oqw>*o;@ZzzNn%#i1TA5R(Q}+7n^tLJak{=q$8Wc&-hio^&
zo1R0SLnYh<-0a*sdb@fDdB%EepZGpK)_tryJU%x5aeOvcGG9S#PJBCmJAW>JwZ+jo
z#9FYqqPg`cqycUH$?BlF(<|0m)~d|X%-XI|qqeY?Yqq1dqx^n(n|_9Vb<wQ*K>cwu
zs=2a-v3~0(!6KsBvpLeq-I?CK<qKlqAfqcIvOO~SR)LT#exAIV#hN9`zsZkA&RlLK
zZ=&EpDe}u%){cm~<s{|g&qtfh)T4ZZ&kIfRXEfdE-P`<MoxVv-(1{rp&Q=u8XC7J}
z=|XD<ocr3XhfSXs<~Qc|?^i6=9Y`HKKZsu{9+N2ME3$gz|7~DIZOv$FN{OU6Qxv*d
z6J?-g5bciK<`i)eNw=t-t8Xa_uEIDS(kosl`W0^~Zpurqh_6^Vj7j&ljI@jz40sng
z#ICBn<h*me3%i>F%3)j}cie<%m1rBBo6E2W_MQ|axy7d!4fFddN$=ZKXjM{UYGbzg
zYT2KS{7I{2$86_Jq)$92k2Q??J^PK&>6cUDKoluYY<#RmoKlL<8%w4sv24lUsU<c4
zRrPE2EcKOqcQFImIw5UIe#I(b5BUY@c8PYSAz?SGu^*O&mXH@Z4`hY;5mH_+x>x`1
zpT=(#Zjfw-)8~kc*!hHhnCL%?EvKs#rV^CPQr3N=FZ1q5g_6I5E{W@eI+!bkIJBRo
z-<?BbN^0uOPc>V9R{aw#e!VdGpY%@2Q1F*WWrAC6uX!rdI(5l(m-FR{=<<TtJjE5{
zy2M_=)6;xatJw82n%#HZf4K#X);x`E`1i#tu|<S6lMn@MOsm1S5+ZI^{q)<^ns<($
zu)+PQg<H>f!dKa>>LP*h{jtWci)qpYhsAgMRQ*)z@aD2O9Sb2A%U@kJ9<mMczM+f6
zo3!`>apnXy@~v;1`8|IaRPS44Bci&v!}Orh_I+Pt`j8;#9*G(8R&3<n(%inCfu)Gm
zD$?mXu8>)gHsLLTW|2Od_T^9BrI0P=c<--0xl8YwDys+ETqoV8-FAMh2o>3oXH{kY
z$|m<Bn_p-mTQzUmKfidgD3U$SyV&unS*@+4N4~Z5X*p_Q{IQa0sp*;NwW-v>^fJ<E
z?$T@OfH}PLLgLSlMVn5{ts<&>(F|m!_rvYS(;LW5BSs04P_=WJb>nGQtMBQ%Ka4w#
zdrQbk-aOa#{Rhjmf~j%ptiYZo`S8Q;e}#v^LS#~8X2}IZ8=OAsq39jVy;Te=ncPB9
zQh3ce;mpGz7IzjA57oSrJdJ#lyc-*5n|6aS#i`ldm9W2>iw`LZB;>6^wNFh^&lh%L
zW-{DQCX)&?3nQb1ua+DaKQ@PNyG*QlP<S7<QwFS0Ke<cXe%$$Z!uF&!;G|)3i`t^q
zBCk%)!E-lYSN>ndjKOe6K}Q~<%@*2r5Y~kZcf;&37fDYnpLK;E)7{PfD3VoJ?m7+g
z#(cq?uhK0?`SILNjCRZi^BmN68gx3GDetSyt1ZX>P_p^A^z(4(rAKe@`_ri<O$<To
ztI2=q=cyEG_^G+6qj6+$dqpyeva%aWez!Y+%he`bC%KF0|9$*7ilC<xiMsr;H#aer
zGxZ_+Bs-(WGotKvw|9@RZgHr8h_xFP@<`17%=~7*FL)`K<*;Ox!T=q?_LBGR+12NB
zlW*lW8H^bjcX+rtr+-}@2`yslO*R)TV?6)};{pKKD*(8<!;U)u5GV=&yN&=LmjeLw
z-f)L68UR3Z4N+Gy4O#eO8<}QnmU(x35dLVUWI01cwcz!-n!vL+PVu_T{1x9_NsMTI
z>Oq#kWnR%ZWkh+F5jn<mmbPl<cJ(m0HD4A#UxuJcqqep(pLh&I#y(?1J;dBSI!%oH
z7qsA@G(2pjqvzJe%l)C}OLv0hGJ_x0u5K$GhXwvGF%irD54k=-^zuB!^=Kt3@6~Wi
zM*k?~uFw1aKZ9qUk=N^C{69l&sTbA=ci2hQ$r6m-4h`8y&iSB6?ictDF?z;RJnWVz
zp6n?`x54G%BJc=AS=m<n{ELg6?NFitN`NwsedXUpOG!xy?yNO~%h7Ii9S0FkLD0f;
z9x@7wI?*98s8iFJsdpkPD{Gibff`SR6{tb-{tdt0DIdV_SaByrD5iFWW1NSQ813a*
zUt&f^MusC+9e8&n;5T4}hlyWUQCogJ+|NlOKrry2vsgfIFz59R@yUhOi2!PmH~lqu
ztVn@bGnMtr&z}tX3g@Ox&CMTI3h%p+UL3Bb9v}NMxUk(55)#Uhgwn;u$2%p-3cp<M
z0;k>~d>CEULRs6}+ePK&lP)fTu<P8Ux-Pc|LT`Kd-7b&T2VOqJQ;~-4&o2DS%A#YA
zb80C~Jh}Rd53a+d{4Tl#i6>`iPenUHCe#0_K%r0_#bPA^q8Jg#F8h@Mk~b6V*S191
zFZ#D(JM`7;LNay_grH6#qL`ux#h1m%3%XTIadmLaTXZA`U1BbF&JFiOO30kgkLaJ5
zV(~-HD@m6z9VdpA$pTsG8_c1%^w8h$);BFh+X_T$)<7=tKp=ccR8jGt8a&ks`qDuB
zFq9Ptu!O!OSmSmXV}jffvDM(zP-tI&9UL6AhQD%RU?qxK3vd}@K$X8@3&}#W0A7Sg
zry6Md`c&7$%gf7AaEo@8=89XA*;l5t*J8hdCQqk_a**&K+z@({fDQKfHI|!!oFxaf
z&RE|xATK72UDSu#S5G@NwG;uz99MfPzqSWJ5+uxix=NIk9%60uTo8UJF|_2Gbj1(j
zdBrBP7P^uNZh36@OG}Y`#|^qa2aNIaxZF=2-omfXca1|MffWiilJ_;8dR2YS`-?4;
zoS`YDvO_sHTr7A#-KB)dV$xPn9`Xk=z~m|0PEP4zcu@;+Z#*Es6Uv(MKsIJ-YAQzL
zt^yg9gw_C5oH%Nc{@`VjHCn&{=O`S0=bUsU3Ug>n7(9%^bnvn*aNQygZzi>_pHSk7
z4n@SFJ%JM-3pB#);&pG}Xch8r1an&r)CgGiiIRQ}K3tjmA|@PE;F8q#u($7x+y>Z&
z#1YSjw093(t9cx2`H51kyHYR<ylTC;Cpi65TP_tn0CcnO?A+d9hHH>wfEZlNWsDNG
z45y>zu6{3%ImCw-k;bes0Cd7GV^HuNc`t{{SPS?Hh{9px-f4Pf$e5efq8-+PyjTVI
zop$z!4@KbjDgl@2$cr#YBWP*uCW;w#o+3h*Y$ESfhrH;iMfRlAkeLesPjDS3Pou~j
z4OCXb5YpjETc8|@HGD{UT7=~^3Ty#fGDDJ<vI&lafI3i!LGCe~_BAUk7?4>6RXg%E
z0IV4S8DiWdYt?`=;P#GDfWQ$^dgpT>FgHKnmV$moNWmIG*;|3UpdQM33an_Kv;Y%t
zx*JKy2}QxrlU&EFlx)z7i#14UCkE@uQ}Kgb?jOX0E$uI`38X`bcT<CWtQAGsO9%9%
zf8U_d1E|5lpb&S7HDT*QDZ0ex&d$!!iNzl?9sn{4t}$pFX}4}iF6|_IxQDklW?^BW
zKf^%r3MESFiyleO6|O$5Malvc9W?pyeq(XE+ZT%q3y!r<7~--)jtp_BVMXpNspUAW
z8q;<~+sW<k6ke!SDkjpVElG-r`Bot>gy4!!NmmvCJ?^Eijm@GCTvSZ#e&jDtc$AH8
ziLXT3<aRjN6R2-9RPsF-;b|LUIHiL?lf;B(ts&QHxt|;0aSii-94w)P1ET8O8GXNh
zSJ=iSXvyON<(gMjY4v~da&lzMj0I5i3X_Y^Y86mcBVGWMiz`X2q-dKF>iIFtSLf*T
z*En&q*axv+7T`%79|Ue6F;D_lQgEMm;C=CDewf4qpwrqF8<O`-N^rA^-Gjiht)SGg
zKZlH}#eOlljD3M4PUXE@N>f2H9!a5<M-fw&n#p1!3@+ww;*3d2No=G8I1m4UZ+?ZS
ze6tQu-V{hmGTObSMKyxE=BzuId(DP&pj?F_J8}?T=>8Tt`n2REtAjY~Sr#*~imo7C
zb4$x1_mu-&adSFQ;CUJHVsF;kReV@Sh6Rq`2z`V0$A8+~+>9kKT12r8RL$bXiJeGl
zsEOId9>0Fcta)4eng->r)osmCU0W+8XO2K319ceUwws%pBF=t(c9Ds=6ipH{pXNo`
z4tCk$t=)oq45l?et1Bz4EYwD!T;uR2mfmtmH?d=W>1eXpEasLRy8jSmvwMA)cU7om
zZrM5umsj=^LSe4D57XtPq@?Ir<pPMntI*o6ndNYsHs7VYx^wwMTX+jjNOs2-1;ENF
zt9t?$C7rW^wg8tZj8VjM_CO1xOSjgE_T;I4dH`N;i`Kswv@XQL2HL~6;|36ZbfM+$
z9Bdul$~;qq^8pXxO`T<BPr$2KL9hx<d^C<_Oj#*Q+%-4ALhG6m_4k8XJQkaYI(rnL
zOF3A{)HXLa_qT-wra*i~xC7urf|}IiUetcumUMg%erL-G#mWa03JMhHoe;q~k+XnI
ztgAE(iD13xiMdh4raYG9$yYHtTm-{gfq_*<^q4MuWvfswcGgtR{PF%Dvw6K$_A@hu
zLpk=4M4(_dl(h!gBRwR)zBKsIDw~Z6iw8lvME)ySsYpl>#tGt%EAwRfb!p^KPCU?Q
zntGFVMha7bXKRP?z%sa=0;CKsUYwydy*3|&e=ID#Wqjo3xY`|A=WmmV4xFth?ZhV@
zpk!fT!D_$C(XVBVGv*MtUc0Bu?ld&u`*@(C;o<dA))+QrFf_d1P7=#iA;D@AIsu2H
zz)!>dQ0V?~Yx!D({G^(V4RZ>s!gc#GG`;0rHTeLg_r+-*+2YQ|MMD4UOr6iK*pwBE
zhij}FnZBm=iw-6+KEh%%8Y}1M(@<>tuMh|dVtx5i0>Q^`@Q(B&N$>8TKk9;XP~LCC
z{P_}zma$_s5WVZh&z5=~#sgyJLc)8UrxSbR14qU{wpQL=Lw#%M1C*2QL5Bj@^V7Ap
zHA5j^?UK&1VkM=Om6fQ^r6i!SFRo?s2gL0I@HnvN&hOtp7gkq`q3^P-uXgtK5|fjY
zh1f$As>cH}l61a;7zjkwPbyzX-CQE<I>dSU4Ql0uY+HSVQDtC}L9{)zWs!PZi-}tn
z&oOa3G}RO9($@7W57SVTt6xzyMlkuW9Im7Kv?xp%ZU@M5>b}6QcXM=fTr|b0E-&BK
zUBw)xHI4CAikhdO-<a43+<yvIP(Qga<q!0!iq6#KcGqstMAMT0j6KF7JVH=Kcwwdf
zqVREWw>V4h?*6_VsiP2zE8QVgn+YVkL8@x;&H+dTwTfkG@8<?No}Zsz?F3v41I1iB
zI$`N(4d{NHG2PDp+!f=<h}r_^9=l1Q{o1N^YNx|sKj!AP-Nkc}a0Dl#zknAtOcPs9
z_-;=WmQ10zLlMXzSy&m^9ftwGUN}>GS=Ovqn>)iH=)6vUuBUmPq0wmi)QA#ub{25m
z-2?P)d8q_E)(HycNN+9c=~2odb{xk>fHm<;_nw^b+E*}h<m#&FSC0Q&i4b#(E!_gs
zYY_wTX<A@JU3_^v4Eb#8BSMt)A^R05{!B7KePi8NM6l$n4Cr3hJz|Aq)4uv_?kHP*
z^u{K-1ny-3roznjC;I0~YqigV8o=N7rt|`E3h}M8$K86Y5)=Is&*fT}r}&-=pi=2=
zX2PPkmR3?B69cY|=;TUM4}T&5t&r=|Mn5}v5tdXo9|!$m$TfCsOTg9+@(?A?wgxzJ
zB~7rac<!NNLyQu~P7H6W2Wa-=lf?EK<fIJD>s;RZ>E~XgVfseP)5iJ4kIEHh(&QCN
z`1P$zF$ww%z&mTeYaPMUrasL&dHPSB-$J3+uR&q6KRtfq_;TALK|tp<V`2AU-LR|X
zC?)K)<kUWe$3!5kFffN_Ct983I9)?|izZK}%-BNPTCX7yow_|){ICu;Ckm^DGKR~=
zT3}%hJX1haMn>k{=oTF$jIMXXQt)C~W5{<>DC_KnaJG%<J=2|lut>Q=dk4VsUC^JO
zVsPwR@G}4v>cpUEyxVOp*kB`S2RAP_t`r!J=Fio|wkm9njv2pPZS&uLCePZVJAJFa
zEqQE8T|d2Z#^OcmsRyPiuKsau_Axp-x&tJy?q{z+ou^-Zh>aSMntgh6{_Q`|wAmhT
z!Y|Tn*PToA_;Pil=G%G{{+rvfbpV-yv(s(O$!%|MZ&f(bFAGkIANm}>SXK@;zhp1p
zrsf!)IiGkUf^rpy8dNB2Qz<AYxQ7+B<hxEV_y_Urt-TAPfQ25k-56JX|HQPsLE^<#
zpd>0<Ukeuq$o)+MkjFWN1WCv!8TlbL@#nn!&G|FsEcK+Z*yQGZ{M-dTQR!BxB`omP
zK#GehA+wAwo<zYO5Y0f#Vw1u^2vOhC5-f&tz+rehyt!@a{}SbD3{c|rJ?4K}nojB3
zQkpY!CqUMrx{C1*1Rd<tDkF=~?hs-2s|ca@{H;#_>Gp?nvqvM+w)2j9wePWL8HJ<J
zqbS#tEi4nAZ;f4I*@+SrC>+v_%=)|>SqPr{LBdb?x*=;cmI-S6tE)Lh(zq2fq~Tnp
z-Q+Tyav#!?k#yDlQgZ;|^Y8DKFGK)L#zU154mDg@#_l&zVXR&7DKm<TgkHG7rjn9m
z%@`uWO_dP8$M7<v)EieO1O3*I`W}Ei;^o81;hi7r>O{=P7vP<$(|uTa8)s6X4b%y?
zz_s8=5BZttpCxw%{oJktyr`DEsm`WK80><_aS2t^Fk9f6hlk&M0lR>uY4i6g0W;Sv
z?*MIk>jPGcWkOW)`H&edE^e@nwVfx2T|^V3a>R=lFCb-N%d4A!RQB8Ix96PC11a%V
zQ-G*INuP5JhVX#&m+w_|Yk!$hq&}f+kyLsTvZcjgiL!oamI#oSvwQD%5R_pu7E9~Z
zfrmX}GBfGXd4RITJ^?2>Rk|BoQ#U$b#?{1_DpN{399s;{Ds?&r&IAi|GA*9bN~K#b
zIbeVyNdDLt2pfW6)j%rUiUk4MALQyW?=64d2NJe&8|jq^DPZpE8C<2ez%k?Vp@kQ3
z{G`aRG4zL0`U=CQtS>J0Uvq@;j+!9D)LTkz*$suM-ypE@tY&f&&D0hX|G)`M)QF}p
z0~&AN2D{JROo)<7-*mqufSHlo{@&YrT$Ed8T=}Z2s|&;}T`ypD>IL-m_9~Zk4gElt
z-uxFj@m#zmNClPY&rvlp`7ZJCS>ngR2M_l5_s7kqjgYA^gIXzT$sf{x552hewqtz1
zf+Vsnous!)J2&_7cca>8i#zSoU#F7Kzo%hw-~q>Eg2qJcdt_~cy5G_}NIXUatMV&s
z`b=3K3G;25t27xl8ykO*UuD5&GE<wjWvMQ{y<g5!WN{Gu`__s@f;haL|7i)C<&ody
z_kIe|P{Xp0B;8^I?hHwKoAB^(3nxE^7I@$T&k@>o+BUXa-3h@L>u1<FMn*;o%<M=M
z=-6(BuB`A?90k$Zlu~sDWcrr{A_hB%&8u6r=4WPRtbV_%5FZmog<`>6Xkt|%#2HS{
zebZ7U^k$u3*xyV%R~?ztibWnRs^e>$nFYgzz_IDLGns7Pgpj^$Nme4-j(nZWqD$;5
z_q}%X6(wxKdRI0%=4;y=emdp@vC`B{d2B&vq2v*6c~3}g*jf=$>p>OBG_9$2EPNt)
zqvXD$r!U{(iSc<-B@Q-=z6msy;fNTtCArQAM1P&y(l08<W|awc6){{Jy38J8PrhmQ
zruxuG@N2$%2o6I}Z7k>UpTluji7zXdEwL4ojongXlWArkfA5wYPZll=TLzc`vu>D_
ztr>j&;Zbo&8x~$6Wyjbf#U|Vjo+UXQZ5YpN%bM9kMSI5cJhajoY83HT&gZK8?hA)u
z=F&ibj3qJK=8=(7{q@a_KO#2R4GTE3E&k6b>tujE`_-2)@w5QBTL_#4F#YqH^}&M&
zezoI?b^~jsHvFw_9bRzeD#_pb3rK-Y{%_0J0-${d$jtEnTw06#e%S22swnvU5egpx
zq4?2Do7_{iLkKJ^E_(YE3x`xp+k?wJ2z&1D?(FQG$$LwC{Ot2~-R@2k*SU^hpWvPI
zFqxc)j4rm8Q+m7Sg;+9@Jgz7|EqT_R5)6|mWEI@v+TCyF9qdO2!A$qPe3EMYC2QOB
zPO93JS21%PN!!udWH;$wucX`=x7&rk=NVsOWuqs+0%b2gC*Qh)j|#ScK1`q?c3=+`
zfnhN;XHcdSa5A3R^kI5EgX-h}<kJH^ss4U?-ris&Y4{|M&?QHn$MEyi%=eK$g>b3X
zPo2dDysaF!HuO4SQt4W@4ttGQnel*x1Gc^#xzFy4tR_f^uNY6B9*0EeeE<m;>aRYc
zUGwv^ThAk`Ltw7dIX+uYH-eRN^viop$ZU}?e!9fl!9YrH-r&npVG9P9&e`q*ZJPZ(
z0#Vnbw)a`x2RpyFgT@2)mRmM3X`S!0q7Iy+Y+H|XbPoy@Sn>M4YIxWr7ZLJ)$(T8v
zAt!x0iEp~wm-@T?z#sIt$B$}jatBYFFY4bro}918XXWy!L8UMAvT)4M=CNcT_Gd=-
zBYzB*-+!DJZC3mII$;GYy3*Z+p=&$jx?b%)PVORC1jQH2G<bbN$psgMyC&VjLJl({
ze5*_Wk0z~(pZTve6;jp3@?@v4@IU{;>}y>xa~z3NUQhbz=mzhl{wh~RX0h~c2i^IR
z>Fy2P1pMizlN-A6Ne0R1))iNbCI5e`_}_)1#QB*LE>JRbOrUNPMT@;L1t3rK)e)+W
GG5-hZ+=;~i

literal 0
HcmV?d00001

diff --git a/public/assets/images/xcally.png b/public/assets/images/xcally.png
new file mode 100644
index 0000000000000000000000000000000000000000..4632464fdc5d8365d2795ec973e2689e3e70fcfe
GIT binary patch
literal 26191
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

literal 0
HcmV?d00001

diff --git a/public/assets/languages/locale-en_EN.json b/public/assets/languages/locale-en_EN.json
new file mode 100644
index 0000000..cebfebb
--- /dev/null
+++ b/public/assets/languages/locale-en_EN.json
@@ -0,0 +1,744 @@
+{
+  "APPLICATION_DASHBOARD": "Dashboard",
+  "APPLICATION_AGENTS": "Agents",
+  "APPLICATION_USERS": "Users",
+  "APPLICATION_DEFAULT": "Default",
+  "APPLICATION_USER": "User",
+  "APPLICATION_ALWAYS": "Always",
+  "APPLICATION_AGENT": "Agent",
+  "APPLICATION_CONFIRM_CLOSE": "Confirm Close",
+  "APPLICATION_VIEW_MORE": "VIEW MORE",
+  "APPLICATION_DASHBOARD_ABANDONED": "Abandoned",
+  "APPLICATION_DASHBOARD_COMPLETED": "Completed",
+  "APPLICATION_DASHBOARD_WAIT": "Wait",
+  "MESSAGE_NO_CHATS_FOUND": "No Chats Found",
+  "APPLICATION_DASHBOARD_ACTIVE": "Active",
+  "APPLICATION_METRICS": "Metrics",
+  "APPLICATION_CHANNEL": "Channel",
+  "APPLICATION_GTE_TO": "Greater than or equal to",
+  "APPLICATION_LTE_TO": "Less than or equal to",
+  "APPLICATION_GREATER_THAN": "Greater than",
+  "APPLICATION_LESS_THAN": "Less than",
+  "APPLICATION_DTMFMODE": "DTMF Mode",
+  "APPLICATION_REASON": "Reason",
+  "APPLICATION_DASHBOARDS_MANAGER": "Dashboards Manager",
+  "APPLICATION_VIEW": "View",
+  "APPLICATION_VISIBLE_TO_ADMIN": "Visible to Admin",
+  "APPLICATION_VISIBLE_TO_USER": "Visible to Users",
+  "APPLICATION_VISIBLE_TO_AGENT": "Visible to Agents",
+  "APPLICATION_UNIQUEID": "Uniqueid",
+  "APPLICATION_SESSIONS": "Sessions",
+  "APPLICATION_SESSION": "Session",
+  "APPLICATION_SESSION": "Session",
+  "APPLICATION_YOUR_DASHBOARDS": "Your Dashboards",
+  "APPLICATION_JOIN_AT": "Join At",
+  "APPLICATION_LEAVE_AT": "Leave At",
+  "APPLICATION_UNMANAGED_AT": "Unmanaged At",
+  "APPLICATION_NEW_DASHBOARD": "New Dashboard",
+  "APPLICATION_NEW_ACTION": "New Action",
+  "APPLICATION_ACTION": "Action",
+  "MESSAGE_NO_DASHBOARDS_AVAILABLE": "No dashboards available",
+  "APPLICATION_ABANDONED_AT": "Abandoned At",
+  "APPLICATION_WIDGET_COLOR": "Widget color",
+  "APPLICATION_WIDGET_ICON": "Widget icon",
+  "APPLICATION_WIDGET_DETAILS": "Widget details",
+  "APPLICATION_WIDGET_LINK": "Widget link",
+  "APPLICATION_WIDGET_LINK_TEXT": "Widget link text",
+  "APPLICATION_UNASWER_AT": "Unanswer At",
+  "APPLICATION_WIDGET_MAX_HEIGHT": "Widget max height",
+  "APPLICATION_SELECT_IMAGE": "Select Image",
+  "APPLICATION_PAUSE_SELECTION": "Pause Selection",
+  "APPLICATION_QUEUE_SELECTION": "Queue Selection",
+  "MESSAGE_ENTER_ONE_VALID_FIELD_AND_CHECK_OTHER": "Enter at least one valid field and check all fields",
+  "MESSAGE_ENTER_ONE_VALID_METRIC_AND_CHECK_OTHER": "Enter at least one valid metric and check all metrics",
+  "APPLICATION_SELECTED_PAUSE": "Selected Pause",
+  "APPLICATION_QUEUE_REMOVAL": "Queue Removal",
+  "APPLICATION_READY": "Pronto",
+  "APPLICATION_AVAILABLE": "Available",
+  "APPLICATION_UNAVAILABLE": "Unavailable",
+  "APPLICATION_PAUSE": "Pause",
+  "MESSAGE_FILE_CREATION_ERROR": "Error while creating file or folder",
+  "MESSAGE_NO_RESULTS_AVAILABLE": "No results available",
+  "MESSAGE_DASHBOARD_SAVED": "Dashboard saved",
+  "MESSAGE_PERMANENT_REMOVAL_FROM_QUEUE": "Permanent removal from queue",
+  "MESSAGE_WIDGET_SELECT_REPORT": "Select a report table from list",
+  "APPLICATION_QUALIFY": "Qualify",
+  "APPLICATION_ALLOW_CODEC": "Allowed Codecs",
+  "APPLICATION_ADD_RULE": "New Rule",
+  "APPLICATION_ADD_GROUP": "New Group",
+  "APPLICATION_INSECURE": "Insecure settings",
+  "APPLICATION_SERVED": "Served",
+  "APPLICATION_LAST_LOGIN": "Last Login",
+  "APPLICATION_LOGIN": "Login",
+  "APPLICATION_LOGOUT": "Logout",
+  "APPLICATION_CALLER": "Caller",
+  "APPLICATION_CALLED_AT": "Called At",
+  "APPLICATION_CONNECTED_AT": "Connected At",
+  "APPLICATION_COMPLETED_AT": "Completed At",
+  "APPLICATION_HOLDTIME": "Hold Time",
+  "APPLICATION_TALKTIME": "Talk Time",
+  "APPLICATION_LAST_SERVED": "Last Served",
+  "APPLICATION_PENALTY": "Penalty",
+  "APPLICATION_SERVICES": "Services",
+  "APPLICATION_SERVICE": "Service",
+  "APPLICATION_DETAIL": "Detail",
+  "APPLICATION_ADD_FIELD": "Add field",
+  "APPLICATION_OTHER_FIELDS": "Other Fields",
+  "DESCRIPTION_TRUNK_OTHER_FIELDS": "Other fields to add in the trunks conf files. To be written in asterisk format (key=value), each field on a single row.",
+  "APPLICATION_CALLLIMIT": "Calls limit",
+  "APPLICATION_DSN": "DSN",
+  "APPLICATION_TEMPLATE": "Template",
+  "APPLICATION_TEMPLATES": "Templates",
+  "APPLICATION_NEW_TEMPLATE": "New Template",
+  "MESSAGE_SELECT_AT_LEAST_ONE_CONDITION": "At least one condition must be selected",
+  "MESSAGE_MAXIMUM_SOUND_UPLOAD_SIZE": "Maximum file size:",
+  "MESSAGE_SUPPORTED_FORMATS": " Supported formats:",
+  "APPLICATION_EQUALS_TO": "Equals to",
+  "APPLICATION_NOT_EQUALS_TO": "Not equals to",
+  "APPLICATION_DEFAULT_USER": "Default User",
+  "APPLICATION_TRIGGERS": "Triggers",
+  "APPLICATION_TRIGGER": "Trigger",
+  "MESSAGE_ENTER_VALID_CONDITION": "Enter a valid condition",
+  "APPLICATION_REMOVE_GROUP": "Remove Group",
+  "APPLICATION_ODBCS": "ODBC connections",
+  "APPLICATION_REFRESH_TIMEOUT": "Refresh Timeout (seconds)",
+  "APPLICATION_USERID": "User ID",
+  "APPLICATION_REPORT": "Report",
+  "APPLICATION_IS": "Is",
+  "APPLICATION_ARE": "Are",
+  "APPLICATION_SERVER": "Server",
+  "APPLICATION_DATABASE": "Database",
+  "APPLICATION_DRIVER": "Driver",
+  "APPLICATION_CONDITION": "Condition",
+  "APPLICATION_ADD_CONDITION": "Add Condition",
+  "APPLICATION_ADD_ACTION": "Add Action",
+  "APPLICATION_ADD_GROUP": "Add Group",
+  "MESSAGE_NO_SOUNDS_AVAILABLE": "There are no uploaded sounds",
+  "MESSAGE_NO_ODBCS_AVAILABLE": "No ODBC connections available",
+  "MESSAGE_NO_PROJECTS_AVAILABLE": "No projects available",
+  "APPLICATION_LIMITONPEERS": "Limit on Peers",
+  "APPLICATION_DIRECTMEDIA": "Direct Media",
+  "APPLICATION_ANNOUNCE_POSITION_LIMIT": "Announce Position Limit",
+  "APPLICATION_QUEUE_REPORTHOLD": "'Hold Time' announce",
+  "APPLICATION_REPORTHOLDTIME": "Report hold time to agent",
+  "DESCRIPTION_QUEUE_REPORTHOLDTIME": "Enables reporting of the caller’s hold time to the queue member prior to bridging.",
+  "DESCRIPTION_QUEUE_STRATEGY": "The queue ring strategy.",
+  "DESCRIPTION_QUEUE_REPORTHOLD": "If not defined, will play the default value (“Hold time”). If set to an empty value, the prompt will not be played at all.",
+  "DESCRIPTION_QUEUE_ANNOUNCE_POSITION_LIMIT": "Used if you’ve defined announce-position as either limit or more.",
+  "DESCRIPTION_QUEUE_VOICE_MOH": "Sets the music class to be used by a particular queue.",
+  "DESCRIPTION_QUEUE_TIMEOUT": "Specifies the number of seconds to ring a member’s device.",
+  "DESCRIPTION_QUEUE_MAXLEN": "Specifies the maximum number of callers allowed to be waiting in a queue. A value of zero means an unlimited number of callers are allowed in the queue.",
+  "DESCRIPTION_QUEUE_RETRY": "Specifies the number of seconds to wait before attempting the next member in the queue if the timeout value is exhausted while attempting to ring a member of the queue.",
+  "DESCRIPTION_QUEUE_WRAPUPTIME": "The number of seconds to keep a member unavailable in a queue after completing a call.",
+  "DESCRIPTION_QUEUE_WEIGHT": "Defines the weight of a queue. A queue with a higher weight defined will get first priority when members are associated with multiple queues.",
+  "DESCRIPTION_QUEUE_JOINEMPTY": "Controls whether a caller is added to the queue when no members are available.",
+  "DESCRIPTION_QUEUE_LEAVEWHENEMPTY": "Used to control whether callers are kicked out of the queue when members are no longer available to take calls.",
+  "DESCRIPTION_QUEUE_ANNOUNCE": "Used for playing an announcement to the agent that answered the call, typically to let him know what queue the caller is coming from.",
+  "DESCRIPTION_QUEUE_PERIODIC_ANNOUNCE": "A set of periodic announcements to be played, played in the order they are defined.",
+  "DESCRIPTION_QUEUE_ANNOUNCE_FREQUENCY": "Defines how often we should announce the caller’s position and/or estimated hold time in the queue. Set this value to zero to disable.",
+  "DESCRIPTION_QUEUE_MIN_ANNOUNCE_FREQUENCY": "Specifies the minimum amount of time that must pass before we announce the caller’s position in the queue again. This is used when the caller’s position may change frequently, to prevent the caller hearing multiple updates in a short period of time.",
+  "DESCRIPTION_QUEUE_PERIODIC_ANNOUNCE_FREQUENCY": "Indicates how often we should make periodic announcements to the caller.",
+  "DESCRIPTION_QUEUE_RANDOM_PERIODIC_ANNOUNCE": "If set to yes, will play the defined periodic announcements in a random order.",
+  "DESCRIPTION_QUEUE_ANNOUNCE_HOLDTIME": "Defines whether the estimated hold time should be played along with the periodic announcements.",
+  "DESCRIPTION_QUEUE_ANNOUNCE_POSITION": "Defines whether the caller’s position in the queue should be announced to her. If set to no, the position will never be announced. If set to yes, the caller’s position will always be announced. If the value is set to limit, the caller will hear her position in the queue only if it is within the limit defined by announce-position-limit. If the value is set to more, the caller will hear her position if it is beyond the number defined by announce-position-limit.",
+  "DESCRIPTION_QUEUE_YOUARENEXT": "If not defined, will play the default value (“You are now first in line”). If set to an empty value, the prompt will not be played at all.",
+  "DESCRIPTION_QUEUE_THEREARE": "If not defined, will play the default value (“There are”). If set to an empty value, the prompt will not be played at all.",
+  "DESCRIPTION_QUEUE_CALLSWAITING": "If not defined, will play the default value (“calls waiting”). If set to an empty value, the prompt will not be played at all.",
+  "DESCRIPTION_QUEUE_HOLDTIME": "If not defined, will play the default value (“The current estimated hold time is”). If set to an empty value, the prompt will not be played at all.",
+  "DESCRIPTION_QUEUE_MINUTES": "If not defined, will play the default value (“minutes”). If set to an empty value, the prompt will not be played at all.",
+  "DESCRIPTION_QUEUE_MINUTE": "If not defined, will play the default value (“minute”). If set to an empty value, the prompt will not be played at all.",
+  "DESCRIPTION_QUEUE_SECONDS": "If not defined, will play the default value (“seconds”). If set to an empty value, the prompt will not be played at all.",
+  "DESCRIPTION_QUEUE_THANKYOU": "If not defined, will play the default value (“Thank you for your patience”). If set to an empty value, the prompt will not be played at all.",
+  "DESCRIPTION_QUEUE_AUTOPAUSE": "Enables/disables the automatic pausing of members who fail to answer a call. A value of all causes this member to be paused in all queues she is a member of.",
+  "DESCRIPTION_QUEUE_RINGINUSE": "Used to avoid sending calls to members whose status is In Use.",
+  "DESCRIPTION_QUEUE_MEMBER_DELAY": "Used if you want there to be a delay prior to the caller and queue member being connected to each other.",
+  "DESCRIPTION_QUEUE_TIMEOUTRESTART": "If set to yes, resets the timeout for an agent to answer if either a BUSY or CONGESTION status is received from the channel.",
+  "DESCRIPTION_QUEUE_MONITOR_FORMAT": "Specifies the file format to use when recording. If monitor-format is inactive, calls will not be recorded.",
+  "DESCRIPTION_QUEUE_VOICE_CONTEXT": "Allows a caller to exit the queue by pressing a single DTMF digit. If a context is specified and the caller enters a number, that digit will attempt to be matched in the context specified, and dialplan execution will continue there.",
+  "APPLICATION_CALLCOUNTER": "Calls Counter",
+  "DESCRIPTION_TRUNK_ROLE": "The channel where to use the trunk.",
+  "DESCRIPTION_TRUNK_HOST": "The domain or host name for the provider.",
+  "DESCRIPTION_TRUNK_SECRET": "Authentication password to contact the provider.",
+  "DESCRIPTION_TRUNK_DEFAULT_USER": "Authentication username to contact the provider.",
+  "DESCRIPTION_TRUNK_REGISTRY": "The trunk registry string, required by some providers, usually defaultuser:secret@host.",
+  "DESCRIPTION_TRUNK_VOICE_CONTEXT": "The exploitable context for the trunk.",
+  "DESCRIPTION_TRUNK_DTMFMODE": "How DTMF (Dual-Tone Multi-Frequency) are sent: RFC2833: the default mode, the DTMF are sent with RTP but outside the audio stream. INBAND: The DTMF is sent in audio stream of the current conversation, becoming audible from the speakers. Requires a high CPU load. INFO: Although this method is very reliable, it is not supported by all PBX devices and many SIP Trunk.",
+  "DESCRIPTION_TRUNK_NAT": "Changes the behaviour of Asterisk for clients behind a firewall.If any of the comma-separated options is 'no', Asterisk will ignore any other settings and set nat=no.",
+  "DESCRIPTION_TRUNK_TYPE": "Determines the SIP role within asterisk. User: used to authenticate incoming - Peer: for outgoing calls - Friend: covers both characteristics of the above.",
+  "DESCRIPTION_TRUNK_QUALIFY": "Determines when the SIP is achievable.",
+  "DESCRIPTION_TRUNK_ALLOW_CODEC": "Allowed codecs in order of preference.",
+  "DESCRIPTION_TRUNK_INSECURE": "Specifies how to handle connections with peer, allowing insecure settings.",
+  "DESCRIPTION_TRUNK_CALLLIMIT": "The limit number of the inbound and outbound calls at a time.",
+  "DESCRIPTION_TRUNK_LIMITONPEERS": "Define the call limits of a peers SIP type.",
+  "DESCRIPTION_TRUNK_DIRECTMEDIA": "Asterisk by default tries to redirect the RTP media stream to go directly from the caller to the callee. Some devices do not support this (especially if one of them is behind a NAT). The default setting is YES. If you have all clients behind a NAT, or for some other reason want Asterisk to stay in the audio path, you may want to turn this off.",
+  "DESCRIPTION_TRUNK_CALLCOUNTER": "Enable call counters on devices.",
+  "DESCRIPTION_TRUNK_FROMDOMAIN": "Sets default From:domain in SIP messages when acting as a SIP ua (client). Some destinations may require mandatory identity name instead of only the IP address.",
+  "DESCRIPTION_TRUNK_FROMUSER": "How your rovider knows you. This is which user to put instead of callerid when placing calls _to_ peer (another SIP proxy). Valid only for type=peer.",
+  "DESCRIPTION_TRUNK_OUTBOUNDPROXY": "IP_address or DNS SRV name (excluding the _sip._udp prefix) : SRV name, hostname, or IP address of the outbound SIP Proxy. Send outbound signaling to this proxy, not directly to the devices. Valid only for type=peer.",
+  "DESCRIPTION_TRUNK_USEREQPHONE": "Define if the provider requires ';user=phone' on URI.",
+  "DESCRIPTION_TRUNK_TRUSTRPID": "Define if Remote-Party-ID should be trusted.",
+  "DESCRIPTION_TRUNK_SENDRPID": "Define if Remote-Party-ID should be sent (defaults to no).",
+  "DESCRIPTION_TRUNK_ENCRYPTION": "Whether to offer SRTP encrypted media (and only SRTP encrypted media) on outgoing calls to a peer. Calls will fail with HANGUPCAUSE=58 if the peer does not support SRTP. Defaults to no.",
+  "DESCRIPTION_TRUNK_PORT": "The port number we want to connect to on the remote side.",
+  "DESCRIPTION_TRUNK_TRANSPORT": "Set the default transports. The order determines the primary default transport.",
+  "MESSAGE_FOLDER_DOES_NOT_EXIST": "The folder does not exist.",
+  "APPLICATION_DISABLED": "Disabled",
+  "APPLICATION_ENABLED": "Enabled",
+  "APPLICATION_FROMDOMAIN": "From Domain",
+  "APPLICATION_FROMUSER": "From User",
+  "APPLICATION_OUTBOUNDPROXY": "Outbound Proxy",
+  "APPLICATION_YES": "Yes",
+  "APPLICATION_NO": "No",
+  "APPLICATION_USAGE": "Usage",
+  "APPLICATION_IN_SECONDS": "In seconds",
+  "APPLICATION_USEREQPHONE": "Add phone to URI",
+  "APPLICATION_TRUSTRPID": "Trust Remote-Party-ID",
+  "APPLICATION_SENDRPID": "Send Remote-Party-ID header",
+  "APPLICATION_ENCRYPTION": "Encryption",
+  "APPLICATION_TEAMS": "Teams",
+  "APPLICATION_SECRET": "Secret",
+  "APPLICATION_NEW_SECRET": "New Secret",
+  "APPLICATION_CONFIRM_SECRET": "Confirm Secret",
+  "APPLICATION_IDENTIFIER": "Identifier",
+  "APPLICATION_CHANNELS": "Channels",
+  "APPLICATION_AUTOMATIONS": "Automations",
+  "APPLICATION_NEW_AUTOMATION": "New Automation",
+  "APPLICATION_NEW_TRIGGER": "New Trigger",
+  "APPLICATION_OR_CONDITIONS": "OR Conditions",
+  "APPLICATION_AND_CONDITIONS": "AND Conditions",
+  "MESSAGE_NO_CONTEXTS_AVAILABLE": "No contexts available",
+  "MESSAGE_NO_ACCOUNTS_AVAILABLE": "No accounts available",
+  "MESSAGE_NO_INTERVALS_AVAILABLE": "No intervals available",
+  "MESSAGE_NO_MOHS_AVAILABLE": "No musics on hold available",
+  "MESSAGE_NO_QUEUES_AVAILABLE": "No queues available",
+  "MESSAGE_NO_ROUTES_AVAILABLE": "No routes available",
+  "MESSAGE_NO_SUBINTERVALS_AVAILABLE": "No subintervals available",
+  "MESSAGE_NO_TRUNKS_AVAILABLE": "No trunks available",
+  "MESSAGE_NO_VOICEMAILS_AVAILABLE": "No voicemails available",
+  "MESSAGE_NO_AUDIOFILES_AVAILABLE": "No audio files available",
+  "MESSAGE_INSERT_AT_LEAST_ONE_CONDITION": "Insert at least one condition",
+  "MESSAGE_INSERT_AT_LEAST_ONE_ACTION": "Insert at least one action",
+  "APPLICATION_HANGUP": "Hangup",
+  "APPLICATION_PATTERN": "Pattern",
+  "APPLICATION_ANNOUNCE_FREQUENCY": "Announce Frequency",
+  "APPLICATION_PERIODIC_ANNOUNCE_FREQUENCY": "Periodic Announce Frequency",
+  "APPLICATION_MEMBER_DELAY": "Member delay",
+  "APPLICATION_JOINEMPTY": "Join when empty",
+  "APPLICATION_LEAVEWHENEMPTY": "Leave when empty",
+  "APPLICATION_ANNOUNCE_HOLDTIME": "Announce Holdtime",
+  "APPLICATION_AUTOPAUSE": "Auto Pause",
+  "APPLICATION_RINGINUSE": "Ring when in use",
+  "APPLICATION_TIMEOUTRESTART": "Timeout Restart",
+  "APPLICATION_SETINTERFACEVAR": "Set interface Variables",
+  "APPLICATION_ANNOUNCE_ROUND_SECONDS": "Announce seconds",
+  "APPLICATION_ANNOUNCE": "Announce to the agent",
+  "APPLICATION_PERIODIC_ANNOUNCE": "Periodic Announcements",
+  "APPLICATION_MONITOR_FORMAT": "Monitor Format",
+  "APPLICATION_ANNOUNCE_POSITION": "Announce caller position",
+  "APPLICATION_QUEUE_YOUARENEXT": "'You are next' announce",
+  "APPLICATION_QUEUE_THEREARE": "'There are' announce",
+  "APPLICATION_QUEUE_CALLSWAITING": "'Number of waiting calls' announce",
+  "APPLICATION_QUEUE_HOLDTIME": "'The current estimated hold time is' announce",
+  "APPLICATION_QUEUE_MINUTES": "'Minutes' word for announcements",
+  "APPLICATION_QUEUE_MINUTE": "'Minute' word for announcements",
+  "APPLICATION_QUEUE_SECONDS": "'Seconds' word for announcements",
+  "APPLICATION_QUEUE_THANKYOU": "'Thank You' announce",
+  "APPLICATION_MIN_ANNOUNCE_FREQUENCY": "Minimum announce frequency",
+  "APPLICATION_RANDOM_PERIODIC_ANNOUNCE": "Random periodic announcements",
+  "MESSAGE_NO_AVAILABLE_MAILS": "No available mails",
+  "APPLICATION_PREVIEW": "Preview",
+  "APPLICATION_WEIGHT": "Weight",
+  "APPLICATION_WRAPUPTIME": "Wrapup Time",
+  "APPLICATION_RETRY": "Retry",
+  "APPLICATION_MAXLEN": "Max Length",
+  "DESCRIPTION_VOICE_MOH": "Sets the music class to be used.",
+  "APPLICATION_HANGUP_CAUSE": "Hangup Cause",
+  "APPLICATION_CONDITIONS": "Conditions",
+  "APPLICATION_SELECT_FILES": "Select Files",
+  "MESSAGE_RETURN_HOME": "Return home",
+  "MESSAGE_OR_UPLOAD_SOUND_FILE": "or upload a sound file.",
+  "APPLICATION_QUEUE_SETTINGS": "Queue Settings",
+  "APPLICATION_UPLOAD_TYPE": "Upload Type",
+  "MESSAGE_NO_SOUNDS": "There isn' t any sound.",
+  "APPLICATION_UPLOAD_QUEUE": "Upload Queue",
+  "MESSAGE_AUDIO_NOT_SUPPORTED": "Your browser does not support the audio tag.",
+  "APPLICATION_QUEUE_LENGTH": "Queue length",
+  "MESSAGE_TRUNK_OUTBOUND_ASSOCIATED": "The Trunk is associated with one or more outbound routes, delete them first",
+  "MESSAGE_INTERVAL_ROUTE_ASSOCIATED": "The Interval is associated with one or more routes, delete them first",
+  "MESSAGE_QUEUE_ROUTE_ASSOCIATED": "The Queue is associated with one or more routes, delete them first",
+  "MESSAGE_CONTEXT_ROUTE_ASSOCIATED": "The Context is associated with one or more routes, delete them first",
+  "APPLICATION_CHAT": "Chat",
+  "APPLICATION_MESSAGES": "Messages",
+  "APPLICATION_MESSAGE": "Message",
+  "APPLICATION_UPLOAD_QUEUE_PROGRESS": "Upload Queue progress",
+  "APPLICATION_PATH": "Path",
+  "MESSAGE_EXIST_MAILBOX": "Mailbox/Context combination already exists",
+  "MESSAGE_EXIST_ODBC": "ODBC connection already exists",
+  "MESSAGE_EXIST_VARIABLE": "Variable name already exists",
+  "MESSAGE_EXIST_QUEUE": "Queue name already exists",
+  "MESSAGE_EXIST_PROJECT": "Project name already exists",
+  "MESSAGE_EXIST_TRUNK": "Trunk name already exists",
+  "MESSAGE_EXIST_CONTEXT": "Context name already exists",
+  "MESSAGE_EXIST_INTERVAL": "Interval name already exists",
+  "MESSAGE_EXIST_INTERNAL": "Internal number already exists",
+  "MESSAGE_EXIST_MOH": "Music-On-Hold class already exists",
+  "MESSAGE_EXIST_SUBINTERVAL": "Subinterval name for this interval already exists",
+  "MESSAGE_NO_AVAILABLE_CONVERSATIONS": "No available conversations",
+  "APPLICATION_VOICE": "Voice",
+  "APPLICATION_RANDOM": "Random",
+  "APPLICATION_ALPHABETICAL": "Alphabetical",
+  "APPLICATION_MAIL": "Mail",
+  "APPLICATION_AUDIOS": "Audio Files",
+  "APPLICATION_CALLERID": "Caller ID",
+  "APPLICATION_DURATION": "Duration",
+  "APPLICATION_DATE": "Date",
+  "APPLICATION_DIRECTORY": "Directory",
+  "APPLICATION_SORT": "Sort",
+  "APPLICATION_NEW_MOH_CLASS": "New Music-on-hold Class",
+  "APPLICATION_MOH_CLASS": "Music-on-hold Class",
+  "APPLICATION_RECORDING": "Recording",
+  "APPLICATION_FAX": "Fax",
+  "APPLICATION_SUBINTERVALS": "Subintervals",
+  "APPLICATION_SUBINTERVAL": "Subinterval",
+  "APPLICATION_NEW_SUBINTERVAL": "New Subinterval",
+  "APPLICATION_SUBINTERVAL_SETTINGS": "Subinterval Settings",
+  "APPLICATION_HANGUP_CAUSE_1": "1 = Unallocated number",
+  "APPLICATION_HANGUP_CAUSE_16": "16 = Normal call clearing",
+  "APPLICATION_HANGUP_CAUSE_17": "17 = User busy",
+  "APPLICATION_HANGUP_CAUSE_18": "18 = No user responding (telephone device not connected)",
+  "APPLICATION_HANGUP_CAUSE_21": "21 = Call rejected",
+  "APPLICATION_HANGUP_CAUSE_22": "22 = Number changed",
+  "APPLICATION_HANGUP_CAUSE_27": "27 = Destignation out of order",
+  "APPLICATION_HANGUP_CAUSE_38": "38 = Network out of order",
+  "APPLICATION_HANGUP_CAUSE_41": "41 = Temporary failure",
+  "APPLICATION_WEB_SITES": "Web Sites",
+  "APPLICATION_WEB_SITE": "Web Site",
+  "APPLICATION_WEB_SITE_LIST": "Web Sites List",
+  "APPLICATION_NEW_WEB_SITE": "New Web Site",
+  "APPLICATION_ADDRESS": "Address",
+  "APPLICATION_EXTENSION": "Extension",
+  "APPLICATION_ROUTES": "Routes",
+  "APPLICATION_ROUTE": "Route",
+  "APPLICATION_PHONE": "Phone",
+  "APPLICATION_FAXHEADER": "Fax Header",
+  "APPLICATION_LOCALID": "Localid",
+  "APPLICATION_MAXRATE": "Min Rate",
+  "APPLICATION_MINRATE": "Max Rate",
+  "APPLICATION_NEW_ROUTE": "New Route",
+  "APPLICATION_ROUTES_LIST": "Routes List",
+  "APPLICATION_TRUNKS": "Trunks",
+  "APPLICATION_TRUNK": "Trunk",
+  "APPLICATION_INTERVAL": "Interval",
+  "APPLICATION_INTERVALS": "Intervals",
+  "APPLICATION_NEW_INTERVAL": "New Interval",
+  "APPLICATION_GENERAL": "General",
+  "APPLICATION_PLAYBACK": "Playback",
+  "APPLICATION_ADVANCED": "Advanced",
+  "APPLICATION_CONTEXTS": "Contexts",
+  "APPLICATION_CONTEXT": "Context",
+  "APPLICATION_ACCOUNTS": "Accounts",
+  "APPLICATION_ACCOUNT": "Account",
+  "APPLICATION_INBOX": "Inbox",
+  "APPLICATION_INTERNAL_NUMBER": "Internal Number",
+  "APPLICATION_STRATEGY": "Strategy",
+  "APPLICATION_NEW_INTERNAL": "New Internal",
+  "APPLICATION_NEW_MESSAGE": "New Message",
+  "APPLICATION_HOST": "Host",
+  "APPLICATION_DID": "DID",
+  "APPLICATION_ID": "ID",
+  "APPLICATION_FAVORITE": "Favorite",
+  "APPLICATION_INTEGRATIONS": "Integrations",
+  "APPLICATION_APPLICATION": "Application",
+  "APPLICATION_APPLICATION_SETTINGS": "Application Settings",
+  "APPLICATION_APPLICATIONS": "Applications",
+  "APPLICATION_BUSINESS_ANALYTICS": "Business Analytics",
+  "APPLICATION_REALTIME": "Realtime",
+  "APPLICATION_INBOUND": "Inbound",
+  "APPLICATION_OUTBOUND": "Outbound",
+  "APPLICATION_INTERNALS": "Internals",
+  "APPLICATION_INTERNAL": "Internal",
+  "APPLICATION_INTERFACES": "Interfaces",
+  "APPLICATION_CUSTOMERS": "Customers",
+  "APPLICATION_CUSTOM_APP": "Application Name",
+  "APPLICATION_QUEUES": "Queues",
+  "APPLICATION_QUEUE": "Queue",
+  "APPLICATION_QUEUES_LIST": "Queues List",
+  "APPLICATION_NEW_QUEUE": "New Queue",
+  "APPLICATION_DIALPLAN": "Dialplan",
+  "APPLICATION_FULLNAME": "Full Name",
+  "APPLICATION_TRUNKS": "Trunks",
+  "APPLICATION_PRIORITY": "Priority",
+  "APPLICATION_ARGUMENTS": "Arguments",
+  "APPLICATION_MAILBOX": "Mailbox",
+  "APPLICATION_AUDIO": "Audio",
+  "APPLICATION_SOUNDS": "Sounds",
+  "APPLICATION_FILE_UPLOAD": "File Upload",
+  "APPLICATION_MULTI_FILE_UPLOAD": "Multi File Upload",
+  "APPLICATION_AUDIO_FILE": "Audio File",
+  "APPLICATION_CALLYSQUARE": "Cally &#178;",
+  "APPLICATION_PROJECTS": "Projects",
+  "APPLICATION_PROJECT": "Project",
+  "APPLICATION_PROJECTS_LIST": "Projects List",
+  "APPLICATION_NEW_PROJECT": "New Project",
+  "APPLICATION_ANALYTICS": "Analytics",
+  "APPLICATION_VOICEMAILS": "Voicemails",
+  "APPLICATION_VOICEMAIL": "Voicemail",
+  "APPLICATION_NEW_VOICEMAIL": "New Voicemail",
+  "APPLICATION_MAILS": "Mails",
+  "APPLICATION_MAILS_LIST": "Mails List",
+  "APPLICATION_SETTINGS": "Settings",
+  "APPLICATION_SET": "Set",
+  "APPLICATION_DESCRIPTION": "Description",
+  "APPLICATION_AGENTS_LIST": "Agents List",
+  "APPLICATION_USERS_LIST": "Users List",
+  "APPLICATION_TEAMS_LIST": "Teams List",
+  "APPLICATION_NEW_AGENT": "New Agent",
+  "APPLICATION_NEW_USER": "New User",
+  "APPLICATION_NEW_TEAM": "New Team",
+  "APPLICATION_NEW_TRUNK": "New Trunk",
+  "APPLICATION_PROGRESS": "Progress",
+  "APPLICATION_NEW_CONTEXT": "New Context",
+  "APPLICATION_NEW_ACCOUNT": "New Account",
+  "APPLICATION_TOOLS": "Tools",
+  "APPLICATION_STAFF": "Staff",
+  "APPLICATION_EXPORT_TO_EXCEL": "Eport to Excel",
+  "APPLICATION_EXPORT_TO_CSV": "Eport to CSV",
+  "APPLICATION_EXPORT_TO_XML": "Eport to XML",
+  "APPLICATION_SEARCH": "Search",
+  "APPLICATION_RESET": "Reset",
+  "APPLICATION_SELECT": "Select",
+  "APPLICATION_BACK": "Back",
+  "APPLICATION_ACTIONS": "Actions",
+  "APPLICATION_NAME": "Name",
+  "APPLICATION_SIZE": "Size",
+  "APPLICATION_EMAIL": "Email",
+  "APPLICATION_USERNAME": "Username",
+  "APPLICATION_EDIT": "Edit",
+  "APPLICATION_DELETE": "Delete",
+  "APPLICATION_CANCEL": "Cancel",
+  "APPLICATION_CANCEL_ALL": "Cancel all",
+  "APPLICATION_UPLOAD": "Upload",
+  "APPLICATION_UPLOAD_ALL": "Upload all",
+  "APPLICATION_REMOVE": "Remove",
+  "APPLICATION_REMOVE_ALL": "Remove all",
+  "APPLICATION_SUBMIT": "Submit",
+  "APPLICATION_CREATED_AT": "Created At",
+  "APPLICATION_UPDATED_AT": "Updated At",
+  "APPLICATION_QUICK": "Quick",
+  "APPLICATION_WIZARD": "Wizard",
+  "APPLICATION_BULK": "Bulk",
+  "APPLICATION_CUSTOM": "Custom",
+  "APPLICATION_FROM_LIST": "From List",
+  "APPLICATION_INTERFACES_LIST": "Interfaces List",
+  "APPLICATION_NEW_INTERFACE": "New Interface",
+  "APPLICATION_NUMBER_AGENTS": "Number of Agents",
+  "APPLICATION_BY": "By",
+  "APPLICATION_ALL": "All",
+  "APPLICATION_PROFILE": "Profile",
+  "APPLICATION_CHATS": "Chats",
+  "APPLICATION_SENT": "Sent",
+  "APPLICATION_NOT_SENT": "Not Sent",
+  "APPLICATION_DRAFT": "Draft",
+  "APPLICATION_TRASH": "Trash",
+  "APPLICATION_COMPOSE": "Compose",
+  "APPLICATION_WRITE": "Write",
+  "APPLICATION_SPAM": "Spam",
+  "APPLICATION_MARK_AS_READ": "Read",
+  "APPLICATION_MARK_AS_UNREAD": "Unread",
+  "APPLICATION_MAILS_PER_PAGE": "Mails per Page",
+  "APPLICATION_MORE": "More",
+  "APPLICATION_REPLY": "Reply",
+  "APPLICATION_REPLY_TO_ALL": "Reply to All",
+  "APPLICATION_FORWARD": "Forward",
+  "APPLICATION_PRINT": "Print",
+  "APPLICATION_FROM": "From",
+  "APPLICATION_TO": "To",
+  "APPLICATION_BCC": "Bcc",
+  "APPLICATION_CC": "cc",
+  "APPLICATION_SEND": "Send",
+  "APPLICATION_DISCARD": "Discard",
+  "APPLICATION_SAVE_AS_DRAFT": "Save as Draft",
+  "APPLICATION_SUBJECT": "Subject",
+  "APPLICATION_OUTGOING": "Outgoing",
+  "APPLICATION_INCOMING": "Incoming",
+  "APPLICATION_INSERT_TEXT": "Insert text",
+  "APPLICATION_PASSWORD": "Password",
+  "APPLICATION_ADD_FILES": "Add Files",
+  "APPLICATION_NEW_PASSWORD": "New Password",
+  "APPLICATION_PORT": "Port",
+  "APPLICATION_SECURE": "Secure",
+  "APPLICATION_URL": "URL",
+  "APPLICATION_WEB_ADDRESS": "Web Address",
+  "APPLICATION_SNIPPET": "Snippet",
+  "APPLICATION_EMBEDDING": "Embedding",
+  "APPLICATION_APPEARANCE": "Appearance",
+  "APPLICATION_FORMS": "Forms",
+  "APPLICATION_CONTINUE": "Continue",
+  "APPLICATION_INCOMING_MAIL_SERVER": "Incoming Mail Server",
+  "APPLICATION_OUTGOING_MAIL_SERVER": "Outgoing Mail Server",
+  "APPLICATION_DELETE_MAIL_FROM_SERVER": "Delete Mail From Server",
+  "APPLICATION_SEARCH_FILTER": "Search Filter",
+  "APPLICATION_MAILBOX": "Mailbox",
+  "APPLICATION_WARNING": "Warning",
+  "APPLICATION_ACCOUNT_INFO": "Account informations",
+  "APPLICATION_CONFIRM": "Confirm",
+  "APPLICATION_GENERALS": "Generals",
+  "APPLICATION_PLAYBACK_OPTION_J": "J: If option is specified, the application will jump to priority n+101 if present when a file specified to be played does not exist.",
+  "APPLICATION_PLAYBACK_OPTION_NOANSWER": "NOANSWER: Play the sound file, but don't answer the channel first (if hasn't been answered already). Not all channels support playing messages while still on hook.",
+  "APPLICATION_PLAYBACK_OPTION_SAY": "SAY: Use say.conf to interpret the string",
+  "APPLICATION_PLAYBACK_OPTION_SKIP": "SKIP: Play the sound file only if the channel has already been answered. If the channel has not yet been answered, the Playback command will return immediately without playing anything.",
+  "APPLICATION_UPDATE": "Update",
+  "APPLICATION_CREATE": "Create",
+  "APPLICATION_STATISTICS": "Statistics",
+  "APPLICATION_VISITORS": "Visitors",
+  "APPLICATION_VISITOR": "Visitor",
+  "APPLICATION_LANGUAGES": "Languages",
+  "APPLICATION_ORIGIN": "Origin",
+  "APPLICATION_STATUS": "Status",
+  "APPLICATION_HOURS_SINCE_CREATED": "Hours since created",
+  "APPLICATION_TIME": "Time",
+  "APPLICATION_WEEKDAY": "WeekDay",
+  "APPLICATION_MONTHDAY": "MonthDay",
+  "APPLICATION_MONTH": "Month",
+  "APPLICATION_MAIN_COLOR": "Main color",
+  "APPLICATION_FOCUS_COLOR": "Focus color",
+  "APPLICATION_BUTTON_COLOR": "Button color",
+  "APPLICATION_CONVERSATION": "Conversation",
+  "APPLICATION_CONVERSATIONS": "Conversations",
+  "APPLICATION_TYPE": "Type",
+  "APPLICATION_INTERVAL_TYPE": "Interval Type",
+  "APPLICATION_INTERFACE": "Interface",
+  "APPLICATION_REMOTE_ADDRESS": "Remote Address",
+  "APPLICATION_REFERER": "Referer",
+  "APPLICATION_BROWSER": "Browser",
+  "APPLICATION_ENGINE": "Engine",
+  "APPLICATION_OS": "Operating System",
+  "APPLICATION_DEVICE": "Device",
+  "APPLICATION_COUNTRY": "Country",
+  "APPLICATION_REGION": "Region",
+  "APPLICATION_REGISTRY": "Registry",
+  "APPLICATION_CITY": "City",
+  "APPLICATION_LATITUDE": "Latitude",
+  "APPLICATION_LONGITUDE": "Longitude",
+  "APPLICATION_ARRIVAL_TIME": "Arrival Time",
+  "APPLICATION_TRANSCRIPT": "Transcript",
+  "APPLICATION_ROLE": "Role",
+  "APPLICATION_ENQUIRIES": "Enquiries",
+  "APPLICATION_ENQUIRY": "Enquiry",
+  "APPLICATION_TEXT": "Text",
+  "APPLICATION_SUMMARY": "Summary",
+  "APPLICATION_MONDAY": "Monday",
+  "APPLICATION_TUESDAY": "Tuesday",
+  "APPLICATION_WEDNESDAY": "Wednesday",
+  "APPLICATION_THURSDAY": "Thursday",
+  "APPLICATION_FRIDAY": "Friday",
+  "APPLICATION_SATURDAY": "Saturday",
+  "APPLICATION_SUNDAY": "Sunday",
+  "APPLICATION_JANUARY": "January",
+  "APPLICATION_FEBRUARY": "February",
+  "APPLICATION_MARCH": "March",
+  "APPLICATION_APRIL": "April",
+  "APPLICATION_MAY": "May",
+  "APPLICATION_JUNE": "June",
+  "APPLICATION_JULY": "July",
+  "APPLICATION_AUGUST": "August",
+  "APPLICATION_SEPTEMBER": "September",
+  "APPLICATION_OCTOBER": "October",
+  "APPLICATION_NOVEMBER": "November",
+  "APPLICATION_DECEMBER": "December",
+  "APPLICATION_OPENED": "Opened",
+  "APPLICATION_CODEC": "Codec",
+  "APPLICATION_CLOSED": "Closed",
+  "APPLICATION_PENDING": "Pending",
+  "APPLICATION_SERVED": "Served",
+  "APPLICATION_UNSERVED": "Unserved",
+  "APPLICATION_READ": "Read",
+  "APPLICATION_UNREAD": "Unread",
+  "APPLICATION_LOCATION": "Location",
+  "APPLICATION_LOCATIONS": "Locations",
+  "APPLICATION_REMOTE": "Remote Address",
+  "APPLICATION_WEB_SITE_INFO": "Web Site informations",
+  "APPLICATION_WEB_SITE_APPEARANCE": "Web Site appearance",
+  "APPLICATION_OTHER_INFO": "Other Info",
+  "APPLICATION_OVERVIEW": "Overview",
+  "APPLICATION_CONFIRM_PASSWORD": "Confirm password",
+  "APPLICATION_TRANSPORT": "Transport",
+  "APPLICATION_ACCOUNTCODE": "Accountcode",
+  "APPLICATION_NAT": "NAT",
+  "APPLICATION_PERSONAL_INFO": "Personal Info",
+  "APPLICATION_CHANGE_AVATAR": "Change Avatar",
+  "APPLICATION_CHANGE_PASSWORD": "Change Password",
+  "APPLICATION_ANIMATION": "Animation",
+  "APPLICATION_ROUNDED": "Rounded",
+  "APPLICATION_SQUARED": "Squared",
+  "APPLICATION_HEADER_SHAPE": "Header Shape",
+  "APPLICATION_HEADER_ONLINE": "Header Online",
+  "APPLICATION_USERNAME_PLACEHOLDER": "Username Placeholder",
+  "APPLICATION_EMAIL_PLACEHOLDER": "Email Placeholder",
+  "APPLICATION_START_CHAT_BUTTON": "Start Chat Button",
+  "APPLICATION_RESTART": "Restart",
+  "APPLICATION_ASSIGN": "Assign",
+  "APPLICATION_LABELS": "Labels",
+  "APPLICATION_ONLINE_MESSAGE": "Online Message",
+  "APPLICATION_HEADER_OFFLINE": "Header Offline",
+  "APPLICATION_OFFLINE_MESSAGE": "Offline Message",
+  "APPLICATION_ENQUIRY_MESSAGE_PLACEHOLDER": "Enquiry message Placeholder",
+  "APPLICATION_ENQUIRY_BUTTON": "Enquiry Button",
+  "APPLICATION_ONLINE_STATE": "Online State",
+  "APPLICATION_OFFLINE_STATE": "Offline State",
+  "APPLICATION_DOWNLOAD_TRANSCRIPT": "Download Transcript",
+  "APPLICATION_TEAM": "Team",
+  "APPLICATION_FIELD": "Field",
+  "APPLICATION_FIELDS": "Fields",
+  "APPLICATION_DOWNLOAD": "Download",
+  "APPLICATION_DESIGN": "Design",
+  "APPLICATION_VARIABLES": "Variables",
+  "APPLICATION_VARIABLE": "Variable",
+  "APPLICATION_VALUE": "Value",
+  "APPLICATION_NEW_VARIABLE": "New Variable",
+  "APPLICATION_ODBC": "ODBC",
+  "APPLICATION_NEW_ODBC": "New ODBC",
+  "APPLICATION_CUTDIGITS": "Cut Digits",
+  "APPLICATION_NEW_APPLICATION": "New Application",
+  "APPLICATION_TIMEOUT": "Timeout",
+  "APPLICATION_AGENT_TIMEOUT": "Agent Timeout",
+  "APPLICATION_APPLICATION_TIMEOUT": "Application Timeout",
+  "APPLICATION_UNKNOWN": "Unknown",
+  "APPLICATION_OPTIONS": "Options",
+  "APPLICATION_MOH": "Music On hold",
+  "APPLICATION_MOHS": "Music On Hold Classes",
+  "APPLICATION_QUEUE_OPTION_c": "c: Continue in the dialplan if the callee hangs up.",
+  "APPLICATION_QUEUE_OPTION_C": "C: Mark all calls as 'answered elsewhere' when cancelled.",
+  "APPLICATION_QUEUE_OPTION_d": "d: data-quality (modem) call (minimum delay).",
+  "APPLICATION_QUEUE_OPTION_F": "F: When the caller hangs up, transfer the called member to the specified destination and start execution at that location.",
+  "APPLICATION_QUEUE_OPTION_h": "h: Allow callee to hang up by pressing *.",
+  "APPLICATION_QUEUE_OPTION_H": "H: Allow caller to hang up by pressing *.",
+  "APPLICATION_QUEUE_OPTION_I": "I: Asterisk will ignore any connected line update requests or any redirecting party update requests it may receive on this dial attempt.",
+  "APPLICATION_QUEUE_OPTION_i": "i: Ignore call forward requests from queue members and do nothing when they are requested.",
+  "APPLICATION_QUEUE_OPTION_k": "k: Allow the called party to enable parking of the call by sending the DTMF sequence defined for call parking in features.conf.",
+  "APPLICATION_QUEUE_OPTION_K": "K: Allow the calling party to enable parking of the call by sending the DTMF sequence defined for call parking in features.conf.",
+  "APPLICATION_QUEUE_OPTION_n": "n: No retries on the timeout, will exit this application and go to the next step.",
+  "APPLICATION_QUEUE_OPTION_R": "R: Ring instead of playing MOH when a member channel is actually ringing.",
+  "APPLICATION_QUEUE_OPTION_r": "r: Ring instead of playing MOH. Periodic Announcements are still made, if applicable.",
+  "APPLICATION_QUEUE_OPTION_t": "t: Allow the called user to transfer the calling user.",
+  "APPLICATION_QUEUE_OPTION_T": "T: Allow the calling user to transfer the call.",
+  "APPLICATION_QUEUE_OPTION_w": "w: Allow the called user to write the conversation to disk via Monitor.",
+  "APPLICATION_QUEUE_OPTION_W": "W: Allow the calling user to write the conversation to disk via Monitor.",
+  "APPLICATION_QUEUE_OPTION_x": "x: Allow the called user to write the conversation to disk via MixMonitor.",
+  "APPLICATION_QUEUE_OPTION_X": "X: Allow the calling user to write the conversation to disk via MixMonitor.",
+  "APPLICATION_FILENAME": "File name",
+  "APPLICATION_VERSION": "Version",
+  "APPLICATION_LAST_PAUSE": "Last Pause",
+  "APPLICATION_LAST_INCOMING_CALL": "Last Incoming Call",
+  "MESSAGE_CONFIGURATION_COMPLETED": "Configuration complete! Confirm to procede",
+  "MESSAGE_REQUIRED_FIELD": "Required Field",
+  "MESSAGE_WRONG_FORMAT": "Wrong Format",
+  "MESSAGE_WRONG_PASSWORD": "Wrong password",
+  "MESSAGE_NUMERIC_FIELD": "Only numeric values allowed",
+  "MESSAGE_NO_USERS_ONLINE": "No Users Online",
+  "MESSAGE_NO_USERS_OFFLINE": "No Users Offline",
+  "MESSAGE_NO_USERS_FOUND": "No Users Found",
+  "MESSAGE_NO_AGENTS_FOUND": "No Agents Found",
+  "MESSAGE_SAVE_AS_DRAFT": "Message saved as draft",
+  "MESSAGE_WELL_DONE": "Well done",
+  "MESSAGE_SUCCESS": "Success",
+  "MESSAGE_ERROR": "Error",
+  "MESSAGE_SOMETHING_WENT_WRONG": "Something went wrong",
+  "MESSAGE_ARE_YOU_SURE_YOU_WANT_TO_CLOSE_THE_CHAT": "Are you sure you want to close the chat?",
+  "MESSAGE_MAIL_ACCOUNT_UPDATE_SUCCESS": "Your mail account has been properly updated",
+  "MESSAGE_CHAT_PROPERLY_ASSIGNED": "Chat session properly assigned",
+  "MESSAGE_CHAT_ALREADY_ASSIGNED": "Chat session already assigned",
+  "MESSAGE_MAIL_ACCOUNT_UPDATE_FAILURE": "We encountered an error during updating procedure",
+  "MESSAGE_CHAT_WEBSITE_UPDATE_SUCCESS": "Your chat website has been properly updated",
+  "MESSAGE_CHAT_WEBSITE_UPDATE_FAILURE": "We encountered an error during updating procedure",
+  "MESSAGE_CHAT_WEBSITE_CREATE_SUCCESS": "Your chat website has been properly created",
+  "MESSAGE_CHAT_WEBSITE_CREATE_FAILURE": "We encountered an error during creating procedure",
+  "MESSAGE_CHAT_WEBSITE_DELETE_SUCCESS": "Your chat website has been properly deleted",
+  "MESSAGE_CHAT_WEBSITE_DELETE_FAILURE": "We encountered an error during delete procedure",
+  "MESSAGE_CHAT_QUEUE_UPDATE_SUCCESS": "Your chat queue has been properly updated",
+  "MESSAGE_CHAT_QUEUE_UPDATE_FAILURE": "We encountered an error during updating procedure",
+  "MESSAGE_CHAT_QUEUE_CREATE_SUCCESS": "Your chat queue has been properly created",
+  "MESSAGE_CHAT_QUEUE_CREATE_FAILURE": "We encountered an error during creating procedure",
+  "MESSAGE_CHAT_QUEUE_DELETE_SUCCESS": "Your chat queue has been properly deleted",
+  "MESSAGE_CHAT_QUEUE_DELETE_FAILURE": "We encountered an error during delete procedure",
+  "MESSAGE_TEAM_UPDATE_SUCCESS": "Your team has been properly updated",
+  "MESSAGE_TEAM_UPDATE_FAILURE": "We encountered an error during updating procedure",
+  "MESSAGE_TEAM_CREATE_SUCCESS": "Your team has been properly created",
+  "MESSAGE_TEAM_CREATE_FAILURE": "We encountered an error during creating procedure",
+  "MESSAGE_TEAM_DELETE_SUCCESS": "Your team has been properly deleted",
+  "MESSAGE_TEAM_DELETE_FAILURE": "We encountered an error during delete procedure",
+  "APPLICATION_IF": "If",
+  "APPLICATION_ALL": "All",
+  "APPLICATION_ANY": "Any",
+  "MESSAGE_CODITIONS_MET_ALL": "of these conditions are met",
+  "MESSAGE_CODITIONS_MET_ANY": "of these conditions are met",
+  "MESSAGE_FAX_ACCOUNT_GET_FAILURE": "We encountered an error during getting procedure",
+  "MESSAGE_FAX_ACCOUNT_UPDATE_SUCCESS": "Your fax account has been properly updated",
+  "MESSAGE_FAX_ACCOUNT_UPDATE_FAILURE": "We encountered an error during updating procedure",
+  "MESSAGE_FAX_ACCOUNT_CREATE_SUCCESS": "Your fax account has been properly created",
+  "MESSAGE_FAX_ACCOUNT_CREATE_FAILURE": "We encountered an error during creating procedure",
+  "MESSAGE_FAX_ACCOUNT_DELETE_SUCCESS": "Your fax account has been properly deleted",
+  "MESSAGE_FAX_ACCOUNT_DELETE_FAILURE": "We encountered an error during delete procedure",
+  "MESSAGE_EXIST_ROUTE": "Extension/context/type combination already exist",
+  "MESSAGE_MAIL_MESSAGE_SEND_FAILURE": "We encountered an error during sending procedure",
+  "MESSAGE_MAIL_MESSAGE_SEND_SUCCESS": "Your mail has been properly sent",
+  "MESSAGE_MAIL_NEW_INCOMING_MAIL": "New incoming mail",
+  "MESSAGE_MAIL_MESSAGE_NEW": "New available request",
+  "MESSAGE_NO_AVAILABLE_TEAMS": "No available teams.",
+  "DESCRIPTION_VOICE_CONTEXT": "The context of the relative extension.",
+  "DESCRIPTION_VOICE_HOST": "The domain or host name for the SIP server.",
+  "DESCRIPTION_VOICE_NAT": "Changes the behaviour of Asterisk for clients behind a firewall.If any of the comma-separated options is 'no', Asterisk will ignore any other settings and set nat=no.",
+  "DESCRIPTION_VOICE_TYPE": "Determines the SIP role within asterisk. User: used to authenticate incoming - Peer: for outgoing calls - Friend: covers both characteristics of the above.",
+  "DESCRIPTION_VOICE_CODEC": "Allowed codecs in order of preference.",
+  "DESCRIPTION_VOICE_ACCOUNTCODE": "Users may be associated with an accountcode.",
+  "DESCRIPTION_VOICE_TRANSPORT": "Set the default transports. The order determines the primary default transport.",
+  "APPLICATION_STATUS_OPEN": "Open",
+  "APPLICATION_STATUS_CLOSED": "Closed",
+  "APPLICATION_STATUS_NEW": "New",
+  "APPLICATION_STATUS_PENDING": "Pending",
+  "APPLICATION_STATUS_SOLVED": "Solved",
+  "MESSAGE_NO_AVAILABLE_ACCOUNTS": "No available accounts",
+  "APPLICATION_ECM": "ECM",
+  "APPLICATION_UNASSIGNED": "Unassigned",
+  "MESSAGE_NO_AVAILABLE_MESSAGES": "No available messages",
+  "MESSAGE_CHAT_CLOSED": "Chat Closed",
+  "MESSAGE_NO_MESSAGES_FOUND": "No messages found",
+  "MESSAGE_STATUS_UPDATE_SUCCESS": "Status properly updated",
+  "MESSAGE_STATUS_UPDATE_FAILURE": "We encountered an error during status update procedure",
+  "MESSAGE_MAIL_MESSAGE_ASSIGNEMNT_SUCCESS": "Assignment properly executed",
+  "MESSAGE_MAIL_MESSAGE_ASSIGNEMNT_FAILURE": "We encountered an error during agent assignemnt procedure",
+  "MESSAGE_NO_AVAILABLE_AUTOMATIONS": "No available automations",
+  "APPLICATION_TIMELINE": "Timeline",
+  "APPLICATION_EXTERNALS": "Externals",
+  "APPLICATION_EXTERNAL": "External",
+  "APPLICATION_AT": "At",
+  "APPLICATION_GO_TO": "Go to",
+  "APPLICATION_MESSAGE": "Go to",
+  "APPLICATION_EMBED_SNIPPET": "Embed the Snippet",
+  "MESSAGE_EMBED_SNIPPET": "Copy the following script and insert it into your website's HTML source code at the end of <body> tag. This code must be inserted into every page on which you wish to display the xCally Chat Snippet.",
+  "MESSAGE_NO_AVAILABLE_APPLICATIONS": "No available applications",
+  "MESSAGE_NO_AVAILABLE_WEBSITES": "No available websites",
+  "MESSAGE_TRUNK_FAX_ASSOCIATED": "The Trunk is associated with one or more fax account, delete them first",
+  "APPLICATION_ALLOWED_CODECS": "Allowed Codecs",
+  "APPLICATION_CURRENT_PASSWORD": "Current Password",
+  "APPLICATION_RE_TYPE_NEW_PASSWORD": "Re-Type New Password",
+  "MESSAGE_EXIST_USERNAME": "Username already exist",
+  "MESSAGE_EXIST_EMAIL": "Email already exist",
+  "APPLICATION_ZENDESK": "Zendesk",
+  "APPLICATION_TOKEN": "Token",
+  "APPLICATION_AUTHENTICATION_TYPE": "Authentication Type",
+  "MESSAGE_EXIST_DOMAIN": "Domain already exist",
+  "APPLICATION_CHECK_CONNECTION": "Check connection",
+  "MESSAGE_ACCOUNT_VERIFIED": "Account Verified",
+  "MESSAGE_ACCOUNT_INVALID": "Account Invalid",
+  "APPLICATION_LAST_SEEN": "Last Seen",
+  "APPLICATION_CUSTOM_FIELDS": "Custom Fields",
+  "APPLICATION_CUSTOM_FIELD": "Custom Field",
+  "APPLICATION_NEW_CUSTOM_FIELD": "New Custom Field",
+  "APPLICATION_CUSTOM_FIELD_ID": "Custom Field Id",
+  "APPLICATION_CONFIGURATIONS": "Configurations",
+  "APPLICATION_CONFIGURATION": "Configuration",
+  "MESSAGE_EXIST_CUSTOM_FIELD": "Account/Field combination already exists",
+  "APPLICATION_NEW_CONFIGURATION": "New Configuration",
+  "MESSAGE_VARIABLE_CONFIGURATION_ASSOCIATED": "The Variable is associated with one or more Zendesk configuration, delete them first"
+}
diff --git a/public/assets/languages/locale-it.json b/public/assets/languages/locale-it.json
new file mode 100644
index 0000000..b720c8f
--- /dev/null
+++ b/public/assets/languages/locale-it.json
@@ -0,0 +1,746 @@
+{
+  "APPLICATION_DASHBOARD": "Dashboard",
+  "APPLICATION_AGENTS": "Agenti",
+  "APPLICATION_USERS": "Utenti",
+  "APPLICATION_DEFAULT": "Default",
+  "APPLICATION_USER": "Utente",
+  "APPLICATION_ADD_FIELD": "Aggiungi campo",
+  "APPLICATION_AGENT": "Agente",
+  "APPLICATION_VIEW_MORE": "Dettagli",
+  "APPLICATION_CONFIRM_CLOSE": "Conferm Chiusura",
+  "APPLICATION_DASHBOARD_ABANDONED": "Abbandonate",
+  "APPLICATION_DASHBOARD_COMPLETED": "Completate",
+  "APPLICATION_DASHBOARD_WAIT": "In attesa",
+  "MESSAGE_NO_CHATS_FOUND": "Nessuna Chats Trovata",
+  "MESSAGE_NO_MESSAGES_FOUND": "Nessun messaggio trovato",
+  "MESSAGE_ARE_YOU_SURE_YOU_WANT_TO_CLOSE_THE_CHAT": "Sei sicuro di voler chiudere la chat?",
+  "APPLICATION_DASHBOARD_ACTIVE": "Attive",
+  "APPLICATION_ODBCS": "Connessioni ODBC",
+  "APPLICATION_EXTERNALS": "Esterne",
+  "APPLICATION_EXTERNAL": "Esterna",
+  "MESSAGE_CHAT_CLOSED": "Chat Chiusa",
+  "APPLICATION_METRICS": "Metriche",
+  "APPLICATION_CHANNEL": "Canale",
+  "APPLICATION_GTE_TO": "Maggiore o uguale a",
+  "APPLICATION_LTE_TO": "Minore o uguale a",
+  "APPLICATION_GREATER_THAN": "Maggiore di",
+  "APPLICATION_LESS_THAN": "Minore di",
+  "APPLICATION_USERID": "User ID",
+  "APPLICATION_SERVER": "Server",
+  "APPLICATION_SET": "Imposta",
+  "APPLICATION_VIEW": "Vedi",
+  "APPLICATION_VISIBLE_TO_ADMIN": "Visible to Admin",
+  "APPLICATION_VISIBLE_TO_USER": "Visible to Users",
+  "APPLICATION_VISIBLE_TO_AGENT": "Visible to Agents",
+  "APPLICATION_FIELD": "Campo",
+  "APPLICATION_FIELDS": "Campi",
+  "APPLICATION_DASHBOARDS_MANAGER": "Dashboards Manager",
+  "APPLICATION_UNIQUEID": "Uniqueid",
+  "APPLICATION_SESSIONS": "Sessioni",
+  "APPLICATION_SESSION": "Sessione",
+  "APPLICATION_JOIN_AT": "Entrata",
+  "APPLICATION_NEW_ACTION": "Nuova Azione",
+  "APPLICATION_LEAVE_AT": "Uscita",
+  "APPLICATION_UNMANAGED_AT": "Non Gestita",
+  "APPLICATION_ACTION": "Azione",
+  "APPLICATION_YOUR_DASHBOARDS": "Your Dashboards",
+  "APPLICATION_NEW_DASHBOARD": "Nuova Dashboard",
+  "MESSAGE_NO_DASHBOARDS_AVAILABLE": "No dashboards available",
+  "APPLICATION_SELECT_IMAGE": "Seleziona Immagine",
+  "APPLICATION_WIDGET_COLOR": "Colore widget",
+  "APPLICATION_WIDGET_ICON": "Icona idget",
+  "APPLICATION_WIDGET_DETAILS": "Dettagli widget ",
+  "APPLICATION_WIDGET_LINK": "Link widget",
+  "APPLICATION_WIDGET_LINK_TEXT": "Testo link widget",
+  "APPLICATION_WIDGET_MAX_HEIGHT": "Altezza massima widget",
+  "MESSAGE_ENTER_ONE_VALID_FIELD": "Inserisci almeno un campo valido e controlla tutti i campi",
+  "MESSAGE_ENTER_ONE_VALID_FIELD": "Inserisci almeno una metrica valida e controlla tutte le metriche",
+  "APPLICATION_ABANDONED_AT": "Abbandonata",
+  "MESSAGE_WIDGET_SELECT_REPORT": "Seleziona una tabella di report dalla lista",
+  "MESSAGE_NO_RESULTS_AVAILABLE": "Nessun risultato",
+  "APPLICATION_REASON": "Ragione",
+  "MESSAGE_DASHBOARD_SAVED": "Dashboard salvata",
+  "APPLICATION_DATABASE": "Database",
+  "APPLICATION_REFRESH_TIMEOUT": "Timeout di Refresh (secondi)",
+  "APPLICATION_CONDITION": "Condizione",
+  "APPLICATION_AVAILABLE": "Disponibile",
+  "APPLICATION_REPORT": "Report",
+  "MESSAGE_ENTER_VALID_CONDITION": "Inserire una condizione valida",
+  "APPLICATION_PAUSE_SELECTION": "Selezione della Pausa",
+  "APPLICATION_QUEUE_SELECTION": "Selezione della Coda",
+  "APPLICATION_CALLER": "Chiamante",
+  "APPLICATION_CALLED_AT": "Chiamata",
+  "APPLICATION_UNASWER_AT": "Non Riposta",
+  "APPLICATION_CONNECTED_AT": "Connessa",
+  "APPLICATION_COMPLETED_AT": "Completata",
+  "APPLICATION_HOLDTIME": "Tempo di Attesa",
+  "APPLICATION_TALKTIME": "Tempo di Chiamata",
+  "APPLICATION_SELECTED_PAUSE": "Pausa Selezionata",
+  "APPLICATION_UNAVAILABLE": "Non Disponibile",
+  "MESSAGE_MAXIMUM_SOUND_UPLOAD_SIZE": "Dimensione massima file:",
+  "MESSAGE_SUPPORTED_FORMATS": " Formati supportati:",
+  "APPLICATION_QUEUE_REMOVAL": "Rimozione dalla Coda",
+  "MESSAGE_PERMANENT_REMOVAL_FROM_QUEUE": "Rimozione peramente dalla coda",
+  "APPLICATION_PAUSE": "Pausa",
+  "APPLICATION_DSN": "DSN",
+  "APPLICATION_DRIVER": "Driver",
+  "APPLICATION_ALWAYS": "Sempre",
+  "APPLICATION_DTMFMODE": "Modalità DTMF",
+  "APPLICATION_LOGIN": "Login",
+  "APPLICATION_LOGOUT": "Logout",
+  "APPLICATION_LAST_LOGIN": "Ultimo Login",
+  "APPLICATION_LAST_SERVED": "Ultima Servita",
+  "APPLICATION_LAST_PAUSE": "Ultima Pausa",
+  "APPLICATION_PENALTY": "Penalità",
+  "APPLICATION_LAST_INCOMING_CALL": "Ultima Chiamata Entrante",
+  "APPLICATION_SERVED": "Servite",
+  "MESSAGE_FILE_CREATION_ERROR": "Errore durante la creazione del file o cartella",
+  "APPLICATION_QUALIFY": "Qualifica",
+  "APPLICATION_SERVICES": "Servizi",
+  "APPLICATION_SERVICE": "Servizio",
+  "APPLICATION_DETAIL": "Dettaglio",
+  "APPLICATION_ALLOW_CODEC": "Codecs consentiti",
+  "APPLICATION_ADD_RULE": "Nuova Regola",
+  "APPLICATION_ADD_GROUP": "Nuovo Gruppo",
+  "APPLICATION_INSECURE": "Impostazioni non sicure",
+  "MESSAGE_NO_PROJECTS_AVAILABLE": "Non ci sono progetti disponibili",
+  "APPLICATION_OTHER_FIELDS": "Altri campi",
+  "DESCRIPTION_TRUNK_OTHER_FIELDS": "Altri campi da aggiungere nel file di configurazione dei trunk. Da scrivere nel formato asterisk (chiave=valore), ogni campo su una singola riga.",
+  "APPLICATION_CALLLIMIT": "Limite chiamate",
+  "APPLICATION_DEFAULT_USER": "Default User",
+  "APPLICATION_EQUALS_TO": "Uguale a",
+  "APPLICATION_NOT_EQUALS_TO": "Diverso da",
+  "MESSAGE_SELECT_AT_LEAST_ONE_CONDITION": "Selezionare almeno una condizione",
+  "APPLICATION_TEMPLATE": "Template",
+  "APPLICATION_CC": "cc",
+  "APPLICATION_TEMPLATES": "Templates",
+  "APPLICATION_NEW_TEMPLATE": "Nuovo Template",
+  "APPLICATION_TRIGGERS": "Triggers",
+  "APPLICATION_TRIGGER": "Trigger",
+  "APPLICATION_REMOVE_GROUP": "Rimuovi Gruppo",
+  "APPLICATION_ADD_CONDITION": "Aggiungi Condizione",
+  "APPLICATION_ADD_ACTION": "Aggiungi Azione",
+  "APPLICATION_IF": "Se",
+  "APPLICATION_ALL": "Tutte",
+  "APPLICATION_ANY": "Una",
+  "MESSAGE_CODITIONS_MET_ALL": "le seguenti condizioni sono verificate",
+  "MESSAGE_CODITIONS_MET_ANY": "delle sequenti condizioni è verificata",
+  "APPLICATION_ADD_GROUP": "Aggiungi Gruppo",
+  "MESSAGE_NO_SOUNDS_AVAILABLE": "Non ci sono suoni disponibili",
+  "MESSAGE_EXIST_VARIABLE": "Il nome per la variabile è già esistente.",
+  "MESSAGE_NO_ODBCS_AVAILABLE": "Non ci sono connessioni ODBC disponibili",
+  "APPLICATION_LIMITONPEERS": "Limite sui Peers",
+  "APPLICATION_DIRECTMEDIA": "Direct Media",
+  "APPLICATION_ANNOUNCE_POSITION_LIMIT": "Announce Position Limit",
+  "APPLICATION_QUEUE_REPORTHOLD": "Annuncio 'Hold Time'",
+  "APPLICATION_REPORTHOLDTIME": "Annuncio tempo di attesa all' agente",
+  "DESCRIPTION_QUEUE_REPORTHOLDTIME": "Abilita l' annuncio del tempo di attesa del chiamante al membro della coda, prima della connessione al canale.",
+  "DESCRIPTION_QUEUE_STRATEGY": "The queue ring strategy.",
+  "DESCRIPTION_QUEUE_REPORTHOLD": "Se non definito, riproduce il valore di default (“Hold time”). Se impostato su un valore vuoto non verrà riprodotto.",
+  "DESCRIPTION_QUEUE_ANNOUNCE_POSITION_LIMIT": "Usato se l' annuncio della posizione del chiamante è stato definito come limit o more.",
+  "DESCRIPTION_QUEUE_VOICE_MOH": "Imposta la classe di musica d' attesa da usare per una particolare coda.",
+  "DESCRIPTION_QUEUE_TIMEOUT": "Specifica il numero di secondi per i quali far squillare il dispositivo del membro della coda.",
+  "DESCRIPTION_QUEUE_MAXLEN": "Specifica il numero massimo di chiamanti che possono attendere in una coda. Un valore di zero indica un numero illimitato di chiamanti in attesa.",
+  "DESCRIPTION_QUEUE_RETRY": "Specifica il numero di secondi da attendere prima di chiamare il prossimo membro della coda alla scadenza del timeout.",
+  "DESCRIPTION_QUEUE_WRAPUPTIME": "Il numero di secondi in cui tenere un membro della coda in stato 'Non disponibile' dopo aver completato una chiamata.",
+  "DESCRIPTION_QUEUE_WEIGHT": "Definisce il peso di una coda. Una coda con un peso più alto avrà una priorità primaria quando dei membri sono associati a più code.",
+  "DESCRIPTION_QUEUE_JOINEMPTY": "Indica se un chiamante deve essere aggiunto ad una coda quando questa non ha nessun membro.",
+  "DESCRIPTION_QUEUE_LEAVEWHENEMPTY": "Usato per controllare se i chiamanti devono essere buttati fuori da una coda quando non ci sono più membri disponibili a rispondere.",
+  "DESCRIPTION_QUEUE_ANNOUNCE": "Usato per riprodurre un annuncio all' agente che ha risposto alla chiamata, di solito per informarlo da quale coda arriva il chiamante.",
+  "DESCRIPTION_QUEUE_PERIODIC_ANNOUNCE": "Una serie di annunci periodici da riprodurre, nell' ordine in cui sono definiti.",
+  "DESCRIPTION_QUEUE_ANNOUNCE_FREQUENCY": "Definisce quanto spesso annunciare la posizione del chiamante e/o il tempo stimato di attesa nella coda. Impostare a zero per disabilitarlo.",
+  "DESCRIPTION_QUEUE_MIN_ANNOUNCE_FREQUENCY": "Specifica la minima quantità di tempo tra gli annunci della posizione del chiamante. E' usato quando la posizione del chiamante può cambiare frequentemente, per prevenire che il chiamante ascolti multipli aggiornamente in un breve periodo di tempo.",
+  "DESCRIPTION_QUEUE_PERIODIC_ANNOUNCE_FREQUENCY": "Indica quanto spesso riprodurre gli annunci periodici al chiamante.",
+  "DESCRIPTION_QUEUE_RANDOM_PERIODIC_ANNOUNCE": "Se impostato a yes gli annunci periodici verranno riprodotti in ordine casuale.",
+  "DESCRIPTION_QUEUE_ANNOUNCE_HOLDTIME": "Definisce se annunciare il tempo di attesa stimato insieme agli annunci periodici.",
+  "DESCRIPTION_QUEUE_ANNOUNCE_POSITION": "Definisce se annunciare la posizione del chiamante. Se impostato su no la posizione non verrà amai annunciata. Se impostata su yes la posizione verrà sempre annunciata. Se impostato su limit il chiamante ascolterà la sua posizione solo se entro il limite dell' announce position limit. Se è impostato su more il chiamante ascolterà la sua posizione se si trova oltre il limite in announce position limit.",
+  "DESCRIPTION_QUEUE_YOUARENEXT": "Se non definito, riproduce il valore di default (“You are now first in line”). Se impostato su un valore vuoto non verrà riprodotto.",
+  "DESCRIPTION_QUEUE_THEREARE": "Se non definito, riproduce il valore di default (“There are”). Se impostato su un valore vuoto non verrà riprodotto.",
+  "DESCRIPTION_QUEUE_CALLSWAITING": "Se non definito, riproduce il valore di default (“calls waiting”). Se impostato su un valore vuoto non verrà riprodotto.",
+  "DESCRIPTION_QUEUE_HOLDTIME": "Se non definito, riproduce il valore di default (“The current estimated hold time is”). Se impostato su un valore vuoto non verrà riprodotto.",
+  "DESCRIPTION_QUEUE_MINUTES": "Se non definito, riproduce il valore di default (“minutes”). Se impostato su un valore vuoto non verrà riprodotto.",
+  "DESCRIPTION_QUEUE_MINUTE": "Se non definito, riproduce il valore di default (“minute”). Se impostato su un valore vuoto non verrà riprodotto.",
+  "DESCRIPTION_QUEUE_SECONDS": "Se non definito, riproduce il valore di default (“seconds”). Se impostato su un valore vuoto non verrà riprodotto.",
+  "DESCRIPTION_QUEUE_THANKYOU": "Se non definito, riproduce il valore di default (“Thank you for your patience”). Se impostato su un valore vuoto non verrà riprodotto.",
+  "DESCRIPTION_QUEUE_AUTOPAUSE": "Abilita/Disabilita la pausa automatica dei membri che falliscono la rispota ad una chiamata. Un valore di all mette il membro in pausa su tutte le sue code.",
+  "DESCRIPTION_QUEUE_RINGINUSE": "Usato per evitare di inviare chiamate ai membri il cui stato è In Use.",
+  "DESCRIPTION_QUEUE_MEMBER_DELAY": "Usato se si vuole un ritardo prima che il chiamante e il membro della coda vengano connessi.",
+  "DESCRIPTION_QUEUE_TIMEOUTRESTART": "Se impostato a yes, resetta il timeout di un agente per rispondere ad una chiamata se il canale è in stato BUSY o CONGESTION.",
+  "DESCRIPTION_QUEUE_MONITOR_FORMAT": "Specifica il formato del file di registrazione. Se impostato su inactive le chiamate non verranno registrate.",
+  "DESCRIPTION_QUEUE_VOICE_CONTEXT": "Abilita il chiamante ad uscire dalla coda premendo un DTMF digit. Se il contesto è specificato e il chiamante inserisce un numero, si cercherà una corrispondenza con quel numero nel contesto specificato e il dialplan contimuerà lì.",
+  "MESSAGE_FOLDER_DOES_NOT_EXIST": "La cartella non esiste.",
+  "APPLICATION_CALLCOUNTER": "Contatore chiamate",
+  "DESCRIPTION_TRUNK_ROLE": "Il canale in cui usare il trunk.",
+  "DESCRIPTION_TRUNK_HOST": "Il dominio o il nome dell' host per il provider.",
+  "DESCRIPTION_TRUNK_SECRET": "La password di autenticazione per contattare il provider provider.",
+  "DESCRIPTION_TRUNK_DEFAULT_USER": "Lo username di autenticazione per contattare il provider.",
+  "DESCRIPTION_TRUNK_REGISTRY": "La stringa di resitrazione del trunk, richiesta da alcuni provider. Solitamente è nel formato defaultuser:secret@host.",
+  "DESCRIPTION_TRUNK_VOICE_CONTEXT": "Il contesto del trunk.",
+  "DESCRIPTION_TRUNK_DTMFMODE": "Come i DTMF(Dual-Tone Multi-Frequency) sono inviati: RFC2833: la modalità di default, i DTMF vengono inviati con l' RTP ma separatamente dallo stream audio. INBAND: Il DTMF è inviato nello stream audio della conversazione in corso, risultando udibile dai partecipanti. Comporta un grosso carico sulla CPU. INFO: Nonostante questo metodi sia molto affidabile, non è supportato da tutti i dispositivi PBX e da molti Trunk SIP. ",
+  "DESCRIPTION_TRUNK_NAT": "Cambia il comportamento di Asterisk per i client dietro ad un fireewall. Se una qualsiasi dei valori selezionati è 'no', Asterisk ignorerà tutti gli altri valori e imposterà il nat=no.",
+  "DESCRIPTION_TRUNK_TYPE": "Determina il ruolo del SIP all' interno di asterisk. User: usato per identificare le chiamate in arrivo - Peer: per le chiamate in uscita - Friend: copre entrambe le caratteristiche di User e Peer.",
+  "DESCRIPTION_TRUNK_QUALIFY": "Determina quando il SIP è raggiungibile.",
+  "DESCRIPTION_TRUNK_ALLOW_CODEC": "Codecs abilitati in ordine di preferenza.",
+  "DESCRIPTION_TRUNK_INSECURE": "Specifica come gestire le connessioni con il peer, permettendo impostazioni poco sicure.",
+  "DESCRIPTION_TRUNK_CALLLIMIT": "Il limite di chiamate entranti e uscenti allo stesso tempo.",
+  "DESCRIPTION_TRUNK_LIMITONPEERS": "Definisce il limite di chiamate per i SIP di tipo peer.",
+  "DESCRIPTION_TRUNK_DIRECTMEDIA": "Asterisk cerca di default di redirezionare lo stream RTP direttamente dal chiamante al chiamato. Alcuni dispositivi non lo supportano, specialmente se sono dietro NAT. ",
+  "DESCRIPTION_TRUNK_CALLCOUNTER": "Abilita il conteggio delle chiamate sui dispositivi.",
+  "DESCRIPTION_TRUNK_FROMDOMAIN": "Imposta il valore di default From:domain nei messaggi SIP quando in modalità SIP ua (client). Alcune destinazioni potrebbero richiedere il nome dell' host per intero invece del solo indirizzo IP.",
+  "DESCRIPTION_TRUNK_FROMUSER": "L' autenticazione con il provider. E' il valore dell' user da inserire al posto del callerID quando si fanno chiamate _to_ peer ( verso un altro proxy SIP). Valido solo per type=peer.",
+  "DESCRIPTION_TRUNK_OUTBOUNDPROXY": "IP_address o DNS SRV name (escludendo il prefisso _sip._udp) : nome SRV, hostname o indirizzo IP del proxy SIP outbound. Invia la segnalazione a questo proxy, non direttamente al dispositivo. Valido solo per type=peer.",
+  "DESCRIPTION_TRUNK_USEREQPHONE": "Definisce se il provider richiede la stringa ';user=phone' sull' URI.",
+  "DESCRIPTION_TRUNK_TRUSTRPID": "Definisce se il Remote-Party-ID deve essere considerato affidabile.",
+  "DESCRIPTION_TRUNK_SENDRPID": "Definisce se il Remote-Party-ID deve essere inviato (default a no).",
+  "DESCRIPTION_TRUNK_ENCRYPTION": "Definisce se offrire lo stream SMTP crittato sulle chiamate outbound. Le chiamate falliranno con codice errore HANGUPCAUSE=58 se il peer non supporta l' SRTP. Default a no.",
+  "DESCRIPTION_TRUNK_PORT": "La porta alla quale ci si vuole connettere sul lato remoto.",
+  "DESCRIPTION_TRUNK_TRANSPORT": "Imposta il transport di default. L' ordine determina il valore di default primario.",
+  "APPLICATION_FROMDOMAIN": "Dominio di provenienza",
+  "APPLICATION_FROMUSER": "Utente di provenienza",
+  "APPLICATION_YES": "Si",
+  "APPLICATION_NO": "No",
+  "APPLICATION_DISABLED": "Disabilitato",
+  "APPLICATION_USAGE": "Utilizzo",
+  "APPLICATION_INTERNAL_NUMBER": "Numero Interno",
+  "APPLICATION_DISALBLED": "Disabilitato",
+  "APPLICATION_ENABLED": "Abilitato",
+  "APPLICATION_IN_SECONDS": "In secondi",
+  "APPLICATION_OUTBOUNDPROXY": "Proxy Outbound",
+  "APPLICATION_USEREQPHONE": "Aggiungi telefono all' URI",
+  "APPLICATION_TRUSTRPID": "Remote-Party-ID affidabile",
+  "APPLICATION_SENDRPID": "Invia header Remote-Party-ID",
+  "APPLICATION_ENCRYPTION": "Crittografia",
+  "APPLICATION_TEAMS": "Teams",
+  "APPLICATION_ADD_FILES": "Aggiungi File",
+  "APPLICATION_CHANNELS": "Canali",
+  "APPLICATION_AUTOMATIONS": "Automazioni",
+  "APPLICATION_NEW_AUTOMATION": "Nuova Automazione",
+  "APPLICATION_NEW_TRIGGER": "Nuovo Trigger",
+  "MESSAGE_NO_AVAILABLE_MAILS": "Non ci sono mail disponibili",
+  "MESSAGE_NO_AVAILABLE_ACCOUNTS": "Non ci sono account dispon",
+  "APPLICATION_OR_CONDITIONS": "Condizioni in OR",
+  "APPLICATION_AND_CONDITIONS": "Condizioni in AND",
+  "APPLICATION_HANGUP": "Hangup",
+  "APPLICATION_ANNOUNCE_FREQUENCY": "Frequenza Annuncio",
+  "MESSAGE_MAIL_NEW_INCOMING_MAIL": "Nuova mail in arrivo",
+  "APPLICATION_PERIODIC_ANNOUNCE_FREQUENCY": "Frequenza Annunci Periodici",
+  "APPLICATION_MEMBER_DELAY": "Rtardo Membro",
+  "APPLICATION_ANNOUNCE_FREQUENCY": "Frequenza annuncio",
+  "APPLICATION_PERIODIC_ANNOUNCE_FREQUENCY": "Minima frequenza dell' annuncio",
+  "APPLICATION_MEMBER_DELAY": "Ritardo Membro",
+  "APPLICATION_JOINEMPTY": "Unisciti quando vuota",
+  "APPLICATION_LEAVEWHENEMPTY": "Lascia quando vuota",
+  "APPLICATION_ANNOUNCE_HOLDTIME": "Annuncio tempo di hold",
+  "APPLICATION_AUTOPAUSE": "Auto Pausa",
+  "APPLICATION_PATTERN": "Pattern",
+  "APPLICATION_RINGINUSE": "Suona quando in uso",
+  "APPLICATION_TIMEOUTRESTART": "Restart Timeout",
+  "APPLICATION_SETINTERFACEVAR": "Imposta Variabili di interfaccia",
+  "APPLICATION_ANNOUNCE_ROUND_SECONDS": "Annuncia i secondi",
+  "APPLICATION_ANNOUNCE": "Annuncio all' agente",
+  "APPLICATION_PERIODIC_ANNOUNCE": "Annunci periodici",
+  "APPLICATION_MONITOR_FORMAT": "Formato Monitor",
+  "APPLICATION_ANNOUNCE_POSITION": "Annuncia posizione del chiamante",
+  "APPLICATION_QUEUE_YOUARENEXT": "Annuncio 'Sei il prossimo'",
+  "APPLICATION_QUEUE_THEREARE": "Annuncio 'Ci sono'",
+  "APPLICATION_QUEUE_CALLSWAITING": "Annuncio 'Numero di chiamate in attesa'",
+  "APPLICATION_QUEUE_HOLDTIME": "Annuncio 'Tempo di attesa'",
+  "APPLICATION_QUEUE_MINUTES": "Parola 'Minuti' per gli annunci",
+  "APPLICATION_QUEUE_MINUTE": "Parola 'Minuto' per gli annunci",
+  "APPLICATION_QUEUE_SECONDS": "Parola 'Secondi' per gli annunci",
+  "APPLICATION_QUEUE_THANKYOU": "Annuncio 'Grazie'",
+  "APPLICATION_MIN_ANNOUNCE_FREQUENCY": "Frequenza minima annunci",
+  "APPLICATION_RANDOM_PERIODIC_ANNOUNCE": "Annunci periodici casuali",
+  "APPLICATION_QUEUE_SETTINGS": "Impostazioni Coda",
+  "APPLICATION_HANGUP_CAUSE": "Cause Hangup",
+  "APPLICATION_CONDITIONS": "Condizioni",
+  "APPLICATION_IDENTIFIER": "Identificatore",
+  "APPLICATION_CHAT": "Chat",
+  "APPLICATION_PREVIEW": "Anteprima",
+  "APPLICATION_WEIGHT": "Peso",
+  "APPLICATION_WRAPUPTIME": "Wrapup Time",
+  "APPLICATION_RETRY": "Tentativi",
+  "APPLICATION_MAXLEN": "Lunghezza massima",
+  "DESCRIPTION_VOICE_MOH": "Sets the music class to be used.",
+  "MESSAGE_RETURN_HOME": "Torna alla home",
+  "MESSAGE_NO_CONTEXTS_AVAILABLE": "Nessun contesto disponibile",
+  "MESSAGE_NO_INTERVALS_AVAILABLE": "Nessun intervallo disponibile",
+  "MESSAGE_NO_MOHS_AVAILABLE": "Nessuna music-on-hold disponibile",
+  "MESSAGE_NO_QUEUES_AVAILABLE": "Nessuna coda disponibile",
+  "MESSAGE_NO_ROUTES_AVAILABLE": "Nessuna route disponibile",
+  "MESSAGE_NO_SUBINTERVALS_AVAILABLE": "Nessun sottointervallo disponibile",
+  "MESSAGE_NO_TRUNKS_AVAILABLE": "Nessun trunk disponibile",
+  "MESSAGE_NO_VOICEMAILS_AVAILABLE": "Nessuna voicemail disponibile",
+  "MESSAGE_NO_AUDIOFILES_AVAILABLE": "Nessun file audio disponibile",
+  "MESSAGE_OR_UPLOAD_SOUND_FILE": "o carica un file audio.",
+  "APPLICATION_SELECT_FILES": "Seleziona Files",
+  "APPLICATION_UPLOAD_TYPE": "Tipo Upload",
+  "MESSAGE_NO_SOUNDS": "Non ci sono suoni",
+  "MESSAGE_NO_AVAILABLE_CONVERSATIONS": "Non ci sono conversazioni disponibili",
+  "MESSAGE_INSERT_AT_LEAST_ONE_CONDITION": "Inserisci almeno una condizione",
+  "MESSAGE_INSERT_AT_LEAST_ONE_ACTION": "Inserisci almeno un'azione",
+  "MESSAGE_AUDIO_NOT_SUPPORTED": "Il tuo browser non supporta il tag audio.",
+  "APPLICATION_UPLOAD_QUEUE": "Coda di Upload",
+  "APPLICATION_QUEUE_LENGTH": "Lunghezza coda",
+  "APPLICATION_VOICE": "Voce",
+  "MESSAGE_TRUNK_OUTBOUND_ASSOCIATED": "Il Trunk è associato con una o più route outbound, eliminale e riprova",
+  "MESSAGE_INTERVAL_ROUTE_ASSOCIATED": "L' Intervallo è associato con una o più route, eliminale e riprova",
+  "MESSAGE_INTERVAL_QUEUE_ASSOCIATED": "La Coda è associata con una o più route, eliminale e riprova",
+  "MESSAGE_INTERVAL_CONTEXT_ASSOCIATED": "Il contesto è associato con una o più route, eliminale e riprova",
+  "APPLICATION_PROGRESS": "Progresso",
+  "MESSAGE_EXIST_MAILBOX": "Combinazione Mailbox/Context già esistente",
+  "MESSAGE_EXIST_ODBC": "Connessione ODBC già esistente",
+  "MESSAGE_EXIST_QUEUE": "Il nome della coda è già esistente",
+  "MESSAGE_EXIST_PROJECT": "Project name already exists",
+  "MESSAGE_EXIST_TRUNK": "Il nome del trunk è già esistente",
+  "MESSAGE_EXIST_CONTEXT": "Il nome del contesto è già esistente",
+  "MESSAGE_EXIST_INTERVAL": "Il nome dell' intervallo è già esistente",
+  "MESSAGE_EXIST_INTERNAL": "Il numero interno è già esistente",
+  "MESSAGE_EXIST_MOH": "La classe di Music-On-hold è già esistente",
+  "MESSAGE_EXIST_SUBINTERVAL": "Il nome del sottointervallo per questo intervallo è già esistente",
+  "APPLICATION_MESSAGES": "Messaggi",
+  "APPLICATION_MESSAGE": "Messaggio",
+  "APPLICATION_RANDOM": "Casuale",
+  "APPLICATION_ALPHABETICAL": "Alfabetico",
+  "APPLICATION_MAIL": "Mail",
+  "APPLICATION_AUDIOS": "Files Audio",
+  "APPLICATION_FAX": "Fax",
+  "APPLICATION_SIZE": "Dimensione",
+  "APPLICATION_PATH": "Percorso",
+  "APPLICATION_DIRECTORY": "Cartella",
+  "APPLICATION_SORT": "Ordinamento",
+  "APPLICATION_MOH": "Music On hold",
+  "APPLICATION_NEW_MOH_CLASS": "Nuova Classe Music-on-hold",
+  "APPLICATION_MOH_CLASS": "Classe Music-on-hold",
+  "APPLICATION_CALLERID": "Caller ID",
+  "APPLICATION_DURATION": "Durata",
+  "APPLICATION_DATE": "Data",
+  "APPLICATION_RECORDING": "Registrazione",
+  "APPLICATION_DOWNLOAD": "Download",
+  "APPLICATION_SUBINTERVALS": "Sottointervalli",
+  "APPLICATION_SUBINTERVAL": "Sottointervallo",
+  "APPLICATION_NEW_SUBINTERVAL": "Nuovo Sottointervallo",
+  "APPLICATION_SUBINTERVAL_SETTINGS": "Impostazioni Sottointervallo",
+  "APPLICATION_LIST": "Lista",
+  "APPLICATION_MOHS": "Classi Music On Hold",
+  "APPLICATION_CUSTOM": "Custom",
+  "APPLICATION_FROM_LIST": "From List",
+  "APPLICATION_HANGUP_CAUSE_1": "1 = Unallocated number",
+  "APPLICATION_HANGUP_CAUSE_16": "16 = Normal call clearing",
+  "APPLICATION_HANGUP_CAUSE_17": "17 = User busy",
+  "APPLICATION_HANGUP_CAUSE_18": "18 = No user responding (telephone device not connected)",
+  "APPLICATION_HANGUP_CAUSE_21": "21 = Call rejected",
+  "APPLICATION_HANGUP_CAUSE_22": "22 = Number changed",
+  "APPLICATION_HANGUP_CAUSE_27": "27 = Destignation out of order",
+  "APPLICATION_HANGUP_CAUSE_38": "38 = Network out of order",
+  "APPLICATION_HANGUP_CAUSE_41": "41 = Temporary failure",
+  "APPLICATION_WEB_SITES": "Siti Web",
+  "APPLICATION_WEB_SITE": "Sito Web",
+  "APPLICATION_CUTDIGITS": "Cut Digits",
+  "APPLICATION_WEB_SITE_LIST": "Lista Siti Web",
+  "APPLICATION_NEW_WEB_SITE": "Nuovo Sito Web",
+  "APPLICATION_ADDRESS": "Indirizzo",
+  "APPLICATION_EXTENSION": "Extension",
+  "APPLICATION_NEW_ROUTE": "Nuova Rotta",
+  "APPLICATION_ROUTES_LIST": "Lista Rotte",
+  "APPLICATION_ROUTES": "Rotte",
+  "APPLICATION_ROUTE": "Rotta",
+  "APPLICATION_PHONE": "Telefono",
+  "APPLICATION_FAXHEADER": "Header Fax",
+  "APPLICATION_LOCALID": "Localid",
+  "APPLICATION_MAXRATE": "Min Rate",
+  "APPLICATION_MINRATE": "Max Rate",
+  "APPLICATION_TRUNKS": "Trunks",
+  "APPLICATION_TRUNK": "Trunk",
+  "APPLICATION_INTERVAL": "Intervallo",
+  "APPLICATION_INTERVALS": "Intervali",
+  "APPLICATION_NEW_INTERVAL": "Nuovo Intervallo",
+  "APPLICATION_GENERAL": "Generale",
+  "APPLICATION_PLAYBACK": "Playback",
+  "APPLICATION_ADVANCED": "Avanzato",
+  "APPLICATION_CONTEXTS": "Contesti",
+  "APPLICATION_CONTEXT": "Contesto",
+  "APPLICATION_ACCOUNTS": "Accounts",
+  "APPLICATION_ACCOUNT": "Account",
+  "APPLICATION_INBOX": "Inbox",
+  "APPLICATION_STRATEGY": "Strategia",
+  "APPLICATION_NEW_INTERNAL": "Nuovo Interno",
+  "APPLICATION_NEW_MESSAGE": "Nuovo Messaggio",
+  "APPLICATION_HOST": "Host",
+  "APPLICATION_DID": "DID",
+  "APPLICATION_ID": "ID",
+  "APPLICATION_RESTART": "Riavvia",
+  "APPLICATION_ASSIGN": "Assegna",
+  "APPLICATION_FAVORITE": "Preferiti",
+  "APPLICATION_INTEGRATIONS": "Integrazioni",
+  "APPLICATION_APPLICATION": "Applicazione",
+  "APPLICATION_APPLICATION_SETTINGS": "Impostazioni Applicazione",
+  "APPLICATION_APPLICATIONS": "Applicazioni",
+  "APPLICATION_BUSINESS_ANALYTICS": "Business Analytics",
+  "APPLICATION_REALTIME": "Realtime",
+  "APPLICATION_INBOUND": "Inbound",
+  "APPLICATION_OUTBOUND": "Outbound",
+  "APPLICATION_INTERNALS": "Interni",
+  "APPLICATION_INTERNAL": "Interni",
+  "APPLICATION_INTERFACES": "Interfacce",
+  "APPLICATION_CUSTOMERS": "Customers",
+  "APPLICATION_CUSTOM_APP": "Application Name",
+  "APPLICATION_QUEUES": "Code",
+  "APPLICATION_QUEUE": "Coda",
+  "APPLICATION_QUEUES_LIST": "Lista Code",
+  "APPLICATION_NEW_QUEUE": "Nuovo Coda",
+  "APPLICATION_DIALPLAN": "Dialplan",
+  "APPLICATION_TRUNKS": "Trunks",
+  "APPLICATION_PRIORITY": "Priorità",
+  "APPLICATION_MAILBOX": "Mailbox",
+  "APPLICATION_FULLNAME": "Full Name",
+  "APPLICATION_ARGUMENTS": "Argomenti",
+  "APPLICATION_TRUNK": "Trunk",
+  "APPLICATION_AUDIO": "Audio",
+  "APPLICATION_SOUNDS": "Sounds",
+  "APPLICATION_FILE_UPLOAD": "File Upload",
+  "APPLICATION_MULTI_FILE_UPLOAD": "Multi File Upload",
+  "APPLICATION_CALLYSQUARE": "Cally &#178;",
+  "APPLICATION_PROJECTS": "Progetti",
+  "APPLICATION_PROJECT": "Progetto",
+  "APPLICATION_PROJECTS_LIST": "Lista Progetti",
+  "APPLICATION_NEW_PROJECT": "Nuovo Progetto",
+  "APPLICATION_ANALYTICS": "Statistiche",
+  "APPLICATION_VOICEMAILS": "Caselle Vocali",
+  "APPLICATION_VOICEMAIL": "Casella Vocale",
+  "APPLICATION_NEW_VOICEMAIL": "Nuova Casella Vocale",
+  "APPLICATION_MAILS": "Mails",
+  "APPLICATION_URL": "URL",
+  "APPLICATION_MAILS_LIST": "Lista Mails",
+  "APPLICATION_SETTINGS": "Impostazioni",
+  "APPLICATION_DESCRIPTION": "Descrizione",
+  "APPLICATION_AGENTS_LIST": "Lista Agenti",
+  "APPLICATION_USERS_LIST": "Lista Utenti",
+  "APPLICATION_TEAMS_LIST": "Lista Teams",
+  "APPLICATION_NEW_AGENT": "Nuovo Agente",
+  "APPLICATION_NEW_USER": "Nuovo Utente",
+  "APPLICATION_NEW_TEAM": "Nuovo Team",
+  "APPLICATION_NEW_TRUNK": "Nuovo Trunk",
+  "APPLICATION_NEW_CONTEXT": "Nuovo Coontesto",
+  "APPLICATION_NEW_ACCOUNT": "Nuovo Account",
+  "APPLICATION_TOOLS": "Strumenti",
+  "APPLICATION_STAFF": "Staff",
+  "APPLICATION_EXPORT_TO_EXCEL": "Esporta in Excel",
+  "APPLICATION_EXPORT_TO_CSV": "Esporta in CSV",
+  "APPLICATION_EXPORT_TO_XML": "Esporta in XML",
+  "APPLICATION_SEARCH": "Cerca",
+  "APPLICATION_RESET": "Resetta",
+  "APPLICATION_SELECT": "Seleziona",
+  "APPLICATION_BACK": "Indietro",
+  "APPLICATION_ACTIONS": "Azioni",
+  "APPLICATION_NAME": "Nome",
+  "APPLICATION_EMAIL": "Email",
+  "APPLICATION_USERNAME": "Username",
+  "APPLICATION_ACTIONS": "Azioni",
+  "APPLICATION_EDIT": "Modifica",
+  "APPLICATION_DELETE": "Elimina",
+  "APPLICATION_CANCEL": "Cancella",
+  "APPLICATION_CANCEL_ALL": "Cancella tutti",
+  "APPLICATION_UPLOAD": "Upload",
+  "APPLICATION_UPLOAD_ALL": "Upload tutti",
+  "APPLICATION_REMOVE": "Rimuovi",
+  "APPLICATION_REMOVE_ALL": "Rimuovi tutti",
+  "APPLICATION_SUBMIT": "Applica",
+  "APPLICATION_CREATED_AT": "Creato Il",
+  "APPLICATION_UPDATED_AT": "Aggiornato Il",
+  "APPLICATION_QUICK": "Rapida",
+  "APPLICATION_WIZARD": "Wizard",
+  "APPLICATION_BULK": "Massiva",
+  "APPLICATION_INTERFACES_LIST": "Lista Interfacce",
+  "APPLICATION_NEW_INTERFACE": "Nuova Interfaccia",
+  "APPLICATION_NUMBER_AGENTS": "Number of Agents",
+  "APPLICATION_BY": "Per",
+  "APPLICATION_ALL": "Tutti",
+  "APPLICATION_PROFILE": "Profilo",
+  "APPLICATION_CHATS": "Chats",
+  "APPLICATION_SENT": "Inviate",
+  "APPLICATION_IS": "E'",
+  "APPLICATION_ARE": "Sono",
+  "APPLICATION_UPLOAD_QUEUE_PROGRESS": "Progresso coda di upload",
+  "APPLICATION_NOT_SENT": "Non Inviate",
+  "APPLICATION_DRAFT": "Bozze",
+  "APPLICATION_TRASH": "Cestino",
+  "APPLICATION_COMPOSE": "Componi",
+  "APPLICATION_WRITE": "Scrivi",
+  "APPLICATION_SPAM": "Spam",
+  "APPLICATION_MORE": "Altro",
+  "APPLICATION_MARK_AS_READ": "Letto",
+  "APPLICATION_MARK_AS_UNREAD": "Da Leggere",
+  "APPLICATION_MAILS_PER_PAGE": "Mails per Pagina",
+  "APPLICATION_MORE": "Altro",
+  "APPLICATION_REPLY": "Rispondi",
+  "APPLICATION_REPLY_TO_ALL": "Rispondi a Tutti",
+  "APPLICATION_FORWARD": "Inoltra",
+  "APPLICATION_PRINT": "Stampa",
+  "APPLICATION_FROM": "Da",
+  "APPLICATION_TO": "A",
+  "APPLICATION_BCC": "Ccn",
+  "APPLICATION_SEND": "Invia",
+  "APPLICATION_DISCARD": "Scarta",
+  "APPLICATION_SAVE_AS_DRAFT": "Salva come Bozza",
+  "APPLICATION_SUBJECT": "Oggetto",
+  "APPLICATION_OUTGOING": "In Uscita",
+  "APPLICATION_INCOMING": "In Ingresso",
+  "APPLICATION_INSERT_TEXT": "Inserisci testo",
+  "APPLICATION_PASSWORD": "Password",
+  "APPLICATION_NEW_PASSWORD": "Nuova Password",
+  "APPLICATION_PORT": "Porta",
+  "APPLICATION_SECURE": "Sicuro",
+  "APPLICATION_WEB_ADDRESS": "Indirizzo Web",
+  "APPLICATION_SNIPPET": "Snippet",
+  "APPLICATION_EMBEDDING": "Embedding",
+  "APPLICATION_APPEARANCE": "Aspetto",
+  "APPLICATION_FORMS": "Form",
+  "APPLICATION_CONTINUE": "Continua",
+  "APPLICATION_INCOMING_MAIL_SERVER": "Mail Server di Ingresso",
+  "APPLICATION_OUTGOING_MAIL_SERVER": "Mail Server di Uscita",
+  "APPLICATION_DELETE_MAIL_FROM_SERVER": "Cancella Mail sul Server",
+  "APPLICATION_SEARCH_FILTER": "Filtro di Ricerca",
+  "APPLICATION_MAILBOX": "Mailbox",
+  "APPLICATION_WARNING": "Attenzione",
+  "APPLICATION_ACCOUNT_INFO": "Informazioni account",
+  "APPLICATION_CONFIRM": "Conferma",
+  "APPLICATION_GENERALS": "Generali",
+  "APPLICATION_PLAYBACK_OPTION_J": "J: If option is specified, the application will jump to priority n+101 if present when a file specified to be played does not exist.",
+  "APPLICATION_PLAYBACK_OPTION_NOANSWER": "NOANSWER: Play the sound file, but don't answer the channel first (if hasn't been answered already). Not all channels support playing messages while still on hook.",
+  "APPLICATION_PLAYBACK_OPTION_SAY": "SAY: Use say.conf to interpret the string",
+  "APPLICATION_PLAYBACK_OPTION_SKIP": "SKIP: Play the sound file only if the channel has already been answered. If the channel has not yet been answered, the Playback command will return immediately without playing anything.",
+  "APPLICATION_UPDATE": "Aggiorna",
+  "APPLICATION_CREATE": "Crea",
+  "APPLICATION_STATISTICS": "Statistiche",
+  "APPLICATION_VISITORS": "Visitatori",
+  "APPLICATION_VISITOR": "Visitatore",
+  "APPLICATION_LANGUAGES": "Lingue",
+  "APPLICATION_ORIGIN": "Origine",
+  "APPLICATION_STATUS": "Stato",
+  "APPLICATION_HOURS_SINCE_CREATED": "Le ore dalla creazione",
+  "APPLICATION_TIME": "Ora",
+  "APPLICATION_WEEKDAY": "Giorno della Settimana",
+  "APPLICATION_MONTHDAY": "Giorno del Mese",
+  "APPLICATION_MONTH": "Mese",
+  "APPLICATION_MAIN_COLOR": "Colore principale",
+  "APPLICATION_FOCUS_COLOR": "Colore del focus",
+  "APPLICATION_BUTTON_COLOR": "Colore del pulsante",
+  "APPLICATION_CONVERSATION": "Conversazione",
+  "APPLICATION_CONVERSATIONS": "Conversazioni",
+  "APPLICATION_TYPE": "Tipo",
+  "APPLICATION_INTERVAL_TYPE": "Tipo Intervallo",
+  "APPLICATION_INTERFACE": "Interfaccia",
+  "APPLICATION_REMOTE_ADDRESS": "Indirizzo Remoto",
+  "APPLICATION_REFERER": "Referer",
+  "APPLICATION_BROWSER": "Browser",
+  "APPLICATION_ENGINE": "Motore",
+  "APPLICATION_OS": "Sistema Operativo",
+  "APPLICATION_DEVICE": "Dispositivo",
+  "APPLICATION_COUNTRY": "Stato",
+  "APPLICATION_REGION": "Regione",
+  "APPLICATION_REGISTRY": "Registry",
+  "APPLICATION_CITY": "Città",
+  "APPLICATION_LATITUDE": "Latitudine",
+  "APPLICATION_LONGITUDE": "Longitudine",
+  "APPLICATION_ARRIVAL_TIME": "Tempo di Arrivo",
+  "APPLICATION_TRANSCRIPT": "Trascrizione",
+  "APPLICATION_ROLE": "Ruolo",
+  "APPLICATION_ENQUIRIES": "Enquiries",
+  "APPLICATION_ENQUIRY": "Enquiry",
+  "APPLICATION_TEXT": "Testo",
+  "APPLICATION_SUMMARY": "Sommario",
+  "APPLICATION_MONDAY": "Lunedì",
+  "APPLICATION_TUESDAY": "Martedì",
+  "APPLICATION_WEDNESDAY": "Mercoledì",
+  "APPLICATION_THURSDAY": "Giovedì",
+  "APPLICATION_FRIDAY": "Venerdì",
+  "APPLICATION_SATURDAY": "Sabato",
+  "APPLICATION_SUNDAY": "Domenica",
+  "APPLICATION_JANUARY": "Gennaio",
+  "APPLICATION_FEBRUARY": "Febbraio",
+  "APPLICATION_MARCH": "Marzo",
+  "APPLICATION_APRIL": "Aprile",
+  "APPLICATION_MAY": "Maggio",
+  "APPLICATION_JUNE": "Giugno",
+  "APPLICATION_JULY": "Luglio",
+  "APPLICATION_AUGUST": "Agosto",
+  "APPLICATION_SEPTEMBER": "Settembre",
+  "APPLICATION_OCTOBER": "Ottobre",
+  "APPLICATION_NOVEMBER": "Novembre",
+  "APPLICATION_DECEMBER": "Dicembre",
+  "APPLICATION_OPENED": "Aperte",
+  "APPLICATION_CODEC": "Codec",
+  "APPLICATION_CLOSED": "Chiuse",
+  "APPLICATION_PENDING": "Pendenti",
+  "APPLICATION_SERVED": "Servite",
+  "APPLICATION_UNSERVED": "Non Servite",
+  "APPLICATION_READ": "Lette",
+  "APPLICATION_UNREAD": "Non Lette",
+  "APPLICATION_LOCATION": "Posizione",
+  "APPLICATION_LOCATIONS": "Posizioni",
+  "APPLICATION_REMOTE": "Indirizzo Remoto",
+  "APPLICATION_WEB_SITE_INFO": "Informazioni sito web",
+  "APPLICATION_WEB_SITE_APPEARANCE": "Aspetto sito web",
+  "APPLICATION_WEB_SITE_APPEARANCE": "Aspetto sito web",
+  "APPLICATION_OTHER_INFO": "Altre Informazioni",
+  "APPLICATION_OVERVIEW": "Panoramica",
+  "APPLICATION_CONFIRM_PASSWORD": "Conferma password",
+  "APPLICATION_TRANSPORT": "Trasporto",
+  "APPLICATION_ACCOUNTCODE": "Accountcode",
+  "APPLICATION_NAT": "NAT",
+  "APPLICATION_PERSONAL_INFO": "Informazioni Personali",
+  "APPLICATION_CHANGE_AVATAR": "Cambia Avatar",
+  "APPLICATION_CHANGE_PASSWORD": "Cambia Password",
+  "APPLICATION_ANIMATION": "Animazione",
+  "APPLICATION_ROUNDED": "Arrotondata",
+  "APPLICATION_SQUARED": "Squadrata",
+  "APPLICATION_HEADER_SHAPE": "Forma dell'header",
+  "APPLICATION_HEADER_ONLINE": "Header Online",
+  "APPLICATION_USERNAME_PLACEHOLDER": "Username Placeholder",
+  "APPLICATION_EMAIL_PLACEHOLDER": "Email Placeholder",
+  "APPLICATION_START_CHAT_BUTTON": "Pulsante Start Chat",
+  "APPLICATION_LABELS": "Etichette",
+  "APPLICATION_ONLINE_MESSAGE": "Messaggio online",
+  "APPLICATION_HEADER_OFFLINE": "Header Offline",
+  "APPLICATION_OFFLINE_MESSAGE": "Messaggio Offline",
+  "APPLICATION_ENQUIRY_MESSAGE_PLACEHOLDER": "Messaggio dell'Enquiry Placeholder",
+  "APPLICATION_ENQUIRY_BUTTON": "Pulsante Enquiry",
+  "APPLICATION_ONLINE_STATE": "Stato Online",
+  "APPLICATION_OFFLINE_STATE": "Stato Offline",
+  "APPLICATION_DOWNLOAD_TRANSCRIPT": "Scarica Transcript",
+  "APPLICATION_TEAM": "Team",
+  "APPLICATION_DESIGN": "Design",
+  "APPLICATION_VARIABLES": "Variabili",
+  "APPLICATION_VARIABLE": "Variabile",
+  "APPLICATION_VALUE": "Valore",
+  "APPLICATION_NEW_VARIABLE": "Nuova Variabile",
+  "APPLICATION_ODBC": "ODBC",
+  "APPLICATION_NEW_ODBC": "Nuovo ODBC",
+  "APPLICATION_NEW_APPLICATION": "Nuova Applicazione",
+  "APPLICATION_TIMEOUT": "Timeout",
+  "APPLICATION_AGENT_TIMEOUT": "Timeout Agente",
+  "APPLICATION_APPLICATION_TIMEOUT": "Timeout Applicazione",
+  "APPLICATION_UNKNOWN": "Sconosciuto",
+  "APPLICATION_OPTIONS": "Opzioni",
+  "APPLICATION_QUEUE_OPTION_c": "c: Continue in the dialplan if the callee hangs up.",
+  "APPLICATION_QUEUE_OPTION_C": "C: Mark all calls as 'answered elsewhere' when cancelled.",
+  "APPLICATION_QUEUE_OPTION_d": "d: data-quality (modem) call (minimum delay).",
+  "APPLICATION_QUEUE_OPTION_F": "F: When the caller hangs up, transfer the called member to the specified destination and start execution at that location.",
+  "APPLICATION_QUEUE_OPTION_h": "h: Allow callee to hang up by pressing *.",
+  "APPLICATION_QUEUE_OPTION_H": "H: Allow caller to hang up by pressing *.",
+  "APPLICATION_QUEUE_OPTION_I": "I: Asterisk will ignore any connected line update requests or any redirecting party update requests it may receive on this dial attempt.",
+  "APPLICATION_QUEUE_OPTION_i": "i: Ignore call forward requests from queue members and do nothing when they are requested.",
+  "APPLICATION_QUEUE_OPTION_k": "k: Allow the called party to enable parking of the call by sending the DTMF sequence defined for call parking in features.conf.",
+  "APPLICATION_QUEUE_OPTION_K": "K: Allow the calling party to enable parking of the call by sending the DTMF sequence defined for call parking in features.conf.",
+  "APPLICATION_QUEUE_OPTION_n": "n: No retries on the timeout, will exit this application and go to the next step.",
+  "APPLICATION_QUEUE_OPTION_R": "R: Ring instead of playing MOH when a member channel is actually ringing.",
+  "APPLICATION_QUEUE_OPTION_r": "r: Ring instead of playing MOH. Periodic Announcements are still made, if applicable.",
+  "APPLICATION_QUEUE_OPTION_t": "t: Allow the called user to transfer the calling user.",
+  "APPLICATION_QUEUE_OPTION_T": "T: Allow the calling user to transfer the call.",
+  "APPLICATION_QUEUE_OPTION_w": "w: Allow the called user to write the conversation to disk via Monitor.",
+  "APPLICATION_QUEUE_OPTION_W": "W: Allow the calling user to write the conversation to disk via Monitor.",
+  "APPLICATION_QUEUE_OPTION_x": "x: Allow the called user to write the conversation to disk via MixMonitor.",
+  "APPLICATION_QUEUE_OPTION_X": "X: Allow the calling user to write the conversation to disk via MixMonitor.",
+  "APPLICATION_FILENAME": "File name",
+  "APPLICATION_VERSION": "Versione",
+  "MESSAGE_CONFIGURATION_COMPLETED": "Configurazione completata! Conferma per procedere",
+  "MESSAGE_REQUIRED_FIELD": "Campo obbligatorio",
+  "MESSAGE_WRONG_FORMAT": "Formato non valido",
+  "MESSAGE_WRONG_PASSWORD": "Password errata",
+  "MESSAGE_NUMERIC_FIELD": "Solo valori numerici consentiti",
+  "MESSAGE_NO_USERS_ONLINE": "Nessun Utente Online",
+  "MESSAGE_NO_USERS_OFFLINE": "Nessun Utente Offline",
+  "MESSAGE_NO_USERS_FOUND": "Nessun Utente Trovato",
+  "MESSAGE_NO_AGENTS_FOUND": "Nessuno Agente Trovato",
+  "MESSAGE_SAVE_AS_DRAFT": "Messaggio salvato in bozze",
+  "MESSAGE_WELL_DONE": "Ben fatto",
+  "MESSAGE_SUCCESS": "Successo",
+  "MESSAGE_ERROR": "Errore",
+  "MESSAGE_CHAT_PROPERLY_ASSIGNED": "Sessione di chat correttamente assegnata",
+  "MESSAGE_CHAT_ALREADY_ASSIGNED": "Sessione di chat già assegnata",
+  "MESSAGE_SOMETHING_WENT_WRONG": "Qualcosa è andato storto",
+  "MESSAGE_MAIL_ACCOUNT_UPDATE_SUCCESS": "Il tuo account mail è stato aggiornato correttamente",
+  "MESSAGE_MAIL_ACCOUNT_UPDATE_FAILURE": "Si è verificato un problema durante l'aggiornamento del tuo account mail",
+  "MESSAGE_CHAT_WEBSITE_UPDATE_SUCCESS": "Il tuo chat website è stato aggiornato correttamente",
+  "MESSAGE_CHAT_WEBSITE_UPDATE_FAILURE": "Si è verificato un problema durante l'aggiornamento del tuo chat website",
+  "MESSAGE_CHAT_WEBSITE_CREATE_SUCCESS": "Il tuo chat website è stato creato correttamente",
+  "MESSAGE_CHAT_WEBSITE_CREATE_FAILURE": "Si è verificato un problema durante la creazione del tuo chat website",
+  "MESSAGE_CHAT_WEBSITE_DELETE_SUCCESS": "Il tuo chat website è stato rimosso correttamente",
+  "MESSAGE_CHAT_WEBSITE_DELETE_FAILURE": "Si è verificato un problema durante la rimozione del tuo chat website",
+  "MESSAGE_CHAT_QUEUE_UPDATE_SUCCESS": "La tua coda chat è stata aggiornata correttamente",
+  "MESSAGE_CHAT_QUEUE_UPDATE_FAILURE": "Si è verificato un problema durante l'aggiornamento della tua coda di chat",
+  "MESSAGE_CHAT_QUEUE_CREATE_SUCCESS": "La tua coda chat è stato creata correttamente",
+  "MESSAGE_CHAT_QUEUE_CREATE_FAILURE": "Si è verificato un problema durante la creazione della tua coda di chat",
+  "MESSAGE_CHAT_QUEUE_DELETE_SUCCESS": "La tua coda chat è stato rimossa correttamente",
+  "MESSAGE_CHAT_QUEUE_DELETE_FAILURE": "Si è verificato un problema durante la rimozione della tua coda di chat",
+  "MESSAGE_TEAM_UPDATE_SUCCESS": "Il tuo chat website è stato aggiornato correttamente",
+  "MESSAGE_TEAM_UPDATE_FAILURE": "Si è verificato un problema durante l'aggiornamento del tuo chat website",
+  "MESSAGE_TEAM_CREATE_SUCCESS": "Il tuo chat website è stato creato correttamente",
+  "MESSAGE_TEAM_CREATE_FAILURE": "Si è verificato un problema durante la creazione del tuo chat website",
+  "MESSAGE_TEAM_DELETE_SUCCESS": "Il tuo chat website è stato rimosso correttamente",
+  "MESSAGE_TEAM_DELETE_FAILURE": "Si è verificato un problema durante la rimozione del tuo chat website",
+  "MESSAGE_FAX_ACCOUNT_GET_FAILURE": "Si è verificato un problema nell'ottenere la lista degli account Fax",
+  "MESSAGE_FAX_ACCOUNT_UPDATE_SUCCESS": "Il tuo fax account è stato aggiornato correttamente",
+  "MESSAGE_FAX_ACCOUNT_UPDATE_FAILURE": "Si è verificato un problema durante l'aggiornamento del tuo fax account",
+  "MESSAGE_FAX_ACCOUNT_CREATE_SUCCESS": "Il tuo fax account è stato creato correttamente",
+  "MESSAGE_FAX_ACCOUNT_CREATE_FAILURE": "Si è verificato un problema durante la creazione del tuo fax account",
+  "MESSAGE_FAX_ACCOUNT_DELETE_SUCCESS": "Il tuo fax account è stato rimosso correttamente",
+  "MESSAGE_FAX_ACCOUNT_DELETE_FAILURE": "Si è verificato un problema durante la rimozione del tuo fax account",
+  "MESSAGE_NO_AVAILABLE_TEAMS": "Nessun team disponibile.",
+  "MESSAGE_MAIL_MESSAGE_SEND_FAILURE": "Si è verificato un problema durante l'invio della mail",
+  "MESSAGE_MAIL_MESSAGE_SEND_SUCCESS": "Mail inviata correttamente",
+  "MESSAGE_MAIL_MESSAGE_NEW": "Nuova richiesta disponibile",
+  "MESSAGE_EXIST_ROUTE": "Combinazione Extension/context/type già esistente",
+  "DESCRIPTION_VOICE_CONTEXT": "Il contesto dell' extension relativa.",
+  "DESCRIPTION_VOICE_HOST": "Il dominio o il nome dell' host per il server SIP.",
+  "DESCRIPTION_VOICE_NAT": "Cambia il comportamento di Asterisk per i client dietro ad un fireewall. Se una qualsiasi dei valori selezionati è 'no', Asterisk ignorerà tutti gli altri valori e imposterà il nat=no.",
+  "DESCRIPTION_VOICE_TYPE": "Determina il ruolo del SIP all' interno di asterisk. User: usato per identificare le chiamate in arrivo - Peer: per le chiamate in uscita - Friend: copre entrambe le caratteristiche di User e Peer.",
+  "DESCRIPTION_VOICE_CODEC": "Abilita i codec in ordine di preferenza.",
+  "DESCRIPTION_VOICE_ACCOUNTCODE": "Gli utenti possono essere associati ad un codice account.",
+  "DESCRIPTION_VOICE_TRANSPORT": "Imposta il valore di default del transport. L'ordine determina il valore primario di default.",
+  "APPLICATION_STATUS_OPEN": "Aperto",
+  "APPLICATION_STATUS_CLOSED": "Chiuso",
+  "APPLICATION_STATUS_NEW": "Nuovo",
+  "APPLICATION_STATUS_PENDING": "In sospeso",
+  "APPLICATION_STATUS_SOLVED": "Risolto",
+  "MESSAGE_NO_AVAILABLE_ACCOUNTS": "Nessun account disponibile",
+  "APPLICATION_ECM": "ECM",
+  "APPLICATION_UNASSIGNED": "Non assegnato",
+  "MESSAGE_NO_AVAILABLE_MESSAGES": "Nessun messaggio disponibile",
+  "MESSAGE_STATUS_UPDATE_SUCCESS": "Stato aggiornato correttamente",
+  "MESSAGE_STATUS_UPDATE_FAILURE": "Si è verificato un problema durante l'aggiornamento dello stato",
+  "MESSAGE_MAIL_MESSAGE_ASSIGNEMNT_SUCCESS": "Assegnazione eseguita correttamente",
+  "MESSAGE_MAIL_MESSAGE_ASSIGNEMNT_FAILURE": "Si è verificato un problema durante l'assegnazione dell'agent",
+  "MESSAGE_NO_AVAILABLE_AUTOMATIONS": "Nessuna automazione disponibile",
+  "APPLICATION_TIMELINE": "Timeline",
+  "APPLICATION_AT": "Alle",
+  "APPLICATION_GO_TO": "Vai al",
+  "APPLICATION_EMBED_SNIPPET": "Includi lo Snippet",
+  "MESSAGE_EMBED_SNIPPET": "Copia il seguente script e inseriscilo nel tuo codice HTML sorgente del tuo sito web alla fine del tag <body>. Deve essere inserito in ogni pagina nella quale desideri mostrare lo Spinnet della Chat xCally.",
+  "MESSAGE_NO_AVAILABLE_APPLICATIONS": "Nessuna applicazione disponibile",
+  "MESSAGE_NO_AVAILABLE_WEBSITES": "Nessun website disponibile",
+  "MESSAGE_TRUNK_FAX_ASSOCIATED": "Il Trunk è associato con una o più account fax, eliminale e riprova",
+  "APPLICATION_ALLOWED_CODECS": "Codec permessi",
+  "APPLICATION_CURRENT_PASSWORD": "Password Attuale",
+  "APPLICATION_RE_TYPE_NEW_PASSWORD": "Re-Inserisci la nuova Password",
+  "MESSAGE_EXISTS_USERNAME": "Username già presente",
+  "MESSAGE_EXISTS_EMAIL": "Email già presente",
+  "APPLICATION_ZENDESK": "Zendesk",
+  "APPLICATION_TOKEN": "Token",
+  "APPLICATION_AUTHENTICATION_TYPE": "Tipo di Autenticazione",
+  "MESSAGE_EXIST_DOMAIN": "Domain already exist",
+  "APPLICATION_CHECK_CONNECTION": "Controlla connessione",
+  "MESSAGE_ACCOUNT_VERIFIED": "Account Verificato",
+  "MESSAGE_ACCOUNT_INVALID": "Account Invalido",
+  "APPLICATION_LAST_SEEN": "Ultimo Accesso",
+  "APPLICATION_CUSTOM_FIELDS": "Custom Fields",
+  "APPLICATION_NEW_CUSTOM_FIELD": "Nuovo Custom Field",
+  "APPLICATION_CUSTOM_FIELD_ID": "Custom Field Id",
+  "APPLICATION_CUSTOM_FIELD": "Custom Field",
+  "APPLICATION_CONFIGURATIONS": "Configurazioni",
+  "APPLICATION_CONFIGURATION": "Configurazione",
+  "MESSAGE_EXIST_CUSTOM_FIELD": "Combinazione Account/Field è già presente",
+  "APPLICATION_NEW_CONFIGURATION": "Nuova Configurazione",
+  "MESSAGE_VARIABLE_CONFIGURATION_ASSOCIATED": "La Variabile è associata con una o più configurazione Zendesk, eliminale e riprova"
+}
diff --git a/public/assets/plugins/angular-elastic-builder-back/.bower.json b/public/assets/plugins/angular-elastic-builder-back/.bower.json
new file mode 100644
index 0000000..1b348aa
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/.bower.json
@@ -0,0 +1,32 @@
+{
+  "name": "angular-elastic-builder",
+  "homepage": "https://github.com/dncrews/angular-elastic-builder",
+  "authors": [
+    "Dan Crews <[email-masked]>"
+  ],
+  "description": "Angular Module for building an Elasticsearch Query",
+  "main": "dist/angular-elastic-builder.js",
+  "keywords": [
+    "elasticsearch",
+    "angular"
+  ],
+  "license": "MIT",
+  "ignore": [
+    "**/.*",
+    "node_modules",
+    "bower_components",
+    "test",
+    "tests"
+  ],
+  "version": "1.4.0",
+  "_release": "1.4.0",
+  "_resolution": {
+    "type": "version",
+    "tag": "1.4.0",
+    "commit": "5794b36762eb825433a836dbae055be841ee057c"
+  },
+  "_source": "git://github.com/dncrews/angular-elastic-builder.git",
+  "_target": "~1.4.0",
+  "_originalSource": "angular-elastic-builder",
+  "_direct": true
+}
\ No newline at end of file
diff --git a/public/assets/plugins/angular-elastic-builder-back/LICENSE.md b/public/assets/plugins/angular-elastic-builder-back/LICENSE.md
new file mode 100644
index 0000000..ea15051
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/LICENSE.md
@@ -0,0 +1,9 @@
+Copyright © 2014 by Intellectual Reserve, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization.
diff --git a/public/assets/plugins/angular-elastic-builder-back/README.md b/public/assets/plugins/angular-elastic-builder-back/README.md
new file mode 100644
index 0000000..d05655b
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/README.md
@@ -0,0 +1,141 @@
+# Angular Elasticsearch Query Builder
+
+[![NPM version][npm-image]][npm-url]
+![Bower version][bower-image]
+[![Downloads][downloads-image]][downloads-url]
+[![Tips][gratipay-image]][gratipay-url]
+
+This is an Angular.js directive for building an [Elasticsearch](https://www.elastic.co/) query.
+You just give it the fields and can generate a query for it. Its layout is defined using [Bootstrap](http://getbootstrap.com/) classes, but you may also choose to just style it yourself.
+
+It's still pretty early on, as it doesn't support a whole lot of use-cases, but we need to make it awesome. Contributions accepted.
+
+## Try it Out
+[View an example here](http://dncrews.com/angular-elastic-builder/examples/)
+
+## Usage
+
+### Dependency
+Notice: this plugin requires the [Angular Recursion](https://github.com/marklagendijk/angular-recursion) module.
+
+### Installation
+First you'll need to download the [dist](https://github.com/dncrews/angular-elastic-builder/tree/master/dist) files and include this JS file to your app (don't forget to substitute `x.x.x` with the current version number), along with the RecursionHelper, if you're not already using it.
+```html
+<script type="text/javascript" src="/angular-recursion.min.js"></script>
+<script type="text/javascript" src="/angular-elastic-builder.min.js"></script>
+```
+
+Then make sure that it's included in your app's dependencies during module creation.
+
+```js
+angularmodule('appName', [ 'angular-elastic-builder' ]);
+```
+
+Then you can use it in your app
+```js
+/* Controller code */
+
+/**
+ * The elasticBuilderData object will be modified in place so that you can use
+ * your own $watch, and/or your own saving mechanism
+ */
+$scope.elasticBuilderData = {};
+$scope.elasticBuilderData.query = [];
+
+/**
+ * This object is the lookup for what fields
+ * are available in your database, as well as definitions of what kind
+ * of data they are
+ */
+$scope.elasticBuilderData.fields = {
+  'some.number.field': { type: 'number' },
+  'some.term.field': { type: 'term' },
+  'some.boolean.field': { type: 'term', subType: 'boolean' },
+  'multi.selector': { type: 'multi', choices: [ 'AZ', 'CA', 'CT' ]}
+};
+```
+
+```html
+<div data-elastic-builder="elasticBuilderData"></div>
+```
+
+The above elasticFields would allow you create the following form:
+![Screenshot][screenshot-image]
+
+Which represents the following Elasticsearch Query:
+```json
+[
+  {
+    "terms": {
+      "multi.selector": [
+        "AZ",
+        "CT"
+      ]
+    }
+  },
+  {
+    "term": {
+      "some.boolean.field": "0"
+    }
+  },
+  {
+    "not": {
+      "filter": {
+        "term": {
+          "some.term.field": "Hello World"
+        }
+      }
+    }
+  },
+  {
+    "and": [
+      {
+        "range": {
+          "some.number.field": {
+            "gte": 0
+          }
+        }
+      },
+      {
+        "range": {
+          "some.number.field": {
+            "lt": 100
+          }
+        }
+      }
+    ]
+  }
+]
+```
+
+
+### Field Options
+  - `type`: This determines how the fields are displayed in the form.
+    - Currently supported:
+      - `'number'`: in addition to Generic Options, gets "&gt;", "&ge;", "&lt;", "&le;", "="
+      - `'term'`: in addition to Generic Options, gets "Equals" and "! Equals"
+      - `'boolean'`: Does not get Generic Options. Gets `true` and `false`
+        - These are actually "equals 0" and "equals 1" for the database query
+
+Generic Options
+  - In addition to any specific options for fields, all fields also get a "Exists" and "! Exists" option
+
+
+## External Changes && Initial State
+If you want to pass in an initial state (or if you make changes to the query externally), you'll need to
+set the configuration flag `needsUpdate` to `true`. Any time this flag changes to `true`, this directive
+will overwrite the current state and data with whatever is now defined in your configuration object.
+
+
+## Local Development
+To work on this module locally, you will need to clone it and run `gulp watch`. This will ensure that your changes get compiled properly. You will also need to make sure you run `gulp` to build the "dist" files before commit.
+
+
+[npm-image]: https://img.shields.io/npm/v/angular-elastic-builder.svg
+[npm-url]: https://www.npmjs.org/package/angular-elastic-builder
+[bower-image]: https://img.shields.io/bower/v/angular-elastic-builder.svg
+[downloads-image]: https://img.shields.io/npm/dm/angular-elastic-builder.svg
+[downloads-url]: https://www.npmjs.org/package/angular-elastic-builder
+[gratipay-image]: https://img.shields.io/gratipay/dncrews.svg
+[gratipay-url]: https://www.gratipay.com/dncrews/
+[screenshot-image]: https://raw.githubusercontent.com/dncrews/angular-elastic-builder/master/screenshot.png
diff --git a/public/assets/plugins/angular-elastic-builder-back/bower.json b/public/assets/plugins/angular-elastic-builder-back/bower.json
new file mode 100644
index 0000000..43641b1
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/bower.json
@@ -0,0 +1,21 @@
+{
+  "name": "angular-elastic-builder",
+  "homepage": "https://github.com/dncrews/angular-elastic-builder",
+  "authors": [
+    "Dan Crews <[email-masked]>"
+  ],
+  "description": "Angular Module for building an Elasticsearch Query",
+  "main": "dist/angular-elastic-builder.js",
+  "keywords": [
+    "elasticsearch",
+    "angular"
+  ],
+  "license": "MIT",
+  "ignore": [
+    "**/.*",
+    "node_modules",
+    "bower_components",
+    "test",
+    "tests"
+  ]
+}
diff --git a/public/assets/plugins/angular-elastic-builder-back/dist/angular-elastic-builder.js b/public/assets/plugins/angular-elastic-builder-back/dist/angular-elastic-builder.js
new file mode 100644
index 0000000..352ab2e
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/dist/angular-elastic-builder.js
@@ -0,0 +1,608 @@
+/**
+ * # angular-elastic-builder
+ * ## Angular Module for building an Elasticsearch Query
+ *
+ * @version v1.4.0
+ * @link https://github.com/dncrews/angular-elastic-builder.git
+ * @license MIT
+ * @author Dan Crews <[email-masked]>
+ */
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/module.js
+ *
+ * Angular Module for building an Elasticsearch query
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder', [
+    'RecursionHelper',
+  ]);
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/BuilderDirective.js
+ *
+ * Angular Directive for injecting a query builder form.
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder')
+    .directive('elasticBuilder', [
+      'elasticQueryService',
+
+      function EB(elasticQueryService) {
+
+        return {
+          scope: {
+            data: '=elasticBuilder',
+          },
+
+          templateUrl: 'angular-elastic-builder/BuilderDirective.html',
+
+          link: function(scope) {
+            var data = scope.data;
+
+            scope.filters = [];
+
+            /**
+             * Removes either Group or Rule
+             */
+            scope.removeChild = function(idx) {
+              scope.filters.splice(idx, 1);
+            };
+
+            /**
+             * Adds a Single Rule
+             */
+            scope.addRule = function() {
+              scope.filters.push({});
+            };
+
+            /**
+             * Adds a Group of Rules
+             */
+            scope.addGroup = function() {
+              scope.filters.push({
+                type: 'group',
+                subType: '$and',
+                rules: [],
+              });
+            };
+
+            /**
+             * Any time "outside forces" change the query, they should tell us so via
+             * `data.needsUpdate`
+             */
+            scope.$watch('data.needsUpdate', function(curr) {
+              if (!curr) {
+                return;
+              }
+
+              scope.filters = elasticQueryService.toFilters(data.query, scope.data.fields);
+              scope.data.needsUpdate = false;
+            });
+
+            /**
+             * Changes on the page update the Query
+             */
+            scope.$watch('filters', function(curr) {
+              if (!curr) {
+                return;
+              }
+
+              data.query = elasticQueryService.toQuery(scope.filters, scope.data.fields);
+            }, true);
+          }
+        };
+      }
+
+    ]);
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/Chooser.js
+ *
+ * This file is to help recursively, to decide whether to show a group or rule
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticBuilderChooser', [
+    'RecursionHelper',
+    'groupClassHelper',
+
+    function elasticBuilderChooser(RH, groupClassHelper) {
+
+      return {
+        scope: {
+          elasticFields: '=',
+          item: '=elasticBuilderChooser',
+          onRemove: '&',
+        },
+
+        templateUrl: 'angular-elastic-builder/ChooserDirective.html',
+
+        compile: function(element) {
+          return RH.compile(element, function(scope, el, attrs) {
+            var depth = scope.depth = (+attrs.depth);
+            var item = scope.item;
+
+            scope.getGroupClassName = function() {
+              var level = depth;
+              if (item.type === 'group') {
+                level++;
+              }
+
+              return groupClassHelper(level);
+            };
+          });
+        }
+      };
+    }
+
+  ]);
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/Group.js
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticBuilderGroup', [
+    'RecursionHelper',
+    'groupClassHelper',
+
+    function elasticBuilderGroup(RH, groupClassHelper) {
+
+      return {
+        scope: {
+          elasticFields: '=',
+          group: '=elasticBuilderGroup',
+          onRemove: '&',
+        },
+
+        templateUrl: 'angular-elastic-builder/GroupDirective.html',
+
+        compile: function(element) {
+          return RH.compile(element, function(scope, el, attrs) {
+            var depth = scope.depth = (+attrs.depth);
+            var group = scope.group;
+
+            scope.addRule = function() {
+              group.rules.push({});
+            };
+            scope.addGroup = function() {
+              group.rules.push({
+                type: 'group',
+                subType: '$and',
+                rules: [],
+              });
+            };
+
+            scope.removeChild = function(idx) {
+              group.rules.splice(idx, 1);
+            };
+
+            scope.getGroupClassName = function() {
+              return groupClassHelper(depth + 1);
+            };
+          });
+        }
+      };
+    }
+
+  ]);
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/Rule.js
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticBuilderRule', [
+
+    function elasticBuilderRule() {
+      return {
+        scope: {
+          elasticFields: '=',
+          rule: '=elasticBuilderRule',
+          onRemove: '&',
+        },
+
+        templateUrl: 'angular-elastic-builder/RuleDirective.html',
+
+        link: function(scope) {
+          scope.getType = function() {
+            var fields = scope.elasticFields;
+            var field = scope.rule.field;
+
+            if (!fields || !field) {
+              return;
+            }
+
+            if (fields[field].subType === 'boolean') {
+              return 'boolean';
+            }
+
+            return fields[field].type;
+          };
+        }
+      };
+    }
+
+  ]);
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/RuleTypes.js
+ *
+ * Determines which Rule type should be displayed
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticType', [
+
+    function() {
+      return {
+        scope: {
+          type: '=elasticType',
+          rule: '=',
+          guide: '=',
+        },
+
+        template: '<ng-include src="getTemplateUrl()" />',
+
+        link: function(scope) {
+          scope.getTemplateUrl = function() {
+            var type = scope.type;
+            if (!type) {
+              return;
+            }
+
+            type = type.charAt(0).toUpperCase() + type.slice(1);
+
+            return 'angular-elastic-builder/types/' + type + '.html';
+          };
+
+          // This is a weird hack to make sure these are numbers
+          scope.booleans = ['False', 'True'];
+          scope.booleansOrder = ['True', 'False'];
+
+          scope.inputNeeded = function() {
+            var needs = [
+              'equals',
+              'notEquals',
+
+              '$gt',
+              '$gte',
+              '$lt',
+              '$lte',
+            ];
+
+            return ~needs.indexOf(scope.rule.subType);
+          };
+        },
+      };
+    }
+
+  ]);
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/services/GroupClassHelper.js
+ *
+ * This keeps all of the groups colored correctly
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder')
+    .factory('groupClassHelper', function groupClassHelper() {
+
+      return function(level) {
+        var levels = [
+          '',
+          // 'list-group-item-info',
+          // 'list-group-item-success',
+          // 'list-group-item-warning',
+          // 'list-group-item-danger',
+        ];
+
+        return levels[level % levels.length];
+      };
+    });
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/services/QueryService.js
+ *
+ * This file is used to convert filters into queries, and vice versa
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder')
+    .factory('elasticQueryService', [
+      function() {
+
+        return {
+          toFilters: toFilters,
+          toQuery: toQuery,
+        };
+      }
+    ]);
+
+  function toFilters(query, fieldMap) {
+    var filters = query.map(parseQueryGroup.bind(query, fieldMap));
+    return filters;
+  }
+
+  function toQuery(filters, fieldMap) {
+    var query = filters.map(parseFilterGroup.bind(filters, fieldMap)).filter(function(item) {
+      return !!item;
+    });
+    return query;
+  }
+
+  function parseQueryGroup(fieldMap, group, truthy) {
+    if (truthy !== false) {
+      truthy = true;
+    }
+
+    var key = Object.keys(group)[0];
+    var typeMap = {
+      or: 'group',
+      and: 'group',
+      range: 'number',
+    };
+    var type = typeMap[key] || 'item';
+    var obj = getFilterTemplate(type);
+
+    switch (key) {
+      case '$or':
+      case '$and':
+        obj.rules = group[key].map(parseQueryGroup.bind(group, fieldMap));
+        obj.subType = key;
+        break;
+      case 'missing':
+      case 'exists':
+        obj.field = group[key].field;
+        obj.subType = {
+          exists: 'exists',
+          missing: 'notExists',
+        }[key];
+        delete obj.value;
+        break;
+      case 'term':
+      case 'terms':
+        obj.field = Object.keys(group[key])[0];
+        var fieldData = fieldMap[Object.keys(group[key])[0]];
+
+        if (fieldData.type === 'multi') {
+          var vals = group[key][obj.field];
+          if (typeof vals === 'string') {
+            vals = [vals];
+          }
+          obj.values = fieldData.choices.reduce(function(prev, choice) {
+            prev[choice] = truthy === (group[key][obj.field].indexOf(choice) > -1);
+            return prev;
+          }, {});
+        } else {
+          obj.subType = truthy ? 'equals' : 'notEquals';
+          obj.value = group[key][obj.field];
+
+          if (typeof obj.value === 'number') {
+            obj.subType = 'boolean';
+          }
+        }
+        break;
+      case 'range':
+        obj.field = Object.keys(group[key])[0];
+        obj.subType = Object.keys(group[key][obj.field])[0];
+        obj.value = group[key][obj.field][obj.subType];
+        break;
+      case 'not':
+        obj = parseQueryGroup(fieldMap, group[key].filter, false);
+        break;
+      default:
+        obj.field = Object.keys(group[key])[0];
+        break;
+    }
+
+    return obj;
+  }
+
+  function parseFilterGroup(fieldMap, group) {
+    var obj = {};
+    if (group.type === 'group') {
+      obj[group.subType] = group.rules.map(parseFilterGroup.bind(group, fieldMap)).filter(function(item) {
+        return !!item;
+      });
+      return obj;
+    }
+
+    var fieldName = group.field;
+    var fieldData = fieldMap[fieldName];
+
+    if (!fieldName) {
+      return;
+    }
+
+    switch (fieldData.type) {
+      case 'term':
+        if (fieldData.subType === 'boolean') {
+          group.subType = 'boolean';
+        }
+
+        if (!group.subType) {
+          return;
+        }
+        switch (group.subType) {
+          case 'equals':
+          case 'boolean':
+            if (group.value === undefined) {
+              return;
+            }
+            obj[fieldName] = group.value;
+            break;
+          case 'notEquals':
+            if (group.value === undefined) {
+              return;
+            }
+            obj[fieldName] = {
+              $ne: group.value
+            };
+            break;
+          case 'exists':
+            obj.exists = {
+              field: fieldName
+            };
+            break;
+          case 'notExists':
+            obj.missing = {
+              field: fieldName
+            };
+            break;
+          default:
+            throw new Error('unexpected subtype ' + group.subType);
+        }
+        break;
+
+      case 'select':
+
+      case 'number':
+        obj[fieldName] = {};
+
+        switch (group.subType) {
+          case 'equals':
+            obj[fieldName] = group.value;
+            break;
+          default:
+            obj[fieldName][group.subType] = group.value;
+        }
+
+        break;
+
+      case 'date':
+        if (group.subType === 'exists') {
+          obj.exists = {
+            field: fieldName
+          };
+        } else if (group.subType === 'notExists') {
+          obj.missing = {
+            field: fieldName
+          };
+        } else {
+          throw new Error('unexpected subtype');
+        }
+
+        break;
+
+      case 'multi':
+        obj.terms = {};
+        obj.terms[fieldName] = Object.keys(group.values || {}).reduce(function(prev, key) {
+          if (group.values[key]) {
+            prev.push(key);
+          }
+
+          return prev;
+        }, []);
+        break;
+
+        // case 'multi':
+        //   obj.terms = {};
+        //   obj.terms[fieldName] = Object.keys(group.values || {}).reduce(function(prev, key) {
+        //     if (group.values[key]) {
+        //       prev.push(key);
+        //     }
+        //
+        //     return prev;
+        //   }, []);
+        //   break;
+
+      default:
+        throw new Error('unexpected type');
+    }
+
+    return obj;
+  }
+
+  function getFilterTemplate(type) {
+    var templates = {
+      group: {
+        type: 'group',
+        subType: '',
+        rules: [],
+      },
+      item: {
+        field: '',
+        subType: '',
+        value: '',
+      },
+      number: {
+        field: '',
+        subType: '',
+        value: null,
+      }
+    };
+
+    return angular.copy(templates[type]);
+  }
+
+})(window.angular);
+
+(function(angular) {"use strict"; angular.module("angular-elastic-builder").run(["$templateCache", function($templateCache) {$templateCache.put("angular-elastic-builder/BuilderDirective.html","<!-- <div class=\"elastic-builder\">\n  <div class=\"filter-panels\"> -->\n    <div class=\"list-group form-inline list-group-item-custom\">\n      <div\n        data-ng-repeat=\"filter in filters\"\n        data-elastic-builder-chooser=\"filter\"\n        data-elastic-fields=\"data.fields\"\n        data-on-remove=\"removeChild($index)\"\n        data-depth=\"0\"></div>\n      <div class=\"list-group-item actions\">\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addRule()\">\n				  <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\n				</a>\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addGroup()\">\n				  <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_GROUP\' | translate }}\n				</a>\n      </div>\n    </div>\n  <!-- </div>\n</div> -->\n");
+$templateCache.put("angular-elastic-builder/ChooserDirective.html","<div class=\"list-group-item elastic-builder-chooser list-group-item-custom\" data-ng-class=\"getGroupClassName()\">\n  <div data-ng-if=\"item.type === \'group\'\"\n    data-elastic-builder-group=\"item\"\n    data-depth=\"{{ depth }}\"\n    data-elastic-fields=\"elasticFields\"\n    data-on-remove=\"onRemove()\"></div>\n  <div data-ng-if=\"item.type !== \'group\'\"\n    data-elastic-builder-rule=\"item\"\n    data-elastic-fields=\"elasticFields\"\n    data-on-remove=\"onRemove()\"></div>\n</div>\n");
+$templateCache.put("angular-elastic-builder/GroupDirective.html","<!-- BEGIN Portlet PORTLET-->\n<div class=\"portlet light bordered\">\n  <div class=\"portlet-title\">\n    <div class=\"caption font-green-sharp\">\n      <!-- <i class=\"icon-people font-green-sharp\"></i> -->\n      <h5><span class=\"caption-subject\">If</span>\n        <select data-ng-model=\"group.subType\" class=\"form-control\">\n          <option value=\"$and\"><strong>all</strong></option>\n          <option value=\"$or\"><strong>any</strong></option>\n        </select>\n        <span class=\"caption-subject\">of these conditions are met</span>\n      </h5>\n    </div>\n  </div>\n  <div class=\"portlet-body\">\n    <div class=\"elastic-builder-group\">\n      <div\n        data-ng-repeat=\"rule in group.rules\"\n        data-elastic-builder-chooser=\"rule\"\n        data-elastic-fields=\"elasticFields\"\n        data-depth=\"{{ +depth + 1 }}\"\n        data-on-remove=\"removeChild($index)\"></div>\n\n      <div class=\"list-group-item actions list-group-item-custom\" data-ng-class=\"getGroupClassName()\">\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addRule()\">\n          <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\n        </a>\n        <a class=\"btn red btn-sm remover\" data-ng-click=\"onRemove()\">\n          <i class=\"icon-trash\"></i> {{ \'APPLICATION_REMOVE_GROUP\' | translate }}\n        </a>\n      </div>\n    </div>\n  </div>\n</div>\n<!-- END Portlet PORTLET-->\n");
+$templateCache.put("angular-elastic-builder/RuleDirective.html","<!-- <div class=\"elastic-builder-rule\"> -->\n  <select class=\"form-control\" data-ng-model=\"rule.field\" data-ng-options=\"key as key for (key, value) in elasticFields\"></select>\n\n  <span data-elastic-type=\"getType()\" data-rule=\"rule\" data-guide=\"elasticFields[rule.field]\"></span>\n\n  <!-- <a class=\"btn btn-xs btn-danger remover\" data-ng-click=\"onRemove()\">\n    <i class=\"fa fa-minus\"></i>\n  </a> -->\n\n  <a class=\"btn remover\" data-ng-click=\"onRemove()\">\n    <i class=\"icon-trash\"></i>\n  </a>\n\n<!-- </div> -->\n");
+$templateCache.put("angular-elastic-builder/types/Boolean.html","<span class=\"boolean-rule\">\n  Equals\n\n  <!-- This is a weird hack to make sure these are numbers -->\n  <select\n    data-ng-model=\"rule.value\"\n    class=\"form-control\"\n    data-ng-options=\"booleans.indexOf(choice) as choice for choice in booleansOrder\">\n  </select>\n</span>\n");
+$templateCache.put("angular-elastic-builder/types/Date.html","<span class=\"date-rule\">\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\n\n    <optgroup label=\"Generic\">\n      <option value=\"exists\">Exists</option>\n      <option value=\"notExists\">! Exists</option>\n    </optgroup>\n  </select>\n\n</span>\n");
+$templateCache.put("angular-elastic-builder/types/Multi.html","<span class=\"multi-rule\">\n  <span data-ng-repeat=\"choice in guide.choices\">\n    <label class=\"checkbox\">\n      <input type=\"checkbox\" data-ng-model=\"rule.values[choice]\">\n      {{ choice }}\n    </label>\n  </span>\n</span>\n");
+$templateCache.put("angular-elastic-builder/types/Number.html","<span class=\"number-rule\">\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\n    <!-- <optgroup label=\"Numeral\"> -->\n      <option value=\"equals\">=</option>\n      <option value=\"$gt\">&gt;</option>\n      <option value=\"$gte\">&ge;</option>\n      <option value=\"$lt\">&lt;</option>\n      <option value=\"$lte\">&le;</option>\n    <!-- </optgroup> -->\n\n    <!-- <optgroup label=\"Generic\">\n      <option value=\"exists\">Exists</option>\n      <option value=\"notExists\">! Exists</option>\n    </optgroup> -->\n  </select>\n\n  <!-- Range Fields -->\n  <input data-ng-if=\"inputNeeded()\"\n    class=\"form-control\"\n    data-ng-model=\"rule.value\"\n    type=\"number\"\n    min=\"{{ guide.minimum }}\"\n    max=\"{{ guide.maximum }}\">\n</span>\n");
+$templateCache.put("angular-elastic-builder/types/Select.html","<span class=\"number-rule\">\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\n    <!-- <optgroup label=\"Numeral\"> -->\n      <option value=\"equals\">=</option>\n      <!-- <option value=\"$gt\">&gt;</option>\n      <option value=\"$gte\">&ge;</option>\n      <option value=\"$lt\">&lt;</option>\n      <option value=\"$lte\">&le;</option> -->\n    <!-- </optgroup> -->\n\n    <!-- <optgroup label=\"Generic\">\n      <option value=\"exists\">Exists</option>\n      <option value=\"notExists\">! Exists</option>\n    </optgroup> -->\n  </select>\n\n  <!-- Range Fields -->\n  <select data-ng-model=\"rule.value\" class=\"form-control\">\n    <!-- <optgroup label=\"Numeral\"> -->\n      <option data-ng-repeat=\"choice in guide.choices\" value=\"{{choice.value}}\">{{choice.key}}</option>\n    <!-- </optgroup> -->\n\n    <!-- <optgroup label=\"Generic\">\n      <option value=\"exists\">Exists</option>\n      <option value=\"notExists\">! Exists</option>\n    </optgroup> -->\n  </select>\n\n  <!-- <input data-ng-if=\"inputNeeded()\"\n    class=\"form-control\"\n    data-ng-model=\"rule.value\"\n    type=\"number\"\n    min=\"{{ guide.minimum }}\"\n    max=\"{{ guide.maximum }}\"> -->\n</span>\n");
+$templateCache.put("angular-elastic-builder/types/Term.html","<span class=\"elastic-term\">\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\n    <!-- Term Options -->\n    <!-- <optgroup label=\"Text\"> -->\n      <option value=\"equals\">{{ \'APPLICATION_EQUALS_TO\' | translate }}</option>\n      <option value=\"notEquals\">{{ \'APPLICATION_NOT_EQUALS_TO\' | translate }}</option>\n    <!-- </optgroup> -->\n\n    <!-- Generic Options -->\n    <!-- <optgroup label=\"Generic\">\n      <option value=\"exists\">Exists</option>\n      <option value=\"notExists\">! Exists</option>\n    </optgroup> -->\n\n  </select>\n  <input\n    data-ng-if=\"inputNeeded()\"\n    class=\"form-control\"\n    data-ng-model=\"rule.value\"\n    type=\"text\">\n</span>\n");}]);})(window.angular);
\ No newline at end of file
diff --git a/public/assets/plugins/angular-elastic-builder-back/dist/angular-elastic-builder.min.js b/public/assets/plugins/angular-elastic-builder-back/dist/angular-elastic-builder.min.js
new file mode 100644
index 0000000..a9d67a8
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/dist/angular-elastic-builder.min.js
@@ -0,0 +1 @@
+!function(e){"use strict";e.module("angular-elastic-builder",["RecursionHelper"])}(window.angular),function(e){"use strict";e.module("angular-elastic-builder").directive("elasticBuilder",["elasticQueryService",function(e){return{scope:{data:"=elasticBuilder"},templateUrl:"angular-elastic-builder/BuilderDirective.html",link:function(n){var t=n.data;n.filters=[],n.removeChild=function(e){n.filters.splice(e,1)},n.addRule=function(){n.filters.push({})},n.addGroup=function(){n.filters.push({type:"group",subType:"$and",rules:[]})},n.$watch("data.needsUpdate",function(a){a&&(n.filters=e.toFilters(t.query,n.data.fields),n.data.needsUpdate=!1)}),n.$watch("filters",function(a){a&&(t.query=e.toQuery(n.filters,n.data.fields))},!0)}}}])}(window.angular),function(e){"use strict";var n=e.module("angular-elastic-builder");n.directive("elasticBuilderChooser",["RecursionHelper","groupClassHelper",function(e,n){return{scope:{elasticFields:"=",item:"=elasticBuilderChooser",onRemove:"&"},templateUrl:"angular-elastic-builder/ChooserDirective.html",compile:function(t){return e.compile(t,function(e,t,a){var l=e.depth=+a.depth,i=e.item;e.getGroupClassName=function(){var e=l;return"group"===i.type&&e++,n(e)}})}}}])}(window.angular),function(e){"use strict";var n=e.module("angular-elastic-builder");n.directive("elasticBuilderGroup",["RecursionHelper","groupClassHelper",function(e,n){return{scope:{elasticFields:"=",group:"=elasticBuilderGroup",onRemove:"&"},templateUrl:"angular-elastic-builder/GroupDirective.html",compile:function(t){return e.compile(t,function(e,t,a){var l=e.depth=+a.depth,i=e.group;e.addRule=function(){i.rules.push({})},e.addGroup=function(){i.rules.push({type:"group",subType:"$and",rules:[]})},e.removeChild=function(e){i.rules.splice(e,1)},e.getGroupClassName=function(){return n(l+1)}})}}}])}(window.angular),function(e){"use strict";var n=e.module("angular-elastic-builder");n.directive("elasticBuilderRule",[function(){return{scope:{elasticFields:"=",rule:"=elasticBuilderRule",onRemove:"&"},templateUrl:"angular-elastic-builder/RuleDirective.html",link:function(e){e.getType=function(){var n=e.elasticFields,t=e.rule.field;return n&&t?"boolean"===n[t].subType?"boolean":n[t].type:void 0}}}}])}(window.angular),function(e){"use strict";var n=e.module("angular-elastic-builder");n.directive("elasticType",[function(){return{scope:{type:"=elasticType",rule:"=",guide:"="},template:'<ng-include src="getTemplateUrl()" />',link:function(e){e.getTemplateUrl=function(){var n=e.type;if(n)return n=n.charAt(0).toUpperCase()+n.slice(1),"angular-elastic-builder/types/"+n+".html"},e.booleans=["False","True"],e.booleansOrder=["True","False"],e.inputNeeded=function(){var n=["equals","notEquals","$gt","$gte","$lt","$lte"];return~n.indexOf(e.rule.subType)}}}}])}(window.angular),function(e){"use strict";e.module("angular-elastic-builder").factory("groupClassHelper",function(){return function(e){var n=[""];return n[e%n.length]}})}(window.angular),function(e){"use strict";function n(e,n){var t=e.map(a.bind(e,n));return t}function t(e,n){var t=e.map(l.bind(e,n)).filter(function(e){return!!e});return t}function a(e,n,t){t!==!1&&(t=!0);var l=Object.keys(n)[0],s={or:"group",and:"group",range:"number"},r=s[l]||"item",o=i(r);switch(l){case"$or":case"$and":o.rules=n[l].map(a.bind(n,e)),o.subType=l;break;case"missing":case"exists":o.field=n[l].field,o.subType={exists:"exists",missing:"notExists"}[l],delete o.value;break;case"term":case"terms":o.field=Object.keys(n[l])[0];var u=e[Object.keys(n[l])[0]];if("multi"===u.type){var c=n[l][o.field];"string"==typeof c&&(c=[c]),o.values=u.choices.reduce(function(e,a){return e[a]=t===n[l][o.field].indexOf(a)>-1,e},{})}else o.subType=t?"equals":"notEquals",o.value=n[l][o.field],"number"==typeof o.value&&(o.subType="boolean");break;case"range":o.field=Object.keys(n[l])[0],o.subType=Object.keys(n[l][o.field])[0],o.value=n[l][o.field][o.subType];break;case"not":o=a(e,n[l].filter,!1);break;default:o.field=Object.keys(n[l])[0]}return o}function l(e,n){var t={};if("group"===n.type)return t[n.subType]=n.rules.map(l.bind(n,e)).filter(function(e){return!!e}),t;var a=n.field,i=e[a];if(a){switch(i.type){case"term":if("boolean"===i.subType&&(n.subType="boolean"),!n.subType)return;switch(n.subType){case"equals":case"boolean":if(void 0===n.value)return;t[a]=n.value;break;case"notEquals":if(void 0===n.value)return;t[a]={$ne:n.value};break;case"exists":t.exists={field:a};break;case"notExists":t.missing={field:a};break;default:throw new Error("unexpected subtype "+n.subType)}break;case"select":case"number":switch(t[a]={},n.subType){case"equals":t[a]=n.value;break;default:t[a][n.subType]=n.value}break;case"date":if("exists"===n.subType)t.exists={field:a};else{if("notExists"!==n.subType)throw new Error("unexpected subtype");t.missing={field:a}}break;case"multi":t.terms={},t.terms[a]=Object.keys(n.values||{}).reduce(function(e,t){return n.values[t]&&e.push(t),e},[]);break;default:throw new Error("unexpected type")}return t}}function i(n){var t={group:{type:"group",subType:"",rules:[]},item:{field:"",subType:"",value:""},number:{field:"",subType:"",value:null}};return e.copy(t[n])}e.module("angular-elastic-builder").factory("elasticQueryService",[function(){return{toFilters:n,toQuery:t}}])}(window.angular),function(e){"use strict";e.module("angular-elastic-builder").run(["$templateCache",function(e){e.put("angular-elastic-builder/BuilderDirective.html",'<!-- <div class="elastic-builder">\n  <div class="filter-panels"> -->\n    <div class="list-group form-inline list-group-item-custom">\n      <div\n        data-ng-repeat="filter in filters"\n        data-elastic-builder-chooser="filter"\n        data-elastic-fields="data.fields"\n        data-on-remove="removeChild($index)"\n        data-depth="0"></div>\n      <div class="list-group-item actions">\n        <a href="#" class="btn green btn-sm" data-ng-click="addRule()">\n				  <i class="icon-plus"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\n				</a>\n        <a href="#" class="btn green btn-sm" data-ng-click="addGroup()">\n				  <i class="icon-plus"></i> {{ \'APPLICATION_ADD_GROUP\' | translate }}\n				</a>\n      </div>\n    </div>\n  <!-- </div>\n</div> -->\n'),e.put("angular-elastic-builder/ChooserDirective.html",'<div class="list-group-item elastic-builder-chooser list-group-item-custom" data-ng-class="getGroupClassName()">\n  <div data-ng-if="item.type === \'group\'"\n    data-elastic-builder-group="item"\n    data-depth="{{ depth }}"\n    data-elastic-fields="elasticFields"\n    data-on-remove="onRemove()"></div>\n  <div data-ng-if="item.type !== \'group\'"\n    data-elastic-builder-rule="item"\n    data-elastic-fields="elasticFields"\n    data-on-remove="onRemove()"></div>\n</div>\n'),e.put("angular-elastic-builder/GroupDirective.html",'<!-- BEGIN Portlet PORTLET-->\n<div class="portlet light bordered">\n  <div class="portlet-title">\n    <div class="caption font-green-sharp">\n      <!-- <i class="icon-people font-green-sharp"></i> -->\n      <h5><span class="caption-subject">If</span>\n        <select data-ng-model="group.subType" class="form-control">\n          <option value="$and"><strong>all</strong></option>\n          <option value="$or"><strong>any</strong></option>\n        </select>\n        <span class="caption-subject">of these conditions are met</span>\n      </h5>\n    </div>\n  </div>\n  <div class="portlet-body">\n    <div class="elastic-builder-group">\n      <div\n        data-ng-repeat="rule in group.rules"\n        data-elastic-builder-chooser="rule"\n        data-elastic-fields="elasticFields"\n        data-depth="{{ +depth + 1 }}"\n        data-on-remove="removeChild($index)"></div>\n\n      <div class="list-group-item actions list-group-item-custom" data-ng-class="getGroupClassName()">\n        <a href="#" class="btn green btn-sm" data-ng-click="addRule()">\n          <i class="icon-plus"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\n        </a>\n        <a class="btn red btn-sm remover" data-ng-click="onRemove()">\n          <i class="icon-trash"></i> {{ \'APPLICATION_REMOVE_GROUP\' | translate }}\n        </a>\n      </div>\n    </div>\n  </div>\n</div>\n<!-- END Portlet PORTLET-->\n'),e.put("angular-elastic-builder/RuleDirective.html",'<!-- <div class="elastic-builder-rule"> -->\n  <select class="form-control" data-ng-model="rule.field" data-ng-options="key as key for (key, value) in elasticFields"></select>\n\n  <span data-elastic-type="getType()" data-rule="rule" data-guide="elasticFields[rule.field]"></span>\n\n  <!-- <a class="btn btn-xs btn-danger remover" data-ng-click="onRemove()">\n    <i class="fa fa-minus"></i>\n  </a> -->\n\n  <a class="btn remover" data-ng-click="onRemove()">\n    <i class="icon-trash"></i>\n  </a>\n\n<!-- </div> -->\n'),e.put("angular-elastic-builder/types/Boolean.html",'<span class="boolean-rule">\n  Equals\n\n  <!-- This is a weird hack to make sure these are numbers -->\n  <select\n    data-ng-model="rule.value"\n    class="form-control"\n    data-ng-options="booleans.indexOf(choice) as choice for choice in booleansOrder">\n  </select>\n</span>\n'),e.put("angular-elastic-builder/types/Date.html",'<span class="date-rule">\n  <select data-ng-model="rule.subType" class="form-control">\n\n    <optgroup label="Generic">\n      <option value="exists">Exists</option>\n      <option value="notExists">! Exists</option>\n    </optgroup>\n  </select>\n\n</span>\n'),e.put("angular-elastic-builder/types/Multi.html",'<span class="multi-rule">\n  <span data-ng-repeat="choice in guide.choices">\n    <label class="checkbox">\n      <input type="checkbox" data-ng-model="rule.values[choice]">\n      {{ choice }}\n    </label>\n  </span>\n</span>\n'),e.put("angular-elastic-builder/types/Number.html",'<span class="number-rule">\n  <select data-ng-model="rule.subType" class="form-control">\n    <!-- <optgroup label="Numeral"> -->\n      <option value="equals">=</option>\n      <option value="$gt">&gt;</option>\n      <option value="$gte">&ge;</option>\n      <option value="$lt">&lt;</option>\n      <option value="$lte">&le;</option>\n    <!-- </optgroup> -->\n\n    <!-- <optgroup label="Generic">\n      <option value="exists">Exists</option>\n      <option value="notExists">! Exists</option>\n    </optgroup> -->\n  </select>\n\n  <!-- Range Fields -->\n  <input data-ng-if="inputNeeded()"\n    class="form-control"\n    data-ng-model="rule.value"\n    type="number"\n    min="{{ guide.minimum }}"\n    max="{{ guide.maximum }}">\n</span>\n'),e.put("angular-elastic-builder/types/Select.html",'<span class="number-rule">\n  <select data-ng-model="rule.subType" class="form-control">\n    <!-- <optgroup label="Numeral"> -->\n      <option value="equals">=</option>\n      <!-- <option value="$gt">&gt;</option>\n      <option value="$gte">&ge;</option>\n      <option value="$lt">&lt;</option>\n      <option value="$lte">&le;</option> -->\n    <!-- </optgroup> -->\n\n    <!-- <optgroup label="Generic">\n      <option value="exists">Exists</option>\n      <option value="notExists">! Exists</option>\n    </optgroup> -->\n  </select>\n\n  <!-- Range Fields -->\n  <select data-ng-model="rule.value" class="form-control">\n    <!-- <optgroup label="Numeral"> -->\n      <option data-ng-repeat="choice in guide.choices" value="{{choice.value}}">{{choice.key}}</option>\n    <!-- </optgroup> -->\n\n    <!-- <optgroup label="Generic">\n      <option value="exists">Exists</option>\n      <option value="notExists">! Exists</option>\n    </optgroup> -->\n  </select>\n\n  <!-- <input data-ng-if="inputNeeded()"\n    class="form-control"\n    data-ng-model="rule.value"\n    type="number"\n    min="{{ guide.minimum }}"\n    max="{{ guide.maximum }}"> -->\n</span>\n'),e.put("angular-elastic-builder/types/Term.html",'<span class="elastic-term">\n  <select data-ng-model="rule.subType" class="form-control">\n    <!-- Term Options -->\n    <!-- <optgroup label="Text"> -->\n      <option value="equals">{{ \'APPLICATION_EQUALS_TO\' | translate }}</option>\n      <option value="notEquals">{{ \'APPLICATION_NOT_EQUALS_TO\' | translate }}</option>\n    <!-- </optgroup> -->\n\n    <!-- Generic Options -->\n    <!-- <optgroup label="Generic">\n      <option value="exists">Exists</option>\n      <option value="notExists">! Exists</option>\n    </optgroup> -->\n\n  </select>\n  <input\n    data-ng-if="inputNeeded()"\n    class="form-control"\n    data-ng-model="rule.value"\n    type="text">\n</span>\n')}])}(window.angular);
\ No newline at end of file
diff --git a/public/assets/plugins/angular-elastic-builder-back/examples/index.html b/public/assets/plugins/angular-elastic-builder-back/examples/index.html
new file mode 100644
index 0000000..0d0ad23
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/examples/index.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Angular Elastic Builder</title>
+    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
+    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
+  </head>
+  <body data-ng-app="exampleApp">
+
+    <div data-ng-controller="BasicController as example">
+      <div class="container">
+        <div class="row">
+          <div class="col-md-6">
+            <h3>Filters</h3>
+            <div data-elastic-builder="example.data"></div>
+          </div>
+          <div class="col-md-6">
+            <h3>Query</h3>
+            <pre data-ng-bind="example.showQuery()"></pre>
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
+    <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
+    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
+    <script src="angular/angular-recursion.min.js"></script>
+    <script src="js/angular-elastic-builder.min.js"></script>
+    <script src="js/exampleApp.js"></script>
+  </body>
+</html>
diff --git a/public/assets/plugins/angular-elastic-builder-back/examples/index.js b/public/assets/plugins/angular-elastic-builder-back/examples/index.js
new file mode 100644
index 0000000..d39b589
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/examples/index.js
@@ -0,0 +1,12 @@
+var path = require('path');
+var express = require('express');
+
+var app = express();
+
+app.use(express.static(__dirname));
+app.use('/js', express.static(path.join(__dirname, '../dist')));
+app.use('/angular', express.static(path.join(__dirname, '../node_modules/angular-recursion')));
+
+app.listen(process.env.PORT || 3000, function() {
+  console.log('listening on ' + ( process.env.PORT || 3000));
+});
diff --git a/public/assets/plugins/angular-elastic-builder-back/examples/js/exampleApp.js b/public/assets/plugins/angular-elastic-builder-back/examples/js/exampleApp.js
new file mode 100644
index 0000000..ee4a7e8
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/examples/js/exampleApp.js
@@ -0,0 +1,76 @@
+(function(angular) {
+
+  var app = angular.module('exampleApp', [
+    'angular-elastic-builder',
+  ]);
+
+  app.controller('BasicController', function() {
+
+    var data = this.data = {};
+
+    data.query = [
+      {
+        'and': [
+          {
+            'range': {
+              'test.number': {
+                'gte': 650
+              }
+            }
+          },
+          {
+            'range': {
+              'test.number': {
+                'lt': 850
+              }
+            }
+          }
+        ]
+      },
+      {
+        'term': {
+          'test.boolean': 0
+        }
+      },
+      {
+        'terms': {
+          'test.state.multi': [ 'AZ', 'CT' ]
+        }
+      },
+      {
+        'not': {
+          'filter': {
+            'term': {
+              'test.term': 'asdfasdf'
+            }
+          }
+        }
+      },
+      {
+        'exists': {
+          'field': 'test.term'
+        }
+      }
+    ];
+
+    data.fields = {
+      'test.number': { type: 'number', minimum: 650 },
+      'test.term': { type: 'term' },
+      'test.boolean': { type: 'term', subType: 'boolean' },
+      'test.state.multi': { type: 'multi', choices: [ 'AZ', 'CA', 'CT' ]}
+    };
+
+    data.needsUpdate = true;
+
+    this.showQuery = function() {
+      var queryToShow = {
+        size: 0,
+        filter: { and : data.query }
+      };
+
+      return JSON.stringify(queryToShow, null, 2);
+    };
+
+  });
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder-back/gulpfile.js b/public/assets/plugins/angular-elastic-builder-back/gulpfile.js
new file mode 100644
index 0000000..9194d1a
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/gulpfile.js
@@ -0,0 +1,76 @@
+/**
+ * Package Dependencies
+ */
+var concat = require('gulp-concat')
+  , del = require('del')
+  , header = require('gulp-header')
+  , gulp = require('gulp')
+  , templateCache = require('gulp-angular-templatecache')
+  , rename = require('gulp-rename')
+  , uglify = require('gulp-uglifyjs')
+  , util = require('util');
+
+/**
+ * Local Dependencies
+ */
+var pkg = require('./package.json');
+var banner = ['/**'
+  , ' * # <%= pkg.name %>'
+  , ' * ## <%= pkg.description %>'
+  , ' *'
+  , ' * @version v<%= pkg.version %>'
+  , ' * @link <%= pkg.repository.url %>'
+  , ' * @license <%= pkg.license %>'
+  , ' * @author <%= pkg.author %>'
+  , ' */'
+  , ''
+  , ''].join('\n');
+
+var filename = util.format('%s.js', pkg.name)
+  , dest = 'dist/' + filename;
+
+gulp.task('build', ['uglify']);
+gulp.task('default', ['uglify']);
+
+
+gulp.task('clean', function(done) {
+  del('./dist', done);
+});
+
+gulp.task('concat', [ 'templatecache' ], function() {
+  return gulp.src(['./src/module.js', './src/**/*.js'])
+    .pipe(concat(filename))
+    .pipe(gulp.dest('./dist'));
+});
+
+gulp.task('header', [ 'concat' ], function() {
+  return gulp.src('./dist/*.js')
+    .pipe(header(banner, { pkg: pkg }))
+    .pipe(gulp.dest('./dist'));
+});
+
+gulp.task('uglify', [ 'header' ], function() {
+  return gulp.src('./dist/*.js')
+    .pipe(uglify(dest.replace(/\.js$/, '.min.js')))
+    .pipe(gulp.dest('./'));
+});
+
+gulp.task('templatecache', [ 'clean' ], function() {
+  var TEMPLATE_HEADER = '(function(angular) {"use strict"; angular.module("<%= module %>"<%= standalone %>).run(["$templateCache", function($templateCache) {'
+    , TEMPLATE_FOOTER = '}]);})(window.angular);';
+
+  return gulp.src('src/tmpl/**/*.html')
+    .pipe(templateCache({
+      root: 'angular-elastic-builder',
+      module: 'angular-elastic-builder',
+      templateHeader: TEMPLATE_HEADER,
+      templateFooter: TEMPLATE_FOOTER,
+    }))
+    .pipe(rename('ElasticBuilderTemplates.js'))
+    .pipe(gulp.dest('src/tmpl'));
+});
+
+gulp.task('watch', [ 'templatecache', 'build' ], function() {
+  gulp.watch('src/tmpl/**/*.html', [ 'templatecache', 'build' ]);
+  gulp.watch(['src/**/**.js','!src/tmpl/ElasticBuilderTemplates.js'], [ 'build' ]);
+});
diff --git a/public/assets/plugins/angular-elastic-builder-back/package.json b/public/assets/plugins/angular-elastic-builder-back/package.json
new file mode 100644
index 0000000..987e3f9
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/package.json
@@ -0,0 +1,30 @@
+{
+  "name": "angular-elastic-builder",
+  "version": "1.4.0",
+  "description": "Angular Module for building an Elasticsearch Query",
+  "author": "Dan Crews <[email-masked]>",
+  "license": "MIT",
+  "keywords": [
+    "angular",
+    "elasticsearch"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/dncrews/angular-elastic-builder.git"
+  },
+  "devDependencies": {
+    "angular-recursion": "^1.0.5",
+    "del": "^1.1.1",
+    "express": "^4.12.3",
+    "gulp": "^3.8.11",
+    "gulp-angular-templatecache": "^1.6.0",
+    "gulp-concat": "^2.5.2",
+    "gulp-header": "^1.2.2",
+    "gulp-rename": "^1.2.2",
+    "gulp-uglifyjs": "^0.6.1"
+  },
+  "scripts": {
+    "example": "node examples",
+    "test": "echo \"Error: no test specified\" && exit 1"
+  }
+}
diff --git a/public/assets/plugins/angular-elastic-builder-back/screenshot.png b/public/assets/plugins/angular-elastic-builder-back/screenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..ca8d57dab48bd1559cede7fbd20275d733c65e5e
GIT binary patch
literal 46022
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/angular-elastic-builder-back/src/directives/BuilderDirective.js b/public/assets/plugins/angular-elastic-builder-back/src/directives/BuilderDirective.js
new file mode 100644
index 0000000..8a72214
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/directives/BuilderDirective.js
@@ -0,0 +1,84 @@
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/BuilderDirective.js
+ *
+ * Angular Directive for injecting a query builder form.
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder')
+    .directive('elasticBuilder', [
+      'elasticQueryService',
+
+      function EB(elasticQueryService) {
+
+        return {
+          scope: {
+            data: '=elasticBuilder',
+          },
+
+          templateUrl: 'angular-elastic-builder/BuilderDirective.html',
+
+          link: function(scope) {
+            var data = scope.data;
+
+            scope.filters = [];
+
+            /**
+             * Removes either Group or Rule
+             */
+            scope.removeChild = function(idx) {
+              scope.filters.splice(idx, 1);
+            };
+
+            /**
+             * Adds a Single Rule
+             */
+            scope.addRule = function() {
+              scope.filters.push({});
+            };
+
+            /**
+             * Adds a Group of Rules
+             */
+            scope.addGroup = function() {
+              scope.filters.push({
+                type: 'group',
+                subType: '$and',
+                rules: [],
+              });
+            };
+
+            /**
+             * Any time "outside forces" change the query, they should tell us so via
+             * `data.needsUpdate`
+             */
+            scope.$watch('data.needsUpdate', function(curr) {
+              if (!curr) {
+                return;
+              }
+
+              scope.filters = elasticQueryService.toFilters(data.query, scope.data.fields);
+              scope.data.needsUpdate = false;
+            });
+
+            /**
+             * Changes on the page update the Query
+             */
+            scope.$watch('filters', function(curr) {
+              if (!curr) {
+                return;
+              }
+
+              data.query = elasticQueryService.toQuery(scope.filters, scope.data.fields);
+            }, true);
+          }
+        };
+      }
+
+    ]);
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/directives/Chooser.js b/public/assets/plugins/angular-elastic-builder-back/src/directives/Chooser.js
new file mode 100644
index 0000000..1787461
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/directives/Chooser.js
@@ -0,0 +1,49 @@
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/Chooser.js
+ *
+ * This file is to help recursively, to decide whether to show a group or rule
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticBuilderChooser', [
+    'RecursionHelper',
+    'groupClassHelper',
+
+    function elasticBuilderChooser(RH, groupClassHelper) {
+
+      return {
+        scope: {
+          elasticFields: '=',
+          item: '=elasticBuilderChooser',
+          onRemove: '&',
+        },
+
+        templateUrl: 'angular-elastic-builder/ChooserDirective.html',
+
+        compile: function(element) {
+          return RH.compile(element, function(scope, el, attrs) {
+            var depth = scope.depth = (+attrs.depth);
+            var item = scope.item;
+
+            scope.getGroupClassName = function() {
+              var level = depth;
+              if (item.type === 'group') {
+                level++;
+              }
+
+              return groupClassHelper(level);
+            };
+          });
+        }
+      };
+    }
+
+  ]);
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/directives/Group.js b/public/assets/plugins/angular-elastic-builder-back/src/directives/Group.js
new file mode 100644
index 0000000..d6b93a6
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/directives/Group.js
@@ -0,0 +1,57 @@
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/Group.js
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticBuilderGroup', [
+    'RecursionHelper',
+    'groupClassHelper',
+
+    function elasticBuilderGroup(RH, groupClassHelper) {
+
+      return {
+        scope: {
+          elasticFields: '=',
+          group: '=elasticBuilderGroup',
+          onRemove: '&',
+        },
+
+        templateUrl: 'angular-elastic-builder/GroupDirective.html',
+
+        compile: function(element) {
+          return RH.compile(element, function(scope, el, attrs) {
+            var depth = scope.depth = (+attrs.depth);
+            var group = scope.group;
+
+            scope.addRule = function() {
+              group.rules.push({});
+            };
+            scope.addGroup = function() {
+              group.rules.push({
+                type: 'group',
+                subType: '$and',
+                rules: [],
+              });
+            };
+
+            scope.removeChild = function(idx) {
+              group.rules.splice(idx, 1);
+            };
+
+            scope.getGroupClassName = function() {
+              return groupClassHelper(depth + 1);
+            };
+          });
+        }
+      };
+    }
+
+  ]);
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/directives/Rule.js b/public/assets/plugins/angular-elastic-builder-back/src/directives/Rule.js
new file mode 100644
index 0000000..53268ab
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/directives/Rule.js
@@ -0,0 +1,45 @@
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/Rule.js
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticBuilderRule', [
+
+    function elasticBuilderRule() {
+      return {
+        scope: {
+          elasticFields: '=',
+          rule: '=elasticBuilderRule',
+          onRemove: '&',
+        },
+
+        templateUrl: 'angular-elastic-builder/RuleDirective.html',
+
+        link: function(scope) {
+          scope.getType = function() {
+            var fields = scope.elasticFields;
+            var field = scope.rule.field;
+
+            if (!fields || !field) {
+              return;
+            }
+
+            if (fields[field].subType === 'boolean') {
+              return 'boolean';
+            }
+
+            return fields[field].type;
+          };
+        }
+      };
+    }
+
+  ]);
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/directives/RuleTypes.js b/public/assets/plugins/angular-elastic-builder-back/src/directives/RuleTypes.js
new file mode 100644
index 0000000..6b12536
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/directives/RuleTypes.js
@@ -0,0 +1,61 @@
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/RuleTypes.js
+ *
+ * Determines which Rule type should be displayed
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticType', [
+
+    function() {
+      return {
+        scope: {
+          type: '=elasticType',
+          rule: '=',
+          guide: '=',
+        },
+
+        template: '<ng-include src="getTemplateUrl()" />',
+
+        link: function(scope) {
+          scope.getTemplateUrl = function() {
+            var type = scope.type;
+            if (!type) {
+              return;
+            }
+
+            type = type.charAt(0).toUpperCase() + type.slice(1);
+
+            return 'angular-elastic-builder/types/' + type + '.html';
+          };
+
+          // This is a weird hack to make sure these are numbers
+          scope.booleans = ['False', 'True'];
+          scope.booleansOrder = ['True', 'False'];
+
+          scope.inputNeeded = function() {
+            var needs = [
+              'equals',
+              'notEquals',
+
+              '$gt',
+              '$gte',
+              '$lt',
+              '$lte',
+            ];
+
+            return ~needs.indexOf(scope.rule.subType);
+          };
+        },
+      };
+    }
+
+  ]);
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/module.js b/public/assets/plugins/angular-elastic-builder-back/src/module.js
new file mode 100644
index 0000000..a4f9a9c
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/module.js
@@ -0,0 +1,16 @@
+/**
+ * angular-elastic-builder
+ *
+ * /src/module.js
+ *
+ * Angular Module for building an Elasticsearch query
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder', [
+    'RecursionHelper',
+  ]);
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/services/GroupClassHelper.js b/public/assets/plugins/angular-elastic-builder-back/src/services/GroupClassHelper.js
new file mode 100644
index 0000000..bfd45b5
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/services/GroupClassHelper.js
@@ -0,0 +1,28 @@
+/**
+ * angular-elastic-builder
+ *
+ * /src/services/GroupClassHelper.js
+ *
+ * This keeps all of the groups colored correctly
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder')
+    .factory('groupClassHelper', function groupClassHelper() {
+
+      return function(level) {
+        var levels = [
+          '',
+          // 'list-group-item-info',
+          // 'list-group-item-success',
+          // 'list-group-item-warning',
+          // 'list-group-item-danger',
+        ];
+
+        return levels[level % levels.length];
+      };
+    });
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/services/QueryService.js b/public/assets/plugins/angular-elastic-builder-back/src/services/QueryService.js
new file mode 100644
index 0000000..2354ca5
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/services/QueryService.js
@@ -0,0 +1,240 @@
+/**
+ * angular-elastic-builder
+ *
+ * /src/services/QueryService.js
+ *
+ * This file is used to convert filters into queries, and vice versa
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder')
+    .factory('elasticQueryService', [
+      function() {
+
+        return {
+          toFilters: toFilters,
+          toQuery: toQuery,
+        };
+      }
+    ]);
+
+  function toFilters(query, fieldMap) {
+    var filters = query.map(parseQueryGroup.bind(query, fieldMap));
+    return filters;
+  }
+
+  function toQuery(filters, fieldMap) {
+    var query = filters.map(parseFilterGroup.bind(filters, fieldMap)).filter(function(item) {
+      return !!item;
+    });
+    return query;
+  }
+
+  function parseQueryGroup(fieldMap, group, truthy) {
+    if (truthy !== false) {
+      truthy = true;
+    }
+
+    var key = Object.keys(group)[0];
+    var typeMap = {
+      or: 'group',
+      and: 'group',
+      range: 'number',
+    };
+    var type = typeMap[key] || 'item';
+    var obj = getFilterTemplate(type);
+
+    switch (key) {
+      case '$or':
+      case '$and':
+        obj.rules = group[key].map(parseQueryGroup.bind(group, fieldMap));
+        obj.subType = key;
+        break;
+      case 'missing':
+      case 'exists':
+        obj.field = group[key].field;
+        obj.subType = {
+          exists: 'exists',
+          missing: 'notExists',
+        }[key];
+        delete obj.value;
+        break;
+      case 'term':
+      case 'terms':
+        obj.field = Object.keys(group[key])[0];
+        var fieldData = fieldMap[Object.keys(group[key])[0]];
+
+        if (fieldData.type === 'multi') {
+          var vals = group[key][obj.field];
+          if (typeof vals === 'string') {
+            vals = [vals];
+          }
+          obj.values = fieldData.choices.reduce(function(prev, choice) {
+            prev[choice] = truthy === (group[key][obj.field].indexOf(choice) > -1);
+            return prev;
+          }, {});
+        } else {
+          obj.subType = truthy ? 'equals' : 'notEquals';
+          obj.value = group[key][obj.field];
+
+          if (typeof obj.value === 'number') {
+            obj.subType = 'boolean';
+          }
+        }
+        break;
+      case 'range':
+        obj.field = Object.keys(group[key])[0];
+        obj.subType = Object.keys(group[key][obj.field])[0];
+        obj.value = group[key][obj.field][obj.subType];
+        break;
+      case 'not':
+        obj = parseQueryGroup(fieldMap, group[key].filter, false);
+        break;
+      default:
+        obj.field = Object.keys(group[key])[0];
+        break;
+    }
+
+    return obj;
+  }
+
+  function parseFilterGroup(fieldMap, group) {
+    var obj = {};
+    if (group.type === 'group') {
+      obj[group.subType] = group.rules.map(parseFilterGroup.bind(group, fieldMap)).filter(function(item) {
+        return !!item;
+      });
+      return obj;
+    }
+
+    var fieldName = group.field;
+    var fieldData = fieldMap[fieldName];
+
+    if (!fieldName) {
+      return;
+    }
+
+    switch (fieldData.type) {
+      case 'term':
+        if (fieldData.subType === 'boolean') {
+          group.subType = 'boolean';
+        }
+
+        if (!group.subType) {
+          return;
+        }
+        switch (group.subType) {
+          case 'equals':
+          case 'boolean':
+            if (group.value === undefined) {
+              return;
+            }
+            obj[fieldName] = group.value;
+            break;
+          case 'notEquals':
+            if (group.value === undefined) {
+              return;
+            }
+            obj[fieldName] = {
+              $ne: group.value
+            };
+            break;
+          case 'exists':
+            obj.exists = {
+              field: fieldName
+            };
+            break;
+          case 'notExists':
+            obj.missing = {
+              field: fieldName
+            };
+            break;
+          default:
+            throw new Error('unexpected subtype ' + group.subType);
+        }
+        break;
+
+      case 'select':
+
+      case 'number':
+        obj[fieldName] = {};
+
+        switch (group.subType) {
+          case 'equals':
+            obj[fieldName] = group.value;
+            break;
+          default:
+            obj[fieldName][group.subType] = group.value;
+        }
+
+        break;
+
+      case 'date':
+        if (group.subType === 'exists') {
+          obj.exists = {
+            field: fieldName
+          };
+        } else if (group.subType === 'notExists') {
+          obj.missing = {
+            field: fieldName
+          };
+        } else {
+          throw new Error('unexpected subtype');
+        }
+
+        break;
+
+      case 'multi':
+        obj.terms = {};
+        obj.terms[fieldName] = Object.keys(group.values || {}).reduce(function(prev, key) {
+          if (group.values[key]) {
+            prev.push(key);
+          }
+
+          return prev;
+        }, []);
+        break;
+
+        // case 'multi':
+        //   obj.terms = {};
+        //   obj.terms[fieldName] = Object.keys(group.values || {}).reduce(function(prev, key) {
+        //     if (group.values[key]) {
+        //       prev.push(key);
+        //     }
+        //
+        //     return prev;
+        //   }, []);
+        //   break;
+
+      default:
+        throw new Error('unexpected type');
+    }
+
+    return obj;
+  }
+
+  function getFilterTemplate(type) {
+    var templates = {
+      group: {
+        type: 'group',
+        subType: '',
+        rules: [],
+      },
+      item: {
+        field: '',
+        subType: '',
+        value: '',
+      },
+      number: {
+        field: '',
+        subType: '',
+        value: null,
+      }
+    };
+
+    return angular.copy(templates[type]);
+  }
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/tmpl/BuilderDirective.html b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/BuilderDirective.html
new file mode 100644
index 0000000..1f6866a
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/BuilderDirective.html
@@ -0,0 +1,20 @@
+<!-- <div class="elastic-builder">
+  <div class="filter-panels"> -->
+    <div class="list-group form-inline list-group-item-custom">
+      <div
+        data-ng-repeat="filter in filters"
+        data-elastic-builder-chooser="filter"
+        data-elastic-fields="data.fields"
+        data-on-remove="removeChild($index)"
+        data-depth="0"></div>
+      <div class="list-group-item actions">
+        <a href="#" class="btn green btn-sm" data-ng-click="addRule()">
+				  <i class="icon-plus"></i> {{ 'APPLICATION_ADD_CONDITION' | translate }}
+				</a>
+        <a href="#" class="btn green btn-sm" data-ng-click="addGroup()">
+				  <i class="icon-plus"></i> {{ 'APPLICATION_ADD_GROUP' | translate }}
+				</a>
+      </div>
+    </div>
+  <!-- </div>
+</div> -->
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/tmpl/ChooserDirective.html b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/ChooserDirective.html
new file mode 100644
index 0000000..dc64e01
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/ChooserDirective.html
@@ -0,0 +1,11 @@
+<div class="list-group-item elastic-builder-chooser list-group-item-custom" data-ng-class="getGroupClassName()">
+  <div data-ng-if="item.type === 'group'"
+    data-elastic-builder-group="item"
+    data-depth="{{ depth }}"
+    data-elastic-fields="elasticFields"
+    data-on-remove="onRemove()"></div>
+  <div data-ng-if="item.type !== 'group'"
+    data-elastic-builder-rule="item"
+    data-elastic-fields="elasticFields"
+    data-on-remove="onRemove()"></div>
+</div>
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/tmpl/ElasticBuilderTemplates.js b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/ElasticBuilderTemplates.js
new file mode 100644
index 0000000..8e864aa
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/ElasticBuilderTemplates.js
@@ -0,0 +1,10 @@
+(function(angular) {"use strict"; angular.module("angular-elastic-builder").run(["$templateCache", function($templateCache) {$templateCache.put("angular-elastic-builder/BuilderDirective.html","<!-- <div class=\"elastic-builder\">\n  <div class=\"filter-panels\"> -->\n    <div class=\"list-group form-inline list-group-item-custom\">\n      <div\n        data-ng-repeat=\"filter in filters\"\n        data-elastic-builder-chooser=\"filter\"\n        data-elastic-fields=\"data.fields\"\n        data-on-remove=\"removeChild($index)\"\n        data-depth=\"0\"></div>\n      <div class=\"list-group-item actions\">\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addRule()\">\n				  <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\n				</a>\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addGroup()\">\n				  <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_GROUP\' | translate }}\n				</a>\n      </div>\n    </div>\n  <!-- </div>\n</div> -->\n");
+$templateCache.put("angular-elastic-builder/ChooserDirective.html","<div class=\"list-group-item elastic-builder-chooser list-group-item-custom\" data-ng-class=\"getGroupClassName()\">\n  <div data-ng-if=\"item.type === \'group\'\"\n    data-elastic-builder-group=\"item\"\n    data-depth=\"{{ depth }}\"\n    data-elastic-fields=\"elasticFields\"\n    data-on-remove=\"onRemove()\"></div>\n  <div data-ng-if=\"item.type !== \'group\'\"\n    data-elastic-builder-rule=\"item\"\n    data-elastic-fields=\"elasticFields\"\n    data-on-remove=\"onRemove()\"></div>\n</div>\n");
+$templateCache.put("angular-elastic-builder/GroupDirective.html","<!-- BEGIN Portlet PORTLET-->\n<div class=\"portlet light bordered\">\n  <div class=\"portlet-title\">\n    <div class=\"caption font-green-sharp\">\n      <!-- <i class=\"icon-people font-green-sharp\"></i> -->\n      <h5><span class=\"caption-subject\">If</span>\n        <select data-ng-model=\"group.subType\" class=\"form-control\">\n          <option value=\"$and\"><strong>all</strong></option>\n          <option value=\"$or\"><strong>any</strong></option>\n        </select>\n        <span class=\"caption-subject\">of these conditions are met</span>\n      </h5>\n    </div>\n  </div>\n  <div class=\"portlet-body\">\n    <div class=\"elastic-builder-group\">\n      <div\n        data-ng-repeat=\"rule in group.rules\"\n        data-elastic-builder-chooser=\"rule\"\n        data-elastic-fields=\"elasticFields\"\n        data-depth=\"{{ +depth + 1 }}\"\n        data-on-remove=\"removeChild($index)\"></div>\n\n      <div class=\"list-group-item actions list-group-item-custom\" data-ng-class=\"getGroupClassName()\">\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addRule()\">\n          <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\n        </a>\n        <a class=\"btn red btn-sm remover\" data-ng-click=\"onRemove()\">\n          <i class=\"icon-trash\"></i> {{ \'APPLICATION_REMOVE_GROUP\' | translate }}\n        </a>\n      </div>\n    </div>\n  </div>\n</div>\n<!-- END Portlet PORTLET-->\n");
+$templateCache.put("angular-elastic-builder/RuleDirective.html","<!-- <div class=\"elastic-builder-rule\"> -->\n  <select class=\"form-control\" data-ng-model=\"rule.field\" data-ng-options=\"key as key for (key, value) in elasticFields\"></select>\n\n  <span data-elastic-type=\"getType()\" data-rule=\"rule\" data-guide=\"elasticFields[rule.field]\"></span>\n\n  <!-- <a class=\"btn btn-xs btn-danger remover\" data-ng-click=\"onRemove()\">\n    <i class=\"fa fa-minus\"></i>\n  </a> -->\n\n  <a class=\"btn remover\" data-ng-click=\"onRemove()\">\n    <i class=\"icon-trash\"></i>\n  </a>\n\n<!-- </div> -->\n");
+$templateCache.put("angular-elastic-builder/types/Boolean.html","<span class=\"boolean-rule\">\n  Equals\n\n  <!-- This is a weird hack to make sure these are numbers -->\n  <select\n    data-ng-model=\"rule.value\"\n    class=\"form-control\"\n    data-ng-options=\"booleans.indexOf(choice) as choice for choice in booleansOrder\">\n  </select>\n</span>\n");
+$templateCache.put("angular-elastic-builder/types/Date.html","<span class=\"date-rule\">\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\n\n    <optgroup label=\"Generic\">\n      <option value=\"exists\">Exists</option>\n      <option value=\"notExists\">! Exists</option>\n    </optgroup>\n  </select>\n\n</span>\n");
+$templateCache.put("angular-elastic-builder/types/Multi.html","<span class=\"multi-rule\">\n  <span data-ng-repeat=\"choice in guide.choices\">\n    <label class=\"checkbox\">\n      <input type=\"checkbox\" data-ng-model=\"rule.values[choice]\">\n      {{ choice }}\n    </label>\n  </span>\n</span>\n");
+$templateCache.put("angular-elastic-builder/types/Number.html","<span class=\"number-rule\">\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\n    <!-- <optgroup label=\"Numeral\"> -->\n      <option value=\"equals\">=</option>\n      <option value=\"$gt\">&gt;</option>\n      <option value=\"$gte\">&ge;</option>\n      <option value=\"$lt\">&lt;</option>\n      <option value=\"$lte\">&le;</option>\n    <!-- </optgroup> -->\n\n    <!-- <optgroup label=\"Generic\">\n      <option value=\"exists\">Exists</option>\n      <option value=\"notExists\">! Exists</option>\n    </optgroup> -->\n  </select>\n\n  <!-- Range Fields -->\n  <input data-ng-if=\"inputNeeded()\"\n    class=\"form-control\"\n    data-ng-model=\"rule.value\"\n    type=\"number\"\n    min=\"{{ guide.minimum }}\"\n    max=\"{{ guide.maximum }}\">\n</span>\n");
+$templateCache.put("angular-elastic-builder/types/Select.html","<span class=\"number-rule\">\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\n    <!-- <optgroup label=\"Numeral\"> -->\n      <option value=\"equals\">=</option>\n      <!-- <option value=\"$gt\">&gt;</option>\n      <option value=\"$gte\">&ge;</option>\n      <option value=\"$lt\">&lt;</option>\n      <option value=\"$lte\">&le;</option> -->\n    <!-- </optgroup> -->\n\n    <!-- <optgroup label=\"Generic\">\n      <option value=\"exists\">Exists</option>\n      <option value=\"notExists\">! Exists</option>\n    </optgroup> -->\n  </select>\n\n  <!-- Range Fields -->\n  <select data-ng-model=\"rule.value\" class=\"form-control\">\n    <!-- <optgroup label=\"Numeral\"> -->\n      <option data-ng-repeat=\"choice in guide.choices\" value=\"{{choice.value}}\">{{choice.key}}</option>\n    <!-- </optgroup> -->\n\n    <!-- <optgroup label=\"Generic\">\n      <option value=\"exists\">Exists</option>\n      <option value=\"notExists\">! Exists</option>\n    </optgroup> -->\n  </select>\n\n  <!-- <input data-ng-if=\"inputNeeded()\"\n    class=\"form-control\"\n    data-ng-model=\"rule.value\"\n    type=\"number\"\n    min=\"{{ guide.minimum }}\"\n    max=\"{{ guide.maximum }}\"> -->\n</span>\n");
+$templateCache.put("angular-elastic-builder/types/Term.html","<span class=\"elastic-term\">\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\n    <!-- Term Options -->\n    <!-- <optgroup label=\"Text\"> -->\n      <option value=\"equals\">{{ \'APPLICATION_EQUALS_TO\' | translate }}</option>\n      <option value=\"notEquals\">{{ \'APPLICATION_NOT_EQUALS_TO\' | translate }}</option>\n    <!-- </optgroup> -->\n\n    <!-- Generic Options -->\n    <!-- <optgroup label=\"Generic\">\n      <option value=\"exists\">Exists</option>\n      <option value=\"notExists\">! Exists</option>\n    </optgroup> -->\n\n  </select>\n  <input\n    data-ng-if=\"inputNeeded()\"\n    class=\"form-control\"\n    data-ng-model=\"rule.value\"\n    type=\"text\">\n</span>\n");}]);})(window.angular);
\ No newline at end of file
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/tmpl/GroupDirective.html b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/GroupDirective.html
new file mode 100644
index 0000000..6051da3
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/GroupDirective.html
@@ -0,0 +1,35 @@
+<!-- BEGIN Portlet PORTLET-->
+<div class="portlet light bordered">
+  <div class="portlet-title">
+    <div class="caption font-green-sharp">
+      <!-- <i class="icon-people font-green-sharp"></i> -->
+      <h5><span class="caption-subject">If</span>
+        <select data-ng-model="group.subType" class="form-control">
+          <option value="$and"><strong>all</strong></option>
+          <option value="$or"><strong>any</strong></option>
+        </select>
+        <span class="caption-subject">of these conditions are met</span>
+      </h5>
+    </div>
+  </div>
+  <div class="portlet-body">
+    <div class="elastic-builder-group">
+      <div
+        data-ng-repeat="rule in group.rules"
+        data-elastic-builder-chooser="rule"
+        data-elastic-fields="elasticFields"
+        data-depth="{{ +depth + 1 }}"
+        data-on-remove="removeChild($index)"></div>
+
+      <div class="list-group-item actions list-group-item-custom" data-ng-class="getGroupClassName()">
+        <a href="#" class="btn green btn-sm" data-ng-click="addRule()">
+          <i class="icon-plus"></i> {{ 'APPLICATION_ADD_CONDITION' | translate }}
+        </a>
+        <a class="btn red btn-sm remover" data-ng-click="onRemove()">
+          <i class="icon-trash"></i> {{ 'APPLICATION_REMOVE_GROUP' | translate }}
+        </a>
+      </div>
+    </div>
+  </div>
+</div>
+<!-- END Portlet PORTLET-->
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/tmpl/RuleDirective.html b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/RuleDirective.html
new file mode 100644
index 0000000..40dd570
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/RuleDirective.html
@@ -0,0 +1,14 @@
+<!-- <div class="elastic-builder-rule"> -->
+  <select class="form-control" data-ng-model="rule.field" data-ng-options="key as key for (key, value) in elasticFields"></select>
+
+  <span data-elastic-type="getType()" data-rule="rule" data-guide="elasticFields[rule.field]"></span>
+
+  <!-- <a class="btn btn-xs btn-danger remover" data-ng-click="onRemove()">
+    <i class="fa fa-minus"></i>
+  </a> -->
+
+  <a class="btn remover" data-ng-click="onRemove()">
+    <i class="icon-trash"></i>
+  </a>
+
+<!-- </div> -->
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Boolean.html b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Boolean.html
new file mode 100644
index 0000000..1ac8380
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Boolean.html
@@ -0,0 +1,10 @@
+<span class="boolean-rule">
+  Equals
+
+  <!-- This is a weird hack to make sure these are numbers -->
+  <select
+    data-ng-model="rule.value"
+    class="form-control"
+    data-ng-options="booleans.indexOf(choice) as choice for choice in booleansOrder">
+  </select>
+</span>
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Date.html b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Date.html
new file mode 100644
index 0000000..377edd4
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Date.html
@@ -0,0 +1,10 @@
+<span class="date-rule">
+  <select data-ng-model="rule.subType" class="form-control">
+
+    <optgroup label="Generic">
+      <option value="exists">Exists</option>
+      <option value="notExists">! Exists</option>
+    </optgroup>
+  </select>
+
+</span>
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Multi.html b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Multi.html
new file mode 100644
index 0000000..3c0e5a1
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Multi.html
@@ -0,0 +1,8 @@
+<span class="multi-rule">
+  <span data-ng-repeat="choice in guide.choices">
+    <label class="checkbox">
+      <input type="checkbox" data-ng-model="rule.values[choice]">
+      {{ choice }}
+    </label>
+  </span>
+</span>
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Number.html b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Number.html
new file mode 100644
index 0000000..7a9040e
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Number.html
@@ -0,0 +1,24 @@
+<span class="number-rule">
+  <select data-ng-model="rule.subType" class="form-control">
+    <!-- <optgroup label="Numeral"> -->
+      <option value="equals">=</option>
+      <option value="$gt">&gt;</option>
+      <option value="$gte">&ge;</option>
+      <option value="$lt">&lt;</option>
+      <option value="$lte">&le;</option>
+    <!-- </optgroup> -->
+
+    <!-- <optgroup label="Generic">
+      <option value="exists">Exists</option>
+      <option value="notExists">! Exists</option>
+    </optgroup> -->
+  </select>
+
+  <!-- Range Fields -->
+  <input data-ng-if="inputNeeded()"
+    class="form-control"
+    data-ng-model="rule.value"
+    type="number"
+    min="{{ guide.minimum }}"
+    max="{{ guide.maximum }}">
+</span>
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Select.html b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Select.html
new file mode 100644
index 0000000..cf2e560
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Select.html
@@ -0,0 +1,35 @@
+<span class="number-rule">
+  <select data-ng-model="rule.subType" class="form-control">
+    <!-- <optgroup label="Numeral"> -->
+      <option value="equals">=</option>
+      <!-- <option value="$gt">&gt;</option>
+      <option value="$gte">&ge;</option>
+      <option value="$lt">&lt;</option>
+      <option value="$lte">&le;</option> -->
+    <!-- </optgroup> -->
+
+    <!-- <optgroup label="Generic">
+      <option value="exists">Exists</option>
+      <option value="notExists">! Exists</option>
+    </optgroup> -->
+  </select>
+
+  <!-- Range Fields -->
+  <select data-ng-model="rule.value" class="form-control">
+    <!-- <optgroup label="Numeral"> -->
+      <option data-ng-repeat="choice in guide.choices" value="{{choice.value}}">{{choice.key}}</option>
+    <!-- </optgroup> -->
+
+    <!-- <optgroup label="Generic">
+      <option value="exists">Exists</option>
+      <option value="notExists">! Exists</option>
+    </optgroup> -->
+  </select>
+
+  <!-- <input data-ng-if="inputNeeded()"
+    class="form-control"
+    data-ng-model="rule.value"
+    type="number"
+    min="{{ guide.minimum }}"
+    max="{{ guide.maximum }}"> -->
+</span>
diff --git a/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Term.html b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Term.html
new file mode 100644
index 0000000..06a4c58
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder-back/src/tmpl/types/Term.html
@@ -0,0 +1,21 @@
+<span class="elastic-term">
+  <select data-ng-model="rule.subType" class="form-control">
+    <!-- Term Options -->
+    <!-- <optgroup label="Text"> -->
+      <option value="equals">{{ 'APPLICATION_EQUALS_TO' | translate }}</option>
+      <option value="notEquals">{{ 'APPLICATION_NOT_EQUALS_TO' | translate }}</option>
+    <!-- </optgroup> -->
+
+    <!-- Generic Options -->
+    <!-- <optgroup label="Generic">
+      <option value="exists">Exists</option>
+      <option value="notExists">! Exists</option>
+    </optgroup> -->
+
+  </select>
+  <input
+    data-ng-if="inputNeeded()"
+    class="form-control"
+    data-ng-model="rule.value"
+    type="text">
+</span>
diff --git a/public/assets/plugins/angular-elastic-builder/.bower.json b/public/assets/plugins/angular-elastic-builder/.bower.json
new file mode 100644
index 0000000..1b348aa
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/.bower.json
@@ -0,0 +1,32 @@
+{
+  "name": "angular-elastic-builder",
+  "homepage": "https://github.com/dncrews/angular-elastic-builder",
+  "authors": [
+    "Dan Crews <[email-masked]>"
+  ],
+  "description": "Angular Module for building an Elasticsearch Query",
+  "main": "dist/angular-elastic-builder.js",
+  "keywords": [
+    "elasticsearch",
+    "angular"
+  ],
+  "license": "MIT",
+  "ignore": [
+    "**/.*",
+    "node_modules",
+    "bower_components",
+    "test",
+    "tests"
+  ],
+  "version": "1.4.0",
+  "_release": "1.4.0",
+  "_resolution": {
+    "type": "version",
+    "tag": "1.4.0",
+    "commit": "5794b36762eb825433a836dbae055be841ee057c"
+  },
+  "_source": "git://github.com/dncrews/angular-elastic-builder.git",
+  "_target": "~1.4.0",
+  "_originalSource": "angular-elastic-builder",
+  "_direct": true
+}
\ No newline at end of file
diff --git a/public/assets/plugins/angular-elastic-builder/LICENSE.md b/public/assets/plugins/angular-elastic-builder/LICENSE.md
new file mode 100644
index 0000000..ea15051
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/LICENSE.md
@@ -0,0 +1,9 @@
+Copyright © 2014 by Intellectual Reserve, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name(s) of the above copyright holders shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization.
diff --git a/public/assets/plugins/angular-elastic-builder/README.md b/public/assets/plugins/angular-elastic-builder/README.md
new file mode 100644
index 0000000..d05655b
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/README.md
@@ -0,0 +1,141 @@
+# Angular Elasticsearch Query Builder
+
+[![NPM version][npm-image]][npm-url]
+![Bower version][bower-image]
+[![Downloads][downloads-image]][downloads-url]
+[![Tips][gratipay-image]][gratipay-url]
+
+This is an Angular.js directive for building an [Elasticsearch](https://www.elastic.co/) query.
+You just give it the fields and can generate a query for it. Its layout is defined using [Bootstrap](http://getbootstrap.com/) classes, but you may also choose to just style it yourself.
+
+It's still pretty early on, as it doesn't support a whole lot of use-cases, but we need to make it awesome. Contributions accepted.
+
+## Try it Out
+[View an example here](http://dncrews.com/angular-elastic-builder/examples/)
+
+## Usage
+
+### Dependency
+Notice: this plugin requires the [Angular Recursion](https://github.com/marklagendijk/angular-recursion) module.
+
+### Installation
+First you'll need to download the [dist](https://github.com/dncrews/angular-elastic-builder/tree/master/dist) files and include this JS file to your app (don't forget to substitute `x.x.x` with the current version number), along with the RecursionHelper, if you're not already using it.
+```html
+<script type="text/javascript" src="/angular-recursion.min.js"></script>
+<script type="text/javascript" src="/angular-elastic-builder.min.js"></script>
+```
+
+Then make sure that it's included in your app's dependencies during module creation.
+
+```js
+angularmodule('appName', [ 'angular-elastic-builder' ]);
+```
+
+Then you can use it in your app
+```js
+/* Controller code */
+
+/**
+ * The elasticBuilderData object will be modified in place so that you can use
+ * your own $watch, and/or your own saving mechanism
+ */
+$scope.elasticBuilderData = {};
+$scope.elasticBuilderData.query = [];
+
+/**
+ * This object is the lookup for what fields
+ * are available in your database, as well as definitions of what kind
+ * of data they are
+ */
+$scope.elasticBuilderData.fields = {
+  'some.number.field': { type: 'number' },
+  'some.term.field': { type: 'term' },
+  'some.boolean.field': { type: 'term', subType: 'boolean' },
+  'multi.selector': { type: 'multi', choices: [ 'AZ', 'CA', 'CT' ]}
+};
+```
+
+```html
+<div data-elastic-builder="elasticBuilderData"></div>
+```
+
+The above elasticFields would allow you create the following form:
+![Screenshot][screenshot-image]
+
+Which represents the following Elasticsearch Query:
+```json
+[
+  {
+    "terms": {
+      "multi.selector": [
+        "AZ",
+        "CT"
+      ]
+    }
+  },
+  {
+    "term": {
+      "some.boolean.field": "0"
+    }
+  },
+  {
+    "not": {
+      "filter": {
+        "term": {
+          "some.term.field": "Hello World"
+        }
+      }
+    }
+  },
+  {
+    "and": [
+      {
+        "range": {
+          "some.number.field": {
+            "gte": 0
+          }
+        }
+      },
+      {
+        "range": {
+          "some.number.field": {
+            "lt": 100
+          }
+        }
+      }
+    ]
+  }
+]
+```
+
+
+### Field Options
+  - `type`: This determines how the fields are displayed in the form.
+    - Currently supported:
+      - `'number'`: in addition to Generic Options, gets "&gt;", "&ge;", "&lt;", "&le;", "="
+      - `'term'`: in addition to Generic Options, gets "Equals" and "! Equals"
+      - `'boolean'`: Does not get Generic Options. Gets `true` and `false`
+        - These are actually "equals 0" and "equals 1" for the database query
+
+Generic Options
+  - In addition to any specific options for fields, all fields also get a "Exists" and "! Exists" option
+
+
+## External Changes && Initial State
+If you want to pass in an initial state (or if you make changes to the query externally), you'll need to
+set the configuration flag `needsUpdate` to `true`. Any time this flag changes to `true`, this directive
+will overwrite the current state and data with whatever is now defined in your configuration object.
+
+
+## Local Development
+To work on this module locally, you will need to clone it and run `gulp watch`. This will ensure that your changes get compiled properly. You will also need to make sure you run `gulp` to build the "dist" files before commit.
+
+
+[npm-image]: https://img.shields.io/npm/v/angular-elastic-builder.svg
+[npm-url]: https://www.npmjs.org/package/angular-elastic-builder
+[bower-image]: https://img.shields.io/bower/v/angular-elastic-builder.svg
+[downloads-image]: https://img.shields.io/npm/dm/angular-elastic-builder.svg
+[downloads-url]: https://www.npmjs.org/package/angular-elastic-builder
+[gratipay-image]: https://img.shields.io/gratipay/dncrews.svg
+[gratipay-url]: https://www.gratipay.com/dncrews/
+[screenshot-image]: https://raw.githubusercontent.com/dncrews/angular-elastic-builder/master/screenshot.png
diff --git a/public/assets/plugins/angular-elastic-builder/bower.json b/public/assets/plugins/angular-elastic-builder/bower.json
new file mode 100644
index 0000000..43641b1
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/bower.json
@@ -0,0 +1,21 @@
+{
+  "name": "angular-elastic-builder",
+  "homepage": "https://github.com/dncrews/angular-elastic-builder",
+  "authors": [
+    "Dan Crews <[email-masked]>"
+  ],
+  "description": "Angular Module for building an Elasticsearch Query",
+  "main": "dist/angular-elastic-builder.js",
+  "keywords": [
+    "elasticsearch",
+    "angular"
+  ],
+  "license": "MIT",
+  "ignore": [
+    "**/.*",
+    "node_modules",
+    "bower_components",
+    "test",
+    "tests"
+  ]
+}
diff --git a/public/assets/plugins/angular-elastic-builder/dist/angular-elastic-builder.js b/public/assets/plugins/angular-elastic-builder/dist/angular-elastic-builder.js
new file mode 100644
index 0000000..4b51820
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/dist/angular-elastic-builder.js
@@ -0,0 +1,590 @@
+/**
+ * # angular-elastic-builder
+ * ## Angular Module for building an Elasticsearch Query
+ *
+ * @version v1.4.0
+ * @link https://github.com/dncrews/angular-elastic-builder.git
+ * @license MIT
+ * @author Dan Crews <[email-masked]>
+ */
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/module.js
+ *
+ * Angular Module for building an Elasticsearch query
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder', [
+    'RecursionHelper',
+  ]);
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/BuilderDirective.js
+ *
+ * Angular Directive for injecting a query builder form.
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder')
+    .directive('elasticBuilder', [
+      'elasticQueryService',
+
+      function EB(elasticQueryService) {
+
+        return {
+          scope: {
+            data: '=elasticBuilder',
+          },
+
+          templateUrl: 'angular-elastic-builder/BuilderDirective.html',
+
+          link: function(scope) {
+            var data = scope.data;
+
+            scope.filters = [];
+
+            /**
+             * Removes either Group or Rule
+             */
+            scope.removeChild = function(idx) {
+              scope.filters.splice(idx, 1);
+            };
+
+            /**
+             * Adds a Single Rule
+             */
+            scope.addRule = function() {
+              scope.filters.push({});
+            };
+
+            /**
+             * Adds a Group of Rules
+             */
+            scope.addGroup = function() {
+              scope.filters.push({
+                type: 'group',
+                subType: 'and',
+                rules: [],
+              });
+            };
+
+            /**
+             * Any time "outside forces" change the query, they should tell us so via
+             * `data.needsUpdate`
+             */
+            scope.$watch('data.needsUpdate', function(curr) {
+              if (!curr) {
+                return;
+              }
+
+              scope.filters = elasticQueryService.toFilters(data.query, scope.data.fields);
+              scope.data.needsUpdate = false;
+            });
+
+            /**
+             * Changes on the page update the Query
+             */
+            scope.$watch('filters', function(curr) {
+              if (!curr) {
+                return;
+              }
+
+              data.query = elasticQueryService.toQuery(scope.filters, scope.data.fields);
+            }, true);
+          }
+        };
+      }
+
+    ]);
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/Chooser.js
+ *
+ * This file is to help recursively, to decide whether to show a group or rule
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticBuilderChooser', [
+    'RecursionHelper',
+    'groupClassHelper',
+
+    function elasticBuilderChooser(RH, groupClassHelper) {
+
+      return {
+        scope: {
+          elasticFields: '=',
+          item: '=elasticBuilderChooser',
+          onRemove: '&',
+        },
+
+        templateUrl: 'angular-elastic-builder/ChooserDirective.html',
+
+        compile: function (element) {
+          return RH.compile(element, function(scope, el, attrs) {
+            var depth = scope.depth = (+ attrs.depth)
+              , item = scope.item;
+
+            scope.getGroupClassName = function() {
+              var level = depth;
+              if (item.type === 'group') level++;
+
+              return groupClassHelper(level);
+            };
+          });
+        }
+      };
+    }
+
+  ]);
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/Group.js
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticBuilderGroup', [
+    'RecursionHelper',
+    'groupClassHelper',
+
+    function elasticBuilderGroup(RH, groupClassHelper) {
+
+      return {
+        scope: {
+          elasticFields: '=',
+          group: '=elasticBuilderGroup',
+          onRemove: '&',
+        },
+
+        templateUrl: 'angular-elastic-builder/GroupDirective.html',
+
+        compile: function(element) {
+          return RH.compile(element, function(scope, el, attrs) {
+            var depth = scope.depth = (+ attrs.depth);
+            var group = scope.group;
+
+            scope.addRule = function() {
+              group.rules.push({});
+            };
+            scope.addGroup = function() {
+              group.rules.push({
+                type: 'group',
+                subType: 'and',
+                rules: [],
+              });
+            };
+
+            scope.removeChild = function(idx) {
+              group.rules.splice(idx, 1);
+            };
+
+            scope.getGroupClassName = function() {
+              return groupClassHelper(depth + 1);
+            };
+          });
+        }
+      };
+    }
+
+  ]);
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/Rule.js
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticBuilderRule', [
+
+    function elasticBuilderRule() {
+      return {
+        scope: {
+          elasticFields: '=',
+          rule: '=elasticBuilderRule',
+          onRemove: '&',
+        },
+
+        templateUrl: 'angular-elastic-builder/RuleDirective.html',
+
+        link: function(scope) {
+          scope.getType = function() {
+            var fields = scope.elasticFields;
+            var field = scope.rule.field;
+
+            if (!fields || !field) {
+              return;
+            }
+
+            if (fields[field].subType === 'boolean') {
+              return 'boolean';
+            }
+
+            return fields[field].type;
+          };
+        }
+      };
+    }
+
+  ]);
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/RuleTypes.js
+ *
+ * Determines which Rule type should be displayed
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticType', [
+
+    function() {
+      return {
+        scope: {
+          type: '=elasticType',
+          rule: '=',
+          guide: '=',
+        },
+
+        template: '<ng-include src="getTemplateUrl()" />',
+
+        link: function(scope) {
+          scope.getTemplateUrl = function() {
+            var type = scope.type;
+            if (! type) return;
+
+            type = type.charAt(0).toUpperCase() + type.slice(1);
+
+            return 'angular-elastic-builder/types/' + type + '.html';
+          };
+
+          // This is a weird hack to make sure these are numbers
+          scope.booleans = [ 'False', 'True' ];
+          scope.booleansOrder = [ 'True', 'False' ];
+
+          scope.inputNeeded = function() {
+            var needs = [
+              'equals',
+              'notEquals',
+
+              'gt',
+              'gte',
+              'lt',
+              'lte',
+            ];
+
+            return ~needs.indexOf(scope.rule.subType);
+          };
+        },
+      };
+    }
+
+  ]);
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/services/GroupClassHelper.js
+ *
+ * This keeps all of the groups colored correctly
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder')
+    .factory('groupClassHelper', function groupClassHelper() {
+
+      return function(level) {
+        var levels = [
+          '',
+          // 'list-group-item-info',
+          // 'list-group-item-success',
+          // 'list-group-item-warning',
+          // 'list-group-item-danger',
+        ];
+
+        return levels[level % levels.length];
+      };
+    });
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/services/QueryService.js
+ *
+ * This file is used to convert filters into queries, and vice versa
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder')
+    .factory('elasticQueryService', [
+      function() {
+
+        return {
+          toFilters: toFilters,
+          toQuery: toQuery,
+        };
+      }
+    ]);
+
+  function toFilters(query, fieldMap) {
+    var filters = query.map(parseQueryGroup.bind(query, fieldMap));
+    return filters;
+  }
+
+  function toQuery(filters, fieldMap) {
+    var query = filters.map(parseFilterGroup.bind(filters, fieldMap)).filter(function(item) {
+      return !!item;
+    });
+    return query;
+  }
+
+  function parseQueryGroup(fieldMap, group, truthy) {
+    if (truthy !== false) {
+      truthy = true;
+    }
+
+    var key = Object.keys(group)[0],
+      typeMap = {
+        or: 'group',
+        and: 'group',
+        range: 'number',
+      },
+      type = typeMap[key] || 'item',
+      obj = getFilterTemplate(type);
+
+    switch (key) {
+      case 'or':
+      case 'and':
+        obj.rules = group[key].map(parseQueryGroup.bind(group, fieldMap));
+        obj.subType = key;
+        break;
+      case 'missing':
+      case 'exists':
+        obj.field = group[key].field;
+        obj.subType = {
+          exists: 'exists',
+          missing: 'notExists',
+        }[key];
+        delete obj.value;
+        break;
+      case 'term':
+      case 'terms':
+        obj.field = Object.keys(group[key])[0];
+        var fieldData = fieldMap[Object.keys(group[key])[0]];
+
+        if (fieldData.type === 'multi') {
+          var vals = group[key][obj.field];
+          if (typeof vals === 'string') {
+            vals = [vals];
+          }
+          // MY CUSTOM MODIFICATION
+          obj.value = group[key][obj.field];
+          // obj.values = fieldData.choices.reduce(function(prev, choice) {
+          //   prev[choice] = truthy === (group[key][obj.field].indexOf(choice) > -1);
+          //   return prev;
+          // }, {});
+        } else {
+          obj.subType = truthy ? 'equals' : 'notEquals';
+          obj.value = group[key][obj.field];
+
+          if (typeof obj.value === 'number') {
+            obj.subType = 'boolean';
+          }
+        }
+        break;
+      case 'range':
+        obj.field = Object.keys(group[key])[0];
+        obj.subType = Object.keys(group[key][obj.field])[0];
+        obj.value = group[key][obj.field][obj.subType];
+        break;
+      case 'not':
+        obj = parseQueryGroup(fieldMap, group[key].filter, false);
+        break;
+      default:
+        obj.field = Object.keys(group[key])[0];
+        break;
+    }
+
+    return obj;
+  }
+
+  function parseFilterGroup(fieldMap, group) {
+    var obj = {};
+    if (group.type === 'group') {
+      obj[group.subType] = group.rules.map(parseFilterGroup.bind(group, fieldMap)).filter(function(item) {
+        return !!item;
+      });
+      return obj;
+    }
+
+    var fieldName = group.field;
+    var fieldData = fieldMap[fieldName];
+
+    if (!fieldName) {
+      return;
+    }
+
+    switch (fieldData.type) {
+      case 'term':
+      case 'multiterm':
+        if (fieldData.subType === 'boolean') {
+          group.subType = 'boolean';
+        }
+
+        if (!group.subType) {
+          return;
+        }
+        switch (group.subType) {
+          case 'equals':
+          case 'boolean':
+            if (group.value === undefined) {
+              return;
+            }
+            obj.term = {};
+            obj.term[fieldName] = group.value;
+            break;
+          case 'notEquals':
+            if (group.value === undefined) {
+              return;
+            }
+            obj.not = {
+              filter: {
+                term: {}
+              }
+            };
+            obj.not.filter.term[fieldName] = group.value;
+            break;
+          case 'exists':
+            obj.exists = {
+              field: fieldName
+            };
+            break;
+          case 'notExists':
+            obj.missing = {
+              field: fieldName
+            };
+            break;
+          default:
+            throw new Error('unexpected subtype ' + group.subType);
+        }
+        break;
+
+      case 'number':
+        obj.range = {};
+        obj.range[fieldName] = {};
+        obj.range[fieldName][group.subType] = group.value;
+        break;
+
+      case 'date':
+        if (group.subType === 'exists') {
+          obj.exists = {
+            field: fieldName
+          };
+        } else if (group.subType === 'notExists') {
+          obj.missing = {
+            field: fieldName
+          };
+        } else {
+          throw new Error('unexpected subtype');
+        }
+
+        break;
+
+      case 'multi':
+        obj.terms = {};
+        obj.terms[fieldName] = group.value;
+        // obj.terms[fieldName] = Object.keys(group.values || {}).reduce(function(prev, key) {
+        //   if (group.values[key]) prev.push(key);
+        //
+        //   return prev;
+        // }, []);
+        break;
+
+      default:
+        throw new Error('unexpected type');
+    }
+
+    return obj;
+  }
+
+  function getFilterTemplate(type) {
+    var templates = {
+      group: {
+        type: 'group',
+        subType: '',
+        rules: [],
+      },
+      item: {
+        field: '',
+        subType: '',
+        value: '',
+      },
+      number: {
+        field: '',
+        subType: '',
+        value: null,
+      }
+    };
+
+    return angular.copy(templates[type]);
+  }
+
+})(window.angular);
+
+(function(angular) {"use strict"; angular.module("angular-elastic-builder").run(["$templateCache", function($templateCache) {$templateCache.put("angular-elastic-builder/BuilderDirective.html","<!-- <div class=\"elastic-builder\">\n  <div class=\"filter-panels\">\n    <div class=\"list-group form-inline\">\n      <div\n        data-ng-repeat=\"filter in filters\"\n        data-elastic-builder-chooser=\"filter\"\n        data-elastic-fields=\"data.fields\"\n        data-on-remove=\"removeChild($index)\"\n        data-depth=\"0\"></div>\n      <div class=\"list-group-item actions\">\n        <a class=\"btn btn-xs btn-primary\" title=\"Add Rule\" data-ng-click=\"addRule()\">\n          <i class=\"fa fa-plus\"></i>\n        </a>\n        <a class=\"btn btn-xs btn-primary\" title=\"Add Group\" data-ng-click=\"addGroup()\">\n          <i class=\"fa fa-list\"></i>\n        </a>\n      </div>\n    </div>\n  </div>\n</div> -->\n\n<!-- <div class=\"elastic-builder\">\n  <div class=\"filter-panels\"> -->\n    <div class=\"list-group form-inline list-group-item-custom\" ng-switch=\"data.type\">\n      <div\n        data-ng-repeat=\"filter in filters\"\n        data-elastic-builder-chooser=\"filter\"\n        data-elastic-fields=\"data.fields\"\n        data-on-remove=\"removeChild($index)\"\n        data-depth=\"0\">\n      </div>\n      <div class=\"list-group-item actions list-group-item-custom\" ng-switch-when=\"condition\">\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addGroup()\">\n				  <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_GROUP\' | translate }}\n				</a>\n      </div>\n      <div class=\"list-group-item actions list-group-item-custom\" ng-switch-when=\"action\">\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addRule()\">\n				  <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_ACTION\' | translate }}\n				</a>\n      </div>\n      <div class=\"list-group-item actions list-group-item-custom\" ng-switch-default>\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addRule()\">\n				  <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\n				</a>\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addGroup()\">\n				  <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_GROUP\' | translate }}\n				</a>\n      </div>\n    </div>\n  <!-- </div>\n</div> -->\n");
+$templateCache.put("angular-elastic-builder/ChooserDirective.html","<!-- <div\n  class=\"list-group-item elastic-builder-chooser\"\n  data-ng-class=\"getGroupClassName()\">\n\n  <div data-ng-if=\"item.type === \'group\'\"\n    data-elastic-builder-group=\"item\"\n    data-depth=\"{{ depth }}\"\n    data-elastic-fields=\"elasticFields\"\n    data-on-remove=\"onRemove()\"></div>\n\n  <div data-ng-if=\"item.type !== \'group\'\"\n    data-elastic-builder-rule=\"item\"\n    data-elastic-fields=\"elasticFields\"\n    data-on-remove=\"onRemove()\"></div>\n\n</div> -->\n\n\n<div class=\"list-group-item elastic-builder-chooser list-group-item-custom\" data-ng-class=\"getGroupClassName()\">\n  <div data-ng-if=\"item.type === \'group\'\"\n    data-elastic-builder-group=\"item\"\n    data-depth=\"{{ depth }}\"\n    data-elastic-fields=\"elasticFields\"\n    data-on-remove=\"onRemove()\"></div>\n  <div data-ng-if=\"item.type !== \'group\'\"\n    data-elastic-builder-rule=\"item\"\n    data-elastic-fields=\"elasticFields\"\n    data-on-remove=\"onRemove()\"></div>\n</div>\n");
+$templateCache.put("angular-elastic-builder/GroupDirective.html","<!-- <div class=\"elastic-builder-group\">\n  <h5>If\n    <select data-ng-model=\"group.subType\" class=\"form-control\">\n      <option value=\"and\">all</option>\n      <option value=\"or\">any</option>\n    </select>\n    of these conditions are met\n  </h5>\n  <div\n    data-ng-repeat=\"rule in group.rules\"\n    data-elastic-builder-chooser=\"rule\"\n    data-elastic-fields=\"elasticFields\"\n    data-depth=\"{{ +depth + 1 }}\"\n    data-on-remove=\"removeChild($index)\"></div>\n\n  <div class=\"list-group-item actions\" data-ng-class=\"getGroupClassName()\">\n    <a class=\"btn btn-xs btn-primary\" title=\"Add Sub-Rule\" data-ng-click=\"addRule()\">\n      <i class=\"fa fa-plus\"></i>\n    </a>\n    <a class=\"btn btn-xs btn-primary\" title=\"Add Sub-Group\" data-ng-click=\"addGroup()\">\n      <i class=\"fa fa-list\"></i>\n    </a>\n  </div>\n\n  <a class=\"btn btn-xs btn-danger remover\" data-ng-click=\"onRemove()\">\n    <i class=\"fa fa-minus\"></i>\n  </a>\n</div> -->\n\n\n<!-- BEGIN Portlet PORTLET-->\n<div class=\"portlet light\">\n  <div class=\"portlet-title\">\n    <div class=\"caption\" data-ng-class=\"{\'font-blue-hoki\': data.type === \'condition\', \'font-red-flamingo\': data.type === \'action\'}\">\n      <!-- <i class=\"icon-people font-green-sharp\"></i> -->\n      <h5><span class=\"caption-subject\">{{ \'APPLICATION_IF\' | translate }}</span>\n        <select data-ng-model=\"group.subType\" class=\"form-control\">\n          <option value=\"and\"><strong>{{ \'APPLICATION_ALL\' | translate | lowercase }}</strong></option>\n          <option value=\"or\"><strong>{{ \'APPLICATION_ANY\' | translate | lowercase }}</strong></option>\n        </select>\n        <span class=\"caption-subject\">{{group.subType == \'and\' ? \'MESSAGE_CODITIONS_MET_ALL\' : \'MESSAGE_CODITIONS_MET_ANY\' | translate}}</span>\n      </h5>\n    </div>\n  </div>\n  <div class=\"portlet-body\">\n    <div class=\"elastic-builder-group\">\n      <div\n        data-ng-repeat=\"rule in group.rules\"\n        data-elastic-builder-chooser=\"rule\"\n        data-elastic-fields=\"elasticFields\"\n        data-depth=\"{{ +depth + 1 }}\"\n        data-on-remove=\"removeChild($index)\"></div>\n\n      <div class=\"list-group-item actions list-group-item-custom\" data-ng-class=\"getGroupClassName()\">\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addRule()\">\n          <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\n        </a>\n        <a class=\"btn red btn-sm remover\" data-ng-click=\"onRemove()\">\n          <i class=\"icon-trash\"></i> {{ \'APPLICATION_REMOVE_GROUP\' | translate }}\n        </a>\n      </div>\n    </div>\n  </div>\n</div>\n<!-- END Portlet PORTLET-->\n");
+$templateCache.put("angular-elastic-builder/RuleDirective.html","<!-- <div class=\"elastic-builder-rule\">\n  <select class=\"form-control\" data-ng-model=\"rule.field\" data-ng-options=\"key as key for (key, value) in elasticFields\"></select>\n\n  <span data-elastic-type=\"getType()\" data-rule=\"rule\" data-guide=\"elasticFields[rule.field]\"></span>\n\n  <a class=\"btn btn-xs btn-danger remover\" data-ng-click=\"onRemove()\">\n    <i class=\"fa fa-minus\"></i>\n  </a>\n\n</div> -->\n<!-- <div class=\"elastic-builder-rule\"> -->\n  <!-- <select class=\"form-control\" data-ng-model=\"rule.field\" data-ng-options=\"key as key for (key, value) in elasticFields\"></select> -->\n  {{elasticFields[rule.field].action.label | translate}}\n  <select class=\"form-control\" data-ng-model=\"rule.field\" >\n  <option ng-repeat=\"option in elasticFields\" value=\"{{option.value}}\">{{ option.label | translate }}</option>\n  </select>\n  <!-- <ui-select class=\"form-control\" data-ng-model=\"rule.field\" theme=\"bootstrap\">\n    <ui-select-match placeholder=\"{{\'APPLICATION_CONDITION\' | translate}}\">{{$translate.instant($select.selected.name)}}</ui-select-match>\n    <ui-select-choices repeat=\"value.value as key for (key, value) in elasticFields | filter: $select.search\">\n      {{$translate.instant(key.name)}}\n    </ui-select-choices>\n  </ui-select> -->\n\n  <span data-elastic-type=\"getType()\" data-rule=\"rule\" data-guide=\"elasticFields[rule.field]\"></span>\n\n  <!-- <a class=\"btn btn-xs btn-danger remover\" data-ng-click=\"onRemove()\">\n    <i class=\"fa fa-minus\"></i>\n  </a> -->\n\n  <a class=\"btn remover\" data-ng-click=\"onRemove()\">\n    <i class=\"icon-trash\"></i>\n  </a>\n\n<!-- </div> -->\n");
+$templateCache.put("angular-elastic-builder/types/Boolean.html","<span class=\"boolean-rule\">\n  Equals\n\n  <!-- This is a weird hack to make sure these are numbers -->\n  <select\n    data-ng-model=\"rule.value\"\n    class=\"form-control\"\n    data-ng-options=\"booleans.indexOf(choice) as choice for choice in booleansOrder\">\n  </select>\n</span>\n");
+$templateCache.put("angular-elastic-builder/types/Date.html","<span class=\"date-rule\">\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\n\n    <optgroup label=\"Generic\">\n      <option value=\"exists\">Exists</option>\n      <option value=\"notExists\">! Exists</option>\n    </optgroup>\n  </select>\n\n</span>\n");
+$templateCache.put("angular-elastic-builder/types/Multi.html","<!-- <span class=\"multi-rule\">\n  <span data-ng-repeat=\"choice in guide.choices\">\n    <label class=\"checkbox\">\n      <input type=\"checkbox\" data-ng-model=\"rule.values[choice]\">\n      {{ choice }}\n    </label>\n  </span>\n</span> -->\n\n<span class=\"multi-rule\">\n  {{guide.action.midterm | translate}}\n  <!-- Range Fields -->\n  <!-- <select data-ng-model=\"rule.values\" class=\"form-control\"> -->\n  <select data-ng-model=\"rule.value\" class=\"form-control\">\n    <!-- <optgroup label=\"Numeral\"> -->\n      <option data-ng-repeat=\"(key, value) in guide.choices\" value=\"{{value}}\">{{key}}</option>\n    <!-- </optgroup> -->\n\n    <!-- <optgroup label=\"Generic\">\n      <option value=\"exists\">Exists</option>\n      <option value=\"notExists\">! Exists</option>\n    </optgroup> -->\n  </select>\n\n  <!-- <input data-ng-if=\"inputNeeded()\"\n    class=\"form-control\"\n    data-ng-model=\"rule.value\"\n    type=\"number\"\n    min=\"{{ guide.minimum }}\"\n    max=\"{{ guide.maximum }}\"> -->\n</span>\n");
+$templateCache.put("angular-elastic-builder/types/Multiterm.html","<span class=\"elastic-multiterm\">\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\n      <option value=\"equals\">{{ \'APPLICATION_EQUALS_TO\' | translate }}</option>\n      <option value=\"notEquals\">{{ \'APPLICATION_NOT_EQUALS_TO\' | translate }}</option>\n  </select>\n  <select data-ng-model=\"rule.value\" class=\"form-control\">\n      <option data-ng-repeat=\"(key, value) in guide.choices\" value=\"{{value}}\">{{value | capitalize}}</option>\n  </select>\n</span>\n");
+$templateCache.put("angular-elastic-builder/types/Number.html","<span class=\"number-rule\">\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\n    <!-- <optgroup label=\"Numeral\"> -->\n      <option value=\"equals\">=</option>\n      <option value=\"gt\">&gt;</option>\n      <option value=\"gte\">&ge;</option>\n      <option value=\"lt\">&lt;</option>\n      <option value=\"lte\">&le;</option>\n    <!-- </optgroup> -->\n\n    <!-- <optgroup label=\"Generic\"> -->\n      <!-- <option value=\"exists\">Exists</option>\n      <option value=\"notExists\">! Exists</option> -->\n    <!-- </optgroup> -->\n  </select>\n\n  <!-- Range Fields -->\n  <input data-ng-if=\"inputNeeded()\"\n    class=\"form-control\"\n    data-ng-model=\"rule.value\"\n    type=\"number\"\n    min=\"{{ guide.minimum }}\"\n    max=\"{{ guide.maximum }}\">\n\n    <!-- <span class=\"help-block\">{{rule.help}}</span> -->\n\n</span>\n");
+$templateCache.put("angular-elastic-builder/types/Term.html","<!-- <span class=\"elastic-term\">\n  <select data-ng-model=\"rule.subType\" class=\"form-control\"> -->\n    <!-- Term Options -->\n    <!-- <optgroup label=\"Text\">\n      <option value=\"equals\">Equals</option>\n      <option value=\"notEquals\">! Equals</option>\n    </optgroup> -->\n\n    <!-- Generic Options -->\n    <!-- <optgroup label=\"Generic\">\n      <option value=\"exists\">Exists</option>\n      <option value=\"notExists\">! Exists</option>\n    </optgroup>\n\n  </select>\n  <input\n    data-ng-if=\"inputNeeded()\"\n    class=\"form-control\"\n    data-ng-model=\"rule.value\"\n    type=\"text\">\n</span> -->\n\n\n<span class=\"elastic-term\">\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\n    <!-- Term Options -->\n    <!-- <optgroup label=\"Text\"> -->\n      <option value=\"equals\">{{ \'APPLICATION_EQUALS_TO\' | translate }}</option>\n      <option value=\"notEquals\">{{ \'APPLICATION_NOT_EQUALS_TO\' | translate }}</option>\n    <!-- </optgroup> -->\n\n    <!-- Generic Options -->\n    <!-- <optgroup label=\"Generic\">\n      <option value=\"exists\">Exists</option>\n      <option value=\"notExists\">! Exists</option>\n    </optgroup> -->\n\n  </select>\n  <input\n    data-ng-if=\"inputNeeded()\"\n    class=\"form-control input-medium\"\n    data-ng-model=\"rule.value\"\n    type=\"text\">\n</span>\n");}]);})(window.angular);
\ No newline at end of file
diff --git a/public/assets/plugins/angular-elastic-builder/dist/angular-elastic-builder.min.js b/public/assets/plugins/angular-elastic-builder/dist/angular-elastic-builder.min.js
new file mode 100644
index 0000000..3e84dce
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/dist/angular-elastic-builder.min.js
@@ -0,0 +1 @@
+!function(e){"use strict";e.module("angular-elastic-builder",["RecursionHelper"])}(window.angular),function(e){"use strict";e.module("angular-elastic-builder").directive("elasticBuilder",["elasticQueryService",function(e){return{scope:{data:"=elasticBuilder"},templateUrl:"angular-elastic-builder/BuilderDirective.html",link:function(n){var r=n.data;n.filters=[],n.removeChild=function(e){n.filters.splice(e,1)},n.addRule=function(){n.filters.push({})},n.addGroup=function(){n.filters.push({type:"group",subType:"and",rules:[]})},n.$watch("data.needsUpdate",function(t){t&&(n.filters=e.toFilters(r.query,n.data.fields),n.data.needsUpdate=!1)}),n.$watch("filters",function(t){t&&(r.query=e.toQuery(n.filters,n.data.fields))},!0)}}}])}(window.angular),function(e){"use strict";var n=e.module("angular-elastic-builder");n.directive("elasticBuilderChooser",["RecursionHelper","groupClassHelper",function(e,n){return{scope:{elasticFields:"=",item:"=elasticBuilderChooser",onRemove:"&"},templateUrl:"angular-elastic-builder/ChooserDirective.html",compile:function(r){return e.compile(r,function(e,r,t){var a=e.depth=+t.depth,l=e.item;e.getGroupClassName=function(){var e=a;return"group"===l.type&&e++,n(e)}})}}}])}(window.angular),function(e){"use strict";var n=e.module("angular-elastic-builder");n.directive("elasticBuilderGroup",["RecursionHelper","groupClassHelper",function(e,n){return{scope:{elasticFields:"=",group:"=elasticBuilderGroup",onRemove:"&"},templateUrl:"angular-elastic-builder/GroupDirective.html",compile:function(r){return e.compile(r,function(e,r,t){var a=e.depth=+t.depth,l=e.group;e.addRule=function(){l.rules.push({})},e.addGroup=function(){l.rules.push({type:"group",subType:"and",rules:[]})},e.removeChild=function(e){l.rules.splice(e,1)},e.getGroupClassName=function(){return n(a+1)}})}}}])}(window.angular),function(e){"use strict";var n=e.module("angular-elastic-builder");n.directive("elasticBuilderRule",[function(){return{scope:{elasticFields:"=",rule:"=elasticBuilderRule",onRemove:"&"},templateUrl:"angular-elastic-builder/RuleDirective.html",link:function(e){e.getType=function(){var n=e.elasticFields,r=e.rule.field;return n&&r?"boolean"===n[r].subType?"boolean":n[r].type:void 0}}}}])}(window.angular),function(e){"use strict";var n=e.module("angular-elastic-builder");n.directive("elasticType",[function(){return{scope:{type:"=elasticType",rule:"=",guide:"="},template:'<ng-include src="getTemplateUrl()" />',link:function(e){e.getTemplateUrl=function(){var n=e.type;if(n)return n=n.charAt(0).toUpperCase()+n.slice(1),"angular-elastic-builder/types/"+n+".html"},e.booleans=["False","True"],e.booleansOrder=["True","False"],e.inputNeeded=function(){var n=["equals","notEquals","gt","gte","lt","lte"];return~n.indexOf(e.rule.subType)}}}}])}(window.angular),function(e){"use strict";e.module("angular-elastic-builder").run(["$templateCache",function(e){e.put("angular-elastic-builder/BuilderDirective.html",'<!-- <div class="elastic-builder">\r\n  <div class="filter-panels">\r\n    <div class="list-group form-inline">\r\n      <div\r\n        data-ng-repeat="filter in filters"\r\n        data-elastic-builder-chooser="filter"\r\n        data-elastic-fields="data.fields"\r\n        data-on-remove="removeChild($index)"\r\n        data-depth="0"></div>\r\n      <div class="list-group-item actions">\r\n        <a class="btn btn-xs btn-primary" title="Add Rule" data-ng-click="addRule()">\r\n          <i class="fa fa-plus"></i>\r\n        </a>\r\n        <a class="btn btn-xs btn-primary" title="Add Group" data-ng-click="addGroup()">\r\n          <i class="fa fa-list"></i>\r\n        </a>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div> -->\r\n\r\n<!-- <div class="elastic-builder">\r\n  <div class="filter-panels"> -->\r\n    <div class="list-group form-inline list-group-item-custom" ng-switch="data.type">\r\n      <div\r\n        data-ng-repeat="filter in filters"\r\n        data-elastic-builder-chooser="filter"\r\n        data-elastic-fields="data.fields"\r\n        data-on-remove="removeChild($index)"\r\n        data-depth="0">\r\n      </div>\r\n      <div class="list-group-item actions list-group-item-custom" ng-switch-when="condition">\r\n        <a href="#" class="btn green btn-sm" data-ng-click="addGroup()">\r\n				  <i class="icon-plus"></i> {{ \'APPLICATION_ADD_GROUP\' | translate }}\r\n				</a>\r\n      </div>\r\n      <div class="list-group-item actions list-group-item-custom" ng-switch-when="action">\r\n        <a href="#" class="btn green btn-sm" data-ng-click="addRule()">\r\n				  <i class="icon-plus"></i> {{ \'APPLICATION_ADD_ACTION\' | translate }}\r\n				</a>\r\n      </div>\r\n      <div class="list-group-item actions list-group-item-custom" ng-switch-default>\r\n        <a href="#" class="btn green btn-sm" data-ng-click="addRule()">\r\n				  <i class="icon-plus"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\r\n				</a>\r\n        <a href="#" class="btn green btn-sm" data-ng-click="addGroup()">\r\n				  <i class="icon-plus"></i> {{ \'APPLICATION_ADD_GROUP\' | translate }}\r\n				</a>\r\n      </div>\r\n    </div>\r\n  <!-- </div>\r\n</div> -->\r\n'),e.put("angular-elastic-builder/ChooserDirective.html",'<!-- <div\r\n  class="list-group-item elastic-builder-chooser"\r\n  data-ng-class="getGroupClassName()">\r\n\r\n  <div data-ng-if="item.type === \'group\'"\r\n    data-elastic-builder-group="item"\r\n    data-depth="{{ depth }}"\r\n    data-elastic-fields="elasticFields"\r\n    data-on-remove="onRemove()"></div>\r\n\r\n  <div data-ng-if="item.type !== \'group\'"\r\n    data-elastic-builder-rule="item"\r\n    data-elastic-fields="elasticFields"\r\n    data-on-remove="onRemove()"></div>\r\n\r\n</div> -->\r\n\r\n\r\n<div class="list-group-item elastic-builder-chooser list-group-item-custom" data-ng-class="getGroupClassName()">\r\n  <div data-ng-if="item.type === \'group\'"\r\n    data-elastic-builder-group="item"\r\n    data-depth="{{ depth }}"\r\n    data-elastic-fields="elasticFields"\r\n    data-on-remove="onRemove()"></div>\r\n  <div data-ng-if="item.type !== \'group\'"\r\n    data-elastic-builder-rule="item"\r\n    data-elastic-fields="elasticFields"\r\n    data-on-remove="onRemove()"></div>\r\n</div>\r\n'),e.put("angular-elastic-builder/GroupDirective.html",'<!-- <div class="elastic-builder-group">\r\n  <h5>If\r\n    <select data-ng-model="group.subType" class="form-control">\r\n      <option value="and">all</option>\r\n      <option value="or">any</option>\r\n    </select>\r\n    of these conditions are met\r\n  </h5>\r\n  <div\r\n    data-ng-repeat="rule in group.rules"\r\n    data-elastic-builder-chooser="rule"\r\n    data-elastic-fields="elasticFields"\r\n    data-depth="{{ +depth + 1 }}"\r\n    data-on-remove="removeChild($index)"></div>\r\n\r\n  <div class="list-group-item actions" data-ng-class="getGroupClassName()">\r\n    <a class="btn btn-xs btn-primary" title="Add Sub-Rule" data-ng-click="addRule()">\r\n      <i class="fa fa-plus"></i>\r\n    </a>\r\n    <a class="btn btn-xs btn-primary" title="Add Sub-Group" data-ng-click="addGroup()">\r\n      <i class="fa fa-list"></i>\r\n    </a>\r\n  </div>\r\n\r\n  <a class="btn btn-xs btn-danger remover" data-ng-click="onRemove()">\r\n    <i class="fa fa-minus"></i>\r\n  </a>\r\n</div> -->\r\n\r\n\r\n<!-- BEGIN Portlet PORTLET-->\r\n<div class="portlet light">\r\n  <div class="portlet-title">\r\n    <div class="caption" data-ng-class="{\'font-blue-hoki\': data.type === \'condition\', \'font-red-flamingo\': data.type === \'action\'}">\r\n      <!-- <i class="icon-people font-green-sharp"></i> -->\r\n      <h5><span class="caption-subject">{{ \'APPLICATION_IF\' | translate }}</span>\r\n        <select data-ng-model="group.subType" class="form-control">\r\n          <option value="and"><strong>{{ \'APPLICATION_ALL\' | translate | lowercase }}</strong></option>\r\n          <option value="or"><strong>{{ \'APPLICATION_ANY\' | translate | lowercase }}</strong></option>\r\n        </select>\r\n        <span class="caption-subject">{{group.subType == \'and\' ? \'MESSAGE_CODITIONS_MET_ALL\' : \'MESSAGE_CODITIONS_MET_ANY\' | translate}}</span>\r\n      </h5>\r\n    </div>\r\n  </div>\r\n  <div class="portlet-body">\r\n    <div class="elastic-builder-group">\r\n      <div\r\n        data-ng-repeat="rule in group.rules"\r\n        data-elastic-builder-chooser="rule"\r\n        data-elastic-fields="elasticFields"\r\n        data-depth="{{ +depth + 1 }}"\r\n        data-on-remove="removeChild($index)"></div>\r\n\r\n      <div class="list-group-item actions list-group-item-custom" data-ng-class="getGroupClassName()">\r\n        <a href="#" class="btn green btn-sm" data-ng-click="addRule()">\r\n          <i class="icon-plus"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\r\n        </a>\r\n        <a class="btn red btn-sm remover" data-ng-click="onRemove()">\r\n          <i class="icon-trash"></i> {{ \'APPLICATION_REMOVE_GROUP\' | translate }}\r\n        </a>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n<!-- END Portlet PORTLET-->\r\n'),e.put("angular-elastic-builder/RuleDirective.html",'<!-- <div class="elastic-builder-rule">\r\n  <select class="form-control" data-ng-model="rule.field" data-ng-options="key as key for (key, value) in elasticFields"></select>\r\n\r\n  <span data-elastic-type="getType()" data-rule="rule" data-guide="elasticFields[rule.field]"></span>\r\n\r\n  <a class="btn btn-xs btn-danger remover" data-ng-click="onRemove()">\r\n    <i class="fa fa-minus"></i>\r\n  </a>\r\n\r\n</div> -->\r\n<!-- <div class="elastic-builder-rule"> -->\r\n  <!-- <select class="form-control" data-ng-model="rule.field" data-ng-options="key as key for (key, value) in elasticFields"></select> -->\n  {{elasticFields[rule.field].action.label | translate}}\n  <select class="form-control" data-ng-model="rule.field" >\n  <option ng-repeat="option in elasticFields" value="{{option.value}}">{{ option.label | translate }}</option>\n  </select>\n  <!-- <ui-select class="form-control" data-ng-model="rule.field" theme="bootstrap">\r\n    <ui-select-match placeholder="{{\'APPLICATION_CONDITION\' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>\r\n    <ui-select-choices repeat="value.value as key for (key, value) in elasticFields | filter: $select.search">\r\n      {{$translate.instant(key.name)}}\r\n    </ui-select-choices>\r\n  </ui-select> -->\r\n\r\n  <span data-elastic-type="getType()" data-rule="rule" data-guide="elasticFields[rule.field]"></span>\r\n\r\n  <!-- <a class="btn btn-xs btn-danger remover" data-ng-click="onRemove()">\r\n    <i class="fa fa-minus"></i>\r\n  </a> -->\r\n\r\n  <a class="btn remover" data-ng-click="onRemove()">\r\n    <i class="icon-trash"></i>\r\n  </a>\r\n\r\n<!-- </div> -->\r\n'),e.put("angular-elastic-builder/types/Boolean.html",'<span class="boolean-rule">\r\n  Equals\r\n\r\n  <!-- This is a weird hack to make sure these are numbers -->\r\n  <select\r\n    data-ng-model="rule.value"\r\n    class="form-control"\r\n    data-ng-options="booleans.indexOf(choice) as choice for choice in booleansOrder">\r\n  </select>\r\n</span>\r\n'),e.put("angular-elastic-builder/types/Date.html",'<span class="date-rule">\r\n  <select data-ng-model="rule.subType" class="form-control">\r\n\r\n    <optgroup label="Generic">\r\n      <option value="exists">Exists</option>\r\n      <option value="notExists">! Exists</option>\r\n    </optgroup>\r\n  </select>\r\n\r\n</span>\r\n'),e.put("angular-elastic-builder/types/Multi.html",'<!-- <span class="multi-rule">\r\n  <span data-ng-repeat="choice in guide.choices">\r\n    <label class="checkbox">\r\n      <input type="checkbox" data-ng-model="rule.values[choice]">\r\n      {{ choice }}\r\n    </label>\r\n  </span>\r\n</span> -->\r\n\r\n<span class="multi-rule">\r\n  {{guide.action.midterm | translate}}\r\n  <!-- Range Fields -->\r\n  <!-- <select data-ng-model="rule.values" class="form-control"> -->\r\n  <select data-ng-model="rule.value" class="form-control">\r\n    <!-- <optgroup label="Numeral"> -->\r\n      <option data-ng-repeat="(key, value) in guide.choices" value="{{value}}">{{key}}</option>\r\n    <!-- </optgroup> -->\r\n\r\n    <!-- <optgroup label="Generic">\r\n      <option value="exists">Exists</option>\r\n      <option value="notExists">! Exists</option>\r\n    </optgroup> -->\r\n  </select>\r\n\r\n  <!-- <input data-ng-if="inputNeeded()"\r\n    class="form-control"\r\n    data-ng-model="rule.value"\r\n    type="number"\r\n    min="{{ guide.minimum }}"\r\n    max="{{ guide.maximum }}"> -->\r\n</span>\r\n'),e.put("angular-elastic-builder/types/Multiterm.html",'<span class="elastic-multiterm">\r\n  <select data-ng-model="rule.subType" class="form-control">\r\n      <option value="equals">{{ \'APPLICATION_EQUALS_TO\' | translate }}</option>\r\n      <option value="notEquals">{{ \'APPLICATION_NOT_EQUALS_TO\' | translate }}</option>\r\n  </select>\r\n  <select data-ng-model="rule.value" class="form-control">\r\n      <option data-ng-repeat="(key, value) in guide.choices" value="{{value}}">{{value | capitalize}}</option>\r\n  </select>\r\n</span>\r\n'),e.put("angular-elastic-builder/types/Number.html",'<span class="number-rule">\r\n  <select data-ng-model="rule.subType" class="form-control">\r\n    <!-- <optgroup label="Numeral"> -->\r\n      <option value="equals">=</option>\r\n      <option value="gt">&gt;</option>\r\n      <option value="gte">&ge;</option>\r\n      <option value="lt">&lt;</option>\r\n      <option value="lte">&le;</option>\r\n    <!-- </optgroup> -->\r\n\r\n    <!-- <optgroup label="Generic"> -->\r\n      <!-- <option value="exists">Exists</option>\r\n      <option value="notExists">! Exists</option> -->\r\n    <!-- </optgroup> -->\r\n  </select>\r\n\r\n  <!-- Range Fields -->\r\n  <input data-ng-if="inputNeeded()"\r\n    class="form-control"\r\n    data-ng-model="rule.value"\r\n    type="number"\r\n    min="{{ guide.minimum }}"\r\n    max="{{ guide.maximum }}">\r\n\r\n    <!-- <span class="help-block">{{rule.help}}</span> -->\r\n\r\n</span>\r\n'),e.put("angular-elastic-builder/types/Term.html",'<!-- <span class="elastic-term">\r\n  <select data-ng-model="rule.subType" class="form-control"> -->\r\n    <!-- Term Options -->\r\n    <!-- <optgroup label="Text">\r\n      <option value="equals">Equals</option>\r\n      <option value="notEquals">! Equals</option>\r\n    </optgroup> -->\r\n\r\n    <!-- Generic Options -->\r\n    <!-- <optgroup label="Generic">\r\n      <option value="exists">Exists</option>\r\n      <option value="notExists">! Exists</option>\r\n    </optgroup>\r\n\r\n  </select>\r\n  <input\r\n    data-ng-if="inputNeeded()"\r\n    class="form-control"\r\n    data-ng-model="rule.value"\r\n    type="text">\r\n</span> -->\r\n\r\n\r\n<span class="elastic-term">\r\n  <select data-ng-model="rule.subType" class="form-control">\r\n    <!-- Term Options -->\r\n    <!-- <optgroup label="Text"> -->\r\n      <option value="equals">{{ \'APPLICATION_EQUALS_TO\' | translate }}</option>\r\n      <option value="notEquals">{{ \'APPLICATION_NOT_EQUALS_TO\' | translate }}</option>\r\n    <!-- </optgroup> -->\r\n\r\n    <!-- Generic Options -->\r\n    <!-- <optgroup label="Generic">\r\n      <option value="exists">Exists</option>\r\n      <option value="notExists">! Exists</option>\r\n    </optgroup> -->\r\n\r\n  </select>\r\n  <input\r\n    data-ng-if="inputNeeded()"\r\n    class="form-control input-medium"\r\n    data-ng-model="rule.value"\r\n    type="text">\r\n</span>\r\n')}])}(window.angular),function(e){"use strict";e.module("angular-elastic-builder").factory("groupClassHelper",function(){return function(e){var n=[""];return n[e%n.length]}})}(window.angular),function(e){"use strict";function n(e,n){var r=e.map(t.bind(e,n));return r}function r(e,n){var r=e.map(a.bind(e,n)).filter(function(e){return!!e});return r}function t(e,n,r){r!==!1&&(r=!0);var a=Object.keys(n)[0],i={or:"group",and:"group",range:"number"},s=i[a]||"item",o=l(s);switch(a){case"or":case"and":o.rules=n[a].map(t.bind(n,e)),o.subType=a;break;case"missing":case"exists":o.field=n[a].field,o.subType={exists:"exists",missing:"notExists"}[a],delete o.value;break;case"term":case"terms":o.field=Object.keys(n[a])[0];var u=e[Object.keys(n[a])[0]];if("multi"===u.type){var c=n[a][o.field];"string"==typeof c&&(c=[c]),o.value=n[a][o.field]}else o.subType=r?"equals":"notEquals",o.value=n[a][o.field],"number"==typeof o.value&&(o.subType="boolean");break;case"range":o.field=Object.keys(n[a])[0],o.subType=Object.keys(n[a][o.field])[0],o.value=n[a][o.field][o.subType];break;case"not":o=t(e,n[a].filter,!1);break;default:o.field=Object.keys(n[a])[0]}return o}function a(e,n){var r={};if("group"===n.type)return r[n.subType]=n.rules.map(a.bind(n,e)).filter(function(e){return!!e}),r;var t=n.field,l=e[t];if(t){switch(l.type){case"term":case"multiterm":if("boolean"===l.subType&&(n.subType="boolean"),!n.subType)return;switch(n.subType){case"equals":case"boolean":if(void 0===n.value)return;r.term={},r.term[t]=n.value;break;case"notEquals":if(void 0===n.value)return;r.not={filter:{term:{}}},r.not.filter.term[t]=n.value;break;case"exists":r.exists={field:t};break;case"notExists":r.missing={field:t};break;default:throw new Error("unexpected subtype "+n.subType)}break;case"number":r.range={},r.range[t]={},r.range[t][n.subType]=n.value;break;case"date":if("exists"===n.subType)r.exists={field:t};else{if("notExists"!==n.subType)throw new Error("unexpected subtype");r.missing={field:t}}break;case"multi":r.terms={},r.terms[t]=n.value;break;default:throw new Error("unexpected type")}return r}}function l(n){var r={group:{type:"group",subType:"",rules:[]},item:{field:"",subType:"",value:""},number:{field:"",subType:"",value:null}};return e.copy(r[n])}e.module("angular-elastic-builder").factory("elasticQueryService",[function(){return{toFilters:n,toQuery:r}}])}(window.angular);
\ No newline at end of file
diff --git a/public/assets/plugins/angular-elastic-builder/dist/angular-elastic-builder_old.js b/public/assets/plugins/angular-elastic-builder/dist/angular-elastic-builder_old.js
new file mode 100644
index 0000000..8c29ba8
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/dist/angular-elastic-builder_old.js
@@ -0,0 +1,589 @@
+/**
+ * # angular-elastic-builder
+ * ## Angular Module for building an Elasticsearch Query
+ *
+ * @version v1.4.0
+ * @link https://github.com/dncrews/angular-elastic-builder.git
+ * @license MIT
+ * @author Dan Crews <[email-masked]>
+ */
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/module.js
+ *
+ * Angular Module for building an Elasticsearch query
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder', [
+    'RecursionHelper',
+  ]);
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/BuilderDirective.js
+ *
+ * Angular Directive for injecting a query builder form.
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder')
+    .directive('elasticBuilder', [
+      'elasticQueryService',
+
+      function EB(elasticQueryService) {
+
+        return {
+          scope: {
+            data: '=elasticBuilder',
+          },
+
+          templateUrl: 'angular-elastic-builder/BuilderDirective.html',
+
+          link: function(scope) {
+            var data = scope.data;
+
+            scope.filters = [];
+
+            /**
+             * Removes either Group or Rule
+             */
+            scope.removeChild = function(idx) {
+              scope.filters.splice(idx, 1);
+            };
+
+            /**
+             * Adds a Single Rule
+             */
+            scope.addRule = function() {
+              scope.filters.push({});
+            };
+
+            /**
+             * Adds a Group of Rules
+             */
+            scope.addGroup = function() {
+              scope.filters.push({
+                type: 'group',
+                subType: 'and',
+                rules: [],
+              });
+            };
+
+            /**
+             * Any time "outside forces" change the query, they should tell us so via
+             * `data.needsUpdate`
+             */
+            scope.$watch('data.needsUpdate', function(curr) {
+              if (!curr) {
+                return;
+              }
+
+              scope.filters = elasticQueryService.toFilters(data.query, scope.data.fields);
+              scope.data.needsUpdate = false;
+            });
+
+            /**
+             * Changes on the page update the Query
+             */
+            scope.$watch('filters', function(curr) {
+              if (!curr) {
+                return;
+              }
+
+              data.query = elasticQueryService.toQuery(scope.filters, scope.data.fields);
+            }, true);
+          }
+        };
+      }
+
+    ]);
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/Chooser.js
+ *
+ * This file is to help recursively, to decide whether to show a group or rule
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticBuilderChooser', [
+    'RecursionHelper',
+    'groupClassHelper',
+
+    function elasticBuilderChooser(RH, groupClassHelper) {
+
+      return {
+        scope: {
+          elasticFields: '=',
+          item: '=elasticBuilderChooser',
+          onRemove: '&',
+        },
+
+        templateUrl: 'angular-elastic-builder/ChooserDirective.html',
+
+        compile: function (element) {
+          return RH.compile(element, function(scope, el, attrs) {
+            var depth = scope.depth = (+ attrs.depth)
+              , item = scope.item;
+
+            scope.getGroupClassName = function() {
+              var level = depth;
+              if (item.type === 'group') level++;
+
+              return groupClassHelper(level);
+            };
+          });
+        }
+      };
+    }
+
+  ]);
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/Group.js
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticBuilderGroup', [
+    'RecursionHelper',
+    'groupClassHelper',
+
+    function elasticBuilderGroup(RH, groupClassHelper) {
+
+      return {
+        scope: {
+          elasticFields: '=',
+          group: '=elasticBuilderGroup',
+          onRemove: '&',
+        },
+
+        templateUrl: 'angular-elastic-builder/GroupDirective.html',
+
+        compile: function(element) {
+          return RH.compile(element, function(scope, el, attrs) {
+            var depth = scope.depth = (+ attrs.depth);
+            var group = scope.group;
+
+            scope.addRule = function() {
+              group.rules.push({});
+            };
+            scope.addGroup = function() {
+              group.rules.push({
+                type: 'group',
+                subType: 'and',
+                rules: [],
+              });
+            };
+
+            scope.removeChild = function(idx) {
+              group.rules.splice(idx, 1);
+            };
+
+            scope.getGroupClassName = function() {
+              return groupClassHelper(depth + 1);
+            };
+          });
+        }
+      };
+    }
+
+  ]);
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/Rule.js
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticBuilderRule', [
+
+    function elasticBuilderRule() {
+      return {
+        scope: {
+          elasticFields: '=',
+          rule: '=elasticBuilderRule',
+          onRemove: '&',
+        },
+
+        templateUrl: 'angular-elastic-builder/RuleDirective.html',
+
+        link: function(scope) {
+          scope.getType = function() {
+            var fields = scope.elasticFields;
+            var field = scope.rule.field;
+
+            if (!fields || !field) {
+              return;
+            }
+
+            if (fields[field].subType === 'boolean') {
+              return 'boolean';
+            }
+
+            return fields[field].type;
+          };
+        }
+      };
+    }
+
+  ]);
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/RuleTypes.js
+ *
+ * Determines which Rule type should be displayed
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticType', [
+
+    function() {
+      return {
+        scope: {
+          type: '=elasticType',
+          rule: '=',
+          guide: '=',
+        },
+
+        template: '<ng-include src="getTemplateUrl()" />',
+
+        link: function(scope) {
+          scope.getTemplateUrl = function() {
+            var type = scope.type;
+            if (! type) return;
+
+            type = type.charAt(0).toUpperCase() + type.slice(1);
+
+            return 'angular-elastic-builder/types/' + type + '.html';
+          };
+
+          // This is a weird hack to make sure these are numbers
+          scope.booleans = [ 'False', 'True' ];
+          scope.booleansOrder = [ 'True', 'False' ];
+
+          scope.inputNeeded = function() {
+            var needs = [
+              'equals',
+              'notEquals',
+
+              'gt',
+              'gte',
+              'lt',
+              'lte',
+            ];
+
+            return ~needs.indexOf(scope.rule.subType);
+          };
+        },
+      };
+    }
+
+  ]);
+
+})(window.angular);
+
+(function(angular) {"use strict"; angular.module("angular-elastic-builder").run(["$templateCache", function($templateCache) {$templateCache.put("angular-elastic-builder/BuilderDirective.html","<!-- <div class=\"elastic-builder\">\r\n  <div class=\"filter-panels\">\r\n    <div class=\"list-group form-inline\">\r\n      <div\r\n        data-ng-repeat=\"filter in filters\"\r\n        data-elastic-builder-chooser=\"filter\"\r\n        data-elastic-fields=\"data.fields\"\r\n        data-on-remove=\"removeChild($index)\"\r\n        data-depth=\"0\"></div>\r\n      <div class=\"list-group-item actions\">\r\n        <a class=\"btn btn-xs btn-primary\" title=\"Add Rule\" data-ng-click=\"addRule()\">\r\n          <i class=\"fa fa-plus\"></i>\r\n        </a>\r\n        <a class=\"btn btn-xs btn-primary\" title=\"Add Group\" data-ng-click=\"addGroup()\">\r\n          <i class=\"fa fa-list\"></i>\r\n        </a>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div> -->\r\n\r\n<!-- <div class=\"elastic-builder\">\r\n  <div class=\"filter-panels\"> -->\r\n    <div class=\"list-group form-inline list-group-item-custom\" ng-switch=\"data.type\">\r\n      <div\r\n        data-ng-repeat=\"filter in filters\"\r\n        data-elastic-builder-chooser=\"filter\"\r\n        data-elastic-fields=\"data.fields\"\r\n        data-on-remove=\"removeChild($index)\"\r\n        data-depth=\"0\">\r\n      </div>\r\n      <div class=\"list-group-item actions list-group-item-custom\" ng-switch-when=\"condition\">\r\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addGroup()\">\r\n				  <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_GROUP\' | translate }}\r\n				</a>\r\n      </div>\r\n      <div class=\"list-group-item actions list-group-item-custom\" ng-switch-when=\"action\">\r\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addRule()\">\r\n				  <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_ACTION\' | translate }}\r\n				</a>\r\n      </div>\r\n      <div class=\"list-group-item actions list-group-item-custom\" ng-switch-default>\r\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addRule()\">\r\n				  <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\r\n				</a>\r\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addGroup()\">\r\n				  <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_GROUP\' | translate }}\r\n				</a>\r\n      </div>\r\n    </div>\r\n  <!-- </div>\r\n</div> -->\r\n");
+$templateCache.put("angular-elastic-builder/ChooserDirective.html","<!-- <div\r\n  class=\"list-group-item elastic-builder-chooser\"\r\n  data-ng-class=\"getGroupClassName()\">\r\n\r\n  <div data-ng-if=\"item.type === \'group\'\"\r\n    data-elastic-builder-group=\"item\"\r\n    data-depth=\"{{ depth }}\"\r\n    data-elastic-fields=\"elasticFields\"\r\n    data-on-remove=\"onRemove()\"></div>\r\n\r\n  <div data-ng-if=\"item.type !== \'group\'\"\r\n    data-elastic-builder-rule=\"item\"\r\n    data-elastic-fields=\"elasticFields\"\r\n    data-on-remove=\"onRemove()\"></div>\r\n\r\n</div> -->\r\n\r\n\r\n<div class=\"list-group-item elastic-builder-chooser list-group-item-custom\" data-ng-class=\"getGroupClassName()\">\r\n  <div data-ng-if=\"item.type === \'group\'\"\r\n    data-elastic-builder-group=\"item\"\r\n    data-depth=\"{{ depth }}\"\r\n    data-elastic-fields=\"elasticFields\"\r\n    data-on-remove=\"onRemove()\"></div>\r\n  <div data-ng-if=\"item.type !== \'group\'\"\r\n    data-elastic-builder-rule=\"item\"\r\n    data-elastic-fields=\"elasticFields\"\r\n    data-on-remove=\"onRemove()\"></div>\r\n</div>\r\n");
+$templateCache.put("angular-elastic-builder/GroupDirective.html","<!-- <div class=\"elastic-builder-group\">\r\n  <h5>If\r\n    <select data-ng-model=\"group.subType\" class=\"form-control\">\r\n      <option value=\"and\">all</option>\r\n      <option value=\"or\">any</option>\r\n    </select>\r\n    of these conditions are met\r\n  </h5>\r\n  <div\r\n    data-ng-repeat=\"rule in group.rules\"\r\n    data-elastic-builder-chooser=\"rule\"\r\n    data-elastic-fields=\"elasticFields\"\r\n    data-depth=\"{{ +depth + 1 }}\"\r\n    data-on-remove=\"removeChild($index)\"></div>\r\n\r\n  <div class=\"list-group-item actions\" data-ng-class=\"getGroupClassName()\">\r\n    <a class=\"btn btn-xs btn-primary\" title=\"Add Sub-Rule\" data-ng-click=\"addRule()\">\r\n      <i class=\"fa fa-plus\"></i>\r\n    </a>\r\n    <a class=\"btn btn-xs btn-primary\" title=\"Add Sub-Group\" data-ng-click=\"addGroup()\">\r\n      <i class=\"fa fa-list\"></i>\r\n    </a>\r\n  </div>\r\n\r\n  <a class=\"btn btn-xs btn-danger remover\" data-ng-click=\"onRemove()\">\r\n    <i class=\"fa fa-minus\"></i>\r\n  </a>\r\n</div> -->\r\n\r\n\r\n<!-- BEGIN Portlet PORTLET-->\r\n<div class=\"portlet light\">\r\n  <div class=\"portlet-title\">\r\n    <div class=\"caption\" data-ng-class=\"{\'font-blue-hoki\': data.type === \'condition\', \'font-red-flamingo\': data.type === \'action\'}\">\r\n      <!-- <i class=\"icon-people font-green-sharp\"></i> -->\r\n      <h5><span class=\"caption-subject\">{{ \'APPLICATION_IF\' | translate }}</span>\r\n        <select data-ng-model=\"group.subType\" class=\"form-control\">\r\n          <option value=\"and\"><strong>{{ \'APPLICATION_ALL\' | translate | lowercase }}</strong></option>\r\n          <option value=\"or\"><strong>{{ \'APPLICATION_ANY\' | translate | lowercase }}</strong></option>\r\n        </select>\r\n        <span class=\"caption-subject\">{{group.subType == \'and\' ? \'MESSAGE_CODITIONS_MET_ALL\' : \'MESSAGE_CODITIONS_MET_ANY\' | translate}}</span>\r\n      </h5>\r\n    </div>\r\n  </div>\r\n  <div class=\"portlet-body\">\r\n    <div class=\"elastic-builder-group\">\r\n      <div\r\n        data-ng-repeat=\"rule in group.rules\"\r\n        data-elastic-builder-chooser=\"rule\"\r\n        data-elastic-fields=\"elasticFields\"\r\n        data-depth=\"{{ +depth + 1 }}\"\r\n        data-on-remove=\"removeChild($index)\"></div>\r\n\r\n      <div class=\"list-group-item actions list-group-item-custom\" data-ng-class=\"getGroupClassName()\">\r\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addRule()\">\r\n          <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\r\n        </a>\r\n        <a class=\"btn red btn-sm remover\" data-ng-click=\"onRemove()\">\r\n          <i class=\"icon-trash\"></i> {{ \'APPLICATION_REMOVE_GROUP\' | translate }}\r\n        </a>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n<!-- END Portlet PORTLET-->\r\n");
+$templateCache.put("angular-elastic-builder/RuleDirective.html","<!-- <div class=\"elastic-builder-rule\">\r\n  <select class=\"form-control\" data-ng-model=\"rule.field\" data-ng-options=\"key as key for (key, value) in elasticFields\"></select>\r\n\r\n  <span data-elastic-type=\"getType()\" data-rule=\"rule\" data-guide=\"elasticFields[rule.field]\"></span>\r\n\r\n  <a class=\"btn btn-xs btn-danger remover\" data-ng-click=\"onRemove()\">\r\n    <i class=\"fa fa-minus\"></i>\r\n  </a>\r\n\r\n</div> -->\r\n<!-- <div class=\"elastic-builder-rule\"> -->\r\n  <!-- <select class=\"form-control\" data-ng-model=\"rule.field\" data-ng-options=\"key as key for (key, value) in elasticFields\"></select> -->\n  {{elasticFields[rule.field].action.label | translate}}\n  <select class=\"form-control\" data-ng-model=\"rule.field\" >\n  <option ng-repeat=\"option in elasticFields\" value=\"{{option.value}}\">{{ option.label | translate }}</option>\n  </select>\n  <!-- <ui-select class=\"form-control\" data-ng-model=\"rule.field\" theme=\"bootstrap\">\r\n    <ui-select-match placeholder=\"{{\'APPLICATION_CONDITION\' | translate}}\">{{$translate.instant($select.selected.name)}}</ui-select-match>\r\n    <ui-select-choices repeat=\"value.value as key for (key, value) in elasticFields | filter: $select.search\">\r\n      {{$translate.instant(key.name)}}\r\n    </ui-select-choices>\r\n  </ui-select> -->\r\n\r\n  <span data-elastic-type=\"getType()\" data-rule=\"rule\" data-guide=\"elasticFields[rule.field]\"></span>\r\n\r\n  <!-- <a class=\"btn btn-xs btn-danger remover\" data-ng-click=\"onRemove()\">\r\n    <i class=\"fa fa-minus\"></i>\r\n  </a> -->\r\n\r\n  <a class=\"btn remover\" data-ng-click=\"onRemove()\">\r\n    <i class=\"icon-trash\"></i>\r\n  </a>\r\n\r\n<!-- </div> -->\r\n");
+$templateCache.put("angular-elastic-builder/types/Boolean.html","<span class=\"boolean-rule\">\r\n  Equals\r\n\r\n  <!-- This is a weird hack to make sure these are numbers -->\r\n  <select\r\n    data-ng-model=\"rule.value\"\r\n    class=\"form-control\"\r\n    data-ng-options=\"booleans.indexOf(choice) as choice for choice in booleansOrder\">\r\n  </select>\r\n</span>\r\n");
+$templateCache.put("angular-elastic-builder/types/Date.html","<span class=\"date-rule\">\r\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\r\n\r\n    <optgroup label=\"Generic\">\r\n      <option value=\"exists\">Exists</option>\r\n      <option value=\"notExists\">! Exists</option>\r\n    </optgroup>\r\n  </select>\r\n\r\n</span>\r\n");
+$templateCache.put("angular-elastic-builder/types/Multi.html","<!-- <span class=\"multi-rule\">\r\n  <span data-ng-repeat=\"choice in guide.choices\">\r\n    <label class=\"checkbox\">\r\n      <input type=\"checkbox\" data-ng-model=\"rule.values[choice]\">\r\n      {{ choice }}\r\n    </label>\r\n  </span>\r\n</span> -->\r\n\r\n<span class=\"multi-rule\">\r\n  {{guide.action.midterm | translate}}\r\n  <!-- Range Fields -->\r\n  <!-- <select data-ng-model=\"rule.values\" class=\"form-control\"> -->\r\n  <select data-ng-model=\"rule.value\" class=\"form-control\">\r\n    <!-- <optgroup label=\"Numeral\"> -->\r\n      <option data-ng-repeat=\"(key, value) in guide.choices\" value=\"{{value}}\">{{key}}</option>\r\n    <!-- </optgroup> -->\r\n\r\n    <!-- <optgroup label=\"Generic\">\r\n      <option value=\"exists\">Exists</option>\r\n      <option value=\"notExists\">! Exists</option>\r\n    </optgroup> -->\r\n  </select>\r\n\r\n  <!-- <input data-ng-if=\"inputNeeded()\"\r\n    class=\"form-control\"\r\n    data-ng-model=\"rule.value\"\r\n    type=\"number\"\r\n    min=\"{{ guide.minimum }}\"\r\n    max=\"{{ guide.maximum }}\"> -->\r\n</span>\r\n");
+$templateCache.put("angular-elastic-builder/types/Multiterm.html","<span class=\"elastic-multiterm\">\r\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\r\n      <option value=\"equals\">{{ \'APPLICATION_EQUALS_TO\' | translate }}</option>\r\n      <option value=\"notEquals\">{{ \'APPLICATION_NOT_EQUALS_TO\' | translate }}</option>\r\n  </select>\r\n  <select data-ng-model=\"rule.value\" class=\"form-control\">\r\n      <option data-ng-repeat=\"(key, value) in guide.choices\" value=\"{{value}}\">{{value | capitalize}}</option>\r\n  </select>\r\n</span>\r\n");
+$templateCache.put("angular-elastic-builder/types/Number.html","<span class=\"number-rule\">\r\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\r\n    <!-- <optgroup label=\"Numeral\"> -->\r\n      <option value=\"equals\">=</option>\r\n      <option value=\"gt\">&gt;</option>\r\n      <option value=\"gte\">&ge;</option>\r\n      <option value=\"lt\">&lt;</option>\r\n      <option value=\"lte\">&le;</option>\r\n    <!-- </optgroup> -->\r\n\r\n    <!-- <optgroup label=\"Generic\"> -->\r\n      <!-- <option value=\"exists\">Exists</option>\r\n      <option value=\"notExists\">! Exists</option> -->\r\n    <!-- </optgroup> -->\r\n  </select>\r\n\r\n  <!-- Range Fields -->\r\n  <input data-ng-if=\"inputNeeded()\"\r\n    class=\"form-control\"\r\n    data-ng-model=\"rule.value\"\r\n    type=\"number\"\r\n    min=\"{{ guide.minimum }}\"\r\n    max=\"{{ guide.maximum }}\">\r\n\r\n    <!-- <span class=\"help-block\">{{rule.help}}</span> -->\r\n\r\n</span>\r\n");
+$templateCache.put("angular-elastic-builder/types/Term.html","<!-- <span class=\"elastic-term\">\r\n  <select data-ng-model=\"rule.subType\" class=\"form-control\"> -->\r\n    <!-- Term Options -->\r\n    <!-- <optgroup label=\"Text\">\r\n      <option value=\"equals\">Equals</option>\r\n      <option value=\"notEquals\">! Equals</option>\r\n    </optgroup> -->\r\n\r\n    <!-- Generic Options -->\r\n    <!-- <optgroup label=\"Generic\">\r\n      <option value=\"exists\">Exists</option>\r\n      <option value=\"notExists\">! Exists</option>\r\n    </optgroup>\r\n\r\n  </select>\r\n  <input\r\n    data-ng-if=\"inputNeeded()\"\r\n    class=\"form-control\"\r\n    data-ng-model=\"rule.value\"\r\n    type=\"text\">\r\n</span> -->\r\n\r\n\r\n<span class=\"elastic-term\">\r\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\r\n    <!-- Term Options -->\r\n    <!-- <optgroup label=\"Text\"> -->\r\n      <option value=\"equals\">{{ \'APPLICATION_EQUALS_TO\' | translate }}</option>\r\n      <option value=\"notEquals\">{{ \'APPLICATION_NOT_EQUALS_TO\' | translate }}</option>\r\n    <!-- </optgroup> -->\r\n\r\n    <!-- Generic Options -->\r\n    <!-- <optgroup label=\"Generic\">\r\n      <option value=\"exists\">Exists</option>\r\n      <option value=\"notExists\">! Exists</option>\r\n    </optgroup> -->\r\n\r\n  </select>\r\n  <input\r\n    data-ng-if=\"inputNeeded()\"\r\n    class=\"form-control input-medium\"\r\n    data-ng-model=\"rule.value\"\r\n    type=\"text\">\r\n</span>\r\n");}]);})(window.angular);
+/**
+ * angular-elastic-builder
+ *
+ * /src/services/GroupClassHelper.js
+ *
+ * This keeps all of the groups colored correctly
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder')
+    .factory('groupClassHelper', function groupClassHelper() {
+
+      return function(level) {
+        var levels = [
+          '',
+          // 'list-group-item-info',
+          // 'list-group-item-success',
+          // 'list-group-item-warning',
+          // 'list-group-item-danger',
+        ];
+
+        return levels[level % levels.length];
+      };
+    });
+
+})(window.angular);
+
+/**
+ * angular-elastic-builder
+ *
+ * /src/services/QueryService.js
+ *
+ * This file is used to convert filters into queries, and vice versa
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder')
+    .factory('elasticQueryService', [
+      function() {
+
+        return {
+          toFilters: toFilters,
+          toQuery: toQuery,
+        };
+      }
+    ]);
+
+  function toFilters(query, fieldMap) {
+    var filters = query.map(parseQueryGroup.bind(query, fieldMap));
+    return filters;
+  }
+
+  function toQuery(filters, fieldMap) {
+    var query = filters.map(parseFilterGroup.bind(filters, fieldMap)).filter(function(item) {
+      return !!item;
+    });
+    return query;
+  }
+
+  function parseQueryGroup(fieldMap, group, truthy) {
+    if (truthy !== false) {
+      truthy = true;
+    }
+
+    var key = Object.keys(group)[0],
+      typeMap = {
+        or: 'group',
+        and: 'group',
+        range: 'number',
+      },
+      type = typeMap[key] || 'item',
+      obj = getFilterTemplate(type);
+
+    switch (key) {
+      case 'or':
+      case 'and':
+        obj.rules = group[key].map(parseQueryGroup.bind(group, fieldMap));
+        obj.subType = key;
+        break;
+      case 'missing':
+      case 'exists':
+        obj.field = group[key].field;
+        obj.subType = {
+          exists: 'exists',
+          missing: 'notExists',
+        }[key];
+        delete obj.value;
+        break;
+      case 'term':
+      case 'terms':
+        obj.field = Object.keys(group[key])[0];
+        var fieldData = fieldMap[Object.keys(group[key])[0]];
+
+        if (fieldData.type === 'multi') {
+          var vals = group[key][obj.field];
+          if (typeof vals === 'string') {
+            vals = [vals];
+          }
+          // MY CUSTOM MODIFICATION
+          obj.value = group[key][obj.field];
+          // obj.values = fieldData.choices.reduce(function(prev, choice) {
+          //   prev[choice] = truthy === (group[key][obj.field].indexOf(choice) > -1);
+          //   return prev;
+          // }, {});
+        } else {
+          obj.subType = truthy ? 'equals' : 'notEquals';
+          obj.value = group[key][obj.field];
+
+          if (typeof obj.value === 'number') {
+            obj.subType = 'boolean';
+          }
+        }
+        break;
+      case 'range':
+        obj.field = Object.keys(group[key])[0];
+        obj.subType = Object.keys(group[key][obj.field])[0];
+        obj.value = group[key][obj.field][obj.subType];
+        break;
+      case 'not':
+        obj = parseQueryGroup(fieldMap, group[key].filter, false);
+        break;
+      default:
+        obj.field = Object.keys(group[key])[0];
+        break;
+    }
+
+    return obj;
+  }
+
+  function parseFilterGroup(fieldMap, group) {
+    var obj = {};
+    if (group.type === 'group') {
+      obj[group.subType] = group.rules.map(parseFilterGroup.bind(group, fieldMap)).filter(function(item) {
+        return !!item;
+      });
+      return obj;
+    }
+
+    var fieldName = group.field;
+    var fieldData = fieldMap[fieldName];
+
+    if (!fieldName) {
+      return;
+    }
+
+    switch (fieldData.type) {
+      case 'term':
+      case 'multiterm':
+        if (fieldData.subType === 'boolean') {
+          group.subType = 'boolean';
+        }
+
+        if (!group.subType) {
+          return;
+        }
+        switch (group.subType) {
+          case 'equals':
+          case 'boolean':
+            if (group.value === undefined) {
+              return;
+            }
+            obj.term = {};
+            obj.term[fieldName] = group.value;
+            break;
+          case 'notEquals':
+            if (group.value === undefined) {
+              return;
+            }
+            obj.not = {
+              filter: {
+                term: {}
+              }
+            };
+            obj.not.filter.term[fieldName] = group.value;
+            break;
+          case 'exists':
+            obj.exists = {
+              field: fieldName
+            };
+            break;
+          case 'notExists':
+            obj.missing = {
+              field: fieldName
+            };
+            break;
+          default:
+            throw new Error('unexpected subtype ' + group.subType);
+        }
+        break;
+
+      case 'number':
+        obj.range = {};
+        obj.range[fieldName] = {};
+        obj.range[fieldName][group.subType] = group.value;
+        break;
+
+      case 'date':
+        if (group.subType === 'exists') {
+          obj.exists = {
+            field: fieldName
+          };
+        } else if (group.subType === 'notExists') {
+          obj.missing = {
+            field: fieldName
+          };
+        } else {
+          throw new Error('unexpected subtype');
+        }
+
+        break;
+
+      case 'multi':
+        obj.terms = {};
+        obj.terms[fieldName] = group.value;
+        // obj.terms[fieldName] = Object.keys(group.values || {}).reduce(function(prev, key) {
+        //   if (group.values[key]) prev.push(key);
+        //
+        //   return prev;
+        // }, []);
+        break;
+
+      default:
+        throw new Error('unexpected type');
+    }
+
+    return obj;
+  }
+
+  function getFilterTemplate(type) {
+    var templates = {
+      group: {
+        type: 'group',
+        subType: '',
+        rules: [],
+      },
+      item: {
+        field: '',
+        subType: '',
+        value: '',
+      },
+      number: {
+        field: '',
+        subType: '',
+        value: null,
+      }
+    };
+
+    return angular.copy(templates[type]);
+  }
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder/examples/index.html b/public/assets/plugins/angular-elastic-builder/examples/index.html
new file mode 100644
index 0000000..0d0ad23
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/examples/index.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Angular Elastic Builder</title>
+    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
+    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
+  </head>
+  <body data-ng-app="exampleApp">
+
+    <div data-ng-controller="BasicController as example">
+      <div class="container">
+        <div class="row">
+          <div class="col-md-6">
+            <h3>Filters</h3>
+            <div data-elastic-builder="example.data"></div>
+          </div>
+          <div class="col-md-6">
+            <h3>Query</h3>
+            <pre data-ng-bind="example.showQuery()"></pre>
+          </div>
+        </div>
+      </div>
+    </div>
+
+    <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
+    <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
+    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
+    <script src="angular/angular-recursion.min.js"></script>
+    <script src="js/angular-elastic-builder.min.js"></script>
+    <script src="js/exampleApp.js"></script>
+  </body>
+</html>
diff --git a/public/assets/plugins/angular-elastic-builder/examples/index.js b/public/assets/plugins/angular-elastic-builder/examples/index.js
new file mode 100644
index 0000000..d39b589
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/examples/index.js
@@ -0,0 +1,12 @@
+var path = require('path');
+var express = require('express');
+
+var app = express();
+
+app.use(express.static(__dirname));
+app.use('/js', express.static(path.join(__dirname, '../dist')));
+app.use('/angular', express.static(path.join(__dirname, '../node_modules/angular-recursion')));
+
+app.listen(process.env.PORT || 3000, function() {
+  console.log('listening on ' + ( process.env.PORT || 3000));
+});
diff --git a/public/assets/plugins/angular-elastic-builder/examples/js/exampleApp.js b/public/assets/plugins/angular-elastic-builder/examples/js/exampleApp.js
new file mode 100644
index 0000000..ee4a7e8
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/examples/js/exampleApp.js
@@ -0,0 +1,76 @@
+(function(angular) {
+
+  var app = angular.module('exampleApp', [
+    'angular-elastic-builder',
+  ]);
+
+  app.controller('BasicController', function() {
+
+    var data = this.data = {};
+
+    data.query = [
+      {
+        'and': [
+          {
+            'range': {
+              'test.number': {
+                'gte': 650
+              }
+            }
+          },
+          {
+            'range': {
+              'test.number': {
+                'lt': 850
+              }
+            }
+          }
+        ]
+      },
+      {
+        'term': {
+          'test.boolean': 0
+        }
+      },
+      {
+        'terms': {
+          'test.state.multi': [ 'AZ', 'CT' ]
+        }
+      },
+      {
+        'not': {
+          'filter': {
+            'term': {
+              'test.term': 'asdfasdf'
+            }
+          }
+        }
+      },
+      {
+        'exists': {
+          'field': 'test.term'
+        }
+      }
+    ];
+
+    data.fields = {
+      'test.number': { type: 'number', minimum: 650 },
+      'test.term': { type: 'term' },
+      'test.boolean': { type: 'term', subType: 'boolean' },
+      'test.state.multi': { type: 'multi', choices: [ 'AZ', 'CA', 'CT' ]}
+    };
+
+    data.needsUpdate = true;
+
+    this.showQuery = function() {
+      var queryToShow = {
+        size: 0,
+        filter: { and : data.query }
+      };
+
+      return JSON.stringify(queryToShow, null, 2);
+    };
+
+  });
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder/gulpfile.js b/public/assets/plugins/angular-elastic-builder/gulpfile.js
new file mode 100644
index 0000000..9194d1a
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/gulpfile.js
@@ -0,0 +1,76 @@
+/**
+ * Package Dependencies
+ */
+var concat = require('gulp-concat')
+  , del = require('del')
+  , header = require('gulp-header')
+  , gulp = require('gulp')
+  , templateCache = require('gulp-angular-templatecache')
+  , rename = require('gulp-rename')
+  , uglify = require('gulp-uglifyjs')
+  , util = require('util');
+
+/**
+ * Local Dependencies
+ */
+var pkg = require('./package.json');
+var banner = ['/**'
+  , ' * # <%= pkg.name %>'
+  , ' * ## <%= pkg.description %>'
+  , ' *'
+  , ' * @version v<%= pkg.version %>'
+  , ' * @link <%= pkg.repository.url %>'
+  , ' * @license <%= pkg.license %>'
+  , ' * @author <%= pkg.author %>'
+  , ' */'
+  , ''
+  , ''].join('\n');
+
+var filename = util.format('%s.js', pkg.name)
+  , dest = 'dist/' + filename;
+
+gulp.task('build', ['uglify']);
+gulp.task('default', ['uglify']);
+
+
+gulp.task('clean', function(done) {
+  del('./dist', done);
+});
+
+gulp.task('concat', [ 'templatecache' ], function() {
+  return gulp.src(['./src/module.js', './src/**/*.js'])
+    .pipe(concat(filename))
+    .pipe(gulp.dest('./dist'));
+});
+
+gulp.task('header', [ 'concat' ], function() {
+  return gulp.src('./dist/*.js')
+    .pipe(header(banner, { pkg: pkg }))
+    .pipe(gulp.dest('./dist'));
+});
+
+gulp.task('uglify', [ 'header' ], function() {
+  return gulp.src('./dist/*.js')
+    .pipe(uglify(dest.replace(/\.js$/, '.min.js')))
+    .pipe(gulp.dest('./'));
+});
+
+gulp.task('templatecache', [ 'clean' ], function() {
+  var TEMPLATE_HEADER = '(function(angular) {"use strict"; angular.module("<%= module %>"<%= standalone %>).run(["$templateCache", function($templateCache) {'
+    , TEMPLATE_FOOTER = '}]);})(window.angular);';
+
+  return gulp.src('src/tmpl/**/*.html')
+    .pipe(templateCache({
+      root: 'angular-elastic-builder',
+      module: 'angular-elastic-builder',
+      templateHeader: TEMPLATE_HEADER,
+      templateFooter: TEMPLATE_FOOTER,
+    }))
+    .pipe(rename('ElasticBuilderTemplates.js'))
+    .pipe(gulp.dest('src/tmpl'));
+});
+
+gulp.task('watch', [ 'templatecache', 'build' ], function() {
+  gulp.watch('src/tmpl/**/*.html', [ 'templatecache', 'build' ]);
+  gulp.watch(['src/**/**.js','!src/tmpl/ElasticBuilderTemplates.js'], [ 'build' ]);
+});
diff --git a/public/assets/plugins/angular-elastic-builder/package.json b/public/assets/plugins/angular-elastic-builder/package.json
new file mode 100644
index 0000000..987e3f9
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/package.json
@@ -0,0 +1,30 @@
+{
+  "name": "angular-elastic-builder",
+  "version": "1.4.0",
+  "description": "Angular Module for building an Elasticsearch Query",
+  "author": "Dan Crews <[email-masked]>",
+  "license": "MIT",
+  "keywords": [
+    "angular",
+    "elasticsearch"
+  ],
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/dncrews/angular-elastic-builder.git"
+  },
+  "devDependencies": {
+    "angular-recursion": "^1.0.5",
+    "del": "^1.1.1",
+    "express": "^4.12.3",
+    "gulp": "^3.8.11",
+    "gulp-angular-templatecache": "^1.6.0",
+    "gulp-concat": "^2.5.2",
+    "gulp-header": "^1.2.2",
+    "gulp-rename": "^1.2.2",
+    "gulp-uglifyjs": "^0.6.1"
+  },
+  "scripts": {
+    "example": "node examples",
+    "test": "echo \"Error: no test specified\" && exit 1"
+  }
+}
diff --git a/public/assets/plugins/angular-elastic-builder/screenshot.png b/public/assets/plugins/angular-elastic-builder/screenshot.png
new file mode 100644
index 0000000000000000000000000000000000000000..ca8d57dab48bd1559cede7fbd20275d733c65e5e
GIT binary patch
literal 46022
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/angular-elastic-builder/src/directives/BuilderDirective.js b/public/assets/plugins/angular-elastic-builder/src/directives/BuilderDirective.js
new file mode 100644
index 0000000..a23e2a6
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/directives/BuilderDirective.js
@@ -0,0 +1,84 @@
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/BuilderDirective.js
+ *
+ * Angular Directive for injecting a query builder form.
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder')
+    .directive('elasticBuilder', [
+      'elasticQueryService',
+
+      function EB(elasticQueryService) {
+
+        return {
+          scope: {
+            data: '=elasticBuilder',
+          },
+
+          templateUrl: 'angular-elastic-builder/BuilderDirective.html',
+
+          link: function(scope) {
+            var data = scope.data;
+
+            scope.filters = [];
+
+            /**
+             * Removes either Group or Rule
+             */
+            scope.removeChild = function(idx) {
+              scope.filters.splice(idx, 1);
+            };
+
+            /**
+             * Adds a Single Rule
+             */
+            scope.addRule = function() {
+              scope.filters.push({});
+            };
+
+            /**
+             * Adds a Group of Rules
+             */
+            scope.addGroup = function() {
+              scope.filters.push({
+                type: 'group',
+                subType: 'and',
+                rules: [],
+              });
+            };
+
+            /**
+             * Any time "outside forces" change the query, they should tell us so via
+             * `data.needsUpdate`
+             */
+            scope.$watch('data.needsUpdate', function(curr) {
+              if (!curr) {
+                return;
+              }
+
+              scope.filters = elasticQueryService.toFilters(data.query, scope.data.fields);
+              scope.data.needsUpdate = false;
+            });
+
+            /**
+             * Changes on the page update the Query
+             */
+            scope.$watch('filters', function(curr) {
+              if (!curr) {
+                return;
+              }
+
+              data.query = elasticQueryService.toQuery(scope.filters, scope.data.fields);
+            }, true);
+          }
+        };
+      }
+
+    ]);
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder/src/directives/Chooser.js b/public/assets/plugins/angular-elastic-builder/src/directives/Chooser.js
new file mode 100644
index 0000000..ccf917e
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/directives/Chooser.js
@@ -0,0 +1,47 @@
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/Chooser.js
+ *
+ * This file is to help recursively, to decide whether to show a group or rule
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticBuilderChooser', [
+    'RecursionHelper',
+    'groupClassHelper',
+
+    function elasticBuilderChooser(RH, groupClassHelper) {
+
+      return {
+        scope: {
+          elasticFields: '=',
+          item: '=elasticBuilderChooser',
+          onRemove: '&',
+        },
+
+        templateUrl: 'angular-elastic-builder/ChooserDirective.html',
+
+        compile: function (element) {
+          return RH.compile(element, function(scope, el, attrs) {
+            var depth = scope.depth = (+ attrs.depth)
+              , item = scope.item;
+
+            scope.getGroupClassName = function() {
+              var level = depth;
+              if (item.type === 'group') level++;
+
+              return groupClassHelper(level);
+            };
+          });
+        }
+      };
+    }
+
+  ]);
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder/src/directives/Group.js b/public/assets/plugins/angular-elastic-builder/src/directives/Group.js
new file mode 100644
index 0000000..d691913
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/directives/Group.js
@@ -0,0 +1,57 @@
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/Group.js
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticBuilderGroup', [
+    'RecursionHelper',
+    'groupClassHelper',
+
+    function elasticBuilderGroup(RH, groupClassHelper) {
+
+      return {
+        scope: {
+          elasticFields: '=',
+          group: '=elasticBuilderGroup',
+          onRemove: '&',
+        },
+
+        templateUrl: 'angular-elastic-builder/GroupDirective.html',
+
+        compile: function(element) {
+          return RH.compile(element, function(scope, el, attrs) {
+            var depth = scope.depth = (+ attrs.depth);
+            var group = scope.group;
+
+            scope.addRule = function() {
+              group.rules.push({});
+            };
+            scope.addGroup = function() {
+              group.rules.push({
+                type: 'group',
+                subType: 'and',
+                rules: [],
+              });
+            };
+
+            scope.removeChild = function(idx) {
+              group.rules.splice(idx, 1);
+            };
+
+            scope.getGroupClassName = function() {
+              return groupClassHelper(depth + 1);
+            };
+          });
+        }
+      };
+    }
+
+  ]);
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder/src/directives/Rule.js b/public/assets/plugins/angular-elastic-builder/src/directives/Rule.js
new file mode 100644
index 0000000..53268ab
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/directives/Rule.js
@@ -0,0 +1,45 @@
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/Rule.js
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticBuilderRule', [
+
+    function elasticBuilderRule() {
+      return {
+        scope: {
+          elasticFields: '=',
+          rule: '=elasticBuilderRule',
+          onRemove: '&',
+        },
+
+        templateUrl: 'angular-elastic-builder/RuleDirective.html',
+
+        link: function(scope) {
+          scope.getType = function() {
+            var fields = scope.elasticFields;
+            var field = scope.rule.field;
+
+            if (!fields || !field) {
+              return;
+            }
+
+            if (fields[field].subType === 'boolean') {
+              return 'boolean';
+            }
+
+            return fields[field].type;
+          };
+        }
+      };
+    }
+
+  ]);
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder/src/directives/RuleTypes.js b/public/assets/plugins/angular-elastic-builder/src/directives/RuleTypes.js
new file mode 100644
index 0000000..8df37c1
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/directives/RuleTypes.js
@@ -0,0 +1,59 @@
+/**
+ * angular-elastic-builder
+ *
+ * /src/directives/RuleTypes.js
+ *
+ * Determines which Rule type should be displayed
+ */
+
+(function(angular) {
+  'use strict';
+
+  var app = angular.module('angular-elastic-builder');
+
+  app.directive('elasticType', [
+
+    function() {
+      return {
+        scope: {
+          type: '=elasticType',
+          rule: '=',
+          guide: '=',
+        },
+
+        template: '<ng-include src="getTemplateUrl()" />',
+
+        link: function(scope) {
+          scope.getTemplateUrl = function() {
+            var type = scope.type;
+            if (! type) return;
+
+            type = type.charAt(0).toUpperCase() + type.slice(1);
+
+            return 'angular-elastic-builder/types/' + type + '.html';
+          };
+
+          // This is a weird hack to make sure these are numbers
+          scope.booleans = [ 'False', 'True' ];
+          scope.booleansOrder = [ 'True', 'False' ];
+
+          scope.inputNeeded = function() {
+            var needs = [
+              'equals',
+              'notEquals',
+
+              'gt',
+              'gte',
+              'lt',
+              'lte',
+            ];
+
+            return ~needs.indexOf(scope.rule.subType);
+          };
+        },
+      };
+    }
+
+  ]);
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder/src/module.js b/public/assets/plugins/angular-elastic-builder/src/module.js
new file mode 100644
index 0000000..a4f9a9c
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/module.js
@@ -0,0 +1,16 @@
+/**
+ * angular-elastic-builder
+ *
+ * /src/module.js
+ *
+ * Angular Module for building an Elasticsearch query
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder', [
+    'RecursionHelper',
+  ]);
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder/src/services/GroupClassHelper.js b/public/assets/plugins/angular-elastic-builder/src/services/GroupClassHelper.js
new file mode 100644
index 0000000..bfd45b5
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/services/GroupClassHelper.js
@@ -0,0 +1,28 @@
+/**
+ * angular-elastic-builder
+ *
+ * /src/services/GroupClassHelper.js
+ *
+ * This keeps all of the groups colored correctly
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder')
+    .factory('groupClassHelper', function groupClassHelper() {
+
+      return function(level) {
+        var levels = [
+          '',
+          // 'list-group-item-info',
+          // 'list-group-item-success',
+          // 'list-group-item-warning',
+          // 'list-group-item-danger',
+        ];
+
+        return levels[level % levels.length];
+      };
+    });
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder/src/services/QueryService.js b/public/assets/plugins/angular-elastic-builder/src/services/QueryService.js
new file mode 100644
index 0000000..6f088b1
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/services/QueryService.js
@@ -0,0 +1,226 @@
+/**
+ * angular-elastic-builder
+ *
+ * /src/services/QueryService.js
+ *
+ * This file is used to convert filters into queries, and vice versa
+ */
+
+(function(angular) {
+  'use strict';
+
+  angular.module('angular-elastic-builder')
+    .factory('elasticQueryService', [
+      function() {
+
+        return {
+          toFilters: toFilters,
+          toQuery: toQuery,
+        };
+      }
+    ]);
+
+  function toFilters(query, fieldMap) {
+    var filters = query.map(parseQueryGroup.bind(query, fieldMap));
+    return filters;
+  }
+
+  function toQuery(filters, fieldMap) {
+    var query = filters.map(parseFilterGroup.bind(filters, fieldMap)).filter(function(item) {
+      return !!item;
+    });
+    return query;
+  }
+
+  function parseQueryGroup(fieldMap, group, truthy) {
+    if (truthy !== false) {
+      truthy = true;
+    }
+
+    var key = Object.keys(group)[0],
+      typeMap = {
+        or: 'group',
+        and: 'group',
+        range: 'number',
+      },
+      type = typeMap[key] || 'item',
+      obj = getFilterTemplate(type);
+
+    switch (key) {
+      case 'or':
+      case 'and':
+        obj.rules = group[key].map(parseQueryGroup.bind(group, fieldMap));
+        obj.subType = key;
+        break;
+      case 'missing':
+      case 'exists':
+        obj.field = group[key].field;
+        obj.subType = {
+          exists: 'exists',
+          missing: 'notExists',
+        }[key];
+        delete obj.value;
+        break;
+      case 'term':
+      case 'terms':
+        obj.field = Object.keys(group[key])[0];
+        var fieldData = fieldMap[Object.keys(group[key])[0]];
+
+        if (fieldData.type === 'multi') {
+          var vals = group[key][obj.field];
+          if (typeof vals === 'string') {
+            vals = [vals];
+          }
+          // MY CUSTOM MODIFICATION
+          obj.value = group[key][obj.field];
+          // obj.values = fieldData.choices.reduce(function(prev, choice) {
+          //   prev[choice] = truthy === (group[key][obj.field].indexOf(choice) > -1);
+          //   return prev;
+          // }, {});
+        } else {
+          obj.subType = truthy ? 'equals' : 'notEquals';
+          obj.value = group[key][obj.field];
+
+          if (typeof obj.value === 'number') {
+            obj.subType = 'boolean';
+          }
+        }
+        break;
+      case 'range':
+        obj.field = Object.keys(group[key])[0];
+        obj.subType = Object.keys(group[key][obj.field])[0];
+        obj.value = group[key][obj.field][obj.subType];
+        break;
+      case 'not':
+        obj = parseQueryGroup(fieldMap, group[key].filter, false);
+        break;
+      default:
+        obj.field = Object.keys(group[key])[0];
+        break;
+    }
+
+    return obj;
+  }
+
+  function parseFilterGroup(fieldMap, group) {
+    var obj = {};
+    if (group.type === 'group') {
+      obj[group.subType] = group.rules.map(parseFilterGroup.bind(group, fieldMap)).filter(function(item) {
+        return !!item;
+      });
+      return obj;
+    }
+
+    var fieldName = group.field;
+    var fieldData = fieldMap[fieldName];
+
+    if (!fieldName) {
+      return;
+    }
+
+    switch (fieldData.type) {
+      case 'term':
+      case 'multiterm':
+        if (fieldData.subType === 'boolean') {
+          group.subType = 'boolean';
+        }
+
+        if (!group.subType) {
+          return;
+        }
+        switch (group.subType) {
+          case 'equals':
+          case 'boolean':
+            if (group.value === undefined) {
+              return;
+            }
+            obj.term = {};
+            obj.term[fieldName] = group.value;
+            break;
+          case 'notEquals':
+            if (group.value === undefined) {
+              return;
+            }
+            obj.not = {
+              filter: {
+                term: {}
+              }
+            };
+            obj.not.filter.term[fieldName] = group.value;
+            break;
+          case 'exists':
+            obj.exists = {
+              field: fieldName
+            };
+            break;
+          case 'notExists':
+            obj.missing = {
+              field: fieldName
+            };
+            break;
+          default:
+            throw new Error('unexpected subtype ' + group.subType);
+        }
+        break;
+
+      case 'number':
+        obj.range = {};
+        obj.range[fieldName] = {};
+        obj.range[fieldName][group.subType] = group.value;
+        break;
+
+      case 'date':
+        if (group.subType === 'exists') {
+          obj.exists = {
+            field: fieldName
+          };
+        } else if (group.subType === 'notExists') {
+          obj.missing = {
+            field: fieldName
+          };
+        } else {
+          throw new Error('unexpected subtype');
+        }
+
+        break;
+
+      case 'multi':
+        obj.terms = {};
+        obj.terms[fieldName] = group.value;
+        // obj.terms[fieldName] = Object.keys(group.values || {}).reduce(function(prev, key) {
+        //   if (group.values[key]) prev.push(key);
+        //
+        //   return prev;
+        // }, []);
+        break;
+
+      default:
+        throw new Error('unexpected type');
+    }
+
+    return obj;
+  }
+
+  function getFilterTemplate(type) {
+    var templates = {
+      group: {
+        type: 'group',
+        subType: '',
+        rules: [],
+      },
+      item: {
+        field: '',
+        subType: '',
+        value: '',
+      },
+      number: {
+        field: '',
+        subType: '',
+        value: null,
+      }
+    };
+
+    return angular.copy(templates[type]);
+  }
+
+})(window.angular);
diff --git a/public/assets/plugins/angular-elastic-builder/src/tmpl/BuilderDirective.html b/public/assets/plugins/angular-elastic-builder/src/tmpl/BuilderDirective.html
new file mode 100644
index 0000000..9df6d7c
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/tmpl/BuilderDirective.html
@@ -0,0 +1,52 @@
+<!-- <div class="elastic-builder">
+  <div class="filter-panels">
+    <div class="list-group form-inline">
+      <div
+        data-ng-repeat="filter in filters"
+        data-elastic-builder-chooser="filter"
+        data-elastic-fields="data.fields"
+        data-on-remove="removeChild($index)"
+        data-depth="0"></div>
+      <div class="list-group-item actions">
+        <a class="btn btn-xs btn-primary" title="Add Rule" data-ng-click="addRule()">
+          <i class="fa fa-plus"></i>
+        </a>
+        <a class="btn btn-xs btn-primary" title="Add Group" data-ng-click="addGroup()">
+          <i class="fa fa-list"></i>
+        </a>
+      </div>
+    </div>
+  </div>
+</div> -->
+
+<!-- <div class="elastic-builder">
+  <div class="filter-panels"> -->
+    <div class="list-group form-inline list-group-item-custom" ng-switch="data.type">
+      <div
+        data-ng-repeat="filter in filters"
+        data-elastic-builder-chooser="filter"
+        data-elastic-fields="data.fields"
+        data-on-remove="removeChild($index)"
+        data-depth="0">
+      </div>
+      <div class="list-group-item actions list-group-item-custom" ng-switch-when="condition">
+        <a href="#" class="btn green btn-sm" data-ng-click="addGroup()">
+				  <i class="icon-plus"></i> {{ 'APPLICATION_ADD_GROUP' | translate }}
+				</a>
+      </div>
+      <div class="list-group-item actions list-group-item-custom" ng-switch-when="action">
+        <a href="#" class="btn green btn-sm" data-ng-click="addRule()">
+				  <i class="icon-plus"></i> {{ 'APPLICATION_ADD_ACTION' | translate }}
+				</a>
+      </div>
+      <div class="list-group-item actions list-group-item-custom" ng-switch-default>
+        <a href="#" class="btn green btn-sm" data-ng-click="addRule()">
+				  <i class="icon-plus"></i> {{ 'APPLICATION_ADD_CONDITION' | translate }}
+				</a>
+        <a href="#" class="btn green btn-sm" data-ng-click="addGroup()">
+				  <i class="icon-plus"></i> {{ 'APPLICATION_ADD_GROUP' | translate }}
+				</a>
+      </div>
+    </div>
+  <!-- </div>
+</div> -->
diff --git a/public/assets/plugins/angular-elastic-builder/src/tmpl/ChooserDirective.html b/public/assets/plugins/angular-elastic-builder/src/tmpl/ChooserDirective.html
new file mode 100644
index 0000000..b28fb4a
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/tmpl/ChooserDirective.html
@@ -0,0 +1,29 @@
+<!-- <div
+  class="list-group-item elastic-builder-chooser"
+  data-ng-class="getGroupClassName()">
+
+  <div data-ng-if="item.type === 'group'"
+    data-elastic-builder-group="item"
+    data-depth="{{ depth }}"
+    data-elastic-fields="elasticFields"
+    data-on-remove="onRemove()"></div>
+
+  <div data-ng-if="item.type !== 'group'"
+    data-elastic-builder-rule="item"
+    data-elastic-fields="elasticFields"
+    data-on-remove="onRemove()"></div>
+
+</div> -->
+
+
+<div class="list-group-item elastic-builder-chooser list-group-item-custom" data-ng-class="getGroupClassName()">
+  <div data-ng-if="item.type === 'group'"
+    data-elastic-builder-group="item"
+    data-depth="{{ depth }}"
+    data-elastic-fields="elasticFields"
+    data-on-remove="onRemove()"></div>
+  <div data-ng-if="item.type !== 'group'"
+    data-elastic-builder-rule="item"
+    data-elastic-fields="elasticFields"
+    data-on-remove="onRemove()"></div>
+</div>
diff --git a/public/assets/plugins/angular-elastic-builder/src/tmpl/ElasticBuilderTemplates.js b/public/assets/plugins/angular-elastic-builder/src/tmpl/ElasticBuilderTemplates.js
new file mode 100644
index 0000000..9a212f7
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/tmpl/ElasticBuilderTemplates.js
@@ -0,0 +1,10 @@
+(function(angular) {"use strict"; angular.module("angular-elastic-builder").run(["$templateCache", function($templateCache) {$templateCache.put("angular-elastic-builder/BuilderDirective.html","<!-- <div class=\"elastic-builder\">\r\n  <div class=\"filter-panels\">\r\n    <div class=\"list-group form-inline\">\r\n      <div\r\n        data-ng-repeat=\"filter in filters\"\r\n        data-elastic-builder-chooser=\"filter\"\r\n        data-elastic-fields=\"data.fields\"\r\n        data-on-remove=\"removeChild($index)\"\r\n        data-depth=\"0\"></div>\r\n      <div class=\"list-group-item actions\">\r\n        <a class=\"btn btn-xs btn-primary\" title=\"Add Rule\" data-ng-click=\"addRule()\">\r\n          <i class=\"fa fa-plus\"></i>\r\n        </a>\r\n        <a class=\"btn btn-xs btn-primary\" title=\"Add Group\" data-ng-click=\"addGroup()\">\r\n          <i class=\"fa fa-list\"></i>\r\n        </a>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div> -->\r\n\r\n<!-- <div class=\"elastic-builder\">\r\n  <div class=\"filter-panels\"> -->\r\n    <div class=\"list-group form-inline list-group-item-custom\" ng-switch=\"data.type\">\r\n      <div\r\n        data-ng-repeat=\"filter in filters\"\r\n        data-elastic-builder-chooser=\"filter\"\r\n        data-elastic-fields=\"data.fields\"\r\n        data-on-remove=\"removeChild($index)\"\r\n        data-depth=\"0\">\r\n      </div>\r\n      <div class=\"list-group-item actions list-group-item-custom\" ng-switch-when=\"condition\">\r\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addGroup()\">\r\n				  <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_GROUP\' | translate }}\r\n				</a>\r\n      </div>\r\n      <div class=\"list-group-item actions list-group-item-custom\" ng-switch-when=\"action\">\r\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addRule()\">\r\n				  <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_ACTION\' | translate }}\r\n				</a>\r\n      </div>\r\n      <div class=\"list-group-item actions list-group-item-custom\" ng-switch-default>\r\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addRule()\">\r\n				  <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\r\n				</a>\r\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addGroup()\">\r\n				  <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_GROUP\' | translate }}\r\n				</a>\r\n      </div>\r\n    </div>\r\n  <!-- </div>\r\n</div> -->\r\n");
+$templateCache.put("angular-elastic-builder/ChooserDirective.html","<!-- <div\r\n  class=\"list-group-item elastic-builder-chooser\"\r\n  data-ng-class=\"getGroupClassName()\">\r\n\r\n  <div data-ng-if=\"item.type === \'group\'\"\r\n    data-elastic-builder-group=\"item\"\r\n    data-depth=\"{{ depth }}\"\r\n    data-elastic-fields=\"elasticFields\"\r\n    data-on-remove=\"onRemove()\"></div>\r\n\r\n  <div data-ng-if=\"item.type !== \'group\'\"\r\n    data-elastic-builder-rule=\"item\"\r\n    data-elastic-fields=\"elasticFields\"\r\n    data-on-remove=\"onRemove()\"></div>\r\n\r\n</div> -->\r\n\r\n\r\n<div class=\"list-group-item elastic-builder-chooser list-group-item-custom\" data-ng-class=\"getGroupClassName()\">\r\n  <div data-ng-if=\"item.type === \'group\'\"\r\n    data-elastic-builder-group=\"item\"\r\n    data-depth=\"{{ depth }}\"\r\n    data-elastic-fields=\"elasticFields\"\r\n    data-on-remove=\"onRemove()\"></div>\r\n  <div data-ng-if=\"item.type !== \'group\'\"\r\n    data-elastic-builder-rule=\"item\"\r\n    data-elastic-fields=\"elasticFields\"\r\n    data-on-remove=\"onRemove()\"></div>\r\n</div>\r\n");
+$templateCache.put("angular-elastic-builder/GroupDirective.html","<!-- <div class=\"elastic-builder-group\">\r\n  <h5>If\r\n    <select data-ng-model=\"group.subType\" class=\"form-control\">\r\n      <option value=\"and\">all</option>\r\n      <option value=\"or\">any</option>\r\n    </select>\r\n    of these conditions are met\r\n  </h5>\r\n  <div\r\n    data-ng-repeat=\"rule in group.rules\"\r\n    data-elastic-builder-chooser=\"rule\"\r\n    data-elastic-fields=\"elasticFields\"\r\n    data-depth=\"{{ +depth + 1 }}\"\r\n    data-on-remove=\"removeChild($index)\"></div>\r\n\r\n  <div class=\"list-group-item actions\" data-ng-class=\"getGroupClassName()\">\r\n    <a class=\"btn btn-xs btn-primary\" title=\"Add Sub-Rule\" data-ng-click=\"addRule()\">\r\n      <i class=\"fa fa-plus\"></i>\r\n    </a>\r\n    <a class=\"btn btn-xs btn-primary\" title=\"Add Sub-Group\" data-ng-click=\"addGroup()\">\r\n      <i class=\"fa fa-list\"></i>\r\n    </a>\r\n  </div>\r\n\r\n  <a class=\"btn btn-xs btn-danger remover\" data-ng-click=\"onRemove()\">\r\n    <i class=\"fa fa-minus\"></i>\r\n  </a>\r\n</div> -->\r\n\r\n\r\n<!-- BEGIN Portlet PORTLET-->\r\n<div class=\"portlet light\">\r\n  <div class=\"portlet-title\">\r\n    <div class=\"caption\" data-ng-class=\"{\'font-blue-hoki\': data.type === \'condition\', \'font-red-flamingo\': data.type === \'action\'}\">\r\n      <!-- <i class=\"icon-people font-green-sharp\"></i> -->\r\n      <h5><span class=\"caption-subject\">{{ \'APPLICATION_IF\' | translate }}</span>\r\n        <select data-ng-model=\"group.subType\" class=\"form-control\">\r\n          <option value=\"and\"><strong>{{ \'APPLICATION_ALL\' | translate | lowercase }}</strong></option>\r\n          <option value=\"or\"><strong>{{ \'APPLICATION_ANY\' | translate | lowercase }}</strong></option>\r\n        </select>\r\n        <span class=\"caption-subject\">{{group.subType == \'and\' ? \'MESSAGE_CODITIONS_MET_ALL\' : \'MESSAGE_CODITIONS_MET_ANY\' | translate}}</span>\r\n      </h5>\r\n    </div>\r\n  </div>\r\n  <div class=\"portlet-body\">\r\n    <div class=\"elastic-builder-group\">\r\n      <div\r\n        data-ng-repeat=\"rule in group.rules\"\r\n        data-elastic-builder-chooser=\"rule\"\r\n        data-elastic-fields=\"elasticFields\"\r\n        data-depth=\"{{ +depth + 1 }}\"\r\n        data-on-remove=\"removeChild($index)\"></div>\r\n\r\n      <div class=\"list-group-item actions list-group-item-custom\" data-ng-class=\"getGroupClassName()\">\r\n        <a href=\"#\" class=\"btn green btn-sm\" data-ng-click=\"addRule()\">\r\n          <i class=\"icon-plus\"></i> {{ \'APPLICATION_ADD_CONDITION\' | translate }}\r\n        </a>\r\n        <a class=\"btn red btn-sm remover\" data-ng-click=\"onRemove()\">\r\n          <i class=\"icon-trash\"></i> {{ \'APPLICATION_REMOVE_GROUP\' | translate }}\r\n        </a>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n<!-- END Portlet PORTLET-->\r\n");
+$templateCache.put("angular-elastic-builder/RuleDirective.html","<!-- <div class=\"elastic-builder-rule\">\r\n  <select class=\"form-control\" data-ng-model=\"rule.field\" data-ng-options=\"key as key for (key, value) in elasticFields\"></select>\r\n\r\n  <span data-elastic-type=\"getType()\" data-rule=\"rule\" data-guide=\"elasticFields[rule.field]\"></span>\r\n\r\n  <a class=\"btn btn-xs btn-danger remover\" data-ng-click=\"onRemove()\">\r\n    <i class=\"fa fa-minus\"></i>\r\n  </a>\r\n\r\n</div> -->\r\n<!-- <div class=\"elastic-builder-rule\"> -->\r\n  <!-- <select class=\"form-control\" data-ng-model=\"rule.field\" data-ng-options=\"key as key for (key, value) in elasticFields\"></select> -->\n  {{elasticFields[rule.field].action.label | translate}}\n  <select class=\"form-control\" data-ng-model=\"rule.field\" >\n  <option ng-repeat=\"option in elasticFields\" value=\"{{option.value}}\">{{ option.label | translate }}</option>\n  </select>\n  <!-- <ui-select class=\"form-control\" data-ng-model=\"rule.field\" theme=\"bootstrap\">\r\n    <ui-select-match placeholder=\"{{\'APPLICATION_CONDITION\' | translate}}\">{{$translate.instant($select.selected.name)}}</ui-select-match>\r\n    <ui-select-choices repeat=\"value.value as key for (key, value) in elasticFields | filter: $select.search\">\r\n      {{$translate.instant(key.name)}}\r\n    </ui-select-choices>\r\n  </ui-select> -->\r\n\r\n  <span data-elastic-type=\"getType()\" data-rule=\"rule\" data-guide=\"elasticFields[rule.field]\"></span>\r\n\r\n  <!-- <a class=\"btn btn-xs btn-danger remover\" data-ng-click=\"onRemove()\">\r\n    <i class=\"fa fa-minus\"></i>\r\n  </a> -->\r\n\r\n  <a class=\"btn remover\" data-ng-click=\"onRemove()\">\r\n    <i class=\"icon-trash\"></i>\r\n  </a>\r\n\r\n<!-- </div> -->\r\n");
+$templateCache.put("angular-elastic-builder/types/Boolean.html","<span class=\"boolean-rule\">\r\n  Equals\r\n\r\n  <!-- This is a weird hack to make sure these are numbers -->\r\n  <select\r\n    data-ng-model=\"rule.value\"\r\n    class=\"form-control\"\r\n    data-ng-options=\"booleans.indexOf(choice) as choice for choice in booleansOrder\">\r\n  </select>\r\n</span>\r\n");
+$templateCache.put("angular-elastic-builder/types/Date.html","<span class=\"date-rule\">\r\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\r\n\r\n    <optgroup label=\"Generic\">\r\n      <option value=\"exists\">Exists</option>\r\n      <option value=\"notExists\">! Exists</option>\r\n    </optgroup>\r\n  </select>\r\n\r\n</span>\r\n");
+$templateCache.put("angular-elastic-builder/types/Multi.html","<!-- <span class=\"multi-rule\">\r\n  <span data-ng-repeat=\"choice in guide.choices\">\r\n    <label class=\"checkbox\">\r\n      <input type=\"checkbox\" data-ng-model=\"rule.values[choice]\">\r\n      {{ choice }}\r\n    </label>\r\n  </span>\r\n</span> -->\r\n\r\n<span class=\"multi-rule\">\r\n  {{guide.action.midterm | translate}}\r\n  <!-- Range Fields -->\r\n  <!-- <select data-ng-model=\"rule.values\" class=\"form-control\"> -->\r\n  <select data-ng-model=\"rule.value\" class=\"form-control\">\r\n    <!-- <optgroup label=\"Numeral\"> -->\r\n      <option data-ng-repeat=\"(key, value) in guide.choices\" value=\"{{value}}\">{{key}}</option>\r\n    <!-- </optgroup> -->\r\n\r\n    <!-- <optgroup label=\"Generic\">\r\n      <option value=\"exists\">Exists</option>\r\n      <option value=\"notExists\">! Exists</option>\r\n    </optgroup> -->\r\n  </select>\r\n\r\n  <!-- <input data-ng-if=\"inputNeeded()\"\r\n    class=\"form-control\"\r\n    data-ng-model=\"rule.value\"\r\n    type=\"number\"\r\n    min=\"{{ guide.minimum }}\"\r\n    max=\"{{ guide.maximum }}\"> -->\r\n</span>\r\n");
+$templateCache.put("angular-elastic-builder/types/Multiterm.html","<span class=\"elastic-multiterm\">\r\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\r\n      <option value=\"equals\">{{ \'APPLICATION_EQUALS_TO\' | translate }}</option>\r\n      <option value=\"notEquals\">{{ \'APPLICATION_NOT_EQUALS_TO\' | translate }}</option>\r\n  </select>\r\n  <select data-ng-model=\"rule.value\" class=\"form-control\">\r\n      <option data-ng-repeat=\"(key, value) in guide.choices\" value=\"{{value}}\">{{value | capitalize}}</option>\r\n  </select>\r\n</span>\r\n");
+$templateCache.put("angular-elastic-builder/types/Number.html","<span class=\"number-rule\">\r\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\r\n    <!-- <optgroup label=\"Numeral\"> -->\r\n      <option value=\"equals\">=</option>\r\n      <option value=\"gt\">&gt;</option>\r\n      <option value=\"gte\">&ge;</option>\r\n      <option value=\"lt\">&lt;</option>\r\n      <option value=\"lte\">&le;</option>\r\n    <!-- </optgroup> -->\r\n\r\n    <!-- <optgroup label=\"Generic\"> -->\r\n      <!-- <option value=\"exists\">Exists</option>\r\n      <option value=\"notExists\">! Exists</option> -->\r\n    <!-- </optgroup> -->\r\n  </select>\r\n\r\n  <!-- Range Fields -->\r\n  <input data-ng-if=\"inputNeeded()\"\r\n    class=\"form-control\"\r\n    data-ng-model=\"rule.value\"\r\n    type=\"number\"\r\n    min=\"{{ guide.minimum }}\"\r\n    max=\"{{ guide.maximum }}\">\r\n\r\n    <!-- <span class=\"help-block\">{{rule.help}}</span> -->\r\n\r\n</span>\r\n");
+$templateCache.put("angular-elastic-builder/types/Term.html","<!-- <span class=\"elastic-term\">\r\n  <select data-ng-model=\"rule.subType\" class=\"form-control\"> -->\r\n    <!-- Term Options -->\r\n    <!-- <optgroup label=\"Text\">\r\n      <option value=\"equals\">Equals</option>\r\n      <option value=\"notEquals\">! Equals</option>\r\n    </optgroup> -->\r\n\r\n    <!-- Generic Options -->\r\n    <!-- <optgroup label=\"Generic\">\r\n      <option value=\"exists\">Exists</option>\r\n      <option value=\"notExists\">! Exists</option>\r\n    </optgroup>\r\n\r\n  </select>\r\n  <input\r\n    data-ng-if=\"inputNeeded()\"\r\n    class=\"form-control\"\r\n    data-ng-model=\"rule.value\"\r\n    type=\"text\">\r\n</span> -->\r\n\r\n\r\n<span class=\"elastic-term\">\r\n  <select data-ng-model=\"rule.subType\" class=\"form-control\">\r\n    <!-- Term Options -->\r\n    <!-- <optgroup label=\"Text\"> -->\r\n      <option value=\"equals\">{{ \'APPLICATION_EQUALS_TO\' | translate }}</option>\r\n      <option value=\"notEquals\">{{ \'APPLICATION_NOT_EQUALS_TO\' | translate }}</option>\r\n    <!-- </optgroup> -->\r\n\r\n    <!-- Generic Options -->\r\n    <!-- <optgroup label=\"Generic\">\r\n      <option value=\"exists\">Exists</option>\r\n      <option value=\"notExists\">! Exists</option>\r\n    </optgroup> -->\r\n\r\n  </select>\r\n  <input\r\n    data-ng-if=\"inputNeeded()\"\r\n    class=\"form-control input-medium\"\r\n    data-ng-model=\"rule.value\"\r\n    type=\"text\">\r\n</span>\r\n");}]);})(window.angular);
\ No newline at end of file
diff --git a/public/assets/plugins/angular-elastic-builder/src/tmpl/GroupDirective.html b/public/assets/plugins/angular-elastic-builder/src/tmpl/GroupDirective.html
new file mode 100644
index 0000000..1196759
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/tmpl/GroupDirective.html
@@ -0,0 +1,65 @@
+<!-- <div class="elastic-builder-group">
+  <h5>If
+    <select data-ng-model="group.subType" class="form-control">
+      <option value="and">all</option>
+      <option value="or">any</option>
+    </select>
+    of these conditions are met
+  </h5>
+  <div
+    data-ng-repeat="rule in group.rules"
+    data-elastic-builder-chooser="rule"
+    data-elastic-fields="elasticFields"
+    data-depth="{{ +depth + 1 }}"
+    data-on-remove="removeChild($index)"></div>
+
+  <div class="list-group-item actions" data-ng-class="getGroupClassName()">
+    <a class="btn btn-xs btn-primary" title="Add Sub-Rule" data-ng-click="addRule()">
+      <i class="fa fa-plus"></i>
+    </a>
+    <a class="btn btn-xs btn-primary" title="Add Sub-Group" data-ng-click="addGroup()">
+      <i class="fa fa-list"></i>
+    </a>
+  </div>
+
+  <a class="btn btn-xs btn-danger remover" data-ng-click="onRemove()">
+    <i class="fa fa-minus"></i>
+  </a>
+</div> -->
+
+
+<!-- BEGIN Portlet PORTLET-->
+<div class="portlet light">
+  <div class="portlet-title">
+    <div class="caption" data-ng-class="{'font-blue-hoki': data.type === 'condition', 'font-red-flamingo': data.type === 'action'}">
+      <!-- <i class="icon-people font-green-sharp"></i> -->
+      <h5><span class="caption-subject">{{ 'APPLICATION_IF' | translate }}</span>
+        <select data-ng-model="group.subType" class="form-control">
+          <option value="and"><strong>{{ 'APPLICATION_ALL' | translate | lowercase }}</strong></option>
+          <option value="or"><strong>{{ 'APPLICATION_ANY' | translate | lowercase }}</strong></option>
+        </select>
+        <span class="caption-subject">{{group.subType == 'and' ? 'MESSAGE_CODITIONS_MET_ALL' : 'MESSAGE_CODITIONS_MET_ANY' | translate}}</span>
+      </h5>
+    </div>
+  </div>
+  <div class="portlet-body">
+    <div class="elastic-builder-group">
+      <div
+        data-ng-repeat="rule in group.rules"
+        data-elastic-builder-chooser="rule"
+        data-elastic-fields="elasticFields"
+        data-depth="{{ +depth + 1 }}"
+        data-on-remove="removeChild($index)"></div>
+
+      <div class="list-group-item actions list-group-item-custom" data-ng-class="getGroupClassName()">
+        <a href="#" class="btn green btn-sm" data-ng-click="addRule()">
+          <i class="icon-plus"></i> {{ 'APPLICATION_ADD_CONDITION' | translate }}
+        </a>
+        <a class="btn red btn-sm remover" data-ng-click="onRemove()">
+          <i class="icon-trash"></i> {{ 'APPLICATION_REMOVE_GROUP' | translate }}
+        </a>
+      </div>
+    </div>
+  </div>
+</div>
+<!-- END Portlet PORTLET-->
diff --git a/public/assets/plugins/angular-elastic-builder/src/tmpl/RuleDirective.html b/public/assets/plugins/angular-elastic-builder/src/tmpl/RuleDirective.html
new file mode 100644
index 0000000..f7d69a1
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/tmpl/RuleDirective.html
@@ -0,0 +1,34 @@
+<!-- <div class="elastic-builder-rule">
+  <select class="form-control" data-ng-model="rule.field" data-ng-options="key as key for (key, value) in elasticFields"></select>
+
+  <span data-elastic-type="getType()" data-rule="rule" data-guide="elasticFields[rule.field]"></span>
+
+  <a class="btn btn-xs btn-danger remover" data-ng-click="onRemove()">
+    <i class="fa fa-minus"></i>
+  </a>
+
+</div> -->
+<!-- <div class="elastic-builder-rule"> -->
+  <!-- <select class="form-control" data-ng-model="rule.field" data-ng-options="key as key for (key, value) in elasticFields"></select> -->
+  {{elasticFields[rule.field].action.label | translate}}
+  <select class="form-control" data-ng-model="rule.field" >
+  <option ng-repeat="option in elasticFields" value="{{option.value}}">{{ option.label | translate }}</option>
+  </select>
+  <!-- <ui-select class="form-control" data-ng-model="rule.field" theme="bootstrap">
+    <ui-select-match placeholder="{{'APPLICATION_CONDITION' | translate}}">{{$translate.instant($select.selected.name)}}</ui-select-match>
+    <ui-select-choices repeat="value.value as key for (key, value) in elasticFields | filter: $select.search">
+      {{$translate.instant(key.name)}}
+    </ui-select-choices>
+  </ui-select> -->
+
+  <span data-elastic-type="getType()" data-rule="rule" data-guide="elasticFields[rule.field]"></span>
+
+  <!-- <a class="btn btn-xs btn-danger remover" data-ng-click="onRemove()">
+    <i class="fa fa-minus"></i>
+  </a> -->
+
+  <a class="btn remover" data-ng-click="onRemove()">
+    <i class="icon-trash"></i>
+  </a>
+
+<!-- </div> -->
diff --git a/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Boolean.html b/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Boolean.html
new file mode 100644
index 0000000..1ac8380
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Boolean.html
@@ -0,0 +1,10 @@
+<span class="boolean-rule">
+  Equals
+
+  <!-- This is a weird hack to make sure these are numbers -->
+  <select
+    data-ng-model="rule.value"
+    class="form-control"
+    data-ng-options="booleans.indexOf(choice) as choice for choice in booleansOrder">
+  </select>
+</span>
diff --git a/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Date.html b/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Date.html
new file mode 100644
index 0000000..377edd4
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Date.html
@@ -0,0 +1,10 @@
+<span class="date-rule">
+  <select data-ng-model="rule.subType" class="form-control">
+
+    <optgroup label="Generic">
+      <option value="exists">Exists</option>
+      <option value="notExists">! Exists</option>
+    </optgroup>
+  </select>
+
+</span>
diff --git a/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Multi.html b/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Multi.html
new file mode 100644
index 0000000..1a233b8
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Multi.html
@@ -0,0 +1,31 @@
+<!-- <span class="multi-rule">
+  <span data-ng-repeat="choice in guide.choices">
+    <label class="checkbox">
+      <input type="checkbox" data-ng-model="rule.values[choice]">
+      {{ choice }}
+    </label>
+  </span>
+</span> -->
+
+<span class="multi-rule">
+  {{guide.action.midterm | translate}}
+  <!-- Range Fields -->
+  <!-- <select data-ng-model="rule.values" class="form-control"> -->
+  <select data-ng-model="rule.value" class="form-control">
+    <!-- <optgroup label="Numeral"> -->
+      <option data-ng-repeat="(key, value) in guide.choices" value="{{value}}">{{key}}</option>
+    <!-- </optgroup> -->
+
+    <!-- <optgroup label="Generic">
+      <option value="exists">Exists</option>
+      <option value="notExists">! Exists</option>
+    </optgroup> -->
+  </select>
+
+  <!-- <input data-ng-if="inputNeeded()"
+    class="form-control"
+    data-ng-model="rule.value"
+    type="number"
+    min="{{ guide.minimum }}"
+    max="{{ guide.maximum }}"> -->
+</span>
diff --git a/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Multiterm.html b/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Multiterm.html
new file mode 100644
index 0000000..25c4849
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Multiterm.html
@@ -0,0 +1,9 @@
+<span class="elastic-multiterm">
+  <select data-ng-model="rule.subType" class="form-control">
+      <option value="equals">{{ 'APPLICATION_EQUALS_TO' | translate }}</option>
+      <option value="notEquals">{{ 'APPLICATION_NOT_EQUALS_TO' | translate }}</option>
+  </select>
+  <select data-ng-model="rule.value" class="form-control">
+      <option data-ng-repeat="(key, value) in guide.choices" value="{{value}}">{{value | capitalize}}</option>
+  </select>
+</span>
diff --git a/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Number.html b/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Number.html
new file mode 100644
index 0000000..564a1a8
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Number.html
@@ -0,0 +1,27 @@
+<span class="number-rule">
+  <select data-ng-model="rule.subType" class="form-control">
+    <!-- <optgroup label="Numeral"> -->
+      <option value="equals">=</option>
+      <option value="gt">&gt;</option>
+      <option value="gte">&ge;</option>
+      <option value="lt">&lt;</option>
+      <option value="lte">&le;</option>
+    <!-- </optgroup> -->
+
+    <!-- <optgroup label="Generic"> -->
+      <!-- <option value="exists">Exists</option>
+      <option value="notExists">! Exists</option> -->
+    <!-- </optgroup> -->
+  </select>
+
+  <!-- Range Fields -->
+  <input data-ng-if="inputNeeded()"
+    class="form-control"
+    data-ng-model="rule.value"
+    type="number"
+    min="{{ guide.minimum }}"
+    max="{{ guide.maximum }}">
+
+    <!-- <span class="help-block">{{rule.help}}</span> -->
+
+</span>
diff --git a/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Term.html b/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Term.html
new file mode 100644
index 0000000..95f2b76
--- /dev/null
+++ b/public/assets/plugins/angular-elastic-builder/src/tmpl/types/Term.html
@@ -0,0 +1,44 @@
+<!-- <span class="elastic-term">
+  <select data-ng-model="rule.subType" class="form-control"> -->
+    <!-- Term Options -->
+    <!-- <optgroup label="Text">
+      <option value="equals">Equals</option>
+      <option value="notEquals">! Equals</option>
+    </optgroup> -->
+
+    <!-- Generic Options -->
+    <!-- <optgroup label="Generic">
+      <option value="exists">Exists</option>
+      <option value="notExists">! Exists</option>
+    </optgroup>
+
+  </select>
+  <input
+    data-ng-if="inputNeeded()"
+    class="form-control"
+    data-ng-model="rule.value"
+    type="text">
+</span> -->
+
+
+<span class="elastic-term">
+  <select data-ng-model="rule.subType" class="form-control">
+    <!-- Term Options -->
+    <!-- <optgroup label="Text"> -->
+      <option value="equals">{{ 'APPLICATION_EQUALS_TO' | translate }}</option>
+      <option value="notEquals">{{ 'APPLICATION_NOT_EQUALS_TO' | translate }}</option>
+    <!-- </optgroup> -->
+
+    <!-- Generic Options -->
+    <!-- <optgroup label="Generic">
+      <option value="exists">Exists</option>
+      <option value="notExists">! Exists</option>
+    </optgroup> -->
+
+  </select>
+  <input
+    data-ng-if="inputNeeded()"
+    class="form-control input-medium"
+    data-ng-model="rule.value"
+    type="text">
+</span>
diff --git a/public/assets/plugins/angular-pdf/.bower.json b/public/assets/plugins/angular-pdf/.bower.json
new file mode 100644
index 0000000..36b9e6a
--- /dev/null
+++ b/public/assets/plugins/angular-pdf/.bower.json
@@ -0,0 +1,26 @@
+{
+  "name": "angular-pdf",
+  "version": "0.4.0",
+  "description": "An Angularjs directive <ng-pdf> to display PDF in the browser with PDFJS.",
+  "main": "./dist/angular-pdf.js",
+  "license": "MIT",
+  "homepage": "http://github.com/sayanee/angularjs-pdf",
+  "dependencies": {
+    "angular": "1.3.15",
+    "pdfjs-dist": "1.1.159"
+  },
+  "ignore": [
+    "**/.*",
+    "package.json"
+  ],
+  "_release": "0.4.0",
+  "_resolution": {
+    "type": "version",
+    "tag": "0.4.0",
+    "commit": "cf25841a9dd95af4229385ad49025863480a575c"
+  },
+  "_source": "git://github.com/sayanee/angularjs-pdf.git",
+  "_target": "~0.4.0",
+  "_originalSource": "angular-pdf",
+  "_direct": true
+}
\ No newline at end of file
diff --git a/public/assets/plugins/angular-pdf/CONTRIBUTING.md b/public/assets/plugins/angular-pdf/CONTRIBUTING.md
new file mode 100644
index 0000000..3ab1880
--- /dev/null
+++ b/public/assets/plugins/angular-pdf/CONTRIBUTING.md
@@ -0,0 +1,25 @@
+#Contribute and share
+
+1. Fork this project and install the packages
+
+	```
+	bower install
+	npm install
+	```
+- Create a new feature/patch branch
+- Code code code and amend the `example` folder especially the file `example/js/directives/angular-pdf.js`
+- Run `grunt` to create the build files in folder `dist`
+- Code code code
+- Run `grunt check` to ensure the [build](https://travis-ci.org/sayanee/angularjs-pdf) will pass
+- Write a [good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html)
+- [Pull request](https://help.github.com/articles/using-pull-requests) using the new feature/patch branch
+- Ensure the [Travis build](https://travis-ci.org/webuildsg/webuild) passes
+
+##to create a release (for maintainers only)
+
+1. commit your code (steps 1 - 7)
+- run `grunt bump` according semantic version
+- copy the `example` folder
+- change to branch `gh-pages`
+- copy the `example` folder from `master` branch
+- commit code in `gh-pages` and `git push origin gh-pages` to publish the [examples page](http://sayan.ee/angularjs-pdf/)
\ No newline at end of file
diff --git a/public/assets/plugins/angular-pdf/Gruntfile.js b/public/assets/plugins/angular-pdf/Gruntfile.js
new file mode 100644
index 0000000..137ba58
--- /dev/null
+++ b/public/assets/plugins/angular-pdf/Gruntfile.js
@@ -0,0 +1,144 @@
+module.exports = function(grunt) {
+
+  'use strict';
+
+  grunt.initConfig({
+
+    bump: {
+      options: {
+        files: [
+          'package.json',
+          'bower.json',
+          'readme.md',
+          'example/js/directives/angular-pdf.js',
+          'dist/angular-pdf.js',
+          'dist/angular-pdf.min.js'
+        ],
+        updateConfigs: [],
+        commit: true,
+        commitMessage: 'Release v%VERSION%',
+        commitFiles: [
+          'package.json',
+          'bower.json',
+          'readme.md',
+          'example/js/directives/angular-pdf.js',
+          'dist/angular-pdf.js',
+          'dist/angular-pdf.min.js'
+        ],
+        createTag: true,
+        tagName: '%VERSION%',
+        tagMessage: 'Version %VERSION%',
+        push: true,
+        pushTo: 'origin',
+        gitDescribeOptions: '--tags --always --abbrev=1'
+      }
+    },
+
+    clean: {
+      all: [
+        'dist/*.js',
+        'example/js/lib/*.js'
+      ]
+    },
+
+    copy: {
+      main: {
+        files: [
+          {
+            expand: true,
+            cwd: 'example/js/directives',
+            src: [ 'angular-pdf.js' ],
+            dest: 'dist/'
+          },
+          {
+            cwd: 'bower_components/pdfjs-dist/build',
+            src: [ 'pdf.js', 'pdf.worker.js' ],
+            dest: 'example/js/lib',
+            flatten: true,
+            expand: true
+          },
+          {
+            cwd: 'bower_components/angular',
+            src: [ 'angular.min.js', 'angular.min.js.map' ],
+            dest: 'example/js/lib',
+            flatten: true,
+            expand: true
+          }
+        ]
+      }
+    },
+
+    jscs: {
+      src: [
+        'Gruntfile.js',
+        'example/js/directives/angular-pdf.js'
+      ],
+      options: {
+        config: '.jscsrc'
+      }
+    },
+
+    jshint: {
+      all: {
+        options: {
+          jshintrc: '.jshintrc'
+        },
+        src: [
+          'Gruntfile.js',
+          'example/js/*.js'
+        ]
+      }
+    },
+
+    jsonlint: {
+      all: {
+        src: [
+          'bower.json',
+          'package.json',
+          '.jscs.json',
+          '.jshintrc'
+        ]
+      }
+    },
+
+    uglify: {
+      production: {
+        options: {
+          mangle: false,
+          compress: {},
+          beautify: false,
+          preserveComments: 'all'
+        },
+        files: {
+          'dist/angular-pdf.min.js': [ 'dist/angular-pdf.js' ]
+        }
+      }
+
+    }
+
+  });
+
+  grunt.loadNpmTasks('grunt-bump');
+  grunt.loadNpmTasks('grunt-contrib-clean');
+  grunt.loadNpmTasks('grunt-contrib-copy');
+  grunt.loadNpmTasks('grunt-contrib-jshint');
+  grunt.loadNpmTasks('grunt-jscs');
+  grunt.loadNpmTasks('grunt-jsonlint');
+  grunt.loadNpmTasks('grunt-contrib-uglify');
+
+  grunt.registerTask('default', [
+    'clean',
+    'jsonlint',
+    'jscs',
+    'jshint',
+    'copy',
+    'uglify'
+  ]);
+
+  grunt.registerTask('check', [
+    'jsonlint',
+    'jscs',
+    'jshint'
+  ]);
+
+};
diff --git a/public/assets/plugins/angular-pdf/LICENSE b/public/assets/plugins/angular-pdf/LICENSE
new file mode 100644
index 0000000..521964d
--- /dev/null
+++ b/public/assets/plugins/angular-pdf/LICENSE
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2014 Sayanee Basu, http://sayan.ee
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/public/assets/plugins/angular-pdf/bower.json b/public/assets/plugins/angular-pdf/bower.json
new file mode 100644
index 0000000..bcdd91e
--- /dev/null
+++ b/public/assets/plugins/angular-pdf/bower.json
@@ -0,0 +1,16 @@
+{
+  "name": "angular-pdf",
+  "version": "0.4.0",
+  "description": "An Angularjs directive <ng-pdf> to display PDF in the browser with PDFJS.",
+  "main": "./dist/angular-pdf.js",
+  "license": "MIT",
+  "homepage": "http://github.com/sayanee/angularjs-pdf",
+  "dependencies": {
+     "angular": "1.3.15",
+     "pdfjs-dist": "1.1.159"
+  },
+  "ignore": [
+    "**/.*",
+    "package.json"
+  ]
+}
diff --git a/public/assets/plugins/angular-pdf/dist/angular-pdf.js b/public/assets/plugins/angular-pdf/dist/angular-pdf.js
new file mode 100644
index 0000000..a4788b2
--- /dev/null
+++ b/public/assets/plugins/angular-pdf/dist/angular-pdf.js
@@ -0,0 +1,142 @@
+/*! Angular-PDF Version: 0.4.0 | (C) Sayanee Basu 2014, released under an MIT license */
+(function() {
+
+  'use strict';
+
+  angular.module('pdf', []).directive('ngPdf', ['$window', function($window) {
+    return {
+      restrict: 'E',
+      templateUrl: function(element, attr) {
+        return attr.templateUrl ? attr.templateUrl :
+          'partials/viewer.html'
+      },
+      link: function(scope, element, attrs) {
+        var url = attrs.pdfUrl,
+          pdfDoc = null,
+          pageNum = (attrs.page ? attrs.page : 1),
+          scale = attrs.scale > 0 ? attrs.scale : 1,
+          canvasArr = element.find('canvas');
+        var canvas = canvasArr[0];
+        var ctx = canvas.getContext('2d'),
+          windowEl = angular.element($window);
+
+        windowEl.on('scroll', function() {
+          scope.$apply(function() {
+            scope.scroll = windowEl[0].scrollY;
+          });
+        });
+
+        PDFJS.disableWorker = true;
+        scope.pageNum = pageNum;
+
+        scope.renderPage = function(num) {
+          pdfDoc.getPage(num).then(function(page) {
+            var viewport,
+              pageWidthScale,
+              pageHeightScale,
+              renderContext = {},
+              pageRendering;
+
+            if (attrs.scale === 'page-fit' && !scale) {
+              viewport = page.getViewport(1);
+              pageWidthScale = element[0].clientWidth /
+                viewport.width;
+              pageHeightScale = element[0].clientHeight /
+                viewport.height;
+              scale = Math.min(pageWidthScale, pageHeightScale);
+            } else {
+              viewport = page.getViewport(scale)
+            }
+
+            canvas.height = viewport.height;
+            canvas.width = viewport.width;
+
+            renderContext = {
+              canvasContext: ctx,
+              viewport: viewport
+            };
+
+            page.render(renderContext).promise.then(function() {
+              if (typeof scope.onPageRender === 'function') {
+                scope.onPageRender();
+              }
+            });
+          });
+        };
+
+        scope.goPrevious = function() {
+          if (scope.pageToDisplay <= 1) {
+            return;
+          }
+          scope.pageNum = parseInt(scope.pageNum) - 1;
+        };
+
+        scope.goNext = function() {
+          if (scope.pageToDisplay >= pdfDoc.numPages) {
+            return;
+          }
+          scope.pageNum = parseInt(scope.pageNum) + 1;
+        };
+
+        scope.zoomIn = function() {
+          scale = parseFloat(scale) + 0.2;
+          scope.renderPage(scope.pageToDisplay);
+          return scale;
+        };
+
+        scope.zoomOut = function() {
+          scale = parseFloat(scale) - 0.2;
+          scope.renderPage(scope.pageToDisplay);
+          return scale;
+        };
+
+        scope.changePage = function() {
+          scope.renderPage(scope.pageToDisplay);
+        };
+
+        scope.rotate = function() {
+          if (canvas.getAttribute('class') === 'rotate0') {
+            canvas.setAttribute('class', 'rotate90');
+          } else if (canvas.getAttribute('class') === 'rotate90') {
+            canvas.setAttribute('class', 'rotate180');
+          } else if (canvas.getAttribute('class') === 'rotate180') {
+            canvas.setAttribute('class', 'rotate270');
+          } else {
+            canvas.setAttribute('class', 'rotate0');
+          }
+        };
+
+        PDFJS.getDocument(url, null, null, scope.onProgress).then(
+          function(_pdfDoc) {
+            if (typeof scope.onLoad === 'function') {
+              scope.onLoad();
+            }
+
+            pdfDoc = _pdfDoc;
+            scope.renderPage(scope.pageToDisplay);
+
+            scope.$apply(function() {
+              scope.pageCount = _pdfDoc.numPages;
+            });
+          },
+          function(error) {
+            if (error) {
+              if (typeof scope.onError === 'function') {
+                scope.onError(error);
+              }
+            }
+          }
+        );
+
+        scope.$watch('pageNum', function(newVal) {
+          scope.pageToDisplay = parseInt(newVal);
+          if (pdfDoc !== null) {
+            scope.renderPage(scope.pageToDisplay);
+          }
+        });
+
+      }
+    };
+  }]);
+
+})();
diff --git a/public/assets/plugins/angular-pdf/dist/angular-pdf.min.js b/public/assets/plugins/angular-pdf/dist/angular-pdf.min.js
new file mode 100644
index 0000000..1a6ca76
--- /dev/null
+++ b/public/assets/plugins/angular-pdf/dist/angular-pdf.min.js
@@ -0,0 +1,2 @@
+/*! Angular-PDF Version: 0.4.0 | (C) Sayanee Basu 2014, released under an MIT license */
+!function(){"use strict";angular.module("pdf",[]).directive("ngPdf",["$window",function($window){return{restrict:"E",templateUrl:function(element,attr){return attr.templateUrl?attr.templateUrl:"partials/viewer.html"},link:function(scope,element,attrs){var url=scope.pdfUrl,pdfDoc=null,pageNum=attrs.page?attrs.page:1,scale=attrs.scale>0?attrs.scale:1,canvas=document.getElementById(attrs.canvasid?attrs.canvasid:"pdf-canvas"),ctx=canvas.getContext("2d"),windowEl=angular.element($window);windowEl.on("scroll",function(){scope.$apply(function(){scope.scroll=windowEl[0].scrollY})}),PDFJS.disableWorker=!0,scope.pageNum=pageNum,scope.renderPage=function(num){pdfDoc.getPage(num).then(function(page){var viewport,pageWidthScale,pageHeightScale,renderContext={};"page-fit"!==attrs.scale||scale?viewport=page.getViewport(scale):(viewport=page.getViewport(1),pageWidthScale=element[0].clientWidth/viewport.width,pageHeightScale=element[0].clientHeight/viewport.height,scale=Math.min(pageWidthScale,pageHeightScale)),canvas.height=viewport.height,canvas.width=viewport.width,renderContext={canvasContext:ctx,viewport:viewport},page.render(renderContext).promise.then(function(){"function"==typeof scope.onPageRender&&scope.onPageRender()})})},scope.goPrevious=function(){scope.pageToDisplay<=1||(scope.pageNum=parseInt(scope.pageNum)-1)},scope.goNext=function(){scope.pageToDisplay>=pdfDoc.numPages||(scope.pageNum=parseInt(scope.pageNum)+1)},scope.zoomIn=function(){return scale=parseFloat(scale)+.2,scope.renderPage(scope.pageToDisplay),scale},scope.zoomOut=function(){return scale=parseFloat(scale)-.2,scope.renderPage(scope.pageToDisplay),scale},scope.changePage=function(){scope.renderPage(scope.pageToDisplay)},scope.rotate=function(){"rotate0"===canvas.getAttribute("class")?canvas.setAttribute("class","rotate90"):"rotate90"===canvas.getAttribute("class")?canvas.setAttribute("class","rotate180"):"rotate180"===canvas.getAttribute("class")?canvas.setAttribute("class","rotate270"):canvas.setAttribute("class","rotate0")},PDFJS.getDocument(url,null,null,scope.onProgress).then(function(_pdfDoc){"function"==typeof scope.onLoad&&scope.onLoad(),pdfDoc=_pdfDoc,scope.renderPage(scope.pageToDisplay),scope.$apply(function(){scope.pageCount=_pdfDoc.numPages})},function(error){error&&"function"==typeof scope.onError&&scope.onError(error)}),scope.$watch("pageNum",function(newVal){scope.pageToDisplay=parseInt(newVal),null!==pdfDoc&&scope.renderPage(scope.pageToDisplay)})}}}])}();
\ No newline at end of file
diff --git a/public/assets/plugins/angular-pdf/example/index.html b/public/assets/plugins/angular-pdf/example/index.html
new file mode 100644
index 0000000..62c765a
--- /dev/null
+++ b/public/assets/plugins/angular-pdf/example/index.html
@@ -0,0 +1,29 @@
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="UTF-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+  <title>AngularJS PDFJS Directive</title>
+  <link rel="stylesheet" href="style.css">
+</head>
+<body ng-app="App">
+
+<div class="wrapper" ng-controller="DocCtrl">
+  <h1>{{pdfName}}</h1>
+  <ng-pdf template-url="partials/viewer.html" canvasid="pdf" scale="page-fit" page=13></ng-pdf>
+</div>
+
+<a href="https://github.com/sayanee/angularjs-pdf"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_gray_6d6d6d.png" alt="Fork me on GitHub"></a>
+
+<script src="js/lib/pdf.js"></script>
+
+<script src="js/lib/angular.min.js"></script>
+
+<script>
+  var app = angular.module('App', ['pdf']);
+</script>
+<script src="js/controllers/docCtrl.js"></script>
+<script src="js/directives/angular-pdf.js"></script>
+
+</body>
+</html>
diff --git a/public/assets/plugins/angular-pdf/example/js/controllers/docCtrl.js b/public/assets/plugins/angular-pdf/example/js/controllers/docCtrl.js
new file mode 100644
index 0000000..82ae2f1
--- /dev/null
+++ b/public/assets/plugins/angular-pdf/example/js/controllers/docCtrl.js
@@ -0,0 +1,25 @@
+app.controller('DocCtrl', function($scope) {
+
+  $scope.pdfName = 'Relativity: The Special and General Theory by Albert Einstein';
+  $scope.pdfUrl = 'pdf/relativity.pdf';
+  $scope.scroll = 0;
+  $scope.loading = 'loading';
+
+  $scope.getNavStyle = function(scroll) {
+    if(scroll > 100) return 'pdf-controls fixed';
+    else return 'pdf-controls';
+  }
+
+  $scope.onError = function(error) {
+    console.log(error);
+  }
+
+  $scope.onLoad = function() {
+    $scope.loading = '';
+  }
+
+  $scope.onProgress = function(progress) {
+    console.log(progress);
+  }
+
+});
diff --git a/public/assets/plugins/angular-pdf/example/js/directives/angular-pdf.js b/public/assets/plugins/angular-pdf/example/js/directives/angular-pdf.js
new file mode 100644
index 0000000..0696d08
--- /dev/null
+++ b/public/assets/plugins/angular-pdf/example/js/directives/angular-pdf.js
@@ -0,0 +1,137 @@
+/*! Angular-PDF Version: 0.4.0 | (C) Sayanee Basu 2014, released under an MIT license */
+(function() {
+
+  'use strict';
+
+  angular.module('pdf', []).directive('ngPdf', [ '$window', function($window) {
+    return {
+      restrict: 'E',
+      templateUrl: function(element, attr) {
+        return attr.templateUrl ? attr.templateUrl : 'partials/viewer.html'
+      },
+      link: function(scope, element, attrs) {
+        var url = scope.pdfUrl,
+          pdfDoc = null,
+          pageNum = (attrs.page ? attrs.page : 1),
+          scale = attrs.scale > 0 ? attrs.scale : 1,
+          canvas = (attrs.canvasid ? document.getElementById(attrs.canvasid) : document.getElementById('pdf-canvas')),
+          ctx = canvas.getContext('2d'),
+          windowEl = angular.element($window);
+
+        windowEl.on('scroll', function() {
+          scope.$apply(function() {
+            scope.scroll = windowEl[0].scrollY;
+          });
+        });
+
+        PDFJS.disableWorker = true;
+        scope.pageNum = pageNum;
+
+        scope.renderPage = function(num) {
+          pdfDoc.getPage(num).then(function(page) {
+            var viewport,
+              pageWidthScale,
+              pageHeightScale,
+              renderContext = {},
+              pageRendering;
+
+            if (attrs.scale === 'page-fit' && !scale) {
+              viewport = page.getViewport(1);
+              pageWidthScale = element[0].clientWidth / viewport.width;
+              pageHeightScale = element[0].clientHeight / viewport.height;
+              scale = Math.min(pageWidthScale, pageHeightScale);
+            } else {
+              viewport = page.getViewport(scale)
+            }
+
+            canvas.height = viewport.height;
+            canvas.width = viewport.width;
+
+            renderContext = {
+              canvasContext: ctx,
+              viewport: viewport
+            };
+
+            page.render(renderContext).promise.then(function() {
+              if (typeof scope.onPageRender === 'function' ) {
+                scope.onPageRender();
+              }
+            });
+          });
+        };
+
+        scope.goPrevious = function() {
+          if (scope.pageToDisplay <= 1) {
+            return;
+          }
+          scope.pageNum = parseInt(scope.pageNum) - 1;
+        };
+
+        scope.goNext = function() {
+          if (scope.pageToDisplay >= pdfDoc.numPages) {
+            return;
+          }
+          scope.pageNum = parseInt(scope.pageNum) + 1;
+        };
+
+        scope.zoomIn = function() {
+          scale = parseFloat(scale) + 0.2;
+          scope.renderPage(scope.pageToDisplay);
+          return scale;
+        };
+
+        scope.zoomOut = function() {
+          scale = parseFloat(scale) - 0.2;
+          scope.renderPage(scope.pageToDisplay);
+          return scale;
+        };
+
+        scope.changePage = function() {
+          scope.renderPage(scope.pageToDisplay);
+        };
+
+        scope.rotate = function() {
+          if (canvas.getAttribute('class') === 'rotate0') {
+            canvas.setAttribute('class', 'rotate90');
+          } else if (canvas.getAttribute('class') === 'rotate90') {
+            canvas.setAttribute('class', 'rotate180');
+          } else if (canvas.getAttribute('class') === 'rotate180') {
+            canvas.setAttribute('class', 'rotate270');
+          } else {
+            canvas.setAttribute('class', 'rotate0');
+          }
+        };
+
+        PDFJS.getDocument(url, null, null, scope.onProgress).then(
+          function(_pdfDoc) {
+            if (typeof scope.onLoad === 'function' ) {
+              scope.onLoad();
+            }
+
+            pdfDoc = _pdfDoc;
+            scope.renderPage(scope.pageToDisplay);
+
+            scope.$apply(function() {
+              scope.pageCount = _pdfDoc.numPages;
+            });
+          }, function(error) {
+            if (error) {
+              if (typeof scope.onError === 'function') {
+                scope.onError(error);
+              }
+            }
+          }
+        );
+
+        scope.$watch('pageNum', function(newVal) {
+          scope.pageToDisplay = parseInt(newVal);
+          if (pdfDoc !== null) {
+            scope.renderPage(scope.pageToDisplay);
+          }
+        });
+
+      }
+    };
+  } ]);
+
+})();
diff --git a/public/assets/plugins/angular-pdf/example/js/lib/angular.min.js b/public/assets/plugins/angular-pdf/example/js/lib/angular.min.js
new file mode 100644
index 0000000..0fb8002
--- /dev/null
+++ b/public/assets/plugins/angular-pdf/example/js/lib/angular.min.js
@@ -0,0 +1,251 @@
+/*
+ AngularJS v1.3.15
+ (c) 2010-2014 Google, Inc. http://angularjs.org
+ License: MIT
+*/
+(function(Q,W,t){'use strict';function R(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.3.15/"+(b?b+"/":"")+a;for(a=1;a<arguments.length;a++){c=c+(1==a?"?":"&")+"p"+(a-1)+"=";var d=encodeURIComponent,e;e=arguments[a];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;c+=d(e)}return Error(c)}}function Sa(b){if(null==b||Ta(b))return!1;var a=b.length;return b.nodeType===
+qa&&a?!0:C(b)||H(b)||0===a||"number"===typeof a&&0<a&&a-1 in b}function r(b,a,c){var d,e;if(b)if(G(b))for(d in b)"prototype"==d||"length"==d||"name"==d||b.hasOwnProperty&&!b.hasOwnProperty(d)||a.call(c,b[d],d,b);else if(H(b)||Sa(b)){var f="object"!==typeof b;d=0;for(e=b.length;d<e;d++)(f||d in b)&&a.call(c,b[d],d,b)}else if(b.forEach&&b.forEach!==r)b.forEach(a,c,b);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d],d,b);return b}function Ed(b,a,c){for(var d=Object.keys(b).sort(),e=0;e<d.length;e++)a.call(c,
+b[d[e]],d[e]);return d}function mc(b){return function(a,c){b(c,a)}}function Fd(){return++ob}function nc(b,a){a?b.$$hashKey=a:delete b.$$hashKey}function w(b){for(var a=b.$$hashKey,c=1,d=arguments.length;c<d;c++){var e=arguments[c];if(e)for(var f=Object.keys(e),g=0,h=f.length;g<h;g++){var l=f[g];b[l]=e[l]}}nc(b,a);return b}function aa(b){return parseInt(b,10)}function Ob(b,a){return w(Object.create(b),a)}function E(){}function ra(b){return b}function ea(b){return function(){return b}}function x(b){return"undefined"===
+typeof b}function y(b){return"undefined"!==typeof b}function J(b){return null!==b&&"object"===typeof b}function C(b){return"string"===typeof b}function Y(b){return"number"===typeof b}function ga(b){return"[object Date]"===Ca.call(b)}function G(b){return"function"===typeof b}function Ua(b){return"[object RegExp]"===Ca.call(b)}function Ta(b){return b&&b.window===b}function Va(b){return b&&b.$evalAsync&&b.$watch}function Wa(b){return"boolean"===typeof b}function oc(b){return!(!b||!(b.nodeName||b.prop&&
+b.attr&&b.find))}function Gd(b){var a={};b=b.split(",");var c;for(c=0;c<b.length;c++)a[b[c]]=!0;return a}function va(b){return z(b.nodeName||b[0]&&b[0].nodeName)}function Xa(b,a){var c=b.indexOf(a);0<=c&&b.splice(c,1);return a}function Da(b,a,c,d){if(Ta(b)||Va(b))throw Ja("cpws");if(a){if(b===a)throw Ja("cpi");c=c||[];d=d||[];if(J(b)){var e=c.indexOf(b);if(-1!==e)return d[e];c.push(b);d.push(a)}if(H(b))for(var f=a.length=0;f<b.length;f++)e=Da(b[f],null,c,d),J(b[f])&&(c.push(b[f]),d.push(e)),a.push(e);
+else{var g=a.$$hashKey;H(a)?a.length=0:r(a,function(b,c){delete a[c]});for(f in b)b.hasOwnProperty(f)&&(e=Da(b[f],null,c,d),J(b[f])&&(c.push(b[f]),d.push(e)),a[f]=e);nc(a,g)}}else if(a=b)H(b)?a=Da(b,[],c,d):ga(b)?a=new Date(b.getTime()):Ua(b)?(a=new RegExp(b.source,b.toString().match(/[^\/]*$/)[0]),a.lastIndex=b.lastIndex):J(b)&&(e=Object.create(Object.getPrototypeOf(b)),a=Da(b,e,c,d));return a}function sa(b,a){if(H(b)){a=a||[];for(var c=0,d=b.length;c<d;c++)a[c]=b[c]}else if(J(b))for(c in a=a||{},
+b)if("$"!==c.charAt(0)||"$"!==c.charAt(1))a[c]=b[c];return a||b}function ha(b,a){if(b===a)return!0;if(null===b||null===a)return!1;if(b!==b&&a!==a)return!0;var c=typeof b,d;if(c==typeof a&&"object"==c)if(H(b)){if(!H(a))return!1;if((c=b.length)==a.length){for(d=0;d<c;d++)if(!ha(b[d],a[d]))return!1;return!0}}else{if(ga(b))return ga(a)?ha(b.getTime(),a.getTime()):!1;if(Ua(b))return Ua(a)?b.toString()==a.toString():!1;if(Va(b)||Va(a)||Ta(b)||Ta(a)||H(a)||ga(a)||Ua(a))return!1;c={};for(d in b)if("$"!==
+d.charAt(0)&&!G(b[d])){if(!ha(b[d],a[d]))return!1;c[d]=!0}for(d in a)if(!c.hasOwnProperty(d)&&"$"!==d.charAt(0)&&a[d]!==t&&!G(a[d]))return!1;return!0}return!1}function Ya(b,a,c){return b.concat(Za.call(a,c))}function pc(b,a){var c=2<arguments.length?Za.call(arguments,2):[];return!G(a)||a instanceof RegExp?a:c.length?function(){return arguments.length?a.apply(b,Ya(c,arguments,0)):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}}function Hd(b,a){var c=a;"string"===typeof b&&
+"$"===b.charAt(0)&&"$"===b.charAt(1)?c=t:Ta(a)?c="$WINDOW":a&&W===a?c="$DOCUMENT":Va(a)&&(c="$SCOPE");return c}function $a(b,a){if("undefined"===typeof b)return t;Y(a)||(a=a?2:null);return JSON.stringify(b,Hd,a)}function qc(b){return C(b)?JSON.parse(b):b}function wa(b){b=A(b).clone();try{b.empty()}catch(a){}var c=A("<div>").append(b).html();try{return b[0].nodeType===pb?z(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+z(b)})}catch(d){return z(c)}}function rc(b){try{return decodeURIComponent(b)}catch(a){}}
+function sc(b){var a={},c,d;r((b||"").split("&"),function(b){b&&(c=b.replace(/\+/g,"%20").split("="),d=rc(c[0]),y(d)&&(b=y(c[1])?rc(c[1]):!0,tc.call(a,d)?H(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Pb(b){var a=[];r(b,function(b,d){H(b)?r(b,function(b){a.push(Ea(d,!0)+(!0===b?"":"="+Ea(b,!0)))}):a.push(Ea(d,!0)+(!0===b?"":"="+Ea(b,!0)))});return a.length?a.join("&"):""}function qb(b){return Ea(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Ea(b,a){return encodeURIComponent(b).replace(/%40/gi,
+"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,a?"%20":"+")}function Id(b,a){var c,d,e=rb.length;b=A(b);for(d=0;d<e;++d)if(c=rb[d]+a,C(c=b.attr(c)))return c;return null}function Jd(b,a){var c,d,e={};r(rb,function(a){a+="app";!c&&b.hasAttribute&&b.hasAttribute(a)&&(c=b,d=b.getAttribute(a))});r(rb,function(a){a+="app";var e;!c&&(e=b.querySelector("["+a.replace(":","\\:")+"]"))&&(c=e,d=e.getAttribute(a))});c&&(e.strictDi=null!==Id(c,"strict-di"),
+a(c,d?[d]:[],e))}function uc(b,a,c){J(c)||(c={});c=w({strictDi:!1},c);var d=function(){b=A(b);if(b.injector()){var d=b[0]===W?"document":wa(b);throw Ja("btstrpd",d.replace(/</,"&lt;").replace(/>/,"&gt;"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng");d=ab(a,c.strictDi);d.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",
+d);c(b)(a)})}]);return d},e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;Q&&e.test(Q.name)&&(c.debugInfoEnabled=!0,Q.name=Q.name.replace(e,""));if(Q&&!f.test(Q.name))return d();Q.name=Q.name.replace(f,"");ca.resumeBootstrap=function(b){r(b,function(b){a.push(b)});return d()};G(ca.resumeDeferredBootstrap)&&ca.resumeDeferredBootstrap()}function Kd(){Q.name="NG_ENABLE_DEBUG_INFO!"+Q.name;Q.location.reload()}function Ld(b){b=ca.element(b).injector();if(!b)throw Ja("test");return b.get("$$testability")}
+function vc(b,a){a=a||"_";return b.replace(Md,function(b,d){return(d?a:"")+b.toLowerCase()})}function Nd(){var b;wc||((ta=Q.jQuery)&&ta.fn.on?(A=ta,w(ta.fn,{scope:Ka.scope,isolateScope:Ka.isolateScope,controller:Ka.controller,injector:Ka.injector,inheritedData:Ka.inheritedData}),b=ta.cleanData,ta.cleanData=function(a){var c;if(Qb)Qb=!1;else for(var d=0,e;null!=(e=a[d]);d++)(c=ta._data(e,"events"))&&c.$destroy&&ta(e).triggerHandler("$destroy");b(a)}):A=T,ca.element=A,wc=!0)}function Rb(b,a,c){if(!b)throw Ja("areq",
+a||"?",c||"required");return b}function sb(b,a,c){c&&H(b)&&(b=b[b.length-1]);Rb(G(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function La(b,a){if("hasOwnProperty"===b)throw Ja("badname",a);}function xc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g<f;g++)d=a[g],b&&(b=(e=b)[d]);return!c&&G(b)?pc(e,b):b}function tb(b){var a=b[0];b=b[b.length-1];var c=[a];do{a=a.nextSibling;if(!a)break;c.push(a)}while(a!==b);return A(c)}function ia(){return Object.create(null)}
+function Od(b){function a(a,b,c){return a[b]||(a[b]=c())}var c=R("$injector"),d=R("ng");b=a(b,"angular",Object);b.$$minErr=b.$$minErr||R;return a(b,"module",function(){var b={};return function(f,g,h){if("hasOwnProperty"===f)throw d("badname","module");g&&b.hasOwnProperty(f)&&(b[f]=null);return a(b,f,function(){function a(c,d,e,f){f||(f=b);return function(){f[e||"push"]([c,d,arguments]);return u}}if(!g)throw c("nomod",f);var b=[],d=[],e=[],q=a("$injector","invoke","push",d),u={_invokeQueue:b,_configBlocks:d,
+_runBlocks:e,requires:g,name:f,provider:a("$provide","provider"),factory:a("$provide","factory"),service:a("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),animation:a("$animateProvider","register"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:q,run:function(a){e.push(a);return this}};h&&q(h);return u})}})}function Pd(b){w(b,{bootstrap:uc,copy:Da,extend:w,equals:ha,
+element:A,forEach:r,injector:ab,noop:E,bind:pc,toJson:$a,fromJson:qc,identity:ra,isUndefined:x,isDefined:y,isString:C,isFunction:G,isObject:J,isNumber:Y,isElement:oc,isArray:H,version:Qd,isDate:ga,lowercase:z,uppercase:ub,callbacks:{counter:0},getTestability:Ld,$$minErr:R,$$csp:bb,reloadWithDebugInfo:Kd});cb=Od(Q);try{cb("ngLocale")}catch(a){cb("ngLocale",[]).provider("$locale",Rd)}cb("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:Sd});a.provider("$compile",yc).directive({a:Td,
+input:zc,textarea:zc,form:Ud,script:Vd,select:Wd,style:Xd,option:Yd,ngBind:Zd,ngBindHtml:$d,ngBindTemplate:ae,ngClass:be,ngClassEven:ce,ngClassOdd:de,ngCloak:ee,ngController:fe,ngForm:ge,ngHide:he,ngIf:ie,ngInclude:je,ngInit:ke,ngNonBindable:le,ngPluralize:me,ngRepeat:ne,ngShow:oe,ngStyle:pe,ngSwitch:qe,ngSwitchWhen:re,ngSwitchDefault:se,ngOptions:te,ngTransclude:ue,ngModel:ve,ngList:we,ngChange:xe,pattern:Ac,ngPattern:Ac,required:Bc,ngRequired:Bc,minlength:Cc,ngMinlength:Cc,maxlength:Dc,ngMaxlength:Dc,
+ngValue:ye,ngModelOptions:ze}).directive({ngInclude:Ae}).directive(vb).directive(Ec);a.provider({$anchorScroll:Be,$animate:Ce,$browser:De,$cacheFactory:Ee,$controller:Fe,$document:Ge,$exceptionHandler:He,$filter:Fc,$interpolate:Ie,$interval:Je,$http:Ke,$httpBackend:Le,$location:Me,$log:Ne,$parse:Oe,$rootScope:Pe,$q:Qe,$$q:Re,$sce:Se,$sceDelegate:Te,$sniffer:Ue,$templateCache:Ve,$templateRequest:We,$$testability:Xe,$timeout:Ye,$window:Ze,$$rAF:$e,$$asyncCallback:af,$$jqLite:bf})}])}function db(b){return b.replace(cf,
+function(a,b,d,e){return e?d.toUpperCase():d}).replace(df,"Moz$1")}function Gc(b){b=b.nodeType;return b===qa||!b||9===b}function Hc(b,a){var c,d,e=a.createDocumentFragment(),f=[];if(Sb.test(b)){c=c||e.appendChild(a.createElement("div"));d=(ef.exec(b)||["",""])[1].toLowerCase();d=ja[d]||ja._default;c.innerHTML=d[1]+b.replace(ff,"<$1></$2>")+d[2];for(d=d[0];d--;)c=c.lastChild;f=Ya(f,c.childNodes);c=e.firstChild;c.textContent=""}else f.push(a.createTextNode(b));e.textContent="";e.innerHTML="";r(f,function(a){e.appendChild(a)});
+return e}function T(b){if(b instanceof T)return b;var a;C(b)&&(b=N(b),a=!0);if(!(this instanceof T)){if(a&&"<"!=b.charAt(0))throw Tb("nosel");return new T(b)}if(a){a=W;var c;b=(c=gf.exec(b))?[a.createElement(c[1])]:(c=Hc(b,a))?c.childNodes:[]}Ic(this,b)}function Ub(b){return b.cloneNode(!0)}function wb(b,a){a||xb(b);if(b.querySelectorAll)for(var c=b.querySelectorAll("*"),d=0,e=c.length;d<e;d++)xb(c[d])}function Jc(b,a,c,d){if(y(d))throw Tb("offargs");var e=(d=yb(b))&&d.events,f=d&&d.handle;if(f)if(a)r(a.split(" "),
+function(a){if(y(c)){var d=e[a];Xa(d||[],c);if(d&&0<d.length)return}b.removeEventListener(a,f,!1);delete e[a]});else for(a in e)"$destroy"!==a&&b.removeEventListener(a,f,!1),delete e[a]}function xb(b,a){var c=b.ng339,d=c&&zb[c];d&&(a?delete d.data[a]:(d.handle&&(d.events.$destroy&&d.handle({},"$destroy"),Jc(b)),delete zb[c],b.ng339=t))}function yb(b,a){var c=b.ng339,c=c&&zb[c];a&&!c&&(b.ng339=c=++hf,c=zb[c]={events:{},data:{},handle:t});return c}function Vb(b,a,c){if(Gc(b)){var d=y(c),e=!d&&a&&!J(a),
+f=!a;b=(b=yb(b,!e))&&b.data;if(d)b[a]=c;else{if(f)return b;if(e)return b&&b[a];w(b,a)}}}function Ab(b,a){return b.getAttribute?-1<(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+a+" "):!1}function Bb(b,a){a&&b.setAttribute&&r(a.split(" "),function(a){b.setAttribute("class",N((" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+N(a)+" "," ")))})}function Cb(b,a){if(a&&b.setAttribute){var c=(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");
+r(a.split(" "),function(a){a=N(a);-1===c.indexOf(" "+a+" ")&&(c+=a+" ")});b.setAttribute("class",N(c))}}function Ic(b,a){if(a)if(a.nodeType)b[b.length++]=a;else{var c=a.length;if("number"===typeof c&&a.window!==a){if(c)for(var d=0;d<c;d++)b[b.length++]=a[d]}else b[b.length++]=a}}function Kc(b,a){return Db(b,"$"+(a||"ngController")+"Controller")}function Db(b,a,c){9==b.nodeType&&(b=b.documentElement);for(a=H(a)?a:[a];b;){for(var d=0,e=a.length;d<e;d++)if((c=A.data(b,a[d]))!==t)return c;b=b.parentNode||
+11===b.nodeType&&b.host}}function Lc(b){for(wb(b,!0);b.firstChild;)b.removeChild(b.firstChild)}function Mc(b,a){a||wb(b);var c=b.parentNode;c&&c.removeChild(b)}function jf(b,a){a=a||Q;if("complete"===a.document.readyState)a.setTimeout(b);else A(a).on("load",b)}function Nc(b,a){var c=Eb[a.toLowerCase()];return c&&Oc[va(b)]&&c}function kf(b,a){var c=b.nodeName;return("INPUT"===c||"TEXTAREA"===c)&&Pc[a]}function lf(b,a){var c=function(c,e){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=
+a[e||c.type],g=f?f.length:0;if(g){if(x(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};1<g&&(f=sa(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||f[l].call(b,c)}};c.elem=b;return c}function bf(){this.$get=function(){return w(T,{hasClass:function(b,a){b.attr&&(b=b[0]);
+return Ab(b,a)},addClass:function(b,a){b.attr&&(b=b[0]);return Cb(b,a)},removeClass:function(b,a){b.attr&&(b=b[0]);return Bb(b,a)}})}}function Ma(b,a){var c=b&&b.$$hashKey;if(c)return"function"===typeof c&&(c=b.$$hashKey()),c;c=typeof b;return c="function"==c||"object"==c&&null!==b?b.$$hashKey=c+":"+(a||Fd)():c+":"+b}function eb(b,a){if(a){var c=0;this.nextUid=function(){return++c}}r(b,this.put,this)}function mf(b){return(b=b.toString().replace(Qc,"").match(Rc))?"function("+(b[1]||"").replace(/[\s\r\n]+/,
+" ")+")":"fn"}function ab(b,a){function c(a){return function(b,c){if(J(b))r(b,mc(a));else return a(b,c)}}function d(a,b){La(a,"service");if(G(b)||H(b))b=q.instantiate(b);if(!b.$get)throw Fa("pget",a);return p[a+"Provider"]=b}function e(a,b){return function(){var c=s.invoke(b,this);if(x(c))throw Fa("undef",a);return c}}function f(a,b,c){return d(a,{$get:!1!==c?e(a,b):b})}function g(a){var b=[],c;r(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=q.get(e[0]);f[e[1]].apply(f,
+e[2])}}if(!n.get(a)){n.put(a,!0);try{C(a)?(c=cb(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):G(a)?b.push(q.invoke(a)):H(a)?b.push(q.invoke(a)):sb(a,"module")}catch(e){throw H(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Fa("modulerr",a,e.stack||e.message||e);}}});return b}function h(b,c){function d(a,e){if(b.hasOwnProperty(a)){if(b[a]===l)throw Fa("cdep",a+" <- "+k.join(" <- "));return b[a]}try{return k.unshift(a),
+b[a]=l,b[a]=c(a,e)}catch(f){throw b[a]===l&&delete b[a],f;}finally{k.shift()}}function e(b,c,f,g){"string"===typeof f&&(g=f,f=null);var k=[],h=ab.$$annotate(b,a,g),l,q,p;q=0;for(l=h.length;q<l;q++){p=h[q];if("string"!==typeof p)throw Fa("itkn",p);k.push(f&&f.hasOwnProperty(p)?f[p]:d(p,g))}H(b)&&(b=b[l]);return b.apply(c,k)}return{invoke:e,instantiate:function(a,b,c){var d=Object.create((H(a)?a[a.length-1]:a).prototype||null);a=e(a,d,b,c);return J(a)||G(a)?a:d},get:d,annotate:ab.$$annotate,has:function(a){return p.hasOwnProperty(a+
+"Provider")||b.hasOwnProperty(a)}}}a=!0===a;var l={},k=[],n=new eb([],!0),p={$provide:{provider:c(d),factory:c(f),service:c(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}),value:c(function(a,b){return f(a,ea(b),!1)}),constant:c(function(a,b){La(a,"constant");p[a]=b;u[a]=b}),decorator:function(a,b){var c=q.get(a+"Provider"),d=c.$get;c.$get=function(){var a=s.invoke(d,c);return s.invoke(b,null,{$delegate:a})}}}},q=p.$injector=h(p,function(a,b){ca.isString(b)&&k.push(b);
+throw Fa("unpr",k.join(" <- "));}),u={},s=u.$injector=h(u,function(a,b){var c=q.get(a+"Provider",b);return s.invoke(c.$get,c,t,a)});r(g(b),function(a){s.invoke(a||E)});return s}function Be(){var b=!0;this.disableAutoScrolling=function(){b=!1};this.$get=["$window","$location","$rootScope",function(a,c,d){function e(a){var b=null;Array.prototype.some.call(a,function(a){if("a"===va(a))return b=a,!0});return b}function f(b){if(b){b.scrollIntoView();var c;c=g.yOffset;G(c)?c=c():oc(c)?(c=c[0],c="fixed"!==
+a.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):Y(c)||(c=0);c&&(b=b.getBoundingClientRect().top,a.scrollBy(0,b-c))}else a.scrollTo(0,0)}function g(){var a=c.hash(),b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))?f(b):"top"===a&&f(null):f(null)}var h=a.document;b&&d.$watch(function(){return c.hash()},function(a,b){a===b&&""===a||jf(function(){d.$evalAsync(g)})});return g}]}function af(){this.$get=["$$rAF","$timeout",function(b,a){return b.supported?function(a){return b(a)}:
+function(b){return a(b,0,!1)}}]}function nf(b,a,c,d){function e(a){try{a.apply(null,Za.call(arguments,1))}finally{if(m--,0===m)for(;F.length;)try{F.pop()()}catch(b){c.error(b)}}}function f(a,b){(function da(){r(Z,function(a){a()});L=b(da,a)})()}function g(){h();l()}function h(){a:{try{B=u.state;break a}catch(a){}B=void 0}B=x(B)?null:B;ha(B,O)&&(B=O);O=B}function l(){if(D!==n.url()||I!==B)D=n.url(),I=B,r(X,function(a){a(n.url(),B)})}function k(a){try{return decodeURIComponent(a)}catch(b){return a}}
+var n=this,p=a[0],q=b.location,u=b.history,s=b.setTimeout,M=b.clearTimeout,v={};n.isMock=!1;var m=0,F=[];n.$$completeOutstandingRequest=e;n.$$incOutstandingRequestCount=function(){m++};n.notifyWhenNoOutstandingRequests=function(a){r(Z,function(a){a()});0===m?a():F.push(a)};var Z=[],L;n.addPollFn=function(a){x(L)&&f(100,s);Z.push(a);return a};var B,I,D=q.href,S=a.find("base"),P=null;h();I=B;n.url=function(a,c,e){x(e)&&(e=null);q!==b.location&&(q=b.location);u!==b.history&&(u=b.history);if(a){var f=
+I===e;if(D===a&&(!d.history||f))return n;var g=D&&Ga(D)===Ga(a);D=a;I=e;!d.history||g&&f?(g||(P=a),c?q.replace(a):g?(c=q,e=a.indexOf("#"),a=-1===e?"":a.substr(e+1),c.hash=a):q.href=a):(u[c?"replaceState":"pushState"](e,"",a),h(),I=B);return n}return P||q.href.replace(/%27/g,"'")};n.state=function(){return B};var X=[],ba=!1,O=null;n.onUrlChange=function(a){if(!ba){if(d.history)A(b).on("popstate",g);A(b).on("hashchange",g);ba=!0}X.push(a);return a};n.$$checkUrlChange=l;n.baseHref=function(){var a=S.attr("href");
+return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};var fa={},y="",ka=n.baseHref();n.cookies=function(a,b){var d,e,f,g;if(a)b===t?p.cookie=encodeURIComponent(a)+"=;path="+ka+";expires=Thu, 01 Jan 1970 00:00:00 GMT":C(b)&&(d=(p.cookie=encodeURIComponent(a)+"="+encodeURIComponent(b)+";path="+ka).length+1,4096<d&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+d+" > 4096 bytes)!"));else{if(p.cookie!==y)for(y=p.cookie,d=y.split("; "),fa={},f=0;f<d.length;f++)e=d[f],g=
+e.indexOf("="),0<g&&(a=k(e.substring(0,g)),fa[a]===t&&(fa[a]=k(e.substring(g+1))));return fa}};n.defer=function(a,b){var c;m++;c=s(function(){delete v[c];e(a)},b||0);v[c]=!0;return c};n.defer.cancel=function(a){return v[a]?(delete v[a],M(a),e(E),!0):!1}}function De(){this.$get=["$window","$log","$sniffer","$document",function(b,a,c,d){return new nf(b,d,a,c)}]}function Ee(){this.$get=function(){function b(b,d){function e(a){a!=p&&(q?q==a&&(q=a.n):q=a,f(a.n,a.p),f(a,p),p=a,p.n=null)}function f(a,b){a!=
+b&&(a&&(a.p=b),b&&(b.n=a))}if(b in a)throw R("$cacheFactory")("iid",b);var g=0,h=w({},d,{id:b}),l={},k=d&&d.capacity||Number.MAX_VALUE,n={},p=null,q=null;return a[b]={put:function(a,b){if(k<Number.MAX_VALUE){var c=n[a]||(n[a]={key:a});e(c)}if(!x(b))return a in l||g++,l[a]=b,g>k&&this.remove(q.key),b},get:function(a){if(k<Number.MAX_VALUE){var b=n[a];if(!b)return;e(b)}return l[a]},remove:function(a){if(k<Number.MAX_VALUE){var b=n[a];if(!b)return;b==p&&(p=b.p);b==q&&(q=b.n);f(b.n,b.p);delete n[a]}delete l[a];
+g--},removeAll:function(){l={};g=0;n={};p=q=null},destroy:function(){n=h=l=null;delete a[b]},info:function(){return w({},h,{size:g})}}}var a={};b.info=function(){var b={};r(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]};return b}}function Ve(){this.$get=["$cacheFactory",function(b){return b("templates")}]}function yc(b,a){function c(a,b){var c=/^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/,d={};r(a,function(a,e){var f=a.match(c);if(!f)throw la("iscp",b,e,a);d[e]={mode:f[1][0],collection:"*"===
+f[2],optional:"?"===f[3],attrName:f[4]||e}});return d}var d={},e=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,f=/(([\w\-]+)(?:\:([^;]+))?;?)/,g=Gd("ngSrc,ngSrcset,src,srcset"),h=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,l=/^(on[a-z]+|formaction)$/;this.directive=function p(a,e){La(a,"directive");C(a)?(Rb(e,"directiveFactory"),d.hasOwnProperty(a)||(d[a]=[],b.factory(a+"Directive",["$injector","$exceptionHandler",function(b,e){var f=[];r(d[a],function(d,g){try{var h=b.invoke(d);G(h)?h={compile:ea(h)}:!h.compile&&h.link&&
+(h.compile=ea(h.link));h.priority=h.priority||0;h.index=g;h.name=h.name||a;h.require=h.require||h.controller&&h.name;h.restrict=h.restrict||"EA";J(h.scope)&&(h.$$isolateBindings=c(h.scope,h.name));f.push(h)}catch(k){e(k)}});return f}])),d[a].push(e)):r(a,mc(p));return this};this.aHrefSanitizationWhitelist=function(b){return y(b)?(a.aHrefSanitizationWhitelist(b),this):a.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(b){return y(b)?(a.imgSrcSanitizationWhitelist(b),this):a.imgSrcSanitizationWhitelist()};
+var k=!0;this.debugInfoEnabled=function(a){return y(a)?(k=a,this):k};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,b,c,s,M,v,m,F,Z,L,B){function I(a,b){try{a.addClass(b)}catch(c){}}function D(a,b,c,d,e){a instanceof A||(a=A(a));r(a,function(b,c){b.nodeType==pb&&b.nodeValue.match(/\S+/)&&(a[c]=A(b).wrap("<span></span>").parent()[0])});var f=S(a,b,a,c,d,e);D.$$addScopeClass(a);
+var g=null;return function(b,c,d){Rb(b,"scope");d=d||{};var e=d.parentBoundTranscludeFn,h=d.transcludeControllers;d=d.futureParentElement;e&&e.$$boundTransclude&&(e=e.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==va(d)&&d.toString().match(/SVG/)?"svg":"html":"html");d="html"!==g?A(Xb(g,A("<div>").append(a).html())):c?Ka.clone.call(a):a;if(h)for(var k in h)d.data("$"+k+"Controller",h[k].instance);D.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,e);return d}}function S(a,b,c,d,e,f){function g(a,
+c,d,e){var f,k,l,q,p,s,M;if(m)for(M=Array(c.length),q=0;q<h.length;q+=3)f=h[q],M[f]=c[f];else M=c;q=0;for(p=h.length;q<p;)k=M[h[q++]],c=h[q++],f=h[q++],c?(c.scope?(l=a.$new(),D.$$addScopeInfo(A(k),l)):l=a,s=c.transcludeOnThisElement?P(a,c.transclude,e,c.elementTranscludeOnThisElement):!c.templateOnThisElement&&e?e:!e&&b?P(a,b):null,c(f,l,k,d,s)):f&&f(a,k.childNodes,t,e)}for(var h=[],k,l,q,p,m,s=0;s<a.length;s++){k=new Yb;l=X(a[s],[],k,0===s?d:t,e);(f=l.length?fa(l,a[s],k,b,c,null,[],[],f):null)&&
+f.scope&&D.$$addScopeClass(k.$$element);k=f&&f.terminal||!(q=a[s].childNodes)||!q.length?null:S(q,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||k)h.push(s,f,k),p=!0,m=m||f;f=null}return p?g:null}function P(a,b,c,d){return function(d,e,f,g,h){d||(d=a.$new(!1,h),d.$$transcluded=!0);return b(d,e,{parentBoundTranscludeFn:c,transcludeControllers:f,futureParentElement:g})}}function X(a,b,c,d,g){var h=c.$attr,k;switch(a.nodeType){case qa:ka(b,xa(va(a)),"E",d,g);for(var l,
+q,p,m=a.attributes,s=0,M=m&&m.length;s<M;s++){var u=!1,L=!1;l=m[s];k=l.name;q=N(l.value);l=xa(k);if(p=U.test(l))k=k.replace(Sc,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()});var B=l.replace(/(Start|End)$/,"");x(B)&&l===B+"Start"&&(u=k,L=k.substr(0,k.length-5)+"end",k=k.substr(0,k.length-6));l=xa(k.toLowerCase());h[l]=k;if(p||!c.hasOwnProperty(l))c[l]=q,Nc(a,l)&&(c[l]=!0);Oa(a,b,q,l,p);ka(b,l,"A",d,g,u,L)}a=a.className;J(a)&&(a=a.animVal);if(C(a)&&""!==a)for(;k=f.exec(a);)l=xa(k[2]),
+ka(b,l,"C",d,g)&&(c[l]=N(k[3])),a=a.substr(k.index+k[0].length);break;case pb:za(b,a.nodeValue);break;case 8:try{if(k=e.exec(a.nodeValue))l=xa(k[1]),ka(b,l,"M",d,g)&&(c[l]=N(k[2]))}catch(v){}}b.sort(da);return b}function ba(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw la("uterdir",b,c);a.nodeType==qa&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return A(d)}function O(a,b,c){return function(d,e,f,g,h){e=ba(e[0],
+b,c);return a(d,e,f,g,h)}}function fa(a,d,e,f,g,k,l,p,m){function s(a,b,c,d){if(a){c&&(a=O(a,c,d));a.require=K.require;a.directiveName=da;if(P===K||K.$$isolateScope)a=Y(a,{isolateScope:!0});l.push(a)}if(b){c&&(b=O(b,c,d));b.require=K.require;b.directiveName=da;if(P===K||K.$$isolateScope)b=Y(b,{isolateScope:!0});p.push(b)}}function L(a,b,c,d){var e,f="data",g=!1,k=c,l;if(C(b)){l=b.match(h);b=b.substring(l[0].length);l[3]&&(l[1]?l[3]=null:l[1]=l[3]);"^"===l[1]?f="inheritedData":"^^"===l[1]&&(f="inheritedData",
+k=c.parent());"?"===l[2]&&(g=!0);e=null;d&&"data"===f&&(e=d[b])&&(e=e.instance);e=e||k[f]("$"+b+"Controller");if(!e&&!g)throw la("ctreq",b,a);return e||null}H(b)&&(e=[],r(b,function(b){e.push(L(a,b,c,d))}));return e}function B(a,c,f,g,h){function k(a,b,c){var d;Va(a)||(c=b,b=a,a=t);E&&(d=F);c||(c=E?X.parent():X);return h(a,b,d,c,Wb)}var m,s,u,I,F,gb,X,O;d===f?(O=e,X=e.$$element):(X=A(f),O=new Yb(X,e));P&&(I=c.$new(!0));h&&(gb=k,gb.$$boundTransclude=h);S&&(Z={},F={},r(S,function(a){var b={$scope:a===
+P||a.$$isolateScope?I:c,$element:X,$attrs:O,$transclude:gb};u=a.controller;"@"==u&&(u=O[a.name]);b=v(u,b,!0,a.controllerAs);F[a.name]=b;E||X.data("$"+a.name+"Controller",b.instance);Z[a.name]=b}));if(P){D.$$addScopeInfo(X,I,!0,!(ma&&(ma===P||ma===P.$$originalDirective)));D.$$addScopeClass(X,!0);g=Z&&Z[P.name];var ba=I;g&&g.identifier&&!0===P.bindToController&&(ba=g.instance);r(I.$$isolateBindings=P.$$isolateBindings,function(a,d){var e=a.attrName,f=a.optional,g,h,k,l;switch(a.mode){case "@":O.$observe(e,
+function(a){ba[d]=a});O.$$observers[e].$$scope=c;O[e]&&(ba[d]=b(O[e])(c));break;case "=":if(f&&!O[e])break;h=M(O[e]);l=h.literal?ha:function(a,b){return a===b||a!==a&&b!==b};k=h.assign||function(){g=ba[d]=h(c);throw la("nonassign",O[e],P.name);};g=ba[d]=h(c);f=function(a){l(a,ba[d])||(l(a,g)?k(c,a=ba[d]):ba[d]=a);return g=a};f.$stateful=!0;f=a.collection?c.$watchCollection(O[e],f):c.$watch(M(O[e],f),null,h.literal);I.$on("$destroy",f);break;case "&":h=M(O[e]),ba[d]=function(a){return h(c,a)}}})}Z&&
+(r(Z,function(a){a()}),Z=null);g=0;for(m=l.length;g<m;g++)s=l[g],$(s,s.isolateScope?I:c,X,O,s.require&&L(s.directiveName,s.require,X,F),gb);var Wb=c;P&&(P.template||null===P.templateUrl)&&(Wb=I);a&&a(Wb,f.childNodes,t,h);for(g=p.length-1;0<=g;g--)s=p[g],$(s,s.isolateScope?I:c,X,O,s.require&&L(s.directiveName,s.require,X,F),gb)}m=m||{};for(var I=-Number.MAX_VALUE,F,S=m.controllerDirectives,Z,P=m.newIsolateScopeDirective,ma=m.templateDirective,fa=m.nonTlbTranscludeDirective,ka=!1,x=!1,E=m.hasElementTranscludeDirective,
+w=e.$$element=A(d),K,da,V,fb=f,za,z=0,Q=a.length;z<Q;z++){K=a[z];var Oa=K.$$start,U=K.$$end;Oa&&(w=ba(d,Oa,U));V=t;if(I>K.priority)break;if(V=K.scope)K.templateUrl||(J(V)?(Na("new/isolated scope",P||F,K,w),P=K):Na("new/isolated scope",P,K,w)),F=F||K;da=K.name;!K.templateUrl&&K.controller&&(V=K.controller,S=S||{},Na("'"+da+"' controller",S[da],K,w),S[da]=K);if(V=K.transclude)ka=!0,K.$$tlb||(Na("transclusion",fa,K,w),fa=K),"element"==V?(E=!0,I=K.priority,V=w,w=e.$$element=A(W.createComment(" "+da+": "+
+e[da]+" ")),d=w[0],T(g,Za.call(V,0),d),fb=D(V,f,I,k&&k.name,{nonTlbTranscludeDirective:fa})):(V=A(Ub(d)).contents(),w.empty(),fb=D(V,f));if(K.template)if(x=!0,Na("template",ma,K,w),ma=K,V=G(K.template)?K.template(w,e):K.template,V=Tc(V),K.replace){k=K;V=Sb.test(V)?Uc(Xb(K.templateNamespace,N(V))):[];d=V[0];if(1!=V.length||d.nodeType!==qa)throw la("tplrt",da,"");T(g,w,d);Q={$attr:{}};V=X(d,[],Q);var aa=a.splice(z+1,a.length-(z+1));P&&y(V);a=a.concat(V).concat(aa);R(e,Q);Q=a.length}else w.html(V);if(K.templateUrl)x=
+!0,Na("template",ma,K,w),ma=K,K.replace&&(k=K),B=of(a.splice(z,a.length-z),w,e,g,ka&&fb,l,p,{controllerDirectives:S,newIsolateScopeDirective:P,templateDirective:ma,nonTlbTranscludeDirective:fa}),Q=a.length;else if(K.compile)try{za=K.compile(w,e,fb),G(za)?s(null,za,Oa,U):za&&s(za.pre,za.post,Oa,U)}catch(pf){c(pf,wa(w))}K.terminal&&(B.terminal=!0,I=Math.max(I,K.priority))}B.scope=F&&!0===F.scope;B.transcludeOnThisElement=ka;B.elementTranscludeOnThisElement=E;B.templateOnThisElement=x;B.transclude=fb;
+m.hasElementTranscludeDirective=E;return B}function y(a){for(var b=0,c=a.length;b<c;b++)a[b]=Ob(a[b],{$$isolateScope:!0})}function ka(b,e,f,g,h,k,l){if(e===h)return null;h=null;if(d.hasOwnProperty(e)){var q;e=a.get(e+"Directive");for(var m=0,s=e.length;m<s;m++)try{q=e[m],(g===t||g>q.priority)&&-1!=q.restrict.indexOf(f)&&(k&&(q=Ob(q,{$$start:k,$$end:l})),b.push(q),h=q)}catch(M){c(M)}}return h}function x(b){if(d.hasOwnProperty(b))for(var c=a.get(b+"Directive"),e=0,f=c.length;e<f;e++)if(b=c[e],b.multiElement)return!0;
+return!1}function R(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;r(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});r(b,function(b,f){"class"==f?(I(e,b),a["class"]=(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function of(a,b,c,d,e,f,g,h){var k=[],l,q,p=b[0],m=a.shift(),M=Ob(m,{templateUrl:null,transclude:null,
+replace:null,$$originalDirective:m}),u=G(m.templateUrl)?m.templateUrl(b,c):m.templateUrl,L=m.templateNamespace;b.empty();s(Z.getTrustedResourceUrl(u)).then(function(s){var B,v;s=Tc(s);if(m.replace){s=Sb.test(s)?Uc(Xb(L,N(s))):[];B=s[0];if(1!=s.length||B.nodeType!==qa)throw la("tplrt",m.name,u);s={$attr:{}};T(d,b,B);var D=X(B,[],s);J(m.scope)&&y(D);a=D.concat(a);R(c,s)}else B=p,b.html(s);a.unshift(M);l=fa(a,B,c,e,b,m,f,g,h);r(d,function(a,c){a==B&&(d[c]=b[0])});for(q=S(b[0].childNodes,e);k.length;){s=
+k.shift();v=k.shift();var F=k.shift(),O=k.shift(),D=b[0];if(!s.$$destroyed){if(v!==p){var Z=v.className;h.hasElementTranscludeDirective&&m.replace||(D=Ub(B));T(F,A(v),D);I(A(D),Z)}v=l.transcludeOnThisElement?P(s,l.transclude,O):O;l(q,s,D,d,v)}}k=null});return function(a,b,c,d,e){a=e;b.$$destroyed||(k?k.push(b,c,d,a):(l.transcludeOnThisElement&&(a=P(b,l.transclude,e)),l(q,b,c,d,a)))}}function da(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function Na(a,
+b,c,d){if(b)throw la("multidir",b.name,c.name,a,wa(d));}function za(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&D.$$addBindingClass(a);return function(a,c){var e=c.parent();b||D.$$addBindingClass(e);D.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function Xb(a,b){a=z(a||"html");switch(a){case "svg":case "math":var c=W.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}
+function Q(a,b){if("srcdoc"==b)return Z.HTML;var c=va(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b))return Z.RESOURCE_URL}function Oa(a,c,d,e,f){var h=Q(a,e);f=g[e]||f;var k=b(d,!0,h,f);if(k){if("multiple"===e&&"select"===va(a))throw la("selmulti",wa(a));c.push({priority:100,compile:function(){return{pre:function(a,c,g){c=g.$$observers||(g.$$observers={});if(l.test(e))throw la("nodomevents");var m=g[e];m!==d&&(k=m&&b(m,!0,h,f),d=m);k&&(g[e]=k(a),(c[e]||(c[e]=[])).$$inter=
+!0,(g.$$observers&&g.$$observers[e].$$scope||a).$watch(k,function(a,b){"class"===e&&a!=b?g.$updateClass(a,b):g.$set(e,a)}))}}}})}}function T(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]==d){a[g++]=c;h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&(a.context=c);break}f&&f.replaceChild(c,d);a=W.createDocumentFragment();a.appendChild(d);A(c).data(A(d).data());ta?(Qb=!0,ta.cleanData([d])):delete A.cache[d[A.expando]];
+d=1;for(e=b.length;d<e;d++)f=b[d],A(f).remove(),a.appendChild(f),delete b[d];b[0]=c;b.length=1}function Y(a,b){return w(function(){return a.apply(null,arguments)},a,b)}function $(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,wa(d))}}var Yb=function(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a};Yb.prototype={$normalize:xa,$addClass:function(a){a&&0<a.length&&L.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&
+L.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=Vc(a,b);c&&c.length&&L.addClass(this.$$element,c);(c=Vc(b,a))&&c.length&&L.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=this.$$element[0],g=Nc(f,a),h=kf(f,a),f=a;g?(this.$$element.prop(a,b),e=g):h&&(this[h]=b,f=h);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=vc(a,"-"));g=va(this.$$element);if("a"===g&&"href"===a||"img"===g&&"src"===a)this[a]=b=B(b,"src"===a);else if("img"===g&&"srcset"===a){for(var g=
+"",h=N(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(h)?k:/(,)/,h=h.split(k),k=Math.floor(h.length/2),l=0;l<k;l++)var q=2*l,g=g+B(N(h[q]),!0),g=g+(" "+N(h[q+1]));h=N(h[2*l]).split(/\s/);g+=B(N(h[0]),!0);2===h.length&&(g+=" "+N(h[1]));this[a]=b=g}!1!==d&&(null===b||b===t?this.$$element.removeAttr(e):this.$$element.attr(e,b));(a=this.$$observers)&&r(a[f],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=ia()),e=d[a]||(d[a]=[]);e.push(b);
+m.$evalAsync(function(){!e.$$inter&&c.hasOwnProperty(a)&&b(c[a])});return function(){Xa(e,b)}}};var V=b.startSymbol(),ma=b.endSymbol(),Tc="{{"==V||"}}"==ma?ra:function(a){return a.replace(/\{\{/g,V).replace(/}}/g,ma)},U=/^ngAttr[A-Z]/;D.$$addBindingInfo=k?function(a,b){var c=a.data("$binding")||[];H(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:E;D.$$addBindingClass=k?function(a){I(a,"ng-binding")}:E;D.$$addScopeInfo=k?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",
+b)}:E;D.$$addScopeClass=k?function(a,b){I(a,b?"ng-isolate-scope":"ng-scope")}:E;return D}]}function xa(b){return db(b.replace(Sc,""))}function Vc(b,a){var c="",d=b.split(/\s+/),e=a.split(/\s+/),f=0;a:for(;f<d.length;f++){for(var g=d[f],h=0;h<e.length;h++)if(g==e[h])continue a;c+=(0<c.length?" ":"")+g}return c}function Uc(b){b=A(b);var a=b.length;if(1>=a)return b;for(;a--;)8===b[a].nodeType&&qf.call(b,a,1);return b}function Fe(){var b={},a=!1,c=/^(\S+)(\s+as\s+(\w+))?$/;this.register=function(a,c){La(a,
+"controller");J(a)?w(b,a):b[a]=c};this.allowGlobals=function(){a=!0};this.$get=["$injector","$window",function(d,e){function f(a,b,c,d){if(!a||!J(a.$scope))throw R("$controller")("noscp",d,b);a.$scope[b]=c}return function(g,h,l,k){var n,p,q;l=!0===l;k&&C(k)&&(q=k);if(C(g)){k=g.match(c);if(!k)throw rf("ctrlfmt",g);p=k[1];q=q||k[3];g=b.hasOwnProperty(p)?b[p]:xc(h.$scope,p,!0)||(a?xc(e,p,!0):t);sb(g,p,!0)}if(l)return l=(H(g)?g[g.length-1]:g).prototype,n=Object.create(l||null),q&&f(h,q,n,p||g.name),w(function(){d.invoke(g,
+n,h,p);return n},{instance:n,identifier:q});n=d.instantiate(g,h,p);q&&f(h,q,n,p||g.name);return n}}]}function Ge(){this.$get=["$window",function(b){return A(b.document)}]}function He(){this.$get=["$log",function(b){return function(a,c){b.error.apply(b,arguments)}}]}function Zb(b,a){if(C(b)){var c=b.replace(sf,"").trim();if(c){var d=a("Content-Type");(d=d&&0===d.indexOf(Wc))||(d=(d=c.match(tf))&&uf[d[0]].test(c));d&&(b=qc(c))}}return b}function Xc(b){var a=ia(),c,d,e;if(!b)return a;r(b.split("\n"),
+function(b){e=b.indexOf(":");c=z(N(b.substr(0,e)));d=N(b.substr(e+1));c&&(a[c]=a[c]?a[c]+", "+d:d)});return a}function Yc(b){var a=J(b)?b:t;return function(c){a||(a=Xc(b));return c?(c=a[z(c)],void 0===c&&(c=null),c):a}}function Zc(b,a,c,d){if(G(d))return d(b,a,c);r(d,function(d){b=d(b,a,c)});return b}function Ke(){var b=this.defaults={transformResponse:[Zb],transformRequest:[function(a){return J(a)&&"[object File]"!==Ca.call(a)&&"[object Blob]"!==Ca.call(a)&&"[object FormData]"!==Ca.call(a)?$a(a):
+a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:sa($b),put:sa($b),patch:sa($b)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"},a=!1;this.useApplyAsync=function(b){return y(b)?(a=!!b,this):a};var c=this.interceptors=[];this.$get=["$httpBackend","$browser","$cacheFactory","$rootScope","$q","$injector",function(d,e,f,g,h,l){function k(a){function c(a){var b=w({},a);b.data=a.data?Zc(a.data,a.headers,a.status,e.transformResponse):a.data;a=a.status;return 200<=a&&300>a?
+b:h.reject(b)}function d(a){var b,c={};r(a,function(a,d){G(a)?(b=a(),null!=b&&(c[d]=b)):c[d]=a});return c}if(!ca.isObject(a))throw R("$http")("badreq",a);var e=w({method:"get",transformRequest:b.transformRequest,transformResponse:b.transformResponse},a);e.headers=function(a){var c=b.headers,e=w({},a.headers),f,g,c=w({},c.common,c[z(a.method)]);a:for(f in c){a=z(f);for(g in e)if(z(g)===a)continue a;e[f]=c[f]}return d(e)}(a);e.method=ub(e.method);var f=[function(a){var d=a.headers,e=Zc(a.data,Yc(d),
+t,a.transformRequest);x(e)&&r(d,function(a,b){"content-type"===z(b)&&delete d[b]});x(a.withCredentials)&&!x(b.withCredentials)&&(a.withCredentials=b.withCredentials);return n(a,e).then(c,c)},t],g=h.when(e);for(r(u,function(a){(a.request||a.requestError)&&f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var k=f.shift(),g=g.then(a,k)}g.success=function(a){g.then(function(b){a(b.data,b.status,b.headers,e)});return g};g.error=
+function(a){g.then(null,function(b){a(b.data,b.status,b.headers,e)});return g};return g}function n(c,f){function l(b,c,d,e){function f(){m(c,b,d,e)}I&&(200<=b&&300>b?I.put(P,[b,c,Xc(d),e]):I.remove(P));a?g.$applyAsync(f):(f(),g.$$phase||g.$apply())}function m(a,b,d,e){b=Math.max(b,0);(200<=b&&300>b?L.resolve:L.reject)({data:a,status:b,headers:Yc(d),config:c,statusText:e})}function n(a){m(a.data,a.status,sa(a.headers()),a.statusText)}function u(){var a=k.pendingRequests.indexOf(c);-1!==a&&k.pendingRequests.splice(a,
+1)}var L=h.defer(),B=L.promise,I,D,S=c.headers,P=p(c.url,c.params);k.pendingRequests.push(c);B.then(u,u);!c.cache&&!b.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(I=J(c.cache)?c.cache:J(b.cache)?b.cache:q);I&&(D=I.get(P),y(D)?D&&G(D.then)?D.then(n,n):H(D)?m(D[1],D[0],sa(D[2]),D[3]):m(D,200,{},"OK"):I.put(P,B));x(D)&&((D=$c(c.url)?e.cookies()[c.xsrfCookieName||b.xsrfCookieName]:t)&&(S[c.xsrfHeaderName||b.xsrfHeaderName]=D),d(c.method,P,f,l,S,c.timeout,c.withCredentials,c.responseType));
+return B}function p(a,b){if(!b)return a;var c=[];Ed(b,function(a,b){null===a||x(a)||(H(a)||(a=[a]),r(a,function(a){J(a)&&(a=ga(a)?a.toISOString():$a(a));c.push(Ea(b)+"="+Ea(a))}))});0<c.length&&(a+=(-1==a.indexOf("?")?"?":"&")+c.join("&"));return a}var q=f("$http"),u=[];r(c,function(a){u.unshift(C(a)?l.get(a):l.invoke(a))});k.pendingRequests=[];(function(a){r(arguments,function(a){k[a]=function(b,c){return k(w(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){r(arguments,function(a){k[a]=
+function(b,c,d){return k(w(d||{},{method:a,url:b,data:c}))}})})("post","put","patch");k.defaults=b;return k}]}function vf(){return new Q.XMLHttpRequest}function Le(){this.$get=["$browser","$window","$document",function(b,a,c){return wf(b,vf,b.defer,a.angular.callbacks,c[0])}]}function wf(b,a,c,d,e){function f(a,b,c){var f=e.createElement("script"),n=null;f.type="text/javascript";f.src=a;f.async=!0;n=function(a){f.removeEventListener("load",n,!1);f.removeEventListener("error",n,!1);e.body.removeChild(f);
+f=null;var g=-1,u="unknown";a&&("load"!==a.type||d[b].called||(a={type:"error"}),u=a.type,g="error"===a.type?404:200);c&&c(g,u)};f.addEventListener("load",n,!1);f.addEventListener("error",n,!1);e.body.appendChild(f);return n}return function(e,h,l,k,n,p,q,u){function s(){m&&m();F&&F.abort()}function M(a,d,e,f,g){L!==t&&c.cancel(L);m=F=null;a(d,e,f,g);b.$$completeOutstandingRequest(E)}b.$$incOutstandingRequestCount();h=h||b.url();if("jsonp"==z(e)){var v="_"+(d.counter++).toString(36);d[v]=function(a){d[v].data=
+a;d[v].called=!0};var m=f(h.replace("JSON_CALLBACK","angular.callbacks."+v),v,function(a,b){M(k,a,d[v].data,"",b);d[v]=E})}else{var F=a();F.open(e,h,!0);r(n,function(a,b){y(a)&&F.setRequestHeader(b,a)});F.onload=function(){var a=F.statusText||"",b="response"in F?F.response:F.responseText,c=1223===F.status?204:F.status;0===c&&(c=b?200:"file"==Aa(h).protocol?404:0);M(k,c,b,F.getAllResponseHeaders(),a)};e=function(){M(k,-1,null,null,"")};F.onerror=e;F.onabort=e;q&&(F.withCredentials=!0);if(u)try{F.responseType=
+u}catch(Z){if("json"!==u)throw Z;}F.send(l||null)}if(0<p)var L=c(s,p);else p&&G(p.then)&&p.then(s)}}function Ie(){var b="{{",a="}}";this.startSymbol=function(a){return a?(b=a,this):b};this.endSymbol=function(b){return b?(a=b,this):a};this.$get=["$parse","$exceptionHandler","$sce",function(c,d,e){function f(a){return"\\\\\\"+a}function g(f,g,u,s){function M(c){return c.replace(k,b).replace(n,a)}function v(a){try{var b=a;a=u?e.getTrusted(u,b):e.valueOf(b);var c;if(s&&!y(a))c=a;else if(null==a)c="";
+else{switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=$a(a)}c=a}return c}catch(g){c=ac("interr",f,g.toString()),d(c)}}s=!!s;for(var m,F,r=0,L=[],B=[],I=f.length,D=[],S=[];r<I;)if(-1!=(m=f.indexOf(b,r))&&-1!=(F=f.indexOf(a,m+h)))r!==m&&D.push(M(f.substring(r,m))),r=f.substring(m+h,F),L.push(r),B.push(c(r,v)),r=F+l,S.push(D.length),D.push("");else{r!==I&&D.push(M(f.substring(r)));break}if(u&&1<D.length)throw ac("noconcat",f);if(!g||L.length){var P=function(a){for(var b=0,c=
+L.length;b<c;b++){if(s&&x(a[b]))return;D[S[b]]=a[b]}return D.join("")};return w(function(a){var b=0,c=L.length,e=Array(c);try{for(;b<c;b++)e[b]=B[b](a);return P(e)}catch(g){a=ac("interr",f,g.toString()),d(a)}},{exp:f,expressions:L,$$watchDelegate:function(a,b,c){var d;return a.$watchGroup(B,function(c,e){var f=P(c);G(b)&&b.call(this,f,c!==e?d:f,a);d=f},c)}})}}var h=b.length,l=a.length,k=new RegExp(b.replace(/./g,f),"g"),n=new RegExp(a.replace(/./g,f),"g");g.startSymbol=function(){return b};g.endSymbol=
+function(){return a};return g}]}function Je(){this.$get=["$rootScope","$window","$q","$$q",function(b,a,c,d){function e(e,h,l,k){var n=a.setInterval,p=a.clearInterval,q=0,u=y(k)&&!k,s=(u?d:c).defer(),M=s.promise;l=y(l)?l:0;M.then(null,null,e);M.$$intervalId=n(function(){s.notify(q++);0<l&&q>=l&&(s.resolve(q),p(M.$$intervalId),delete f[M.$$intervalId]);u||b.$apply()},h);f[M.$$intervalId]=s;return M}var f={};e.cancel=function(b){return b&&b.$$intervalId in f?(f[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),
+delete f[b.$$intervalId],!0):!1};return e}]}function Rd(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3,lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),
+DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a",fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a",ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"]},pluralCat:function(b){return 1===b?"one":"other"}}}}function bc(b){b=b.split("/");for(var a=b.length;a--;)b[a]=qb(b[a]);
+return b.join("/")}function ad(b,a){var c=Aa(b);a.$$protocol=c.protocol;a.$$host=c.hostname;a.$$port=aa(c.port)||xf[c.protocol]||null}function bd(b,a){var c="/"!==b.charAt(0);c&&(b="/"+b);var d=Aa(b);a.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)?d.pathname.substring(1):d.pathname);a.$$search=sc(d.search);a.$$hash=decodeURIComponent(d.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function ya(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Ga(b){var a=b.indexOf("#");
+return-1==a?b:b.substr(0,a)}function Fb(b){return b.replace(/(#.+)|#$/,"$1")}function cc(b){return b.substr(0,Ga(b).lastIndexOf("/")+1)}function dc(b,a){this.$$html5=!0;a=a||"";var c=cc(b);ad(b,this);this.$$parse=function(a){var b=ya(c,a);if(!C(b))throw Gb("ipthprfx",a,c);bd(b,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Pb(this.$$search),b=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=bc(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$parseLinkUrl=
+function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;(f=ya(b,d))!==t?(g=f,g=(f=ya(a,f))!==t?c+(ya("/",f)||f):b+g):(f=ya(c,d))!==t?g=c+f:c==d+"/"&&(g=c);g&&this.$$parse(g);return!!g}}function ec(b,a){var c=cc(b);ad(b,this);this.$$parse=function(d){d=ya(b,d)||ya(c,d);var e;"#"===d.charAt(0)?(e=ya(a,d),x(e)&&(e=d)):e=this.$$html5?d:"";bd(e,this);d=this.$$path;var f=/^\/[A-Z]:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));f.exec(e)||(d=(e=f.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};
+this.$$compose=function(){var c=Pb(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=bc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$parseLinkUrl=function(a,c){return Ga(b)==Ga(a)?(this.$$parse(a),!0):!1}}function cd(b,a){this.$$html5=!0;ec.apply(this,arguments);var c=cc(b);this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;b==Ga(d)?f=d:(g=ya(c,d))?f=b+a+g:c===d+"/"&&(f=c);f&&this.$$parse(f);return!!f};this.$$compose=
+function(){var c=Pb(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=bc(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function Hb(b){return function(){return this[b]}}function dd(b,a){return function(c){if(x(c))return this[b];this[b]=a(c);this.$$compose();return this}}function Me(){var b="",a={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(a){return y(a)?(b=a,this):b};this.html5Mode=function(b){return Wa(b)?(a.enabled=b,this):J(b)?(Wa(b.enabled)&&(a.enabled=
+b.enabled),Wa(b.requireBase)&&(a.requireBase=b.requireBase),Wa(b.rewriteLinks)&&(a.rewriteLinks=b.rewriteLinks),this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(c,d,e,f,g){function h(a,b,c){var e=k.url(),f=k.$$state;try{d.url(a,b,c),k.$$state=d.state()}catch(g){throw k.url(e),k.$$state=f,g;}}function l(a,b){c.$broadcast("$locationChangeSuccess",k.absUrl(),a,k.$$state,b)}var k,n;n=d.baseHref();var p=d.url(),q;if(a.enabled){if(!n&&a.requireBase)throw Gb("nobase");
+q=p.substring(0,p.indexOf("/",p.indexOf("//")+2))+(n||"/");n=e.history?dc:cd}else q=Ga(p),n=ec;k=new n(q,"#"+b);k.$$parseLinkUrl(p,p);k.$$state=d.state();var u=/^\s*(javascript|mailto):/i;f.on("click",function(b){if(a.rewriteLinks&&!b.ctrlKey&&!b.metaKey&&!b.shiftKey&&2!=b.which&&2!=b.button){for(var e=A(b.target);"a"!==va(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),l=e.attr("href")||e.attr("xlink:href");J(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=Aa(h.animVal).href);
+u.test(h)||!h||e.attr("target")||b.isDefaultPrevented()||!k.$$parseLinkUrl(h,l)||(b.preventDefault(),k.absUrl()!=d.url()&&(c.$apply(),g.angular["ff-684208-preventDefault"]=!0))}});Fb(k.absUrl())!=Fb(p)&&d.url(k.absUrl(),!0);var s=!0;d.onUrlChange(function(a,b){c.$evalAsync(function(){var d=k.absUrl(),e=k.$$state,f;k.$$parse(a);k.$$state=b;f=c.$broadcast("$locationChangeStart",a,d,b,e).defaultPrevented;k.absUrl()===a&&(f?(k.$$parse(d),k.$$state=e,h(d,!1,e)):(s=!1,l(d,e)))});c.$$phase||c.$digest()});
+c.$watch(function(){var a=Fb(d.url()),b=Fb(k.absUrl()),f=d.state(),g=k.$$replace,q=a!==b||k.$$html5&&e.history&&f!==k.$$state;if(s||q)s=!1,c.$evalAsync(function(){var b=k.absUrl(),d=c.$broadcast("$locationChangeStart",b,a,k.$$state,f).defaultPrevented;k.absUrl()===b&&(d?(k.$$parse(a),k.$$state=f):(q&&h(b,g,f===k.$$state?null:k.$$state),l(a,f)))});k.$$replace=!1});return k}]}function Ne(){var b=!0,a=this;this.debugEnabled=function(a){return y(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof
+Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||E;a=!1;try{a=!!e.apply}catch(l){}return a?function(){var a=[];r(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,
+arguments)}}()}}]}function ua(b,a){if("__defineGetter__"===b||"__defineSetter__"===b||"__lookupGetter__"===b||"__lookupSetter__"===b||"__proto__"===b)throw na("isecfld",a);return b}function oa(b,a){if(b){if(b.constructor===b)throw na("isecfn",a);if(b.window===b)throw na("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw na("isecdom",a);if(b===Object)throw na("isecobj",a);}return b}function fc(b){return b.constant}function hb(b,a,c,d,e){oa(b,e);oa(a,e);c=c.split(".");for(var f,
+g=0;1<c.length;g++){f=ua(c.shift(),e);var h=0===g&&a&&a[f]||b[f];h||(h={},b[f]=h);b=oa(h,e)}f=ua(c.shift(),e);oa(b[f],e);return b[f]=d}function Pa(b){return"constructor"==b}function ed(b,a,c,d,e,f,g){ua(b,f);ua(a,f);ua(c,f);ua(d,f);ua(e,f);var h=function(a){return oa(a,f)},l=g||Pa(b)?h:ra,k=g||Pa(a)?h:ra,n=g||Pa(c)?h:ra,p=g||Pa(d)?h:ra,q=g||Pa(e)?h:ra;return function(f,g){var h=g&&g.hasOwnProperty(b)?g:f;if(null==h)return h;h=l(h[b]);if(!a)return h;if(null==h)return t;h=k(h[a]);if(!c)return h;if(null==
+h)return t;h=n(h[c]);if(!d)return h;if(null==h)return t;h=p(h[d]);return e?null==h?t:h=q(h[e]):h}}function yf(b,a){return function(c,d){return b(c,d,oa,a)}}function zf(b,a,c){var d=a.expensiveChecks,e=d?Af:Bf,f=e[b];if(f)return f;var g=b.split("."),h=g.length;if(a.csp)f=6>h?ed(g[0],g[1],g[2],g[3],g[4],c,d):function(a,b){var e=0,f;do f=ed(g[e++],g[e++],g[e++],g[e++],g[e++],c,d)(a,b),b=t,a=f;while(e<h);return f};else{var l="";d&&(l+="s = eso(s, fe);\nl = eso(l, fe);\n");var k=d;r(g,function(a,b){ua(a,
+c);var e=(b?"s":'((l&&l.hasOwnProperty("'+a+'"))?l:s)')+"."+a;if(d||Pa(a))e="eso("+e+", fe)",k=!0;l+="if(s == null) return undefined;\ns="+e+";\n"});l+="return s;";a=new Function("s","l","eso","fe",l);a.toString=ea(l);k&&(a=yf(a,c));f=a}f.sharedGetter=!0;f.assign=function(a,c,d){return hb(a,d,b,c,b)};return e[b]=f}function gc(b){return G(b.valueOf)?b.valueOf():Cf.call(b)}function Oe(){var b=ia(),a=ia();this.$get=["$filter","$sniffer",function(c,d){function e(a){var b=a;a.sharedGetter&&(b=function(b,
+c){return a(b,c)},b.literal=a.literal,b.constant=a.constant,b.assign=a.assign);return b}function f(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];e.constant||(e.inputs?f(e.inputs,b):-1===b.indexOf(e)&&b.push(e))}return b}function g(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=gc(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function h(a,b,c,d){var e=d.$$inputs||(d.$$inputs=f(d.inputs,[])),h;if(1===e.length){var k=g,e=e[0];return a.$watch(function(a){var b=e(a);g(b,k)||(h=d(a),k=b&&
+gc(b));return h},b,c)}for(var l=[],q=0,p=e.length;q<p;q++)l[q]=g;return a.$watch(function(a){for(var b=!1,c=0,f=e.length;c<f;c++){var k=e[c](a);if(b||(b=!g(k,l[c])))l[c]=k&&gc(k)}b&&(h=d(a));return h},b,c)}function l(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a;G(b)&&b.apply(this,arguments);y(a)&&d.$$postDigest(function(){y(f)&&e()})},c)}function k(a,b,c,d){function e(a){var b=!0;r(a,function(a){y(a)||(b=!1)});return b}var f,g;return f=a.$watch(function(a){return d(a)},
+function(a,c,d){g=a;G(b)&&b.call(this,a,c,d);e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function n(a,b,c,d){var e;return e=a.$watch(function(a){return d(a)},function(a,c,d){G(b)&&b.apply(this,arguments);e()},c)}function p(a,b){if(!b)return a;var c=a.$$watchDelegate,c=c!==k&&c!==l?function(c,d){var e=a(c,d);return b(e,c,d)}:function(c,d){var e=a(c,d),f=b(e,c,d);return y(e)?f:e};a.$$watchDelegate&&a.$$watchDelegate!==h?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=h,c.inputs=
+[a]);return c}var q={csp:d.csp,expensiveChecks:!1},u={csp:d.csp,expensiveChecks:!0};return function(d,f,g){var m,r,t;switch(typeof d){case "string":t=d=d.trim();var L=g?a:b;m=L[t];m||(":"===d.charAt(0)&&":"===d.charAt(1)&&(r=!0,d=d.substring(2)),g=g?u:q,m=new hc(g),m=(new ib(m,c,g)).parse(d),m.constant?m.$$watchDelegate=n:r?(m=e(m),m.$$watchDelegate=m.literal?k:l):m.inputs&&(m.$$watchDelegate=h),L[t]=m);return p(m,f);case "function":return p(d,f);default:return p(E,f)}}}]}function Qe(){this.$get=
+["$rootScope","$exceptionHandler",function(b,a){return fd(function(a){b.$evalAsync(a)},a)}]}function Re(){this.$get=["$browser","$exceptionHandler",function(b,a){return fd(function(a){b.defer(a)},a)}]}function fd(b,a){function c(a,b,c){function d(b){return function(c){e||(e=!0,b.call(a,c))}}var e=!1;return[d(b),d(c)]}function d(){this.$$state={status:0}}function e(a,b){return function(c){b.call(a,c)}}function f(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,b(function(){var b,d,e;e=c.pending;
+c.processScheduled=!1;c.pending=t;for(var f=0,g=e.length;f<g;++f){d=e[f][0];b=e[f][c.status];try{G(b)?d.resolve(b(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),a(h)}}}))}function g(){this.promise=new d;this.resolve=e(this,this.resolve);this.reject=e(this,this.reject);this.notify=e(this,this.notify)}var h=R("$q",TypeError);d.prototype={then:function(a,b,c){var d=new g;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&
+f(this.$$state);return d.promise},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return k(b,!0,a)},function(b){return k(b,!1,a)},b)}};g.prototype={resolve:function(a){this.promise.$$state.status||(a===this.promise?this.$$reject(h("qcycle",a)):this.$$resolve(a))},$$resolve:function(b){var d,e;e=c(this,this.$$resolve,this.$$reject);try{if(J(b)||G(b))d=b&&b.then;G(d)?(this.promise.$$state.status=-1,d.call(b,e[0],e[1],this.notify)):(this.promise.$$state.value=
+b,this.promise.$$state.status=1,f(this.promise.$$state))}catch(g){e[1](g),a(g)}},reject:function(a){this.promise.$$state.status||this.$$reject(a)},$$reject:function(a){this.promise.$$state.value=a;this.promise.$$state.status=2;f(this.promise.$$state)},notify:function(c){var d=this.promise.$$state.pending;0>=this.promise.$$state.status&&d&&d.length&&b(function(){for(var b,e,f=0,g=d.length;f<g;f++){e=d[f][0];b=d[f][3];try{e.notify(G(b)?b(c):c)}catch(h){a(h)}}})}};var l=function(a,b){var c=new g;b?c.resolve(a):
+c.reject(a);return c.promise},k=function(a,b,c){var d=null;try{G(c)&&(d=c())}catch(e){return l(e,!1)}return d&&G(d.then)?d.then(function(){return l(a,b)},function(a){return l(a,!1)}):l(a,b)},n=function(a,b,c,d){var e=new g;e.resolve(a);return e.promise.then(b,c,d)},p=function u(a){if(!G(a))throw h("norslvr",a);if(!(this instanceof u))return new u(a);var b=new g;a(function(a){b.resolve(a)},function(a){b.reject(a)});return b.promise};p.defer=function(){return new g};p.reject=function(a){var b=new g;
+b.reject(a);return b.promise};p.when=n;p.all=function(a){var b=new g,c=0,d=H(a)?[]:{};r(a,function(a,e){c++;n(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})});0===c&&b.resolve(d);return b.promise};return p}function $e(){this.$get=["$window","$timeout",function(b,a){var c=b.requestAnimationFrame||b.webkitRequestAnimationFrame,d=b.cancelAnimationFrame||b.webkitCancelAnimationFrame||b.webkitCancelRequestAnimationFrame,e=!!c,f=e?function(a){var b=
+c(a);return function(){d(b)}}:function(b){var c=a(b,16.66,!1);return function(){a.cancel(c)}};f.supported=e;return f}]}function Pe(){function b(a){function b(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$id=++ob;this.$$ChildScope=null}b.prototype=a;return b}var a=10,c=R("$rootScope"),d=null,e=null;this.digestTtl=function(b){arguments.length&&(a=b);return a};this.$get=["$injector","$exceptionHandler",
+"$parse","$browser",function(f,g,h,l){function k(a){a.currentScope.$$destroyed=!0}function n(){this.$id=++ob;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$isolateBindings=null}function p(a){if(v.$$phase)throw c("inprog",v.$$phase);v.$$phase=a}function q(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];
+while(a=a.$parent)}function u(){}function s(){for(;t.length;)try{t.shift()()}catch(a){g(a)}e=null}function M(){null===e&&(e=l.defer(function(){v.$apply(s)}))}n.prototype={constructor:n,$new:function(a,c){var d;c=c||this;a?(d=new n,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=b(this)),d=new this.$$ChildScope);d.$parent=c;d.$$prevSibling=c.$$childTail;c.$$childHead?(c.$$childTail.$$nextSibling=d,c.$$childTail=d):c.$$childHead=c.$$childTail=d;(a||c!=this)&&d.$on("$destroy",k);return d},
+$watch:function(a,b,c){var e=h(a);if(e.$$watchDelegate)return e.$$watchDelegate(this,b,c,e);var f=this.$$watchers,g={fn:b,last:u,get:e,exp:a,eq:!!c};d=null;G(b)||(g.fn=E);f||(f=this.$$watchers=[]);f.unshift(g);return function(){Xa(f,g);d=null}},$watchGroup:function(a,b){function c(){h=!1;k?(k=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=!1}}if(1===a.length)return this.$watch(a[0],
+function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});r(a,function(a,b){var k=g.$watch(a,function(a,f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(k)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!x(e)){if(J(e))if(Sa(e))for(f!==p&&(f=p,u=f.length=0,l++),a=e.length,u!==a&&(l++,f.length=u=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(l++,f[b]=g);else{f!==n&&(f=n={},u=0,l++);a=0;for(b in e)e.hasOwnProperty(b)&&(a++,g=e[b],h=
+f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(u++,f[b]=g,l++));if(u>a)for(b in l++,f)e.hasOwnProperty(b)||(u--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,g,k=1<b.length,l=0,q=h(a,c),p=[],n={},m=!0,u=0;return this.$watch(q,function(){m?(m=!1,b(e,e,d)):b(e,g,d);if(k)if(J(e))if(Sa(e)){g=Array(e.length);for(var a=0;a<e.length;a++)g[a]=e[a]}else for(a in g={},e)tc.call(e,a)&&(g[a]=e[a]);else g=e})},$digest:function(){var b,f,h,k,q,n,r=a,t,O=[],M,y;p("$digest");l.$$checkUrlChange();
+this===v&&null!==e&&(l.defer.cancel(e),s());d=null;do{n=!1;for(t=this;m.length;){try{y=m.shift(),y.scope.$eval(y.expression,y.locals)}catch(w){g(w)}d=null}a:do{if(k=t.$$watchers)for(q=k.length;q--;)try{if(b=k[q])if((f=b.get(t))!==(h=b.last)&&!(b.eq?ha(f,h):"number"===typeof f&&"number"===typeof h&&isNaN(f)&&isNaN(h)))n=!0,d=b,b.last=b.eq?Da(f,null):f,b.fn(f,h===u?f:h,t),5>r&&(M=4-r,O[M]||(O[M]=[]),O[M].push({msg:G(b.exp)?"fn: "+(b.exp.name||b.exp.toString()):b.exp,newVal:f,oldVal:h}));else if(b===
+d){n=!1;break a}}catch(A){g(A)}if(!(k=t.$$childHead||t!==this&&t.$$nextSibling))for(;t!==this&&!(k=t.$$nextSibling);)t=t.$parent}while(t=k);if((n||m.length)&&!r--)throw v.$$phase=null,c("infdig",a,O);}while(n||m.length);for(v.$$phase=null;F.length;)try{F.shift()()}catch(x){g(x)}},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;if(this!==v){for(var b in this.$$listenerCount)q(this,this.$$listenerCount[b],b);a.$$childHead==this&&(a.$$childHead=
+this.$$nextSibling);a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=E;this.$on=this.$watch=this.$watchGroup=function(){return E};this.$$listeners={};this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=this.$$watchers=null}}},$eval:function(a,
+b){return h(a)(this,b)},$evalAsync:function(a,b){v.$$phase||m.length||l.defer(function(){m.length&&v.$digest()});m.push({scope:this,expression:a,locals:b})},$$postDigest:function(a){F.push(a)},$apply:function(a){try{return p("$apply"),this.$eval(a)}catch(b){g(b)}finally{v.$$phase=null;try{v.$digest()}catch(c){throw g(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&t.push(b);M()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||
+(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,q(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,f=!1,h={name:a,targetScope:e,stopPropagation:function(){f=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=Ya([h],arguments,1),l,q;do{d=e.$$listeners[a]||c;h.currentScope=e;l=0;for(q=d.length;l<q;l++)if(d[l])try{d[l].apply(null,k)}catch(p){g(p)}else d.splice(l,1),l--,q--;if(f)return h.currentScope=
+null,h;e=e.$parent}while(e);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;for(var f=Ya([e],arguments,1),h,l;c=d;){e.currentScope=c;d=c.$$listeners[a]||[];h=0;for(l=d.length;h<l;h++)if(d[h])try{d[h].apply(null,f)}catch(k){g(k)}else d.splice(h,1),h--,l--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=
+c.$$nextSibling);)c=c.$parent}e.currentScope=null;return e}};var v=new n,m=v.$$asyncQueue=[],F=v.$$postDigestQueue=[],t=v.$$applyAsyncQueue=[];return v}]}function Sd(){var b=/^\s*(https?|ftp|mailto|tel|file):/,a=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(a){return y(a)?(b=a,this):b};this.imgSrcSanitizationWhitelist=function(b){return y(b)?(a=b,this):a};this.$get=function(){return function(c,d){var e=d?a:b,f;f=Aa(c).href;return""===f||f.match(e)?c:"unsafe:"+
+f}}}function Df(b){if("self"===b)return b;if(C(b)){if(-1<b.indexOf("***"))throw Ba("iwcard",b);b=gd(b).replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return new RegExp("^"+b+"$")}if(Ua(b))return new RegExp("^"+b.source+"$");throw Ba("imatcher");}function hd(b){var a=[];y(b)&&r(b,function(b){a.push(Df(b))});return a}function Te(){this.SCE_CONTEXTS=pa;var b=["self"],a=[];this.resourceUrlWhitelist=function(a){arguments.length&&(b=hd(a));return b};this.resourceUrlBlacklist=function(b){arguments.length&&
+(a=hd(b));return a};this.$get=["$injector",function(c){function d(a,b){return"self"===a?$c(b):!!a.exec(b.href)}function e(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var f=function(a){throw Ba("unsafe");};c.has("$sanitize")&&(f=c.get("$sanitize"));var g=e(),h={};h[pa.HTML]=e(g);h[pa.CSS]=e(g);h[pa.URL]=
+e(g);h[pa.JS]=e(g);h[pa.RESOURCE_URL]=e(h[pa.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw Ba("icontext",a,b);if(null===b||b===t||""===b)return b;if("string"!==typeof b)throw Ba("itype",a);return new c(b)},getTrusted:function(c,e){if(null===e||e===t||""===e)return e;var g=h.hasOwnProperty(c)?h[c]:null;if(g&&e instanceof g)return e.$$unwrapTrustedValue();if(c===pa.RESOURCE_URL){var g=Aa(e.toString()),p,q,u=!1;p=0;for(q=b.length;p<q;p++)if(d(b[p],g)){u=!0;break}if(u)for(p=
+0,q=a.length;p<q;p++)if(d(a[p],g)){u=!1;break}if(u)return e;throw Ba("insecurl",e.toString());}if(c===pa.HTML)return f(e);throw Ba("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function Se(){var b=!0;this.enabled=function(a){arguments.length&&(b=!!a);return b};this.$get=["$parse","$sceDelegate",function(a,c){if(b&&8>Qa)throw Ba("iequirks");var d=sa(pa);d.isEnabled=function(){return b};d.trustAs=c.trustAs;d.getTrusted=c.getTrusted;d.valueOf=c.valueOf;b||(d.trustAs=
+d.getTrusted=function(a,b){return b},d.valueOf=ra);d.parseAs=function(b,c){var e=a(c);return e.literal&&e.constant?e:a(c,function(a){return d.getTrusted(b,a)})};var e=d.parseAs,f=d.getTrusted,g=d.trustAs;r(pa,function(a,b){var c=z(b);d[db("parse_as_"+c)]=function(b){return e(a,b)};d[db("get_trusted_"+c)]=function(b){return f(a,b)};d[db("trust_as_"+c)]=function(b){return g(a,b)}});return d}]}function Ue(){this.$get=["$window","$document",function(b,a){var c={},d=aa((/android (\d+)/.exec(z((b.navigator||
+{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},g,h=/^(Moz|webkit|ms)(?=[A-Z])/,l=f.body&&f.body.style,k=!1,n=!1;if(l){for(var p in l)if(k=h.exec(p)){g=k[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}g||(g="WebkitOpacity"in l&&"webkit");k=!!("transition"in l||g+"Transition"in l);n=!!("animation"in l||g+"Animation"in l);!d||k&&n||(k=C(f.body.style.webkitTransition),n=C(f.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hasEvent:function(a){if("input"===
+a&&11>=Qa)return!1;if(x(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:bb(),vendorPrefix:g,transitions:k,animations:n,android:d}}]}function We(){this.$get=["$templateCache","$http","$q",function(b,a,c){function d(e,f){d.totalPendingRequests++;var g=a.defaults&&a.defaults.transformResponse;H(g)?g=g.filter(function(a){return a!==Zb}):g===Zb&&(g=null);return a.get(e,{cache:b,transformResponse:g})["finally"](function(){d.totalPendingRequests--}).then(function(a){return a.data},
+function(a){if(!f)throw la("tpload",e);return c.reject(a)})}d.totalPendingRequests=0;return d}]}function Xe(){this.$get=["$rootScope","$browser","$location",function(b,a,c){return{findBindings:function(a,b,c){a=a.getElementsByClassName("ng-binding");var g=[];r(a,function(a){var d=ca.element(a).data("$binding");d&&r(d,function(d){c?(new RegExp("(^|\\s)"+gd(b)+"(\\s|\\||$)")).test(d)&&g.push(a):-1!=d.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,c){for(var g=["ng-","data-ng-","ng\\:"],
+h=0;h<g.length;++h){var l=a.querySelectorAll("["+g[h]+"model"+(c?"=":"*=")+'"'+b+'"]');if(l.length)return l}},getLocation:function(){return c.url()},setLocation:function(a){a!==c.url()&&(c.url(a),b.$digest())},whenStable:function(b){a.notifyWhenNoOutstandingRequests(b)}}}]}function Ye(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",function(b,a,c,d,e){function f(f,l,k){var n=y(k)&&!k,p=(n?d:c).defer(),q=p.promise;l=a.defer(function(){try{p.resolve(f())}catch(a){p.reject(a),e(a)}finally{delete g[q.$$timeoutId]}n||
+b.$apply()},l);q.$$timeoutId=l;g[l]=p;return q}var g={};f.cancel=function(b){return b&&b.$$timeoutId in g?(g[b.$$timeoutId].reject("canceled"),delete g[b.$$timeoutId],a.defer.cancel(b.$$timeoutId)):!1};return f}]}function Aa(b){Qa&&($.setAttribute("href",b),b=$.href);$.setAttribute("href",b);return{href:$.href,protocol:$.protocol?$.protocol.replace(/:$/,""):"",host:$.host,search:$.search?$.search.replace(/^\?/,""):"",hash:$.hash?$.hash.replace(/^#/,""):"",hostname:$.hostname,port:$.port,pathname:"/"===
+$.pathname.charAt(0)?$.pathname:"/"+$.pathname}}function $c(b){b=C(b)?Aa(b):b;return b.protocol===id.protocol&&b.host===id.host}function Ze(){this.$get=ea(Q)}function Fc(b){function a(c,d){if(J(c)){var e={};r(c,function(b,c){e[c]=a(c,b)});return e}return b.factory(c+"Filter",d)}this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];a("currency",jd);a("date",kd);a("filter",Ef);a("json",Ff);a("limitTo",Gf);a("lowercase",Hf);a("number",ld);a("orderBy",md);a("uppercase",
+If)}function Ef(){return function(b,a,c){if(!H(b))return b;var d;switch(typeof a){case "function":break;case "boolean":case "number":case "string":d=!0;case "object":a=Jf(a,c,d);break;default:return b}return b.filter(a)}}function Jf(b,a,c){var d=J(b)&&"$"in b;!0===a?a=ha:G(a)||(a=function(a,b){if(J(a)||J(b))return!1;a=z(""+a);b=z(""+b);return-1!==a.indexOf(b)});return function(e){return d&&!J(e)?Ha(e,b.$,a,!1):Ha(e,b,a,c)}}function Ha(b,a,c,d,e){var f=null!==b?typeof b:"null",g=null!==a?typeof a:
+"null";if("string"===g&&"!"===a.charAt(0))return!Ha(b,a.substring(1),c,d);if(H(b))return b.some(function(b){return Ha(b,a,c,d)});switch(f){case "object":var h;if(d){for(h in b)if("$"!==h.charAt(0)&&Ha(b[h],a,c,!0))return!0;return e?!1:Ha(b,a,c,!1)}if("object"===g){for(h in a)if(e=a[h],!G(e)&&!x(e)&&(f="$"===h,!Ha(f?b:b[h],e,c,f,f)))return!1;return!0}return c(b,a);case "function":return!1;default:return c(b,a)}}function jd(b){var a=b.NUMBER_FORMATS;return function(b,d,e){x(d)&&(d=a.CURRENCY_SYM);x(e)&&
+(e=a.PATTERNS[1].maxFrac);return null==b?b:nd(b,a.PATTERNS[1],a.GROUP_SEP,a.DECIMAL_SEP,e).replace(/\u00A4/g,d)}}function ld(b){var a=b.NUMBER_FORMATS;return function(b,d){return null==b?b:nd(b,a.PATTERNS[0],a.GROUP_SEP,a.DECIMAL_SEP,d)}}function nd(b,a,c,d,e){if(!isFinite(b)||J(b))return"";var f=0>b;b=Math.abs(b);var g=b+"",h="",l=[],k=!1;if(-1!==g.indexOf("e")){var n=g.match(/([\d\.]+)e(-?)(\d+)/);n&&"-"==n[2]&&n[3]>e+1?b=0:(h=g,k=!0)}if(k)0<e&&1>b&&(h=b.toFixed(e),b=parseFloat(h));else{g=(g.split(od)[1]||
+"").length;x(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);var g=(""+b).split(od),k=g[0],g=g[1]||"",p=0,q=a.lgSize,u=a.gSize;if(k.length>=q+u)for(p=k.length-q,n=0;n<p;n++)0===(p-n)%u&&0!==n&&(h+=c),h+=k.charAt(n);for(n=p;n<k.length;n++)0===(k.length-n)%q&&0!==n&&(h+=c),h+=k.charAt(n);for(;g.length<e;)g+="0";e&&"0"!==e&&(h+=d+g.substr(0,e))}0===b&&(f=!1);l.push(f?a.negPre:a.posPre,h,f?a.negSuf:a.posSuf);return l.join("")}function Ib(b,a,
+c){var d="";0>b&&(d="-",b=-b);for(b=""+b;b.length<a;)b="0"+b;c&&(b=b.substr(b.length-a));return d+b}function U(b,a,c,d){c=c||0;return function(e){e=e["get"+b]();if(0<c||e>-c)e+=c;0===e&&-12==c&&(e=12);return Ib(e,a,d)}}function Jb(b,a){return function(c,d){var e=c["get"+b](),f=ub(a?"SHORT"+b:b);return d[f][e]}}function pd(b){var a=(new Date(b,0,1)).getDay();return new Date(b,0,(4>=a?5:12)-a)}function qd(b){return function(a){var c=pd(a.getFullYear());a=+new Date(a.getFullYear(),a.getMonth(),a.getDate()+
+(4-a.getDay()))-+c;a=1+Math.round(a/6048E5);return Ib(a,b)}}function ic(b,a){return 0>=b.getFullYear()?a.ERAS[0]:a.ERAS[1]}function kd(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,l=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=aa(b[9]+b[10]),g=aa(b[9]+b[11]));h.call(a,aa(b[1]),aa(b[2])-1,aa(b[3]));f=aa(b[4]||0)-f;g=aa(b[5]||0)-g;h=aa(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));l.call(a,f,g,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
+return function(c,e,f){var g="",h=[],l,k;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;C(c)&&(c=Kf.test(c)?aa(c):a(c));Y(c)&&(c=new Date(c));if(!ga(c))return c;for(;e;)(k=Lf.exec(e))?(h=Ya(h,k,1),e=h.pop()):(h.push(e),e=null);f&&"UTC"===f&&(c=new Date(c.getTime()),c.setMinutes(c.getMinutes()+c.getTimezoneOffset()));r(h,function(a){l=Mf[a];g+=l?l(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Ff(){return function(b,a){x(a)&&(a=2);return $a(b,a)}}function Gf(){return function(b,
+a){Y(b)&&(b=b.toString());return H(b)||C(b)?(a=Infinity===Math.abs(Number(a))?Number(a):aa(a))?0<a?b.slice(0,a):b.slice(a):C(b)?"":[]:b}}function md(b){return function(a,c,d){function e(a,b){return b?function(b,c){return a(c,b)}:a}function f(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}function g(a){return null===a?"null":"function"===typeof a.valueOf&&(a=a.valueOf(),f(a))||"function"===typeof a.toString&&(a=a.toString(),f(a))?a:""}function h(a,b){var c=
+typeof a,d=typeof b;c===d&&"object"===c&&(a=g(a),b=g(b));return c===d?("string"===c&&(a=a.toLowerCase(),b=b.toLowerCase()),a===b?0:a<b?-1:1):c<d?-1:1}if(!Sa(a))return a;c=H(c)?c:[c];0===c.length&&(c=["+"]);c=c.map(function(a){var c=!1,d=a||ra;if(C(a)){if("+"==a.charAt(0)||"-"==a.charAt(0))c="-"==a.charAt(0),a=a.substring(1);if(""===a)return e(h,c);d=b(a);if(d.constant){var f=d();return e(function(a,b){return h(a[f],b[f])},c)}}return e(function(a,b){return h(d(a),d(b))},c)});return Za.call(a).sort(e(function(a,
+b){for(var d=0;d<c.length;d++){var e=c[d](a,b);if(0!==e)return e}return 0},d))}}function Ia(b){G(b)&&(b={link:b});b.restrict=b.restrict||"AC";return ea(b)}function rd(b,a,c,d,e){var f=this,g=[],h=f.$$parentForm=b.parent().controller("form")||Kb;f.$error={};f.$$success={};f.$pending=t;f.$name=e(a.name||a.ngForm||"")(c);f.$dirty=!1;f.$pristine=!0;f.$valid=!0;f.$invalid=!1;f.$submitted=!1;h.$addControl(f);f.$rollbackViewValue=function(){r(g,function(a){a.$rollbackViewValue()})};f.$commitViewValue=function(){r(g,
+function(a){a.$commitViewValue()})};f.$addControl=function(a){La(a.$name,"input");g.push(a);a.$name&&(f[a.$name]=a)};f.$$renameControl=function(a,b){var c=a.$name;f[c]===a&&delete f[c];f[b]=a;a.$name=b};f.$removeControl=function(a){a.$name&&f[a.$name]===a&&delete f[a.$name];r(f.$pending,function(b,c){f.$setValidity(c,null,a)});r(f.$error,function(b,c){f.$setValidity(c,null,a)});r(f.$$success,function(b,c){f.$setValidity(c,null,a)});Xa(g,a)};sd({ctrl:this,$element:b,set:function(a,b,c){var d=a[b];
+d?-1===d.indexOf(c)&&d.push(c):a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(Xa(d,c),0===d.length&&delete a[b])},parentForm:h,$animate:d});f.$setDirty=function(){d.removeClass(b,Ra);d.addClass(b,Lb);f.$dirty=!0;f.$pristine=!1;h.$setDirty()};f.$setPristine=function(){d.setClass(b,Ra,Lb+" ng-submitted");f.$dirty=!1;f.$pristine=!0;f.$submitted=!1;r(g,function(a){a.$setPristine()})};f.$setUntouched=function(){r(g,function(a){a.$setUntouched()})};f.$setSubmitted=function(){d.addClass(b,"ng-submitted");
+f.$submitted=!0;h.$setSubmitted()}}function jc(b){b.$formatters.push(function(a){return b.$isEmpty(a)?a:a.toString()})}function jb(b,a,c,d,e,f){var g=z(a[0].type);if(!e.android){var h=!1;a.on("compositionstart",function(a){h=!0});a.on("compositionend",function(){h=!1;l()})}var l=function(b){k&&(f.defer.cancel(k),k=null);if(!h){var e=a.val();b=b&&b.type;"password"===g||c.ngTrim&&"false"===c.ngTrim||(e=N(e));(d.$viewValue!==e||""===e&&d.$$hasNativeValidators)&&d.$setViewValue(e,b)}};if(e.hasEvent("input"))a.on("input",
+l);else{var k,n=function(a,b,c){k||(k=f.defer(function(){k=null;b&&b.value===c||l(a)}))};a.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||n(a,this,this.value)});if(e.hasEvent("paste"))a.on("paste cut",n)}a.on("change",l);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)}}function Mb(b,a){return function(c,d){var e,f;if(ga(c))return c;if(C(c)){'"'==c.charAt(0)&&'"'==c.charAt(c.length-1)&&(c=c.substring(1,c.length-1));if(Nf.test(c))return new Date(c);b.lastIndex=
+0;if(e=b.exec(c))return e.shift(),f=d?{yyyy:d.getFullYear(),MM:d.getMonth()+1,dd:d.getDate(),HH:d.getHours(),mm:d.getMinutes(),ss:d.getSeconds(),sss:d.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},r(e,function(b,c){c<a.length&&(f[a[c]]=+b)}),new Date(f.yyyy,f.MM-1,f.dd,f.HH,f.mm,f.ss||0,1E3*f.sss||0)}return NaN}}function kb(b,a,c,d){return function(e,f,g,h,l,k,n){function p(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function q(a){return y(a)?ga(a)?a:c(a):t}td(e,f,g,h);
+jb(e,f,g,h,l,k);var u=h&&h.$options&&h.$options.timezone,s;h.$$parserName=b;h.$parsers.push(function(b){return h.$isEmpty(b)?null:a.test(b)?(b=c(b,s),"UTC"===u&&b.setMinutes(b.getMinutes()-b.getTimezoneOffset()),b):t});h.$formatters.push(function(a){if(a&&!ga(a))throw Nb("datefmt",a);if(p(a)){if((s=a)&&"UTC"===u){var b=6E4*s.getTimezoneOffset();s=new Date(s.getTime()+b)}return n("date")(a,d,u)}s=null;return""});if(y(g.min)||g.ngMin){var r;h.$validators.min=function(a){return!p(a)||x(r)||c(a)>=r};
+g.$observe("min",function(a){r=q(a);h.$validate()})}if(y(g.max)||g.ngMax){var v;h.$validators.max=function(a){return!p(a)||x(v)||c(a)<=v};g.$observe("max",function(a){v=q(a);h.$validate()})}}}function td(b,a,c,d){(d.$$hasNativeValidators=J(a[0].validity))&&d.$parsers.push(function(b){var c=a.prop("validity")||{};return c.badInput&&!c.typeMismatch?t:b})}function ud(b,a,c,d,e){if(y(d)){b=b(d);if(!b.constant)throw R("ngModel")("constexpr",c,d);return b(a)}return e}function kc(b,a){b="ngClass"+b;return["$animate",
+function(c){function d(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],n=0;n<b.length;n++)if(e==b[n])continue a;c.push(e)}return c}function e(a){if(!H(a)){if(C(a))return a.split(" ");if(J(a)){var b=[];r(a,function(a,c){a&&(b=b.concat(c.split(" ")))});return b}}return a}return{restrict:"AC",link:function(f,g,h){function l(a,b){var c=g.data("$classCounts")||{},d=[];r(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});g.data("$classCounts",c);return d.join(" ")}function k(b){if(!0===
+a||f.$index%2===a){var k=e(b||[]);if(!n){var u=l(k,1);h.$addClass(u)}else if(!ha(b,n)){var s=e(n),u=d(k,s),k=d(s,k),u=l(u,1),k=l(k,-1);u&&u.length&&c.addClass(g,u);k&&k.length&&c.removeClass(g,k)}}n=sa(b)}var n;f.$watch(h[b],k,!0);h.$observe("class",function(a){k(f.$eval(h[b]))});"ngClass"!==b&&f.$watch("$index",function(c,d){var g=c&1;if(g!==(d&1)){var k=e(f.$eval(h[b]));g===a?(g=l(k,1),h.$addClass(g)):(g=l(k,-1),h.$removeClass(g))}})}}}]}function sd(b){function a(a,b){b&&!f[a]?(k.addClass(e,a),
+f[a]=!0):!b&&f[a]&&(k.removeClass(e,a),f[a]=!1)}function c(b,c){b=b?"-"+vc(b,"-"):"";a(lb+b,!0===c);a(vd+b,!1===c)}var d=b.ctrl,e=b.$element,f={},g=b.set,h=b.unset,l=b.parentForm,k=b.$animate;f[vd]=!(f[lb]=e.hasClass(lb));d.$setValidity=function(b,e,f){e===t?(d.$pending||(d.$pending={}),g(d.$pending,b,f)):(d.$pending&&h(d.$pending,b,f),wd(d.$pending)&&(d.$pending=t));Wa(e)?e?(h(d.$error,b,f),g(d.$$success,b,f)):(g(d.$error,b,f),h(d.$$success,b,f)):(h(d.$error,b,f),h(d.$$success,b,f));d.$pending?(a(xd,
+!0),d.$valid=d.$invalid=t,c("",null)):(a(xd,!1),d.$valid=wd(d.$error),d.$invalid=!d.$valid,c("",d.$valid));e=d.$pending&&d.$pending[b]?t:d.$error[b]?!1:d.$$success[b]?!0:null;c(b,e);l.$setValidity(b,e,d)}}function wd(b){if(b)for(var a in b)return!1;return!0}var Of=/^\/(.+)\/([a-z]*)$/,z=function(b){return C(b)?b.toLowerCase():b},tc=Object.prototype.hasOwnProperty,ub=function(b){return C(b)?b.toUpperCase():b},Qa,A,ta,Za=[].slice,qf=[].splice,Pf=[].push,Ca=Object.prototype.toString,Ja=R("ng"),ca=Q.angular||
+(Q.angular={}),cb,ob=0;Qa=W.documentMode;E.$inject=[];ra.$inject=[];var H=Array.isArray,N=function(b){return C(b)?b.trim():b},gd=function(b){return b.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},bb=function(){if(y(bb.isActive_))return bb.isActive_;var b=!(!W.querySelector("[ng-csp]")&&!W.querySelector("[data-ng-csp]"));if(!b)try{new Function("")}catch(a){b=!0}return bb.isActive_=b},rb=["ng-","data-ng-","ng:","x-ng-"],Md=/[A-Z]/g,wc=!1,Qb,qa=1,pb=3,Qd={full:"1.3.15",major:1,
+minor:3,dot:15,codeName:"locality-filtration"};T.expando="ng339";var zb=T.cache={},hf=1;T._data=function(b){return this.cache[b[this.expando]]||{}};var cf=/([\:\-\_]+(.))/g,df=/^moz([A-Z])/,Qf={mouseleave:"mouseout",mouseenter:"mouseover"},Tb=R("jqLite"),gf=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Sb=/<|&#?\w+;/,ef=/<([\w:]+)/,ff=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>",
+"</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ja.optgroup=ja.option;ja.tbody=ja.tfoot=ja.colgroup=ja.caption=ja.thead;ja.th=ja.td;var Ka=T.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===W.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),T(Q).on("load",a))},toString:function(){var b=[];r(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<=
+b?A(this[b]):A(this[this.length+b])},length:0,push:Pf,sort:[].sort,splice:[].splice},Eb={};r("multiple selected checked disabled readOnly required open".split(" "),function(b){Eb[z(b)]=b});var Oc={};r("input select option textarea button form details".split(" "),function(b){Oc[b]=!0});var Pc={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};r({data:Vb,removeData:xb},function(b,a){T[a]=b});r({data:Vb,inheritedData:Db,scope:function(b){return A.data(b,"$scope")||
+Db(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return A.data(b,"$isolateScope")||A.data(b,"$isolateScopeNoTemplate")},controller:Kc,injector:function(b){return Db(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Ab,css:function(b,a,c){a=db(a);if(y(c))b.style[a]=c;else return b.style[a]},attr:function(b,a,c){var d=z(a);if(Eb[d])if(y(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||E).specified?
+d:t;else if(y(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?t:b},prop:function(b,a,c){if(y(c))b[a]=c;else return b[a]},text:function(){function b(a,b){if(x(b)){var d=a.nodeType;return d===qa||d===pb?a.textContent:""}a.textContent=b}b.$dv="";return b}(),val:function(b,a){if(x(a)){if(b.multiple&&"select"===va(b)){var c=[];r(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(x(a))return b.innerHTML;
+wb(b,!0);b.innerHTML=a},empty:Lc},function(b,a){T.prototype[a]=function(a,d){var e,f,g=this.length;if(b!==Lc&&(2==b.length&&b!==Ab&&b!==Kc?a:d)===t){if(J(a)){for(e=0;e<g;e++)if(b===Vb)b(this[e],a);else for(f in a)b(this[e],f,a[f]);return this}e=b.$dv;g=e===t?Math.min(g,1):g;for(f=0;f<g;f++){var h=b(this[f],a,d);e=e?e+h:h}return e}for(e=0;e<g;e++)b(this[e],a,d);return this}});r({removeData:xb,on:function a(c,d,e,f){if(y(f))throw Tb("onargs");if(Gc(c)){var g=yb(c,!0);f=g.events;var h=g.handle;h||(h=
+g.handle=lf(c,f));for(var g=0<=d.indexOf(" ")?d.split(" "):[d],l=g.length;l--;){d=g[l];var k=f[d];k||(f[d]=[],"mouseenter"===d||"mouseleave"===d?a(c,Qf[d],function(a){var c=a.relatedTarget;c&&(c===this||this.contains(c))||h(a,d)}):"$destroy"!==d&&c.addEventListener(d,h,!1),k=f[d]);k.push(e)}}},off:Jc,one:function(a,c,d){a=A(a);a.on(c,function f(){a.off(c,d);a.off(c,f)});a.on(c,d)},replaceWith:function(a,c){var d,e=a.parentNode;wb(a);r(new T(c),function(c){d?e.insertBefore(c,d.nextSibling):e.replaceChild(c,
+a);d=c})},children:function(a){var c=[];r(a.childNodes,function(a){a.nodeType===qa&&c.push(a)});return c},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,c){var d=a.nodeType;if(d===qa||11===d){c=new T(c);for(var d=0,e=c.length;d<e;d++)a.appendChild(c[d])}},prepend:function(a,c){if(a.nodeType===qa){var d=a.firstChild;r(new T(c),function(c){a.insertBefore(c,d)})}},wrap:function(a,c){c=A(c).eq(0).clone()[0];var d=a.parentNode;d&&d.replaceChild(c,a);c.appendChild(a)},
+remove:Mc,detach:function(a){Mc(a,!0)},after:function(a,c){var d=a,e=a.parentNode;c=new T(c);for(var f=0,g=c.length;f<g;f++){var h=c[f];e.insertBefore(h,d.nextSibling);d=h}},addClass:Cb,removeClass:Bb,toggleClass:function(a,c,d){c&&r(c.split(" "),function(c){var f=d;x(f)&&(f=!Ab(a,c));(f?Cb:Bb)(a,c)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},find:function(a,c){return a.getElementsByTagName?a.getElementsByTagName(c):[]},clone:Ub,
+triggerHandler:function(a,c,d){var e,f,g=c.type||c,h=yb(a);if(h=(h=h&&h.events)&&h[g])e={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:E,type:g,target:a},c.type&&(e=w(e,c)),c=sa(h),f=d?[e].concat(d):[e],r(c,function(c){e.isImmediatePropagationStopped()||c.apply(a,
+f)})}},function(a,c){T.prototype[c]=function(c,e,f){for(var g,h=0,l=this.length;h<l;h++)x(g)?(g=a(this[h],c,e,f),y(g)&&(g=A(g))):Ic(g,a(this[h],c,e,f));return y(g)?g:this};T.prototype.bind=T.prototype.on;T.prototype.unbind=T.prototype.off});eb.prototype={put:function(a,c){this[Ma(a,this.nextUid)]=c},get:function(a){return this[Ma(a,this.nextUid)]},remove:function(a){var c=this[a=Ma(a,this.nextUid)];delete this[a];return c}};var Rc=/^function\s*[^\(]*\(\s*([^\)]*)\)/m,Rf=/,/,Sf=/^\s*(_?)(\S+?)\1\s*$/,
+Qc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Fa=R("$injector");ab.$$annotate=function(a,c,d){var e;if("function"===typeof a){if(!(e=a.$inject)){e=[];if(a.length){if(c)throw C(d)&&d||(d=a.name||mf(a)),Fa("strictdi",d);c=a.toString().replace(Qc,"");c=c.match(Rc);r(c[1].split(Rf),function(a){a.replace(Sf,function(a,c,d){e.push(d)})})}a.$inject=e}}else H(a)?(c=a.length-1,sb(a[c],"fn"),e=a.slice(0,c)):sb(a,"fn",!0);return e};var Tf=R("$animate"),Ce=["$provide",function(a){this.$$selectors={};this.register=function(c,
+d){var e=c+"-animation";if(c&&"."!=c.charAt(0))throw Tf("notcsel",c);this.$$selectors[c.substr(1)]=e;a.factory(e,d)};this.classNameFilter=function(a){1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null);return this.$$classNameFilter};this.$get=["$$q","$$asyncCallback","$rootScope",function(a,d,e){function f(d){var f,g=a.defer();g.promise.$$cancelFn=function(){f&&f()};e.$$postDigest(function(){f=d(function(){g.resolve()})});return g.promise}function g(a,c){var d=[],e=[],f=ia();
+r((a.attr("class")||"").split(/\s+/),function(a){f[a]=!0});r(c,function(a,c){var g=f[c];!1===a&&g?e.push(c):!0!==a||g||d.push(c)});return 0<d.length+e.length&&[d.length?d:null,e.length?e:null]}function h(a,c,d){for(var e=0,f=c.length;e<f;++e)a[c[e]]=d}function l(){n||(n=a.defer(),d(function(){n.resolve();n=null}));return n.promise}function k(a,c){if(ca.isObject(c)){var d=w(c.from||{},c.to||{});a.css(d)}}var n;return{animate:function(a,c,d){k(a,{from:c,to:d});return l()},enter:function(a,c,d,e){k(a,
+e);d?d.after(a):c.prepend(a);return l()},leave:function(a,c){k(a,c);a.remove();return l()},move:function(a,c,d,e){return this.enter(a,c,d,e)},addClass:function(a,c,d){return this.setClass(a,c,[],d)},$$addClassImmediately:function(a,c,d){a=A(a);c=C(c)?c:H(c)?c.join(" "):"";r(a,function(a){Cb(a,c)});k(a,d);return l()},removeClass:function(a,c,d){return this.setClass(a,[],c,d)},$$removeClassImmediately:function(a,c,d){a=A(a);c=C(c)?c:H(c)?c.join(" "):"";r(a,function(a){Bb(a,c)});k(a,d);return l()},setClass:function(a,
+c,d,e){var k=this,l=!1;a=A(a);var m=a.data("$$animateClasses");m?e&&m.options&&(m.options=ca.extend(m.options||{},e)):(m={classes:{},options:e},l=!0);e=m.classes;c=H(c)?c:c.split(" ");d=H(d)?d:d.split(" ");h(e,c,!0);h(e,d,!1);l&&(m.promise=f(function(c){var d=a.data("$$animateClasses");a.removeData("$$animateClasses");if(d){var e=g(a,d.classes);e&&k.$$setClassImmediately(a,e[0],e[1],d.options)}c()}),a.data("$$animateClasses",m));return m.promise},$$setClassImmediately:function(a,c,d,e){c&&this.$$addClassImmediately(a,
+c);d&&this.$$removeClassImmediately(a,d);k(a,e);return l()},enabled:E,cancel:E}}]}],la=R("$compile");yc.$inject=["$provide","$$sanitizeUriProvider"];var Sc=/^((?:x|data)[\:\-_])/i,rf=R("$controller"),Wc="application/json",$b={"Content-Type":Wc+";charset=utf-8"},tf=/^\[|^\{(?!\{)/,uf={"[":/]$/,"{":/}$/},sf=/^\)\]\}',?\n/,ac=R("$interpolate"),Uf=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/,xf={http:80,https:443,ftp:21},Gb=R("$location"),Vf={$$html5:!1,$$replace:!1,absUrl:Hb("$$absUrl"),url:function(a){if(x(a))return this.$$url;
+var c=Uf.exec(a);(c[1]||""===a)&&this.path(decodeURIComponent(c[1]));(c[2]||c[1]||""===a)&&this.search(c[3]||"");this.hash(c[5]||"");return this},protocol:Hb("$$protocol"),host:Hb("$$host"),port:Hb("$$port"),path:dd("$$path",function(a){a=null!==a?a.toString():"";return"/"==a.charAt(0)?a:"/"+a}),search:function(a,c){switch(arguments.length){case 0:return this.$$search;case 1:if(C(a)||Y(a))a=a.toString(),this.$$search=sc(a);else if(J(a))a=Da(a,{}),r(a,function(c,e){null==c&&delete a[e]}),this.$$search=
+a;else throw Gb("isrcharg");break;default:x(c)||null===c?delete this.$$search[a]:this.$$search[a]=c}this.$$compose();return this},hash:dd("$$hash",function(a){return null!==a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};r([cd,ec,dc],function(a){a.prototype=Object.create(Vf);a.prototype.state=function(c){if(!arguments.length)return this.$$state;if(a!==dc||!this.$$html5)throw Gb("nostate");this.$$state=x(c)?null:c;return this}});var na=R("$parse"),Wf=Function.prototype.call,
+Xf=Function.prototype.apply,Yf=Function.prototype.bind,mb=ia();r({"null":function(){return null},"true":function(){return!0},"false":function(){return!1},undefined:function(){}},function(a,c){a.constant=a.literal=a.sharedGetter=!0;mb[c]=a});mb["this"]=function(a){return a};mb["this"].sharedGetter=!0;var nb=w(ia(),{"+":function(a,c,d,e){d=d(a,c);e=e(a,c);return y(d)?y(e)?d+e:d:y(e)?e:t},"-":function(a,c,d,e){d=d(a,c);e=e(a,c);return(y(d)?d:0)-(y(e)?e:0)},"*":function(a,c,d,e){return d(a,c)*e(a,c)},
+"/":function(a,c,d,e){return d(a,c)/e(a,c)},"%":function(a,c,d,e){return d(a,c)%e(a,c)},"===":function(a,c,d,e){return d(a,c)===e(a,c)},"!==":function(a,c,d,e){return d(a,c)!==e(a,c)},"==":function(a,c,d,e){return d(a,c)==e(a,c)},"!=":function(a,c,d,e){return d(a,c)!=e(a,c)},"<":function(a,c,d,e){return d(a,c)<e(a,c)},">":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a,c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},
+"||":function(a,c,d,e){return d(a,c)||e(a,c)},"!":function(a,c,d){return!d(a,c)},"=":!0,"|":!0}),Zf={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},hc=function(a){this.options=a};hc.prototype={constructor:hc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdent(a))this.readIdent();else if(this.is(a,
+"(){}[].,;:?"))this.tokens.push({index:this.index,text:a}),this.index++;else if(this.isWhitespace(a))this.index++;else{var c=a+this.peek(),d=c+this.peek(2),e=nb[c],f=nb[d];nb[a]||e||f?(a=f?d:e?c:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,c){return-1!==c.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},
+isNumber:function(a){return"0"<=a&&"9">=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=y(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c,d)+"]":" "+d;throw na("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index<
+this.text.length;){var d=z(this.text.charAt(this.index));if("."==d||this.isNumber(d))a+=d;else{var e=this.peek();if("e"==d&&this.isExpOperator(e))a+=d;else if(this.isExpOperator(d)&&e&&this.isNumber(e)&&"e"==a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||e&&this.isNumber(e)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:c,text:a,constant:!0,value:Number(a)})},readIdent:function(){for(var a=this.index;this.index<this.text.length;){var c=
+this.text.charAt(this.index);if(!this.isIdent(c)&&!this.isNumber(c))break;this.index++}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var c=this.index;this.index++;for(var d="",e=a,f=!1;this.index<this.text.length;){var g=this.text.charAt(this.index),e=e+g;if(f)"u"===g?(f=this.text.substring(this.index+1,this.index+5),f.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+f+"]"),this.index+=4,d+=String.fromCharCode(parseInt(f,16))):
+d+=Zf[g]||g,f=!1;else if("\\"===g)f=!0;else{if(g===a){this.index++;this.tokens.push({index:c,text:e,constant:!0,value:d});return}d+=g}this.index++}this.throwError("Unterminated quote",c)}};var ib=function(a,c,d){this.lexer=a;this.$filter=c;this.options=d};ib.ZERO=w(function(){return 0},{sharedGetter:!0,constant:!0});ib.prototype={constructor:ib,parse:function(a){this.text=a;this.tokens=this.lexer.lex(a);a=this.statements();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);
+a.literal=!!a.literal;a.constant=!!a.constant;return a},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.peek().identifier&&this.peek().text in mb?a=mb[this.consume().text]:this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",this.peek());for(var c,d;c=this.expect("(","[",".");)"("===c.text?(a=this.functionCall(a,
+d),d=null):"["===c.text?(d=a,a=this.objectIndex(a)):"."===c.text?(d=a,a=this.fieldAccess(a)):this.throwError("IMPOSSIBLE");return a},throwError:function(a,c){throw na("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},peekToken:function(){if(0===this.tokens.length)throw na("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,e){return this.peekAhead(0,a,c,d,e)},peekAhead:function(a,c,d,e,f){if(this.tokens.length>a){a=this.tokens[a];var g=a.text;if(g===c||g===d||g===e||g===
+f||!(c||d||e||f))return a}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d,e))?(this.tokens.shift(),a):!1},consume:function(a){if(0===this.tokens.length)throw na("ueoe",this.text);var c=this.expect(a);c||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return c},unaryFn:function(a,c){var d=nb[a];return w(function(a,f){return d(a,f,c)},{constant:c.constant,inputs:[c]})},binaryFn:function(a,c,d,e){var f=nb[c];return w(function(c,e){return f(c,e,a,d)},{constant:a.constant&&
+d.constant,inputs:!e&&[a,d]})},identifier:function(){for(var a=this.consume().text;this.peek(".")&&this.peekAhead(1).identifier&&!this.peekAhead(2,"(");)a+=this.consume().text+this.consume().text;return zf(a,this.options,this.text)},constant:function(){var a=this.consume().value;return w(function(){return a},{constant:!0,literal:!0})},statements:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.filterChain()),!this.expect(";"))return 1===a.length?a[0]:function(c,
+d){for(var e,f=0,g=a.length;f<g;f++)e=a[f](c,d);return e}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},filter:function(a){var c=this.$filter(this.consume().text),d,e;if(this.peek(":"))for(d=[],e=[];this.expect(":");)d.push(this.expression());var f=[a].concat(d||[]);return w(function(f,h){var l=a(f,h);if(e){e[0]=l;for(l=d.length;l--;)e[l+1]=d[l](f,h);return c.apply(t,e)}return c(l)},{constant:!c.$stateful&&f.every(fc),inputs:!c.$stateful&&f})},expression:function(){return this.assignment()},
+assignment:function(){var a=this.ternary(),c,d;return(d=this.expect("="))?(a.assign||this.throwError("implies assignment but ["+this.text.substring(0,d.index)+"] can not be assigned to",d),c=this.ternary(),w(function(d,f){return a.assign(d,c(d,f),f)},{inputs:[a,c]})):a},ternary:function(){var a=this.logicalOR(),c;if(this.expect("?")&&(c=this.assignment(),this.consume(":"))){var d=this.assignment();return w(function(e,f){return a(e,f)?c(e,f):d(e,f)},{constant:a.constant&&c.constant&&d.constant})}return a},
+logicalOR:function(){for(var a=this.logicalAND(),c;c=this.expect("||");)a=this.binaryFn(a,c.text,this.logicalAND(),!0);return a},logicalAND:function(){for(var a=this.equality(),c;c=this.expect("&&");)a=this.binaryFn(a,c.text,this.equality(),!0);return a},equality:function(){for(var a=this.relational(),c;c=this.expect("==","!=","===","!==");)a=this.binaryFn(a,c.text,this.relational());return a},relational:function(){for(var a=this.additive(),c;c=this.expect("<",">","<=",">=");)a=this.binaryFn(a,c.text,
+this.additive());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.text,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.text,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(ib.ZERO,a.text,this.unary()):(a=this.expect("!"))?this.unaryFn(a.text,this.unary()):this.primary()},fieldAccess:function(a){var c=
+this.identifier();return w(function(d,e,f){d=f||a(d,e);return null==d?t:c(d)},{assign:function(d,e,f){var g=a(d,f);g||a.assign(d,g={},f);return c.assign(g,e)}})},objectIndex:function(a){var c=this.text,d=this.expression();this.consume("]");return w(function(e,f){var g=a(e,f),h=d(e,f);ua(h,c);return g?oa(g[h],c):t},{assign:function(e,f,g){var h=ua(d(e,g),c),l=oa(a(e,g),c);l||a.assign(e,l={},g);return l[h]=f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());
+while(this.expect(","))}this.consume(")");var e=this.text,f=d.length?[]:null;return function(g,h){var l=c?c(g,h):y(c)?t:g,k=a(g,h,l)||E;if(f)for(var n=d.length;n--;)f[n]=oa(d[n](g,h),e);oa(l,e);if(k){if(k.constructor===k)throw na("isecfn",e);if(k===Wf||k===Xf||k===Yf)throw na("isecff",e);}l=k.apply?k.apply(l,f):k(f[0],f[1],f[2],f[3],f[4]);f&&(f.length=0);return oa(l,e)}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))
+}this.consume("]");return w(function(c,d){for(var e=[],f=0,g=a.length;f<g;f++)e.push(a[f](c,d));return e},{literal:!0,constant:a.every(fc),inputs:a})},object:function(){var a=[],c=[];if("}"!==this.peekToken().text){do{if(this.peek("}"))break;var d=this.consume();d.constant?a.push(d.value):d.identifier?a.push(d.text):this.throwError("invalid key",d);this.consume(":");c.push(this.expression())}while(this.expect(","))}this.consume("}");return w(function(d,f){for(var g={},h=0,l=c.length;h<l;h++)g[a[h]]=
+c[h](d,f);return g},{literal:!0,constant:c.every(fc),inputs:c})}};var Bf=ia(),Af=ia(),Cf=Object.prototype.valueOf,Ba=R("$sce"),pa={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},la=R("$compile"),$=W.createElement("a"),id=Aa(Q.location.href);Fc.$inject=["$provide"];jd.$inject=["$locale"];ld.$inject=["$locale"];var od=".",Mf={yyyy:U("FullYear",4),yy:U("FullYear",2,0,!0),y:U("FullYear",1),MMMM:Jb("Month"),MMM:Jb("Month",!0),MM:U("Month",2,1),M:U("Month",1,1),dd:U("Date",2),d:U("Date",
+1),HH:U("Hours",2),H:U("Hours",1),hh:U("Hours",2,-12),h:U("Hours",1,-12),mm:U("Minutes",2),m:U("Minutes",1),ss:U("Seconds",2),s:U("Seconds",1),sss:U("Milliseconds",3),EEEE:Jb("Day"),EEE:Jb("Day",!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Ib(Math[0<a?"floor":"ceil"](a/60),2)+Ib(Math.abs(a%60),2))},ww:qd(2),w:qd(1),G:ic,GG:ic,GGG:ic,GGGG:function(a,c){return 0>=a.getFullYear()?c.ERANAMES[0]:c.ERANAMES[1]}},Lf=/((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,
+Kf=/^\-?\d+$/;kd.$inject=["$locale"];var Hf=ea(z),If=ea(ub);md.$inject=["$parse"];var Td=ea({restrict:"E",compile:function(a,c){if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){if("a"===c[0].nodeName.toLowerCase()){var f="[object SVGAnimatedString]"===Ca.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)||a.preventDefault()})}}}}),vb={};r(Eb,function(a,c){if("multiple"!=a){var d=xa("ng-"+c);vb[d]=function(){return{restrict:"A",priority:100,link:function(a,f,g){a.$watch(g[d],
+function(a){g.$set(c,!!a)})}}}}});r(Pc,function(a,c){vb[c]=function(){return{priority:100,link:function(a,e,f){if("ngPattern"===c&&"/"==f.ngPattern.charAt(0)&&(e=f.ngPattern.match(Of))){f.$set("ngPattern",new RegExp(e[1],e[2]));return}a.$watch(f[c],function(a){f.$set(c,a)})}}}});r(["src","srcset","href"],function(a){var c=xa("ng-"+a);vb[c]=function(){return{priority:99,link:function(d,e,f){var g=a,h=a;"href"===a&&"[object SVGAnimatedString]"===Ca.call(e.prop("href"))&&(h="xlinkHref",f.$attr[h]="xlink:href",
+g=null);f.$observe(c,function(c){c?(f.$set(h,c),Qa&&g&&e.prop(g,f[h])):"href"===a&&f.$set(h,null)})}}}});var Kb={$addControl:E,$$renameControl:function(a,c){a.$name=c},$removeControl:E,$setValidity:E,$setDirty:E,$setPristine:E,$setSubmitted:E};rd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var yd=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:rd,compile:function(d,e){d.addClass(Ra).addClass(lb);var f=e.name?"name":a&&e.ngForm?"ngForm":
+!1;return{pre:function(a,d,e,k){if(!("action"in e)){var n=function(c){a.$apply(function(){k.$commitViewValue();k.$setSubmitted()});c.preventDefault()};d[0].addEventListener("submit",n,!1);d.on("$destroy",function(){c(function(){d[0].removeEventListener("submit",n,!1)},0,!1)})}var p=k.$$parentForm;f&&(hb(a,null,k.$name,k,k.$name),e.$observe(f,function(c){k.$name!==c&&(hb(a,null,k.$name,t,k.$name),p.$$renameControl(k,c),hb(a,null,k.$name,k,k.$name))}));d.on("$destroy",function(){p.$removeControl(k);
+f&&hb(a,null,e[f],t,k.$name);w(k,Kb)})}}}}}]},Ud=yd(),ge=yd(!0),Nf=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,$f=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,ag=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,bg=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,zd=/^(\d{4})-(\d{2})-(\d{2})$/,Ad=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,lc=/^(\d{4})-W(\d\d)$/,Bd=/^(\d{4})-(\d\d)$/,
+Cd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Dd={text:function(a,c,d,e,f,g){jb(a,c,d,e,f,g);jc(e)},date:kb("date",zd,Mb(zd,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":kb("datetimelocal",Ad,Mb(Ad,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:kb("time",Cd,Mb(Cd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:kb("week",lc,function(a,c){if(ga(a))return a;if(C(a)){lc.lastIndex=0;var d=lc.exec(a);if(d){var e=+d[1],f=+d[2],g=d=0,h=0,l=0,k=pd(e),f=7*(f-1);c&&(d=c.getHours(),g=
+c.getMinutes(),h=c.getSeconds(),l=c.getMilliseconds());return new Date(e,0,k.getDate()+f,d,g,h,l)}}return NaN},"yyyy-Www"),month:kb("month",Bd,Mb(Bd,["yyyy","MM"]),"yyyy-MM"),number:function(a,c,d,e,f,g){td(a,c,d,e);jb(a,c,d,e,f,g);e.$$parserName="number";e.$parsers.push(function(a){return e.$isEmpty(a)?null:bg.test(a)?parseFloat(a):t});e.$formatters.push(function(a){if(!e.$isEmpty(a)){if(!Y(a))throw Nb("numfmt",a);a=a.toString()}return a});if(y(d.min)||d.ngMin){var h;e.$validators.min=function(a){return e.$isEmpty(a)||
+x(h)||a>=h};d.$observe("min",function(a){y(a)&&!Y(a)&&(a=parseFloat(a,10));h=Y(a)&&!isNaN(a)?a:t;e.$validate()})}if(y(d.max)||d.ngMax){var l;e.$validators.max=function(a){return e.$isEmpty(a)||x(l)||a<=l};d.$observe("max",function(a){y(a)&&!Y(a)&&(a=parseFloat(a,10));l=Y(a)&&!isNaN(a)?a:t;e.$validate()})}},url:function(a,c,d,e,f,g){jb(a,c,d,e,f,g);jc(e);e.$$parserName="url";e.$validators.url=function(a,c){var d=a||c;return e.$isEmpty(d)||$f.test(d)}},email:function(a,c,d,e,f,g){jb(a,c,d,e,f,g);jc(e);
+e.$$parserName="email";e.$validators.email=function(a,c){var d=a||c;return e.$isEmpty(d)||ag.test(d)}},radio:function(a,c,d,e){x(d.name)&&c.attr("name",++ob);c.on("click",function(a){c[0].checked&&e.$setViewValue(d.value,a&&a.type)});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e,f,g,h,l){var k=ud(l,a,"ngTrueValue",d.ngTrueValue,!0),n=ud(l,a,"ngFalseValue",d.ngFalseValue,!1);c.on("click",function(a){e.$setViewValue(c[0].checked,a&&
+a.type)});e.$render=function(){c[0].checked=e.$viewValue};e.$isEmpty=function(a){return!1===a};e.$formatters.push(function(a){return ha(a,k)});e.$parsers.push(function(a){return a?k:n})},hidden:E,button:E,submit:E,reset:E,file:E},zc=["$browser","$sniffer","$filter","$parse",function(a,c,d,e){return{restrict:"E",require:["?ngModel"],link:{pre:function(f,g,h,l){l[0]&&(Dd[z(h.type)]||Dd.text)(f,g,h,l[0],c,a,d,e)}}}}],cg=/^(true|false|\d+)$/,ye=function(){return{restrict:"A",priority:100,compile:function(a,
+c){return cg.test(c.ngValue)?function(a,c,f){f.$set("value",a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},Zd=["$compile",function(a){return{restrict:"AC",compile:function(c){a.$$addBindingClass(c);return function(c,e,f){a.$$addBindingInfo(e,f.ngBind);e=e[0];c.$watch(f.ngBind,function(a){e.textContent=a===t?"":a})}}}}],ae=["$interpolate","$compile",function(a,c){return{compile:function(d){c.$$addBindingClass(d);return function(d,f,g){d=a(f.attr(g.$attr.ngBindTemplate));
+c.$$addBindingInfo(f,d.expressions);f=f[0];g.$observe("ngBindTemplate",function(a){f.textContent=a===t?"":a})}}}}],$d=["$sce","$parse","$compile",function(a,c,d){return{restrict:"A",compile:function(e,f){var g=c(f.ngBindHtml),h=c(f.ngBindHtml,function(a){return(a||"").toString()});d.$$addBindingClass(e);return function(c,e,f){d.$$addBindingInfo(e,f.ngBindHtml);c.$watch(h,function(){e.html(a.getTrustedHtml(g(c))||"")})}}}}],xe=ea({restrict:"A",require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),
+be=kc("",!0),de=kc("Odd",0),ce=kc("Even",1),ee=Ia({compile:function(a,c){c.$set("ngCloak",t);a.removeClass("ng-cloak")}}),fe=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Ec={},dg={blur:!0,focus:!0};r("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=xa("ng-"+a);Ec[c]=["$parse","$rootScope",function(d,e){return{restrict:"A",compile:function(f,g){var h=
+d(g[c],null,!0);return function(c,d){d.on(a,function(d){var f=function(){h(c,{$event:d})};dg[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var ie=["$animate",function(a){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var h,l,k;c.$watch(e.ngIf,function(c){c?l||g(function(c,f){l=f;c[c.length++]=W.createComment(" end ngIf: "+e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)}):(k&&(k.remove(),k=null),l&&(l.$destroy(),l=null),h&&(k=
+tb(h.clone),a.leave(k).then(function(){k=null}),h=null))})}}}],je=["$templateRequest","$anchorScroll","$animate","$sce",function(a,c,d,e){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:ca.noop,compile:function(f,g){var h=g.ngInclude||g.src,l=g.onload||"",k=g.autoscroll;return function(f,g,q,r,s){var t=0,v,m,F,w=function(){m&&(m.remove(),m=null);v&&(v.$destroy(),v=null);F&&(d.leave(F).then(function(){m=null}),m=F,F=null)};f.$watch(e.parseAsResourceUrl(h),function(e){var h=
+function(){!y(k)||k&&!f.$eval(k)||c()},m=++t;e?(a(e,!0).then(function(a){if(m===t){var c=f.$new();r.template=a;a=s(c,function(a){w();d.enter(a,null,g).then(h)});v=c;F=a;v.$emit("$includeContentLoaded",e);f.$eval(l)}},function(){m===t&&(w(),f.$emit("$includeContentError",e))}),f.$emit("$includeContentRequested",e)):(w(),r.template=null)})}}}}],Ae=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,f){/SVG/.test(d[0].toString())?(d.empty(),a(Hc(f.template,
+W).childNodes)(c,function(a){d.append(a)},{futureParentElement:d})):(d.html(f.template),a(d.contents())(c))}}}],ke=Ia({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),we=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,c,d,e){var f=c.attr(d.$attr.ngList)||", ",g="false"!==d.ngTrim,h=g?N(f):f;e.$parsers.push(function(a){if(!x(a)){var c=[];a&&r(a.split(h),function(a){a&&c.push(g?N(a):a)});return c}});e.$formatters.push(function(a){return H(a)?
+a.join(f):t});e.$isEmpty=function(a){return!a||!a.length}}}},lb="ng-valid",vd="ng-invalid",Ra="ng-pristine",Lb="ng-dirty",xd="ng-pending",Nb=new R("ngModel"),eg=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,c,d,e,f,g,h,l,k,n){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=t;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;
+this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=t;this.$name=n(d.name||"",!1)(a);var p=f(d.ngModel),q=p.assign,u=p,s=q,M=null,v,m=this;this.$$setOptions=function(a){if((m.$options=a)&&a.getterSetter){var c=f(d.ngModel+"()"),g=f(d.ngModel+"($$$p)");u=function(a){var d=p(a);G(d)&&(d=c(a));return d};s=function(a,c){G(p(a))?g(a,{$$$p:m.$modelValue}):q(a,m.$modelValue)}}else if(!p.assign)throw Nb("nonassign",d.ngModel,wa(e));
+};this.$render=E;this.$isEmpty=function(a){return x(a)||""===a||null===a||a!==a};var F=e.inheritedData("$formController")||Kb,w=0;sd({ctrl:this,$element:e,set:function(a,c){a[c]=!0},unset:function(a,c){delete a[c]},parentForm:F,$animate:g});this.$setPristine=function(){m.$dirty=!1;m.$pristine=!0;g.removeClass(e,Lb);g.addClass(e,Ra)};this.$setDirty=function(){m.$dirty=!0;m.$pristine=!1;g.removeClass(e,Ra);g.addClass(e,Lb);F.$setDirty()};this.$setUntouched=function(){m.$touched=!1;m.$untouched=!0;g.setClass(e,
+"ng-untouched","ng-touched")};this.$setTouched=function(){m.$touched=!0;m.$untouched=!1;g.setClass(e,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){h.cancel(M);m.$viewValue=m.$$lastCommittedViewValue;m.$render()};this.$validate=function(){if(!Y(m.$modelValue)||!isNaN(m.$modelValue)){var a=m.$$rawModelValue,c=m.$valid,d=m.$modelValue,e=m.$options&&m.$options.allowInvalid;m.$$runValidators(a,m.$$lastCommittedViewValue,function(f){e||c===f||(m.$modelValue=f?a:t,m.$modelValue!==d&&m.$$writeModelToScope())})}};
+this.$$runValidators=function(a,c,d){function e(){var d=!0;r(m.$validators,function(e,f){var h=e(a,c);d=d&&h;g(f,h)});return d?!0:(r(m.$asyncValidators,function(a,c){g(c,null)}),!1)}function f(){var d=[],e=!0;r(m.$asyncValidators,function(f,h){var k=f(a,c);if(!k||!G(k.then))throw Nb("$asyncValidators",k);g(h,t);d.push(k.then(function(){g(h,!0)},function(a){e=!1;g(h,!1)}))});d.length?k.all(d).then(function(){h(e)},E):h(!0)}function g(a,c){l===w&&m.$setValidity(a,c)}function h(a){l===w&&d(a)}w++;var l=
+w;(function(){var a=m.$$parserName||"parse";if(v===t)g(a,null);else return v||(r(m.$validators,function(a,c){g(c,null)}),r(m.$asyncValidators,function(a,c){g(c,null)})),g(a,v),v;return!0})()?e()?f():h(!1):h(!1)};this.$commitViewValue=function(){var a=m.$viewValue;h.cancel(M);if(m.$$lastCommittedViewValue!==a||""===a&&m.$$hasNativeValidators)m.$$lastCommittedViewValue=a,m.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var c=m.$$lastCommittedViewValue;if(v=
+x(c)?t:!0)for(var d=0;d<m.$parsers.length;d++)if(c=m.$parsers[d](c),x(c)){v=!1;break}Y(m.$modelValue)&&isNaN(m.$modelValue)&&(m.$modelValue=u(a));var e=m.$modelValue,f=m.$options&&m.$options.allowInvalid;m.$$rawModelValue=c;f&&(m.$modelValue=c,m.$modelValue!==e&&m.$$writeModelToScope());m.$$runValidators(c,m.$$lastCommittedViewValue,function(a){f||(m.$modelValue=a?c:t,m.$modelValue!==e&&m.$$writeModelToScope())})};this.$$writeModelToScope=function(){s(a,m.$modelValue);r(m.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}})};
+this.$setViewValue=function(a,c){m.$viewValue=a;m.$options&&!m.$options.updateOnDefault||m.$$debounceViewValueCommit(c)};this.$$debounceViewValueCommit=function(c){var d=0,e=m.$options;e&&y(e.debounce)&&(e=e.debounce,Y(e)?d=e:Y(e[c])?d=e[c]:Y(e["default"])&&(d=e["default"]));h.cancel(M);d?M=h(function(){m.$commitViewValue()},d):l.$$phase?m.$commitViewValue():a.$apply(function(){m.$commitViewValue()})};a.$watch(function(){var c=u(a);if(c!==m.$modelValue){m.$modelValue=m.$$rawModelValue=c;v=t;for(var d=
+m.$formatters,e=d.length,f=c;e--;)f=d[e](f);m.$viewValue!==f&&(m.$viewValue=m.$$lastCommittedViewValue=f,m.$render(),m.$$runValidators(c,f,E))}return c})}],ve=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:eg,priority:1,compile:function(c){c.addClass(Ra).addClass("ng-untouched").addClass(lb);return{pre:function(a,c,f,g){var h=g[0],l=g[1]||Kb;h.$$setOptions(g[2]&&g[2].$options);l.$addControl(h);f.$observe("name",function(a){h.$name!==a&&l.$$renameControl(h,
+a)});a.$on("$destroy",function(){l.$removeControl(h)})},post:function(c,e,f,g){var h=g[0];if(h.$options&&h.$options.updateOn)e.on(h.$options.updateOn,function(a){h.$$debounceViewValueCommit(a&&a.type)});e.on("blur",function(e){h.$touched||(a.$$phase?c.$evalAsync(h.$setTouched):c.$apply(h.$setTouched))})}}}}}],fg=/(\s+|^)default(\s+|$)/,ze=function(){return{restrict:"A",controller:["$scope","$attrs",function(a,c){var d=this;this.$options=a.$eval(c.ngModelOptions);this.$options.updateOn!==t?(this.$options.updateOnDefault=
+!1,this.$options.updateOn=N(this.$options.updateOn.replace(fg,function(){d.$options.updateOnDefault=!0;return" "}))):this.$options.updateOnDefault=!0}]}},le=Ia({terminal:!0,priority:1E3}),me=["$locale","$interpolate",function(a,c){var d=/{}/g,e=/^when(Minus)?(.+)$/;return{restrict:"EA",link:function(f,g,h){function l(a){g.text(a||"")}var k=h.count,n=h.$attr.when&&g.attr(h.$attr.when),p=h.offset||0,q=f.$eval(n)||{},u={},n=c.startSymbol(),s=c.endSymbol(),t=n+k+"-"+p+s,v=ca.noop,m;r(h,function(a,c){var d=
+e.exec(c);d&&(d=(d[1]?"-":"")+z(d[2]),q[d]=g.attr(h.$attr[c]))});r(q,function(a,e){u[e]=c(a.replace(d,t))});f.$watch(k,function(c){c=parseFloat(c);var d=isNaN(c);d||c in q||(c=a.pluralCat(c-p));c===m||d&&isNaN(m)||(v(),v=f.$watch(u[c],l),m=c)})}}}],ne=["$parse","$animate",function(a,c){var d=R("ngRepeat"),e=function(a,c,d,e,k,n,p){a[d]=e;k&&(a[k]=n);a.$index=c;a.$first=0===c;a.$last=c===p-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(c&1))};return{restrict:"A",multiElement:!0,transclude:"element",
+priority:1E3,terminal:!0,$$tlb:!0,compile:function(f,g){var h=g.ngRepeat,l=W.createComment(" end ngRepeat: "+h+" "),k=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!k)throw d("iexp",h);var n=k[1],p=k[2],q=k[3],u=k[4],k=n.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);if(!k)throw d("iidexp",n);var s=k[3]||k[1],y=k[2];if(q&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(q)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(q)))throw d("badident",
+q);var v,m,w,x,E={$id:Ma};u?v=a(u):(w=function(a,c){return Ma(c)},x=function(a){return a});return function(a,f,g,k,n){v&&(m=function(c,d,e){y&&(E[y]=c);E[s]=d;E.$index=e;return v(a,E)});var u=ia();a.$watchCollection(p,function(g){var k,p,v=f[0],D,E=ia(),G,H,L,S,J,C,z;q&&(a[q]=g);if(Sa(g))J=g,p=m||w;else{p=m||x;J=[];for(z in g)g.hasOwnProperty(z)&&"$"!=z.charAt(0)&&J.push(z);J.sort()}G=J.length;z=Array(G);for(k=0;k<G;k++)if(H=g===J?k:J[k],L=g[H],S=p(H,L,k),u[S])C=u[S],delete u[S],E[S]=C,z[k]=C;else{if(E[S])throw r(z,
+function(a){a&&a.scope&&(u[a.id]=a)}),d("dupes",h,S,L);z[k]={id:S,scope:t,clone:t};E[S]=!0}for(D in u){C=u[D];S=tb(C.clone);c.leave(S);if(S[0].parentNode)for(k=0,p=S.length;k<p;k++)S[k].$$NG_REMOVED=!0;C.scope.$destroy()}for(k=0;k<G;k++)if(H=g===J?k:J[k],L=g[H],C=z[k],C.scope){D=v;do D=D.nextSibling;while(D&&D.$$NG_REMOVED);C.clone[0]!=D&&c.move(tb(C.clone),null,A(v));v=C.clone[C.clone.length-1];e(C.scope,k,s,L,y,H,G)}else n(function(a,d){C.scope=d;var f=l.cloneNode(!1);a[a.length++]=f;c.enter(a,
+null,A(v));v=f;C.clone=a;E[C.id]=C;e(C.scope,k,s,L,y,H,G)});u=E})}}}}],oe=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(c,d,e){c.$watch(e.ngShow,function(c){a[c?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],he=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(c,d,e){c.$watch(e.ngHide,function(c){a[c?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],pe=Ia(function(a,c,d){a.$watchCollection(d.ngStyle,
+function(a,d){d&&a!==d&&r(d,function(a,d){c.css(d,"")});a&&c.css(a)})}),qe=["$animate",function(a){return{restrict:"EA",require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(c,d,e,f){var g=[],h=[],l=[],k=[],n=function(a,c){return function(){a.splice(c,1)}};c.$watch(e.ngSwitch||e.on,function(c){var d,e;d=0;for(e=l.length;d<e;++d)a.cancel(l[d]);d=l.length=0;for(e=k.length;d<e;++d){var s=tb(h[d].clone);k[d].$destroy();(l[d]=a.leave(s)).then(n(l,d))}h.length=0;k.length=0;(g=
+f.cases["!"+c]||f.cases["?"])&&r(g,function(c){c.transclude(function(d,e){k.push(e);var f=c.element;d[d.length++]=W.createComment(" end ngSwitchWhen: ");h.push({clone:d});a.enter(d,f.parent(),f)})})})}}}],re=Ia({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,c,d,e,f){e.cases["!"+d.ngSwitchWhen]=e.cases["!"+d.ngSwitchWhen]||[];e.cases["!"+d.ngSwitchWhen].push({transclude:f,element:c})}}),se=Ia({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,
+link:function(a,c,d,e,f){e.cases["?"]=e.cases["?"]||[];e.cases["?"].push({transclude:f,element:c})}}),ue=Ia({restrict:"EAC",link:function(a,c,d,e,f){if(!f)throw R("ngTransclude")("orphan",wa(c));f(function(a){c.empty();c.append(a)})}}),Vd=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(c,d){"text/ng-template"==d.type&&a.put(d.id,c[0].text)}}}],gg=R("ngOptions"),te=ea({restrict:"A",terminal:!0}),Wd=["$compile","$parse",function(a,c){var d=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
+e={$setViewValue:E};return{restrict:"E",require:["select","?ngModel"],controller:["$element","$scope","$attrs",function(a,c,d){var l=this,k={},n=e,p;l.databound=d.ngModel;l.init=function(a,c,d){n=a;p=d};l.addOption=function(c,d){La(c,'"option value"');k[c]=!0;n.$viewValue==c&&(a.val(c),p.parent()&&p.remove());d&&d[0].hasAttribute("selected")&&(d[0].selected=!0)};l.removeOption=function(a){this.hasOption(a)&&(delete k[a],n.$viewValue===a&&this.renderUnknownOption(a))};l.renderUnknownOption=function(c){c=
+"? "+Ma(c)+" ?";p.val(c);a.prepend(p);a.val(c);p.prop("selected",!0)};l.hasOption=function(a){return k.hasOwnProperty(a)};c.$on("$destroy",function(){l.renderUnknownOption=E})}],link:function(e,g,h,l){function k(a,c,d,e){d.$render=function(){var a=d.$viewValue;e.hasOption(a)?(C.parent()&&C.remove(),c.val(a),""===a&&v.prop("selected",!0)):x(a)&&v?c.val(""):e.renderUnknownOption(a)};c.on("change",function(){a.$apply(function(){C.parent()&&C.remove();d.$setViewValue(c.val())})})}function n(a,c,d){var e;
+d.$render=function(){var a=new eb(d.$viewValue);r(c.find("option"),function(c){c.selected=y(a.get(c.value))})};a.$watch(function(){ha(e,d.$viewValue)||(e=sa(d.$viewValue),d.$render())});c.on("change",function(){a.$apply(function(){var a=[];r(c.find("option"),function(c){c.selected&&a.push(c.value)});d.$setViewValue(a)})})}function p(e,f,g){function h(a,c,d){T[x]=d;G&&(T[G]=c);return a(e,T)}function k(a){var c;if(u)if(I&&H(a)){c=new eb([]);for(var d=0;d<a.length;d++)c.put(h(I,null,a[d]),!0)}else c=
+new eb(a);else I&&(a=h(I,null,a));return function(d,e){var f;f=I?I:B?B:z;return u?y(c.remove(h(f,d,e))):a===h(f,d,e)}}function l(){m||(e.$$postDigest(p),m=!0)}function n(a,c,d){a[c]=a[c]||0;a[c]+=d?1:-1}function p(){m=!1;var a={"":[]},c=[""],d,l,s,t,v;s=g.$viewValue;t=L(e)||[];var B=G?Object.keys(t).sort():t,x,A,H,z,O={};v=k(s);var N=!1,U,W;Q={};for(z=0;H=B.length,z<H;z++){x=z;if(G&&(x=B[z],"$"===x.charAt(0)))continue;A=t[x];d=h(J,x,A)||"";(l=a[d])||(l=a[d]=[],c.push(d));d=v(x,A);N=N||d;A=h(C,x,A);
+A=y(A)?A:"";W=I?I(e,T):G?B[z]:z;I&&(Q[W]=x);l.push({id:W,label:A,selected:d})}u||(w||null===s?a[""].unshift({id:"",label:"",selected:!N}):N||a[""].unshift({id:"?",label:"",selected:!0}));x=0;for(B=c.length;x<B;x++){d=c[x];l=a[d];R.length<=x?(s={element:E.clone().attr("label",d),label:l.label},t=[s],R.push(t),f.append(s.element)):(t=R[x],s=t[0],s.label!=d&&s.element.attr("label",s.label=d));N=null;z=0;for(H=l.length;z<H;z++)d=l[z],(v=t[z+1])?(N=v.element,v.label!==d.label&&(n(O,v.label,!1),n(O,d.label,
+!0),N.text(v.label=d.label),N.prop("label",v.label)),v.id!==d.id&&N.val(v.id=d.id),N[0].selected!==d.selected&&(N.prop("selected",v.selected=d.selected),Qa&&N.prop("selected",v.selected))):(""===d.id&&w?U=w:(U=F.clone()).val(d.id).prop("selected",d.selected).attr("selected",d.selected).prop("label",d.label).text(d.label),t.push(v={element:U,label:d.label,id:d.id,selected:d.selected}),n(O,d.label,!0),N?N.after(U):s.element.append(U),N=U);for(z++;t.length>z;)d=t.pop(),n(O,d.label,!1),d.element.remove()}for(;R.length>
+x;){l=R.pop();for(z=1;z<l.length;++z)n(O,l[z].label,!1);l[0].element.remove()}r(O,function(a,c){0<a?q.addOption(c):0>a&&q.removeOption(c)})}var v;if(!(v=s.match(d)))throw gg("iexp",s,wa(f));var C=c(v[2]||v[1]),x=v[4]||v[6],A=/ as /.test(v[0])&&v[1],B=A?c(A):null,G=v[5],J=c(v[3]||""),z=c(v[2]?v[1]:x),L=c(v[7]),I=v[8]?c(v[8]):null,Q={},R=[[{element:f,label:""}]],T={};w&&(a(w)(e),w.removeClass("ng-scope"),w.remove());f.empty();f.on("change",function(){e.$apply(function(){var a=L(e)||[],c;if(u)c=[],r(f.val(),
+function(d){d=I?Q[d]:d;c.push("?"===d?t:""===d?null:h(B?B:z,d,a[d]))});else{var d=I?Q[f.val()]:f.val();c="?"===d?t:""===d?null:h(B?B:z,d,a[d])}g.$setViewValue(c);p()})});g.$render=p;e.$watchCollection(L,l);e.$watchCollection(function(){var a=L(e),c;if(a&&H(a)){c=Array(a.length);for(var d=0,f=a.length;d<f;d++)c[d]=h(C,d,a[d])}else if(a)for(d in c={},a)a.hasOwnProperty(d)&&(c[d]=h(C,d,a[d]));return c},l);u&&e.$watchCollection(function(){return g.$modelValue},l)}if(l[1]){var q=l[0];l=l[1];var u=h.multiple,
+s=h.ngOptions,w=!1,v,m=!1,F=A(W.createElement("option")),E=A(W.createElement("optgroup")),C=F.clone();h=0;for(var B=g.children(),G=B.length;h<G;h++)if(""===B[h].value){v=w=B.eq(h);break}q.init(l,w,C);u&&(l.$isEmpty=function(a){return!a||0===a.length});s?p(e,g,l):u?n(e,g,l):k(e,g,l,q)}}}}],Yd=["$interpolate",function(a){var c={addOption:E,removeOption:E};return{restrict:"E",priority:100,compile:function(d,e){if(x(e.value)){var f=a(d.text(),!0);f||e.$set("value",d.text())}return function(a,d,e){var k=
+d.parent(),n=k.data("$selectController")||k.parent().data("$selectController");n&&n.databound||(n=c);f?a.$watch(f,function(a,c){e.$set("value",a);c!==a&&n.removeOption(c);n.addOption(a,d)}):n.addOption(e.value,d);d.on("$destroy",function(){n.removeOption(e.value)})}}}}],Xd=ea({restrict:"E",terminal:!1}),Bc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){e&&(d.required=!0,e.$validators.required=function(a,c){return!d.required||!e.$isEmpty(c)},d.$observe("required",function(){e.$validate()}))}}},
+Ac=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f,g=d.ngPattern||d.pattern;d.$observe("pattern",function(a){C(a)&&0<a.length&&(a=new RegExp("^"+a+"$"));if(a&&!a.test)throw R("ngPattern")("noregexp",g,a,wa(c));f=a||t;e.$validate()});e.$validators.pattern=function(a){return e.$isEmpty(a)||x(f)||f.test(a)}}}}},Dc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=-1;d.$observe("maxlength",function(a){a=aa(a);f=isNaN(a)?-1:a;e.$validate()});
+e.$validators.maxlength=function(a,c){return 0>f||e.$isEmpty(c)||c.length<=f}}}}},Cc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=0;d.$observe("minlength",function(a){f=aa(a)||0;e.$validate()});e.$validators.minlength=function(a,c){return e.$isEmpty(c)||c.length>=f}}}}};Q.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):(Nd(),Pd(ca),A(W).ready(function(){Jd(W,uc)}))})(window,document);!window.angular.$$csp()&&window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}</style>');
+//# sourceMappingURL=angular.min.js.map
diff --git a/public/assets/plugins/angular-pdf/example/js/lib/angular.min.js.map b/public/assets/plugins/angular-pdf/example/js/lib/angular.min.js.map
new file mode 100644
index 0000000..b054603
--- /dev/null
+++ b/public/assets/plugins/angular-pdf/example/js/lib/angular.min.js.map
@@ -0,0 +1,8 @@
+{
+"version":3,
+"file":"angular.min.js",
+"lineCount":250,
+"mappings":"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",
+"sources":["angular.js"],
+"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","nodeType","NODE_TYPE_ELEMENT","isString","isArray","forEach","iterator","context","key","isFunction","hasOwnProperty","call","isPrimitive","forEachSorted","keys","Object","sort","i","reverseParams","iteratorFn","value","nextUid","uid","setHashKey","h","$$hashKey","extend","dst","ii","arguments","j","jj","int","str","parseInt","inherit","parent","extra","create","noop","identity","$","valueFn","isUndefined","isDefined","isObject","isNumber","isDate","toString","isRegExp","isScope","$evalAsync","$watch","isBoolean","isElement","node","nodeName","prop","attr","find","makeMap","items","split","nodeName_","element","lowercase","arrayRemove","array","index","indexOf","splice","copy","source","destination","stackSource","stackDest","ngMinErr","push","result","Date","getTime","RegExp","match","lastIndex","emptyObject","getPrototypeOf","shallowCopy","src","charAt","equals","o1","o2","t1","t2","keySet","concat","array1","array2","slice","bind","self","fn","curryArgs","startIndex","apply","toJsonReplacer","val","toJson","pretty","JSON","stringify","fromJson","json","parse","startingTag","jqLite","clone","empty","e","elemHtml","append","html","NODE_TYPE_TEXT","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","key_value","toKeyValue","parts","arrayValue","encodeUriQuery","join","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","getNgAttribute","ngAttr","ngAttrPrefixes","angularInit","bootstrap","appElement","module","config","prefix","name","hasAttribute","getAttribute","candidate","querySelector","strictDi","modules","defaultConfig","doBootstrap","injector","tag","unshift","$provide","debugInfoEnabled","$compileProvider","createInjector","invoke","bootstrapApply","scope","compile","$apply","data","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","test","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","resumeDeferredBootstrap","reloadWithDebugInfo","location","reload","getTestability","rootElement","get","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","bindJQuery","originalCleanData","bindJQueryFired","jQuery","on","JQLitePrototype","isolateScope","controller","inheritedData","cleanData","jQuery.cleanData","elems","events","skipDestroyOnNextJQueryCleanData","elem","_data","$destroy","triggerHandler","JQLite","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","constructor","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockNodes","nodes","endNode","blockNodes","nextSibling","createMap","setupModuleLoader","ensure","factory","$injectorMinErr","$$minErr","requires","configFn","invokeLater","provider","method","insertMethod","queue","invokeQueue","moduleInstance","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","service","constant","animation","filter","directive","run","block","publishExternalAPI","version","uppercase","counter","csp","angularModule","$LocaleProvider","ngModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","a","htmlAnchorDirective","input","inputDirective","textarea","form","formDirective","script","scriptDirective","select","selectDirective","style","styleDirective","option","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModel","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","pattern","patternDirective","ngPattern","required","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$anchorScroll","$AnchorScrollProvider","$animate","$AnimateProvider","$browser","$BrowserProvider","$cacheFactory","$CacheFactoryProvider","$controller","$ControllerProvider","$document","$DocumentProvider","$exceptionHandler","$ExceptionHandlerProvider","$filter","$FilterProvider","$interpolate","$InterpolateProvider","$interval","$IntervalProvider","$http","$HttpProvider","$httpBackend","$HttpBackendProvider","$location","$LocationProvider","$log","$LogProvider","$parse","$ParseProvider","$rootScope","$RootScopeProvider","$q","$QProvider","$$q","$$QProvider","$sce","$SceProvider","$sceDelegate","$SceDelegateProvider","$sniffer","$SnifferProvider","$templateCache","$TemplateCacheProvider","$templateRequest","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$timeout","$TimeoutProvider","$window","$WindowProvider","$$rAF","$$RAFProvider","$$asyncCallback","$$AsyncCallbackProvider","$$jqLite","$$jqLiteProvider","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLiteAcceptsData","NODE_TYPE_DOCUMENT","jqLiteBuildFragment","tmp","fragment","createDocumentFragment","HTML_REGEXP","appendChild","createElement","TAG_NAME_REGEXP","exec","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","lastChild","childNodes","firstChild","textContent","createTextNode","argIsString","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","jqLiteAddNodes","jqLiteClone","cloneNode","jqLiteDealoc","onlyDescendants","jqLiteRemoveData","querySelectorAll","descendants","l","jqLiteOff","type","unsupported","expandoStore","jqLiteExpandoStore","handle","listenerFns","removeEventListener","expandoId","ng339","jqCache","createIfNecessary","jqId","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","selector","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","elements","jqLiteController","jqLiteInheritedData","documentElement","names","parentNode","NODE_TYPE_DOCUMENT_FRAGMENT","host","jqLiteEmpty","removeChild","jqLiteRemove","keepData","jqLiteDocumentLoaded","action","win","readyState","setTimeout","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","getAliasedAttrName","ALIASED_ATTR","createEventHandler","eventHandler","event","isDefaultPrevented","event.isDefaultPrevented","defaultPrevented","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","stopImmediatePropagation","event.stopImmediatePropagation","stopPropagation","isImmediatePropagationStopped","event.isImmediatePropagationStopped","$get","this.$get","hasClass","classes","addClass","removeClass","hashKey","nextUidFn","objType","HashMap","isolatedUid","this.nextUid","put","anonFn","args","fnText","STRIP_COMMENTS","FN_ARGS","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","providerCache","providerSuffix","enforceReturnValue","enforcedReturnValue","instanceInjector","factoryFn","enforce","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","message","stack","createInternalInjector","cache","getService","serviceName","caller","INSTANTIATING","err","shift","locals","$inject","$$annotate","Type","instance","prototype","returnedValue","annotate","has","$injector","instanceCache","decorator","decorFn","origProvider","orig$get","origProvider.$get","origInstance","$delegate","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","getFirstAnchor","list","Array","some","scrollTo","scrollIntoView","scroll","yOffset","getComputedStyle","position","getBoundingClientRect","bottom","elemTop","top","scrollBy","hash","elm","getElementById","getElementsByName","autoScrollWatch","autoScrollWatchAction","newVal","oldVal","supported","Browser","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","startPoller","interval","check","pollFns","pollFn","pollTimeout","cacheStateAndFireUrlChange","cacheState","fireUrlChange","history","state","cachedState","lastCachedState","lastBrowserUrl","url","lastHistoryState","urlChangeListeners","listener","safeDecodeURIComponent","rawDocument","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","addPollFn","self.addPollFn","href","baseElement","reloadLocation","self.url","sameState","sameBase","stripHash","substr","self.state","urlChangeInit","onUrlChange","self.onUrlChange","$$checkUrlChange","baseHref","self.baseHref","lastCookies","lastCookieString","cookiePath","cookies","self.cookies","cookieLength","cookie","warn","cookieArray","substring","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","cacheFactory","cacheId","options","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","id","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$$sanitizeUriProvider","parseIsolateBindings","directiveName","LOCAL_REGEXP","bindings","definition","scopeName","$compileMinErr","mode","collection","optional","attrName","hasDirectives","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","REQUIRE_PREFIX_REGEXP","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","Suffix","directives","priority","require","restrict","$$isolateBindings","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","this.debugInfoEnabled","enabled","safeAddClass","$element","className","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","nodeValue","compositeLinkFn","compileNodes","$$addScopeClass","namespace","publicLinkFn","cloneConnectFn","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","$linkNode","wrapTemplate","controllerName","$$addScopeInfo","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","linkFns","idx","nodeLinkFn","$new","transcludeOnThisElement","createBoundTranscludeFn","transclude","elementTranscludeOnThisElement","templateOnThisElement","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","$$element","terminal","previousBoundTranscludeFn","elementTransclusion","boundTranscludeFn","transcludedScope","cloneFn","controllers","containingScope","$$transcluded","attrsMap","$attr","addDirective","directiveNormalize","isNgAttr","nAttrs","attributes","attrStartName","attrEndName","ngAttrName","NG_ATTR_BINDING","PREFIX_REGEXP","directiveNName","directiveIsMultiElement","nName","addAttrInterpolateDirective","animVal","addTextInterpolateDirective","NODE_TYPE_COMMENT","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","linkFn","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","elementControllers","retrievalMethod","$searchElement","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","scopeToChild","controllerDirectives","$scope","$attrs","$transclude","controllerInstance","controllerAs","templateDirective","$$originalDirective","isolateScopeController","isolateBindingContext","identifier","bindToController","lastValue","parentGet","parentSet","compare","$observe","$$observers","$$scope","literal","b","assign","parentValueWatch","parentValue","$stateful","unwatch","$watchCollection","$on","invokeLinkFn","template","templateUrl","terminalPriority","newScopeDirective","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","$$start","$$end","directiveValue","assertNoDuplicate","$$tlb","createComment","replaceWith","replaceDirective","contents","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectivesAsIsolate","mergeTemplateAttributes","compileTemplateUrl","Math","max","tDirectives","startAttrName","endAttrName","multiElement","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","getTrustedResourceUrl","then","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","delayedNodeLinkFn","ignoreChildLinkFn","diff","what","previousDirective","text","interpolateFn","textInterpolateCompileFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","textInterpolateLinkFn","$$addBindingInfo","expressions","interpolateFnWatchAction","wrapper","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","allOrNothing","trustedContext","attrInterpolatePreLinkFn","newValue","$$inter","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","replaceChild","expando","k","kk","annotation","attributesToCopy","$normalize","$addClass","classVal","$removeClass","newClasses","toAdd","tokenDifference","toRemove","writeAttr","booleanKey","aliasedKey","observer","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","floor","innerIdx","lastTuple","removeAttr","listeners","startSymbol","endSymbol","binding","isolated","noTemplate","dataName","str1","str2","values","tokens1","tokens2","token","jqNodes","globals","CNTRL_REG","register","this.register","allowGlobals","this.allowGlobals","addIdentifier","expression","later","ident","$controllerMinErr","controllerPrototype","exception","cause","defaultHttpResponseTransform","headers","tempData","JSON_PROTECTION_PREFIX","contentType","jsonStart","JSON_START","JSON_ENDS","parseHeaders","line","headersGetter","headersObj","transformData","status","fns","defaults","transformResponse","transformRequest","d","common","CONTENT_TYPE_APPLICATION_JSON","patch","xsrfCookieName","xsrfHeaderName","useApplyAsync","this.useApplyAsync","interceptorFactories","interceptors","requestConfig","response","resp","reject","executeHeaderFns","headerContent","processedHeaders","headerFn","header","mergeHeaders","defHeaders","reqHeaders","defHeaderName","reqHeaderName","lowercaseDefHeaderName","chain","serverRequest","reqData","withCredentials","sendReq","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","success","promise.success","promise.error","done","headersString","statusText","resolveHttpPromise","resolvePromise","$applyAsync","$$phase","deferred","resolve","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","buildUrl","params","defaultCache","xsrfValue","urlIsSameOrigin","timeout","responseType","v","toISOString","interceptorFactory","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","createHttpBackend","callbacks","$browserDefer","jsonpReq","callbackId","async","body","called","addEventListener","timeoutRequest","jsonpDone","xhr","abort","completeRequest","open","setRequestHeader","onload","xhr.onload","responseText","urlResolve","protocol","getAllResponseHeaders","onerror","onabort","send","this.startSymbol","this.endSymbol","escape","ch","mustHaveExpression","unescapeText","escapedStartRegexp","escapedEndRegexp","parseStringifyInterceptor","getTrusted","valueOf","newErr","$interpolateMinErr","endIndex","parseFns","textLength","expressionPositions","startSymbolLength","exp","endSymbolLength","compute","interpolationFn","$$watchDelegate","objectEquality","$watchGroup","interpolateFnWatcher","oldValues","currValue","$interpolate.startSymbol","$interpolate.endSymbol","count","invokeApply","setInterval","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","NUMBER_FORMATS","DECIMAL_SEP","GROUP_SEP","PATTERNS","minInt","minFrac","maxFrac","posPre","posSuf","negPre","negSuf","gSize","lgSize","CURRENCY_SYM","DATETIME_FORMATS","MONTH","SHORTMONTH","DAY","SHORTDAY","AMPMS","medium","fullDate","longDate","mediumDate","shortDate","mediumTime","shortTime","ERANAMES","ERAS","pluralCat","num","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","trimEmptyHash","stripFile","lastIndexOf","LocationHtml5Url","appBase","basePrefix","$$html5","appBaseNoFile","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$parseLinkUrl","this.$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","html5Mode","requireBase","rewriteLinks","this.hashPrefix","this.html5Mode","setBrowserUrlWithFallback","oldUrl","oldState","$$state","afterLocationChange","$broadcast","absUrl","LocationMode","initialUrl","IGNORE_URI_REGEXP","ctrlKey","metaKey","shiftKey","which","button","target","absHref","preventDefault","initializing","newUrl","newState","$digest","$locationWatch","currentReplace","$$replace","urlOrStateChanged","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","ensureSafeMemberName","fullExpression","$parseMinErr","ensureSafeObject","children","isConstant","setter","setValue","fullExp","propertyObj","isPossiblyDangerousMemberName","cspSafeGetterFn","key0","key1","key2","key3","key4","expensiveChecks","eso","o","eso0","eso1","eso2","eso3","eso4","cspSafeGetter","pathVal","getterFnWithEnsureSafeObject","s","getterFn","getterFnCache","getterFnCacheExpensive","getterFnCacheDefault","pathKeys","pathKeysLength","code","needsEnsureSafeObject","lookupJs","evaledFnGetter","Function","sharedGetter","fn.assign","getValueOf","objectValueOf","cacheDefault","cacheExpensive","wrapSharedExpression","wrapped","collectExpressionInputs","inputs","expressionInputDirtyCheck","oldValueOfValue","inputsWatchDelegate","parsedExpression","inputExpressions","$$inputs","lastResult","oldInputValue","expressionInputWatch","newInputValue","oldInputValueOfValues","expressionInputsWatch","changed","oneTimeWatchDelegate","oneTimeWatch","oneTimeListener","old","$$postDigest","oneTimeLiteralWatchDelegate","isAllDefined","allDefined","constantWatchDelegate","constantWatch","constantListener","addInterceptor","interceptorFn","watchDelegate","regularInterceptedExpression","oneTimeInterceptedExpression","$parseOptions","$parseOptionsExpensive","oneTime","cacheKey","parseOptions","lexer","Lexer","parser","Parser","qFactory","nextTick","exceptionHandler","callOnce","resolveFn","Promise","simpleBind","scheduleProcessQueue","processScheduled","pending","Deferred","$qMinErr","TypeError","onFulfilled","onRejected","progressBack","catch","finally","handleCallback","$$reject","$$resolve","progress","makePromise","resolved","isResolved","callbackOutput","errback","$Q","Q","resolver","all","promises","results","requestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","timer","createChildScopeClass","ChildScope","$$watchers","$$nextSibling","$$childHead","$$childTail","$$listeners","$$listenerCount","$$watchersCount","$id","$$ChildScope","TTL","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","this.digestTtl","destroyChildScope","$event","currentScope","Scope","$parent","$$prevSibling","$root","beginPhase","phase","decrementListenerCount","current","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","child","watchExp","watcher","last","eq","deregisterWatch","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","newValues","deregisterFns","shouldCall","deregisterWatchGroup","expr","unwatchFn","watchGroupSubAction","$watchCollectionInterceptor","_value","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","newLength","internalObject","veryOldValue","trackVeryOldValue","changeDetector","initRun","$watchCollectionAction","watch","watchers","dirty","ttl","watchLog","logIdx","asyncTask","asyncQueue","$eval","isNaN","msg","next","postDigestQueue","eventName","this.$watchGroup","$applyAsyncExpression","namedListeners","indexOfListener","$emit","targetScope","listenerArgs","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","escapeForRegexp","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","matchUrl","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","Constructor","maybeTrusted","allowed","this.enabled","msie","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","enumValue","lName","eventSupport","android","userAgent","navigator","boxee","vendorPrefix","vendorRegex","bodyStyle","transitions","animations","webkitTransition","webkitAnimation","pushState","hasEvent","divElm","handleRequestFn","tpl","ignoreRequestError","totalPendingRequests","transformer","httpOptions","handleError","testability","testability.findBindings","opt_exactMatch","getElementsByClassName","matches","dataBinding","bindingName","testability.findModels","prefixes","attributeEquals","testability.getLocation","testability.setLocation","testability.whenStable","deferreds","$$timeoutId","timeout.cancel","urlParsingNode","requestUrl","originUrl","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","matchAgainstAnyProp","predicateFn","createPredicateFn","shouldMatchPrimitives","actual","expected","item","deepCompare","dontMatchWholeObject","actualType","expectedType","expectedVal","matchAnyProperty","actualVal","$locale","formats","amount","currencySymbol","fractionSize","formatNumber","number","groupSep","decimalSep","isFinite","isNegative","abs","numStr","formatedText","hasExponent","toFixed","parseFloat","fractionLen","min","round","fraction","lgroup","group","padNumber","digits","neg","dateGetter","date","dateStrGetter","shortForm","getFirstThursdayOfYear","year","dayOfWeekOnFirst","getDay","weekGetter","firstThurs","getFullYear","thisThurs","getMonth","getDate","eraGetter","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","ms","format","timezone","NUMBER_STRING","DATE_FORMATS_SPLIT","setMinutes","getMinutes","getTimezoneOffset","DATE_FORMATS","object","spacing","limit","Infinity","sortPredicate","reverseOrder","reverseComparator","comp","descending","objectToString","v1","v2","map","predicate","ngDirective","FormController","controls","parentForm","$$parentForm","nullFormCtrl","$error","$$success","$pending","$name","$dirty","$pristine","$valid","$invalid","$submitted","$addControl","$rollbackViewValue","form.$rollbackViewValue","control","$commitViewValue","form.$commitViewValue","form.$addControl","$$renameControl","form.$$renameControl","newName","oldName","$removeControl","form.$removeControl","$setValidity","addSetValidityMethod","ctrl","set","unset","$setDirty","form.$setDirty","PRISTINE_CLASS","DIRTY_CLASS","$setPristine","form.$setPristine","setClass","SUBMITTED_CLASS","$setUntouched","form.$setUntouched","$setSubmitted","form.$setSubmitted","stringBasedInputType","$formatters","$isEmpty","baseInputType","composing","ev","ngTrim","$viewValue","$$hasNativeValidators","$setViewValue","deferListener","origValue","keyCode","$render","ctrl.$render","createDateParser","mapping","iso","ISO_DATE_REGEXP","yyyy","MM","dd","HH","getHours","mm","ss","getSeconds","sss","getMilliseconds","part","NaN","createDateInputType","parseDate","dynamicDateInputType","isValidDate","parseObservedDateValue","badInputChecker","$options","previousDate","$$parserName","$parsers","parsedDate","$ngModelMinErr","timezoneOffset","ngMin","minVal","$validators","ctrl.$validators.min","$validate","ngMax","maxVal","ctrl.$validators.max","validity","VALIDITY_STATE_PROPERTY","badInput","typeMismatch","parseConstantExpr","fallback","parseFn","classDirective","arrayDifference","arrayClasses","digestClassCounts","classCounts","classesToUpdate","ngClassWatchAction","$index","old$index","mod","cachedToggleClass","switchValue","classCache","toggleValidationCss","validationErrorKey","isValid","VALID_CLASS","INVALID_CLASS","setValidity","isObjectEmpty","PENDING_CLASS","combinedState","REGEX_STRING_REGEXP","documentMode","isActive_","active","full","major","minor","dot","codeName","JQLite._data","MOUSE_EVENT_MAP","mouseleave","mouseenter","optgroup","tbody","tfoot","colgroup","caption","thead","th","td","ready","trigger","fired","removeData","removeAttribute","css","lowercasedName","specified","getNamedItem","ret","getText","$dv","multiple","selected","nodeCount","jqLiteOn","types","related","relatedTarget","contains","off","one","onFn","replaceNode","insertBefore","contentDocument","prepend","wrapNode","detach","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventFnsCopy","arg3","unbind","FN_ARG_SPLIT","FN_ARG","argDecl","underscore","$animateMinErr","$$selectors","classNameFilter","this.classNameFilter","$$classNameFilter","runAnimationPostDigest","cancelFn","$$cancelFn","defer.promise.$$cancelFn","ngAnimatePostDigest","ngAnimateNotifyComplete","resolveElementClasses","hasClasses","cachedClassManipulation","op","asyncPromise","currentDefer","applyStyles","styles","from","to","animate","enter","leave","move","$$addClassImmediately","$$removeClassImmediately","add","createdCache","STORAGE_KEY","$$setClassImmediately","APPLICATION_JSON","PATH_MATCH","locationPrototype","paramValue","Location","Location.prototype.state","CALL","APPLY","BIND","CONSTANTS","null","true","false","constantGetter","OPERATORS","+","-","*","/","%","===","!==","==","!=","<",">","<=",">=","&&","||","!","ESCAPE","lex","tokens","readString","peek","readNumber","isIdent","readIdent","is","isWhitespace","ch2","ch3","op2","op3","op1","operator","throwError","chars","isExpOperator","start","end","colStr","peekCh","quote","rawString","hex","String","fromCharCode","rep","ZERO","statements","primary","expect","filterChain","consume","arrayDeclaration","functionCall","objectIndex","fieldAccess","peekToken","e1","e2","e3","e4","peekAhead","t","unaryFn","right","$parseUnaryFn","binaryFn","left","isBranching","$parseBinaryFn","$parseConstant","$parseStatements","inputFn","argsFn","$parseFilter","every","assignment","ternary","$parseAssignment","logicalOR","middle","$parseTernary","logicalAND","equality","relational","additive","multiplicative","unary","$parseFieldAccess","indexFn","$parseObjectIndex","fnGetter","contextGetter","expressionText","$parseFunctionCall","elementFns","$parseArrayLiteral","valueFns","$parseObjectLiteral","yy","y","MMMM","MMM","M","H","hh","EEEE","EEE","ampmGetter","Z","timeZoneGetter","zone","paddedZone","ww","w","G","GG","GGG","GGGG","longEraGetter","xlinkHref","propName","normalized","ngBooleanAttrWatchAction","htmlAttr","ngAttrAliasWatchAction","nullFormRenameControl","formDirectiveFactory","isNgForm","ngFormCompile","formElement","nameAttr","ngFormPreLink","handleFormSubmission","parentFormCtrl","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","textInputType","weekParser","isoWeek","existingDate","week","minutes","hours","seconds","milliseconds","addDays","numberInputType","urlInputType","ctrl.$validators.url","modelValue","viewValue","emailInputType","email","ctrl.$validators.email","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","ctrls","CONSTANT_VALUE_REGEXP","tplAttr","ngValueConstantLink","ngValueLink","valueWatchAction","$compile","ngBindCompile","templateElement","ngBindLink","ngBindWatchAction","ngBindTemplateCompile","ngBindTemplateLink","ngBindHtmlCompile","tElement","ngBindHtmlGetter","ngBindHtmlWatch","getStringValue","ngBindHtmlLink","ngBindHtmlWatchAction","getTrustedHtml","$viewChangeListeners","forceAsyncEvents","ngEventHandler","previousElements","ngIfWatchAction","newScope","srcExp","onloadExp","autoScrollExp","autoscroll","changeCounter","previousElement","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","ngIncludeWatchAction","afterAnimation","thisChangeId","namespaceAdaptedClone","trimValues","NgModelController","$modelValue","$$rawModelValue","$asyncValidators","$untouched","$touched","parsedNgModel","parsedNgModelAssign","ngModelGet","ngModelSet","pendingDebounce","parserValid","$$setOptions","this.$$setOptions","getterSetter","invokeModelGetter","invokeModelSetter","$$$p","this.$isEmpty","currentValidationRunId","this.$setPristine","this.$setDirty","this.$setUntouched","UNTOUCHED_CLASS","TOUCHED_CLASS","$setTouched","this.$setTouched","this.$rollbackViewValue","$$lastCommittedViewValue","this.$validate","prevValid","prevModelValue","allowInvalid","$$runValidators","allValid","$$writeModelToScope","this.$$runValidators","doneCallback","processSyncValidators","syncValidatorsValid","validator","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","processParseErrors","errorKey","this.$commitViewValue","$$parseAndValidate","this.$$parseAndValidate","this.$$writeModelToScope","this.$setViewValue","updateOnDefault","$$debounceViewValueCommit","this.$$debounceViewValueCommit","debounceDelay","debounce","ngModelWatch","formatters","ngModelCompile","ngModelPreLink","modelCtrl","formCtrl","ngModelPostLink","updateOn","DEFAULT_REGEXP","that","BRACE","IS_WHEN","updateElementText","newText","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","lastCount","attributeName","tmpMatch","whenKey","ngPluralizeWatchAction","countIsNaN","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","ngRepeatCompile","ngRepeatEndComment","lhs","rhs","aliasAs","trackByExp","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","hashFnLocals","ngRepeatLink","lastBlockMap","ngRepeatAction","previousNode","nextNode","nextBlockMap","collectionLength","trackById","collectionKeys","nextBlockOrder","trackByIdFn","itemKey","blockKey","ngRepeatTransclude","ngShowWatchAction","NG_HIDE_CLASS","tempClasses","NG_HIDE_IN_PROGRESS_CLASS","ngHideWatchAction","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","ngSwitchWatchAction","selectedTransclude","caseElement","selectedScope","anchor","ngOptionsMinErr","NG_OPTIONS_REGEXP","nullModelCtrl","optionsMap","ngModelCtrl","unknownOption","databound","init","self.init","ngModelCtrl_","nullOption_","unknownOption_","addOption","self.addOption","removeOption","self.removeOption","hasOption","renderUnknownOption","self.renderUnknownOption","unknownVal","self.hasOption","setupAsSingle","selectElement","selectCtrl","ngModelCtrl.$render","emptyOption","setupAsMultiple","lastView","selectMultipleWatch","setupAsOptions","callExpression","exprFn","valueName","keyName","createIsSelectedFn","selectedSet","trackFn","trackIndex","isSelected","compareValueFn","selectAsFn","scheduleRendering","renderScheduled","render","updateLabelMap","labelMap","label","added","optionGroups","optionGroupNames","optionGroupName","optionGroup","existingParent","existingOptions","existingOption","valuesFn","anySelected","optionId","trackKeysCache","groupByFn","displayFn","nullOption","groupIndex","groupLength","optionGroupsCache","optGroupTemplate","lastElement","optionTemplate","optionsExp","selectAs","track","selectionChanged","selectedKey","viewValueFn","getLabels","toDisplay","ngModelCtrl.$isEmpty","nullSelectCtrl","selectCtrlName","interpolateWatchAction","ctrl.$validators.required","patternExp","ctrl.$validators.pattern","intVal","ctrl.$validators.maxlength","ctrl.$validators.minlength","$$csp"]
+}
diff --git a/public/assets/plugins/angular-pdf/example/js/lib/pdf.js b/public/assets/plugins/angular-pdf/example/js/lib/pdf.js
new file mode 100644
index 0000000..42fafd3
--- /dev/null
+++ b/public/assets/plugins/angular-pdf/example/js/lib/pdf.js
@@ -0,0 +1,8021 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+/* Copyright 2012 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*jshint globalstrict: false */
+/* globals PDFJS */
+
+// Initializing PDFJS global object (if still undefined)
+if (typeof PDFJS === 'undefined') {
+  (typeof window !== 'undefined' ? window : this).PDFJS = {};
+}
+
+PDFJS.version = '1.1.159';
+PDFJS.build = '82536f8';
+
+(function pdfjsWrapper() {
+  // Use strict in our context only - users might not want it
+  'use strict';
+
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+/* Copyright 2012 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* globals Cmd, ColorSpace, Dict, MozBlobBuilder, Name, PDFJS, Ref, URL,
+           Promise */
+
+'use strict';
+
+var globalScope = (typeof window === 'undefined') ? this : window;
+
+var isWorker = (typeof window === 'undefined');
+
+var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
+
+var TextRenderingMode = {
+  FILL: 0,
+  STROKE: 1,
+  FILL_STROKE: 2,
+  INVISIBLE: 3,
+  FILL_ADD_TO_PATH: 4,
+  STROKE_ADD_TO_PATH: 5,
+  FILL_STROKE_ADD_TO_PATH: 6,
+  ADD_TO_PATH: 7,
+  FILL_STROKE_MASK: 3,
+  ADD_TO_PATH_FLAG: 4
+};
+
+var ImageKind = {
+  GRAYSCALE_1BPP: 1,
+  RGB_24BPP: 2,
+  RGBA_32BPP: 3
+};
+
+var AnnotationType = {
+  WIDGET: 1,
+  TEXT: 2,
+  LINK: 3
+};
+
+var StreamType = {
+  UNKNOWN: 0,
+  FLATE: 1,
+  LZW: 2,
+  DCT: 3,
+  JPX: 4,
+  JBIG: 5,
+  A85: 6,
+  AHX: 7,
+  CCF: 8,
+  RL: 9
+};
+
+var FontType = {
+  UNKNOWN: 0,
+  TYPE1: 1,
+  TYPE1C: 2,
+  CIDFONTTYPE0: 3,
+  CIDFONTTYPE0C: 4,
+  TRUETYPE: 5,
+  CIDFONTTYPE2: 6,
+  TYPE3: 7,
+  OPENTYPE: 8,
+  TYPE0: 9,
+  MMTYPE1: 10
+};
+
+// The global PDFJS object exposes the API
+// In production, it will be declared outside a global wrapper
+// In development, it will be declared here
+if (!globalScope.PDFJS) {
+  globalScope.PDFJS = {};
+}
+
+globalScope.PDFJS.pdfBug = false;
+
+PDFJS.VERBOSITY_LEVELS = {
+  errors: 0,
+  warnings: 1,
+  infos: 5
+};
+
+// All the possible operations for an operator list.
+var OPS = PDFJS.OPS = {
+  // Intentionally start from 1 so it is easy to spot bad operators that will be
+  // 0's.
+  dependency: 1,
+  setLineWidth: 2,
+  setLineCap: 3,
+  setLineJoin: 4,
+  setMiterLimit: 5,
+  setDash: 6,
+  setRenderingIntent: 7,
+  setFlatness: 8,
+  setGState: 9,
+  save: 10,
+  restore: 11,
+  transform: 12,
+  moveTo: 13,
+  lineTo: 14,
+  curveTo: 15,
+  curveTo2: 16,
+  curveTo3: 17,
+  closePath: 18,
+  rectangle: 19,
+  stroke: 20,
+  closeStroke: 21,
+  fill: 22,
+  eoFill: 23,
+  fillStroke: 24,
+  eoFillStroke: 25,
+  closeFillStroke: 26,
+  closeEOFillStroke: 27,
+  endPath: 28,
+  clip: 29,
+  eoClip: 30,
+  beginText: 31,
+  endText: 32,
+  setCharSpacing: 33,
+  setWordSpacing: 34,
+  setHScale: 35,
+  setLeading: 36,
+  setFont: 37,
+  setTextRenderingMode: 38,
+  setTextRise: 39,
+  moveText: 40,
+  setLeadingMoveText: 41,
+  setTextMatrix: 42,
+  nextLine: 43,
+  showText: 44,
+  showSpacedText: 45,
+  nextLineShowText: 46,
+  nextLineSetSpacingShowText: 47,
+  setCharWidth: 48,
+  setCharWidthAndBounds: 49,
+  setStrokeColorSpace: 50,
+  setFillColorSpace: 51,
+  setStrokeColor: 52,
+  setStrokeColorN: 53,
+  setFillColor: 54,
+  setFillColorN: 55,
+  setStrokeGray: 56,
+  setFillGray: 57,
+  setStrokeRGBColor: 58,
+  setFillRGBColor: 59,
+  setStrokeCMYKColor: 60,
+  setFillCMYKColor: 61,
+  shadingFill: 62,
+  beginInlineImage: 63,
+  beginImageData: 64,
+  endInlineImage: 65,
+  paintXObject: 66,
+  markPoint: 67,
+  markPointProps: 68,
+  beginMarkedContent: 69,
+  beginMarkedContentProps: 70,
+  endMarkedContent: 71,
+  beginCompat: 72,
+  endCompat: 73,
+  paintFormXObjectBegin: 74,
+  paintFormXObjectEnd: 75,
+  beginGroup: 76,
+  endGroup: 77,
+  beginAnnotations: 78,
+  endAnnotations: 79,
+  beginAnnotation: 80,
+  endAnnotation: 81,
+  paintJpegXObject: 82,
+  paintImageMaskXObject: 83,
+  paintImageMaskXObjectGroup: 84,
+  paintImageXObject: 85,
+  paintInlineImageXObject: 86,
+  paintInlineImageXObjectGroup: 87,
+  paintImageXObjectRepeat: 88,
+  paintImageMaskXObjectRepeat: 89,
+  paintSolidColorImageMask: 90,
+  constructPath: 91
+};
+
+// A notice for devs. These are good for things that are helpful to devs, such
+// as warning that Workers were disabled, which is important to devs but not
+// end users.
+function info(msg) {
+  if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.infos) {
+    console.log('Info: ' + msg);
+  }
+}
+
+// Non-fatal warnings.
+function warn(msg) {
+  if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.warnings) {
+    console.log('Warning: ' + msg);
+  }
+}
+
+// Fatal errors that should trigger the fallback UI and halt execution by
+// throwing an exception.
+function error(msg) {
+  if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.errors) {
+    console.log('Error: ' + msg);
+    console.log(backtrace());
+  }
+  UnsupportedManager.notify(UNSUPPORTED_FEATURES.unknown);
+  throw new Error(msg);
+}
+
+function backtrace() {
+  try {
+    throw new Error();
+  } catch (e) {
+    return e.stack ? e.stack.split('\n').slice(2).join('\n') : '';
+  }
+}
+
+function assert(cond, msg) {
+  if (!cond) {
+    error(msg);
+  }
+}
+
+var UNSUPPORTED_FEATURES = PDFJS.UNSUPPORTED_FEATURES = {
+  unknown: 'unknown',
+  forms: 'forms',
+  javaScript: 'javaScript',
+  smask: 'smask',
+  shadingPattern: 'shadingPattern',
+  font: 'font'
+};
+
+var UnsupportedManager = PDFJS.UnsupportedManager =
+  (function UnsupportedManagerClosure() {
+  var listeners = [];
+  return {
+    listen: function (cb) {
+      listeners.push(cb);
+    },
+    notify: function (featureId) {
+      warn('Unsupported feature "' + featureId + '"');
+      for (var i = 0, ii = listeners.length; i < ii; i++) {
+        listeners[i](featureId);
+      }
+    }
+  };
+})();
+
+// Combines two URLs. The baseUrl shall be absolute URL. If the url is an
+// absolute URL, it will be returned as is.
+function combineUrl(baseUrl, url) {
+  if (!url) {
+    return baseUrl;
+  }
+  if (/^[a-z][a-z0-9+\-.]*:/i.test(url)) {
+    return url;
+  }
+  var i;
+  if (url.charAt(0) === '/') {
+    // absolute path
+    i = baseUrl.indexOf('://');
+    if (url.charAt(1) === '/') {
+      ++i;
+    } else {
+      i = baseUrl.indexOf('/', i + 3);
+    }
+    return baseUrl.substring(0, i) + url;
+  } else {
+    // relative path
+    var pathLength = baseUrl.length;
+    i = baseUrl.lastIndexOf('#');
+    pathLength = i >= 0 ? i : pathLength;
+    i = baseUrl.lastIndexOf('?', pathLength);
+    pathLength = i >= 0 ? i : pathLength;
+    var prefixLength = baseUrl.lastIndexOf('/', pathLength);
+    return baseUrl.substring(0, prefixLength + 1) + url;
+  }
+}
+
+// Validates if URL is safe and allowed, e.g. to avoid XSS.
+function isValidUrl(url, allowRelative) {
+  if (!url) {
+    return false;
+  }
+  // RFC 3986 (http://tools.ietf.org/html/rfc3986#section-3.1)
+  // scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
+  var protocol = /^[a-z][a-z0-9+\-.]*(?=:)/i.exec(url);
+  if (!protocol) {
+    return allowRelative;
+  }
+  protocol = protocol[0].toLowerCase();
+  switch (protocol) {
+    case 'http':
+    case 'https':
+    case 'ftp':
+    case 'mailto':
+    case 'tel':
+      return true;
+    default:
+      return false;
+  }
+}
+PDFJS.isValidUrl = isValidUrl;
+
+function shadow(obj, prop, value) {
+  Object.defineProperty(obj, prop, { value: value,
+                                     enumerable: true,
+                                     configurable: true,
+                                     writable: false });
+  return value;
+}
+PDFJS.shadow = shadow;
+
+var PasswordResponses = PDFJS.PasswordResponses = {
+  NEED_PASSWORD: 1,
+  INCORRECT_PASSWORD: 2
+};
+
+var PasswordException = (function PasswordExceptionClosure() {
+  function PasswordException(msg, code) {
+    this.name = 'PasswordException';
+    this.message = msg;
+    this.code = code;
+  }
+
+  PasswordException.prototype = new Error();
+  PasswordException.constructor = PasswordException;
+
+  return PasswordException;
+})();
+PDFJS.PasswordException = PasswordException;
+
+var UnknownErrorException = (function UnknownErrorExceptionClosure() {
+  function UnknownErrorException(msg, details) {
+    this.name = 'UnknownErrorException';
+    this.message = msg;
+    this.details = details;
+  }
+
+  UnknownErrorException.prototype = new Error();
+  UnknownErrorException.constructor = UnknownErrorException;
+
+  return UnknownErrorException;
+})();
+PDFJS.UnknownErrorException = UnknownErrorException;
+
+var InvalidPDFException = (function InvalidPDFExceptionClosure() {
+  function InvalidPDFException(msg) {
+    this.name = 'InvalidPDFException';
+    this.message = msg;
+  }
+
+  InvalidPDFException.prototype = new Error();
+  InvalidPDFException.constructor = InvalidPDFException;
+
+  return InvalidPDFException;
+})();
+PDFJS.InvalidPDFException = InvalidPDFException;
+
+var MissingPDFException = (function MissingPDFExceptionClosure() {
+  function MissingPDFException(msg) {
+    this.name = 'MissingPDFException';
+    this.message = msg;
+  }
+
+  MissingPDFException.prototype = new Error();
+  MissingPDFException.constructor = MissingPDFException;
+
+  return MissingPDFException;
+})();
+PDFJS.MissingPDFException = MissingPDFException;
+
+var UnexpectedResponseException =
+    (function UnexpectedResponseExceptionClosure() {
+  function UnexpectedResponseException(msg, status) {
+    this.name = 'UnexpectedResponseException';
+    this.message = msg;
+    this.status = status;
+  }
+
+  UnexpectedResponseException.prototype = new Error();
+  UnexpectedResponseException.constructor = UnexpectedResponseException;
+
+  return UnexpectedResponseException;
+})();
+PDFJS.UnexpectedResponseException = UnexpectedResponseException;
+
+var NotImplementedException = (function NotImplementedExceptionClosure() {
+  function NotImplementedException(msg) {
+    this.message = msg;
+  }
+
+  NotImplementedException.prototype = new Error();
+  NotImplementedException.prototype.name = 'NotImplementedException';
+  NotImplementedException.constructor = NotImplementedException;
+
+  return NotImplementedException;
+})();
+
+var MissingDataException = (function MissingDataExceptionClosure() {
+  function MissingDataException(begin, end) {
+    this.begin = begin;
+    this.end = end;
+    this.message = 'Missing data [' + begin + ', ' + end + ')';
+  }
+
+  MissingDataException.prototype = new Error();
+  MissingDataException.prototype.name = 'MissingDataException';
+  MissingDataException.constructor = MissingDataException;
+
+  return MissingDataException;
+})();
+
+var XRefParseException = (function XRefParseExceptionClosure() {
+  function XRefParseException(msg) {
+    this.message = msg;
+  }
+
+  XRefParseException.prototype = new Error();
+  XRefParseException.prototype.name = 'XRefParseException';
+  XRefParseException.constructor = XRefParseException;
+
+  return XRefParseException;
+})();
+
+
+function bytesToString(bytes) {
+  assert(bytes !== null && typeof bytes === 'object' &&
+         bytes.length !== undefined, 'Invalid argument for bytesToString');
+  var length = bytes.length;
+  var MAX_ARGUMENT_COUNT = 8192;
+  if (length < MAX_ARGUMENT_COUNT) {
+    return String.fromCharCode.apply(null, bytes);
+  }
+  var strBuf = [];
+  for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) {
+    var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);
+    var chunk = bytes.subarray(i, chunkEnd);
+    strBuf.push(String.fromCharCode.apply(null, chunk));
+  }
+  return strBuf.join('');
+}
+
+function stringToBytes(str) {
+  assert(typeof str === 'string', 'Invalid argument for stringToBytes');
+  var length = str.length;
+  var bytes = new Uint8Array(length);
+  for (var i = 0; i < length; ++i) {
+    bytes[i] = str.charCodeAt(i) & 0xFF;
+  }
+  return bytes;
+}
+
+function string32(value) {
+  return String.fromCharCode((value >> 24) & 0xff, (value >> 16) & 0xff,
+                             (value >> 8) & 0xff, value & 0xff);
+}
+
+function log2(x) {
+  var n = 1, i = 0;
+  while (x > n) {
+    n <<= 1;
+    i++;
+  }
+  return i;
+}
+
+function readInt8(data, start) {
+  return (data[start] << 24) >> 24;
+}
+
+function readUint16(data, offset) {
+  return (data[offset] << 8) | data[offset + 1];
+}
+
+function readUint32(data, offset) {
+  return ((data[offset] << 24) | (data[offset + 1] << 16) |
+         (data[offset + 2] << 8) | data[offset + 3]) >>> 0;
+}
+
+// Lazy test the endianness of the platform
+// NOTE: This will be 'true' for simulated TypedArrays
+function isLittleEndian() {
+  var buffer8 = new Uint8Array(2);
+  buffer8[0] = 1;
+  var buffer16 = new Uint16Array(buffer8.buffer);
+  return (buffer16[0] === 1);
+}
+
+Object.defineProperty(PDFJS, 'isLittleEndian', {
+  configurable: true,
+  get: function PDFJS_isLittleEndian() {
+    return shadow(PDFJS, 'isLittleEndian', isLittleEndian());
+  }
+});
+
+  // Lazy test if the userAgant support CanvasTypedArrays
+function hasCanvasTypedArrays() {
+  var canvas = document.createElement('canvas');
+  canvas.width = canvas.height = 1;
+  var ctx = canvas.getContext('2d');
+  var imageData = ctx.createImageData(1, 1);
+  return (typeof imageData.data.buffer !== 'undefined');
+}
+
+Object.defineProperty(PDFJS, 'hasCanvasTypedArrays', {
+  configurable: true,
+  get: function PDFJS_hasCanvasTypedArrays() {
+    return shadow(PDFJS, 'hasCanvasTypedArrays', hasCanvasTypedArrays());
+  }
+});
+
+var Uint32ArrayView = (function Uint32ArrayViewClosure() {
+
+  function Uint32ArrayView(buffer, length) {
+    this.buffer = buffer;
+    this.byteLength = buffer.length;
+    this.length = length === undefined ? (this.byteLength >> 2) : length;
+    ensureUint32ArrayViewProps(this.length);
+  }
+  Uint32ArrayView.prototype = Object.create(null);
+
+  var uint32ArrayViewSetters = 0;
+  function createUint32ArrayProp(index) {
+    return {
+      get: function () {
+        var buffer = this.buffer, offset = index << 2;
+        return (buffer[offset] | (buffer[offset + 1] << 8) |
+          (buffer[offset + 2] << 16) | (buffer[offset + 3] << 24)) >>> 0;
+      },
+      set: function (value) {
+        var buffer = this.buffer, offset = index << 2;
+        buffer[offset] = value & 255;
+        buffer[offset + 1] = (value >> 8) & 255;
+        buffer[offset + 2] = (value >> 16) & 255;
+        buffer[offset + 3] = (value >>> 24) & 255;
+      }
+    };
+  }
+
+  function ensureUint32ArrayViewProps(length) {
+    while (uint32ArrayViewSetters < length) {
+      Object.defineProperty(Uint32ArrayView.prototype,
+        uint32ArrayViewSetters,
+        createUint32ArrayProp(uint32ArrayViewSetters));
+      uint32ArrayViewSetters++;
+    }
+  }
+
+  return Uint32ArrayView;
+})();
+
+var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
+
+var Util = PDFJS.Util = (function UtilClosure() {
+  function Util() {}
+
+  var rgbBuf = ['rgb(', 0, ',', 0, ',', 0, ')'];
+
+  // makeCssRgb() can be called thousands of times. Using |rgbBuf| avoids
+  // creating many intermediate strings.
+  Util.makeCssRgb = function Util_makeCssRgb(r, g, b) {
+    rgbBuf[1] = r;
+    rgbBuf[3] = g;
+    rgbBuf[5] = b;
+    return rgbBuf.join('');
+  };
+
+  // Concatenates two transformation matrices together and returns the result.
+  Util.transform = function Util_transform(m1, m2) {
+    return [
+      m1[0] * m2[0] + m1[2] * m2[1],
+      m1[1] * m2[0] + m1[3] * m2[1],
+      m1[0] * m2[2] + m1[2] * m2[3],
+      m1[1] * m2[2] + m1[3] * m2[3],
+      m1[0] * m2[4] + m1[2] * m2[5] + m1[4],
+      m1[1] * m2[4] + m1[3] * m2[5] + m1[5]
+    ];
+  };
+
+  // For 2d affine transforms
+  Util.applyTransform = function Util_applyTransform(p, m) {
+    var xt = p[0] * m[0] + p[1] * m[2] + m[4];
+    var yt = p[0] * m[1] + p[1] * m[3] + m[5];
+    return [xt, yt];
+  };
+
+  Util.applyInverseTransform = function Util_applyInverseTransform(p, m) {
+    var d = m[0] * m[3] - m[1] * m[2];
+    var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
+    var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
+    return [xt, yt];
+  };
+
+  // Applies the transform to the rectangle and finds the minimum axially
+  // aligned bounding box.
+  Util.getAxialAlignedBoundingBox =
+    function Util_getAxialAlignedBoundingBox(r, m) {
+
+    var p1 = Util.applyTransform(r, m);
+    var p2 = Util.applyTransform(r.slice(2, 4), m);
+    var p3 = Util.applyTransform([r[0], r[3]], m);
+    var p4 = Util.applyTransform([r[2], r[1]], m);
+    return [
+      Math.min(p1[0], p2[0], p3[0], p4[0]),
+      Math.min(p1[1], p2[1], p3[1], p4[1]),
+      Math.max(p1[0], p2[0], p3[0], p4[0]),
+      Math.max(p1[1], p2[1], p3[1], p4[1])
+    ];
+  };
+
+  Util.inverseTransform = function Util_inverseTransform(m) {
+    var d = m[0] * m[3] - m[1] * m[2];
+    return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d,
+      (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];
+  };
+
+  // Apply a generic 3d matrix M on a 3-vector v:
+  //   | a b c |   | X |
+  //   | d e f | x | Y |
+  //   | g h i |   | Z |
+  // M is assumed to be serialized as [a,b,c,d,e,f,g,h,i],
+  // with v as [X,Y,Z]
+  Util.apply3dTransform = function Util_apply3dTransform(m, v) {
+    return [
+      m[0] * v[0] + m[1] * v[1] + m[2] * v[2],
+      m[3] * v[0] + m[4] * v[1] + m[5] * v[2],
+      m[6] * v[0] + m[7] * v[1] + m[8] * v[2]
+    ];
+  };
+
+  // This calculation uses Singular Value Decomposition.
+  // The SVD can be represented with formula A = USV. We are interested in the
+  // matrix S here because it represents the scale values.
+  Util.singularValueDecompose2dScale =
+    function Util_singularValueDecompose2dScale(m) {
+
+    var transpose = [m[0], m[2], m[1], m[3]];
+
+    // Multiply matrix m with its transpose.
+    var a = m[0] * transpose[0] + m[1] * transpose[2];
+    var b = m[0] * transpose[1] + m[1] * transpose[3];
+    var c = m[2] * transpose[0] + m[3] * transpose[2];
+    var d = m[2] * transpose[1] + m[3] * transpose[3];
+
+    // Solve the second degree polynomial to get roots.
+    var first = (a + d) / 2;
+    var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;
+    var sx = first + second || 1;
+    var sy = first - second || 1;
+
+    // Scale values are the square roots of the eigenvalues.
+    return [Math.sqrt(sx), Math.sqrt(sy)];
+  };
+
+  // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)
+  // For coordinate systems whose origin lies in the bottom-left, this
+  // means normalization to (BL,TR) ordering. For systems with origin in the
+  // top-left, this means (TL,BR) ordering.
+  Util.normalizeRect = function Util_normalizeRect(rect) {
+    var r = rect.slice(0); // clone rect
+    if (rect[0] > rect[2]) {
+      r[0] = rect[2];
+      r[2] = rect[0];
+    }
+    if (rect[1] > rect[3]) {
+      r[1] = rect[3];
+      r[3] = rect[1];
+    }
+    return r;
+  };
+
+  // Returns a rectangle [x1, y1, x2, y2] corresponding to the
+  // intersection of rect1 and rect2. If no intersection, returns 'false'
+  // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]
+  Util.intersect = function Util_intersect(rect1, rect2) {
+    function compare(a, b) {
+      return a - b;
+    }
+
+    // Order points along the axes
+    var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare),
+        orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare),
+        result = [];
+
+    rect1 = Util.normalizeRect(rect1);
+    rect2 = Util.normalizeRect(rect2);
+
+    // X: first and second points belong to different rectangles?
+    if ((orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) ||
+        (orderedX[0] === rect2[0] && orderedX[1] === rect1[0])) {
+      // Intersection must be between second and third points
+      result[0] = orderedX[1];
+      result[2] = orderedX[2];
+    } else {
+      return false;
+    }
+
+    // Y: first and second points belong to different rectangles?
+    if ((orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) ||
+        (orderedY[0] === rect2[1] && orderedY[1] === rect1[1])) {
+      // Intersection must be between second and third points
+      result[1] = orderedY[1];
+      result[3] = orderedY[2];
+    } else {
+      return false;
+    }
+
+    return result;
+  };
+
+  Util.sign = function Util_sign(num) {
+    return num < 0 ? -1 : 1;
+  };
+
+  Util.appendToArray = function Util_appendToArray(arr1, arr2) {
+    Array.prototype.push.apply(arr1, arr2);
+  };
+
+  Util.prependToArray = function Util_prependToArray(arr1, arr2) {
+    Array.prototype.unshift.apply(arr1, arr2);
+  };
+
+  Util.extendObj = function extendObj(obj1, obj2) {
+    for (var key in obj2) {
+      obj1[key] = obj2[key];
+    }
+  };
+
+  Util.getInheritableProperty = function Util_getInheritableProperty(dict,
+                                                                     name) {
+    while (dict && !dict.has(name)) {
+      dict = dict.get('Parent');
+    }
+    if (!dict) {
+      return null;
+    }
+    return dict.get(name);
+  };
+
+  Util.inherit = function Util_inherit(sub, base, prototype) {
+    sub.prototype = Object.create(base.prototype);
+    sub.prototype.constructor = sub;
+    for (var prop in prototype) {
+      sub.prototype[prop] = prototype[prop];
+    }
+  };
+
+  Util.loadScript = function Util_loadScript(src, callback) {
+    var script = document.createElement('script');
+    var loaded = false;
+    script.setAttribute('src', src);
+    if (callback) {
+      script.onload = function() {
+        if (!loaded) {
+          callback();
+        }
+        loaded = true;
+      };
+    }
+    document.getElementsByTagName('head')[0].appendChild(script);
+  };
+
+  return Util;
+})();
+
+/**
+ * PDF page viewport created based on scale, rotation and offset.
+ * @class
+ * @alias PDFJS.PageViewport
+ */
+var PageViewport = PDFJS.PageViewport = (function PageViewportClosure() {
+  /**
+   * @constructor
+   * @private
+   * @param viewBox {Array} xMin, yMin, xMax and yMax coordinates.
+   * @param scale {number} scale of the viewport.
+   * @param rotation {number} rotations of the viewport in degrees.
+   * @param offsetX {number} offset X
+   * @param offsetY {number} offset Y
+   * @param dontFlip {boolean} if true, axis Y will not be flipped.
+   */
+  function PageViewport(viewBox, scale, rotation, offsetX, offsetY, dontFlip) {
+    this.viewBox = viewBox;
+    this.scale = scale;
+    this.rotation = rotation;
+    this.offsetX = offsetX;
+    this.offsetY = offsetY;
+
+    // creating transform to convert pdf coordinate system to the normal
+    // canvas like coordinates taking in account scale and rotation
+    var centerX = (viewBox[2] + viewBox[0]) / 2;
+    var centerY = (viewBox[3] + viewBox[1]) / 2;
+    var rotateA, rotateB, rotateC, rotateD;
+    rotation = rotation % 360;
+    rotation = rotation < 0 ? rotation + 360 : rotation;
+    switch (rotation) {
+      case 180:
+        rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1;
+        break;
+      case 90:
+        rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0;
+        break;
+      case 270:
+        rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0;
+        break;
+      //case 0:
+      default:
+        rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1;
+        break;
+    }
+
+    if (dontFlip) {
+      rotateC = -rotateC; rotateD = -rotateD;
+    }
+
+    var offsetCanvasX, offsetCanvasY;
+    var width, height;
+    if (rotateA === 0) {
+      offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
+      offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
+      width = Math.abs(viewBox[3] - viewBox[1]) * scale;
+      height = Math.abs(viewBox[2] - viewBox[0]) * scale;
+    } else {
+      offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
+      offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
+      width = Math.abs(viewBox[2] - viewBox[0]) * scale;
+      height = Math.abs(viewBox[3] - viewBox[1]) * scale;
+    }
+    // creating transform for the following operations:
+    // translate(-centerX, -centerY), rotate and flip vertically,
+    // scale, and translate(offsetCanvasX, offsetCanvasY)
+    this.transform = [
+      rotateA * scale,
+      rotateB * scale,
+      rotateC * scale,
+      rotateD * scale,
+      offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,
+      offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY
+    ];
+
+    this.width = width;
+    this.height = height;
+    this.fontScale = scale;
+  }
+  PageViewport.prototype = /** @lends PDFJS.PageViewport.prototype */ {
+    /**
+     * Clones viewport with additional properties.
+     * @param args {Object} (optional) If specified, may contain the 'scale' or
+     * 'rotation' properties to override the corresponding properties in
+     * the cloned viewport.
+     * @returns {PDFJS.PageViewport} Cloned viewport.
+     */
+    clone: function PageViewPort_clone(args) {
+      args = args || {};
+      var scale = 'scale' in args ? args.scale : this.scale;
+      var rotation = 'rotation' in args ? args.rotation : this.rotation;
+      return new PageViewport(this.viewBox.slice(), scale, rotation,
+                              this.offsetX, this.offsetY, args.dontFlip);
+    },
+    /**
+     * Converts PDF point to the viewport coordinates. For examples, useful for
+     * converting PDF location into canvas pixel coordinates.
+     * @param x {number} X coordinate.
+     * @param y {number} Y coordinate.
+     * @returns {Object} Object that contains 'x' and 'y' properties of the
+     * point in the viewport coordinate space.
+     * @see {@link convertToPdfPoint}
+     * @see {@link convertToViewportRectangle}
+     */
+    convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) {
+      return Util.applyTransform([x, y], this.transform);
+    },
+    /**
+     * Converts PDF rectangle to the viewport coordinates.
+     * @param rect {Array} xMin, yMin, xMax and yMax coordinates.
+     * @returns {Array} Contains corresponding coordinates of the rectangle
+     * in the viewport coordinate space.
+     * @see {@link convertToViewportPoint}
+     */
+    convertToViewportRectangle:
+      function PageViewport_convertToViewportRectangle(rect) {
+      var tl = Util.applyTransform([rect[0], rect[1]], this.transform);
+      var br = Util.applyTransform([rect[2], rect[3]], this.transform);
+      return [tl[0], tl[1], br[0], br[1]];
+    },
+    /**
+     * Converts viewport coordinates to the PDF location. For examples, useful
+     * for converting canvas pixel location into PDF one.
+     * @param x {number} X coordinate.
+     * @param y {number} Y coordinate.
+     * @returns {Object} Object that contains 'x' and 'y' properties of the
+     * point in the PDF coordinate space.
+     * @see {@link convertToViewportPoint}
+     */
+    convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) {
+      return Util.applyInverseTransform([x, y], this.transform);
+    }
+  };
+  return PageViewport;
+})();
+
+var PDFStringTranslateTable = [
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014,
+  0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C,
+  0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160,
+  0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC
+];
+
+function stringToPDFString(str) {
+  var i, n = str.length, strBuf = [];
+  if (str[0] === '\xFE' && str[1] === '\xFF') {
+    // UTF16BE BOM
+    for (i = 2; i < n; i += 2) {
+      strBuf.push(String.fromCharCode(
+        (str.charCodeAt(i) << 8) | str.charCodeAt(i + 1)));
+    }
+  } else {
+    for (i = 0; i < n; ++i) {
+      var code = PDFStringTranslateTable[str.charCodeAt(i)];
+      strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));
+    }
+  }
+  return strBuf.join('');
+}
+
+function stringToUTF8String(str) {
+  return decodeURIComponent(escape(str));
+}
+
+function utf8StringToString(str) {
+  return unescape(encodeURIComponent(str));
+}
+
+function isEmptyObj(obj) {
+  for (var key in obj) {
+    return false;
+  }
+  return true;
+}
+
+function isBool(v) {
+  return typeof v === 'boolean';
+}
+
+function isInt(v) {
+  return typeof v === 'number' && ((v | 0) === v);
+}
+
+function isNum(v) {
+  return typeof v === 'number';
+}
+
+function isString(v) {
+  return typeof v === 'string';
+}
+
+function isName(v) {
+  return v instanceof Name;
+}
+
+function isCmd(v, cmd) {
+  return v instanceof Cmd && (cmd === undefined || v.cmd === cmd);
+}
+
+function isDict(v, type) {
+  if (!(v instanceof Dict)) {
+    return false;
+  }
+  if (!type) {
+    return true;
+  }
+  var dictType = v.get('Type');
+  return isName(dictType) && dictType.name === type;
+}
+
+function isArray(v) {
+  return v instanceof Array;
+}
+
+function isStream(v) {
+  return typeof v === 'object' && v !== null && v.getBytes !== undefined;
+}
+
+function isArrayBuffer(v) {
+  return typeof v === 'object' && v !== null && v.byteLength !== undefined;
+}
+
+function isRef(v) {
+  return v instanceof Ref;
+}
+
+/**
+ * Promise Capability object.
+ *
+ * @typedef {Object} PromiseCapability
+ * @property {Promise} promise - A promise object.
+ * @property {function} resolve - Fullfills the promise.
+ * @property {function} reject - Rejects the promise.
+ */
+
+/**
+ * Creates a promise capability object.
+ * @alias PDFJS.createPromiseCapability
+ *
+ * @return {PromiseCapability} A capability object contains:
+ * - a Promise, resolve and reject methods.
+ */
+function createPromiseCapability() {
+  var capability = {};
+  capability.promise = new Promise(function (resolve, reject) {
+    capability.resolve = resolve;
+    capability.reject = reject;
+  });
+  return capability;
+}
+
+PDFJS.createPromiseCapability = createPromiseCapability;
+
+/**
+ * Polyfill for Promises:
+ * The following promise implementation tries to generally implement the
+ * Promise/A+ spec. Some notable differences from other promise libaries are:
+ * - There currently isn't a seperate deferred and promise object.
+ * - Unhandled rejections eventually show an error if they aren't handled.
+ *
+ * Based off of the work in:
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=810490
+ */
+(function PromiseClosure() {
+  if (globalScope.Promise) {
+    // Promises existing in the DOM/Worker, checking presence of all/resolve
+    if (typeof globalScope.Promise.all !== 'function') {
+      globalScope.Promise.all = function (iterable) {
+        var count = 0, results = [], resolve, reject;
+        var promise = new globalScope.Promise(function (resolve_, reject_) {
+          resolve = resolve_;
+          reject = reject_;
+        });
+        iterable.forEach(function (p, i) {
+          count++;
+          p.then(function (result) {
+            results[i] = result;
+            count--;
+            if (count === 0) {
+              resolve(results);
+            }
+          }, reject);
+        });
+        if (count === 0) {
+          resolve(results);
+        }
+        return promise;
+      };
+    }
+    if (typeof globalScope.Promise.resolve !== 'function') {
+      globalScope.Promise.resolve = function (value) {
+        return new globalScope.Promise(function (resolve) { resolve(value); });
+      };
+    }
+    if (typeof globalScope.Promise.reject !== 'function') {
+      globalScope.Promise.reject = function (reason) {
+        return new globalScope.Promise(function (resolve, reject) {
+          reject(reason);
+        });
+      };
+    }
+    if (typeof globalScope.Promise.prototype.catch !== 'function') {
+      globalScope.Promise.prototype.catch = function (onReject) {
+        return globalScope.Promise.prototype.then(undefined, onReject);
+      };
+    }
+    return;
+  }
+  var STATUS_PENDING = 0;
+  var STATUS_RESOLVED = 1;
+  var STATUS_REJECTED = 2;
+
+  // In an attempt to avoid silent exceptions, unhandled rejections are
+  // tracked and if they aren't handled in a certain amount of time an
+  // error is logged.
+  var REJECTION_TIMEOUT = 500;
+
+  var HandlerManager = {
+    handlers: [],
+    running: false,
+    unhandledRejections: [],
+    pendingRejectionCheck: false,
+
+    scheduleHandlers: function scheduleHandlers(promise) {
+      if (promise._status === STATUS_PENDING) {
+        return;
+      }
+
+      this.handlers = this.handlers.concat(promise._handlers);
+      promise._handlers = [];
+
+      if (this.running) {
+        return;
+      }
+      this.running = true;
+
+      setTimeout(this.runHandlers.bind(this), 0);
+    },
+
+    runHandlers: function runHandlers() {
+      var RUN_TIMEOUT = 1; // ms
+      var timeoutAt = Date.now() + RUN_TIMEOUT;
+      while (this.handlers.length > 0) {
+        var handler = this.handlers.shift();
+
+        var nextStatus = handler.thisPromise._status;
+        var nextValue = handler.thisPromise._value;
+
+        try {
+          if (nextStatus === STATUS_RESOLVED) {
+            if (typeof handler.onResolve === 'function') {
+              nextValue = handler.onResolve(nextValue);
+            }
+          } else if (typeof handler.onReject === 'function') {
+              nextValue = handler.onReject(nextValue);
+              nextStatus = STATUS_RESOLVED;
+
+              if (handler.thisPromise._unhandledRejection) {
+                this.removeUnhandeledRejection(handler.thisPromise);
+              }
+          }
+        } catch (ex) {
+          nextStatus = STATUS_REJECTED;
+          nextValue = ex;
+        }
+
+        handler.nextPromise._updateStatus(nextStatus, nextValue);
+        if (Date.now() >= timeoutAt) {
+          break;
+        }
+      }
+
+      if (this.handlers.length > 0) {
+        setTimeout(this.runHandlers.bind(this), 0);
+        return;
+      }
+
+      this.running = false;
+    },
+
+    addUnhandledRejection: function addUnhandledRejection(promise) {
+      this.unhandledRejections.push({
+        promise: promise,
+        time: Date.now()
+      });
+      this.scheduleRejectionCheck();
+    },
+
+    removeUnhandeledRejection: function removeUnhandeledRejection(promise) {
+      promise._unhandledRejection = false;
+      for (var i = 0; i < this.unhandledRejections.length; i++) {
+        if (this.unhandledRejections[i].promise === promise) {
+          this.unhandledRejections.splice(i);
+          i--;
+        }
+      }
+    },
+
+    scheduleRejectionCheck: function scheduleRejectionCheck() {
+      if (this.pendingRejectionCheck) {
+        return;
+      }
+      this.pendingRejectionCheck = true;
+      setTimeout(function rejectionCheck() {
+        this.pendingRejectionCheck = false;
+        var now = Date.now();
+        for (var i = 0; i < this.unhandledRejections.length; i++) {
+          if (now - this.unhandledRejections[i].time > REJECTION_TIMEOUT) {
+            var unhandled = this.unhandledRejections[i].promise._value;
+            var msg = 'Unhandled rejection: ' + unhandled;
+            if (unhandled.stack) {
+              msg += '\n' + unhandled.stack;
+            }
+            warn(msg);
+            this.unhandledRejections.splice(i);
+            i--;
+          }
+        }
+        if (this.unhandledRejections.length) {
+          this.scheduleRejectionCheck();
+        }
+      }.bind(this), REJECTION_TIMEOUT);
+    }
+  };
+
+  function Promise(resolver) {
+    this._status = STATUS_PENDING;
+    this._handlers = [];
+    try {
+      resolver.call(this, this._resolve.bind(this), this._reject.bind(this));
+    } catch (e) {
+      this._reject(e);
+    }
+  }
+  /**
+   * Builds a promise that is resolved when all the passed in promises are
+   * resolved.
+   * @param {array} array of data and/or promises to wait for.
+   * @return {Promise} New dependant promise.
+   */
+  Promise.all = function Promise_all(promises) {
+    var resolveAll, rejectAll;
+    var deferred = new Promise(function (resolve, reject) {
+      resolveAll = resolve;
+      rejectAll = reject;
+    });
+    var unresolved = promises.length;
+    var results = [];
+    if (unresolved === 0) {
+      resolveAll(results);
+      return deferred;
+    }
+    function reject(reason) {
+      if (deferred._status === STATUS_REJECTED) {
+        return;
+      }
+      results = [];
+      rejectAll(reason);
+    }
+    for (var i = 0, ii = promises.length; i < ii; ++i) {
+      var promise = promises[i];
+      var resolve = (function(i) {
+        return function(value) {
+          if (deferred._status === STATUS_REJECTED) {
+            return;
+          }
+          results[i] = value;
+          unresolved--;
+          if (unresolved === 0) {
+            resolveAll(results);
+          }
+        };
+      })(i);
+      if (Promise.isPromise(promise)) {
+        promise.then(resolve, reject);
+      } else {
+        resolve(promise);
+      }
+    }
+    return deferred;
+  };
+
+  /**
+   * Checks if the value is likely a promise (has a 'then' function).
+   * @return {boolean} true if value is thenable
+   */
+  Promise.isPromise = function Promise_isPromise(value) {
+    return value && typeof value.then === 'function';
+  };
+
+  /**
+   * Creates resolved promise
+   * @param value resolve value
+   * @returns {Promise}
+   */
+  Promise.resolve = function Promise_resolve(value) {
+    return new Promise(function (resolve) { resolve(value); });
+  };
+
+  /**
+   * Creates rejected promise
+   * @param reason rejection value
+   * @returns {Promise}
+   */
+  Promise.reject = function Promise_reject(reason) {
+    return new Promise(function (resolve, reject) { reject(reason); });
+  };
+
+  Promise.prototype = {
+    _status: null,
+    _value: null,
+    _handlers: null,
+    _unhandledRejection: null,
+
+    _updateStatus: function Promise__updateStatus(status, value) {
+      if (this._status === STATUS_RESOLVED ||
+          this._status === STATUS_REJECTED) {
+        return;
+      }
+
+      if (status === STATUS_RESOLVED &&
+          Promise.isPromise(value)) {
+        value.then(this._updateStatus.bind(this, STATUS_RESOLVED),
+                   this._updateStatus.bind(this, STATUS_REJECTED));
+        return;
+      }
+
+      this._status = status;
+      this._value = value;
+
+      if (status === STATUS_REJECTED && this._handlers.length === 0) {
+        this._unhandledRejection = true;
+        HandlerManager.addUnhandledRejection(this);
+      }
+
+      HandlerManager.scheduleHandlers(this);
+    },
+
+    _resolve: function Promise_resolve(value) {
+      this._updateStatus(STATUS_RESOLVED, value);
+    },
+
+    _reject: function Promise_reject(reason) {
+      this._updateStatus(STATUS_REJECTED, reason);
+    },
+
+    then: function Promise_then(onResolve, onReject) {
+      var nextPromise = new Promise(function (resolve, reject) {
+        this.resolve = resolve;
+        this.reject = reject;
+      });
+      this._handlers.push({
+        thisPromise: this,
+        onResolve: onResolve,
+        onReject: onReject,
+        nextPromise: nextPromise
+      });
+      HandlerManager.scheduleHandlers(this);
+      return nextPromise;
+    },
+
+    catch: function Promise_catch(onReject) {
+      return this.then(undefined, onReject);
+    }
+  };
+
+  globalScope.Promise = Promise;
+})();
+
+var StatTimer = (function StatTimerClosure() {
+  function rpad(str, pad, length) {
+    while (str.length < length) {
+      str += pad;
+    }
+    return str;
+  }
+  function StatTimer() {
+    this.started = {};
+    this.times = [];
+    this.enabled = true;
+  }
+  StatTimer.prototype = {
+    time: function StatTimer_time(name) {
+      if (!this.enabled) {
+        return;
+      }
+      if (name in this.started) {
+        warn('Timer is already running for ' + name);
+      }
+      this.started[name] = Date.now();
+    },
+    timeEnd: function StatTimer_timeEnd(name) {
+      if (!this.enabled) {
+        return;
+      }
+      if (!(name in this.started)) {
+        warn('Timer has not been started for ' + name);
+      }
+      this.times.push({
+        'name': name,
+        'start': this.started[name],
+        'end': Date.now()
+      });
+      // Remove timer from started so it can be called again.
+      delete this.started[name];
+    },
+    toString: function StatTimer_toString() {
+      var i, ii;
+      var times = this.times;
+      var out = '';
+      // Find the longest name for padding purposes.
+      var longest = 0;
+      for (i = 0, ii = times.length; i < ii; ++i) {
+        var name = times[i]['name'];
+        if (name.length > longest) {
+          longest = name.length;
+        }
+      }
+      for (i = 0, ii = times.length; i < ii; ++i) {
+        var span = times[i];
+        var duration = span.end - span.start;
+        out += rpad(span['name'], ' ', longest) + ' ' + duration + 'ms\n';
+      }
+      return out;
+    }
+  };
+  return StatTimer;
+})();
+
+PDFJS.createBlob = function createBlob(data, contentType) {
+  if (typeof Blob !== 'undefined') {
+    return new Blob([data], { type: contentType });
+  }
+  // Blob builder is deprecated in FF14 and removed in FF18.
+  var bb = new MozBlobBuilder();
+  bb.append(data);
+  return bb.getBlob(contentType);
+};
+
+PDFJS.createObjectURL = (function createObjectURLClosure() {
+  // Blob/createObjectURL is not available, falling back to data schema.
+  var digits =
+    'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+  return function createObjectURL(data, contentType) {
+    if (!PDFJS.disableCreateObjectURL &&
+        typeof URL !== 'undefined' && URL.createObjectURL) {
+      var blob = PDFJS.createBlob(data, contentType);
+      return URL.createObjectURL(blob);
+    }
+
+    var buffer = 'data:' + contentType + ';base64,';
+    for (var i = 0, ii = data.length; i < ii; i += 3) {
+      var b1 = data[i] & 0xFF;
+      var b2 = data[i + 1] & 0xFF;
+      var b3 = data[i + 2] & 0xFF;
+      var d1 = b1 >> 2, d2 = ((b1 & 3) << 4) | (b2 >> 4);
+      var d3 = i + 1 < ii ? ((b2 & 0xF) << 2) | (b3 >> 6) : 64;
+      var d4 = i + 2 < ii ? (b3 & 0x3F) : 64;
+      buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
+    }
+    return buffer;
+  };
+})();
+
+function MessageHandler(name, comObj) {
+  this.name = name;
+  this.comObj = comObj;
+  this.callbackIndex = 1;
+  this.postMessageTransfers = true;
+  var callbacksCapabilities = this.callbacksCapabilities = {};
+  var ah = this.actionHandler = {};
+
+  ah['console_log'] = [function ahConsoleLog(data) {
+    console.log.apply(console, data);
+  }];
+  ah['console_error'] = [function ahConsoleError(data) {
+    console.error.apply(console, data);
+  }];
+  ah['_unsupported_feature'] = [function ah_unsupportedFeature(data) {
+    UnsupportedManager.notify(data);
+  }];
+
+  comObj.onmessage = function messageHandlerComObjOnMessage(event) {
+    var data = event.data;
+    if (data.isReply) {
+      var callbackId = data.callbackId;
+      if (data.callbackId in callbacksCapabilities) {
+        var callback = callbacksCapabilities[callbackId];
+        delete callbacksCapabilities[callbackId];
+        if ('error' in data) {
+          callback.reject(data.error);
+        } else {
+          callback.resolve(data.data);
+        }
+      } else {
+        error('Cannot resolve callback ' + callbackId);
+      }
+    } else if (data.action in ah) {
+      var action = ah[data.action];
+      if (data.callbackId) {
+        Promise.resolve().then(function () {
+          return action[0].call(action[1], data.data);
+        }).then(function (result) {
+          comObj.postMessage({
+            isReply: true,
+            callbackId: data.callbackId,
+            data: result
+          });
+        }, function (reason) {
+          comObj.postMessage({
+            isReply: true,
+            callbackId: data.callbackId,
+            error: reason
+          });
+        });
+      } else {
+        action[0].call(action[1], data.data);
+      }
+    } else {
+      error('Unknown action from worker: ' + data.action);
+    }
+  };
+}
+
+MessageHandler.prototype = {
+  on: function messageHandlerOn(actionName, handler, scope) {
+    var ah = this.actionHandler;
+    if (ah[actionName]) {
+      error('There is already an actionName called "' + actionName + '"');
+    }
+    ah[actionName] = [handler, scope];
+  },
+  /**
+   * Sends a message to the comObj to invoke the action with the supplied data.
+   * @param {String} actionName Action to call.
+   * @param {JSON} data JSON data to send.
+   * @param {Array} [transfers] Optional list of transfers/ArrayBuffers
+   */
+  send: function messageHandlerSend(actionName, data, transfers) {
+    var message = {
+      action: actionName,
+      data: data
+    };
+    this.postMessage(message, transfers);
+  },
+  /**
+   * Sends a message to the comObj to invoke the action with the supplied data.
+   * Expects that other side will callback with the response.
+   * @param {String} actionName Action to call.
+   * @param {JSON} data JSON data to send.
+   * @param {Array} [transfers] Optional list of transfers/ArrayBuffers.
+   * @returns {Promise} Promise to be resolved with response data.
+   */
+  sendWithPromise:
+    function messageHandlerSendWithPromise(actionName, data, transfers) {
+    var callbackId = this.callbackIndex++;
+    var message = {
+      action: actionName,
+      data: data,
+      callbackId: callbackId
+    };
+    var capability = createPromiseCapability();
+    this.callbacksCapabilities[callbackId] = capability;
+    try {
+      this.postMessage(message, transfers);
+    } catch (e) {
+      capability.reject(e);
+    }
+    return capability.promise;
+  },
+  /**
+   * Sends raw message to the comObj.
+   * @private
+   * @param message {Object} Raw message.
+   * @param transfers List of transfers/ArrayBuffers, or undefined.
+   */
+  postMessage: function (message, transfers) {
+    if (transfers && this.postMessageTransfers) {
+      this.comObj.postMessage(message, transfers);
+    } else {
+      this.comObj.postMessage(message);
+    }
+  }
+};
+
+function loadJpegStream(id, imageUrl, objs) {
+  var img = new Image();
+  img.onload = (function loadJpegStream_onloadClosure() {
+    objs.resolve(id, img);
+  });
+  img.onerror = (function loadJpegStream_onerrorClosure() {
+    objs.resolve(id, null);
+    warn('Error during JPEG image loading');
+  });
+  img.src = imageUrl;
+}
+
+
+/**
+ * The maximum allowed image size in total pixels e.g. width * height. Images
+ * above this value will not be drawn. Use -1 for no limit.
+ * @var {number}
+ */
+PDFJS.maxImageSize = (PDFJS.maxImageSize === undefined ?
+                      -1 : PDFJS.maxImageSize);
+
+/**
+ * The url of where the predefined Adobe CMaps are located. Include trailing
+ * slash.
+ * @var {string}
+ */
+PDFJS.cMapUrl = (PDFJS.cMapUrl === undefined ? null : PDFJS.cMapUrl);
+
+/**
+ * Specifies if CMaps are binary packed.
+ * @var {boolean}
+ */
+PDFJS.cMapPacked = PDFJS.cMapPacked === undefined ? false : PDFJS.cMapPacked;
+
+/**
+ * By default fonts are converted to OpenType fonts and loaded via font face
+ * rules. If disabled, the font will be rendered using a built in font renderer
+ * that constructs the glyphs with primitive path commands.
+ * @var {boolean}
+ */
+PDFJS.disableFontFace = (PDFJS.disableFontFace === undefined ?
+                         false : PDFJS.disableFontFace);
+
+/**
+ * Path for image resources, mainly for annotation icons. Include trailing
+ * slash.
+ * @var {string}
+ */
+PDFJS.imageResourcesPath = (PDFJS.imageResourcesPath === undefined ?
+                            '' : PDFJS.imageResourcesPath);
+
+/**
+ * Disable the web worker and run all code on the main thread. This will happen
+ * automatically if the browser doesn't support workers or sending typed arrays
+ * to workers.
+ * @var {boolean}
+ */
+PDFJS.disableWorker = (PDFJS.disableWorker === undefined ?
+                       false : PDFJS.disableWorker);
+
+/**
+ * Path and filename of the worker file. Required when the worker is enabled in
+ * development mode. If unspecified in the production build, the worker will be
+ * loaded based on the location of the pdf.js file.
+ * @var {string}
+ */
+PDFJS.workerSrc = (PDFJS.workerSrc === undefined ? null : PDFJS.workerSrc);
+
+/**
+ * Disable range request loading of PDF files. When enabled and if the server
+ * supports partial content requests then the PDF will be fetched in chunks.
+ * Enabled (false) by default.
+ * @var {boolean}
+ */
+PDFJS.disableRange = (PDFJS.disableRange === undefined ?
+                      false : PDFJS.disableRange);
+
+/**
+ * Disable streaming of PDF file data. By default PDF.js attempts to load PDF
+ * in chunks. This default behavior can be disabled.
+ * @var {boolean}
+ */
+PDFJS.disableStream = (PDFJS.disableStream === undefined ?
+                       false : PDFJS.disableStream);
+
+/**
+ * Disable pre-fetching of PDF file data. When range requests are enabled PDF.js
+ * will automatically keep fetching more data even if it isn't needed to display
+ * the current page. This default behavior can be disabled.
+ *
+ * NOTE: It is also necessary to disable streaming, see above,
+ *       in order for disabling of pre-fetching to work correctly.
+ * @var {boolean}
+ */
+PDFJS.disableAutoFetch = (PDFJS.disableAutoFetch === undefined ?
+                          false : PDFJS.disableAutoFetch);
+
+/**
+ * Enables special hooks for debugging PDF.js.
+ * @var {boolean}
+ */
+PDFJS.pdfBug = (PDFJS.pdfBug === undefined ? false : PDFJS.pdfBug);
+
+/**
+ * Enables transfer usage in postMessage for ArrayBuffers.
+ * @var {boolean}
+ */
+PDFJS.postMessageTransfers = (PDFJS.postMessageTransfers === undefined ?
+                              true : PDFJS.postMessageTransfers);
+
+/**
+ * Disables URL.createObjectURL usage.
+ * @var {boolean}
+ */
+PDFJS.disableCreateObjectURL = (PDFJS.disableCreateObjectURL === undefined ?
+                                false : PDFJS.disableCreateObjectURL);
+
+/**
+ * Disables WebGL usage.
+ * @var {boolean}
+ */
+PDFJS.disableWebGL = (PDFJS.disableWebGL === undefined ?
+                      true : PDFJS.disableWebGL);
+
+/**
+ * Disables fullscreen support, and by extension Presentation Mode,
+ * in browsers which support the fullscreen API.
+ * @var {boolean}
+ */
+PDFJS.disableFullscreen = (PDFJS.disableFullscreen === undefined ?
+                           false : PDFJS.disableFullscreen);
+
+/**
+ * Enables CSS only zooming.
+ * @var {boolean}
+ */
+PDFJS.useOnlyCssZoom = (PDFJS.useOnlyCssZoom === undefined ?
+                        false : PDFJS.useOnlyCssZoom);
+
+/**
+ * Controls the logging level.
+ * The constants from PDFJS.VERBOSITY_LEVELS should be used:
+ * - errors
+ * - warnings [default]
+ * - infos
+ * @var {number}
+ */
+PDFJS.verbosity = (PDFJS.verbosity === undefined ?
+                   PDFJS.VERBOSITY_LEVELS.warnings : PDFJS.verbosity);
+
+/**
+ * The maximum supported canvas size in total pixels e.g. width * height.
+ * The default value is 4096 * 4096. Use -1 for no limit.
+ * @var {number}
+ */
+PDFJS.maxCanvasPixels = (PDFJS.maxCanvasPixels === undefined ?
+                         16777216 : PDFJS.maxCanvasPixels);
+
+/**
+ * Opens external links in a new window if enabled. The default behavior opens
+ * external links in the PDF.js window.
+ * @var {boolean}
+ */
+PDFJS.openExternalLinksInNewWindow = (
+  PDFJS.openExternalLinksInNewWindow === undefined ?
+    false : PDFJS.openExternalLinksInNewWindow);
+
+/**
+ * Document initialization / loading parameters object.
+ *
+ * @typedef {Object} DocumentInitParameters
+ * @property {string}     url   - The URL of the PDF.
+ * @property {TypedArray|Array|string} data - Binary PDF data. Use typed arrays
+ *   (Uint8Array) to improve the memory usage. If PDF data is BASE64-encoded,
+ *   use atob() to convert it to a binary string first.
+ * @property {Object}     httpHeaders - Basic authentication headers.
+ * @property {boolean}    withCredentials - Indicates whether or not cross-site
+ *   Access-Control requests should be made using credentials such as cookies
+ *   or authorization headers. The default is false.
+ * @property {string}     password - For decrypting password-protected PDFs.
+ * @property {TypedArray} initialData - A typed array with the first portion or
+ *   all of the pdf data. Used by the extension since some data is already
+ *   loaded before the switch to range requests.
+ * @property {number}     length - The PDF file length. It's used for progress
+ *   reports and range requests operations.
+ * @property {PDFDataRangeTransport} range
+ */
+
+/**
+ * @typedef {Object} PDFDocumentStats
+ * @property {Array} streamTypes - Used stream types in the document (an item
+ *   is set to true if specific stream ID was used in the document).
+ * @property {Array} fontTypes - Used font type in the document (an item is set
+ *   to true if specific font ID was used in the document).
+ */
+
+/**
+ * This is the main entry point for loading a PDF and interacting with it.
+ * NOTE: If a URL is used to fetch the PDF data a standard XMLHttpRequest(XHR)
+ * is used, which means it must follow the same origin rules that any XHR does
+ * e.g. No cross domain requests without CORS.
+ *
+ * @param {string|TypedArray|DocumentInitParameters|PDFDataRangeTransport} src
+ * Can be a url to where a PDF is located, a typed array (Uint8Array)
+ * already populated with data or parameter object.
+ *
+ * @param {PDFDataRangeTransport} pdfDataRangeTransport (deprecated) It is used
+ * if you want to manually serve range requests for data in the PDF.
+ *
+ * @param {function} passwordCallback (deprecated) It is used to request a
+ * password if wrong or no password was provided. The callback receives two
+ * parameters: function that needs to be called with new password and reason
+ * (see {PasswordResponses}).
+ *
+ * @param {function} progressCallback (deprecated) It is used to be able to
+ * monitor the loading progress of the PDF file (necessary to implement e.g.
+ * a loading bar). The callback receives an {Object} with the properties:
+ * {number} loaded and {number} total.
+ *
+ * @return {PDFDocumentLoadingTask}
+ */
+PDFJS.getDocument = function getDocument(src,
+                                         pdfDataRangeTransport,
+                                         passwordCallback,
+                                         progressCallback) {
+  var task = new PDFDocumentLoadingTask();
+
+  // Support of the obsolete arguments (for compatibility with API v1.0)
+  if (pdfDataRangeTransport) {
+    if (!(pdfDataRangeTransport instanceof PDFDataRangeTransport)) {
+      // Not a PDFDataRangeTransport instance, trying to add missing properties.
+      pdfDataRangeTransport = Object.create(pdfDataRangeTransport);
+      pdfDataRangeTransport.length = src.length;
+      pdfDataRangeTransport.initialData = src.initialData;
+    }
+    src = Object.create(src);
+    src.range = pdfDataRangeTransport;
+  }
+  task.onPassword = passwordCallback || null;
+  task.onProgress = progressCallback || null;
+
+  var workerInitializedCapability, transport;
+  var source;
+  if (typeof src === 'string') {
+    source = { url: src };
+  } else if (isArrayBuffer(src)) {
+    source = { data: src };
+  } else if (src instanceof PDFDataRangeTransport) {
+    source = { range: src };
+  } else {
+    if (typeof src !== 'object') {
+      error('Invalid parameter in getDocument, need either Uint8Array, ' +
+        'string or a parameter object');
+    }
+    if (!src.url && !src.data && !src.range) {
+      error('Invalid parameter object: need either .data, .range or .url');
+    }
+
+    source = src;
+  }
+
+  var params = {};
+  for (var key in source) {
+    if (key === 'url' && typeof window !== 'undefined') {
+      // The full path is required in the 'url' field.
+      params[key] = combineUrl(window.location.href, source[key]);
+      continue;
+    } else if (key === 'range') {
+      continue;
+    } else if (key === 'data' && !(source[key] instanceof Uint8Array)) {
+      // Converting string or array-like data to Uint8Array.
+      var pdfBytes = source[key];
+      if (typeof pdfBytes === 'string') {
+        params[key] = stringToBytes(pdfBytes);
+      } else if (typeof pdfBytes === 'object' && pdfBytes !== null &&
+                 !isNaN(pdfBytes.length)) {
+        params[key] = new Uint8Array(pdfBytes);
+      } else {
+        error('Invalid PDF binary data: either typed array, string or ' +
+              'array-like object is expected in the data property.');
+      }
+      continue;
+    }
+    params[key] = source[key];
+  }
+
+  workerInitializedCapability = createPromiseCapability();
+  transport = new WorkerTransport(workerInitializedCapability, source.range);
+  workerInitializedCapability.promise.then(function transportInitialized() {
+    transport.fetchDocument(task, params);
+  });
+
+  return task;
+};
+
+/**
+ * PDF document loading operation.
+ * @class
+ */
+var PDFDocumentLoadingTask = (function PDFDocumentLoadingTaskClosure() {
+  /** @constructs PDFDocumentLoadingTask */
+  function PDFDocumentLoadingTask() {
+    this._capability = createPromiseCapability();
+
+    /**
+     * Callback to request a password if wrong or no password was provided.
+     * The callback receives two parameters: function that needs to be called
+     * with new password and reason (see {PasswordResponses}).
+     */
+    this.onPassword = null;
+
+    /**
+     * Callback to be able to monitor the loading progress of the PDF file
+     * (necessary to implement e.g. a loading bar). The callback receives
+     * an {Object} with the properties: {number} loaded and {number} total.
+     */
+    this.onProgress = null;
+  }
+
+  PDFDocumentLoadingTask.prototype =
+      /** @lends PDFDocumentLoadingTask.prototype */ {
+    /**
+     * @return {Promise}
+     */
+    get promise() {
+      return this._capability.promise;
+    },
+
+    // TODO add cancel or abort method
+
+    /**
+     * Registers callbacks to indicate the document loading completion.
+     *
+     * @param {function} onFulfilled The callback for the loading completion.
+     * @param {function} onRejected The callback for the loading failure.
+     * @return {Promise} A promise that is resolved after the onFulfilled or
+     *                   onRejected callback.
+     */
+    then: function PDFDocumentLoadingTask_then(onFulfilled, onRejected) {
+      return this.promise.then.apply(this.promise, arguments);
+    }
+  };
+
+  return PDFDocumentLoadingTask;
+})();
+
+/**
+ * Abstract class to support range requests file loading.
+ * @class
+ */
+var PDFDataRangeTransport = (function pdfDataRangeTransportClosure() {
+  /**
+   * @constructs PDFDataRangeTransport
+   * @param {number} length
+   * @param {Uint8Array} initialData
+   */
+  function PDFDataRangeTransport(length, initialData) {
+    this.length = length;
+    this.initialData = initialData;
+
+    this._rangeListeners = [];
+    this._progressListeners = [];
+    this._progressiveReadListeners = [];
+    this._readyCapability = createPromiseCapability();
+  }
+  PDFDataRangeTransport.prototype =
+      /** @lends PDFDataRangeTransport.prototype */ {
+    addRangeListener:
+        function PDFDataRangeTransport_addRangeListener(listener) {
+      this._rangeListeners.push(listener);
+    },
+
+    addProgressListener:
+        function PDFDataRangeTransport_addProgressListener(listener) {
+      this._progressListeners.push(listener);
+    },
+
+    addProgressiveReadListener:
+        function PDFDataRangeTransport_addProgressiveReadListener(listener) {
+      this._progressiveReadListeners.push(listener);
+    },
+
+    onDataRange: function PDFDataRangeTransport_onDataRange(begin, chunk) {
+      var listeners = this._rangeListeners;
+      for (var i = 0, n = listeners.length; i < n; ++i) {
+        listeners[i](begin, chunk);
+      }
+    },
+
+    onDataProgress: function PDFDataRangeTransport_onDataProgress(loaded) {
+      this._readyCapability.promise.then(function () {
+        var listeners = this._progressListeners;
+        for (var i = 0, n = listeners.length; i < n; ++i) {
+          listeners[i](loaded);
+        }
+      }.bind(this));
+    },
+
+    onDataProgressiveRead:
+        function PDFDataRangeTransport_onDataProgress(chunk) {
+      this._readyCapability.promise.then(function () {
+        var listeners = this._progressiveReadListeners;
+        for (var i = 0, n = listeners.length; i < n; ++i) {
+          listeners[i](chunk);
+        }
+      }.bind(this));
+    },
+
+    transportReady: function PDFDataRangeTransport_transportReady() {
+      this._readyCapability.resolve();
+    },
+
+    requestDataRange:
+        function PDFDataRangeTransport_requestDataRange(begin, end) {
+      throw new Error('Abstract method PDFDataRangeTransport.requestDataRange');
+    }
+  };
+  return PDFDataRangeTransport;
+})();
+
+PDFJS.PDFDataRangeTransport = PDFDataRangeTransport;
+
+/**
+ * Proxy to a PDFDocument in the worker thread. Also, contains commonly used
+ * properties that can be read synchronously.
+ * @class
+ */
+var PDFDocumentProxy = (function PDFDocumentProxyClosure() {
+  function PDFDocumentProxy(pdfInfo, transport) {
+    this.pdfInfo = pdfInfo;
+    this.transport = transport;
+  }
+  PDFDocumentProxy.prototype = /** @lends PDFDocumentProxy.prototype */ {
+    /**
+     * @return {number} Total number of pages the PDF contains.
+     */
+    get numPages() {
+      return this.pdfInfo.numPages;
+    },
+    /**
+     * @return {string} A unique ID to identify a PDF. Not guaranteed to be
+     * unique.
+     */
+    get fingerprint() {
+      return this.pdfInfo.fingerprint;
+    },
+    /**
+     * @param {number} pageNumber The page number to get. The first page is 1.
+     * @return {Promise} A promise that is resolved with a {@link PDFPageProxy}
+     * object.
+     */
+    getPage: function PDFDocumentProxy_getPage(pageNumber) {
+      return this.transport.getPage(pageNumber);
+    },
+    /**
+     * @param {{num: number, gen: number}} ref The page reference. Must have
+     *   the 'num' and 'gen' properties.
+     * @return {Promise} A promise that is resolved with the page index that is
+     * associated with the reference.
+     */
+    getPageIndex: function PDFDocumentProxy_getPageIndex(ref) {
+      return this.transport.getPageIndex(ref);
+    },
+    /**
+     * @return {Promise} A promise that is resolved with a lookup table for
+     * mapping named destinations to reference numbers.
+     *
+     * This can be slow for large documents: use getDestination instead
+     */
+    getDestinations: function PDFDocumentProxy_getDestinations() {
+      return this.transport.getDestinations();
+    },
+    /**
+     * @param {string} id The named destination to get.
+     * @return {Promise} A promise that is resolved with all information
+     * of the given named destination.
+     */
+    getDestination: function PDFDocumentProxy_getDestination(id) {
+      return this.transport.getDestination(id);
+    },
+    /**
+     * @return {Promise} A promise that is resolved with a lookup table for
+     * mapping named attachments to their content.
+     */
+    getAttachments: function PDFDocumentProxy_getAttachments() {
+      return this.transport.getAttachments();
+    },
+    /**
+     * @return {Promise} A promise that is resolved with an array of all the
+     * JavaScript strings in the name tree.
+     */
+    getJavaScript: function PDFDocumentProxy_getJavaScript() {
+      return this.transport.getJavaScript();
+    },
+    /**
+     * @return {Promise} A promise that is resolved with an {Array} that is a
+     * tree outline (if it has one) of the PDF. The tree is in the format of:
+     * [
+     *  {
+     *   title: string,
+     *   bold: boolean,
+     *   italic: boolean,
+     *   color: rgb array,
+     *   dest: dest obj,
+     *   items: array of more items like this
+     *  },
+     *  ...
+     * ].
+     */
+    getOutline: function PDFDocumentProxy_getOutline() {
+      return this.transport.getOutline();
+    },
+    /**
+     * @return {Promise} A promise that is resolved with an {Object} that has
+     * info and metadata properties.  Info is an {Object} filled with anything
+     * available in the information dictionary and similarly metadata is a
+     * {Metadata} object with information from the metadata section of the PDF.
+     */
+    getMetadata: function PDFDocumentProxy_getMetadata() {
+      return this.transport.getMetadata();
+    },
+    /**
+     * @return {Promise} A promise that is resolved with a TypedArray that has
+     * the raw data from the PDF.
+     */
+    getData: function PDFDocumentProxy_getData() {
+      return this.transport.getData();
+    },
+    /**
+     * @return {Promise} A promise that is resolved when the document's data
+     * is loaded. It is resolved with an {Object} that contains the length
+     * property that indicates size of the PDF data in bytes.
+     */
+    getDownloadInfo: function PDFDocumentProxy_getDownloadInfo() {
+      return this.transport.downloadInfoCapability.promise;
+    },
+    /**
+     * @return {Promise} A promise this is resolved with current stats about
+     * document structures (see {@link PDFDocumentStats}).
+     */
+    getStats: function PDFDocumentProxy_getStats() {
+      return this.transport.getStats();
+    },
+    /**
+     * Cleans up resources allocated by the document, e.g. created @font-face.
+     */
+    cleanup: function PDFDocumentProxy_cleanup() {
+      this.transport.startCleanup();
+    },
+    /**
+     * Destroys current document instance and terminates worker.
+     */
+    destroy: function PDFDocumentProxy_destroy() {
+      this.transport.destroy();
+    }
+  };
+  return PDFDocumentProxy;
+})();
+
+/**
+ * Page text content.
+ *
+ * @typedef {Object} TextContent
+ * @property {array} items - array of {@link TextItem}
+ * @property {Object} styles - {@link TextStyles} objects, indexed by font
+ *                    name.
+ */
+
+/**
+ * Page text content part.
+ *
+ * @typedef {Object} TextItem
+ * @property {string} str - text content.
+ * @property {string} dir - text direction: 'ttb', 'ltr' or 'rtl'.
+ * @property {array} transform - transformation matrix.
+ * @property {number} width - width in device space.
+ * @property {number} height - height in device space.
+ * @property {string} fontName - font name used by pdf.js for converted font.
+ */
+
+/**
+ * Text style.
+ *
+ * @typedef {Object} TextStyle
+ * @property {number} ascent - font ascent.
+ * @property {number} descent - font descent.
+ * @property {boolean} vertical - text is in vertical mode.
+ * @property {string} fontFamily - possible font family
+ */
+
+/**
+ * Page render parameters.
+ *
+ * @typedef {Object} RenderParameters
+ * @property {Object} canvasContext - A 2D context of a DOM Canvas object.
+ * @property {PDFJS.PageViewport} viewport - Rendering viewport obtained by
+ *                                calling of PDFPage.getViewport method.
+ * @property {string} intent - Rendering intent, can be 'display' or 'print'
+ *                    (default value is 'display').
+ * @property {Object} imageLayer - (optional) An object that has beginLayout,
+ *                    endLayout and appendImage functions.
+ * @property {function} continueCallback - (deprecated) A function that will be
+ *                      called each time the rendering is paused.  To continue
+ *                      rendering call the function that is the first argument
+ *                      to the callback.
+ */
+
+/**
+ * PDF page operator list.
+ *
+ * @typedef {Object} PDFOperatorList
+ * @property {Array} fnArray - Array containing the operator functions.
+ * @property {Array} argsArray - Array containing the arguments of the
+ *                               functions.
+ */
+
+/**
+ * Proxy to a PDFPage in the worker thread.
+ * @class
+ */
+var PDFPageProxy = (function PDFPageProxyClosure() {
+  function PDFPageProxy(pageIndex, pageInfo, transport) {
+    this.pageIndex = pageIndex;
+    this.pageInfo = pageInfo;
+    this.transport = transport;
+    this.stats = new StatTimer();
+    this.stats.enabled = !!globalScope.PDFJS.enableStats;
+    this.commonObjs = transport.commonObjs;
+    this.objs = new PDFObjects();
+    this.cleanupAfterRender = false;
+    this.pendingDestroy = false;
+    this.intentStates = {};
+  }
+  PDFPageProxy.prototype = /** @lends PDFPageProxy.prototype */ {
+    /**
+     * @return {number} Page number of the page. First page is 1.
+     */
+    get pageNumber() {
+      return this.pageIndex + 1;
+    },
+    /**
+     * @return {number} The number of degrees the page is rotated clockwise.
+     */
+    get rotate() {
+      return this.pageInfo.rotate;
+    },
+    /**
+     * @return {Object} The reference that points to this page. It has 'num' and
+     * 'gen' properties.
+     */
+    get ref() {
+      return this.pageInfo.ref;
+    },
+    /**
+     * @return {Array} An array of the visible portion of the PDF page in the
+     * user space units - [x1, y1, x2, y2].
+     */
+    get view() {
+      return this.pageInfo.view;
+    },
+    /**
+     * @param {number} scale The desired scale of the viewport.
+     * @param {number} rotate Degrees to rotate the viewport. If omitted this
+     * defaults to the page rotation.
+     * @return {PDFJS.PageViewport} Contains 'width' and 'height' properties
+     * along with transforms required for rendering.
+     */
+    getViewport: function PDFPageProxy_getViewport(scale, rotate) {
+      if (arguments.length < 2) {
+        rotate = this.rotate;
+      }
+      return new PDFJS.PageViewport(this.view, scale, rotate, 0, 0);
+    },
+    /**
+     * @return {Promise} A promise that is resolved with an {Array} of the
+     * annotation objects.
+     */
+    getAnnotations: function PDFPageProxy_getAnnotations() {
+      if (this.annotationsPromise) {
+        return this.annotationsPromise;
+      }
+
+      var promise = this.transport.getAnnotations(this.pageIndex);
+      this.annotationsPromise = promise;
+      return promise;
+    },
+    /**
+     * Begins the process of rendering a page to the desired context.
+     * @param {RenderParameters} params Page render parameters.
+     * @return {RenderTask} An object that contains the promise, which
+     *                      is resolved when the page finishes rendering.
+     */
+    render: function PDFPageProxy_render(params) {
+      var stats = this.stats;
+      stats.time('Overall');
+
+      // If there was a pending destroy cancel it so no cleanup happens during
+      // this call to render.
+      this.pendingDestroy = false;
+
+      var renderingIntent = (params.intent === 'print' ? 'print' : 'display');
+
+      if (!this.intentStates[renderingIntent]) {
+        this.intentStates[renderingIntent] = {};
+      }
+      var intentState = this.intentStates[renderingIntent];
+
+      // If there's no displayReadyCapability yet, then the operatorList
+      // was never requested before. Make the request and create the promise.
+      if (!intentState.displayReadyCapability) {
+        intentState.receivingOperatorList = true;
+        intentState.displayReadyCapability = createPromiseCapability();
+        intentState.operatorList = {
+          fnArray: [],
+          argsArray: [],
+          lastChunk: false
+        };
+
+        this.stats.time('Page Request');
+        this.transport.messageHandler.send('RenderPageRequest', {
+          pageIndex: this.pageNumber - 1,
+          intent: renderingIntent
+        });
+      }
+
+      var internalRenderTask = new InternalRenderTask(complete, params,
+                                                      this.objs,
+                                                      this.commonObjs,
+                                                      intentState.operatorList,
+                                                      this.pageNumber);
+      internalRenderTask.useRequestAnimationFrame = renderingIntent !== 'print';
+      if (!intentState.renderTasks) {
+        intentState.renderTasks = [];
+      }
+      intentState.renderTasks.push(internalRenderTask);
+      var renderTask = internalRenderTask.task;
+
+      // Obsolete parameter support
+      if (params.continueCallback) {
+        renderTask.onContinue = params.continueCallback;
+      }
+
+      var self = this;
+      intentState.displayReadyCapability.promise.then(
+        function pageDisplayReadyPromise(transparency) {
+          if (self.pendingDestroy) {
+            complete();
+            return;
+          }
+          stats.time('Rendering');
+          internalRenderTask.initalizeGraphics(transparency);
+          internalRenderTask.operatorListChanged();
+        },
+        function pageDisplayReadPromiseError(reason) {
+          complete(reason);
+        }
+      );
+
+      function complete(error) {
+        var i = intentState.renderTasks.indexOf(internalRenderTask);
+        if (i >= 0) {
+          intentState.renderTasks.splice(i, 1);
+        }
+
+        if (self.cleanupAfterRender) {
+          self.pendingDestroy = true;
+        }
+        self._tryDestroy();
+
+        if (error) {
+          internalRenderTask.capability.reject(error);
+        } else {
+          internalRenderTask.capability.resolve();
+        }
+        stats.timeEnd('Rendering');
+        stats.timeEnd('Overall');
+      }
+
+      return renderTask;
+    },
+
+    /**
+     * @return {Promise} A promise resolved with an {@link PDFOperatorList}
+     * object that represents page's operator list.
+     */
+    getOperatorList: function PDFPageProxy_getOperatorList() {
+      function operatorListChanged() {
+        if (intentState.operatorList.lastChunk) {
+          intentState.opListReadCapability.resolve(intentState.operatorList);
+        }
+      }
+
+      var renderingIntent = 'oplist';
+      if (!this.intentStates[renderingIntent]) {
+        this.intentStates[renderingIntent] = {};
+      }
+      var intentState = this.intentStates[renderingIntent];
+
+      if (!intentState.opListReadCapability) {
+        var opListTask = {};
+        opListTask.operatorListChanged = operatorListChanged;
+        intentState.receivingOperatorList = true;
+        intentState.opListReadCapability = createPromiseCapability();
+        intentState.renderTasks = [];
+        intentState.renderTasks.push(opListTask);
+        intentState.operatorList = {
+          fnArray: [],
+          argsArray: [],
+          lastChunk: false
+        };
+
+        this.transport.messageHandler.send('RenderPageRequest', {
+          pageIndex: this.pageIndex,
+          intent: renderingIntent
+        });
+      }
+      return intentState.opListReadCapability.promise;
+    },
+
+    /**
+     * @return {Promise} That is resolved a {@link TextContent}
+     * object that represent the page text content.
+     */
+    getTextContent: function PDFPageProxy_getTextContent() {
+      return this.transport.messageHandler.sendWithPromise('GetTextContent', {
+        pageIndex: this.pageNumber - 1
+      });
+    },
+    /**
+     * Destroys resources allocated by the page.
+     */
+    destroy: function PDFPageProxy_destroy() {
+      this.pendingDestroy = true;
+      this._tryDestroy();
+    },
+    /**
+     * For internal use only. Attempts to clean up if rendering is in a state
+     * where that's possible.
+     * @ignore
+     */
+    _tryDestroy: function PDFPageProxy__destroy() {
+      if (!this.pendingDestroy ||
+          Object.keys(this.intentStates).some(function(intent) {
+            var intentState = this.intentStates[intent];
+            return (intentState.renderTasks.length !== 0 ||
+                    intentState.receivingOperatorList);
+          }, this)) {
+        return;
+      }
+
+      Object.keys(this.intentStates).forEach(function(intent) {
+        delete this.intentStates[intent];
+      }, this);
+      this.objs.clear();
+      this.annotationsPromise = null;
+      this.pendingDestroy = false;
+    },
+    /**
+     * For internal use only.
+     * @ignore
+     */
+    _startRenderPage: function PDFPageProxy_startRenderPage(transparency,
+                                                            intent) {
+      var intentState = this.intentStates[intent];
+      // TODO Refactor RenderPageRequest to separate rendering
+      // and operator list logic
+      if (intentState.displayReadyCapability) {
+        intentState.displayReadyCapability.resolve(transparency);
+      }
+    },
+    /**
+     * For internal use only.
+     * @ignore
+     */
+    _renderPageChunk: function PDFPageProxy_renderPageChunk(operatorListChunk,
+                                                            intent) {
+      var intentState = this.intentStates[intent];
+      var i, ii;
+      // Add the new chunk to the current operator list.
+      for (i = 0, ii = operatorListChunk.length; i < ii; i++) {
+        intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);
+        intentState.operatorList.argsArray.push(
+          operatorListChunk.argsArray[i]);
+      }
+      intentState.operatorList.lastChunk = operatorListChunk.lastChunk;
+
+      // Notify all the rendering tasks there are more operators to be consumed.
+      for (i = 0; i < intentState.renderTasks.length; i++) {
+        intentState.renderTasks[i].operatorListChanged();
+      }
+
+      if (operatorListChunk.lastChunk) {
+        intentState.receivingOperatorList = false;
+        this._tryDestroy();
+      }
+    }
+  };
+  return PDFPageProxy;
+})();
+
+/**
+ * For internal use only.
+ * @ignore
+ */
+var WorkerTransport = (function WorkerTransportClosure() {
+  function WorkerTransport(workerInitializedCapability, pdfDataRangeTransport) {
+    this.pdfDataRangeTransport = pdfDataRangeTransport;
+    this.workerInitializedCapability = workerInitializedCapability;
+    this.commonObjs = new PDFObjects();
+
+    this.loadingTask = null;
+
+    this.pageCache = [];
+    this.pagePromises = [];
+    this.downloadInfoCapability = createPromiseCapability();
+
+    // If worker support isn't disabled explicit and the browser has worker
+    // support, create a new web worker and test if it/the browser fullfills
+    // all requirements to run parts of pdf.js in a web worker.
+    // Right now, the requirement is, that an Uint8Array is still an Uint8Array
+    // as it arrives on the worker. Chrome added this with version 15.
+    if (!globalScope.PDFJS.disableWorker && typeof Worker !== 'undefined') {
+      var workerSrc = PDFJS.workerSrc;
+      if (!workerSrc) {
+        error('No PDFJS.workerSrc specified');
+      }
+
+      try {
+        // Some versions of FF can't create a worker on localhost, see:
+        // https://bugzilla.mozilla.org/show_bug.cgi?id=683280
+        var worker = new Worker(workerSrc);
+        var messageHandler = new MessageHandler('main', worker);
+        this.messageHandler = messageHandler;
+
+        messageHandler.on('test', function transportTest(data) {
+          var supportTypedArray = data && data.supportTypedArray;
+          if (supportTypedArray) {
+            this.worker = worker;
+            if (!data.supportTransfers) {
+              PDFJS.postMessageTransfers = false;
+            }
+            this.setupMessageHandler(messageHandler);
+            workerInitializedCapability.resolve();
+          } else {
+            this.setupFakeWorker();
+          }
+        }.bind(this));
+
+        var testObj = new Uint8Array([PDFJS.postMessageTransfers ? 255 : 0]);
+        // Some versions of Opera throw a DATA_CLONE_ERR on serializing the
+        // typed array. Also, checking if we can use transfers.
+        try {
+          messageHandler.send('test', testObj, [testObj.buffer]);
+        } catch (ex) {
+          info('Cannot use postMessage transfers');
+          testObj[0] = 0;
+          messageHandler.send('test', testObj);
+        }
+        return;
+      } catch (e) {
+        info('The worker has been disabled.');
+      }
+    }
+    // Either workers are disabled, not supported or have thrown an exception.
+    // Thus, we fallback to a faked worker.
+    this.setupFakeWorker();
+  }
+  WorkerTransport.prototype = {
+    destroy: function WorkerTransport_destroy() {
+      this.pageCache = [];
+      this.pagePromises = [];
+      var self = this;
+      this.messageHandler.sendWithPromise('Terminate', null).then(function () {
+        FontLoader.clear();
+        if (self.worker) {
+          self.worker.terminate();
+        }
+      });
+    },
+
+    setupFakeWorker: function WorkerTransport_setupFakeWorker() {
+      globalScope.PDFJS.disableWorker = true;
+
+      if (!PDFJS.fakeWorkerFilesLoadedCapability) {
+        PDFJS.fakeWorkerFilesLoadedCapability = createPromiseCapability();
+        // In the developer build load worker_loader which in turn loads all the
+        // other files and resolves the promise. In production only the
+        // pdf.worker.js file is needed.
+        Util.loadScript(PDFJS.workerSrc, function() {
+          PDFJS.fakeWorkerFilesLoadedCapability.resolve();
+        });
+      }
+      PDFJS.fakeWorkerFilesLoadedCapability.promise.then(function () {
+        warn('Setting up fake worker.');
+        // If we don't use a worker, just post/sendMessage to the main thread.
+        var fakeWorker = {
+          postMessage: function WorkerTransport_postMessage(obj) {
+            fakeWorker.onmessage({data: obj});
+          },
+          terminate: function WorkerTransport_terminate() {}
+        };
+
+        var messageHandler = new MessageHandler('main', fakeWorker);
+        this.setupMessageHandler(messageHandler);
+
+        // If the main thread is our worker, setup the handling for the messages
+        // the main thread sends to it self.
+        PDFJS.WorkerMessageHandler.setup(messageHandler);
+
+        this.workerInitializedCapability.resolve();
+      }.bind(this));
+    },
+
+    setupMessageHandler:
+      function WorkerTransport_setupMessageHandler(messageHandler) {
+      this.messageHandler = messageHandler;
+
+      function updatePassword(password) {
+        messageHandler.send('UpdatePassword', password);
+      }
+
+      var pdfDataRangeTransport = this.pdfDataRangeTransport;
+      if (pdfDataRangeTransport) {
+        pdfDataRangeTransport.addRangeListener(function(begin, chunk) {
+          messageHandler.send('OnDataRange', {
+            begin: begin,
+            chunk: chunk
+          });
+        });
+
+        pdfDataRangeTransport.addProgressListener(function(loaded) {
+          messageHandler.send('OnDataProgress', {
+            loaded: loaded
+          });
+        });
+
+        pdfDataRangeTransport.addProgressiveReadListener(function(chunk) {
+          messageHandler.send('OnDataRange', {
+            chunk: chunk
+          });
+        });
+
+        messageHandler.on('RequestDataRange',
+          function transportDataRange(data) {
+            pdfDataRangeTransport.requestDataRange(data.begin, data.end);
+          }, this);
+      }
+
+      messageHandler.on('GetDoc', function transportDoc(data) {
+        var pdfInfo = data.pdfInfo;
+        this.numPages = data.pdfInfo.numPages;
+        var pdfDocument = new PDFDocumentProxy(pdfInfo, this);
+        this.pdfDocument = pdfDocument;
+        this.loadingTask._capability.resolve(pdfDocument);
+      }, this);
+
+      messageHandler.on('NeedPassword',
+                        function transportNeedPassword(exception) {
+        var loadingTask = this.loadingTask;
+        if (loadingTask.onPassword) {
+          return loadingTask.onPassword(updatePassword,
+                                        PasswordResponses.NEED_PASSWORD);
+        }
+        loadingTask._capability.reject(
+          new PasswordException(exception.message, exception.code));
+      }, this);
+
+      messageHandler.on('IncorrectPassword',
+                        function transportIncorrectPassword(exception) {
+        var loadingTask = this.loadingTask;
+        if (loadingTask.onPassword) {
+          return loadingTask.onPassword(updatePassword,
+                                        PasswordResponses.INCORRECT_PASSWORD);
+        }
+        loadingTask._capability.reject(
+          new PasswordException(exception.message, exception.code));
+      }, this);
+
+      messageHandler.on('InvalidPDF', function transportInvalidPDF(exception) {
+        this.loadingTask._capability.reject(
+          new InvalidPDFException(exception.message));
+      }, this);
+
+      messageHandler.on('MissingPDF', function transportMissingPDF(exception) {
+        this.loadingTask._capability.reject(
+          new MissingPDFException(exception.message));
+      }, this);
+
+      messageHandler.on('UnexpectedResponse',
+                        function transportUnexpectedResponse(exception) {
+        this.loadingTask._capability.reject(
+          new UnexpectedResponseException(exception.message, exception.status));
+      }, this);
+
+      messageHandler.on('UnknownError',
+                        function transportUnknownError(exception) {
+        this.loadingTask._capability.reject(
+          new UnknownErrorException(exception.message, exception.details));
+      }, this);
+
+      messageHandler.on('DataLoaded', function transportPage(data) {
+        this.downloadInfoCapability.resolve(data);
+      }, this);
+
+      messageHandler.on('PDFManagerReady', function transportPage(data) {
+        if (this.pdfDataRangeTransport) {
+          this.pdfDataRangeTransport.transportReady();
+        }
+      }, this);
+
+      messageHandler.on('StartRenderPage', function transportRender(data) {
+        var page = this.pageCache[data.pageIndex];
+
+        page.stats.timeEnd('Page Request');
+        page._startRenderPage(data.transparency, data.intent);
+      }, this);
+
+      messageHandler.on('RenderPageChunk', function transportRender(data) {
+        var page = this.pageCache[data.pageIndex];
+
+        page._renderPageChunk(data.operatorList, data.intent);
+      }, this);
+
+      messageHandler.on('commonobj', function transportObj(data) {
+        var id = data[0];
+        var type = data[1];
+        if (this.commonObjs.hasData(id)) {
+          return;
+        }
+
+        switch (type) {
+          case 'Font':
+            var exportedData = data[2];
+
+            var font;
+            if ('error' in exportedData) {
+              var error = exportedData.error;
+              warn('Error during font loading: ' + error);
+              this.commonObjs.resolve(id, error);
+              break;
+            } else {
+              font = new FontFaceObject(exportedData);
+            }
+
+            FontLoader.bind(
+              [font],
+              function fontReady(fontObjs) {
+                this.commonObjs.resolve(id, font);
+              }.bind(this)
+            );
+            break;
+          case 'FontPath':
+            this.commonObjs.resolve(id, data[2]);
+            break;
+          default:
+            error('Got unknown common object type ' + type);
+        }
+      }, this);
+
+      messageHandler.on('obj', function transportObj(data) {
+        var id = data[0];
+        var pageIndex = data[1];
+        var type = data[2];
+        var pageProxy = this.pageCache[pageIndex];
+        var imageData;
+        if (pageProxy.objs.hasData(id)) {
+          return;
+        }
+
+        switch (type) {
+          case 'JpegStream':
+            imageData = data[3];
+            loadJpegStream(id, imageData, pageProxy.objs);
+            break;
+          case 'Image':
+            imageData = data[3];
+            pageProxy.objs.resolve(id, imageData);
+
+            // heuristics that will allow not to store large data
+            var MAX_IMAGE_SIZE_TO_STORE = 8000000;
+            if (imageData && 'data' in imageData &&
+                imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) {
+              pageProxy.cleanupAfterRender = true;
+            }
+            break;
+          default:
+            error('Got unknown object type ' + type);
+        }
+      }, this);
+
+      messageHandler.on('DocProgress', function transportDocProgress(data) {
+        var loadingTask = this.loadingTask;
+        if (loadingTask.onProgress) {
+          loadingTask.onProgress({
+            loaded: data.loaded,
+            total: data.total
+          });
+        }
+      }, this);
+
+      messageHandler.on('PageError', function transportError(data) {
+        var page = this.pageCache[data.pageNum - 1];
+        var intentState = page.intentStates[data.intent];
+        if (intentState.displayReadyCapability) {
+          intentState.displayReadyCapability.reject(data.error);
+        } else {
+          error(data.error);
+        }
+      }, this);
+
+      messageHandler.on('JpegDecode', function(data) {
+        var imageUrl = data[0];
+        var components = data[1];
+        if (components !== 3 && components !== 1) {
+          return Promise.reject(
+            new Error('Only 3 components or 1 component can be returned'));
+        }
+
+        return new Promise(function (resolve, reject) {
+          var img = new Image();
+          img.onload = function () {
+            var width = img.width;
+            var height = img.height;
+            var size = width * height;
+            var rgbaLength = size * 4;
+            var buf = new Uint8Array(size * components);
+            var tmpCanvas = createScratchCanvas(width, height);
+            var tmpCtx = tmpCanvas.getContext('2d');
+            tmpCtx.drawImage(img, 0, 0);
+            var data = tmpCtx.getImageData(0, 0, width, height).data;
+            var i, j;
+
+            if (components === 3) {
+              for (i = 0, j = 0; i < rgbaLength; i += 4, j += 3) {
+                buf[j] = data[i];
+                buf[j + 1] = data[i + 1];
+                buf[j + 2] = data[i + 2];
+              }
+            } else if (components === 1) {
+              for (i = 0, j = 0; i < rgbaLength; i += 4, j++) {
+                buf[j] = data[i];
+              }
+            }
+            resolve({ data: buf, width: width, height: height});
+          };
+          img.onerror = function () {
+            reject(new Error('JpegDecode failed to load image'));
+          };
+          img.src = imageUrl;
+        });
+      });
+    },
+
+    fetchDocument: function WorkerTransport_fetchDocument(loadingTask, source) {
+      this.loadingTask = loadingTask;
+
+      source.disableAutoFetch = PDFJS.disableAutoFetch;
+      source.disableStream = PDFJS.disableStream;
+      source.chunkedViewerLoading = !!this.pdfDataRangeTransport;
+      if (this.pdfDataRangeTransport) {
+        source.length = this.pdfDataRangeTransport.length;
+        source.initialData = this.pdfDataRangeTransport.initialData;
+      }
+      this.messageHandler.send('GetDocRequest', {
+        source: source,
+        disableRange: PDFJS.disableRange,
+        maxImageSize: PDFJS.maxImageSize,
+        cMapUrl: PDFJS.cMapUrl,
+        cMapPacked: PDFJS.cMapPacked,
+        disableFontFace: PDFJS.disableFontFace,
+        disableCreateObjectURL: PDFJS.disableCreateObjectURL,
+        verbosity: PDFJS.verbosity
+      });
+    },
+
+    getData: function WorkerTransport_getData() {
+      return this.messageHandler.sendWithPromise('GetData', null);
+    },
+
+    getPage: function WorkerTransport_getPage(pageNumber, capability) {
+      if (pageNumber <= 0 || pageNumber > this.numPages ||
+          (pageNumber|0) !== pageNumber) {
+        return Promise.reject(new Error('Invalid page request'));
+      }
+
+      var pageIndex = pageNumber - 1;
+      if (pageIndex in this.pagePromises) {
+        return this.pagePromises[pageIndex];
+      }
+      var promise = this.messageHandler.sendWithPromise('GetPage', {
+        pageIndex: pageIndex
+      }).then(function (pageInfo) {
+        var page = new PDFPageProxy(pageIndex, pageInfo, this);
+        this.pageCache[pageIndex] = page;
+        return page;
+      }.bind(this));
+      this.pagePromises[pageIndex] = promise;
+      return promise;
+    },
+
+    getPageIndex: function WorkerTransport_getPageIndexByRef(ref) {
+      return this.messageHandler.sendWithPromise('GetPageIndex', { ref: ref });
+    },
+
+    getAnnotations: function WorkerTransport_getAnnotations(pageIndex) {
+      return this.messageHandler.sendWithPromise('GetAnnotations',
+        { pageIndex: pageIndex });
+    },
+
+    getDestinations: function WorkerTransport_getDestinations() {
+      return this.messageHandler.sendWithPromise('GetDestinations', null);
+    },
+
+    getDestination: function WorkerTransport_getDestination(id) {
+      return this.messageHandler.sendWithPromise('GetDestination', { id: id } );
+    },
+
+    getAttachments: function WorkerTransport_getAttachments() {
+      return this.messageHandler.sendWithPromise('GetAttachments', null);
+    },
+
+    getJavaScript: function WorkerTransport_getJavaScript() {
+      return this.messageHandler.sendWithPromise('GetJavaScript', null);
+    },
+
+    getOutline: function WorkerTransport_getOutline() {
+      return this.messageHandler.sendWithPromise('GetOutline', null);
+    },
+
+    getMetadata: function WorkerTransport_getMetadata() {
+      return this.messageHandler.sendWithPromise('GetMetadata', null).
+        then(function transportMetadata(results) {
+        return {
+          info: results[0],
+          metadata: (results[1] ? new PDFJS.Metadata(results[1]) : null)
+        };
+      });
+    },
+
+    getStats: function WorkerTransport_getStats() {
+      return this.messageHandler.sendWithPromise('GetStats', null);
+    },
+
+    startCleanup: function WorkerTransport_startCleanup() {
+      this.messageHandler.sendWithPromise('Cleanup', null).
+        then(function endCleanup() {
+        for (var i = 0, ii = this.pageCache.length; i < ii; i++) {
+          var page = this.pageCache[i];
+          if (page) {
+            page.destroy();
+          }
+        }
+        this.commonObjs.clear();
+        FontLoader.clear();
+      }.bind(this));
+    }
+  };
+  return WorkerTransport;
+
+})();
+
+/**
+ * A PDF document and page is built of many objects. E.g. there are objects
+ * for fonts, images, rendering code and such. These objects might get processed
+ * inside of a worker. The `PDFObjects` implements some basic functions to
+ * manage these objects.
+ * @ignore
+ */
+var PDFObjects = (function PDFObjectsClosure() {
+  function PDFObjects() {
+    this.objs = {};
+  }
+
+  PDFObjects.prototype = {
+    /**
+     * Internal function.
+     * Ensures there is an object defined for `objId`.
+     */
+    ensureObj: function PDFObjects_ensureObj(objId) {
+      if (this.objs[objId]) {
+        return this.objs[objId];
+      }
+
+      var obj = {
+        capability: createPromiseCapability(),
+        data: null,
+        resolved: false
+      };
+      this.objs[objId] = obj;
+
+      return obj;
+    },
+
+    /**
+     * If called *without* callback, this returns the data of `objId` but the
+     * object needs to be resolved. If it isn't, this function throws.
+     *
+     * If called *with* a callback, the callback is called with the data of the
+     * object once the object is resolved. That means, if you call this
+     * function and the object is already resolved, the callback gets called
+     * right away.
+     */
+    get: function PDFObjects_get(objId, callback) {
+      // If there is a callback, then the get can be async and the object is
+      // not required to be resolved right now
+      if (callback) {
+        this.ensureObj(objId).capability.promise.then(callback);
+        return null;
+      }
+
+      // If there isn't a callback, the user expects to get the resolved data
+      // directly.
+      var obj = this.objs[objId];
+
+      // If there isn't an object yet or the object isn't resolved, then the
+      // data isn't ready yet!
+      if (!obj || !obj.resolved) {
+        error('Requesting object that isn\'t resolved yet ' + objId);
+      }
+
+      return obj.data;
+    },
+
+    /**
+     * Resolves the object `objId` with optional `data`.
+     */
+    resolve: function PDFObjects_resolve(objId, data) {
+      var obj = this.ensureObj(objId);
+
+      obj.resolved = true;
+      obj.data = data;
+      obj.capability.resolve(data);
+    },
+
+    isResolved: function PDFObjects_isResolved(objId) {
+      var objs = this.objs;
+
+      if (!objs[objId]) {
+        return false;
+      } else {
+        return objs[objId].resolved;
+      }
+    },
+
+    hasData: function PDFObjects_hasData(objId) {
+      return this.isResolved(objId);
+    },
+
+    /**
+     * Returns the data of `objId` if object exists, null otherwise.
+     */
+    getData: function PDFObjects_getData(objId) {
+      var objs = this.objs;
+      if (!objs[objId] || !objs[objId].resolved) {
+        return null;
+      } else {
+        return objs[objId].data;
+      }
+    },
+
+    clear: function PDFObjects_clear() {
+      this.objs = {};
+    }
+  };
+  return PDFObjects;
+})();
+
+/**
+ * Allows controlling of the rendering tasks.
+ * @class
+ */
+var RenderTask = (function RenderTaskClosure() {
+  function RenderTask(internalRenderTask) {
+    this._internalRenderTask = internalRenderTask;
+
+    /**
+     * Callback for incremental rendering -- a function that will be called
+     * each time the rendering is paused.  To continue rendering call the
+     * function that is the first argument to the callback.
+     * @type {function}
+     */
+    this.onContinue = null;
+  }
+
+  RenderTask.prototype = /** @lends RenderTask.prototype */ {
+    /**
+     * Promise for rendering task completion.
+     * @return {Promise}
+     */
+    get promise() {
+      return this._internalRenderTask.capability.promise;
+    },
+
+    /**
+     * Cancels the rendering task. If the task is currently rendering it will
+     * not be cancelled until graphics pauses with a timeout. The promise that
+     * this object extends will resolved when cancelled.
+     */
+    cancel: function RenderTask_cancel() {
+      this._internalRenderTask.cancel();
+    },
+
+    /**
+     * Registers callbacks to indicate the rendering task completion.
+     *
+     * @param {function} onFulfilled The callback for the rendering completion.
+     * @param {function} onRejected The callback for the rendering failure.
+     * @return {Promise} A promise that is resolved after the onFulfilled or
+     *                   onRejected callback.
+     */
+    then: function RenderTask_then(onFulfilled, onRejected) {
+      return this.promise.then.apply(this.promise, arguments);
+    }
+  };
+
+  return RenderTask;
+})();
+
+/**
+ * For internal use only.
+ * @ignore
+ */
+var InternalRenderTask = (function InternalRenderTaskClosure() {
+
+  function InternalRenderTask(callback, params, objs, commonObjs, operatorList,
+                              pageNumber) {
+    this.callback = callback;
+    this.params = params;
+    this.objs = objs;
+    this.commonObjs = commonObjs;
+    this.operatorListIdx = null;
+    this.operatorList = operatorList;
+    this.pageNumber = pageNumber;
+    this.running = false;
+    this.graphicsReadyCallback = null;
+    this.graphicsReady = false;
+    this.useRequestAnimationFrame = false;
+    this.cancelled = false;
+    this.capability = createPromiseCapability();
+    this.task = new RenderTask(this);
+    // caching this-bound methods
+    this._continueBound = this._continue.bind(this);
+    this._scheduleNextBound = this._scheduleNext.bind(this);
+    this._nextBound = this._next.bind(this);
+  }
+
+  InternalRenderTask.prototype = {
+
+    initalizeGraphics:
+        function InternalRenderTask_initalizeGraphics(transparency) {
+
+      if (this.cancelled) {
+        return;
+      }
+      if (PDFJS.pdfBug && 'StepperManager' in globalScope &&
+          globalScope.StepperManager.enabled) {
+        this.stepper = globalScope.StepperManager.create(this.pageNumber - 1);
+        this.stepper.init(this.operatorList);
+        this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();
+      }
+
+      var params = this.params;
+      this.gfx = new CanvasGraphics(params.canvasContext, this.commonObjs,
+                                    this.objs, params.imageLayer);
+
+      this.gfx.beginDrawing(params.viewport, transparency);
+      this.operatorListIdx = 0;
+      this.graphicsReady = true;
+      if (this.graphicsReadyCallback) {
+        this.graphicsReadyCallback();
+      }
+    },
+
+    cancel: function InternalRenderTask_cancel() {
+      this.running = false;
+      this.cancelled = true;
+      this.callback('cancelled');
+    },
+
+    operatorListChanged: function InternalRenderTask_operatorListChanged() {
+      if (!this.graphicsReady) {
+        if (!this.graphicsReadyCallback) {
+          this.graphicsReadyCallback = this._continueBound;
+        }
+        return;
+      }
+
+      if (this.stepper) {
+        this.stepper.updateOperatorList(this.operatorList);
+      }
+
+      if (this.running) {
+        return;
+      }
+      this._continue();
+    },
+
+    _continue: function InternalRenderTask__continue() {
+      this.running = true;
+      if (this.cancelled) {
+        return;
+      }
+      if (this.task.onContinue) {
+        this.task.onContinue.call(this.task, this._scheduleNextBound);
+      } else {
+        this._scheduleNext();
+      }
+    },
+
+    _scheduleNext: function InternalRenderTask__scheduleNext() {
+      if (this.useRequestAnimationFrame) {
+        window.requestAnimationFrame(this._nextBound);
+      } else {
+        Promise.resolve(undefined).then(this._nextBound);
+      }
+    },
+
+    _next: function InternalRenderTask__next() {
+      if (this.cancelled) {
+        return;
+      }
+      this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList,
+                                        this.operatorListIdx,
+                                        this._continueBound,
+                                        this.stepper);
+      if (this.operatorListIdx === this.operatorList.argsArray.length) {
+        this.running = false;
+        if (this.operatorList.lastChunk) {
+          this.gfx.endDrawing();
+          this.callback();
+        }
+      }
+    }
+
+  };
+
+  return InternalRenderTask;
+})();
+
+
+var Metadata = PDFJS.Metadata = (function MetadataClosure() {
+  function fixMetadata(meta) {
+    return meta.replace(/>\\376\\377([^<]+)/g, function(all, codes) {
+      var bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g,
+                                function(code, d1, d2, d3) {
+        return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);
+      });
+      var chars = '';
+      for (var i = 0; i < bytes.length; i += 2) {
+        var code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);
+        chars += code >= 32 && code < 127 && code !== 60 && code !== 62 &&
+          code !== 38 && false ? String.fromCharCode(code) :
+          '&#x' + (0x10000 + code).toString(16).substring(1) + ';';
+      }
+      return '>' + chars;
+    });
+  }
+
+  function Metadata(meta) {
+    if (typeof meta === 'string') {
+      // Ghostscript produces invalid metadata
+      meta = fixMetadata(meta);
+
+      var parser = new DOMParser();
+      meta = parser.parseFromString(meta, 'application/xml');
+    } else if (!(meta instanceof Document)) {
+      error('Metadata: Invalid metadata object');
+    }
+
+    this.metaDocument = meta;
+    this.metadata = {};
+    this.parse();
+  }
+
+  Metadata.prototype = {
+    parse: function Metadata_parse() {
+      var doc = this.metaDocument;
+      var rdf = doc.documentElement;
+
+      if (rdf.nodeName.toLowerCase() !== 'rdf:rdf') { // Wrapped in <xmpmeta>
+        rdf = rdf.firstChild;
+        while (rdf && rdf.nodeName.toLowerCase() !== 'rdf:rdf') {
+          rdf = rdf.nextSibling;
+        }
+      }
+
+      var nodeName = (rdf) ? rdf.nodeName.toLowerCase() : null;
+      if (!rdf || nodeName !== 'rdf:rdf' || !rdf.hasChildNodes()) {
+        return;
+      }
+
+      var children = rdf.childNodes, desc, entry, name, i, ii, length, iLength;
+      for (i = 0, length = children.length; i < length; i++) {
+        desc = children[i];
+        if (desc.nodeName.toLowerCase() !== 'rdf:description') {
+          continue;
+        }
+
+        for (ii = 0, iLength = desc.childNodes.length; ii < iLength; ii++) {
+          if (desc.childNodes[ii].nodeName.toLowerCase() !== '#text') {
+            entry = desc.childNodes[ii];
+            name = entry.nodeName.toLowerCase();
+            this.metadata[name] = entry.textContent.trim();
+          }
+        }
+      }
+    },
+
+    get: function Metadata_get(name) {
+      return this.metadata[name] || null;
+    },
+
+    has: function Metadata_has(name) {
+      return typeof this.metadata[name] !== 'undefined';
+    }
+  };
+
+  return Metadata;
+})();
+
+
+// <canvas> contexts store most of the state we need natively.
+// However, PDF needs a bit more state, which we store here.
+
+// Minimal font size that would be used during canvas fillText operations.
+var MIN_FONT_SIZE = 16;
+// Maximum font size that would be used during canvas fillText operations.
+var MAX_FONT_SIZE = 100;
+var MAX_GROUP_SIZE = 4096;
+
+// Heuristic value used when enforcing minimum line widths.
+var MIN_WIDTH_FACTOR = 0.65;
+
+var COMPILE_TYPE3_GLYPHS = true;
+var MAX_SIZE_TO_COMPILE = 1000;
+
+var FULL_CHUNK_HEIGHT = 16;
+
+function createScratchCanvas(width, height) {
+  var canvas = document.createElement('canvas');
+  canvas.width = width;
+  canvas.height = height;
+  return canvas;
+}
+
+function addContextCurrentTransform(ctx) {
+  // If the context doesn't expose a `mozCurrentTransform`, add a JS based one.
+  if (!ctx.mozCurrentTransform) {
+    ctx._originalSave = ctx.save;
+    ctx._originalRestore = ctx.restore;
+    ctx._originalRotate = ctx.rotate;
+    ctx._originalScale = ctx.scale;
+    ctx._originalTranslate = ctx.translate;
+    ctx._originalTransform = ctx.transform;
+    ctx._originalSetTransform = ctx.setTransform;
+
+    ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0];
+    ctx._transformStack = [];
+
+    Object.defineProperty(ctx, 'mozCurrentTransform', {
+      get: function getCurrentTransform() {
+        return this._transformMatrix;
+      }
+    });
+
+    Object.defineProperty(ctx, 'mozCurrentTransformInverse', {
+      get: function getCurrentTransformInverse() {
+        // Calculation done using WolframAlpha:
+        // http://www.wolframalpha.com/input/?
+        //   i=Inverse+{{a%2C+c%2C+e}%2C+{b%2C+d%2C+f}%2C+{0%2C+0%2C+1}}
+
+        var m = this._transformMatrix;
+        var a = m[0], b = m[1], c = m[2], d = m[3], e = m[4], f = m[5];
+
+        var ad_bc = a * d - b * c;
+        var bc_ad = b * c - a * d;
+
+        return [
+          d / ad_bc,
+          b / bc_ad,
+          c / bc_ad,
+          a / ad_bc,
+          (d * e - c * f) / bc_ad,
+          (b * e - a * f) / ad_bc
+        ];
+      }
+    });
+
+    ctx.save = function ctxSave() {
+      var old = this._transformMatrix;
+      this._transformStack.push(old);
+      this._transformMatrix = old.slice(0, 6);
+
+      this._originalSave();
+    };
+
+    ctx.restore = function ctxRestore() {
+      var prev = this._transformStack.pop();
+      if (prev) {
+        this._transformMatrix = prev;
+        this._originalRestore();
+      }
+    };
+
+    ctx.translate = function ctxTranslate(x, y) {
+      var m = this._transformMatrix;
+      m[4] = m[0] * x + m[2] * y + m[4];
+      m[5] = m[1] * x + m[3] * y + m[5];
+
+      this._originalTranslate(x, y);
+    };
+
+    ctx.scale = function ctxScale(x, y) {
+      var m = this._transformMatrix;
+      m[0] = m[0] * x;
+      m[1] = m[1] * x;
+      m[2] = m[2] * y;
+      m[3] = m[3] * y;
+
+      this._originalScale(x, y);
+    };
+
+    ctx.transform = function ctxTransform(a, b, c, d, e, f) {
+      var m = this._transformMatrix;
+      this._transformMatrix = [
+        m[0] * a + m[2] * b,
+        m[1] * a + m[3] * b,
+        m[0] * c + m[2] * d,
+        m[1] * c + m[3] * d,
+        m[0] * e + m[2] * f + m[4],
+        m[1] * e + m[3] * f + m[5]
+      ];
+
+      ctx._originalTransform(a, b, c, d, e, f);
+    };
+
+    ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {
+      this._transformMatrix = [a, b, c, d, e, f];
+
+      ctx._originalSetTransform(a, b, c, d, e, f);
+    };
+
+    ctx.rotate = function ctxRotate(angle) {
+      var cosValue = Math.cos(angle);
+      var sinValue = Math.sin(angle);
+
+      var m = this._transformMatrix;
+      this._transformMatrix = [
+        m[0] * cosValue + m[2] * sinValue,
+        m[1] * cosValue + m[3] * sinValue,
+        m[0] * (-sinValue) + m[2] * cosValue,
+        m[1] * (-sinValue) + m[3] * cosValue,
+        m[4],
+        m[5]
+      ];
+
+      this._originalRotate(angle);
+    };
+  }
+}
+
+var CachedCanvases = (function CachedCanvasesClosure() {
+  var cache = {};
+  return {
+    getCanvas: function CachedCanvases_getCanvas(id, width, height,
+                                                 trackTransform) {
+      var canvasEntry;
+      if (cache[id] !== undefined) {
+        canvasEntry = cache[id];
+        canvasEntry.canvas.width = width;
+        canvasEntry.canvas.height = height;
+        // reset canvas transform for emulated mozCurrentTransform, if needed
+        canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0);
+      } else {
+        var canvas = createScratchCanvas(width, height);
+        var ctx = canvas.getContext('2d');
+        if (trackTransform) {
+          addContextCurrentTransform(ctx);
+        }
+        cache[id] = canvasEntry = {canvas: canvas, context: ctx};
+      }
+      return canvasEntry;
+    },
+    clear: function () {
+      for (var id in cache) {
+        var canvasEntry = cache[id];
+        // Zeroing the width and height causes Firefox to release graphics
+        // resources immediately, which can greatly reduce memory consumption.
+        canvasEntry.canvas.width = 0;
+        canvasEntry.canvas.height = 0;
+        delete cache[id];
+      }
+    }
+  };
+})();
+
+function compileType3Glyph(imgData) {
+  var POINT_TO_PROCESS_LIMIT = 1000;
+
+  var width = imgData.width, height = imgData.height;
+  var i, j, j0, width1 = width + 1;
+  var points = new Uint8Array(width1 * (height + 1));
+  var POINT_TYPES =
+      new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);
+
+  // decodes bit-packed mask data
+  var lineSize = (width + 7) & ~7, data0 = imgData.data;
+  var data = new Uint8Array(lineSize * height), pos = 0, ii;
+  for (i = 0, ii = data0.length; i < ii; i++) {
+    var mask = 128, elem = data0[i];
+    while (mask > 0) {
+      data[pos++] = (elem & mask) ? 0 : 255;
+      mask >>= 1;
+    }
+  }
+
+  // finding iteresting points: every point is located between mask pixels,
+  // so there will be points of the (width + 1)x(height + 1) grid. Every point
+  // will have flags assigned based on neighboring mask pixels:
+  //   4 | 8
+  //   --P--
+  //   2 | 1
+  // We are interested only in points with the flags:
+  //   - outside corners: 1, 2, 4, 8;
+  //   - inside corners: 7, 11, 13, 14;
+  //   - and, intersections: 5, 10.
+  var count = 0;
+  pos = 0;
+  if (data[pos] !== 0) {
+    points[0] = 1;
+    ++count;
+  }
+  for (j = 1; j < width; j++) {
+    if (data[pos] !== data[pos + 1]) {
+      points[j] = data[pos] ? 2 : 1;
+      ++count;
+    }
+    pos++;
+  }
+  if (data[pos] !== 0) {
+    points[j] = 2;
+    ++count;
+  }
+  for (i = 1; i < height; i++) {
+    pos = i * lineSize;
+    j0 = i * width1;
+    if (data[pos - lineSize] !== data[pos]) {
+      points[j0] = data[pos] ? 1 : 8;
+      ++count;
+    }
+    // 'sum' is the position of the current pixel configuration in the 'TYPES'
+    // array (in order 8-1-2-4, so we can use '>>2' to shift the column).
+    var sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);
+    for (j = 1; j < width; j++) {
+      sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) +
+            (data[pos - lineSize + 1] ? 8 : 0);
+      if (POINT_TYPES[sum]) {
+        points[j0 + j] = POINT_TYPES[sum];
+        ++count;
+      }
+      pos++;
+    }
+    if (data[pos - lineSize] !== data[pos]) {
+      points[j0 + j] = data[pos] ? 2 : 4;
+      ++count;
+    }
+
+    if (count > POINT_TO_PROCESS_LIMIT) {
+      return null;
+    }
+  }
+
+  pos = lineSize * (height - 1);
+  j0 = i * width1;
+  if (data[pos] !== 0) {
+    points[j0] = 8;
+    ++count;
+  }
+  for (j = 1; j < width; j++) {
+    if (data[pos] !== data[pos + 1]) {
+      points[j0 + j] = data[pos] ? 4 : 8;
+      ++count;
+    }
+    pos++;
+  }
+  if (data[pos] !== 0) {
+    points[j0 + j] = 4;
+    ++count;
+  }
+  if (count > POINT_TO_PROCESS_LIMIT) {
+    return null;
+  }
+
+  // building outlines
+  var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);
+  var outlines = [];
+  for (i = 0; count && i <= height; i++) {
+    var p = i * width1;
+    var end = p + width;
+    while (p < end && !points[p]) {
+      p++;
+    }
+    if (p === end) {
+      continue;
+    }
+    var coords = [p % width1, i];
+
+    var type = points[p], p0 = p, pp;
+    do {
+      var step = steps[type];
+      do {
+        p += step;
+      } while (!points[p]);
+
+      pp = points[p];
+      if (pp !== 5 && pp !== 10) {
+        // set new direction
+        type = pp;
+        // delete mark
+        points[p] = 0;
+      } else { // type is 5 or 10, ie, a crossing
+        // set new direction
+        type = pp & ((0x33 * type) >> 4);
+        // set new type for "future hit"
+        points[p] &= (type >> 2 | type << 2);
+      }
+
+      coords.push(p % width1);
+      coords.push((p / width1) | 0);
+      --count;
+    } while (p0 !== p);
+    outlines.push(coords);
+    --i;
+  }
+
+  var drawOutline = function(c) {
+    c.save();
+    // the path shall be painted in [0..1]x[0..1] space
+    c.scale(1 / width, -1 / height);
+    c.translate(0, -height);
+    c.beginPath();
+    for (var i = 0, ii = outlines.length; i < ii; i++) {
+      var o = outlines[i];
+      c.moveTo(o[0], o[1]);
+      for (var j = 2, jj = o.length; j < jj; j += 2) {
+        c.lineTo(o[j], o[j+1]);
+      }
+    }
+    c.fill();
+    c.beginPath();
+    c.restore();
+  };
+
+  return drawOutline;
+}
+
+var CanvasExtraState = (function CanvasExtraStateClosure() {
+  function CanvasExtraState(old) {
+    // Are soft masks and alpha values shapes or opacities?
+    this.alphaIsShape = false;
+    this.fontSize = 0;
+    this.fontSizeScale = 1;
+    this.textMatrix = IDENTITY_MATRIX;
+    this.textMatrixScale = 1;
+    this.fontMatrix = FONT_IDENTITY_MATRIX;
+    this.leading = 0;
+    // Current point (in user coordinates)
+    this.x = 0;
+    this.y = 0;
+    // Start of text line (in text coordinates)
+    this.lineX = 0;
+    this.lineY = 0;
+    // Character and word spacing
+    this.charSpacing = 0;
+    this.wordSpacing = 0;
+    this.textHScale = 1;
+    this.textRenderingMode = TextRenderingMode.FILL;
+    this.textRise = 0;
+    // Default fore and background colors
+    this.fillColor = '#000000';
+    this.strokeColor = '#000000';
+    this.patternFill = false;
+    // Note: fill alpha applies to all non-stroking operations
+    this.fillAlpha = 1;
+    this.strokeAlpha = 1;
+    this.lineWidth = 1;
+    this.activeSMask = null; // nonclonable field (see the save method below)
+
+    this.old = old;
+  }
+
+  CanvasExtraState.prototype = {
+    clone: function CanvasExtraState_clone() {
+      return Object.create(this);
+    },
+    setCurrentPoint: function CanvasExtraState_setCurrentPoint(x, y) {
+      this.x = x;
+      this.y = y;
+    }
+  };
+  return CanvasExtraState;
+})();
+
+var CanvasGraphics = (function CanvasGraphicsClosure() {
+  // Defines the time the executeOperatorList is going to be executing
+  // before it stops and shedules a continue of execution.
+  var EXECUTION_TIME = 15;
+  // Defines the number of steps before checking the execution time
+  var EXECUTION_STEPS = 10;
+
+  function CanvasGraphics(canvasCtx, commonObjs, objs, imageLayer) {
+    this.ctx = canvasCtx;
+    this.current = new CanvasExtraState();
+    this.stateStack = [];
+    this.pendingClip = null;
+    this.pendingEOFill = false;
+    this.res = null;
+    this.xobjs = null;
+    this.commonObjs = commonObjs;
+    this.objs = objs;
+    this.imageLayer = imageLayer;
+    this.groupStack = [];
+    this.processingType3 = null;
+    // Patterns are painted relative to the initial page/form transform, see pdf
+    // spec 8.7.2 NOTE 1.
+    this.baseTransform = null;
+    this.baseTransformStack = [];
+    this.groupLevel = 0;
+    this.smaskStack = [];
+    this.smaskCounter = 0;
+    this.tempSMask = null;
+    if (canvasCtx) {
+      // NOTE: if mozCurrentTransform is polyfilled, then the current state of
+      // the transformation must already be set in canvasCtx._transformMatrix.
+      addContextCurrentTransform(canvasCtx);
+    }
+    this.cachedGetSinglePixelWidth = null;
+  }
+
+  function putBinaryImageData(ctx, imgData) {
+    if (typeof ImageData !== 'undefined' && imgData instanceof ImageData) {
+      ctx.putImageData(imgData, 0, 0);
+      return;
+    }
+
+    // Put the image data to the canvas in chunks, rather than putting the
+    // whole image at once.  This saves JS memory, because the ImageData object
+    // is smaller. It also possibly saves C++ memory within the implementation
+    // of putImageData(). (E.g. in Firefox we make two short-lived copies of
+    // the data passed to putImageData()). |n| shouldn't be too small, however,
+    // because too many putImageData() calls will slow things down.
+    //
+    // Note: as written, if the last chunk is partial, the putImageData() call
+    // will (conceptually) put pixels past the bounds of the canvas.  But
+    // that's ok; any such pixels are ignored.
+
+    var height = imgData.height, width = imgData.width;
+    var partialChunkHeight = height % FULL_CHUNK_HEIGHT;
+    var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
+    var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
+
+    var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
+    var srcPos = 0, destPos;
+    var src = imgData.data;
+    var dest = chunkImgData.data;
+    var i, j, thisChunkHeight, elemsInThisChunk;
+
+    // There are multiple forms in which the pixel data can be passed, and
+    // imgData.kind tells us which one this is.
+    if (imgData.kind === ImageKind.GRAYSCALE_1BPP) {
+      // Grayscale, 1 bit per pixel (i.e. black-and-white).
+      var srcLength = src.byteLength;
+      var dest32 = PDFJS.hasCanvasTypedArrays ? new Uint32Array(dest.buffer) :
+        new Uint32ArrayView(dest);
+      var dest32DataLength = dest32.length;
+      var fullSrcDiff = (width + 7) >> 3;
+      var white = 0xFFFFFFFF;
+      var black = (PDFJS.isLittleEndian || !PDFJS.hasCanvasTypedArrays) ?
+        0xFF000000 : 0x000000FF;
+      for (i = 0; i < totalChunks; i++) {
+        thisChunkHeight =
+          (i < fullChunks) ? FULL_CHUNK_HEIGHT : partialChunkHeight;
+        destPos = 0;
+        for (j = 0; j < thisChunkHeight; j++) {
+          var srcDiff = srcLength - srcPos;
+          var k = 0;
+          var kEnd = (srcDiff > fullSrcDiff) ? width : srcDiff * 8 - 7;
+          var kEndUnrolled = kEnd & ~7;
+          var mask = 0;
+          var srcByte = 0;
+          for (; k < kEndUnrolled; k += 8) {
+            srcByte = src[srcPos++];
+            dest32[destPos++] = (srcByte & 128) ? white : black;
+            dest32[destPos++] = (srcByte & 64) ? white : black;
+            dest32[destPos++] = (srcByte & 32) ? white : black;
+            dest32[destPos++] = (srcByte & 16) ? white : black;
+            dest32[destPos++] = (srcByte & 8) ? white : black;
+            dest32[destPos++] = (srcByte & 4) ? white : black;
+            dest32[destPos++] = (srcByte & 2) ? white : black;
+            dest32[destPos++] = (srcByte & 1) ? white : black;
+          }
+          for (; k < kEnd; k++) {
+             if (mask === 0) {
+               srcByte = src[srcPos++];
+               mask = 128;
+             }
+
+            dest32[destPos++] = (srcByte & mask) ? white : black;
+            mask >>= 1;
+          }
+        }
+        // We ran out of input. Make all remaining pixels transparent.
+        while (destPos < dest32DataLength) {
+          dest32[destPos++] = 0;
+        }
+
+        ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
+      }
+    } else if (imgData.kind === ImageKind.RGBA_32BPP) {
+      // RGBA, 32-bits per pixel.
+
+      j = 0;
+      elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;
+      for (i = 0; i < fullChunks; i++) {
+        dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
+        srcPos += elemsInThisChunk;
+
+        ctx.putImageData(chunkImgData, 0, j);
+        j += FULL_CHUNK_HEIGHT;
+      }
+      if (i < totalChunks) {
+        elemsInThisChunk = width * partialChunkHeight * 4;
+        dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
+        ctx.putImageData(chunkImgData, 0, j);
+      }
+
+    } else if (imgData.kind === ImageKind.RGB_24BPP) {
+      // RGB, 24-bits per pixel.
+      thisChunkHeight = FULL_CHUNK_HEIGHT;
+      elemsInThisChunk = width * thisChunkHeight;
+      for (i = 0; i < totalChunks; i++) {
+        if (i >= fullChunks) {
+          thisChunkHeight = partialChunkHeight;
+          elemsInThisChunk = width * thisChunkHeight;
+        }
+
+        destPos = 0;
+        for (j = elemsInThisChunk; j--;) {
+          dest[destPos++] = src[srcPos++];
+          dest[destPos++] = src[srcPos++];
+          dest[destPos++] = src[srcPos++];
+          dest[destPos++] = 255;
+        }
+        ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
+      }
+    } else {
+      error('bad image kind: ' + imgData.kind);
+    }
+  }
+
+  function putBinaryImageMask(ctx, imgData) {
+    var height = imgData.height, width = imgData.width;
+    var partialChunkHeight = height % FULL_CHUNK_HEIGHT;
+    var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
+    var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
+
+    var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
+    var srcPos = 0;
+    var src = imgData.data;
+    var dest = chunkImgData.data;
+
+    for (var i = 0; i < totalChunks; i++) {
+      var thisChunkHeight =
+        (i < fullChunks) ? FULL_CHUNK_HEIGHT : partialChunkHeight;
+
+      // Expand the mask so it can be used by the canvas.  Any required
+      // inversion has already been handled.
+      var destPos = 3; // alpha component offset
+      for (var j = 0; j < thisChunkHeight; j++) {
+        var mask = 0;
+        for (var k = 0; k < width; k++) {
+          if (!mask) {
+            var elem = src[srcPos++];
+            mask = 128;
+          }
+          dest[destPos] = (elem & mask) ? 0 : 255;
+          destPos += 4;
+          mask >>= 1;
+        }
+      }
+      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
+    }
+  }
+
+  function copyCtxState(sourceCtx, destCtx) {
+    var properties = ['strokeStyle', 'fillStyle', 'fillRule', 'globalAlpha',
+                      'lineWidth', 'lineCap', 'lineJoin', 'miterLimit',
+                      'globalCompositeOperation', 'font'];
+    for (var i = 0, ii = properties.length; i < ii; i++) {
+      var property = properties[i];
+      if (sourceCtx[property] !== undefined) {
+        destCtx[property] = sourceCtx[property];
+      }
+    }
+    if (sourceCtx.setLineDash !== undefined) {
+      destCtx.setLineDash(sourceCtx.getLineDash());
+      destCtx.lineDashOffset =  sourceCtx.lineDashOffset;
+    } else if (sourceCtx.mozDashOffset !== undefined) {
+      destCtx.mozDash = sourceCtx.mozDash;
+      destCtx.mozDashOffset = sourceCtx.mozDashOffset;
+    }
+  }
+
+  function composeSMaskBackdrop(bytes, r0, g0, b0) {
+    var length = bytes.length;
+    for (var i = 3; i < length; i += 4) {
+      var alpha = bytes[i];
+      if (alpha === 0) {
+        bytes[i - 3] = r0;
+        bytes[i - 2] = g0;
+        bytes[i - 1] = b0;
+      } else if (alpha < 255) {
+        var alpha_ = 255 - alpha;
+        bytes[i - 3] = (bytes[i - 3] * alpha + r0 * alpha_) >> 8;
+        bytes[i - 2] = (bytes[i - 2] * alpha + g0 * alpha_) >> 8;
+        bytes[i - 1] = (bytes[i - 1] * alpha + b0 * alpha_) >> 8;
+      }
+    }
+  }
+
+  function composeSMaskAlpha(maskData, layerData) {
+    var length = maskData.length;
+    var scale = 1 / 255;
+    for (var i = 3; i < length; i += 4) {
+      var alpha = maskData[i];
+      layerData[i] = (layerData[i] * alpha * scale) | 0;
+    }
+  }
+
+  function composeSMaskLuminosity(maskData, layerData) {
+    var length = maskData.length;
+    for (var i = 3; i < length; i += 4) {
+      var y = (maskData[i - 3] * 77) +  // * 0.3 / 255 * 0x10000
+              (maskData[i - 2] * 152) + // * 0.59 ....
+              (maskData[i - 1] * 28);   // * 0.11 ....
+      layerData[i] = (layerData[i] * y) >> 16;
+    }
+  }
+
+  function genericComposeSMask(maskCtx, layerCtx, width, height,
+                               subtype, backdrop) {
+    var hasBackdrop = !!backdrop;
+    var r0 = hasBackdrop ? backdrop[0] : 0;
+    var g0 = hasBackdrop ? backdrop[1] : 0;
+    var b0 = hasBackdrop ? backdrop[2] : 0;
+
+    var composeFn;
+    if (subtype === 'Luminosity') {
+      composeFn = composeSMaskLuminosity;
+    } else {
+      composeFn = composeSMaskAlpha;
+    }
+
+    // processing image in chunks to save memory
+    var PIXELS_TO_PROCESS = 1048576;
+    var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width));
+    for (var row = 0; row < height; row += chunkSize) {
+      var chunkHeight = Math.min(chunkSize, height - row);
+      var maskData = maskCtx.getImageData(0, row, width, chunkHeight);
+      var layerData = layerCtx.getImageData(0, row, width, chunkHeight);
+
+      if (hasBackdrop) {
+        composeSMaskBackdrop(maskData.data, r0, g0, b0);
+      }
+      composeFn(maskData.data, layerData.data);
+
+      maskCtx.putImageData(layerData, 0, row);
+    }
+  }
+
+  function composeSMask(ctx, smask, layerCtx) {
+    var mask = smask.canvas;
+    var maskCtx = smask.context;
+
+    ctx.setTransform(smask.scaleX, 0, 0, smask.scaleY,
+                     smask.offsetX, smask.offsetY);
+
+    var backdrop = smask.backdrop || null;
+    if (WebGLUtils.isEnabled) {
+      var composed = WebGLUtils.composeSMask(layerCtx.canvas, mask,
+        {subtype: smask.subtype, backdrop: backdrop});
+      ctx.setTransform(1, 0, 0, 1, 0, 0);
+      ctx.drawImage(composed, smask.offsetX, smask.offsetY);
+      return;
+    }
+    genericComposeSMask(maskCtx, layerCtx, mask.width, mask.height,
+                        smask.subtype, backdrop);
+    ctx.drawImage(mask, 0, 0);
+  }
+
+  var LINE_CAP_STYLES = ['butt', 'round', 'square'];
+  var LINE_JOIN_STYLES = ['miter', 'round', 'bevel'];
+  var NORMAL_CLIP = {};
+  var EO_CLIP = {};
+
+  CanvasGraphics.prototype = {
+
+    beginDrawing: function CanvasGraphics_beginDrawing(viewport, transparency) {
+      // For pdfs that use blend modes we have to clear the canvas else certain
+      // blend modes can look wrong since we'd be blending with a white
+      // backdrop. The problem with a transparent backdrop though is we then
+      // don't get sub pixel anti aliasing on text, so we fill with white if
+      // we can.
+      var width = this.ctx.canvas.width;
+      var height = this.ctx.canvas.height;
+      if (transparency) {
+        this.ctx.clearRect(0, 0, width, height);
+      } else {
+        this.ctx.mozOpaque = true;
+        this.ctx.save();
+        this.ctx.fillStyle = 'rgb(255, 255, 255)';
+        this.ctx.fillRect(0, 0, width, height);
+        this.ctx.restore();
+      }
+
+      var transform = viewport.transform;
+
+      this.ctx.save();
+      this.ctx.transform.apply(this.ctx, transform);
+
+      this.baseTransform = this.ctx.mozCurrentTransform.slice();
+
+      if (this.imageLayer) {
+        this.imageLayer.beginLayout();
+      }
+    },
+
+    executeOperatorList: function CanvasGraphics_executeOperatorList(
+                                    operatorList,
+                                    executionStartIdx, continueCallback,
+                                    stepper) {
+      var argsArray = operatorList.argsArray;
+      var fnArray = operatorList.fnArray;
+      var i = executionStartIdx || 0;
+      var argsArrayLen = argsArray.length;
+
+      // Sometimes the OperatorList to execute is empty.
+      if (argsArrayLen === i) {
+        return i;
+      }
+
+      var chunkOperations = (argsArrayLen - i > EXECUTION_STEPS &&
+                             typeof continueCallback === 'function');
+      var endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;
+      var steps = 0;
+
+      var commonObjs = this.commonObjs;
+      var objs = this.objs;
+      var fnId;
+
+      while (true) {
+        if (stepper !== undefined && i === stepper.nextBreakPoint) {
+          stepper.breakIt(i, continueCallback);
+          return i;
+        }
+
+        fnId = fnArray[i];
+
+        if (fnId !== OPS.dependency) {
+          this[fnId].apply(this, argsArray[i]);
+        } else {
+          var deps = argsArray[i];
+          for (var n = 0, nn = deps.length; n < nn; n++) {
+            var depObjId = deps[n];
+            var common = depObjId[0] === 'g' && depObjId[1] === '_';
+            var objsPool = common ? commonObjs : objs;
+
+            // If the promise isn't resolved yet, add the continueCallback
+            // to the promise and bail out.
+            if (!objsPool.isResolved(depObjId)) {
+              objsPool.get(depObjId, continueCallback);
+              return i;
+            }
+          }
+        }
+
+        i++;
+
+        // If the entire operatorList was executed, stop as were done.
+        if (i === argsArrayLen) {
+          return i;
+        }
+
+        // If the execution took longer then a certain amount of time and
+        // `continueCallback` is specified, interrupt the execution.
+        if (chunkOperations && ++steps > EXECUTION_STEPS) {
+          if (Date.now() > endTime) {
+            continueCallback();
+            return i;
+          }
+          steps = 0;
+        }
+
+        // If the operatorList isn't executed completely yet OR the execution
+        // time was short enough, do another execution round.
+      }
+    },
+
+    endDrawing: function CanvasGraphics_endDrawing() {
+      this.ctx.restore();
+      CachedCanvases.clear();
+      WebGLUtils.clear();
+
+      if (this.imageLayer) {
+        this.imageLayer.endLayout();
+      }
+    },
+
+    // Graphics state
+    setLineWidth: function CanvasGraphics_setLineWidth(width) {
+      this.current.lineWidth = width;
+      this.ctx.lineWidth = width;
+    },
+    setLineCap: function CanvasGraphics_setLineCap(style) {
+      this.ctx.lineCap = LINE_CAP_STYLES[style];
+    },
+    setLineJoin: function CanvasGraphics_setLineJoin(style) {
+      this.ctx.lineJoin = LINE_JOIN_STYLES[style];
+    },
+    setMiterLimit: function CanvasGraphics_setMiterLimit(limit) {
+      this.ctx.miterLimit = limit;
+    },
+    setDash: function CanvasGraphics_setDash(dashArray, dashPhase) {
+      var ctx = this.ctx;
+      if (ctx.setLineDash !== undefined) {
+        ctx.setLineDash(dashArray);
+        ctx.lineDashOffset = dashPhase;
+      } else {
+        ctx.mozDash = dashArray;
+        ctx.mozDashOffset = dashPhase;
+      }
+    },
+    setRenderingIntent: function CanvasGraphics_setRenderingIntent(intent) {
+      // Maybe if we one day fully support color spaces this will be important
+      // for now we can ignore.
+      // TODO set rendering intent?
+    },
+    setFlatness: function CanvasGraphics_setFlatness(flatness) {
+      // There's no way to control this with canvas, but we can safely ignore.
+      // TODO set flatness?
+    },
+    setGState: function CanvasGraphics_setGState(states) {
+      for (var i = 0, ii = states.length; i < ii; i++) {
+        var state = states[i];
+        var key = state[0];
+        var value = state[1];
+
+        switch (key) {
+          case 'LW':
+            this.setLineWidth(value);
+            break;
+          case 'LC':
+            this.setLineCap(value);
+            break;
+          case 'LJ':
+            this.setLineJoin(value);
+            break;
+          case 'ML':
+            this.setMiterLimit(value);
+            break;
+          case 'D':
+            this.setDash(value[0], value[1]);
+            break;
+          case 'RI':
+            this.setRenderingIntent(value);
+            break;
+          case 'FL':
+            this.setFlatness(value);
+            break;
+          case 'Font':
+            this.setFont(value[0], value[1]);
+            break;
+          case 'CA':
+            this.current.strokeAlpha = state[1];
+            break;
+          case 'ca':
+            this.current.fillAlpha = state[1];
+            this.ctx.globalAlpha = state[1];
+            break;
+          case 'BM':
+            if (value && value.name && (value.name !== 'Normal')) {
+              var mode = value.name.replace(/([A-Z])/g,
+                function(c) {
+                  return '-' + c.toLowerCase();
+                }
+              ).substring(1);
+              this.ctx.globalCompositeOperation = mode;
+              if (this.ctx.globalCompositeOperation !== mode) {
+                warn('globalCompositeOperation "' + mode +
+                     '" is not supported');
+              }
+            } else {
+              this.ctx.globalCompositeOperation = 'source-over';
+            }
+            break;
+          case 'SMask':
+            if (this.current.activeSMask) {
+              this.endSMaskGroup();
+            }
+            this.current.activeSMask = value ? this.tempSMask : null;
+            if (this.current.activeSMask) {
+              this.beginSMaskGroup();
+            }
+            this.tempSMask = null;
+            break;
+        }
+      }
+    },
+    beginSMaskGroup: function CanvasGraphics_beginSMaskGroup() {
+
+      var activeSMask = this.current.activeSMask;
+      var drawnWidth = activeSMask.canvas.width;
+      var drawnHeight = activeSMask.canvas.height;
+      var cacheId = 'smaskGroupAt' + this.groupLevel;
+      var scratchCanvas = CachedCanvases.getCanvas(
+        cacheId, drawnWidth, drawnHeight, true);
+
+      var currentCtx = this.ctx;
+      var currentTransform = currentCtx.mozCurrentTransform;
+      this.ctx.save();
+
+      var groupCtx = scratchCanvas.context;
+      groupCtx.scale(1 / activeSMask.scaleX, 1 / activeSMask.scaleY);
+      groupCtx.translate(-activeSMask.offsetX, -activeSMask.offsetY);
+      groupCtx.transform.apply(groupCtx, currentTransform);
+
+      copyCtxState(currentCtx, groupCtx);
+      this.ctx = groupCtx;
+      this.setGState([
+        ['BM', 'Normal'],
+        ['ca', 1],
+        ['CA', 1]
+      ]);
+      this.groupStack.push(currentCtx);
+      this.groupLevel++;
+    },
+    endSMaskGroup: function CanvasGraphics_endSMaskGroup() {
+      var groupCtx = this.ctx;
+      this.groupLevel--;
+      this.ctx = this.groupStack.pop();
+
+      composeSMask(this.ctx, this.current.activeSMask, groupCtx);
+      this.ctx.restore();
+    },
+    save: function CanvasGraphics_save() {
+      this.ctx.save();
+      var old = this.current;
+      this.stateStack.push(old);
+      this.current = old.clone();
+      this.current.activeSMask = null;
+    },
+    restore: function CanvasGraphics_restore() {
+      if (this.stateStack.length !== 0) {
+        if (this.current.activeSMask !== null) {
+          this.endSMaskGroup();
+        }
+
+        this.current = this.stateStack.pop();
+        this.ctx.restore();
+
+        this.cachedGetSinglePixelWidth = null;
+      }
+    },
+    transform: function CanvasGraphics_transform(a, b, c, d, e, f) {
+      this.ctx.transform(a, b, c, d, e, f);
+
+      this.cachedGetSinglePixelWidth = null;
+    },
+
+    // Path
+    constructPath: function CanvasGraphics_constructPath(ops, args) {
+      var ctx = this.ctx;
+      var current = this.current;
+      var x = current.x, y = current.y;
+      for (var i = 0, j = 0, ii = ops.length; i < ii; i++) {
+        switch (ops[i] | 0) {
+          case OPS.rectangle:
+            x = args[j++];
+            y = args[j++];
+            var width = args[j++];
+            var height = args[j++];
+            if (width === 0) {
+              width = this.getSinglePixelWidth();
+            }
+            if (height === 0) {
+              height = this.getSinglePixelWidth();
+            }
+            var xw = x + width;
+            var yh = y + height;
+            this.ctx.moveTo(x, y);
+            this.ctx.lineTo(xw, y);
+            this.ctx.lineTo(xw, yh);
+            this.ctx.lineTo(x, yh);
+            this.ctx.lineTo(x, y);
+            this.ctx.closePath();
+            break;
+          case OPS.moveTo:
+            x = args[j++];
+            y = args[j++];
+            ctx.moveTo(x, y);
+            break;
+          case OPS.lineTo:
+            x = args[j++];
+            y = args[j++];
+            ctx.lineTo(x, y);
+            break;
+          case OPS.curveTo:
+            x = args[j + 4];
+            y = args[j + 5];
+            ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3],
+                              x, y);
+            j += 6;
+            break;
+          case OPS.curveTo2:
+            ctx.bezierCurveTo(x, y, args[j], args[j + 1],
+                              args[j + 2], args[j + 3]);
+            x = args[j + 2];
+            y = args[j + 3];
+            j += 4;
+            break;
+          case OPS.curveTo3:
+            x = args[j + 2];
+            y = args[j + 3];
+            ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y);
+            j += 4;
+            break;
+          case OPS.closePath:
+            ctx.closePath();
+            break;
+        }
+      }
+      current.setCurrentPoint(x, y);
+    },
+    closePath: function CanvasGraphics_closePath() {
+      this.ctx.closePath();
+    },
+    stroke: function CanvasGraphics_stroke(consumePath) {
+      consumePath = typeof consumePath !== 'undefined' ? consumePath : true;
+      var ctx = this.ctx;
+      var strokeColor = this.current.strokeColor;
+      // Prevent drawing too thin lines by enforcing a minimum line width.
+      ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR,
+                               this.current.lineWidth);
+      // For stroke we want to temporarily change the global alpha to the
+      // stroking alpha.
+      ctx.globalAlpha = this.current.strokeAlpha;
+      if (strokeColor && strokeColor.hasOwnProperty('type') &&
+          strokeColor.type === 'Pattern') {
+        // for patterns, we transform to pattern space, calculate
+        // the pattern, call stroke, and restore to user space
+        ctx.save();
+        ctx.strokeStyle = strokeColor.getPattern(ctx, this);
+        ctx.stroke();
+        ctx.restore();
+      } else {
+        ctx.stroke();
+      }
+      if (consumePath) {
+        this.consumePath();
+      }
+      // Restore the global alpha to the fill alpha
+      ctx.globalAlpha = this.current.fillAlpha;
+    },
+    closeStroke: function CanvasGraphics_closeStroke() {
+      this.closePath();
+      this.stroke();
+    },
+    fill: function CanvasGraphics_fill(consumePath) {
+      consumePath = typeof consumePath !== 'undefined' ? consumePath : true;
+      var ctx = this.ctx;
+      var fillColor = this.current.fillColor;
+      var isPatternFill = this.current.patternFill;
+      var needRestore = false;
+
+      if (isPatternFill) {
+        ctx.save();
+        ctx.fillStyle = fillColor.getPattern(ctx, this);
+        needRestore = true;
+      }
+
+      if (this.pendingEOFill) {
+        if (ctx.mozFillRule !== undefined) {
+          ctx.mozFillRule = 'evenodd';
+          ctx.fill();
+          ctx.mozFillRule = 'nonzero';
+        } else {
+          try {
+            ctx.fill('evenodd');
+          } catch (ex) {
+            // shouldn't really happen, but browsers might think differently
+            ctx.fill();
+          }
+        }
+        this.pendingEOFill = false;
+      } else {
+        ctx.fill();
+      }
+
+      if (needRestore) {
+        ctx.restore();
+      }
+      if (consumePath) {
+        this.consumePath();
+      }
+    },
+    eoFill: function CanvasGraphics_eoFill() {
+      this.pendingEOFill = true;
+      this.fill();
+    },
+    fillStroke: function CanvasGraphics_fillStroke() {
+      this.fill(false);
+      this.stroke(false);
+
+      this.consumePath();
+    },
+    eoFillStroke: function CanvasGraphics_eoFillStroke() {
+      this.pendingEOFill = true;
+      this.fillStroke();
+    },
+    closeFillStroke: function CanvasGraphics_closeFillStroke() {
+      this.closePath();
+      this.fillStroke();
+    },
+    closeEOFillStroke: function CanvasGraphics_closeEOFillStroke() {
+      this.pendingEOFill = true;
+      this.closePath();
+      this.fillStroke();
+    },
+    endPath: function CanvasGraphics_endPath() {
+      this.consumePath();
+    },
+
+    // Clipping
+    clip: function CanvasGraphics_clip() {
+      this.pendingClip = NORMAL_CLIP;
+    },
+    eoClip: function CanvasGraphics_eoClip() {
+      this.pendingClip = EO_CLIP;
+    },
+
+    // Text
+    beginText: function CanvasGraphics_beginText() {
+      this.current.textMatrix = IDENTITY_MATRIX;
+      this.current.textMatrixScale = 1;
+      this.current.x = this.current.lineX = 0;
+      this.current.y = this.current.lineY = 0;
+    },
+    endText: function CanvasGraphics_endText() {
+      var paths = this.pendingTextPaths;
+      var ctx = this.ctx;
+      if (paths === undefined) {
+        ctx.beginPath();
+        return;
+      }
+
+      ctx.save();
+      ctx.beginPath();
+      for (var i = 0; i < paths.length; i++) {
+        var path = paths[i];
+        ctx.setTransform.apply(ctx, path.transform);
+        ctx.translate(path.x, path.y);
+        path.addToPath(ctx, path.fontSize);
+      }
+      ctx.restore();
+      ctx.clip();
+      ctx.beginPath();
+      delete this.pendingTextPaths;
+    },
+    setCharSpacing: function CanvasGraphics_setCharSpacing(spacing) {
+      this.current.charSpacing = spacing;
+    },
+    setWordSpacing: function CanvasGraphics_setWordSpacing(spacing) {
+      this.current.wordSpacing = spacing;
+    },
+    setHScale: function CanvasGraphics_setHScale(scale) {
+      this.current.textHScale = scale / 100;
+    },
+    setLeading: function CanvasGraphics_setLeading(leading) {
+      this.current.leading = -leading;
+    },
+    setFont: function CanvasGraphics_setFont(fontRefName, size) {
+      var fontObj = this.commonObjs.get(fontRefName);
+      var current = this.current;
+
+      if (!fontObj) {
+        error('Can\'t find font for ' + fontRefName);
+      }
+
+      current.fontMatrix = (fontObj.fontMatrix ?
+                            fontObj.fontMatrix : FONT_IDENTITY_MATRIX);
+
+      // A valid matrix needs all main diagonal elements to be non-zero
+      // This also ensures we bypass FF bugzilla bug #719844.
+      if (current.fontMatrix[0] === 0 ||
+          current.fontMatrix[3] === 0) {
+        warn('Invalid font matrix for font ' + fontRefName);
+      }
+
+      // The spec for Tf (setFont) says that 'size' specifies the font 'scale',
+      // and in some docs this can be negative (inverted x-y axes).
+      if (size < 0) {
+        size = -size;
+        current.fontDirection = -1;
+      } else {
+        current.fontDirection = 1;
+      }
+
+      this.current.font = fontObj;
+      this.current.fontSize = size;
+
+      if (fontObj.isType3Font) {
+        return; // we don't need ctx.font for Type3 fonts
+      }
+
+      var name = fontObj.loadedName || 'sans-serif';
+      var bold = fontObj.black ? (fontObj.bold ? 'bolder' : 'bold') :
+                                 (fontObj.bold ? 'bold' : 'normal');
+
+      var italic = fontObj.italic ? 'italic' : 'normal';
+      var typeface = '"' + name + '", ' + fontObj.fallbackName;
+
+      // Some font backends cannot handle fonts below certain size.
+      // Keeping the font at minimal size and using the fontSizeScale to change
+      // the current transformation matrix before the fillText/strokeText.
+      // See https://bugzilla.mozilla.org/show_bug.cgi?id=726227
+      var browserFontSize = size < MIN_FONT_SIZE ? MIN_FONT_SIZE :
+                            size > MAX_FONT_SIZE ? MAX_FONT_SIZE : size;
+      this.current.fontSizeScale = size / browserFontSize;
+
+      var rule = italic + ' ' + bold + ' ' + browserFontSize + 'px ' + typeface;
+      this.ctx.font = rule;
+    },
+    setTextRenderingMode: function CanvasGraphics_setTextRenderingMode(mode) {
+      this.current.textRenderingMode = mode;
+    },
+    setTextRise: function CanvasGraphics_setTextRise(rise) {
+      this.current.textRise = rise;
+    },
+    moveText: function CanvasGraphics_moveText(x, y) {
+      this.current.x = this.current.lineX += x;
+      this.current.y = this.current.lineY += y;
+    },
+    setLeadingMoveText: function CanvasGraphics_setLeadingMoveText(x, y) {
+      this.setLeading(-y);
+      this.moveText(x, y);
+    },
+    setTextMatrix: function CanvasGraphics_setTextMatrix(a, b, c, d, e, f) {
+      this.current.textMatrix = [a, b, c, d, e, f];
+      this.current.textMatrixScale = Math.sqrt(a * a + b * b);
+
+      this.current.x = this.current.lineX = 0;
+      this.current.y = this.current.lineY = 0;
+    },
+    nextLine: function CanvasGraphics_nextLine() {
+      this.moveText(0, this.current.leading);
+    },
+
+    paintChar: function CanvasGraphics_paintChar(character, x, y) {
+      var ctx = this.ctx;
+      var current = this.current;
+      var font = current.font;
+      var textRenderingMode = current.textRenderingMode;
+      var fontSize = current.fontSize / current.fontSizeScale;
+      var fillStrokeMode = textRenderingMode &
+        TextRenderingMode.FILL_STROKE_MASK;
+      var isAddToPathSet = !!(textRenderingMode &
+        TextRenderingMode.ADD_TO_PATH_FLAG);
+
+      var addToPath;
+      if (font.disableFontFace || isAddToPathSet) {
+        addToPath = font.getPathGenerator(this.commonObjs, character);
+      }
+
+      if (font.disableFontFace) {
+        ctx.save();
+        ctx.translate(x, y);
+        ctx.beginPath();
+        addToPath(ctx, fontSize);
+        if (fillStrokeMode === TextRenderingMode.FILL ||
+            fillStrokeMode === TextRenderingMode.FILL_STROKE) {
+          ctx.fill();
+        }
+        if (fillStrokeMode === TextRenderingMode.STROKE ||
+            fillStrokeMode === TextRenderingMode.FILL_STROKE) {
+          ctx.stroke();
+        }
+        ctx.restore();
+      } else {
+        if (fillStrokeMode === TextRenderingMode.FILL ||
+            fillStrokeMode === TextRenderingMode.FILL_STROKE) {
+          ctx.fillText(character, x, y);
+        }
+        if (fillStrokeMode === TextRenderingMode.STROKE ||
+            fillStrokeMode === TextRenderingMode.FILL_STROKE) {
+          ctx.strokeText(character, x, y);
+        }
+      }
+
+      if (isAddToPathSet) {
+        var paths = this.pendingTextPaths || (this.pendingTextPaths = []);
+        paths.push({
+          transform: ctx.mozCurrentTransform,
+          x: x,
+          y: y,
+          fontSize: fontSize,
+          addToPath: addToPath
+        });
+      }
+    },
+
+    get isFontSubpixelAAEnabled() {
+      // Checks if anti-aliasing is enabled when scaled text is painted.
+      // On Windows GDI scaled fonts looks bad.
+      var ctx = document.createElement('canvas').getContext('2d');
+      ctx.scale(1.5, 1);
+      ctx.fillText('I', 0, 10);
+      var data = ctx.getImageData(0, 0, 10, 10).data;
+      var enabled = false;
+      for (var i = 3; i < data.length; i += 4) {
+        if (data[i] > 0 && data[i] < 255) {
+          enabled = true;
+          break;
+        }
+      }
+      return shadow(this, 'isFontSubpixelAAEnabled', enabled);
+    },
+
+    showText: function CanvasGraphics_showText(glyphs) {
+      var current = this.current;
+      var font = current.font;
+      if (font.isType3Font) {
+        return this.showType3Text(glyphs);
+      }
+
+      var fontSize = current.fontSize;
+      if (fontSize === 0) {
+        return;
+      }
+
+      var ctx = this.ctx;
+      var fontSizeScale = current.fontSizeScale;
+      var charSpacing = current.charSpacing;
+      var wordSpacing = current.wordSpacing;
+      var fontDirection = current.fontDirection;
+      var textHScale = current.textHScale * fontDirection;
+      var glyphsLength = glyphs.length;
+      var vertical = font.vertical;
+      var defaultVMetrics = font.defaultVMetrics;
+      var widthAdvanceScale = fontSize * current.fontMatrix[0];
+
+      var simpleFillText =
+        current.textRenderingMode === TextRenderingMode.FILL &&
+        !font.disableFontFace;
+
+      ctx.save();
+      ctx.transform.apply(ctx, current.textMatrix);
+      ctx.translate(current.x, current.y + current.textRise);
+
+      if (fontDirection > 0) {
+        ctx.scale(textHScale, -1);
+      } else {
+        ctx.scale(textHScale, 1);
+      }
+
+      var lineWidth = current.lineWidth;
+      var scale = current.textMatrixScale;
+      if (scale === 0 || lineWidth === 0) {
+        var fillStrokeMode = current.textRenderingMode &
+          TextRenderingMode.FILL_STROKE_MASK;
+        if (fillStrokeMode === TextRenderingMode.STROKE ||
+            fillStrokeMode === TextRenderingMode.FILL_STROKE) {
+          this.cachedGetSinglePixelWidth = null;
+          lineWidth = this.getSinglePixelWidth() * MIN_WIDTH_FACTOR;
+        }
+      } else {
+        lineWidth /= scale;
+      }
+
+      if (fontSizeScale !== 1.0) {
+        ctx.scale(fontSizeScale, fontSizeScale);
+        lineWidth /= fontSizeScale;
+      }
+
+      ctx.lineWidth = lineWidth;
+
+      var x = 0, i;
+      for (i = 0; i < glyphsLength; ++i) {
+        var glyph = glyphs[i];
+        if (glyph === null) {
+          // word break
+          x += fontDirection * wordSpacing;
+          continue;
+        } else if (isNum(glyph)) {
+          x += -glyph * fontSize * 0.001;
+          continue;
+        }
+
+        var restoreNeeded = false;
+        var character = glyph.fontChar;
+        var accent = glyph.accent;
+        var scaledX, scaledY, scaledAccentX, scaledAccentY;
+        var width = glyph.width;
+        if (vertical) {
+          var vmetric, vx, vy;
+          vmetric = glyph.vmetric || defaultVMetrics;
+          vx = glyph.vmetric ? vmetric[1] : width * 0.5;
+          vx = -vx * widthAdvanceScale;
+          vy = vmetric[2] * widthAdvanceScale;
+
+          width = vmetric ? -vmetric[0] : width;
+          scaledX = vx / fontSizeScale;
+          scaledY = (x + vy) / fontSizeScale;
+        } else {
+          scaledX = x / fontSizeScale;
+          scaledY = 0;
+        }
+
+        if (font.remeasure && width > 0 && this.isFontSubpixelAAEnabled) {
+          // some standard fonts may not have the exact width, trying to
+          // rescale per character
+          var measuredWidth = ctx.measureText(character).width * 1000 /
+            fontSize * fontSizeScale;
+          var characterScaleX = width / measuredWidth;
+          restoreNeeded = true;
+          ctx.save();
+          ctx.scale(characterScaleX, 1);
+          scaledX /= characterScaleX;
+        }
+
+        if (simpleFillText && !accent) {
+          // common case
+          ctx.fillText(character, scaledX, scaledY);
+        } else {
+          this.paintChar(character, scaledX, scaledY);
+          if (accent) {
+            scaledAccentX = scaledX + accent.offset.x / fontSizeScale;
+            scaledAccentY = scaledY - accent.offset.y / fontSizeScale;
+            this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY);
+          }
+        }
+
+        var charWidth = width * widthAdvanceScale + charSpacing * fontDirection;
+        x += charWidth;
+
+        if (restoreNeeded) {
+          ctx.restore();
+        }
+      }
+      if (vertical) {
+        current.y -= x * textHScale;
+      } else {
+        current.x += x * textHScale;
+      }
+      ctx.restore();
+    },
+
+    showType3Text: function CanvasGraphics_showType3Text(glyphs) {
+      // Type3 fonts - each glyph is a "mini-PDF"
+      var ctx = this.ctx;
+      var current = this.current;
+      var font = current.font;
+      var fontSize = current.fontSize;
+      var fontDirection = current.fontDirection;
+      var charSpacing = current.charSpacing;
+      var wordSpacing = current.wordSpacing;
+      var textHScale = current.textHScale * fontDirection;
+      var fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX;
+      var glyphsLength = glyphs.length;
+      var isTextInvisible =
+        current.textRenderingMode === TextRenderingMode.INVISIBLE;
+      var i, glyph, width;
+
+      if (isTextInvisible || fontSize === 0) {
+        return;
+      }
+
+      ctx.save();
+      ctx.transform.apply(ctx, current.textMatrix);
+      ctx.translate(current.x, current.y);
+
+      ctx.scale(textHScale, fontDirection);
+
+      for (i = 0; i < glyphsLength; ++i) {
+        glyph = glyphs[i];
+        if (glyph === null) {
+          // word break
+          this.ctx.translate(wordSpacing, 0);
+          current.x += wordSpacing * textHScale;
+          continue;
+        } else if (isNum(glyph)) {
+          var spacingLength = -glyph * 0.001 * fontSize;
+          this.ctx.translate(spacingLength, 0);
+          current.x += spacingLength * textHScale;
+          continue;
+        }
+
+        var operatorList = font.charProcOperatorList[glyph.operatorListId];
+        if (!operatorList) {
+          warn('Type3 character \"' + glyph.operatorListId +
+               '\" is not available');
+          continue;
+        }
+        this.processingType3 = glyph;
+        this.save();
+        ctx.scale(fontSize, fontSize);
+        ctx.transform.apply(ctx, fontMatrix);
+        this.executeOperatorList(operatorList);
+        this.restore();
+
+        var transformed = Util.applyTransform([glyph.width, 0], fontMatrix);
+        width = transformed[0] * fontSize + charSpacing;
+
+        ctx.translate(width, 0);
+        current.x += width * textHScale;
+      }
+      ctx.restore();
+      this.processingType3 = null;
+    },
+
+    // Type3 fonts
+    setCharWidth: function CanvasGraphics_setCharWidth(xWidth, yWidth) {
+      // We can safely ignore this since the width should be the same
+      // as the width in the Widths array.
+    },
+    setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(xWidth,
+                                                                        yWidth,
+                                                                        llx,
+                                                                        lly,
+                                                                        urx,
+                                                                        ury) {
+      // TODO According to the spec we're also suppose to ignore any operators
+      // that set color or include images while processing this type3 font.
+      this.ctx.rect(llx, lly, urx - llx, ury - lly);
+      this.clip();
+      this.endPath();
+    },
+
+    // Color
+    getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR) {
+      var pattern;
+      if (IR[0] === 'TilingPattern') {
+        var color = IR[1];
+        pattern = new TilingPattern(IR, color, this.ctx, this.objs,
+                                    this.commonObjs, this.baseTransform);
+      } else {
+        pattern = getShadingPatternFromIR(IR);
+      }
+      return pattern;
+    },
+    setStrokeColorN: function CanvasGraphics_setStrokeColorN(/*...*/) {
+      this.current.strokeColor = this.getColorN_Pattern(arguments);
+    },
+    setFillColorN: function CanvasGraphics_setFillColorN(/*...*/) {
+      this.current.fillColor = this.getColorN_Pattern(arguments);
+      this.current.patternFill = true;
+    },
+    setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) {
+      var color = Util.makeCssRgb(r, g, b);
+      this.ctx.strokeStyle = color;
+      this.current.strokeColor = color;
+    },
+    setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) {
+      var color = Util.makeCssRgb(r, g, b);
+      this.ctx.fillStyle = color;
+      this.current.fillColor = color;
+      this.current.patternFill = false;
+    },
+
+    shadingFill: function CanvasGraphics_shadingFill(patternIR) {
+      var ctx = this.ctx;
+
+      this.save();
+      var pattern = getShadingPatternFromIR(patternIR);
+      ctx.fillStyle = pattern.getPattern(ctx, this, true);
+
+      var inv = ctx.mozCurrentTransformInverse;
+      if (inv) {
+        var canvas = ctx.canvas;
+        var width = canvas.width;
+        var height = canvas.height;
+
+        var bl = Util.applyTransform([0, 0], inv);
+        var br = Util.applyTransform([0, height], inv);
+        var ul = Util.applyTransform([width, 0], inv);
+        var ur = Util.applyTransform([width, height], inv);
+
+        var x0 = Math.min(bl[0], br[0], ul[0], ur[0]);
+        var y0 = Math.min(bl[1], br[1], ul[1], ur[1]);
+        var x1 = Math.max(bl[0], br[0], ul[0], ur[0]);
+        var y1 = Math.max(bl[1], br[1], ul[1], ur[1]);
+
+        this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);
+      } else {
+        // HACK to draw the gradient onto an infinite rectangle.
+        // PDF gradients are drawn across the entire image while
+        // Canvas only allows gradients to be drawn in a rectangle
+        // The following bug should allow us to remove this.
+        // https://bugzilla.mozilla.org/show_bug.cgi?id=664884
+
+        this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);
+      }
+
+      this.restore();
+    },
+
+    // Images
+    beginInlineImage: function CanvasGraphics_beginInlineImage() {
+      error('Should not call beginInlineImage');
+    },
+    beginImageData: function CanvasGraphics_beginImageData() {
+      error('Should not call beginImageData');
+    },
+
+    paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(matrix,
+                                                                        bbox) {
+      this.save();
+      this.baseTransformStack.push(this.baseTransform);
+
+      if (isArray(matrix) && 6 === matrix.length) {
+        this.transform.apply(this, matrix);
+      }
+
+      this.baseTransform = this.ctx.mozCurrentTransform;
+
+      if (isArray(bbox) && 4 === bbox.length) {
+        var width = bbox[2] - bbox[0];
+        var height = bbox[3] - bbox[1];
+        this.ctx.rect(bbox[0], bbox[1], width, height);
+        this.clip();
+        this.endPath();
+      }
+    },
+
+    paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() {
+      this.restore();
+      this.baseTransform = this.baseTransformStack.pop();
+    },
+
+    beginGroup: function CanvasGraphics_beginGroup(group) {
+      this.save();
+      var currentCtx = this.ctx;
+      // TODO non-isolated groups - according to Rik at adobe non-isolated
+      // group results aren't usually that different and they even have tools
+      // that ignore this setting. Notes from Rik on implmenting:
+      // - When you encounter an transparency group, create a new canvas with
+      // the dimensions of the bbox
+      // - copy the content from the previous canvas to the new canvas
+      // - draw as usual
+      // - remove the backdrop alpha:
+      // alphaNew = 1 - (1 - alpha)/(1 - alphaBackdrop) with 'alpha' the alpha
+      // value of your transparency group and 'alphaBackdrop' the alpha of the
+      // backdrop
+      // - remove background color:
+      // colorNew = color - alphaNew *colorBackdrop /(1 - alphaNew)
+      if (!group.isolated) {
+        info('TODO: Support non-isolated groups.');
+      }
+
+      // TODO knockout - supposedly possible with the clever use of compositing
+      // modes.
+      if (group.knockout) {
+        warn('Knockout groups not supported.');
+      }
+
+      var currentTransform = currentCtx.mozCurrentTransform;
+      if (group.matrix) {
+        currentCtx.transform.apply(currentCtx, group.matrix);
+      }
+      assert(group.bbox, 'Bounding box is required.');
+
+      // Based on the current transform figure out how big the bounding box
+      // will actually be.
+      var bounds = Util.getAxialAlignedBoundingBox(
+                    group.bbox,
+                    currentCtx.mozCurrentTransform);
+      // Clip the bounding box to the current canvas.
+      var canvasBounds = [0,
+                          0,
+                          currentCtx.canvas.width,
+                          currentCtx.canvas.height];
+      bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];
+      // Use ceil in case we're between sizes so we don't create canvas that is
+      // too small and make the canvas at least 1x1 pixels.
+      var offsetX = Math.floor(bounds[0]);
+      var offsetY = Math.floor(bounds[1]);
+      var drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);
+      var drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);
+      var scaleX = 1, scaleY = 1;
+      if (drawnWidth > MAX_GROUP_SIZE) {
+        scaleX = drawnWidth / MAX_GROUP_SIZE;
+        drawnWidth = MAX_GROUP_SIZE;
+      }
+      if (drawnHeight > MAX_GROUP_SIZE) {
+        scaleY = drawnHeight / MAX_GROUP_SIZE;
+        drawnHeight = MAX_GROUP_SIZE;
+      }
+
+      var cacheId = 'groupAt' + this.groupLevel;
+      if (group.smask) {
+        // Using two cache entries is case if masks are used one after another.
+        cacheId +=  '_smask_' + ((this.smaskCounter++) % 2);
+      }
+      var scratchCanvas = CachedCanvases.getCanvas(
+        cacheId, drawnWidth, drawnHeight, true);
+      var groupCtx = scratchCanvas.context;
+
+      // Since we created a new canvas that is just the size of the bounding box
+      // we have to translate the group ctx.
+      groupCtx.scale(1 / scaleX, 1 / scaleY);
+      groupCtx.translate(-offsetX, -offsetY);
+      groupCtx.transform.apply(groupCtx, currentTransform);
+
+      if (group.smask) {
+        // Saving state and cached mask to be used in setGState.
+        this.smaskStack.push({
+          canvas: scratchCanvas.canvas,
+          context: groupCtx,
+          offsetX: offsetX,
+          offsetY: offsetY,
+          scaleX: scaleX,
+          scaleY: scaleY,
+          subtype: group.smask.subtype,
+          backdrop: group.smask.backdrop
+        });
+      } else {
+        // Setup the current ctx so when the group is popped we draw it at the
+        // right location.
+        currentCtx.setTransform(1, 0, 0, 1, 0, 0);
+        currentCtx.translate(offsetX, offsetY);
+        currentCtx.scale(scaleX, scaleY);
+      }
+      // The transparency group inherits all off the current graphics state
+      // except the blend mode, soft mask, and alpha constants.
+      copyCtxState(currentCtx, groupCtx);
+      this.ctx = groupCtx;
+      this.setGState([
+        ['BM', 'Normal'],
+        ['ca', 1],
+        ['CA', 1]
+      ]);
+      this.groupStack.push(currentCtx);
+      this.groupLevel++;
+    },
+
+    endGroup: function CanvasGraphics_endGroup(group) {
+      this.groupLevel--;
+      var groupCtx = this.ctx;
+      this.ctx = this.groupStack.pop();
+      // Turn off image smoothing to avoid sub pixel interpolation which can
+      // look kind of blurry for some pdfs.
+      if (this.ctx.imageSmoothingEnabled !== undefined) {
+        this.ctx.imageSmoothingEnabled = false;
+      } else {
+        this.ctx.mozImageSmoothingEnabled = false;
+      }
+      if (group.smask) {
+        this.tempSMask = this.smaskStack.pop();
+      } else {
+        this.ctx.drawImage(groupCtx.canvas, 0, 0);
+      }
+      this.restore();
+    },
+
+    beginAnnotations: function CanvasGraphics_beginAnnotations() {
+      this.save();
+      this.current = new CanvasExtraState();
+    },
+
+    endAnnotations: function CanvasGraphics_endAnnotations() {
+      this.restore();
+    },
+
+    beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform,
+                                                             matrix) {
+      this.save();
+
+      if (isArray(rect) && 4 === rect.length) {
+        var width = rect[2] - rect[0];
+        var height = rect[3] - rect[1];
+        this.ctx.rect(rect[0], rect[1], width, height);
+        this.clip();
+        this.endPath();
+      }
+
+      this.transform.apply(this, transform);
+      this.transform.apply(this, matrix);
+    },
+
+    endAnnotation: function CanvasGraphics_endAnnotation() {
+      this.restore();
+    },
+
+    paintJpegXObject: function CanvasGraphics_paintJpegXObject(objId, w, h) {
+      var domImage = this.objs.get(objId);
+      if (!domImage) {
+        warn('Dependent image isn\'t ready yet');
+        return;
+      }
+
+      this.save();
+
+      var ctx = this.ctx;
+      // scale the image to the unit square
+      ctx.scale(1 / w, -1 / h);
+
+      ctx.drawImage(domImage, 0, 0, domImage.width, domImage.height,
+                    0, -h, w, h);
+      if (this.imageLayer) {
+        var currentTransform = ctx.mozCurrentTransformInverse;
+        var position = this.getCanvasPosition(0, 0);
+        this.imageLayer.appendImage({
+          objId: objId,
+          left: position[0],
+          top: position[1],
+          width: w / currentTransform[0],
+          height: h / currentTransform[3]
+        });
+      }
+      this.restore();
+    },
+
+    paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) {
+      var ctx = this.ctx;
+      var width = img.width, height = img.height;
+      var fillColor = this.current.fillColor;
+      var isPatternFill = this.current.patternFill;
+
+      var glyph = this.processingType3;
+
+      if (COMPILE_TYPE3_GLYPHS && glyph && glyph.compiled === undefined) {
+        if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) {
+          glyph.compiled =
+            compileType3Glyph({data: img.data, width: width, height: height});
+        } else {
+          glyph.compiled = null;
+        }
+      }
+
+      if (glyph && glyph.compiled) {
+        glyph.compiled(ctx);
+        return;
+      }
+
+      var maskCanvas = CachedCanvases.getCanvas('maskCanvas', width, height);
+      var maskCtx = maskCanvas.context;
+      maskCtx.save();
+
+      putBinaryImageMask(maskCtx, img);
+
+      maskCtx.globalCompositeOperation = 'source-in';
+
+      maskCtx.fillStyle = isPatternFill ?
+                          fillColor.getPattern(maskCtx, this) : fillColor;
+      maskCtx.fillRect(0, 0, width, height);
+
+      maskCtx.restore();
+
+      this.paintInlineImageXObject(maskCanvas.canvas);
+    },
+
+    paintImageMaskXObjectRepeat:
+      function CanvasGraphics_paintImageMaskXObjectRepeat(imgData, scaleX,
+                                                          scaleY, positions) {
+      var width = imgData.width;
+      var height = imgData.height;
+      var fillColor = this.current.fillColor;
+      var isPatternFill = this.current.patternFill;
+
+      var maskCanvas = CachedCanvases.getCanvas('maskCanvas', width, height);
+      var maskCtx = maskCanvas.context;
+      maskCtx.save();
+
+      putBinaryImageMask(maskCtx, imgData);
+
+      maskCtx.globalCompositeOperation = 'source-in';
+
+      maskCtx.fillStyle = isPatternFill ?
+                          fillColor.getPattern(maskCtx, this) : fillColor;
+      maskCtx.fillRect(0, 0, width, height);
+
+      maskCtx.restore();
+
+      var ctx = this.ctx;
+      for (var i = 0, ii = positions.length; i < ii; i += 2) {
+        ctx.save();
+        ctx.transform(scaleX, 0, 0, scaleY, positions[i], positions[i + 1]);
+        ctx.scale(1, -1);
+        ctx.drawImage(maskCanvas.canvas, 0, 0, width, height,
+          0, -1, 1, 1);
+        ctx.restore();
+      }
+    },
+
+    paintImageMaskXObjectGroup:
+      function CanvasGraphics_paintImageMaskXObjectGroup(images) {
+      var ctx = this.ctx;
+
+      var fillColor = this.current.fillColor;
+      var isPatternFill = this.current.patternFill;
+      for (var i = 0, ii = images.length; i < ii; i++) {
+        var image = images[i];
+        var width = image.width, height = image.height;
+
+        var maskCanvas = CachedCanvases.getCanvas('maskCanvas', width, height);
+        var maskCtx = maskCanvas.context;
+        maskCtx.save();
+
+        putBinaryImageMask(maskCtx, image);
+
+        maskCtx.globalCompositeOperation = 'source-in';
+
+        maskCtx.fillStyle = isPatternFill ?
+                            fillColor.getPattern(maskCtx, this) : fillColor;
+        maskCtx.fillRect(0, 0, width, height);
+
+        maskCtx.restore();
+
+        ctx.save();
+        ctx.transform.apply(ctx, image.transform);
+        ctx.scale(1, -1);
+        ctx.drawImage(maskCanvas.canvas, 0, 0, width, height,
+                      0, -1, 1, 1);
+        ctx.restore();
+      }
+    },
+
+    paintImageXObject: function CanvasGraphics_paintImageXObject(objId) {
+      var imgData = this.objs.get(objId);
+      if (!imgData) {
+        warn('Dependent image isn\'t ready yet');
+        return;
+      }
+
+      this.paintInlineImageXObject(imgData);
+    },
+
+    paintImageXObjectRepeat:
+      function CanvasGraphics_paintImageXObjectRepeat(objId, scaleX, scaleY,
+                                                          positions) {
+      var imgData = this.objs.get(objId);
+      if (!imgData) {
+        warn('Dependent image isn\'t ready yet');
+        return;
+      }
+
+      var width = imgData.width;
+      var height = imgData.height;
+      var map = [];
+      for (var i = 0, ii = positions.length; i < ii; i += 2) {
+        map.push({transform: [scaleX, 0, 0, scaleY, positions[i],
+                 positions[i + 1]], x: 0, y: 0, w: width, h: height});
+      }
+      this.paintInlineImageXObjectGroup(imgData, map);
+    },
+
+    paintInlineImageXObject:
+      function CanvasGraphics_paintInlineImageXObject(imgData) {
+      var width = imgData.width;
+      var height = imgData.height;
+      var ctx = this.ctx;
+
+      this.save();
+      // scale the image to the unit square
+      ctx.scale(1 / width, -1 / height);
+
+      var currentTransform = ctx.mozCurrentTransformInverse;
+      var a = currentTransform[0], b = currentTransform[1];
+      var widthScale = Math.max(Math.sqrt(a * a + b * b), 1);
+      var c = currentTransform[2], d = currentTransform[3];
+      var heightScale = Math.max(Math.sqrt(c * c + d * d), 1);
+
+      var imgToPaint, tmpCanvas;
+      // instanceof HTMLElement does not work in jsdom node.js module
+      if (imgData instanceof HTMLElement || !imgData.data) {
+        imgToPaint = imgData;
+      } else {
+        tmpCanvas = CachedCanvases.getCanvas('inlineImage', width, height);
+        var tmpCtx = tmpCanvas.context;
+        putBinaryImageData(tmpCtx, imgData);
+        imgToPaint = tmpCanvas.canvas;
+      }
+
+      var paintWidth = width, paintHeight = height;
+      var tmpCanvasId = 'prescale1';
+      // Vertial or horizontal scaling shall not be more than 2 to not loose the
+      // pixels during drawImage operation, painting on the temporary canvas(es)
+      // that are twice smaller in size
+      while ((widthScale > 2 && paintWidth > 1) ||
+             (heightScale > 2 && paintHeight > 1)) {
+        var newWidth = paintWidth, newHeight = paintHeight;
+        if (widthScale > 2 && paintWidth > 1) {
+          newWidth = Math.ceil(paintWidth / 2);
+          widthScale /= paintWidth / newWidth;
+        }
+        if (heightScale > 2 && paintHeight > 1) {
+          newHeight = Math.ceil(paintHeight / 2);
+          heightScale /= paintHeight / newHeight;
+        }
+        tmpCanvas = CachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight);
+        tmpCtx = tmpCanvas.context;
+        tmpCtx.clearRect(0, 0, newWidth, newHeight);
+        tmpCtx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight,
+                                     0, 0, newWidth, newHeight);
+        imgToPaint = tmpCanvas.canvas;
+        paintWidth = newWidth;
+        paintHeight = newHeight;
+        tmpCanvasId = tmpCanvasId === 'prescale1' ? 'prescale2' : 'prescale1';
+      }
+      ctx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight,
+                                0, -height, width, height);
+
+      if (this.imageLayer) {
+        var position = this.getCanvasPosition(0, -height);
+        this.imageLayer.appendImage({
+          imgData: imgData,
+          left: position[0],
+          top: position[1],
+          width: width / currentTransform[0],
+          height: height / currentTransform[3]
+        });
+      }
+      this.restore();
+    },
+
+    paintInlineImageXObjectGroup:
+      function CanvasGraphics_paintInlineImageXObjectGroup(imgData, map) {
+      var ctx = this.ctx;
+      var w = imgData.width;
+      var h = imgData.height;
+
+      var tmpCanvas = CachedCanvases.getCanvas('inlineImage', w, h);
+      var tmpCtx = tmpCanvas.context;
+      putBinaryImageData(tmpCtx, imgData);
+
+      for (var i = 0, ii = map.length; i < ii; i++) {
+        var entry = map[i];
+        ctx.save();
+        ctx.transform.apply(ctx, entry.transform);
+        ctx.scale(1, -1);
+        ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h,
+                      0, -1, 1, 1);
+        if (this.imageLayer) {
+          var position = this.getCanvasPosition(entry.x, entry.y);
+          this.imageLayer.appendImage({
+            imgData: imgData,
+            left: position[0],
+            top: position[1],
+            width: w,
+            height: h
+          });
+        }
+        ctx.restore();
+      }
+    },
+
+    paintSolidColorImageMask:
+      function CanvasGraphics_paintSolidColorImageMask() {
+        this.ctx.fillRect(0, 0, 1, 1);
+    },
+
+    // Marked content
+
+    markPoint: function CanvasGraphics_markPoint(tag) {
+      // TODO Marked content.
+    },
+    markPointProps: function CanvasGraphics_markPointProps(tag, properties) {
+      // TODO Marked content.
+    },
+    beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) {
+      // TODO Marked content.
+    },
+    beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(
+                                        tag, properties) {
+      // TODO Marked content.
+    },
+    endMarkedContent: function CanvasGraphics_endMarkedContent() {
+      // TODO Marked content.
+    },
+
+    // Compatibility
+
+    beginCompat: function CanvasGraphics_beginCompat() {
+      // TODO ignore undefined operators (should we do that anyway?)
+    },
+    endCompat: function CanvasGraphics_endCompat() {
+      // TODO stop ignoring undefined operators
+    },
+
+    // Helper functions
+
+    consumePath: function CanvasGraphics_consumePath() {
+      var ctx = this.ctx;
+      if (this.pendingClip) {
+        if (this.pendingClip === EO_CLIP) {
+          if (ctx.mozFillRule !== undefined) {
+            ctx.mozFillRule = 'evenodd';
+            ctx.clip();
+            ctx.mozFillRule = 'nonzero';
+          } else {
+            try {
+              ctx.clip('evenodd');
+            } catch (ex) {
+              // shouldn't really happen, but browsers might think differently
+              ctx.clip();
+            }
+          }
+        } else {
+          ctx.clip();
+        }
+        this.pendingClip = null;
+      }
+      ctx.beginPath();
+    },
+    getSinglePixelWidth: function CanvasGraphics_getSinglePixelWidth(scale) {
+      if (this.cachedGetSinglePixelWidth === null) {
+        var inverse = this.ctx.mozCurrentTransformInverse;
+        // max of the current horizontal and vertical scale
+        this.cachedGetSinglePixelWidth = Math.sqrt(Math.max(
+          (inverse[0] * inverse[0] + inverse[1] * inverse[1]),
+          (inverse[2] * inverse[2] + inverse[3] * inverse[3])));
+      }
+      return this.cachedGetSinglePixelWidth;
+    },
+    getCanvasPosition: function CanvasGraphics_getCanvasPosition(x, y) {
+        var transform = this.ctx.mozCurrentTransform;
+        return [
+          transform[0] * x + transform[2] * y + transform[4],
+          transform[1] * x + transform[3] * y + transform[5]
+        ];
+    }
+  };
+
+  for (var op in OPS) {
+    CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op];
+  }
+
+  return CanvasGraphics;
+})();
+
+
+var WebGLUtils = (function WebGLUtilsClosure() {
+  function loadShader(gl, code, shaderType) {
+    var shader = gl.createShader(shaderType);
+    gl.shaderSource(shader, code);
+    gl.compileShader(shader);
+    var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
+    if (!compiled) {
+      var errorMsg = gl.getShaderInfoLog(shader);
+      throw new Error('Error during shader compilation: ' + errorMsg);
+    }
+    return shader;
+  }
+  function createVertexShader(gl, code) {
+    return loadShader(gl, code, gl.VERTEX_SHADER);
+  }
+  function createFragmentShader(gl, code) {
+    return loadShader(gl, code, gl.FRAGMENT_SHADER);
+  }
+  function createProgram(gl, shaders) {
+    var program = gl.createProgram();
+    for (var i = 0, ii = shaders.length; i < ii; ++i) {
+      gl.attachShader(program, shaders[i]);
+    }
+    gl.linkProgram(program);
+    var linked = gl.getProgramParameter(program, gl.LINK_STATUS);
+    if (!linked) {
+      var errorMsg = gl.getProgramInfoLog(program);
+      throw new Error('Error during program linking: ' + errorMsg);
+    }
+    return program;
+  }
+  function createTexture(gl, image, textureId) {
+    gl.activeTexture(textureId);
+    var texture = gl.createTexture();
+    gl.bindTexture(gl.TEXTURE_2D, texture);
+
+    // Set the parameters so we can render any size image.
+    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
+    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
+    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
+    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
+
+    // Upload the image into the texture.
+    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
+    return texture;
+  }
+
+  var currentGL, currentCanvas;
+  function generateGL() {
+    if (currentGL) {
+      return;
+    }
+    currentCanvas = document.createElement('canvas');
+    currentGL = currentCanvas.getContext('webgl',
+      { premultipliedalpha: false });
+  }
+
+  var smaskVertexShaderCode = '\
+  attribute vec2 a_position;                                    \
+  attribute vec2 a_texCoord;                                    \
+                                                                \
+  uniform vec2 u_resolution;                                    \
+                                                                \
+  varying vec2 v_texCoord;                                      \
+                                                                \
+  void main() {                                                 \
+    vec2 clipSpace = (a_position / u_resolution) * 2.0 - 1.0;   \
+    gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);          \
+                                                                \
+    v_texCoord = a_texCoord;                                    \
+  }                                                             ';
+
+  var smaskFragmentShaderCode = '\
+  precision mediump float;                                      \
+                                                                \
+  uniform vec4 u_backdrop;                                      \
+  uniform int u_subtype;                                        \
+  uniform sampler2D u_image;                                    \
+  uniform sampler2D u_mask;                                     \
+                                                                \
+  varying vec2 v_texCoord;                                      \
+                                                                \
+  void main() {                                                 \
+    vec4 imageColor = texture2D(u_image, v_texCoord);           \
+    vec4 maskColor = texture2D(u_mask, v_texCoord);             \
+    if (u_backdrop.a > 0.0) {                                   \
+      maskColor.rgb = maskColor.rgb * maskColor.a +             \
+                      u_backdrop.rgb * (1.0 - maskColor.a);     \
+    }                                                           \
+    float lum;                                                  \
+    if (u_subtype == 0) {                                       \
+      lum = maskColor.a;                                        \
+    } else {                                                    \
+      lum = maskColor.r * 0.3 + maskColor.g * 0.59 +            \
+            maskColor.b * 0.11;                                 \
+    }                                                           \
+    imageColor.a *= lum;                                        \
+    imageColor.rgb *= imageColor.a;                             \
+    gl_FragColor = imageColor;                                  \
+  }                                                             ';
+
+  var smaskCache = null;
+
+  function initSmaskGL() {
+    var canvas, gl;
+
+    generateGL();
+    canvas = currentCanvas;
+    currentCanvas = null;
+    gl = currentGL;
+    currentGL = null;
+
+    // setup a GLSL program
+    var vertexShader = createVertexShader(gl, smaskVertexShaderCode);
+    var fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode);
+    var program = createProgram(gl, [vertexShader, fragmentShader]);
+    gl.useProgram(program);
+
+    var cache = {};
+    cache.gl = gl;
+    cache.canvas = canvas;
+    cache.resolutionLocation = gl.getUniformLocation(program, 'u_resolution');
+    cache.positionLocation = gl.getAttribLocation(program, 'a_position');
+    cache.backdropLocation = gl.getUniformLocation(program, 'u_backdrop');
+    cache.subtypeLocation = gl.getUniformLocation(program, 'u_subtype');
+
+    var texCoordLocation = gl.getAttribLocation(program, 'a_texCoord');
+    var texLayerLocation = gl.getUniformLocation(program, 'u_image');
+    var texMaskLocation = gl.getUniformLocation(program, 'u_mask');
+
+    // provide texture coordinates for the rectangle.
+    var texCoordBuffer = gl.createBuffer();
+    gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);
+    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
+      0.0,  0.0,
+      1.0,  0.0,
+      0.0,  1.0,
+      0.0,  1.0,
+      1.0,  0.0,
+      1.0,  1.0]), gl.STATIC_DRAW);
+    gl.enableVertexAttribArray(texCoordLocation);
+    gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0);
+
+    gl.uniform1i(texLayerLocation, 0);
+    gl.uniform1i(texMaskLocation, 1);
+
+    smaskCache = cache;
+  }
+
+  function composeSMask(layer, mask, properties) {
+    var width = layer.width, height = layer.height;
+
+    if (!smaskCache) {
+      initSmaskGL();
+    }
+    var cache = smaskCache,canvas = cache.canvas, gl = cache.gl;
+    canvas.width = width;
+    canvas.height = height;
+    gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
+    gl.uniform2f(cache.resolutionLocation, width, height);
+
+    if (properties.backdrop) {
+      gl.uniform4f(cache.resolutionLocation, properties.backdrop[0],
+                   properties.backdrop[1], properties.backdrop[2], 1);
+    } else {
+      gl.uniform4f(cache.resolutionLocation, 0, 0, 0, 0);
+    }
+    gl.uniform1i(cache.subtypeLocation,
+                 properties.subtype === 'Luminosity' ? 1 : 0);
+
+    // Create a textures
+    var texture = createTexture(gl, layer, gl.TEXTURE0);
+    var maskTexture = createTexture(gl, mask, gl.TEXTURE1);
+
+
+    // Create a buffer and put a single clipspace rectangle in
+    // it (2 triangles)
+    var buffer = gl.createBuffer();
+    gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
+      0, 0,
+      width, 0,
+      0, height,
+      0, height,
+      width, 0,
+      width, height]), gl.STATIC_DRAW);
+    gl.enableVertexAttribArray(cache.positionLocation);
+    gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0);
+
+    // draw
+    gl.clearColor(0, 0, 0, 0);
+    gl.enable(gl.BLEND);
+    gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
+    gl.clear(gl.COLOR_BUFFER_BIT);
+
+    gl.drawArrays(gl.TRIANGLES, 0, 6);
+
+    gl.flush();
+
+    gl.deleteTexture(texture);
+    gl.deleteTexture(maskTexture);
+    gl.deleteBuffer(buffer);
+
+    return canvas;
+  }
+
+  var figuresVertexShaderCode = '\
+  attribute vec2 a_position;                                    \
+  attribute vec3 a_color;                                       \
+                                                                \
+  uniform vec2 u_resolution;                                    \
+  uniform vec2 u_scale;                                         \
+  uniform vec2 u_offset;                                        \
+                                                                \
+  varying vec4 v_color;                                         \
+                                                                \
+  void main() {                                                 \
+    vec2 position = (a_position + u_offset) * u_scale;          \
+    vec2 clipSpace = (position / u_resolution) * 2.0 - 1.0;     \
+    gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);          \
+                                                                \
+    v_color = vec4(a_color / 255.0, 1.0);                       \
+  }                                                             ';
+
+  var figuresFragmentShaderCode = '\
+  precision mediump float;                                      \
+                                                                \
+  varying vec4 v_color;                                         \
+                                                                \
+  void main() {                                                 \
+    gl_FragColor = v_color;                                     \
+  }                                                             ';
+
+  var figuresCache = null;
+
+  function initFiguresGL() {
+    var canvas, gl;
+
+    generateGL();
+    canvas = currentCanvas;
+    currentCanvas = null;
+    gl = currentGL;
+    currentGL = null;
+
+    // setup a GLSL program
+    var vertexShader = createVertexShader(gl, figuresVertexShaderCode);
+    var fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode);
+    var program = createProgram(gl, [vertexShader, fragmentShader]);
+    gl.useProgram(program);
+
+    var cache = {};
+    cache.gl = gl;
+    cache.canvas = canvas;
+    cache.resolutionLocation = gl.getUniformLocation(program, 'u_resolution');
+    cache.scaleLocation = gl.getUniformLocation(program, 'u_scale');
+    cache.offsetLocation = gl.getUniformLocation(program, 'u_offset');
+    cache.positionLocation = gl.getAttribLocation(program, 'a_position');
+    cache.colorLocation = gl.getAttribLocation(program, 'a_color');
+
+    figuresCache = cache;
+  }
+
+  function drawFigures(width, height, backgroundColor, figures, context) {
+    if (!figuresCache) {
+      initFiguresGL();
+    }
+    var cache = figuresCache, canvas = cache.canvas, gl = cache.gl;
+
+    canvas.width = width;
+    canvas.height = height;
+    gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
+    gl.uniform2f(cache.resolutionLocation, width, height);
+
+    // count triangle points
+    var count = 0;
+    var i, ii, rows;
+    for (i = 0, ii = figures.length; i < ii; i++) {
+      switch (figures[i].type) {
+        case 'lattice':
+          rows = (figures[i].coords.length / figures[i].verticesPerRow) | 0;
+          count += (rows - 1) * (figures[i].verticesPerRow - 1) * 6;
+          break;
+        case 'triangles':
+          count += figures[i].coords.length;
+          break;
+      }
+    }
+    // transfer data
+    var coords = new Float32Array(count * 2);
+    var colors = new Uint8Array(count * 3);
+    var coordsMap = context.coords, colorsMap = context.colors;
+    var pIndex = 0, cIndex = 0;
+    for (i = 0, ii = figures.length; i < ii; i++) {
+      var figure = figures[i], ps = figure.coords, cs = figure.colors;
+      switch (figure.type) {
+        case 'lattice':
+          var cols = figure.verticesPerRow;
+          rows = (ps.length / cols) | 0;
+          for (var row = 1; row < rows; row++) {
+            var offset = row * cols + 1;
+            for (var col = 1; col < cols; col++, offset++) {
+              coords[pIndex] = coordsMap[ps[offset - cols - 1]];
+              coords[pIndex + 1] = coordsMap[ps[offset - cols - 1] + 1];
+              coords[pIndex + 2] = coordsMap[ps[offset - cols]];
+              coords[pIndex + 3] = coordsMap[ps[offset - cols] + 1];
+              coords[pIndex + 4] = coordsMap[ps[offset - 1]];
+              coords[pIndex + 5] = coordsMap[ps[offset - 1] + 1];
+              colors[cIndex] = colorsMap[cs[offset - cols - 1]];
+              colors[cIndex + 1] = colorsMap[cs[offset - cols - 1] + 1];
+              colors[cIndex + 2] = colorsMap[cs[offset - cols - 1] + 2];
+              colors[cIndex + 3] = colorsMap[cs[offset - cols]];
+              colors[cIndex + 4] = colorsMap[cs[offset - cols] + 1];
+              colors[cIndex + 5] = colorsMap[cs[offset - cols] + 2];
+              colors[cIndex + 6] = colorsMap[cs[offset - 1]];
+              colors[cIndex + 7] = colorsMap[cs[offset - 1] + 1];
+              colors[cIndex + 8] = colorsMap[cs[offset - 1] + 2];
+
+              coords[pIndex + 6] = coords[pIndex + 2];
+              coords[pIndex + 7] = coords[pIndex + 3];
+              coords[pIndex + 8] = coords[pIndex + 4];
+              coords[pIndex + 9] = coords[pIndex + 5];
+              coords[pIndex + 10] = coordsMap[ps[offset]];
+              coords[pIndex + 11] = coordsMap[ps[offset] + 1];
+              colors[cIndex + 9] = colors[cIndex + 3];
+              colors[cIndex + 10] = colors[cIndex + 4];
+              colors[cIndex + 11] = colors[cIndex + 5];
+              colors[cIndex + 12] = colors[cIndex + 6];
+              colors[cIndex + 13] = colors[cIndex + 7];
+              colors[cIndex + 14] = colors[cIndex + 8];
+              colors[cIndex + 15] = colorsMap[cs[offset]];
+              colors[cIndex + 16] = colorsMap[cs[offset] + 1];
+              colors[cIndex + 17] = colorsMap[cs[offset] + 2];
+              pIndex += 12;
+              cIndex += 18;
+            }
+          }
+          break;
+        case 'triangles':
+          for (var j = 0, jj = ps.length; j < jj; j++) {
+            coords[pIndex] = coordsMap[ps[j]];
+            coords[pIndex + 1] = coordsMap[ps[j] + 1];
+            colors[cIndex] = colorsMap[cs[i]];
+            colors[cIndex + 1] = colorsMap[cs[j] + 1];
+            colors[cIndex + 2] = colorsMap[cs[j] + 2];
+            pIndex += 2;
+            cIndex += 3;
+          }
+          break;
+      }
+    }
+
+    // draw
+    if (backgroundColor) {
+      gl.clearColor(backgroundColor[0] / 255, backgroundColor[1] / 255,
+                    backgroundColor[2] / 255, 1.0);
+    } else {
+      gl.clearColor(0, 0, 0, 0);
+    }
+    gl.clear(gl.COLOR_BUFFER_BIT);
+
+    var coordsBuffer = gl.createBuffer();
+    gl.bindBuffer(gl.ARRAY_BUFFER, coordsBuffer);
+    gl.bufferData(gl.ARRAY_BUFFER, coords, gl.STATIC_DRAW);
+    gl.enableVertexAttribArray(cache.positionLocation);
+    gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0);
+
+    var colorsBuffer = gl.createBuffer();
+    gl.bindBuffer(gl.ARRAY_BUFFER, colorsBuffer);
+    gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW);
+    gl.enableVertexAttribArray(cache.colorLocation);
+    gl.vertexAttribPointer(cache.colorLocation, 3, gl.UNSIGNED_BYTE, false,
+                           0, 0);
+
+    gl.uniform2f(cache.scaleLocation, context.scaleX, context.scaleY);
+    gl.uniform2f(cache.offsetLocation, context.offsetX, context.offsetY);
+
+    gl.drawArrays(gl.TRIANGLES, 0, count);
+
+    gl.flush();
+
+    gl.deleteBuffer(coordsBuffer);
+    gl.deleteBuffer(colorsBuffer);
+
+    return canvas;
+  }
+
+  function cleanup() {
+    if (smaskCache && smaskCache.canvas) {
+      smaskCache.canvas.width = 0;
+      smaskCache.canvas.height = 0;
+    }
+    if (figuresCache && figuresCache.canvas) {
+      figuresCache.canvas.width = 0;
+      figuresCache.canvas.height = 0;
+    }
+    smaskCache = null;
+    figuresCache = null;
+  }
+
+  return {
+    get isEnabled() {
+      if (PDFJS.disableWebGL) {
+        return false;
+      }
+      var enabled = false;
+      try {
+        generateGL();
+        enabled = !!currentGL;
+      } catch (e) { }
+      return shadow(this, 'isEnabled', enabled);
+    },
+    composeSMask: composeSMask,
+    drawFigures: drawFigures,
+    clear: cleanup
+  };
+})();
+
+
+var ShadingIRs = {};
+
+ShadingIRs.RadialAxial = {
+  fromIR: function RadialAxial_fromIR(raw) {
+    var type = raw[1];
+    var colorStops = raw[2];
+    var p0 = raw[3];
+    var p1 = raw[4];
+    var r0 = raw[5];
+    var r1 = raw[6];
+    return {
+      type: 'Pattern',
+      getPattern: function RadialAxial_getPattern(ctx) {
+        var grad;
+        if (type === 'axial') {
+          grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);
+        } else if (type === 'radial') {
+          grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1);
+        }
+
+        for (var i = 0, ii = colorStops.length; i < ii; ++i) {
+          var c = colorStops[i];
+          grad.addColorStop(c[0], c[1]);
+        }
+        return grad;
+      }
+    };
+  }
+};
+
+var createMeshCanvas = (function createMeshCanvasClosure() {
+  function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {
+    // Very basic Gouraud-shaded triangle rasterization algorithm.
+    var coords = context.coords, colors = context.colors;
+    var bytes = data.data, rowSize = data.width * 4;
+    var tmp;
+    if (coords[p1 + 1] > coords[p2 + 1]) {
+      tmp = p1; p1 = p2; p2 = tmp; tmp = c1; c1 = c2; c2 = tmp;
+    }
+    if (coords[p2 + 1] > coords[p3 + 1]) {
+      tmp = p2; p2 = p3; p3 = tmp; tmp = c2; c2 = c3; c3 = tmp;
+    }
+    if (coords[p1 + 1] > coords[p2 + 1]) {
+      tmp = p1; p1 = p2; p2 = tmp; tmp = c1; c1 = c2; c2 = tmp;
+    }
+    var x1 = (coords[p1] + context.offsetX) * context.scaleX;
+    var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;
+    var x2 = (coords[p2] + context.offsetX) * context.scaleX;
+    var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;
+    var x3 = (coords[p3] + context.offsetX) * context.scaleX;
+    var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;
+    if (y1 >= y3) {
+      return;
+    }
+    var c1r = colors[c1], c1g = colors[c1 + 1], c1b = colors[c1 + 2];
+    var c2r = colors[c2], c2g = colors[c2 + 1], c2b = colors[c2 + 2];
+    var c3r = colors[c3], c3g = colors[c3 + 1], c3b = colors[c3 + 2];
+
+    var minY = Math.round(y1), maxY = Math.round(y3);
+    var xa, car, cag, cab;
+    var xb, cbr, cbg, cbb;
+    var k;
+    for (var y = minY; y <= maxY; y++) {
+      if (y < y2) {
+        k = y < y1 ? 0 : y1 === y2 ? 1 : (y1 - y) / (y1 - y2);
+        xa = x1 - (x1 - x2) * k;
+        car = c1r - (c1r - c2r) * k;
+        cag = c1g - (c1g - c2g) * k;
+        cab = c1b - (c1b - c2b) * k;
+      } else {
+        k = y > y3 ? 1 : y2 === y3 ? 0 : (y2 - y) / (y2 - y3);
+        xa = x2 - (x2 - x3) * k;
+        car = c2r - (c2r - c3r) * k;
+        cag = c2g - (c2g - c3g) * k;
+        cab = c2b - (c2b - c3b) * k;
+      }
+      k = y < y1 ? 0 : y > y3 ? 1 : (y1 - y) / (y1 - y3);
+      xb = x1 - (x1 - x3) * k;
+      cbr = c1r - (c1r - c3r) * k;
+      cbg = c1g - (c1g - c3g) * k;
+      cbb = c1b - (c1b - c3b) * k;
+      var x1_ = Math.round(Math.min(xa, xb));
+      var x2_ = Math.round(Math.max(xa, xb));
+      var j = rowSize * y + x1_ * 4;
+      for (var x = x1_; x <= x2_; x++) {
+        k = (xa - x) / (xa - xb);
+        k = k < 0 ? 0 : k > 1 ? 1 : k;
+        bytes[j++] = (car - (car - cbr) * k) | 0;
+        bytes[j++] = (cag - (cag - cbg) * k) | 0;
+        bytes[j++] = (cab - (cab - cbb) * k) | 0;
+        bytes[j++] = 255;
+      }
+    }
+  }
+
+  function drawFigure(data, figure, context) {
+    var ps = figure.coords;
+    var cs = figure.colors;
+    var i, ii;
+    switch (figure.type) {
+      case 'lattice':
+        var verticesPerRow = figure.verticesPerRow;
+        var rows = Math.floor(ps.length / verticesPerRow) - 1;
+        var cols = verticesPerRow - 1;
+        for (i = 0; i < rows; i++) {
+          var q = i * verticesPerRow;
+          for (var j = 0; j < cols; j++, q++) {
+            drawTriangle(data, context,
+              ps[q], ps[q + 1], ps[q + verticesPerRow],
+              cs[q], cs[q + 1], cs[q + verticesPerRow]);
+            drawTriangle(data, context,
+              ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow],
+              cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]);
+          }
+        }
+        break;
+      case 'triangles':
+        for (i = 0, ii = ps.length; i < ii; i += 3) {
+          drawTriangle(data, context,
+            ps[i], ps[i + 1], ps[i + 2],
+            cs[i], cs[i + 1], cs[i + 2]);
+        }
+        break;
+      default:
+        error('illigal figure');
+        break;
+    }
+  }
+
+  function createMeshCanvas(bounds, combinesScale, coords, colors, figures,
+                            backgroundColor) {
+    // we will increase scale on some weird factor to let antialiasing take
+    // care of "rough" edges
+    var EXPECTED_SCALE = 1.1;
+    // MAX_PATTERN_SIZE is used to avoid OOM situation.
+    var MAX_PATTERN_SIZE = 3000; // 10in @ 300dpi shall be enough
+
+    var offsetX = Math.floor(bounds[0]);
+    var offsetY = Math.floor(bounds[1]);
+    var boundsWidth = Math.ceil(bounds[2]) - offsetX;
+    var boundsHeight = Math.ceil(bounds[3]) - offsetY;
+
+    var width = Math.min(Math.ceil(Math.abs(boundsWidth * combinesScale[0] *
+      EXPECTED_SCALE)), MAX_PATTERN_SIZE);
+    var height = Math.min(Math.ceil(Math.abs(boundsHeight * combinesScale[1] *
+      EXPECTED_SCALE)), MAX_PATTERN_SIZE);
+    var scaleX = boundsWidth / width;
+    var scaleY = boundsHeight / height;
+
+    var context = {
+      coords: coords,
+      colors: colors,
+      offsetX: -offsetX,
+      offsetY: -offsetY,
+      scaleX: 1 / scaleX,
+      scaleY: 1 / scaleY
+    };
+
+    var canvas, tmpCanvas, i, ii;
+    if (WebGLUtils.isEnabled) {
+      canvas = WebGLUtils.drawFigures(width, height, backgroundColor,
+                                      figures, context);
+
+      // https://bugzilla.mozilla.org/show_bug.cgi?id=972126
+      tmpCanvas = CachedCanvases.getCanvas('mesh', width, height, false);
+      tmpCanvas.context.drawImage(canvas, 0, 0);
+      canvas = tmpCanvas.canvas;
+    } else {
+      tmpCanvas = CachedCanvases.getCanvas('mesh', width, height, false);
+      var tmpCtx = tmpCanvas.context;
+
+      var data = tmpCtx.createImageData(width, height);
+      if (backgroundColor) {
+        var bytes = data.data;
+        for (i = 0, ii = bytes.length; i < ii; i += 4) {
+          bytes[i] = backgroundColor[0];
+          bytes[i + 1] = backgroundColor[1];
+          bytes[i + 2] = backgroundColor[2];
+          bytes[i + 3] = 255;
+        }
+      }
+      for (i = 0; i < figures.length; i++) {
+        drawFigure(data, figures[i], context);
+      }
+      tmpCtx.putImageData(data, 0, 0);
+      canvas = tmpCanvas.canvas;
+    }
+
+    return {canvas: canvas, offsetX: offsetX, offsetY: offsetY,
+            scaleX: scaleX, scaleY: scaleY};
+  }
+  return createMeshCanvas;
+})();
+
+ShadingIRs.Mesh = {
+  fromIR: function Mesh_fromIR(raw) {
+    //var type = raw[1];
+    var coords = raw[2];
+    var colors = raw[3];
+    var figures = raw[4];
+    var bounds = raw[5];
+    var matrix = raw[6];
+    //var bbox = raw[7];
+    var background = raw[8];
+    return {
+      type: 'Pattern',
+      getPattern: function Mesh_getPattern(ctx, owner, shadingFill) {
+        var scale;
+        if (shadingFill) {
+          scale = Util.singularValueDecompose2dScale(ctx.mozCurrentTransform);
+        } else {
+          // Obtain scale from matrix and current transformation matrix.
+          scale = Util.singularValueDecompose2dScale(owner.baseTransform);
+          if (matrix) {
+            var matrixScale = Util.singularValueDecompose2dScale(matrix);
+            scale = [scale[0] * matrixScale[0],
+                     scale[1] * matrixScale[1]];
+          }
+        }
+
+
+        // Rasterizing on the main thread since sending/queue large canvases
+        // might cause OOM.
+        var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords,
+          colors, figures, shadingFill ? null : background);
+
+        if (!shadingFill) {
+          ctx.setTransform.apply(ctx, owner.baseTransform);
+          if (matrix) {
+            ctx.transform.apply(ctx, matrix);
+          }
+        }
+
+        ctx.translate(temporaryPatternCanvas.offsetX,
+                      temporaryPatternCanvas.offsetY);
+        ctx.scale(temporaryPatternCanvas.scaleX,
+                  temporaryPatternCanvas.scaleY);
+
+        return ctx.createPattern(temporaryPatternCanvas.canvas, 'no-repeat');
+      }
+    };
+  }
+};
+
+ShadingIRs.Dummy = {
+  fromIR: function Dummy_fromIR() {
+    return {
+      type: 'Pattern',
+      getPattern: function Dummy_fromIR_getPattern() {
+        return 'hotpink';
+      }
+    };
+  }
+};
+
+function getShadingPatternFromIR(raw) {
+  var shadingIR = ShadingIRs[raw[0]];
+  if (!shadingIR) {
+    error('Unknown IR type: ' + raw[0]);
+  }
+  return shadingIR.fromIR(raw);
+}
+
+var TilingPattern = (function TilingPatternClosure() {
+  var PaintType = {
+    COLORED: 1,
+    UNCOLORED: 2
+  };
+
+  var MAX_PATTERN_SIZE = 3000; // 10in @ 300dpi shall be enough
+
+  function TilingPattern(IR, color, ctx, objs, commonObjs, baseTransform) {
+    this.operatorList = IR[2];
+    this.matrix = IR[3] || [1, 0, 0, 1, 0, 0];
+    this.bbox = IR[4];
+    this.xstep = IR[5];
+    this.ystep = IR[6];
+    this.paintType = IR[7];
+    this.tilingType = IR[8];
+    this.color = color;
+    this.objs = objs;
+    this.commonObjs = commonObjs;
+    this.baseTransform = baseTransform;
+    this.type = 'Pattern';
+    this.ctx = ctx;
+  }
+
+  TilingPattern.prototype = {
+    createPatternCanvas: function TilinPattern_createPatternCanvas(owner) {
+      var operatorList = this.operatorList;
+      var bbox = this.bbox;
+      var xstep = this.xstep;
+      var ystep = this.ystep;
+      var paintType = this.paintType;
+      var tilingType = this.tilingType;
+      var color = this.color;
+      var objs = this.objs;
+      var commonObjs = this.commonObjs;
+
+      info('TilingType: ' + tilingType);
+
+      var x0 = bbox[0], y0 = bbox[1], x1 = bbox[2], y1 = bbox[3];
+
+      var topLeft = [x0, y0];
+      // we want the canvas to be as large as the step size
+      var botRight = [x0 + xstep, y0 + ystep];
+
+      var width = botRight[0] - topLeft[0];
+      var height = botRight[1] - topLeft[1];
+
+      // Obtain scale from matrix and current transformation matrix.
+      var matrixScale = Util.singularValueDecompose2dScale(this.matrix);
+      var curMatrixScale = Util.singularValueDecompose2dScale(
+        this.baseTransform);
+      var combinedScale = [matrixScale[0] * curMatrixScale[0],
+        matrixScale[1] * curMatrixScale[1]];
+
+      // MAX_PATTERN_SIZE is used to avoid OOM situation.
+      // Use width and height values that are as close as possible to the end
+      // result when the pattern is used. Too low value makes the pattern look
+      // blurry. Too large value makes it look too crispy.
+      width = Math.min(Math.ceil(Math.abs(width * combinedScale[0])),
+        MAX_PATTERN_SIZE);
+
+      height = Math.min(Math.ceil(Math.abs(height * combinedScale[1])),
+        MAX_PATTERN_SIZE);
+
+      var tmpCanvas = CachedCanvases.getCanvas('pattern', width, height, true);
+      var tmpCtx = tmpCanvas.context;
+      var graphics = new CanvasGraphics(tmpCtx, commonObjs, objs);
+      graphics.groupLevel = owner.groupLevel;
+
+      this.setFillAndStrokeStyleToContext(tmpCtx, paintType, color);
+
+      this.setScale(width, height, xstep, ystep);
+      this.transformToScale(graphics);
+
+      // transform coordinates to pattern space
+      var tmpTranslate = [1, 0, 0, 1, -topLeft[0], -topLeft[1]];
+      graphics.transform.apply(graphics, tmpTranslate);
+
+      this.clipBbox(graphics, bbox, x0, y0, x1, y1);
+
+      graphics.executeOperatorList(operatorList);
+      return tmpCanvas.canvas;
+    },
+
+    setScale: function TilingPattern_setScale(width, height, xstep, ystep) {
+      this.scale = [width / xstep, height / ystep];
+    },
+
+    transformToScale: function TilingPattern_transformToScale(graphics) {
+      var scale = this.scale;
+      var tmpScale = [scale[0], 0, 0, scale[1], 0, 0];
+      graphics.transform.apply(graphics, tmpScale);
+    },
+
+    scaleToContext: function TilingPattern_scaleToContext() {
+      var scale = this.scale;
+      this.ctx.scale(1 / scale[0], 1 / scale[1]);
+    },
+
+    clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) {
+      if (bbox && isArray(bbox) && bbox.length === 4) {
+        var bboxWidth = x1 - x0;
+        var bboxHeight = y1 - y0;
+        graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);
+        graphics.clip();
+        graphics.endPath();
+      }
+    },
+
+    setFillAndStrokeStyleToContext:
+      function setFillAndStrokeStyleToContext(context, paintType, color) {
+        switch (paintType) {
+          case PaintType.COLORED:
+            var ctx = this.ctx;
+            context.fillStyle = ctx.fillStyle;
+            context.strokeStyle = ctx.strokeStyle;
+            break;
+          case PaintType.UNCOLORED:
+            var cssColor = Util.makeCssRgb(color[0], color[1], color[2]);
+            context.fillStyle = cssColor;
+            context.strokeStyle = cssColor;
+            break;
+          default:
+            error('Unsupported paint type: ' + paintType);
+        }
+      },
+
+    getPattern: function TilingPattern_getPattern(ctx, owner) {
+      var temporaryPatternCanvas = this.createPatternCanvas(owner);
+
+      ctx = this.ctx;
+      ctx.setTransform.apply(ctx, this.baseTransform);
+      ctx.transform.apply(ctx, this.matrix);
+      this.scaleToContext();
+
+      return ctx.createPattern(temporaryPatternCanvas, 'repeat');
+    }
+  };
+
+  return TilingPattern;
+})();
+
+
+PDFJS.disableFontFace = false;
+
+var FontLoader = {
+  insertRule: function fontLoaderInsertRule(rule) {
+    var styleElement = document.getElementById('PDFJS_FONT_STYLE_TAG');
+    if (!styleElement) {
+      styleElement = document.createElement('style');
+      styleElement.id = 'PDFJS_FONT_STYLE_TAG';
+      document.documentElement.getElementsByTagName('head')[0].appendChild(
+        styleElement);
+    }
+
+    var styleSheet = styleElement.sheet;
+    styleSheet.insertRule(rule, styleSheet.cssRules.length);
+  },
+
+  clear: function fontLoaderClear() {
+    var styleElement = document.getElementById('PDFJS_FONT_STYLE_TAG');
+    if (styleElement) {
+      styleElement.parentNode.removeChild(styleElement);
+    }
+    this.nativeFontFaces.forEach(function(nativeFontFace) {
+      document.fonts.delete(nativeFontFace);
+    });
+    this.nativeFontFaces.length = 0;
+  },
+  get loadTestFont() {
+    // This is a CFF font with 1 glyph for '.' that fills its entire width and
+    // height.
+    return shadow(this, 'loadTestFont', atob(
+      'T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQ' +
+      'AABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwA' +
+      'AAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbm' +
+      'FtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAA' +
+      'AADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6A' +
+      'ABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAA' +
+      'MQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAA' +
+      'AAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAA' +
+      'AAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQ' +
+      'AAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMA' +
+      'AQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAA' +
+      'EAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAA' +
+      'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAA' +
+      'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
+      'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
+      'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
+      'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAA' +
+      'AAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgc' +
+      'A/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWF' +
+      'hYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQA' +
+      'AAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAg' +
+      'ABAAAAAAAAAAAD6AAAAAAAAA=='
+    ));
+  },
+
+  loadTestFontId: 0,
+
+  loadingContext: {
+    requests: [],
+    nextRequestId: 0
+  },
+
+  isSyncFontLoadingSupported: (function detectSyncFontLoadingSupport() {
+    if (isWorker) {
+      return false;
+    }
+
+    // User agent string sniffing is bad, but there is no reliable way to tell
+    // if font is fully loaded and ready to be used with canvas.
+    var userAgent = window.navigator.userAgent;
+    var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(userAgent);
+    if (m && m[1] >= 14) {
+      return true;
+    }
+    // TODO other browsers
+    if (userAgent === 'node') {
+      return true;
+    }
+    return false;
+  })(),
+
+  nativeFontFaces: [],
+
+  isFontLoadingAPISupported: (!isWorker && typeof document !== 'undefined' &&
+                              !!document.fonts),
+
+  addNativeFontFace: function fontLoader_addNativeFontFace(nativeFontFace) {
+    this.nativeFontFaces.push(nativeFontFace);
+    document.fonts.add(nativeFontFace);
+  },
+
+  bind: function fontLoaderBind(fonts, callback) {
+    assert(!isWorker, 'bind() shall be called from main thread');
+
+    var rules = [];
+    var fontsToLoad = [];
+    var fontLoadPromises = [];
+    for (var i = 0, ii = fonts.length; i < ii; i++) {
+      var font = fonts[i];
+
+      // Add the font to the DOM only once or skip if the font
+      // is already loaded.
+      if (font.attached || font.loading === false) {
+        continue;
+      }
+      font.attached = true;
+
+      if (this.isFontLoadingAPISupported) {
+        var nativeFontFace = font.createNativeFontFace();
+        if (nativeFontFace) {
+          fontLoadPromises.push(nativeFontFace.loaded);
+        }
+      } else {
+        var rule = font.bindDOM();
+        if (rule) {
+          rules.push(rule);
+          fontsToLoad.push(font);
+        }
+      }
+    }
+
+    var request = FontLoader.queueLoadingCallback(callback);
+    if (this.isFontLoadingAPISupported) {
+      Promise.all(fontsToLoad).then(function() {
+        request.complete();
+      });
+    } else if (rules.length > 0 && !this.isSyncFontLoadingSupported) {
+      FontLoader.prepareFontLoadEvent(rules, fontsToLoad, request);
+    } else {
+      request.complete();
+    }
+  },
+
+  queueLoadingCallback: function FontLoader_queueLoadingCallback(callback) {
+    function LoadLoader_completeRequest() {
+      assert(!request.end, 'completeRequest() cannot be called twice');
+      request.end = Date.now();
+
+      // sending all completed requests in order how they were queued
+      while (context.requests.length > 0 && context.requests[0].end) {
+        var otherRequest = context.requests.shift();
+        setTimeout(otherRequest.callback, 0);
+      }
+    }
+
+    var context = FontLoader.loadingContext;
+    var requestId = 'pdfjs-font-loading-' + (context.nextRequestId++);
+    var request = {
+      id: requestId,
+      complete: LoadLoader_completeRequest,
+      callback: callback,
+      started: Date.now()
+    };
+    context.requests.push(request);
+    return request;
+  },
+
+  prepareFontLoadEvent: function fontLoaderPrepareFontLoadEvent(rules,
+                                                                fonts,
+                                                                request) {
+      /** Hack begin */
+      // There's currently no event when a font has finished downloading so the
+      // following code is a dirty hack to 'guess' when a font is
+      // ready. It's assumed fonts are loaded in order, so add a known test
+      // font after the desired fonts and then test for the loading of that
+      // test font.
+
+      function int32(data, offset) {
+        return (data.charCodeAt(offset) << 24) |
+               (data.charCodeAt(offset + 1) << 16) |
+               (data.charCodeAt(offset + 2) << 8) |
+               (data.charCodeAt(offset + 3) & 0xff);
+      }
+
+      function spliceString(s, offset, remove, insert) {
+        var chunk1 = s.substr(0, offset);
+        var chunk2 = s.substr(offset + remove);
+        return chunk1 + insert + chunk2;
+      }
+
+      var i, ii;
+
+      var canvas = document.createElement('canvas');
+      canvas.width = 1;
+      canvas.height = 1;
+      var ctx = canvas.getContext('2d');
+
+      var called = 0;
+      function isFontReady(name, callback) {
+        called++;
+        // With setTimeout clamping this gives the font ~100ms to load.
+        if(called > 30) {
+          warn('Load test font never loaded.');
+          callback();
+          return;
+        }
+        ctx.font = '30px ' + name;
+        ctx.fillText('.', 0, 20);
+        var imageData = ctx.getImageData(0, 0, 1, 1);
+        if (imageData.data[3] > 0) {
+          callback();
+          return;
+        }
+        setTimeout(isFontReady.bind(null, name, callback));
+      }
+
+      var loadTestFontId = 'lt' + Date.now() + this.loadTestFontId++;
+      // Chromium seems to cache fonts based on a hash of the actual font data,
+      // so the font must be modified for each load test else it will appear to
+      // be loaded already.
+      // TODO: This could maybe be made faster by avoiding the btoa of the full
+      // font by splitting it in chunks before hand and padding the font id.
+      var data = this.loadTestFont;
+      var COMMENT_OFFSET = 976; // has to be on 4 byte boundary (for checksum)
+      data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length,
+                          loadTestFontId);
+      // CFF checksum is important for IE, adjusting it
+      var CFF_CHECKSUM_OFFSET = 16;
+      var XXXX_VALUE = 0x58585858; // the "comment" filled with 'X'
+      var checksum = int32(data, CFF_CHECKSUM_OFFSET);
+      for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {
+        checksum = (checksum - XXXX_VALUE + int32(loadTestFontId, i)) | 0;
+      }
+      if (i < loadTestFontId.length) { // align to 4 bytes boundary
+        checksum = (checksum - XXXX_VALUE +
+                    int32(loadTestFontId + 'XXX', i)) | 0;
+      }
+      data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum));
+
+      var url = 'url(data:font/opentype;base64,' + btoa(data) + ');';
+      var rule = '@font-face { font-family:"' + loadTestFontId + '";src:' +
+                 url + '}';
+      FontLoader.insertRule(rule);
+
+      var names = [];
+      for (i = 0, ii = fonts.length; i < ii; i++) {
+        names.push(fonts[i].loadedName);
+      }
+      names.push(loadTestFontId);
+
+      var div = document.createElement('div');
+      div.setAttribute('style',
+                       'visibility: hidden;' +
+                       'width: 10px; height: 10px;' +
+                       'position: absolute; top: 0px; left: 0px;');
+      for (i = 0, ii = names.length; i < ii; ++i) {
+        var span = document.createElement('span');
+        span.textContent = 'Hi';
+        span.style.fontFamily = names[i];
+        div.appendChild(span);
+      }
+      document.body.appendChild(div);
+
+      isFontReady(loadTestFontId, function() {
+        document.body.removeChild(div);
+        request.complete();
+      });
+      /** Hack end */
+  }
+};
+
+var FontFaceObject = (function FontFaceObjectClosure() {
+  function FontFaceObject(name, file, properties) {
+    this.compiledGlyphs = {};
+    if (arguments.length === 1) {
+      // importing translated data
+      var data = arguments[0];
+      for (var i in data) {
+        this[i] = data[i];
+      }
+      return;
+    }
+  }
+  FontFaceObject.prototype = {
+    createNativeFontFace: function FontFaceObject_createNativeFontFace() {
+      if (!this.data) {
+        return null;
+      }
+
+      if (PDFJS.disableFontFace) {
+        this.disableFontFace = true;
+        return null;
+      }
+
+      var nativeFontFace = new FontFace(this.loadedName, this.data, {});
+
+      FontLoader.addNativeFontFace(nativeFontFace);
+
+      if (PDFJS.pdfBug && 'FontInspector' in globalScope &&
+          globalScope['FontInspector'].enabled) {
+        globalScope['FontInspector'].fontAdded(this);
+      }
+      return nativeFontFace;
+    },
+
+    bindDOM: function FontFaceObject_bindDOM() {
+      if (!this.data) {
+        return null;
+      }
+
+      if (PDFJS.disableFontFace) {
+        this.disableFontFace = true;
+        return null;
+      }
+
+      var data = bytesToString(new Uint8Array(this.data));
+      var fontName = this.loadedName;
+
+      // Add the font-face rule to the document
+      var url = ('url(data:' + this.mimetype + ';base64,' +
+                 window.btoa(data) + ');');
+      var rule = '@font-face { font-family:"' + fontName + '";src:' + url + '}';
+      FontLoader.insertRule(rule);
+
+      if (PDFJS.pdfBug && 'FontInspector' in globalScope &&
+          globalScope['FontInspector'].enabled) {
+        globalScope['FontInspector'].fontAdded(this, url);
+      }
+
+      return rule;
+    },
+
+    getPathGenerator: function FontLoader_getPathGenerator(objs, character) {
+      if (!(character in this.compiledGlyphs)) {
+        var js = objs.get(this.loadedName + '_path_' + character);
+        /*jshint -W054 */
+        this.compiledGlyphs[character] = new Function('c', 'size', js);
+      }
+      return this.compiledGlyphs[character];
+    }
+  };
+  return FontFaceObject;
+})();
+
+
+var ANNOT_MIN_SIZE = 10; // px
+
+var AnnotationUtils = (function AnnotationUtilsClosure() {
+  // TODO(mack): This dupes some of the logic in CanvasGraphics.setFont()
+  function setTextStyles(element, item, fontObj) {
+
+    var style = element.style;
+    style.fontSize = item.fontSize + 'px';
+    style.direction = item.fontDirection < 0 ? 'rtl': 'ltr';
+
+    if (!fontObj) {
+      return;
+    }
+
+    style.fontWeight = fontObj.black ?
+      (fontObj.bold ? 'bolder' : 'bold') :
+      (fontObj.bold ? 'bold' : 'normal');
+    style.fontStyle = fontObj.italic ? 'italic' : 'normal';
+
+    var fontName = fontObj.loadedName;
+    var fontFamily = fontName ? '"' + fontName + '", ' : '';
+    // Use a reasonable default font if the font doesn't specify a fallback
+    var fallbackName = fontObj.fallbackName || 'Helvetica, sans-serif';
+    style.fontFamily = fontFamily + fallbackName;
+  }
+
+  function initContainer(item, drawBorder) {
+    var container = document.createElement('section');
+    var cstyle = container.style;
+    var width = item.rect[2] - item.rect[0];
+    var height = item.rect[3] - item.rect[1];
+
+    var bWidth = item.borderWidth || 0;
+    if (bWidth) {
+      width = width - 2 * bWidth;
+      height = height - 2 * bWidth;
+      cstyle.borderWidth = bWidth + 'px';
+      var color = item.color;
+      if (drawBorder && color) {
+        cstyle.borderStyle = 'solid';
+        cstyle.borderColor = Util.makeCssRgb(Math.round(color[0] * 255),
+                                             Math.round(color[1] * 255),
+                                             Math.round(color[2] * 255));
+      }
+    }
+    cstyle.width = width + 'px';
+    cstyle.height = height + 'px';
+    return container;
+  }
+
+  function getHtmlElementForTextWidgetAnnotation(item, commonObjs) {
+    var element = document.createElement('div');
+    var width = item.rect[2] - item.rect[0];
+    var height = item.rect[3] - item.rect[1];
+    element.style.width = width + 'px';
+    element.style.height = height + 'px';
+    element.style.display = 'table';
+
+    var content = document.createElement('div');
+    content.textContent = item.fieldValue;
+    var textAlignment = item.textAlignment;
+    content.style.textAlign = ['left', 'center', 'right'][textAlignment];
+    content.style.verticalAlign = 'middle';
+    content.style.display = 'table-cell';
+
+    var fontObj = item.fontRefName ?
+      commonObjs.getData(item.fontRefName) : null;
+    setTextStyles(content, item, fontObj);
+
+    element.appendChild(content);
+
+    return element;
+  }
+
+  function getHtmlElementForTextAnnotation(item) {
+    var rect = item.rect;
+
+    // sanity check because of OOo-generated PDFs
+    if ((rect[3] - rect[1]) < ANNOT_MIN_SIZE) {
+      rect[3] = rect[1] + ANNOT_MIN_SIZE;
+    }
+    if ((rect[2] - rect[0]) < ANNOT_MIN_SIZE) {
+      rect[2] = rect[0] + (rect[3] - rect[1]); // make it square
+    }
+
+    var container = initContainer(item, false);
+    container.className = 'annotText';
+
+    var image  = document.createElement('img');
+    image.style.height = container.style.height;
+    image.style.width = container.style.width;
+    var iconName = item.name;
+    image.src = PDFJS.imageResourcesPath + 'annotation-' +
+      iconName.toLowerCase() + '.svg';
+    image.alt = '[{{type}} Annotation]';
+    image.dataset.l10nId = 'text_annotation_type';
+    image.dataset.l10nArgs = JSON.stringify({type: iconName});
+
+    var contentWrapper = document.createElement('div');
+    contentWrapper.className = 'annotTextContentWrapper';
+    contentWrapper.style.left = Math.floor(rect[2] - rect[0] + 5) + 'px';
+    contentWrapper.style.top = '-10px';
+
+    var content = document.createElement('div');
+    content.className = 'annotTextContent';
+    content.setAttribute('hidden', true);
+
+    var i, ii;
+    if (item.hasBgColor) {
+      var color = item.color;
+
+      // Enlighten the color (70%)
+      var BACKGROUND_ENLIGHT = 0.7;
+      var r = BACKGROUND_ENLIGHT * (1.0 - color[0]) + color[0];
+      var g = BACKGROUND_ENLIGHT * (1.0 - color[1]) + color[1];
+      var b = BACKGROUND_ENLIGHT * (1.0 - color[2]) + color[2];
+      content.style.backgroundColor = Util.makeCssRgb((r * 255) | 0,
+                                                      (g * 255) | 0,
+                                                      (b * 255) | 0);
+    }
+
+    var title = document.createElement('h1');
+    var text = document.createElement('p');
+    title.textContent = item.title;
+
+    if (!item.content && !item.title) {
+      content.setAttribute('hidden', true);
+    } else {
+      var e = document.createElement('span');
+      var lines = item.content.split(/(?:\r\n?|\n)/);
+      for (i = 0, ii = lines.length; i < ii; ++i) {
+        var line = lines[i];
+        e.appendChild(document.createTextNode(line));
+        if (i < (ii - 1)) {
+          e.appendChild(document.createElement('br'));
+        }
+      }
+      text.appendChild(e);
+
+      var pinned = false;
+
+      var showAnnotation = function showAnnotation(pin) {
+        if (pin) {
+          pinned = true;
+        }
+        if (content.hasAttribute('hidden')) {
+          container.style.zIndex += 1;
+          content.removeAttribute('hidden');
+        }
+      };
+
+      var hideAnnotation = function hideAnnotation(unpin) {
+        if (unpin) {
+          pinned = false;
+        }
+        if (!content.hasAttribute('hidden') && !pinned) {
+          container.style.zIndex -= 1;
+          content.setAttribute('hidden', true);
+        }
+      };
+
+      var toggleAnnotation = function toggleAnnotation() {
+        if (pinned) {
+          hideAnnotation(true);
+        } else {
+          showAnnotation(true);
+        }
+      };
+
+      image.addEventListener('click', function image_clickHandler() {
+        toggleAnnotation();
+      }, false);
+      image.addEventListener('mouseover', function image_mouseOverHandler() {
+        showAnnotation();
+      }, false);
+      image.addEventListener('mouseout', function image_mouseOutHandler() {
+        hideAnnotation();
+      }, false);
+
+      content.addEventListener('click', function content_clickHandler() {
+        hideAnnotation(true);
+      }, false);
+    }
+
+    content.appendChild(title);
+    content.appendChild(text);
+    contentWrapper.appendChild(content);
+    container.appendChild(image);
+    container.appendChild(contentWrapper);
+
+    return container;
+  }
+
+  function getHtmlElementForLinkAnnotation(item) {
+    var container = initContainer(item, true);
+    container.className = 'annotLink';
+
+    var link = document.createElement('a');
+    link.href = link.title = item.url || '';
+    if (item.url && PDFJS.openExternalLinksInNewWindow) {
+      link.target = '_blank';
+    }
+
+    container.appendChild(link);
+
+    return container;
+  }
+
+  function getHtmlElement(data, objs) {
+    switch (data.annotationType) {
+      case AnnotationType.WIDGET:
+        return getHtmlElementForTextWidgetAnnotation(data, objs);
+      case AnnotationType.TEXT:
+        return getHtmlElementForTextAnnotation(data);
+      case AnnotationType.LINK:
+        return getHtmlElementForLinkAnnotation(data);
+      default:
+        throw new Error('Unsupported annotationType: ' + data.annotationType);
+    }
+  }
+
+  return {
+    getHtmlElement: getHtmlElement
+  };
+})();
+PDFJS.AnnotationUtils = AnnotationUtils;
+
+
+var SVG_DEFAULTS = {
+  fontStyle: 'normal',
+  fontWeight: 'normal',
+  fillColor: '#000000'
+};
+
+var convertImgDataToPng = (function convertImgDataToPngClosure() {
+  var PNG_HEADER =
+    new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
+
+  var CHUNK_WRAPPER_SIZE = 12;
+
+  var crcTable = new Int32Array(256);
+  for (var i = 0; i < 256; i++) {
+    var c = i;
+    for (var h = 0; h < 8; h++) {
+      if (c & 1) {
+        c = 0xedB88320 ^ ((c >> 1) & 0x7fffffff);
+      } else {
+        c = (c >> 1) & 0x7fffffff;
+      }
+    }
+    crcTable[i] = c;
+  }
+
+  function crc32(data, start, end) {
+    var crc = -1;
+    for (var i = start; i < end; i++) {
+      var a = (crc ^ data[i]) & 0xff;
+      var b = crcTable[a];
+      crc = (crc >>> 8) ^ b;
+    }
+    return crc ^ -1;
+  }
+
+  function writePngChunk(type, body, data, offset) {
+    var p = offset;
+    var len = body.length;
+
+    data[p] = len >> 24 & 0xff;
+    data[p + 1] = len >> 16 & 0xff;
+    data[p + 2] = len >> 8 & 0xff;
+    data[p + 3] = len & 0xff;
+    p += 4;
+
+    data[p] = type.charCodeAt(0) & 0xff;
+    data[p + 1] = type.charCodeAt(1) & 0xff;
+    data[p + 2] = type.charCodeAt(2) & 0xff;
+    data[p + 3] = type.charCodeAt(3) & 0xff;
+    p += 4;
+
+    data.set(body, p);
+    p += body.length;
+
+    var crc = crc32(data, offset + 4, p);
+
+    data[p] = crc >> 24 & 0xff;
+    data[p + 1] = crc >> 16 & 0xff;
+    data[p + 2] = crc >> 8 & 0xff;
+    data[p + 3] = crc & 0xff;
+  }
+
+  function adler32(data, start, end) {
+    var a = 1;
+    var b = 0;
+    for (var i = start; i < end; ++i) {
+      a = (a + (data[i] & 0xff)) % 65521;
+      b = (b + a) % 65521;
+    }
+    return (b << 16) | a;
+  }
+
+  function encode(imgData, kind) {
+    var width = imgData.width;
+    var height = imgData.height;
+    var bitDepth, colorType, lineSize;
+    var bytes = imgData.data;
+
+    switch (kind) {
+      case ImageKind.GRAYSCALE_1BPP:
+        colorType = 0;
+        bitDepth = 1;
+        lineSize = (width + 7) >> 3;
+        break;
+      case ImageKind.RGB_24BPP:
+        colorType = 2;
+        bitDepth = 8;
+        lineSize = width * 3;
+        break;
+      case ImageKind.RGBA_32BPP:
+        colorType = 6;
+        bitDepth = 8;
+        lineSize = width * 4;
+        break;
+      default:
+        throw new Error('invalid format');
+    }
+
+    // prefix every row with predictor 0
+    var literals = new Uint8Array((1 + lineSize) * height);
+    var offsetLiterals = 0, offsetBytes = 0;
+    var y, i;
+    for (y = 0; y < height; ++y) {
+      literals[offsetLiterals++] = 0; // no prediction
+      literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize),
+                   offsetLiterals);
+      offsetBytes += lineSize;
+      offsetLiterals += lineSize;
+    }
+
+    if (kind === ImageKind.GRAYSCALE_1BPP) {
+      // inverting for B/W
+      offsetLiterals = 0;
+      for (y = 0; y < height; y++) {
+        offsetLiterals++; // skipping predictor
+        for (i = 0; i < lineSize; i++) {
+          literals[offsetLiterals++] ^= 0xFF;
+        }
+      }
+    }
+
+    var ihdr = new Uint8Array([
+      width >> 24 & 0xff,
+      width >> 16 & 0xff,
+      width >> 8 & 0xff,
+      width & 0xff,
+      height >> 24 & 0xff,
+      height >> 16 & 0xff,
+      height >> 8 & 0xff,
+      height & 0xff,
+      bitDepth, // bit depth
+      colorType, // color type
+      0x00, // compression method
+      0x00, // filter method
+      0x00 // interlace method
+    ]);
+
+    var len = literals.length;
+    var maxBlockLength = 0xFFFF;
+
+    var deflateBlocks = Math.ceil(len / maxBlockLength);
+    var idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4);
+    var pi = 0;
+    idat[pi++] = 0x78; // compression method and flags
+    idat[pi++] = 0x9c; // flags
+
+    var pos = 0;
+    while (len > maxBlockLength) {
+      // writing non-final DEFLATE blocks type 0 and length of 65535
+      idat[pi++] = 0x00;
+      idat[pi++] = 0xff;
+      idat[pi++] = 0xff;
+      idat[pi++] = 0x00;
+      idat[pi++] = 0x00;
+      idat.set(literals.subarray(pos, pos + maxBlockLength), pi);
+      pi += maxBlockLength;
+      pos += maxBlockLength;
+      len -= maxBlockLength;
+    }
+
+    // writing non-final DEFLATE blocks type 0
+    idat[pi++] = 0x01;
+    idat[pi++] = len & 0xff;
+    idat[pi++] = len >> 8 & 0xff;
+    idat[pi++] = (~len & 0xffff) & 0xff;
+    idat[pi++] = (~len & 0xffff) >> 8 & 0xff;
+    idat.set(literals.subarray(pos), pi);
+    pi += literals.length - pos;
+
+    var adler = adler32(literals, 0, literals.length); // checksum
+    idat[pi++] = adler >> 24 & 0xff;
+    idat[pi++] = adler >> 16 & 0xff;
+    idat[pi++] = adler >> 8 & 0xff;
+    idat[pi++] = adler & 0xff;
+
+    // PNG will consists: header, IHDR+data, IDAT+data, and IEND.
+    var pngLength = PNG_HEADER.length + (CHUNK_WRAPPER_SIZE * 3) +
+                    ihdr.length + idat.length;
+    var data = new Uint8Array(pngLength);
+    var offset = 0;
+    data.set(PNG_HEADER, offset);
+    offset += PNG_HEADER.length;
+    writePngChunk('IHDR', ihdr, data, offset);
+    offset += CHUNK_WRAPPER_SIZE + ihdr.length;
+    writePngChunk('IDATA', idat, data, offset);
+    offset += CHUNK_WRAPPER_SIZE + idat.length;
+    writePngChunk('IEND', new Uint8Array(0), data, offset);
+
+    return PDFJS.createObjectURL(data, 'image/png');
+  }
+
+  return function convertImgDataToPng(imgData) {
+    var kind = (imgData.kind === undefined ?
+                ImageKind.GRAYSCALE_1BPP : imgData.kind);
+    return encode(imgData, kind);
+  };
+})();
+
+var SVGExtraState = (function SVGExtraStateClosure() {
+  function SVGExtraState() {
+    this.fontSizeScale = 1;
+    this.fontWeight = SVG_DEFAULTS.fontWeight;
+    this.fontSize = 0;
+
+    this.textMatrix = IDENTITY_MATRIX;
+    this.fontMatrix = FONT_IDENTITY_MATRIX;
+    this.leading = 0;
+
+    // Current point (in user coordinates)
+    this.x = 0;
+    this.y = 0;
+
+    // Start of text line (in text coordinates)
+    this.lineX = 0;
+    this.lineY = 0;
+
+    // Character and word spacing
+    this.charSpacing = 0;
+    this.wordSpacing = 0;
+    this.textHScale = 1;
+    this.textRise = 0;
+
+    // Default foreground and background colors
+    this.fillColor = SVG_DEFAULTS.fillColor;
+    this.strokeColor = '#000000';
+
+    this.fillAlpha = 1;
+    this.strokeAlpha = 1;
+    this.lineWidth = 1;
+    this.lineJoin = '';
+    this.lineCap = '';
+    this.miterLimit = 0;
+
+    this.dashArray = [];
+    this.dashPhase = 0;
+
+    this.dependencies = [];
+
+    // Clipping
+    this.clipId = '';
+    this.pendingClip = false;
+
+    this.maskId = '';
+  }
+
+  SVGExtraState.prototype = {
+    clone: function SVGExtraState_clone() {
+      return Object.create(this);
+    },
+    setCurrentPoint: function SVGExtraState_setCurrentPoint(x, y) {
+      this.x = x;
+      this.y = y;
+    }
+  };
+  return SVGExtraState;
+})();
+
+var SVGGraphics = (function SVGGraphicsClosure() {
+  function createScratchSVG(width, height) {
+    var NS = 'http://www.w3.org/2000/svg';
+    var svg = document.createElementNS(NS, 'svg:svg');
+    svg.setAttributeNS(null, 'version', '1.1');
+    svg.setAttributeNS(null, 'width', width + 'px');
+    svg.setAttributeNS(null, 'height', height + 'px');
+    svg.setAttributeNS(null, 'viewBox', '0 0 ' + width + ' ' + height);
+    return svg;
+  }
+
+  function opListToTree(opList) {
+    var opTree = [];
+    var tmp = [];
+    var opListLen = opList.length;
+
+    for (var x = 0; x < opListLen; x++) {
+      if (opList[x].fn === 'save') {
+        opTree.push({'fnId': 92, 'fn': 'group', 'items': []});
+        tmp.push(opTree);
+        opTree = opTree[opTree.length - 1].items;
+        continue;
+      }
+
+      if(opList[x].fn === 'restore') {
+        opTree = tmp.pop();
+      } else {
+        opTree.push(opList[x]);
+      }
+    }
+    return opTree;
+  }
+
+  /**
+   * Formats float number.
+   * @param value {number} number to format.
+   * @returns {string}
+   */
+  function pf(value) {
+    if (value === (value | 0)) { // integer number
+      return value.toString();
+    }
+    var s = value.toFixed(10);
+    var i = s.length - 1;
+    if (s[i] !== '0') {
+      return s;
+    }
+    // removing trailing zeros
+    do {
+      i--;
+    } while (s[i] === '0');
+    return s.substr(0, s[i] === '.' ? i : i + 1);
+  }
+
+  /**
+   * Formats transform matrix. The standard rotation, scale and translate
+   * matrices are replaced by their shorter forms, and for identity matrix
+   * returns empty string to save the memory.
+   * @param m {Array} matrix to format.
+   * @returns {string}
+   */
+  function pm(m) {
+    if (m[4] === 0 && m[5] === 0) {
+      if (m[1] === 0 && m[2] === 0) {
+        if (m[0] === 1 && m[3] === 1) {
+          return '';
+        }
+        return 'scale(' + pf(m[0]) + ' ' + pf(m[3]) + ')';
+      }
+      if (m[0] === m[3] && m[1] === -m[2]) {
+        var a = Math.acos(m[0]) * 180 / Math.PI;
+        return 'rotate(' + pf(a) + ')';
+      }
+    } else {
+      if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) {
+        return 'translate(' + pf(m[4]) + ' ' + pf(m[5]) + ')';
+      }
+    }
+    return 'matrix(' + pf(m[0]) + ' ' + pf(m[1]) + ' ' + pf(m[2]) + ' ' +
+      pf(m[3]) + ' ' + pf(m[4]) + ' ' + pf(m[5]) + ')';
+  }
+
+  function SVGGraphics(commonObjs, objs) {
+    this.current = new SVGExtraState();
+    this.transformMatrix = IDENTITY_MATRIX; // Graphics state matrix
+    this.transformStack = [];
+    this.extraStack = [];
+    this.commonObjs = commonObjs;
+    this.objs = objs;
+    this.pendingEOFill = false;
+
+    this.embedFonts = false;
+    this.embeddedFonts = {};
+    this.cssStyle = null;
+  }
+
+  var NS = 'http://www.w3.org/2000/svg';
+  var XML_NS = 'http://www.w3.org/XML/1998/namespace';
+  var XLINK_NS = 'http://www.w3.org/1999/xlink';
+  var LINE_CAP_STYLES = ['butt', 'round', 'square'];
+  var LINE_JOIN_STYLES = ['miter', 'round', 'bevel'];
+  var clipCount = 0;
+  var maskCount = 0;
+
+  SVGGraphics.prototype = {
+    save: function SVGGraphics_save() {
+      this.transformStack.push(this.transformMatrix);
+      var old = this.current;
+      this.extraStack.push(old);
+      this.current = old.clone();
+    },
+
+    restore: function SVGGraphics_restore() {
+      this.transformMatrix = this.transformStack.pop();
+      this.current = this.extraStack.pop();
+
+      this.tgrp = document.createElementNS(NS, 'svg:g');
+      this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix));
+      this.pgrp.appendChild(this.tgrp);
+    },
+
+    group: function SVGGraphics_group(items) {
+      this.save();
+      this.executeOpTree(items);
+      this.restore();
+    },
+
+    loadDependencies: function SVGGraphics_loadDependencies(operatorList) {
+      var fnArray = operatorList.fnArray;
+      var fnArrayLen = fnArray.length;
+      var argsArray = operatorList.argsArray;
+
+      var self = this;
+      for (var i = 0; i < fnArrayLen; i++) {
+        if (OPS.dependency === fnArray[i]) {
+          var deps = argsArray[i];
+          for (var n = 0, nn = deps.length; n < nn; n++) {
+            var obj = deps[n];
+            var common = obj.substring(0, 2) === 'g_';
+            var promise;
+            if (common) {
+              promise = new Promise(function(resolve) {
+                self.commonObjs.get(obj, resolve);
+              });
+            } else {
+              promise = new Promise(function(resolve) {
+                self.objs.get(obj, resolve);
+              });
+            }
+            this.current.dependencies.push(promise);
+          }
+        }
+      }
+      return Promise.all(this.current.dependencies);
+    },
+
+    transform: function SVGGraphics_transform(a, b, c, d, e, f) {
+      var transformMatrix = [a, b, c, d, e, f];
+      this.transformMatrix = PDFJS.Util.transform(this.transformMatrix,
+                                                  transformMatrix);
+
+      this.tgrp = document.createElementNS(NS, 'svg:g');
+      this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix));
+    },
+
+    getSVG: function SVGGraphics_getSVG(operatorList, viewport) {
+      this.svg = createScratchSVG(viewport.width, viewport.height);
+      this.viewport = viewport;
+
+      return this.loadDependencies(operatorList).then(function () {
+        this.transformMatrix = IDENTITY_MATRIX;
+        this.pgrp = document.createElementNS(NS, 'svg:g'); // Parent group
+        this.pgrp.setAttributeNS(null, 'transform', pm(viewport.transform));
+        this.tgrp = document.createElementNS(NS, 'svg:g'); // Transform group
+        this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix));
+        this.defs = document.createElementNS(NS, 'svg:defs');
+        this.pgrp.appendChild(this.defs);
+        this.pgrp.appendChild(this.tgrp);
+        this.svg.appendChild(this.pgrp);
+        var opTree = this.convertOpList(operatorList);
+        this.executeOpTree(opTree);
+        return this.svg;
+      }.bind(this));
+    },
+
+    convertOpList: function SVGGraphics_convertOpList(operatorList) {
+      var argsArray = operatorList.argsArray;
+      var fnArray = operatorList.fnArray;
+      var fnArrayLen  = fnArray.length;
+      var REVOPS = [];
+      var opList = [];
+
+      for (var op in OPS) {
+        REVOPS[OPS[op]] = op;
+      }
+
+      for (var x = 0; x < fnArrayLen; x++) {
+        var fnId = fnArray[x];
+        opList.push({'fnId' : fnId, 'fn': REVOPS[fnId], 'args': argsArray[x]});
+      }
+      return opListToTree(opList);
+    },
+
+    executeOpTree: function SVGGraphics_executeOpTree(opTree) {
+      var opTreeLen = opTree.length;
+      for(var x = 0; x < opTreeLen; x++) {
+        var fn = opTree[x].fn;
+        var fnId = opTree[x].fnId;
+        var args = opTree[x].args;
+
+        switch (fnId | 0) {
+          case OPS.beginText:
+            this.beginText();
+            break;
+          case OPS.setLeading:
+            this.setLeading(args);
+            break;
+          case OPS.setLeadingMoveText:
+            this.setLeadingMoveText(args[0], args[1]);
+            break;
+          case OPS.setFont:
+            this.setFont(args);
+            break;
+          case OPS.showText:
+            this.showText(args[0]);
+            break;
+          case OPS.showSpacedText:
+            this.showText(args[0]);
+            break;
+          case OPS.endText:
+            this.endText();
+            break;
+          case OPS.moveText:
+            this.moveText(args[0], args[1]);
+            break;
+          case OPS.setCharSpacing:
+            this.setCharSpacing(args[0]);
+            break;
+          case OPS.setWordSpacing:
+            this.setWordSpacing(args[0]);
+            break;
+          case OPS.setHScale:
+            this.setHScale(args[0]);
+            break;
+          case OPS.setTextMatrix:
+            this.setTextMatrix(args[0], args[1], args[2],
+                               args[3], args[4], args[5]);
+            break;
+          case OPS.setLineWidth:
+            this.setLineWidth(args[0]);
+            break;
+          case OPS.setLineJoin:
+            this.setLineJoin(args[0]);
+            break;
+          case OPS.setLineCap:
+            this.setLineCap(args[0]);
+            break;
+          case OPS.setMiterLimit:
+            this.setMiterLimit(args[0]);
+            break;
+          case OPS.setFillRGBColor:
+            this.setFillRGBColor(args[0], args[1], args[2]);
+            break;
+          case OPS.setStrokeRGBColor:
+            this.setStrokeRGBColor(args[0], args[1], args[2]);
+            break;
+          case OPS.setDash:
+            this.setDash(args[0], args[1]);
+            break;
+          case OPS.setGState:
+            this.setGState(args[0]);
+            break;
+          case OPS.fill:
+            this.fill();
+            break;
+          case OPS.eoFill:
+            this.eoFill();
+            break;
+          case OPS.stroke:
+            this.stroke();
+            break;
+          case OPS.fillStroke:
+            this.fillStroke();
+            break;
+          case OPS.eoFillStroke:
+            this.eoFillStroke();
+            break;
+          case OPS.clip:
+            this.clip('nonzero');
+            break;
+          case OPS.eoClip:
+            this.clip('evenodd');
+            break;
+          case OPS.paintSolidColorImageMask:
+            this.paintSolidColorImageMask();
+            break;
+          case OPS.paintJpegXObject:
+            this.paintJpegXObject(args[0], args[1], args[2]);
+            break;
+          case OPS.paintImageXObject:
+            this.paintImageXObject(args[0]);
+            break;
+          case OPS.paintInlineImageXObject:
+            this.paintInlineImageXObject(args[0]);
+            break;
+          case OPS.paintImageMaskXObject:
+            this.paintImageMaskXObject(args[0]);
+            break;
+          case OPS.paintFormXObjectBegin:
+            this.paintFormXObjectBegin(args[0], args[1]);
+            break;
+          case OPS.paintFormXObjectEnd:
+            this.paintFormXObjectEnd();
+            break;
+          case OPS.closePath:
+            this.closePath();
+            break;
+          case OPS.closeStroke:
+            this.closeStroke();
+            break;
+          case OPS.closeFillStroke:
+            this.closeFillStroke();
+            break;
+          case OPS.nextLine:
+            this.nextLine();
+            break;
+          case OPS.transform:
+            this.transform(args[0], args[1], args[2], args[3],
+                           args[4], args[5]);
+            break;
+          case OPS.constructPath:
+            this.constructPath(args[0], args[1]);
+            break;
+          case OPS.endPath:
+            this.endPath();
+            break;
+          case 92:
+            this.group(opTree[x].items);
+            break;
+          default:
+            warn('Unimplemented method '+ fn);
+            break;
+        }
+      }
+    },
+
+    setWordSpacing: function SVGGraphics_setWordSpacing(wordSpacing) {
+      this.current.wordSpacing = wordSpacing;
+    },
+
+    setCharSpacing: function SVGGraphics_setCharSpacing(charSpacing) {
+      this.current.charSpacing = charSpacing;
+    },
+
+    nextLine: function SVGGraphics_nextLine() {
+      this.moveText(0, this.current.leading);
+    },
+
+    setTextMatrix: function SVGGraphics_setTextMatrix(a, b, c, d, e, f) {
+      var current = this.current;
+      this.current.textMatrix = this.current.lineMatrix = [a, b, c, d, e, f];
+
+      this.current.x = this.current.lineX = 0;
+      this.current.y = this.current.lineY = 0;
+
+      current.xcoords = [];
+      current.tspan = document.createElementNS(NS, 'svg:tspan');
+      current.tspan.setAttributeNS(null, 'font-family', current.fontFamily);
+      current.tspan.setAttributeNS(null, 'font-size',
+                                   pf(current.fontSize) + 'px');
+      current.tspan.setAttributeNS(null, 'y', pf(-current.y));
+
+      current.txtElement = document.createElementNS(NS, 'svg:text');
+      current.txtElement.appendChild(current.tspan);
+    },
+
+    beginText: function SVGGraphics_beginText() {
+      this.current.x = this.current.lineX = 0;
+      this.current.y = this.current.lineY = 0;
+      this.current.textMatrix = IDENTITY_MATRIX;
+      this.current.lineMatrix = IDENTITY_MATRIX;
+      this.current.tspan = document.createElementNS(NS, 'svg:tspan');
+      this.current.txtElement = document.createElementNS(NS, 'svg:text');
+      this.current.txtgrp = document.createElementNS(NS, 'svg:g');
+      this.current.xcoords = [];
+    },
+
+    moveText: function SVGGraphics_moveText(x, y) {
+      var current = this.current;
+      this.current.x = this.current.lineX += x;
+      this.current.y = this.current.lineY += y;
+
+      current.xcoords = [];
+      current.tspan = document.createElementNS(NS, 'svg:tspan');
+      current.tspan.setAttributeNS(null, 'font-family', current.fontFamily);
+      current.tspan.setAttributeNS(null, 'font-size',
+                                   pf(current.fontSize) + 'px');
+      current.tspan.setAttributeNS(null, 'y', pf(-current.y));
+    },
+
+    showText: function SVGGraphics_showText(glyphs) {
+      var current = this.current;
+      var font = current.font;
+      var fontSize = current.fontSize;
+
+      if (fontSize === 0) {
+        return;
+      }
+
+      var charSpacing = current.charSpacing;
+      var wordSpacing = current.wordSpacing;
+      var fontDirection = current.fontDirection;
+      var textHScale = current.textHScale * fontDirection;
+      var glyphsLength = glyphs.length;
+      var vertical = font.vertical;
+      var widthAdvanceScale = fontSize * current.fontMatrix[0];
+
+      var x = 0, i;
+      for (i = 0; i < glyphsLength; ++i) {
+        var glyph = glyphs[i];
+        if (glyph === null) {
+          // word break
+          x += fontDirection * wordSpacing;
+          continue;
+        } else if (isNum(glyph)) {
+          x += -glyph * fontSize * 0.001;
+          continue;
+        }
+        current.xcoords.push(current.x + x * textHScale);
+
+        var width = glyph.width;
+        var character = glyph.fontChar;
+        var charWidth = width * widthAdvanceScale + charSpacing * fontDirection;
+        x += charWidth;
+
+        current.tspan.textContent += character;
+      }
+      if (vertical) {
+        current.y -= x * textHScale;
+      } else {
+        current.x += x * textHScale;
+      }
+
+      current.tspan.setAttributeNS(null, 'x',
+                                   current.xcoords.map(pf).join(' '));
+      current.tspan.setAttributeNS(null, 'y', pf(-current.y));
+      current.tspan.setAttributeNS(null, 'font-family', current.fontFamily);
+      current.tspan.setAttributeNS(null, 'font-size',
+                                   pf(current.fontSize) + 'px');
+      if (current.fontStyle !== SVG_DEFAULTS.fontStyle) {
+        current.tspan.setAttributeNS(null, 'font-style', current.fontStyle);
+      }
+      if (current.fontWeight !== SVG_DEFAULTS.fontWeight) {
+        current.tspan.setAttributeNS(null, 'font-weight', current.fontWeight);
+      }
+      if (current.fillColor !== SVG_DEFAULTS.fillColor) {
+        current.tspan.setAttributeNS(null, 'fill', current.fillColor);
+      }
+
+      current.txtElement.setAttributeNS(null, 'transform',
+                                        pm(current.textMatrix) +
+                                        ' scale(1, -1)' );
+      current.txtElement.setAttributeNS(XML_NS, 'xml:space', 'preserve');
+      current.txtElement.appendChild(current.tspan);
+      current.txtgrp.appendChild(current.txtElement);
+
+      this.tgrp.appendChild(current.txtElement);
+
+    },
+
+    setLeadingMoveText: function SVGGraphics_setLeadingMoveText(x, y) {
+      this.setLeading(-y);
+      this.moveText(x, y);
+    },
+
+    addFontStyle: function SVGGraphics_addFontStyle(fontObj) {
+      if (!this.cssStyle) {
+        this.cssStyle = document.createElementNS(NS, 'svg:style');
+        this.cssStyle.setAttributeNS(null, 'type', 'text/css');
+        this.defs.appendChild(this.cssStyle);
+      }
+
+      var url = PDFJS.createObjectURL(fontObj.data, fontObj.mimetype);
+      this.cssStyle.textContent +=
+        '@font-face { font-family: "' + fontObj.loadedName + '";' +
+        ' src: url(' + url + '); }\n';
+    },
+
+    setFont: function SVGGraphics_setFont(details) {
+      var current = this.current;
+      var fontObj = this.commonObjs.get(details[0]);
+      var size = details[1];
+      this.current.font = fontObj;
+
+      if (this.embedFonts && fontObj.data &&
+          !this.embeddedFonts[fontObj.loadedName]) {
+        this.addFontStyle(fontObj);
+        this.embeddedFonts[fontObj.loadedName] = fontObj;
+      }
+
+      current.fontMatrix = (fontObj.fontMatrix ?
+                            fontObj.fontMatrix : FONT_IDENTITY_MATRIX);
+
+      var bold = fontObj.black ? (fontObj.bold ? 'bolder' : 'bold') :
+                                 (fontObj.bold ? 'bold' : 'normal');
+      var italic = fontObj.italic ? 'italic' : 'normal';
+
+      if (size < 0) {
+        size = -size;
+        current.fontDirection = -1;
+      } else {
+        current.fontDirection = 1;
+      }
+      current.fontSize = size;
+      current.fontFamily = fontObj.loadedName;
+      current.fontWeight = bold;
+      current.fontStyle = italic;
+
+      current.tspan = document.createElementNS(NS, 'svg:tspan');
+      current.tspan.setAttributeNS(null, 'y', pf(-current.y));
+      current.xcoords = [];
+    },
+
+    endText: function SVGGraphics_endText() {
+      if (this.current.pendingClip) {
+        this.cgrp.appendChild(this.tgrp);
+        this.pgrp.appendChild(this.cgrp);
+      } else {
+        this.pgrp.appendChild(this.tgrp);
+      }
+      this.tgrp = document.createElementNS(NS, 'svg:g');
+      this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix));
+    },
+
+    // Path properties
+    setLineWidth: function SVGGraphics_setLineWidth(width) {
+      this.current.lineWidth = width;
+    },
+    setLineCap: function SVGGraphics_setLineCap(style) {
+      this.current.lineCap = LINE_CAP_STYLES[style];
+    },
+    setLineJoin: function SVGGraphics_setLineJoin(style) {
+      this.current.lineJoin = LINE_JOIN_STYLES[style];
+    },
+    setMiterLimit: function SVGGraphics_setMiterLimit(limit) {
+      this.current.miterLimit = limit;
+    },
+    setStrokeRGBColor: function SVGGraphics_setStrokeRGBColor(r, g, b) {
+      var color = Util.makeCssRgb(r, g, b);
+      this.current.strokeColor = color;
+    },
+    setFillRGBColor: function SVGGraphics_setFillRGBColor(r, g, b) {
+      var color = Util.makeCssRgb(r, g, b);
+      this.current.fillColor = color;
+      this.current.tspan = document.createElementNS(NS, 'svg:tspan');
+      this.current.xcoords = [];
+    },
+    setDash: function SVGGraphics_setDash(dashArray, dashPhase) {
+      this.current.dashArray = dashArray;
+      this.current.dashPhase = dashPhase;
+    },
+
+    constructPath: function SVGGraphics_constructPath(ops, args) {
+      var current = this.current;
+      var x = current.x, y = current.y;
+      current.path = document.createElementNS(NS, 'svg:path');
+      var d = [];
+      var opLength = ops.length;
+
+      for (var i = 0, j = 0; i < opLength; i++) {
+        switch (ops[i] | 0) {
+          case OPS.rectangle:
+            x = args[j++];
+            y = args[j++];
+            var width = args[j++];
+            var height = args[j++];
+            var xw = x + width;
+            var yh = y + height;
+            d.push('M', pf(x), pf(y), 'L', pf(xw) , pf(y), 'L', pf(xw), pf(yh),
+                   'L', pf(x), pf(yh), 'Z');
+            break;
+          case OPS.moveTo:
+            x = args[j++];
+            y = args[j++];
+            d.push('M', pf(x), pf(y));
+            break;
+          case OPS.lineTo:
+            x = args[j++];
+            y = args[j++];
+            d.push('L', pf(x) , pf(y));
+            break;
+          case OPS.curveTo:
+            x = args[j + 4];
+            y = args[j + 5];
+            d.push('C', pf(args[j]), pf(args[j + 1]), pf(args[j + 2]),
+                   pf(args[j + 3]), pf(x), pf(y));
+            j += 6;
+            break;
+          case OPS.curveTo2:
+            x = args[j + 2];
+            y = args[j + 3];
+            d.push('C', pf(x), pf(y), pf(args[j]), pf(args[j + 1]),
+                   pf(args[j + 2]), pf(args[j + 3]));
+            j += 4;
+            break;
+          case OPS.curveTo3:
+            x = args[j + 2];
+            y = args[j + 3];
+            d.push('C', pf(args[j]), pf(args[j + 1]), pf(x), pf(y),
+                   pf(x), pf(y));
+            j += 4;
+            break;
+          case OPS.closePath:
+            d.push('Z');
+            break;
+        }
+      }
+      current.path.setAttributeNS(null, 'd', d.join(' '));
+      current.path.setAttributeNS(null, 'stroke-miterlimit',
+                                  pf(current.miterLimit));
+      current.path.setAttributeNS(null, 'stroke-linecap', current.lineCap);
+      current.path.setAttributeNS(null, 'stroke-linejoin', current.lineJoin);
+      current.path.setAttributeNS(null, 'stroke-width',
+                                  pf(current.lineWidth) + 'px');
+      current.path.setAttributeNS(null, 'stroke-dasharray',
+                                  current.dashArray.map(pf).join(' '));
+      current.path.setAttributeNS(null, 'stroke-dashoffset',
+                                  pf(current.dashPhase) + 'px');
+      current.path.setAttributeNS(null, 'fill', 'none');
+
+      this.tgrp.appendChild(current.path);
+      if (current.pendingClip) {
+        this.cgrp.appendChild(this.tgrp);
+        this.pgrp.appendChild(this.cgrp);
+      } else {
+        this.pgrp.appendChild(this.tgrp);
+      }
+      // Saving a reference in current.element so that it can be addressed
+      // in 'fill' and 'stroke'
+      current.element = current.path;
+      current.setCurrentPoint(x, y);
+    },
+
+    endPath: function SVGGraphics_endPath() {
+      var current = this.current;
+      if (current.pendingClip) {
+        this.cgrp.appendChild(this.tgrp);
+        this.pgrp.appendChild(this.cgrp);
+      } else {
+        this.pgrp.appendChild(this.tgrp);
+      }
+      this.tgrp = document.createElementNS(NS, 'svg:g');
+      this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix));
+    },
+
+    clip: function SVGGraphics_clip(type) {
+      var current = this.current;
+      // Add current path to clipping path
+      current.clipId = 'clippath' + clipCount;
+      clipCount++;
+      this.clippath = document.createElementNS(NS, 'svg:clipPath');
+      this.clippath.setAttributeNS(null, 'id', current.clipId);
+      var clipElement = current.element.cloneNode();
+      if (type === 'evenodd') {
+        clipElement.setAttributeNS(null, 'clip-rule', 'evenodd');
+      } else {
+        clipElement.setAttributeNS(null, 'clip-rule', 'nonzero');
+      }
+      this.clippath.setAttributeNS(null, 'transform', pm(this.transformMatrix));
+      this.clippath.appendChild(clipElement);
+      this.defs.appendChild(this.clippath);
+
+      // Create a new group with that attribute
+      current.pendingClip = true;
+      this.cgrp = document.createElementNS(NS, 'svg:g');
+      this.cgrp.setAttributeNS(null, 'clip-path',
+                               'url(#' + current.clipId + ')');
+      this.pgrp.appendChild(this.cgrp);
+    },
+
+    closePath: function SVGGraphics_closePath() {
+      var current = this.current;
+      var d = current.path.getAttributeNS(null, 'd');
+      d += 'Z';
+      current.path.setAttributeNS(null, 'd', d);
+    },
+
+    setLeading: function SVGGraphics_setLeading(leading) {
+      this.current.leading = -leading;
+    },
+
+    setTextRise: function SVGGraphics_setTextRise(textRise) {
+      this.current.textRise = textRise;
+    },
+
+    setHScale: function SVGGraphics_setHScale(scale) {
+      this.current.textHScale = scale / 100;
+    },
+
+    setGState: function SVGGraphics_setGState(states) {
+      for (var i = 0, ii = states.length; i < ii; i++) {
+        var state = states[i];
+        var key = state[0];
+        var value = state[1];
+
+        switch (key) {
+          case 'LW':
+            this.setLineWidth(value);
+            break;
+          case 'LC':
+            this.setLineCap(value);
+            break;
+          case 'LJ':
+            this.setLineJoin(value);
+            break;
+          case 'ML':
+            this.setMiterLimit(value);
+            break;
+          case 'D':
+            this.setDash(value[0], value[1]);
+            break;
+          case 'RI':
+            break;
+          case 'FL':
+            break;
+          case 'Font':
+            this.setFont(value);
+            break;
+          case 'CA':
+            break;
+          case 'ca':
+            break;
+          case 'BM':
+            break;
+          case 'SMask':
+            break;
+        }
+      }
+    },
+
+    fill: function SVGGraphics_fill() {
+      var current = this.current;
+      current.element.setAttributeNS(null, 'fill', current.fillColor);
+    },
+
+    stroke: function SVGGraphics_stroke() {
+      var current = this.current;
+      current.element.setAttributeNS(null, 'stroke', current.strokeColor);
+      current.element.setAttributeNS(null, 'fill', 'none');
+    },
+
+    eoFill: function SVGGraphics_eoFill() {
+      var current = this.current;
+      current.element.setAttributeNS(null, 'fill', current.fillColor);
+      current.element.setAttributeNS(null, 'fill-rule', 'evenodd');
+    },
+
+    fillStroke: function SVGGraphics_fillStroke() {
+      // Order is important since stroke wants fill to be none.
+      // First stroke, then if fill needed, it will be overwritten.
+      this.stroke();
+      this.fill();
+    },
+
+    eoFillStroke: function SVGGraphics_eoFillStroke() {
+      this.current.element.setAttributeNS(null, 'fill-rule', 'evenodd');
+      this.fillStroke();
+    },
+
+    closeStroke: function SVGGraphics_closeStroke() {
+      this.closePath();
+      this.stroke();
+    },
+
+    closeFillStroke: function SVGGraphics_closeFillStroke() {
+      this.closePath();
+      this.fillStroke();
+    },
+
+    paintSolidColorImageMask:
+        function SVGGraphics_paintSolidColorImageMask() {
+      var current = this.current;
+      var rect = document.createElementNS(NS, 'svg:rect');
+      rect.setAttributeNS(null, 'x', '0');
+      rect.setAttributeNS(null, 'y', '0');
+      rect.setAttributeNS(null, 'width', '1px');
+      rect.setAttributeNS(null, 'height', '1px');
+      rect.setAttributeNS(null, 'fill', current.fillColor);
+      this.tgrp.appendChild(rect);
+    },
+
+    paintJpegXObject: function SVGGraphics_paintJpegXObject(objId, w, h) {
+      var current = this.current;
+      var imgObj = this.objs.get(objId);
+      var imgEl = document.createElementNS(NS, 'svg:image');
+      imgEl.setAttributeNS(XLINK_NS, 'xlink:href', imgObj.src);
+      imgEl.setAttributeNS(null, 'width', imgObj.width + 'px');
+      imgEl.setAttributeNS(null, 'height', imgObj.height + 'px');
+      imgEl.setAttributeNS(null, 'x', '0');
+      imgEl.setAttributeNS(null, 'y', pf(-h));
+      imgEl.setAttributeNS(null, 'transform',
+                           'scale(' + pf(1 / w) + ' ' + pf(-1 / h) + ')');
+
+      this.tgrp.appendChild(imgEl);
+      if (current.pendingClip) {
+        this.cgrp.appendChild(this.tgrp);
+        this.pgrp.appendChild(this.cgrp);
+      } else {
+        this.pgrp.appendChild(this.tgrp);
+      }
+    },
+
+    paintImageXObject: function SVGGraphics_paintImageXObject(objId) {
+      var imgData = this.objs.get(objId);
+      if (!imgData) {
+        warn('Dependent image isn\'t ready yet');
+        return;
+      }
+      this.paintInlineImageXObject(imgData);
+    },
+
+    paintInlineImageXObject:
+        function SVGGraphics_paintInlineImageXObject(imgData, mask) {
+      var current = this.current;
+      var width = imgData.width;
+      var height = imgData.height;
+
+      var imgSrc = convertImgDataToPng(imgData);
+      var cliprect = document.createElementNS(NS, 'svg:rect');
+      cliprect.setAttributeNS(null, 'x', '0');
+      cliprect.setAttributeNS(null, 'y', '0');
+      cliprect.setAttributeNS(null, 'width', pf(width));
+      cliprect.setAttributeNS(null, 'height', pf(height));
+      current.element = cliprect;
+      this.clip('nonzero');
+      var imgEl = document.createElementNS(NS, 'svg:image');
+      imgEl.setAttributeNS(XLINK_NS, 'xlink:href', imgSrc);
+      imgEl.setAttributeNS(null, 'x', '0');
+      imgEl.setAttributeNS(null, 'y', pf(-height));
+      imgEl.setAttributeNS(null, 'width', pf(width) + 'px');
+      imgEl.setAttributeNS(null, 'height', pf(height) + 'px');
+      imgEl.setAttributeNS(null, 'transform',
+                           'scale(' + pf(1 / width) + ' ' +
+                           pf(-1 / height) + ')');
+      if (mask) {
+        mask.appendChild(imgEl);
+      } else {
+        this.tgrp.appendChild(imgEl);
+      }
+      if (current.pendingClip) {
+        this.cgrp.appendChild(this.tgrp);
+        this.pgrp.appendChild(this.cgrp);
+      } else {
+        this.pgrp.appendChild(this.tgrp);
+      }
+    },
+
+    paintImageMaskXObject:
+        function SVGGraphics_paintImageMaskXObject(imgData) {
+      var current = this.current;
+      var width = imgData.width;
+      var height = imgData.height;
+      var fillColor = current.fillColor;
+
+      current.maskId = 'mask' + maskCount++;
+      var mask = document.createElementNS(NS, 'svg:mask');
+      mask.setAttributeNS(null, 'id', current.maskId);
+
+      var rect = document.createElementNS(NS, 'svg:rect');
+      rect.setAttributeNS(null, 'x', '0');
+      rect.setAttributeNS(null, 'y', '0');
+      rect.setAttributeNS(null, 'width', pf(width));
+      rect.setAttributeNS(null, 'height', pf(height));
+      rect.setAttributeNS(null, 'fill', fillColor);
+      rect.setAttributeNS(null, 'mask', 'url(#' + current.maskId +')');
+      this.defs.appendChild(mask);
+      this.tgrp.appendChild(rect);
+
+      this.paintInlineImageXObject(imgData, mask);
+    },
+
+    paintFormXObjectBegin:
+        function SVGGraphics_paintFormXObjectBegin(matrix, bbox) {
+      this.save();
+
+      if (isArray(matrix) && matrix.length === 6) {
+        this.transform(matrix[0], matrix[1], matrix[2],
+                       matrix[3], matrix[4], matrix[5]);
+      }
+
+      if (isArray(bbox) && bbox.length === 4) {
+        var width = bbox[2] - bbox[0];
+        var height = bbox[3] - bbox[1];
+
+        var cliprect = document.createElementNS(NS, 'svg:rect');
+        cliprect.setAttributeNS(null, 'x', bbox[0]);
+        cliprect.setAttributeNS(null, 'y', bbox[1]);
+        cliprect.setAttributeNS(null, 'width', pf(width));
+        cliprect.setAttributeNS(null, 'height', pf(height));
+        this.current.element = cliprect;
+        this.clip('nonzero');
+        this.endPath();
+      }
+    },
+
+    paintFormXObjectEnd:
+        function SVGGraphics_paintFormXObjectEnd() {
+      this.restore();
+    }
+  };
+  return SVGGraphics;
+})();
+
+PDFJS.SVGGraphics = SVGGraphics;
+
+
+}).call((typeof window === 'undefined') ? this : window);
+
+if (!PDFJS.workerSrc && typeof document !== 'undefined') {
+  // workerSrc is not set -- using last script url to define default location
+  PDFJS.workerSrc = (function () {
+    'use strict';
+    var scriptTagContainer = document.body ||
+                             document.getElementsByTagName('head')[0];
+    var pdfjsSrc = scriptTagContainer.lastChild.src;
+    return pdfjsSrc && pdfjsSrc.replace(/\.js$/i, '.worker.js');
+  })();
+}
+
+
diff --git a/public/assets/plugins/angular-pdf/example/js/lib/pdf.worker.js b/public/assets/plugins/angular-pdf/example/js/lib/pdf.worker.js
new file mode 100644
index 0000000..c025c14
--- /dev/null
+++ b/public/assets/plugins/angular-pdf/example/js/lib/pdf.worker.js
@@ -0,0 +1,39372 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+/* Copyright 2012 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*jshint globalstrict: false */
+/* globals PDFJS */
+
+// Initializing PDFJS global object (if still undefined)
+if (typeof PDFJS === 'undefined') {
+  (typeof window !== 'undefined' ? window : this).PDFJS = {};
+}
+
+PDFJS.version = '1.1.159';
+PDFJS.build = '82536f8';
+
+(function pdfjsWrapper() {
+  // Use strict in our context only - users might not want it
+  'use strict';
+
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+/* Copyright 2012 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/* globals Cmd, ColorSpace, Dict, MozBlobBuilder, Name, PDFJS, Ref, URL,
+           Promise */
+
+'use strict';
+
+var globalScope = (typeof window === 'undefined') ? this : window;
+
+var isWorker = (typeof window === 'undefined');
+
+var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
+
+var TextRenderingMode = {
+  FILL: 0,
+  STROKE: 1,
+  FILL_STROKE: 2,
+  INVISIBLE: 3,
+  FILL_ADD_TO_PATH: 4,
+  STROKE_ADD_TO_PATH: 5,
+  FILL_STROKE_ADD_TO_PATH: 6,
+  ADD_TO_PATH: 7,
+  FILL_STROKE_MASK: 3,
+  ADD_TO_PATH_FLAG: 4
+};
+
+var ImageKind = {
+  GRAYSCALE_1BPP: 1,
+  RGB_24BPP: 2,
+  RGBA_32BPP: 3
+};
+
+var AnnotationType = {
+  WIDGET: 1,
+  TEXT: 2,
+  LINK: 3
+};
+
+var StreamType = {
+  UNKNOWN: 0,
+  FLATE: 1,
+  LZW: 2,
+  DCT: 3,
+  JPX: 4,
+  JBIG: 5,
+  A85: 6,
+  AHX: 7,
+  CCF: 8,
+  RL: 9
+};
+
+var FontType = {
+  UNKNOWN: 0,
+  TYPE1: 1,
+  TYPE1C: 2,
+  CIDFONTTYPE0: 3,
+  CIDFONTTYPE0C: 4,
+  TRUETYPE: 5,
+  CIDFONTTYPE2: 6,
+  TYPE3: 7,
+  OPENTYPE: 8,
+  TYPE0: 9,
+  MMTYPE1: 10
+};
+
+// The global PDFJS object exposes the API
+// In production, it will be declared outside a global wrapper
+// In development, it will be declared here
+if (!globalScope.PDFJS) {
+  globalScope.PDFJS = {};
+}
+
+globalScope.PDFJS.pdfBug = false;
+
+PDFJS.VERBOSITY_LEVELS = {
+  errors: 0,
+  warnings: 1,
+  infos: 5
+};
+
+// All the possible operations for an operator list.
+var OPS = PDFJS.OPS = {
+  // Intentionally start from 1 so it is easy to spot bad operators that will be
+  // 0's.
+  dependency: 1,
+  setLineWidth: 2,
+  setLineCap: 3,
+  setLineJoin: 4,
+  setMiterLimit: 5,
+  setDash: 6,
+  setRenderingIntent: 7,
+  setFlatness: 8,
+  setGState: 9,
+  save: 10,
+  restore: 11,
+  transform: 12,
+  moveTo: 13,
+  lineTo: 14,
+  curveTo: 15,
+  curveTo2: 16,
+  curveTo3: 17,
+  closePath: 18,
+  rectangle: 19,
+  stroke: 20,
+  closeStroke: 21,
+  fill: 22,
+  eoFill: 23,
+  fillStroke: 24,
+  eoFillStroke: 25,
+  closeFillStroke: 26,
+  closeEOFillStroke: 27,
+  endPath: 28,
+  clip: 29,
+  eoClip: 30,
+  beginText: 31,
+  endText: 32,
+  setCharSpacing: 33,
+  setWordSpacing: 34,
+  setHScale: 35,
+  setLeading: 36,
+  setFont: 37,
+  setTextRenderingMode: 38,
+  setTextRise: 39,
+  moveText: 40,
+  setLeadingMoveText: 41,
+  setTextMatrix: 42,
+  nextLine: 43,
+  showText: 44,
+  showSpacedText: 45,
+  nextLineShowText: 46,
+  nextLineSetSpacingShowText: 47,
+  setCharWidth: 48,
+  setCharWidthAndBounds: 49,
+  setStrokeColorSpace: 50,
+  setFillColorSpace: 51,
+  setStrokeColor: 52,
+  setStrokeColorN: 53,
+  setFillColor: 54,
+  setFillColorN: 55,
+  setStrokeGray: 56,
+  setFillGray: 57,
+  setStrokeRGBColor: 58,
+  setFillRGBColor: 59,
+  setStrokeCMYKColor: 60,
+  setFillCMYKColor: 61,
+  shadingFill: 62,
+  beginInlineImage: 63,
+  beginImageData: 64,
+  endInlineImage: 65,
+  paintXObject: 66,
+  markPoint: 67,
+  markPointProps: 68,
+  beginMarkedContent: 69,
+  beginMarkedContentProps: 70,
+  endMarkedContent: 71,
+  beginCompat: 72,
+  endCompat: 73,
+  paintFormXObjectBegin: 74,
+  paintFormXObjectEnd: 75,
+  beginGroup: 76,
+  endGroup: 77,
+  beginAnnotations: 78,
+  endAnnotations: 79,
+  beginAnnotation: 80,
+  endAnnotation: 81,
+  paintJpegXObject: 82,
+  paintImageMaskXObject: 83,
+  paintImageMaskXObjectGroup: 84,
+  paintImageXObject: 85,
+  paintInlineImageXObject: 86,
+  paintInlineImageXObjectGroup: 87,
+  paintImageXObjectRepeat: 88,
+  paintImageMaskXObjectRepeat: 89,
+  paintSolidColorImageMask: 90,
+  constructPath: 91
+};
+
+// A notice for devs. These are good for things that are helpful to devs, such
+// as warning that Workers were disabled, which is important to devs but not
+// end users.
+function info(msg) {
+  if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.infos) {
+    console.log('Info: ' + msg);
+  }
+}
+
+// Non-fatal warnings.
+function warn(msg) {
+  if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.warnings) {
+    console.log('Warning: ' + msg);
+  }
+}
+
+// Fatal errors that should trigger the fallback UI and halt execution by
+// throwing an exception.
+function error(msg) {
+  if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.errors) {
+    console.log('Error: ' + msg);
+    console.log(backtrace());
+  }
+  UnsupportedManager.notify(UNSUPPORTED_FEATURES.unknown);
+  throw new Error(msg);
+}
+
+function backtrace() {
+  try {
+    throw new Error();
+  } catch (e) {
+    return e.stack ? e.stack.split('\n').slice(2).join('\n') : '';
+  }
+}
+
+function assert(cond, msg) {
+  if (!cond) {
+    error(msg);
+  }
+}
+
+var UNSUPPORTED_FEATURES = PDFJS.UNSUPPORTED_FEATURES = {
+  unknown: 'unknown',
+  forms: 'forms',
+  javaScript: 'javaScript',
+  smask: 'smask',
+  shadingPattern: 'shadingPattern',
+  font: 'font'
+};
+
+var UnsupportedManager = PDFJS.UnsupportedManager =
+  (function UnsupportedManagerClosure() {
+  var listeners = [];
+  return {
+    listen: function (cb) {
+      listeners.push(cb);
+    },
+    notify: function (featureId) {
+      warn('Unsupported feature "' + featureId + '"');
+      for (var i = 0, ii = listeners.length; i < ii; i++) {
+        listeners[i](featureId);
+      }
+    }
+  };
+})();
+
+// Combines two URLs. The baseUrl shall be absolute URL. If the url is an
+// absolute URL, it will be returned as is.
+function combineUrl(baseUrl, url) {
+  if (!url) {
+    return baseUrl;
+  }
+  if (/^[a-z][a-z0-9+\-.]*:/i.test(url)) {
+    return url;
+  }
+  var i;
+  if (url.charAt(0) === '/') {
+    // absolute path
+    i = baseUrl.indexOf('://');
+    if (url.charAt(1) === '/') {
+      ++i;
+    } else {
+      i = baseUrl.indexOf('/', i + 3);
+    }
+    return baseUrl.substring(0, i) + url;
+  } else {
+    // relative path
+    var pathLength = baseUrl.length;
+    i = baseUrl.lastIndexOf('#');
+    pathLength = i >= 0 ? i : pathLength;
+    i = baseUrl.lastIndexOf('?', pathLength);
+    pathLength = i >= 0 ? i : pathLength;
+    var prefixLength = baseUrl.lastIndexOf('/', pathLength);
+    return baseUrl.substring(0, prefixLength + 1) + url;
+  }
+}
+
+// Validates if URL is safe and allowed, e.g. to avoid XSS.
+function isValidUrl(url, allowRelative) {
+  if (!url) {
+    return false;
+  }
+  // RFC 3986 (http://tools.ietf.org/html/rfc3986#section-3.1)
+  // scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
+  var protocol = /^[a-z][a-z0-9+\-.]*(?=:)/i.exec(url);
+  if (!protocol) {
+    return allowRelative;
+  }
+  protocol = protocol[0].toLowerCase();
+  switch (protocol) {
+    case 'http':
+    case 'https':
+    case 'ftp':
+    case 'mailto':
+    case 'tel':
+      return true;
+    default:
+      return false;
+  }
+}
+PDFJS.isValidUrl = isValidUrl;
+
+function shadow(obj, prop, value) {
+  Object.defineProperty(obj, prop, { value: value,
+                                     enumerable: true,
+                                     configurable: true,
+                                     writable: false });
+  return value;
+}
+PDFJS.shadow = shadow;
+
+var PasswordResponses = PDFJS.PasswordResponses = {
+  NEED_PASSWORD: 1,
+  INCORRECT_PASSWORD: 2
+};
+
+var PasswordException = (function PasswordExceptionClosure() {
+  function PasswordException(msg, code) {
+    this.name = 'PasswordException';
+    this.message = msg;
+    this.code = code;
+  }
+
+  PasswordException.prototype = new Error();
+  PasswordException.constructor = PasswordException;
+
+  return PasswordException;
+})();
+PDFJS.PasswordException = PasswordException;
+
+var UnknownErrorException = (function UnknownErrorExceptionClosure() {
+  function UnknownErrorException(msg, details) {
+    this.name = 'UnknownErrorException';
+    this.message = msg;
+    this.details = details;
+  }
+
+  UnknownErrorException.prototype = new Error();
+  UnknownErrorException.constructor = UnknownErrorException;
+
+  return UnknownErrorException;
+})();
+PDFJS.UnknownErrorException = UnknownErrorException;
+
+var InvalidPDFException = (function InvalidPDFExceptionClosure() {
+  function InvalidPDFException(msg) {
+    this.name = 'InvalidPDFException';
+    this.message = msg;
+  }
+
+  InvalidPDFException.prototype = new Error();
+  InvalidPDFException.constructor = InvalidPDFException;
+
+  return InvalidPDFException;
+})();
+PDFJS.InvalidPDFException = InvalidPDFException;
+
+var MissingPDFException = (function MissingPDFExceptionClosure() {
+  function MissingPDFException(msg) {
+    this.name = 'MissingPDFException';
+    this.message = msg;
+  }
+
+  MissingPDFException.prototype = new Error();
+  MissingPDFException.constructor = MissingPDFException;
+
+  return MissingPDFException;
+})();
+PDFJS.MissingPDFException = MissingPDFException;
+
+var UnexpectedResponseException =
+    (function UnexpectedResponseExceptionClosure() {
+  function UnexpectedResponseException(msg, status) {
+    this.name = 'UnexpectedResponseException';
+    this.message = msg;
+    this.status = status;
+  }
+
+  UnexpectedResponseException.prototype = new Error();
+  UnexpectedResponseException.constructor = UnexpectedResponseException;
+
+  return UnexpectedResponseException;
+})();
+PDFJS.UnexpectedResponseException = UnexpectedResponseException;
+
+var NotImplementedException = (function NotImplementedExceptionClosure() {
+  function NotImplementedException(msg) {
+    this.message = msg;
+  }
+
+  NotImplementedException.prototype = new Error();
+  NotImplementedException.prototype.name = 'NotImplementedException';
+  NotImplementedException.constructor = NotImplementedException;
+
+  return NotImplementedException;
+})();
+
+var MissingDataException = (function MissingDataExceptionClosure() {
+  function MissingDataException(begin, end) {
+    this.begin = begin;
+    this.end = end;
+    this.message = 'Missing data [' + begin + ', ' + end + ')';
+  }
+
+  MissingDataException.prototype = new Error();
+  MissingDataException.prototype.name = 'MissingDataException';
+  MissingDataException.constructor = MissingDataException;
+
+  return MissingDataException;
+})();
+
+var XRefParseException = (function XRefParseExceptionClosure() {
+  function XRefParseException(msg) {
+    this.message = msg;
+  }
+
+  XRefParseException.prototype = new Error();
+  XRefParseException.prototype.name = 'XRefParseException';
+  XRefParseException.constructor = XRefParseException;
+
+  return XRefParseException;
+})();
+
+
+function bytesToString(bytes) {
+  assert(bytes !== null && typeof bytes === 'object' &&
+         bytes.length !== undefined, 'Invalid argument for bytesToString');
+  var length = bytes.length;
+  var MAX_ARGUMENT_COUNT = 8192;
+  if (length < MAX_ARGUMENT_COUNT) {
+    return String.fromCharCode.apply(null, bytes);
+  }
+  var strBuf = [];
+  for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) {
+    var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);
+    var chunk = bytes.subarray(i, chunkEnd);
+    strBuf.push(String.fromCharCode.apply(null, chunk));
+  }
+  return strBuf.join('');
+}
+
+function stringToBytes(str) {
+  assert(typeof str === 'string', 'Invalid argument for stringToBytes');
+  var length = str.length;
+  var bytes = new Uint8Array(length);
+  for (var i = 0; i < length; ++i) {
+    bytes[i] = str.charCodeAt(i) & 0xFF;
+  }
+  return bytes;
+}
+
+function string32(value) {
+  return String.fromCharCode((value >> 24) & 0xff, (value >> 16) & 0xff,
+                             (value >> 8) & 0xff, value & 0xff);
+}
+
+function log2(x) {
+  var n = 1, i = 0;
+  while (x > n) {
+    n <<= 1;
+    i++;
+  }
+  return i;
+}
+
+function readInt8(data, start) {
+  return (data[start] << 24) >> 24;
+}
+
+function readUint16(data, offset) {
+  return (data[offset] << 8) | data[offset + 1];
+}
+
+function readUint32(data, offset) {
+  return ((data[offset] << 24) | (data[offset + 1] << 16) |
+         (data[offset + 2] << 8) | data[offset + 3]) >>> 0;
+}
+
+// Lazy test the endianness of the platform
+// NOTE: This will be 'true' for simulated TypedArrays
+function isLittleEndian() {
+  var buffer8 = new Uint8Array(2);
+  buffer8[0] = 1;
+  var buffer16 = new Uint16Array(buffer8.buffer);
+  return (buffer16[0] === 1);
+}
+
+Object.defineProperty(PDFJS, 'isLittleEndian', {
+  configurable: true,
+  get: function PDFJS_isLittleEndian() {
+    return shadow(PDFJS, 'isLittleEndian', isLittleEndian());
+  }
+});
+
+  // Lazy test if the userAgant support CanvasTypedArrays
+function hasCanvasTypedArrays() {
+  var canvas = document.createElement('canvas');
+  canvas.width = canvas.height = 1;
+  var ctx = canvas.getContext('2d');
+  var imageData = ctx.createImageData(1, 1);
+  return (typeof imageData.data.buffer !== 'undefined');
+}
+
+Object.defineProperty(PDFJS, 'hasCanvasTypedArrays', {
+  configurable: true,
+  get: function PDFJS_hasCanvasTypedArrays() {
+    return shadow(PDFJS, 'hasCanvasTypedArrays', hasCanvasTypedArrays());
+  }
+});
+
+var Uint32ArrayView = (function Uint32ArrayViewClosure() {
+
+  function Uint32ArrayView(buffer, length) {
+    this.buffer = buffer;
+    this.byteLength = buffer.length;
+    this.length = length === undefined ? (this.byteLength >> 2) : length;
+    ensureUint32ArrayViewProps(this.length);
+  }
+  Uint32ArrayView.prototype = Object.create(null);
+
+  var uint32ArrayViewSetters = 0;
+  function createUint32ArrayProp(index) {
+    return {
+      get: function () {
+        var buffer = this.buffer, offset = index << 2;
+        return (buffer[offset] | (buffer[offset + 1] << 8) |
+          (buffer[offset + 2] << 16) | (buffer[offset + 3] << 24)) >>> 0;
+      },
+      set: function (value) {
+        var buffer = this.buffer, offset = index << 2;
+        buffer[offset] = value & 255;
+        buffer[offset + 1] = (value >> 8) & 255;
+        buffer[offset + 2] = (value >> 16) & 255;
+        buffer[offset + 3] = (value >>> 24) & 255;
+      }
+    };
+  }
+
+  function ensureUint32ArrayViewProps(length) {
+    while (uint32ArrayViewSetters < length) {
+      Object.defineProperty(Uint32ArrayView.prototype,
+        uint32ArrayViewSetters,
+        createUint32ArrayProp(uint32ArrayViewSetters));
+      uint32ArrayViewSetters++;
+    }
+  }
+
+  return Uint32ArrayView;
+})();
+
+var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
+
+var Util = PDFJS.Util = (function UtilClosure() {
+  function Util() {}
+
+  var rgbBuf = ['rgb(', 0, ',', 0, ',', 0, ')'];
+
+  // makeCssRgb() can be called thousands of times. Using |rgbBuf| avoids
+  // creating many intermediate strings.
+  Util.makeCssRgb = function Util_makeCssRgb(r, g, b) {
+    rgbBuf[1] = r;
+    rgbBuf[3] = g;
+    rgbBuf[5] = b;
+    return rgbBuf.join('');
+  };
+
+  // Concatenates two transformation matrices together and returns the result.
+  Util.transform = function Util_transform(m1, m2) {
+    return [
+      m1[0] * m2[0] + m1[2] * m2[1],
+      m1[1] * m2[0] + m1[3] * m2[1],
+      m1[0] * m2[2] + m1[2] * m2[3],
+      m1[1] * m2[2] + m1[3] * m2[3],
+      m1[0] * m2[4] + m1[2] * m2[5] + m1[4],
+      m1[1] * m2[4] + m1[3] * m2[5] + m1[5]
+    ];
+  };
+
+  // For 2d affine transforms
+  Util.applyTransform = function Util_applyTransform(p, m) {
+    var xt = p[0] * m[0] + p[1] * m[2] + m[4];
+    var yt = p[0] * m[1] + p[1] * m[3] + m[5];
+    return [xt, yt];
+  };
+
+  Util.applyInverseTransform = function Util_applyInverseTransform(p, m) {
+    var d = m[0] * m[3] - m[1] * m[2];
+    var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
+    var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
+    return [xt, yt];
+  };
+
+  // Applies the transform to the rectangle and finds the minimum axially
+  // aligned bounding box.
+  Util.getAxialAlignedBoundingBox =
+    function Util_getAxialAlignedBoundingBox(r, m) {
+
+    var p1 = Util.applyTransform(r, m);
+    var p2 = Util.applyTransform(r.slice(2, 4), m);
+    var p3 = Util.applyTransform([r[0], r[3]], m);
+    var p4 = Util.applyTransform([r[2], r[1]], m);
+    return [
+      Math.min(p1[0], p2[0], p3[0], p4[0]),
+      Math.min(p1[1], p2[1], p3[1], p4[1]),
+      Math.max(p1[0], p2[0], p3[0], p4[0]),
+      Math.max(p1[1], p2[1], p3[1], p4[1])
+    ];
+  };
+
+  Util.inverseTransform = function Util_inverseTransform(m) {
+    var d = m[0] * m[3] - m[1] * m[2];
+    return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d,
+      (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];
+  };
+
+  // Apply a generic 3d matrix M on a 3-vector v:
+  //   | a b c |   | X |
+  //   | d e f | x | Y |
+  //   | g h i |   | Z |
+  // M is assumed to be serialized as [a,b,c,d,e,f,g,h,i],
+  // with v as [X,Y,Z]
+  Util.apply3dTransform = function Util_apply3dTransform(m, v) {
+    return [
+      m[0] * v[0] + m[1] * v[1] + m[2] * v[2],
+      m[3] * v[0] + m[4] * v[1] + m[5] * v[2],
+      m[6] * v[0] + m[7] * v[1] + m[8] * v[2]
+    ];
+  };
+
+  // This calculation uses Singular Value Decomposition.
+  // The SVD can be represented with formula A = USV. We are interested in the
+  // matrix S here because it represents the scale values.
+  Util.singularValueDecompose2dScale =
+    function Util_singularValueDecompose2dScale(m) {
+
+    var transpose = [m[0], m[2], m[1], m[3]];
+
+    // Multiply matrix m with its transpose.
+    var a = m[0] * transpose[0] + m[1] * transpose[2];
+    var b = m[0] * transpose[1] + m[1] * transpose[3];
+    var c = m[2] * transpose[0] + m[3] * transpose[2];
+    var d = m[2] * transpose[1] + m[3] * transpose[3];
+
+    // Solve the second degree polynomial to get roots.
+    var first = (a + d) / 2;
+    var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;
+    var sx = first + second || 1;
+    var sy = first - second || 1;
+
+    // Scale values are the square roots of the eigenvalues.
+    return [Math.sqrt(sx), Math.sqrt(sy)];
+  };
+
+  // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)
+  // For coordinate systems whose origin lies in the bottom-left, this
+  // means normalization to (BL,TR) ordering. For systems with origin in the
+  // top-left, this means (TL,BR) ordering.
+  Util.normalizeRect = function Util_normalizeRect(rect) {
+    var r = rect.slice(0); // clone rect
+    if (rect[0] > rect[2]) {
+      r[0] = rect[2];
+      r[2] = rect[0];
+    }
+    if (rect[1] > rect[3]) {
+      r[1] = rect[3];
+      r[3] = rect[1];
+    }
+    return r;
+  };
+
+  // Returns a rectangle [x1, y1, x2, y2] corresponding to the
+  // intersection of rect1 and rect2. If no intersection, returns 'false'
+  // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]
+  Util.intersect = function Util_intersect(rect1, rect2) {
+    function compare(a, b) {
+      return a - b;
+    }
+
+    // Order points along the axes
+    var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare),
+        orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare),
+        result = [];
+
+    rect1 = Util.normalizeRect(rect1);
+    rect2 = Util.normalizeRect(rect2);
+
+    // X: first and second points belong to different rectangles?
+    if ((orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) ||
+        (orderedX[0] === rect2[0] && orderedX[1] === rect1[0])) {
+      // Intersection must be between second and third points
+      result[0] = orderedX[1];
+      result[2] = orderedX[2];
+    } else {
+      return false;
+    }
+
+    // Y: first and second points belong to different rectangles?
+    if ((orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) ||
+        (orderedY[0] === rect2[1] && orderedY[1] === rect1[1])) {
+      // Intersection must be between second and third points
+      result[1] = orderedY[1];
+      result[3] = orderedY[2];
+    } else {
+      return false;
+    }
+
+    return result;
+  };
+
+  Util.sign = function Util_sign(num) {
+    return num < 0 ? -1 : 1;
+  };
+
+  Util.appendToArray = function Util_appendToArray(arr1, arr2) {
+    Array.prototype.push.apply(arr1, arr2);
+  };
+
+  Util.prependToArray = function Util_prependToArray(arr1, arr2) {
+    Array.prototype.unshift.apply(arr1, arr2);
+  };
+
+  Util.extendObj = function extendObj(obj1, obj2) {
+    for (var key in obj2) {
+      obj1[key] = obj2[key];
+    }
+  };
+
+  Util.getInheritableProperty = function Util_getInheritableProperty(dict,
+                                                                     name) {
+    while (dict && !dict.has(name)) {
+      dict = dict.get('Parent');
+    }
+    if (!dict) {
+      return null;
+    }
+    return dict.get(name);
+  };
+
+  Util.inherit = function Util_inherit(sub, base, prototype) {
+    sub.prototype = Object.create(base.prototype);
+    sub.prototype.constructor = sub;
+    for (var prop in prototype) {
+      sub.prototype[prop] = prototype[prop];
+    }
+  };
+
+  Util.loadScript = function Util_loadScript(src, callback) {
+    var script = document.createElement('script');
+    var loaded = false;
+    script.setAttribute('src', src);
+    if (callback) {
+      script.onload = function() {
+        if (!loaded) {
+          callback();
+        }
+        loaded = true;
+      };
+    }
+    document.getElementsByTagName('head')[0].appendChild(script);
+  };
+
+  return Util;
+})();
+
+/**
+ * PDF page viewport created based on scale, rotation and offset.
+ * @class
+ * @alias PDFJS.PageViewport
+ */
+var PageViewport = PDFJS.PageViewport = (function PageViewportClosure() {
+  /**
+   * @constructor
+   * @private
+   * @param viewBox {Array} xMin, yMin, xMax and yMax coordinates.
+   * @param scale {number} scale of the viewport.
+   * @param rotation {number} rotations of the viewport in degrees.
+   * @param offsetX {number} offset X
+   * @param offsetY {number} offset Y
+   * @param dontFlip {boolean} if true, axis Y will not be flipped.
+   */
+  function PageViewport(viewBox, scale, rotation, offsetX, offsetY, dontFlip) {
+    this.viewBox = viewBox;
+    this.scale = scale;
+    this.rotation = rotation;
+    this.offsetX = offsetX;
+    this.offsetY = offsetY;
+
+    // creating transform to convert pdf coordinate system to the normal
+    // canvas like coordinates taking in account scale and rotation
+    var centerX = (viewBox[2] + viewBox[0]) / 2;
+    var centerY = (viewBox[3] + viewBox[1]) / 2;
+    var rotateA, rotateB, rotateC, rotateD;
+    rotation = rotation % 360;
+    rotation = rotation < 0 ? rotation + 360 : rotation;
+    switch (rotation) {
+      case 180:
+        rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1;
+        break;
+      case 90:
+        rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0;
+        break;
+      case 270:
+        rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0;
+        break;
+      //case 0:
+      default:
+        rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1;
+        break;
+    }
+
+    if (dontFlip) {
+      rotateC = -rotateC; rotateD = -rotateD;
+    }
+
+    var offsetCanvasX, offsetCanvasY;
+    var width, height;
+    if (rotateA === 0) {
+      offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
+      offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
+      width = Math.abs(viewBox[3] - viewBox[1]) * scale;
+      height = Math.abs(viewBox[2] - viewBox[0]) * scale;
+    } else {
+      offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
+      offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
+      width = Math.abs(viewBox[2] - viewBox[0]) * scale;
+      height = Math.abs(viewBox[3] - viewBox[1]) * scale;
+    }
+    // creating transform for the following operations:
+    // translate(-centerX, -centerY), rotate and flip vertically,
+    // scale, and translate(offsetCanvasX, offsetCanvasY)
+    this.transform = [
+      rotateA * scale,
+      rotateB * scale,
+      rotateC * scale,
+      rotateD * scale,
+      offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,
+      offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY
+    ];
+
+    this.width = width;
+    this.height = height;
+    this.fontScale = scale;
+  }
+  PageViewport.prototype = /** @lends PDFJS.PageViewport.prototype */ {
+    /**
+     * Clones viewport with additional properties.
+     * @param args {Object} (optional) If specified, may contain the 'scale' or
+     * 'rotation' properties to override the corresponding properties in
+     * the cloned viewport.
+     * @returns {PDFJS.PageViewport} Cloned viewport.
+     */
+    clone: function PageViewPort_clone(args) {
+      args = args || {};
+      var scale = 'scale' in args ? args.scale : this.scale;
+      var rotation = 'rotation' in args ? args.rotation : this.rotation;
+      return new PageViewport(this.viewBox.slice(), scale, rotation,
+                              this.offsetX, this.offsetY, args.dontFlip);
+    },
+    /**
+     * Converts PDF point to the viewport coordinates. For examples, useful for
+     * converting PDF location into canvas pixel coordinates.
+     * @param x {number} X coordinate.
+     * @param y {number} Y coordinate.
+     * @returns {Object} Object that contains 'x' and 'y' properties of the
+     * point in the viewport coordinate space.
+     * @see {@link convertToPdfPoint}
+     * @see {@link convertToViewportRectangle}
+     */
+    convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) {
+      return Util.applyTransform([x, y], this.transform);
+    },
+    /**
+     * Converts PDF rectangle to the viewport coordinates.
+     * @param rect {Array} xMin, yMin, xMax and yMax coordinates.
+     * @returns {Array} Contains corresponding coordinates of the rectangle
+     * in the viewport coordinate space.
+     * @see {@link convertToViewportPoint}
+     */
+    convertToViewportRectangle:
+      function PageViewport_convertToViewportRectangle(rect) {
+      var tl = Util.applyTransform([rect[0], rect[1]], this.transform);
+      var br = Util.applyTransform([rect[2], rect[3]], this.transform);
+      return [tl[0], tl[1], br[0], br[1]];
+    },
+    /**
+     * Converts viewport coordinates to the PDF location. For examples, useful
+     * for converting canvas pixel location into PDF one.
+     * @param x {number} X coordinate.
+     * @param y {number} Y coordinate.
+     * @returns {Object} Object that contains 'x' and 'y' properties of the
+     * point in the PDF coordinate space.
+     * @see {@link convertToViewportPoint}
+     */
+    convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) {
+      return Util.applyInverseTransform([x, y], this.transform);
+    }
+  };
+  return PageViewport;
+})();
+
+var PDFStringTranslateTable = [
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014,
+  0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C,
+  0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160,
+  0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC
+];
+
+function stringToPDFString(str) {
+  var i, n = str.length, strBuf = [];
+  if (str[0] === '\xFE' && str[1] === '\xFF') {
+    // UTF16BE BOM
+    for (i = 2; i < n; i += 2) {
+      strBuf.push(String.fromCharCode(
+        (str.charCodeAt(i) << 8) | str.charCodeAt(i + 1)));
+    }
+  } else {
+    for (i = 0; i < n; ++i) {
+      var code = PDFStringTranslateTable[str.charCodeAt(i)];
+      strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));
+    }
+  }
+  return strBuf.join('');
+}
+
+function stringToUTF8String(str) {
+  return decodeURIComponent(escape(str));
+}
+
+function utf8StringToString(str) {
+  return unescape(encodeURIComponent(str));
+}
+
+function isEmptyObj(obj) {
+  for (var key in obj) {
+    return false;
+  }
+  return true;
+}
+
+function isBool(v) {
+  return typeof v === 'boolean';
+}
+
+function isInt(v) {
+  return typeof v === 'number' && ((v | 0) === v);
+}
+
+function isNum(v) {
+  return typeof v === 'number';
+}
+
+function isString(v) {
+  return typeof v === 'string';
+}
+
+function isName(v) {
+  return v instanceof Name;
+}
+
+function isCmd(v, cmd) {
+  return v instanceof Cmd && (cmd === undefined || v.cmd === cmd);
+}
+
+function isDict(v, type) {
+  if (!(v instanceof Dict)) {
+    return false;
+  }
+  if (!type) {
+    return true;
+  }
+  var dictType = v.get('Type');
+  return isName(dictType) && dictType.name === type;
+}
+
+function isArray(v) {
+  return v instanceof Array;
+}
+
+function isStream(v) {
+  return typeof v === 'object' && v !== null && v.getBytes !== undefined;
+}
+
+function isArrayBuffer(v) {
+  return typeof v === 'object' && v !== null && v.byteLength !== undefined;
+}
+
+function isRef(v) {
+  return v instanceof Ref;
+}
+
+/**
+ * Promise Capability object.
+ *
+ * @typedef {Object} PromiseCapability
+ * @property {Promise} promise - A promise object.
+ * @property {function} resolve - Fullfills the promise.
+ * @property {function} reject - Rejects the promise.
+ */
+
+/**
+ * Creates a promise capability object.
+ * @alias PDFJS.createPromiseCapability
+ *
+ * @return {PromiseCapability} A capability object contains:
+ * - a Promise, resolve and reject methods.
+ */
+function createPromiseCapability() {
+  var capability = {};
+  capability.promise = new Promise(function (resolve, reject) {
+    capability.resolve = resolve;
+    capability.reject = reject;
+  });
+  return capability;
+}
+
+PDFJS.createPromiseCapability = createPromiseCapability;
+
+/**
+ * Polyfill for Promises:
+ * The following promise implementation tries to generally implement the
+ * Promise/A+ spec. Some notable differences from other promise libaries are:
+ * - There currently isn't a seperate deferred and promise object.
+ * - Unhandled rejections eventually show an error if they aren't handled.
+ *
+ * Based off of the work in:
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=810490
+ */
+(function PromiseClosure() {
+  if (globalScope.Promise) {
+    // Promises existing in the DOM/Worker, checking presence of all/resolve
+    if (typeof globalScope.Promise.all !== 'function') {
+      globalScope.Promise.all = function (iterable) {
+        var count = 0, results = [], resolve, reject;
+        var promise = new globalScope.Promise(function (resolve_, reject_) {
+          resolve = resolve_;
+          reject = reject_;
+        });
+        iterable.forEach(function (p, i) {
+          count++;
+          p.then(function (result) {
+            results[i] = result;
+            count--;
+            if (count === 0) {
+              resolve(results);
+            }
+          }, reject);
+        });
+        if (count === 0) {
+          resolve(results);
+        }
+        return promise;
+      };
+    }
+    if (typeof globalScope.Promise.resolve !== 'function') {
+      globalScope.Promise.resolve = function (value) {
+        return new globalScope.Promise(function (resolve) { resolve(value); });
+      };
+    }
+    if (typeof globalScope.Promise.reject !== 'function') {
+      globalScope.Promise.reject = function (reason) {
+        return new globalScope.Promise(function (resolve, reject) {
+          reject(reason);
+        });
+      };
+    }
+    if (typeof globalScope.Promise.prototype.catch !== 'function') {
+      globalScope.Promise.prototype.catch = function (onReject) {
+        return globalScope.Promise.prototype.then(undefined, onReject);
+      };
+    }
+    return;
+  }
+  var STATUS_PENDING = 0;
+  var STATUS_RESOLVED = 1;
+  var STATUS_REJECTED = 2;
+
+  // In an attempt to avoid silent exceptions, unhandled rejections are
+  // tracked and if they aren't handled in a certain amount of time an
+  // error is logged.
+  var REJECTION_TIMEOUT = 500;
+
+  var HandlerManager = {
+    handlers: [],
+    running: false,
+    unhandledRejections: [],
+    pendingRejectionCheck: false,
+
+    scheduleHandlers: function scheduleHandlers(promise) {
+      if (promise._status === STATUS_PENDING) {
+        return;
+      }
+
+      this.handlers = this.handlers.concat(promise._handlers);
+      promise._handlers = [];
+
+      if (this.running) {
+        return;
+      }
+      this.running = true;
+
+      setTimeout(this.runHandlers.bind(this), 0);
+    },
+
+    runHandlers: function runHandlers() {
+      var RUN_TIMEOUT = 1; // ms
+      var timeoutAt = Date.now() + RUN_TIMEOUT;
+      while (this.handlers.length > 0) {
+        var handler = this.handlers.shift();
+
+        var nextStatus = handler.thisPromise._status;
+        var nextValue = handler.thisPromise._value;
+
+        try {
+          if (nextStatus === STATUS_RESOLVED) {
+            if (typeof handler.onResolve === 'function') {
+              nextValue = handler.onResolve(nextValue);
+            }
+          } else if (typeof handler.onReject === 'function') {
+              nextValue = handler.onReject(nextValue);
+              nextStatus = STATUS_RESOLVED;
+
+              if (handler.thisPromise._unhandledRejection) {
+                this.removeUnhandeledRejection(handler.thisPromise);
+              }
+          }
+        } catch (ex) {
+          nextStatus = STATUS_REJECTED;
+          nextValue = ex;
+        }
+
+        handler.nextPromise._updateStatus(nextStatus, nextValue);
+        if (Date.now() >= timeoutAt) {
+          break;
+        }
+      }
+
+      if (this.handlers.length > 0) {
+        setTimeout(this.runHandlers.bind(this), 0);
+        return;
+      }
+
+      this.running = false;
+    },
+
+    addUnhandledRejection: function addUnhandledRejection(promise) {
+      this.unhandledRejections.push({
+        promise: promise,
+        time: Date.now()
+      });
+      this.scheduleRejectionCheck();
+    },
+
+    removeUnhandeledRejection: function removeUnhandeledRejection(promise) {
+      promise._unhandledRejection = false;
+      for (var i = 0; i < this.unhandledRejections.length; i++) {
+        if (this.unhandledRejections[i].promise === promise) {
+          this.unhandledRejections.splice(i);
+          i--;
+        }
+      }
+    },
+
+    scheduleRejectionCheck: function scheduleRejectionCheck() {
+      if (this.pendingRejectionCheck) {
+        return;
+      }
+      this.pendingRejectionCheck = true;
+      setTimeout(function rejectionCheck() {
+        this.pendingRejectionCheck = false;
+        var now = Date.now();
+        for (var i = 0; i < this.unhandledRejections.length; i++) {
+          if (now - this.unhandledRejections[i].time > REJECTION_TIMEOUT) {
+            var unhandled = this.unhandledRejections[i].promise._value;
+            var msg = 'Unhandled rejection: ' + unhandled;
+            if (unhandled.stack) {
+              msg += '\n' + unhandled.stack;
+            }
+            warn(msg);
+            this.unhandledRejections.splice(i);
+            i--;
+          }
+        }
+        if (this.unhandledRejections.length) {
+          this.scheduleRejectionCheck();
+        }
+      }.bind(this), REJECTION_TIMEOUT);
+    }
+  };
+
+  function Promise(resolver) {
+    this._status = STATUS_PENDING;
+    this._handlers = [];
+    try {
+      resolver.call(this, this._resolve.bind(this), this._reject.bind(this));
+    } catch (e) {
+      this._reject(e);
+    }
+  }
+  /**
+   * Builds a promise that is resolved when all the passed in promises are
+   * resolved.
+   * @param {array} array of data and/or promises to wait for.
+   * @return {Promise} New dependant promise.
+   */
+  Promise.all = function Promise_all(promises) {
+    var resolveAll, rejectAll;
+    var deferred = new Promise(function (resolve, reject) {
+      resolveAll = resolve;
+      rejectAll = reject;
+    });
+    var unresolved = promises.length;
+    var results = [];
+    if (unresolved === 0) {
+      resolveAll(results);
+      return deferred;
+    }
+    function reject(reason) {
+      if (deferred._status === STATUS_REJECTED) {
+        return;
+      }
+      results = [];
+      rejectAll(reason);
+    }
+    for (var i = 0, ii = promises.length; i < ii; ++i) {
+      var promise = promises[i];
+      var resolve = (function(i) {
+        return function(value) {
+          if (deferred._status === STATUS_REJECTED) {
+            return;
+          }
+          results[i] = value;
+          unresolved--;
+          if (unresolved === 0) {
+            resolveAll(results);
+          }
+        };
+      })(i);
+      if (Promise.isPromise(promise)) {
+        promise.then(resolve, reject);
+      } else {
+        resolve(promise);
+      }
+    }
+    return deferred;
+  };
+
+  /**
+   * Checks if the value is likely a promise (has a 'then' function).
+   * @return {boolean} true if value is thenable
+   */
+  Promise.isPromise = function Promise_isPromise(value) {
+    return value && typeof value.then === 'function';
+  };
+
+  /**
+   * Creates resolved promise
+   * @param value resolve value
+   * @returns {Promise}
+   */
+  Promise.resolve = function Promise_resolve(value) {
+    return new Promise(function (resolve) { resolve(value); });
+  };
+
+  /**
+   * Creates rejected promise
+   * @param reason rejection value
+   * @returns {Promise}
+   */
+  Promise.reject = function Promise_reject(reason) {
+    return new Promise(function (resolve, reject) { reject(reason); });
+  };
+
+  Promise.prototype = {
+    _status: null,
+    _value: null,
+    _handlers: null,
+    _unhandledRejection: null,
+
+    _updateStatus: function Promise__updateStatus(status, value) {
+      if (this._status === STATUS_RESOLVED ||
+          this._status === STATUS_REJECTED) {
+        return;
+      }
+
+      if (status === STATUS_RESOLVED &&
+          Promise.isPromise(value)) {
+        value.then(this._updateStatus.bind(this, STATUS_RESOLVED),
+                   this._updateStatus.bind(this, STATUS_REJECTED));
+        return;
+      }
+
+      this._status = status;
+      this._value = value;
+
+      if (status === STATUS_REJECTED && this._handlers.length === 0) {
+        this._unhandledRejection = true;
+        HandlerManager.addUnhandledRejection(this);
+      }
+
+      HandlerManager.scheduleHandlers(this);
+    },
+
+    _resolve: function Promise_resolve(value) {
+      this._updateStatus(STATUS_RESOLVED, value);
+    },
+
+    _reject: function Promise_reject(reason) {
+      this._updateStatus(STATUS_REJECTED, reason);
+    },
+
+    then: function Promise_then(onResolve, onReject) {
+      var nextPromise = new Promise(function (resolve, reject) {
+        this.resolve = resolve;
+        this.reject = reject;
+      });
+      this._handlers.push({
+        thisPromise: this,
+        onResolve: onResolve,
+        onReject: onReject,
+        nextPromise: nextPromise
+      });
+      HandlerManager.scheduleHandlers(this);
+      return nextPromise;
+    },
+
+    catch: function Promise_catch(onReject) {
+      return this.then(undefined, onReject);
+    }
+  };
+
+  globalScope.Promise = Promise;
+})();
+
+var StatTimer = (function StatTimerClosure() {
+  function rpad(str, pad, length) {
+    while (str.length < length) {
+      str += pad;
+    }
+    return str;
+  }
+  function StatTimer() {
+    this.started = {};
+    this.times = [];
+    this.enabled = true;
+  }
+  StatTimer.prototype = {
+    time: function StatTimer_time(name) {
+      if (!this.enabled) {
+        return;
+      }
+      if (name in this.started) {
+        warn('Timer is already running for ' + name);
+      }
+      this.started[name] = Date.now();
+    },
+    timeEnd: function StatTimer_timeEnd(name) {
+      if (!this.enabled) {
+        return;
+      }
+      if (!(name in this.started)) {
+        warn('Timer has not been started for ' + name);
+      }
+      this.times.push({
+        'name': name,
+        'start': this.started[name],
+        'end': Date.now()
+      });
+      // Remove timer from started so it can be called again.
+      delete this.started[name];
+    },
+    toString: function StatTimer_toString() {
+      var i, ii;
+      var times = this.times;
+      var out = '';
+      // Find the longest name for padding purposes.
+      var longest = 0;
+      for (i = 0, ii = times.length; i < ii; ++i) {
+        var name = times[i]['name'];
+        if (name.length > longest) {
+          longest = name.length;
+        }
+      }
+      for (i = 0, ii = times.length; i < ii; ++i) {
+        var span = times[i];
+        var duration = span.end - span.start;
+        out += rpad(span['name'], ' ', longest) + ' ' + duration + 'ms\n';
+      }
+      return out;
+    }
+  };
+  return StatTimer;
+})();
+
+PDFJS.createBlob = function createBlob(data, contentType) {
+  if (typeof Blob !== 'undefined') {
+    return new Blob([data], { type: contentType });
+  }
+  // Blob builder is deprecated in FF14 and removed in FF18.
+  var bb = new MozBlobBuilder();
+  bb.append(data);
+  return bb.getBlob(contentType);
+};
+
+PDFJS.createObjectURL = (function createObjectURLClosure() {
+  // Blob/createObjectURL is not available, falling back to data schema.
+  var digits =
+    'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+  return function createObjectURL(data, contentType) {
+    if (!PDFJS.disableCreateObjectURL &&
+        typeof URL !== 'undefined' && URL.createObjectURL) {
+      var blob = PDFJS.createBlob(data, contentType);
+      return URL.createObjectURL(blob);
+    }
+
+    var buffer = 'data:' + contentType + ';base64,';
+    for (var i = 0, ii = data.length; i < ii; i += 3) {
+      var b1 = data[i] & 0xFF;
+      var b2 = data[i + 1] & 0xFF;
+      var b3 = data[i + 2] & 0xFF;
+      var d1 = b1 >> 2, d2 = ((b1 & 3) << 4) | (b2 >> 4);
+      var d3 = i + 1 < ii ? ((b2 & 0xF) << 2) | (b3 >> 6) : 64;
+      var d4 = i + 2 < ii ? (b3 & 0x3F) : 64;
+      buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
+    }
+    return buffer;
+  };
+})();
+
+function MessageHandler(name, comObj) {
+  this.name = name;
+  this.comObj = comObj;
+  this.callbackIndex = 1;
+  this.postMessageTransfers = true;
+  var callbacksCapabilities = this.callbacksCapabilities = {};
+  var ah = this.actionHandler = {};
+
+  ah['console_log'] = [function ahConsoleLog(data) {
+    console.log.apply(console, data);
+  }];
+  ah['console_error'] = [function ahConsoleError(data) {
+    console.error.apply(console, data);
+  }];
+  ah['_unsupported_feature'] = [function ah_unsupportedFeature(data) {
+    UnsupportedManager.notify(data);
+  }];
+
+  comObj.onmessage = function messageHandlerComObjOnMessage(event) {
+    var data = event.data;
+    if (data.isReply) {
+      var callbackId = data.callbackId;
+      if (data.callbackId in callbacksCapabilities) {
+        var callback = callbacksCapabilities[callbackId];
+        delete callbacksCapabilities[callbackId];
+        if ('error' in data) {
+          callback.reject(data.error);
+        } else {
+          callback.resolve(data.data);
+        }
+      } else {
+        error('Cannot resolve callback ' + callbackId);
+      }
+    } else if (data.action in ah) {
+      var action = ah[data.action];
+      if (data.callbackId) {
+        Promise.resolve().then(function () {
+          return action[0].call(action[1], data.data);
+        }).then(function (result) {
+          comObj.postMessage({
+            isReply: true,
+            callbackId: data.callbackId,
+            data: result
+          });
+        }, function (reason) {
+          comObj.postMessage({
+            isReply: true,
+            callbackId: data.callbackId,
+            error: reason
+          });
+        });
+      } else {
+        action[0].call(action[1], data.data);
+      }
+    } else {
+      error('Unknown action from worker: ' + data.action);
+    }
+  };
+}
+
+MessageHandler.prototype = {
+  on: function messageHandlerOn(actionName, handler, scope) {
+    var ah = this.actionHandler;
+    if (ah[actionName]) {
+      error('There is already an actionName called "' + actionName + '"');
+    }
+    ah[actionName] = [handler, scope];
+  },
+  /**
+   * Sends a message to the comObj to invoke the action with the supplied data.
+   * @param {String} actionName Action to call.
+   * @param {JSON} data JSON data to send.
+   * @param {Array} [transfers] Optional list of transfers/ArrayBuffers
+   */
+  send: function messageHandlerSend(actionName, data, transfers) {
+    var message = {
+      action: actionName,
+      data: data
+    };
+    this.postMessage(message, transfers);
+  },
+  /**
+   * Sends a message to the comObj to invoke the action with the supplied data.
+   * Expects that other side will callback with the response.
+   * @param {String} actionName Action to call.
+   * @param {JSON} data JSON data to send.
+   * @param {Array} [transfers] Optional list of transfers/ArrayBuffers.
+   * @returns {Promise} Promise to be resolved with response data.
+   */
+  sendWithPromise:
+    function messageHandlerSendWithPromise(actionName, data, transfers) {
+    var callbackId = this.callbackIndex++;
+    var message = {
+      action: actionName,
+      data: data,
+      callbackId: callbackId
+    };
+    var capability = createPromiseCapability();
+    this.callbacksCapabilities[callbackId] = capability;
+    try {
+      this.postMessage(message, transfers);
+    } catch (e) {
+      capability.reject(e);
+    }
+    return capability.promise;
+  },
+  /**
+   * Sends raw message to the comObj.
+   * @private
+   * @param message {Object} Raw message.
+   * @param transfers List of transfers/ArrayBuffers, or undefined.
+   */
+  postMessage: function (message, transfers) {
+    if (transfers && this.postMessageTransfers) {
+      this.comObj.postMessage(message, transfers);
+    } else {
+      this.comObj.postMessage(message);
+    }
+  }
+};
+
+function loadJpegStream(id, imageUrl, objs) {
+  var img = new Image();
+  img.onload = (function loadJpegStream_onloadClosure() {
+    objs.resolve(id, img);
+  });
+  img.onerror = (function loadJpegStream_onerrorClosure() {
+    objs.resolve(id, null);
+    warn('Error during JPEG image loading');
+  });
+  img.src = imageUrl;
+}
+
+
+
+
+var NetworkManager = (function NetworkManagerClosure() {
+
+  var OK_RESPONSE = 200;
+  var PARTIAL_CONTENT_RESPONSE = 206;
+
+  function NetworkManager(url, args) {
+    this.url = url;
+    args = args || {};
+    this.isHttp = /^https?:/i.test(url);
+    this.httpHeaders = (this.isHttp && args.httpHeaders) || {};
+    this.withCredentials = args.withCredentials || false;
+    this.getXhr = args.getXhr ||
+      function NetworkManager_getXhr() {
+        return new XMLHttpRequest();
+      };
+
+    this.currXhrId = 0;
+    this.pendingRequests = {};
+    this.loadedRequests = {};
+  }
+
+  function getArrayBuffer(xhr) {
+    var data = xhr.response;
+    if (typeof data !== 'string') {
+      return data;
+    }
+    var length = data.length;
+    var array = new Uint8Array(length);
+    for (var i = 0; i < length; i++) {
+      array[i] = data.charCodeAt(i) & 0xFF;
+    }
+    return array.buffer;
+  }
+
+  NetworkManager.prototype = {
+    requestRange: function NetworkManager_requestRange(begin, end, listeners) {
+      var args = {
+        begin: begin,
+        end: end
+      };
+      for (var prop in listeners) {
+        args[prop] = listeners[prop];
+      }
+      return this.request(args);
+    },
+
+    requestFull: function NetworkManager_requestFull(listeners) {
+      return this.request(listeners);
+    },
+
+    request: function NetworkManager_request(args) {
+      var xhr = this.getXhr();
+      var xhrId = this.currXhrId++;
+      var pendingRequest = this.pendingRequests[xhrId] = {
+        xhr: xhr
+      };
+
+      xhr.open('GET', this.url);
+      xhr.withCredentials = this.withCredentials;
+      for (var property in this.httpHeaders) {
+        var value = this.httpHeaders[property];
+        if (typeof value === 'undefined') {
+          continue;
+        }
+        xhr.setRequestHeader(property, value);
+      }
+      if (this.isHttp && 'begin' in args && 'end' in args) {
+        var rangeStr = args.begin + '-' + (args.end - 1);
+        xhr.setRequestHeader('Range', 'bytes=' + rangeStr);
+        pendingRequest.expectedStatus = 206;
+      } else {
+        pendingRequest.expectedStatus = 200;
+      }
+
+      if (args.onProgressiveData) {
+        // Some legacy browsers might throw an exception.
+        try {
+          xhr.responseType = 'moz-chunked-arraybuffer';
+        } catch(e) {}
+        if (xhr.responseType === 'moz-chunked-arraybuffer') {
+          pendingRequest.onProgressiveData = args.onProgressiveData;
+          pendingRequest.mozChunked = true;
+        } else {
+          xhr.responseType = 'arraybuffer';
+        }
+      } else {
+        xhr.responseType = 'arraybuffer';
+      }
+
+      if (args.onError) {
+        xhr.onerror = function(evt) {
+          args.onError(xhr.status);
+        };
+      }
+      xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);
+      xhr.onprogress = this.onProgress.bind(this, xhrId);
+
+      pendingRequest.onHeadersReceived = args.onHeadersReceived;
+      pendingRequest.onDone = args.onDone;
+      pendingRequest.onError = args.onError;
+      pendingRequest.onProgress = args.onProgress;
+
+      xhr.send(null);
+
+      return xhrId;
+    },
+
+    onProgress: function NetworkManager_onProgress(xhrId, evt) {
+      var pendingRequest = this.pendingRequests[xhrId];
+      if (!pendingRequest) {
+        // Maybe abortRequest was called...
+        return;
+      }
+
+      if (pendingRequest.mozChunked) {
+        var chunk = getArrayBuffer(pendingRequest.xhr);
+        pendingRequest.onProgressiveData(chunk);
+      }
+
+      var onProgress = pendingRequest.onProgress;
+      if (onProgress) {
+        onProgress(evt);
+      }
+    },
+
+    onStateChange: function NetworkManager_onStateChange(xhrId, evt) {
+      var pendingRequest = this.pendingRequests[xhrId];
+      if (!pendingRequest) {
+        // Maybe abortRequest was called...
+        return;
+      }
+
+      var xhr = pendingRequest.xhr;
+      if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {
+        pendingRequest.onHeadersReceived();
+        delete pendingRequest.onHeadersReceived;
+      }
+
+      if (xhr.readyState !== 4) {
+        return;
+      }
+
+      if (!(xhrId in this.pendingRequests)) {
+        // The XHR request might have been aborted in onHeadersReceived()
+        // callback, in which case we should abort request
+        return;
+      }
+
+      delete this.pendingRequests[xhrId];
+
+      // success status == 0 can be on ftp, file and other protocols
+      if (xhr.status === 0 && this.isHttp) {
+        if (pendingRequest.onError) {
+          pendingRequest.onError(xhr.status);
+        }
+        return;
+      }
+      var xhrStatus = xhr.status || OK_RESPONSE;
+
+      // From http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.2:
+      // "A server MAY ignore the Range header". This means it's possible to
+      // get a 200 rather than a 206 response from a range request.
+      var ok_response_on_range_request =
+          xhrStatus === OK_RESPONSE &&
+          pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;
+
+      if (!ok_response_on_range_request &&
+          xhrStatus !== pendingRequest.expectedStatus) {
+        if (pendingRequest.onError) {
+          pendingRequest.onError(xhr.status);
+        }
+        return;
+      }
+
+      this.loadedRequests[xhrId] = true;
+
+      var chunk = getArrayBuffer(xhr);
+      if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {
+        var rangeHeader = xhr.getResponseHeader('Content-Range');
+        var matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader);
+        var begin = parseInt(matches[1], 10);
+        pendingRequest.onDone({
+          begin: begin,
+          chunk: chunk
+        });
+      } else if (pendingRequest.onProgressiveData) {
+        pendingRequest.onDone(null);
+      } else {
+        pendingRequest.onDone({
+          begin: 0,
+          chunk: chunk
+        });
+      }
+    },
+
+    hasPendingRequests: function NetworkManager_hasPendingRequests() {
+      for (var xhrId in this.pendingRequests) {
+        return true;
+      }
+      return false;
+    },
+
+    getRequestXhr: function NetworkManager_getXhr(xhrId) {
+      return this.pendingRequests[xhrId].xhr;
+    },
+
+    isStreamingRequest: function NetworkManager_isStreamingRequest(xhrId) {
+      return !!(this.pendingRequests[xhrId].onProgressiveData);
+    },
+
+    isPendingRequest: function NetworkManager_isPendingRequest(xhrId) {
+      return xhrId in this.pendingRequests;
+    },
+
+    isLoadedRequest: function NetworkManager_isLoadedRequest(xhrId) {
+      return xhrId in this.loadedRequests;
+    },
+
+    abortAllRequests: function NetworkManager_abortAllRequests() {
+      for (var xhrId in this.pendingRequests) {
+        this.abortRequest(xhrId | 0);
+      }
+    },
+
+    abortRequest: function NetworkManager_abortRequest(xhrId) {
+      var xhr = this.pendingRequests[xhrId].xhr;
+      delete this.pendingRequests[xhrId];
+      xhr.abort();
+    }
+  };
+
+  return NetworkManager;
+})();
+
+
+var ChunkedStream = (function ChunkedStreamClosure() {
+  function ChunkedStream(length, chunkSize, manager) {
+    this.bytes = new Uint8Array(length);
+    this.start = 0;
+    this.pos = 0;
+    this.end = length;
+    this.chunkSize = chunkSize;
+    this.loadedChunks = [];
+    this.numChunksLoaded = 0;
+    this.numChunks = Math.ceil(length / chunkSize);
+    this.manager = manager;
+    this.progressiveDataLength = 0;
+    this.lastSuccessfulEnsureByteChunk = -1;  // a single-entry cache
+  }
+
+  // required methods for a stream. if a particular stream does not
+  // implement these, an error should be thrown
+  ChunkedStream.prototype = {
+
+    getMissingChunks: function ChunkedStream_getMissingChunks() {
+      var chunks = [];
+      for (var chunk = 0, n = this.numChunks; chunk < n; ++chunk) {
+        if (!this.loadedChunks[chunk]) {
+          chunks.push(chunk);
+        }
+      }
+      return chunks;
+    },
+
+    getBaseStreams: function ChunkedStream_getBaseStreams() {
+      return [this];
+    },
+
+    allChunksLoaded: function ChunkedStream_allChunksLoaded() {
+      return this.numChunksLoaded === this.numChunks;
+    },
+
+    onReceiveData: function ChunkedStream_onReceiveData(begin, chunk) {
+      var end = begin + chunk.byteLength;
+
+      assert(begin % this.chunkSize === 0, 'Bad begin offset: ' + begin);
+      // Using this.length is inaccurate here since this.start can be moved
+      // See ChunkedStream.moveStart()
+      var length = this.bytes.length;
+      assert(end % this.chunkSize === 0 || end === length,
+             'Bad end offset: ' + end);
+
+      this.bytes.set(new Uint8Array(chunk), begin);
+      var chunkSize = this.chunkSize;
+      var beginChunk = Math.floor(begin / chunkSize);
+      var endChunk = Math.floor((end - 1) / chunkSize) + 1;
+      var curChunk;
+
+      for (curChunk = beginChunk; curChunk < endChunk; ++curChunk) {
+        if (!this.loadedChunks[curChunk]) {
+          this.loadedChunks[curChunk] = true;
+          ++this.numChunksLoaded;
+        }
+      }
+    },
+
+    onReceiveProgressiveData:
+        function ChunkedStream_onReceiveProgressiveData(data) {
+      var position = this.progressiveDataLength;
+      var beginChunk = Math.floor(position / this.chunkSize);
+
+      this.bytes.set(new Uint8Array(data), position);
+      position += data.byteLength;
+      this.progressiveDataLength = position;
+      var endChunk = position >= this.end ? this.numChunks :
+                     Math.floor(position / this.chunkSize);
+      var curChunk;
+      for (curChunk = beginChunk; curChunk < endChunk; ++curChunk) {
+        if (!this.loadedChunks[curChunk]) {
+          this.loadedChunks[curChunk] = true;
+          ++this.numChunksLoaded;
+        }
+      }
+    },
+
+    ensureByte: function ChunkedStream_ensureByte(pos) {
+      var chunk = Math.floor(pos / this.chunkSize);
+      if (chunk === this.lastSuccessfulEnsureByteChunk) {
+        return;
+      }
+
+      if (!this.loadedChunks[chunk]) {
+        throw new MissingDataException(pos, pos + 1);
+      }
+      this.lastSuccessfulEnsureByteChunk = chunk;
+    },
+
+    ensureRange: function ChunkedStream_ensureRange(begin, end) {
+      if (begin >= end) {
+        return;
+      }
+
+      if (end <= this.progressiveDataLength) {
+        return;
+      }
+
+      var chunkSize = this.chunkSize;
+      var beginChunk = Math.floor(begin / chunkSize);
+      var endChunk = Math.floor((end - 1) / chunkSize) + 1;
+      for (var chunk = beginChunk; chunk < endChunk; ++chunk) {
+        if (!this.loadedChunks[chunk]) {
+          throw new MissingDataException(begin, end);
+        }
+      }
+    },
+
+    nextEmptyChunk: function ChunkedStream_nextEmptyChunk(beginChunk) {
+      var chunk, n;
+      for (chunk = beginChunk, n = this.numChunks; chunk < n; ++chunk) {
+        if (!this.loadedChunks[chunk]) {
+          return chunk;
+        }
+      }
+      // Wrap around to beginning
+      for (chunk = 0; chunk < beginChunk; ++chunk) {
+        if (!this.loadedChunks[chunk]) {
+          return chunk;
+        }
+      }
+      return null;
+    },
+
+    hasChunk: function ChunkedStream_hasChunk(chunk) {
+      return !!this.loadedChunks[chunk];
+    },
+
+    get length() {
+      return this.end - this.start;
+    },
+
+    get isEmpty() {
+      return this.length === 0;
+    },
+
+    getByte: function ChunkedStream_getByte() {
+      var pos = this.pos;
+      if (pos >= this.end) {
+        return -1;
+      }
+      this.ensureByte(pos);
+      return this.bytes[this.pos++];
+    },
+
+    getUint16: function ChunkedStream_getUint16() {
+      var b0 = this.getByte();
+      var b1 = this.getByte();
+      if (b0 === -1 || b1 === -1) {
+        return -1;
+      }
+      return (b0 << 8) + b1;
+    },
+
+    getInt32: function ChunkedStream_getInt32() {
+      var b0 = this.getByte();
+      var b1 = this.getByte();
+      var b2 = this.getByte();
+      var b3 = this.getByte();
+      return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
+    },
+
+    // returns subarray of original buffer
+    // should only be read
+    getBytes: function ChunkedStream_getBytes(length) {
+      var bytes = this.bytes;
+      var pos = this.pos;
+      var strEnd = this.end;
+
+      if (!length) {
+        this.ensureRange(pos, strEnd);
+        return bytes.subarray(pos, strEnd);
+      }
+
+      var end = pos + length;
+      if (end > strEnd) {
+        end = strEnd;
+      }
+      this.ensureRange(pos, end);
+
+      this.pos = end;
+      return bytes.subarray(pos, end);
+    },
+
+    peekByte: function ChunkedStream_peekByte() {
+      var peekedByte = this.getByte();
+      this.pos--;
+      return peekedByte;
+    },
+
+    peekBytes: function ChunkedStream_peekBytes(length) {
+      var bytes = this.getBytes(length);
+      this.pos -= bytes.length;
+      return bytes;
+    },
+
+    getByteRange: function ChunkedStream_getBytes(begin, end) {
+      this.ensureRange(begin, end);
+      return this.bytes.subarray(begin, end);
+    },
+
+    skip: function ChunkedStream_skip(n) {
+      if (!n) {
+        n = 1;
+      }
+      this.pos += n;
+    },
+
+    reset: function ChunkedStream_reset() {
+      this.pos = this.start;
+    },
+
+    moveStart: function ChunkedStream_moveStart() {
+      this.start = this.pos;
+    },
+
+    makeSubStream: function ChunkedStream_makeSubStream(start, length, dict) {
+      this.ensureRange(start, start + length);
+
+      function ChunkedStreamSubstream() {}
+      ChunkedStreamSubstream.prototype = Object.create(this);
+      ChunkedStreamSubstream.prototype.getMissingChunks = function() {
+        var chunkSize = this.chunkSize;
+        var beginChunk = Math.floor(this.start / chunkSize);
+        var endChunk = Math.floor((this.end - 1) / chunkSize) + 1;
+        var missingChunks = [];
+        for (var chunk = beginChunk; chunk < endChunk; ++chunk) {
+          if (!this.loadedChunks[chunk]) {
+            missingChunks.push(chunk);
+          }
+        }
+        return missingChunks;
+      };
+      var subStream = new ChunkedStreamSubstream();
+      subStream.pos = subStream.start = start;
+      subStream.end = start + length || this.end;
+      subStream.dict = dict;
+      return subStream;
+    },
+
+    isStream: true
+  };
+
+  return ChunkedStream;
+})();
+
+var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
+
+  function ChunkedStreamManager(length, chunkSize, url, args) {
+    this.stream = new ChunkedStream(length, chunkSize, this);
+    this.length = length;
+    this.chunkSize = chunkSize;
+    this.url = url;
+    this.disableAutoFetch = args.disableAutoFetch;
+    var msgHandler = this.msgHandler = args.msgHandler;
+
+    if (args.chunkedViewerLoading) {
+      msgHandler.on('OnDataRange', this.onReceiveData.bind(this));
+      msgHandler.on('OnDataProgress', this.onProgress.bind(this));
+      this.sendRequest = function ChunkedStreamManager_sendRequest(begin, end) {
+        msgHandler.send('RequestDataRange', { begin: begin, end: end });
+      };
+    } else {
+
+      var getXhr = function getXhr() {
+        return new XMLHttpRequest();
+      };
+      this.networkManager = new NetworkManager(this.url, {
+        getXhr: getXhr,
+        httpHeaders: args.httpHeaders,
+        withCredentials: args.withCredentials
+      });
+      this.sendRequest = function ChunkedStreamManager_sendRequest(begin, end) {
+        this.networkManager.requestRange(begin, end, {
+          onDone: this.onReceiveData.bind(this),
+          onProgress: this.onProgress.bind(this)
+        });
+      };
+    }
+
+    this.currRequestId = 0;
+
+    this.chunksNeededByRequest = {};
+    this.requestsByChunk = {};
+    this.callbacksByRequest = {};
+    this.progressiveDataLength = 0;
+
+    this._loadedStreamCapability = createPromiseCapability();
+
+    if (args.initialData) {
+      this.onReceiveData({chunk: args.initialData});
+    }
+  }
+
+  ChunkedStreamManager.prototype = {
+    onLoadedStream: function ChunkedStreamManager_getLoadedStream() {
+      return this._loadedStreamCapability.promise;
+    },
+
+    // Get all the chunks that are not yet loaded and groups them into
+    // contiguous ranges to load in as few requests as possible
+    requestAllChunks: function ChunkedStreamManager_requestAllChunks() {
+      var missingChunks = this.stream.getMissingChunks();
+      this.requestChunks(missingChunks);
+      return this._loadedStreamCapability.promise;
+    },
+
+    requestChunks: function ChunkedStreamManager_requestChunks(chunks,
+                                                               callback) {
+      var requestId = this.currRequestId++;
+
+      var chunksNeeded;
+      var i, ii;
+      this.chunksNeededByRequest[requestId] = chunksNeeded = {};
+      for (i = 0, ii = chunks.length; i < ii; i++) {
+        if (!this.stream.hasChunk(chunks[i])) {
+          chunksNeeded[chunks[i]] = true;
+        }
+      }
+
+      if (isEmptyObj(chunksNeeded)) {
+        if (callback) {
+          callback();
+        }
+        return;
+      }
+
+      this.callbacksByRequest[requestId] = callback;
+
+      var chunksToRequest = [];
+      for (var chunk in chunksNeeded) {
+        chunk = chunk | 0;
+        if (!(chunk in this.requestsByChunk)) {
+          this.requestsByChunk[chunk] = [];
+          chunksToRequest.push(chunk);
+        }
+        this.requestsByChunk[chunk].push(requestId);
+      }
+
+      if (!chunksToRequest.length) {
+        return;
+      }
+
+      var groupedChunksToRequest = this.groupChunks(chunksToRequest);
+
+      for (i = 0; i < groupedChunksToRequest.length; ++i) {
+        var groupedChunk = groupedChunksToRequest[i];
+        var begin = groupedChunk.beginChunk * this.chunkSize;
+        var end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length);
+        this.sendRequest(begin, end);
+      }
+    },
+
+    getStream: function ChunkedStreamManager_getStream() {
+      return this.stream;
+    },
+
+    // Loads any chunks in the requested range that are not yet loaded
+    requestRange: function ChunkedStreamManager_requestRange(
+                      begin, end, callback) {
+
+      end = Math.min(end, this.length);
+
+      var beginChunk = this.getBeginChunk(begin);
+      var endChunk = this.getEndChunk(end);
+
+      var chunks = [];
+      for (var chunk = beginChunk; chunk < endChunk; ++chunk) {
+        chunks.push(chunk);
+      }
+
+      this.requestChunks(chunks, callback);
+    },
+
+    requestRanges: function ChunkedStreamManager_requestRanges(ranges,
+                                                               callback) {
+      ranges = ranges || [];
+      var chunksToRequest = [];
+
+      for (var i = 0; i < ranges.length; i++) {
+        var beginChunk = this.getBeginChunk(ranges[i].begin);
+        var endChunk = this.getEndChunk(ranges[i].end);
+        for (var chunk = beginChunk; chunk < endChunk; ++chunk) {
+          if (chunksToRequest.indexOf(chunk) < 0) {
+            chunksToRequest.push(chunk);
+          }
+        }
+      }
+
+      chunksToRequest.sort(function(a, b) { return a - b; });
+      this.requestChunks(chunksToRequest, callback);
+    },
+
+    // Groups a sorted array of chunks into as few continguous larger
+    // chunks as possible
+    groupChunks: function ChunkedStreamManager_groupChunks(chunks) {
+      var groupedChunks = [];
+      var beginChunk = -1;
+      var prevChunk = -1;
+      for (var i = 0; i < chunks.length; ++i) {
+        var chunk = chunks[i];
+
+        if (beginChunk < 0) {
+          beginChunk = chunk;
+        }
+
+        if (prevChunk >= 0 && prevChunk + 1 !== chunk) {
+          groupedChunks.push({ beginChunk: beginChunk,
+                               endChunk: prevChunk + 1 });
+          beginChunk = chunk;
+        }
+        if (i + 1 === chunks.length) {
+          groupedChunks.push({ beginChunk: beginChunk,
+                               endChunk: chunk + 1 });
+        }
+
+        prevChunk = chunk;
+      }
+      return groupedChunks;
+    },
+
+    onProgress: function ChunkedStreamManager_onProgress(args) {
+      var bytesLoaded = (this.stream.numChunksLoaded * this.chunkSize +
+                         args.loaded);
+      this.msgHandler.send('DocProgress', {
+        loaded: bytesLoaded,
+        total: this.length
+      });
+    },
+
+    onReceiveData: function ChunkedStreamManager_onReceiveData(args) {
+      var chunk = args.chunk;
+      var isProgressive = args.begin === undefined;
+      var begin = isProgressive ? this.progressiveDataLength : args.begin;
+      var end = begin + chunk.byteLength;
+
+      var beginChunk = Math.floor(begin / this.chunkSize);
+      var endChunk = end < this.length ? Math.floor(end / this.chunkSize) :
+                                         Math.ceil(end / this.chunkSize);
+
+      if (isProgressive) {
+        this.stream.onReceiveProgressiveData(chunk);
+        this.progressiveDataLength = end;
+      } else {
+        this.stream.onReceiveData(begin, chunk);
+      }
+
+      if (this.stream.allChunksLoaded()) {
+        this._loadedStreamCapability.resolve(this.stream);
+      }
+
+      var loadedRequests = [];
+      var i, requestId;
+      for (chunk = beginChunk; chunk < endChunk; ++chunk) {
+        // The server might return more chunks than requested
+        var requestIds = this.requestsByChunk[chunk] || [];
+        delete this.requestsByChunk[chunk];
+
+        for (i = 0; i < requestIds.length; ++i) {
+          requestId = requestIds[i];
+          var chunksNeeded = this.chunksNeededByRequest[requestId];
+          if (chunk in chunksNeeded) {
+            delete chunksNeeded[chunk];
+          }
+
+          if (!isEmptyObj(chunksNeeded)) {
+            continue;
+          }
+
+          loadedRequests.push(requestId);
+        }
+      }
+
+      // If there are no pending requests, automatically fetch the next
+      // unfetched chunk of the PDF
+      if (!this.disableAutoFetch && isEmptyObj(this.requestsByChunk)) {
+        var nextEmptyChunk;
+        if (this.stream.numChunksLoaded === 1) {
+          // This is a special optimization so that after fetching the first
+          // chunk, rather than fetching the second chunk, we fetch the last
+          // chunk.
+          var lastChunk = this.stream.numChunks - 1;
+          if (!this.stream.hasChunk(lastChunk)) {
+            nextEmptyChunk = lastChunk;
+          }
+        } else {
+          nextEmptyChunk = this.stream.nextEmptyChunk(endChunk);
+        }
+        if (isInt(nextEmptyChunk)) {
+          this.requestChunks([nextEmptyChunk]);
+        }
+      }
+
+      for (i = 0; i < loadedRequests.length; ++i) {
+        requestId = loadedRequests[i];
+        var callback = this.callbacksByRequest[requestId];
+        delete this.callbacksByRequest[requestId];
+        if (callback) {
+          callback();
+        }
+      }
+
+      this.msgHandler.send('DocProgress', {
+        loaded: this.stream.numChunksLoaded * this.chunkSize,
+        total: this.length
+      });
+    },
+
+    onError: function ChunkedStreamManager_onError(err) {
+      this._loadedStreamCapability.reject(err);
+    },
+
+    getBeginChunk: function ChunkedStreamManager_getBeginChunk(begin) {
+      var chunk = Math.floor(begin / this.chunkSize);
+      return chunk;
+    },
+
+    getEndChunk: function ChunkedStreamManager_getEndChunk(end) {
+      if (end % this.chunkSize === 0) {
+        return end / this.chunkSize;
+      }
+
+      // 0 -> 0
+      // 1 -> 1
+      // 99 -> 1
+      // 100 -> 1
+      // 101 -> 2
+      var chunk = Math.floor((end - 1) / this.chunkSize) + 1;
+      return chunk;
+    }
+  };
+
+  return ChunkedStreamManager;
+})();
+
+
+// The maximum number of bytes fetched per range request
+var RANGE_CHUNK_SIZE = 65536;
+
+// TODO(mack): Make use of PDFJS.Util.inherit() when it becomes available
+var BasePdfManager = (function BasePdfManagerClosure() {
+  function BasePdfManager() {
+    throw new Error('Cannot initialize BaseManagerManager');
+  }
+
+  BasePdfManager.prototype = {
+    onLoadedStream: function BasePdfManager_onLoadedStream() {
+      throw new NotImplementedException();
+    },
+
+    ensureDoc: function BasePdfManager_ensureDoc(prop, args) {
+      return this.ensure(this.pdfDocument, prop, args);
+    },
+
+    ensureXRef: function BasePdfManager_ensureXRef(prop, args) {
+      return this.ensure(this.pdfDocument.xref, prop, args);
+    },
+
+    ensureCatalog: function BasePdfManager_ensureCatalog(prop, args) {
+      return this.ensure(this.pdfDocument.catalog, prop, args);
+    },
+
+    getPage: function BasePdfManager_pagePage(pageIndex) {
+      return this.pdfDocument.getPage(pageIndex);
+    },
+
+    cleanup: function BasePdfManager_cleanup() {
+      return this.pdfDocument.cleanup();
+    },
+
+    ensure: function BasePdfManager_ensure(obj, prop, args) {
+      return new NotImplementedException();
+    },
+
+    requestRange: function BasePdfManager_ensure(begin, end) {
+      return new NotImplementedException();
+    },
+
+    requestLoadedStream: function BasePdfManager_requestLoadedStream() {
+      return new NotImplementedException();
+    },
+
+    sendProgressiveData: function BasePdfManager_sendProgressiveData(chunk) {
+      return new NotImplementedException();
+    },
+
+    updatePassword: function BasePdfManager_updatePassword(password) {
+      this.pdfDocument.xref.password = this.password = password;
+      if (this._passwordChangedCapability) {
+        this._passwordChangedCapability.resolve();
+      }
+    },
+
+    passwordChanged: function BasePdfManager_passwordChanged() {
+      this._passwordChangedCapability = createPromiseCapability();
+      return this._passwordChangedCapability.promise;
+    },
+
+    terminate: function BasePdfManager_terminate() {
+      return new NotImplementedException();
+    }
+  };
+
+  return BasePdfManager;
+})();
+
+var LocalPdfManager = (function LocalPdfManagerClosure() {
+  function LocalPdfManager(data, password) {
+    var stream = new Stream(data);
+    this.pdfDocument = new PDFDocument(this, stream, password);
+    this._loadedStreamCapability = createPromiseCapability();
+    this._loadedStreamCapability.resolve(stream);
+  }
+
+  LocalPdfManager.prototype = Object.create(BasePdfManager.prototype);
+  LocalPdfManager.prototype.constructor = LocalPdfManager;
+
+  LocalPdfManager.prototype.ensure =
+      function LocalPdfManager_ensure(obj, prop, args) {
+    return new Promise(function (resolve, reject) {
+      try {
+        var value = obj[prop];
+        var result;
+        if (typeof value === 'function') {
+          result = value.apply(obj, args);
+        } else {
+          result = value;
+        }
+        resolve(result);
+      } catch (e) {
+        reject(e);
+      }
+    });
+  };
+
+  LocalPdfManager.prototype.requestRange =
+      function LocalPdfManager_requestRange(begin, end) {
+    return Promise.resolve();
+  };
+
+  LocalPdfManager.prototype.requestLoadedStream =
+      function LocalPdfManager_requestLoadedStream() {
+  };
+
+  LocalPdfManager.prototype.onLoadedStream =
+      function LocalPdfManager_getLoadedStream() {
+    return this._loadedStreamCapability.promise;
+  };
+
+  LocalPdfManager.prototype.terminate =
+      function LocalPdfManager_terminate() {
+    return;
+  };
+
+  return LocalPdfManager;
+})();
+
+var NetworkPdfManager = (function NetworkPdfManagerClosure() {
+  function NetworkPdfManager(args, msgHandler) {
+
+    this.msgHandler = msgHandler;
+
+    var params = {
+      msgHandler: msgHandler,
+      httpHeaders: args.httpHeaders,
+      withCredentials: args.withCredentials,
+      chunkedViewerLoading: args.chunkedViewerLoading,
+      disableAutoFetch: args.disableAutoFetch,
+      initialData: args.initialData
+    };
+    this.streamManager = new ChunkedStreamManager(args.length, RANGE_CHUNK_SIZE,
+                                                  args.url, params);
+
+    this.pdfDocument = new PDFDocument(this, this.streamManager.getStream(),
+                                    args.password);
+  }
+
+  NetworkPdfManager.prototype = Object.create(BasePdfManager.prototype);
+  NetworkPdfManager.prototype.constructor = NetworkPdfManager;
+
+  NetworkPdfManager.prototype.ensure =
+      function NetworkPdfManager_ensure(obj, prop, args) {
+    var pdfManager = this;
+
+    return new Promise(function (resolve, reject) {
+      function ensureHelper() {
+        try {
+          var result;
+          var value = obj[prop];
+          if (typeof value === 'function') {
+            result = value.apply(obj, args);
+          } else {
+            result = value;
+          }
+          resolve(result);
+        } catch(e) {
+          if (!(e instanceof MissingDataException)) {
+            reject(e);
+            return;
+          }
+          pdfManager.streamManager.requestRange(e.begin, e.end, ensureHelper);
+        }
+      }
+
+      ensureHelper();
+    });
+  };
+
+  NetworkPdfManager.prototype.requestRange =
+      function NetworkPdfManager_requestRange(begin, end) {
+    return new Promise(function (resolve) {
+      this.streamManager.requestRange(begin, end, function() {
+        resolve();
+      });
+    }.bind(this));
+  };
+
+  NetworkPdfManager.prototype.requestLoadedStream =
+      function NetworkPdfManager_requestLoadedStream() {
+    this.streamManager.requestAllChunks();
+  };
+
+  NetworkPdfManager.prototype.sendProgressiveData =
+      function NetworkPdfManager_sendProgressiveData(chunk) {
+    this.streamManager.onReceiveData({ chunk: chunk });
+  };
+
+  NetworkPdfManager.prototype.onLoadedStream =
+      function NetworkPdfManager_getLoadedStream() {
+    return this.streamManager.onLoadedStream();
+  };
+
+  NetworkPdfManager.prototype.terminate =
+      function NetworkPdfManager_terminate() {
+    this.streamManager.networkManager.abortAllRequests();
+  };
+
+  return NetworkPdfManager;
+})();
+
+
+var Page = (function PageClosure() {
+
+  var LETTER_SIZE_MEDIABOX = [0, 0, 612, 792];
+
+  function Page(pdfManager, xref, pageIndex, pageDict, ref, fontCache) {
+    this.pdfManager = pdfManager;
+    this.pageIndex = pageIndex;
+    this.pageDict = pageDict;
+    this.xref = xref;
+    this.ref = ref;
+    this.fontCache = fontCache;
+    this.idCounters = {
+      obj: 0
+    };
+    this.resourcesPromise = null;
+  }
+
+  Page.prototype = {
+    getPageProp: function Page_getPageProp(key) {
+      return this.pageDict.get(key);
+    },
+
+    getInheritedPageProp: function Page_inheritPageProp(key) {
+      var dict = this.pageDict;
+      var value = dict.get(key);
+      while (value === undefined) {
+        dict = dict.get('Parent');
+        if (!dict) {
+          break;
+        }
+        value = dict.get(key);
+      }
+      return value;
+    },
+
+    get content() {
+      return this.getPageProp('Contents');
+    },
+
+    get resources() {
+      var value = this.getInheritedPageProp('Resources');
+      // For robustness: The spec states that a \Resources entry has to be
+      // present, but can be empty. Some document omit it still. In this case
+      // return an empty dictionary:
+      if (value === undefined) {
+        value = Dict.empty;
+      }
+      return shadow(this, 'resources', value);
+    },
+
+    get mediaBox() {
+      var obj = this.getInheritedPageProp('MediaBox');
+      // Reset invalid media box to letter size.
+      if (!isArray(obj) || obj.length !== 4) {
+        obj = LETTER_SIZE_MEDIABOX;
+      }
+      return shadow(this, 'mediaBox', obj);
+    },
+
+    get view() {
+      var mediaBox = this.mediaBox;
+      var cropBox = this.getInheritedPageProp('CropBox');
+      if (!isArray(cropBox) || cropBox.length !== 4) {
+        return shadow(this, 'view', mediaBox);
+      }
+
+      // From the spec, 6th ed., p.963:
+      // "The crop, bleed, trim, and art boxes should not ordinarily
+      // extend beyond the boundaries of the media box. If they do, they are
+      // effectively reduced to their intersection with the media box."
+      cropBox = Util.intersect(cropBox, mediaBox);
+      if (!cropBox) {
+        return shadow(this, 'view', mediaBox);
+      }
+      return shadow(this, 'view', cropBox);
+    },
+
+    get annotationRefs() {
+      return shadow(this, 'annotationRefs',
+                    this.getInheritedPageProp('Annots'));
+    },
+
+    get rotate() {
+      var rotate = this.getInheritedPageProp('Rotate') || 0;
+      // Normalize rotation so it's a multiple of 90 and between 0 and 270
+      if (rotate % 90 !== 0) {
+        rotate = 0;
+      } else if (rotate >= 360) {
+        rotate = rotate % 360;
+      } else if (rotate < 0) {
+        // The spec doesn't cover negatives, assume its counterclockwise
+        // rotation. The following is the other implementation of modulo.
+        rotate = ((rotate % 360) + 360) % 360;
+      }
+      return shadow(this, 'rotate', rotate);
+    },
+
+    getContentStream: function Page_getContentStream() {
+      var content = this.content;
+      var stream;
+      if (isArray(content)) {
+        // fetching items
+        var xref = this.xref;
+        var i, n = content.length;
+        var streams = [];
+        for (i = 0; i < n; ++i) {
+          streams.push(xref.fetchIfRef(content[i]));
+        }
+        stream = new StreamsSequenceStream(streams);
+      } else if (isStream(content)) {
+        stream = content;
+      } else {
+        // replacing non-existent page content with empty one
+        stream = new NullStream();
+      }
+      return stream;
+    },
+
+    loadResources: function Page_loadResources(keys) {
+      if (!this.resourcesPromise) {
+        // TODO: add async getInheritedPageProp and remove this.
+        this.resourcesPromise = this.pdfManager.ensure(this, 'resources');
+      }
+      return this.resourcesPromise.then(function resourceSuccess() {
+        var objectLoader = new ObjectLoader(this.resources.map,
+                                            keys,
+                                            this.xref);
+        return objectLoader.load();
+      }.bind(this));
+    },
+
+    getOperatorList: function Page_getOperatorList(handler, intent) {
+      var self = this;
+
+      var pdfManager = this.pdfManager;
+      var contentStreamPromise = pdfManager.ensure(this, 'getContentStream',
+                                                   []);
+      var resourcesPromise = this.loadResources([
+        'ExtGState',
+        'ColorSpace',
+        'Pattern',
+        'Shading',
+        'XObject',
+        'Font'
+        // ProcSet
+        // Properties
+      ]);
+
+      var partialEvaluator = new PartialEvaluator(pdfManager, this.xref,
+                                                  handler, this.pageIndex,
+                                                  'p' + this.pageIndex + '_',
+                                                  this.idCounters,
+                                                  this.fontCache);
+
+      var dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);
+      var pageListPromise = dataPromises.then(function(data) {
+        var contentStream = data[0];
+        var opList = new OperatorList(intent, handler, self.pageIndex);
+
+        handler.send('StartRenderPage', {
+          transparency: partialEvaluator.hasBlendModes(self.resources),
+          pageIndex: self.pageIndex,
+          intent: intent
+        });
+        return partialEvaluator.getOperatorList(contentStream, self.resources,
+          opList).then(function () {
+            return opList;
+          });
+      });
+
+      var annotationsPromise = pdfManager.ensure(this, 'annotations');
+      return Promise.all([pageListPromise, annotationsPromise]).then(
+          function(datas) {
+        var pageOpList = datas[0];
+        var annotations = datas[1];
+
+        if (annotations.length === 0) {
+          pageOpList.flush(true);
+          return pageOpList;
+        }
+
+        var annotationsReadyPromise = Annotation.appendToOperatorList(
+          annotations, pageOpList, pdfManager, partialEvaluator, intent);
+        return annotationsReadyPromise.then(function () {
+          pageOpList.flush(true);
+          return pageOpList;
+        });
+      });
+    },
+
+    extractTextContent: function Page_extractTextContent() {
+      var handler = {
+        on: function nullHandlerOn() {},
+        send: function nullHandlerSend() {}
+      };
+
+      var self = this;
+
+      var pdfManager = this.pdfManager;
+      var contentStreamPromise = pdfManager.ensure(this, 'getContentStream',
+                                                   []);
+
+      var resourcesPromise = this.loadResources([
+        'ExtGState',
+        'XObject',
+        'Font'
+      ]);
+
+      var dataPromises = Promise.all([contentStreamPromise,
+                                      resourcesPromise]);
+      return dataPromises.then(function(data) {
+        var contentStream = data[0];
+        var partialEvaluator = new PartialEvaluator(pdfManager, self.xref,
+                                                    handler, self.pageIndex,
+                                                    'p' + self.pageIndex + '_',
+                                                    self.idCounters,
+                                                    self.fontCache);
+
+        return partialEvaluator.getTextContent(contentStream,
+                                               self.resources);
+      });
+    },
+
+    getAnnotationsData: function Page_getAnnotationsData() {
+      var annotations = this.annotations;
+      var annotationsData = [];
+      for (var i = 0, n = annotations.length; i < n; ++i) {
+        annotationsData.push(annotations[i].getData());
+      }
+      return annotationsData;
+    },
+
+    get annotations() {
+      var annotations = [];
+      var annotationRefs = (this.annotationRefs || []);
+      for (var i = 0, n = annotationRefs.length; i < n; ++i) {
+        var annotationRef = annotationRefs[i];
+        var annotation = Annotation.fromRef(this.xref, annotationRef);
+        if (annotation) {
+          annotations.push(annotation);
+        }
+      }
+      return shadow(this, 'annotations', annotations);
+    }
+  };
+
+  return Page;
+})();
+
+/**
+ * The `PDFDocument` holds all the data of the PDF file. Compared to the
+ * `PDFDoc`, this one doesn't have any job management code.
+ * Right now there exists one PDFDocument on the main thread + one object
+ * for each worker. If there is no worker support enabled, there are two
+ * `PDFDocument` objects on the main thread created.
+ */
+var PDFDocument = (function PDFDocumentClosure() {
+  var FINGERPRINT_FIRST_BYTES = 1024;
+  var EMPTY_FINGERPRINT = '\x00\x00\x00\x00\x00\x00\x00' +
+    '\x00\x00\x00\x00\x00\x00\x00\x00\x00';
+
+  function PDFDocument(pdfManager, arg, password) {
+    if (isStream(arg)) {
+      init.call(this, pdfManager, arg, password);
+    } else if (isArrayBuffer(arg)) {
+      init.call(this, pdfManager, new Stream(arg), password);
+    } else {
+      error('PDFDocument: Unknown argument type');
+    }
+  }
+
+  function init(pdfManager, stream, password) {
+    assert(stream.length > 0, 'stream must have data');
+    this.pdfManager = pdfManager;
+    this.stream = stream;
+    var xref = new XRef(this.stream, password, pdfManager);
+    this.xref = xref;
+  }
+
+  function find(stream, needle, limit, backwards) {
+    var pos = stream.pos;
+    var end = stream.end;
+    var strBuf = [];
+    if (pos + limit > end) {
+      limit = end - pos;
+    }
+    for (var n = 0; n < limit; ++n) {
+      strBuf.push(String.fromCharCode(stream.getByte()));
+    }
+    var str = strBuf.join('');
+    stream.pos = pos;
+    var index = backwards ? str.lastIndexOf(needle) : str.indexOf(needle);
+    if (index === -1) {
+      return false; /* not found */
+    }
+    stream.pos += index;
+    return true; /* found */
+  }
+
+  var DocumentInfoValidators = {
+    get entries() {
+      // Lazily build this since all the validation functions below are not
+      // defined until after this file loads.
+      return shadow(this, 'entries', {
+        Title: isString,
+        Author: isString,
+        Subject: isString,
+        Keywords: isString,
+        Creator: isString,
+        Producer: isString,
+        CreationDate: isString,
+        ModDate: isString,
+        Trapped: isName
+      });
+    }
+  };
+
+  PDFDocument.prototype = {
+    parse: function PDFDocument_parse(recoveryMode) {
+      this.setup(recoveryMode);
+      try {
+        // checking if AcroForm is present
+        this.acroForm = this.catalog.catDict.get('AcroForm');
+        if (this.acroForm) {
+          this.xfa = this.acroForm.get('XFA');
+          var fields = this.acroForm.get('Fields');
+          if ((!fields || !isArray(fields) || fields.length === 0) &&
+              !this.xfa) {
+            // no fields and no XFA -- not a form (?)
+            this.acroForm = null;
+          }
+        }
+      } catch (ex) {
+        info('Something wrong with AcroForm entry');
+        this.acroForm = null;
+      }
+    },
+
+    get linearization() {
+      var linearization = null;
+      if (this.stream.length) {
+        try {
+          linearization = Linearization.create(this.stream);
+        } catch (err) {
+          if (err instanceof MissingDataException) {
+            throw err;
+          }
+          info(err);
+        }
+      }
+      // shadow the prototype getter with a data property
+      return shadow(this, 'linearization', linearization);
+    },
+    get startXRef() {
+      var stream = this.stream;
+      var startXRef = 0;
+      var linearization = this.linearization;
+      if (linearization) {
+        // Find end of first obj.
+        stream.reset();
+        if (find(stream, 'endobj', 1024)) {
+          startXRef = stream.pos + 6;
+        }
+      } else {
+        // Find startxref by jumping backward from the end of the file.
+        var step = 1024;
+        var found = false, pos = stream.end;
+        while (!found && pos > 0) {
+          pos -= step - 'startxref'.length;
+          if (pos < 0) {
+            pos = 0;
+          }
+          stream.pos = pos;
+          found = find(stream, 'startxref', step, true);
+        }
+        if (found) {
+          stream.skip(9);
+          var ch;
+          do {
+            ch = stream.getByte();
+          } while (Lexer.isSpace(ch));
+          var str = '';
+          while (ch >= 0x20 && ch <= 0x39) { // < '9'
+            str += String.fromCharCode(ch);
+            ch = stream.getByte();
+          }
+          startXRef = parseInt(str, 10);
+          if (isNaN(startXRef)) {
+            startXRef = 0;
+          }
+        }
+      }
+      // shadow the prototype getter with a data property
+      return shadow(this, 'startXRef', startXRef);
+    },
+    get mainXRefEntriesOffset() {
+      var mainXRefEntriesOffset = 0;
+      var linearization = this.linearization;
+      if (linearization) {
+        mainXRefEntriesOffset = linearization.mainXRefEntriesOffset;
+      }
+      // shadow the prototype getter with a data property
+      return shadow(this, 'mainXRefEntriesOffset', mainXRefEntriesOffset);
+    },
+    // Find the header, remove leading garbage and setup the stream
+    // starting from the header.
+    checkHeader: function PDFDocument_checkHeader() {
+      var stream = this.stream;
+      stream.reset();
+      if (find(stream, '%PDF-', 1024)) {
+        // Found the header, trim off any garbage before it.
+        stream.moveStart();
+        // Reading file format version
+        var MAX_VERSION_LENGTH = 12;
+        var version = '', ch;
+        while ((ch = stream.getByte()) > 0x20) { // SPACE
+          if (version.length >= MAX_VERSION_LENGTH) {
+            break;
+          }
+          version += String.fromCharCode(ch);
+        }
+        // removing "%PDF-"-prefix
+        this.pdfFormatVersion = version.substring(5);
+        return;
+      }
+      // May not be a PDF file, continue anyway.
+    },
+    parseStartXRef: function PDFDocument_parseStartXRef() {
+      var startXRef = this.startXRef;
+      this.xref.setStartXRef(startXRef);
+    },
+    setup: function PDFDocument_setup(recoveryMode) {
+      this.xref.parse(recoveryMode);
+      this.catalog = new Catalog(this.pdfManager, this.xref);
+    },
+    get numPages() {
+      var linearization = this.linearization;
+      var num = linearization ? linearization.numPages : this.catalog.numPages;
+      // shadow the prototype getter
+      return shadow(this, 'numPages', num);
+    },
+    get documentInfo() {
+      var docInfo = {
+        PDFFormatVersion: this.pdfFormatVersion,
+        IsAcroFormPresent: !!this.acroForm,
+        IsXFAPresent: !!this.xfa
+      };
+      var infoDict;
+      try {
+        infoDict = this.xref.trailer.get('Info');
+      } catch (err) {
+        info('The document information dictionary is invalid.');
+      }
+      if (infoDict) {
+        var validEntries = DocumentInfoValidators.entries;
+        // Only fill the document info with valid entries from the spec.
+        for (var key in validEntries) {
+          if (infoDict.has(key)) {
+            var value = infoDict.get(key);
+            // Make sure the value conforms to the spec.
+            if (validEntries[key](value)) {
+              docInfo[key] = (typeof value !== 'string' ?
+                              value : stringToPDFString(value));
+            } else {
+              info('Bad value in document info for "' + key + '"');
+            }
+          }
+        }
+      }
+      return shadow(this, 'documentInfo', docInfo);
+    },
+    get fingerprint() {
+      var xref = this.xref, idArray, hash, fileID = '';
+
+      if (xref.trailer.has('ID')) {
+        idArray = xref.trailer.get('ID');
+      }
+      if (idArray && isArray(idArray) && idArray[0] !== EMPTY_FINGERPRINT) {
+        hash = stringToBytes(idArray[0]);
+      } else {
+        if (this.stream.ensureRange) {
+          this.stream.ensureRange(0,
+            Math.min(FINGERPRINT_FIRST_BYTES, this.stream.end));
+        }
+        hash = calculateMD5(this.stream.bytes.subarray(0,
+          FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES);
+      }
+
+      for (var i = 0, n = hash.length; i < n; i++) {
+        var hex = hash[i].toString(16);
+        fileID += hex.length === 1 ? '0' + hex : hex;
+      }
+
+      return shadow(this, 'fingerprint', fileID);
+    },
+
+    getPage: function PDFDocument_getPage(pageIndex) {
+      return this.catalog.getPage(pageIndex);
+    },
+
+    cleanup: function PDFDocument_cleanup() {
+      return this.catalog.cleanup();
+    }
+  };
+
+  return PDFDocument;
+})();
+
+
+var Name = (function NameClosure() {
+  function Name(name) {
+    this.name = name;
+  }
+
+  Name.prototype = {};
+
+  var nameCache = {};
+
+  Name.get = function Name_get(name) {
+    var nameValue = nameCache[name];
+    return (nameValue ? nameValue : (nameCache[name] = new Name(name)));
+  };
+
+  return Name;
+})();
+
+var Cmd = (function CmdClosure() {
+  function Cmd(cmd) {
+    this.cmd = cmd;
+  }
+
+  Cmd.prototype = {};
+
+  var cmdCache = {};
+
+  Cmd.get = function Cmd_get(cmd) {
+    var cmdValue = cmdCache[cmd];
+    return (cmdValue ? cmdValue : (cmdCache[cmd] = new Cmd(cmd)));
+  };
+
+  return Cmd;
+})();
+
+var Dict = (function DictClosure() {
+  var nonSerializable = function nonSerializableClosure() {
+    return nonSerializable; // creating closure on some variable
+  };
+
+  var GETALL_DICTIONARY_TYPES_WHITELIST = {
+    'Background': true,
+    'ExtGState': true,
+    'Halftone': true,
+    'Layout': true,
+    'Mask': true,
+    'Pagination': true,
+    'Printing': true
+  };
+
+  function isRecursionAllowedFor(dict) {
+    if (!isName(dict.Type)) {
+      return true;
+    }
+    var dictType = dict.Type.name;
+    return GETALL_DICTIONARY_TYPES_WHITELIST[dictType] === true;
+  }
+
+  // xref is optional
+  function Dict(xref) {
+    // Map should only be used internally, use functions below to access.
+    this.map = Object.create(null);
+    this.xref = xref;
+    this.objId = null;
+    this.__nonSerializable__ = nonSerializable; // disable cloning of the Dict
+  }
+
+  Dict.prototype = {
+    assignXref: function Dict_assignXref(newXref) {
+      this.xref = newXref;
+    },
+
+    // automatically dereferences Ref objects
+    get: function Dict_get(key1, key2, key3) {
+      var value;
+      var xref = this.xref;
+      if (typeof (value = this.map[key1]) !== 'undefined' || key1 in this.map ||
+          typeof key2 === 'undefined') {
+        return xref ? xref.fetchIfRef(value) : value;
+      }
+      if (typeof (value = this.map[key2]) !== 'undefined' || key2 in this.map ||
+          typeof key3 === 'undefined') {
+        return xref ? xref.fetchIfRef(value) : value;
+      }
+      value = this.map[key3] || null;
+      return xref ? xref.fetchIfRef(value) : value;
+    },
+
+    // Same as get(), but returns a promise and uses fetchIfRefAsync().
+    getAsync: function Dict_getAsync(key1, key2, key3) {
+      var value;
+      var xref = this.xref;
+      if (typeof (value = this.map[key1]) !== 'undefined' || key1 in this.map ||
+          typeof key2 === 'undefined') {
+        if (xref) {
+          return xref.fetchIfRefAsync(value);
+        }
+        return Promise.resolve(value);
+      }
+      if (typeof (value = this.map[key2]) !== 'undefined' || key2 in this.map ||
+          typeof key3 === 'undefined') {
+        if (xref) {
+          return xref.fetchIfRefAsync(value);
+        }
+        return Promise.resolve(value);
+      }
+      value = this.map[key3] || null;
+      if (xref) {
+        return xref.fetchIfRefAsync(value);
+      }
+      return Promise.resolve(value);
+    },
+
+    // no dereferencing
+    getRaw: function Dict_getRaw(key) {
+      return this.map[key];
+    },
+
+    // creates new map and dereferences all Refs
+    getAll: function Dict_getAll() {
+      var all = Object.create(null);
+      var queue = null;
+      var key, obj;
+      for (key in this.map) {
+        obj = this.get(key);
+        if (obj instanceof Dict) {
+          if (isRecursionAllowedFor(obj)) {
+            (queue || (queue = [])).push({target: all, key: key, obj: obj});
+          } else {
+            all[key] = this.getRaw(key);
+          }
+        } else {
+          all[key] = obj;
+        }
+      }
+      if (!queue) {
+        return all;
+      }
+
+      // trying to take cyclic references into the account
+      var processed = Object.create(null);
+      while (queue.length > 0) {
+        var item = queue.shift();
+        var itemObj = item.obj;
+        var objId = itemObj.objId;
+        if (objId && objId in processed) {
+          item.target[item.key] = processed[objId];
+          continue;
+        }
+        var dereferenced = Object.create(null);
+        for (key in itemObj.map) {
+          obj = itemObj.get(key);
+          if (obj instanceof Dict) {
+            if (isRecursionAllowedFor(obj)) {
+              queue.push({target: dereferenced, key: key, obj: obj});
+            } else {
+              dereferenced[key] = itemObj.getRaw(key);
+            }
+          } else {
+            dereferenced[key] = obj;
+          }
+        }
+        if (objId) {
+          processed[objId] = dereferenced;
+        }
+        item.target[item.key] = dereferenced;
+      }
+      return all;
+    },
+
+    getKeys: function Dict_getKeys() {
+      return Object.keys(this.map);
+    },
+
+    set: function Dict_set(key, value) {
+      this.map[key] = value;
+    },
+
+    has: function Dict_has(key) {
+      return key in this.map;
+    },
+
+    forEach: function Dict_forEach(callback) {
+      for (var key in this.map) {
+        callback(key, this.get(key));
+      }
+    }
+  };
+
+  Dict.empty = new Dict(null);
+
+  return Dict;
+})();
+
+var Ref = (function RefClosure() {
+  function Ref(num, gen) {
+    this.num = num;
+    this.gen = gen;
+  }
+
+  Ref.prototype = {
+    toString: function Ref_toString() {
+      // This function is hot, so we make the string as compact as possible.
+      // |this.gen| is almost always zero, so we treat that case specially.
+      var str = this.num + 'R';
+      if (this.gen !== 0) {
+        str += this.gen;
+      }
+      return str;
+    }
+  };
+
+  return Ref;
+})();
+
+// The reference is identified by number and generation.
+// This structure stores only one instance of the reference.
+var RefSet = (function RefSetClosure() {
+  function RefSet() {
+    this.dict = {};
+  }
+
+  RefSet.prototype = {
+    has: function RefSet_has(ref) {
+      return ref.toString() in this.dict;
+    },
+
+    put: function RefSet_put(ref) {
+      this.dict[ref.toString()] = true;
+    },
+
+    remove: function RefSet_remove(ref) {
+      delete this.dict[ref.toString()];
+    }
+  };
+
+  return RefSet;
+})();
+
+var RefSetCache = (function RefSetCacheClosure() {
+  function RefSetCache() {
+    this.dict = Object.create(null);
+  }
+
+  RefSetCache.prototype = {
+    get: function RefSetCache_get(ref) {
+      return this.dict[ref.toString()];
+    },
+
+    has: function RefSetCache_has(ref) {
+      return ref.toString() in this.dict;
+    },
+
+    put: function RefSetCache_put(ref, obj) {
+      this.dict[ref.toString()] = obj;
+    },
+
+    putAlias: function RefSetCache_putAlias(ref, aliasRef) {
+      this.dict[ref.toString()] = this.get(aliasRef);
+    },
+
+    forEach: function RefSetCache_forEach(fn, thisArg) {
+      for (var i in this.dict) {
+        fn.call(thisArg, this.dict[i]);
+      }
+    },
+
+    clear: function RefSetCache_clear() {
+      this.dict = Object.create(null);
+    }
+  };
+
+  return RefSetCache;
+})();
+
+var Catalog = (function CatalogClosure() {
+  function Catalog(pdfManager, xref) {
+    this.pdfManager = pdfManager;
+    this.xref = xref;
+    this.catDict = xref.getCatalogObj();
+    this.fontCache = new RefSetCache();
+    assert(isDict(this.catDict),
+      'catalog object is not a dictionary');
+
+    this.pagePromises = [];
+  }
+
+  Catalog.prototype = {
+    get metadata() {
+      var streamRef = this.catDict.getRaw('Metadata');
+      if (!isRef(streamRef)) {
+        return shadow(this, 'metadata', null);
+      }
+
+      var encryptMetadata = (!this.xref.encrypt ? false :
+                             this.xref.encrypt.encryptMetadata);
+
+      var stream = this.xref.fetch(streamRef, !encryptMetadata);
+      var metadata;
+      if (stream && isDict(stream.dict)) {
+        var type = stream.dict.get('Type');
+        var subtype = stream.dict.get('Subtype');
+
+        if (isName(type) && isName(subtype) &&
+            type.name === 'Metadata' && subtype.name === 'XML') {
+          // XXX: This should examine the charset the XML document defines,
+          // however since there are currently no real means to decode
+          // arbitrary charsets, let's just hope that the author of the PDF
+          // was reasonable enough to stick with the XML default charset,
+          // which is UTF-8.
+          try {
+            metadata = stringToUTF8String(bytesToString(stream.getBytes()));
+          } catch (e) {
+            info('Skipping invalid metadata.');
+          }
+        }
+      }
+
+      return shadow(this, 'metadata', metadata);
+    },
+    get toplevelPagesDict() {
+      var pagesObj = this.catDict.get('Pages');
+      assert(isDict(pagesObj), 'invalid top-level pages dictionary');
+      // shadow the prototype getter
+      return shadow(this, 'toplevelPagesDict', pagesObj);
+    },
+    get documentOutline() {
+      var obj = null;
+      try {
+        obj = this.readDocumentOutline();
+      } catch (ex) {
+        if (ex instanceof MissingDataException) {
+          throw ex;
+        }
+        warn('Unable to read document outline');
+      }
+      return shadow(this, 'documentOutline', obj);
+    },
+    readDocumentOutline: function Catalog_readDocumentOutline() {
+      var xref = this.xref;
+      var obj = this.catDict.get('Outlines');
+      var root = { items: [] };
+      if (isDict(obj)) {
+        obj = obj.getRaw('First');
+        var processed = new RefSet();
+        if (isRef(obj)) {
+          var queue = [{obj: obj, parent: root}];
+          // to avoid recursion keeping track of the items
+          // in the processed dictionary
+          processed.put(obj);
+          while (queue.length > 0) {
+            var i = queue.shift();
+            var outlineDict = xref.fetchIfRef(i.obj);
+            if (outlineDict === null) {
+              continue;
+            }
+            if (!outlineDict.has('Title')) {
+              error('Invalid outline item');
+            }
+            var dest = outlineDict.get('A');
+            if (dest) {
+              dest = dest.get('D');
+            } else if (outlineDict.has('Dest')) {
+              dest = outlineDict.getRaw('Dest');
+              if (isName(dest)) {
+                dest = dest.name;
+              }
+            }
+            var title = outlineDict.get('Title');
+            var outlineItem = {
+              dest: dest,
+              title: stringToPDFString(title),
+              color: outlineDict.get('C') || [0, 0, 0],
+              count: outlineDict.get('Count'),
+              bold: !!(outlineDict.get('F') & 2),
+              italic: !!(outlineDict.get('F') & 1),
+              items: []
+            };
+            i.parent.items.push(outlineItem);
+            obj = outlineDict.getRaw('First');
+            if (isRef(obj) && !processed.has(obj)) {
+              queue.push({obj: obj, parent: outlineItem});
+              processed.put(obj);
+            }
+            obj = outlineDict.getRaw('Next');
+            if (isRef(obj) && !processed.has(obj)) {
+              queue.push({obj: obj, parent: i.parent});
+              processed.put(obj);
+            }
+          }
+        }
+      }
+      return (root.items.length > 0 ? root.items : null);
+    },
+    get numPages() {
+      var obj = this.toplevelPagesDict.get('Count');
+      assert(
+        isInt(obj),
+        'page count in top level pages object is not an integer'
+      );
+      // shadow the prototype getter
+      return shadow(this, 'num', obj);
+    },
+    get destinations() {
+      function fetchDestination(dest) {
+        return isDict(dest) ? dest.get('D') : dest;
+      }
+
+      var xref = this.xref;
+      var dests = {}, nameTreeRef, nameDictionaryRef;
+      var obj = this.catDict.get('Names');
+      if (obj && obj.has('Dests')) {
+        nameTreeRef = obj.getRaw('Dests');
+      } else if (this.catDict.has('Dests')) {
+        nameDictionaryRef = this.catDict.get('Dests');
+      }
+
+      if (nameDictionaryRef) {
+        // reading simple destination dictionary
+        obj = nameDictionaryRef;
+        obj.forEach(function catalogForEach(key, value) {
+          if (!value) {
+            return;
+          }
+          dests[key] = fetchDestination(value);
+        });
+      }
+      if (nameTreeRef) {
+        var nameTree = new NameTree(nameTreeRef, xref);
+        var names = nameTree.getAll();
+        for (var name in names) {
+          if (!names.hasOwnProperty(name)) {
+            continue;
+          }
+          dests[name] = fetchDestination(names[name]);
+        }
+      }
+      return shadow(this, 'destinations', dests);
+    },
+    getDestination: function Catalog_getDestination(destinationId) {
+      function fetchDestination(dest) {
+        return isDict(dest) ? dest.get('D') : dest;
+      }
+
+      var xref = this.xref;
+      var dest, nameTreeRef, nameDictionaryRef;
+      var obj = this.catDict.get('Names');
+      if (obj && obj.has('Dests')) {
+        nameTreeRef = obj.getRaw('Dests');
+      } else if (this.catDict.has('Dests')) {
+        nameDictionaryRef = this.catDict.get('Dests');
+      }
+
+      if (nameDictionaryRef) {
+        // reading simple destination dictionary
+        obj = nameDictionaryRef;
+        obj.forEach(function catalogForEach(key, value) {
+          if (!value) {
+            return;
+          }
+          if (key === destinationId) {
+            dest = fetchDestination(value);
+          }
+        });
+      }
+      if (nameTreeRef) {
+        var nameTree = new NameTree(nameTreeRef, xref);
+        dest = fetchDestination(nameTree.get(destinationId));
+      }
+      return dest;
+    },
+    get attachments() {
+      var xref = this.xref;
+      var attachments = null, nameTreeRef;
+      var obj = this.catDict.get('Names');
+      if (obj) {
+        nameTreeRef = obj.getRaw('EmbeddedFiles');
+      }
+
+      if (nameTreeRef) {
+        var nameTree = new NameTree(nameTreeRef, xref);
+        var names = nameTree.getAll();
+        for (var name in names) {
+          if (!names.hasOwnProperty(name)) {
+            continue;
+          }
+          var fs = new FileSpec(names[name], xref);
+          if (!attachments) {
+            attachments = {};
+          }
+          attachments[stringToPDFString(name)] = fs.serializable;
+        }
+      }
+      return shadow(this, 'attachments', attachments);
+    },
+    get javaScript() {
+      var xref = this.xref;
+      var obj = this.catDict.get('Names');
+
+      var javaScript = [];
+      if (obj && obj.has('JavaScript')) {
+        var nameTree = new NameTree(obj.getRaw('JavaScript'), xref);
+        var names = nameTree.getAll();
+        for (var name in names) {
+          if (!names.hasOwnProperty(name)) {
+            continue;
+          }
+          // We don't really use the JavaScript right now. This code is
+          // defensive so we don't cause errors on document load.
+          var jsDict = names[name];
+          if (!isDict(jsDict)) {
+            continue;
+          }
+          var type = jsDict.get('S');
+          if (!isName(type) || type.name !== 'JavaScript') {
+            continue;
+          }
+          var js = jsDict.get('JS');
+          if (!isString(js) && !isStream(js)) {
+            continue;
+          }
+          if (isStream(js)) {
+            js = bytesToString(js.getBytes());
+          }
+          javaScript.push(stringToPDFString(js));
+        }
+      }
+
+      // Append OpenAction actions to javaScript array
+      var openactionDict = this.catDict.get('OpenAction');
+      if (isDict(openactionDict)) {
+        var objType = openactionDict.get('Type');
+        var actionType = openactionDict.get('S');
+        var action = openactionDict.get('N');
+        var isPrintAction = (isName(objType) && objType.name === 'Action' &&
+                            isName(actionType) && actionType.name === 'Named' &&
+                            isName(action) && action.name === 'Print');
+
+        if (isPrintAction) {
+          javaScript.push('print(true);');
+        }
+      }
+
+      return shadow(this, 'javaScript', javaScript);
+    },
+
+    cleanup: function Catalog_cleanup() {
+      var promises = [];
+      this.fontCache.forEach(function (promise) {
+        promises.push(promise);
+      });
+      return Promise.all(promises).then(function (translatedFonts) {
+        for (var i = 0, ii = translatedFonts.length; i < ii; i++) {
+          var font = translatedFonts[i].dict;
+          delete font.translated;
+        }
+        this.fontCache.clear();
+      }.bind(this));
+    },
+
+    getPage: function Catalog_getPage(pageIndex) {
+      if (!(pageIndex in this.pagePromises)) {
+        this.pagePromises[pageIndex] = this.getPageDict(pageIndex).then(
+          function (a) {
+            var dict = a[0];
+            var ref = a[1];
+            return new Page(this.pdfManager, this.xref, pageIndex, dict, ref,
+                            this.fontCache);
+          }.bind(this)
+        );
+      }
+      return this.pagePromises[pageIndex];
+    },
+
+    getPageDict: function Catalog_getPageDict(pageIndex) {
+      var capability = createPromiseCapability();
+      var nodesToVisit = [this.catDict.getRaw('Pages')];
+      var currentPageIndex = 0;
+      var xref = this.xref;
+      var checkAllKids = false;
+
+      function next() {
+        while (nodesToVisit.length) {
+          var currentNode = nodesToVisit.pop();
+
+          if (isRef(currentNode)) {
+            xref.fetchAsync(currentNode).then(function (obj) {
+              if (isDict(obj, 'Page') || (isDict(obj) && !obj.has('Kids'))) {
+                if (pageIndex === currentPageIndex) {
+                  capability.resolve([obj, currentNode]);
+                } else {
+                  currentPageIndex++;
+                  next();
+                }
+                return;
+              }
+              nodesToVisit.push(obj);
+              next();
+            }, capability.reject);
+            return;
+          }
+
+          // Must be a child page dictionary.
+          assert(
+            isDict(currentNode),
+            'page dictionary kid reference points to wrong type of object'
+          );
+          var count = currentNode.get('Count');
+          // If the current node doesn't have any children, avoid getting stuck
+          // in an empty node further down in the tree (see issue5644.pdf).
+          if (count === 0) {
+            checkAllKids = true;
+          }
+          // Skip nodes where the page can't be.
+          if (currentPageIndex + count <= pageIndex) {
+            currentPageIndex += count;
+            continue;
+          }
+
+          var kids = currentNode.get('Kids');
+          assert(isArray(kids), 'page dictionary kids object is not an array');
+          if (!checkAllKids && count === kids.length) {
+            // Nodes that don't have the page have been skipped and this is the
+            // bottom of the tree which means the page requested must be a
+            // descendant of this pages node. Ideally we would just resolve the
+            // promise with the page ref here, but there is the case where more
+            // pages nodes could link to single a page (see issue 3666 pdf). To
+            // handle this push it back on the queue so if it is a pages node it
+            // will be descended into.
+            nodesToVisit = [kids[pageIndex - currentPageIndex]];
+            currentPageIndex = pageIndex;
+            continue;
+          } else {
+            for (var last = kids.length - 1; last >= 0; last--) {
+              nodesToVisit.push(kids[last]);
+            }
+          }
+        }
+        capability.reject('Page index ' + pageIndex + ' not found.');
+      }
+      next();
+      return capability.promise;
+    },
+
+    getPageIndex: function Catalog_getPageIndex(ref) {
+      // The page tree nodes have the count of all the leaves below them. To get
+      // how many pages are before we just have to walk up the tree and keep
+      // adding the count of siblings to the left of the node.
+      var xref = this.xref;
+      function pagesBeforeRef(kidRef) {
+        var total = 0;
+        var parentRef;
+        return xref.fetchAsync(kidRef).then(function (node) {
+          if (!node) {
+            return null;
+          }
+          parentRef = node.getRaw('Parent');
+          return node.getAsync('Parent');
+        }).then(function (parent) {
+          if (!parent) {
+            return null;
+          }
+          return parent.getAsync('Kids');
+        }).then(function (kids) {
+          if (!kids) {
+            return null;
+          }
+          var kidPromises = [];
+          var found = false;
+          for (var i = 0; i < kids.length; i++) {
+            var kid = kids[i];
+            assert(isRef(kid), 'kids must be a ref');
+            if (kid.num === kidRef.num) {
+              found = true;
+              break;
+            }
+            kidPromises.push(xref.fetchAsync(kid).then(function (kid) {
+              if (kid.has('Count')) {
+                var count = kid.get('Count');
+                total += count;
+              } else { // page leaf node
+                total++;
+              }
+            }));
+          }
+          if (!found) {
+            error('kid ref not found in parents kids');
+          }
+          return Promise.all(kidPromises).then(function () {
+            return [total, parentRef];
+          });
+        });
+      }
+
+      var total = 0;
+      function next(ref) {
+        return pagesBeforeRef(ref).then(function (args) {
+          if (!args) {
+            return total;
+          }
+          var count = args[0];
+          var parentRef = args[1];
+          total += count;
+          return next(parentRef);
+        });
+      }
+
+      return next(ref);
+    }
+  };
+
+  return Catalog;
+})();
+
+var XRef = (function XRefClosure() {
+  function XRef(stream, password) {
+    this.stream = stream;
+    this.entries = [];
+    this.xrefstms = {};
+    // prepare the XRef cache
+    this.cache = [];
+    this.password = password;
+    this.stats = {
+      streamTypes: [],
+      fontTypes: []
+    };
+  }
+
+  XRef.prototype = {
+    setStartXRef: function XRef_setStartXRef(startXRef) {
+      // Store the starting positions of xref tables as we process them
+      // so we can recover from missing data errors
+      this.startXRefQueue = [startXRef];
+    },
+
+    parse: function XRef_parse(recoveryMode) {
+      var trailerDict;
+      if (!recoveryMode) {
+        trailerDict = this.readXRef();
+      } else {
+        warn('Indexing all PDF objects');
+        trailerDict = this.indexObjects();
+      }
+      trailerDict.assignXref(this);
+      this.trailer = trailerDict;
+      var encrypt = trailerDict.get('Encrypt');
+      if (encrypt) {
+        var ids = trailerDict.get('ID');
+        var fileId = (ids && ids.length) ? ids[0] : '';
+        this.encrypt = new CipherTransformFactory(encrypt, fileId,
+                                                  this.password);
+      }
+
+      // get the root dictionary (catalog) object
+      if (!(this.root = trailerDict.get('Root'))) {
+        error('Invalid root reference');
+      }
+    },
+
+    processXRefTable: function XRef_processXRefTable(parser) {
+      if (!('tableState' in this)) {
+        // Stores state of the table as we process it so we can resume
+        // from middle of table in case of missing data error
+        this.tableState = {
+          entryNum: 0,
+          streamPos: parser.lexer.stream.pos,
+          parserBuf1: parser.buf1,
+          parserBuf2: parser.buf2
+        };
+      }
+
+      var obj = this.readXRefTable(parser);
+
+      // Sanity check
+      if (!isCmd(obj, 'trailer')) {
+        error('Invalid XRef table: could not find trailer dictionary');
+      }
+      // Read trailer dictionary, e.g.
+      // trailer
+      //    << /Size 22
+      //      /Root 20R
+      //      /Info 10R
+      //      /ID [ <81b14aafa313db63dbd6f981e49f94f4> ]
+      //    >>
+      // The parser goes through the entire stream << ... >> and provides
+      // a getter interface for the key-value table
+      var dict = parser.getObj();
+
+      // The pdflib PDF generator can generate a nested trailer dictionary
+      if (!isDict(dict) && dict.dict) {
+        dict = dict.dict;
+      }
+      if (!isDict(dict)) {
+        error('Invalid XRef table: could not parse trailer dictionary');
+      }
+      delete this.tableState;
+
+      return dict;
+    },
+
+    readXRefTable: function XRef_readXRefTable(parser) {
+      // Example of cross-reference table:
+      // xref
+      // 0 1                    <-- subsection header (first obj #, obj count)
+      // 0000000000 65535 f     <-- actual object (offset, generation #, f/n)
+      // 23 2                   <-- subsection header ... and so on ...
+      // 0000025518 00002 n
+      // 0000025635 00000 n
+      // trailer
+      // ...
+
+      var stream = parser.lexer.stream;
+      var tableState = this.tableState;
+      stream.pos = tableState.streamPos;
+      parser.buf1 = tableState.parserBuf1;
+      parser.buf2 = tableState.parserBuf2;
+
+      // Outer loop is over subsection headers
+      var obj;
+
+      while (true) {
+        if (!('firstEntryNum' in tableState) || !('entryCount' in tableState)) {
+          if (isCmd(obj = parser.getObj(), 'trailer')) {
+            break;
+          }
+          tableState.firstEntryNum = obj;
+          tableState.entryCount = parser.getObj();
+        }
+
+        var first = tableState.firstEntryNum;
+        var count = tableState.entryCount;
+        if (!isInt(first) || !isInt(count)) {
+          error('Invalid XRef table: wrong types in subsection header');
+        }
+        // Inner loop is over objects themselves
+        for (var i = tableState.entryNum; i < count; i++) {
+          tableState.streamPos = stream.pos;
+          tableState.entryNum = i;
+          tableState.parserBuf1 = parser.buf1;
+          tableState.parserBuf2 = parser.buf2;
+
+          var entry = {};
+          entry.offset = parser.getObj();
+          entry.gen = parser.getObj();
+          var type = parser.getObj();
+
+          if (isCmd(type, 'f')) {
+            entry.free = true;
+          } else if (isCmd(type, 'n')) {
+            entry.uncompressed = true;
+          }
+
+          // Validate entry obj
+          if (!isInt(entry.offset) || !isInt(entry.gen) ||
+              !(entry.free || entry.uncompressed)) {
+            error('Invalid entry in XRef subsection: ' + first + ', ' + count);
+          }
+
+          if (!this.entries[i + first]) {
+            this.entries[i + first] = entry;
+          }
+        }
+
+        tableState.entryNum = 0;
+        tableState.streamPos = stream.pos;
+        tableState.parserBuf1 = parser.buf1;
+        tableState.parserBuf2 = parser.buf2;
+        delete tableState.firstEntryNum;
+        delete tableState.entryCount;
+      }
+
+      // Per issue 3248: hp scanners generate bad XRef
+      if (first === 1 && this.entries[1] && this.entries[1].free) {
+        // shifting the entries
+        this.entries.shift();
+      }
+
+      // Sanity check: as per spec, first object must be free
+      if (this.entries[0] && !this.entries[0].free) {
+        error('Invalid XRef table: unexpected first object');
+      }
+      return obj;
+    },
+
+    processXRefStream: function XRef_processXRefStream(stream) {
+      if (!('streamState' in this)) {
+        // Stores state of the stream as we process it so we can resume
+        // from middle of stream in case of missing data error
+        var streamParameters = stream.dict;
+        var byteWidths = streamParameters.get('W');
+        var range = streamParameters.get('Index');
+        if (!range) {
+          range = [0, streamParameters.get('Size')];
+        }
+
+        this.streamState = {
+          entryRanges: range,
+          byteWidths: byteWidths,
+          entryNum: 0,
+          streamPos: stream.pos
+        };
+      }
+      this.readXRefStream(stream);
+      delete this.streamState;
+
+      return stream.dict;
+    },
+
+    readXRefStream: function XRef_readXRefStream(stream) {
+      var i, j;
+      var streamState = this.streamState;
+      stream.pos = streamState.streamPos;
+
+      var byteWidths = streamState.byteWidths;
+      var typeFieldWidth = byteWidths[0];
+      var offsetFieldWidth = byteWidths[1];
+      var generationFieldWidth = byteWidths[2];
+
+      var entryRanges = streamState.entryRanges;
+      while (entryRanges.length > 0) {
+        var first = entryRanges[0];
+        var n = entryRanges[1];
+
+        if (!isInt(first) || !isInt(n)) {
+          error('Invalid XRef range fields: ' + first + ', ' + n);
+        }
+        if (!isInt(typeFieldWidth) || !isInt(offsetFieldWidth) ||
+            !isInt(generationFieldWidth)) {
+          error('Invalid XRef entry fields length: ' + first + ', ' + n);
+        }
+        for (i = streamState.entryNum; i < n; ++i) {
+          streamState.entryNum = i;
+          streamState.streamPos = stream.pos;
+
+          var type = 0, offset = 0, generation = 0;
+          for (j = 0; j < typeFieldWidth; ++j) {
+            type = (type << 8) | stream.getByte();
+          }
+          // if type field is absent, its default value is 1
+          if (typeFieldWidth === 0) {
+            type = 1;
+          }
+          for (j = 0; j < offsetFieldWidth; ++j) {
+            offset = (offset << 8) | stream.getByte();
+          }
+          for (j = 0; j < generationFieldWidth; ++j) {
+            generation = (generation << 8) | stream.getByte();
+          }
+          var entry = {};
+          entry.offset = offset;
+          entry.gen = generation;
+          switch (type) {
+            case 0:
+              entry.free = true;
+              break;
+            case 1:
+              entry.uncompressed = true;
+              break;
+            case 2:
+              break;
+            default:
+              error('Invalid XRef entry type: ' + type);
+          }
+          if (!this.entries[first + i]) {
+            this.entries[first + i] = entry;
+          }
+        }
+
+        streamState.entryNum = 0;
+        streamState.streamPos = stream.pos;
+        entryRanges.splice(0, 2);
+      }
+    },
+
+    indexObjects: function XRef_indexObjects() {
+      // Simple scan through the PDF content to find objects,
+      // trailers and XRef streams.
+      function readToken(data, offset) {
+        var token = '', ch = data[offset];
+        while (ch !== 13 && ch !== 10) {
+          if (++offset >= data.length) {
+            break;
+          }
+          token += String.fromCharCode(ch);
+          ch = data[offset];
+        }
+        return token;
+      }
+      function skipUntil(data, offset, what) {
+        var length = what.length, dataLength = data.length;
+        var skipped = 0;
+        // finding byte sequence
+        while (offset < dataLength) {
+          var i = 0;
+          while (i < length && data[offset + i] === what[i]) {
+            ++i;
+          }
+          if (i >= length) {
+            break; // sequence found
+          }
+          offset++;
+          skipped++;
+        }
+        return skipped;
+      }
+      var trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]);
+      var startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114,
+                                          101, 102]);
+      var endobjBytes = new Uint8Array([101, 110, 100, 111, 98, 106]);
+      var xrefBytes = new Uint8Array([47, 88, 82, 101, 102]);
+
+      var stream = this.stream;
+      stream.pos = 0;
+      var buffer = stream.getBytes();
+      var position = stream.start, length = buffer.length;
+      var trailers = [], xrefStms = [];
+      while (position < length) {
+        var ch = buffer[position];
+        if (ch === 32 || ch === 9 || ch === 13 || ch === 10) {
+          ++position;
+          continue;
+        }
+        if (ch === 37) { // %-comment
+          do {
+            ++position;
+            if (position >= length) {
+              break;
+            }
+            ch = buffer[position];
+          } while (ch !== 13 && ch !== 10);
+          continue;
+        }
+        var token = readToken(buffer, position);
+        var m;
+        if (token === 'xref') {
+          position += skipUntil(buffer, position, trailerBytes);
+          trailers.push(position);
+          position += skipUntil(buffer, position, startxrefBytes);
+        } else if ((m = /^(\d+)\s+(\d+)\s+obj\b/.exec(token))) {
+          if (typeof this.entries[m[1]] === 'undefined') {
+            this.entries[m[1]] = {
+              offset: position,
+              gen: m[2] | 0,
+              uncompressed: true
+            };
+          }
+          var contentLength = skipUntil(buffer, position, endobjBytes) + 7;
+          var content = buffer.subarray(position, position + contentLength);
+
+          // checking XRef stream suspect
+          // (it shall have '/XRef' and next char is not a letter)
+          var xrefTagOffset = skipUntil(content, 0, xrefBytes);
+          if (xrefTagOffset < contentLength &&
+              content[xrefTagOffset + 5] < 64) {
+            xrefStms.push(position);
+            this.xrefstms[position] = 1; // don't read it recursively
+          }
+
+          position += contentLength;
+        } else {
+          position += token.length + 1;
+        }
+      }
+      // reading XRef streams
+      var i, ii;
+      for (i = 0, ii = xrefStms.length; i < ii; ++i) {
+        this.startXRefQueue.push(xrefStms[i]);
+        this.readXRef(/* recoveryMode */ true);
+      }
+      // finding main trailer
+      var dict;
+      for (i = 0, ii = trailers.length; i < ii; ++i) {
+        stream.pos = trailers[i];
+        var parser = new Parser(new Lexer(stream), true, this);
+        var obj = parser.getObj();
+        if (!isCmd(obj, 'trailer')) {
+          continue;
+        }
+        // read the trailer dictionary
+        if (!isDict(dict = parser.getObj())) {
+          continue;
+        }
+        // taking the first one with 'ID'
+        if (dict.has('ID')) {
+          return dict;
+        }
+      }
+      // no tailer with 'ID', taking last one (if exists)
+      if (dict) {
+        return dict;
+      }
+      // nothing helps
+      // calling error() would reject worker with an UnknownErrorException.
+      throw new InvalidPDFException('Invalid PDF structure');
+    },
+
+    readXRef: function XRef_readXRef(recoveryMode) {
+      var stream = this.stream;
+
+      try {
+        while (this.startXRefQueue.length) {
+          var startXRef = this.startXRefQueue[0];
+
+          stream.pos = startXRef + stream.start;
+
+          var parser = new Parser(new Lexer(stream), true, this);
+          var obj = parser.getObj();
+          var dict;
+
+          // Get dictionary
+          if (isCmd(obj, 'xref')) {
+            // Parse end-of-file XRef
+            dict = this.processXRefTable(parser);
+            if (!this.topDict) {
+              this.topDict = dict;
+            }
+
+            // Recursively get other XRefs 'XRefStm', if any
+            obj = dict.get('XRefStm');
+            if (isInt(obj)) {
+              var pos = obj;
+              // ignore previously loaded xref streams
+              // (possible infinite recursion)
+              if (!(pos in this.xrefstms)) {
+                this.xrefstms[pos] = 1;
+                this.startXRefQueue.push(pos);
+              }
+            }
+          } else if (isInt(obj)) {
+            // Parse in-stream XRef
+            if (!isInt(parser.getObj()) ||
+                !isCmd(parser.getObj(), 'obj') ||
+                !isStream(obj = parser.getObj())) {
+              error('Invalid XRef stream');
+            }
+            dict = this.processXRefStream(obj);
+            if (!this.topDict) {
+              this.topDict = dict;
+            }
+            if (!dict) {
+              error('Failed to read XRef stream');
+            }
+          } else {
+            error('Invalid XRef stream header');
+          }
+
+          // Recursively get previous dictionary, if any
+          obj = dict.get('Prev');
+          if (isInt(obj)) {
+            this.startXRefQueue.push(obj);
+          } else if (isRef(obj)) {
+            // The spec says Prev must not be a reference, i.e. "/Prev NNN"
+            // This is a fallback for non-compliant PDFs, i.e. "/Prev NNN 0 R"
+            this.startXRefQueue.push(obj.num);
+          }
+
+          this.startXRefQueue.shift();
+        }
+
+        return this.topDict;
+      } catch (e) {
+        if (e instanceof MissingDataException) {
+          throw e;
+        }
+        info('(while reading XRef): ' + e);
+      }
+
+      if (recoveryMode) {
+        return;
+      }
+      throw new XRefParseException();
+    },
+
+    getEntry: function XRef_getEntry(i) {
+      var xrefEntry = this.entries[i];
+      if (xrefEntry && !xrefEntry.free && xrefEntry.offset) {
+        return xrefEntry;
+      }
+      return null;
+    },
+
+    fetchIfRef: function XRef_fetchIfRef(obj) {
+      if (!isRef(obj)) {
+        return obj;
+      }
+      return this.fetch(obj);
+    },
+
+    fetch: function XRef_fetch(ref, suppressEncryption) {
+      assert(isRef(ref), 'ref object is not a reference');
+      var num = ref.num;
+      if (num in this.cache) {
+        var cacheEntry = this.cache[num];
+        return cacheEntry;
+      }
+
+      var xrefEntry = this.getEntry(num);
+
+      // the referenced entry can be free
+      if (xrefEntry === null) {
+        return (this.cache[num] = null);
+      }
+
+      if (xrefEntry.uncompressed) {
+        xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption);
+      } else {
+        xrefEntry = this.fetchCompressed(xrefEntry, suppressEncryption);
+      }
+      if (isDict(xrefEntry)){
+        xrefEntry.objId = ref.toString();
+      } else if (isStream(xrefEntry)) {
+        xrefEntry.dict.objId = ref.toString();
+      }
+      return xrefEntry;
+    },
+
+    fetchUncompressed: function XRef_fetchUncompressed(ref, xrefEntry,
+                                                       suppressEncryption) {
+      var gen = ref.gen;
+      var num = ref.num;
+      if (xrefEntry.gen !== gen) {
+        error('inconsistent generation in XRef');
+      }
+      var stream = this.stream.makeSubStream(xrefEntry.offset +
+                                             this.stream.start);
+      var parser = new Parser(new Lexer(stream), true, this);
+      var obj1 = parser.getObj();
+      var obj2 = parser.getObj();
+      var obj3 = parser.getObj();
+      if (!isInt(obj1) || parseInt(obj1, 10) !== num ||
+          !isInt(obj2) || parseInt(obj2, 10) !== gen ||
+          !isCmd(obj3)) {
+        error('bad XRef entry');
+      }
+      if (!isCmd(obj3, 'obj')) {
+        // some bad PDFs use "obj1234" and really mean 1234
+        if (obj3.cmd.indexOf('obj') === 0) {
+          num = parseInt(obj3.cmd.substring(3), 10);
+          if (!isNaN(num)) {
+            return num;
+          }
+        }
+        error('bad XRef entry');
+      }
+      if (this.encrypt && !suppressEncryption) {
+        xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen));
+      } else {
+        xrefEntry = parser.getObj();
+      }
+      if (!isStream(xrefEntry)) {
+        this.cache[num] = xrefEntry;
+      }
+      return xrefEntry;
+    },
+
+    fetchCompressed: function XRef_fetchCompressed(xrefEntry,
+                                                   suppressEncryption) {
+      var tableOffset = xrefEntry.offset;
+      var stream = this.fetch(new Ref(tableOffset, 0));
+      if (!isStream(stream)) {
+        error('bad ObjStm stream');
+      }
+      var first = stream.dict.get('First');
+      var n = stream.dict.get('N');
+      if (!isInt(first) || !isInt(n)) {
+        error('invalid first and n parameters for ObjStm stream');
+      }
+      var parser = new Parser(new Lexer(stream), false, this);
+      parser.allowStreams = true;
+      var i, entries = [], num, nums = [];
+      // read the object numbers to populate cache
+      for (i = 0; i < n; ++i) {
+        num = parser.getObj();
+        if (!isInt(num)) {
+          error('invalid object number in the ObjStm stream: ' + num);
+        }
+        nums.push(num);
+        var offset = parser.getObj();
+        if (!isInt(offset)) {
+          error('invalid object offset in the ObjStm stream: ' + offset);
+        }
+      }
+      // read stream objects for cache
+      for (i = 0; i < n; ++i) {
+        entries.push(parser.getObj());
+        num = nums[i];
+        var entry = this.entries[num];
+        if (entry && entry.offset === tableOffset && entry.gen === i) {
+          this.cache[num] = entries[i];
+        }
+      }
+      xrefEntry = entries[xrefEntry.gen];
+      if (xrefEntry === undefined) {
+        error('bad XRef entry for compressed object');
+      }
+      return xrefEntry;
+    },
+
+    fetchIfRefAsync: function XRef_fetchIfRefAsync(obj) {
+      if (!isRef(obj)) {
+        return Promise.resolve(obj);
+      }
+      return this.fetchAsync(obj);
+    },
+
+    fetchAsync: function XRef_fetchAsync(ref, suppressEncryption) {
+      var streamManager = this.stream.manager;
+      var xref = this;
+      return new Promise(function tryFetch(resolve, reject) {
+        try {
+          resolve(xref.fetch(ref, suppressEncryption));
+        } catch (e) {
+          if (e instanceof MissingDataException) {
+            streamManager.requestRange(e.begin, e.end, function () {
+              tryFetch(resolve, reject);
+            });
+            return;
+          }
+          reject(e);
+        }
+      });
+    },
+
+    getCatalogObj: function XRef_getCatalogObj() {
+      return this.root;
+    }
+  };
+
+  return XRef;
+})();
+
+/**
+ * A NameTree is like a Dict but has some advantageous properties, see the
+ * spec (7.9.6) for more details.
+ * TODO: implement all the Dict functions and make this more efficent.
+ */
+var NameTree = (function NameTreeClosure() {
+  function NameTree(root, xref) {
+    this.root = root;
+    this.xref = xref;
+  }
+
+  NameTree.prototype = {
+    getAll: function NameTree_getAll() {
+      var dict = {};
+      if (!this.root) {
+        return dict;
+      }
+      var xref = this.xref;
+      // reading name tree
+      var processed = new RefSet();
+      processed.put(this.root);
+      var queue = [this.root];
+      while (queue.length > 0) {
+        var i, n;
+        var obj = xref.fetchIfRef(queue.shift());
+        if (!isDict(obj)) {
+          continue;
+        }
+        if (obj.has('Kids')) {
+          var kids = obj.get('Kids');
+          for (i = 0, n = kids.length; i < n; i++) {
+            var kid = kids[i];
+            if (processed.has(kid)) {
+              error('invalid destinations');
+            }
+            queue.push(kid);
+            processed.put(kid);
+          }
+          continue;
+        }
+        var names = obj.get('Names');
+        if (names) {
+          for (i = 0, n = names.length; i < n; i += 2) {
+            dict[names[i]] = xref.fetchIfRef(names[i + 1]);
+          }
+        }
+      }
+      return dict;
+    },
+
+    get: function NameTree_get(destinationId) {
+      if (!this.root) {
+        return null;
+      }
+
+      var xref = this.xref;
+      var kidsOrNames = xref.fetchIfRef(this.root);
+      var loopCount = 0;
+      var MAX_NAMES_LEVELS = 10;
+      var l, r, m;
+
+      // Perform a binary search to quickly find the entry that
+      // contains the named destination we are looking for.
+      while (kidsOrNames.has('Kids')) {
+        loopCount++;
+        if (loopCount > MAX_NAMES_LEVELS) {
+          warn('Search depth limit for named destionations has been reached.');
+          return null;
+        }
+
+        var kids = kidsOrNames.get('Kids');
+        if (!isArray(kids)) {
+          return null;
+        }
+
+        l = 0;
+        r = kids.length - 1;
+        while (l <= r) {
+          m = (l + r) >> 1;
+          var kid = xref.fetchIfRef(kids[m]);
+          var limits = kid.get('Limits');
+
+          if (destinationId < limits[0]) {
+            r = m - 1;
+          } else if (destinationId > limits[1]) {
+            l = m + 1;
+          } else {
+            kidsOrNames = xref.fetchIfRef(kids[m]);
+            break;
+          }
+        }
+        if (l > r) {
+          return null;
+        }
+      }
+
+      // If we get here, then we have found the right entry. Now
+      // go through the named destinations in the Named dictionary
+      // until we find the exact destination we're looking for.
+      var names = kidsOrNames.get('Names');
+      if (isArray(names)) {
+        // Perform a binary search to reduce the lookup time.
+        l = 0;
+        r = names.length - 2;
+        while (l <= r) {
+          // Check only even indices (0, 2, 4, ...) because the
+          // odd indices contain the actual D array.
+          m = (l + r) & ~1;
+          if (destinationId < names[m]) {
+            r = m - 2;
+          } else if (destinationId > names[m]) {
+            l = m + 2;
+          } else {
+            return xref.fetchIfRef(names[m + 1]);
+          }
+        }
+      }
+      return null;
+    }
+  };
+  return NameTree;
+})();
+
+/**
+ * "A PDF file can refer to the contents of another file by using a File
+ * Specification (PDF 1.1)", see the spec (7.11) for more details.
+ * NOTE: Only embedded files are supported (as part of the attachments support)
+ * TODO: support the 'URL' file system (with caching if !/V), portable
+ * collections attributes and related files (/RF)
+ */
+var FileSpec = (function FileSpecClosure() {
+  function FileSpec(root, xref) {
+    if (!root || !isDict(root)) {
+      return;
+    }
+    this.xref = xref;
+    this.root = root;
+    if (root.has('FS')) {
+      this.fs = root.get('FS');
+    }
+    this.description = root.has('Desc') ?
+                         stringToPDFString(root.get('Desc')) :
+                         '';
+    if (root.has('RF')) {
+      warn('Related file specifications are not supported');
+    }
+    this.contentAvailable = true;
+    if (!root.has('EF')) {
+      this.contentAvailable = false;
+      warn('Non-embedded file specifications are not supported');
+    }
+  }
+
+  function pickPlatformItem(dict) {
+    // Look for the filename in this order:
+    // UF, F, Unix, Mac, DOS
+    if (dict.has('UF')) {
+      return dict.get('UF');
+    } else if (dict.has('F')) {
+      return dict.get('F');
+    } else if (dict.has('Unix')) {
+      return dict.get('Unix');
+    } else if (dict.has('Mac')) {
+      return dict.get('Mac');
+    } else if (dict.has('DOS')) {
+      return dict.get('DOS');
+    } else {
+      return null;
+    }
+  }
+
+  FileSpec.prototype = {
+    get filename() {
+      if (!this._filename && this.root) {
+        var filename = pickPlatformItem(this.root) || 'unnamed';
+        this._filename = stringToPDFString(filename).
+          replace(/\\\\/g, '\\').
+          replace(/\\\//g, '/').
+          replace(/\\/g, '/');
+      }
+      return this._filename;
+    },
+    get content() {
+      if (!this.contentAvailable) {
+        return null;
+      }
+      if (!this.contentRef && this.root) {
+        this.contentRef = pickPlatformItem(this.root.get('EF'));
+      }
+      var content = null;
+      if (this.contentRef) {
+        var xref = this.xref;
+        var fileObj = xref.fetchIfRef(this.contentRef);
+        if (fileObj && isStream(fileObj)) {
+          content = fileObj.getBytes();
+        } else {
+          warn('Embedded file specification points to non-existing/invalid ' +
+            'content');
+        }
+      } else {
+        warn('Embedded file specification does not have a content');
+      }
+      return content;
+    },
+    get serializable() {
+      return {
+        filename: this.filename,
+        content: this.content
+      };
+    }
+  };
+  return FileSpec;
+})();
+
+/**
+ * A helper for loading missing data in object graphs. It traverses the graph
+ * depth first and queues up any objects that have missing data. Once it has
+ * has traversed as many objects that are available it attempts to bundle the
+ * missing data requests and then resume from the nodes that weren't ready.
+ *
+ * NOTE: It provides protection from circular references by keeping track of
+ * of loaded references. However, you must be careful not to load any graphs
+ * that have references to the catalog or other pages since that will cause the
+ * entire PDF document object graph to be traversed.
+ */
+var ObjectLoader = (function() {
+  function mayHaveChildren(value) {
+    return isRef(value) || isDict(value) || isArray(value) || isStream(value);
+  }
+
+  function addChildren(node, nodesToVisit) {
+    var value;
+    if (isDict(node) || isStream(node)) {
+      var map;
+      if (isDict(node)) {
+        map = node.map;
+      } else {
+        map = node.dict.map;
+      }
+      for (var key in map) {
+        value = map[key];
+        if (mayHaveChildren(value)) {
+          nodesToVisit.push(value);
+        }
+      }
+    } else if (isArray(node)) {
+      for (var i = 0, ii = node.length; i < ii; i++) {
+        value = node[i];
+        if (mayHaveChildren(value)) {
+          nodesToVisit.push(value);
+        }
+      }
+    }
+  }
+
+  function ObjectLoader(obj, keys, xref) {
+    this.obj = obj;
+    this.keys = keys;
+    this.xref = xref;
+    this.refSet = null;
+  }
+
+  ObjectLoader.prototype = {
+    load: function ObjectLoader_load() {
+      var keys = this.keys;
+      this.capability = createPromiseCapability();
+      // Don't walk the graph if all the data is already loaded.
+      if (!(this.xref.stream instanceof ChunkedStream) ||
+          this.xref.stream.getMissingChunks().length === 0) {
+        this.capability.resolve();
+        return this.capability.promise;
+      }
+
+      this.refSet = new RefSet();
+      // Setup the initial nodes to visit.
+      var nodesToVisit = [];
+      for (var i = 0; i < keys.length; i++) {
+        nodesToVisit.push(this.obj[keys[i]]);
+      }
+
+      this.walk(nodesToVisit);
+      return this.capability.promise;
+    },
+
+    walk: function ObjectLoader_walk(nodesToVisit) {
+      var nodesToRevisit = [];
+      var pendingRequests = [];
+      // DFS walk of the object graph.
+      while (nodesToVisit.length) {
+        var currentNode = nodesToVisit.pop();
+
+        // Only references or chunked streams can cause missing data exceptions.
+        if (isRef(currentNode)) {
+          // Skip nodes that have already been visited.
+          if (this.refSet.has(currentNode)) {
+            continue;
+          }
+          try {
+            var ref = currentNode;
+            this.refSet.put(ref);
+            currentNode = this.xref.fetch(currentNode);
+          } catch (e) {
+            if (!(e instanceof MissingDataException)) {
+              throw e;
+            }
+            nodesToRevisit.push(currentNode);
+            pendingRequests.push({ begin: e.begin, end: e.end });
+          }
+        }
+        if (currentNode && currentNode.getBaseStreams) {
+          var baseStreams = currentNode.getBaseStreams();
+          var foundMissingData = false;
+          for (var i = 0; i < baseStreams.length; i++) {
+            var stream = baseStreams[i];
+            if (stream.getMissingChunks && stream.getMissingChunks().length) {
+              foundMissingData = true;
+              pendingRequests.push({
+                begin: stream.start,
+                end: stream.end
+              });
+            }
+          }
+          if (foundMissingData) {
+            nodesToRevisit.push(currentNode);
+          }
+        }
+
+        addChildren(currentNode, nodesToVisit);
+      }
+
+      if (pendingRequests.length) {
+        this.xref.stream.manager.requestRanges(pendingRequests,
+            function pendingRequestCallback() {
+          nodesToVisit = nodesToRevisit;
+          for (var i = 0; i < nodesToRevisit.length; i++) {
+            var node = nodesToRevisit[i];
+            // Remove any reference nodes from the currrent refset so they
+            // aren't skipped when we revist them.
+            if (isRef(node)) {
+              this.refSet.remove(node);
+            }
+          }
+          this.walk(nodesToVisit);
+        }.bind(this));
+        return;
+      }
+      // Everything is loaded.
+      this.refSet = null;
+      this.capability.resolve();
+    }
+  };
+
+  return ObjectLoader;
+})();
+
+
+var ISOAdobeCharset = [
+  '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar',
+  'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright',
+  'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero',
+  'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight',
+  'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question',
+  'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+  'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',
+  'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
+  'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+  'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent',
+  'sterling', 'fraction', 'yen', 'florin', 'section', 'currency',
+  'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft',
+  'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl',
+  'periodcentered', 'paragraph', 'bullet', 'quotesinglbase',
+  'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis',
+  'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde',
+  'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla',
+  'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine',
+  'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash',
+  'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu',
+  'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter',
+  'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior',
+  'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright',
+  'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde',
+  'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute',
+  'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex',
+  'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex',
+  'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute',
+  'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla',
+  'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex',
+  'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis',
+  'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis',
+  'ugrave', 'yacute', 'ydieresis', 'zcaron'
+];
+
+var ExpertCharset = [
+  '.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle',
+  'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior',
+  'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma',
+  'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle',
+  'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle',
+  'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle',
+  'colon', 'semicolon', 'commasuperior', 'threequartersemdash',
+  'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior',
+  'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',
+  'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',
+  'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',
+  'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall',
+  'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall',
+  'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall',
+  'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall',
+  'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary',
+  'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle',
+  'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',
+  'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall',
+  'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall',
+  'Cedillasmall', 'onequarter', 'onehalf', 'threequarters',
+  'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths',
+  'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',
+  'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',
+  'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',
+  'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',
+  'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',
+  'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',
+  'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall',
+  'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall',
+  'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall',
+  'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',
+  'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall',
+  'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall',
+  'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',
+  'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall',
+  'Ydieresissmall'
+];
+
+var ExpertSubsetCharset = [
+  '.notdef', 'space', 'dollaroldstyle', 'dollarsuperior',
+  'parenleftsuperior', 'parenrightsuperior', 'twodotenleader',
+  'onedotenleader', 'comma', 'hyphen', 'period', 'fraction',
+  'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',
+  'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle',
+  'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior',
+  'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior',
+  'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',
+  'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',
+  'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',
+  'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted',
+  'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter',
+  'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths',
+  'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',
+  'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',
+  'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',
+  'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',
+  'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',
+  'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',
+  'periodinferior', 'commainferior'
+];
+
+
+var DEFAULT_ICON_SIZE = 22; // px
+var SUPPORTED_TYPES = ['Link', 'Text', 'Widget'];
+
+var Annotation = (function AnnotationClosure() {
+  // 12.5.5: Algorithm: Appearance streams
+  function getTransformMatrix(rect, bbox, matrix) {
+    var bounds = Util.getAxialAlignedBoundingBox(bbox, matrix);
+    var minX = bounds[0];
+    var minY = bounds[1];
+    var maxX = bounds[2];
+    var maxY = bounds[3];
+
+    if (minX === maxX || minY === maxY) {
+      // From real-life file, bbox was [0, 0, 0, 0]. In this case,
+      // just apply the transform for rect
+      return [1, 0, 0, 1, rect[0], rect[1]];
+    }
+
+    var xRatio = (rect[2] - rect[0]) / (maxX - minX);
+    var yRatio = (rect[3] - rect[1]) / (maxY - minY);
+    return [
+      xRatio,
+      0,
+      0,
+      yRatio,
+      rect[0] - minX * xRatio,
+      rect[1] - minY * yRatio
+    ];
+  }
+
+  function getDefaultAppearance(dict) {
+    var appearanceState = dict.get('AP');
+    if (!isDict(appearanceState)) {
+      return;
+    }
+
+    var appearance;
+    var appearances = appearanceState.get('N');
+    if (isDict(appearances)) {
+      var as = dict.get('AS');
+      if (as && appearances.has(as.name)) {
+        appearance = appearances.get(as.name);
+      }
+    } else {
+      appearance = appearances;
+    }
+    return appearance;
+  }
+
+  function Annotation(params) {
+    var dict = params.dict;
+    var data = this.data = {};
+
+    data.subtype = dict.get('Subtype').name;
+    var rect = dict.get('Rect') || [0, 0, 0, 0];
+    data.rect = Util.normalizeRect(rect);
+    data.annotationFlags = dict.get('F');
+
+    var color = dict.get('C');
+    if (!color) {
+      // The PDF spec does not mention how a missing color array is interpreted.
+      // Adobe Reader seems to default to black in this case.
+      data.color = [0, 0, 0];
+    } else if (isArray(color)) {
+      switch (color.length) {
+        case 0:
+          // Empty array denotes transparent border.
+          data.color = null;
+          break;
+        case 1:
+          // TODO: implement DeviceGray
+          break;
+        case 3:
+          data.color = color;
+          break;
+        case 4:
+          // TODO: implement DeviceCMYK
+          break;
+      }
+    }
+
+    // Some types of annotations have border style dict which has more
+    // info than the border array
+    if (dict.has('BS')) {
+      var borderStyle = dict.get('BS');
+      data.borderWidth = borderStyle.has('W') ? borderStyle.get('W') : 1;
+    } else {
+      var borderArray = dict.get('Border') || [0, 0, 1];
+      data.borderWidth = borderArray[2] || 0;
+
+      // TODO: implement proper support for annotations with line dash patterns.
+      var dashArray = borderArray[3];
+      if (data.borderWidth > 0 && dashArray) {
+        if (!isArray(dashArray)) {
+          // Ignore the border if dashArray is not actually an array,
+          // this is consistent with the behaviour in Adobe Reader.
+          data.borderWidth = 0;
+        } else {
+          var dashArrayLength = dashArray.length;
+          if (dashArrayLength > 0) {
+            // According to the PDF specification: the elements in a dashArray
+            // shall be numbers that are nonnegative and not all equal to zero.
+            var isInvalid = false;
+            var numPositive = 0;
+            for (var i = 0; i < dashArrayLength; i++) {
+              var validNumber = (+dashArray[i] >= 0);
+              if (!validNumber) {
+                isInvalid = true;
+                break;
+              } else if (dashArray[i] > 0) {
+                numPositive++;
+              }
+            }
+            if (isInvalid || numPositive === 0) {
+              data.borderWidth = 0;
+            }
+          }
+        }
+      }
+    }
+
+    this.appearance = getDefaultAppearance(dict);
+    data.hasAppearance = !!this.appearance;
+    data.id = params.ref.num;
+  }
+
+  Annotation.prototype = {
+
+    getData: function Annotation_getData() {
+      return this.data;
+    },
+
+    isInvisible: function Annotation_isInvisible() {
+      var data = this.data;
+      if (data && SUPPORTED_TYPES.indexOf(data.subtype) !== -1) {
+        return false;
+      } else {
+        return !!(data &&
+                  data.annotationFlags &&            // Default: not invisible
+                  data.annotationFlags & 0x1);       // Invisible
+      }
+    },
+
+    isViewable: function Annotation_isViewable() {
+      var data = this.data;
+      return !!(!this.isInvisible() &&
+                data &&
+                (!data.annotationFlags ||
+                 !(data.annotationFlags & 0x22)) &&  // Hidden or NoView
+                data.rect);                          // rectangle is necessary
+    },
+
+    isPrintable: function Annotation_isPrintable() {
+      var data = this.data;
+      return !!(!this.isInvisible() &&
+                data &&
+                data.annotationFlags &&              // Default: not printable
+                data.annotationFlags & 0x4 &&        // Print
+                !(data.annotationFlags & 0x2) &&     // Hidden
+                data.rect);                          // rectangle is necessary
+    },
+
+    loadResources: function Annotation_loadResources(keys) {
+      return new Promise(function (resolve, reject) {
+        this.appearance.dict.getAsync('Resources').then(function (resources) {
+          if (!resources) {
+            resolve();
+            return;
+          }
+          var objectLoader = new ObjectLoader(resources.map,
+                                              keys,
+                                              resources.xref);
+          objectLoader.load().then(function() {
+            resolve(resources);
+          }, reject);
+        }, reject);
+      }.bind(this));
+    },
+
+    getOperatorList: function Annotation_getOperatorList(evaluator) {
+
+      if (!this.appearance) {
+        return Promise.resolve(new OperatorList());
+      }
+
+      var data = this.data;
+
+      var appearanceDict = this.appearance.dict;
+      var resourcesPromise = this.loadResources([
+        'ExtGState',
+        'ColorSpace',
+        'Pattern',
+        'Shading',
+        'XObject',
+        'Font'
+        // ProcSet
+        // Properties
+      ]);
+      var bbox = appearanceDict.get('BBox') || [0, 0, 1, 1];
+      var matrix = appearanceDict.get('Matrix') || [1, 0, 0, 1, 0 ,0];
+      var transform = getTransformMatrix(data.rect, bbox, matrix);
+      var self = this;
+
+      return resourcesPromise.then(function(resources) {
+          var opList = new OperatorList();
+          opList.addOp(OPS.beginAnnotation, [data.rect, transform, matrix]);
+          return evaluator.getOperatorList(self.appearance, resources, opList).
+            then(function () {
+              opList.addOp(OPS.endAnnotation, []);
+              self.appearance.reset();
+              return opList;
+            });
+        });
+    }
+  };
+
+  Annotation.getConstructor =
+      function Annotation_getConstructor(subtype, fieldType) {
+
+    if (!subtype) {
+      return;
+    }
+
+    // TODO(mack): Implement FreeText annotations
+    if (subtype === 'Link') {
+      return LinkAnnotation;
+    } else if (subtype === 'Text') {
+      return TextAnnotation;
+    } else if (subtype === 'Widget') {
+      if (!fieldType) {
+        return;
+      }
+
+      if (fieldType === 'Tx') {
+        return TextWidgetAnnotation;
+      } else {
+        return WidgetAnnotation;
+      }
+    } else {
+      return Annotation;
+    }
+  };
+
+  Annotation.fromRef = function Annotation_fromRef(xref, ref) {
+
+    var dict = xref.fetchIfRef(ref);
+    if (!isDict(dict)) {
+      return;
+    }
+
+    var subtype = dict.get('Subtype');
+    subtype = isName(subtype) ? subtype.name : '';
+    if (!subtype) {
+      return;
+    }
+
+    var fieldType = Util.getInheritableProperty(dict, 'FT');
+    fieldType = isName(fieldType) ? fieldType.name : '';
+
+    var Constructor = Annotation.getConstructor(subtype, fieldType);
+    if (!Constructor) {
+      return;
+    }
+
+    var params = {
+      dict: dict,
+      ref: ref,
+    };
+
+    var annotation = new Constructor(params);
+
+    if (annotation.isViewable() || annotation.isPrintable()) {
+      return annotation;
+    } else {
+      if (SUPPORTED_TYPES.indexOf(subtype) === -1) {
+        warn('unimplemented annotation type: ' + subtype);
+      }
+    }
+  };
+
+  Annotation.appendToOperatorList = function Annotation_appendToOperatorList(
+      annotations, opList, pdfManager, partialEvaluator, intent) {
+
+    function reject(e) {
+      annotationsReadyCapability.reject(e);
+    }
+
+    var annotationsReadyCapability = createPromiseCapability();
+
+    var annotationPromises = [];
+    for (var i = 0, n = annotations.length; i < n; ++i) {
+      if (intent === 'display' && annotations[i].isViewable() ||
+          intent === 'print' && annotations[i].isPrintable()) {
+        annotationPromises.push(
+          annotations[i].getOperatorList(partialEvaluator));
+      }
+    }
+    Promise.all(annotationPromises).then(function(datas) {
+      opList.addOp(OPS.beginAnnotations, []);
+      for (var i = 0, n = datas.length; i < n; ++i) {
+        var annotOpList = datas[i];
+        opList.addOpList(annotOpList);
+      }
+      opList.addOp(OPS.endAnnotations, []);
+      annotationsReadyCapability.resolve();
+    }, reject);
+
+    return annotationsReadyCapability.promise;
+  };
+
+  return Annotation;
+})();
+
+var WidgetAnnotation = (function WidgetAnnotationClosure() {
+
+  function WidgetAnnotation(params) {
+    Annotation.call(this, params);
+
+    var dict = params.dict;
+    var data = this.data;
+
+    data.fieldValue = stringToPDFString(
+      Util.getInheritableProperty(dict, 'V') || '');
+    data.alternativeText = stringToPDFString(dict.get('TU') || '');
+    data.defaultAppearance = Util.getInheritableProperty(dict, 'DA') || '';
+    var fieldType = Util.getInheritableProperty(dict, 'FT');
+    data.fieldType = isName(fieldType) ? fieldType.name : '';
+    data.fieldFlags = Util.getInheritableProperty(dict, 'Ff') || 0;
+    this.fieldResources = Util.getInheritableProperty(dict, 'DR') || Dict.empty;
+
+    // Building the full field name by collecting the field and
+    // its ancestors 'T' data and joining them using '.'.
+    var fieldName = [];
+    var namedItem = dict;
+    var ref = params.ref;
+    while (namedItem) {
+      var parent = namedItem.get('Parent');
+      var parentRef = namedItem.getRaw('Parent');
+      var name = namedItem.get('T');
+      if (name) {
+        fieldName.unshift(stringToPDFString(name));
+      } else if (parent && ref) {
+        // The field name is absent, that means more than one field
+        // with the same name may exist. Replacing the empty name
+        // with the '`' plus index in the parent's 'Kids' array.
+        // This is not in the PDF spec but necessary to id the
+        // the input controls.
+        var kids = parent.get('Kids');
+        var j, jj;
+        for (j = 0, jj = kids.length; j < jj; j++) {
+          var kidRef = kids[j];
+          if (kidRef.num === ref.num && kidRef.gen === ref.gen) {
+            break;
+          }
+        }
+        fieldName.unshift('`' + j);
+      }
+      namedItem = parent;
+      ref = parentRef;
+    }
+    data.fullName = fieldName.join('.');
+  }
+
+  var parent = Annotation.prototype;
+  Util.inherit(WidgetAnnotation, Annotation, {
+    isViewable: function WidgetAnnotation_isViewable() {
+      if (this.data.fieldType === 'Sig') {
+        warn('unimplemented annotation type: Widget signature');
+        return false;
+      }
+
+      return parent.isViewable.call(this);
+    }
+  });
+
+  return WidgetAnnotation;
+})();
+
+var TextWidgetAnnotation = (function TextWidgetAnnotationClosure() {
+  function TextWidgetAnnotation(params) {
+    WidgetAnnotation.call(this, params);
+
+    this.data.textAlignment = Util.getInheritableProperty(params.dict, 'Q');
+    this.data.annotationType = AnnotationType.WIDGET;
+    this.data.hasHtml = !this.data.hasAppearance && !!this.data.fieldValue;
+  }
+
+  Util.inherit(TextWidgetAnnotation, WidgetAnnotation, {
+    getOperatorList: function TextWidgetAnnotation_getOperatorList(evaluator) {
+      if (this.appearance) {
+        return Annotation.prototype.getOperatorList.call(this, evaluator);
+      }
+
+      var opList = new OperatorList();
+      var data = this.data;
+
+      // Even if there is an appearance stream, ignore it. This is the
+      // behaviour used by Adobe Reader.
+      if (!data.defaultAppearance) {
+        return Promise.resolve(opList);
+      }
+
+      var stream = new Stream(stringToBytes(data.defaultAppearance));
+      return evaluator.getOperatorList(stream, this.fieldResources, opList).
+        then(function () {
+          return opList;
+        });
+    }
+  });
+
+  return TextWidgetAnnotation;
+})();
+
+var InteractiveAnnotation = (function InteractiveAnnotationClosure() {
+  function InteractiveAnnotation(params) {
+    Annotation.call(this, params);
+
+    this.data.hasHtml = true;
+  }
+
+  Util.inherit(InteractiveAnnotation, Annotation, { });
+
+  return InteractiveAnnotation;
+})();
+
+var TextAnnotation = (function TextAnnotationClosure() {
+  function TextAnnotation(params) {
+    InteractiveAnnotation.call(this, params);
+
+    var dict = params.dict;
+    var data = this.data;
+
+    var content = dict.get('Contents');
+    var title = dict.get('T');
+    data.annotationType = AnnotationType.TEXT;
+    data.content = stringToPDFString(content || '');
+    data.title = stringToPDFString(title || '');
+
+    if (data.hasAppearance) {
+      data.name = 'NoIcon';
+    } else {
+      data.rect[1] = data.rect[3] - DEFAULT_ICON_SIZE;
+      data.rect[2] = data.rect[0] + DEFAULT_ICON_SIZE;
+      data.name = dict.has('Name') ? dict.get('Name').name : 'Note';
+    }
+
+    if (dict.has('C')) {
+      data.hasBgColor = true;
+    }
+  }
+
+  Util.inherit(TextAnnotation, InteractiveAnnotation, { });
+
+  return TextAnnotation;
+})();
+
+var LinkAnnotation = (function LinkAnnotationClosure() {
+  function LinkAnnotation(params) {
+    InteractiveAnnotation.call(this, params);
+
+    var dict = params.dict;
+    var data = this.data;
+    data.annotationType = AnnotationType.LINK;
+
+    var action = dict.get('A');
+    if (action && isDict(action)) {
+      var linkType = action.get('S').name;
+      if (linkType === 'URI') {
+        var url = action.get('URI');
+        if (isName(url)) {
+          // Some bad PDFs do not put parentheses around relative URLs.
+          url = '/' + url.name;
+        } else if (url) {
+          url = addDefaultProtocolToUrl(url);
+        }
+        // TODO: pdf spec mentions urls can be relative to a Base
+        // entry in the dictionary.
+        if (!isValidUrl(url, false)) {
+          url = '';
+        }
+        // According to ISO 32000-1:2008, section 12.6.4.7, 
+        // URI should to be encoded in 7-bit ASCII.
+        // Some bad PDFs may have URIs in UTF-8 encoding, see Bugzilla 1122280.
+        try {
+          data.url = stringToUTF8String(url);
+        } catch (e) {
+          // Fall back to a simple copy.
+          data.url = url;
+        }
+      } else if (linkType === 'GoTo') {
+        data.dest = action.get('D');
+      } else if (linkType === 'GoToR') {
+        var urlDict = action.get('F');
+        if (isDict(urlDict)) {
+          // We assume that the 'url' is a Filspec dictionary
+          // and fetch the url without checking any further
+          url = urlDict.get('F') || '';
+        }
+
+        // TODO: pdf reference says that GoToR
+        // can also have 'NewWindow' attribute
+        if (!isValidUrl(url, false)) {
+          url = '';
+        }
+        data.url = url;
+        data.dest = action.get('D');
+      } else if (linkType === 'Named') {
+        data.action = action.get('N').name;
+      } else {
+        warn('unrecognized link type: ' + linkType);
+      }
+    } else if (dict.has('Dest')) {
+      // simple destination link
+      var dest = dict.get('Dest');
+      data.dest = isName(dest) ? dest.name : dest;
+    }
+  }
+
+  // Lets URLs beginning with 'www.' default to using the 'http://' protocol.
+  function addDefaultProtocolToUrl(url) {
+    if (url && url.indexOf('www.') === 0) {
+      return ('http://' + url);
+    }
+    return url;
+  }
+
+  Util.inherit(LinkAnnotation, InteractiveAnnotation, { });
+
+  return LinkAnnotation;
+})();
+
+
+var PDFFunction = (function PDFFunctionClosure() {
+  var CONSTRUCT_SAMPLED = 0;
+  var CONSTRUCT_INTERPOLATED = 2;
+  var CONSTRUCT_STICHED = 3;
+  var CONSTRUCT_POSTSCRIPT = 4;
+
+  return {
+    getSampleArray: function PDFFunction_getSampleArray(size, outputSize, bps,
+                                                       str) {
+      var i, ii;
+      var length = 1;
+      for (i = 0, ii = size.length; i < ii; i++) {
+        length *= size[i];
+      }
+      length *= outputSize;
+
+      var array = new Array(length);
+      var codeSize = 0;
+      var codeBuf = 0;
+      // 32 is a valid bps so shifting won't work
+      var sampleMul = 1.0 / (Math.pow(2.0, bps) - 1);
+
+      var strBytes = str.getBytes((length * bps + 7) / 8);
+      var strIdx = 0;
+      for (i = 0; i < length; i++) {
+        while (codeSize < bps) {
+          codeBuf <<= 8;
+          codeBuf |= strBytes[strIdx++];
+          codeSize += 8;
+        }
+        codeSize -= bps;
+        array[i] = (codeBuf >> codeSize) * sampleMul;
+        codeBuf &= (1 << codeSize) - 1;
+      }
+      return array;
+    },
+
+    getIR: function PDFFunction_getIR(xref, fn) {
+      var dict = fn.dict;
+      if (!dict) {
+        dict = fn;
+      }
+
+      var types = [this.constructSampled,
+                   null,
+                   this.constructInterpolated,
+                   this.constructStiched,
+                   this.constructPostScript];
+
+      var typeNum = dict.get('FunctionType');
+      var typeFn = types[typeNum];
+      if (!typeFn) {
+        error('Unknown type of function');
+      }
+
+      return typeFn.call(this, fn, dict, xref);
+    },
+
+    fromIR: function PDFFunction_fromIR(IR) {
+      var type = IR[0];
+      switch (type) {
+        case CONSTRUCT_SAMPLED:
+          return this.constructSampledFromIR(IR);
+        case CONSTRUCT_INTERPOLATED:
+          return this.constructInterpolatedFromIR(IR);
+        case CONSTRUCT_STICHED:
+          return this.constructStichedFromIR(IR);
+        //case CONSTRUCT_POSTSCRIPT:
+        default:
+          return this.constructPostScriptFromIR(IR);
+      }
+    },
+
+    parse: function PDFFunction_parse(xref, fn) {
+      var IR = this.getIR(xref, fn);
+      return this.fromIR(IR);
+    },
+
+    parseArray: function PDFFunction_parseArray(xref, fnObj) {
+      if (!isArray(fnObj)) {
+        // not an array -- parsing as regular function
+        return this.parse(xref, fnObj);
+      }
+
+      var fnArray = [];
+      for (var j = 0, jj = fnObj.length; j < jj; j++) {
+        var obj = xref.fetchIfRef(fnObj[j]);
+        fnArray.push(PDFFunction.parse(xref, obj));
+      }
+      return function (src, srcOffset, dest, destOffset) {
+        for (var i = 0, ii = fnArray.length; i < ii; i++) {
+          fnArray[i](src, srcOffset, dest, destOffset + i);
+        }
+      };
+    },
+
+    constructSampled: function PDFFunction_constructSampled(str, dict) {
+      function toMultiArray(arr) {
+        var inputLength = arr.length;
+        var out = [];
+        var index = 0;
+        for (var i = 0; i < inputLength; i += 2) {
+          out[index] = [arr[i], arr[i + 1]];
+          ++index;
+        }
+        return out;
+      }
+      var domain = dict.get('Domain');
+      var range = dict.get('Range');
+
+      if (!domain || !range) {
+        error('No domain or range');
+      }
+
+      var inputSize = domain.length / 2;
+      var outputSize = range.length / 2;
+
+      domain = toMultiArray(domain);
+      range = toMultiArray(range);
+
+      var size = dict.get('Size');
+      var bps = dict.get('BitsPerSample');
+      var order = dict.get('Order') || 1;
+      if (order !== 1) {
+        // No description how cubic spline interpolation works in PDF32000:2008
+        // As in poppler, ignoring order, linear interpolation may work as good
+        info('No support for cubic spline interpolation: ' + order);
+      }
+
+      var encode = dict.get('Encode');
+      if (!encode) {
+        encode = [];
+        for (var i = 0; i < inputSize; ++i) {
+          encode.push(0);
+          encode.push(size[i] - 1);
+        }
+      }
+      encode = toMultiArray(encode);
+
+      var decode = dict.get('Decode');
+      if (!decode) {
+        decode = range;
+      } else {
+        decode = toMultiArray(decode);
+      }
+
+      var samples = this.getSampleArray(size, outputSize, bps, str);
+
+      return [
+        CONSTRUCT_SAMPLED, inputSize, domain, encode, decode, samples, size,
+        outputSize, Math.pow(2, bps) - 1, range
+      ];
+    },
+
+    constructSampledFromIR: function PDFFunction_constructSampledFromIR(IR) {
+      // See chapter 3, page 109 of the PDF reference
+      function interpolate(x, xmin, xmax, ymin, ymax) {
+        return ymin + ((x - xmin) * ((ymax - ymin) / (xmax - xmin)));
+      }
+
+      return function constructSampledFromIRResult(src, srcOffset,
+                                                   dest, destOffset) {
+        // See chapter 3, page 110 of the PDF reference.
+        var m = IR[1];
+        var domain = IR[2];
+        var encode = IR[3];
+        var decode = IR[4];
+        var samples = IR[5];
+        var size = IR[6];
+        var n = IR[7];
+        //var mask = IR[8];
+        var range = IR[9];
+
+        // Building the cube vertices: its part and sample index
+        // http://rjwagner49.com/Mathematics/Interpolation.pdf
+        var cubeVertices = 1 << m;
+        var cubeN = new Float64Array(cubeVertices);
+        var cubeVertex = new Uint32Array(cubeVertices);
+        var i, j;
+        for (j = 0; j < cubeVertices; j++) {
+          cubeN[j] = 1;
+        }
+
+        var k = n, pos = 1;
+        // Map x_i to y_j for 0 <= i < m using the sampled function.
+        for (i = 0; i < m; ++i) {
+          // x_i' = min(max(x_i, Domain_2i), Domain_2i+1)
+          var domain_2i = domain[i][0];
+          var domain_2i_1 = domain[i][1];
+          var xi = Math.min(Math.max(src[srcOffset +i], domain_2i),
+                            domain_2i_1);
+
+          // e_i = Interpolate(x_i', Domain_2i, Domain_2i+1,
+          //                   Encode_2i, Encode_2i+1)
+          var e = interpolate(xi, domain_2i, domain_2i_1,
+                              encode[i][0], encode[i][1]);
+
+          // e_i' = min(max(e_i, 0), Size_i - 1)
+          var size_i = size[i];
+          e = Math.min(Math.max(e, 0), size_i - 1);
+
+          // Adjusting the cube: N and vertex sample index
+          var e0 = e < size_i - 1 ? Math.floor(e) : e - 1; // e1 = e0 + 1;
+          var n0 = e0 + 1 - e; // (e1 - e) / (e1 - e0);
+          var n1 = e - e0; // (e - e0) / (e1 - e0);
+          var offset0 = e0 * k;
+          var offset1 = offset0 + k; // e1 * k
+          for (j = 0; j < cubeVertices; j++) {
+            if (j & pos) {
+              cubeN[j] *= n1;
+              cubeVertex[j] += offset1;
+            } else {
+              cubeN[j] *= n0;
+              cubeVertex[j] += offset0;
+            }
+          }
+
+          k *= size_i;
+          pos <<= 1;
+        }
+
+        for (j = 0; j < n; ++j) {
+          // Sum all cube vertices' samples portions
+          var rj = 0;
+          for (i = 0; i < cubeVertices; i++) {
+            rj += samples[cubeVertex[i] + j] * cubeN[i];
+          }
+
+          // r_j' = Interpolate(r_j, 0, 2^BitsPerSample - 1,
+          //                    Decode_2j, Decode_2j+1)
+          rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]);
+
+          // y_j = min(max(r_j, range_2j), range_2j+1)
+          dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]),
+                                          range[j][1]);
+        }
+      };
+    },
+
+    constructInterpolated: function PDFFunction_constructInterpolated(str,
+                                                                      dict) {
+      var c0 = dict.get('C0') || [0];
+      var c1 = dict.get('C1') || [1];
+      var n = dict.get('N');
+
+      if (!isArray(c0) || !isArray(c1)) {
+        error('Illegal dictionary for interpolated function');
+      }
+
+      var length = c0.length;
+      var diff = [];
+      for (var i = 0; i < length; ++i) {
+        diff.push(c1[i] - c0[i]);
+      }
+
+      return [CONSTRUCT_INTERPOLATED, c0, diff, n];
+    },
+
+    constructInterpolatedFromIR:
+      function PDFFunction_constructInterpolatedFromIR(IR) {
+      var c0 = IR[1];
+      var diff = IR[2];
+      var n = IR[3];
+
+      var length = diff.length;
+
+      return function constructInterpolatedFromIRResult(src, srcOffset,
+                                                        dest, destOffset) {
+        var x = n === 1 ? src[srcOffset] : Math.pow(src[srcOffset], n);
+
+        for (var j = 0; j < length; ++j) {
+          dest[destOffset + j] = c0[j] + (x * diff[j]);
+        }
+      };
+    },
+
+    constructStiched: function PDFFunction_constructStiched(fn, dict, xref) {
+      var domain = dict.get('Domain');
+
+      if (!domain) {
+        error('No domain');
+      }
+
+      var inputSize = domain.length / 2;
+      if (inputSize !== 1) {
+        error('Bad domain for stiched function');
+      }
+
+      var fnRefs = dict.get('Functions');
+      var fns = [];
+      for (var i = 0, ii = fnRefs.length; i < ii; ++i) {
+        fns.push(PDFFunction.getIR(xref, xref.fetchIfRef(fnRefs[i])));
+      }
+
+      var bounds = dict.get('Bounds');
+      var encode = dict.get('Encode');
+
+      return [CONSTRUCT_STICHED, domain, bounds, encode, fns];
+    },
+
+    constructStichedFromIR: function PDFFunction_constructStichedFromIR(IR) {
+      var domain = IR[1];
+      var bounds = IR[2];
+      var encode = IR[3];
+      var fnsIR = IR[4];
+      var fns = [];
+      var tmpBuf = new Float32Array(1);
+
+      for (var i = 0, ii = fnsIR.length; i < ii; i++) {
+        fns.push(PDFFunction.fromIR(fnsIR[i]));
+      }
+
+      return function constructStichedFromIRResult(src, srcOffset,
+                                                   dest, destOffset) {
+        var clip = function constructStichedFromIRClip(v, min, max) {
+          if (v > max) {
+            v = max;
+          } else if (v < min) {
+            v = min;
+          }
+          return v;
+        };
+
+        // clip to domain
+        var v = clip(src[srcOffset], domain[0], domain[1]);
+        // calulate which bound the value is in
+        for (var i = 0, ii = bounds.length; i < ii; ++i) {
+          if (v < bounds[i]) {
+            break;
+          }
+        }
+
+        // encode value into domain of function
+        var dmin = domain[0];
+        if (i > 0) {
+          dmin = bounds[i - 1];
+        }
+        var dmax = domain[1];
+        if (i < bounds.length) {
+          dmax = bounds[i];
+        }
+
+        var rmin = encode[2 * i];
+        var rmax = encode[2 * i + 1];
+
+        tmpBuf[0] = rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin);
+
+        // call the appropriate function
+        fns[i](tmpBuf, 0, dest, destOffset);
+      };
+    },
+
+    constructPostScript: function PDFFunction_constructPostScript(fn, dict,
+                                                                  xref) {
+      var domain = dict.get('Domain');
+      var range = dict.get('Range');
+
+      if (!domain) {
+        error('No domain.');
+      }
+
+      if (!range) {
+        error('No range.');
+      }
+
+      var lexer = new PostScriptLexer(fn);
+      var parser = new PostScriptParser(lexer);
+      var code = parser.parse();
+
+      return [CONSTRUCT_POSTSCRIPT, domain, range, code];
+    },
+
+    constructPostScriptFromIR: function PDFFunction_constructPostScriptFromIR(
+                                          IR) {
+      var domain = IR[1];
+      var range = IR[2];
+      var code = IR[3];
+
+      var compiled = (new PostScriptCompiler()).compile(code, domain, range);
+      if (compiled) {
+        // Compiled function consists of simple expressions such as addition,
+        // subtraction, Math.max, and also contains 'var' and 'return'
+        // statements. See the generation in the PostScriptCompiler below.
+        /*jshint -W054 */
+        return new Function('src', 'srcOffset', 'dest', 'destOffset', compiled);
+      }
+
+      info('Unable to compile PS function');
+
+      var numOutputs = range.length >> 1;
+      var numInputs = domain.length >> 1;
+      var evaluator = new PostScriptEvaluator(code);
+      // Cache the values for a big speed up, the cache size is limited though
+      // since the number of possible values can be huge from a PS function.
+      var cache = {};
+      // The MAX_CACHE_SIZE is set to ~4x the maximum number of distinct values
+      // seen in our tests.
+      var MAX_CACHE_SIZE = 2048 * 4;
+      var cache_available = MAX_CACHE_SIZE;
+      var tmpBuf = new Float32Array(numInputs);
+
+      return function constructPostScriptFromIRResult(src, srcOffset,
+                                                      dest, destOffset) {
+        var i, value;
+        var key = '';
+        var input = tmpBuf;
+        for (i = 0; i < numInputs; i++) {
+          value = src[srcOffset + i];
+          input[i] = value;
+          key += value + '_';
+        }
+
+        var cachedValue = cache[key];
+        if (cachedValue !== undefined) {
+          dest.set(cachedValue, destOffset);
+          return;
+        }
+
+        var output = new Float32Array(numOutputs);
+        var stack = evaluator.execute(input);
+        var stackIndex = stack.length - numOutputs;
+        for (i = 0; i < numOutputs; i++) {
+          value = stack[stackIndex + i];
+          var bound = range[i * 2];
+          if (value < bound) {
+            value = bound;
+          } else {
+            bound = range[i * 2 +1];
+            if (value > bound) {
+              value = bound;
+            }
+          }
+          output[i] = value;
+        }
+        if (cache_available > 0) {
+          cache_available--;
+          cache[key] = output;
+        }
+        dest.set(output, destOffset);
+      };
+    }
+  };
+})();
+
+function isPDFFunction(v) {
+  var fnDict;
+  if (typeof v !== 'object') {
+    return false;
+  } else if (isDict(v)) {
+    fnDict = v;
+  } else if (isStream(v)) {
+    fnDict = v.dict;
+  } else {
+    return false;
+  }
+  return fnDict.has('FunctionType');
+}
+
+var PostScriptStack = (function PostScriptStackClosure() {
+  var MAX_STACK_SIZE = 100;
+  function PostScriptStack(initialStack) {
+    this.stack = !initialStack ? [] :
+                 Array.prototype.slice.call(initialStack, 0);
+  }
+
+  PostScriptStack.prototype = {
+    push: function PostScriptStack_push(value) {
+      if (this.stack.length >= MAX_STACK_SIZE) {
+        error('PostScript function stack overflow.');
+      }
+      this.stack.push(value);
+    },
+    pop: function PostScriptStack_pop() {
+      if (this.stack.length <= 0) {
+        error('PostScript function stack underflow.');
+      }
+      return this.stack.pop();
+    },
+    copy: function PostScriptStack_copy(n) {
+      if (this.stack.length + n >= MAX_STACK_SIZE) {
+        error('PostScript function stack overflow.');
+      }
+      var stack = this.stack;
+      for (var i = stack.length - n, j = n - 1; j >= 0; j--, i++) {
+        stack.push(stack[i]);
+      }
+    },
+    index: function PostScriptStack_index(n) {
+      this.push(this.stack[this.stack.length - n - 1]);
+    },
+    // rotate the last n stack elements p times
+    roll: function PostScriptStack_roll(n, p) {
+      var stack = this.stack;
+      var l = stack.length - n;
+      var r = stack.length - 1, c = l + (p - Math.floor(p / n) * n), i, j, t;
+      for (i = l, j = r; i < j; i++, j--) {
+        t = stack[i]; stack[i] = stack[j]; stack[j] = t;
+      }
+      for (i = l, j = c - 1; i < j; i++, j--) {
+        t = stack[i]; stack[i] = stack[j]; stack[j] = t;
+      }
+      for (i = c, j = r; i < j; i++, j--) {
+        t = stack[i]; stack[i] = stack[j]; stack[j] = t;
+      }
+    }
+  };
+  return PostScriptStack;
+})();
+var PostScriptEvaluator = (function PostScriptEvaluatorClosure() {
+  function PostScriptEvaluator(operators) {
+    this.operators = operators;
+  }
+  PostScriptEvaluator.prototype = {
+    execute: function PostScriptEvaluator_execute(initialStack) {
+      var stack = new PostScriptStack(initialStack);
+      var counter = 0;
+      var operators = this.operators;
+      var length = operators.length;
+      var operator, a, b;
+      while (counter < length) {
+        operator = operators[counter++];
+        if (typeof operator === 'number') {
+          // Operator is really an operand and should be pushed to the stack.
+          stack.push(operator);
+          continue;
+        }
+        switch (operator) {
+          // non standard ps operators
+          case 'jz': // jump if false
+            b = stack.pop();
+            a = stack.pop();
+            if (!a) {
+              counter = b;
+            }
+            break;
+          case 'j': // jump
+            a = stack.pop();
+            counter = a;
+            break;
+
+          // all ps operators in alphabetical order (excluding if/ifelse)
+          case 'abs':
+            a = stack.pop();
+            stack.push(Math.abs(a));
+            break;
+          case 'add':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a + b);
+            break;
+          case 'and':
+            b = stack.pop();
+            a = stack.pop();
+            if (isBool(a) && isBool(b)) {
+              stack.push(a && b);
+            } else {
+              stack.push(a & b);
+            }
+            break;
+          case 'atan':
+            a = stack.pop();
+            stack.push(Math.atan(a));
+            break;
+          case 'bitshift':
+            b = stack.pop();
+            a = stack.pop();
+            if (a > 0) {
+              stack.push(a << b);
+            } else {
+              stack.push(a >> b);
+            }
+            break;
+          case 'ceiling':
+            a = stack.pop();
+            stack.push(Math.ceil(a));
+            break;
+          case 'copy':
+            a = stack.pop();
+            stack.copy(a);
+            break;
+          case 'cos':
+            a = stack.pop();
+            stack.push(Math.cos(a));
+            break;
+          case 'cvi':
+            a = stack.pop() | 0;
+            stack.push(a);
+            break;
+          case 'cvr':
+            // noop
+            break;
+          case 'div':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a / b);
+            break;
+          case 'dup':
+            stack.copy(1);
+            break;
+          case 'eq':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a === b);
+            break;
+          case 'exch':
+            stack.roll(2, 1);
+            break;
+          case 'exp':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(Math.pow(a, b));
+            break;
+          case 'false':
+            stack.push(false);
+            break;
+          case 'floor':
+            a = stack.pop();
+            stack.push(Math.floor(a));
+            break;
+          case 'ge':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a >= b);
+            break;
+          case 'gt':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a > b);
+            break;
+          case 'idiv':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push((a / b) | 0);
+            break;
+          case 'index':
+            a = stack.pop();
+            stack.index(a);
+            break;
+          case 'le':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a <= b);
+            break;
+          case 'ln':
+            a = stack.pop();
+            stack.push(Math.log(a));
+            break;
+          case 'log':
+            a = stack.pop();
+            stack.push(Math.log(a) / Math.LN10);
+            break;
+          case 'lt':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a < b);
+            break;
+          case 'mod':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a % b);
+            break;
+          case 'mul':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a * b);
+            break;
+          case 'ne':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a !== b);
+            break;
+          case 'neg':
+            a = stack.pop();
+            stack.push(-a);
+            break;
+          case 'not':
+            a = stack.pop();
+            if (isBool(a)) {
+              stack.push(!a);
+            } else {
+              stack.push(~a);
+            }
+            break;
+          case 'or':
+            b = stack.pop();
+            a = stack.pop();
+            if (isBool(a) && isBool(b)) {
+              stack.push(a || b);
+            } else {
+              stack.push(a | b);
+            }
+            break;
+          case 'pop':
+            stack.pop();
+            break;
+          case 'roll':
+            b = stack.pop();
+            a = stack.pop();
+            stack.roll(a, b);
+            break;
+          case 'round':
+            a = stack.pop();
+            stack.push(Math.round(a));
+            break;
+          case 'sin':
+            a = stack.pop();
+            stack.push(Math.sin(a));
+            break;
+          case 'sqrt':
+            a = stack.pop();
+            stack.push(Math.sqrt(a));
+            break;
+          case 'sub':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a - b);
+            break;
+          case 'true':
+            stack.push(true);
+            break;
+          case 'truncate':
+            a = stack.pop();
+            a = a < 0 ? Math.ceil(a) : Math.floor(a);
+            stack.push(a);
+            break;
+          case 'xor':
+            b = stack.pop();
+            a = stack.pop();
+            if (isBool(a) && isBool(b)) {
+              stack.push(a !== b);
+            } else {
+              stack.push(a ^ b);
+            }
+            break;
+          default:
+            error('Unknown operator ' + operator);
+            break;
+        }
+      }
+      return stack.stack;
+    }
+  };
+  return PostScriptEvaluator;
+})();
+
+// Most of the PDFs functions consist of simple operations such as:
+//   roll, exch, sub, cvr, pop, index, dup, mul, if, gt, add.
+//
+// We can compile most of such programs, and at the same moment, we can
+// optimize some expressions using basic math properties. Keeping track of
+// min/max values will allow us to avoid extra Math.min/Math.max calls.
+var PostScriptCompiler = (function PostScriptCompilerClosure() {
+  function AstNode(type) {
+    this.type = type;
+  }
+  AstNode.prototype.visit = function (visitor) {
+    throw new Error('abstract method');
+  };
+
+  function AstArgument(index, min, max) {
+    AstNode.call(this, 'args');
+    this.index = index;
+    this.min = min;
+    this.max = max;
+  }
+  AstArgument.prototype = Object.create(AstNode.prototype);
+  AstArgument.prototype.visit = function (visitor) {
+    visitor.visitArgument(this);
+  };
+
+  function AstLiteral(number) {
+    AstNode.call(this, 'literal');
+    this.number = number;
+    this.min = number;
+    this.max = number;
+  }
+  AstLiteral.prototype = Object.create(AstNode.prototype);
+  AstLiteral.prototype.visit = function (visitor) {
+    visitor.visitLiteral(this);
+  };
+
+  function AstBinaryOperation(op, arg1, arg2, min, max) {
+    AstNode.call(this, 'binary');
+    this.op = op;
+    this.arg1 = arg1;
+    this.arg2 = arg2;
+    this.min = min;
+    this.max = max;
+  }
+  AstBinaryOperation.prototype = Object.create(AstNode.prototype);
+  AstBinaryOperation.prototype.visit = function (visitor) {
+    visitor.visitBinaryOperation(this);
+  };
+
+  function AstMin(arg, max) {
+    AstNode.call(this, 'max');
+    this.arg = arg;
+    this.min = arg.min;
+    this.max = max;
+  }
+  AstMin.prototype = Object.create(AstNode.prototype);
+  AstMin.prototype.visit = function (visitor) {
+    visitor.visitMin(this);
+  };
+
+  function AstVariable(index, min, max) {
+    AstNode.call(this, 'var');
+    this.index = index;
+    this.min = min;
+    this.max = max;
+  }
+  AstVariable.prototype = Object.create(AstNode.prototype);
+  AstVariable.prototype.visit = function (visitor) {
+    visitor.visitVariable(this);
+  };
+
+  function AstVariableDefinition(variable, arg) {
+    AstNode.call(this, 'definition');
+    this.variable = variable;
+    this.arg = arg;
+  }
+  AstVariableDefinition.prototype = Object.create(AstNode.prototype);
+  AstVariableDefinition.prototype.visit = function (visitor) {
+    visitor.visitVariableDefinition(this);
+  };
+
+  function ExpressionBuilderVisitor() {
+    this.parts = [];
+  }
+  ExpressionBuilderVisitor.prototype = {
+    visitArgument: function (arg) {
+      this.parts.push('Math.max(', arg.min, ', Math.min(',
+                      arg.max, ', src[srcOffset + ', arg.index, ']))');
+    },
+    visitVariable: function (variable) {
+      this.parts.push('v', variable.index);
+    },
+    visitLiteral: function (literal) {
+      this.parts.push(literal.number);
+    },
+    visitBinaryOperation: function (operation) {
+      this.parts.push('(');
+      operation.arg1.visit(this);
+      this.parts.push(' ', operation.op, ' ');
+      operation.arg2.visit(this);
+      this.parts.push(')');
+    },
+    visitVariableDefinition: function (definition) {
+      this.parts.push('var ');
+      definition.variable.visit(this);
+      this.parts.push(' = ');
+      definition.arg.visit(this);
+      this.parts.push(';');
+    },
+    visitMin: function (max) {
+      this.parts.push('Math.min(');
+      max.arg.visit(this);
+      this.parts.push(', ', max.max, ')');
+    },
+    toString: function () {
+      return this.parts.join('');
+    }
+  };
+
+  function buildAddOperation(num1, num2) {
+    if (num2.type === 'literal' && num2.number === 0) {
+      // optimization: second operand is 0
+      return num1;
+    }
+    if (num1.type === 'literal' && num1.number === 0) {
+      // optimization: first operand is 0
+      return num2;
+    }
+    if (num2.type === 'literal' && num1.type === 'literal') {
+      // optimization: operands operand are literals
+      return new AstLiteral(num1.number + num2.number);
+    }
+    return new AstBinaryOperation('+', num1, num2,
+                                  num1.min + num2.min, num1.max + num2.max);
+  }
+
+  function buildMulOperation(num1, num2) {
+    if (num2.type === 'literal') {
+      // optimization: second operands is a literal...
+      if (num2.number === 0) {
+        return new AstLiteral(0); // and it's 0
+      } else if (num2.number === 1) {
+        return num1; // and it's 1
+      } else if (num1.type === 'literal') {
+        // ... and first operands is a literal too
+        return new AstLiteral(num1.number * num2.number);
+      }
+    }
+    if (num1.type === 'literal') {
+      // optimization: first operands is a literal...
+      if (num1.number === 0) {
+        return new AstLiteral(0); // and it's 0
+      } else if (num1.number === 1) {
+        return num2; // and it's 1
+      }
+    }
+    var min = Math.min(num1.min * num2.min, num1.min * num2.max,
+                       num1.max * num2.min, num1.max * num2.max);
+    var max = Math.max(num1.min * num2.min, num1.min * num2.max,
+                       num1.max * num2.min, num1.max * num2.max);
+    return new AstBinaryOperation('*', num1, num2, min, max);
+  }
+
+  function buildSubOperation(num1, num2) {
+    if (num2.type === 'literal') {
+      // optimization: second operands is a literal...
+      if (num2.number === 0) {
+        return num1; // ... and it's 0
+      } else if (num1.type === 'literal') {
+        // ... and first operands is a literal too
+        return new AstLiteral(num1.number - num2.number);
+      }
+    }
+    if (num2.type === 'binary' && num2.op === '-' &&
+      num1.type === 'literal' && num1.number === 1 &&
+      num2.arg1.type === 'literal' && num2.arg1.number === 1) {
+      // optimization for case: 1 - (1 - x)
+      return num2.arg2;
+    }
+    return new AstBinaryOperation('-', num1, num2,
+                                  num1.min - num2.max, num1.max - num2.min);
+  }
+
+  function buildMinOperation(num1, max) {
+    if (num1.min >= max) {
+      // optimization: num1 min value is not less than required max
+      return new AstLiteral(max); // just returning max
+    } else if (num1.max <= max) {
+      // optimization: num1 max value is not greater than required max
+      return num1; // just returning an argument
+    }
+    return new AstMin(num1, max);
+  }
+
+  function PostScriptCompiler() {}
+  PostScriptCompiler.prototype = {
+    compile: function PostScriptCompiler_compile(code, domain, range) {
+      var stack = [];
+      var i, ii;
+      var instructions = [];
+      var inputSize = domain.length >> 1, outputSize = range.length >> 1;
+      var lastRegister = 0;
+      var n, j, min, max;
+      var num1, num2, ast1, ast2, tmpVar, item;
+      for (i = 0; i < inputSize; i++) {
+        stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1]));
+      }
+
+      for (i = 0, ii = code.length; i < ii; i++) {
+        item = code[i];
+        if (typeof item === 'number') {
+          stack.push(new AstLiteral(item));
+          continue;
+        }
+
+        switch (item) {
+          case 'add':
+            if (stack.length < 2) {
+              return null;
+            }
+            num2 = stack.pop();
+            num1 = stack.pop();
+            stack.push(buildAddOperation(num1, num2));
+            break;
+          case 'cvr':
+            if (stack.length < 1) {
+              return null;
+            }
+            break;
+          case 'mul':
+            if (stack.length < 2) {
+              return null;
+            }
+            num2 = stack.pop();
+            num1 = stack.pop();
+            stack.push(buildMulOperation(num1, num2));
+            break;
+          case 'sub':
+            if (stack.length < 2) {
+              return null;
+            }
+            num2 = stack.pop();
+            num1 = stack.pop();
+            stack.push(buildSubOperation(num1, num2));
+            break;
+          case 'exch':
+            if (stack.length < 2) {
+              return null;
+            }
+            ast1 = stack.pop(); ast2 = stack.pop();
+            stack.push(ast1, ast2);
+            break;
+          case 'pop':
+            if (stack.length < 1) {
+              return null;
+            }
+            stack.pop();
+            break;
+          case 'index':
+            if (stack.length < 1) {
+              return null;
+            }
+            num1 = stack.pop();
+            if (num1.type !== 'literal') {
+              return null;
+            }
+            n = num1.number;
+            if (n < 0 || (n|0) !== n || stack.length < n) {
+              return null;
+            }
+            ast1 = stack[stack.length - n - 1];
+            if (ast1.type === 'literal' || ast1.type === 'var') {
+              stack.push(ast1);
+              break;
+            }
+            tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max);
+            stack[stack.length - n - 1] = tmpVar;
+            stack.push(tmpVar);
+            instructions.push(new AstVariableDefinition(tmpVar, ast1));
+            break;
+          case 'dup':
+            if (stack.length < 1) {
+              return null;
+            }
+            if (typeof code[i + 1] === 'number' && code[i + 2] === 'gt' &&
+                code[i + 3] === i + 7 && code[i + 4] === 'jz' &&
+                code[i + 5] === 'pop' && code[i + 6] === code[i + 1]) {
+              // special case of the commands sequence for the min operation
+              num1 = stack.pop();
+              stack.push(buildMinOperation(num1, code[i + 1]));
+              i += 6;
+              break;
+            }
+            ast1 = stack[stack.length - 1];
+            if (ast1.type === 'literal' || ast1.type === 'var') {
+              // we don't have to save into intermediate variable a literal or
+              // variable.
+              stack.push(ast1);
+              break;
+            }
+            tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max);
+            stack[stack.length - 1] = tmpVar;
+            stack.push(tmpVar);
+            instructions.push(new AstVariableDefinition(tmpVar, ast1));
+            break;
+          case 'roll':
+            if (stack.length < 2) {
+              return null;
+            }
+            num2 = stack.pop();
+            num1 = stack.pop();
+            if (num2.type !== 'literal' || num1.type !== 'literal') {
+              // both roll operands must be numbers
+              return null;
+            }
+            j = num2.number;
+            n = num1.number;
+            if (n <= 0 || (n|0) !== n || (j|0) !== j || stack.length < n) {
+              // ... and integers
+              return null;
+            }
+            j = ((j % n) + n) % n;
+            if (j === 0) {
+              break; // just skipping -- there are nothing to rotate
+            }
+            Array.prototype.push.apply(stack,
+                                       stack.splice(stack.length - n, n - j));
+            break;
+          default:
+            return null; // unsupported operator
+        }
+      }
+
+      if (stack.length !== outputSize) {
+        return null;
+      }
+
+      var result = [];
+      instructions.forEach(function (instruction) {
+        var statementBuilder = new ExpressionBuilderVisitor();
+        instruction.visit(statementBuilder);
+        result.push(statementBuilder.toString());
+      });
+      stack.forEach(function (expr, i) {
+        var statementBuilder = new ExpressionBuilderVisitor();
+        expr.visit(statementBuilder);
+        var min = range[i * 2], max = range[i * 2 + 1];
+        var out = [statementBuilder.toString()];
+        if (min > expr.min) {
+          out.unshift('Math.max(', min, ', ');
+          out.push(')');
+        }
+        if (max < expr.max) {
+          out.unshift('Math.min(', max, ', ');
+          out.push(')');
+        }
+        out.unshift('dest[destOffset + ', i, '] = ');
+        out.push(';');
+        result.push(out.join(''));
+      });
+      return result.join('\n');
+    }
+  };
+
+  return PostScriptCompiler;
+})();
+
+
+var ColorSpace = (function ColorSpaceClosure() {
+  // Constructor should define this.numComps, this.defaultColor, this.name
+  function ColorSpace() {
+    error('should not call ColorSpace constructor');
+  }
+
+  ColorSpace.prototype = {
+    /**
+     * Converts the color value to the RGB color. The color components are
+     * located in the src array starting from the srcOffset. Returns the array
+     * of the rgb components, each value ranging from [0,255].
+     */
+    getRgb: function ColorSpace_getRgb(src, srcOffset) {
+      var rgb = new Uint8Array(3);
+      this.getRgbItem(src, srcOffset, rgb, 0);
+      return rgb;
+    },
+    /**
+     * Converts the color value to the RGB color, similar to the getRgb method.
+     * The result placed into the dest array starting from the destOffset.
+     */
+    getRgbItem: function ColorSpace_getRgbItem(src, srcOffset,
+                                               dest, destOffset) {
+      error('Should not call ColorSpace.getRgbItem');
+    },
+    /**
+     * Converts the specified number of the color values to the RGB colors.
+     * The colors are located in the src array starting from the srcOffset.
+     * The result is placed into the dest array starting from the destOffset.
+     * The src array items shall be in [0,2^bits) range, the dest array items
+     * will be in [0,255] range. alpha01 indicates how many alpha components
+     * there are in the dest array; it will be either 0 (RGB array) or 1 (RGBA
+     * array).
+     */
+    getRgbBuffer: function ColorSpace_getRgbBuffer(src, srcOffset, count,
+                                                   dest, destOffset, bits,
+                                                   alpha01) {
+      error('Should not call ColorSpace.getRgbBuffer');
+    },
+    /**
+     * Determines the number of bytes required to store the result of the
+     * conversion done by the getRgbBuffer method. As in getRgbBuffer,
+     * |alpha01| is either 0 (RGB output) or 1 (RGBA output).
+     */
+    getOutputLength: function ColorSpace_getOutputLength(inputLength,
+                                                         alpha01) {
+      error('Should not call ColorSpace.getOutputLength');
+    },
+    /**
+     * Returns true if source data will be equal the result/output data.
+     */
+    isPassthrough: function ColorSpace_isPassthrough(bits) {
+      return false;
+    },
+    /**
+     * Fills in the RGB colors in the destination buffer.  alpha01 indicates
+     * how many alpha components there are in the dest array; it will be either
+     * 0 (RGB array) or 1 (RGBA array).
+     */
+    fillRgb: function ColorSpace_fillRgb(dest, originalWidth,
+                                         originalHeight, width, height,
+                                         actualHeight, bpc, comps, alpha01) {
+      var count = originalWidth * originalHeight;
+      var rgbBuf = null;
+      var numComponentColors = 1 << bpc;
+      var needsResizing = originalHeight !== height || originalWidth !== width;
+      var i, ii;
+
+      if (this.isPassthrough(bpc)) {
+        rgbBuf = comps;
+      } else if (this.numComps === 1 && count > numComponentColors &&
+          this.name !== 'DeviceGray' && this.name !== 'DeviceRGB') {
+        // Optimization: create a color map when there is just one component and
+        // we are converting more colors than the size of the color map. We
+        // don't build the map if the colorspace is gray or rgb since those
+        // methods are faster than building a map. This mainly offers big speed
+        // ups for indexed and alternate colorspaces.
+        //
+        // TODO it may be worth while to cache the color map. While running
+        // testing I never hit a cache so I will leave that out for now (perhaps
+        // we are reparsing colorspaces too much?).
+        var allColors = bpc <= 8 ? new Uint8Array(numComponentColors) :
+                                   new Uint16Array(numComponentColors);
+        var key;
+        for (i = 0; i < numComponentColors; i++) {
+          allColors[i] = i;
+        }
+        var colorMap = new Uint8Array(numComponentColors * 3);
+        this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc,
+                          /* alpha01 = */ 0);
+
+        var destPos, rgbPos;
+        if (!needsResizing) {
+          // Fill in the RGB values directly into |dest|.
+          destPos = 0;
+          for (i = 0; i < count; ++i) {
+            key = comps[i] * 3;
+            dest[destPos++] = colorMap[key];
+            dest[destPos++] = colorMap[key + 1];
+            dest[destPos++] = colorMap[key + 2];
+            destPos += alpha01;
+          }
+        } else {
+          rgbBuf = new Uint8Array(count * 3);
+          rgbPos = 0;
+          for (i = 0; i < count; ++i) {
+            key = comps[i] * 3;
+            rgbBuf[rgbPos++] = colorMap[key];
+            rgbBuf[rgbPos++] = colorMap[key + 1];
+            rgbBuf[rgbPos++] = colorMap[key + 2];
+          }
+        }
+      } else {
+        if (!needsResizing) {
+          // Fill in the RGB values directly into |dest|.
+          this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc,
+                            alpha01);
+        } else {
+          rgbBuf = new Uint8Array(count * 3);
+          this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc,
+                            /* alpha01 = */ 0);
+        }
+      }
+
+      if (rgbBuf) {
+        if (needsResizing) {
+          PDFImage.resize(rgbBuf, bpc, 3, originalWidth, originalHeight, width,
+                          height, dest, alpha01);
+        } else {
+          rgbPos = 0;
+          destPos = 0;
+          for (i = 0, ii = width * actualHeight; i < ii; i++) {
+            dest[destPos++] = rgbBuf[rgbPos++];
+            dest[destPos++] = rgbBuf[rgbPos++];
+            dest[destPos++] = rgbBuf[rgbPos++];
+            destPos += alpha01;
+          }
+        }
+      }
+    },
+    /**
+     * True if the colorspace has components in the default range of [0, 1].
+     * This should be true for all colorspaces except for lab color spaces
+     * which are [0,100], [-128, 127], [-128, 127].
+     */
+    usesZeroToOneRange: true
+  };
+
+  ColorSpace.parse = function ColorSpace_parse(cs, xref, res) {
+    var IR = ColorSpace.parseToIR(cs, xref, res);
+    if (IR instanceof AlternateCS) {
+      return IR;
+    }
+    return ColorSpace.fromIR(IR);
+  };
+
+  ColorSpace.fromIR = function ColorSpace_fromIR(IR) {
+    var name = isArray(IR) ? IR[0] : IR;
+    var whitePoint, blackPoint, gamma;
+
+    switch (name) {
+      case 'DeviceGrayCS':
+        return this.singletons.gray;
+      case 'DeviceRgbCS':
+        return this.singletons.rgb;
+      case 'DeviceCmykCS':
+        return this.singletons.cmyk;
+      case 'CalGrayCS':
+        whitePoint = IR[1].WhitePoint;
+        blackPoint = IR[1].BlackPoint;
+        gamma = IR[1].Gamma;
+        return new CalGrayCS(whitePoint, blackPoint, gamma);
+      case 'CalRGBCS':
+        whitePoint = IR[1].WhitePoint;
+        blackPoint = IR[1].BlackPoint;
+        gamma = IR[1].Gamma;
+        var matrix = IR[1].Matrix;
+        return new CalRGBCS(whitePoint, blackPoint, gamma, matrix);
+      case 'PatternCS':
+        var basePatternCS = IR[1];
+        if (basePatternCS) {
+          basePatternCS = ColorSpace.fromIR(basePatternCS);
+        }
+        return new PatternCS(basePatternCS);
+      case 'IndexedCS':
+        var baseIndexedCS = IR[1];
+        var hiVal = IR[2];
+        var lookup = IR[3];
+        return new IndexedCS(ColorSpace.fromIR(baseIndexedCS), hiVal, lookup);
+      case 'AlternateCS':
+        var numComps = IR[1];
+        var alt = IR[2];
+        var tintFnIR = IR[3];
+
+        return new AlternateCS(numComps, ColorSpace.fromIR(alt),
+                                PDFFunction.fromIR(tintFnIR));
+      case 'LabCS':
+        whitePoint = IR[1].WhitePoint;
+        blackPoint = IR[1].BlackPoint;
+        var range = IR[1].Range;
+        return new LabCS(whitePoint, blackPoint, range);
+      default:
+        error('Unknown name ' + name);
+    }
+    return null;
+  };
+
+  ColorSpace.parseToIR = function ColorSpace_parseToIR(cs, xref, res) {
+    if (isName(cs)) {
+      var colorSpaces = res.get('ColorSpace');
+      if (isDict(colorSpaces)) {
+        var refcs = colorSpaces.get(cs.name);
+        if (refcs) {
+          cs = refcs;
+        }
+      }
+    }
+
+    cs = xref.fetchIfRef(cs);
+    var mode;
+
+    if (isName(cs)) {
+      mode = cs.name;
+      this.mode = mode;
+
+      switch (mode) {
+        case 'DeviceGray':
+        case 'G':
+          return 'DeviceGrayCS';
+        case 'DeviceRGB':
+        case 'RGB':
+          return 'DeviceRgbCS';
+        case 'DeviceCMYK':
+        case 'CMYK':
+          return 'DeviceCmykCS';
+        case 'Pattern':
+          return ['PatternCS', null];
+        default:
+          error('unrecognized colorspace ' + mode);
+      }
+    } else if (isArray(cs)) {
+      mode = cs[0].name;
+      this.mode = mode;
+      var numComps, params;
+
+      switch (mode) {
+        case 'DeviceGray':
+        case 'G':
+          return 'DeviceGrayCS';
+        case 'DeviceRGB':
+        case 'RGB':
+          return 'DeviceRgbCS';
+        case 'DeviceCMYK':
+        case 'CMYK':
+          return 'DeviceCmykCS';
+        case 'CalGray':
+          params = xref.fetchIfRef(cs[1]).getAll();
+          return ['CalGrayCS', params];
+        case 'CalRGB':
+          params = xref.fetchIfRef(cs[1]).getAll();
+          return ['CalRGBCS', params];
+        case 'ICCBased':
+          var stream = xref.fetchIfRef(cs[1]);
+          var dict = stream.dict;
+          numComps = dict.get('N');
+          if (numComps === 1) {
+            return 'DeviceGrayCS';
+          } else if (numComps === 3) {
+            return 'DeviceRgbCS';
+          } else if (numComps === 4) {
+            return 'DeviceCmykCS';
+          }
+          break;
+        case 'Pattern':
+          var basePatternCS = cs[1];
+          if (basePatternCS) {
+            basePatternCS = ColorSpace.parseToIR(basePatternCS, xref, res);
+          }
+          return ['PatternCS', basePatternCS];
+        case 'Indexed':
+        case 'I':
+          var baseIndexedCS = ColorSpace.parseToIR(cs[1], xref, res);
+          var hiVal = cs[2] + 1;
+          var lookup = xref.fetchIfRef(cs[3]);
+          if (isStream(lookup)) {
+            lookup = lookup.getBytes();
+          }
+          return ['IndexedCS', baseIndexedCS, hiVal, lookup];
+        case 'Separation':
+        case 'DeviceN':
+          var name = cs[1];
+          numComps = 1;
+          if (isName(name)) {
+            numComps = 1;
+          } else if (isArray(name)) {
+            numComps = name.length;
+          }
+          var alt = ColorSpace.parseToIR(cs[2], xref, res);
+          var tintFnIR = PDFFunction.getIR(xref, xref.fetchIfRef(cs[3]));
+          return ['AlternateCS', numComps, alt, tintFnIR];
+        case 'Lab':
+          params = cs[1].getAll();
+          return ['LabCS', params];
+        default:
+          error('unimplemented color space object "' + mode + '"');
+      }
+    } else {
+      error('unrecognized color space object: "' + cs + '"');
+    }
+    return null;
+  };
+  /**
+   * Checks if a decode map matches the default decode map for a color space.
+   * This handles the general decode maps where there are two values per
+   * component. e.g. [0, 1, 0, 1, 0, 1] for a RGB color.
+   * This does not handle Lab, Indexed, or Pattern decode maps since they are
+   * slightly different.
+   * @param {Array} decode Decode map (usually from an image).
+   * @param {Number} n Number of components the color space has.
+   */
+  ColorSpace.isDefaultDecode = function ColorSpace_isDefaultDecode(decode, n) {
+    if (!decode) {
+      return true;
+    }
+
+    if (n * 2 !== decode.length) {
+      warn('The decode map is not the correct length');
+      return true;
+    }
+    for (var i = 0, ii = decode.length; i < ii; i += 2) {
+      if (decode[i] !== 0 || decode[i + 1] !== 1) {
+        return false;
+      }
+    }
+    return true;
+  };
+
+  ColorSpace.singletons = {
+    get gray() {
+      return shadow(this, 'gray', new DeviceGrayCS());
+    },
+    get rgb() {
+      return shadow(this, 'rgb', new DeviceRgbCS());
+    },
+    get cmyk() {
+      return shadow(this, 'cmyk', new DeviceCmykCS());
+    }
+  };
+
+  return ColorSpace;
+})();
+
+/**
+ * Alternate color space handles both Separation and DeviceN color spaces.  A
+ * Separation color space is actually just a DeviceN with one color component.
+ * Both color spaces use a tinting function to convert colors to a base color
+ * space.
+ */
+var AlternateCS = (function AlternateCSClosure() {
+  function AlternateCS(numComps, base, tintFn) {
+    this.name = 'Alternate';
+    this.numComps = numComps;
+    this.defaultColor = new Float32Array(numComps);
+    for (var i = 0; i < numComps; ++i) {
+      this.defaultColor[i] = 1;
+    }
+    this.base = base;
+    this.tintFn = tintFn;
+    this.tmpBuf = new Float32Array(base.numComps);
+  }
+
+  AlternateCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem: function AlternateCS_getRgbItem(src, srcOffset,
+                                                dest, destOffset) {
+      var tmpBuf = this.tmpBuf;
+      this.tintFn(src, srcOffset, tmpBuf, 0);
+      this.base.getRgbItem(tmpBuf, 0, dest, destOffset);
+    },
+    getRgbBuffer: function AlternateCS_getRgbBuffer(src, srcOffset, count,
+                                                    dest, destOffset, bits,
+                                                    alpha01) {
+      var tintFn = this.tintFn;
+      var base = this.base;
+      var scale = 1 / ((1 << bits) - 1);
+      var baseNumComps = base.numComps;
+      var usesZeroToOneRange = base.usesZeroToOneRange;
+      var isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) &&
+                          alpha01 === 0;
+      var pos = isPassthrough ? destOffset : 0;
+      var baseBuf = isPassthrough ? dest : new Uint8Array(baseNumComps * count);
+      var numComps = this.numComps;
+
+      var scaled = new Float32Array(numComps);
+      var tinted = new Float32Array(baseNumComps);
+      var i, j;
+      if (usesZeroToOneRange) {
+        for (i = 0; i < count; i++) {
+          for (j = 0; j < numComps; j++) {
+            scaled[j] = src[srcOffset++] * scale;
+          }
+          tintFn(scaled, 0, tinted, 0);
+          for (j = 0; j < baseNumComps; j++) {
+            baseBuf[pos++] = tinted[j] * 255;
+          }
+        }
+      } else {
+        for (i = 0; i < count; i++) {
+          for (j = 0; j < numComps; j++) {
+            scaled[j] = src[srcOffset++] * scale;
+          }
+          tintFn(scaled, 0, tinted, 0);
+          base.getRgbItem(tinted, 0, baseBuf, pos);
+          pos += baseNumComps;
+        }
+      }
+      if (!isPassthrough) {
+        base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01);
+      }
+    },
+    getOutputLength: function AlternateCS_getOutputLength(inputLength,
+                                                          alpha01) {
+      return this.base.getOutputLength(inputLength *
+                                       this.base.numComps / this.numComps,
+                                       alpha01);
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode: function AlternateCS_isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+
+  return AlternateCS;
+})();
+
+var PatternCS = (function PatternCSClosure() {
+  function PatternCS(baseCS) {
+    this.name = 'Pattern';
+    this.base = baseCS;
+  }
+  PatternCS.prototype = {};
+
+  return PatternCS;
+})();
+
+var IndexedCS = (function IndexedCSClosure() {
+  function IndexedCS(base, highVal, lookup) {
+    this.name = 'Indexed';
+    this.numComps = 1;
+    this.defaultColor = new Uint8Array([0]);
+    this.base = base;
+    this.highVal = highVal;
+
+    var baseNumComps = base.numComps;
+    var length = baseNumComps * highVal;
+    var lookupArray;
+
+    if (isStream(lookup)) {
+      lookupArray = new Uint8Array(length);
+      var bytes = lookup.getBytes(length);
+      lookupArray.set(bytes);
+    } else if (isString(lookup)) {
+      lookupArray = new Uint8Array(length);
+      for (var i = 0; i < length; ++i) {
+        lookupArray[i] = lookup.charCodeAt(i);
+      }
+    } else if (lookup instanceof Uint8Array || lookup instanceof Array) {
+      lookupArray = lookup;
+    } else {
+      error('Unrecognized lookup table: ' + lookup);
+    }
+    this.lookup = lookupArray;
+  }
+
+  IndexedCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem: function IndexedCS_getRgbItem(src, srcOffset,
+                                              dest, destOffset) {
+      var numComps = this.base.numComps;
+      var start = src[srcOffset] * numComps;
+      this.base.getRgbItem(this.lookup, start, dest, destOffset);
+    },
+    getRgbBuffer: function IndexedCS_getRgbBuffer(src, srcOffset, count,
+                                                  dest, destOffset, bits,
+                                                  alpha01) {
+      var base = this.base;
+      var numComps = base.numComps;
+      var outputDelta = base.getOutputLength(numComps, alpha01);
+      var lookup = this.lookup;
+
+      for (var i = 0; i < count; ++i) {
+        var lookupPos = src[srcOffset++] * numComps;
+        base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01);
+        destOffset += outputDelta;
+      }
+    },
+    getOutputLength: function IndexedCS_getOutputLength(inputLength, alpha01) {
+      return this.base.getOutputLength(inputLength * this.base.numComps,
+                                       alpha01);
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode: function IndexedCS_isDefaultDecode(decodeMap) {
+      // indexed color maps shouldn't be changed
+      return true;
+    },
+    usesZeroToOneRange: true
+  };
+  return IndexedCS;
+})();
+
+var DeviceGrayCS = (function DeviceGrayCSClosure() {
+  function DeviceGrayCS() {
+    this.name = 'DeviceGray';
+    this.numComps = 1;
+    this.defaultColor = new Float32Array([0]);
+  }
+
+  DeviceGrayCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem: function DeviceGrayCS_getRgbItem(src, srcOffset,
+                                                 dest, destOffset) {
+      var c = (src[srcOffset] * 255) | 0;
+      c = c < 0 ? 0 : c > 255 ? 255 : c;
+      dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c;
+    },
+    getRgbBuffer: function DeviceGrayCS_getRgbBuffer(src, srcOffset, count,
+                                                     dest, destOffset, bits,
+                                                     alpha01) {
+      var scale = 255 / ((1 << bits) - 1);
+      var j = srcOffset, q = destOffset;
+      for (var i = 0; i < count; ++i) {
+        var c = (scale * src[j++]) | 0;
+        dest[q++] = c;
+        dest[q++] = c;
+        dest[q++] = c;
+        q += alpha01;
+      }
+    },
+    getOutputLength: function DeviceGrayCS_getOutputLength(inputLength,
+                                                           alpha01) {
+      return inputLength * (3 + alpha01);
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode: function DeviceGrayCS_isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+  return DeviceGrayCS;
+})();
+
+var DeviceRgbCS = (function DeviceRgbCSClosure() {
+  function DeviceRgbCS() {
+    this.name = 'DeviceRGB';
+    this.numComps = 3;
+    this.defaultColor = new Float32Array([0, 0, 0]);
+  }
+  DeviceRgbCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem: function DeviceRgbCS_getRgbItem(src, srcOffset,
+                                                dest, destOffset) {
+      var r = (src[srcOffset] * 255) | 0;
+      var g = (src[srcOffset + 1] * 255) | 0;
+      var b = (src[srcOffset + 2] * 255) | 0;
+      dest[destOffset] = r < 0 ? 0 : r > 255 ? 255 : r;
+      dest[destOffset + 1] = g < 0 ? 0 : g > 255 ? 255 : g;
+      dest[destOffset + 2] = b < 0 ? 0 : b > 255 ? 255 : b;
+    },
+    getRgbBuffer: function DeviceRgbCS_getRgbBuffer(src, srcOffset, count,
+                                                    dest, destOffset, bits,
+                                                    alpha01) {
+      if (bits === 8 && alpha01 === 0) {
+        dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset);
+        return;
+      }
+      var scale = 255 / ((1 << bits) - 1);
+      var j = srcOffset, q = destOffset;
+      for (var i = 0; i < count; ++i) {
+        dest[q++] = (scale * src[j++]) | 0;
+        dest[q++] = (scale * src[j++]) | 0;
+        dest[q++] = (scale * src[j++]) | 0;
+        q += alpha01;
+      }
+    },
+    getOutputLength: function DeviceRgbCS_getOutputLength(inputLength,
+                                                          alpha01) {
+      return (inputLength * (3 + alpha01) / 3) | 0;
+    },
+    isPassthrough: function DeviceRgbCS_isPassthrough(bits) {
+      return bits === 8;
+    },
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode: function DeviceRgbCS_isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+  return DeviceRgbCS;
+})();
+
+var DeviceCmykCS = (function DeviceCmykCSClosure() {
+  // The coefficients below was found using numerical analysis: the method of
+  // steepest descent for the sum((f_i - color_value_i)^2) for r/g/b colors,
+  // where color_value is the tabular value from the table of sampled RGB colors
+  // from CMYK US Web Coated (SWOP) colorspace, and f_i is the corresponding
+  // CMYK color conversion using the estimation below:
+  //   f(A, B,.. N) = Acc+Bcm+Ccy+Dck+c+Fmm+Gmy+Hmk+Im+Jyy+Kyk+Ly+Mkk+Nk+255
+  function convertToRgb(src, srcOffset, srcScale, dest, destOffset) {
+    var c = src[srcOffset + 0] * srcScale;
+    var m = src[srcOffset + 1] * srcScale;
+    var y = src[srcOffset + 2] * srcScale;
+    var k = src[srcOffset + 3] * srcScale;
+
+    var r =
+      (c * (-4.387332384609988 * c + 54.48615194189176 * m +
+            18.82290502165302 * y + 212.25662451639585 * k +
+            -285.2331026137004) +
+       m * (1.7149763477362134 * m - 5.6096736904047315 * y +
+            -17.873870861415444 * k - 5.497006427196366) +
+       y * (-2.5217340131683033 * y - 21.248923337353073 * k +
+            17.5119270841813) +
+       k * (-21.86122147463605 * k - 189.48180835922747) + 255) | 0;
+    var g =
+      (c * (8.841041422036149 * c + 60.118027045597366 * m +
+            6.871425592049007 * y + 31.159100130055922 * k +
+            -79.2970844816548) +
+       m * (-15.310361306967817 * m + 17.575251261109482 * y +
+            131.35250912493976 * k - 190.9453302588951) +
+       y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) +
+       k * (-20.737325471181034 * k - 187.80453709719578) + 255) | 0;
+    var b =
+      (c * (0.8842522430003296 * c + 8.078677503112928 * m +
+            30.89978309703729 * y - 0.23883238689178934 * k +
+            -14.183576799673286) +
+       m * (10.49593273432072 * m + 63.02378494754052 * y +
+            50.606957656360734 * k - 112.23884253719248) +
+       y * (0.03296041114873217 * y + 115.60384449646641 * k +
+            -193.58209356861505) +
+       k * (-22.33816807309886 * k - 180.12613974708367) + 255) | 0;
+
+    dest[destOffset] = r > 255 ? 255 : r < 0 ? 0 : r;
+    dest[destOffset + 1] = g > 255 ? 255 : g < 0 ? 0 : g;
+    dest[destOffset + 2] = b > 255 ? 255 : b < 0 ? 0 : b;
+  }
+
+  function DeviceCmykCS() {
+    this.name = 'DeviceCMYK';
+    this.numComps = 4;
+    this.defaultColor = new Float32Array([0, 0, 0, 1]);
+  }
+  DeviceCmykCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem: function DeviceCmykCS_getRgbItem(src, srcOffset,
+                                                 dest, destOffset) {
+      convertToRgb(src, srcOffset, 1, dest, destOffset);
+    },
+    getRgbBuffer: function DeviceCmykCS_getRgbBuffer(src, srcOffset, count,
+                                                     dest, destOffset, bits,
+                                                     alpha01) {
+      var scale = 1 / ((1 << bits) - 1);
+      for (var i = 0; i < count; i++) {
+        convertToRgb(src, srcOffset, scale, dest, destOffset);
+        srcOffset += 4;
+        destOffset += 3 + alpha01;
+      }
+    },
+    getOutputLength: function DeviceCmykCS_getOutputLength(inputLength,
+                                                           alpha01) {
+      return (inputLength / 4 * (3 + alpha01)) | 0;
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode: function DeviceCmykCS_isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+
+  return DeviceCmykCS;
+})();
+
+//
+// CalGrayCS: Based on "PDF Reference, Sixth Ed", p.245
+//
+var CalGrayCS = (function CalGrayCSClosure() {
+  function CalGrayCS(whitePoint, blackPoint, gamma) {
+    this.name = 'CalGray';
+    this.numComps = 1;
+    this.defaultColor = new Float32Array([0]);
+
+    if (!whitePoint) {
+      error('WhitePoint missing - required for color space CalGray');
+    }
+    blackPoint = blackPoint || [0, 0, 0];
+    gamma = gamma || 1;
+
+    // Translate arguments to spec variables.
+    this.XW = whitePoint[0];
+    this.YW = whitePoint[1];
+    this.ZW = whitePoint[2];
+
+    this.XB = blackPoint[0];
+    this.YB = blackPoint[1];
+    this.ZB = blackPoint[2];
+
+    this.G = gamma;
+
+    // Validate variables as per spec.
+    if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {
+      error('Invalid WhitePoint components for ' + this.name +
+            ', no fallback available');
+    }
+
+    if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {
+      info('Invalid BlackPoint for ' + this.name + ', falling back to default');
+      this.XB = this.YB = this.ZB = 0;
+    }
+
+    if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) {
+      warn(this.name + ', BlackPoint: XB: ' + this.XB + ', YB: ' + this.YB +
+           ', ZB: ' + this.ZB + ', only default values are supported.');
+    }
+
+    if (this.G < 1) {
+      info('Invalid Gamma: ' + this.G + ' for ' + this.name +
+           ', falling back to default');
+      this.G = 1;
+    }
+  }
+
+  function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {
+    // A represents a gray component of a calibrated gray space.
+    // A <---> AG in the spec
+    var A = src[srcOffset] * scale;
+    var AG = Math.pow(A, cs.G);
+
+    // Computes L as per spec. ( = cs.YW * AG )
+    // Except if other than default BlackPoint values are used.
+    var L = cs.YW * AG;
+    // http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html, Ch 4.
+    // Convert values to rgb range [0, 255].
+    var val = Math.max(295.8 * Math.pow(L, 0.333333333333333333) - 40.8, 0) | 0;
+    dest[destOffset] = val;
+    dest[destOffset + 1] = val;
+    dest[destOffset + 2] = val;
+  }
+
+  CalGrayCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem: function CalGrayCS_getRgbItem(src, srcOffset,
+                                              dest, destOffset) {
+      convertToRgb(this, src, srcOffset, dest, destOffset, 1);
+    },
+    getRgbBuffer: function CalGrayCS_getRgbBuffer(src, srcOffset, count,
+                                                  dest, destOffset, bits,
+                                                  alpha01) {
+      var scale = 1 / ((1 << bits) - 1);
+
+      for (var i = 0; i < count; ++i) {
+        convertToRgb(this, src, srcOffset, dest, destOffset, scale);
+        srcOffset += 1;
+        destOffset += 3 + alpha01;
+      }
+    },
+    getOutputLength: function CalGrayCS_getOutputLength(inputLength, alpha01) {
+      return inputLength * (3 + alpha01);
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode: function CalGrayCS_isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+  return CalGrayCS;
+})();
+
+//
+// CalRGBCS: Based on "PDF Reference, Sixth Ed", p.247
+//
+var CalRGBCS = (function CalRGBCSClosure() {
+
+  // See http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html for these
+  // matrices.
+  var BRADFORD_SCALE_MATRIX = new Float32Array([
+    0.8951, 0.2664, -0.1614,
+    -0.7502, 1.7135, 0.0367,
+    0.0389, -0.0685, 1.0296]);
+
+  var BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([
+    0.9869929, -0.1470543, 0.1599627,
+    0.4323053, 0.5183603, 0.0492912,
+    -0.0085287, 0.0400428, 0.9684867]);
+
+  // See http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html.
+  var SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([
+    3.2404542, -1.5371385, -0.4985314,
+    -0.9692660, 1.8760108, 0.0415560,
+    0.0556434, -0.2040259, 1.0572252]);
+
+  var FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]);
+
+  var tempNormalizeMatrix = new Float32Array(3);
+  var tempConvertMatrix1 = new Float32Array(3);
+  var tempConvertMatrix2 = new Float32Array(3);
+
+  var DECODE_L_CONSTANT = Math.pow(((8 + 16) / 116), 3) / 8.0;
+
+  function CalRGBCS(whitePoint, blackPoint, gamma, matrix) {
+    this.name = 'CalRGB';
+    this.numComps = 3;
+    this.defaultColor = new Float32Array(3);
+
+    if (!whitePoint) {
+      error('WhitePoint missing - required for color space CalRGB');
+    }
+    blackPoint = blackPoint || new Float32Array(3);
+    gamma = gamma || new Float32Array([1, 1, 1]);
+    matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);
+
+    // Translate arguments to spec variables.
+    var XW = whitePoint[0];
+    var YW = whitePoint[1];
+    var ZW = whitePoint[2];
+    this.whitePoint = whitePoint;
+
+    var XB = blackPoint[0];
+    var YB = blackPoint[1];
+    var ZB = blackPoint[2];
+    this.blackPoint = blackPoint;
+
+    this.GR = gamma[0];
+    this.GG = gamma[1];
+    this.GB = gamma[2];
+
+    this.MXA = matrix[0];
+    this.MYA = matrix[1];
+    this.MZA = matrix[2];
+    this.MXB = matrix[3];
+    this.MYB = matrix[4];
+    this.MZB = matrix[5];
+    this.MXC = matrix[6];
+    this.MYC = matrix[7];
+    this.MZC = matrix[8];
+
+    // Validate variables as per spec.
+    if (XW < 0 || ZW < 0 || YW !== 1) {
+      error('Invalid WhitePoint components for ' + this.name +
+            ', no fallback available');
+    }
+
+    if (XB < 0 || YB < 0 || ZB < 0) {
+      info('Invalid BlackPoint for ' + this.name + ' [' + XB + ', ' + YB +
+           ', ' + ZB + '], falling back to default');
+      this.blackPoint = new Float32Array(3);
+    }
+
+    if (this.GR < 0 || this.GG < 0 || this.GB < 0) {
+      info('Invalid Gamma [' + this.GR + ', ' + this.GG + ', ' + this.GB +
+           '] for ' + this.name + ', falling back to default');
+      this.GR = this.GG = this.GB = 1;
+    }
+
+    if (this.MXA < 0 || this.MYA < 0 || this.MZA < 0 ||
+        this.MXB < 0 || this.MYB < 0 || this.MZB < 0 ||
+        this.MXC < 0 || this.MYC < 0 || this.MZC < 0) {
+      info('Invalid Matrix for ' + this.name + ' [' +
+           this.MXA + ', ' + this.MYA + ', ' + this.MZA +
+           this.MXB + ', ' + this.MYB + ', ' + this.MZB +
+           this.MXC + ', ' + this.MYC + ', ' + this.MZC +
+           '], falling back to default');
+      this.MXA = this.MYB = this.MZC = 1;
+      this.MXB = this.MYA = this.MZA = this.MXC = this.MYC = this.MZB = 0;
+    }
+  }
+
+  function matrixProduct(a, b, result) {
+      result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
+      result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2];
+      result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2];
+  }
+
+  function convertToFlat(sourceWhitePoint, LMS, result) {
+      result[0] = LMS[0] * 1 / sourceWhitePoint[0];
+      result[1] = LMS[1] * 1 / sourceWhitePoint[1];
+      result[2] = LMS[2] * 1 / sourceWhitePoint[2];
+  }
+
+  function convertToD65(sourceWhitePoint, LMS, result) {
+    var D65X = 0.95047;
+    var D65Y = 1;
+    var D65Z = 1.08883;
+
+    result[0] = LMS[0] * D65X / sourceWhitePoint[0];
+    result[1] = LMS[1] * D65Y / sourceWhitePoint[1];
+    result[2] = LMS[2] * D65Z / sourceWhitePoint[2];
+  }
+
+  function sRGBTransferFunction(color) {
+    // See http://en.wikipedia.org/wiki/SRGB.
+    if (color <= 0.0031308){
+      return adjustToRange(0, 1, 12.92 * color);
+    }
+
+    return adjustToRange(0, 1, (1 + 0.055) * Math.pow(color, 1 / 2.4) - 0.055);
+  }
+
+  function adjustToRange(min, max, value) {
+    return Math.max(min, Math.min(max, value));
+  }
+
+  function decodeL(L) {
+    if (L < 0) {
+      return -decodeL(-L);
+    }
+
+    if (L > 8.0) {
+      return Math.pow(((L + 16) / 116), 3);
+    }
+
+    return L * DECODE_L_CONSTANT;
+  }
+
+  function compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) {
+
+    // In case the blackPoint is already the default blackPoint then there is
+    // no need to do compensation.
+    if (sourceBlackPoint[0] === 0 &&
+        sourceBlackPoint[1] === 0 &&
+        sourceBlackPoint[2] === 0) {
+      result[0] = XYZ_Flat[0];
+      result[1] = XYZ_Flat[1];
+      result[2] = XYZ_Flat[2];
+      return;
+    }
+
+    // For the blackPoint calculation details, please see
+    // http://www.adobe.com/content/dam/Adobe/en/devnet/photoshop/sdk/
+    // AdobeBPC.pdf.
+    // The destination blackPoint is the default blackPoint [0, 0, 0].
+    var zeroDecodeL = decodeL(0);
+
+    var X_DST = zeroDecodeL;
+    var X_SRC = decodeL(sourceBlackPoint[0]);
+
+    var Y_DST = zeroDecodeL;
+    var Y_SRC = decodeL(sourceBlackPoint[1]);
+
+    var Z_DST = zeroDecodeL;
+    var Z_SRC = decodeL(sourceBlackPoint[2]);
+
+    var X_Scale = (1 - X_DST) / (1 - X_SRC);
+    var X_Offset = 1 - X_Scale;
+
+    var Y_Scale = (1 - Y_DST) / (1 - Y_SRC);
+    var Y_Offset = 1 - Y_Scale;
+
+    var Z_Scale = (1 - Z_DST) / (1 - Z_SRC);
+    var Z_Offset = 1 - Z_Scale;
+
+    result[0] = XYZ_Flat[0] * X_Scale + X_Offset;
+    result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset;
+    result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset;
+  }
+
+  function normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) {
+
+    // In case the whitePoint is already flat then there is no need to do
+    // normalization.
+    if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) {
+      result[0] = XYZ_In[0];
+      result[1] = XYZ_In[1];
+      result[2] = XYZ_In[2];
+      return;
+    }
+
+    var LMS = result;
+    matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);
+
+    var LMS_Flat = tempNormalizeMatrix;
+    convertToFlat(sourceWhitePoint, LMS, LMS_Flat);
+
+    matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result);
+  }
+
+  function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) {
+
+    var LMS = result;
+    matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);
+
+    var LMS_D65 = tempNormalizeMatrix;
+    convertToD65(sourceWhitePoint, LMS, LMS_D65);
+
+    matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result);
+  }
+
+  function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {
+    // A, B and C represent a red, green and blue components of a calibrated
+    // rgb space.
+    var A = adjustToRange(0, 1, src[srcOffset] * scale);
+    var B = adjustToRange(0, 1, src[srcOffset + 1] * scale);
+    var C = adjustToRange(0, 1, src[srcOffset + 2] * scale);
+
+    // A <---> AGR in the spec
+    // B <---> BGG in the spec
+    // C <---> CGB in the spec
+    var AGR = Math.pow(A, cs.GR);
+    var BGG = Math.pow(B, cs.GG);
+    var CGB = Math.pow(C, cs.GB);
+
+    // Computes intermediate variables L, M, N as per spec.
+    // To decode X, Y, Z values map L, M, N directly to them.
+    var X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB;
+    var Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB;
+    var Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB;
+
+    // The following calculations are based on this document:
+    // http://www.adobe.com/content/dam/Adobe/en/devnet/photoshop/sdk/
+    // AdobeBPC.pdf.
+    var XYZ = tempConvertMatrix1;
+    XYZ[0] = X;
+    XYZ[1] = Y;
+    XYZ[2] = Z;
+    var XYZ_Flat = tempConvertMatrix2;
+
+    normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat);
+
+    var XYZ_Black = tempConvertMatrix1;
+    compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black);
+
+    var XYZ_D65 = tempConvertMatrix2;
+    normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65);
+
+    var SRGB = tempConvertMatrix1;
+    matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB);
+
+    var sR = sRGBTransferFunction(SRGB[0]);
+    var sG = sRGBTransferFunction(SRGB[1]);
+    var sB = sRGBTransferFunction(SRGB[2]);
+
+    // Convert the values to rgb range [0, 255].
+    dest[destOffset] = Math.round(sR * 255);
+    dest[destOffset + 1] = Math.round(sG * 255);
+    dest[destOffset + 2] = Math.round(sB * 255);
+  }
+
+  CalRGBCS.prototype = {
+    getRgb: function CalRGBCS_getRgb(src, srcOffset) {
+      var rgb = new Uint8Array(3);
+      this.getRgbItem(src, srcOffset, rgb, 0);
+      return rgb;
+    },
+    getRgbItem: function CalRGBCS_getRgbItem(src, srcOffset,
+                                             dest, destOffset) {
+      convertToRgb(this, src, srcOffset, dest, destOffset, 1);
+    },
+    getRgbBuffer: function CalRGBCS_getRgbBuffer(src, srcOffset, count,
+                                                 dest, destOffset, bits,
+                                                 alpha01) {
+      var scale = 1 / ((1 << bits) - 1);
+
+      for (var i = 0; i < count; ++i) {
+        convertToRgb(this, src, srcOffset, dest, destOffset, scale);
+        srcOffset += 3;
+        destOffset += 3 + alpha01;
+      }
+    },
+    getOutputLength: function CalRGBCS_getOutputLength(inputLength, alpha01) {
+      return (inputLength * (3 + alpha01) / 3) | 0;
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode: function CalRGBCS_isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+  return CalRGBCS;
+})();
+
+//
+// LabCS: Based on "PDF Reference, Sixth Ed", p.250
+//
+var LabCS = (function LabCSClosure() {
+  function LabCS(whitePoint, blackPoint, range) {
+    this.name = 'Lab';
+    this.numComps = 3;
+    this.defaultColor = new Float32Array([0, 0, 0]);
+
+    if (!whitePoint) {
+      error('WhitePoint missing - required for color space Lab');
+    }
+    blackPoint = blackPoint || [0, 0, 0];
+    range = range || [-100, 100, -100, 100];
+
+    // Translate args to spec variables
+    this.XW = whitePoint[0];
+    this.YW = whitePoint[1];
+    this.ZW = whitePoint[2];
+    this.amin = range[0];
+    this.amax = range[1];
+    this.bmin = range[2];
+    this.bmax = range[3];
+
+    // These are here just for completeness - the spec doesn't offer any
+    // formulas that use BlackPoint in Lab
+    this.XB = blackPoint[0];
+    this.YB = blackPoint[1];
+    this.ZB = blackPoint[2];
+
+    // Validate vars as per spec
+    if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {
+      error('Invalid WhitePoint components, no fallback available');
+    }
+
+    if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {
+      info('Invalid BlackPoint, falling back to default');
+      this.XB = this.YB = this.ZB = 0;
+    }
+
+    if (this.amin > this.amax || this.bmin > this.bmax) {
+      info('Invalid Range, falling back to defaults');
+      this.amin = -100;
+      this.amax = 100;
+      this.bmin = -100;
+      this.bmax = 100;
+    }
+  }
+
+  // Function g(x) from spec
+  function fn_g(x) {
+    if (x >= 6 / 29) {
+      return x * x * x;
+    } else {
+      return (108 / 841) * (x - 4 / 29);
+    }
+  }
+
+  function decode(value, high1, low2, high2) {
+    return low2 + (value) * (high2 - low2) / (high1);
+  }
+
+  // If decoding is needed maxVal should be 2^bits per component - 1.
+  function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) {
+    // XXX: Lab input is in the range of [0, 100], [amin, amax], [bmin, bmax]
+    // not the usual [0, 1]. If a command like setFillColor is used the src
+    // values will already be within the correct range. However, if we are
+    // converting an image we have to map the values to the correct range given
+    // above.
+    // Ls,as,bs <---> L*,a*,b* in the spec
+    var Ls = src[srcOffset];
+    var as = src[srcOffset + 1];
+    var bs = src[srcOffset + 2];
+    if (maxVal !== false) {
+      Ls = decode(Ls, maxVal, 0, 100);
+      as = decode(as, maxVal, cs.amin, cs.amax);
+      bs = decode(bs, maxVal, cs.bmin, cs.bmax);
+    }
+
+    // Adjust limits of 'as' and 'bs'
+    as = as > cs.amax ? cs.amax : as < cs.amin ? cs.amin : as;
+    bs = bs > cs.bmax ? cs.bmax : bs < cs.bmin ? cs.bmin : bs;
+
+    // Computes intermediate variables X,Y,Z as per spec
+    var M = (Ls + 16) / 116;
+    var L = M + (as / 500);
+    var N = M - (bs / 200);
+
+    var X = cs.XW * fn_g(L);
+    var Y = cs.YW * fn_g(M);
+    var Z = cs.ZW * fn_g(N);
+
+    var r, g, b;
+    // Using different conversions for D50 and D65 white points,
+    // per http://www.color.org/srgb.pdf
+    if (cs.ZW < 1) {
+      // Assuming D50 (X=0.9642, Y=1.00, Z=0.8249)
+      r = X * 3.1339 + Y * -1.6170 + Z * -0.4906;
+      g = X * -0.9785 + Y * 1.9160 + Z * 0.0333;
+      b = X * 0.0720 + Y * -0.2290 + Z * 1.4057;
+    } else {
+      // Assuming D65 (X=0.9505, Y=1.00, Z=1.0888)
+      r = X * 3.2406 + Y * -1.5372 + Z * -0.4986;
+      g = X * -0.9689 + Y * 1.8758 + Z * 0.0415;
+      b = X * 0.0557 + Y * -0.2040 + Z * 1.0570;
+    }
+    // clamp color values to [0,1] range then convert to [0,255] range.
+    dest[destOffset] = r <= 0 ? 0 : r >= 1 ? 255 : Math.sqrt(r) * 255 | 0;
+    dest[destOffset + 1] = g <= 0 ? 0 : g >= 1 ? 255 : Math.sqrt(g) * 255 | 0;
+    dest[destOffset + 2] = b <= 0 ? 0 : b >= 1 ? 255 : Math.sqrt(b) * 255 | 0;
+  }
+
+  LabCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem: function LabCS_getRgbItem(src, srcOffset, dest, destOffset) {
+      convertToRgb(this, src, srcOffset, false, dest, destOffset);
+    },
+    getRgbBuffer: function LabCS_getRgbBuffer(src, srcOffset, count,
+                                              dest, destOffset, bits,
+                                              alpha01) {
+      var maxVal = (1 << bits) - 1;
+      for (var i = 0; i < count; i++) {
+        convertToRgb(this, src, srcOffset, maxVal, dest, destOffset);
+        srcOffset += 3;
+        destOffset += 3 + alpha01;
+      }
+    },
+    getOutputLength: function LabCS_getOutputLength(inputLength, alpha01) {
+      return (inputLength * (3 + alpha01) / 3) | 0;
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode: function LabCS_isDefaultDecode(decodeMap) {
+      // XXX: Decoding is handled with the lab conversion because of the strange
+      // ranges that are used.
+      return true;
+    },
+    usesZeroToOneRange: false
+  };
+  return LabCS;
+})();
+
+
+var ARCFourCipher = (function ARCFourCipherClosure() {
+  function ARCFourCipher(key) {
+    this.a = 0;
+    this.b = 0;
+    var s = new Uint8Array(256);
+    var i, j = 0, tmp, keyLength = key.length;
+    for (i = 0; i < 256; ++i) {
+      s[i] = i;
+    }
+    for (i = 0; i < 256; ++i) {
+      tmp = s[i];
+      j = (j + tmp + key[i % keyLength]) & 0xFF;
+      s[i] = s[j];
+      s[j] = tmp;
+    }
+    this.s = s;
+  }
+
+  ARCFourCipher.prototype = {
+    encryptBlock: function ARCFourCipher_encryptBlock(data) {
+      var i, n = data.length, tmp, tmp2;
+      var a = this.a, b = this.b, s = this.s;
+      var output = new Uint8Array(n);
+      for (i = 0; i < n; ++i) {
+        a = (a + 1) & 0xFF;
+        tmp = s[a];
+        b = (b + tmp) & 0xFF;
+        tmp2 = s[b];
+        s[a] = tmp2;
+        s[b] = tmp;
+        output[i] = data[i] ^ s[(tmp + tmp2) & 0xFF];
+      }
+      this.a = a;
+      this.b = b;
+      return output;
+    }
+  };
+  ARCFourCipher.prototype.decryptBlock = ARCFourCipher.prototype.encryptBlock;
+
+  return ARCFourCipher;
+})();
+
+var calculateMD5 = (function calculateMD5Closure() {
+  var r = new Uint8Array([
+    7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,
+    5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,
+    4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,
+    6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]);
+
+  var k = new Int32Array([
+    -680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426,
+    -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162,
+    1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632,
+    643717713, -373897302, -701558691, 38016083, -660478335, -405537848,
+    568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784,
+    1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556,
+    -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222,
+    -722521979, 76029189, -640364487, -421815835, 530742520, -995338651,
+    -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606,
+    -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649,
+    -145523070, -1120210379, 718787259, -343485551]);
+
+  function hash(data, offset, length) {
+    var h0 = 1732584193, h1 = -271733879, h2 = -1732584194, h3 = 271733878;
+    // pre-processing
+    var paddedLength = (length + 72) & ~63; // data + 9 extra bytes
+    var padded = new Uint8Array(paddedLength);
+    var i, j, n;
+    for (i = 0; i < length; ++i) {
+      padded[i] = data[offset++];
+    }
+    padded[i++] = 0x80;
+    n = paddedLength - 8;
+    while (i < n) {
+      padded[i++] = 0;
+    }
+    padded[i++] = (length << 3) & 0xFF;
+    padded[i++] = (length >> 5) & 0xFF;
+    padded[i++] = (length >> 13) & 0xFF;
+    padded[i++] = (length >> 21) & 0xFF;
+    padded[i++] = (length >>> 29) & 0xFF;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    var w = new Int32Array(16);
+    for (i = 0; i < paddedLength;) {
+      for (j = 0; j < 16; ++j, i += 4) {
+        w[j] = (padded[i] | (padded[i + 1] << 8) |
+               (padded[i + 2] << 16) | (padded[i + 3] << 24));
+      }
+      var a = h0, b = h1, c = h2, d = h3, f, g;
+      for (j = 0; j < 64; ++j) {
+        if (j < 16) {
+          f = (b & c) | ((~b) & d);
+          g = j;
+        } else if (j < 32) {
+          f = (d & b) | ((~d) & c);
+          g = (5 * j + 1) & 15;
+        } else if (j < 48) {
+          f = b ^ c ^ d;
+          g = (3 * j + 5) & 15;
+        } else {
+          f = c ^ (b | (~d));
+          g = (7 * j) & 15;
+        }
+        var tmp = d, rotateArg = (a + f + k[j] + w[g]) | 0, rotate = r[j];
+        d = c;
+        c = b;
+        b = (b + ((rotateArg << rotate) | (rotateArg >>> (32 - rotate)))) | 0;
+        a = tmp;
+      }
+      h0 = (h0 + a) | 0;
+      h1 = (h1 + b) | 0;
+      h2 = (h2 + c) | 0;
+      h3 = (h3 + d) | 0;
+    }
+    return new Uint8Array([
+      h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >>> 24) & 0xFF,
+      h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >>> 24) & 0xFF,
+      h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >>> 24) & 0xFF,
+      h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >>> 24) & 0xFF
+    ]);
+  }
+
+  return hash;
+})();
+var Word64 = (function Word64Closure() {
+  function Word64(highInteger, lowInteger) {
+    this.high = highInteger | 0;
+    this.low = lowInteger | 0;
+  }
+  Word64.prototype = {
+    and: function Word64_and(word) {
+      this.high &= word.high;
+      this.low &= word.low;
+    },
+    xor: function Word64_xor(word) {
+     this.high ^= word.high;
+     this.low ^= word.low;
+    },
+
+    or: function Word64_or(word) {
+      this.high |= word.high;
+      this.low |= word.low;
+    },
+
+    shiftRight: function Word64_shiftRight(places) {
+      if (places >= 32) {
+        this.low = (this.high >>> (places - 32)) | 0;
+        this.high = 0;
+      } else {
+        this.low = (this.low >>> places) | (this.high << (32 - places));
+        this.high = (this.high >>> places) | 0;
+      }
+    },
+
+    shiftLeft: function Word64_shiftLeft(places) {
+      if (places >= 32) {
+        this.high = this.low << (places - 32);
+        this.low = 0;
+      } else {
+        this.high = (this.high << places) | (this.low >>> (32 - places));
+        this.low = this.low << places;
+      }
+    },
+
+    rotateRight: function Word64_rotateRight(places) {
+      var low, high;
+      if (places & 32) {
+        high = this.low;
+        low = this.high;
+      } else {
+        low = this.low;
+        high = this.high;
+      }
+      places &= 31;
+      this.low = (low >>> places) | (high << (32 - places));
+      this.high = (high >>> places) | (low << (32 - places));
+    },
+
+    not: function Word64_not() {
+      this.high = ~this.high;
+      this.low = ~this.low;
+    },
+
+    add: function Word64_add(word) {
+      var lowAdd = (this.low >>> 0) + (word.low >>> 0);
+      var highAdd = (this.high >>> 0) + (word.high >>> 0);
+      if (lowAdd > 0xFFFFFFFF) {
+        highAdd += 1;
+      }
+      this.low = lowAdd | 0;
+      this.high = highAdd | 0;
+    },
+
+    copyTo: function Word64_copyTo(bytes, offset) {
+      bytes[offset] = (this.high >>> 24) & 0xFF;
+      bytes[offset + 1] = (this.high >> 16) & 0xFF;
+      bytes[offset + 2] = (this.high >> 8) & 0xFF;
+      bytes[offset + 3] = this.high & 0xFF;
+      bytes[offset + 4] = (this.low >>> 24) & 0xFF;
+      bytes[offset + 5] = (this.low >> 16) & 0xFF;
+      bytes[offset + 6] = (this.low >> 8) & 0xFF;
+      bytes[offset + 7] = this.low & 0xFF;
+    },
+
+    assign: function Word64_assign(word) {
+      this.high = word.high;
+      this.low = word.low;
+    }
+  };
+  return Word64;
+})();
+
+var calculateSHA256 = (function calculateSHA256Closure() {
+  function rotr(x, n) {
+    return (x >>> n) | (x << 32 - n);
+  }
+
+  function ch(x, y, z) {
+    return (x & y) ^ (~x & z);
+  }
+
+  function maj(x, y, z) {
+    return (x & y) ^ (x & z) ^ (y & z);
+  }
+
+  function sigma(x) {
+    return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22);
+  }
+
+  function sigmaPrime(x) {
+    return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25);
+  }
+
+  function littleSigma(x) {
+    return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3;
+  }
+
+  function littleSigmaPrime(x) {
+    return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10;
+  }
+
+  var k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
+           0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
+           0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
+           0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
+           0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
+           0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
+           0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
+           0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
+           0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
+           0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
+           0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
+           0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
+           0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
+           0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
+           0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
+           0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
+
+  function hash(data, offset, length) {
+    // initial hash values
+    var h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372,
+        h3 = 0xa54ff53a, h4 = 0x510e527f, h5 = 0x9b05688c,
+        h6 = 0x1f83d9ab, h7 = 0x5be0cd19;
+    // pre-processing
+    var paddedLength = Math.ceil((length + 9) / 64) * 64;
+    var padded = new Uint8Array(paddedLength);
+    var i, j, n;
+    for (i = 0; i < length; ++i) {
+      padded[i] = data[offset++];
+    }
+    padded[i++] = 0x80;
+    n = paddedLength - 8;
+    while (i < n) {
+      padded[i++] = 0;
+    }
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = (length >>> 29) & 0xFF;
+    padded[i++] = (length >> 21) & 0xFF;
+    padded[i++] = (length >> 13) & 0xFF;
+    padded[i++] = (length >> 5) & 0xFF;
+    padded[i++] = (length << 3) & 0xFF;
+    var w = new Uint32Array(64);
+    // for each 512 bit block
+    for (i = 0; i < paddedLength;) {
+      for (j = 0; j < 16; ++j) {
+        w[j] = (padded[i] << 24 | (padded[i + 1] << 16) |
+               (padded[i + 2] << 8) | (padded[i + 3]));
+        i += 4;
+      }
+
+      for (j = 16; j < 64; ++j) {
+        w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] +
+               littleSigma(w[j - 15]) + w[j - 16] | 0;
+      }
+      var a = h0, b = h1, c = h2, d = h3, e = h4,
+          f = h5, g = h6, h = h7, t1, t2;
+      for (j = 0; j < 64; ++j) {
+        t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j];
+        t2 = sigma(a) + maj(a, b, c);
+        h = g;
+        g = f;
+        f = e;
+        e = (d + t1) | 0;
+        d = c;
+        c = b;
+        b = a;
+        a = (t1 + t2) | 0;
+      }
+      h0 = (h0 + a) | 0;
+      h1 = (h1 + b) | 0;
+      h2 = (h2 + c) | 0;
+      h3 = (h3 + d) | 0;
+      h4 = (h4 + e) | 0;
+      h5 = (h5 + f) | 0;
+      h6 = (h6 + g) | 0;
+      h7 = (h7 + h) | 0;
+    }
+    return new Uint8Array([
+      (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, (h0) & 0xFF,
+      (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, (h1) & 0xFF,
+      (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, (h2) & 0xFF,
+      (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, (h3) & 0xFF,
+      (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, (h4) & 0xFF,
+      (h5 >> 24) & 0xFF, (h5 >> 16) & 0xFF, (h5 >> 8) & 0xFF, (h5) & 0xFF,
+      (h6 >> 24) & 0xFF, (h6 >> 16) & 0xFF, (h6 >> 8) & 0xFF, (h6) & 0xFF,
+      (h7 >> 24) & 0xFF, (h7 >> 16) & 0xFF, (h7 >> 8) & 0xFF, (h7) & 0xFF
+    ]);
+  }
+
+  return hash;
+})();
+
+var calculateSHA512 = (function calculateSHA512Closure() {
+  function ch(result, x, y, z, tmp) {
+    result.assign(x);
+    result.and(y);
+    tmp.assign(x);
+    tmp.not();
+    tmp.and(z);
+    result.xor(tmp);
+  }
+
+  function maj(result, x, y, z, tmp) {
+    result.assign(x);
+    result.and(y);
+    tmp.assign(x);
+    tmp.and(z);
+    result.xor(tmp);
+    tmp.assign(y);
+    tmp.and(z);
+    result.xor(tmp);
+  }
+
+  function sigma(result, x, tmp) {
+    result.assign(x);
+    result.rotateRight(28);
+    tmp.assign(x);
+    tmp.rotateRight(34);
+    result.xor(tmp);
+    tmp.assign(x);
+    tmp.rotateRight(39);
+    result.xor(tmp);
+  }
+
+  function sigmaPrime(result, x, tmp) {
+    result.assign(x);
+    result.rotateRight(14);
+    tmp.assign(x);
+    tmp.rotateRight(18);
+    result.xor(tmp);
+    tmp.assign(x);
+    tmp.rotateRight(41);
+    result.xor(tmp);
+  }
+
+  function littleSigma(result, x, tmp) {
+    result.assign(x);
+    result.rotateRight(1);
+    tmp.assign(x);
+    tmp.rotateRight(8);
+    result.xor(tmp);
+    tmp.assign(x);
+    tmp.shiftRight(7);
+    result.xor(tmp);
+  }
+
+  function littleSigmaPrime(result, x, tmp) {
+    result.assign(x);
+    result.rotateRight(19);
+    tmp.assign(x);
+    tmp.rotateRight(61);
+    result.xor(tmp);
+    tmp.assign(x);
+    tmp.shiftRight(6);
+    result.xor(tmp);
+  }
+
+  var k = [
+    new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd),
+    new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc),
+    new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019),
+    new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118),
+    new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe),
+    new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2),
+    new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1),
+    new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694),
+    new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3),
+    new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65),
+    new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483),
+    new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5),
+    new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210),
+    new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4),
+    new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725),
+    new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70),
+    new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926),
+    new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df),
+    new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8),
+    new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b),
+    new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001),
+    new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30),
+    new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910),
+    new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8),
+    new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53),
+    new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8),
+    new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb),
+    new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3),
+    new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60),
+    new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec),
+    new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9),
+    new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b),
+    new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207),
+    new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178),
+    new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6),
+    new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b),
+    new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493),
+    new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c),
+    new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a),
+    new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)];
+
+  function hash(data, offset, length, mode384) {
+    mode384 = !!mode384;
+    // initial hash values
+    var h0, h1, h2, h3, h4, h5, h6, h7;
+    if (!mode384) {
+      h0 = new Word64(0x6a09e667, 0xf3bcc908);
+      h1 = new Word64(0xbb67ae85, 0x84caa73b);
+      h2 = new Word64(0x3c6ef372, 0xfe94f82b);
+      h3 = new Word64(0xa54ff53a, 0x5f1d36f1);
+      h4 = new Word64(0x510e527f, 0xade682d1);
+      h5 = new Word64(0x9b05688c, 0x2b3e6c1f);
+      h6 = new Word64(0x1f83d9ab, 0xfb41bd6b);
+      h7 = new Word64(0x5be0cd19, 0x137e2179);
+    }
+    else {
+      // SHA384 is exactly the same
+      // except with different starting values and a trimmed result
+      h0 = new Word64(0xcbbb9d5d, 0xc1059ed8);
+      h1 = new Word64(0x629a292a, 0x367cd507);
+      h2 = new Word64(0x9159015a, 0x3070dd17);
+      h3 = new Word64(0x152fecd8, 0xf70e5939);
+      h4 = new Word64(0x67332667, 0xffc00b31);
+      h5 = new Word64(0x8eb44a87, 0x68581511);
+      h6 = new Word64(0xdb0c2e0d, 0x64f98fa7);
+      h7 = new Word64(0x47b5481d, 0xbefa4fa4);
+    }
+
+    // pre-processing
+    var paddedLength = Math.ceil((length + 17) / 128) * 128;
+    var padded = new Uint8Array(paddedLength);
+    var i, j, n;
+    for (i = 0; i < length; ++i) {
+      padded[i] = data[offset++];
+    }
+    padded[i++] = 0x80;
+    n = paddedLength - 16;
+    while (i < n) {
+      padded[i++] = 0;
+    }
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = (length >>> 29) & 0xFF;
+    padded[i++] = (length >> 21) & 0xFF;
+    padded[i++] = (length >> 13) & 0xFF;
+    padded[i++] = (length >> 5) & 0xFF;
+    padded[i++] = (length << 3) & 0xFF;
+
+    var w = new Array(80);
+    for (i = 0; i < 80; i++) {
+      w[i] = new Word64(0, 0);
+    }
+    var a = new Word64(0, 0), b = new Word64(0, 0), c = new Word64(0, 0);
+    var d = new Word64(0, 0), e = new Word64(0, 0), f = new Word64(0, 0);
+    var g = new Word64(0, 0), h = new Word64(0, 0);
+    var t1 = new Word64(0, 0), t2 = new Word64(0, 0);
+    var tmp1 = new Word64(0, 0), tmp2 = new Word64(0, 0), tmp3;
+
+    // for each 1024 bit block
+    for (i = 0; i < paddedLength;) {
+      for (j = 0; j < 16; ++j) {
+        w[j].high = (padded[i] << 24) | (padded[i + 1] << 16) |
+                    (padded[i + 2] << 8) | (padded[i + 3]);
+        w[j].low = (padded[i + 4]) << 24 | (padded[i + 5]) << 16 |
+                   (padded[i + 6]) << 8 | (padded[i + 7]);
+        i += 8;
+      }
+      for (j = 16; j < 80; ++j) {
+        tmp3 = w[j];
+        littleSigmaPrime(tmp3, w[j - 2], tmp2);
+        tmp3.add(w[j - 7]);
+        littleSigma(tmp1, w[j - 15], tmp2);
+        tmp3.add(tmp1);
+        tmp3.add(w[j - 16]);
+      }
+
+      a.assign(h0); b.assign(h1); c.assign(h2); d.assign(h3);
+      e.assign(h4); f.assign(h5); g.assign(h6); h.assign(h7);
+      for (j = 0; j < 80; ++j) {
+        t1.assign(h);
+        sigmaPrime(tmp1, e, tmp2);
+        t1.add(tmp1);
+        ch(tmp1, e, f, g, tmp2);
+        t1.add(tmp1);
+        t1.add(k[j]);
+        t1.add(w[j]);
+
+        sigma(t2, a, tmp2);
+        maj(tmp1, a, b, c, tmp2);
+        t2.add(tmp1);
+
+        tmp3 = h;
+        h = g;
+        g = f;
+        f = e;
+        d.add(t1);
+        e = d;
+        d = c;
+        c = b;
+        b = a;
+        tmp3.assign(t1);
+        tmp3.add(t2);
+        a = tmp3;
+      }
+      h0.add(a);
+      h1.add(b);
+      h2.add(c);
+      h3.add(d);
+      h4.add(e);
+      h5.add(f);
+      h6.add(g);
+      h7.add(h);
+    }
+
+    var result;
+    if (!mode384) {
+      result = new Uint8Array(64);
+      h0.copyTo(result,0);
+      h1.copyTo(result,8);
+      h2.copyTo(result,16);
+      h3.copyTo(result,24);
+      h4.copyTo(result,32);
+      h5.copyTo(result,40);
+      h6.copyTo(result,48);
+      h7.copyTo(result,56);
+    }
+    else {
+      result = new Uint8Array(48);
+      h0.copyTo(result,0);
+      h1.copyTo(result,8);
+      h2.copyTo(result,16);
+      h3.copyTo(result,24);
+      h4.copyTo(result,32);
+      h5.copyTo(result,40);
+    }
+    return result;
+  }
+
+  return hash;
+})();
+var calculateSHA384 = (function calculateSHA384Closure() {
+  function hash(data, offset, length) {
+    return calculateSHA512(data, offset, length, true);
+  }
+
+  return hash;
+})();
+var NullCipher = (function NullCipherClosure() {
+  function NullCipher() {
+  }
+
+  NullCipher.prototype = {
+    decryptBlock: function NullCipher_decryptBlock(data) {
+      return data;
+    }
+  };
+
+  return NullCipher;
+})();
+
+var AES128Cipher = (function AES128CipherClosure() {
+  var rcon = new Uint8Array([
+    0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c,
+    0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a,
+    0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd,
+    0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a,
+    0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+    0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6,
+    0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72,
+    0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc,
+    0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10,
+    0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e,
+    0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5,
+    0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94,
+    0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02,
+    0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d,
+    0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d,
+    0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f,
+    0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb,
+    0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c,
+    0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a,
+    0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd,
+    0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a,
+    0x74, 0xe8, 0xcb, 0x8d]);
+
+  var s = new Uint8Array([
+    0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b,
+    0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
+    0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26,
+    0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
+    0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2,
+    0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
+    0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed,
+    0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
+    0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f,
+    0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
+    0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec,
+    0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
+    0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14,
+    0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
+    0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d,
+    0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
+    0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f,
+    0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
+    0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11,
+    0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
+    0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f,
+    0xb0, 0x54, 0xbb, 0x16]);
+
+  var inv_s = new Uint8Array([
+    0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e,
+    0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
+    0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32,
+    0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
+    0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49,
+    0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
+    0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50,
+    0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
+    0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05,
+    0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
+    0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41,
+    0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
+    0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8,
+    0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
+    0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b,
+    0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
+    0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59,
+    0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
+    0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d,
+    0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
+    0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63,
+    0x55, 0x21, 0x0c, 0x7d]);
+  var mixCol = new Uint8Array(256);
+  for (var i = 0; i < 256; i++) {
+    if (i < 128) {
+      mixCol[i] = i << 1;
+    } else {
+      mixCol[i] = (i << 1) ^ 0x1b;
+    }
+  }
+  var mix = new Uint32Array([
+    0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927,
+    0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45,
+    0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb,
+    0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381,
+    0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf,
+    0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66,
+    0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28,
+    0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012,
+    0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec,
+    0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e,
+    0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd,
+    0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7,
+    0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89,
+    0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b,
+    0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815,
+    0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f,
+    0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa,
+    0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8,
+    0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36,
+    0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c,
+    0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742,
+    0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea,
+    0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4,
+    0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e,
+    0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360,
+    0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502,
+    0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87,
+    0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd,
+    0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3,
+    0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621,
+    0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f,
+    0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55,
+    0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26,
+    0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844,
+    0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba,
+    0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480,
+    0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce,
+    0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67,
+    0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929,
+    0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713,
+    0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed,
+    0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f,
+    0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]);
+
+  function expandKey128(cipherKey) {
+    var b = 176, result = new Uint8Array(b);
+    result.set(cipherKey);
+    for (var j = 16, i = 1; j < b; ++i) {
+      // RotWord
+      var t1 = result[j - 3], t2 = result[j - 2],
+          t3 = result[j - 1], t4 = result[j - 4];
+      // SubWord
+      t1 = s[t1];
+      t2 = s[t2];
+      t3 = s[t3];
+      t4 = s[t4];
+      // Rcon
+      t1 = t1 ^ rcon[i];
+      for (var n = 0; n < 4; ++n) {
+        result[j] = (t1 ^= result[j - 16]);
+        j++;
+        result[j] = (t2 ^= result[j - 16]);
+        j++;
+        result[j] = (t3 ^= result[j - 16]);
+        j++;
+        result[j] = (t4 ^= result[j - 16]);
+        j++;
+      }
+    }
+    return result;
+  }
+
+  function decrypt128(input, key) {
+    var state = new Uint8Array(16);
+    state.set(input);
+    var i, j, k;
+    var t, u, v;
+    // AddRoundKey
+    for (j = 0, k = 160; j < 16; ++j, ++k) {
+      state[j] ^= key[k];
+    }
+    for (i = 9; i >= 1; --i) {
+      // InvShiftRows
+      t = state[13];
+      state[13] = state[9];
+      state[9] = state[5];
+      state[5] = state[1];
+      state[1] = t;
+      t = state[14];
+      u = state[10];
+      state[14] = state[6];
+      state[10] = state[2];
+      state[6] = t;
+      state[2] = u;
+      t = state[15];
+      u = state[11];
+      v = state[7];
+      state[15] = state[3];
+      state[11] = t;
+      state[7] = u;
+      state[3] = v;
+      // InvSubBytes
+      for (j = 0; j < 16; ++j) {
+        state[j] = inv_s[state[j]];
+      }
+      // AddRoundKey
+      for (j = 0, k = i * 16; j < 16; ++j, ++k) {
+        state[j] ^= key[k];
+      }
+      // InvMixColumns
+      for (j = 0; j < 16; j += 4) {
+        var s0 = mix[state[j]], s1 = mix[state[j + 1]],
+          s2 = mix[state[j + 2]], s3 = mix[state[j + 3]];
+        t = (s0 ^ (s1 >>> 8) ^ (s1 << 24) ^ (s2 >>> 16) ^ (s2 << 16) ^
+          (s3 >>> 24) ^ (s3 << 8));
+        state[j] = (t >>> 24) & 0xFF;
+        state[j + 1] = (t >> 16) & 0xFF;
+        state[j + 2] = (t >> 8) & 0xFF;
+        state[j + 3] = t & 0xFF;
+      }
+    }
+    // InvShiftRows
+    t = state[13];
+    state[13] = state[9];
+    state[9] = state[5];
+    state[5] = state[1];
+    state[1] = t;
+    t = state[14];
+    u = state[10];
+    state[14] = state[6];
+    state[10] = state[2];
+    state[6] = t;
+    state[2] = u;
+    t = state[15];
+    u = state[11];
+    v = state[7];
+    state[15] = state[3];
+    state[11] = t;
+    state[7] = u;
+    state[3] = v;
+    for (j = 0; j < 16; ++j) {
+      // InvSubBytes
+      state[j] = inv_s[state[j]];
+      // AddRoundKey
+      state[j] ^= key[j];
+    }
+    return state;
+  }
+
+  function encrypt128(input, key) {
+    var t, u, v, k;
+    var state = new Uint8Array(16);
+    state.set(input);
+    for (j = 0; j < 16; ++j) {
+      // AddRoundKey
+      state[j] ^= key[j];
+    }
+
+    for (i = 1; i < 10; i++) {
+      //SubBytes
+      for (j = 0; j < 16; ++j) {
+        state[j] = s[state[j]];
+      }
+      //ShiftRows
+      v = state[1];
+      state[1] = state[5];
+      state[5] = state[9];
+      state[9] = state[13];
+      state[13] = v;
+      v = state[2];
+      u = state[6];
+      state[2] = state[10];
+      state[6] = state[14];
+      state[10] = v;
+      state[14] = u;
+      v = state[3];
+      u = state[7];
+      t = state[11];
+      state[3] = state[15];
+      state[7] = v;
+      state[11] = u;
+      state[15] = t;
+      //MixColumns
+      for (var j = 0; j < 16; j += 4) {
+        var s0 = state[j + 0], s1 = state[j + 1];
+        var s2 = state[j + 2], s3 = state[j + 3];
+        t = s0 ^ s1 ^ s2 ^ s3;
+        state[j + 0] ^= t ^ mixCol[s0 ^ s1];
+        state[j + 1] ^= t ^ mixCol[s1 ^ s2];
+        state[j + 2] ^= t ^ mixCol[s2 ^ s3];
+        state[j + 3] ^= t ^ mixCol[s3 ^ s0];
+      }
+      //AddRoundKey
+      for (j = 0, k = i * 16; j < 16; ++j, ++k) {
+        state[j] ^= key[k];
+      }
+    }
+
+    //SubBytes
+    for (j = 0; j < 16; ++j) {
+      state[j] = s[state[j]];
+    }
+    //ShiftRows
+    v = state[1];
+    state[1] = state[5];
+    state[5] = state[9];
+    state[9] = state[13];
+    state[13] = v;
+    v = state[2];
+    u = state[6];
+    state[2] = state[10];
+    state[6] = state[14];
+    state[10] = v;
+    state[14] = u;
+    v = state[3];
+    u = state[7];
+    t = state[11];
+    state[3] = state[15];
+    state[7] = v;
+    state[11] = u;
+    state[15] = t;
+    //AddRoundKey
+    for (j = 0, k = 160; j < 16; ++j, ++k) {
+      state[j] ^= key[k];
+    }
+    return state;
+  }
+
+  function AES128Cipher(key) {
+    this.key = expandKey128(key);
+    this.buffer = new Uint8Array(16);
+    this.bufferPosition = 0;
+  }
+
+  function decryptBlock2(data, finalize) {
+    var i, j, ii, sourceLength = data.length,
+        buffer = this.buffer, bufferLength = this.bufferPosition,
+        result = [], iv = this.iv;
+    for (i = 0; i < sourceLength; ++i) {
+      buffer[bufferLength] = data[i];
+      ++bufferLength;
+      if (bufferLength < 16) {
+        continue;
+      }
+      // buffer is full, decrypting
+      var plain = decrypt128(buffer, this.key);
+      // xor-ing the IV vector to get plain text
+      for (j = 0; j < 16; ++j) {
+        plain[j] ^= iv[j];
+      }
+      iv = buffer;
+      result.push(plain);
+      buffer = new Uint8Array(16);
+      bufferLength = 0;
+    }
+    // saving incomplete buffer
+    this.buffer = buffer;
+    this.bufferLength = bufferLength;
+    this.iv = iv;
+    if (result.length === 0) {
+      return new Uint8Array([]);
+    }
+    // combining plain text blocks into one
+    var outputLength = 16 * result.length;
+    if (finalize) {
+      // undo a padding that is described in RFC 2898
+      var lastBlock = result[result.length - 1];
+      var psLen = lastBlock[15];
+      if (psLen <= 16) {
+        for (i = 15, ii = 16 - psLen; i >= ii; --i) {
+          if (lastBlock[i] !== psLen) {
+            // Invalid padding, assume that the block has no padding.
+            psLen = 0;
+            break;
+          }
+        }
+        outputLength -= psLen;
+        result[result.length - 1] = lastBlock.subarray(0, 16 - psLen);
+      }
+    }
+    var output = new Uint8Array(outputLength);
+    for (i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
+      output.set(result[i], j);
+    }
+    return output;
+  }
+
+  AES128Cipher.prototype = {
+    decryptBlock: function AES128Cipher_decryptBlock(data, finalize) {
+      var i, sourceLength = data.length;
+      var buffer = this.buffer, bufferLength = this.bufferPosition;
+      // waiting for IV values -- they are at the start of the stream
+      for (i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) {
+        buffer[bufferLength] = data[i];
+      }
+      if (bufferLength < 16) {
+        // need more data
+        this.bufferLength = bufferLength;
+        return new Uint8Array([]);
+      }
+      this.iv = buffer;
+      this.buffer = new Uint8Array(16);
+      this.bufferLength = 0;
+      // starting decryption
+      this.decryptBlock = decryptBlock2;
+      return this.decryptBlock(data.subarray(16), finalize);
+    },
+    encrypt: function AES128Cipher_encrypt(data, iv) {
+      var i, j, ii, sourceLength = data.length,
+          buffer = this.buffer, bufferLength = this.bufferPosition,
+          result = [];
+      if (!iv) {
+        iv = new Uint8Array(16);
+      }
+      for (i = 0; i < sourceLength; ++i) {
+        buffer[bufferLength] = data[i];
+        ++bufferLength;
+        if (bufferLength < 16) {
+          continue;
+        }
+        for (j = 0; j < 16; ++j) {
+          buffer[j] ^= iv[j];
+        }
+
+        // buffer is full, encrypting
+        var cipher = encrypt128(buffer, this.key);
+        iv = cipher;
+        result.push(cipher);
+        buffer = new Uint8Array(16);
+        bufferLength = 0;
+      }
+      // saving incomplete buffer
+      this.buffer = buffer;
+      this.bufferLength = bufferLength;
+      this.iv = iv;
+      if (result.length === 0) {
+        return new Uint8Array([]);
+      }
+      // combining plain text blocks into one
+      var outputLength = 16 * result.length;
+      var output = new Uint8Array(outputLength);
+      for (i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
+        output.set(result[i], j);
+      }
+      return output;
+    }
+  };
+
+  return AES128Cipher;
+})();
+
+var AES256Cipher = (function AES256CipherClosure() {
+  var rcon = new Uint8Array([
+    0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c,
+    0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a,
+    0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd,
+    0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a,
+    0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+    0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6,
+    0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72,
+    0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc,
+    0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10,
+    0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e,
+    0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5,
+    0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94,
+    0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02,
+    0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d,
+    0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d,
+    0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f,
+    0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb,
+    0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c,
+    0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a,
+    0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd,
+    0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a,
+    0x74, 0xe8, 0xcb, 0x8d]);
+
+  var s = new Uint8Array([
+    0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b,
+    0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
+    0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26,
+    0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
+    0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2,
+    0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
+    0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed,
+    0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
+    0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f,
+    0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
+    0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec,
+    0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
+    0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14,
+    0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
+    0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d,
+    0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
+    0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f,
+    0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
+    0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11,
+    0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
+    0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f,
+    0xb0, 0x54, 0xbb, 0x16]);
+
+  var inv_s = new Uint8Array([
+    0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e,
+    0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
+    0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32,
+    0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
+    0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49,
+    0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
+    0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50,
+    0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
+    0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05,
+    0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
+    0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41,
+    0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
+    0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8,
+    0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
+    0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b,
+    0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
+    0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59,
+    0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
+    0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d,
+    0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
+    0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63,
+    0x55, 0x21, 0x0c, 0x7d]);
+
+  var mixCol = new Uint8Array(256);
+  for (var i = 0; i < 256; i++) {
+    if (i < 128) {
+      mixCol[i] = i << 1;
+    } else {
+      mixCol[i] = (i << 1) ^ 0x1b;
+    }
+  }
+  var mix = new Uint32Array([
+    0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927,
+    0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45,
+    0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb,
+    0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381,
+    0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf,
+    0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66,
+    0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28,
+    0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012,
+    0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec,
+    0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e,
+    0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd,
+    0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7,
+    0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89,
+    0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b,
+    0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815,
+    0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f,
+    0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa,
+    0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8,
+    0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36,
+    0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c,
+    0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742,
+    0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea,
+    0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4,
+    0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e,
+    0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360,
+    0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502,
+    0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87,
+    0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd,
+    0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3,
+    0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621,
+    0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f,
+    0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55,
+    0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26,
+    0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844,
+    0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba,
+    0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480,
+    0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce,
+    0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67,
+    0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929,
+    0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713,
+    0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed,
+    0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f,
+    0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]);
+
+  function expandKey256(cipherKey) {
+    var b = 240, result = new Uint8Array(b);
+    var r = 1;
+
+    result.set(cipherKey);
+    for (var j = 32, i = 1; j < b; ++i) {
+      if (j % 32 === 16) {
+        t1 = s[t1];
+        t2 = s[t2];
+        t3 = s[t3];
+        t4 = s[t4];
+      } else if (j % 32 === 0) {
+        // RotWord
+        var t1 = result[j - 3], t2 = result[j - 2],
+          t3 = result[j - 1], t4 = result[j - 4];
+        // SubWord
+        t1 = s[t1];
+        t2 = s[t2];
+        t3 = s[t3];
+        t4 = s[t4];
+        // Rcon
+        t1 = t1 ^ r;
+        if ((r <<= 1) >= 256) {
+          r = (r ^ 0x1b) & 0xFF;
+        }
+      }
+
+      for (var n = 0; n < 4; ++n) {
+        result[j] = (t1 ^= result[j - 32]);
+        j++;
+        result[j] = (t2 ^= result[j - 32]);
+        j++;
+        result[j] = (t3 ^= result[j - 32]);
+        j++;
+        result[j] = (t4 ^= result[j - 32]);
+        j++;
+      }
+    }
+    return result;
+  }
+
+  function decrypt256(input, key) {
+    var state = new Uint8Array(16);
+    state.set(input);
+    var i, j, k;
+    var t, u, v;
+    // AddRoundKey
+    for (j = 0, k = 224; j < 16; ++j, ++k) {
+      state[j] ^= key[k];
+    }
+    for (i = 13; i >= 1; --i) {
+      // InvShiftRows
+      t = state[13];
+      state[13] = state[9];
+      state[9] = state[5];
+      state[5] = state[1];
+      state[1] = t;
+      t = state[14];
+      u = state[10];
+      state[14] = state[6];
+      state[10] = state[2];
+      state[6] = t;
+      state[2] = u;
+      t = state[15];
+      u = state[11];
+      v = state[7];
+      state[15] = state[3];
+      state[11] = t;
+      state[7] = u;
+      state[3] = v;
+      // InvSubBytes
+      for (j = 0; j < 16; ++j) {
+        state[j] = inv_s[state[j]];
+      }
+      // AddRoundKey
+      for (j = 0, k = i * 16; j < 16; ++j, ++k) {
+        state[j] ^= key[k];
+      }
+      // InvMixColumns
+      for (j = 0; j < 16; j += 4) {
+        var s0 = mix[state[j]], s1 = mix[state[j + 1]],
+            s2 = mix[state[j + 2]], s3 = mix[state[j + 3]];
+        t = (s0 ^ (s1 >>> 8) ^ (s1 << 24) ^ (s2 >>> 16) ^ (s2 << 16) ^
+            (s3 >>> 24) ^ (s3 << 8));
+        state[j] = (t >>> 24) & 0xFF;
+        state[j + 1] = (t >> 16) & 0xFF;
+        state[j + 2] = (t >> 8) & 0xFF;
+        state[j + 3] = t & 0xFF;
+      }
+    }
+    // InvShiftRows
+    t = state[13];
+    state[13] = state[9];
+    state[9] = state[5];
+    state[5] = state[1];
+    state[1] = t;
+    t = state[14];
+    u = state[10];
+    state[14] = state[6];
+    state[10] = state[2];
+    state[6] = t;
+    state[2] = u;
+    t = state[15];
+    u = state[11];
+    v = state[7];
+    state[15] = state[3];
+    state[11] = t;
+    state[7] = u;
+    state[3] = v;
+    for (j = 0; j < 16; ++j) {
+      // InvSubBytes
+      state[j] = inv_s[state[j]];
+      // AddRoundKey
+      state[j] ^= key[j];
+    }
+    return state;
+  }
+
+  function encrypt256(input, key) {
+    var t, u, v, k;
+    var state = new Uint8Array(16);
+    state.set(input);
+    for (j = 0; j < 16; ++j) {
+      // AddRoundKey
+      state[j] ^= key[j];
+    }
+
+    for (i = 1; i < 14; i++) {
+      //SubBytes
+      for (j = 0; j < 16; ++j) {
+        state[j] = s[state[j]];
+      }
+      //ShiftRows
+      v = state[1];
+      state[1] = state[5];
+      state[5] = state[9];
+      state[9] = state[13];
+      state[13] = v;
+      v = state[2];
+      u = state[6];
+      state[2] = state[10];
+      state[6] = state[14];
+      state[10] = v;
+      state[14] = u;
+      v = state[3];
+      u = state[7];
+      t = state[11];
+      state[3] = state[15];
+      state[7] = v;
+      state[11] = u;
+      state[15] = t;
+      //MixColumns
+      for (var j = 0; j < 16; j += 4) {
+        var s0 = state[j + 0], s1 = state[j + 1];
+        var s2 = state[j + 2], s3 = state[j + 3];
+        t = s0 ^ s1 ^ s2 ^ s3;
+        state[j + 0] ^= t ^ mixCol[s0 ^ s1];
+        state[j + 1] ^= t ^ mixCol[s1 ^ s2];
+        state[j + 2] ^= t ^ mixCol[s2 ^ s3];
+        state[j + 3] ^= t ^ mixCol[s3 ^ s0];
+      }
+      //AddRoundKey
+      for (j = 0, k = i * 16; j < 16; ++j, ++k) {
+        state[j] ^= key[k];
+      }
+    }
+
+    //SubBytes
+    for (j = 0; j < 16; ++j) {
+      state[j] = s[state[j]];
+    }
+    //ShiftRows
+    v = state[1];
+    state[1] = state[5];
+    state[5] = state[9];
+    state[9] = state[13];
+    state[13] = v;
+    v = state[2];
+    u = state[6];
+    state[2] = state[10];
+    state[6] = state[14];
+    state[10] = v;
+    state[14] = u;
+    v = state[3];
+    u = state[7];
+    t = state[11];
+    state[3] = state[15];
+    state[7] = v;
+    state[11] = u;
+    state[15] = t;
+    //AddRoundKey
+    for (j = 0, k = 224; j < 16; ++j, ++k) {
+      state[j] ^= key[k];
+    }
+
+    return state;
+
+  }
+
+  function AES256Cipher(key) {
+    this.key = expandKey256(key);
+    this.buffer = new Uint8Array(16);
+    this.bufferPosition = 0;
+  }
+
+  function decryptBlock2(data, finalize) {
+    var i, j, ii, sourceLength = data.length,
+        buffer = this.buffer, bufferLength = this.bufferPosition,
+        result = [], iv = this.iv;
+
+    for (i = 0; i < sourceLength; ++i) {
+      buffer[bufferLength] = data[i];
+      ++bufferLength;
+      if (bufferLength < 16) {
+        continue;
+      }
+      // buffer is full, decrypting
+      var plain = decrypt256(buffer, this.key);
+      // xor-ing the IV vector to get plain text
+      for (j = 0; j < 16; ++j) {
+        plain[j] ^= iv[j];
+      }
+      iv = buffer;
+      result.push(plain);
+      buffer = new Uint8Array(16);
+      bufferLength = 0;
+    }
+    // saving incomplete buffer
+    this.buffer = buffer;
+    this.bufferLength = bufferLength;
+    this.iv = iv;
+    if (result.length === 0) {
+      return new Uint8Array([]);
+    }
+    // combining plain text blocks into one
+    var outputLength = 16 * result.length;
+    if (finalize) {
+      // undo a padding that is described in RFC 2898
+      var lastBlock = result[result.length - 1];
+      var psLen = lastBlock[15];
+      if (psLen <= 16) {
+        for (i = 15, ii = 16 - psLen; i >= ii; --i) {
+          if (lastBlock[i] !== psLen) {
+            // Invalid padding, assume that the block has no padding.
+            psLen = 0;
+            break;
+          }
+        }
+        outputLength -= psLen;
+        result[result.length - 1] = lastBlock.subarray(0, 16 - psLen);
+      }
+    }
+    var output = new Uint8Array(outputLength);
+    for (i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
+      output.set(result[i], j);
+    }
+    return output;
+
+  }
+
+  AES256Cipher.prototype = {
+    decryptBlock: function AES256Cipher_decryptBlock(data, finalize, iv) {
+      var i, sourceLength = data.length;
+      var buffer = this.buffer, bufferLength = this.bufferPosition;
+      // if not supplied an IV wait for IV values
+      // they are at the start of the stream
+      if (iv) {
+        this.iv = iv;
+      } else {
+        for (i = 0; bufferLength < 16 &&
+             i < sourceLength; ++i, ++bufferLength) {
+          buffer[bufferLength] = data[i];
+        }
+        if (bufferLength < 16) {
+          //need more data
+          this.bufferLength = bufferLength;
+          return new Uint8Array([]);
+        }
+        this.iv = buffer;
+        data = data.subarray(16);
+      }
+      this.buffer = new Uint8Array(16);
+      this.bufferLength = 0;
+      // starting decryption
+      this.decryptBlock = decryptBlock2;
+      return this.decryptBlock(data, finalize);
+    },
+    encrypt: function AES256Cipher_encrypt(data, iv) {
+      var i, j, ii, sourceLength = data.length,
+          buffer = this.buffer, bufferLength = this.bufferPosition,
+          result = [];
+      if (!iv) {
+        iv = new Uint8Array(16);
+      }
+      for (i = 0; i < sourceLength; ++i) {
+        buffer[bufferLength] = data[i];
+        ++bufferLength;
+        if (bufferLength < 16) {
+          continue;
+        }
+        for (j = 0; j < 16; ++j) {
+          buffer[j] ^= iv[j];
+        }
+
+        // buffer is full, encrypting
+        var cipher = encrypt256(buffer, this.key);
+        this.iv = cipher;
+        result.push(cipher);
+        buffer = new Uint8Array(16);
+        bufferLength = 0;
+      }
+      // saving incomplete buffer
+      this.buffer = buffer;
+      this.bufferLength = bufferLength;
+      this.iv = iv;
+      if (result.length === 0) {
+        return new Uint8Array([]);
+      }
+      // combining plain text blocks into one
+      var outputLength = 16 * result.length;
+      var output = new Uint8Array(outputLength);
+      for (i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
+        output.set(result[i], j);
+      }
+      return output;
+    }
+  };
+
+  return AES256Cipher;
+})();
+
+var PDF17 = (function PDF17Closure() {
+
+  function compareByteArrays(array1, array2) {
+    if (array1.length !== array2.length) {
+      return false;
+    }
+    for (var i = 0; i < array1.length; i++) {
+      if (array1[i] !== array2[i]) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  function PDF17() {
+  }
+
+  PDF17.prototype = {
+    checkOwnerPassword: function PDF17_checkOwnerPassword(password,
+                                                          ownerValidationSalt,
+                                                          userBytes,
+                                                          ownerPassword) {
+      var hashData = new Uint8Array(password.length + 56);
+      hashData.set(password, 0);
+      hashData.set(ownerValidationSalt, password.length);
+      hashData.set(userBytes, password.length + ownerValidationSalt.length);
+      var result = calculateSHA256(hashData, 0, hashData.length);
+      return compareByteArrays(result, ownerPassword);
+    },
+    checkUserPassword: function PDF17_checkUserPassword(password,
+                                                        userValidationSalt,
+                                                        userPassword) {
+      var hashData = new Uint8Array(password.length + 8);
+      hashData.set(password, 0);
+      hashData.set(userValidationSalt, password.length);
+      var result = calculateSHA256(hashData, 0, hashData.length);
+      return compareByteArrays(result, userPassword);
+    },
+    getOwnerKey: function PDF17_getOwnerKey(password, ownerKeySalt, userBytes,
+                                            ownerEncryption) {
+      var hashData = new Uint8Array(password.length + 56);
+      hashData.set(password, 0);
+      hashData.set(ownerKeySalt, password.length);
+      hashData.set(userBytes, password.length + ownerKeySalt.length);
+      var key = calculateSHA256(hashData, 0, hashData.length);
+      var cipher = new AES256Cipher(key);
+      return cipher.decryptBlock(ownerEncryption,
+                                 false,
+                                 new Uint8Array(16));
+
+    },
+    getUserKey: function PDF17_getUserKey(password, userKeySalt,
+                                          userEncryption) {
+      var hashData = new Uint8Array(password.length + 8);
+      hashData.set(password, 0);
+      hashData.set(userKeySalt, password.length);
+      //key is the decryption key for the UE string
+      var key = calculateSHA256(hashData, 0, hashData.length);
+      var cipher = new AES256Cipher(key);
+      return cipher.decryptBlock(userEncryption,
+                                 false,
+                                 new Uint8Array(16));
+    }
+  };
+  return PDF17;
+})();
+
+var PDF20 = (function PDF20Closure() {
+
+  function concatArrays(array1, array2) {
+    var t = new Uint8Array(array1.length + array2.length);
+    t.set(array1, 0);
+    t.set(array2, array1.length);
+    return t;
+  }
+
+  function calculatePDF20Hash(password, input, userBytes) {
+    //This refers to Algorithm 2.B as defined in ISO 32000-2
+    var k = calculateSHA256(input, 0, input.length).subarray(0, 32);
+    var e = [0];
+    var i = 0;
+    while (i < 64 || e[e.length - 1] > i - 32) {
+      var arrayLength = password.length + k.length + userBytes.length;
+
+      var k1 = new Uint8Array(arrayLength * 64);
+      var array = concatArrays(password, k);
+      array = concatArrays(array, userBytes);
+      for (var j = 0, pos = 0; j < 64; j++, pos += arrayLength) {
+        k1.set(array, pos);
+      }
+      //AES128 CBC NO PADDING with
+      //first 16 bytes of k as the key and the second 16 as the iv.
+      var cipher = new AES128Cipher(k.subarray(0, 16));
+      e = cipher.encrypt(k1, k.subarray(16, 32));
+      //Now we have to take the first 16 bytes of an unsigned
+      //big endian integer... and compute the remainder
+      //modulo 3.... That is a fairly large number and
+      //JavaScript isn't going to handle that well...
+      //So we're using a trick that allows us to perform
+      //modulo math byte by byte
+      var remainder = 0;
+      for (var z = 0; z < 16; z++) {
+        remainder *= (256 % 3);
+        remainder %= 3;
+        remainder += ((e[z] >>> 0) % 3);
+        remainder %= 3;
+      }
+      if (remainder === 0) {
+        k = calculateSHA256(e, 0, e.length);
+      }
+      else if (remainder === 1) {
+        k = calculateSHA384(e, 0, e.length);
+      }
+      else if (remainder === 2) {
+        k = calculateSHA512(e, 0, e.length);
+      }
+      i++;
+    }
+    return k.subarray(0, 32);
+  }
+
+  function PDF20() {
+  }
+
+  function compareByteArrays(array1, array2) {
+    if (array1.length !== array2.length) {
+      return false;
+    }
+    for (var i = 0; i < array1.length; i++) {
+      if (array1[i] !== array2[i]) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  PDF20.prototype = {
+    hash: function PDF20_hash(password, concatBytes, userBytes) {
+      return calculatePDF20Hash(password, concatBytes, userBytes);
+    },
+    checkOwnerPassword: function PDF20_checkOwnerPassword(password,
+                                                          ownerValidationSalt,
+                                                          userBytes,
+                                                          ownerPassword) {
+      var hashData = new Uint8Array(password.length + 56);
+      hashData.set(password, 0);
+      hashData.set(ownerValidationSalt, password.length);
+      hashData.set(userBytes, password.length + ownerValidationSalt.length);
+      var result = calculatePDF20Hash(password, hashData, userBytes);
+      return compareByteArrays(result, ownerPassword);
+    },
+    checkUserPassword: function PDF20_checkUserPassword(password,
+                                                        userValidationSalt,
+                                                        userPassword) {
+      var hashData = new Uint8Array(password.length + 8);
+      hashData.set(password, 0);
+      hashData.set(userValidationSalt, password.length);
+      var result = calculatePDF20Hash(password, hashData, []);
+      return compareByteArrays(result, userPassword);
+    },
+    getOwnerKey: function PDF20_getOwnerKey(password, ownerKeySalt, userBytes,
+                                            ownerEncryption) {
+      var hashData = new Uint8Array(password.length + 56);
+      hashData.set(password, 0);
+      hashData.set(ownerKeySalt, password.length);
+      hashData.set(userBytes, password.length + ownerKeySalt.length);
+      var key = calculatePDF20Hash(password, hashData, userBytes);
+      var cipher = new AES256Cipher(key);
+      return cipher.decryptBlock(ownerEncryption,
+                                 false,
+                                 new Uint8Array(16));
+
+    },
+    getUserKey: function PDF20_getUserKey(password, userKeySalt,
+                                          userEncryption) {
+      var hashData = new Uint8Array(password.length + 8);
+      hashData.set(password, 0);
+      hashData.set(userKeySalt, password.length);
+      //key is the decryption key for the UE string
+      var key = calculatePDF20Hash(password, hashData, []);
+      var cipher = new AES256Cipher(key);
+      return cipher.decryptBlock(userEncryption,
+                                 false,
+                                 new Uint8Array(16));
+    }
+  };
+  return PDF20;
+})();
+
+var CipherTransform = (function CipherTransformClosure() {
+  function CipherTransform(stringCipherConstructor, streamCipherConstructor) {
+    this.stringCipherConstructor = stringCipherConstructor;
+    this.streamCipherConstructor = streamCipherConstructor;
+  }
+
+  CipherTransform.prototype = {
+    createStream: function CipherTransform_createStream(stream, length) {
+      var cipher = new this.streamCipherConstructor();
+      return new DecryptStream(stream, length,
+        function cipherTransformDecryptStream(data, finalize) {
+          return cipher.decryptBlock(data, finalize);
+        }
+      );
+    },
+    decryptString: function CipherTransform_decryptString(s) {
+      var cipher = new this.stringCipherConstructor();
+      var data = stringToBytes(s);
+      data = cipher.decryptBlock(data, true);
+      return bytesToString(data);
+    }
+  };
+  return CipherTransform;
+})();
+
+var CipherTransformFactory = (function CipherTransformFactoryClosure() {
+  var defaultPasswordBytes = new Uint8Array([
+    0x28, 0xBF, 0x4E, 0x5E, 0x4E, 0x75, 0x8A, 0x41,
+    0x64, 0x00, 0x4E, 0x56, 0xFF, 0xFA, 0x01, 0x08,
+    0x2E, 0x2E, 0x00, 0xB6, 0xD0, 0x68, 0x3E, 0x80,
+    0x2F, 0x0C, 0xA9, 0xFE, 0x64, 0x53, 0x69, 0x7A]);
+
+  function createEncryptionKey20(revision, password, ownerPassword,
+                                 ownerValidationSalt, ownerKeySalt, uBytes,
+                                 userPassword, userValidationSalt, userKeySalt,
+                                 ownerEncryption, userEncryption, perms) {
+    if (password) {
+      var passwordLength = Math.min(127, password.length);
+      password = password.subarray(0, passwordLength);
+    } else {
+      password = [];
+    }
+    var pdfAlgorithm;
+    if (revision === 6) {
+      pdfAlgorithm = new PDF20();
+    } else {
+      pdfAlgorithm = new PDF17();
+    }
+
+    if (pdfAlgorithm) {
+      if (pdfAlgorithm.checkUserPassword(password, userValidationSalt,
+                                         userPassword)) {
+        return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption);
+      } else if (pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt,
+                                                 uBytes,
+                                                 ownerPassword)) {
+        return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes,
+                                        ownerEncryption);
+      }
+    }
+
+    return null;
+  }
+
+  function prepareKeyData(fileId, password, ownerPassword, userPassword,
+                          flags, revision, keyLength, encryptMetadata) {
+    var hashDataSize = 40 + ownerPassword.length + fileId.length;
+    var hashData = new Uint8Array(hashDataSize), i = 0, j, n;
+    if (password) {
+      n = Math.min(32, password.length);
+      for (; i < n; ++i) {
+        hashData[i] = password[i];
+      }
+    }
+    j = 0;
+    while (i < 32) {
+      hashData[i++] = defaultPasswordBytes[j++];
+    }
+    // as now the padded password in the hashData[0..i]
+    for (j = 0, n = ownerPassword.length; j < n; ++j) {
+      hashData[i++] = ownerPassword[j];
+    }
+    hashData[i++] = flags & 0xFF;
+    hashData[i++] = (flags >> 8) & 0xFF;
+    hashData[i++] = (flags >> 16) & 0xFF;
+    hashData[i++] = (flags >>> 24) & 0xFF;
+    for (j = 0, n = fileId.length; j < n; ++j) {
+      hashData[i++] = fileId[j];
+    }
+    if (revision >= 4 && !encryptMetadata) {
+      hashData[i++] = 0xFF;
+      hashData[i++] = 0xFF;
+      hashData[i++] = 0xFF;
+      hashData[i++] = 0xFF;
+    }
+    var hash = calculateMD5(hashData, 0, i);
+    var keyLengthInBytes = keyLength >> 3;
+    if (revision >= 3) {
+      for (j = 0; j < 50; ++j) {
+        hash = calculateMD5(hash, 0, keyLengthInBytes);
+      }
+    }
+    var encryptionKey = hash.subarray(0, keyLengthInBytes);
+    var cipher, checkData;
+
+    if (revision >= 3) {
+      for (i = 0; i < 32; ++i) {
+        hashData[i] = defaultPasswordBytes[i];
+      }
+      for (j = 0, n = fileId.length; j < n; ++j) {
+        hashData[i++] = fileId[j];
+      }
+      cipher = new ARCFourCipher(encryptionKey);
+      checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i));
+      n = encryptionKey.length;
+      var derivedKey = new Uint8Array(n), k;
+      for (j = 1; j <= 19; ++j) {
+        for (k = 0; k < n; ++k) {
+          derivedKey[k] = encryptionKey[k] ^ j;
+        }
+        cipher = new ARCFourCipher(derivedKey);
+        checkData = cipher.encryptBlock(checkData);
+      }
+      for (j = 0, n = checkData.length; j < n; ++j) {
+        if (userPassword[j] !== checkData[j]) {
+          return null;
+        }
+      }
+    } else {
+      cipher = new ARCFourCipher(encryptionKey);
+      checkData = cipher.encryptBlock(defaultPasswordBytes);
+      for (j = 0, n = checkData.length; j < n; ++j) {
+        if (userPassword[j] !== checkData[j]) {
+          return null;
+        }
+      }
+    }
+    return encryptionKey;
+  }
+
+  function decodeUserPassword(password, ownerPassword, revision, keyLength) {
+    var hashData = new Uint8Array(32), i = 0, j, n;
+    n = Math.min(32, password.length);
+    for (; i < n; ++i) {
+      hashData[i] = password[i];
+    }
+    j = 0;
+    while (i < 32) {
+      hashData[i++] = defaultPasswordBytes[j++];
+    }
+    var hash = calculateMD5(hashData, 0, i);
+    var keyLengthInBytes = keyLength >> 3;
+    if (revision >= 3) {
+      for (j = 0; j < 50; ++j) {
+        hash = calculateMD5(hash, 0, hash.length);
+      }
+    }
+
+    var cipher, userPassword;
+    if (revision >= 3) {
+      userPassword = ownerPassword;
+      var derivedKey = new Uint8Array(keyLengthInBytes), k;
+      for (j = 19; j >= 0; j--) {
+        for (k = 0; k < keyLengthInBytes; ++k) {
+          derivedKey[k] = hash[k] ^ j;
+        }
+        cipher = new ARCFourCipher(derivedKey);
+        userPassword = cipher.encryptBlock(userPassword);
+      }
+    } else {
+      cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes));
+      userPassword = cipher.encryptBlock(ownerPassword);
+    }
+    return userPassword;
+  }
+
+  var identityName = Name.get('Identity');
+
+  function CipherTransformFactory(dict, fileId, password) {
+    var filter = dict.get('Filter');
+    if (!isName(filter) || filter.name !== 'Standard') {
+      error('unknown encryption method');
+    }
+    this.dict = dict;
+    var algorithm = dict.get('V');
+    if (!isInt(algorithm) ||
+        (algorithm !== 1 && algorithm !== 2 && algorithm !== 4 &&
+        algorithm !== 5)) {
+      error('unsupported encryption algorithm');
+    }
+    this.algorithm = algorithm;
+    var keyLength = dict.get('Length') || 40;
+    if (!isInt(keyLength) ||
+        keyLength < 40 || (keyLength % 8) !== 0) {
+      error('invalid key length');
+    }
+
+    // prepare keys
+    var ownerPassword = stringToBytes(dict.get('O')).subarray(0, 32);
+    var userPassword = stringToBytes(dict.get('U')).subarray(0, 32);
+    var flags = dict.get('P');
+    var revision = dict.get('R');
+    // meaningful when V is 4 or 5
+    var encryptMetadata = ((algorithm === 4 || algorithm === 5) &&
+                           dict.get('EncryptMetadata') !== false);
+    this.encryptMetadata = encryptMetadata;
+
+    var fileIdBytes = stringToBytes(fileId);
+    var passwordBytes;
+    if (password) {
+      if (revision === 6) {
+        try {
+          password = utf8StringToString(password);
+        } catch (ex) {
+          warn('CipherTransformFactory: ' +
+               'Unable to convert UTF8 encoded password.');
+        }
+      }
+      passwordBytes = stringToBytes(password);
+    }
+
+    var encryptionKey;
+    if (algorithm !== 5) {
+      encryptionKey = prepareKeyData(fileIdBytes, passwordBytes,
+                                     ownerPassword, userPassword, flags,
+                                     revision, keyLength, encryptMetadata);
+    }
+    else {
+      var ownerValidationSalt = stringToBytes(dict.get('O')).subarray(32, 40);
+      var ownerKeySalt = stringToBytes(dict.get('O')).subarray(40, 48);
+      var uBytes = stringToBytes(dict.get('U')).subarray(0, 48);
+      var userValidationSalt = stringToBytes(dict.get('U')).subarray(32, 40);
+      var userKeySalt = stringToBytes(dict.get('U')).subarray(40, 48);
+      var ownerEncryption = stringToBytes(dict.get('OE'));
+      var userEncryption = stringToBytes(dict.get('UE'));
+      var perms = stringToBytes(dict.get('Perms'));
+      encryptionKey =
+        createEncryptionKey20(revision, passwordBytes,
+          ownerPassword, ownerValidationSalt,
+          ownerKeySalt, uBytes,
+          userPassword, userValidationSalt,
+          userKeySalt, ownerEncryption,
+          userEncryption, perms);
+    }
+    if (!encryptionKey && !password) {
+      throw new PasswordException('No password given',
+                                  PasswordResponses.NEED_PASSWORD);
+    } else if (!encryptionKey && password) {
+      // Attempting use the password as an owner password
+      var decodedPassword = decodeUserPassword(passwordBytes, ownerPassword,
+                                               revision, keyLength);
+      encryptionKey = prepareKeyData(fileIdBytes, decodedPassword,
+                                     ownerPassword, userPassword, flags,
+                                     revision, keyLength, encryptMetadata);
+    }
+
+    if (!encryptionKey) {
+      throw new PasswordException('Incorrect Password',
+                                  PasswordResponses.INCORRECT_PASSWORD);
+    }
+
+    this.encryptionKey = encryptionKey;
+
+    if (algorithm >= 4) {
+      this.cf = dict.get('CF');
+      this.stmf = dict.get('StmF') || identityName;
+      this.strf = dict.get('StrF') || identityName;
+      this.eff = dict.get('EFF') || this.stmf;
+    }
+  }
+
+  function buildObjectKey(num, gen, encryptionKey, isAes) {
+    var key = new Uint8Array(encryptionKey.length + 9), i, n;
+    for (i = 0, n = encryptionKey.length; i < n; ++i) {
+      key[i] = encryptionKey[i];
+    }
+    key[i++] = num & 0xFF;
+    key[i++] = (num >> 8) & 0xFF;
+    key[i++] = (num >> 16) & 0xFF;
+    key[i++] = gen & 0xFF;
+    key[i++] = (gen >> 8) & 0xFF;
+    if (isAes) {
+      key[i++] = 0x73;
+      key[i++] = 0x41;
+      key[i++] = 0x6C;
+      key[i++] = 0x54;
+    }
+    var hash = calculateMD5(key, 0, i);
+    return hash.subarray(0, Math.min(encryptionKey.length + 5, 16));
+  }
+
+  function buildCipherConstructor(cf, name, num, gen, key) {
+    var cryptFilter = cf.get(name.name);
+    var cfm;
+    if (cryptFilter !== null && cryptFilter !== undefined) {
+      cfm = cryptFilter.get('CFM');
+    }
+    if (!cfm || cfm.name === 'None') {
+      return function cipherTransformFactoryBuildCipherConstructorNone() {
+        return new NullCipher();
+      };
+    }
+    if ('V2' === cfm.name) {
+      return function cipherTransformFactoryBuildCipherConstructorV2() {
+        return new ARCFourCipher(buildObjectKey(num, gen, key, false));
+      };
+    }
+    if ('AESV2' === cfm.name) {
+      return function cipherTransformFactoryBuildCipherConstructorAESV2() {
+        return new AES128Cipher(buildObjectKey(num, gen, key, true));
+      };
+    }
+    if ('AESV3' === cfm.name) {
+      return function cipherTransformFactoryBuildCipherConstructorAESV3() {
+        return new AES256Cipher(key);
+      };
+    }
+    error('Unknown crypto method');
+  }
+
+  CipherTransformFactory.prototype = {
+    createCipherTransform:
+        function CipherTransformFactory_createCipherTransform(num, gen) {
+      if (this.algorithm === 4 || this.algorithm === 5) {
+        return new CipherTransform(
+          buildCipherConstructor(this.cf, this.stmf,
+                                 num, gen, this.encryptionKey),
+          buildCipherConstructor(this.cf, this.strf,
+                                 num, gen, this.encryptionKey));
+      }
+      // algorithms 1 and 2
+      var key = buildObjectKey(num, gen, this.encryptionKey, false);
+      var cipherConstructor = function buildCipherCipherConstructor() {
+        return new ARCFourCipher(key);
+      };
+      return new CipherTransform(cipherConstructor, cipherConstructor);
+    }
+  };
+
+  return CipherTransformFactory;
+})();
+
+
+var PatternType = {
+  FUNCTION_BASED: 1,
+  AXIAL: 2,
+  RADIAL: 3,
+  FREE_FORM_MESH: 4,
+  LATTICE_FORM_MESH: 5,
+  COONS_PATCH_MESH: 6,
+  TENSOR_PATCH_MESH: 7
+};
+
+var Pattern = (function PatternClosure() {
+  // Constructor should define this.getPattern
+  function Pattern() {
+    error('should not call Pattern constructor');
+  }
+
+  Pattern.prototype = {
+    // Input: current Canvas context
+    // Output: the appropriate fillStyle or strokeStyle
+    getPattern: function Pattern_getPattern(ctx) {
+      error('Should not call Pattern.getStyle: ' + ctx);
+    }
+  };
+
+  Pattern.parseShading = function Pattern_parseShading(shading, matrix, xref,
+                                                       res) {
+
+    var dict = isStream(shading) ? shading.dict : shading;
+    var type = dict.get('ShadingType');
+
+    try {
+      switch (type) {
+        case PatternType.AXIAL:
+        case PatternType.RADIAL:
+          // Both radial and axial shadings are handled by RadialAxial shading.
+          return new Shadings.RadialAxial(dict, matrix, xref, res);
+        case PatternType.FREE_FORM_MESH:
+        case PatternType.LATTICE_FORM_MESH:
+        case PatternType.COONS_PATCH_MESH:
+        case PatternType.TENSOR_PATCH_MESH:
+          return new Shadings.Mesh(shading, matrix, xref, res);
+        default:
+          throw new Error('Unknown PatternType: ' + type);
+      }
+    } catch (ex) {
+      if (ex instanceof MissingDataException) {
+        throw ex;
+      }
+      UnsupportedManager.notify(UNSUPPORTED_FEATURES.shadingPattern);
+      warn(ex);
+      return new Shadings.Dummy();
+    }
+  };
+  return Pattern;
+})();
+
+var Shadings = {};
+
+// A small number to offset the first/last color stops so we can insert ones to
+// support extend.  Number.MIN_VALUE appears to be too small and breaks the
+// extend. 1e-7 works in FF but chrome seems to use an even smaller sized number
+// internally so we have to go bigger.
+Shadings.SMALL_NUMBER = 1e-2;
+
+// Radial and axial shading have very similar implementations
+// If needed, the implementations can be broken into two classes
+Shadings.RadialAxial = (function RadialAxialClosure() {
+  function RadialAxial(dict, matrix, xref, res) {
+    this.matrix = matrix;
+    this.coordsArr = dict.get('Coords');
+    this.shadingType = dict.get('ShadingType');
+    this.type = 'Pattern';
+    var cs = dict.get('ColorSpace', 'CS');
+    cs = ColorSpace.parse(cs, xref, res);
+    this.cs = cs;
+
+    var t0 = 0.0, t1 = 1.0;
+    if (dict.has('Domain')) {
+      var domainArr = dict.get('Domain');
+      t0 = domainArr[0];
+      t1 = domainArr[1];
+    }
+
+    var extendStart = false, extendEnd = false;
+    if (dict.has('Extend')) {
+      var extendArr = dict.get('Extend');
+      extendStart = extendArr[0];
+      extendEnd = extendArr[1];
+    }
+
+    if (this.shadingType === PatternType.RADIAL &&
+       (!extendStart || !extendEnd)) {
+      // Radial gradient only currently works if either circle is fully within
+      // the other circle.
+      var x1 = this.coordsArr[0];
+      var y1 = this.coordsArr[1];
+      var r1 = this.coordsArr[2];
+      var x2 = this.coordsArr[3];
+      var y2 = this.coordsArr[4];
+      var r2 = this.coordsArr[5];
+      var distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
+      if (r1 <= r2 + distance &&
+          r2 <= r1 + distance) {
+        warn('Unsupported radial gradient.');
+      }
+    }
+
+    this.extendStart = extendStart;
+    this.extendEnd = extendEnd;
+
+    var fnObj = dict.get('Function');
+    var fn = PDFFunction.parseArray(xref, fnObj);
+
+    // 10 samples seems good enough for now, but probably won't work
+    // if there are sharp color changes. Ideally, we would implement
+    // the spec faithfully and add lossless optimizations.
+    var diff = t1 - t0;
+    var step = diff / 10;
+
+    var colorStops = this.colorStops = [];
+
+    // Protect against bad domains so we don't end up in an infinte loop below.
+    if (t0 >= t1 || step <= 0) {
+      // Acrobat doesn't seem to handle these cases so we'll ignore for
+      // now.
+      info('Bad shading domain.');
+      return;
+    }
+
+    var color = new Float32Array(cs.numComps), ratio = new Float32Array(1);
+    var rgbColor;
+    for (var i = t0; i <= t1; i += step) {
+      ratio[0] = i;
+      fn(ratio, 0, color, 0);
+      rgbColor = cs.getRgb(color, 0);
+      var cssColor = Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
+      colorStops.push([(i - t0) / diff, cssColor]);
+    }
+
+    var background = 'transparent';
+    if (dict.has('Background')) {
+      rgbColor = cs.getRgb(dict.get('Background'), 0);
+      background = Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
+    }
+
+    if (!extendStart) {
+      // Insert a color stop at the front and offset the first real color stop
+      // so it doesn't conflict with the one we insert.
+      colorStops.unshift([0, background]);
+      colorStops[1][0] += Shadings.SMALL_NUMBER;
+    }
+    if (!extendEnd) {
+      // Same idea as above in extendStart but for the end.
+      colorStops[colorStops.length - 1][0] -= Shadings.SMALL_NUMBER;
+      colorStops.push([1, background]);
+    }
+
+    this.colorStops = colorStops;
+  }
+
+  RadialAxial.prototype = {
+    getIR: function RadialAxial_getIR() {
+      var coordsArr = this.coordsArr;
+      var shadingType = this.shadingType;
+      var type, p0, p1, r0, r1;
+      if (shadingType === PatternType.AXIAL) {
+        p0 = [coordsArr[0], coordsArr[1]];
+        p1 = [coordsArr[2], coordsArr[3]];
+        r0 = null;
+        r1 = null;
+        type = 'axial';
+      } else if (shadingType === PatternType.RADIAL) {
+        p0 = [coordsArr[0], coordsArr[1]];
+        p1 = [coordsArr[3], coordsArr[4]];
+        r0 = coordsArr[2];
+        r1 = coordsArr[5];
+        type = 'radial';
+      } else {
+        error('getPattern type unknown: ' + shadingType);
+      }
+
+      var matrix = this.matrix;
+      if (matrix) {
+        p0 = Util.applyTransform(p0, matrix);
+        p1 = Util.applyTransform(p1, matrix);
+      }
+
+      return ['RadialAxial', type, this.colorStops, p0, p1, r0, r1];
+    }
+  };
+
+  return RadialAxial;
+})();
+
+// All mesh shading. For now, they will be presented as set of the triangles
+// to be drawn on the canvas and rgb color for each vertex.
+Shadings.Mesh = (function MeshClosure() {
+  function MeshStreamReader(stream, context) {
+    this.stream = stream;
+    this.context = context;
+    this.buffer = 0;
+    this.bufferLength = 0;
+
+    var numComps = context.numComps;
+    this.tmpCompsBuf = new Float32Array(numComps);
+    var csNumComps = context.colorSpace;
+    this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) :
+                                           this.tmpCompsBuf;
+  }
+  MeshStreamReader.prototype = {
+    get hasData() {
+      if (this.stream.end) {
+        return this.stream.pos < this.stream.end;
+      }
+      if (this.bufferLength > 0) {
+        return true;
+      }
+      var nextByte = this.stream.getByte();
+      if (nextByte < 0) {
+        return false;
+      }
+      this.buffer = nextByte;
+      this.bufferLength = 8;
+      return true;
+    },
+    readBits: function MeshStreamReader_readBits(n) {
+      var buffer = this.buffer;
+      var bufferLength = this.bufferLength;
+      if (n === 32) {
+        if (bufferLength === 0) {
+          return ((this.stream.getByte() << 24) |
+            (this.stream.getByte() << 16) | (this.stream.getByte() << 8) |
+            this.stream.getByte()) >>> 0;
+        }
+        buffer = (buffer << 24) | (this.stream.getByte() << 16) |
+          (this.stream.getByte() << 8) | this.stream.getByte();
+        var nextByte = this.stream.getByte();
+        this.buffer = nextByte & ((1 << bufferLength) - 1);
+        return ((buffer << (8 - bufferLength)) |
+          ((nextByte & 0xFF) >> bufferLength)) >>> 0;
+      }
+      if (n === 8 && bufferLength === 0) {
+        return this.stream.getByte();
+      }
+      while (bufferLength < n) {
+        buffer = (buffer << 8) | this.stream.getByte();
+        bufferLength += 8;
+      }
+      bufferLength -= n;
+      this.bufferLength = bufferLength;
+      this.buffer = buffer & ((1 << bufferLength) - 1);
+      return buffer >> bufferLength;
+    },
+    align: function MeshStreamReader_align() {
+      this.buffer = 0;
+      this.bufferLength = 0;
+    },
+    readFlag: function MeshStreamReader_readFlag() {
+      return this.readBits(this.context.bitsPerFlag);
+    },
+    readCoordinate: function MeshStreamReader_readCoordinate() {
+      var bitsPerCoordinate = this.context.bitsPerCoordinate;
+      var xi = this.readBits(bitsPerCoordinate);
+      var yi = this.readBits(bitsPerCoordinate);
+      var decode = this.context.decode;
+      var scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) :
+        2.3283064365386963e-10; // 2 ^ -32
+      return [
+        xi * scale * (decode[1] - decode[0]) + decode[0],
+        yi * scale * (decode[3] - decode[2]) + decode[2]
+      ];
+    },
+    readComponents: function MeshStreamReader_readComponents() {
+      var numComps = this.context.numComps;
+      var bitsPerComponent = this.context.bitsPerComponent;
+      var scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) :
+        2.3283064365386963e-10; // 2 ^ -32
+      var decode = this.context.decode;
+      var components = this.tmpCompsBuf;
+      for (var i = 0, j = 4; i < numComps; i++, j += 2) {
+        var ci = this.readBits(bitsPerComponent);
+        components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j];
+      }
+      var color = this.tmpCsCompsBuf;
+      if (this.context.colorFn) {
+        this.context.colorFn(components, 0, color, 0);
+      }
+      return this.context.colorSpace.getRgb(color, 0);
+    }
+  };
+
+  function decodeType4Shading(mesh, reader) {
+    var coords = mesh.coords;
+    var colors = mesh.colors;
+    var operators = [];
+    var ps = []; // not maintaining cs since that will match ps
+    var verticesLeft = 0; // assuming we have all data to start a new triangle
+    while (reader.hasData) {
+      var f = reader.readFlag();
+      var coord = reader.readCoordinate();
+      var color = reader.readComponents();
+      if (verticesLeft === 0) { // ignoring flags if we started a triangle
+        assert(0 <= f && f <= 2, 'Unknown type4 flag');
+        switch (f) {
+          case 0:
+            verticesLeft = 3;
+            break;
+          case 1:
+            ps.push(ps[ps.length - 2], ps[ps.length - 1]);
+            verticesLeft = 1;
+            break;
+          case 2:
+            ps.push(ps[ps.length - 3], ps[ps.length - 1]);
+            verticesLeft = 1;
+            break;
+        }
+        operators.push(f);
+      }
+      ps.push(coords.length);
+      coords.push(coord);
+      colors.push(color);
+      verticesLeft--;
+
+      reader.align();
+    }
+
+    var psPacked = new Int32Array(ps);
+
+    mesh.figures.push({
+      type: 'triangles',
+      coords: psPacked,
+      colors: psPacked
+    });
+  }
+
+  function decodeType5Shading(mesh, reader, verticesPerRow) {
+    var coords = mesh.coords;
+    var colors = mesh.colors;
+    var ps = []; // not maintaining cs since that will match ps
+    while (reader.hasData) {
+      var coord = reader.readCoordinate();
+      var color = reader.readComponents();
+      ps.push(coords.length);
+      coords.push(coord);
+      colors.push(color);
+    }
+
+    var psPacked = new Int32Array(ps);
+
+    mesh.figures.push({
+      type: 'lattice',
+      coords: psPacked,
+      colors: psPacked,
+      verticesPerRow: verticesPerRow
+    });
+  }
+
+  var MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3;
+  var MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20;
+
+  var TRIANGLE_DENSITY = 20; // count of triangles per entire mesh bounds
+
+  var getB = (function getBClosure() {
+    function buildB(count) {
+      var lut = [];
+      for (var i = 0; i <= count; i++) {
+        var t = i / count, t_ = 1 - t;
+        lut.push(new Float32Array([t_ * t_ * t_, 3 * t * t_ * t_,
+          3 * t * t * t_, t * t * t]));
+      }
+      return lut;
+    }
+    var cache = [];
+    return function getB(count) {
+      if (!cache[count]) {
+        cache[count] = buildB(count);
+      }
+      return cache[count];
+    };
+  })();
+
+  function buildFigureFromPatch(mesh, index) {
+    var figure = mesh.figures[index];
+    assert(figure.type === 'patch', 'Unexpected patch mesh figure');
+
+    var coords = mesh.coords, colors = mesh.colors;
+    var pi = figure.coords;
+    var ci = figure.colors;
+
+    var figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0],
+                              coords[pi[12]][0], coords[pi[15]][0]);
+    var figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1],
+                              coords[pi[12]][1], coords[pi[15]][1]);
+    var figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0],
+                              coords[pi[12]][0], coords[pi[15]][0]);
+    var figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1],
+                              coords[pi[12]][1], coords[pi[15]][1]);
+    var splitXBy = Math.ceil((figureMaxX - figureMinX) * TRIANGLE_DENSITY /
+                             (mesh.bounds[2] - mesh.bounds[0]));
+    splitXBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT,
+               Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy));
+    var splitYBy = Math.ceil((figureMaxY - figureMinY) * TRIANGLE_DENSITY /
+                             (mesh.bounds[3] - mesh.bounds[1]));
+    splitYBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT,
+               Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy));
+
+    var verticesPerRow = splitXBy + 1;
+    var figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow);
+    var figureColors = new Int32Array((splitYBy + 1) * verticesPerRow);
+    var k = 0;
+    var cl = new Uint8Array(3), cr = new Uint8Array(3);
+    var c0 = colors[ci[0]], c1 = colors[ci[1]],
+      c2 = colors[ci[2]], c3 = colors[ci[3]];
+    var bRow = getB(splitYBy), bCol = getB(splitXBy);
+    for (var row = 0; row <= splitYBy; row++) {
+      cl[0] = ((c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy) | 0;
+      cl[1] = ((c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy) | 0;
+      cl[2] = ((c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy) | 0;
+
+      cr[0] = ((c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy) | 0;
+      cr[1] = ((c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy) | 0;
+      cr[2] = ((c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy) | 0;
+
+      for (var col = 0; col <= splitXBy; col++, k++) {
+        if ((row === 0 || row === splitYBy) &&
+            (col === 0 || col === splitXBy)) {
+          continue;
+        }
+        var x = 0, y = 0;
+        var q = 0;
+        for (var i = 0; i <= 3; i++) {
+          for (var j = 0; j <= 3; j++, q++) {
+            var m = bRow[row][i] * bCol[col][j];
+            x += coords[pi[q]][0] * m;
+            y += coords[pi[q]][1] * m;
+          }
+        }
+        figureCoords[k] = coords.length;
+        coords.push([x, y]);
+        figureColors[k] = colors.length;
+        var newColor = new Uint8Array(3);
+        newColor[0] = ((cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy) | 0;
+        newColor[1] = ((cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy) | 0;
+        newColor[2] = ((cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy) | 0;
+        colors.push(newColor);
+      }
+    }
+    figureCoords[0] = pi[0];
+    figureColors[0] = ci[0];
+    figureCoords[splitXBy] = pi[3];
+    figureColors[splitXBy] = ci[1];
+    figureCoords[verticesPerRow * splitYBy] = pi[12];
+    figureColors[verticesPerRow * splitYBy] = ci[2];
+    figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15];
+    figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3];
+
+    mesh.figures[index] = {
+      type: 'lattice',
+      coords: figureCoords,
+      colors: figureColors,
+      verticesPerRow: verticesPerRow
+    };
+  }
+
+  function decodeType6Shading(mesh, reader) {
+    // A special case of Type 7. The p11, p12, p21, p22 automatically filled
+    var coords = mesh.coords;
+    var colors = mesh.colors;
+    var ps = new Int32Array(16); // p00, p10, ..., p30, p01, ..., p33
+    var cs = new Int32Array(4); // c00, c30, c03, c33
+    while (reader.hasData) {
+      var f = reader.readFlag();
+      assert(0 <= f && f <= 3, 'Unknown type6 flag');
+      var i, ii;
+      var pi = coords.length;
+      for (i = 0, ii = (f !== 0 ? 8 : 12); i < ii; i++) {
+        coords.push(reader.readCoordinate());
+      }
+      var ci = colors.length;
+      for (i = 0, ii = (f !== 0 ? 2 : 4); i < ii; i++) {
+        colors.push(reader.readComponents());
+      }
+      var tmp1, tmp2, tmp3, tmp4;
+      switch (f) {
+        case 0:
+          ps[12] = pi + 3; ps[13] = pi + 4;  ps[14] = pi + 5;  ps[15] = pi + 6;
+          ps[ 8] = pi + 2; /* values for 5, 6, 9, 10 are    */ ps[11] = pi + 7;
+          ps[ 4] = pi + 1; /* calculated below              */ ps[ 7] = pi + 8;
+          ps[ 0] = pi;     ps[ 1] = pi + 11; ps[ 2] = pi + 10; ps[ 3] = pi + 9;
+          cs[2] = ci + 1; cs[3] = ci + 2;
+          cs[0] = ci;     cs[1] = ci + 3;
+          break;
+        case 1:
+          tmp1 = ps[12]; tmp2 = ps[13]; tmp3 = ps[14]; tmp4 = ps[15];
+          ps[12] = pi + 5; ps[13] = pi + 4;  ps[14] = pi + 3;  ps[15] = pi + 2;
+          ps[ 8] = pi + 6; /* values for 5, 6, 9, 10 are    */ ps[11] = pi + 1;
+          ps[ 4] = pi + 7; /* calculated below              */ ps[ 7] = pi;
+          ps[ 0] = tmp1;   ps[ 1] = tmp2;    ps[ 2] = tmp3;    ps[ 3] = tmp4;
+          tmp1 = cs[2]; tmp2 = cs[3];
+          cs[2] = ci + 1; cs[3] = ci;
+          cs[0] = tmp1;   cs[1] = tmp2;
+          break;
+        case 2:
+          ps[12] = ps[15]; ps[13] = pi + 7; ps[14] = pi + 6;   ps[15] = pi + 5;
+          ps[ 8] = ps[11]; /* values for 5, 6, 9, 10 are    */ ps[11] = pi + 4;
+          ps[ 4] = ps[7];  /* calculated below              */ ps[ 7] = pi + 3;
+          ps[ 0] = ps[3];  ps[ 1] = pi;     ps[ 2] = pi + 1;   ps[ 3] = pi + 2;
+          cs[2] = cs[3]; cs[3] = ci + 1;
+          cs[0] = cs[1]; cs[1] = ci;
+          break;
+        case 3:
+          ps[12] = ps[0];  ps[13] = ps[1];   ps[14] = ps[2];   ps[15] = ps[3];
+          ps[ 8] = pi;     /* values for 5, 6, 9, 10 are    */ ps[11] = pi + 7;
+          ps[ 4] = pi + 1; /* calculated below              */ ps[ 7] = pi + 6;
+          ps[ 0] = pi + 2; ps[ 1] = pi + 3;  ps[ 2] = pi + 4;  ps[ 3] = pi + 5;
+          cs[2] = cs[0]; cs[3] = cs[1];
+          cs[0] = ci;    cs[1] = ci + 1;
+          break;
+      }
+      // set p11, p12, p21, p22
+      ps[5] = coords.length;
+      coords.push([
+        (-4 * coords[ps[0]][0] - coords[ps[15]][0] +
+          6 * (coords[ps[4]][0] + coords[ps[1]][0]) -
+          2 * (coords[ps[12]][0] + coords[ps[3]][0]) +
+          3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9,
+        (-4 * coords[ps[0]][1] - coords[ps[15]][1] +
+          6 * (coords[ps[4]][1] + coords[ps[1]][1]) -
+          2 * (coords[ps[12]][1] + coords[ps[3]][1]) +
+          3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9
+      ]);
+      ps[6] = coords.length;
+      coords.push([
+        (-4 * coords[ps[3]][0] - coords[ps[12]][0] +
+          6 * (coords[ps[2]][0] + coords[ps[7]][0]) -
+          2 * (coords[ps[0]][0] + coords[ps[15]][0]) +
+          3 * (coords[ps[4]][0] + coords[ps[14]][0])) / 9,
+        (-4 * coords[ps[3]][1] - coords[ps[12]][1] +
+          6 * (coords[ps[2]][1] + coords[ps[7]][1]) -
+          2 * (coords[ps[0]][1] + coords[ps[15]][1]) +
+          3 * (coords[ps[4]][1] + coords[ps[14]][1])) / 9
+      ]);
+      ps[9] = coords.length;
+      coords.push([
+        (-4 * coords[ps[12]][0] - coords[ps[3]][0] +
+          6 * (coords[ps[8]][0] + coords[ps[13]][0]) -
+          2 * (coords[ps[0]][0] + coords[ps[15]][0]) +
+          3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9,
+        (-4 * coords[ps[12]][1] - coords[ps[3]][1] +
+          6 * (coords[ps[8]][1] + coords[ps[13]][1]) -
+          2 * (coords[ps[0]][1] + coords[ps[15]][1]) +
+          3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9
+      ]);
+      ps[10] = coords.length;
+      coords.push([
+        (-4 * coords[ps[15]][0] - coords[ps[0]][0] +
+          6 * (coords[ps[11]][0] + coords[ps[14]][0]) -
+          2 * (coords[ps[12]][0] + coords[ps[3]][0]) +
+          3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9,
+        (-4 * coords[ps[15]][1] - coords[ps[0]][1] +
+          6 * (coords[ps[11]][1] + coords[ps[14]][1]) -
+          2 * (coords[ps[12]][1] + coords[ps[3]][1]) +
+          3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9
+      ]);
+      mesh.figures.push({
+        type: 'patch',
+        coords: new Int32Array(ps), // making copies of ps and cs
+        colors: new Int32Array(cs)
+      });
+    }
+  }
+
+  function decodeType7Shading(mesh, reader) {
+    var coords = mesh.coords;
+    var colors = mesh.colors;
+    var ps = new Int32Array(16); // p00, p10, ..., p30, p01, ..., p33
+    var cs = new Int32Array(4); // c00, c30, c03, c33
+    while (reader.hasData) {
+      var f = reader.readFlag();
+      assert(0 <= f && f <= 3, 'Unknown type7 flag');
+      var i, ii;
+      var pi = coords.length;
+      for (i = 0, ii = (f !== 0 ? 12 : 16); i < ii; i++) {
+        coords.push(reader.readCoordinate());
+      }
+      var ci = colors.length;
+      for (i = 0, ii = (f !== 0 ? 2 : 4); i < ii; i++) {
+        colors.push(reader.readComponents());
+      }
+      var tmp1, tmp2, tmp3, tmp4;
+      switch (f) {
+        case 0:
+          ps[12] = pi + 3; ps[13] = pi + 4;  ps[14] = pi + 5;  ps[15] = pi + 6;
+          ps[ 8] = pi + 2; ps[ 9] = pi + 13; ps[10] = pi + 14; ps[11] = pi + 7;
+          ps[ 4] = pi + 1; ps[ 5] = pi + 12; ps[ 6] = pi + 15; ps[ 7] = pi + 8;
+          ps[ 0] = pi;     ps[ 1] = pi + 11; ps[ 2] = pi + 10; ps[ 3] = pi + 9;
+          cs[2] = ci + 1; cs[3] = ci + 2;
+          cs[0] = ci;     cs[1] = ci + 3;
+          break;
+        case 1:
+          tmp1 = ps[12]; tmp2 = ps[13]; tmp3 = ps[14]; tmp4 = ps[15];
+          ps[12] = pi + 5; ps[13] = pi + 4;  ps[14] = pi + 3;  ps[15] = pi + 2;
+          ps[ 8] = pi + 6; ps[ 9] = pi + 11; ps[10] = pi + 10; ps[11] = pi + 1;
+          ps[ 4] = pi + 7; ps[ 5] = pi + 8;  ps[ 6] = pi + 9;  ps[ 7] = pi;
+          ps[ 0] = tmp1;   ps[ 1] = tmp2;    ps[ 2] = tmp3;    ps[ 3] = tmp4;
+          tmp1 = cs[2]; tmp2 = cs[3];
+          cs[2] = ci + 1; cs[3] = ci;
+          cs[0] = tmp1;   cs[1] = tmp2;
+          break;
+        case 2:
+          ps[12] = ps[15]; ps[13] = pi + 7; ps[14] = pi + 6;  ps[15] = pi + 5;
+          ps[ 8] = ps[11]; ps[ 9] = pi + 8; ps[10] = pi + 11; ps[11] = pi + 4;
+          ps[ 4] = ps[7];  ps[ 5] = pi + 9; ps[ 6] = pi + 10; ps[ 7] = pi + 3;
+          ps[ 0] = ps[3];  ps[ 1] = pi;     ps[ 2] = pi + 1;  ps[ 3] = pi + 2;
+          cs[2] = cs[3]; cs[3] = ci + 1;
+          cs[0] = cs[1]; cs[1] = ci;
+          break;
+        case 3:
+          ps[12] = ps[0];  ps[13] = ps[1];   ps[14] = ps[2];   ps[15] = ps[3];
+          ps[ 8] = pi;     ps[ 9] = pi + 9;  ps[10] = pi + 8;  ps[11] = pi + 7;
+          ps[ 4] = pi + 1; ps[ 5] = pi + 10; ps[ 6] = pi + 11; ps[ 7] = pi + 6;
+          ps[ 0] = pi + 2; ps[ 1] = pi + 3;  ps[ 2] = pi + 4;  ps[ 3] = pi + 5;
+          cs[2] = cs[0]; cs[3] = cs[1];
+          cs[0] = ci;    cs[1] = ci + 1;
+          break;
+      }
+      mesh.figures.push({
+        type: 'patch',
+        coords: new Int32Array(ps), // making copies of ps and cs
+        colors: new Int32Array(cs)
+      });
+    }
+  }
+
+  function updateBounds(mesh) {
+    var minX = mesh.coords[0][0], minY = mesh.coords[0][1],
+      maxX = minX, maxY = minY;
+    for (var i = 1, ii = mesh.coords.length; i < ii; i++) {
+      var x = mesh.coords[i][0], y = mesh.coords[i][1];
+      minX = minX > x ? x : minX;
+      minY = minY > y ? y : minY;
+      maxX = maxX < x ? x : maxX;
+      maxY = maxY < y ? y : maxY;
+    }
+    mesh.bounds = [minX, minY, maxX, maxY];
+  }
+
+  function packData(mesh) {
+    var i, ii, j, jj;
+
+    var coords = mesh.coords;
+    var coordsPacked = new Float32Array(coords.length * 2);
+    for (i = 0, j = 0, ii = coords.length; i < ii; i++) {
+      var xy = coords[i];
+      coordsPacked[j++] = xy[0];
+      coordsPacked[j++] = xy[1];
+    }
+    mesh.coords = coordsPacked;
+
+    var colors = mesh.colors;
+    var colorsPacked = new Uint8Array(colors.length * 3);
+    for (i = 0, j = 0, ii = colors.length; i < ii; i++) {
+      var c = colors[i];
+      colorsPacked[j++] = c[0];
+      colorsPacked[j++] = c[1];
+      colorsPacked[j++] = c[2];
+    }
+    mesh.colors = colorsPacked;
+
+    var figures = mesh.figures;
+    for (i = 0, ii = figures.length; i < ii; i++) {
+      var figure = figures[i], ps = figure.coords, cs = figure.colors;
+      for (j = 0, jj = ps.length; j < jj; j++) {
+        ps[j] *= 2;
+        cs[j] *= 3;
+      }
+    }
+  }
+
+  function Mesh(stream, matrix, xref, res) {
+    assert(isStream(stream), 'Mesh data is not a stream');
+    var dict = stream.dict;
+    this.matrix = matrix;
+    this.shadingType = dict.get('ShadingType');
+    this.type = 'Pattern';
+    this.bbox = dict.get('BBox');
+    var cs = dict.get('ColorSpace', 'CS');
+    cs = ColorSpace.parse(cs, xref, res);
+    this.cs = cs;
+    this.background = dict.has('Background') ?
+      cs.getRgb(dict.get('Background'), 0) : null;
+
+    var fnObj = dict.get('Function');
+    var fn = fnObj ? PDFFunction.parseArray(xref, fnObj) : null;
+
+    this.coords = [];
+    this.colors = [];
+    this.figures = [];
+
+    var decodeContext = {
+      bitsPerCoordinate: dict.get('BitsPerCoordinate'),
+      bitsPerComponent: dict.get('BitsPerComponent'),
+      bitsPerFlag: dict.get('BitsPerFlag'),
+      decode: dict.get('Decode'),
+      colorFn: fn,
+      colorSpace: cs,
+      numComps: fn ? 1 : cs.numComps
+    };
+    var reader = new MeshStreamReader(stream, decodeContext);
+
+    var patchMesh = false;
+    switch (this.shadingType) {
+      case PatternType.FREE_FORM_MESH:
+        decodeType4Shading(this, reader);
+        break;
+      case PatternType.LATTICE_FORM_MESH:
+        var verticesPerRow = dict.get('VerticesPerRow') | 0;
+        assert(verticesPerRow >= 2, 'Invalid VerticesPerRow');
+        decodeType5Shading(this, reader, verticesPerRow);
+        break;
+      case PatternType.COONS_PATCH_MESH:
+        decodeType6Shading(this, reader);
+        patchMesh = true;
+        break;
+      case PatternType.TENSOR_PATCH_MESH:
+        decodeType7Shading(this, reader);
+        patchMesh = true;
+        break;
+      default:
+        error('Unsupported mesh type.');
+        break;
+    }
+
+    if (patchMesh) {
+      // dirty bounds calculation for determining, how dense shall be triangles
+      updateBounds(this);
+      for (var i = 0, ii = this.figures.length; i < ii; i++) {
+        buildFigureFromPatch(this, i);
+      }
+    }
+    // calculate bounds
+    updateBounds(this);
+
+    packData(this);
+  }
+
+  Mesh.prototype = {
+    getIR: function Mesh_getIR() {
+      return ['Mesh', this.shadingType, this.coords, this.colors, this.figures,
+        this.bounds, this.matrix, this.bbox, this.background];
+    }
+  };
+
+  return Mesh;
+})();
+
+Shadings.Dummy = (function DummyClosure() {
+  function Dummy() {
+    this.type = 'Pattern';
+  }
+
+  Dummy.prototype = {
+    getIR: function Dummy_getIR() {
+      return ['Dummy'];
+    }
+  };
+  return Dummy;
+})();
+
+function getTilingPatternIR(operatorList, dict, args) {
+  var matrix = dict.get('Matrix');
+  var bbox = dict.get('BBox');
+  var xstep = dict.get('XStep');
+  var ystep = dict.get('YStep');
+  var paintType = dict.get('PaintType');
+  var tilingType = dict.get('TilingType');
+
+  return [
+    'TilingPattern', args, operatorList, matrix, bbox, xstep, ystep,
+    paintType, tilingType
+  ];
+}
+
+
+var PartialEvaluator = (function PartialEvaluatorClosure() {
+  function PartialEvaluator(pdfManager, xref, handler, pageIndex,
+                            uniquePrefix, idCounters, fontCache) {
+    this.pdfManager = pdfManager;
+    this.xref = xref;
+    this.handler = handler;
+    this.pageIndex = pageIndex;
+    this.uniquePrefix = uniquePrefix;
+    this.idCounters = idCounters;
+    this.fontCache = fontCache;
+  }
+
+  // Trying to minimize Date.now() usage and check every 100 time
+  var TIME_SLOT_DURATION_MS = 20;
+  var CHECK_TIME_EVERY = 100;
+  function TimeSlotManager() {
+    this.reset();
+  }
+  TimeSlotManager.prototype = {
+    check: function TimeSlotManager_check() {
+      if (++this.checked < CHECK_TIME_EVERY) {
+        return false;
+      }
+      this.checked = 0;
+      return this.endTime <= Date.now();
+    },
+    reset: function TimeSlotManager_reset() {
+      this.endTime = Date.now() + TIME_SLOT_DURATION_MS;
+      this.checked = 0;
+    }
+  };
+
+  var deferred = Promise.resolve();
+
+  var TILING_PATTERN = 1, SHADING_PATTERN = 2;
+
+  PartialEvaluator.prototype = {
+    hasBlendModes: function PartialEvaluator_hasBlendModes(resources) {
+      if (!isDict(resources)) {
+        return false;
+      }
+
+      var processed = Object.create(null);
+      if (resources.objId) {
+        processed[resources.objId] = true;
+      }
+
+      var nodes = [resources];
+      while (nodes.length) {
+        var key;
+        var node = nodes.shift();
+        // First check the current resources for blend modes.
+        var graphicStates = node.get('ExtGState');
+        if (isDict(graphicStates)) {
+          graphicStates = graphicStates.getAll();
+          for (key in graphicStates) {
+            var graphicState = graphicStates[key];
+            var bm = graphicState['BM'];
+            if (isName(bm) && bm.name !== 'Normal') {
+              return true;
+            }
+          }
+        }
+        // Descend into the XObjects to look for more resources and blend modes.
+        var xObjects = node.get('XObject');
+        if (!isDict(xObjects)) {
+          continue;
+        }
+        xObjects = xObjects.getAll();
+        for (key in xObjects) {
+          var xObject = xObjects[key];
+          if (!isStream(xObject)) {
+            continue;
+          }
+          if (xObject.dict.objId) {
+            if (processed[xObject.dict.objId]) {
+              // stream has objId and is processed already
+              continue;
+            }
+            processed[xObject.dict.objId] = true;
+          }
+          var xResources = xObject.dict.get('Resources');
+          // Checking objId to detect an infinite loop.
+          if (isDict(xResources) &&
+              (!xResources.objId || !processed[xResources.objId])) {
+            nodes.push(xResources);
+            if (xResources.objId) {
+              processed[xResources.objId] = true;
+            }
+          }
+        }
+      }
+      return false;
+    },
+
+    buildFormXObject: function PartialEvaluator_buildFormXObject(resources,
+                                                                 xobj, smask,
+                                                                 operatorList,
+                                                                 initialState) {
+      var matrix = xobj.dict.get('Matrix');
+      var bbox = xobj.dict.get('BBox');
+      var group = xobj.dict.get('Group');
+      if (group) {
+        var groupOptions = {
+          matrix: matrix,
+          bbox: bbox,
+          smask: smask,
+          isolated: false,
+          knockout: false
+        };
+
+        var groupSubtype = group.get('S');
+        var colorSpace;
+        if (isName(groupSubtype) && groupSubtype.name === 'Transparency') {
+          groupOptions.isolated = (group.get('I') || false);
+          groupOptions.knockout = (group.get('K') || false);
+          colorSpace = (group.has('CS') ?
+            ColorSpace.parse(group.get('CS'), this.xref, resources) : null);
+        }
+
+        if (smask && smask.backdrop) {
+          colorSpace = colorSpace || ColorSpace.singletons.rgb;
+          smask.backdrop = colorSpace.getRgb(smask.backdrop, 0);
+        }
+
+        operatorList.addOp(OPS.beginGroup, [groupOptions]);
+      }
+
+      operatorList.addOp(OPS.paintFormXObjectBegin, [matrix, bbox]);
+
+      return this.getOperatorList(xobj,
+        (xobj.dict.get('Resources') || resources), operatorList, initialState).
+        then(function () {
+          operatorList.addOp(OPS.paintFormXObjectEnd, []);
+
+          if (group) {
+            operatorList.addOp(OPS.endGroup, [groupOptions]);
+          }
+        });
+    },
+
+    buildPaintImageXObject:
+        function PartialEvaluator_buildPaintImageXObject(resources, image,
+                                                         inline, operatorList,
+                                                         cacheKey, imageCache) {
+      var self = this;
+      var dict = image.dict;
+      var w = dict.get('Width', 'W');
+      var h = dict.get('Height', 'H');
+
+      if (!(w && isNum(w)) || !(h && isNum(h))) {
+        warn('Image dimensions are missing, or not numbers.');
+        return;
+      }
+      if (PDFJS.maxImageSize !== -1 && w * h > PDFJS.maxImageSize) {
+        warn('Image exceeded maximum allowed size and was removed.');
+        return;
+      }
+
+      var imageMask = (dict.get('ImageMask', 'IM') || false);
+      var imgData, args;
+      if (imageMask) {
+        // This depends on a tmpCanvas being filled with the
+        // current fillStyle, such that processing the pixel
+        // data can't be done here. Instead of creating a
+        // complete PDFImage, only read the information needed
+        // for later.
+
+        var width = dict.get('Width', 'W');
+        var height = dict.get('Height', 'H');
+        var bitStrideLength = (width + 7) >> 3;
+        var imgArray = image.getBytes(bitStrideLength * height);
+        var decode = dict.get('Decode', 'D');
+        var inverseDecode = (!!decode && decode[0] > 0);
+
+        imgData = PDFImage.createMask(imgArray, width, height,
+                                      image instanceof DecodeStream,
+                                      inverseDecode);
+        imgData.cached = true;
+        args = [imgData];
+        operatorList.addOp(OPS.paintImageMaskXObject, args);
+        if (cacheKey) {
+          imageCache[cacheKey] = {
+            fn: OPS.paintImageMaskXObject,
+            args: args
+          };
+        }
+        return;
+      }
+
+      var softMask = (dict.get('SMask', 'SM') || false);
+      var mask = (dict.get('Mask') || false);
+
+      var SMALL_IMAGE_DIMENSIONS = 200;
+      // Inlining small images into the queue as RGB data
+      if (inline && !softMask && !mask && !(image instanceof JpegStream) &&
+          (w + h) < SMALL_IMAGE_DIMENSIONS) {
+        var imageObj = new PDFImage(this.xref, resources, image,
+                                    inline, null, null);
+        // We force the use of RGBA_32BPP images here, because we can't handle
+        // any other kind.
+        imgData = imageObj.createImageData(/* forceRGBA = */ true);
+        operatorList.addOp(OPS.paintInlineImageXObject, [imgData]);
+        return;
+      }
+
+      // If there is no imageMask, create the PDFImage and a lot
+      // of image processing can be done here.
+      var uniquePrefix = (this.uniquePrefix || '');
+      var objId = 'img_' + uniquePrefix + (++this.idCounters.obj);
+      operatorList.addDependency(objId);
+      args = [objId, w, h];
+
+      if (!softMask && !mask && image instanceof JpegStream &&
+          image.isNativelySupported(this.xref, resources)) {
+        // These JPEGs don't need any more processing so we can just send it.
+        operatorList.addOp(OPS.paintJpegXObject, args);
+        this.handler.send('obj',
+          [objId, this.pageIndex, 'JpegStream', image.getIR()]);
+        return;
+      }
+
+      PDFImage.buildImage(self.handler, self.xref, resources, image, inline).
+        then(function(imageObj) {
+          var imgData = imageObj.createImageData(/* forceRGBA = */ false);
+          self.handler.send('obj', [objId, self.pageIndex, 'Image', imgData],
+            [imgData.data.buffer]);
+        }).then(undefined, function (reason) {
+          warn('Unable to decode image: ' + reason);
+          self.handler.send('obj', [objId, self.pageIndex, 'Image', null]);
+        });
+
+      operatorList.addOp(OPS.paintImageXObject, args);
+      if (cacheKey) {
+        imageCache[cacheKey] = {
+          fn: OPS.paintImageXObject,
+          args: args
+        };
+      }
+    },
+
+    handleSMask: function PartialEvaluator_handleSmask(smask, resources,
+                                                       operatorList,
+                                                       stateManager) {
+      var smaskContent = smask.get('G');
+      var smaskOptions = {
+        subtype: smask.get('S').name,
+        backdrop: smask.get('BC')
+      };
+      return this.buildFormXObject(resources, smaskContent, smaskOptions,
+                            operatorList, stateManager.state.clone());
+    },
+
+    handleTilingType:
+        function PartialEvaluator_handleTilingType(fn, args, resources,
+                                                   pattern, patternDict,
+                                                   operatorList) {
+      // Create an IR of the pattern code.
+      var tilingOpList = new OperatorList();
+      return this.getOperatorList(pattern,
+        (patternDict.get('Resources') || resources), tilingOpList).
+        then(function () {
+          // Add the dependencies to the parent operator list so they are
+          // resolved before sub operator list is executed synchronously.
+          operatorList.addDependencies(tilingOpList.dependencies);
+          operatorList.addOp(fn, getTilingPatternIR({
+            fnArray: tilingOpList.fnArray,
+            argsArray: tilingOpList.argsArray
+          }, patternDict, args));
+        });
+    },
+
+    handleSetFont:
+        function PartialEvaluator_handleSetFont(resources, fontArgs, fontRef,
+                                                operatorList, state) {
+      // TODO(mack): Not needed?
+      var fontName;
+      if (fontArgs) {
+        fontArgs = fontArgs.slice();
+        fontName = fontArgs[0].name;
+      }
+
+      var self = this;
+      return this.loadFont(fontName, fontRef, this.xref, resources).then(
+          function (translated) {
+        if (!translated.font.isType3Font) {
+          return translated;
+        }
+        return translated.loadType3Data(self, resources, operatorList).then(
+            function () {
+          return translated;
+        });
+      }).then(function (translated) {
+        state.font = translated.font;
+        translated.send(self.handler);
+        return translated.loadedName;
+      });
+    },
+
+    handleText: function PartialEvaluator_handleText(chars, state) {
+      var font = state.font;
+      var glyphs = font.charsToGlyphs(chars);
+      var isAddToPathSet = !!(state.textRenderingMode &
+                              TextRenderingMode.ADD_TO_PATH_FLAG);
+      if (font.data && (isAddToPathSet || PDFJS.disableFontFace)) {
+        var buildPath = function (fontChar) {
+          if (!font.renderer.hasBuiltPath(fontChar)) {
+            var path = font.renderer.getPathJs(fontChar);
+            this.handler.send('commonobj', [
+              font.loadedName + '_path_' + fontChar,
+              'FontPath',
+              path
+            ]);
+          }
+        }.bind(this);
+
+        for (var i = 0, ii = glyphs.length; i < ii; i++) {
+          var glyph = glyphs[i];
+          if (glyph === null) {
+            continue;
+          }
+          buildPath(glyph.fontChar);
+
+          // If the glyph has an accent we need to build a path for its
+          // fontChar too, otherwise CanvasGraphics_paintChar will fail.
+          var accent = glyph.accent;
+          if (accent && accent.fontChar) {
+            buildPath(accent.fontChar);
+          }
+        }
+      }
+
+      return glyphs;
+    },
+
+    setGState: function PartialEvaluator_setGState(resources, gState,
+                                                   operatorList, xref,
+                                                   stateManager) {
+      // This array holds the converted/processed state data.
+      var gStateObj = [];
+      var gStateMap = gState.map;
+      var self = this;
+      var promise = Promise.resolve();
+      for (var key in gStateMap) {
+        var value = gStateMap[key];
+        switch (key) {
+          case 'Type':
+            break;
+          case 'LW':
+          case 'LC':
+          case 'LJ':
+          case 'ML':
+          case 'D':
+          case 'RI':
+          case 'FL':
+          case 'CA':
+          case 'ca':
+            gStateObj.push([key, value]);
+            break;
+          case 'Font':
+            promise = promise.then(function () {
+              return self.handleSetFont(resources, null, value[0],
+                                        operatorList, stateManager.state).
+                then(function (loadedName) {
+                  operatorList.addDependency(loadedName);
+                  gStateObj.push([key, [loadedName, value[1]]]);
+                });
+            });
+            break;
+          case 'BM':
+            gStateObj.push([key, value]);
+            break;
+          case 'SMask':
+            if (isName(value) && value.name === 'None') {
+              gStateObj.push([key, false]);
+              break;
+            }
+            var dict = xref.fetchIfRef(value);
+            if (isDict(dict)) {
+              promise = promise.then(function () {
+                return self.handleSMask(dict, resources, operatorList,
+                                        stateManager);
+              });
+              gStateObj.push([key, true]);
+            } else {
+              warn('Unsupported SMask type');
+            }
+
+            break;
+          // Only generate info log messages for the following since
+          // they are unlikely to have a big impact on the rendering.
+          case 'OP':
+          case 'op':
+          case 'OPM':
+          case 'BG':
+          case 'BG2':
+          case 'UCR':
+          case 'UCR2':
+          case 'TR':
+          case 'TR2':
+          case 'HT':
+          case 'SM':
+          case 'SA':
+          case 'AIS':
+          case 'TK':
+            // TODO implement these operators.
+            info('graphic state operator ' + key);
+            break;
+          default:
+            info('Unknown graphic state operator ' + key);
+            break;
+        }
+      }
+      return promise.then(function () {
+        if (gStateObj.length >= 0) {
+          operatorList.addOp(OPS.setGState, [gStateObj]);
+        }
+      });
+    },
+
+    loadFont: function PartialEvaluator_loadFont(fontName, font, xref,
+                                                 resources) {
+
+      function errorFont() {
+        return Promise.resolve(new TranslatedFont('g_font_error',
+          new ErrorFont('Font ' + fontName + ' is not available'), font));
+      }
+      var fontRef;
+      if (font) { // Loading by ref.
+        assert(isRef(font));
+        fontRef = font;
+      } else { // Loading by name.
+        var fontRes = resources.get('Font');
+        if (fontRes) {
+          fontRef = fontRes.getRaw(fontName);
+        } else {
+          warn('fontRes not available');
+          return errorFont();
+        }
+      }
+      if (!fontRef) {
+        warn('fontRef not available');
+        return errorFont();
+      }
+
+      if (this.fontCache.has(fontRef)) {
+        return this.fontCache.get(fontRef);
+      }
+
+      font = xref.fetchIfRef(fontRef);
+      if (!isDict(font)) {
+        return errorFont();
+      }
+
+      // We are holding font.translated references just for fontRef that are not
+      // dictionaries (Dict). See explanation below.
+      if (font.translated) {
+        return font.translated;
+      }
+
+      var fontCapability = createPromiseCapability();
+
+      var preEvaluatedFont = this.preEvaluateFont(font, xref);
+      var descriptor = preEvaluatedFont.descriptor;
+      var fontID = fontRef.num + '_' + fontRef.gen;
+      if (isDict(descriptor)) {
+        if (!descriptor.fontAliases) {
+          descriptor.fontAliases = Object.create(null);
+        }
+
+        var fontAliases = descriptor.fontAliases;
+        var hash = preEvaluatedFont.hash;
+        if (fontAliases[hash]) {
+          var aliasFontRef = fontAliases[hash].aliasRef;
+          if (aliasFontRef && this.fontCache.has(aliasFontRef)) {
+            this.fontCache.putAlias(fontRef, aliasFontRef);
+            return this.fontCache.get(fontRef);
+          }
+        }
+
+        if (!fontAliases[hash]) {
+          fontAliases[hash] = {
+            fontID: Font.getFontID()
+          };
+        }
+
+        fontAliases[hash].aliasRef = fontRef;
+        fontID = fontAliases[hash].fontID;
+      }
+
+      // Workaround for bad PDF generators that don't reference fonts
+      // properly, i.e. by not using an object identifier.
+      // Check if the fontRef is a Dict (as opposed to a standard object),
+      // in which case we don't cache the font and instead reference it by
+      // fontName in font.loadedName below.
+      var fontRefIsDict = isDict(fontRef);
+      if (!fontRefIsDict) {
+        this.fontCache.put(fontRef, fontCapability.promise);
+      }
+
+      // Keep track of each font we translated so the caller can
+      // load them asynchronously before calling display on a page.
+      font.loadedName = 'g_font_' + (fontRefIsDict ?
+        fontName.replace(/\W/g, '') : fontID);
+
+      font.translated = fontCapability.promise;
+
+      // TODO move promises into translate font
+      var translatedPromise;
+      try {
+        translatedPromise = Promise.resolve(
+          this.translateFont(preEvaluatedFont, xref));
+      } catch (e) {
+        translatedPromise = Promise.reject(e);
+      }
+
+      translatedPromise.then(function (translatedFont) {
+        if (translatedFont.fontType !== undefined) {
+          var xrefFontStats = xref.stats.fontTypes;
+          xrefFontStats[translatedFont.fontType] = true;
+        }
+
+        fontCapability.resolve(new TranslatedFont(font.loadedName,
+          translatedFont, font));
+      }, function (reason) {
+        // TODO fontCapability.reject?
+        UnsupportedManager.notify(UNSUPPORTED_FEATURES.font);
+
+        try {
+          // error, but it's still nice to have font type reported
+          var descriptor = preEvaluatedFont.descriptor;
+          var fontFile3 = descriptor && descriptor.get('FontFile3');
+          var subtype = fontFile3 && fontFile3.get('Subtype');
+          var fontType = getFontType(preEvaluatedFont.type,
+                                     subtype && subtype.name);
+          var xrefFontStats = xref.stats.fontTypes;
+          xrefFontStats[fontType] = true;
+        } catch (ex) { }
+
+        fontCapability.resolve(new TranslatedFont(font.loadedName,
+          new ErrorFont(reason instanceof Error ? reason.message : reason),
+          font));
+      });
+      return fontCapability.promise;
+    },
+
+    buildPath: function PartialEvaluator_buildPath(operatorList, fn, args) {
+      var lastIndex = operatorList.length - 1;
+      if (!args) {
+        args = [];
+      }
+      if (lastIndex < 0 ||
+          operatorList.fnArray[lastIndex] !== OPS.constructPath) {
+        operatorList.addOp(OPS.constructPath, [[fn], args]);
+      } else {
+        var opArgs = operatorList.argsArray[lastIndex];
+        opArgs[0].push(fn);
+        Array.prototype.push.apply(opArgs[1], args);
+      }
+    },
+
+    handleColorN: function PartialEvaluator_handleColorN(operatorList, fn, args,
+          cs, patterns, resources, xref) {
+      // compile tiling patterns
+      var patternName = args[args.length - 1];
+      // SCN/scn applies patterns along with normal colors
+      var pattern;
+      if (isName(patternName) &&
+          (pattern = patterns.get(patternName.name))) {
+        var dict = (isStream(pattern) ? pattern.dict : pattern);
+        var typeNum = dict.get('PatternType');
+
+        if (typeNum === TILING_PATTERN) {
+          var color = cs.base ? cs.base.getRgb(args, 0) : null;
+          return this.handleTilingType(fn, color, resources, pattern,
+                                       dict, operatorList);
+        } else if (typeNum === SHADING_PATTERN) {
+          var shading = dict.get('Shading');
+          var matrix = dict.get('Matrix');
+          pattern = Pattern.parseShading(shading, matrix, xref, resources);
+          operatorList.addOp(fn, pattern.getIR());
+          return Promise.resolve();
+        } else {
+          return Promise.reject('Unknown PatternType: ' + typeNum);
+        }
+      }
+      // TODO shall we fail here?
+      operatorList.addOp(fn, args);
+      return Promise.resolve();
+    },
+
+    getOperatorList: function PartialEvaluator_getOperatorList(stream,
+                                                               resources,
+                                                               operatorList,
+                                                               initialState) {
+
+      var self = this;
+      var xref = this.xref;
+      var imageCache = {};
+
+      assert(operatorList);
+
+      resources = (resources || Dict.empty);
+      var xobjs = (resources.get('XObject') || Dict.empty);
+      var patterns = (resources.get('Pattern') || Dict.empty);
+      var stateManager = new StateManager(initialState || new EvalState());
+      var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
+      var timeSlotManager = new TimeSlotManager();
+
+      return new Promise(function next(resolve, reject) {
+        timeSlotManager.reset();
+        var stop, operation = {}, i, ii, cs;
+        while (!(stop = timeSlotManager.check())) {
+          // The arguments parsed by read() are used beyond this loop, so we
+          // cannot reuse the same array on each iteration. Therefore we pass
+          // in |null| as the initial value (see the comment on
+          // EvaluatorPreprocessor_read() for why).
+          operation.args = null;
+          if (!(preprocessor.read(operation))) {
+            break;
+          }
+          var args = operation.args;
+          var fn = operation.fn;
+
+          switch (fn | 0) {
+            case OPS.paintXObject:
+              if (args[0].code) {
+                break;
+              }
+              // eagerly compile XForm objects
+              var name = args[0].name;
+              if (imageCache[name] !== undefined) {
+                operatorList.addOp(imageCache[name].fn, imageCache[name].args);
+                args = null;
+                continue;
+              }
+
+              var xobj = xobjs.get(name);
+              if (xobj) {
+                assert(isStream(xobj), 'XObject should be a stream');
+
+                var type = xobj.dict.get('Subtype');
+                assert(isName(type),
+                  'XObject should have a Name subtype');
+
+                if (type.name === 'Form') {
+                  stateManager.save();
+                  return self.buildFormXObject(resources, xobj, null,
+                                               operatorList,
+                                               stateManager.state.clone()).
+                    then(function () {
+                      stateManager.restore();
+                      next(resolve, reject);
+                    }, reject);
+                } else if (type.name === 'Image') {
+                  self.buildPaintImageXObject(resources, xobj, false,
+                    operatorList, name, imageCache);
+                  args = null;
+                  continue;
+                } else if (type.name === 'PS') {
+                  // PostScript XObjects are unused when viewing documents.
+                  // See section 4.7.1 of Adobe's PDF reference.
+                  info('Ignored XObject subtype PS');
+                  continue;
+                } else {
+                  error('Unhandled XObject subtype ' + type.name);
+                }
+              }
+              break;
+            case OPS.setFont:
+              var fontSize = args[1];
+              // eagerly collect all fonts
+              return self.handleSetFont(resources, args, null,
+                                        operatorList, stateManager.state).
+                then(function (loadedName) {
+                  operatorList.addDependency(loadedName);
+                  operatorList.addOp(OPS.setFont, [loadedName, fontSize]);
+                  next(resolve, reject);
+                }, reject);
+            case OPS.endInlineImage:
+              var cacheKey = args[0].cacheKey;
+              if (cacheKey) {
+                var cacheEntry = imageCache[cacheKey];
+                if (cacheEntry !== undefined) {
+                  operatorList.addOp(cacheEntry.fn, cacheEntry.args);
+                  args = null;
+                  continue;
+                }
+              }
+              self.buildPaintImageXObject(resources, args[0], true,
+                operatorList, cacheKey, imageCache);
+              args = null;
+              continue;
+            case OPS.showText:
+              args[0] = self.handleText(args[0], stateManager.state);
+              break;
+            case OPS.showSpacedText:
+              var arr = args[0];
+              var combinedGlyphs = [];
+              var arrLength = arr.length;
+              for (i = 0; i < arrLength; ++i) {
+                var arrItem = arr[i];
+                if (isString(arrItem)) {
+                  Array.prototype.push.apply(combinedGlyphs,
+                    self.handleText(arrItem, stateManager.state));
+                } else if (isNum(arrItem)) {
+                  combinedGlyphs.push(arrItem);
+                }
+              }
+              args[0] = combinedGlyphs;
+              fn = OPS.showText;
+              break;
+            case OPS.nextLineShowText:
+              operatorList.addOp(OPS.nextLine);
+              args[0] = self.handleText(args[0], stateManager.state);
+              fn = OPS.showText;
+              break;
+            case OPS.nextLineSetSpacingShowText:
+              operatorList.addOp(OPS.nextLine);
+              operatorList.addOp(OPS.setWordSpacing, [args.shift()]);
+              operatorList.addOp(OPS.setCharSpacing, [args.shift()]);
+              args[0] = self.handleText(args[0], stateManager.state);
+              fn = OPS.showText;
+              break;
+            case OPS.setTextRenderingMode:
+              stateManager.state.textRenderingMode = args[0];
+              break;
+
+            case OPS.setFillColorSpace:
+              stateManager.state.fillColorSpace =
+                ColorSpace.parse(args[0], xref, resources);
+              continue;
+            case OPS.setStrokeColorSpace:
+              stateManager.state.strokeColorSpace =
+                ColorSpace.parse(args[0], xref, resources);
+              continue;
+            case OPS.setFillColor:
+              cs = stateManager.state.fillColorSpace;
+              args = cs.getRgb(args, 0);
+              fn = OPS.setFillRGBColor;
+              break;
+            case OPS.setStrokeColor:
+              cs = stateManager.state.strokeColorSpace;
+              args = cs.getRgb(args, 0);
+              fn = OPS.setStrokeRGBColor;
+              break;
+            case OPS.setFillGray:
+              stateManager.state.fillColorSpace = ColorSpace.singletons.gray;
+              args = ColorSpace.singletons.gray.getRgb(args, 0);
+              fn = OPS.setFillRGBColor;
+              break;
+            case OPS.setStrokeGray:
+              stateManager.state.strokeColorSpace = ColorSpace.singletons.gray;
+              args = ColorSpace.singletons.gray.getRgb(args, 0);
+              fn = OPS.setStrokeRGBColor;
+              break;
+            case OPS.setFillCMYKColor:
+              stateManager.state.fillColorSpace = ColorSpace.singletons.cmyk;
+              args = ColorSpace.singletons.cmyk.getRgb(args, 0);
+              fn = OPS.setFillRGBColor;
+              break;
+            case OPS.setStrokeCMYKColor:
+              stateManager.state.strokeColorSpace = ColorSpace.singletons.cmyk;
+              args = ColorSpace.singletons.cmyk.getRgb(args, 0);
+              fn = OPS.setStrokeRGBColor;
+              break;
+            case OPS.setFillRGBColor:
+              stateManager.state.fillColorSpace = ColorSpace.singletons.rgb;
+              args = ColorSpace.singletons.rgb.getRgb(args, 0);
+              break;
+            case OPS.setStrokeRGBColor:
+              stateManager.state.strokeColorSpace = ColorSpace.singletons.rgb;
+              args = ColorSpace.singletons.rgb.getRgb(args, 0);
+              break;
+            case OPS.setFillColorN:
+              cs = stateManager.state.fillColorSpace;
+              if (cs.name === 'Pattern') {
+                return self.handleColorN(operatorList, OPS.setFillColorN,
+                  args, cs, patterns, resources, xref).then(function() {
+                    next(resolve, reject);
+                  }, reject);
+              }
+              args = cs.getRgb(args, 0);
+              fn = OPS.setFillRGBColor;
+              break;
+            case OPS.setStrokeColorN:
+              cs = stateManager.state.strokeColorSpace;
+              if (cs.name === 'Pattern') {
+                return self.handleColorN(operatorList, OPS.setStrokeColorN,
+                  args, cs, patterns, resources, xref).then(function() {
+                    next(resolve, reject);
+                  }, reject);
+              }
+              args = cs.getRgb(args, 0);
+              fn = OPS.setStrokeRGBColor;
+              break;
+
+            case OPS.shadingFill:
+              var shadingRes = resources.get('Shading');
+              if (!shadingRes) {
+                error('No shading resource found');
+              }
+
+              var shading = shadingRes.get(args[0].name);
+              if (!shading) {
+                error('No shading object found');
+              }
+
+              var shadingFill = Pattern.parseShading(shading, null, xref,
+                resources);
+              var patternIR = shadingFill.getIR();
+              args = [patternIR];
+              fn = OPS.shadingFill;
+              break;
+            case OPS.setGState:
+              var dictName = args[0];
+              var extGState = resources.get('ExtGState');
+
+              if (!isDict(extGState) || !extGState.has(dictName.name)) {
+                break;
+              }
+
+              var gState = extGState.get(dictName.name);
+              return self.setGState(resources, gState, operatorList, xref,
+                stateManager).then(function() {
+                  next(resolve, reject);
+                }, reject);
+            case OPS.moveTo:
+            case OPS.lineTo:
+            case OPS.curveTo:
+            case OPS.curveTo2:
+            case OPS.curveTo3:
+            case OPS.closePath:
+              self.buildPath(operatorList, fn, args);
+              continue;
+            case OPS.rectangle:
+              self.buildPath(operatorList, fn, args);
+              continue;
+          }
+          operatorList.addOp(fn, args);
+        }
+        if (stop) {
+          deferred.then(function () {
+            next(resolve, reject);
+          });
+          return;
+        }
+        // Some PDFs don't close all restores inside object/form.
+        // Closing those for them.
+        for (i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) {
+          operatorList.addOp(OPS.restore, []);
+        }
+        resolve();
+      });
+    },
+
+    getTextContent: function PartialEvaluator_getTextContent(stream, resources,
+                                                             stateManager) {
+
+      stateManager = (stateManager || new StateManager(new TextState()));
+
+      var textContent = {
+        items: [],
+        styles: Object.create(null)
+      };
+      var bidiTexts = textContent.items;
+      var SPACE_FACTOR = 0.3;
+      var MULTI_SPACE_FACTOR = 1.5;
+
+      var self = this;
+      var xref = this.xref;
+
+      resources = (xref.fetchIfRef(resources) || Dict.empty);
+
+      // The xobj is parsed iff it's needed, e.g. if there is a `DO` cmd.
+      var xobjs = null;
+      var xobjsCache = {};
+
+      var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
+
+      var textState;
+
+      function newTextChunk() {
+        var font = textState.font;
+        if (!(font.loadedName in textContent.styles)) {
+          textContent.styles[font.loadedName] = {
+            fontFamily: font.fallbackName,
+            ascent: font.ascent,
+            descent: font.descent,
+            vertical: font.vertical
+          };
+        }
+        return {
+          // |str| is initially an array which we push individual chars to, and
+          // then runBidi() overwrites it with the final string.
+          str: [],
+          dir: null,
+          width: 0,
+          height: 0,
+          transform: null,
+          fontName: font.loadedName
+        };
+      }
+
+      function runBidi(textChunk) {
+        var str = textChunk.str.join('');
+        var bidiResult = PDFJS.bidi(str, -1, textState.font.vertical);
+        textChunk.str = bidiResult.str;
+        textChunk.dir = bidiResult.dir;
+        return textChunk;
+      }
+
+      function handleSetFont(fontName, fontRef) {
+        return self.loadFont(fontName, fontRef, xref, resources).
+          then(function (translated) {
+            textState.font = translated.font;
+            textState.fontMatrix = translated.font.fontMatrix ||
+              FONT_IDENTITY_MATRIX;
+          });
+      }
+
+      function buildTextGeometry(chars, textChunk) {
+        var font = textState.font;
+        textChunk = textChunk || newTextChunk();
+        if (!textChunk.transform) {
+          // 9.4.4 Text Space Details
+          var tsm = [textState.fontSize * textState.textHScale, 0,
+                     0, textState.fontSize,
+                     0, textState.textRise];
+
+          if (font.isType3Font &&
+              textState.fontMatrix !== FONT_IDENTITY_MATRIX &&
+              textState.fontSize === 1) {
+            var glyphHeight = font.bbox[3] - font.bbox[1];
+            if (glyphHeight > 0) {
+              glyphHeight = glyphHeight * textState.fontMatrix[3];
+              tsm[3] *= glyphHeight;
+            }
+          }
+
+          var trm = textChunk.transform = Util.transform(textState.ctm,
+                                    Util.transform(textState.textMatrix, tsm));
+          if (!font.vertical) {
+            textChunk.height = Math.sqrt(trm[2] * trm[2] + trm[3] * trm[3]);
+          } else {
+            textChunk.width = Math.sqrt(trm[0] * trm[0] + trm[1] * trm[1]);
+          }
+        }
+        var width = 0;
+        var height = 0;
+        var glyphs = font.charsToGlyphs(chars);
+        var defaultVMetrics = font.defaultVMetrics;
+        for (var i = 0; i < glyphs.length; i++) {
+          var glyph = glyphs[i];
+          if (!glyph) { // Previous glyph was a space.
+            width += textState.wordSpacing * textState.textHScale;
+            continue;
+          }
+          var vMetricX = null;
+          var vMetricY = null;
+          var glyphWidth = null;
+          if (font.vertical) {
+            if (glyph.vmetric) {
+              glyphWidth = glyph.vmetric[0];
+              vMetricX = glyph.vmetric[1];
+              vMetricY = glyph.vmetric[2];
+            } else {
+              glyphWidth = glyph.width;
+              vMetricX = glyph.width * 0.5;
+              vMetricY = defaultVMetrics[2];
+            }
+          } else {
+            glyphWidth = glyph.width;
+          }
+
+          var glyphUnicode = glyph.unicode;
+          if (NormalizedUnicodes[glyphUnicode] !== undefined) {
+            glyphUnicode = NormalizedUnicodes[glyphUnicode];
+          }
+          glyphUnicode = reverseIfRtl(glyphUnicode);
+
+          // The following will calculate the x and y of the individual glyphs.
+          // if (font.vertical) {
+          //   tsm[4] -= vMetricX * Math.abs(textState.fontSize) *
+          //             textState.fontMatrix[0];
+          //   tsm[5] -= vMetricY * textState.fontSize *
+          //             textState.fontMatrix[0];
+          // }
+          // var trm = Util.transform(textState.textMatrix, tsm);
+          // var pt = Util.applyTransform([trm[4], trm[5]], textState.ctm);
+          // var x = pt[0];
+          // var y = pt[1];
+
+          var charSpacing = 0;
+          if (textChunk.str.length > 0) {
+            // Apply char spacing only when there are chars.
+            // As a result there is only spacing between glyphs.
+            charSpacing = textState.charSpacing;
+          }
+
+          var tx = 0;
+          var ty = 0;
+          if (!font.vertical) {
+            var w0 = glyphWidth * textState.fontMatrix[0];
+            tx = (w0 * textState.fontSize + charSpacing) *
+                 textState.textHScale;
+            width += tx;
+          } else {
+            var w1 = glyphWidth * textState.fontMatrix[0];
+            ty = w1 * textState.fontSize + charSpacing;
+            height += ty;
+          }
+          textState.translateTextMatrix(tx, ty);
+
+          textChunk.str.push(glyphUnicode);
+        }
+
+        var a = textState.textLineMatrix[0];
+        var b = textState.textLineMatrix[1];
+        var scaleLineX = Math.sqrt(a * a + b * b);
+        a = textState.ctm[0];
+        b = textState.ctm[1];
+        var scaleCtmX = Math.sqrt(a * a + b * b);
+        if (!font.vertical) {
+          textChunk.width += width * scaleCtmX * scaleLineX;
+        } else {
+          textChunk.height += Math.abs(height * scaleCtmX * scaleLineX);
+        }
+        return textChunk;
+      }
+
+      var timeSlotManager = new TimeSlotManager();
+
+      return new Promise(function next(resolve, reject) {
+        timeSlotManager.reset();
+        var stop, operation = {}, args = [];
+        while (!(stop = timeSlotManager.check())) {
+          // The arguments parsed by read() are not used beyond this loop, so
+          // we can reuse the same array on every iteration, thus avoiding
+          // unnecessary allocations.
+          args.length = 0;
+          operation.args = args;
+          if (!(preprocessor.read(operation))) {
+            break;
+          }
+          textState = stateManager.state;
+          var fn = operation.fn;
+          args = operation.args;
+
+          switch (fn | 0) {
+            case OPS.setFont:
+              textState.fontSize = args[1];
+              return handleSetFont(args[0].name).then(function() {
+                next(resolve, reject);
+              }, reject);
+            case OPS.setTextRise:
+              textState.textRise = args[0];
+              break;
+            case OPS.setHScale:
+              textState.textHScale = args[0] / 100;
+              break;
+            case OPS.setLeading:
+              textState.leading = args[0];
+              break;
+            case OPS.moveText:
+              textState.translateTextLineMatrix(args[0], args[1]);
+              textState.textMatrix = textState.textLineMatrix.slice();
+              break;
+            case OPS.setLeadingMoveText:
+              textState.leading = -args[1];
+              textState.translateTextLineMatrix(args[0], args[1]);
+              textState.textMatrix = textState.textLineMatrix.slice();
+              break;
+            case OPS.nextLine:
+              textState.carriageReturn();
+              break;
+            case OPS.setTextMatrix:
+              textState.setTextMatrix(args[0], args[1], args[2], args[3],
+                args[4], args[5]);
+              textState.setTextLineMatrix(args[0], args[1], args[2], args[3],
+                args[4], args[5]);
+              break;
+            case OPS.setCharSpacing:
+              textState.charSpacing = args[0];
+              break;
+            case OPS.setWordSpacing:
+              textState.wordSpacing = args[0];
+              break;
+            case OPS.beginText:
+              textState.textMatrix = IDENTITY_MATRIX.slice();
+              textState.textLineMatrix = IDENTITY_MATRIX.slice();
+              break;
+            case OPS.showSpacedText:
+              var items = args[0];
+              var textChunk = newTextChunk();
+              var offset;
+              for (var j = 0, jj = items.length; j < jj; j++) {
+                if (typeof items[j] === 'string') {
+                  buildTextGeometry(items[j], textChunk);
+                } else {
+                  var val = items[j] / 1000;
+                  if (!textState.font.vertical) {
+                    offset = -val * textState.fontSize * textState.textHScale *
+                      textState.textMatrix[0];
+                    textState.translateTextMatrix(offset, 0);
+                    textChunk.width += offset;
+                  } else {
+                    offset = -val * textState.fontSize *
+                      textState.textMatrix[3];
+                    textState.translateTextMatrix(0, offset);
+                    textChunk.height += offset;
+                  }
+                  if (items[j] < 0 && textState.font.spaceWidth > 0) {
+                    var fakeSpaces = -items[j] / textState.font.spaceWidth;
+                    if (fakeSpaces > MULTI_SPACE_FACTOR) {
+                      fakeSpaces = Math.round(fakeSpaces);
+                      while (fakeSpaces--) {
+                        textChunk.str.push(' ');
+                      }
+                    } else if (fakeSpaces > SPACE_FACTOR) {
+                      textChunk.str.push(' ');
+                    }
+                  }
+                }
+              }
+              bidiTexts.push(runBidi(textChunk));
+              break;
+            case OPS.showText:
+              bidiTexts.push(runBidi(buildTextGeometry(args[0])));
+              break;
+            case OPS.nextLineShowText:
+              textState.carriageReturn();
+              bidiTexts.push(runBidi(buildTextGeometry(args[0])));
+              break;
+            case OPS.nextLineSetSpacingShowText:
+              textState.wordSpacing = args[0];
+              textState.charSpacing = args[1];
+              textState.carriageReturn();
+              bidiTexts.push(runBidi(buildTextGeometry(args[2])));
+              break;
+            case OPS.paintXObject:
+              if (args[0].code) {
+                break;
+              }
+
+              if (!xobjs) {
+                xobjs = (resources.get('XObject') || Dict.empty);
+              }
+
+              var name = args[0].name;
+              if (xobjsCache.key === name) {
+                if (xobjsCache.texts) {
+                  Util.appendToArray(bidiTexts, xobjsCache.texts.items);
+                  Util.extendObj(textContent.styles, xobjsCache.texts.styles);
+                }
+                break;
+              }
+
+              var xobj = xobjs.get(name);
+              if (!xobj) {
+                break;
+              }
+              assert(isStream(xobj), 'XObject should be a stream');
+
+              var type = xobj.dict.get('Subtype');
+              assert(isName(type),
+                'XObject should have a Name subtype');
+
+              if ('Form' !== type.name) {
+                xobjsCache.key = name;
+                xobjsCache.texts = null;
+                break;
+              }
+
+              stateManager.save();
+              var matrix = xobj.dict.get('Matrix');
+              if (isArray(matrix) && matrix.length === 6) {
+                stateManager.transform(matrix);
+              }
+
+              return self.getTextContent(xobj,
+                xobj.dict.get('Resources') || resources, stateManager).
+                then(function (formTextContent) {
+                  Util.appendToArray(bidiTexts, formTextContent.items);
+                  Util.extendObj(textContent.styles, formTextContent.styles);
+                  stateManager.restore();
+
+                  xobjsCache.key = name;
+                  xobjsCache.texts = formTextContent;
+
+                  next(resolve, reject);
+                }, reject);
+            case OPS.setGState:
+              var dictName = args[0];
+              var extGState = resources.get('ExtGState');
+
+              if (!isDict(extGState) || !extGState.has(dictName.name)) {
+                break;
+              }
+
+              var gsStateMap = extGState.get(dictName.name);
+              var gsStateFont = null;
+              for (var key in gsStateMap) {
+                if (key === 'Font') {
+                  assert(!gsStateFont);
+                  gsStateFont = gsStateMap[key];
+                }
+              }
+              if (gsStateFont) {
+                textState.fontSize = gsStateFont[1];
+                return handleSetFont(gsStateFont[0]).then(function() {
+                  next(resolve, reject);
+                }, reject);
+              }
+              break;
+          } // switch
+        } // while
+        if (stop) {
+          deferred.then(function () {
+            next(resolve, reject);
+          });
+          return;
+        }
+        resolve(textContent);
+      });
+    },
+
+    extractDataStructures: function
+      partialEvaluatorExtractDataStructures(dict, baseDict,
+                                            xref, properties) {
+      // 9.10.2
+      var toUnicode = (dict.get('ToUnicode') || baseDict.get('ToUnicode'));
+      if (toUnicode) {
+        properties.toUnicode = this.readToUnicode(toUnicode);
+      }
+      if (properties.composite) {
+        // CIDSystemInfo helps to match CID to glyphs
+        var cidSystemInfo = dict.get('CIDSystemInfo');
+        if (isDict(cidSystemInfo)) {
+          properties.cidSystemInfo = {
+            registry: cidSystemInfo.get('Registry'),
+            ordering: cidSystemInfo.get('Ordering'),
+            supplement: cidSystemInfo.get('Supplement')
+          };
+        }
+
+        var cidToGidMap = dict.get('CIDToGIDMap');
+        if (isStream(cidToGidMap)) {
+          properties.cidToGidMap = this.readCidToGidMap(cidToGidMap);
+        }
+      }
+
+      // Based on 9.6.6 of the spec the encoding can come from multiple places
+      // and depends on the font type. The base encoding and differences are
+      // read here, but the encoding that is actually used is chosen during
+      // glyph mapping in the font.
+      // TODO: Loading the built in encoding in the font would allow the
+      // differences to be merged in here not require us to hold on to it.
+      var differences = [];
+      var baseEncodingName = null;
+      var encoding;
+      if (dict.has('Encoding')) {
+        encoding = dict.get('Encoding');
+        if (isDict(encoding)) {
+          baseEncodingName = encoding.get('BaseEncoding');
+          baseEncodingName = (isName(baseEncodingName) ?
+                              baseEncodingName.name : null);
+          // Load the differences between the base and original
+          if (encoding.has('Differences')) {
+            var diffEncoding = encoding.get('Differences');
+            var index = 0;
+            for (var j = 0, jj = diffEncoding.length; j < jj; j++) {
+              var data = diffEncoding[j];
+              if (isNum(data)) {
+                index = data;
+              } else if (isName(data)) {
+                differences[index++] = data.name;
+              } else if (isRef(data)) {
+                diffEncoding[j--] = xref.fetch(data);
+                continue;
+              } else {
+                error('Invalid entry in \'Differences\' array: ' + data);
+              }
+            }
+          }
+        } else if (isName(encoding)) {
+          baseEncodingName = encoding.name;
+        } else {
+          error('Encoding is not a Name nor a Dict');
+        }
+        // According to table 114 if the encoding is a named encoding it must be
+        // one of these predefined encodings.
+        if ((baseEncodingName !== 'MacRomanEncoding' &&
+             baseEncodingName !== 'MacExpertEncoding' &&
+             baseEncodingName !== 'WinAnsiEncoding')) {
+          baseEncodingName = null;
+        }
+      }
+
+      if (baseEncodingName) {
+        properties.defaultEncoding = Encodings[baseEncodingName].slice();
+      } else {
+        encoding = (properties.type === 'TrueType' ?
+                    Encodings.WinAnsiEncoding : Encodings.StandardEncoding);
+        // The Symbolic attribute can be misused for regular fonts
+        // Heuristic: we have to check if the font is a standard one also
+        if (!!(properties.flags & FontFlags.Symbolic)) {
+          encoding = Encodings.MacRomanEncoding;
+          if (!properties.file) {
+            if (/Symbol/i.test(properties.name)) {
+              encoding = Encodings.SymbolSetEncoding;
+            } else if (/Dingbats/i.test(properties.name)) {
+              encoding = Encodings.ZapfDingbatsEncoding;
+            }
+          }
+        }
+        properties.defaultEncoding = encoding;
+      }
+
+      properties.differences = differences;
+      properties.baseEncodingName = baseEncodingName;
+      properties.dict = dict;
+    },
+
+    readToUnicode: function PartialEvaluator_readToUnicode(toUnicode) {
+      var cmap, cmapObj = toUnicode;
+      if (isName(cmapObj)) {
+        cmap = CMapFactory.create(cmapObj,
+          { url: PDFJS.cMapUrl, packed: PDFJS.cMapPacked }, null);
+        if (cmap instanceof IdentityCMap) {
+          return new IdentityToUnicodeMap(0, 0xFFFF);
+        }
+        return new ToUnicodeMap(cmap.getMap());
+      } else if (isStream(cmapObj)) {
+        cmap = CMapFactory.create(cmapObj,
+          { url: PDFJS.cMapUrl, packed: PDFJS.cMapPacked }, null);
+        if (cmap instanceof IdentityCMap) {
+          return new IdentityToUnicodeMap(0, 0xFFFF);
+        }
+        cmap = cmap.getMap();
+        // Convert UTF-16BE
+        // NOTE: cmap can be a sparse array, so use forEach instead of for(;;)
+        // to iterate over all keys.
+        cmap.forEach(function(token, i) {
+          var str = [];
+          for (var k = 0; k < token.length; k += 2) {
+            var w1 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1);
+            if ((w1 & 0xF800) !== 0xD800) { // w1 < 0xD800 || w1 > 0xDFFF
+              str.push(w1);
+              continue;
+            }
+            k += 2;
+            var w2 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1);
+            str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000);
+          }
+          cmap[i] = String.fromCharCode.apply(String, str);
+        });
+        return new ToUnicodeMap(cmap);
+      }
+      return null;
+    },
+
+    readCidToGidMap: function PartialEvaluator_readCidToGidMap(cidToGidStream) {
+      // Extract the encoding from the CIDToGIDMap
+      var glyphsData = cidToGidStream.getBytes();
+
+      // Set encoding 0 to later verify the font has an encoding
+      var result = [];
+      for (var j = 0, jj = glyphsData.length; j < jj; j++) {
+        var glyphID = (glyphsData[j++] << 8) | glyphsData[j];
+        if (glyphID === 0) {
+          continue;
+        }
+        var code = j >> 1;
+        result[code] = glyphID;
+      }
+      return result;
+    },
+
+    extractWidths: function PartialEvaluator_extractWidths(dict, xref,
+                                                           descriptor,
+                                                           properties) {
+      var glyphsWidths = [];
+      var defaultWidth = 0;
+      var glyphsVMetrics = [];
+      var defaultVMetrics;
+      var i, ii, j, jj, start, code, widths;
+      if (properties.composite) {
+        defaultWidth = dict.get('DW') || 1000;
+
+        widths = dict.get('W');
+        if (widths) {
+          for (i = 0, ii = widths.length; i < ii; i++) {
+            start = widths[i++];
+            code = xref.fetchIfRef(widths[i]);
+            if (isArray(code)) {
+              for (j = 0, jj = code.length; j < jj; j++) {
+                glyphsWidths[start++] = code[j];
+              }
+            } else {
+              var width = widths[++i];
+              for (j = start; j <= code; j++) {
+                glyphsWidths[j] = width;
+              }
+            }
+          }
+        }
+
+        if (properties.vertical) {
+          var vmetrics = (dict.get('DW2') || [880, -1000]);
+          defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]];
+          vmetrics = dict.get('W2');
+          if (vmetrics) {
+            for (i = 0, ii = vmetrics.length; i < ii; i++) {
+              start = vmetrics[i++];
+              code = xref.fetchIfRef(vmetrics[i]);
+              if (isArray(code)) {
+                for (j = 0, jj = code.length; j < jj; j++) {
+                  glyphsVMetrics[start++] = [code[j++], code[j++], code[j]];
+                }
+              } else {
+                var vmetric = [vmetrics[++i], vmetrics[++i], vmetrics[++i]];
+                for (j = start; j <= code; j++) {
+                  glyphsVMetrics[j] = vmetric;
+                }
+              }
+            }
+          }
+        }
+      } else {
+        var firstChar = properties.firstChar;
+        widths = dict.get('Widths');
+        if (widths) {
+          j = firstChar;
+          for (i = 0, ii = widths.length; i < ii; i++) {
+            glyphsWidths[j++] = widths[i];
+          }
+          defaultWidth = (parseFloat(descriptor.get('MissingWidth')) || 0);
+        } else {
+          // Trying get the BaseFont metrics (see comment above).
+          var baseFontName = dict.get('BaseFont');
+          if (isName(baseFontName)) {
+            var metrics = this.getBaseFontMetrics(baseFontName.name);
+
+            glyphsWidths = this.buildCharCodeToWidth(metrics.widths,
+                                                     properties);
+            defaultWidth = metrics.defaultWidth;
+          }
+        }
+      }
+
+      // Heuristic: detection of monospace font by checking all non-zero widths
+      var isMonospace = true;
+      var firstWidth = defaultWidth;
+      for (var glyph in glyphsWidths) {
+        var glyphWidth = glyphsWidths[glyph];
+        if (!glyphWidth) {
+          continue;
+        }
+        if (!firstWidth) {
+          firstWidth = glyphWidth;
+          continue;
+        }
+        if (firstWidth !== glyphWidth) {
+          isMonospace = false;
+          break;
+        }
+      }
+      if (isMonospace) {
+        properties.flags |= FontFlags.FixedPitch;
+      }
+
+      properties.defaultWidth = defaultWidth;
+      properties.widths = glyphsWidths;
+      properties.defaultVMetrics = defaultVMetrics;
+      properties.vmetrics = glyphsVMetrics;
+    },
+
+    isSerifFont: function PartialEvaluator_isSerifFont(baseFontName) {
+      // Simulating descriptor flags attribute
+      var fontNameWoStyle = baseFontName.split('-')[0];
+      return (fontNameWoStyle in serifFonts) ||
+              (fontNameWoStyle.search(/serif/gi) !== -1);
+    },
+
+    getBaseFontMetrics: function PartialEvaluator_getBaseFontMetrics(name) {
+      var defaultWidth = 0;
+      var widths = [];
+      var monospace = false;
+      var lookupName = (stdFontMap[name] || name);
+
+      if (!(lookupName in Metrics)) {
+        // Use default fonts for looking up font metrics if the passed
+        // font is not a base font
+        if (this.isSerifFont(name)) {
+          lookupName = 'Times-Roman';
+        } else {
+          lookupName = 'Helvetica';
+        }
+      }
+      var glyphWidths = Metrics[lookupName];
+
+      if (isNum(glyphWidths)) {
+        defaultWidth = glyphWidths;
+        monospace = true;
+      } else {
+        widths = glyphWidths;
+      }
+
+      return {
+        defaultWidth: defaultWidth,
+        monospace: monospace,
+        widths: widths
+      };
+    },
+
+    buildCharCodeToWidth:
+        function PartialEvaluator_bulildCharCodeToWidth(widthsByGlyphName,
+                                                        properties) {
+      var widths = Object.create(null);
+      var differences = properties.differences;
+      var encoding = properties.defaultEncoding;
+      for (var charCode = 0; charCode < 256; charCode++) {
+        if (charCode in differences &&
+            widthsByGlyphName[differences[charCode]]) {
+          widths[charCode] = widthsByGlyphName[differences[charCode]];
+          continue;
+        }
+        if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) {
+          widths[charCode] = widthsByGlyphName[encoding[charCode]];
+          continue;
+        }
+      }
+      return widths;
+    },
+
+    preEvaluateFont: function PartialEvaluator_preEvaluateFont(dict, xref) {
+      var baseDict = dict;
+      var type = dict.get('Subtype');
+      assert(isName(type), 'invalid font Subtype');
+
+      var composite = false;
+      var uint8array;
+      if (type.name === 'Type0') {
+        // If font is a composite
+        //  - get the descendant font
+        //  - set the type according to the descendant font
+        //  - get the FontDescriptor from the descendant font
+        var df = dict.get('DescendantFonts');
+        if (!df) {
+          error('Descendant fonts are not specified');
+        }
+        dict = (isArray(df) ? xref.fetchIfRef(df[0]) : df);
+
+        type = dict.get('Subtype');
+        assert(isName(type), 'invalid font Subtype');
+        composite = true;
+      }
+
+      var descriptor = dict.get('FontDescriptor');
+      if (descriptor) {
+        var hash = new MurmurHash3_64();
+        var encoding = baseDict.getRaw('Encoding');
+        if (isName(encoding)) {
+          hash.update(encoding.name);
+        } else if (isRef(encoding)) {
+          hash.update(encoding.num + '_' + encoding.gen);
+        } else if (isDict(encoding)) {
+          var keys = encoding.getKeys();
+          for (var i = 0, ii = keys.length; i < ii; i++) {
+            var entry = encoding.getRaw(keys[i]);
+            if (isName(entry)) {
+              hash.update(entry.name);
+            } else if (isRef(entry)) {
+              hash.update(entry.num + '_' + entry.gen);
+            } else if (isArray(entry)) { // 'Differences' entry.
+              // Ideally we should check the contents of the array, but to avoid
+              // parsing it here and then again in |extractDataStructures|,
+              // we only use the array length for now (fixes bug1157493.pdf).
+              hash.update(entry.length.toString());
+            }
+          }
+        }
+
+        var toUnicode = dict.get('ToUnicode') || baseDict.get('ToUnicode');
+        if (isStream(toUnicode)) {
+          var stream = toUnicode.str || toUnicode;
+          uint8array = stream.buffer ?
+            new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) :
+            new Uint8Array(stream.bytes.buffer,
+                           stream.start, stream.end - stream.start);
+          hash.update(uint8array);
+
+        } else if (isName(toUnicode)) {
+          hash.update(toUnicode.name);
+        }
+
+        var widths = dict.get('Widths') || baseDict.get('Widths');
+        if (widths) {
+          uint8array = new Uint8Array(new Uint32Array(widths).buffer);
+          hash.update(uint8array);
+        }
+      }
+
+      return {
+        descriptor: descriptor,
+        dict: dict,
+        baseDict: baseDict,
+        composite: composite,
+        type: type.name,
+        hash: hash ? hash.hexdigest() : ''
+      };
+    },
+
+    translateFont: function PartialEvaluator_translateFont(preEvaluatedFont,
+                                                           xref) {
+      var baseDict = preEvaluatedFont.baseDict;
+      var dict = preEvaluatedFont.dict;
+      var composite = preEvaluatedFont.composite;
+      var descriptor = preEvaluatedFont.descriptor;
+      var type = preEvaluatedFont.type;
+      var maxCharIndex = (composite ? 0xFFFF : 0xFF);
+      var properties;
+
+      if (!descriptor) {
+        if (type === 'Type3') {
+          // FontDescriptor is only required for Type3 fonts when the document
+          // is a tagged pdf. Create a barbebones one to get by.
+          descriptor = new Dict(null);
+          descriptor.set('FontName', Name.get(type));
+          descriptor.set('FontBBox', dict.get('FontBBox'));
+        } else {
+          // Before PDF 1.5 if the font was one of the base 14 fonts, having a
+          // FontDescriptor was not required.
+          // This case is here for compatibility.
+          var baseFontName = dict.get('BaseFont');
+          if (!isName(baseFontName)) {
+            error('Base font is not specified');
+          }
+
+          // Using base font name as a font name.
+          baseFontName = baseFontName.name.replace(/[,_]/g, '-');
+          var metrics = this.getBaseFontMetrics(baseFontName);
+
+          // Simulating descriptor flags attribute
+          var fontNameWoStyle = baseFontName.split('-')[0];
+          var flags =
+            (this.isSerifFont(fontNameWoStyle) ? FontFlags.Serif : 0) |
+            (metrics.monospace ? FontFlags.FixedPitch : 0) |
+            (symbolsFonts[fontNameWoStyle] ? FontFlags.Symbolic :
+                                             FontFlags.Nonsymbolic);
+
+          properties = {
+            type: type,
+            name: baseFontName,
+            widths: metrics.widths,
+            defaultWidth: metrics.defaultWidth,
+            flags: flags,
+            firstChar: 0,
+            lastChar: maxCharIndex
+          };
+          this.extractDataStructures(dict, dict, xref, properties);
+          properties.widths = this.buildCharCodeToWidth(metrics.widths,
+                                                        properties);
+          return new Font(baseFontName, null, properties);
+        }
+      }
+
+      // According to the spec if 'FontDescriptor' is declared, 'FirstChar',
+      // 'LastChar' and 'Widths' should exist too, but some PDF encoders seem
+      // to ignore this rule when a variant of a standart font is used.
+      // TODO Fill the width array depending on which of the base font this is
+      // a variant.
+      var firstChar = (dict.get('FirstChar') || 0);
+      var lastChar = (dict.get('LastChar') || maxCharIndex);
+
+      var fontName = descriptor.get('FontName');
+      var baseFont = dict.get('BaseFont');
+      // Some bad PDFs have a string as the font name.
+      if (isString(fontName)) {
+        fontName = Name.get(fontName);
+      }
+      if (isString(baseFont)) {
+        baseFont = Name.get(baseFont);
+      }
+
+      if (type !== 'Type3') {
+        var fontNameStr = fontName && fontName.name;
+        var baseFontStr = baseFont && baseFont.name;
+        if (fontNameStr !== baseFontStr) {
+          info('The FontDescriptor\'s FontName is "' + fontNameStr +
+               '" but should be the same as the Font\'s BaseFont "' +
+               baseFontStr + '"');
+          // Workaround for cases where e.g. fontNameStr = 'Arial' and
+          // baseFontStr = 'Arial,Bold' (needed when no font file is embedded).
+          if (fontNameStr && baseFontStr &&
+              baseFontStr.indexOf(fontNameStr) === 0) {
+            fontName = baseFont;
+          }
+        }
+      }
+      fontName = (fontName || baseFont);
+
+      assert(isName(fontName), 'invalid font name');
+
+      var fontFile = descriptor.get('FontFile', 'FontFile2', 'FontFile3');
+      if (fontFile) {
+        if (fontFile.dict) {
+          var subtype = fontFile.dict.get('Subtype');
+          if (subtype) {
+            subtype = subtype.name;
+          }
+          var length1 = fontFile.dict.get('Length1');
+          var length2 = fontFile.dict.get('Length2');
+        }
+      }
+
+      properties = {
+        type: type,
+        name: fontName.name,
+        subtype: subtype,
+        file: fontFile,
+        length1: length1,
+        length2: length2,
+        loadedName: baseDict.loadedName,
+        composite: composite,
+        wideChars: composite,
+        fixedPitch: false,
+        fontMatrix: (dict.get('FontMatrix') || FONT_IDENTITY_MATRIX),
+        firstChar: firstChar || 0,
+        lastChar: (lastChar || maxCharIndex),
+        bbox: descriptor.get('FontBBox'),
+        ascent: descriptor.get('Ascent'),
+        descent: descriptor.get('Descent'),
+        xHeight: descriptor.get('XHeight'),
+        capHeight: descriptor.get('CapHeight'),
+        flags: descriptor.get('Flags'),
+        italicAngle: descriptor.get('ItalicAngle'),
+        coded: false
+      };
+
+      if (composite) {
+        var cidEncoding = baseDict.get('Encoding');
+        if (isName(cidEncoding)) {
+          properties.cidEncoding = cidEncoding.name;
+        }
+        properties.cMap = CMapFactory.create(cidEncoding,
+          { url: PDFJS.cMapUrl, packed: PDFJS.cMapPacked }, null);
+        properties.vertical = properties.cMap.vertical;
+      }
+      this.extractDataStructures(dict, baseDict, xref, properties);
+      this.extractWidths(dict, xref, descriptor, properties);
+
+      if (type === 'Type3') {
+        properties.isType3Font = true;
+      }
+
+      return new Font(fontName.name, fontFile, properties);
+    }
+  };
+
+  return PartialEvaluator;
+})();
+
+var TranslatedFont = (function TranslatedFontClosure() {
+  function TranslatedFont(loadedName, font, dict) {
+    this.loadedName = loadedName;
+    this.font = font;
+    this.dict = dict;
+    this.type3Loaded = null;
+    this.sent = false;
+  }
+  TranslatedFont.prototype = {
+    send: function (handler) {
+      if (this.sent) {
+        return;
+      }
+      var fontData = this.font.exportData();
+      handler.send('commonobj', [
+        this.loadedName,
+        'Font',
+        fontData
+      ]);
+      this.sent = true;
+    },
+    loadType3Data: function (evaluator, resources, parentOperatorList) {
+      assert(this.font.isType3Font);
+
+      if (this.type3Loaded) {
+        return this.type3Loaded;
+      }
+
+      var translatedFont = this.font;
+      var loadCharProcsPromise = Promise.resolve();
+      var charProcs = this.dict.get('CharProcs').getAll();
+      var fontResources = this.dict.get('Resources') || resources;
+      var charProcKeys = Object.keys(charProcs);
+      var charProcOperatorList = {};
+      for (var i = 0, n = charProcKeys.length; i < n; ++i) {
+        loadCharProcsPromise = loadCharProcsPromise.then(function (key) {
+          var glyphStream = charProcs[key];
+          var operatorList = new OperatorList();
+          return evaluator.getOperatorList(glyphStream, fontResources,
+                                           operatorList).then(function () {
+            charProcOperatorList[key] = operatorList.getIR();
+
+            // Add the dependencies to the parent operator list so they are
+            // resolved before sub operator list is executed synchronously.
+            parentOperatorList.addDependencies(operatorList.dependencies);
+          }, function (reason) {
+            warn('Type3 font resource \"' + key + '\" is not available');
+            var operatorList = new OperatorList();
+            charProcOperatorList[key] = operatorList.getIR();
+          });
+        }.bind(this, charProcKeys[i]));
+      }
+      this.type3Loaded = loadCharProcsPromise.then(function () {
+        translatedFont.charProcOperatorList = charProcOperatorList;
+      });
+      return this.type3Loaded;
+    }
+  };
+  return TranslatedFont;
+})();
+
+var OperatorList = (function OperatorListClosure() {
+  var CHUNK_SIZE = 1000;
+  var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5; // close to chunk size
+
+  function getTransfers(queue) {
+    var transfers = [];
+    var fnArray = queue.fnArray, argsArray = queue.argsArray;
+    for (var i = 0, ii = queue.length; i < ii; i++) {
+      switch (fnArray[i]) {
+        case OPS.paintInlineImageXObject:
+        case OPS.paintInlineImageXObjectGroup:
+        case OPS.paintImageMaskXObject:
+          var arg = argsArray[i][0]; // first param in imgData
+          if (!arg.cached) {
+            transfers.push(arg.data.buffer);
+          }
+          break;
+      }
+    }
+    return transfers;
+  }
+
+  function OperatorList(intent, messageHandler, pageIndex) {
+    this.messageHandler = messageHandler;
+    this.fnArray = [];
+    this.argsArray = [];
+    this.dependencies = {};
+    this.pageIndex = pageIndex;
+    this.intent = intent;
+  }
+
+  OperatorList.prototype = {
+    get length() {
+      return this.argsArray.length;
+    },
+
+    addOp: function(fn, args) {
+      this.fnArray.push(fn);
+      this.argsArray.push(args);
+      if (this.messageHandler) {
+        if (this.fnArray.length >= CHUNK_SIZE) {
+          this.flush();
+        } else if (this.fnArray.length >= CHUNK_SIZE_ABOUT &&
+                   (fn === OPS.restore || fn === OPS.endText)) {
+          // heuristic to flush on boundary of restore or endText
+          this.flush();
+        }
+      }
+    },
+
+    addDependency: function(dependency) {
+      if (dependency in this.dependencies) {
+        return;
+      }
+      this.dependencies[dependency] = true;
+      this.addOp(OPS.dependency, [dependency]);
+    },
+
+    addDependencies: function(dependencies) {
+      for (var key in dependencies) {
+        this.addDependency(key);
+      }
+    },
+
+    addOpList: function(opList) {
+      Util.extendObj(this.dependencies, opList.dependencies);
+      for (var i = 0, ii = opList.length; i < ii; i++) {
+        this.addOp(opList.fnArray[i], opList.argsArray[i]);
+      }
+    },
+
+    getIR: function() {
+      return {
+        fnArray: this.fnArray,
+        argsArray: this.argsArray,
+        length: this.length
+      };
+    },
+
+    flush: function(lastChunk) {
+      if (this.intent !== 'oplist') {
+        new QueueOptimizer().optimize(this);
+      }
+      var transfers = getTransfers(this);
+      this.messageHandler.send('RenderPageChunk', {
+        operatorList: {
+          fnArray: this.fnArray,
+          argsArray: this.argsArray,
+          lastChunk: lastChunk,
+          length: this.length
+        },
+        pageIndex: this.pageIndex,
+        intent: this.intent
+      }, transfers);
+      this.dependencies = {};
+      this.fnArray.length = 0;
+      this.argsArray.length = 0;
+    }
+  };
+
+  return OperatorList;
+})();
+
+var StateManager = (function StateManagerClosure() {
+  function StateManager(initialState) {
+    this.state = initialState;
+    this.stateStack = [];
+  }
+  StateManager.prototype = {
+    save: function () {
+      var old = this.state;
+      this.stateStack.push(this.state);
+      this.state = old.clone();
+    },
+    restore: function () {
+      var prev = this.stateStack.pop();
+      if (prev) {
+        this.state = prev;
+      }
+    },
+    transform: function (args) {
+      this.state.ctm = Util.transform(this.state.ctm, args);
+    }
+  };
+  return StateManager;
+})();
+
+var TextState = (function TextStateClosure() {
+  function TextState() {
+    this.ctm = new Float32Array(IDENTITY_MATRIX);
+    this.fontSize = 0;
+    this.font = null;
+    this.fontMatrix = FONT_IDENTITY_MATRIX;
+    this.textMatrix = IDENTITY_MATRIX.slice();
+    this.textLineMatrix = IDENTITY_MATRIX.slice();
+    this.charSpacing = 0;
+    this.wordSpacing = 0;
+    this.leading = 0;
+    this.textHScale = 1;
+    this.textRise = 0;
+  }
+
+  TextState.prototype = {
+    setTextMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) {
+      var m = this.textMatrix;
+      m[0] = a; m[1] = b; m[2] = c; m[3] = d; m[4] = e; m[5] = f;
+    },
+    setTextLineMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) {
+      var m = this.textLineMatrix;
+      m[0] = a; m[1] = b; m[2] = c; m[3] = d; m[4] = e; m[5] = f;
+    },
+    translateTextMatrix: function TextState_translateTextMatrix(x, y) {
+      var m = this.textMatrix;
+      m[4] = m[0] * x + m[2] * y + m[4];
+      m[5] = m[1] * x + m[3] * y + m[5];
+    },
+    translateTextLineMatrix: function TextState_translateTextMatrix(x, y) {
+      var m = this.textLineMatrix;
+      m[4] = m[0] * x + m[2] * y + m[4];
+      m[5] = m[1] * x + m[3] * y + m[5];
+    },
+    calcRenderMatrix: function TextState_calcRendeMatrix(ctm) {
+      // 9.4.4 Text Space Details
+      var tsm = [this.fontSize * this.textHScale, 0,
+                0, this.fontSize,
+                0, this.textRise];
+      return Util.transform(ctm, Util.transform(this.textMatrix, tsm));
+    },
+    carriageReturn: function TextState_carriageReturn() {
+      this.translateTextLineMatrix(0, -this.leading);
+      this.textMatrix = this.textLineMatrix.slice();
+    },
+    clone: function TextState_clone() {
+      var clone = Object.create(this);
+      clone.textMatrix = this.textMatrix.slice();
+      clone.textLineMatrix = this.textLineMatrix.slice();
+      clone.fontMatrix = this.fontMatrix.slice();
+      return clone;
+    }
+  };
+  return TextState;
+})();
+
+var EvalState = (function EvalStateClosure() {
+  function EvalState() {
+    this.ctm = new Float32Array(IDENTITY_MATRIX);
+    this.font = null;
+    this.textRenderingMode = TextRenderingMode.FILL;
+    this.fillColorSpace = ColorSpace.singletons.gray;
+    this.strokeColorSpace = ColorSpace.singletons.gray;
+  }
+  EvalState.prototype = {
+    clone: function CanvasExtraState_clone() {
+      return Object.create(this);
+    },
+  };
+  return EvalState;
+})();
+
+var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
+  // Specifies properties for each command
+  //
+  // If variableArgs === true: [0, `numArgs`] expected
+  // If variableArgs === false: exactly `numArgs` expected
+  var OP_MAP = {
+    // Graphic state
+    w: { id: OPS.setLineWidth, numArgs: 1, variableArgs: false },
+    J: { id: OPS.setLineCap, numArgs: 1, variableArgs: false },
+    j: { id: OPS.setLineJoin, numArgs: 1, variableArgs: false },
+    M: { id: OPS.setMiterLimit, numArgs: 1, variableArgs: false },
+    d: { id: OPS.setDash, numArgs: 2, variableArgs: false },
+    ri: { id: OPS.setRenderingIntent, numArgs: 1, variableArgs: false },
+    i: { id: OPS.setFlatness, numArgs: 1, variableArgs: false },
+    gs: { id: OPS.setGState, numArgs: 1, variableArgs: false },
+    q: { id: OPS.save, numArgs: 0, variableArgs: false },
+    Q: { id: OPS.restore, numArgs: 0, variableArgs: false },
+    cm: { id: OPS.transform, numArgs: 6, variableArgs: false },
+
+    // Path
+    m: { id: OPS.moveTo, numArgs: 2, variableArgs: false },
+    l: { id: OPS.lineTo, numArgs: 2, variableArgs: false },
+    c: { id: OPS.curveTo, numArgs: 6, variableArgs: false },
+    v: { id: OPS.curveTo2, numArgs: 4, variableArgs: false },
+    y: { id: OPS.curveTo3, numArgs: 4, variableArgs: false },
+    h: { id: OPS.closePath, numArgs: 0, variableArgs: false },
+    re: { id: OPS.rectangle, numArgs: 4, variableArgs: false },
+    S: { id: OPS.stroke, numArgs: 0, variableArgs: false },
+    s: { id: OPS.closeStroke, numArgs: 0, variableArgs: false },
+    f: { id: OPS.fill, numArgs: 0, variableArgs: false },
+    F: { id: OPS.fill, numArgs: 0, variableArgs: false },
+    'f*': { id: OPS.eoFill, numArgs: 0, variableArgs: false },
+    B: { id: OPS.fillStroke, numArgs: 0, variableArgs: false },
+    'B*': { id: OPS.eoFillStroke, numArgs: 0, variableArgs: false },
+    b: { id: OPS.closeFillStroke, numArgs: 0, variableArgs: false },
+    'b*': { id: OPS.closeEOFillStroke, numArgs: 0, variableArgs: false },
+    n: { id: OPS.endPath, numArgs: 0, variableArgs: false },
+
+    // Clipping
+    W: { id: OPS.clip, numArgs: 0, variableArgs: false },
+    'W*': { id: OPS.eoClip, numArgs: 0, variableArgs: false },
+
+    // Text
+    BT: { id: OPS.beginText, numArgs: 0, variableArgs: false },
+    ET: { id: OPS.endText, numArgs: 0, variableArgs: false },
+    Tc: { id: OPS.setCharSpacing, numArgs: 1, variableArgs: false },
+    Tw: { id: OPS.setWordSpacing, numArgs: 1, variableArgs: false },
+    Tz: { id: OPS.setHScale, numArgs: 1, variableArgs: false },
+    TL: { id: OPS.setLeading, numArgs: 1, variableArgs: false },
+    Tf: { id: OPS.setFont, numArgs: 2, variableArgs: false },
+    Tr: { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false },
+    Ts: { id: OPS.setTextRise, numArgs: 1, variableArgs: false },
+    Td: { id: OPS.moveText, numArgs: 2, variableArgs: false },
+    TD: { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false },
+    Tm: { id: OPS.setTextMatrix, numArgs: 6, variableArgs: false },
+    'T*': { id: OPS.nextLine, numArgs: 0, variableArgs: false },
+    Tj: { id: OPS.showText, numArgs: 1, variableArgs: false },
+    TJ: { id: OPS.showSpacedText, numArgs: 1, variableArgs: false },
+    '\'': { id: OPS.nextLineShowText, numArgs: 1, variableArgs: false },
+    '"': { id: OPS.nextLineSetSpacingShowText, numArgs: 3,
+           variableArgs: false },
+
+    // Type3 fonts
+    d0: { id: OPS.setCharWidth, numArgs: 2, variableArgs: false },
+    d1: { id: OPS.setCharWidthAndBounds, numArgs: 6, variableArgs: false },
+
+    // Color
+    CS: { id: OPS.setStrokeColorSpace, numArgs: 1, variableArgs: false },
+    cs: { id: OPS.setFillColorSpace, numArgs: 1, variableArgs: false },
+    SC: { id: OPS.setStrokeColor, numArgs: 4, variableArgs: true },
+    SCN: { id: OPS.setStrokeColorN, numArgs: 33, variableArgs: true },
+    sc: { id: OPS.setFillColor, numArgs: 4, variableArgs: true },
+    scn: { id: OPS.setFillColorN, numArgs: 33, variableArgs: true },
+    G: { id: OPS.setStrokeGray, numArgs: 1, variableArgs: false },
+    g: { id: OPS.setFillGray, numArgs: 1, variableArgs: false },
+    RG: { id: OPS.setStrokeRGBColor, numArgs: 3, variableArgs: false },
+    rg: { id: OPS.setFillRGBColor, numArgs: 3, variableArgs: false },
+    K: { id: OPS.setStrokeCMYKColor, numArgs: 4, variableArgs: false },
+    k: { id: OPS.setFillCMYKColor, numArgs: 4, variableArgs: false },
+
+    // Shading
+    sh: { id: OPS.shadingFill, numArgs: 1, variableArgs: false },
+
+    // Images
+    BI: { id: OPS.beginInlineImage, numArgs: 0, variableArgs: false },
+    ID: { id: OPS.beginImageData, numArgs: 0, variableArgs: false },
+    EI: { id: OPS.endInlineImage, numArgs: 1, variableArgs: false },
+
+    // XObjects
+    Do: { id: OPS.paintXObject, numArgs: 1, variableArgs: false },
+    MP: { id: OPS.markPoint, numArgs: 1, variableArgs: false },
+    DP: { id: OPS.markPointProps, numArgs: 2, variableArgs: false },
+    BMC: { id: OPS.beginMarkedContent, numArgs: 1, variableArgs: false },
+    BDC: { id: OPS.beginMarkedContentProps, numArgs: 2,
+           variableArgs: false },
+    EMC: { id: OPS.endMarkedContent, numArgs: 0, variableArgs: false },
+
+    // Compatibility
+    BX: { id: OPS.beginCompat, numArgs: 0, variableArgs: false },
+    EX: { id: OPS.endCompat, numArgs: 0, variableArgs: false },
+
+    // (reserved partial commands for the lexer)
+    BM: null,
+    BD: null,
+    'true': null,
+    fa: null,
+    fal: null,
+    fals: null,
+    'false': null,
+    nu: null,
+    nul: null,
+    'null': null
+  };
+
+  function EvaluatorPreprocessor(stream, xref, stateManager) {
+    // TODO(mduan): pass array of knownCommands rather than OP_MAP
+    // dictionary
+    this.parser = new Parser(new Lexer(stream, OP_MAP), false, xref);
+    this.stateManager = stateManager;
+    this.nonProcessedArgs = [];
+  }
+
+  EvaluatorPreprocessor.prototype = {
+    get savedStatesDepth() {
+      return this.stateManager.stateStack.length;
+    },
+
+    // |operation| is an object with two fields:
+    //
+    // - |fn| is an out param.
+    //
+    // - |args| is an inout param. On entry, it should have one of two values.
+    //
+    //   - An empty array. This indicates that the caller is providing the
+    //     array in which the args will be stored in. The caller should use
+    //     this value if it can reuse a single array for each call to read().
+    //
+    //   - |null|. This indicates that the caller needs this function to create
+    //     the array in which any args are stored in. If there are zero args,
+    //     this function will leave |operation.args| as |null| (thus avoiding
+    //     allocations that would occur if we used an empty array to represent
+    //     zero arguments). Otherwise, it will replace |null| with a new array
+    //     containing the arguments. The caller should use this value if it
+    //     cannot reuse an array for each call to read().
+    //
+    // These two modes are present because this function is very hot and so
+    // avoiding allocations where possible is worthwhile.
+    //
+    read: function EvaluatorPreprocessor_read(operation) {
+      var args = operation.args;
+      while (true) {
+        var obj = this.parser.getObj();
+        if (isCmd(obj)) {
+          var cmd = obj.cmd;
+          // Check that the command is valid
+          var opSpec = OP_MAP[cmd];
+          if (!opSpec) {
+            warn('Unknown command "' + cmd + '"');
+            continue;
+          }
+
+          var fn = opSpec.id;
+          var numArgs = opSpec.numArgs;
+          var argsLength = args !== null ? args.length : 0;
+
+          if (!opSpec.variableArgs) {
+            // Postscript commands can be nested, e.g. /F2 /GS2 gs 5.711 Tf
+            if (argsLength !== numArgs) {
+              var nonProcessedArgs = this.nonProcessedArgs;
+              while (argsLength > numArgs) {
+                nonProcessedArgs.push(args.shift());
+                argsLength--;
+              }
+              while (argsLength < numArgs && nonProcessedArgs.length !== 0) {
+                if (!args) {
+                  args = [];
+                }
+                args.unshift(nonProcessedArgs.pop());
+                argsLength++;
+              }
+            }
+
+            if (argsLength < numArgs) {
+              // If we receive too few args, it's not possible to possible
+              // to execute the command, so skip the command
+              info('Command ' + fn + ': because expected ' +
+                   numArgs + ' args, but received ' + argsLength +
+                   ' args; skipping');
+              args = null;
+              continue;
+            }
+          } else if (argsLength > numArgs) {
+            info('Command ' + fn + ': expected [0,' + numArgs +
+                 '] args, but received ' + argsLength + ' args');
+          }
+
+          // TODO figure out how to type-check vararg functions
+          this.preprocessCommand(fn, args);
+
+          operation.fn = fn;
+          operation.args = args;
+          return true;
+        } else {
+          if (isEOF(obj)) {
+            return false; // no more commands
+          }
+          // argument
+          if (obj !== null) {
+            if (!args) {
+              args = [];
+            }
+            args.push((obj instanceof Dict ? obj.getAll() : obj));
+            assert(args.length <= 33, 'Too many arguments');
+          }
+        }
+      }
+    },
+
+    preprocessCommand:
+        function EvaluatorPreprocessor_preprocessCommand(fn, args) {
+      switch (fn | 0) {
+        case OPS.save:
+          this.stateManager.save();
+          break;
+        case OPS.restore:
+          this.stateManager.restore();
+          break;
+        case OPS.transform:
+          this.stateManager.transform(args);
+          break;
+      }
+    }
+  };
+  return EvaluatorPreprocessor;
+})();
+
+var QueueOptimizer = (function QueueOptimizerClosure() {
+  function addState(parentState, pattern, fn) {
+    var state = parentState;
+    for (var i = 0, ii = pattern.length - 1; i < ii; i++) {
+      var item = pattern[i];
+      state = (state[item] || (state[item] = []));
+    }
+    state[pattern[pattern.length - 1]] = fn;
+  }
+
+  function handlePaintSolidColorImageMask(iFirstSave, count, fnArray,
+                                          argsArray) {
+    // Handles special case of mainly LaTeX documents which use image masks to
+    // draw lines with the current fill style.
+    // 'count' groups of (save, transform, paintImageMaskXObject, restore)+
+    // have been found at iFirstSave.
+    var iFirstPIMXO = iFirstSave + 2;
+    for (var i = 0; i < count; i++) {
+      var arg = argsArray[iFirstPIMXO + 4 * i];
+      var imageMask = arg.length === 1 && arg[0];
+      if (imageMask && imageMask.width === 1 && imageMask.height === 1 &&
+          (!imageMask.data.length ||
+           (imageMask.data.length === 1 && imageMask.data[0] === 0))) {
+        fnArray[iFirstPIMXO + 4 * i] = OPS.paintSolidColorImageMask;
+        continue;
+      }
+      break;
+    }
+    return count - i;
+  }
+
+  var InitialState = [];
+
+  // This replaces (save, transform, paintInlineImageXObject, restore)+
+  // sequences with one |paintInlineImageXObjectGroup| operation.
+  addState(InitialState,
+    [OPS.save, OPS.transform, OPS.paintInlineImageXObject, OPS.restore],
+    function foundInlineImageGroup(context) {
+      var MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10;
+      var MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200;
+      var MAX_WIDTH = 1000;
+      var IMAGE_PADDING = 1;
+
+      var fnArray = context.fnArray, argsArray = context.argsArray;
+      var curr = context.iCurr;
+      var iFirstSave = curr - 3;
+      var iFirstTransform = curr - 2;
+      var iFirstPIIXO = curr - 1;
+
+      // Look for the quartets.
+      var i = iFirstSave + 4;
+      var ii = fnArray.length;
+      while (i + 3 < ii) {
+        if (fnArray[i] !== OPS.save ||
+            fnArray[i + 1] !== OPS.transform ||
+            fnArray[i + 2] !== OPS.paintInlineImageXObject ||
+            fnArray[i + 3] !== OPS.restore) {
+          break;    // ops don't match
+        }
+        i += 4;
+      }
+
+      // At this point, i is the index of the first op past the last valid
+      // quartet.
+      var count = Math.min((i - iFirstSave) / 4,
+                           MAX_IMAGES_IN_INLINE_IMAGES_BLOCK);
+      if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) {
+        return i;
+      }
+
+      // assuming that heights of those image is too small (~1 pixel)
+      // packing as much as possible by lines
+      var maxX = 0;
+      var map = [], maxLineHeight = 0;
+      var currentX = IMAGE_PADDING, currentY = IMAGE_PADDING;
+      var q;
+      for (q = 0; q < count; q++) {
+        var transform = argsArray[iFirstTransform + (q << 2)];
+        var img = argsArray[iFirstPIIXO + (q << 2)][0];
+        if (currentX + img.width > MAX_WIDTH) {
+          // starting new line
+          maxX = Math.max(maxX, currentX);
+          currentY += maxLineHeight + 2 * IMAGE_PADDING;
+          currentX = 0;
+          maxLineHeight = 0;
+        }
+        map.push({
+          transform: transform,
+          x: currentX, y: currentY,
+          w: img.width, h: img.height
+        });
+        currentX += img.width + 2 * IMAGE_PADDING;
+        maxLineHeight = Math.max(maxLineHeight, img.height);
+      }
+      var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;
+      var imgHeight = currentY + maxLineHeight + IMAGE_PADDING;
+      var imgData = new Uint8Array(imgWidth * imgHeight * 4);
+      var imgRowSize = imgWidth << 2;
+      for (q = 0; q < count; q++) {
+        var data = argsArray[iFirstPIIXO + (q << 2)][0].data;
+        // Copy image by lines and extends pixels into padding.
+        var rowSize = map[q].w << 2;
+        var dataOffset = 0;
+        var offset = (map[q].x + map[q].y * imgWidth) << 2;
+        imgData.set(data.subarray(0, rowSize), offset - imgRowSize);
+        for (var k = 0, kk = map[q].h; k < kk; k++) {
+          imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset);
+          dataOffset += rowSize;
+          offset += imgRowSize;
+        }
+        imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset);
+        while (offset >= 0) {
+          data[offset - 4] = data[offset];
+          data[offset - 3] = data[offset + 1];
+          data[offset - 2] = data[offset + 2];
+          data[offset - 1] = data[offset + 3];
+          data[offset + rowSize] = data[offset + rowSize - 4];
+          data[offset + rowSize + 1] = data[offset + rowSize - 3];
+          data[offset + rowSize + 2] = data[offset + rowSize - 2];
+          data[offset + rowSize + 3] = data[offset + rowSize - 1];
+          offset -= imgRowSize;
+        }
+      }
+
+      // Replace queue items.
+      fnArray.splice(iFirstSave, count * 4, OPS.paintInlineImageXObjectGroup);
+      argsArray.splice(iFirstSave, count * 4,
+        [{ width: imgWidth, height: imgHeight, kind: ImageKind.RGBA_32BPP,
+           data: imgData }, map]);
+
+      return iFirstSave + 1;
+    });
+
+  // This replaces (save, transform, paintImageMaskXObject, restore)+
+  // sequences with one |paintImageMaskXObjectGroup| or one
+  // |paintImageMaskXObjectRepeat| operation.
+  addState(InitialState,
+    [OPS.save, OPS.transform, OPS.paintImageMaskXObject, OPS.restore],
+    function foundImageMaskGroup(context) {
+      var MIN_IMAGES_IN_MASKS_BLOCK = 10;
+      var MAX_IMAGES_IN_MASKS_BLOCK = 100;
+      var MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000;
+
+      var fnArray = context.fnArray, argsArray = context.argsArray;
+      var curr = context.iCurr;
+      var iFirstSave = curr - 3;
+      var iFirstTransform = curr - 2;
+      var iFirstPIMXO = curr - 1;
+
+      // Look for the quartets.
+      var i = iFirstSave + 4;
+      var ii = fnArray.length;
+      while (i + 3 < ii) {
+        if (fnArray[i] !== OPS.save ||
+            fnArray[i + 1] !== OPS.transform ||
+            fnArray[i + 2] !== OPS.paintImageMaskXObject ||
+            fnArray[i + 3] !== OPS.restore) {
+          break;    // ops don't match
+        }
+        i += 4;
+      }
+
+      // At this point, i is the index of the first op past the last valid
+      // quartet.
+      var count = (i - iFirstSave) / 4;
+      count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray,
+                                             argsArray);
+      if (count < MIN_IMAGES_IN_MASKS_BLOCK) {
+        return i;
+      }
+
+      var q;
+      var isSameImage = false;
+      var iTransform, transformArgs;
+      var firstPIMXOArg0 = argsArray[iFirstPIMXO][0];
+      if (argsArray[iFirstTransform][1] === 0 &&
+          argsArray[iFirstTransform][2] === 0) {
+        isSameImage = true;
+        var firstTransformArg0 = argsArray[iFirstTransform][0];
+        var firstTransformArg3 = argsArray[iFirstTransform][3];
+        iTransform = iFirstTransform + 4;
+        var iPIMXO = iFirstPIMXO + 4;
+        for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {
+          transformArgs = argsArray[iTransform];
+          if (argsArray[iPIMXO][0] !== firstPIMXOArg0 ||
+              transformArgs[0] !== firstTransformArg0 ||
+              transformArgs[1] !== 0 ||
+              transformArgs[2] !== 0 ||
+              transformArgs[3] !== firstTransformArg3) {
+            if (q < MIN_IMAGES_IN_MASKS_BLOCK) {
+              isSameImage = false;
+            } else {
+              count = q;
+            }
+            break; // different image or transform
+          }
+        }
+      }
+
+      if (isSameImage) {
+        count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK);
+        var positions = new Float32Array(count * 2);
+        iTransform = iFirstTransform;
+        for (q = 0; q < count; q++, iTransform += 4) {
+          transformArgs = argsArray[iTransform];
+          positions[(q << 1)] = transformArgs[4];
+          positions[(q << 1) + 1] = transformArgs[5];
+        }
+
+        // Replace queue items.
+        fnArray.splice(iFirstSave, count * 4, OPS.paintImageMaskXObjectRepeat);
+        argsArray.splice(iFirstSave, count * 4,
+          [firstPIMXOArg0, firstTransformArg0, firstTransformArg3, positions]);
+      } else {
+        count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);
+        var images = [];
+        for (q = 0; q < count; q++) {
+          transformArgs = argsArray[iFirstTransform + (q << 2)];
+          var maskParams = argsArray[iFirstPIMXO + (q << 2)][0];
+          images.push({ data: maskParams.data, width: maskParams.width,
+                        height: maskParams.height,
+                        transform: transformArgs });
+        }
+
+        // Replace queue items.
+        fnArray.splice(iFirstSave, count * 4, OPS.paintImageMaskXObjectGroup);
+        argsArray.splice(iFirstSave, count * 4, [images]);
+      }
+
+      return iFirstSave + 1;
+    });
+
+  // This replaces (save, transform, paintImageXObject, restore)+ sequences
+  // with one paintImageXObjectRepeat operation, if the |transform| and
+  // |paintImageXObjectRepeat| ops are appropriate.
+  addState(InitialState,
+    [OPS.save, OPS.transform, OPS.paintImageXObject, OPS.restore],
+    function (context) {
+      var MIN_IMAGES_IN_BLOCK = 3;
+      var MAX_IMAGES_IN_BLOCK = 1000;
+
+      var fnArray = context.fnArray, argsArray = context.argsArray;
+      var curr = context.iCurr;
+      var iFirstSave = curr - 3;
+      var iFirstTransform = curr - 2;
+      var iFirstPIXO = curr - 1;
+      var iFirstRestore = curr;
+
+      if (argsArray[iFirstTransform][1] !== 0 ||
+          argsArray[iFirstTransform][2] !== 0) {
+        return iFirstRestore + 1;   // transform has the wrong form
+      }
+
+      // Look for the quartets.
+      var firstPIXOArg0 = argsArray[iFirstPIXO][0];
+      var firstTransformArg0 = argsArray[iFirstTransform][0];
+      var firstTransformArg3 = argsArray[iFirstTransform][3];
+      var i = iFirstSave + 4;
+      var ii = fnArray.length;
+      while (i + 3 < ii) {
+        if (fnArray[i] !== OPS.save ||
+            fnArray[i + 1] !== OPS.transform ||
+            fnArray[i + 2] !== OPS.paintImageXObject ||
+            fnArray[i + 3] !== OPS.restore) {
+          break;    // ops don't match
+        }
+        if (argsArray[i + 1][0] !== firstTransformArg0 ||
+            argsArray[i + 1][1] !== 0 ||
+            argsArray[i + 1][2] !== 0 ||
+            argsArray[i + 1][3] !== firstTransformArg3) {
+          break;    // transforms don't match
+        }
+        if (argsArray[i + 2][0] !== firstPIXOArg0) {
+          break;    // images don't match
+        }
+        i += 4;
+      }
+
+      // At this point, i is the index of the first op past the last valid
+      // quartet.
+      var count = Math.min((i - iFirstSave) / 4, MAX_IMAGES_IN_BLOCK);
+      if (count < MIN_IMAGES_IN_BLOCK) {
+        return i;
+      }
+
+      // Extract the (x,y) positions from all of the matching transforms.
+      var positions = new Float32Array(count * 2);
+      var iTransform = iFirstTransform;
+      for (var q = 0; q < count; q++, iTransform += 4) {
+        var transformArgs = argsArray[iTransform];
+        positions[(q << 1)] = transformArgs[4];
+        positions[(q << 1) + 1] = transformArgs[5];
+      }
+
+      // Replace queue items.
+      var args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3,
+                  positions];
+      fnArray.splice(iFirstSave, count * 4, OPS.paintImageXObjectRepeat);
+      argsArray.splice(iFirstSave, count * 4, args);
+
+      return iFirstSave + 1;
+    });
+
+  // This replaces (beginText, setFont, setTextMatrix, showText, endText)+
+  // sequences with (beginText, setFont, (setTextMatrix, showText)+, endText)+
+  // sequences, if the font for each one is the same.
+  addState(InitialState,
+    [OPS.beginText, OPS.setFont, OPS.setTextMatrix, OPS.showText, OPS.endText],
+    function (context) {
+      var MIN_CHARS_IN_BLOCK = 3;
+      var MAX_CHARS_IN_BLOCK = 1000;
+
+      var fnArray = context.fnArray, argsArray = context.argsArray;
+      var curr = context.iCurr;
+      var iFirstBeginText = curr - 4;
+      var iFirstSetFont = curr - 3;
+      var iFirstSetTextMatrix = curr - 2;
+      var iFirstShowText = curr - 1;
+      var iFirstEndText = curr;
+
+      // Look for the quintets.
+      var firstSetFontArg0 = argsArray[iFirstSetFont][0];
+      var firstSetFontArg1 = argsArray[iFirstSetFont][1];
+      var i = iFirstBeginText + 5;
+      var ii = fnArray.length;
+      while (i + 4 < ii) {
+        if (fnArray[i] !== OPS.beginText ||
+            fnArray[i + 1] !== OPS.setFont ||
+            fnArray[i + 2] !== OPS.setTextMatrix ||
+            fnArray[i + 3] !== OPS.showText ||
+            fnArray[i + 4] !== OPS.endText) {
+          break;    // ops don't match
+        }
+        if (argsArray[i + 1][0] !== firstSetFontArg0 ||
+            argsArray[i + 1][1] !== firstSetFontArg1) {
+          break;    // fonts don't match
+        }
+        i += 5;
+      }
+
+      // At this point, i is the index of the first op past the last valid
+      // quintet.
+      var count = Math.min(((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK);
+      if (count < MIN_CHARS_IN_BLOCK) {
+        return i;
+      }
+
+      // If the preceding quintet is (<something>, setFont, setTextMatrix,
+      // showText, endText), include that as well. (E.g. <something> might be
+      // |dependency|.)
+      var iFirst = iFirstBeginText;
+      if (iFirstBeginText >= 4 &&
+          fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] &&
+          fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] &&
+          fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] &&
+          fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] &&
+          argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 &&
+          argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) {
+        count++;
+        iFirst -= 5;
+      }
+
+      // Remove (endText, beginText, setFont) trios.
+      var iEndText = iFirst + 4;
+      for (var q = 1; q < count; q++) {
+        fnArray.splice(iEndText, 3);
+        argsArray.splice(iEndText, 3);
+        iEndText += 2;
+      }
+
+      return iEndText + 1;
+    });
+
+  function QueueOptimizer() {}
+
+  QueueOptimizer.prototype = {
+    optimize: function QueueOptimizer_optimize(queue) {
+      var fnArray = queue.fnArray, argsArray = queue.argsArray;
+      var context = {
+        iCurr: 0,
+        fnArray: fnArray,
+        argsArray: argsArray
+      };
+      var state;
+      var i = 0, ii = fnArray.length;
+      while (i < ii) {
+        state = (state || InitialState)[fnArray[i]];
+        if (typeof state === 'function') { // we found some handler
+          context.iCurr = i;
+          // state() returns the index of the first non-matching op (if we
+          // didn't match) or the first op past the modified ops (if we did
+          // match and replace).
+          i = state(context);
+          state = undefined;    // reset the state machine
+          ii = context.fnArray.length;
+        } else {
+          i++;
+        }
+      }
+    }
+  };
+  return QueueOptimizer;
+})();
+
+
+var BUILT_IN_CMAPS = [
+// << Start unicode maps.
+'Adobe-GB1-UCS2',
+'Adobe-CNS1-UCS2',
+'Adobe-Japan1-UCS2',
+'Adobe-Korea1-UCS2',
+// >> End unicode maps.
+'78-EUC-H',
+'78-EUC-V',
+'78-H',
+'78-RKSJ-H',
+'78-RKSJ-V',
+'78-V',
+'78ms-RKSJ-H',
+'78ms-RKSJ-V',
+'83pv-RKSJ-H',
+'90ms-RKSJ-H',
+'90ms-RKSJ-V',
+'90msp-RKSJ-H',
+'90msp-RKSJ-V',
+'90pv-RKSJ-H',
+'90pv-RKSJ-V',
+'Add-H',
+'Add-RKSJ-H',
+'Add-RKSJ-V',
+'Add-V',
+'Adobe-CNS1-0',
+'Adobe-CNS1-1',
+'Adobe-CNS1-2',
+'Adobe-CNS1-3',
+'Adobe-CNS1-4',
+'Adobe-CNS1-5',
+'Adobe-CNS1-6',
+'Adobe-GB1-0',
+'Adobe-GB1-1',
+'Adobe-GB1-2',
+'Adobe-GB1-3',
+'Adobe-GB1-4',
+'Adobe-GB1-5',
+'Adobe-Japan1-0',
+'Adobe-Japan1-1',
+'Adobe-Japan1-2',
+'Adobe-Japan1-3',
+'Adobe-Japan1-4',
+'Adobe-Japan1-5',
+'Adobe-Japan1-6',
+'Adobe-Korea1-0',
+'Adobe-Korea1-1',
+'Adobe-Korea1-2',
+'B5-H',
+'B5-V',
+'B5pc-H',
+'B5pc-V',
+'CNS-EUC-H',
+'CNS-EUC-V',
+'CNS1-H',
+'CNS1-V',
+'CNS2-H',
+'CNS2-V',
+'ETHK-B5-H',
+'ETHK-B5-V',
+'ETen-B5-H',
+'ETen-B5-V',
+'ETenms-B5-H',
+'ETenms-B5-V',
+'EUC-H',
+'EUC-V',
+'Ext-H',
+'Ext-RKSJ-H',
+'Ext-RKSJ-V',
+'Ext-V',
+'GB-EUC-H',
+'GB-EUC-V',
+'GB-H',
+'GB-V',
+'GBK-EUC-H',
+'GBK-EUC-V',
+'GBK2K-H',
+'GBK2K-V',
+'GBKp-EUC-H',
+'GBKp-EUC-V',
+'GBT-EUC-H',
+'GBT-EUC-V',
+'GBT-H',
+'GBT-V',
+'GBTpc-EUC-H',
+'GBTpc-EUC-V',
+'GBpc-EUC-H',
+'GBpc-EUC-V',
+'H',
+'HKdla-B5-H',
+'HKdla-B5-V',
+'HKdlb-B5-H',
+'HKdlb-B5-V',
+'HKgccs-B5-H',
+'HKgccs-B5-V',
+'HKm314-B5-H',
+'HKm314-B5-V',
+'HKm471-B5-H',
+'HKm471-B5-V',
+'HKscs-B5-H',
+'HKscs-B5-V',
+'Hankaku',
+'Hiragana',
+'KSC-EUC-H',
+'KSC-EUC-V',
+'KSC-H',
+'KSC-Johab-H',
+'KSC-Johab-V',
+'KSC-V',
+'KSCms-UHC-H',
+'KSCms-UHC-HW-H',
+'KSCms-UHC-HW-V',
+'KSCms-UHC-V',
+'KSCpc-EUC-H',
+'KSCpc-EUC-V',
+'Katakana',
+'NWP-H',
+'NWP-V',
+'RKSJ-H',
+'RKSJ-V',
+'Roman',
+'UniCNS-UCS2-H',
+'UniCNS-UCS2-V',
+'UniCNS-UTF16-H',
+'UniCNS-UTF16-V',
+'UniCNS-UTF32-H',
+'UniCNS-UTF32-V',
+'UniCNS-UTF8-H',
+'UniCNS-UTF8-V',
+'UniGB-UCS2-H',
+'UniGB-UCS2-V',
+'UniGB-UTF16-H',
+'UniGB-UTF16-V',
+'UniGB-UTF32-H',
+'UniGB-UTF32-V',
+'UniGB-UTF8-H',
+'UniGB-UTF8-V',
+'UniJIS-UCS2-H',
+'UniJIS-UCS2-HW-H',
+'UniJIS-UCS2-HW-V',
+'UniJIS-UCS2-V',
+'UniJIS-UTF16-H',
+'UniJIS-UTF16-V',
+'UniJIS-UTF32-H',
+'UniJIS-UTF32-V',
+'UniJIS-UTF8-H',
+'UniJIS-UTF8-V',
+'UniJIS2004-UTF16-H',
+'UniJIS2004-UTF16-V',
+'UniJIS2004-UTF32-H',
+'UniJIS2004-UTF32-V',
+'UniJIS2004-UTF8-H',
+'UniJIS2004-UTF8-V',
+'UniJISPro-UCS2-HW-V',
+'UniJISPro-UCS2-V',
+'UniJISPro-UTF8-V',
+'UniJISX0213-UTF32-H',
+'UniJISX0213-UTF32-V',
+'UniJISX02132004-UTF32-H',
+'UniJISX02132004-UTF32-V',
+'UniKS-UCS2-H',
+'UniKS-UCS2-V',
+'UniKS-UTF16-H',
+'UniKS-UTF16-V',
+'UniKS-UTF32-H',
+'UniKS-UTF32-V',
+'UniKS-UTF8-H',
+'UniKS-UTF8-V',
+'V',
+'WP-Symbol'];
+
+// CMap, not to be confused with TrueType's cmap.
+var CMap = (function CMapClosure() {
+  function CMap(builtInCMap) {
+    // Codespace ranges are stored as follows:
+    // [[1BytePairs], [2BytePairs], [3BytePairs], [4BytePairs]]
+    // where nBytePairs are ranges e.g. [low1, high1, low2, high2, ...]
+    this.codespaceRanges = [[], [], [], []];
+    this.numCodespaceRanges = 0;
+    // Map entries have one of two forms.
+    // - cid chars are 16-bit unsigned integers, stored as integers.
+    // - bf chars are variable-length byte sequences, stored as strings, with
+    //   one byte per character.
+    this._map = [];
+    this.name = '';
+    this.vertical = false;
+    this.useCMap = null;
+    this.builtInCMap = builtInCMap;
+  }
+  CMap.prototype = {
+    addCodespaceRange: function(n, low, high) {
+      this.codespaceRanges[n - 1].push(low, high);
+      this.numCodespaceRanges++;
+    },
+
+    mapCidRange: function(low, high, dstLow) {
+      while (low <= high) {
+        this._map[low++] = dstLow++;
+      }
+    },
+
+    mapBfRange: function(low, high, dstLow) {
+      var lastByte = dstLow.length - 1;
+      while (low <= high) {
+        this._map[low++] = dstLow;
+        // Only the last byte has to be incremented.
+        dstLow = dstLow.substr(0, lastByte) +
+                 String.fromCharCode(dstLow.charCodeAt(lastByte) + 1);
+      }
+    },
+
+    mapBfRangeToArray: function(low, high, array) {
+      var i = 0, ii = array.length;
+      while (low <= high && i < ii) {
+        this._map[low] = array[i++];
+        ++low;
+      }
+    },
+
+    // This is used for both bf and cid chars.
+    mapOne: function(src, dst) {
+      this._map[src] = dst;
+    },
+
+    lookup: function(code) {
+      return this._map[code];
+    },
+
+    contains: function(code) {
+      return this._map[code] !== undefined;
+    },
+
+    forEach: function(callback) {
+      // Most maps have fewer than 65536 entries, and for those we use normal
+      // array iteration. But really sparse tables are possible -- e.g. with
+      // indices in the *billions*. For such tables we use for..in, which isn't
+      // ideal because it stringifies the indices for all present elements, but
+      // it does avoid iterating over every undefined entry.
+      var map = this._map;
+      var length = map.length;
+      var i;
+      if (length <= 0x10000) {
+        for (i = 0; i < length; i++) {
+          if (map[i] !== undefined) {
+            callback(i, map[i]);
+          }
+        }
+      } else {
+        for (i in this._map) {
+          callback(i, map[i]);
+        }
+      }
+    },
+
+    charCodeOf: function(value) {
+      return this._map.indexOf(value);
+    },
+
+    getMap: function() {
+      return this._map;
+    },
+
+    readCharCode: function(str, offset, out) {
+      var c = 0;
+      var codespaceRanges = this.codespaceRanges;
+      var codespaceRangesLen = this.codespaceRanges.length;
+      // 9.7.6.2 CMap Mapping
+      // The code length is at most 4.
+      for (var n = 0; n < codespaceRangesLen; n++) {
+        c = ((c << 8) | str.charCodeAt(offset + n)) >>> 0;
+        // Check each codespace range to see if it falls within.
+        var codespaceRange = codespaceRanges[n];
+        for (var k = 0, kk = codespaceRange.length; k < kk;) {
+          var low = codespaceRange[k++];
+          var high = codespaceRange[k++];
+          if (c >= low && c <= high) {
+            out.charcode = c;
+            out.length = n + 1;
+            return;
+          }
+        }
+      }
+      out.charcode = 0;
+      out.length = 1;
+    },
+
+    get isIdentityCMap() {
+      if (!(this.name === 'Identity-H' || this.name === 'Identity-V')) {
+        return false;
+      }
+      if (this._map.length !== 0x10000) {
+        return false;
+      }
+      for (var i = 0; i < 0x10000; i++) {
+        if (this._map[i] !== i) {
+          return false;
+        }
+      }
+      return true;
+    }
+  };
+  return CMap;
+})();
+
+// A special case of CMap, where the _map array implicitly has a length of
+// 65536 and each element is equal to its index.
+var IdentityCMap = (function IdentityCMapClosure() {
+  function IdentityCMap(vertical, n) {
+    CMap.call(this);
+    this.vertical = vertical;
+    this.addCodespaceRange(n, 0, 0xffff);
+  }
+  Util.inherit(IdentityCMap, CMap, {});
+
+  IdentityCMap.prototype = {
+    addCodespaceRange: CMap.prototype.addCodespaceRange,
+
+    mapCidRange: function(low, high, dstLow) {
+      error('should not call mapCidRange');
+    },
+
+    mapBfRange: function(low, high, dstLow) {
+      error('should not call mapBfRange');
+    },
+
+    mapBfRangeToArray: function(low, high, array) {
+      error('should not call mapBfRangeToArray');
+    },
+
+    mapOne: function(src, dst) {
+      error('should not call mapCidOne');
+    },
+
+    lookup: function(code) {
+      return (isInt(code) && code <= 0xffff) ? code : undefined;
+    },
+
+    contains: function(code) {
+      return isInt(code) && code <= 0xffff;
+    },
+
+    forEach: function(callback) {
+      for (var i = 0; i <= 0xffff; i++) {
+        callback(i, i);
+      }
+    },
+
+    charCodeOf: function(value) {
+      return (isInt(value) && value <= 0xffff) ? value : -1;
+    },
+
+    getMap: function() {
+      // Sometimes identity maps must be instantiated, but it's rare.
+      var map = new Array(0x10000);
+      for (var i = 0; i <= 0xffff; i++) {
+        map[i] = i;
+      }
+      return map;
+    },
+
+    readCharCode: CMap.prototype.readCharCode,
+
+    get isIdentityCMap() {
+      error('should not access .isIdentityCMap');
+    }
+  };
+
+  return IdentityCMap;
+})();
+
+var BinaryCMapReader = (function BinaryCMapReaderClosure() {
+  function fetchBinaryData(url) {
+    var nonBinaryRequest = PDFJS.disableWorker;
+    var request = new XMLHttpRequest();
+    request.open('GET', url, false);
+    if (!nonBinaryRequest) {
+      try {
+        request.responseType = 'arraybuffer';
+        nonBinaryRequest = request.responseType !== 'arraybuffer';
+      } catch (e) {
+        nonBinaryRequest = true;
+      }
+    }
+    if (nonBinaryRequest && request.overrideMimeType) {
+      request.overrideMimeType('text/plain; charset=x-user-defined');
+    }
+    request.send(null);
+    if (nonBinaryRequest ? !request.responseText : !request.response) {
+      error('Unable to get binary cMap at: ' + url);
+    }
+    if (nonBinaryRequest) {
+      var data = Array.prototype.map.call(request.responseText, function (ch) {
+        return ch.charCodeAt(0) & 255;
+      });
+      return new Uint8Array(data);
+    }
+    return new Uint8Array(request.response);
+  }
+
+  function hexToInt(a, size) {
+    var n = 0;
+    for (var i = 0; i <= size; i++) {
+      n = (n << 8) | a[i];
+    }
+    return n >>> 0;
+  }
+
+  function hexToStr(a, size) {
+    // This code is hot. Special-case some common values to avoid creating an
+    // object with subarray().
+    if (size === 1) {
+      return String.fromCharCode(a[0], a[1]);
+    }
+    if (size === 3) {
+      return String.fromCharCode(a[0], a[1], a[2], a[3]);
+    }
+    return String.fromCharCode.apply(null, a.subarray(0, size + 1));
+  }
+
+  function addHex(a, b, size) {
+    var c = 0;
+    for (var i = size; i >= 0; i--) {
+      c += a[i] + b[i];
+      a[i] = c & 255;
+      c >>= 8;
+    }
+  }
+
+  function incHex(a, size) {
+    var c = 1;
+    for (var i = size; i >= 0 && c > 0; i--) {
+      c += a[i];
+      a[i] = c & 255;
+      c >>= 8;
+    }
+  }
+
+  var MAX_NUM_SIZE = 16;
+  var MAX_ENCODED_NUM_SIZE = 19; // ceil(MAX_NUM_SIZE * 7 / 8)
+
+  function BinaryCMapStream(data) {
+    this.buffer = data;
+    this.pos = 0;
+    this.end = data.length;
+    this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE);
+  }
+
+  BinaryCMapStream.prototype = {
+    readByte: function () {
+      if (this.pos >= this.end) {
+        return -1;
+      }
+      return this.buffer[this.pos++];
+    },
+    readNumber: function () {
+      var n = 0;
+      var last;
+      do {
+        var b = this.readByte();
+        if (b < 0) {
+          error('unexpected EOF in bcmap');
+        }
+        last = !(b & 0x80);
+        n = (n << 7) | (b & 0x7F);
+      } while (!last);
+      return n;
+    },
+    readSigned: function () {
+      var n = this.readNumber();
+      return (n & 1) ? ~(n >>> 1) : n >>> 1;
+    },
+    readHex: function (num, size) {
+      num.set(this.buffer.subarray(this.pos,
+        this.pos + size + 1));
+      this.pos += size + 1;
+    },
+    readHexNumber: function (num, size) {
+      var last;
+      var stack = this.tmpBuf, sp = 0;
+      do {
+        var b = this.readByte();
+        if (b < 0) {
+          error('unexpected EOF in bcmap');
+        }
+        last = !(b & 0x80);
+        stack[sp++] = b & 0x7F;
+      } while (!last);
+      var i = size, buffer = 0, bufferSize = 0;
+      while (i >= 0) {
+        while (bufferSize < 8 && stack.length > 0) {
+          buffer = (stack[--sp] << bufferSize) | buffer;
+          bufferSize += 7;
+        }
+        num[i] = buffer & 255;
+        i--;
+        buffer >>= 8;
+        bufferSize -= 8;
+      }
+    },
+    readHexSigned: function (num, size) {
+      this.readHexNumber(num, size);
+      var sign = num[size] & 1 ? 255 : 0;
+      var c = 0;
+      for (var i = 0; i <= size; i++) {
+        c = ((c & 1) << 8) | num[i];
+        num[i] = (c >> 1) ^ sign;
+      }
+    },
+    readString: function () {
+      var len = this.readNumber();
+      var s = '';
+      for (var i = 0; i < len; i++) {
+        s += String.fromCharCode(this.readNumber());
+      }
+      return s;
+    }
+  };
+
+  function processBinaryCMap(url, cMap, extend) {
+    var data = fetchBinaryData(url);
+    var stream = new BinaryCMapStream(data);
+
+    var header = stream.readByte();
+    cMap.vertical = !!(header & 1);
+
+    var useCMap = null;
+    var start = new Uint8Array(MAX_NUM_SIZE);
+    var end = new Uint8Array(MAX_NUM_SIZE);
+    var char = new Uint8Array(MAX_NUM_SIZE);
+    var charCode = new Uint8Array(MAX_NUM_SIZE);
+    var tmp = new Uint8Array(MAX_NUM_SIZE);
+    var code;
+
+    var b;
+    while ((b = stream.readByte()) >= 0) {
+      var type = b >> 5;
+      if (type === 7) { // metadata, e.g. comment or usecmap
+        switch (b & 0x1F) {
+          case 0:
+            stream.readString(); // skipping comment
+            break;
+          case 1:
+            useCMap = stream.readString();
+            break;
+        }
+        continue;
+      }
+      var sequence = !!(b & 0x10);
+      var dataSize = b & 15;
+
+      assert(dataSize + 1 <= MAX_NUM_SIZE);
+
+      var ucs2DataSize = 1;
+      var subitemsCount = stream.readNumber();
+      var i;
+      switch (type) {
+        case 0: // codespacerange
+          stream.readHex(start, dataSize);
+          stream.readHexNumber(end, dataSize);
+          addHex(end, start, dataSize);
+          cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize),
+                                 hexToInt(end, dataSize));
+          for (i = 1; i < subitemsCount; i++) {
+            incHex(end, dataSize);
+            stream.readHexNumber(start, dataSize);
+            addHex(start, end, dataSize);
+            stream.readHexNumber(end, dataSize);
+            addHex(end, start, dataSize);
+            cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize),
+                                   hexToInt(end, dataSize));
+          }
+          break;
+        case 1: // notdefrange
+          stream.readHex(start, dataSize);
+          stream.readHexNumber(end, dataSize);
+          addHex(end, start, dataSize);
+          code = stream.readNumber();
+          // undefined range, skipping
+          for (i = 1; i < subitemsCount; i++) {
+            incHex(end, dataSize);
+            stream.readHexNumber(start, dataSize);
+            addHex(start, end, dataSize);
+            stream.readHexNumber(end, dataSize);
+            addHex(end, start, dataSize);
+            code = stream.readNumber();
+            // nop
+          }
+          break;
+        case 2: // cidchar
+          stream.readHex(char, dataSize);
+          code = stream.readNumber();
+          cMap.mapOne(hexToInt(char, dataSize), code);
+          for (i = 1; i < subitemsCount; i++) {
+            incHex(char, dataSize);
+            if (!sequence) {
+              stream.readHexNumber(tmp, dataSize);
+              addHex(char, tmp, dataSize);
+            }
+            code = stream.readSigned() + (code + 1);
+            cMap.mapOne(hexToInt(char, dataSize), code);
+          }
+          break;
+        case 3: // cidrange
+          stream.readHex(start, dataSize);
+          stream.readHexNumber(end, dataSize);
+          addHex(end, start, dataSize);
+          code = stream.readNumber();
+          cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize),
+                           code);
+          for (i = 1; i < subitemsCount; i++) {
+            incHex(end, dataSize);
+            if (!sequence) {
+              stream.readHexNumber(start, dataSize);
+              addHex(start, end, dataSize);
+            } else {
+              start.set(end);
+            }
+            stream.readHexNumber(end, dataSize);
+            addHex(end, start, dataSize);
+            code = stream.readNumber();
+            cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize),
+                             code);
+          }
+          break;
+        case 4: // bfchar
+          stream.readHex(char, ucs2DataSize);
+          stream.readHex(charCode, dataSize);
+          cMap.mapOne(hexToInt(char, ucs2DataSize),
+                      hexToStr(charCode, dataSize));
+          for (i = 1; i < subitemsCount; i++) {
+            incHex(char, ucs2DataSize);
+            if (!sequence) {
+              stream.readHexNumber(tmp, ucs2DataSize);
+              addHex(char, tmp, ucs2DataSize);
+            }
+            incHex(charCode, dataSize);
+            stream.readHexSigned(tmp, dataSize);
+            addHex(charCode, tmp, dataSize);
+            cMap.mapOne(hexToInt(char, ucs2DataSize),
+                        hexToStr(charCode, dataSize));
+          }
+          break;
+        case 5: // bfrange
+          stream.readHex(start, ucs2DataSize);
+          stream.readHexNumber(end, ucs2DataSize);
+          addHex(end, start, ucs2DataSize);
+          stream.readHex(charCode, dataSize);
+          cMap.mapBfRange(hexToInt(start, ucs2DataSize),
+                          hexToInt(end, ucs2DataSize),
+                          hexToStr(charCode, dataSize));
+          for (i = 1; i < subitemsCount; i++) {
+            incHex(end, ucs2DataSize);
+            if (!sequence) {
+              stream.readHexNumber(start, ucs2DataSize);
+              addHex(start, end, ucs2DataSize);
+            } else {
+              start.set(end);
+            }
+            stream.readHexNumber(end, ucs2DataSize);
+            addHex(end, start, ucs2DataSize);
+            stream.readHex(charCode, dataSize);
+            cMap.mapBfRange(hexToInt(start, ucs2DataSize),
+                            hexToInt(end, ucs2DataSize),
+                            hexToStr(charCode, dataSize));
+          }
+          break;
+        default:
+          error('Unknown type: ' + type);
+          break;
+      }
+    }
+
+    if (useCMap) {
+      extend(useCMap);
+    }
+    return cMap;
+  }
+
+  function BinaryCMapReader() {}
+
+  BinaryCMapReader.prototype = {
+    read: processBinaryCMap
+  };
+
+  return BinaryCMapReader;
+})();
+
+var CMapFactory = (function CMapFactoryClosure() {
+  function strToInt(str) {
+    var a = 0;
+    for (var i = 0; i < str.length; i++) {
+      a = (a << 8) | str.charCodeAt(i);
+    }
+    return a >>> 0;
+  }
+
+  function expectString(obj) {
+    if (!isString(obj)) {
+      error('Malformed CMap: expected string.');
+    }
+  }
+
+  function expectInt(obj) {
+    if (!isInt(obj)) {
+      error('Malformed CMap: expected int.');
+    }
+  }
+
+  function parseBfChar(cMap, lexer) {
+    while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      }
+      if (isCmd(obj, 'endbfchar')) {
+        return;
+      }
+      expectString(obj);
+      var src = strToInt(obj);
+      obj = lexer.getObj();
+      // TODO are /dstName used?
+      expectString(obj);
+      var dst = obj;
+      cMap.mapOne(src, dst);
+    }
+  }
+
+  function parseBfRange(cMap, lexer) {
+    while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      }
+      if (isCmd(obj, 'endbfrange')) {
+        return;
+      }
+      expectString(obj);
+      var low = strToInt(obj);
+      obj = lexer.getObj();
+      expectString(obj);
+      var high = strToInt(obj);
+      obj = lexer.getObj();
+      if (isInt(obj) || isString(obj)) {
+        var dstLow = isInt(obj) ? String.fromCharCode(obj) : obj;
+        cMap.mapBfRange(low, high, dstLow);
+      } else if (isCmd(obj, '[')) {
+        obj = lexer.getObj();
+        var array = [];
+        while (!isCmd(obj, ']') && !isEOF(obj)) {
+          array.push(obj);
+          obj = lexer.getObj();
+        }
+        cMap.mapBfRangeToArray(low, high, array);
+      } else {
+        break;
+      }
+    }
+    error('Invalid bf range.');
+  }
+
+  function parseCidChar(cMap, lexer) {
+    while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      }
+      if (isCmd(obj, 'endcidchar')) {
+        return;
+      }
+      expectString(obj);
+      var src = strToInt(obj);
+      obj = lexer.getObj();
+      expectInt(obj);
+      var dst = obj;
+      cMap.mapOne(src, dst);
+    }
+  }
+
+  function parseCidRange(cMap, lexer) {
+    while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      }
+      if (isCmd(obj, 'endcidrange')) {
+        return;
+      }
+      expectString(obj);
+      var low = strToInt(obj);
+      obj = lexer.getObj();
+      expectString(obj);
+      var high = strToInt(obj);
+      obj = lexer.getObj();
+      expectInt(obj);
+      var dstLow = obj;
+      cMap.mapCidRange(low, high, dstLow);
+    }
+  }
+
+  function parseCodespaceRange(cMap, lexer) {
+    while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      }
+      if (isCmd(obj, 'endcodespacerange')) {
+        return;
+      }
+      if (!isString(obj)) {
+        break;
+      }
+      var low = strToInt(obj);
+      obj = lexer.getObj();
+      if (!isString(obj)) {
+        break;
+      }
+      var high = strToInt(obj);
+      cMap.addCodespaceRange(obj.length, low, high);
+    }
+    error('Invalid codespace range.');
+  }
+
+  function parseWMode(cMap, lexer) {
+    var obj = lexer.getObj();
+    if (isInt(obj)) {
+      cMap.vertical = !!obj;
+    }
+  }
+
+  function parseCMapName(cMap, lexer) {
+    var obj = lexer.getObj();
+    if (isName(obj) && isString(obj.name)) {
+      cMap.name = obj.name;
+    }
+  }
+
+  function parseCMap(cMap, lexer, builtInCMapParams, useCMap) {
+    var previous;
+    var embededUseCMap;
+    objLoop: while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      } else if (isName(obj)) {
+        if (obj.name === 'WMode') {
+          parseWMode(cMap, lexer);
+        } else if (obj.name === 'CMapName') {
+          parseCMapName(cMap, lexer);
+        }
+        previous = obj;
+      } else if (isCmd(obj)) {
+        switch (obj.cmd) {
+          case 'endcmap':
+            break objLoop;
+          case 'usecmap':
+            if (isName(previous)) {
+              embededUseCMap = previous.name;
+            }
+            break;
+          case 'begincodespacerange':
+            parseCodespaceRange(cMap, lexer);
+            break;
+          case 'beginbfchar':
+            parseBfChar(cMap, lexer);
+            break;
+          case 'begincidchar':
+            parseCidChar(cMap, lexer);
+            break;
+          case 'beginbfrange':
+            parseBfRange(cMap, lexer);
+            break;
+          case 'begincidrange':
+            parseCidRange(cMap, lexer);
+            break;
+        }
+      }
+    }
+
+    if (!useCMap && embededUseCMap) {
+      // Load the usecmap definition from the file only if there wasn't one
+      // specified.
+      useCMap = embededUseCMap;
+    }
+    if (useCMap) {
+      extendCMap(cMap, builtInCMapParams, useCMap);
+    }
+  }
+
+  function extendCMap(cMap, builtInCMapParams, useCMap) {
+    cMap.useCMap = createBuiltInCMap(useCMap, builtInCMapParams);
+    // If there aren't any code space ranges defined clone all the parent ones
+    // into this cMap.
+    if (cMap.numCodespaceRanges === 0) {
+      var useCodespaceRanges = cMap.useCMap.codespaceRanges;
+      for (var i = 0; i < useCodespaceRanges.length; i++) {
+        cMap.codespaceRanges[i] = useCodespaceRanges[i].slice();
+      }
+      cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges;
+    }
+    // Merge the map into the current one, making sure not to override
+    // any previously defined entries.
+    cMap.useCMap.forEach(function(key, value) {
+      if (!cMap.contains(key)) {
+        cMap.mapOne(key, cMap.useCMap.lookup(key));
+      }
+    });
+  }
+
+  function parseBinaryCMap(name, builtInCMapParams) {
+    var url = builtInCMapParams.url + name + '.bcmap';
+    var cMap = new CMap(true);
+    new BinaryCMapReader().read(url, cMap, function (useCMap) {
+      extendCMap(cMap, builtInCMapParams, useCMap);
+    });
+    return cMap;
+  }
+
+  function createBuiltInCMap(name, builtInCMapParams) {
+    if (name === 'Identity-H') {
+      return new IdentityCMap(false, 2);
+    } else if (name === 'Identity-V') {
+      return new IdentityCMap(true, 2);
+    }
+    if (BUILT_IN_CMAPS.indexOf(name) === -1) {
+      error('Unknown cMap name: ' + name);
+    }
+    assert(builtInCMapParams, 'built-in cMap parameters are not provided');
+
+    if (builtInCMapParams.packed) {
+      return parseBinaryCMap(name, builtInCMapParams);
+    }
+
+    var request = new XMLHttpRequest();
+    var url = builtInCMapParams.url + name;
+    request.open('GET', url, false);
+    request.send(null);
+    if (!request.responseText) {
+      error('Unable to get cMap at: ' + url);
+    }
+    var cMap = new CMap(true);
+    var lexer = new Lexer(new StringStream(request.responseText));
+    parseCMap(cMap, lexer, builtInCMapParams, null);
+    return cMap;
+  }
+
+  return {
+    create: function (encoding, builtInCMapParams, useCMap) {
+      if (isName(encoding)) {
+        return createBuiltInCMap(encoding.name, builtInCMapParams);
+      } else if (isStream(encoding)) {
+        var cMap = new CMap();
+        var lexer = new Lexer(encoding);
+        try {
+          parseCMap(cMap, lexer, builtInCMapParams, useCMap);
+        } catch (e) {
+          warn('Invalid CMap data. ' + e);
+        }
+        if (cMap.isIdentityCMap) {
+          return createBuiltInCMap(cMap.name, builtInCMapParams);
+        }
+        return cMap;
+      }
+      error('Encoding required.');
+    }
+  };
+})();
+
+
+// Unicode Private Use Area
+var PRIVATE_USE_OFFSET_START = 0xE000;
+var PRIVATE_USE_OFFSET_END = 0xF8FF;
+var SKIP_PRIVATE_USE_RANGE_F000_TO_F01F = false;
+
+// PDF Glyph Space Units are one Thousandth of a TextSpace Unit
+// except for Type 3 fonts
+var PDF_GLYPH_SPACE_UNITS = 1000;
+
+// Hinting is currently disabled due to unknown problems on windows
+// in tracemonkey and various other pdfs with type1 fonts.
+var HINTING_ENABLED = false;
+
+// Accented charactars are not displayed properly on windows, using this flag
+// to control analysis of seac charstrings.
+var SEAC_ANALYSIS_ENABLED = false;
+
+var FontFlags = {
+  FixedPitch: 1,
+  Serif: 2,
+  Symbolic: 4,
+  Script: 8,
+  Nonsymbolic: 32,
+  Italic: 64,
+  AllCap: 65536,
+  SmallCap: 131072,
+  ForceBold: 262144
+};
+
+var Encodings = {
+  ExpertEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle',
+    'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior',
+    'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma',
+    'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle',
+    'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle',
+    'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon',
+    'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior',
+    'questionsmall', '', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior',
+    'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior',
+    'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior',
+    '', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '',
+    'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall',
+    'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall',
+    'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall',
+    'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall',
+    'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary',
+    'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall',
+    '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall',
+    'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '',
+    'figuredash', 'hypheninferior', '', '', 'Ogoneksmall', 'Ringsmall',
+    'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters',
+    'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths',
+    'seveneighths', 'onethird', 'twothirds', '', '', 'zerosuperior',
+    'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior',
+    'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior',
+    'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior',
+    'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior',
+    'seveninferior', 'eightinferior', 'nineinferior', 'centinferior',
+    'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall',
+    'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall',
+    'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall',
+    'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',
+    'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall',
+    'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall',
+    'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',
+    'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall',
+    'Ydieresissmall'],
+  MacExpertEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclamsmall', 'Hungarumlautsmall', 'centoldstyle',
+    'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall',
+    'parenleftsuperior', 'parenrightsuperior', 'twodotenleader',
+    'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle',
+    'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle',
+    'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle',
+    'nineoldstyle', 'colon', 'semicolon', '', 'threequartersemdash', '',
+    'questionsmall', '', '', '', '', 'Ethsmall', '', '', 'onequarter',
+    'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths',
+    'seveneighths', 'onethird', 'twothirds', '', '', '', '', '', '', 'ff',
+    'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '', 'parenrightinferior',
+    'Circumflexsmall', 'hypheninferior', 'Gravesmall', 'Asmall', 'Bsmall',
+    'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall',
+    'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall',
+    'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall',
+    'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah',
+    'Tildesmall', '', '', 'asuperior', 'centsuperior', '', '', '', '',
+    'Aacutesmall', 'Agravesmall', 'Acircumflexsmall', 'Adieresissmall',
+    'Atildesmall', 'Aringsmall', 'Ccedillasmall', 'Eacutesmall', 'Egravesmall',
+    'Ecircumflexsmall', 'Edieresissmall', 'Iacutesmall', 'Igravesmall',
+    'Icircumflexsmall', 'Idieresissmall', 'Ntildesmall', 'Oacutesmall',
+    'Ogravesmall', 'Ocircumflexsmall', 'Odieresissmall', 'Otildesmall',
+    'Uacutesmall', 'Ugravesmall', 'Ucircumflexsmall', 'Udieresissmall', '',
+    'eightsuperior', 'fourinferior', 'threeinferior', 'sixinferior',
+    'eightinferior', 'seveninferior', 'Scaronsmall', '', 'centinferior',
+    'twoinferior', '', 'Dieresissmall', '', 'Caronsmall', 'osuperior',
+    'fiveinferior', '', 'commainferior', 'periodinferior', 'Yacutesmall', '',
+    'dollarinferior', '', 'Thornsmall', '', 'nineinferior', 'zeroinferior',
+    'Zcaronsmall', 'AEsmall', 'Oslashsmall', 'questiondownsmall',
+    'oneinferior', 'Lslashsmall', '', '', '', '', '', '', 'Cedillasmall', '',
+    '', '', '', '', 'OEsmall', 'figuredash', 'hyphensuperior', '', '', '', '',
+    'exclamdownsmall', '', 'Ydieresissmall', '', 'onesuperior', 'twosuperior',
+    'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior',
+    'sevensuperior', 'ninesuperior', 'zerosuperior', '', 'esuperior',
+    'rsuperior', 'tsuperior', '', '', 'isuperior', 'ssuperior', 'dsuperior',
+    '', '', '', '', '', 'lsuperior', 'Ogoneksmall', 'Brevesmall',
+    'Macronsmall', 'bsuperior', 'nsuperior', 'msuperior', 'commasuperior',
+    'periodsuperior', 'Dotaccentsmall', 'Ringsmall'],
+  MacRomanEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',
+    'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus',
+    'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three',
+    'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon',
+    'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F',
+    'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
+    'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright',
+    'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
+    'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+    'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '',
+    'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis',
+    'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis', 'atilde',
+    'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis',
+    'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute',
+    'ograve', 'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave',
+    'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling',
+    'section', 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright',
+    'trademark', 'acute', 'dieresis', 'notequal', 'AE', 'Oslash', 'infinity',
+    'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff',
+    'summation', 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine',
+    'Omega', 'ae', 'oslash', 'questiondown', 'exclamdown', 'logicalnot',
+    'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft',
+    'guillemotright', 'ellipsis', 'space', 'Agrave', 'Atilde', 'Otilde', 'OE',
+    'oe', 'endash', 'emdash', 'quotedblleft', 'quotedblright', 'quoteleft',
+    'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction',
+    'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl',
+    'periodcentered', 'quotesinglbase', 'quotedblbase', 'perthousand',
+    'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute',
+    'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple',
+    'Ograve', 'Uacute', 'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex',
+    'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut',
+    'ogonek', 'caron'],
+  StandardEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',
+    'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus',
+    'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three',
+    'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon',
+    'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F',
+    'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
+    'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright',
+    'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f',
+    'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
+    'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdown',
+    'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency',
+    'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft',
+    'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger', 'daggerdbl',
+    'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase',
+    'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis',
+    'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex',
+    'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla',
+    '', 'hungarumlaut', 'ogonek', 'caron', 'emdash', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '',
+    '', '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae',
+    '', '', '', 'dotlessi', '', '', 'lslash', 'oslash', 'oe', 'germandbls'],
+  WinAnsiEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',
+    'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus',
+    'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three',
+    'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon',
+    'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F',
+    'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
+    'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright',
+    'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
+    'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+    'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde',
+    'bullet', 'Euro', 'bullet', 'quotesinglbase', 'florin', 'quotedblbase',
+    'ellipsis', 'dagger', 'daggerdbl', 'circumflex', 'perthousand', 'Scaron',
+    'guilsinglleft', 'OE', 'bullet', 'Zcaron', 'bullet', 'bullet', 'quoteleft',
+    'quoteright', 'quotedblleft', 'quotedblright', 'bullet', 'endash',
+    'emdash', 'tilde', 'trademark', 'scaron', 'guilsinglright', 'oe', 'bullet',
+    'zcaron', 'Ydieresis', 'space', 'exclamdown', 'cent', 'sterling',
+    'currency', 'yen', 'brokenbar', 'section', 'dieresis', 'copyright',
+    'ordfeminine', 'guillemotleft', 'logicalnot', 'hyphen', 'registered',
+    'macron', 'degree', 'plusminus', 'twosuperior', 'threesuperior', 'acute',
+    'mu', 'paragraph', 'periodcentered', 'cedilla', 'onesuperior',
+    'ordmasculine', 'guillemotright', 'onequarter', 'onehalf', 'threequarters',
+    'questiondown', 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', 'Adieresis',
+    'Aring', 'AE', 'Ccedilla', 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis',
+    'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Eth', 'Ntilde', 'Ograve',
+    'Oacute', 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', 'Oslash',
+    'Ugrave', 'Uacute', 'Ucircumflex', 'Udieresis', 'Yacute', 'Thorn',
+    'germandbls', 'agrave', 'aacute', 'acircumflex', 'atilde', 'adieresis',
+    'aring', 'ae', 'ccedilla', 'egrave', 'eacute', 'ecircumflex', 'edieresis',
+    'igrave', 'iacute', 'icircumflex', 'idieresis', 'eth', 'ntilde', 'ograve',
+    'oacute', 'ocircumflex', 'otilde', 'odieresis', 'divide', 'oslash',
+    'ugrave', 'uacute', 'ucircumflex', 'udieresis', 'yacute', 'thorn',
+    'ydieresis'],
+  SymbolSetEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclam', 'universal', 'numbersign', 'existential', 'percent',
+    'ampersand', 'suchthat', 'parenleft', 'parenright', 'asteriskmath', 'plus',
+    'comma', 'minus', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four',
+    'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less',
+    'equal', 'greater', 'question', 'congruent', 'Alpha', 'Beta', 'Chi',
+    'Delta', 'Epsilon', 'Phi', 'Gamma', 'Eta', 'Iota', 'theta1', 'Kappa',
+    'Lambda', 'Mu', 'Nu', 'Omicron', 'Pi', 'Theta', 'Rho', 'Sigma', 'Tau',
+    'Upsilon', 'sigma1', 'Omega', 'Xi', 'Psi', 'Zeta', 'bracketleft',
+    'therefore', 'bracketright', 'perpendicular', 'underscore', 'radicalex',
+    'alpha', 'beta', 'chi', 'delta', 'epsilon', 'phi', 'gamma', 'eta', 'iota',
+    'phi1', 'kappa', 'lambda', 'mu', 'nu', 'omicron', 'pi', 'theta', 'rho',
+    'sigma', 'tau', 'upsilon', 'omega1', 'omega', 'xi', 'psi', 'zeta',
+    'braceleft', 'bar', 'braceright', 'similar', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', 'Euro', 'Upsilon1', 'minute', 'lessequal',
+    'fraction', 'infinity', 'florin', 'club', 'diamond', 'heart', 'spade',
+    'arrowboth', 'arrowleft', 'arrowup', 'arrowright', 'arrowdown', 'degree',
+    'plusminus', 'second', 'greaterequal', 'multiply', 'proportional',
+    'partialdiff', 'bullet', 'divide', 'notequal', 'equivalence',
+    'approxequal', 'ellipsis', 'arrowvertex', 'arrowhorizex', 'carriagereturn',
+    'aleph', 'Ifraktur', 'Rfraktur', 'weierstrass', 'circlemultiply',
+    'circleplus', 'emptyset', 'intersection', 'union', 'propersuperset',
+    'reflexsuperset', 'notsubset', 'propersubset', 'reflexsubset', 'element',
+    'notelement', 'angle', 'gradient', 'registerserif', 'copyrightserif',
+    'trademarkserif', 'product', 'radical', 'dotmath', 'logicalnot',
+    'logicaland', 'logicalor', 'arrowdblboth', 'arrowdblleft', 'arrowdblup',
+    'arrowdblright', 'arrowdbldown', 'lozenge', 'angleleft', 'registersans',
+    'copyrightsans', 'trademarksans', 'summation', 'parenlefttp',
+    'parenleftex', 'parenleftbt', 'bracketlefttp', 'bracketleftex',
+    'bracketleftbt', 'bracelefttp', 'braceleftmid', 'braceleftbt', 'braceex',
+    '', 'angleright', 'integral', 'integraltp', 'integralex', 'integralbt',
+    'parenrighttp', 'parenrightex', 'parenrightbt', 'bracketrighttp',
+    'bracketrightex', 'bracketrightbt', 'bracerighttp', 'bracerightmid',
+    'bracerightbt'],
+  ZapfDingbatsEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'a1', 'a2', 'a202', 'a3', 'a4', 'a5', 'a119', 'a118', 'a117',
+    'a11', 'a12', 'a13', 'a14', 'a15', 'a16', 'a105', 'a17', 'a18', 'a19',
+    'a20', 'a21', 'a22', 'a23', 'a24', 'a25', 'a26', 'a27', 'a28', 'a6', 'a7',
+    'a8', 'a9', 'a10', 'a29', 'a30', 'a31', 'a32', 'a33', 'a34', 'a35', 'a36',
+    'a37', 'a38', 'a39', 'a40', 'a41', 'a42', 'a43', 'a44', 'a45', 'a46',
+    'a47', 'a48', 'a49', 'a50', 'a51', 'a52', 'a53', 'a54', 'a55', 'a56',
+    'a57', 'a58', 'a59', 'a60', 'a61', 'a62', 'a63', 'a64', 'a65', 'a66',
+    'a67', 'a68', 'a69', 'a70', 'a71', 'a72', 'a73', 'a74', 'a203', 'a75',
+    'a204', 'a76', 'a77', 'a78', 'a79', 'a81', 'a82', 'a83', 'a84', 'a97',
+    'a98', 'a99', 'a100', '', 'a89', 'a90', 'a93', 'a94', 'a91', 'a92', 'a205',
+    'a85', 'a206', 'a86', 'a87', 'a88', 'a95', 'a96', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', 'a101', 'a102', 'a103',
+    'a104', 'a106', 'a107', 'a108', 'a112', 'a111', 'a110', 'a109', 'a120',
+    'a121', 'a122', 'a123', 'a124', 'a125', 'a126', 'a127', 'a128', 'a129',
+    'a130', 'a131', 'a132', 'a133', 'a134', 'a135', 'a136', 'a137', 'a138',
+    'a139', 'a140', 'a141', 'a142', 'a143', 'a144', 'a145', 'a146', 'a147',
+    'a148', 'a149', 'a150', 'a151', 'a152', 'a153', 'a154', 'a155', 'a156',
+    'a157', 'a158', 'a159', 'a160', 'a161', 'a163', 'a164', 'a196', 'a165',
+    'a192', 'a166', 'a167', 'a168', 'a169', 'a170', 'a171', 'a172', 'a173',
+    'a162', 'a174', 'a175', 'a176', 'a177', 'a178', 'a179', 'a193', 'a180',
+    'a199', 'a181', 'a200', 'a182', '', 'a201', 'a183', 'a184', 'a197', 'a185',
+    'a194', 'a198', 'a186', 'a195', 'a187', 'a188', 'a189', 'a190', 'a191']
+};
+
+/**
+ * Hold a map of decoded fonts and of the standard fourteen Type1
+ * fonts and their acronyms.
+ */
+var stdFontMap = {
+  'ArialNarrow': 'Helvetica',
+  'ArialNarrow-Bold': 'Helvetica-Bold',
+  'ArialNarrow-BoldItalic': 'Helvetica-BoldOblique',
+  'ArialNarrow-Italic': 'Helvetica-Oblique',
+  'ArialBlack': 'Helvetica',
+  'ArialBlack-Bold': 'Helvetica-Bold',
+  'ArialBlack-BoldItalic': 'Helvetica-BoldOblique',
+  'ArialBlack-Italic': 'Helvetica-Oblique',
+  'Arial': 'Helvetica',
+  'Arial-Bold': 'Helvetica-Bold',
+  'Arial-BoldItalic': 'Helvetica-BoldOblique',
+  'Arial-Italic': 'Helvetica-Oblique',
+  'Arial-BoldItalicMT': 'Helvetica-BoldOblique',
+  'Arial-BoldMT': 'Helvetica-Bold',
+  'Arial-ItalicMT': 'Helvetica-Oblique',
+  'ArialMT': 'Helvetica',
+  'Courier-Bold': 'Courier-Bold',
+  'Courier-BoldItalic': 'Courier-BoldOblique',
+  'Courier-Italic': 'Courier-Oblique',
+  'CourierNew': 'Courier',
+  'CourierNew-Bold': 'Courier-Bold',
+  'CourierNew-BoldItalic': 'Courier-BoldOblique',
+  'CourierNew-Italic': 'Courier-Oblique',
+  'CourierNewPS-BoldItalicMT': 'Courier-BoldOblique',
+  'CourierNewPS-BoldMT': 'Courier-Bold',
+  'CourierNewPS-ItalicMT': 'Courier-Oblique',
+  'CourierNewPSMT': 'Courier',
+  'Helvetica': 'Helvetica',
+  'Helvetica-Bold': 'Helvetica-Bold',
+  'Helvetica-BoldItalic': 'Helvetica-BoldOblique',
+  'Helvetica-BoldOblique': 'Helvetica-BoldOblique',
+  'Helvetica-Italic': 'Helvetica-Oblique',
+  'Helvetica-Oblique':'Helvetica-Oblique',
+  'Symbol-Bold': 'Symbol',
+  'Symbol-BoldItalic': 'Symbol',
+  'Symbol-Italic': 'Symbol',
+  'TimesNewRoman': 'Times-Roman',
+  'TimesNewRoman-Bold': 'Times-Bold',
+  'TimesNewRoman-BoldItalic': 'Times-BoldItalic',
+  'TimesNewRoman-Italic': 'Times-Italic',
+  'TimesNewRomanPS': 'Times-Roman',
+  'TimesNewRomanPS-Bold': 'Times-Bold',
+  'TimesNewRomanPS-BoldItalic': 'Times-BoldItalic',
+  'TimesNewRomanPS-BoldItalicMT': 'Times-BoldItalic',
+  'TimesNewRomanPS-BoldMT': 'Times-Bold',
+  'TimesNewRomanPS-Italic': 'Times-Italic',
+  'TimesNewRomanPS-ItalicMT': 'Times-Italic',
+  'TimesNewRomanPSMT': 'Times-Roman',
+  'TimesNewRomanPSMT-Bold': 'Times-Bold',
+  'TimesNewRomanPSMT-BoldItalic': 'Times-BoldItalic',
+  'TimesNewRomanPSMT-Italic': 'Times-Italic'
+};
+
+/**
+ * Holds the map of the non-standard fonts that might be included as a standard
+ * fonts without glyph data.
+ */
+var nonStdFontMap = {
+  'CenturyGothic': 'Helvetica',
+  'CenturyGothic-Bold': 'Helvetica-Bold',
+  'CenturyGothic-BoldItalic': 'Helvetica-BoldOblique',
+  'CenturyGothic-Italic': 'Helvetica-Oblique',
+  'ComicSansMS': 'Comic Sans MS',
+  'ComicSansMS-Bold': 'Comic Sans MS-Bold',
+  'ComicSansMS-BoldItalic': 'Comic Sans MS-BoldItalic',
+  'ComicSansMS-Italic': 'Comic Sans MS-Italic',
+  'LucidaConsole': 'Courier',
+  'LucidaConsole-Bold': 'Courier-Bold',
+  'LucidaConsole-BoldItalic': 'Courier-BoldOblique',
+  'LucidaConsole-Italic': 'Courier-Oblique',
+  'MS-Gothic': 'MS Gothic',
+  'MS-Gothic-Bold': 'MS Gothic-Bold',
+  'MS-Gothic-BoldItalic': 'MS Gothic-BoldItalic',
+  'MS-Gothic-Italic': 'MS Gothic-Italic',
+  'MS-Mincho': 'MS Mincho',
+  'MS-Mincho-Bold': 'MS Mincho-Bold',
+  'MS-Mincho-BoldItalic': 'MS Mincho-BoldItalic',
+  'MS-Mincho-Italic': 'MS Mincho-Italic',
+  'MS-PGothic': 'MS PGothic',
+  'MS-PGothic-Bold': 'MS PGothic-Bold',
+  'MS-PGothic-BoldItalic': 'MS PGothic-BoldItalic',
+  'MS-PGothic-Italic': 'MS PGothic-Italic',
+  'MS-PMincho': 'MS PMincho',
+  'MS-PMincho-Bold': 'MS PMincho-Bold',
+  'MS-PMincho-BoldItalic': 'MS PMincho-BoldItalic',
+  'MS-PMincho-Italic': 'MS PMincho-Italic',
+  'Wingdings': 'ZapfDingbats'
+};
+
+var serifFonts = {
+  'Adobe Jenson': true, 'Adobe Text': true, 'Albertus': true,
+  'Aldus': true, 'Alexandria': true, 'Algerian': true,
+  'American Typewriter': true, 'Antiqua': true, 'Apex': true,
+  'Arno': true, 'Aster': true, 'Aurora': true,
+  'Baskerville': true, 'Bell': true, 'Bembo': true,
+  'Bembo Schoolbook': true, 'Benguiat': true, 'Berkeley Old Style': true,
+  'Bernhard Modern': true, 'Berthold City': true, 'Bodoni': true,
+  'Bauer Bodoni': true, 'Book Antiqua': true, 'Bookman': true,
+  'Bordeaux Roman': true, 'Californian FB': true, 'Calisto': true,
+  'Calvert': true, 'Capitals': true, 'Cambria': true,
+  'Cartier': true, 'Caslon': true, 'Catull': true,
+  'Centaur': true, 'Century Old Style': true, 'Century Schoolbook': true,
+  'Chaparral': true, 'Charis SIL': true, 'Cheltenham': true,
+  'Cholla Slab': true, 'Clarendon': true, 'Clearface': true,
+  'Cochin': true, 'Colonna': true, 'Computer Modern': true,
+  'Concrete Roman': true, 'Constantia': true, 'Cooper Black': true,
+  'Corona': true, 'Ecotype': true, 'Egyptienne': true,
+  'Elephant': true, 'Excelsior': true, 'Fairfield': true,
+  'FF Scala': true, 'Folkard': true, 'Footlight': true,
+  'FreeSerif': true, 'Friz Quadrata': true, 'Garamond': true,
+  'Gentium': true, 'Georgia': true, 'Gloucester': true,
+  'Goudy Old Style': true, 'Goudy Schoolbook': true, 'Goudy Pro Font': true,
+  'Granjon': true, 'Guardian Egyptian': true, 'Heather': true,
+  'Hercules': true, 'High Tower Text': true, 'Hiroshige': true,
+  'Hoefler Text': true, 'Humana Serif': true, 'Imprint': true,
+  'Ionic No. 5': true, 'Janson': true, 'Joanna': true,
+  'Korinna': true, 'Lexicon': true, 'Liberation Serif': true,
+  'Linux Libertine': true, 'Literaturnaya': true, 'Lucida': true,
+  'Lucida Bright': true, 'Melior': true, 'Memphis': true,
+  'Miller': true, 'Minion': true, 'Modern': true,
+  'Mona Lisa': true, 'Mrs Eaves': true, 'MS Serif': true,
+  'Museo Slab': true, 'New York': true, 'Nimbus Roman': true,
+  'NPS Rawlinson Roadway': true, 'Palatino': true, 'Perpetua': true,
+  'Plantin': true, 'Plantin Schoolbook': true, 'Playbill': true,
+  'Poor Richard': true, 'Rawlinson Roadway': true, 'Renault': true,
+  'Requiem': true, 'Rockwell': true, 'Roman': true,
+  'Rotis Serif': true, 'Sabon': true, 'Scala': true,
+  'Seagull': true, 'Sistina': true, 'Souvenir': true,
+  'STIX': true, 'Stone Informal': true, 'Stone Serif': true,
+  'Sylfaen': true, 'Times': true, 'Trajan': true,
+  'Trinité': true, 'Trump Mediaeval': true, 'Utopia': true,
+  'Vale Type': true, 'Bitstream Vera': true, 'Vera Serif': true,
+  'Versailles': true, 'Wanted': true, 'Weiss': true,
+  'Wide Latin': true, 'Windsor': true, 'XITS': true
+};
+
+var symbolsFonts = {
+  'Dingbats': true, 'Symbol': true, 'ZapfDingbats': true
+};
+
+// Glyph map for well-known standard fonts. Sometimes Ghostscript uses CID fonts
+// but does not embed the CID to GID mapping. The mapping is incomplete for all
+// glyphs, but common for some set of the standard fonts.
+var GlyphMapForStandardFonts = {
+  '2': 10, '3': 32, '4': 33, '5': 34, '6': 35, '7': 36, '8': 37, '9': 38,
+  '10': 39, '11': 40, '12': 41, '13': 42, '14': 43, '15': 44, '16': 45,
+  '17': 46, '18': 47, '19': 48, '20': 49, '21': 50, '22': 51, '23': 52,
+  '24': 53, '25': 54, '26': 55, '27': 56, '28': 57, '29': 58, '30': 894,
+  '31': 60, '32': 61, '33': 62, '34': 63, '35': 64, '36': 65, '37': 66,
+  '38': 67, '39': 68, '40': 69, '41': 70, '42': 71, '43': 72, '44': 73,
+  '45': 74, '46': 75, '47': 76, '48': 77, '49': 78, '50': 79, '51': 80,
+  '52': 81, '53': 82, '54': 83, '55': 84, '56': 85, '57': 86, '58': 87,
+  '59': 88, '60': 89, '61': 90, '62': 91, '63': 92, '64': 93, '65': 94,
+  '66': 95, '67': 96, '68': 97, '69': 98, '70': 99, '71': 100, '72': 101,
+  '73': 102, '74': 103, '75': 104, '76': 105, '77': 106, '78': 107, '79': 108,
+  '80': 109, '81': 110, '82': 111, '83': 112, '84': 113, '85': 114, '86': 115,
+  '87': 116, '88': 117, '89': 118, '90': 119, '91': 120, '92': 121, '93': 122,
+  '94': 123, '95': 124, '96': 125, '97': 126, '98': 196, '99': 197, '100': 199,
+  '101': 201, '102': 209, '103': 214, '104': 220, '105': 225, '106': 224,
+  '107': 226, '108': 228, '109': 227, '110': 229, '111': 231, '112': 233,
+  '113': 232, '114': 234, '115': 235, '116': 237, '117': 236, '118': 238,
+  '119': 239, '120': 241, '121': 243, '122': 242, '123': 244, '124': 246,
+  '125': 245, '126': 250, '127': 249, '128': 251, '129': 252, '130': 8224,
+  '131': 176, '132': 162, '133': 163, '134': 167, '135': 8226, '136': 182,
+  '137': 223, '138': 174, '139': 169, '140': 8482, '141': 180, '142': 168,
+  '143': 8800, '144': 198, '145': 216, '146': 8734, '147': 177, '148': 8804,
+  '149': 8805, '150': 165, '151': 181, '152': 8706, '153': 8721, '154': 8719,
+  '156': 8747, '157': 170, '158': 186, '159': 8486, '160': 230, '161': 248,
+  '162': 191, '163': 161, '164': 172, '165': 8730, '166': 402, '167': 8776,
+  '168': 8710, '169': 171, '170': 187, '171': 8230, '210': 218, '223': 711,
+  '224': 321, '225': 322, '227': 353, '229': 382, '234': 253, '252': 263,
+  '253': 268, '254': 269, '258': 258, '260': 260, '261': 261, '265': 280,
+  '266': 281, '268': 283, '269': 313, '275': 323, '276': 324, '278': 328,
+  '284': 345, '285': 346, '286': 347, '292': 367, '295': 377, '296': 378,
+  '298': 380, '305': 963,
+  '306': 964, '307': 966, '308': 8215, '309': 8252, '310': 8319, '311': 8359,
+  '312': 8592, '313': 8593, '337': 9552, '493': 1039, '494': 1040, '705': 1524,
+  '706': 8362, '710': 64288, '711': 64298, '759': 1617, '761': 1776,
+  '763': 1778, '775': 1652, '777': 1764, '778': 1780, '779': 1781, '780': 1782,
+  '782': 771, '783': 64726, '786': 8363, '788': 8532, '790': 768, '791': 769,
+  '792': 768, '795': 803, '797': 64336, '798': 64337, '799': 64342,
+  '800': 64343, '801': 64344, '802': 64345, '803': 64362, '804': 64363,
+  '805': 64364, '2424': 7821, '2425': 7822, '2426': 7823, '2427': 7824,
+  '2428': 7825, '2429': 7826, '2430': 7827, '2433': 7682, '2678': 8045,
+  '2679': 8046, '2830': 1552, '2838': 686, '2840': 751, '2842': 753,
+  '2843': 754, '2844': 755, '2846': 757, '2856': 767, '2857': 848, '2858': 849,
+  '2862': 853, '2863': 854, '2864': 855, '2865': 861, '2866': 862, '2906': 7460,
+  '2908': 7462, '2909': 7463, '2910': 7464, '2912': 7466, '2913': 7467,
+  '2914': 7468, '2916': 7470, '2917': 7471, '2918': 7472, '2920': 7474,
+  '2921': 7475, '2922': 7476, '2924': 7478, '2925': 7479, '2926': 7480,
+  '2928': 7482, '2929': 7483, '2930': 7484, '2932': 7486, '2933': 7487,
+  '2934': 7488, '2936': 7490, '2937': 7491, '2938': 7492, '2940': 7494,
+  '2941': 7495, '2942': 7496, '2944': 7498, '2946': 7500, '2948': 7502,
+  '2950': 7504, '2951': 7505, '2952': 7506, '2954': 7508, '2955': 7509,
+  '2956': 7510, '2958': 7512, '2959': 7513, '2960': 7514, '2962': 7516,
+  '2963': 7517, '2964': 7518, '2966': 7520, '2967': 7521, '2968': 7522,
+  '2970': 7524, '2971': 7525, '2972': 7526, '2974': 7528, '2975': 7529,
+  '2976': 7530, '2978': 1537, '2979': 1538, '2980': 1539, '2982': 1549,
+  '2983': 1551, '2984': 1552, '2986': 1554, '2987': 1555, '2988': 1556,
+  '2990': 1623, '2991': 1624, '2995': 1775, '2999': 1791, '3002': 64290,
+  '3003': 64291, '3004': 64292, '3006': 64294, '3007': 64295, '3008': 64296,
+  '3011': 1900, '3014': 8223, '3015': 8244, '3017': 7532, '3018': 7533,
+  '3019': 7534, '3075': 7590, '3076': 7591, '3079': 7594, '3080': 7595,
+  '3083': 7598, '3084': 7599, '3087': 7602, '3088': 7603, '3091': 7606,
+  '3092': 7607, '3095': 7610, '3096': 7611, '3099': 7614, '3100': 7615,
+  '3103': 7618, '3104': 7619, '3107': 8337, '3108': 8338, '3116': 1884,
+  '3119': 1885, '3120': 1885, '3123': 1886, '3124': 1886, '3127': 1887,
+  '3128': 1887, '3131': 1888, '3132': 1888, '3135': 1889, '3136': 1889,
+  '3139': 1890, '3140': 1890, '3143': 1891, '3144': 1891, '3147': 1892,
+  '3148': 1892, '3153': 580, '3154': 581, '3157': 584, '3158': 585, '3161': 588,
+  '3162': 589, '3165': 891, '3166': 892, '3169': 1274, '3170': 1275,
+  '3173': 1278, '3174': 1279, '3181': 7622, '3182': 7623, '3282': 11799,
+  '3316': 578, '3379': 42785, '3393': 1159, '3416': 8377
+};
+
+// Some characters, e.g. copyrightserif, are mapped to the private use area and
+// might not be displayed using standard fonts. Mapping/hacking well-known chars
+// to the similar equivalents in the normal characters range.
+var SpecialPUASymbols = {
+  '63721': 0x00A9, // copyrightsans (0xF8E9) => copyright
+  '63193': 0x00A9, // copyrightserif (0xF6D9) => copyright
+  '63720': 0x00AE, // registersans (0xF8E8) => registered
+  '63194': 0x00AE, // registerserif (0xF6DA) => registered
+  '63722': 0x2122, // trademarksans (0xF8EA) => trademark
+  '63195': 0x2122, // trademarkserif (0xF6DB) => trademark
+  '63729': 0x23A7, // bracelefttp (0xF8F1)
+  '63730': 0x23A8, // braceleftmid (0xF8F2)
+  '63731': 0x23A9, // braceleftbt (0xF8F3)
+  '63740': 0x23AB, // bracerighttp (0xF8FC)
+  '63741': 0x23AC, // bracerightmid (0xF8FD)
+  '63742': 0x23AD, // bracerightbt (0xF8FE)
+  '63726': 0x23A1, // bracketlefttp (0xF8EE)
+  '63727': 0x23A2, // bracketleftex (0xF8EF)
+  '63728': 0x23A3, // bracketleftbt (0xF8F0)
+  '63737': 0x23A4, // bracketrighttp (0xF8F9)
+  '63738': 0x23A5, // bracketrightex (0xF8FA)
+  '63739': 0x23A6, // bracketrightbt (0xF8FB)
+  '63723': 0x239B, // parenlefttp (0xF8EB)
+  '63724': 0x239C, // parenleftex (0xF8EC)
+  '63725': 0x239D, // parenleftbt (0xF8ED)
+  '63734': 0x239E, // parenrighttp (0xF8F6)
+  '63735': 0x239F, // parenrightex (0xF8F7)
+  '63736': 0x23A0, // parenrightbt (0xF8F8)
+};
+function mapSpecialUnicodeValues(code) {
+  if (code >= 0xFFF0 && code <= 0xFFFF) { // Specials unicode block.
+    return 0;
+  } else if (code >= 0xF600 && code <= 0xF8FF) {
+    return (SpecialPUASymbols[code] || code);
+  }
+  return code;
+}
+
+var UnicodeRanges = [
+  { 'begin': 0x0000, 'end': 0x007F }, // Basic Latin
+  { 'begin': 0x0080, 'end': 0x00FF }, // Latin-1 Supplement
+  { 'begin': 0x0100, 'end': 0x017F }, // Latin Extended-A
+  { 'begin': 0x0180, 'end': 0x024F }, // Latin Extended-B
+  { 'begin': 0x0250, 'end': 0x02AF }, // IPA Extensions
+  { 'begin': 0x02B0, 'end': 0x02FF }, // Spacing Modifier Letters
+  { 'begin': 0x0300, 'end': 0x036F }, // Combining Diacritical Marks
+  { 'begin': 0x0370, 'end': 0x03FF }, // Greek and Coptic
+  { 'begin': 0x2C80, 'end': 0x2CFF }, // Coptic
+  { 'begin': 0x0400, 'end': 0x04FF }, // Cyrillic
+  { 'begin': 0x0530, 'end': 0x058F }, // Armenian
+  { 'begin': 0x0590, 'end': 0x05FF }, // Hebrew
+  { 'begin': 0xA500, 'end': 0xA63F }, // Vai
+  { 'begin': 0x0600, 'end': 0x06FF }, // Arabic
+  { 'begin': 0x07C0, 'end': 0x07FF }, // NKo
+  { 'begin': 0x0900, 'end': 0x097F }, // Devanagari
+  { 'begin': 0x0980, 'end': 0x09FF }, // Bengali
+  { 'begin': 0x0A00, 'end': 0x0A7F }, // Gurmukhi
+  { 'begin': 0x0A80, 'end': 0x0AFF }, // Gujarati
+  { 'begin': 0x0B00, 'end': 0x0B7F }, // Oriya
+  { 'begin': 0x0B80, 'end': 0x0BFF }, // Tamil
+  { 'begin': 0x0C00, 'end': 0x0C7F }, // Telugu
+  { 'begin': 0x0C80, 'end': 0x0CFF }, // Kannada
+  { 'begin': 0x0D00, 'end': 0x0D7F }, // Malayalam
+  { 'begin': 0x0E00, 'end': 0x0E7F }, // Thai
+  { 'begin': 0x0E80, 'end': 0x0EFF }, // Lao
+  { 'begin': 0x10A0, 'end': 0x10FF }, // Georgian
+  { 'begin': 0x1B00, 'end': 0x1B7F }, // Balinese
+  { 'begin': 0x1100, 'end': 0x11FF }, // Hangul Jamo
+  { 'begin': 0x1E00, 'end': 0x1EFF }, // Latin Extended Additional
+  { 'begin': 0x1F00, 'end': 0x1FFF }, // Greek Extended
+  { 'begin': 0x2000, 'end': 0x206F }, // General Punctuation
+  { 'begin': 0x2070, 'end': 0x209F }, // Superscripts And Subscripts
+  { 'begin': 0x20A0, 'end': 0x20CF }, // Currency Symbol
+  { 'begin': 0x20D0, 'end': 0x20FF }, // Combining Diacritical Marks For Symbols
+  { 'begin': 0x2100, 'end': 0x214F }, // Letterlike Symbols
+  { 'begin': 0x2150, 'end': 0x218F }, // Number Forms
+  { 'begin': 0x2190, 'end': 0x21FF }, // Arrows
+  { 'begin': 0x2200, 'end': 0x22FF }, // Mathematical Operators
+  { 'begin': 0x2300, 'end': 0x23FF }, // Miscellaneous Technical
+  { 'begin': 0x2400, 'end': 0x243F }, // Control Pictures
+  { 'begin': 0x2440, 'end': 0x245F }, // Optical Character Recognition
+  { 'begin': 0x2460, 'end': 0x24FF }, // Enclosed Alphanumerics
+  { 'begin': 0x2500, 'end': 0x257F }, // Box Drawing
+  { 'begin': 0x2580, 'end': 0x259F }, // Block Elements
+  { 'begin': 0x25A0, 'end': 0x25FF }, // Geometric Shapes
+  { 'begin': 0x2600, 'end': 0x26FF }, // Miscellaneous Symbols
+  { 'begin': 0x2700, 'end': 0x27BF }, // Dingbats
+  { 'begin': 0x3000, 'end': 0x303F }, // CJK Symbols And Punctuation
+  { 'begin': 0x3040, 'end': 0x309F }, // Hiragana
+  { 'begin': 0x30A0, 'end': 0x30FF }, // Katakana
+  { 'begin': 0x3100, 'end': 0x312F }, // Bopomofo
+  { 'begin': 0x3130, 'end': 0x318F }, // Hangul Compatibility Jamo
+  { 'begin': 0xA840, 'end': 0xA87F }, // Phags-pa
+  { 'begin': 0x3200, 'end': 0x32FF }, // Enclosed CJK Letters And Months
+  { 'begin': 0x3300, 'end': 0x33FF }, // CJK Compatibility
+  { 'begin': 0xAC00, 'end': 0xD7AF }, // Hangul Syllables
+  { 'begin': 0xD800, 'end': 0xDFFF }, // Non-Plane 0 *
+  { 'begin': 0x10900, 'end': 0x1091F }, // Phoenicia
+  { 'begin': 0x4E00, 'end': 0x9FFF }, // CJK Unified Ideographs
+  { 'begin': 0xE000, 'end': 0xF8FF }, // Private Use Area (plane 0)
+  { 'begin': 0x31C0, 'end': 0x31EF }, // CJK Strokes
+  { 'begin': 0xFB00, 'end': 0xFB4F }, // Alphabetic Presentation Forms
+  { 'begin': 0xFB50, 'end': 0xFDFF }, // Arabic Presentation Forms-A
+  { 'begin': 0xFE20, 'end': 0xFE2F }, // Combining Half Marks
+  { 'begin': 0xFE10, 'end': 0xFE1F }, // Vertical Forms
+  { 'begin': 0xFE50, 'end': 0xFE6F }, // Small Form Variants
+  { 'begin': 0xFE70, 'end': 0xFEFF }, // Arabic Presentation Forms-B
+  { 'begin': 0xFF00, 'end': 0xFFEF }, // Halfwidth And Fullwidth Forms
+  { 'begin': 0xFFF0, 'end': 0xFFFF }, // Specials
+  { 'begin': 0x0F00, 'end': 0x0FFF }, // Tibetan
+  { 'begin': 0x0700, 'end': 0x074F }, // Syriac
+  { 'begin': 0x0780, 'end': 0x07BF }, // Thaana
+  { 'begin': 0x0D80, 'end': 0x0DFF }, // Sinhala
+  { 'begin': 0x1000, 'end': 0x109F }, // Myanmar
+  { 'begin': 0x1200, 'end': 0x137F }, // Ethiopic
+  { 'begin': 0x13A0, 'end': 0x13FF }, // Cherokee
+  { 'begin': 0x1400, 'end': 0x167F }, // Unified Canadian Aboriginal Syllabics
+  { 'begin': 0x1680, 'end': 0x169F }, // Ogham
+  { 'begin': 0x16A0, 'end': 0x16FF }, // Runic
+  { 'begin': 0x1780, 'end': 0x17FF }, // Khmer
+  { 'begin': 0x1800, 'end': 0x18AF }, // Mongolian
+  { 'begin': 0x2800, 'end': 0x28FF }, // Braille Patterns
+  { 'begin': 0xA000, 'end': 0xA48F }, // Yi Syllables
+  { 'begin': 0x1700, 'end': 0x171F }, // Tagalog
+  { 'begin': 0x10300, 'end': 0x1032F }, // Old Italic
+  { 'begin': 0x10330, 'end': 0x1034F }, // Gothic
+  { 'begin': 0x10400, 'end': 0x1044F }, // Deseret
+  { 'begin': 0x1D000, 'end': 0x1D0FF }, // Byzantine Musical Symbols
+  { 'begin': 0x1D400, 'end': 0x1D7FF }, // Mathematical Alphanumeric Symbols
+  { 'begin': 0xFF000, 'end': 0xFFFFD }, // Private Use (plane 15)
+  { 'begin': 0xFE00, 'end': 0xFE0F }, // Variation Selectors
+  { 'begin': 0xE0000, 'end': 0xE007F }, // Tags
+  { 'begin': 0x1900, 'end': 0x194F }, // Limbu
+  { 'begin': 0x1950, 'end': 0x197F }, // Tai Le
+  { 'begin': 0x1980, 'end': 0x19DF }, // New Tai Lue
+  { 'begin': 0x1A00, 'end': 0x1A1F }, // Buginese
+  { 'begin': 0x2C00, 'end': 0x2C5F }, // Glagolitic
+  { 'begin': 0x2D30, 'end': 0x2D7F }, // Tifinagh
+  { 'begin': 0x4DC0, 'end': 0x4DFF }, // Yijing Hexagram Symbols
+  { 'begin': 0xA800, 'end': 0xA82F }, // Syloti Nagri
+  { 'begin': 0x10000, 'end': 0x1007F }, // Linear B Syllabary
+  { 'begin': 0x10140, 'end': 0x1018F }, // Ancient Greek Numbers
+  { 'begin': 0x10380, 'end': 0x1039F }, // Ugaritic
+  { 'begin': 0x103A0, 'end': 0x103DF }, // Old Persian
+  { 'begin': 0x10450, 'end': 0x1047F }, // Shavian
+  { 'begin': 0x10480, 'end': 0x104AF }, // Osmanya
+  { 'begin': 0x10800, 'end': 0x1083F }, // Cypriot Syllabary
+  { 'begin': 0x10A00, 'end': 0x10A5F }, // Kharoshthi
+  { 'begin': 0x1D300, 'end': 0x1D35F }, // Tai Xuan Jing Symbols
+  { 'begin': 0x12000, 'end': 0x123FF }, // Cuneiform
+  { 'begin': 0x1D360, 'end': 0x1D37F }, // Counting Rod Numerals
+  { 'begin': 0x1B80, 'end': 0x1BBF }, // Sundanese
+  { 'begin': 0x1C00, 'end': 0x1C4F }, // Lepcha
+  { 'begin': 0x1C50, 'end': 0x1C7F }, // Ol Chiki
+  { 'begin': 0xA880, 'end': 0xA8DF }, // Saurashtra
+  { 'begin': 0xA900, 'end': 0xA92F }, // Kayah Li
+  { 'begin': 0xA930, 'end': 0xA95F }, // Rejang
+  { 'begin': 0xAA00, 'end': 0xAA5F }, // Cham
+  { 'begin': 0x10190, 'end': 0x101CF }, // Ancient Symbols
+  { 'begin': 0x101D0, 'end': 0x101FF }, // Phaistos Disc
+  { 'begin': 0x102A0, 'end': 0x102DF }, // Carian
+  { 'begin': 0x1F030, 'end': 0x1F09F }  // Domino Tiles
+];
+
+var MacStandardGlyphOrdering = [
+  '.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl',
+  'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft',
+  'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash',
+  'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight',
+  'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at',
+  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
+  'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft',
+  'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b',
+  'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',
+  'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright',
+  'asciitilde', 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde',
+  'Odieresis', 'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis',
+  'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis',
+  'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve',
+  'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave', 'ucircumflex',
+  'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section', 'bullet',
+  'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute',
+  'dieresis', 'notequal', 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal',
+  'greaterequal', 'yen', 'mu', 'partialdiff', 'summation', 'product', 'pi',
+  'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash',
+  'questiondown', 'exclamdown', 'logicalnot', 'radical', 'florin',
+  'approxequal', 'Delta', 'guillemotleft', 'guillemotright', 'ellipsis',
+  'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash',
+  'emdash', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright',
+  'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction', 'currency',
+  'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered',
+  'quotesinglbase', 'quotedblbase', 'perthousand', 'Acircumflex',
+  'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex',
+  'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute',
+  'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron',
+  'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron',
+  'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar',
+  'Eth', 'eth', 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply',
+  'onesuperior', 'twosuperior', 'threesuperior', 'onehalf', 'onequarter',
+  'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla',
+  'scedilla', 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat'];
+
+function getUnicodeRangeFor(value) {
+  for (var i = 0, ii = UnicodeRanges.length; i < ii; i++) {
+    var range = UnicodeRanges[i];
+    if (value >= range.begin && value < range.end) {
+      return i;
+    }
+  }
+  return -1;
+}
+
+function isRTLRangeFor(value) {
+  var range = UnicodeRanges[13];
+  if (value >= range.begin && value < range.end) {
+    return true;
+  }
+  range = UnicodeRanges[11];
+  if (value >= range.begin && value < range.end) {
+    return true;
+  }
+  return false;
+}
+
+// The normalization table is obtained by filtering the Unicode characters
+// database with <compat> entries.
+var NormalizedUnicodes = {
+  '\u00A8': '\u0020\u0308',
+  '\u00AF': '\u0020\u0304',
+  '\u00B4': '\u0020\u0301',
+  '\u00B5': '\u03BC',
+  '\u00B8': '\u0020\u0327',
+  '\u0132': '\u0049\u004A',
+  '\u0133': '\u0069\u006A',
+  '\u013F': '\u004C\u00B7',
+  '\u0140': '\u006C\u00B7',
+  '\u0149': '\u02BC\u006E',
+  '\u017F': '\u0073',
+  '\u01C4': '\u0044\u017D',
+  '\u01C5': '\u0044\u017E',
+  '\u01C6': '\u0064\u017E',
+  '\u01C7': '\u004C\u004A',
+  '\u01C8': '\u004C\u006A',
+  '\u01C9': '\u006C\u006A',
+  '\u01CA': '\u004E\u004A',
+  '\u01CB': '\u004E\u006A',
+  '\u01CC': '\u006E\u006A',
+  '\u01F1': '\u0044\u005A',
+  '\u01F2': '\u0044\u007A',
+  '\u01F3': '\u0064\u007A',
+  '\u02D8': '\u0020\u0306',
+  '\u02D9': '\u0020\u0307',
+  '\u02DA': '\u0020\u030A',
+  '\u02DB': '\u0020\u0328',
+  '\u02DC': '\u0020\u0303',
+  '\u02DD': '\u0020\u030B',
+  '\u037A': '\u0020\u0345',
+  '\u0384': '\u0020\u0301',
+  '\u03D0': '\u03B2',
+  '\u03D1': '\u03B8',
+  '\u03D2': '\u03A5',
+  '\u03D5': '\u03C6',
+  '\u03D6': '\u03C0',
+  '\u03F0': '\u03BA',
+  '\u03F1': '\u03C1',
+  '\u03F2': '\u03C2',
+  '\u03F4': '\u0398',
+  '\u03F5': '\u03B5',
+  '\u03F9': '\u03A3',
+  '\u0587': '\u0565\u0582',
+  '\u0675': '\u0627\u0674',
+  '\u0676': '\u0648\u0674',
+  '\u0677': '\u06C7\u0674',
+  '\u0678': '\u064A\u0674',
+  '\u0E33': '\u0E4D\u0E32',
+  '\u0EB3': '\u0ECD\u0EB2',
+  '\u0EDC': '\u0EAB\u0E99',
+  '\u0EDD': '\u0EAB\u0EA1',
+  '\u0F77': '\u0FB2\u0F81',
+  '\u0F79': '\u0FB3\u0F81',
+  '\u1E9A': '\u0061\u02BE',
+  '\u1FBD': '\u0020\u0313',
+  '\u1FBF': '\u0020\u0313',
+  '\u1FC0': '\u0020\u0342',
+  '\u1FFE': '\u0020\u0314',
+  '\u2002': '\u0020',
+  '\u2003': '\u0020',
+  '\u2004': '\u0020',
+  '\u2005': '\u0020',
+  '\u2006': '\u0020',
+  '\u2008': '\u0020',
+  '\u2009': '\u0020',
+  '\u200A': '\u0020',
+  '\u2017': '\u0020\u0333',
+  '\u2024': '\u002E',
+  '\u2025': '\u002E\u002E',
+  '\u2026': '\u002E\u002E\u002E',
+  '\u2033': '\u2032\u2032',
+  '\u2034': '\u2032\u2032\u2032',
+  '\u2036': '\u2035\u2035',
+  '\u2037': '\u2035\u2035\u2035',
+  '\u203C': '\u0021\u0021',
+  '\u203E': '\u0020\u0305',
+  '\u2047': '\u003F\u003F',
+  '\u2048': '\u003F\u0021',
+  '\u2049': '\u0021\u003F',
+  '\u2057': '\u2032\u2032\u2032\u2032',
+  '\u205F': '\u0020',
+  '\u20A8': '\u0052\u0073',
+  '\u2100': '\u0061\u002F\u0063',
+  '\u2101': '\u0061\u002F\u0073',
+  '\u2103': '\u00B0\u0043',
+  '\u2105': '\u0063\u002F\u006F',
+  '\u2106': '\u0063\u002F\u0075',
+  '\u2107': '\u0190',
+  '\u2109': '\u00B0\u0046',
+  '\u2116': '\u004E\u006F',
+  '\u2121': '\u0054\u0045\u004C',
+  '\u2135': '\u05D0',
+  '\u2136': '\u05D1',
+  '\u2137': '\u05D2',
+  '\u2138': '\u05D3',
+  '\u213B': '\u0046\u0041\u0058',
+  '\u2160': '\u0049',
+  '\u2161': '\u0049\u0049',
+  '\u2162': '\u0049\u0049\u0049',
+  '\u2163': '\u0049\u0056',
+  '\u2164': '\u0056',
+  '\u2165': '\u0056\u0049',
+  '\u2166': '\u0056\u0049\u0049',
+  '\u2167': '\u0056\u0049\u0049\u0049',
+  '\u2168': '\u0049\u0058',
+  '\u2169': '\u0058',
+  '\u216A': '\u0058\u0049',
+  '\u216B': '\u0058\u0049\u0049',
+  '\u216C': '\u004C',
+  '\u216D': '\u0043',
+  '\u216E': '\u0044',
+  '\u216F': '\u004D',
+  '\u2170': '\u0069',
+  '\u2171': '\u0069\u0069',
+  '\u2172': '\u0069\u0069\u0069',
+  '\u2173': '\u0069\u0076',
+  '\u2174': '\u0076',
+  '\u2175': '\u0076\u0069',
+  '\u2176': '\u0076\u0069\u0069',
+  '\u2177': '\u0076\u0069\u0069\u0069',
+  '\u2178': '\u0069\u0078',
+  '\u2179': '\u0078',
+  '\u217A': '\u0078\u0069',
+  '\u217B': '\u0078\u0069\u0069',
+  '\u217C': '\u006C',
+  '\u217D': '\u0063',
+  '\u217E': '\u0064',
+  '\u217F': '\u006D',
+  '\u222C': '\u222B\u222B',
+  '\u222D': '\u222B\u222B\u222B',
+  '\u222F': '\u222E\u222E',
+  '\u2230': '\u222E\u222E\u222E',
+  '\u2474': '\u0028\u0031\u0029',
+  '\u2475': '\u0028\u0032\u0029',
+  '\u2476': '\u0028\u0033\u0029',
+  '\u2477': '\u0028\u0034\u0029',
+  '\u2478': '\u0028\u0035\u0029',
+  '\u2479': '\u0028\u0036\u0029',
+  '\u247A': '\u0028\u0037\u0029',
+  '\u247B': '\u0028\u0038\u0029',
+  '\u247C': '\u0028\u0039\u0029',
+  '\u247D': '\u0028\u0031\u0030\u0029',
+  '\u247E': '\u0028\u0031\u0031\u0029',
+  '\u247F': '\u0028\u0031\u0032\u0029',
+  '\u2480': '\u0028\u0031\u0033\u0029',
+  '\u2481': '\u0028\u0031\u0034\u0029',
+  '\u2482': '\u0028\u0031\u0035\u0029',
+  '\u2483': '\u0028\u0031\u0036\u0029',
+  '\u2484': '\u0028\u0031\u0037\u0029',
+  '\u2485': '\u0028\u0031\u0038\u0029',
+  '\u2486': '\u0028\u0031\u0039\u0029',
+  '\u2487': '\u0028\u0032\u0030\u0029',
+  '\u2488': '\u0031\u002E',
+  '\u2489': '\u0032\u002E',
+  '\u248A': '\u0033\u002E',
+  '\u248B': '\u0034\u002E',
+  '\u248C': '\u0035\u002E',
+  '\u248D': '\u0036\u002E',
+  '\u248E': '\u0037\u002E',
+  '\u248F': '\u0038\u002E',
+  '\u2490': '\u0039\u002E',
+  '\u2491': '\u0031\u0030\u002E',
+  '\u2492': '\u0031\u0031\u002E',
+  '\u2493': '\u0031\u0032\u002E',
+  '\u2494': '\u0031\u0033\u002E',
+  '\u2495': '\u0031\u0034\u002E',
+  '\u2496': '\u0031\u0035\u002E',
+  '\u2497': '\u0031\u0036\u002E',
+  '\u2498': '\u0031\u0037\u002E',
+  '\u2499': '\u0031\u0038\u002E',
+  '\u249A': '\u0031\u0039\u002E',
+  '\u249B': '\u0032\u0030\u002E',
+  '\u249C': '\u0028\u0061\u0029',
+  '\u249D': '\u0028\u0062\u0029',
+  '\u249E': '\u0028\u0063\u0029',
+  '\u249F': '\u0028\u0064\u0029',
+  '\u24A0': '\u0028\u0065\u0029',
+  '\u24A1': '\u0028\u0066\u0029',
+  '\u24A2': '\u0028\u0067\u0029',
+  '\u24A3': '\u0028\u0068\u0029',
+  '\u24A4': '\u0028\u0069\u0029',
+  '\u24A5': '\u0028\u006A\u0029',
+  '\u24A6': '\u0028\u006B\u0029',
+  '\u24A7': '\u0028\u006C\u0029',
+  '\u24A8': '\u0028\u006D\u0029',
+  '\u24A9': '\u0028\u006E\u0029',
+  '\u24AA': '\u0028\u006F\u0029',
+  '\u24AB': '\u0028\u0070\u0029',
+  '\u24AC': '\u0028\u0071\u0029',
+  '\u24AD': '\u0028\u0072\u0029',
+  '\u24AE': '\u0028\u0073\u0029',
+  '\u24AF': '\u0028\u0074\u0029',
+  '\u24B0': '\u0028\u0075\u0029',
+  '\u24B1': '\u0028\u0076\u0029',
+  '\u24B2': '\u0028\u0077\u0029',
+  '\u24B3': '\u0028\u0078\u0029',
+  '\u24B4': '\u0028\u0079\u0029',
+  '\u24B5': '\u0028\u007A\u0029',
+  '\u2A0C': '\u222B\u222B\u222B\u222B',
+  '\u2A74': '\u003A\u003A\u003D',
+  '\u2A75': '\u003D\u003D',
+  '\u2A76': '\u003D\u003D\u003D',
+  '\u2E9F': '\u6BCD',
+  '\u2EF3': '\u9F9F',
+  '\u2F00': '\u4E00',
+  '\u2F01': '\u4E28',
+  '\u2F02': '\u4E36',
+  '\u2F03': '\u4E3F',
+  '\u2F04': '\u4E59',
+  '\u2F05': '\u4E85',
+  '\u2F06': '\u4E8C',
+  '\u2F07': '\u4EA0',
+  '\u2F08': '\u4EBA',
+  '\u2F09': '\u513F',
+  '\u2F0A': '\u5165',
+  '\u2F0B': '\u516B',
+  '\u2F0C': '\u5182',
+  '\u2F0D': '\u5196',
+  '\u2F0E': '\u51AB',
+  '\u2F0F': '\u51E0',
+  '\u2F10': '\u51F5',
+  '\u2F11': '\u5200',
+  '\u2F12': '\u529B',
+  '\u2F13': '\u52F9',
+  '\u2F14': '\u5315',
+  '\u2F15': '\u531A',
+  '\u2F16': '\u5338',
+  '\u2F17': '\u5341',
+  '\u2F18': '\u535C',
+  '\u2F19': '\u5369',
+  '\u2F1A': '\u5382',
+  '\u2F1B': '\u53B6',
+  '\u2F1C': '\u53C8',
+  '\u2F1D': '\u53E3',
+  '\u2F1E': '\u56D7',
+  '\u2F1F': '\u571F',
+  '\u2F20': '\u58EB',
+  '\u2F21': '\u5902',
+  '\u2F22': '\u590A',
+  '\u2F23': '\u5915',
+  '\u2F24': '\u5927',
+  '\u2F25': '\u5973',
+  '\u2F26': '\u5B50',
+  '\u2F27': '\u5B80',
+  '\u2F28': '\u5BF8',
+  '\u2F29': '\u5C0F',
+  '\u2F2A': '\u5C22',
+  '\u2F2B': '\u5C38',
+  '\u2F2C': '\u5C6E',
+  '\u2F2D': '\u5C71',
+  '\u2F2E': '\u5DDB',
+  '\u2F2F': '\u5DE5',
+  '\u2F30': '\u5DF1',
+  '\u2F31': '\u5DFE',
+  '\u2F32': '\u5E72',
+  '\u2F33': '\u5E7A',
+  '\u2F34': '\u5E7F',
+  '\u2F35': '\u5EF4',
+  '\u2F36': '\u5EFE',
+  '\u2F37': '\u5F0B',
+  '\u2F38': '\u5F13',
+  '\u2F39': '\u5F50',
+  '\u2F3A': '\u5F61',
+  '\u2F3B': '\u5F73',
+  '\u2F3C': '\u5FC3',
+  '\u2F3D': '\u6208',
+  '\u2F3E': '\u6236',
+  '\u2F3F': '\u624B',
+  '\u2F40': '\u652F',
+  '\u2F41': '\u6534',
+  '\u2F42': '\u6587',
+  '\u2F43': '\u6597',
+  '\u2F44': '\u65A4',
+  '\u2F45': '\u65B9',
+  '\u2F46': '\u65E0',
+  '\u2F47': '\u65E5',
+  '\u2F48': '\u66F0',
+  '\u2F49': '\u6708',
+  '\u2F4A': '\u6728',
+  '\u2F4B': '\u6B20',
+  '\u2F4C': '\u6B62',
+  '\u2F4D': '\u6B79',
+  '\u2F4E': '\u6BB3',
+  '\u2F4F': '\u6BCB',
+  '\u2F50': '\u6BD4',
+  '\u2F51': '\u6BDB',
+  '\u2F52': '\u6C0F',
+  '\u2F53': '\u6C14',
+  '\u2F54': '\u6C34',
+  '\u2F55': '\u706B',
+  '\u2F56': '\u722A',
+  '\u2F57': '\u7236',
+  '\u2F58': '\u723B',
+  '\u2F59': '\u723F',
+  '\u2F5A': '\u7247',
+  '\u2F5B': '\u7259',
+  '\u2F5C': '\u725B',
+  '\u2F5D': '\u72AC',
+  '\u2F5E': '\u7384',
+  '\u2F5F': '\u7389',
+  '\u2F60': '\u74DC',
+  '\u2F61': '\u74E6',
+  '\u2F62': '\u7518',
+  '\u2F63': '\u751F',
+  '\u2F64': '\u7528',
+  '\u2F65': '\u7530',
+  '\u2F66': '\u758B',
+  '\u2F67': '\u7592',
+  '\u2F68': '\u7676',
+  '\u2F69': '\u767D',
+  '\u2F6A': '\u76AE',
+  '\u2F6B': '\u76BF',
+  '\u2F6C': '\u76EE',
+  '\u2F6D': '\u77DB',
+  '\u2F6E': '\u77E2',
+  '\u2F6F': '\u77F3',
+  '\u2F70': '\u793A',
+  '\u2F71': '\u79B8',
+  '\u2F72': '\u79BE',
+  '\u2F73': '\u7A74',
+  '\u2F74': '\u7ACB',
+  '\u2F75': '\u7AF9',
+  '\u2F76': '\u7C73',
+  '\u2F77': '\u7CF8',
+  '\u2F78': '\u7F36',
+  '\u2F79': '\u7F51',
+  '\u2F7A': '\u7F8A',
+  '\u2F7B': '\u7FBD',
+  '\u2F7C': '\u8001',
+  '\u2F7D': '\u800C',
+  '\u2F7E': '\u8012',
+  '\u2F7F': '\u8033',
+  '\u2F80': '\u807F',
+  '\u2F81': '\u8089',
+  '\u2F82': '\u81E3',
+  '\u2F83': '\u81EA',
+  '\u2F84': '\u81F3',
+  '\u2F85': '\u81FC',
+  '\u2F86': '\u820C',
+  '\u2F87': '\u821B',
+  '\u2F88': '\u821F',
+  '\u2F89': '\u826E',
+  '\u2F8A': '\u8272',
+  '\u2F8B': '\u8278',
+  '\u2F8C': '\u864D',
+  '\u2F8D': '\u866B',
+  '\u2F8E': '\u8840',
+  '\u2F8F': '\u884C',
+  '\u2F90': '\u8863',
+  '\u2F91': '\u897E',
+  '\u2F92': '\u898B',
+  '\u2F93': '\u89D2',
+  '\u2F94': '\u8A00',
+  '\u2F95': '\u8C37',
+  '\u2F96': '\u8C46',
+  '\u2F97': '\u8C55',
+  '\u2F98': '\u8C78',
+  '\u2F99': '\u8C9D',
+  '\u2F9A': '\u8D64',
+  '\u2F9B': '\u8D70',
+  '\u2F9C': '\u8DB3',
+  '\u2F9D': '\u8EAB',
+  '\u2F9E': '\u8ECA',
+  '\u2F9F': '\u8F9B',
+  '\u2FA0': '\u8FB0',
+  '\u2FA1': '\u8FB5',
+  '\u2FA2': '\u9091',
+  '\u2FA3': '\u9149',
+  '\u2FA4': '\u91C6',
+  '\u2FA5': '\u91CC',
+  '\u2FA6': '\u91D1',
+  '\u2FA7': '\u9577',
+  '\u2FA8': '\u9580',
+  '\u2FA9': '\u961C',
+  '\u2FAA': '\u96B6',
+  '\u2FAB': '\u96B9',
+  '\u2FAC': '\u96E8',
+  '\u2FAD': '\u9751',
+  '\u2FAE': '\u975E',
+  '\u2FAF': '\u9762',
+  '\u2FB0': '\u9769',
+  '\u2FB1': '\u97CB',
+  '\u2FB2': '\u97ED',
+  '\u2FB3': '\u97F3',
+  '\u2FB4': '\u9801',
+  '\u2FB5': '\u98A8',
+  '\u2FB6': '\u98DB',
+  '\u2FB7': '\u98DF',
+  '\u2FB8': '\u9996',
+  '\u2FB9': '\u9999',
+  '\u2FBA': '\u99AC',
+  '\u2FBB': '\u9AA8',
+  '\u2FBC': '\u9AD8',
+  '\u2FBD': '\u9ADF',
+  '\u2FBE': '\u9B25',
+  '\u2FBF': '\u9B2F',
+  '\u2FC0': '\u9B32',
+  '\u2FC1': '\u9B3C',
+  '\u2FC2': '\u9B5A',
+  '\u2FC3': '\u9CE5',
+  '\u2FC4': '\u9E75',
+  '\u2FC5': '\u9E7F',
+  '\u2FC6': '\u9EA5',
+  '\u2FC7': '\u9EBB',
+  '\u2FC8': '\u9EC3',
+  '\u2FC9': '\u9ECD',
+  '\u2FCA': '\u9ED1',
+  '\u2FCB': '\u9EF9',
+  '\u2FCC': '\u9EFD',
+  '\u2FCD': '\u9F0E',
+  '\u2FCE': '\u9F13',
+  '\u2FCF': '\u9F20',
+  '\u2FD0': '\u9F3B',
+  '\u2FD1': '\u9F4A',
+  '\u2FD2': '\u9F52',
+  '\u2FD3': '\u9F8D',
+  '\u2FD4': '\u9F9C',
+  '\u2FD5': '\u9FA0',
+  '\u3036': '\u3012',
+  '\u3038': '\u5341',
+  '\u3039': '\u5344',
+  '\u303A': '\u5345',
+  '\u309B': '\u0020\u3099',
+  '\u309C': '\u0020\u309A',
+  '\u3131': '\u1100',
+  '\u3132': '\u1101',
+  '\u3133': '\u11AA',
+  '\u3134': '\u1102',
+  '\u3135': '\u11AC',
+  '\u3136': '\u11AD',
+  '\u3137': '\u1103',
+  '\u3138': '\u1104',
+  '\u3139': '\u1105',
+  '\u313A': '\u11B0',
+  '\u313B': '\u11B1',
+  '\u313C': '\u11B2',
+  '\u313D': '\u11B3',
+  '\u313E': '\u11B4',
+  '\u313F': '\u11B5',
+  '\u3140': '\u111A',
+  '\u3141': '\u1106',
+  '\u3142': '\u1107',
+  '\u3143': '\u1108',
+  '\u3144': '\u1121',
+  '\u3145': '\u1109',
+  '\u3146': '\u110A',
+  '\u3147': '\u110B',
+  '\u3148': '\u110C',
+  '\u3149': '\u110D',
+  '\u314A': '\u110E',
+  '\u314B': '\u110F',
+  '\u314C': '\u1110',
+  '\u314D': '\u1111',
+  '\u314E': '\u1112',
+  '\u314F': '\u1161',
+  '\u3150': '\u1162',
+  '\u3151': '\u1163',
+  '\u3152': '\u1164',
+  '\u3153': '\u1165',
+  '\u3154': '\u1166',
+  '\u3155': '\u1167',
+  '\u3156': '\u1168',
+  '\u3157': '\u1169',
+  '\u3158': '\u116A',
+  '\u3159': '\u116B',
+  '\u315A': '\u116C',
+  '\u315B': '\u116D',
+  '\u315C': '\u116E',
+  '\u315D': '\u116F',
+  '\u315E': '\u1170',
+  '\u315F': '\u1171',
+  '\u3160': '\u1172',
+  '\u3161': '\u1173',
+  '\u3162': '\u1174',
+  '\u3163': '\u1175',
+  '\u3164': '\u1160',
+  '\u3165': '\u1114',
+  '\u3166': '\u1115',
+  '\u3167': '\u11C7',
+  '\u3168': '\u11C8',
+  '\u3169': '\u11CC',
+  '\u316A': '\u11CE',
+  '\u316B': '\u11D3',
+  '\u316C': '\u11D7',
+  '\u316D': '\u11D9',
+  '\u316E': '\u111C',
+  '\u316F': '\u11DD',
+  '\u3170': '\u11DF',
+  '\u3171': '\u111D',
+  '\u3172': '\u111E',
+  '\u3173': '\u1120',
+  '\u3174': '\u1122',
+  '\u3175': '\u1123',
+  '\u3176': '\u1127',
+  '\u3177': '\u1129',
+  '\u3178': '\u112B',
+  '\u3179': '\u112C',
+  '\u317A': '\u112D',
+  '\u317B': '\u112E',
+  '\u317C': '\u112F',
+  '\u317D': '\u1132',
+  '\u317E': '\u1136',
+  '\u317F': '\u1140',
+  '\u3180': '\u1147',
+  '\u3181': '\u114C',
+  '\u3182': '\u11F1',
+  '\u3183': '\u11F2',
+  '\u3184': '\u1157',
+  '\u3185': '\u1158',
+  '\u3186': '\u1159',
+  '\u3187': '\u1184',
+  '\u3188': '\u1185',
+  '\u3189': '\u1188',
+  '\u318A': '\u1191',
+  '\u318B': '\u1192',
+  '\u318C': '\u1194',
+  '\u318D': '\u119E',
+  '\u318E': '\u11A1',
+  '\u3200': '\u0028\u1100\u0029',
+  '\u3201': '\u0028\u1102\u0029',
+  '\u3202': '\u0028\u1103\u0029',
+  '\u3203': '\u0028\u1105\u0029',
+  '\u3204': '\u0028\u1106\u0029',
+  '\u3205': '\u0028\u1107\u0029',
+  '\u3206': '\u0028\u1109\u0029',
+  '\u3207': '\u0028\u110B\u0029',
+  '\u3208': '\u0028\u110C\u0029',
+  '\u3209': '\u0028\u110E\u0029',
+  '\u320A': '\u0028\u110F\u0029',
+  '\u320B': '\u0028\u1110\u0029',
+  '\u320C': '\u0028\u1111\u0029',
+  '\u320D': '\u0028\u1112\u0029',
+  '\u320E': '\u0028\u1100\u1161\u0029',
+  '\u320F': '\u0028\u1102\u1161\u0029',
+  '\u3210': '\u0028\u1103\u1161\u0029',
+  '\u3211': '\u0028\u1105\u1161\u0029',
+  '\u3212': '\u0028\u1106\u1161\u0029',
+  '\u3213': '\u0028\u1107\u1161\u0029',
+  '\u3214': '\u0028\u1109\u1161\u0029',
+  '\u3215': '\u0028\u110B\u1161\u0029',
+  '\u3216': '\u0028\u110C\u1161\u0029',
+  '\u3217': '\u0028\u110E\u1161\u0029',
+  '\u3218': '\u0028\u110F\u1161\u0029',
+  '\u3219': '\u0028\u1110\u1161\u0029',
+  '\u321A': '\u0028\u1111\u1161\u0029',
+  '\u321B': '\u0028\u1112\u1161\u0029',
+  '\u321C': '\u0028\u110C\u116E\u0029',
+  '\u321D': '\u0028\u110B\u1169\u110C\u1165\u11AB\u0029',
+  '\u321E': '\u0028\u110B\u1169\u1112\u116E\u0029',
+  '\u3220': '\u0028\u4E00\u0029',
+  '\u3221': '\u0028\u4E8C\u0029',
+  '\u3222': '\u0028\u4E09\u0029',
+  '\u3223': '\u0028\u56DB\u0029',
+  '\u3224': '\u0028\u4E94\u0029',
+  '\u3225': '\u0028\u516D\u0029',
+  '\u3226': '\u0028\u4E03\u0029',
+  '\u3227': '\u0028\u516B\u0029',
+  '\u3228': '\u0028\u4E5D\u0029',
+  '\u3229': '\u0028\u5341\u0029',
+  '\u322A': '\u0028\u6708\u0029',
+  '\u322B': '\u0028\u706B\u0029',
+  '\u322C': '\u0028\u6C34\u0029',
+  '\u322D': '\u0028\u6728\u0029',
+  '\u322E': '\u0028\u91D1\u0029',
+  '\u322F': '\u0028\u571F\u0029',
+  '\u3230': '\u0028\u65E5\u0029',
+  '\u3231': '\u0028\u682A\u0029',
+  '\u3232': '\u0028\u6709\u0029',
+  '\u3233': '\u0028\u793E\u0029',
+  '\u3234': '\u0028\u540D\u0029',
+  '\u3235': '\u0028\u7279\u0029',
+  '\u3236': '\u0028\u8CA1\u0029',
+  '\u3237': '\u0028\u795D\u0029',
+  '\u3238': '\u0028\u52B4\u0029',
+  '\u3239': '\u0028\u4EE3\u0029',
+  '\u323A': '\u0028\u547C\u0029',
+  '\u323B': '\u0028\u5B66\u0029',
+  '\u323C': '\u0028\u76E3\u0029',
+  '\u323D': '\u0028\u4F01\u0029',
+  '\u323E': '\u0028\u8CC7\u0029',
+  '\u323F': '\u0028\u5354\u0029',
+  '\u3240': '\u0028\u796D\u0029',
+  '\u3241': '\u0028\u4F11\u0029',
+  '\u3242': '\u0028\u81EA\u0029',
+  '\u3243': '\u0028\u81F3\u0029',
+  '\u32C0': '\u0031\u6708',
+  '\u32C1': '\u0032\u6708',
+  '\u32C2': '\u0033\u6708',
+  '\u32C3': '\u0034\u6708',
+  '\u32C4': '\u0035\u6708',
+  '\u32C5': '\u0036\u6708',
+  '\u32C6': '\u0037\u6708',
+  '\u32C7': '\u0038\u6708',
+  '\u32C8': '\u0039\u6708',
+  '\u32C9': '\u0031\u0030\u6708',
+  '\u32CA': '\u0031\u0031\u6708',
+  '\u32CB': '\u0031\u0032\u6708',
+  '\u3358': '\u0030\u70B9',
+  '\u3359': '\u0031\u70B9',
+  '\u335A': '\u0032\u70B9',
+  '\u335B': '\u0033\u70B9',
+  '\u335C': '\u0034\u70B9',
+  '\u335D': '\u0035\u70B9',
+  '\u335E': '\u0036\u70B9',
+  '\u335F': '\u0037\u70B9',
+  '\u3360': '\u0038\u70B9',
+  '\u3361': '\u0039\u70B9',
+  '\u3362': '\u0031\u0030\u70B9',
+  '\u3363': '\u0031\u0031\u70B9',
+  '\u3364': '\u0031\u0032\u70B9',
+  '\u3365': '\u0031\u0033\u70B9',
+  '\u3366': '\u0031\u0034\u70B9',
+  '\u3367': '\u0031\u0035\u70B9',
+  '\u3368': '\u0031\u0036\u70B9',
+  '\u3369': '\u0031\u0037\u70B9',
+  '\u336A': '\u0031\u0038\u70B9',
+  '\u336B': '\u0031\u0039\u70B9',
+  '\u336C': '\u0032\u0030\u70B9',
+  '\u336D': '\u0032\u0031\u70B9',
+  '\u336E': '\u0032\u0032\u70B9',
+  '\u336F': '\u0032\u0033\u70B9',
+  '\u3370': '\u0032\u0034\u70B9',
+  '\u33E0': '\u0031\u65E5',
+  '\u33E1': '\u0032\u65E5',
+  '\u33E2': '\u0033\u65E5',
+  '\u33E3': '\u0034\u65E5',
+  '\u33E4': '\u0035\u65E5',
+  '\u33E5': '\u0036\u65E5',
+  '\u33E6': '\u0037\u65E5',
+  '\u33E7': '\u0038\u65E5',
+  '\u33E8': '\u0039\u65E5',
+  '\u33E9': '\u0031\u0030\u65E5',
+  '\u33EA': '\u0031\u0031\u65E5',
+  '\u33EB': '\u0031\u0032\u65E5',
+  '\u33EC': '\u0031\u0033\u65E5',
+  '\u33ED': '\u0031\u0034\u65E5',
+  '\u33EE': '\u0031\u0035\u65E5',
+  '\u33EF': '\u0031\u0036\u65E5',
+  '\u33F0': '\u0031\u0037\u65E5',
+  '\u33F1': '\u0031\u0038\u65E5',
+  '\u33F2': '\u0031\u0039\u65E5',
+  '\u33F3': '\u0032\u0030\u65E5',
+  '\u33F4': '\u0032\u0031\u65E5',
+  '\u33F5': '\u0032\u0032\u65E5',
+  '\u33F6': '\u0032\u0033\u65E5',
+  '\u33F7': '\u0032\u0034\u65E5',
+  '\u33F8': '\u0032\u0035\u65E5',
+  '\u33F9': '\u0032\u0036\u65E5',
+  '\u33FA': '\u0032\u0037\u65E5',
+  '\u33FB': '\u0032\u0038\u65E5',
+  '\u33FC': '\u0032\u0039\u65E5',
+  '\u33FD': '\u0033\u0030\u65E5',
+  '\u33FE': '\u0033\u0031\u65E5',
+  '\uFB00': '\u0066\u0066',
+  '\uFB01': '\u0066\u0069',
+  '\uFB02': '\u0066\u006C',
+  '\uFB03': '\u0066\u0066\u0069',
+  '\uFB04': '\u0066\u0066\u006C',
+  '\uFB05': '\u017F\u0074',
+  '\uFB06': '\u0073\u0074',
+  '\uFB13': '\u0574\u0576',
+  '\uFB14': '\u0574\u0565',
+  '\uFB15': '\u0574\u056B',
+  '\uFB16': '\u057E\u0576',
+  '\uFB17': '\u0574\u056D',
+  '\uFB4F': '\u05D0\u05DC',
+  '\uFB50': '\u0671',
+  '\uFB51': '\u0671',
+  '\uFB52': '\u067B',
+  '\uFB53': '\u067B',
+  '\uFB54': '\u067B',
+  '\uFB55': '\u067B',
+  '\uFB56': '\u067E',
+  '\uFB57': '\u067E',
+  '\uFB58': '\u067E',
+  '\uFB59': '\u067E',
+  '\uFB5A': '\u0680',
+  '\uFB5B': '\u0680',
+  '\uFB5C': '\u0680',
+  '\uFB5D': '\u0680',
+  '\uFB5E': '\u067A',
+  '\uFB5F': '\u067A',
+  '\uFB60': '\u067A',
+  '\uFB61': '\u067A',
+  '\uFB62': '\u067F',
+  '\uFB63': '\u067F',
+  '\uFB64': '\u067F',
+  '\uFB65': '\u067F',
+  '\uFB66': '\u0679',
+  '\uFB67': '\u0679',
+  '\uFB68': '\u0679',
+  '\uFB69': '\u0679',
+  '\uFB6A': '\u06A4',
+  '\uFB6B': '\u06A4',
+  '\uFB6C': '\u06A4',
+  '\uFB6D': '\u06A4',
+  '\uFB6E': '\u06A6',
+  '\uFB6F': '\u06A6',
+  '\uFB70': '\u06A6',
+  '\uFB71': '\u06A6',
+  '\uFB72': '\u0684',
+  '\uFB73': '\u0684',
+  '\uFB74': '\u0684',
+  '\uFB75': '\u0684',
+  '\uFB76': '\u0683',
+  '\uFB77': '\u0683',
+  '\uFB78': '\u0683',
+  '\uFB79': '\u0683',
+  '\uFB7A': '\u0686',
+  '\uFB7B': '\u0686',
+  '\uFB7C': '\u0686',
+  '\uFB7D': '\u0686',
+  '\uFB7E': '\u0687',
+  '\uFB7F': '\u0687',
+  '\uFB80': '\u0687',
+  '\uFB81': '\u0687',
+  '\uFB82': '\u068D',
+  '\uFB83': '\u068D',
+  '\uFB84': '\u068C',
+  '\uFB85': '\u068C',
+  '\uFB86': '\u068E',
+  '\uFB87': '\u068E',
+  '\uFB88': '\u0688',
+  '\uFB89': '\u0688',
+  '\uFB8A': '\u0698',
+  '\uFB8B': '\u0698',
+  '\uFB8C': '\u0691',
+  '\uFB8D': '\u0691',
+  '\uFB8E': '\u06A9',
+  '\uFB8F': '\u06A9',
+  '\uFB90': '\u06A9',
+  '\uFB91': '\u06A9',
+  '\uFB92': '\u06AF',
+  '\uFB93': '\u06AF',
+  '\uFB94': '\u06AF',
+  '\uFB95': '\u06AF',
+  '\uFB96': '\u06B3',
+  '\uFB97': '\u06B3',
+  '\uFB98': '\u06B3',
+  '\uFB99': '\u06B3',
+  '\uFB9A': '\u06B1',
+  '\uFB9B': '\u06B1',
+  '\uFB9C': '\u06B1',
+  '\uFB9D': '\u06B1',
+  '\uFB9E': '\u06BA',
+  '\uFB9F': '\u06BA',
+  '\uFBA0': '\u06BB',
+  '\uFBA1': '\u06BB',
+  '\uFBA2': '\u06BB',
+  '\uFBA3': '\u06BB',
+  '\uFBA4': '\u06C0',
+  '\uFBA5': '\u06C0',
+  '\uFBA6': '\u06C1',
+  '\uFBA7': '\u06C1',
+  '\uFBA8': '\u06C1',
+  '\uFBA9': '\u06C1',
+  '\uFBAA': '\u06BE',
+  '\uFBAB': '\u06BE',
+  '\uFBAC': '\u06BE',
+  '\uFBAD': '\u06BE',
+  '\uFBAE': '\u06D2',
+  '\uFBAF': '\u06D2',
+  '\uFBB0': '\u06D3',
+  '\uFBB1': '\u06D3',
+  '\uFBD3': '\u06AD',
+  '\uFBD4': '\u06AD',
+  '\uFBD5': '\u06AD',
+  '\uFBD6': '\u06AD',
+  '\uFBD7': '\u06C7',
+  '\uFBD8': '\u06C7',
+  '\uFBD9': '\u06C6',
+  '\uFBDA': '\u06C6',
+  '\uFBDB': '\u06C8',
+  '\uFBDC': '\u06C8',
+  '\uFBDD': '\u0677',
+  '\uFBDE': '\u06CB',
+  '\uFBDF': '\u06CB',
+  '\uFBE0': '\u06C5',
+  '\uFBE1': '\u06C5',
+  '\uFBE2': '\u06C9',
+  '\uFBE3': '\u06C9',
+  '\uFBE4': '\u06D0',
+  '\uFBE5': '\u06D0',
+  '\uFBE6': '\u06D0',
+  '\uFBE7': '\u06D0',
+  '\uFBE8': '\u0649',
+  '\uFBE9': '\u0649',
+  '\uFBEA': '\u0626\u0627',
+  '\uFBEB': '\u0626\u0627',
+  '\uFBEC': '\u0626\u06D5',
+  '\uFBED': '\u0626\u06D5',
+  '\uFBEE': '\u0626\u0648',
+  '\uFBEF': '\u0626\u0648',
+  '\uFBF0': '\u0626\u06C7',
+  '\uFBF1': '\u0626\u06C7',
+  '\uFBF2': '\u0626\u06C6',
+  '\uFBF3': '\u0626\u06C6',
+  '\uFBF4': '\u0626\u06C8',
+  '\uFBF5': '\u0626\u06C8',
+  '\uFBF6': '\u0626\u06D0',
+  '\uFBF7': '\u0626\u06D0',
+  '\uFBF8': '\u0626\u06D0',
+  '\uFBF9': '\u0626\u0649',
+  '\uFBFA': '\u0626\u0649',
+  '\uFBFB': '\u0626\u0649',
+  '\uFBFC': '\u06CC',
+  '\uFBFD': '\u06CC',
+  '\uFBFE': '\u06CC',
+  '\uFBFF': '\u06CC',
+  '\uFC00': '\u0626\u062C',
+  '\uFC01': '\u0626\u062D',
+  '\uFC02': '\u0626\u0645',
+  '\uFC03': '\u0626\u0649',
+  '\uFC04': '\u0626\u064A',
+  '\uFC05': '\u0628\u062C',
+  '\uFC06': '\u0628\u062D',
+  '\uFC07': '\u0628\u062E',
+  '\uFC08': '\u0628\u0645',
+  '\uFC09': '\u0628\u0649',
+  '\uFC0A': '\u0628\u064A',
+  '\uFC0B': '\u062A\u062C',
+  '\uFC0C': '\u062A\u062D',
+  '\uFC0D': '\u062A\u062E',
+  '\uFC0E': '\u062A\u0645',
+  '\uFC0F': '\u062A\u0649',
+  '\uFC10': '\u062A\u064A',
+  '\uFC11': '\u062B\u062C',
+  '\uFC12': '\u062B\u0645',
+  '\uFC13': '\u062B\u0649',
+  '\uFC14': '\u062B\u064A',
+  '\uFC15': '\u062C\u062D',
+  '\uFC16': '\u062C\u0645',
+  '\uFC17': '\u062D\u062C',
+  '\uFC18': '\u062D\u0645',
+  '\uFC19': '\u062E\u062C',
+  '\uFC1A': '\u062E\u062D',
+  '\uFC1B': '\u062E\u0645',
+  '\uFC1C': '\u0633\u062C',
+  '\uFC1D': '\u0633\u062D',
+  '\uFC1E': '\u0633\u062E',
+  '\uFC1F': '\u0633\u0645',
+  '\uFC20': '\u0635\u062D',
+  '\uFC21': '\u0635\u0645',
+  '\uFC22': '\u0636\u062C',
+  '\uFC23': '\u0636\u062D',
+  '\uFC24': '\u0636\u062E',
+  '\uFC25': '\u0636\u0645',
+  '\uFC26': '\u0637\u062D',
+  '\uFC27': '\u0637\u0645',
+  '\uFC28': '\u0638\u0645',
+  '\uFC29': '\u0639\u062C',
+  '\uFC2A': '\u0639\u0645',
+  '\uFC2B': '\u063A\u062C',
+  '\uFC2C': '\u063A\u0645',
+  '\uFC2D': '\u0641\u062C',
+  '\uFC2E': '\u0641\u062D',
+  '\uFC2F': '\u0641\u062E',
+  '\uFC30': '\u0641\u0645',
+  '\uFC31': '\u0641\u0649',
+  '\uFC32': '\u0641\u064A',
+  '\uFC33': '\u0642\u062D',
+  '\uFC34': '\u0642\u0645',
+  '\uFC35': '\u0642\u0649',
+  '\uFC36': '\u0642\u064A',
+  '\uFC37': '\u0643\u0627',
+  '\uFC38': '\u0643\u062C',
+  '\uFC39': '\u0643\u062D',
+  '\uFC3A': '\u0643\u062E',
+  '\uFC3B': '\u0643\u0644',
+  '\uFC3C': '\u0643\u0645',
+  '\uFC3D': '\u0643\u0649',
+  '\uFC3E': '\u0643\u064A',
+  '\uFC3F': '\u0644\u062C',
+  '\uFC40': '\u0644\u062D',
+  '\uFC41': '\u0644\u062E',
+  '\uFC42': '\u0644\u0645',
+  '\uFC43': '\u0644\u0649',
+  '\uFC44': '\u0644\u064A',
+  '\uFC45': '\u0645\u062C',
+  '\uFC46': '\u0645\u062D',
+  '\uFC47': '\u0645\u062E',
+  '\uFC48': '\u0645\u0645',
+  '\uFC49': '\u0645\u0649',
+  '\uFC4A': '\u0645\u064A',
+  '\uFC4B': '\u0646\u062C',
+  '\uFC4C': '\u0646\u062D',
+  '\uFC4D': '\u0646\u062E',
+  '\uFC4E': '\u0646\u0645',
+  '\uFC4F': '\u0646\u0649',
+  '\uFC50': '\u0646\u064A',
+  '\uFC51': '\u0647\u062C',
+  '\uFC52': '\u0647\u0645',
+  '\uFC53': '\u0647\u0649',
+  '\uFC54': '\u0647\u064A',
+  '\uFC55': '\u064A\u062C',
+  '\uFC56': '\u064A\u062D',
+  '\uFC57': '\u064A\u062E',
+  '\uFC58': '\u064A\u0645',
+  '\uFC59': '\u064A\u0649',
+  '\uFC5A': '\u064A\u064A',
+  '\uFC5B': '\u0630\u0670',
+  '\uFC5C': '\u0631\u0670',
+  '\uFC5D': '\u0649\u0670',
+  '\uFC5E': '\u0020\u064C\u0651',
+  '\uFC5F': '\u0020\u064D\u0651',
+  '\uFC60': '\u0020\u064E\u0651',
+  '\uFC61': '\u0020\u064F\u0651',
+  '\uFC62': '\u0020\u0650\u0651',
+  '\uFC63': '\u0020\u0651\u0670',
+  '\uFC64': '\u0626\u0631',
+  '\uFC65': '\u0626\u0632',
+  '\uFC66': '\u0626\u0645',
+  '\uFC67': '\u0626\u0646',
+  '\uFC68': '\u0626\u0649',
+  '\uFC69': '\u0626\u064A',
+  '\uFC6A': '\u0628\u0631',
+  '\uFC6B': '\u0628\u0632',
+  '\uFC6C': '\u0628\u0645',
+  '\uFC6D': '\u0628\u0646',
+  '\uFC6E': '\u0628\u0649',
+  '\uFC6F': '\u0628\u064A',
+  '\uFC70': '\u062A\u0631',
+  '\uFC71': '\u062A\u0632',
+  '\uFC72': '\u062A\u0645',
+  '\uFC73': '\u062A\u0646',
+  '\uFC74': '\u062A\u0649',
+  '\uFC75': '\u062A\u064A',
+  '\uFC76': '\u062B\u0631',
+  '\uFC77': '\u062B\u0632',
+  '\uFC78': '\u062B\u0645',
+  '\uFC79': '\u062B\u0646',
+  '\uFC7A': '\u062B\u0649',
+  '\uFC7B': '\u062B\u064A',
+  '\uFC7C': '\u0641\u0649',
+  '\uFC7D': '\u0641\u064A',
+  '\uFC7E': '\u0642\u0649',
+  '\uFC7F': '\u0642\u064A',
+  '\uFC80': '\u0643\u0627',
+  '\uFC81': '\u0643\u0644',
+  '\uFC82': '\u0643\u0645',
+  '\uFC83': '\u0643\u0649',
+  '\uFC84': '\u0643\u064A',
+  '\uFC85': '\u0644\u0645',
+  '\uFC86': '\u0644\u0649',
+  '\uFC87': '\u0644\u064A',
+  '\uFC88': '\u0645\u0627',
+  '\uFC89': '\u0645\u0645',
+  '\uFC8A': '\u0646\u0631',
+  '\uFC8B': '\u0646\u0632',
+  '\uFC8C': '\u0646\u0645',
+  '\uFC8D': '\u0646\u0646',
+  '\uFC8E': '\u0646\u0649',
+  '\uFC8F': '\u0646\u064A',
+  '\uFC90': '\u0649\u0670',
+  '\uFC91': '\u064A\u0631',
+  '\uFC92': '\u064A\u0632',
+  '\uFC93': '\u064A\u0645',
+  '\uFC94': '\u064A\u0646',
+  '\uFC95': '\u064A\u0649',
+  '\uFC96': '\u064A\u064A',
+  '\uFC97': '\u0626\u062C',
+  '\uFC98': '\u0626\u062D',
+  '\uFC99': '\u0626\u062E',
+  '\uFC9A': '\u0626\u0645',
+  '\uFC9B': '\u0626\u0647',
+  '\uFC9C': '\u0628\u062C',
+  '\uFC9D': '\u0628\u062D',
+  '\uFC9E': '\u0628\u062E',
+  '\uFC9F': '\u0628\u0645',
+  '\uFCA0': '\u0628\u0647',
+  '\uFCA1': '\u062A\u062C',
+  '\uFCA2': '\u062A\u062D',
+  '\uFCA3': '\u062A\u062E',
+  '\uFCA4': '\u062A\u0645',
+  '\uFCA5': '\u062A\u0647',
+  '\uFCA6': '\u062B\u0645',
+  '\uFCA7': '\u062C\u062D',
+  '\uFCA8': '\u062C\u0645',
+  '\uFCA9': '\u062D\u062C',
+  '\uFCAA': '\u062D\u0645',
+  '\uFCAB': '\u062E\u062C',
+  '\uFCAC': '\u062E\u0645',
+  '\uFCAD': '\u0633\u062C',
+  '\uFCAE': '\u0633\u062D',
+  '\uFCAF': '\u0633\u062E',
+  '\uFCB0': '\u0633\u0645',
+  '\uFCB1': '\u0635\u062D',
+  '\uFCB2': '\u0635\u062E',
+  '\uFCB3': '\u0635\u0645',
+  '\uFCB4': '\u0636\u062C',
+  '\uFCB5': '\u0636\u062D',
+  '\uFCB6': '\u0636\u062E',
+  '\uFCB7': '\u0636\u0645',
+  '\uFCB8': '\u0637\u062D',
+  '\uFCB9': '\u0638\u0645',
+  '\uFCBA': '\u0639\u062C',
+  '\uFCBB': '\u0639\u0645',
+  '\uFCBC': '\u063A\u062C',
+  '\uFCBD': '\u063A\u0645',
+  '\uFCBE': '\u0641\u062C',
+  '\uFCBF': '\u0641\u062D',
+  '\uFCC0': '\u0641\u062E',
+  '\uFCC1': '\u0641\u0645',
+  '\uFCC2': '\u0642\u062D',
+  '\uFCC3': '\u0642\u0645',
+  '\uFCC4': '\u0643\u062C',
+  '\uFCC5': '\u0643\u062D',
+  '\uFCC6': '\u0643\u062E',
+  '\uFCC7': '\u0643\u0644',
+  '\uFCC8': '\u0643\u0645',
+  '\uFCC9': '\u0644\u062C',
+  '\uFCCA': '\u0644\u062D',
+  '\uFCCB': '\u0644\u062E',
+  '\uFCCC': '\u0644\u0645',
+  '\uFCCD': '\u0644\u0647',
+  '\uFCCE': '\u0645\u062C',
+  '\uFCCF': '\u0645\u062D',
+  '\uFCD0': '\u0645\u062E',
+  '\uFCD1': '\u0645\u0645',
+  '\uFCD2': '\u0646\u062C',
+  '\uFCD3': '\u0646\u062D',
+  '\uFCD4': '\u0646\u062E',
+  '\uFCD5': '\u0646\u0645',
+  '\uFCD6': '\u0646\u0647',
+  '\uFCD7': '\u0647\u062C',
+  '\uFCD8': '\u0647\u0645',
+  '\uFCD9': '\u0647\u0670',
+  '\uFCDA': '\u064A\u062C',
+  '\uFCDB': '\u064A\u062D',
+  '\uFCDC': '\u064A\u062E',
+  '\uFCDD': '\u064A\u0645',
+  '\uFCDE': '\u064A\u0647',
+  '\uFCDF': '\u0626\u0645',
+  '\uFCE0': '\u0626\u0647',
+  '\uFCE1': '\u0628\u0645',
+  '\uFCE2': '\u0628\u0647',
+  '\uFCE3': '\u062A\u0645',
+  '\uFCE4': '\u062A\u0647',
+  '\uFCE5': '\u062B\u0645',
+  '\uFCE6': '\u062B\u0647',
+  '\uFCE7': '\u0633\u0645',
+  '\uFCE8': '\u0633\u0647',
+  '\uFCE9': '\u0634\u0645',
+  '\uFCEA': '\u0634\u0647',
+  '\uFCEB': '\u0643\u0644',
+  '\uFCEC': '\u0643\u0645',
+  '\uFCED': '\u0644\u0645',
+  '\uFCEE': '\u0646\u0645',
+  '\uFCEF': '\u0646\u0647',
+  '\uFCF0': '\u064A\u0645',
+  '\uFCF1': '\u064A\u0647',
+  '\uFCF2': '\u0640\u064E\u0651',
+  '\uFCF3': '\u0640\u064F\u0651',
+  '\uFCF4': '\u0640\u0650\u0651',
+  '\uFCF5': '\u0637\u0649',
+  '\uFCF6': '\u0637\u064A',
+  '\uFCF7': '\u0639\u0649',
+  '\uFCF8': '\u0639\u064A',
+  '\uFCF9': '\u063A\u0649',
+  '\uFCFA': '\u063A\u064A',
+  '\uFCFB': '\u0633\u0649',
+  '\uFCFC': '\u0633\u064A',
+  '\uFCFD': '\u0634\u0649',
+  '\uFCFE': '\u0634\u064A',
+  '\uFCFF': '\u062D\u0649',
+  '\uFD00': '\u062D\u064A',
+  '\uFD01': '\u062C\u0649',
+  '\uFD02': '\u062C\u064A',
+  '\uFD03': '\u062E\u0649',
+  '\uFD04': '\u062E\u064A',
+  '\uFD05': '\u0635\u0649',
+  '\uFD06': '\u0635\u064A',
+  '\uFD07': '\u0636\u0649',
+  '\uFD08': '\u0636\u064A',
+  '\uFD09': '\u0634\u062C',
+  '\uFD0A': '\u0634\u062D',
+  '\uFD0B': '\u0634\u062E',
+  '\uFD0C': '\u0634\u0645',
+  '\uFD0D': '\u0634\u0631',
+  '\uFD0E': '\u0633\u0631',
+  '\uFD0F': '\u0635\u0631',
+  '\uFD10': '\u0636\u0631',
+  '\uFD11': '\u0637\u0649',
+  '\uFD12': '\u0637\u064A',
+  '\uFD13': '\u0639\u0649',
+  '\uFD14': '\u0639\u064A',
+  '\uFD15': '\u063A\u0649',
+  '\uFD16': '\u063A\u064A',
+  '\uFD17': '\u0633\u0649',
+  '\uFD18': '\u0633\u064A',
+  '\uFD19': '\u0634\u0649',
+  '\uFD1A': '\u0634\u064A',
+  '\uFD1B': '\u062D\u0649',
+  '\uFD1C': '\u062D\u064A',
+  '\uFD1D': '\u062C\u0649',
+  '\uFD1E': '\u062C\u064A',
+  '\uFD1F': '\u062E\u0649',
+  '\uFD20': '\u062E\u064A',
+  '\uFD21': '\u0635\u0649',
+  '\uFD22': '\u0635\u064A',
+  '\uFD23': '\u0636\u0649',
+  '\uFD24': '\u0636\u064A',
+  '\uFD25': '\u0634\u062C',
+  '\uFD26': '\u0634\u062D',
+  '\uFD27': '\u0634\u062E',
+  '\uFD28': '\u0634\u0645',
+  '\uFD29': '\u0634\u0631',
+  '\uFD2A': '\u0633\u0631',
+  '\uFD2B': '\u0635\u0631',
+  '\uFD2C': '\u0636\u0631',
+  '\uFD2D': '\u0634\u062C',
+  '\uFD2E': '\u0634\u062D',
+  '\uFD2F': '\u0634\u062E',
+  '\uFD30': '\u0634\u0645',
+  '\uFD31': '\u0633\u0647',
+  '\uFD32': '\u0634\u0647',
+  '\uFD33': '\u0637\u0645',
+  '\uFD34': '\u0633\u062C',
+  '\uFD35': '\u0633\u062D',
+  '\uFD36': '\u0633\u062E',
+  '\uFD37': '\u0634\u062C',
+  '\uFD38': '\u0634\u062D',
+  '\uFD39': '\u0634\u062E',
+  '\uFD3A': '\u0637\u0645',
+  '\uFD3B': '\u0638\u0645',
+  '\uFD3C': '\u0627\u064B',
+  '\uFD3D': '\u0627\u064B',
+  '\uFD50': '\u062A\u062C\u0645',
+  '\uFD51': '\u062A\u062D\u062C',
+  '\uFD52': '\u062A\u062D\u062C',
+  '\uFD53': '\u062A\u062D\u0645',
+  '\uFD54': '\u062A\u062E\u0645',
+  '\uFD55': '\u062A\u0645\u062C',
+  '\uFD56': '\u062A\u0645\u062D',
+  '\uFD57': '\u062A\u0645\u062E',
+  '\uFD58': '\u062C\u0645\u062D',
+  '\uFD59': '\u062C\u0645\u062D',
+  '\uFD5A': '\u062D\u0645\u064A',
+  '\uFD5B': '\u062D\u0645\u0649',
+  '\uFD5C': '\u0633\u062D\u062C',
+  '\uFD5D': '\u0633\u062C\u062D',
+  '\uFD5E': '\u0633\u062C\u0649',
+  '\uFD5F': '\u0633\u0645\u062D',
+  '\uFD60': '\u0633\u0645\u062D',
+  '\uFD61': '\u0633\u0645\u062C',
+  '\uFD62': '\u0633\u0645\u0645',
+  '\uFD63': '\u0633\u0645\u0645',
+  '\uFD64': '\u0635\u062D\u062D',
+  '\uFD65': '\u0635\u062D\u062D',
+  '\uFD66': '\u0635\u0645\u0645',
+  '\uFD67': '\u0634\u062D\u0645',
+  '\uFD68': '\u0634\u062D\u0645',
+  '\uFD69': '\u0634\u062C\u064A',
+  '\uFD6A': '\u0634\u0645\u062E',
+  '\uFD6B': '\u0634\u0645\u062E',
+  '\uFD6C': '\u0634\u0645\u0645',
+  '\uFD6D': '\u0634\u0645\u0645',
+  '\uFD6E': '\u0636\u062D\u0649',
+  '\uFD6F': '\u0636\u062E\u0645',
+  '\uFD70': '\u0636\u062E\u0645',
+  '\uFD71': '\u0637\u0645\u062D',
+  '\uFD72': '\u0637\u0645\u062D',
+  '\uFD73': '\u0637\u0645\u0645',
+  '\uFD74': '\u0637\u0645\u064A',
+  '\uFD75': '\u0639\u062C\u0645',
+  '\uFD76': '\u0639\u0645\u0645',
+  '\uFD77': '\u0639\u0645\u0645',
+  '\uFD78': '\u0639\u0645\u0649',
+  '\uFD79': '\u063A\u0645\u0645',
+  '\uFD7A': '\u063A\u0645\u064A',
+  '\uFD7B': '\u063A\u0645\u0649',
+  '\uFD7C': '\u0641\u062E\u0645',
+  '\uFD7D': '\u0641\u062E\u0645',
+  '\uFD7E': '\u0642\u0645\u062D',
+  '\uFD7F': '\u0642\u0645\u0645',
+  '\uFD80': '\u0644\u062D\u0645',
+  '\uFD81': '\u0644\u062D\u064A',
+  '\uFD82': '\u0644\u062D\u0649',
+  '\uFD83': '\u0644\u062C\u062C',
+  '\uFD84': '\u0644\u062C\u062C',
+  '\uFD85': '\u0644\u062E\u0645',
+  '\uFD86': '\u0644\u062E\u0645',
+  '\uFD87': '\u0644\u0645\u062D',
+  '\uFD88': '\u0644\u0645\u062D',
+  '\uFD89': '\u0645\u062D\u062C',
+  '\uFD8A': '\u0645\u062D\u0645',
+  '\uFD8B': '\u0645\u062D\u064A',
+  '\uFD8C': '\u0645\u062C\u062D',
+  '\uFD8D': '\u0645\u062C\u0645',
+  '\uFD8E': '\u0645\u062E\u062C',
+  '\uFD8F': '\u0645\u062E\u0645',
+  '\uFD92': '\u0645\u062C\u062E',
+  '\uFD93': '\u0647\u0645\u062C',
+  '\uFD94': '\u0647\u0645\u0645',
+  '\uFD95': '\u0646\u062D\u0645',
+  '\uFD96': '\u0646\u062D\u0649',
+  '\uFD97': '\u0646\u062C\u0645',
+  '\uFD98': '\u0646\u062C\u0645',
+  '\uFD99': '\u0646\u062C\u0649',
+  '\uFD9A': '\u0646\u0645\u064A',
+  '\uFD9B': '\u0646\u0645\u0649',
+  '\uFD9C': '\u064A\u0645\u0645',
+  '\uFD9D': '\u064A\u0645\u0645',
+  '\uFD9E': '\u0628\u062E\u064A',
+  '\uFD9F': '\u062A\u062C\u064A',
+  '\uFDA0': '\u062A\u062C\u0649',
+  '\uFDA1': '\u062A\u062E\u064A',
+  '\uFDA2': '\u062A\u062E\u0649',
+  '\uFDA3': '\u062A\u0645\u064A',
+  '\uFDA4': '\u062A\u0645\u0649',
+  '\uFDA5': '\u062C\u0645\u064A',
+  '\uFDA6': '\u062C\u062D\u0649',
+  '\uFDA7': '\u062C\u0645\u0649',
+  '\uFDA8': '\u0633\u062E\u0649',
+  '\uFDA9': '\u0635\u062D\u064A',
+  '\uFDAA': '\u0634\u062D\u064A',
+  '\uFDAB': '\u0636\u062D\u064A',
+  '\uFDAC': '\u0644\u062C\u064A',
+  '\uFDAD': '\u0644\u0645\u064A',
+  '\uFDAE': '\u064A\u062D\u064A',
+  '\uFDAF': '\u064A\u062C\u064A',
+  '\uFDB0': '\u064A\u0645\u064A',
+  '\uFDB1': '\u0645\u0645\u064A',
+  '\uFDB2': '\u0642\u0645\u064A',
+  '\uFDB3': '\u0646\u062D\u064A',
+  '\uFDB4': '\u0642\u0645\u062D',
+  '\uFDB5': '\u0644\u062D\u0645',
+  '\uFDB6': '\u0639\u0645\u064A',
+  '\uFDB7': '\u0643\u0645\u064A',
+  '\uFDB8': '\u0646\u062C\u062D',
+  '\uFDB9': '\u0645\u062E\u064A',
+  '\uFDBA': '\u0644\u062C\u0645',
+  '\uFDBB': '\u0643\u0645\u0645',
+  '\uFDBC': '\u0644\u062C\u0645',
+  '\uFDBD': '\u0646\u062C\u062D',
+  '\uFDBE': '\u062C\u062D\u064A',
+  '\uFDBF': '\u062D\u062C\u064A',
+  '\uFDC0': '\u0645\u062C\u064A',
+  '\uFDC1': '\u0641\u0645\u064A',
+  '\uFDC2': '\u0628\u062D\u064A',
+  '\uFDC3': '\u0643\u0645\u0645',
+  '\uFDC4': '\u0639\u062C\u0645',
+  '\uFDC5': '\u0635\u0645\u0645',
+  '\uFDC6': '\u0633\u062E\u064A',
+  '\uFDC7': '\u0646\u062C\u064A',
+  '\uFE49': '\u203E',
+  '\uFE4A': '\u203E',
+  '\uFE4B': '\u203E',
+  '\uFE4C': '\u203E',
+  '\uFE4D': '\u005F',
+  '\uFE4E': '\u005F',
+  '\uFE4F': '\u005F',
+  '\uFE80': '\u0621',
+  '\uFE81': '\u0622',
+  '\uFE82': '\u0622',
+  '\uFE83': '\u0623',
+  '\uFE84': '\u0623',
+  '\uFE85': '\u0624',
+  '\uFE86': '\u0624',
+  '\uFE87': '\u0625',
+  '\uFE88': '\u0625',
+  '\uFE89': '\u0626',
+  '\uFE8A': '\u0626',
+  '\uFE8B': '\u0626',
+  '\uFE8C': '\u0626',
+  '\uFE8D': '\u0627',
+  '\uFE8E': '\u0627',
+  '\uFE8F': '\u0628',
+  '\uFE90': '\u0628',
+  '\uFE91': '\u0628',
+  '\uFE92': '\u0628',
+  '\uFE93': '\u0629',
+  '\uFE94': '\u0629',
+  '\uFE95': '\u062A',
+  '\uFE96': '\u062A',
+  '\uFE97': '\u062A',
+  '\uFE98': '\u062A',
+  '\uFE99': '\u062B',
+  '\uFE9A': '\u062B',
+  '\uFE9B': '\u062B',
+  '\uFE9C': '\u062B',
+  '\uFE9D': '\u062C',
+  '\uFE9E': '\u062C',
+  '\uFE9F': '\u062C',
+  '\uFEA0': '\u062C',
+  '\uFEA1': '\u062D',
+  '\uFEA2': '\u062D',
+  '\uFEA3': '\u062D',
+  '\uFEA4': '\u062D',
+  '\uFEA5': '\u062E',
+  '\uFEA6': '\u062E',
+  '\uFEA7': '\u062E',
+  '\uFEA8': '\u062E',
+  '\uFEA9': '\u062F',
+  '\uFEAA': '\u062F',
+  '\uFEAB': '\u0630',
+  '\uFEAC': '\u0630',
+  '\uFEAD': '\u0631',
+  '\uFEAE': '\u0631',
+  '\uFEAF': '\u0632',
+  '\uFEB0': '\u0632',
+  '\uFEB1': '\u0633',
+  '\uFEB2': '\u0633',
+  '\uFEB3': '\u0633',
+  '\uFEB4': '\u0633',
+  '\uFEB5': '\u0634',
+  '\uFEB6': '\u0634',
+  '\uFEB7': '\u0634',
+  '\uFEB8': '\u0634',
+  '\uFEB9': '\u0635',
+  '\uFEBA': '\u0635',
+  '\uFEBB': '\u0635',
+  '\uFEBC': '\u0635',
+  '\uFEBD': '\u0636',
+  '\uFEBE': '\u0636',
+  '\uFEBF': '\u0636',
+  '\uFEC0': '\u0636',
+  '\uFEC1': '\u0637',
+  '\uFEC2': '\u0637',
+  '\uFEC3': '\u0637',
+  '\uFEC4': '\u0637',
+  '\uFEC5': '\u0638',
+  '\uFEC6': '\u0638',
+  '\uFEC7': '\u0638',
+  '\uFEC8': '\u0638',
+  '\uFEC9': '\u0639',
+  '\uFECA': '\u0639',
+  '\uFECB': '\u0639',
+  '\uFECC': '\u0639',
+  '\uFECD': '\u063A',
+  '\uFECE': '\u063A',
+  '\uFECF': '\u063A',
+  '\uFED0': '\u063A',
+  '\uFED1': '\u0641',
+  '\uFED2': '\u0641',
+  '\uFED3': '\u0641',
+  '\uFED4': '\u0641',
+  '\uFED5': '\u0642',
+  '\uFED6': '\u0642',
+  '\uFED7': '\u0642',
+  '\uFED8': '\u0642',
+  '\uFED9': '\u0643',
+  '\uFEDA': '\u0643',
+  '\uFEDB': '\u0643',
+  '\uFEDC': '\u0643',
+  '\uFEDD': '\u0644',
+  '\uFEDE': '\u0644',
+  '\uFEDF': '\u0644',
+  '\uFEE0': '\u0644',
+  '\uFEE1': '\u0645',
+  '\uFEE2': '\u0645',
+  '\uFEE3': '\u0645',
+  '\uFEE4': '\u0645',
+  '\uFEE5': '\u0646',
+  '\uFEE6': '\u0646',
+  '\uFEE7': '\u0646',
+  '\uFEE8': '\u0646',
+  '\uFEE9': '\u0647',
+  '\uFEEA': '\u0647',
+  '\uFEEB': '\u0647',
+  '\uFEEC': '\u0647',
+  '\uFEED': '\u0648',
+  '\uFEEE': '\u0648',
+  '\uFEEF': '\u0649',
+  '\uFEF0': '\u0649',
+  '\uFEF1': '\u064A',
+  '\uFEF2': '\u064A',
+  '\uFEF3': '\u064A',
+  '\uFEF4': '\u064A',
+  '\uFEF5': '\u0644\u0622',
+  '\uFEF6': '\u0644\u0622',
+  '\uFEF7': '\u0644\u0623',
+  '\uFEF8': '\u0644\u0623',
+  '\uFEF9': '\u0644\u0625',
+  '\uFEFA': '\u0644\u0625',
+  '\uFEFB': '\u0644\u0627',
+  '\uFEFC': '\u0644\u0627'
+};
+
+function reverseIfRtl(chars) {
+  var charsLength = chars.length;
+  //reverse an arabic ligature
+  if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) {
+    return chars;
+  }
+  var s = '';
+  for (var ii = charsLength - 1; ii >= 0; ii--) {
+    s += chars[ii];
+  }
+  return s;
+}
+
+function adjustWidths(properties) {
+  if (properties.fontMatrix[0] === FONT_IDENTITY_MATRIX[0]) {
+    return;
+  }
+  // adjusting width to fontMatrix scale
+  var scale = 0.001 / properties.fontMatrix[0];
+  var glyphsWidths = properties.widths;
+  for (var glyph in glyphsWidths) {
+    glyphsWidths[glyph] *= scale;
+  }
+  properties.defaultWidth *= scale;
+}
+
+function getFontType(type, subtype) {
+  switch (type) {
+    case 'Type1':
+      return subtype === 'Type1C' ? FontType.TYPE1C : FontType.TYPE1;
+    case 'CIDFontType0':
+      return subtype === 'CIDFontType0C' ? FontType.CIDFONTTYPE0C :
+        FontType.CIDFONTTYPE0;
+    case 'OpenType':
+      return FontType.OPENTYPE;
+    case 'TrueType':
+      return FontType.TRUETYPE;
+    case 'CIDFontType2':
+      return FontType.CIDFONTTYPE2;
+    case 'MMType1':
+      return FontType.MMTYPE1;
+    case 'Type0':
+      return FontType.TYPE0;
+    default:
+      return FontType.UNKNOWN;
+  }
+}
+
+var Glyph = (function GlyphClosure() {
+  function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId) {
+    this.fontChar = fontChar;
+    this.unicode = unicode;
+    this.accent = accent;
+    this.width = width;
+    this.vmetric = vmetric;
+    this.operatorListId = operatorListId;
+  }
+
+  Glyph.prototype.matchesForCache =
+      function(fontChar, unicode, accent, width, vmetric, operatorListId) {
+    return this.fontChar === fontChar &&
+           this.unicode === unicode &&
+           this.accent === accent &&
+           this.width === width &&
+           this.vmetric === vmetric &&
+           this.operatorListId === operatorListId;
+  };
+
+  return Glyph;
+})();
+
+var ToUnicodeMap = (function ToUnicodeMapClosure() {
+  function ToUnicodeMap(cmap) {
+    // The elements of this._map can be integers or strings, depending on how
+    // |cmap| was created.
+    this._map = cmap;
+  }
+
+  ToUnicodeMap.prototype = {
+    get length() {
+      return this._map.length;
+    },
+
+    forEach: function(callback) {
+      for (var charCode in this._map) {
+        callback(charCode, this._map[charCode].charCodeAt(0));
+      }
+    },
+
+    has: function(i) {
+      return this._map[i] !== undefined;
+    },
+
+    get: function(i) {
+      return this._map[i];
+    },
+
+    charCodeOf: function(v) {
+      return this._map.indexOf(v);
+    }
+  };
+
+  return ToUnicodeMap;
+})();
+
+var IdentityToUnicodeMap = (function IdentityToUnicodeMapClosure() {
+  function IdentityToUnicodeMap(firstChar, lastChar) {
+    this.firstChar = firstChar;
+    this.lastChar = lastChar;
+  }
+
+  IdentityToUnicodeMap.prototype = {
+    get length() {
+      return (this.lastChar + 1) - this.firstChar;
+    },
+
+    forEach: function (callback) {
+      for (var i = this.firstChar, ii = this.lastChar; i <= ii; i++) {
+        callback(i, i);
+      }
+    },
+
+    has: function (i) {
+      return this.firstChar <= i && i <= this.lastChar;
+    },
+
+    get: function (i) {
+      if (this.firstChar <= i && i <= this.lastChar) {
+        return String.fromCharCode(i);
+      }
+      return undefined;
+    },
+
+    charCodeOf: function (v) {
+      error('should not call .charCodeOf');
+    }
+  };
+
+  return IdentityToUnicodeMap;
+})();
+
+var OpenTypeFileBuilder = (function OpenTypeFileBuilderClosure() {
+  function writeInt16(dest, offset, num) {
+    dest[offset] = (num >> 8) & 0xFF;
+    dest[offset + 1] = num & 0xFF;
+  }
+
+  function writeInt32(dest, offset, num) {
+    dest[offset] = (num >> 24) & 0xFF;
+    dest[offset + 1] = (num >> 16) & 0xFF;
+    dest[offset + 2] = (num >> 8) & 0xFF;
+    dest[offset + 3] = num & 0xFF;
+  }
+
+  function writeData(dest, offset, data) {
+    var i, ii;
+    if (data instanceof Uint8Array) {
+      dest.set(data, offset);
+    } else if (typeof data === 'string') {
+      for (i = 0, ii = data.length; i < ii; i++) {
+        dest[offset++] = data.charCodeAt(i) & 0xFF;
+      }
+    } else {
+      // treating everything else as array
+      for (i = 0, ii = data.length; i < ii; i++) {
+        dest[offset++] = data[i] & 0xFF;
+      }
+    }
+  }
+
+  function OpenTypeFileBuilder(sfnt) {
+    this.sfnt = sfnt;
+    this.tables = Object.create(null);
+  }
+
+  OpenTypeFileBuilder.getSearchParams =
+      function OpenTypeFileBuilder_getSearchParams(entriesCount, entrySize) {
+    var maxPower2 = 1, log2 = 0;
+    while ((maxPower2 ^ entriesCount) > maxPower2) {
+      maxPower2 <<= 1;
+      log2++;
+    }
+    var searchRange = maxPower2 * entrySize;
+    return {
+      range: searchRange,
+      entry: log2,
+      rangeShift: entrySize * entriesCount - searchRange
+    };
+  };
+
+  var OTF_HEADER_SIZE = 12;
+  var OTF_TABLE_ENTRY_SIZE = 16;
+
+  OpenTypeFileBuilder.prototype = {
+    toArray: function OpenTypeFileBuilder_toArray() {
+      var sfnt = this.sfnt;
+
+      // Tables needs to be written by ascendant alphabetic order
+      var tables = this.tables;
+      var tablesNames = Object.keys(tables);
+      tablesNames.sort();
+      var numTables = tablesNames.length;
+
+      var i, j, jj, table, tableName;
+      // layout the tables data
+      var offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE;
+      var tableOffsets = [offset];
+      for (i = 0; i < numTables; i++) {
+        table = tables[tablesNames[i]];
+        var paddedLength = ((table.length + 3) & ~3) >>> 0;
+        offset += paddedLength;
+        tableOffsets.push(offset);
+      }
+
+      var file = new Uint8Array(offset);
+      // write the table data first (mostly for checksum)
+      for (i = 0; i < numTables; i++) {
+        table = tables[tablesNames[i]];
+        writeData(file, tableOffsets[i], table);
+      }
+
+      // sfnt version (4 bytes)
+      if (sfnt === 'true') {
+        // Windows hates the Mac TrueType sfnt version number
+        sfnt = string32(0x00010000);
+      }
+      file[0] = sfnt.charCodeAt(0) & 0xFF;
+      file[1] = sfnt.charCodeAt(1) & 0xFF;
+      file[2] = sfnt.charCodeAt(2) & 0xFF;
+      file[3] = sfnt.charCodeAt(3) & 0xFF;
+
+      // numTables (2 bytes)
+      writeInt16(file, 4, numTables);
+
+      var searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16);
+
+      // searchRange (2 bytes)
+      writeInt16(file, 6, searchParams.range);
+      // entrySelector (2 bytes)
+      writeInt16(file, 8, searchParams.entry);
+      // rangeShift (2 bytes)
+      writeInt16(file, 10, searchParams.rangeShift);
+
+      offset = OTF_HEADER_SIZE;
+      // writing table entries
+      for (i = 0; i < numTables; i++) {
+        tableName = tablesNames[i];
+        file[offset] = tableName.charCodeAt(0) & 0xFF;
+        file[offset + 1] = tableName.charCodeAt(1) & 0xFF;
+        file[offset + 2] = tableName.charCodeAt(2) & 0xFF;
+        file[offset + 3] = tableName.charCodeAt(3) & 0xFF;
+
+        // checksum
+        var checksum = 0;
+        for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) {
+          var quad = (file[j] << 24) + (file[j + 1] << 16) +
+                     (file[j + 2] << 8) + file[j + 3];
+          checksum = (checksum + quad) | 0;
+        }
+        writeInt32(file, offset + 4, checksum);
+
+        // offset
+        writeInt32(file, offset + 8, tableOffsets[i]);
+        // length
+        writeInt32(file, offset + 12, tables[tableName].length);
+
+        offset += OTF_TABLE_ENTRY_SIZE;
+      }
+      return file;
+    },
+
+    addTable: function OpenTypeFileBuilder_addTable(tag, data) {
+      if (tag in this.tables) {
+        throw new Error('Table ' + tag + ' already exists');
+      }
+      this.tables[tag] = data;
+    }
+  };
+
+  return OpenTypeFileBuilder;
+})();
+
+/**
+ * 'Font' is the class the outside world should use, it encapsulate all the font
+ * decoding logics whatever type it is (assuming the font type is supported).
+ *
+ * For example to read a Type1 font and to attach it to the document:
+ *   var type1Font = new Font("MyFontName", binaryFile, propertiesObject);
+ *   type1Font.bind();
+ */
+var Font = (function FontClosure() {
+  function Font(name, file, properties) {
+    var charCode, glyphName, fontChar;
+
+    this.name = name;
+    this.loadedName = properties.loadedName;
+    this.isType3Font = properties.isType3Font;
+    this.sizes = [];
+
+    this.glyphCache = {};
+
+    var names = name.split('+');
+    names = names.length > 1 ? names[1] : names[0];
+    names = names.split(/[-,_]/g)[0];
+    this.isSerifFont = !!(properties.flags & FontFlags.Serif);
+    this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);
+    this.isMonospace = !!(properties.flags & FontFlags.FixedPitch);
+
+    var type = properties.type;
+    var subtype = properties.subtype;
+    this.type = type;
+
+    this.fallbackName = (this.isMonospace ? 'monospace' :
+                         (this.isSerifFont ? 'serif' : 'sans-serif'));
+
+    this.differences = properties.differences;
+    this.widths = properties.widths;
+    this.defaultWidth = properties.defaultWidth;
+    this.composite = properties.composite;
+    this.wideChars = properties.wideChars;
+    this.cMap = properties.cMap;
+    this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS;
+    this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS;
+    this.fontMatrix = properties.fontMatrix;
+    this.bbox = properties.bbox;
+
+    this.toUnicode = properties.toUnicode = this.buildToUnicode(properties);
+
+    this.toFontChar = [];
+
+    if (properties.type === 'Type3') {
+      for (charCode = 0; charCode < 256; charCode++) {
+        this.toFontChar[charCode] = (this.differences[charCode] ||
+                                     properties.defaultEncoding[charCode]);
+      }
+      this.fontType = FontType.TYPE3;
+      return;
+    }
+
+    this.cidEncoding = properties.cidEncoding;
+    this.vertical = properties.vertical;
+    if (this.vertical) {
+      this.vmetrics = properties.vmetrics;
+      this.defaultVMetrics = properties.defaultVMetrics;
+    }
+
+    if (!file || file.isEmpty) {
+      if (file) {
+        // Some bad PDF generators will include empty font files,
+        // attempting to recover by assuming that no file exists.
+        warn('Font file is empty in "' + name + '" (' + this.loadedName + ')');
+      }
+
+      this.missingFile = true;
+      // The file data is not specified. Trying to fix the font name
+      // to be used with the canvas.font.
+      var fontName = name.replace(/[,_]/g, '-');
+      var isStandardFont = !!stdFontMap[fontName] ||
+        !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]);
+      fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName;
+
+      this.bold = (fontName.search(/bold/gi) !== -1);
+      this.italic = ((fontName.search(/oblique/gi) !== -1) ||
+                     (fontName.search(/italic/gi) !== -1));
+
+      // Use 'name' instead of 'fontName' here because the original
+      // name ArialBlack for example will be replaced by Helvetica.
+      this.black = (name.search(/Black/g) !== -1);
+
+      // if at least one width is present, remeasure all chars when exists
+      this.remeasure = Object.keys(this.widths).length > 0;
+      if (isStandardFont && type === 'CIDFontType2' &&
+          properties.cidEncoding.indexOf('Identity-') === 0) {
+        // Standard fonts might be embedded as CID font without glyph mapping.
+        // Building one based on GlyphMapForStandardFonts.
+        var map = [];
+        for (var code in GlyphMapForStandardFonts) {
+          map[+code] = GlyphMapForStandardFonts[code];
+        }
+        var isIdentityUnicode = this.toUnicode instanceof IdentityToUnicodeMap;
+        if (!isIdentityUnicode) {
+          this.toUnicode.forEach(function(charCode, unicodeCharCode) {
+            map[+charCode] = unicodeCharCode;
+          });
+        }
+        this.toFontChar = map;
+        this.toUnicode = new ToUnicodeMap(map);
+      } else if (/Symbol/i.test(fontName)) {
+        var symbols = Encodings.SymbolSetEncoding;
+        for (charCode in symbols) {
+          fontChar = GlyphsUnicode[symbols[charCode]];
+          if (!fontChar) {
+            continue;
+          }
+          this.toFontChar[charCode] = fontChar;
+        }
+        for (charCode in properties.differences) {
+          fontChar = GlyphsUnicode[properties.differences[charCode]];
+          if (!fontChar) {
+            continue;
+          }
+          this.toFontChar[charCode] = fontChar;
+        }
+      } else if (/Dingbats/i.test(fontName)) {
+        if (/Wingdings/i.test(name)) {
+          warn('Wingdings font without embedded font file, ' +
+               'falling back to the ZapfDingbats encoding.');
+        }
+        var dingbats = Encodings.ZapfDingbatsEncoding;
+        for (charCode in dingbats) {
+          fontChar = DingbatsGlyphsUnicode[dingbats[charCode]];
+          if (!fontChar) {
+            continue;
+          }
+          this.toFontChar[charCode] = fontChar;
+        }
+        for (charCode in properties.differences) {
+          fontChar = DingbatsGlyphsUnicode[properties.differences[charCode]];
+          if (!fontChar) {
+            continue;
+          }
+          this.toFontChar[charCode] = fontChar;
+        }
+      } else if (isStandardFont) {
+        this.toFontChar = [];
+        for (charCode in properties.defaultEncoding) {
+          glyphName = (properties.differences[charCode] ||
+                       properties.defaultEncoding[charCode]);
+          this.toFontChar[charCode] = GlyphsUnicode[glyphName];
+        }
+      } else {
+        var unicodeCharCode, notCidFont = (type.indexOf('CIDFontType') === -1);
+        this.toUnicode.forEach(function(charCode, unicodeCharCode) {
+          if (notCidFont) {
+            glyphName = (properties.differences[charCode] ||
+                         properties.defaultEncoding[charCode]);
+            unicodeCharCode = (GlyphsUnicode[glyphName] || unicodeCharCode);
+          }
+          this.toFontChar[charCode] = unicodeCharCode;
+        }.bind(this));
+      }
+      this.loadedName = fontName.split('-')[0];
+      this.loading = false;
+      this.fontType = getFontType(type, subtype);
+      return;
+    }
+
+    // Some fonts might use wrong font types for Type1C or CIDFontType0C
+    if (subtype === 'Type1C' && (type !== 'Type1' && type !== 'MMType1')) {
+      // Some TrueType fonts by mistake claim Type1C
+      if (isTrueTypeFile(file)) {
+        subtype = 'TrueType';
+      } else {
+        type = 'Type1';
+      }
+    }
+    if (subtype === 'CIDFontType0C' && type !== 'CIDFontType0') {
+      type = 'CIDFontType0';
+    }
+    if (subtype === 'OpenType') {
+      type = 'OpenType';
+    }
+    // Some CIDFontType0C fonts by mistake claim CIDFontType0.
+    if (type === 'CIDFontType0') {
+      subtype = isType1File(file) ? 'CIDFontType0' : 'CIDFontType0C';
+    }
+
+    var data;
+    switch (type) {
+      case 'MMType1':
+        info('MMType1 font (' + name + '), falling back to Type1.');
+        /* falls through */
+      case 'Type1':
+      case 'CIDFontType0':
+        this.mimetype = 'font/opentype';
+
+        var cff = (subtype === 'Type1C' || subtype === 'CIDFontType0C') ?
+          new CFFFont(file, properties) : new Type1Font(name, file, properties);
+
+        adjustWidths(properties);
+
+        // Wrap the CFF data inside an OTF font file
+        data = this.convert(name, cff, properties);
+        break;
+
+      case 'OpenType':
+      case 'TrueType':
+      case 'CIDFontType2':
+        this.mimetype = 'font/opentype';
+
+        // Repair the TrueType file. It is can be damaged in the point of
+        // view of the sanitizer
+        data = this.checkAndRepair(name, file, properties);
+        if (this.isOpenType) {
+          type = 'OpenType';
+        }
+        break;
+
+      default:
+        error('Font ' + type + ' is not supported');
+        break;
+    }
+
+    this.data = data;
+    this.fontType = getFontType(type, subtype);
+
+    // Transfer some properties again that could change during font conversion
+    this.fontMatrix = properties.fontMatrix;
+    this.widths = properties.widths;
+    this.defaultWidth = properties.defaultWidth;
+    this.encoding = properties.baseEncoding;
+    this.seacMap = properties.seacMap;
+
+    this.loading = true;
+  }
+
+  Font.getFontID = (function () {
+    var ID = 1;
+    return function Font_getFontID() {
+      return String(ID++);
+    };
+  })();
+
+  function int16(b0, b1) {
+    return (b0 << 8) + b1;
+  }
+
+  function int32(b0, b1, b2, b3) {
+    return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
+  }
+
+  function string16(value) {
+    return String.fromCharCode((value >> 8) & 0xff, value & 0xff);
+  }
+
+  function safeString16(value) {
+    // clamp value to the 16-bit int range
+    value = (value > 0x7FFF ? 0x7FFF : (value < -0x8000 ? -0x8000 : value));
+    return String.fromCharCode((value >> 8) & 0xff, value & 0xff);
+  }
+
+  function isTrueTypeFile(file) {
+    var header = file.peekBytes(4);
+    return readUint32(header, 0) === 0x00010000;
+  }
+
+  function isType1File(file) {
+    var header = file.peekBytes(2);
+    // All Type1 font programs must begin with the comment '%!' (0x25 + 0x21).
+    if (header[0] === 0x25 && header[1] === 0x21) {
+      return true;
+    }
+    // ... obviously some fonts violate that part of the specification,
+    // please refer to the comment in |Type1Font| below.
+    if (header[0] === 0x80 && header[1] === 0x01) { // pfb file header.
+      return true;
+    }
+    return false;
+  }
+
+  /**
+   * Helper function for |adjustMapping|.
+   * @return {boolean}
+   */
+  function isProblematicUnicodeLocation(code) {
+    if (code <= 0x1F) { // Control chars
+      return true;
+    }
+    if (code >= 0x80 && code <= 0x9F) { // Control chars
+      return true;
+    }
+    if ((code >= 0x2000 && code <= 0x200F) || // General punctuation chars
+        (code >= 0x2028 && code <= 0x202F) ||
+        (code >= 0x2060 && code <= 0x206F)) {
+      return true;
+    }
+    if (code >= 0xFFF0 && code <= 0xFFFF) { // Specials Unicode block
+      return true;
+    }
+    switch (code) {
+      case 0x7F: // Control char
+      case 0xA0: // Non breaking space
+      case 0xAD: // Soft hyphen
+      case 0x0E33: // Thai character SARA AM
+      case 0x2011: // Non breaking hyphen
+      case 0x205F: // Medium mathematical space
+      case 0x25CC: // Dotted circle (combining mark)
+        return true;
+    }
+    return false;
+  }
+
+  /**
+   * Rebuilds the char code to glyph ID map by trying to replace the char codes
+   * with their unicode value. It also moves char codes that are in known
+   * problematic locations.
+   * @return {Object} Two properties:
+   * 'toFontChar' - maps original char codes(the value that will be read
+   * from commands such as show text) to the char codes that will be used in the
+   * font that we build
+   * 'charCodeToGlyphId' - maps the new font char codes to glyph ids
+   */
+  function adjustMapping(charCodeToGlyphId, properties) {
+    var toUnicode = properties.toUnicode;
+    var isSymbolic = !!(properties.flags & FontFlags.Symbolic);
+    var isIdentityUnicode =
+      properties.toUnicode instanceof IdentityToUnicodeMap;
+    var newMap = Object.create(null);
+    var toFontChar = [];
+    var usedFontCharCodes = [];
+    var nextAvailableFontCharCode = PRIVATE_USE_OFFSET_START;
+    for (var originalCharCode in charCodeToGlyphId) {
+      originalCharCode |= 0;
+      var glyphId = charCodeToGlyphId[originalCharCode];
+      var fontCharCode = originalCharCode;
+      // First try to map the value to a unicode position if a non identity map
+      // was created.
+      if (!isIdentityUnicode && toUnicode.has(originalCharCode)) {
+        var unicode = toUnicode.get(fontCharCode);
+        // TODO: Try to map ligatures to the correct spot.
+        if (unicode.length === 1) {
+          fontCharCode = unicode.charCodeAt(0);
+        }
+      }
+      // Try to move control characters, special characters and already mapped
+      // characters to the private use area since they will not be drawn by
+      // canvas if left in their current position. Also, move characters if the
+      // font was symbolic and there is only an identity unicode map since the
+      // characters probably aren't in the correct position (fixes an issue
+      // with firefox and thuluthfont).
+      if ((usedFontCharCodes[fontCharCode] !== undefined ||
+           isProblematicUnicodeLocation(fontCharCode) ||
+           (isSymbolic && isIdentityUnicode)) &&
+          nextAvailableFontCharCode <= PRIVATE_USE_OFFSET_END) { // Room left.
+        // Loop to try and find a free spot in the private use area.
+        do {
+          fontCharCode = nextAvailableFontCharCode++;
+
+          if (SKIP_PRIVATE_USE_RANGE_F000_TO_F01F && fontCharCode === 0xF000) {
+            fontCharCode = 0xF020;
+            nextAvailableFontCharCode = fontCharCode + 1;
+          }
+
+        } while (usedFontCharCodes[fontCharCode] !== undefined &&
+                 nextAvailableFontCharCode <= PRIVATE_USE_OFFSET_END);
+      }
+
+      newMap[fontCharCode] = glyphId;
+      toFontChar[originalCharCode] = fontCharCode;
+      usedFontCharCodes[fontCharCode] = true;
+    }
+    return {
+      toFontChar: toFontChar,
+      charCodeToGlyphId: newMap,
+      nextAvailableFontCharCode: nextAvailableFontCharCode
+    };
+  }
+
+  function getRanges(glyphs) {
+    // Array.sort() sorts by characters, not numerically, so convert to an
+    // array of characters.
+    var codes = [];
+    for (var charCode in glyphs) {
+      codes.push({ fontCharCode: charCode | 0, glyphId: glyphs[charCode] });
+    }
+    codes.sort(function fontGetRangesSort(a, b) {
+      return a.fontCharCode - b.fontCharCode;
+    });
+
+    // Split the sorted codes into ranges.
+    var ranges = [];
+    var length = codes.length;
+    for (var n = 0; n < length; ) {
+      var start = codes[n].fontCharCode;
+      var codeIndices = [codes[n].glyphId];
+      ++n;
+      var end = start;
+      while (n < length && end + 1 === codes[n].fontCharCode) {
+        codeIndices.push(codes[n].glyphId);
+        ++end;
+        ++n;
+        if (end === 0xFFFF) {
+          break;
+        }
+      }
+      ranges.push([start, end, codeIndices]);
+    }
+
+    return ranges;
+  }
+
+  function createCmapTable(glyphs) {
+    var ranges = getRanges(glyphs);
+    var numTables = ranges[ranges.length - 1][1] > 0xFFFF ? 2 : 1;
+    var cmap = '\x00\x00' + // version
+               string16(numTables) +  // numTables
+               '\x00\x03' + // platformID
+               '\x00\x01' + // encodingID
+               string32(4 + numTables * 8); // start of the table record
+
+    var i, ii, j, jj;
+    for (i = ranges.length - 1; i >= 0; --i) {
+      if (ranges[i][0] <= 0xFFFF) { break; }
+    }
+    var bmpLength = i + 1;
+
+    if (ranges[i][0] < 0xFFFF && ranges[i][1] === 0xFFFF) {
+      ranges[i][1] = 0xFFFE;
+    }
+    var trailingRangesCount = ranges[i][1] < 0xFFFF ? 1 : 0;
+    var segCount = bmpLength + trailingRangesCount;
+    var searchParams = OpenTypeFileBuilder.getSearchParams(segCount, 2);
+
+    // Fill up the 4 parallel arrays describing the segments.
+    var startCount = '';
+    var endCount = '';
+    var idDeltas = '';
+    var idRangeOffsets = '';
+    var glyphsIds = '';
+    var bias = 0;
+
+    var range, start, end, codes;
+    for (i = 0, ii = bmpLength; i < ii; i++) {
+      range = ranges[i];
+      start = range[0];
+      end = range[1];
+      startCount += string16(start);
+      endCount += string16(end);
+      codes = range[2];
+      var contiguous = true;
+      for (j = 1, jj = codes.length; j < jj; ++j) {
+        if (codes[j] !== codes[j - 1] + 1) {
+          contiguous = false;
+          break;
+        }
+      }
+      if (!contiguous) {
+        var offset = (segCount - i) * 2 + bias * 2;
+        bias += (end - start + 1);
+
+        idDeltas += string16(0);
+        idRangeOffsets += string16(offset);
+
+        for (j = 0, jj = codes.length; j < jj; ++j) {
+          glyphsIds += string16(codes[j]);
+        }
+      } else {
+        var startCode = codes[0];
+
+        idDeltas += string16((startCode - start) & 0xFFFF);
+        idRangeOffsets += string16(0);
+      }
+    }
+
+    if (trailingRangesCount > 0) {
+      endCount += '\xFF\xFF';
+      startCount += '\xFF\xFF';
+      idDeltas += '\x00\x01';
+      idRangeOffsets += '\x00\x00';
+    }
+
+    var format314 = '\x00\x00' + // language
+                    string16(2 * segCount) +
+                    string16(searchParams.range) +
+                    string16(searchParams.entry) +
+                    string16(searchParams.rangeShift) +
+                    endCount + '\x00\x00' + startCount +
+                    idDeltas + idRangeOffsets + glyphsIds;
+
+    var format31012 = '';
+    var header31012 = '';
+    if (numTables > 1) {
+      cmap += '\x00\x03' + // platformID
+              '\x00\x0A' + // encodingID
+              string32(4 + numTables * 8 +
+                       4 + format314.length); // start of the table record
+      format31012 = '';
+      for (i = 0, ii = ranges.length; i < ii; i++) {
+        range = ranges[i];
+        start = range[0];
+        codes = range[2];
+        var code = codes[0];
+        for (j = 1, jj = codes.length; j < jj; ++j) {
+          if (codes[j] !== codes[j - 1] + 1) {
+            end = range[0] + j - 1;
+            format31012 += string32(start) + // startCharCode
+                           string32(end) + // endCharCode
+                           string32(code); // startGlyphID
+            start = end + 1;
+            code = codes[j];
+          }
+        }
+        format31012 += string32(start) + // startCharCode
+                       string32(range[1]) + // endCharCode
+                       string32(code); // startGlyphID
+      }
+      header31012 = '\x00\x0C' + // format
+                    '\x00\x00' + // reserved
+                    string32(format31012.length + 16) + // length
+                    '\x00\x00\x00\x00' + // language
+                    string32(format31012.length / 12); // nGroups
+    }
+
+    return cmap + '\x00\x04' + // format
+                  string16(format314.length + 4) + // length
+                  format314 + header31012 + format31012;
+  }
+
+  function validateOS2Table(os2) {
+    var stream = new Stream(os2.data);
+    var version = stream.getUint16();
+    // TODO verify all OS/2 tables fields, but currently we validate only those
+    // that give us issues
+    stream.getBytes(60); // skipping type, misc sizes, panose, unicode ranges
+    var selection = stream.getUint16();
+    if (version < 4 && (selection & 0x0300)) {
+      return false;
+    }
+    var firstChar = stream.getUint16();
+    var lastChar = stream.getUint16();
+    if (firstChar > lastChar) {
+      return false;
+    }
+    stream.getBytes(6); // skipping sTypoAscender/Descender/LineGap
+    var usWinAscent = stream.getUint16();
+    if (usWinAscent === 0) { // makes font unreadable by windows
+      return false;
+    }
+
+    // OS/2 appears to be valid, resetting some fields
+    os2.data[8] = os2.data[9] = 0; // IE rejects fonts if fsType != 0
+    return true;
+  }
+
+  function createOS2Table(properties, charstrings, override) {
+    override = override || {
+      unitsPerEm: 0,
+      yMax: 0,
+      yMin: 0,
+      ascent: 0,
+      descent: 0
+    };
+
+    var ulUnicodeRange1 = 0;
+    var ulUnicodeRange2 = 0;
+    var ulUnicodeRange3 = 0;
+    var ulUnicodeRange4 = 0;
+
+    var firstCharIndex = null;
+    var lastCharIndex = 0;
+
+    if (charstrings) {
+      for (var code in charstrings) {
+        code |= 0;
+        if (firstCharIndex > code || !firstCharIndex) {
+          firstCharIndex = code;
+        }
+        if (lastCharIndex < code) {
+          lastCharIndex = code;
+        }
+
+        var position = getUnicodeRangeFor(code);
+        if (position < 32) {
+          ulUnicodeRange1 |= 1 << position;
+        } else if (position < 64) {
+          ulUnicodeRange2 |= 1 << position - 32;
+        } else if (position < 96) {
+          ulUnicodeRange3 |= 1 << position - 64;
+        } else if (position < 123) {
+          ulUnicodeRange4 |= 1 << position - 96;
+        } else {
+          error('Unicode ranges Bits > 123 are reserved for internal usage');
+        }
+      }
+    } else {
+      // TODO
+      firstCharIndex = 0;
+      lastCharIndex = 255;
+    }
+
+    var bbox = properties.bbox || [0, 0, 0, 0];
+    var unitsPerEm = (override.unitsPerEm ||
+                      1 / (properties.fontMatrix || FONT_IDENTITY_MATRIX)[0]);
+
+    // if the font units differ to the PDF glyph space units
+    // then scale up the values
+    var scale = (properties.ascentScaled ? 1.0 :
+                 unitsPerEm / PDF_GLYPH_SPACE_UNITS);
+
+    var typoAscent = (override.ascent ||
+                      Math.round(scale * (properties.ascent || bbox[3])));
+    var typoDescent = (override.descent ||
+                       Math.round(scale * (properties.descent || bbox[1])));
+    if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) {
+      typoDescent = -typoDescent; // fixing incorrect descent
+    }
+    var winAscent = override.yMax || typoAscent;
+    var winDescent = -override.yMin || -typoDescent;
+
+    return '\x00\x03' + // version
+           '\x02\x24' + // xAvgCharWidth
+           '\x01\xF4' + // usWeightClass
+           '\x00\x05' + // usWidthClass
+           '\x00\x00' + // fstype (0 to let the font loads via font-face on IE)
+           '\x02\x8A' + // ySubscriptXSize
+           '\x02\xBB' + // ySubscriptYSize
+           '\x00\x00' + // ySubscriptXOffset
+           '\x00\x8C' + // ySubscriptYOffset
+           '\x02\x8A' + // ySuperScriptXSize
+           '\x02\xBB' + // ySuperScriptYSize
+           '\x00\x00' + // ySuperScriptXOffset
+           '\x01\xDF' + // ySuperScriptYOffset
+           '\x00\x31' + // yStrikeOutSize
+           '\x01\x02' + // yStrikeOutPosition
+           '\x00\x00' + // sFamilyClass
+           '\x00\x00\x06' +
+           String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) +
+           '\x00\x00\x00\x00\x00\x00' + // Panose
+           string32(ulUnicodeRange1) + // ulUnicodeRange1 (Bits 0-31)
+           string32(ulUnicodeRange2) + // ulUnicodeRange2 (Bits 32-63)
+           string32(ulUnicodeRange3) + // ulUnicodeRange3 (Bits 64-95)
+           string32(ulUnicodeRange4) + // ulUnicodeRange4 (Bits 96-127)
+           '\x2A\x32\x31\x2A' + // achVendID
+           string16(properties.italicAngle ? 1 : 0) + // fsSelection
+           string16(firstCharIndex ||
+                    properties.firstChar) + // usFirstCharIndex
+           string16(lastCharIndex || properties.lastChar) +  // usLastCharIndex
+           string16(typoAscent) + // sTypoAscender
+           string16(typoDescent) + // sTypoDescender
+           '\x00\x64' + // sTypoLineGap (7%-10% of the unitsPerEM value)
+           string16(winAscent) + // usWinAscent
+           string16(winDescent) + // usWinDescent
+           '\x00\x00\x00\x00' + // ulCodePageRange1 (Bits 0-31)
+           '\x00\x00\x00\x00' + // ulCodePageRange2 (Bits 32-63)
+           string16(properties.xHeight) + // sxHeight
+           string16(properties.capHeight) + // sCapHeight
+           string16(0) + // usDefaultChar
+           string16(firstCharIndex || properties.firstChar) + // usBreakChar
+           '\x00\x03';  // usMaxContext
+  }
+
+  function createPostTable(properties) {
+    var angle = Math.floor(properties.italicAngle * (Math.pow(2, 16)));
+    return ('\x00\x03\x00\x00' + // Version number
+            string32(angle) + // italicAngle
+            '\x00\x00' + // underlinePosition
+            '\x00\x00' + // underlineThickness
+            string32(properties.fixedPitch) + // isFixedPitch
+            '\x00\x00\x00\x00' + // minMemType42
+            '\x00\x00\x00\x00' + // maxMemType42
+            '\x00\x00\x00\x00' + // minMemType1
+            '\x00\x00\x00\x00');  // maxMemType1
+  }
+
+  function createNameTable(name, proto) {
+    if (!proto) {
+      proto = [[], []]; // no strings and unicode strings
+    }
+
+    var strings = [
+      proto[0][0] || 'Original licence',  // 0.Copyright
+      proto[0][1] || name,                // 1.Font family
+      proto[0][2] || 'Unknown',           // 2.Font subfamily (font weight)
+      proto[0][3] || 'uniqueID',          // 3.Unique ID
+      proto[0][4] || name,                // 4.Full font name
+      proto[0][5] || 'Version 0.11',      // 5.Version
+      proto[0][6] || '',                  // 6.Postscript name
+      proto[0][7] || 'Unknown',           // 7.Trademark
+      proto[0][8] || 'Unknown',           // 8.Manufacturer
+      proto[0][9] || 'Unknown'            // 9.Designer
+    ];
+
+    // Mac want 1-byte per character strings while Windows want
+    // 2-bytes per character, so duplicate the names table
+    var stringsUnicode = [];
+    var i, ii, j, jj, str;
+    for (i = 0, ii = strings.length; i < ii; i++) {
+      str = proto[1][i] || strings[i];
+
+      var strBufUnicode = [];
+      for (j = 0, jj = str.length; j < jj; j++) {
+        strBufUnicode.push(string16(str.charCodeAt(j)));
+      }
+      stringsUnicode.push(strBufUnicode.join(''));
+    }
+
+    var names = [strings, stringsUnicode];
+    var platforms = ['\x00\x01', '\x00\x03'];
+    var encodings = ['\x00\x00', '\x00\x01'];
+    var languages = ['\x00\x00', '\x04\x09'];
+
+    var namesRecordCount = strings.length * platforms.length;
+    var nameTable =
+      '\x00\x00' +                           // format
+      string16(namesRecordCount) +           // Number of names Record
+      string16(namesRecordCount * 12 + 6);   // Storage
+
+    // Build the name records field
+    var strOffset = 0;
+    for (i = 0, ii = platforms.length; i < ii; i++) {
+      var strs = names[i];
+      for (j = 0, jj = strs.length; j < jj; j++) {
+        str = strs[j];
+        var nameRecord =
+          platforms[i] + // platform ID
+          encodings[i] + // encoding ID
+          languages[i] + // language ID
+          string16(j) + // name ID
+          string16(str.length) +
+          string16(strOffset);
+        nameTable += nameRecord;
+        strOffset += str.length;
+      }
+    }
+
+    nameTable += strings.join('') + stringsUnicode.join('');
+    return nameTable;
+  }
+
+  Font.prototype = {
+    name: null,
+    font: null,
+    mimetype: null,
+    encoding: null,
+    get renderer() {
+      var renderer = FontRendererFactory.create(this);
+      return shadow(this, 'renderer', renderer);
+    },
+
+    exportData: function Font_exportData() {
+      var data = {};
+      for (var i in this) {
+        if (this.hasOwnProperty(i)) {
+          data[i] = this[i];
+        }
+      }
+      return data;
+    },
+
+    checkAndRepair: function Font_checkAndRepair(name, font, properties) {
+      function readTableEntry(file) {
+        var tag = bytesToString(file.getBytes(4));
+
+        var checksum = file.getInt32();
+        var offset = file.getInt32() >>> 0;
+        var length = file.getInt32() >>> 0;
+
+        // Read the table associated data
+        var previousPosition = file.pos;
+        file.pos = file.start ? file.start : 0;
+        file.skip(offset);
+        var data = file.getBytes(length);
+        file.pos = previousPosition;
+
+        if (tag === 'head') {
+          // clearing checksum adjustment
+          data[8] = data[9] = data[10] = data[11] = 0;
+          data[17] |= 0x20; //Set font optimized for cleartype flag
+        }
+
+        return {
+          tag: tag,
+          checksum: checksum,
+          length: length,
+          offset: offset,
+          data: data
+        };
+      }
+
+      function readOpenTypeHeader(ttf) {
+        return {
+          version: bytesToString(ttf.getBytes(4)),
+          numTables: ttf.getUint16(),
+          searchRange: ttf.getUint16(),
+          entrySelector: ttf.getUint16(),
+          rangeShift: ttf.getUint16()
+        };
+      }
+
+      /**
+       * Read the appropriate subtable from the cmap according to 9.6.6.4 from
+       * PDF spec
+       */
+      function readCmapTable(cmap, font, isSymbolicFont) {
+        var segment;
+        var start = (font.start ? font.start : 0) + cmap.offset;
+        font.pos = start;
+
+        var version = font.getUint16();
+        var numTables = font.getUint16();
+
+        var potentialTable;
+        var canBreak = false;
+        // There's an order of preference in terms of which cmap subtable to
+        // use:
+        // - non-symbolic fonts the preference is a 3,1 table then a 1,0 table
+        // - symbolic fonts the preference is a 3,0 table then a 1,0 table
+        // The following takes advantage of the fact that the tables are sorted
+        // to work.
+        for (var i = 0; i < numTables; i++) {
+          var platformId = font.getUint16();
+          var encodingId = font.getUint16();
+          var offset = font.getInt32() >>> 0;
+          var useTable = false;
+
+          if (platformId === 0 && encodingId === 0) {
+            useTable = true;
+            // Continue the loop since there still may be a higher priority
+            // table.
+          } else if (platformId === 1 && encodingId === 0) {
+            useTable = true;
+            // Continue the loop since there still may be a higher priority
+            // table.
+          } else if (platformId === 3 && encodingId === 1 &&
+                     (!isSymbolicFont || !potentialTable)) {
+            useTable = true;
+            if (!isSymbolicFont) {
+              canBreak = true;
+            }
+          } else if (isSymbolicFont && platformId === 3 && encodingId === 0) {
+            useTable = true;
+            canBreak = true;
+          }
+
+          if (useTable) {
+            potentialTable = {
+              platformId: platformId,
+              encodingId: encodingId,
+              offset: offset
+            };
+          }
+          if (canBreak) {
+            break;
+          }
+        }
+
+        if (potentialTable) {
+          font.pos = start + potentialTable.offset;
+        }
+        if (!potentialTable || font.peekByte() === -1) {
+          warn('Could not find a preferred cmap table.');
+          return {
+            platformId: -1,
+            encodingId: -1,
+            mappings: [],
+            hasShortCmap: false
+          };
+        }
+
+        var format = font.getUint16();
+        var length = font.getUint16();
+        var language = font.getUint16();
+
+        var hasShortCmap = false;
+        var mappings = [];
+        var j, glyphId;
+
+        // TODO(mack): refactor this cmap subtable reading logic out
+        if (format === 0) {
+          for (j = 0; j < 256; j++) {
+            var index = font.getByte();
+            if (!index) {
+              continue;
+            }
+            mappings.push({
+              charCode: j,
+              glyphId: index
+            });
+          }
+          hasShortCmap = true;
+        } else if (format === 4) {
+          // re-creating the table in format 4 since the encoding
+          // might be changed
+          var segCount = (font.getUint16() >> 1);
+          font.getBytes(6); // skipping range fields
+          var segIndex, segments = [];
+          for (segIndex = 0; segIndex < segCount; segIndex++) {
+            segments.push({ end: font.getUint16() });
+          }
+          font.getUint16();
+          for (segIndex = 0; segIndex < segCount; segIndex++) {
+            segments[segIndex].start = font.getUint16();
+          }
+
+          for (segIndex = 0; segIndex < segCount; segIndex++) {
+            segments[segIndex].delta = font.getUint16();
+          }
+
+          var offsetsCount = 0;
+          for (segIndex = 0; segIndex < segCount; segIndex++) {
+            segment = segments[segIndex];
+            var rangeOffset = font.getUint16();
+            if (!rangeOffset) {
+              segment.offsetIndex = -1;
+              continue;
+            }
+
+            var offsetIndex = (rangeOffset >> 1) - (segCount - segIndex);
+            segment.offsetIndex = offsetIndex;
+            offsetsCount = Math.max(offsetsCount, offsetIndex +
+                                    segment.end - segment.start + 1);
+          }
+
+          var offsets = [];
+          for (j = 0; j < offsetsCount; j++) {
+            offsets.push(font.getUint16());
+          }
+
+          for (segIndex = 0; segIndex < segCount; segIndex++) {
+            segment = segments[segIndex];
+            start = segment.start;
+            var end = segment.end;
+            var delta = segment.delta;
+            offsetIndex = segment.offsetIndex;
+
+            for (j = start; j <= end; j++) {
+              if (j === 0xFFFF) {
+                continue;
+              }
+
+              glyphId = (offsetIndex < 0 ?
+                         j : offsets[offsetIndex + j - start]);
+              glyphId = (glyphId + delta) & 0xFFFF;
+              if (glyphId === 0) {
+                continue;
+              }
+              mappings.push({
+                charCode: j,
+                glyphId: glyphId
+              });
+            }
+          }
+        } else if (format === 6) {
+          // Format 6 is a 2-bytes dense mapping, which means the font data
+          // lives glue together even if they are pretty far in the unicode
+          // table. (This looks weird, so I can have missed something), this
+          // works on Linux but seems to fails on Mac so let's rewrite the
+          // cmap table to a 3-1-4 style
+          var firstCode = font.getUint16();
+          var entryCount = font.getUint16();
+
+          for (j = 0; j < entryCount; j++) {
+            glyphId = font.getUint16();
+            var charCode = firstCode + j;
+
+            mappings.push({
+              charCode: charCode,
+              glyphId: glyphId
+            });
+          }
+        } else {
+          error('cmap table has unsupported format: ' + format);
+        }
+
+        // removing duplicate entries
+        mappings.sort(function (a, b) {
+          return a.charCode - b.charCode;
+        });
+        for (i = 1; i < mappings.length; i++) {
+          if (mappings[i - 1].charCode === mappings[i].charCode) {
+            mappings.splice(i, 1);
+            i--;
+          }
+        }
+
+        return {
+          platformId: potentialTable.platformId,
+          encodingId: potentialTable.encodingId,
+          mappings: mappings,
+          hasShortCmap: hasShortCmap
+        };
+      }
+
+      function sanitizeMetrics(font, header, metrics, numGlyphs) {
+        if (!header) {
+          if (metrics) {
+            metrics.data = null;
+          }
+          return;
+        }
+
+        font.pos = (font.start ? font.start : 0) + header.offset;
+        font.pos += header.length - 2;
+        var numOfMetrics = font.getUint16();
+
+        if (numOfMetrics > numGlyphs) {
+          info('The numOfMetrics (' + numOfMetrics + ') should not be ' +
+               'greater than the numGlyphs (' + numGlyphs + ')');
+          // Reduce numOfMetrics if it is greater than numGlyphs
+          numOfMetrics = numGlyphs;
+          header.data[34] = (numOfMetrics & 0xff00) >> 8;
+          header.data[35] = numOfMetrics & 0x00ff;
+        }
+
+        var numOfSidebearings = numGlyphs - numOfMetrics;
+        var numMissing = numOfSidebearings -
+          ((metrics.length - numOfMetrics * 4) >> 1);
+
+        if (numMissing > 0) {
+          // For each missing glyph, we set both the width and lsb to 0 (zero).
+          // Since we need to add two properties for each glyph, this explains
+          // the use of |numMissing * 2| when initializing the typed array.
+          var entries = new Uint8Array(metrics.length + numMissing * 2);
+          entries.set(metrics.data);
+          metrics.data = entries;
+        }
+      }
+
+      function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart,
+                             hintsValid) {
+        if (sourceEnd - sourceStart <= 12) {
+          // glyph with data less than 12 is invalid one
+          return 0;
+        }
+        var glyf = source.subarray(sourceStart, sourceEnd);
+        var contoursCount = (glyf[0] << 8) | glyf[1];
+        if (contoursCount & 0x8000) {
+          // complex glyph, writing as is
+          dest.set(glyf, destStart);
+          return glyf.length;
+        }
+
+        var i, j = 10, flagsCount = 0;
+        for (i = 0; i < contoursCount; i++) {
+          var endPoint = (glyf[j] << 8) | glyf[j + 1];
+          flagsCount = endPoint + 1;
+          j += 2;
+        }
+        // skipping instructions
+        var instructionsStart = j;
+        var instructionsLength = (glyf[j] << 8) | glyf[j + 1];
+        j += 2 + instructionsLength;
+        var instructionsEnd = j;
+        // validating flags
+        var coordinatesLength = 0;
+        for (i = 0; i < flagsCount; i++) {
+          var flag = glyf[j++];
+          if (flag & 0xC0) {
+            // reserved flags must be zero, cleaning up
+            glyf[j - 1] = flag & 0x3F;
+          }
+          var xyLength = ((flag & 2) ? 1 : (flag & 16) ? 0 : 2) +
+                         ((flag & 4) ? 1 : (flag & 32) ? 0 : 2);
+          coordinatesLength += xyLength;
+          if (flag & 8) {
+            var repeat = glyf[j++];
+            i += repeat;
+            coordinatesLength += repeat * xyLength;
+          }
+        }
+        // glyph without coordinates will be rejected
+        if (coordinatesLength === 0) {
+          return 0;
+        }
+        var glyphDataLength = j + coordinatesLength;
+        if (glyphDataLength > glyf.length) {
+          // not enough data for coordinates
+          return 0;
+        }
+        if (!hintsValid && instructionsLength > 0) {
+          dest.set(glyf.subarray(0, instructionsStart), destStart);
+          dest.set([0, 0], destStart + instructionsStart);
+          dest.set(glyf.subarray(instructionsEnd, glyphDataLength),
+                   destStart + instructionsStart + 2);
+          glyphDataLength -= instructionsLength;
+          if (glyf.length - glyphDataLength > 3) {
+            glyphDataLength = (glyphDataLength + 3) & ~3;
+          }
+          return glyphDataLength;
+        }
+        if (glyf.length - glyphDataLength > 3) {
+          // truncating and aligning to 4 bytes the long glyph data
+          glyphDataLength = (glyphDataLength + 3) & ~3;
+          dest.set(glyf.subarray(0, glyphDataLength), destStart);
+          return glyphDataLength;
+        }
+        // glyph data is fine
+        dest.set(glyf, destStart);
+        return glyf.length;
+      }
+
+      function sanitizeHead(head, numGlyphs, locaLength) {
+        var data = head.data;
+
+        // Validate version:
+        // Should always be 0x00010000
+        var version = int32(data[0], data[1], data[2], data[3]);
+        if (version >> 16 !== 1) {
+          info('Attempting to fix invalid version in head table: ' + version);
+          data[0] = 0;
+          data[1] = 1;
+          data[2] = 0;
+          data[3] = 0;
+        }
+
+        var indexToLocFormat = int16(data[50], data[51]);
+        if (indexToLocFormat < 0 || indexToLocFormat > 1) {
+          info('Attempting to fix invalid indexToLocFormat in head table: ' +
+               indexToLocFormat);
+
+          // The value of indexToLocFormat should be 0 if the loca table
+          // consists of short offsets, and should be 1 if the loca table
+          // consists of long offsets.
+          //
+          // The number of entries in the loca table should be numGlyphs + 1.
+          //
+          // Using this information, we can work backwards to deduce if the
+          // size of each offset in the loca table, and thus figure out the
+          // appropriate value for indexToLocFormat.
+
+          var numGlyphsPlusOne = numGlyphs + 1;
+          if (locaLength === numGlyphsPlusOne << 1) {
+            // 0x0000 indicates the loca table consists of short offsets
+            data[50] = 0;
+            data[51] = 0;
+          } else if (locaLength === numGlyphsPlusOne << 2) {
+            // 0x0001 indicates the loca table consists of long offsets
+            data[50] = 0;
+            data[51] = 1;
+          } else {
+            warn('Could not fix indexToLocFormat: ' + indexToLocFormat);
+          }
+        }
+      }
+
+      function sanitizeGlyphLocations(loca, glyf, numGlyphs,
+                                      isGlyphLocationsLong, hintsValid,
+                                      dupFirstEntry) {
+        var itemSize, itemDecode, itemEncode;
+        if (isGlyphLocationsLong) {
+          itemSize = 4;
+          itemDecode = function fontItemDecodeLong(data, offset) {
+            return (data[offset] << 24) | (data[offset + 1] << 16) |
+                   (data[offset + 2] << 8) | data[offset + 3];
+          };
+          itemEncode = function fontItemEncodeLong(data, offset, value) {
+            data[offset] = (value >>> 24) & 0xFF;
+            data[offset + 1] = (value >> 16) & 0xFF;
+            data[offset + 2] = (value >> 8) & 0xFF;
+            data[offset + 3] = value & 0xFF;
+          };
+        } else {
+          itemSize = 2;
+          itemDecode = function fontItemDecode(data, offset) {
+            return (data[offset] << 9) | (data[offset + 1] << 1);
+          };
+          itemEncode = function fontItemEncode(data, offset, value) {
+            data[offset] = (value >> 9) & 0xFF;
+            data[offset + 1] = (value >> 1) & 0xFF;
+          };
+        }
+        var locaData = loca.data;
+        var locaDataSize = itemSize * (1 + numGlyphs);
+        // is loca.data too short or long?
+        if (locaData.length !== locaDataSize) {
+          locaData = new Uint8Array(locaDataSize);
+          locaData.set(loca.data.subarray(0, locaDataSize));
+          loca.data = locaData;
+        }
+        // removing the invalid glyphs
+        var oldGlyfData = glyf.data;
+        var oldGlyfDataLength = oldGlyfData.length;
+        var newGlyfData = new Uint8Array(oldGlyfDataLength);
+        var startOffset = itemDecode(locaData, 0);
+        var writeOffset = 0;
+        var missingGlyphData = {};
+        itemEncode(locaData, 0, writeOffset);
+        var i, j;
+        for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) {
+          var endOffset = itemDecode(locaData, j);
+          if (endOffset > oldGlyfDataLength &&
+              ((oldGlyfDataLength + 3) & ~3) === endOffset) {
+            // Aspose breaks fonts by aligning the glyphs to the qword, but not
+            // the glyf table size, which makes last glyph out of range.
+            endOffset = oldGlyfDataLength;
+          }
+          if (endOffset > oldGlyfDataLength) {
+            // glyph end offset points outside glyf data, rejecting the glyph
+            itemEncode(locaData, j, writeOffset);
+            startOffset = endOffset;
+            continue;
+          }
+
+          if (startOffset === endOffset) {
+            missingGlyphData[i] = true;
+          }
+
+          var newLength = sanitizeGlyph(oldGlyfData, startOffset, endOffset,
+                                        newGlyfData, writeOffset, hintsValid);
+          writeOffset += newLength;
+          itemEncode(locaData, j, writeOffset);
+          startOffset = endOffset;
+        }
+
+        if (writeOffset === 0) {
+          // glyf table cannot be empty -- redoing the glyf and loca tables
+          // to have single glyph with one point
+          var simpleGlyph = new Uint8Array(
+            [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]);
+          for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) {
+            itemEncode(locaData, j, simpleGlyph.length);
+          }
+          glyf.data = simpleGlyph;
+          return missingGlyphData;
+        }
+
+        if (dupFirstEntry) {
+          var firstEntryLength = itemDecode(locaData, itemSize);
+          if (newGlyfData.length > firstEntryLength + writeOffset) {
+            glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset);
+          } else {
+            glyf.data = new Uint8Array(firstEntryLength + writeOffset);
+            glyf.data.set(newGlyfData.subarray(0, writeOffset));
+          }
+          glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset);
+          itemEncode(loca.data, locaData.length - itemSize,
+                     writeOffset + firstEntryLength);
+        } else {
+          glyf.data = newGlyfData.subarray(0, writeOffset);
+        }
+        return missingGlyphData;
+      }
+
+      function readPostScriptTable(post, properties, maxpNumGlyphs) {
+        var start = (font.start ? font.start : 0) + post.offset;
+        font.pos = start;
+
+        var length = post.length, end = start + length;
+        var version = font.getInt32();
+        // skip rest to the tables
+        font.getBytes(28);
+
+        var glyphNames;
+        var valid = true;
+        var i;
+
+        switch (version) {
+          case 0x00010000:
+            glyphNames = MacStandardGlyphOrdering;
+            break;
+          case 0x00020000:
+            var numGlyphs = font.getUint16();
+            if (numGlyphs !== maxpNumGlyphs) {
+              valid = false;
+              break;
+            }
+            var glyphNameIndexes = [];
+            for (i = 0; i < numGlyphs; ++i) {
+              var index = font.getUint16();
+              if (index >= 32768) {
+                valid = false;
+                break;
+              }
+              glyphNameIndexes.push(index);
+            }
+            if (!valid) {
+              break;
+            }
+            var customNames = [];
+            var strBuf = [];
+            while (font.pos < end) {
+              var stringLength = font.getByte();
+              strBuf.length = stringLength;
+              for (i = 0; i < stringLength; ++i) {
+                strBuf[i] = String.fromCharCode(font.getByte());
+              }
+              customNames.push(strBuf.join(''));
+            }
+            glyphNames = [];
+            for (i = 0; i < numGlyphs; ++i) {
+              var j = glyphNameIndexes[i];
+              if (j < 258) {
+                glyphNames.push(MacStandardGlyphOrdering[j]);
+                continue;
+              }
+              glyphNames.push(customNames[j - 258]);
+            }
+            break;
+          case 0x00030000:
+            break;
+          default:
+            warn('Unknown/unsupported post table version ' + version);
+            valid = false;
+            if (properties.defaultEncoding) {
+              glyphNames = properties.defaultEncoding;
+            }
+            break;
+        }
+        properties.glyphNames = glyphNames;
+        return valid;
+      }
+
+      function readNameTable(nameTable) {
+        var start = (font.start ? font.start : 0) + nameTable.offset;
+        font.pos = start;
+
+        var names = [[], []];
+        var length = nameTable.length, end = start + length;
+        var format = font.getUint16();
+        var FORMAT_0_HEADER_LENGTH = 6;
+        if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) {
+          // unsupported name table format or table "too" small
+          return names;
+        }
+        var numRecords = font.getUint16();
+        var stringsStart = font.getUint16();
+        var records = [];
+        var NAME_RECORD_LENGTH = 12;
+        var i, ii;
+
+        for (i = 0; i < numRecords &&
+                        font.pos + NAME_RECORD_LENGTH <= end; i++) {
+          var r = {
+            platform: font.getUint16(),
+            encoding: font.getUint16(),
+            language: font.getUint16(),
+            name: font.getUint16(),
+            length: font.getUint16(),
+            offset: font.getUint16()
+          };
+          // using only Macintosh and Windows platform/encoding names
+          if ((r.platform === 1 && r.encoding === 0 && r.language === 0) ||
+              (r.platform === 3 && r.encoding === 1 && r.language === 0x409)) {
+            records.push(r);
+          }
+        }
+        for (i = 0, ii = records.length; i < ii; i++) {
+          var record = records[i];
+          var pos = start + stringsStart + record.offset;
+          if (pos + record.length > end) {
+            continue; // outside of name table, ignoring
+          }
+          font.pos = pos;
+          var nameIndex = record.name;
+          if (record.encoding) {
+            // unicode
+            var str = '';
+            for (var j = 0, jj = record.length; j < jj; j += 2) {
+              str += String.fromCharCode(font.getUint16());
+            }
+            names[1][nameIndex] = str;
+          } else {
+            names[0][nameIndex] = bytesToString(font.getBytes(record.length));
+          }
+        }
+        return names;
+      }
+
+      var TTOpsStackDeltas = [
+        0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5,
+        -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1,
+        1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1,
+        0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2,
+        0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1,
+        -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1,
+        -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+        -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1,
+        -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2];
+        // 0xC0-DF == -1 and 0xE0-FF == -2
+
+      function sanitizeTTProgram(table, ttContext) {
+        var data = table.data;
+        var i = 0, j, n, b, funcId, pc, lastEndf = 0, lastDeff = 0;
+        var stack = [];
+        var callstack = [];
+        var functionsCalled = [];
+        var tooComplexToFollowFunctions =
+          ttContext.tooComplexToFollowFunctions;
+        var inFDEF = false, ifLevel = 0, inELSE = 0;
+        for (var ii = data.length; i < ii;) {
+          var op = data[i++];
+          // The TrueType instruction set docs can be found at
+          // https://developer.apple.com/fonts/TTRefMan/RM05/Chap5.html
+          if (op === 0x40) { // NPUSHB - pushes n bytes
+            n = data[i++];
+            if (inFDEF || inELSE) {
+              i += n;
+            } else {
+              for (j = 0; j < n; j++) {
+                stack.push(data[i++]);
+              }
+            }
+          } else if (op === 0x41) { // NPUSHW - pushes n words
+            n = data[i++];
+            if (inFDEF || inELSE) {
+              i += n * 2;
+            } else {
+              for (j = 0; j < n; j++) {
+                b = data[i++];
+                stack.push((b << 8) | data[i++]);
+              }
+            }
+          } else if ((op & 0xF8) === 0xB0) { // PUSHB - pushes bytes
+            n = op - 0xB0 + 1;
+            if (inFDEF || inELSE) {
+              i += n;
+            } else {
+              for (j = 0; j < n; j++) {
+                stack.push(data[i++]);
+              }
+            }
+          } else if ((op & 0xF8) === 0xB8) { // PUSHW - pushes words
+            n = op - 0xB8 + 1;
+            if (inFDEF || inELSE) {
+              i += n * 2;
+            } else {
+              for (j = 0; j < n; j++) {
+                b = data[i++];
+                stack.push((b << 8) | data[i++]);
+              }
+            }
+          } else if (op === 0x2B && !tooComplexToFollowFunctions) { // CALL
+            if (!inFDEF && !inELSE) {
+              // collecting inforamtion about which functions are used
+              funcId = stack[stack.length - 1];
+              ttContext.functionsUsed[funcId] = true;
+              if (funcId in ttContext.functionsStackDeltas) {
+                stack.length += ttContext.functionsStackDeltas[funcId];
+              } else if (funcId in ttContext.functionsDefined &&
+                         functionsCalled.indexOf(funcId) < 0) {
+                callstack.push({data: data, i: i, stackTop: stack.length - 1});
+                functionsCalled.push(funcId);
+                pc = ttContext.functionsDefined[funcId];
+                if (!pc) {
+                  warn('TT: CALL non-existent function');
+                  ttContext.hintsValid = false;
+                  return;
+                }
+                data = pc.data;
+                i = pc.i;
+              }
+            }
+          } else if (op === 0x2C && !tooComplexToFollowFunctions) { // FDEF
+            if (inFDEF || inELSE) {
+              warn('TT: nested FDEFs not allowed');
+              tooComplexToFollowFunctions = true;
+            }
+            inFDEF = true;
+            // collecting inforamtion about which functions are defined
+            lastDeff = i;
+            funcId = stack.pop();
+            ttContext.functionsDefined[funcId] = {data: data, i: i};
+          } else if (op === 0x2D) { // ENDF - end of function
+            if (inFDEF) {
+              inFDEF = false;
+              lastEndf = i;
+            } else {
+              pc = callstack.pop();
+              if (!pc) {
+                warn('TT: ENDF bad stack');
+                ttContext.hintsValid = false;
+                return;
+              }
+              funcId = functionsCalled.pop();
+              data = pc.data;
+              i = pc.i;
+              ttContext.functionsStackDeltas[funcId] =
+                stack.length - pc.stackTop;
+            }
+          } else if (op === 0x89) { // IDEF - instruction definition
+            if (inFDEF || inELSE) {
+              warn('TT: nested IDEFs not allowed');
+              tooComplexToFollowFunctions = true;
+            }
+            inFDEF = true;
+            // recording it as a function to track ENDF
+            lastDeff = i;
+          } else if (op === 0x58) { // IF
+            ++ifLevel;
+          } else if (op === 0x1B) { // ELSE
+            inELSE = ifLevel;
+          } else if (op === 0x59) { // EIF
+            if (inELSE === ifLevel) {
+              inELSE = 0;
+            }
+            --ifLevel;
+          } else if (op === 0x1C) { // JMPR
+            if (!inFDEF && !inELSE) {
+              var offset = stack[stack.length - 1];
+              // only jumping forward to prevent infinite loop
+              if (offset > 0) {
+                i += offset - 1;
+              }
+            }
+          }
+          // Adjusting stack not extactly, but just enough to get function id
+          if (!inFDEF && !inELSE) {
+            var stackDelta = op <= 0x8E ? TTOpsStackDeltas[op] :
+              op >= 0xC0 && op <= 0xDF ? -1 : op >= 0xE0 ? -2 : 0;
+            if (op >= 0x71 && op <= 0x75) {
+              n = stack.pop();
+              if (n === n) {
+                stackDelta = -n * 2;
+              }
+            }
+            while (stackDelta < 0 && stack.length > 0) {
+              stack.pop();
+              stackDelta++;
+            }
+            while (stackDelta > 0) {
+              stack.push(NaN); // pushing any number into stack
+              stackDelta--;
+            }
+          }
+        }
+        ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions;
+        var content = [data];
+        if (i > data.length) {
+          content.push(new Uint8Array(i - data.length));
+        }
+        if (lastDeff > lastEndf) {
+          warn('TT: complementing a missing function tail');
+          // new function definition started, but not finished
+          // complete function by [CLEAR, ENDF]
+          content.push(new Uint8Array([0x22, 0x2D]));
+        }
+        foldTTTable(table, content);
+      }
+
+      function checkInvalidFunctions(ttContext, maxFunctionDefs) {
+        if (ttContext.tooComplexToFollowFunctions) {
+          return;
+        }
+        if (ttContext.functionsDefined.length > maxFunctionDefs) {
+          warn('TT: more functions defined than expected');
+          ttContext.hintsValid = false;
+          return;
+        }
+        for (var j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) {
+          if (j > maxFunctionDefs) {
+            warn('TT: invalid function id: ' + j);
+            ttContext.hintsValid = false;
+            return;
+          }
+          if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) {
+            warn('TT: undefined function: ' + j);
+            ttContext.hintsValid = false;
+            return;
+          }
+        }
+      }
+
+      function foldTTTable(table, content) {
+        if (content.length > 1) {
+          // concatenating the content items
+          var newLength = 0;
+          var j, jj;
+          for (j = 0, jj = content.length; j < jj; j++) {
+            newLength += content[j].length;
+          }
+          newLength = (newLength + 3) & ~3;
+          var result = new Uint8Array(newLength);
+          var pos = 0;
+          for (j = 0, jj = content.length; j < jj; j++) {
+            result.set(content[j], pos);
+            pos += content[j].length;
+          }
+          table.data = result;
+          table.length = newLength;
+        }
+      }
+
+      function sanitizeTTPrograms(fpgm, prep, cvt) {
+        var ttContext = {
+          functionsDefined: [],
+          functionsUsed: [],
+          functionsStackDeltas: [],
+          tooComplexToFollowFunctions: false,
+          hintsValid: true
+        };
+        if (fpgm) {
+          sanitizeTTProgram(fpgm, ttContext);
+        }
+        if (prep) {
+          sanitizeTTProgram(prep, ttContext);
+        }
+        if (fpgm) {
+          checkInvalidFunctions(ttContext, maxFunctionDefs);
+        }
+        if (cvt && (cvt.length & 1)) {
+          var cvtData = new Uint8Array(cvt.length + 1);
+          cvtData.set(cvt.data);
+          cvt.data = cvtData;
+        }
+        return ttContext.hintsValid;
+      }
+
+      // The following steps modify the original font data, making copy
+      font = new Stream(new Uint8Array(font.getBytes()));
+
+      var VALID_TABLES = ['OS/2', 'cmap', 'head', 'hhea', 'hmtx', 'maxp',
+        'name', 'post', 'loca', 'glyf', 'fpgm', 'prep', 'cvt ', 'CFF '];
+
+      var header = readOpenTypeHeader(font);
+      var numTables = header.numTables;
+      var cff, cffFile;
+
+      var tables = { 'OS/2': null, cmap: null, head: null, hhea: null,
+                     hmtx: null, maxp: null, name: null, post: null };
+      var table;
+      for (var i = 0; i < numTables; i++) {
+        table = readTableEntry(font);
+        if (VALID_TABLES.indexOf(table.tag) < 0) {
+          continue; // skipping table if it's not a required or optional table
+        }
+        if (table.length === 0) {
+          continue; // skipping empty tables
+        }
+        tables[table.tag] = table;
+      }
+
+      var isTrueType = !tables['CFF '];
+      if (!isTrueType) {
+        // OpenType font
+        if (header.version === 'OTTO' ||
+            !tables.head || !tables.hhea || !tables.maxp || !tables.post) {
+          // no major tables: throwing everything at CFFFont
+          cffFile = new Stream(tables['CFF '].data);
+          cff = new CFFFont(cffFile, properties);
+
+          return this.convert(name, cff, properties);
+        }
+
+        delete tables.glyf;
+        delete tables.loca;
+        delete tables.fpgm;
+        delete tables.prep;
+        delete tables['cvt '];
+        this.isOpenType = true;
+      } else {
+        if (!tables.glyf || !tables.loca) {
+          error('Required "glyf" or "loca" tables are not found');
+        }
+        this.isOpenType = false;
+      }
+
+      if (!tables.maxp) {
+        error('Required "maxp" table is not found');
+      }
+
+      font.pos = (font.start || 0) + tables.maxp.offset;
+      var version = font.getInt32();
+      var numGlyphs = font.getUint16();
+      var maxFunctionDefs = 0;
+      if (version >= 0x00010000 && tables.maxp.length >= 22) {
+        // maxZones can be invalid
+        font.pos += 8;
+        var maxZones = font.getUint16();
+        if (maxZones > 2) { // reset to 2 if font has invalid maxZones
+          tables.maxp.data[14] = 0;
+          tables.maxp.data[15] = 2;
+        }
+        font.pos += 4;
+        maxFunctionDefs = font.getUint16();
+      }
+
+      var dupFirstEntry = false;
+      if (properties.type === 'CIDFontType2' && properties.toUnicode &&
+          properties.toUnicode.get(0) > '\u0000') {
+        // oracle's defect (see 3427), duplicating first entry
+        dupFirstEntry = true;
+        numGlyphs++;
+        tables.maxp.data[4] = numGlyphs >> 8;
+        tables.maxp.data[5] = numGlyphs & 255;
+      }
+
+      var hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep,
+                                          tables['cvt '], maxFunctionDefs);
+      if (!hintsValid) {
+        delete tables.fpgm;
+        delete tables.prep;
+        delete tables['cvt '];
+      }
+
+      // Ensure the hmtx table contains the advance width and
+      // sidebearings information for numGlyphs in the maxp table
+      sanitizeMetrics(font, tables.hhea, tables.hmtx, numGlyphs);
+
+      if (!tables.head) {
+        error('Required "head" table is not found');
+      }
+
+      sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0);
+
+      var missingGlyphs = {};
+      if (isTrueType) {
+        var isGlyphLocationsLong = int16(tables.head.data[50],
+                                         tables.head.data[51]);
+        missingGlyphs = sanitizeGlyphLocations(tables.loca, tables.glyf,
+                                               numGlyphs, isGlyphLocationsLong,
+                                               hintsValid, dupFirstEntry);
+      }
+
+      if (!tables.hhea) {
+        error('Required "hhea" table is not found');
+      }
+
+      // Sanitizer reduces the glyph advanceWidth to the maxAdvanceWidth
+      // Sometimes it's 0. That needs to be fixed
+      if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) {
+        tables.hhea.data[10] = 0xFF;
+        tables.hhea.data[11] = 0xFF;
+      }
+
+      // The 'post' table has glyphs names.
+      if (tables.post) {
+        var valid = readPostScriptTable(tables.post, properties, numGlyphs);
+        if (!valid) {
+          tables.post = null;
+        }
+      }
+
+      var charCodeToGlyphId = [], charCode, toUnicode = properties.toUnicode;
+
+      function hasGlyph(glyphId, charCode) {
+        if (!missingGlyphs[glyphId]) {
+          return true;
+        }
+        if (charCode >= 0 && toUnicode.has(charCode)) {
+          return true;
+        }
+        return false;
+      }
+
+      if (properties.type === 'CIDFontType2') {
+        var cidToGidMap = properties.cidToGidMap || [];
+        var isCidToGidMapEmpty = cidToGidMap.length === 0;
+
+        properties.cMap.forEach(function(charCode, cid) {
+          assert(cid <= 0xffff, 'Max size of CID is 65,535');
+          var glyphId = -1;
+          if (isCidToGidMapEmpty) {
+            glyphId = charCode;
+          } else if (cidToGidMap[cid] !== undefined) {
+            glyphId = cidToGidMap[cid];
+          }
+
+          if (glyphId >= 0 && glyphId < numGlyphs &&
+              hasGlyph(glyphId, charCode)) {
+            charCodeToGlyphId[charCode] = glyphId;
+          }
+        });
+        if (dupFirstEntry) {
+          charCodeToGlyphId[0] = numGlyphs - 1;
+        }
+      } else {
+        // Most of the following logic in this code branch is based on the
+        // 9.6.6.4 of the PDF spec.
+        var cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont);
+        var cmapPlatformId = cmapTable.platformId;
+        var cmapEncodingId = cmapTable.encodingId;
+        var cmapMappings = cmapTable.mappings;
+        var cmapMappingsLength = cmapMappings.length;
+        var hasEncoding = properties.differences.length ||
+                          !!properties.baseEncodingName;
+
+        // The spec seems to imply that if the font is symbolic the encoding
+        // should be ignored, this doesn't appear to work for 'preistabelle.pdf'
+        // where the the font is symbolic and it has an encoding.
+        if (hasEncoding &&
+            (cmapPlatformId === 3 && cmapEncodingId === 1 ||
+             cmapPlatformId === 1 && cmapEncodingId === 0) ||
+            (cmapPlatformId === -1 && cmapEncodingId === -1 && // Temporary hack
+             !!Encodings[properties.baseEncodingName])) {      // Temporary hack
+          // When no preferred cmap table was found and |baseEncodingName| is
+          // one of the predefined encodings, we seem to obtain a better
+          // |charCodeToGlyphId| map from the code below (fixes bug 1057544).
+          // TODO: Note that this is a hack which should be removed as soon as
+          //       we have proper support for more exotic cmap tables.
+
+          var baseEncoding = [];
+          if (properties.baseEncodingName === 'MacRomanEncoding' ||
+              properties.baseEncodingName === 'WinAnsiEncoding') {
+            baseEncoding = Encodings[properties.baseEncodingName];
+          }
+          for (charCode = 0; charCode < 256; charCode++) {
+            var glyphName;
+            if (this.differences && charCode in this.differences) {
+              glyphName = this.differences[charCode];
+            } else if (charCode in baseEncoding &&
+                       baseEncoding[charCode] !== '') {
+              glyphName = baseEncoding[charCode];
+            } else {
+              glyphName = Encodings.StandardEncoding[charCode];
+            }
+            if (!glyphName) {
+              continue;
+            }
+            var unicodeOrCharCode;
+            if (cmapPlatformId === 3 && cmapEncodingId === 1) {
+              unicodeOrCharCode = GlyphsUnicode[glyphName];
+            } else if (cmapPlatformId === 1 && cmapEncodingId === 0) {
+              // TODO: the encoding needs to be updated with mac os table.
+              unicodeOrCharCode = Encodings.MacRomanEncoding.indexOf(glyphName);
+            }
+
+            var found = false;
+            for (i = 0; i < cmapMappingsLength; ++i) {
+              if (cmapMappings[i].charCode === unicodeOrCharCode &&
+                  hasGlyph(cmapMappings[i].glyphId, unicodeOrCharCode)) {
+                charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;
+                found = true;
+                break;
+              }
+            }
+            if (!found && properties.glyphNames) {
+              // Try to map using the post table. There are currently no known
+              // pdfs that this fixes.
+              var glyphId = properties.glyphNames.indexOf(glyphName);
+              if (glyphId > 0 && hasGlyph(glyphId, -1)) {
+                charCodeToGlyphId[charCode] = glyphId;
+              }
+            }
+          }
+        } else if (cmapPlatformId === 0 && cmapEncodingId === 0) {
+          // Default Unicode semantics, use the charcodes as is.
+          for (i = 0; i < cmapMappingsLength; ++i) {
+            charCodeToGlyphId[cmapMappings[i].charCode] =
+              cmapMappings[i].glyphId;
+          }
+        } else {
+          // For (3, 0) cmap tables:
+          // The charcode key being stored in charCodeToGlyphId is the lower
+          // byte of the two-byte charcodes of the cmap table since according to
+          // the spec: 'each byte from the string shall be prepended with the
+          // high byte of the range [of charcodes in the cmap table], to form
+          // a two-byte character, which shall be used to select the
+          // associated glyph description from the subtable'.
+          //
+          // For (1, 0) cmap tables:
+          // 'single bytes from the string shall be used to look up the
+          // associated glyph descriptions from the subtable'. This means
+          // charcodes in the cmap will be single bytes, so no-op since
+          // glyph.charCode & 0xFF === glyph.charCode
+          for (i = 0; i < cmapMappingsLength; ++i) {
+            charCode = cmapMappings[i].charCode & 0xFF;
+            charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;
+          }
+        }
+      }
+
+      if (charCodeToGlyphId.length === 0) {
+        // defines at least one glyph
+        charCodeToGlyphId[0] = 0;
+      }
+
+      // Converting glyphs and ids into font's cmap table
+      var newMapping = adjustMapping(charCodeToGlyphId, properties);
+      this.toFontChar = newMapping.toFontChar;
+      tables.cmap = {
+        tag: 'cmap',
+        data: createCmapTable(newMapping.charCodeToGlyphId)
+      };
+
+      if (!tables['OS/2'] || !validateOS2Table(tables['OS/2'])) {
+        // extract some more font properties from the OpenType head and
+        // hhea tables; yMin and descent value are always negative
+        var override = {
+          unitsPerEm: int16(tables.head.data[18], tables.head.data[19]),
+          yMax: int16(tables.head.data[42], tables.head.data[43]),
+          yMin: int16(tables.head.data[38], tables.head.data[39]) - 0x10000,
+          ascent: int16(tables.hhea.data[4], tables.hhea.data[5]),
+          descent: int16(tables.hhea.data[6], tables.hhea.data[7]) - 0x10000
+        };
+
+        tables['OS/2'] = {
+          tag: 'OS/2',
+          data: createOS2Table(properties, newMapping.charCodeToGlyphId,
+                               override)
+        };
+      }
+
+      // Rewrite the 'post' table if needed
+      if (!tables.post) {
+        tables.post = {
+          tag: 'post',
+          data: createPostTable(properties)
+        };
+      }
+
+      if (!isTrueType) {
+        try {
+          // Trying to repair CFF file
+          cffFile = new Stream(tables['CFF '].data);
+          var parser = new CFFParser(cffFile, properties);
+          cff = parser.parse();
+          var compiler = new CFFCompiler(cff);
+          tables['CFF '].data = compiler.compile();
+        } catch (e) {
+          warn('Failed to compile font ' + properties.loadedName);
+        }
+      }
+
+      // Re-creating 'name' table
+      if (!tables.name) {
+        tables.name = {
+          tag: 'name',
+          data: createNameTable(this.name)
+        };
+      } else {
+        // ... using existing 'name' table as prototype
+        var namePrototype = readNameTable(tables.name);
+        tables.name.data = createNameTable(name, namePrototype);
+      }
+
+      var builder = new OpenTypeFileBuilder(header.version);
+      for (var tableTag in tables) {
+        builder.addTable(tableTag, tables[tableTag].data);
+      }
+      return builder.toArray();
+    },
+
+    convert: function Font_convert(fontName, font, properties) {
+      // TODO: Check the charstring widths to determine this.
+      properties.fixedPitch = false;
+
+      var mapping = font.getGlyphMapping(properties);
+      var newMapping = adjustMapping(mapping, properties);
+      this.toFontChar = newMapping.toFontChar;
+      var numGlyphs = font.numGlyphs;
+
+      function getCharCodes(charCodeToGlyphId, glyphId) {
+        var charCodes = null;
+        for (var charCode in charCodeToGlyphId) {
+          if (glyphId === charCodeToGlyphId[charCode]) {
+            if (!charCodes) {
+              charCodes = [];
+            }
+            charCodes.push(charCode | 0);
+          }
+        }
+        return charCodes;
+      }
+
+      function createCharCode(charCodeToGlyphId, glyphId) {
+        for (var charCode in charCodeToGlyphId) {
+          if (glyphId === charCodeToGlyphId[charCode]) {
+            return charCode | 0;
+          }
+        }
+        newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] =
+            glyphId;
+        return newMapping.nextAvailableFontCharCode++;
+      }
+
+      var seacs = font.seacs;
+      if (SEAC_ANALYSIS_ENABLED && seacs && seacs.length) {
+        var matrix = properties.fontMatrix || FONT_IDENTITY_MATRIX;
+        var charset = font.getCharset();
+        var seacMap = Object.create(null);
+        for (var glyphId in seacs) {
+          glyphId |= 0;
+          var seac = seacs[glyphId];
+          var baseGlyphName = Encodings.StandardEncoding[seac[2]];
+          var accentGlyphName = Encodings.StandardEncoding[seac[3]];
+          var baseGlyphId = charset.indexOf(baseGlyphName);
+          var accentGlyphId = charset.indexOf(accentGlyphName);
+          if (baseGlyphId < 0 || accentGlyphId < 0) {
+            continue;
+          }
+          var accentOffset = {
+            x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4],
+            y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5]
+          };
+
+          var charCodes = getCharCodes(mapping, glyphId);
+          if (!charCodes) {
+            // There's no point in mapping it if the char code was never mapped
+            // to begin with.
+            continue;
+          }
+          for (var i = 0, ii = charCodes.length; i < ii; i++) {
+            var charCode = charCodes[i];
+            // Find a fontCharCode that maps to the base and accent glyphs.
+            // If one doesn't exists, create it.
+            var charCodeToGlyphId = newMapping.charCodeToGlyphId;
+            var baseFontCharCode = createCharCode(charCodeToGlyphId,
+                                                  baseGlyphId);
+            var accentFontCharCode = createCharCode(charCodeToGlyphId,
+                                                    accentGlyphId);
+            seacMap[charCode] = {
+              baseFontCharCode: baseFontCharCode,
+              accentFontCharCode: accentFontCharCode,
+              accentOffset: accentOffset
+            };
+          }
+        }
+        properties.seacMap = seacMap;
+      }
+
+      var unitsPerEm = 1 / (properties.fontMatrix || FONT_IDENTITY_MATRIX)[0];
+
+      var builder = new OpenTypeFileBuilder('\x4F\x54\x54\x4F');
+      // PostScript Font Program
+      builder.addTable('CFF ', font.data);
+      // OS/2 and Windows Specific metrics
+      builder.addTable('OS/2', createOS2Table(properties,
+                                              newMapping.charCodeToGlyphId));
+      // Character to glyphs mapping
+      builder.addTable('cmap', createCmapTable(newMapping.charCodeToGlyphId));
+      // Font header
+      builder.addTable('head',
+            '\x00\x01\x00\x00' + // Version number
+            '\x00\x00\x10\x00' + // fontRevision
+            '\x00\x00\x00\x00' + // checksumAdjustement
+            '\x5F\x0F\x3C\xF5' + // magicNumber
+            '\x00\x00' + // Flags
+            safeString16(unitsPerEm) + // unitsPerEM
+            '\x00\x00\x00\x00\x9e\x0b\x7e\x27' + // creation date
+            '\x00\x00\x00\x00\x9e\x0b\x7e\x27' + // modifification date
+            '\x00\x00' + // xMin
+            safeString16(properties.descent) + // yMin
+            '\x0F\xFF' + // xMax
+            safeString16(properties.ascent) + // yMax
+            string16(properties.italicAngle ? 2 : 0) + // macStyle
+            '\x00\x11' + // lowestRecPPEM
+            '\x00\x00' + // fontDirectionHint
+            '\x00\x00' + // indexToLocFormat
+            '\x00\x00');  // glyphDataFormat
+
+      // Horizontal header
+      builder.addTable('hhea',
+            '\x00\x01\x00\x00' + // Version number
+            safeString16(properties.ascent) + // Typographic Ascent
+            safeString16(properties.descent) + // Typographic Descent
+            '\x00\x00' + // Line Gap
+            '\xFF\xFF' + // advanceWidthMax
+            '\x00\x00' + // minLeftSidebearing
+            '\x00\x00' + // minRightSidebearing
+            '\x00\x00' + // xMaxExtent
+            safeString16(properties.capHeight) + // caretSlopeRise
+            safeString16(Math.tan(properties.italicAngle) *
+                         properties.xHeight) + // caretSlopeRun
+            '\x00\x00' + // caretOffset
+            '\x00\x00' + // -reserved-
+            '\x00\x00' + // -reserved-
+            '\x00\x00' + // -reserved-
+            '\x00\x00' + // -reserved-
+            '\x00\x00' + // metricDataFormat
+            string16(numGlyphs)); // Number of HMetrics
+
+      // Horizontal metrics
+      builder.addTable('hmtx', (function fontFieldsHmtx() {
+          var charstrings = font.charstrings;
+          var cffWidths = font.cff ? font.cff.widths : null;
+          var hmtx = '\x00\x00\x00\x00'; // Fake .notdef
+          for (var i = 1, ii = numGlyphs; i < ii; i++) {
+            var width = 0;
+            if (charstrings) {
+              var charstring = charstrings[i - 1];
+              width = 'width' in charstring ? charstring.width : 0;
+            } else if (cffWidths) {
+              width = Math.ceil(cffWidths[i] || 0);
+            }
+            hmtx += string16(width) + string16(0);
+          }
+          return hmtx;
+        })());
+
+      // Maximum profile
+      builder.addTable('maxp',
+            '\x00\x00\x50\x00' + // Version number
+            string16(numGlyphs)); // Num of glyphs
+
+      // Naming tables
+      builder.addTable('name', createNameTable(fontName));
+
+      // PostScript informations
+      builder.addTable('post', createPostTable(properties));
+
+      return builder.toArray();
+    },
+
+    /**
+     * Builds a char code to unicode map based on section 9.10 of the spec.
+     * @param {Object} properties Font properties object.
+     * @return {Object} A ToUnicodeMap object.
+     */
+    buildToUnicode: function Font_buildToUnicode(properties) {
+      // Section 9.10.2 Mapping Character Codes to Unicode Values
+      if (properties.toUnicode && properties.toUnicode.length !== 0) {
+        return properties.toUnicode;
+      }
+      // According to the spec if the font is a simple font we should only map
+      // to unicode if the base encoding is MacRoman, MacExpert, or WinAnsi or
+      // the differences array only contains adobe standard or symbol set names,
+      // in pratice it seems better to always try to create a toUnicode
+      // map based of the default encoding.
+      var toUnicode, charcode;
+      if (!properties.composite /* is simple font */) {
+        toUnicode = [];
+        var encoding = properties.defaultEncoding.slice();
+        var baseEncodingName = properties.baseEncodingName;
+        // Merge in the differences array.
+        var differences = properties.differences;
+        for (charcode in differences) {
+          encoding[charcode] = differences[charcode];
+        }
+        for (charcode in encoding) {
+          // a) Map the character code to a character name.
+          var glyphName = encoding[charcode];
+          // b) Look up the character name in the Adobe Glyph List (see the
+          //    Bibliography) to obtain the corresponding Unicode value.
+          if (glyphName === '') {
+            continue;
+          } else if (GlyphsUnicode[glyphName] === undefined) {
+            // (undocumented) c) Few heuristics to recognize unknown glyphs
+            // NOTE: Adobe Reader does not do this step, but OSX Preview does
+            var code = 0;
+            switch (glyphName[0]) {
+              case 'G': // Gxx glyph
+                if (glyphName.length === 3) {
+                  code = parseInt(glyphName.substr(1), 16);
+                }
+                break;
+              case 'g': // g00xx glyph
+                if (glyphName.length === 5) {
+                  code = parseInt(glyphName.substr(1), 16);
+                }
+                break;
+              case 'C': // Cddd glyph
+              case 'c': // cddd glyph
+                if (glyphName.length >= 3) {
+                  code = +glyphName.substr(1);
+                }
+                break;
+            }
+            if (code) {
+              // If |baseEncodingName| is one the predefined encodings,
+              // and |code| equals |charcode|, using the glyph defined in the
+              // baseEncoding seems to yield a better |toUnicode| mapping
+              // (fixes issue 5070).
+              if (baseEncodingName && code === +charcode) {
+                var baseEncoding = Encodings[baseEncodingName];
+                if (baseEncoding && (glyphName = baseEncoding[charcode])) {
+                  toUnicode[charcode] =
+                    String.fromCharCode(GlyphsUnicode[glyphName]);
+                  continue;
+                }
+              }
+              toUnicode[charcode] = String.fromCharCode(code);
+            }
+            continue;
+          }
+          toUnicode[charcode] = String.fromCharCode(GlyphsUnicode[glyphName]);
+        }
+        return new ToUnicodeMap(toUnicode);
+      }
+      // If the font is a composite font that uses one of the predefined CMaps
+      // listed in Table 118 (except Identity–H and Identity–V) or whose
+      // descendant CIDFont uses the Adobe-GB1, Adobe-CNS1, Adobe-Japan1, or
+      // Adobe-Korea1 character collection:
+      if (properties.composite && (
+           (properties.cMap.builtInCMap &&
+            !(properties.cMap instanceof IdentityCMap)) ||
+           (properties.cidSystemInfo.registry === 'Adobe' &&
+             (properties.cidSystemInfo.ordering === 'GB1' ||
+              properties.cidSystemInfo.ordering === 'CNS1' ||
+              properties.cidSystemInfo.ordering === 'Japan1' ||
+              properties.cidSystemInfo.ordering === 'Korea1')))) {
+        // Then:
+        // a) Map the character code to a character identifier (CID) according
+        // to the font’s CMap.
+        // b) Obtain the registry and ordering of the character collection used
+        // by the font’s CMap (for example, Adobe and Japan1) from its
+        // CIDSystemInfo dictionary.
+        var registry = properties.cidSystemInfo.registry;
+        var ordering = properties.cidSystemInfo.ordering;
+        // c) Construct a second CMap name by concatenating the registry and
+        // ordering obtained in step (b) in the format registry–ordering–UCS2
+        // (for example, Adobe–Japan1–UCS2).
+        var ucs2CMapName = new Name(registry + '-' + ordering + '-UCS2');
+        // d) Obtain the CMap with the name constructed in step (c) (available
+        // from the ASN Web site; see the Bibliography).
+        var ucs2CMap = CMapFactory.create(ucs2CMapName,
+          { url: PDFJS.cMapUrl, packed: PDFJS.cMapPacked }, null);
+        var cMap = properties.cMap;
+        toUnicode = [];
+        cMap.forEach(function(charcode, cid) {
+          assert(cid <= 0xffff, 'Max size of CID is 65,535');
+          // e) Map the CID obtained in step (a) according to the CMap obtained
+          // in step (d), producing a Unicode value.
+          var ucs2 = ucs2CMap.lookup(cid);
+          if (ucs2) {
+            toUnicode[charcode] =
+              String.fromCharCode((ucs2.charCodeAt(0) << 8) +
+                                  ucs2.charCodeAt(1));
+          }
+        });
+        return new ToUnicodeMap(toUnicode);
+      }
+
+      // The viewer's choice, just use an identity map.
+      return new IdentityToUnicodeMap(properties.firstChar,
+                                      properties.lastChar);
+    },
+
+    get spaceWidth() {
+      if ('_shadowWidth' in this) {
+        return this._shadowWidth;
+      }
+
+      // trying to estimate space character width
+      var possibleSpaceReplacements = ['space', 'minus', 'one', 'i'];
+      var width;
+      for (var i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) {
+        var glyphName = possibleSpaceReplacements[i];
+        // if possible, getting width by glyph name
+        if (glyphName in this.widths) {
+          width = this.widths[glyphName];
+          break;
+        }
+        var glyphUnicode = GlyphsUnicode[glyphName];
+        // finding the charcode via unicodeToCID map
+        var charcode = 0;
+        if (this.composite) {
+          if (this.cMap.contains(glyphUnicode)) {
+            charcode = this.cMap.lookup(glyphUnicode);
+          }
+        }
+        // ... via toUnicode map
+        if (!charcode && 'toUnicode' in this) {
+          charcode = this.toUnicode.charCodeOf(glyphUnicode);
+        }
+        // setting it to unicode if negative or undefined
+        if (charcode <= 0) {
+          charcode = glyphUnicode;
+        }
+        // trying to get width via charcode
+        width = this.widths[charcode];
+        if (width) {
+          break; // the non-zero width found
+        }
+      }
+      width = width || this.defaultWidth;
+      // Do not shadow the property here. See discussion:
+      // https://github.com/mozilla/pdf.js/pull/2127#discussion_r1662280
+      this._shadowWidth = width;
+      return width;
+    },
+
+    charToGlyph: function Font_charToGlyph(charcode) {
+      var fontCharCode, width, operatorListId;
+
+      var widthCode = charcode;
+      if (this.cMap && this.cMap.contains(charcode)) {
+        widthCode = this.cMap.lookup(charcode);
+      }
+      width = this.widths[widthCode];
+      width = isNum(width) ? width : this.defaultWidth;
+      var vmetric = this.vmetrics && this.vmetrics[widthCode];
+
+      var unicode = this.toUnicode.get(charcode) || charcode;
+      if (typeof unicode === 'number') {
+        unicode = String.fromCharCode(unicode);
+      }
+
+      // First try the toFontChar map, if it's not there then try falling
+      // back to the char code.
+      fontCharCode = this.toFontChar[charcode] || charcode;
+      if (this.missingFile) {
+        fontCharCode = mapSpecialUnicodeValues(fontCharCode);
+      }
+
+      if (this.isType3Font) {
+        // Font char code in this case is actually a glyph name.
+        operatorListId = fontCharCode;
+      }
+
+      var accent = null;
+      if (this.seacMap && this.seacMap[charcode]) {
+        var seac = this.seacMap[charcode];
+        fontCharCode = seac.baseFontCharCode;
+        accent = {
+          fontChar: String.fromCharCode(seac.accentFontCharCode),
+          offset: seac.accentOffset
+        };
+      }
+
+      var fontChar = String.fromCharCode(fontCharCode);
+
+      var glyph = this.glyphCache[charcode];
+      if (!glyph ||
+          !glyph.matchesForCache(fontChar, unicode, accent, width, vmetric,
+                                 operatorListId)) {
+        glyph = new Glyph(fontChar, unicode, accent, width, vmetric,
+                          operatorListId);
+        this.glyphCache[charcode] = glyph;
+      }
+      return glyph;
+    },
+
+    charsToGlyphs: function Font_charsToGlyphs(chars) {
+      var charsCache = this.charsCache;
+      var glyphs, glyph, charcode;
+
+      // if we translated this string before, just grab it from the cache
+      if (charsCache) {
+        glyphs = charsCache[chars];
+        if (glyphs) {
+          return glyphs;
+        }
+      }
+
+      // lazily create the translation cache
+      if (!charsCache) {
+        charsCache = this.charsCache = Object.create(null);
+      }
+
+      glyphs = [];
+      var charsCacheKey = chars;
+      var i = 0, ii;
+
+      if (this.cMap) {
+        // composite fonts have multi-byte strings convert the string from
+        // single-byte to multi-byte
+        var c = {};
+        while (i < chars.length) {
+          this.cMap.readCharCode(chars, i, c);
+          charcode = c.charcode;
+          var length = c.length;
+          i += length;
+          glyph = this.charToGlyph(charcode);
+          glyphs.push(glyph);
+          // placing null after each word break charcode (ASCII SPACE)
+          // Ignore occurences of 0x20 in multiple-byte codes.
+          if (length === 1 && chars.charCodeAt(i - 1) === 0x20) {
+            glyphs.push(null);
+          }
+        }
+      } else {
+        for (i = 0, ii = chars.length; i < ii; ++i) {
+          charcode = chars.charCodeAt(i);
+          glyph = this.charToGlyph(charcode);
+          glyphs.push(glyph);
+          if (charcode === 0x20) {
+            glyphs.push(null);
+          }
+        }
+      }
+
+      // Enter the translated string into the cache
+      return (charsCache[charsCacheKey] = glyphs);
+    }
+  };
+
+  return Font;
+})();
+
+var ErrorFont = (function ErrorFontClosure() {
+  function ErrorFont(error) {
+    this.error = error;
+    this.loadedName = 'g_font_error';
+    this.loading = false;
+  }
+
+  ErrorFont.prototype = {
+    charsToGlyphs: function ErrorFont_charsToGlyphs() {
+      return [];
+    },
+    exportData: function ErrorFont_exportData() {
+      return {error: this.error};
+    }
+  };
+
+  return ErrorFont;
+})();
+
+/**
+ * Shared logic for building a char code to glyph id mapping for Type1 and
+ * simple CFF fonts. See section 9.6.6.2 of the spec.
+ * @param {Object} properties Font properties object.
+ * @param {Object} builtInEncoding The encoding contained within the actual font
+ * data.
+ * @param {Array} Array of glyph names where the index is the glyph ID.
+ * @returns {Object} A char code to glyph ID map.
+ */
+function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) {
+  var charCodeToGlyphId = Object.create(null);
+  var glyphId, charCode, baseEncoding;
+
+  if (properties.baseEncodingName) {
+    // If a valid base encoding name was used, the mapping is initialized with
+    // that.
+    baseEncoding = Encodings[properties.baseEncodingName];
+    for (charCode = 0; charCode < baseEncoding.length; charCode++) {
+      glyphId = glyphNames.indexOf(baseEncoding[charCode]);
+      if (glyphId >= 0) {
+        charCodeToGlyphId[charCode] = glyphId;
+      } else {
+        charCodeToGlyphId[charCode] = 0; // notdef
+      }
+    }
+  } else if (!!(properties.flags & FontFlags.Symbolic)) {
+    // For a symbolic font the encoding should be the fonts built-in
+    // encoding.
+    for (charCode in builtInEncoding) {
+      charCodeToGlyphId[charCode] = builtInEncoding[charCode];
+    }
+  } else {
+    // For non-symbolic fonts that don't have a base encoding the standard
+    // encoding should be used.
+    baseEncoding = Encodings.StandardEncoding;
+    for (charCode = 0; charCode < baseEncoding.length; charCode++) {
+      glyphId = glyphNames.indexOf(baseEncoding[charCode]);
+      if (glyphId >= 0) {
+        charCodeToGlyphId[charCode] = glyphId;
+      } else {
+        charCodeToGlyphId[charCode] = 0; // notdef
+      }
+    }
+  }
+
+  // Lastly, merge in the differences.
+  var differences = properties.differences;
+  if (differences) {
+    for (charCode in differences) {
+      var glyphName = differences[charCode];
+      glyphId = glyphNames.indexOf(glyphName);
+      if (glyphId >= 0) {
+        charCodeToGlyphId[charCode] = glyphId;
+      } else {
+        charCodeToGlyphId[charCode] = 0; // notdef
+      }
+    }
+  }
+  return charCodeToGlyphId;
+}
+
+/*
+ * CharStrings are encoded following the the CharString Encoding sequence
+ * describe in Chapter 6 of the "Adobe Type1 Font Format" specification.
+ * The value in a byte indicates a command, a number, or subsequent bytes
+ * that are to be interpreted in a special way.
+ *
+ * CharString Number Encoding:
+ *  A CharString byte containing the values from 32 through 255 inclusive
+ *  indicate an integer. These values are decoded in four ranges.
+ *
+ * 1. A CharString byte containing a value, v, between 32 and 246 inclusive,
+ * indicate the integer v - 139. Thus, the integer values from -107 through
+ * 107 inclusive may be encoded in single byte.
+ *
+ * 2. A CharString byte containing a value, v, between 247 and 250 inclusive,
+ * indicates an integer involving the next byte, w, according to the formula:
+ * [(v - 247) x 256] + w + 108
+ *
+ * 3. A CharString byte containing a value, v, between 251 and 254 inclusive,
+ * indicates an integer involving the next byte, w, according to the formula:
+ * -[(v - 251) * 256] - w - 108
+ *
+ * 4. A CharString containing the value 255 indicates that the next 4 bytes
+ * are a two complement signed integer. The first of these bytes contains the
+ * highest order bits, the second byte contains the next higher order bits
+ * and the fourth byte contain the lowest order bits.
+ *
+ *
+ * CharString Command Encoding:
+ *  CharStrings commands are encoded in 1 or 2 bytes.
+ *
+ *  Single byte commands are encoded in 1 byte that contains a value between
+ *  0 and 31 inclusive.
+ *  If a command byte contains the value 12, then the value in the next byte
+ *  indicates a command. This "escape" mechanism allows many extra commands
+ * to be encoded and this encoding technique helps to minimize the length of
+ * the charStrings.
+ */
+var Type1CharString = (function Type1CharStringClosure() {
+  var COMMAND_MAP = {
+    'hstem': [1],
+    'vstem': [3],
+    'vmoveto': [4],
+    'rlineto': [5],
+    'hlineto': [6],
+    'vlineto': [7],
+    'rrcurveto': [8],
+    'callsubr': [10],
+    'flex': [12, 35],
+    'drop' : [12, 18],
+    'endchar': [14],
+    'rmoveto': [21],
+    'hmoveto': [22],
+    'vhcurveto': [30],
+    'hvcurveto': [31]
+  };
+
+  function Type1CharString() {
+    this.width = 0;
+    this.lsb = 0;
+    this.flexing = false;
+    this.output = [];
+    this.stack = [];
+  }
+
+  Type1CharString.prototype = {
+    convert: function Type1CharString_convert(encoded, subrs) {
+      var count = encoded.length;
+      var error = false;
+      var wx, sbx, subrNumber;
+      for (var i = 0; i < count; i++) {
+        var value = encoded[i];
+        if (value < 32) {
+          if (value === 12) {
+            value = (value << 8) + encoded[++i];
+          }
+          switch (value) {
+            case 1: // hstem
+              if (!HINTING_ENABLED) {
+                this.stack = [];
+                break;
+              }
+              error = this.executeCommand(2, COMMAND_MAP.hstem);
+              break;
+            case 3: // vstem
+              if (!HINTING_ENABLED) {
+                this.stack = [];
+                break;
+              }
+              error = this.executeCommand(2, COMMAND_MAP.vstem);
+              break;
+            case 4: // vmoveto
+              if (this.flexing) {
+                if (this.stack.length < 1) {
+                  error = true;
+                  break;
+                }
+                // Add the dx for flex and but also swap the values so they are
+                // the right order.
+                var dy = this.stack.pop();
+                this.stack.push(0, dy);
+                break;
+              }
+              error = this.executeCommand(1, COMMAND_MAP.vmoveto);
+              break;
+            case 5: // rlineto
+              error = this.executeCommand(2, COMMAND_MAP.rlineto);
+              break;
+            case 6: // hlineto
+              error = this.executeCommand(1, COMMAND_MAP.hlineto);
+              break;
+            case 7: // vlineto
+              error = this.executeCommand(1, COMMAND_MAP.vlineto);
+              break;
+            case 8: // rrcurveto
+              error = this.executeCommand(6, COMMAND_MAP.rrcurveto);
+              break;
+            case 9: // closepath
+              // closepath is a Type1 command that does not take argument and is
+              // useless in Type2 and it can simply be ignored.
+              this.stack = [];
+              break;
+            case 10: // callsubr
+              if (this.stack.length < 1) {
+                error = true;
+                break;
+              }
+              subrNumber = this.stack.pop();
+              error = this.convert(subrs[subrNumber], subrs);
+              break;
+            case 11: // return
+              return error;
+            case 13: // hsbw
+              if (this.stack.length < 2) {
+                error = true;
+                break;
+              }
+              // To convert to type2 we have to move the width value to the
+              // first part of the charstring and then use hmoveto with lsb.
+              wx = this.stack.pop();
+              sbx = this.stack.pop();
+              this.lsb = sbx;
+              this.width = wx;
+              this.stack.push(wx, sbx);
+              error = this.executeCommand(2, COMMAND_MAP.hmoveto);
+              break;
+            case 14: // endchar
+              this.output.push(COMMAND_MAP.endchar[0]);
+              break;
+            case 21: // rmoveto
+              if (this.flexing) {
+                break;
+              }
+              error = this.executeCommand(2, COMMAND_MAP.rmoveto);
+              break;
+            case 22: // hmoveto
+              if (this.flexing) {
+                // Add the dy for flex.
+                this.stack.push(0);
+                break;
+              }
+              error = this.executeCommand(1, COMMAND_MAP.hmoveto);
+              break;
+            case 30: // vhcurveto
+              error = this.executeCommand(4, COMMAND_MAP.vhcurveto);
+              break;
+            case 31: // hvcurveto
+              error = this.executeCommand(4, COMMAND_MAP.hvcurveto);
+              break;
+            case (12 << 8) + 0: // dotsection
+              // dotsection is a Type1 command to specify some hinting feature
+              // for dots that do not take a parameter and it can safely be
+              // ignored for Type2.
+              this.stack = [];
+              break;
+            case (12 << 8) + 1: // vstem3
+              if (!HINTING_ENABLED) {
+                this.stack = [];
+                break;
+              }
+              // [vh]stem3 are Type1 only and Type2 supports [vh]stem with
+              // multiple parameters, so instead of returning [vh]stem3 take a
+              // shortcut and return [vhstem] instead.
+              error = this.executeCommand(2, COMMAND_MAP.vstem);
+              break;
+            case (12 << 8) + 2: // hstem3
+              if (!HINTING_ENABLED) {
+                 this.stack = [];
+                break;
+              }
+              // See vstem3.
+              error = this.executeCommand(2, COMMAND_MAP.hstem);
+              break;
+            case (12 << 8) + 6: // seac
+              // seac is like type 2's special endchar but it doesn't use the
+              // first argument asb, so remove it.
+              if (SEAC_ANALYSIS_ENABLED) {
+                this.seac = this.stack.splice(-4, 4);
+                error = this.executeCommand(0, COMMAND_MAP.endchar);
+              } else {
+                error = this.executeCommand(4, COMMAND_MAP.endchar);
+              }
+              break;
+            case (12 << 8) + 7: // sbw
+              if (this.stack.length < 4) {
+                error = true;
+                break;
+              }
+              // To convert to type2 we have to move the width value to the
+              // first part of the charstring and then use rmoveto with
+              // (dx, dy). The height argument will not be used for vmtx and
+              // vhea tables reconstruction -- ignoring it.
+              var wy = this.stack.pop();
+              wx = this.stack.pop();
+              var sby = this.stack.pop();
+              sbx = this.stack.pop();
+              this.lsb = sbx;
+              this.width = wx;
+              this.stack.push(wx, sbx, sby);
+              error = this.executeCommand(3, COMMAND_MAP.rmoveto);
+              break;
+            case (12 << 8) + 12: // div
+              if (this.stack.length < 2) {
+                error = true;
+                break;
+              }
+              var num2 = this.stack.pop();
+              var num1 = this.stack.pop();
+              this.stack.push(num1 / num2);
+              break;
+            case (12 << 8) + 16: // callothersubr
+              if (this.stack.length < 2) {
+                error = true;
+                break;
+              }
+              subrNumber = this.stack.pop();
+              var numArgs = this.stack.pop();
+              if (subrNumber === 0 && numArgs === 3) {
+                var flexArgs = this.stack.splice(this.stack.length - 17, 17);
+                this.stack.push(
+                  flexArgs[2] + flexArgs[0], // bcp1x + rpx
+                  flexArgs[3] + flexArgs[1], // bcp1y + rpy
+                  flexArgs[4], // bcp2x
+                  flexArgs[5], // bcp2y
+                  flexArgs[6], // p2x
+                  flexArgs[7], // p2y
+                  flexArgs[8], // bcp3x
+                  flexArgs[9], // bcp3y
+                  flexArgs[10], // bcp4x
+                  flexArgs[11], // bcp4y
+                  flexArgs[12], // p3x
+                  flexArgs[13], // p3y
+                  flexArgs[14] // flexDepth
+                  // 15 = finalx unused by flex
+                  // 16 = finaly unused by flex
+                );
+                error = this.executeCommand(13, COMMAND_MAP.flex, true);
+                this.flexing = false;
+                this.stack.push(flexArgs[15], flexArgs[16]);
+              } else if (subrNumber === 1 && numArgs === 0) {
+                this.flexing = true;
+              }
+              break;
+            case (12 << 8) + 17: // pop
+              // Ignore this since it is only used with othersubr.
+              break;
+            case (12 << 8) + 33: // setcurrentpoint
+              // Ignore for now.
+              this.stack = [];
+              break;
+            default:
+              warn('Unknown type 1 charstring command of "' + value + '"');
+              break;
+          }
+          if (error) {
+            break;
+          }
+          continue;
+        } else if (value <= 246) {
+          value = value - 139;
+        } else if (value <= 250) {
+          value = ((value - 247) * 256) + encoded[++i] + 108;
+        } else if (value <= 254) {
+          value = -((value - 251) * 256) - encoded[++i] - 108;
+        } else {
+          value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 |
+                  (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0;
+        }
+        this.stack.push(value);
+      }
+      return error;
+    },
+
+    executeCommand: function(howManyArgs, command, keepStack) {
+      var stackLength = this.stack.length;
+      if (howManyArgs > stackLength) {
+        return true;
+      }
+      var start = stackLength - howManyArgs;
+      for (var i = start; i < stackLength; i++) {
+        var value = this.stack[i];
+        if (value === (value | 0)) { // int
+          this.output.push(28, (value >> 8) & 0xff, value & 0xff);
+        } else { // fixed point
+          value = (65536 * value) | 0;
+          this.output.push(255,
+                           (value >> 24) & 0xFF,
+                           (value >> 16) & 0xFF,
+                           (value >> 8) & 0xFF,
+                           value & 0xFF);
+        }
+      }
+      this.output.push.apply(this.output, command);
+      if (keepStack) {
+        this.stack.splice(start, howManyArgs);
+      } else {
+        this.stack.length = 0;
+      }
+      return false;
+    }
+  };
+
+  return Type1CharString;
+})();
+
+/*
+ * Type1Parser encapsulate the needed code for parsing a Type1 font
+ * program. Some of its logic depends on the Type2 charstrings
+ * structure.
+ * Note: this doesn't really parse the font since that would require evaluation
+ * of PostScript, but it is possible in most cases to extract what we need
+ * without a full parse.
+ */
+var Type1Parser = (function Type1ParserClosure() {
+  /*
+   * Decrypt a Sequence of Ciphertext Bytes to Produce the Original Sequence
+   * of Plaintext Bytes. The function took a key as a parameter which can be
+   * for decrypting the eexec block of for decoding charStrings.
+   */
+  var EEXEC_ENCRYPT_KEY = 55665;
+  var CHAR_STRS_ENCRYPT_KEY = 4330;
+
+  function isHexDigit(code) {
+    return code >= 48 && code <= 57 || // '0'-'9'
+           code >= 65 && code <= 70 || // 'A'-'F'
+           code >= 97 && code <= 102;  // 'a'-'f'
+  }
+
+  function decrypt(data, key, discardNumber) {
+    var r = key | 0, c1 = 52845, c2 = 22719;
+    var count = data.length;
+    var decrypted = new Uint8Array(count);
+    for (var i = 0; i < count; i++) {
+      var value = data[i];
+      decrypted[i] = value ^ (r >> 8);
+      r = ((value + r) * c1 + c2) & ((1 << 16) - 1);
+    }
+    return Array.prototype.slice.call(decrypted, discardNumber);
+  }
+
+  function decryptAscii(data, key, discardNumber) {
+    var r = key | 0, c1 = 52845, c2 = 22719;
+    var count = data.length, maybeLength = count >>> 1;
+    var decrypted = new Uint8Array(maybeLength);
+    var i, j;
+    for (i = 0, j = 0; i < count; i++) {
+      var digit1 = data[i];
+      if (!isHexDigit(digit1)) {
+        continue;
+      }
+      i++;
+      var digit2;
+      while (i < count && !isHexDigit(digit2 = data[i])) {
+        i++;
+      }
+      if (i < count) {
+        var value = parseInt(String.fromCharCode(digit1, digit2), 16);
+        decrypted[j++] = value ^ (r >> 8);
+        r = ((value + r) * c1 + c2) & ((1 << 16) - 1);
+      }
+    }
+    return Array.prototype.slice.call(decrypted, discardNumber, j);
+  }
+
+  function isSpecial(c) {
+    return c === 0x2F || // '/'
+           c === 0x5B || c === 0x5D || // '[', ']'
+           c === 0x7B || c === 0x7D || // '{', '}'
+           c === 0x28 || c === 0x29; // '(', ')'
+  }
+
+  function Type1Parser(stream, encrypted) {
+    if (encrypted) {
+      var data = stream.getBytes();
+      var isBinary = !(isHexDigit(data[0]) && isHexDigit(data[1]) &&
+                       isHexDigit(data[2]) && isHexDigit(data[3]));
+      stream = new Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) :
+                          decryptAscii(data, EEXEC_ENCRYPT_KEY, 4));
+    }
+    this.stream = stream;
+    this.nextChar();
+  }
+
+  Type1Parser.prototype = {
+    readNumberArray: function Type1Parser_readNumberArray() {
+      this.getToken(); // read '[' or '{' (arrays can start with either)
+      var array = [];
+      while (true) {
+        var token = this.getToken();
+        if (token === null || token === ']' || token === '}') {
+          break;
+        }
+        array.push(parseFloat(token || 0));
+      }
+      return array;
+    },
+
+    readNumber: function Type1Parser_readNumber() {
+      var token = this.getToken();
+      return parseFloat(token || 0);
+    },
+
+    readInt: function Type1Parser_readInt() {
+      // Use '| 0' to prevent setting a double into length such as the double
+      // does not flow into the loop variable.
+      var token = this.getToken();
+      return parseInt(token || 0, 10) | 0;
+    },
+
+    readBoolean: function Type1Parser_readBoolean() {
+      var token = this.getToken();
+
+      // Use 1 and 0 since that's what type2 charstrings use.
+      return token === 'true' ? 1 : 0;
+    },
+
+    nextChar : function Type1_nextChar() {
+      return (this.currentChar = this.stream.getByte());
+    },
+
+    getToken: function Type1Parser_getToken() {
+      // Eat whitespace and comments.
+      var comment = false;
+      var ch = this.currentChar;
+      while (true) {
+        if (ch === -1) {
+          return null;
+        }
+
+        if (comment) {
+          if (ch === 0x0A || ch === 0x0D) {
+            comment = false;
+          }
+        } else if (ch === 0x25) { // '%'
+          comment = true;
+        } else if (!Lexer.isSpace(ch)) {
+          break;
+        }
+        ch = this.nextChar();
+      }
+      if (isSpecial(ch)) {
+        this.nextChar();
+        return String.fromCharCode(ch);
+      }
+      var token = '';
+      do {
+        token += String.fromCharCode(ch);
+        ch = this.nextChar();
+      } while (ch >= 0 && !Lexer.isSpace(ch) && !isSpecial(ch));
+      return token;
+    },
+
+    /*
+     * Returns an object containing a Subrs array and a CharStrings
+     * array extracted from and eexec encrypted block of data
+     */
+    extractFontProgram: function Type1Parser_extractFontProgram() {
+      var stream = this.stream;
+
+      var subrs = [], charstrings = [];
+      var program = {
+        subrs: [],
+        charstrings: [],
+        properties: {
+          'privateData': {
+            'lenIV': 4
+          }
+        }
+      };
+      var token, length, data, lenIV, encoded;
+      while ((token = this.getToken()) !== null) {
+        if (token !== '/') {
+          continue;
+        }
+        token = this.getToken();
+        switch (token) {
+          case 'CharStrings':
+            // The number immediately following CharStrings must be greater or
+            // equal to the number of CharStrings.
+            this.getToken();
+            this.getToken(); // read in 'dict'
+            this.getToken(); // read in 'dup'
+            this.getToken(); // read in 'begin'
+            while(true) {
+              token = this.getToken();
+              if (token === null || token === 'end') {
+                break;
+              }
+
+              if (token !== '/') {
+                continue;
+              }
+              var glyph = this.getToken();
+              length = this.readInt();
+              this.getToken(); // read in 'RD' or '-|'
+              data = stream.makeSubStream(stream.pos, length);
+              lenIV = program.properties.privateData['lenIV'];
+              encoded = decrypt(data.getBytes(), CHAR_STRS_ENCRYPT_KEY, lenIV);
+              // Skip past the required space and binary data.
+              stream.skip(length);
+              this.nextChar();
+              token = this.getToken(); // read in 'ND' or '|-'
+              if (token === 'noaccess') {
+                this.getToken(); // read in 'def'
+              }
+              charstrings.push({
+                glyph: glyph,
+                encoded: encoded
+              });
+            }
+            break;
+          case 'Subrs':
+            var num = this.readInt();
+            this.getToken(); // read in 'array'
+            while ((token = this.getToken()) === 'dup') {
+              var index = this.readInt();
+              length = this.readInt();
+              this.getToken(); // read in 'RD' or '-|'
+              data = stream.makeSubStream(stream.pos, length);
+              lenIV = program.properties.privateData['lenIV'];
+              encoded = decrypt(data.getBytes(), CHAR_STRS_ENCRYPT_KEY, lenIV);
+              // Skip past the required space and binary data.
+              stream.skip(length);
+              this.nextChar();
+              token = this.getToken(); // read in 'NP' or '|'
+              if (token === 'noaccess') {
+                this.getToken(); // read in 'put'
+              }
+              subrs[index] = encoded;
+            }
+            break;
+          case 'BlueValues':
+          case 'OtherBlues':
+          case 'FamilyBlues':
+          case 'FamilyOtherBlues':
+            var blueArray = this.readNumberArray();
+            // *Blue* values may contain invalid data: disables reading of
+            // those values when hinting is disabled.
+            if (blueArray.length > 0 && (blueArray.length % 2) === 0 &&
+                HINTING_ENABLED) {
+              program.properties.privateData[token] = blueArray;
+            }
+            break;
+          case 'StemSnapH':
+          case 'StemSnapV':
+            program.properties.privateData[token] = this.readNumberArray();
+            break;
+          case 'StdHW':
+          case 'StdVW':
+            program.properties.privateData[token] =
+              this.readNumberArray()[0];
+            break;
+          case 'BlueShift':
+          case 'lenIV':
+          case 'BlueFuzz':
+          case 'BlueScale':
+          case 'LanguageGroup':
+          case 'ExpansionFactor':
+            program.properties.privateData[token] = this.readNumber();
+            break;
+          case 'ForceBold':
+            program.properties.privateData[token] = this.readBoolean();
+            break;
+        }
+      }
+
+      for (var i = 0; i < charstrings.length; i++) {
+        glyph = charstrings[i].glyph;
+        encoded = charstrings[i].encoded;
+        var charString = new Type1CharString();
+        var error = charString.convert(encoded, subrs);
+        var output = charString.output;
+        if (error) {
+          // It seems when FreeType encounters an error while evaluating a glyph
+          // that it completely ignores the glyph so we'll mimic that behaviour
+          // here and put an endchar to make the validator happy.
+          output = [14];
+        }
+        program.charstrings.push({
+          glyphName: glyph,
+          charstring: output,
+          width: charString.width,
+          lsb: charString.lsb,
+          seac: charString.seac
+        });
+      }
+
+      return program;
+    },
+
+    extractFontHeader: function Type1Parser_extractFontHeader(properties) {
+      var token;
+      while ((token = this.getToken()) !== null) {
+        if (token !== '/') {
+          continue;
+        }
+        token = this.getToken();
+        switch (token) {
+          case 'FontMatrix':
+            var matrix = this.readNumberArray();
+            properties.fontMatrix = matrix;
+            break;
+          case 'Encoding':
+            var encodingArg = this.getToken();
+            var encoding;
+            if (!/^\d+$/.test(encodingArg)) {
+              // encoding name is specified
+              encoding = Encodings[encodingArg];
+            } else {
+              encoding = [];
+              var size = parseInt(encodingArg, 10) | 0;
+              this.getToken(); // read in 'array'
+
+              for (var j = 0; j < size; j++) {
+                token = this.getToken();
+                // skipping till first dup or def (e.g. ignoring for statement)
+                while (token !== 'dup' && token !== 'def') {
+                  token = this.getToken();
+                  if (token === null) {
+                    return; // invalid header
+                  }
+                }
+                if (token === 'def') {
+                  break; // read all array data
+                }
+                var index = this.readInt();
+                this.getToken(); // read in '/'
+                var glyph = this.getToken();
+                encoding[index] = glyph;
+                this.getToken(); // read the in 'put'
+              }
+            }
+            properties.builtInEncoding = encoding;
+            break;
+          case 'FontBBox':
+            var fontBBox = this.readNumberArray();
+            // adjusting ascent/descent
+            properties.ascent = fontBBox[3];
+            properties.descent = fontBBox[1];
+            properties.ascentScaled = true;
+            break;
+        }
+      }
+    }
+  };
+
+  return Type1Parser;
+})();
+
+/**
+ * The CFF class takes a Type1 file and wrap it into a
+ * 'Compact Font Format' which itself embed Type2 charstrings.
+ */
+var CFFStandardStrings = [
+  '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',
+  'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus',
+  'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four',
+  'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less',
+  'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
+  'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
+  'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum',
+  'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
+  'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
+  'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent',
+  'sterling', 'fraction', 'yen', 'florin', 'section', 'currency',
+  'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft',
+  'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl',
+  'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase',
+  'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', 'questiondown',
+  'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent',
+  'dieresis', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'emdash',
+  'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae',
+  'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior',
+  'logicalnot', 'mu', 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn',
+  'onequarter', 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters',
+  'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior',
+  'copyright', 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring',
+  'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave',
+  'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute',
+  'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute',
+  'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron',
+  'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde',
+  'ccedilla', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute',
+  'icircumflex', 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex',
+  'odieresis', 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex',
+  'udieresis', 'ugrave', 'yacute', 'ydieresis', 'zcaron', 'exclamsmall',
+  'Hungarumlautsmall', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall',
+  'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader',
+  'onedotenleader', 'zerooldstyle', 'oneoldstyle', 'twooldstyle',
+  'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle',
+  'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'commasuperior',
+  'threequartersemdash', 'periodsuperior', 'questionsmall', 'asuperior',
+  'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior',
+  'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',
+  'tsuperior', 'ff', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior',
+  'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall',
+  'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall',
+  'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall',
+  'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall',
+  'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah',
+  'Tildesmall', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall',
+  'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall',
+  'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior',
+  'Ogoneksmall', 'Ringsmall', 'Cedillasmall', 'questiondownsmall', 'oneeighth',
+  'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds',
+  'zerosuperior', 'foursuperior', 'fivesuperior', 'sixsuperior',
+  'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior',
+  'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior',
+  'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior',
+  'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior',
+  'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall',
+  'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall',
+  'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall',
+  'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall',
+  'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall',
+  'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall',
+  'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall',
+  'Thornsmall', 'Ydieresissmall', '001.000', '001.001', '001.002', '001.003',
+  'Black', 'Bold', 'Book', 'Light', 'Medium', 'Regular', 'Roman', 'Semibold'
+];
+
+// Type1Font is also a CIDFontType0.
+var Type1Font = function Type1Font(name, file, properties) {
+  // Some bad generators embed pfb file as is, we have to strip 6-byte headers.
+  // Also, length1 and length2 might be off by 6 bytes as well.
+  // http://www.math.ubc.ca/~cass/piscript/type1.pdf
+  var PFB_HEADER_SIZE = 6;
+  var headerBlockLength = properties.length1;
+  var eexecBlockLength = properties.length2;
+  var pfbHeader = file.peekBytes(PFB_HEADER_SIZE);
+  var pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01;
+  if (pfbHeaderPresent) {
+    file.skip(PFB_HEADER_SIZE);
+    headerBlockLength = (pfbHeader[5] << 24) | (pfbHeader[4] << 16) |
+                        (pfbHeader[3] << 8) | pfbHeader[2];
+  }
+
+  // Get the data block containing glyphs and subrs informations
+  var headerBlock = new Stream(file.getBytes(headerBlockLength));
+  var headerBlockParser = new Type1Parser(headerBlock);
+  headerBlockParser.extractFontHeader(properties);
+
+  if (pfbHeaderPresent) {
+    pfbHeader = file.getBytes(PFB_HEADER_SIZE);
+    eexecBlockLength = (pfbHeader[5] << 24) | (pfbHeader[4] << 16) |
+                       (pfbHeader[3] << 8) | pfbHeader[2];
+  }
+
+  // Decrypt the data blocks and retrieve it's content
+  var eexecBlock = new Stream(file.getBytes(eexecBlockLength));
+  var eexecBlockParser = new Type1Parser(eexecBlock, true);
+  var data = eexecBlockParser.extractFontProgram();
+  for (var info in data.properties) {
+    properties[info] = data.properties[info];
+  }
+
+  var charstrings = data.charstrings;
+  var type2Charstrings = this.getType2Charstrings(charstrings);
+  var subrs = this.getType2Subrs(data.subrs);
+
+  this.charstrings = charstrings;
+  this.data = this.wrap(name, type2Charstrings, this.charstrings,
+                        subrs, properties);
+  this.seacs = this.getSeacs(data.charstrings);
+};
+
+Type1Font.prototype = {
+  get numGlyphs() {
+    return this.charstrings.length + 1;
+  },
+
+  getCharset: function Type1Font_getCharset() {
+    var charset = ['.notdef'];
+    var charstrings = this.charstrings;
+    for (var glyphId = 0; glyphId < charstrings.length; glyphId++) {
+      charset.push(charstrings[glyphId].glyphName);
+    }
+    return charset;
+  },
+
+  getGlyphMapping: function Type1Font_getGlyphMapping(properties) {
+    var charstrings = this.charstrings;
+    var glyphNames = ['.notdef'], glyphId;
+    for (glyphId = 0; glyphId < charstrings.length; glyphId++) {
+      glyphNames.push(charstrings[glyphId].glyphName);
+    }
+    var encoding = properties.builtInEncoding;
+    if (encoding) {
+      var builtInEncoding = {};
+      for (var charCode in encoding) {
+        glyphId = glyphNames.indexOf(encoding[charCode]);
+        if (glyphId >= 0) {
+          builtInEncoding[charCode] = glyphId;
+        }
+      }
+    }
+
+    return type1FontGlyphMapping(properties, builtInEncoding, glyphNames);
+  },
+
+  getSeacs: function Type1Font_getSeacs(charstrings) {
+    var i, ii;
+    var seacMap = [];
+    for (i = 0, ii = charstrings.length; i < ii; i++) {
+      var charstring = charstrings[i];
+      if (charstring.seac) {
+        // Offset by 1 for .notdef
+        seacMap[i + 1] = charstring.seac;
+      }
+    }
+    return seacMap;
+  },
+
+  getType2Charstrings: function Type1Font_getType2Charstrings(
+                                  type1Charstrings) {
+    var type2Charstrings = [];
+    for (var i = 0, ii = type1Charstrings.length; i < ii; i++) {
+      type2Charstrings.push(type1Charstrings[i].charstring);
+    }
+    return type2Charstrings;
+  },
+
+  getType2Subrs: function Type1Font_getType2Subrs(type1Subrs) {
+    var bias = 0;
+    var count = type1Subrs.length;
+    if (count < 1133) {
+      bias = 107;
+    } else if (count < 33769) {
+      bias = 1131;
+    } else {
+      bias = 32768;
+    }
+
+    // Add a bunch of empty subrs to deal with the Type2 bias
+    var type2Subrs = [];
+    var i;
+    for (i = 0; i < bias; i++) {
+      type2Subrs.push([0x0B]);
+    }
+
+    for (i = 0; i < count; i++) {
+      type2Subrs.push(type1Subrs[i]);
+    }
+
+    return type2Subrs;
+  },
+
+  wrap: function Type1Font_wrap(name, glyphs, charstrings, subrs, properties) {
+    var cff = new CFF();
+    cff.header = new CFFHeader(1, 0, 4, 4);
+
+    cff.names = [name];
+
+    var topDict = new CFFTopDict();
+    // CFF strings IDs 0...390 are predefined names, so refering
+    // to entries in our own String INDEX starts at SID 391.
+    topDict.setByName('version', 391);
+    topDict.setByName('Notice', 392);
+    topDict.setByName('FullName', 393);
+    topDict.setByName('FamilyName', 394);
+    topDict.setByName('Weight', 395);
+    topDict.setByName('Encoding', null); // placeholder
+    topDict.setByName('FontMatrix', properties.fontMatrix);
+    topDict.setByName('FontBBox', properties.bbox);
+    topDict.setByName('charset', null); // placeholder
+    topDict.setByName('CharStrings', null); // placeholder
+    topDict.setByName('Private', null); // placeholder
+    cff.topDict = topDict;
+
+    var strings = new CFFStrings();
+    strings.add('Version 0.11'); // Version
+    strings.add('See original notice'); // Notice
+    strings.add(name); // FullName
+    strings.add(name); // FamilyName
+    strings.add('Medium'); // Weight
+    cff.strings = strings;
+
+    cff.globalSubrIndex = new CFFIndex();
+
+    var count = glyphs.length;
+    var charsetArray = [0];
+    var i, ii;
+    for (i = 0; i < count; i++) {
+      var index = CFFStandardStrings.indexOf(charstrings[i].glyphName);
+      // TODO: Insert the string and correctly map it.  Previously it was
+      // thought mapping names that aren't in the standard strings to .notdef
+      // was fine, however in issue818 when mapping them all to .notdef the
+      // adieresis glyph no longer worked.
+      if (index === -1) {
+        index = 0;
+      }
+      charsetArray.push((index >> 8) & 0xff, index & 0xff);
+    }
+    cff.charset = new CFFCharset(false, 0, [], charsetArray);
+
+    var charStringsIndex = new CFFIndex();
+    charStringsIndex.add([0x8B, 0x0E]); // .notdef
+    for (i = 0; i < count; i++) {
+      charStringsIndex.add(glyphs[i]);
+    }
+    cff.charStrings = charStringsIndex;
+
+    var privateDict = new CFFPrivateDict();
+    privateDict.setByName('Subrs', null); // placeholder
+    var fields = [
+      'BlueValues',
+      'OtherBlues',
+      'FamilyBlues',
+      'FamilyOtherBlues',
+      'StemSnapH',
+      'StemSnapV',
+      'BlueShift',
+      'BlueFuzz',
+      'BlueScale',
+      'LanguageGroup',
+      'ExpansionFactor',
+      'ForceBold',
+      'StdHW',
+      'StdVW'
+    ];
+    for (i = 0, ii = fields.length; i < ii; i++) {
+      var field = fields[i];
+      if (!properties.privateData.hasOwnProperty(field)) {
+        continue;
+      }
+      var value = properties.privateData[field];
+      if (isArray(value)) {
+        // All of the private dictionary array data in CFF must be stored as
+        // "delta-encoded" numbers.
+        for (var j = value.length - 1; j > 0; j--) {
+          value[j] -= value[j - 1]; // ... difference from previous value
+        }
+      }
+      privateDict.setByName(field, value);
+    }
+    cff.topDict.privateDict = privateDict;
+
+    var subrIndex = new CFFIndex();
+    for (i = 0, ii = subrs.length; i < ii; i++) {
+      subrIndex.add(subrs[i]);
+    }
+    privateDict.subrsIndex = subrIndex;
+
+    var compiler = new CFFCompiler(cff);
+    return compiler.compile();
+  }
+};
+
+var CFFFont = (function CFFFontClosure() {
+  function CFFFont(file, properties) {
+    this.properties = properties;
+
+    var parser = new CFFParser(file, properties);
+    this.cff = parser.parse();
+    var compiler = new CFFCompiler(this.cff);
+    this.seacs = this.cff.seacs;
+    try {
+      this.data = compiler.compile();
+    } catch (e) {
+      warn('Failed to compile font ' + properties.loadedName);
+      // There may have just been an issue with the compiler, set the data
+      // anyway and hope the font loaded.
+      this.data = file;
+    }
+  }
+
+  CFFFont.prototype = {
+    get numGlyphs() {
+      return this.cff.charStrings.count;
+    },
+    getCharset: function CFFFont_getCharset() {
+      return this.cff.charset.charset;
+    },
+    getGlyphMapping: function CFFFont_getGlyphMapping() {
+      var cff = this.cff;
+      var properties = this.properties;
+      var charsets = cff.charset.charset;
+      var charCodeToGlyphId;
+      var glyphId;
+
+      if (properties.composite) {
+        charCodeToGlyphId = Object.create(null);
+        if (cff.isCIDFont) {
+          // If the font is actually a CID font then we should use the charset
+          // to map CIDs to GIDs.
+          for (glyphId = 0; glyphId < charsets.length; glyphId++) {
+            var cid = charsets[glyphId];
+            var charCode = properties.cMap.charCodeOf(cid);
+            charCodeToGlyphId[charCode] = glyphId;
+          }
+        } else {
+          // If it is NOT actually a CID font then CIDs should be mapped
+          // directly to GIDs.
+          for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) {
+            charCodeToGlyphId[glyphId] = glyphId;
+          }
+        }
+        return charCodeToGlyphId;
+      }
+
+      var encoding = cff.encoding ? cff.encoding.encoding : null;
+      charCodeToGlyphId = type1FontGlyphMapping(properties, encoding, charsets);
+      return charCodeToGlyphId;
+    }
+  };
+
+  return CFFFont;
+})();
+
+var CFFParser = (function CFFParserClosure() {
+  var CharstringValidationData = [
+    null,
+    { id: 'hstem', min: 2, stackClearing: true, stem: true },
+    null,
+    { id: 'vstem', min: 2, stackClearing: true, stem: true },
+    { id: 'vmoveto', min: 1, stackClearing: true },
+    { id: 'rlineto', min: 2, resetStack: true },
+    { id: 'hlineto', min: 1, resetStack: true },
+    { id: 'vlineto', min: 1, resetStack: true },
+    { id: 'rrcurveto', min: 6, resetStack: true },
+    null,
+    { id: 'callsubr', min: 1, undefStack: true },
+    { id: 'return', min: 0, undefStack: true },
+    null, // 12
+    null,
+    { id: 'endchar', min: 0, stackClearing: true },
+    null,
+    null,
+    null,
+    { id: 'hstemhm', min: 2, stackClearing: true, stem: true },
+    { id: 'hintmask', min: 0, stackClearing: true },
+    { id: 'cntrmask', min: 0, stackClearing: true },
+    { id: 'rmoveto', min: 2, stackClearing: true },
+    { id: 'hmoveto', min: 1, stackClearing: true },
+    { id: 'vstemhm', min: 2, stackClearing: true, stem: true },
+    { id: 'rcurveline', min: 8, resetStack: true },
+    { id: 'rlinecurve', min: 8, resetStack: true },
+    { id: 'vvcurveto', min: 4, resetStack: true },
+    { id: 'hhcurveto', min: 4, resetStack: true },
+    null, // shortint
+    { id: 'callgsubr', min: 1, undefStack: true },
+    { id: 'vhcurveto', min: 4, resetStack: true },
+    { id: 'hvcurveto', min: 4, resetStack: true }
+  ];
+  var CharstringValidationData12 = [
+    null,
+    null,
+    null,
+    { id: 'and', min: 2, stackDelta: -1 },
+    { id: 'or', min: 2, stackDelta: -1 },
+    { id: 'not', min: 1, stackDelta: 0 },
+    null,
+    null,
+    null,
+    { id: 'abs', min: 1, stackDelta: 0 },
+    { id: 'add', min: 2, stackDelta: -1,
+      stackFn: function stack_div(stack, index) {
+        stack[index - 2] = stack[index - 2] + stack[index - 1];
+      }
+    },
+    { id: 'sub', min: 2, stackDelta: -1,
+      stackFn: function stack_div(stack, index) {
+        stack[index - 2] = stack[index - 2] - stack[index - 1];
+      }
+    },
+    { id: 'div', min: 2, stackDelta: -1,
+      stackFn: function stack_div(stack, index) {
+        stack[index - 2] = stack[index - 2] / stack[index - 1];
+      }
+    },
+    null,
+    { id: 'neg', min: 1, stackDelta: 0,
+      stackFn: function stack_div(stack, index) {
+        stack[index - 1] = -stack[index - 1];
+      }
+    },
+    { id: 'eq', min: 2, stackDelta: -1 },
+    null,
+    null,
+    { id: 'drop', min: 1, stackDelta: -1 },
+    null,
+    { id: 'put', min: 2, stackDelta: -2 },
+    { id: 'get', min: 1, stackDelta: 0 },
+    { id: 'ifelse', min: 4, stackDelta: -3 },
+    { id: 'random', min: 0, stackDelta: 1 },
+    { id: 'mul', min: 2, stackDelta: -1,
+      stackFn: function stack_div(stack, index) {
+        stack[index - 2] = stack[index - 2] * stack[index - 1];
+      }
+    },
+    null,
+    { id: 'sqrt', min: 1, stackDelta: 0 },
+    { id: 'dup', min: 1, stackDelta: 1 },
+    { id: 'exch', min: 2, stackDelta: 0 },
+    { id: 'index', min: 2, stackDelta: 0 },
+    { id: 'roll', min: 3, stackDelta: -2 },
+    null,
+    null,
+    null,
+    { id: 'hflex', min: 7, resetStack: true },
+    { id: 'flex', min: 13, resetStack: true },
+    { id: 'hflex1', min: 9, resetStack: true },
+    { id: 'flex1', min: 11, resetStack: true }
+  ];
+
+  function CFFParser(file, properties) {
+    this.bytes = file.getBytes();
+    this.properties = properties;
+  }
+  CFFParser.prototype = {
+    parse: function CFFParser_parse() {
+      var properties = this.properties;
+      var cff = new CFF();
+      this.cff = cff;
+
+      // The first five sections must be in order, all the others are reached
+      // via offsets contained in one of the below.
+      var header = this.parseHeader();
+      var nameIndex = this.parseIndex(header.endPos);
+      var topDictIndex = this.parseIndex(nameIndex.endPos);
+      var stringIndex = this.parseIndex(topDictIndex.endPos);
+      var globalSubrIndex = this.parseIndex(stringIndex.endPos);
+
+      var topDictParsed = this.parseDict(topDictIndex.obj.get(0));
+      var topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings);
+
+      cff.header = header.obj;
+      cff.names = this.parseNameIndex(nameIndex.obj);
+      cff.strings = this.parseStringIndex(stringIndex.obj);
+      cff.topDict = topDict;
+      cff.globalSubrIndex = globalSubrIndex.obj;
+
+      this.parsePrivateDict(cff.topDict);
+
+      cff.isCIDFont = topDict.hasName('ROS');
+
+      var charStringOffset = topDict.getByName('CharStrings');
+      var charStringsAndSeacs = this.parseCharStrings(charStringOffset);
+      cff.charStrings = charStringsAndSeacs.charStrings;
+      cff.seacs = charStringsAndSeacs.seacs;
+      cff.widths = charStringsAndSeacs.widths;
+
+      var fontMatrix = topDict.getByName('FontMatrix');
+      if (fontMatrix) {
+        properties.fontMatrix = fontMatrix;
+      }
+
+      var fontBBox = topDict.getByName('FontBBox');
+      if (fontBBox) {
+        // adjusting ascent/descent
+        properties.ascent = fontBBox[3];
+        properties.descent = fontBBox[1];
+        properties.ascentScaled = true;
+      }
+
+      var charset, encoding;
+      if (cff.isCIDFont) {
+        var fdArrayIndex = this.parseIndex(topDict.getByName('FDArray')).obj;
+        for (var i = 0, ii = fdArrayIndex.count; i < ii; ++i) {
+          var dictRaw = fdArrayIndex.get(i);
+          var fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw),
+                                         cff.strings);
+          this.parsePrivateDict(fontDict);
+          cff.fdArray.push(fontDict);
+        }
+        // cid fonts don't have an encoding
+        encoding = null;
+        charset = this.parseCharsets(topDict.getByName('charset'),
+                                     cff.charStrings.count, cff.strings, true);
+        cff.fdSelect = this.parseFDSelect(topDict.getByName('FDSelect'),
+                                             cff.charStrings.count);
+      } else {
+        charset = this.parseCharsets(topDict.getByName('charset'),
+                                     cff.charStrings.count, cff.strings, false);
+        encoding = this.parseEncoding(topDict.getByName('Encoding'),
+                                      properties,
+                                      cff.strings, charset.charset);
+      }
+      cff.charset = charset;
+      cff.encoding = encoding;
+
+      return cff;
+    },
+    parseHeader: function CFFParser_parseHeader() {
+      var bytes = this.bytes;
+      var bytesLength = bytes.length;
+      var offset = 0;
+
+      // Prevent an infinite loop, by checking that the offset is within the
+      // bounds of the bytes array. Necessary in empty, or invalid, font files.
+      while (offset < bytesLength && bytes[offset] !== 1) {
+        ++offset;
+      }
+      if (offset >= bytesLength) {
+        error('Invalid CFF header');
+      } else if (offset !== 0) {
+        info('cff data is shifted');
+        bytes = bytes.subarray(offset);
+        this.bytes = bytes;
+      }
+      var major = bytes[0];
+      var minor = bytes[1];
+      var hdrSize = bytes[2];
+      var offSize = bytes[3];
+      var header = new CFFHeader(major, minor, hdrSize, offSize);
+      return { obj: header, endPos: hdrSize };
+    },
+    parseDict: function CFFParser_parseDict(dict) {
+      var pos = 0;
+
+      function parseOperand() {
+        var value = dict[pos++];
+        if (value === 30) {
+          return parseFloatOperand(pos);
+        } else if (value === 28) {
+          value = dict[pos++];
+          value = ((value << 24) | (dict[pos++] << 16)) >> 16;
+          return value;
+        } else if (value === 29) {
+          value = dict[pos++];
+          value = (value << 8) | dict[pos++];
+          value = (value << 8) | dict[pos++];
+          value = (value << 8) | dict[pos++];
+          return value;
+        } else if (value >= 32 && value <= 246) {
+          return value - 139;
+        } else if (value >= 247 && value <= 250) {
+          return ((value - 247) * 256) + dict[pos++] + 108;
+        } else if (value >= 251 && value <= 254) {
+          return -((value - 251) * 256) - dict[pos++] - 108;
+        } else {
+          error('255 is not a valid DICT command');
+        }
+        return -1;
+      }
+
+      function parseFloatOperand() {
+        var str = '';
+        var eof = 15;
+        var lookup = ['0', '1', '2', '3', '4', '5', '6', '7', '8',
+            '9', '.', 'E', 'E-', null, '-'];
+        var length = dict.length;
+        while (pos < length) {
+          var b = dict[pos++];
+          var b1 = b >> 4;
+          var b2 = b & 15;
+
+          if (b1 === eof) {
+            break;
+          }
+          str += lookup[b1];
+
+          if (b2 === eof) {
+            break;
+          }
+          str += lookup[b2];
+        }
+        return parseFloat(str);
+      }
+
+      var operands = [];
+      var entries = [];
+
+      pos = 0;
+      var end = dict.length;
+      while (pos < end) {
+        var b = dict[pos];
+        if (b <= 21) {
+          if (b === 12) {
+            b = (b << 8) | dict[++pos];
+          }
+          entries.push([b, operands]);
+          operands = [];
+          ++pos;
+        } else {
+          operands.push(parseOperand());
+        }
+      }
+      return entries;
+    },
+    parseIndex: function CFFParser_parseIndex(pos) {
+      var cffIndex = new CFFIndex();
+      var bytes = this.bytes;
+      var count = (bytes[pos++] << 8) | bytes[pos++];
+      var offsets = [];
+      var end = pos;
+      var i, ii;
+
+      if (count !== 0) {
+        var offsetSize = bytes[pos++];
+        // add 1 for offset to determine size of last object
+        var startPos = pos + ((count + 1) * offsetSize) - 1;
+
+        for (i = 0, ii = count + 1; i < ii; ++i) {
+          var offset = 0;
+          for (var j = 0; j < offsetSize; ++j) {
+            offset <<= 8;
+            offset += bytes[pos++];
+          }
+          offsets.push(startPos + offset);
+        }
+        end = offsets[count];
+      }
+      for (i = 0, ii = offsets.length - 1; i < ii; ++i) {
+        var offsetStart = offsets[i];
+        var offsetEnd = offsets[i + 1];
+        cffIndex.add(bytes.subarray(offsetStart, offsetEnd));
+      }
+      return {obj: cffIndex, endPos: end};
+    },
+    parseNameIndex: function CFFParser_parseNameIndex(index) {
+      var names = [];
+      for (var i = 0, ii = index.count; i < ii; ++i) {
+        var name = index.get(i);
+        // OTS doesn't allow names to be over 127 characters.
+        var length = Math.min(name.length, 127);
+        var data = [];
+        // OTS also only permits certain characters in the name.
+        for (var j = 0; j < length; ++j) {
+          var c = name[j];
+          if (j === 0 && c === 0) {
+            data[j] = c;
+            continue;
+          }
+          if ((c < 33 || c > 126) || c === 91 /* [ */ || c === 93 /* ] */ ||
+              c === 40 /* ( */ || c === 41 /* ) */ || c === 123 /* { */ ||
+              c === 125 /* } */ || c === 60 /* < */ || c === 62 /* > */ ||
+              c === 47 /* / */ || c === 37 /* % */ || c === 35 /* # */) {
+            data[j] = 95;
+            continue;
+          }
+          data[j] = c;
+        }
+        names.push(bytesToString(data));
+      }
+      return names;
+    },
+    parseStringIndex: function CFFParser_parseStringIndex(index) {
+      var strings = new CFFStrings();
+      for (var i = 0, ii = index.count; i < ii; ++i) {
+        var data = index.get(i);
+        strings.add(bytesToString(data));
+      }
+      return strings;
+    },
+    createDict: function CFFParser_createDict(Type, dict, strings) {
+      var cffDict = new Type(strings);
+      for (var i = 0, ii = dict.length; i < ii; ++i) {
+        var pair = dict[i];
+        var key = pair[0];
+        var value = pair[1];
+        cffDict.setByKey(key, value);
+      }
+      return cffDict;
+    },
+    parseCharStrings: function CFFParser_parseCharStrings(charStringOffset) {
+      var charStrings = this.parseIndex(charStringOffset).obj;
+      var seacs = [];
+      var widths = [];
+      var count = charStrings.count;
+      for (var i = 0; i < count; i++) {
+        var charstring = charStrings.get(i);
+
+        var stackSize = 0;
+        var stack = [];
+        var undefStack = true;
+        var hints = 0;
+        var valid = true;
+        var data = charstring;
+        var length = data.length;
+        var firstStackClearing = true;
+        for (var j = 0; j < length;) {
+          var value = data[j++];
+          var validationCommand = null;
+          if (value === 12) {
+            var q = data[j++];
+            if (q === 0) {
+              // The CFF specification state that the 'dotsection' command
+              // (12, 0) is deprecated and treated as a no-op, but all Type2
+              // charstrings processors should support them. Unfortunately
+              // the font sanitizer don't. As a workaround the sequence (12, 0)
+              // is replaced by a useless (0, hmoveto).
+              data[j - 2] = 139;
+              data[j - 1] = 22;
+              stackSize = 0;
+            } else {
+              validationCommand = CharstringValidationData12[q];
+            }
+          } else if (value === 28) { // number (16 bit)
+            stack[stackSize] = ((data[j] << 24) | (data[j + 1] << 16)) >> 16;
+            j += 2;
+            stackSize++;
+          } else if (value === 14) {
+            if (stackSize >= 4) {
+              stackSize -= 4;
+              if (SEAC_ANALYSIS_ENABLED) {
+                seacs[i] = stack.slice(stackSize, stackSize + 4);
+                valid = false;
+              }
+            }
+            validationCommand = CharstringValidationData[value];
+          } else if (value >= 32 && value <= 246) {  // number
+            stack[stackSize] = value - 139;
+            stackSize++;
+          } else if (value >= 247 && value <= 254) {  // number (+1 bytes)
+            stack[stackSize] = (value < 251 ?
+                                ((value - 247) << 8) + data[j] + 108 :
+                                -((value - 251) << 8) - data[j] - 108);
+            j++;
+            stackSize++;
+          } else if (value === 255) {  // number (32 bit)
+            stack[stackSize] = ((data[j] << 24) | (data[j + 1] << 16) |
+                                (data[j + 2] << 8) | data[j + 3]) / 65536;
+            j += 4;
+            stackSize++;
+          } else if (value === 19 || value === 20) {
+            hints += stackSize >> 1;
+            j += (hints + 7) >> 3; // skipping right amount of hints flag data
+            stackSize %= 2;
+            validationCommand = CharstringValidationData[value];
+          } else {
+            validationCommand = CharstringValidationData[value];
+          }
+          if (validationCommand) {
+            if (validationCommand.stem) {
+              hints += stackSize >> 1;
+            }
+            if ('min' in validationCommand) {
+              if (!undefStack && stackSize < validationCommand.min) {
+                warn('Not enough parameters for ' + validationCommand.id +
+                     '; actual: ' + stackSize +
+                     ', expected: ' + validationCommand.min);
+                valid = false;
+                break;
+              }
+            }
+            if (firstStackClearing && validationCommand.stackClearing) {
+              firstStackClearing = false;
+              // the optional character width can be found before the first
+              // stack-clearing command arguments
+              stackSize -= validationCommand.min;
+              if (stackSize >= 2 && validationCommand.stem) {
+                // there are even amount of arguments for stem commands
+                stackSize %= 2;
+              } else if (stackSize > 1) {
+                warn('Found too many parameters for stack-clearing command');
+              }
+              if (stackSize > 0 && stack[stackSize - 1] >= 0) {
+                widths[i] = stack[stackSize - 1];
+              }
+            }
+            if ('stackDelta' in validationCommand) {
+              if ('stackFn' in validationCommand) {
+                validationCommand.stackFn(stack, stackSize);
+              }
+              stackSize += validationCommand.stackDelta;
+            } else if (validationCommand.stackClearing) {
+              stackSize = 0;
+            } else if (validationCommand.resetStack) {
+              stackSize = 0;
+              undefStack = false;
+            } else if (validationCommand.undefStack) {
+              stackSize = 0;
+              undefStack = true;
+              firstStackClearing = false;
+            }
+          }
+        }
+        if (!valid) {
+          // resetting invalid charstring to single 'endchar'
+          charStrings.set(i, new Uint8Array([14]));
+        }
+      }
+      return { charStrings: charStrings, seacs: seacs, widths: widths };
+    },
+    emptyPrivateDictionary:
+      function CFFParser_emptyPrivateDictionary(parentDict) {
+      var privateDict = this.createDict(CFFPrivateDict, [],
+                                        parentDict.strings);
+      parentDict.setByKey(18, [0, 0]);
+      parentDict.privateDict = privateDict;
+    },
+    parsePrivateDict: function CFFParser_parsePrivateDict(parentDict) {
+      // no private dict, do nothing
+      if (!parentDict.hasName('Private')) {
+        this.emptyPrivateDictionary(parentDict);
+        return;
+      }
+      var privateOffset = parentDict.getByName('Private');
+      // make sure the params are formatted correctly
+      if (!isArray(privateOffset) || privateOffset.length !== 2) {
+        parentDict.removeByName('Private');
+        return;
+      }
+      var size = privateOffset[0];
+      var offset = privateOffset[1];
+      // remove empty dicts or ones that refer to invalid location
+      if (size === 0 || offset >= this.bytes.length) {
+        this.emptyPrivateDictionary(parentDict);
+        return;
+      }
+
+      var privateDictEnd = offset + size;
+      var dictData = this.bytes.subarray(offset, privateDictEnd);
+      var dict = this.parseDict(dictData);
+      var privateDict = this.createDict(CFFPrivateDict, dict,
+                                        parentDict.strings);
+      parentDict.privateDict = privateDict;
+
+      // Parse the Subrs index also since it's relative to the private dict.
+      if (!privateDict.getByName('Subrs')) {
+        return;
+      }
+      var subrsOffset = privateDict.getByName('Subrs');
+      var relativeOffset = offset + subrsOffset;
+      // Validate the offset.
+      if (subrsOffset === 0 || relativeOffset >= this.bytes.length) {
+        this.emptyPrivateDictionary(parentDict);
+        return;
+      }
+      var subrsIndex = this.parseIndex(relativeOffset);
+      privateDict.subrsIndex = subrsIndex.obj;
+    },
+    parseCharsets: function CFFParser_parseCharsets(pos, length, strings, cid) {
+      if (pos === 0) {
+        return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE,
+                              ISOAdobeCharset);
+      } else if (pos === 1) {
+        return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT,
+                              ExpertCharset);
+      } else if (pos === 2) {
+        return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET,
+                              ExpertSubsetCharset);
+      }
+
+      var bytes = this.bytes;
+      var start = pos;
+      var format = bytes[pos++];
+      var charset = ['.notdef'];
+      var id, count, i;
+
+      // subtract 1 for the .notdef glyph
+      length -= 1;
+
+      switch (format) {
+        case 0:
+          for (i = 0; i < length; i++) {
+            id = (bytes[pos++] << 8) | bytes[pos++];
+            charset.push(cid ? id : strings.get(id));
+          }
+          break;
+        case 1:
+          while (charset.length <= length) {
+            id = (bytes[pos++] << 8) | bytes[pos++];
+            count = bytes[pos++];
+            for (i = 0; i <= count; i++) {
+              charset.push(cid ? id++ : strings.get(id++));
+            }
+          }
+          break;
+        case 2:
+          while (charset.length <= length) {
+            id = (bytes[pos++] << 8) | bytes[pos++];
+            count = (bytes[pos++] << 8) | bytes[pos++];
+            for (i = 0; i <= count; i++) {
+              charset.push(cid ? id++ : strings.get(id++));
+            }
+          }
+          break;
+        default:
+          error('Unknown charset format');
+      }
+      // Raw won't be needed if we actually compile the charset.
+      var end = pos;
+      var raw = bytes.subarray(start, end);
+
+      return new CFFCharset(false, format, charset, raw);
+    },
+    parseEncoding: function CFFParser_parseEncoding(pos,
+                                                    properties,
+                                                    strings,
+                                                    charset) {
+      var encoding = {};
+      var bytes = this.bytes;
+      var predefined = false;
+      var hasSupplement = false;
+      var format, i, ii;
+      var raw = null;
+
+      function readSupplement() {
+        var supplementsCount = bytes[pos++];
+        for (i = 0; i < supplementsCount; i++) {
+          var code = bytes[pos++];
+          var sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff);
+          encoding[code] = charset.indexOf(strings.get(sid));
+        }
+      }
+
+      if (pos === 0 || pos === 1) {
+        predefined = true;
+        format = pos;
+        var baseEncoding = pos ? Encodings.ExpertEncoding :
+                                 Encodings.StandardEncoding;
+        for (i = 0, ii = charset.length; i < ii; i++) {
+          var index = baseEncoding.indexOf(charset[i]);
+          if (index !== -1) {
+            encoding[index] = i;
+          }
+        }
+      } else {
+        var dataStart = pos;
+        format = bytes[pos++];
+        switch (format & 0x7f) {
+          case 0:
+            var glyphsCount = bytes[pos++];
+            for (i = 1; i <= glyphsCount; i++) {
+              encoding[bytes[pos++]] = i;
+            }
+            break;
+
+          case 1:
+            var rangesCount = bytes[pos++];
+            var gid = 1;
+            for (i = 0; i < rangesCount; i++) {
+              var start = bytes[pos++];
+              var left = bytes[pos++];
+              for (var j = start; j <= start + left; j++) {
+                encoding[j] = gid++;
+              }
+            }
+            break;
+
+          default:
+            error('Unknow encoding format: ' + format + ' in CFF');
+            break;
+        }
+        var dataEnd = pos;
+        if (format & 0x80) {
+          // The font sanitizer does not support CFF encoding with a
+          // supplement, since the encoding is not really used to map
+          // between gid to glyph, let's overwrite what is declared in
+          // the top dictionary to let the sanitizer think the font use
+          // StandardEncoding, that's a lie but that's ok.
+          bytes[dataStart] &= 0x7f;
+          readSupplement();
+          hasSupplement = true;
+        }
+        raw = bytes.subarray(dataStart, dataEnd);
+      }
+      format = format & 0x7f;
+      return new CFFEncoding(predefined, format, encoding, raw);
+    },
+    parseFDSelect: function CFFParser_parseFDSelect(pos, length) {
+      var start = pos;
+      var bytes = this.bytes;
+      var format = bytes[pos++];
+      var fdSelect = [];
+      var i;
+
+      switch (format) {
+        case 0:
+          for (i = 0; i < length; ++i) {
+            var id = bytes[pos++];
+            fdSelect.push(id);
+          }
+          break;
+        case 3:
+          var rangesCount = (bytes[pos++] << 8) | bytes[pos++];
+          for (i = 0; i < rangesCount; ++i) {
+            var first = (bytes[pos++] << 8) | bytes[pos++];
+            var fdIndex = bytes[pos++];
+            var next = (bytes[pos] << 8) | bytes[pos + 1];
+            for (var j = first; j < next; ++j) {
+              fdSelect.push(fdIndex);
+            }
+          }
+          // Advance past the sentinel(next).
+          pos += 2;
+          break;
+        default:
+          error('Unknown fdselect format ' + format);
+          break;
+      }
+      var end = pos;
+      return new CFFFDSelect(fdSelect, bytes.subarray(start, end));
+    }
+  };
+  return CFFParser;
+})();
+
+// Compact Font Format
+var CFF = (function CFFClosure() {
+  function CFF() {
+    this.header = null;
+    this.names = [];
+    this.topDict = null;
+    this.strings = new CFFStrings();
+    this.globalSubrIndex = null;
+
+    // The following could really be per font, but since we only have one font
+    // store them here.
+    this.encoding = null;
+    this.charset = null;
+    this.charStrings = null;
+    this.fdArray = [];
+    this.fdSelect = null;
+
+    this.isCIDFont = false;
+  }
+  return CFF;
+})();
+
+var CFFHeader = (function CFFHeaderClosure() {
+  function CFFHeader(major, minor, hdrSize, offSize) {
+    this.major = major;
+    this.minor = minor;
+    this.hdrSize = hdrSize;
+    this.offSize = offSize;
+  }
+  return CFFHeader;
+})();
+
+var CFFStrings = (function CFFStringsClosure() {
+  function CFFStrings() {
+    this.strings = [];
+  }
+  CFFStrings.prototype = {
+    get: function CFFStrings_get(index) {
+      if (index >= 0 && index <= 390) {
+        return CFFStandardStrings[index];
+      }
+      if (index - 391 <= this.strings.length) {
+        return this.strings[index - 391];
+      }
+      return CFFStandardStrings[0];
+    },
+    add: function CFFStrings_add(value) {
+      this.strings.push(value);
+    },
+    get count() {
+      return this.strings.length;
+    }
+  };
+  return CFFStrings;
+})();
+
+var CFFIndex = (function CFFIndexClosure() {
+  function CFFIndex() {
+    this.objects = [];
+    this.length = 0;
+  }
+  CFFIndex.prototype = {
+    add: function CFFIndex_add(data) {
+      this.length += data.length;
+      this.objects.push(data);
+    },
+    set: function CFFIndex_set(index, data) {
+      this.length += data.length - this.objects[index].length;
+      this.objects[index] = data;
+    },
+    get: function CFFIndex_get(index) {
+      return this.objects[index];
+    },
+    get count() {
+      return this.objects.length;
+    }
+  };
+  return CFFIndex;
+})();
+
+var CFFDict = (function CFFDictClosure() {
+  function CFFDict(tables, strings) {
+    this.keyToNameMap = tables.keyToNameMap;
+    this.nameToKeyMap = tables.nameToKeyMap;
+    this.defaults = tables.defaults;
+    this.types = tables.types;
+    this.opcodes = tables.opcodes;
+    this.order = tables.order;
+    this.strings = strings;
+    this.values = {};
+  }
+  CFFDict.prototype = {
+    // value should always be an array
+    setByKey: function CFFDict_setByKey(key, value) {
+      if (!(key in this.keyToNameMap)) {
+        return false;
+      }
+      // ignore empty values
+      if (value.length === 0) {
+        return true;
+      }
+      var type = this.types[key];
+      // remove the array wrapping these types of values
+      if (type === 'num' || type === 'sid' || type === 'offset') {
+        value = value[0];
+      }
+      this.values[key] = value;
+      return true;
+    },
+    setByName: function CFFDict_setByName(name, value) {
+      if (!(name in this.nameToKeyMap)) {
+        error('Invalid dictionary name "' + name + '"');
+      }
+      this.values[this.nameToKeyMap[name]] = value;
+    },
+    hasName: function CFFDict_hasName(name) {
+      return this.nameToKeyMap[name] in this.values;
+    },
+    getByName: function CFFDict_getByName(name) {
+      if (!(name in this.nameToKeyMap)) {
+        error('Invalid dictionary name "' + name + '"');
+      }
+      var key = this.nameToKeyMap[name];
+      if (!(key in this.values)) {
+        return this.defaults[key];
+      }
+      return this.values[key];
+    },
+    removeByName: function CFFDict_removeByName(name) {
+      delete this.values[this.nameToKeyMap[name]];
+    }
+  };
+  CFFDict.createTables = function CFFDict_createTables(layout) {
+    var tables = {
+      keyToNameMap: {},
+      nameToKeyMap: {},
+      defaults: {},
+      types: {},
+      opcodes: {},
+      order: []
+    };
+    for (var i = 0, ii = layout.length; i < ii; ++i) {
+      var entry = layout[i];
+      var key = isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0];
+      tables.keyToNameMap[key] = entry[1];
+      tables.nameToKeyMap[entry[1]] = key;
+      tables.types[key] = entry[2];
+      tables.defaults[key] = entry[3];
+      tables.opcodes[key] = isArray(entry[0]) ? entry[0] : [entry[0]];
+      tables.order.push(key);
+    }
+    return tables;
+  };
+  return CFFDict;
+})();
+
+var CFFTopDict = (function CFFTopDictClosure() {
+  var layout = [
+    [[12, 30], 'ROS', ['sid', 'sid', 'num'], null],
+    [[12, 20], 'SyntheticBase', 'num', null],
+    [0, 'version', 'sid', null],
+    [1, 'Notice', 'sid', null],
+    [[12, 0], 'Copyright', 'sid', null],
+    [2, 'FullName', 'sid', null],
+    [3, 'FamilyName', 'sid', null],
+    [4, 'Weight', 'sid', null],
+    [[12, 1], 'isFixedPitch', 'num', 0],
+    [[12, 2], 'ItalicAngle', 'num', 0],
+    [[12, 3], 'UnderlinePosition', 'num', -100],
+    [[12, 4], 'UnderlineThickness', 'num', 50],
+    [[12, 5], 'PaintType', 'num', 0],
+    [[12, 6], 'CharstringType', 'num', 2],
+    [[12, 7], 'FontMatrix', ['num', 'num', 'num', 'num', 'num', 'num'],
+                            [0.001, 0, 0, 0.001, 0, 0]],
+    [13, 'UniqueID', 'num', null],
+    [5, 'FontBBox', ['num', 'num', 'num', 'num'], [0, 0, 0, 0]],
+    [[12, 8], 'StrokeWidth', 'num', 0],
+    [14, 'XUID', 'array', null],
+    [15, 'charset', 'offset', 0],
+    [16, 'Encoding', 'offset', 0],
+    [17, 'CharStrings', 'offset', 0],
+    [18, 'Private', ['offset', 'offset'], null],
+    [[12, 21], 'PostScript', 'sid', null],
+    [[12, 22], 'BaseFontName', 'sid', null],
+    [[12, 23], 'BaseFontBlend', 'delta', null],
+    [[12, 31], 'CIDFontVersion', 'num', 0],
+    [[12, 32], 'CIDFontRevision', 'num', 0],
+    [[12, 33], 'CIDFontType', 'num', 0],
+    [[12, 34], 'CIDCount', 'num', 8720],
+    [[12, 35], 'UIDBase', 'num', null],
+    // XXX: CID Fonts on DirectWrite 6.1 only seem to work if FDSelect comes
+    // before FDArray.
+    [[12, 37], 'FDSelect', 'offset', null],
+    [[12, 36], 'FDArray', 'offset', null],
+    [[12, 38], 'FontName', 'sid', null]
+  ];
+  var tables = null;
+  function CFFTopDict(strings) {
+    if (tables === null) {
+      tables = CFFDict.createTables(layout);
+    }
+    CFFDict.call(this, tables, strings);
+    this.privateDict = null;
+  }
+  CFFTopDict.prototype = Object.create(CFFDict.prototype);
+  return CFFTopDict;
+})();
+
+var CFFPrivateDict = (function CFFPrivateDictClosure() {
+  var layout = [
+    [6, 'BlueValues', 'delta', null],
+    [7, 'OtherBlues', 'delta', null],
+    [8, 'FamilyBlues', 'delta', null],
+    [9, 'FamilyOtherBlues', 'delta', null],
+    [[12, 9], 'BlueScale', 'num', 0.039625],
+    [[12, 10], 'BlueShift', 'num', 7],
+    [[12, 11], 'BlueFuzz', 'num', 1],
+    [10, 'StdHW', 'num', null],
+    [11, 'StdVW', 'num', null],
+    [[12, 12], 'StemSnapH', 'delta', null],
+    [[12, 13], 'StemSnapV', 'delta', null],
+    [[12, 14], 'ForceBold', 'num', 0],
+    [[12, 17], 'LanguageGroup', 'num', 0],
+    [[12, 18], 'ExpansionFactor', 'num', 0.06],
+    [[12, 19], 'initialRandomSeed', 'num', 0],
+    [20, 'defaultWidthX', 'num', 0],
+    [21, 'nominalWidthX', 'num', 0],
+    [19, 'Subrs', 'offset', null]
+  ];
+  var tables = null;
+  function CFFPrivateDict(strings) {
+    if (tables === null) {
+      tables = CFFDict.createTables(layout);
+    }
+    CFFDict.call(this, tables, strings);
+    this.subrsIndex = null;
+  }
+  CFFPrivateDict.prototype = Object.create(CFFDict.prototype);
+  return CFFPrivateDict;
+})();
+
+var CFFCharsetPredefinedTypes = {
+  ISO_ADOBE: 0,
+  EXPERT: 1,
+  EXPERT_SUBSET: 2
+};
+var CFFCharset = (function CFFCharsetClosure() {
+  function CFFCharset(predefined, format, charset, raw) {
+    this.predefined = predefined;
+    this.format = format;
+    this.charset = charset;
+    this.raw = raw;
+  }
+  return CFFCharset;
+})();
+
+var CFFEncoding = (function CFFEncodingClosure() {
+  function CFFEncoding(predefined, format, encoding, raw) {
+    this.predefined = predefined;
+    this.format = format;
+    this.encoding = encoding;
+    this.raw = raw;
+  }
+  return CFFEncoding;
+})();
+
+var CFFFDSelect = (function CFFFDSelectClosure() {
+  function CFFFDSelect(fdSelect, raw) {
+    this.fdSelect = fdSelect;
+    this.raw = raw;
+  }
+  return CFFFDSelect;
+})();
+
+// Helper class to keep track of where an offset is within the data and helps
+// filling in that offset once it's known.
+var CFFOffsetTracker = (function CFFOffsetTrackerClosure() {
+  function CFFOffsetTracker() {
+    this.offsets = {};
+  }
+  CFFOffsetTracker.prototype = {
+    isTracking: function CFFOffsetTracker_isTracking(key) {
+      return key in this.offsets;
+    },
+    track: function CFFOffsetTracker_track(key, location) {
+      if (key in this.offsets) {
+        error('Already tracking location of ' + key);
+      }
+      this.offsets[key] = location;
+    },
+    offset: function CFFOffsetTracker_offset(value) {
+      for (var key in this.offsets) {
+        this.offsets[key] += value;
+      }
+    },
+    setEntryLocation: function CFFOffsetTracker_setEntryLocation(key,
+                                                                 values,
+                                                                 output) {
+      if (!(key in this.offsets)) {
+        error('Not tracking location of ' + key);
+      }
+      var data = output.data;
+      var dataOffset = this.offsets[key];
+      var size = 5;
+      for (var i = 0, ii = values.length; i < ii; ++i) {
+        var offset0 = i * size + dataOffset;
+        var offset1 = offset0 + 1;
+        var offset2 = offset0 + 2;
+        var offset3 = offset0 + 3;
+        var offset4 = offset0 + 4;
+        // It's easy to screw up offsets so perform this sanity check.
+        if (data[offset0] !== 0x1d || data[offset1] !== 0 ||
+            data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) {
+          error('writing to an offset that is not empty');
+        }
+        var value = values[i];
+        data[offset0] = 0x1d;
+        data[offset1] = (value >> 24) & 0xFF;
+        data[offset2] = (value >> 16) & 0xFF;
+        data[offset3] = (value >> 8) & 0xFF;
+        data[offset4] = value & 0xFF;
+      }
+    }
+  };
+  return CFFOffsetTracker;
+})();
+
+// Takes a CFF and converts it to the binary representation.
+var CFFCompiler = (function CFFCompilerClosure() {
+  function CFFCompiler(cff) {
+    this.cff = cff;
+  }
+  CFFCompiler.prototype = {
+    compile: function CFFCompiler_compile() {
+      var cff = this.cff;
+      var output = {
+        data: [],
+        length: 0,
+        add: function CFFCompiler_add(data) {
+          this.data = this.data.concat(data);
+          this.length = this.data.length;
+        }
+      };
+
+      // Compile the five entries that must be in order.
+      var header = this.compileHeader(cff.header);
+      output.add(header);
+
+      var nameIndex = this.compileNameIndex(cff.names);
+      output.add(nameIndex);
+
+      if (cff.isCIDFont) {
+        // The spec is unclear on how font matrices should relate to each other
+        // when there is one in the main top dict and the sub top dicts.
+        // Windows handles this differently than linux and osx so we have to
+        // normalize to work on all.
+        // Rules based off of some mailing list discussions:
+        // - If main font has a matrix and subfont doesn't, use the main matrix.
+        // - If no main font matrix and there is a subfont matrix, use the
+        //   subfont matrix.
+        // - If both have matrices, concat together.
+        // - If neither have matrices, use default.
+        // To make this work on all platforms we move the top matrix into each
+        // sub top dict and concat if necessary.
+        if (cff.topDict.hasName('FontMatrix')) {
+          var base = cff.topDict.getByName('FontMatrix');
+          cff.topDict.removeByName('FontMatrix');
+          for (var i = 0, ii = cff.fdArray.length; i < ii; i++) {
+            var subDict = cff.fdArray[i];
+            var matrix = base.slice(0);
+            if (subDict.hasName('FontMatrix')) {
+              matrix = Util.transform(matrix, subDict.getByName('FontMatrix'));
+            }
+            subDict.setByName('FontMatrix', matrix);
+          }
+        }
+      }
+
+      var compiled = this.compileTopDicts([cff.topDict],
+                                          output.length,
+                                          cff.isCIDFont);
+      output.add(compiled.output);
+      var topDictTracker = compiled.trackers[0];
+
+      var stringIndex = this.compileStringIndex(cff.strings.strings);
+      output.add(stringIndex);
+
+      var globalSubrIndex = this.compileIndex(cff.globalSubrIndex);
+      output.add(globalSubrIndex);
+
+      // Now start on the other entries that have no specfic order.
+      if (cff.encoding && cff.topDict.hasName('Encoding')) {
+        if (cff.encoding.predefined) {
+          topDictTracker.setEntryLocation('Encoding', [cff.encoding.format],
+                                          output);
+        } else {
+          var encoding = this.compileEncoding(cff.encoding);
+          topDictTracker.setEntryLocation('Encoding', [output.length], output);
+          output.add(encoding);
+        }
+      }
+
+      if (cff.charset && cff.topDict.hasName('charset')) {
+        if (cff.charset.predefined) {
+          topDictTracker.setEntryLocation('charset', [cff.charset.format],
+                                          output);
+        } else {
+          var charset = this.compileCharset(cff.charset);
+          topDictTracker.setEntryLocation('charset', [output.length], output);
+          output.add(charset);
+        }
+      }
+
+      var charStrings = this.compileCharStrings(cff.charStrings);
+      topDictTracker.setEntryLocation('CharStrings', [output.length], output);
+      output.add(charStrings);
+
+      if (cff.isCIDFont) {
+        // For some reason FDSelect must be in front of FDArray on windows. OSX
+        // and linux don't seem to care.
+        topDictTracker.setEntryLocation('FDSelect', [output.length], output);
+        var fdSelect = this.compileFDSelect(cff.fdSelect.raw);
+        output.add(fdSelect);
+        // It is unclear if the sub font dictionary can have CID related
+        // dictionary keys, but the sanitizer doesn't like them so remove them.
+        compiled = this.compileTopDicts(cff.fdArray, output.length, true);
+        topDictTracker.setEntryLocation('FDArray', [output.length], output);
+        output.add(compiled.output);
+        var fontDictTrackers = compiled.trackers;
+
+        this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output);
+      }
+
+      this.compilePrivateDicts([cff.topDict], [topDictTracker], output);
+
+      // If the font data ends with INDEX whose object data is zero-length,
+      // the sanitizer will bail out. Add a dummy byte to avoid that.
+      output.add([0]);
+
+      return output.data;
+    },
+    encodeNumber: function CFFCompiler_encodeNumber(value) {
+      if (parseFloat(value) === parseInt(value, 10) && !isNaN(value)) { // isInt
+        return this.encodeInteger(value);
+      } else {
+        return this.encodeFloat(value);
+      }
+    },
+    encodeFloat: function CFFCompiler_encodeFloat(num) {
+      var value = num.toString();
+
+      // rounding inaccurate doubles
+      var m = /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(value);
+      if (m) {
+        var epsilon = parseFloat('1e' + ((m[2] ? +m[2] : 0) + m[1].length));
+        value = (Math.round(num * epsilon) / epsilon).toString();
+      }
+
+      var nibbles = '';
+      var i, ii;
+      for (i = 0, ii = value.length; i < ii; ++i) {
+        var a = value[i];
+        if (a === 'e') {
+          nibbles += value[++i] === '-' ? 'c' : 'b';
+        } else if (a === '.') {
+          nibbles += 'a';
+        } else if (a === '-') {
+          nibbles += 'e';
+        } else {
+          nibbles += a;
+        }
+      }
+      nibbles += (nibbles.length & 1) ? 'f' : 'ff';
+      var out = [30];
+      for (i = 0, ii = nibbles.length; i < ii; i += 2) {
+        out.push(parseInt(nibbles.substr(i, 2), 16));
+      }
+      return out;
+    },
+    encodeInteger: function CFFCompiler_encodeInteger(value) {
+      var code;
+      if (value >= -107 && value <= 107) {
+        code = [value + 139];
+      } else if (value >= 108 && value <= 1131) {
+        value = [value - 108];
+        code = [(value >> 8) + 247, value & 0xFF];
+      } else if (value >= -1131 && value <= -108) {
+        value = -value - 108;
+        code = [(value >> 8) + 251, value & 0xFF];
+      } else if (value >= -32768 && value <= 32767) {
+        code = [0x1c, (value >> 8) & 0xFF, value & 0xFF];
+      } else {
+        code = [0x1d,
+                (value >> 24) & 0xFF,
+                (value >> 16) & 0xFF,
+                (value >> 8) & 0xFF,
+                 value & 0xFF];
+      }
+      return code;
+    },
+    compileHeader: function CFFCompiler_compileHeader(header) {
+      return [
+        header.major,
+        header.minor,
+        header.hdrSize,
+        header.offSize
+      ];
+    },
+    compileNameIndex: function CFFCompiler_compileNameIndex(names) {
+      var nameIndex = new CFFIndex();
+      for (var i = 0, ii = names.length; i < ii; ++i) {
+        nameIndex.add(stringToBytes(names[i]));
+      }
+      return this.compileIndex(nameIndex);
+    },
+    compileTopDicts: function CFFCompiler_compileTopDicts(dicts,
+                                                          length,
+                                                          removeCidKeys) {
+      var fontDictTrackers = [];
+      var fdArrayIndex = new CFFIndex();
+      for (var i = 0, ii = dicts.length; i < ii; ++i) {
+        var fontDict = dicts[i];
+        if (removeCidKeys) {
+          fontDict.removeByName('CIDFontVersion');
+          fontDict.removeByName('CIDFontRevision');
+          fontDict.removeByName('CIDFontType');
+          fontDict.removeByName('CIDCount');
+          fontDict.removeByName('UIDBase');
+        }
+        var fontDictTracker = new CFFOffsetTracker();
+        var fontDictData = this.compileDict(fontDict, fontDictTracker);
+        fontDictTrackers.push(fontDictTracker);
+        fdArrayIndex.add(fontDictData);
+        fontDictTracker.offset(length);
+      }
+      fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers);
+      return {
+        trackers: fontDictTrackers,
+        output: fdArrayIndex
+      };
+    },
+    compilePrivateDicts: function CFFCompiler_compilePrivateDicts(dicts,
+                                                                  trackers,
+                                                                  output) {
+      for (var i = 0, ii = dicts.length; i < ii; ++i) {
+        var fontDict = dicts[i];
+        assert(fontDict.privateDict && fontDict.hasName('Private'),
+               'There must be an private dictionary.');
+        var privateDict = fontDict.privateDict;
+        var privateDictTracker = new CFFOffsetTracker();
+        var privateDictData = this.compileDict(privateDict, privateDictTracker);
+
+        var outputLength = output.length;
+        privateDictTracker.offset(outputLength);
+        if (!privateDictData.length) {
+          // The private dictionary was empty, set the output length to zero to
+          // ensure the offset length isn't out of bounds in the eyes of the
+          // sanitizer.
+          outputLength = 0;
+        }
+
+        trackers[i].setEntryLocation('Private',
+                                     [privateDictData.length, outputLength],
+                                     output);
+        output.add(privateDictData);
+
+        if (privateDict.subrsIndex && privateDict.hasName('Subrs')) {
+          var subrs = this.compileIndex(privateDict.subrsIndex);
+          privateDictTracker.setEntryLocation('Subrs', [privateDictData.length],
+                                              output);
+          output.add(subrs);
+        }
+      }
+    },
+    compileDict: function CFFCompiler_compileDict(dict, offsetTracker) {
+      var out = [];
+      // The dictionary keys must be in a certain order.
+      var order = dict.order;
+      for (var i = 0; i < order.length; ++i) {
+        var key = order[i];
+        if (!(key in dict.values)) {
+          continue;
+        }
+        var values = dict.values[key];
+        var types = dict.types[key];
+        if (!isArray(types)) {
+          types = [types];
+        }
+        if (!isArray(values)) {
+          values = [values];
+        }
+
+        // Remove any empty dict values.
+        if (values.length === 0) {
+          continue;
+        }
+
+        for (var j = 0, jj = types.length; j < jj; ++j) {
+          var type = types[j];
+          var value = values[j];
+          switch (type) {
+            case 'num':
+            case 'sid':
+              out = out.concat(this.encodeNumber(value));
+              break;
+            case 'offset':
+              // For offsets we just insert a 32bit integer so we don't have to
+              // deal with figuring out the length of the offset when it gets
+              // replaced later on by the compiler.
+              var name = dict.keyToNameMap[key];
+              // Some offsets have the offset and the length, so just record the
+              // position of the first one.
+              if (!offsetTracker.isTracking(name)) {
+                offsetTracker.track(name, out.length);
+              }
+              out = out.concat([0x1d, 0, 0, 0, 0]);
+              break;
+            case 'array':
+            case 'delta':
+              out = out.concat(this.encodeNumber(value));
+              for (var k = 1, kk = values.length; k < kk; ++k) {
+                out = out.concat(this.encodeNumber(values[k]));
+              }
+              break;
+            default:
+              error('Unknown data type of ' + type);
+              break;
+          }
+        }
+        out = out.concat(dict.opcodes[key]);
+      }
+      return out;
+    },
+    compileStringIndex: function CFFCompiler_compileStringIndex(strings) {
+      var stringIndex = new CFFIndex();
+      for (var i = 0, ii = strings.length; i < ii; ++i) {
+        stringIndex.add(stringToBytes(strings[i]));
+      }
+      return this.compileIndex(stringIndex);
+    },
+    compileGlobalSubrIndex: function CFFCompiler_compileGlobalSubrIndex() {
+      var globalSubrIndex = this.cff.globalSubrIndex;
+      this.out.writeByteArray(this.compileIndex(globalSubrIndex));
+    },
+    compileCharStrings: function CFFCompiler_compileCharStrings(charStrings) {
+      return this.compileIndex(charStrings);
+    },
+    compileCharset: function CFFCompiler_compileCharset(charset) {
+      return this.compileTypedArray(charset.raw);
+    },
+    compileEncoding: function CFFCompiler_compileEncoding(encoding) {
+      return this.compileTypedArray(encoding.raw);
+    },
+    compileFDSelect: function CFFCompiler_compileFDSelect(fdSelect) {
+      return this.compileTypedArray(fdSelect);
+    },
+    compileTypedArray: function CFFCompiler_compileTypedArray(data) {
+      var out = [];
+      for (var i = 0, ii = data.length; i < ii; ++i) {
+        out[i] = data[i];
+      }
+      return out;
+    },
+    compileIndex: function CFFCompiler_compileIndex(index, trackers) {
+      trackers = trackers || [];
+      var objects = index.objects;
+      // First 2 bytes contains the number of objects contained into this index
+      var count = objects.length;
+
+      // If there is no object, just create an index. This technically
+      // should just be [0, 0] but OTS has an issue with that.
+      if (count === 0) {
+        return [0, 0, 0];
+      }
+
+      var data = [(count >> 8) & 0xFF, count & 0xff];
+
+      var lastOffset = 1, i;
+      for (i = 0; i < count; ++i) {
+        lastOffset += objects[i].length;
+      }
+
+      var offsetSize;
+      if (lastOffset < 0x100) {
+        offsetSize = 1;
+      } else if (lastOffset < 0x10000) {
+        offsetSize = 2;
+      } else if (lastOffset < 0x1000000) {
+        offsetSize = 3;
+      } else {
+        offsetSize = 4;
+      }
+
+      // Next byte contains the offset size use to reference object in the file
+      data.push(offsetSize);
+
+      // Add another offset after this one because we need a new offset
+      var relativeOffset = 1;
+      for (i = 0; i < count + 1; i++) {
+        if (offsetSize === 1) {
+          data.push(relativeOffset & 0xFF);
+        } else if (offsetSize === 2) {
+          data.push((relativeOffset >> 8) & 0xFF,
+                     relativeOffset & 0xFF);
+        } else if (offsetSize === 3) {
+          data.push((relativeOffset >> 16) & 0xFF,
+                    (relativeOffset >> 8) & 0xFF,
+                     relativeOffset & 0xFF);
+        } else {
+          data.push((relativeOffset >>> 24) & 0xFF,
+                    (relativeOffset >> 16) & 0xFF,
+                    (relativeOffset >> 8) & 0xFF,
+                     relativeOffset & 0xFF);
+        }
+
+        if (objects[i]) {
+          relativeOffset += objects[i].length;
+        }
+      }
+
+      for (i = 0; i < count; i++) {
+        // Notify the tracker where the object will be offset in the data.
+        if (trackers[i]) {
+          trackers[i].offset(data.length);
+        }
+        for (var j = 0, jj = objects[i].length; j < jj; j++) {
+          data.push(objects[i][j]);
+        }
+      }
+      return data;
+    }
+  };
+  return CFFCompiler;
+})();
+
+// Workaround for seac on Windows.
+(function checkSeacSupport() {
+  if (/Windows/.test(navigator.userAgent)) {
+    SEAC_ANALYSIS_ENABLED = true;
+  }
+})();
+
+// Workaround for Private Use Area characters in Chrome on Windows
+// http://code.google.com/p/chromium/issues/detail?id=122465
+// https://github.com/mozilla/pdf.js/issues/1689
+(function checkChromeWindows() {
+  if (/Windows.*Chrome/.test(navigator.userAgent)) {
+    SKIP_PRIVATE_USE_RANGE_F000_TO_F01F = true;
+  }
+})();
+
+
+var FontRendererFactory = (function FontRendererFactoryClosure() {
+  function getLong(data, offset) {
+    return (data[offset] << 24) | (data[offset + 1] << 16) |
+           (data[offset + 2] << 8) | data[offset + 3];
+  }
+
+  function getUshort(data, offset) {
+    return (data[offset] << 8) | data[offset + 1];
+  }
+
+  function parseCmap(data, start, end) {
+    var offset = (getUshort(data, start + 2) === 1 ?
+                  getLong(data, start + 8) : getLong(data, start + 16));
+    var format = getUshort(data, start + offset);
+    var length, ranges, p, i;
+    if (format === 4) {
+      length = getUshort(data, start + offset + 2);
+      var segCount = getUshort(data, start + offset + 6) >> 1;
+      p = start + offset + 14;
+      ranges = [];
+      for (i = 0; i < segCount; i++, p += 2) {
+        ranges[i] = {end: getUshort(data, p)};
+      }
+      p += 2;
+      for (i = 0; i < segCount; i++, p += 2) {
+        ranges[i].start = getUshort(data, p);
+      }
+      for (i = 0; i < segCount; i++, p += 2) {
+        ranges[i].idDelta = getUshort(data, p);
+      }
+      for (i = 0; i < segCount; i++, p += 2) {
+        var idOffset = getUshort(data, p);
+        if (idOffset === 0) {
+          continue;
+        }
+        ranges[i].ids = [];
+        for (var j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) {
+          ranges[i].ids[j] = getUshort(data, p + idOffset);
+          idOffset += 2;
+        }
+      }
+      return ranges;
+    } else if (format === 12) {
+      length = getLong(data, start + offset + 4);
+      var groups = getLong(data, start + offset + 12);
+      p = start + offset + 16;
+      ranges = [];
+      for (i = 0; i < groups; i++) {
+        ranges.push({
+          start: getLong(data, p),
+          end: getLong(data, p + 4),
+          idDelta: getLong(data, p + 8) - getLong(data, p)
+        });
+        p += 12;
+      }
+      return ranges;
+    }
+    error('not supported cmap: ' + format);
+  }
+
+  function parseCff(data, start, end) {
+    var properties = {};
+    var parser = new CFFParser(new Stream(data, start, end - start),
+                               properties);
+    var cff = parser.parse();
+    return {
+      glyphs: cff.charStrings.objects,
+      subrs: (cff.topDict.privateDict && cff.topDict.privateDict.subrsIndex &&
+              cff.topDict.privateDict.subrsIndex.objects),
+      gsubrs: cff.globalSubrIndex && cff.globalSubrIndex.objects
+    };
+  }
+
+  function parseGlyfTable(glyf, loca, isGlyphLocationsLong) {
+    var itemSize, itemDecode;
+    if (isGlyphLocationsLong) {
+      itemSize = 4;
+      itemDecode = function fontItemDecodeLong(data, offset) {
+        return (data[offset] << 24) | (data[offset + 1] << 16) |
+               (data[offset + 2] << 8) | data[offset + 3];
+      };
+    } else {
+      itemSize = 2;
+      itemDecode = function fontItemDecode(data, offset) {
+        return (data[offset] << 9) | (data[offset + 1] << 1);
+      };
+    }
+    var glyphs = [];
+    var startOffset = itemDecode(loca, 0);
+    for (var j = itemSize; j < loca.length; j += itemSize) {
+      var endOffset = itemDecode(loca, j);
+      glyphs.push(glyf.subarray(startOffset, endOffset));
+      startOffset = endOffset;
+    }
+    return glyphs;
+  }
+
+  function lookupCmap(ranges, unicode) {
+    var code = unicode.charCodeAt(0);
+    var l = 0, r = ranges.length - 1;
+    while (l < r) {
+      var c = (l + r + 1) >> 1;
+      if (code < ranges[c].start) {
+        r = c - 1;
+      } else {
+        l = c;
+      }
+    }
+    if (ranges[l].start <= code && code <= ranges[l].end) {
+      return (ranges[l].idDelta + (ranges[l].ids ?
+        ranges[l].ids[code - ranges[l].start] : code)) & 0xFFFF;
+    }
+    return 0;
+  }
+
+  function compileGlyf(code, js, font) {
+    function moveTo(x, y) {
+      js.push('c.moveTo(' + x + ',' + y + ');');
+    }
+    function lineTo(x, y) {
+      js.push('c.lineTo(' + x + ',' + y + ');');
+    }
+    function quadraticCurveTo(xa, ya, x, y) {
+      js.push('c.quadraticCurveTo(' + xa + ',' + ya + ',' +
+                                   x + ',' + y + ');');
+    }
+
+    var i = 0;
+    var numberOfContours = ((code[i] << 24) | (code[i + 1] << 16)) >> 16;
+    var flags;
+    var x = 0, y = 0;
+    i += 10;
+    if (numberOfContours < 0) {
+      // composite glyph
+      do {
+        flags = (code[i] << 8) | code[i + 1];
+        var glyphIndex = (code[i + 2] << 8) | code[i + 3];
+        i += 4;
+        var arg1, arg2;
+        if ((flags & 0x01)) {
+          arg1 = ((code[i] << 24) | (code[i + 1] << 16)) >> 16;
+          arg2 = ((code[i + 2] << 24) | (code[i + 3] << 16)) >> 16;
+          i += 4;
+        } else {
+          arg1 = code[i++]; arg2 = code[i++];
+        }
+        if ((flags & 0x02)) {
+           x = arg1;
+           y = arg2;
+        } else {
+           x = 0; y = 0; // TODO "they are points" ?
+        }
+        var scaleX = 1, scaleY = 1, scale01 = 0, scale10 = 0;
+        if ((flags & 0x08)) {
+          scaleX =
+          scaleY = ((code[i] << 24) | (code[i + 1] << 16)) / 1073741824;
+          i += 2;
+        } else if ((flags & 0x40)) {
+          scaleX = ((code[i] << 24) | (code[i + 1] << 16)) / 1073741824;
+          scaleY = ((code[i + 2] << 24) | (code[i + 3] << 16)) / 1073741824;
+          i += 4;
+        } else if ((flags & 0x80)) {
+          scaleX = ((code[i] << 24) | (code[i + 1] << 16)) / 1073741824;
+          scale01 = ((code[i + 2] << 24) | (code[i + 3] << 16)) / 1073741824;
+          scale10 = ((code[i + 4] << 24) | (code[i + 5] << 16)) / 1073741824;
+          scaleY = ((code[i + 6] << 24) | (code[i + 7] << 16)) / 1073741824;
+          i += 8;
+        }
+        var subglyph = font.glyphs[glyphIndex];
+        if (subglyph) {
+          js.push('c.save();');
+          js.push('c.transform(' + scaleX + ',' + scale01 + ',' +
+                  scale10 + ',' + scaleY + ',' + x + ',' + y + ');');
+          compileGlyf(subglyph, js, font);
+          js.push('c.restore();');
+        }
+      } while ((flags & 0x20));
+    } else {
+      // simple glyph
+      var endPtsOfContours = [];
+      var j, jj;
+      for (j = 0; j < numberOfContours; j++) {
+        endPtsOfContours.push((code[i] << 8) | code[i + 1]);
+        i += 2;
+      }
+      var instructionLength = (code[i] << 8) | code[i + 1];
+      i += 2 + instructionLength; // skipping the instructions
+      var numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1;
+      var points = [];
+      while (points.length < numberOfPoints) {
+        flags = code[i++];
+        var repeat = 1;
+        if ((flags & 0x08)) {
+          repeat += code[i++];
+        }
+        while (repeat-- > 0) {
+          points.push({flags: flags});
+        }
+      }
+      for (j = 0; j < numberOfPoints; j++) {
+        switch (points[j].flags & 0x12) {
+          case 0x00:
+            x += ((code[i] << 24) | (code[i + 1] << 16)) >> 16;
+            i += 2;
+            break;
+          case 0x02:
+            x -= code[i++];
+            break;
+          case 0x12:
+            x += code[i++];
+            break;
+        }
+        points[j].x = x;
+      }
+      for (j = 0; j < numberOfPoints; j++) {
+        switch (points[j].flags & 0x24) {
+          case 0x00:
+            y += ((code[i] << 24) | (code[i + 1] << 16)) >> 16;
+            i += 2;
+            break;
+          case 0x04:
+            y -= code[i++];
+            break;
+          case 0x24:
+            y += code[i++];
+            break;
+        }
+        points[j].y = y;
+      }
+
+      var startPoint = 0;
+      for (i = 0; i < numberOfContours; i++) {
+        var endPoint = endPtsOfContours[i];
+        // contours might have implicit points, which is located in the middle
+        // between two neighboring off-curve points
+        var contour = points.slice(startPoint, endPoint + 1);
+        if ((contour[0].flags & 1)) {
+          contour.push(contour[0]); // using start point at the contour end
+        } else if ((contour[contour.length - 1].flags & 1)) {
+          // first is off-curve point, trying to use one from the end
+          contour.unshift(contour[contour.length - 1]);
+        } else {
+          // start and end are off-curve points, creating implicit one
+          var p = {
+            flags: 1,
+            x: (contour[0].x + contour[contour.length - 1].x) / 2,
+            y: (contour[0].y + contour[contour.length - 1].y) / 2
+          };
+          contour.unshift(p);
+          contour.push(p);
+        }
+        moveTo(contour[0].x, contour[0].y);
+        for (j = 1, jj = contour.length; j < jj; j++) {
+          if ((contour[j].flags & 1)) {
+            lineTo(contour[j].x, contour[j].y);
+          } else if ((contour[j + 1].flags & 1)){
+            quadraticCurveTo(contour[j].x, contour[j].y,
+                             contour[j + 1].x, contour[j + 1].y);
+            j++;
+          } else {
+            quadraticCurveTo(contour[j].x, contour[j].y,
+              (contour[j].x + contour[j + 1].x) / 2,
+              (contour[j].y + contour[j + 1].y) / 2);
+          }
+        }
+        startPoint = endPoint + 1;
+      }
+    }
+  }
+
+  function compileCharString(code, js, font) {
+    var stack = [];
+    var x = 0, y = 0;
+    var stems = 0;
+
+    function moveTo(x, y) {
+      js.push('c.moveTo(' + x + ',' + y + ');');
+    }
+    function lineTo(x, y) {
+      js.push('c.lineTo(' + x + ',' + y + ');');
+    }
+    function bezierCurveTo(x1, y1, x2, y2, x, y) {
+      js.push('c.bezierCurveTo(' + x1 + ',' + y1 + ',' + x2 + ',' + y2 + ',' +
+                                   x + ',' + y + ');');
+    }
+
+    function parse(code) {
+      var i = 0;
+      while (i < code.length) {
+        var stackClean = false;
+        var v = code[i++];
+        var xa, xb, ya, yb, y1, y2, y3, n, subrCode;
+        switch (v) {
+          case 1: // hstem
+            stems += stack.length >> 1;
+            stackClean = true;
+            break;
+          case 3: // vstem
+            stems += stack.length >> 1;
+            stackClean = true;
+            break;
+          case 4: // vmoveto
+            y += stack.pop();
+            moveTo(x, y);
+            stackClean = true;
+            break;
+          case 5: // rlineto
+            while (stack.length > 0) {
+              x += stack.shift();
+              y += stack.shift();
+              lineTo(x, y);
+            }
+            break;
+          case 6: // hlineto
+            while (stack.length > 0) {
+              x += stack.shift();
+              lineTo(x, y);
+              if (stack.length === 0) {
+                break;
+              }
+              y += stack.shift();
+              lineTo(x, y);
+            }
+            break;
+          case 7: // vlineto
+            while (stack.length > 0) {
+              y += stack.shift();
+              lineTo(x, y);
+              if (stack.length === 0) {
+                break;
+              }
+              x += stack.shift();
+              lineTo(x, y);
+            }
+            break;
+          case 8: // rrcurveto
+            while (stack.length > 0) {
+              xa = x + stack.shift(); ya = y + stack.shift();
+              xb = xa + stack.shift(); yb = ya + stack.shift();
+              x = xb + stack.shift(); y = yb + stack.shift();
+              bezierCurveTo(xa, ya, xb, yb, x, y);
+            }
+            break;
+          case 10: // callsubr
+            n = stack.pop() + font.subrsBias;
+            subrCode = font.subrs[n];
+            if (subrCode) {
+              parse(subrCode);
+            }
+            break;
+          case 11: // return
+            return;
+          case 12:
+            v = code[i++];
+            switch (v) {
+              case 34: // flex
+                xa = x + stack.shift();
+                xb = xa + stack.shift(); y1 = y + stack.shift();
+                x = xb + stack.shift();
+                bezierCurveTo(xa, y, xb, y1, x, y1);
+                xa = x + stack.shift();
+                xb = xa + stack.shift();
+                x = xb + stack.shift();
+                bezierCurveTo(xa, y1, xb, y, x, y);
+                break;
+              case 35: // flex
+                xa = x + stack.shift(); ya = y + stack.shift();
+                xb = xa + stack.shift(); yb = ya + stack.shift();
+                x = xb + stack.shift(); y = yb + stack.shift();
+                bezierCurveTo(xa, ya, xb, yb, x, y);
+                xa = x + stack.shift(); ya = y + stack.shift();
+                xb = xa + stack.shift(); yb = ya + stack.shift();
+                x = xb + stack.shift(); y = yb + stack.shift();
+                bezierCurveTo(xa, ya, xb, yb, x, y);
+                stack.pop(); // fd
+                break;
+              case 36: // hflex1
+                xa = x + stack.shift(); y1 = y + stack.shift();
+                xb = xa + stack.shift(); y2 = y1 + stack.shift();
+                x = xb + stack.shift();
+                bezierCurveTo(xa, y1, xb, y2, x, y2);
+                xa = x + stack.shift();
+                xb = xa + stack.shift(); y3 = y2 + stack.shift();
+                x = xb + stack.shift();
+                bezierCurveTo(xa, y2, xb, y3, x, y);
+                break;
+              case 37: // flex1
+                var x0 = x, y0 = y;
+                xa = x + stack.shift(); ya = y + stack.shift();
+                xb = xa + stack.shift(); yb = ya + stack.shift();
+                x = xb + stack.shift(); y = yb + stack.shift();
+                bezierCurveTo(xa, ya, xb, yb, x, y);
+                xa = x + stack.shift(); ya = y + stack.shift();
+                xb = xa + stack.shift(); yb = ya + stack.shift();
+                x = xb; y = yb;
+                if (Math.abs(x - x0) > Math.abs(y - y0)) {
+                  x += stack.shift();
+                } else  {
+                  y += stack.shift();
+                }
+                bezierCurveTo(xa, ya, xb, yb, x, y);
+                break;
+              default:
+                error('unknown operator: 12 ' + v);
+            }
+            break;
+          case 14: // endchar
+            if (stack.length >= 4) {
+              var achar = stack.pop();
+              var bchar = stack.pop();
+              y = stack.pop();
+              x = stack.pop();
+              js.push('c.save();');
+              js.push('c.translate('+ x + ',' + y + ');');
+              var gid = lookupCmap(font.cmap, String.fromCharCode(
+                font.glyphNameMap[Encodings.StandardEncoding[achar]]));
+              compileCharString(font.glyphs[gid], js, font);
+              js.push('c.restore();');
+
+              gid = lookupCmap(font.cmap, String.fromCharCode(
+                font.glyphNameMap[Encodings.StandardEncoding[bchar]]));
+              compileCharString(font.glyphs[gid], js, font);
+            }
+            return;
+          case 18: // hstemhm
+            stems += stack.length >> 1;
+            stackClean = true;
+            break;
+          case 19: // hintmask
+            stems += stack.length >> 1;
+            i += (stems + 7) >> 3;
+            stackClean = true;
+            break;
+          case 20: // cntrmask
+            stems += stack.length >> 1;
+            i += (stems + 7) >> 3;
+            stackClean = true;
+            break;
+          case 21: // rmoveto
+            y += stack.pop();
+            x += stack.pop();
+            moveTo(x, y);
+            stackClean = true;
+            break;
+          case 22: // hmoveto
+            x += stack.pop();
+            moveTo(x, y);
+            stackClean = true;
+            break;
+          case 23: // vstemhm
+            stems += stack.length >> 1;
+            stackClean = true;
+            break;
+          case 24: // rcurveline
+            while (stack.length > 2) {
+              xa = x + stack.shift(); ya = y + stack.shift();
+              xb = xa + stack.shift(); yb = ya + stack.shift();
+              x = xb + stack.shift(); y = yb + stack.shift();
+              bezierCurveTo(xa, ya, xb, yb, x, y);
+            }
+            x += stack.shift();
+            y += stack.shift();
+            lineTo(x, y);
+            break;
+          case 25: // rlinecurve
+            while (stack.length > 6) {
+              x += stack.shift();
+              y += stack.shift();
+              lineTo(x, y);
+            }
+            xa = x + stack.shift(); ya = y + stack.shift();
+            xb = xa + stack.shift(); yb = ya + stack.shift();
+            x = xb + stack.shift(); y = yb + stack.shift();
+            bezierCurveTo(xa, ya, xb, yb, x, y);
+            break;
+          case 26: // vvcurveto
+            if (stack.length % 2) {
+              x += stack.shift();
+            }
+            while (stack.length > 0) {
+              xa = x; ya = y + stack.shift();
+              xb = xa + stack.shift(); yb = ya + stack.shift();
+              x = xb; y = yb + stack.shift();
+              bezierCurveTo(xa, ya, xb, yb, x, y);
+            }
+            break;
+          case 27: // hhcurveto
+            if (stack.length % 2) {
+              y += stack.shift();
+            }
+            while (stack.length > 0) {
+              xa = x + stack.shift(); ya = y;
+              xb = xa + stack.shift(); yb = ya + stack.shift();
+              x = xb + stack.shift(); y = yb;
+              bezierCurveTo(xa, ya, xb, yb, x, y);
+            }
+            break;
+          case 28:
+            stack.push(((code[i] << 24) | (code[i + 1] << 16)) >> 16);
+            i += 2;
+            break;
+          case 29: // callgsubr
+            n = stack.pop() + font.gsubrsBias;
+            subrCode = font.gsubrs[n];
+            if (subrCode) {
+              parse(subrCode);
+            }
+            break;
+          case 30: // vhcurveto
+            while (stack.length > 0) {
+              xa = x; ya = y + stack.shift();
+              xb = xa + stack.shift(); yb = ya + stack.shift();
+              x = xb + stack.shift();
+              y = yb + (stack.length === 1 ? stack.shift() : 0);
+              bezierCurveTo(xa, ya, xb, yb, x, y);
+              if (stack.length === 0) {
+                break;
+              }
+
+              xa = x + stack.shift(); ya = y;
+              xb = xa + stack.shift(); yb = ya + stack.shift();
+              y = yb + stack.shift();
+              x = xb + (stack.length === 1 ? stack.shift() : 0);
+              bezierCurveTo(xa, ya, xb, yb, x, y);
+            }
+            break;
+          case 31: // hvcurveto
+            while (stack.length > 0) {
+              xa = x + stack.shift(); ya = y;
+              xb = xa + stack.shift(); yb = ya + stack.shift();
+              y = yb + stack.shift();
+              x = xb + (stack.length === 1 ? stack.shift() : 0);
+              bezierCurveTo(xa, ya, xb, yb, x, y);
+              if (stack.length === 0) {
+                break;
+              }
+
+              xa = x; ya = y + stack.shift();
+              xb = xa + stack.shift(); yb = ya + stack.shift();
+              x = xb + stack.shift();
+              y = yb + (stack.length === 1 ? stack.shift() : 0);
+              bezierCurveTo(xa, ya, xb, yb, x, y);
+            }
+            break;
+          default:
+            if (v < 32) {
+              error('unknown operator: ' + v);
+            }
+            if (v < 247) {
+              stack.push(v - 139);
+            } else if (v < 251) {
+              stack.push((v - 247) * 256 + code[i++] + 108);
+            } else if (v < 255) {
+              stack.push(-(v - 251) * 256 - code[i++] - 108);
+            } else {
+              stack.push(((code[i] << 24) | (code[i + 1] << 16) |
+                         (code[i + 2] << 8) | code[i + 3]) / 65536);
+              i += 4;
+            }
+            break;
+        }
+        if (stackClean) {
+          stack.length = 0;
+        }
+      }
+    }
+    parse(code);
+  }
+
+  var noop = '';
+
+  function CompiledFont(fontMatrix) {
+    this.compiledGlyphs = {};
+    this.fontMatrix = fontMatrix;
+  }
+  CompiledFont.prototype = {
+    getPathJs: function (unicode) {
+      var gid = lookupCmap(this.cmap, unicode);
+      var fn = this.compiledGlyphs[gid];
+      if (!fn) {
+        this.compiledGlyphs[gid] = fn = this.compileGlyph(this.glyphs[gid]);
+      }
+      return fn;
+    },
+
+    compileGlyph: function (code) {
+      if (!code || code.length === 0 || code[0] === 14) {
+        return noop;
+      }
+
+      var js = [];
+      js.push('c.save();');
+      js.push('c.transform(' + this.fontMatrix.join(',') + ');');
+      js.push('c.scale(size, -size);');
+
+      this.compileGlyphImpl(code, js);
+
+      js.push('c.restore();');
+
+      return js.join('\n');
+    },
+
+    compileGlyphImpl: function () {
+      error('Children classes should implement this.');
+    },
+
+    hasBuiltPath: function (unicode) {
+      var gid = lookupCmap(this.cmap, unicode);
+      return gid in this.compiledGlyphs;
+    }
+  };
+
+  function TrueTypeCompiled(glyphs, cmap, fontMatrix) {
+    fontMatrix = fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0];
+    CompiledFont.call(this, fontMatrix);
+
+    this.glyphs = glyphs;
+    this.cmap = cmap;
+
+    this.compiledGlyphs = [];
+  }
+
+  Util.inherit(TrueTypeCompiled, CompiledFont, {
+    compileGlyphImpl: function (code, js) {
+      compileGlyf(code, js, this);
+    }
+  });
+
+  function Type2Compiled(cffInfo, cmap, fontMatrix, glyphNameMap) {
+    fontMatrix = fontMatrix || [0.001, 0, 0, 0.001, 0, 0];
+    CompiledFont.call(this, fontMatrix);
+    this.glyphs = cffInfo.glyphs;
+    this.gsubrs = cffInfo.gsubrs || [];
+    this.subrs = cffInfo.subrs || [];
+    this.cmap = cmap;
+    this.glyphNameMap = glyphNameMap || GlyphsUnicode;
+
+    this.compiledGlyphs = [];
+    this.gsubrsBias = (this.gsubrs.length < 1240 ?
+                       107 : (this.gsubrs.length < 33900 ? 1131 : 32768));
+    this.subrsBias = (this.subrs.length < 1240 ?
+                      107 : (this.subrs.length < 33900 ? 1131 : 32768));
+  }
+
+  Util.inherit(Type2Compiled, CompiledFont, {
+    compileGlyphImpl: function (code, js) {
+      compileCharString(code, js, this);
+    }
+  });
+
+
+  return {
+    create: function FontRendererFactory_create(font) {
+      var data = new Uint8Array(font.data);
+      var cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm;
+      var numTables = getUshort(data, 4);
+      for (var i = 0, p = 12; i < numTables; i++, p += 16) {
+        var tag = bytesToString(data.subarray(p, p + 4));
+        var offset = getLong(data, p + 8);
+        var length = getLong(data, p + 12);
+        switch (tag) {
+          case 'cmap':
+            cmap = parseCmap(data, offset, offset + length);
+            break;
+          case 'glyf':
+            glyf = data.subarray(offset, offset + length);
+            break;
+          case 'loca':
+            loca = data.subarray(offset, offset + length);
+            break;
+          case 'head':
+            unitsPerEm = getUshort(data, offset + 18);
+            indexToLocFormat = getUshort(data, offset + 50);
+            break;
+          case 'CFF ':
+            cff = parseCff(data, offset, offset + length);
+            break;
+        }
+      }
+
+      if (glyf) {
+        var fontMatrix = (!unitsPerEm ? font.fontMatrix :
+                          [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0]);
+        return new TrueTypeCompiled(
+          parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix);
+      } else {
+        return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap);
+      }
+    }
+  };
+})();
+
+
+var GlyphsUnicode = {
+  A: 0x0041,
+  AE: 0x00C6,
+  AEacute: 0x01FC,
+  AEmacron: 0x01E2,
+  AEsmall: 0xF7E6,
+  Aacute: 0x00C1,
+  Aacutesmall: 0xF7E1,
+  Abreve: 0x0102,
+  Abreveacute: 0x1EAE,
+  Abrevecyrillic: 0x04D0,
+  Abrevedotbelow: 0x1EB6,
+  Abrevegrave: 0x1EB0,
+  Abrevehookabove: 0x1EB2,
+  Abrevetilde: 0x1EB4,
+  Acaron: 0x01CD,
+  Acircle: 0x24B6,
+  Acircumflex: 0x00C2,
+  Acircumflexacute: 0x1EA4,
+  Acircumflexdotbelow: 0x1EAC,
+  Acircumflexgrave: 0x1EA6,
+  Acircumflexhookabove: 0x1EA8,
+  Acircumflexsmall: 0xF7E2,
+  Acircumflextilde: 0x1EAA,
+  Acute: 0xF6C9,
+  Acutesmall: 0xF7B4,
+  Acyrillic: 0x0410,
+  Adblgrave: 0x0200,
+  Adieresis: 0x00C4,
+  Adieresiscyrillic: 0x04D2,
+  Adieresismacron: 0x01DE,
+  Adieresissmall: 0xF7E4,
+  Adotbelow: 0x1EA0,
+  Adotmacron: 0x01E0,
+  Agrave: 0x00C0,
+  Agravesmall: 0xF7E0,
+  Ahookabove: 0x1EA2,
+  Aiecyrillic: 0x04D4,
+  Ainvertedbreve: 0x0202,
+  Alpha: 0x0391,
+  Alphatonos: 0x0386,
+  Amacron: 0x0100,
+  Amonospace: 0xFF21,
+  Aogonek: 0x0104,
+  Aring: 0x00C5,
+  Aringacute: 0x01FA,
+  Aringbelow: 0x1E00,
+  Aringsmall: 0xF7E5,
+  Asmall: 0xF761,
+  Atilde: 0x00C3,
+  Atildesmall: 0xF7E3,
+  Aybarmenian: 0x0531,
+  B: 0x0042,
+  Bcircle: 0x24B7,
+  Bdotaccent: 0x1E02,
+  Bdotbelow: 0x1E04,
+  Becyrillic: 0x0411,
+  Benarmenian: 0x0532,
+  Beta: 0x0392,
+  Bhook: 0x0181,
+  Blinebelow: 0x1E06,
+  Bmonospace: 0xFF22,
+  Brevesmall: 0xF6F4,
+  Bsmall: 0xF762,
+  Btopbar: 0x0182,
+  C: 0x0043,
+  Caarmenian: 0x053E,
+  Cacute: 0x0106,
+  Caron: 0xF6CA,
+  Caronsmall: 0xF6F5,
+  Ccaron: 0x010C,
+  Ccedilla: 0x00C7,
+  Ccedillaacute: 0x1E08,
+  Ccedillasmall: 0xF7E7,
+  Ccircle: 0x24B8,
+  Ccircumflex: 0x0108,
+  Cdot: 0x010A,
+  Cdotaccent: 0x010A,
+  Cedillasmall: 0xF7B8,
+  Chaarmenian: 0x0549,
+  Cheabkhasiancyrillic: 0x04BC,
+  Checyrillic: 0x0427,
+  Chedescenderabkhasiancyrillic: 0x04BE,
+  Chedescendercyrillic: 0x04B6,
+  Chedieresiscyrillic: 0x04F4,
+  Cheharmenian: 0x0543,
+  Chekhakassiancyrillic: 0x04CB,
+  Cheverticalstrokecyrillic: 0x04B8,
+  Chi: 0x03A7,
+  Chook: 0x0187,
+  Circumflexsmall: 0xF6F6,
+  Cmonospace: 0xFF23,
+  Coarmenian: 0x0551,
+  Csmall: 0xF763,
+  D: 0x0044,
+  DZ: 0x01F1,
+  DZcaron: 0x01C4,
+  Daarmenian: 0x0534,
+  Dafrican: 0x0189,
+  Dcaron: 0x010E,
+  Dcedilla: 0x1E10,
+  Dcircle: 0x24B9,
+  Dcircumflexbelow: 0x1E12,
+  Dcroat: 0x0110,
+  Ddotaccent: 0x1E0A,
+  Ddotbelow: 0x1E0C,
+  Decyrillic: 0x0414,
+  Deicoptic: 0x03EE,
+  Delta: 0x2206,
+  Deltagreek: 0x0394,
+  Dhook: 0x018A,
+  Dieresis: 0xF6CB,
+  DieresisAcute: 0xF6CC,
+  DieresisGrave: 0xF6CD,
+  Dieresissmall: 0xF7A8,
+  Digammagreek: 0x03DC,
+  Djecyrillic: 0x0402,
+  Dlinebelow: 0x1E0E,
+  Dmonospace: 0xFF24,
+  Dotaccentsmall: 0xF6F7,
+  Dslash: 0x0110,
+  Dsmall: 0xF764,
+  Dtopbar: 0x018B,
+  Dz: 0x01F2,
+  Dzcaron: 0x01C5,
+  Dzeabkhasiancyrillic: 0x04E0,
+  Dzecyrillic: 0x0405,
+  Dzhecyrillic: 0x040F,
+  E: 0x0045,
+  Eacute: 0x00C9,
+  Eacutesmall: 0xF7E9,
+  Ebreve: 0x0114,
+  Ecaron: 0x011A,
+  Ecedillabreve: 0x1E1C,
+  Echarmenian: 0x0535,
+  Ecircle: 0x24BA,
+  Ecircumflex: 0x00CA,
+  Ecircumflexacute: 0x1EBE,
+  Ecircumflexbelow: 0x1E18,
+  Ecircumflexdotbelow: 0x1EC6,
+  Ecircumflexgrave: 0x1EC0,
+  Ecircumflexhookabove: 0x1EC2,
+  Ecircumflexsmall: 0xF7EA,
+  Ecircumflextilde: 0x1EC4,
+  Ecyrillic: 0x0404,
+  Edblgrave: 0x0204,
+  Edieresis: 0x00CB,
+  Edieresissmall: 0xF7EB,
+  Edot: 0x0116,
+  Edotaccent: 0x0116,
+  Edotbelow: 0x1EB8,
+  Efcyrillic: 0x0424,
+  Egrave: 0x00C8,
+  Egravesmall: 0xF7E8,
+  Eharmenian: 0x0537,
+  Ehookabove: 0x1EBA,
+  Eightroman: 0x2167,
+  Einvertedbreve: 0x0206,
+  Eiotifiedcyrillic: 0x0464,
+  Elcyrillic: 0x041B,
+  Elevenroman: 0x216A,
+  Emacron: 0x0112,
+  Emacronacute: 0x1E16,
+  Emacrongrave: 0x1E14,
+  Emcyrillic: 0x041C,
+  Emonospace: 0xFF25,
+  Encyrillic: 0x041D,
+  Endescendercyrillic: 0x04A2,
+  Eng: 0x014A,
+  Enghecyrillic: 0x04A4,
+  Enhookcyrillic: 0x04C7,
+  Eogonek: 0x0118,
+  Eopen: 0x0190,
+  Epsilon: 0x0395,
+  Epsilontonos: 0x0388,
+  Ercyrillic: 0x0420,
+  Ereversed: 0x018E,
+  Ereversedcyrillic: 0x042D,
+  Escyrillic: 0x0421,
+  Esdescendercyrillic: 0x04AA,
+  Esh: 0x01A9,
+  Esmall: 0xF765,
+  Eta: 0x0397,
+  Etarmenian: 0x0538,
+  Etatonos: 0x0389,
+  Eth: 0x00D0,
+  Ethsmall: 0xF7F0,
+  Etilde: 0x1EBC,
+  Etildebelow: 0x1E1A,
+  Euro: 0x20AC,
+  Ezh: 0x01B7,
+  Ezhcaron: 0x01EE,
+  Ezhreversed: 0x01B8,
+  F: 0x0046,
+  Fcircle: 0x24BB,
+  Fdotaccent: 0x1E1E,
+  Feharmenian: 0x0556,
+  Feicoptic: 0x03E4,
+  Fhook: 0x0191,
+  Fitacyrillic: 0x0472,
+  Fiveroman: 0x2164,
+  Fmonospace: 0xFF26,
+  Fourroman: 0x2163,
+  Fsmall: 0xF766,
+  G: 0x0047,
+  GBsquare: 0x3387,
+  Gacute: 0x01F4,
+  Gamma: 0x0393,
+  Gammaafrican: 0x0194,
+  Gangiacoptic: 0x03EA,
+  Gbreve: 0x011E,
+  Gcaron: 0x01E6,
+  Gcedilla: 0x0122,
+  Gcircle: 0x24BC,
+  Gcircumflex: 0x011C,
+  Gcommaaccent: 0x0122,
+  Gdot: 0x0120,
+  Gdotaccent: 0x0120,
+  Gecyrillic: 0x0413,
+  Ghadarmenian: 0x0542,
+  Ghemiddlehookcyrillic: 0x0494,
+  Ghestrokecyrillic: 0x0492,
+  Gheupturncyrillic: 0x0490,
+  Ghook: 0x0193,
+  Gimarmenian: 0x0533,
+  Gjecyrillic: 0x0403,
+  Gmacron: 0x1E20,
+  Gmonospace: 0xFF27,
+  Grave: 0xF6CE,
+  Gravesmall: 0xF760,
+  Gsmall: 0xF767,
+  Gsmallhook: 0x029B,
+  Gstroke: 0x01E4,
+  H: 0x0048,
+  H18533: 0x25CF,
+  H18543: 0x25AA,
+  H18551: 0x25AB,
+  H22073: 0x25A1,
+  HPsquare: 0x33CB,
+  Haabkhasiancyrillic: 0x04A8,
+  Hadescendercyrillic: 0x04B2,
+  Hardsigncyrillic: 0x042A,
+  Hbar: 0x0126,
+  Hbrevebelow: 0x1E2A,
+  Hcedilla: 0x1E28,
+  Hcircle: 0x24BD,
+  Hcircumflex: 0x0124,
+  Hdieresis: 0x1E26,
+  Hdotaccent: 0x1E22,
+  Hdotbelow: 0x1E24,
+  Hmonospace: 0xFF28,
+  Hoarmenian: 0x0540,
+  Horicoptic: 0x03E8,
+  Hsmall: 0xF768,
+  Hungarumlaut: 0xF6CF,
+  Hungarumlautsmall: 0xF6F8,
+  Hzsquare: 0x3390,
+  I: 0x0049,
+  IAcyrillic: 0x042F,
+  IJ: 0x0132,
+  IUcyrillic: 0x042E,
+  Iacute: 0x00CD,
+  Iacutesmall: 0xF7ED,
+  Ibreve: 0x012C,
+  Icaron: 0x01CF,
+  Icircle: 0x24BE,
+  Icircumflex: 0x00CE,
+  Icircumflexsmall: 0xF7EE,
+  Icyrillic: 0x0406,
+  Idblgrave: 0x0208,
+  Idieresis: 0x00CF,
+  Idieresisacute: 0x1E2E,
+  Idieresiscyrillic: 0x04E4,
+  Idieresissmall: 0xF7EF,
+  Idot: 0x0130,
+  Idotaccent: 0x0130,
+  Idotbelow: 0x1ECA,
+  Iebrevecyrillic: 0x04D6,
+  Iecyrillic: 0x0415,
+  Ifraktur: 0x2111,
+  Igrave: 0x00CC,
+  Igravesmall: 0xF7EC,
+  Ihookabove: 0x1EC8,
+  Iicyrillic: 0x0418,
+  Iinvertedbreve: 0x020A,
+  Iishortcyrillic: 0x0419,
+  Imacron: 0x012A,
+  Imacroncyrillic: 0x04E2,
+  Imonospace: 0xFF29,
+  Iniarmenian: 0x053B,
+  Iocyrillic: 0x0401,
+  Iogonek: 0x012E,
+  Iota: 0x0399,
+  Iotaafrican: 0x0196,
+  Iotadieresis: 0x03AA,
+  Iotatonos: 0x038A,
+  Ismall: 0xF769,
+  Istroke: 0x0197,
+  Itilde: 0x0128,
+  Itildebelow: 0x1E2C,
+  Izhitsacyrillic: 0x0474,
+  Izhitsadblgravecyrillic: 0x0476,
+  J: 0x004A,
+  Jaarmenian: 0x0541,
+  Jcircle: 0x24BF,
+  Jcircumflex: 0x0134,
+  Jecyrillic: 0x0408,
+  Jheharmenian: 0x054B,
+  Jmonospace: 0xFF2A,
+  Jsmall: 0xF76A,
+  K: 0x004B,
+  KBsquare: 0x3385,
+  KKsquare: 0x33CD,
+  Kabashkircyrillic: 0x04A0,
+  Kacute: 0x1E30,
+  Kacyrillic: 0x041A,
+  Kadescendercyrillic: 0x049A,
+  Kahookcyrillic: 0x04C3,
+  Kappa: 0x039A,
+  Kastrokecyrillic: 0x049E,
+  Kaverticalstrokecyrillic: 0x049C,
+  Kcaron: 0x01E8,
+  Kcedilla: 0x0136,
+  Kcircle: 0x24C0,
+  Kcommaaccent: 0x0136,
+  Kdotbelow: 0x1E32,
+  Keharmenian: 0x0554,
+  Kenarmenian: 0x053F,
+  Khacyrillic: 0x0425,
+  Kheicoptic: 0x03E6,
+  Khook: 0x0198,
+  Kjecyrillic: 0x040C,
+  Klinebelow: 0x1E34,
+  Kmonospace: 0xFF2B,
+  Koppacyrillic: 0x0480,
+  Koppagreek: 0x03DE,
+  Ksicyrillic: 0x046E,
+  Ksmall: 0xF76B,
+  L: 0x004C,
+  LJ: 0x01C7,
+  LL: 0xF6BF,
+  Lacute: 0x0139,
+  Lambda: 0x039B,
+  Lcaron: 0x013D,
+  Lcedilla: 0x013B,
+  Lcircle: 0x24C1,
+  Lcircumflexbelow: 0x1E3C,
+  Lcommaaccent: 0x013B,
+  Ldot: 0x013F,
+  Ldotaccent: 0x013F,
+  Ldotbelow: 0x1E36,
+  Ldotbelowmacron: 0x1E38,
+  Liwnarmenian: 0x053C,
+  Lj: 0x01C8,
+  Ljecyrillic: 0x0409,
+  Llinebelow: 0x1E3A,
+  Lmonospace: 0xFF2C,
+  Lslash: 0x0141,
+  Lslashsmall: 0xF6F9,
+  Lsmall: 0xF76C,
+  M: 0x004D,
+  MBsquare: 0x3386,
+  Macron: 0xF6D0,
+  Macronsmall: 0xF7AF,
+  Macute: 0x1E3E,
+  Mcircle: 0x24C2,
+  Mdotaccent: 0x1E40,
+  Mdotbelow: 0x1E42,
+  Menarmenian: 0x0544,
+  Mmonospace: 0xFF2D,
+  Msmall: 0xF76D,
+  Mturned: 0x019C,
+  Mu: 0x039C,
+  N: 0x004E,
+  NJ: 0x01CA,
+  Nacute: 0x0143,
+  Ncaron: 0x0147,
+  Ncedilla: 0x0145,
+  Ncircle: 0x24C3,
+  Ncircumflexbelow: 0x1E4A,
+  Ncommaaccent: 0x0145,
+  Ndotaccent: 0x1E44,
+  Ndotbelow: 0x1E46,
+  Nhookleft: 0x019D,
+  Nineroman: 0x2168,
+  Nj: 0x01CB,
+  Njecyrillic: 0x040A,
+  Nlinebelow: 0x1E48,
+  Nmonospace: 0xFF2E,
+  Nowarmenian: 0x0546,
+  Nsmall: 0xF76E,
+  Ntilde: 0x00D1,
+  Ntildesmall: 0xF7F1,
+  Nu: 0x039D,
+  O: 0x004F,
+  OE: 0x0152,
+  OEsmall: 0xF6FA,
+  Oacute: 0x00D3,
+  Oacutesmall: 0xF7F3,
+  Obarredcyrillic: 0x04E8,
+  Obarreddieresiscyrillic: 0x04EA,
+  Obreve: 0x014E,
+  Ocaron: 0x01D1,
+  Ocenteredtilde: 0x019F,
+  Ocircle: 0x24C4,
+  Ocircumflex: 0x00D4,
+  Ocircumflexacute: 0x1ED0,
+  Ocircumflexdotbelow: 0x1ED8,
+  Ocircumflexgrave: 0x1ED2,
+  Ocircumflexhookabove: 0x1ED4,
+  Ocircumflexsmall: 0xF7F4,
+  Ocircumflextilde: 0x1ED6,
+  Ocyrillic: 0x041E,
+  Odblacute: 0x0150,
+  Odblgrave: 0x020C,
+  Odieresis: 0x00D6,
+  Odieresiscyrillic: 0x04E6,
+  Odieresissmall: 0xF7F6,
+  Odotbelow: 0x1ECC,
+  Ogoneksmall: 0xF6FB,
+  Ograve: 0x00D2,
+  Ogravesmall: 0xF7F2,
+  Oharmenian: 0x0555,
+  Ohm: 0x2126,
+  Ohookabove: 0x1ECE,
+  Ohorn: 0x01A0,
+  Ohornacute: 0x1EDA,
+  Ohorndotbelow: 0x1EE2,
+  Ohorngrave: 0x1EDC,
+  Ohornhookabove: 0x1EDE,
+  Ohorntilde: 0x1EE0,
+  Ohungarumlaut: 0x0150,
+  Oi: 0x01A2,
+  Oinvertedbreve: 0x020E,
+  Omacron: 0x014C,
+  Omacronacute: 0x1E52,
+  Omacrongrave: 0x1E50,
+  Omega: 0x2126,
+  Omegacyrillic: 0x0460,
+  Omegagreek: 0x03A9,
+  Omegaroundcyrillic: 0x047A,
+  Omegatitlocyrillic: 0x047C,
+  Omegatonos: 0x038F,
+  Omicron: 0x039F,
+  Omicrontonos: 0x038C,
+  Omonospace: 0xFF2F,
+  Oneroman: 0x2160,
+  Oogonek: 0x01EA,
+  Oogonekmacron: 0x01EC,
+  Oopen: 0x0186,
+  Oslash: 0x00D8,
+  Oslashacute: 0x01FE,
+  Oslashsmall: 0xF7F8,
+  Osmall: 0xF76F,
+  Ostrokeacute: 0x01FE,
+  Otcyrillic: 0x047E,
+  Otilde: 0x00D5,
+  Otildeacute: 0x1E4C,
+  Otildedieresis: 0x1E4E,
+  Otildesmall: 0xF7F5,
+  P: 0x0050,
+  Pacute: 0x1E54,
+  Pcircle: 0x24C5,
+  Pdotaccent: 0x1E56,
+  Pecyrillic: 0x041F,
+  Peharmenian: 0x054A,
+  Pemiddlehookcyrillic: 0x04A6,
+  Phi: 0x03A6,
+  Phook: 0x01A4,
+  Pi: 0x03A0,
+  Piwrarmenian: 0x0553,
+  Pmonospace: 0xFF30,
+  Psi: 0x03A8,
+  Psicyrillic: 0x0470,
+  Psmall: 0xF770,
+  Q: 0x0051,
+  Qcircle: 0x24C6,
+  Qmonospace: 0xFF31,
+  Qsmall: 0xF771,
+  R: 0x0052,
+  Raarmenian: 0x054C,
+  Racute: 0x0154,
+  Rcaron: 0x0158,
+  Rcedilla: 0x0156,
+  Rcircle: 0x24C7,
+  Rcommaaccent: 0x0156,
+  Rdblgrave: 0x0210,
+  Rdotaccent: 0x1E58,
+  Rdotbelow: 0x1E5A,
+  Rdotbelowmacron: 0x1E5C,
+  Reharmenian: 0x0550,
+  Rfraktur: 0x211C,
+  Rho: 0x03A1,
+  Ringsmall: 0xF6FC,
+  Rinvertedbreve: 0x0212,
+  Rlinebelow: 0x1E5E,
+  Rmonospace: 0xFF32,
+  Rsmall: 0xF772,
+  Rsmallinverted: 0x0281,
+  Rsmallinvertedsuperior: 0x02B6,
+  S: 0x0053,
+  SF010000: 0x250C,
+  SF020000: 0x2514,
+  SF030000: 0x2510,
+  SF040000: 0x2518,
+  SF050000: 0x253C,
+  SF060000: 0x252C,
+  SF070000: 0x2534,
+  SF080000: 0x251C,
+  SF090000: 0x2524,
+  SF100000: 0x2500,
+  SF110000: 0x2502,
+  SF190000: 0x2561,
+  SF200000: 0x2562,
+  SF210000: 0x2556,
+  SF220000: 0x2555,
+  SF230000: 0x2563,
+  SF240000: 0x2551,
+  SF250000: 0x2557,
+  SF260000: 0x255D,
+  SF270000: 0x255C,
+  SF280000: 0x255B,
+  SF360000: 0x255E,
+  SF370000: 0x255F,
+  SF380000: 0x255A,
+  SF390000: 0x2554,
+  SF400000: 0x2569,
+  SF410000: 0x2566,
+  SF420000: 0x2560,
+  SF430000: 0x2550,
+  SF440000: 0x256C,
+  SF450000: 0x2567,
+  SF460000: 0x2568,
+  SF470000: 0x2564,
+  SF480000: 0x2565,
+  SF490000: 0x2559,
+  SF500000: 0x2558,
+  SF510000: 0x2552,
+  SF520000: 0x2553,
+  SF530000: 0x256B,
+  SF540000: 0x256A,
+  Sacute: 0x015A,
+  Sacutedotaccent: 0x1E64,
+  Sampigreek: 0x03E0,
+  Scaron: 0x0160,
+  Scarondotaccent: 0x1E66,
+  Scaronsmall: 0xF6FD,
+  Scedilla: 0x015E,
+  Schwa: 0x018F,
+  Schwacyrillic: 0x04D8,
+  Schwadieresiscyrillic: 0x04DA,
+  Scircle: 0x24C8,
+  Scircumflex: 0x015C,
+  Scommaaccent: 0x0218,
+  Sdotaccent: 0x1E60,
+  Sdotbelow: 0x1E62,
+  Sdotbelowdotaccent: 0x1E68,
+  Seharmenian: 0x054D,
+  Sevenroman: 0x2166,
+  Shaarmenian: 0x0547,
+  Shacyrillic: 0x0428,
+  Shchacyrillic: 0x0429,
+  Sheicoptic: 0x03E2,
+  Shhacyrillic: 0x04BA,
+  Shimacoptic: 0x03EC,
+  Sigma: 0x03A3,
+  Sixroman: 0x2165,
+  Smonospace: 0xFF33,
+  Softsigncyrillic: 0x042C,
+  Ssmall: 0xF773,
+  Stigmagreek: 0x03DA,
+  T: 0x0054,
+  Tau: 0x03A4,
+  Tbar: 0x0166,
+  Tcaron: 0x0164,
+  Tcedilla: 0x0162,
+  Tcircle: 0x24C9,
+  Tcircumflexbelow: 0x1E70,
+  Tcommaaccent: 0x0162,
+  Tdotaccent: 0x1E6A,
+  Tdotbelow: 0x1E6C,
+  Tecyrillic: 0x0422,
+  Tedescendercyrillic: 0x04AC,
+  Tenroman: 0x2169,
+  Tetsecyrillic: 0x04B4,
+  Theta: 0x0398,
+  Thook: 0x01AC,
+  Thorn: 0x00DE,
+  Thornsmall: 0xF7FE,
+  Threeroman: 0x2162,
+  Tildesmall: 0xF6FE,
+  Tiwnarmenian: 0x054F,
+  Tlinebelow: 0x1E6E,
+  Tmonospace: 0xFF34,
+  Toarmenian: 0x0539,
+  Tonefive: 0x01BC,
+  Tonesix: 0x0184,
+  Tonetwo: 0x01A7,
+  Tretroflexhook: 0x01AE,
+  Tsecyrillic: 0x0426,
+  Tshecyrillic: 0x040B,
+  Tsmall: 0xF774,
+  Twelveroman: 0x216B,
+  Tworoman: 0x2161,
+  U: 0x0055,
+  Uacute: 0x00DA,
+  Uacutesmall: 0xF7FA,
+  Ubreve: 0x016C,
+  Ucaron: 0x01D3,
+  Ucircle: 0x24CA,
+  Ucircumflex: 0x00DB,
+  Ucircumflexbelow: 0x1E76,
+  Ucircumflexsmall: 0xF7FB,
+  Ucyrillic: 0x0423,
+  Udblacute: 0x0170,
+  Udblgrave: 0x0214,
+  Udieresis: 0x00DC,
+  Udieresisacute: 0x01D7,
+  Udieresisbelow: 0x1E72,
+  Udieresiscaron: 0x01D9,
+  Udieresiscyrillic: 0x04F0,
+  Udieresisgrave: 0x01DB,
+  Udieresismacron: 0x01D5,
+  Udieresissmall: 0xF7FC,
+  Udotbelow: 0x1EE4,
+  Ugrave: 0x00D9,
+  Ugravesmall: 0xF7F9,
+  Uhookabove: 0x1EE6,
+  Uhorn: 0x01AF,
+  Uhornacute: 0x1EE8,
+  Uhorndotbelow: 0x1EF0,
+  Uhorngrave: 0x1EEA,
+  Uhornhookabove: 0x1EEC,
+  Uhorntilde: 0x1EEE,
+  Uhungarumlaut: 0x0170,
+  Uhungarumlautcyrillic: 0x04F2,
+  Uinvertedbreve: 0x0216,
+  Ukcyrillic: 0x0478,
+  Umacron: 0x016A,
+  Umacroncyrillic: 0x04EE,
+  Umacrondieresis: 0x1E7A,
+  Umonospace: 0xFF35,
+  Uogonek: 0x0172,
+  Upsilon: 0x03A5,
+  Upsilon1: 0x03D2,
+  Upsilonacutehooksymbolgreek: 0x03D3,
+  Upsilonafrican: 0x01B1,
+  Upsilondieresis: 0x03AB,
+  Upsilondieresishooksymbolgreek: 0x03D4,
+  Upsilonhooksymbol: 0x03D2,
+  Upsilontonos: 0x038E,
+  Uring: 0x016E,
+  Ushortcyrillic: 0x040E,
+  Usmall: 0xF775,
+  Ustraightcyrillic: 0x04AE,
+  Ustraightstrokecyrillic: 0x04B0,
+  Utilde: 0x0168,
+  Utildeacute: 0x1E78,
+  Utildebelow: 0x1E74,
+  V: 0x0056,
+  Vcircle: 0x24CB,
+  Vdotbelow: 0x1E7E,
+  Vecyrillic: 0x0412,
+  Vewarmenian: 0x054E,
+  Vhook: 0x01B2,
+  Vmonospace: 0xFF36,
+  Voarmenian: 0x0548,
+  Vsmall: 0xF776,
+  Vtilde: 0x1E7C,
+  W: 0x0057,
+  Wacute: 0x1E82,
+  Wcircle: 0x24CC,
+  Wcircumflex: 0x0174,
+  Wdieresis: 0x1E84,
+  Wdotaccent: 0x1E86,
+  Wdotbelow: 0x1E88,
+  Wgrave: 0x1E80,
+  Wmonospace: 0xFF37,
+  Wsmall: 0xF777,
+  X: 0x0058,
+  Xcircle: 0x24CD,
+  Xdieresis: 0x1E8C,
+  Xdotaccent: 0x1E8A,
+  Xeharmenian: 0x053D,
+  Xi: 0x039E,
+  Xmonospace: 0xFF38,
+  Xsmall: 0xF778,
+  Y: 0x0059,
+  Yacute: 0x00DD,
+  Yacutesmall: 0xF7FD,
+  Yatcyrillic: 0x0462,
+  Ycircle: 0x24CE,
+  Ycircumflex: 0x0176,
+  Ydieresis: 0x0178,
+  Ydieresissmall: 0xF7FF,
+  Ydotaccent: 0x1E8E,
+  Ydotbelow: 0x1EF4,
+  Yericyrillic: 0x042B,
+  Yerudieresiscyrillic: 0x04F8,
+  Ygrave: 0x1EF2,
+  Yhook: 0x01B3,
+  Yhookabove: 0x1EF6,
+  Yiarmenian: 0x0545,
+  Yicyrillic: 0x0407,
+  Yiwnarmenian: 0x0552,
+  Ymonospace: 0xFF39,
+  Ysmall: 0xF779,
+  Ytilde: 0x1EF8,
+  Yusbigcyrillic: 0x046A,
+  Yusbigiotifiedcyrillic: 0x046C,
+  Yuslittlecyrillic: 0x0466,
+  Yuslittleiotifiedcyrillic: 0x0468,
+  Z: 0x005A,
+  Zaarmenian: 0x0536,
+  Zacute: 0x0179,
+  Zcaron: 0x017D,
+  Zcaronsmall: 0xF6FF,
+  Zcircle: 0x24CF,
+  Zcircumflex: 0x1E90,
+  Zdot: 0x017B,
+  Zdotaccent: 0x017B,
+  Zdotbelow: 0x1E92,
+  Zecyrillic: 0x0417,
+  Zedescendercyrillic: 0x0498,
+  Zedieresiscyrillic: 0x04DE,
+  Zeta: 0x0396,
+  Zhearmenian: 0x053A,
+  Zhebrevecyrillic: 0x04C1,
+  Zhecyrillic: 0x0416,
+  Zhedescendercyrillic: 0x0496,
+  Zhedieresiscyrillic: 0x04DC,
+  Zlinebelow: 0x1E94,
+  Zmonospace: 0xFF3A,
+  Zsmall: 0xF77A,
+  Zstroke: 0x01B5,
+  a: 0x0061,
+  aabengali: 0x0986,
+  aacute: 0x00E1,
+  aadeva: 0x0906,
+  aagujarati: 0x0A86,
+  aagurmukhi: 0x0A06,
+  aamatragurmukhi: 0x0A3E,
+  aarusquare: 0x3303,
+  aavowelsignbengali: 0x09BE,
+  aavowelsigndeva: 0x093E,
+  aavowelsigngujarati: 0x0ABE,
+  abbreviationmarkarmenian: 0x055F,
+  abbreviationsigndeva: 0x0970,
+  abengali: 0x0985,
+  abopomofo: 0x311A,
+  abreve: 0x0103,
+  abreveacute: 0x1EAF,
+  abrevecyrillic: 0x04D1,
+  abrevedotbelow: 0x1EB7,
+  abrevegrave: 0x1EB1,
+  abrevehookabove: 0x1EB3,
+  abrevetilde: 0x1EB5,
+  acaron: 0x01CE,
+  acircle: 0x24D0,
+  acircumflex: 0x00E2,
+  acircumflexacute: 0x1EA5,
+  acircumflexdotbelow: 0x1EAD,
+  acircumflexgrave: 0x1EA7,
+  acircumflexhookabove: 0x1EA9,
+  acircumflextilde: 0x1EAB,
+  acute: 0x00B4,
+  acutebelowcmb: 0x0317,
+  acutecmb: 0x0301,
+  acutecomb: 0x0301,
+  acutedeva: 0x0954,
+  acutelowmod: 0x02CF,
+  acutetonecmb: 0x0341,
+  acyrillic: 0x0430,
+  adblgrave: 0x0201,
+  addakgurmukhi: 0x0A71,
+  adeva: 0x0905,
+  adieresis: 0x00E4,
+  adieresiscyrillic: 0x04D3,
+  adieresismacron: 0x01DF,
+  adotbelow: 0x1EA1,
+  adotmacron: 0x01E1,
+  ae: 0x00E6,
+  aeacute: 0x01FD,
+  aekorean: 0x3150,
+  aemacron: 0x01E3,
+  afii00208: 0x2015,
+  afii08941: 0x20A4,
+  afii10017: 0x0410,
+  afii10018: 0x0411,
+  afii10019: 0x0412,
+  afii10020: 0x0413,
+  afii10021: 0x0414,
+  afii10022: 0x0415,
+  afii10023: 0x0401,
+  afii10024: 0x0416,
+  afii10025: 0x0417,
+  afii10026: 0x0418,
+  afii10027: 0x0419,
+  afii10028: 0x041A,
+  afii10029: 0x041B,
+  afii10030: 0x041C,
+  afii10031: 0x041D,
+  afii10032: 0x041E,
+  afii10033: 0x041F,
+  afii10034: 0x0420,
+  afii10035: 0x0421,
+  afii10036: 0x0422,
+  afii10037: 0x0423,
+  afii10038: 0x0424,
+  afii10039: 0x0425,
+  afii10040: 0x0426,
+  afii10041: 0x0427,
+  afii10042: 0x0428,
+  afii10043: 0x0429,
+  afii10044: 0x042A,
+  afii10045: 0x042B,
+  afii10046: 0x042C,
+  afii10047: 0x042D,
+  afii10048: 0x042E,
+  afii10049: 0x042F,
+  afii10050: 0x0490,
+  afii10051: 0x0402,
+  afii10052: 0x0403,
+  afii10053: 0x0404,
+  afii10054: 0x0405,
+  afii10055: 0x0406,
+  afii10056: 0x0407,
+  afii10057: 0x0408,
+  afii10058: 0x0409,
+  afii10059: 0x040A,
+  afii10060: 0x040B,
+  afii10061: 0x040C,
+  afii10062: 0x040E,
+  afii10063: 0xF6C4,
+  afii10064: 0xF6C5,
+  afii10065: 0x0430,
+  afii10066: 0x0431,
+  afii10067: 0x0432,
+  afii10068: 0x0433,
+  afii10069: 0x0434,
+  afii10070: 0x0435,
+  afii10071: 0x0451,
+  afii10072: 0x0436,
+  afii10073: 0x0437,
+  afii10074: 0x0438,
+  afii10075: 0x0439,
+  afii10076: 0x043A,
+  afii10077: 0x043B,
+  afii10078: 0x043C,
+  afii10079: 0x043D,
+  afii10080: 0x043E,
+  afii10081: 0x043F,
+  afii10082: 0x0440,
+  afii10083: 0x0441,
+  afii10084: 0x0442,
+  afii10085: 0x0443,
+  afii10086: 0x0444,
+  afii10087: 0x0445,
+  afii10088: 0x0446,
+  afii10089: 0x0447,
+  afii10090: 0x0448,
+  afii10091: 0x0449,
+  afii10092: 0x044A,
+  afii10093: 0x044B,
+  afii10094: 0x044C,
+  afii10095: 0x044D,
+  afii10096: 0x044E,
+  afii10097: 0x044F,
+  afii10098: 0x0491,
+  afii10099: 0x0452,
+  afii10100: 0x0453,
+  afii10101: 0x0454,
+  afii10102: 0x0455,
+  afii10103: 0x0456,
+  afii10104: 0x0457,
+  afii10105: 0x0458,
+  afii10106: 0x0459,
+  afii10107: 0x045A,
+  afii10108: 0x045B,
+  afii10109: 0x045C,
+  afii10110: 0x045E,
+  afii10145: 0x040F,
+  afii10146: 0x0462,
+  afii10147: 0x0472,
+  afii10148: 0x0474,
+  afii10192: 0xF6C6,
+  afii10193: 0x045F,
+  afii10194: 0x0463,
+  afii10195: 0x0473,
+  afii10196: 0x0475,
+  afii10831: 0xF6C7,
+  afii10832: 0xF6C8,
+  afii10846: 0x04D9,
+  afii299: 0x200E,
+  afii300: 0x200F,
+  afii301: 0x200D,
+  afii57381: 0x066A,
+  afii57388: 0x060C,
+  afii57392: 0x0660,
+  afii57393: 0x0661,
+  afii57394: 0x0662,
+  afii57395: 0x0663,
+  afii57396: 0x0664,
+  afii57397: 0x0665,
+  afii57398: 0x0666,
+  afii57399: 0x0667,
+  afii57400: 0x0668,
+  afii57401: 0x0669,
+  afii57403: 0x061B,
+  afii57407: 0x061F,
+  afii57409: 0x0621,
+  afii57410: 0x0622,
+  afii57411: 0x0623,
+  afii57412: 0x0624,
+  afii57413: 0x0625,
+  afii57414: 0x0626,
+  afii57415: 0x0627,
+  afii57416: 0x0628,
+  afii57417: 0x0629,
+  afii57418: 0x062A,
+  afii57419: 0x062B,
+  afii57420: 0x062C,
+  afii57421: 0x062D,
+  afii57422: 0x062E,
+  afii57423: 0x062F,
+  afii57424: 0x0630,
+  afii57425: 0x0631,
+  afii57426: 0x0632,
+  afii57427: 0x0633,
+  afii57428: 0x0634,
+  afii57429: 0x0635,
+  afii57430: 0x0636,
+  afii57431: 0x0637,
+  afii57432: 0x0638,
+  afii57433: 0x0639,
+  afii57434: 0x063A,
+  afii57440: 0x0640,
+  afii57441: 0x0641,
+  afii57442: 0x0642,
+  afii57443: 0x0643,
+  afii57444: 0x0644,
+  afii57445: 0x0645,
+  afii57446: 0x0646,
+  afii57448: 0x0648,
+  afii57449: 0x0649,
+  afii57450: 0x064A,
+  afii57451: 0x064B,
+  afii57452: 0x064C,
+  afii57453: 0x064D,
+  afii57454: 0x064E,
+  afii57455: 0x064F,
+  afii57456: 0x0650,
+  afii57457: 0x0651,
+  afii57458: 0x0652,
+  afii57470: 0x0647,
+  afii57505: 0x06A4,
+  afii57506: 0x067E,
+  afii57507: 0x0686,
+  afii57508: 0x0698,
+  afii57509: 0x06AF,
+  afii57511: 0x0679,
+  afii57512: 0x0688,
+  afii57513: 0x0691,
+  afii57514: 0x06BA,
+  afii57519: 0x06D2,
+  afii57534: 0x06D5,
+  afii57636: 0x20AA,
+  afii57645: 0x05BE,
+  afii57658: 0x05C3,
+  afii57664: 0x05D0,
+  afii57665: 0x05D1,
+  afii57666: 0x05D2,
+  afii57667: 0x05D3,
+  afii57668: 0x05D4,
+  afii57669: 0x05D5,
+  afii57670: 0x05D6,
+  afii57671: 0x05D7,
+  afii57672: 0x05D8,
+  afii57673: 0x05D9,
+  afii57674: 0x05DA,
+  afii57675: 0x05DB,
+  afii57676: 0x05DC,
+  afii57677: 0x05DD,
+  afii57678: 0x05DE,
+  afii57679: 0x05DF,
+  afii57680: 0x05E0,
+  afii57681: 0x05E1,
+  afii57682: 0x05E2,
+  afii57683: 0x05E3,
+  afii57684: 0x05E4,
+  afii57685: 0x05E5,
+  afii57686: 0x05E6,
+  afii57687: 0x05E7,
+  afii57688: 0x05E8,
+  afii57689: 0x05E9,
+  afii57690: 0x05EA,
+  afii57694: 0xFB2A,
+  afii57695: 0xFB2B,
+  afii57700: 0xFB4B,
+  afii57705: 0xFB1F,
+  afii57716: 0x05F0,
+  afii57717: 0x05F1,
+  afii57718: 0x05F2,
+  afii57723: 0xFB35,
+  afii57793: 0x05B4,
+  afii57794: 0x05B5,
+  afii57795: 0x05B6,
+  afii57796: 0x05BB,
+  afii57797: 0x05B8,
+  afii57798: 0x05B7,
+  afii57799: 0x05B0,
+  afii57800: 0x05B2,
+  afii57801: 0x05B1,
+  afii57802: 0x05B3,
+  afii57803: 0x05C2,
+  afii57804: 0x05C1,
+  afii57806: 0x05B9,
+  afii57807: 0x05BC,
+  afii57839: 0x05BD,
+  afii57841: 0x05BF,
+  afii57842: 0x05C0,
+  afii57929: 0x02BC,
+  afii61248: 0x2105,
+  afii61289: 0x2113,
+  afii61352: 0x2116,
+  afii61573: 0x202C,
+  afii61574: 0x202D,
+  afii61575: 0x202E,
+  afii61664: 0x200C,
+  afii63167: 0x066D,
+  afii64937: 0x02BD,
+  agrave: 0x00E0,
+  agujarati: 0x0A85,
+  agurmukhi: 0x0A05,
+  ahiragana: 0x3042,
+  ahookabove: 0x1EA3,
+  aibengali: 0x0990,
+  aibopomofo: 0x311E,
+  aideva: 0x0910,
+  aiecyrillic: 0x04D5,
+  aigujarati: 0x0A90,
+  aigurmukhi: 0x0A10,
+  aimatragurmukhi: 0x0A48,
+  ainarabic: 0x0639,
+  ainfinalarabic: 0xFECA,
+  aininitialarabic: 0xFECB,
+  ainmedialarabic: 0xFECC,
+  ainvertedbreve: 0x0203,
+  aivowelsignbengali: 0x09C8,
+  aivowelsigndeva: 0x0948,
+  aivowelsigngujarati: 0x0AC8,
+  akatakana: 0x30A2,
+  akatakanahalfwidth: 0xFF71,
+  akorean: 0x314F,
+  alef: 0x05D0,
+  alefarabic: 0x0627,
+  alefdageshhebrew: 0xFB30,
+  aleffinalarabic: 0xFE8E,
+  alefhamzaabovearabic: 0x0623,
+  alefhamzaabovefinalarabic: 0xFE84,
+  alefhamzabelowarabic: 0x0625,
+  alefhamzabelowfinalarabic: 0xFE88,
+  alefhebrew: 0x05D0,
+  aleflamedhebrew: 0xFB4F,
+  alefmaddaabovearabic: 0x0622,
+  alefmaddaabovefinalarabic: 0xFE82,
+  alefmaksuraarabic: 0x0649,
+  alefmaksurafinalarabic: 0xFEF0,
+  alefmaksurainitialarabic: 0xFEF3,
+  alefmaksuramedialarabic: 0xFEF4,
+  alefpatahhebrew: 0xFB2E,
+  alefqamatshebrew: 0xFB2F,
+  aleph: 0x2135,
+  allequal: 0x224C,
+  alpha: 0x03B1,
+  alphatonos: 0x03AC,
+  amacron: 0x0101,
+  amonospace: 0xFF41,
+  ampersand: 0x0026,
+  ampersandmonospace: 0xFF06,
+  ampersandsmall: 0xF726,
+  amsquare: 0x33C2,
+  anbopomofo: 0x3122,
+  angbopomofo: 0x3124,
+  angbracketleft: 0x3008, // This glyph is missing from Adobe's original list.
+  angbracketright: 0x3009, // This glyph is missing from Adobe's original list.
+  angkhankhuthai: 0x0E5A,
+  angle: 0x2220,
+  anglebracketleft: 0x3008,
+  anglebracketleftvertical: 0xFE3F,
+  anglebracketright: 0x3009,
+  anglebracketrightvertical: 0xFE40,
+  angleleft: 0x2329,
+  angleright: 0x232A,
+  angstrom: 0x212B,
+  anoteleia: 0x0387,
+  anudattadeva: 0x0952,
+  anusvarabengali: 0x0982,
+  anusvaradeva: 0x0902,
+  anusvaragujarati: 0x0A82,
+  aogonek: 0x0105,
+  apaatosquare: 0x3300,
+  aparen: 0x249C,
+  apostrophearmenian: 0x055A,
+  apostrophemod: 0x02BC,
+  apple: 0xF8FF,
+  approaches: 0x2250,
+  approxequal: 0x2248,
+  approxequalorimage: 0x2252,
+  approximatelyequal: 0x2245,
+  araeaekorean: 0x318E,
+  araeakorean: 0x318D,
+  arc: 0x2312,
+  arighthalfring: 0x1E9A,
+  aring: 0x00E5,
+  aringacute: 0x01FB,
+  aringbelow: 0x1E01,
+  arrowboth: 0x2194,
+  arrowdashdown: 0x21E3,
+  arrowdashleft: 0x21E0,
+  arrowdashright: 0x21E2,
+  arrowdashup: 0x21E1,
+  arrowdblboth: 0x21D4,
+  arrowdbldown: 0x21D3,
+  arrowdblleft: 0x21D0,
+  arrowdblright: 0x21D2,
+  arrowdblup: 0x21D1,
+  arrowdown: 0x2193,
+  arrowdownleft: 0x2199,
+  arrowdownright: 0x2198,
+  arrowdownwhite: 0x21E9,
+  arrowheaddownmod: 0x02C5,
+  arrowheadleftmod: 0x02C2,
+  arrowheadrightmod: 0x02C3,
+  arrowheadupmod: 0x02C4,
+  arrowhorizex: 0xF8E7,
+  arrowleft: 0x2190,
+  arrowleftdbl: 0x21D0,
+  arrowleftdblstroke: 0x21CD,
+  arrowleftoverright: 0x21C6,
+  arrowleftwhite: 0x21E6,
+  arrowright: 0x2192,
+  arrowrightdblstroke: 0x21CF,
+  arrowrightheavy: 0x279E,
+  arrowrightoverleft: 0x21C4,
+  arrowrightwhite: 0x21E8,
+  arrowtableft: 0x21E4,
+  arrowtabright: 0x21E5,
+  arrowup: 0x2191,
+  arrowupdn: 0x2195,
+  arrowupdnbse: 0x21A8,
+  arrowupdownbase: 0x21A8,
+  arrowupleft: 0x2196,
+  arrowupleftofdown: 0x21C5,
+  arrowupright: 0x2197,
+  arrowupwhite: 0x21E7,
+  arrowvertex: 0xF8E6,
+  asciicircum: 0x005E,
+  asciicircummonospace: 0xFF3E,
+  asciitilde: 0x007E,
+  asciitildemonospace: 0xFF5E,
+  ascript: 0x0251,
+  ascriptturned: 0x0252,
+  asmallhiragana: 0x3041,
+  asmallkatakana: 0x30A1,
+  asmallkatakanahalfwidth: 0xFF67,
+  asterisk: 0x002A,
+  asteriskaltonearabic: 0x066D,
+  asteriskarabic: 0x066D,
+  asteriskmath: 0x2217,
+  asteriskmonospace: 0xFF0A,
+  asterisksmall: 0xFE61,
+  asterism: 0x2042,
+  asuperior: 0xF6E9,
+  asymptoticallyequal: 0x2243,
+  at: 0x0040,
+  atilde: 0x00E3,
+  atmonospace: 0xFF20,
+  atsmall: 0xFE6B,
+  aturned: 0x0250,
+  aubengali: 0x0994,
+  aubopomofo: 0x3120,
+  audeva: 0x0914,
+  augujarati: 0x0A94,
+  augurmukhi: 0x0A14,
+  aulengthmarkbengali: 0x09D7,
+  aumatragurmukhi: 0x0A4C,
+  auvowelsignbengali: 0x09CC,
+  auvowelsigndeva: 0x094C,
+  auvowelsigngujarati: 0x0ACC,
+  avagrahadeva: 0x093D,
+  aybarmenian: 0x0561,
+  ayin: 0x05E2,
+  ayinaltonehebrew: 0xFB20,
+  ayinhebrew: 0x05E2,
+  b: 0x0062,
+  babengali: 0x09AC,
+  backslash: 0x005C,
+  backslashmonospace: 0xFF3C,
+  badeva: 0x092C,
+  bagujarati: 0x0AAC,
+  bagurmukhi: 0x0A2C,
+  bahiragana: 0x3070,
+  bahtthai: 0x0E3F,
+  bakatakana: 0x30D0,
+  bar: 0x007C,
+  barmonospace: 0xFF5C,
+  bbopomofo: 0x3105,
+  bcircle: 0x24D1,
+  bdotaccent: 0x1E03,
+  bdotbelow: 0x1E05,
+  beamedsixteenthnotes: 0x266C,
+  because: 0x2235,
+  becyrillic: 0x0431,
+  beharabic: 0x0628,
+  behfinalarabic: 0xFE90,
+  behinitialarabic: 0xFE91,
+  behiragana: 0x3079,
+  behmedialarabic: 0xFE92,
+  behmeeminitialarabic: 0xFC9F,
+  behmeemisolatedarabic: 0xFC08,
+  behnoonfinalarabic: 0xFC6D,
+  bekatakana: 0x30D9,
+  benarmenian: 0x0562,
+  bet: 0x05D1,
+  beta: 0x03B2,
+  betasymbolgreek: 0x03D0,
+  betdagesh: 0xFB31,
+  betdageshhebrew: 0xFB31,
+  bethebrew: 0x05D1,
+  betrafehebrew: 0xFB4C,
+  bhabengali: 0x09AD,
+  bhadeva: 0x092D,
+  bhagujarati: 0x0AAD,
+  bhagurmukhi: 0x0A2D,
+  bhook: 0x0253,
+  bihiragana: 0x3073,
+  bikatakana: 0x30D3,
+  bilabialclick: 0x0298,
+  bindigurmukhi: 0x0A02,
+  birusquare: 0x3331,
+  blackcircle: 0x25CF,
+  blackdiamond: 0x25C6,
+  blackdownpointingtriangle: 0x25BC,
+  blackleftpointingpointer: 0x25C4,
+  blackleftpointingtriangle: 0x25C0,
+  blacklenticularbracketleft: 0x3010,
+  blacklenticularbracketleftvertical: 0xFE3B,
+  blacklenticularbracketright: 0x3011,
+  blacklenticularbracketrightvertical: 0xFE3C,
+  blacklowerlefttriangle: 0x25E3,
+  blacklowerrighttriangle: 0x25E2,
+  blackrectangle: 0x25AC,
+  blackrightpointingpointer: 0x25BA,
+  blackrightpointingtriangle: 0x25B6,
+  blacksmallsquare: 0x25AA,
+  blacksmilingface: 0x263B,
+  blacksquare: 0x25A0,
+  blackstar: 0x2605,
+  blackupperlefttriangle: 0x25E4,
+  blackupperrighttriangle: 0x25E5,
+  blackuppointingsmalltriangle: 0x25B4,
+  blackuppointingtriangle: 0x25B2,
+  blank: 0x2423,
+  blinebelow: 0x1E07,
+  block: 0x2588,
+  bmonospace: 0xFF42,
+  bobaimaithai: 0x0E1A,
+  bohiragana: 0x307C,
+  bokatakana: 0x30DC,
+  bparen: 0x249D,
+  bqsquare: 0x33C3,
+  braceex: 0xF8F4,
+  braceleft: 0x007B,
+  braceleftbt: 0xF8F3,
+  braceleftmid: 0xF8F2,
+  braceleftmonospace: 0xFF5B,
+  braceleftsmall: 0xFE5B,
+  bracelefttp: 0xF8F1,
+  braceleftvertical: 0xFE37,
+  braceright: 0x007D,
+  bracerightbt: 0xF8FE,
+  bracerightmid: 0xF8FD,
+  bracerightmonospace: 0xFF5D,
+  bracerightsmall: 0xFE5C,
+  bracerighttp: 0xF8FC,
+  bracerightvertical: 0xFE38,
+  bracketleft: 0x005B,
+  bracketleftbt: 0xF8F0,
+  bracketleftex: 0xF8EF,
+  bracketleftmonospace: 0xFF3B,
+  bracketlefttp: 0xF8EE,
+  bracketright: 0x005D,
+  bracketrightbt: 0xF8FB,
+  bracketrightex: 0xF8FA,
+  bracketrightmonospace: 0xFF3D,
+  bracketrighttp: 0xF8F9,
+  breve: 0x02D8,
+  brevebelowcmb: 0x032E,
+  brevecmb: 0x0306,
+  breveinvertedbelowcmb: 0x032F,
+  breveinvertedcmb: 0x0311,
+  breveinverteddoublecmb: 0x0361,
+  bridgebelowcmb: 0x032A,
+  bridgeinvertedbelowcmb: 0x033A,
+  brokenbar: 0x00A6,
+  bstroke: 0x0180,
+  bsuperior: 0xF6EA,
+  btopbar: 0x0183,
+  buhiragana: 0x3076,
+  bukatakana: 0x30D6,
+  bullet: 0x2022,
+  bulletinverse: 0x25D8,
+  bulletoperator: 0x2219,
+  bullseye: 0x25CE,
+  c: 0x0063,
+  caarmenian: 0x056E,
+  cabengali: 0x099A,
+  cacute: 0x0107,
+  cadeva: 0x091A,
+  cagujarati: 0x0A9A,
+  cagurmukhi: 0x0A1A,
+  calsquare: 0x3388,
+  candrabindubengali: 0x0981,
+  candrabinducmb: 0x0310,
+  candrabindudeva: 0x0901,
+  candrabindugujarati: 0x0A81,
+  capslock: 0x21EA,
+  careof: 0x2105,
+  caron: 0x02C7,
+  caronbelowcmb: 0x032C,
+  caroncmb: 0x030C,
+  carriagereturn: 0x21B5,
+  cbopomofo: 0x3118,
+  ccaron: 0x010D,
+  ccedilla: 0x00E7,
+  ccedillaacute: 0x1E09,
+  ccircle: 0x24D2,
+  ccircumflex: 0x0109,
+  ccurl: 0x0255,
+  cdot: 0x010B,
+  cdotaccent: 0x010B,
+  cdsquare: 0x33C5,
+  cedilla: 0x00B8,
+  cedillacmb: 0x0327,
+  cent: 0x00A2,
+  centigrade: 0x2103,
+  centinferior: 0xF6DF,
+  centmonospace: 0xFFE0,
+  centoldstyle: 0xF7A2,
+  centsuperior: 0xF6E0,
+  chaarmenian: 0x0579,
+  chabengali: 0x099B,
+  chadeva: 0x091B,
+  chagujarati: 0x0A9B,
+  chagurmukhi: 0x0A1B,
+  chbopomofo: 0x3114,
+  cheabkhasiancyrillic: 0x04BD,
+  checkmark: 0x2713,
+  checyrillic: 0x0447,
+  chedescenderabkhasiancyrillic: 0x04BF,
+  chedescendercyrillic: 0x04B7,
+  chedieresiscyrillic: 0x04F5,
+  cheharmenian: 0x0573,
+  chekhakassiancyrillic: 0x04CC,
+  cheverticalstrokecyrillic: 0x04B9,
+  chi: 0x03C7,
+  chieuchacirclekorean: 0x3277,
+  chieuchaparenkorean: 0x3217,
+  chieuchcirclekorean: 0x3269,
+  chieuchkorean: 0x314A,
+  chieuchparenkorean: 0x3209,
+  chochangthai: 0x0E0A,
+  chochanthai: 0x0E08,
+  chochingthai: 0x0E09,
+  chochoethai: 0x0E0C,
+  chook: 0x0188,
+  cieucacirclekorean: 0x3276,
+  cieucaparenkorean: 0x3216,
+  cieuccirclekorean: 0x3268,
+  cieuckorean: 0x3148,
+  cieucparenkorean: 0x3208,
+  cieucuparenkorean: 0x321C,
+  circle: 0x25CB,
+  circlecopyrt: 0x00A9, // This glyph is missing from Adobe's original list.
+  circlemultiply: 0x2297,
+  circleot: 0x2299,
+  circleplus: 0x2295,
+  circlepostalmark: 0x3036,
+  circlewithlefthalfblack: 0x25D0,
+  circlewithrighthalfblack: 0x25D1,
+  circumflex: 0x02C6,
+  circumflexbelowcmb: 0x032D,
+  circumflexcmb: 0x0302,
+  clear: 0x2327,
+  clickalveolar: 0x01C2,
+  clickdental: 0x01C0,
+  clicklateral: 0x01C1,
+  clickretroflex: 0x01C3,
+  club: 0x2663,
+  clubsuitblack: 0x2663,
+  clubsuitwhite: 0x2667,
+  cmcubedsquare: 0x33A4,
+  cmonospace: 0xFF43,
+  cmsquaredsquare: 0x33A0,
+  coarmenian: 0x0581,
+  colon: 0x003A,
+  colonmonetary: 0x20A1,
+  colonmonospace: 0xFF1A,
+  colonsign: 0x20A1,
+  colonsmall: 0xFE55,
+  colontriangularhalfmod: 0x02D1,
+  colontriangularmod: 0x02D0,
+  comma: 0x002C,
+  commaabovecmb: 0x0313,
+  commaaboverightcmb: 0x0315,
+  commaaccent: 0xF6C3,
+  commaarabic: 0x060C,
+  commaarmenian: 0x055D,
+  commainferior: 0xF6E1,
+  commamonospace: 0xFF0C,
+  commareversedabovecmb: 0x0314,
+  commareversedmod: 0x02BD,
+  commasmall: 0xFE50,
+  commasuperior: 0xF6E2,
+  commaturnedabovecmb: 0x0312,
+  commaturnedmod: 0x02BB,
+  compass: 0x263C,
+  congruent: 0x2245,
+  contourintegral: 0x222E,
+  control: 0x2303,
+  controlACK: 0x0006,
+  controlBEL: 0x0007,
+  controlBS: 0x0008,
+  controlCAN: 0x0018,
+  controlCR: 0x000D,
+  controlDC1: 0x0011,
+  controlDC2: 0x0012,
+  controlDC3: 0x0013,
+  controlDC4: 0x0014,
+  controlDEL: 0x007F,
+  controlDLE: 0x0010,
+  controlEM: 0x0019,
+  controlENQ: 0x0005,
+  controlEOT: 0x0004,
+  controlESC: 0x001B,
+  controlETB: 0x0017,
+  controlETX: 0x0003,
+  controlFF: 0x000C,
+  controlFS: 0x001C,
+  controlGS: 0x001D,
+  controlHT: 0x0009,
+  controlLF: 0x000A,
+  controlNAK: 0x0015,
+  controlRS: 0x001E,
+  controlSI: 0x000F,
+  controlSO: 0x000E,
+  controlSOT: 0x0002,
+  controlSTX: 0x0001,
+  controlSUB: 0x001A,
+  controlSYN: 0x0016,
+  controlUS: 0x001F,
+  controlVT: 0x000B,
+  copyright: 0x00A9,
+  copyrightsans: 0xF8E9,
+  copyrightserif: 0xF6D9,
+  cornerbracketleft: 0x300C,
+  cornerbracketlefthalfwidth: 0xFF62,
+  cornerbracketleftvertical: 0xFE41,
+  cornerbracketright: 0x300D,
+  cornerbracketrighthalfwidth: 0xFF63,
+  cornerbracketrightvertical: 0xFE42,
+  corporationsquare: 0x337F,
+  cosquare: 0x33C7,
+  coverkgsquare: 0x33C6,
+  cparen: 0x249E,
+  cruzeiro: 0x20A2,
+  cstretched: 0x0297,
+  curlyand: 0x22CF,
+  curlyor: 0x22CE,
+  currency: 0x00A4,
+  cyrBreve: 0xF6D1,
+  cyrFlex: 0xF6D2,
+  cyrbreve: 0xF6D4,
+  cyrflex: 0xF6D5,
+  d: 0x0064,
+  daarmenian: 0x0564,
+  dabengali: 0x09A6,
+  dadarabic: 0x0636,
+  dadeva: 0x0926,
+  dadfinalarabic: 0xFEBE,
+  dadinitialarabic: 0xFEBF,
+  dadmedialarabic: 0xFEC0,
+  dagesh: 0x05BC,
+  dageshhebrew: 0x05BC,
+  dagger: 0x2020,
+  daggerdbl: 0x2021,
+  dagujarati: 0x0AA6,
+  dagurmukhi: 0x0A26,
+  dahiragana: 0x3060,
+  dakatakana: 0x30C0,
+  dalarabic: 0x062F,
+  dalet: 0x05D3,
+  daletdagesh: 0xFB33,
+  daletdageshhebrew: 0xFB33,
+  dalethebrew: 0x05D3,
+  dalfinalarabic: 0xFEAA,
+  dammaarabic: 0x064F,
+  dammalowarabic: 0x064F,
+  dammatanaltonearabic: 0x064C,
+  dammatanarabic: 0x064C,
+  danda: 0x0964,
+  dargahebrew: 0x05A7,
+  dargalefthebrew: 0x05A7,
+  dasiapneumatacyrilliccmb: 0x0485,
+  dblGrave: 0xF6D3,
+  dblanglebracketleft: 0x300A,
+  dblanglebracketleftvertical: 0xFE3D,
+  dblanglebracketright: 0x300B,
+  dblanglebracketrightvertical: 0xFE3E,
+  dblarchinvertedbelowcmb: 0x032B,
+  dblarrowleft: 0x21D4,
+  dblarrowright: 0x21D2,
+  dbldanda: 0x0965,
+  dblgrave: 0xF6D6,
+  dblgravecmb: 0x030F,
+  dblintegral: 0x222C,
+  dbllowline: 0x2017,
+  dbllowlinecmb: 0x0333,
+  dbloverlinecmb: 0x033F,
+  dblprimemod: 0x02BA,
+  dblverticalbar: 0x2016,
+  dblverticallineabovecmb: 0x030E,
+  dbopomofo: 0x3109,
+  dbsquare: 0x33C8,
+  dcaron: 0x010F,
+  dcedilla: 0x1E11,
+  dcircle: 0x24D3,
+  dcircumflexbelow: 0x1E13,
+  dcroat: 0x0111,
+  ddabengali: 0x09A1,
+  ddadeva: 0x0921,
+  ddagujarati: 0x0AA1,
+  ddagurmukhi: 0x0A21,
+  ddalarabic: 0x0688,
+  ddalfinalarabic: 0xFB89,
+  dddhadeva: 0x095C,
+  ddhabengali: 0x09A2,
+  ddhadeva: 0x0922,
+  ddhagujarati: 0x0AA2,
+  ddhagurmukhi: 0x0A22,
+  ddotaccent: 0x1E0B,
+  ddotbelow: 0x1E0D,
+  decimalseparatorarabic: 0x066B,
+  decimalseparatorpersian: 0x066B,
+  decyrillic: 0x0434,
+  degree: 0x00B0,
+  dehihebrew: 0x05AD,
+  dehiragana: 0x3067,
+  deicoptic: 0x03EF,
+  dekatakana: 0x30C7,
+  deleteleft: 0x232B,
+  deleteright: 0x2326,
+  delta: 0x03B4,
+  deltaturned: 0x018D,
+  denominatorminusonenumeratorbengali: 0x09F8,
+  dezh: 0x02A4,
+  dhabengali: 0x09A7,
+  dhadeva: 0x0927,
+  dhagujarati: 0x0AA7,
+  dhagurmukhi: 0x0A27,
+  dhook: 0x0257,
+  dialytikatonos: 0x0385,
+  dialytikatonoscmb: 0x0344,
+  diamond: 0x2666,
+  diamondsuitwhite: 0x2662,
+  dieresis: 0x00A8,
+  dieresisacute: 0xF6D7,
+  dieresisbelowcmb: 0x0324,
+  dieresiscmb: 0x0308,
+  dieresisgrave: 0xF6D8,
+  dieresistonos: 0x0385,
+  dihiragana: 0x3062,
+  dikatakana: 0x30C2,
+  dittomark: 0x3003,
+  divide: 0x00F7,
+  divides: 0x2223,
+  divisionslash: 0x2215,
+  djecyrillic: 0x0452,
+  dkshade: 0x2593,
+  dlinebelow: 0x1E0F,
+  dlsquare: 0x3397,
+  dmacron: 0x0111,
+  dmonospace: 0xFF44,
+  dnblock: 0x2584,
+  dochadathai: 0x0E0E,
+  dodekthai: 0x0E14,
+  dohiragana: 0x3069,
+  dokatakana: 0x30C9,
+  dollar: 0x0024,
+  dollarinferior: 0xF6E3,
+  dollarmonospace: 0xFF04,
+  dollaroldstyle: 0xF724,
+  dollarsmall: 0xFE69,
+  dollarsuperior: 0xF6E4,
+  dong: 0x20AB,
+  dorusquare: 0x3326,
+  dotaccent: 0x02D9,
+  dotaccentcmb: 0x0307,
+  dotbelowcmb: 0x0323,
+  dotbelowcomb: 0x0323,
+  dotkatakana: 0x30FB,
+  dotlessi: 0x0131,
+  dotlessj: 0xF6BE,
+  dotlessjstrokehook: 0x0284,
+  dotmath: 0x22C5,
+  dottedcircle: 0x25CC,
+  doubleyodpatah: 0xFB1F,
+  doubleyodpatahhebrew: 0xFB1F,
+  downtackbelowcmb: 0x031E,
+  downtackmod: 0x02D5,
+  dparen: 0x249F,
+  dsuperior: 0xF6EB,
+  dtail: 0x0256,
+  dtopbar: 0x018C,
+  duhiragana: 0x3065,
+  dukatakana: 0x30C5,
+  dz: 0x01F3,
+  dzaltone: 0x02A3,
+  dzcaron: 0x01C6,
+  dzcurl: 0x02A5,
+  dzeabkhasiancyrillic: 0x04E1,
+  dzecyrillic: 0x0455,
+  dzhecyrillic: 0x045F,
+  e: 0x0065,
+  eacute: 0x00E9,
+  earth: 0x2641,
+  ebengali: 0x098F,
+  ebopomofo: 0x311C,
+  ebreve: 0x0115,
+  ecandradeva: 0x090D,
+  ecandragujarati: 0x0A8D,
+  ecandravowelsigndeva: 0x0945,
+  ecandravowelsigngujarati: 0x0AC5,
+  ecaron: 0x011B,
+  ecedillabreve: 0x1E1D,
+  echarmenian: 0x0565,
+  echyiwnarmenian: 0x0587,
+  ecircle: 0x24D4,
+  ecircumflex: 0x00EA,
+  ecircumflexacute: 0x1EBF,
+  ecircumflexbelow: 0x1E19,
+  ecircumflexdotbelow: 0x1EC7,
+  ecircumflexgrave: 0x1EC1,
+  ecircumflexhookabove: 0x1EC3,
+  ecircumflextilde: 0x1EC5,
+  ecyrillic: 0x0454,
+  edblgrave: 0x0205,
+  edeva: 0x090F,
+  edieresis: 0x00EB,
+  edot: 0x0117,
+  edotaccent: 0x0117,
+  edotbelow: 0x1EB9,
+  eegurmukhi: 0x0A0F,
+  eematragurmukhi: 0x0A47,
+  efcyrillic: 0x0444,
+  egrave: 0x00E8,
+  egujarati: 0x0A8F,
+  eharmenian: 0x0567,
+  ehbopomofo: 0x311D,
+  ehiragana: 0x3048,
+  ehookabove: 0x1EBB,
+  eibopomofo: 0x311F,
+  eight: 0x0038,
+  eightarabic: 0x0668,
+  eightbengali: 0x09EE,
+  eightcircle: 0x2467,
+  eightcircleinversesansserif: 0x2791,
+  eightdeva: 0x096E,
+  eighteencircle: 0x2471,
+  eighteenparen: 0x2485,
+  eighteenperiod: 0x2499,
+  eightgujarati: 0x0AEE,
+  eightgurmukhi: 0x0A6E,
+  eighthackarabic: 0x0668,
+  eighthangzhou: 0x3028,
+  eighthnotebeamed: 0x266B,
+  eightideographicparen: 0x3227,
+  eightinferior: 0x2088,
+  eightmonospace: 0xFF18,
+  eightoldstyle: 0xF738,
+  eightparen: 0x247B,
+  eightperiod: 0x248F,
+  eightpersian: 0x06F8,
+  eightroman: 0x2177,
+  eightsuperior: 0x2078,
+  eightthai: 0x0E58,
+  einvertedbreve: 0x0207,
+  eiotifiedcyrillic: 0x0465,
+  ekatakana: 0x30A8,
+  ekatakanahalfwidth: 0xFF74,
+  ekonkargurmukhi: 0x0A74,
+  ekorean: 0x3154,
+  elcyrillic: 0x043B,
+  element: 0x2208,
+  elevencircle: 0x246A,
+  elevenparen: 0x247E,
+  elevenperiod: 0x2492,
+  elevenroman: 0x217A,
+  ellipsis: 0x2026,
+  ellipsisvertical: 0x22EE,
+  emacron: 0x0113,
+  emacronacute: 0x1E17,
+  emacrongrave: 0x1E15,
+  emcyrillic: 0x043C,
+  emdash: 0x2014,
+  emdashvertical: 0xFE31,
+  emonospace: 0xFF45,
+  emphasismarkarmenian: 0x055B,
+  emptyset: 0x2205,
+  enbopomofo: 0x3123,
+  encyrillic: 0x043D,
+  endash: 0x2013,
+  endashvertical: 0xFE32,
+  endescendercyrillic: 0x04A3,
+  eng: 0x014B,
+  engbopomofo: 0x3125,
+  enghecyrillic: 0x04A5,
+  enhookcyrillic: 0x04C8,
+  enspace: 0x2002,
+  eogonek: 0x0119,
+  eokorean: 0x3153,
+  eopen: 0x025B,
+  eopenclosed: 0x029A,
+  eopenreversed: 0x025C,
+  eopenreversedclosed: 0x025E,
+  eopenreversedhook: 0x025D,
+  eparen: 0x24A0,
+  epsilon: 0x03B5,
+  epsilontonos: 0x03AD,
+  equal: 0x003D,
+  equalmonospace: 0xFF1D,
+  equalsmall: 0xFE66,
+  equalsuperior: 0x207C,
+  equivalence: 0x2261,
+  erbopomofo: 0x3126,
+  ercyrillic: 0x0440,
+  ereversed: 0x0258,
+  ereversedcyrillic: 0x044D,
+  escyrillic: 0x0441,
+  esdescendercyrillic: 0x04AB,
+  esh: 0x0283,
+  eshcurl: 0x0286,
+  eshortdeva: 0x090E,
+  eshortvowelsigndeva: 0x0946,
+  eshreversedloop: 0x01AA,
+  eshsquatreversed: 0x0285,
+  esmallhiragana: 0x3047,
+  esmallkatakana: 0x30A7,
+  esmallkatakanahalfwidth: 0xFF6A,
+  estimated: 0x212E,
+  esuperior: 0xF6EC,
+  eta: 0x03B7,
+  etarmenian: 0x0568,
+  etatonos: 0x03AE,
+  eth: 0x00F0,
+  etilde: 0x1EBD,
+  etildebelow: 0x1E1B,
+  etnahtafoukhhebrew: 0x0591,
+  etnahtafoukhlefthebrew: 0x0591,
+  etnahtahebrew: 0x0591,
+  etnahtalefthebrew: 0x0591,
+  eturned: 0x01DD,
+  eukorean: 0x3161,
+  euro: 0x20AC,
+  evowelsignbengali: 0x09C7,
+  evowelsigndeva: 0x0947,
+  evowelsigngujarati: 0x0AC7,
+  exclam: 0x0021,
+  exclamarmenian: 0x055C,
+  exclamdbl: 0x203C,
+  exclamdown: 0x00A1,
+  exclamdownsmall: 0xF7A1,
+  exclammonospace: 0xFF01,
+  exclamsmall: 0xF721,
+  existential: 0x2203,
+  ezh: 0x0292,
+  ezhcaron: 0x01EF,
+  ezhcurl: 0x0293,
+  ezhreversed: 0x01B9,
+  ezhtail: 0x01BA,
+  f: 0x0066,
+  fadeva: 0x095E,
+  fagurmukhi: 0x0A5E,
+  fahrenheit: 0x2109,
+  fathaarabic: 0x064E,
+  fathalowarabic: 0x064E,
+  fathatanarabic: 0x064B,
+  fbopomofo: 0x3108,
+  fcircle: 0x24D5,
+  fdotaccent: 0x1E1F,
+  feharabic: 0x0641,
+  feharmenian: 0x0586,
+  fehfinalarabic: 0xFED2,
+  fehinitialarabic: 0xFED3,
+  fehmedialarabic: 0xFED4,
+  feicoptic: 0x03E5,
+  female: 0x2640,
+  ff: 0xFB00,
+  ffi: 0xFB03,
+  ffl: 0xFB04,
+  fi: 0xFB01,
+  fifteencircle: 0x246E,
+  fifteenparen: 0x2482,
+  fifteenperiod: 0x2496,
+  figuredash: 0x2012,
+  filledbox: 0x25A0,
+  filledrect: 0x25AC,
+  finalkaf: 0x05DA,
+  finalkafdagesh: 0xFB3A,
+  finalkafdageshhebrew: 0xFB3A,
+  finalkafhebrew: 0x05DA,
+  finalmem: 0x05DD,
+  finalmemhebrew: 0x05DD,
+  finalnun: 0x05DF,
+  finalnunhebrew: 0x05DF,
+  finalpe: 0x05E3,
+  finalpehebrew: 0x05E3,
+  finaltsadi: 0x05E5,
+  finaltsadihebrew: 0x05E5,
+  firsttonechinese: 0x02C9,
+  fisheye: 0x25C9,
+  fitacyrillic: 0x0473,
+  five: 0x0035,
+  fivearabic: 0x0665,
+  fivebengali: 0x09EB,
+  fivecircle: 0x2464,
+  fivecircleinversesansserif: 0x278E,
+  fivedeva: 0x096B,
+  fiveeighths: 0x215D,
+  fivegujarati: 0x0AEB,
+  fivegurmukhi: 0x0A6B,
+  fivehackarabic: 0x0665,
+  fivehangzhou: 0x3025,
+  fiveideographicparen: 0x3224,
+  fiveinferior: 0x2085,
+  fivemonospace: 0xFF15,
+  fiveoldstyle: 0xF735,
+  fiveparen: 0x2478,
+  fiveperiod: 0x248C,
+  fivepersian: 0x06F5,
+  fiveroman: 0x2174,
+  fivesuperior: 0x2075,
+  fivethai: 0x0E55,
+  fl: 0xFB02,
+  florin: 0x0192,
+  fmonospace: 0xFF46,
+  fmsquare: 0x3399,
+  fofanthai: 0x0E1F,
+  fofathai: 0x0E1D,
+  fongmanthai: 0x0E4F,
+  forall: 0x2200,
+  four: 0x0034,
+  fourarabic: 0x0664,
+  fourbengali: 0x09EA,
+  fourcircle: 0x2463,
+  fourcircleinversesansserif: 0x278D,
+  fourdeva: 0x096A,
+  fourgujarati: 0x0AEA,
+  fourgurmukhi: 0x0A6A,
+  fourhackarabic: 0x0664,
+  fourhangzhou: 0x3024,
+  fourideographicparen: 0x3223,
+  fourinferior: 0x2084,
+  fourmonospace: 0xFF14,
+  fournumeratorbengali: 0x09F7,
+  fouroldstyle: 0xF734,
+  fourparen: 0x2477,
+  fourperiod: 0x248B,
+  fourpersian: 0x06F4,
+  fourroman: 0x2173,
+  foursuperior: 0x2074,
+  fourteencircle: 0x246D,
+  fourteenparen: 0x2481,
+  fourteenperiod: 0x2495,
+  fourthai: 0x0E54,
+  fourthtonechinese: 0x02CB,
+  fparen: 0x24A1,
+  fraction: 0x2044,
+  franc: 0x20A3,
+  g: 0x0067,
+  gabengali: 0x0997,
+  gacute: 0x01F5,
+  gadeva: 0x0917,
+  gafarabic: 0x06AF,
+  gaffinalarabic: 0xFB93,
+  gafinitialarabic: 0xFB94,
+  gafmedialarabic: 0xFB95,
+  gagujarati: 0x0A97,
+  gagurmukhi: 0x0A17,
+  gahiragana: 0x304C,
+  gakatakana: 0x30AC,
+  gamma: 0x03B3,
+  gammalatinsmall: 0x0263,
+  gammasuperior: 0x02E0,
+  gangiacoptic: 0x03EB,
+  gbopomofo: 0x310D,
+  gbreve: 0x011F,
+  gcaron: 0x01E7,
+  gcedilla: 0x0123,
+  gcircle: 0x24D6,
+  gcircumflex: 0x011D,
+  gcommaaccent: 0x0123,
+  gdot: 0x0121,
+  gdotaccent: 0x0121,
+  gecyrillic: 0x0433,
+  gehiragana: 0x3052,
+  gekatakana: 0x30B2,
+  geometricallyequal: 0x2251,
+  gereshaccenthebrew: 0x059C,
+  gereshhebrew: 0x05F3,
+  gereshmuqdamhebrew: 0x059D,
+  germandbls: 0x00DF,
+  gershayimaccenthebrew: 0x059E,
+  gershayimhebrew: 0x05F4,
+  getamark: 0x3013,
+  ghabengali: 0x0998,
+  ghadarmenian: 0x0572,
+  ghadeva: 0x0918,
+  ghagujarati: 0x0A98,
+  ghagurmukhi: 0x0A18,
+  ghainarabic: 0x063A,
+  ghainfinalarabic: 0xFECE,
+  ghaininitialarabic: 0xFECF,
+  ghainmedialarabic: 0xFED0,
+  ghemiddlehookcyrillic: 0x0495,
+  ghestrokecyrillic: 0x0493,
+  gheupturncyrillic: 0x0491,
+  ghhadeva: 0x095A,
+  ghhagurmukhi: 0x0A5A,
+  ghook: 0x0260,
+  ghzsquare: 0x3393,
+  gihiragana: 0x304E,
+  gikatakana: 0x30AE,
+  gimarmenian: 0x0563,
+  gimel: 0x05D2,
+  gimeldagesh: 0xFB32,
+  gimeldageshhebrew: 0xFB32,
+  gimelhebrew: 0x05D2,
+  gjecyrillic: 0x0453,
+  glottalinvertedstroke: 0x01BE,
+  glottalstop: 0x0294,
+  glottalstopinverted: 0x0296,
+  glottalstopmod: 0x02C0,
+  glottalstopreversed: 0x0295,
+  glottalstopreversedmod: 0x02C1,
+  glottalstopreversedsuperior: 0x02E4,
+  glottalstopstroke: 0x02A1,
+  glottalstopstrokereversed: 0x02A2,
+  gmacron: 0x1E21,
+  gmonospace: 0xFF47,
+  gohiragana: 0x3054,
+  gokatakana: 0x30B4,
+  gparen: 0x24A2,
+  gpasquare: 0x33AC,
+  gradient: 0x2207,
+  grave: 0x0060,
+  gravebelowcmb: 0x0316,
+  gravecmb: 0x0300,
+  gravecomb: 0x0300,
+  gravedeva: 0x0953,
+  gravelowmod: 0x02CE,
+  gravemonospace: 0xFF40,
+  gravetonecmb: 0x0340,
+  greater: 0x003E,
+  greaterequal: 0x2265,
+  greaterequalorless: 0x22DB,
+  greatermonospace: 0xFF1E,
+  greaterorequivalent: 0x2273,
+  greaterorless: 0x2277,
+  greateroverequal: 0x2267,
+  greatersmall: 0xFE65,
+  gscript: 0x0261,
+  gstroke: 0x01E5,
+  guhiragana: 0x3050,
+  guillemotleft: 0x00AB,
+  guillemotright: 0x00BB,
+  guilsinglleft: 0x2039,
+  guilsinglright: 0x203A,
+  gukatakana: 0x30B0,
+  guramusquare: 0x3318,
+  gysquare: 0x33C9,
+  h: 0x0068,
+  haabkhasiancyrillic: 0x04A9,
+  haaltonearabic: 0x06C1,
+  habengali: 0x09B9,
+  hadescendercyrillic: 0x04B3,
+  hadeva: 0x0939,
+  hagujarati: 0x0AB9,
+  hagurmukhi: 0x0A39,
+  haharabic: 0x062D,
+  hahfinalarabic: 0xFEA2,
+  hahinitialarabic: 0xFEA3,
+  hahiragana: 0x306F,
+  hahmedialarabic: 0xFEA4,
+  haitusquare: 0x332A,
+  hakatakana: 0x30CF,
+  hakatakanahalfwidth: 0xFF8A,
+  halantgurmukhi: 0x0A4D,
+  hamzaarabic: 0x0621,
+  hamzalowarabic: 0x0621,
+  hangulfiller: 0x3164,
+  hardsigncyrillic: 0x044A,
+  harpoonleftbarbup: 0x21BC,
+  harpoonrightbarbup: 0x21C0,
+  hasquare: 0x33CA,
+  hatafpatah: 0x05B2,
+  hatafpatah16: 0x05B2,
+  hatafpatah23: 0x05B2,
+  hatafpatah2f: 0x05B2,
+  hatafpatahhebrew: 0x05B2,
+  hatafpatahnarrowhebrew: 0x05B2,
+  hatafpatahquarterhebrew: 0x05B2,
+  hatafpatahwidehebrew: 0x05B2,
+  hatafqamats: 0x05B3,
+  hatafqamats1b: 0x05B3,
+  hatafqamats28: 0x05B3,
+  hatafqamats34: 0x05B3,
+  hatafqamatshebrew: 0x05B3,
+  hatafqamatsnarrowhebrew: 0x05B3,
+  hatafqamatsquarterhebrew: 0x05B3,
+  hatafqamatswidehebrew: 0x05B3,
+  hatafsegol: 0x05B1,
+  hatafsegol17: 0x05B1,
+  hatafsegol24: 0x05B1,
+  hatafsegol30: 0x05B1,
+  hatafsegolhebrew: 0x05B1,
+  hatafsegolnarrowhebrew: 0x05B1,
+  hatafsegolquarterhebrew: 0x05B1,
+  hatafsegolwidehebrew: 0x05B1,
+  hbar: 0x0127,
+  hbopomofo: 0x310F,
+  hbrevebelow: 0x1E2B,
+  hcedilla: 0x1E29,
+  hcircle: 0x24D7,
+  hcircumflex: 0x0125,
+  hdieresis: 0x1E27,
+  hdotaccent: 0x1E23,
+  hdotbelow: 0x1E25,
+  he: 0x05D4,
+  heart: 0x2665,
+  heartsuitblack: 0x2665,
+  heartsuitwhite: 0x2661,
+  hedagesh: 0xFB34,
+  hedageshhebrew: 0xFB34,
+  hehaltonearabic: 0x06C1,
+  heharabic: 0x0647,
+  hehebrew: 0x05D4,
+  hehfinalaltonearabic: 0xFBA7,
+  hehfinalalttwoarabic: 0xFEEA,
+  hehfinalarabic: 0xFEEA,
+  hehhamzaabovefinalarabic: 0xFBA5,
+  hehhamzaaboveisolatedarabic: 0xFBA4,
+  hehinitialaltonearabic: 0xFBA8,
+  hehinitialarabic: 0xFEEB,
+  hehiragana: 0x3078,
+  hehmedialaltonearabic: 0xFBA9,
+  hehmedialarabic: 0xFEEC,
+  heiseierasquare: 0x337B,
+  hekatakana: 0x30D8,
+  hekatakanahalfwidth: 0xFF8D,
+  hekutaarusquare: 0x3336,
+  henghook: 0x0267,
+  herutusquare: 0x3339,
+  het: 0x05D7,
+  hethebrew: 0x05D7,
+  hhook: 0x0266,
+  hhooksuperior: 0x02B1,
+  hieuhacirclekorean: 0x327B,
+  hieuhaparenkorean: 0x321B,
+  hieuhcirclekorean: 0x326D,
+  hieuhkorean: 0x314E,
+  hieuhparenkorean: 0x320D,
+  hihiragana: 0x3072,
+  hikatakana: 0x30D2,
+  hikatakanahalfwidth: 0xFF8B,
+  hiriq: 0x05B4,
+  hiriq14: 0x05B4,
+  hiriq21: 0x05B4,
+  hiriq2d: 0x05B4,
+  hiriqhebrew: 0x05B4,
+  hiriqnarrowhebrew: 0x05B4,
+  hiriqquarterhebrew: 0x05B4,
+  hiriqwidehebrew: 0x05B4,
+  hlinebelow: 0x1E96,
+  hmonospace: 0xFF48,
+  hoarmenian: 0x0570,
+  hohipthai: 0x0E2B,
+  hohiragana: 0x307B,
+  hokatakana: 0x30DB,
+  hokatakanahalfwidth: 0xFF8E,
+  holam: 0x05B9,
+  holam19: 0x05B9,
+  holam26: 0x05B9,
+  holam32: 0x05B9,
+  holamhebrew: 0x05B9,
+  holamnarrowhebrew: 0x05B9,
+  holamquarterhebrew: 0x05B9,
+  holamwidehebrew: 0x05B9,
+  honokhukthai: 0x0E2E,
+  hookabovecomb: 0x0309,
+  hookcmb: 0x0309,
+  hookpalatalizedbelowcmb: 0x0321,
+  hookretroflexbelowcmb: 0x0322,
+  hoonsquare: 0x3342,
+  horicoptic: 0x03E9,
+  horizontalbar: 0x2015,
+  horncmb: 0x031B,
+  hotsprings: 0x2668,
+  house: 0x2302,
+  hparen: 0x24A3,
+  hsuperior: 0x02B0,
+  hturned: 0x0265,
+  huhiragana: 0x3075,
+  huiitosquare: 0x3333,
+  hukatakana: 0x30D5,
+  hukatakanahalfwidth: 0xFF8C,
+  hungarumlaut: 0x02DD,
+  hungarumlautcmb: 0x030B,
+  hv: 0x0195,
+  hyphen: 0x002D,
+  hypheninferior: 0xF6E5,
+  hyphenmonospace: 0xFF0D,
+  hyphensmall: 0xFE63,
+  hyphensuperior: 0xF6E6,
+  hyphentwo: 0x2010,
+  i: 0x0069,
+  iacute: 0x00ED,
+  iacyrillic: 0x044F,
+  ibengali: 0x0987,
+  ibopomofo: 0x3127,
+  ibreve: 0x012D,
+  icaron: 0x01D0,
+  icircle: 0x24D8,
+  icircumflex: 0x00EE,
+  icyrillic: 0x0456,
+  idblgrave: 0x0209,
+  ideographearthcircle: 0x328F,
+  ideographfirecircle: 0x328B,
+  ideographicallianceparen: 0x323F,
+  ideographiccallparen: 0x323A,
+  ideographiccentrecircle: 0x32A5,
+  ideographicclose: 0x3006,
+  ideographiccomma: 0x3001,
+  ideographiccommaleft: 0xFF64,
+  ideographiccongratulationparen: 0x3237,
+  ideographiccorrectcircle: 0x32A3,
+  ideographicearthparen: 0x322F,
+  ideographicenterpriseparen: 0x323D,
+  ideographicexcellentcircle: 0x329D,
+  ideographicfestivalparen: 0x3240,
+  ideographicfinancialcircle: 0x3296,
+  ideographicfinancialparen: 0x3236,
+  ideographicfireparen: 0x322B,
+  ideographichaveparen: 0x3232,
+  ideographichighcircle: 0x32A4,
+  ideographiciterationmark: 0x3005,
+  ideographiclaborcircle: 0x3298,
+  ideographiclaborparen: 0x3238,
+  ideographicleftcircle: 0x32A7,
+  ideographiclowcircle: 0x32A6,
+  ideographicmedicinecircle: 0x32A9,
+  ideographicmetalparen: 0x322E,
+  ideographicmoonparen: 0x322A,
+  ideographicnameparen: 0x3234,
+  ideographicperiod: 0x3002,
+  ideographicprintcircle: 0x329E,
+  ideographicreachparen: 0x3243,
+  ideographicrepresentparen: 0x3239,
+  ideographicresourceparen: 0x323E,
+  ideographicrightcircle: 0x32A8,
+  ideographicsecretcircle: 0x3299,
+  ideographicselfparen: 0x3242,
+  ideographicsocietyparen: 0x3233,
+  ideographicspace: 0x3000,
+  ideographicspecialparen: 0x3235,
+  ideographicstockparen: 0x3231,
+  ideographicstudyparen: 0x323B,
+  ideographicsunparen: 0x3230,
+  ideographicsuperviseparen: 0x323C,
+  ideographicwaterparen: 0x322C,
+  ideographicwoodparen: 0x322D,
+  ideographiczero: 0x3007,
+  ideographmetalcircle: 0x328E,
+  ideographmooncircle: 0x328A,
+  ideographnamecircle: 0x3294,
+  ideographsuncircle: 0x3290,
+  ideographwatercircle: 0x328C,
+  ideographwoodcircle: 0x328D,
+  ideva: 0x0907,
+  idieresis: 0x00EF,
+  idieresisacute: 0x1E2F,
+  idieresiscyrillic: 0x04E5,
+  idotbelow: 0x1ECB,
+  iebrevecyrillic: 0x04D7,
+  iecyrillic: 0x0435,
+  ieungacirclekorean: 0x3275,
+  ieungaparenkorean: 0x3215,
+  ieungcirclekorean: 0x3267,
+  ieungkorean: 0x3147,
+  ieungparenkorean: 0x3207,
+  igrave: 0x00EC,
+  igujarati: 0x0A87,
+  igurmukhi: 0x0A07,
+  ihiragana: 0x3044,
+  ihookabove: 0x1EC9,
+  iibengali: 0x0988,
+  iicyrillic: 0x0438,
+  iideva: 0x0908,
+  iigujarati: 0x0A88,
+  iigurmukhi: 0x0A08,
+  iimatragurmukhi: 0x0A40,
+  iinvertedbreve: 0x020B,
+  iishortcyrillic: 0x0439,
+  iivowelsignbengali: 0x09C0,
+  iivowelsigndeva: 0x0940,
+  iivowelsigngujarati: 0x0AC0,
+  ij: 0x0133,
+  ikatakana: 0x30A4,
+  ikatakanahalfwidth: 0xFF72,
+  ikorean: 0x3163,
+  ilde: 0x02DC,
+  iluyhebrew: 0x05AC,
+  imacron: 0x012B,
+  imacroncyrillic: 0x04E3,
+  imageorapproximatelyequal: 0x2253,
+  imatragurmukhi: 0x0A3F,
+  imonospace: 0xFF49,
+  increment: 0x2206,
+  infinity: 0x221E,
+  iniarmenian: 0x056B,
+  integral: 0x222B,
+  integralbottom: 0x2321,
+  integralbt: 0x2321,
+  integralex: 0xF8F5,
+  integraltop: 0x2320,
+  integraltp: 0x2320,
+  intersection: 0x2229,
+  intisquare: 0x3305,
+  invbullet: 0x25D8,
+  invcircle: 0x25D9,
+  invsmileface: 0x263B,
+  iocyrillic: 0x0451,
+  iogonek: 0x012F,
+  iota: 0x03B9,
+  iotadieresis: 0x03CA,
+  iotadieresistonos: 0x0390,
+  iotalatin: 0x0269,
+  iotatonos: 0x03AF,
+  iparen: 0x24A4,
+  irigurmukhi: 0x0A72,
+  ismallhiragana: 0x3043,
+  ismallkatakana: 0x30A3,
+  ismallkatakanahalfwidth: 0xFF68,
+  issharbengali: 0x09FA,
+  istroke: 0x0268,
+  isuperior: 0xF6ED,
+  iterationhiragana: 0x309D,
+  iterationkatakana: 0x30FD,
+  itilde: 0x0129,
+  itildebelow: 0x1E2D,
+  iubopomofo: 0x3129,
+  iucyrillic: 0x044E,
+  ivowelsignbengali: 0x09BF,
+  ivowelsigndeva: 0x093F,
+  ivowelsigngujarati: 0x0ABF,
+  izhitsacyrillic: 0x0475,
+  izhitsadblgravecyrillic: 0x0477,
+  j: 0x006A,
+  jaarmenian: 0x0571,
+  jabengali: 0x099C,
+  jadeva: 0x091C,
+  jagujarati: 0x0A9C,
+  jagurmukhi: 0x0A1C,
+  jbopomofo: 0x3110,
+  jcaron: 0x01F0,
+  jcircle: 0x24D9,
+  jcircumflex: 0x0135,
+  jcrossedtail: 0x029D,
+  jdotlessstroke: 0x025F,
+  jecyrillic: 0x0458,
+  jeemarabic: 0x062C,
+  jeemfinalarabic: 0xFE9E,
+  jeeminitialarabic: 0xFE9F,
+  jeemmedialarabic: 0xFEA0,
+  jeharabic: 0x0698,
+  jehfinalarabic: 0xFB8B,
+  jhabengali: 0x099D,
+  jhadeva: 0x091D,
+  jhagujarati: 0x0A9D,
+  jhagurmukhi: 0x0A1D,
+  jheharmenian: 0x057B,
+  jis: 0x3004,
+  jmonospace: 0xFF4A,
+  jparen: 0x24A5,
+  jsuperior: 0x02B2,
+  k: 0x006B,
+  kabashkircyrillic: 0x04A1,
+  kabengali: 0x0995,
+  kacute: 0x1E31,
+  kacyrillic: 0x043A,
+  kadescendercyrillic: 0x049B,
+  kadeva: 0x0915,
+  kaf: 0x05DB,
+  kafarabic: 0x0643,
+  kafdagesh: 0xFB3B,
+  kafdageshhebrew: 0xFB3B,
+  kaffinalarabic: 0xFEDA,
+  kafhebrew: 0x05DB,
+  kafinitialarabic: 0xFEDB,
+  kafmedialarabic: 0xFEDC,
+  kafrafehebrew: 0xFB4D,
+  kagujarati: 0x0A95,
+  kagurmukhi: 0x0A15,
+  kahiragana: 0x304B,
+  kahookcyrillic: 0x04C4,
+  kakatakana: 0x30AB,
+  kakatakanahalfwidth: 0xFF76,
+  kappa: 0x03BA,
+  kappasymbolgreek: 0x03F0,
+  kapyeounmieumkorean: 0x3171,
+  kapyeounphieuphkorean: 0x3184,
+  kapyeounpieupkorean: 0x3178,
+  kapyeounssangpieupkorean: 0x3179,
+  karoriisquare: 0x330D,
+  kashidaautoarabic: 0x0640,
+  kashidaautonosidebearingarabic: 0x0640,
+  kasmallkatakana: 0x30F5,
+  kasquare: 0x3384,
+  kasraarabic: 0x0650,
+  kasratanarabic: 0x064D,
+  kastrokecyrillic: 0x049F,
+  katahiraprolongmarkhalfwidth: 0xFF70,
+  kaverticalstrokecyrillic: 0x049D,
+  kbopomofo: 0x310E,
+  kcalsquare: 0x3389,
+  kcaron: 0x01E9,
+  kcedilla: 0x0137,
+  kcircle: 0x24DA,
+  kcommaaccent: 0x0137,
+  kdotbelow: 0x1E33,
+  keharmenian: 0x0584,
+  kehiragana: 0x3051,
+  kekatakana: 0x30B1,
+  kekatakanahalfwidth: 0xFF79,
+  kenarmenian: 0x056F,
+  kesmallkatakana: 0x30F6,
+  kgreenlandic: 0x0138,
+  khabengali: 0x0996,
+  khacyrillic: 0x0445,
+  khadeva: 0x0916,
+  khagujarati: 0x0A96,
+  khagurmukhi: 0x0A16,
+  khaharabic: 0x062E,
+  khahfinalarabic: 0xFEA6,
+  khahinitialarabic: 0xFEA7,
+  khahmedialarabic: 0xFEA8,
+  kheicoptic: 0x03E7,
+  khhadeva: 0x0959,
+  khhagurmukhi: 0x0A59,
+  khieukhacirclekorean: 0x3278,
+  khieukhaparenkorean: 0x3218,
+  khieukhcirclekorean: 0x326A,
+  khieukhkorean: 0x314B,
+  khieukhparenkorean: 0x320A,
+  khokhaithai: 0x0E02,
+  khokhonthai: 0x0E05,
+  khokhuatthai: 0x0E03,
+  khokhwaithai: 0x0E04,
+  khomutthai: 0x0E5B,
+  khook: 0x0199,
+  khorakhangthai: 0x0E06,
+  khzsquare: 0x3391,
+  kihiragana: 0x304D,
+  kikatakana: 0x30AD,
+  kikatakanahalfwidth: 0xFF77,
+  kiroguramusquare: 0x3315,
+  kiromeetorusquare: 0x3316,
+  kirosquare: 0x3314,
+  kiyeokacirclekorean: 0x326E,
+  kiyeokaparenkorean: 0x320E,
+  kiyeokcirclekorean: 0x3260,
+  kiyeokkorean: 0x3131,
+  kiyeokparenkorean: 0x3200,
+  kiyeoksioskorean: 0x3133,
+  kjecyrillic: 0x045C,
+  klinebelow: 0x1E35,
+  klsquare: 0x3398,
+  kmcubedsquare: 0x33A6,
+  kmonospace: 0xFF4B,
+  kmsquaredsquare: 0x33A2,
+  kohiragana: 0x3053,
+  kohmsquare: 0x33C0,
+  kokaithai: 0x0E01,
+  kokatakana: 0x30B3,
+  kokatakanahalfwidth: 0xFF7A,
+  kooposquare: 0x331E,
+  koppacyrillic: 0x0481,
+  koreanstandardsymbol: 0x327F,
+  koroniscmb: 0x0343,
+  kparen: 0x24A6,
+  kpasquare: 0x33AA,
+  ksicyrillic: 0x046F,
+  ktsquare: 0x33CF,
+  kturned: 0x029E,
+  kuhiragana: 0x304F,
+  kukatakana: 0x30AF,
+  kukatakanahalfwidth: 0xFF78,
+  kvsquare: 0x33B8,
+  kwsquare: 0x33BE,
+  l: 0x006C,
+  labengali: 0x09B2,
+  lacute: 0x013A,
+  ladeva: 0x0932,
+  lagujarati: 0x0AB2,
+  lagurmukhi: 0x0A32,
+  lakkhangyaothai: 0x0E45,
+  lamaleffinalarabic: 0xFEFC,
+  lamalefhamzaabovefinalarabic: 0xFEF8,
+  lamalefhamzaaboveisolatedarabic: 0xFEF7,
+  lamalefhamzabelowfinalarabic: 0xFEFA,
+  lamalefhamzabelowisolatedarabic: 0xFEF9,
+  lamalefisolatedarabic: 0xFEFB,
+  lamalefmaddaabovefinalarabic: 0xFEF6,
+  lamalefmaddaaboveisolatedarabic: 0xFEF5,
+  lamarabic: 0x0644,
+  lambda: 0x03BB,
+  lambdastroke: 0x019B,
+  lamed: 0x05DC,
+  lameddagesh: 0xFB3C,
+  lameddageshhebrew: 0xFB3C,
+  lamedhebrew: 0x05DC,
+  lamfinalarabic: 0xFEDE,
+  lamhahinitialarabic: 0xFCCA,
+  laminitialarabic: 0xFEDF,
+  lamjeeminitialarabic: 0xFCC9,
+  lamkhahinitialarabic: 0xFCCB,
+  lamlamhehisolatedarabic: 0xFDF2,
+  lammedialarabic: 0xFEE0,
+  lammeemhahinitialarabic: 0xFD88,
+  lammeeminitialarabic: 0xFCCC,
+  largecircle: 0x25EF,
+  lbar: 0x019A,
+  lbelt: 0x026C,
+  lbopomofo: 0x310C,
+  lcaron: 0x013E,
+  lcedilla: 0x013C,
+  lcircle: 0x24DB,
+  lcircumflexbelow: 0x1E3D,
+  lcommaaccent: 0x013C,
+  ldot: 0x0140,
+  ldotaccent: 0x0140,
+  ldotbelow: 0x1E37,
+  ldotbelowmacron: 0x1E39,
+  leftangleabovecmb: 0x031A,
+  lefttackbelowcmb: 0x0318,
+  less: 0x003C,
+  lessequal: 0x2264,
+  lessequalorgreater: 0x22DA,
+  lessmonospace: 0xFF1C,
+  lessorequivalent: 0x2272,
+  lessorgreater: 0x2276,
+  lessoverequal: 0x2266,
+  lesssmall: 0xFE64,
+  lezh: 0x026E,
+  lfblock: 0x258C,
+  lhookretroflex: 0x026D,
+  lira: 0x20A4,
+  liwnarmenian: 0x056C,
+  lj: 0x01C9,
+  ljecyrillic: 0x0459,
+  ll: 0xF6C0,
+  lladeva: 0x0933,
+  llagujarati: 0x0AB3,
+  llinebelow: 0x1E3B,
+  llladeva: 0x0934,
+  llvocalicbengali: 0x09E1,
+  llvocalicdeva: 0x0961,
+  llvocalicvowelsignbengali: 0x09E3,
+  llvocalicvowelsigndeva: 0x0963,
+  lmiddletilde: 0x026B,
+  lmonospace: 0xFF4C,
+  lmsquare: 0x33D0,
+  lochulathai: 0x0E2C,
+  logicaland: 0x2227,
+  logicalnot: 0x00AC,
+  logicalnotreversed: 0x2310,
+  logicalor: 0x2228,
+  lolingthai: 0x0E25,
+  longs: 0x017F,
+  lowlinecenterline: 0xFE4E,
+  lowlinecmb: 0x0332,
+  lowlinedashed: 0xFE4D,
+  lozenge: 0x25CA,
+  lparen: 0x24A7,
+  lslash: 0x0142,
+  lsquare: 0x2113,
+  lsuperior: 0xF6EE,
+  ltshade: 0x2591,
+  luthai: 0x0E26,
+  lvocalicbengali: 0x098C,
+  lvocalicdeva: 0x090C,
+  lvocalicvowelsignbengali: 0x09E2,
+  lvocalicvowelsigndeva: 0x0962,
+  lxsquare: 0x33D3,
+  m: 0x006D,
+  mabengali: 0x09AE,
+  macron: 0x00AF,
+  macronbelowcmb: 0x0331,
+  macroncmb: 0x0304,
+  macronlowmod: 0x02CD,
+  macronmonospace: 0xFFE3,
+  macute: 0x1E3F,
+  madeva: 0x092E,
+  magujarati: 0x0AAE,
+  magurmukhi: 0x0A2E,
+  mahapakhhebrew: 0x05A4,
+  mahapakhlefthebrew: 0x05A4,
+  mahiragana: 0x307E,
+  maichattawalowleftthai: 0xF895,
+  maichattawalowrightthai: 0xF894,
+  maichattawathai: 0x0E4B,
+  maichattawaupperleftthai: 0xF893,
+  maieklowleftthai: 0xF88C,
+  maieklowrightthai: 0xF88B,
+  maiekthai: 0x0E48,
+  maiekupperleftthai: 0xF88A,
+  maihanakatleftthai: 0xF884,
+  maihanakatthai: 0x0E31,
+  maitaikhuleftthai: 0xF889,
+  maitaikhuthai: 0x0E47,
+  maitholowleftthai: 0xF88F,
+  maitholowrightthai: 0xF88E,
+  maithothai: 0x0E49,
+  maithoupperleftthai: 0xF88D,
+  maitrilowleftthai: 0xF892,
+  maitrilowrightthai: 0xF891,
+  maitrithai: 0x0E4A,
+  maitriupperleftthai: 0xF890,
+  maiyamokthai: 0x0E46,
+  makatakana: 0x30DE,
+  makatakanahalfwidth: 0xFF8F,
+  male: 0x2642,
+  mansyonsquare: 0x3347,
+  maqafhebrew: 0x05BE,
+  mars: 0x2642,
+  masoracirclehebrew: 0x05AF,
+  masquare: 0x3383,
+  mbopomofo: 0x3107,
+  mbsquare: 0x33D4,
+  mcircle: 0x24DC,
+  mcubedsquare: 0x33A5,
+  mdotaccent: 0x1E41,
+  mdotbelow: 0x1E43,
+  meemarabic: 0x0645,
+  meemfinalarabic: 0xFEE2,
+  meeminitialarabic: 0xFEE3,
+  meemmedialarabic: 0xFEE4,
+  meemmeeminitialarabic: 0xFCD1,
+  meemmeemisolatedarabic: 0xFC48,
+  meetorusquare: 0x334D,
+  mehiragana: 0x3081,
+  meizierasquare: 0x337E,
+  mekatakana: 0x30E1,
+  mekatakanahalfwidth: 0xFF92,
+  mem: 0x05DE,
+  memdagesh: 0xFB3E,
+  memdageshhebrew: 0xFB3E,
+  memhebrew: 0x05DE,
+  menarmenian: 0x0574,
+  merkhahebrew: 0x05A5,
+  merkhakefulahebrew: 0x05A6,
+  merkhakefulalefthebrew: 0x05A6,
+  merkhalefthebrew: 0x05A5,
+  mhook: 0x0271,
+  mhzsquare: 0x3392,
+  middledotkatakanahalfwidth: 0xFF65,
+  middot: 0x00B7,
+  mieumacirclekorean: 0x3272,
+  mieumaparenkorean: 0x3212,
+  mieumcirclekorean: 0x3264,
+  mieumkorean: 0x3141,
+  mieumpansioskorean: 0x3170,
+  mieumparenkorean: 0x3204,
+  mieumpieupkorean: 0x316E,
+  mieumsioskorean: 0x316F,
+  mihiragana: 0x307F,
+  mikatakana: 0x30DF,
+  mikatakanahalfwidth: 0xFF90,
+  minus: 0x2212,
+  minusbelowcmb: 0x0320,
+  minuscircle: 0x2296,
+  minusmod: 0x02D7,
+  minusplus: 0x2213,
+  minute: 0x2032,
+  miribaarusquare: 0x334A,
+  mirisquare: 0x3349,
+  mlonglegturned: 0x0270,
+  mlsquare: 0x3396,
+  mmcubedsquare: 0x33A3,
+  mmonospace: 0xFF4D,
+  mmsquaredsquare: 0x339F,
+  mohiragana: 0x3082,
+  mohmsquare: 0x33C1,
+  mokatakana: 0x30E2,
+  mokatakanahalfwidth: 0xFF93,
+  molsquare: 0x33D6,
+  momathai: 0x0E21,
+  moverssquare: 0x33A7,
+  moverssquaredsquare: 0x33A8,
+  mparen: 0x24A8,
+  mpasquare: 0x33AB,
+  mssquare: 0x33B3,
+  msuperior: 0xF6EF,
+  mturned: 0x026F,
+  mu: 0x00B5,
+  mu1: 0x00B5,
+  muasquare: 0x3382,
+  muchgreater: 0x226B,
+  muchless: 0x226A,
+  mufsquare: 0x338C,
+  mugreek: 0x03BC,
+  mugsquare: 0x338D,
+  muhiragana: 0x3080,
+  mukatakana: 0x30E0,
+  mukatakanahalfwidth: 0xFF91,
+  mulsquare: 0x3395,
+  multiply: 0x00D7,
+  mumsquare: 0x339B,
+  munahhebrew: 0x05A3,
+  munahlefthebrew: 0x05A3,
+  musicalnote: 0x266A,
+  musicalnotedbl: 0x266B,
+  musicflatsign: 0x266D,
+  musicsharpsign: 0x266F,
+  mussquare: 0x33B2,
+  muvsquare: 0x33B6,
+  muwsquare: 0x33BC,
+  mvmegasquare: 0x33B9,
+  mvsquare: 0x33B7,
+  mwmegasquare: 0x33BF,
+  mwsquare: 0x33BD,
+  n: 0x006E,
+  nabengali: 0x09A8,
+  nabla: 0x2207,
+  nacute: 0x0144,
+  nadeva: 0x0928,
+  nagujarati: 0x0AA8,
+  nagurmukhi: 0x0A28,
+  nahiragana: 0x306A,
+  nakatakana: 0x30CA,
+  nakatakanahalfwidth: 0xFF85,
+  napostrophe: 0x0149,
+  nasquare: 0x3381,
+  nbopomofo: 0x310B,
+  nbspace: 0x00A0,
+  ncaron: 0x0148,
+  ncedilla: 0x0146,
+  ncircle: 0x24DD,
+  ncircumflexbelow: 0x1E4B,
+  ncommaaccent: 0x0146,
+  ndotaccent: 0x1E45,
+  ndotbelow: 0x1E47,
+  nehiragana: 0x306D,
+  nekatakana: 0x30CD,
+  nekatakanahalfwidth: 0xFF88,
+  newsheqelsign: 0x20AA,
+  nfsquare: 0x338B,
+  ngabengali: 0x0999,
+  ngadeva: 0x0919,
+  ngagujarati: 0x0A99,
+  ngagurmukhi: 0x0A19,
+  ngonguthai: 0x0E07,
+  nhiragana: 0x3093,
+  nhookleft: 0x0272,
+  nhookretroflex: 0x0273,
+  nieunacirclekorean: 0x326F,
+  nieunaparenkorean: 0x320F,
+  nieuncieuckorean: 0x3135,
+  nieuncirclekorean: 0x3261,
+  nieunhieuhkorean: 0x3136,
+  nieunkorean: 0x3134,
+  nieunpansioskorean: 0x3168,
+  nieunparenkorean: 0x3201,
+  nieunsioskorean: 0x3167,
+  nieuntikeutkorean: 0x3166,
+  nihiragana: 0x306B,
+  nikatakana: 0x30CB,
+  nikatakanahalfwidth: 0xFF86,
+  nikhahitleftthai: 0xF899,
+  nikhahitthai: 0x0E4D,
+  nine: 0x0039,
+  ninearabic: 0x0669,
+  ninebengali: 0x09EF,
+  ninecircle: 0x2468,
+  ninecircleinversesansserif: 0x2792,
+  ninedeva: 0x096F,
+  ninegujarati: 0x0AEF,
+  ninegurmukhi: 0x0A6F,
+  ninehackarabic: 0x0669,
+  ninehangzhou: 0x3029,
+  nineideographicparen: 0x3228,
+  nineinferior: 0x2089,
+  ninemonospace: 0xFF19,
+  nineoldstyle: 0xF739,
+  nineparen: 0x247C,
+  nineperiod: 0x2490,
+  ninepersian: 0x06F9,
+  nineroman: 0x2178,
+  ninesuperior: 0x2079,
+  nineteencircle: 0x2472,
+  nineteenparen: 0x2486,
+  nineteenperiod: 0x249A,
+  ninethai: 0x0E59,
+  nj: 0x01CC,
+  njecyrillic: 0x045A,
+  nkatakana: 0x30F3,
+  nkatakanahalfwidth: 0xFF9D,
+  nlegrightlong: 0x019E,
+  nlinebelow: 0x1E49,
+  nmonospace: 0xFF4E,
+  nmsquare: 0x339A,
+  nnabengali: 0x09A3,
+  nnadeva: 0x0923,
+  nnagujarati: 0x0AA3,
+  nnagurmukhi: 0x0A23,
+  nnnadeva: 0x0929,
+  nohiragana: 0x306E,
+  nokatakana: 0x30CE,
+  nokatakanahalfwidth: 0xFF89,
+  nonbreakingspace: 0x00A0,
+  nonenthai: 0x0E13,
+  nonuthai: 0x0E19,
+  noonarabic: 0x0646,
+  noonfinalarabic: 0xFEE6,
+  noonghunnaarabic: 0x06BA,
+  noonghunnafinalarabic: 0xFB9F,
+  nooninitialarabic: 0xFEE7,
+  noonjeeminitialarabic: 0xFCD2,
+  noonjeemisolatedarabic: 0xFC4B,
+  noonmedialarabic: 0xFEE8,
+  noonmeeminitialarabic: 0xFCD5,
+  noonmeemisolatedarabic: 0xFC4E,
+  noonnoonfinalarabic: 0xFC8D,
+  notcontains: 0x220C,
+  notelement: 0x2209,
+  notelementof: 0x2209,
+  notequal: 0x2260,
+  notgreater: 0x226F,
+  notgreaternorequal: 0x2271,
+  notgreaternorless: 0x2279,
+  notidentical: 0x2262,
+  notless: 0x226E,
+  notlessnorequal: 0x2270,
+  notparallel: 0x2226,
+  notprecedes: 0x2280,
+  notsubset: 0x2284,
+  notsucceeds: 0x2281,
+  notsuperset: 0x2285,
+  nowarmenian: 0x0576,
+  nparen: 0x24A9,
+  nssquare: 0x33B1,
+  nsuperior: 0x207F,
+  ntilde: 0x00F1,
+  nu: 0x03BD,
+  nuhiragana: 0x306C,
+  nukatakana: 0x30CC,
+  nukatakanahalfwidth: 0xFF87,
+  nuktabengali: 0x09BC,
+  nuktadeva: 0x093C,
+  nuktagujarati: 0x0ABC,
+  nuktagurmukhi: 0x0A3C,
+  numbersign: 0x0023,
+  numbersignmonospace: 0xFF03,
+  numbersignsmall: 0xFE5F,
+  numeralsigngreek: 0x0374,
+  numeralsignlowergreek: 0x0375,
+  numero: 0x2116,
+  nun: 0x05E0,
+  nundagesh: 0xFB40,
+  nundageshhebrew: 0xFB40,
+  nunhebrew: 0x05E0,
+  nvsquare: 0x33B5,
+  nwsquare: 0x33BB,
+  nyabengali: 0x099E,
+  nyadeva: 0x091E,
+  nyagujarati: 0x0A9E,
+  nyagurmukhi: 0x0A1E,
+  o: 0x006F,
+  oacute: 0x00F3,
+  oangthai: 0x0E2D,
+  obarred: 0x0275,
+  obarredcyrillic: 0x04E9,
+  obarreddieresiscyrillic: 0x04EB,
+  obengali: 0x0993,
+  obopomofo: 0x311B,
+  obreve: 0x014F,
+  ocandradeva: 0x0911,
+  ocandragujarati: 0x0A91,
+  ocandravowelsigndeva: 0x0949,
+  ocandravowelsigngujarati: 0x0AC9,
+  ocaron: 0x01D2,
+  ocircle: 0x24DE,
+  ocircumflex: 0x00F4,
+  ocircumflexacute: 0x1ED1,
+  ocircumflexdotbelow: 0x1ED9,
+  ocircumflexgrave: 0x1ED3,
+  ocircumflexhookabove: 0x1ED5,
+  ocircumflextilde: 0x1ED7,
+  ocyrillic: 0x043E,
+  odblacute: 0x0151,
+  odblgrave: 0x020D,
+  odeva: 0x0913,
+  odieresis: 0x00F6,
+  odieresiscyrillic: 0x04E7,
+  odotbelow: 0x1ECD,
+  oe: 0x0153,
+  oekorean: 0x315A,
+  ogonek: 0x02DB,
+  ogonekcmb: 0x0328,
+  ograve: 0x00F2,
+  ogujarati: 0x0A93,
+  oharmenian: 0x0585,
+  ohiragana: 0x304A,
+  ohookabove: 0x1ECF,
+  ohorn: 0x01A1,
+  ohornacute: 0x1EDB,
+  ohorndotbelow: 0x1EE3,
+  ohorngrave: 0x1EDD,
+  ohornhookabove: 0x1EDF,
+  ohorntilde: 0x1EE1,
+  ohungarumlaut: 0x0151,
+  oi: 0x01A3,
+  oinvertedbreve: 0x020F,
+  okatakana: 0x30AA,
+  okatakanahalfwidth: 0xFF75,
+  okorean: 0x3157,
+  olehebrew: 0x05AB,
+  omacron: 0x014D,
+  omacronacute: 0x1E53,
+  omacrongrave: 0x1E51,
+  omdeva: 0x0950,
+  omega: 0x03C9,
+  omega1: 0x03D6,
+  omegacyrillic: 0x0461,
+  omegalatinclosed: 0x0277,
+  omegaroundcyrillic: 0x047B,
+  omegatitlocyrillic: 0x047D,
+  omegatonos: 0x03CE,
+  omgujarati: 0x0AD0,
+  omicron: 0x03BF,
+  omicrontonos: 0x03CC,
+  omonospace: 0xFF4F,
+  one: 0x0031,
+  onearabic: 0x0661,
+  onebengali: 0x09E7,
+  onecircle: 0x2460,
+  onecircleinversesansserif: 0x278A,
+  onedeva: 0x0967,
+  onedotenleader: 0x2024,
+  oneeighth: 0x215B,
+  onefitted: 0xF6DC,
+  onegujarati: 0x0AE7,
+  onegurmukhi: 0x0A67,
+  onehackarabic: 0x0661,
+  onehalf: 0x00BD,
+  onehangzhou: 0x3021,
+  oneideographicparen: 0x3220,
+  oneinferior: 0x2081,
+  onemonospace: 0xFF11,
+  onenumeratorbengali: 0x09F4,
+  oneoldstyle: 0xF731,
+  oneparen: 0x2474,
+  oneperiod: 0x2488,
+  onepersian: 0x06F1,
+  onequarter: 0x00BC,
+  oneroman: 0x2170,
+  onesuperior: 0x00B9,
+  onethai: 0x0E51,
+  onethird: 0x2153,
+  oogonek: 0x01EB,
+  oogonekmacron: 0x01ED,
+  oogurmukhi: 0x0A13,
+  oomatragurmukhi: 0x0A4B,
+  oopen: 0x0254,
+  oparen: 0x24AA,
+  openbullet: 0x25E6,
+  option: 0x2325,
+  ordfeminine: 0x00AA,
+  ordmasculine: 0x00BA,
+  orthogonal: 0x221F,
+  oshortdeva: 0x0912,
+  oshortvowelsigndeva: 0x094A,
+  oslash: 0x00F8,
+  oslashacute: 0x01FF,
+  osmallhiragana: 0x3049,
+  osmallkatakana: 0x30A9,
+  osmallkatakanahalfwidth: 0xFF6B,
+  ostrokeacute: 0x01FF,
+  osuperior: 0xF6F0,
+  otcyrillic: 0x047F,
+  otilde: 0x00F5,
+  otildeacute: 0x1E4D,
+  otildedieresis: 0x1E4F,
+  oubopomofo: 0x3121,
+  overline: 0x203E,
+  overlinecenterline: 0xFE4A,
+  overlinecmb: 0x0305,
+  overlinedashed: 0xFE49,
+  overlinedblwavy: 0xFE4C,
+  overlinewavy: 0xFE4B,
+  overscore: 0x00AF,
+  ovowelsignbengali: 0x09CB,
+  ovowelsigndeva: 0x094B,
+  ovowelsigngujarati: 0x0ACB,
+  p: 0x0070,
+  paampssquare: 0x3380,
+  paasentosquare: 0x332B,
+  pabengali: 0x09AA,
+  pacute: 0x1E55,
+  padeva: 0x092A,
+  pagedown: 0x21DF,
+  pageup: 0x21DE,
+  pagujarati: 0x0AAA,
+  pagurmukhi: 0x0A2A,
+  pahiragana: 0x3071,
+  paiyannoithai: 0x0E2F,
+  pakatakana: 0x30D1,
+  palatalizationcyrilliccmb: 0x0484,
+  palochkacyrillic: 0x04C0,
+  pansioskorean: 0x317F,
+  paragraph: 0x00B6,
+  parallel: 0x2225,
+  parenleft: 0x0028,
+  parenleftaltonearabic: 0xFD3E,
+  parenleftbt: 0xF8ED,
+  parenleftex: 0xF8EC,
+  parenleftinferior: 0x208D,
+  parenleftmonospace: 0xFF08,
+  parenleftsmall: 0xFE59,
+  parenleftsuperior: 0x207D,
+  parenlefttp: 0xF8EB,
+  parenleftvertical: 0xFE35,
+  parenright: 0x0029,
+  parenrightaltonearabic: 0xFD3F,
+  parenrightbt: 0xF8F8,
+  parenrightex: 0xF8F7,
+  parenrightinferior: 0x208E,
+  parenrightmonospace: 0xFF09,
+  parenrightsmall: 0xFE5A,
+  parenrightsuperior: 0x207E,
+  parenrighttp: 0xF8F6,
+  parenrightvertical: 0xFE36,
+  partialdiff: 0x2202,
+  paseqhebrew: 0x05C0,
+  pashtahebrew: 0x0599,
+  pasquare: 0x33A9,
+  patah: 0x05B7,
+  patah11: 0x05B7,
+  patah1d: 0x05B7,
+  patah2a: 0x05B7,
+  patahhebrew: 0x05B7,
+  patahnarrowhebrew: 0x05B7,
+  patahquarterhebrew: 0x05B7,
+  patahwidehebrew: 0x05B7,
+  pazerhebrew: 0x05A1,
+  pbopomofo: 0x3106,
+  pcircle: 0x24DF,
+  pdotaccent: 0x1E57,
+  pe: 0x05E4,
+  pecyrillic: 0x043F,
+  pedagesh: 0xFB44,
+  pedageshhebrew: 0xFB44,
+  peezisquare: 0x333B,
+  pefinaldageshhebrew: 0xFB43,
+  peharabic: 0x067E,
+  peharmenian: 0x057A,
+  pehebrew: 0x05E4,
+  pehfinalarabic: 0xFB57,
+  pehinitialarabic: 0xFB58,
+  pehiragana: 0x307A,
+  pehmedialarabic: 0xFB59,
+  pekatakana: 0x30DA,
+  pemiddlehookcyrillic: 0x04A7,
+  perafehebrew: 0xFB4E,
+  percent: 0x0025,
+  percentarabic: 0x066A,
+  percentmonospace: 0xFF05,
+  percentsmall: 0xFE6A,
+  period: 0x002E,
+  periodarmenian: 0x0589,
+  periodcentered: 0x00B7,
+  periodhalfwidth: 0xFF61,
+  periodinferior: 0xF6E7,
+  periodmonospace: 0xFF0E,
+  periodsmall: 0xFE52,
+  periodsuperior: 0xF6E8,
+  perispomenigreekcmb: 0x0342,
+  perpendicular: 0x22A5,
+  perthousand: 0x2030,
+  peseta: 0x20A7,
+  pfsquare: 0x338A,
+  phabengali: 0x09AB,
+  phadeva: 0x092B,
+  phagujarati: 0x0AAB,
+  phagurmukhi: 0x0A2B,
+  phi: 0x03C6,
+  phi1: 0x03D5,
+  phieuphacirclekorean: 0x327A,
+  phieuphaparenkorean: 0x321A,
+  phieuphcirclekorean: 0x326C,
+  phieuphkorean: 0x314D,
+  phieuphparenkorean: 0x320C,
+  philatin: 0x0278,
+  phinthuthai: 0x0E3A,
+  phisymbolgreek: 0x03D5,
+  phook: 0x01A5,
+  phophanthai: 0x0E1E,
+  phophungthai: 0x0E1C,
+  phosamphaothai: 0x0E20,
+  pi: 0x03C0,
+  pieupacirclekorean: 0x3273,
+  pieupaparenkorean: 0x3213,
+  pieupcieuckorean: 0x3176,
+  pieupcirclekorean: 0x3265,
+  pieupkiyeokkorean: 0x3172,
+  pieupkorean: 0x3142,
+  pieupparenkorean: 0x3205,
+  pieupsioskiyeokkorean: 0x3174,
+  pieupsioskorean: 0x3144,
+  pieupsiostikeutkorean: 0x3175,
+  pieupthieuthkorean: 0x3177,
+  pieuptikeutkorean: 0x3173,
+  pihiragana: 0x3074,
+  pikatakana: 0x30D4,
+  pisymbolgreek: 0x03D6,
+  piwrarmenian: 0x0583,
+  plus: 0x002B,
+  plusbelowcmb: 0x031F,
+  pluscircle: 0x2295,
+  plusminus: 0x00B1,
+  plusmod: 0x02D6,
+  plusmonospace: 0xFF0B,
+  plussmall: 0xFE62,
+  plussuperior: 0x207A,
+  pmonospace: 0xFF50,
+  pmsquare: 0x33D8,
+  pohiragana: 0x307D,
+  pointingindexdownwhite: 0x261F,
+  pointingindexleftwhite: 0x261C,
+  pointingindexrightwhite: 0x261E,
+  pointingindexupwhite: 0x261D,
+  pokatakana: 0x30DD,
+  poplathai: 0x0E1B,
+  postalmark: 0x3012,
+  postalmarkface: 0x3020,
+  pparen: 0x24AB,
+  precedes: 0x227A,
+  prescription: 0x211E,
+  primemod: 0x02B9,
+  primereversed: 0x2035,
+  product: 0x220F,
+  projective: 0x2305,
+  prolongedkana: 0x30FC,
+  propellor: 0x2318,
+  propersubset: 0x2282,
+  propersuperset: 0x2283,
+  proportion: 0x2237,
+  proportional: 0x221D,
+  psi: 0x03C8,
+  psicyrillic: 0x0471,
+  psilipneumatacyrilliccmb: 0x0486,
+  pssquare: 0x33B0,
+  puhiragana: 0x3077,
+  pukatakana: 0x30D7,
+  pvsquare: 0x33B4,
+  pwsquare: 0x33BA,
+  q: 0x0071,
+  qadeva: 0x0958,
+  qadmahebrew: 0x05A8,
+  qafarabic: 0x0642,
+  qaffinalarabic: 0xFED6,
+  qafinitialarabic: 0xFED7,
+  qafmedialarabic: 0xFED8,
+  qamats: 0x05B8,
+  qamats10: 0x05B8,
+  qamats1a: 0x05B8,
+  qamats1c: 0x05B8,
+  qamats27: 0x05B8,
+  qamats29: 0x05B8,
+  qamats33: 0x05B8,
+  qamatsde: 0x05B8,
+  qamatshebrew: 0x05B8,
+  qamatsnarrowhebrew: 0x05B8,
+  qamatsqatanhebrew: 0x05B8,
+  qamatsqatannarrowhebrew: 0x05B8,
+  qamatsqatanquarterhebrew: 0x05B8,
+  qamatsqatanwidehebrew: 0x05B8,
+  qamatsquarterhebrew: 0x05B8,
+  qamatswidehebrew: 0x05B8,
+  qarneyparahebrew: 0x059F,
+  qbopomofo: 0x3111,
+  qcircle: 0x24E0,
+  qhook: 0x02A0,
+  qmonospace: 0xFF51,
+  qof: 0x05E7,
+  qofdagesh: 0xFB47,
+  qofdageshhebrew: 0xFB47,
+  qofhebrew: 0x05E7,
+  qparen: 0x24AC,
+  quarternote: 0x2669,
+  qubuts: 0x05BB,
+  qubuts18: 0x05BB,
+  qubuts25: 0x05BB,
+  qubuts31: 0x05BB,
+  qubutshebrew: 0x05BB,
+  qubutsnarrowhebrew: 0x05BB,
+  qubutsquarterhebrew: 0x05BB,
+  qubutswidehebrew: 0x05BB,
+  question: 0x003F,
+  questionarabic: 0x061F,
+  questionarmenian: 0x055E,
+  questiondown: 0x00BF,
+  questiondownsmall: 0xF7BF,
+  questiongreek: 0x037E,
+  questionmonospace: 0xFF1F,
+  questionsmall: 0xF73F,
+  quotedbl: 0x0022,
+  quotedblbase: 0x201E,
+  quotedblleft: 0x201C,
+  quotedblmonospace: 0xFF02,
+  quotedblprime: 0x301E,
+  quotedblprimereversed: 0x301D,
+  quotedblright: 0x201D,
+  quoteleft: 0x2018,
+  quoteleftreversed: 0x201B,
+  quotereversed: 0x201B,
+  quoteright: 0x2019,
+  quoterightn: 0x0149,
+  quotesinglbase: 0x201A,
+  quotesingle: 0x0027,
+  quotesinglemonospace: 0xFF07,
+  r: 0x0072,
+  raarmenian: 0x057C,
+  rabengali: 0x09B0,
+  racute: 0x0155,
+  radeva: 0x0930,
+  radical: 0x221A,
+  radicalex: 0xF8E5,
+  radoverssquare: 0x33AE,
+  radoverssquaredsquare: 0x33AF,
+  radsquare: 0x33AD,
+  rafe: 0x05BF,
+  rafehebrew: 0x05BF,
+  ragujarati: 0x0AB0,
+  ragurmukhi: 0x0A30,
+  rahiragana: 0x3089,
+  rakatakana: 0x30E9,
+  rakatakanahalfwidth: 0xFF97,
+  ralowerdiagonalbengali: 0x09F1,
+  ramiddlediagonalbengali: 0x09F0,
+  ramshorn: 0x0264,
+  ratio: 0x2236,
+  rbopomofo: 0x3116,
+  rcaron: 0x0159,
+  rcedilla: 0x0157,
+  rcircle: 0x24E1,
+  rcommaaccent: 0x0157,
+  rdblgrave: 0x0211,
+  rdotaccent: 0x1E59,
+  rdotbelow: 0x1E5B,
+  rdotbelowmacron: 0x1E5D,
+  referencemark: 0x203B,
+  reflexsubset: 0x2286,
+  reflexsuperset: 0x2287,
+  registered: 0x00AE,
+  registersans: 0xF8E8,
+  registerserif: 0xF6DA,
+  reharabic: 0x0631,
+  reharmenian: 0x0580,
+  rehfinalarabic: 0xFEAE,
+  rehiragana: 0x308C,
+  rekatakana: 0x30EC,
+  rekatakanahalfwidth: 0xFF9A,
+  resh: 0x05E8,
+  reshdageshhebrew: 0xFB48,
+  reshhebrew: 0x05E8,
+  reversedtilde: 0x223D,
+  reviahebrew: 0x0597,
+  reviamugrashhebrew: 0x0597,
+  revlogicalnot: 0x2310,
+  rfishhook: 0x027E,
+  rfishhookreversed: 0x027F,
+  rhabengali: 0x09DD,
+  rhadeva: 0x095D,
+  rho: 0x03C1,
+  rhook: 0x027D,
+  rhookturned: 0x027B,
+  rhookturnedsuperior: 0x02B5,
+  rhosymbolgreek: 0x03F1,
+  rhotichookmod: 0x02DE,
+  rieulacirclekorean: 0x3271,
+  rieulaparenkorean: 0x3211,
+  rieulcirclekorean: 0x3263,
+  rieulhieuhkorean: 0x3140,
+  rieulkiyeokkorean: 0x313A,
+  rieulkiyeoksioskorean: 0x3169,
+  rieulkorean: 0x3139,
+  rieulmieumkorean: 0x313B,
+  rieulpansioskorean: 0x316C,
+  rieulparenkorean: 0x3203,
+  rieulphieuphkorean: 0x313F,
+  rieulpieupkorean: 0x313C,
+  rieulpieupsioskorean: 0x316B,
+  rieulsioskorean: 0x313D,
+  rieulthieuthkorean: 0x313E,
+  rieultikeutkorean: 0x316A,
+  rieulyeorinhieuhkorean: 0x316D,
+  rightangle: 0x221F,
+  righttackbelowcmb: 0x0319,
+  righttriangle: 0x22BF,
+  rihiragana: 0x308A,
+  rikatakana: 0x30EA,
+  rikatakanahalfwidth: 0xFF98,
+  ring: 0x02DA,
+  ringbelowcmb: 0x0325,
+  ringcmb: 0x030A,
+  ringhalfleft: 0x02BF,
+  ringhalfleftarmenian: 0x0559,
+  ringhalfleftbelowcmb: 0x031C,
+  ringhalfleftcentered: 0x02D3,
+  ringhalfright: 0x02BE,
+  ringhalfrightbelowcmb: 0x0339,
+  ringhalfrightcentered: 0x02D2,
+  rinvertedbreve: 0x0213,
+  rittorusquare: 0x3351,
+  rlinebelow: 0x1E5F,
+  rlongleg: 0x027C,
+  rlonglegturned: 0x027A,
+  rmonospace: 0xFF52,
+  rohiragana: 0x308D,
+  rokatakana: 0x30ED,
+  rokatakanahalfwidth: 0xFF9B,
+  roruathai: 0x0E23,
+  rparen: 0x24AD,
+  rrabengali: 0x09DC,
+  rradeva: 0x0931,
+  rragurmukhi: 0x0A5C,
+  rreharabic: 0x0691,
+  rrehfinalarabic: 0xFB8D,
+  rrvocalicbengali: 0x09E0,
+  rrvocalicdeva: 0x0960,
+  rrvocalicgujarati: 0x0AE0,
+  rrvocalicvowelsignbengali: 0x09C4,
+  rrvocalicvowelsigndeva: 0x0944,
+  rrvocalicvowelsigngujarati: 0x0AC4,
+  rsuperior: 0xF6F1,
+  rtblock: 0x2590,
+  rturned: 0x0279,
+  rturnedsuperior: 0x02B4,
+  ruhiragana: 0x308B,
+  rukatakana: 0x30EB,
+  rukatakanahalfwidth: 0xFF99,
+  rupeemarkbengali: 0x09F2,
+  rupeesignbengali: 0x09F3,
+  rupiah: 0xF6DD,
+  ruthai: 0x0E24,
+  rvocalicbengali: 0x098B,
+  rvocalicdeva: 0x090B,
+  rvocalicgujarati: 0x0A8B,
+  rvocalicvowelsignbengali: 0x09C3,
+  rvocalicvowelsigndeva: 0x0943,
+  rvocalicvowelsigngujarati: 0x0AC3,
+  s: 0x0073,
+  sabengali: 0x09B8,
+  sacute: 0x015B,
+  sacutedotaccent: 0x1E65,
+  sadarabic: 0x0635,
+  sadeva: 0x0938,
+  sadfinalarabic: 0xFEBA,
+  sadinitialarabic: 0xFEBB,
+  sadmedialarabic: 0xFEBC,
+  sagujarati: 0x0AB8,
+  sagurmukhi: 0x0A38,
+  sahiragana: 0x3055,
+  sakatakana: 0x30B5,
+  sakatakanahalfwidth: 0xFF7B,
+  sallallahoualayhewasallamarabic: 0xFDFA,
+  samekh: 0x05E1,
+  samekhdagesh: 0xFB41,
+  samekhdageshhebrew: 0xFB41,
+  samekhhebrew: 0x05E1,
+  saraaathai: 0x0E32,
+  saraaethai: 0x0E41,
+  saraaimaimalaithai: 0x0E44,
+  saraaimaimuanthai: 0x0E43,
+  saraamthai: 0x0E33,
+  saraathai: 0x0E30,
+  saraethai: 0x0E40,
+  saraiileftthai: 0xF886,
+  saraiithai: 0x0E35,
+  saraileftthai: 0xF885,
+  saraithai: 0x0E34,
+  saraothai: 0x0E42,
+  saraueeleftthai: 0xF888,
+  saraueethai: 0x0E37,
+  saraueleftthai: 0xF887,
+  sarauethai: 0x0E36,
+  sarauthai: 0x0E38,
+  sarauuthai: 0x0E39,
+  sbopomofo: 0x3119,
+  scaron: 0x0161,
+  scarondotaccent: 0x1E67,
+  scedilla: 0x015F,
+  schwa: 0x0259,
+  schwacyrillic: 0x04D9,
+  schwadieresiscyrillic: 0x04DB,
+  schwahook: 0x025A,
+  scircle: 0x24E2,
+  scircumflex: 0x015D,
+  scommaaccent: 0x0219,
+  sdotaccent: 0x1E61,
+  sdotbelow: 0x1E63,
+  sdotbelowdotaccent: 0x1E69,
+  seagullbelowcmb: 0x033C,
+  second: 0x2033,
+  secondtonechinese: 0x02CA,
+  section: 0x00A7,
+  seenarabic: 0x0633,
+  seenfinalarabic: 0xFEB2,
+  seeninitialarabic: 0xFEB3,
+  seenmedialarabic: 0xFEB4,
+  segol: 0x05B6,
+  segol13: 0x05B6,
+  segol1f: 0x05B6,
+  segol2c: 0x05B6,
+  segolhebrew: 0x05B6,
+  segolnarrowhebrew: 0x05B6,
+  segolquarterhebrew: 0x05B6,
+  segoltahebrew: 0x0592,
+  segolwidehebrew: 0x05B6,
+  seharmenian: 0x057D,
+  sehiragana: 0x305B,
+  sekatakana: 0x30BB,
+  sekatakanahalfwidth: 0xFF7E,
+  semicolon: 0x003B,
+  semicolonarabic: 0x061B,
+  semicolonmonospace: 0xFF1B,
+  semicolonsmall: 0xFE54,
+  semivoicedmarkkana: 0x309C,
+  semivoicedmarkkanahalfwidth: 0xFF9F,
+  sentisquare: 0x3322,
+  sentosquare: 0x3323,
+  seven: 0x0037,
+  sevenarabic: 0x0667,
+  sevenbengali: 0x09ED,
+  sevencircle: 0x2466,
+  sevencircleinversesansserif: 0x2790,
+  sevendeva: 0x096D,
+  seveneighths: 0x215E,
+  sevengujarati: 0x0AED,
+  sevengurmukhi: 0x0A6D,
+  sevenhackarabic: 0x0667,
+  sevenhangzhou: 0x3027,
+  sevenideographicparen: 0x3226,
+  seveninferior: 0x2087,
+  sevenmonospace: 0xFF17,
+  sevenoldstyle: 0xF737,
+  sevenparen: 0x247A,
+  sevenperiod: 0x248E,
+  sevenpersian: 0x06F7,
+  sevenroman: 0x2176,
+  sevensuperior: 0x2077,
+  seventeencircle: 0x2470,
+  seventeenparen: 0x2484,
+  seventeenperiod: 0x2498,
+  seventhai: 0x0E57,
+  sfthyphen: 0x00AD,
+  shaarmenian: 0x0577,
+  shabengali: 0x09B6,
+  shacyrillic: 0x0448,
+  shaddaarabic: 0x0651,
+  shaddadammaarabic: 0xFC61,
+  shaddadammatanarabic: 0xFC5E,
+  shaddafathaarabic: 0xFC60,
+  shaddakasraarabic: 0xFC62,
+  shaddakasratanarabic: 0xFC5F,
+  shade: 0x2592,
+  shadedark: 0x2593,
+  shadelight: 0x2591,
+  shademedium: 0x2592,
+  shadeva: 0x0936,
+  shagujarati: 0x0AB6,
+  shagurmukhi: 0x0A36,
+  shalshelethebrew: 0x0593,
+  shbopomofo: 0x3115,
+  shchacyrillic: 0x0449,
+  sheenarabic: 0x0634,
+  sheenfinalarabic: 0xFEB6,
+  sheeninitialarabic: 0xFEB7,
+  sheenmedialarabic: 0xFEB8,
+  sheicoptic: 0x03E3,
+  sheqel: 0x20AA,
+  sheqelhebrew: 0x20AA,
+  sheva: 0x05B0,
+  sheva115: 0x05B0,
+  sheva15: 0x05B0,
+  sheva22: 0x05B0,
+  sheva2e: 0x05B0,
+  shevahebrew: 0x05B0,
+  shevanarrowhebrew: 0x05B0,
+  shevaquarterhebrew: 0x05B0,
+  shevawidehebrew: 0x05B0,
+  shhacyrillic: 0x04BB,
+  shimacoptic: 0x03ED,
+  shin: 0x05E9,
+  shindagesh: 0xFB49,
+  shindageshhebrew: 0xFB49,
+  shindageshshindot: 0xFB2C,
+  shindageshshindothebrew: 0xFB2C,
+  shindageshsindot: 0xFB2D,
+  shindageshsindothebrew: 0xFB2D,
+  shindothebrew: 0x05C1,
+  shinhebrew: 0x05E9,
+  shinshindot: 0xFB2A,
+  shinshindothebrew: 0xFB2A,
+  shinsindot: 0xFB2B,
+  shinsindothebrew: 0xFB2B,
+  shook: 0x0282,
+  sigma: 0x03C3,
+  sigma1: 0x03C2,
+  sigmafinal: 0x03C2,
+  sigmalunatesymbolgreek: 0x03F2,
+  sihiragana: 0x3057,
+  sikatakana: 0x30B7,
+  sikatakanahalfwidth: 0xFF7C,
+  siluqhebrew: 0x05BD,
+  siluqlefthebrew: 0x05BD,
+  similar: 0x223C,
+  sindothebrew: 0x05C2,
+  siosacirclekorean: 0x3274,
+  siosaparenkorean: 0x3214,
+  sioscieuckorean: 0x317E,
+  sioscirclekorean: 0x3266,
+  sioskiyeokkorean: 0x317A,
+  sioskorean: 0x3145,
+  siosnieunkorean: 0x317B,
+  siosparenkorean: 0x3206,
+  siospieupkorean: 0x317D,
+  siostikeutkorean: 0x317C,
+  six: 0x0036,
+  sixarabic: 0x0666,
+  sixbengali: 0x09EC,
+  sixcircle: 0x2465,
+  sixcircleinversesansserif: 0x278F,
+  sixdeva: 0x096C,
+  sixgujarati: 0x0AEC,
+  sixgurmukhi: 0x0A6C,
+  sixhackarabic: 0x0666,
+  sixhangzhou: 0x3026,
+  sixideographicparen: 0x3225,
+  sixinferior: 0x2086,
+  sixmonospace: 0xFF16,
+  sixoldstyle: 0xF736,
+  sixparen: 0x2479,
+  sixperiod: 0x248D,
+  sixpersian: 0x06F6,
+  sixroman: 0x2175,
+  sixsuperior: 0x2076,
+  sixteencircle: 0x246F,
+  sixteencurrencydenominatorbengali: 0x09F9,
+  sixteenparen: 0x2483,
+  sixteenperiod: 0x2497,
+  sixthai: 0x0E56,
+  slash: 0x002F,
+  slashmonospace: 0xFF0F,
+  slong: 0x017F,
+  slongdotaccent: 0x1E9B,
+  smileface: 0x263A,
+  smonospace: 0xFF53,
+  sofpasuqhebrew: 0x05C3,
+  softhyphen: 0x00AD,
+  softsigncyrillic: 0x044C,
+  sohiragana: 0x305D,
+  sokatakana: 0x30BD,
+  sokatakanahalfwidth: 0xFF7F,
+  soliduslongoverlaycmb: 0x0338,
+  solidusshortoverlaycmb: 0x0337,
+  sorusithai: 0x0E29,
+  sosalathai: 0x0E28,
+  sosothai: 0x0E0B,
+  sosuathai: 0x0E2A,
+  space: 0x0020,
+  spacehackarabic: 0x0020,
+  spade: 0x2660,
+  spadesuitblack: 0x2660,
+  spadesuitwhite: 0x2664,
+  sparen: 0x24AE,
+  squarebelowcmb: 0x033B,
+  squarecc: 0x33C4,
+  squarecm: 0x339D,
+  squarediagonalcrosshatchfill: 0x25A9,
+  squarehorizontalfill: 0x25A4,
+  squarekg: 0x338F,
+  squarekm: 0x339E,
+  squarekmcapital: 0x33CE,
+  squareln: 0x33D1,
+  squarelog: 0x33D2,
+  squaremg: 0x338E,
+  squaremil: 0x33D5,
+  squaremm: 0x339C,
+  squaremsquared: 0x33A1,
+  squareorthogonalcrosshatchfill: 0x25A6,
+  squareupperlefttolowerrightfill: 0x25A7,
+  squareupperrighttolowerleftfill: 0x25A8,
+  squareverticalfill: 0x25A5,
+  squarewhitewithsmallblack: 0x25A3,
+  srsquare: 0x33DB,
+  ssabengali: 0x09B7,
+  ssadeva: 0x0937,
+  ssagujarati: 0x0AB7,
+  ssangcieuckorean: 0x3149,
+  ssanghieuhkorean: 0x3185,
+  ssangieungkorean: 0x3180,
+  ssangkiyeokkorean: 0x3132,
+  ssangnieunkorean: 0x3165,
+  ssangpieupkorean: 0x3143,
+  ssangsioskorean: 0x3146,
+  ssangtikeutkorean: 0x3138,
+  ssuperior: 0xF6F2,
+  sterling: 0x00A3,
+  sterlingmonospace: 0xFFE1,
+  strokelongoverlaycmb: 0x0336,
+  strokeshortoverlaycmb: 0x0335,
+  subset: 0x2282,
+  subsetnotequal: 0x228A,
+  subsetorequal: 0x2286,
+  succeeds: 0x227B,
+  suchthat: 0x220B,
+  suhiragana: 0x3059,
+  sukatakana: 0x30B9,
+  sukatakanahalfwidth: 0xFF7D,
+  sukunarabic: 0x0652,
+  summation: 0x2211,
+  sun: 0x263C,
+  superset: 0x2283,
+  supersetnotequal: 0x228B,
+  supersetorequal: 0x2287,
+  svsquare: 0x33DC,
+  syouwaerasquare: 0x337C,
+  t: 0x0074,
+  tabengali: 0x09A4,
+  tackdown: 0x22A4,
+  tackleft: 0x22A3,
+  tadeva: 0x0924,
+  tagujarati: 0x0AA4,
+  tagurmukhi: 0x0A24,
+  taharabic: 0x0637,
+  tahfinalarabic: 0xFEC2,
+  tahinitialarabic: 0xFEC3,
+  tahiragana: 0x305F,
+  tahmedialarabic: 0xFEC4,
+  taisyouerasquare: 0x337D,
+  takatakana: 0x30BF,
+  takatakanahalfwidth: 0xFF80,
+  tatweelarabic: 0x0640,
+  tau: 0x03C4,
+  tav: 0x05EA,
+  tavdages: 0xFB4A,
+  tavdagesh: 0xFB4A,
+  tavdageshhebrew: 0xFB4A,
+  tavhebrew: 0x05EA,
+  tbar: 0x0167,
+  tbopomofo: 0x310A,
+  tcaron: 0x0165,
+  tccurl: 0x02A8,
+  tcedilla: 0x0163,
+  tcheharabic: 0x0686,
+  tchehfinalarabic: 0xFB7B,
+  tchehinitialarabic: 0xFB7C,
+  tchehmedialarabic: 0xFB7D,
+  tcircle: 0x24E3,
+  tcircumflexbelow: 0x1E71,
+  tcommaaccent: 0x0163,
+  tdieresis: 0x1E97,
+  tdotaccent: 0x1E6B,
+  tdotbelow: 0x1E6D,
+  tecyrillic: 0x0442,
+  tedescendercyrillic: 0x04AD,
+  teharabic: 0x062A,
+  tehfinalarabic: 0xFE96,
+  tehhahinitialarabic: 0xFCA2,
+  tehhahisolatedarabic: 0xFC0C,
+  tehinitialarabic: 0xFE97,
+  tehiragana: 0x3066,
+  tehjeeminitialarabic: 0xFCA1,
+  tehjeemisolatedarabic: 0xFC0B,
+  tehmarbutaarabic: 0x0629,
+  tehmarbutafinalarabic: 0xFE94,
+  tehmedialarabic: 0xFE98,
+  tehmeeminitialarabic: 0xFCA4,
+  tehmeemisolatedarabic: 0xFC0E,
+  tehnoonfinalarabic: 0xFC73,
+  tekatakana: 0x30C6,
+  tekatakanahalfwidth: 0xFF83,
+  telephone: 0x2121,
+  telephoneblack: 0x260E,
+  telishagedolahebrew: 0x05A0,
+  telishaqetanahebrew: 0x05A9,
+  tencircle: 0x2469,
+  tenideographicparen: 0x3229,
+  tenparen: 0x247D,
+  tenperiod: 0x2491,
+  tenroman: 0x2179,
+  tesh: 0x02A7,
+  tet: 0x05D8,
+  tetdagesh: 0xFB38,
+  tetdageshhebrew: 0xFB38,
+  tethebrew: 0x05D8,
+  tetsecyrillic: 0x04B5,
+  tevirhebrew: 0x059B,
+  tevirlefthebrew: 0x059B,
+  thabengali: 0x09A5,
+  thadeva: 0x0925,
+  thagujarati: 0x0AA5,
+  thagurmukhi: 0x0A25,
+  thalarabic: 0x0630,
+  thalfinalarabic: 0xFEAC,
+  thanthakhatlowleftthai: 0xF898,
+  thanthakhatlowrightthai: 0xF897,
+  thanthakhatthai: 0x0E4C,
+  thanthakhatupperleftthai: 0xF896,
+  theharabic: 0x062B,
+  thehfinalarabic: 0xFE9A,
+  thehinitialarabic: 0xFE9B,
+  thehmedialarabic: 0xFE9C,
+  thereexists: 0x2203,
+  therefore: 0x2234,
+  theta: 0x03B8,
+  theta1: 0x03D1,
+  thetasymbolgreek: 0x03D1,
+  thieuthacirclekorean: 0x3279,
+  thieuthaparenkorean: 0x3219,
+  thieuthcirclekorean: 0x326B,
+  thieuthkorean: 0x314C,
+  thieuthparenkorean: 0x320B,
+  thirteencircle: 0x246C,
+  thirteenparen: 0x2480,
+  thirteenperiod: 0x2494,
+  thonangmonthothai: 0x0E11,
+  thook: 0x01AD,
+  thophuthaothai: 0x0E12,
+  thorn: 0x00FE,
+  thothahanthai: 0x0E17,
+  thothanthai: 0x0E10,
+  thothongthai: 0x0E18,
+  thothungthai: 0x0E16,
+  thousandcyrillic: 0x0482,
+  thousandsseparatorarabic: 0x066C,
+  thousandsseparatorpersian: 0x066C,
+  three: 0x0033,
+  threearabic: 0x0663,
+  threebengali: 0x09E9,
+  threecircle: 0x2462,
+  threecircleinversesansserif: 0x278C,
+  threedeva: 0x0969,
+  threeeighths: 0x215C,
+  threegujarati: 0x0AE9,
+  threegurmukhi: 0x0A69,
+  threehackarabic: 0x0663,
+  threehangzhou: 0x3023,
+  threeideographicparen: 0x3222,
+  threeinferior: 0x2083,
+  threemonospace: 0xFF13,
+  threenumeratorbengali: 0x09F6,
+  threeoldstyle: 0xF733,
+  threeparen: 0x2476,
+  threeperiod: 0x248A,
+  threepersian: 0x06F3,
+  threequarters: 0x00BE,
+  threequartersemdash: 0xF6DE,
+  threeroman: 0x2172,
+  threesuperior: 0x00B3,
+  threethai: 0x0E53,
+  thzsquare: 0x3394,
+  tihiragana: 0x3061,
+  tikatakana: 0x30C1,
+  tikatakanahalfwidth: 0xFF81,
+  tikeutacirclekorean: 0x3270,
+  tikeutaparenkorean: 0x3210,
+  tikeutcirclekorean: 0x3262,
+  tikeutkorean: 0x3137,
+  tikeutparenkorean: 0x3202,
+  tilde: 0x02DC,
+  tildebelowcmb: 0x0330,
+  tildecmb: 0x0303,
+  tildecomb: 0x0303,
+  tildedoublecmb: 0x0360,
+  tildeoperator: 0x223C,
+  tildeoverlaycmb: 0x0334,
+  tildeverticalcmb: 0x033E,
+  timescircle: 0x2297,
+  tipehahebrew: 0x0596,
+  tipehalefthebrew: 0x0596,
+  tippigurmukhi: 0x0A70,
+  titlocyrilliccmb: 0x0483,
+  tiwnarmenian: 0x057F,
+  tlinebelow: 0x1E6F,
+  tmonospace: 0xFF54,
+  toarmenian: 0x0569,
+  tohiragana: 0x3068,
+  tokatakana: 0x30C8,
+  tokatakanahalfwidth: 0xFF84,
+  tonebarextrahighmod: 0x02E5,
+  tonebarextralowmod: 0x02E9,
+  tonebarhighmod: 0x02E6,
+  tonebarlowmod: 0x02E8,
+  tonebarmidmod: 0x02E7,
+  tonefive: 0x01BD,
+  tonesix: 0x0185,
+  tonetwo: 0x01A8,
+  tonos: 0x0384,
+  tonsquare: 0x3327,
+  topatakthai: 0x0E0F,
+  tortoiseshellbracketleft: 0x3014,
+  tortoiseshellbracketleftsmall: 0xFE5D,
+  tortoiseshellbracketleftvertical: 0xFE39,
+  tortoiseshellbracketright: 0x3015,
+  tortoiseshellbracketrightsmall: 0xFE5E,
+  tortoiseshellbracketrightvertical: 0xFE3A,
+  totaothai: 0x0E15,
+  tpalatalhook: 0x01AB,
+  tparen: 0x24AF,
+  trademark: 0x2122,
+  trademarksans: 0xF8EA,
+  trademarkserif: 0xF6DB,
+  tretroflexhook: 0x0288,
+  triagdn: 0x25BC,
+  triaglf: 0x25C4,
+  triagrt: 0x25BA,
+  triagup: 0x25B2,
+  ts: 0x02A6,
+  tsadi: 0x05E6,
+  tsadidagesh: 0xFB46,
+  tsadidageshhebrew: 0xFB46,
+  tsadihebrew: 0x05E6,
+  tsecyrillic: 0x0446,
+  tsere: 0x05B5,
+  tsere12: 0x05B5,
+  tsere1e: 0x05B5,
+  tsere2b: 0x05B5,
+  tserehebrew: 0x05B5,
+  tserenarrowhebrew: 0x05B5,
+  tserequarterhebrew: 0x05B5,
+  tserewidehebrew: 0x05B5,
+  tshecyrillic: 0x045B,
+  tsuperior: 0xF6F3,
+  ttabengali: 0x099F,
+  ttadeva: 0x091F,
+  ttagujarati: 0x0A9F,
+  ttagurmukhi: 0x0A1F,
+  tteharabic: 0x0679,
+  ttehfinalarabic: 0xFB67,
+  ttehinitialarabic: 0xFB68,
+  ttehmedialarabic: 0xFB69,
+  tthabengali: 0x09A0,
+  tthadeva: 0x0920,
+  tthagujarati: 0x0AA0,
+  tthagurmukhi: 0x0A20,
+  tturned: 0x0287,
+  tuhiragana: 0x3064,
+  tukatakana: 0x30C4,
+  tukatakanahalfwidth: 0xFF82,
+  tusmallhiragana: 0x3063,
+  tusmallkatakana: 0x30C3,
+  tusmallkatakanahalfwidth: 0xFF6F,
+  twelvecircle: 0x246B,
+  twelveparen: 0x247F,
+  twelveperiod: 0x2493,
+  twelveroman: 0x217B,
+  twentycircle: 0x2473,
+  twentyhangzhou: 0x5344,
+  twentyparen: 0x2487,
+  twentyperiod: 0x249B,
+  two: 0x0032,
+  twoarabic: 0x0662,
+  twobengali: 0x09E8,
+  twocircle: 0x2461,
+  twocircleinversesansserif: 0x278B,
+  twodeva: 0x0968,
+  twodotenleader: 0x2025,
+  twodotleader: 0x2025,
+  twodotleadervertical: 0xFE30,
+  twogujarati: 0x0AE8,
+  twogurmukhi: 0x0A68,
+  twohackarabic: 0x0662,
+  twohangzhou: 0x3022,
+  twoideographicparen: 0x3221,
+  twoinferior: 0x2082,
+  twomonospace: 0xFF12,
+  twonumeratorbengali: 0x09F5,
+  twooldstyle: 0xF732,
+  twoparen: 0x2475,
+  twoperiod: 0x2489,
+  twopersian: 0x06F2,
+  tworoman: 0x2171,
+  twostroke: 0x01BB,
+  twosuperior: 0x00B2,
+  twothai: 0x0E52,
+  twothirds: 0x2154,
+  u: 0x0075,
+  uacute: 0x00FA,
+  ubar: 0x0289,
+  ubengali: 0x0989,
+  ubopomofo: 0x3128,
+  ubreve: 0x016D,
+  ucaron: 0x01D4,
+  ucircle: 0x24E4,
+  ucircumflex: 0x00FB,
+  ucircumflexbelow: 0x1E77,
+  ucyrillic: 0x0443,
+  udattadeva: 0x0951,
+  udblacute: 0x0171,
+  udblgrave: 0x0215,
+  udeva: 0x0909,
+  udieresis: 0x00FC,
+  udieresisacute: 0x01D8,
+  udieresisbelow: 0x1E73,
+  udieresiscaron: 0x01DA,
+  udieresiscyrillic: 0x04F1,
+  udieresisgrave: 0x01DC,
+  udieresismacron: 0x01D6,
+  udotbelow: 0x1EE5,
+  ugrave: 0x00F9,
+  ugujarati: 0x0A89,
+  ugurmukhi: 0x0A09,
+  uhiragana: 0x3046,
+  uhookabove: 0x1EE7,
+  uhorn: 0x01B0,
+  uhornacute: 0x1EE9,
+  uhorndotbelow: 0x1EF1,
+  uhorngrave: 0x1EEB,
+  uhornhookabove: 0x1EED,
+  uhorntilde: 0x1EEF,
+  uhungarumlaut: 0x0171,
+  uhungarumlautcyrillic: 0x04F3,
+  uinvertedbreve: 0x0217,
+  ukatakana: 0x30A6,
+  ukatakanahalfwidth: 0xFF73,
+  ukcyrillic: 0x0479,
+  ukorean: 0x315C,
+  umacron: 0x016B,
+  umacroncyrillic: 0x04EF,
+  umacrondieresis: 0x1E7B,
+  umatragurmukhi: 0x0A41,
+  umonospace: 0xFF55,
+  underscore: 0x005F,
+  underscoredbl: 0x2017,
+  underscoremonospace: 0xFF3F,
+  underscorevertical: 0xFE33,
+  underscorewavy: 0xFE4F,
+  union: 0x222A,
+  universal: 0x2200,
+  uogonek: 0x0173,
+  uparen: 0x24B0,
+  upblock: 0x2580,
+  upperdothebrew: 0x05C4,
+  upsilon: 0x03C5,
+  upsilondieresis: 0x03CB,
+  upsilondieresistonos: 0x03B0,
+  upsilonlatin: 0x028A,
+  upsilontonos: 0x03CD,
+  uptackbelowcmb: 0x031D,
+  uptackmod: 0x02D4,
+  uragurmukhi: 0x0A73,
+  uring: 0x016F,
+  ushortcyrillic: 0x045E,
+  usmallhiragana: 0x3045,
+  usmallkatakana: 0x30A5,
+  usmallkatakanahalfwidth: 0xFF69,
+  ustraightcyrillic: 0x04AF,
+  ustraightstrokecyrillic: 0x04B1,
+  utilde: 0x0169,
+  utildeacute: 0x1E79,
+  utildebelow: 0x1E75,
+  uubengali: 0x098A,
+  uudeva: 0x090A,
+  uugujarati: 0x0A8A,
+  uugurmukhi: 0x0A0A,
+  uumatragurmukhi: 0x0A42,
+  uuvowelsignbengali: 0x09C2,
+  uuvowelsigndeva: 0x0942,
+  uuvowelsigngujarati: 0x0AC2,
+  uvowelsignbengali: 0x09C1,
+  uvowelsigndeva: 0x0941,
+  uvowelsigngujarati: 0x0AC1,
+  v: 0x0076,
+  vadeva: 0x0935,
+  vagujarati: 0x0AB5,
+  vagurmukhi: 0x0A35,
+  vakatakana: 0x30F7,
+  vav: 0x05D5,
+  vavdagesh: 0xFB35,
+  vavdagesh65: 0xFB35,
+  vavdageshhebrew: 0xFB35,
+  vavhebrew: 0x05D5,
+  vavholam: 0xFB4B,
+  vavholamhebrew: 0xFB4B,
+  vavvavhebrew: 0x05F0,
+  vavyodhebrew: 0x05F1,
+  vcircle: 0x24E5,
+  vdotbelow: 0x1E7F,
+  vecyrillic: 0x0432,
+  veharabic: 0x06A4,
+  vehfinalarabic: 0xFB6B,
+  vehinitialarabic: 0xFB6C,
+  vehmedialarabic: 0xFB6D,
+  vekatakana: 0x30F9,
+  venus: 0x2640,
+  verticalbar: 0x007C,
+  verticallineabovecmb: 0x030D,
+  verticallinebelowcmb: 0x0329,
+  verticallinelowmod: 0x02CC,
+  verticallinemod: 0x02C8,
+  vewarmenian: 0x057E,
+  vhook: 0x028B,
+  vikatakana: 0x30F8,
+  viramabengali: 0x09CD,
+  viramadeva: 0x094D,
+  viramagujarati: 0x0ACD,
+  visargabengali: 0x0983,
+  visargadeva: 0x0903,
+  visargagujarati: 0x0A83,
+  vmonospace: 0xFF56,
+  voarmenian: 0x0578,
+  voicediterationhiragana: 0x309E,
+  voicediterationkatakana: 0x30FE,
+  voicedmarkkana: 0x309B,
+  voicedmarkkanahalfwidth: 0xFF9E,
+  vokatakana: 0x30FA,
+  vparen: 0x24B1,
+  vtilde: 0x1E7D,
+  vturned: 0x028C,
+  vuhiragana: 0x3094,
+  vukatakana: 0x30F4,
+  w: 0x0077,
+  wacute: 0x1E83,
+  waekorean: 0x3159,
+  wahiragana: 0x308F,
+  wakatakana: 0x30EF,
+  wakatakanahalfwidth: 0xFF9C,
+  wakorean: 0x3158,
+  wasmallhiragana: 0x308E,
+  wasmallkatakana: 0x30EE,
+  wattosquare: 0x3357,
+  wavedash: 0x301C,
+  wavyunderscorevertical: 0xFE34,
+  wawarabic: 0x0648,
+  wawfinalarabic: 0xFEEE,
+  wawhamzaabovearabic: 0x0624,
+  wawhamzaabovefinalarabic: 0xFE86,
+  wbsquare: 0x33DD,
+  wcircle: 0x24E6,
+  wcircumflex: 0x0175,
+  wdieresis: 0x1E85,
+  wdotaccent: 0x1E87,
+  wdotbelow: 0x1E89,
+  wehiragana: 0x3091,
+  weierstrass: 0x2118,
+  wekatakana: 0x30F1,
+  wekorean: 0x315E,
+  weokorean: 0x315D,
+  wgrave: 0x1E81,
+  whitebullet: 0x25E6,
+  whitecircle: 0x25CB,
+  whitecircleinverse: 0x25D9,
+  whitecornerbracketleft: 0x300E,
+  whitecornerbracketleftvertical: 0xFE43,
+  whitecornerbracketright: 0x300F,
+  whitecornerbracketrightvertical: 0xFE44,
+  whitediamond: 0x25C7,
+  whitediamondcontainingblacksmalldiamond: 0x25C8,
+  whitedownpointingsmalltriangle: 0x25BF,
+  whitedownpointingtriangle: 0x25BD,
+  whiteleftpointingsmalltriangle: 0x25C3,
+  whiteleftpointingtriangle: 0x25C1,
+  whitelenticularbracketleft: 0x3016,
+  whitelenticularbracketright: 0x3017,
+  whiterightpointingsmalltriangle: 0x25B9,
+  whiterightpointingtriangle: 0x25B7,
+  whitesmallsquare: 0x25AB,
+  whitesmilingface: 0x263A,
+  whitesquare: 0x25A1,
+  whitestar: 0x2606,
+  whitetelephone: 0x260F,
+  whitetortoiseshellbracketleft: 0x3018,
+  whitetortoiseshellbracketright: 0x3019,
+  whiteuppointingsmalltriangle: 0x25B5,
+  whiteuppointingtriangle: 0x25B3,
+  wihiragana: 0x3090,
+  wikatakana: 0x30F0,
+  wikorean: 0x315F,
+  wmonospace: 0xFF57,
+  wohiragana: 0x3092,
+  wokatakana: 0x30F2,
+  wokatakanahalfwidth: 0xFF66,
+  won: 0x20A9,
+  wonmonospace: 0xFFE6,
+  wowaenthai: 0x0E27,
+  wparen: 0x24B2,
+  wring: 0x1E98,
+  wsuperior: 0x02B7,
+  wturned: 0x028D,
+  wynn: 0x01BF,
+  x: 0x0078,
+  xabovecmb: 0x033D,
+  xbopomofo: 0x3112,
+  xcircle: 0x24E7,
+  xdieresis: 0x1E8D,
+  xdotaccent: 0x1E8B,
+  xeharmenian: 0x056D,
+  xi: 0x03BE,
+  xmonospace: 0xFF58,
+  xparen: 0x24B3,
+  xsuperior: 0x02E3,
+  y: 0x0079,
+  yaadosquare: 0x334E,
+  yabengali: 0x09AF,
+  yacute: 0x00FD,
+  yadeva: 0x092F,
+  yaekorean: 0x3152,
+  yagujarati: 0x0AAF,
+  yagurmukhi: 0x0A2F,
+  yahiragana: 0x3084,
+  yakatakana: 0x30E4,
+  yakatakanahalfwidth: 0xFF94,
+  yakorean: 0x3151,
+  yamakkanthai: 0x0E4E,
+  yasmallhiragana: 0x3083,
+  yasmallkatakana: 0x30E3,
+  yasmallkatakanahalfwidth: 0xFF6C,
+  yatcyrillic: 0x0463,
+  ycircle: 0x24E8,
+  ycircumflex: 0x0177,
+  ydieresis: 0x00FF,
+  ydotaccent: 0x1E8F,
+  ydotbelow: 0x1EF5,
+  yeharabic: 0x064A,
+  yehbarreearabic: 0x06D2,
+  yehbarreefinalarabic: 0xFBAF,
+  yehfinalarabic: 0xFEF2,
+  yehhamzaabovearabic: 0x0626,
+  yehhamzaabovefinalarabic: 0xFE8A,
+  yehhamzaaboveinitialarabic: 0xFE8B,
+  yehhamzaabovemedialarabic: 0xFE8C,
+  yehinitialarabic: 0xFEF3,
+  yehmedialarabic: 0xFEF4,
+  yehmeeminitialarabic: 0xFCDD,
+  yehmeemisolatedarabic: 0xFC58,
+  yehnoonfinalarabic: 0xFC94,
+  yehthreedotsbelowarabic: 0x06D1,
+  yekorean: 0x3156,
+  yen: 0x00A5,
+  yenmonospace: 0xFFE5,
+  yeokorean: 0x3155,
+  yeorinhieuhkorean: 0x3186,
+  yerahbenyomohebrew: 0x05AA,
+  yerahbenyomolefthebrew: 0x05AA,
+  yericyrillic: 0x044B,
+  yerudieresiscyrillic: 0x04F9,
+  yesieungkorean: 0x3181,
+  yesieungpansioskorean: 0x3183,
+  yesieungsioskorean: 0x3182,
+  yetivhebrew: 0x059A,
+  ygrave: 0x1EF3,
+  yhook: 0x01B4,
+  yhookabove: 0x1EF7,
+  yiarmenian: 0x0575,
+  yicyrillic: 0x0457,
+  yikorean: 0x3162,
+  yinyang: 0x262F,
+  yiwnarmenian: 0x0582,
+  ymonospace: 0xFF59,
+  yod: 0x05D9,
+  yoddagesh: 0xFB39,
+  yoddageshhebrew: 0xFB39,
+  yodhebrew: 0x05D9,
+  yodyodhebrew: 0x05F2,
+  yodyodpatahhebrew: 0xFB1F,
+  yohiragana: 0x3088,
+  yoikorean: 0x3189,
+  yokatakana: 0x30E8,
+  yokatakanahalfwidth: 0xFF96,
+  yokorean: 0x315B,
+  yosmallhiragana: 0x3087,
+  yosmallkatakana: 0x30E7,
+  yosmallkatakanahalfwidth: 0xFF6E,
+  yotgreek: 0x03F3,
+  yoyaekorean: 0x3188,
+  yoyakorean: 0x3187,
+  yoyakthai: 0x0E22,
+  yoyingthai: 0x0E0D,
+  yparen: 0x24B4,
+  ypogegrammeni: 0x037A,
+  ypogegrammenigreekcmb: 0x0345,
+  yr: 0x01A6,
+  yring: 0x1E99,
+  ysuperior: 0x02B8,
+  ytilde: 0x1EF9,
+  yturned: 0x028E,
+  yuhiragana: 0x3086,
+  yuikorean: 0x318C,
+  yukatakana: 0x30E6,
+  yukatakanahalfwidth: 0xFF95,
+  yukorean: 0x3160,
+  yusbigcyrillic: 0x046B,
+  yusbigiotifiedcyrillic: 0x046D,
+  yuslittlecyrillic: 0x0467,
+  yuslittleiotifiedcyrillic: 0x0469,
+  yusmallhiragana: 0x3085,
+  yusmallkatakana: 0x30E5,
+  yusmallkatakanahalfwidth: 0xFF6D,
+  yuyekorean: 0x318B,
+  yuyeokorean: 0x318A,
+  yyabengali: 0x09DF,
+  yyadeva: 0x095F,
+  z: 0x007A,
+  zaarmenian: 0x0566,
+  zacute: 0x017A,
+  zadeva: 0x095B,
+  zagurmukhi: 0x0A5B,
+  zaharabic: 0x0638,
+  zahfinalarabic: 0xFEC6,
+  zahinitialarabic: 0xFEC7,
+  zahiragana: 0x3056,
+  zahmedialarabic: 0xFEC8,
+  zainarabic: 0x0632,
+  zainfinalarabic: 0xFEB0,
+  zakatakana: 0x30B6,
+  zaqefgadolhebrew: 0x0595,
+  zaqefqatanhebrew: 0x0594,
+  zarqahebrew: 0x0598,
+  zayin: 0x05D6,
+  zayindagesh: 0xFB36,
+  zayindageshhebrew: 0xFB36,
+  zayinhebrew: 0x05D6,
+  zbopomofo: 0x3117,
+  zcaron: 0x017E,
+  zcircle: 0x24E9,
+  zcircumflex: 0x1E91,
+  zcurl: 0x0291,
+  zdot: 0x017C,
+  zdotaccent: 0x017C,
+  zdotbelow: 0x1E93,
+  zecyrillic: 0x0437,
+  zedescendercyrillic: 0x0499,
+  zedieresiscyrillic: 0x04DF,
+  zehiragana: 0x305C,
+  zekatakana: 0x30BC,
+  zero: 0x0030,
+  zeroarabic: 0x0660,
+  zerobengali: 0x09E6,
+  zerodeva: 0x0966,
+  zerogujarati: 0x0AE6,
+  zerogurmukhi: 0x0A66,
+  zerohackarabic: 0x0660,
+  zeroinferior: 0x2080,
+  zeromonospace: 0xFF10,
+  zerooldstyle: 0xF730,
+  zeropersian: 0x06F0,
+  zerosuperior: 0x2070,
+  zerothai: 0x0E50,
+  zerowidthjoiner: 0xFEFF,
+  zerowidthnonjoiner: 0x200C,
+  zerowidthspace: 0x200B,
+  zeta: 0x03B6,
+  zhbopomofo: 0x3113,
+  zhearmenian: 0x056A,
+  zhebrevecyrillic: 0x04C2,
+  zhecyrillic: 0x0436,
+  zhedescendercyrillic: 0x0497,
+  zhedieresiscyrillic: 0x04DD,
+  zihiragana: 0x3058,
+  zikatakana: 0x30B8,
+  zinorhebrew: 0x05AE,
+  zlinebelow: 0x1E95,
+  zmonospace: 0xFF5A,
+  zohiragana: 0x305E,
+  zokatakana: 0x30BE,
+  zparen: 0x24B5,
+  zretroflexhook: 0x0290,
+  zstroke: 0x01B6,
+  zuhiragana: 0x305A,
+  zukatakana: 0x30BA,
+  '.notdef': 0x0000
+};
+
+var DingbatsGlyphsUnicode = {
+  space: 0x0020,
+  a1: 0x2701,
+  a2: 0x2702,
+  a202: 0x2703,
+  a3: 0x2704,
+  a4: 0x260E,
+  a5: 0x2706,
+  a119: 0x2707,
+  a118: 0x2708,
+  a117: 0x2709,
+  a11: 0x261B,
+  a12: 0x261E,
+  a13: 0x270C,
+  a14: 0x270D,
+  a15: 0x270E,
+  a16: 0x270F,
+  a105: 0x2710,
+  a17: 0x2711,
+  a18: 0x2712,
+  a19: 0x2713,
+  a20: 0x2714,
+  a21: 0x2715,
+  a22: 0x2716,
+  a23: 0x2717,
+  a24: 0x2718,
+  a25: 0x2719,
+  a26: 0x271A,
+  a27: 0x271B,
+  a28: 0x271C,
+  a6: 0x271D,
+  a7: 0x271E,
+  a8: 0x271F,
+  a9: 0x2720,
+  a10: 0x2721,
+  a29: 0x2722,
+  a30: 0x2723,
+  a31: 0x2724,
+  a32: 0x2725,
+  a33: 0x2726,
+  a34: 0x2727,
+  a35: 0x2605,
+  a36: 0x2729,
+  a37: 0x272A,
+  a38: 0x272B,
+  a39: 0x272C,
+  a40: 0x272D,
+  a41: 0x272E,
+  a42: 0x272F,
+  a43: 0x2730,
+  a44: 0x2731,
+  a45: 0x2732,
+  a46: 0x2733,
+  a47: 0x2734,
+  a48: 0x2735,
+  a49: 0x2736,
+  a50: 0x2737,
+  a51: 0x2738,
+  a52: 0x2739,
+  a53: 0x273A,
+  a54: 0x273B,
+  a55: 0x273C,
+  a56: 0x273D,
+  a57: 0x273E,
+  a58: 0x273F,
+  a59: 0x2740,
+  a60: 0x2741,
+  a61: 0x2742,
+  a62: 0x2743,
+  a63: 0x2744,
+  a64: 0x2745,
+  a65: 0x2746,
+  a66: 0x2747,
+  a67: 0x2748,
+  a68: 0x2749,
+  a69: 0x274A,
+  a70: 0x274B,
+  a71: 0x25CF,
+  a72: 0x274D,
+  a73: 0x25A0,
+  a74: 0x274F,
+  a203: 0x2750,
+  a75: 0x2751,
+  a204: 0x2752,
+  a76: 0x25B2,
+  a77: 0x25BC,
+  a78: 0x25C6,
+  a79: 0x2756,
+  a81: 0x25D7,
+  a82: 0x2758,
+  a83: 0x2759,
+  a84: 0x275A,
+  a97: 0x275B,
+  a98: 0x275C,
+  a99: 0x275D,
+  a100: 0x275E,
+  a101: 0x2761,
+  a102: 0x2762,
+  a103: 0x2763,
+  a104: 0x2764,
+  a106: 0x2765,
+  a107: 0x2766,
+  a108: 0x2767,
+  a112: 0x2663,
+  a111: 0x2666,
+  a110: 0x2665,
+  a109: 0x2660,
+  a120: 0x2460,
+  a121: 0x2461,
+  a122: 0x2462,
+  a123: 0x2463,
+  a124: 0x2464,
+  a125: 0x2465,
+  a126: 0x2466,
+  a127: 0x2467,
+  a128: 0x2468,
+  a129: 0x2469,
+  a130: 0x2776,
+  a131: 0x2777,
+  a132: 0x2778,
+  a133: 0x2779,
+  a134: 0x277A,
+  a135: 0x277B,
+  a136: 0x277C,
+  a137: 0x277D,
+  a138: 0x277E,
+  a139: 0x277F,
+  a140: 0x2780,
+  a141: 0x2781,
+  a142: 0x2782,
+  a143: 0x2783,
+  a144: 0x2784,
+  a145: 0x2785,
+  a146: 0x2786,
+  a147: 0x2787,
+  a148: 0x2788,
+  a149: 0x2789,
+  a150: 0x278A,
+  a151: 0x278B,
+  a152: 0x278C,
+  a153: 0x278D,
+  a154: 0x278E,
+  a155: 0x278F,
+  a156: 0x2790,
+  a157: 0x2791,
+  a158: 0x2792,
+  a159: 0x2793,
+  a160: 0x2794,
+  a161: 0x2192,
+  a163: 0x2194,
+  a164: 0x2195,
+  a196: 0x2798,
+  a165: 0x2799,
+  a192: 0x279A,
+  a166: 0x279B,
+  a167: 0x279C,
+  a168: 0x279D,
+  a169: 0x279E,
+  a170: 0x279F,
+  a171: 0x27A0,
+  a172: 0x27A1,
+  a173: 0x27A2,
+  a162: 0x27A3,
+  a174: 0x27A4,
+  a175: 0x27A5,
+  a176: 0x27A6,
+  a177: 0x27A7,
+  a178: 0x27A8,
+  a179: 0x27A9,
+  a193: 0x27AA,
+  a180: 0x27AB,
+  a199: 0x27AC,
+  a181: 0x27AD,
+  a200: 0x27AE,
+  a182: 0x27AF,
+  a201: 0x27B1,
+  a183: 0x27B2,
+  a184: 0x27B3,
+  a197: 0x27B4,
+  a185: 0x27B5,
+  a194: 0x27B6,
+  a198: 0x27B7,
+  a186: 0x27B8,
+  a195: 0x27B9,
+  a187: 0x27BA,
+  a188: 0x27BB,
+  a189: 0x27BC,
+  a190: 0x27BD,
+  a191: 0x27BE,
+  a89: 0x2768, // 0xF8D7
+  a90: 0x2769, // 0xF8D8
+  a93: 0x276A, // 0xF8D9
+  a94: 0x276B, // 0xF8DA
+  a91: 0x276C, // 0xF8DB
+  a92: 0x276D, // 0xF8DC
+  a205: 0x276E, // 0xF8DD
+  a85: 0x276F, // 0xF8DE
+  a206: 0x2770, // 0xF8DF
+  a86: 0x2771, // 0xF8E0
+  a87: 0x2772, // 0xF8E1
+  a88: 0x2773, // 0xF8E2
+  a95: 0x2774, // 0xF8E3
+  a96: 0x2775, // 0xF8E4
+  '.notdef': 0x0000
+};
+
+
+var PDFImage = (function PDFImageClosure() {
+  /**
+   * Decode the image in the main thread if it supported. Resovles the promise
+   * when the image data is ready.
+   */
+  function handleImageData(handler, xref, res, image) {
+    if (image instanceof JpegStream && image.isNativelyDecodable(xref, res)) {
+      // For natively supported jpegs send them to the main thread for decoding.
+      var dict = image.dict;
+      var colorSpace = dict.get('ColorSpace', 'CS');
+      colorSpace = ColorSpace.parse(colorSpace, xref, res);
+      var numComps = colorSpace.numComps;
+      var decodePromise = handler.sendWithPromise('JpegDecode',
+                                                  [image.getIR(), numComps]);
+      return decodePromise.then(function (message) {
+        var data = message.data;
+        return new Stream(data, 0, data.length, image.dict);
+      });
+    } else {
+      return Promise.resolve(image);
+    }
+  }
+
+  /**
+   * Decode and clamp a value. The formula is different from the spec because we
+   * don't decode to float range [0,1], we decode it in the [0,max] range.
+   */
+  function decodeAndClamp(value, addend, coefficient, max) {
+    value = addend + value * coefficient;
+    // Clamp the value to the range
+    return (value < 0 ? 0 : (value > max ? max : value));
+  }
+
+  function PDFImage(xref, res, image, inline, smask, mask, isMask) {
+    this.image = image;
+    var dict = image.dict;
+    if (dict.has('Filter')) {
+      var filter = dict.get('Filter').name;
+      if (filter === 'JPXDecode') {
+        var jpxImage = new JpxImage();
+        jpxImage.parseImageProperties(image.stream);
+        image.stream.reset();
+        image.bitsPerComponent = jpxImage.bitsPerComponent;
+        image.numComps = jpxImage.componentsCount;
+      } else if (filter === 'JBIG2Decode') {
+        image.bitsPerComponent = 1;
+        image.numComps = 1;
+      }
+    }
+    // TODO cache rendered images?
+
+    this.width = dict.get('Width', 'W');
+    this.height = dict.get('Height', 'H');
+
+    if (this.width < 1 || this.height < 1) {
+      error('Invalid image width: ' + this.width + ' or height: ' +
+            this.height);
+    }
+
+    this.interpolate = dict.get('Interpolate', 'I') || false;
+    this.imageMask = dict.get('ImageMask', 'IM') || false;
+    this.matte = dict.get('Matte') || false;
+
+    var bitsPerComponent = image.bitsPerComponent;
+    if (!bitsPerComponent) {
+      bitsPerComponent = dict.get('BitsPerComponent', 'BPC');
+      if (!bitsPerComponent) {
+        if (this.imageMask) {
+          bitsPerComponent = 1;
+        } else {
+          error('Bits per component missing in image: ' + this.imageMask);
+        }
+      }
+    }
+    this.bpc = bitsPerComponent;
+
+    if (!this.imageMask) {
+      var colorSpace = dict.get('ColorSpace', 'CS');
+      if (!colorSpace) {
+        info('JPX images (which do not require color spaces)');
+        switch (image.numComps) {
+          case 1:
+            colorSpace = Name.get('DeviceGray');
+            break;
+          case 3:
+            colorSpace = Name.get('DeviceRGB');
+            break;
+          case 4:
+            colorSpace = Name.get('DeviceCMYK');
+            break;
+          default:
+            error('JPX images with ' + this.numComps +
+                  ' color components not supported.');
+        }
+      }
+      this.colorSpace = ColorSpace.parse(colorSpace, xref, res);
+      this.numComps = this.colorSpace.numComps;
+    }
+
+    this.decode = dict.get('Decode', 'D');
+    this.needsDecode = false;
+    if (this.decode &&
+        ((this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode)) ||
+         (isMask && !ColorSpace.isDefaultDecode(this.decode, 1)))) {
+      this.needsDecode = true;
+      // Do some preprocessing to avoid more math.
+      var max = (1 << bitsPerComponent) - 1;
+      this.decodeCoefficients = [];
+      this.decodeAddends = [];
+      for (var i = 0, j = 0; i < this.decode.length; i += 2, ++j) {
+        var dmin = this.decode[i];
+        var dmax = this.decode[i + 1];
+        this.decodeCoefficients[j] = dmax - dmin;
+        this.decodeAddends[j] = max * dmin;
+      }
+    }
+
+    if (smask) {
+      this.smask = new PDFImage(xref, res, smask, false);
+    } else if (mask) {
+      if (isStream(mask)) {
+        this.mask = new PDFImage(xref, res, mask, false, null, null, true);
+      } else {
+        // Color key mask (just an array).
+        this.mask = mask;
+      }
+    }
+  }
+  /**
+   * Handles processing of image data and returns the Promise that is resolved
+   * with a PDFImage when the image is ready to be used.
+   */
+  PDFImage.buildImage = function PDFImage_buildImage(handler, xref,
+                                                     res, image, inline) {
+    var imagePromise = handleImageData(handler, xref, res, image);
+    var smaskPromise;
+    var maskPromise;
+
+    var smask = image.dict.get('SMask');
+    var mask = image.dict.get('Mask');
+
+    if (smask) {
+      smaskPromise = handleImageData(handler, xref, res, smask);
+      maskPromise = Promise.resolve(null);
+    } else {
+      smaskPromise = Promise.resolve(null);
+      if (mask) {
+        if (isStream(mask)) {
+          maskPromise = handleImageData(handler, xref, res, mask);
+        } else if (isArray(mask)) {
+          maskPromise = Promise.resolve(mask);
+        } else {
+          warn('Unsupported mask format.');
+          maskPromise = Promise.resolve(null);
+        }
+      } else {
+        maskPromise = Promise.resolve(null);
+      }
+    }
+    return Promise.all([imagePromise, smaskPromise, maskPromise]).then(
+      function(results) {
+        var imageData = results[0];
+        var smaskData = results[1];
+        var maskData = results[2];
+        return new PDFImage(xref, res, imageData, inline, smaskData, maskData);
+      });
+  };
+
+  /**
+   * Resize an image using the nearest neighbor algorithm. Currently only
+   * supports one and three component images.
+   * @param {TypedArray} pixels The original image with one component.
+   * @param {Number} bpc Number of bits per component.
+   * @param {Number} components Number of color components, 1 or 3 is supported.
+   * @param {Number} w1 Original width.
+   * @param {Number} h1 Original height.
+   * @param {Number} w2 New width.
+   * @param {Number} h2 New height.
+   * @param {TypedArray} dest (Optional) The destination buffer.
+   * @param {Number} alpha01 (Optional) Size reserved for the alpha channel.
+   * @return {TypedArray} Resized image data.
+   */
+  PDFImage.resize = function PDFImage_resize(pixels, bpc, components,
+                                             w1, h1, w2, h2, dest, alpha01) {
+
+    if (components !== 1 && components !== 3) {
+      error('Unsupported component count for resizing.');
+    }
+
+    var length = w2 * h2 * components;
+    var temp = dest ? dest : (bpc <= 8 ? new Uint8Array(length) :
+        (bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length)));
+    var xRatio = w1 / w2;
+    var yRatio = h1 / h2;
+    var i, j, py, newIndex = 0, oldIndex;
+    var xScaled = new Uint16Array(w2);
+    var w1Scanline = w1 * components;
+    if (alpha01 !== 1) {
+      alpha01 = 0;
+    }
+
+    for (j = 0; j < w2; j++) {
+      xScaled[j] = Math.floor(j * xRatio) * components;
+    }
+
+    if (components === 1) {
+      for (i = 0; i < h2; i++) {
+        py = Math.floor(i * yRatio) * w1Scanline;
+        for (j = 0; j < w2; j++) {
+          oldIndex = py + xScaled[j];
+          temp[newIndex++] = pixels[oldIndex];
+        }
+      }
+    } else if (components === 3) {
+      for (i = 0; i < h2; i++) {
+        py = Math.floor(i * yRatio) * w1Scanline;
+        for (j = 0; j < w2; j++) {
+          oldIndex = py + xScaled[j];
+          temp[newIndex++] = pixels[oldIndex++];
+          temp[newIndex++] = pixels[oldIndex++];
+          temp[newIndex++] = pixels[oldIndex++];
+          newIndex += alpha01;
+        }
+      }
+    }
+    return temp;
+  };
+
+  PDFImage.createMask =
+      function PDFImage_createMask(imgArray, width, height,
+                                   imageIsFromDecodeStream, inverseDecode) {
+
+    // |imgArray| might not contain full data for every pixel of the mask, so
+    // we need to distinguish between |computedLength| and |actualLength|.
+    // In particular, if inverseDecode is true, then the array we return must
+    // have a length of |computedLength|.
+
+    var computedLength = ((width + 7) >> 3) * height;
+    var actualLength = imgArray.byteLength;
+    var haveFullData = computedLength === actualLength;
+    var data, i;
+
+    if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) {
+      // imgArray came from a DecodeStream and its data is in an appropriate
+      // form, so we can just transfer it.
+      data = imgArray;
+    } else if (!inverseDecode) {
+      data = new Uint8Array(actualLength);
+      data.set(imgArray);
+    } else {
+      data = new Uint8Array(computedLength);
+      data.set(imgArray);
+      for (i = actualLength; i < computedLength; i++) {
+        data[i] = 0xff;
+      }
+    }
+
+    // If necessary, invert the original mask data (but not any extra we might
+    // have added above). It's safe to modify the array -- whether it's the
+    // original or a copy, we're about to transfer it anyway, so nothing else
+    // in this thread can be relying on its contents.
+    if (inverseDecode) {
+      for (i = 0; i < actualLength; i++) {
+        data[i] = ~data[i];
+      }
+    }
+
+    return {data: data, width: width, height: height};
+  };
+
+  PDFImage.prototype = {
+    get drawWidth() {
+      return Math.max(this.width,
+                      this.smask && this.smask.width || 0,
+                      this.mask && this.mask.width || 0);
+    },
+
+    get drawHeight() {
+      return Math.max(this.height,
+                      this.smask && this.smask.height || 0,
+                      this.mask && this.mask.height || 0);
+    },
+
+    decodeBuffer: function PDFImage_decodeBuffer(buffer) {
+      var bpc = this.bpc;
+      var numComps = this.numComps;
+
+      var decodeAddends = this.decodeAddends;
+      var decodeCoefficients = this.decodeCoefficients;
+      var max = (1 << bpc) - 1;
+      var i, ii;
+
+      if (bpc === 1) {
+        // If the buffer needed decode that means it just needs to be inverted.
+        for (i = 0, ii = buffer.length; i < ii; i++) {
+          buffer[i] = +!(buffer[i]);
+        }
+        return;
+      }
+      var index = 0;
+      for (i = 0, ii = this.width * this.height; i < ii; i++) {
+        for (var j = 0; j < numComps; j++) {
+          buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j],
+                                         decodeCoefficients[j], max);
+          index++;
+        }
+      }
+    },
+
+    getComponents: function PDFImage_getComponents(buffer) {
+      var bpc = this.bpc;
+
+      // This image doesn't require any extra work.
+      if (bpc === 8) {
+        return buffer;
+      }
+
+      var width = this.width;
+      var height = this.height;
+      var numComps = this.numComps;
+
+      var length = width * height * numComps;
+      var bufferPos = 0;
+      var output = (bpc <= 8 ? new Uint8Array(length) :
+        (bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length)));
+      var rowComps = width * numComps;
+
+      var max = (1 << bpc) - 1;
+      var i = 0, ii, buf;
+
+      if (bpc === 1) {
+        // Optimization for reading 1 bpc images.
+        var mask, loop1End, loop2End;
+        for (var j = 0; j < height; j++) {
+          loop1End = i + (rowComps & ~7);
+          loop2End = i + rowComps;
+
+          // unroll loop for all full bytes
+          while (i < loop1End) {
+            buf = buffer[bufferPos++];
+            output[i] = (buf >> 7) & 1;
+            output[i + 1] = (buf >> 6) & 1;
+            output[i + 2] = (buf >> 5) & 1;
+            output[i + 3] = (buf >> 4) & 1;
+            output[i + 4] = (buf >> 3) & 1;
+            output[i + 5] = (buf >> 2) & 1;
+            output[i + 6] = (buf >> 1) & 1;
+            output[i + 7] = buf & 1;
+            i += 8;
+          }
+
+          // handle remaing bits
+          if (i < loop2End) {
+            buf = buffer[bufferPos++];
+            mask = 128;
+            while (i < loop2End) {
+              output[i++] = +!!(buf & mask);
+              mask >>= 1;
+            }
+          }
+        }
+      } else {
+        // The general case that handles all other bpc values.
+        var bits = 0;
+        buf = 0;
+        for (i = 0, ii = length; i < ii; ++i) {
+          if (i % rowComps === 0) {
+            buf = 0;
+            bits = 0;
+          }
+
+          while (bits < bpc) {
+            buf = (buf << 8) | buffer[bufferPos++];
+            bits += 8;
+          }
+
+          var remainingBits = bits - bpc;
+          var value = buf >> remainingBits;
+          output[i] = (value < 0 ? 0 : (value > max ? max : value));
+          buf = buf & ((1 << remainingBits) - 1);
+          bits = remainingBits;
+        }
+      }
+      return output;
+    },
+
+    fillOpacity: function PDFImage_fillOpacity(rgbaBuf, width, height,
+                                               actualHeight, image) {
+      var smask = this.smask;
+      var mask = this.mask;
+      var alphaBuf, sw, sh, i, ii, j;
+
+      if (smask) {
+        sw = smask.width;
+        sh = smask.height;
+        alphaBuf = new Uint8Array(sw * sh);
+        smask.fillGrayBuffer(alphaBuf);
+        if (sw !== width || sh !== height) {
+          alphaBuf = PDFImage.resize(alphaBuf, smask.bpc, 1, sw, sh, width,
+                                     height);
+        }
+      } else if (mask) {
+        if (mask instanceof PDFImage) {
+          sw = mask.width;
+          sh = mask.height;
+          alphaBuf = new Uint8Array(sw * sh);
+          mask.numComps = 1;
+          mask.fillGrayBuffer(alphaBuf);
+
+          // Need to invert values in rgbaBuf
+          for (i = 0, ii = sw * sh; i < ii; ++i) {
+            alphaBuf[i] = 255 - alphaBuf[i];
+          }
+
+          if (sw !== width || sh !== height) {
+            alphaBuf = PDFImage.resize(alphaBuf, mask.bpc, 1, sw, sh, width,
+                                       height);
+          }
+        } else if (isArray(mask)) {
+          // Color key mask: if any of the compontents are outside the range
+          // then they should be painted.
+          alphaBuf = new Uint8Array(width * height);
+          var numComps = this.numComps;
+          for (i = 0, ii = width * height; i < ii; ++i) {
+            var opacity = 0;
+            var imageOffset = i * numComps;
+            for (j = 0; j < numComps; ++j) {
+              var color = image[imageOffset + j];
+              var maskOffset = j * 2;
+              if (color < mask[maskOffset] || color > mask[maskOffset + 1]) {
+                opacity = 255;
+                break;
+              }
+            }
+            alphaBuf[i] = opacity;
+          }
+        } else {
+          error('Unknown mask format.');
+        }
+      }
+
+      if (alphaBuf) {
+        for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {
+          rgbaBuf[j] = alphaBuf[i];
+        }
+      } else {
+        // No mask.
+        for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) {
+          rgbaBuf[j] = 255;
+        }
+      }
+    },
+
+    undoPreblend: function PDFImage_undoPreblend(buffer, width, height) {
+      var matte = this.smask && this.smask.matte;
+      if (!matte) {
+        return;
+      }
+      var matteRgb = this.colorSpace.getRgb(matte, 0);
+      var matteR = matteRgb[0];
+      var matteG = matteRgb[1];
+      var matteB = matteRgb[2];
+      var length = width * height * 4;
+      var r, g, b;
+      for (var i = 0; i < length; i += 4) {
+        var alpha = buffer[i + 3];
+        if (alpha === 0) {
+          // according formula we have to get Infinity in all components
+          // making it white (typical paper color) should be okay
+          buffer[i] = 255;
+          buffer[i + 1] = 255;
+          buffer[i + 2] = 255;
+          continue;
+        }
+        var k = 255 / alpha;
+        r = (buffer[i] - matteR) * k + matteR;
+        g = (buffer[i + 1] - matteG) * k + matteG;
+        b = (buffer[i + 2] - matteB) * k + matteB;
+        buffer[i] = r <= 0 ? 0 : r >= 255 ? 255 : r | 0;
+        buffer[i + 1] = g <= 0 ? 0 : g >= 255 ? 255 : g | 0;
+        buffer[i + 2] = b <= 0 ? 0 : b >= 255 ? 255 : b | 0;
+      }
+    },
+
+    createImageData: function PDFImage_createImageData(forceRGBA) {
+      var drawWidth = this.drawWidth;
+      var drawHeight = this.drawHeight;
+      var imgData = { // other fields are filled in below
+        width: drawWidth,
+        height: drawHeight
+      };
+
+      var numComps = this.numComps;
+      var originalWidth = this.width;
+      var originalHeight = this.height;
+      var bpc = this.bpc;
+
+      // Rows start at byte boundary.
+      var rowBytes = (originalWidth * numComps * bpc + 7) >> 3;
+      var imgArray;
+
+      if (!forceRGBA) {
+        // If it is a 1-bit-per-pixel grayscale (i.e. black-and-white) image
+        // without any complications, we pass a same-sized copy to the main
+        // thread rather than expanding by 32x to RGBA form. This saves *lots*
+        // of memory for many scanned documents. It's also much faster.
+        //
+        // Similarly, if it is a 24-bit-per pixel RGB image without any
+        // complications, we avoid expanding by 1.333x to RGBA form.
+        var kind;
+        if (this.colorSpace.name === 'DeviceGray' && bpc === 1) {
+          kind = ImageKind.GRAYSCALE_1BPP;
+        } else if (this.colorSpace.name === 'DeviceRGB' && bpc === 8 &&
+                   !this.needsDecode) {
+          kind = ImageKind.RGB_24BPP;
+        }
+        if (kind && !this.smask && !this.mask &&
+            drawWidth === originalWidth && drawHeight === originalHeight) {
+          imgData.kind = kind;
+
+          imgArray = this.getImageBytes(originalHeight * rowBytes);
+          // If imgArray came from a DecodeStream, we're safe to transfer it
+          // (and thus neuter it) because it will constitute the entire
+          // DecodeStream's data.  But if it came from a Stream, we need to
+          // copy it because it'll only be a portion of the Stream's data, and
+          // the rest will be read later on.
+          if (this.image instanceof DecodeStream) {
+            imgData.data = imgArray;
+          } else {
+            var newArray = new Uint8Array(imgArray.length);
+            newArray.set(imgArray);
+            imgData.data = newArray;
+          }
+          if (this.needsDecode) {
+            // Invert the buffer (which must be grayscale if we reached here).
+            assert(kind === ImageKind.GRAYSCALE_1BPP);
+            var buffer = imgData.data;
+            for (var i = 0, ii = buffer.length; i < ii; i++) {
+              buffer[i] ^= 0xff;
+            }
+          }
+          return imgData;
+        }
+        if (this.image instanceof JpegStream && !this.smask && !this.mask) {
+          imgData.kind = ImageKind.RGB_24BPP;
+          imgData.data = this.getImageBytes(originalHeight * rowBytes,
+                                            drawWidth, drawHeight, true);
+          return imgData;
+        }
+      }
+
+      imgArray = this.getImageBytes(originalHeight * rowBytes);
+      // imgArray can be incomplete (e.g. after CCITT fax encoding).
+      var actualHeight = 0 | (imgArray.length / rowBytes *
+                         drawHeight / originalHeight);
+
+      var comps = this.getComponents(imgArray);
+
+      // If opacity data is present, use RGBA_32BPP form. Otherwise, use the
+      // more compact RGB_24BPP form if allowable.
+      var alpha01, maybeUndoPreblend;
+      if (!forceRGBA && !this.smask && !this.mask) {
+        imgData.kind = ImageKind.RGB_24BPP;
+        imgData.data = new Uint8Array(drawWidth * drawHeight * 3);
+        alpha01 = 0;
+        maybeUndoPreblend = false;
+      } else {
+        imgData.kind = ImageKind.RGBA_32BPP;
+        imgData.data = new Uint8Array(drawWidth * drawHeight * 4);
+        alpha01 = 1;
+        maybeUndoPreblend = true;
+
+        // Color key masking (opacity) must be performed before decoding.
+        this.fillOpacity(imgData.data, drawWidth, drawHeight, actualHeight,
+                         comps);
+      }
+
+      if (this.needsDecode) {
+        this.decodeBuffer(comps);
+      }
+      this.colorSpace.fillRgb(imgData.data, originalWidth, originalHeight,
+                              drawWidth, drawHeight, actualHeight, bpc, comps,
+                              alpha01);
+      if (maybeUndoPreblend) {
+        this.undoPreblend(imgData.data, drawWidth, actualHeight);
+      }
+
+      return imgData;
+    },
+
+    fillGrayBuffer: function PDFImage_fillGrayBuffer(buffer) {
+      var numComps = this.numComps;
+      if (numComps !== 1) {
+        error('Reading gray scale from a color image: ' + numComps);
+      }
+
+      var width = this.width;
+      var height = this.height;
+      var bpc = this.bpc;
+
+      // rows start at byte boundary
+      var rowBytes = (width * numComps * bpc + 7) >> 3;
+      var imgArray = this.getImageBytes(height * rowBytes);
+
+      var comps = this.getComponents(imgArray);
+      var i, length;
+
+      if (bpc === 1) {
+        // inline decoding (= inversion) for 1 bpc images
+        length = width * height;
+        if (this.needsDecode) {
+          // invert and scale to {0, 255}
+          for (i = 0; i < length; ++i) {
+            buffer[i] = (comps[i] - 1) & 255;
+          }
+        } else {
+          // scale to {0, 255}
+          for (i = 0; i < length; ++i) {
+            buffer[i] = (-comps[i]) & 255;
+          }
+        }
+        return;
+      }
+
+      if (this.needsDecode) {
+        this.decodeBuffer(comps);
+      }
+      length = width * height;
+      // we aren't using a colorspace so we need to scale the value
+      var scale = 255 / ((1 << bpc) - 1);
+      for (i = 0; i < length; ++i) {
+        buffer[i] = (scale * comps[i]) | 0;
+      }
+    },
+
+    getImageBytes: function PDFImage_getImageBytes(length,
+                                                   drawWidth, drawHeight,
+                                                   forceRGB) {
+      this.image.reset();
+      this.image.drawWidth = drawWidth || this.width;
+      this.image.drawHeight = drawHeight || this.height;
+      this.image.forceRGB = !!forceRGB;
+      return this.image.getBytes(length);
+    }
+  };
+  return PDFImage;
+})();
+
+
+// The Metrics object contains glyph widths (in glyph space units).
+// As per PDF spec, for most fonts (Type 3 being an exception) a glyph
+// space unit corresponds to 1/1000th of text space unit.
+var Metrics = {
+  'Courier': 600,
+  'Courier-Bold': 600,
+  'Courier-BoldOblique': 600,
+  'Courier-Oblique': 600,
+  'Helvetica' : {
+    'space': 278,
+    'exclam': 278,
+    'quotedbl': 355,
+    'numbersign': 556,
+    'dollar': 556,
+    'percent': 889,
+    'ampersand': 667,
+    'quoteright': 222,
+    'parenleft': 333,
+    'parenright': 333,
+    'asterisk': 389,
+    'plus': 584,
+    'comma': 278,
+    'hyphen': 333,
+    'period': 278,
+    'slash': 278,
+    'zero': 556,
+    'one': 556,
+    'two': 556,
+    'three': 556,
+    'four': 556,
+    'five': 556,
+    'six': 556,
+    'seven': 556,
+    'eight': 556,
+    'nine': 556,
+    'colon': 278,
+    'semicolon': 278,
+    'less': 584,
+    'equal': 584,
+    'greater': 584,
+    'question': 556,
+    'at': 1015,
+    'A': 667,
+    'B': 667,
+    'C': 722,
+    'D': 722,
+    'E': 667,
+    'F': 611,
+    'G': 778,
+    'H': 722,
+    'I': 278,
+    'J': 500,
+    'K': 667,
+    'L': 556,
+    'M': 833,
+    'N': 722,
+    'O': 778,
+    'P': 667,
+    'Q': 778,
+    'R': 722,
+    'S': 667,
+    'T': 611,
+    'U': 722,
+    'V': 667,
+    'W': 944,
+    'X': 667,
+    'Y': 667,
+    'Z': 611,
+    'bracketleft': 278,
+    'backslash': 278,
+    'bracketright': 278,
+    'asciicircum': 469,
+    'underscore': 556,
+    'quoteleft': 222,
+    'a': 556,
+    'b': 556,
+    'c': 500,
+    'd': 556,
+    'e': 556,
+    'f': 278,
+    'g': 556,
+    'h': 556,
+    'i': 222,
+    'j': 222,
+    'k': 500,
+    'l': 222,
+    'm': 833,
+    'n': 556,
+    'o': 556,
+    'p': 556,
+    'q': 556,
+    'r': 333,
+    's': 500,
+    't': 278,
+    'u': 556,
+    'v': 500,
+    'w': 722,
+    'x': 500,
+    'y': 500,
+    'z': 500,
+    'braceleft': 334,
+    'bar': 260,
+    'braceright': 334,
+    'asciitilde': 584,
+    'exclamdown': 333,
+    'cent': 556,
+    'sterling': 556,
+    'fraction': 167,
+    'yen': 556,
+    'florin': 556,
+    'section': 556,
+    'currency': 556,
+    'quotesingle': 191,
+    'quotedblleft': 333,
+    'guillemotleft': 556,
+    'guilsinglleft': 333,
+    'guilsinglright': 333,
+    'fi': 500,
+    'fl': 500,
+    'endash': 556,
+    'dagger': 556,
+    'daggerdbl': 556,
+    'periodcentered': 278,
+    'paragraph': 537,
+    'bullet': 350,
+    'quotesinglbase': 222,
+    'quotedblbase': 333,
+    'quotedblright': 333,
+    'guillemotright': 556,
+    'ellipsis': 1000,
+    'perthousand': 1000,
+    'questiondown': 611,
+    'grave': 333,
+    'acute': 333,
+    'circumflex': 333,
+    'tilde': 333,
+    'macron': 333,
+    'breve': 333,
+    'dotaccent': 333,
+    'dieresis': 333,
+    'ring': 333,
+    'cedilla': 333,
+    'hungarumlaut': 333,
+    'ogonek': 333,
+    'caron': 333,
+    'emdash': 1000,
+    'AE': 1000,
+    'ordfeminine': 370,
+    'Lslash': 556,
+    'Oslash': 778,
+    'OE': 1000,
+    'ordmasculine': 365,
+    'ae': 889,
+    'dotlessi': 278,
+    'lslash': 222,
+    'oslash': 611,
+    'oe': 944,
+    'germandbls': 611,
+    'Idieresis': 278,
+    'eacute': 556,
+    'abreve': 556,
+    'uhungarumlaut': 556,
+    'ecaron': 556,
+    'Ydieresis': 667,
+    'divide': 584,
+    'Yacute': 667,
+    'Acircumflex': 667,
+    'aacute': 556,
+    'Ucircumflex': 722,
+    'yacute': 500,
+    'scommaaccent': 500,
+    'ecircumflex': 556,
+    'Uring': 722,
+    'Udieresis': 722,
+    'aogonek': 556,
+    'Uacute': 722,
+    'uogonek': 556,
+    'Edieresis': 667,
+    'Dcroat': 722,
+    'commaaccent': 250,
+    'copyright': 737,
+    'Emacron': 667,
+    'ccaron': 500,
+    'aring': 556,
+    'Ncommaaccent': 722,
+    'lacute': 222,
+    'agrave': 556,
+    'Tcommaaccent': 611,
+    'Cacute': 722,
+    'atilde': 556,
+    'Edotaccent': 667,
+    'scaron': 500,
+    'scedilla': 500,
+    'iacute': 278,
+    'lozenge': 471,
+    'Rcaron': 722,
+    'Gcommaaccent': 778,
+    'ucircumflex': 556,
+    'acircumflex': 556,
+    'Amacron': 667,
+    'rcaron': 333,
+    'ccedilla': 500,
+    'Zdotaccent': 611,
+    'Thorn': 667,
+    'Omacron': 778,
+    'Racute': 722,
+    'Sacute': 667,
+    'dcaron': 643,
+    'Umacron': 722,
+    'uring': 556,
+    'threesuperior': 333,
+    'Ograve': 778,
+    'Agrave': 667,
+    'Abreve': 667,
+    'multiply': 584,
+    'uacute': 556,
+    'Tcaron': 611,
+    'partialdiff': 476,
+    'ydieresis': 500,
+    'Nacute': 722,
+    'icircumflex': 278,
+    'Ecircumflex': 667,
+    'adieresis': 556,
+    'edieresis': 556,
+    'cacute': 500,
+    'nacute': 556,
+    'umacron': 556,
+    'Ncaron': 722,
+    'Iacute': 278,
+    'plusminus': 584,
+    'brokenbar': 260,
+    'registered': 737,
+    'Gbreve': 778,
+    'Idotaccent': 278,
+    'summation': 600,
+    'Egrave': 667,
+    'racute': 333,
+    'omacron': 556,
+    'Zacute': 611,
+    'Zcaron': 611,
+    'greaterequal': 549,
+    'Eth': 722,
+    'Ccedilla': 722,
+    'lcommaaccent': 222,
+    'tcaron': 317,
+    'eogonek': 556,
+    'Uogonek': 722,
+    'Aacute': 667,
+    'Adieresis': 667,
+    'egrave': 556,
+    'zacute': 500,
+    'iogonek': 222,
+    'Oacute': 778,
+    'oacute': 556,
+    'amacron': 556,
+    'sacute': 500,
+    'idieresis': 278,
+    'Ocircumflex': 778,
+    'Ugrave': 722,
+    'Delta': 612,
+    'thorn': 556,
+    'twosuperior': 333,
+    'Odieresis': 778,
+    'mu': 556,
+    'igrave': 278,
+    'ohungarumlaut': 556,
+    'Eogonek': 667,
+    'dcroat': 556,
+    'threequarters': 834,
+    'Scedilla': 667,
+    'lcaron': 299,
+    'Kcommaaccent': 667,
+    'Lacute': 556,
+    'trademark': 1000,
+    'edotaccent': 556,
+    'Igrave': 278,
+    'Imacron': 278,
+    'Lcaron': 556,
+    'onehalf': 834,
+    'lessequal': 549,
+    'ocircumflex': 556,
+    'ntilde': 556,
+    'Uhungarumlaut': 722,
+    'Eacute': 667,
+    'emacron': 556,
+    'gbreve': 556,
+    'onequarter': 834,
+    'Scaron': 667,
+    'Scommaaccent': 667,
+    'Ohungarumlaut': 778,
+    'degree': 400,
+    'ograve': 556,
+    'Ccaron': 722,
+    'ugrave': 556,
+    'radical': 453,
+    'Dcaron': 722,
+    'rcommaaccent': 333,
+    'Ntilde': 722,
+    'otilde': 556,
+    'Rcommaaccent': 722,
+    'Lcommaaccent': 556,
+    'Atilde': 667,
+    'Aogonek': 667,
+    'Aring': 667,
+    'Otilde': 778,
+    'zdotaccent': 500,
+    'Ecaron': 667,
+    'Iogonek': 278,
+    'kcommaaccent': 500,
+    'minus': 584,
+    'Icircumflex': 278,
+    'ncaron': 556,
+    'tcommaaccent': 278,
+    'logicalnot': 584,
+    'odieresis': 556,
+    'udieresis': 556,
+    'notequal': 549,
+    'gcommaaccent': 556,
+    'eth': 556,
+    'zcaron': 500,
+    'ncommaaccent': 556,
+    'onesuperior': 333,
+    'imacron': 278,
+    'Euro': 556
+  },
+  'Helvetica-Bold': {
+    'space': 278,
+    'exclam': 333,
+    'quotedbl': 474,
+    'numbersign': 556,
+    'dollar': 556,
+    'percent': 889,
+    'ampersand': 722,
+    'quoteright': 278,
+    'parenleft': 333,
+    'parenright': 333,
+    'asterisk': 389,
+    'plus': 584,
+    'comma': 278,
+    'hyphen': 333,
+    'period': 278,
+    'slash': 278,
+    'zero': 556,
+    'one': 556,
+    'two': 556,
+    'three': 556,
+    'four': 556,
+    'five': 556,
+    'six': 556,
+    'seven': 556,
+    'eight': 556,
+    'nine': 556,
+    'colon': 333,
+    'semicolon': 333,
+    'less': 584,
+    'equal': 584,
+    'greater': 584,
+    'question': 611,
+    'at': 975,
+    'A': 722,
+    'B': 722,
+    'C': 722,
+    'D': 722,
+    'E': 667,
+    'F': 611,
+    'G': 778,
+    'H': 722,
+    'I': 278,
+    'J': 556,
+    'K': 722,
+    'L': 611,
+    'M': 833,
+    'N': 722,
+    'O': 778,
+    'P': 667,
+    'Q': 778,
+    'R': 722,
+    'S': 667,
+    'T': 611,
+    'U': 722,
+    'V': 667,
+    'W': 944,
+    'X': 667,
+    'Y': 667,
+    'Z': 611,
+    'bracketleft': 333,
+    'backslash': 278,
+    'bracketright': 333,
+    'asciicircum': 584,
+    'underscore': 556,
+    'quoteleft': 278,
+    'a': 556,
+    'b': 611,
+    'c': 556,
+    'd': 611,
+    'e': 556,
+    'f': 333,
+    'g': 611,
+    'h': 611,
+    'i': 278,
+    'j': 278,
+    'k': 556,
+    'l': 278,
+    'm': 889,
+    'n': 611,
+    'o': 611,
+    'p': 611,
+    'q': 611,
+    'r': 389,
+    's': 556,
+    't': 333,
+    'u': 611,
+    'v': 556,
+    'w': 778,
+    'x': 556,
+    'y': 556,
+    'z': 500,
+    'braceleft': 389,
+    'bar': 280,
+    'braceright': 389,
+    'asciitilde': 584,
+    'exclamdown': 333,
+    'cent': 556,
+    'sterling': 556,
+    'fraction': 167,
+    'yen': 556,
+    'florin': 556,
+    'section': 556,
+    'currency': 556,
+    'quotesingle': 238,
+    'quotedblleft': 500,
+    'guillemotleft': 556,
+    'guilsinglleft': 333,
+    'guilsinglright': 333,
+    'fi': 611,
+    'fl': 611,
+    'endash': 556,
+    'dagger': 556,
+    'daggerdbl': 556,
+    'periodcentered': 278,
+    'paragraph': 556,
+    'bullet': 350,
+    'quotesinglbase': 278,
+    'quotedblbase': 500,
+    'quotedblright': 500,
+    'guillemotright': 556,
+    'ellipsis': 1000,
+    'perthousand': 1000,
+    'questiondown': 611,
+    'grave': 333,
+    'acute': 333,
+    'circumflex': 333,
+    'tilde': 333,
+    'macron': 333,
+    'breve': 333,
+    'dotaccent': 333,
+    'dieresis': 333,
+    'ring': 333,
+    'cedilla': 333,
+    'hungarumlaut': 333,
+    'ogonek': 333,
+    'caron': 333,
+    'emdash': 1000,
+    'AE': 1000,
+    'ordfeminine': 370,
+    'Lslash': 611,
+    'Oslash': 778,
+    'OE': 1000,
+    'ordmasculine': 365,
+    'ae': 889,
+    'dotlessi': 278,
+    'lslash': 278,
+    'oslash': 611,
+    'oe': 944,
+    'germandbls': 611,
+    'Idieresis': 278,
+    'eacute': 556,
+    'abreve': 556,
+    'uhungarumlaut': 611,
+    'ecaron': 556,
+    'Ydieresis': 667,
+    'divide': 584,
+    'Yacute': 667,
+    'Acircumflex': 722,
+    'aacute': 556,
+    'Ucircumflex': 722,
+    'yacute': 556,
+    'scommaaccent': 556,
+    'ecircumflex': 556,
+    'Uring': 722,
+    'Udieresis': 722,
+    'aogonek': 556,
+    'Uacute': 722,
+    'uogonek': 611,
+    'Edieresis': 667,
+    'Dcroat': 722,
+    'commaaccent': 250,
+    'copyright': 737,
+    'Emacron': 667,
+    'ccaron': 556,
+    'aring': 556,
+    'Ncommaaccent': 722,
+    'lacute': 278,
+    'agrave': 556,
+    'Tcommaaccent': 611,
+    'Cacute': 722,
+    'atilde': 556,
+    'Edotaccent': 667,
+    'scaron': 556,
+    'scedilla': 556,
+    'iacute': 278,
+    'lozenge': 494,
+    'Rcaron': 722,
+    'Gcommaaccent': 778,
+    'ucircumflex': 611,
+    'acircumflex': 556,
+    'Amacron': 722,
+    'rcaron': 389,
+    'ccedilla': 556,
+    'Zdotaccent': 611,
+    'Thorn': 667,
+    'Omacron': 778,
+    'Racute': 722,
+    'Sacute': 667,
+    'dcaron': 743,
+    'Umacron': 722,
+    'uring': 611,
+    'threesuperior': 333,
+    'Ograve': 778,
+    'Agrave': 722,
+    'Abreve': 722,
+    'multiply': 584,
+    'uacute': 611,
+    'Tcaron': 611,
+    'partialdiff': 494,
+    'ydieresis': 556,
+    'Nacute': 722,
+    'icircumflex': 278,
+    'Ecircumflex': 667,
+    'adieresis': 556,
+    'edieresis': 556,
+    'cacute': 556,
+    'nacute': 611,
+    'umacron': 611,
+    'Ncaron': 722,
+    'Iacute': 278,
+    'plusminus': 584,
+    'brokenbar': 280,
+    'registered': 737,
+    'Gbreve': 778,
+    'Idotaccent': 278,
+    'summation': 600,
+    'Egrave': 667,
+    'racute': 389,
+    'omacron': 611,
+    'Zacute': 611,
+    'Zcaron': 611,
+    'greaterequal': 549,
+    'Eth': 722,
+    'Ccedilla': 722,
+    'lcommaaccent': 278,
+    'tcaron': 389,
+    'eogonek': 556,
+    'Uogonek': 722,
+    'Aacute': 722,
+    'Adieresis': 722,
+    'egrave': 556,
+    'zacute': 500,
+    'iogonek': 278,
+    'Oacute': 778,
+    'oacute': 611,
+    'amacron': 556,
+    'sacute': 556,
+    'idieresis': 278,
+    'Ocircumflex': 778,
+    'Ugrave': 722,
+    'Delta': 612,
+    'thorn': 611,
+    'twosuperior': 333,
+    'Odieresis': 778,
+    'mu': 611,
+    'igrave': 278,
+    'ohungarumlaut': 611,
+    'Eogonek': 667,
+    'dcroat': 611,
+    'threequarters': 834,
+    'Scedilla': 667,
+    'lcaron': 400,
+    'Kcommaaccent': 722,
+    'Lacute': 611,
+    'trademark': 1000,
+    'edotaccent': 556,
+    'Igrave': 278,
+    'Imacron': 278,
+    'Lcaron': 611,
+    'onehalf': 834,
+    'lessequal': 549,
+    'ocircumflex': 611,
+    'ntilde': 611,
+    'Uhungarumlaut': 722,
+    'Eacute': 667,
+    'emacron': 556,
+    'gbreve': 611,
+    'onequarter': 834,
+    'Scaron': 667,
+    'Scommaaccent': 667,
+    'Ohungarumlaut': 778,
+    'degree': 400,
+    'ograve': 611,
+    'Ccaron': 722,
+    'ugrave': 611,
+    'radical': 549,
+    'Dcaron': 722,
+    'rcommaaccent': 389,
+    'Ntilde': 722,
+    'otilde': 611,
+    'Rcommaaccent': 722,
+    'Lcommaaccent': 611,
+    'Atilde': 722,
+    'Aogonek': 722,
+    'Aring': 722,
+    'Otilde': 778,
+    'zdotaccent': 500,
+    'Ecaron': 667,
+    'Iogonek': 278,
+    'kcommaaccent': 556,
+    'minus': 584,
+    'Icircumflex': 278,
+    'ncaron': 611,
+    'tcommaaccent': 333,
+    'logicalnot': 584,
+    'odieresis': 611,
+    'udieresis': 611,
+    'notequal': 549,
+    'gcommaaccent': 611,
+    'eth': 611,
+    'zcaron': 500,
+    'ncommaaccent': 611,
+    'onesuperior': 333,
+    'imacron': 278,
+    'Euro': 556
+  },
+  'Helvetica-BoldOblique': {
+    'space': 278,
+    'exclam': 333,
+    'quotedbl': 474,
+    'numbersign': 556,
+    'dollar': 556,
+    'percent': 889,
+    'ampersand': 722,
+    'quoteright': 278,
+    'parenleft': 333,
+    'parenright': 333,
+    'asterisk': 389,
+    'plus': 584,
+    'comma': 278,
+    'hyphen': 333,
+    'period': 278,
+    'slash': 278,
+    'zero': 556,
+    'one': 556,
+    'two': 556,
+    'three': 556,
+    'four': 556,
+    'five': 556,
+    'six': 556,
+    'seven': 556,
+    'eight': 556,
+    'nine': 556,
+    'colon': 333,
+    'semicolon': 333,
+    'less': 584,
+    'equal': 584,
+    'greater': 584,
+    'question': 611,
+    'at': 975,
+    'A': 722,
+    'B': 722,
+    'C': 722,
+    'D': 722,
+    'E': 667,
+    'F': 611,
+    'G': 778,
+    'H': 722,
+    'I': 278,
+    'J': 556,
+    'K': 722,
+    'L': 611,
+    'M': 833,
+    'N': 722,
+    'O': 778,
+    'P': 667,
+    'Q': 778,
+    'R': 722,
+    'S': 667,
+    'T': 611,
+    'U': 722,
+    'V': 667,
+    'W': 944,
+    'X': 667,
+    'Y': 667,
+    'Z': 611,
+    'bracketleft': 333,
+    'backslash': 278,
+    'bracketright': 333,
+    'asciicircum': 584,
+    'underscore': 556,
+    'quoteleft': 278,
+    'a': 556,
+    'b': 611,
+    'c': 556,
+    'd': 611,
+    'e': 556,
+    'f': 333,
+    'g': 611,
+    'h': 611,
+    'i': 278,
+    'j': 278,
+    'k': 556,
+    'l': 278,
+    'm': 889,
+    'n': 611,
+    'o': 611,
+    'p': 611,
+    'q': 611,
+    'r': 389,
+    's': 556,
+    't': 333,
+    'u': 611,
+    'v': 556,
+    'w': 778,
+    'x': 556,
+    'y': 556,
+    'z': 500,
+    'braceleft': 389,
+    'bar': 280,
+    'braceright': 389,
+    'asciitilde': 584,
+    'exclamdown': 333,
+    'cent': 556,
+    'sterling': 556,
+    'fraction': 167,
+    'yen': 556,
+    'florin': 556,
+    'section': 556,
+    'currency': 556,
+    'quotesingle': 238,
+    'quotedblleft': 500,
+    'guillemotleft': 556,
+    'guilsinglleft': 333,
+    'guilsinglright': 333,
+    'fi': 611,
+    'fl': 611,
+    'endash': 556,
+    'dagger': 556,
+    'daggerdbl': 556,
+    'periodcentered': 278,
+    'paragraph': 556,
+    'bullet': 350,
+    'quotesinglbase': 278,
+    'quotedblbase': 500,
+    'quotedblright': 500,
+    'guillemotright': 556,
+    'ellipsis': 1000,
+    'perthousand': 1000,
+    'questiondown': 611,
+    'grave': 333,
+    'acute': 333,
+    'circumflex': 333,
+    'tilde': 333,
+    'macron': 333,
+    'breve': 333,
+    'dotaccent': 333,
+    'dieresis': 333,
+    'ring': 333,
+    'cedilla': 333,
+    'hungarumlaut': 333,
+    'ogonek': 333,
+    'caron': 333,
+    'emdash': 1000,
+    'AE': 1000,
+    'ordfeminine': 370,
+    'Lslash': 611,
+    'Oslash': 778,
+    'OE': 1000,
+    'ordmasculine': 365,
+    'ae': 889,
+    'dotlessi': 278,
+    'lslash': 278,
+    'oslash': 611,
+    'oe': 944,
+    'germandbls': 611,
+    'Idieresis': 278,
+    'eacute': 556,
+    'abreve': 556,
+    'uhungarumlaut': 611,
+    'ecaron': 556,
+    'Ydieresis': 667,
+    'divide': 584,
+    'Yacute': 667,
+    'Acircumflex': 722,
+    'aacute': 556,
+    'Ucircumflex': 722,
+    'yacute': 556,
+    'scommaaccent': 556,
+    'ecircumflex': 556,
+    'Uring': 722,
+    'Udieresis': 722,
+    'aogonek': 556,
+    'Uacute': 722,
+    'uogonek': 611,
+    'Edieresis': 667,
+    'Dcroat': 722,
+    'commaaccent': 250,
+    'copyright': 737,
+    'Emacron': 667,
+    'ccaron': 556,
+    'aring': 556,
+    'Ncommaaccent': 722,
+    'lacute': 278,
+    'agrave': 556,
+    'Tcommaaccent': 611,
+    'Cacute': 722,
+    'atilde': 556,
+    'Edotaccent': 667,
+    'scaron': 556,
+    'scedilla': 556,
+    'iacute': 278,
+    'lozenge': 494,
+    'Rcaron': 722,
+    'Gcommaaccent': 778,
+    'ucircumflex': 611,
+    'acircumflex': 556,
+    'Amacron': 722,
+    'rcaron': 389,
+    'ccedilla': 556,
+    'Zdotaccent': 611,
+    'Thorn': 667,
+    'Omacron': 778,
+    'Racute': 722,
+    'Sacute': 667,
+    'dcaron': 743,
+    'Umacron': 722,
+    'uring': 611,
+    'threesuperior': 333,
+    'Ograve': 778,
+    'Agrave': 722,
+    'Abreve': 722,
+    'multiply': 584,
+    'uacute': 611,
+    'Tcaron': 611,
+    'partialdiff': 494,
+    'ydieresis': 556,
+    'Nacute': 722,
+    'icircumflex': 278,
+    'Ecircumflex': 667,
+    'adieresis': 556,
+    'edieresis': 556,
+    'cacute': 556,
+    'nacute': 611,
+    'umacron': 611,
+    'Ncaron': 722,
+    'Iacute': 278,
+    'plusminus': 584,
+    'brokenbar': 280,
+    'registered': 737,
+    'Gbreve': 778,
+    'Idotaccent': 278,
+    'summation': 600,
+    'Egrave': 667,
+    'racute': 389,
+    'omacron': 611,
+    'Zacute': 611,
+    'Zcaron': 611,
+    'greaterequal': 549,
+    'Eth': 722,
+    'Ccedilla': 722,
+    'lcommaaccent': 278,
+    'tcaron': 389,
+    'eogonek': 556,
+    'Uogonek': 722,
+    'Aacute': 722,
+    'Adieresis': 722,
+    'egrave': 556,
+    'zacute': 500,
+    'iogonek': 278,
+    'Oacute': 778,
+    'oacute': 611,
+    'amacron': 556,
+    'sacute': 556,
+    'idieresis': 278,
+    'Ocircumflex': 778,
+    'Ugrave': 722,
+    'Delta': 612,
+    'thorn': 611,
+    'twosuperior': 333,
+    'Odieresis': 778,
+    'mu': 611,
+    'igrave': 278,
+    'ohungarumlaut': 611,
+    'Eogonek': 667,
+    'dcroat': 611,
+    'threequarters': 834,
+    'Scedilla': 667,
+    'lcaron': 400,
+    'Kcommaaccent': 722,
+    'Lacute': 611,
+    'trademark': 1000,
+    'edotaccent': 556,
+    'Igrave': 278,
+    'Imacron': 278,
+    'Lcaron': 611,
+    'onehalf': 834,
+    'lessequal': 549,
+    'ocircumflex': 611,
+    'ntilde': 611,
+    'Uhungarumlaut': 722,
+    'Eacute': 667,
+    'emacron': 556,
+    'gbreve': 611,
+    'onequarter': 834,
+    'Scaron': 667,
+    'Scommaaccent': 667,
+    'Ohungarumlaut': 778,
+    'degree': 400,
+    'ograve': 611,
+    'Ccaron': 722,
+    'ugrave': 611,
+    'radical': 549,
+    'Dcaron': 722,
+    'rcommaaccent': 389,
+    'Ntilde': 722,
+    'otilde': 611,
+    'Rcommaaccent': 722,
+    'Lcommaaccent': 611,
+    'Atilde': 722,
+    'Aogonek': 722,
+    'Aring': 722,
+    'Otilde': 778,
+    'zdotaccent': 500,
+    'Ecaron': 667,
+    'Iogonek': 278,
+    'kcommaaccent': 556,
+    'minus': 584,
+    'Icircumflex': 278,
+    'ncaron': 611,
+    'tcommaaccent': 333,
+    'logicalnot': 584,
+    'odieresis': 611,
+    'udieresis': 611,
+    'notequal': 549,
+    'gcommaaccent': 611,
+    'eth': 611,
+    'zcaron': 500,
+    'ncommaaccent': 611,
+    'onesuperior': 333,
+    'imacron': 278,
+    'Euro': 556
+  },
+  'Helvetica-Oblique' : {
+    'space': 278,
+    'exclam': 278,
+    'quotedbl': 355,
+    'numbersign': 556,
+    'dollar': 556,
+    'percent': 889,
+    'ampersand': 667,
+    'quoteright': 222,
+    'parenleft': 333,
+    'parenright': 333,
+    'asterisk': 389,
+    'plus': 584,
+    'comma': 278,
+    'hyphen': 333,
+    'period': 278,
+    'slash': 278,
+    'zero': 556,
+    'one': 556,
+    'two': 556,
+    'three': 556,
+    'four': 556,
+    'five': 556,
+    'six': 556,
+    'seven': 556,
+    'eight': 556,
+    'nine': 556,
+    'colon': 278,
+    'semicolon': 278,
+    'less': 584,
+    'equal': 584,
+    'greater': 584,
+    'question': 556,
+    'at': 1015,
+    'A': 667,
+    'B': 667,
+    'C': 722,
+    'D': 722,
+    'E': 667,
+    'F': 611,
+    'G': 778,
+    'H': 722,
+    'I': 278,
+    'J': 500,
+    'K': 667,
+    'L': 556,
+    'M': 833,
+    'N': 722,
+    'O': 778,
+    'P': 667,
+    'Q': 778,
+    'R': 722,
+    'S': 667,
+    'T': 611,
+    'U': 722,
+    'V': 667,
+    'W': 944,
+    'X': 667,
+    'Y': 667,
+    'Z': 611,
+    'bracketleft': 278,
+    'backslash': 278,
+    'bracketright': 278,
+    'asciicircum': 469,
+    'underscore': 556,
+    'quoteleft': 222,
+    'a': 556,
+    'b': 556,
+    'c': 500,
+    'd': 556,
+    'e': 556,
+    'f': 278,
+    'g': 556,
+    'h': 556,
+    'i': 222,
+    'j': 222,
+    'k': 500,
+    'l': 222,
+    'm': 833,
+    'n': 556,
+    'o': 556,
+    'p': 556,
+    'q': 556,
+    'r': 333,
+    's': 500,
+    't': 278,
+    'u': 556,
+    'v': 500,
+    'w': 722,
+    'x': 500,
+    'y': 500,
+    'z': 500,
+    'braceleft': 334,
+    'bar': 260,
+    'braceright': 334,
+    'asciitilde': 584,
+    'exclamdown': 333,
+    'cent': 556,
+    'sterling': 556,
+    'fraction': 167,
+    'yen': 556,
+    'florin': 556,
+    'section': 556,
+    'currency': 556,
+    'quotesingle': 191,
+    'quotedblleft': 333,
+    'guillemotleft': 556,
+    'guilsinglleft': 333,
+    'guilsinglright': 333,
+    'fi': 500,
+    'fl': 500,
+    'endash': 556,
+    'dagger': 556,
+    'daggerdbl': 556,
+    'periodcentered': 278,
+    'paragraph': 537,
+    'bullet': 350,
+    'quotesinglbase': 222,
+    'quotedblbase': 333,
+    'quotedblright': 333,
+    'guillemotright': 556,
+    'ellipsis': 1000,
+    'perthousand': 1000,
+    'questiondown': 611,
+    'grave': 333,
+    'acute': 333,
+    'circumflex': 333,
+    'tilde': 333,
+    'macron': 333,
+    'breve': 333,
+    'dotaccent': 333,
+    'dieresis': 333,
+    'ring': 333,
+    'cedilla': 333,
+    'hungarumlaut': 333,
+    'ogonek': 333,
+    'caron': 333,
+    'emdash': 1000,
+    'AE': 1000,
+    'ordfeminine': 370,
+    'Lslash': 556,
+    'Oslash': 778,
+    'OE': 1000,
+    'ordmasculine': 365,
+    'ae': 889,
+    'dotlessi': 278,
+    'lslash': 222,
+    'oslash': 611,
+    'oe': 944,
+    'germandbls': 611,
+    'Idieresis': 278,
+    'eacute': 556,
+    'abreve': 556,
+    'uhungarumlaut': 556,
+    'ecaron': 556,
+    'Ydieresis': 667,
+    'divide': 584,
+    'Yacute': 667,
+    'Acircumflex': 667,
+    'aacute': 556,
+    'Ucircumflex': 722,
+    'yacute': 500,
+    'scommaaccent': 500,
+    'ecircumflex': 556,
+    'Uring': 722,
+    'Udieresis': 722,
+    'aogonek': 556,
+    'Uacute': 722,
+    'uogonek': 556,
+    'Edieresis': 667,
+    'Dcroat': 722,
+    'commaaccent': 250,
+    'copyright': 737,
+    'Emacron': 667,
+    'ccaron': 500,
+    'aring': 556,
+    'Ncommaaccent': 722,
+    'lacute': 222,
+    'agrave': 556,
+    'Tcommaaccent': 611,
+    'Cacute': 722,
+    'atilde': 556,
+    'Edotaccent': 667,
+    'scaron': 500,
+    'scedilla': 500,
+    'iacute': 278,
+    'lozenge': 471,
+    'Rcaron': 722,
+    'Gcommaaccent': 778,
+    'ucircumflex': 556,
+    'acircumflex': 556,
+    'Amacron': 667,
+    'rcaron': 333,
+    'ccedilla': 500,
+    'Zdotaccent': 611,
+    'Thorn': 667,
+    'Omacron': 778,
+    'Racute': 722,
+    'Sacute': 667,
+    'dcaron': 643,
+    'Umacron': 722,
+    'uring': 556,
+    'threesuperior': 333,
+    'Ograve': 778,
+    'Agrave': 667,
+    'Abreve': 667,
+    'multiply': 584,
+    'uacute': 556,
+    'Tcaron': 611,
+    'partialdiff': 476,
+    'ydieresis': 500,
+    'Nacute': 722,
+    'icircumflex': 278,
+    'Ecircumflex': 667,
+    'adieresis': 556,
+    'edieresis': 556,
+    'cacute': 500,
+    'nacute': 556,
+    'umacron': 556,
+    'Ncaron': 722,
+    'Iacute': 278,
+    'plusminus': 584,
+    'brokenbar': 260,
+    'registered': 737,
+    'Gbreve': 778,
+    'Idotaccent': 278,
+    'summation': 600,
+    'Egrave': 667,
+    'racute': 333,
+    'omacron': 556,
+    'Zacute': 611,
+    'Zcaron': 611,
+    'greaterequal': 549,
+    'Eth': 722,
+    'Ccedilla': 722,
+    'lcommaaccent': 222,
+    'tcaron': 317,
+    'eogonek': 556,
+    'Uogonek': 722,
+    'Aacute': 667,
+    'Adieresis': 667,
+    'egrave': 556,
+    'zacute': 500,
+    'iogonek': 222,
+    'Oacute': 778,
+    'oacute': 556,
+    'amacron': 556,
+    'sacute': 500,
+    'idieresis': 278,
+    'Ocircumflex': 778,
+    'Ugrave': 722,
+    'Delta': 612,
+    'thorn': 556,
+    'twosuperior': 333,
+    'Odieresis': 778,
+    'mu': 556,
+    'igrave': 278,
+    'ohungarumlaut': 556,
+    'Eogonek': 667,
+    'dcroat': 556,
+    'threequarters': 834,
+    'Scedilla': 667,
+    'lcaron': 299,
+    'Kcommaaccent': 667,
+    'Lacute': 556,
+    'trademark': 1000,
+    'edotaccent': 556,
+    'Igrave': 278,
+    'Imacron': 278,
+    'Lcaron': 556,
+    'onehalf': 834,
+    'lessequal': 549,
+    'ocircumflex': 556,
+    'ntilde': 556,
+    'Uhungarumlaut': 722,
+    'Eacute': 667,
+    'emacron': 556,
+    'gbreve': 556,
+    'onequarter': 834,
+    'Scaron': 667,
+    'Scommaaccent': 667,
+    'Ohungarumlaut': 778,
+    'degree': 400,
+    'ograve': 556,
+    'Ccaron': 722,
+    'ugrave': 556,
+    'radical': 453,
+    'Dcaron': 722,
+    'rcommaaccent': 333,
+    'Ntilde': 722,
+    'otilde': 556,
+    'Rcommaaccent': 722,
+    'Lcommaaccent': 556,
+    'Atilde': 667,
+    'Aogonek': 667,
+    'Aring': 667,
+    'Otilde': 778,
+    'zdotaccent': 500,
+    'Ecaron': 667,
+    'Iogonek': 278,
+    'kcommaaccent': 500,
+    'minus': 584,
+    'Icircumflex': 278,
+    'ncaron': 556,
+    'tcommaaccent': 278,
+    'logicalnot': 584,
+    'odieresis': 556,
+    'udieresis': 556,
+    'notequal': 549,
+    'gcommaaccent': 556,
+    'eth': 556,
+    'zcaron': 500,
+    'ncommaaccent': 556,
+    'onesuperior': 333,
+    'imacron': 278,
+    'Euro': 556
+  },
+  'Symbol': {
+    'space': 250,
+    'exclam': 333,
+    'universal': 713,
+    'numbersign': 500,
+    'existential': 549,
+    'percent': 833,
+    'ampersand': 778,
+    'suchthat': 439,
+    'parenleft': 333,
+    'parenright': 333,
+    'asteriskmath': 500,
+    'plus': 549,
+    'comma': 250,
+    'minus': 549,
+    'period': 250,
+    'slash': 278,
+    'zero': 500,
+    'one': 500,
+    'two': 500,
+    'three': 500,
+    'four': 500,
+    'five': 500,
+    'six': 500,
+    'seven': 500,
+    'eight': 500,
+    'nine': 500,
+    'colon': 278,
+    'semicolon': 278,
+    'less': 549,
+    'equal': 549,
+    'greater': 549,
+    'question': 444,
+    'congruent': 549,
+    'Alpha': 722,
+    'Beta': 667,
+    'Chi': 722,
+    'Delta': 612,
+    'Epsilon': 611,
+    'Phi': 763,
+    'Gamma': 603,
+    'Eta': 722,
+    'Iota': 333,
+    'theta1': 631,
+    'Kappa': 722,
+    'Lambda': 686,
+    'Mu': 889,
+    'Nu': 722,
+    'Omicron': 722,
+    'Pi': 768,
+    'Theta': 741,
+    'Rho': 556,
+    'Sigma': 592,
+    'Tau': 611,
+    'Upsilon': 690,
+    'sigma1': 439,
+    'Omega': 768,
+    'Xi': 645,
+    'Psi': 795,
+    'Zeta': 611,
+    'bracketleft': 333,
+    'therefore': 863,
+    'bracketright': 333,
+    'perpendicular': 658,
+    'underscore': 500,
+    'radicalex': 500,
+    'alpha': 631,
+    'beta': 549,
+    'chi': 549,
+    'delta': 494,
+    'epsilon': 439,
+    'phi': 521,
+    'gamma': 411,
+    'eta': 603,
+    'iota': 329,
+    'phi1': 603,
+    'kappa': 549,
+    'lambda': 549,
+    'mu': 576,
+    'nu': 521,
+    'omicron': 549,
+    'pi': 549,
+    'theta': 521,
+    'rho': 549,
+    'sigma': 603,
+    'tau': 439,
+    'upsilon': 576,
+    'omega1': 713,
+    'omega': 686,
+    'xi': 493,
+    'psi': 686,
+    'zeta': 494,
+    'braceleft': 480,
+    'bar': 200,
+    'braceright': 480,
+    'similar': 549,
+    'Euro': 750,
+    'Upsilon1': 620,
+    'minute': 247,
+    'lessequal': 549,
+    'fraction': 167,
+    'infinity': 713,
+    'florin': 500,
+    'club': 753,
+    'diamond': 753,
+    'heart': 753,
+    'spade': 753,
+    'arrowboth': 1042,
+    'arrowleft': 987,
+    'arrowup': 603,
+    'arrowright': 987,
+    'arrowdown': 603,
+    'degree': 400,
+    'plusminus': 549,
+    'second': 411,
+    'greaterequal': 549,
+    'multiply': 549,
+    'proportional': 713,
+    'partialdiff': 494,
+    'bullet': 460,
+    'divide': 549,
+    'notequal': 549,
+    'equivalence': 549,
+    'approxequal': 549,
+    'ellipsis': 1000,
+    'arrowvertex': 603,
+    'arrowhorizex': 1000,
+    'carriagereturn': 658,
+    'aleph': 823,
+    'Ifraktur': 686,
+    'Rfraktur': 795,
+    'weierstrass': 987,
+    'circlemultiply': 768,
+    'circleplus': 768,
+    'emptyset': 823,
+    'intersection': 768,
+    'union': 768,
+    'propersuperset': 713,
+    'reflexsuperset': 713,
+    'notsubset': 713,
+    'propersubset': 713,
+    'reflexsubset': 713,
+    'element': 713,
+    'notelement': 713,
+    'angle': 768,
+    'gradient': 713,
+    'registerserif': 790,
+    'copyrightserif': 790,
+    'trademarkserif': 890,
+    'product': 823,
+    'radical': 549,
+    'dotmath': 250,
+    'logicalnot': 713,
+    'logicaland': 603,
+    'logicalor': 603,
+    'arrowdblboth': 1042,
+    'arrowdblleft': 987,
+    'arrowdblup': 603,
+    'arrowdblright': 987,
+    'arrowdbldown': 603,
+    'lozenge': 494,
+    'angleleft': 329,
+    'registersans': 790,
+    'copyrightsans': 790,
+    'trademarksans': 786,
+    'summation': 713,
+    'parenlefttp': 384,
+    'parenleftex': 384,
+    'parenleftbt': 384,
+    'bracketlefttp': 384,
+    'bracketleftex': 384,
+    'bracketleftbt': 384,
+    'bracelefttp': 494,
+    'braceleftmid': 494,
+    'braceleftbt': 494,
+    'braceex': 494,
+    'angleright': 329,
+    'integral': 274,
+    'integraltp': 686,
+    'integralex': 686,
+    'integralbt': 686,
+    'parenrighttp': 384,
+    'parenrightex': 384,
+    'parenrightbt': 384,
+    'bracketrighttp': 384,
+    'bracketrightex': 384,
+    'bracketrightbt': 384,
+    'bracerighttp': 494,
+    'bracerightmid': 494,
+    'bracerightbt': 494,
+    'apple': 790
+  },
+  'Times-Roman': {
+    'space': 250,
+    'exclam': 333,
+    'quotedbl': 408,
+    'numbersign': 500,
+    'dollar': 500,
+    'percent': 833,
+    'ampersand': 778,
+    'quoteright': 333,
+    'parenleft': 333,
+    'parenright': 333,
+    'asterisk': 500,
+    'plus': 564,
+    'comma': 250,
+    'hyphen': 333,
+    'period': 250,
+    'slash': 278,
+    'zero': 500,
+    'one': 500,
+    'two': 500,
+    'three': 500,
+    'four': 500,
+    'five': 500,
+    'six': 500,
+    'seven': 500,
+    'eight': 500,
+    'nine': 500,
+    'colon': 278,
+    'semicolon': 278,
+    'less': 564,
+    'equal': 564,
+    'greater': 564,
+    'question': 444,
+    'at': 921,
+    'A': 722,
+    'B': 667,
+    'C': 667,
+    'D': 722,
+    'E': 611,
+    'F': 556,
+    'G': 722,
+    'H': 722,
+    'I': 333,
+    'J': 389,
+    'K': 722,
+    'L': 611,
+    'M': 889,
+    'N': 722,
+    'O': 722,
+    'P': 556,
+    'Q': 722,
+    'R': 667,
+    'S': 556,
+    'T': 611,
+    'U': 722,
+    'V': 722,
+    'W': 944,
+    'X': 722,
+    'Y': 722,
+    'Z': 611,
+    'bracketleft': 333,
+    'backslash': 278,
+    'bracketright': 333,
+    'asciicircum': 469,
+    'underscore': 500,
+    'quoteleft': 333,
+    'a': 444,
+    'b': 500,
+    'c': 444,
+    'd': 500,
+    'e': 444,
+    'f': 333,
+    'g': 500,
+    'h': 500,
+    'i': 278,
+    'j': 278,
+    'k': 500,
+    'l': 278,
+    'm': 778,
+    'n': 500,
+    'o': 500,
+    'p': 500,
+    'q': 500,
+    'r': 333,
+    's': 389,
+    't': 278,
+    'u': 500,
+    'v': 500,
+    'w': 722,
+    'x': 500,
+    'y': 500,
+    'z': 444,
+    'braceleft': 480,
+    'bar': 200,
+    'braceright': 480,
+    'asciitilde': 541,
+    'exclamdown': 333,
+    'cent': 500,
+    'sterling': 500,
+    'fraction': 167,
+    'yen': 500,
+    'florin': 500,
+    'section': 500,
+    'currency': 500,
+    'quotesingle': 180,
+    'quotedblleft': 444,
+    'guillemotleft': 500,
+    'guilsinglleft': 333,
+    'guilsinglright': 333,
+    'fi': 556,
+    'fl': 556,
+    'endash': 500,
+    'dagger': 500,
+    'daggerdbl': 500,
+    'periodcentered': 250,
+    'paragraph': 453,
+    'bullet': 350,
+    'quotesinglbase': 333,
+    'quotedblbase': 444,
+    'quotedblright': 444,
+    'guillemotright': 500,
+    'ellipsis': 1000,
+    'perthousand': 1000,
+    'questiondown': 444,
+    'grave': 333,
+    'acute': 333,
+    'circumflex': 333,
+    'tilde': 333,
+    'macron': 333,
+    'breve': 333,
+    'dotaccent': 333,
+    'dieresis': 333,
+    'ring': 333,
+    'cedilla': 333,
+    'hungarumlaut': 333,
+    'ogonek': 333,
+    'caron': 333,
+    'emdash': 1000,
+    'AE': 889,
+    'ordfeminine': 276,
+    'Lslash': 611,
+    'Oslash': 722,
+    'OE': 889,
+    'ordmasculine': 310,
+    'ae': 667,
+    'dotlessi': 278,
+    'lslash': 278,
+    'oslash': 500,
+    'oe': 722,
+    'germandbls': 500,
+    'Idieresis': 333,
+    'eacute': 444,
+    'abreve': 444,
+    'uhungarumlaut': 500,
+    'ecaron': 444,
+    'Ydieresis': 722,
+    'divide': 564,
+    'Yacute': 722,
+    'Acircumflex': 722,
+    'aacute': 444,
+    'Ucircumflex': 722,
+    'yacute': 500,
+    'scommaaccent': 389,
+    'ecircumflex': 444,
+    'Uring': 722,
+    'Udieresis': 722,
+    'aogonek': 444,
+    'Uacute': 722,
+    'uogonek': 500,
+    'Edieresis': 611,
+    'Dcroat': 722,
+    'commaaccent': 250,
+    'copyright': 760,
+    'Emacron': 611,
+    'ccaron': 444,
+    'aring': 444,
+    'Ncommaaccent': 722,
+    'lacute': 278,
+    'agrave': 444,
+    'Tcommaaccent': 611,
+    'Cacute': 667,
+    'atilde': 444,
+    'Edotaccent': 611,
+    'scaron': 389,
+    'scedilla': 389,
+    'iacute': 278,
+    'lozenge': 471,
+    'Rcaron': 667,
+    'Gcommaaccent': 722,
+    'ucircumflex': 500,
+    'acircumflex': 444,
+    'Amacron': 722,
+    'rcaron': 333,
+    'ccedilla': 444,
+    'Zdotaccent': 611,
+    'Thorn': 556,
+    'Omacron': 722,
+    'Racute': 667,
+    'Sacute': 556,
+    'dcaron': 588,
+    'Umacron': 722,
+    'uring': 500,
+    'threesuperior': 300,
+    'Ograve': 722,
+    'Agrave': 722,
+    'Abreve': 722,
+    'multiply': 564,
+    'uacute': 500,
+    'Tcaron': 611,
+    'partialdiff': 476,
+    'ydieresis': 500,
+    'Nacute': 722,
+    'icircumflex': 278,
+    'Ecircumflex': 611,
+    'adieresis': 444,
+    'edieresis': 444,
+    'cacute': 444,
+    'nacute': 500,
+    'umacron': 500,
+    'Ncaron': 722,
+    'Iacute': 333,
+    'plusminus': 564,
+    'brokenbar': 200,
+    'registered': 760,
+    'Gbreve': 722,
+    'Idotaccent': 333,
+    'summation': 600,
+    'Egrave': 611,
+    'racute': 333,
+    'omacron': 500,
+    'Zacute': 611,
+    'Zcaron': 611,
+    'greaterequal': 549,
+    'Eth': 722,
+    'Ccedilla': 667,
+    'lcommaaccent': 278,
+    'tcaron': 326,
+    'eogonek': 444,
+    'Uogonek': 722,
+    'Aacute': 722,
+    'Adieresis': 722,
+    'egrave': 444,
+    'zacute': 444,
+    'iogonek': 278,
+    'Oacute': 722,
+    'oacute': 500,
+    'amacron': 444,
+    'sacute': 389,
+    'idieresis': 278,
+    'Ocircumflex': 722,
+    'Ugrave': 722,
+    'Delta': 612,
+    'thorn': 500,
+    'twosuperior': 300,
+    'Odieresis': 722,
+    'mu': 500,
+    'igrave': 278,
+    'ohungarumlaut': 500,
+    'Eogonek': 611,
+    'dcroat': 500,
+    'threequarters': 750,
+    'Scedilla': 556,
+    'lcaron': 344,
+    'Kcommaaccent': 722,
+    'Lacute': 611,
+    'trademark': 980,
+    'edotaccent': 444,
+    'Igrave': 333,
+    'Imacron': 333,
+    'Lcaron': 611,
+    'onehalf': 750,
+    'lessequal': 549,
+    'ocircumflex': 500,
+    'ntilde': 500,
+    'Uhungarumlaut': 722,
+    'Eacute': 611,
+    'emacron': 444,
+    'gbreve': 500,
+    'onequarter': 750,
+    'Scaron': 556,
+    'Scommaaccent': 556,
+    'Ohungarumlaut': 722,
+    'degree': 400,
+    'ograve': 500,
+    'Ccaron': 667,
+    'ugrave': 500,
+    'radical': 453,
+    'Dcaron': 722,
+    'rcommaaccent': 333,
+    'Ntilde': 722,
+    'otilde': 500,
+    'Rcommaaccent': 667,
+    'Lcommaaccent': 611,
+    'Atilde': 722,
+    'Aogonek': 722,
+    'Aring': 722,
+    'Otilde': 722,
+    'zdotaccent': 444,
+    'Ecaron': 611,
+    'Iogonek': 333,
+    'kcommaaccent': 500,
+    'minus': 564,
+    'Icircumflex': 333,
+    'ncaron': 500,
+    'tcommaaccent': 278,
+    'logicalnot': 564,
+    'odieresis': 500,
+    'udieresis': 500,
+    'notequal': 549,
+    'gcommaaccent': 500,
+    'eth': 500,
+    'zcaron': 444,
+    'ncommaaccent': 500,
+    'onesuperior': 300,
+    'imacron': 278,
+    'Euro': 500
+  },
+  'Times-Bold': {
+    'space': 250,
+    'exclam': 333,
+    'quotedbl': 555,
+    'numbersign': 500,
+    'dollar': 500,
+    'percent': 1000,
+    'ampersand': 833,
+    'quoteright': 333,
+    'parenleft': 333,
+    'parenright': 333,
+    'asterisk': 500,
+    'plus': 570,
+    'comma': 250,
+    'hyphen': 333,
+    'period': 250,
+    'slash': 278,
+    'zero': 500,
+    'one': 500,
+    'two': 500,
+    'three': 500,
+    'four': 500,
+    'five': 500,
+    'six': 500,
+    'seven': 500,
+    'eight': 500,
+    'nine': 500,
+    'colon': 333,
+    'semicolon': 333,
+    'less': 570,
+    'equal': 570,
+    'greater': 570,
+    'question': 500,
+    'at': 930,
+    'A': 722,
+    'B': 667,
+    'C': 722,
+    'D': 722,
+    'E': 667,
+    'F': 611,
+    'G': 778,
+    'H': 778,
+    'I': 389,
+    'J': 500,
+    'K': 778,
+    'L': 667,
+    'M': 944,
+    'N': 722,
+    'O': 778,
+    'P': 611,
+    'Q': 778,
+    'R': 722,
+    'S': 556,
+    'T': 667,
+    'U': 722,
+    'V': 722,
+    'W': 1000,
+    'X': 722,
+    'Y': 722,
+    'Z': 667,
+    'bracketleft': 333,
+    'backslash': 278,
+    'bracketright': 333,
+    'asciicircum': 581,
+    'underscore': 500,
+    'quoteleft': 333,
+    'a': 500,
+    'b': 556,
+    'c': 444,
+    'd': 556,
+    'e': 444,
+    'f': 333,
+    'g': 500,
+    'h': 556,
+    'i': 278,
+    'j': 333,
+    'k': 556,
+    'l': 278,
+    'm': 833,
+    'n': 556,
+    'o': 500,
+    'p': 556,
+    'q': 556,
+    'r': 444,
+    's': 389,
+    't': 333,
+    'u': 556,
+    'v': 500,
+    'w': 722,
+    'x': 500,
+    'y': 500,
+    'z': 444,
+    'braceleft': 394,
+    'bar': 220,
+    'braceright': 394,
+    'asciitilde': 520,
+    'exclamdown': 333,
+    'cent': 500,
+    'sterling': 500,
+    'fraction': 167,
+    'yen': 500,
+    'florin': 500,
+    'section': 500,
+    'currency': 500,
+    'quotesingle': 278,
+    'quotedblleft': 500,
+    'guillemotleft': 500,
+    'guilsinglleft': 333,
+    'guilsinglright': 333,
+    'fi': 556,
+    'fl': 556,
+    'endash': 500,
+    'dagger': 500,
+    'daggerdbl': 500,
+    'periodcentered': 250,
+    'paragraph': 540,
+    'bullet': 350,
+    'quotesinglbase': 333,
+    'quotedblbase': 500,
+    'quotedblright': 500,
+    'guillemotright': 500,
+    'ellipsis': 1000,
+    'perthousand': 1000,
+    'questiondown': 500,
+    'grave': 333,
+    'acute': 333,
+    'circumflex': 333,
+    'tilde': 333,
+    'macron': 333,
+    'breve': 333,
+    'dotaccent': 333,
+    'dieresis': 333,
+    'ring': 333,
+    'cedilla': 333,
+    'hungarumlaut': 333,
+    'ogonek': 333,
+    'caron': 333,
+    'emdash': 1000,
+    'AE': 1000,
+    'ordfeminine': 300,
+    'Lslash': 667,
+    'Oslash': 778,
+    'OE': 1000,
+    'ordmasculine': 330,
+    'ae': 722,
+    'dotlessi': 278,
+    'lslash': 278,
+    'oslash': 500,
+    'oe': 722,
+    'germandbls': 556,
+    'Idieresis': 389,
+    'eacute': 444,
+    'abreve': 500,
+    'uhungarumlaut': 556,
+    'ecaron': 444,
+    'Ydieresis': 722,
+    'divide': 570,
+    'Yacute': 722,
+    'Acircumflex': 722,
+    'aacute': 500,
+    'Ucircumflex': 722,
+    'yacute': 500,
+    'scommaaccent': 389,
+    'ecircumflex': 444,
+    'Uring': 722,
+    'Udieresis': 722,
+    'aogonek': 500,
+    'Uacute': 722,
+    'uogonek': 556,
+    'Edieresis': 667,
+    'Dcroat': 722,
+    'commaaccent': 250,
+    'copyright': 747,
+    'Emacron': 667,
+    'ccaron': 444,
+    'aring': 500,
+    'Ncommaaccent': 722,
+    'lacute': 278,
+    'agrave': 500,
+    'Tcommaaccent': 667,
+    'Cacute': 722,
+    'atilde': 500,
+    'Edotaccent': 667,
+    'scaron': 389,
+    'scedilla': 389,
+    'iacute': 278,
+    'lozenge': 494,
+    'Rcaron': 722,
+    'Gcommaaccent': 778,
+    'ucircumflex': 556,
+    'acircumflex': 500,
+    'Amacron': 722,
+    'rcaron': 444,
+    'ccedilla': 444,
+    'Zdotaccent': 667,
+    'Thorn': 611,
+    'Omacron': 778,
+    'Racute': 722,
+    'Sacute': 556,
+    'dcaron': 672,
+    'Umacron': 722,
+    'uring': 556,
+    'threesuperior': 300,
+    'Ograve': 778,
+    'Agrave': 722,
+    'Abreve': 722,
+    'multiply': 570,
+    'uacute': 556,
+    'Tcaron': 667,
+    'partialdiff': 494,
+    'ydieresis': 500,
+    'Nacute': 722,
+    'icircumflex': 278,
+    'Ecircumflex': 667,
+    'adieresis': 500,
+    'edieresis': 444,
+    'cacute': 444,
+    'nacute': 556,
+    'umacron': 556,
+    'Ncaron': 722,
+    'Iacute': 389,
+    'plusminus': 570,
+    'brokenbar': 220,
+    'registered': 747,
+    'Gbreve': 778,
+    'Idotaccent': 389,
+    'summation': 600,
+    'Egrave': 667,
+    'racute': 444,
+    'omacron': 500,
+    'Zacute': 667,
+    'Zcaron': 667,
+    'greaterequal': 549,
+    'Eth': 722,
+    'Ccedilla': 722,
+    'lcommaaccent': 278,
+    'tcaron': 416,
+    'eogonek': 444,
+    'Uogonek': 722,
+    'Aacute': 722,
+    'Adieresis': 722,
+    'egrave': 444,
+    'zacute': 444,
+    'iogonek': 278,
+    'Oacute': 778,
+    'oacute': 500,
+    'amacron': 500,
+    'sacute': 389,
+    'idieresis': 278,
+    'Ocircumflex': 778,
+    'Ugrave': 722,
+    'Delta': 612,
+    'thorn': 556,
+    'twosuperior': 300,
+    'Odieresis': 778,
+    'mu': 556,
+    'igrave': 278,
+    'ohungarumlaut': 500,
+    'Eogonek': 667,
+    'dcroat': 556,
+    'threequarters': 750,
+    'Scedilla': 556,
+    'lcaron': 394,
+    'Kcommaaccent': 778,
+    'Lacute': 667,
+    'trademark': 1000,
+    'edotaccent': 444,
+    'Igrave': 389,
+    'Imacron': 389,
+    'Lcaron': 667,
+    'onehalf': 750,
+    'lessequal': 549,
+    'ocircumflex': 500,
+    'ntilde': 556,
+    'Uhungarumlaut': 722,
+    'Eacute': 667,
+    'emacron': 444,
+    'gbreve': 500,
+    'onequarter': 750,
+    'Scaron': 556,
+    'Scommaaccent': 556,
+    'Ohungarumlaut': 778,
+    'degree': 400,
+    'ograve': 500,
+    'Ccaron': 722,
+    'ugrave': 556,
+    'radical': 549,
+    'Dcaron': 722,
+    'rcommaaccent': 444,
+    'Ntilde': 722,
+    'otilde': 500,
+    'Rcommaaccent': 722,
+    'Lcommaaccent': 667,
+    'Atilde': 722,
+    'Aogonek': 722,
+    'Aring': 722,
+    'Otilde': 778,
+    'zdotaccent': 444,
+    'Ecaron': 667,
+    'Iogonek': 389,
+    'kcommaaccent': 556,
+    'minus': 570,
+    'Icircumflex': 389,
+    'ncaron': 556,
+    'tcommaaccent': 333,
+    'logicalnot': 570,
+    'odieresis': 500,
+    'udieresis': 556,
+    'notequal': 549,
+    'gcommaaccent': 500,
+    'eth': 500,
+    'zcaron': 444,
+    'ncommaaccent': 556,
+    'onesuperior': 300,
+    'imacron': 278,
+    'Euro': 500
+  },
+  'Times-BoldItalic': {
+    'space': 250,
+    'exclam': 389,
+    'quotedbl': 555,
+    'numbersign': 500,
+    'dollar': 500,
+    'percent': 833,
+    'ampersand': 778,
+    'quoteright': 333,
+    'parenleft': 333,
+    'parenright': 333,
+    'asterisk': 500,
+    'plus': 570,
+    'comma': 250,
+    'hyphen': 333,
+    'period': 250,
+    'slash': 278,
+    'zero': 500,
+    'one': 500,
+    'two': 500,
+    'three': 500,
+    'four': 500,
+    'five': 500,
+    'six': 500,
+    'seven': 500,
+    'eight': 500,
+    'nine': 500,
+    'colon': 333,
+    'semicolon': 333,
+    'less': 570,
+    'equal': 570,
+    'greater': 570,
+    'question': 500,
+    'at': 832,
+    'A': 667,
+    'B': 667,
+    'C': 667,
+    'D': 722,
+    'E': 667,
+    'F': 667,
+    'G': 722,
+    'H': 778,
+    'I': 389,
+    'J': 500,
+    'K': 667,
+    'L': 611,
+    'M': 889,
+    'N': 722,
+    'O': 722,
+    'P': 611,
+    'Q': 722,
+    'R': 667,
+    'S': 556,
+    'T': 611,
+    'U': 722,
+    'V': 667,
+    'W': 889,
+    'X': 667,
+    'Y': 611,
+    'Z': 611,
+    'bracketleft': 333,
+    'backslash': 278,
+    'bracketright': 333,
+    'asciicircum': 570,
+    'underscore': 500,
+    'quoteleft': 333,
+    'a': 500,
+    'b': 500,
+    'c': 444,
+    'd': 500,
+    'e': 444,
+    'f': 333,
+    'g': 500,
+    'h': 556,
+    'i': 278,
+    'j': 278,
+    'k': 500,
+    'l': 278,
+    'm': 778,
+    'n': 556,
+    'o': 500,
+    'p': 500,
+    'q': 500,
+    'r': 389,
+    's': 389,
+    't': 278,
+    'u': 556,
+    'v': 444,
+    'w': 667,
+    'x': 500,
+    'y': 444,
+    'z': 389,
+    'braceleft': 348,
+    'bar': 220,
+    'braceright': 348,
+    'asciitilde': 570,
+    'exclamdown': 389,
+    'cent': 500,
+    'sterling': 500,
+    'fraction': 167,
+    'yen': 500,
+    'florin': 500,
+    'section': 500,
+    'currency': 500,
+    'quotesingle': 278,
+    'quotedblleft': 500,
+    'guillemotleft': 500,
+    'guilsinglleft': 333,
+    'guilsinglright': 333,
+    'fi': 556,
+    'fl': 556,
+    'endash': 500,
+    'dagger': 500,
+    'daggerdbl': 500,
+    'periodcentered': 250,
+    'paragraph': 500,
+    'bullet': 350,
+    'quotesinglbase': 333,
+    'quotedblbase': 500,
+    'quotedblright': 500,
+    'guillemotright': 500,
+    'ellipsis': 1000,
+    'perthousand': 1000,
+    'questiondown': 500,
+    'grave': 333,
+    'acute': 333,
+    'circumflex': 333,
+    'tilde': 333,
+    'macron': 333,
+    'breve': 333,
+    'dotaccent': 333,
+    'dieresis': 333,
+    'ring': 333,
+    'cedilla': 333,
+    'hungarumlaut': 333,
+    'ogonek': 333,
+    'caron': 333,
+    'emdash': 1000,
+    'AE': 944,
+    'ordfeminine': 266,
+    'Lslash': 611,
+    'Oslash': 722,
+    'OE': 944,
+    'ordmasculine': 300,
+    'ae': 722,
+    'dotlessi': 278,
+    'lslash': 278,
+    'oslash': 500,
+    'oe': 722,
+    'germandbls': 500,
+    'Idieresis': 389,
+    'eacute': 444,
+    'abreve': 500,
+    'uhungarumlaut': 556,
+    'ecaron': 444,
+    'Ydieresis': 611,
+    'divide': 570,
+    'Yacute': 611,
+    'Acircumflex': 667,
+    'aacute': 500,
+    'Ucircumflex': 722,
+    'yacute': 444,
+    'scommaaccent': 389,
+    'ecircumflex': 444,
+    'Uring': 722,
+    'Udieresis': 722,
+    'aogonek': 500,
+    'Uacute': 722,
+    'uogonek': 556,
+    'Edieresis': 667,
+    'Dcroat': 722,
+    'commaaccent': 250,
+    'copyright': 747,
+    'Emacron': 667,
+    'ccaron': 444,
+    'aring': 500,
+    'Ncommaaccent': 722,
+    'lacute': 278,
+    'agrave': 500,
+    'Tcommaaccent': 611,
+    'Cacute': 667,
+    'atilde': 500,
+    'Edotaccent': 667,
+    'scaron': 389,
+    'scedilla': 389,
+    'iacute': 278,
+    'lozenge': 494,
+    'Rcaron': 667,
+    'Gcommaaccent': 722,
+    'ucircumflex': 556,
+    'acircumflex': 500,
+    'Amacron': 667,
+    'rcaron': 389,
+    'ccedilla': 444,
+    'Zdotaccent': 611,
+    'Thorn': 611,
+    'Omacron': 722,
+    'Racute': 667,
+    'Sacute': 556,
+    'dcaron': 608,
+    'Umacron': 722,
+    'uring': 556,
+    'threesuperior': 300,
+    'Ograve': 722,
+    'Agrave': 667,
+    'Abreve': 667,
+    'multiply': 570,
+    'uacute': 556,
+    'Tcaron': 611,
+    'partialdiff': 494,
+    'ydieresis': 444,
+    'Nacute': 722,
+    'icircumflex': 278,
+    'Ecircumflex': 667,
+    'adieresis': 500,
+    'edieresis': 444,
+    'cacute': 444,
+    'nacute': 556,
+    'umacron': 556,
+    'Ncaron': 722,
+    'Iacute': 389,
+    'plusminus': 570,
+    'brokenbar': 220,
+    'registered': 747,
+    'Gbreve': 722,
+    'Idotaccent': 389,
+    'summation': 600,
+    'Egrave': 667,
+    'racute': 389,
+    'omacron': 500,
+    'Zacute': 611,
+    'Zcaron': 611,
+    'greaterequal': 549,
+    'Eth': 722,
+    'Ccedilla': 667,
+    'lcommaaccent': 278,
+    'tcaron': 366,
+    'eogonek': 444,
+    'Uogonek': 722,
+    'Aacute': 667,
+    'Adieresis': 667,
+    'egrave': 444,
+    'zacute': 389,
+    'iogonek': 278,
+    'Oacute': 722,
+    'oacute': 500,
+    'amacron': 500,
+    'sacute': 389,
+    'idieresis': 278,
+    'Ocircumflex': 722,
+    'Ugrave': 722,
+    'Delta': 612,
+    'thorn': 500,
+    'twosuperior': 300,
+    'Odieresis': 722,
+    'mu': 576,
+    'igrave': 278,
+    'ohungarumlaut': 500,
+    'Eogonek': 667,
+    'dcroat': 500,
+    'threequarters': 750,
+    'Scedilla': 556,
+    'lcaron': 382,
+    'Kcommaaccent': 667,
+    'Lacute': 611,
+    'trademark': 1000,
+    'edotaccent': 444,
+    'Igrave': 389,
+    'Imacron': 389,
+    'Lcaron': 611,
+    'onehalf': 750,
+    'lessequal': 549,
+    'ocircumflex': 500,
+    'ntilde': 556,
+    'Uhungarumlaut': 722,
+    'Eacute': 667,
+    'emacron': 444,
+    'gbreve': 500,
+    'onequarter': 750,
+    'Scaron': 556,
+    'Scommaaccent': 556,
+    'Ohungarumlaut': 722,
+    'degree': 400,
+    'ograve': 500,
+    'Ccaron': 667,
+    'ugrave': 556,
+    'radical': 549,
+    'Dcaron': 722,
+    'rcommaaccent': 389,
+    'Ntilde': 722,
+    'otilde': 500,
+    'Rcommaaccent': 667,
+    'Lcommaaccent': 611,
+    'Atilde': 667,
+    'Aogonek': 667,
+    'Aring': 667,
+    'Otilde': 722,
+    'zdotaccent': 389,
+    'Ecaron': 667,
+    'Iogonek': 389,
+    'kcommaaccent': 500,
+    'minus': 606,
+    'Icircumflex': 389,
+    'ncaron': 556,
+    'tcommaaccent': 278,
+    'logicalnot': 606,
+    'odieresis': 500,
+    'udieresis': 556,
+    'notequal': 549,
+    'gcommaaccent': 500,
+    'eth': 500,
+    'zcaron': 389,
+    'ncommaaccent': 556,
+    'onesuperior': 300,
+    'imacron': 278,
+    'Euro': 500
+  },
+  'Times-Italic': {
+    'space': 250,
+    'exclam': 333,
+    'quotedbl': 420,
+    'numbersign': 500,
+    'dollar': 500,
+    'percent': 833,
+    'ampersand': 778,
+    'quoteright': 333,
+    'parenleft': 333,
+    'parenright': 333,
+    'asterisk': 500,
+    'plus': 675,
+    'comma': 250,
+    'hyphen': 333,
+    'period': 250,
+    'slash': 278,
+    'zero': 500,
+    'one': 500,
+    'two': 500,
+    'three': 500,
+    'four': 500,
+    'five': 500,
+    'six': 500,
+    'seven': 500,
+    'eight': 500,
+    'nine': 500,
+    'colon': 333,
+    'semicolon': 333,
+    'less': 675,
+    'equal': 675,
+    'greater': 675,
+    'question': 500,
+    'at': 920,
+    'A': 611,
+    'B': 611,
+    'C': 667,
+    'D': 722,
+    'E': 611,
+    'F': 611,
+    'G': 722,
+    'H': 722,
+    'I': 333,
+    'J': 444,
+    'K': 667,
+    'L': 556,
+    'M': 833,
+    'N': 667,
+    'O': 722,
+    'P': 611,
+    'Q': 722,
+    'R': 611,
+    'S': 500,
+    'T': 556,
+    'U': 722,
+    'V': 611,
+    'W': 833,
+    'X': 611,
+    'Y': 556,
+    'Z': 556,
+    'bracketleft': 389,
+    'backslash': 278,
+    'bracketright': 389,
+    'asciicircum': 422,
+    'underscore': 500,
+    'quoteleft': 333,
+    'a': 500,
+    'b': 500,
+    'c': 444,
+    'd': 500,
+    'e': 444,
+    'f': 278,
+    'g': 500,
+    'h': 500,
+    'i': 278,
+    'j': 278,
+    'k': 444,
+    'l': 278,
+    'm': 722,
+    'n': 500,
+    'o': 500,
+    'p': 500,
+    'q': 500,
+    'r': 389,
+    's': 389,
+    't': 278,
+    'u': 500,
+    'v': 444,
+    'w': 667,
+    'x': 444,
+    'y': 444,
+    'z': 389,
+    'braceleft': 400,
+    'bar': 275,
+    'braceright': 400,
+    'asciitilde': 541,
+    'exclamdown': 389,
+    'cent': 500,
+    'sterling': 500,
+    'fraction': 167,
+    'yen': 500,
+    'florin': 500,
+    'section': 500,
+    'currency': 500,
+    'quotesingle': 214,
+    'quotedblleft': 556,
+    'guillemotleft': 500,
+    'guilsinglleft': 333,
+    'guilsinglright': 333,
+    'fi': 500,
+    'fl': 500,
+    'endash': 500,
+    'dagger': 500,
+    'daggerdbl': 500,
+    'periodcentered': 250,
+    'paragraph': 523,
+    'bullet': 350,
+    'quotesinglbase': 333,
+    'quotedblbase': 556,
+    'quotedblright': 556,
+    'guillemotright': 500,
+    'ellipsis': 889,
+    'perthousand': 1000,
+    'questiondown': 500,
+    'grave': 333,
+    'acute': 333,
+    'circumflex': 333,
+    'tilde': 333,
+    'macron': 333,
+    'breve': 333,
+    'dotaccent': 333,
+    'dieresis': 333,
+    'ring': 333,
+    'cedilla': 333,
+    'hungarumlaut': 333,
+    'ogonek': 333,
+    'caron': 333,
+    'emdash': 889,
+    'AE': 889,
+    'ordfeminine': 276,
+    'Lslash': 556,
+    'Oslash': 722,
+    'OE': 944,
+    'ordmasculine': 310,
+    'ae': 667,
+    'dotlessi': 278,
+    'lslash': 278,
+    'oslash': 500,
+    'oe': 667,
+    'germandbls': 500,
+    'Idieresis': 333,
+    'eacute': 444,
+    'abreve': 500,
+    'uhungarumlaut': 500,
+    'ecaron': 444,
+    'Ydieresis': 556,
+    'divide': 675,
+    'Yacute': 556,
+    'Acircumflex': 611,
+    'aacute': 500,
+    'Ucircumflex': 722,
+    'yacute': 444,
+    'scommaaccent': 389,
+    'ecircumflex': 444,
+    'Uring': 722,
+    'Udieresis': 722,
+    'aogonek': 500,
+    'Uacute': 722,
+    'uogonek': 500,
+    'Edieresis': 611,
+    'Dcroat': 722,
+    'commaaccent': 250,
+    'copyright': 760,
+    'Emacron': 611,
+    'ccaron': 444,
+    'aring': 500,
+    'Ncommaaccent': 667,
+    'lacute': 278,
+    'agrave': 500,
+    'Tcommaaccent': 556,
+    'Cacute': 667,
+    'atilde': 500,
+    'Edotaccent': 611,
+    'scaron': 389,
+    'scedilla': 389,
+    'iacute': 278,
+    'lozenge': 471,
+    'Rcaron': 611,
+    'Gcommaaccent': 722,
+    'ucircumflex': 500,
+    'acircumflex': 500,
+    'Amacron': 611,
+    'rcaron': 389,
+    'ccedilla': 444,
+    'Zdotaccent': 556,
+    'Thorn': 611,
+    'Omacron': 722,
+    'Racute': 611,
+    'Sacute': 500,
+    'dcaron': 544,
+    'Umacron': 722,
+    'uring': 500,
+    'threesuperior': 300,
+    'Ograve': 722,
+    'Agrave': 611,
+    'Abreve': 611,
+    'multiply': 675,
+    'uacute': 500,
+    'Tcaron': 556,
+    'partialdiff': 476,
+    'ydieresis': 444,
+    'Nacute': 667,
+    'icircumflex': 278,
+    'Ecircumflex': 611,
+    'adieresis': 500,
+    'edieresis': 444,
+    'cacute': 444,
+    'nacute': 500,
+    'umacron': 500,
+    'Ncaron': 667,
+    'Iacute': 333,
+    'plusminus': 675,
+    'brokenbar': 275,
+    'registered': 760,
+    'Gbreve': 722,
+    'Idotaccent': 333,
+    'summation': 600,
+    'Egrave': 611,
+    'racute': 389,
+    'omacron': 500,
+    'Zacute': 556,
+    'Zcaron': 556,
+    'greaterequal': 549,
+    'Eth': 722,
+    'Ccedilla': 667,
+    'lcommaaccent': 278,
+    'tcaron': 300,
+    'eogonek': 444,
+    'Uogonek': 722,
+    'Aacute': 611,
+    'Adieresis': 611,
+    'egrave': 444,
+    'zacute': 389,
+    'iogonek': 278,
+    'Oacute': 722,
+    'oacute': 500,
+    'amacron': 500,
+    'sacute': 389,
+    'idieresis': 278,
+    'Ocircumflex': 722,
+    'Ugrave': 722,
+    'Delta': 612,
+    'thorn': 500,
+    'twosuperior': 300,
+    'Odieresis': 722,
+    'mu': 500,
+    'igrave': 278,
+    'ohungarumlaut': 500,
+    'Eogonek': 611,
+    'dcroat': 500,
+    'threequarters': 750,
+    'Scedilla': 500,
+    'lcaron': 300,
+    'Kcommaaccent': 667,
+    'Lacute': 556,
+    'trademark': 980,
+    'edotaccent': 444,
+    'Igrave': 333,
+    'Imacron': 333,
+    'Lcaron': 611,
+    'onehalf': 750,
+    'lessequal': 549,
+    'ocircumflex': 500,
+    'ntilde': 500,
+    'Uhungarumlaut': 722,
+    'Eacute': 611,
+    'emacron': 444,
+    'gbreve': 500,
+    'onequarter': 750,
+    'Scaron': 500,
+    'Scommaaccent': 500,
+    'Ohungarumlaut': 722,
+    'degree': 400,
+    'ograve': 500,
+    'Ccaron': 667,
+    'ugrave': 500,
+    'radical': 453,
+    'Dcaron': 722,
+    'rcommaaccent': 389,
+    'Ntilde': 667,
+    'otilde': 500,
+    'Rcommaaccent': 611,
+    'Lcommaaccent': 556,
+    'Atilde': 611,
+    'Aogonek': 611,
+    'Aring': 611,
+    'Otilde': 722,
+    'zdotaccent': 389,
+    'Ecaron': 611,
+    'Iogonek': 333,
+    'kcommaaccent': 444,
+    'minus': 675,
+    'Icircumflex': 333,
+    'ncaron': 500,
+    'tcommaaccent': 278,
+    'logicalnot': 675,
+    'odieresis': 500,
+    'udieresis': 500,
+    'notequal': 549,
+    'gcommaaccent': 500,
+    'eth': 500,
+    'zcaron': 389,
+    'ncommaaccent': 500,
+    'onesuperior': 300,
+    'imacron': 278,
+    'Euro': 500
+  },
+  'ZapfDingbats': {
+    'space': 278,
+    'a1': 974,
+    'a2': 961,
+    'a202': 974,
+    'a3': 980,
+    'a4': 719,
+    'a5': 789,
+    'a119': 790,
+    'a118': 791,
+    'a117': 690,
+    'a11': 960,
+    'a12': 939,
+    'a13': 549,
+    'a14': 855,
+    'a15': 911,
+    'a16': 933,
+    'a105': 911,
+    'a17': 945,
+    'a18': 974,
+    'a19': 755,
+    'a20': 846,
+    'a21': 762,
+    'a22': 761,
+    'a23': 571,
+    'a24': 677,
+    'a25': 763,
+    'a26': 760,
+    'a27': 759,
+    'a28': 754,
+    'a6': 494,
+    'a7': 552,
+    'a8': 537,
+    'a9': 577,
+    'a10': 692,
+    'a29': 786,
+    'a30': 788,
+    'a31': 788,
+    'a32': 790,
+    'a33': 793,
+    'a34': 794,
+    'a35': 816,
+    'a36': 823,
+    'a37': 789,
+    'a38': 841,
+    'a39': 823,
+    'a40': 833,
+    'a41': 816,
+    'a42': 831,
+    'a43': 923,
+    'a44': 744,
+    'a45': 723,
+    'a46': 749,
+    'a47': 790,
+    'a48': 792,
+    'a49': 695,
+    'a50': 776,
+    'a51': 768,
+    'a52': 792,
+    'a53': 759,
+    'a54': 707,
+    'a55': 708,
+    'a56': 682,
+    'a57': 701,
+    'a58': 826,
+    'a59': 815,
+    'a60': 789,
+    'a61': 789,
+    'a62': 707,
+    'a63': 687,
+    'a64': 696,
+    'a65': 689,
+    'a66': 786,
+    'a67': 787,
+    'a68': 713,
+    'a69': 791,
+    'a70': 785,
+    'a71': 791,
+    'a72': 873,
+    'a73': 761,
+    'a74': 762,
+    'a203': 762,
+    'a75': 759,
+    'a204': 759,
+    'a76': 892,
+    'a77': 892,
+    'a78': 788,
+    'a79': 784,
+    'a81': 438,
+    'a82': 138,
+    'a83': 277,
+    'a84': 415,
+    'a97': 392,
+    'a98': 392,
+    'a99': 668,
+    'a100': 668,
+    'a89': 390,
+    'a90': 390,
+    'a93': 317,
+    'a94': 317,
+    'a91': 276,
+    'a92': 276,
+    'a205': 509,
+    'a85': 509,
+    'a206': 410,
+    'a86': 410,
+    'a87': 234,
+    'a88': 234,
+    'a95': 334,
+    'a96': 334,
+    'a101': 732,
+    'a102': 544,
+    'a103': 544,
+    'a104': 910,
+    'a106': 667,
+    'a107': 760,
+    'a108': 760,
+    'a112': 776,
+    'a111': 595,
+    'a110': 694,
+    'a109': 626,
+    'a120': 788,
+    'a121': 788,
+    'a122': 788,
+    'a123': 788,
+    'a124': 788,
+    'a125': 788,
+    'a126': 788,
+    'a127': 788,
+    'a128': 788,
+    'a129': 788,
+    'a130': 788,
+    'a131': 788,
+    'a132': 788,
+    'a133': 788,
+    'a134': 788,
+    'a135': 788,
+    'a136': 788,
+    'a137': 788,
+    'a138': 788,
+    'a139': 788,
+    'a140': 788,
+    'a141': 788,
+    'a142': 788,
+    'a143': 788,
+    'a144': 788,
+    'a145': 788,
+    'a146': 788,
+    'a147': 788,
+    'a148': 788,
+    'a149': 788,
+    'a150': 788,
+    'a151': 788,
+    'a152': 788,
+    'a153': 788,
+    'a154': 788,
+    'a155': 788,
+    'a156': 788,
+    'a157': 788,
+    'a158': 788,
+    'a159': 788,
+    'a160': 894,
+    'a161': 838,
+    'a163': 1016,
+    'a164': 458,
+    'a196': 748,
+    'a165': 924,
+    'a192': 748,
+    'a166': 918,
+    'a167': 927,
+    'a168': 928,
+    'a169': 928,
+    'a170': 834,
+    'a171': 873,
+    'a172': 828,
+    'a173': 924,
+    'a162': 924,
+    'a174': 917,
+    'a175': 930,
+    'a176': 931,
+    'a177': 463,
+    'a178': 883,
+    'a179': 836,
+    'a193': 836,
+    'a180': 867,
+    'a199': 867,
+    'a181': 696,
+    'a200': 696,
+    'a182': 874,
+    'a201': 874,
+    'a183': 760,
+    'a184': 946,
+    'a197': 771,
+    'a185': 865,
+    'a194': 771,
+    'a198': 888,
+    'a186': 967,
+    'a195': 888,
+    'a187': 831,
+    'a188': 873,
+    'a189': 927,
+    'a190': 970,
+    'a191': 918
+  }
+};
+
+
+var EOF = {};
+
+function isEOF(v) {
+  return (v === EOF);
+}
+
+var MAX_LENGTH_TO_CACHE = 1000;
+
+var Parser = (function ParserClosure() {
+  function Parser(lexer, allowStreams, xref) {
+    this.lexer = lexer;
+    this.allowStreams = allowStreams;
+    this.xref = xref;
+    this.imageCache = {};
+    this.refill();
+  }
+
+  Parser.prototype = {
+    refill: function Parser_refill() {
+      this.buf1 = this.lexer.getObj();
+      this.buf2 = this.lexer.getObj();
+    },
+    shift: function Parser_shift() {
+      if (isCmd(this.buf2, 'ID')) {
+        this.buf1 = this.buf2;
+        this.buf2 = null;
+      } else {
+        this.buf1 = this.buf2;
+        this.buf2 = this.lexer.getObj();
+      }
+    },
+    getObj: function Parser_getObj(cipherTransform) {
+      var buf1 = this.buf1;
+      this.shift();
+
+      if (buf1 instanceof Cmd) {
+        switch (buf1.cmd) {
+          case 'BI': // inline image
+            return this.makeInlineImage(cipherTransform);
+          case '[': // array
+            var array = [];
+            while (!isCmd(this.buf1, ']') && !isEOF(this.buf1)) {
+              array.push(this.getObj(cipherTransform));
+            }
+            if (isEOF(this.buf1)) {
+              error('End of file inside array');
+            }
+            this.shift();
+            return array;
+          case '<<': // dictionary or stream
+            var dict = new Dict(this.xref);
+            while (!isCmd(this.buf1, '>>') && !isEOF(this.buf1)) {
+              if (!isName(this.buf1)) {
+                info('Malformed dictionary: key must be a name object');
+                this.shift();
+                continue;
+              }
+
+              var key = this.buf1.name;
+              this.shift();
+              if (isEOF(this.buf1)) {
+                break;
+              }
+              dict.set(key, this.getObj(cipherTransform));
+            }
+            if (isEOF(this.buf1)) {
+              error('End of file inside dictionary');
+            }
+
+            // Stream objects are not allowed inside content streams or
+            // object streams.
+            if (isCmd(this.buf2, 'stream')) {
+              return (this.allowStreams ?
+                      this.makeStream(dict, cipherTransform) : dict);
+            }
+            this.shift();
+            return dict;
+          default: // simple object
+            return buf1;
+        }
+      }
+
+      if (isInt(buf1)) { // indirect reference or integer
+        var num = buf1;
+        if (isInt(this.buf1) && isCmd(this.buf2, 'R')) {
+          var ref = new Ref(num, this.buf1);
+          this.shift();
+          this.shift();
+          return ref;
+        }
+        return num;
+      }
+
+      if (isString(buf1)) { // string
+        var str = buf1;
+        if (cipherTransform) {
+          str = cipherTransform.decryptString(str);
+        }
+        return str;
+      }
+
+      // simple object
+      return buf1;
+    },
+    /**
+     * Find the end of the stream by searching for the /EI\s/.
+     * @returns {number} The inline stream length.
+     */
+    findDefaultInlineStreamEnd:
+        function Parser_findDefaultInlineStreamEnd(stream) {
+      var E = 0x45, I = 0x49, SPACE = 0x20, LF = 0xA, CR = 0xD;
+      var startPos = stream.pos, state = 0, ch, i, n, followingBytes;
+      while ((ch = stream.getByte()) !== -1) {
+        if (state === 0) {
+          state = (ch === E) ? 1 : 0;
+        } else if (state === 1) {
+          state = (ch === I) ? 2 : 0;
+        } else {
+          assert(state === 2);
+          if (ch === SPACE || ch === LF || ch === CR) {
+            // Let's check the next five bytes are ASCII... just be sure.
+            n = 5;
+            followingBytes = stream.peekBytes(n);
+            for (i = 0; i < n; i++) {
+              ch = followingBytes[i];
+              if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7F)) {
+                // Not a LF, CR, SPACE or any visible ASCII character, i.e.
+                // it's binary stuff. Resetting the state.
+                state = 0;
+                break;
+              }
+            }
+            if (state === 2) {
+              break;  // Finished!
+            }
+          } else {
+            state = 0;
+          }
+        }
+      }
+      return ((stream.pos - 4) - startPos);
+    },
+    /**
+     * Find the EOI (end-of-image) marker 0xFFD9 of the stream.
+     * @returns {number} The inline stream length.
+     */
+    findDCTDecodeInlineStreamEnd:
+        function Parser_findDCTDecodeInlineStreamEnd(stream) {
+      var startPos = stream.pos, foundEOI = false, b, markerLength, length;
+      while ((b = stream.getByte()) !== -1) {
+        if (b !== 0xFF) { // Not a valid marker.
+          continue;
+        }
+        switch (stream.getByte()) {
+          case 0x00: // Byte stuffing.
+            // 0xFF00 appears to be a very common byte sequence in JPEG images.
+            break;
+
+          case 0xFF: // Fill byte.
+            // Avoid skipping a valid marker, resetting the stream position.
+            stream.skip(-1);
+            break;
+
+          case 0xD9: // EOI
+            foundEOI = true;
+            break;
+
+          case 0xC0: // SOF0
+          case 0xC1: // SOF1
+          case 0xC2: // SOF2
+          case 0xC3: // SOF3
+
+          case 0xC5: // SOF5
+          case 0xC6: // SOF6
+          case 0xC7: // SOF7
+
+          case 0xC9: // SOF9
+          case 0xCA: // SOF10
+          case 0xCB: // SOF11
+
+          case 0xCD: // SOF13
+          case 0xCE: // SOF14
+          case 0xCF: // SOF15
+
+          case 0xC4: // DHT
+          case 0xCC: // DAC
+
+          case 0xDA: // SOS
+          case 0xDB: // DQT
+          case 0xDC: // DNL
+          case 0xDD: // DRI
+          case 0xDE: // DHP
+          case 0xDF: // EXP
+
+          case 0xE0: // APP0
+          case 0xE1: // APP1
+          case 0xE2: // APP2
+          case 0xE3: // APP3
+          case 0xE4: // APP4
+          case 0xE5: // APP5
+          case 0xE6: // APP6
+          case 0xE7: // APP7
+          case 0xE8: // APP8
+          case 0xE9: // APP9
+          case 0xEA: // APP10
+          case 0xEB: // APP11
+          case 0xEC: // APP12
+          case 0xED: // APP13
+          case 0xEE: // APP14
+          case 0xEF: // APP15
+
+          case 0xFE: // COM
+            // The marker should be followed by the length of the segment.
+            markerLength = stream.getUint16();
+            if (markerLength > 2) {
+              // |markerLength| contains the byte length of the marker segment,
+              // including its own length (2 bytes) and excluding the marker.
+              stream.skip(markerLength - 2); // Jump to the next marker.
+            } else {
+              // The marker length is invalid, resetting the stream position.
+              stream.skip(-2);
+            }
+            break;
+        }
+        if (foundEOI) {
+          break;
+        }
+      }
+      length = stream.pos - startPos;
+      if (b === -1) {
+        warn('Inline DCTDecode image stream: ' +
+             'EOI marker not found, searching for /EI/ instead.');
+        stream.skip(-length); // Reset the stream position.
+        return this.findDefaultInlineStreamEnd(stream);
+      }
+      this.inlineStreamSkipEI(stream);
+      return length;
+    },
+    /**
+     * Find the EOD (end-of-data) marker '~>' (i.e. TILDE + GT) of the stream.
+     * @returns {number} The inline stream length.
+     */
+    findASCII85DecodeInlineStreamEnd:
+        function Parser_findASCII85DecodeInlineStreamEnd(stream) {
+      var TILDE = 0x7E, GT = 0x3E;
+      var startPos = stream.pos, ch, length;
+      while ((ch = stream.getByte()) !== -1) {
+        if (ch === TILDE && stream.peekByte() === GT) {
+          stream.skip();
+          break;
+        }
+      }
+      length = stream.pos - startPos;
+      if (ch === -1) {
+        warn('Inline ASCII85Decode image stream: ' +
+             'EOD marker not found, searching for /EI/ instead.');
+        stream.skip(-length); // Reset the stream position.
+        return this.findDefaultInlineStreamEnd(stream);
+      }
+      this.inlineStreamSkipEI(stream);
+      return length;
+    },
+    /**
+     * Find the EOD (end-of-data) marker '>' (i.e. GT) of the stream.
+     * @returns {number} The inline stream length.
+     */
+    findASCIIHexDecodeInlineStreamEnd:
+        function Parser_findASCIIHexDecodeInlineStreamEnd(stream) {
+      var GT = 0x3E;
+      var startPos = stream.pos, ch, length;
+      while ((ch = stream.getByte()) !== -1) {
+        if (ch === GT) {
+          break;
+        }
+      }
+      length = stream.pos - startPos;
+      if (ch === -1) {
+        warn('Inline ASCIIHexDecode image stream: ' +
+             'EOD marker not found, searching for /EI/ instead.');
+        stream.skip(-length); // Reset the stream position.
+        return this.findDefaultInlineStreamEnd(stream);
+      }
+      this.inlineStreamSkipEI(stream);
+      return length;
+    },
+    /**
+     * Skip over the /EI/ for streams where we search for an EOD marker.
+     */
+    inlineStreamSkipEI: function Parser_inlineStreamSkipEI(stream) {
+      var E = 0x45, I = 0x49;
+      var state = 0, ch;
+      while ((ch = stream.getByte()) !== -1) {
+        if (state === 0) {
+          state = (ch === E) ? 1 : 0;
+        } else if (state === 1) {
+          state = (ch === I) ? 2 : 0;
+        } else if (state === 2) {
+          break;
+        }
+      }
+    },
+    makeInlineImage: function Parser_makeInlineImage(cipherTransform) {
+      var lexer = this.lexer;
+      var stream = lexer.stream;
+
+      // Parse dictionary.
+      var dict = new Dict(null);
+      while (!isCmd(this.buf1, 'ID') && !isEOF(this.buf1)) {
+        if (!isName(this.buf1)) {
+          error('Dictionary key must be a name object');
+        }
+        var key = this.buf1.name;
+        this.shift();
+        if (isEOF(this.buf1)) {
+          break;
+        }
+        dict.set(key, this.getObj(cipherTransform));
+      }
+
+      // Extract the name of the first (i.e. the current) image filter.
+      var filter = this.fetchIfRef(dict.get('Filter', 'F')), filterName;
+      if (isName(filter)) {
+        filterName = filter.name;
+      } else if (isArray(filter) && isName(filter[0])) {
+        filterName = filter[0].name;
+      }
+
+      // Parse image stream.
+      var startPos = stream.pos, length, i, ii;
+      if (filterName === 'DCTDecode' || filterName === 'DCT') {
+        length = this.findDCTDecodeInlineStreamEnd(stream);
+      } else if (filterName === 'ASCII85Decide' || filterName === 'A85') {
+        length = this.findASCII85DecodeInlineStreamEnd(stream);
+      } else if (filterName === 'ASCIIHexDecode' || filterName === 'AHx') {
+        length = this.findASCIIHexDecodeInlineStreamEnd(stream);
+      } else {
+        length = this.findDefaultInlineStreamEnd(stream);
+      }
+      var imageStream = stream.makeSubStream(startPos, length, dict);
+
+      // Cache all images below the MAX_LENGTH_TO_CACHE threshold by their
+      // adler32 checksum.
+      var adler32;
+      if (length < MAX_LENGTH_TO_CACHE) {
+        var imageBytes = imageStream.getBytes();
+        imageStream.reset();
+
+        var a = 1;
+        var b = 0;
+        for (i = 0, ii = imageBytes.length; i < ii; ++i) {
+          // No modulo required in the loop if imageBytes.length < 5552.
+          a += imageBytes[i] & 0xff;
+          b += a;
+        }
+        adler32 = ((b % 65521) << 16) | (a % 65521);
+
+        if (this.imageCache.adler32 === adler32) {
+          this.buf2 = Cmd.get('EI');
+          this.shift();
+
+          this.imageCache[adler32].reset();
+          return this.imageCache[adler32];
+        }
+      }
+
+      if (cipherTransform) {
+        imageStream = cipherTransform.createStream(imageStream, length);
+      }
+
+      imageStream = this.filter(imageStream, dict, length);
+      imageStream.dict = dict;
+      if (adler32 !== undefined) {
+        imageStream.cacheKey = 'inline_' + length + '_' + adler32;
+        this.imageCache[adler32] = imageStream;
+      }
+
+      this.buf2 = Cmd.get('EI');
+      this.shift();
+
+      return imageStream;
+    },
+    fetchIfRef: function Parser_fetchIfRef(obj) {
+      // not relying on the xref.fetchIfRef -- xref might not be set
+      return (isRef(obj) ? this.xref.fetch(obj) : obj);
+    },
+    makeStream: function Parser_makeStream(dict, cipherTransform) {
+      var lexer = this.lexer;
+      var stream = lexer.stream;
+
+      // get stream start position
+      lexer.skipToNextLine();
+      var pos = stream.pos - 1;
+
+      // get length
+      var length = this.fetchIfRef(dict.get('Length'));
+      if (!isInt(length)) {
+        info('Bad ' + length + ' attribute in stream');
+        length = 0;
+      }
+
+      // skip over the stream data
+      stream.pos = pos + length;
+      lexer.nextChar();
+
+      this.shift(); // '>>'
+      this.shift(); // 'stream'
+      if (!isCmd(this.buf1, 'endstream')) {
+        // bad stream length, scanning for endstream
+        stream.pos = pos;
+        var SCAN_BLOCK_SIZE = 2048;
+        var ENDSTREAM_SIGNATURE_LENGTH = 9;
+        var ENDSTREAM_SIGNATURE = [0x65, 0x6E, 0x64, 0x73, 0x74, 0x72, 0x65,
+                                   0x61, 0x6D];
+        var skipped = 0, found = false, i, j;
+        while (stream.pos < stream.end) {
+          var scanBytes = stream.peekBytes(SCAN_BLOCK_SIZE);
+          var scanLength = scanBytes.length - ENDSTREAM_SIGNATURE_LENGTH;
+          if (scanLength <= 0) {
+            break;
+          }
+          found = false;
+          for (i = 0, j = 0; i < scanLength; i++) {
+            var b = scanBytes[i];
+            if (b !== ENDSTREAM_SIGNATURE[j]) {
+              i -= j;
+              j = 0;
+            } else {
+              j++;
+              if (j >= ENDSTREAM_SIGNATURE_LENGTH) {
+                i++;
+                found = true;
+                break;
+              }
+            }
+          }
+          if (found) {
+            skipped += i - ENDSTREAM_SIGNATURE_LENGTH;
+            stream.pos += i - ENDSTREAM_SIGNATURE_LENGTH;
+            break;
+          }
+          skipped += scanLength;
+          stream.pos += scanLength;
+        }
+        if (!found) {
+          error('Missing endstream');
+        }
+        length = skipped;
+
+        lexer.nextChar();
+        this.shift();
+        this.shift();
+      }
+      this.shift(); // 'endstream'
+
+      stream = stream.makeSubStream(pos, length, dict);
+      if (cipherTransform) {
+        stream = cipherTransform.createStream(stream, length);
+      }
+      stream = this.filter(stream, dict, length);
+      stream.dict = dict;
+      return stream;
+    },
+    filter: function Parser_filter(stream, dict, length) {
+      var filter = this.fetchIfRef(dict.get('Filter', 'F'));
+      var params = this.fetchIfRef(dict.get('DecodeParms', 'DP'));
+      if (isName(filter)) {
+        return this.makeFilter(stream, filter.name, length, params);
+      }
+
+      var maybeLength = length;
+      if (isArray(filter)) {
+        var filterArray = filter;
+        var paramsArray = params;
+        for (var i = 0, ii = filterArray.length; i < ii; ++i) {
+          filter = filterArray[i];
+          if (!isName(filter)) {
+            error('Bad filter name: ' + filter);
+          }
+
+          params = null;
+          if (isArray(paramsArray) && (i in paramsArray)) {
+            params = paramsArray[i];
+          }
+          stream = this.makeFilter(stream, filter.name, maybeLength, params);
+          // after the first stream the length variable is invalid
+          maybeLength = null;
+        }
+      }
+      return stream;
+    },
+    makeFilter: function Parser_makeFilter(stream, name, maybeLength, params) {
+      if (stream.dict.get('Length') === 0) {
+        return new NullStream(stream);
+      }
+      try {
+        if (params) {
+          params = this.fetchIfRef(params);
+        }
+        var xrefStreamStats = this.xref.stats.streamTypes;
+        if (name === 'FlateDecode' || name === 'Fl') {
+          xrefStreamStats[StreamType.FLATE] = true;
+          if (params) {
+            return new PredictorStream(new FlateStream(stream, maybeLength),
+                                       maybeLength, params);
+          }
+          return new FlateStream(stream, maybeLength);
+        }
+        if (name === 'LZWDecode' || name === 'LZW') {
+          xrefStreamStats[StreamType.LZW] = true;
+          var earlyChange = 1;
+          if (params) {
+            if (params.has('EarlyChange')) {
+              earlyChange = params.get('EarlyChange');
+            }
+            return new PredictorStream(
+              new LZWStream(stream, maybeLength, earlyChange),
+              maybeLength, params);
+          }
+          return new LZWStream(stream, maybeLength, earlyChange);
+        }
+        if (name === 'DCTDecode' || name === 'DCT') {
+          xrefStreamStats[StreamType.DCT] = true;
+          return new JpegStream(stream, maybeLength, stream.dict, this.xref);
+        }
+        if (name === 'JPXDecode' || name === 'JPX') {
+          xrefStreamStats[StreamType.JPX] = true;
+          return new JpxStream(stream, maybeLength, stream.dict);
+        }
+        if (name === 'ASCII85Decode' || name === 'A85') {
+          xrefStreamStats[StreamType.A85] = true;
+          return new Ascii85Stream(stream, maybeLength);
+        }
+        if (name === 'ASCIIHexDecode' || name === 'AHx') {
+          xrefStreamStats[StreamType.AHX] = true;
+          return new AsciiHexStream(stream, maybeLength);
+        }
+        if (name === 'CCITTFaxDecode' || name === 'CCF') {
+          xrefStreamStats[StreamType.CCF] = true;
+          return new CCITTFaxStream(stream, maybeLength, params);
+        }
+        if (name === 'RunLengthDecode' || name === 'RL') {
+          xrefStreamStats[StreamType.RL] = true;
+          return new RunLengthStream(stream, maybeLength);
+        }
+        if (name === 'JBIG2Decode') {
+          xrefStreamStats[StreamType.JBIG] = true;
+          return new Jbig2Stream(stream, maybeLength, stream.dict);
+        }
+        warn('filter "' + name + '" not supported yet');
+        return stream;
+      } catch (ex) {
+        if (ex instanceof MissingDataException) {
+          throw ex;
+        }
+        warn('Invalid stream: \"' + ex + '\"');
+        return new NullStream(stream);
+      }
+    }
+  };
+
+  return Parser;
+})();
+
+var Lexer = (function LexerClosure() {
+  function Lexer(stream, knownCommands) {
+    this.stream = stream;
+    this.nextChar();
+
+    // While lexing, we build up many strings one char at a time. Using += for
+    // this can result in lots of garbage strings. It's better to build an
+    // array of single-char strings and then join() them together at the end.
+    // And reusing a single array (i.e. |this.strBuf|) over and over for this
+    // purpose uses less memory than using a new array for each string.
+    this.strBuf = [];
+
+    // The PDFs might have "glued" commands with other commands, operands or
+    // literals, e.g. "q1". The knownCommands is a dictionary of the valid
+    // commands and their prefixes. The prefixes are built the following way:
+    // if there a command that is a prefix of the other valid command or
+    // literal (e.g. 'f' and 'false') the following prefixes must be included,
+    // 'fa', 'fal', 'fals'. The prefixes are not needed, if the command has no
+    // other commands or literals as a prefix. The knowCommands is optional.
+    this.knownCommands = knownCommands;
+  }
+
+  Lexer.isSpace = function Lexer_isSpace(ch) {
+    // Space is one of the following characters: SPACE, TAB, CR or LF.
+    return (ch === 0x20 || ch === 0x09 || ch === 0x0D || ch === 0x0A);
+  };
+
+  // A '1' in this array means the character is white space. A '1' or
+  // '2' means the character ends a name or command.
+  var specialChars = [
+    1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, // 0x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1x
+    1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, // 2x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, // 3x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 4x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 5x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 6x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, // 7x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9x
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ax
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // bx
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // cx
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // dx
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // ex
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0  // fx
+  ];
+
+  function toHexDigit(ch) {
+    if (ch >= 0x30 && ch <= 0x39) { // '0'-'9'
+      return ch & 0x0F;
+    }
+    if ((ch >= 0x41 && ch <= 0x46) || (ch >= 0x61 && ch <= 0x66)) {
+      // 'A'-'F', 'a'-'f'
+      return (ch & 0x0F) + 9;
+    }
+    return -1;
+  }
+
+  Lexer.prototype = {
+    nextChar: function Lexer_nextChar() {
+      return (this.currentChar = this.stream.getByte());
+    },
+    peekChar: function Lexer_peekChar() {
+      return this.stream.peekByte();
+    },
+    getNumber: function Lexer_getNumber() {
+      var ch = this.currentChar;
+      var eNotation = false;
+      var divideBy = 0; // different from 0 if it's a floating point value
+      var sign = 1;
+
+      if (ch === 0x2D) { // '-'
+        sign = -1;
+        ch = this.nextChar();
+      } else if (ch === 0x2B) { // '+'
+        ch = this.nextChar();
+      }
+      if (ch === 0x2E) { // '.'
+        divideBy = 10;
+        ch = this.nextChar();
+      }
+      if (ch < 0x30 || ch > 0x39) { // '0' - '9'
+        error('Invalid number: ' + String.fromCharCode(ch));
+        return 0;
+      }
+
+      var baseValue = ch - 0x30; // '0'
+      var powerValue = 0;
+      var powerValueSign = 1;
+
+      while ((ch = this.nextChar()) >= 0) {
+        if (0x30 <= ch && ch <= 0x39) { // '0' - '9'
+          var currentDigit = ch - 0x30; // '0'
+          if (eNotation) { // We are after an 'e' or 'E'
+            powerValue = powerValue * 10 + currentDigit;
+          } else {
+            if (divideBy !== 0) { // We are after a point
+              divideBy *= 10;
+            }
+            baseValue = baseValue * 10 + currentDigit;
+          }
+        } else if (ch === 0x2E) { // '.'
+          if (divideBy === 0) {
+            divideBy = 1;
+          } else {
+            // A number can have only one '.'
+            break;
+          }
+        } else if (ch === 0x2D) { // '-'
+          // ignore minus signs in the middle of numbers to match
+          // Adobe's behavior
+          warn('Badly formated number');
+        } else if (ch === 0x45 || ch === 0x65) { // 'E', 'e'
+          // 'E' can be either a scientific notation or the beginning of a new
+          // operator
+          ch = this.peekChar();
+          if (ch === 0x2B || ch === 0x2D) { // '+', '-'
+            powerValueSign = (ch === 0x2D) ? -1 : 1;
+            this.nextChar(); // Consume the sign character
+          } else if (ch < 0x30 || ch > 0x39) { // '0' - '9'
+            // The 'E' must be the beginning of a new operator
+            break;
+          }
+          eNotation = true;
+        } else {
+          // the last character doesn't belong to us
+          break;
+        }
+      }
+
+      if (divideBy !== 0) {
+        baseValue /= divideBy;
+      }
+      if (eNotation) {
+        baseValue *= Math.pow(10, powerValueSign * powerValue);
+      }
+      return sign * baseValue;
+    },
+    getString: function Lexer_getString() {
+      var numParen = 1;
+      var done = false;
+      var strBuf = this.strBuf;
+      strBuf.length = 0;
+
+      var ch = this.nextChar();
+      while (true) {
+        var charBuffered = false;
+        switch (ch | 0) {
+          case -1:
+            warn('Unterminated string');
+            done = true;
+            break;
+          case 0x28: // '('
+            ++numParen;
+            strBuf.push('(');
+            break;
+          case 0x29: // ')'
+            if (--numParen === 0) {
+              this.nextChar(); // consume strings ')'
+              done = true;
+            } else {
+              strBuf.push(')');
+            }
+            break;
+          case 0x5C: // '\\'
+            ch = this.nextChar();
+            switch (ch) {
+              case -1:
+                warn('Unterminated string');
+                done = true;
+                break;
+              case 0x6E: // 'n'
+                strBuf.push('\n');
+                break;
+              case 0x72: // 'r'
+                strBuf.push('\r');
+                break;
+              case 0x74: // 't'
+                strBuf.push('\t');
+                break;
+              case 0x62: // 'b'
+                strBuf.push('\b');
+                break;
+              case 0x66: // 'f'
+                strBuf.push('\f');
+                break;
+              case 0x5C: // '\'
+              case 0x28: // '('
+              case 0x29: // ')'
+                strBuf.push(String.fromCharCode(ch));
+                break;
+              case 0x30: case 0x31: case 0x32: case 0x33: // '0'-'3'
+              case 0x34: case 0x35: case 0x36: case 0x37: // '4'-'7'
+                var x = ch & 0x0F;
+                ch = this.nextChar();
+                charBuffered = true;
+                if (ch >= 0x30 && ch <= 0x37) { // '0'-'7'
+                  x = (x << 3) + (ch & 0x0F);
+                  ch = this.nextChar();
+                  if (ch >= 0x30 && ch <= 0x37) {  // '0'-'7'
+                    charBuffered = false;
+                    x = (x << 3) + (ch & 0x0F);
+                  }
+                }
+                strBuf.push(String.fromCharCode(x));
+                break;
+              case 0x0D: // CR
+                if (this.peekChar() === 0x0A) { // LF
+                  this.nextChar();
+                }
+                break;
+              case 0x0A: // LF
+                break;
+              default:
+                strBuf.push(String.fromCharCode(ch));
+                break;
+            }
+            break;
+          default:
+            strBuf.push(String.fromCharCode(ch));
+            break;
+        }
+        if (done) {
+          break;
+        }
+        if (!charBuffered) {
+          ch = this.nextChar();
+        }
+      }
+      return strBuf.join('');
+    },
+    getName: function Lexer_getName() {
+      var ch;
+      var strBuf = this.strBuf;
+      strBuf.length = 0;
+      while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {
+        if (ch === 0x23) { // '#'
+          ch = this.nextChar();
+          var x = toHexDigit(ch);
+          if (x !== -1) {
+            var x2 = toHexDigit(this.nextChar());
+            if (x2 === -1) {
+              error('Illegal digit in hex char in name: ' + x2);
+            }
+            strBuf.push(String.fromCharCode((x << 4) | x2));
+          } else {
+            strBuf.push('#', String.fromCharCode(ch));
+          }
+        } else {
+          strBuf.push(String.fromCharCode(ch));
+        }
+      }
+      if (strBuf.length > 128) {
+        error('Warning: name token is longer than allowed by the spec: ' +
+              strBuf.length);
+      }
+      return Name.get(strBuf.join(''));
+    },
+    getHexString: function Lexer_getHexString() {
+      var strBuf = this.strBuf;
+      strBuf.length = 0;
+      var ch = this.currentChar;
+      var isFirstHex = true;
+      var firstDigit;
+      var secondDigit;
+      while (true) {
+        if (ch < 0) {
+          warn('Unterminated hex string');
+          break;
+        } else if (ch === 0x3E) { // '>'
+          this.nextChar();
+          break;
+        } else if (specialChars[ch] === 1) {
+          ch = this.nextChar();
+          continue;
+        } else {
+          if (isFirstHex) {
+            firstDigit = toHexDigit(ch);
+            if (firstDigit === -1) {
+              warn('Ignoring invalid character "' + ch + '" in hex string');
+              ch = this.nextChar();
+              continue;
+            }
+          } else {
+            secondDigit = toHexDigit(ch);
+            if (secondDigit === -1) {
+              warn('Ignoring invalid character "' + ch + '" in hex string');
+              ch = this.nextChar();
+              continue;
+            }
+            strBuf.push(String.fromCharCode((firstDigit << 4) | secondDigit));
+          }
+          isFirstHex = !isFirstHex;
+          ch = this.nextChar();
+        }
+      }
+      return strBuf.join('');
+    },
+    getObj: function Lexer_getObj() {
+      // skip whitespace and comments
+      var comment = false;
+      var ch = this.currentChar;
+      while (true) {
+        if (ch < 0) {
+          return EOF;
+        }
+        if (comment) {
+          if (ch === 0x0A || ch === 0x0D) { // LF, CR
+            comment = false;
+          }
+        } else if (ch === 0x25) { // '%'
+          comment = true;
+        } else if (specialChars[ch] !== 1) {
+          break;
+        }
+        ch = this.nextChar();
+      }
+
+      // start reading token
+      switch (ch | 0) {
+        case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: // '0'-'4'
+        case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: // '5'-'9'
+        case 0x2B: case 0x2D: case 0x2E: // '+', '-', '.'
+          return this.getNumber();
+        case 0x28: // '('
+          return this.getString();
+        case 0x2F: // '/'
+          return this.getName();
+        // array punctuation
+        case 0x5B: // '['
+          this.nextChar();
+          return Cmd.get('[');
+        case 0x5D: // ']'
+          this.nextChar();
+          return Cmd.get(']');
+        // hex string or dict punctuation
+        case 0x3C: // '<'
+          ch = this.nextChar();
+          if (ch === 0x3C) {
+            // dict punctuation
+            this.nextChar();
+            return Cmd.get('<<');
+          }
+          return this.getHexString();
+        // dict punctuation
+        case 0x3E: // '>'
+          ch = this.nextChar();
+          if (ch === 0x3E) {
+            this.nextChar();
+            return Cmd.get('>>');
+          }
+          return Cmd.get('>');
+        case 0x7B: // '{'
+          this.nextChar();
+          return Cmd.get('{');
+        case 0x7D: // '}'
+          this.nextChar();
+          return Cmd.get('}');
+        case 0x29: // ')'
+          error('Illegal character: ' + ch);
+          break;
+      }
+
+      // command
+      var str = String.fromCharCode(ch);
+      var knownCommands = this.knownCommands;
+      var knownCommandFound = knownCommands && knownCommands[str] !== undefined;
+      while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {
+        // stop if known command is found and next character does not make
+        // the str a command
+        var possibleCommand = str + String.fromCharCode(ch);
+        if (knownCommandFound && knownCommands[possibleCommand] === undefined) {
+          break;
+        }
+        if (str.length === 128) {
+          error('Command token too long: ' + str.length);
+        }
+        str = possibleCommand;
+        knownCommandFound = knownCommands && knownCommands[str] !== undefined;
+      }
+      if (str === 'true') {
+        return true;
+      }
+      if (str === 'false') {
+        return false;
+      }
+      if (str === 'null') {
+        return null;
+      }
+      return Cmd.get(str);
+    },
+    skipToNextLine: function Lexer_skipToNextLine() {
+      var ch = this.currentChar;
+      while (ch >= 0) {
+        if (ch === 0x0D) { // CR
+          ch = this.nextChar();
+          if (ch === 0x0A) { // LF
+            this.nextChar();
+          }
+          break;
+        } else if (ch === 0x0A) { // LF
+          this.nextChar();
+          break;
+        }
+        ch = this.nextChar();
+      }
+    }
+  };
+
+  return Lexer;
+})();
+
+var Linearization = {
+  create: function LinearizationCreate(stream) {
+    function getInt(name, allowZeroValue) {
+      var obj = linDict.get(name);
+      if (isInt(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) {
+        return obj;
+      }
+      throw new Error('The "' + name + '" parameter in the linearization ' +
+                      'dictionary is invalid.');
+    }
+    function getHints() {
+      var hints = linDict.get('H'), hintsLength, item;
+      if (isArray(hints) &&
+          ((hintsLength = hints.length) === 2 || hintsLength === 4)) {
+        for (var index = 0; index < hintsLength; index++) {
+          if (!(isInt(item = hints[index]) && item > 0)) {
+            throw new Error('Hint (' + index +
+                            ') in the linearization dictionary is invalid.');
+          }
+        }
+        return hints;
+      }
+      throw new Error('Hint array in the linearization dictionary is invalid.');
+    }
+    var parser = new Parser(new Lexer(stream), false, null);
+    var obj1 = parser.getObj();
+    var obj2 = parser.getObj();
+    var obj3 = parser.getObj();
+    var linDict = parser.getObj();
+    var obj, length;
+    if (!(isInt(obj1) && isInt(obj2) && isCmd(obj3, 'obj') && isDict(linDict) &&
+          isNum(obj = linDict.get('Linearized')) && obj > 0)) {
+      return null; // No valid linearization dictionary found.
+    } else if ((length = getInt('L')) !== stream.length) {
+      throw new Error('The "L" parameter in the linearization dictionary ' +
+                      'does not equal the stream length.');
+    }
+    return {
+      length: length,
+      hints: getHints(),
+      objectNumberFirst: getInt('O'),
+      endFirst: getInt('E'),
+      numPages: getInt('N'),
+      mainXRefEntriesOffset: getInt('T'),
+      pageFirst: (linDict.has('P') ? getInt('P', true) : 0)
+    };
+  }
+};
+
+
+var PostScriptParser = (function PostScriptParserClosure() {
+  function PostScriptParser(lexer) {
+    this.lexer = lexer;
+    this.operators = [];
+    this.token = null;
+    this.prev = null;
+  }
+  PostScriptParser.prototype = {
+    nextToken: function PostScriptParser_nextToken() {
+      this.prev = this.token;
+      this.token = this.lexer.getToken();
+    },
+    accept: function PostScriptParser_accept(type) {
+      if (this.token.type === type) {
+        this.nextToken();
+        return true;
+      }
+      return false;
+    },
+    expect: function PostScriptParser_expect(type) {
+      if (this.accept(type)) {
+        return true;
+      }
+      error('Unexpected symbol: found ' + this.token.type + ' expected ' +
+        type + '.');
+    },
+    parse: function PostScriptParser_parse() {
+      this.nextToken();
+      this.expect(PostScriptTokenTypes.LBRACE);
+      this.parseBlock();
+      this.expect(PostScriptTokenTypes.RBRACE);
+      return this.operators;
+    },
+    parseBlock: function PostScriptParser_parseBlock() {
+      while (true) {
+        if (this.accept(PostScriptTokenTypes.NUMBER)) {
+          this.operators.push(this.prev.value);
+        } else if (this.accept(PostScriptTokenTypes.OPERATOR)) {
+          this.operators.push(this.prev.value);
+        } else if (this.accept(PostScriptTokenTypes.LBRACE)) {
+          this.parseCondition();
+        } else {
+          return;
+        }
+      }
+    },
+    parseCondition: function PostScriptParser_parseCondition() {
+      // Add two place holders that will be updated later
+      var conditionLocation = this.operators.length;
+      this.operators.push(null, null);
+
+      this.parseBlock();
+      this.expect(PostScriptTokenTypes.RBRACE);
+      if (this.accept(PostScriptTokenTypes.IF)) {
+        // The true block is right after the 'if' so it just falls through on
+        // true else it jumps and skips the true block.
+        this.operators[conditionLocation] = this.operators.length;
+        this.operators[conditionLocation + 1] = 'jz';
+      } else if (this.accept(PostScriptTokenTypes.LBRACE)) {
+        var jumpLocation = this.operators.length;
+        this.operators.push(null, null);
+        var endOfTrue = this.operators.length;
+        this.parseBlock();
+        this.expect(PostScriptTokenTypes.RBRACE);
+        this.expect(PostScriptTokenTypes.IFELSE);
+        // The jump is added at the end of the true block to skip the false
+        // block.
+        this.operators[jumpLocation] = this.operators.length;
+        this.operators[jumpLocation + 1] = 'j';
+
+        this.operators[conditionLocation] = endOfTrue;
+        this.operators[conditionLocation + 1] = 'jz';
+      } else {
+        error('PS Function: error parsing conditional.');
+      }
+    }
+  };
+  return PostScriptParser;
+})();
+
+var PostScriptTokenTypes = {
+  LBRACE: 0,
+  RBRACE: 1,
+  NUMBER: 2,
+  OPERATOR: 3,
+  IF: 4,
+  IFELSE: 5
+};
+
+var PostScriptToken = (function PostScriptTokenClosure() {
+  function PostScriptToken(type, value) {
+    this.type = type;
+    this.value = value;
+  }
+
+  var opCache = {};
+
+  PostScriptToken.getOperator = function PostScriptToken_getOperator(op) {
+    var opValue = opCache[op];
+    if (opValue) {
+      return opValue;
+    }
+    return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op);
+  };
+
+  PostScriptToken.LBRACE = new PostScriptToken(PostScriptTokenTypes.LBRACE,
+    '{');
+  PostScriptToken.RBRACE = new PostScriptToken(PostScriptTokenTypes.RBRACE,
+    '}');
+  PostScriptToken.IF = new PostScriptToken(PostScriptTokenTypes.IF, 'IF');
+  PostScriptToken.IFELSE = new PostScriptToken(PostScriptTokenTypes.IFELSE,
+    'IFELSE');
+  return PostScriptToken;
+})();
+
+var PostScriptLexer = (function PostScriptLexerClosure() {
+  function PostScriptLexer(stream) {
+    this.stream = stream;
+    this.nextChar();
+
+    this.strBuf = [];
+  }
+  PostScriptLexer.prototype = {
+    nextChar: function PostScriptLexer_nextChar() {
+      return (this.currentChar = this.stream.getByte());
+    },
+    getToken: function PostScriptLexer_getToken() {
+      var comment = false;
+      var ch = this.currentChar;
+
+      // skip comments
+      while (true) {
+        if (ch < 0) {
+          return EOF;
+        }
+
+        if (comment) {
+          if (ch === 0x0A || ch === 0x0D) {
+            comment = false;
+          }
+        } else if (ch === 0x25) { // '%'
+          comment = true;
+        } else if (!Lexer.isSpace(ch)) {
+          break;
+        }
+        ch = this.nextChar();
+      }
+      switch (ch | 0) {
+        case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: // '0'-'4'
+        case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: // '5'-'9'
+        case 0x2B: case 0x2D: case 0x2E: // '+', '-', '.'
+          return new PostScriptToken(PostScriptTokenTypes.NUMBER,
+                                     this.getNumber());
+        case 0x7B: // '{'
+          this.nextChar();
+          return PostScriptToken.LBRACE;
+        case 0x7D: // '}'
+          this.nextChar();
+          return PostScriptToken.RBRACE;
+      }
+      // operator
+      var strBuf = this.strBuf;
+      strBuf.length = 0;
+      strBuf[0] = String.fromCharCode(ch);
+
+      while ((ch = this.nextChar()) >= 0 && // and 'A'-'Z', 'a'-'z'
+             ((ch >= 0x41 && ch <= 0x5A) || (ch >= 0x61 && ch <= 0x7A))) {
+        strBuf.push(String.fromCharCode(ch));
+      }
+      var str = strBuf.join('');
+      switch (str.toLowerCase()) {
+        case 'if':
+          return PostScriptToken.IF;
+        case 'ifelse':
+          return PostScriptToken.IFELSE;
+        default:
+          return PostScriptToken.getOperator(str);
+      }
+    },
+    getNumber: function PostScriptLexer_getNumber() {
+      var ch = this.currentChar;
+      var strBuf = this.strBuf;
+      strBuf.length = 0;
+      strBuf[0] = String.fromCharCode(ch);
+
+      while ((ch = this.nextChar()) >= 0) {
+        if ((ch >= 0x30 && ch <= 0x39) || // '0'-'9'
+            ch === 0x2D || ch === 0x2E) { // '-', '.'
+          strBuf.push(String.fromCharCode(ch));
+        } else {
+          break;
+        }
+      }
+      var value = parseFloat(strBuf.join(''));
+      if (isNaN(value)) {
+        error('Invalid floating point number: ' + value);
+      }
+      return value;
+    }
+  };
+  return PostScriptLexer;
+})();
+
+
+var Stream = (function StreamClosure() {
+  function Stream(arrayBuffer, start, length, dict) {
+    this.bytes = (arrayBuffer instanceof Uint8Array ?
+                  arrayBuffer : new Uint8Array(arrayBuffer));
+    this.start = start || 0;
+    this.pos = this.start;
+    this.end = (start + length) || this.bytes.length;
+    this.dict = dict;
+  }
+
+  // required methods for a stream. if a particular stream does not
+  // implement these, an error should be thrown
+  Stream.prototype = {
+    get length() {
+      return this.end - this.start;
+    },
+    get isEmpty() {
+      return this.length === 0;
+    },
+    getByte: function Stream_getByte() {
+      if (this.pos >= this.end) {
+        return -1;
+      }
+      return this.bytes[this.pos++];
+    },
+    getUint16: function Stream_getUint16() {
+      var b0 = this.getByte();
+      var b1 = this.getByte();
+      if (b0 === -1 || b1 === -1) {
+        return -1;
+      }
+      return (b0 << 8) + b1;
+    },
+    getInt32: function Stream_getInt32() {
+      var b0 = this.getByte();
+      var b1 = this.getByte();
+      var b2 = this.getByte();
+      var b3 = this.getByte();
+      return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
+    },
+    // returns subarray of original buffer
+    // should only be read
+    getBytes: function Stream_getBytes(length) {
+      var bytes = this.bytes;
+      var pos = this.pos;
+      var strEnd = this.end;
+
+      if (!length) {
+        return bytes.subarray(pos, strEnd);
+      }
+      var end = pos + length;
+      if (end > strEnd) {
+        end = strEnd;
+      }
+      this.pos = end;
+      return bytes.subarray(pos, end);
+    },
+    peekByte: function Stream_peekByte() {
+      var peekedByte = this.getByte();
+      this.pos--;
+      return peekedByte;
+    },
+    peekBytes: function Stream_peekBytes(length) {
+      var bytes = this.getBytes(length);
+      this.pos -= bytes.length;
+      return bytes;
+    },
+    skip: function Stream_skip(n) {
+      if (!n) {
+        n = 1;
+      }
+      this.pos += n;
+    },
+    reset: function Stream_reset() {
+      this.pos = this.start;
+    },
+    moveStart: function Stream_moveStart() {
+      this.start = this.pos;
+    },
+    makeSubStream: function Stream_makeSubStream(start, length, dict) {
+      return new Stream(this.bytes.buffer, start, length, dict);
+    },
+    isStream: true
+  };
+
+  return Stream;
+})();
+
+var StringStream = (function StringStreamClosure() {
+  function StringStream(str) {
+    var length = str.length;
+    var bytes = new Uint8Array(length);
+    for (var n = 0; n < length; ++n) {
+      bytes[n] = str.charCodeAt(n);
+    }
+    Stream.call(this, bytes);
+  }
+
+  StringStream.prototype = Stream.prototype;
+
+  return StringStream;
+})();
+
+// super class for the decoding streams
+var DecodeStream = (function DecodeStreamClosure() {
+  // Lots of DecodeStreams are created whose buffers are never used.  For these
+  // we share a single empty buffer. This is (a) space-efficient and (b) avoids
+  // having special cases that would be required if we used |null| for an empty
+  // buffer.
+  var emptyBuffer = new Uint8Array(0);
+
+  function DecodeStream(maybeMinBufferLength) {
+    this.pos = 0;
+    this.bufferLength = 0;
+    this.eof = false;
+    this.buffer = emptyBuffer;
+    this.minBufferLength = 512;
+    if (maybeMinBufferLength) {
+      // Compute the first power of two that is as big as maybeMinBufferLength.
+      while (this.minBufferLength < maybeMinBufferLength) {
+        this.minBufferLength *= 2;
+      }
+    }
+  }
+
+  DecodeStream.prototype = {
+    get isEmpty() {
+      while (!this.eof && this.bufferLength === 0) {
+        this.readBlock();
+      }
+      return this.bufferLength === 0;
+    },
+    ensureBuffer: function DecodeStream_ensureBuffer(requested) {
+      var buffer = this.buffer;
+      if (requested <= buffer.byteLength) {
+        return buffer;
+      }
+      var size = this.minBufferLength;
+      while (size < requested) {
+        size *= 2;
+      }
+      var buffer2 = new Uint8Array(size);
+      buffer2.set(buffer);
+      return (this.buffer = buffer2);
+    },
+    getByte: function DecodeStream_getByte() {
+      var pos = this.pos;
+      while (this.bufferLength <= pos) {
+        if (this.eof) {
+          return -1;
+        }
+        this.readBlock();
+      }
+      return this.buffer[this.pos++];
+    },
+    getUint16: function DecodeStream_getUint16() {
+      var b0 = this.getByte();
+      var b1 = this.getByte();
+      if (b0 === -1 || b1 === -1) {
+        return -1;
+      }
+      return (b0 << 8) + b1;
+    },
+    getInt32: function DecodeStream_getInt32() {
+      var b0 = this.getByte();
+      var b1 = this.getByte();
+      var b2 = this.getByte();
+      var b3 = this.getByte();
+      return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
+    },
+    getBytes: function DecodeStream_getBytes(length) {
+      var end, pos = this.pos;
+
+      if (length) {
+        this.ensureBuffer(pos + length);
+        end = pos + length;
+
+        while (!this.eof && this.bufferLength < end) {
+          this.readBlock();
+        }
+        var bufEnd = this.bufferLength;
+        if (end > bufEnd) {
+          end = bufEnd;
+        }
+      } else {
+        while (!this.eof) {
+          this.readBlock();
+        }
+        end = this.bufferLength;
+      }
+
+      this.pos = end;
+      return this.buffer.subarray(pos, end);
+    },
+    peekByte: function DecodeStream_peekByte() {
+      var peekedByte = this.getByte();
+      this.pos--;
+      return peekedByte;
+    },
+    peekBytes: function DecodeStream_peekBytes(length) {
+      var bytes = this.getBytes(length);
+      this.pos -= bytes.length;
+      return bytes;
+    },
+    makeSubStream: function DecodeStream_makeSubStream(start, length, dict) {
+      var end = start + length;
+      while (this.bufferLength <= end && !this.eof) {
+        this.readBlock();
+      }
+      return new Stream(this.buffer, start, length, dict);
+    },
+    skip: function DecodeStream_skip(n) {
+      if (!n) {
+        n = 1;
+      }
+      this.pos += n;
+    },
+    reset: function DecodeStream_reset() {
+      this.pos = 0;
+    },
+    getBaseStreams: function DecodeStream_getBaseStreams() {
+      if (this.str && this.str.getBaseStreams) {
+        return this.str.getBaseStreams();
+      }
+      return [];
+    }
+  };
+
+  return DecodeStream;
+})();
+
+var StreamsSequenceStream = (function StreamsSequenceStreamClosure() {
+  function StreamsSequenceStream(streams) {
+    this.streams = streams;
+    DecodeStream.call(this, /* maybeLength = */ null);
+  }
+
+  StreamsSequenceStream.prototype = Object.create(DecodeStream.prototype);
+
+  StreamsSequenceStream.prototype.readBlock =
+      function streamSequenceStreamReadBlock() {
+
+    var streams = this.streams;
+    if (streams.length === 0) {
+      this.eof = true;
+      return;
+    }
+    var stream = streams.shift();
+    var chunk = stream.getBytes();
+    var bufferLength = this.bufferLength;
+    var newLength = bufferLength + chunk.length;
+    var buffer = this.ensureBuffer(newLength);
+    buffer.set(chunk, bufferLength);
+    this.bufferLength = newLength;
+  };
+
+  StreamsSequenceStream.prototype.getBaseStreams =
+    function StreamsSequenceStream_getBaseStreams() {
+
+    var baseStreams = [];
+    for (var i = 0, ii = this.streams.length; i < ii; i++) {
+      var stream = this.streams[i];
+      if (stream.getBaseStreams) {
+        Util.appendToArray(baseStreams, stream.getBaseStreams());
+      }
+    }
+    return baseStreams;
+  };
+
+  return StreamsSequenceStream;
+})();
+
+var FlateStream = (function FlateStreamClosure() {
+  var codeLenCodeMap = new Int32Array([
+    16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15
+  ]);
+
+  var lengthDecode = new Int32Array([
+    0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a,
+    0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f,
+    0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073,
+    0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102
+  ]);
+
+  var distDecode = new Int32Array([
+    0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d,
+    0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1,
+    0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01,
+    0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001
+  ]);
+
+  var fixedLitCodeTab = [new Int32Array([
+    0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0,
+    0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0,
+    0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0,
+    0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0,
+    0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8,
+    0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8,
+    0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8,
+    0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8,
+    0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4,
+    0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4,
+    0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4,
+    0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4,
+    0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc,
+    0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec,
+    0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc,
+    0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc,
+    0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2,
+    0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2,
+    0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2,
+    0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2,
+    0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca,
+    0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea,
+    0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da,
+    0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa,
+    0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6,
+    0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6,
+    0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6,
+    0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6,
+    0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce,
+    0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee,
+    0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de,
+    0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe,
+    0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1,
+    0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1,
+    0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1,
+    0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1,
+    0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9,
+    0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9,
+    0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9,
+    0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9,
+    0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5,
+    0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5,
+    0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5,
+    0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5,
+    0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd,
+    0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed,
+    0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd,
+    0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd,
+    0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3,
+    0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3,
+    0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3,
+    0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3,
+    0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb,
+    0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb,
+    0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db,
+    0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb,
+    0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7,
+    0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7,
+    0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7,
+    0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7,
+    0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf,
+    0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef,
+    0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df,
+    0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff
+  ]), 9];
+
+  var fixedDistCodeTab = [new Int32Array([
+    0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c,
+    0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000,
+    0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d,
+    0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000
+  ]), 5];
+
+  function FlateStream(str, maybeLength) {
+    this.str = str;
+    this.dict = str.dict;
+
+    var cmf = str.getByte();
+    var flg = str.getByte();
+    if (cmf === -1 || flg === -1) {
+      error('Invalid header in flate stream: ' + cmf + ', ' + flg);
+    }
+    if ((cmf & 0x0f) !== 0x08) {
+      error('Unknown compression method in flate stream: ' + cmf + ', ' + flg);
+    }
+    if ((((cmf << 8) + flg) % 31) !== 0) {
+      error('Bad FCHECK in flate stream: ' + cmf + ', ' + flg);
+    }
+    if (flg & 0x20) {
+      error('FDICT bit set in flate stream: ' + cmf + ', ' + flg);
+    }
+
+    this.codeSize = 0;
+    this.codeBuf = 0;
+
+    DecodeStream.call(this, maybeLength);
+  }
+
+  FlateStream.prototype = Object.create(DecodeStream.prototype);
+
+  FlateStream.prototype.getBits = function FlateStream_getBits(bits) {
+    var str = this.str;
+    var codeSize = this.codeSize;
+    var codeBuf = this.codeBuf;
+
+    var b;
+    while (codeSize < bits) {
+      if ((b = str.getByte()) === -1) {
+        error('Bad encoding in flate stream');
+      }
+      codeBuf |= b << codeSize;
+      codeSize += 8;
+    }
+    b = codeBuf & ((1 << bits) - 1);
+    this.codeBuf = codeBuf >> bits;
+    this.codeSize = codeSize -= bits;
+
+    return b;
+  };
+
+  FlateStream.prototype.getCode = function FlateStream_getCode(table) {
+    var str = this.str;
+    var codes = table[0];
+    var maxLen = table[1];
+    var codeSize = this.codeSize;
+    var codeBuf = this.codeBuf;
+
+    var b;
+    while (codeSize < maxLen) {
+      if ((b = str.getByte()) === -1) {
+        // premature end of stream. code might however still be valid.
+        // codeSize < codeLen check below guards against incomplete codeVal.
+        break;
+      }
+      codeBuf |= (b << codeSize);
+      codeSize += 8;
+    }
+    var code = codes[codeBuf & ((1 << maxLen) - 1)];
+    var codeLen = code >> 16;
+    var codeVal = code & 0xffff;
+    if (codeLen < 1 || codeSize < codeLen) {
+      error('Bad encoding in flate stream');
+    }
+    this.codeBuf = (codeBuf >> codeLen);
+    this.codeSize = (codeSize - codeLen);
+    return codeVal;
+  };
+
+  FlateStream.prototype.generateHuffmanTable =
+      function flateStreamGenerateHuffmanTable(lengths) {
+    var n = lengths.length;
+
+    // find max code length
+    var maxLen = 0;
+    var i;
+    for (i = 0; i < n; ++i) {
+      if (lengths[i] > maxLen) {
+        maxLen = lengths[i];
+      }
+    }
+
+    // build the table
+    var size = 1 << maxLen;
+    var codes = new Int32Array(size);
+    for (var len = 1, code = 0, skip = 2;
+         len <= maxLen;
+         ++len, code <<= 1, skip <<= 1) {
+      for (var val = 0; val < n; ++val) {
+        if (lengths[val] === len) {
+          // bit-reverse the code
+          var code2 = 0;
+          var t = code;
+          for (i = 0; i < len; ++i) {
+            code2 = (code2 << 1) | (t & 1);
+            t >>= 1;
+          }
+
+          // fill the table entries
+          for (i = code2; i < size; i += skip) {
+            codes[i] = (len << 16) | val;
+          }
+          ++code;
+        }
+      }
+    }
+
+    return [codes, maxLen];
+  };
+
+  FlateStream.prototype.readBlock = function FlateStream_readBlock() {
+    var buffer, len;
+    var str = this.str;
+    // read block header
+    var hdr = this.getBits(3);
+    if (hdr & 1) {
+      this.eof = true;
+    }
+    hdr >>= 1;
+
+    if (hdr === 0) { // uncompressed block
+      var b;
+
+      if ((b = str.getByte()) === -1) {
+        error('Bad block header in flate stream');
+      }
+      var blockLen = b;
+      if ((b = str.getByte()) === -1) {
+        error('Bad block header in flate stream');
+      }
+      blockLen |= (b << 8);
+      if ((b = str.getByte()) === -1) {
+        error('Bad block header in flate stream');
+      }
+      var check = b;
+      if ((b = str.getByte()) === -1) {
+        error('Bad block header in flate stream');
+      }
+      check |= (b << 8);
+      if (check !== (~blockLen & 0xffff) &&
+          (blockLen !== 0 || check !== 0)) {
+        // Ignoring error for bad "empty" block (see issue 1277)
+        error('Bad uncompressed block length in flate stream');
+      }
+
+      this.codeBuf = 0;
+      this.codeSize = 0;
+
+      var bufferLength = this.bufferLength;
+      buffer = this.ensureBuffer(bufferLength + blockLen);
+      var end = bufferLength + blockLen;
+      this.bufferLength = end;
+      if (blockLen === 0) {
+        if (str.peekByte() === -1) {
+          this.eof = true;
+        }
+      } else {
+        for (var n = bufferLength; n < end; ++n) {
+          if ((b = str.getByte()) === -1) {
+            this.eof = true;
+            break;
+          }
+          buffer[n] = b;
+        }
+      }
+      return;
+    }
+
+    var litCodeTable;
+    var distCodeTable;
+    if (hdr === 1) { // compressed block, fixed codes
+      litCodeTable = fixedLitCodeTab;
+      distCodeTable = fixedDistCodeTab;
+    } else if (hdr === 2) { // compressed block, dynamic codes
+      var numLitCodes = this.getBits(5) + 257;
+      var numDistCodes = this.getBits(5) + 1;
+      var numCodeLenCodes = this.getBits(4) + 4;
+
+      // build the code lengths code table
+      var codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length);
+
+      var i;
+      for (i = 0; i < numCodeLenCodes; ++i) {
+        codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3);
+      }
+      var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);
+
+      // build the literal and distance code tables
+      len = 0;
+      i = 0;
+      var codes = numLitCodes + numDistCodes;
+      var codeLengths = new Uint8Array(codes);
+      var bitsLength, bitsOffset, what;
+      while (i < codes) {
+        var code = this.getCode(codeLenCodeTab);
+        if (code === 16) {
+          bitsLength = 2; bitsOffset = 3; what = len;
+        } else if (code === 17) {
+          bitsLength = 3; bitsOffset = 3; what = (len = 0);
+        } else if (code === 18) {
+          bitsLength = 7; bitsOffset = 11; what = (len = 0);
+        } else {
+          codeLengths[i++] = len = code;
+          continue;
+        }
+
+        var repeatLength = this.getBits(bitsLength) + bitsOffset;
+        while (repeatLength-- > 0) {
+          codeLengths[i++] = what;
+        }
+      }
+
+      litCodeTable =
+        this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes));
+      distCodeTable =
+        this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes));
+    } else {
+      error('Unknown block type in flate stream');
+    }
+
+    buffer = this.buffer;
+    var limit = buffer ? buffer.length : 0;
+    var pos = this.bufferLength;
+    while (true) {
+      var code1 = this.getCode(litCodeTable);
+      if (code1 < 256) {
+        if (pos + 1 >= limit) {
+          buffer = this.ensureBuffer(pos + 1);
+          limit = buffer.length;
+        }
+        buffer[pos++] = code1;
+        continue;
+      }
+      if (code1 === 256) {
+        this.bufferLength = pos;
+        return;
+      }
+      code1 -= 257;
+      code1 = lengthDecode[code1];
+      var code2 = code1 >> 16;
+      if (code2 > 0) {
+        code2 = this.getBits(code2);
+      }
+      len = (code1 & 0xffff) + code2;
+      code1 = this.getCode(distCodeTable);
+      code1 = distDecode[code1];
+      code2 = code1 >> 16;
+      if (code2 > 0) {
+        code2 = this.getBits(code2);
+      }
+      var dist = (code1 & 0xffff) + code2;
+      if (pos + len >= limit) {
+        buffer = this.ensureBuffer(pos + len);
+        limit = buffer.length;
+      }
+      for (var k = 0; k < len; ++k, ++pos) {
+        buffer[pos] = buffer[pos - dist];
+      }
+    }
+  };
+
+  return FlateStream;
+})();
+
+var PredictorStream = (function PredictorStreamClosure() {
+  function PredictorStream(str, maybeLength, params) {
+    var predictor = this.predictor = params.get('Predictor') || 1;
+
+    if (predictor <= 1) {
+      return str; // no prediction
+    }
+    if (predictor !== 2 && (predictor < 10 || predictor > 15)) {
+      error('Unsupported predictor: ' + predictor);
+    }
+
+    if (predictor === 2) {
+      this.readBlock = this.readBlockTiff;
+    } else {
+      this.readBlock = this.readBlockPng;
+    }
+
+    this.str = str;
+    this.dict = str.dict;
+
+    var colors = this.colors = params.get('Colors') || 1;
+    var bits = this.bits = params.get('BitsPerComponent') || 8;
+    var columns = this.columns = params.get('Columns') || 1;
+
+    this.pixBytes = (colors * bits + 7) >> 3;
+    this.rowBytes = (columns * colors * bits + 7) >> 3;
+
+    DecodeStream.call(this, maybeLength);
+    return this;
+  }
+
+  PredictorStream.prototype = Object.create(DecodeStream.prototype);
+
+  PredictorStream.prototype.readBlockTiff =
+      function predictorStreamReadBlockTiff() {
+    var rowBytes = this.rowBytes;
+
+    var bufferLength = this.bufferLength;
+    var buffer = this.ensureBuffer(bufferLength + rowBytes);
+
+    var bits = this.bits;
+    var colors = this.colors;
+
+    var rawBytes = this.str.getBytes(rowBytes);
+    this.eof = !rawBytes.length;
+    if (this.eof) {
+      return;
+    }
+
+    var inbuf = 0, outbuf = 0;
+    var inbits = 0, outbits = 0;
+    var pos = bufferLength;
+    var i;
+
+    if (bits === 1) {
+      for (i = 0; i < rowBytes; ++i) {
+        var c = rawBytes[i];
+        inbuf = (inbuf << 8) | c;
+        // bitwise addition is exclusive or
+        // first shift inbuf and then add
+        buffer[pos++] = (c ^ (inbuf >> colors)) & 0xFF;
+        // truncate inbuf (assumes colors < 16)
+        inbuf &= 0xFFFF;
+      }
+    } else if (bits === 8) {
+      for (i = 0; i < colors; ++i) {
+        buffer[pos++] = rawBytes[i];
+      }
+      for (; i < rowBytes; ++i) {
+        buffer[pos] = buffer[pos - colors] + rawBytes[i];
+        pos++;
+      }
+    } else {
+      var compArray = new Uint8Array(colors + 1);
+      var bitMask = (1 << bits) - 1;
+      var j = 0, k = bufferLength;
+      var columns = this.columns;
+      for (i = 0; i < columns; ++i) {
+        for (var kk = 0; kk < colors; ++kk) {
+          if (inbits < bits) {
+            inbuf = (inbuf << 8) | (rawBytes[j++] & 0xFF);
+            inbits += 8;
+          }
+          compArray[kk] = (compArray[kk] +
+                           (inbuf >> (inbits - bits))) & bitMask;
+          inbits -= bits;
+          outbuf = (outbuf << bits) | compArray[kk];
+          outbits += bits;
+          if (outbits >= 8) {
+            buffer[k++] = (outbuf >> (outbits - 8)) & 0xFF;
+            outbits -= 8;
+          }
+        }
+      }
+      if (outbits > 0) {
+        buffer[k++] = (outbuf << (8 - outbits)) +
+                      (inbuf & ((1 << (8 - outbits)) - 1));
+      }
+    }
+    this.bufferLength += rowBytes;
+  };
+
+  PredictorStream.prototype.readBlockPng =
+      function predictorStreamReadBlockPng() {
+
+    var rowBytes = this.rowBytes;
+    var pixBytes = this.pixBytes;
+
+    var predictor = this.str.getByte();
+    var rawBytes = this.str.getBytes(rowBytes);
+    this.eof = !rawBytes.length;
+    if (this.eof) {
+      return;
+    }
+
+    var bufferLength = this.bufferLength;
+    var buffer = this.ensureBuffer(bufferLength + rowBytes);
+
+    var prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength);
+    if (prevRow.length === 0) {
+      prevRow = new Uint8Array(rowBytes);
+    }
+
+    var i, j = bufferLength, up, c;
+    switch (predictor) {
+      case 0:
+        for (i = 0; i < rowBytes; ++i) {
+          buffer[j++] = rawBytes[i];
+        }
+        break;
+      case 1:
+        for (i = 0; i < pixBytes; ++i) {
+          buffer[j++] = rawBytes[i];
+        }
+        for (; i < rowBytes; ++i) {
+          buffer[j] = (buffer[j - pixBytes] + rawBytes[i]) & 0xFF;
+          j++;
+        }
+        break;
+      case 2:
+        for (i = 0; i < rowBytes; ++i) {
+          buffer[j++] = (prevRow[i] + rawBytes[i]) & 0xFF;
+        }
+        break;
+      case 3:
+        for (i = 0; i < pixBytes; ++i) {
+          buffer[j++] = (prevRow[i] >> 1) + rawBytes[i];
+        }
+        for (; i < rowBytes; ++i) {
+          buffer[j] = (((prevRow[i] + buffer[j - pixBytes]) >> 1) +
+                           rawBytes[i]) & 0xFF;
+          j++;
+        }
+        break;
+      case 4:
+        // we need to save the up left pixels values. the simplest way
+        // is to create a new buffer
+        for (i = 0; i < pixBytes; ++i) {
+          up = prevRow[i];
+          c = rawBytes[i];
+          buffer[j++] = up + c;
+        }
+        for (; i < rowBytes; ++i) {
+          up = prevRow[i];
+          var upLeft = prevRow[i - pixBytes];
+          var left = buffer[j - pixBytes];
+          var p = left + up - upLeft;
+
+          var pa = p - left;
+          if (pa < 0) {
+            pa = -pa;
+          }
+          var pb = p - up;
+          if (pb < 0) {
+            pb = -pb;
+          }
+          var pc = p - upLeft;
+          if (pc < 0) {
+            pc = -pc;
+          }
+
+          c = rawBytes[i];
+          if (pa <= pb && pa <= pc) {
+            buffer[j++] = left + c;
+          } else if (pb <= pc) {
+            buffer[j++] = up + c;
+          } else {
+            buffer[j++] = upLeft + c;
+          }
+        }
+        break;
+      default:
+        error('Unsupported predictor: ' + predictor);
+    }
+    this.bufferLength += rowBytes;
+  };
+
+  return PredictorStream;
+})();
+
+/**
+ * Depending on the type of JPEG a JpegStream is handled in different ways. For
+ * JPEG's that are supported natively such as DeviceGray and DeviceRGB the image
+ * data is stored and then loaded by the browser.  For unsupported JPEG's we use
+ * a library to decode these images and the stream behaves like all the other
+ * DecodeStreams.
+ */
+var JpegStream = (function JpegStreamClosure() {
+  function JpegStream(stream, maybeLength, dict, xref) {
+    // Some images may contain 'junk' before the SOI (start-of-image) marker.
+    // Note: this seems to mainly affect inline images.
+    var ch;
+    while ((ch = stream.getByte()) !== -1) {
+      if (ch === 0xFF) { // Find the first byte of the SOI marker (0xFFD8).
+        stream.skip(-1); // Reset the stream position to the SOI.
+        break;
+      }
+    }
+    this.stream = stream;
+    this.maybeLength = maybeLength;
+    this.dict = dict;
+
+    DecodeStream.call(this, maybeLength);
+  }
+
+  JpegStream.prototype = Object.create(DecodeStream.prototype);
+
+  Object.defineProperty(JpegStream.prototype, 'bytes', {
+    get: function JpegStream_bytes() {
+      // If this.maybeLength is null, we'll get the entire stream.
+      return shadow(this, 'bytes', this.stream.getBytes(this.maybeLength));
+    },
+    configurable: true
+  });
+
+  JpegStream.prototype.ensureBuffer = function JpegStream_ensureBuffer(req) {
+    if (this.bufferLength) {
+      return;
+    }
+    try {
+      var jpegImage = new JpegImage();
+
+      // checking if values needs to be transformed before conversion
+      if (this.forceRGB && this.dict && isArray(this.dict.get('Decode'))) {
+        var decodeArr = this.dict.get('Decode');
+        var bitsPerComponent = this.dict.get('BitsPerComponent') || 8;
+        var decodeArrLength = decodeArr.length;
+        var transform = new Int32Array(decodeArrLength);
+        var transformNeeded = false;
+        var maxValue = (1 << bitsPerComponent) - 1;
+        for (var i = 0; i < decodeArrLength; i += 2) {
+          transform[i] = ((decodeArr[i + 1] - decodeArr[i]) * 256) | 0;
+          transform[i + 1] = (decodeArr[i] * maxValue) | 0;
+          if (transform[i] !== 256 || transform[i + 1] !== 0) {
+            transformNeeded = true;
+          }
+        }
+        if (transformNeeded) {
+          jpegImage.decodeTransform = transform;
+        }
+      }
+
+      jpegImage.parse(this.bytes);
+      var data = jpegImage.getData(this.drawWidth, this.drawHeight,
+                                   this.forceRGB);
+      this.buffer = data;
+      this.bufferLength = data.length;
+      this.eof = true;
+    } catch (e) {
+      error('JPEG error: ' + e);
+    }
+  };
+
+  JpegStream.prototype.getBytes = function JpegStream_getBytes(length) {
+    this.ensureBuffer();
+    return this.buffer;
+  };
+
+  JpegStream.prototype.getIR = function JpegStream_getIR() {
+    return PDFJS.createObjectURL(this.bytes, 'image/jpeg');
+  };
+  /**
+   * Checks if the image can be decoded and displayed by the browser without any
+   * further processing such as color space conversions.
+   */
+  JpegStream.prototype.isNativelySupported =
+      function JpegStream_isNativelySupported(xref, res) {
+    var cs = ColorSpace.parse(this.dict.get('ColorSpace', 'CS'), xref, res);
+    return cs.name === 'DeviceGray' || cs.name === 'DeviceRGB';
+  };
+  /**
+   * Checks if the image can be decoded by the browser.
+   */
+  JpegStream.prototype.isNativelyDecodable =
+      function JpegStream_isNativelyDecodable(xref, res) {
+    var cs = ColorSpace.parse(this.dict.get('ColorSpace', 'CS'), xref, res);
+    var numComps = cs.numComps;
+    return numComps === 1 || numComps === 3;
+  };
+
+  return JpegStream;
+})();
+
+/**
+ * For JPEG 2000's we use a library to decode these images and
+ * the stream behaves like all the other DecodeStreams.
+ */
+var JpxStream = (function JpxStreamClosure() {
+  function JpxStream(stream, maybeLength, dict) {
+    this.stream = stream;
+    this.maybeLength = maybeLength;
+    this.dict = dict;
+
+    DecodeStream.call(this, maybeLength);
+  }
+
+  JpxStream.prototype = Object.create(DecodeStream.prototype);
+
+  Object.defineProperty(JpxStream.prototype, 'bytes', {
+    get: function JpxStream_bytes() {
+      // If this.maybeLength is null, we'll get the entire stream.
+      return shadow(this, 'bytes', this.stream.getBytes(this.maybeLength));
+    },
+    configurable: true
+  });
+
+  JpxStream.prototype.ensureBuffer = function JpxStream_ensureBuffer(req) {
+    if (this.bufferLength) {
+      return;
+    }
+
+    var jpxImage = new JpxImage();
+    jpxImage.parse(this.bytes);
+
+    var width = jpxImage.width;
+    var height = jpxImage.height;
+    var componentsCount = jpxImage.componentsCount;
+    var tileCount = jpxImage.tiles.length;
+    if (tileCount === 1) {
+      this.buffer = jpxImage.tiles[0].items;
+    } else {
+      var data = new Uint8Array(width * height * componentsCount);
+
+      for (var k = 0; k < tileCount; k++) {
+        var tileComponents = jpxImage.tiles[k];
+        var tileWidth = tileComponents.width;
+        var tileHeight = tileComponents.height;
+        var tileLeft = tileComponents.left;
+        var tileTop = tileComponents.top;
+
+        var src = tileComponents.items;
+        var srcPosition = 0;
+        var dataPosition = (width * tileTop + tileLeft) * componentsCount;
+        var imgRowSize = width * componentsCount;
+        var tileRowSize = tileWidth * componentsCount;
+
+        for (var j = 0; j < tileHeight; j++) {
+          var rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize);
+          data.set(rowBytes, dataPosition);
+          srcPosition += tileRowSize;
+          dataPosition += imgRowSize;
+        }
+      }
+      this.buffer = data;
+    }
+    this.bufferLength = this.buffer.length;
+    this.eof = true;
+  };
+
+  return JpxStream;
+})();
+
+/**
+ * For JBIG2's we use a library to decode these images and
+ * the stream behaves like all the other DecodeStreams.
+ */
+var Jbig2Stream = (function Jbig2StreamClosure() {
+  function Jbig2Stream(stream, maybeLength, dict) {
+    this.stream = stream;
+    this.maybeLength = maybeLength;
+    this.dict = dict;
+
+    DecodeStream.call(this, maybeLength);
+  }
+
+  Jbig2Stream.prototype = Object.create(DecodeStream.prototype);
+
+  Object.defineProperty(Jbig2Stream.prototype, 'bytes', {
+    get: function Jbig2Stream_bytes() {
+      // If this.maybeLength is null, we'll get the entire stream.
+      return shadow(this, 'bytes', this.stream.getBytes(this.maybeLength));
+    },
+    configurable: true
+  });
+
+  Jbig2Stream.prototype.ensureBuffer = function Jbig2Stream_ensureBuffer(req) {
+    if (this.bufferLength) {
+      return;
+    }
+
+    var jbig2Image = new Jbig2Image();
+
+    var chunks = [], xref = this.dict.xref;
+    var decodeParams = xref.fetchIfRef(this.dict.get('DecodeParms'));
+
+    // According to the PDF specification, DecodeParms can be either
+    // a dictionary, or an array whose elements are dictionaries.
+    if (isArray(decodeParams)) {
+      if (decodeParams.length > 1) {
+        warn('JBIG2 - \'DecodeParms\' array with multiple elements ' +
+             'not supported.');
+      }
+      decodeParams = xref.fetchIfRef(decodeParams[0]);
+    }
+    if (decodeParams && decodeParams.has('JBIG2Globals')) {
+      var globalsStream = decodeParams.get('JBIG2Globals');
+      var globals = globalsStream.getBytes();
+      chunks.push({data: globals, start: 0, end: globals.length});
+    }
+    chunks.push({data: this.bytes, start: 0, end: this.bytes.length});
+    var data = jbig2Image.parseChunks(chunks);
+    var dataLength = data.length;
+
+    // JBIG2 had black as 1 and white as 0, inverting the colors
+    for (var i = 0; i < dataLength; i++) {
+      data[i] ^= 0xFF;
+    }
+
+    this.buffer = data;
+    this.bufferLength = dataLength;
+    this.eof = true;
+  };
+
+  return Jbig2Stream;
+})();
+
+var DecryptStream = (function DecryptStreamClosure() {
+  function DecryptStream(str, maybeLength, decrypt) {
+    this.str = str;
+    this.dict = str.dict;
+    this.decrypt = decrypt;
+    this.nextChunk = null;
+    this.initialized = false;
+
+    DecodeStream.call(this, maybeLength);
+  }
+
+  var chunkSize = 512;
+
+  DecryptStream.prototype = Object.create(DecodeStream.prototype);
+
+  DecryptStream.prototype.readBlock = function DecryptStream_readBlock() {
+    var chunk;
+    if (this.initialized) {
+      chunk = this.nextChunk;
+    } else {
+      chunk = this.str.getBytes(chunkSize);
+      this.initialized = true;
+    }
+    if (!chunk || chunk.length === 0) {
+      this.eof = true;
+      return;
+    }
+    this.nextChunk = this.str.getBytes(chunkSize);
+    var hasMoreData = this.nextChunk && this.nextChunk.length > 0;
+
+    var decrypt = this.decrypt;
+    chunk = decrypt(chunk, !hasMoreData);
+
+    var bufferLength = this.bufferLength;
+    var i, n = chunk.length;
+    var buffer = this.ensureBuffer(bufferLength + n);
+    for (i = 0; i < n; i++) {
+      buffer[bufferLength++] = chunk[i];
+    }
+    this.bufferLength = bufferLength;
+  };
+
+  return DecryptStream;
+})();
+
+var Ascii85Stream = (function Ascii85StreamClosure() {
+  function Ascii85Stream(str, maybeLength) {
+    this.str = str;
+    this.dict = str.dict;
+    this.input = new Uint8Array(5);
+
+    // Most streams increase in size when decoded, but Ascii85 streams
+    // typically shrink by ~20%.
+    if (maybeLength) {
+      maybeLength = 0.8 * maybeLength;
+    }
+    DecodeStream.call(this, maybeLength);
+  }
+
+  Ascii85Stream.prototype = Object.create(DecodeStream.prototype);
+
+  Ascii85Stream.prototype.readBlock = function Ascii85Stream_readBlock() {
+    var TILDA_CHAR = 0x7E; // '~'
+    var Z_LOWER_CHAR = 0x7A; // 'z'
+    var EOF = -1;
+
+    var str = this.str;
+
+    var c = str.getByte();
+    while (Lexer.isSpace(c)) {
+      c = str.getByte();
+    }
+
+    if (c === EOF || c === TILDA_CHAR) {
+      this.eof = true;
+      return;
+    }
+
+    var bufferLength = this.bufferLength, buffer;
+    var i;
+
+    // special code for z
+    if (c === Z_LOWER_CHAR) {
+      buffer = this.ensureBuffer(bufferLength + 4);
+      for (i = 0; i < 4; ++i) {
+        buffer[bufferLength + i] = 0;
+      }
+      this.bufferLength += 4;
+    } else {
+      var input = this.input;
+      input[0] = c;
+      for (i = 1; i < 5; ++i) {
+        c = str.getByte();
+        while (Lexer.isSpace(c)) {
+          c = str.getByte();
+        }
+
+        input[i] = c;
+
+        if (c === EOF || c === TILDA_CHAR) {
+          break;
+        }
+      }
+      buffer = this.ensureBuffer(bufferLength + i - 1);
+      this.bufferLength += i - 1;
+
+      // partial ending;
+      if (i < 5) {
+        for (; i < 5; ++i) {
+          input[i] = 0x21 + 84;
+        }
+        this.eof = true;
+      }
+      var t = 0;
+      for (i = 0; i < 5; ++i) {
+        t = t * 85 + (input[i] - 0x21);
+      }
+
+      for (i = 3; i >= 0; --i) {
+        buffer[bufferLength + i] = t & 0xFF;
+        t >>= 8;
+      }
+    }
+  };
+
+  return Ascii85Stream;
+})();
+
+var AsciiHexStream = (function AsciiHexStreamClosure() {
+  function AsciiHexStream(str, maybeLength) {
+    this.str = str;
+    this.dict = str.dict;
+
+    this.firstDigit = -1;
+
+    // Most streams increase in size when decoded, but AsciiHex streams shrink
+    // by 50%.
+    if (maybeLength) {
+      maybeLength = 0.5 * maybeLength;
+    }
+    DecodeStream.call(this, maybeLength);
+  }
+
+  AsciiHexStream.prototype = Object.create(DecodeStream.prototype);
+
+  AsciiHexStream.prototype.readBlock = function AsciiHexStream_readBlock() {
+    var UPSTREAM_BLOCK_SIZE = 8000;
+    var bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE);
+    if (!bytes.length) {
+      this.eof = true;
+      return;
+    }
+
+    var maxDecodeLength = (bytes.length + 1) >> 1;
+    var buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength);
+    var bufferLength = this.bufferLength;
+
+    var firstDigit = this.firstDigit;
+    for (var i = 0, ii = bytes.length; i < ii; i++) {
+      var ch = bytes[i], digit;
+      if (ch >= 0x30 && ch <= 0x39) { // '0'-'9'
+        digit = ch & 0x0F;
+      } else if ((ch >= 0x41 && ch <= 0x46) || (ch >= 0x61 && ch <= 0x66)) {
+        // 'A'-'Z', 'a'-'z'
+        digit = (ch & 0x0F) + 9;
+      } else if (ch === 0x3E) { // '>'
+        this.eof = true;
+        break;
+      } else { // probably whitespace
+        continue; // ignoring
+      }
+      if (firstDigit < 0) {
+        firstDigit = digit;
+      } else {
+        buffer[bufferLength++] = (firstDigit << 4) | digit;
+        firstDigit = -1;
+      }
+    }
+    if (firstDigit >= 0 && this.eof) {
+      // incomplete byte
+      buffer[bufferLength++] = (firstDigit << 4);
+      firstDigit = -1;
+    }
+    this.firstDigit = firstDigit;
+    this.bufferLength = bufferLength;
+  };
+
+  return AsciiHexStream;
+})();
+
+var RunLengthStream = (function RunLengthStreamClosure() {
+  function RunLengthStream(str, maybeLength) {
+    this.str = str;
+    this.dict = str.dict;
+
+    DecodeStream.call(this, maybeLength);
+  }
+
+  RunLengthStream.prototype = Object.create(DecodeStream.prototype);
+
+  RunLengthStream.prototype.readBlock = function RunLengthStream_readBlock() {
+    // The repeatHeader has following format. The first byte defines type of run
+    // and amount of bytes to repeat/copy: n = 0 through 127 - copy next n bytes
+    // (in addition to the second byte from the header), n = 129 through 255 -
+    // duplicate the second byte from the header (257 - n) times, n = 128 - end.
+    var repeatHeader = this.str.getBytes(2);
+    if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) {
+      this.eof = true;
+      return;
+    }
+
+    var buffer;
+    var bufferLength = this.bufferLength;
+    var n = repeatHeader[0];
+    if (n < 128) {
+      // copy n bytes
+      buffer = this.ensureBuffer(bufferLength + n + 1);
+      buffer[bufferLength++] = repeatHeader[1];
+      if (n > 0) {
+        var source = this.str.getBytes(n);
+        buffer.set(source, bufferLength);
+        bufferLength += n;
+      }
+    } else {
+      n = 257 - n;
+      var b = repeatHeader[1];
+      buffer = this.ensureBuffer(bufferLength + n + 1);
+      for (var i = 0; i < n; i++) {
+        buffer[bufferLength++] = b;
+      }
+    }
+    this.bufferLength = bufferLength;
+  };
+
+  return RunLengthStream;
+})();
+
+var CCITTFaxStream = (function CCITTFaxStreamClosure() {
+
+  var ccittEOL = -2;
+  var twoDimPass = 0;
+  var twoDimHoriz = 1;
+  var twoDimVert0 = 2;
+  var twoDimVertR1 = 3;
+  var twoDimVertL1 = 4;
+  var twoDimVertR2 = 5;
+  var twoDimVertL2 = 6;
+  var twoDimVertR3 = 7;
+  var twoDimVertL3 = 8;
+
+  var twoDimTable = [
+    [-1, -1], [-1, -1],                   // 000000x
+    [7, twoDimVertL3],                    // 0000010
+    [7, twoDimVertR3],                    // 0000011
+    [6, twoDimVertL2], [6, twoDimVertL2], // 000010x
+    [6, twoDimVertR2], [6, twoDimVertR2], // 000011x
+    [4, twoDimPass], [4, twoDimPass],     // 0001xxx
+    [4, twoDimPass], [4, twoDimPass],
+    [4, twoDimPass], [4, twoDimPass],
+    [4, twoDimPass], [4, twoDimPass],
+    [3, twoDimHoriz], [3, twoDimHoriz],   // 001xxxx
+    [3, twoDimHoriz], [3, twoDimHoriz],
+    [3, twoDimHoriz], [3, twoDimHoriz],
+    [3, twoDimHoriz], [3, twoDimHoriz],
+    [3, twoDimHoriz], [3, twoDimHoriz],
+    [3, twoDimHoriz], [3, twoDimHoriz],
+    [3, twoDimHoriz], [3, twoDimHoriz],
+    [3, twoDimHoriz], [3, twoDimHoriz],
+    [3, twoDimVertL1], [3, twoDimVertL1], // 010xxxx
+    [3, twoDimVertL1], [3, twoDimVertL1],
+    [3, twoDimVertL1], [3, twoDimVertL1],
+    [3, twoDimVertL1], [3, twoDimVertL1],
+    [3, twoDimVertL1], [3, twoDimVertL1],
+    [3, twoDimVertL1], [3, twoDimVertL1],
+    [3, twoDimVertL1], [3, twoDimVertL1],
+    [3, twoDimVertL1], [3, twoDimVertL1],
+    [3, twoDimVertR1], [3, twoDimVertR1], // 011xxxx
+    [3, twoDimVertR1], [3, twoDimVertR1],
+    [3, twoDimVertR1], [3, twoDimVertR1],
+    [3, twoDimVertR1], [3, twoDimVertR1],
+    [3, twoDimVertR1], [3, twoDimVertR1],
+    [3, twoDimVertR1], [3, twoDimVertR1],
+    [3, twoDimVertR1], [3, twoDimVertR1],
+    [3, twoDimVertR1], [3, twoDimVertR1],
+    [1, twoDimVert0], [1, twoDimVert0],   // 1xxxxxx
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0],
+    [1, twoDimVert0], [1, twoDimVert0]
+  ];
+
+  var whiteTable1 = [
+    [-1, -1],                               // 00000
+    [12, ccittEOL],                         // 00001
+    [-1, -1], [-1, -1],                     // 0001x
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 001xx
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 010xx
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 011xx
+    [11, 1792], [11, 1792],                 // 1000x
+    [12, 1984],                             // 10010
+    [12, 2048],                             // 10011
+    [12, 2112],                             // 10100
+    [12, 2176],                             // 10101
+    [12, 2240],                             // 10110
+    [12, 2304],                             // 10111
+    [11, 1856], [11, 1856],                 // 1100x
+    [11, 1920], [11, 1920],                 // 1101x
+    [12, 2368],                             // 11100
+    [12, 2432],                             // 11101
+    [12, 2496],                             // 11110
+    [12, 2560]                              // 11111
+  ];
+
+  var whiteTable2 = [
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1],     // 0000000xx
+    [8, 29], [8, 29],                           // 00000010x
+    [8, 30], [8, 30],                           // 00000011x
+    [8, 45], [8, 45],                           // 00000100x
+    [8, 46], [8, 46],                           // 00000101x
+    [7, 22], [7, 22], [7, 22], [7, 22],         // 0000011xx
+    [7, 23], [7, 23], [7, 23], [7, 23],         // 0000100xx
+    [8, 47], [8, 47],                           // 00001010x
+    [8, 48], [8, 48],                           // 00001011x
+    [6, 13], [6, 13], [6, 13], [6, 13],         // 000011xxx
+    [6, 13], [6, 13], [6, 13], [6, 13],
+    [7, 20], [7, 20], [7, 20], [7, 20],         // 0001000xx
+    [8, 33], [8, 33],                           // 00010010x
+    [8, 34], [8, 34],                           // 00010011x
+    [8, 35], [8, 35],                           // 00010100x
+    [8, 36], [8, 36],                           // 00010101x
+    [8, 37], [8, 37],                           // 00010110x
+    [8, 38], [8, 38],                           // 00010111x
+    [7, 19], [7, 19], [7, 19], [7, 19],         // 0001100xx
+    [8, 31], [8, 31],                           // 00011010x
+    [8, 32], [8, 32],                           // 00011011x
+    [6, 1], [6, 1], [6, 1], [6, 1],             // 000111xxx
+    [6, 1], [6, 1], [6, 1], [6, 1],
+    [6, 12], [6, 12], [6, 12], [6, 12],         // 001000xxx
+    [6, 12], [6, 12], [6, 12], [6, 12],
+    [8, 53], [8, 53],                           // 00100100x
+    [8, 54], [8, 54],                           // 00100101x
+    [7, 26], [7, 26], [7, 26], [7, 26],         // 0010011xx
+    [8, 39], [8, 39],                           // 00101000x
+    [8, 40], [8, 40],                           // 00101001x
+    [8, 41], [8, 41],                           // 00101010x
+    [8, 42], [8, 42],                           // 00101011x
+    [8, 43], [8, 43],                           // 00101100x
+    [8, 44], [8, 44],                           // 00101101x
+    [7, 21], [7, 21], [7, 21], [7, 21],         // 0010111xx
+    [7, 28], [7, 28], [7, 28], [7, 28],         // 0011000xx
+    [8, 61], [8, 61],                           // 00110010x
+    [8, 62], [8, 62],                           // 00110011x
+    [8, 63], [8, 63],                           // 00110100x
+    [8, 0], [8, 0],                             // 00110101x
+    [8, 320], [8, 320],                         // 00110110x
+    [8, 384], [8, 384],                         // 00110111x
+    [5, 10], [5, 10], [5, 10], [5, 10],         // 00111xxxx
+    [5, 10], [5, 10], [5, 10], [5, 10],
+    [5, 10], [5, 10], [5, 10], [5, 10],
+    [5, 10], [5, 10], [5, 10], [5, 10],
+    [5, 11], [5, 11], [5, 11], [5, 11],         // 01000xxxx
+    [5, 11], [5, 11], [5, 11], [5, 11],
+    [5, 11], [5, 11], [5, 11], [5, 11],
+    [5, 11], [5, 11], [5, 11], [5, 11],
+    [7, 27], [7, 27], [7, 27], [7, 27],         // 0100100xx
+    [8, 59], [8, 59],                           // 01001010x
+    [8, 60], [8, 60],                           // 01001011x
+    [9, 1472],                                  // 010011000
+    [9, 1536],                                  // 010011001
+    [9, 1600],                                  // 010011010
+    [9, 1728],                                  // 010011011
+    [7, 18], [7, 18], [7, 18], [7, 18],         // 0100111xx
+    [7, 24], [7, 24], [7, 24], [7, 24],         // 0101000xx
+    [8, 49], [8, 49],                           // 01010010x
+    [8, 50], [8, 50],                           // 01010011x
+    [8, 51], [8, 51],                           // 01010100x
+    [8, 52], [8, 52],                           // 01010101x
+    [7, 25], [7, 25], [7, 25], [7, 25],         // 0101011xx
+    [8, 55], [8, 55],                           // 01011000x
+    [8, 56], [8, 56],                           // 01011001x
+    [8, 57], [8, 57],                           // 01011010x
+    [8, 58], [8, 58],                           // 01011011x
+    [6, 192], [6, 192], [6, 192], [6, 192],     // 010111xxx
+    [6, 192], [6, 192], [6, 192], [6, 192],
+    [6, 1664], [6, 1664], [6, 1664], [6, 1664], // 011000xxx
+    [6, 1664], [6, 1664], [6, 1664], [6, 1664],
+    [8, 448], [8, 448],                         // 01100100x
+    [8, 512], [8, 512],                         // 01100101x
+    [9, 704],                                   // 011001100
+    [9, 768],                                   // 011001101
+    [8, 640], [8, 640],                         // 01100111x
+    [8, 576], [8, 576],                         // 01101000x
+    [9, 832],                                   // 011010010
+    [9, 896],                                   // 011010011
+    [9, 960],                                   // 011010100
+    [9, 1024],                                  // 011010101
+    [9, 1088],                                  // 011010110
+    [9, 1152],                                  // 011010111
+    [9, 1216],                                  // 011011000
+    [9, 1280],                                  // 011011001
+    [9, 1344],                                  // 011011010
+    [9, 1408],                                  // 011011011
+    [7, 256], [7, 256], [7, 256], [7, 256],     // 0110111xx
+    [4, 2], [4, 2], [4, 2], [4, 2],             // 0111xxxxx
+    [4, 2], [4, 2], [4, 2], [4, 2],
+    [4, 2], [4, 2], [4, 2], [4, 2],
+    [4, 2], [4, 2], [4, 2], [4, 2],
+    [4, 2], [4, 2], [4, 2], [4, 2],
+    [4, 2], [4, 2], [4, 2], [4, 2],
+    [4, 2], [4, 2], [4, 2], [4, 2],
+    [4, 2], [4, 2], [4, 2], [4, 2],
+    [4, 3], [4, 3], [4, 3], [4, 3],             // 1000xxxxx
+    [4, 3], [4, 3], [4, 3], [4, 3],
+    [4, 3], [4, 3], [4, 3], [4, 3],
+    [4, 3], [4, 3], [4, 3], [4, 3],
+    [4, 3], [4, 3], [4, 3], [4, 3],
+    [4, 3], [4, 3], [4, 3], [4, 3],
+    [4, 3], [4, 3], [4, 3], [4, 3],
+    [4, 3], [4, 3], [4, 3], [4, 3],
+    [5, 128], [5, 128], [5, 128], [5, 128],     // 10010xxxx
+    [5, 128], [5, 128], [5, 128], [5, 128],
+    [5, 128], [5, 128], [5, 128], [5, 128],
+    [5, 128], [5, 128], [5, 128], [5, 128],
+    [5, 8], [5, 8], [5, 8], [5, 8],             // 10011xxxx
+    [5, 8], [5, 8], [5, 8], [5, 8],
+    [5, 8], [5, 8], [5, 8], [5, 8],
+    [5, 8], [5, 8], [5, 8], [5, 8],
+    [5, 9], [5, 9], [5, 9], [5, 9],             // 10100xxxx
+    [5, 9], [5, 9], [5, 9], [5, 9],
+    [5, 9], [5, 9], [5, 9], [5, 9],
+    [5, 9], [5, 9], [5, 9], [5, 9],
+    [6, 16], [6, 16], [6, 16], [6, 16],         // 101010xxx
+    [6, 16], [6, 16], [6, 16], [6, 16],
+    [6, 17], [6, 17], [6, 17], [6, 17],         // 101011xxx
+    [6, 17], [6, 17], [6, 17], [6, 17],
+    [4, 4], [4, 4], [4, 4], [4, 4],             // 1011xxxxx
+    [4, 4], [4, 4], [4, 4], [4, 4],
+    [4, 4], [4, 4], [4, 4], [4, 4],
+    [4, 4], [4, 4], [4, 4], [4, 4],
+    [4, 4], [4, 4], [4, 4], [4, 4],
+    [4, 4], [4, 4], [4, 4], [4, 4],
+    [4, 4], [4, 4], [4, 4], [4, 4],
+    [4, 4], [4, 4], [4, 4], [4, 4],
+    [4, 5], [4, 5], [4, 5], [4, 5],             // 1100xxxxx
+    [4, 5], [4, 5], [4, 5], [4, 5],
+    [4, 5], [4, 5], [4, 5], [4, 5],
+    [4, 5], [4, 5], [4, 5], [4, 5],
+    [4, 5], [4, 5], [4, 5], [4, 5],
+    [4, 5], [4, 5], [4, 5], [4, 5],
+    [4, 5], [4, 5], [4, 5], [4, 5],
+    [4, 5], [4, 5], [4, 5], [4, 5],
+    [6, 14], [6, 14], [6, 14], [6, 14],         // 110100xxx
+    [6, 14], [6, 14], [6, 14], [6, 14],
+    [6, 15], [6, 15], [6, 15], [6, 15],         // 110101xxx
+    [6, 15], [6, 15], [6, 15], [6, 15],
+    [5, 64], [5, 64], [5, 64], [5, 64],         // 11011xxxx
+    [5, 64], [5, 64], [5, 64], [5, 64],
+    [5, 64], [5, 64], [5, 64], [5, 64],
+    [5, 64], [5, 64], [5, 64], [5, 64],
+    [4, 6], [4, 6], [4, 6], [4, 6],             // 1110xxxxx
+    [4, 6], [4, 6], [4, 6], [4, 6],
+    [4, 6], [4, 6], [4, 6], [4, 6],
+    [4, 6], [4, 6], [4, 6], [4, 6],
+    [4, 6], [4, 6], [4, 6], [4, 6],
+    [4, 6], [4, 6], [4, 6], [4, 6],
+    [4, 6], [4, 6], [4, 6], [4, 6],
+    [4, 6], [4, 6], [4, 6], [4, 6],
+    [4, 7], [4, 7], [4, 7], [4, 7],             // 1111xxxxx
+    [4, 7], [4, 7], [4, 7], [4, 7],
+    [4, 7], [4, 7], [4, 7], [4, 7],
+    [4, 7], [4, 7], [4, 7], [4, 7],
+    [4, 7], [4, 7], [4, 7], [4, 7],
+    [4, 7], [4, 7], [4, 7], [4, 7],
+    [4, 7], [4, 7], [4, 7], [4, 7],
+    [4, 7], [4, 7], [4, 7], [4, 7]
+  ];
+
+  var blackTable1 = [
+    [-1, -1], [-1, -1],                             // 000000000000x
+    [12, ccittEOL], [12, ccittEOL],                 // 000000000001x
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000001xx
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000010xx
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000011xx
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000100xx
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000101xx
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000110xx
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1],         // 00000000111xx
+    [11, 1792], [11, 1792], [11, 1792], [11, 1792], // 00000001000xx
+    [12, 1984], [12, 1984],                         // 000000010010x
+    [12, 2048], [12, 2048],                         // 000000010011x
+    [12, 2112], [12, 2112],                         // 000000010100x
+    [12, 2176], [12, 2176],                         // 000000010101x
+    [12, 2240], [12, 2240],                         // 000000010110x
+    [12, 2304], [12, 2304],                         // 000000010111x
+    [11, 1856], [11, 1856], [11, 1856], [11, 1856], // 00000001100xx
+    [11, 1920], [11, 1920], [11, 1920], [11, 1920], // 00000001101xx
+    [12, 2368], [12, 2368],                         // 000000011100x
+    [12, 2432], [12, 2432],                         // 000000011101x
+    [12, 2496], [12, 2496],                         // 000000011110x
+    [12, 2560], [12, 2560],                         // 000000011111x
+    [10, 18], [10, 18], [10, 18], [10, 18],         // 0000001000xxx
+    [10, 18], [10, 18], [10, 18], [10, 18],
+    [12, 52], [12, 52],                             // 000000100100x
+    [13, 640],                                      // 0000001001010
+    [13, 704],                                      // 0000001001011
+    [13, 768],                                      // 0000001001100
+    [13, 832],                                      // 0000001001101
+    [12, 55], [12, 55],                             // 000000100111x
+    [12, 56], [12, 56],                             // 000000101000x
+    [13, 1280],                                     // 0000001010010
+    [13, 1344],                                     // 0000001010011
+    [13, 1408],                                     // 0000001010100
+    [13, 1472],                                     // 0000001010101
+    [12, 59], [12, 59],                             // 000000101011x
+    [12, 60], [12, 60],                             // 000000101100x
+    [13, 1536],                                     // 0000001011010
+    [13, 1600],                                     // 0000001011011
+    [11, 24], [11, 24], [11, 24], [11, 24],         // 00000010111xx
+    [11, 25], [11, 25], [11, 25], [11, 25],         // 00000011000xx
+    [13, 1664],                                     // 0000001100100
+    [13, 1728],                                     // 0000001100101
+    [12, 320], [12, 320],                           // 000000110011x
+    [12, 384], [12, 384],                           // 000000110100x
+    [12, 448], [12, 448],                           // 000000110101x
+    [13, 512],                                      // 0000001101100
+    [13, 576],                                      // 0000001101101
+    [12, 53], [12, 53],                             // 000000110111x
+    [12, 54], [12, 54],                             // 000000111000x
+    [13, 896],                                      // 0000001110010
+    [13, 960],                                      // 0000001110011
+    [13, 1024],                                     // 0000001110100
+    [13, 1088],                                     // 0000001110101
+    [13, 1152],                                     // 0000001110110
+    [13, 1216],                                     // 0000001110111
+    [10, 64], [10, 64], [10, 64], [10, 64],         // 0000001111xxx
+    [10, 64], [10, 64], [10, 64], [10, 64]
+  ];
+
+  var blackTable2 = [
+    [8, 13], [8, 13], [8, 13], [8, 13],     // 00000100xxxx
+    [8, 13], [8, 13], [8, 13], [8, 13],
+    [8, 13], [8, 13], [8, 13], [8, 13],
+    [8, 13], [8, 13], [8, 13], [8, 13],
+    [11, 23], [11, 23],                     // 00000101000x
+    [12, 50],                               // 000001010010
+    [12, 51],                               // 000001010011
+    [12, 44],                               // 000001010100
+    [12, 45],                               // 000001010101
+    [12, 46],                               // 000001010110
+    [12, 47],                               // 000001010111
+    [12, 57],                               // 000001011000
+    [12, 58],                               // 000001011001
+    [12, 61],                               // 000001011010
+    [12, 256],                              // 000001011011
+    [10, 16], [10, 16], [10, 16], [10, 16], // 0000010111xx
+    [10, 17], [10, 17], [10, 17], [10, 17], // 0000011000xx
+    [12, 48],                               // 000001100100
+    [12, 49],                               // 000001100101
+    [12, 62],                               // 000001100110
+    [12, 63],                               // 000001100111
+    [12, 30],                               // 000001101000
+    [12, 31],                               // 000001101001
+    [12, 32],                               // 000001101010
+    [12, 33],                               // 000001101011
+    [12, 40],                               // 000001101100
+    [12, 41],                               // 000001101101
+    [11, 22], [11, 22],                     // 00000110111x
+    [8, 14], [8, 14], [8, 14], [8, 14],     // 00000111xxxx
+    [8, 14], [8, 14], [8, 14], [8, 14],
+    [8, 14], [8, 14], [8, 14], [8, 14],
+    [8, 14], [8, 14], [8, 14], [8, 14],
+    [7, 10], [7, 10], [7, 10], [7, 10],     // 0000100xxxxx
+    [7, 10], [7, 10], [7, 10], [7, 10],
+    [7, 10], [7, 10], [7, 10], [7, 10],
+    [7, 10], [7, 10], [7, 10], [7, 10],
+    [7, 10], [7, 10], [7, 10], [7, 10],
+    [7, 10], [7, 10], [7, 10], [7, 10],
+    [7, 10], [7, 10], [7, 10], [7, 10],
+    [7, 10], [7, 10], [7, 10], [7, 10],
+    [7, 11], [7, 11], [7, 11], [7, 11],     // 0000101xxxxx
+    [7, 11], [7, 11], [7, 11], [7, 11],
+    [7, 11], [7, 11], [7, 11], [7, 11],
+    [7, 11], [7, 11], [7, 11], [7, 11],
+    [7, 11], [7, 11], [7, 11], [7, 11],
+    [7, 11], [7, 11], [7, 11], [7, 11],
+    [7, 11], [7, 11], [7, 11], [7, 11],
+    [7, 11], [7, 11], [7, 11], [7, 11],
+    [9, 15], [9, 15], [9, 15], [9, 15],     // 000011000xxx
+    [9, 15], [9, 15], [9, 15], [9, 15],
+    [12, 128],                              // 000011001000
+    [12, 192],                              // 000011001001
+    [12, 26],                               // 000011001010
+    [12, 27],                               // 000011001011
+    [12, 28],                               // 000011001100
+    [12, 29],                               // 000011001101
+    [11, 19], [11, 19],                     // 00001100111x
+    [11, 20], [11, 20],                     // 00001101000x
+    [12, 34],                               // 000011010010
+    [12, 35],                               // 000011010011
+    [12, 36],                               // 000011010100
+    [12, 37],                               // 000011010101
+    [12, 38],                               // 000011010110
+    [12, 39],                               // 000011010111
+    [11, 21], [11, 21],                     // 00001101100x
+    [12, 42],                               // 000011011010
+    [12, 43],                               // 000011011011
+    [10, 0], [10, 0], [10, 0], [10, 0],     // 0000110111xx
+    [7, 12], [7, 12], [7, 12], [7, 12],     // 0000111xxxxx
+    [7, 12], [7, 12], [7, 12], [7, 12],
+    [7, 12], [7, 12], [7, 12], [7, 12],
+    [7, 12], [7, 12], [7, 12], [7, 12],
+    [7, 12], [7, 12], [7, 12], [7, 12],
+    [7, 12], [7, 12], [7, 12], [7, 12],
+    [7, 12], [7, 12], [7, 12], [7, 12],
+    [7, 12], [7, 12], [7, 12], [7, 12]
+  ];
+
+  var blackTable3 = [
+    [-1, -1], [-1, -1], [-1, -1], [-1, -1], // 0000xx
+    [6, 9],                                 // 000100
+    [6, 8],                                 // 000101
+    [5, 7], [5, 7],                         // 00011x
+    [4, 6], [4, 6], [4, 6], [4, 6],         // 0010xx
+    [4, 5], [4, 5], [4, 5], [4, 5],         // 0011xx
+    [3, 1], [3, 1], [3, 1], [3, 1],         // 010xxx
+    [3, 1], [3, 1], [3, 1], [3, 1],
+    [3, 4], [3, 4], [3, 4], [3, 4],         // 011xxx
+    [3, 4], [3, 4], [3, 4], [3, 4],
+    [2, 3], [2, 3], [2, 3], [2, 3],         // 10xxxx
+    [2, 3], [2, 3], [2, 3], [2, 3],
+    [2, 3], [2, 3], [2, 3], [2, 3],
+    [2, 3], [2, 3], [2, 3], [2, 3],
+    [2, 2], [2, 2], [2, 2], [2, 2],         // 11xxxx
+    [2, 2], [2, 2], [2, 2], [2, 2],
+    [2, 2], [2, 2], [2, 2], [2, 2],
+    [2, 2], [2, 2], [2, 2], [2, 2]
+  ];
+
+  function CCITTFaxStream(str, maybeLength, params) {
+    this.str = str;
+    this.dict = str.dict;
+
+    params = params || Dict.empty;
+
+    this.encoding = params.get('K') || 0;
+    this.eoline = params.get('EndOfLine') || false;
+    this.byteAlign = params.get('EncodedByteAlign') || false;
+    this.columns = params.get('Columns') || 1728;
+    this.rows = params.get('Rows') || 0;
+    var eoblock = params.get('EndOfBlock');
+    if (eoblock === null || eoblock === undefined) {
+      eoblock = true;
+    }
+    this.eoblock = eoblock;
+    this.black = params.get('BlackIs1') || false;
+
+    this.codingLine = new Uint32Array(this.columns + 1);
+    this.refLine = new Uint32Array(this.columns + 2);
+
+    this.codingLine[0] = this.columns;
+    this.codingPos = 0;
+
+    this.row = 0;
+    this.nextLine2D = this.encoding < 0;
+    this.inputBits = 0;
+    this.inputBuf = 0;
+    this.outputBits = 0;
+
+    var code1;
+    while ((code1 = this.lookBits(12)) === 0) {
+      this.eatBits(1);
+    }
+    if (code1 === 1) {
+      this.eatBits(12);
+    }
+    if (this.encoding > 0) {
+      this.nextLine2D = !this.lookBits(1);
+      this.eatBits(1);
+    }
+
+    DecodeStream.call(this, maybeLength);
+  }
+
+  CCITTFaxStream.prototype = Object.create(DecodeStream.prototype);
+
+  CCITTFaxStream.prototype.readBlock = function CCITTFaxStream_readBlock() {
+    while (!this.eof) {
+      var c = this.lookChar();
+      this.ensureBuffer(this.bufferLength + 1);
+      this.buffer[this.bufferLength++] = c;
+    }
+  };
+
+  CCITTFaxStream.prototype.addPixels =
+      function ccittFaxStreamAddPixels(a1, blackPixels) {
+    var codingLine = this.codingLine;
+    var codingPos = this.codingPos;
+
+    if (a1 > codingLine[codingPos]) {
+      if (a1 > this.columns) {
+        info('row is wrong length');
+        this.err = true;
+        a1 = this.columns;
+      }
+      if ((codingPos & 1) ^ blackPixels) {
+        ++codingPos;
+      }
+
+      codingLine[codingPos] = a1;
+    }
+    this.codingPos = codingPos;
+  };
+
+  CCITTFaxStream.prototype.addPixelsNeg =
+      function ccittFaxStreamAddPixelsNeg(a1, blackPixels) {
+    var codingLine = this.codingLine;
+    var codingPos = this.codingPos;
+
+    if (a1 > codingLine[codingPos]) {
+      if (a1 > this.columns) {
+        info('row is wrong length');
+        this.err = true;
+        a1 = this.columns;
+      }
+      if ((codingPos & 1) ^ blackPixels) {
+        ++codingPos;
+      }
+
+      codingLine[codingPos] = a1;
+    } else if (a1 < codingLine[codingPos]) {
+      if (a1 < 0) {
+        info('invalid code');
+        this.err = true;
+        a1 = 0;
+      }
+      while (codingPos > 0 && a1 < codingLine[codingPos - 1]) {
+        --codingPos;
+      }
+      codingLine[codingPos] = a1;
+    }
+
+    this.codingPos = codingPos;
+  };
+
+  CCITTFaxStream.prototype.lookChar = function CCITTFaxStream_lookChar() {
+    var refLine = this.refLine;
+    var codingLine = this.codingLine;
+    var columns = this.columns;
+
+    var refPos, blackPixels, bits, i;
+
+    if (this.outputBits === 0) {
+      if (this.eof) {
+        return null;
+      }
+      this.err = false;
+
+      var code1, code2, code3;
+      if (this.nextLine2D) {
+        for (i = 0; codingLine[i] < columns; ++i) {
+          refLine[i] = codingLine[i];
+        }
+        refLine[i++] = columns;
+        refLine[i] = columns;
+        codingLine[0] = 0;
+        this.codingPos = 0;
+        refPos = 0;
+        blackPixels = 0;
+
+        while (codingLine[this.codingPos] < columns) {
+          code1 = this.getTwoDimCode();
+          switch (code1) {
+            case twoDimPass:
+              this.addPixels(refLine[refPos + 1], blackPixels);
+              if (refLine[refPos + 1] < columns) {
+                refPos += 2;
+              }
+              break;
+            case twoDimHoriz:
+              code1 = code2 = 0;
+              if (blackPixels) {
+                do {
+                  code1 += (code3 = this.getBlackCode());
+                } while (code3 >= 64);
+                do {
+                  code2 += (code3 = this.getWhiteCode());
+                } while (code3 >= 64);
+              } else {
+                do {
+                  code1 += (code3 = this.getWhiteCode());
+                } while (code3 >= 64);
+                do {
+                  code2 += (code3 = this.getBlackCode());
+                } while (code3 >= 64);
+              }
+              this.addPixels(codingLine[this.codingPos] +
+                             code1, blackPixels);
+              if (codingLine[this.codingPos] < columns) {
+                this.addPixels(codingLine[this.codingPos] + code2,
+                               blackPixels ^ 1);
+              }
+              while (refLine[refPos] <= codingLine[this.codingPos] &&
+                     refLine[refPos] < columns) {
+                refPos += 2;
+              }
+              break;
+            case twoDimVertR3:
+              this.addPixels(refLine[refPos] + 3, blackPixels);
+              blackPixels ^= 1;
+              if (codingLine[this.codingPos] < columns) {
+                ++refPos;
+                while (refLine[refPos] <= codingLine[this.codingPos] &&
+                       refLine[refPos] < columns) {
+                  refPos += 2;
+                }
+              }
+              break;
+            case twoDimVertR2:
+              this.addPixels(refLine[refPos] + 2, blackPixels);
+              blackPixels ^= 1;
+              if (codingLine[this.codingPos] < columns) {
+                ++refPos;
+                while (refLine[refPos] <= codingLine[this.codingPos] &&
+                       refLine[refPos] < columns) {
+                  refPos += 2;
+                }
+              }
+              break;
+            case twoDimVertR1:
+              this.addPixels(refLine[refPos] + 1, blackPixels);
+              blackPixels ^= 1;
+              if (codingLine[this.codingPos] < columns) {
+                ++refPos;
+                while (refLine[refPos] <= codingLine[this.codingPos] &&
+                       refLine[refPos] < columns) {
+                  refPos += 2;
+                }
+              }
+              break;
+            case twoDimVert0:
+              this.addPixels(refLine[refPos], blackPixels);
+              blackPixels ^= 1;
+              if (codingLine[this.codingPos] < columns) {
+                ++refPos;
+                while (refLine[refPos] <= codingLine[this.codingPos] &&
+                       refLine[refPos] < columns) {
+                  refPos += 2;
+                }
+              }
+              break;
+            case twoDimVertL3:
+              this.addPixelsNeg(refLine[refPos] - 3, blackPixels);
+              blackPixels ^= 1;
+              if (codingLine[this.codingPos] < columns) {
+                if (refPos > 0) {
+                  --refPos;
+                } else {
+                  ++refPos;
+                }
+                while (refLine[refPos] <= codingLine[this.codingPos] &&
+                       refLine[refPos] < columns) {
+                  refPos += 2;
+                }
+              }
+              break;
+            case twoDimVertL2:
+              this.addPixelsNeg(refLine[refPos] - 2, blackPixels);
+              blackPixels ^= 1;
+              if (codingLine[this.codingPos] < columns) {
+                if (refPos > 0) {
+                  --refPos;
+                } else {
+                  ++refPos;
+                }
+                while (refLine[refPos] <= codingLine[this.codingPos] &&
+                       refLine[refPos] < columns) {
+                  refPos += 2;
+                }
+              }
+              break;
+            case twoDimVertL1:
+              this.addPixelsNeg(refLine[refPos] - 1, blackPixels);
+              blackPixels ^= 1;
+              if (codingLine[this.codingPos] < columns) {
+                if (refPos > 0) {
+                  --refPos;
+                } else {
+                  ++refPos;
+                }
+                while (refLine[refPos] <= codingLine[this.codingPos] &&
+                       refLine[refPos] < columns) {
+                  refPos += 2;
+                }
+              }
+              break;
+            case EOF:
+              this.addPixels(columns, 0);
+              this.eof = true;
+              break;
+            default:
+              info('bad 2d code');
+              this.addPixels(columns, 0);
+              this.err = true;
+          }
+        }
+      } else {
+        codingLine[0] = 0;
+        this.codingPos = 0;
+        blackPixels = 0;
+        while (codingLine[this.codingPos] < columns) {
+          code1 = 0;
+          if (blackPixels) {
+            do {
+              code1 += (code3 = this.getBlackCode());
+            } while (code3 >= 64);
+          } else {
+            do {
+              code1 += (code3 = this.getWhiteCode());
+            } while (code3 >= 64);
+          }
+          this.addPixels(codingLine[this.codingPos] + code1, blackPixels);
+          blackPixels ^= 1;
+        }
+      }
+
+      var gotEOL = false;
+
+      if (this.byteAlign) {
+        this.inputBits &= ~7;
+      }
+
+      if (!this.eoblock && this.row === this.rows - 1) {
+        this.eof = true;
+      } else {
+        code1 = this.lookBits(12);
+        if (this.eoline) {
+          while (code1 !== EOF && code1 !== 1) {
+            this.eatBits(1);
+            code1 = this.lookBits(12);
+          }
+        } else {
+          while (code1 === 0) {
+            this.eatBits(1);
+            code1 = this.lookBits(12);
+          }
+        }
+        if (code1 === 1) {
+          this.eatBits(12);
+          gotEOL = true;
+        } else if (code1 === EOF) {
+          this.eof = true;
+        }
+      }
+
+      if (!this.eof && this.encoding > 0) {
+        this.nextLine2D = !this.lookBits(1);
+        this.eatBits(1);
+      }
+
+      if (this.eoblock && gotEOL && this.byteAlign) {
+        code1 = this.lookBits(12);
+        if (code1 === 1) {
+          this.eatBits(12);
+          if (this.encoding > 0) {
+            this.lookBits(1);
+            this.eatBits(1);
+          }
+          if (this.encoding >= 0) {
+            for (i = 0; i < 4; ++i) {
+              code1 = this.lookBits(12);
+              if (code1 !== 1) {
+                info('bad rtc code: ' + code1);
+              }
+              this.eatBits(12);
+              if (this.encoding > 0) {
+                this.lookBits(1);
+                this.eatBits(1);
+              }
+            }
+          }
+          this.eof = true;
+        }
+      } else if (this.err && this.eoline) {
+        while (true) {
+          code1 = this.lookBits(13);
+          if (code1 === EOF) {
+            this.eof = true;
+            return null;
+          }
+          if ((code1 >> 1) === 1) {
+            break;
+          }
+          this.eatBits(1);
+        }
+        this.eatBits(12);
+        if (this.encoding > 0) {
+          this.eatBits(1);
+          this.nextLine2D = !(code1 & 1);
+        }
+      }
+
+      if (codingLine[0] > 0) {
+        this.outputBits = codingLine[this.codingPos = 0];
+      } else {
+        this.outputBits = codingLine[this.codingPos = 1];
+      }
+      this.row++;
+    }
+
+    var c;
+    if (this.outputBits >= 8) {
+      c = (this.codingPos & 1) ? 0 : 0xFF;
+      this.outputBits -= 8;
+      if (this.outputBits === 0 && codingLine[this.codingPos] < columns) {
+        this.codingPos++;
+        this.outputBits = (codingLine[this.codingPos] -
+                           codingLine[this.codingPos - 1]);
+      }
+    } else {
+      bits = 8;
+      c = 0;
+      do {
+        if (this.outputBits > bits) {
+          c <<= bits;
+          if (!(this.codingPos & 1)) {
+            c |= 0xFF >> (8 - bits);
+          }
+          this.outputBits -= bits;
+          bits = 0;
+        } else {
+          c <<= this.outputBits;
+          if (!(this.codingPos & 1)) {
+            c |= 0xFF >> (8 - this.outputBits);
+          }
+          bits -= this.outputBits;
+          this.outputBits = 0;
+          if (codingLine[this.codingPos] < columns) {
+            this.codingPos++;
+            this.outputBits = (codingLine[this.codingPos] -
+                               codingLine[this.codingPos - 1]);
+          } else if (bits > 0) {
+            c <<= bits;
+            bits = 0;
+          }
+        }
+      } while (bits);
+    }
+    if (this.black) {
+      c ^= 0xFF;
+    }
+    return c;
+  };
+
+  // This functions returns the code found from the table.
+  // The start and end parameters set the boundaries for searching the table.
+  // The limit parameter is optional. Function returns an array with three
+  // values. The first array element indicates whether a valid code is being
+  // returned. The second array element is the actual code. The third array
+  // element indicates whether EOF was reached.
+  CCITTFaxStream.prototype.findTableCode =
+      function ccittFaxStreamFindTableCode(start, end, table, limit) {
+
+    var limitValue = limit || 0;
+    for (var i = start; i <= end; ++i) {
+      var code = this.lookBits(i);
+      if (code === EOF) {
+        return [true, 1, false];
+      }
+      if (i < end) {
+        code <<= end - i;
+      }
+      if (!limitValue || code >= limitValue) {
+        var p = table[code - limitValue];
+        if (p[0] === i) {
+          this.eatBits(i);
+          return [true, p[1], true];
+        }
+      }
+    }
+    return [false, 0, false];
+  };
+
+  CCITTFaxStream.prototype.getTwoDimCode =
+      function ccittFaxStreamGetTwoDimCode() {
+
+    var code = 0;
+    var p;
+    if (this.eoblock) {
+      code = this.lookBits(7);
+      p = twoDimTable[code];
+      if (p && p[0] > 0) {
+        this.eatBits(p[0]);
+        return p[1];
+      }
+    } else {
+      var result = this.findTableCode(1, 7, twoDimTable);
+      if (result[0] && result[2]) {
+        return result[1];
+      }
+    }
+    info('Bad two dim code');
+    return EOF;
+  };
+
+  CCITTFaxStream.prototype.getWhiteCode =
+      function ccittFaxStreamGetWhiteCode() {
+
+    var code = 0;
+    var p;
+    if (this.eoblock) {
+      code = this.lookBits(12);
+      if (code === EOF) {
+        return 1;
+      }
+
+      if ((code >> 5) === 0) {
+        p = whiteTable1[code];
+      } else {
+        p = whiteTable2[code >> 3];
+      }
+
+      if (p[0] > 0) {
+        this.eatBits(p[0]);
+        return p[1];
+      }
+    } else {
+      var result = this.findTableCode(1, 9, whiteTable2);
+      if (result[0]) {
+        return result[1];
+      }
+
+      result = this.findTableCode(11, 12, whiteTable1);
+      if (result[0]) {
+        return result[1];
+      }
+    }
+    info('bad white code');
+    this.eatBits(1);
+    return 1;
+  };
+
+  CCITTFaxStream.prototype.getBlackCode =
+      function ccittFaxStreamGetBlackCode() {
+
+    var code, p;
+    if (this.eoblock) {
+      code = this.lookBits(13);
+      if (code === EOF) {
+        return 1;
+      }
+      if ((code >> 7) === 0) {
+        p = blackTable1[code];
+      } else if ((code >> 9) === 0 && (code >> 7) !== 0) {
+        p = blackTable2[(code >> 1) - 64];
+      } else {
+        p = blackTable3[code >> 7];
+      }
+
+      if (p[0] > 0) {
+        this.eatBits(p[0]);
+        return p[1];
+      }
+    } else {
+      var result = this.findTableCode(2, 6, blackTable3);
+      if (result[0]) {
+        return result[1];
+      }
+
+      result = this.findTableCode(7, 12, blackTable2, 64);
+      if (result[0]) {
+        return result[1];
+      }
+
+      result = this.findTableCode(10, 13, blackTable1);
+      if (result[0]) {
+        return result[1];
+      }
+    }
+    info('bad black code');
+    this.eatBits(1);
+    return 1;
+  };
+
+  CCITTFaxStream.prototype.lookBits = function CCITTFaxStream_lookBits(n) {
+    var c;
+    while (this.inputBits < n) {
+      if ((c = this.str.getByte()) === -1) {
+        if (this.inputBits === 0) {
+          return EOF;
+        }
+        return ((this.inputBuf << (n - this.inputBits)) &
+                (0xFFFF >> (16 - n)));
+      }
+      this.inputBuf = (this.inputBuf << 8) + c;
+      this.inputBits += 8;
+    }
+    return (this.inputBuf >> (this.inputBits - n)) & (0xFFFF >> (16 - n));
+  };
+
+  CCITTFaxStream.prototype.eatBits = function CCITTFaxStream_eatBits(n) {
+    if ((this.inputBits -= n) < 0) {
+      this.inputBits = 0;
+    }
+  };
+
+  return CCITTFaxStream;
+})();
+
+var LZWStream = (function LZWStreamClosure() {
+  function LZWStream(str, maybeLength, earlyChange) {
+    this.str = str;
+    this.dict = str.dict;
+    this.cachedData = 0;
+    this.bitsCached = 0;
+
+    var maxLzwDictionarySize = 4096;
+    var lzwState = {
+      earlyChange: earlyChange,
+      codeLength: 9,
+      nextCode: 258,
+      dictionaryValues: new Uint8Array(maxLzwDictionarySize),
+      dictionaryLengths: new Uint16Array(maxLzwDictionarySize),
+      dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize),
+      currentSequence: new Uint8Array(maxLzwDictionarySize),
+      currentSequenceLength: 0
+    };
+    for (var i = 0; i < 256; ++i) {
+      lzwState.dictionaryValues[i] = i;
+      lzwState.dictionaryLengths[i] = 1;
+    }
+    this.lzwState = lzwState;
+
+    DecodeStream.call(this, maybeLength);
+  }
+
+  LZWStream.prototype = Object.create(DecodeStream.prototype);
+
+  LZWStream.prototype.readBits = function LZWStream_readBits(n) {
+    var bitsCached = this.bitsCached;
+    var cachedData = this.cachedData;
+    while (bitsCached < n) {
+      var c = this.str.getByte();
+      if (c === -1) {
+        this.eof = true;
+        return null;
+      }
+      cachedData = (cachedData << 8) | c;
+      bitsCached += 8;
+    }
+    this.bitsCached = (bitsCached -= n);
+    this.cachedData = cachedData;
+    this.lastCode = null;
+    return (cachedData >>> bitsCached) & ((1 << n) - 1);
+  };
+
+  LZWStream.prototype.readBlock = function LZWStream_readBlock() {
+    var blockSize = 512;
+    var estimatedDecodedSize = blockSize * 2, decodedSizeDelta = blockSize;
+    var i, j, q;
+
+    var lzwState = this.lzwState;
+    if (!lzwState) {
+      return; // eof was found
+    }
+
+    var earlyChange = lzwState.earlyChange;
+    var nextCode = lzwState.nextCode;
+    var dictionaryValues = lzwState.dictionaryValues;
+    var dictionaryLengths = lzwState.dictionaryLengths;
+    var dictionaryPrevCodes = lzwState.dictionaryPrevCodes;
+    var codeLength = lzwState.codeLength;
+    var prevCode = lzwState.prevCode;
+    var currentSequence = lzwState.currentSequence;
+    var currentSequenceLength = lzwState.currentSequenceLength;
+
+    var decodedLength = 0;
+    var currentBufferLength = this.bufferLength;
+    var buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);
+
+    for (i = 0; i < blockSize; i++) {
+      var code = this.readBits(codeLength);
+      var hasPrev = currentSequenceLength > 0;
+      if (code < 256) {
+        currentSequence[0] = code;
+        currentSequenceLength = 1;
+      } else if (code >= 258) {
+        if (code < nextCode) {
+          currentSequenceLength = dictionaryLengths[code];
+          for (j = currentSequenceLength - 1, q = code; j >= 0; j--) {
+            currentSequence[j] = dictionaryValues[q];
+            q = dictionaryPrevCodes[q];
+          }
+        } else {
+          currentSequence[currentSequenceLength++] = currentSequence[0];
+        }
+      } else if (code === 256) {
+        codeLength = 9;
+        nextCode = 258;
+        currentSequenceLength = 0;
+        continue;
+      } else {
+        this.eof = true;
+        delete this.lzwState;
+        break;
+      }
+
+      if (hasPrev) {
+        dictionaryPrevCodes[nextCode] = prevCode;
+        dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1;
+        dictionaryValues[nextCode] = currentSequence[0];
+        nextCode++;
+        codeLength = (nextCode + earlyChange) & (nextCode + earlyChange - 1) ?
+          codeLength : Math.min(Math.log(nextCode + earlyChange) /
+          0.6931471805599453 + 1, 12) | 0;
+      }
+      prevCode = code;
+
+      decodedLength += currentSequenceLength;
+      if (estimatedDecodedSize < decodedLength) {
+        do {
+          estimatedDecodedSize += decodedSizeDelta;
+        } while (estimatedDecodedSize < decodedLength);
+        buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);
+      }
+      for (j = 0; j < currentSequenceLength; j++) {
+        buffer[currentBufferLength++] = currentSequence[j];
+      }
+    }
+    lzwState.nextCode = nextCode;
+    lzwState.codeLength = codeLength;
+    lzwState.prevCode = prevCode;
+    lzwState.currentSequenceLength = currentSequenceLength;
+
+    this.bufferLength = currentBufferLength;
+  };
+
+  return LZWStream;
+})();
+
+var NullStream = (function NullStreamClosure() {
+  function NullStream() {
+    Stream.call(this, new Uint8Array(0));
+  }
+
+  NullStream.prototype = Stream.prototype;
+
+  return NullStream;
+})();
+
+
+var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
+  setup: function wphSetup(handler) {
+    var pdfManager;
+
+    function loadDocument(recoveryMode) {
+      var loadDocumentCapability = createPromiseCapability();
+
+      var parseSuccess = function parseSuccess() {
+        var numPagesPromise = pdfManager.ensureDoc('numPages');
+        var fingerprintPromise = pdfManager.ensureDoc('fingerprint');
+        var encryptedPromise = pdfManager.ensureXRef('encrypt');
+        Promise.all([numPagesPromise, fingerprintPromise,
+                     encryptedPromise]).then(function onDocReady(results) {
+          var doc = {
+            numPages: results[0],
+            fingerprint: results[1],
+            encrypted: !!results[2],
+          };
+          loadDocumentCapability.resolve(doc);
+        },
+        parseFailure);
+      };
+
+      var parseFailure = function parseFailure(e) {
+        loadDocumentCapability.reject(e);
+      };
+
+      pdfManager.ensureDoc('checkHeader', []).then(function() {
+        pdfManager.ensureDoc('parseStartXRef', []).then(function() {
+          pdfManager.ensureDoc('parse', [recoveryMode]).then(
+            parseSuccess, parseFailure);
+        }, parseFailure);
+      }, parseFailure);
+
+      return loadDocumentCapability.promise;
+    }
+
+    function getPdfManager(data) {
+      var pdfManagerCapability = createPromiseCapability();
+
+      var source = data.source;
+      var disableRange = data.disableRange;
+      if (source.data) {
+        try {
+          pdfManager = new LocalPdfManager(source.data, source.password);
+          pdfManagerCapability.resolve();
+        } catch (ex) {
+          pdfManagerCapability.reject(ex);
+        }
+        return pdfManagerCapability.promise;
+      } else if (source.chunkedViewerLoading) {
+        try {
+          pdfManager = new NetworkPdfManager(source, handler);
+          pdfManagerCapability.resolve();
+        } catch (ex) {
+          pdfManagerCapability.reject(ex);
+        }
+        return pdfManagerCapability.promise;
+      }
+
+      var networkManager = new NetworkManager(source.url, {
+        httpHeaders: source.httpHeaders,
+        withCredentials: source.withCredentials
+      });
+      var cachedChunks = [];
+      var fullRequestXhrId = networkManager.requestFull({
+        onHeadersReceived: function onHeadersReceived() {
+          if (disableRange) {
+            return;
+          }
+
+          var fullRequestXhr = networkManager.getRequestXhr(fullRequestXhrId);
+          if (fullRequestXhr.getResponseHeader('Accept-Ranges') !== 'bytes') {
+            return;
+          }
+
+          var contentEncoding =
+            fullRequestXhr.getResponseHeader('Content-Encoding') || 'identity';
+          if (contentEncoding !== 'identity') {
+            return;
+          }
+
+          var length = fullRequestXhr.getResponseHeader('Content-Length');
+          length = parseInt(length, 10);
+          if (!isInt(length)) {
+            return;
+          }
+          source.length = length;
+          if (length <= 2 * RANGE_CHUNK_SIZE) {
+            // The file size is smaller than the size of two chunks, so it does
+            // not make any sense to abort the request and retry with a range
+            // request.
+            return;
+          }
+
+          if (networkManager.isStreamingRequest(fullRequestXhrId)) {
+            // We can continue fetching when progressive loading is enabled,
+            // and we don't need the autoFetch feature.
+            source.disableAutoFetch = true;
+          } else {
+            // NOTE: by cancelling the full request, and then issuing range
+            // requests, there will be an issue for sites where you can only
+            // request the pdf once. However, if this is the case, then the
+            // server should not be returning that it can support range
+            // requests.
+            networkManager.abortRequest(fullRequestXhrId);
+          }
+
+          try {
+            pdfManager = new NetworkPdfManager(source, handler);
+            pdfManagerCapability.resolve(pdfManager);
+          } catch (ex) {
+            pdfManagerCapability.reject(ex);
+          }
+        },
+
+        onProgressiveData: source.disableStream ? null :
+            function onProgressiveData(chunk) {
+          if (!pdfManager) {
+            cachedChunks.push(chunk);
+            return;
+          }
+          pdfManager.sendProgressiveData(chunk);
+        },
+
+        onDone: function onDone(args) {
+          if (pdfManager) {
+            return; // already processed
+          }
+
+          var pdfFile;
+          if (args === null) {
+            // TODO add some streaming manager, e.g. for unknown length files.
+            // The data was returned in the onProgressiveData, combining...
+            var pdfFileLength = 0, pos = 0;
+            cachedChunks.forEach(function (chunk) {
+              pdfFileLength += chunk.byteLength;
+            });
+            if (source.length && pdfFileLength !== source.length) {
+              warn('reported HTTP length is different from actual');
+            }
+            var pdfFileArray = new Uint8Array(pdfFileLength);
+            cachedChunks.forEach(function (chunk) {
+              pdfFileArray.set(new Uint8Array(chunk), pos);
+              pos += chunk.byteLength;
+            });
+            pdfFile = pdfFileArray.buffer;
+          } else {
+            pdfFile = args.chunk;
+          }
+
+          // the data is array, instantiating directly from it
+          try {
+            pdfManager = new LocalPdfManager(pdfFile, source.password);
+            pdfManagerCapability.resolve();
+          } catch (ex) {
+            pdfManagerCapability.reject(ex);
+          }
+        },
+
+        onError: function onError(status) {
+          var exception;
+          if (status === 404) {
+            exception = new MissingPDFException('Missing PDF "' +
+                                                source.url + '".');
+            handler.send('MissingPDF', exception);
+          } else {
+            exception = new UnexpectedResponseException(
+              'Unexpected server response (' + status +
+              ') while retrieving PDF "' + source.url + '".', status);
+            handler.send('UnexpectedResponse', exception);
+          }
+        },
+
+        onProgress: function onProgress(evt) {
+          handler.send('DocProgress', {
+            loaded: evt.loaded,
+            total: evt.lengthComputable ? evt.total : source.length
+          });
+        }
+      });
+
+      return pdfManagerCapability.promise;
+    }
+
+    handler.on('test', function wphSetupTest(data) {
+      // check if Uint8Array can be sent to worker
+      if (!(data instanceof Uint8Array)) {
+        handler.send('test', false);
+        return;
+      }
+      // making sure postMessage transfers are working
+      var supportTransfers = data[0] === 255;
+      handler.postMessageTransfers = supportTransfers;
+      // check if the response property is supported by xhr
+      var xhr = new XMLHttpRequest();
+      var responseExists = 'response' in xhr;
+      // check if the property is actually implemented
+      try {
+        var dummy = xhr.responseType;
+      } catch (e) {
+        responseExists = false;
+      }
+      if (!responseExists) {
+        handler.send('test', false);
+        return;
+      }
+      handler.send('test', {
+        supportTypedArray: true,
+        supportTransfers: supportTransfers
+      });
+    });
+
+    handler.on('GetDocRequest', function wphSetupDoc(data) {
+
+      var onSuccess = function(doc) {
+        handler.send('GetDoc', { pdfInfo: doc });
+      };
+
+      var onFailure = function(e) {
+        if (e instanceof PasswordException) {
+          if (e.code === PasswordResponses.NEED_PASSWORD) {
+            handler.send('NeedPassword', e);
+          } else if (e.code === PasswordResponses.INCORRECT_PASSWORD) {
+            handler.send('IncorrectPassword', e);
+          }
+        } else if (e instanceof InvalidPDFException) {
+          handler.send('InvalidPDF', e);
+        } else if (e instanceof MissingPDFException) {
+          handler.send('MissingPDF', e);
+        } else if (e instanceof UnexpectedResponseException) {
+          handler.send('UnexpectedResponse', e);
+        } else {
+          handler.send('UnknownError',
+                       new UnknownErrorException(e.message, e.toString()));
+        }
+      };
+
+      PDFJS.maxImageSize = data.maxImageSize === undefined ?
+                           -1 : data.maxImageSize;
+      PDFJS.disableFontFace = data.disableFontFace;
+      PDFJS.disableCreateObjectURL = data.disableCreateObjectURL;
+      PDFJS.verbosity = data.verbosity;
+      PDFJS.cMapUrl = data.cMapUrl === undefined ?
+                           null : data.cMapUrl;
+      PDFJS.cMapPacked = data.cMapPacked === true;
+
+      getPdfManager(data).then(function () {
+        handler.send('PDFManagerReady', null);
+        pdfManager.onLoadedStream().then(function(stream) {
+          handler.send('DataLoaded', { length: stream.bytes.byteLength });
+        });
+      }).then(function pdfManagerReady() {
+        loadDocument(false).then(onSuccess, function loadFailure(ex) {
+          // Try again with recoveryMode == true
+          if (!(ex instanceof XRefParseException)) {
+            if (ex instanceof PasswordException) {
+              // after password exception prepare to receive a new password
+              // to repeat loading
+              pdfManager.passwordChanged().then(pdfManagerReady);
+            }
+
+            onFailure(ex);
+            return;
+          }
+
+          pdfManager.requestLoadedStream();
+          pdfManager.onLoadedStream().then(function() {
+            loadDocument(true).then(onSuccess, onFailure);
+          });
+        }, onFailure);
+      }, onFailure);
+    });
+
+    handler.on('GetPage', function wphSetupGetPage(data) {
+      return pdfManager.getPage(data.pageIndex).then(function(page) {
+        var rotatePromise = pdfManager.ensure(page, 'rotate');
+        var refPromise = pdfManager.ensure(page, 'ref');
+        var viewPromise = pdfManager.ensure(page, 'view');
+
+        return Promise.all([rotatePromise, refPromise, viewPromise]).then(
+            function(results) {
+          return {
+            rotate: results[0],
+            ref: results[1],
+            view: results[2]
+          };
+        });
+      });
+    });
+
+    handler.on('GetPageIndex', function wphSetupGetPageIndex(data) {
+      var ref = new Ref(data.ref.num, data.ref.gen);
+      var catalog = pdfManager.pdfDocument.catalog;
+      return catalog.getPageIndex(ref);
+    });
+
+    handler.on('GetDestinations',
+      function wphSetupGetDestinations(data) {
+        return pdfManager.ensureCatalog('destinations');
+      }
+    );
+
+    handler.on('GetDestination',
+      function wphSetupGetDestination(data) {
+        return pdfManager.ensureCatalog('getDestination', [ data.id ]);
+      }
+    );
+
+    handler.on('GetAttachments',
+      function wphSetupGetAttachments(data) {
+        return pdfManager.ensureCatalog('attachments');
+      }
+    );
+
+    handler.on('GetJavaScript',
+      function wphSetupGetJavaScript(data) {
+        return pdfManager.ensureCatalog('javaScript');
+      }
+    );
+
+    handler.on('GetOutline',
+      function wphSetupGetOutline(data) {
+        return pdfManager.ensureCatalog('documentOutline');
+      }
+    );
+
+    handler.on('GetMetadata',
+      function wphSetupGetMetadata(data) {
+        return Promise.all([pdfManager.ensureDoc('documentInfo'),
+                            pdfManager.ensureCatalog('metadata')]);
+      }
+    );
+
+    handler.on('GetData', function wphSetupGetData(data) {
+      pdfManager.requestLoadedStream();
+      return pdfManager.onLoadedStream().then(function(stream) {
+        return stream.bytes;
+      });
+    });
+
+    handler.on('GetStats',
+      function wphSetupGetStats(data) {
+        return pdfManager.pdfDocument.xref.stats;
+      }
+    );
+
+    handler.on('UpdatePassword', function wphSetupUpdatePassword(data) {
+      pdfManager.updatePassword(data);
+    });
+
+    handler.on('GetAnnotations', function wphSetupGetAnnotations(data) {
+      return pdfManager.getPage(data.pageIndex).then(function(page) {
+        return pdfManager.ensure(page, 'getAnnotationsData', []);
+      });
+    });
+
+    handler.on('RenderPageRequest', function wphSetupRenderPage(data) {
+      pdfManager.getPage(data.pageIndex).then(function(page) {
+
+        var pageNum = data.pageIndex + 1;
+        var start = Date.now();
+        // Pre compile the pdf page and fetch the fonts/images.
+        page.getOperatorList(handler, data.intent).then(function(operatorList) {
+
+          info('page=' + pageNum + ' - getOperatorList: time=' +
+               (Date.now() - start) + 'ms, len=' + operatorList.fnArray.length);
+
+        }, function(e) {
+
+          var minimumStackMessage =
+            'worker.js: while trying to getPage() and getOperatorList()';
+
+          var wrappedException;
+
+          // Turn the error into an obj that can be serialized
+          if (typeof e === 'string') {
+            wrappedException = {
+              message: e,
+              stack: minimumStackMessage
+            };
+          } else if (typeof e === 'object') {
+            wrappedException = {
+              message: e.message || e.toString(),
+              stack: e.stack || minimumStackMessage
+            };
+          } else {
+            wrappedException = {
+              message: 'Unknown exception type: ' + (typeof e),
+              stack: minimumStackMessage
+            };
+          }
+
+          handler.send('PageError', {
+            pageNum: pageNum,
+            error: wrappedException,
+            intent: data.intent
+          });
+        });
+      });
+    }, this);
+
+    handler.on('GetTextContent', function wphExtractText(data) {
+      return pdfManager.getPage(data.pageIndex).then(function(page) {
+        var pageNum = data.pageIndex + 1;
+        var start = Date.now();
+        return page.extractTextContent().then(function(textContent) {
+          info('text indexing: page=' + pageNum + ' - time=' +
+               (Date.now() - start) + 'ms');
+          return textContent;
+        });
+      });
+    });
+
+    handler.on('Cleanup', function wphCleanup(data) {
+      return pdfManager.cleanup();
+    });
+
+    handler.on('Terminate', function wphTerminate(data) {
+      pdfManager.terminate();
+    });
+  }
+};
+
+var consoleTimer = {};
+
+var workerConsole = {
+  log: function log() {
+    var args = Array.prototype.slice.call(arguments);
+    globalScope.postMessage({
+      action: 'console_log',
+      data: args
+    });
+  },
+
+  error: function error() {
+    var args = Array.prototype.slice.call(arguments);
+    globalScope.postMessage({
+      action: 'console_error',
+      data: args
+    });
+    throw 'pdf.js execution error';
+  },
+
+  time: function time(name) {
+    consoleTimer[name] = Date.now();
+  },
+
+  timeEnd: function timeEnd(name) {
+    var time = consoleTimer[name];
+    if (!time) {
+      error('Unknown timer name ' + name);
+    }
+    this.log('Timer:', name, Date.now() - time);
+  }
+};
+
+
+// Worker thread?
+if (typeof window === 'undefined') {
+  if (!('console' in globalScope)) {
+    globalScope.console = workerConsole;
+  }
+
+  // Listen for unsupported features so we can pass them on to the main thread.
+  PDFJS.UnsupportedManager.listen(function (msg) {
+    globalScope.postMessage({
+      action: '_unsupported_feature',
+      data: msg
+    });
+  });
+
+  var handler = new MessageHandler('worker_processor', this);
+  WorkerMessageHandler.setup(handler);
+}
+
+
+/* This class implements the QM Coder decoding as defined in
+ *   JPEG 2000 Part I Final Committee Draft Version 1.0
+ *   Annex C.3 Arithmetic decoding procedure
+ * available at http://www.jpeg.org/public/fcd15444-1.pdf
+ *
+ * The arithmetic decoder is used in conjunction with context models to decode
+ * JPEG2000 and JBIG2 streams.
+ */
+var ArithmeticDecoder = (function ArithmeticDecoderClosure() {
+  // Table C-2
+  var QeTable = [
+    {qe: 0x5601, nmps: 1, nlps: 1, switchFlag: 1},
+    {qe: 0x3401, nmps: 2, nlps: 6, switchFlag: 0},
+    {qe: 0x1801, nmps: 3, nlps: 9, switchFlag: 0},
+    {qe: 0x0AC1, nmps: 4, nlps: 12, switchFlag: 0},
+    {qe: 0x0521, nmps: 5, nlps: 29, switchFlag: 0},
+    {qe: 0x0221, nmps: 38, nlps: 33, switchFlag: 0},
+    {qe: 0x5601, nmps: 7, nlps: 6, switchFlag: 1},
+    {qe: 0x5401, nmps: 8, nlps: 14, switchFlag: 0},
+    {qe: 0x4801, nmps: 9, nlps: 14, switchFlag: 0},
+    {qe: 0x3801, nmps: 10, nlps: 14, switchFlag: 0},
+    {qe: 0x3001, nmps: 11, nlps: 17, switchFlag: 0},
+    {qe: 0x2401, nmps: 12, nlps: 18, switchFlag: 0},
+    {qe: 0x1C01, nmps: 13, nlps: 20, switchFlag: 0},
+    {qe: 0x1601, nmps: 29, nlps: 21, switchFlag: 0},
+    {qe: 0x5601, nmps: 15, nlps: 14, switchFlag: 1},
+    {qe: 0x5401, nmps: 16, nlps: 14, switchFlag: 0},
+    {qe: 0x5101, nmps: 17, nlps: 15, switchFlag: 0},
+    {qe: 0x4801, nmps: 18, nlps: 16, switchFlag: 0},
+    {qe: 0x3801, nmps: 19, nlps: 17, switchFlag: 0},
+    {qe: 0x3401, nmps: 20, nlps: 18, switchFlag: 0},
+    {qe: 0x3001, nmps: 21, nlps: 19, switchFlag: 0},
+    {qe: 0x2801, nmps: 22, nlps: 19, switchFlag: 0},
+    {qe: 0x2401, nmps: 23, nlps: 20, switchFlag: 0},
+    {qe: 0x2201, nmps: 24, nlps: 21, switchFlag: 0},
+    {qe: 0x1C01, nmps: 25, nlps: 22, switchFlag: 0},
+    {qe: 0x1801, nmps: 26, nlps: 23, switchFlag: 0},
+    {qe: 0x1601, nmps: 27, nlps: 24, switchFlag: 0},
+    {qe: 0x1401, nmps: 28, nlps: 25, switchFlag: 0},
+    {qe: 0x1201, nmps: 29, nlps: 26, switchFlag: 0},
+    {qe: 0x1101, nmps: 30, nlps: 27, switchFlag: 0},
+    {qe: 0x0AC1, nmps: 31, nlps: 28, switchFlag: 0},
+    {qe: 0x09C1, nmps: 32, nlps: 29, switchFlag: 0},
+    {qe: 0x08A1, nmps: 33, nlps: 30, switchFlag: 0},
+    {qe: 0x0521, nmps: 34, nlps: 31, switchFlag: 0},
+    {qe: 0x0441, nmps: 35, nlps: 32, switchFlag: 0},
+    {qe: 0x02A1, nmps: 36, nlps: 33, switchFlag: 0},
+    {qe: 0x0221, nmps: 37, nlps: 34, switchFlag: 0},
+    {qe: 0x0141, nmps: 38, nlps: 35, switchFlag: 0},
+    {qe: 0x0111, nmps: 39, nlps: 36, switchFlag: 0},
+    {qe: 0x0085, nmps: 40, nlps: 37, switchFlag: 0},
+    {qe: 0x0049, nmps: 41, nlps: 38, switchFlag: 0},
+    {qe: 0x0025, nmps: 42, nlps: 39, switchFlag: 0},
+    {qe: 0x0015, nmps: 43, nlps: 40, switchFlag: 0},
+    {qe: 0x0009, nmps: 44, nlps: 41, switchFlag: 0},
+    {qe: 0x0005, nmps: 45, nlps: 42, switchFlag: 0},
+    {qe: 0x0001, nmps: 45, nlps: 43, switchFlag: 0},
+    {qe: 0x5601, nmps: 46, nlps: 46, switchFlag: 0}
+  ];
+
+  // C.3.5 Initialisation of the decoder (INITDEC)
+  function ArithmeticDecoder(data, start, end) {
+    this.data = data;
+    this.bp = start;
+    this.dataEnd = end;
+
+    this.chigh = data[start];
+    this.clow = 0;
+
+    this.byteIn();
+
+    this.chigh = ((this.chigh << 7) & 0xFFFF) | ((this.clow >> 9) & 0x7F);
+    this.clow = (this.clow << 7) & 0xFFFF;
+    this.ct -= 7;
+    this.a = 0x8000;
+  }
+
+  ArithmeticDecoder.prototype = {
+    // C.3.4 Compressed data input (BYTEIN)
+    byteIn: function ArithmeticDecoder_byteIn() {
+      var data = this.data;
+      var bp = this.bp;
+      if (data[bp] === 0xFF) {
+        var b1 = data[bp + 1];
+        if (b1 > 0x8F) {
+          this.clow += 0xFF00;
+          this.ct = 8;
+        } else {
+          bp++;
+          this.clow += (data[bp] << 9);
+          this.ct = 7;
+          this.bp = bp;
+        }
+      } else {
+        bp++;
+        this.clow += bp < this.dataEnd ? (data[bp] << 8) : 0xFF00;
+        this.ct = 8;
+        this.bp = bp;
+      }
+      if (this.clow > 0xFFFF) {
+        this.chigh += (this.clow >> 16);
+        this.clow &= 0xFFFF;
+      }
+    },
+    // C.3.2 Decoding a decision (DECODE)
+    readBit: function ArithmeticDecoder_readBit(contexts, pos) {
+      // contexts are packed into 1 byte:
+      // highest 7 bits carry cx.index, lowest bit carries cx.mps
+      var cx_index = contexts[pos] >> 1, cx_mps = contexts[pos] & 1;
+      var qeTableIcx = QeTable[cx_index];
+      var qeIcx = qeTableIcx.qe;
+      var d;
+      var a = this.a - qeIcx;
+
+      if (this.chigh < qeIcx) {
+        // exchangeLps
+        if (a < qeIcx) {
+          a = qeIcx;
+          d = cx_mps;
+          cx_index = qeTableIcx.nmps;
+        } else {
+          a = qeIcx;
+          d = 1 ^ cx_mps;
+          if (qeTableIcx.switchFlag === 1) {
+            cx_mps = d;
+          }
+          cx_index = qeTableIcx.nlps;
+        }
+      } else {
+        this.chigh -= qeIcx;
+        if ((a & 0x8000) !== 0) {
+          this.a = a;
+          return cx_mps;
+        }
+        // exchangeMps
+        if (a < qeIcx) {
+          d = 1 ^ cx_mps;
+          if (qeTableIcx.switchFlag === 1) {
+            cx_mps = d;
+          }
+          cx_index = qeTableIcx.nlps;
+        } else {
+          d = cx_mps;
+          cx_index = qeTableIcx.nmps;
+        }
+      }
+      // C.3.3 renormD;
+      do {
+        if (this.ct === 0) {
+          this.byteIn();
+        }
+
+        a <<= 1;
+        this.chigh = ((this.chigh << 1) & 0xFFFF) | ((this.clow >> 15) & 1);
+        this.clow = (this.clow << 1) & 0xFFFF;
+        this.ct--;
+      } while ((a & 0x8000) === 0);
+      this.a = a;
+
+      contexts[pos] = cx_index << 1 | cx_mps;
+      return d;
+    }
+  };
+
+  return ArithmeticDecoder;
+})();
+
+
+var JpegImage = (function jpegImage() {
+  var dctZigZag = new Uint8Array([
+     0,
+     1,  8,
+    16,  9,  2,
+     3, 10, 17, 24,
+    32, 25, 18, 11, 4,
+     5, 12, 19, 26, 33, 40,
+    48, 41, 34, 27, 20, 13,  6,
+     7, 14, 21, 28, 35, 42, 49, 56,
+    57, 50, 43, 36, 29, 22, 15,
+    23, 30, 37, 44, 51, 58,
+    59, 52, 45, 38, 31,
+    39, 46, 53, 60,
+    61, 54, 47,
+    55, 62,
+    63
+  ]);
+
+  var dctCos1  =  4017;   // cos(pi/16)
+  var dctSin1  =   799;   // sin(pi/16)
+  var dctCos3  =  3406;   // cos(3*pi/16)
+  var dctSin3  =  2276;   // sin(3*pi/16)
+  var dctCos6  =  1567;   // cos(6*pi/16)
+  var dctSin6  =  3784;   // sin(6*pi/16)
+  var dctSqrt2 =  5793;   // sqrt(2)
+  var dctSqrt1d2 = 2896;  // sqrt(2) / 2
+
+  function constructor() {
+  }
+
+  function buildHuffmanTable(codeLengths, values) {
+    var k = 0, code = [], i, j, length = 16;
+    while (length > 0 && !codeLengths[length - 1]) {
+      length--;
+    }
+    code.push({children: [], index: 0});
+    var p = code[0], q;
+    for (i = 0; i < length; i++) {
+      for (j = 0; j < codeLengths[i]; j++) {
+        p = code.pop();
+        p.children[p.index] = values[k];
+        while (p.index > 0) {
+          p = code.pop();
+        }
+        p.index++;
+        code.push(p);
+        while (code.length <= i) {
+          code.push(q = {children: [], index: 0});
+          p.children[p.index] = q.children;
+          p = q;
+        }
+        k++;
+      }
+      if (i + 1 < length) {
+        // p here points to last code
+        code.push(q = {children: [], index: 0});
+        p.children[p.index] = q.children;
+        p = q;
+      }
+    }
+    return code[0].children;
+  }
+
+  function getBlockBufferOffset(component, row, col) {
+    return 64 * ((component.blocksPerLine + 1) * row + col);
+  }
+
+  function decodeScan(data, offset, frame, components, resetInterval,
+                      spectralStart, spectralEnd, successivePrev, successive) {
+    var precision = frame.precision;
+    var samplesPerLine = frame.samplesPerLine;
+    var scanLines = frame.scanLines;
+    var mcusPerLine = frame.mcusPerLine;
+    var progressive = frame.progressive;
+    var maxH = frame.maxH, maxV = frame.maxV;
+
+    var startOffset = offset, bitsData = 0, bitsCount = 0;
+
+    function readBit() {
+      if (bitsCount > 0) {
+        bitsCount--;
+        return (bitsData >> bitsCount) & 1;
+      }
+      bitsData = data[offset++];
+      if (bitsData === 0xFF) {
+        var nextByte = data[offset++];
+        if (nextByte) {
+          throw 'unexpected marker: ' +
+            ((bitsData << 8) | nextByte).toString(16);
+        }
+        // unstuff 0
+      }
+      bitsCount = 7;
+      return bitsData >>> 7;
+    }
+
+    function decodeHuffman(tree) {
+      var node = tree;
+      while (true) {
+        node = node[readBit()];
+        if (typeof node === 'number') {
+          return node;
+        }
+        if (typeof node !== 'object') {
+          throw 'invalid huffman sequence';
+        }
+      }
+    }
+
+    function receive(length) {
+      var n = 0;
+      while (length > 0) {
+        n = (n << 1) | readBit();
+        length--;
+      }
+      return n;
+    }
+
+    function receiveAndExtend(length) {
+      if (length === 1) {
+        return readBit() === 1 ? 1 : -1;
+      }
+      var n = receive(length);
+      if (n >= 1 << (length - 1)) {
+        return n;
+      }
+      return n + (-1 << length) + 1;
+    }
+
+    function decodeBaseline(component, offset) {
+      var t = decodeHuffman(component.huffmanTableDC);
+      var diff = t === 0 ? 0 : receiveAndExtend(t);
+      component.blockData[offset] = (component.pred += diff);
+      var k = 1;
+      while (k < 64) {
+        var rs = decodeHuffman(component.huffmanTableAC);
+        var s = rs & 15, r = rs >> 4;
+        if (s === 0) {
+          if (r < 15) {
+            break;
+          }
+          k += 16;
+          continue;
+        }
+        k += r;
+        var z = dctZigZag[k];
+        component.blockData[offset + z] = receiveAndExtend(s);
+        k++;
+      }
+    }
+
+    function decodeDCFirst(component, offset) {
+      var t = decodeHuffman(component.huffmanTableDC);
+      var diff = t === 0 ? 0 : (receiveAndExtend(t) << successive);
+      component.blockData[offset] = (component.pred += diff);
+    }
+
+    function decodeDCSuccessive(component, offset) {
+      component.blockData[offset] |= readBit() << successive;
+    }
+
+    var eobrun = 0;
+    function decodeACFirst(component, offset) {
+      if (eobrun > 0) {
+        eobrun--;
+        return;
+      }
+      var k = spectralStart, e = spectralEnd;
+      while (k <= e) {
+        var rs = decodeHuffman(component.huffmanTableAC);
+        var s = rs & 15, r = rs >> 4;
+        if (s === 0) {
+          if (r < 15) {
+            eobrun = receive(r) + (1 << r) - 1;
+            break;
+          }
+          k += 16;
+          continue;
+        }
+        k += r;
+        var z = dctZigZag[k];
+        component.blockData[offset + z] =
+          receiveAndExtend(s) * (1 << successive);
+        k++;
+      }
+    }
+
+    var successiveACState = 0, successiveACNextValue;
+    function decodeACSuccessive(component, offset) {
+      var k = spectralStart;
+      var e = spectralEnd;
+      var r = 0;
+      var s;
+      var rs;
+      while (k <= e) {
+        var z = dctZigZag[k];
+        switch (successiveACState) {
+        case 0: // initial state
+          rs = decodeHuffman(component.huffmanTableAC);
+          s = rs & 15;
+          r = rs >> 4;
+          if (s === 0) {
+            if (r < 15) {
+              eobrun = receive(r) + (1 << r);
+              successiveACState = 4;
+            } else {
+              r = 16;
+              successiveACState = 1;
+            }
+          } else {
+            if (s !== 1) {
+              throw 'invalid ACn encoding';
+            }
+            successiveACNextValue = receiveAndExtend(s);
+            successiveACState = r ? 2 : 3;
+          }
+          continue;
+        case 1: // skipping r zero items
+        case 2:
+          if (component.blockData[offset + z]) {
+            component.blockData[offset + z] += (readBit() << successive);
+          } else {
+            r--;
+            if (r === 0) {
+              successiveACState = successiveACState === 2 ? 3 : 0;
+            }
+          }
+          break;
+        case 3: // set value for a zero item
+          if (component.blockData[offset + z]) {
+            component.blockData[offset + z] += (readBit() << successive);
+          } else {
+            component.blockData[offset + z] =
+              successiveACNextValue << successive;
+            successiveACState = 0;
+          }
+          break;
+        case 4: // eob
+          if (component.blockData[offset + z]) {
+            component.blockData[offset + z] += (readBit() << successive);
+          }
+          break;
+        }
+        k++;
+      }
+      if (successiveACState === 4) {
+        eobrun--;
+        if (eobrun === 0) {
+          successiveACState = 0;
+        }
+      }
+    }
+
+    function decodeMcu(component, decode, mcu, row, col) {
+      var mcuRow = (mcu / mcusPerLine) | 0;
+      var mcuCol = mcu % mcusPerLine;
+      var blockRow = mcuRow * component.v + row;
+      var blockCol = mcuCol * component.h + col;
+      var offset = getBlockBufferOffset(component, blockRow, blockCol);
+      decode(component, offset);
+    }
+
+    function decodeBlock(component, decode, mcu) {
+      var blockRow = (mcu / component.blocksPerLine) | 0;
+      var blockCol = mcu % component.blocksPerLine;
+      var offset = getBlockBufferOffset(component, blockRow, blockCol);
+      decode(component, offset);
+    }
+
+    var componentsLength = components.length;
+    var component, i, j, k, n;
+    var decodeFn;
+    if (progressive) {
+      if (spectralStart === 0) {
+        decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;
+      } else {
+        decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;
+      }
+    } else {
+      decodeFn = decodeBaseline;
+    }
+
+    var mcu = 0, marker;
+    var mcuExpected;
+    if (componentsLength === 1) {
+      mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;
+    } else {
+      mcuExpected = mcusPerLine * frame.mcusPerColumn;
+    }
+    if (!resetInterval) {
+      resetInterval = mcuExpected;
+    }
+
+    var h, v;
+    while (mcu < mcuExpected) {
+      // reset interval stuff
+      for (i = 0; i < componentsLength; i++) {
+        components[i].pred = 0;
+      }
+      eobrun = 0;
+
+      if (componentsLength === 1) {
+        component = components[0];
+        for (n = 0; n < resetInterval; n++) {
+          decodeBlock(component, decodeFn, mcu);
+          mcu++;
+        }
+      } else {
+        for (n = 0; n < resetInterval; n++) {
+          for (i = 0; i < componentsLength; i++) {
+            component = components[i];
+            h = component.h;
+            v = component.v;
+            for (j = 0; j < v; j++) {
+              for (k = 0; k < h; k++) {
+                decodeMcu(component, decodeFn, mcu, j, k);
+              }
+            }
+          }
+          mcu++;
+        }
+      }
+
+      // find marker
+      bitsCount = 0;
+      marker = (data[offset] << 8) | data[offset + 1];
+      if (marker <= 0xFF00) {
+        throw 'marker was not found';
+      }
+
+      if (marker >= 0xFFD0 && marker <= 0xFFD7) { // RSTx
+        offset += 2;
+      } else {
+        break;
+      }
+    }
+
+    return offset - startOffset;
+  }
+
+  // A port of poppler's IDCT method which in turn is taken from:
+  //   Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,
+  //   'Practical Fast 1-D DCT Algorithms with 11 Multiplications',
+  //   IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989,
+  //   988-991.
+  function quantizeAndInverse(component, blockBufferOffset, p) {
+    var qt = component.quantizationTable, blockData = component.blockData;
+    var v0, v1, v2, v3, v4, v5, v6, v7;
+    var p0, p1, p2, p3, p4, p5, p6, p7;
+    var t;
+
+    // inverse DCT on rows
+    for (var row = 0; row < 64; row += 8) {
+      // gather block data
+      p0 = blockData[blockBufferOffset + row];
+      p1 = blockData[blockBufferOffset + row + 1];
+      p2 = blockData[blockBufferOffset + row + 2];
+      p3 = blockData[blockBufferOffset + row + 3];
+      p4 = blockData[blockBufferOffset + row + 4];
+      p5 = blockData[blockBufferOffset + row + 5];
+      p6 = blockData[blockBufferOffset + row + 6];
+      p7 = blockData[blockBufferOffset + row + 7];
+
+      // dequant p0
+      p0 *= qt[row];
+
+      // check for all-zero AC coefficients
+      if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
+        t = (dctSqrt2 * p0 + 512) >> 10;
+        p[row] = t;
+        p[row + 1] = t;
+        p[row + 2] = t;
+        p[row + 3] = t;
+        p[row + 4] = t;
+        p[row + 5] = t;
+        p[row + 6] = t;
+        p[row + 7] = t;
+        continue;
+      }
+      // dequant p1 ... p7
+      p1 *= qt[row + 1];
+      p2 *= qt[row + 2];
+      p3 *= qt[row + 3];
+      p4 *= qt[row + 4];
+      p5 *= qt[row + 5];
+      p6 *= qt[row + 6];
+      p7 *= qt[row + 7];
+
+      // stage 4
+      v0 = (dctSqrt2 * p0 + 128) >> 8;
+      v1 = (dctSqrt2 * p4 + 128) >> 8;
+      v2 = p2;
+      v3 = p6;
+      v4 = (dctSqrt1d2 * (p1 - p7) + 128) >> 8;
+      v7 = (dctSqrt1d2 * (p1 + p7) + 128) >> 8;
+      v5 = p3 << 4;
+      v6 = p5 << 4;
+
+      // stage 3
+      v0 = (v0 + v1 + 1) >> 1;
+      v1 = v0 - v1;
+      t  = (v2 * dctSin6 + v3 * dctCos6 + 128) >> 8;
+      v2 = (v2 * dctCos6 - v3 * dctSin6 + 128) >> 8;
+      v3 = t;
+      v4 = (v4 + v6 + 1) >> 1;
+      v6 = v4 - v6;
+      v7 = (v7 + v5 + 1) >> 1;
+      v5 = v7 - v5;
+
+      // stage 2
+      v0 = (v0 + v3 + 1) >> 1;
+      v3 = v0 - v3;
+      v1 = (v1 + v2 + 1) >> 1;
+      v2 = v1 - v2;
+      t  = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;
+      v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;
+      v7 = t;
+      t  = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;
+      v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;
+      v6 = t;
+
+      // stage 1
+      p[row] = v0 + v7;
+      p[row + 7] = v0 - v7;
+      p[row + 1] = v1 + v6;
+      p[row + 6] = v1 - v6;
+      p[row + 2] = v2 + v5;
+      p[row + 5] = v2 - v5;
+      p[row + 3] = v3 + v4;
+      p[row + 4] = v3 - v4;
+    }
+
+    // inverse DCT on columns
+    for (var col = 0; col < 8; ++col) {
+      p0 = p[col];
+      p1 = p[col +  8];
+      p2 = p[col + 16];
+      p3 = p[col + 24];
+      p4 = p[col + 32];
+      p5 = p[col + 40];
+      p6 = p[col + 48];
+      p7 = p[col + 56];
+
+      // check for all-zero AC coefficients
+      if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
+        t = (dctSqrt2 * p0 + 8192) >> 14;
+        // convert to 8 bit
+        t = (t < -2040) ? 0 : (t >= 2024) ? 255 : (t + 2056) >> 4;
+        blockData[blockBufferOffset + col] = t;
+        blockData[blockBufferOffset + col +  8] = t;
+        blockData[blockBufferOffset + col + 16] = t;
+        blockData[blockBufferOffset + col + 24] = t;
+        blockData[blockBufferOffset + col + 32] = t;
+        blockData[blockBufferOffset + col + 40] = t;
+        blockData[blockBufferOffset + col + 48] = t;
+        blockData[blockBufferOffset + col + 56] = t;
+        continue;
+      }
+
+      // stage 4
+      v0 = (dctSqrt2 * p0 + 2048) >> 12;
+      v1 = (dctSqrt2 * p4 + 2048) >> 12;
+      v2 = p2;
+      v3 = p6;
+      v4 = (dctSqrt1d2 * (p1 - p7) + 2048) >> 12;
+      v7 = (dctSqrt1d2 * (p1 + p7) + 2048) >> 12;
+      v5 = p3;
+      v6 = p5;
+
+      // stage 3
+      // Shift v0 by 128.5 << 5 here, so we don't need to shift p0...p7 when
+      // converting to UInt8 range later.
+      v0 = ((v0 + v1 + 1) >> 1) + 4112;
+      v1 = v0 - v1;
+      t  = (v2 * dctSin6 + v3 * dctCos6 + 2048) >> 12;
+      v2 = (v2 * dctCos6 - v3 * dctSin6 + 2048) >> 12;
+      v3 = t;
+      v4 = (v4 + v6 + 1) >> 1;
+      v6 = v4 - v6;
+      v7 = (v7 + v5 + 1) >> 1;
+      v5 = v7 - v5;
+
+      // stage 2
+      v0 = (v0 + v3 + 1) >> 1;
+      v3 = v0 - v3;
+      v1 = (v1 + v2 + 1) >> 1;
+      v2 = v1 - v2;
+      t  = (v4 * dctSin3 + v7 * dctCos3 + 2048) >> 12;
+      v4 = (v4 * dctCos3 - v7 * dctSin3 + 2048) >> 12;
+      v7 = t;
+      t  = (v5 * dctSin1 + v6 * dctCos1 + 2048) >> 12;
+      v5 = (v5 * dctCos1 - v6 * dctSin1 + 2048) >> 12;
+      v6 = t;
+
+      // stage 1
+      p0 = v0 + v7;
+      p7 = v0 - v7;
+      p1 = v1 + v6;
+      p6 = v1 - v6;
+      p2 = v2 + v5;
+      p5 = v2 - v5;
+      p3 = v3 + v4;
+      p4 = v3 - v4;
+
+      // convert to 8-bit integers
+      p0 = (p0 < 16) ? 0 : (p0 >= 4080) ? 255 : p0 >> 4;
+      p1 = (p1 < 16) ? 0 : (p1 >= 4080) ? 255 : p1 >> 4;
+      p2 = (p2 < 16) ? 0 : (p2 >= 4080) ? 255 : p2 >> 4;
+      p3 = (p3 < 16) ? 0 : (p3 >= 4080) ? 255 : p3 >> 4;
+      p4 = (p4 < 16) ? 0 : (p4 >= 4080) ? 255 : p4 >> 4;
+      p5 = (p5 < 16) ? 0 : (p5 >= 4080) ? 255 : p5 >> 4;
+      p6 = (p6 < 16) ? 0 : (p6 >= 4080) ? 255 : p6 >> 4;
+      p7 = (p7 < 16) ? 0 : (p7 >= 4080) ? 255 : p7 >> 4;
+
+      // store block data
+      blockData[blockBufferOffset + col] = p0;
+      blockData[blockBufferOffset + col +  8] = p1;
+      blockData[blockBufferOffset + col + 16] = p2;
+      blockData[blockBufferOffset + col + 24] = p3;
+      blockData[blockBufferOffset + col + 32] = p4;
+      blockData[blockBufferOffset + col + 40] = p5;
+      blockData[blockBufferOffset + col + 48] = p6;
+      blockData[blockBufferOffset + col + 56] = p7;
+    }
+  }
+
+  function buildComponentData(frame, component) {
+    var blocksPerLine = component.blocksPerLine;
+    var blocksPerColumn = component.blocksPerColumn;
+    var computationBuffer = new Int16Array(64);
+
+    for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {
+      for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {
+        var offset = getBlockBufferOffset(component, blockRow, blockCol);
+        quantizeAndInverse(component, offset, computationBuffer);
+      }
+    }
+    return component.blockData;
+  }
+
+  function clamp0to255(a) {
+    return a <= 0 ? 0 : a >= 255 ? 255 : a;
+  }
+
+  constructor.prototype = {
+    parse: function parse(data) {
+
+      function readUint16() {
+        var value = (data[offset] << 8) | data[offset + 1];
+        offset += 2;
+        return value;
+      }
+
+      function readDataBlock() {
+        var length = readUint16();
+        var array = data.subarray(offset, offset + length - 2);
+        offset += array.length;
+        return array;
+      }
+
+      function prepareComponents(frame) {
+        var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);
+        var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);
+        for (var i = 0; i < frame.components.length; i++) {
+          component = frame.components[i];
+          var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) *
+                                        component.h / frame.maxH);
+          var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines  / 8) *
+                                          component.v / frame.maxV);
+          var blocksPerLineForMcu = mcusPerLine * component.h;
+          var blocksPerColumnForMcu = mcusPerColumn * component.v;
+
+          var blocksBufferSize = 64 * blocksPerColumnForMcu *
+                                      (blocksPerLineForMcu + 1);
+          component.blockData = new Int16Array(blocksBufferSize);
+          component.blocksPerLine = blocksPerLine;
+          component.blocksPerColumn = blocksPerColumn;
+        }
+        frame.mcusPerLine = mcusPerLine;
+        frame.mcusPerColumn = mcusPerColumn;
+      }
+
+      var offset = 0, length = data.length;
+      var jfif = null;
+      var adobe = null;
+      var pixels = null;
+      var frame, resetInterval;
+      var quantizationTables = [];
+      var huffmanTablesAC = [], huffmanTablesDC = [];
+      var fileMarker = readUint16();
+      if (fileMarker !== 0xFFD8) { // SOI (Start of Image)
+        throw 'SOI not found';
+      }
+
+      fileMarker = readUint16();
+      while (fileMarker !== 0xFFD9) { // EOI (End of image)
+        var i, j, l;
+        switch(fileMarker) {
+          case 0xFFE0: // APP0 (Application Specific)
+          case 0xFFE1: // APP1
+          case 0xFFE2: // APP2
+          case 0xFFE3: // APP3
+          case 0xFFE4: // APP4
+          case 0xFFE5: // APP5
+          case 0xFFE6: // APP6
+          case 0xFFE7: // APP7
+          case 0xFFE8: // APP8
+          case 0xFFE9: // APP9
+          case 0xFFEA: // APP10
+          case 0xFFEB: // APP11
+          case 0xFFEC: // APP12
+          case 0xFFED: // APP13
+          case 0xFFEE: // APP14
+          case 0xFFEF: // APP15
+          case 0xFFFE: // COM (Comment)
+            var appData = readDataBlock();
+
+            if (fileMarker === 0xFFE0) {
+              if (appData[0] === 0x4A && appData[1] === 0x46 &&
+                  appData[2] === 0x49 && appData[3] === 0x46 &&
+                  appData[4] === 0) { // 'JFIF\x00'
+                jfif = {
+                  version: { major: appData[5], minor: appData[6] },
+                  densityUnits: appData[7],
+                  xDensity: (appData[8] << 8) | appData[9],
+                  yDensity: (appData[10] << 8) | appData[11],
+                  thumbWidth: appData[12],
+                  thumbHeight: appData[13],
+                  thumbData: appData.subarray(14, 14 +
+                                              3 * appData[12] * appData[13])
+                };
+              }
+            }
+            // TODO APP1 - Exif
+            if (fileMarker === 0xFFEE) {
+              if (appData[0] === 0x41 && appData[1] === 0x64 &&
+                  appData[2] === 0x6F && appData[3] === 0x62 &&
+                  appData[4] === 0x65) { // 'Adobe'
+                adobe = {
+                  version: (appData[5] << 8) | appData[6],
+                  flags0: (appData[7] << 8) | appData[8],
+                  flags1: (appData[9] << 8) | appData[10],
+                  transformCode: appData[11]
+                };
+              }
+            }
+            break;
+
+          case 0xFFDB: // DQT (Define Quantization Tables)
+            var quantizationTablesLength = readUint16();
+            var quantizationTablesEnd = quantizationTablesLength + offset - 2;
+            var z;
+            while (offset < quantizationTablesEnd) {
+              var quantizationTableSpec = data[offset++];
+              var tableData = new Uint16Array(64);
+              if ((quantizationTableSpec >> 4) === 0) { // 8 bit values
+                for (j = 0; j < 64; j++) {
+                  z = dctZigZag[j];
+                  tableData[z] = data[offset++];
+                }
+              } else if ((quantizationTableSpec >> 4) === 1) { //16 bit
+                for (j = 0; j < 64; j++) {
+                  z = dctZigZag[j];
+                  tableData[z] = readUint16();
+                }
+              } else {
+                throw 'DQT: invalid table spec';
+              }
+              quantizationTables[quantizationTableSpec & 15] = tableData;
+            }
+            break;
+
+          case 0xFFC0: // SOF0 (Start of Frame, Baseline DCT)
+          case 0xFFC1: // SOF1 (Start of Frame, Extended DCT)
+          case 0xFFC2: // SOF2 (Start of Frame, Progressive DCT)
+            if (frame) {
+              throw 'Only single frame JPEGs supported';
+            }
+            readUint16(); // skip data length
+            frame = {};
+            frame.extended = (fileMarker === 0xFFC1);
+            frame.progressive = (fileMarker === 0xFFC2);
+            frame.precision = data[offset++];
+            frame.scanLines = readUint16();
+            frame.samplesPerLine = readUint16();
+            frame.components = [];
+            frame.componentIds = {};
+            var componentsCount = data[offset++], componentId;
+            var maxH = 0, maxV = 0;
+            for (i = 0; i < componentsCount; i++) {
+              componentId = data[offset];
+              var h = data[offset + 1] >> 4;
+              var v = data[offset + 1] & 15;
+              if (maxH < h) {
+                maxH = h;
+              }
+              if (maxV < v) {
+                maxV = v;
+              }
+              var qId = data[offset + 2];
+              l = frame.components.push({
+                h: h,
+                v: v,
+                quantizationTable: quantizationTables[qId]
+              });
+              frame.componentIds[componentId] = l - 1;
+              offset += 3;
+            }
+            frame.maxH = maxH;
+            frame.maxV = maxV;
+            prepareComponents(frame);
+            break;
+
+          case 0xFFC4: // DHT (Define Huffman Tables)
+            var huffmanLength = readUint16();
+            for (i = 2; i < huffmanLength;) {
+              var huffmanTableSpec = data[offset++];
+              var codeLengths = new Uint8Array(16);
+              var codeLengthSum = 0;
+              for (j = 0; j < 16; j++, offset++) {
+                codeLengthSum += (codeLengths[j] = data[offset]);
+              }
+              var huffmanValues = new Uint8Array(codeLengthSum);
+              for (j = 0; j < codeLengthSum; j++, offset++) {
+                huffmanValues[j] = data[offset];
+              }
+              i += 17 + codeLengthSum;
+
+              ((huffmanTableSpec >> 4) === 0 ?
+                huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] =
+                buildHuffmanTable(codeLengths, huffmanValues);
+            }
+            break;
+
+          case 0xFFDD: // DRI (Define Restart Interval)
+            readUint16(); // skip data length
+            resetInterval = readUint16();
+            break;
+
+          case 0xFFDA: // SOS (Start of Scan)
+            var scanLength = readUint16();
+            var selectorsCount = data[offset++];
+            var components = [], component;
+            for (i = 0; i < selectorsCount; i++) {
+              var componentIndex = frame.componentIds[data[offset++]];
+              component = frame.components[componentIndex];
+              var tableSpec = data[offset++];
+              component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];
+              component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];
+              components.push(component);
+            }
+            var spectralStart = data[offset++];
+            var spectralEnd = data[offset++];
+            var successiveApproximation = data[offset++];
+            var processed = decodeScan(data, offset,
+              frame, components, resetInterval,
+              spectralStart, spectralEnd,
+              successiveApproximation >> 4, successiveApproximation & 15);
+            offset += processed;
+            break;
+
+          case 0xFFFF: // Fill bytes
+            if (data[offset] !== 0xFF) { // Avoid skipping a valid marker.
+              offset--;
+            }
+            break;
+
+          default:
+            if (data[offset - 3] === 0xFF &&
+                data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) {
+              // could be incorrect encoding -- last 0xFF byte of the previous
+              // block was eaten by the encoder
+              offset -= 3;
+              break;
+            }
+            throw 'unknown JPEG marker ' + fileMarker.toString(16);
+        }
+        fileMarker = readUint16();
+      }
+
+      this.width = frame.samplesPerLine;
+      this.height = frame.scanLines;
+      this.jfif = jfif;
+      this.adobe = adobe;
+      this.components = [];
+      for (i = 0; i < frame.components.length; i++) {
+        component = frame.components[i];
+        this.components.push({
+          output: buildComponentData(frame, component),
+          scaleX: component.h / frame.maxH,
+          scaleY: component.v / frame.maxV,
+          blocksPerLine: component.blocksPerLine,
+          blocksPerColumn: component.blocksPerColumn
+        });
+      }
+      this.numComponents = this.components.length;
+    },
+
+    _getLinearizedBlockData: function getLinearizedBlockData(width, height) {
+      var scaleX = this.width / width, scaleY = this.height / height;
+
+      var component, componentScaleX, componentScaleY, blocksPerScanline;
+      var x, y, i, j, k;
+      var index;
+      var offset = 0;
+      var output;
+      var numComponents = this.components.length;
+      var dataLength = width * height * numComponents;
+      var data = new Uint8Array(dataLength);
+      var xScaleBlockOffset = new Uint32Array(width);
+      var mask3LSB = 0xfffffff8; // used to clear the 3 LSBs
+
+      for (i = 0; i < numComponents; i++) {
+        component = this.components[i];
+        componentScaleX = component.scaleX * scaleX;
+        componentScaleY = component.scaleY * scaleY;
+        offset = i;
+        output = component.output;
+        blocksPerScanline = (component.blocksPerLine + 1) << 3;
+        // precalculate the xScaleBlockOffset
+        for (x = 0; x < width; x++) {
+          j = 0 | (x * componentScaleX);
+          xScaleBlockOffset[x] = ((j & mask3LSB) << 3) | (j & 7);
+        }
+        // linearize the blocks of the component
+        for (y = 0; y < height; y++) {
+          j = 0 | (y * componentScaleY);
+          index = blocksPerScanline * (j & mask3LSB) | ((j & 7) << 3);
+          for (x = 0; x < width; x++) {
+            data[offset] = output[index + xScaleBlockOffset[x]];
+            offset += numComponents;
+          }
+        }
+      }
+
+      // decodeTransform contains pairs of multiplier (-256..256) and additive
+      var transform = this.decodeTransform;
+      if (transform) {
+        for (i = 0; i < dataLength;) {
+          for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) {
+            data[i] = ((data[i] * transform[k]) >> 8) + transform[k + 1];
+          }
+        }
+      }
+      return data;
+    },
+
+    _isColorConversionNeeded: function isColorConversionNeeded() {
+      if (this.adobe && this.adobe.transformCode) {
+        // The adobe transform marker overrides any previous setting
+        return true;
+      } else if (this.numComponents === 3) {
+        return true;
+      } else {
+        return false;
+      }
+    },
+
+    _convertYccToRgb: function convertYccToRgb(data) {
+      var Y, Cb, Cr;
+      for (var i = 0, length = data.length; i < length; i += 3) {
+        Y  = data[i    ];
+        Cb = data[i + 1];
+        Cr = data[i + 2];
+        data[i    ] = clamp0to255(Y - 179.456 + 1.402 * Cr);
+        data[i + 1] = clamp0to255(Y + 135.459 - 0.344 * Cb - 0.714 * Cr);
+        data[i + 2] = clamp0to255(Y - 226.816 + 1.772 * Cb);
+      }
+      return data;
+    },
+
+    _convertYcckToRgb: function convertYcckToRgb(data) {
+      var Y, Cb, Cr, k;
+      var offset = 0;
+      for (var i = 0, length = data.length; i < length; i += 4) {
+        Y  = data[i];
+        Cb = data[i + 1];
+        Cr = data[i + 2];
+        k = data[i + 3];
+
+        var r = -122.67195406894 +
+          Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr -
+                5.4080610064599e-5 * Y + 0.00048449797120281 * k -
+                0.154362151871126) +
+          Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y -
+                0.00477271405408747 * k + 1.53380253221734) +
+          Y * (0.000961250184130688 * Y - 0.00266257332283933 * k +
+               0.48357088451265) +
+          k * (-0.000336197177618394 * k + 0.484791561490776);
+
+        var g = 107.268039397724 +
+          Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr +
+                0.000659397001245577 * Y + 0.000426105652938837 * k -
+                0.176491792462875) +
+          Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y +
+                0.000770482631801132 * k - 0.151051492775562) +
+          Y * (0.00126935368114843 * Y - 0.00265090189010898 * k +
+               0.25802910206845) +
+          k * (-0.000318913117588328 * k - 0.213742400323665);
+
+        var b = -20.810012546947 +
+          Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr +
+                0.0020741088115012 * Y - 0.00288260236853442 * k +
+                0.814272968359295) +
+          Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y +
+                0.000560833691242812 * k - 0.195152027534049) +
+          Y * (0.00174418132927582 * Y - 0.00255243321439347 * k +
+               0.116935020465145) +
+          k * (-0.000343531996510555 * k + 0.24165260232407);
+
+        data[offset++] = clamp0to255(r);
+        data[offset++] = clamp0to255(g);
+        data[offset++] = clamp0to255(b);
+      }
+      return data;
+    },
+
+    _convertYcckToCmyk: function convertYcckToCmyk(data) {
+      var Y, Cb, Cr;
+      for (var i = 0, length = data.length; i < length; i += 4) {
+        Y  = data[i];
+        Cb = data[i + 1];
+        Cr = data[i + 2];
+        data[i    ] = clamp0to255(434.456 - Y - 1.402 * Cr);
+        data[i + 1] = clamp0to255(119.541 - Y + 0.344 * Cb + 0.714 * Cr);
+        data[i + 2] = clamp0to255(481.816 - Y - 1.772 * Cb);
+        // K in data[i + 3] is unchanged
+      }
+      return data;
+    },
+
+    _convertCmykToRgb: function convertCmykToRgb(data) {
+      var c, m, y, k;
+      var offset = 0;
+      var min = -255 * 255 * 255;
+      var scale = 1 / 255 / 255;
+      for (var i = 0, length = data.length; i < length; i += 4) {
+        c = data[i];
+        m = data[i + 1];
+        y = data[i + 2];
+        k = data[i + 3];
+
+        var r =
+          c * (-4.387332384609988 * c + 54.48615194189176 * m +
+               18.82290502165302 * y + 212.25662451639585 * k -
+               72734.4411664936) +
+          m * (1.7149763477362134 * m - 5.6096736904047315 * y -
+               17.873870861415444 * k - 1401.7366389350734) +
+          y * (-2.5217340131683033 * y - 21.248923337353073 * k +
+               4465.541406466231) -
+          k * (21.86122147463605 * k + 48317.86113160301);
+        var g =
+          c * (8.841041422036149 * c + 60.118027045597366 * m +
+               6.871425592049007 * y + 31.159100130055922 * k -
+               20220.756542821975) +
+          m * (-15.310361306967817 * m + 17.575251261109482 * y +
+               131.35250912493976 * k - 48691.05921601825) +
+          y * (4.444339102852739 * y + 9.8632861493405 * k -
+               6341.191035517494) -
+          k * (20.737325471181034 * k + 47890.15695978492);
+        var b =
+          c * (0.8842522430003296 * c + 8.078677503112928 * m +
+               30.89978309703729 * y - 0.23883238689178934 * k -
+               3616.812083916688) +
+          m * (10.49593273432072 * m + 63.02378494754052 * y +
+               50.606957656360734 * k - 28620.90484698408) +
+          y * (0.03296041114873217 * y + 115.60384449646641 * k -
+               49363.43385999684) -
+          k * (22.33816807309886 * k + 45932.16563550634);
+
+        data[offset++] = r >= 0 ? 255 : r <= min ? 0 : 255 + r * scale | 0;
+        data[offset++] = g >= 0 ? 255 : g <= min ? 0 : 255 + g * scale | 0;
+        data[offset++] = b >= 0 ? 255 : b <= min ? 0 : 255 + b * scale | 0;
+      }
+      return data;
+    },
+
+    getData: function getData(width, height, forceRGBoutput) {
+      if (this.numComponents > 4) {
+        throw 'Unsupported color mode';
+      }
+      // type of data: Uint8Array(width * height * numComponents)
+      var data = this._getLinearizedBlockData(width, height);
+
+      if (this.numComponents === 3) {
+        return this._convertYccToRgb(data);
+      } else if (this.numComponents === 4) {
+        if (this._isColorConversionNeeded()) {
+          if (forceRGBoutput) {
+            return this._convertYcckToRgb(data);
+          } else {
+            return this._convertYcckToCmyk(data);
+          }
+        } else if (forceRGBoutput) {
+          return this._convertCmykToRgb(data);
+        }
+      }
+      return data;
+    }
+  };
+
+  return constructor;
+})();
+
+
+var JpxImage = (function JpxImageClosure() {
+  // Table E.1
+  var SubbandsGainLog2 = {
+    'LL': 0,
+    'LH': 1,
+    'HL': 1,
+    'HH': 2
+  };
+  function JpxImage() {
+    this.failOnCorruptedImage = false;
+  }
+  JpxImage.prototype = {
+    parse: function JpxImage_parse(data) {
+
+      var head = readUint16(data, 0);
+      // No box header, immediate start of codestream (SOC)
+      if (head === 0xFF4F) {
+        this.parseCodestream(data, 0, data.length);
+        return;
+      }
+
+      var position = 0, length = data.length;
+      while (position < length) {
+        var headerSize = 8;
+        var lbox = readUint32(data, position);
+        var tbox = readUint32(data, position + 4);
+        position += headerSize;
+        if (lbox === 1) {
+          // XLBox: read UInt64 according to spec.
+          // JavaScript's int precision of 53 bit should be sufficient here.
+          lbox = readUint32(data, position) * 4294967296 +
+                 readUint32(data, position + 4);
+          position += 8;
+          headerSize += 8;
+        }
+        if (lbox === 0) {
+          lbox = length - position + headerSize;
+        }
+        if (lbox < headerSize) {
+          throw new Error('JPX Error: Invalid box field size');
+        }
+        var dataLength = lbox - headerSize;
+        var jumpDataLength = true;
+        switch (tbox) {
+          case 0x6A703268: // 'jp2h'
+            jumpDataLength = false; // parsing child boxes
+            break;
+          case 0x636F6C72: // 'colr'
+            // Colorspaces are not used, the CS from the PDF is used.
+            var method = data[position];
+            var precedence = data[position + 1];
+            var approximation = data[position + 2];
+            if (method === 1) {
+              // enumerated colorspace
+              var colorspace = readUint32(data, position + 3);
+              switch (colorspace) {
+                case 16: // this indicates a sRGB colorspace
+                case 17: // this indicates a grayscale colorspace
+                case 18: // this indicates a YUV colorspace
+                  break;
+                default:
+                  warn('Unknown colorspace ' + colorspace);
+                  break;
+              }
+            } else if (method === 2) {
+              info('ICC profile not supported');
+            }
+            break;
+          case 0x6A703263: // 'jp2c'
+            this.parseCodestream(data, position, position + dataLength);
+            break;
+          case 0x6A502020: // 'jP\024\024'
+            if (0x0d0a870a !== readUint32(data, position)) {
+              warn('Invalid JP2 signature');
+            }
+            break;
+          // The following header types are valid but currently not used:
+          case 0x6A501A1A: // 'jP\032\032'
+          case 0x66747970: // 'ftyp'
+          case 0x72726571: // 'rreq'
+          case 0x72657320: // 'res '
+          case 0x69686472: // 'ihdr'
+            break;
+          default:
+            var headerType = String.fromCharCode((tbox >> 24) & 0xFF,
+                                                 (tbox >> 16) & 0xFF,
+                                                 (tbox >> 8) & 0xFF,
+                                                 tbox & 0xFF);
+            warn('Unsupported header type ' + tbox + ' (' + headerType + ')');
+            break;
+        }
+        if (jumpDataLength) {
+          position += dataLength;
+        }
+      }
+    },
+    parseImageProperties: function JpxImage_parseImageProperties(stream) {
+      var newByte = stream.getByte();
+      while (newByte >= 0) {
+        var oldByte = newByte;
+        newByte = stream.getByte();
+        var code = (oldByte << 8) | newByte;
+        // Image and tile size (SIZ)
+        if (code === 0xFF51) {
+          stream.skip(4);
+          var Xsiz = stream.getInt32() >>> 0; // Byte 4
+          var Ysiz = stream.getInt32() >>> 0; // Byte 8
+          var XOsiz = stream.getInt32() >>> 0; // Byte 12
+          var YOsiz = stream.getInt32() >>> 0; // Byte 16
+          stream.skip(16);
+          var Csiz = stream.getUint16(); // Byte 36
+          this.width = Xsiz - XOsiz;
+          this.height = Ysiz - YOsiz;
+          this.componentsCount = Csiz;
+          // Results are always returned as Uint8Arrays
+          this.bitsPerComponent = 8;
+          return;
+        }
+      }
+      throw new Error('JPX Error: No size marker found in JPX stream');
+    },
+    parseCodestream: function JpxImage_parseCodestream(data, start, end) {
+      var context = {};
+      try {
+        var doNotRecover = false;
+        var position = start;
+        while (position + 1 < end) {
+          var code = readUint16(data, position);
+          position += 2;
+
+          var length = 0, j, sqcd, spqcds, spqcdSize, scalarExpounded, tile;
+          switch (code) {
+            case 0xFF4F: // Start of codestream (SOC)
+              context.mainHeader = true;
+              break;
+            case 0xFFD9: // End of codestream (EOC)
+              break;
+            case 0xFF51: // Image and tile size (SIZ)
+              length = readUint16(data, position);
+              var siz = {};
+              siz.Xsiz = readUint32(data, position + 4);
+              siz.Ysiz = readUint32(data, position + 8);
+              siz.XOsiz = readUint32(data, position + 12);
+              siz.YOsiz = readUint32(data, position + 16);
+              siz.XTsiz = readUint32(data, position + 20);
+              siz.YTsiz = readUint32(data, position + 24);
+              siz.XTOsiz = readUint32(data, position + 28);
+              siz.YTOsiz = readUint32(data, position + 32);
+              var componentsCount = readUint16(data, position + 36);
+              siz.Csiz = componentsCount;
+              var components = [];
+              j = position + 38;
+              for (var i = 0; i < componentsCount; i++) {
+                var component = {
+                  precision: (data[j] & 0x7F) + 1,
+                  isSigned: !!(data[j] & 0x80),
+                  XRsiz: data[j + 1],
+                  YRsiz: data[j + 1]
+                };
+                calculateComponentDimensions(component, siz);
+                components.push(component);
+              }
+              context.SIZ = siz;
+              context.components = components;
+              calculateTileGrids(context, components);
+              context.QCC = [];
+              context.COC = [];
+              break;
+            case 0xFF5C: // Quantization default (QCD)
+              length = readUint16(data, position);
+              var qcd = {};
+              j = position + 2;
+              sqcd = data[j++];
+              switch (sqcd & 0x1F) {
+                case 0:
+                  spqcdSize = 8;
+                  scalarExpounded = true;
+                  break;
+                case 1:
+                  spqcdSize = 16;
+                  scalarExpounded = false;
+                  break;
+                case 2:
+                  spqcdSize = 16;
+                  scalarExpounded = true;
+                  break;
+                default:
+                  throw new Error('JPX Error: Invalid SQcd value ' + sqcd);
+              }
+              qcd.noQuantization = (spqcdSize === 8);
+              qcd.scalarExpounded = scalarExpounded;
+              qcd.guardBits = sqcd >> 5;
+              spqcds = [];
+              while (j < length + position) {
+                var spqcd = {};
+                if (spqcdSize === 8) {
+                  spqcd.epsilon = data[j++] >> 3;
+                  spqcd.mu = 0;
+                } else {
+                  spqcd.epsilon = data[j] >> 3;
+                  spqcd.mu = ((data[j] & 0x7) << 8) | data[j + 1];
+                  j += 2;
+                }
+                spqcds.push(spqcd);
+              }
+              qcd.SPqcds = spqcds;
+              if (context.mainHeader) {
+                context.QCD = qcd;
+              } else {
+                context.currentTile.QCD = qcd;
+                context.currentTile.QCC = [];
+              }
+              break;
+            case 0xFF5D: // Quantization component (QCC)
+              length = readUint16(data, position);
+              var qcc = {};
+              j = position + 2;
+              var cqcc;
+              if (context.SIZ.Csiz < 257) {
+                cqcc = data[j++];
+              } else {
+                cqcc = readUint16(data, j);
+                j += 2;
+              }
+              sqcd = data[j++];
+              switch (sqcd & 0x1F) {
+                case 0:
+                  spqcdSize = 8;
+                  scalarExpounded = true;
+                  break;
+                case 1:
+                  spqcdSize = 16;
+                  scalarExpounded = false;
+                  break;
+                case 2:
+                  spqcdSize = 16;
+                  scalarExpounded = true;
+                  break;
+                default:
+                  throw new Error('JPX Error: Invalid SQcd value ' + sqcd);
+              }
+              qcc.noQuantization = (spqcdSize === 8);
+              qcc.scalarExpounded = scalarExpounded;
+              qcc.guardBits = sqcd >> 5;
+              spqcds = [];
+              while (j < (length + position)) {
+                spqcd = {};
+                if (spqcdSize === 8) {
+                  spqcd.epsilon = data[j++] >> 3;
+                  spqcd.mu = 0;
+                } else {
+                  spqcd.epsilon = data[j] >> 3;
+                  spqcd.mu = ((data[j] & 0x7) << 8) | data[j + 1];
+                  j += 2;
+                }
+                spqcds.push(spqcd);
+              }
+              qcc.SPqcds = spqcds;
+              if (context.mainHeader) {
+                context.QCC[cqcc] = qcc;
+              } else {
+                context.currentTile.QCC[cqcc] = qcc;
+              }
+              break;
+            case 0xFF52: // Coding style default (COD)
+              length = readUint16(data, position);
+              var cod = {};
+              j = position + 2;
+              var scod = data[j++];
+              cod.entropyCoderWithCustomPrecincts = !!(scod & 1);
+              cod.sopMarkerUsed = !!(scod & 2);
+              cod.ephMarkerUsed = !!(scod & 4);
+              cod.progressionOrder = data[j++];
+              cod.layersCount = readUint16(data, j);
+              j += 2;
+              cod.multipleComponentTransform = data[j++];
+
+              cod.decompositionLevelsCount = data[j++];
+              cod.xcb = (data[j++] & 0xF) + 2;
+              cod.ycb = (data[j++] & 0xF) + 2;
+              var blockStyle = data[j++];
+              cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1);
+              cod.resetContextProbabilities = !!(blockStyle & 2);
+              cod.terminationOnEachCodingPass = !!(blockStyle & 4);
+              cod.verticalyStripe = !!(blockStyle & 8);
+              cod.predictableTermination = !!(blockStyle & 16);
+              cod.segmentationSymbolUsed = !!(blockStyle & 32);
+              cod.reversibleTransformation = data[j++];
+              if (cod.entropyCoderWithCustomPrecincts) {
+                var precinctsSizes = [];
+                while (j < length + position) {
+                  var precinctsSize = data[j++];
+                  precinctsSizes.push({
+                    PPx: precinctsSize & 0xF,
+                    PPy: precinctsSize >> 4
+                  });
+                }
+                cod.precinctsSizes = precinctsSizes;
+              }
+              var unsupported = [];
+              if (cod.selectiveArithmeticCodingBypass) {
+                unsupported.push('selectiveArithmeticCodingBypass');
+              }
+              if (cod.resetContextProbabilities) {
+                unsupported.push('resetContextProbabilities');
+              }
+              if (cod.terminationOnEachCodingPass) {
+                unsupported.push('terminationOnEachCodingPass');
+              }
+              if (cod.verticalyStripe) {
+                unsupported.push('verticalyStripe');
+              }
+              if (cod.predictableTermination) {
+                unsupported.push('predictableTermination');
+              }
+              if (unsupported.length > 0) {
+                doNotRecover = true;
+                throw new Error('JPX Error: Unsupported COD options (' +
+                                unsupported.join(', ') + ')');
+              }
+              if (context.mainHeader) {
+                context.COD = cod;
+              } else {
+                context.currentTile.COD = cod;
+                context.currentTile.COC = [];
+              }
+              break;
+            case 0xFF90: // Start of tile-part (SOT)
+              length = readUint16(data, position);
+              tile = {};
+              tile.index = readUint16(data, position + 2);
+              tile.length = readUint32(data, position + 4);
+              tile.dataEnd = tile.length + position - 2;
+              tile.partIndex = data[position + 8];
+              tile.partsCount = data[position + 9];
+
+              context.mainHeader = false;
+              if (tile.partIndex === 0) {
+                // reset component specific settings
+                tile.COD = context.COD;
+                tile.COC = context.COC.slice(0); // clone of the global COC
+                tile.QCD = context.QCD;
+                tile.QCC = context.QCC.slice(0); // clone of the global COC
+              }
+              context.currentTile = tile;
+              break;
+            case 0xFF93: // Start of data (SOD)
+              tile = context.currentTile;
+              if (tile.partIndex === 0) {
+                initializeTile(context, tile.index);
+                buildPackets(context);
+              }
+
+              // moving to the end of the data
+              length = tile.dataEnd - position;
+              parseTilePackets(context, data, position, length);
+              break;
+            case 0xFF55: // Tile-part lengths, main header (TLM)
+            case 0xFF57: // Packet length, main header (PLM)
+            case 0xFF58: // Packet length, tile-part header (PLT)
+            case 0xFF64: // Comment (COM)
+              length = readUint16(data, position);
+              // skipping content
+              break;
+            case 0xFF53: // Coding style component (COC)
+              throw new Error('JPX Error: Codestream code 0xFF53 (COC) is ' +
+                              'not implemented');
+            default:
+              throw new Error('JPX Error: Unknown codestream code: ' +
+                              code.toString(16));
+          }
+          position += length;
+        }
+      } catch (e) {
+        if (doNotRecover || this.failOnCorruptedImage) {
+          throw e;
+        } else {
+          warn('Trying to recover from ' + e.message);
+        }
+      }
+      this.tiles = transformComponents(context);
+      this.width = context.SIZ.Xsiz - context.SIZ.XOsiz;
+      this.height = context.SIZ.Ysiz - context.SIZ.YOsiz;
+      this.componentsCount = context.SIZ.Csiz;
+    }
+  };
+  function calculateComponentDimensions(component, siz) {
+    // Section B.2 Component mapping
+    component.x0 = Math.ceil(siz.XOsiz / component.XRsiz);
+    component.x1 = Math.ceil(siz.Xsiz / component.XRsiz);
+    component.y0 = Math.ceil(siz.YOsiz / component.YRsiz);
+    component.y1 = Math.ceil(siz.Ysiz / component.YRsiz);
+    component.width = component.x1 - component.x0;
+    component.height = component.y1 - component.y0;
+  }
+  function calculateTileGrids(context, components) {
+    var siz = context.SIZ;
+    // Section B.3 Division into tile and tile-components
+    var tile, tiles = [];
+    var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz);
+    var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz);
+    for (var q = 0; q < numYtiles; q++) {
+      for (var p = 0; p < numXtiles; p++) {
+        tile = {};
+        tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz);
+        tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz);
+        tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz);
+        tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz);
+        tile.width = tile.tx1 - tile.tx0;
+        tile.height = tile.ty1 - tile.ty0;
+        tile.components = [];
+        tiles.push(tile);
+      }
+    }
+    context.tiles = tiles;
+
+    var componentsCount = siz.Csiz;
+    for (var i = 0, ii = componentsCount; i < ii; i++) {
+      var component = components[i];
+      for (var j = 0, jj = tiles.length; j < jj; j++) {
+        var tileComponent = {};
+        tile = tiles[j];
+        tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz);
+        tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz);
+        tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz);
+        tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz);
+        tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0;
+        tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0;
+        tile.components[i] = tileComponent;
+      }
+    }
+  }
+  function getBlocksDimensions(context, component, r) {
+    var codOrCoc = component.codingStyleParameters;
+    var result = {};
+    if (!codOrCoc.entropyCoderWithCustomPrecincts) {
+      result.PPx = 15;
+      result.PPy = 15;
+    } else {
+      result.PPx = codOrCoc.precinctsSizes[r].PPx;
+      result.PPy = codOrCoc.precinctsSizes[r].PPy;
+    }
+    // calculate codeblock size as described in section B.7
+    result.xcb_ = (r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) :
+                   Math.min(codOrCoc.xcb, result.PPx));
+    result.ycb_ = (r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) :
+                   Math.min(codOrCoc.ycb, result.PPy));
+    return result;
+  }
+  function buildPrecincts(context, resolution, dimensions) {
+    // Section B.6 Division resolution to precincts
+    var precinctWidth = 1 << dimensions.PPx;
+    var precinctHeight = 1 << dimensions.PPy;
+    // Jasper introduces codeblock groups for mapping each subband codeblocks
+    // to precincts. Precinct partition divides a resolution according to width
+    // and height parameters. The subband that belongs to the resolution level
+    // has a different size than the level, unless it is the zero resolution.
+
+    // From Jasper documentation: jpeg2000.pdf, section K: Tier-2 coding:
+    // The precinct partitioning for a particular subband is derived from a
+    // partitioning of its parent LL band (i.e., the LL band at the next higher
+    // resolution level)... The LL band associated with each resolution level is
+    // divided into precincts... Each of the resulting precinct regions is then
+    // mapped into its child subbands (if any) at the next lower resolution
+    // level. This is accomplished by using the coordinate transformation
+    // (u, v) = (ceil(x/2), ceil(y/2)) where (x, y) and (u, v) are the
+    // coordinates of a point in the LL band and child subband, respectively.
+    var isZeroRes = resolution.resLevel === 0;
+    var precinctWidthInSubband = 1 << (dimensions.PPx + (isZeroRes ? 0 : -1));
+    var precinctHeightInSubband = 1 << (dimensions.PPy + (isZeroRes ? 0 : -1));
+    var numprecinctswide = (resolution.trx1 > resolution.trx0 ?
+      Math.ceil(resolution.trx1 / precinctWidth) -
+      Math.floor(resolution.trx0 / precinctWidth) : 0);
+    var numprecinctshigh = (resolution.try1 > resolution.try0 ?
+      Math.ceil(resolution.try1 / precinctHeight) -
+      Math.floor(resolution.try0 / precinctHeight) : 0);
+    var numprecincts = numprecinctswide * numprecinctshigh;
+
+    resolution.precinctParameters = {
+      precinctWidth: precinctWidth,
+      precinctHeight: precinctHeight,
+      numprecinctswide: numprecinctswide,
+      numprecinctshigh: numprecinctshigh,
+      numprecincts: numprecincts,
+      precinctWidthInSubband: precinctWidthInSubband,
+      precinctHeightInSubband: precinctHeightInSubband
+    };
+  }
+  function buildCodeblocks(context, subband, dimensions) {
+    // Section B.7 Division sub-band into code-blocks
+    var xcb_ = dimensions.xcb_;
+    var ycb_ = dimensions.ycb_;
+    var codeblockWidth = 1 << xcb_;
+    var codeblockHeight = 1 << ycb_;
+    var cbx0 = subband.tbx0 >> xcb_;
+    var cby0 = subband.tby0 >> ycb_;
+    var cbx1 = (subband.tbx1 + codeblockWidth - 1) >> xcb_;
+    var cby1 = (subband.tby1 + codeblockHeight - 1) >> ycb_;
+    var precinctParameters = subband.resolution.precinctParameters;
+    var codeblocks = [];
+    var precincts = [];
+    var i, j, codeblock, precinctNumber;
+    for (j = cby0; j < cby1; j++) {
+      for (i = cbx0; i < cbx1; i++) {
+        codeblock = {
+          cbx: i,
+          cby: j,
+          tbx0: codeblockWidth * i,
+          tby0: codeblockHeight * j,
+          tbx1: codeblockWidth * (i + 1),
+          tby1: codeblockHeight * (j + 1)
+        };
+
+        codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0);
+        codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0);
+        codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1);
+        codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1);
+
+        // Calculate precinct number for this codeblock, codeblock position
+        // should be relative to its subband, use actual dimension and position
+        // See comment about codeblock group width and height
+        var pi = Math.floor((codeblock.tbx0_ - subband.tbx0) /
+          precinctParameters.precinctWidthInSubband);
+        var pj = Math.floor((codeblock.tby0_ - subband.tby0) /
+          precinctParameters.precinctHeightInSubband);
+        precinctNumber = pi + (pj * precinctParameters.numprecinctswide);
+
+        codeblock.precinctNumber = precinctNumber;
+        codeblock.subbandType = subband.type;
+        codeblock.Lblock = 3;
+
+        if (codeblock.tbx1_ <= codeblock.tbx0_ ||
+            codeblock.tby1_ <= codeblock.tby0_) {
+          continue;
+        }
+        codeblocks.push(codeblock);
+        // building precinct for the sub-band
+        var precinct = precincts[precinctNumber];
+        if (precinct !== undefined) {
+          if (i < precinct.cbxMin) {
+            precinct.cbxMin = i;
+          } else if (i > precinct.cbxMax) {
+            precinct.cbxMax = i;
+          }
+          if (j < precinct.cbyMin) {
+            precinct.cbxMin = j;
+          } else if (j > precinct.cbyMax) {
+            precinct.cbyMax = j;
+          }
+        } else {
+          precincts[precinctNumber] = precinct = {
+            cbxMin: i,
+            cbyMin: j,
+            cbxMax: i,
+            cbyMax: j
+          };
+        }
+        codeblock.precinct = precinct;
+      }
+    }
+    subband.codeblockParameters = {
+      codeblockWidth: xcb_,
+      codeblockHeight: ycb_,
+      numcodeblockwide: cbx1 - cbx0 + 1,
+      numcodeblockhigh: cby1 - cby0 + 1
+    };
+    subband.codeblocks = codeblocks;
+    subband.precincts = precincts;
+  }
+  function createPacket(resolution, precinctNumber, layerNumber) {
+    var precinctCodeblocks = [];
+    // Section B.10.8 Order of info in packet
+    var subbands = resolution.subbands;
+    // sub-bands already ordered in 'LL', 'HL', 'LH', and 'HH' sequence
+    for (var i = 0, ii = subbands.length; i < ii; i++) {
+      var subband = subbands[i];
+      var codeblocks = subband.codeblocks;
+      for (var j = 0, jj = codeblocks.length; j < jj; j++) {
+        var codeblock = codeblocks[j];
+        if (codeblock.precinctNumber !== precinctNumber) {
+          continue;
+        }
+        precinctCodeblocks.push(codeblock);
+      }
+    }
+    return {
+      layerNumber: layerNumber,
+      codeblocks: precinctCodeblocks
+    };
+  }
+  function LayerResolutionComponentPositionIterator(context) {
+    var siz = context.SIZ;
+    var tileIndex = context.currentTile.index;
+    var tile = context.tiles[tileIndex];
+    var layersCount = tile.codingStyleDefaultParameters.layersCount;
+    var componentsCount = siz.Csiz;
+    var maxDecompositionLevelsCount = 0;
+    for (var q = 0; q < componentsCount; q++) {
+      maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount,
+        tile.components[q].codingStyleParameters.decompositionLevelsCount);
+    }
+
+    var l = 0, r = 0, i = 0, k = 0;
+
+    this.nextPacket = function JpxImage_nextPacket() {
+      // Section B.12.1.1 Layer-resolution-component-position
+      for (; l < layersCount; l++) {
+        for (; r <= maxDecompositionLevelsCount; r++) {
+          for (; i < componentsCount; i++) {
+            var component = tile.components[i];
+            if (r > component.codingStyleParameters.decompositionLevelsCount) {
+              continue;
+            }
+
+            var resolution = component.resolutions[r];
+            var numprecincts = resolution.precinctParameters.numprecincts;
+            for (; k < numprecincts;) {
+              var packet = createPacket(resolution, k, l);
+              k++;
+              return packet;
+            }
+            k = 0;
+          }
+          i = 0;
+        }
+        r = 0;
+      }
+      throw new Error('JPX Error: Out of packets');
+    };
+  }
+  function ResolutionLayerComponentPositionIterator(context) {
+    var siz = context.SIZ;
+    var tileIndex = context.currentTile.index;
+    var tile = context.tiles[tileIndex];
+    var layersCount = tile.codingStyleDefaultParameters.layersCount;
+    var componentsCount = siz.Csiz;
+    var maxDecompositionLevelsCount = 0;
+    for (var q = 0; q < componentsCount; q++) {
+      maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount,
+        tile.components[q].codingStyleParameters.decompositionLevelsCount);
+    }
+
+    var r = 0, l = 0, i = 0, k = 0;
+
+    this.nextPacket = function JpxImage_nextPacket() {
+      // Section B.12.1.2 Resolution-layer-component-position
+      for (; r <= maxDecompositionLevelsCount; r++) {
+        for (; l < layersCount; l++) {
+          for (; i < componentsCount; i++) {
+            var component = tile.components[i];
+            if (r > component.codingStyleParameters.decompositionLevelsCount) {
+              continue;
+            }
+
+            var resolution = component.resolutions[r];
+            var numprecincts = resolution.precinctParameters.numprecincts;
+            for (; k < numprecincts;) {
+              var packet = createPacket(resolution, k, l);
+              k++;
+              return packet;
+            }
+            k = 0;
+          }
+          i = 0;
+        }
+        l = 0;
+      }
+      throw new Error('JPX Error: Out of packets');
+    };
+  }
+  function ResolutionPositionComponentLayerIterator(context) {
+    var siz = context.SIZ;
+    var tileIndex = context.currentTile.index;
+    var tile = context.tiles[tileIndex];
+    var layersCount = tile.codingStyleDefaultParameters.layersCount;
+    var componentsCount = siz.Csiz;
+    var l, r, c, p;
+    var maxDecompositionLevelsCount = 0;
+    for (c = 0; c < componentsCount; c++) {
+      var component = tile.components[c];
+      maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount,
+        component.codingStyleParameters.decompositionLevelsCount);
+    }
+    var maxNumPrecinctsInLevel = new Int32Array(
+      maxDecompositionLevelsCount + 1);
+    for (r = 0; r <= maxDecompositionLevelsCount; ++r) {
+      var maxNumPrecincts = 0;
+      for (c = 0; c < componentsCount; ++c) {
+        var resolutions = tile.components[c].resolutions;
+        if (r < resolutions.length) {
+          maxNumPrecincts = Math.max(maxNumPrecincts,
+            resolutions[r].precinctParameters.numprecincts);
+        }
+      }
+      maxNumPrecinctsInLevel[r] = maxNumPrecincts;
+    }
+    l = 0;
+    r = 0;
+    c = 0;
+    p = 0;
+
+    this.nextPacket = function JpxImage_nextPacket() {
+      // Section B.12.1.3 Resolution-position-component-layer
+      for (; r <= maxDecompositionLevelsCount; r++) {
+        for (; p < maxNumPrecinctsInLevel[r]; p++) {
+          for (; c < componentsCount; c++) {
+            var component = tile.components[c];
+            if (r > component.codingStyleParameters.decompositionLevelsCount) {
+              continue;
+            }
+            var resolution = component.resolutions[r];
+            var numprecincts = resolution.precinctParameters.numprecincts;
+            if (p >= numprecincts) {
+              continue;
+            }
+            for (; l < layersCount;) {
+              var packet = createPacket(resolution, p, l);
+              l++;
+              return packet;
+            }
+            l = 0;
+          }
+          c = 0;
+        }
+        p = 0;
+      }
+      throw new Error('JPX Error: Out of packets');
+    };
+  }
+  function PositionComponentResolutionLayerIterator(context) {
+    var siz = context.SIZ;
+    var tileIndex = context.currentTile.index;
+    var tile = context.tiles[tileIndex];
+    var layersCount = tile.codingStyleDefaultParameters.layersCount;
+    var componentsCount = siz.Csiz;
+    var precinctsSizes = getPrecinctSizesInImageScale(tile);
+    var precinctsIterationSizes = precinctsSizes;
+    var l = 0, r = 0, c = 0, px = 0, py = 0;
+
+    this.nextPacket = function JpxImage_nextPacket() {
+      // Section B.12.1.4 Position-component-resolution-layer
+      for (; py < precinctsIterationSizes.maxNumHigh; py++) {
+        for (; px < precinctsIterationSizes.maxNumWide; px++) {
+          for (; c < componentsCount; c++) {
+            var component = tile.components[c];
+            var decompositionLevelsCount =
+              component.codingStyleParameters.decompositionLevelsCount;
+            for (; r <= decompositionLevelsCount; r++) {
+              var resolution = component.resolutions[r];
+              var sizeInImageScale =
+                precinctsSizes.components[c].resolutions[r];
+              var k = getPrecinctIndexIfExist(
+                px,
+                py,
+                sizeInImageScale,
+                precinctsIterationSizes,
+                resolution);
+              if (k === null) {
+                continue;
+              }
+              for (; l < layersCount;) {
+                var packet = createPacket(resolution, k, l);
+                l++;
+                return packet;
+              }
+              l = 0;
+            }
+            r = 0;
+          }
+          c = 0;
+        }
+        px = 0;
+      }
+      throw new Error('JPX Error: Out of packets');
+    };
+  }
+  function ComponentPositionResolutionLayerIterator(context) {
+    var siz = context.SIZ;
+    var tileIndex = context.currentTile.index;
+    var tile = context.tiles[tileIndex];
+    var layersCount = tile.codingStyleDefaultParameters.layersCount;
+    var componentsCount = siz.Csiz;
+    var precinctsSizes = getPrecinctSizesInImageScale(tile);
+    var l = 0, r = 0, c = 0, px = 0, py = 0;
+
+    this.nextPacket = function JpxImage_nextPacket() {
+      // Section B.12.1.5 Component-position-resolution-layer
+      for (; c < componentsCount; ++c) {
+        var component = tile.components[c];
+        var precinctsIterationSizes = precinctsSizes.components[c];
+        var decompositionLevelsCount =
+          component.codingStyleParameters.decompositionLevelsCount;
+        for (; py < precinctsIterationSizes.maxNumHigh; py++) {
+          for (; px < precinctsIterationSizes.maxNumWide; px++) {
+            for (; r <= decompositionLevelsCount; r++) {
+              var resolution = component.resolutions[r];
+              var sizeInImageScale = precinctsIterationSizes.resolutions[r];
+              var k = getPrecinctIndexIfExist(
+                px,
+                py,
+                sizeInImageScale,
+                precinctsIterationSizes,
+                resolution);
+              if (k === null) {
+                continue;
+              }
+              for (; l < layersCount;) {
+                var packet = createPacket(resolution, k, l);
+                l++;
+                return packet;
+              }
+              l = 0;
+            }
+            r = 0;
+          }
+          px = 0;
+        }
+        py = 0;
+      }
+      throw new Error('JPX Error: Out of packets');
+    };
+  }
+  function getPrecinctIndexIfExist(
+    pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) {
+    var posX = pxIndex * precinctIterationSizes.minWidth;
+    var posY = pyIndex * precinctIterationSizes.minHeight;
+    if (posX % sizeInImageScale.width !== 0 ||
+        posY % sizeInImageScale.height !== 0) {
+      return null;
+    }
+    var startPrecinctRowIndex =
+      (posY / sizeInImageScale.width) *
+      resolution.precinctParameters.numprecinctswide;
+    return (posX / sizeInImageScale.height) + startPrecinctRowIndex;
+  }
+  function getPrecinctSizesInImageScale(tile) {
+    var componentsCount = tile.components.length;
+    var minWidth = Number.MAX_VALUE;
+    var minHeight = Number.MAX_VALUE;
+    var maxNumWide = 0;
+    var maxNumHigh = 0;
+    var sizePerComponent = new Array(componentsCount);
+    for (var c = 0; c < componentsCount; c++) {
+      var component = tile.components[c];
+      var decompositionLevelsCount =
+        component.codingStyleParameters.decompositionLevelsCount;
+      var sizePerResolution = new Array(decompositionLevelsCount + 1);
+      var minWidthCurrentComponent = Number.MAX_VALUE;
+      var minHeightCurrentComponent = Number.MAX_VALUE;
+      var maxNumWideCurrentComponent = 0;
+      var maxNumHighCurrentComponent = 0;
+      var scale = 1;
+      for (var r = decompositionLevelsCount; r >= 0; --r) {
+        var resolution = component.resolutions[r];
+        var widthCurrentResolution =
+          scale * resolution.precinctParameters.precinctWidth;
+        var heightCurrentResolution =
+          scale * resolution.precinctParameters.precinctHeight;
+        minWidthCurrentComponent = Math.min(
+          minWidthCurrentComponent,
+          widthCurrentResolution);
+        minHeightCurrentComponent = Math.min(
+          minHeightCurrentComponent,
+          heightCurrentResolution);
+        maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent,
+          resolution.precinctParameters.numprecinctswide);
+        maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent,
+          resolution.precinctParameters.numprecinctshigh);
+        sizePerResolution[r] = {
+          width: widthCurrentResolution,
+          height: heightCurrentResolution
+        };
+        scale <<= 1;
+      }
+      minWidth = Math.min(minWidth, minWidthCurrentComponent);
+      minHeight = Math.min(minHeight, minHeightCurrentComponent);
+      maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent);
+      maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent);
+      sizePerComponent[c] = {
+        resolutions: sizePerResolution,
+        minWidth: minWidthCurrentComponent,
+        minHeight: minHeightCurrentComponent,
+        maxNumWide: maxNumWideCurrentComponent,
+        maxNumHigh: maxNumHighCurrentComponent
+      };
+    }
+    return {
+      components: sizePerComponent,
+      minWidth: minWidth,
+      minHeight: minHeight,
+      maxNumWide: maxNumWide,
+      maxNumHigh: maxNumHigh
+    };
+  }
+  function buildPackets(context) {
+    var siz = context.SIZ;
+    var tileIndex = context.currentTile.index;
+    var tile = context.tiles[tileIndex];
+    var componentsCount = siz.Csiz;
+    // Creating resolutions and sub-bands for each component
+    for (var c = 0; c < componentsCount; c++) {
+      var component = tile.components[c];
+      var decompositionLevelsCount =
+        component.codingStyleParameters.decompositionLevelsCount;
+      // Section B.5 Resolution levels and sub-bands
+      var resolutions = [];
+      var subbands = [];
+      for (var r = 0; r <= decompositionLevelsCount; r++) {
+        var blocksDimensions = getBlocksDimensions(context, component, r);
+        var resolution = {};
+        var scale = 1 << (decompositionLevelsCount - r);
+        resolution.trx0 = Math.ceil(component.tcx0 / scale);
+        resolution.try0 = Math.ceil(component.tcy0 / scale);
+        resolution.trx1 = Math.ceil(component.tcx1 / scale);
+        resolution.try1 = Math.ceil(component.tcy1 / scale);
+        resolution.resLevel = r;
+        buildPrecincts(context, resolution, blocksDimensions);
+        resolutions.push(resolution);
+
+        var subband;
+        if (r === 0) {
+          // one sub-band (LL) with last decomposition
+          subband = {};
+          subband.type = 'LL';
+          subband.tbx0 = Math.ceil(component.tcx0 / scale);
+          subband.tby0 = Math.ceil(component.tcy0 / scale);
+          subband.tbx1 = Math.ceil(component.tcx1 / scale);
+          subband.tby1 = Math.ceil(component.tcy1 / scale);
+          subband.resolution = resolution;
+          buildCodeblocks(context, subband, blocksDimensions);
+          subbands.push(subband);
+          resolution.subbands = [subband];
+        } else {
+          var bscale = 1 << (decompositionLevelsCount - r + 1);
+          var resolutionSubbands = [];
+          // three sub-bands (HL, LH and HH) with rest of decompositions
+          subband = {};
+          subband.type = 'HL';
+          subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
+          subband.tby0 = Math.ceil(component.tcy0 / bscale);
+          subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
+          subband.tby1 = Math.ceil(component.tcy1 / bscale);
+          subband.resolution = resolution;
+          buildCodeblocks(context, subband, blocksDimensions);
+          subbands.push(subband);
+          resolutionSubbands.push(subband);
+
+          subband = {};
+          subband.type = 'LH';
+          subband.tbx0 = Math.ceil(component.tcx0 / bscale);
+          subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
+          subband.tbx1 = Math.ceil(component.tcx1 / bscale);
+          subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
+          subband.resolution = resolution;
+          buildCodeblocks(context, subband, blocksDimensions);
+          subbands.push(subband);
+          resolutionSubbands.push(subband);
+
+          subband = {};
+          subband.type = 'HH';
+          subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
+          subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
+          subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
+          subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
+          subband.resolution = resolution;
+          buildCodeblocks(context, subband, blocksDimensions);
+          subbands.push(subband);
+          resolutionSubbands.push(subband);
+
+          resolution.subbands = resolutionSubbands;
+        }
+      }
+      component.resolutions = resolutions;
+      component.subbands = subbands;
+    }
+    // Generate the packets sequence
+    var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder;
+    switch (progressionOrder) {
+      case 0:
+        tile.packetsIterator =
+          new LayerResolutionComponentPositionIterator(context);
+        break;
+      case 1:
+        tile.packetsIterator =
+          new ResolutionLayerComponentPositionIterator(context);
+        break;
+      case 2:
+        tile.packetsIterator =
+          new ResolutionPositionComponentLayerIterator(context);
+        break;
+      case 3:
+        tile.packetsIterator =
+          new PositionComponentResolutionLayerIterator(context);
+        break;
+      case 4:
+        tile.packetsIterator =
+          new ComponentPositionResolutionLayerIterator(context);
+        break;
+      default:
+        throw new Error('JPX Error: Unsupported progression order ' +
+                        progressionOrder);
+    }
+  }
+  function parseTilePackets(context, data, offset, dataLength) {
+    var position = 0;
+    var buffer, bufferSize = 0, skipNextBit = false;
+    function readBits(count) {
+      while (bufferSize < count) {
+        var b = data[offset + position];
+        position++;
+        if (skipNextBit) {
+          buffer = (buffer << 7) | b;
+          bufferSize += 7;
+          skipNextBit = false;
+        } else {
+          buffer = (buffer << 8) | b;
+          bufferSize += 8;
+        }
+        if (b === 0xFF) {
+          skipNextBit = true;
+        }
+      }
+      bufferSize -= count;
+      return (buffer >>> bufferSize) & ((1 << count) - 1);
+    }
+    function skipMarkerIfEqual(value) {
+      if (data[offset + position - 1] === 0xFF &&
+          data[offset + position] === value) {
+        skipBytes(1);
+        return true;
+      } else if (data[offset + position] === 0xFF &&
+                 data[offset + position + 1] === value) {
+        skipBytes(2);
+        return true;
+      }
+      return false;
+    }
+    function skipBytes(count) {
+      position += count;
+    }
+    function alignToByte() {
+      bufferSize = 0;
+      if (skipNextBit) {
+        position++;
+        skipNextBit = false;
+      }
+    }
+    function readCodingpasses() {
+      if (readBits(1) === 0) {
+        return 1;
+      }
+      if (readBits(1) === 0) {
+        return 2;
+      }
+      var value = readBits(2);
+      if (value < 3) {
+        return value + 3;
+      }
+      value = readBits(5);
+      if (value < 31) {
+        return value + 6;
+      }
+      value = readBits(7);
+      return value + 37;
+    }
+    var tileIndex = context.currentTile.index;
+    var tile = context.tiles[tileIndex];
+    var sopMarkerUsed = context.COD.sopMarkerUsed;
+    var ephMarkerUsed = context.COD.ephMarkerUsed;
+    var packetsIterator = tile.packetsIterator;
+    while (position < dataLength) {
+      alignToByte();
+      if (sopMarkerUsed && skipMarkerIfEqual(0x91)) {
+        // Skip also marker segment length and packet sequence ID
+        skipBytes(4);
+      }
+      var packet = packetsIterator.nextPacket();
+      if (!readBits(1)) {
+        continue;
+      }
+      var layerNumber = packet.layerNumber;
+      var queue = [], codeblock;
+      for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) {
+        codeblock = packet.codeblocks[i];
+        var precinct = codeblock.precinct;
+        var codeblockColumn = codeblock.cbx - precinct.cbxMin;
+        var codeblockRow = codeblock.cby - precinct.cbyMin;
+        var codeblockIncluded = false;
+        var firstTimeInclusion = false;
+        var valueReady;
+        if (codeblock['included'] !== undefined) {
+          codeblockIncluded = !!readBits(1);
+        } else {
+          // reading inclusion tree
+          precinct = codeblock.precinct;
+          var inclusionTree, zeroBitPlanesTree;
+          if (precinct['inclusionTree'] !== undefined) {
+            inclusionTree = precinct.inclusionTree;
+          } else {
+            // building inclusion and zero bit-planes trees
+            var width = precinct.cbxMax - precinct.cbxMin + 1;
+            var height = precinct.cbyMax - precinct.cbyMin + 1;
+            inclusionTree = new InclusionTree(width, height, layerNumber);
+            zeroBitPlanesTree = new TagTree(width, height);
+            precinct.inclusionTree = inclusionTree;
+            precinct.zeroBitPlanesTree = zeroBitPlanesTree;
+          }
+
+          if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) {
+            while (true) {
+              if (readBits(1)) {
+                valueReady = !inclusionTree.nextLevel();
+                if (valueReady) {
+                  codeblock.included = true;
+                  codeblockIncluded = firstTimeInclusion = true;
+                  break;
+                }
+              } else {
+                inclusionTree.incrementValue(layerNumber);
+                break;
+              }
+            }
+          }
+        }
+        if (!codeblockIncluded) {
+          continue;
+        }
+        if (firstTimeInclusion) {
+          zeroBitPlanesTree = precinct.zeroBitPlanesTree;
+          zeroBitPlanesTree.reset(codeblockColumn, codeblockRow);
+          while (true) {
+            if (readBits(1)) {
+              valueReady = !zeroBitPlanesTree.nextLevel();
+              if (valueReady) {
+                break;
+              }
+            } else {
+              zeroBitPlanesTree.incrementValue();
+            }
+          }
+          codeblock.zeroBitPlanes = zeroBitPlanesTree.value;
+        }
+        var codingpasses = readCodingpasses();
+        while (readBits(1)) {
+          codeblock.Lblock++;
+        }
+        var codingpassesLog2 = log2(codingpasses);
+        // rounding down log2
+        var bits = ((codingpasses < (1 << codingpassesLog2)) ?
+          codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock;
+        var codedDataLength = readBits(bits);
+        queue.push({
+          codeblock: codeblock,
+          codingpasses: codingpasses,
+          dataLength: codedDataLength
+        });
+      }
+      alignToByte();
+      if (ephMarkerUsed) {
+        skipMarkerIfEqual(0x92);
+      }
+      while (queue.length > 0) {
+        var packetItem = queue.shift();
+        codeblock = packetItem.codeblock;
+        if (codeblock['data'] === undefined) {
+          codeblock.data = [];
+        }
+        codeblock.data.push({
+          data: data,
+          start: offset + position,
+          end: offset + position + packetItem.dataLength,
+          codingpasses: packetItem.codingpasses
+        });
+        position += packetItem.dataLength;
+      }
+    }
+    return position;
+  }
+  function copyCoefficients(coefficients, levelWidth, levelHeight, subband,
+                            delta, mb, reversible, segmentationSymbolUsed) {
+    var x0 = subband.tbx0;
+    var y0 = subband.tby0;
+    var width = subband.tbx1 - subband.tbx0;
+    var codeblocks = subband.codeblocks;
+    var right = subband.type.charAt(0) === 'H' ? 1 : 0;
+    var bottom = subband.type.charAt(1) === 'H' ? levelWidth : 0;
+
+    for (var i = 0, ii = codeblocks.length; i < ii; ++i) {
+      var codeblock = codeblocks[i];
+      var blockWidth = codeblock.tbx1_ - codeblock.tbx0_;
+      var blockHeight = codeblock.tby1_ - codeblock.tby0_;
+      if (blockWidth === 0 || blockHeight === 0) {
+        continue;
+      }
+      if (codeblock['data'] === undefined) {
+        continue;
+      }
+
+      var bitModel, currentCodingpassType;
+      bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType,
+                              codeblock.zeroBitPlanes, mb);
+      currentCodingpassType = 2; // first bit plane starts from cleanup
+
+      // collect data
+      var data = codeblock.data, totalLength = 0, codingpasses = 0;
+      var j, jj, dataItem;
+      for (j = 0, jj = data.length; j < jj; j++) {
+        dataItem = data[j];
+        totalLength += dataItem.end - dataItem.start;
+        codingpasses += dataItem.codingpasses;
+      }
+      var encodedData = new Uint8Array(totalLength);
+      var position = 0;
+      for (j = 0, jj = data.length; j < jj; j++) {
+        dataItem = data[j];
+        var chunk = dataItem.data.subarray(dataItem.start, dataItem.end);
+        encodedData.set(chunk, position);
+        position += chunk.length;
+      }
+      // decoding the item
+      var decoder = new ArithmeticDecoder(encodedData, 0, totalLength);
+      bitModel.setDecoder(decoder);
+
+      for (j = 0; j < codingpasses; j++) {
+        switch (currentCodingpassType) {
+          case 0:
+            bitModel.runSignificancePropogationPass();
+            break;
+          case 1:
+            bitModel.runMagnitudeRefinementPass();
+            break;
+          case 2:
+            bitModel.runCleanupPass();
+            if (segmentationSymbolUsed) {
+              bitModel.checkSegmentationSymbol();
+            }
+            break;
+        }
+        currentCodingpassType = (currentCodingpassType + 1) % 3;
+      }
+
+      var offset = (codeblock.tbx0_ - x0) + (codeblock.tby0_ - y0) * width;
+      var sign = bitModel.coefficentsSign;
+      var magnitude = bitModel.coefficentsMagnitude;
+      var bitsDecoded = bitModel.bitsDecoded;
+      var magnitudeCorrection = reversible ? 0 : 0.5;
+      var k, n, nb;
+      position = 0;
+      // Do the interleaving of Section F.3.3 here, so we do not need
+      // to copy later. LL level is not interleaved, just copied.
+      var interleave = (subband.type !== 'LL');
+      for (j = 0; j < blockHeight; j++) {
+        var row = (offset / width) | 0; // row in the non-interleaved subband
+        var levelOffset = 2 * row * (levelWidth - width) + right + bottom;
+        for (k = 0; k < blockWidth; k++) {
+          n = magnitude[position];
+          if (n !== 0) {
+            n = (n + magnitudeCorrection) * delta;
+            if (sign[position] !== 0) {
+              n = -n;
+            }
+            nb = bitsDecoded[position];
+            var pos = interleave ? (levelOffset + (offset << 1)) : offset;
+            if (reversible && (nb >= mb)) {
+              coefficients[pos] = n;
+            } else {
+              coefficients[pos] = n * (1 << (mb - nb));
+            }
+          }
+          offset++;
+          position++;
+        }
+        offset += width - blockWidth;
+      }
+    }
+  }
+  function transformTile(context, tile, c) {
+    var component = tile.components[c];
+    var codingStyleParameters = component.codingStyleParameters;
+    var quantizationParameters = component.quantizationParameters;
+    var decompositionLevelsCount =
+      codingStyleParameters.decompositionLevelsCount;
+    var spqcds = quantizationParameters.SPqcds;
+    var scalarExpounded = quantizationParameters.scalarExpounded;
+    var guardBits = quantizationParameters.guardBits;
+    var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed;
+    var precision = context.components[c].precision;
+
+    var reversible = codingStyleParameters.reversibleTransformation;
+    var transform = (reversible ? new ReversibleTransform() :
+                                  new IrreversibleTransform());
+
+    var subbandCoefficients = [];
+    var b = 0;
+    for (var i = 0; i <= decompositionLevelsCount; i++) {
+      var resolution = component.resolutions[i];
+
+      var width = resolution.trx1 - resolution.trx0;
+      var height = resolution.try1 - resolution.try0;
+      // Allocate space for the whole sublevel.
+      var coefficients = new Float32Array(width * height);
+
+      for (var j = 0, jj = resolution.subbands.length; j < jj; j++) {
+        var mu, epsilon;
+        if (!scalarExpounded) {
+          // formula E-5
+          mu = spqcds[0].mu;
+          epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0);
+        } else {
+          mu = spqcds[b].mu;
+          epsilon = spqcds[b].epsilon;
+          b++;
+        }
+
+        var subband = resolution.subbands[j];
+        var gainLog2 = SubbandsGainLog2[subband.type];
+
+        // calulate quantization coefficient (Section E.1.1.1)
+        var delta = (reversible ? 1 :
+          Math.pow(2, precision + gainLog2 - epsilon) * (1 + mu / 2048));
+        var mb = (guardBits + epsilon - 1);
+
+        // In the first resolution level, copyCoefficients will fill the
+        // whole array with coefficients. In the succeding passes,
+        // copyCoefficients will consecutively fill in the values that belong
+        // to the interleaved positions of the HL, LH, and HH coefficients.
+        // The LL coefficients will then be interleaved in Transform.iterate().
+        copyCoefficients(coefficients, width, height, subband, delta, mb,
+                         reversible, segmentationSymbolUsed);
+      }
+      subbandCoefficients.push({
+        width: width,
+        height: height,
+        items: coefficients
+      });
+    }
+
+    var result = transform.calculate(subbandCoefficients,
+                                     component.tcx0, component.tcy0);
+    return {
+      left: component.tcx0,
+      top: component.tcy0,
+      width: result.width,
+      height: result.height,
+      items: result.items
+    };
+  }
+  function transformComponents(context) {
+    var siz = context.SIZ;
+    var components = context.components;
+    var componentsCount = siz.Csiz;
+    var resultImages = [];
+    for (var i = 0, ii = context.tiles.length; i < ii; i++) {
+      var tile = context.tiles[i];
+      var transformedTiles = [];
+      var c;
+      for (c = 0; c < componentsCount; c++) {
+        transformedTiles[c] = transformTile(context, tile, c);
+      }
+      var tile0 = transformedTiles[0];
+      var out = new Uint8Array(tile0.items.length * componentsCount);
+      var result = {
+        left: tile0.left,
+        top: tile0.top,
+        width: tile0.width,
+        height: tile0.height,
+        items: out
+      };
+
+      // Section G.2.2 Inverse multi component transform
+      var shift, offset, max, min, maxK;
+      var pos = 0, j, jj, y0, y1, y2, r, g, b, k, val;
+      if (tile.codingStyleDefaultParameters.multipleComponentTransform) {
+        var fourComponents = componentsCount === 4;
+        var y0items = transformedTiles[0].items;
+        var y1items = transformedTiles[1].items;
+        var y2items = transformedTiles[2].items;
+        var y3items = fourComponents ? transformedTiles[3].items : null;
+
+        // HACK: The multiple component transform formulas below assume that
+        // all components have the same precision. With this in mind, we
+        // compute shift and offset only once.
+        shift = components[0].precision - 8;
+        offset = (128 << shift) + 0.5;
+        max = 255 * (1 << shift);
+        maxK = max * 0.5;
+        min = -maxK;
+
+        var component0 = tile.components[0];
+        var alpha01 = componentsCount - 3;
+        jj = y0items.length;
+        if (!component0.codingStyleParameters.reversibleTransformation) {
+          // inverse irreversible multiple component transform
+          for (j = 0; j < jj; j++, pos += alpha01) {
+            y0 = y0items[j] + offset;
+            y1 = y1items[j];
+            y2 = y2items[j];
+            r = y0 + 1.402 * y2;
+            g = y0 - 0.34413 * y1 - 0.71414 * y2;
+            b = y0 + 1.772 * y1;
+            out[pos++] = r <= 0 ? 0 : r >= max ? 255 : r >> shift;
+            out[pos++] = g <= 0 ? 0 : g >= max ? 255 : g >> shift;
+            out[pos++] = b <= 0 ? 0 : b >= max ? 255 : b >> shift;
+          }
+        } else {
+          // inverse reversible multiple component transform
+          for (j = 0; j < jj; j++, pos += alpha01) {
+            y0 = y0items[j] + offset;
+            y1 = y1items[j];
+            y2 = y2items[j];
+            g = y0 - ((y2 + y1) >> 2);
+            r = g + y2;
+            b = g + y1;
+            out[pos++] = r <= 0 ? 0 : r >= max ? 255 : r >> shift;
+            out[pos++] = g <= 0 ? 0 : g >= max ? 255 : g >> shift;
+            out[pos++] = b <= 0 ? 0 : b >= max ? 255 : b >> shift;
+          }
+        }
+        if (fourComponents) {
+          for (j = 0, pos = 3; j < jj; j++, pos += 4) {
+            k = y3items[j];
+            out[pos] = k <= min ? 0 : k >= maxK ? 255 : (k + offset) >> shift;
+          }
+        }
+      } else { // no multi-component transform
+        for (c = 0; c < componentsCount; c++) {
+          var items = transformedTiles[c].items;
+          shift = components[c].precision - 8;
+          offset = (128 << shift) + 0.5;
+          max = (127.5 * (1 << shift));
+          min = -max;
+          for (pos = c, j = 0, jj = items.length; j < jj; j++) {
+            val = items[j];
+            out[pos] = val <= min ? 0 :
+                       val >= max ? 255 : (val + offset) >> shift;
+            pos += componentsCount;
+          }
+        }
+      }
+      resultImages.push(result);
+    }
+    return resultImages;
+  }
+  function initializeTile(context, tileIndex) {
+    var siz = context.SIZ;
+    var componentsCount = siz.Csiz;
+    var tile = context.tiles[tileIndex];
+    for (var c = 0; c < componentsCount; c++) {
+      var component = tile.components[c];
+      var qcdOrQcc = (context.currentTile.QCC[c] !== undefined ?
+        context.currentTile.QCC[c] : context.currentTile.QCD);
+      component.quantizationParameters = qcdOrQcc;
+      var codOrCoc = (context.currentTile.COC[c] !== undefined  ?
+        context.currentTile.COC[c] : context.currentTile.COD);
+      component.codingStyleParameters = codOrCoc;
+    }
+    tile.codingStyleDefaultParameters = context.currentTile.COD;
+  }
+
+  // Section B.10.2 Tag trees
+  var TagTree = (function TagTreeClosure() {
+    function TagTree(width, height) {
+      var levelsLength = log2(Math.max(width, height)) + 1;
+      this.levels = [];
+      for (var i = 0; i < levelsLength; i++) {
+        var level = {
+          width: width,
+          height: height,
+          items: []
+        };
+        this.levels.push(level);
+        width = Math.ceil(width / 2);
+        height = Math.ceil(height / 2);
+      }
+    }
+    TagTree.prototype = {
+      reset: function TagTree_reset(i, j) {
+        var currentLevel = 0, value = 0, level;
+        while (currentLevel < this.levels.length) {
+          level = this.levels[currentLevel];
+          var index = i + j * level.width;
+          if (level.items[index] !== undefined) {
+            value = level.items[index];
+            break;
+          }
+          level.index = index;
+          i >>= 1;
+          j >>= 1;
+          currentLevel++;
+        }
+        currentLevel--;
+        level = this.levels[currentLevel];
+        level.items[level.index] = value;
+        this.currentLevel = currentLevel;
+        delete this.value;
+      },
+      incrementValue: function TagTree_incrementValue() {
+        var level = this.levels[this.currentLevel];
+        level.items[level.index]++;
+      },
+      nextLevel: function TagTree_nextLevel() {
+        var currentLevel = this.currentLevel;
+        var level = this.levels[currentLevel];
+        var value = level.items[level.index];
+        currentLevel--;
+        if (currentLevel < 0) {
+          this.value = value;
+          return false;
+        }
+
+        this.currentLevel = currentLevel;
+        level = this.levels[currentLevel];
+        level.items[level.index] = value;
+        return true;
+      }
+    };
+    return TagTree;
+  })();
+
+  var InclusionTree = (function InclusionTreeClosure() {
+    function InclusionTree(width, height,  defaultValue) {
+      var levelsLength = log2(Math.max(width, height)) + 1;
+      this.levels = [];
+      for (var i = 0; i < levelsLength; i++) {
+        var items = new Uint8Array(width * height);
+        for (var j = 0, jj = items.length; j < jj; j++) {
+          items[j] = defaultValue;
+        }
+
+        var level = {
+          width: width,
+          height: height,
+          items: items
+        };
+        this.levels.push(level);
+
+        width = Math.ceil(width / 2);
+        height = Math.ceil(height / 2);
+      }
+    }
+    InclusionTree.prototype = {
+      reset: function InclusionTree_reset(i, j, stopValue) {
+        var currentLevel = 0;
+        while (currentLevel < this.levels.length) {
+          var level = this.levels[currentLevel];
+          var index = i + j * level.width;
+          level.index = index;
+          var value = level.items[index];
+
+          if (value === 0xFF) {
+            break;
+          }
+
+          if (value > stopValue) {
+            this.currentLevel = currentLevel;
+            // already know about this one, propagating the value to top levels
+            this.propagateValues();
+            return false;
+          }
+
+          i >>= 1;
+          j >>= 1;
+          currentLevel++;
+        }
+        this.currentLevel = currentLevel - 1;
+        return true;
+      },
+      incrementValue: function InclusionTree_incrementValue(stopValue) {
+        var level = this.levels[this.currentLevel];
+        level.items[level.index] = stopValue + 1;
+        this.propagateValues();
+      },
+      propagateValues: function InclusionTree_propagateValues() {
+        var levelIndex = this.currentLevel;
+        var level = this.levels[levelIndex];
+        var currentValue = level.items[level.index];
+        while (--levelIndex >= 0) {
+          level = this.levels[levelIndex];
+          level.items[level.index] = currentValue;
+        }
+      },
+      nextLevel: function InclusionTree_nextLevel() {
+        var currentLevel = this.currentLevel;
+        var level = this.levels[currentLevel];
+        var value = level.items[level.index];
+        level.items[level.index] = 0xFF;
+        currentLevel--;
+        if (currentLevel < 0) {
+          return false;
+        }
+
+        this.currentLevel = currentLevel;
+        level = this.levels[currentLevel];
+        level.items[level.index] = value;
+        return true;
+      }
+    };
+    return InclusionTree;
+  })();
+
+  // Section D. Coefficient bit modeling
+  var BitModel = (function BitModelClosure() {
+    var UNIFORM_CONTEXT = 17;
+    var RUNLENGTH_CONTEXT = 18;
+    // Table D-1
+    // The index is binary presentation: 0dddvvhh, ddd - sum of Di (0..4),
+    // vv - sum of Vi (0..2), and hh - sum of Hi (0..2)
+    var LLAndLHContextsLabel = new Uint8Array([
+      0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4,
+      7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6,
+      8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8
+    ]);
+    var HLContextLabel = new Uint8Array([
+      0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8,
+      8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3,
+      4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8
+    ]);
+    var HHContextLabel = new Uint8Array([
+      0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5,
+      5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8,
+      8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8
+    ]);
+
+    function BitModel(width, height, subband, zeroBitPlanes, mb) {
+      this.width = width;
+      this.height = height;
+
+      this.contextLabelTable = (subband === 'HH' ? HHContextLabel :
+        (subband === 'HL' ? HLContextLabel : LLAndLHContextsLabel));
+
+      var coefficientCount = width * height;
+
+      // coefficients outside the encoding region treated as insignificant
+      // add border state cells for significanceState
+      this.neighborsSignificance = new Uint8Array(coefficientCount);
+      this.coefficentsSign = new Uint8Array(coefficientCount);
+      this.coefficentsMagnitude = mb > 14 ? new Uint32Array(coefficientCount) :
+                                  mb > 6 ? new Uint16Array(coefficientCount) :
+                                  new Uint8Array(coefficientCount);
+      this.processingFlags = new Uint8Array(coefficientCount);
+
+      var bitsDecoded = new Uint8Array(coefficientCount);
+      if (zeroBitPlanes !== 0) {
+        for (var i = 0; i < coefficientCount; i++) {
+          bitsDecoded[i] = zeroBitPlanes;
+        }
+      }
+      this.bitsDecoded = bitsDecoded;
+
+      this.reset();
+    }
+
+    BitModel.prototype = {
+      setDecoder: function BitModel_setDecoder(decoder) {
+        this.decoder = decoder;
+      },
+      reset: function BitModel_reset() {
+        // We have 17 contexts that are accessed via context labels,
+        // plus the uniform and runlength context.
+        this.contexts = new Int8Array(19);
+
+        // Contexts are packed into 1 byte:
+        // highest 7 bits carry the index, lowest bit carries mps
+        this.contexts[0] = (4 << 1) | 0;
+        this.contexts[UNIFORM_CONTEXT] = (46 << 1) | 0;
+        this.contexts[RUNLENGTH_CONTEXT] = (3 << 1) | 0;
+      },
+      setNeighborsSignificance:
+        function BitModel_setNeighborsSignificance(row, column, index) {
+        var neighborsSignificance = this.neighborsSignificance;
+        var width = this.width, height = this.height;
+        var left = (column > 0);
+        var right = (column + 1 < width);
+        var i;
+
+        if (row > 0) {
+          i = index - width;
+          if (left) {
+            neighborsSignificance[i - 1] += 0x10;
+          }
+          if (right) {
+            neighborsSignificance[i + 1] += 0x10;
+          }
+          neighborsSignificance[i] += 0x04;
+        }
+
+        if (row + 1 < height) {
+          i = index + width;
+          if (left) {
+            neighborsSignificance[i - 1] += 0x10;
+          }
+          if (right) {
+            neighborsSignificance[i + 1] += 0x10;
+          }
+          neighborsSignificance[i] += 0x04;
+        }
+
+        if (left) {
+          neighborsSignificance[index - 1] += 0x01;
+        }
+        if (right) {
+          neighborsSignificance[index + 1] += 0x01;
+        }
+        neighborsSignificance[index] |= 0x80;
+      },
+      runSignificancePropogationPass:
+        function BitModel_runSignificancePropogationPass() {
+        var decoder = this.decoder;
+        var width = this.width, height = this.height;
+        var coefficentsMagnitude = this.coefficentsMagnitude;
+        var coefficentsSign = this.coefficentsSign;
+        var neighborsSignificance = this.neighborsSignificance;
+        var processingFlags = this.processingFlags;
+        var contexts = this.contexts;
+        var labels = this.contextLabelTable;
+        var bitsDecoded = this.bitsDecoded;
+        var processedInverseMask = ~1;
+        var processedMask = 1;
+        var firstMagnitudeBitMask = 2;
+
+        for (var i0 = 0; i0 < height; i0 += 4) {
+          for (var j = 0; j < width; j++) {
+            var index = i0 * width + j;
+            for (var i1 = 0; i1 < 4; i1++, index += width) {
+              var i = i0 + i1;
+              if (i >= height) {
+                break;
+              }
+              // clear processed flag first
+              processingFlags[index] &= processedInverseMask;
+
+              if (coefficentsMagnitude[index] ||
+                  !neighborsSignificance[index]) {
+                continue;
+              }
+
+              var contextLabel = labels[neighborsSignificance[index]];
+              var decision = decoder.readBit(contexts, contextLabel);
+              if (decision) {
+                var sign = this.decodeSignBit(i, j, index);
+                coefficentsSign[index] = sign;
+                coefficentsMagnitude[index] = 1;
+                this.setNeighborsSignificance(i, j, index);
+                processingFlags[index] |= firstMagnitudeBitMask;
+              }
+              bitsDecoded[index]++;
+              processingFlags[index] |= processedMask;
+            }
+          }
+        }
+      },
+      decodeSignBit: function BitModel_decodeSignBit(row, column, index) {
+        var width = this.width, height = this.height;
+        var coefficentsMagnitude = this.coefficentsMagnitude;
+        var coefficentsSign = this.coefficentsSign;
+        var contribution, sign0, sign1, significance1;
+        var contextLabel, decoded;
+
+        // calculate horizontal contribution
+        significance1 = (column > 0 && coefficentsMagnitude[index - 1] !== 0);
+        if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) {
+          sign1 = coefficentsSign[index + 1];
+          if (significance1) {
+            sign0 = coefficentsSign[index - 1];
+            contribution = 1 - sign1 - sign0;
+          } else {
+            contribution = 1 - sign1 - sign1;
+          }
+        } else if (significance1) {
+          sign0 = coefficentsSign[index - 1];
+          contribution = 1 - sign0 - sign0;
+        } else {
+          contribution = 0;
+        }
+        var horizontalContribution = 3 * contribution;
+
+        // calculate vertical contribution and combine with the horizontal
+        significance1 = (row > 0 && coefficentsMagnitude[index - width] !== 0);
+        if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) {
+          sign1 = coefficentsSign[index + width];
+          if (significance1) {
+            sign0 = coefficentsSign[index - width];
+            contribution = 1 - sign1 - sign0 + horizontalContribution;
+          } else {
+            contribution = 1 - sign1 - sign1 + horizontalContribution;
+          }
+        } else if (significance1) {
+          sign0 = coefficentsSign[index - width];
+          contribution = 1 - sign0 - sign0 + horizontalContribution;
+        } else {
+          contribution = horizontalContribution;
+        }
+
+        if (contribution >= 0) {
+          contextLabel = 9 + contribution;
+          decoded = this.decoder.readBit(this.contexts, contextLabel);
+        } else {
+          contextLabel = 9 - contribution;
+          decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1;
+        }
+        return decoded;
+      },
+      runMagnitudeRefinementPass:
+        function BitModel_runMagnitudeRefinementPass() {
+        var decoder = this.decoder;
+        var width = this.width, height = this.height;
+        var coefficentsMagnitude = this.coefficentsMagnitude;
+        var neighborsSignificance = this.neighborsSignificance;
+        var contexts = this.contexts;
+        var bitsDecoded = this.bitsDecoded;
+        var processingFlags = this.processingFlags;
+        var processedMask = 1;
+        var firstMagnitudeBitMask = 2;
+        var length = width * height;
+        var width4 = width * 4;
+
+        for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) {
+          indexNext = Math.min(length, index0 + width4);
+          for (var j = 0; j < width; j++) {
+            for (var index = index0 + j; index < indexNext; index += width) {
+
+              // significant but not those that have just become
+              if (!coefficentsMagnitude[index] ||
+                (processingFlags[index] & processedMask) !== 0) {
+                continue;
+              }
+
+              var contextLabel = 16;
+              if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) {
+                processingFlags[index] ^= firstMagnitudeBitMask;
+                // first refinement
+               var significance = neighborsSignificance[index] & 127;
+               contextLabel = significance === 0 ? 15 : 14;
+              }
+
+              var bit = decoder.readBit(contexts, contextLabel);
+              coefficentsMagnitude[index] =
+                (coefficentsMagnitude[index] << 1) | bit;
+              bitsDecoded[index]++;
+              processingFlags[index] |= processedMask;
+            }
+          }
+        }
+      },
+      runCleanupPass: function BitModel_runCleanupPass() {
+        var decoder = this.decoder;
+        var width = this.width, height = this.height;
+        var neighborsSignificance = this.neighborsSignificance;
+        var coefficentsMagnitude = this.coefficentsMagnitude;
+        var coefficentsSign = this.coefficentsSign;
+        var contexts = this.contexts;
+        var labels = this.contextLabelTable;
+        var bitsDecoded = this.bitsDecoded;
+        var processingFlags = this.processingFlags;
+        var processedMask = 1;
+        var firstMagnitudeBitMask = 2;
+        var oneRowDown = width;
+        var twoRowsDown = width * 2;
+        var threeRowsDown = width * 3;
+        var iNext;
+        for (var i0 = 0; i0 < height; i0 = iNext) {
+          iNext = Math.min(i0 + 4, height);
+          var indexBase = i0 * width;
+          var checkAllEmpty = i0 + 3 < height;
+          for (var j = 0; j < width; j++) {
+            var index0 = indexBase + j;
+            // using the property: labels[neighborsSignificance[index]] === 0
+            // when neighborsSignificance[index] === 0
+            var allEmpty = (checkAllEmpty &&
+              processingFlags[index0] === 0 &&
+              processingFlags[index0 + oneRowDown] === 0 &&
+              processingFlags[index0 + twoRowsDown] === 0 &&
+              processingFlags[index0 + threeRowsDown] === 0 &&
+              neighborsSignificance[index0] === 0 &&
+              neighborsSignificance[index0 + oneRowDown] === 0 &&
+              neighborsSignificance[index0 + twoRowsDown] === 0 &&
+              neighborsSignificance[index0 + threeRowsDown] === 0);
+            var i1 = 0, index = index0;
+            var i = i0, sign;
+            if (allEmpty) {
+              var hasSignificantCoefficent =
+                decoder.readBit(contexts, RUNLENGTH_CONTEXT);
+              if (!hasSignificantCoefficent) {
+                bitsDecoded[index0]++;
+                bitsDecoded[index0 + oneRowDown]++;
+                bitsDecoded[index0 + twoRowsDown]++;
+                bitsDecoded[index0 + threeRowsDown]++;
+                continue; // next column
+              }
+              i1 = (decoder.readBit(contexts, UNIFORM_CONTEXT) << 1) |
+                    decoder.readBit(contexts, UNIFORM_CONTEXT);
+              if (i1 !== 0) {
+                i = i0 + i1;
+                index += i1 * width;
+              }
+
+              sign = this.decodeSignBit(i, j, index);
+              coefficentsSign[index] = sign;
+              coefficentsMagnitude[index] = 1;
+              this.setNeighborsSignificance(i, j, index);
+              processingFlags[index] |= firstMagnitudeBitMask;
+
+              index = index0;
+              for (var i2 = i0; i2 <= i; i2++, index += width) {
+                bitsDecoded[index]++;
+              }
+
+              i1++;
+            }
+            for (i = i0 + i1; i < iNext; i++, index += width) {
+              if (coefficentsMagnitude[index] ||
+                (processingFlags[index] & processedMask) !== 0) {
+                continue;
+              }
+
+              var contextLabel = labels[neighborsSignificance[index]];
+              var decision = decoder.readBit(contexts, contextLabel);
+              if (decision === 1) {
+                sign = this.decodeSignBit(i, j, index);
+                coefficentsSign[index] = sign;
+                coefficentsMagnitude[index] = 1;
+                this.setNeighborsSignificance(i, j, index);
+                processingFlags[index] |= firstMagnitudeBitMask;
+              }
+              bitsDecoded[index]++;
+            }
+          }
+        }
+      },
+      checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() {
+        var decoder = this.decoder;
+        var contexts = this.contexts;
+        var symbol = (decoder.readBit(contexts, UNIFORM_CONTEXT) << 3) |
+                     (decoder.readBit(contexts, UNIFORM_CONTEXT) << 2) |
+                     (decoder.readBit(contexts, UNIFORM_CONTEXT) << 1) |
+                      decoder.readBit(contexts, UNIFORM_CONTEXT);
+        if (symbol !== 0xA) {
+          throw new Error('JPX Error: Invalid segmentation symbol');
+        }
+      }
+    };
+
+    return BitModel;
+  })();
+
+  // Section F, Discrete wavelet transformation
+  var Transform = (function TransformClosure() {
+    function Transform() {}
+
+    Transform.prototype.calculate =
+      function transformCalculate(subbands, u0, v0) {
+      var ll = subbands[0];
+      for (var i = 1, ii = subbands.length; i < ii; i++) {
+        ll = this.iterate(ll, subbands[i], u0, v0);
+      }
+      return ll;
+    };
+    Transform.prototype.extend = function extend(buffer, offset, size) {
+      // Section F.3.7 extending... using max extension of 4
+      var i1 = offset - 1, j1 = offset + 1;
+      var i2 = offset + size - 2, j2 = offset + size;
+      buffer[i1--] = buffer[j1++];
+      buffer[j2++] = buffer[i2--];
+      buffer[i1--] = buffer[j1++];
+      buffer[j2++] = buffer[i2--];
+      buffer[i1--] = buffer[j1++];
+      buffer[j2++] = buffer[i2--];
+      buffer[i1] = buffer[j1];
+      buffer[j2] = buffer[i2];
+    };
+    Transform.prototype.iterate = function Transform_iterate(ll, hl_lh_hh,
+                                                             u0, v0) {
+      var llWidth = ll.width, llHeight = ll.height, llItems = ll.items;
+      var width = hl_lh_hh.width;
+      var height = hl_lh_hh.height;
+      var items = hl_lh_hh.items;
+      var i, j, k, l, u, v;
+
+      // Interleave LL according to Section F.3.3
+      for (k = 0, i = 0; i < llHeight; i++) {
+        l = i * 2 * width;
+        for (j = 0; j < llWidth; j++, k++, l += 2) {
+          items[l] = llItems[k];
+        }
+      }
+      // The LL band is not needed anymore.
+      llItems = ll.items = null;
+
+      var bufferPadding = 4;
+      var rowBuffer = new Float32Array(width + 2 * bufferPadding);
+
+      // Section F.3.4 HOR_SR
+      if (width === 1) {
+        // if width = 1, when u0 even keep items as is, when odd divide by 2
+        if ((u0 & 1) !== 0) {
+          for (v = 0, k = 0; v < height; v++, k += width) {
+            items[k] *= 0.5;
+          }
+        }
+      } else {
+        for (v = 0, k = 0; v < height; v++, k += width) {
+          rowBuffer.set(items.subarray(k, k + width), bufferPadding);
+
+          this.extend(rowBuffer, bufferPadding, width);
+          this.filter(rowBuffer, bufferPadding, width);
+
+          items.set(
+            rowBuffer.subarray(bufferPadding, bufferPadding + width),
+            k);
+        }
+      }
+
+      // Accesses to the items array can take long, because it may not fit into
+      // CPU cache and has to be fetched from main memory. Since subsequent
+      // accesses to the items array are not local when reading columns, we
+      // have a cache miss every time. To reduce cache misses, get up to
+      // 'numBuffers' items at a time and store them into the individual
+      // buffers. The colBuffers should be small enough to fit into CPU cache.
+      var numBuffers = 16;
+      var colBuffers = [];
+      for (i = 0; i < numBuffers; i++) {
+        colBuffers.push(new Float32Array(height + 2 * bufferPadding));
+      }
+      var b, currentBuffer = 0;
+      ll = bufferPadding + height;
+
+      // Section F.3.5 VER_SR
+      if (height === 1) {
+          // if height = 1, when v0 even keep items as is, when odd divide by 2
+        if ((v0 & 1) !== 0) {
+          for (u = 0; u < width; u++) {
+            items[u] *= 0.5;
+          }
+        }
+      } else {
+        for (u = 0; u < width; u++) {
+          // if we ran out of buffers, copy several image columns at once
+          if (currentBuffer === 0) {
+            numBuffers = Math.min(width - u, numBuffers);
+            for (k = u, l = bufferPadding; l < ll; k += width, l++) {
+              for (b = 0; b < numBuffers; b++) {
+                colBuffers[b][l] = items[k + b];
+              }
+            }
+            currentBuffer = numBuffers;
+          }
+
+          currentBuffer--;
+          var buffer = colBuffers[currentBuffer];
+          this.extend(buffer, bufferPadding, height);
+          this.filter(buffer, bufferPadding, height);
+
+          // If this is last buffer in this group of buffers, flush all buffers.
+          if (currentBuffer === 0) {
+            k = u - numBuffers + 1;
+            for (l = bufferPadding; l < ll; k += width, l++) {
+              for (b = 0; b < numBuffers; b++) {
+                items[k + b] = colBuffers[b][l];
+              }
+            }
+          }
+        }
+      }
+
+      return {
+        width: width,
+        height: height,
+        items: items
+      };
+    };
+    return Transform;
+  })();
+
+  // Section 3.8.2 Irreversible 9-7 filter
+  var IrreversibleTransform = (function IrreversibleTransformClosure() {
+    function IrreversibleTransform() {
+      Transform.call(this);
+    }
+
+    IrreversibleTransform.prototype = Object.create(Transform.prototype);
+    IrreversibleTransform.prototype.filter =
+      function irreversibleTransformFilter(x, offset, length) {
+      var len = length >> 1;
+      offset = offset | 0;
+      var j, n, current, next;
+
+      var alpha = -1.586134342059924;
+      var beta = -0.052980118572961;
+      var gamma = 0.882911075530934;
+      var delta = 0.443506852043971;
+      var K = 1.230174104914001;
+      var K_ = 1 / K;
+
+      // step 1 is combined with step 3
+
+      // step 2
+      j = offset - 3;
+      for (n = len + 4; n--; j += 2) {
+        x[j] *= K_;
+      }
+
+      // step 1 & 3
+      j = offset - 2;
+      current = delta * x[j -1];
+      for (n = len + 3; n--; j += 2) {
+        next = delta * x[j + 1];
+        x[j] = K * x[j] - current - next;
+        if (n--) {
+          j += 2;
+          current = delta * x[j + 1];
+          x[j] = K * x[j] - current - next;
+        } else {
+          break;
+        }
+      }
+
+      // step 4
+      j = offset - 1;
+      current = gamma * x[j - 1];
+      for (n = len + 2; n--; j += 2) {
+        next = gamma * x[j + 1];
+        x[j] -= current + next;
+        if (n--) {
+          j += 2;
+          current = gamma * x[j + 1];
+          x[j] -= current + next;
+        } else {
+          break;
+        }
+      }
+
+      // step 5
+      j = offset;
+      current = beta * x[j - 1];
+      for (n = len + 1; n--; j += 2) {
+        next = beta * x[j + 1];
+        x[j] -= current + next;
+        if (n--) {
+          j += 2;
+          current = beta * x[j + 1];
+          x[j] -= current + next;
+        } else {
+          break;
+        }
+      }
+
+      // step 6
+      if (len !== 0) {
+        j = offset + 1;
+        current = alpha * x[j - 1];
+        for (n = len; n--; j += 2) {
+          next = alpha * x[j + 1];
+          x[j] -= current + next;
+          if (n--) {
+            j += 2;
+            current = alpha * x[j + 1];
+            x[j] -= current + next;
+          } else {
+            break;
+          }
+        }
+      }
+    };
+
+    return IrreversibleTransform;
+  })();
+
+  // Section 3.8.1 Reversible 5-3 filter
+  var ReversibleTransform = (function ReversibleTransformClosure() {
+    function ReversibleTransform() {
+      Transform.call(this);
+    }
+
+    ReversibleTransform.prototype = Object.create(Transform.prototype);
+    ReversibleTransform.prototype.filter =
+      function reversibleTransformFilter(x, offset, length) {
+      var len = length >> 1;
+      offset = offset | 0;
+      var j, n;
+
+      for (j = offset, n = len + 1; n--; j += 2) {
+        x[j] -= (x[j - 1] + x[j + 1] + 2) >> 2;
+      }
+
+      for (j = offset + 1, n = len; n--; j += 2) {
+        x[j] += (x[j - 1] + x[j + 1]) >> 1;
+      }
+    };
+
+    return ReversibleTransform;
+  })();
+
+  return JpxImage;
+})();
+
+
+var Jbig2Image = (function Jbig2ImageClosure() {
+  // Utility data structures
+  function ContextCache() {}
+
+  ContextCache.prototype = {
+    getContexts: function(id) {
+      if (id in this) {
+        return this[id];
+      }
+      return (this[id] = new Int8Array(1 << 16));
+    }
+  };
+
+  function DecodingContext(data, start, end) {
+    this.data = data;
+    this.start = start;
+    this.end = end;
+  }
+
+  DecodingContext.prototype = {
+    get decoder() {
+      var decoder = new ArithmeticDecoder(this.data, this.start, this.end);
+      return shadow(this, 'decoder', decoder);
+    },
+    get contextCache() {
+      var cache = new ContextCache();
+      return shadow(this, 'contextCache', cache);
+    }
+  };
+
+  // Annex A. Arithmetic Integer Decoding Procedure
+  // A.2 Procedure for decoding values
+  function decodeInteger(contextCache, procedure, decoder) {
+    var contexts = contextCache.getContexts(procedure);
+    var prev = 1;
+
+    function readBits(length) {
+      var v = 0;
+      for (var i = 0; i < length; i++) {
+        var bit = decoder.readBit(contexts, prev);
+        prev = (prev < 256 ? (prev << 1) | bit :
+                (((prev << 1) | bit) & 511) | 256);
+        v = (v << 1) | bit;
+      }
+      return v >>> 0;
+    }
+
+    var sign = readBits(1);
+    var value = readBits(1) ?
+                  (readBits(1) ?
+                    (readBits(1) ?
+                      (readBits(1) ?
+                        (readBits(1) ?
+                          (readBits(32) + 4436) :
+                        readBits(12) + 340) :
+                      readBits(8) + 84) :
+                    readBits(6) + 20) :
+                  readBits(4) + 4) :
+                readBits(2);
+    return (sign === 0 ? value : (value > 0 ? -value : null));
+  }
+
+  // A.3 The IAID decoding procedure
+  function decodeIAID(contextCache, decoder, codeLength) {
+    var contexts = contextCache.getContexts('IAID');
+
+    var prev = 1;
+    for (var i = 0; i < codeLength; i++) {
+      var bit = decoder.readBit(contexts, prev);
+      prev = (prev << 1) | bit;
+    }
+    if (codeLength < 31) {
+      return prev & ((1 << codeLength) - 1);
+    }
+    return prev & 0x7FFFFFFF;
+  }
+
+  // 7.3 Segment types
+  var SegmentTypes = [
+    'SymbolDictionary', null, null, null, 'IntermediateTextRegion', null,
+    'ImmediateTextRegion', 'ImmediateLosslessTextRegion', null, null, null,
+    null, null, null, null, null, 'patternDictionary', null, null, null,
+    'IntermediateHalftoneRegion', null, 'ImmediateHalftoneRegion',
+    'ImmediateLosslessHalftoneRegion', null, null, null, null, null, null, null,
+    null, null, null, null, null, 'IntermediateGenericRegion', null,
+    'ImmediateGenericRegion', 'ImmediateLosslessGenericRegion',
+    'IntermediateGenericRefinementRegion', null,
+    'ImmediateGenericRefinementRegion',
+    'ImmediateLosslessGenericRefinementRegion', null, null, null, null,
+    'PageInformation', 'EndOfPage', 'EndOfStripe', 'EndOfFile', 'Profiles',
+    'Tables', null, null, null, null, null, null, null, null,
+    'Extension'
+  ];
+
+  var CodingTemplates = [
+    [{x: -1, y: -2}, {x: 0, y: -2}, {x: 1, y: -2}, {x: -2, y: -1},
+     {x: -1, y: -1}, {x: 0, y: -1}, {x: 1, y: -1}, {x: 2, y: -1},
+     {x: -4, y: 0}, {x: -3, y: 0}, {x: -2, y: 0}, {x: -1, y: 0}],
+    [{x: -1, y: -2}, {x: 0, y: -2}, {x: 1, y: -2}, {x: 2, y: -2},
+     {x: -2, y: -1}, {x: -1, y: -1}, {x: 0, y: -1}, {x: 1, y: -1},
+     {x: 2, y: -1}, {x: -3, y: 0}, {x: -2, y: 0}, {x: -1, y: 0}],
+    [{x: -1, y: -2}, {x: 0, y: -2}, {x: 1, y: -2}, {x: -2, y: -1},
+     {x: -1, y: -1}, {x: 0, y: -1}, {x: 1, y: -1}, {x: -2, y: 0},
+     {x: -1, y: 0}],
+    [{x: -3, y: -1}, {x: -2, y: -1}, {x: -1, y: -1}, {x: 0, y: -1},
+     {x: 1, y: -1}, {x: -4, y: 0}, {x: -3, y: 0}, {x: -2, y: 0}, {x: -1, y: 0}]
+  ];
+
+  var RefinementTemplates = [
+    {
+      coding: [{x: 0, y: -1}, {x: 1, y: -1}, {x: -1, y: 0}],
+      reference: [{x: 0, y: -1}, {x: 1, y: -1}, {x: -1, y: 0}, {x: 0, y: 0},
+                  {x: 1, y: 0}, {x: -1, y: 1}, {x: 0, y: 1}, {x: 1, y: 1}]
+    },
+    {
+      coding: [{x: -1, y: -1}, {x: 0, y: -1}, {x: 1, y: -1}, {x: -1, y: 0}],
+      reference: [{x: 0, y: -1}, {x: -1, y: 0}, {x: 0, y: 0}, {x: 1, y: 0},
+                  {x: 0, y: 1}, {x: 1, y: 1}]
+    }
+  ];
+
+  // See 6.2.5.7 Decoding the bitmap.
+  var ReusedContexts = [
+    0x9B25, // 10011 0110010 0101
+    0x0795, // 0011 110010 101
+    0x00E5, // 001 11001 01
+    0x0195  // 011001 0101
+  ];
+
+  var RefinementReusedContexts = [
+    0x0020, // '000' + '0' (coding) + '00010000' + '0' (reference)
+    0x0008  // '0000' + '001000'
+  ];
+
+  function decodeBitmapTemplate0(width, height, decodingContext) {
+    var decoder = decodingContext.decoder;
+    var contexts = decodingContext.contextCache.getContexts('GB');
+    var contextLabel, i, j, pixel, row, row1, row2, bitmap = [];
+
+    // ...ooooo....
+    // ..ooooooo... Context template for current pixel (X)
+    // .ooooX...... (concatenate values of 'o'-pixels to get contextLabel)
+    var OLD_PIXEL_MASK = 0x7BF7; // 01111 0111111 0111
+
+    for (i = 0; i < height; i++) {
+      row = bitmap[i] = new Uint8Array(width);
+      row1 = (i < 1) ? row : bitmap[i - 1];
+      row2 = (i < 2) ? row : bitmap[i - 2];
+
+      // At the beginning of each row:
+      // Fill contextLabel with pixels that are above/right of (X)
+      contextLabel = (row2[0] << 13) | (row2[1] << 12) | (row2[2] << 11) |
+                     (row1[0] << 7) | (row1[1] << 6) | (row1[2] << 5) |
+                     (row1[3] << 4);
+
+      for (j = 0; j < width; j++) {
+        row[j] = pixel = decoder.readBit(contexts, contextLabel);
+
+        // At each pixel: Clear contextLabel pixels that are shifted
+        // out of the context, then add new ones.
+        contextLabel = ((contextLabel & OLD_PIXEL_MASK) << 1) |
+                       (j + 3 < width ? row2[j + 3] << 11 : 0) |
+                       (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel;
+      }
+    }
+
+    return bitmap;
+  }
+
+  // 6.2 Generic Region Decoding Procedure
+  function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at,
+                        decodingContext) {
+    if (mmr) {
+      error('JBIG2 error: MMR encoding is not supported');
+    }
+
+    // Use optimized version for the most common case
+    if (templateIndex === 0 && !skip && !prediction && at.length === 4 &&
+        at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 &&
+        at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) {
+      return decodeBitmapTemplate0(width, height, decodingContext);
+    }
+
+    var useskip = !!skip;
+    var template = CodingTemplates[templateIndex].concat(at);
+
+    // Sorting is non-standard, and it is not required. But sorting increases
+    // the number of template bits that can be reused from the previous
+    // contextLabel in the main loop.
+    template.sort(function (a, b) {
+      return (a.y - b.y) || (a.x - b.x);
+    });
+
+    var templateLength = template.length;
+    var templateX = new Int8Array(templateLength);
+    var templateY = new Int8Array(templateLength);
+    var changingTemplateEntries = [];
+    var reuseMask = 0, minX = 0, maxX = 0, minY = 0;
+    var c, k;
+
+    for (k = 0; k < templateLength; k++) {
+      templateX[k] = template[k].x;
+      templateY[k] = template[k].y;
+      minX = Math.min(minX, template[k].x);
+      maxX = Math.max(maxX, template[k].x);
+      minY = Math.min(minY, template[k].y);
+      // Check if the template pixel appears in two consecutive context labels,
+      // so it can be reused. Otherwise, we add it to the list of changing
+      // template entries.
+      if (k < templateLength - 1 &&
+          template[k].y === template[k + 1].y &&
+          template[k].x === template[k + 1].x - 1) {
+        reuseMask |= 1 << (templateLength - 1 - k);
+      } else {
+        changingTemplateEntries.push(k);
+      }
+    }
+    var changingEntriesLength = changingTemplateEntries.length;
+
+    var changingTemplateX = new Int8Array(changingEntriesLength);
+    var changingTemplateY = new Int8Array(changingEntriesLength);
+    var changingTemplateBit = new Uint16Array(changingEntriesLength);
+    for (c = 0; c < changingEntriesLength; c++) {
+      k = changingTemplateEntries[c];
+      changingTemplateX[c] = template[k].x;
+      changingTemplateY[c] = template[k].y;
+      changingTemplateBit[c] = 1 << (templateLength - 1 - k);
+    }
+
+    // Get the safe bounding box edges from the width, height, minX, maxX, minY
+    var sbb_left = -minX;
+    var sbb_top = -minY;
+    var sbb_right = width - maxX;
+
+    var pseudoPixelContext = ReusedContexts[templateIndex];
+    var row = new Uint8Array(width);
+    var bitmap = [];
+
+    var decoder = decodingContext.decoder;
+    var contexts = decodingContext.contextCache.getContexts('GB');
+
+    var ltp = 0, j, i0, j0, contextLabel = 0, bit, shift;
+    for (var i = 0; i < height; i++) {
+      if (prediction) {
+        var sltp = decoder.readBit(contexts, pseudoPixelContext);
+        ltp ^= sltp;
+        if (ltp) {
+          bitmap.push(row); // duplicate previous row
+          continue;
+        }
+      }
+      row = new Uint8Array(row);
+      bitmap.push(row);
+      for (j = 0; j < width; j++) {
+        if (useskip && skip[i][j]) {
+          row[j] = 0;
+          continue;
+        }
+        // Are we in the middle of a scanline, so we can reuse contextLabel
+        // bits?
+        if (j >= sbb_left && j < sbb_right && i >= sbb_top) {
+          // If yes, we can just shift the bits that are reusable and only
+          // fetch the remaining ones.
+          contextLabel = (contextLabel << 1) & reuseMask;
+          for (k = 0; k < changingEntriesLength; k++) {
+            i0 = i + changingTemplateY[k];
+            j0 = j + changingTemplateX[k];
+            bit = bitmap[i0][j0];
+            if (bit) {
+              bit = changingTemplateBit[k];
+              contextLabel |= bit;
+            }
+          }
+        } else {
+          // compute the contextLabel from scratch
+          contextLabel = 0;
+          shift = templateLength - 1;
+          for (k = 0; k < templateLength; k++, shift--) {
+            j0 = j + templateX[k];
+            if (j0 >= 0 && j0 < width) {
+              i0 = i + templateY[k];
+              if (i0 >= 0) {
+                bit = bitmap[i0][j0];
+                if (bit) {
+                  contextLabel |= bit << shift;
+                }
+              }
+            }
+          }
+        }
+        var pixel = decoder.readBit(contexts, contextLabel);
+        row[j] = pixel;
+      }
+    }
+    return bitmap;
+  }
+
+  // 6.3.2 Generic Refinement Region Decoding Procedure
+  function decodeRefinement(width, height, templateIndex, referenceBitmap,
+                            offsetX, offsetY, prediction, at,
+                            decodingContext) {
+    var codingTemplate = RefinementTemplates[templateIndex].coding;
+    if (templateIndex === 0) {
+      codingTemplate = codingTemplate.concat([at[0]]);
+    }
+    var codingTemplateLength = codingTemplate.length;
+    var codingTemplateX = new Int32Array(codingTemplateLength);
+    var codingTemplateY = new Int32Array(codingTemplateLength);
+    var k;
+    for (k = 0; k < codingTemplateLength; k++) {
+      codingTemplateX[k] = codingTemplate[k].x;
+      codingTemplateY[k] = codingTemplate[k].y;
+    }
+
+    var referenceTemplate = RefinementTemplates[templateIndex].reference;
+    if (templateIndex === 0) {
+      referenceTemplate = referenceTemplate.concat([at[1]]);
+    }
+    var referenceTemplateLength = referenceTemplate.length;
+    var referenceTemplateX = new Int32Array(referenceTemplateLength);
+    var referenceTemplateY = new Int32Array(referenceTemplateLength);
+    for (k = 0; k < referenceTemplateLength; k++) {
+      referenceTemplateX[k] = referenceTemplate[k].x;
+      referenceTemplateY[k] = referenceTemplate[k].y;
+    }
+    var referenceWidth = referenceBitmap[0].length;
+    var referenceHeight = referenceBitmap.length;
+
+    var pseudoPixelContext = RefinementReusedContexts[templateIndex];
+    var bitmap = [];
+
+    var decoder = decodingContext.decoder;
+    var contexts = decodingContext.contextCache.getContexts('GR');
+
+    var ltp = 0;
+    for (var i = 0; i < height; i++) {
+      if (prediction) {
+        var sltp = decoder.readBit(contexts, pseudoPixelContext);
+        ltp ^= sltp;
+        if (ltp) {
+          error('JBIG2 error: prediction is not supported');
+        }
+      }
+      var row = new Uint8Array(width);
+      bitmap.push(row);
+      for (var j = 0; j < width; j++) {
+        var i0, j0;
+        var contextLabel = 0;
+        for (k = 0; k < codingTemplateLength; k++) {
+          i0 = i + codingTemplateY[k];
+          j0 = j + codingTemplateX[k];
+          if (i0 < 0 || j0 < 0 || j0 >= width) {
+            contextLabel <<= 1; // out of bound pixel
+          } else {
+            contextLabel = (contextLabel << 1) | bitmap[i0][j0];
+          }
+        }
+        for (k = 0; k < referenceTemplateLength; k++) {
+          i0 = i + referenceTemplateY[k] + offsetY;
+          j0 = j + referenceTemplateX[k] + offsetX;
+          if (i0 < 0 || i0 >= referenceHeight || j0 < 0 ||
+              j0 >= referenceWidth) {
+            contextLabel <<= 1; // out of bound pixel
+          } else {
+            contextLabel = (contextLabel << 1) | referenceBitmap[i0][j0];
+          }
+        }
+        var pixel = decoder.readBit(contexts, contextLabel);
+        row[j] = pixel;
+      }
+    }
+
+    return bitmap;
+  }
+
+  // 6.5.5 Decoding the symbol dictionary
+  function decodeSymbolDictionary(huffman, refinement, symbols,
+                                  numberOfNewSymbols, numberOfExportedSymbols,
+                                  huffmanTables, templateIndex, at,
+                                  refinementTemplateIndex, refinementAt,
+                                  decodingContext) {
+    if (huffman) {
+      error('JBIG2 error: huffman is not supported');
+    }
+
+    var newSymbols = [];
+    var currentHeight = 0;
+    var symbolCodeLength = log2(symbols.length + numberOfNewSymbols);
+
+    var decoder = decodingContext.decoder;
+    var contextCache = decodingContext.contextCache;
+
+    while (newSymbols.length < numberOfNewSymbols) {
+      var deltaHeight = decodeInteger(contextCache, 'IADH', decoder); // 6.5.6
+      currentHeight += deltaHeight;
+      var currentWidth = 0;
+      var totalWidth = 0;
+      while (true) {
+        var deltaWidth = decodeInteger(contextCache, 'IADW', decoder); // 6.5.7
+        if (deltaWidth === null) {
+          break; // OOB
+        }
+        currentWidth += deltaWidth;
+        totalWidth += currentWidth;
+        var bitmap;
+        if (refinement) {
+          // 6.5.8.2 Refinement/aggregate-coded symbol bitmap
+          var numberOfInstances = decodeInteger(contextCache, 'IAAI', decoder);
+          if (numberOfInstances > 1) {
+            bitmap = decodeTextRegion(huffman, refinement,
+                                      currentWidth, currentHeight, 0,
+                                      numberOfInstances, 1, //strip size
+                                      symbols.concat(newSymbols),
+                                      symbolCodeLength,
+                                      0, //transposed
+                                      0, //ds offset
+                                      1, //top left 7.4.3.1.1
+                                      0, //OR operator
+                                      huffmanTables,
+                                      refinementTemplateIndex, refinementAt,
+                                      decodingContext);
+          } else {
+            var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);
+            var rdx = decodeInteger(contextCache, 'IARDX', decoder); // 6.4.11.3
+            var rdy = decodeInteger(contextCache, 'IARDY', decoder); // 6.4.11.4
+            var symbol = (symbolId < symbols.length ? symbols[symbolId] :
+                          newSymbols[symbolId - symbols.length]);
+            bitmap = decodeRefinement(currentWidth, currentHeight,
+            refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt,
+            decodingContext);
+          }
+        } else {
+          // 6.5.8.1 Direct-coded symbol bitmap
+          bitmap = decodeBitmap(false, currentWidth, currentHeight,
+            templateIndex, false, null, at, decodingContext);
+        }
+        newSymbols.push(bitmap);
+      }
+    }
+    // 6.5.10 Exported symbols
+    var exportedSymbols = [];
+    var flags = [], currentFlag = false;
+    var totalSymbolsLength = symbols.length + numberOfNewSymbols;
+    while (flags.length < totalSymbolsLength) {
+      var runLength = decodeInteger(contextCache, 'IAEX', decoder);
+      while (runLength--) {
+        flags.push(currentFlag);
+      }
+      currentFlag = !currentFlag;
+    }
+    for (var i = 0, ii = symbols.length; i < ii; i++) {
+      if (flags[i]) {
+        exportedSymbols.push(symbols[i]);
+      }
+    }
+    for (var j = 0; j < numberOfNewSymbols; i++, j++) {
+      if (flags[i]) {
+        exportedSymbols.push(newSymbols[j]);
+      }
+    }
+    return exportedSymbols;
+  }
+
+  function decodeTextRegion(huffman, refinement, width, height,
+                            defaultPixelValue, numberOfSymbolInstances,
+                            stripSize, inputSymbols, symbolCodeLength,
+                            transposed, dsOffset, referenceCorner,
+                            combinationOperator, huffmanTables,
+                            refinementTemplateIndex, refinementAt,
+                            decodingContext) {
+    if (huffman) {
+      error('JBIG2 error: huffman is not supported');
+    }
+
+    // Prepare bitmap
+    var bitmap = [];
+    var i, row;
+    for (i = 0; i < height; i++) {
+      row = new Uint8Array(width);
+      if (defaultPixelValue) {
+        for (var j = 0; j < width; j++) {
+          row[j] = defaultPixelValue;
+        }
+      }
+      bitmap.push(row);
+    }
+
+    var decoder = decodingContext.decoder;
+    var contextCache = decodingContext.contextCache;
+    var stripT = -decodeInteger(contextCache, 'IADT', decoder); // 6.4.6
+    var firstS = 0;
+    i = 0;
+    while (i < numberOfSymbolInstances) {
+      var deltaT = decodeInteger(contextCache, 'IADT', decoder); // 6.4.6
+      stripT += deltaT;
+
+      var deltaFirstS = decodeInteger(contextCache, 'IAFS', decoder); // 6.4.7
+      firstS += deltaFirstS;
+      var currentS = firstS;
+      do {
+        var currentT = (stripSize === 1 ? 0 :
+                        decodeInteger(contextCache, 'IAIT', decoder)); // 6.4.9
+        var t = stripSize * stripT + currentT;
+        var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);
+        var applyRefinement = (refinement &&
+                               decodeInteger(contextCache, 'IARI', decoder));
+        var symbolBitmap = inputSymbols[symbolId];
+        var symbolWidth = symbolBitmap[0].length;
+        var symbolHeight = symbolBitmap.length;
+        if (applyRefinement) {
+          var rdw = decodeInteger(contextCache, 'IARDW', decoder); // 6.4.11.1
+          var rdh = decodeInteger(contextCache, 'IARDH', decoder); // 6.4.11.2
+          var rdx = decodeInteger(contextCache, 'IARDX', decoder); // 6.4.11.3
+          var rdy = decodeInteger(contextCache, 'IARDY', decoder); // 6.4.11.4
+          symbolWidth += rdw;
+          symbolHeight += rdh;
+          symbolBitmap = decodeRefinement(symbolWidth, symbolHeight,
+            refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx,
+            (rdh >> 1) + rdy, false, refinementAt,
+            decodingContext);
+        }
+        var offsetT = t - ((referenceCorner & 1) ? 0 : symbolHeight);
+        var offsetS = currentS - ((referenceCorner & 2) ? symbolWidth : 0);
+        var s2, t2, symbolRow;
+        if (transposed) {
+          // Place Symbol Bitmap from T1,S1
+          for (s2 = 0; s2 < symbolHeight; s2++) {
+            row = bitmap[offsetS + s2];
+            if (!row) {
+              continue;
+            }
+            symbolRow = symbolBitmap[s2];
+            // To ignore Parts of Symbol bitmap which goes
+            // outside bitmap region
+            var maxWidth = Math.min(width - offsetT, symbolWidth);
+            switch (combinationOperator) {
+              case 0: // OR
+                for (t2 = 0; t2 < maxWidth; t2++) {
+                  row[offsetT + t2] |= symbolRow[t2];
+                }
+                break;
+              case 2: // XOR
+                for (t2 = 0; t2 < maxWidth; t2++) {
+                  row[offsetT + t2] ^= symbolRow[t2];
+                }
+                break;
+              default:
+                error('JBIG2 error: operator ' + combinationOperator +
+                      ' is not supported');
+            }
+          }
+          currentS += symbolHeight - 1;
+        } else {
+          for (t2 = 0; t2 < symbolHeight; t2++) {
+            row = bitmap[offsetT + t2];
+            if (!row) {
+              continue;
+            }
+            symbolRow = symbolBitmap[t2];
+            switch (combinationOperator) {
+              case 0: // OR
+                for (s2 = 0; s2 < symbolWidth; s2++) {
+                  row[offsetS + s2] |= symbolRow[s2];
+                }
+                break;
+              case 2: // XOR
+                for (s2 = 0; s2 < symbolWidth; s2++) {
+                  row[offsetS + s2] ^= symbolRow[s2];
+                }
+                break;
+              default:
+                error('JBIG2 error: operator ' + combinationOperator +
+                      ' is not supported');
+            }
+          }
+          currentS += symbolWidth - 1;
+        }
+        i++;
+        var deltaS = decodeInteger(contextCache, 'IADS', decoder); // 6.4.8
+        if (deltaS === null) {
+          break; // OOB
+        }
+        currentS += deltaS + dsOffset;
+      } while (true);
+    }
+    return bitmap;
+  }
+
+  function readSegmentHeader(data, start) {
+    var segmentHeader = {};
+    segmentHeader.number = readUint32(data, start);
+    var flags = data[start + 4];
+    var segmentType = flags & 0x3F;
+    if (!SegmentTypes[segmentType]) {
+      error('JBIG2 error: invalid segment type: ' + segmentType);
+    }
+    segmentHeader.type = segmentType;
+    segmentHeader.typeName = SegmentTypes[segmentType];
+    segmentHeader.deferredNonRetain = !!(flags & 0x80);
+
+    var pageAssociationFieldSize = !!(flags & 0x40);
+    var referredFlags = data[start + 5];
+    var referredToCount = (referredFlags >> 5) & 7;
+    var retainBits = [referredFlags & 31];
+    var position = start + 6;
+    if (referredFlags === 7) {
+      referredToCount = readUint32(data, position - 1) & 0x1FFFFFFF;
+      position += 3;
+      var bytes = (referredToCount + 7) >> 3;
+      retainBits[0] = data[position++];
+      while (--bytes > 0) {
+        retainBits.push(data[position++]);
+      }
+    } else if (referredFlags === 5 || referredFlags === 6) {
+      error('JBIG2 error: invalid referred-to flags');
+    }
+
+    segmentHeader.retainBits = retainBits;
+    var referredToSegmentNumberSize = (segmentHeader.number <= 256 ? 1 :
+      (segmentHeader.number <= 65536 ? 2 : 4));
+    var referredTo = [];
+    var i, ii;
+    for (i = 0; i < referredToCount; i++) {
+      var number = (referredToSegmentNumberSize === 1 ? data[position] :
+        (referredToSegmentNumberSize === 2 ? readUint16(data, position) :
+        readUint32(data, position)));
+      referredTo.push(number);
+      position += referredToSegmentNumberSize;
+    }
+    segmentHeader.referredTo = referredTo;
+    if (!pageAssociationFieldSize) {
+      segmentHeader.pageAssociation = data[position++];
+    } else {
+      segmentHeader.pageAssociation = readUint32(data, position);
+      position += 4;
+    }
+    segmentHeader.length = readUint32(data, position);
+    position += 4;
+
+    if (segmentHeader.length === 0xFFFFFFFF) {
+      // 7.2.7 Segment data length, unknown segment length
+      if (segmentType === 38) { // ImmediateGenericRegion
+        var genericRegionInfo = readRegionSegmentInformation(data, position);
+        var genericRegionSegmentFlags = data[position +
+          RegionSegmentInformationFieldLength];
+        var genericRegionMmr = !!(genericRegionSegmentFlags & 1);
+        // searching for the segment end
+        var searchPatternLength = 6;
+        var searchPattern = new Uint8Array(searchPatternLength);
+        if (!genericRegionMmr) {
+          searchPattern[0] = 0xFF;
+          searchPattern[1] = 0xAC;
+        }
+        searchPattern[2] = (genericRegionInfo.height >>> 24) & 0xFF;
+        searchPattern[3] = (genericRegionInfo.height >> 16) & 0xFF;
+        searchPattern[4] = (genericRegionInfo.height >> 8) & 0xFF;
+        searchPattern[5] = genericRegionInfo.height & 0xFF;
+        for (i = position, ii = data.length; i < ii; i++) {
+          var j = 0;
+          while (j < searchPatternLength && searchPattern[j] === data[i + j]) {
+            j++;
+          }
+          if (j === searchPatternLength) {
+            segmentHeader.length = i + searchPatternLength;
+            break;
+          }
+        }
+        if (segmentHeader.length === 0xFFFFFFFF) {
+          error('JBIG2 error: segment end was not found');
+        }
+      } else {
+        error('JBIG2 error: invalid unknown segment length');
+      }
+    }
+    segmentHeader.headerEnd = position;
+    return segmentHeader;
+  }
+
+  function readSegments(header, data, start, end) {
+    var segments = [];
+    var position = start;
+    while (position < end) {
+      var segmentHeader = readSegmentHeader(data, position);
+      position = segmentHeader.headerEnd;
+      var segment = {
+        header: segmentHeader,
+        data: data
+      };
+      if (!header.randomAccess) {
+        segment.start = position;
+        position += segmentHeader.length;
+        segment.end = position;
+      }
+      segments.push(segment);
+      if (segmentHeader.type === 51) {
+        break; // end of file is found
+      }
+    }
+    if (header.randomAccess) {
+      for (var i = 0, ii = segments.length; i < ii; i++) {
+        segments[i].start = position;
+        position += segments[i].header.length;
+        segments[i].end = position;
+      }
+    }
+    return segments;
+  }
+
+  // 7.4.1 Region segment information field
+  function readRegionSegmentInformation(data, start) {
+    return {
+      width: readUint32(data, start),
+      height: readUint32(data, start + 4),
+      x: readUint32(data, start + 8),
+      y: readUint32(data, start + 12),
+      combinationOperator: data[start + 16] & 7
+    };
+  }
+  var RegionSegmentInformationFieldLength = 17;
+
+  function processSegment(segment, visitor) {
+    var header = segment.header;
+
+    var data = segment.data, position = segment.start, end = segment.end;
+    var args, at, i, atLength;
+    switch (header.type) {
+      case 0: // SymbolDictionary
+        // 7.4.2 Symbol dictionary segment syntax
+        var dictionary = {};
+        var dictionaryFlags = readUint16(data, position); // 7.4.2.1.1
+        dictionary.huffman = !!(dictionaryFlags & 1);
+        dictionary.refinement = !!(dictionaryFlags & 2);
+        dictionary.huffmanDHSelector = (dictionaryFlags >> 2) & 3;
+        dictionary.huffmanDWSelector = (dictionaryFlags >> 4) & 3;
+        dictionary.bitmapSizeSelector = (dictionaryFlags >> 6) & 1;
+        dictionary.aggregationInstancesSelector = (dictionaryFlags >> 7) & 1;
+        dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256);
+        dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512);
+        dictionary.template = (dictionaryFlags >> 10) & 3;
+        dictionary.refinementTemplate = (dictionaryFlags >> 12) & 1;
+        position += 2;
+        if (!dictionary.huffman) {
+          atLength = dictionary.template === 0 ? 4 : 1;
+          at = [];
+          for (i = 0; i < atLength; i++) {
+            at.push({
+              x: readInt8(data, position),
+              y: readInt8(data, position + 1)
+            });
+            position += 2;
+          }
+          dictionary.at = at;
+        }
+        if (dictionary.refinement && !dictionary.refinementTemplate) {
+          at = [];
+          for (i = 0; i < 2; i++) {
+            at.push({
+              x: readInt8(data, position),
+              y: readInt8(data, position + 1)
+            });
+            position += 2;
+          }
+          dictionary.refinementAt = at;
+        }
+        dictionary.numberOfExportedSymbols = readUint32(data, position);
+        position += 4;
+        dictionary.numberOfNewSymbols = readUint32(data, position);
+        position += 4;
+        args = [dictionary, header.number, header.referredTo,
+                data, position, end];
+        break;
+      case 6: // ImmediateTextRegion
+      case 7: // ImmediateLosslessTextRegion
+        var textRegion = {};
+        textRegion.info = readRegionSegmentInformation(data, position);
+        position += RegionSegmentInformationFieldLength;
+        var textRegionSegmentFlags = readUint16(data, position);
+        position += 2;
+        textRegion.huffman = !!(textRegionSegmentFlags & 1);
+        textRegion.refinement = !!(textRegionSegmentFlags & 2);
+        textRegion.stripSize = 1 << ((textRegionSegmentFlags >> 2) & 3);
+        textRegion.referenceCorner = (textRegionSegmentFlags >> 4) & 3;
+        textRegion.transposed = !!(textRegionSegmentFlags & 64);
+        textRegion.combinationOperator = (textRegionSegmentFlags >> 7) & 3;
+        textRegion.defaultPixelValue = (textRegionSegmentFlags >> 9) & 1;
+        textRegion.dsOffset = (textRegionSegmentFlags << 17) >> 27;
+        textRegion.refinementTemplate = (textRegionSegmentFlags >> 15) & 1;
+        if (textRegion.huffman) {
+          var textRegionHuffmanFlags = readUint16(data, position);
+          position += 2;
+          textRegion.huffmanFS = (textRegionHuffmanFlags) & 3;
+          textRegion.huffmanDS = (textRegionHuffmanFlags >> 2) & 3;
+          textRegion.huffmanDT = (textRegionHuffmanFlags >> 4) & 3;
+          textRegion.huffmanRefinementDW = (textRegionHuffmanFlags >> 6) & 3;
+          textRegion.huffmanRefinementDH = (textRegionHuffmanFlags >> 8) & 3;
+          textRegion.huffmanRefinementDX = (textRegionHuffmanFlags >> 10) & 3;
+          textRegion.huffmanRefinementDY = (textRegionHuffmanFlags >> 12) & 3;
+          textRegion.huffmanRefinementSizeSelector =
+            !!(textRegionHuffmanFlags & 14);
+        }
+        if (textRegion.refinement && !textRegion.refinementTemplate) {
+          at = [];
+          for (i = 0; i < 2; i++) {
+            at.push({
+              x: readInt8(data, position),
+              y: readInt8(data, position + 1)
+            });
+            position += 2;
+          }
+          textRegion.refinementAt = at;
+        }
+        textRegion.numberOfSymbolInstances = readUint32(data, position);
+        position += 4;
+        // TODO 7.4.3.1.7 Symbol ID Huffman table decoding
+        if (textRegion.huffman) {
+          error('JBIG2 error: huffman is not supported');
+        }
+        args = [textRegion, header.referredTo, data, position, end];
+        break;
+      case 38: // ImmediateGenericRegion
+      case 39: // ImmediateLosslessGenericRegion
+        var genericRegion = {};
+        genericRegion.info = readRegionSegmentInformation(data, position);
+        position += RegionSegmentInformationFieldLength;
+        var genericRegionSegmentFlags = data[position++];
+        genericRegion.mmr = !!(genericRegionSegmentFlags & 1);
+        genericRegion.template = (genericRegionSegmentFlags >> 1) & 3;
+        genericRegion.prediction = !!(genericRegionSegmentFlags & 8);
+        if (!genericRegion.mmr) {
+          atLength = genericRegion.template === 0 ? 4 : 1;
+          at = [];
+          for (i = 0; i < atLength; i++) {
+            at.push({
+              x: readInt8(data, position),
+              y: readInt8(data, position + 1)
+            });
+            position += 2;
+          }
+          genericRegion.at = at;
+        }
+        args = [genericRegion, data, position, end];
+        break;
+      case 48: // PageInformation
+        var pageInfo = {
+          width: readUint32(data, position),
+          height: readUint32(data, position + 4),
+          resolutionX: readUint32(data, position + 8),
+          resolutionY: readUint32(data, position + 12)
+        };
+        if (pageInfo.height === 0xFFFFFFFF) {
+          delete pageInfo.height;
+        }
+        var pageSegmentFlags = data[position + 16];
+        var pageStripingInformatiom = readUint16(data, position + 17);
+        pageInfo.lossless = !!(pageSegmentFlags & 1);
+        pageInfo.refinement = !!(pageSegmentFlags & 2);
+        pageInfo.defaultPixelValue = (pageSegmentFlags >> 2) & 1;
+        pageInfo.combinationOperator = (pageSegmentFlags >> 3) & 3;
+        pageInfo.requiresBuffer = !!(pageSegmentFlags & 32);
+        pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64);
+        args = [pageInfo];
+        break;
+      case 49: // EndOfPage
+        break;
+      case 50: // EndOfStripe
+        break;
+      case 51: // EndOfFile
+        break;
+      case 62: // 7.4.15 defines 2 extension types which
+               // are comments and can be ignored.
+        break;
+      default:
+        error('JBIG2 error: segment type ' + header.typeName + '(' +
+              header.type + ') is not implemented');
+    }
+    var callbackName = 'on' + header.typeName;
+    if (callbackName in visitor) {
+      visitor[callbackName].apply(visitor, args);
+    }
+  }
+
+  function processSegments(segments, visitor) {
+    for (var i = 0, ii = segments.length; i < ii; i++) {
+      processSegment(segments[i], visitor);
+    }
+  }
+
+  function parseJbig2(data, start, end) {
+    var position = start;
+    if (data[position] !== 0x97 || data[position + 1] !== 0x4A ||
+        data[position + 2] !== 0x42 || data[position + 3] !== 0x32 ||
+        data[position + 4] !== 0x0D || data[position + 5] !== 0x0A ||
+        data[position + 6] !== 0x1A || data[position + 7] !== 0x0A) {
+      error('JBIG2 error: invalid header');
+    }
+    var header = {};
+    position += 8;
+    var flags = data[position++];
+    header.randomAccess = !(flags & 1);
+    if (!(flags & 2)) {
+      header.numberOfPages = readUint32(data, position);
+      position += 4;
+    }
+    var segments = readSegments(header, data, position, end);
+    error('Not implemented');
+    // processSegments(segments, new SimpleSegmentVisitor());
+  }
+
+  function parseJbig2Chunks(chunks) {
+    var visitor = new SimpleSegmentVisitor();
+    for (var i = 0, ii = chunks.length; i < ii; i++) {
+      var chunk = chunks[i];
+      var segments = readSegments({}, chunk.data, chunk.start, chunk.end);
+      processSegments(segments, visitor);
+    }
+    return visitor.buffer;
+  }
+
+  function SimpleSegmentVisitor() {}
+
+  SimpleSegmentVisitor.prototype = {
+    onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) {
+      this.currentPageInfo = info;
+      var rowSize = (info.width + 7) >> 3;
+      var buffer = new Uint8Array(rowSize * info.height);
+      // The contents of ArrayBuffers are initialized to 0.
+      // Fill the buffer with 0xFF only if info.defaultPixelValue is set
+      if (info.defaultPixelValue) {
+        for (var i = 0, ii = buffer.length; i < ii; i++) {
+          buffer[i] = 0xFF;
+        }
+      }
+      this.buffer = buffer;
+    },
+    drawBitmap: function SimpleSegmentVisitor_drawBitmap(regionInfo, bitmap) {
+      var pageInfo = this.currentPageInfo;
+      var width = regionInfo.width, height = regionInfo.height;
+      var rowSize = (pageInfo.width + 7) >> 3;
+      var combinationOperator = pageInfo.combinationOperatorOverride ?
+        regionInfo.combinationOperator : pageInfo.combinationOperator;
+      var buffer = this.buffer;
+      var mask0 =  128 >> (regionInfo.x & 7);
+      var offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3);
+      var i, j, mask, offset;
+      switch (combinationOperator) {
+        case 0: // OR
+          for (i = 0; i < height; i++) {
+            mask = mask0;
+            offset = offset0;
+            for (j = 0; j < width; j++) {
+              if (bitmap[i][j]) {
+                buffer[offset] |= mask;
+              }
+              mask >>= 1;
+              if (!mask) {
+                mask = 128;
+                offset++;
+              }
+            }
+            offset0 += rowSize;
+          }
+        break;
+        case 2: // XOR
+          for (i = 0; i < height; i++) {
+            mask = mask0;
+            offset = offset0;
+            for (j = 0; j < width; j++) {
+              if (bitmap[i][j]) {
+                buffer[offset] ^= mask;
+              }
+              mask >>= 1;
+              if (!mask) {
+                mask = 128;
+                offset++;
+              }
+            }
+            offset0 += rowSize;
+          }
+          break;
+        default:
+          error('JBIG2 error: operator ' + combinationOperator +
+                ' is not supported');
+      }
+    },
+    onImmediateGenericRegion:
+      function SimpleSegmentVisitor_onImmediateGenericRegion(region, data,
+                                                             start, end) {
+      var regionInfo = region.info;
+      var decodingContext = new DecodingContext(data, start, end);
+      var bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height,
+                                region.template, region.prediction, null,
+                                region.at, decodingContext);
+      this.drawBitmap(regionInfo, bitmap);
+    },
+    onImmediateLosslessGenericRegion:
+      function SimpleSegmentVisitor_onImmediateLosslessGenericRegion() {
+      this.onImmediateGenericRegion.apply(this, arguments);
+    },
+    onSymbolDictionary:
+      function SimpleSegmentVisitor_onSymbolDictionary(dictionary,
+                                                       currentSegment,
+                                                       referredSegments,
+                                                       data, start, end) {
+      var huffmanTables;
+      if (dictionary.huffman) {
+        error('JBIG2 error: huffman is not supported');
+      }
+
+      // Combines exported symbols from all referred segments
+      var symbols = this.symbols;
+      if (!symbols) {
+        this.symbols = symbols = {};
+      }
+
+      var inputSymbols = [];
+      for (var i = 0, ii = referredSegments.length; i < ii; i++) {
+        inputSymbols = inputSymbols.concat(symbols[referredSegments[i]]);
+      }
+
+      var decodingContext = new DecodingContext(data, start, end);
+      symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman,
+        dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols,
+        dictionary.numberOfExportedSymbols, huffmanTables,
+        dictionary.template, dictionary.at,
+        dictionary.refinementTemplate, dictionary.refinementAt,
+        decodingContext);
+    },
+    onImmediateTextRegion:
+      function SimpleSegmentVisitor_onImmediateTextRegion(region,
+                                                          referredSegments,
+                                                          data, start, end) {
+      var regionInfo = region.info;
+      var huffmanTables;
+
+      // Combines exported symbols from all referred segments
+      var symbols = this.symbols;
+      var inputSymbols = [];
+      for (var i = 0, ii = referredSegments.length; i < ii; i++) {
+        inputSymbols = inputSymbols.concat(symbols[referredSegments[i]]);
+      }
+      var symbolCodeLength = log2(inputSymbols.length);
+
+      var decodingContext = new DecodingContext(data, start, end);
+      var bitmap = decodeTextRegion(region.huffman, region.refinement,
+        regionInfo.width, regionInfo.height, region.defaultPixelValue,
+        region.numberOfSymbolInstances, region.stripSize, inputSymbols,
+        symbolCodeLength, region.transposed, region.dsOffset,
+        region.referenceCorner, region.combinationOperator, huffmanTables,
+        region.refinementTemplate, region.refinementAt, decodingContext);
+      this.drawBitmap(regionInfo, bitmap);
+    },
+    onImmediateLosslessTextRegion:
+      function SimpleSegmentVisitor_onImmediateLosslessTextRegion() {
+      this.onImmediateTextRegion.apply(this, arguments);
+    }
+  };
+
+  function Jbig2Image() {}
+
+  Jbig2Image.prototype = {
+    parseChunks: function Jbig2Image_parseChunks(chunks) {
+      return parseJbig2Chunks(chunks);
+    }
+  };
+
+  return Jbig2Image;
+})();
+
+
+var bidi = PDFJS.bidi = (function bidiClosure() {
+  // Character types for symbols from 0000 to 00FF.
+  var baseTypes = [
+    'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'S', 'B', 'S', 'WS',
+    'B', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN',
+    'BN', 'BN', 'B', 'B', 'B', 'S', 'WS', 'ON', 'ON', 'ET', 'ET', 'ET', 'ON',
+    'ON', 'ON', 'ON', 'ON', 'ON', 'CS', 'ON', 'CS', 'ON', 'EN', 'EN', 'EN',
+    'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'EN', 'ON', 'ON', 'ON', 'ON', 'ON',
+    'ON', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L',
+    'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'ON', 'ON',
+    'ON', 'ON', 'ON', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L',
+    'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L',
+    'L', 'ON', 'ON', 'ON', 'ON', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'B', 'BN',
+    'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN',
+    'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN', 'BN',
+    'BN', 'CS', 'ON', 'ET', 'ET', 'ET', 'ET', 'ON', 'ON', 'ON', 'ON', 'L', 'ON',
+    'ON', 'ON', 'ON', 'ON', 'ET', 'ET', 'EN', 'EN', 'ON', 'L', 'ON', 'ON', 'ON',
+    'EN', 'L', 'ON', 'ON', 'ON', 'ON', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L',
+    'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L',
+    'L', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L',
+    'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L',
+    'L', 'L', 'L', 'ON', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L'
+  ];
+
+  // Character types for symbols from 0600 to 06FF
+  var arabicTypes = [
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'CS', 'AL', 'ON', 'ON', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM',
+    'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN', 'AN',
+    'AN', 'ET', 'AN', 'AN', 'AL', 'AL', 'AL', 'NSM', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM',
+    'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'NSM', 'ON', 'NSM',
+    'NSM', 'NSM', 'NSM', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL',
+    'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL', 'AL'
+  ];
+
+  function isOdd(i) {
+    return (i & 1) !== 0;
+  }
+
+  function isEven(i) {
+    return (i & 1) === 0;
+  }
+
+  function findUnequal(arr, start, value) {
+    for (var j = start, jj = arr.length; j < jj; ++j) {
+      if (arr[j] !== value) {
+        return j;
+      }
+    }
+    return j;
+  }
+
+  function setValues(arr, start, end, value) {
+    for (var j = start; j < end; ++j) {
+      arr[j] = value;
+    }
+  }
+
+  function reverseValues(arr, start, end) {
+    for (var i = start, j = end - 1; i < j; ++i, --j) {
+      var temp = arr[i];
+      arr[i] = arr[j];
+      arr[j] = temp;
+    }
+  }
+
+  function createBidiText(str, isLTR, vertical) {
+    return {
+      str: str,
+      dir: (vertical ? 'ttb' : (isLTR ? 'ltr' : 'rtl'))
+    };
+  }
+
+  // These are used in bidi(), which is called frequently. We re-use them on
+  // each call to avoid unnecessary allocations.
+  var chars = [];
+  var types = [];
+
+  function bidi(str, startLevel, vertical) {
+    var isLTR = true;
+    var strLength = str.length;
+    if (strLength === 0 || vertical) {
+      return createBidiText(str, isLTR, vertical);
+    }
+
+    // Get types and fill arrays
+    chars.length = strLength;
+    types.length = strLength;
+    var numBidi = 0;
+
+    var i, ii;
+    for (i = 0; i < strLength; ++i) {
+      chars[i] = str.charAt(i);
+
+      var charCode = str.charCodeAt(i);
+      var charType = 'L';
+      if (charCode <= 0x00ff) {
+        charType = baseTypes[charCode];
+      } else if (0x0590 <= charCode && charCode <= 0x05f4) {
+        charType = 'R';
+      } else if (0x0600 <= charCode && charCode <= 0x06ff) {
+        charType = arabicTypes[charCode & 0xff];
+      } else if (0x0700 <= charCode && charCode <= 0x08AC) {
+        charType = 'AL';
+      }
+      if (charType === 'R' || charType === 'AL' || charType === 'AN') {
+        numBidi++;
+      }
+      types[i] = charType;
+    }
+
+    // Detect the bidi method
+    // - If there are no rtl characters then no bidi needed
+    // - If less than 30% chars are rtl then string is primarily ltr
+    // - If more than 30% chars are rtl then string is primarily rtl
+    if (numBidi === 0) {
+      isLTR = true;
+      return createBidiText(str, isLTR);
+    }
+
+    if (startLevel === -1) {
+      if ((strLength / numBidi) < 0.3) {
+        isLTR = true;
+        startLevel = 0;
+      } else {
+        isLTR = false;
+        startLevel = 1;
+      }
+    }
+
+    var levels = [];
+    for (i = 0; i < strLength; ++i) {
+      levels[i] = startLevel;
+    }
+
+    /*
+     X1-X10: skip most of this, since we are NOT doing the embeddings.
+     */
+    var e = (isOdd(startLevel) ? 'R' : 'L');
+    var sor = e;
+    var eor = sor;
+
+    /*
+     W1. Examine each non-spacing mark (NSM) in the level run, and change the
+     type of the NSM to the type of the previous character. If the NSM is at the
+     start of the level run, it will get the type of sor.
+     */
+    var lastType = sor;
+    for (i = 0; i < strLength; ++i) {
+      if (types[i] === 'NSM') {
+        types[i] = lastType;
+      } else {
+        lastType = types[i];
+      }
+    }
+
+    /*
+     W2. Search backwards from each instance of a European number until the
+     first strong type (R, L, AL, or sor) is found.  If an AL is found, change
+     the type of the European number to Arabic number.
+     */
+    lastType = sor;
+    var t;
+    for (i = 0; i < strLength; ++i) {
+      t = types[i];
+      if (t === 'EN') {
+        types[i] = (lastType === 'AL') ? 'AN' : 'EN';
+      } else if (t === 'R' || t === 'L' || t === 'AL') {
+        lastType = t;
+      }
+    }
+
+    /*
+     W3. Change all ALs to R.
+     */
+    for (i = 0; i < strLength; ++i) {
+      t = types[i];
+      if (t === 'AL') {
+        types[i] = 'R';
+      }
+    }
+
+    /*
+     W4. A single European separator between two European numbers changes to a
+     European number. A single common separator between two numbers of the same
+     type changes to that type:
+     */
+    for (i = 1; i < strLength - 1; ++i) {
+      if (types[i] === 'ES' && types[i - 1] === 'EN' && types[i + 1] === 'EN') {
+        types[i] = 'EN';
+      }
+      if (types[i] === 'CS' &&
+          (types[i - 1] === 'EN' || types[i - 1] === 'AN') &&
+          types[i + 1] === types[i - 1]) {
+        types[i] = types[i - 1];
+      }
+    }
+
+    /*
+     W5. A sequence of European terminators adjacent to European numbers changes
+     to all European numbers:
+     */
+    for (i = 0; i < strLength; ++i) {
+      if (types[i] === 'EN') {
+        // do before
+        var j;
+        for (j = i - 1; j >= 0; --j) {
+          if (types[j] !== 'ET') {
+            break;
+          }
+          types[j] = 'EN';
+        }
+        // do after
+        for (j = i + 1; j < strLength; --j) {
+          if (types[j] !== 'ET') {
+            break;
+          }
+          types[j] = 'EN';
+        }
+      }
+    }
+
+    /*
+     W6. Otherwise, separators and terminators change to Other Neutral:
+     */
+    for (i = 0; i < strLength; ++i) {
+      t = types[i];
+      if (t === 'WS' || t === 'ES' || t === 'ET' || t === 'CS') {
+        types[i] = 'ON';
+      }
+    }
+
+    /*
+     W7. Search backwards from each instance of a European number until the
+     first strong type (R, L, or sor) is found. If an L is found,  then change
+     the type of the European number to L.
+     */
+    lastType = sor;
+    for (i = 0; i < strLength; ++i) {
+      t = types[i];
+      if (t === 'EN') {
+        types[i] = ((lastType === 'L') ? 'L' : 'EN');
+      } else if (t === 'R' || t === 'L') {
+        lastType = t;
+      }
+    }
+
+    /*
+     N1. A sequence of neutrals takes the direction of the surrounding strong
+     text if the text on both sides has the same direction. European and Arabic
+     numbers are treated as though they were R. Start-of-level-run (sor) and
+     end-of-level-run (eor) are used at level run boundaries.
+     */
+    for (i = 0; i < strLength; ++i) {
+      if (types[i] === 'ON') {
+        var end = findUnequal(types, i + 1, 'ON');
+        var before = sor;
+        if (i > 0) {
+          before = types[i - 1];
+        }
+
+        var after = eor;
+        if (end + 1 < strLength) {
+          after = types[end + 1];
+        }
+        if (before !== 'L') {
+          before = 'R';
+        }
+        if (after !== 'L') {
+          after = 'R';
+        }
+        if (before === after) {
+          setValues(types, i, end, before);
+        }
+        i = end - 1; // reset to end (-1 so next iteration is ok)
+      }
+    }
+
+    /*
+     N2. Any remaining neutrals take the embedding direction.
+     */
+    for (i = 0; i < strLength; ++i) {
+      if (types[i] === 'ON') {
+        types[i] = e;
+      }
+    }
+
+    /*
+     I1. For all characters with an even (left-to-right) embedding direction,
+     those of type R go up one level and those of type AN or EN go up two
+     levels.
+     I2. For all characters with an odd (right-to-left) embedding direction,
+     those of type L, EN or AN go up one level.
+     */
+    for (i = 0; i < strLength; ++i) {
+      t = types[i];
+      if (isEven(levels[i])) {
+        if (t === 'R') {
+          levels[i] += 1;
+        } else if (t === 'AN' || t === 'EN') {
+          levels[i] += 2;
+        }
+      } else { // isOdd
+        if (t === 'L' || t === 'AN' || t === 'EN') {
+          levels[i] += 1;
+        }
+      }
+    }
+
+    /*
+     L1. On each line, reset the embedding level of the following characters to
+     the paragraph embedding level:
+
+     segment separators,
+     paragraph separators,
+     any sequence of whitespace characters preceding a segment separator or
+     paragraph separator, and any sequence of white space characters at the end
+     of the line.
+     */
+
+    // don't bother as text is only single line
+
+    /*
+     L2. From the highest level found in the text to the lowest odd level on
+     each line, reverse any contiguous sequence of characters that are at that
+     level or higher.
+     */
+
+    // find highest level & lowest odd level
+    var highestLevel = -1;
+    var lowestOddLevel = 99;
+    var level;
+    for (i = 0, ii = levels.length; i < ii; ++i) {
+      level = levels[i];
+      if (highestLevel < level) {
+        highestLevel = level;
+      }
+      if (lowestOddLevel > level && isOdd(level)) {
+        lowestOddLevel = level;
+      }
+    }
+
+    // now reverse between those limits
+    for (level = highestLevel; level >= lowestOddLevel; --level) {
+      // find segments to reverse
+      var start = -1;
+      for (i = 0, ii = levels.length; i < ii; ++i) {
+        if (levels[i] < level) {
+          if (start >= 0) {
+            reverseValues(chars, start, i);
+            start = -1;
+          }
+        } else if (start < 0) {
+          start = i;
+        }
+      }
+      if (start >= 0) {
+        reverseValues(chars, start, levels.length);
+      }
+    }
+
+    /*
+     L3. Combining marks applied to a right-to-left base character will at this
+     point precede their base character. If the rendering engine expects them to
+     follow the base characters in the final display process, then the ordering
+     of the marks and the base character must be reversed.
+     */
+
+    // don't bother for now
+
+    /*
+     L4. A character that possesses the mirrored property as specified by
+     Section 4.7, Mirrored, must be depicted by a mirrored glyph if the resolved
+     directionality of that character is R.
+     */
+
+    // don't mirror as characters are already mirrored in the pdf
+
+    // Finally, return string
+    var result = '';
+    for (i = 0, ii = chars.length; i < ii; ++i) {
+      var ch = chars[i];
+      if (ch !== '<' && ch !== '>') {
+        result += ch;
+      }
+    }
+    return createBidiText(result, isLTR);
+  }
+
+  return bidi;
+})();
+
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+
+/* Copyright 2014 Opera Software ASA
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ *
+ * Based on https://code.google.com/p/smhasher/wiki/MurmurHash3.
+ * Hashes roughly 100 KB per millisecond on i7 3.4 GHz.
+ */
+/* globals Uint32ArrayView */
+
+'use strict';
+
+var MurmurHash3_64 = (function MurmurHash3_64Closure (seed) {
+  // Workaround for missing math precison in JS.
+  var MASK_HIGH = 0xffff0000;
+  var MASK_LOW = 0xffff;
+
+  function MurmurHash3_64 (seed) {
+    var SEED = 0xc3d2e1f0;
+    this.h1 = seed ? seed & 0xffffffff : SEED;
+    this.h2 = seed ? seed & 0xffffffff : SEED;
+  }
+
+  var alwaysUseUint32ArrayView = false;
+  // old webkits have issues with non-aligned arrays
+  try {
+    new Uint32Array(new Uint8Array(5).buffer, 0, 1);
+  } catch (e) {
+    alwaysUseUint32ArrayView = true;
+  }
+
+  MurmurHash3_64.prototype = {
+    update: function MurmurHash3_64_update(input) {
+      var useUint32ArrayView = alwaysUseUint32ArrayView;
+      var i;
+      if (typeof input === 'string') {
+        var data = new Uint8Array(input.length * 2);
+        var length = 0;
+        for (i = 0; i < input.length; i++) {
+          var code = input.charCodeAt(i);
+          if (code <= 0xff) {
+            data[length++] = code;
+          }
+          else {
+            data[length++] = code >>> 8;
+            data[length++] = code & 0xff;
+          }
+        }
+      } else if (input instanceof Uint8Array) {
+        data = input;
+        length = data.length;
+      } else if (typeof input === 'object' && ('length' in input)) {
+        // processing regular arrays as well, e.g. for IE9
+        data = input;
+        length = data.length;
+        useUint32ArrayView = true;
+      } else {
+        throw new Error('Wrong data format in MurmurHash3_64_update. ' +
+                        'Input must be a string or array.');
+      }
+
+      var blockCounts = length >> 2;
+      var tailLength = length - blockCounts * 4;
+      // we don't care about endianness here
+      var dataUint32 = useUint32ArrayView ?
+        new Uint32ArrayView(data, blockCounts) :
+        new Uint32Array(data.buffer, 0, blockCounts);
+      var k1 = 0;
+      var k2 = 0;
+      var h1 = this.h1;
+      var h2 = this.h2;
+      var C1 = 0xcc9e2d51;
+      var C2 = 0x1b873593;
+      var C1_LOW = C1 & MASK_LOW;
+      var C2_LOW = C2 & MASK_LOW;
+
+      for (i = 0; i < blockCounts; i++) {
+        if (i & 1) {
+          k1 = dataUint32[i];
+          k1 = (k1 * C1 & MASK_HIGH) | (k1 * C1_LOW & MASK_LOW);
+          k1 = k1 << 15 | k1 >>> 17;
+          k1 = (k1 * C2 & MASK_HIGH) | (k1 * C2_LOW & MASK_LOW);
+          h1 ^= k1;
+          h1 = h1 << 13 | h1 >>> 19;
+          h1 = h1 * 5 + 0xe6546b64;
+        } else {
+          k2 = dataUint32[i];
+          k2 = (k2 * C1 & MASK_HIGH) | (k2 * C1_LOW & MASK_LOW);
+          k2 = k2 << 15 | k2 >>> 17;
+          k2 = (k2 * C2 & MASK_HIGH) | (k2 * C2_LOW & MASK_LOW);
+          h2 ^= k2;
+          h2 = h2 << 13 | h2 >>> 19;
+          h2 = h2 * 5 + 0xe6546b64;
+        }
+      }
+
+      k1 = 0;
+
+      switch (tailLength) {
+        case 3:
+          k1 ^= data[blockCounts * 4 + 2] << 16;
+          /* falls through */
+        case 2:
+          k1 ^= data[blockCounts * 4 + 1] << 8;
+          /* falls through */
+        case 1:
+          k1 ^= data[blockCounts * 4];
+          /* falls through */
+        k1 = (k1 * C1 & MASK_HIGH) | (k1 * C1_LOW & MASK_LOW);
+        k1 = k1 << 15 | k1 >>> 17;
+        k1 = (k1 * C2 & MASK_HIGH) | (k1 * C2_LOW & MASK_LOW);
+        if (blockCounts & 1) {
+          h1 ^= k1;
+        } else {
+          h2 ^= k1;
+        }
+      }
+
+      this.h1 = h1;
+      this.h2 = h2;
+      return this;
+    },
+
+    hexdigest: function MurmurHash3_64_hexdigest () {
+      var h1 = this.h1;
+      var h2 = this.h2;
+
+      h1 ^= h2 >>> 1;
+      h1 = (h1 * 0xed558ccd & MASK_HIGH) | (h1 * 0x8ccd & MASK_LOW);
+      h2 = (h2 * 0xff51afd7 & MASK_HIGH) |
+           (((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16);
+      h1 ^= h2 >>> 1;
+      h1 = (h1 * 0x1a85ec53 & MASK_HIGH) | (h1 * 0xec53 & MASK_LOW);
+      h2 = (h2 * 0xc4ceb9fe & MASK_HIGH) |
+           (((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16);
+      h1 ^= h2 >>> 1;
+
+      for (var i = 0, arr = [h1, h2], str = ''; i < arr.length; i++) {
+        var hex = (arr[i] >>> 0).toString(16);
+        while (hex.length < 8) {
+          hex = '0' + hex;
+        }
+        str += hex;
+      }
+
+      return str;
+    }
+  };
+
+  return MurmurHash3_64;
+})();
+
+
+}).call((typeof window === 'undefined') ? this : window);
+
+if (!PDFJS.workerSrc && typeof document !== 'undefined') {
+  // workerSrc is not set -- using last script url to define default location
+  PDFJS.workerSrc = (function () {
+    'use strict';
+    var scriptTagContainer = document.body ||
+                             document.getElementsByTagName('head')[0];
+    var pdfjsSrc = scriptTagContainer.lastChild.src;
+    return pdfjsSrc && pdfjsSrc.replace(/\.js$/i, '.worker.js');
+  })();
+}
+
+
diff --git a/public/assets/plugins/angular-pdf/example/partials/viewer.html b/public/assets/plugins/angular-pdf/example/partials/viewer.html
new file mode 100644
index 0000000..6b738f9
--- /dev/null
+++ b/public/assets/plugins/angular-pdf/example/partials/viewer.html
@@ -0,0 +1,13 @@
+<nav ng-class="getNavStyle(scroll)">
+  <button class="btn btn-circle btn-default" ng-click="goPrevious()"><</span></button>
+  <button class="btn btn-circle btn-default" ng-click="goNext()">></span></button>
+  <button class="btn btn-circle btn-default" ng-click="zoomIn()">+</span></button>
+  <button class="btn btn-circle btn-default" ng-click="zoomOut()">-</span></button>
+  <!-- <button ng-click="rotate()">90</span></button> -->
+  <span>Page: </span>
+  <input type="text" min=1 ng-model="pageNum">
+  <span> / {{pageCount}}</span>
+</nav>
+<hr>
+{{loading}}
+<canvas id="pdf" class="rotate0"></canvas>
diff --git a/public/assets/plugins/angular-pdf/example/pdf/4e99fa5a-1d29-4bf8-a083-48ab91f9a623.pdf b/public/assets/plugins/angular-pdf/example/pdf/4e99fa5a-1d29-4bf8-a083-48ab91f9a623.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..9937eab36f3d8ba217319add507694b24b49331f
GIT binary patch
literal 12350
zcmc(F4OmlWwr)$KZb0eYplB`V&L4^bNe~rit0V-&CSVa!DT){rCH?^#Mr*4KF=%W%
z0i%L?oHO7AN9_-`2m3?EGDJIiJm-2ft>QRmrv9{3BRX}aU@Z#!ylV$L{h528=RWs7
z&y6u8-~RUc)_T{w*0;W7sdJ69;&lmA_z)eh<;zP}hCKUhh$h#vqI5l<h>^SyP5z4&
zrMxEHVzaC+UlB56Mo8(}Wi*j4Ke{0>N4hOUW410^&oAVs(CvIth$g+fYORgeeeYJf
z^wV2u-F2myI=FCN>H6}jbxWZM=~VE1$;#5DHoWIG!Wu1~EQyCYn%s5eOXrr__-Wsb
z<diP6S`6hI`Gs1HO`Se1L95mA)2B**Nuzb;75}@-<!f!wV?Ccl5`jQj)tVAsM+oJ8
z&kDNw$cpUJwJU68{M1KN*4x&VTGoVAhCEuF6d6<i@3j2VH6fB2#`2IkAq45*9fRPK
zAd)>L<q_Ou9gQsHHSig)$uHe#BP8Iebf7$V-}J#*K<po$BB&lI8t~L0m?4_ERV6mb
zzmlL3&1}mWI2-teXl7Yg+e+8Lk(%^$AwPeXWuvilY5B5Ja%tcl+_i>0O)fF>@j6~(
zSZ!IlN?5Psms?h^C)Sj&u3EEpJ+GUl)$*FW@(o~>4sU17ASny1%YYeO3(;hjT33|8
z^|(rmSzW$vZiQuODX$~2-~)rzwm!FXU3&SNit@EY5?zR95cCvj2Fx9VQ2fbbU_oq9
zX#Nsz@{X;-%Bx9duP(V<xWm#a8~)YfA7ni-Z0*qCpU<1TM1SS6yO%elspOA!{;|fs
zd&Ifl)hueLx%Lh-wwup9(x1=HV5jEq9P;ygcb3~eVj?eY74PcrZY{EiM;+t!M?G5w
z)gCpI)cjIG^_6SGyl=fXaFpGwF3eH63v;(-ee~Wy``y>y6pz;WCwcY@sv{GHNn-WD
zZxtgpEhz4v$9~dvVfe-1c`9G#?Y-=giN>)zJcrqttE#WuWM`(;bbZb&_?)R9eKBZQ
zy?k96?>j1RO=Z%8yf2@vUi7qB6!fGotX*Dnzq%*=iHrO|L}tws7lsaN7KRC`o%oB7
z=k=Z=!&*Pr&MX(}f7f^Zd0$n(rn*1gwzVfhuv%5SJZ{0NYOq`5Q_cQrvBh&_=7IsS
z`hh6)<)}S=RfAhl;T6|Iid)2ihK5}|9lmcwU;l)@!o}`FLDlGK*d^qddpbm)&o2%%
zihaeN=TvQNZnL0r`-FH^dvRBnSXj9D#N>Rp&zyBpBTQ=PEACs|&{%BlIZ@ry*4ExP
z+b!e?&;`QW@MKSie+vW^78dukVSP8GoKPKYB>h^td;=X~x4F2l5Sjz#7Qfo}z$`v6
zn_D4P^jlYb<@4hfmD{iJ9BphD2fABYdOFNL=qGN0Ig<n!wb;GT-1AXKPuuZ(jlKTr
z-j=R%-$m6PmD`+uBJU(Feegu*=3i`%Pw+fB<nwvf%`M%c)mpu^r=7G>wVQqBp^e@C
z>h6~Q`ip;l^-r4OZ_H-%nQ4FhWxTYsSy1=95na8wQ7p2)IApUcu>8Q8Sar{Ffro^K
zBMC>AboZRl^e4369$RePSPTOmjIgy!R~v-{_x$KBjgF3<_JNb;-n(Y8NOR{cD9`dB
z0ARK4C`fD>(RJcQW^DCWMb($BTN+25;do6;%fp(`hHYKud_v%&+9ynWZcAgRXl}hf
zt+5w=D89SK_NJs`o4ZKm-g9!u%Kn7W1C1Eh)YXdP8XvyJKRr6jt;d`^vtK>=@QA{`
z?tymS{nW)>Lk2E2K8&`t)kAh6E)HvbYjl5=7}nS|1Rn11%5odSM!E&Hpb^v?`#vAJ
zV`kU54O->99cR|GboXz0b5g#WpY<OtaKSuvN0-<oUW7BqBQ|%pD0YiQt>UV}2mU-7
z%v<a(+9dXM4V<X%Uo`+eVGu5A?-hGndlz>M92W~E8}l2j>Ml_X%<GR03XTn-+e7kX
z;gZx=(JYGQfjw3Xs@(Ig2vx;mZ?Ru3iY*;|KANg}-Iuj&sZcHUe)SDr{neio4vx2h
zL*hWk13@G9$9Eh$?jaGv0#CzO$ZV}{16O@t`QIEA{jR&fis>f?yd-5q&)9i^`SY&`
z7DuBfE*^hXy0Tikc&iLPRHfbhz2nId{}SUC62_>U<DORS;eBsbi{i0m!>2sE?a&U5
z_)JsyriJpOzdG-c>=#t;dyb3Zz(9Dh*tf8UWRONz%*CR3XCtk;I>AeEho^aods~Mn
zUQQT8;}-ih2Zb`84P#VIUQra6yuXC>@3de2?v~;9_Z3@Z3h6O?tL43?B8To=d4BAn
zEX%Ru=55Y8-1Sc$aTh(NGq+ywIAbD|zW>a8O>wh5;Wggw<OLb)FtzN<OK{$F*@Nv^
zT^6kPcD(Xns`8*;#TFbBf|Lhm#+_B%<oBkxu{o-GeOTwvaKXx5ph*e4f)8$I;t!d=
z*yrT;=Ex#s?(CQdra)y6c6iJ9{hwKu*-S<oKKTS(tT%3XVQZ7UjNfa()x9+9Y*btU
z@3n;0>yhc)0(U)C>B0LovdB1BQ;pi=Ee(s@6?`Zn^bhH^j>vjmSfgT#MJ9eHO=NR6
z>4)5Q*-zSKyMmkSmY4K0?-Dl?vo}Y5{Mg={mk3PW?hS_VerR58m5qKU)e(_aqhg^Z
zo}p%o7K-6Ej^jom{R4a$nYr$eHyUbG`@-159PQrhm|)&+De+pg`z?&q>1=cRGH=*r
zyX$<iVBXC|x(gJkj>x!h$gx;MgPZiYMb2>+nb+z#bA7|k3(?$peUd%6>6+|3zdsX5
zC2kLPbPkPRj2XwWV}Ot;&3)eaD)X~5H(f^n)R^oTVAH9>-(Wdw4Haagfi`PDub=9X
zEM$+h?Mtuqum(kEP-eAL|D=zh8v)eBino`zh33fIYcgMEJ8QS9&fKaeg`nLh6D!`e
z2k$vPLN?kG8hT8alpW98typJQaP6zn4%QKo$?x|uG5Z-Z*lNco!fKJrc{9(iNIeE2
z*)e!o$Sf384mM^~lfA-ju@Z!`dVLa`EqAaFF`11CR<R3}uLmCrmRpj%kr9)Zt`5f?
zyn_eE4FEql&SekH<d3Df8F@>a^Cqs;CU{3d)_%dWKeJFj<Q_Ee>1Ahb?a~kNbgJO_
z#CPL%!JU_j%lLiK1u8fA#mFzK_UfPPaYF-GgJta!`3`leDH_@A37|u~<3cp(6f^&9
zo{x$5yc?lBDkRnGL$jN`mQY5%$_$6hc@@lU2DF*{zJ+lUVO0{FqdmZ?U~QogwhL1X
zxH`Wk2$(Q2`_difFK4^#mQZC``>WY<u*f=E?*Ng`+%&e^WzZHLhcTHZj*%;0&q+E@
zE;#b|$Yg`cW||M%XenZe*3KARZvrkNaH40T!)0eOZ@F_+tikJ3HZ$@i?u0jB7~I`<
zw*Gy&C2`+wD3={BXeoepC(}zx_Bl%^(B|!Bg^>{%7k4KEi+BXrk&*N^B6i=?p@PF}
zNs{9waeM6EmEMox-M!f{`LBT0dvh{&Cl~m^pFN6Wdkgilvr&iEYl#2_+47P5ElDP0
z6--nW$s%`x$`0~&*x3~e;oHAO?#&_p$NrLdbm3)wU-}+CZLg{piyvAyN3aXTj9Bo!
z_MLtIJ_dNg0#79Pp-<XbRmMstK#kpR#6%z)te6XVq=%Z6iwNF*4q>RRb$HMCp*bKt
zRPi=k1nT?rJo1DJn#JA7E?Afyo^j#I>wI&QN~z~AWZFZauXbO0X;|(Tt9MLJoMA$O
zbKb18hwIL+h-3I|#vzg;BVu1jckVPzUTg6xn_f$H>KUh}@@y0cW*DP59amAKqeWxp
zRBFEn%e_8EFH?9K`NVbGWz6i9(;S;tyYo|JSngHlecp}_JYt8eh&uXOO1gt}?oLU^
z)2=+`xY6V=W<?pB&qg(SnXD*QUSVf4cHVU*>lr=68*=ZEbq)g~ANd-FoKD3v$|mD!
z88atZR`6vMZeyh^flCf{NBVXdYpCoD8i^ZTh&n^}21j!sIbQ>5yHidl`?auz&k2&n
zGR@qM^aJa*vuTdz|6+LqYv7&tXGJx421U471Cj*q{5senmz{T5V77ymCtp{n!x-1U
zuVi=!tt)3-^>*2WD82;4tR3@v{tW|6Ry3cs&0%alWi;}74?-Ua3h>Bf>M%7xrzgWY
z70)t8qdsWNtf;JU^4-wMz+eaZpV}s<o)x8-!EK+o-i7(F@f<<+HUc~{_lsm`%*ey>
zpX2D2soR;vyp0)zXflM<HNhS)V^|T@d<rUJ!hby11kevuVEk;9F%NelijmbLT--QI
z2-4U@WNgI*7!<xe`AhuamLMM)jYd}9EMts{ROfCWPXJv5h)&EUBd$98B3ul+<1~Dp
z{6$!$kM%NnY(@b<9@H;<J1*gAv@v_H0VmjTI{6w<;KpZ!NeG{0<Sf|X;Kn%^7KTl<
zk=vaY;NBOaxx0=GIhTCZ`8B+k_y#m$<q<Ag`Wkk5B@ji9S12YaVoP$btHZE^+5tUa
z0dAxntW1L!$ejVi)3z#`>`RcKrno>6Xh+wLHx6L>HLgeEO@s>+2TC`9=E2liQ8yfH
zEgTv}0BHam;AuVwlog8Ht2M+Y-~&Hr5qAr-S!dc-X7VK6BN#b2AmAx3(lM(u$bviI
zr_+q<?Eo_5LTF22<pA|nis3AU5I}-E_-#xCK7b|ZSUE7Ulk<ZL<PM+}P)0EW&Xt57
zWDVez^Fts2C<%lb#LIySdx;i?&W74@S)9>)F!iZNWQmirPQTM*@o`+FDH8}U1YhI<
zjTAG7!&IkJiV;%Eufr;MLneb?%2PIY-$up*C9D$pRJvUzmnjHA;$yNtbjN8h18Tuh
zO6Q|tLQfGPDM{{+WDO?0Ob*!`Yv&l3Bb~wzQ^E;`1iCrkljctD=G%lr!1A+Eid522
z&+LE~W<Mii3=GI81pyeM^+HW4EKbWzWyTx3lNG5RXs1wc<F`>z;kwbdNP-3A;j^<9
zw{ov5kSE>+IS?H(Qyv&%=c3?TpY}^K@(p4Opd}9_(w{-1Gp?E-4)G?%DO5O60aWQP
zeDFmWn{H5GK}Bkb0(Qy4-!I{Aqp=bJ$QlsgS8H^roWT3b`0sS#GAoaC5w~WOXCcnG
z<rFMH^jvlN$<>Gh))41%mZ1g&I7m&9dee0<0MrdypV<K<6f-`S2V&h=wHJz0*hd*>
zry44~Oo=WN)Xk7=CCWFSnq>!sgYh7H7Ahi<!^n36mLg176Ng|?B|JgeU{O2~JIIT<
zUq%~w#|@7{@iusgn+?jtPVx-klU&6+^njIdHA^LWOIYQp45B>|pG-4W1$Ko48$dtM
z7%cfca)jilN?HjXIPfxU6L6)miX*|SJkz*%0%dHDHEyOX6-?OQ*KwmjQX?{#iLx1o
zjL6ENKh{Zim<k}8Fpe=@pman|*$Ojh**c;O*$kwxCBdHuY<5N;wCrWXob$KP6n+XR
zsR!GURIs<b%`tTnk=DDsoZzGA!8)X*U3r-|>?B!?+zSyXcDOVcTuUa<1bB5bk}5V1
z<xN7)fgJ?oj4q)VhKXBfzd%;3aDE$}K31})B5mJzh#Dmc#fY>G!TOEl3<5o$m5-zh
zdi8(I4VTh`v=lcU<brr*C*uS{QjlVy(l81$rtTE90ZPf&xKGEN0%~QT6JX(@CC`zE
z^hluyig8kCL!_5kO;K-`#jc1_JcGrd5Y|8GFkPqIjHzP;X(<nQX4G?+$Rww6bJTiQ
zEW@We9i~c-f;~6QF+16*n1Q@aPQ(ZYPd7@c!^=Qg4IOhKl=~D)@(#r_l=eUdWH!aj
zaHJyK_;E~dObw-TT*B&;2MKSZa$yIurAtw-XOa;3(Cr!W#6(a8yI!YuU$jgS8+>|V
zl`|04pulCMEC^xh&PEw1{2Zp$5)CTS90sKa2@e8sJS@Wz4a5Z!kVk}4@XkKmUcUpu
zc?!b_q(w%6#Nrddn|ZRSCJ!YLk`ft0uJbCfr{NQ&6h{6w3_y5F@iCb3qOm@%!O`4!
za097HA1Vu0xl#24099Pw&bv4pT!&>$-LIu=Puh_S<X{rUrR0PB{WFtd27^<E`-*kv
zdFWtZ;1lEuiU&~nX(ZKTAnGvXLIHX5U!u6^aEA$OF>X;XU_Ng^abGCNBJ1@i9kGkZ
zWq(74#HvIgtda~V*vRc%$y4c|!zj2&+KUv=u8~D#;0&V1d8{)rRoR3hhayZ$jJf_8
zVia~0<ze0cCmpaUCX6&v`NOJeM#DwkC0lb;_Rz9sZ?HY{g=m?)1jZ&w2@-HsM(M#B
z1mZPWTuylGSx1ff*nT?X2J>k+;@}*kN2vmDqHLo4A;oru^MO?UfGxRHdcYUlcxBlx
zY%|y$rE{tl>Na#;R_%)p5_Vov#4^rTOi|635vs3J{CF&#L8D?)($0Ff(`hCY=XtB+
z6TJ4(x@G*oT22wLlzmT;f&dr%m3*$}Zt9uD)bLae2ZuDfMcYQFCh4^ALwRSl3t>A!
zASq*kL`D;g`yvdbfJ2eG1A(hLJ^5^f0f%A+-z4BjePxw^W9lk@kj$+wi5-JVqLaG^
zo&@NOv`8Uh<RxZFNn=8qqd-*?L~HRl$az;~@*Ss4#CX6;r5Q!4u?i}qqGAmPL8J-e
z_?pmQ4@!N>{WyU%bKJ)$?SUx@**YE7TMP>k_~>Pw4^N^RAVxEFZQ;Q|IOAw*4@DT1
zfwZFtkCU=16809divWs3G#L3>n9Y_bk@zc#Ar;QA162=+LZYA~jDq_&h$XO#!FMy+
zgRz6mqewl4Dl9{ex5kW9fmDJx%%Vs`1ZK!BjQ&Z4my{$(-MV9TQoHgTwh}32Bbmv$
zPw}ci%F=Uw;5Hli1G@z>*Dq8SO7fLdFp^s!k|G<7Z-&+W;L|eZMJfG&V`rnd@g>r>
zF5$yPBNIrQ4;PJn7ZAx$NgwsxZRFZn4%(l<V{()}Xmo&@P!QXsnhIU=0;OuAFETHX
zVd~xiA_3(UGwH68l>O$y2f(iWveSbdjlz@5%;UIGpg65p+Z<Q{{-Ml@q*swvyF3sQ
z<Phfr1iqv(ROH6fW<+G5s;Lwz@HN5duTYJG3}XUzBprqU6FS?aITlf!jinIEM^L3;
zwq2$Sgn?8iaM4<d1MK0DI8&k`h>42sThLun@o5|xDWjrRn2Acj>3kJih!Z6QB*jjI
zWs)*8Tu8|*ZR4!7F2ZFwM+wa7N3DZ^qbJ~z_EtLzghe;V41~jF91Wc)#<=lN63R0%
z4pM!j14@T)XIuxRET@=3l|2=Iqp=)dz}u%KoTUv;W|C+}An%C+WW-AulLsbHN+-Q%
z7;e)s5kbe)HD?-)8OAKiP-(R~Fgwkmn3;SXQYpf`Ox^WBaf8*ec?WGV&|PL~!3lBj
zC`soM;$qOqQ^dI}X`etT%hxWcVE~K6ge9oTf;$<>OjJeKRS{T3KU&7FycT+DP&T*v
zMgSlvE@LVPAJR?QP2qQ>f7C0W9NvE!m5zKzMcXN(WSfsx(sTDI%M+bs($c8CX%CjR
zTl!<%DCb_J4NJ=Y3V4MoM1<I3?2lwrJWK=y@}7q4XX7nWhMc?l8s2q-PxyEq^)DHA
zo!CyMFMAojp%7r|{*Aye8sSpuFg-ayR*cO$CDr5=X$}}gRfU8l5kwz`QxxowBGn5O
z;WF3T(wVCQyEX2Bd7a#S-~z0rQtOrix9GXQ5DZX{QW_R_bw(hQWKabP$77jMgC{K3
z0PIO+7O8~la$F3YsH8(8)pmOor|AqEu#o#U-HGW`-AzC!q@;Uz=R;siTpHYjL3CGa
zG<POI^4|_RO~#m@KXy&3@=U<b2ws>n1HK)^oQu{4KtYXVfcA1}^8@{ziqs|wS+YM+
zt)6t4=HL?v#Mc}(VX@3B21T3}fKbXL5=*-(?xkQm4Xa$x7sg}dve|%(V4$eSHym_$
zN0lm7*N8sw4N*jEgHp6z5<Q*2MIx5!X?&#~rcj`CxiHQoNemPo=jpo}r}JRyaA<%G
zk9#SW<v1cquE>?Ri&UThuOL$@AsE&pr#O=ifv6EEV+XDwx4k22Najdo8pMJLDBlmy
z!cc(L=Th|&F48&6Ve)Dv-kpugi*Suac)+-<Xznio4gd;#(?OJhpmWK&H9_=U0NCh6
zHH$AQ0SYNqIkA#c9l#-;xJYC`O6;^_%abxTOp#7&;kw62Tqe!{c5*v8brFvQNsA70
zjCKB<A~f(N4}675if8GFAW1-&L-NTaeGm{)C}N|esN=?!QqrP(BuRGVVU#rpYAKwI
z8A#NM8E`HoHPl`BVj%<cCPz`0Rp9%lgU?8(=F@}ZAoeTjoyM07Kw2r0Qw2=ENaoX{
zZcwo+(JC3)jA7fPnopWZ_dj~hK}=#rcuP_p`QEtYQG7vnC>(){$Dns6fr}{5I8QaF
z6uX2lF^JB5R7#Ol!WNH67o}@VCzJ>)Sac&0%M^^<#L95Q`!;D4m2AYu^bQ;m0B5$e
z0xKui5MWZOlJXPwZ+syDK@#_ovuPKm)6fl~Uo3rxLz`pnbsdov3Vw(bPd{W_z;6|`
zO4tH4mA5HOr1<h)re8dAae!blc+`AS39*Q7rGN@nN|ify6^Oj*yt(6Gs?0m`l@*1s
zx>Ob0iKOTl30D~fCUN`3vct?%x%CFXR`weIF1`hmkO;hpaaWzUFOKxgcE0nB-280m
z*T1j)m0poLbKJQP{_~?shx6v&4!nB$YsdOv?tG@pxqQ9G;r#aYUy7opY^yl8LNOy;
zd6XITLB6c`)|I1co7^AFS;<B7&YRkK^BX#+=l9-@7&0m0la@bC{;Y8J9oeWo`(OX-
zojqS|Xsg%1P%vN*6(&FU^G&```I{3(dpfyKPB=bn?^7PS)H<g$$8q?jKg=!f6Gq(0
zy!GDci!o;&PJbz%olvHj(I2|gw`OP8`TVEx^OJ9bK4^HIuehbRj6cq}_Qc?O?MP?0
zt+mXxAHQcUd}rp%ic|~lywz1;w0*v%GbmG$diq}esDF9yv$1XAMMs6A<q<|({hhg8
zTQphscG+4#?9Hk-+PZC~1?8JQY%@K7pU+7=9OCTmZ`(I_;hjHTo*;DpS<L#S|I)sq
zB6ZeRAI@7T9?HLW_N&=@@{TL-ePma@vGJL#4`2Vr|JPp@$v)qF=hB0;KPr#*w9bxW
zPYjLpEe?x|Jo}sRQ7@$ZvA1sCj)R`PG4o%bgYAzV<NwKzj{kp${{BHGTlnk8b}Y&s
zYhLj9p#@J2^?qs|v5{Y~am3l&G0#+JvxAN-3<^6xY}?89$K}k>u>Tr9vT5zlWFeoo
zJvpL2t?PxLjOTAP)!eN)>T$*edEEKCS*w27!||g1NypgkC;RjHz7g|OW2s|A-x7M|
z<UkiQV^mc~Z|+wAB%c*OggeI0>+R_6sx2z-&({d^R6hLZZV(nc5PPq&t9<R^t;5^?
z^&{u<!&ygS+@@u}s}&6Vr#b4hng<I9y3%U;WMLh=p@TR6{G-F{vo)c+^h5XLW&Yv`
zgS6mKchlCstDp7VWVh5;T^Ro4N%7#AaYu&T-EU;ZIknG)WTpx#`iqbD5$eq6s^v8g
zsvm9}cFDeFSF8Ue(Z9+wzG=T1zeE2LKSK+uHZ+>}ip}^5T`lx=eDgs3tnYcBHGTrF
zxCMHR5X$oUH6l7ee$_J2*fG%PpXu{SziyvUwe8PxON}Ru&!a5_eJ66iy2V3{C-^zr
zs`d?hgkSM}z5YUUjug&6vPqbyL8nI#dP<7Xv(ZBRA~y8ykS-90U*W|TG0?2yL$eFU
zNs3>c-$D8%eAL)0qLV>HqXAt)uS!DWm16NqVbNxY70u@2Esb=Gs!`ai&Ogy5ep3{$
zY3W<sIMC4efO=K($fzFo6~rJGZ*A*nHH&X1e7L3Ii0TM6tK4cBi%Vz5h2CD}w^s2R
zHHz2GcQn-e@o;>Lk3_3|i`@lD9l)zdb9>ucJ&XOD#CEjL=-;#Xt&&!Sf~I9jcVACO
zU$^<p<l9w&<?rb+d{mG@x#L2Wd026azuI5bwFJ#EUKmh(c@^Z-)pm4S9P94+ty*m9
zx;M7C)n44^uU=zobE8=Z1ZZ%ZJz1T5CayiveJ1S_aZ@)MP<q~fD{aT)o8vW~GmF}$
zwM(5h=wNXR`tF|hi~EYIJKH+mf*-`Kt6C%-_jufX)$X^(OkUuxKo5(!)%x<wn)^K+
zUsOJJxjo+<tb$95h1jCBm0exMy_Xt0efQqi+-vK&+TG%zJ^^1b`c^hqbac1gw|(@!
zrq9>)SKP)|c&J%qlQ8*o7w-`U-v9c8n&{&L>1#B_-M!X4&(5G}MU#ZQtRwLQ9r$+y
z&VWbEp2lKPEbhBg{h+YxGok_(?{Rl`iI+NhyT$I}UWo?{4M)^nt>T;2N2$Z4&xfT{
zZqJ88LI*lPq<Q{KR>&lonR)d*dX<XB{^~w7VifnhP7A5rZ~4qeMe(R8wTp<CXh={m
zcF$D?+C|!>MwI=7<3*lEG-mXQSExN>P5;zDQ%=?i)iECgztrz(L^D-&&Z>auH{0AN
zY5G_9!bwU;lW%bTyFT-9RfpJjR~#x`vDkaYP-rNIZA;=euKq)kTd3$nr^z2wM~3cM
zC5ru9dCR`frzQ#2-~Q>bUA{kz$RDUxOSTH?kJYWB_|0AF3i%A-B(2=wD-=a>m6ukv
z{0u)=OO`H_?VgH0l+FrieE8_$6v}kvSf_gEXi<DH<fIJxHw+&=^wBK^%SLsM9D{8f
z4|dtpBi=uAEa}zxKfjnbcSP;cMM=hLEc3(1!^hHOKkbsF&Od5w)M*pZHaOS<DRm6e
zD7qAXW?fopT4#CjyKCR?a{YhV;Fyf&N2$G0r=9kL?#5*FDGv5F;?n<VYojjE3j2@V
z#(_EecN*ls&h{QE){H*C%oeg%*`jfrx6QYz7<p6v{zG+3j$I2n-Q>I#otK;D&b{-N
zYeuYv>ss>qg-wjBbv)Wg^6OEVsGfUm#e>jvUzoGI`HNXsoxR(Ns{dxKyq#PrIfWbl
z?WkGzUwcJy^Y4ztK4W#Pml-85o<C}4Ug~k*q)&~HJoK&6GG^9=mmeg*`fKLO^fApc
zQ`X-6GXw9f#JBK@RPU&xX?EWbVUlNTR1zC6V~fJZk77pgHR<nln@c}co1)lB(L-v7
zn~M1Me)XRZEn`o6#*UaYX3rSUxDfW*HSUv=OP}KRQt2T+#y<X221o#rvlFK#edpxw
zwHN=R30C*0UHAJlAGO*3pj}q?sMYrSGr!kZtI4<8R+sV<lS)%kmRqJ;;&sasQ{t0K
zmM6zsw8>NAlaehZDZ1q;mT8GoVyW4<)MB%iuQgh1xXGBBsMSr?PESnIO-oAFCSyWQ
z`Lh4zHS{(wt6GXS+=)_yZjNPzb?GX8T0%;KE<S~y164OBPb;35#FNx`?eutE3SVZk
zRitV(8#Zi6uu^+4{^O>E@^vd>zt<GJab4;15G}7u4$*%1;HOQUI%O)qod0f&f{7md
z+JB5qMcDmlOs7MS@sGx)5RN|@OVa*yUQ*&enFou0a&I!c^#gf2ZAuaX<i}&v;Qt?w
zr6BNsIHpUQ`r~zVx}@p<WGv;!I_q>(e_}7jl75U8#-@F5%(l*AU0u3P>ad?{-Be20
zYlOAS%XuBK3r)^><>hE>4!jqP{K97wmrqGdS*lw;ZCP^C@}<+Jl`LCYS~`9D^wR02
zNu}Dvsfi`ibcvR!%cqr0oxW^2EYeL)(WR8=rdup2B}=DFpTYm%izp(}thZU#*(A#7
QbknD6L)7Yw=VyidHzKKpqW}N^

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/angular-pdf/example/pdf/relativity.pdf b/public/assets/plugins/angular-pdf/example/pdf/relativity.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..481161cc5bd1e6ee79aac7ab86c2404c4ff34a01
GIT binary patch
literal 409413
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%0D@^4{}U>1`FqfykxX#T8P3>;ee_}8!&AN
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/angular-pdf/example/style.css b/public/assets/plugins/angular-pdf/example/style.css
new file mode 100644
index 0000000..6b90ca6
--- /dev/null
+++ b/public/assets/plugins/angular-pdf/example/style.css
@@ -0,0 +1,8 @@
+*{box-sizing: border-box;}
+.wrapper {margin: 0 auto; width: 960px; }
+.pdf-controls { width: 100%; display: block; background: #eee; padding: 1em;}
+.rotate0 {-webkit-transform: rotate(0deg); transform: rotate(0deg); }
+.rotate90 {-webkit-transform: rotate(90deg); transform: rotate(90deg); }
+.rotate180 {-webkit-transform: rotate(180deg); transform: rotate(180deg); }
+.rotate270 {-webkit-transform: rotate(270deg); transform: rotate(270deg); }
+.fixed { position: fixed; top: 0; left: calc(50% - 480px); z-index: 100; width: 100%; padding: 1em; background: rgba(238, 238, 238,.9); width: 960px; }
diff --git a/public/assets/plugins/angular-pdf/ng-pdf.gif b/public/assets/plugins/angular-pdf/ng-pdf.gif
new file mode 100644
index 0000000000000000000000000000000000000000..f72509766e7c5badf5e2ea678714de53cd95b063
GIT binary patch
literal 1458242
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%0AP{ZvB$@$sX#-y2)PCruUP5v>T?M`|0=Ntu3BB
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%0AH}j3WU(kZK*_
z322>1;N$cw_+7%<ksK=8a5N|fZ`{Co2&<J7y8xV157ocO2Pj1m$GNIpWh{Y-LZ2a1
z1w{e{;;(sFjdJf9l2|9OMe9LvRFt~sjI)*O9y)(>jsvY*sEEmngUoxAy#yWV$z3oS
zJ8Fjs%KvvcW>b;J1x|(_+LIiQ*P7=Y7rOtD_FQDdksD$K&Wv_p3?e8e_Nn9%LWI*Y
z@UsHXs>$^iAthd%fD(hB0VxQHbZ=cd#pw}NiX?y-r7B=c>?3b(i?Hr>;!zYF!E6)J
z_z>(SU@%OBFz7%U1;aA#bOydS&{ni$9atqTHueDY7B@_f#|qcQd95fXaJ$e3EXH*K
zFe)M*<(orq5ths2Ux&%;GP_PI-fvZX@rY4My773B+7?R|WyOjdhmHUo6bCM8iZEcm
z*Oc|$K&ohv6|vg!G98^*O2xQ)18*<d!R8iSg4+qg3gtxLjds`P%tPe>mxyUl>%s!)
zj(Q~6uR@rdq`iw(Vgk}4?A-!c<DmE?5BM;cp!u}#-{qK+xtj9K*pIvWkwpRpvyUAs
zn*eCB#wch<uFe!c0lCu)VuE7h#Kw8XLQ~wqu~Mdh*HPFq1u<<#G)OauXxS}Plo`Qz
zj}I|chY>p|k`gC8(4(kt(S@e*nJ#P|Q=9MtFrz?cpT7fmw<iEkHv6{TJ4Yh3D}F%J
zsIau#X=o7H{j+bPdV?|E#fSfTv%pAo5~8qopAl!o36~(Ar}cR*&Xv}3S=~KUzW{tg
zVZ}@J0(<qaT$Ig|dlGDlxZ)@s3}mE57Q{)5H~~03En6hx0_s5|Q`2eGGO&aVOK`U1
zReMtc%Y#vS6{(OQ4<vLj(ePT%Pl&_)9ma*qzX}Rh+>Vu}haib9t_Hw{%ni7RmhZ)Q
z@_;S={ctMTOLEtPvHZ5Y)R$uk!xiGp12|@d`Nf6s(4y2U?4(l5KTbbpaN-_=5k6>H
zuIJ&RCs*^GkIXtJ11?@3YT9CzM!A*Z>1nAoN6Mm{Z_Mn7#RKdh2#p$Hnxz~mFEKEc
z*mZJg$LY2wt*5xqn0^1&{0FqsAXOKy%eCt*^3T1K#!La<Xvz;ET_&c$w8{ldf!E|G
zq%*xFyk-YI``dilf>dEO#srE+2J%K4sx8rz{)XxDF6CxG?#198L-OO7Uale@+hvcu
zD*bB6fm8Iy>3B~=@Azs%rSsjRumvmj!16?+bI6i-w%_Eus*FqT<<OIrV;*n2#U<!t
z3D`1;Sokm#UM*PJhc5Q5ZaRH)L-rglh&^`IUZ&;1b^)vo1wQ7#tHpNr#<2F{w<}E(
z?W+@djC;Yntbup5Wvkd7UusL>U#qu9XSE~Gr@y{3v#a@E7F)lwudmpfcfG)GKQ8zC
zHP92@rF`nx@u{V^_(L*WJIk<4zx9%Xs9yyw3l=v|zJ7U#ZS!p4-bL*_)=`oz55DzS
zA<o;LuT!dikv;e(a+2R3|E`;By=HGXj9Qy%qv9XKfv$Ioo(<3a>&2Fld8g#P%X_O=
zKOROtymKYpZf=v>i$_e62DZSCdFy_Y2Z^o?Wili4j>R_~Wo9;%YwcLr?)P)7;9*0B
z`N)Fnxt~wiB8^pBcPzRW{~WJcH9ov+@1Z;UzJZ)8*TXz^Ecw3jefTdfzQ+<EdYJ7L
zdLvfYn*qtXaBEndjrEsCLN3k8_j%6_!hz)2@E=GRCWQ(8Zh3Op{MRd<$mtjPzX5R;
zn{7;_?xvDq0VWUit6><lh3ePwPF%Q$+0=q~Y-2v2x`|)o9-KTCk3P&pPVI{QG(wGX
zD<CaT*30^{<5Qa7<iMt56oErD@K%+`0l|W!uqqFlS_>%`siI;;ko`^MuW54DnLCGS
z9!f=oL)RaVft-K|fP|1vNvBV^^Myo*Z#5dZwT%@<dr6WVp?!H2L%PLowk8Gsh480?
zka$!!&p@u~<5<7zs{6WW?d_z-VG(kj(D7C+Z6x18*t^>HYVQ+TbjS{=bRVBze?Bt5
zw?nL$@7)Sl#x@iJla9Q&zAONv0Y1WOK1zwE#h?|~QFC&o)jj9_ez|}FabA?OQh98Y
zL`vRy??*o;-mh~v>pY14uoL+C@|Epq%HM&Lirv57{Q8@&Mgrb#9p%45pa>DR%l=zF
ztCu4?tzS`=pDW$|5N?^bo_|aY_rCl@U~M=+o3W$0*6r`-_{bJ}5oUb(x#=r4?01Tc
zEBGe2(_auMg3Dy1=GWB@;zp@_K_gg>4SxS>GnRZFTfp>JJ#3k1_;vzNrF(O}0)+w)
z!~q0(NZ(kjVu9v{Qt;6im1gp;0+0O<RD=_ny>d@6m7d3?%}JX9-cn4^r4gq^GZ5yU
z;*<klD&l<1juNntB*&gWB<Np1ALIzCJd+e9LR9+c_P)5O3Y-=b<-`Sd$=Hth%S|}y
zT5{IikmubE04(S4xjY*vL^F5iB)N0ofjdc}k`5cXARAip$rk9SG!)!|7*i$fze$j|
zusciiiZm)=mzgNyg7ir~oEx!WCxp-iERcXa7wRx|gITU3L}-;xQ5}O`QJ_nVqzp}9
zBN6RMNADd)2M2=g>@;^i7+wHa^3$qGXe;`Ww&b)rCo-iAvLNVeXaa%<(rj3+g%vn`
zu?_C?lCAV~Zz9@(A20LFLyw8FBIte4GT1A-$2J?1;cNWN4^$(f_X4Q-NQ^gI(4Bz^
zprCCSDLW3so(v3ypJ`1$Qbfy~e~z}HscRnrEtn`R?m;;s+6!1mc@fb?V;OO)Vv1yz
zEIBN246tEjekWZRj|_Xz2s?4Wto!?_?|a~Rpvfp8$Q9bv7r2R^hTo0$C0uZ)W%_bh
zKdOQcB<0$w07C5Do3thO=L2R$G#-cYWMypucMEY2;<&)(!b6Ym1DgCi+uM0)?*kzR
zGb!X0r)Rl0WiR-UVvTt@o<y|5?12MwdD|QhpP0>aNtHZaeO$2OxDacPCeh1N+P{ba
z-XftTj-CuP-}|>Y*L8P+&9;jzT-ckI=T2AEl-6|Kef~kd@9mw+KV>}qyo9=T!ZKWK
z-NL{kGGM<OO}0$2;=n4mlWYjbcSfW+oXOjmSU}ymo*r-E!WoAwI0fz$Gq1U{-~vMt
zT;RD>*pqWnkCGjbBbZ*ux?p)~`%LuY?EW$B%bamx;n7eLa^&9$<X7k28iW^^Kz})G
zLx%L}444avx(i;wYQUT;i-Sc(0&Kv5tyzexS%g{&Trb5(-G;9n&2y5I6b1;Q?$+AX
zGS*~BjF@F(xKE9K)k_S%#P>5Lf<|O3G(ptHP*9d~CDAxdBexj;BI)5yP>+H8cpA20
zA^zX3wo@W#R_U3Y_L~jik7wAWkeemr>XkxC5i+RDDz#>4m@-m?nC^{XS1&L##`-`@
zUvSV!@Y`-F5@Y}Q*tGeSbQXV|*gWdYZ*@~9Lk?%5)zMs#2E%l?h6Sq-z=M?~8AnwQ
zd<Lomt{M>$BTcyncK4GXmB!viG6cj0;p^HLDAWM={wT6w<4H_7goJhiQk@9Z?o7C$
z8JC}i$|V^Xag#g=HRlG3Y!1i<lWKD0*&J<2W1u?3r@GQN-+~KYekLJEDXvPXac9Af
z0}@0w%#yG1Z%s0zsSEOIf>Tf<GO+sgqMo8Uw=$TcQ;m|)lozOJYlCOSG|k92kn@{N
zsO?Eh+<E|vE2u3?gRNNm7TNG~t2!GpQ1wZS$gIox3BFIOv8DqY6EJ<TE;|jSX~eqq
z0OA&`*T%QF#gcCFUxGh0Du<7%77@T7X*GAJ*tyyTJ5HS(qB-SOfETx;_fm=|qiFwB
z6wEG|Z(;3+*t)@a{RMzQG3&9c&JsTjw~&cHnsIg_SDcxKOU=X=rrok+Qw;NETUqXG
zw4ETzmy@)=Tf&%_;!S9<^Fu!#fae*PREa6F)psa#bXTC9%wR#kT=vkmBJcK#ZuRi}
zLY5~B<~0H<+tI<bETe5^MZ6*tzv}cC4gR~M?8Gc6uNvlMFIYbYS!vlj{Lucb@Y8(A
zxAnRc1?{5S;MNXH)Lsv2ZyKqtXB49hUSwHNAX!?*=~}e^QP?>FV7FfsXRV89aFQ<7
z-pSNOTkkx*>EdPC_P|5C(E+2aR9&=odx@L#IXo9W?p)+fhb#SZHFVMa+aTYwE&e~6
z{RZLRMSuh^N4*xU_A7@G++ZG*8C2Xb9h~P5kOYY-8~yV5?Mck(%NviPOV4JyGxe8?
zo7_i1dH$_#zg)pHC06_<M{Rh6S_)3CL0zH2-%|U{wmaCPSqtgu8)a^~IM?qOO4IGq
zzrQ<AxPyDF3YT*(bJ#CyS24@2T^N{b^`+%rZ7=alMIAlI-Tx!U!lk~Bl#b)I8P#Qr
zvO6|bw^d_1ZANQ((j~=a`Kr2H@(c81pAP()js-R}B7fK9cg{%hx`;WssM*?zGE}0#
zQM9XTdKA>G-d;nEZJ7R5r{-LLyFjFo)M=D@hoRRzSlq;Kf!|v-{i?l>tfFofbv6I0
zk@Mi*O6B6%$w3NtD_;(@q{xd2<$7_`sz}_&&NYTd?rWB?G}CXo^Njt4I90XX?#x6D
zo8HCX{^4y=oS%KQC3Wgw+Jc|AxYK|)&JXha@(wEKU?@XRWI^ZJruc#Wn!<JiivS`q
zWj!eG&I4GHcUQMV5ywl@49UYN4&p|0G>6j)bz090X5om#1$**k_(<ZQ6|#~H8SeOW
zR@ZrG$YvBEvM-vX!)VsoHwt%U10M;Vf!(l>5wD-!zRr@SI4iM++yS^s%gJH7DRolK
zU-53QN)g88ey(EEv4Z-29jxVrgL^0Yj;(=Fda2Y=2#f2tA<F>14_gZ!FrtPG=#Lz$
zVGIq5``u&ChOQ+-)bDLOqVDo7`g@0A$*G&H46f~P!IMZxdvB4%ATXYdaw-`P(**Ez
zAZ5738Uf${4?XnI`^7aINga$KSn2^(lZKq$pya1pZm;0Y*1hgL!`Ia{GfNW7zZ*KV
z@9g{CF!ps^(6X<H1IF!rCPaSFXR&2Mjc|UrW8^e|zFWK*`<Ri=)gccLr*a=uz3^Lr
z?0!6RC-))oj4QA2DHH-!e%s>|efNp=%{T^(8BS|#oA|8<nFwcXBKCuAnG2FYgOJK&
z|LmiJ=`RLggrDD}bU{kK7t@g`N||)oyXkL9qtqw>Fmk-31M-jMh3guO={;3AlC5;(
zacP|Vl<&R#no&7QR)^vPj%3%;aLuaCNR=3zyveC-ubhqj6T!<s*^9yE^hY-|Ui^L)
zwRh;APnCyJFxQjGU3=Z?PNcSQ9&xna@>}e4qDRJxUmi*wG;UQqZuxj=%>#Jz*qwa-
zuO8YhPQFt2(QlpCV$LHTo}+?4Ab1LTtJ=e{+_izgu4@5m|Mc8mdZsIw+p}o+YHvW%
z=xb4Bl_{l0&I~w$Z?>SR=S;3YKB7ORPlO-oqrb?%bQpU0P5({N=v{GF1jm8iUFrJw
z28l|}J0*DUF}C&aIo<;QxnOGI*0~w%hqRzy4bMM|8FfCCz1h0JAKEOW;<YMPC_LSL
zV|SI|<E<}pi<o2L`}XN7Zzy6vRd3JyE#JG@Cfmwuo?qbV{Pp=8VNC?c5&Re4^02@m
z23Se!Z1w}3T>~~uy{CnCOzZm_FZT`?XBDyDlph^jx?E@QdDcy1?w#|Trpx{B(a%f8
z*vuUx6(dvZ3%CWvKGhJ_vk#}w*uFrYIoP2*)$1}PLZAAPGG#T|*0ntKX}E+udhCb8
z!Y8MZGVM-n*Nn?i4>&UmCcoCRh}5C;gA$1bX!Z?{G~2lo{vUoTE)C1I7x9424<9_X
ze%jZ+_r615`wA~D<5j2a)7{#<iVp=re{%LRQDzMADbF=_5&=5^#yg(Px~4}8FCS3S
zDdJZ<$UQ4?9TqPJDs`u(jNsXNK%CcjbQl(*^L!_xreaC}E<j=#cG$KPZ<4N_e94ZU
z-~56<JUAaS@KXDY1d-@mzc;V0YM1cC)ur@T>zzCtk$=FM|8S(B<t8qNz1W-XpZaH(
z2~9p4fgcMGw@^%XolbMRdojGWmmF~Dfl6W0>guJ}O9%8buPeQIHu*9%W`rMDyeS8q
zkpt#Mn*ZopF4pyJZC{_Z;vvp~Hui=r@{Pygxetwo(=Ji2j5I15*FF{{u3~m<rEGc$
ze!h`^o||g<s@a8D;)g_)SEuAY9)6mua=Fi)RT-dCZ9@1uJP6D2z{Y|ua{Gv`>-STl
zi;i{+%`O}6EPhwt;*X<!aZmzvM#mT#TtfTBCs?eug_SadQ?>D=cu_p9aYDG9+`NA<
zwnfDym#<u9mlh-mnt(U}D66fzQBq@_mf>lXqw4OR?&~g=BaoU-akp^y>bqd0inDf4
z@AGuGGPkyIf9j6GxYs{=*4m$0WbD58;ofI054+Jh<|Di}eHreJ(1g2<wPk9*w+)Do
zjH*?=AGfZ4ZnB2*D(QG(onxbT2<hoZd8so4t}h~=1#T@zVNjS{ckrTym&QQ#orBre
z(=e|}v^$>8KEElAJ6mO<nYaboqDO*01yFJ_69lViQ@1HI9iXOGwo`!1kX?BH!;8Rz
zr%yI2uI^LI)Jkcd!p^<b|6pu))F|6yZ%>TAYLC=%NR!IQ*RN@(u@8D@JDQ$+EbihZ
zStn?6y|s<JgG@=2KIvruKZaIzR)o!F9&75BdjoDG9>fd{r|eYI))q&N9&ngCl;Iwt
z9%#j(LlU?>9TLJb!|ut^YE~8<MR%-pEIgfFKHt^fKl?V}qG#ely#Gl`_r~dq#6DL?
z-*uDb{Q7sEX<s&-*TlZe+WHtJo78S#Q25=c>Qtd*_nG3oM{*@Co#I|Q?O(`ybExsg
zGpg?yuji=%fMp-hl*goO*9p^R;58<_#JP}KjW|2`b0cY6Qhta<Y7&U$QHAyM*CYU8
z5_u33R75dhTlddQ=+vN3Dj;IQECsYph}*K{E9_Ep)EBD`T{M*M-X+yHF$M%qiK+X5
z_Y<1asX9DbW|4aci-~_aF8M|-@(S2%X|qOR3N55GR|Y8|)|jZnwz=tSRJImHJ)%Z^
zUR7_K%HE_2a!x?uQx-=-^f<mJE+m=XL!#PPL|_U$)dQXI6XRwJ>`!v_+3QyVd`f$g
zR1&v~R~swynH#Nm^;aX?zfL30UyFW{vlWFnc&_sbaX)Q(+o`wVM~&L@&QEOvc{$xX
zOADL7W~2aB)7w5>BxW3I+ilY08@N%EY+$*qGpTI4R0lNSQL!Q|B)_g46asPBAbIAx
zim1~WmGobKeW0Ap2dcLVNYofnF?kKZL?(_+fYLSO#{kS-bv^~Hj^%Svn7e`7dUqYE
zx(0)&;Xx6nJ;)QMp-_s5xQ+|q>!A;Y>Y&vqF%0w>4uM~IS?&4x%HDfpg8k?#VrhJ*
zrpETsF>g}hBX46(z;0su&g>>r>)s<yz_71G^Gh3E3$oyY15?%oCO$;(z#=UCUN2mD
zCD(Cpt&*_t&KI0D({>%77E`CZ!`Rcp3A`>hEg{<OXD8mh>w2&$kC8R?RFYh$a{zZt
zpGHsj%2Sb-RQ_(NYeC5vrA2#g6S}pY`3R`2s$Y4WV$F(oc(6p6x%=EtoQW0CV=!TX
zl7en+ok|V>;LFJ$phY)vSjaep4PiwsC~;W8heL&xWhmW(Is~L-8Hhtap9K|Uxv)KD
zGn&i?1ON~#Nr_X%Q4mbehF{2LNwS;^8dh<IS{m-cj9c3jS<D|+RT*d&4<wP8KgfB2
zXa)sVZ6V^~4&Q^HC!&=AYOV>J2}ZCn>+thZ0HSdP^e8BGEGSsw6c^_ocy1$#Dng?n
zr;j#TWSr6^f|Non(gh4yvBHiBwkU!Q=rO3EBQai)#fHt8RFSU*u$0XLc0**WFs3wK
zJpw@iBQd}TF09O>>nY5~0`|l>pn!(b!FGv6u;WGT+3*IZcgoZxK&%`%FX{wh0b1eM
z2MA+EKWuw&RPBqf^A-XC3gh_$jw^IP4m<WbBL#|P)MuN|b4AXL8VhpS*+x975G`-J
z079p+WMf2a39vkw50P79h4--HrLm)Vgh&dG%z$05h+*`Ju{g~ia4XW6X0XN;(IYak
zR&4lt#Cn%tDCeS(NP3(K-w(Bi1Bgb@b363_yblLN`w$U_5CwH`a8QZy<!o*s1wCWY
zFV*WPE?;m6#3KZSjKJ-RJd(U60KI5nma9GI3Yk1+3T4o910uR`Q3z>rGUB=#iR*eS
zEcWWDaWpCN=xW8Hkt~A^N%OgAPo4{|d>T{=1o43gYQl+)ktR{Fj(IyoXDE>Fn!3aK
zrFca=1+r$;qSOhoLY_RN0iYK;MFWaj0a)RAfKWIWl1<=7j2!9`)M3RpT%kjXY-bn=
z;|ZJ6VL2`n9mtK9_`pQ(lUx?^rNx5wJdBi2*EbVRJU)Yok*0S6>-Ka|WDhe5js!72
zlsH9XwW+a238C_y$wY9`2H02;Z&obW%T2Et<pMg~SS+6nn@7f?D~j!;ktYj7lDuF9
zGfpCc4JZ$Akt8(1Yn<J1_bvs$j~FM6Yz!(@Vo_tokWw#&Emj3MtMMUeI=etGFbEh^
zfJ7R27!?-xwWnt6S~w9_)9Dh%kmDp7#013wP<)RzS{C^PnGKL}?zGr!ooh)_j5;Wd
z`BY+<TRQDED(py{mJMNIC^j<|dwCKsxNLwJ*#*#<(7iT#L^6YqPqU7b$|FMhYg|+s
z03%g(XmKVe{J|$)5LJ5h_(>`{2;m<J3IS+o3W$wT07d7s{H0R>tbrdSJbw!iY?&7*
zH`Y?3nW6QuU62pskn9HvN;btnfOr?eIW^iz2BY(Rx`1~(zl|sH3J&+Tf!a4G{0l3n
z6@DB@2C@8$^Y%k_h%>Q+j#1)Ka4t*lWe1XBJpx4pd8Xx^qN6=v3SdSzda`f|C0alg
zq0nMQ$^nc6qTFmp=aiTVPR>U5LRN%0r1=RWhnVOI$71{Qk=~^OK<MXEHENiL^tN@O
zxW6IsI-rw`r=o2*v0aW7NXMxQ<IatXJdHTgxLmX}CssUx>+90wfU)CkR#2n^GK^ZC
zjkH+N^#~pcB!YOLC0@3U*d$D$_A3JM@)RCgm&3$Hu%JY9o}^$4h2cPlL;ZLakG#6D
zG4xoM3JTi1DppXD_-#r0d*9|Wz{%YVSW<{)XtW0;DN*8OxLhNzY`X}L(JB04A{;RC
z&CQGx`#gw_HkGAf1NpHaoqGbJ%i%&t_e<InF&ls`jBRSmkuu6zV|o{s_abadZyvn;
zBo$@B0TmQ|7L)=hf>G9SC`s;$b2L|26^Ut`1&|T#5>Dtu0+3<wahup!2adZahYiSl
z1Tf+Z`)yS`v?#L+u;D>c%r(i19#MhAo3={VvG<jlrCu~L{HvQivVLUt8A^EMJdSYv
z>S1*&Q?G5G;-E<iBtoJHp@@zzhKVRLLQ5k8>U3C%fbu_#6(<9dgfm*w2h4cjYe$`3
zQvX^(X^{Pu>6<GFfEo)_Ks;ZEK@2qtNo<lhz($5VjsdC=th5PWfI5W~Zti*z>(UIF
z5w+xy05=g7V1@k@01&(Zng_^^9+zjqA~X<5b$)R`dOnbBI$4(Ovi59i*hNT|jgTBc
zu{9vc%x*j>YVAM>js{cI!TXJXI2Xid0md|dEd$8{1PMBP-+r?a5UoR2K?1LcHzg_n
zaUUb)Qr@2p$!r10j0G_~!QjO8ZPL6%Q*v17b;wJWAu|f$0eJi{7BT2bFpruu+;hF{
zd9#Rxj>fno=Z>K6Sb?etpMkc=wn<Hm4jP)nx@<7*D`ZIqQ9k6;iIDReAj=FXH$N&*
zvy$@wC3t`tExlO4QJ#U<2VgBbXj=lLz=w9`Al6VNBskw{0pByB0DJ)9_Gz==jZ8Io
z6q4Y$sq^;hOPx?Az^3m(T`vIN00>+H^tpi=L@l4jU~@M3`9Ly`ctM>_A8gw4`E<5y
zVfLrw4Pp$?_JHp$k_MjVCyp=@X*qw9M|(ig5b(2RZJSEiMahGe8Teb@XkzTm*LQ(p
ztaTM=^qd0u;DJ>LqQT}A*t`<4dV1<nLj8InYqGE`*(!-2h0TqO_78y>@O>{xmltjg
z`07(~%|?yHIC)?Jtim~`$OUyt3QcC<ol01mbqMBzz!^xF<`*3ZKET4V>|_<12abXK
zGk2LVe33&i^&%v}hGiMPTclw}xx$QD55NLCwbMk75STm&lXyO+?ndT>!biy<k~=Sw
zjL@QlqIn)c_hF%3pgt$G^U^MjR6L#!s*FOs2G2)Z;R-DWLk1|zIoQS|ZeV~L37`TU
zY}5kfct8>(3qcQ(Xs(Tg6a;EW*22m1e60DKXBzVL`RmYj0a)Q6Xf_IMd~xoqNx-c#
zcwiS~M%#P$5-bI{$`XO_AM~EMOwCV#HJkDIThZ&Mpg8S-_F?dQb7){wM&U`sp9<>J
zU^5zM&P-BfUQyv``vzpp?mXpRaU6-CKT9Rcx0dM@ZL;y$Tz??iTk?dM7Jww71h{}H
z;{4M=Y4QLuHuS|9-dq7GlaX&+h}x~DL4&tgA&V-=bkru94GGd<Z70~2LlHY&PNc!z
z<%l~HA%8#!cT|w<ZF&&<BT`;&8W1z47y}jlXVpSvz-mtzIV2KVD-q*tfG^Cng1@NY
zUSP6JnX&R5U`I`*37;x~_<sfH<yzvP01rH?xna*~H32sG#uKtjQ`KN!|6mMKr@_D?
zP#FM@ra|fi0C)#(mj@8*zA*(drR65oK;_#j3Q!RL=_daNm4>8R0XE<swAsG~65vPR
zRjU$y)>LyU_y45Y$pfZLDUJnTN~zjPfh7iScoZ6%FH$rpP`NxHMnCnrtICvJY03sa
zE`sK&i5@k0`IBlyM!ACz_A?cdBig5)Ef-{grfk6Rr<)R4MxFsYF~NZ>_(?z2ga8V%
z%8~ViEEY10gJj18L?~63lKa6VNQ1d~c^;G?C<wEmyL1f^8Wdo4$aEB#eOYEveCK%A
z`o`pg#%np`tpY%WV~o}3JEeq}U-c>?+}r%EDxtSyjy+bXqcxCD#E5#RY_N}UvPPCX
z)=r0T;&fP#0ab#Hi^&bwXbsEXaiT;}jec5#c49-lf;GcBFukdWt@dOU?C!l|^{bhw
z(D*J{#kN{~PrW^k4|`Am4*(NHa~o@_D0{B5(W^xpZd9sQ@jBS*oTpys*WxBFb#3mB
z0JY_MyZvOTac(W%)>6$)wb53tT_L>nTDw}|xps0{YwoYMBhKx+>|2!FTP#ns=bdZw
zf*R|s+vN_m#9Dw07x&39)%%x>s%pyQ;I>nSMZ3=3HL0(#9cp(ECUrS?6c(=oA?C0s
zG3k!6hB4XpwqK0VSZi{74AH&QSrzKG-_l#F8mZ9o_t(8E?X7Oz_qLVcH*+y49(;_A
z@!+EVPT%EU>eR1qbq+sul)8oUb7NnvaZNG4XldidZq+?T&C>xS?f8wr9o3*;_w**a
z4Ssi%6??vi1NwCHHeH+;4KnIh5-90R{{_=|MiLy4J!SaQ<6vJ)&rmU-F?x81E+98*
z6g1RkDhbbgvHV;LDY7<#tZ;+y_JCRq$<M&{OW^%8&VO`!^cG`cYWqTe_c1<n+f<qw
zeX)eNpaHs1zy&zQ#n_Iv0Cea`#l0SJK%4;`?9JQ^)&_jnu|K@-`dOuG?&4ihfb8x7
z`w86MW(00z;5VJzYD=|szptiZqk2tF#(6x}+o(t%_b-q}UrTqG%}~Rhp{A&zpi(>n
z!WOLnjtqmMg#A==P>(kxG6>kRF(@|X7zgFSLDleW5y<J{IB3X*NDuZHQao-?Ks)pz
z>a)Sl`><+3(h>$jeCyvxkPHJf2B0M~hBz<bryQis1{H}B+PpY(24en!pYA!rRRr~b
z;d*L-5)s<#31<0P9qS8L!rAj$03CMEiLnS}9;-ZkNb&V!<v))b^#B8DSlAmB0ANc8
zNQ+Xqfeqp=t0gVMj&u}e(CDJZ9&6V6<>-mT<ZqAx1C%=pdq`xP(cq2T1`;b-iv^<j
zQC+i#4A?b^mk`4&H00<?W|!6_UN_@fZ{R;D3xE{?IP$uXJhE&eL=HKH7kL6XUhq&P
znEgEmlimXeM~23CV&Ji;*Uw`9Jd?FNrp}K)=%;MMA}TYW)bAisqOE}A)sBgveLZF%
zEcMDK^VdWtk%4z~igs58dN8mA;|Putr~iXyt&#q#KMcp)Ysm(Q1O%3<UQ{is%Q}IW
z%bPF>>Apt4nzk77K*&2^JmNHNG-TVRGDF5GUj)%Z-!4O_W^Q^tzW4RhWxVYI)HDFG
zWE|$Ug*#NkBHHUixy%qoG-yrpMNq#x_b_%<?a6{&G#Geke$IyxYS0hpc$Ej~QY@MB
zRGu5WfwE031%wHQHmL1+=S5cKLy8;(b(ATBv?-#ct!Se<lw=9=zZS}$r664ZP&EUr
zuLD+0iR%1arlZ9={0ExnUXzvI8O6L#qCw1~6uIW}MS;ve4U_5_xKC=Jwb$FOKZvCn
zkl`n(5{rDck`2^$D>EW{azH2rJYfNy^+i5nAf5n4fa4XT;Yzf;?*W@PFkm#TNtz7R
z571+pU>UlGmM;kID#mGK$uq%}Q;;QVE7ct|*L0ssJm4e0|M8}GDOcvxVuqY**VP`T
zsvRB1WgFn@Ga8PZ6F+wuCrW@`k3Ur7oWG`vz~WA&?^~>hSzI4#>w48DCjmTd?qsMm
zUJh>8t#3bdpw;f+y_$3Fm3!JI58V43zVvLV4HdE^JN++26E`SDVozsE@j{jI@|f-N
z_`c<*G0V@dEWhkro_w?X=I=63d1cymWoF;XT+GV+m6gTLl@D)LR{pLu+BEQOKYrc!
z@vmRdbxqt_=f^xQFmvo9f{lel@oRro?TSCLn0)viU+69WGMoSRAXH8Kq`W6+eTBao
z^XV#GLta$o-J4Gp$~a*F1b8rN^dtH_|7Yf>@f)A2+hf4)jX%@xe|X<@#(BN_s=|3S
zn=a$BMdMqGB%v=hulo4kV><t;SQ$4rzKOXfqV^-FO?~>gOi9E3kZ!d)L&x;5n~F7D
z6~1l%yre9CZ*#E5CxtJ!2x`;mF^cE0p}gTBI%?q@YQgUwdgI4M^A^z)pYFxnt#SRT
zcTaj#t|8_v@U18Al-|-sVn^4NuVuf!<?=VBJ?hHT?@)@^BxkpV^Vp`?v8EYD9j{j1
z_<7Tg^t;xRZdeJxMlI%D@Q2bSilkac-M*F*jWzG%-RcrwYTFl`dv_OXRJe1s?c1+!
zVbsgLF-<+noeM{d@vPp8+MfyMB8*PpUDXZoOx4bfhJhQpbB6#F9}_}G2NBl)hVcG`
z@L{?5k6Ef8H(gWdUz`jazUPsFFI!ik|8DEDT{ypvBT+6ops}!yjy{A~YLjrO5CDp%
zrKjSObJKym3l}b?r6`K!6lWA%08)}Jn8HfJkf^W{8z-QvnwQ+1mL#YvS9%lFH_fT2
zs!S=zfrc6n)KvuURc7R74>W75h?Eo*7CgyH0;PNMuT@R3n)AvlCJRKa!X|m@mO7V`
zms1uWfHHa(aym_!N?oBvRsKPV+LZY7BhS5z9J1ZhaH6USk&@Tq(P(+~4*tc`Ey;n|
z43!6Yg9Mam$Ry|JwYdu;X3mp_&v9H-d>qd6FoCVw$CQ^hLJ<}FOk~sq+2YE6dAzQ%
zos>I4uOBqlKD&in`Giq`$`2G84PXF00Qn(9?jRtr&cwvU|408?ys2LHe>_~5T`P|x
zU9YMx7OJ^%^A_iJ{hfdM*Dyc=)Y^HE`>+1B`+fZbga7JZd)P>QH1_0QG~YgXdCaTl
z|3&kioqIzZRLxjwFn)i<l+V&mc^$VYOF3UX@mJhtp$~#s4(*=9x4$DEUms?7Z!r;4
zw88SXZgMh?A=ulKr^_y6ug<F3hm{T<kU;r64bJynu(uY9O6d*v*g@S8+CZ2wdW_p*
zx$g*jRdsyGVe=t*#?BOMsbW&5+4e!tB(?}mP}`K)<?e!$7K$J>bWwclbcLLx#=jlr
z0GM^zD6w6A6z0BqaTCZAzf#(U;kV7IXR+{9I*}lLZJT4lRwwy0k$b9~%E1I>p*Jo=
z2|P!ODAG$)o!&~pG=>nwZF>>mw!>;$sx=8bL=|8xf1P$3WNVz2$ewfgJ+ZW3{DE29
z<&<HyiMXVVxuJAN{*Dt$BcV43j#m|p3peWi&5%0d<fyuEH)f$yRU+QDJi?6>rM5c2
zS6C}u&-V~XEYQTlJ}s&!bqfZ0{0z6CpGS(cT*HcHeSMai*y9s;Rl_Z?tVi`&>E|ip
zt23&lDzdgMsW_mdYFZQO9oS}4V3C~SkNI#Ih#2v)NL1;s4rde1@OD&{(-+IOte=ew
zL1Yrv-d$W|t1Q`3RlBobFbOK)scI@1d6XGy@cIUPCJJ~OFyD0gwZ0=+>NR49$&pqo
z-#IYol+laXR^XfT*`HnDL)ovs$E3T`QvAraAy($vLW);BAG=NbfgJH=O2K5gU@%i$
zM@O@AIQ)54T}zcuW=p}YN)YAbQ$u7Wjg1mFsr#l7(yembP+6Z+?Y7*wu>AqMPg8fE
z**Bl8S6@R0Zq$!^pL3OtcdEV7IC*MGKOneIW4U=IKRDDPILLaX^+VIrN_)Nq{$t12
zr@<fZuFchc?EJmD^zj}bpocs@%Y^W|uv&HeZXxpz{2szqy-)w3A=dB92Go7(Q#}3Q
zQ$I0T@AH8ArI62qq{_O_5A>Qpd>$hA>wOtEc^2|z#NvJ3mxngrKYV$F09C(^+RH58
zh8?wTd>wO9Gv4=v)_%@y+;i8lZxcQNuRlKVJ-z(x89iBl_4(mT|8^R$z6@zzUVX*r
z*Z)2l@$A_5*OBjUe18-5efj%arhvg3FF_`B?cX%t4D*$>cdV@jKW6fFh5nc=2)OxU
zuH^K}kN50kgP-%|mqLFoR8`*mxmee{@^gvPZ}96w!?Vy|%PsG3{#xnyzVhoMS776B
zey_~&-=7AwZvFl|Y`))#^-$(Aa1=_AkAD1g|E)i(lkHcczw?sagx9}LUpoHx$9(0j
zzdt`TBaJ}(=6lY!KjoHi|KM2r?+q<2AHUP_*YCx5sLJS%7|kEHVM8(lT#OYzmXN_l
zX*qT61~_r@&P0s)K$pl_emoJO`EGUU7BAu_kX%af*HxHH0GHX_!ow%;+~m^h6mNX^
zk`Ow3v+@c#d9LlP8tF4r(gH}P%segCn_^C?L&n=aJR27Y%O`a%!T2i5frCseaOyhA
zdnR8(5bP^OZG}&}qk_8EZW<n$Rmo&Mu3Pku?e7A_tb**N&UH1m4yImU3e7wc0k%-(
zKeJL4G2#+~P7h{pXBQW$s;`?ufZ@Rltd@7`XlbU=G52-P^xscZ@IMAmjBXSw*RyAw
zo!|B|doIyb$Y1-?RF%y3fK9dI4l3OV8}9a!F5a<8O$?G7KL4k_V8Erq=+fZu5vwnS
zqZvrsH*w_jH)zL%&7}-Z;Yj#h1|jRik><{$ASvyO-__ltmhImPPiBN&p2*R#d2~&V
z$_%^m^m8VYFXt8$<9y}sq!1b2POF&mM}G^XP%q97Cdv!4MJ`m?Yi)m==KHlwcBE=P
z<~jN2pp%s1-jT{Um0tbpW#u=4K&NPMr(NARq36s|!pUk}p@FJX`x;3HK9TaVG*7|`
zJ!WodIJ$juw4#O}<nE@UxHa1-k2;%3OsnZ}1?bhu>!ay*XTr8rm!(vBD*1bEJ(E$A
zG*Nq<edRC5*Q2cOw!|At|2|)q$j)(w7>U&{(kd&s-#y++U$5`asW2V7<dI9Ifm8t>
zPOe8swZz@3vU|#mr{z{<@Jz6vpMJKw+l~pqNzERVWT%Yy9?S?omT*qbGL4s4PLOL!
z(JVKn+&#>N;Yb&Muc0k29oMdyoj6!MKA0lQW^Ov^X`do=yLUIznL9Y5<1m*}?$nXn
zQp{65+I2=y2-}S*B?kaA-zIlXZimCIm|MlE+0jmvt-_ZJEH{SvY^i$&@UB;bBD}a6
z9p3E(S*l7$ZH~k6;h-;G7|p%3w+<$egn*;Y>oLO2*L!Hq;^QWOVA;9UXyxgyBpz8!
z9f$i-{<yOadO-XsTYpXy>L@6AP;w<86EzUe&EQdXujybv8t@3}uJ&L|REmpX_Z`cF
zVXF8ZUx$zhV25&VohR+NlT%acu5I?Ak_1;8H%v^=m72IC|DxS+FY@kpOf6=32R66c
z#HqsJl3MAYc(0F`TqZRs`XHcc9oPSt*}FlQcEm9<k|06)s(~6#5jcK{aLmy@N^R#Z
zM;azDzB5FHYgh6)XYO)BN>{4V&PRS{?CO)N>isf4q*<Fo{SL2|ZCq*}ADwJ`+VZgR
z=IP5uz?YxTxFV~Np>fawg?8z?tZz7Y{ai>csn}276jfEMujBjHpke%>*-h}q@^KU$
z?p$eV=|}q4j16AS{k@<2WMt)3dwaxEOtXo7$iTrNKl!Q7e`vljzka<1L|eEB-a1a<
zHxKL9(k=4_8)9rDLyc+aO+B=nx*2*c{ocO9_~EC_bBY1G?yvQ$7(UG|{yjr7FG%-z
z`1$C(!-W3vW7J24FYzO{=E@@v+z<Y{Bm3RtVUu<CBLVM3(Usrtoe-yS_451c)_)dg
zSwE+f(y%|3HtnvyVW`u_Xqlp9ZPMs>>-hdHr2Wd_d5VM(I~<mQ7c2Dwo<6%qy&XQ?
zkxy8{Li-2$@~#?v=q?3r-EIAatp&C*Up1@&7)3(ac^BEXD(~Lw&OP%bo60|sJnk6#
zTu9lX0HF1OcjdTJQ1Eah|Gp{r$}vM&Hly>vPREe$r>cSu8?OP`p?l&4ZpRadF@)J;
zh41~uemG0M1$wmhu!<h)!OXSLN0)vse-{2mJh1QQ^W(i?F?rFZr`D1BwR>y(6IL^N
z#5X_N@SpW-_gJ5k)s`ko_Pf4&%UZmC^;s<NU-vf@py!Kh4X=U9|J>hD|8aj)k2A^4
zO^`>KnqETX<fUy&%VEWp<!vs$Tvc6@RCrmr_P_3LnR3m^5;77f8N+%r>kAuEN^#b`
zDT?u3DAzdqw()8?sZ@!Vok>FzZ<~#H?`9H)Km<6a2@2Iy$3;_yG-p>cK}cvN4fwvE
z;VtA2a)>w1@?6%gtzMVUp=!FQlby1;_EZ@GxvGKN*ZO^^tGKlzan!-AOl7=XO1%cC
zZE)zp%=1iOa}cm9#t+Zha>oJ2MsA5Xp}FmZqhNTh_#t2SyoJ7tCO<rPKCVeK>I;fR
zZn3_02~oi^JM+c2AM~pJT@*A`))2D(?!gVKv3&`x!0u_JKX;=kA;xR3@IU>zfGE~3
zspa;&e%3$zx#6YJ1^U5nhAp+{x-KLAxxy=7wvSbL)K)ZpoLPLvIV91j-QKkPtnm2K
zn~@hvfp56+3ak1ZEn(fgS-SflnwfujKf2e|Mfq;qx25NIg5N&8+m6)d_M~rc>+JaP
zW&TO+{(sfye&@d%y6SeX^UtrfFH3J9-MhEG4q!+;CQ3Sx7mHL<@ZyBb=6Uf1N77V+
zq<7#{qU@2XsU*cy^Ha&hB+_(>dVb(^DygDsI!&)>emb4pM|ziG@-*<>1&g_=cbPV;
z^Y5}K814TmV{p=}o>|XvF<Y3)r8#QP=KZhzxeK$G=t<iD9TlsdD+*~^m@8)VX}>Rt
zczX2x<;c0}_gA7;7v5iGVsz%&3DQCHr74;<^JN)ki}Tl5jyenFdEP+_*9(r+EL4=7
zT3o1PC+RF!mFEX7R##QjEY{RDEiTq_`gE4+8lDC%{ZD=FEiOj)1E*Iy_`~f1&Dsz3
z!)6Laz)4Hp<%V(Z;N`~WM{1Xwko((mGcQSZr3Jaat+dWp)ULGsbARLa>HdGazghqP
zxWB!&Te>y6h=KlVp8Wo;hkX7^52?n*`z0nNr=&=vB7M}U=~+3s7eq*#Qw&mpL><#q
zQ9`Cr-t~X?QP=&q9%?MlD#;M$WLFYXR5Ldub8pKeYNX;aAz{%ZFcE@~VX+(Y6A{Hh
zPjD?y9*QIiQH33oW|KPn+M52Sj{3se3JAc7n@~#Y2>5Np1WR#Grvp04Dbgl~Tkgx+
zZ<Eo&Ik9W6TG%7vjeo>R5eCN1jOZLgqVtg?mpYU3hm(DF{MCiY!GDsM(NIEa?jctX
zqC3`#K{;3^nM!fGyuC3fP13`GIUjaW$H9JA`rZ+&m()&V35DL%9<Eu|6pYN%UfuAU
zuiGQP{O|gxhb?%Iy?w3+na<7E%-+0}bLvLT?#0=Mo)YLYeBwah*!7)P9Y=f{7oJh^
z)Z7bJ+{N+K28Sni{ZEw=!8pMUt{p9(-VNlwO8Vp5ip<kBg@C^ltIw~><AdHljL!eK
z<+j}Q&_B`X82db}uvxtH=W9d!jm;a&OObgp{vh+<{D#fze}N#1U9`GnAdiWb7v~98
zDgJw&4kSQUK2r&@M*>Tu<xlzW5^<-rka?Oz49Ws;P9IFv5qa)(c0uLq?x;^Yy`?XF
zk}H$DkfClefXvemHGf;Y`;2E7wptxAkm~=R=E;4xs*k_nbgY_kIWkW{W4yUylX9F^
zv2yP=WS%N^rxc&;M&>E1b9WE>#44^z#k8f6#6GY3S+h9f|2$7t+WG-TIbHubPr(?8
znX|e#TU|N9b@r%VOaC!XOCRoxIwJGbQ$)UiGfI?n-=n>A%dS1I%#K`YN^EQtZ{Z~c
zuQ<gVT{38$O8Z~u>F(11tB2YGqz>+C{xxPT-X5)A^1te#J%=)l#_#`+9{O@*7~7-%
z-+CyfFbe<QddT=-(ue=iL&v^8cKSyTnJ<5Rf{+2e{Ywv>oPb!B-=6OIzv!VIzQB1j
zkNbboLrh)zKY9q5{kI-E-D&wIW)tCm^pMqTQGe%;B}5OMn=k(^#ht7F-|C@{zrWmm
zYw+jm__>GYR-zX6B6{fb$3KW3+W2>Ut@_ZtORF>gqldm9>)bcre|#NjH@SuMpgy{~
z>(6fl{3L+*0pw}ne|ys39C>DmO%Vmp#j~f?Be{Jl%s8oGHpV=q1@*@Nw2=Cqxz#={
z!47~r)ei9N)|$nAZyqm*FNF<cr~>R!z`}$(>zZOWG{r)aK6?loleeh;98IQrPW_5B
z?~%0vk_luk`uh>4ocqq?jWcZNW+#g1OaIe35(h=TpX!$Wyqvfx0txs%Wtz2#B^gG%
zllM!p#MXU^^Z2cRB8~Pc>u|FQbPs;yIQ8BA6qZC%e2cv?&s5PNChs)i;<U+qcHy6L
z3ieFD>9CL?<6YN5=bQ&nWF<hvgc;dBNFzE8w!_#|9YKqCf-?LE3B5T<l1xB<=b+r6
z9z93Ph6x|KwB=wY8J%u)(da0->WFv^M%AfoHnhMQOXP)9I#lG83I;>ZdPLoMSH8yv
z*8-1H&{1u<#rE`8K?5$Fo+D8nNQ~1|<pIi+%AzCO3i&{0o(QGl@`@)cet0J+PwOfg
zd!c1oO@XyM0gnQsVKpO%vP~uGDoY95)wWeQ9e^aTo@7|TH?!<qIa61PK^0S+%CfeZ
zF%Q`OWFgV`xZdG+LP504=YRJo0M!^=5Z4+N$i@h-2{^lVXQNQ`Ds__}VFJV85(lLr
zvQDCI`rZTtHkIcJ(y0FrSMTA~L>jR1zB7~FNJ0ytI6#mN351S10i-BuR8YVc5EZdS
zMMZ3rPy_@CMFngTQNbDz5R`QTf})EW5f$skj&)<(McrNQ?Du{5oO|vc;5mY3GVk*~
z&+q5;*I3xn4Ff}dvf$GaewAVwlv3(swO)hJV~x}zix->~u_{XaYKl|44K0>S<m@=j
zObo1gP=p!PM7G6Y62}zdaQAC-^}5GX{)w3SYXC+@Y1<d#!aX-<%!1fjS;nO%{_+*^
zs7vq)B%J%84b&gE{e;C$_k@MZUz~UZV{A-(iISm5pmI85rNGN$tDIS4m2#7*XRHaM
zI1#)<)R607rw0VKaRX0NMG+7UmA)eo*b7pgl|tXrlNm&ghGch<<8jQq*qA4XSHWpR
zU1pob$%<Ffv$Uzo*F83SZv1%)N?C-D26Xn8(_M{_M=-Yf&D96X^PGX(_bZ5#GKI<t
zvK!*-Gq{1dHd4@vnpPBEczK(|x<~ZZKC(I;E9r$@WVIX4Ou#FE7^jS@_JXsxWJ+)<
zRf5YPCqu4fa2MUWK}K6{P}@Ah$cHdJ%gTg9!7|u+tBS<YHJ@m(fFhNUYLihd8a7fR
z^(q#{2w6OlZ)Xt8OV=yL*5K+=7og%Ecg~wQ4JA3zuyuBtRL{F8+2e^lGmS{cV?%>E
z=%*($cD%VKMhTZsrV?l$S_c7A0J<}%5P9&-VKz<1RrBW?a+z6LBub$s34tACK*^Kt
zLS~9l9pc0?(ruHv$jc3geUBDQFYMm$E6#TlCXzBf$T&w)l{0DCqPVUmzL!Bw6)%F!
z4TR}SLvnkhppv$x2T+OSrRUC|s$iWk(U41hB!PVdM3=AV`J}^b6mnUHS*Vii)c>)!
z?ui{cR&jnA$B{JK@K!hmL#$VE?yg91W)r<Ui~7IM_DnoQ$>5SmQj9(^I|3q#N9qek
z+NK^ceQ|rb&EMJsJV7L9mY8I()B+D25{$e-%=hVvMYQGI16*W`Hks@#?p_udI203@
zN>(gpz<D?<_|NrTsOR82qiTNq{FwdMUJsa>%AY&4&YWn0g^Q<;QuEfWrJ)^^k5{Ya
zueHgiwl5)FehY*d+9IX^riefa_2}JRp^xXQa4}?2kJUAt3doGZa+l2jkf;!_yoml8
zE0r`^zJ{KIU3FOi0qr9huh^s#(zbn`TG(xohUL=g^#uesl9ngNIf6qFKemfpDE?E^
z@wGhC4g1Iws>X&trO!2V@yBYA^Va@<m~Q^`8vky?wXGYVC>>ZGuo-8~ISu`rKL4}@
zA^~t^`ZiHu*zWBMS4AUkCLrFGA|#mbV{@b}(UJuC=DCoQL6N~05TR)Zb0N_8P^INY
z(vtc9TEq`z5qsA_lrq%-5vw&aMzYh5BIydqUx6qt&k*Y8PUXT;0OAp!XeDW#%+E;!
z(-gqm0Fg8cBaI~DgC<mL<zsoSZn1t}{>Mi>WPh+Vd+*`M^&<FiPhwNzT&Q~TY0^g5
zMcF(oa`#_pZh3%dntbG|a_l{@{jZ2yl^LfgiQ@+msc8nqfMmanta`P^!jKn(DJTZg
z<2%Si9qeF$9d(8NMue&)bsURKb|t-jiA19$N(L!&m){&!q#BQ4D~kL<mW6@TI*d%K
zp8qYN;D2@0Ee7C^W^P#+v!rTTvJ^?{owBuehB_E=(MR>iZZumQ>15nIi!?jZHP~Ie
z@$gu<X#J?{z`fNsjk7slOP$1VrS&taMAK;|k}nswG(sF4gj-C<qF|=de~KUq%L^G9
zi5<NMc1CF!XbGc3!@95GO^4mM5I-4qAr#c^<+go^0pfE0{c;Bz=y7{U>O`(Za)pZx
zL;!@UjsbseIiaKG>E?)D;A4_2t&3oP<qTf_MDuU4VTsc;$D$`)j&T<w?id`Sf#<56
z<L_5Z{az(sYJ=a2+7&RpD!<^#?#cX#$#q7}{O`LIOZ})C_}i^C&|MZk7?plMZTZsO
zaC61(vtZ)V-7DQuR3D+OhgRI*oxEo^1KpF;u}9qqZ3vlyC&ZVfuif@%Y!Yd-?6j1I
zTF$5lp&f1s!K*?jN)4U|Qt#Is_+B&KF{Z9&joQC9^J{eT*O&ll%(1xI1B+@8zY3CO
zl`R_tGxKT%?UfBzs>84DDr<>}5lzn!$XH)<-aM}r^;AP|B1;=X_R(t%Hv0!^Bq1(Q
zUhAf8%!u3NtW2)jw@$Pjb}!`h?hUP<y=U$8U6vE?-;XWmi2ZPBAJjOzaAU~r<b!{1
zJa`H%+<tq%XG_S=s_36r4=#DJ|AX`Z{Cz{=U}Q*D<hGzGe`Hj@y*dRG#f3}ve!M+(
zSHQuj!RnFwha7$!I%z(x&OGdUaCo>h>Q%^;5A<;B+VC+y>couNW0z>P3yBPV^icQO
zy6f&?l-h_tiozwr`iKXbIe9UHo}lRCG3vGTzf0?<{-{suo0x48JhL`9Ubro(_K2`b
z)1o~x|HlzU4yJZvrluTSoO5(?PgtWk^YHznD}NkS3XiP`J(iVnY<<qL?Al{F=Z|fE
zaBS<3W4N$E9omqW(om4okQ<uW2ofG|2-x|fK_hIm$mN4u4HY?r4!p7UeB-_cjR$@-
zYK6z^LXX#{1eoFTH&q`$e*XB$2ggtUIIa_(XbwHml5(Og=R|w$iSy@AbUrw7@y7{*
z#?~ErvM1%_<(!k}9$2LRX^qO^brr4#;i-YpQ-dj|?&h2tsy+4K{HaF|PCfZ?$|xND
z|M;knpJM2(tAut(ew;Q5&qQBJ*d#miIp@qs?HOsL&yNR0Vtxh?-ik2YkIY8WCLL|B
zj&VW9dZ^?4)NyT__+d>JbDAdP`dRI55?*Msd)VagvkA3rb_#12&1oLHso8CBv&V&I
zuZPV(Kbyt2XZ^y?O6Qyn+;o;G@`PSE8~*U@_@8Gn+m?v1mZ&)`(VJRg_qI&B&=UW!
zW$Mosxozu=u-1e*t+O_@ChcuaxzIZIVe9;#tqR+=w6M1HIc<wKwPoyWBj%FJAGWRh
z*`~BTw<hdd)|_+eH=WDgdoJg~xy=vHZT+vu)2<F{&zsX;u&KRpZ+r2D(e{#u?K^+A
zYiv6zPWZW{3iJUT)xTLw|1{g>Y5i~pyS1ysoyV7_oIkqhe1oUi-rvrwY2tAVkU$O-
zg|%qOdCDe<ba%%b&-1_bc6|KoZFw0+bimC3-Nl0jxxQo8TI@M-A@PLws2Gj@<YRc}
zO&B1EB{~BSn)v2|%_UBw?Zszd7oD8W6O1}bZpy{Uzc}s&_hu1{E;eigUYbm|Pdm=N
z>zp*F!&mU@_-``}VGBP#gow{p?mFNP5D~^#44KU_bpCkQ@}wK~0cjn-opI*@OC2OM
z5RJ@}ZUzuh&{<Y4`EJ`4dx6JRA}xEdWdGC~VA}VrgaCXLhLupL7QzAw+`L*ljvxWX
z1jG+P)Jtt;Jx>(Y#BN+Q5e~&JjG_gP4VUB>c=mcE)C+jZffYdP<Pe(++zpUK1K*iW
z7-ryK@4^zD{=*T(ORs+sb|q`>71?>77v5|46t=@*PcfnhPrGFW)lY{)lzkxzWW0b&
z)gqSY6_L|Usp3l2+^f6aGi-VPd5q~sFh-0B3=j{8(A{9Q)321jSQIL3UJcxhS$4bv
zs`Bc8J)V686Ok|}TqNE;i9Vr~0W!nbdvA9<QCgl&Bubee_~a#*c&FE^e;WwDzU~oU
zpo8w9OSSL3y+6%4uzQp!=|C>W;Ow)|7@!>7cjIm6jS+bVN~oO;3BOld=&*!G>fv#F
zfJm!Pc;D&R#Pi_7{{){O4O?idf(ff`=E!D_7+4!F{uADD=iRgthCX0c2a}7q$AvcB
zWxLwlD*Wxj9m2?Z=epgew3+Xh{@Q!P>+yikIJ3jOr_ph@rSonFZn+)2|90pvx5FRb
z9{<m6%ziLp++fta!M{G=;(tku^_E;?`b{adp8SvX$-UOoO0Bv5g2X8;XLfad{yB4s
z3wZzX&gVIekZgdisDeHLN`OyFDs5M&h4k*lkwLJ~``7&?35!1HgKv57`Z0$oMna+q
zH%8ECiFn@r&N~-II|{G!tfr(UKR*Aszr%Wc6_pEmhr#xF3mM{}WwM2A{pyna*05$>
z$*I9k+XT{wJD<Am%-Y{|oq6x;q=9sAqU_p#;J1V(`+NI;;hD*+5Ps6-@Tonm4`l)C
z{}|*yo{g^Gf8Q435<t{n*QLhq>**i2kh0>8Ti6}R3TqpD?x_{l)>;_W7Wi;`c3t2J
zFT-VCH#a+OP%W~i5+0cBhig+Wx+)P_J2KR1ZF~6fw-tBw?>e?Lc{_C?H|Ig~q91SE
z4~Qb}m$N*k7(PMnq>6i|?m|{SdT{Q-)973G*M7RyL`u-#G1zOMye$HcPAJUOYsG#1
zyvL%p@5#9>qdgL^*=l@>2lpoAV6B?>d|4BaN2k<zpS9(IoJN9KHuJ*slV&LTi~amf
z*;7U0UxzK0f+jF98)=EU@2x}p<y!*ui@95gJ|Sc)hne9s-qrHI-+BS{&ZH7x&7<<i
zhLe9+uL~sHS9gKC*Z|ANWR~6!I0_-yJwkT<!DW`2zQjdtpZg3znz4^{JOU|<D$3^U
z%J}>@a1fU=<cL2P{F47-LH;yUH=OqE5$?8UWhc*DOo$$VSO@A415rS~E%aXpOv<&p
z)^L+BW}NSxI+Mc{fkmnLbNO;;?YM*$J=4svMtbU0VhrOU-dG=y@U3c^R5AK=-_(Rm
z?^5TNb5P^vo?)<XEF7R!VK-olyNRLwP$>89zR5%lbK$$w5X_zRaObOey*=L?FE2X)
z+)RCD0G|E$r9ZddX8qmA7s2(Qm+q@AFYkfo<u8RkC1h4lBbujFFlBh_hcK|zZjbz*
zVAx*MbMShJyH=jYO8I#@W#30AXlwIC4)UcMnYS56Oj&jY$VUfqU&F5GACBU85<{<}
zrpLhuyO>}PJw&v#2*q8P5wb-W2{b)Z=Ry)CB2XY(|Aq*wRJK0|Q39fZ&DS9O1Bj5Q
zc+0o=8(_`1Zvje#Z~BHRpvHnA>{npPP0C$~NC<#zm=b2_h+iHOph3jgSAq<^=_X{W
zLEOuNW-fq(jF5zQy_175O)m^?cp4xp<#m59@?R4f9Tu{FO=%-oQc#F?i-!{Smfxit
zU>_q8D}NGlY`$(`cICVkzTdozT{c{z`-lW6MjVVEp+j&O==YWbkr>z-AZx{|F9O6?
zj>qkT5G^$OU>{iyvi1Wi3RRtfgLJT%`)hV20dychTp$q8oNdFb#&{#%Vr#L#t(7Fy
zk?#^}3Bh#K(%PA4AMUb;?qVC_;}*&v<0fzpv<VH`E(x@=4`kT-)2rQrB#1kmZAQO*
zg&$ff_Ou+eBZnb&p`Nx3LS}6xwh8lgv^Vdin+dFVVf;XIzH^9On6G2FrM<7v5)qg=
zdk@i>YY1IkZZF#s@raF89YTtiSm)XAjcuyy-68PLeDvQ9NEsSA)dFvP3el-Pw0P~a
zTngRQNz|ZByIf4Rjm@hzI3d1k2IjNcx!Nar5G;z<N}e54o1yZPN>g`lG0WcSZ;MZi
z-U6;`aDDc-r%<7-c#=pdcHTag4F`VBGEM8Da9qTnU=5bLgYUmGz1jqmnOv`MP4j9D
zFCg@E@n{VOB}I7ny(r}N52;}$$*y5_cm8%8D-QneeMc&T_kJ!(qi~EIeGWEDT9xH!
z^!8uijJZSd=SzxtW@Fp4pE}BRip=>eAW6NH_o{jZOKx;TSY}?zo>*>LWqL%GL^WHP
z+f%?Kgb3n4(e95HmNT;2bpesIdcIbCi3ulY5$c1Ja*W~Kf<=<4I`JiHw}Kx@{w3ci
z<J_kKjOI9(8_DqT;&xMJuhVvIV3%kk(l~m37u|j=SH%=n>GY6Wl(JM(oi4`UNlSGq
zwpEK##uj+#)wEH!piArXUwpew_r|&EBJs%q71cA_q^COd6Novt1Ua_(Uj<)Jamz*@
zGVK}+Dke)Z8+N1?zWBcj5U1&soka}gs4|knHW(uitM}psG`oI$2ISPEzh3r>MGK;S
zHP_f3=QgOf9ZP+o?WW%yGQt#225?!#f3H!KyrdY+KK)purp-%J0-DE&hl~QWeEYcS
z1jRDgNouO3@(o8~Nxp6b#*v@XiZG}RVwho8c=Z8W@QB!!26>?{z2N~4Z}4eBWo(Be
z9ahvy!c#Z`9Ek)xJDU6;oPN8D`an?_huH2D<MH<$ts%;o5fWmido>7B1{TLW+T=N?
zS95-6b0a&XTHU2)x`7MRLj@bV;^bp7ILJ9$^ZVA(ktGlX%0rFRiSKY3Ozekp`z^!U
zF|xy>QMug$*OMAO*>X@9**CDxgj06b(w@QY)g8YT@nV;$IK4%F5Jl7|mywP*DA{9O
zEesfBlTAzx?Mh0!!Axf56pC-ZT+bT+8aLgw61U(apArwaRY+2_GQ{!R2$qkVQB58t
z=^{uD%ZcfftwMj5<)3E=4js=s{=W^DX{%;w)lB~cor)ys!6RV*ECY@>H@t_3r7UnM
zq*~$Boob~q9VPKLW1&>*PShKi#iCa!gz_9>@s+xuu~P25OH{|>rc<jV@nY>dpP4Fh
zG=Qn?7}BX_Wx_=0gmTSaI?FIFHJ8_;pJA@UXi17(M*k>|_;MXIKL%9sAx21y%cz)c
zkKly@Jj>ip4n`qMsSh-~cRIOEg4@;Wq4UGnS2?t)?FLsOSvJuSMW^BvJ`=U|-IAwp
zApx-kr)NM+eo_s5(ug1e8TF!C#Wth?H)32T)~XNUXik_`2F>LnbwmyoG*m!la8+C_
zM@=mCmi9MPSeyh~t%t!mPRMz7gCgB?*c>ZJgM?YnRrH1~rdR`65F!t9yLq}3S`BF3
zGI}h;`ZJKl>cpbHyU9qC3@Qe|#swM@Mi~l~b+jTlK=J#u6h$i!e-1zFdWs~O4#3sd
zU>`S(Io1T#X&c~C$E+?et10f7g^}cnL-hEk@bWd-cI$S)d@yoh{rNBZO?IhZeLdj0
zDPq__MN^vN%fl5AXnhSYuY)b$FZ2cNJqVv-*mi#MDrVnhZ+ld2KfMKFj6Ah!!)z!O
zq!nfv_&5ZGx#`b=dp4LzJjJ&};|Tv37hebEZ)A(-yB}oYv5|)X-_3aNuW)_%PYb}U
zPB_5WBA|=jjO7yT#jwY>;J5DH3t5w)FOPUMCndbp-3T^2Zl^^l@q)3Mx-chVX>XW$
ziUw8;M7Sp}F{l}*zMcB>q#I_Y8z5J=K<<TZ%D>O!R;d_C`b|FTH;+4)jpE~+q0w7V
z6!-p_qgn~RKQsA{H+atCO9Bq<BzPOQ=TYb6Bk(#s6l=schicb3RAVemTzyb+>5O}<
z3<+1N=-hXtDxN;+SkBGOwJpv0y-zdT!;&`~dEJ)ta(RX&I)e<rDcEJ%+HdgS)#yO&
z46<tK{^NVH|I<;Eucib!-QH1MNOsjiXT!5fKF`m)Xp?+mtIFc;&-o;BkN;)w-%jj-
zsBd?_+aJ5h^3j5l_vf5kXr?8$oxH{F*`h1D$t-2=f}Nry{g{>dH>8tycgWkj9pC(s
zb15gSI731Hc?)9(ibHnLu!E2sTYBebYB5?ZH=BA!vpqh2!sB&$-x58~j@}JhP?2yi
z@}<2}x%cF(nj5n_=wCEjsheke_;y_F*!V;;_3!5;L-&4tHSffvUGX-hS=CN17nM7G
z550WUxv_uYPXBGIJcq(&ZtS<<eBJf*(PIAO@25R3|8a26B<uZa%AHdjq?=-zU-(Q;
zxwiG<nLTqljZOqB@59_bkmA%-uT32TaUXSihr<^9WA)?Kv45MlNT&R5mHXp=8!Xq~
z&HwqMv+64Lv1&(ogmscHY4QBl<(ro8&{g+X7OiQT@bg{foSzSdZnU+X`{lv~HA-gv
z?H<T60LlRqw6k=%M2HTOG<)r+Np3BITL3DlRke3`Pf0uu(qm>FGShoZzM49E8&q9*
zL>X;F#Jcd6VShj6mbLe|9(V=9pTU6|@XSx4vJ^ebk|fD!i*cyd3-$9bmM~)vcP<Ym
zWC(>=pP5p&MyH4EiNz*EVZTtbIgO*i4ME(?!a+aD_ws1E-;FqjlL|YFvh#z-rhYrV
z*48}ol9ik4DK3n{=6j6*>SR3>P>%0($(H#p>4b&*T2>?VPspcl;cK6{M@f=W76j|y
zI@!@A6pdvPefTZLCBR<?Rf{h&PlWyZNmJJOVvDti?&#x4M(JDa^eV3WtI|731z&p&
zGu$!c(q0A@ZNP2XjgaL?y~ILX#ZI3j5fmp=ljIOIs?(Cz#{o)~$#zyMW{z-)$-fwM
z_b>TuD7*Oe*o2KI%W&j(Ne}zk2Kdz=y2m;Ra-4g~+&cYl_{DF;D@I1>Pt&n2A$wJv
zG!y)7M+0DNvdo`F42@qX7KAB;uZbvCf$Z1Y`G5#Zlk?y`oHK%RhnH>U0T&JAVw_-u
z{TFx!5OXXZ@KDN_N{FYlZ*KAC5SnHb-NOal)8T<SNE$K5O`aQ|v+zt}IT3#_7Cz!+
zM<@<ml&S#Y0Ir0O{12D!-<gPsr;-cuX9VYSXD{v~VsRa_jk3bNDgWEV{|Rh^3%<85
z364rlJesjUkd9i7+Ie6rHgzo+H*5Kl^^4Q9w`W&x&xzf*X=wY_k?pu!dX80LUQ%H}
zc41+4VR3t5$xz|WkwT52s3N$iDye99c2RY8QEhwCzM-N6BSl(4ab0lnA1%|5W*0Y9
z7az|qt{*BsJ;K}kH2+NSjut`Dc{s#@D_onjqjP9S=@9S~kE5@qHxKW)oL!PrNN*Jp
zKM!1#Skfmb9SF|1{RR_rR5PsPc6;fg;DUvNuzpYJhP$ONl6Ky{0wY`yAdhqa)<+ia
zGzrRP{bl2;boCWO0UAi@R`&N$8UNUf^4{4FI3YbQqioc0VwQ+_V6;HP`L4M*ixVO)
zH~$W=NFUwKttl54&4&~MD^t0bMqnFKAxcgMI^dwkT{<ef8p9l#K>#t~Gv=n;stDXz
zxor)w(!$<4pNWN)m`&Bn#m=YK=B!hfN7PgWU$uT$4GS?=owjO5P1V~Z*j=tL1n)}e
zD5tdTn!mB~!pN?)klpFYyBBZVol&zpvt#%2`@2_u->tOSvnFIuR`Q<p8~0?_>`C0S
zYewImobQEwvzC0@B{x6Hqc2)OH=k7)vTS_8k}C>j?rueFQTq6?tMIl(YYVHr3Tl=M
zR*Wr3olE2YGnj9gx~x2~_SV?ysy8*k>5Kmu$~SK>8-IDJa#rp4b<2PDYQFEzTvb4y
zKT_LTG`jqs#6{=QYkCVJr_)7OZOSG`i`_Kit_C7ex90cVt^L{sd67i?!`0L8E*7O0
zZ(O|KYASRAvq7wYxz;MTk8fkD-M7b|E?UN3d|>aJ{U<4l8>4I1U$*X?nEA@);N`pf
z0|%5xtd=d#K6uv#5J&xixD{-x9oVzI_D8k7smsUw3DQ29XACW79$ny~EN{zKFtxs`
ztCu)iEae?vvc4_d;uCOFK)q0k#DqO5Vyny#F3DiUjLf}D=SmFl4JEX+YTTnYD_!*o
zPvg=!T;8`MQ!B5QR;hyc&Z~y~BM5f?KM`Z{J5*+3<esLKPTYKGGtDztF9T=V_F{9h
zMyqS2fKL*AYnyLxfL<=DfekVDu_flQ@PO0Ku7Fhg3dl0^sIqYU{m2#c!$-`N#1GHX
zKVK=)_@BDHYWAO?xC%QbV!Wg*0;Uy1res#S!XaQL=Epg7eBY3X#t<X+@bQ2;{~H+%
zr|tu948Eah$V^GA)4{0lxOu~ZhN9ZbiiFEp$>!C0s0sceQAO1r$z5DS|JFF6Nwb1-
z)Iq!k)rg4;O7q*bnGb5mO`kuV4n#`x>Xi8+F=VYpJhZ0~18557n0={AE@ty<iT}CK
z`GJi481vsgYc|)cMGt#x!2ttw4-?xdiH)|7Sf1K}!xAGcOgoCW$U|HVDBH;VKGxqG
zhxluuq$ZsQrv4rZ1>6TVddOR09fTiY7;QgXwHCzS91Ss-jc^DiB0!j|cYa?5KlX>R
z%h{R=Zh)?#d^$3SWlF@6i7)FUdRT-y*(hR1W$+jah@2Z8vMKL6>J+L8LroC~5o{E1
z<!MOXxUERJ*}6K`RdHg<AT(4Bc`5CQ`C336Tt=MpAHou`+FlPOJ~ZEH4u|*At#CN^
z9V|QsG4)W;U(UI5WM^3WWjPXVfDJ8ls(ig0w!{IIJeUqPM8X$UIrq-`IRKWc27X&_
zHEeEvtqb<djYRaPZGwm;?C5z1>CA%E_Ls!X`w+CNC*DqThSa`OII{1B2AX!les#S=
zoE+-!fnV^Uc2CCBJQ~`5J}(TGYRr-3QzPe*tf$sP7r^>%c!F9Oc*sl$n!3%AfrO?%
z%VFw6F!Z_p@kr>kN@V;)I8Y4Usv~XWq4&<lc<SIxYdBCbmXE?#aqFXdn&OuRi1Fw^
z1Jr_fpEpeQ0JG>so~Z?5F7d1x>q=&Yi8)&i!|<oGsZn+(G5`8o*>hEJ#M5y@xaW3F
z07DL@=ECM~?P8P%i{P6Y%VU+3(K)maBar(s{?4D!dksYDu@;%)n#|$oE3^-iO^<Zi
z)Tg6x{B+>^$zhBRiuhz*@dC0p#+a4E5fy9yRKxBjSfe;+i?(>{p%5d;GqS4Q**{l6
zkxeddpRWzmLRMVV*))+1kgO)KvKaPV?KN*LoR%OitG73oLyJhrtrq#jRLEL~XlGWQ
ztOH?qC*NebF`ZTG2vH^QGAXe6i)mR8dG*5~S|YlE#$>XdJtMvsz>`l2hGt~^^Zx69
zL9G@35-ySdaK;!_Hm<0ryiF7<xmXhys<reSh-umm4J>B~wb{R##zeSUjBD|?)d6QY
zY<9?JGF5-OeZC}!c)0=EPo7`RVKYNz06=a?XAQe<{&lsl@5@pC!{v5-je(~GfqK{u
z3;*B@E!lvS9+Um@6h88|x$C{j&oxv14<WXii$U^f0zVKY&V8YSnp%-*SD4lWRaG24
z*}rM|Bj2lMq5E%ahm;7-iN33H>Y|^Jx)PSkg#`QAP6zDuHg#x!O+xmhb~Mm5*W5Us
zacu+F(|p;W&W1cG`o&s%oVM{d<|H<^IL5(Fc~go)fz6_kbMW}ST&Ov`TI}q&p<ArC
z7V6#XxQ%@6dX7G2<UDN8cdB`o*S9eCHxY~pgST$Z@to&Qq|$TJSOrh*B;O|nps@Qy
z(UC8n<+Ttu9{w>1uc!)e+6&Az2yqU%mNW_uizQJD6Wh7S?7e3XSSMY^`(HrpF9}T|
z1Ll)LpRgv~L5JManltqtOVp1(7PxmA$B@xVCVsYid#INjaly9vD<a1+%Bs2yo(6{y
zJ$$zF)Md@XB^w}b4Z@n2Ypb`V&4q)+AoJMZs>&$o=Ji%uC>%5Um<wC$wk-Y2_OSM(
z5ufsHu`_ZS;dgBa5Qna=+7QttW9ta?h53W$<DHt3EuX<3U68Xpwh*;QafCw+ll#(~
z^YCAtwdO<CkfqMtL$+;P!i&oHZZ@c(7lX&hk=8?IK1NUKjKpR;$V^AXv*X6#jsiI|
z4BzU-9sk_XKG47@9~gyB`fYQ3Ewcs8(9g_SJfzL9ZP?8ybed_0u2;r9b=MIgAwjN)
zGvKf*aA7Kufpm{~Um#!IS~4&T^G76dt`oX7Z>se~XX|UV2ra8SNDPH)Vu=muit*=N
z=ibgHK2|yeuY?p?Zv{q3z6%jlu%+nrxQIUY3rG_+l5Ds(;m77he?2|tQ_uK3>`SzE
z^x;2-YHc*6FR78GVw!(~rvHmykRc{~L#YiO;(y4)*4yGELXUe<CPmjcWcd=>r5lB8
z9vHt*`u;(l8KSV7B7)G)$TnTiUfW^B0BKvG&Y1D9jr7es_L=K%NzZW`U=H74xBvL4
zS+DAx>5%!$gq4Um<YOu`xs=Y)!*5#b-&R2$o?b)p$(Du#^xL=M_QrYu*!;PzO}g!}
zdfAwwwb=adsZkuqV`aO$Z!wG=i7sINHR&rc;LCLzN(HxPBIBl4im3IE>MrYC$54$O
z9!4mCb$89B<{l_`+RxV?<dsfb^nenMvj7{9`FWt1y9(_k2w?yN(o{MBd51*li^yTp
zKb9iDLE<hfa9f+FA=~v9BXcm|%(Gd^7Hc0orT?>C6#6tgUlEqF8aB%d7!a$s{$sx3
z7uZz}TLSo;68gFe?%a+UZ#7f7@Z_EdD}$ZC7_xT)FK223#9(~o=+yU59J?&m6x@Od
zZI@6FJ8Gth3&OX{&BQ)DQOM5dvHW?BiuEIzg6W84r~F7r&80VcwtmhOy!ofGXz`0x
zJV@*3uY^l()>gja1*>2e=DH7T{=eb8ZRUt=5-g6+oI|4#`4=%cq~~rg&U3OwpaKBO
zcjOoC%CD^cKUN+wIXtpg4L3rKCmSmoPBoo6(F~ucXe=yjX{c=7bK?Akb0=%sPC~%n
zn^Slu_hdz0@9pETx>9%HY|GtWf4|uLps@L>uJumq^QPAwr~D<>?t7lKe|`Vq_v0QC
zH)h*oL-`3y(-4;aB%{Y1sw2~ue2~uj&2`7VLrEt_t$MPnF`=W3>>9D@n`EA6abJAn
z+^fw;e%rHSuKSvAlV)B|D$lvoS@h+3Ynj8^#M=qYhYfXyGKB%_2NvGg@9#SPVaLn{
zG<8OpL&TygkGLhp3f`_Cy9VMX@4mM9v+%k@a$U9VX>HrLQv*9^d(TUW`u1Sj(lx8Q
z@=pYn#~)n3zm9w%@z`M0nr+?t;yaob?OyrEx6R=vE|bXAgZtla)H$3?WG86ls6MiI
zpu-|tDS!TLxT&|{>BNoGUx|3amF4Ewr~ZD^!as$#MtoQm*YvtD1_`ovetp6$Aw5`Q
z#EYpnr`LIH&45aU0T~(9O<May)PUGL|1Ex4Df1CEz%;4_So71BFJ}s8Tc3)IWjLUN
zgCTS`T+P_(0_?I6l~Qe%?pZ{1)@>$P&2qU(ETfq`We+_SBHfFdpBJU*BAK1yBJ(fD
zwns2L`ni?ctD~~}<}Ya!gX~TA>uwd%({)|t?iOeStnrFon1W?aytnIspa!E`YE2Jd
zH<CtObg4Ii!LZ(}yhOHKF7KX^6`+ft?#-ydslF8&3=!fwHKl}Ib+s6Es7OOZ4cwRU
z#V$&S`nwBIQ+RoxD2BAM_bE|XpL8EJO~hgL@gjNd9<ywDH|*44?Aiup;}L7gge2LI
z8l^k#&up)aAW`FgEF=6Ma)dU@>&N!4ua7p`IXT3OFG0S`l|W?QuIXZdLavO&p@}b%
ze6r=awEKq)`ZHJG9J8m1O3wdIdYE|!V|xS}Wu(SplP6742R@?cay`T_bK|P07CB)M
z{nL#~m@)qbSH@--P_Y`Z;2wvYj()EPj0W(&S^J^!L1bgUyt`K#ulHaG3wOYm+^aBH
z&8*U>mq@cuG<Y;um@tm-Tu+Q4_0nBppxS#N)_=tRQv-yD<kH;YjS&6!u_>1jsWRv~
zOjn52^$1HWV>HzfcxS5?t&&ddH?1Qvv-S2M{qT91b#5#-m*a6#0WpXk9rF87yqye;
z&V4;Of^v4e@iUZuLW!UJdRO=R&60cCOZ2yNZP)eti!=~zc8FX(LG(f&51YML<}%20
z#T!pAG@H?!d28$JNRoTFRz?Q|6ea&awC_J(&l8p%rq?6xB^tklt0qZH#2yqc<CH>;
zTRYy(2(*|FGx`0rI2zKRjo=(>1Cdl|mhKhBR(zMUMy|5&0hCpfFj62<U5f{lyFwCk
z4G!666T~Zxp5cV6XnLIDTPUN>(&oZ_8EXm)W5~0H)NG9w4kCosC=cf>S5WQy^lSpc
z#9VG92NLu<BIqR*<G6%m<j4(9_OTf3Bd?@*DAl%E_$b*fTSbXhAY&E-#HVi-%h^DL
zti}MwdyM9Tt9c_OTq(iT^U&;o*BB{Yv@RO)rfL86W`RSJj2RyY^M+6)gb>(76UD6t
zz%y6cvNDyq^)e?U5bff4nSNnur>JaoGR{;2+Gc^Sb~ebUS!kc7VhwDbfYHXs?cuiL
zTu&uLiQwk4A8EnK28`J^tY*e52sKF;%flp!Ni@PfT7s`-XeW)7QN$WO#Y^{#-ATYl
z6<v}<u9{d0AXWw$dA>%)TYh2>iKR7bystJd5tBTyM}KAFDt@Pt<lCnrd7(uF<R0->
z%1A4f7pS@!<h`SIP{^uaC_;l4_~>NJ^~6Cx2_O!`^Xy!VA#ZEG)(a<*C}~QZ8*C&k
zd+{8`W7TO*S}6BF4YwhZV_3@V@z77RKXOC35~VOR(n$#h7h=taFh_8*l^jr6S~9W4
zBM)DOneVf>>n7tQhN98pg@S6?iZLj<8`+wfR2xAaEn2^y5~U@R^*kzOf?r4NLTs`f
zSRV35%PeoQKn^G#wS<`(C3q@b>;uQ0<5p;)wi1jY)j^gD1;qocqXp~FSxOazMqNb~
z6PCs}qa#QHRFR$_#u>>6!$JJHP@2VZ6j)*$v-xthAo~O?j)g{<SzPGGwX2A|{0`em
zH`|R(+{skWqz#kkW+e(pY{04ehW7!5g2?c3s)rW0LaoWJ)iTIR2doFNQ=C2-XIoWU
zD;;kW(O&N8&ZAi^uSXo0V}BJ0R5FtGEZz8${^FQEW;s|O=<5Q0cm!wp9p#u<j6ENR
z7hB;Kx7mkt7UHUp7JB#qk*J9X$~g^1kZR{?3k+&LX3d`(d5`VKg)y1BXLBM5O;xG{
z;JA$6ci(yac9?Y%Bl)y<vHbMN?Uhe|Q*h2!Ux|P9|C5_29C|{mxoX7j<G!o*pD4sZ
z(LP}}xlF92ri_Nu{yMF+b}-^&CTepX?_e;+PR3fkOKqVz6Gt5y>lndJTRA_`dfaAx
zVk&XprAMiEALv=L<j}VOBY|*oe8ABg$oo*LjooZ!Cbbr6C<}yifHOk@(Z$Cop0Sw}
zPM&JdMFllr*j7|4dTZ@gMp~FCW30q{#{c$#e8qebbB6O^!}yKh(+R9@y&)~83r8HY
z^=SGd9MWhh;RH4>mXN;^UULr=q8y!^X&Z%;rNomFGo6*$g_2waT|k@VI_JI-7Pjm8
zVKX3l#>X8_reW&kJhgTILgd)K1^ieP@WYq!`6K#0K?c~Y-AJ~g0Yd1Fk2)L(BF(YK
zSQ`|3-#6<!ZHD!;eBZ!4?zw9-Tx>IlYjJ+Rej6kED>(v%Nym*jK1Sl7O|M>m%$#I5
zgi)i#x%pQx&9dAvOu2GFY_Ot;GXfY43@JYG=T;{I;W$_CAY>6oI#ee5gQI6!C@B8z
zA?&I8T$=v-=jxlCuYzuF?4O_@z1;T#WGRrTJ9LP3hK!YDi03W82MaZT)xRE!wgOUk
zSpW85g6fa{tFQyEA~Uq9lNahsq;A08#U;U5X?cu36vp&3;etLMSu~=jtkLxDdV(E$
zR3h^y=~eczT9S6VYSV8Uk%z;kZn^=Z34f~1_Kjj>v3|mSVb3fkj*`OU>6JRU0}AiT
zg53dfJ_`!Op)q<``x?;6h_8I>e#^~#d_o?fg%Hmo;wLM7-ki^{Kr=T_oINCkUIt-a
z#(9qD=0}52f(tbCg|Me8Lbz~-Xq!{|QXhOK&_-I55Gr|-)jDL1$<2pIPzc$B61mxe
zWFrIwX2OQFg&Y)ekkdHIOr{a|7!w^^5Q6VYJalaplijY^9f;bJB0)Z#oy`}+Cwbe(
zh(UY7Y&X+n5~W~PJ&+iu2PiR~Hr3JqnTw&#0yt1_FXAGQCjR|Qgp5NIq7Z5#<gc4T
zaBnzb`n%hskSoDH(?eYfD5P)#S)UdpPp5u{$}Of44dF3zwY_$eojj;3e+H4*`a04$
z2EgW)n2Af+CSYa+=oheWCf`g4J_nXq@BvYZy^4aH)nXg*N}|2R1oXS@V5W1)Kz2!y
zrW7JT@dh?S2@E>0_)^IwLCGLZ$kvCL-zwFXm%MN*c^AxP=+{zif#0il4)ifdaU!aL
zRfv|h=LWv0hisJ4wcs*Lpb0)wQmGM}aal08q&pj|qm{gMTeXQ_f^IA^WLLasuV8Dz
zRY8e-pk#Kr20}~Knv%Yx(gm^3{Q~g!FtDeW4!QxmD7dT++JTI^TuGw6Y2OJeOM0^_
zKejVnl1tfueg!k%^tp68eOIHl#NB4sKZh(u=3v3tilM@aOG(>(H&!OoxrN%DGm=Z+
zRR<)$DNBCCdP1w}qOnEJCA~xC%n)|a)w0l<ifgp0ac_3){9e6hx=Ui6W$tSF=h?_C
zCswjwO_6C)_!_I)WOmYkK$a>P?Q&8#3u@A85Ri1;f}Yszv_|5Vz1pH->DVz9H3MLA
z=`-_jX;#(7BySDWV+G$RXXjN|p%Lb5d6s!9ONTUOOU>RK$YP&q(ey6s?Gm@ul$s~s
z_aCgYD|F;om2=*qyyK`{Adju<+9yr5d}hOX^@h_HGAi806Ao&ud8-{y>-XK3Tg{}~
zZd93DeYTq?8FRU5Ki+X*KumjT5Pa{jvga-Nr=vWgDC}OL%iO0mG2Ip`KAEQ<;#`zl
z7j#)Tr0gFpVsHIq{TE&f8*AQwcis-!r`<Ym2Raa3d$_!uS@>+{H}n9}zIR$JnBKVS
zoq-{qbg<VbxYoe1Z#;;{(R@SdPb<q(l6im8*smIFdq)oV$x3e=vSruW6zag$+Xwsl
zI7D4K`V%uzCLDBIRgr4><reQ}w8(F@#Uu|-h3Y_E9OsRImAv*yz9Vy0@}UK*IjcG<
z2-{_C4V&X}G`om)wY_fEcd($m<a38b4P3RSZqycmd9zh!Snc7XZ>y7=m^O0A9Aj%!
z=s`;b6-8l|c#TqKwmEfw^Y=v$Adi3Y=m&#+rmwN^&_T{$_Wg~Ag(oC8nifIa6lcd;
zC*`Eu?ktkiY$uZ2^!q@f!7wL_S+{I+KkqBnRl1sLH{IIH1nSU%y+)yRq^v%^89GQR
zJhRm7ZX6BbB4sY8C0%JBT66j0p!VcCNDuAmmF<8%Tq!R9mfL$`BA3;b=RsAr-_~K9
z(~{}CV^<${VAeRv7Hs$o1#o@ZD`BeMk^^AL#%czD1M;A&BW7>1fx!))=}$xO1mh<#
ztPTsl;EIZOa&VuCOqU4{M}cfF!^tEXKPR591L*V8(n@#?1~X0ENuH~wJWTRY*wUYu
z4)k$XY*_Fw+GHh%9B{~8zJ10!)|&1p5a|ceD@TKAp6~4L-m8QPs_ansy1eD9-eYmL
zrzmnk8w&q9QtH3#Y@b^d3WWH2aFx)9o^@s5XE!>I)k@}|dd<6m@|vG!{59U!M$8!K
z&TB~}!7k=zhPF4c3)aUVO9lxu@|xXYTk}lK5ck3(!qlV%5%-S_^@aGpIh%17V`$*(
zN?)QfwqSi(r0oUN8UEl{G3|SYXe}K0>a6ilONc(IjSE|GH~Ir%+OwULVwm$L!id;g
zqixSBAMNn=teQAyONgO-7zW4oia&g60`cRVo~EX@Ptwp_*5*Oizizvf4z;h_(JhJ!
z!x#GC%4uJ=j3sRW)rj*F$eC!`auL4-#1bcfYY`1?NVWj6<4z=^1bapC-9%zz1D&XX
ziY`qZqeXnRn}Ut0Z|@R4uV7DX230dV&j^uXByQ-23H^nCv@t{V(|wKbf)g-biMZ;R
z!|NdX=MY~hU$6{XoSS4no4BP#=41qiYaoe+_znV!lFTmUf>i2dEC@OG4c^cT3ziUH
zSec>nt{~iDI2{V|>$Q^u$K~Bb9viBeVliXYsog}=b;b5$fzDj0{;yG3@_aHiN_Hp_
z#2-aYoLxTfeIsH@4pJiDV_@tYV#nJkRTkQCU97*3lVUluH_3=N&?h&MpN5!Y$l9;t
zXm$Bdk3a%B6oLoBTsXWF5#F1)bWXgda+AG2%tN_AtU#E?uA=So{)sdumQ(ct9yuHF
zwhak0iP!}B+6eiYt_NsEJrik9TY_(F1}74OT$ISJd(h@8Sh6Q2duRjHX*d8UglHt9
zvCzTvDm(r9A1Ay2{S3L_mu9s9z7nF%>S;Ca=5KM%L$jy)!@k-AD-<*Zu3lRuXMh#u
zM^Z-?_MY*h+bg%u36MYd3$hafarBHpZeB#dDD>xaxOD?e6~kws;K|wB*WB**P$IYb
zCzJ)yoRttm42ujfVaayX<W>pcpu>?_F>``UejVr_UAsQ+7_%x{7wQHDDiP_h9fP~*
z;H4{Uc`<P{a&CBX>)(*093<!Y%x)FCD3=M1li29e%j+jB-M+%T5;~Ws_()zXJU2B!
z3>O8;7G6)YlW(!t=Rp9GVEZPo)=@1Kw)O~F3A0U**I_`*lU{{f$lTdSq;V3Z#KARz
zd6;>Zx{N4Ah8R8g`?s;OdJYc4AzW}Ods5X9aM4ALQTQbfchQ<5R|Ed&Y@)86`Fcq#
z`8LGUt0=$B{N(~<{5%Rd=+8*LLjD6uK{&)zPPaV;!AFQgf)goy4Zaw6405i#YG91F
z$<@YvaD!~bx<4eqRk6zc7AOzcW`*XTIf@j%pQ&+!176un@Z_BCnU;%sEtO^5yfC4~
z7J&r}8)1<gCiGeyO^{TB1c5DfIK;a#^VBPd4d9R{0wX(t5j7!e4T!jYe94GVBZkhk
zA_SM5ta*HEGx6Jpx{R<Z@s++f-dT=#2L({_$GRFG(v9%%kH%Y^gXZMRS9;xZMuD|B
zF}pp{9S>wGWEJXJbY1bwu+&+b=FI<y3dFRWewcwhm7bnyrVuB(z+*I7;Z=STLZCe7
z8T@ySr9lLU=L4#Nyi8D+Y<XxM{O4nW2Ac3o7@eboUAc>_K;YBskpD_swlXbjC32k$
zMytSvVBijxIf%C%eZG3OBb+`2&Y$}a0_(Fbb^9Q=Jc(vGZg{EZGcl(5V=jogGSf;K
z4c&$P9u9ta4O`}ylDW{-*Dq8VTedd$Hp+pU5lsEi8^X1VKI>|uU&$*7HshLx3+7Mg
z^EhsO-%JnDE*iN99nEGz4rBB3uw{s8C7UzA*MR#$?&YFvU)^gByu#5K5on6N`}LL=
zR_rLB_G|r<spN%yN8)_y!eT5TYdn@}T2wL&&8zR0jyR?Fj^f;J&jXDUxU=JkQ~HI&
z%z3YWqZ0*N{Z)GmGsoxTp^>xAE<5c*Ztr3FFPdD^4%3MnLA;3nTNqD10l}YB;UQb>
z0$)4TD^Vdyn9Gs^7v<`;?I~ih%+n<+<Mz7~>X?*pV3~pW@ex&UT>au3??v&7Ebr1q
zTQ4nDUXR~wrH29qTi#oZg|PlxOZHXNAyI?S9-kh2Jo2)d_Rz{${ZE`L_}w&a-izO$
zKod7xYB##>C440I`~o<{q#~|u^qs277I1#`AAW0KFO7(dmFBJ+aum-C5g@LL+~ZLk
zPjqPzck>u+Dlv?7KKD&=F-%ysXa_<M=pBV853En#yW`;^Y}##DSqMo%{{<2aR{xjS
zZZ9k<-a$YS$~5JK-6W6W62L@Voaitl43LUoI!EfjgovHjF$WIA#XW$>q@I;ZnI8M;
zR1YZw_?x=}k<ES)&)>{n>g0kRaxfQa1JEOozXwO;#&c)51uz`^-8~oq0S+Ea2REvd
zhl7J?AIO8K|C*iOl_ZbMFSZd~{1nDjMYDN_uQg^U-W(`UNJ&zq!HA=>$4;6I<Dmj%
z+KDIEx#f+Q^N<64X`$8$1Hye44XDb@p@=G#7aBJ3^(x$-QIW*$Iwnmzl;K|ZeGm#S
zJF+-Ew#zerl**=#O%EN?!#jkIQm;a&vLLTAXyPuB<WeMJ={AXFP84KXgzl4EvW=;=
zUT5Cqcq_`gD**r&^3K9*4<{~Z{rWj<_47ksGqx<1FW2c4N^LrYfo{8<(n;I|vp;iY
zH&f`mHku@V`v^v{G#lCfz!D=<OGiXyw{fS5i12Oj9k#fk;(s9{Q;U9g1ZsBvG<{bu
z>)rE?6SM!=KRst++1bdI+y2>7UsmMsaN1V|mQS<M8Y3uqb^zW|XrLZ&qB%u$Q>}vw
z=EL@#CfxbwsVg+~%ca`?gN)Ff1P<AM<9|(Oh)BkH#pra`q;(bABwA^KSJG(gCXZ*c
zC*>Ayu6pVe%6EEE{v*+~u=vYMTD|6PyZiN`K^Gmm^+0|0;e~Ghy45c{Xlh80Pfl^~
zgABdTy7IRtoa?ok{%6MG@)Z#UM~Fl<>Zo%H!*mqP-!DxUVG%Q~m93^+eWn%t4`if!
ziF1vH*Ii#;ol<11DodD@Ui7T>irdi*PwtJ~?SDh?GR7m2|NDW5<L=Y4&Fb$hIj%YR
z;LRcR^&r~mur}*`N4^wIT2kM)vgSX?$O-%7M>GZ*@SCDMP#$yn>np41I_0CXp=WMS
zvY)kOzAXJw<6e*0Y4k6h=I?&ncqEy##=Y%mmNJ52spJB>ofkTns&mneTE)BiEbU`i
z%YS<0h6y`PmDh3VWS45yHV$;J9;M?6X|Y~~%&T~J;t1*(x2gsrQrGI~{EGg#;jJ$q
zrfcx#`jTg%?;7?W{^9l2Fy2$cV>o1qRh#Hq<rCCuNYmHE-FvMMajepS))1!wj3TxS
zEz&qYGT`hWkvx)|b2@^rTpv)ehhnSSxbpJdjX`~oKg$MCY=X_xVUgf06z}YFXEE$A
zZS6{^NvUY1$~MGgZAe%^K;oPN@h*bBk|rZR?J+`TK3O0VvZiqfl6*f3y`vZ6ksOB>
z1+>=l<n_rkJ6tKdkQb$d>6RIKnB^0d^pio((~auW91HVRBsW%|jP)r=GmB-rTqk9C
zJ<`l(xzUbx126DiM)JzSBdK}e$}Wl<QHiF6+~!7518BdKj6sBCKuc!R4&-6FT(T0Q
zGBOINfpWl1(j#F886^!>GfpZ<F1iIYu|YsKVN`!X7e%ZD>^udKA}TUPtKuk7iaAh`
z5;F8`3k}&)6U~}`31W($!<=?KNYeq9g#wYHQS@wOyC6?X_Im`FZfUuqC=B+b$rvN8
zYITT_<S6eVQUd(B)`j8%o|6gHF<tLVVW304Df)e`ZBq$em5L)bsd%y4d`pFFDW8it
zWGSH0z<!(>fvTKBn-DLJ!)u{S+mxKom6c!`Cs3gx{+38kgPy!z1Ka9vl9%n%6WZR~
zM2>b9XGliLFsQjn3OJ0WqGl+N1dfqxt(*;y)e$OfBBaK<2vzr9@_Q}fh(Q#e>RjlN
z7WtT>4_YcF6a@<4NVMJNntCl_jU?v=z;2kR=4ETEkUosG9#>o2<%auYcX2v5s^BUk
zLd-6h*>V+K@D=%fK}DnBVoj%hLby)fm#IaV@BMdLH4p+4BTQ#0$P1#n*pDpxIE8wO
zjmd>2(#mGyE2&<DnnHoXy!R+YfOk>rZQ}P?DS$)!D9+AX125&EWao@7_FRS4<3|eE
zTL94%3P_+=IMHbk%fbkA67;Z7>@cA5a(S$EAfz4RIDuTtxnF8+Mvk*f5QLkj@L=OI
zN>#0jP0P#|HY`fu{g@dssG$1m!5g1Yx!Gm~a@$MAY`*6&&-wGLc8kS?@Y;y=JDVtD
zxLvdv8dXdhKmwESP!EFud!=xZ49_O5+=J8FQS!PjjFW&Besc$uz8xA)CTc!$D%Qx0
z)icBfsCcuQ9Hw1FkJYHn1q%s;x(xOKTH7Q%g(r}~Ge9oGPDIUEJw#DAs8~rxVDAa&
z*)#CNMBh1{rDu*tV{@xqP~^)6V3sDo01+~SG1Xn$h*4a5YQzEOK0rOWESDdwAXBx@
zEU9)U2{)3%R^MX}te?wk|1#lOf6SJ(*qnrCk+4?=v@t%1`-6R%EYbjqz(#Ez)nwt%
z^7Qsl<WAQ(0ln=cN{SX|ti*+tRjj;Vw8qsT1QKwsk}c#=ZP&;4WvXT4V@*d-d1!aj
zHTuy>GgU09f&^tiDvsrYnC0*OUmbOX?GHoY|LLg19^5*jggB{+YbpD%|A(#f@M<b;
z`}MQ;PC^QV5FjMf1VV42S2Z-HYA6bVjsa1y2SfyHA@m}KUK9<8h!l;TqE0|;*aG5+
zJtB%&W+FB$GdX+S^{(@MXRX5@zyh+^`+4sB_q#4N>nuO@p*K*(UtFwtF(@^v&WnoL
zhPAuy7qXP|fI2L*4_IcPE-ay`%N0npmvEjBMTK}d3Tv>Qaz`E|&*%yB=%e>SVp}7U
zPL|+8?KSWld1Z5(qSeeN-W9}yJW0L;=+njgFm#}p#RN+}bFwp-FbI@rZ=vRrbJFta
zvt_tDFH-RS%=MZvvoNP2S3?|cZV=3WI41gFc=it=agvSDd)wjH>sJxtB+&El^#lu$
zr(LXb#4*(mVrGl<1OUsD)Om&pat-VxuoGQINTMQhm%t-d76dGLrF0!3POD>el8X}7
zp{KM#b3#AssLlB(=hj}bn&_?|S;AX!iMJq<aIw95JG#{Il&Ka94#H?L!HeSa_xthb
za|3^Wn0T=Wi4*4%R925CU!=aq3a>-@V#@xAL68<!2`wG+-ECC7TEkO(yA4-C(RjmE
zt2z%Q{}zTxc_DO;7l`mRin=2LuDUZ%6q3oup;aw_K3Yk91<a6Jo&}1xBq6})HtZy#
zt+-P0a%JWTi1gMr_c=EbbL{237g5GwGIAQy!e95GDt>>=|Lc>X6<;msuIT3#S@Ew1
zps?W}x0isd;;msM-d!nC$W%LV$d8o7JD_{UcF&-vpW?S`rPaUta-9TJwm72IBWG-k
zcm%)*f0;uXoHiAOje>N+CZGee1rU`3p|}Wr0KffgQhpE4lK?wOcKc;IdiCZMsbY+{
zzZuB<mQ5}&763!;Z*Kez8j=))4(PDQj#^|pm!9u$Wuw%xtEIZ^7)qh0dlaR|P(BgX
zj2W+pX7BvNc11Ma-Oowuu-$a4`LqcB>I$7a4?BLc@tigP<ZQOK3LJh3IVo7SpNv0h
z8GnRe4~g5hG0i7}f-k47w?{8HjFygqiyB%N+z>BVchWNFo^=^2ZBBPknCAZ*vF%{x
zXj^KY#=ozEGF=E;CJPcKmOmQQBmw?&G31r!@q9F-EIMG<wW3-ktoNDK?djHc${bak
z7|O^}wX(W<ZngCCA<yzBiFR|Q?mbmr<#@CC&P4&IiuV+kCluRv`KufZs`CA!%kmUu
z4?pG&B$X8@Q=U6jO!YbsXH~pus1Qe$1<umBFKsVXIn-UZS=nKveVTo-%H#dq^3NR=
z|IF<J$Go1=ZLUO#an_da2g{#0IpO>Eb;Vf-zS$l*W&GoX7|Q<FZld2;X^27*zE?6C
zRi^(&Y^yA?tE?KUY|x19!zzdGRUAgOvsbn2@@kiCNB72R@4jlob$jyytdJYk{$4eK
zGa=t6T*O-7Y&sqt@1jFwmC_-|t2SnNZD6&%K4LyMO19+a`bWV&lEq$}tqw`G|3+*X
z*3B_&b}pP5P1KM=?*(vjW68SzL~OO4=^cRH3RJ;tDG8mBkFepgj1)u)WsdI4dDwtX
zZ2kQ0iAvax39T`Y{NVu>pLRSV)=Qs;pSvT@aAVu@ri$+tWGUn#PUvZakD0^9en#6P
zLFN?DltMX?FoT&;mfUpd`~H|4nl6$iI;whHhBz`|CP!VN1qiNd?{XWBDf5&Zs2P7?
zqOsZSp>r)8x@ZBBb+&01nml<$nB^e)3g{~jIndGk=l6q7$7&!git{9R5@*GfQvC>r
zemy+&c8(CbP8+s4bVvzsITHL2pdpoL2qZse4pH=5YObd_@LFgiz8hoEMBHM=qn3>^
ziw%ARrdzkL<6Bj|phK?Gp7$cbOPb_?mLK&GI};B(zHP-MwW1T-8TxJ?W-g*Iq0-xQ
zm4^dELu`S!8^6-Kzb!ncHdvJAO(T$bNgF2GmgO8d7$ZI+4LvgG;&WPS@eE*ca}vx-
z<8s<lJL@bz0e3#M=7*NL49uOJ-*toV*II{lC=}s`RoE$}JVswr`)GQTt^;Zn5#)wr
zD$$;OInmS#Mh`hGbQuY8I!w~`$5;X~|4`U$>i>cwbhhVob~ODD6rp4p{uo7@sf3K3
z@ges>8qtCvT)1;iOZvZ{2-lmsNBX-v))RaMh~BIR0#vRRneZhwcvK%OS*OkXB-x8n
z5pv*QA?C9S;vgr?vEUCO8GD@&e=JfH;<Af){B!&XG?qaVBAy(?jt}k9x7P)6k$q^k
zxlB(?(3jH>%DVp_D8h!+0_K9dImz*`dJfgAKo+0XQU2BY)E66kZa&69!D*Q*=}8CX
zFMugi=dJ%K*Ra!hLil=+HTPx3#`-d=YX|oYce(kT`P^wj4BbZzu-h0b)#Sp4qhQUt
z`aqwv*-eFW4QE0Vh=yVp`zo_%p=bGz4=vju{>=w(&B>YmY7?q|ZX>BBBVC--$_br0
zxhdiNml3n5??ssd=UshNj<2tu7y6u8W$?eL2>(J6{)s#JFBHM2uO^|d?q;`XdS6c|
zSP=j<y_1reoJ0EHP(pvf>m$C)y;fD3?Cvr`y*6PtjLWN7J!M|&%Tf)QsRm4JloTni
zEBTq&{$g%mte4d_RH_(EB`NzHsTb0Gdi#?4$4H%DPoD1TI{&iOczYxik6e7<mp}2&
z`fP{U_*-j{GR0kLzl@XW$RzNh1}5L7l(|>NzcF_8ANbyZSLdV>O^ZeC*ex)$uh?$L
z*6C^!#!}gd=UhB7!mgfV=d}>sTRDHmEik1R`kPi{?e`F}fw`7lF{sUxM>n*hY#J4(
zZP0e!OHDCCbk**kiInNPIA|ZRcVJ?HT`HHCdiQ!)+%eE5t}PWHzTM8~s!OvD5TzQo
zCzwYhz?x!sDv4-WUYpN{MXyOXJ8ZCc;PIqo?jINT$r`Gh9pV_kl)tiN$Dxl}Ao$kN
z;kRJVxyxIssvqeu|7{&!Q|Ot1TuD57o^<M1{v^J)1<V%X?G>vDJosTW{^5D^6E0R7
zXp(3S#I;GRB-cyiHHu(7kuMRS_AKCF@?XQbbx!Bf%@%24)D%Vo@pzp4%)M5;1;xpm
zpZfVD2vgsjFVXcAI+QCCE_ziEe|V1%f!J{S+`7wA!sEY~sUIp;SN7pAt-$Y9m-jPf
z!E7Kt)YYkw0xXn(A_r58@YmG`{nFVzL~tkzpC0c-P^3<GcU&&M`b7YYa<49^G}n;n
z;toSPEd-+k*5zYxPYcjz!Y~gqlUV*Z44LrdP$f*ftzjmFG!;ok5WM0fSe*gbz^n2_
z(!4L)kj%7oQNWr$Hz@%oNsn1Fp%rOkM0?nUqy1y)D1p=L0^rTvG#CtDTn8DUxpl2E
zmVo9uzS%WG|GU?!)NZK75R5B<wP5Mum@y*%p5>s2sT?JXrCu=jV~;y@XSppZY|*>m
zX1Ga$<@>VGo#m$eBz^-)xhh)!&OCuiZVhO~QY40wn$!e8mY=bvU=&+{t&HHudl2(s
z>>x*HLyv(z03<1FDjn8y);X=V29dy6IYPV$=J5fp8lESybe7sjWKOi@LQztCBPK&#
zF}gPw@{|oI){U=ro%ex;Aq(!1xG=B>rV@yaK$iu>mjR?#e$`U_O3wwfB{%Fsfp49?
ze(n*$;>pDC2f#ZFWS=_TE`~|BWN-dHmb(q6zJZ!!q53ta)RHqwO7`n=_hVzXD2t-{
zk<A=2veXXxu@|yct_Xkat0qMn&iXz-htMd<>o1UFK6Lt8GL5%>QwHQ@v@5uqlg5a)
zQ$TKS6b5otAnO?%pbuR;2bZ-$o^G%kpGF6;c?0w@ExhUoT5OL>{|@U)A!|us{Pa?m
z1hJI_8p<Xw`nK6qAW|LT$cMb;&D3D{Qwn4$M1&UD6V*$$h!Agy0^Wx0xQvAG5ss4(
z-CJ<L>$UUSUaW?E`LBJ!YpfEkyq0CpTxv&o^>`NjY%#eSsWyVe4zj$px`>GwV<PbP
z<s+|7BT+*1n?Q5%kngKFJCu3A0Tp+U#6Eb%D*_o+r$}HQK4Mve36UU(L{Vh{7*hC0
z4&p1DIe8ulR;Kh^iVji2>3;;FF`>juyDqvX`S2GfHzO&(0ToM?9b)v_Op5q0A#_}_
zmHbwVvuAhOa|dPsgEAV`hD0sJcq?9C8o;`vpfpMhM-M?EpFT{)R*;HF?X~%--^rbN
zO3ThBbV2ZJ5B%&fD&b*64T1KMAlxHv8N!P?tWDu(ra21VTut13Vd2*40-wpFTdzFS
zoYRI&bddeeG~9*RC_cqR=xNAFe_99m2&Z}3HdCWeT?u?c_}aW8;?So1o;w~2JP{9O
z=A;}lp(Jy}ZAX~URP3aOG6+rOt_j@kE{tG^m#7K%Qz<Mn8I&(MemVel=dRV`Ajg)L
zHeA|85`Gx?C*|@T#DwyA&%*bjg-kULh$pL3f95^TR;BdWr)%&KvI)FPm6G>QinSCj
zc|Ls?{pjRhA4kn4aAuy;;6Kj7o#gMk_aQ+-s#+{urLsT~fE@O>$0EpHib7<*=Pm=<
z%<tYx;3S;Ck^Mb}^M|)`t4<w8ScmbI{Ya1?rP<G&JOTh8!k*ih<(OK12TsKD`|Pnr
zCY?k{DwUb4t2p-4R(U9%NRq5StyAyffkcm<VJYS|n18hgV38DD-xx(vEYXw0(od)*
za=|zp0|~brQp0ofHS{3@WTt1p0M;}b!4ylhv?95a2m}U8lf}03_GW6D!Z6Sz6W~fO
zte4q-jwY38NLM*HRazO4>Fg#KFAZHo#L|GRkM$rnvFxp>WG{27mNkp$#Bg_k^^Fu*
zD>E@`fMBj`Pi1?UQVrQu*x11m%R*ceRG<qyNnfq_-3So?)Tag!tdRjGV|1`^aF4p`
z#l#D~UopYkp%h~!DiA?Nn>{HnCJS`z&7i1C_@x>MFcAdLm{v{K=@-rYotGV1x|fD?
zATwK$kXw6#)>|3&u6~NA`L@NClmrx&VvMqQeG@?n*<LeZ3`N4v>!z8zhG=AIg%o3G
zo4Gqjw%>eKY4w9>?8zMoV-{=eNB_~2@Ofn#^X~=roqBb%!3Cv4FLx0xBj5tBs|2jU
zd?T#4Yp{Y@=tK7A$9bN-j4i_Tq^_ROO1wfE_r?wPMqcLS8|Y?8I(Ymmdv&$q%;ORR
z;J0*>jTo!6fGhY>@3pD=%GRrU)sf68`N^TY&s4{QyN*kehK_$W-YgN`Z_UJ!yySd@
z*d%nlOyW#Q2g$l|a#;PYuX2#ccuxt%>c*r5XmA9~TrxGrRff=~#EI(kV#y8ciTC{9
z@X}sM0FhZB<CA^(F;^;<CZ8!F?^(*aLUMV}(OsyzARJB#exrcZ7tagAlBrTzE-849
z9Y^r$5Co7Ab(ud-m)TOVZ-s`m6u*bC)^EQ!B)19go7#5;7pmH9PK|Vz3Z@qLVg&jJ
z%vhC(nq5AduIrmG93nf$F%_b>*TKUeAIeFDnlp=)@g<wJmUjgI>BU>!RuPI~p-&M3
zX!2!pK_QzHK+r_1S$N})V1LYAF>h#nk1zMKx{DpxpJ;tcx)Cup1RH?yEk*7rYgfsT
zx^#Uy&>-L91t9EON))du**^rk_?iJcTROlc>Ra&wIAakmjX)El6n5V>=H%gTqG8iC
zQ}+ID3sPVgbV1+l<_3$?>&5;<Ou2Xna=RtoeCqLSg;0%+kpK;iHpviFGmm=;XL~lG
zM~%qq%EhS}^8IQ|S&=fX|3NXzrchCSSo#rfN!~>J|0%#=x`=jL5ZB)6yV0o@enUa2
z72}r|FFDJE@!QBTsEM@e$6fTy#Fvvbh9#*F5;FR+hkGkr>w;JP{o@vF6KMO2YkrHH
z+SSsj(fQcPy5e80$L`Ut=3Rvh8-g!as0DN64BMxhagV0k63$V(kMd|aGi@jC{CL-F
zq||JQQVNEG;o@YhZf7YaTC?RVZ*Wvxj}`0aZP4v}uQyM*#7|3Od@$3VvZpiH9Z*EG
z$SXnRa;@%A{#qydzn1`~a@X7`l@)IY`~F(S&!A_gbGH4OGpi_l*LeF;4{HG*hQ?7o
z(k~h0&l$Alp61@1A*#04Gny@E6U3X5(mkY|{54iZULzsXdD55RZ}sUz)b&Hj#5mp8
zcFt9Yz3wm*27-V1u4#Po%F%+*o7nM(UNyti!P)rCflm%Y0Y>^-G1i`~)Ot_qc!=ED
zBc$1a{{`Vtgdm!CS?AI$!#YZAPrfc$`|HY}K8{=3Ff++$>9|UGTe^(t%ED=C0gFeK
zyNXV)=KmR|GyhRqu2W)-#(5!Ro+Q-W`JLOX{6;_i{bOZ<uohi%!M7z$cuBZSb3)Q*
zO_7um@I%-qTZ!WjJF)h0K^C^rFj;sfue+C<;r%j~cE(@S!}B9qT|PkqYiiRsKE&e0
zs5e=%Y*3Z_^ysp)w~jJFnjFEud><DWrJ+@oz#j~LOSi!d2kzJV`1%MC5id<~EUfs?
zxcO^gqbP3d>+%~~fn&iNADw1#tROVY_B%a%%d(V>1^N>T#9f+5hz6ItyanOoJr=;g
z)9+len_mF$j4sB9i{)|~aZ@AkhQ>eElPkNhlV;`pt#48+_<74bg@}GCq_*}->58R=
zhq@&*tgnrIE3lF>$qO#|b#3larDNm%w56*y3-G_remWR_%WUeP7ya(Z_D-&Li0#3s
z#r?hx)|J)lpKl)u4{&SuN%aTSXlZ3ANfmNaaM4y_F40N>PeK4w$C0@wClcp#{8jK`
zB}_QOg>IhYVlpT&WreKgQ7@6`%@Ky;goyL2L2P_v-oLJBE2$seDjOzeF|kJcL2OQL
z?u%dvcy)@qCPV-crkM5Kf_G{-@d!crwZ)u2xNwyLtSe^XCKNIpj+48({07#P2U%!K
zV1qWrZ@~pCyP6o)0h2*Q$M+<)jJO3~S88vUz#<(RZsVfXx81Wlh;im>;1i)8`uwX1
z2ZsFfKI>gd+@-4?FUZx)Uk5qNaiJ(Q3Og<gPP(TH=$u4ticAeq-aCcz^Pnl&Lapl%
z(E$y;mNPNLJ6tkHU>p(04{!uf_rmHtZ8TnOEF3IxRe?N0D*wDA*KgZAj>tg9#CW{n
z;@8U(1C$Mz^u0ojB;JI9AcH=0%nuT4p;l;xm*%Vtc#0u<F<;HR0cg0Q+_z!=4FVGy
zF>F|Qn|VjD!{A1&P_L6#JPdzCi}9!+?fTyvIhj9;)Z)K9yOe6W$kZCX_fO>QD{uIz
zdW|Ms?(&*z55Jkl1g&UZq%km#<zv|$LF72Gkj`eQ5tKr?_yDww*Si(wKm`$e(ctbN
z*kqy*kIuFk8N!QB0zb9&+>I0~E~c=73$5kA`xi1FT5$&*mh&MpCspmwN}&^AiZs|v
zv_0xaeBu#<F%V%4Qf0{zcDX8wC%`lo3rXImgtT!ka?a=hY{A>06U;wLP-c>>;`6j_
zmGbo(xGRD;rI<SiV~D{o+P=pX1eQ(ROOWi>iWT3#=H`9y<KYCVM(a9&4Cn0n=y@gO
zH*ct1f@Mgnm>iDKu|W33ts!#p?;Ql(8934gHCkt)k)gksh}N7C7ylDhH{_mS@N!vp
zQbhN?0{;7lAhDYDT00QkIS8PN03PI0Cd0YXg;?VLT=fgW58iS2BK;|_=G0f5p@M53
zL@^|HaP=5;NS!ZN98v>V51DX>jwElTek-DAA4G?+j^sf8r0bR~9YY>f`oqbu98`<;
zEfoFmA*-rlUcCxi*hZXL_P58zCkE3Cxc}^{yOs<dyCuCtIqh<TJua?qzQQmCB1^a+
z%|x~~NS4bi7Nk0xL!c@brc&-f56%Vpz>;iow<%zNh3c|PWRhz$rX&0T)|o3x7#89}
zmV6=DaUkdx7j_bCu@geNl2DX9g0`AjGQO>3iPRZFtNv<oSX;1(IJex857jWyaw&W>
z7HSlGSxVt!YvQeV2=$xpwe5=&1ULq?p;BtIiOPs(r30r`Z6e0;*_<VV$nVJ%(+4?v
zqr^>!W$}yP1irP%PY3x3Z+YppBrT?if*B2@fl5#iV`G|@Zar<i*GxrU(U7w*#``Cv
zv#!n7wxRHb4p_Ymu@pe(oEDn%3AS%inOt86$EVP5u}X+3JXw?%;F(GXMKtZAXvR)I
z?C_$+wXFQ@E)=Fxvj^<lbp~s5-FFW}c$&UIj|E*@O%ImE)T99~Ws%dzoJ~Wb)2k^_
zS^ke#(@Pst5-93DyojAzB{-+w#HS&r!Ictc??kJ@-L8HzjIFB>cHhQ0VOpSbW}yrd
zwEyHn1NK78&*cXz8H>IIz2NM@Xd`wm-iOi_zQ`h8&)CTjV6hz7OaY&cQFjp2&|sP=
zD4J=gm@O_u8Ql)z3S}1b6h%8SkyZ)f!{OJqc{fp10bnrsZ3E3gskv+$qwpSfeiVje
zN^}>%T`e0fu+<?iu`>ru<`#}YyH~l3(WLNSF?OkH`=kY89Xb5YPi!WDZD63StWbJ}
znM~o`K^2vUsJ9V{j#gk5@Yzg%d+EL}9ngV6aPTy6QdYN05d#iH;g+}PKqQ#5IM{~R
zhc)9+4t@guZd4-<{gM^6)00v#r>SRI9{Sm<r=u{lG5l6<`G{x6_C68C)lbXXKX<ve
z_Kex87Yn*q@71aaFMY^pzE@w9n331WSZG-vp1)As*hv3e-}JEY$R`^;9Y3>-u!cTS
z%V}>FGg0E_C7tx{DJeYO*D%qm@}n->zdy18_%WZtVe38z-o3s*%{3^sH}u%U%IJ)y
z23BM3U?cu}Q%YR@sbk(<pX+y>tgEt0luj0a!Igh7yf#^v)MW=8^g4KLQObkV{Zowx
z)ARSMC`R&Q2U(cfSwgMyKN#D&#zQ~)4*hCmXnRrqe0b;v`w$#2`FCR5Bq5d_60M~`
z{StIyOZ9HiiEp8W&X){T>-D!7KKd79%gotnmJ3+%8P&^Mt(sbGh<j}xwf^)<{1lS-
zX{Ob6<k0Jxg`Q0kYDR&@c+lW@!_{kzTz&tW_yYm`2U=zix~Ltv$~dt9BSY&UQJoJH
zYBuy|wk{cIt5|+`MZC&eB{<x9xUDU-ZArgh(ny%(WOH(kSIP)ulXuY1!}VdI8S#w`
z8-5%f$v7}XINBA`{y7Aq05Bi5a>lofj0bIbdw6Ak$HB<@Ek6!#A8Eg7-L9U0;K<jG
zqR#MRpBU-h>oZ>O-_&_TC$_1nRJ?=eQ)dQm7V^UQnApz<Me5a>;}x*HvplD(4q8<I
z0(45j_=NXgjeAKPhFw2{oL1eWh@1*0nzDf!WuaM{ElEne7ScK9)onQiUd8!q0(ilf
z{cgiVlF;CY>sE*flO^3APRAE_GCC>8SZpv6>aC%S)>%p%ZUvWYj*mZD&=P%IQ;FN6
zh>e!xHZoOexG!iqz5UlLgCr(AdgOgnc$}TRtM^9>EP#Kn@q=ZsIdj7{Yhb2(Jfnm`
zwQTmv@fv@%yG!X<dW1j(qSR6b3hE1a=nM(q4TXCby$U0UovAYCLyaNkmE{plUE?{+
z|4i#lX|O$xRMd|GJs$kGgkUW<zxh2-CuotEhu_mv3pRHiZ5TcAOSF4!TzAb2NLvZC
zrEn*TRpp@bB4M-zaH1eIS!8(F{>>N&d4<Cr!NEUq>jjweQ;Z%|JA8kqt`J5kFpD>I
zHfkX@Z_d`gaMUwsRa3B`+HPw}#>ki!=P=M0+rru&UVI|Gc0K9=eVycN3REs^;c;uZ
zErH3o&<~VU$LY@goAAIFQzHoFP%665RTA`-@F{n)njF0Lckq7<KAFN(r}PE3;3g_)
zdTrN88Th-^&ODDuV!~+ZSVNrlE)(|PAXu@+^$buTrOxi>81wO$X~5QL;8^>KFIDiM
z*!6GffHehB6>v&2M@<P(oWrXD&Yhc)R%rT;0^TP%5QGk0LWjRkIgrz+_R4;DiqS3S
z4CT;HM@0=mx%I3Yr${!`tw2E-_S5N3WDdTPBZDMRy8s;j3HDXNJv`Wq;&gil7~b#N
z+j2S83Pxm+3;}|^#>`}ex)f+U*4TmKaqp$7rwLr%5aoP6p+BY##>jBUecUD`E?tQW
z1LvN;g$kHPJ!16t0gwXji2*&YLzBiY8-3iUDNdV7-|{XU&*tqZ6!Hhe9JBp>w0Oiw
za$)G^R-p$#bDO@XKNwD+iP2<^$c+MXnEF`hve*G*FQJ(M8V^xs(3w!xwGl^w)x|`J
z*Pa!+P>kh888IQZ5_F_TFcKoU4@L|q88$+eAs_F`6>qOcOqjKn;w+SNLlq)+vMe-)
zZo+}lNUn$6$RQIs`T{Z%!skB1o&uEKgm`em^cC>3zBn^VO{)x{a*-g51aGCG2Nxz(
zp~m}UhC*fNAb~L<cUn1FUc7LY92!T*Z2V+XGz)slB!ss?O@K760LCb;#0Z*P2GgXl
zArC=!H3M1(+jol4sh)o|h+hVbt1w4KLE{t1O9{I(;b#(Llm+Z%BOZL{@14nBXaw|X
zcFa`+NBLb{1?(xVv6UhAO4OJQdn?D$=^I@Db0mm%(efdAl(rIrfJGq>F~lS7xsc{n
zXAS0Nh5|a^4%ku{n=QkL6OZf1VWgNaC0O`?sLv4_iT%jD@Z)R`$l29^>(oPmIEpou
zzpPv(@m_Kb?dE<%$pfm`)=i9Ykea;fNPE%vsPidBZTfzZR7G~+#Ql}G+C#{%Oi!`_
zU}*K`#(UczMQzmNYnY*%V}OvA@XtAvc0x`)3RdX>O`{}2++$NQg2trHX({d$2Y1D;
zurM^4y^AzQxKLT45CbAWT;*`k2l$#UVvJHP<dEs@!sZo-rZQt!N_Z0!Hj&2FqP}}d
z799Y0%Ja8O$Pqp4DN$}Sa<d+BQ{LuCVU{GG!$e<<WNWlXC`Z%VNUGWvl<o4ziVdfe
z47MKKw$TEWOfacJJuhY4mNQVDeB?+Z;PCmTQkc3M&}C#RZdPEXIl9y|;-6(mSKLt7
zN9#uK2f)}jxU!qPDS?Dlsx%Dwh!Iz`f3MsKASu)Q)$P|b@q|?$wxh9EJuZx4AROVO
zuDAwHcQBD{+x`*QabY_p+@84QX1!NP1j;SlvS1oUtBxAnLzwssqlZKybMQ(}D1Q((
zQoJyiBEE`Hx3IEq$`H&npi`jm?T`jQ&`JKED_59tkq-)cnR1FCmsf<h^hks@ibR$t
zB((^`YQVN)fHs!Ad|{Vuz*d2Z=Mc;!L_G*5cq_nnfKSr2lP27dgS*ejPsGVSV*BDd
zkgk#49U=djy`G~IY&#3A$BbN*6<U+I{HFuC53<l+t1jjBDyNsnHm@E_G~)=64eqLG
zbaV-E*;m>KUuY?6lKWN^z!AjD)iWh-K<@xTl)>7PNKFb2D>$ytTi&(iz0X+)%^e1}
zpKsg+>|}~}N;qxDLJZ27P*xA{AgToZLqqWHCTt^z;?G~giZ|LQC|z36lZDTl<-~Iz
zN9`P+A0b_}66o1+fUR_*#U6H(B$50t1x7!x1Jh$p;c;1zz5sz_@U4a7JGiTzM+nB^
zKO41^RwZV>(SDpP>MP<s`LHwGTB?{R15U)+#TouO+kgXbwB@-R6|V4f{$kBzS>&x3
zuz?3ppDKVav+in(K|g@~e1N_T#tI--FE9`=y>_2IYpiM+dHOx&T$tWQgvJ@s6<B#l
zoVPv6Fe!wkT2Ot;Q!DWsE#?ms@qG>#R`|Z8$>1~3<+b0yy2$Nxp|LIpI(8PeVGjD`
z3Z29kj*Ry2zX*A{zx0vBpS|LoQ4TYu2#X(2RopaCvahAxr%RHpq_CS3G6#6N9RU!`
zvDS2=h8fG!$H_-amjx5Fd~^*NPKF*XUUZtFo|l~^&CAr)TMJ7wH(}F#yy;FhCR&IQ
z%bg9Yc^T+w8=&4wJqI_3n|e()9##-+U~5Rbs%7V-?Zl!n46MwIXu6h0rXFt`Y2yT%
zqpc&ui=jc#b)-7F++pvON=%olFa~;Y$rF)qU<Jh~KD<K?;mXP8?lIRD8?WW75mGNG
z_-4cYR8Ep)0-cMNi3k=_Y0Zm;M9Ad~p;xjxpjaPqj#F|cv8NE4!$$r`)2D|w<LSZ8
zBSQ3$RJXRAQpp|kA!+%l<HeGuQksU{u%{DqP@NF$#V&i%8d!jJA*PC%rZSCm_w_rk
zQznDT8Fl)-_`z0giSCN(kb@``;lC5xzSGlpB>_uza|7}L$}ort1FiW)4VU%9zoB%5
zd@QuKL!jga5pl5bc*jR>Zz)zIwT=10FJF!15mTI{7(_IlvJGRFyhyx?j2n{$OCn!#
zow05zUr$eo|F(y3ja`eyD-m}M3M@Liglh`pKLj4*<mKF7c~q!&%?%|5xTJEI!Dzc*
zn6D92WUN72ui(S5oRSNh{yMKv)6LQYg_FlnACNicD3qP0LC?h#tvnC{sfK?Ld9Y6M
zB#)Ve9uI6g6@K6%q%9+|ZYhL-JuV)~bupx@A*zjgtkTf%lpm~LL92QtB*{TI{Qk)F
z0lZou_i~=rPM!#F_bd=5G7aDOA!-s%0OE2>3|F35?%%x4;}0p3khh+)3>0|E(Lb(u
zI~ROh8X(%R$e7;_NZks*<;ddLyb8;O0<iQ(j9a5Qvm3xoCWf>Zs!Br(g$(Xbx}Knh
zZDu~$;ilA21ZoHBj0q#zygZCmvK$TufiuF*l_l-}75TNivTQWJ!4EpVW||h&*qeV~
z!*ZNs!}OnPVpm>uSo8h%hQ|I^qOi>@Sed|B28U$|=j96@|J9FO^;$@>Kl5(W#W(BM
zqG05PYacEiNUW8?Hogt-)@r13KU{kG)@KWnQY8)`nAL|JAJDJiY3w%+Yd>!OWA_Rf
zK`;N-$)P|!)H}9l$AJ^ze({Ds$CjvVTsq(q*1U?Pv&vkEcd?RY?7pA+_m_#-X@f6I
zmmIy|TC~>Xw#!6BwZ_@;$eWwKjXii4cy?mdgXS$yHmRv|RF5{O{n{?mynyfR|FYZO
z>EX_R59eRPoDSJg;dA>x?^o}+_~=pDs*BslU%|fLCf-H4_hvGOpC0dvTp-@!+}O2g
zJFuQx_~9PL?8Cnz=6!!9@4k1(<*aDGhV-o}be_YdikrSZ?@yn8>hbXJSzFIX@MC-T
zZ}aNO|9pL{P5%4++Ix2{-g<I=$%Wa%6HC4+lMEdDKa6~Pw)^3YPpbJ-QiE0B@rCCe
ze6ZW9TEFVi_;z>l{Utj;?zn&FOySwFhx<eq-o<{8S}1$t_ScU4+6Pe&v;XKXTiD9#
zz(*M6$_7g8YQo~2^(lEe(ukxJr!WLhLEqUU-FBE<)`#vzZl7=4C91qwq^GdeygQM1
zb2fG9tUi@n{^8<2Arv02-Z>|v#W+E(<3hxG?S<1H?_{t36i1Y&iP~p6u}QZyi9Eqz
zW23{?y_e(FjqpJxBl6u@F{`vZEFCoSg|=$9mOtk<NM{&MTU~p>a(tb`IjxGVJQA9j
z<ImfAg99u({7inP+&E*+2N`FYR0m>*mi5op2H5#wCen|`_Xoko!G6G)eH^bd%wtf>
ztg;u@VOJ>93zQTBk<;~RraU0Ik~?e%fy#^Poi*blj?;L^hV>r`j~y;|+m|H_w__r%
z(l+z*8R4;$RjVK?5YAa+d<r8p^xp8qL_0Vlech)f0$t@-qEp$GHRi-%N)!9-T10uF
zul;oHSvaB<8g=1t6Y28WHO%#n{^4LPN`pU=>E-*#?{o3pTdDS>k96@9ieI7js*qT-
zT#YH44fm(G#4*-or8yF{#=4AT!@t1#N2e}0;w|1tl4q15!%^P|5uS{+D<&HDZUAal
ztwNm)fEc1k1BZH`tK_4|;9LyKzo*4<Q99Kiff`-5))mI+cgR52Qat4hA93sDE^tu9
ziiCX3d<Y`gflA~69~pd-tf?&&(c1V37C)$`M?uuHu4B<fP|RQ{jM5=6uKZk#_l{hw
zlIM&q9)vDzjUXriwrt*}<0>v!OstXMVzvzu+oE%Irk2L&5+I`QLJ<*Q{Z1wNVb`u9
zXbH{W%#++84`wb2?*JK0<l^G~fVC*ez{^U8O)VBRhw^a;dbsLMBepBA0OL>{E+z(T
zM%wXVZkZoup$sw8;11B}LQLDcRjF%V!anvu$`L|)=gDAdoFB$mAR?|1VtnZvSo*@7
zq&Nk}v_lvcipHzYD1K*&+sxxU!4ORXuEo6s>nXYFVieCjgH=Pf<A<2{Add+M&y&O+
zj~f!N`yj))x74X^Jd3eIEmJrObnHG*qX#>v>C1=oPV<4S_)p-AzLQQ0v1(bTaSP?D
zCe-o<oOm)1XF2D{kMDOMjm49_Ik|?tBE%6rLXL%0Yc|xgt@x0@Q7B$fDZ?7e-x1gX
zT2eB=ebGhdrc$B73MPgw$Zd7xTqe3^{LZo3MDSjbXmmz0V8n$wwN?sw<3YcTT=zSc
zK&e@gC;@->suB6TT+Lv<+{-f;=gt%PC2$=LL5cZqN)cJg1P|69HD4?h1-fRaec8r^
zcv2`$E&+%qgro8E?&JuO>W-5bv}T~IBScJA-Xhy^i`Dp;Udv)g-Bfszpu;tJm!C`a
z6bO5C0Mg-bW$_~L$e<k1Y!tHJHU1EhdqLyJja6!!d3lRf+$7w^hSRMs%3O_b;VW@O
zA(F(aWQ_abJUWErC<Y*Klab;18`b6uL@TU;)QQ)N>y1FJTg=_F<!*Ow`nXX)ISJU|
zbBU$^xqk|I&7gCuTamoP`Di9VGKi<~qSJ44)og+tiT-JDVE$Q{otjG$M=aBL&p&BP
zUqs?dVI!f$#1hp5E)?VuI=DS^;3v{vnM-yx_4b-Lxde*%F}Av$V$#4xyYnMNc{XnG
zVy?zArcnI=A7eNNPSBKaWEB>}@)UZkbwUKm5=`y&T8xEUsG0f@YmzE{7O2c!&M>@V
zq?BR3c~E4T0`pucRpV6D2lN6JBU!5)iIYyn5cwEO-o|!Kj&QJyi@3c3!H;gkR4agE
zQ5MxHU~Q!n+K$uWKwVDIqots?5;>ei(E5)!!HBP+EsbMe)%-98I%?qOb+&t6!S0IH
z9Ij6BM<)Y*fQDo#mWNcH0SI%mCg0dlinvjB(m|#<N~MrM+6uVP0=81@TsgR|Z!&I=
z`Q{qk91UrfB^uNfApZg=IcN-l$rM6*+&!8yI2{6Hv0$qna=#L><{;y`+9%M(B3D5F
zD(agA1`5cEf{-WR1H*BZZlH^|3eB=-nZr%G&_7aq>QacTBsnp6TPq<=>1uht3UX7f
zTZ2U$&H|1c7zt1cdLmV_##4dz+(>?{nziYOrkr3ZiT~%m8=V6s%mFF~ytz*ggkXL>
zK$Q-90_asc#H3{FDx%uAmtQY-=J3kAgw*H;^ykPW07q+nZo7D+Hu`XrpyLo=!c4c9
zz#JuP#!a+R!mdmof)pMv%==Q0pbu~xG2H<y=bnW1(W@>87S+RL?S#H-0hN?EnKOJK
zkVa~OZpq<$HGsu|WwlVw$?|)=<ye_6iz}?Z410mJl}-Ypl;k7@cJjqFU*P2Jbji7h
zuVN~JkJt<F<VZ*}ZKo{-S$ZvBpO@{9`hPU}$Z>b5uyvo+8H9yeN~B9syEmO@bW5Qg
zlu3Gd6zDN2Sjn!SLLpWP*HfvEa`cA35GcXuSUHJF*fj>fRzf=-K$nuqfCcMUsvC<D
zCq81%gg&D6VIh2(4Q42oG|qNo9O4p(H|5h!lrdId%Y{_Bsur;Ui3ur)wh+$VPIJ=@
z@2W+#B}k<!^+^WObbbBzmP{*IF(O;x!K}Y>1x<A!W-_6pWG_t#*>E6zGuZefOcU!J
z<Akwg``o~KM`n~QUyJU<cgMn6)6RMn=#ozMm)i0_vYXxb5KU0<F$*4f74>5&+S%4p
zauEJD707h5U6Yt(r>M7dCnnTv=z0MWS?jpb@sX+PX4izToq#OGHAXz-cqY7YkYo?w
z9P@owC_A>(AX$|9WNX>)jeA_V6ero5Ct@RqQAjTi)>DL($V>KrPIQt~q%DK5cqDt&
z7?6c#xS~dT9`d0vPmc-jYTR?ddG*^CsQ#0kPQ9(QFa-^NHghH4r;{N8)J$<EH*K(y
zmn4lRqB9Tlvh4FE$&~}#^DRQWbT*>kL?OH~2~v{)#ZkjMOW_sQmovnB&=hl3o2`*-
z>*H@){h81Q*E&TkOyjg!QlR9u5J`$nkT27g!{2H(9=2yrD`F9fa{*tq29Z-PZ9|K_
zh@k*}+d}*OMx1#OY{Z4>m9}^NU>hmA#xpS=D=9n^pM!VJY=O}$pfS^-X}IN$t9A1c
zGwR^cm&;erZ->ztPHt=~#6y1D3ZZFdH8GS}8u@_Hvzr!uHwK^oBj6l6029#h;K!nx
z!Jewoo}Dq=7yVf5X<w!=3?=A&sEH6)&4*<@(twVK`YtRdICAn({Q7yxgFUbWt}mTm
zz>RwQ(jil4KIw|1akYzAbrgYl;_tvH-%mW4XO<I3lRpZ6y1EM%$1((NbhndxV`7{R
zOUZ1n`}uA<Iwumuwo|9TZ2qw?C_FSe%(B3O$~3U#v6sZMjxRV8$Z&HW*IB%b<?vwS
z)PgfEfA?b_+MIX=pBZZ^&qe2)-!WJs2tdnV=vVZA#n}P>S43aTDEn_mw6?Ckp|R<I
zsD5pZt(GF2BTW|FC;ls<Ki`{Y-FM;QrQc<PLzjoI)DK*}(Lf-K+_@_s9lJMv*RKG@
zDBOSYGyqaOn|wJnssHNDjEMdA!=HaC|0B-c=ThccYFz00BTw~f=F_4#CU*M23h{=M
zEY{^hvR}}dMgP&Tup%0iCBcRJ0-Z|@L&o+KfCZgnh2a+i$WGHK?@Bj=U29VWCf2o1
z-#O%+{Z+jbe{}SaeG%t!qjSnlOmJ9ebEsQ=grBXEdCv$cqCYXX-sU3lT=&D%sT*#G
z-#pjz`20=PA4APy=l^`NHu=N<BhD5mdJ45|e|tiD?S2&%(bKS7PrXVf8?HD$mxW$n
zD|G{@8vPm0W9?nm@&o;6-=QM<n+GFM5&h%dt?%v(|A_u8@%IHR8GYyZv}KJ>)^UFd
zMO%@ZC?X4fL790)WX8l!fwL{oI^4FT%nx*3kKDsX(x+C+w~Rez@#OQ9`(e!O(Zj3A
z5G493_mnhmef8q#vz-Czu?I6B8%^_BAFlX6%DKO0(cqqvz*K&EfGh8rsj<zec++=%
zdZxJ|Lw++$ot!Qc+*umin)<hOp7E~Fk-}#bbK;nB1|@J#lIEWY`?G9_B4ZV-K}?@w
zE<x$wHKO;XBD@K?b$L}G(<N}r74zA)wePH@&oX8hRmQuD$2q|oo5`mstge^`Q@LbA
zPBX&#qv)wvxO?(-VE%B)s-_~k&e0u3SscVqq_~_~Q{3&3$Git;@C2W=jr>v~*JBvU
ztk7S-vx+EsMTtB2<Cd2h`J^m|<-jz_dXMe2wPd02#i#<VJRwxHvGzfI_ZRD6m*rkF
zNv8HoGq0oaxUuk1|KP_jDcHF;_C>33>tuB+Xl{EC=5MqOR(~30c_?SVIF@Z;JD5K~
z(d2~UktH+3&3>VS85>z;#;{CQP%IHfL?0i2Pl+(B64fjFw;xoAY$Ls&Tpm)mUT@Bu
zko<LR=4u$*vhIh^aOh*#1SNCqZL<F@Gty)!IG+4zrD?ODC;nRgik2FJfA?WN%U<0H
z?lMTV$zyuWSv~5^FZMm+WNbERbVVg;KYoL6TQy60;7X|qn@5^t;X{mWuN-{*nSbm~
zKCdTu@O|&>48_oJmK(OnO7Ml^pbiDGj;fCijRhzv-EBb&j3O2fbQb|qfkY6T_o?th
zHfsR$?J`rNp{V#Vb5Dt|B~QmG5R)H%CbS`uI4eZ(%y>NX_y`y3zeE0*uN|S82C>4g
zm;RMLk2Wu2alo8IF{aPE>gn`^WtIQIR~9BMu!fFZyow$meDQ(OL^_pIbeKHWgMX?~
z^%teabdpQRPvzyU^=V%){BS;sl!}?^{TkvAwKWaa9OM*h82V8b@)lmT$}EPMlVJ45
zK^$qc`K=XxYd@)?lqQ34btzs%{R5Bc4i8O)l)5#3*C^5#pQ2>rgGBO0T4P6tzN+8B
z(Hfpnk~sOc8N!S&gNueSe!wO~yt~uqAd7RpczlyQ`4g#9cqwMy&sx+8?FDcvhxHd7
z2@VRe(LHP^?VK7GB<sXH&%rM>a@drHKWw{1lX5c9Z5=-}qIb+giUGBsr^LnKZKirR
zt}k?-HHU*kqs|?b%+$Ow#PDxx;*|qG-p{B?^*@7uo?N~17gw@mFx#xEPy+ojzrNu8
zhC8e(9oCw4Gr`Ko`w{Q6#<zLvy)`E8mifD3DvuQ{`4U+LF~y7gV{kd6(&V4w?2A(w
zQ8CLfYc9lq0aouUg<X7~5>@y+wc+0WSD$N`e7)RE@=&uhIuiHr;o_|Rd&mlJp;~`7
ze(TV2%*VFHb)Tz^cMXLt!byaw?WdbfehD!<cBX264c1@~TD{j%Upm*0du?j6Tbc*f
zW#`-*+L}L}5Y&_#QY0BG`{&pSJ;TaWvVg5|;BtGOoZB9?)D)K%;zJy{7tYf8-LF`(
z`)VAQq<5w{zrC2kiD+MR^etXf*K&D@O0Mp#;dHp^SPyj0ZcUM(hVhGiZ2_J;DtL6b
z*@yx1@HLj(Qa^_pm#p>NXo`y)+&0P_U0SZ}(_VEfbRrm|RtFQu?!1rnxiq=hZ};se
zBg_1N_YIcE_4aCo>V<YPZ+yyGm3MWwX;+-?#jp@P`}eq~_>w`|WNOyZZg$L#!AG5C
z^G7T9`9EE={QZ-T6E8oGr%OIruE`vy6J9O(Ei$b5W#`wv_<<!GZKnv=`@8(_Y#Lqv
zhl`23Tk!U`{Jp#VNl$0jo96xLZDQG-&^hTZ%6_nSA4^_V@hIdA<*VC?-5V;GeUa2s
zoZ5^woz1|jrndi%cfjtt2#4AC{V`8-x4lZJ9iABPd47m~M_TA{U_bKQRK~<P6)n0|
zy8}XiIQ(SkDp3t>VD1X1;$(SB_{)y+!&g1;oUGV>>!tC}xoceVDb&L<WonRpoxS)}
zRsF3g3!m>dbe7xH91W*ihm{}6Z#`AV3OH@Q<2y?A+v@P67Qepa`>oW)r<;66U%3r@
zzb&XZePB9#+WRp>3qNrB;I~`T^M8K-|8_)wjEXDHv{^>XgeLqLYq)c!-Q)JmVpPK-
zA)oD76!A7{|BvyG#b-NXZ@*nO@Z-L;;%s+H#Jl*%|69ZIKt?_%EsA)bWbkw1`r>n^
z>Q%Sjul4!)P+oEF%+ZzPKIYJ{4MIEnVkhUM&ZNzExQjJ=VH0P&L83h&X@n|&onGd(
zDQ|)>z+wdYOD3MK-&`1MlnX()?x%B`ony-T?dscl6{5HUSgf*vC?hMN*!22`Mm>2c
z32CBUA^sn_*2YB#ZulKI<bu@-@xQf2&y1JbR%!`0>@ghK)V@3_=1x>VaOo4r*jb0U
z!HR3$XP)MT6`b4pXYx)AA2IW6m490L*TE~yb)zo%*GlfZAddfvYZ^59g7FJF_IStJ
zm=n^HMCn+83w!Cj9bDp9qp#+d16>UnLqrSd7v}3Vmb{S%z<KG`;`7Zz9D?5f=Hy<L
zAcJ9XEx}JCeunz^?~6BntMW1h3$N79KR8@mQhmlI?^}x|gtV1J;V$gTzGa(_sq8L^
zh^N{wB_x?bo^dmc2Wl?V7+$G87XE&f|LnsBjOh!jcHPkU^XH_2YVP`yOSAQNf4%lm
zegBV!WtD-{5}t09{$o~tM7>_~^3N<Xc1Cw}HkiLkd-oxmnD<Aj2kM`{>zkf;OMi>B
za-Yw$=HDOG1Xk$P-gdOMv#{4aPg`_Kf5Eri=nLRxx^8x+;FCLzy@=L(KFLAPr4_QZ
zW7)HnpfaCs-vSw%3ct2%@B2u-%}eJbI-c6DdwKhoPp@;WXn9qxd!CC$-z>6S-l(#*
z@gezq?b&NNx8ynBTDhNN@wI5xMM%G}$R)-l*9X$pxtIO*C}r;hs;e+2-iiIPNMP0w
zuyPJ>E?2ji)l3-mpYb3h-dDHyy4y*LRLg{lYt#vg+!eiecUJnw6nw!;s>QjYkIV84
z_}k=3yLd0svId3qa@zul-M6}3_M`Ted_PFGyFlQUJcoxt^w?~~!4$k9)7~aMu=&k4
zel^9IZ!JBoF)iC3Hya`FcbelOA+w7DBnX-)qjB6tye(a>0yhsN(LB9S07|MUF=p2K
zO#SyXYZf0rr)}Eb5ODGVl|(5c3iF8+$eNP(Tw#i?v&@C+A$}?ZUEsGS<9B-C9XJbY
z#;76G9VLoTovm)waa(b&nA@I?ZPS#0F7H@<IQzE_{M=zi;@PqukHtkws<i~x;F!BE
z!n^RTSAPOCo)}tkexU?Gms4N<pgKm|6)=M?#!}|){Y!sMJGHG;>^L2aKhB0t)){8i
zd*;i_c~@W*<G<@A9wpUmo?L*+Vr_Yz?q2wn-@F3=@+}x2=!*9cR~R!(L#o&8y;gRU
z>cZO&squV83b?#lPy&2#PO!JwMo(T-dkym71g%^&&s<u!mxEap!)To=5(xsyxiR)U
zUw;q$vRKABD-;Dq&N~nD`>O5Je3?sq$5T}eh1Pfz`3^Vfw$>N$2N;Fc)R+j!b|{Z9
zyCzQvUnt(hlGHqL#z#iukKNEL9^F!*Y_Jo+JH0UDm(5o`s7Y(oku1lX9!6-Np{lWR
zEU&(Rw?$OEFW3u{w$9K!vgTPN;%bf8TgRnJ4;1pCv>RnXGo~d0^R9l5$rt$M#S&1Y
z>4?i>yM_h%vL!AQ=mQlrj@7*I!VF~NQ7F`^8KaeJn~XS6YvgXkY)7%&{vQ|oAM5au
zrd9NmN=teDHu|<w$|1E*e8fZ7_kuu#zvjWW>_RDQK-vBysg`Mte+v7A)#_X$xEaZ7
z+(WF(Ujida^Y(RkZAzd`pX%Uxv-&a=$OMojRYliEVKpISbE>Hb#Y&(}DP`>n9hYU(
zl2=aKLtXIElNPoDaO@#qbIjpRgeiq}DTYgunsj0qdnJWSYw`KtEwB^_yUs7Wp(&(f
zUl;d4A)5bFLba7dHIDhsRLD68-#iMeIL*7Shn9%jPOYn~gzW>QR=U=BeI>+vi~q&O
z-=3&RqgLORd#rq&Mx}J}@;gL|&~4v$-=>2DR%|n7kgFGDZDUVxLhf1PeXQ~OO7yGz
z5vPYcY9S6=-v_(ikQ3Re&f5OhFoh;|bWk(}P#TXP^9nf$zMLar`3=r*ffdcP@P?-8
z+p@j&D$lul5r&j{TS~o~4BlO=36E$F1@Eczz?1#v9kb3br?`A6)Tas6K}z*6F;Kd9
z=1~HRUr-W8w=C;}W|!j|UWS^6?q9hM`Y>kiD1@{h)ru&VTfKr-#o^DFc3DbK1juUl
zd1pPVBpUOMiImMEuOn|>W~I+qESfc7@xy6t@Z4$$;kr~dLLt{$jyB@6ybGd<h@I3m
zFoOt7;b(-V$9=Bn*Ea<WdmsXMue|G=)3#rwj<pl>BR-Y0Ek#~7+H>1L<%l3|I_Fhx
zf!PD95~m%xW>qvScr2$Tip&X8^Qdo`Y018yPIFdn@aUTrexo1Lmr8lL`kYrP)&Mg-
z`JBz}H+dl<^Nuu*sU@2vBgc*&JsxY=wEwWW_M!(?3--QkEEL3eC7)%)+CAp4X@eGA
zsAtD+Wk<z%v{qK2LRozq+jBZBXotb{G@d4{M)WRFI`EcOdX$t47P#Y$+!A=JU0U#&
z0t(d5*puQ}nvsgPPTk$Lee>+6(|ad2-<%^v1=C*nl$N5lYv}+ahMD4$4@Y<1!3gYA
zE@U=b?5F0NjTGf6^0dEgGRqSAC2G4w7SGl1utk~6TkUK+bpG<*{A<T1X2_+p8}e&{
zb=Yb;I}#Wh{A7NEgL-PazikkFMV}p!+MsxoLzeh*13NaC-udnKp>L|)D%&lt_)E{P
zq68Vv&aBO;BQ`&hHtD9+cX|k(-n@ABTF&T>Vd|S9myh`eu4Q}r4hpX)4NS5WImN7U
zndZpvmtzb3QbjV+l`g$4o!|0T8`^hG=Y0;_wcDvk??GOMdU1ic4SrJm^7Un5+zuUI
z{O_b||A(&kj!WwC<A2XNpdP>hsJIo}Tim8rC~mEAWL9Q4vP><US!Mwu;tW@=?1Ljy
zGsBsg6`GaVLbI}AA6I5&eYCy3e1G?G@BQok%U|%<;k;k3*YnAVRP?T}lA)P#yfb{K
zNbJkX>r?c9^BrPH7AsXMi%*TdjP@EDjh3(y@0)@jZ-YB8)_H_L_nnay19soLK@5;4
zM^77cI=viOwJ8{!o{;Pa8ZMO8Xu5TsN>KGpDzTfn(;|Ckz8vk3KxolTZYn{FZl`oy
z&f>B6j411WOh7mxf*qf>EaA7Uu0bI`?r<V2di`MS;Vm_h2rE;VECicKch(6Y-fGqD
z!*xUZVTtxo!R&sSo5xR~ki)lgY-=o*<mVHRZa4T?&4a{1qYI$;IQY*=ge7z1nyBly
ztE#mkc-;@-Siw-|>lXnoA&OfMG(f`{R;J{3qCmhA;m!#Z^oga4M3eEVaS8dke7PE(
zalC|o?0dn(G#p3y$)FLebZmL>^EVrr;LMMQ809eYly}l9;ih}mqcE*w+pjzdpMDha
z=Mi1&an$<9F&6S}yB>=ekM~Iww{$P^r<?I|4&mGHC#~P=?C-pP*Ar^#fwON&N7|og
zAQgS79-mvTF|RzK3fAfhpeMQO^$V{%Nlua6=_w}LO-`UN8}QUnQT_yOYmJ=4bL=>k
zfp8Gz{iEejF`lM%_}R7)wbS>WT~1cka0J<y=c^6p`sDnUX^6tQ=Y4KhuO`~~mgGA}
zULU$*W_k1l-S*1Z^o#p{UWm1(C)Q6-?wWp_H635~git?iW#kLe6phV+<Bf@$FOJM5
z!oR;gj=0OVx$Cx)&Stf<q3~;lPS=UIk6^wlEvJv1Bp&{L*2d7`ss(N+k76t5s^~Cv
z*kEvo`kHmEHv87EfBjxORMM3Hb}Q=2pMR5IWNyS=@4pC}-@URv`rov3Gseq!g%wp_
zw;9o|Tb@<u4PiqQ6KeqQzV*&WMM%*?K~wRmbWOQx(LXz0sQTU-+sOzv{};<kbc<j-
z7aSbPWKT>S|Fe^$IiB49B=LB^^7~!p+al{cuPDEIqBiymaNqlK#1Xa@9a>IYa84Xf
zjOG1J&b~T8*!D8hO|#E80oG<K-1-Qh^Ho0H0>|bCtE-dJGH(W{WVhxXLWy{W^AmDH
z<=A*QYD1$sg?|~gy|lM7hrDq{x<t?Sc=Jve6rZTy%s1Mc`~weUsinvXuPBG3ieHdI
z*Ci$1mw#Pk^>1DCTKqu;aW&DhHC)wJaCpgKRkeB7Rm0J_po;`eKIFiVHx4+!3g`H>
zU?;mxH7N*X$>H4J>3F*HMyq=8Mj5mIbmuqzD6>6rjbBKvMU>U4hpDyTo|QLlhR=>2
zkje&Iu^wm|l%-Z#;WkATB5Z|nGJHGBP2#-u@Y!Wpp1BS|H}UO8>t}k%7=o%ZH8f{f
zQ*4)HQmQ*&W6MW>e+Vk@0b6>RF&{kb`+&`?V+*=?bP%}Ll#|j*r9fd(poDzabxJ=?
zy)*>bp-)dE#01&WAWISCjSM;;(H8s++H|@z@ZrJ0ez{*q|C4%Y`{%1o=-xDW!Mf9j
zT@_Bitx=EAMBuxq<b_6s-kp|%?yw6D8mYcN06h%ex$=`?t|zL%^J_@h)H0x*sJjLS
zd36O(SXPdKCuLkr(4Vq}b<XP5Trxx;LP7Cmc?iUT<W4Cfba=ebR16(c^)(&F*%M16
zB%EKdg)03A_{Jlf_@hPE)0*Lm79gq~3J7FLQ_kp??+<-qz7!FBAHW!^Hc_Fwp-sEP
zy<z|B2U4#Lc$vVe#Ise;D(+qTqw3=EB^IHQ**IZ?*mVfZOR<-bC4~=Hw|1Ruw&<Ba
zz3tm!Pr-EN4%~UPK_eN2?WCy6RBkR+n+kI6co-g+luOp<LM2p#5_PUwwSWrn9182t
zR_59oQ#H6Ksx4QlOq1KyQld)LBJ!+?uWFL1_PMn@e04`|^BUEn%39-O2||97T9?PM
z&Z)NI{iFR4RgJ2bi&H%Rj;BH$YdtAX)x?l=w0L$J3I(qoye)~2<=sGfbA|O?;ufx%
z0$+Fgew;7TDu%i_hMnf)X(&Zq+O%>b3LZsp@5(*3M+SFnyC{D~Bw!*2sFu?td=g1o
z_u%#X-i7a7E#r+oWv08vdfs3gxOP*(nbNAODQbr8{p<9hdXj+xOR23*K)P^VcS>OV
zX?s`*QsJ;hDMCpfqn6<55wn@(SK5lb#7J7Y&IbXxO;@Z(xEIx>o_S`?2F}$7Vp4x=
zK*d${16(`#RabqFY3Qe_dV}ggKB=G&l7Bk1pSN}^qcCc)h5V(B?opFVanIYF6G_#P
zo(^zxa&V>I-@e&%p||hDykM|RG_(J@vucXW=*L_ioclljqKmN8Zna*@_`>Sw=0K8e
zrK_ykou(!Jy26gSlq%9?wXW=7*sx`WEo<pCMnZhPRh?qYw*`;n3PnMbr5}qJT~*;$
zQTR`RV23|9On~#$>EOVDf8?;WHj!J&1l@#nWr6yC18g`O5yBPuK<zrZ8&a1}t6leB
zIJ1hRCH$hVt2vSu6;`!xMwER}ZZ;ULoUvG|ueIE8LPo;3EZtzI`gMjR)q+)t>;NT%
z(rOxqWwFYSg(JlkWRa9=sz70#>EN0a<ZQbTGite7l^Pb~nW*ZEQAnLRo6^v~&!;KZ
zN1~WOG>NL$St_#&Do-4su{=AQ%JZyY145XyY#@~_b-9TMa&v*_Gr|!<ym=>zlD2G8
zW&BGCIB5Ecy$^CiKQy^N7jvH7=z;NrfQ5zg!SlMk1u~~%gAQaj%=Ucfs}}7HL4t+_
zV*`GkA@2<yT{XF2{QYYGvIwb?z~~m*WrhH<*$wmA<57}Eg(Yf5;14o0|Giq$?=gA9
z*wV)OT!V3;?}+Bs+Oiv!cCwT)jaobtC<N$Z#`Y;nKo56t`4b5>dG}NAOtQJ(y)A+5
z2aJoK)#eqynUF0gR_<OK#CdzXsY1!T8~l;{__r?mv)5XxSszLEKSvI{l%<vWz~YK)
z*YyYKV>X5g*B%F5o856|^sb%R3zL}={TGE|u15R!xxz*^S$B4Wy|uYt@N!ZY?R~9N
zh&XEV<idpj%^xq*F`6HYx6Wrezu0nSE_Jk#{_@STuYY(Fz5F`<(rdxB-{@D*_78Sm
zAzb@#_<`r^rlbWix3+yu>~i75<v(9B!NXkzAAfgiN)#7Mnx3*p-Yce@YQMO4a`&+p
zk2d`Gd9|@|OX|C88+U&h^U4iRo~R4nuwnQ@{3$@jN0fCqKJ|C>E@@h_4(+a7@_LQR
zF=7}Sl@JGit*%4te`NikZf!aA@qE?u9cQ}=zQ`f_X*HjO+`(5U^91}v9rSbF_=KC7
zaj>-Rv3B`+{`>gY66Q$6zGe&9@4zmf>?g-2LtXnp0jQ1ocMr4ALY}Lix)@ylm*Kwg
zYy~!TBom9$Wc9v!>VJr5>~_;hw?N^qr4pzo(0m<cekRLIX^P6RrqNB$xYDH;SdCA0
z>r3UPhBI;*QeL{O0Vl)6IEE|6c;(Uc|8@~6-5M;b8m{7=^(&d}jXJ?TIYYs+r3qF~
zA0wZA(cODvPig%=w?x?zh;95X#p+FcZ*may-=6!}0&^Df_v%%EU0OUEVAxf>3M+dE
zJcq{#hR>`a4M|03t$>3@6U4WIu5y)Wn!`v}8v7YNYAaRL6yI)8Kh_ke@l(y+kva<;
z(v1f7DPTL7$(H^sR-J`Fv<-8!zl1_4Ppds^x2k964Cs9rY$Ulhl+pw_(lRSPC>vU~
z)LlHF&@zOy6En9Dq49wskCBD~2hRY3gYnEfNeK-U1jHG1BX58-EUPnh4lpt2#&8f9
zq>vPx3=m=HXS!LTyvN4gcnFFqso;wNjp7-K9K#yiPNX6$Ug$>Z)>unO5~1j#3Qs?N
z=$?Tu=S%Ev<hjpisPr^q9c?&!MM);u_qo#hX8oN%ao|uSp)6N0WEm<b^rgS{5V@`)
zcM4*7wSRrOB!8@v2W*fSW-NSFm_T2@3Nq-~7CNFFM`^(+P2<}THER;}*!r1CtUHu#
z?QtAUEI8K>Ag!FhXlbBjldCa8rzIf5Wt;_a=+It!WVHM|n%4Oi`X@^sX(5Fe=@HrA
z=dto)wrUVOJnZzAws;UT;o*@p4t^iU4>|`jH3H(KLJxD1b1dACMUiyb)HbOdSj33B
z#0Sk|+OVUEv=GYGXF2CMMzZTFd+6qzF~IHZ$6}rJExX#A#+c?pX!9e$dWto)wdx2@
zvFHtUXXgh}*f2}cgRb&EjEVU=0d9I*r2T98L7q5D?oQBa<Ro^8yyhJ&CpXC?5n=1{
zP<4}F6a{Hi#W6?_J{Vi{fB@q>PQz_TWjX(!$tk8@EKM@UDlxe0G%gEYSGGJUWq=?T
zT8MGe)RDffT-fdMz(~mfXJ&_Jc{av&wJ8nx5qorfak1VJ_%&JY!WK7BdeJ5@m3<PY
zCBHrK4nEI)S-|FoiQsgBoLcbrN2!`MVQi@u(oE|{Wf5RVxQ7uE4co=7w?cgAs7J=Y
zmVggT3yv}%J0c>hd2kRmlx#FpT7N^{J)>mx3-bDI-9>y6sO!nbz8J;zs<RM-)(E+F
zrrJ6RC>uLd)+rEJZWw~&h^|O2ifY(@E4k9HHfz(Q{uwPC^Yz};bB>+>-A|3Y5}}W3
zOcyextbid`J>L^qIZQii#z@k$0WsofdO^vG=brCl|2#j|BAw<Yvz`)2=Nh{sHTe`7
z>7fXZ--mbdNH@XBMYIyb+0>cUJ2Bg)zpTl<U`@L{KBS9TmIz?*s&1)fD<2<?KrT7J
z3dxHMXh~4^Dy}jKnR4i}GCMQ>3j=qA3lt2Vp42=k;>gh%V02T3f#2i1vI0ErbD@tO
zVns38wQNTH=!_y92g({o8Xw!Nq`f(pb(Blq^$1%j)!I2~W)#`V6y;a3hXCrpCB#W@
zI?|Y2RN}9rSgFcoMb?kPrehW7*J7fzwC<yJj)EBfur@8+6yd_&JQby?a5X-yADK+a
z#*JRY8YJD5RuYxS{fY@s+kiwx(2Je7G)N`19_^{Te=OUx_y*P3#HZ@WW9fwpO`oft
z8pr<ip_2L9<~NW36&>f&f-J}Pq(ys_Fpp12qq3r5NY(e3o?q^a!rzzxoHhD{G+J&3
z_$vV90guWvfD98Q#{g`<87iy*#8u|%wjfvut+5YY7z(Kp0s&u$1QPH=2D9=Fkf8-h
z@L3p&N4>yaPTy|tLqNKU-8|xYQV~zU0k(Usv@*7nmH>k(Sy?4O(J>y&(?#-7(KtZ%
zyPob0P(@KNsagZ}@EpAL619}@-&L5EIe5wTY~{(Zqb*J^uiJ%ET{1se7uz6Kg%(7F
ze^6?`6LvB?%;vbNb8*J{alFfiWE3w%Y4{-}#c5+tcb?CXJJG}XKAXaV$yTXmbB@5U
zyF0cq|8wwqc{`U|ihh62GOsE+yEZW`lPEu~`;>*`RYp=zedl?S;<Ks>r5ZyF^$SJ8
z?p0OfzUwv~CFHD!g+&<!N_viZsd-*8`5k4H^60$QeS0J3ozt6&^0K{u&inf6xt?lV
zf2q5eSMKt=Y@=AOs0oo5GjIPkWnEFZ#qEcbr%~3^HtS-W*4H6jU3)gPBl3k*=USg)
zD$AAhX|3?PliSXi^;sz!p6j}ZqwHt!E|=zg#xhD_UF*%Ch(s`7?Ts<s&Jj<|UdV8s
z!Fzq5uzKv{iC&QumkX&3K+V<@C1U3w6n`7JIek*NiS$1av+i;gwr(!FGScZ#w)a;b
z{$7r~PC1Kq$>oME|5M1itdxqKzU~orE;R^8uiHL`9Q(6KMM5@TJrAuVW9@0n%A99+
zcYAq^18ScNGNUQaY|zq9HuG~XzjU1}pOzc{sFIDcYh-`~k%TtmeKkaBOX<eIxWa!@
zQH?Z6iy*0X?f*6l)-Rg>Y+%-c1spoMWQlTfQu0QFNs8eUd|98%3Pk-OUziq;v)5p2
zv3A*LfpCP{z>}=NfUL*1^C<;ZtNA4>QJW8=PuxVaMqq;+tOw3y!G{Tw5eFlw>tYJ9
zsvFD@)o*VTmDCh_@c@xbcr^zY7(i8`gC!K^Sw8f61#pp2z<97^+qg5x_tywz-UvgO
z1+MY|`O%mL23yvLBMeHc#uD%pXzvY*rwRB@>^&}pKbrynvV$a58tauD_CAZBDAuk%
zz<7wW(M?eZqvU^(wm0Y6!JD*F*v3h~uT<OO)_ghBE#7M7Sxta0fI>ItM8cTEHyU{Y
z=yW97_lT#P34mk8QCC18V}StcLs*Ho8Nxpw&ffAVPGfwHb%clSymXrJ)8e%)@zOTA
z+kiPigq^JRfgtozd)QVCH3x3j5Tm4Ij7*}yvK){%1Q8g-TDq$FYt6_=Lp)Zpd;w-J
zq9Smh@{FlVDZ)xbSm;D8QJ{hmm6Sj@-;tOETKy(iY`{S$ZL}`2lQfvBdLpbHP0d^+
zTR00X*#MWH7$m!)9?^iLuI=5Q!Q8QJQ!B?#cOll%Rn>{n$8@b4oRRr^WbZ1Y>}l|-
zFqRXkgJMQaNJ-3e`eO`$K$kTTK;Ey>1hOH)ElbN9_^FOQ%?(Q#Qk{%zJ1t5!QaLMK
z>z^w+zCf{Ur^TOOyOj^o{*Ir)udMl<2T0o@>Dr>WtAS>Noz|x*emNf@Jb+Lif(%wr
zR!o%Vt@GV0@*N;1Uj>ox80!+HRNtqEV?u^Ml-kP?B(hdtXjq8|%j?yCh=YdRq172k
zX(&osI@w?dR#rAw*r^^ou$^)pr@jhmJRyuVFg{1CCRn35CBYU<RnG~yWMwZh6a8l-
zy-NgA-a%&cb{<2W=>!MdAoMt*nj0j<Nl=@ms!vwQ1QTQ~_aDSJ7zcrpcjP(%bAK-(
z42{0q2}H~)OqT~IUV=$j6Nzy|N;1r90-`cul@*lA-iE)ox8w^^RYZ^^nO`uW<1F2+
znRMH9aQC^jU8Xpo%%xMZkvl#be>@o;H#k#*)#zM>9O(#&enW-~ZfJm&0h9_EYL3E~
zNuEkl^2-&L=74gc7)1z#PYSSPtVYBtK@+F&tGv6Ozw1aZhENYJDM3_|+^z12{FRV(
zD|@pks*Am{lEq>bLpds*exI(I^RYJi_V!DZYh1B>85z_AIFg4q%LA8xxnKI1p}7D@
zC<Ld*QG*VMMTs?<1?D<qLLx!CnH|G(P(-BcRFblph@e93dFZ{p^alDeO~v|mtqy(H
zZZx`g)sQdw4h(QZ9*h9ew1}ia8X|2`s6P*;B@tB|(5DO!#o(Z9Mp_GVjgTV(b5`WF
zDA;W*tzSwAowFNxCrL$axTDJ8S7lJ5f%8v?*U>>MN_E{M+-F-rmZf#Bwo4%1<7sQz
z{(ZX^dGtA7R^@2tF|Ql_2H*onqzbuBAO>ZEcI<Y8ttfKwr%+n7ogGOCSk+W8qc><W
z+$ZaXrm5-ADC4_LeS8q@9_$A(hxq^$eNxe0z)j4QeMXlx<wN~UNPorKX%)b;36C;8
zwJCCTbkE^HsF*)+BLh~an`Xj0BCF8RBuqXX{f~yFIt?<JQ7C_WFQ2CNJQZy!8a)3L
zrMtgzb%geD5HO`7<Rq$35v7s5<FN8heE@|oHEEJwLnUrSyiCy8X^i`Mh!Cf$*!p;H
zWDaJwTzrWVmn(o9b4(Lg@g^%d1su#xz%p}5Q9;rwX0n%D!H2G~)-i<_&4=&n@|R6m
z@6?9zaM`BL;((IVzSgBvrApmOJJ&w?FIQm<3y8%%&g(BLm3%Ka|MMaJp3+E4e#t}g
z*iR(s))MC*UYinKUquDDDm@ulI(f0wkw59%zTN4stxdF?GWBQi$E9^%MNby1z3)X+
zCr4d8M;_M=+l~ZllV;<R*Hx_AR31KW=aOQ!RW<)bquyz|N)l>)LzYciHAbwe>fCDH
zNRiZVA4UFo=2LQ7X*<<8$m_`Zl5(ZcHjA=`k+s^3KhTuzb#8xn6Hona@x0{b%uA}w
z<vzJ@QhXu*xq8bqCE$<6mC+4PgDbMnE8Vjtw<`LP-#inpf4TP)bH^v3#ipUK$p)NJ
z{)2g;g_uU)KEa(YHkz-BGYKrUeWHBR>e@oK1>Z8VTd_1*2lpvGsWC4|&t@*D<VxI5
zSH$+NSo;l;kH<@k&%Bo%tHXEE(ZdgC_%Rsi?Y91dlPM#%=cq1on_iknC{a~_T{*(`
zWuDiS>2K`O#}m}>XG#ZcU<vc`pI%n62)3Q-`}w@4@1Bx&N53WOAF0cbi*|L3C{ZU+
z*q7jvx83RBvpMtP1Rf6jxsrGaR3xp)mkHMJQ6Drq$N*v7EJF9G?Tnl$2;G%Tzy<0m
zyAX*l<E5J+3o_`c*r6-{B@j9ThVp2p{K5>_ws%XIfA%X?gew!T&cysABV-pb*}}dv
zBb0om5rPJqhvH8X_2RQ(*+@{5|4Me0y>4|Dbeta6XgnxG2yJf{f@7k=%XCbKa3qH&
z>7#=3B0^@Qe|L$_ZY`872eK!EW(??_r+i0x>CVLY@B?>}E|Ie8Q3TPUSM=mXAx0rt
zVzD9(fhpTE;dZ*|P0@{?72tQ&7IPY6Wdmg54;iGZq79x}b%MAVqb+#Q3JV5#Z7f6+
ztjUC*0)+7l+D^2Ve3{=x?L`nIP3za`)xzlNl0MGRHUti11gJyuBrdQiYe9%#0gY!B
z=hRWsUazVO;KFbKG*$gc-{nY-?b)lLhYj0#`n~%>VX<zK;8CR4V?i@5BcHT6e0Jff
zP$8!R6wIOvVtaa!V}{4OO8{f$1ZoA0K3KolJQsI=R#-fY^%d@u6uXVmVbiz!Ft?(<
z({=O@eat<z{r6k!O9ogb^f6!Dg~w_%(@j+Qh?mY|JarWE9Xjp|I1(|Fvnnht!nbqw
z4)xDbul+b-0yxeJRp`m*iQqX2NBP|0vt*S~0n`V4$(@zVlPSG7!>F}Ik|g>j7HUgc
zTj}9kK-^3pu7)EzL0dAcLk4lZAWsTH@q;rv5%G&DD>Nv0R!;)aRVHGDG!=W%w%?0@
zL^>S7QZ-5jPc^IK=<<D(uA=d1;jEe<NKFPy=o7(O5;D;WSS*ljlZVwnDo2~D%Au;{
zNi-~l`c%vbDxON9nnHyLJx&$1ma6VpW>GI;TAXV?-|_!dY%dKIDU{<lYE(pC3Ep_v
zph1yie!}`>u{_nn+}5m!SY2drqQDMcrD^oyX?a`mb*fRGIl_LZ+@5;6y_I_F%9W4m
z#3!70x3~d-y~G3KK|<RH0YFegq=S2VbPtP$%*bEE-y`<4t2HVWIthTo4Nv$=JZ6&W
zoK@&Bi5%75CM-tCd1+`V^OgLx>s1v|>y`x8f!9+mm;Uc!+xqY<EyX@z-{+Dxq|XD=
zt}|b7Tithp39p=E-c5N$MYiJ4?0?FaEije$-TB!3arZ7MT4JBg_@xWGFZ^8ZfBQ6Z
z({4ne@+qIB$dKK)$It=BHfMSOo670CPydS@4x|=nZyM-%^RTcd;)+H*&Ej#v5c_^w
zF(Ma_<}xz)`Q*^adM=ZmRQ4vJ=cI*;y36g1#(7br|390r{Cv~i=Hh}+3%m5}!J%yz
zVjuN>T1JMfKDPHi_Mz?i;*K{4`hF&#+v;ufBGxwd|NZo8O$t7lh9vBpVZnZ{|23br
zUn0f_Ji2&0tLOJgot)5nmBj2HiA%G&M6PiIOX1{_Ac$N4x;)4G(J+Cld*mzzs5N(*
zD{@+FnJ;$zx-@@+B5kt3_aMYAl=v97E|dm1yjdutd6~Q_4+)KXRS_23`s!qO`kR<T
zLx)Wkt71;(sb_xakE*Xu=zFtR+m+hetk*Gnh?4SRsP*;fqeq?!5{{pr*tRFHkf@lY
z{<U?fq0k+*E9S<V@=;v}hy8EPRH2^&BvTLf(Pj=a6}u(HH`{0P=RIu_s2{tEX{;l(
z;{;&ZLx%KBTXc(%8imf=&YYL{Mug*sO>aYM_dG-05pv55OmrR(Fz=iUjX!VkC5||R
z)EY5G`CLG!Eg5qJrd#TsG@tu0aAK3+sQ>(!Pk^pz0MqjF_r;xwS)i;9Z++?dDBj>t
zLISz@o5R;JgrPlAZb-)4yz?}fJm+5TQY2WtsrjJH2XxtF{&BQ&m_d~{E^GfdHXLO)
za=ti(XnXfbI~`SM{<{5B$#Hqoy?&vp?(_Q|D$_9;4W|Ux!N>zfAuWaCJ)b8-Flwh`
zrDkPx^i(xd3(=UF@Gny_dKqcD0Vy{{ddeHS(w;JI{UL?chA{R~<(VEl6ha=C+_veC
z#rK&<d1Q~eo5$vSsM+#f5~!d56ES)1;8}9ZOHR}K{>+j?AASU%B^tfJ)(%vRVqQ9|
zJnH%9;)kDR8zjMsNXB=blJb@umC=U1_Tkrm9SL0&Im4vCFHeb#F8mJTd2(Mqul1<m
zMMRk${PSNq4nOeu$)SIaW`*r_sE94Z+4vv~ue|^Bvreb^$+4w4!(&H2*pwRo`o8g{
z>+g!TsZrT0Z+8BbHtzo+W$2oH_%st9rCj=AX;v|N|6JG;5jy>Y)!{CIbeVU>uf&yX
zqHMinBRY()S>YH5)T6ig*dUZz4w>6k$*d}#T0MN`NagC5eoKVv+V`_0hoJjNm+$Aa
z8uoBGAMbFG-%mF$iOp`NG-TpE8;?xBUUNiVuiqyDn|KkW1JraICe@Agi1PaiZ@r1C
z5zjgNYPH@!)EGHwp88Mk<erqzq$=-NoT|E7U|zuBU2Fmq(-u;q9K0HUS8lEQkNi=2
zB4g6*7+i4o#cRIkdW~+i<CRSbrdcNf0zN%v+kZRnN%cAP@`C&mer*73GJU(~;c_J$
zr<!AV?)tQzWS1Y}fh{}*&b^&zxIscjTIT7?{()a<?Vh%-D9ALR%U|@`jMv3uYGNnN
zQBK}ItfC0tDu;cj`&}VP@eWFNkVCDSz-Z9ANxieb+P8Um4aS&vX}Yf_ml-cyncMIR
zj?v}eo!sPS4W1>8SZU%w_DCL1W({kkxRsf`eMOE^EPfRl^G57NCf0*@G=0e4o5GMy
zyV?Sf2-8PWh0aFyiG|Oeso&;F%To5aZ5JO^qTliK3iPmjKY<uyo%QBZkaBrQiA3X~
zR8nKO2`mCE7kOucqJXp=fG?^Zythkn`=<$5q&>t^&d5g+opOCoz3F5-u%!q@w*vz|
zZLH8|Glt2&Teh&<vhlhaG5|~F<Ka^8m6_lon2m6_VTWegJFO>jjHJ`}n^^QiDl@OK
zt~cy1ZJ4XQ(4uGuF^o=huzQk+!h;n9**HEOjQ0<p!<Qi3$%R<uGafNIovl9PO@IQ8
zQp9B-@vZ>ybRT66QkvNcj()6)yS^B!Sa0Da0?wn)DayuF_g@))kI3F3`B8Ia*WQ$2
z*G&y=a;M?g_eDEzULNx2tP=d1IL5u_kpZ7-d1)M`23mCPUqT?L9x$T!X?h;JU^7h$
zzpHnoF+|UYfpAw6AXheVsP(L3uNQ*EQ*`fn^^#KWeoDGC(PKmFGq|dAPD%47(oK<t
z5C=u|k&`@fs!2VB6U6J~!~|XWTKM>2C&B6EO}n>mXGl#`2=mZ=x^$t77o`BJc~VQy
zaFz{n4lvqOpV&y?!aH}Zlm3>-HLi)wE<(P-ci$BqE&E=On%dpCPs9DhnUZ#IjzsMe
zDEgPYMq>j^QR-=DpOpSp$bFD0{TgPmHAoPRBaizbD_xLQ&6C|H7|-{~%`oZA-fm7E
z)$!*Psj(0ZpNAEBl;OSGK>3M#x}kV1S@I8(`J+RfphZ3y5<bI{?pYw9s*=q8e)nGx
zM=SH_)-8IOfnM#=Kz8yHkh*J7rk{v#@ug7KJM6zlf)H&|6*(TP%LTh;5Q5U>-9r|#
zSALjEUwno_xsE@S_t1S=JjxQA3qT-5f9zE92>PXL)cT7JlU?+4Inkosp>~3?i&Jg~
zPEVsvMt2OH7rGClW}|i#4k&MPNV;u8ia$J4t!%P+ZgUjlRr$XSXw<Xwwd6PXYk8@Z
zL2Cx3mx}$Qu$-ZeH5!p$9_*JgYS49PaU!+*!5UMiuo{%D$d8%D>H@lfK{`fkD)HzA
zx<AdPujr|--~AWg)t7RW^$Zngjn}-6w>mCG+SYj}eBp{RrcPO!yz;F%pavhJe7G&J
z>=1FP61V<u+&8<Y7|>$_uK%40q<`&^_W^yWl9jwnB|5CoA_A|zjW-*teckE2NW5<s
zx~(p+EszE12LyZS6Bt;9m~81r=TSsQ`w=ICfk1nTXIv^<;8~dY1;5wxbzFTs6nP38
zaPY<#9o8o=+7M1$dc^D~9*d)8W&JHI94w`hj^CU#xpc`-*Myhwj<HsQ^Ei3qo7M>f
zBh3^$PyWuL8Jjah$75ct3$qUR(5O-a>g=?Y;)tZFWGO+Hb4QZrfiqecl#G+h)#Y%&
zuUV(mdFItgC6CEX&9m-(#ACvh*z?Sk-6x4|Y3j=9K_{@;y)zkASc=^Z7&+w}GH!M4
z^9F!sWUq_HJ0TM(n=5dt1+RiPag?f3wZlm{OpoJzbRXBCtV<N+2`1oatd3(O?C46a
z&%x}V+qH?qgFzikuYG&=wv-8wGLI(mTpdQyT4Y$b;OTub=OCV2Uy{3log<`k)1ACX
z5O}fy3VR4#f21PGfFIq2_tRABqxJL_wVzUhLO=%Bc#Tpq7km7(PRS~erW?pA3t!)_
zSD(Q>GJK?YHFqmj*^*{mAe7f4$|;tB0T&&%^Wn<Tbvjt+@)WFj6Ruj>^Vb^ZP`UfT
zHgJdrkR%RIQ3TOV>8ViOTV^krVFtX0mvcaS0B=TvY(QIyUsaK29de6JvDte;kkCj%
zSaS^SWx!McKum``N+KblLwp%vXbs!cL%oj<d7lN$W79)%_>~n9!ADpKacUGux%<%X
zFCb40-3{H^D;1N+P*i3lYcNqQAHjPiU_<Vn!WH1dE&a4n*b~rQJ8J{+OkQL2e|!o2
zLP93Cz#CQ}Ji~=LW1)qL(&4W`5nDGyNyf+<sZT3m;)=P;&7>=0=tpW&F$1usAa0gw
zsL`F(uo;=7=xyKhrA54NJ{En(iUbDKiHCR+jQMuukRibA6+Fa1H$L8X9cw1ht*A0U
zoRFvnFf0N~O+^ryW~~tkzWfMr1$50fw4zws#}2r8f{hEvPYZRSQk1^wfwo+Tb<s4g
z1@qv^NtcOI{>9{qTTDPu*>~H~8*A!Q4@zdcvtclvTo&3)*P4l)OGB?;R0n4jh@=yW
z>5v9sQSmYDXT{zyZU|MFl^%>}M$|qosS#4Rl73@!l5`g><D58a3#s6|Aiqy^vV^)-
zwk4>qb*-|;N9)@Uc);*fo`j8QqV@dHF^`6vPFjF*P+Et;cifGaO;r&i*xJBp(;Vd^
zamt5Sex&dGx82OY2*Uev*3C~27oxmAgY5J(o5zO0)xFy`^msx^*2IT!9X%rAJNh^k
z>69Yxd{M~^n^H*5KA5W6Zj^9d@>a)?_b@#SC;7WoG+h`!_Cw9FJF=F#5*XrV@RCKj
z)}(8FTQ8{F;eskj+Em@PN-z3|Td*lVP+kAbsLnizR$nhj>7i^o#180ersJCZoYgwT
z{uP1Eh~#GE+nSF-^*h}C-Y0phr=H=EgZI9zDQwvA{bLL4eg@&&%10X=d1hLbuUA;J
z)+)$1`LZrM{(4H$jx+T&Z4LWd-Ck|^r>zZ<f3_QW&NQv<bW&@k-?<2I6Fi}HOut!r
zpw+ef9N`(u*v1W&;Xjg3(CqixtLt6U<kd=7LkWW(4YV(kL#3Q451)BBy6ffE2cUMS
zg|?t~#k5VKF%2tT8gRn^u|prNAO3U0-)wD{b!sc)zy>;!N&)^xw`Bb^-L)g9&d=eQ
zv;JaD(ELxc7xiav|CBKHTh8+^Ax+2D?GUcIVLo*l;!8WqXAo3I-hMHr&<8Ns>U&YJ
zSx>3+H|TkS!?sM@kuH@}nIz9qzTgd#4(OfRsv5Lt2d~fRETsGIm;_oLpY0W`oqjn$
z`LNEetCP5&T=*bKGs_7n0|3{4Xh(GdW^INg51kguP<A44@2rlzu*0$-h}YCRxF_C5
z{j||*+kx5kuk-A~N`?<@TC5s-&WW+Re{=<MdP~PRMf{UDpQQGsftH3O@pxy4z*&*r
ze?o|pW8#oQ>z(?Q)jq>1EAU29u8j>rwniwaUcXi$EIv%I{iSTxxz(0tBoFkpHG$ve
z%wAAo)kB#bk>RW_u!%%rfmM7paVQUa*p9u;R<eh~s!dl7<UCS~FvwJn4By%V+&FZc
zLq?eh_FYcN^m>*0p+vDnKxq`L<Jy8&0A7KSm6fw0K^bv1S$68tT0Q($8_x%C8795x
zHhKAFhv@Q^kXH0HA+C(k!^}Q_PO&!d9{d^Ow7X=>@TY+`29ie9*~u~u>qgvPXEsz`
z*Qg7zZiMmDLc%Mc^-_rJ;hf+`NskrOu$Ek=<a4|7)FrHfSUn8@A%#V8CW|(_-IiME
zQr{)7Geb*DmTTlDrTfP_u0U}qpd}rVya+oNMikOO7m?tLJ<|8$L4qx^qzlp(Dw+ef
zQbL3Yu>V-_{=KfqhHu%8(x&$$$`6CnXvybZ3K}9hjt0txA`ml;iJw4c@_zU=oK-0?
zV8bR}N@utrryRsnG_yd9GqK=ldb&WE_xa<RBJvej#D(^|CYwuJ+#|&~IGL&-f;bqW
z0I%dowA<_lznqhl_Hk6&P7D^I+zF-GKsYj_a{XfPyh5-E-YqFB=kZ}%G3Lxsg+hTf
zrVqs2uzSaZZ}GvbtssKDv$hl=!!k8b&yphAP0WCjjffUS!K?(dqJsuvyc7k|v06d|
z_U|!~lW_D9L|~o7I~+VB_YL5rDq0G`cU7RJ0FWthc*R6H3hy67$QDr)9EbuA@ib6T
zs8k2%1_1<$a?<m-Vmi1^tg>T}ULU>HfI?Gc7}xT_d$gi|Yz}n*`%RL}1S{E}u!mjT
zXl*NjhFH}vKVTioS{MQAjOmr<7@&<RvMd>BJuK}bEmseVUGsI|aKU?KfG$fOVwTJ&
zk7|Gxx6;jYW+0Ln+xX&;mdGyX33zbPjEt2mIyKV^qGd$jih<$~9c3~NcXUQ?um*FZ
z5chi^0|#SEGNMGxAg3S#s7#eIITIW>?0{QG+fzjc1@!*VFMAAVku41mCzVGU#leiN
zb?cfV-_4kq-h~T<id&z;7Du}x_keZm%OkGH7c+IQQb+RyK$u6~Vhl8T4{$^&a-$z^
z?xWoS%oUT8jrKTUL<teEz%0j!=*IN4s>m~5X^xC*;YZW10r4EV#)CVu%Cw!1^ih3>
zH9&3VX|dtaheCK=q~48sgk8y%`}}d2aml(w&T*B?E5lx4R33Z;KU*)s#1&yZVWX|q
zADzaGSW1?vO0J1`F%ydUO4!|}h)&q+dkbp*1ZrT-{@aAHl*X%yA=`9o0U1ycJAku_
zy|38TuW5uCbpr{@PA#j7EL$+M2TRmGJ_h`yZryY{!6Ff#h097*+*L#dfAq@AzF^$n
z<uI0%Rk;lg`KDpVxO@o<)CM7@-T~1Yx?j1Y(i(Oo-bdRrfC&J9bB-LkQzt;r?sON5
zE52MGg^+fG?E!}pzQ#80uIEN}GWF1p1u#z!&@)izFYDc7jWDG>&(2vpY)3{A1&}E=
z+;mY*dilBDQ#6L3%-VLe_7!-&G2}o1LfGn9!nj-uICS#U&Te>d;MCc#f`!IsSS|ve
z9anckTzXB2S5hjj+JM9{K%@b>mOaiu_~*mH<U2md>(lFZlFFKduYcAncy7)zYX5Jq
z(k^wiL_LR>NkY2<$(w=8^3PJ{yWj~??&}DeWYe#omUb{&ZJRVSqSavGj=J1Ea&ut#
zX0*r3c)i*HQ}N@u?oXa8C35ZF>$#)-Q`YNWco=W73+D~PWmAs+3tPfcz1*Bsb_UAJ
z#k(HmEgbUq-r}#b8tv_0Zd#n>|6j0)KJ5MMr$+X3jvXG@>aey&tMr_O!hb`vZpEDv
zB0YJw%P?-$@9t;K!#~ty1%U002)9sw?;)qPUiX+jA=ugo0w8<wYpwVXiqxwK<G!3O
z6Z_Kk=^<9jXW@DC&*kMttI<beE^NlKwe=4A%|acf2RokDx8#+dU#Z`GrSnqO<?pML
z=W{P~Z?!%@gZ`e2aiZu0?n^3(a6okAcgX+CgITw|!C!ax5a5ye)|IcRjl7wkKigSe
zyc3=~)X^IMww&Cbvrb>zJ4xvZNK)NRxPtqwUe*5D%n@S9W}NtK)Z1~6YCHkF(>U^p
z(*6Cb;`>vhi-j@X0gGy9V?N)!aGuoCRcioVv{~x^>~lPFjU<nC4m+1Hu`<jCJ3j8+
zoWDa)O97@*0Ti2U&dsyUD?}9o?3^5GX<0D@WtZdu5T6bFlZUFNR-^c5a$3vFYRVh9
zXSj9T7U*1ayP)bq{Yh=j>N9*<z))6}eOu6+1D0v_)m5HRnCK}L4%}~$rz%px=92D(
z!lgHF-!1<?P=xnWg84eWwway2!V*nbV81ZJN_l_eQJ2)glb1*`_e%B~-Vyib<9A#5
zTolrqwl;0PqF%zg>6NCiUIOsFT_VWsF&!YMim|>_6Q99wlNK)|r!O{3H@#$9zruK3
zt3T6SN>9$EvJIVc|51xabw~omyOFb|r)U+qLkl0JxNbi+im6IW#JjbZ#|)_gV~JNT
zXMFk}6yd)DWvcq`o|R1^gb0#j@!TAn>(Nr&a@C+n7=?MWPqx}5DsT@+>Qt%n<PaYt
z%G;reHfk|^Ln?V#kv0GYa=X}}aF4LTlcyNB#qgt8WUcpt9TalF9KIRqg(sl$$#FM<
zdt5tN5udHa!${G#1T@w62p&+cmZ*$3bjqi;V>T5tA#0hLvfN4L7~~-%YZk)Qq-e$P
zeNYIpqet9>B(exaJL8DjZywI)1*?t#Pp}I5UZ*#6!+0!WRUL&YPc4Kew<ssXYz5m4
zCIH4pdtEg>wN&FZ(1ROBsZ6D9rBzE2%)6Lq+~g9ImGtG+|1P#~n*7;h6P{e2Qm=rh
zDE<;GFS2%jBE^hrA?cB2No=C&a1I<#^}w?CxinXd@*+#6s7Q@nsn=_)L+JIyJx_rt
zIqFgRs9Y7whP{u+XEd7;LI7HbW`eRiYPR12idW2735Vm+y1QId1X#BkDzQ}Lw0RR_
zOT`=e)+Ow)eLB>@<?yL7rjx>_#4}afrp#-`8UGM*2OQ>*WF@))-Raiw48v9;-UD3p
z**g<-M{YjCTF`&7<g`yck-t#2)i6PKT7Gs`-u}gYSjN7e=nk6+Y&-_?rpU}3qP%!*
zSB*}~t!1oB2R8c(cjTSBeA@t1;|Pvp`!FXceR=g3F?uW9mnSxG?`9`pf%v_BWnpAh
z-c;cMDnFo9n&@z=ObR36oH5YqP*1*Tp{R}Iy#+XnQEAWH1;<(PZR3h+o{eE04Wjl)
z^9qUXhX0NII^~2>0H@C1*d)20>{w)gV>_Dn&P;7f3JBd}ie%Q1j98*kC-hYHefxZ8
z@jh8=Ai%hz5EcV6i%G<~e|H!Ksq0dmzM$x{8HuNf*>i7M@y+Q^rqK?XjIeW5LB@kg
zHZm}D3Hv}v?<7~XDpsn<R8!SKSs*RUHKQ|MI*Wcx?>d*1yZrl;_}arYOfA)Xqn2L3
zM#B=)n4eILu`U<v0}(TZ2_%=tyoh6Y;l!G_yauX`gIW*&;8J1g$|a(m2V*GU;?LWE
zi$hr&#&<#9Pp>_GX#x_1BJqgLU>RrCl`70Vxk4T1bh-dmdhO*}vQ7GBH&M>SlI#{g
zjg_WvTyT<ck)k~d;OOx*&7<(zQOH8NNS)O$2(;52mTOuq6F)L0c-tbSmB@JtJ-{JG
zK1=RHAi@l#YaM2~2{cz?Z&%Z09LF&8lZCF8f`t9y=hTvIB$l2+Ioxu5wH$UUv&fpw
z>c12D`RnMd4Igz=c>Skh^~o&hR9)bRoyQ%&FTjkZ6>g0H-!j@j&Bk!@5FO)yw6oAK
zfwNi4Ew~6djss<dRtOcGTdgdq-NBQ0h|NG-BEg2ALvJMIhX6~ifC+D>Fzs4I7CTS!
zWLhZTS+u-fh;55&;waX*rN$fSR_T0RXr%XZ<nKt5|IH*3B|d5F;A5p?T{)I7>pE9T
z){dnm)q#x|q@bLY%Fr<ayTv>=1X<Xact6S`J~=<fF177XtF-O41ibG4p1c@5I+-fe
zH~u$AD>Z{sgI;3hM#a>trv_rJKQ{V!zx6iVI%0}m*SdXJS1IauiH2+>&j%mH%aU_L
zs7NsK0nhsD0H(qFQI$M$MsMyUrL>2fcFXAZtGq408??4)<pkG7RvO;>XntJ)>s=iO
zF`NEV-uCFN8J=EOnLKZy8F!Oxj;r)%_-Gu6jMw!N>O?dk@SbX0A|BQUo93`hUt@2F
z%tMMa?C|bvidpbD&apD|2996U9%JPHbZp1huBv<Ov5uKfDgQT#M+(>km`edtfIqYe
z1Z38jo7mZ#Ot`rwocsbwOn8D{Qd(C2KN1f|y;i;Y^gn|7hQ_8d&1YL$+fMSh=kh9q
z=dy`SMBV;N1DF3_5|4=3+kJcN&fR<WADq@L(4Kts_{r2$ZM$dFFQ2g=+s!Zh`zZU_
z!rON*p1gfz`$Rl8`TpzT_vb%;y;=Ud_8U5h@evA!vf&#)o`1EB>`RwgJO9by{w~RB
zgitp%S~8zgth4dRAU1gcRiYJqK>v1-{_Qf;=!Wpa6R-Sg?YF;l9by?hIK3ecJ6?@H
zd#l!>%rp^Y+bl^5>)#$l_2}iE_GsKc{eMV2^y~Rr{{JKK>?&&5rSSzqD9Wy}jhzI7
zj%kGCzAo^uKM-+QUUN#TU0^jkz(VNs6#$*{w{oS-LiriiudZWlf=6W|EvGNb$WzE<
zr=F!N%~XX5IuD7WZj}8}HQiY8e@Hwpr}wk=KD@f+^_hYvl>K)`%glD)AH4MGwfO(U
zgacpRO?B@*PBsRjhR`4X=LeeYS6>=W@ps#14PkBXujzqKjKg_$vF0?*@1jEWzmqep
zW90^YOle?(AHl{fUi^m+yNW3Ym``}QJ7<qqRix5gEO-pVHJ;<?pWHW>w^UDY-<uUz
z^%Q|$w4aTX){mY4|4j+kO8p*xp+K}FX8~k>p7&|AzPUgW6E@SbrKOw!cR7=Nd6-I!
zCedBacB<b{!g9N9z*ayLwwy|~BtrI)+LUbR<hi`qqxEWHs<g3ylFdyoBB(c}rFqpz
zJX*LBgc}kI6xK-7-<<s?-Slls)5-mBTbp;N11NPT;v3nGG!qD|(jufFOk!w=U8nZk
zT(}_mUrZ?3bu4#|hK6nfXokc+d*;@y7y<We#LK-h%lTC@>f!GayU{J;2!t(P#O(do
z-Gm~i4?h+`_O8{I<q9oC_T}|r(emI+=|BX`{vx_AZ#{}d6w39R)t@8VEbrfC%Vb#e
z(rf_H+NIyI?UI;qTS6jweZt9YI1g8*NXnrfi$EGrVXw<(eDT}UW%nfE(><rx?I|U^
z_wN#l(<GW}2m*+rosd2tnm|py(?H7oe%FrmMPMltkp3SEN(T8Dki%a$0Kz?jYd_1{
z+6gEKT`~X5b1$P!sZh+oxgputhF2)EiXxwLpe&N^0ogTChCq0U=mu?GUO{ZprD5G<
z6i3wEWH<6eZfH5;hHTg^;DZ~4VF-p1hE?L#x9taycJvZeU#2No{ucGAI*te_3cfEG
z9E6f;=)d<zR1W@L9W^?xN8cbLY!vHa>w0_TTO>X?L-=0&B$2N31wtV^TGs$M58BKV
z;^3a)akS4V`))+ry>z*47~011x{g}*wC$jd2X2cogw`bkm{cO*-miX{*o06Epd{gq
z-Ern*q^hf%jFwQO979AXh?uDT!J^k}0o!P51}5xtgF~2|k1ws{C}Va*QHT1a1Bghh
zKm^fdklI+1tP@`(uP-32PWl}736QwIMn{O&7q;KO9vI7!W^WoA1#sU1j6AVkhI7X;
zUN0D{PPdU?5Fjq<&LcFjtfZ3L`7nioG#A^Wq=?7jcPbXro0v}PfXFY;{(WXQ!}70Q
zmZHvx08{z}+;>rNS}<iUg9c(W>ygo7H*lDdt?k5GgUK*U%ALqYd?&ifi<xly)*-$2
z84$ORg%e9%-!VW#vhA2iKZi4eoEe0tSVA2UWRGSwlQ#u4+f?4ZduqM4--BQ`^q^BE
zrjKYlxPyWc8QbAq>9%OvFaiTqA$qK>?Y|GHYZ2Kf5k=Z!UnQi?yd_;|63LP@^G#>K
zqs{^(I{`rb^i@a32qfeMrc?;!vR<m!zApc8B|MWUB?+?3mWJf>#h~026UK^}vz7~h
zlYu}6fd!EfYW{k(yC=!-RV}?AW<ygQWHc5+qbUK9Y^01?e))wO-^m8`FD=v~iw{n!
z*u}LKH7klF^=+{lye|c8TFa}ERu`+?Q=Ua`Y{4Yy&eV#8W|1k|MN;Pc=9}V&hz}4;
zG9hH{Otr8EZoH;Y_c7JN=}0vvH#m&U4Aur3vT#%KM+HV&3o}wK{UUj^7<}eNlhSjl
z(+6_^BUxgovJ;5$o0+JpNsqQo6G`b)m>sPGKm{H`9^q#b=mJ2uY9f}KKl$?K*NgX#
zHWSm8MzKL6;Hw9?^@geC?Nhy$y2c<%>|A-N2WS1D4g(#T0cW$$Z^~633QtN^F@0Mh
zz5n_hY#0TJV=@sIGpEweylGRTi=fUOfXZpnZo*N46dnfsWJE{_1s9E+YKO~LaJpDZ
zia`dj_HeU*<iS9*bWtM<{dIz=?OKn}NCyb!fOPH#KdNX`Xa2UMgGOF+Ahg41gHgF^
z=8i2kKaxb8(f(-l?t4d{e*~b^WhQAJ_TL}<+TqV(y<X3mh;m<6{~Ql6aFT>6fAzMx
zL~m|$2f#}8BCw^MquWnU_Mm(~IDZ155PScgqj5Q}Pg#bexqipgZ1?IP-ji_JFxOln
zUX$6?J`e(JGhP97!{=+1gr*RqA^`12Y4y4$jZ>$&H8sk<dDas<ZXeba7SA+z!KX;w
zt5|?SM3!FHnq~A`?kOCbQ4g_V2CmcW-YZMy7=_K;c9$}WBVym(#7c|rj8qWMu1%_S
z63!0Hw09gpZF;|dr%S5@WqLx1!p6&zp&9vafXN@hom0*)aNivU)(drR{T3jXiVq>1
z4y!FqP+l%|xE(NfxIuYj=k%Nx>uT+^nOKv8Dth`c$>OsL%%dx|yFZ_{6Pa!f`#q=n
zp#P@h{iNb|M%FV44!cZyR2IU2Ef{aPM7OEe)R2p{xecC(aV~5ASF>!R%^}MEbnWKc
z3NJeupR%}P4^`O;Uap5@(^tqNd#)&T3T*rrSHd49V75MSy5%}BcJY21;rSkIKDKSQ
zb2hWu;?301!vj?xqn1rxJ$1kQsIZAVvV6%Y%dQCjHt^pAUmE={TY7yMn335%xppCY
z8W&}i*`0a1sn0fZwZP=(T#5Ezgw_))HS~iQDXQ-W|NG-E9p=m}-1kMK`1f<mwuV`S
z2fQK5*k`}}zv70edJ`|yK6aeA{BMErGI##;>RqLCwAGg_Ime~Hwn|7mX?;f?TQvk0
zcpod}{`d3Wf@$09l}}GkTYkN2)!dR4Q2b3s@6W5+wcj}oJx07out?_JPw~aOb0<)(
z%g^^r@k>KuME`w%B|GP`B;i&Xn?LP?5gAOliizH5`>c=YA9PG!m4(kZBIm>+WUy41
zn95Zw%_)|)4=bO(G1HE%AI3J!U>jGlP5asAQ*6ucY_e*$jZ?N=Shhn(wo}zwwsU{B
z>s0oJ@7a{F>}}M&9$_4>4319~$FH9gFvZ#YokLU233AE_3Cju1$O)^;+0ma9K9v*k
zJ%_H!jdJ3~gmGgtxcjQO`}?^GQ``gJx#|cjdF$NNu-x>F+>EOKi?a9rYAOr+xA)m6
z2`MCm03r0yI|M=pF#%MtMnC~Yje?4(GZ9fiP*3PpLXj?pqGFGN3fMwXP*J0zVi_lP
z6ie(lI`Td9JkKBSzQ3~;S&MMa-k<w(UswLtuKdi={OuF@7^fg>BA?3h)l!-V))W+V
z6_kt??3^f&aSAK^3aerZtJ4Z=YYXeU3L8fY>uc?sI7KafMQyP~t?jlt8Xrkl(c#ge
zqZ37n_MAVXypG2fpGqt4sx4km_U#!hK0i^c<dldUR`<o0TuLh$sx7(FRWdwUa($vi
z#VNhzS2_|~dN-|fw6^p?SLvhC(#I2}YR=B5ev><&$L@TYwsWj@=bNsbZ%22&pV+D4
zlzs9m`x0CBEv;;#w(Os-vR|WRzbDFokqr9F2yrq}x{O>Wqjt-*@5>lJWK5%S*5%x6
zUO79xoKshB++A*Zzuf#sIoGJd%D=)UuEH+8!lAChsk_4EeudkQ3Z7A=r+=kaT%}KX
zrC(iTKzC)({mS4Ul>(!x5dW&MxT@*tRpE72GrOy1->;hcqe^77E7E^gblk3m>APa<
zb}j1O6@P!%(jU9TM%63)s}tj@SEW}c)m5jmeLHJC2F6@dTB}p;=XBJ1&-z@w@is8m
z*cR>c!e3BWdd`LfpJ^Lw{*LsbV+aoW^-xa2%|^abqq>coYvOMEFW6X9+l_xPfV-2t
znaCGw@Y&0^BCeh{t!~anq&3PbH?Fp-&dU`C@bZw2mAKBPU|(GWudVLeZM;hAayG7J
zW`Y+*iMS}~Rw{p7>SVxm@A=VqsH09-hThEfZa7f4y}Qng2fm(w@8rOpiHfpnRB=t$
zBE1kb{=-vZ`AuzWY8a~jAgCyB5nqPjE{{M7Xj{|tJKZ(H8scm9*IOKQ6pr8Z>{nW6
zX*q#Pp8#(;N-(aO{IMsZ5+6XI*I6i=iRb;S7!=rw(Cb!!A-5Iox94hXxN_80wa4Ji
zo`@(UNaYIEllWK`;V}`8V7e`Ceqkc4NW@3fHvJ$JrGNk);2F2RsPpoWHD7-Uy~T}u
zRpVnJiy?P3=OMVJ&_RYc0$Z9K*MBt5eY0mI1O{SlTn*wa0%pb#5x6?4gF*6sBjyw@
zIjSr7TC=Db(I94m04I!_;g23jn!4HFm&-#u)Jdiw_@B#r^o`qlA{uet@vk4Q*%6J2
z#<=fet)ZZW&TOhpZjR6c#ORu`AN8V;J$45XQ(l0f0@7s%lV>*KuU#9FPu-f@&Tte}
z&{@^Mk+-17xHTf7&P)$XBEb<+hFH&G_M4`|{ne`yjy&oKcz*wg`rxF;b>E}U7ae`M
z_2^jr(KkIu_lt7g{&Q4geC$)eu`i2`X^L{b)gSw(=h&|Y$A0%5oA~D#3{(&nD@YlN
z8d(ncj6(aNg7H%^eo*o04T3K}vNMizu5Lvdj+;I_ZvOMQj`MMD;0c?>C+vP6waPf*
zbmoN1PlbNK@_Q-rrmeLp`y4lR)JeLJJWsEC%xbAg_VQdj>t2M1JfP!Rh{yWEeR}++
zg&RSctn>4&>XcS*hUVamLv9-=9ea|O=TWA`1UA*YsrhWR`tPlsv!iNFI*z=hw70zG
zgMUuGsc;K(p0cvlBPYEnDWmp}pRT-Hd)%jW3Y<?77af`Y`Ltwlr<VWn-nhxrz8TPF
zk@u>fP50s&cR1m)p!s)Z79%pmNZ^$v@7#!Xq*^1@SGp)%$W{ZT6FDiccJ^AYpn6-5
zg!kURIL+j=U&HQ(*9YG`HG85!v&B9u0~-fkgHspHJw(WbqK<=O2!1AsofTjvKCsc`
z9L|o}(R1>ZW6y@mXT!$po2ZAnXLTI8-+uDYJO@?ND@x7jwaZiV_E<`gs@C&=w*U{#
zq4GeFh-YV$XBCfB{88F-=CHr-^{Xxs8-Z}<>2BJ=gA+|!>AOj1-4DdJd`O72?eX#q
zEN-drmW05hPGpy}@7335IlP>PtkZw?yZ8j6fm{!vGnjV^WZ|7-(PYgQ|KL!EQ@Q}v
z!lz)$HeO~ED`?=~HB-N~de2(hv40lK!gZy*dc4o!^ayN-nra!~YbinLN`#~F-&ooE
za~yX0cNzM?3&t%2_kq3U(2go#p=^t39S~=BgeFZbp#i$c+sC8^kquhKw}e@{f7i2}
zu7@6S^wm3zFL*fGxwtRP_8xSa0u=2BlXklRl*U6H#LAkPum>lk1a!?`vAd0rQYDZT
zbuz~&@DTNK$S^LY1$?phf}g-&vd{mm3sy2nY8;${o<k#C>0ErT1$F*U+vv;^0X}c$
zr9%*vLwgynV?uar+!fUj5rsNGhvu?L#88Cb&ie=qT8dGgpdq3aiBLmR35wTE@X4Bq
z1d<wor2=7y5N{^>`YiBO*jX~+ntnvkvuN8^6jyR(==HIA;G_S(^%1bx5n4#_7B^xo
zKWi;UEij+c28hjnwxW6?GpLKZyd?N<y~Pq0M1;bcU%D(2Vx@wC8hFfR%JC}126r|U
z!CLM5^XaZ0g1Lcmw6)dC2=DbXrwpF}filz|*c)*14}2po9=ge`F8sI<q(E@xr-2+0
zQxUwUWd{1ZWWqajKu-es8fYv6zB2Ub{lmr4hb#bU&AmyH<KED4Dvm1CK$c<>x%>#4
z@Bp8SIAVy+anwSLcws0{cIbKv<X{Mmi};CeXgz{Fyj&u|Loy_=6XL9Oe+mA~LxvuW
z9E(1@F$#YjpbtmRi=M(4C5ZWvcog6;cEo=Q*i`RjDnd+^=*Nf1x7qGyGQ<|UPE`D7
z=qn+hV~vEgB?wm#YY0G<x386Wv|tIaz<P#{03$K}4~QD55LSXL0!4|u-QGMv<X&<S
zfspkLR1xsNpsxtJ3!o(iy^mbA5&<U-bdW$t)u^EYp(+r3wSmX;rO8k)8R9NNDPQ4c
z`W>Tfs3Q|~Rzr6g>L^3wcTYl`BhQu~A97)!9AR;n;DcaO$t8;HR%iVo^f2Pfgl2N|
zBMu#wqh4z0szNMr%=?@hChF&ec;Kx-b(P(L7!siADolUj%0#Vks9PoC&pm=DaLb&J
z2NUuD<OU-)8jBSV5gr#9FkyWL{s%<D>%BIc@0SE4juO;Y327o=tUw0Sk&U4@w|gTN
z+`l=Up#NXQjR*Y2!5dp)(>atcMrm_*M_hrXOHq7d!2jUY>wzjA4K$D-0nFF_>ajNz
zlrP$|?kHplp4wb-33>wt597~k&=8040P3rH;aG})2E<n*X!3_%Kz)=x3EK$m4st&y
zvr!w_$&1|xA_6Wlgs8sftGct)4RJ6>eMGo)6eTL>&8zTc<NR{w8w&;W=Z4v<#*Y5A
zcfpjqZfamHYQNSqZYqA`D?vO25BO?`o6gu0^xG#TMfr%Kgg!YBr2pb*yIEeEkA^b1
z(iP!~5LAiy9DL-q9pzku9x?<A2DUuZS<t8@Ml0D+NA=!^Zs$7=d1}N2n|}BcT=yGj
z3GO%uyo$6ThZkTbLyd5AAs0Enz0>300SICPoM0U5z_;zFx)NH8pw4Oc?ZFVQIe77q
z^$h#GKR!`ZK>q@Kkpk%oc&i>b$tKa_`*qeb;3`8+)%=D1b#BVK)yY13O2kt3$>W^g
zL&noTO3>YFZ+pDIf70=W-t}SJEXd&k912$#gj$I15Y{17`BRqSGD~v^h%b035UxDX
zRM0RSa%k?qA8$niiV_BJo9snk$6tsU5A{$T+Rqr(q2J>OP=DoRmI~4|#?FcxCK$p6
z_Me)7i3%EmU}(`7dcH|V0r2T=8sij2f^cNu^gQSc$Ua6iM{ifEnH2@0=vo_FGMxM^
zbtsTx<UwOIP#)3B#s+^xxZ}b^M^m<mj)`jxg@St9pcI~&o`;E*kuTfE&EKYT=zjv+
z$^T=g-?@7Y0E!#Rw{SG@_r=Q?z|fxt9~rvy{rPMk)1r<Kl@1S0#&q3Hdv!V;74wBq
zn-%Eud`MzB4T9PgZzZbUOF1;%)Y%g<OPI&@UBMd>wknHIo7Ae>T*_{UxSD#_YeELH
z&Hmc_>(KG$uwv*NED;=E9-5<F!fVETX(Y04KtQ}kFfJ|DF`WBWskXY5Yry}*6c-f|
ziwt>7wMUPGft{H~bL0Cumk&w}hy-zpBzu~au~n~aLewA9O||jK9MXMq>54A#r5*EQ
zOCN(~v7%%GBq%W*-MR4&9ycE6vxAcLIoJveUGJ1SFx1;ioTO9OtKu*zva7gxGi?lO
zmQKsN?oW+Ri<VFSo79=qRolCweJ8PF#aY1y%Ta9(Yh6LuN1tA*p%KHzp*i$r%VXmp
z?b!LPVL22%u3fF9b^1=WgOZm;cSuzBlKJ|)eizrbqHH=lQ6{AqjlGx|#UGV3we)5e
zgaF@Ym9W5FA<5SA4_Aakx_Fl`An>_3REvgNqUrV{AUpovm;c@CNc4h0gN5g=k@OOu
z&&K{j_++(!W_n63)bh?zhS1R1$VAlGi<gbk2bd_uY7<jPVLM17fNpJipY|z<NJvM-
zS(hOnNHC(yFeucrNv-KCm)@FW_GvpQxLJ_ho?j@KAFM>kIusG4Il71tEuBP6O8qZz
zoW_rq2vPL_=IBY4ftRx_XRG&$QHez0J}Fls^nO*#8j|fWcNdX6yKo8Nhqy&Rb5SXU
z+KjV>S#=i4ddb?l1ckD~+)F9cGH~&eQY(lOp|<Jl2BFr#B2g{Taad`&xwgOrr4@Fo
zWZPv&GmvW26%~LId65^Y?GPpsQkP!L?L(EPWYS~ioq|4sS@fCkBs~W?Br%q!2(;J(
zgCUn}6L}bwFBbJfVy76<0&QX;xNoBtXdg_;=)>b&laMCLuR0-3w_UC%;Eph}wN?jD
zRteS`OT-_$gDOvYQO(lCQfdqPY6t~l+Ys8lCMMco%H1ZQecL4HyXMiTOqF`4Nf7EN
z-El&lW9XJxPP*Mv`m~tV;OFV6ui~{=#F^2<%G^8rUg~%so&B=tc4R+QkM}t3MxPzp
z<5l2ZnO+{&7d*?;d>t0@^u$_oj^|dRUuiF!PKefjIOO{*<9%_JL)=GIT5$2_>d)u9
zma3v!`^ZkUyLw49c45HbIUNUk-yh^xrhUEaSGN7_ZO+;APc(z>Q-7W5Kf3?p)+utR
zrK^2xkB`*9>8DeT<8p+#q4E|fY~TJppO&;x=7cM?J$Yvzd5es0H_(2_o&>!yo0M%i
z7qtWy`WoKQooB-D5)k==-Lre&Z!4t@;}t0BtawSb&j?rRfPEe5*EJTc^Y3xay#V0$
zVaNThJ*2NWfx4`Dm~;);lB~jvGl!Cma+cu2(_SuHl~KZf{7V1(fP18S&QQbd_bbMF
ze{_E=mFQQ%bi;sqPk7lKG`ZHD7(sR0hJ5ZLOPy!oT{PAwSwYFOpDdi69`LC=$BRQx
z#=3t_DbGK5b$Sy)5kauS`&*h@dWK0M4%Hr&SNjL-N(+SHxcf^{ve#vG#MMPT$5%TE
z47KueD8|o~b4qNaTh~PluQ2{xJA?<eL_^GYn44=al7dLhX`_iE(xgpoRGcT?tw_U9
z7a}DgBqEDEjOkJ_A#tt*GY*p%85|Ung5=<Rqul)KFh<7reV5%4N6=+#IztYLwS1zz
zpYV7p7n$zzxtUqo9%est{=^z<f~6W`#DZ*AG#5H6hRGo!U^vD_Sq=rHg(|#9BW^Vr
z6F5||TTHdZK33#vXv55gGBuGnDj+6#oTv&=k`CSMEe%oD>o$r}<555w?T3a*x#;kr
z_Jyaf+&Q|{yV^C*h{VSKL!Vm#D{?QgLJdvUa8UyXaBaGzmGXQD`qu*Mq=grC@ON?Y
ziZF20JBv8`+VW12M;QJ%U$+YYR5Y0kGd+N=%=w5GM@bNi%8qUQ)*+`KNs_i%FmmJs
zlki@Wi)xRNoXv3yCz1v}BlLCw^c@mX!Y~+mR%uDYdZ7rD65_>Lw182DryBm~bRl#W
zNC~kDDM`#lA7i<Ug_r}So!f5ALC8K5c*!rdb8ODBt@q9>Sn$t9XkCEOL`-NBt4-3C
z*Wn$^I-M@pKc6V3(N;*vY&u3XlaR?gFid1763%n(QRRGT`GdUu_L4yo9(D6w)r40R
zWaBJe7A;4NN)wJ1#SA}X_eaiTh%j{3FYu?g8lfg(__q?w8mgU5jTL~iFYL5N6WxL~
zV_;IHFTI4{CFr%stJ2w+#f-Qs^S2AoFwqep=tkx<KBElDQp1M-*y$Th8%A5f0GFW5
zy!5@G?Pb8jAJ@}%?%keedM@aH+37B?+NTRm{!taoO|^{LKQ=w^|0_Fvn}5&=oSnY(
z>&F#1JAKDLfVc)B{ZX@E@y~zm73Qfk8A?PuZB4lnXQ#g_DP)AJ2`|syIk6vK;9lEm
zWvyC!?9jD$f9#JjiDyZ@0}WRH+3@pGD_xl$DJtJMP5f|d=jpRG2SDL&x%F_?_p{%x
zeMm6JNW0&iR%$JsoQ3>~3Yk?e$R%Ib<el*ZeK(~8n-tl%{PDzgMk1=ONg%c<^^J78
zhg_XpjC?VI19@U7=K3e|4WFX>xl*e9_NV%XzfxH7QgRXx&E5R&r9fxvn}V!_;6jie
zGVh<Elgsau)0E9SqI*W%k6Kud`{hL4*n0Krk*`NH{v8+VoEaUQ`|U)-zi*S~oq2HY
z`nOYO{(UDYJM-w(-0wXP&$Yzw?{F<&Pe1=T(s=ufRqC&q!@aYX<jt7Z;yKYd6XsoS
z*wD03i<5N4GuWEwARB4(Jc+gPZ*E&JR6jLWOQ}VwT+VDYN7yweTw!fwK9B17y7s(@
z`QePNtN*r5Pgl;G%n~D+pZ<C&xOZ_@fgsY~rP&9{AaU$f<{Q4%+ep!g*`$~F&4_Wg
zH74Twl3UpY4c1OV*{6#hleX>gzdzmx4_>%Iw`52hObN5hQe}&#(#bW5*^E9gtei7~
z!ugTwrB86Wph>;8&``8$SOa`EI9|pOU)h#J`P%;8-rF`)eEX9w^AL_Aec`iEr+YJp
zB;dDo_+14se-<#~l=-7w(w|;*Tk(bit3x`!YeS9W{nTK3JLAk3W|=22R7#6x(D1v4
zmpbLXY}SFn1U!8@))J66vL*40Un3K}^(Deey(FxQY#`G~ZnKby{<w_WiI^}@iStpA
znfj9f{II;MDlnxQnO}=*1YzF(<b%)Q^OJ}ZFPJ7m9p#3@zUYb&)JY8<M{ji$pr<#W
zj)Hm8E^aU8pZOFq2k?w7+%e|rCEIpGpIHl_lK?`6Nq%3%sa&%M68QK9voUS1j@X68
zEX1iSTrP93Jq{p;wHjc|i+D4iyt@K5Q1bnwiW<C(t~hM``5ceWP#rZemqBCPhNUci
za;v~wS-4Y3bL1^E$5_WJr~wjW8moXI*mk@f7>m%LSIp9+tQ%n)f5f2IXB6$Lg|-rh
z4_&xPy0p&=wNybk1`5KbA)1{wOeRI7J8yoGBAaO_#tG1qXl)3b@S}}5l%jZXv~q_R
zH~(fh1d_7+5V-d{llEgnK~hnz1lmK?P=GQ79(>LAN)P_XSiz!&sIeN@C^s^AXcifM
zNd?*MbQ<6zxZ_KXRIAw@Vk9=ptg*nXM8v?!?^Knq_da|R1$@*^Jl`b%5$HYL0+tBQ
zn<2`s-HAV*%y|)X^^THJ->-Wsrjz(F321t4@&gqJ#BaMQ!)v+_Uqkn{0jAs-+zCz;
zb1XH`Ol0W7w8lN#lOu>5maf-M$0@^JCt|I6;HVri5F@%O#2L(04;g>XU2Lo*TZtAD
zRo<rJD1sI8P|t9))g)qsz(*l8+*5ygns133xTzt2Cz0`x<CtEx1~}uAMUhTGhpFJR
z!SmzD#|7(jdG)R;*mM9^Z^)zLi-bZeS0*ft1Wrmcd;`x%fX3md8eGG!fxarllthu;
z{BMbbaopT-6GHCCFU5GyyX5w#Xd^kg!~+=d>Rh?;{g(b?>G{e|1mEO)h~^zfV&06%
zS<L7=j;zN95Km&*O1ty^&A2F=Pmo)xi`2bj9gQx2F=wlxvXjjh)#hDBP^?t#fKcZ{
z$H*0ICLB#deR-}&WvDriVJm^PvV{(6_qrdctN}Fq4df`@Q3VdKpPcO>M$buU_85}f
z=Y~7A87KBuG}FE1=pP|ahmD|2JZ1=`sP;I?n7<<#yDX8m19fg(Z_O^KD@OIZk{<vR
zKZUx<7NQEX0wJya4nTQL7GSxj0osirILqbQ6XeCpInC)jYdHuZL%)jUF%{^2Yi(uD
z!IM1b)?Y5!gfh}08_+1nEqw7CzJQ8f>GP1;R89Mn`Dj6_U1`?*&0Wi*n+-QWRO=vR
zPqcBQ0mNPA-#4T7@<m_!baa)D7I$nr1(2u$M`MxgeCQ}fhXx@>?rbYE8R<oI>LRZQ
zZT(e9zYVlog}90Wv;>tb0#2KsWOOXAqF=;?ZitSuP8o;T@_^#D+dl6&9@u$7AElha
zZ;~rUtc1G+c0rqb^}ZOIYY?iyGb9a~YLFXjl(EJxXal$)pfQ|)uf(Fr!|lUD8e6*W
zTMKh-E9_p8@7sZ#l*egZL1Nb~(&Zx6GJqZjW=h0Zt+?+4q}IlC9%RYT->1>+2SAdC
zOTgs^vMCt{&7Fy`=JkODOQ>E1j6x&PRn`~x9;ARhUZSO50^?l=^C@Z_Tz|M@0piy{
z-TIU2qMj>fB2*swvb#&~6rv}0ve3*4WO53h02j55M+)MmDm#2fH&AI^<{!6(w&YwV
z9`jA2UcPSrWIW_(_gCOw71WstY?Wxr@kTemF9`_p5TT`>z>ODYshWR1%UUd?*{flQ
zk=02ho+#QJwbDH){qJtC$3$GYaGiBbiJY3f^1PD@QBw=09_UO1uy7?Vmkqe}f~rhn
z`|@(|>4>wKk8+XmG}KxH{;kv5GOllob=;1`lOpBzjnH@8>AqBKA)~}*@O;&$N!@Vw
zlO3bYh!3yEQL|31utk|ZPZ!6XD25CTvMwA|ws{9V0S?n?51-)y;S`sKg1n@BA8v5t
z)1ug|;8Qt5k;C7Zqa!X8XL80Q-peMaof44UGk42pJ$v6tcBmfUU14)2XY2A;aFwVD
z*EYEQbmmqbOK{311GFfs)IBgR8zHKu8jE%n(@xdf<}^ka-?`-PqBL?Bpr18x*L=?x
zC+m)=jC>VqUp2e+$xx2^l#lp)ph%~(r*4bYhT<RP7cWJ%&ZO-yKwEDepvmdy^<jX(
zpj2ac-w*n<;;<8Ft%2^k{T-501C67z$dw`DyYkG4V*4v5)IF)_R|B*bAHGS9xhLHN
zo_bn*Y|<6!yDOk;F>;E(j4<Do#)DW3@`Q#qB%>&pt;58FRw_%~;f^79_bz6w<A)m~
zH#c2(<00jjZ2~cKJuaR~!q&n`ec>+jo<C#3B7Ee;Fae!myA(kSkce6@cQKQr(qYS(
zroarr7XJm%b!aqE6zPILgqi2k3?QD&Jlq7U1*fe=NMqqJUdygte)th~EzSX!`}<I~
z<+)*cCL6pi&|+21an3EEIu4nepgny8UR3&YJiL~?wiBD?+N5jg_3@N<SWL`W{{3du
zTSd+}ZtRXHu5V0T6-<_<(N}VsrG|*c%2jhiZF$9UN&d*@lneVo{KBgGEr6>YRNhOl
zc!gQ<61zqnXHqh)0Q6d&SoLmn&yxF&0=wNQQ{OuzuD=Pumkg(&3NF_<I24|C*`YK<
zBy(tV&18m^<Ux)D{JJHzx!8;W;Bx2t${37Z=VgPV0n>o;)dqYq%X|iTcgzF%U+jiX
zV2p3SYRMK<-#^Dsy!&s4#l3_a-l`KPc7`l8n0GV5d^P1-a)YpY=bQ3NyT4~t&LN{b
zdz;U8*X*m1R~t&#>t({Q#BzLjBV+qvaQ?6K?b;Mu5!AMWCx0**<cG}n9#C_C@Lsx(
z0M2^tl8{n->m0COt@rg6@Lv>I+peh4?WvnXp1IKGMHi?jO-S&hjc#!$)@(?(q6REQ
zzYklvFE6~d<?+tl34CQyq}8Lrm>r|}kM=A{=%YW}9l2xwwe{yt2{6N{Id_v^f6nfd
zPtM<XZX5Po(813&(eEBs1g{$iyCb*1!_Qn^mHDzC`Y50wcm2xi0e1xh?)XqJKXub{
z?d_|#e_a`9<dI`jg~h$ty0uCB_bf$MLiWo_sZqXvMA)lW&$j(-FECCOoO=~9yDDtg
zz>YSrwXI<@-hNMP4IWPl8&B*Eo7oxo*ZvH3e(0XlZ_dmOdAonyHgVg1@bXto?&?l*
z-){W|^Vf+Z!aez$Z1n#+lOOOnYP^?$Z~cQMQI8MWJZek@n;&m;OPxN{{_fT9*Jmp2
z7uW?puYA`x7;*dewtd;-kLIoiBOyDV`R$LInjw7Lwmsy``IqYk{B86TqfeEbsd4n4
zZg+d*WP~_)yvzJ8`Iunwmk@Du#Nh$K!={f?ssBsYt>xE0)ZG%)>VN2a6*AZ)y<Ty@
zSPrJnc%44*rt^1z_o->2d0qikQ{$uG+US2A5+`0ipCG^eMr+5X{_`J3j)u)&IBq)`
z2JQ<&*`E%XzkXsrC3pII&8vWhouBp)TnE*`4V7b8l%H4qJ>x(n^tnA}U27<@D#}U%
zBPL$|@?D#pn2vs#p?Kz%HSL?*g#gWVZ?c0CR|)G^zjUn<?yY)t$2w5=Li+60<%7yU
z0yZygZ+mt0?&^)xqkncoGtBes+rUmWW#PJS<`w~aQ_j28McL~8Pz_4E`2v-a{0YYz
zd#$cjPa=1o*dprh{)rjVfj@(HRL=VoyBhI+!OI6E{;F#3k|(JYs$dnV<5$43&xzBa
zr6hG^68NzJ|K;23d$L_*E+<9E;~f<KLW4pN>gmRWL}cY-6nI>Ua5|r0GRQw?od5xu
zt^?@^oeH21gAO5uZ)t_+wbZIIq*zCXT1U-7XpDM#n~te9g~0$69djOc7i4JdWKfZv
zIW!%htgqRPAX>;V8l7@Ur@p?Co;%n{p=(v4&Ri-*%b4zBNTD)zQtoPjdd3B$=k0Z^
z+~(Y|F>kJkkE4;LVcWt@p@!TX;-7=&;jO;pzbq3?Nthp4gXI}GO*S4$o_2NAvkZ<}
zX2c%q?U^QrvSfwwA!cM1>CmHJ@w_|!Zb%|idKje{I9K`iRB>zjLXczs_AGphb!UiL
zaogp|gLe+acKlDr_Rb8Qh5AZGZ&nV?%&8IFd_pLtczF5=PIL2!Y@6V>Dow$3BF)Lk
zc1VRx%h9z-mW(m2Lx^UEp4y{=76C$8>3I93>~82z9j<v?*YV{7RNu@d%ujiLdMVR3
zNRj68gpf}e;$9q8HWP~(G?&cS`O+FK8Zo(1@<a)#4Avr*LbnA_Qms<fNuKn6EE=ao
zKX*`N^^@2P&sd4{)J4Fu6pIUbo0Vj`i%%7EQnxjfp*yA$ONrjY;$EVoytNmwXLDn<
z-4r50vSB<XByWmS^+Edqac!9MY!T2lh!^$JfSs&w30o%br#DkDNHQMd^-)|0RFTk1
zq6pE}d(K5jR&x0q(z6Z9-mQAkTq!gdPMPQ9#=}u|&hdf}Eh4@~0@(wiP$EYqL1=pG
zWFfT33Ldw?{kb5^8Xd#3Xf@LmPpL-O-lYh)-51lcf6mOB_TrjYO?8OoK9AkBL@Xrg
zh2a!-4^w7#hT}R-AIX8dudmIhT@gywchp!>^H{HIS5ai@zC?6339dFQ5G|$anfl3M
z{;y)2amRX+(#1vS?szY95358irJE{a0R1X<Uy8bQst}T;ty-GyLbmJG@+we=kQ}Py
zW)uhBKOsclVM#yPY2>O&Kw_{+ppB+#Y-y}vO-Qm;ysV#U<{;9LUAmZAvMXCP;iyR(
zFO+bqTb7k>`-oSA616o#n$2@LqGj2INolulD$N5N@g;47?;~Xhqq!&}o66!mczePk
zQPgn7QY_EfWYneZqgoS!dZAl*L_5L!u?(4Z{2z9o8)ZOQM$=7{hcaB=;xUhhQr)|f
zKXe#qZ&@ViqqE<NLTuR*xl+rpYIruZ9p(1Xyko^Eb)&Sqw_BHM9-=*oTd4XNdsDU?
zNpoIReBJtEb4MR=(ARvq-Tm+MF`CD)G6}yuC`tetFW7Vp)o$vgQoB^kuUeNdp{<j)
zTtG4GlCMEbyS`=hdC0g@f?Fz2Nq2noT1a}B;FC?KrYfKohk)5`Fp9=X(1J=y|8l8q
zML)&(ky=Q0m8JFj1-U(z(riYB_hrwd*-|dSM=pF;a#2YN&`1aVsaRwzmTK9Qp)RpP
zl)4G(baAx;jV)^5-i7mbV?>X30(iU`)vXe1jTI{C6FE|CeE~unTe2@ig&}Rcxb9;7
z;bK#J-d61CoTfyUDzf!33Sq~S>!=sgpW>1*iMWT0r~|?_<L6XTOzL7ZoCzrHr9vIh
z%g*2+sWLgF2znWUc1)j}fLx>qSwikP#%uw>tV>B|%MfE1{FtBu+UuB7tzj{KGQtRL
z`pBOf#K@YBOq*Cm?Zz;Gf+Q(<l`<O!2?*W=y~GhOGfJ8m)fwVwMdGtXKitH@!sfDg
z{@STx3Ex49#PhO44<2Ss&@gh4!j%y%CQ$tZJon>LPL*7jH;T~Te=L|0EeB&ttonMc
z3CnAzhf{%&>?Z?nE?!1E!5!TMRdeqgd8Ub6N;Taj)sl&gTxB2tKe~m>u0iUkQrl0G
zjpz%AjLGm(cUp_5&ZsTHI89pOq|9R4$Wb1%lC(lH!z_M~^!@C0>ogMNILN1()RLDi
z#KTgR9EDxTw%E-W<&hjU=JYa@Xzza=+Zme%XbVMG!_|WDIaS(sWrQ1qFhH^uR}q$~
znA%D?u$Ty6o+8QyW1WaWfso-QLABqigUr(o9q{adsflWm7a1R26Ha{{4lg$o$7yYr
z`PvBI?f)D%*KL_Rd(k^F7%>LxQh{9YTv_0t7H-`vk}?vNBx8X|fPj}p$x)}I6)UZ0
zPs<{EotoyR=p{zWvu_S?lNrhi(Q?t^h!=7+pdASa=2$SQ80c71@8ki&7?rJgMl^jU
zWEI@bGVya#*iQ)P#s{+*jk5`X1&hQiC1N;&9q^sN-luA&u$EwdjCBbTj6Nee3r~Yk
z?e{1<{c^8H&HC_U6=SoAY@)3`N^D<GtNsWKOVp@^q*n_n8jUkCtFnn@bdn&Ot_16J
zM};(Qf^^=dn9VX(?_nzq(v?<xxU6)Dx)Ag)cq}&BlY5IkJkiI|=V}>E0MV7Th{^V_
zINedf`AZ)Q{O+tFS&SNK|MGia8io;h;l0Ji_1Rs&bmsVu8AT4xe(AaKqJfTRFEy5j
zULM(rIu&S>qrofCWd(G{Kv?dOx9<`Rji0r8y6Ge{TlM7<s*@xn%>)Nu#&b9D3ugTx
z0=4P^?&8``rOT<*2xI{Bv-OjGaZ%mo#10$KWMHcubCeRVCS06#6US^wqkH*4brYw4
z8y(!_mHekMKHK7z-!qcMEOL~@#Vt~0#e9E<I4Us$t`|avTZyFd!Xid$7Ha@^DfiBI
zvsXd%0QZI~M@Vs)eS<t3L)rZKiB2ke<J3Y!9qtyoDKBgzK|I@7B%N!VP!W^KCl0p>
z$E$r19sR?ejFqeD+t&yk%UdBTBFRGNdkmi6LWX^A9WrXxZX$zgMoCLhURNtAZQTCw
zQYGN2STR-V=Ho?IKL#kCOjf;`iFD4bJsIOstd`pnlM01IHqYtOUv{u&`rxcUS(bh@
z7j_rsEb)@RI!%9QfPGmp{(Jdpy(+rU)<N5Lco<J?&p8~`P*3b*ZD|M3%tbGi{%0e<
zAJhChEADmRiI;8$${jl!GTg6Bu~Nernqh2V+05s;)6!B$b{lS+@hir2*)DSGnp3hl
zq8A;WKia#p4DI(^8KdpldNp)=to^IZ`3rZHg$@0F*L7pc`w!b0BR|bQADBF6{j{k-
z*4SuB5&sjPqmwz~?TYsozfXCZKd)F8H2I@{#+0Y`=4=1`Fj!ao@XW{7vdq7?>@l2^
z1Scr-QT<`Dp~fQk`;KKLuPP^({Tkf!@9Q(KGv5wwdq4atb0{YBjv+QOgZ9%m?Yb7w
zQ92haL>GMZhqCRjYqq`2-};x<jysYxR>4+mF!Ni?wtr$Mo2$28)bjcJUIrZ6VGt`F
z{7$~OC2L4Y`*tsboRs-#HP*R51FzUF{%EV@Z5hqa+&m*kNX{lENh5_h4`Q|*6{nqw
z(SL29Md9U2UP+1VA*^uRhlR}x&)hge8tuR_@!K}XA-%n3`;b7&E7<;KOYUD^a*o*N
zMWy8(9n4tYwdLmN+>?fG83ov$&pX&;?bBPfd>2UP$U_Edayw>hvrEg&iA^uhPZxJ(
z&mS$Q;S|^nNkuoezEb4pktekc!V4C~(r*nGE*ae#jCX8n4cwA4j8(Awi!INgU{7q`
zh0{CqCvfOc4(cFv8_P;;$0!2SR!u(Zu+`jei;Wx(F|)n+$X}xE2YgWnY?YI2R#^C~
z(1J`Y8FD2_ddqN|4%oyt1m;}5IcYgK{m~6KoP_5b!XuON{O$r59ogIt$&RNrIeqs^
zHAxvXrC;RgKvrzVsT!%b;*aC^GAR>(I!KHG1XfI><5|Izdpoz}K?=)xd|~Em`*M@o
zDYj{u9|~OBzZ8WhWmCoqO~_?OIF+7pIid|fYn8_@tu2iOF3Ykc0SC5P>RKJmFWM!}
z-9AHV%#0Z3O~ToB24_bBS6&tLgX}Gvwy3MXSTe^}A}HI!u#r_Qiz>=G4m93dfBB|O
zD50&4OP`1|;#Fa>TPs!@<Rz^>{t1ik$T?WR7;J`S5qZ*>jE~{W6E)C>YfD!cW0xx<
zKd#{?rQ10aEayXfVi@R&@<e5e$|?7gVl3=9bqc?%W+Z}wZrrfCOkG(ffXj^F?e;X^
zuB~NUSf84~Pj5I)fv1G9=Jvc@a#P*c%$1e9Kr^J(Ax3*WQ+?2N8({8D=pfRjh>$z2
zi*lZpJWGMQC^mz7=ojG{M*%bymwU^QnT4xu0r0|XZq*`&0NUL`@Cs`X-ha~-m#4B3
z+Af5q0M@GVwX8Koo~SJoF_jVQvZh{oN%oII@lMKvAEox9jR=M~;4CC7SezF`6T!cf
z*zwS^sXq1;9<uqwOjlL7lL~6SkZFQH_$u(>C8DK5{H>rd4{=g~qWNem%dq}#iSjk@
z1%ZqE8}y8m9UsVw%AK8M=!aM2XD4>KU?G0dmd5JF?mnNgOAs#t?!P<d!}Ky&rd?34
zk89O-;~wx(FT$|j$D9i<=%Ngb@!}KU+E~kx$|+tFsHXy6TqOJz%|Qj-RV+kovn>=p
zj)Z)brLmKt6A#tn>FO$=JGRq9UGk@;U`#TJr|Zky#e1&^%Y0<0{zrhfg^u<^lM}$e
zlgSW4BZY@4?+{<qRC^h9REV79-~-#xBfnvwr-;sj4oZksqF#XQkjSUDc$>?4zj|%F
zxE8Np;?1<h>rr%0hqa}|Gf=dYC_!CCh?7QsG#aq8`~#S%@EJ5wpbk7d!-x6>2oaw;
z^#>$2^LaAVK!F(XqFEt-z(FIzEN?RkUVBD)5|iy8g8~2)B}}pHO0dzu;7IsDvvAsc
zrjaZqD1p6#kJ47faKK7CtJ!539MwZji<kL}(Le!3M?J%o8)nAz_k1pL<*}D~S(WWY
zUAgA(ZcUn8`#i-oFOnq+GQs&T>V(qlIzA7YFfFV!<R)Q4N*n!<4HAF}Qad=VI9!$)
z|Bcdsm#16>v-w|iJTN@xxA00>>4UchMOkKm^Xx$^XFeL%;!9dY8SFXG@N@}t!Yt7?
z%vRDq#)JW4A5?*|Bv5DXv5scvqSO!xg5uK)YZ<EBjC@(7&ybyd-;XR|+Y#l61uv*b
zjJn9ohRUg{QkkSp2<;@=lVWc#GO|#nIm_KGl*ndJ{>7fNf4-ucOVCS7drL(o6h%;9
zFe%l#Wuawm3bb67VxVq)lLAEFfu*Y4h3VujMp+{KplbOf+RX@?MC`HnxP>@S*=;c;
z-tQ~fULw}IdAf8zw0^ODX6sU2CNy9=(I?h8NWi2c#|7_aYJ#9R^y!AM5BCvq6wp%x
zmINGodBjO^dRW{{BQBxx*nx@@Ssu`Kz(``r@e;*UJOvyHK8G^fDD(y`K&Qc_p<=J8
zpqr@Zf5nDnDzEKP&=nY$K%o8Eo2ytzk3!J$sT&3YE_@-IDi3Zwky`o*ItY}X>VTo#
z_(JpwI%<GO5MhS14Kt93^OYN|Y@WGHr|sx(03#mYUmzX2125#ZQ$)LrPPaVLr7&>Y
zP82in#7x2Sy?DzIsukuuQ_UAccl`VB$b?Trak%(03U{96&GTB~dJb4^ra-I|v(Cs9
zbu@b_maoLu)W)O01AWl1i<BOobD??4p(nfPdDN)`XNTffm4So05?v#Jp71$oqMA+t
zuq;|+SMNsrf`qc*WE|Yo0B7C{yyP=48VAYA4)x4FgpaNma+~M|^!7hiwvQwpay0OS
zIld#{$hELwPO-(N`hE|wQ751(msNTvqgSIeC$|74T=aQ<aYAI@OC-W8{%WN6dZCq#
zx?%Z~gsP299UtSX-{<d(wt8>Lxt(Q^6##uyAr651RuAI)M+Rz;`ALKig`6b*{urnE
z8&ahJe-W4Frc7@1T7j<D^BuNsH&Ix-r-I-Uw{ID(uo0m79_Y3P)S(i&ojFwFO|w#>
zTDp=U`N|I`y=>KuJPkw=*8xRX2aa@FOc^-7jM+CkAbBQLMo@d%1}fmHT~j-}p_OQm
zCl{q;F_s1S)-Il%6zFPj5FO+qX7Z84pDsoe;#qi<4H?BgT9_zwzCMxPrfCz!$lnQE
zOF``YP>Rpjgrs5ASONqc(e4s|bKZd+$3c4l_p<4u#BXH0M9UWW`16+1c~d4+?izop
zrizim0V6z6)uo}S{Vw>pW%djBY**rwheI=WC;O^>D_N+O7@5glHGUkaIcevgHQ8a`
zf;^6Y9DFgFB?^2U<Q$X2QSCi!DPgNN>CkaPRR@4-hvBEon_l3rF2r5q2?r6&D6n9!
z8%KU@h6@nC3Hd85s!@Nvo6O4DRLv2=X;B?Uz~|vgvpvJmi0k|{FyMmj?2!-=rJ|jy
zI>ll}I*9x~^Di8Hmr!zAj))PC7`g5Vn?F)5Z0yG26;p9{%tfeQjT+u!t;@UQucB|%
zb4Ar~RwUB&1b%x){rmR(kELcidJ&^LHoLzf_j(;n{0^K=G>T|?XrV%Ce+XY>!qQF1
z?G(hY@wsN?W>6&f@(mgN%dzd}m7cd@_A?U4vQ9dyJneB#Q`RIy4?NfuzrLmeF&6MI
ze5~g3!2XdqUBwbZO<PM2;-a{bfSWSJ4Sn0jm62Prl-d^s#n-WId0gPd1MAz!Yrl_Y
zi?@A^$!^s6(>?r#Rg5d=-`-%pE0gEldaYf@BR8tXZ)h?vD95k<-cb;<qe$@XuP@_Y
z2gfDfwTrlUonx2U#M_=6CFhFY=Lz25TJ!G8QoSKL<=+{FKxfB=^He+O`@cpQXP0jO
zeE#j-@6>vpKPhC5&0Z_#xlA4G9nLiOirw)ID|@NjcJ(@&%?k`j-%7^{E^KERk6BpU
z90y8rLBYG%HE(lNb8?yaujalRKdL(vt4%ycksn|>>rcXqZeQL$W(F-AKecmw?%x9b
zvSPy$^L?w+r{CYaX-j(FtuLuD>GNW9mi}EBzvJB|a&1g+dQ`!;m_NU1t=ZaCP`%jF
z+M&(C5}03mT)5djBg*fye%jXgmQyaB`nG6(=5I~?%CrV3wrcwPrQ}2Q*6_Tnr15__
z!aBom)iFO5jtxsL)GWA=Gi%~&^zy1aaznJ`cGb`pF#4r+-que;KXSL^zkU2;3@hmF
zs;w~GvJTf*gr{HGo*p=Q_VD+grBi=RznJ@^1$>C1__t-r!qeKffW=qmtpD)suzgz8
z>z^xhwp*#F*}k6z2Z{=PrJW!CnQ(yq1W1#!Dw*1Rl^<O`iCj?s%rKfSwyyR{|M7cN
z+A)KXNFY<PC@?oGm+obZKtS193U=yPmE`Zt&IWl65UJRmS6UApX#gq7g;{i(&f%QH
z4HSmA<Du@J<8|lGXMs6=eHSiX8XUTO>FgC8ilDlA>-NZ<D>iK8sDVTNg~JSbor`tt
z#g})74(nJtU8f>BW49Xs-GWE+<x#vWX<6p6vGR8UZQ_tAxsvI=+kK<)+#o@9a|mt2
zIb)(kumTNP{ds2uOV%5DiD0reN1|FA3mEK0yp0Y?oNEo&S3P}nxnuv0hQ9D&jaq<9
zClJAKthjZWHq9Jg2a~9UMMho5XE`b?XEI;QFkX@==N<&Q{8+nKZdNPG^h$2urrtFD
ztiHLvUzbyeD$7WVkR)&lLGKV&`c_GpU+25(*qCDyF8qVB<#1S<<VCZ`vr{pK4z<Fk
zf})vLJn9w2Ghwa?5-k@ALUivK5RdvOXL;e(QpW*e+VQL$f`Kt1NTa$pAJ83P8?dz6
zw1k-C?Wc4SXY4&x6;6)D4V9vkj(>D2=Z1!*wNU~_Yo(T1d0I$#o2qSO*K%x+zq~gx
z%5_tHqRSL8x~$aO6KH$uV|`YL#6Fzv8>TQ^kg=SY6+=r>49&BN)Qc>1*w@}NPv@<o
zjHnkb%Z~C@$@>BNNHnP=+31Tfy5X1v)q3`kD<pBWCA|b<EG8v!)@eetEG43BuKi(N
zKi%oMyk9G@pfZc$b5;~eGKtn?5d+W4dKVEJc|vX0Be9eg*rn)$9Eq$SH_yq0K@722
zh`4IYdWnGp@_xe3G)&0w4VU+mh?r!Ifode7S_ZL_ev0K;H7Gk_qf#=w6<D^GVH;D*
z@Yh!K6a3Fg`tYPwJq|7{S7b*p#xz+ZpTi)OfD<aR1KlGOsFuN)x{r`>9uHmJ-zxgZ
zn^Jh7#OScHSKF-QzkpFG?_&gJs-#@=N3mHnv$NPZ!$6Uk&G70HDNmZl22B15$G3BP
zse$?$NOoB#L21h(9g|6{61kG}(+nT=o8ieesqen*3EgCrDJ42TlJr{Jk4Zwh&A2ny
z()>rU)kL4##GxXAmg^T)*o=g5vf&7?Ps?(hB!rHSh>v%1!+97Ze|mVRCGzF4poI5S
zIgjwmYHL6EZ#R!b%akK$bjAehHW<ErP};|ehIlu-S`vEObU^Z+%FdDDjD+yl!XVoc
z`8O@LoEOS)x@e6Nc-p)^BBwyLn(;hQf~LBK2V|3d<q~0Nwpe0aYgY9%B)O`CDTUTa
z0YU=H=6x?!i@BnIg|&-JNXGXeLMfC2(KzYP?RAs*3c|>~)!GRsM7SbuRM3CsU!UtC
zG>QW2rAEXsWi%Ugtr9F;rjCGYZLX5UuM)2%x(#5FRUC0Ig~ZJ=>{OE299+w|E6WtG
zHdv$x3C~X#8YE&QmskNgE9ShOXkOH*TaT`?WO#_EB$<X|G#jq;dAOW-eJw_OtY6r2
zUz6uI+&s_bW3awTy;yfhhuT6ybp|k^BUwmH5fmEbU<Bkcvtp4-s;#<$I!Tbt(M+jn
ztbl1dw3xAq2N;K`MRX1zyGf*mZ4zQLD?eo>uyfncMl`}AiDD+^lq{I(azIMo90jJG
zn?=0noWmmG7YSD}n6!7mlA<+8);cahmpMp!o>yC_SV8hD=+#cs>^o>+tMyxrkv;Dq
z`e9sxBi5)DYl+P_6VEf^D7C@_O)t-3q|`W|ovNxfjJL(~L`udgyw`PjoM<kPGGg(8
zf}bP4o+KoTMA;0#KEy(<Gj)XsVF(Uo+ANlmtazB=upBAIi3E$dyZ09Wl7|BZ+05x#
zN`T_q`9P+1G32lqPJe!ThK&+3N4dnWCJAV59bk=OTi^5x+Ck*>M^kWV;O#=jjG4D8
z>QkBHLqcMJ23h>oEfLR>$teotM6-MjTRhT0cmg@Y(a?g^yKplTF%h_t=0!|eQkHR#
zkoA?t$E}w$?3j=}TfC7orlcn;slgZ36}#${RG!ko;4GKm8!M!RU#uX7E8!8BH{?`s
za=YbQlJyu6o#9AzN5y-~Zc(-6DfdVOfO>JmT&Jt5sb6x}4c|oCe+L}YQ7ECmL+_~-
zk|Kh>U`kE7fE+K*X4)(SE<-}H9VXSz<Z4}yS`ka-f;`77j-T72wEPs=v~_~`P3xt!
zfoAENIe%adl3w5<^qD_L4o#Bk2tCcG@;2c2nGqpDEWXcBTtWOLQlgitOjjI+_=}U~
z3_28Wo(p1aG31ZUKr|z~gJheA$o*siN3_K-pthGhS)FkUnoKBtG8yFH0nV!AReSi#
zE6W^O;Z2u|%pH`Q^LKu#L0#me_x?qGJ{xxFHx?yuo(#c#3Hk@+FTizOYEY17F0=7c
zuNS*_f!_qDEjoPa66rk0WXz0}6OL%LBjhVBnDII}$uy}K+A(kGbHhL%SsSR2R~tEq
zTe!6|3%`DDW-H_iVjxK0JUff`_X?(FMEQrQ0`qx=p_Mnw{_FVlxvUKA6<!UV0$|T5
zC%6^qjeB4%A0y;=8OJKKj4B&L(_XkvpL-QP;2UW9-9cTu@HxVP(W7nZ5zEM{VPz}o
zFOP`Bp2blqttr@E&OaA#FE`8Da&2;a>Cb<Rbi`xFGM*$d;+1GVwJCi621rrpa<2vx
zJhtByyqspzTaeg_uNt3Sp7Hac`uA5i>V}qNhy4M1uOqtu^lZ9SGUNX9Q`0REuXq~m
zZN;ikT(*AtSK&DqvHpd97vmnC1Lmz`tDns6>N9*#%gkQ!*N9-E&!e2SHq}ZmsOr+m
z3sc@1+{}8y)%kIH{G+Dy_OoZ|eHVE)<{Op{EPk$Hb~()6u2<Fn>!sg~bWiT}wK<<3
zJ!Sm(Ax&7$s2~3|7Cx`%R?YP<`vU)cEh_67*+2K|!Nvc+iM`Qt_w@DutJr4T=DYoG
z#n#vODzTZ`LYwkG72EwgDNU0m+uo<$IP+L{xWA{2p#S_m0oZKZv+d6i)T2v4@Dr)d
z1^)gh^W_C3k7|T|0;1LiZRc?De)DTrS>-zC#%4_QD%ua(6Uzf#CgN4mheM&RgOr*{
zlH7Xu`&-wR0!w{y`L0s}m|BMslSSFoVQlI11-s_m&-nf*aPo&rYf#JSDKyp|zib$d
z6@KO)9SRbohO&67xyWD)ha!ya&m{>}FsDaO@JYjdJ$d{5nJWDs`WPUEi?WV1PfmiQ
zj0OzyWXQkIcxF##QZZ_t2(_DUxv~u!$h^EH$ZIynsg<S;dgD1IUyXT#*^Y8}^9kjU
z+^|VTJ!(G*{_bC3j8hTF7=lAdIR8-*7R`X`I<tdn@el?H_CrD(a)jYIf{ARrz4vE+
zHV#Gbe--VF?@#h_qw(UHjPE1+4~h^s0av!<>Zx;ZC_?l-=kqE5K@qA_P+#C4sE87F
z<Rtp#r?zis7L!c?8n8Jzb12{EZa$xhuaz#R#pdUw6{x5G5nl=T%82U<kW~;_fI|_6
zwpcGGKWfRc>!OW&WzAY{p&eU@LlLZV|6DQ+f0|IRLF&icG$%PUuX1YhEAHgvx5z-_
z?ag-K8xBi=wZ!d|2&N=%Jc&aQ3iPTK3?gRKP=hq37E&<8LR641n4C3;QxTH>xV|s;
z@<mo2=60|-)?ioc3BjzjHKjNd;es0R!_dLgfEB&-d^z$|4q1R1H9be!`RA+loxj_6
zy5hA@1&UxEuUC<|_~!o;d;^ua_-US{W~D+^HW^!fZwzQD&~V-&OK+BeH?TmoO>`Lt
z1W->72UMBt?uvpjvW<)oE<>+;lOTZhB9`2*WYM_(Mc&%~KcEOW8sRPh#ZXJ!M-He(
zUjhD_G>{`s+?6M|`7S@IQwu28qrf62MP~->NC-5=42vyki+@bkU`DlB{<S%AwR!2a
z1$DJW-L-S@ojnbo5tDLQmbSKe?I%!E8&O>8OTD>@tjnG0E%q;~10`|w`_k*%>*^17
z*B`!LpYyu9Q(+n{ENOdPe=5D9tFED^yW#BphTzxLHHDGNy1Ie%lH&^M#sA0EdpI?<
zK2W>6B#=VFPUt=K&_l0kfKUYth%^xcf`FpN3My(yD4`mvbb?aF5)l;Z2}MP*L~LM<
zT@RLssCd-F-RJk+Z|2VZ2gnSWJ=yPi*Lt3Y=7#v}Msf4akmk{!&6A!jcjH^`?`)ZB
zXnA<1<?(dO(@f6SuPrZ%w~seaUY;Th#Fx7~M+;Kmug&BQc$L|o#BY+V_USoq=d-`R
z-||%~Jix_o(xO%{w-`<nxBpbBNmt>gw+_ats9zOtN-y_QYw>CqPQ<i2{Mg?TvW@<F
zt5QNm(@&y7H@RL0m@vR6+y#>#Ru#k32d{+eaL#L0eM{1|Bp`3=4MKPR=&D+XZ`01M
zeyhFdx6X!ay7=8y;(@8QXSC)9`4&;g)+@c_Yd|yn4??)s@RT9;@+B%Cu6RF<9>k!z
zj7`^h_z!Q(_e)EEeQ);(#a+MMtgQ@C5Kw@CcVFYok;3x~biGOB64KSUxp)O&plEgB
zK_u(VD@zXTZ|HGp-2AE#`a~-&FKPYS+mRW12;D7DGYKZ<z}pwv2hW!D4*`eGaJlO|
zy+hm9tpSZQJ8{lnUx|tp7s?>?S>Dd}^xg4Q>aSzne()h+DKP?QdT-eWbpYrP4)4)O
zxWK{ph+8Y#(f%_7))TqWDXNA@VR8vXx~r9?j6X77R)y=bG(KDg06H?T<WyI=u93Dl
z&d(S31ubxLOU)&q7VfClJaF{V4r?yp!h|Vo@CdvsUkqigZMf#xW2w-~zP3YvsH!5R
zM@)g})J>%1t*>=dL7rW|N#j!*Kw&}zHdMEK8|g<E^sTLdgE!+rKg@a>hb1Z#1Xp$l
zeRxM?Xf8zpwn<M$df|+Mp-ZN!j_VqpKWxT%69TfENyGT7+QgeBRFTxHz^V7*c50y*
zMN$ODIuSQC=8-vIda<23BTYkEmcGUN`WA0B8EDOcEJVOU6x=X+tnIz8n`8ktq2cRH
zf?qlrSh9QgV&L*fx2B@Om`2y+va}G-fqdv?_43U4KKAAwxiyX~gV=81?+1aJVo}Lk
zbfvw*n#a`VR9_f@3}}!J&*Q(yoVjYwG|3!gWJpvaG}LwvgIkE!u`sNQr1e|lOb`!4
z1PoE=ddspj6lnRo?D`03DTVbpEJuch78_`L;G>1Wu8eLgd7K^Fe0U9_&xUlxaHo^4
zjT-2}p)cENMPV*;2F}l@L#PnpY!^_bY@;bW{Bja3%Zt`!K%@PB8j3}zv!Q)b)b$7?
z{lt;c(m5L@iX#T}G_<79mDBEM%unYrNjeMXoK}L?S=7T@3Y<lr8VcjQQD0Ry+8?vi
zO#|J&t2@geZCa>~V(9B`4SK1zhZCTi3mPCGO+q(eqp*J9x*uOl1e%D^s7uSn83Yl~
zQf{x+4{NePqBM{o0yCY%kN}S@l+)%6)F=!5Ikd<c1uv{AI3fd3M1jf~zrlVKNC1)8
zr?C>~=BTGW;^E3iLovMVR=|Htyq?H(b%(VP0;5fIBO2p~6UbTt^kLz3Cs=#Y+XEVC
z$c0|@w4y6$>{k85C*dC>mdB3d9Ic5rRkS+OCQOlY+0^B0*W;*&<(YOElVi`|K{jj%
zOS3hmtybeKz?LXofC)J;dUfTadUEiAyT8+D#Ba6J&IoKNGInEL)s~GaZ;ex9!VEEM
zjUT$kwzoxZqh3SrQ7|YCbOc~Mu8lj-anJTTZxJ-V+*y+Y4?)O)46x_==qUz|pgU)D
zP%d0z3E0D2AgLqrNvZAX0*Ee4@LIZLXFaUc5@06>52nFbCfe#ReS8FBFf26zbjb=G
z{DuRi_W#H(L^=VU%vEa(Vzi?`m<@)TT!s%p23)9j5ZIK_jsC9JchYn8Ai{-Eo!={V
z3ggYs{kOG#V&h0hpcT%&pQGUN*-KU&DW9iz^ux86PLT5o!J2Wxz32r?TN--X0srMl
zS@j#D_%mG@=0Qvt$3Ff07hog_eE!zbnQ_+pm->!Jd8&MU1qE<@ofYI8apREV^V5KX
z)c45i<NYRPYRPd+{E04%0`VO{3xGdx0ZYXE`d5Hh6UZJDddh%P&Xx^Tpjd6-LlsM&
zwx3oA5=1#}vUFX>{lQDuH&G$w<$W5!Qcp2ZVgea61dcK=v&s(=t)?)%tWc}~4PakB
z^R*H%Wdo09PTR>yt2CZg%|S$Nd<0+9Pzv3+;Fi(uWP|`Fyv53us`u#27T3fOWGjw&
z0ljJRt0qg<QcqWH0Z3QD#WmOamgD9R>Rk4Plxr3eba+~=cga@BJ{SRYWKdNq=;Z<Q
zONJ6E&zs62ijvX$gE}<8cF9T>dIjq!CkOY_@yy2tJVc-sL6g94%p~1G$P)>76EFJk
zP$wq%ez-B{n5AF1#+;8HQWT35Pk>ae`4`%A^nP+`WQisXauI889U?oh!I-a$QE<eG
z45FF>TJ{>$5xp!r3#cd-8_C@lE`ZLHD?`JPp*WT|6Yel^=%)-^bA@b>@SzjE^i|-&
z0r*-YFtUA_i=6ImA{-D4NbMT`#J)*b!9<R{caXo(mn_9HE3)idqfCs{*s!Gpmc<0S
zaKdg)phr>YXd0{y*x2wEpk_2c>IA4#pD7o}mSMyi^xOLaC>vRA%)U*hc~zvC*RO!Q
zZrsrW{J}Yy4+C}>I63yw(vW?7$kEDG?4^I_#h+1d%Nm%VN2f}6TJfO8U-yh=KYgXW
z+)B3O!4WFV_F`dQQrKSeYV`NUFALeA5n%JB05X>+IY@4(F;aG4rxPWn%V!^BIiqPe
z2^u^wi)5bn7&@-4nmQT~pTE;aram!q4bP57xuL&N^(Z2vOZ_(A{L57i*#nmx<a6o$
z7mXyKwG{mP8+_T6;OOeNb`ZEw4Gcfk`Xc?Jw832LW2D79nj+ldLd#@hpp1*I-$kH4
z12my6fUf3H09W4+!8DzPqNCttzBf>PaL)(aiaSuuKFCpaj>c4puAM{qDYgt?A}{XG
zN*H!fG5Vk?!G+92$QR~qg{FoT5YX&zv_3P}7=e-|t_0^AC-g_PQz1((c=<ctNgX!l
zg*+Pd7SBH8<2<d|fvQsPx@V!J=d4`?q!sGW<lc2pSANvwe0yx?@#kc<vGi7*;=bEH
zAY|1?&E#q;8n~<WuSx-^M*GMYj@h!Ijw*Xo+~3ZM#MEQp8gra7fYUIrbhISn@rJOg
zwz;dOqm`MBzA?oTwxsI7)&@FS_Kw<Scz{T?adD+;+38#Bni@N!%mniVV@+dS*g)f)
zK1|ow08byWG&VG7Gc_PW5D1&9S-})XM>TuR5<8Nmo&ik6+Zmq1gYH;I6BA7Xa~Dm0
z7ae`Nm9dShb)5Vh0$+ku^h_`rdC3I?0Iv!7Q)s>=+8Uc~h#2jDg;aR$5pE8#@@h4G
z`QgN?{hbpB7;COIhn!p+k_l886Qn>To&^95?Xw%rS%<8a9`-p~V?Kr@Y<Pm=qI&Pt
zyLUFE9-ezW(CB#7<e!J?S=RuK$ooAScT<5AVYjc@N}zxu^?-BzkJi<7Jv|X>6s(v!
zI95ndz3(}-IeC4;(SUH!aDCMKXC+{Yde1klw6_<<sO)kfTzBoGQxSbiiwFQ8XSzf@
z&*O|>V4!Zr@;dxavzfZde<RMVpqgxa*?D^H$CmSFw$^WowEU~{1y)5jrOjO#c^&{#
z%@${f8ku7yDs3&woZEig-+w4xPArMn=zFz&$rQpK4ZKlf$_nYy*m$io$Y|-e-n(P`
z@W-(_sh8s~J<d4$)9qQoRmyx~>~QjY5_f#(P}6@HTa!@L3^A~jCRD`k#b`TTqAuYL
zM-XmDo8NFGvk>1Dr7HGlDA)n`?YM}BbxI?(u_Y_bgkqEn<-;6Nan1qwd6qlkr;9SM
zuI&esp0l3D4Q-x&T%UUCeOCrz0QlS4Y&b+MTemRqg;|crMEYW^H#5eK?R&X-fR)*s
zCI`knHnUo12x-PCOGLh@H;!ft7TY5Kyy^a&nPJi6ygjG6cwN<D>)tU9wlAItF!_WW
zD+bJnbz_czLfhMysabRGm(-EuC@6_2YaAgN=+n&bs@KJQWulDXAE=wb9wAeh9ZZrd
zMl`Hs%|vNLpiJ!N)5k(X*XM4M`!Fd(=0`rAfriN=GByD>Q&(d<VAvxb0abID0?6;!
zj4xjI`a>yX^_U8(fF9!EHNnUJM$zd-sO-|scP@{JRY&m%m4TdLjP^F^Fp(I?Cc>Z(
z2Loc}83mL;Gh~!#ypSvAW2lTS0oGc@c?9eEm_4inf8aqTuvC;swtnn~sL;hCf2>g=
zS|)TEkou|UNhAV{{$uF~>8pz5J=QXg3p;s-aW`QZImn2TXY*D-N&5qPl*r0vTzjM~
zTLt<%u*3o-oiN_`sd^bZ4bG~v{pVfBfsOwZEZ1NQaHi)uz7VWX@Bvq@m<if7i>BD8
zo+xdLz&DG0VJzDG#n@&j@{}E;MSv0`p9|vM5@mUB@%b-&K@!c$U+LZ<sUHe&5^W*5
z=O9cFR^b9TQ=Aly&{Glr4wDYvi2xf9kuTO{p6O}<kP@euxmFS;#)k&#q5BW4+Bj1=
z|2`k5LIa~Gq@GkUUq1uDn&FrjHo(8r@PBNVd2323Y#YqB5T^1Dt^lr)Z~wYH&#t1{
z0%S04ej#Bvj-01{SE^(vXM(Bpykwyq>+B&Nq>A#SucZNy2zcbd&3mwdrsPb2O43zx
zCi(!FrTGbDAMt-3Ql)=FRq%--{`q35l7@EPWkr<0hR=jG>3Q<QmdCZZJON{fiC-iY
ze0g#ZW6u*3oOqCKq8uP_L>BH>uSV>etrn|v(t|>-MK#XW^n`U<$6mb_^M9cTXRe|$
zM2wl4vX!3#((_pd>cv%7(41;oGqBiW3tq!0>pu_wL2hqD4^lo8J4m`~0u<Z$l9l8D
zm?gzNZ2(l1q<Oj$fchjOkT{tQXsOUJW<3dD1_JAy=P1ABN^yyRK!YXT<TefxW99(8
z^EY67WDI95fwjwCVhQ6?QXnVqQ#rE;r7S3IW1z=tK+_CSSI!7Q6Wh5CdU$VW?6t|d
zvo$rU!Fe^P+(lh+IM_{N7<;U+suj3oX9D;J{Qa5-2x+=!qj*4t7fHYTHDHp%gHtY%
zDRemyNP2F?VpAy036S=#^&~mcj8bp1j}Tl6SM1^qhOU60_~+NwoaMp#z^b3it8n^U
zRgGwXw)XMW1&E3End~^-S#!~=lMaV8)<m<)K5CC^|Hn>`sdnV$#qUlCbLtFT487y^
zg>v)Uz0CJzo{{mBkfrml#5JM|A1t4lJ$m@?`-!u|;qZ%V@omRaeHU$Gul91bW-)p!
zGD8WWlVjpc&K6zr_|45F0%M@wY0!)>B>8wwN6gZy#i=*w;n|O78)IwRYO|W|uGAgp
z_S$JQE>rE0Uxm2+MYPZ=Rd1HjG5xetSDx5s3Dz8b!M$2^4ZOL`C3DrXS=u1-UTU$Q
zQWL=!SL6LyJa!6{xoyfL{)=5$<3va;<L!C6{pW2lxJIkNd~0uv-3PB;fq@URI_EZd
zclg4{L+buA@c1fO&fbSmcv7gXt%zT>hG#X~HGg$5?L>`x4FEa|m4#d>UUN(UZDV4Z
zdwBIW4Bpa)d?i@hnP@F~iQ&<d?1zTQr$Q_#rhcF!M@Dp#2qOABK*wO`hLsXv^Cyn7
zsTjAEg$O9)I}a-2@E^@+ur9jZZAuGLa=Qj^s!?b<O7kqTIe9K8#rdv1Qc@0${h{TR
zL~m%A&ynR>wxlZYEl!eOHV8ankp;P4s$_iu2G_WQD)k`olV>`f`E$CarGFr3E8ux2
zw%WtPg}^#`HE~;2x7Cna#e}IKA~acfgIkD7jx5A_KF-`(?j{)9^LoL!J+)!3HTyXm
zf(+^(DcN`dma7i{<neRW$G@Jo*u=|XAr8+%7iU{lq@>x8(w>ETn1x|D;Et_SWiKEK
zS|=6={eQi3XgPJw|4<&A%=29lhlu~Ve$`)=>l-8Dlh-4mhFm3zF~fZ6T4tyf5bESC
z&r?4FTx%-@YCL4mA*CdRz|;qHU(F^{71h1&!%tdkMmqP-LS@c-s=fAw0M{<iXxu1*
zO;!87Nc@hPM+T>CZh6NEpXNK~IPFlG<f|Xs0qoyIg`;F6=dT1oWrtdn5#|`Ct|B{U
zX*=;y&B$6U&it2{-!m!@Up*9|MC_nF-To}~dJ|)Df%8JJ68ZCQ%T95Hb@t@vj0eL@
zIf{_SU;l=-{&h}a)c51XM5<Cnx@-d8w2jpxt`45+AR(38+4hb=kN#P!)goTBHS>FO
zjhE`pi!}d=s;kFVBOk8D&M7~-SY!U%&dNXrC{!2zwXWS(81VLmf%~*G*U#KxbF#Q5
zy(NE7=Uv$99_Q#7%-O!P>(zE*_L^`S?19b!{q}~lBh6{aVoXvKW;ad>_iBaGd7+Ib
z)!Xi}`%lqS*{Snd0<&6b@D??T7yDvCUYBIe<QMZzlLB0S=#!vOO-?9bJVXf>N-z-|
z!tB2FAOxw*S8;-RTzsd$ge)7+PYBL6^yk=JURd=jJ*E1DU_6bpeuQ^~#f!86>H_jQ
zYqri=<f)86v2~%UTx_#T6fp(picW536?NyUt@IF{9McLs5u(M{+iRir$vE)?hju2p
zu>GXE*KE8~rA0=4=(?V$gKzW9FBi6K)9c*E?~SJ9c1NwW2vub(Mag%lP_h4lV3!%`
z#5ST?pm2zuFXWjLw@^)LAZH$wJmtuxn2bAy;Vl57S>^~f<u%%N5z|407_SMRKbUCo
ze2Jkv1>`~gYlTa&+LJtJ@H9Xd$H~WypW`SdQm`b&m|RsH&fO@K6ce|&jv0sIa7)EQ
zAwJAiU6N39&g!<i=o>?h%E-d*4ws$vS7-qoO4JaoXkdRU28fh~Y(s39FhgUcaF_{X
z3FI|(X#Ei;``4G!8}?vk0SAU}g0Fs>1>`C+7^6@Km5H3qS<amGJ~`@z9gwO5Fc$-w
zGVK*kU=c@P^&GH~L0w!T0Rc&JFz1V&s-F(x>+PliZXJlnrxa&vYB*Nzox=g&dqPgL
z^V?o!wZ6i@Y>by8QeU>&n^qcJ51fkH^XZE5&yf)A@sPd;7|IzM$S_;f6~cH25c{E4
z7dY*K=wLUj%*0m|>0$1Mcq)LE(vY1BrF9B`B@My!hQ#n-SOM_mA!{aqmTlXFOh`)}
z;&Wi3YG67J&s^jnwMj@0u?L7~&XM{C_rSEqKt}SBgKR5bS8kkv7$Qi)8*3IBpqNMo
zfKI*D5O~H3-IaSd15m>uV3Q`S%kkBum7PYS^l6Z@1b)m4@Bs)|DWnEKtLs!(t)Xa2
zAuXv7g$6ugLWLMeLkeqg!N^p!w+j4<XW|jiK!G!1*y)HtJt=I>fY4slmmdJ~H|Wf5
zMZ>HV3(!RdP^92w6!<%{JfDHv5e?tKLz(x{2#8BPfDX{BR?x6EQr|}A&enVw%VxAh
zg9I65EG1d;U>^m`=xwA2XS)Z@Syfh{$zATEfMTvJz(*O4_20mj0oY5ilX%d}ygPnR
z)RtpY7#|swayG;Zjc#b%=DX{Cco+{ZC|3r<WFcvCrFFd_!CZJ*P~!?~ZBtqmaf`3U
zmu5RLTDAjqMHr)Q7$q6_@ZezS!A)9Fd|cDexcciks63KlC5LnoNR5NS8PRu9P`+(h
zfgEoyf}fm3bQDV_Pof+V_};WTX%N;C!Qs>3w!4|1wy4@8ptC5$lIh|p)&bu_u3{Z$
zQ7|r}$A2q?G8?>jki86go<i{w5!~hffgB52%wwbIWIo71;%1JbcWG=JP7R7V^kRGK
zD#$QOS>VE<*HZne7ka&!P$Zf$4uYS4LMT_mRt)PimYDFIHVeWod<PRx!YHv(U$!$!
z4BykKB26E1XG3rE;0K!ZP5H1VFQ+*l<0HZ>FTqgWLT)@*7Z)1E1x*<utO%o3v*>+L
z5Aj96w*=H*8R~<ez`uTvb2Qs?A$6uz2Y*1eNcZ9<`1XSkJxK`ZeF&PS`4(>V;X<ZY
zde=O{Xl)}>rI0mRfn|3DJ;H2wgpC5=T>9a?j}lQ3gi3+qX?6hGyS8SwSSb$CUxIWA
z_}vXy(g=_h2Cu(BIVZro?;T(Sg%?0tF0Kp90oz`(2p!R*u#gUb#DN2L0vgf<8?-qK
zN&q(?cv%!|FIuE224EWGE^_nYQC66M1TN%>)-)n<W?TsE+oE+?r&Q30P4os@I6JKF
z$RT4ftW^ulUHy+w=)i>N;!}7wpeG-iJp`|HMIQv<l4da0dGSOCQ1=3`RRA-md?)~f
zra*L{uhFId(F>^gl~-2g;N1N~9yHKMG1$byMsu*M01Q7HexeAmpXnmVJv@03KVPND
z>XgA_j4KyhOwD!f^Y!AvtJv5@=R!hGg`9z5yo}#A7Hpi8-jR>dp+P4KdlJ<$e!dC*
z$S`{)g+fOAEg$cQVk|b0_Jk|O_D$qd3MppU3)@^IF#it7edtSIgKV=bBQ{#{ckz3D
z#=06blASyJ5~3p@Rt#(n3`+ft<{9U_WZHT(Q1#GYQ~yxv_v33_C9YCtKXX?xa$ZA%
z3PE7AE1;naa;XNCfq(@TOw0#S(#V^W`1dE-dK_>fKg^H=M#NL>m?zv(QVtSsAPFp4
zP8N#Sy;%v@eL%62;1l$6QEX?2&i=(9T1>P<YsHASHv^^sA(?kTv#BmGIe2p{WNck;
z(<>i0+OWz&xbnk|#=Bin9N2B$zNfDE+q+Osr-r$Bv^^hl*c5#5b)<dUMv55Pc{XH2
zC^ne6>-nh=v{`AwK*!8%{?|ar@IhBNn-YZE?j=$+kYn1rPctNkPguz`ssVcmNCwXQ
z(sh6L7{f2Rh^5_(Evqsj(ZRdmuyKNsWGw^5drBClfLn&T2f-VBkB9YuvQ8h+@4CYb
z5&jXq)|snqDv8KH1^)cogT`B%7mXihS?*0cG#z@LB!P@+ptcwquwZ{h%JB^No*H1x
zIBLan(O?5qPPi`NY#AGT!1a-eG|~OXA}XLPzgMazp>seXh4Nh;q;#Oq`Dr6IXeNT5
zMnZMXXvr7WXWr`heU-spbnBlb2Hb&VdKt~H$W5%1sx&~GJ!qV<D7$n6mJK<e`B%4g
zXyj=$T5_{N_E{@NaGtw6P94@@Pdjo>w!G?)hGUE*@YWz~=>6-Uy!hD%fX@3bIcw{H
z^~5)t%`gewskkQ?EoU?xll(ih)rPZu>2eB<dCO;me<U8nN=H1{7$0Lm>%gQ{@#@jY
z;uTJ$D_oVaFF?>2ZLbt!W~E~$Uvo9+s?5~Sc>WAi=e*?}fO{(UII$8Fk^Dja?9T<$
zPCJb|h`PaIeLZ`i^U1T@wQ4v+W5bB&CP`Ihd!OgTFPZ_K|Gw~?R3YD=Bag<wrm~k;
z)<CNAbFq?TbQo&q_$*2Sa&80i7FX8AWoJjpHlu08S#a>On#Z99x|u{;>kKZsxQu*H
zu5*!`dpSgp4S0#(cuGMWg3&R4qsnO7c#Y<QU_1nJ2xx5_gS}9w5MPrhg-qE#ZQh1v
zh8Vm8b`XzVu!1&Tr2QILrsAaD#OiY00rUF9%oV|H6ErQc+CRJdywIKBsOAU2>l#Qg
z6W8S)gMFCzNOJA?SV+;jXFq~CNWbnSUyZAmRzr}9!HcAXNc0-tRJzxC{!dLeWO8Rk
zqDNjC1gSghtUXe>I=V9X;OvK#gX;0|A1Plf4Hp+C&40M^uTHXd#RL|>DV%U48X3=5
z)(flm&!>2+>)#Pdm8XQu^JYHX{P@Y-*laKGq+)^Q?n_Gr)h@kSc?qL4h1j<_nv<FI
z<SMgot;wUe0p$|N-sH2+#+j9Li`rrTcw@~qkcesgdHL;UsxJx*7t@C9KMpOnUfn=j
zH0Hl%NOvx>cpxXSX1?b43L|7z{wt!&b$a&I#?RjT8QX|Y9%OBgR<*VKIaU7Kp#5q?
zzTX^=&lMv{D>ms^E!LENTmCyqgEyn8Mox5gND60u&uDu_a##1*H>-M6{Yv}if1YYg
zRD2CtW@H@k!~Ff1unY^LbcNmLuS>BufwyLq{)!FUUu%9F_20}YUO#iIeFndf$2)we
z_krWvY8`sjR&Dy39>ua^|MTSKYMUir6DR;pwh(@Y0gt$lXkuU(JGXfMw~$-U8g7ww
zk-wO?{s}cFb#9s)J~nfU{MB)pA!f%njptx9t0eXLY`00pu4EhW*DBS2HQ|Uqg_{Wb
zeSZ^p0kt_FEyOcR=Bj92v5z8>hsh9e@xOg-KfS5uW5>UGWaOG`C6eTTBY?BT3-SdJ
zo?u`=Daa?2@kIccNHwf1LR+3dkt)d<tBeQAD+^5ZJGzc^mbVn?YJvsOsbj~FoNdAD
zdiPSzyDM7=4fR6>s`f4dRY$9QRnrmZ{Mo`&SEe4~^{KXcs(mDT>wHSt^d#YE-&7&_
zYJqO}_aEQCDhl>@Tf3Wme}CunaoGX}Uv&g+niZqr65#|kF0cJwJ4`Z5)n*~Bu%0HN
zL_egz<9~^5z7}v<NTiyuyv2SjRJY{P(c|mK6zRCIa^om+q*$*cr6*1y^)FYVZ0wO(
za9|aZjeQPI#!I&Vz_m3wng<Jo5*K|J?%C~j<?0Z#hpXTy;UkKeIb4Q+K)G^@SEcwi
z2PA2rYg->6Iv@Va%!il5OnGdqO{WUuIKtRMy_GF)9<O<0kZO}J=N;QGPjEqXT}}>X
z*pGCxNIe62o}Bl&OP3r^6t@@7=sFuJj)mCfm6O1A9l^Jmqj?}4o%PU;r&JDPXi4W8
zx*sBLo?lSU2{uj%gei(l+jm^kOM=s2l!$I@qO^E7%u%0KAuCwHKxHk1fIICeg12?L
zNQPC2!9S!ChCM}XIO~Dx;^eTMVm?9j?rYy<6MeBS5dP%Nuo68teJMaymjU6<K4VNs
zS;Q8^Q-or4S8OKp!yR7)_$B0bh)40LurdbH*m!VtxXbkz{Z)n-7l63mQ!))MZ&exz
z&FJcV)0kDE-cI%$kobd)>oics8-t0#d9fs*5+g_CtE{K^31W(R#Qs?7d4(TNc>^P(
zZNNw3Pd0od=aaM~az43XyHg&Pu?^(`m<EeS0PQ%G!{PY~@m111&t@)=>>mSBIGrih
zQlh5_cuQ=!UF8dUa}WX9bV@v;<c0>KWCz)`5i)g(mWR4m>ZQt_(VStALoNI~lnfw+
zT27e(BSbZ+)K|$eO9ZQEc8FlY-wzSNe-<&n$P2I7&<U+n=?KoNXG<_f^9Tn#^d@Y^
z53Dm6`BL5VX?&tpE?SU0u;aWRTGy3iU<`sK;NT&))i7XOqs8o_G)w#m1}X|rnV!Yl
zh_(N~8zKIPD$Q4)&zKn|d1Xn4yWg70CP_vd#X&4KOe`SI()xW#+A0j=yT(G|=usQi
zBN5Ixm*Y?J`GA&<Eg8CeEOp+GKjM%jA6_6k+(Nx&agU}^_QO;)YD5f1Z_*f;q+tR|
zvH*!NX2U4%^?ebG2<)c~VLac7KNF2UAb#Y<SAfmOD8jxxvU8%$56j@i@UV_qcit#a
z@tBXzfdDb2LZ~Ufiwl@U5x7tf*O%P5$z%j~LuLXgDaUca7+NZd%&_Lr5+P%jf`Zp7
zL(;(!cDyv6Fo1Bd&Me-r)Q#q=V$T8hZsq_E?|5SyrQlBVqa4^wTreZAJn_vkN3k!?
z8Wea8Ixtn|(RbQcpcYH4R38keFi>*H-Pagrc>pGX#wXb_L2t%mV_WeVs96qR$9brE
zi+5vMNL_%(0X&0Q>K{zoD>~>)_Sv528_dQ49^pz!Y;>W`#87$pei>qco^%74*(b%Q
zD?m~rE%wMi&*Fy)M*Nwbuo1Ebis1@$)g6^A6$M0=2qa&pDJLEpCS1(<E6%qUTd*q+
zXN{N|jB&E^frlz?48Eph8AR<_1C@9PbjPGhG;N;cNhk1$xddnqkz$h&N2<CMrVrgg
zU%Ui_XeQ`ZpQq~}1*ubF(3qXK2x8}Ho@K6a5Erc7BIm^z$gy9yfcOX=S|{ZI7xbC_
zOpzdcfa%(^ei(;7z*L?cX8f>pSbOj=L2?|@5$27@h{2AX%$zI4g&wBzuBxbc8<^3<
z!Ul=~3g#7J9+wW<vjI*o02MX!?mb=skR&wNFwXauwKNay%4!!)F;z50Fo}ygTx875
zj1zz!OWeK)28k(X8<`_Vp%T6-Y#y7eFNUxPPsxOvr>8!%*-a#WW?RpLxU?naIPmei
zXl-?*a*xAiCh)4LDVS3jL>K1SUT$~9UzcNDa+r)|n}hKmn25cs#DmDr(;H7O4n4wD
zQ$z9$j&PJMk!wj8ov%?+0d@O#%wLmO$czM8gS598HxVDIAz{fPCc%m0ppKzg(|aPU
zF-#&gSl&5A;VCCwF*ZmPgXY>L*aaoFKvl#9&EkAhN@YM5ncuQ0%$JzK4SqJpMJ$EP
zU?K|j2vbptULjQqmED0vJglWc38ljTWR);DeR4`^tRt^tEp6jpEz?R&3GDu6Fvtye
zl%b6P!4zZVd^?^?!9k$PUb;~W=lkiJ2TYXkoIVCK2|H+f@))fajsw%=T`aS54%T%j
zZ>bBAh@U#C<TcI<+4B<J_tTUq7CmL@VJ`#qN75PfE6H;|K~0}%z)@O5O0qnrm(Mxn
zYmg5o0(Qhy^g=lf{IlaX&)@bK>@8%L6KF@5#=(|0Vo-@7@$oX2Na#3_7{?KOP&o!T
zzLSEtd>2Z!wMj`D+RSqnTo{j{2i$J>Dt~&-2{V^s7p-Msl<wP8uUidk%cW*|RaV<W
zc-?~SJS@gTgSA!;8y{ohHZlO+-()O)(IwDNoH$zU<qgm;_3|l<JQB?!BngKex${B?
zj;=5vea0*CUL#^LHt?7)HbJ*E=n2yR6rIFqGGa)!XcOJfmmGl}9bMFvT8M9Oeh4v&
zsH?<zco$IVUQcYMDc|xM?(zo&bB0wndi>=|M`kvlCV1FD*nmrt^ELB5HXVpbBRU22
z>kddCoxD~|^5POuF&&0FwQ4PylA@YRt3i)VO1t#=OFnui+sK(`7W;h$7ixfW;Dpvi
zCzMBmUS{a`Fo_K0*nv@=4V9J$U%mtC#^qdajW|1r)t#9X0T^W<4_2ocRbZs;ggEJ)
z00ltOAI6;3A;H=-h$Nx~SjoI_9jy?OdeDm&?0dIhp!M5pOKj}2bD0m1{lE&D0y;ep
ztJ_#N$pai9*;(A=#T^AW9_EuL^Wk#Qc2#}m3^_Q@(?a^UTF$hl)I4t*AJ11&FBtsL
zUZxay#~yUy1=xoEg68ZYw!R^z>4d69;;jVl`->R3vqbL8r{AYfCIKIf5fj;N|C2^c
z5G_$>Rezm7=fUi%96I+nBrkWp>U)g&r0S}$(E}$X=?mW@vv->@WrD%BMF1H`u$YDU
z(@Qv@x*sbo7<@dvqy@9A8?X_9=2GZlvi>+%mmo<VdH{$X0D#zNZxMQM%5es^XTJ65
zybT=Rtkow5YGQNmeA%{M89Lhz>}n5slD*f8iPxzzI-|AyV7k%zWTQL7cvU7*S*Eu+
z*#H>a#?;QI-zNP+C})_2P7ZNR5Y=Fqa^k+dX*)2s19YW@cPRwtiVC_!ko9)3^!th`
z4q@Ihkn)`HP>~-_r?RK?^AYWYcgQFQcLX(yjBb2vS(Fn;e1w3eT>KD2H7+BcJ5E_&
zUvz~nESCej{R^@JR2~4TLvrAS-$FsmJ7KIa-+#Wap}uI4mft#G92QsDASRub?EcOy
zIij&1^A+i16Y?ra>>T1DIxsIQJo=Wf@m<M*L7ng#Rl+b)sJ&i7*FUMP4e<B`1W;y>
z_hk^fg+4tQg(rkX_eJ?3^wRubjdYKa`#56H(BgPu`9lP_m{&5+EV-Le3dsRw*{;#4
zT_0bR$I|h<dJ@1>WeLl#vG;Wcm4=JT1#*wrcZAS>U}SUov*7&Mq1_Ux=y8#-OHrh6
zEQ-%5*RU!R*H`LhQlfov^Y2Pn_2nnJN_e+fr)0p*oD$9W68(5Wz?b~_9F_f3BwJ{I
zOR{V2I3-3<bw_)l&@0|#hz6|CtoSm%=f^t_?aaa!9>uDrWEs8sc0FR%Q5v|DxPPcJ
zuDCMJlbtzKn{=i!y{Ee6wkRvEa3l`uGT9R|3cYfxD^L_Y0LmI@Idd7sKjp~ddVns{
z*${_wmf0QW;zpwFo9prN%@Cc1b7Vl_ck=-(acw<dNV7i#8t&CBN;yM7;!BoH)vo^8
zAl7L-=-FsKoRGD`q@F=;ldIH$`x28uoqm8Wfv(o0QY0wm4kAE+LHxetam4FP1sWU}
zOYoHv-jPctH`(^*vr%tBPFD!dRR%82&pwb=MH|Q4MiF`%_86kPEA~FTG!HLLuS;Ga
zuIOrpWKCo)Zd;xTiD_@cR(s_E)G`3Q&gMQTB9BymSX_mNHA%^hfJo4>Q;cgA6aK0F
z<cSvHAV&s__AU^?7Bw04aloF=K;2=0^(B}p#%+27_2ZY?p&~FQ(JKv9lK{3HZs0If
z^GZcWzSIRt(_=z*ii65h$cPcySP1^ES&@+DYQP0QMFTbn2~vQ2q5#9c)nW879?dh8
zQ?ZD;rUX29$j)1e7H5I?Y&TJCM9kMH?f(b@k>v0G`cmDW+n`!cux!@U3xPgzAs+^+
z6!$Wa86}1it)%`g3`b=dWb4fI=D-^VJZX%LcQqCuZ5g@sjJR%BZ+&Ag)*P6mrg$Qd
zgM4YdiH8{{>WN$Aw-ca49i%UUT@j`!0(TTJdtm%)XD2k|UTxN+1B40~=$;wayII4b
zGDct)pIM0h&6RWocqqoT@NbCDW(uU91O~Lv4Uh=b1#I}+sWk=+M|(NMV6L?P3K*kp
z&;J~3?Q7SW`EG~Jxll6{;w<0bidko!0MHoVP7^<Ut#FjYPnD+rtObngKxN)KXD(ze
zfnWNsZ7T%50Z3&o^ORX=<Jtdt#~u}S0<anaxJh7Fx#K2lAn%}#y;x$!jO@qQjr<L{
z%EPr}=vM+Yy<Fglq|V;mncnh{(cUE*m4MSaS7!-C;(=pxBq9Q;i6B@GGPn?(6ZN5e
zuV5B1kN`T;1A}?T%tVXJ4sRbo<9eE}-N06T8T;>)fnWC_^qogvq=BNVC$}Mg2GxYy
z%#t3ZJ1fL)j<CJL5d94@MMyXz{H$XD7I$^tCZnV6Ti?;|oL)7~<g39{fPbE4_Oc%u
z5mg(lJlnPVtV$!WpW21p4W5~U#^;<V;-mPl8?U*6-uJud%#%0NQw1@>&FExh4%A^E
zg6aSRIi#(CL`X`+sQ@bg&Y6Ua*xt4X$WW-BuSJ`lfTc`@>kXTVv((=%knW`{7rCfg
zD@8_C!kC(4MqE%!0uEgTEzW_iPOf_YsfCsrD30D2z+NJBGrdej9Yi$<Y8o!iwBtnz
z7Ze<P(VXGH1((zS-$ib_8sJ4E-Qt>K-b()NA~Y0))MCSWnnv_~8reP`vHv~7&>wa3
z8Ffh<b;}*~$W@(e0xwd~Yk4TM6Od&?en)Ubg+xakFc&e_6+q8^{deKvupS()3^>*V
zx-dYeWD-q&R*OLh)o)iUU%Wfs*P1)%Dq0pFiSkU~QgLJ0YcPS5QzQW_8DOgxNSAT6
z0DN-0x)47|6np=<!<5DDO2`_t{vPmM4Ed!l1e3MkwYh_xHQ+u+oI@!T*?kPHuCD$y
zs5tar9dc2-PC~8)X~NW639_$6A0Aj11ZVzsXRlYY&YfthA3b}1;{4-@i@zuA&LfYn
z5ugT@qt|ww<5?hh)tz0CrFf{pGk;wi5^II1Hc;1V10r=~=<$uGzi;SF18UN^2W1u6
z^adR<FdM9~F{h+Cq|9ok>aO6DRD5Zd{^0F-VXD=EWeuV~^X1Ql`N=zrqJ0_l^W>cP
z8{P6kt9%vCbFGK<<#_z9M%+!!J-4-6ZtGsSt^ee<;h)<ygGrM`lV+<XE%r>(TPCe9
zOxiw~wEr{7Fu3Ei=#I;(J8paKc(kbA@w#xw=gFPL=zpesG7kWZe`2s$0KMA60$3mb
z3izKR-ia^BFDNV$7XSYo@ePel%`L5{Bfh}wVCVlF@qI^*9y=~M(O=}!H#m6m%&{RS
z!?S-$het*a7+!Wd-)vbpQE)@6NOrSwvgTglgVGyL`cF!xYaWeFy?p)V?YnMyfz~7d
zRwxyc#dAVJBO;v5pD+5?Nkw6UVYHa-BdS;@j!T|<L<taP|J%b#7Fcz<Hec*e8BoOc
zqE6!e7u75)=61ACg26U;^Dqq8&!OBQP3V#ew6R3K+8@n24sxy?3a)<R<Yha3NL-+u
z_;8wu1O(x!D%I9F7ArWc_CH5_a$Go|-D$3#EW-P(SU65Faq7u$H|1A&u(>gXt8~`u
zSv>X~FD^Trre>3L9^dK<mW9#kZfjDKmL*@dFy1CO@%EP3v|Z|QrZRGMElsn;c#YIp
zV-d#6Dq1I!7(~UX5Ss1t#Rt?IX}Y>+hrYZl4|HEgn-v)A_GsOnAzGbkhpF0m;vXl|
z+CNx)B-ISVXMTQtr(9{4&)jH@?ZmIzoDWA)bnI<Q^l|J<p5wyk*L;(^o$2zt;j-A3
zCUa9?VGD;n(KO?I_{pl>LfM)pW{w6UdB&TJ|8vA|iAu;V=Xj_Z$Ns6gmikFYAvHA^
z_J}FhtL=GNar`>%DnGwxtuXeO550!=(!hkeu=y`aG__hV?`*t3I>zc+%_tDUjwod^
zOa)H3hN{KNqK1x$n66$6+r*?0ng!bp0z(1^twwi|uYR3uSpWUKrI&Rmzq?w?(d2b{
z?!Ue74t8U9m9*3-iq>YtIjwu&+3Z0ev>0C+O%Fn%538?!X<qWaw<qGo3+tB`Fqt*I
zm#t@x*q%)}Y<$-sbmrLk?|;u6|Nl7RE&4w6Uw51Na8ed%^KsyA%=(XmQ)~M^o_f4v
z=HqF3q0OhES9R+@oq5-_9=GZ5Q!}5=DK6W5K0kMV{pSnwZ~8u8{QZ6A^Iw3ntwM^?
z%2EvDERQHgRNOx(Mv)-fFJtPlSzi_|X{Z0^h|m7;|F-M?$_SXfO7A{0d(HOrhuI0n
z72B`Z|F0wd>rI~@AHLrDKXYiU4Rg1HEsxGkhPi*7yTcB$`*t@vcEh)Oap_0D-A~N^
z`0W9w$nN`8>VXa4r!&?QIS(UF_T4{_wd7+HO+%%B$78#5q^lcpR{mM{%<S0{;nTt)
zrJ<V^O<}?{e2?uz*Yk-G2bZuoX%5a;M$Wu8-j^YK!QX1Q{mDVoqdD*G{R907<+=I0
z#+zdO{+V$ma=kt}C|~w7Kl1$3ug}U?$mg%e<Co-qYBxImd-l5f=igstK@NZB?#6Cf
zbm;Qx<BLA=pH*m@Odnq=T=*eaR`uKD)q&jc_r*l<kB`qsx9sA)|9r}GlVak<_n#FC
z)womtZe{(pb(H!IIc#3=F9LomHvo(MHUW$VSUK{qC((X3@s(o_ncc#{Gj?`OYPCP7
z2J3EjT-yC_Q;3O0u*2}qx5%&RW-C8s9?pWlS+I4rh5mA>-+7t3_PaKfsw?)FzOi`?
zjA`Y~8EVn23ND@(ruzJpoi;87+chq28mh!UFg6h$sMniO${UUQ9Zq3c=kH6E8!Vu=
zl)`b|+p!v)mh1%e*j7Ew?a7ydvH~fd+<e^MT>$}QOvIL3-gV3svL^*oYGF0{KXlyY
zFq6GSzi(RDb6{V|#KP7!V+8Y<EkXXQE6(2Ro2K9CB~N^zib6W`ygqx}k3CD}_>2*8
zl_3G+QIznz1-9PBxVO=>lvaNXk#c(}OM4@7Mm-;!<ZBieYJ%ww3nL^JvwT@wS8CX@
z(wUTq&}~wxU%#)e4)q+VBgLRc(iMb&suzpbY!uY<6iUqNTYS_gb@~VPS2W<&j~-N#
zpC~cWj=kxpLK7F#)67h)R7xxk?kBBcIW2AHXKj18H8{H6*e_(*|85kw!aF~Jaw2lQ
z!52h>+6Jk8nOu>op1WUUNpGbS^wz%6jgK_37>U1AaH&SaD;k3{_Z=bItL>?MH?drc
zdMWts@xrEsxI^H?0p8S#dnv3i<xO2@FRZV<y|L=i<B#LkWBn#adNy`yg&4K>rZQcQ
zeG2U{jmxC#a8FVe=4_H)YQzyT?^1KuvyjgT!tLakgrw(hLX{nFUhz9p{C3;e>V3np
z6ZSJl!l_Cc>t9b7ofsVG2|v0ncH-gvv)>0L<wvv9m!jpm9g*%Aj&96eTE>~xOn&zJ
zD7R?o;}^OISb09jwj7v99C!V3MplkVJhb%5-w8j?PJLXv<MhOnPrH7clar3;Tv_^b
zw(-aL{~3pxp1hB6S3i^XIg)i)v%$h-&*uxDH@?s-zVmRy)=$sdzDPnnfNzX##9X<>
ziz{~$Uwu~l_etFXF1<2d=ep`Zqet6|`K9>ZN~VW`u3K1GXg}XlN3%;m&*Jd)N^mw4
zmz<he|CU|V18l3c%neyfD~5ohF)0nK!zIFV9zvZXj(hao@&mj&YHJKrj`8)!MCO%n
zv58-I=wQAU7NlIzg)ZL-{Xi?jPx|pTpA=_gn(v(^jHskclq1efcAF>s=XW42Pgt!w
zM1spnbxQ5vbjFIxsUQm(W#iL)Z_DSVw}!t`<DRC(D|RNV_=m06$e6QcJ@gKmH#s9q
zSh~buB%Q^YEh<)Qu~1TEtdMlw5!7!rNnlI|hE*dRi;osv@#XkUCYOqKj^zhB%Xr_M
z&v@|^<~tUy>Vyv9M+F(*OuSOl!pa&AN`}6h6Kn`hYWzn6@n>3NF@BS`$>d(+vE5&@
zB=cYsVzg?E_$N1Hb>E21mzew^%M+Ud&z~y`yz2hfNtIH*N8R?HdoTl7d&j~4{TgxK
zFbi8qL^xZqJIyhv>Q=!0$E^rs@rD2n_1NlPFHoHlJEe;F?u+qShhE0rc1rTpieQn$
ztG3{A@d@fVY}NT(;@s0)>94=Ee;()%<S>EcBs@J~itpO_EMZOAY<Zjh1HTn4-sd01
zjY~%U&iFH%U=}A->WdSsPOATM_B3u}C;3CnlXZJkeK*frJFDR@=i8WG^b5c1@L59t
zerfYRb_*HRkxC9bt)H)D1yt63+4$>Ui`=r)Ur+UoD2DDgMFOc#*KH2Y{#^&Y)7yM{
z5bOaDS&lWY&-|RIJ)r(->4j5MH}K)zg6YOzW06?n4Zc%`>WA&e4lY4wGTA2c4eyc*
z)EsmDZ5Py7Rj%jvs^Z@py*O~=SrfeJBor-x+W0-MO{rd~T!)eQ&YZoL^)1ETyZf6y
zf5My%N)#qYb?cqRFRIA1?BbNqZrA68i!E?F+V{1}Jsl&{+qgk<-wj%WaCcAR4sToU
z1gM%bfY&Z*`COpFoG_4$Q}S3pZi&0EOt@jT_R{xoZpYdx8gx|I!N>zgoHc&)mZ0sn
zub90M&sI|5#^Ua~@XMt9V)<TP4c=B0|G^Sp8copPY<yA`cRO-jox-?MV8ZHQS4sqn
z#?u7MyfPs0$7$`AF}}ZJaY;S+r5Rgm+Sj!3_MTP3^J8%-7WtD<4k2bs0oRL=Q-r+P
zUdDANrEP1b30>0kwdb64w)xNaFVha%&S(3o=4_{H?O0v6y%m#yt=rMc$?-@>eikG{
zJbzR7Y%BNT7G5$aO<ok6w=>R8&rMkOV{ahK&wj^>uKB$k*#z6{?H;k&f60Bfoh}eb
znOXxSFYly0?$;Dm0%oFkLv^n_VJV(v){;R;p!oZD6oz5(8`rR}N|LE8VMYDI&h3=a
z8cFm4vBt%m?8DOK%~#4Fy>JVo6d%plQWczYW{Q7AxUGa%CiohqvV;6D9XB^mNSnt$
z7nDEV0!oxrGkuGeSm1VN5Rk#$7Y?urXnUi2R%!AHw&J~f31CbQ4{ygkJx!={Gyh|O
zceqPEmu^SNz}qt_^A*tFZ_{s$xfj)B(S*44I2<hm=S_#RJKcT9s>@_l?+3g#q_9F>
zC_t*OWE0@oD*s;m{ceqr9=skt|Lcgmt0V&3uuN_V|9hfV#4RXigU8x8TzA2L+8k3?
zNEm*#rb=8_iWHS1HD%1j6@$4~{j1+jRaZ%ZSW|f=id|2s%WZxx;3zr#LgvN>d493H
zu3BDO$j+^j*PwTLWsHb_BkTSQ##SkIKdoD7$2d^agTH!d@4t%bLZEV65#DjgF044H
z&I;H19(U`l?mY_v-wIETCrtC!vG@lnXpOzJoMpA(IjdC`1^ZXW;;+TyRJw7uitS5^
zsT8e}NAV@?Q`yH+lq84Q@`JfIC#RIQn`^pz&b=u-yQ~ob-fm5Zv8*^xjR?E4UtooY
zt=2TwGfAB#lbMSdW}$tIn9gy+!WqZUTTAtO%LPA#Y3W4*e{qX+wY&0)*)tqqUGf*_
zB{VM;RSV+Nt>y3d2VV~1O5EFDE-zOP_0P?~TU&3|i(Xh<no)r{fP>SDb37K)?;fBu
z97@x2kNUZ-m)D>O@W7d`7IUi<IXDJKz0tjmFK-pf>S4?BK2Nh&NyM6(!b*7@+Zs<q
z{XbD%23I>XmN&IAs#>|RuP(duUv@3|2Unv*pmO$%#-a~be#TGzp!$Ylai@U6E0;C|
zI`<UI(}joe++8?kPr%c)d(O+<3jfBfEUwQ-pcmPMo-eVvJJa$Rhxx!>4OzYSJLW-?
zdaYvTw_9sV6;%SB@t`LDSqOejy!bl~UwIgJuK~AJAmGcrwwrc+`MIGEIg+ro?*P!$
z!{+Zzz}a&SlQ_E%hv0^-@Ojtpk{Hj&(F?%zaOjSoM@mp29|B(W_p&KyV^sHL#o-!u
zWn!$hWK5|}&o8+s36?byze_ZUGQjV}PK7-6dRq4t<EB6FJ5+9q7nmL8bmpqp5|tSp
zhF4kIju4GUmi(a#(&iHpsY!-SF?y&Yes@2;>3@#+b1t7A_KPEzPXsSFC7!%IoL$d3
z?B;FfdhX=nUnkAaxlxf#PY46Uev2QhZ4Z28<8W@^s*~xtzX#UwoBz-U`(Hr&OK@j0
z2NNF+CjA<`>bKunc9PR)%8ox(N`)wEy)*jgJ1E6u#`X=~rx$&-eh_jxr|Gm6@%XM%
zt9LoL>FLw&d{6LK4lP>lSJ-4hiCG}#Hx1E;V^U{^-sGLEDz&a$d8WSUOyjvT&5zEs
z&Lr4n>lcr=uUL;~DA5l5+J90u&@3DJG<*7v6@mAo*Tt)2^`$;UZ`W~Lo7q3OTlHr{
zjkl@4a(g~>@Rd_Zd(ok;M`-iW?@wq+r_JK5mE`nq+=rLWF1kn1?>K+2%BOPXh>k_J
zdT7;QX5Xg!o#m3PUqkUT!TXyZR;-KO-@;}VURiSITE&Ac(DXIj4&O6KHhy46upf~g
zL(pgbuVQZOaM}T--MGagJr&{uRg%CC**c;L>BXB?5V%;3>?`4lgj_)Hr=0}F?+4-B
zBwMc^#$OmaUCJ)Z{q7fzfuDj4BW2I^9E*E4-qBqDW#7#mxDOT$l{7AE2tFO6md`wL
z_yKWYb}8w4fuR4WllbI;9b@%OX^rCi+tawuOYtRVaewVPUW;ss^9c++kI!C@yVzM<
zB{zMN(6oAXjQVoP%5#3ZmS0Iq$Un+X4{jhNmk~-WhK1r4DRtl+`=sWHwAH!$D<vun
z3FLO&A+AK+&H*d0<8(7{uM_ZZCI|^1DhC*NbD*gNPB)WxFP?-JSc5_at%D~O0Z@!B
z%pDun#5i=r=glMkn(9N2^&uo)z_k1?5i)q;n%$SQH3jv#l%?5O>E))>Xk3bupDjEy
zgTL?ry^}I=4Q&6Uv5>vz$3(F=JpMPQZKY;?x1?hRcdqe9hWEq)QARQ2>ZVfMfh=5U
z?#)X1%4@yuao19Ug8TBCaPg%^b&ARo*_GA_jbic5LUBMtVh7lWle0tVimSH+@kbt?
zHg>|P9K{7p1U7RHZ#j=sIdV%t>l12e=)Wnb?S>X7?yKcp;d<f>7*|^+02Q%@*HK)D
z!aSjUGV;anS!sBLF~BOHT<E(y`u`C39)3;zZ?^AF2(S|ZgkD4pO?s6MYADjdfJ(7o
z1f)nuq*(}|h2D#Rbm=HXsnSu9CcTOVq=QP6A}Tlf{k54huQPM!&OL`eVY5F^K6|b8
zUJricp)hg2Z!{%)<m~5xRFnQg9q?3t0d?AQgO{xHlOx+xL(#GCK1FyTvwInx$FzI-
zoM>BeBU*Z$7+noj#A8t`gLw2S9u9r*#LFSh6NTZJ*Ew!){6r}UJjY{&+4<UPlxatV
zcv}IZ^2rt)WfcI6%pQzJkN#jBdy1X7V~DH}6N7C`^_fh34T~#!!rT&8#r-C<;3Vf_
z26t?fR8CaBo%eW(+YDRn^uui)lewA0ZN~JSzK71Y&Zv0laNZOQp9#e}+bnv1Rlw=X
zdC2X$&(&ndw7RwTXC-2l7-qpK>FE(XJTM-yiNd^jKQ6NgVHa<ak>WH-EF<7KsS|JK
zrKfUWQB$9QyZ{=xeVk<1ScDrOg!P?EcoRg+YQohPjh~WnOG=MKn5!b6{1B&v*c~%}
z2*QT2OR0#ZqF7vbdIw+IcY@M67w(9FcA^wji545}(3jH3KrGkCCt3khQcQ9vCh=&v
z8v^n;7&^GA9k=-*274-yG#Q9r$Rs&Zo&_nK7mm8-Wbl)pWacmZNItwuD@aa#=IfPR
zhkmG}1BUcf%m9t?fbu6`jViost62rtp|)ERfqkNB3G&SLBm#2+ZDtQLL6F=HKt82~
z`3P)(JwIT|Y$&J5ndb4t{L6_cl9FUAC+48!4oiFp$<BkvmY1Zr5Cx}|pxAx@`dfk%
z@^evmSQ~aYeULIfoAR>^pUNiNCHa|9{21MJ$BRbkS=m#e+3KPEj`<Z!L<~hR|N0^o
z{FwxJVtz2Bb>V0kUg838vV@zTlM1;3=C~Xqj)QJbwGlM5KDb@_93};1h|@@)L^%8a
z7l%M!iD6-$#ZdI;DJZ?^L`DQEOgsOU$81i6GidGm`Bft;dk7RTfi#?h^Puee<ke;e
zz^@V%K;?&2spJN_jc6?A7M<j7hx&#5JVtShf}UDvck|E@yO2M<e^F-rQK*FJ<!d_b
z>YHDiRW8p$#}&+sC@$x&T(U+t4p=&8zCV$(b1f?!yM3fMgt`hsP%n=x8Z%+uY9ihy
zm18okEUT+lPnX~C&gX?v5z8Z*LvdRlX5m&}uNcqIR9f#vk@iY^bLKh~y{j3y5;K1(
zCBG^c0+e=zO^C0ybner`-x!esP97t!#5t~k$d_mL(05yim<#@W4|G#P70*s}<KVKf
zUoM-iEs-j>?!Ducor`rvU~>-nBq`3ifD&cm1>p~#w!lkcbmILC(_0PCQ-8iU0A_3P
zvy(a!bw?tBcZ&3jj(T9f0#9dFtM?QbeP)eVL3$l;^Mv`RR}GsG`*P+S{IS8~${Rnb
zHq|emg9k`F+I0bsR1Q$LzYr=QgbguO`m0SE^iP<TSb?@koWrS??YE#b_;PrvB*ow<
zxD}@%U!<4kmC1O_awV4*aq!EE75{75{3NNvxWSF!PV*lZnc*U3XT)g&xb<VuKc7g&
z+5QCMMz?zB&tj?2SP{jO;>RWqs!Ydgx(TW_LcGx%?T3jdJt6~p>P=D*y4$TKiXl2q
zv^m>u;U?&P&hzpCE%ktKirTDre(3oYOV@)b(euV7U~jA9<dY_x!oh${)rkf&FoAhe
zXC&y~cjIiDEP1g{>1Ey5UgIYa0g%Y=JBK@;a}8Zz{mRXb!9mZ8=Dk&U=M}lP23LC%
z(Rk5YrB=i1#%JAGXF9pHGkFo`=fmD7BAXP0_cz5)W)02<2}K5;I%}#hl`6R%I`}2z
zJWY4nIVRb=V{(V7Zoi;n;6dv#0)qA}I1-=Hzi%@ijXg-?2T#U;wh!U$u1^xez~dOp
z!HZj|s4dMUxb4IK@Q}-vL9c#BU}<_?;lnNPjQZ!Xt&>r>pKs*anGNA0{fFE@xw}xh
z29>e%FT~bqE6?Z~b<vHPI;^ulRexME(%X%`>x{UtcwSDv=~33qChf<;Db;@n?Jz)0
z2>^k|5cNMoJM3>lJCQ9=Gb}nLHZDFPF)2AE^&dieZeIT1h4vh|a<b4~{o-X!ZC!ms
z<Ey4-vd|ugX#dkYn$Jv2)$_OB(eXF*u;&x+XFq%-&CP#W_${=rW(%%;{_=HmYkO9B
zXK()?9(DNR=da@)B7{q);z=t3WYW6pwUXT)isIADAcph2j$l8dC4)20>xw~Z{4*2z
zuM~Shf4bt`wLiV1S(re?Nxc_ELu8>{<VMen;*r9CzbI<rIj-Zk&|WrGZ9h_SqqnAf
zrq=EFQ_mCq+Gn$kK09l(y|vFjw%{pfxDDzm<~oREp}nuJ@>5qVpMIu6ebr)b>KVrm
zef8C3p`DDe8#cUH9Vxn0YT4iLa($x0x;N9XaTz~dcX$0me`D>}kF9|;r;J{ah4$_Q
z(VGLW>UWk0^Qu_@3*a7fqA^a0I$Nb};}k`#^*%erdDh{@fUd$@3rIbc#D^q@=IfB#
zCr{`2B;!cmcL6FP5+25CPYM7}7nwdpv|FnMqO^qOf|yP1=YrX7i{?VOyjJEy(ILNu
z_GJ6{-@T*r;bJu_^AS>Sgg!;ej@y5VQd}Yn?W%h#pJFgn!Zxx$X*u*M9K~@q$40f{
z9IRmNi^04^7A^sT)QVDkptL-*8Nb97{|-sd(8z4ezddI)Ul=H|J!!Bo#+zyB{3d@X
ztzDY9oLSn`RVXZrLbYWDvEErZe-FyEloJV6RJRkYpb{|THun&)xgB4vmY3n>H~Iv|
zFOpJ}skeQb3@4S`5y^h0Jd#%*JQz+>E9;ge6i^Vq>Pk%<d0Je2qro&eU3hh^virX*
zw3mKq*!UNreO;t@&m;V+$kEceq-YW&W?j={Nv7>WRkN2Pe}pQtn;_$lqp#1RcT2By
zKEGd#CJXJ3CKtOt--+yz=O{q@Lul7{0!IqTJM{itXs^D@+G|olC|_cfJ$)B(GU6@s
zBjnrEK+o89RfgU`X$7NvlXh7SopxFNc3#EJ%U57~yLg#hjgAMEhi?nvF5j*{o*}XR
z1Obf`O+4=hH?HmDeQp+co=!(3$>jtrFQKGDZ|ZNTGP^e3sL@eq^cIcNh{t^F=Y4zY
ziEH@$4T&UemBWE|SEhRU@*PhI2hc}&+*?zK=Dvph<Dek`DnQH$U;>T+DF_+3v2S?)
zOR7h=v?+$v-*}7@inejcv@dz)wBGC{_RiD!qtCOi5569^X1nQ#amIA#d%Sg0&KfN8
z)GNRGe6q}|_p@IMslvxVBK_UU3%`Ds#*dqI4~(AAd_8#e=-t<&V|>7W=Fk1h*!atz
z`*&lby`%Hb*y!o)`$t{z_{8MY^vu5<8*A$uzsE)v#n$dO^4K{1e)M~602B!F*vM`R
z1et#Ob2%M<#)eL1?(ea2=Y4l&+<#+k^h0p})w%JXjScr0Xf&VxqZv;RZiuxA4YE}P
z@;9H8JbnT4pE*?TpW`<O9TG?ki;Rkn5r~Nog`r|D5a5Kk5Um8V&-w43V>A$xmKID`
z87&NJtdOlIKoTI(=+}hP$Z7%rZx2dt{ayR~*K>SKs0(6<iHN3&=Z%i|^op>yRMOkG
z8I26uu7M$;U44OY;26fpmC#lGx912(d}zi8eF=sdOEBbmF-<UFMoY2E+PoOts8)<I
z;pz_i-%3Pg_~Y9rjpMZM@X?NGvhag^x6TDJ`eC~5a_pib5hjT0)jaC6Ph`SHUY1-*
z750;IN~w;edLE>sm<G}7FjKqvF1)Enestoc(ecNcC!*grglOGXtC+^VjVNh6REzrI
zc<K3{@k_NBfVIBD{RomECRCNv^<0Xn)!<NON-J&E54=ItT7F%rm7vwHobE6ZeeDUW
zEYB!hy_R-yKzyYg{W0511$s_sKloD+k*(n&q5dmPKjqeGsV0RlGo6Lj3YxG{_eHqU
zN<pU1gY})2kx!49e|qO7Z2o-9Z$rXEDG;DgMdD2q<#CLr1|ad1!=n`s4bR0xKdQ#x
zB!sD&zYPfD!rcn^PV0fY5cC6sHzoL_wi8w0!xZFBwK~S&kjp_ie&q3M%?s_MzNsk~
zW}-nG)F%(#3fwd&K748z|1ly2yBBo~1(EZ4XajaDJOrk?85ImO5bh@Ii+5Ya=M<rr
zQf-nQmLA&|IN0(IJ$Ou{IKHj;DZ{fS<g$>Cydu9qB<f90LRjpkoe)jkR5y|a5C&uY
zS(HJ<%hk~Qj1bKo<YgFkjPVkzj75+qj*fB7pJv=)t++tl{IL+7EJiPIM~OGTtN<lI
z%&A4H2b3qv3d7Yzaz^7IhU_x!_+4iUk&-_7UMKPrX-HYDPMVYs06;`R3U%{qjOSm-
zj=U2RLPE=)M+OC|YYV#(OL;15WLIf}2G=*54#wdzC?uv84%uE1d|WPq-U$P|Kdchl
z<Ar!2JUl2|o5|@P^LLJgjCDAo%0p67uKFtoMmoCSGE6stXSsB{$5bhM+2l1Nwk<oD
z>sEIs!7WmZZ?WNUN|ud2UPhG5zszJXSSTQjhmKiMxEHJ4kAfXum@mPfG#CcPs6+Jd
z4==KT6cFjr-D-vWh5c=QdcoWdw4`QtHx<LnF(4wYS)AB!vj4eOpYF%e3qAxFd*HL|
z&i9~1HDmV5JisWW?j2b4eX%k4g&}CMa&>;DMdG18ru+Eh3<xXvRsMZ#68-RF?mC^N
zuad9y&#-}DF`96wj-ba@B6>Qq9?e8;3sQ6o{=?^#bp4FJY;rXKeQsgk``&x&z@zCV
z`l{(;eh_I0t`w~}gk?7GsRtN?2Gi|xbR<joohll}{<zuwuji#+&RjqYoDQ=bb>X|k
z0Sl+Alh;)(*QCqn^fwVCu07Nffez0`6a_UL`)&r7fZDw6JnaQdB@Tze=6pqR*;LKE
z_gG7~A&IRj&`vl6s*D%d;3dBMLBbpA4n}-Gql)6(BG&tu$xiRebu&ck3wB@`98A$A
zZ^b=iY~lpgE)|!slL&?nG#TP_-pJJO+6d>7gt$;uzp%jFlSu1iBi0M>ReFuAsyxnX
zj9prux*E2~eDqC*79<16${x?dlXkg@s<;O*y==<1da3E$T8sqKd&cA<1(1zy`#2$6
zb{M^pdY&?BJ3joq36G39D77|pzPRsQ%3d8KtQ(85cpoF;%-&=9-6Sz7;ge{FR#%&|
z$^H1XPi(>%0UeV&5_H+a0a!a-`JdZqld_t^7CbyZbkw7gHBBB#q&7H9bV8C-Z3TjK
z0%&B;q;EzpuP|Ra=R3WV*;Ho7+gGcjyK>j=07;Id>kSe(ce6pmBK1>k6~W58Iil64
zGzImB!msY;viBEhDfA3Q`|alK`!VWh>zQ<jk^WgCvinpjs@T9zZzOGcw?MJK*vPwQ
zB=h@jp@bm}8>%<@dr#ka@nVyd5_V_lZ^c+cVqLD@SP5rmvFUMtiD_-m*fYOxr8wGB
z^De#ds<dxq_J*ZbCwj(f8orggMU`G()|+UU{`SnLztnQSXQKK0x950TavEKKvYm6U
zf@oM~#nwCdMtQF?Hmb}<@OO#GUR7#;nXN+a)PUb!bvA9ey|(`JaN6E~=yUGX)b*2n
z&fb|1-}h=;X`lV&bMDu58~*k=-!Cce*WZe|Qo{|sF>F%H9SPpNXQqF{7g%qYx!@d4
zrN*2W%vST=zEdo`?ZZyHS4kwAc)E4nawIJUfTmIcE7v}b3{W?RnNv}H*S}UKqaI8k
zNd`#Xugejut7+ZlKYq_GHiIO2qgdrb2*R(f_Bf?>g!ey3&!0vBm{>CRxe*!_LSpte
zwKES61u1WFL+uA%CpH<+YP#R#%JXUoI;e<ISikWD;oF^;)EyVsw{W_5kB7>u%07$X
zws4@=8`DP~$+dmAYb5G>(|^jON{cQ@zY9a(e70?jFpj+6xqb?&>&7$aB=Jq=#R<q#
z=#Z^DBcUvXAt&sN>Yx*ebC#l%0%A71v?DFo%iHWiHJP_;Km=ZuYP|s_vp;8mtK0jK
z3j?z0EKU)J!`-OpO#3rVJXX3l>v~p$iJ8VcOzsbzUTscyWxF?p%d!z{g>H3Xic|nl
z#E)@NahLDl_{6%}^$Av>z&Pg9`W;=(22@YMZf|njot-;Y9D=JZh16STaL&`E`v)=w
zv_seg)V$j}dv8&adnB#DMb{+dYrrc5asIp&D`o6Xu&depxfZ^U#Ru#)n@-PcpXc^W
z$9wbmnIV5p)0NanJ?3#y4J!+tr+68sC~A92LahS#QL#f(O=ly0U5Vfl+AhEKi&jKC
zyKb6t+7<eW3Sm_C+MXosD-wA&j7U~*XDgD1Dj~7jNOl$x*;zi9XJM>5xlqCGn69L>
zJ1)tD1};H7P5h-Q?+F{HAC^2kP)p*|KmtCfJD`<jE5Lp7=~y<pL5-73A<Dmfv6Wor
z4&o$_p)Y(;7h_UBoN9L0;L1dq9INoy%bR>Ych>BAtBi<VbI~O;xMf%>;L5#E>^=e2
zQ46i-;WTho)BI%}A=tUdQTa_*$6Q<cq9#ol9agLF5$dHs?5lBklu#iahWGxt##HHA
zJ`LUM|Ef*3U<ABK;qADaN%>7f&1&`xVOyC8-_0XQ%YBZpoPawLi`4#c@$&L)rsQ{_
z$#d{wCc-D7gGp(r!Jq0jBx`F05TbZ)6y=EvKKF|aQETSxwPd^G$;m$N#&s9@RuCK#
zJSkIsMjYd}v<!wa(Uorb#0;``D8TEsStjjp$BYl6Q217vlb@EkVS|e0X4VOKJW22v
z4m$vE^3c~a2>(KZWp*HoP+(!UFL&^jK~@y1*1p%)898B(6mpb*<4ZB|D3OY0#MW{f
zYa2F*)lmq}$+lU7x{QwBYq6p=E)X{^zzr=0+l_ge`5@W~#P6HheNqob7CO8)bp#Sz
zWCR_<YC`U&*vZz0-Wv(9NQM8ZxMdvTx}GG?#v0U%b^l03_ssTAm%K~6DZNpW<&rHi
zRXZ@Ho4yM#{tg@Nv1B)58nzW25;AC835L?V4tXXNf;4w$O$mNQML$Kwu=|bZ)aFPh
z=lopmgy&vxTZN4pF*w84W<!g{cFB16LWK1}<VdQi2f50Ty!W+^I{_Cso_ZVwmy5oY
z0$$KTcve${-~!JqM=umzb}K|!%Yqtp3{;BFthWAJpovNVK7{0z)vB>li)g+T{IlEG
z*!Eta0?37p4I#NRe&eHZ0G$f`;0{-u6@49aXqOV>P?Qll==eHf6xzY;m2IS8vAIZn
zyu@L=6i0%LQi7~Sg1m2n;^PFofW5M?1^-mSy+v<~ulaX{#Gu>vI=2$E>Jts75{(WM
zjlV@<m69%7B+(QknsVH*s85J&eRS<G33tdS&XH_mk!(9<(dm<Xr#{(fD%s^Q*^MK`
zLn+16BE`!$#fQVv`fb?Mixgitf|-}eWs?38F|-eDRaNAWesF8O<{0pnIh70|!j_!w
zDx^9*PL9I5Zb{t<aR{G%?K~-PLr>9dhCSjQQ&_S+4Ut@OI~Ey@lf^5B22Z*@7fKJR
zaGnf#%&>KfX5w)^%9&5#)+crv;ZWzc)W^9i+FdmfX6_m3lW_$YS06!;mohk85Ih->
zl#fMzBllmsMWguO9ZIIMity&SGzA9!h;EwKxQ9PZCqldK$K(jnkoYcA*i@q63}||r
zHjND(Z5Wo$D}bX3PqVX<5{b=h5r+H8(5R$h%)hbsN(oixWS6-i+3Z1f-N({w#FT(1
z1f1uNqDk5&;FkdMO@qPv@amM@S^KoqI>gBeR;iTe5bQA_s+AB~k(-T<4Mh1WZ9NhP
zVxsV|go>OPQeF(oGj7>i?~Ygi6rmV?j--UBR0yta^J?h=<)y&a!k+pUZqh2b!+_W<
zH+pKBlQ$5EYvIIJjDK!6$5%n{ZKy1bkH<TkyuvQ<E~ia&Y)*7VK{Frdd?qex&>tqP
zs3ii<q(nO_BWCNf?~A|{5%xjoBJSHXKfT$a0gA+-dl4c}8FSRnGr{M#P{PV!k{)0p
z48|a$^EPv9Zh>s}evyN?y}-Pi;k1&_tYCalFu9Ckyf7YLTr$YUxa2L5;rT&XcJ&(+
zqKIIs$dRvb6~&d6qse;>Gh(CwSRH-3$T1;nlQ(=4`~pWTi-42V@TZ$`fo^B5Mc^km
z%Qby+6YhY!$_T}VVu`qCfk4p}O8P3MKoKP&yF5Xzs#|UWo>a+!F3RBaH#Vz)Y?k)&
zKvG38hW+Iknkt0O)7F?QZMv2QrQicaj0r>O+b8pzCxjd19~3a8)>eI;%aLkeYr}$!
zFL_|uHw*+$B~+AuvW?7n1C9y5a7bZq2N5|%p+yCWpXyU)ybE5)Ba8%sZ#=#E!OJC+
z-Jg!y&PphPbve95F?h_}YTcJOVNcArO)U*^Q<V=J5q9{sX;*&8EmTQg$yl3fix3I(
zUdA&k*FJVi#yR)q+^ca3X18NqKaR9Jatfija)H$)F#RE1p{`lzZcV#g>K=-=)v4TD
zO2jUG!1T^zoclE$*DN;4AB)vR`ga@lD!LbPCKfZomEtY*5y(J?w8_vC$B>-EdUF9N
zH5%2MeTLrMemfv5uKONXTi$S3ANht}THei7KJ(MOy$?+zBqZs8!#|<-g|CpyOnu!I
zM=*|*7k(6(@Hmv?Ah^Q3_5n>ZeThAWoU}oEsFqqv7e$`0v`sh-ZzqYkhww<KgzDS{
z#`RxzVV>8ak?ba~K3{N~H*<&@REe1IL`c23-;112%j4h$4zD3L@s-(wn0-;2pOyIJ
z5GT9fyd)7Ms~&h#71X(UjF8p9tbY%ZMOG^JfW>;CQXg1QTap|5Kuz_Y-VuC%60xc4
z6j|ZJeDoYP*b#3Ha%jB{L4}~*^P9bK)^aUFLU7K)*XNJCrUCBe@9=pZR(2Fz82?D=
z2Zw$i=wbJ8@+w#(A{`am6$KP#lMkA2f!|tT5a!Kz8@E(8Fz>E-5?P^u$PDR2ur77M
zFcdsa#;2?UJ@z|f4B7}7Ns-QK^fg3hI70JQk)|Tt;eD}jI)WX0JF&9oDYiq>>`h>+
z*G0c`(y_fT;O_G@kh21B@7~J?FDN4=5l|(%b*NXbAm2`u&v%1IOJx=YKwLb9L}*_O
z7KqU+Q&>9A%ioV`{0<i--E!Xt?_LLI*gDN`OI}s=vevMA5LrDHdtTZAsCs4E)#{gV
z9sGoBh(f(3;9pPHm-3EQX2tfZUY3C3d#c+Z5XE;{*-wrQ5c=1VKqC_R89ehKXWF5l
zq@uGdR91l4v(XD`Dx2^sMQ?qt$r5d!b*v$3HC7Hfug=+1oo0IUIC3hsc8>A&sh2G*
z`!5N;!BnPU&%!c)rAItTb&Y+SlH2Ph{rN4Qc|6mPj9M}XK9MdfGiqv>W^C9}?duYr
z-f}~+t?ZEL#tD?SVvUQa;|*d~nlIAjb9$97@)=czKRf*~%Q)W^TS-yJ)d)AsChJ<A
zZtknc6FI21`ww3U(l*~M^~c)wCjPtwHJh})Q61kvKN_6*q@P%B;hq*2+E2Q1$vGrS
zsM%1wVbQV9`NX8x6FZ;MI{LPohWjA`lrzUTw!Zpi5)I;qVvP}twKo(uB>Hk@-RHGx
zTmNQ*iau~+@)7Cf&5?*3r)-1c`$uNc%>f2!-ouusyvAz=u~X|{oQKUz@#2=FaY(>a
z{GQzp)6_?^#v!@2Pu*^QOJ_*<?6Mn)Kovg^akPKdS|4Nkal<(tc$m&L-Egre?4~o~
zq%#P!kzFkLa9OVK$Jo0lJoB+rVEc7YBo>Hj%WJI|Qr5e{20W^)^5IsXVdm{B1h~sZ
zj%}|RK!tyTd8!Dx%_4COD+88d{?_mk2g1@?C@%a?ih)ZAo7uX^P~hNj@F1>W0%zS7
zEkUlD!%@tuy@iOwpS~|Ao`uKFKQD6g<(TddLrLRP1_*A?((d|lbuC3@yDQKkTBI1e
z80Q#%<?Rs%p3Ebfr%P^!ze_iMSTSu3H&_Y^SR9V@DIw#AXx5(V;7aX~WZb7PT+YhQ
z?M0JivZ1dNZUr+01$+cko4q{s5Qk!LR#Rjt9ilbdEApA~=ygQFUCv$Qpqp)r!P#?x
zq)f^VLQPuqPqE&Q>=Y-Y)<ZUX%~Do_vWZMPS#hl!rNG_$E{KS1KgBzx(X7XK{(+}a
zn;-A~8isAMj6Tae8ESRtd~sW9;NsO2buvD*x)eY3P&%KyLpJ0rE){Pncg^nKzuDt^
z%81=tRYCqu3TvyMY)3EJ&zH;#@n95K9u{2)pX6Ix%_6C%4O!o`1kq7m)|`^GNdUjo
zv%=UCf#YYDH;k{Rf|@x}I+u{@zu@oCHjYGQtJ4yphF|LP=pmcHY|_oXsgHF<xEccU
z(NP`kua>tKpm^-=yQWE|&l7nMUtE$5XVP(?m)-#|6wb;!bkwGwUVa?Zt<DEVw?xB(
z4(^ryoP0o)vH5c{i8g|jw0gdHnqK1ix4o%m-x~wuCCmCRpFgfCs1Ft|K7MH{+3q3w
z@kdi#)Ww>^g8Bq@qSDC*Y9mBXUK2d7_3_my>(viIVejuZwXM^p`-(doytAHKa{iFc
z*Gx11Ko>=irLY^ay-sWzJZMs5-J5ybxc~WjMhyF54|pn*7JJ^#{ydzybZ9`1!X`&*
zS!(U5RhokYb<FFxm)?;uj3ZzIColSvUh`=i9iU4Lukb+WuyZY1!1<1&Lj2&B;(QOw
zUof{XE2I^ldGcDtEdl_F!pL9>CyX*kLLfLQP&}IKmxUz+p`(-H<m0$tY{@}NK>(0b
zSX5l{cQB>;#WO+<>&v3rXwlT1P#AjxU!Y`E2Mk(H@%)(gar}ws*QJOmmIUGA(6_;}
zu>L59!U7mm++-15I8OpcAhfq(=Woh4JZiWYQZz8;XQxYfRx3I)c$hydtArB9%t**_
z#nM_AdqC_ltr|IQJ4kMOepeJ8#)w6I9~Zju`mfq&rkhF@*)9cE4DdNLJ^{@jq|nM#
zLf6g}#fOOkE~*<|T-2lVKy_aFrS}Hy=Ki!xUF1>#uMIOxSX$LNW|5o`<4HA@W=0QU
z%^$x^xyn{J^;tYjQCa!EeAZ293)Rp)Srf)#tp}mePBW?4Tb)6fM)B<7XL6|TQwMl0
zu*rUWz0)vH;S^Ra-}IMXR&)H>OmL;L`J}MIAH%HWnu~W?O@|?C$#t+^>=E3PGt}<R
zzUNF4pWw%VrpA5UfzQEg=bDp^fC-JKU!%V_9_?>B&|oaNO^+7n)<2bhIr;5v$X=r7
z%?D(|40ra&iuZ|!+YD0ZM?J6e$rYIYxnYJr2mWQ4of|Op`O7flU#DeRh|y$qunBg4
zU2TEWNK*J1ht(2Zyx*%DW_g!fYRC*xGN62yhzk)u?WP?4Td?)oXNP>wUtLOfYq!m~
z9tFz3z3skKyqsC~LKg+eFt-wfSeCq5&LQ$1i(qpj<=2V?G#)8|l=1TOBYCN|B@U0%
zyw-%HID$CW(Eg9^tQ9M`wDyX*=B%xiRw(mYm%SJ-i6Ddpt9PKO`|gm*lwYRTpSH0&
zZiHm866|>5xXEP7nc0O>{%dMvGNn>L>T~j>*Lt~k<E%|j&BtU%39)IV_>KCFnwg#}
zU*3qi8bq-25?o&mkja!v{z0+dWJ*|kzGhJ*|2m>fs-hq<&zXlJxnik}#_WevM-Xi4
zLlvvHlem8gxVY8*aa)1gkt(jNsvZ9P510~ZUneu+w9~K1r|0tT!4&zg*FAer)?P3Z
zo{nCB-;xt_yv%jJ_quLn*_xIWS6h{V;;A=%oT?Q9^yk5sB4fgzaZ{vwXDxjd&eq>E
zaOs$r>NKPfx~OZE)g?Yw4%#TRUkm?CDtju#ho839=6#}S%;uz2Tg0A18o#SgE&M(T
zo$_(E80o`3a%Pb>pHG0n#l_Qe$e>#}4l{uwxu)mK&A4A{CoSH!kZD6oInzD(#3316
zFFGu7Q)MLzCtgQ@-YK@+?H49yyqV;a@O{&vWqEIPLxPG~l<V5?os}SVgzDE>in|Dn
z((C!J_=TC=ehFW(ef3^s<Z2c_9R<zASg?<Q???9vd47m0M(s!?dZ*%EfFBDKZS5YU
zW`GKth&|?KuIB|Hf^GCP1(J+oCBc;UJX$W*1)&%sHPe;VfCo=$Sfoib{1Rgf+KCq!
z&lpUCb^(|xKBuMfz}NOvmm>J&b1xq<W%JvIM!;E1&q?#+VN^U()|v!?YI{BN++pHL
zRI9+j{J77yHgNGEKRD=s2|8sT!$GHh#@nfr9-b2rMr&o3yh#$?AR@*XNFnh)kXO8O
z+NMr%5)u4C%mNH7l4Bk5a@WSts!~O!`9uEqWqUd7%!oR<i{cs53+NR^&^f4siq3}z
zauu(uO^jr%Z?zU5x<aR#JD+^Vp;Ll7PHov>TYv++%%}QEA9@go>ahvNy=Qw4XkKDG
z=D<eKhOdC(snW~`+klYJ{CRzTX-1pQVPW(wz5BtuSPswN^DB06Hk7)Qa2YQTyE?7%
zTPrHdeC^A!Id79uK!5~$S0`*<RFM&gEyO+LS5FQ1)Vs|>g=8J6DQXe(b43w^^v}St
z*x?K)Zxx@W3u;owyaJtAM7kxC{4JFX(_W3@S?DZbg!}VaG48>7`E81s)N9mZ-$i!v
z@UkN<!V3%x-R(u0<IiVZC1ma^<?zM(Rhqrf_G?amophazf5Oo4fvIM1i%n2NV!ue9
zl-d($lh%ZPE3fF*^te@a-l@X=B*%K|@dviA6<uzLmsfUk?watM@t-`ytD|y!O(dif
z-!khg&9q%=g^lBzJ^So*$wHhvXL@;e%{<#Zl?&FHHVTiwgraD`@?==OVBOlHgMB&Z
zApT}V>p>Oo>XfrchRAzv7PHefXUav(!sYkWLI9_rqU54_gosf))9}+3X11d1i^<_E
z;wM^Z&9?|&tE^tdp_fH7l&8M@GPoZ<Q|d~6%UC_A<JC^K9d+0g@dAftNj`znd3OCw
zj52RlsD`Mvaa+GSp7h|mKt<48$CcZ%NPx=*Bl1ENKEVh*5n}RHldJ8$mg=~0{GgGb
ztHuRA!?!h=&^~vS1xctq`x*RHmT6Y4=8C&H8wFkP5p>W9YQ8T39DKfbtRgT&BX@|6
zYIL8xzO}$$A(Q&%3gvy8A<7fZ0-1-3GK{AAvJ3abACa1jlAH?%Dp+$NjSxo{hQwBh
zo38R#259K+_=HFF`LqYd%0wDzl|A5(gb<=NbMLY>?ml3xT$@9`=3+egi;~`CemE|q
z>2k6^yrHTkf%(Q{A41rg{njyjgP*_rmS&6V&;lBkYutf%cOHME=@DIOVPo4G9ew(W
z;)Pg<j`~!qA8Xe+`Hx&VP8(>Z)BRMtt{HU*gV7Y};MQ%Cp7?0f3uv%poHF&=mb$!)
z?_1cQ7oXpKc2;H%afvopp3VDTKJ-~kS6SeZV1?ZrHb-7%rIw!#eY~l)kieocBX>4~
zk8=5qdgl(iaI-KBrVBg4YNuFj9MQFo&0u1^TG9FX>yVo+f5$*j(SZnZ`)j~OE>;aL
z-zL7H8MWPP1|ioVNZos4tgGEZoP8V0tPRg{QN2OZ*tY>s$CUNl%Fw{y*G-R`Ml!b+
zrA*We_PuKeEz01o_0(jbV%R8RBT(-Y(T`nocT-P&h*FEXl6jku=FtE1zMQbn(l!JK
zEj!7oXKNzf+7#Xr7_1}-X`sCQnHc9!O8<Tr#<HjCQfAJ(`F(PKzzhPcnXa7kKNrk%
z>V`_q)q}p;G403v5@G2Y_VT^>RaGzx(a~tt_5HxTWjk@r>^P`!_)}xLsweD$&P?$1
zVXGu`m*A=Y<J#Bcil1WFug5(<zK1d;J`nf#6^@_(^qB|Il%w0_%RX*hd%u+US>c_4
zMdGW<hoO|8YkR}r6K}HcU5Nf>2f<NvSshx(<E-vE&h6RE&)+Y_sE+NZLP`Gbss-{*
z!7=qyIV}9Kp{#R5-U1c(zG>nUDtwYja4FMAlY$DLubiUdci3@ret|=1@8K_3A?a2E
zHuDfAd9vS3PH%<U#>?W?2|A0iOf38NI@|&R0Z1~|YCz8O8Oe7H8WbJ-Fh|NmfFFJ&
z4|gUZ<o20h1fP2^5%h!B38aUrlP8-Lt{0PnVT0_d498xmN|pvTL{$o+TLG@%sej8G
zi&Ybn1!>MFhLWy;;>!rE5ZqmX-hi6IQ82iO1pTT7pv*v`XE5XqqC*p~Q3PLf5u>mi
z{n`MZH^m1#-J9As?Dr8vr)juN16gxrMWk8GwG71<L9+?Onif5cyuLI*2tr?pxyOR*
zJaJ?OCa!?0z{6*)5ifBM1I<ArDbSz#(Qa$N5SFHX@WGYVFqo9Bj*!O(o`))oVaX_=
zT~Fc!<=tq!_D$)~s7=U55#rh{zs_xUstX{s0!z;%qI(kTAkt@g`vz9TBuLr*Tmj!J
z;4e)grtKdDqod+lJ+;`G_<Rr~9khV-ao}5Xu!P~(jxD_22LZ|gqbnvstpNdSaV3N5
zp*bNT@$PYMvCq)a(dgLkco?4rNI3;cta?jIJAFeZB*)%WPy!{1Y(|1K67~K&X1tj^
zu1A_6H;|Ydi*yb}w3+(`X5Zj?j5xN3vtZf9RzM?*m|%Q7hkImBHdG#KQi4*yL5h8j
z2HD&qs(9R%i2kc;5Bqh%&m<HJ+^F(26TrZIs+i~V(D`dtxcyr?(){#R-N8hMN9iw3
zN9K%`8Gt!Hnj3-^8O5wfwfno8w4wGFC3vFQv5`_RdDtMu2{SOef}76_O9!Bmu7E+>
zG2g2t>d|R6x_~f_!WMoUwp4WMvWE77Nuq<m?PtrNAU-LYIW+w>!^Gv#_7QOHDbp1W
zKC@h=2p+so3c97h{N0uS;ZjJMwUo0ocj#;7*MfI?KXFA3Iey)_@85=SALqZ<_M~hw
z^)Oq!L<t_gY70x1v!UcIUg1vka!k5pe=w!ITFBnwrKWaZhToBDJ@bGvFz3sv9NJob
zH1MqVvYQ4Jb!>%8flHSKa57vzU2OY!VOcRdPbqZ-uil=Wp^KQ_mco#eD~R)sBZ$ho
zt^p3p5puU*?-{e@^3?@;zd&gmRjc$_AuO14ocHqXC0%e<Gfunb;B`f3lVne4m&sVd
zMQ5JtTFosRel|JySn+b=_1hzv)70#o;pSy=*V(C1rz`Buq(x)E0Hy}zWf>N){j=Y0
z>3M8jk(G{f6I9xEJJ(wwe)U^cwL5;V6{HHvD6Y81U@pJj7BIq)i=2`GP%v%?^sx|J
z-!r5+FpgfpryORkJ#F^_8=*dp$g<B1#A9mS1g8X$|Cvw;w-R)sWRP2F<QAdR&ZY{>
zaf1V4vG637$FHPS;|-@|9t3_%7;deQ6vhJgUIo*qK=GHzS9M9>nOy><?rK~B#-Q#m
zIN^fH2!>+Il%fmk7`F9K7m`Sfb3GP8=(3z}mqJp;b1D8>Dc$NxF!(LO(^veXGCWcW
z5r%>dh8_DwlaF*b;^+6^@<GV8M5H9PJSa9slLMjQa4K2rE}tn_?u)2JATGdkF0e*o
zu7JTxaM(4)oa~?jH^{V<P$?)yf%1-U*BF;VP<T|cxI=@9h_eMR@}a@&2^H(p;KZAf
zP#e00*ogH&!8l{MRB|=fSXD6^B6x)OS`)mi3s`f|WT;i=VDFl_*No361me?pC>&VO
zRmt}H4LC^3Ft=C^6Dt~mC(_H2=a~oVk8E8ou(ko8UW|#+YrN1ALaQrB7q3F@m&u63
zR5)?KPgUrDt*dXufOp!eU&jN6jvVp$mqBPKo!W&v#AnUE@MjfBZkt+lQxLy!jB3N*
zcU(v0xyOy4fv@8b5jHQPHvx?F$yDH}wIAXE1Vv?9X~56TDSN3#pWY{z_9|t`#&F&Q
zTfqx-bI+XUyngXoyd5t|U&b`AeNHsHLNlKYQKG5DXw%I938g=68QunPB-;-$JkF?p
zx?o|R;9!ojR=uDn-N#dy$|p`ge~ROKA%4sv-|WGlpI`kI#Cgt^*V1QWwG>+llslFR
zR*RWvG1nT?&f?RIw@BGBemPx^;;iA<>|d5{Vd;=4n8IFJzy<q(k^A3^>BGnFZ;5i!
zZb{|dmG7Rmr_L*hH{lxoB)M{;g0;8hhz4Wm<?l%)wQb(~aYPw^D`$J^xHb7M_hDtK
z>{cg#5Z42mKv3x3GhTLuTb`9}=k`Pkq(&|7Yj^b)<d!$MJ=7^H2Y{HV>t2!Kp^f~H
z8Q?19u*9YTJEj)Mw$x2BI)(Cfv}%wOh3ns9CKvTn058{+X~L(wjpG%Tu7bP#48J-X
zbI_>iC8jy4w`H-Sv2IXWmGg(K(W7sBqUPn9@H*63sJBx51$Zrec1@8~piLuUN=YYf
z6X-Air`!CX>tKa`pR0#|jMK|!=(0C!Y<M4iwG)V`a71G+@cBBJx(uFr8$?2i)h<Bt
zDuq(JIECDVvlg)YDj-w!IYt3Et*uos2`i3=e|!%h;?>&MZE#VsgZl=e{neZ=(U&Y<
zDIW9+m%g`UqZRFkw#%~zjWFKn;mPz7BtP5IfX4!oH|QGqiWOdUhPx{=1Qi&@=lw1b
zIXS9+c2x7msMf<#ohPGuO``_0qeeeRu_wn&&W`Dw1pgMiqXfj1$-z5v1np1oj`E)Y
zMv;jBHTRrJpZ(9=a{@B#dHKJ~J(oh-{sb6b@$<j^XMk}?mcacd_naaaI!_|!o=GT5
zMDWH6IrrQ}#Y_oO(r%Ljj1AOZ2w2c$;yF2Zmk03v2{4*|qvG(<VaUKkg}E;G$-0yC
zi!17=5-B&7TC7m{1>NEm{@#>9ANKD+l?D&u8*lsjw<G4~5(3v8Hgppw-=)A{CxtMB
zw}%R`&c^s`sgkkMG89l2{<3u9vQf*Q+_S~i>+ec#l<Eln&OOt3M(Xc7O*Z_G<eqCj
z&-`z5&-z(LO%31HC#xO*$T(j~9TBH4HoqbljEt1teAnDWmT^AyW?gJ){&{q;bB#K?
zrG>m_`LEn_9m=2TbP<WbBG5_-T;c)$zvP}5V#zYjLY&U&;)UaQ1Nqg3gx@+&;$>5Z
z#Uyjv;>G0aUaN~KWF6-p!MopOur<GRoHxSD8J^<~%TIiM>o^bgR+qELg`O+fzjMzy
z#M31!zh#`2yjU%f)%-+La={2$##t@M@LF3f%nlJ*E6PtM%Q!^^C2J*RHNRz?-vuKt
z#_z0`*DaO&+k%l92dX!w-5;?jPJ@d`r}*8d>bHLiMnX(AYOq$Ve+ovPJ!U-ZH&iGV
z`6u^$zl51GW8Ect+XdQsf&P`$S2H><-gs@L?(OG35W#p&NzqpP07B8y%}V}ReQTtz
z3^VT1?b~dQrmlB?-WlIQFDf%_$M8M>CM_eNAK&^m?x||`n??|*79M=`0wW-1O^xrx
z4;VyIQTgeozxWJqlGM{Y^;f~ji%hvQX_ZeXn5&|4>2_W?^W<Vz&KM|lOt?<QY;xKD
z6-=fC$dOl700QJdbpIK7{Zs8jK>i0OFPjL5MMeILf*Kq3G{5ri!~skVMh|KJD>_`r
z+4IknM~)6xlFNLj$;3e*7uToxVm6rI^2X;eY69xZZvmBn*v|$-slFcr=f%;ox1h9?
zhfu5SLUMFiA7rPyvxSO(r3M$h^WGlBqp6AG?gk4%7zzX*d2ilh@HG!y$b!5#?-I5z
zO>tS=K6b?TO(y2$PcEUA3s`lw7?C8eyX55X1O^dbBs+Jp$h`XWrP#}*6VDszS}F8v
zHp)wF|9>J5{zp&VbLM|NdG^`&f1D(rJS5ekaiBvKH0LVZ=)X%G{2w`a#rYyAJgW-7
z>U0~81RNfCjumrN*k5c^h=qrtZ^R**1tHUeOtIx7Q1l_UTl4>yljpecUndSs_DK1>
zswSceK`+9QR7v^dR$hKvJ@|$4#6f)s`NJMGj#&}ap$gO?B3>o?>_W&(!dBX-qTMb*
zkC75v`mM;*4Cq!W3gWJz5`E!h0Iw*QiD(z$pcH}NtTtIgm(B~hswj+9ON8weIKssV
zMRV0vRQ?u(*3b>N<$>hg2X+I4ql5gT(fON&?a`wm;E2Zgu$R2oDLCcxti7FUTrpYY
zd(&r3`uDsQQBug<+F@A*k@ZKkt${z_ST6y8mF;hQ>(M6<c=8sS^g1Dsjo#TZ%(Ji=
zSjK}euvq479lw}h#i2lLW*YuuO!iA(LZ~28cg<-lZ`3@3wBC=-vhwV{m`pz`!5jJ9
z>Kkv9D^dj_RuS8XHn}JhNX1%qH2_x4_o+@+KwCy#l*ui3m#3?CewSAZPI!J?8f#E-
zmY<<QOopdJ)P#<=rBE!aw=*yNEiEj+K@ZI6M)y;V-KBm_w{^}CP-BcQ4WcMuYlhHS
zu}?7R@cOY<PQA`Xt&4V2-U^UA5u~TMdpG#kY3X*X4?5`a!41K4lL+{AUSGbj52`qO
z;&kQH`!P5U(Qqw1^R7!^VC+YUO|~d@&|N@840dI@J>gQKp$A+{6Tk-$8-}7$5?D=E
z(YP9O%^^0hIz-37jc(l7+Rl~>=HH&IW$?fdNYtR@5`?@2WaEHLzUw><sSz->@~ALf
z%p97bOP$%{o_T338twoe_U%KtIgKqZDS{a8_82Js{fd}$t%kbCv114f53nAB7vH>&
ziKx4FWXkqjJuxailK<nfM4OaZy9p{U<2H}Xd~Lr)Jj!<i6y}?YgN5O|L#}szxLR+Z
zgJe=hj4VnBZ|Upl>@dEDT{zQb%b`6DwcH#Qpr?U!Ts=3;qWa2K%u`XN>#+%eSkzYR
z<jsD9Y|Zd-;c1xS&O%We3=(rUdA|^efS39$0hM`vp(PAf$iOj<sHP$M27coE)3nDv
zlLw4E0Tj4wXf$Z4D9`?eeR7A96BnQ_V^7OYl9Dma=wua_zIbu;1snPa^)RaP9qQpb
z29=*wS08<^`5k%HiHgLOU#V7{i?9stUga?-5+5hQi9vkXw|K=cnz{=brB3m4Xd^(f
zOoS%SFzxBb&a2?PC0O|fIP7mg3jm05LF6G6<R1`#63j+JZ8#t%f4|N_05KKvb?zx-
z6#%G@@sNL9=R&YSvJwAVjP0L1N)bG`zV<JSt&AR`rq<s5mdvBn@bmW%{gb2ki${4c
zIR6`CgCJJPJjxI=3Icv5^C;EK2V@?l2=)C3oJ%K`@i)fyn@8a}?@LF<*#3n_`ETGT
z|JN|K|Kg7d7J~chIyV7hXFR0~_^L0bIDAaZ9Q>}n@bMC_B&PZKx6fTEGS7uta_$ii
z*zgZ?!8$}hEPGM61cP)@m={PlkJDf{=hGAPv=jL7{~BZammihe|C84_jw{4}z0Rpw
zO%~?fzv^f6_v?(s@1{ZkFo2r;xz1Sp<IRg86FlLXG5;YznR%MF@Sle8zX2#ik$(Y{
z<To!wt$*;(o7ct}KRF)6Kg&P!2cXPGFRrYvtv@@%{gqo*cJu4b?$<9{`@4rfz8!5M
z#}cS3vYI)**z<=gTts)Mb93?}YX5_TV)%r)zsIX?qg|D+tI1|$PK?W041$YWd*FuV
zgACI}tsCAK%Y+!JojudayvArtL!;pAwc-{~GyrE)MjQI_-igRj&Z<eg`VAKPTv{T3
z0hgd-k}h0qiB{*Q3PrLVSA6Ny`wO5Pj+#r@n5<$`++?|**zvZ5ICN4<Do=|7fWp9A
zXaK+i0Jp4Z>r?<$7X%7QGt_&m0Q`5{&bi@25Y+LyG$4v&8^VHC6g9`Edo9A?=y$9+
z>YZOG(3i!8qNX(MdtYcr5P^1l0FOKZ$&MjZLuOIT;P*!uh~o~OZ9WP|ka6Bm4(Ls}
z+3@E>V*O(l5JUx*opcL809MAGEaJopfck=F1qKf}eR?ivP?o$4whhwS8j@r|g@Ljr
zQ>#(P=Et^%AT!vr9?&LM0F)VHgBnn1zWFtqHUX(XDmtM-JSYdle0rd1If;)s>(h!q
zhHr6fvIDe=xT%oSMS~g?RI+V>wCD{Ifr3Vi)EdW&m0BV%y~g3)Kk`Uv&?6Py@Ib5Z
zW^0J%(&NI=zkNs`Ed0-7P?q$RQfhd}1)@8YiMgzz!=IU5svE*g{*aLF5kRHcsPk`P
zP$_B_9gwqEK|6aj@GS-~&>F|U7KKR|TC~{P_Y_s|dg~JOAnDp8faH~LcV@6I2QhP!
zhd@c;1K{BaLxU7}aK$YcWz>z)1Sy!i)EOkQF@cmP+%WARH%_+=$*bz7#vlg6b^!4C
z)xyj_O@)5rAQV2wBc%yBhXK?XR3>BFQHs~y+mT7(g2dz3>9%Fk612?T7WPP(u{sS+
z#u6S;gfQvwgTMk>;T(#nZHH>h4gAXi%1w;FoX_`S>S;wlJ+^SjcZz~Os6ZV-P$aKU
zhQfGYP%B(pn~7!-8Uj&+k#Fd*Q?cUoEQ)F{nv2ZnHcClcjs}ua(>)k@CIedpq5FaL
zpfF$941}F=a|^h=Uk+~05s&l>LH-95cuH~Aifi;tE9f>R)goL69Sx>pYdQN9w4H)Z
z5s!gS`{Eo|YoCgNaC%uc8~T&i-6622r&e(>3LWPPpc+Uif`{=rv<a)a%IW(QXAJP_
z2xIxp*5RQ9QX2(`&Td`2po4=j3D>!49&ed4sw=cHM7nE0u5X}1*acb#p-ct`I06Ob
zJD@#`>qSKnOgub*0lib$$+3yw)y0D*07R}FLm7YO3FB#iA_PK$Dk~C})w|m08h9x^
ztokWETA}obg{rSC0ELRnncS*8)U5a+xWns4&e&`Sh;N04paVoT(UjBo@#<;gFNSAJ
zL{!(}pn5>la2%dWPZL9r-3&lf;6V*Ha<|@KE_b&s$_!|Q_*GCKgGdw_lWGilXsDnL
z36$OhT)4;^2f;bGxD*s7?}mrF;qWKdn4r{Qb+1`UAk_M)P!lW#%o7K&Uss1^WUJ}l
z=nG8k;}<NTR;Og%I0mH6)h2-;nICaF6vifau!fJYxk7cxV#R>=ksJSxkQ${XG5ZN8
zFENK>$h7K=)v6u<y@JezP|^f4J<AT@QJkaFlo}<LC7va2;SkK`cqUJ`z>}BJaOFt|
zwNzIist-er^}$b)#$YE`(1>%X<kh}zu+t3NndG$)Xg%)$2mr>tm$hSJKTSdB_9n?^
zBww9P56<$w!ZhP>2r3mKvpb5{t}$s{xij^cGMf}{k*XH+A{3CV_b`w{6{CsO%CnxQ
zbKg{5xszxQh#8PT1kT{6JQ%>Z3qaI&Fh4~WgL!saF_hQ<N`5yy&*)b`+Z+l*;sKRC
z9M$<_GzK8ai9hg@bN}v?293sFqPEeEPI4k3yw-GQ74bQ4QS0iKd<J~;bpFrY7E!3W
zl@#~5Xx@9G2HRarqlBIDwiTK69N-~RCgNe%GV|MdDTLW1I+zn|EtOm~M)~57FLRL?
zh?Fa6xmpOJ#<nv#N#VcFMSJGIq=W4y^ODMRG;a2PZUN9BZNn(==pp85852yI^G;nx
zT&V{+v(BhVA~zL2yUPbmjcrj;4n6$hnL}g2XITp)(YpHZ;hv2pk-3&D0X}V|mdrkw
zFpq7(vzA<1*f8;`OZ<i|TQ#0z5cgtO?1`vz67-vA9<{I{6pqRuP^lcWp`t5}g9Huc
z5Esq;y^;!Y`m8g*UXFy?DzA8G_YDq<lN><Z%5XVc2DjYjPT_GtT^3^<L<E}85-P*J
zGoZCqbTAc5cLer!rBeasjT+r{Z2vX0&+b%^wo$hm9f7A&L{g9WKoyzbS(Lbc*o*t%
zq5rfPK%F23jqC1sC)TMkHckb$N18a$i}oeU`1%f&-u1A4yU?ID-t}awI;($O_kEI5
z<#$8R#4jQ%$b|a7%T11L(`&<levCs=11|~``d5t-I6ApZtM8faFPYdeHU~U&)VdbF
zcFyekTT-RxQ+?`{l!nV;4IDvbEgGwq&##Vfe%LH>7Fca;{yy1lR8y65+`n=AxT-He
z{+-pU4#(^-Q=^l=u4kQys*ISLDlg`C*n6ZK;68HoUEs6za}J+%59VFo*PXev$3AP1
zh<*H`w#HFkZf5n-(b30WAwW?}`3VZ-#B^p~O*>mOh*$YBcRWtp!eg`*e(lxBxxF(T
z3e8&)_kVms)7N*a4Q$0rK3EXCSl?sz%RQm-{ixW@!y0R&owS)BON#I62fPP%GE)Xn
zorCwPLydNGPyAfbx!5qAGO$~q@^cj%(=b|S^sVID&oy(`1|9=kb=m!&>p1$x$u6V4
zs`Q^5_7_#gk`#&Ac93^&F^%t+jrJR6etz+J*Z5(7V88k3=T|)aD-!j^gX8uSzcz^%
zU(K_<^J(KFXdQ*US`fT=*mLdIcIvxVOA7A}2k!sc$);~w(Z2Y7IQ`ddk>t-%&))Cj
zjlaHC#58T#T|Ane`L$Q~uIY>S$LH#szxG?{n>Rx*{+K^;e9(RV{~_x<*qYedw!PLG
z0wf_Jp(T(6LJxhA4weuQ!5S15tN|5KQ6nN^pM;KxK~YgbgQ8;H!3JU*z=Dbz%T`o$
z$BsQJDptPP@B4iH7ck5*nVI{%uer{F(@j-7pGEb3*RMU(vuD(AYGoV-bKPVAzV`e5
zvc8`N%d@=~N3Hy8)6AKl_GYr~T>ta+WZ!S&+Oxl2j_UjIpzlxb^|ODzUGMwzlLCr-
z0)-PM$%JVxVO~Wr+E-B;RFZ2S?<(9Irm{&^+2yMEl=Y@bCG1o=)~n8>u5bxgyCthV
za@CS5wRe-+w^QxktH$|x{lfEtlk-Az^TMn8@*<n^`gi6H?9HRB60-38*yQ}U-2C{e
z{Gm<x!#ndw_U6m^1*5|Yl9CI?<rXAY6-;O<nABM?rME!AFH8$BoSs~mo?DnvRXDq;
zFtf98UT>k2Uz8PIl$~6ZlUtNqRkXCJXnAMR%HAS^U#t!<&QC5b%q=diDlTm*F6%5V
z?=9BwOV)*#R3?{f%q^*^D%sLhQr%fXNhP%W(jDQYb;+f>b4%;1O7}ID9_TDR)LW|K
zuRa{U`e^d%<GHJws#Z5Qtv=Pc`b_U?l3&&uUUn|I>_To?dsW%xrm~LCvTMC%dj6W5
z;cIRuuep=Ern73z{o+yk8<#%lU1Q*v=Xdw5`5ayTB)8lvTrfDsv%9nWx@Y{-9UxEv
zy^VG+y32d3mVFGAK(V<o-VKq6QkGcjp>yZ*?^T+kLp(QBQ2I*AhK~X#D~vK#N|ZpB
zHT~3=EaANh;dlqS2H7cGRL`94M+@kBbYF!A?gS!z(Aio|zwb*|j{#h;Bxap+u#1r7
zVj_dRHIAE6UH8&;K}#x|LnI<2l=bt?)47N~0b3mu>me>jjs&taAb(Cp{PzvtVm(<(
zjHg-uxkc!l+fSlJ_HxWyj#-O=rxtTlY*Z}SR8R>Vwb%e_fK5|~3D+R`roafN#>0ag
zwAc*$agO);s>&nML?m{}3i#m27GQxmU>P=vNa&&sp7+sqYN`ue2O{P0Pw}RGbX?Yo
z`fFj!V-!dr9~`q4N4e{ul@>*|p->|V<y41i5xD^DiEvxHx%%>6xkQUOY5*HxK{yb}
zDa*my6mnRKH1g#Ojaq{u75o(C+WjfpJ}&@K<T@`gyyL|e89_y&W7K!TMLs-8kAAL)
zkvMkc-u6HCkriBIg$u}}{^D5^H+}?i6_jGpbREJeO|fE|4MUSHLr(gjZ^=$A(VmVR
zbgnk(+-7t$rQCKx?b|9qsaV;`;omBN1P7KJ53$<@Ph%h9xn-w^7uBBc`)t<42p1&M
zZ<JZBo3MFj{AJH$(Snk^39>YYc!ym}TFVFB4{*xTj^48Cd;Yrd6Lw7~-83cAsnED<
z`j&}(OLk{$**&{?cjo=w^M34BI_$}c+><?l=`?mv?v~xDrOO1ftd=beFI=cz<*oK=
zo_IW7YMQ+(+yO7%QeW^YAaC}>t3#wKys1WYr$@c@J&E;F#<(hny)9vqG5hu=l&s4s
z(V8y_4{zN|?+K`jlxXjl>}J$&zr1wKP`4NDwZ%u4UnTcF@7^zp+*Pwh`mAb4rNfG2
z3)VJVUbEC?pV_(f`IY;?i33&fh%ejs>yxvaZqN=SYjO~#s{5n|Z-Cb3@!d0}6%9aq
z8;mQg*{vA9S?Xyi-%hDn9E=X(32ri1w{N|`OL=Iu!+|3e=t}g#i;dv+<E5V&NQ_Uv
zw#5^QJ&JElwMaRD^opCackH5vgzvCtD)-fy18ZZoc_s7~gVe(?SmRmkY-^r`A_(WD
zhe4obX!jP7xf7acFg`eNC`?eG7rpnUv&1lzQbJ3uFFo1stwUh-PNoiZ-QSnv;zU)0
z*vVH+GC9nWT1(`0&3^+*+(5ZR0!dA^H+ZgsK5zC#w!(Ygj%M$e0u};GDe~0pU}z{|
z!r}FNFysYfM_~7cU=E<k3pD-S)hGT4ko*ZWw$?GE==UPPG&s3X245}Y>rs#vL}Y;g
zgSC&`g;5vTbAwfXgE|WXT$I>$dT<ox=0zN3YDMhtKx}LXUU%}*WlbcK(#2bMy@E_-
z;|Ja54+ijcX;VyATKpRjmJ{Tn*<q=L@}nR`Z0^h1ws@%L!NADv4FU)4NHe`6d^Y4d
zQ1-8Y4Yj~giWGu@TxrwSA5(rOQa|{!Y3rJJvnh{B<)RbFRtxHr6gTrYiv3~+j<FO2
zSn*C?QY>sY)GRx+<>Qn;_nYIHAyOA)`HM`ovUJfM@zXD7ikrgURI^Bp^>Vil;<GU+
zE$;pLDuc9#bhoC(tb=?2)=#YS8tUm<iF!YsK*r#pAMCnW_NqA;&#UQeu|v!YwuAQg
zg*WyeL5wt~G1%DPuZJ;D{<?Fkg&5W%c>_PHIir}xRD6l@q2MO}I#+}^CHFW(DO-XK
zh{wS;K1Iwl=)^&S6wF^vC0MB24W!8-Uxzt@T2~yz$f%nF6e=-i1?J8{ljzMd7Z|1m
z+5JJNbVHa1i8Px7wa||64^(25huDg9<$Bio>{coXLER$<joJd-j7Z3VQA)@r&rlxb
z2qW~@K<@_R%S8ctv~3-r^7C9JM)`)hI9P}JwpLV7$|p()12Jto*Dw+@5ZgXomdLU6
ze0a|S@#N@p@p@{uU>jisc@XN62!zvhqoZ_adI_@ALxFCGP}32?!H!=lr}QdAqAOy3
zp$G(7QEhu1>{$O}JUI*km%=oZUL15U29J(xrR3I>Gx_gHn6v)IvM5ATVy~B>-hL>l
z4%)uD=wp;d$^)ESDBU^i6mE7WYP`i)Y5Hm(BXz_Z0<_!1C{=Pxqn!d{>EQJQPcGSL
zt8hth73R6XNG;?vBRd@K=nq!<LIG%2YtPv0us{y-Q^Kf)_LL$0+$rilO`UNVszgzm
zKFmiNYG*_aIuYLpXw>Z23?gvkPuz+E*L}q>whKx~NK?W^Ud1!#LKit;rrq@Z0V(5)
zJ%JDbg*YbA+;<a0^T``!pMa(Z`D);qtH>G$@Ly|rdtMfB(jW<bH`G8~+nBF`kRcR6
zpzEjMunGizp~cIv&T3$$g%KJ`VG9IuTQ=?{)=_E}6lXmyi1N}<7dGcXgc9)qvXx?7
z9Sl%32I0t80aqtHYCnyMw8&b6@pPze$;pdvk|(Z!jtc0^L1i0gwn~h>4q5^1_33v0
ziJ;WK5w2O6vTT>564AhV=e>Q`@BTtJv#<mWJW_+W^Zc<Inpk(uQ3;)-m@R<?YJgyy
zwZ+IoWHk2o3d~IoJe6QDT}TBK#wDOGmErH<*RAwNbOW#m@rK8nsf!TNv~U=_&Xhw(
zBl2)@3zS1Idqg?ICEGyO3L8py?IOOL<9l=PA>c2^`VIn|!+%+dDE%T2Pqdb!ccKFe
ze`)P;jHbabIrP-uj(c~7E{(pm1ngdZ*m^1T6F_1{ZR_%D0;5BK7%h08h#B2!l%2-`
z&@^3K?+$ler5ERK2Lf44d9}L+DCfRr<FYW_Slk#sYt0KDdBTj+RBE4C>mQv>?R)EN
z4845ju0YwrH9&#VE5ZQhiE3OqsJ<mR`!I~uAloJ97R-BV`3VNdA+bL~tV3ZDu)nVA
zY#{hNWy`WZol#?etmW@A%CpUZK3dFM@8VBx4c5K1lU~srKw)A}H>u}F5ftTZcGj)r
z%aN0@;YclXDyMF-&|ka5@W{2***xeU=!?5eemDwWQA-np5%12mt)|{DfR!?ab>yX+
z4hD&-E27y>i{a99D}J(nY=(Kt05Sf-hd?axF|rm;KM4<6Am7BRzkA{l4u%J#j6+yu
z2NVpT9xgBKl)z5<;(EeME5+3tJ6;ZQM2gH7nzZk-6_CcCgp2Hv<<X!+^z}|wFlsv}
zKJ+j|9+}rlnTmh_hok0WLNQQp_*Osps>FbfztcD?G2i)D>7z+Lj<{P|ySO0C!0tcd
z0S)}6ra-F}1#u8EQtwEV`lxsIT&#N+W-l+Ed*H!g;op?~yQKyMi+55=`Hh<~cO};E
z;HATUPA<5HFFzk(gw}=;VS4DN!?a9ye}Fk@Y9o#90h(`Tw*zlrE<oHU+)vWq9>YXD
z$EX02us@d{;l&CFq9Zz>J7SiW{*Ebo0;7UlBK?_R5w;;X5A(N*6a@Q539M^s9QiJG
z49ln}D>tf6rO!6<XsCY#-!4KJ6-@6~XJr*ei}bRjInpubJt><b9sNVu4_KkJ01Q50
z;<lKBwLoY(y|Y0!B;Q2jt^84Epp{LDkUi@ZJ8vxK3e&QaRkF#YLf70%i2{o$OQ&aa
zlgg(829F=^UJO6Qu>`)6-D2o!Rz|qFbv8Y2Z7s42O*+-9Q*13}iDdOvM_(nC$oxjW
zl~+uYmLK9}pW_(k5hrW{o-CSeNE>2i;aay*5-3H)n2?-g{gsxu;&Gm7osy5Tf({s&
z6faPw4IY#3oO!f8@kv~<Aj~^M^z+I2Qqjh7T}`^Sf@UmYLUw1g%<RQ=JKu8}v7oK5
zW$ynM{rCrtCX%&}r3@~GWl5ePT5aYQUng!57ZllA_lwUUCX#ut5t_bOlXkM0=5}EI
z80~=bDtm^VUM^lZanVRGy`DfpLhUxwJAQZ@W|pf1Dwp9iCVT!FVUCtm7ZX#lAdOg>
zXSz;|%x_fy6cm&ptzC7szrF;86l*2|k%!dDTwJVhqW^k+t9ohpZfz_5nV*jIx?7=*
zUi|TK&Q5b1BvzaCV}MqRkHylqb#6+HdN?o_tBXC<+8X4bf7ybub2Y7{po*@>TqUkf
z#PwaeXA5o8ik?E3QcXI8Ioxa7)+?|2%(r75kJ~g`)1Hjqw%Afj-(C^otADYAW^qq#
zE}3q)6xw+e&og7_l`>OtEWUBo7yASm=GMU>clDoVy%$ZJw;0U3w7GrqLVR{J1AN<s
z$1J}5<-X_QX*&{jWHBf0m1f@(?fIW>nR%Zt%^%gEl(Eo(<VTIK*?0ZtS(7?Ccv^U6
z;_0tH>{`rToMOH&bt%)MflZIEyu$({mGjP6FvDVC%2iVB(>{YoLU#Q$W!rz$GLww5
zo*dZ++1XuhfVo+=ditvB`ja2qCD$iSsq}mq=ZvFpqmMH5uagt2&VQdcMSo%il45=r
zyOdS0rY!fo8ne1D%6op|SspkOzvn>k-;pP)X}D}pX4X;!w7{HUu9dDm{kLGoy^D)#
zvbz>p&TVX8{!MiF66mj&Hou-;d$4obkkiITT@DA|v`T(HY`7V*sbj&lum=+ZZmfHG
zCAU+v*#Ad&-6r-t6Un6CCz{f>*N_(2xrG5u0UzvsG&gR2^zPEr7k}nHJ|1=Eps`ud
zxU~75)zp98GS~4EXrc!L2ZW88+`}JNYPt1lIMwG~Q)h(qJ462I@N#NSu37ClXZyCE
zyD2=->o;N0Z_KV<-uvg*w+|F6u+RdtcoI1n3G?Av#A_!_BaJFfnbyQJzJ+0h1KZ*j
z+B_Y!5cVmMFOfWRf>LGMGYzw?A|V=sY%R1x)g>@csL8XG@5Tgjsafbpf|0Dnyd=OP
zPSbq1Kuf(uk&JP2g564DB0gaDmqSjx*mT1ygGsKO*c<U-wZdX2|0317wDFL&9SIm&
z@;r1-oFhq|=0`T<nIF|6e{l;lO^evCwbVnIFf%S7c=^aQpHj&8J|*mw2Fxot+G2uO
zHMfJn9+{Kok<wzDGJ~l|?qVvFs-Z$*n%PCtEM{F8*ZgUNu56cYOJ@oFtqw8xQd+3N
z#;!ks`Gf=W*@m`{2hvRf3~ajh5p}LF<t^0{Oh=rkTiy!$Y{3f@PEE4O<hsR4#k787
z6V9CzL!N{Lb{Y-Ma2QE?$&ztlSC&$pOT8U0eV~0FPfwcePf@upG^iZ9#6GmnXj%@g
zq8~NTgr^A80FY->{e&jbj2Jpk>?-e8^yBecXpsiATxX!ks88G}jV-U6m}<0u%y}Ts
zoYR8^m(&dWPv_FkWu!?O<wMqsO&<ygM!G^3J(4;_vtuo06KcAIiSfdvCjF#&2kBaq
zBC#cXq<H((DFzd+fndl<Rc@V@Hn^sR_99K?KLgM_<#0_TacAdJvi{IIk^DcEOKn#k
zl#P@VBfz_bmt*?=yL0Kxx|xA7+tLG>A<q`wv7TkkyFFVwzCL2EGjrI)OZ``$O3x3S
zt9j%5()VAt%-7>CKhIrj?FkvxQP!wET{G|b?t3REv$8dL2j@MWe*fu{um2L;>=mC6
zJ$fCtq>8z1(Wn<qn+xtV?%4G*`~P&yTzT}h`P*sZn!lF69QMzT``^y=Uj1w3w=4hr
z`SI;6VCx98{+(9`l#}Kob?Wb-4`}}qTaRnl@gt7^4DM~^7wWLrDnw6G%&})T6x;qP
zVe6#OyI7?d((%OZXCoHCdDU~%eG2bE?}eN1VyRo0%F5T!zv6s@rs!AKD4oHvwLZG2
zPd)sZM^wsTMzV_O!BJZdm(r}oo$D!Ld)ZVxC@vDP<Z_I;<$FiQ$Rk_scDx8Z`TeT0
z{7Ch~visXgK+NQ8N4A*>i1n=ojL3;*S>Z2b0!qI!^5_oU)$X{c9|V#-mc($>FeC5M
zGK$!yE^%s_`{R~2XU2U+5{e$7-B~;G*uJ)I!f{lEX>jh*12adwnegDpou+Fcw5VD&
zT7F{K(#gkkMRS`+-j<>Vvq(wt)wk)x-a~Im%hu`<?`AKv;G67kIM#Ue-J7)L2L^Uy
z#`zKNv-;v5ycpToeD~`6oRdEv8p|6`y&Umj>4Tq-dOfbq+&c04>6A_L(tn07I=jD5
zkZ13Am}Qr%JiOm8TQI-t+d4tJ`of1dId6_d-Kzdu_{X5%btirD8{ZcD!u|)`*E}8>
zv-ncmu}^geyINg8jK~}{C&0mSPs>_tUYGKZ(s=pQbC<RQS*upgbMPGXOxif%YMNt^
zVW}`Z*2AH?oV{ps*v{$aW<+=%U2a(P`_6Q`wOwS(`H7Wz<6bQt<5<0AWERtG)cp4-
zsxkM`qyi^4|Bh<H2ZN*VgwuQSOw@xX<DTX4u8#v_k9}{>!12eyB$|pYOe{O;2TX{|
zFC?9wj)dBZxTD~Px17u_eyuE6e&X)C$)4q}CAIXwo((>@^!X55z^+u7Vn+nm|Jr%S
z&=;)5u7tBc$(5R`iSZ`B8H`&Y+d{8BFbzAq`0YbSgZV$%UXFr^gjX02nzD#D<0eX(
zD+eD}S6qdGz3ZAL;Glecul2&m!1QRx7n;TBSFUHDVY7|<KUYsP%Wbo;k>Mv|@L+|V
zr_7u7IVN(w;K_}p{kXu9V>zWxP~H!2e(AJw&x}851MIc%E?mi0!nHTzazni>H7oao
z_)Am*HwAm+-9^o^RirGehKPQ8ckH8$0xxll{M#@u9K1XiY1d1y8SQA;<Fnb-`dy-u
zE=Kl7Zj0wKQC0ueJS&QV1sj}^2Bzc+hSvM|ioLTx<Cpg=p=+T?0TaZ1i9!xqyu+U@
z7WeKE1Zkk9*z3l6V5h`#?k=DkK%@>^-#|ez;7-7zc6x0ia2CVoQj2shwrB@dqK9HR
zifCD~vYj5HjJ5i&Nzq<2f&s?yt87Q4F4@(In0mVq!ZI=m?zl-8Bmp}kuqR+sB?{EX
za^=A3*%CUny9P+2r_7UdwgNuVkM*R$fgI~^gwLEQMihN`;SyUpbkVFylu+X~x@?76
z6XrBcqQ<k-N1T|TM<XjRnzq1CnIObrxR~+R5!7A<N7+)-+P`q&G9U0b)BuVFD$!c5
zX2h=5nB2mXgI;}$lNkEoh~V*l6jUO|!7<=j6Qv1XeHH<Kv6aLSGr$Ud&#-Y;!fqbo
z>hK^P7t%2wIl7QM-d)KQX&ptJ(tjkj+x1}f1~@PQ_tBV0q?Q7Mhc5vuctDhcD5P1L
z?$I2Kp_H|i)1kW#1ysSXdh<ugoS@CXo4^DdnH7O#w#bvP;z=!y-7;GZVi*h6$6-J(
zvv!7va>jm?qDCB;$+5qsjsOgHG_anTqghFqpLS%F7IWQzxKfS&D{B6_+2$NQf*J&+
z_VcD&-qW$-_W~zF49&m_Pviz0p^tvFw`N=fj!CFtG*#|xgqXgs^6=wPl^%hW4PZM5
zI%|QyRO7D?9aY7NAgm~Q6M8<DNkE(EvCcU5j<P4DVn0X2<5?m}CCA>t|C}-7)y<ed
z1LfQq;iaI)$1;it?Nvcf1yqM(PQ;8wvxbC<9pmX}yOB$g;>x(qpAKW*>wp=c4gz|`
zl^l^XhUZrbjEGOfyJx^MgZE^a#>y31Yhfq{qgar=4tkLYb1!brMnb$07dwf!KxZ-X
z;aLB*lVL}47d%EZBfJ(2rhTb;7Y^LTrPXy9oq=rSOuiUW<5SpW3vPmgH^9~=)|hE|
zz8vIHiTP@`M2O);Ro|FXy>QbF%J<5!i5OE~0l7-S=^P-5O>`kF#X2mhXWeWQ%$Xeh
zfJg{k1f8^+0E%khnEz60o<n986X<d*Qg7pCgqN3$#xz_0nua+l<&JT)gs*KKIq`ob
zBYUZ}qhgHKem}PoI7!oKnqe4@91z;?385a+XcQO1?k}L27kg$i3endEQ2+TceEfG%
zeH26}pr-*nylopq3~!kUohcZx*L>&U5h4XPF^@sl$xl`C!o<TFk8ODzutyJ`OC7!$
z>E&`Pyysw`4z4-2NR<fa?NCHogega^HD6+{L~c^cV8f0OB?=jf3CX^Z8^li0wHr6&
z6wx%uD7LoOV4jId&)T8c$HHz>=#8VN*hpLDkR4Xwt}%bd7EqfEzBVE{UK=7Gz0%&B
zOMxKy>L4yZaw~KagFPCIt>H4outKrwqXFu(MOI4aqDPdkczi6<KU>qCf-RfA>Qm~0
zly2Z`<a=!fnRQ684?Rc~Ss8ZiCrbQgW1@cB%@&~A+ynMT<fnIy+6X9CcR2yCUjURF
z(44B{Y*|K%lH;s{Q5@i+-25>RuyD?K9jhB-M3GJo9AqZ1!Nn36CBsa+pO24omV=w7
zhzHh=t~}(8+pgYcGx0dCN*dus_Em)8kgHiDF(L{%Wqv`gv$yiKM{E_?k%ZB`_x42+
z&W_?y0?o=uv7O868MmoZdyM67*ky8QyT7an?85qGF-Cts9419(Cx&<`)*R48_DT<W
ztY-Z#f{z=JrxCrk!JHH@Wd|mb@2}y&b&=3jM=e*jyBbE=>c+XuF%O{ZEaFxF1i~j?
z<8Uc*h}8&`bc;o2nDQY|%X3vCdBveY6<G2eG&wS#IEUn^*vt46)(l%0F~p)V7Y%l~
zWNes`kyAM+z1gBhiCmSV&-9L<woex4SL_{X<*0#YWd|`rwKc!ORn8k&jZqYD@+Zo)
z8@q$ix4znN@bhZBmb;ZzrQ<2X^w6>BP9U7PV1|zryOxXj>c%z2H|_lH9-O^9w*i~K
zD>}d!#MWVd-=m%@XDO&8t^%HV=s>^~!Ms1S1);bo(s=ON&;fKDKG9e$iQV0@tm1(b
zg-Q7#a^8Rm)O{FS+fVOriuGQCbqmxnq5j?^8dL{;ISu7Y*KCQ$s-MaIZLrdw^}Dj6
zuj0VI3TSpOaX4)-MZ_vEKwk$(E)G2jM3*G(KMZ&ZxOXd!Nh0Zu%PFbs!6A^5mR8gY
zW<_~NH|bheTe3LVg4>XxIACu8mpWI8IGE@j-76e~;QEZg7VgSE$m2ksayBI{cBrwn
zuSHRA^k+9fa3mC_!IWCSd<9aiz)xpje*-aC>v@_@c6f`o@&>&<$srmo4pxO6gf8Tj
zVebEKIF8rZmnsRal2O?cx7K;r(dCFoI;qxk*N_(*EXLOELIGYYr{6KBk4PGG8=gC7
z9_2<cFKqCVOPk(O|Nrv$ZmZ@L40hHd&vlM|3PG8mfp;2pO+R?^^<68yO}wp2r8?$i
zzr=s?t?A>&`w<!mZ1vR9gGo3p!6L-Z)mF<2(#&YSnfd|@W|WK{Shhkprqt$*xhyw9
zgr`o+fL6Qo`_+)%IoE#if-^VNhj}?2%D#{b<G@A6f|HZ;1fIeKNzURiD@VQ*Y@8;%
z@=dUK-Q;F>>s}!yPjVl(-f^bq!X=+=&haqoCliN{&kddy{N*ON_XgT&t53A&NCF?4
zjt`kxv~*}^o2_waYNwO!%S_?ju8f6q>5VDnd7(D4;m`KuzPuB4W!Hqic#%Cj=I$N4
z@;ptr@A+igdCPAN@D5$?zx-{7^~wkDHw7oXy5>S;XTMB&`e|a@hLo+gprv{x{O&%(
zEZkvU#Gig)8Jki@wWH6$UG7CGZIkE!e&@%S7qv+8Xl>q;pSx2IpMTaRde%BKZ@~EA
zAB6!XLvnY1?&^0VD-DYbyEXX}D_A~7IcL+;<Rg9fYh%&oaXA-hDdXSH+8q}4vk0-p
zz=7N!csD3nhIu}jFm&sSc(aMt{u7sa2AzOT6Vh?h7a^~*+^ydO^TU1xpCdM`@7j9o
z7`6Ml6D>V{D}?Eq?ucU(<B^$Rkfjvs=igo3mTgrv_BA15NP~a+O?i5FQ1fHa!DA_<
z+W?C|gVzX(SLVz<Gb5yMVJ!(aWC~v|=pqx*y&iWI6gBEbo_&4LvT2XJVwyf*#D{kg
zg(VM9B}Rd7evw6jlH^V?Nxie7UA!mFRvtI2v6U7j=b8j;vf^Uxt^T(iS0*fM+t%-?
z0ba?S*IWTb8aP;8=0m={=Amj#kq;c#hjGPdNj-`?oFs7u%_U-i0*hCtc^iYMweK(*
z@+N)mC!)jqvCUR6NDqRgV;|bUyXHW!3OMQDu5C0sX{<OGR61BLE<PBn11#lMme|d5
zsVGDPBeN=Q*jyXh@upEA+VWmZ0coaoY|UM;9iW}{<M%Xq*dHEuPlfvJ*sR?8#X25a
z%s{pJ!B<`naMad|o`c3^0RIckz5%RO-96v^b?ELd+9%E_f5A(&>o2R*pcNdv7ENB1
zhn$=ubnRC;V$V~MDaS$xXJ|O^w>on2F(3iA8@)s|Lr{nmvn0GXFLF7-0ABhv83Dj*
zdtl+`7zU>gx)UCb+8-vLg7%c7r#gsh*?YC<C>Q!Y{i?*!@8Lgc{@P4WaCJVr%6SlW
zba@5K;4$rvxcrp+`6^A@+OM&B#T}#2&b>D+3H#GIu%YSa<S+CzkB^zFUULE3K6SPk
zRhR2%N&kOk;A>z&fL%nOfG^@>jx_sVTRSeJAjDSUFYyU*fpo5|b0CFtG0fXLBADyv
zFY*?J@tm!q9K%9w!vd-9CT}b5AzZ*bVjF=u1^L=r@!c^=Krk-!bB?lV<Q_pn9%gGR
zvhsR_1>~c1e9g|mg#t!T0UySkXWNC=yMv0n!E7eK5AV|OqlcVg`DfKB7PvStX9dM|
zDx6bg=Dg}{_A#k3v9;!Qrjw+JU~s7{*ezM7^?|DeLjN?0HuGW`TQsgiqnFV}aRU6G
z<pyejsmOaCyWOzk!Wv7n>>0VyX+^Y&JUbh2E{eM&vSr*Rbri!D3DWYzQ(duGnpGwv
z`M~~p&UF9W$)qBtHEn00TqjYgy7GBJ-krlWwXFqcheA0_*@0Qm1(DUA3fFVKT)W&m
zd^}oK#<on=c4|^D(CN10yLGzOf?~EXGQVCc8)7oU(X>+e@kCD1dFXr2VDmVRX-0Pd
zIT^J?Dg5B!2DFdk9`XF<-RAc>%x)`q=p3t*y8lN~!cRza&Q=m845b({tZaaq>7yZ4
zEFotdVIp)RRJ0rJIFruHR7CsJ&k;$OorP&D<HzYDWWmkWkxbi3^}w`=+E*}7S}a1V
zeX{{&-i|kt77<;VXk=T*K}@`wY%$@V!bc%yllU%@D0R@BdrqTfb&JSrbnkEwV{w<3
ztKMKaa<i0y1uNC;u)2sCXD=HAF!it7t1|J<r*tub-JCX)ph$y?8Jew$Hs$AXNJh%^
zhME0@QhW6zda*K^hD{1>F}1XiB35MZIT^z{K1NLosK;X<>ws=3%RO_t%Cyhp(?%&&
zFCw4pN}a83W!Y&xfn>%_oJ8{<cgk2ep(Cc)5lVtp^9m9E%?e!R?{m)h#%#+JBLMVd
zy^O)@*h~6FWOGyin22GB`1rImBvEikQ}0-53T>-ZmW<|+Wt35O5^}G(fA*<pR!6IS
zp2=R*-D-22p;BalrYoNVmsZVIGf~H3lI7K3nK!Kc^(Vv-cajHb{?ql*tOALS`bk(A
zNwy@GY&G>dASX=SYxWram4SzLu8AmCp}=mO#Jz6gGIK|zA<6l`X!{su@Ea>C#hk?1
z2SO&17Uq#UBRM5PDJL$t)XB3?&?LIn(mr~=TzUq3Y_-n|=IfD#mxh>S&OV^apdAXw
zTUO#!wfYmr0rw-Ol5<iSyW5MbK_U4U+u}J(<ygK?cLFk9c}AIM#>{Q@)Y+1H(!woX
z3|TIn%BL2aMMkw5x0B*WAto<8=mi#_j^_4Dy#Vpbl%qiJ83!MFh*8r9y{hrc=H7Y`
zn`BVi^jt=c8F7r!c)iP5|H1sNG}aUy(W;#5`nh2+meF{yHh-82x457M*GF-Gj|5&B
zQfCJ&Pj>DKX7P%AJUZH)X=Gu1*LYfv(R%U$GKDX9s7S9+aeWP#yENLoU-ZD9Nu;S*
z+!E-(vDsV#`b^!Ei<k_h8p|+P7wAZKtg@P|^)O><<Ytd%K<Xht3*TCR<#1GH%f(1w
z1glXT7QCgE7L+VyWj_wCAFG8%^XSre9MkB<Sd^x{(<9;1&<XvZC52FR4O=I$2+`uG
zXp50J;MgFOMup1EuAkOKa!3}O3C&E6>pArXxHp@{oTLcC(g4j#+hXdiWpXkJ%=~RE
zCJRxaY;uZ-PtZK5Oojz%>RCM8ER#?%rF*dMSvOcKBh--0r*#|dE#JmRvxEBqhujv^
zkvdW1F)hc;m`@w6tzZP>D1t)aS-K{h%#WLW8t&l&#RV?ssi|4t8-8@v#sHo|fgSD`
z;e7MsrR_S?5LfBHcpOW+P10`M;`NIrD|rV#_V?+PdNCU=ch^Y;mhxfJlcQCtU@BVt
zu54K;Zw#}t&eTlVqUq^|0uwEC=2!YV;A);w3u!v3sY0`zUa&7)pdrn@Zv)F}sY#%`
z)?eMK;uBzF?>>)Me?97x+R%>ZYldydY~$Tu(-M}Zn`UvuN{enU*gbwzhMZs=0H!BP
zRJ3&b#MAusNkVOlnLh_i))79ToOFw38-}b!fyU2?gYwtv<BwR8nDmbOzcTQlI}}Vg
zf$R)`CR9MPaDt*8EVE(~zHxEuqYF9U$s^`^7xVYNRtCW7$w3AaYxDOT9+=h<CtAMD
zoiCEx(0sqab2Woo9Ku!uLTb`GnrO<|PnZ=;{mp=ivCtVj89m;lne_o>&356ox5he-
zmR{GtAutJ{KyrL(*J^KQF}~mhiwNmY1vB)Un#|0lz@lRkmyq(l4<Jt~-zaEZ<0t?A
z{qD30r|Yq|wvll`Id8?BhbBU)39I*A9;Q(z`I>?VHaS0P&SP3IdB%U_YG<}oz30W9
zOOF;wG1KLur`3w_pAruj4L9jBlbmRDo<f#DV&WqdevW4SvEt(~!p3_EnRzB?{)z`(
z*r<?#Dx2{jv(LBdXHE`0Y<zb*c6j>Wli{Zytx)F149CIk?{MNurSn^6muZv%dL;uO
zE12>RBdqbP?fbP(@`p+Jum9GSAN$|L_Sm7tSKmzer`f7k7Mu9OIx}XHsU+0=if;8}
z^K{qNd!>@(hN6e&FyFiL_Q=@d9~Wf~&i>ii6?)t`-Js@nOSqYLLXVwX^FGF{@&1iN
zp(j}%=gt2dX7$XmWgt^Lz|P$;|NYm{7CV?4I&)&D{_EnzI}bC}JEI;mhkiRUK6!3&
zRO?;-^`;A9*FKhiaG2UTFmzh%%K3j}{4Up-9gLZ$T3v(ECx3B_XdE^0ovN|_3D=kN
zPnWE)@7u6{`3si-M#t1gZ#P}3o_yg<2ljf-r^?3a?oBComskJEF4@!n`RJ)lx0X$r
zReQ4faYRwz-G^%y4)6D{BW(N94znpa>z__~?!GGW<lT1*wPC+sCvIPMJ$hS@>pxM?
z{9pcjFlXEQZ9MfQhSQJw0oQsjME&_#wz$z>y2f$u!~wkJVc(t6)LEK<3mw(p`k(gt
z(^J=Ys`1havTVi5x272mpGQ0OWDl8IEauUAO3bAr53YDO-g4=;r0qYd1KI}3l!6{S
z{j2WenI&7N);x(C-|x5Sw$I-)213S^z#Dlri(Z~Q^_cP3AI5gZ;}=$~FV;CN!K&sc
z5AuZ1hFOAJH0`o;0eu6R8;+m3|8n8qZDEFIV~TQ$@C?pzS?BImNJ_Q5DNg`p<l_0V
zO^c3){F|}O9G3|wfQj4jl9!fih$p+}zDk6_oW**NIi~gVjw<2$A)+5e=H5N=N5V3x
z=vr2V(px#|Q&>vtOc!Dre0^+*bzr}vW-B}5X8IXMeXd<9)Mie3nRzQcQ{HRt@`B1s
zIlSID*Gv~S`WR8?nQ2m#U1FR~0a73RP%}N;eS5iKaqhC9Wm6@YSS=745-HSyWhv_#
zl^!kuVTtgFw9ryHz}F?M%^KA9BVNvQfjIVe)?C(*!of|lpMMv2nJxM6h^;Pe8dD5{
zKwrwNMEr$1`$EC2jxW>wzXG8$zHMy5$r)4IcQG*zHoS30zG5nM&${y^iI+a9IZUC7
zo3a|BL8(&{Fb_++>0NS(n|!972Z|UxNs=TzVOSb{eB~*AB$a3J#o?Dl_Un!f9ekXB
z;>-LLBM=a1?<WP@Sib$jq>@e`H3bxX9<UKvks*QP#J+;!6rKO<jpJ`hR-L6Ru7f9c
zk+aENX>ZJC(Dlep2iz3tCurc%%jw^~0<ng{BP}0KpPGJ0G3&<Ej=v{%=_VR`llsCk
zg?mAs$K>13shH4Eq^A;L)1^7{{l^uw3}$j#Cmq<$9Qt+ocDu<(b?`+&pCel;4gHwp
zpR=wtByCph#Jm^4%}_1`*eLfkuNpuES>ChQ>e<E(^yJcY=ckLb9(;;J<dhFdpTxp9
zon2fy@ym29G~?uk3T3it<@ZggZOeu}70j9z;DKy+B$_jE&{G#au~#6J`=*|-6zPZ5
zTccCPRT~y!Bh=&g9OR}%bMk|3IuF*)h~sH2MjhE`ub;B~GuU|)v)3^OG{6W>fRMz7
z9vRi15050l5FKzeBnIhyXdKx7oo+{9{t(M+;YVqmuAM-0^MXGm;%D<wpp}E0I>b*u
z^m^a~>fslrh0RJBDfc+mLS+LS**h7Y3*i$56ybeXsE&f<Xvb#gM$%bXSfg=3h;f3m
zhRTLfM*tlRBVd-rt&fxNtbP*dwqPxjO@x(YVHCp(lA~lR%pw(r7}x_AU~*Td#+Pxv
z@@iMH?{B3=XtdLkqZ=g#=ki`VM;%5ZLW1>PnTeP)@^CH)3M9S7256;^cfhUe6v4Hv
zD2juea2QJA#s<qRT$B;i-&=}RE5@p$hkaFuN>hA-L889_#x#ryBjR2)U`|>J#)de`
z(GsrR-oqQ+^~i|`m57IhD6mK=b|gtV>|+8I+goZ<Rd&DLZ1nJqBs8X(RTKvA9j*70
z`iUvZD#z@leb#|ubn!M?V>|Xrn^nQ#!d`_|oC*aTD%%IVDealoQbZ-TbeLubw%G{1
z<-o__Rr_S0w*j}(#Z6v-sv?B$hNL5@oWl-q50~eUuT3_={-O2=Vqug5x5M`Xx^?Q4
z;_2K0A8tkL-)Sq6=LKr8glv0T5+M$s*XA<M8VD7U0)X8y!A?BwC)Ni_3<LHA!XKP5
zjvC(N8;7nu7jQWio*K-7w4ayN&rE9FhT8^byT(Na@TCfgoWoMN%3-n-2lLS*29;3M
zGgzea`RL55U`Gll?j+&2?o=n-A<9Zd+)lBa7GRl*g(spA4q}mgW8XC65f#u|yZusO
z-H_=ld)&Vy*Mb4GtsnO@2sHW=3<2d{KZBnyM2vzMWP~O4<y>6uU_gHIDB4kqaE7_!
z)HB^jq~OL|*STrvE;truj6a_OSML@1KS$IOhOf8#&2cMtII-@hc{7eh8Oxoe><!<5
zuX1gWarTtefl)S|>Zj}-_mI#l(oEyg)MMRI2~OSiOg)UMlGqm09QYd0mV){N?Bp&O
zLIusWn>{(P&QkZSk6};ezdZi50y|1<{#MDMf}Dm7XJ$|`PK7boxo~yZNovuc2`Vs9
zhZ<m}+2U*sY&ZK_Yv9MWa@^2|s<eFBVV47YBT@{Z#%XZSCzd2w>|#Xi2qn3?wVzwN
zV?7qCfM4B%nl(HBT%i)7(w*A!YU$eUH0paM7<|<EDDLUAgLyAF%|Sl25IR`ueA*9-
z`l6XvTBi3>DlTJ1Q!V6b13ksSRaeN;QO}F|KeJs@;K^QqjznN5CW@TNEHSy64Ma<V
zv3MWf`=5c<#rx0Blc7m7{fQ}2<Y*5DNEp37<uiR^C_3@Ldh5pR<DY>!uEY4aE6<R3
zF=6a487GKXpKkzWs=yC&%psY3D-ilCCf&d9>}mu%f=`tHYA@vgT;Wi*1Y>1`D7||i
zxs0dpbEJbL3%8(oJ?Mkf<$Tsr#+J-fH@GX&mrsSNwL5L{2LE#zEpSMnf_G7x!`7ND
zVVWXm4Hm+|6Nd`6d<q@)j6)5a<N{_Cg~{c<x3x@cEVUz3^QA)~l@<pSV+%MP5Ay5O
z(SAbB_-o%`%PII>Ci3BMgts_bgQ+tzJVhB5sN3nNp>ihSA`Js-x!s0+?h1DICo4N8
ztoy~<ZoE?ECOpv`bLAJxx&>7?*o_mY<<dZFmG%b#&rCFT(_)R%U3a+y;4S1on3=c_
zHG8_#^#bqMaFd1+JQ9UJ<3-A`ztWv<*)R(<e|hW5RsF!>L~FXP4_k6X*5Lv;Uswqr
zneEva*-+omUpPeo+46qD3#paHDko*4KgS6$u7qkrU46m+ztPB4UYL|~i5eLSB<`s!
zD(bs35PBZ=_N&}kTsVCF5p34N17l!Vl(N4wK3`MaSyr01y%}7HMrF~MH3wdM3fjGR
z7o1l~<mlvB?_-~*{3<~bDYDj}W*w-hV7NwNzySS-fx<Yf$QnxeVIjIh|73+*OVOK8
zz*_?u2Dr1QZ2jS8wFd4#dCy*qPK=((lOuNn{FP#Jb;e4E9O%0c*&C?nae09l2??}o
z#69jh_;V4k=fG_f&}U=$@w-{U6#sTKP`ll(6C7&Cat~HQF9OYOcVTEBrrW_^2LYA6
zeLERl{Rtv=z+nC06S#s1g33DYn~~Jw;n9o&6r}6Avj>i-2i{cbcsFC;QE>IAPOLv{
zzjD}(U}40)wZdtVTA87pKIDv^`rFvpll*<7F)n`p_CdsxqE{35xJ#c&$H8vb?68eM
zc;Qj(p9dk@NTK{#Zx)J@-{03y!qhw(KFfOY$$p~3zeD8Pi8eTOW3lAPUN_yLgmaI@
z%5ndU7<KX>YT4`MZ2~qvJWj_kp>qAEchpxfFgyr5Gnoo-palQ6(%;=HBeGX378EFL
zSh4iCg(~ObzE>O1<xJgK^yf}ySB@IKGJpKFzH;CKb5G?uZFxtUWfZ5*X7lT<o0LcA
zowz1jag<$%>9A>E)m6OL8clJ9c!4q9TrVD5NtSdxdVB56oVdk{whdY3cQ+--0J-%G
z<G$s17A>ZI%L)(6ZfjhA^Uu80nc2e&7rok)ed*Z3Nt>1r*z`VP=A!X;Q{I^!&HB37
zQSxr8=R#+GPS>ONqVB~#7yV7=XJ-w;B?EN~Ia=nQS(f@C*DPCg(IxlgG_H2sv6YL<
zrx@SdEUs5BKHzEmJ#b~u=dhRW-{pDcykn<2O0j~M?`Uh6XxXnqM@<~`jkrFZ7=1Ud
zc3y5!*t;<^^W)9>7KaVVx^DXZ{oT3m!j_x07q&in@6t|e`IEycUPX?a|LpzppLerO
zla=?kscBC?vpg4}+=cIkEU3BrxlEaFZoZfn^#1dmcU_xQH~!3x>#JwZRPH$RWp3{`
zm*me$Q$JssxuRubv3k|#(p3phM}D5c$Br0*gzzm%&gpK<Me=`W)CXxfJ=vQUo1R_8
z?0omC0)~41c)v;gfS3Ku|Eu?q?p;@(#-{&MbsN=Z0Z-1zw>w^m*NorV_cd^n@vpdr
zg;Hd%TzP%*P<_Kou-)5U;V0&0eJGskW7%`&?x{genO-<#k?(w;6#FJ;KRVN!I_>SV
zRe#n$PzlZg-*-L}-1}Z%-oreT_0NHiXz<xr3yS*&H@?0_qdpkV%U4@EyVD_{qcU|K
zQnR>b^pq5!SyPao54YuQS%(A>tbho5h%GD6(w*%X!a7=8o$u}#<io1dlr=TBZCy>@
zLT5T^)h$;`F=4P}OO2T8CSYDHuW4`GTJva&qf4#Yty!>fZB+`L?Q9(atJ?m5J#3?6
zw&F(W1+_)s=z0SlGo+YJ^VOQm^Du^$U2-f(DZN;1&kL`UHnd`9GaRF}Rhl$8%f@Sh
zrZ`ZG7;#MR<l+WtO9{W(H(Oo-#+f>}h-bHJgA>;<1LU{crPsNAEVeK{R&V^0Uv9C+
zp}t#=&Yxcs6h28CNXkk|?2b>#(6m(7nRw+0GiuwY?kcyXQ!)Zwhp=sVvFGYZbzC0Z
zFY<P#wym&`D@qfJsa@O7dheiYgSV`{pu{$O(sQvo&eYb$qi1YI3tnWwlua<=?Rn*p
z>G8|1g~GdLbVhf5gL?34o5ZNhJf3sh8oF)daC6RLf2N(c@n)0$<a|U+9h*NSP(rR2
zxhwLgf+y#$MB8^OTVeuZag6D3UbA`9eNmqNe_5q#2cj-qO|!BPN3*ZJqo|#=4z$r-
zwVFJWut~Z+lVEcL$>!B_Fw-aRh`wl+<8q_3DL!4=Dz?s)wz5J_8C5ASigkIkPq)X$
zu(2*hi^Zib!$WhQXN1ZG&o-zTRv9{I=6V!oDQLO!7KZI~P7B+*Q>qqwW`Z{M*eP-;
z-9Ml7w8W<CAR|<=xDD|$Zw&{b)fZ!!p41B<+gGcNF%dlbLaos=#Vw}Q>B=^ZWq+?$
zre{7UkIAp5tu;}X*5xr>inTFj();9V7C-q!G|jPE5o6*~4ccgY4UWvhniMTy&qM7b
zsLcUwX51#17N$!RZXegc#@p#WO`L9)Xa8}8R`ix^rQ!98yfrw%Q6su`T?;Lu_Z2A?
z<WukeC!e&EY0SKOUEWsP4x@~=++)dZHW4T8DELptwrs7~j-O00B^??W%gL95)x2aK
z3HY75eso(x9}gmOmB0+MDb8cjwFb3m$ZfHTb?#t40^u2kNhngUpHEAitcY<D7`jUV
zw9v(vN7N0!Z&H#<L?h2irD~%#Rt^+D_Da>PkbL<lJLPTz9BXE==%$5ZlTwQLSL@a0
zmd_|`TQiA>$xOg~W#(*ivIlU(b#NiK9+$GbE)XRz+=I0&26hS`Ho{97m1j!tQnoE~
zD%PNCuCFeJ6{M}qqluf8Z5F}t@@NaXk|U!PEi(3%GTkKGr50AX7cU*9$Ll_UwKPj9
zIJ6rdYsMhPffPrDmcUX<UPz(UZ8E{!sm36s{qn%2yH0E!PK`pCoB*bbjKpua9<7YH
z2wly|*`XeX854|Zeuu%2|Iv4+R|jU@M6hEO7~5tz79cKTxDbe+%*qTSi<yyP$b4p?
z3F_fW7hE_Y#MdWMY~7HhDCxPXr3ob@<HcQ-Z6;=IU94hzheFdkz%(#?3XI#N5@tS)
z50XPu?QK}b;zZi%;82;O4ow#)KD-wVhsc2~MMx9$_e`>L92~`O7SpR#EPi92dAt<4
z=eAhLlq#lh&CouF-YYDHNnUlnc5w5O>&#?>YV)~$RCav0sW-K%s4GpT-P{r^<Uv7k
z0*pzRWFixnU|nQfl#&D!@Q~<iVwRIOdVgUUcio9=e$L@mqzebKPl;(Lx5a!m5VeL6
z1y4$)w9#_nUA)3%;Z2fZGWftplPohA{d&xesBoSu4T`mZZJNjB{~fX2Gw|D`>nneJ
z-VRv*OKWQKZWELL<bsGK-7Vjc%qipvVTS^Xk`5&`H&m9zUM4j2S*AH;v*@UFpeSPt
zHjXpe!NxH7D^|wrC*Nd~-EA^CNhM~>FI!ZKCpgN7vqzIi&}Hav*WO3I>PO9bbz)k8
zM0)$tb4L9`!h7wq47-=d@+^d;DNaB$E1+f(b3s5-tSJ?!o@dKS@Y0PookFN=sFz|<
z&HiRx_Gw{pLYZBLs@%5%*k)vy@{I&*jG+qVDooOANcK29@6sedn^qTXch_YU=afPs
z;3rR;z*+ltMLP9~Vi8LQFq>q6?RJPBVI^%9#saM9^=8_$4P&^^NSc$BNsr`!XkTDD
z;{0}I@0Pmxd$r)&4OK<CN-aoAt9CpA88(`V9IrJr{i{OL|BBc)il6)*=4#S1W#q2{
zuC_QoPw7kt;W6AVB>}D)F2SvubNcPOIMCO6r9>f}IkTevg2(76#^7_~Pru(VU;SXt
zKPJOT+N!6d$vDN?A-`x=Usn9JJi23zi4JUV)D0m9`Idq(7rvMr<u=fw<Vj@inGvwi
z^**!YwpHty>zufP0XHnB_m|nwwY;IS3>|L}Y6t!e>hWb3Fn_TP>uYStwJZNsiomcN
zyx~M3W3)KsjCA0q3fTYISt^n#1m{<tkNU@N^|T8ux}dOg`%CZ-_PiB2vD?>IY<}lm
zZvW0tm#^w7Q--%=zQrn0LQA))*$-a&$Y}G~;wSdQ`1--7`0hccp7%ey>00`QhGLpC
zD(vw$U0~O+>+YP_!P8PsU+aury6RWo^C>@n+_mkB4ar*Z%GYx1-3iwgg|Do5p89Ob
z^qF>M+be3QVL8uf>77NA_b1;ilQ#>Z<^>nmR=<|z|GXA6@WM*b?ero0w{%>4biC%}
z!?d6CB80F0eALuDo@stk&<QM?NFTS1WiOW*%ttk~@~#;RqfV*KRyCdT{I?Y0*OUKA
zZ2wb=Fl6MXbz6V^cPYZPPa9AEdXBF>(J}M?E=BnH>!sB4$Hn(G|I8Sqg)Ak3J@NUk
zQUqujSUhCSEVIsZ#aW54$4%-4#XbLbDZ<J7cdvatesaazTLX(cXRFj$-@;btUmt5R
zQaY#p-&O>t`D;V8s;swZ%e|^pXf$Wzv|<HZ-(GCeUrS6i`L9xh0+U*z<dv6ccmL@9
z{R}F;g%_1;bm*_pA-;|A-j;t$5k6RkO=D)985@1Yaa6IXk_-$~l2}%TmmyaXb#&C3
zPn*`#gDRwsfxQG{iVkoUqRbZO%a}tOVl`>qz4_N4Tpac1)7HLU-J{O_xJ#8Hd<X(7
zWn;`j^;bKF8|G-l(Icqq&`_Z@wfZQ^X<SZ~BB*9gg}8!VMQqV!(@DTFSFIz#Qd8sz
z(9(2*Dn%F&rm!@s#J#G_5JhG|wnv6~NKrOh)0fR4vxU@4Xz{{A8&qV2g5!Po(xBN#
z{w+m_iVxby%cDvWa5MC30q<3XqrCx@-}tu_VMGQtA{@q2r3mH=%jA<WUBRUG0$Vwp
zTns}c&__OKJXMNdo|WVYSUT+HQ%jb%-{OshR4IaWW7?`zy9e?~b8@qX-UV*Tlv0qI
zLzN;FE6WLb3-GcvDDD(mH14A2KV(L=*X^Lc-}HZ!BGi|xO~;niPveGSd=EEIJ>1Bd
zUPP55m}k-&`@f-CiiwQljYup83?=ySWqt!yijW)aW{@1U4autl)Mu|Irr;|Htqkhh
zp=Gy|`_?!;1(8Om=K@80k($gsqz6pW0?Jp=i)V3Xu6f;5Zs`&cPxgP*xJn~N@5Ny+
z6dp9`DnC6ai<|kjcP)tExDzm3W8%fJDwB_Lqq3Siff$IW%->Lz4O5DGdf9Mug~L6|
zb`r&tSePQ@>vJ}fK&8F2@}&+v+*05F!PtBLHJQC{yKAjGAtaEH5L&1Kf`pzBI;f$F
zU<nAQ*djJm)QG6qZ$ObM5m0GrD2j?DASz-DpxDrf9orZcyW_-;jx+2v-(T6!XFqQ?
z`~`&M&RW-XoX2_pe``(Gmnhw1b?CyJB^`5D)$Q<Os(_1{`KDuQ)a1%sxqD>8tj4=?
zBQ0E?NQAZ8X(m-B@szlrbMMFL+vY01sjVKK$n~0(CJFvet?8=m>G#*a%b#O#Z+lf0
zb&Vwu@JsWQ+yAXKt=_Tv<PO)uSwD3{C6lGdR$=uud0YPcstJWAW%`P&RaIMlR1L~a
z9vf6wPOjd*s=BJWy5?kc-TmraKdM#px77#N+$oq(kEz+Ws$k#o#ryBqWTj7)DCY29
z*R;EBJf^o^Ke@KEaOuUAw0bs}$y;=S4bBFYeiv14s803Mm@Rc>j2vxfM6Ufian&6*
zsBT=MQ|Er&iVkbd?yZ`8^rT5oKyA-3XQHv{Z9w(glXLZ8Y-XVG-5s?-+ZStA$yt0<
zcpqovQRa4&N%WG{26baBcXi)SqZ+6vscSaj<j=Q?AD4@X!J?s*1-yL=-`@fDm=ruZ
z2kQMx^}xB?=byQToEno$!G?eD7z!o}#~XIj9S7*Ao#sY6!@>Y#773M~0RhHBQQQx0
zed_jFrflltYLh30vlVw&0&$aXu8FoDuAbGP-<BBlZP!;EikFSf)0-2W8TCr&6>0qS
zBjB>pUjuYvMS@e@?5EYcH_Wg5eA0v|T9v0o3!QftDYM27D}j8x<VTyA0mMhv8e;$&
z9*V5PrBj9jhOrU^oHue&BD(|dr3i?0Mx$efJBapQn6tG`JL85Ss{GmP#@^`$5JLt3
zc6K)B?Of)z<I!a3eOtcnXERNerJYm)NxSxBY38i`mqf&(+?<vLbe0rtr0%zqqV7?c
zvJU$s9wG+afW_o3eCa_e*%k@8yi~f+gl#oulgGvbz({+Dt^g7RuqFkWCz(&LuziMs
zm!APcKceI)7;irPiViT;0t*rPegKYgMHjNc%<jYT#tj-e{(D%(Rmgb3)+QbPI2?c~
zs5K+DC4qG3EqwLvpBEQgh-FH{Lm$mvC(tq6L;`)Z$8XDXfXLeTK&SxNJ)Zzgl}vXq
zw%{$j<w}ad8rK2wmS0<uiS)pCcQo2{Uy&ME%cSkmYM=_WJ8<x_Y#)*y@I{B-#Hrte
z5T+WleWQjyl$pKg-)XlTjC*tNvS`PqONLA=LLi~JYI2(2<Rfg;Wt<@tlte_!2~#%3
zESs3?haPn!Q+;fxj0;34+|0{?MEPl6!UsG{y`!TJS<HliIRC4L&g{~QG8Zdz<bo+p
z()XFw^jvZ!54ieik$1!f%>R0ll7>VS%J1A5jmJ2^M@INLLq6MHthY>lh6shI{3|*n
zNOn^~sv>E>9)_tsJw$*iom4D<UjJhJ!dZ>POjF^*^XSnOI9dxWWPmsi?dHHibLjUR
zA8AK9sGMi`q2D5jFpZO6Zs*lD!durGqT~eYKt)dUDSuS`GwretxoF}o6uXxBqTg;K
zdsD&(D@jBNSvG{D4h90e|B&KiDD;p^N_B9@7hjCMK21P%PCj`m5Gr*#Qydr^1V%Y+
z>T`BJ{v4j$Gi_D3pYTemNEI0j2p0wNxzHNOMvVi=M{_E0>*@AAM6iM&_%ZFi@O=|p
z`*1{y`6;o8h!g+I$c_(_*y*hTu#q8eN{R23U=`u<>wL*aFAr^1%AjTSOz0zm_I!6w
z_MVx~ksk>$6=0)7SGdSTj<1R_Ou4K2WdO%NC6|8=X(d%(kzW@48t(3>-ee(zRH=QQ
zpP8E;{#_Au@oQkH9z7H8Y+g3pPJL1+G7nH;!HZSPLBv!+E+A;KVR<4VH)jZPWnH^{
zFWc)af9o+al27|OA%(9@I-CTg%ODL)4sx$}i&EMzBvIL+e?9Njm3t10a64lS9b`mm
z8{WwwwI=NEPqKabac3(Kp@k-ZVZ@e*_{gi#%u5uB6Yf5rtqDFFTpN8%@9C(U{8C-u
zA%eSXV8C`{BcG6edR>4BSZX931u~Z*4@GdsK^u`1JPd%18WzPPuaE0SC&J+DkOGB(
zp;<1}qLY&2{YR(UX}yBwy@}?;OWP|h8@-$X&#Mng%;z&c+AJendD76774d#@4Q3YO
z%pzZep|W4&h8l^e@D0ip6L~Yez1S0OZ5~VLhSs^@O@Ke}R9?2#j`)!dZDbAe(x+~j
zaN$73>7r&s*-s=A0i=S5zZ`x1*)PEPoclFDF9sv*BUq7k?(i#+Xal?z&_-|j<Wa$e
zS!P0M#KWb~Q41W^rXecgQQ>a=3!_|sg0XKw4R<K1Oj+M`3A$WsLsc|3H^XMOji)jy
z!RXwpRh%%pI2S(bXQRB2F}LKs5*foX=G^^R+^4Na1OE*?Smca3INA(7Tn(lPCOg)~
zRLV`3T{Zi15%E<7UkkrL2G9M1=1lhtt5PQw@)TLQ%LRiOKHuG7OE&OYrVULII+4)H
z*YMC%KwU?C{{erV9=be5Z0pFjEzjWwt9#cScjUc;9{LTF)+P@;WkCIn(i^}^#2bBk
zfwcm?bfRCc$LU6b?b*7i20TdI;xPt!euN&i$WA_zqYP>%t`Y1RCb|&kPiRbzvrsR%
z^BK-`+OcOxf@Someait=gvRVL+!q)~?gTqFy5!39{>cl#aR_tyA)02#s{M3=M5UFp
zdwSqu9dK2iR9X6ofzvkAE9;LDX|uy@?X8Q<0$q|~{VKg(K3kefN8-hd@DoHL7g3#M
zs5DerG*f$O%9bvaeU{;@*fsOky}lmQ{K@Lz9W)(riYSCq;wsP~XXVXc>8UT>J|^rT
zAxCd@svE68JGJF+M}@`Z(lIR$nk1uRCI-s8KX0D;+7GWyVT$h~S1h3*KS-j^9L`87
z0e&3qZ3hvk?LHllGVS#GXzB3#YfXtS5qO6ouxlWSDf7f6CuHL!Row_Hz0IgwBK7nW
zvFG6*-O#TaIcQ)Zy6}GEZzGoO;%YyLNue!Rc;(iI^<IXDOFpQcp#X5vmMt*Xp*p?R
zdOYDF9W}FiJ{_Ds?7L1Uek)?1_13?_!V6Cs(k6hlu7*(KI<ESpkUf9-6k+?{@k6&z
z;4|C4PXSg6<oP-N?R$8LdcH-67XDl_aYW&ycH-)?T`O?G%*w2>2}8vGqY`Y6seB91
zaDg9=v}iz;4rnH@1o*2m&uV)csFE37ny}TR1zpw9|8_-36^HHh;0hl}<Xipa^fL?g
z7tLU~>sLSN@Y%>;8$0jN#g#b;9!8fka*Tkv{W#*)l|g&bN&w6g9e!G5ON{KpcK-=F
z6@P7du%V^M=FsjzhGy`@c%pF#6dpNp#u=PagIQf0+-1bF`G%LC7hh_G7Q$m=!-<W{
z!1`r>vEm1J&%l6on7`u4_9d;BlZMnQjI9`k5`mu^!~<G;Cwo4_-=4|xmz3bz760vS
z5;t>mdvokYfc7p7BmY_n&BWiG*+}1CX_RYkKP0iXcN0kR=`??9Kc`M7&N=#30mq4T
zI@d@jVfaZ{c4GH>Cod-~R)E140uvK^f1@oDrd!dT=08~5osfiMM0a!dGeV|eRrSwy
z<r;F3cLl|VY8Y$pB%BoUzZ%=t{}Lz<2)8r@ZMsTP9lRu+Nz!6UDsAU;$Sd3Ye2}#A
z0_>=0%Uxer&2_#}5)^HJXjRr5-{xqKy$bfYd5IMcwAc>iQ&Lu*(37}UB$t-Z-7^%j
z!u0Sh#>p3Yuf-lG@3mxpe*5_937_aqa1lBd90zWYBdgf5o|tQ8v<Ty?P8r-iPp<?f
zo3eHUzrNO;&q@AcXzGuF%UAaW4>5%&{dIjc6V9gaRL8q-<|pqBTl8@l=yF+ZX)&+n
z=!gE6a0in|yexg?u#qFD{r=a{CEB(_?+n<w<wRT(oRxp5y5sZxYerYS&(<7!@d(ym
z%hpPJi0i<%58U|m{pI_Y^k&=4#=6Q}!)?R2O<TO)|FtfUJ?y)g(-961gVBF!4B&|N
z`d+g!w&fR=_|s<_7G8baYq4qkwy3n6bJO<97no-DPOxC4P$q3@ZGD-xO3T|cabwgL
zO7egDFk%A#?>Y=<(Im26!Hoiyo}<*9TV^J|<T+B;Y?;otK&j~l-2E>nOL;>F_doZA
z3bGq-Ad(_!A9y<e!|wF`W`-GS)x%}Mm;j`kw#y*xdvxaj?!%}V*veVp_CI|X0o5eo
zuung6Z)3Y0E`*hS7xFXIt>?|;C24T#_{WwcWl?~hobz1WYvN%?a+R(0Bn_JB^Kn%}
zoc~((Ro{z=l{w7crmJ$Owgtn$!KWEEEYai3H>WMac%R%TaIibvGj#QVKhOS0V+(xT
z#zBV+Wml8Mc|Bm-mgqf<7*qKSFk)ZpB%65A)4U+t)BJE_W|S<P=7Jp?hL!?jWI)X#
zUju$gCZyR4T2qjFmIfIL`}sLk;WAAD)qDugt{GMeMIOb56nXc#DfnGXxL=h=_0q`i
z65Nd8<LKs-_}#!pu8K1<-KXg?AfhzkhUYAlaS`;}aw1Idi@HFw_WK{-pOCZ<JI0E#
zw5?RaQx^ekniSmu4t?79wSp14$T9SGGMo~i)^~x>C?&z*ZB%Fs9s6Y(N<fl=P<!?(
zQ~H2%aSxqqrd&kzQK-5Md3~y{Q``qI;2hkciC}pd%ZOKyK0cyn_%a<b2qYW3j4a;E
zBB50s8x00#$h(aEk`&!k2T~nL=iOG1xtw@)cka5}S4W2aaoF?rzoZDe%}Ay^677ta
z(z2C#olE&xt2n5k=Fh6PaBQF;B`{9mBc@VE*uMq_W`<a)z^86q7AwtM8MZcBM-g4p
zP)z6KY<$5t2vvon2w9Gmp_F11RLROz?=~HfQk)byj){0VFk3|!k>Q2{dGWd^U|_`W
zLa9=M8Ox_}0Hk}1y67AEgrcyE>A+{13lkteHrzla%YzR-ZprRzwEuqT;)tIg%T^|h
zhTd$Lc@j{}HBy$h2GMUXqFGm6jTU9)TJ*_*W%f?vC1kFLQyY~vK|>2+LvyR#>HhtY
zVb3Nljin2hygN@#(&Tc?<iJfsQU?rjO`6DbpM6*%pof`%knT=HWEXXBP@Y|uJd3AK
zWUOElW?H$2upbx)$a3j&J_YEe(mt&K3$8dB1jdHDrm7HAA*FtLzB}yI=-*a9I2zuW
z5N<S%p9^N|C@oEUsNVV>i+u~71qC@BKh1LK>C!5eG-r2|)O+GalHh)vNA=U@8mq<V
z0ehnH#^c~{pS;*Ln`(6ZV+XzC*(@4<V@}eb0~8&4kUoLBcXN(uosclaqk~@q$E{yy
zmUtCd8KlW_)+O=hqI3<lJ225)rNM@%oR$xl?;KwJwPos9?M(07T-5P4HcD&~^I(sg
zQY8o)U0paqkhiTNOuB<3ONVKs-PbTa683K%DgdMVyRE;e3&tKyvs}2Rr|+d;anC(p
z5oP=EWS2vqy066fNt(`Hj|%#yexXv>WBYw}e!F{p7wDuEtrNHeYOFkG{ma;5DMH6i
zuStJaKm7gYw-XxXVZ|ty2ahAtmzePmXYRQA=w--`vR?B?%bMdKzfJw#IljpINv4ra
zu{^K?4Ia+E=wbbbLCNXYj~g>?{g)IWxm!C<*D}dK1mY}oh3o!||Bn>m%r-=FuFmi{
zwDLbvghszSsw5B;Xmj%Zwb<GmM;6x;*YB((qQX=sreBukj~bKq=>sVHeCIi2T<v97
z4qj+nosd9DdL%vewKv3ck^J`1+kTZQxp&wq)448gRkjn)kE~s~b?T7s&XS~;N$lg!
zj9ppC)ELmluWl)ANIL8q%%{q(Xbe>X6qVF9T7DfhHr>t@j^)P%>$@zP<Wz}sgh7->
zGn8Ec461Z-4vWjlnI#W}jWI5)Y~a2+N%g42EoSegtjrWAD`+c)_qvQ@(zw8sbap9>
zi2{j=-M>jgBn%mtJFbn?YhK>oV-7+G2f*>|DZ}ZRW99Z52jr4&20Ok~7^_J8pf}?m
zyP4BGRZQ2dy3vdB%UPEsj$W(eaUw+`jZsJC>j#v}37Vn79~qe=3m*phMwr!|&kJbp
zqK(fCuQ<JP(-5b?8Oh#y=UeNWOdnk$T*;d?^l1-`UaS4j=DN}X{@!6Ay&|y<zw7HQ
z!xr(`2mP^;gDdw;^p1p%gI^}Pw~?xtX1K2C70!+otz-zOj{USu=S}6Uc786&<=usQ
zn%L{-J?%^Q3ATIdn<iy7_XIx6X=@{-hEeg1)Q+vE8=F2uN<Ac$5teL7aqH*9CB>#I
zwWS5NK>m1a17RaF$Z?+>&alK!nzrAYAo((`sVXs>K5h!_y`0#zT7yK@7Yu|t-U#tV
z6kD3h$-Xem2z0eN&9I@V8lX`S`7~U&?Sjo!NMq+T6KZk|MM^O;B%kgMZ@ASw^gFZ(
zg3?48SQ&5?KAA5iq&l!o81nhlNDHI2Li7(t;Lr4rdcANNNo`thwtb@1!&X*Cs5Df8
z_A!!g%kEh-r04HT{yZbMh&4j<>ClSx>$@F5QhN<8@a7Mb`MM^qqV6*zs{8Kq-EW=K
z_pcdulYlb95htsaS*22jlZX@GxbkZ=Xk`=Qx?zA`V6X6<a90qjSsE&xH})nqktDih
zIbk=Jhv*<x2VZWdnw(#=eFZRG;T)_7v-wo%X2aQfgA5&ErW1&>ol{7H&;t+lqQJD3
zj~y2}Db_PFR+#PVs98vpGFY7Szy>0|z|c;!vdCX3QeqwNM_{Lb*p0?KMo={w8Is{q
zvoJ!4U^sE@7IG0yz=3>kjo+0<|3G{pCx!k^FjNoCW#D5Ea>eeZEH|9Sb`))F)CWaJ
z5}_iHv=oKu0=5JJKY7?+8&N(M+ldgtkMK|cXaAMM{Xqyw%1Vk1okMu2;m0iKtqGQB
za10HWHWPk2v4?Caoj)OCR-mI6N-z|q$2U2A)Zgf(##j}^chNBtfK&Dcv!E&aU#%RK
zoiu61CLZ4-b>7@WC1Ipup4dl>?-zvOs4Kg4(kH0DC-6{0RU<*W#7&ezM~&q0^CgpU
zJdY%%DTeY6IYW+mSzsISJlk2K9X_!=ceKL7$ZYG_n-c;x#PVM5bw8ZjTl7GN%8w#z
zH*1>}&R#O{t5<>`Wlmr&vDTcRo!n4BZVZ}G<f(uyFY<6e-iD7X*#uR-u|Q4@lSA>v
zO`DU0nac@tw$EZSaObwDG8W-vzJ+2qN9KSHYEKmt{S;tg5`jgX?y503jEz&xB0c8o
z02K!p03os>SZZv(gG-*mV4YvE2w)#U^Cgo21%8zYYhCG8rPsPPB*4I`ir{F1>{ZzT
zve-ZnCr~l%6%bz&@81TF8Z>tg2*I~?6&CYupaUdtAF7$QG{H-a24px4Kaoztt^vg2
z!%zjQF%N}`kc}o1XSn&&LTn(l5D}Y`V2FZP=@#a~CaU@cAsXbZofG(s62k*_%JR8;
zsj&(Is!^DJOM!yO>mari5YZ|kL{5Cq-X!=u=DGz=1P>2ZE9h((sBlhJEwfc4v3!?E
zpBE+ukCcFQnH!+SLIJp~Vcz(1G>%lho<y-DqsN(I1t{9zL`-}s2zoA<vDtM*!SHcT
zkRkK^xpHIJM>OMd386sN_o+c@f-kFLEZFI*&UMj4-#3+HlT9fPy90>j-63=(exo7B
zSFue(AduzLRYSm32DCK7d`C&hc_m((nPW&$F`Ta0apWX4(WAxXB8Gm9otk*KqtsFj
z%taglHY&2CCF+DSIsuffYu!<xf=P`uU-<&K>S41hdQgbOYP7x$LegKvA6aZhL<Pe(
zHVOnpuqx71zTcD$0;I_Fm~n=rgrPtoDui@MqTg<Me&O;UBRswH#Dtq1LM;lDFKIX-
z;fml7-pso}^{IGEi|31AMXY`+x`$%#3HawRO$h>JlpvB2DHn|`-{q*=qVL%9K5~Jz
z+|XT*JPI(yTqW}b;}Z{fzZ4i0Qo_`Uw)YNB=2Mwc<PkI^qw2tTv^7z81nE?h`9#Yn
zfwK;p3e&ALh<at`GE0a;BitQ{hB(g$?rLITJ-d*IWy9D)!!R}Bs7G;elV%RWZ?5R^
zNn;}g(c})h??de2<fw?3w-DAol{FG794BZl!?Qh8Wr?lo(6*CAs5Z<>Rv4;*@w{dq
z1#(p*OEq%DBQOzg=7%)s!F*xalS{Q9Ccr8C(d{N|3dOG}{7Y7SBdgsLBM~~}pvS&U
zf~zL1Pr={k7yFAsF1s0V^cW~FV(Rf^t>X6lJyf}2-veJ)(mxbb+3?{5`3W%y*{>nq
zOMnp5#4-?~86vJks-%1BM>p>j6d2w(KyY<&iQ2LPk}}STTD71ptcwU!ZDq&1_-jL*
z)qV|~4YFL~Rlne=(53$hw>{+axK9%~t5nD0Iz0*u|1Ka*<-1aI2^*>E!Chc3qu5{K
zw(Q^3I4k7leAvClIjGPuQ4SfQM@x<wGnEjBA^iEg-8{lyhAc(URvE}&ZsOSjOf;}T
z;my@0m?&W3Yrs{pF!?y`=&@JY(YWv=-7V5ymHcXROtF;7)6b`gMkzLSYrsfMQ(8-7
zU1jJoWpk^WA6+@(gZd!2H<qUCikY>}R&UH>bM~J1I(8iV$U!;FQF;_|mk-4Sh@pit
z+L|pE=ut~gT=Yp`ToL_e)F_Em!_oD4Dv>0E;io>$aZDTgEZa@Ki!wPkQG=gGs)U<m
z{DS0%sV>8HG9!^pBlmw@dnW9LvAce5a3GW@p#7@6aZat4Yn*-9wY_dGLFzN^KhGr~
zid0UG)w%=4r6dhu*Z_9^T9&9HOlEUA3ON1ddL(PA>1&{iu7Z+D){cD3rRJuuI1M~|
zJMps2r+u7zHrtlZp7t}uc?XwULuFQiId=sdC8p8^769BYG4xOZ7g74TwFditT{ILi
zeB~}S{Wj0Y$P_2)lQEn(VJ=~+%&RsV1_Wv^zLAr5XqT*;Fm<1u)V3i^oqTeQL5e!(
z8JjXL5$uVve9_0fVU4bm@O5b4x+trM;fx%y-Pu;&;Z~bXTQ^FdIsA!CCS-Gub=@2Y
zza=<hqe!;P|FrOc<1BFmFYKDLFxS@E>y~?iGYgN{l^g#^y!AnB@3B)Gm`Pj(Xq+jm
zd|zfW$;3x_F0f4@(B>qhRSWFqB>67-<EHncr_9t*OU6Y|H`M(W9WeI!nzrfXHdeBG
zleOBAHR`wF8)TW+Lr99I*f1c+@T5n2frkElYyV^wQMm`8&}|JL9g@YKtFIB3b)b)N
zGyekre!cx_ZnA!>ZM}>A?ibFZ5+1m(vqzaj*5#brwY@i&B|90f?CaP$t2bkEf4I%D
zPs5Dc7P#g(a@9f3ibp@*gZ}JC-lEC^8MwG8UgpB?H+)?Dd1t-`*po*BedDIL*^j&F
z&QUzNJ65*SaRFT`f85J8WnV8?hsu*DzWuvD%#m^VrYT(t2Zx;tQ0-{r=igWqzv{UI
zT@D^x;W}%^uS<D!aUK3D2D5ii!`5gnZ!#PxHEdYG4cEeA;xU!a2%BjZVzcO5VSe`l
zPPqEXSl{wprK1}D4m*~1|6OA2Cuh4*i_~$H<ho=0XQVH8sqLMm6BZ{<-J9>wrkd4b
zMU39(7C!uTn~O68Av-cOIUuw7<)lu>q2%cZm?+RGPqw8#qcqc8mU+#x9<ajTu}?Z7
zKhvl#EvW5b>u}386JJKzv+r%6!@fTI#?t=4G!EBo(wVN5xz{;^XRHNe_|d;#A?f6L
zI~GTk8D#m4upZsVdA8@V0Lg(^75V#~H(vHPBM;UR>?x@MgsF<5|1|6${gd0E{zIli
z`g+SZ!;PJ#p-a+cJ1iS$z3{O1#%;KjQTt+`a`B5Z*Jm5433ERB8W((21P>o~6>`Ab
z3$8<KpLcE*5?@R4bfF7};+kgqXe-D#`ndfc;H-BI2uJckA)U<`>WXo<`_P%-6}Ifg
zn1Cl?&~pD7&T`iHHYqBp9`f``<cBR?dTtuG_YqmZhKe}-F_zhyiO!c17}ID=+c3cm
zpSi3BM;BS;vw^pKWpn`Vx&7O<0+tDXw^*}HKbCmFONSuDUj!L1xNa3N6cB8_Fhob!
zu8I(|iCc~BGqZ`Pq=swHg2X!WtI|qBaru7#OIK;4hX$oR4;sFTEog*(o=*4Okd?^y
z*6<!X6>DS<EY~Kuh`@$WqPf;rNWSd*wUZ%o7`795%38MEf>SPB+xa^zlM%CL!67YN
zdLDZ0DHZf^-4x$$6dJ|4yfzX=9+3xyO(<G0j$<RL!*=sFOF{(*a}u#c@lhueUCfD)
z4MW6oUpKKdFh7CdsgV3ANUrJfSEI8*!^egl>v26y|FLN1Z5W!0SC_8lwgLVc|2t7A
z1P~8z;&l?S-95>UjTpa9woOFd6aMVH|I$?Vjg?U8hxL&9_~P#;9r}i|^9-4CB0$MF
z<(7Hfim=ke#`Hi-U}$1X_}lV1Vt0h-{$X}@R6C)Gzn3dREVi(<^|E%g6bNj^408)N
zQzw6ads|BuhbN@}PmSu?bDFO1p7R&Zp+HYwpwQbjz%j&+4(XOYP8Q+-p}9NHHrN*2
z5s3V)9K|*+?`(MvM#V^E;S?w~#fQld*W)Ihl^vv0?@+O^X_8_eJ1u7m%Vu1=)G@rf
z(9(HvtfKxI@Lw1xee_zyk3=z6G5!6Dr!fXro+(>S-{_8n=E0MUg-WMh0+eJ7Sc$OB
zmB$=6OeZ5L`KG)Tp6VBx=#5M}-`hfVE|E_SFt}57UesFzN;G$^w&qxrq<dyiU$Y&%
zH{sUnt`1Rmc&_JUiviuz@Ejwy_sv5(b{n3~+N>yfEpv)6vJ_K5tOA%CQ!}R}X{FD5
zjmL(LQ>xWz2FCPIoq5pGSwQ!2^7M|X`coH5*K@})COJALmO!_uS=nNi8bg(7?b-E?
zo0;Y|zG{u~X*Aq_JYCbTXw1h3=Aq*|s=x$PU?=e$6C3zEzsS;m+=zZnSI<nkhww!X
zOZZ3^VGu0WSh|HIi6V_e9eR{bPgms`*d0`aL-ATH02TDBBaA~Ub-6}?QL=7Bk4K6w
z;2EUOV{o%XC?jaHjBxJ#^7?t1)WB`FsMbY!FNKwa^V>~@e5t?xLB59Sr5J?i42@{4
zztct~ogvsLjTphJ6lvy`#InN)hbCp0p+mMPl2JnHa|~UV%X5%jpCW>4Zm8=<u4aCK
z_PXO$INj&8vU`-jMoSJC-flBA7MGarMt_-ML9SoBj5*gcU7?{l_NkIk#^dc>6yBqh
zSqy4+WzUdbiAvo?3(dmz1n$ARQbY5#%G(6~oFJn+qVlJ-;HjD^Oi7>S5;Pt26*y5l
z%DWIT7+pHU;yuY~Hdm`6kZGTG3`^Lg`8}!U@Kt==ln!VXS-vN`2)nhK9D-nHBbuZ`
znn!a|tR$r!@LQLG5gu<E2dC?x;R%&2vdX7j35-0XD^2BxmY$LtcZn;*_c=DndSLBR
zKBODZQby2i`tg*@!&n|p`26eJuw45Kw*5$ukTgq;l4OXIh$<siyR3?7QK!zS4O**|
zb_U^gNqMkgW;eb*8R9OoMlF5^$+c;M+quf=NIam(y=R@L$r)l<BuNII7PuZBd|G=(
zwvy#`TGqwns>l|9<@cIMYA^^5&t-sN7)>r=6O93a{4PqsZ88P9w5SOt(V@=k<cK2L
zjVz-?8UyQtB4o@y`zoBeQ#&9v4!Ny}p!sjS@Fz<kd=z1H;*d(jaMj?{y2pDqWY~3(
z&6FFt`CY8hkJp?+b9>cN>ReYcm+8{4+|SJR%^V+O5i4a0aZO6bVw%S#O>&wvkJ;`6
ziL@~W*6Nc>lAc3n1^k|ck>+;30V}sF$yDSS+{H(0E_WG3$hbb!q-cL*cu<VY%`!s=
zN>n+_5M?Vx+2b9^&oMM?BI#<C{g8vSi{&Y^w45Y2aONXZC23=IT17GKAPrY&a_CV&
zi1umdPWqg*oOe#sKh3zb!te;km|Wr)ER9cBSx?zV@`Rc~Mk@cbakiXTS4*-~+w&}h
zDucxP#a@7fAKt56@qI@g%PvR!&9u=4U53NtIku0;Nr(R0?j=>_(KAS@q+c`8P@%TC
z&9@H_m733x^2`?VAr43~{B-4$+ljDZqrIZdqx+nqby0z>Mbwz`$_j;!YCrgxF?D{P
z)1{BZNM$^AoLQc+a31k`^qwOb3ArY=H&$MH7#_K{ie#HB9m9^2?m5eqP&hx#a}sFp
zotR^#Fcz(QIK*}}3cP|bMS^Pu83`m@8g|rR;)FRUT>*jFWehWf(`G4h&5W;E7+FDD
zlB&#bP$7Y2tw9vowRkbuBreb}-L-qHUdK^Rtdi2VJll#6Rd5_107FkzLW7{i?Km4m
z2}C(SK}L%o1A{O*(^!9#+BhgZ{-OB*#Z$hCS^(roi!ADN5Kh*>2x+z1T0YTUKYyt&
z`>w57Cf9l^NHAKNYiCSGFfjqlx&_4nI^>;gMwvgl&fIf8)x@ytya6A5nZpOt@RW9^
zi_jv8T(MCBic_R`4nMxcSx?47iT|ID=k4PPZ>JcL6}B7YRCE3n%FuLn4qB_CgfV~t
zUeM>5kp|2&nu)W>euM3;<9)F>kD<<?QB)KL(D;t+LPxE)ROy&Uvbh%<oj7^$`JD@M
z&sszCI*m`*>hfn{dSqTHwXxDw&CPNot;diD!a6sty;fTcJT__0N)?IsN0&sukC4y`
zNUMoo<umY#<<U$^aPMD_<(?WUS7x}DJ5}(*dl1;@`{`k(GZ+&ZC%?I{DX;LxQ!A{o
z4f4*9_F8~24Rz62e!gUrpUI4L17ISIHTdaTH{EKI=5s+N8Q4fBo-ZbZWUIn&42u>P
zY!$)!yx#8g4AF+**phvjGf5Of%M)Aqz1AdM@fdosil2S)851y4)dP-}d7RaYyC`){
z)ghMme|wXx*z&K&_H)DybUYmx(`JV_f9Uh|K2l;iRp-0%!OeNUm#iww&_ym=y)~v+
zav;9s4P(f~sN@v2CY4#@RDb!##h~S7evfB6KmU18!wSfr>~*;S&gDQXOE%@_@(NV6
zbh?xg#vceZ>S@5t(A?6g^Hl8>lwlSMWUI=d&HkC{hdTsreCez>n8lHf4)2^d?R5lq
zzI~gXd`gk#?w78%wAk5tg7?eW_pkJG^04FTIbL)4=Bw`-m0`s8`fEIVGT;`3bF>~L
zTua{V5n?>p*7)vS`Lxb#4ayx=KX#~@BwijD?TnM&nUbY5c=->OD`}?s6!XE}S&PJG
z+D|h)1_L-FKRJbu6HJ@%>y2#l&$;%xoK8<ZP-O!80(=`znr1KA7fwjk_Q5x18%){U
zwE+(-EDh!J{$Y`{B%Oe{PY!G6Yc5ajdvB^*N3~z0x!yjUFpmP`C90DIi@tbevrg$E
z3zr0Meq<c`5A;*z;FLSU{*<#W`nJbM59L}%%`z|!B^hSndF=_a9=PjC11J16uO!Fu
zRi{w8i0J7WPlYN04dlgIC#j|gV#&U+h%IU#xxtHF;l~#$ZRyw=?V|3WrL*C~3AOlQ
z{crEsKl)eehG@Y;@Ui;@m&MWrd1{+xr>gSuWAX^cY{<Ml-`mVgMWM3eM~jJwyf`1F
z-yJFOkYjn}A{|>$YY89xU@_7<ZFzx*is+jdIE$QJ!#&;9c#g_BuH@K*5mYtXMn#Af
zrh2(!X*U)vaypmV2Z}=7vQelQT5*?|Ydx4wju;$D*_P{0PT}e-F@5+B<BDyrcvf{&
zJz~quxE0&X+(Fun0Yp;>X*W$B$>`G&$Y~M?l;g3jaLmN@|J6Izg&Sw|AXs7VNTR_L
z4z`jIrDM9cCh+YmP-5yrSGn@kxC@4`5P{M4|5iXbs-x#u4Ow)WqT^aTdjKXXcxU-$
zd)WwVtQ9CdZOEM66X3XXBTJE=Cm&Ik7B;jYYchKMo?*vD(`ahs=QQ4jKS?Yvv;!r!
zx?z1e;)BZzkk%~8d8P+IB6bu`2UyCOw=OIR5lt)FlS)@}bM6Sqa<kb&$WYpzsX!qj
z<few}8wyMn?(QPO*%i7de0x*MzGasUR+atiDErl4_76sEc}f(lq)b*CtWp|QD~CFG
zYg&PilHlk;ix`-&Eod^LDrdQ^4goF-mZDS9iBOZUB#{I7>%MV0rb-k93G$<ppvRD1
zz9_5_kNjX}N4X{6OWZhAaBF-1Zx;<)`T?GEyUI=Jay%+5#x-O1Zy-yxgbt#O^c#No
zf`)S3w^A6yV|&RV?u8M{97fJ$-Z=)3Hxo1tYML3^yp%}Vh60qxF^It7{1uf1u5qHO
zfZcgy8E9^#7`5a}o&byt#3NnxygSi5CYp_9N+W4}Z^fklAh!3jV$z7qH+|e<>}etx
zC@bRfdE1^%G?yYJX9WEM`X&P2GqIYR`n_U<odzlSmAamh)4!sbH|$&u3Hm2=E(qLH
z8=Gp8o7O3$vCvTwA<|Wv%SY8!<M&1AJ7@UA5j5O46^o{_FFEo)g0{xd&Z?pHBKbJW
zG$T(v+_QCQm~JArahhw9DSN}EaHa(b@oK<cX+1TK@YJJMY+v35$OKj==9^k$NBm}n
ztvvN{czmV6PNai%_r0r6*4sX)-{uAa^ycZUVB`tFmoGNrn*ct#>{=tySz_8%@D|XN
zX!;6ZF>%c`0dNbcc1vXrs8VS1Af_gfsm2C9z|esOdqBi$@YtWQQ!eI99U<8`u4Yf>
z)&?hC6OEspooPC~6EMg|s0MDzrim9D-QxBxu4(w=dDEEA>_s8fG=P{oP`1*@gx`n<
zN(}z&>2DiNWR2pLdt(<=ezpR>)?nRFz#_jim!$4B(lpWZd+clW*L3bTTIo}T*1t8E
zyXugtHUHUiXvNQ~qzjhx&Ip=&;FKOrnVfY&r98g6rK6^$v$N&&gO;;DTfk^$e9`1x
z-{wTbG>T8;tKT{UU6b_6fe!856))!(H!eFTPxy5QjLb>z1_yutc}Qn{_*ux|fuDz7
z`YZ1JoPG7mezQ@B-v2zTw?5L5KTjWEe77_Gk^2#i`tZ*ONB;SF1jB$RR85(pHdv!J
ztW`5ksf{11S%2ZDORH&UtJ#!Ri#4rQwXN2tTKiTfdiS>SZQ7i!?w@I)_!ZJ7tZj3*
z$<W6v_|e%WvN_7N{68w#^S}^5_!l68f~f!LZKr}r;0f^0#Q!eHcFN5)ip<Y<;};e4
zoi>-{Z&6m1xmWI}s;&s%Z0>C8R9E5QX36GQ*9bwri@$xDWjM>$bF*JQKi{tA%>P_e
zdoTW{n*G}K-wt-8g3ZkBo6Ea|U3|fg&I*Szw;KQJ!#1P0`Nm3Yr~5Z^y7`Z?h|LkN
zBiZ@D#QToq{GZibdH+?-Uf;9%JcwGe-Rq%}Td85*2r6_w9-C*j=XHH+LcQZazzEZ=
zP6>N6xNh`Vk?ipqN8|Ki1v})!@^+VvsgeU-^NsoWrXmri!fkA9*sO@UxMK(Iv`jjh
zMiotHzP^UYdtFzU(RI13((`BHL!#U;+G5CjY#gWUMr)nl$JN_jA3JiRZUema?$o_M
z$9ETSJ*M|{v_8M6bdKLO=49K8t5uSPzxSOyI<Mi%@42z`!W#|S_azK{>bFRUzom}u
z{PI<`f_%`ikapQla4Gc3nN{C^A3OE?hewx8&YU{)t7GZ!`P<`nk2}-(^<Dp-&`}>k
zPksMW*E4?9;VEH*Pha0^nepWD>A$|~pI_ZQ{@nUO+MTi)X(JzLb7t*7b~|z*FxdA%
zED-FI=bml)RA9i45kB3>ia?Hek%Cyqjj8?}j+>0~h0h8E+tZ&F3KkbUD{@-@`dP7e
zoA7yw-`(`*r9m(EHEyv^?{_X4Uarc?F&Gh96OqMi7#PCU?E7as$9E?0s7PWsP4rHl
zyZ^=ZsVm;R*b%ov__AvD_W8ra_Do5Sv3>iSm$iysw^wypH-iagM_8^abNRRXuDcd}
z`tj0nG2^Xk?V4c+{?BUm%9I6f_Eh15Y)lrtebZd~^Ix*)C$EoEHC54lz;&wbfaBp_
z_jd=|?=E<E==kvi?k%UEy?uA2{jhZlHnm-S*LrDK%lo#zfOqeYYGXY9XuqAZ@Q-8t
zb6arTO6HV>C$9Z`&~os~x9)9@CPLMRPJ{M^nofPM$DgOa++FzRnZcJW|3enhJoOri
zWrn`X(Dk6c+c@yxpJ64A{&XrUDdXeN1*>@nKlc827S!|8CBcr2PnU(w2R~i$Jn{b1
zRnbMy&wYMt4oWXvPWtuXn*aCrpMR6myuN6oEEj#b5$pPg=GyrnMeK!l?p|MSCrw=R
z_0FVuhrZsplJUpaf9-wW`e*ML?kkzweCXSQj1zx+duY?h{QfBG-lFf1vyVPn{`-HC
zMLTvb(>b(UZF{=p^O(VBC4pO(O1uI!$Dg@<ex!L(HSh3`mvt*Y{CK5WcDDUFu3N$B
z_MSDGw+9`hKQ4SeY=5km(f<3-_q?l%PrW-5IqlSk<3sjG4JBayuaB3UXM}Au^1Sx>
z-I-eNzrV;sBfCB9{eE77Rx@@FXZm}l_6!+cdtNtl@QG{9IwoK4iBu)|KB$*3NbULi
z+veY1{jzwn;^bv!RXB4arD1@lC#CL?9`g!ZPCf{aEmaLPj5@<eWzX+Rmok#n<khXs
z0SxSd^xWHJou!9tK^bv3tJSPZv}s^IFbsO_7pavJtU(=NE6v4(BlM3Af0;GO#&Y`-
z0|JL3y=5cHuK~)g!iHIiSU4RbrP?cPagkuIu}}s5)l#}JyUVwxbso<+Z59^jUtPtg
zF0_44443BiYFpt9$}_^knY1pDW?FxdPPD!?$}vPr3F&~C`avG$+M@D@^%r*aS5!|b
zAC|YZVcx#iQfe%J2!&>J(L_o}%aU&WBec<d;^d>ond<Vluj4$qdNLs8;C4mb9Ms`^
z72gQgFq@$5N?!bO?d)L}9?m49WO+dI$?n1!@D~`J%S-Zw5-Vun9sm-jPN>RWt6|~Z
z7nAq++HKfnY^Kez+^8wD5Rwe3I+qulY2cJCrA<}jP|{VvB3(M(@8o6om-^jyQ-LvV
zn4x9^T5y2|UAlCoDD_LmRdv4M02~XHd;=r46j0>MUBjhSAp0VL5%l<oTacr0w%t)d
zQYTdeBX+&-6WX<{_RE6TQJ_Edr0uF+d9t`eYN(ea&K#kjg&5+nEjyQSkWUc~4N56l
zT4<c1qlQ+68-^*yb1*+)uMTIpvvXJ~Qk7tP?WVl~8NHXmw6PJ?R5A~~));6`?~~JP
zeCLMAcR^APy!g;(wG6t8=CipT!RE1m@K2ZHb@(mXO_EZ%T*^q5{l*I5gOEjh$?!q)
z-3?utecdaWb3e(clLOOzq-dIQJdMIHARl$Hyk)r_DLMl@5@99jbLkx##O=VnJqq#K
zn-nU+&Y`To3OiQE95(M+(8(8)+_hN0{cqnWKdBqnt?(oV85`4sSg%#oYm!IEY0Xu*
z;u9#Y1b^Bp$Qh{z4XicJ*e3*Rrt+!r3#CH~O!lK!ZYqjhL08DMSEOnC2{^pHftDuE
zJJ7(d{rp!N+rxsi%fQylAYkk+B9T%~Gp&*`GUPeLK9b@F<`RBtlA=-(!l~h#$Lk(n
zzvNGP#D0WQJxMnviBNSf)0qCm`;?^>A>P=_Iwjq8|285>^}BBiZ~hjd2ewuueZmRd
zFqR@Ka6-88-3!AxA#6(Zv5A{U)*<Ujtp;L4Y}_QF@%vTFCvFs(tWxLwu;bGL2BoZV
z_yjJ$i$bcz%n`D@kL9XW0UDB#vH)64I(oTwRi**@8ExKAQah(fp<*HQ`D?Yh%gXTL
z!GyW5I99uVCPUHqq0|evcRuKT>#kNVDR>oG4yMcNa&n_JPgXOn%dDGnTIVUD_3gt3
z9NmmvF3eohzN2XpVfZ(9K1M{ALrxViWa&mN@Wx7Md}~`AIci>as-$u2)ZCcOOU!h7
zB}WE_){p&I^p8`Y%|futdhpzo5$yB77RkRYe%UoD&YNnmShq9wpQWbLJMOdk|2*%%
zM!fdb#Jnr(`Rip>5qIrXl=5-)pUwUvp@whZDGg^OR7KMFsxHx7h4HrYI}Epc2r&Qc
zC$BL4aY-@%*_($G>Sf{Ge;?4u$V_gh!{Jo(x@oevpGn37cE5RN#QUNm>0Gb9q;=gH
znPPk>GftW}q<MCI75|ck8Yb<k-9ui=n*^$cjbG*NB_$-ULca(Pe7#<AUAN^;$i;${
zBmd4h@@2_dyN~0_&fPrcL_KnJ|GRk`dWNOE2lr~%y&1XiuPR#I*UpPijz!L0UNYS0
zWus&HryaljdWj3N3w5VoHE)Q~2F85pv9P;nH~-Ubb3C&i%~O3Z{q5t2A(Lfd;y+o?
zueY}R)KA>=m6x~f=;)ESAbW`V>WG#29p*c&$nc&GMF|^F_P+($!y-v+7+?&NY^xkk
z10GBGZ$b9Yi)2AUjukG*u3En4i<RwQ4lc;vxF=_$ICmH>$WD(D_FK9SF8qEk*YEWl
zpAO5L2}5K4uY&9`T0!Eig#T|rc5Bwgr2j3*7AEGIE&u;hkUd+-$*bSI_L61x;Qw2Y
zy=u~!b(c2xngNE~;@am;`TtvxEzB<xg42}+tF7W$+Ohsv^~L9OW)=Q-L3V86Iw8Kr
zvT%L2BxkO0C3OB;bfdlKzYDUn6;1uz=eM}6u_nE@kw^`>`Xag%sm_~Me<}X&f^5T5
zx(u1Cz<I0Ud$*CJ2DZE$8fl@KU6Wq=x@rr~f|g%0|EH3;J9~7Ku=pNMV_}7$7Gm7h
zL4}A5TmI{!nx4JIkq^~=@tu@X78_x1&QynRxg@@v+b9UfSf%yJt+*h2$ILM_HL-+R
zcphg1dg4vAOgf5kVM9P-Y61?u-s(5GBH+zdNo%qn-^7atKip09b5yw8w`8c`qbd}l
zopvL;V$A)@alxgME)>Qt!_O?S9&-dBcmO6x6DPW`c@?I)ZTGDPG!>Q+R*XNnJ>&lN
zZLhc3iM9<FBOy7>nk|D;e6NMpGMl(f(2-qbCEIR9ZeQ?bdqH(o(df;+Q9}eaNBPge
z&oE@6gz^5|tfcZh3g|muib<otqsoheYnmq4R0VOF3gWSUDu+!J?SM>;`7tr~gK*{|
zKf(e;f7=$n_kQi!AGI}RCD<l+q$=@V)R-zi8AFSBvL(x!SyVpUL8-evdFNdo@54Uu
zixPk7a(vBeTqv7lBqa!48Lr`woru48a@YI&yG{>`cT^|z-Y#vOU2?ww8u90sSfPLV
zcm4BY_njX*Yx+%3nH9HD086&RT5Im4R`naI*w*!h)uTUkR8CLWJ^bl}dz50+2le(v
zRZn>0^Hp^hXV*KdZV<**G`z7IR@319vtf~2jR&LAFSRjX^-yC_O=C!BW7vbn5kDKH
z)=d#1O;J}Wy*jIg)igyv*osm|e~7h`xHs$)@7!cn`s7EG<?1bk;@xGOJ$D9o-AJ#u
zb?1$`(ooQ~C!SGKF|(v5wtUu4t2}Yz8X>Ru{NBx%t2QO5)@Rp`D%w*NzUPu#LFxlu
z-T|)H+vbE5m48<6rM=oy)Mc6WcAw08Po7}^I&pLEf_;xqHqT8}txej$>E~wh!00_y
z&5G4yiWBzEa;!OUW#9e-n`;j28eT8`MDCrFijEjec(ba0kty$b5`(3+<kM?ita%a=
zIjMk9JLdO02P$SV-@J^s<?j}_As4bZ<3M5E3owdN3>9fBuMAmTKfs%F#d6S!@ROE5
zFS6Ra3AwYOL|R)2V@_GO?2E&d7LE702MV5+d=_z83i$E$ff_$)<;PjpE5WBItEzjD
z5b@k)^9#4COq7NdOJT5f1da^O?bug1bI+nq6sTY3DVp(g^{(sZ_effSw`hzgy|Qfq
zVKM~|qmG0u#fw(xuE^W^5tu3oe<c)aNSFmoLA6s+rimz`pdKDMZZ(j%ByRu&YT?s3
z_4^uV%O-^Uc9sfyDG)UuXa1x@ZKQ=3a@c^cfX`k}aMLMl0lF{QYOW%_4a4J{Q4)v}
zaKVi(W#0vC`Y$ZHhxPgCw^k1UoINwrx;t)47wTZhaRPtCTk62><ztq=iI2X!_nH+N
zO8IwCA(pQE)(@{eKd!!aj3$zqy@9u`jBsNU3tQ^AsxnMC#*HHEw1^|yy)=Gh>ZxJ2
z<V0)z;Y&OWGl806yZf^smwiy;h<wx&1M`rrNO9-~a#x_L6UQY9MEV<e(*{_{;lS}3
zuDTAP2tL}!T2zi~)xeTmXs_D*WHoxvCA>87NGO+q?L$r3i!VT1?M$%@eOm*#%Hf`>
z<5&~-@L2r5<xt2578>GS2=|y7ku)2>Mv%V(`T->7$4GR?{q$!|NOYP9<Cg=+IYaxp
z3ZVEh!gHnMrZX(_E?$_-Ut2!ap9oo~*z8XTw0K5@4lPHYXP2o`KymNn;vImhMICG4
zf>XytE?Z34r;N16K3?4)dd1v_-4TfYAu{->9TIH9fsgE@Xw*s=BFE{#XgqPT4dvo|
zT3<54$M;=#As*(LDkf7!GCWglDJQ&S$MD#%G*srPz-x_#-fAKkPX?vL?%Oc<UCPrA
z!XEeKsAG?LR7jR?bJET_Z+OY(AyieP`6Vata-(uG#GNlO7h?%?n7bCUrZoX-net7M
zooFGBk6MUO+mvI$`p!>kWUhn$svdlD4wVie&pXGS#MXHLVrZDj&?$Je4wRK#B9t?Q
zN+Rd-)cuce+43<-INlV^wgp6NC1HW-N<EI&5;1{rcP%cIuaqbV9})1;l+N9M;=)vj
zFB6~mW54X(7AylnYvE-p!~ukt9!Zo_#G2%{2MJdNPGUnp9U5(3!Cr<$3Zkg;q7R!8
zffQE_;h=z}Utx=Ho3ltQ;%!~t4vrX=N)lkO8l(jSM-qy(^Xn|e(+^$b$O*0p*{K)s
zFtH#*p&Asdg${rS#ZBZ3uP&}7R!*M9l!26YV;oOHQ_am#B_!m~TSQDALs;m}oSfYo
z5;DY{h)FiAu2T@DVR-wBO!4e-GQ{e-)RTx$Lc{lEtw~UJX6G7zXs*O(ke1TZZOc4+
zOw@O6RM{VmX8CB43wtM*4KZKFlVds*&#j5SN23MF&{~Oy(CB!Oj744xEgUVW#|>Hw
zu5D`NXwUMe{@efD<&NY#@rQp4=6*df|I2QFWk$#<fs<y+CroRc9440Cqwl=Q_lKOq
z2Ur}_QUm&G!MFZWTngi%t~i$p)(xOwenl`zEJ=oa?YB->BZ4ip)kAwMMU+FjVlt1t
zG(-)Lj_qgZF9+LzTZ_7m-fcVZu7+?yJT)?@9eS{$4y=4QO{|7g={f7Wcqn|<K{SD`
zh4WXzylUe5dGpnFkRu(>6yc_1L^%!J0HBh{ONpt@i<YAJ*Mi9CRfq?cf2e}ZUU1$i
z2zJ7a_aIXXWdmb`Iwa8cFWw1voWIce9;Ez@s*0loe6Z}-c!vA|RSzbI$&hS`wHg8S
zEqC>JBN+_kFL9jS`>v)z(h4!2=b;7|z%HGFY}jBiGunoI*UM($kEFPJX03}KkM~`V
ze5A-(|I`PR2P;oe`6y7ftuN|Oz+wCen)3DeH4Z4dIqmv`)3G-nBkN|u`Lboj)Y+R{
z&pT^M0~DQwkA{Z*nFVcd)nqYhy1HnMA9vD<IDrn%yyJ|fK8#sQlx#vA5#Z~QtTGW_
z1JAK!0qkB?;n*YJZl4{S+;`@WX#<yDu7w}X2$l}jZ$~+H00+la9v``Slo1ATkF<mC
z-u-0cG;%6$EaBnR@1=b$yZC{pN;V~<9)G=JBTr_sANrG9*PMZSXG4()Qu#L>m8fV1
z!P89`7-wWBLm`^dFN!7ZGE`x=ld2wu6}ZYm=q)`?*UZ1TZi}tzGed!XxqTY$E3?!i
zhRYUj(X2kf?FgR%t9Q^@wX&IVModCiCc;?hus@)S_L_-;_;LJ}v*y;_+M(_C?~(5D
zY3kU{-)o=d9zlWZnu0@(BU+B*-ZFFLSx+sxo5Z+%3|eV%b{aX$CsQ>jvW3ecwT6Ej
z{rVEw$-p5*j5*R(9F`KS|5~)+gCv20_#Y=8MjZUwWkgU#--QZ7KO9ADn?^*NEPYpm
z(eIa=RyE#MI%uFk8_jz7&>Y|s<hUOT$6$3<-T%Ybdqy?2h26hvuT4mY6at|qKqU0g
zs~Cz%Q4ETTJpv*qVo;=5FbPN#H537R02Qn!3JUg6RO}HIQBfnJqQ??N1&>F$`@H}6
z-f_qMbU!l&BkaAidDeV>bI$K&s2H^rJY9G^wte!>oawjzikL&#fPHU)%ls^f9>Kze
zSV&@6J93@yg@!1XVQg4vfI7S5?O5)n4(1FuFQSPF5u=U_*bE$6Va{^FnOK|C`7V}b
zhloXNH!GZvu_HvV99tIdCV!l5*+it{*ydJT3lld_F85@eiTN#et|P;X#V9}QZtUV<
z;%ik%G;=lQ(FJsK3x>cVzQ0E!?k*!S8O{m;amNuucgF-Vohv69bAd7%X$(UQm_B<{
zC+j162yb(*sN&E{oPoPV-8ykdCvk&q&&5=F#}yo4%~lQfFAvi<K_L+Fzjl|H3P|N_
zg=Yjs;XdyJ1Be|i{w3}zvy3@&>~Tx#{UZx+o;iLPAXYsa!JH5@^lHkDtxn<ygyrox
zFipE-g}gm$wDVw$n-D#h`7*%o$9JP6c!TneX|KhHlR$~(iqy=P2}^E5HZxxXGLo+$
zGwx2~)QZLnZWVepc%(e;u$yT%*E;_~&Z;EbwINbuhr^FIGfP;$8NUIm9*`y=snUOS
zLnt$$1U%pIc|lL9dDeH!txhX|;iC9vtF1nnJ=N3WayABMWN)pSd?*2}vCLL4T)*~V
z$<%vM#`D*D8wpU7eXck}@4|(L>XkqtK}h6VG-OVULyA?wnk!d#tWZr$x#3WHkS&zn
z=rC@S7EP{A%&fceM!m2pb*N7fZk#q$5qV_k-X-6RBI*>R-bUf<y^_fdJNhbK??{-R
ze{lZ#SVrF>MIlBO<xYPydvVR#$)zTxh4)%g64tES`Fh5}Y=>ogy!ZSZtj(Q$=3s`~
zjh#zt$noRSC5lj=vu|r+8d4Ub=pOOTIqTM)eXt`}zidv^%D&O18JU%BX@^Y9#32-Z
zi3A~gRPfYD&&1jL>sFnbyYs|qM)dMIeS2rWKQwJ!S#536nVm!bN3m_cRI)2#_acXP
zYpd7dJ}8snx_OF(qVER}BtWuj&H2ozX2sB_l>S|h;4iy#O_g(8s|MxfyLXL!ozZkA
zQEslwc=#qD^>leenQs484eoQ>!iEXQcVyWN44-Y5n7=#Ecr|NbQFe;OQl)v-@QS&c
zLmXC~&iM3C%G~1T^Es_vkJ3kOuXp8iw$`3`+S19utE4lY%?tck)%c0jd^czLdaqh}
z+25zmrr#Jp`sVQLqNtU7uN$PVt-4U@xb{Rv{t^3|=ZH=}+L9}8BsYq;Jp6Goanro)
z{^S?$hr78|zn3+-{Oyu`Yd@URuHA8O>xX?s)>|CzD5kicogZ4G&^%AFypcQTrKTO-
zduniN-rVi7pr7xWn@;@m{#e_mfBsh4x=0B&e1%+}Y=;%9IPg_~i1$-=Eaco$%$-nG
zA=ro7IZJQAUkaV{&i!jg)ReF-!cN^e){7_bis$}Nh`)uUP1yt~I%N*GIGxa^8{~ZW
z_Gs1k@3H^9pyCxnRD2*Cp+wRO4Af!}*b_p?uP9&`arB%cJ3zui8TA7PWr;)5)@2r$
zd>F^tGIC`EeF6H+G923F%BaB@qoTnEvs4)j1}J+#2>pA2zP<<;9h2%EFOeE7(8`%Q
zF<S6)Kclv%dqTjM(r6<FK0#DKJ-}hGgb{*B>{Z#*i89q{Lby&&tLEU1`9l5KYDT;T
z(6^}r6s3oZIMoL5ho$6jVTFJJ^-L8&AJXLHR1V${Qzz%uZ9}A3)KX*!G6R!;)#42e
z1q~B?uV0T{_q8f3T8K$OD8(6rJ;$WjC|!W?)z(xRf(2;Fsm=f=P<4<awZJg`9<Dq=
zO|YQVgDf%Ln^P$0s*oG!a^T$RB3|VT86(mI885pvh_j<XVz#FqnJv^$7i^y@|GH;*
zYE!_YQqQgNYMik&gt$m8Gs#M}bBuh6DVZ`$u~y%NrZ+2CETeR5^$ty)j69KX8SR`L
zVq}Lw0_`$=j}o<QkD&ysBMj4}Oy5Wud9_v^w+`6)utW40iBM^~n0_#^Y3j1*`@5c0
zJ0qM93Wh}tV!LNY5K^)Sk5!bfY%<gA`(i<pnd)(HR+8rqLQ#Q{Uj&ZXKI2!U=91As
z2IJAw=btZ>O+0Z(s?QmoOl>F04<t_4vl_cS?QQg<b59<Yx>U`Y|Hc>?90OIq&m9%x
zWBNNAnA4}m97{Ci9pCS<e8E|>@w%l&!nvB(n{zxpkEQtDe0+yNoRxyiN_9Wjq~3RB
z&)Sh=%jevD(s%C1Y1P)_>HoJE^!D+LoSXlT7qmELV9;!|y=U70dO=6e9&R*Ft^Yq>
z(Ei&evN2_ioCPL$3O;6Ei&^wKSbTsded*5s&kI_6>NQr7ooS95-xA{Jpm)RQ&BZUW
z>G~#`1)K0wwU5szExa^B9e<`)KQQ6+L(EaVfF?7`1*Z+~sEU>zk&+5QJy(d#Ms?2_
zyT`iuu_w#sU<KLd$F2yroh)BA^_AIwWYL|I+j4Hbvidc4O&FY+_hW~AL!Z&9kl0g|
z<F&W2g6yByMcYnQHyukv#y)|BKZl{<L)4AsMK{e2TC!0Qu&jH0%ft(}<NsBV{dVeG
z<K3ZXTXT;~w)?YXSI*u|H29XgY+3vxm$S%+gCXk?7px$A)W{Aa_h-=3aC>5Jl(@P#
zTHa23T?SCkIw?N<f?HqQ+563hTph<c_8KWU7j}O-kTh^qcH_`LeYX}yJEaK<iljTM
z`s<J3vINM7-)4_`o_}23@ZNQI;uJle4zr9@e^~D8+qch1iiQK2E7pQTC(pERUhi>k
z-UQ|i+b^`Mw==YffqP$nd3No|v{j;%GtbBFv{k%0^f~|6uNS~D_d})gxK8fdANAR%
zz4Nc#XUcdN;!RuTF7ll7NHuZ5`C8Guc@r)f??}6zRk_}|LKorQS{>v9udYpN{PCsQ
z(&-i3{%6w3jhVbor-ipdE#?~?7`ens%Qx6R&}#O{_#URCFDHGhUv8BW=df@tZP~f&
z9Z<FR>Gl=Bit^rk^*YeFee)~x#asHe#C{iiKQgzw%>TylgztY&MZ6ujK6L(${e-df
zvmdXm7LtaR`#r9sIIsF^w}zcQ>00?SZp|nE`Gg6z`WDJJq$AT(=g&Ma>qePyQBF<R
zk3X#WaT~oi;K}K<+FjSiuId(;ZJ2sZzBftF;nUvO+r&hnv00W>w|WhQ9LZ@SjjP2U
zmSh6|%DkqoEDoA%dN9FAENgAB7!7wkoe;h9kY;i5O$7I|LQf<z9Qfm`xg3i+O64tH
zSj?zhuigzeUt0f+Uz+6rA9}$YUnn$6Oq1fGfj5<+T_Z*yLxo^HyetrUjzJ}hG4jW0
z8y$UBWgaifd9vC5lLX;%poc8@(vQHpmw_ikoVL}2XQvUo61l{M<v`dcGi~*lm{~6?
zjthjknU1069_<kq!`LK@f2aU6TLHnQAhbYcKFGd&57_D0WS#l8mmsV$aM~DP)3DtP
zB&m4Aw#=uqEw|->CKa&b|EG~S`pKu|PCl;yo>)PEr^52mOLMXoc8`M7y=KdLEHQv1
z4Y&E45{OIeNs8cewlL@9N<EK~te4=Z*F=^E*{L@3Az++G@Gm*zF}DCC5qV1xMXm`|
z8}#Sv%>HTwKcnEzE4hcP%n$(Suxo2lacHEWmoBUXWO%ckYTdn_6fHG733h&w^=EPn
z1g3R#yZLp1`J?Et3M*GbOeCCE`sNsf*^*FDu3R}QxnygO^A+20I}u9PM%JVhP3j4{
zLXfvqZXS3E*d;;3T?7*as`gDi*ND1l5ML~DOpOG2SwU$?XDfE-M7-57!X5Zakw6tn
zS3yrf^a~%vS8PdFjBj_9(y<{QQwUCU5>3_6R5}4KVX?K?0TX?BkY<{U{8|mkX_GA_
zVk;#a(w1ZAa1$jg#7<^fWOiK9MHSpHKyI1PO_gY57TdHN{w)D5_Si10>VO_*frW$p
z2p`jYB~nXC<w7I)Ns0ED#QCZqZx-UEo=#U|_!z}ZFoh{WT+~>JRh*lYZm9zJtB@(#
zkQ$1j5-u4#-h@Moxzj8($gdm}C&0q~rkhA6_-Y|TgklOcDwY?DL+F^3EP~*OnOc7$
z1^%da=6dCqoeV9)257$sRUCkP6^cr+;D1aAGBOE?S#S?ryEcwpttADRZ%%~zat!#K
z-8l88i$a6r{*WtT@YQgl9mPd4CH(P>(OIO!x`nl+LPrV3N{u;o5nCx@A*w|E*cM_`
zFtjcGF!E7Y{8WgVDtv|xqcsr_Uzq>L4||k=w`8Y}3U1==ws8kOYDg`Gn7!3Rj2!Zs
z{=IqO+^>j<U^?b)HP%iZ3MbG7Q*n7P?&MB-9N5EWyZ#r@w44=1uo9z{S+zbAD3}{P
z{T}oMHqC;aM4^Jsrs5?COM+gOiO4#{jtgAG)3GD$vQsEug4q3p6Hh`j2?diFEHM2;
zgD@085D%{Fnc1rmYxVg08~qT`%y5@18s0gj=sKe^Yw@f2gXW@WJ_ngw2mb7Y@1)rC
zgQ0cM-=Ar{7TO89uF}eJ6C-ye#a4v4Nny>^qCbSKCRp<Ob%ZKd;;03fm=h>Kcq*h5
z&v4UViioJCZIhGAO(2sY(tR=Y2qrrIYecaXu#T9;aj{MjOns-Z#Y32NX-{={6d#1T
ziU30ezr8GF3LDpl6U2@nP=fd(C?;bSC_vB?ETK#}vo!2W7L%<6Tm{RG16<Y25e49j
z01>Ms(J2bBb{}2j&2>`kxuY?eaSj}7%zEmmLIvV@2AGH$wiq)}%pgfH(-}ES!<^#&
z!XHIy%jha?y|We?s358XV@mi%i1Ng!$u8_JLCitp7yyRf1<J0|uFZo25o02O*&mNU
z6?9Z1m^zl5jeY~r3GCs_keUb}RugNEMX}|fcOD~{Z_iyBfvU+45~7dJ{IM_Cu@iVn
z&_Lxx6ktC>ks=Z<1ohTIHx12R*k*L@^dDXG85wnUIAKUZ!jxa40Mr0OdlfLp?8c7u
z_QEAR4J4N^^k6fC19&0?)grMK&{vU5RH@w68|`VZWN!Y*+a>QCvDF3|v=i{u&@+!%
zcoRx*Fp_T|I55YRHV#ZxRRUp(nG`FdC67obv*TiJ_`zo7QQl){14wPxV$umy`{N=V
zM4}-YD*OgmD)2{usX%l?K~OVbT5%8qovM%)0VSxn5}N;~Jq1<$XQdBz&>#-9NFO0Q
zvxa*kA-q8eeL2Kt!QoydpDQ%QE2<9MyKJm!<)}OxMfq$R43q{_qtMbJfF%U8g`AUI
zyWYP2hEGomw1FILL{ecWyB%@V6cm+CTO0^@LXtpK<tADtq;#9pj$<-umn6(mkv}qw
z0OL?|#r73LaEK%#r=jEVwE-Z`QGrgKIyvPk^jE{jnwHV`dsil)vr@;ABZZ`8$$M7R
zA?5<)VKPeBKz9(vR-oA@(SLI&90_Xf&nVXbCo#)b3Eh;Cuw>_}lbE$uSyKrxe?D8Z
zcoR3)T7Ya<P=gWF&j^y@kufdP9~_~-hA%5l2oxyeA+jm@h_?=lDzbJ{7;*p8E#p3_
zBA(Ahd}t7aTrW!7{gDRw71eYlpgw6aR#rZ{0Z{=$o(q4Snqe$lVsm(^l(HLgkw6W!
zP;bV(^YI5LBj4Z*?g?MOT2UHdr@3WGLkTmeTrbo|kw5<yB6*4o570v$R-zin6E0DR
zr|%K(YVg|gU}{Qh8{J>DSAQv*YBPTGvM`_bdb+W6f_UCui%ga=?SzX0<>~bhMQCQU
zVT70A$WR<Z+U+zK4Fpxet&lAgJ@tY^yU-^Bu(Wmi?E&dl{YdKu#FTdM8p#rK<JZ55
zp#!*>w34Z|w8vH{F}vv^h(#&dDCu^hbkC#60Vy=b{Aj9~OcCl)zasFk%2WknUIJ6G
z|EsXlH9KcB=D}>Xhz>TZI>{&Gi?QyMYZ{QW6-(}UfZ4(6bGKokem6@=h!(NHWJqD3
z8Mf*XRq>?ztu$clasN+FpOuEls<4>6eo4UDJ)|wrGS?(|rGMaI;Hc?4_ioma<5M%K
zHj@Lb_B)Ih(j~}-T*wQDkEM&3?nS&!k@B+<ciwIbJY97uqK~PBbYi5tVs<muJ*5FR
z{kea+^kFy-Q)&?LYbAn<ql*1`wC7Ce1kCWP+dJ?(7op7Pbpb(t&4#lcVpvKHPr1pM
zGiCiXq<<^PlSb?Is=UB?Y%1N!nSol0VoC1E%84)eI$Ne1;WTV|RRz5j*52x7Y4jz!
z;IyTPa!AYF`g^LksBYy(a^AFuj$;43Y=pLSrFcsA$}ir|kG#w7^Gqd2Hig<Z-1ky8
z=1r)5)%bnwy{5}YPnE4kQ-ku2@wyq;?B`6pmO47y*iZyaO);|g_EKBdXaoD*=(w?&
zAWk=$rT^CJlSkGTmgi7|%`0d*y!vgWT)?xPyVlB%BfKqcNpN1{@M`eQx)U~;``#8d
zBrqEjO01|G^Ig*m-aa}7{;u7c$8?<f>P@DV`S?+o)0!aL=iB^cSld9~&4t?*mOCoK
z5B%{A?s_-3!1>h0GS3#T&HIK`pFFQ$b$F8KdO6tfZvAkF)$q{Q_t!3&rrR$RXRhu@
z98PO-xt!rKq3c8D{RtgbA0EbjROj1|PFP5s`B8hv?f!EQt?S39olfVMnDsF}s{ee7
zm^nPFiDx@=ZCLH6CztGgA}I`8$L*}oMZptp#}4bSVJBs{J<b0-V8GvF>|7l7@k;Nw
z)wwF9cQ==q^clO&7Hd9aWFhX_AXDikc3AKscK_y6Z#P2=y_Vs*%#UMVFT8p@oPYmw
zl82|aC_k+Ydt(1~tC~=h>AuQUM;~`}s`|>fzwmY~;AjqK6}ZixDd3HM)!t!=SGHQq
zVO_V|VKuVs$XDDcZ@sQ(QJ0PC_6BBM@>|#FH1o3Ey-J?V>dumFUcuWbk2!NzE#}{f
zormjniQc#5${hCN!F7*UXY-XcsjJ-|O<B8%{jk{GCppp5UUKYg(lKQLY3kEpT>i%O
zpIIX*eEKy%N!O3mJ$+K9^SjDyeQV>2-Cvt1id9QoyBPUdU1Hg|UxP`sumnjxI8J+&
zwxpHov5M=vBqX;Wl+9Ec`eQ*;<=ott>(0HZFYXYx-T84UW^&qEkT72L2mZVDFF)Ef
z_i(F!2dKd&eZMa^a4H^cJhAcNgLCWd<IJMk-Yoe6tPGh(+xIW{4Cb32yiX-ii9`ds
zJs&Ud$3pxZ>`m>k>T5Goo|Oy7%+V3Ez6a1T11KJ|g}R$s;0p}-_Dnl}TXMCfn+qTD
zG_kNz*}Gbq*x{L$cHT^HSWV_zI?^qeB);+ayF?qN1&8NO<$HQtI662VAr)|3oh`}R
z?N0#DFZ4l2LvMRaZ<_@@Ds5;n^MRd_`YLxa*T5~D5}n!6FDKH+jVX?~om~g?23@=B
zG@S*-6^79ZO0>#|A~UNAB_$yR1)C{evE}9m#GR!Ce8y1w4rKz#5*L(Qrxjx_NblwG
zshJ%elt`<-$+}1N{iXVP_-V@nltPF@XLswAoKOnY`t(6QFBDg1<{qAGQAnwm(|u-8
zPH~pwir97*$`W@}C<p#YemcpZoN)N4ad@2qK7NYTq$IQ}m4z_|R`J6Lvus{(CN}lu
z0U=TEsHta$Ds@zNZ7V^LsF?8O=)yK*`+3PFnV}&?Oz$VLbs;ur%*p<i6))~w{2#=2
zi}mzN7xF&b1sfz4+$n`LhF@X7@Kx707B|Ri+PI=auFp29ehqlut(*|Nb(9KHJvY!~
zLjQPW2N7FVcY?rN2`UW?7YX$XdTQll`*eXC-5L+V^xdXPvAW-O8cMb+$8y{(BWaxm
zu0|TUCoxDJs&_0)9fCMyVH1!Kp;t)Y4hU{j$*rP3eV=AU7fzrQ+#{QA5UKI(4}uPk
z;|E%ozFWFt34xA{8F<rvK^Mt(4_1onVkEGpu>bWyDGZ(xlPxxgLhC&fuz)}4*VjRH
z>{kp>tqYZ5?k=<z8P2mA^Nd=n+C%U@6ize*5=}?}y~I>#OV`UrQ_X>QWU1?rqJzpy
z(KZ>l3~NI4$ITyTLy7hjj9E*JW5~(JqG|i}*vB+)JmIm%P)c5n3X-z3!Ad;utP<**
z`)LSxL3uwyW{E{=GS17RpwLpOLW0q5Nf*wIW)X#Bg!5&5;|)T&w|${XOSMZ-h3cUt
zAgsJ;p71(quB3I4ZKq?cDuD^YuH)tlM8ch%fYo6Xu3vjsn{y;4jhWptd6xITh^=K7
z#sF&7I7YHyKV)1Gq9p%9P9$`aD1<oUe@E_hIkoC4YMi9s<!3FMOFMxnZDs)~Xa(QV
znN$x*Cbp`-<E+=x!XVd(69R1dRcMK^Q~=1<)oXgGE<qY<{dl2s8$$R~q6-b&HGN7a
ziZc?05m1E?B}5xaQlMQt4UjJF41->5Jz6fwOQ8zYzoArj;BAtXop9+2k@TS11L0!8
zh}4tnTZn-H#YepZ5G*t|sU!wLEF*a8w4ELfilI=_N7I%Nl#zUDs)5;_KWzO)(c%z-
zaZrt#f^)`NWm@~C5qdOewlmq+oh>D&sFifS8sP?ZKy2wvY~}=3^T|g;mBHqmB7Lf|
z5cj-OM(>v9v3ol7<F$3bhy$f7WJkZ5$Vdcfus2(1Fi(jXM!M>=*x{5#A|rOV8j{Bz
z>7VJ|XBuQv@?phdoi+?&v8CflEVdA`O;FY?ZQ-+i89`5Vkfz?ua1$bgV5Kx~t5W~$
zt5UrgO1S;ma_G+t!L1fS)_@XdJa%#LQ9Yq%t7$l89D@CRD<d^@YnGAT6v&Amr25?V
zFF-7|gYBL?#oTW$Z`C1SnE;%jc>^wkB{Llo11h6~Ag=@Q{!$$MrZvxz2I*qp=O|i)
zh&4(^yLg`Rz0g}arNrVx8g@Jj@pjb8EK|FYmT!QhCxKSZ9DPAELW&na+EAK}Q)CD^
z`<pFm_;1{-b9Pvw30zwt#!u~J<BdcD*~^&SjQNi#`X^=Qqtsq*gpiVS4JJ|~vPt6!
z9h7J_Hi_8kTRHc)tyaRyk6I`>*VMCIP-0LhL@;fU67-nhBEwYdI`Hs9b(=}*2sDoj
zAp|H2h|PtGt^?Rh=^kQLqFrl7zxic?yF6`!cw$W|X~b^AN!Ekj8NP~=)=-Q+H4xTU
z*Qv>^b_!~{SoWxWaEiSI89V+_&sHNn7_CCs>6}SyC&2R)-!^C$Z+B{x!N$W<($EL{
z(=kGHH84nXd~fTYfK_)Z<SdmIXVDx&^a(9zVp4bDm{3w)*TtHw3@e^`920Ekeee>a
z&Z)ae7+GV|PcFF+8j|-^dP*XJe$-aA`y9msy&En_d7gA!PhY%q$|<4mpQF-r9@co}
zB?e!(9SgUH73`>duvitZz8FlqjfigJFaR4Ds{_|k2~n(s4q0v<VjkJR-&9>lh?Ugv
zwl%~AC(c3xR5D{d4jMq{fEHn{`9@la&6t`jX_ZlrVTXqm!sF?ZlNM?r`kD4o$izq+
zu@DON9&%D7x99_HD30GzmXAjrT-5WNXjHPR22k3?sN*Ri7%M|?q6QVWM@q=w0HRgH
z7S?Q_Kh#lc*ghqJ&&TYYic`dYBa#IChkty81WLIdLMF5jEI7!Ka_Mp(o!Zk#C7S}5
z<46f$eyWC$N>N|1QAl0%$GJDxrKp8oIstVb9T+!90VW{?7YQB_H%Mz)%`&HZTV#f*
z2V4<RA1E>PYsvp2v`Oe7d<h~@2UtwE{wVmw5m_7cL(kXm9Vb$~Z>*P7Z`;#X?#MBq
zBybeRr=2-f>*AH+mqKeb#oX3d`ly%MecQ{cN&F7Sw45Zz%KO&Y`=}o?b_Yfd9HRQB
ze5Yp{${9m_KhWmeA5(XjKYy6-b9(Nq&pB)UcE4*NJagXC;rGv&-CmZXc0I=>`TKW2
zyLV^XC6hm&K6cM{X71PHLC)Fy74w~GZ+$LInvr=@;x@rl*kL|t#;T2@=Lg@PX*>Jw
z_SfK~3oj^5zFpS$OU5h7%C}E``sttaT=g-0_ba>U)4Oh3j>uO{0WbIYv^2$jKeB!P
zvw<7u&TKOHc+7s{y!nrOhzXp!<?AQ@-CFwd;-nK9$A0a8KAy4eKszh*_!JUI+wRkM
z`b1{y{b!#tOl0fgRQu1q+W6`IzV+)qT^c<fxajZYbIx6DS*W|}w&+FL=fDB#Un6Ip
z?j1=rrjm@XmDRr+hjvaed^_oK&IRlIkrSIPzGi*?(Yk)(;HtNQ&*ooVpMK5a?=y2I
ze%!lg{nZtFhGt`RE3^Jy_gBudAKz>KJ$w7lkG+@A|IE8~>F?hg$5Kx}dm+C2Yp`*@
z)!((7e!cja^Wya9-(8c;M--R+za&i`AMqVuJRITXH#F(f*!5+Xe?4E8dve*PZFp(O
zwY=NcEMK>+hb5WlST4%Xbir?+5LV{;W*u9->0{H%zkKs|7O$ZcZ#1pTc)x7Z;kFI@
zI{D=Lvb#!C2Tkt6+Vx|jdGky#6l7yr+a|BNf_wU~1qD9Cq|)N-LZ86wT7VazmdmnF
zzoc)kfFC)lG3B=$<c4^lC&W2nxtrEBVW5JMiyiy{HtcFE5VuKN-B(_+U*)MWI%bmJ
z8UpFG&Er4vmgcSx%*_T`V5eDQsI=Z!TO3Ttb52;fTUUIwqj;-&Gp~QuMI{|bz^up|
zL<r-?(n*@)vs3cwdI(F$vflfSugPl4b4(~Zlxk(dH#QX5(>ZH-cq^(j-PpvA0m2UF
zX1of?F!A#?Z$sRfSxE<w<L#Cn`mm?ivYHFX5`bz86JKI9CYJ58`p22%-LEa}djcYC
zh&TMiMElI*AwUAgQA@M>@X*6c<d$Q#VKi%-dTOBrc|DvR(iSTmEn`1`x!Le)0<j=v
z<MT}M=xaCOTehJtp_;SJQQ`LFCHNsRCTWq$MO&8JuQ|eJ8|Rf_h^;n+NR^sz7Ng!0
z?{$Ytw}(J06|hl2Lk#BwFoEsoSh^Vl1lzgLN&yEHldUitoC<g<>FW+5g;iCBo~VCX
z097z<%2Ae2^v}WKz$f|hO*sHO01jFV&H`R4)SI>g0%*m-%!WvGJFt~j%toronwq%7
zW@`)06eZp`AsWzFh={8`erI#lMk$YhodP;25d(FlnSBk1V+Za0y%pF;M4UBMfK&5}
zZueyk*fEUYbrtg-1NwD>pMO=#Ve1izX}JnINh_(M8c$KRw@yAVqY?p0&P1x0Duwc3
zm!Z&d=P*{Wu)|6S{oa9<hu5}uRYtx;sG`#Nq;jAHUW#Q&hckB`2Ag^~P!OQC-8L<X
zkPx{U<7>@0z>$Njdjo(1Iv%7KhM|k+R{5J&1Rp>gq~kk;dB9KzT>y$Gmxb;$_rm#d
z)rmaKE*q@j{4hsO138nSq+!qbH0%Rajp+RM%Bt{Uj8fX$p@95%^<K0L3;zbQ$Du6R
z#NHP4f{tx#hm6j$bwlW$Cu5zKpsrwst-?7_X`_1R+FOYdTU?#Q;Spa`Zk-NoWsw9a
z=}r=~v4GL~WflfMVWdnm4X&P%<fL8@AcCV|XvC?R7pm!z9`xAv7>OEdECLp4)LU@i
zhi6XRAf~=9sg@z<Ivmdwz~8b(oAli<VDZ;Wr1yJhTw~S0^=R%A^g^MtKnE?~GEt#D
zi-rcQK~r`h3mOecdMHadj><aYHVpdWgczurf^pvXill8<UFR@UnOa*X(Ztgy5r!D8
zF$&;`XPo;2Pu5UaiX(vnY!AU3(9PRhZ9b_8Yv2f(dwNCEX=GvR#CE%BkrhT>Qe-q7
z9aJ-Y=W!ZN!t1XZ+-Qz}dm9xf9nGG=P2r6{8iiyH;-yQ$6me^fXW09LO_OITPeZdA
zNLn&tsXXqlg&#GbE*ko1lX|5GH@qTz2|+)s1D0AF3z4-iYW+Ikz&8C@L3jgaep$5=
z@m1{qP`~1Sk%_G!kt|Xr63}98H0%!9IOyv@quYxRQ9%Vuf*>kxW)iYLlu)#J0WuR9
zD#lSyDGcJ+vz1t9(t!anM|sklI<jm^^<3ldaK3W+qRK)OwG~-(s9F_ht=&SUoype&
zz4!Su=78HL5gRpPFKS||7jGzq)!FE}`C|3zkflyOGp`0(*9Q?L5LJN$GhY^mfakQ`
z=!qi=7okGb9fVsBCRvJ3x(egt%K|MF=(z%@tg=0yc95-&(Lgt%F3?>W)8gaF5}>X(
zkoC#PqSrj)gJVRoP0bP+LPO3f;EwYatBirGc8`J5RUq*+pTi|8Rt(<2P(73@6i(~f
zN)#Z=W#;yr%IrKWbkGq~<-1unvy)NXlB#+y)OQ41UO+@Vo?h4xsI@aw?Ev$9h_^h0
zbcKmKCBac=BxifUt1bkUpvK}w=1UrHw)6NRKlRdtOc-vXI%^<CNlFs;X~)e+1%V3a
zTZ1q(2I~nNw@yd;yCpqK;|`ugjSu-goD2(AgDqbGSF*U52V6OesY-VrbusIzb%clC
ztC|00P36r-za2oYa;=RaIKYg>eEPoJihQj9QMG_8x>B3X99&x7+JI&>c$)|=1?ueV
zMeY-eZ4aLTJMQu7&nRy_^nM#Y5hvsk8$=PI?ORozR0(uewpW~<WL6J+q>!rF@$YHq
zABdg^y%4C2X5R3s7Qz4#_738Xw~QmdhORe$HP{t!P&2sHE+tfT)5gW20;8xEMh!Dw
z(k~mM@|Q>uE!-fAXrpy{*A30Iff(&d)xpt+V7&*L(YepB5^Q2Yqk3p106++%#Kr^I
zNGffWoX3)LLU!2r+KTwR?ps7X$N|$aLHUhS1f-c|UQKkz2uyKo@)?_d1EHw`T5Dzz
zn4Blyeea6EA&I*6b?l8iV{DF{os0x&!z^FhPrGmDbeN<+01j(A*ell#2!M%A*uopk
zP08rPS;Qh%xD7|R_0&u_bAk`;vZV*?)|qoF9kdG6SCNKo{#04MjMYamah)mU`m0d3
zViEP>xB+Ds*I$Pyk2uczk+fkJwzsjK9dJD?>xiow3DEMkN|J{8L^2bJ%tUW}KX$qm
zoi-1n0FlCzHs=<o8rGr@zFPc~w&p_7c`GST(|d}+nUMDNFvj7&obCM52w8C(I<2v@
z7Ef}qH5#>z*dB*?sX*O1ba%{ytMY};Qs}Jc@z)ko0e@Occv4|ufC}Bc5$%yL3=oGV
zPfL89j!gR!T5R6^OwdPUqCezffwH+udx;b(z8Z&aH-bD}+}O+1N^Qu~389MympEe5
zduyYq3UyOCaC;wIyS*swUJIvw^7#!*LNlX$mFC2c@KCEH;hgQfMAXsC)2wVf>U4OY
zV*tdd;I;#>b^$UsYhv^s$X5B;3!QzH_pf@o1_;r$6C{7v-80CKG^wlIm<!Cross;`
zX+H}0uc6QS2^;{lsAX$gc8LhkMz}e`*e>od0k7Qo+<`zp3x4Mf)-+c}4U@<UcJG<W
zn0MhMQK|A>rSsX!pi3b9-AhLYSks?V>FHD$Ru^pm@dCq_HT&g<fos~1N-aCVp~xmE
zBGy%6T9UFW%CG1r#VKttehdg7XHGAvuo2dcYydXe%4^b;m36Ny=VTo`3#9J~#-c25
z5a0+XD%(++lD~4wRpW%Hw;m^u4y=aU$nY_V87MRS6}RinvGGcd)!Wi{?9GQOS+SYI
zcfcz4?ONAPfrpTOXRvbL`*2sFWl}zey4!ss%_?t>^u1dVj7~WSR+bdT7Vfihc!#CY
zhPoC>^Sn1L8l1wa>rW~8o(KM-+sS`|^LbcN)6TW7r3s6k7+QTgx;DqSc+=y1@OAe#
zEBiI=kF?52uUOxVb9e>2Njk7><GG&PdnVFn^|EVkE&m=)|8^<MxIIh1M8@$|P2wim
zecv;8_|xAR+wLvfXr}S|GbitN{+iQzs9cdDF5dpBKmXOsPX;BH0w1AiUisjqugBNw
zDj$`+e*?G&Hq9Q+4DVU>s<zl~`>J~Wrk19>mYj8WMoX9B$8))na;?3ru`VkmcT>pc
zoGI-R!}f3chgZKJT^DFw=F(c;;=x&4T<pc)@Wpj?_9*z&yZY<0;;psIJnt6vXBS&V
zmT4pNtj1Qy|CQ%qI6CLW#`bGp^W7p{FK0#=JMiTz)7uIx+Sa_VFSvM38u4Oe_+IFi
zp4{Veey*HT5jcI+sw8Jgu+t>_wZdW7ULOv^&)RRes&=|8kMO;0lpT?hck<ExjD+H6
z%T`W&RPtq?Y~$UHwWE~0>C%4#f7VC(b>|me93Ac1|1bCH==T~JdZu{itc>2pD^Ku&
zB5Lc$eZLIGC}Eo4={ajY+y7?yikC&KY42In*8F?ibu*(mfh`(GI3l3%K;L{Ny%=FP
zi7gm8SwukavPAwvXg7nRlHw9#*|zQ5%C?pOqMd!=_SzaOPr=*Sg}Qx5Idm{K*u1rN
zOX<GiqL!x8R#U6WLrTQc<=FmaB0_g|FD%--rMPTwh2~!G{Ra>G9`!$d@^s+Y^B3Be
zgMDR)Ar%2sLn6tHYD{-GF}!ZD|BYd-C6h=c5fe8MG-?G5HT>jo#6($tcKv3v;9LoR
zN&OlloSxtC_QbCBW+sJvu2v|W3@nC^PRR_}Y_yq?;8nbh9lpkT?!KVMjv<?|7OJ60
zVI%H}zJXUzkGdnIO#ap}AT_tSi^yOY8&L$_DdTX52hS&6<?Wb&{WBzrK&K`?Y{C7F
zYcoUiX0+=WK2%A)ad%H_VFY|In*$<F1Y|N|mV6z!9!3wyO{lPW^;nOypjowEWD_9Q
z`z|w^c%t>){pOiR7u|mH?V!G3kx`GJ;EF!W#3xt7m2KWiwKVEhi$boD+4g$Q+LtzR
z9NBR~WQooL&1AXz4Mz()I?L%^g`El^f3kszd8C3(YX~heH2=pxm2L~EWOGqr?nzmE
zIop4#0^?D&YY?*S6%k4@?^bu=N}Op}aAAU^i^Sp!5PkCn5|m=GM<gSg#!HbP&bL;z
zft_C+B-uTX6p)?EIj^WDV#RnUBH-jmaqM<sXkgHQpbO846k>{HyTS%L0f^L#+$f3=
zl8=sEpyyLaL-V~B2$gtaiJ(hn(~60(b{o`-CxySm_(4{@Kus~fAVQo3!^%zqE?wBQ
z(d_~4WsUpTnGRr(&h8|>T{;J$@F}7W1XZ^JeMgC+i)5@CQB$$XkT3*yOB9M@q~}0G
z_Xj>gJiQ-;;hoY|A&7A~VDgXSoIa?!jaQ^EFK*XbZ5IsC?oxN=X*yRrbt}UVU!}N<
zNM>h;5jn}4r+QJxG(uuvxuR>jdx<29$dHN)@VG)jfq|!;N=@cxNjlQ;L$qWfzO`|@
zi)6JYCu}n-T!dA@_=!4jf^-4O{pKp^AQ(>-bs6xCfCxGdiMtGp)xs{4#eksGz;aj;
zLUq-MghU>OhdOi_Dc>64x-sLwZ@2>XpbG$`IA9Pc-YHqC!`m2DhUt^qIUhk_x-x7M
z{(^2bo;(at;57I~PUb#Pc46>obf;cmGM3UH*zi-T#~Stz!IkjE1^gkFKutnR)Ui18
zAdyhdf+7h+0w|&qoOSYJ8QHsEn}!6oD#G*}`<1djx>_j59n=$a;^@N@I(in#6$PXX
zpE0{p$t`gh$+lagCUg5G9k6KAo=^h6d-aDA%@nus-`@^eGVW4vsc+Qqs*Cn-qH&3M
znSo)6GP=y;wYKBE@q^+n14FF%8<JDiasyLNLnr~iLD|s_H8NK-HKY@I^lw+GLE(=Q
zkl=*(ZAN~(3S{34#VAoLBnF>>*#}%fOqWov<dB?Y7Y2_pL-d^`(xh~u-Y32^Dnbp9
z@i6bbpxV|T4q6!D@h+N2Ao>e569XI-lhI<8a<h1`KBo+Df#95-m2i@P)`85>lbhtK
zk(JkF22YRzoRp*Y#ZPVEr8Q!;Pu1gM$$GkYnSmWhL`5BLG{pSaF-`%N`R8iT0V#F>
z<urEy>@MRKTDx&ZNyiTl4aB9Zp+~%$B9JIdS~=)U2kAeF9#TRohJuI@Ck71~SSZU~
zFkKl7vcGJ{!7aTILP;o<vB7~N!+t5swWGW@9jWV?`ep=*QSu%wikVYo^Q3<ninTa~
zvV-cUEJ#|w!QZ~$)0BAs0Besue%K7)u>mNM+lk(O5JJq}A){lf0w3`Va>Nj#9s4Y@
zIwd0~a!w;ktv<5{!JjLHWvp~W(5@yP^MJ&$wA}}L)YJeKkNrT4nl|?atmRzkU!WAz
zH8QBDfz-&*tya=uMerd6H>}m;N;-(AyyXV1>Mi@ru!Qj?M=8y#z=GA|^N7i(<jUhJ
zR7g&s1ZZT`NG<aAEWmpxWKeSh7k8iccAyF+|GUM~roTha1`8yg`k~V7I%iwPBRLed
z;7mA$O^Fiu!i~3@*;*k!Lo34@two5KRXySdm>6;!wU$Of<22csbJCce5QH1Ay1IXz
zI>tv70v3S1mIttygt0=G>g)f5*gi@qBgKQpJZIrNj!rsz7N#UPEA=a*WIH)8WlW9u
zIJ_a%PgEk>KA?BtsF}NsLPjXzOz+#+jjX22%=`eZb*?Kh_=}XFjtn)$LeXqQ3-B7P
zo`ooc7|~B)Bx6B;5~03ctMqi4BWhVfUpZbKG2yv>ogS`TxRW73$*Fd5*tTc}6yJP(
zNEqs^Q4=|H3W&FA9JuXjaK^KMU9E*N4IPx!D^*@g#Yo@7;~&4Ks-aA}7lRf_Ub+TG
z3APA{454~(u)?BDc#wwRm(!%&Yu_MGTMA<ZGUk7rZz`S7x+g^rasqh9h~zuF!047V
zoEam`46K)ul}f!eK~^^5!VshNQ(2Kd;amQlAz#osY{_qy;pOF!rFvzmn%3H2vT<s7
zao4@al2*X?qO9O|nIGMu@2rx^cc1mwca@~s7RGJam)r&OE`X^X6HBLs+2VXf9cc-c
z#5pT=_1&ujZ$Hf+f5^QTdS6j=)j{I&LG1ZYe@|?-Dn6!kwr23L#%k^HWg(?8!bC<%
zu8_K1x!v;5xw>+tUaQMXN=j9P@deSx<@-OTg9D9-H+u;hBt&P&tT(%xuU{UckWY^f
zd;*q@vabCiJzV$n#k(_CPCM0?Pjl)ry_2z4{d;AJeow8Qq3Gl}^F<$*szaaMm0U@U
zT&Y{g|MmZ;Ap4xAIQCnE`S0P#>F0WD@BB|ewrKmg2mcAS^MAijxO=Xz?aucT>wo`G
zL3Z1c^qBJBA5y3PIvMz~{GRHfiGg2aOH2bo9al)VE{Z$<eDu!fyV5}I$L0_U=|{TZ
zfHcoqD}4Uz&e+w!=iYtW^i`)We!SNG9dQzckdByty0-q$h|>NV*KD(VY!L@dJ&cr1
z)P;vDv~#FJL)%GK|2%p6XGB3;fVb1h$aOV)zeLK`o;~&Ou-`TuOWe5RM*goifz}_k
zNQ4BTTE<ogJ>7&i9535k#?))XR$(K(67>8nR*=1DRW_AGv!bu3>zkz}ciYpJBEkxs
zx9~VV{;t8dU*qGm@FtEL$k#xo&ieh*1vNPY8<98E0K5|5C73FSww@+}I*b=z+l}eV
z3TWFRv+<LMT{Cu2V24p?-#jkIbX(UkxjnnUqYm0B!L2EBzq$hVM`<_#3?43+SmN0H
zwIDp9a3X;(Yk-!`1ylPAZ~QPMab!$CnJ5eO2O++S&GXtfA2@|B8s7Z#RbirEk%w;r
zV=Xk16xpka(%Xv`cS2{K#m~?ptRTBgU-Hja@2A>Du1kya$BK`6=P8AefdZC6W{JT`
zV21^saUe&4gbDOkBPG=drFX-~ca)f?j!X8-;9(kJN;F@ZpiTKN6yb=hG{_4c)MdWX
zhrW%FtU&Am?QKz6d)<~7f|4yX%uqckD0BWhCB2nq<cih&b}%P2ZMoH7UQ<JM4?*WX
zU|!aYZ#pC;d=-&@z9}E*-&(<ee##ktI7r#(3QPisnhlSMf;k$g6Kmyj_V!!3L>DO<
zi2;U6Xv55O#Qf$ny|E6LK%pZSFy2qtPT0A{P6>mgC{xR8lMp;<?(Ug{k=dwYjoe$|
z7E`CN@-I@zP(KNJw2v7jlRYvfzU8ktI9B1BR@^-dBSlC-JEcOCy{-t_bD*c%<<O5x
zVN|h##yc=v_Qz*6Q9Q{}kT?}#__C`-XJvP@85f4LXA_AQ%G|QBa=ht|MUM*yjhS<z
z%xaahCS|AI7Oz-*wq`~t;|U=bubTZkJB@a&Cfi|$LYD(_wp8h=bAFE3N=@tJ{&j_O
z>x%N~{!2wTTUY+L?(MZ~o40k9Y3p_E<yCn*w_lTNDBZc|dd`nITkhQ7+3<69{&nIb
z(XOU<hP{l~sySv=k17W>yB>&FPJdi+M7C?+vfUy6nOUV(>+^_hJLpGQc_eY_A)SQV
zmU(9aMa_^b@kci%tPVV2<sP!CLWupT88%vkoFHj@NgifSDp?z2rjfjHSncqRbz4e$
zWn8o1I(9Xew6^WB9bM6@-lC$pu5#F0LIc{tpuX(1Jl|DE?UJu+_SCh9wZ+2^g5`vO
zWhP1c<pe4woF4?v&kxrcjpiUX>i16Bol?B=_5|X)cLdWpf}zrJMuiD6EUDnOba#G2
z!#xfqHpGoPOt5A%sp4RNX@hSbaa)Pml3tgkZ(~aYiz}o~qyWq*yP{T_C;18nR)gP5
z{U4}6@8pa#LO9Nu`%r0gPmE+2?kdrT1{$!)jA{cST-3{tn*vjTU0{4RRkO{S(`2Tc
z`%pr9;<3+j7l;o)%%v-~2q#%d%C{7o3Cz-7HHW!NLw5aOr95$L?+1qtOeynQ)!0w6
zQBFY=P5JI<-)VxRV4~RpU?+u}54zfR!3f6WpWgF-zXfmWffp@l)tOBruMwsa!KBfI
zL)Z#nk%1IjLaf`W!w^`7r@F+v@ra=+7!i)6b3#4&LNurz5oniC1?U<h5aUry#7KEH
z8>=B{4@+KfZ((A@!ltkDFYY2-F+<u8qFBg<k1|Pciu1eXh?Qan6XV~d$1i(3b!!d3
z=)?D1ICh%jsM<#E-NtW$J^<!Dk@6+S?J!u9W_v^CiB}w9Y7uQsCRsgks?RdMFaVSK
z9hIQ65xcU|GWN_?Ui`G#sYjDH@r4J?C30=UO1gLp6-?s^Z5#!w4h;c`5Ay0=z>&t8
zd|FQD@~v(&3f{1g%qanvublq!262-g)N2Bg>>$%+UL!wL9PMF~`LgHVmu{~<A_##a
z2g1BTEDx;m6s+Q#jYD6|V62Yi(7^cnrnT*~(qc{*$=yc>jY}~d8e*ZMww!5PfLd!-
zo(%a99*w&XEwz(ZpmbCRRYe?kv5hY+{G$X#X)$gppFriTr{AEH2El1IP3k}d1%6*N
zf^Lp-+Zt>^1j62|x4^dRcA?{O(NE*SuqPU*xbRzUjm1ss^C`6}km!clJ|YC8fM<E5
zk*Cqxn0bMsDf$NkE~0jMg_HV|U6=(CPGG?fhG*3l%!40Hmqr{{SXRyFnyJt!i9tAw
zX~4!+f!bc>W1@n$D-pgeQZ{R&FDH112QcnMd{ixKDmo$$O)`HS$I`f=it&kOnDD}C
zNEo?js|q21gRlJ0`sf0`$857wt*;s(7>Ia#u3(Rb1u5N%Ax!h=@KK%dUq0A&8>7e=
zA%O}zcL6|^=*6#ap0~xJnT~Y8l^#LaDrhU(I4+OMJQCmQ4%>PyJheP;;N~i}yL!`q
z$`SO!Q#Z`3?JU^mis{IrZk8y_T;b17C@vNt@fW5A_6oiUDU*1XzFmm5STvkVXz5Mp
zyb>NbdBW?u5G;B$>%4Uue?_+n>Ut4VvR#`V+L;;TCT(yY0PkclK#YDDk$m$AJ8Td)
z?flR8fRhBc(;$Phf+|34m0*pWV5UF~MA7o5@c<TxePS+lQi2zi(<E8o&uVY8ZrH#>
z_V*k9rgQ%ZF?Hj(zn%w{?Lsia9r*{qT9-1y7mmH$fBqZGO|h4CA1=>I>V9Cb=@rEA
zd(7mbJda=y@zBlNj#A{Qe}F3o5YEIdnOWT}31>J5QA&{AgXTslsLT#*9=zkN3^xW)
zzXbXuA~U_<t%5{`5^>TYe9on&TFM?dFUknx==}#9=W{v4il=}@UhcCI4(tRjIz(QJ
zJyWQ>Oz6%b+(v^je0D4ozVvsSG6G-mkSimh#$vRW8~X4xN_*xTb68_9c0lUGcmhaN
z3ZFAkXaBj*g7LZhKFl)U-=1Dvs|7X_tu7@Xx-;8&6MSr5VQzGQr_C&;!RmU?U-7`D
z%Z@EFL@HPj4c7nKq!bF~F?$ib=4w$j)ZaSijr+chOQV_&pmviBwu)jlFGtycZ~CAk
zuiWYTsl6sbjpwsKU*#>51!^_RJW$$j@r&j1Lg>Va#2o(K$>_W98gD_G1-O6AsEDui
za^+m?PeQzAE+S11auugo4X$@ziulu9rI?wgERRcr=R@p~jja~qa~S!}6<rv4b)3t=
zOava}-r1MK;Px4ajqW)|un%gY9VA$`sO7X4@G!KJVEo@oX82p5x6pKFBJ0h)ad_!!
z%%{`&zuva_i=v)?Cr}3?YLd;BhqOYU2PGoJ1*|xtg|Qd+76OOwo~E80@A|d#^>+ZC
z!dHM*M~M%<vrQG~0uX@{2AF#;>=Q^F+KwdTc-WW=o{<bt15W6a_ps_<uCsU^{w5cp
zCGKv8Z)TuHD|&zg@zh-<O4`g7NTC*3XrPOvE$g2Da}zy^0-Uyqp{u#C;$}0o57;A+
zR{)Kr5pGhX!0UvCZSVLXd=hc@Vw}@Y2*&DRHRBvZeUg{=y3ihE9(il2LyC`B+X|3V
zaq#+l^kwnZ_cMW$+Q(XGJ#zu6ZkfnU=sSHT<}2Y@c8;ItUUjD`E?CgK)RH&9LQt&0
zde}Y2<5Z-*+V;qgeskSLr!$Cv26yW;volkUx;CRidUzb~=e!rj!g(jp&+=`7J32q;
z1zEI0??b)Qzib4zVy*AzylLK7wAO3Bwe~sb4IEtu+pJ*ohFsi(z<-fIYaLIX5r1fa
zs61nBC5jXLMs}}(Gi*#u!QJ}Fw^+K1ukHQZL=Ur;*zjyai&~5z(;}FTxYNPAPH2Uh
z9J&yuYQnt9vtoi_E4xSc-Fn;cnH&|oumLFsTL@H|8SS$>9Z3jkS-8~EFlnp&V+N5F
zk#=_CF%VHG1vVHSqXt+=xse7KX~zN9Upg}rgv}z@9|hwQL$bEf<0Q5bp0r>IBhz<m
zT%*i1`MGZKD4>^y3AG)<)r+}f>#R2~xaTsi8{056`jaQiYy#Q$Nb4qz#np|`{l;!A
zVeA_RWEFk-%k&MK4DdP-e*_r0%N*l^H)Svcc1#;3>rpl+8)2QlJZgafkEt8ZU;Y)i
z+~DWy(bh>aqs)Kx;{J)D$Cmyzy5c>B);?PJ!i7iQyw^?ke*fazx1sCzx0x>hnU-_<
zg~6vmLiOFBO@;&mQh^*|CD>$=fnh-@skq3HV~A|og4o~@{1%plm$5h9MN#SNZcs$3
zE+s<)8!GW6vRy?UH*Cd9D5$#(i&`BzJT1M6;0D}Fq8jWzP5l2Vwyz%C?7R-{zk~1Y
zzeUcG?F>U+z_<NiG%RfB$xWh_pWlIF+KVg4G;7a4Ix#<N?K`vQN!O0Q3|m1&j@-=2
zTyTC1Y28}q;q7L46Eu1_pzdQ*x8%l|ihqqc5eUUAs9#iZOCvWiu~}G^`*9CeU0@|v
z2(~P}-Xv;_-W%<`AT*14c-n(y!+1Ku(Rpgzy$6<$N+a$aIo(`SfBy8cxfxsMZnZq0
zy|QKY{bdF&w~ptS2He)~cMUr+nL2vm=qJg`?Q1@+UU+r%*xBoIj?P}MJUSrGFe)}H
z8h6gkT6p6i9sgkuZIS9qty5quA@@MN=DOG4&u^a}&DdBTZJsaq`#9G-oe(5yOd(Z=
zQRRoH(Kwq+I#ZJzb8+q~3iLZi7^`m1(oT)o@b>EMeQgt^;01oi_i2|e{r)vJ^7o6o
zmnS{QBBv{5p(#8`s6LygL(L<`1UO`pv_eR;)D;?e^HiD+;n^k01cyuC6033c?Jd)&
z+>)WWkY6Y@SY{cnndxt7fZGPB3Azx9Wr84P${(D=(Eo-aOu&FiQ@(Nw%Aq7jZLj;k
zxO(%y7}p2>|GMsb_GzYR-)q|UOlI1{v`U4MP}!!WLYyff;kaj}jf$Z~5offC!l)3!
z-GWpY%9aj;koAn6bDY!net*87AHI+8e^7VRHTU&eo-fi7adtTNQEq<AkrSrVMsf(X
zpCXaqunnKukJ>fw-9_UnK(9_ws$D2zIhn7*+!&=bII_Yw8?d|-65MvD=m<^@_~9UB
zSmsD@;pHeQIB-nJZvs1;YnVz|zJtQn<bfI^#-^*rkF}n8^QJ{*eVtec!c|hTYmOqF
zVX#C6na)uvp-v7%3rM;@xH373r+LA&%~yo#poR)58#V3i2Kl3SD4|3Pdu^@65*gdT
zR2ItAR}&i{wnPwC<&(b>?wAs#?qQ)@IU%H{ca)(zwqxRAMxZt$jBHyh)G`zTJcMjN
zB*K`sshoSeJhp1-r!7(yVGI`~uZ-bWAqhQIbLGwdq1d($A)UMsmW`nZ0*iMV8Bvbo
zrjxuUg((Pna}IjTcG($iFV($E-A(AKqFy>mQ-wmZN)*Pn>J)!!&ksc~s>`^fhh*x(
zLnu>-aP%CiG9IJwyHq#`92XO7IjzDT9UIfoP{<@^wsnY}q?~N;p#ZFa4y}x8D-p>^
zSr^38XVk5`dMK=MJcN?tr0iigs1w8JiXo4G-gVqx7qktIy%*95(Ot+49McL}-VWk!
zwv)}a4xcEC1R1b3RLKaDilF$u`)?UWcEgBpETcgkL$S{Va#zb*@q3b$gLW<5H%f)h
zHH}xpBNh(4kS7lQq8=8P19kHDAbm@TC@j_u92E5H5t_-ZSYRQ=L5x;n8ieK+(jSc5
zS><p+p-VT79U?PdqFGKXA2Sy9_ZXkxSy|xNiFodr(lUa%<09OU4P+$C<C}+K05Kbh
zFmp8&iwPlxINJ1-V$ir3Lm68CLk<Lk!KIs>0<0HrBbs!QZYWQKIw~cY+d-(QDol3?
zmt^n&XLg!gG@8(e=zSQ|S0vB>Q@DInAkGqNd~O{~MFW2HF(S3V@K+Y1?e8YBKLU?s
z_#*G-5Qe`b(1d^@D0N;amSuO-CQ>M78YPW4A*B-9Z6QeUW%Hy?j$jKv0Wg9INkGZY
zaEl^Q?bIb;M2y%?ib9U*<1KksT*NFvh{lU#vxNpE^J*|91BYy<UDfP<K&^5Gx~W{m
zhYK0T8mVamw#qdlgw^yK>Nbm^S;k(5odk<oDnv9b*u$opTTC@ZGI0qZr4f0vz%Pe6
zWf}2fb(K5g>?!x{X$sZtw(Y5D_2b}ZJc3C%eZtxx8Y4NFBYhV2rIA;5H1>4Lp7S*B
z94jlvJlYq%<C^D=f(_Ieg_26<?Z!xc-R;2Gc#~r83+~oLLX!h!3qP!M=ifNC@a(|<
z8ORp1S`x19k8j)mwKZdQOVa&;duPsnJuWG0S@M6N2wzVuzTvv;`@sE6e}6rRv05kp
z4;8`ue*@X?w(V_7Xq)pg((d%01zrxjI=QL!d0B5(*ap=k{##TxsVZBxN|1DbL3TfO
z?#<%7y-8c5?wMD*(pG+t<CYjVdZ#~~nDO5iIiaf0p^Gy&CEXjog*(|iv{f(QKT7yD
zw9&H9k-E-p@%(e88{5x)99*uAOZrXnJ+eQdKj&hIMg5X|2T|i-?ox}<5s!R3vs0dN
z%eO4H=?r1T`Xi*OMr7qQv6ICtMeL!sW=AaV9vND@ju?HcKd%r&Zgt3D!l%8jy9#jM
zi$#>Y4BDXSeGj$>vV^(ChFv`gZl?Wt&Yv)|F}fd=WI0UVnhb|D2QP7@F^eW+o)5Vx
zDR*ucZv3hTbh~md9!cJx#g&zrmT<|`&LT8J()_7uktvh&2k+{dv0bWktBnEqln<l^
zw)@)HQ^iGlj`C6Sq0s-uS~K^x8c{eH>o;-O`gok;r-C~3d9pmc+k2>%0I;gNb^NoM
zhs7JNzSw$X3HRcQ4{kqPA@+QgZnuo4oZX-s)xEa44q@M!urTm{EgVgSq@Q+_z0V5~
z2VA<EgqgTR{aI$5H*A>6z4w_s^I7~|*1{226iqqi`ylo8s$ec6puws7KxWY&WpVZc
z*^{k+Pu@4}>*?QkG^BhNO{sy-7(77XNjVSNktsw9*-asxWK@ry=2Xkf>u}1n%TJ%I
zO^_+=-N8R(Lc}7@Z=o8Bx7b&9u-+W<TKfn2o$$}%L|iA7SPUA!b4YTm`|y1AG~;)|
zkz%!wWz1Qz#}EAWx>ZUQYR{YfI73<c39wcx2KSw9BUVpfMbpktBp2nO%ef(L`XaeS
zvj$lf)4ltsNxJJT96i_f^RKvhsNWxAYVfTBO1uQ4<O*M2*&$(M;0(R-Pr1f}LRM^d
ztWjqAOWiZhGYo{tnG(&ruQ|Bp&cm1Cty>4CE&@8slqFQPkTml?78TB0pbvz{^mlc$
z%tupJdja5R7_y;xYtGSI8eqh^;x5Jzi${}V57QS3DeG{;j_^R;Mcs8rx+cOL+DYfS
z&X;6;`23gUNag&c_&M|an2zYi74wtM^bZf8MOdUzQ2%(6xsOyYiAxgXexr&s2zp90
zVTVZfY<UeAG>BgebD)8>@-N?se{PBWWlGjlto_ly9o7mI)q>c)&NtHG*<@P8nQQ_z
zCQz*83Q;c4MZn$s?~z#-RY3fFu^U)oc*No*1r5H<WN;7{fLcl-@5cdsjt`M)@>UZK
zWg<R>6e^%6F>1jfa#{hU?MN{J3lxC|&-{#Wgt$rua(#mCtRo&4;~GM+^MW`?g8|2g
z2uO*;{cr@$nuLM)Y@~l?Vrra=n(3h7TWAn6Z>qN>(1=JHN`mz?$dO*e^lpy7z?TTB
zC5_DSQ9)wWn1}#wPxW-34{U@!ekywhB}&#Jt!JSPL3>c5w&H9D4dOB{z+U7@^j}+g
zePT!`ngx70uEqqh1_?G*K|TfvUY;=z`0==G1$qWCOzec7Dul9fN8>`^#zD?xqbxCh
za-_i7z|%?%gNQbfB&#$9dMTk57Y2&fENerJxLA+~Sl~W9MOn5poK_CK6sS87*eX#6
zHS<X`;*#sBc7gg5gTE5&F87uZX(~jujR;yMmIE*!@|2S^2-JbT#Dy&`@=-uy=i5bv
z*bo>$Vd`rfXjM9un5nA@byo__UK>p68yetfkXmG?LiVobY}Q9DxaBVMQSZ0_J<O9Q
zL~=7wQyz=2LJ4GKVg{Q1O*;Q6;7N9nG1}kre}9#~B|8-J5{18)75qd2o6FrwMeANp
z+5L>T@B<zXu>fFU0%G_axR!&U3E~&_^dn?^MU+?{DVmC!(vbijfn*C5C=>(*m&x@M
zn;@<BbPFPVBterVctjW08TcMB07t2)WnZ`vx8_7suB8$^xNz1pLj;IXJ`bLD0u}&`
zAOR~S%HRSU%_Ov?Pw|w@(TQKXWj#{xkkG==)x+?A<U=3mj&aX$rdp~{XJLwu2r@+_
zUOg_(>ggl4(DO7pu^0HKqP|?@<aNmAf#k#b$<^Wc9XmfBnQo-5?cq!{SHb3M&{vI^
ziV)(T!JP|GLQNxF2QA$5EXo2y=%4p_69X(-x_v5*zA56*4m4Vd?CvakAHecZ#tHCT
zws=Q%HE4bXtP~1;vs6Tj^sf)|l<1R12hS^YqK1QeR@&_}NwyJgvc-24<ihYyB+}V`
zghQY%bnKP#<<tnsL-x3O*eVfw4m|ElSRkHLxb{M6#eBU`4<72Rn%p}~c(7`4wgy^=
zgh>X7uP=gBBF5L*M8eOLld`u0SSXR?9Z*++PT^G%ipsq>z~D8kdnjpN1PdlW!~nEY
zIuCWAc3i|>h%f_Kleu8T4$<fA)x(>nNL*N&y^Yyx&h^+Eb79L5NaX=zfSLgipnx7i
z#FArpQM>C?Z-{6FA(SaUEc!}0SeP3#+=hAzs|3n@UL5rBRp0GxC~7v_NDD6S*h9p#
zO%;fV@ONVlJ=+CwDq8Wm4J<C+qub!m7Be3l1uk!bj8qCDLHoN|;lZnjqbSgUhj?p{
zCIQ;6aQ5JVdIS9qySbOE4%>()*LS5VY_-5h5=rF+mJ4UgbF$e=Xe<^Psgb5SrepM)
zkn1WpZL#42l|$%JU$vQT!wL}O@xrgDT+Q6I2m~q6fz{J4mB&nA0)$f^TmpPEa=bKI
zJv~;L<pf-LkKindD1mI4{#xTlR}sfp;b_Lx7u85?AnKt-&U|quYW0$6_wxKkQTO)N
z{eZBTJ-GBG<>>qe1-GjUc^q`|`4mUOyWbhE7jV`?fkeNO^WT<PiQG_806|ubPOS7M
z;0NX5)DEa8-d`k&wBo^11N0)c^KRS`KM-uI4Jh6cGi27>F#*Ynuv!|roDV)ecehe_
z`YI-2Rlk54=y6LmGbTSmkBG0RnS6p}pG*Alp*S5iHGuWB7Ld=gR5rOtrnwVt4>;n3
zpRVagF8=N82mCEDh;Pu>6$E~uZS}*6fZYy}0Odbiee1`0Zw%@-*t(0L31{yg^6*>F
z9ess6cEz_Y`*gxr15<K>w+dL3<$2;jxWU!Ol0z`8;U_ti7DEEy8Pf+Zil-4&4|jDV
zF*I(#Yu_$d>&OEaRkcK({k^Z($)89;_7o2;V$Lb!u8#Zi?S%RItbsgJ-axyP0>B@0
z-kc}6D03~ic4rA5&5>iL3+*n<hc<ONR%+nN={43k`0<cZ{YkjQ;v!&%>Z%A%4C19m
zY;oIErqNm4X`U1PUKU^im$fN5&sOBrQGsHnUY6zd&stjgGr(3C{oAXPj<~Eexwb7k
zg^M#;YWg`1dpARu$yqrp?l0k8FW(BdBFpMfX5dx&P9^OCxK>_E>(g92bv-FRErZZS
zvVvU?D)!{)*s#FB*O~!N8vTwTGkq#;OC60Z8K`^b@cXlY^r_c|0qfB`x>Kapj=KFG
zDthGo89Q)h_dAF3UrgVAC)-ok(l<Jtuna2aBA2(G;DXHYBP&h>bGnxdj+fFzX*mbg
z13P3cCv~o=LI2A8Lk#~pG49NZsf<T(Gt`@O<esk?IecA{1vb>K98F6b#@lb|AKbeh
zEU`GilB86OfWHV^Q3)bb6~|v0^a-uF@v$dsuk*Rk<HhAmcs5nJVpZ_G=^IwtZm`Ys
zfn?Fj$5$)_3-yy1E`BERqkS6w`qXf7;u_N?o6h?gH?M48SfIy!F;M@~Hp2UEMJ?im
z=>!$9toP~M6tW8*BJRVP{C`=L+sVoW!)4yf<Y`M*Lss9nWs#ojG#2|6`F?0x2GWum
zO$m*vYBWrvpIWsHRwZv*n{;2@Z|P~YIZIr3JL%2_j+x%l*kRhM{YEv1AC`O4*T&sX
zUwfYtV%5z}x(uwB6zWxi#a0{RwaUr0O5@bkwFA@FGW+I@ZuU%FTosCctoyDSz1Y3|
zRgy{VVKz3T7xR8;-uwG2ADKYjnCHigZ}`e$FqXkeGJv`VF0yNr?-}S>6<LkW*E6`f
z7yim!%u*IimHlbgMyx9~`qW|dO}Y;jt+ZMoc{|&5PXy~h^V(^wWd~>x9y~AlNAvt{
z0ZZX|T?@SNt(U~Vefe1Xy-i>DX2^HZR8QN%|FqVTdhzj3D=LzJb^ko2r}%*qv1u3`
zJ}zJ!ng1Htc<X20_H1;=%l`3vyz$T7CK#NPP1|M_8WMEf66uGMQ?d2HNQAWfFqh%6
zj|T;Nvi*NC?zuh7M3W_DCX)xw{P{qq2@BhGby!FDNiu82F52l>E4DE8_Nk6a5&f#2
zPNRWg!pz0i!s-t2@~RzY?J{MhItG2J1Gpvk-kYE98Z8yG$`tGp;i!5V%SKb6N@Jdm
z4Y%|J<FU*uSz~+daB4MArayjl@=qERqDTbu%9pW@%r&+jA9btmM~7Md64Sqn+CDCF
z8B*yJ214(jw0qjI@7$LIS{<1D=$&Ltpj~s!4m=};PP1;<e5s=*i0PrJ*VuBL+A0s@
z5xln`?8RHnpZ(v}&%-V4wt1<lc=!Du53@PJR*Eb7Ttr^%zeibSpxN~}22Jlnw$(G}
zA|#ks;ME#n%AM@KOpobMqGIPAUU-~7K+$Ix?DL?r>SAO({6awjwQ#-cub3L-Ugu8y
zQ%bI#zn{3v_z*A`5eFE2+F9)>0#1!32BHo(o8H^8EFN}H(P3wcqk5vAN4)~BNO>;~
znM_4_5*T*^q3uBC%TLDgQJx6#QX-B9u#4~Y8Y>eUqC~{%s`iAD=7|T6E~!B7kJcqr
zpuy9@H4fq{KG!(lcXPi^bNY-+o?Xo~sGTUB;A{VR1a-s+#F*Ay<jzyn4}Aw7;u+=|
z#822QnX*ck<FlUla>6_DfN={AJo)IXmkQMf8(cyVE3NP7OW>>`?32k}BK$u8$_4%3
z;5`GW2c|DjT$uuvuzBsnaq!?R!E$-Eea#Nzlfa<;xwY2Mrh@H;p{zA%#Ok9fU6Ju(
z?^u20nks;-K#rPJIFu9TE##`@W7Qvc5UlIF@^KaP!>XU(VcHq?Z!`69Rd4db{wUO}
zAv_@?D@O}!XR^1WJBtp0g$X0T$JipkHpqldXV^M8@U04LeGE)Xg7l1>jUBCIe&hgs
zKRq@<PA~{y^7Op-pCj8$vDM@8?JfND11xzyb~e^ioK47lGX!+{+E^Lu+Bq^i>1IY;
zcV(b!nXaviyQzr-*-8(k^6Kma)<#Lq3XXVq5;f6_>=PcgyH;prZ0^&n49TY&Ixh?F
z<j5i+`6Ut`^(jkUY=lyBn)ld8l<Ebfb`zdcIGt`V6woPtdPN!u#a#4bUEdB`Af;F%
zPA)9toMz}~)l*4Sxmi+I)I97;enSv(JL1wJq#O?<%F5PvpDffRWn3*1_exo2{y7@S
ziifvIF3Vc`z3s1&*|w2bUN_P!wcsa&XLP4rEi<$yfO1U;1!MD&al2FYSBi|xGgbaD
ztd~rfNd)W&q4bkn*Lh^j>z3y;*qbm(cb)Bh-Jm%mxyh?S3mEicvx`3-PAs$VN*f>T
z`~N@@etw>qB!<Uk`2L-5ZbOZC(TJtRB=UmHT(RxdLQ`K%K@_@2Fq?H29x4UJG+f*b
z%*Nt5eipGBeBu30AVXaZD?(#_NZW-}w;cQc@G6#!(A`Jm-2h@jIVngj(PXpZxd<bG
z&WWcy8xctn6c^zrbwu5b(p$M9Ogn)V(fN?M2uouR;UO%`%zcpQfOC~B>#-l*)Ied;
zK8gp?<z@!_8pnZ)LKG5mZi%>;dA$+SDI$A{FiI`f9>Nl&ssQDzg9gy)BZ{3QYCcbx
zh2+Y5XnxIHjN!}4TSTJnavAVEx8!>$YUc1=*y7QlmQi`dN^Fv58y?q<8ZD{Bp;1={
zpqd+Q#GxHc5kqks;vhQeL~b|DZNfoHwUmf3n)kS27&Ph3NoTxp;K)gAOAtzP4d+T(
zQ~|del)e=9kS%Hz2z^R0CY1sbF|w2w`KAXQE9QlwR;k(tM4Dd#*?zHxy{PM0)nfFa
z7cL{&7S{t}#}(K|TfXClK(i^5qh2+sTq#2BxX{}jHs1RAX7K-ickJSN=+z&WK=sp6
z_vpOT`t-6TH@_p(y-G!Fl=^^&`?-uO2xLSiCxmSftSBMbEFl)lZ9Bzb&@x;R18#Ke
zHD!6xuJlYY7d<gt!}e&vWNgnquGunbwz4-{Pld|@B-x5Z(f~2$LzNq>rc;q@Ei6Ca
zp=_gi=X2!ON*zSVBa3*I>#<rxp2Ep5w;*<8%2tE!X)X`a*z<fcm7yXpkB+ja06`Zz
z{OR9+WZ14y{cgtf1O*z6#;ToW4rW}EvW&x3u=1Q}K{pG`AgqD-KrjitYX_yQ3*5M#
zSf!nm$y3pFh2s=w(-5k$dY`dr|4iEn>`=mdIjq3R8=q3>oOJp3(;C6c0Vz3(Bem#%
zGo7v$vhx~c7D{1~TS&-{*k;tI7Ho6yC}X8y=k&sb_NS&6!E_+!<YLsxU=>dF$DnDa
zhPaE{Qvb^a#hqf{gN5j<18icC8F3-DurgJ0{d@wGK(tw>Yh>^RjxwtY%#SC_AE{pL
z${nh={@#D>3yqu3t;R_rg^b>SQQRLEwgoGoUNa!;VJq@^RZzj>0@5Hxjp9j5D!2r?
z46x4FdmF`KB)4Wr_ZP_?{QCwuLzMarXUb_?<508eZhI<6u9F~!E*kt&v=ANJtU*j}
z3*DH{nst_lVeNPWB?Fh5rG}AY12{d!0LEpd6B?HTBSTqh$}3+W$#1~U*kfewQK&o7
zK(P}dvt?W&cP^v{E1}^7Z(v88#1Ydy$ili^24=#LDkr6^@EAsNaoGnlFj-(DXRo!3
zgNuPgYP;$tWcLe6yl+FZ1$dS5l?cytuG-jN19hMjnW~g7cv)WkFDZnyT6I=`Ya7L-
zIRvC(bJJ4VC<N=20IuC>@Qo&!HHY|J2!M<8mE`5w4ZIt+M8`+mM63(5Ld~RDBp^Gg
zg{rMbWi$+s<72Ap-qhTRbP%R+j)yS3xOWcvb{yhdB-+4mMCrB;`V>R@oM^e3Qg}o!
zt{V~J(c(xh032AJ@JdSUk3%25uFsemGkRzLy%XC~F%XMmx3lf1F%r7xIcWxl^*^>+
znhI%?0|lcW6q17{zs|{+8#4y4;Ib_qA+RfP$uw&vaCQlytR6gsMu939<+}A}2mkz#
z_x-|F%XMBAK4Tw%IOy1hK3^avfoh>(eA-F-p>C^BZrK(AkMi>()-U_CE;RAqueXCs
zcG&#$a$nFc#YxGvLCso?or$hiNJ`THbA>SR@6%JTv-OWZ?V8!ky{gT77PRamFzse+
ztY8GXr~E~_--kqnuu@)WPL23qdiu0bJ}vY9&(YIYp1l4IL`7-LH>G!;yf|eusy<;S
zpV?bS{v^L$zf7C-b0ERXbN7w6w1ZH2I&bUy&6EE;`^)s_<;cg`zwI7c`PpS^f9f2S
z&8B;k&-m$P-CMtWJh(nH&1c_{uHPTGmkfGLgj$SV`1B&O$h(%${k$(oFfqPzo1s)k
z5IXSp%JoQ2VVeF<%FTWEwDoH=uCZZXjRRY<7;|t3os!XRSgoyCAig>K$mr!)-P&o=
zjvXMQZQ6K%YE#!3Ep&N+x`54VI@+2UV3QPl_4hL!N37DO9|MVn32>8}7SUw}_3kgs
zp=Ec!{w!Is+{;?wX3+6+w!@B^X90jg)C)P1KuVB*bKXr4z`Lh`r+&w2UW*=QY)Ypn
z>dy2Gu8^cTcRo#|V0WD6eB8PC*E7>wKW>|=1L-3|=$s*ac8HH2B9imY6S%E6S86&L
zj#2f+v;_`oDNy2MmP-gZ*9|*3<aWq8>W3;t*c_QFlzlVB$d<esng9<l)nX@!eGNT@
zGPzWBjvB6IFvqTv10^O&#wv@G&r>MMt%^8=d#OZ>k^Q1VNlv0+Q;87Haiuv~72R#V
z7C~kyeP&F-kddX^q&`sto?eRlT|2dHjw+1W={=mMy$cP5|IFJcmXp;=<o-)M>vGPi
zf&>43*;3JYb<wTA?_K!s>ntXIqb^~eMZTCEsKFVv4`r}Zljg0K9$Ki_3CA&tpJtHk
zgca-JV(M8n;gX5NNvoZqb%vDWAQCb~btGT)d`fIQ;B>v6T=5|=B;LBt460*De$6<g
z?~a4XkJl@VUBCzXI;QsrG1)?mm;iLkR3uQL=P9KTP*5)kQt;H54mK^n9q22z(-($&
z3QhFI%*$;^;CF<Q14}uuQA&4KK`U*zpM=?74jnk?{a%9iVXCJJqkr7eknHNGfWyM&
z&EMrh)BI5X{Bu=&V*CLSM!KkG<=Fyz4V%eBoHfuI-)eapPEpRa5uvvDJS%)_+#Uq;
z<F;b(w>_w%WSwP*kQjCL#F&KK#^N9gj8JzFn=b%v8YC-gJ;7}KpkzMP#?VjGjm5CW
zuF#f8H?Cr4J)jE-JYB;ie2^VrtS-QLXpscEeOYC|g*&PvOw`a+<4uc4&TL}xMF2FS
ze4@`l^C!@n`aC@^5p>|KKoJAJ5_qZg*Z>VsB4fQ!mAh7rJ8d2QJ^VrG%^#)e+zj>^
zpOZh}j?bIjIfhn;rymj<+Nc0AR20B7JFT#LU9K0g7a3O&uj1kM!qvnE%{k>ZLLH0U
z3!ndp;&ELDCD2QVmOa-yDlIYBA~F5*>B?<PiPTeq6iy%=aj3J_%UKB>afiX~DOvNN
zjXZk8aA6k)M>a8tJD>V2orv2pfJ{$83Th5^6Tzb@Utc?f9Ewg+hWhRW0`;W+X<NjC
zQ{fO#)J6PB`M-TTjF43oWy9vHDt8mHv6yg_3AQZUT$xZ)nRKpl$-~NJI|S#rhTc5l
z%@cYkw(;vBq44}OmB2O54FWn;^@bvS_vpqgK47Ygh-1wO$+5%o3|xOtWE-49f{YNp
z#MM*{b3!-#)arPu4M#r((zW26QMn@*+m*WjH9%Q>#6D+PK8E-|t+^?KE^0y@b|GsW
zJ+xdS9-xz45eb}sN@^fRy>N@oS#awH#90EM0o-zG7Fo5g7LTzbxCk=HisQ88AikkU
zaW%qP6>W-@IkqD%3Mi05Z!vV$R*okgdbxS>&_vClHvw5cr2eX_4p6)5<Im->Q{_yh
z2LzJw0v_4PobzM3_A6K?Pu4D2QT@XH<7=9hyqwNKo+Zw%3|JOw{Kw~qYwGm=*uuA+
z-gekxClhu1!(`{-KVA|c+&}1V>{*g!9RD<JKGX1+k{P(H8BGTJbXVE|<W1cGBBh-_
zY<m9C|J@x+YKVC5!ugbu>a^r!rS1z!%9j@_K3AqNH>U1v$lzQn|JOF2buIavIP<@|
z8O<A3d~r;n+;7Y<Zv6Tp^QBSxMW;O1q~%*ar-7!t$h;%D`;X+EKeBMgn(>gjA;XmD
zwB;cS(>Iul|E)~@x^m5Qd875q6;XwgVvES;0OOS34VMq3EiZ9uE@^6BGtiK`an;6w
zBMnK%n(~fC?#z6eoUW!=cN?vZqGX8!(~f>`>~A_Iy9xqVfD4QU!~M!5$65?cNX<#D
z5%zUg_qPrt9kV2?6eXXkYP}P9{KS#G?cv7<%*(bE9$Bj8Pm!e8CmlP-fl&r0!i3}`
z1>aBs#7)N=8}ouihvL*350XxPJ9a1?kOB<A_q@vcjH;0No;{-{jr>k7eh30kl2Af9
z`tk%ZkbTEL%lunP@%f~MZfP$^`6pK*M(K#fRltpD2}naulH0<|Q(I5d(SP`s7x>;H
z!TY4lXD^bEonChKOxue$nXN{X?b(dB3@5=Z(DvhQhIdPzGlrJ^EgoNq91ym>8{l{1
z{Lemu2<53U*ybOjO1f}*x*Q7Ss=yV$P0S)EzE1ix84V2caXSF4cmiXb-+QI~$=#K2
zH$(IL60-~Z2(fkIAd#*+8;ru@J$!}(p=5&Ka)SdZ{-=2`__@9p7mfJb794gaGVENK
zQa|81lC&9_W`G2KJ`?`DGfadAJ}32EwYojPw^G80Fa+hE3y_Dt+;euJI{?W756%H$
z@5$Emvtj6&koL1>YW`HwX>9SaM8>JNr_KxcFhY)w2MPkTdE5TsNBzUUzePZK#BX_Y
z(bV}usktCOW%9y_^m8rWVaSS0f#~^ZVdn$TOX>@kuDs><y9+)X=!zJ)^!FOU->U@+
zw3lZL9}l(1za$;f!7m55w~<=;3%CLgN!DZ_X`zPCip|Pid^xE6M8s$OxZlMn`K916
zB(R=r{f=M#mEX4*`FG1PhMQ8G-!in=ny=v_rJccOkH%f_{3oB%%6H+Cjk@?Ir2^;R
ztOa;?Q2E8E_1#vY-Wlur!c^$=a?o>tANP(wMcg~eTstd_%oya)2=1OWpPaV!YFewH
z&O#6|)-$r7$>o+BYY;2p)pfO5v90{g9)dt1=*!D`zBntfi+^{Gz)sEg#NielLA=iC
zQpO~SkYK`E`P*s*@~>7Q?Y&KI<cXHP;Nh#G&##jnm9_?fm@BZ9+shxb3a`Iz`n`AN
zd|mC^{_0qPYK$Kz0-r4elpzO#YT%Fe1kCT#)i9=`Jq!(hssb3|Xw^TLGuI0uGVv;k
zb>fymVR^WjLO>>(B`bg<=n9e(kGn@`-?PZ9{{f@yoYqr$A5f1Cv}{eK;w?d8Wc4-M
zX<=^T#)6OM`7>%~Jd4c=;#!-ZB|aUk)A*O1gOTsv=nDx51_Syx_~9!4o7&}W3Kc;(
z*|<SK*f}#+Wa{z+`}+x7<z}OK@uJc!Yw<~SKkJn~Di9u??tkk|@+6UGxgaz+@gOrl
z@bhqB`;BSO!Owy-LG#s5y|Wm9@(Ct$oTQt_6_7ck58rNuiO6yI_M#zvg*%|vg34C@
zVClKQ=Zb|a!QxhaJdU!@fP{<um1#%T>MRd^exc@oz`vHi5J#`S<1ckFU$&X}fLs|Y
z8D_q!(Zy%otB@2Q9Hy)L1KNiVsP6{#-U@Z-TTpsGy#B7I1f8>XkuSIuZDlR$;;%i-
zoW_T>7u4s}=(H6mokNPc!C%NF2jMiyY&_}4cFFruhSS4<_MtVc{QdJdkvI6{i}%Ve
zqK`tL{lRr^T=F3utL5fA@@;;Q0vF1W>3nq<81(d<JRQ2?TI6tV@cPSH7f+9l0#qV3
z;uc)S5_cc89^;NxY+JN{8YziO{`JnDu0clr?IkbeyxDTDpo@Q2#Hl|x^4uGp=ZOc*
z<D@OUN!H+`;71Qk?gp(Vzl%2BKlWs7QDyM@0JQD#BI0f3J>O_LDO>>}6}QPt&jqTi
zC^%YPd;W3OXdsII=vJ0&xfRSIL4%R7=ZZ<U5n=gQ(C}!Og86N0R{k_n9R76H;wR01
zX+))C5{s`aL<S3AoH+k1^B`Jz@z#~AXN30TrT!&x;JS6DY0(21zb~7tW=@ljzgaS>
z>3$y2TN-?vKTVDNv4*{jn784f=RM&J`$?dG@cE^(yFxBmeTwd)E$mr47R5*CqDQaJ
z|2Zak9&m{7V0HiOQqM7ngo|fPST0&N>)G22kAps6o5p|KKNuIX;-#6#%R7auSn87Z
zSKmI9K1n-7cvw$f)IJQYH#_l&zj{ranGz+UNBKATi)WW^8G7~P>8mi!PAcz3fB|V@
z+QT@Wk&*KH2k!fD@JG!}l%)i1m+0GX@c&$L-Hat5W1iE?4GzsA2ZFSDC-^Am-EqgU
zNq0iYL<70xD5XQeLB5#~J@j9my$A#n<zeTy!3Ns0|M-FUiJsr{bb-0O+Gl{X$o4nu
zzGV;lr;{GX-%ju#mkgob_q-0ni2YM88ib<@mc3voL9OLT{Rhp3o9{n9`V=Mt2f!%X
zqleNp1XbEN?XBS7a0vbi?%fWRA1Q-q>SI35^ZE?_*M)!nW%FCy+iBYTdr6LpYYP<5
zk4%63V%0-QP*zEB)`df#3Y_%))ZYUnL~8`eYx*uJd@{IoQOiN#L=41U;tRNMZRR2;
zTKVNm*gt~=<fUKA|Kh*ciyWBjY+ria?I6F+6M1W;M}9g!{rT6LLz)@A-7uEykG(Ni
z{`|1l>k8|4W8S0Dt*T2W@21>76WrS!I<0@^ieC#`+Gg56qT?TBzu&5#K`NU4WBuYZ
z0%zr*e8yf=nNl)Jmpo-ooBVS|Ju>Mra&xXAVus+*JF$hQfbw>k`DOl09(UUOv3W}#
zzghkw?>}Thho%!2Mw1tY8PNf~sBBl!(m0pGxZP!(s+wH|`)gzet3v4X+Wo@a!MZ!^
zTaTYOsXEox-f{ZO+0Jukh%qv2KGn^P-E#iwwf^hJ3*+PBi|lqenpJh_?{=oU9t?79
zQ5LoH<qN7R3%lwyTzNgJq5AJ8J`nfiufnDh!CrYl95TJGdoJd<knQ2Q)5j%Tn7+{5
z%3DCMy%Ndzu_5U;9(S>%EZWR%YJZ`V-j#}@ORl#y4n(s2V@-u&1ysmf`etl16IZ$m
znU<?XaH3eR$~Sz?WRBr$1(Q-VWU2@&+7-ex-?rvU3ZYZlGdlYf*)@l=%T7#BQQlUR
zt_}#ecq8@cPPOC@UO*DhO<r<xQ<2Bir=Op&Th>!OgGV}+%7E3oz`LTB+w3rRC!ypk
zx2G`7CPf*a)4xvYz8lfii}-t<&c;&DIP`wc(fUU2`nQkQ?m6<;QhHi^hC&uunzgI!
zMeFHbXFtC>KHWUe=!0qYOn@|8aKt>nS3X{E6iMB-@JG^}%`M9>AJY5hyOv-1$E_*S
zA_g-~Akhl(Z?A6L-lqdfIGvW#o!kT)_ZwzW+&RaA_KAzZ)Xsz3{|oRhaWoM0EOb60
zq?O3t=zQEMhvz4YZf-Y?T$z$@u-Ejd+l`O}v6uHk|E0fC3Y)9*xz>hHY$-Ck!&uZV
zJNp8!1-T6|>~JMQdoAvFkh`|+-Brr?Ry|(qG5zOCccTHjCJ&=^esaU5wNq(~-JU)8
zX1%moF{L`z^Iv+TUurv2vwiis)Z)#%R!tl(PB~Xw?7lKldC;Gtq|MQ%tZu5>V3)9}
z?w4hvvU10ni9e$C*X_TvAuQf@mh1~pQ75fW>tE8;B^<qTM0vA$?4W#C;L+Aviu=3Y
zVAPwHM@z3}+m?12E*6E1vXWv7r-c?LZ-ifVlx(~g_qR*InL^WbbGyFu&ON2OaMp>A
zc83<n=Kmc1qQNoYWYVg0_bIPvwGYoQp4<5+H~%Tydh-#$11fhmoxkvm`C-NF6h=lz
zVqA+uW7`>jt;%v!s}94AcV2OF^iG?aaB*-*dAORt<iaQY=m|U6Csgb;ObXnI8jFl;
z$;U`bPLTB~eB8Y@dQDvr3Boy_LS5q}VAJVc|9rUOzwd8AjqrOV)FF@XT<=v!=k}1v
zAE(NLi~OxZ)j505t*5#Uoi9c$^CjyMmWmf9d$Kuj?F@s`#&xK%Lb12eppWZ)Q^q*2
zM!ky<;>ZuP_a9%@mb)f1HUtGRUhJH~J!*H%(EjfgucmL*qJ9!d2>YnJM%rM}p7M9s
zql1szz)|L;T3D$&gztMzIy3gS?B5?VPf{2a97rd-5J?e6@x2i0%o8_vHoRm!dDl&U
zHz%z<ASs}i8SeyS&t5olduR@&Nv>z>i7Cm~kDwy(%*(vkH@<0J`Z?HE4;3b(Y=rb&
zA*rSJ;3@0%h;D1^bbJj?O5(^(bChKB97rlwBE|Ef;&ep?)D$%kS97-2KD|N;)#8JR
zVrW|}44inebL{7boZTPiUUX_yMdT_is4C!X&6k(H+m$OD5Ha4E^lgUTglJ;%1mB0D
znrnn;5b-fS`O?jr+ocr;06n#5A4!c-t(rra2_hLP;Zi&kQW#zmsNW$(j3;rS4uu2R
z9hirGr;sI9WAjGDfJ+OZxe@a&xf+rw!I(`_x0|;rQGJb&Oq>ly`EdlI0x+UfGENRg
zwswJ3kqXnvRggRqx`F14DLYj|G;ts`Lo78P!ztGNMA#U}E=_0<%UsAz5ycoU!K9c@
zH+PC!#$JL$^%vZ63eV?fG7(5q36UaGP!p>}dSaz4rvN!Kl}ikz3CU3^NY_#B?LPc;
zMvM?OOwbg%`4jY8J<OO`c0;SB4#eOHvx9)Eb>cd~+JS#Exg?hd7<=7b%ybN(y@#dK
z3B}ur;3mH*#pw<rsgC$gwu3rklIBl@&~muZ#uH#o8V6-Jh$;F?Dce_EyHwUjEZr(;
znMzb{y+Pqt-A%hwv*((mJ>Ba;w@z-d)S($8d*L{V$g?wq5o_g3k|9qbCD)3<We*{F
zHHcN{$5n?szk-N)a$_wQ=>j3-H12%E+I7&9Sh$H-Eus%8Nj{2$R51_Z_;bnfU#q6%
zNaW<qHsnSuQQ%gEn2yAweig4tCvvZjGD=K5@V88n5-d|_C_Yhd>}HCklyN0mFC?Cn
z1~VEHQ~a=_q^a0FfQ#E~xHhbfyt}5BIfhh)Fv~*)Iln$4ftXjsOn~Y%bE%Y--ITaV
z1<KCA$<7Zz@)RDXP0`ewC4>Zq6L4EKhB9+QD51ieR?S4iU)jxkM?-ZD#lT*HGpjPB
z77B2QNVr%({7%Hl?~(Nq>X2;lpxzKp-v0U8{MMgKNPht`>K~#r7KD*Aa!3Z%FI|ik
za@x2CSsnk7Wrq=b2~Cdqp>Fn6AYbRkry5}=8Ic^s0xLUVo6$`PoSM(>%%yruy1_cd
zEtUeOxC*62LQ(cT8mH)+wn>i;-7(!NzOg+9Fz}5svsO)S!G(5*uT{5obA^bzzYu=%
zMGeQ4q?oHh<r)#7>S${9)yt8o5;+iy$u5!?l!apXWMo|?2rBl_v6DPK*@-v!6ywaj
zv*dFZi)P6QRCgLrYEqmB2OE!4Woc4o1E8dR!`M@I4j4rxk}s^=sN;)WFj>MyZ2bWx
zf$M5GL1YspA@r#MnWl!Cjc3X>sdgEra#}U0AnM(TrJ!4HLP@48gfP-pW;Cu;jV+TR
zBHnAZp%Cn7fI8MH8fP4bC1n6NP)b=X_sEviPfSD@r60vD(goR64-P^WPKCJ#r7U07
z-Fe&f$$T8MHCDZ`>Qw&jUW|iiEoMT1p}W3dOhh4t0xkizI83Rkma=Hzw3{j<zI}_#
z;!7*wH81{IJxgXvo8)F5fBuuQj`zgqh|tNg_zlI{UiNbihJKypr<19WQd6-bdRmNS
zIDIEuhYNYtLaMPyhG4`dpE8>4tC1RFIO3Ze@;LG?(iKB22y?q{Ckka&!9qwDhdh}f
zjA2E+0XzUZZMf3Oox(3&E+NcN1>7Oi5KC0hGsOK2y;e*z$ML6!lQ2{uzK#+SEwW82
z9o}D25YkQ6=S9ayD^V(DeQgs9(ff7r1380mJ4CWx`^DE-0P2Kd7PCAxD6#C-zxg(%
zx{Fgxagl|FWrRa3)y5#q*IgdQR>7}*TO9kCUW&xc3z6T-i54{Kcm-jKCsWonAw&{t
zspD@BKO7IFq!|d;SZo4*iZpKxJm-Uai!}a5ybY<Ltri;lp+ub0hEOks%a1Kes+WXY
zs}=`cWfJMtW@B`U2sKk@21&M;lhG3k5F?z36%x8FLg=<onP!3^Q`D(^)igi9tkW`h
z;tPUEz}M5UdfbJ!Vpy+D_Fo8GwTO8kvSC4PBo!4Eqk%Z|yXQZJ*iizhny>jxCnP`^
zy}g$?xdE=DAweS4#R#?M6+Mne=RQDosA%S@RGu)$MxBf*k!<4(4`ITFh3S0Jax*n_
z(=K0Ki0JW<sI$;gBH8<Cra1?31E?`JiCAMq3>GlHMGcOFlzE7WlEKyzax%2%EwB=!
z>0wBTX5HQjXrr2*=)1;5MXY0hr0<X*YWj*w*?x)kqEZJA649IGtBNf2LsAzKI0SU{
zLbR{4c>4rc?F%b>fU>!C&M+Ko27X-VS_KAj13VRhGaVe+O^oogk}7|50)*J>GUrbP
zT4{*Ptwznos2&dnsFAO|OdfA(e_u!!cdeUhbyDLR0|hiA<dFHY&>9C_eD+m8xb>-x
zT7WuB5C<*T^eSOfF0z_5yDwgZDmQx*5kA8LJB>|Gccr5u;%NE$Cmo??M3F-b!;PR1
z2lWM$=uIcYLxL0;&YXE|Cc|i&l>$z0D)v<9b#W0pZQ`g<ux8fMuQ_vZboT7ch3?_A
zT6q}-MlmiMkenRiDWEl17L(FTuBHq1)UvO(2v-Rz_8`VW)VC6Pa*?A8(U%eEv~x4~
zLd)Lg`#rU5iA9{=a$t28`Y881VspP$BkAkogB+1~*O+u#;iwv3dm3p=jO9p(_BmL2
zf6IxZz)mv9<*ALi2|DL`l?w*LuQ7ep&{-3+qkfC-J!qT*nME^Kk7QbLV8K^&SMDD@
z*BOpj&dZszOECY9HSnr*UPX?>e5v?y17am9tmvy`YEyz13iN>U%xjY(H(?Z0y>D;!
z=BSO(O%ljfu5jZ9^EqIy8F*ku{19>Hi{Sc^$lVnLav2@+3AB>TG|@m$#oRgdqNDtZ
z$UK*gb^Mvb25l-LRL&Gu1RZKOSh(I!#RYntLnZp$?RC6%eZ&j6Mz8jp_1R`gV3T~<
zD{n88eFTa6w#vTQlDWsu=ni&q)*qyLW^Q)F*1s*!)gAdDv;Wi1&a=&xr7Q_SdGF)w
z;rhniZO)hMyuQ~36x6xcqtny#rfgq*bdMVoY6N`>_l4P>4bhEt*~iX23qF`+J*SSZ
z@QI~r>%Y!x9N>bhAB*Z_%sRw<+i1(Bke1(())Qj4gP$h3m36kdavkZYe%XFL+T(VL
z>ol6}xh#&if^TQC-Zo>vYKg3gl<#nAFTdw+|1&Qd)o)rR2J~0A`(0HXdv=PZD?;bb
zZ>FK{H=n~@SG;sFq~6v=SA+nvQ!2V_@SZc;yHNJ}#0B0|+h?$X0N!z6#i=8Mfy}YE
z=>psYXuztUab}-@HSc8LM~96I(4X~)xe|t_J40Tr#?8(gO9-^Ly+TZJ@t^@m(0aZF
z;lvy`)^t$X@@W5wa0{ljDD=7nq-@fGO32ituG9krXL@Q~LB|!dUkoNx##96{x$3R$
zgqy35eDgO$aGFoXmh?t*T{%Zit0y}m{?4gd5B!`E*FXkKg}^}rg?Hj>_4bfAS&=OS
zLWMO80S?N8?JIT0@)5fj8`w@WCUV$#s*A|)U0lchx6T(u$S=1!4(h$;!UMINx7fNn
z_D@tXMW~w!*lQ8RBE&)b`*~BMN)GiTplJcxEsqG~Kz$rBP#{f4kbx~DdAo6gVB02?
zt(?ULgc%6zfQqR;&sHK)JL<(Q(cy;RRK9}T2rgIvF3~(x5(ZgJv;`CpgHQY6oC7Jh
zg1Y>V!GPPqO@a8%JM4c9VJm@~5-F=-cVme2K%Uc@d7f`OW2d6S8^N8hGht4See)1=
zBL5r6y<mV}u*4Qsd_*E&K!(WRP#QE7`Mu^|bQPgYA+o|K-Axp1pvp9toMQ>m;lbZ$
zZb2`;>Y<I*yAmFo6T%e6)q`$|%O3Y=q-C6OyZ5BtU{_NC621>{RMnMMB7UXq;jf^B
zNMr}PGdBm>aiF6H@HORph1W%VXZ~i?Lj%n0PPh8wE&v%lK=jBEDrh_YkH^QIy{#>$
zKG)6KIo#~~0314i+_gAwr-W`p+kJRlP=QAJbsSjSp(}!vmD0OMQIAbgMyeP+&c;CP
zs>k={)`TEio8uB1(Ix&F@+v=q(_o<WFwrjIsi2YO`uNJ2AmwCFi70CO%+=NsQD!1A
zQNsW7+j!bdKO1t{rz7kA-AuK}(rZL0I@MN%4);~s6fP`sNb76Z@YfmCT0ECh{d-qS
zkUK|gudR|h?O|1%=6tG}=!c#esLJu+8sAOz+2LlqrNj)u;ZdgUT^XuI+&E~;>1kvo
zOz}N8^q@lj99(5)Y=pssdx=J3RBth2AWr;Q6Md{BMp3xjUIF*qhliNU3Ac-om@SP^
zg5G8)L5;@!TL^1Fn7ANqx4UME-D18GId<Fiq3qiDKgI?6__8OhbN#qTpxaKt#|s$+
z(Qm63`zh9u-`Pxa+a*wL=nZqV=a`>rhesDpLSl+>NN2N!sP`6voFv6vsO&FM?l&U7
z0%Z~XexR{6=dTw<*9Ubs9^GcHg<hI72Yx*`#Vh$&Eh=$@2oKxZ>qCHmeMRW^+rU(k
zPQVO?ujEK8kox0WZPif&3!=)K4<WwBd(K|9S0AufGoT2Ph^0!=-M>h4-!;O*=HEAT
z!uj==iOjdT1l}KF){O&wQB1=Nfd!Bp`Hq;r_`~R%`W6KlG(xsM&7Pj=(S@zB;H;S+
zPprJ6DCbz00{PuG(fT4{!i%zNDp`mi>>QM;$~PFy3gSQ$VQfTIIijulhg|4ncEg8*
zSS<qNS9fg1jttc%S9}tY?pv|T06f0xXQf%z{{wkwih2}|KK%~gWLR1%h9h3D-SO*j
z$9j<+51>3OH?X?ib4E%f=;}x8G-@l}%G1u%X5ZK4VNa<%c=+GUf096Knoaq}u!9S2
z7{We83*Q<`XYLhJRnX=Q6740k0cblDo$=j+>Ac(~vd`u{I9i2j=07I*OiU+ua4ebV
z+<r|~R5pkcX%DgKOjnNP@HIpr*p#`{(nAvEt4eXxMm0Ob{}LcJZbDv){xa^eQS?X>
zH?P>>keHsevjZmn+~&0zp!R?$JaL8b8C6lgmA#hbLdcF9jYWJoJIGo!$`#NhWlYs1
zvhX<irZnuqdsY7kZ0ds+io?90NTYN5Nn1xFB|7V9zTQtH=DzyGcpv?T$NGk?%GA|w
z1Hh^l;3L9Ewa`GZWA3Ba9WTVHbBDY*v(;DNoSSgNc<xwrxw)wHQ)86wBAb@C$f_5!
ziF|$j3+RVW_ra0dRx$c7u{oV3GdG~-YL@Zoy$m%70_gT>6TSV2D+l>>`uvR!f*Rh_
zxokNUb)w4sEhErR3pK0;lUyW_ldi8?t6s2i3Q!Q>q-4sh!2}y!4Ki%%YXO|g+#cA0
zrz;l#XKZ`N8RUw0`mH$RaD4jYS>%@8`<p?&zlS_?76Dy_R4{kac;Et2$N@a9*xG6$
z=Qmpb@=M4~9^k@>uD5O?FwZmj>wAo>S-GVEd4DC*Ub}N~;mm}l{l1*fx9pJ5>FA|#
zM6?LFYqwkC5!PCWK1eoJrcHEC+w(R0g6V<)?Y)0<l97ECzi?zCG2Mu$PMgfr$9K&%
zg{PlHU-Ecx<?1bei=RBlXmS^)pb2@beD~)NwD~nk7j64v(YBtLQJpIE#!ZKRP0~!2
z(U&fzZ7G;}?IVI}5s^uQ({jZ4zS;|)H7#&ee3jaS9jV7lx2yT*xh}eIjrMOg&DhG>
z(px^ofMKK0vvjw$^tGlNS<;beI?GGn%Sg}Oh0L4uX6+-wtiHCcJ{DFcZe$l*D{pUO
zH!pi<4=+2qot3VSm#MwLf^6YyZe?oh<KgaN<GK%_J6d>poAW#o@DSP(@2Wm%AkWCg
z(!<!m+SAJ50i932rZzUC1JP~F8^5X(zb|R4N?b21F=Ws2=mfD#&Y0PfJY7UW*t44(
zw$pM}Tf=ptNOp`+Y+v+KboGNXG|CW+1Y@sn<#1ogYvAwqx>7$&<u$yut9QC;usQJ$
ztzCZn<m2-Wv0}?g-T>!YH3?QU8t<+%*6MFHK9px*d$%t5$TEF*u<oXkx97i#Rne;#
z@7-|Jy7=eEOc7)oi)D0NI#Urj30*{r_w|6hO?RweRpqOdWN`200_C^0E3sYe-8#HE
zYe$=z>jF9MMr&eQrnUD3V@R(|ad5k@X-mNPV-lNPI{WYWAJ7}Zke5X1YpslI{p7!h
z%C1-Q21iew*f=&Cg6|fVZ7dl2JO%r*V79Ml$)cl!{}+mIdHY^a>&y;4vco})J^yt?
zBh&GH@MQD%Mq*0q*UD#Hp-Ecv(?ZLQ6HjMxo)yiKx+F$vu*zharpP1EG^NDkTMnbt
z^<vbDLf^;D&v&ti`_wj9yKfcIf4Oq79j?iH6Tk!5XGY7nz5cu+{*Ax5G9m5gi>ib)
z1IX}w{A@3AnWog%Oj53DdQg)QEShC(iHBxpWUqR4F!$xrSBJL#?mvgY6-Y4J!yV!f
z^8G7SrnIF#Tx72N&b7rfeu$Z{L6_Jeo2~1?9YO7YyobeVP(Em&W+-vs8Jl)jvF)nc
z+t!YItKCbV$AdwZQ52#1SQ>JWTC(JSOoIjklrl1gK^^`G2W65oIAJvRA&Hzc@<7uA
z`)#M9RF~keFjjzvDum*L6Di**;YvBl66Ye+b;qioAOH33?O&I{_nO&Ev_jLP;~q;O
zT3vW;q0qSbA;t<CS7egBa#aY`B3BVg{-C1`Wdz`xAycn5E`;Vd!s{jRIyU#BT=M_8
zy$(8x9=4C6rW^69z`K95|6rlL9p!xdOO+G=+n*#d8IXX7KF|ZhFa!eXBu0|S^9u@#
zig)ZRDJ|QzyMWDBR8&^&tFGC9p!VRQKa_`S%Ig}N%2`dvTK-=vq=`!1&0y^8l(WuL
z&sKDv?Kyvp|353_THB$^L%06Nhn5M7tgBpiJSezVBGBYNJzW0(P<1ZuOg{eqzYiNb
z*vy#Y#x|!pZ_cM`b0%t}P}D*~$_VMaAt7o`MNw07C}~JZ^qx~mrzNCPty1auUgvsO
zZ@>HV`Tefz_x=6}uFHMzzMik=^YO4QykeL)c4Z>p>}6|VV`CnE`2CNc|NJV_{8%)@
zDrWgH!%rD@6BpzH*db}b??_OX1;!T?={u#)s%tG1MR{ZH<U0!$!^J4FbfyIp(10<I
z8LPWk-e7J>4}Hn3S|&oQzl1-|%h}~9sB)oqC-58<7U+P=e)r?tsmYyK!xuU_>CXb8
zHTaDSzGTGr@?21R`m>%wVvUmdEd2_lgp5g#!gnZ_x4>eYSLV$1#XW4BBZvNN<+C%x
zHDc%iLjSa6wwP>UkMr!{hQ|#Fuo*yD?>U=TFO6{8Y@4I0j#0FBuAuDRA|KtAn8EB-
zB-glH^^5ex{dey3XhND>A|t)TG~ZQ}%ysaMQ#a3~yWH&mb#m2dZI7OAWyibKr?zS<
zxo5$$ESzBx%f9*`lWcs&6xZ<3k$GsZ#w!|ln-BqlPYHvAA`RD`yPNj@Xy)dYy=PW4
zHQg0QEGS745RTxZ&SNk|$)k{wXG{E+3Q0u>Y=v-8qjbrB@&zdwl-rBClTWNIE1Yo+
zUQ!>HgDJ)Pv8U!s_7?>KC{z1qCY6yZwi<vl3MG%b*SS#7^|4}$>7l|#{~>|72D#3<
zQs?9-B)nqvsxE8lKM&Sm@Ti6r_q8RnmoIoBoq5qScDO+yNVciuq6RCRPYOlH_{?|!
zRKtYKHPs#bWNJpsNyVP5X8Q1&jyIip!#aK0C$)8N-Gev(d9dD|>3MnTZF}FhH*e3%
zkyFTj_|We<MlDXi>%8Im_Fb1Ez~=qAi4_~(cTXpset&)@=k5Co%0inDJ+nl^$cuAL
zM@BEcIsef9(uXUH?fX7W{j%%-_VTpd<$wPBV5!?8IA*;x)d0q_4Z&@=y;BX50&PDI
z>qMn}oFCC&-}dneb<4YtSLu6gKaH9lO8az;)!g=J%yxb({W|*y699Zi(mvmGf0dRF
z#l%E(4LE4l878N=LR`gLi?=|nh1Z^-J9{zoTKWk)M_&0)KYuRY;+wy`(3Parwa}8k
z2)bQcR6B~x`yGo3Nj>WbfG*S@L8!R5S>~n;>@xtj#HnHoyN}EsK;@}QUAs*L8%NjY
z0X6W$J=`VOXM0e$g46bKONt1+wBrxe6H^xig%+Eg19sOHlo>IcjpD!2m)p#Fn&Nc$
z*YXY}H*bHD?`(OPK6v`Gp6R9r!FS~FFR6Ss-^>5~7KLgKo2_5K_thApOhmsoNCO1(
zrVV<Xb7~u2PhvEjqD8~>&963&67p(lmfSSWT_T4P@W%(gBJ#|ix>|V#-5W_Pc6c_1
z;R4kJrWZ)67`j`E@X2aguXE+e_9P&ez_m(`*^fLgz)y1@t35`3U@Ev^L$)BfM)_!h
zoKa^`BmwC0;KLAEpI<U!u~|ES2{1L#n>C|@(bU)g_&BY`K3K28WF<~O+$2%53VHyI
z@vOQplz3m0ntIb`h2oX5iMH#1uEpFccUS+nJ*Px513g<&^i;uh+pmp!*c6aw5VldB
z-b=Hr8y`$sAkVC;5xrJ>dVXaiRK6$LlsUfsLidjsT8A_q|LfOtMQ2ypJYX{osIdY?
zq0D9yDW>va?)oAFPqvojk9tOsRT1%rIlM@x;0Q(qwh)+yqHR%VO$K-YJD66veKE6*
zx7ZKULW1;xSB4zJv^4I){88>tT*{fve+nEABm-zmCU9;i8d%VE4erY|=@8!~Y4BEt
zC=I%g4L>(E(c(t$U=~%IAubYp$UjN0*L*dcoV#9I7D#_q%5pnwFUKskqKpTujmXk^
zLLG*ihPnH071r+&CQo1*dh(aNP1c#MWnZf$C-{)+f1AAu;a5~24Ko9OC(eRsj_ydq
z=A*@<C5ttCD$wW`$$>{KBgDNfm1fJ$i?~+&O^3<Vhjk7Y&*!J|4O$}(cWlU@%4fdl
z+;OUmSl*ECb$Ibo$E9^i=B$0EU-R2S#_M_`Po6qe>upm$f&Hd!zVp$8rKkU?T-#d>
z>@jD>uUA`sO!n1sVR71`1l;{yQ;{vjC!!M9Ux^rY&2Ex;6)$Z&HC{)2c1Aq8e&w}m
zOB+sQw-&9t7edERkFUr+-#l_UWY+_qk%h<WC<I$mJpR&O<7r*P>r&q-&c|RrxVBub
zw?Td6L<UM{!O2H{Ih28zCyw36%{IQ-*q|QOx1zhv{A=2ZV{ca-?ucrTFF(80fKxSi
z%k4s5+=s0jZKf5+bIvcWe!X=1a7=ga#-xf#tKf|xg8YLz=c+_+=LJui?p^a-(f8uZ
ztEsV-f=1)7X0J+4@7(gw)afhCOQaQkT;*6%{~OzQwb_)tKv0nplZ`g9iYUcs0fw4`
zS5N>LxW<-!5fh&!+3}LDmMqqws}&$W^y_O57U@%!Xu6KyJd<=pD^gzIM~p_dm20mc
z3sBsb=4wm<{8x{^)tU@&Dpoka>lucuxdSt59eJeRex-#$VymH0wyq?_?C^GT(7q-w
zQX#FK^eVtqr4`|v)pw(Q+`vw+(D|d)y9O4Ct-3-nSZ@{S&^r^xj^O_F4^V34TwbXr
z=fnxY=ezjNA`CZ#8j`r~P`NyydD-5##TWI@6ci00(%9H{NnXG1EA}Jh^|1G;tA0J0
zzIFcmg`4j;ZU6O9NxaY#cyKP`>O0GJ=kFIM&vYG&rmHt5eIGk-^LHh|A8I(YWz1f-
ze&=b8<}cs2jM6It#fNMk6*~1?OQJ6lq`#TQJ<;znC3Y4sL(1#B{R<s$eO&HNxIz27
zrrh@f2VHvdiP@8A;BoDz1Cx38?AEKfCA4?c-u?a3{nf#d&FyUB-*vC%KG~bO$F?<a
zsdES9QSa!SX|=OHbB!Qp+<)!Lwf|E8dP5nxb9VgR>7_J7@cZ!6jKzm#yC0E-RoLVD
ziQl@G9iO@TsFfalnO|W446FyaK0ijzZn5wq2i+&V*;K`!_i6jso3HtaUQ+e<ww{e>
zjxmTe{QFyAq6g~e%gt($0x-w~@>>&pH+t)vbJ*#PZ}+uy*{4MPNL!r+oX{Kgzwud|
zVjK@RjW1C*&iCLI2vU!>?O@fB(+Bki?Tmq)3|EEN;N+ibtsn^_8u0z=fgF9$#@zwU
z5XX6*$!&ahAA4nQ-qn^fz$v`~wegC@n+l|$3oNePGhfoJ`3$v$qvW^W%bQyq{-;;l
zqD(=(ScRFl+*P3Ra^>$p(SwH@J*c9fgT5Zg7OsaHpyniuwJ7t;A#DCZ50hkUju{44
z?Uq(y4CK&0XH3`2Mcu<-T30|LH?T&s7_q_)WX*fm!rmp4t+XE)J!Im;*Rd<&*2sW;
z`R<phd^qFV+b<Z!RT8Zw3&+=EN1hTEX~D!-dDXz?MK##f7cebXv5QWmu1PlE<Wxv=
zSsQ%Sp1s9BwFZ0t#h&#)bT+QX7+;B6ba!<p5VL$ex#{cPY<EIl5jJBTHoA+NQG-=g
ztZnWt%GWQf^xL~%xVMx~PWI&;oZDcLv*K!AjNuSCx&^bL0+%$6;m{%fBFu?$u|$+m
zD%gEM0aY~zcdK^T*X+vI$EApo_%FYJo03ODh#@Pcr7nmYVb$p37cWZ&da&CqxV6hf
zX7M2|LRggK{(J}n%Tq74V5{Ji9~SeN^XoCfEjoHq9h}sND%8?O_zF3}Uf(cFSi~WB
z%!nJQxkY@#7uepQ2T2X4l?f=4QRKI>dI53=+`qEPxA0zgp2U<<<eTEND8)4ZjV1BO
z<tYA6#|R9yhBT!tYd(jWk%5@Kk}^rU5#ME?IT^(#)AK-&BCt82xLUdOx*q^5bz{~N
zIv8O_r0pol;^_P^y()^WC`|6|6LGH0`sb?j&vE(@%RDJ-j_5D<0n5vz%b&f7;;oCO
zb*~ya7w2hET}m(hf?gHb9KF4|I=0r?*u1d2;NU@Ed7xV;`^8%AD5tfD_ExhB_qZQA
zB|T`3jo#j6FZ7700p<@Cwqj(}ar;sZt-6S}Q<my~tXUWY;J0G3Gh*`<wVi>r^>V_5
zeliAv{234etmp@z_G{ipEuff&4cbqGU-NbTS&Q`_2sdSvic=)SmR;__hb1Iv=%-{b
z1AIweXD3{IKLcZ(y8*>r<SNm95yZ8ngAbmP?iXP~v_i9nAz}t#)rzTTTx$G!yO+ZE
zN^tgMWsVzAeexTEg?5+!#CUq_E|G!1W3*nyU_2zihDPxB&!eZ6DMJHdiz1ybAN8-B
zu8(DasM`8GZhf(!!Cnw*D=4&>NH^t5ie(21rTZ|4u^&7z?ana1lkWcvoNYDoq6cdh
zG!!W2rDdWM4UT}-VbRbsOng<{b|>fN7@p-A_WB&QI0}O!CFm9JMX4I=@5Vo)=$J`x
z>%;e)zFHU<g5|pr4%|N(>R2<J=djkgX<s&W{b8*yS7MK$i<94Ag14<q&R$X@%!+-0
zy>hPUO6D@vr_IK~;7<k1B1W2Le6|#u0<EHD348V(m1P!x23GcZp(kB&{JQH<#Hkk;
z-4aa22<eSq^~VV4NeV~=0z*ItmhfPa)N6>B?rM!8h66O!5^ZiVj|1Sxs|rQ#K8Cgw
z;bA=ijF#lU?8HI=+>xQ%mddmfhIKr!AIgv#{KT+CaD6Xkr!VGkR{;JZ9R}u^&8(Bf
zbh_Ca&`3ahYhXKacTvq&jIhD$+yn%N!#XV(S4n<C4x1(eSeCoTFM7MFwC;oeHu~OM
z&q4ZfaCKxOEb`Y95Iufq+snm!L|e488>|oeufjH`-4juTMx8pwtt2DPOA=b#rjze+
zwF63d>P!_J+e0_dyK`c=1A6@pN^wl?)OGd%m>daAW`prxAfc9L+nB4fP-ZS_Ipkd1
z8s8D`ODRc(H*eN?p3s%n$W|8+%rg)m3h8qL#)aNhB7*QTNFy5KmgwU@1ojGc?InTF
zwF(Nk#mET;bI)n<8=Dgufes$99y`?Hfq4wa)J)X!(PzF1;d&Q7z;?lD2fS<$0DoHv
z2Tmfdu65SdjjuL86}p@n<=^7AJboo5W<@Jj?^}#+p{t<^a6*hX(B4XZ&yLCHqv-C8
z-b;NCFJ1n1Np93P=+!s8s_)A7zLV^WqYtf8v$@y+{)X<pQD&^*HAahjZ2Yv%nv(1i
z1z;r6tvPY&{v{@l5zst(ECz&oH|wT(T>cA!lOBdp1WC`{UJfOP0+IW^?X%T?W8%x8
zquD@b&tE-cILRq-YvWE-pZt@>@lq+_>vj3bkNZ)=4d@M+&Pc#q*+GugXNB)^6P+kh
z?KXQbP!LgM)8Y5yDkjIN++xQdm3qkGw@`Y2KB8C@o9FKJ&}(S9ProDubAN28wKFSV
z8ODkv^|7@s-M4&E7m|$^L{|^jG5OKs*fE=tsD_@)g(G7X7h`9v=&zjC#M-uW4JCw{
zYwfu5*E0eRC`p~MDcZ`7`hDfMGCJT@{C@cG=FqGE0DC2pvVTUdhC&Mt1P|x!7%i$B
zE$JIAof+N#dsITbR^ffkSbL|pKY^)p^~3SLlu(ZHF0r>`SjVlIv`o*%w?e<UyQ*)j
zZDy>UnzZuwSf}mYu22>y_PX-`$)WiAPtx`MZ1f(fysu63r^k)HLBN8IQLMc|7z8xr
zHyjz4Z+T-F$`-|ro6~hSAN1XvnYsD+_xw#--&Ljet=ZUHFLxBy*7UBpaPd{0mO486
z!pyDsG)%%rCx*qXPiZ6Jb+_;E3l`+*7COp*Yv4JO{G>dpzi)~ShYP>Qx$&vBNNn*G
z;;?lG0>=;>pBp#fa@|cjH{?{QrmloS;NQ4M9e38c?cjRg+VNt-87<d_afbzWo#XCm
z?QM0vslgO1_P9x=Oy4yW4|5kx_{B{G?3@Uyp9txn2({x_JenwVG{yV0^ZRk`ag$Qf
z?dbl=*hiDA|4a&KQ}JQR(_T|aH_6L|Q>hy%%LV9sE_#C<VH54%J|!xPhWn#!o#)q#
z?>p1)V`96raOd`W)pYoIo`>m{`9@Xzv=#&H&_Df?j~0eaSH;~wq`Hx(oZi3j-t$kV
zuZ0}$98UEKv$NibK5aWzD8B!<)!h!#6=}nyiOsF=UsKNG4L2FsdUqB1zPM7b;^Cg~
zWruIr^o5-qb&1Wn%B`Qd8)CUd6Z<eIa7jDC_S;N#5gV(~(Rxhx(blIk1y3n&USWFg
z0IUos>8)-~W8!tw?kZ}RLP^>l7g(*-1$^As(VDN>;S5z1Z3r3YBZM5c{yBru^S<uE
zR-ROaY8Q|16LcV2zmNgN>Da+`<zT%^+_~ZYs~e95Hy`L9y)#-kQF#gn5hlLo8m3l+
z{SZSd2Qe;E0P=w^Z=7<q+KOS7LC$JV*KZ8@%XbT`0**e?Oo#&yKF_B`Jj)Zxg0@_o
z>ZD5|v2Vh5o2q8>kN<U>G`;Jt6;W}==02SuinFf3fx^l0%qO(fFO%%G*0)pg5m&M}
zlfcI_Hch#qBZS}ef_B{-roa@bYbC;LQ-d{yubgO@|Ch%30JbiGAs_?Y|C`47{Eswl
z53x*AUQzkK)3`D=lEyW+wEj1ZtJTsz`~Ql`y?Y6oMBL>|gG0k3SFWDHGx0Y@Z~Z5Y
zyLtmr75&%NmXA}%JtaP$eK9+BefA0Nz@ra;t3I~gc=zt*cj6dc`3nDO9)NLajoe{y
z2j;WgkMn;6Jy}@Okh-9b<0Jc!G;U_J<HXhf8*^vYb!L2H7M^a>n918gk2qKt+|_jR
zi2LR@GuJjh14$0c$20<UW(Hs@;<wnbbFFs~_OD}{B&*Ih>DPpnf6S(OxRH0Vgtqv6
z+x;%rR_nN?^adzv)BK%cQaOa`5t<Die{}uA*(ZN3o!sv<eK5JZ`o_y!3x3!+D6dLP
z7atAPdgqXzrgwZMB(gr~dX?`!<FJ)!C1}Fql}?8vUOH^RMVLf-$<DujcpsWu!e<u1
zU~fJiFc$Fv5O14X)Nov_7|>Kpq_3u4`1*D_9UCMO@Wk3PL;FnriW?EB(~~1x1|IGy
zLOr~C{n*m~&;I>uejdpRlp>UFGU7&p0B$Z_1AulwEDX1RY#nW^W_3d;he2DBSY2gT
zq%1N!nEb4m)ztE=#P(EAJw_9fjta5vA|I61aNzQS`(NjtA7~Gaek#FPuo+wAVft(5
z_l3H?o~`5uSiPu<T#@qP|K{AWIj>(F5)@j!tVukW^0GF$srBXIwDYfD9{C?>+<#;4
zZ?9h+6RBCxNegsS=NghrYLs;)y3?$EA3y$V*;)BmuXRUtKy6C-Cp&}3C!hIy#x^b9
zZ^*1D4@qup4H#pgwvtL(SmnA`4!w~Kjkwut2|RDO`fNbXKdrLQwA$0nIw8q6Wy9yk
z(%QZhk6E2Ps)m1acJh<@yWEma!}qe&0T1U+-pKK?+taY?aO=){g%4Ycj&9mF+js2E
zgO&=d{VO-LU9>K?+Hv)Tq42Nf05)8(*gA!A+4;D9HAIlAjC+Ho<d5e&ur@o=ATyy9
z7#u<?9$^V|5BBJrPj3d$YV{<Z9RKa@*&Cc!4>w$#-n6&lvi@@;c7cjV9YE9FB|LS`
z@sI=@%UdpNS5K76JARF0V%6xxna?d+YHbg1k%%)JTlG(@bQn-TeP#sOgyipA7Z1-k
zOnUmp4x&496`OL2eyYcL{r^&rsu>i8e$Ue#qGbX|5_<urigMe8d8T!)XGO2{j;UMm
z$LzM;vXTyh=oZn>9AjIB54r|N4}#9_i$V-*x9)MVni9pu+`IpdZGiM<={~Sm0e{U&
z-Dj5R9sN%%8xd-;l#8XbD1P?5D5E>J;Y($|a=~1oe7@OLLv?oi>j>>#v5R*QXN!6o
z2_#%Kz;FTmS>*uAa>C&l?97+rjC1<*T9qI;`zR+!DEl=br&||Q!J8D~Wt2IPgKVGU
z<q(!7hZ!w$$ejeM$BNWAH9V9nA0VRWXj^?bS|72+oFgDzJ05BYKcAqa!?0*T&Fm`2
zxK9K-2zeS10`;r0kJ1(J;CODHcA5x<>j6vE=z}OfI*P;MX*f&sX;~sPPN-ktE*Gnj
z?2_@rauB5$M70P|+R*?$x<`UTTKwx{xsczAJlz^~l=~+UnSfNAvjk}479KhtxyS?w
zP}JyY4R?|lJuH|9T-dk4RGFhn(SkNbG;mo$*?U<TOvF5Z(o}hr(i3QXDGypA5*zUk
zs96aaTbQDJE#z<HkmP`^G>=$>=+WrNxLE=5HU;iAlmi%B?sZGzClp0~2XGaM4{Tfy
z(&o501ktbCqlCz+n<z7`^ZFb*#6m2A_H39sEl(NZEJga85cNwsPqT*$1}Vi*sR&JM
z0oC}Du+VK%NWX}y;i(d7C)1O)+%=uvJonW>s4b>7JQ!(pY9TO>5N}<aqXeY7ccAw?
zT;j7_31W4St$_wlElA2U`5@YjbLTxI%fz~<_rU4x>p`|MK-UlHg3Jr{V>}gkA8%e&
zbCt;n?(95JM~a#)9l&!HAbAH}%~HWbXG-#d2j#gB?*JNn3Cx+2qZxB@LXb>Mh;>Z1
zQh@49B>BX5%0^ekGrBfkOfy>#*iVZI5fa!i4M6Ko%kTJX%cJGe+q9=atf%z)d%9NP
zl*VDCI4aUd^m10Y1L|2)$VjF*U@73?^Lk*7P*;duBqyfI#TwIcw70?>Fjj~)WXe)o
zeQ<NSKupDC`j91nm5mJ2yRk{lyADtnO+k9jQh;6aoW6>bPl&Yz>C?O|hwdY+4tk$;
zE=Wj|KOj=C!5%eSjfrh{sO&D7Ju05Zs|oV)!#R+9;tN8iWYJk`q}MJK<C1@g@u3IR
zV2K={O7gXWl;<6$xfrHOOq@%H;W-h}mM=179SkrYJxPB4M*PnRpyoBoLuJYH^s;~^
zFD0P4P%fq<DvPMHG;m=rO-E--!=o6WC0gpQ8_ylFSMWf4`aLa7MB<||5y4S)_q3rE
zz=#}3*euV}OmtQA5{dT*=jIzk3+gmkqGkREM+U8P)b(2A!A4_whFM#n?!{5)2f0VF
zGg821hZy5S2jf;KAv3uMVVBZ-$Q+QS&n1WLc%&iQbj1ni9wo|F=oBcCjyb57#P&1<
zy-*9<<Ql2-Qn8-<cMv}+CWOdo<Y_5S-RZ4H{**}dreY;lA*WE3?=*IZQ1zueTq<8=
zw8Ivi`vv$@s#A}fK>~>yE>U5Zr#HZr5T>81B_YZ^Zvl*`=ny7uo=zeFOCLW+hp2tf
z@1cW6gmNHKC??HCBwDe!Kq@=$mW5o+y#`q4&xS1*1tk(vxr8N3$oIJjjg@op2jlXM
zdg$k!k!Wa{4AMaf&}O2gJ_&r0PL`m+qHycg7&m|-0@SbqaXe?WsL5d(rbWNjSg7zQ
z&lY8C>&rFL1n!_H_dZj0Qq5NhzC9z|eEbD~nd<?y)z7#QW&4nSTk-t&8*ibPl>jb6
zCf2Kys2$t{jPGByS-M)OW+#}*u~0x-(Oi(%b`ck(3Iye%7ay*P&?_W!`Wl(;4E=r-
z8OUcl#-TVp1AOzeA6Xlv5aUTIag%72fC3bM-xr}*znRiGr-ZeO%*&Dvz0hD&V9VSA
zjmHLJJ*qmOK00tG0AVhd0&0dV5QFNV;pY&t$%F{^<=q;?8*&*Nb24*;mZLdGhjgp9
z$FG21CI&822M{dk0?TxIB&<hT@Ky|=rAxF_KxOt;sw~|}2H)hs%;$gu5Q6_6<mL!m
z?Dj&?aRW{eS`nuy6I%qp6<xH=6k68>8hv^mA`5mtEQi<<C}c7cCrO(74sH4ju}N+V
zb3s=*XwP2i2EavnVcJTzhir9wq^GBXkF2Q~%H>F!_j1b5iNC6H68b9&Aj*<VrvMu%
zY$OF<&q4-lh@tSa;-~gTEwVv=f0jdk>p9c>AQm5TAZ3!3kTVxHm%vThkiB5NwmgJ8
z1frEBj?&Lu3OOl4E}dHu*a+FHAch3mvU$rL=NL;NY>co^5v!8^DvpX_q|7%Jz>>YO
z)+C_!5LmVxNJS%DYR{`5fxjamHk*g2BOT<+TwND=0LGuRXg7FU)?Wyx3fW9S7EuK1
z%0Yc8^vrx7v?0N@dd@f!Se*sj3C|`=iji2-h`#gcRey>!NSg#5`wF}}1Q7KACTXcT
z7iP0}fAL4EeW?v!5UNiq0l_L<r7=~GNRKYqjjAmJ4VAQrNN@wvZIy$%lBG)nGZ9$q
zzt19$e+D371j5}q-jc(KT%~M;qRv?x2$Aa5QeEyYO*y2Q3AOLdH;#chUpV<$Io;h0
zD(-<)kq%Aih#+;1vCNMcXM!@2zG9Vl1Y}6cpSFZY7VL+WOD=v}5p$QO-Ll!~3KX3j
zh;+iqO3*QKuitWTGz-K@z>gDPQ52kd4_uRMwrm30wijY6i?<e~CHv3A3?XPMOLCFK
z68S51rI~a(s5?p{l2(R{fZugM7kbUtp<LAue*^YfV-onZC5Pv`S<eM140fCm^TxII
z+W<?_e#AiX2$~FBeV?Z-gLGwP>Z+R0jfjscHM17flY<Dt)KZc)<3po<axo&?;vw3=
zTCo!wIx-6Bwm3OyQ(yjcIn4y_wHj%U1FlX^--jyZega3Z)clEhCt+%K<<ZnihgSw{
z+h7`Vi17v4Qk-yl$YG$iITe0Bwx){)DuB|@E`_e()sHR@TaDfZGhP<kL-dC3pGNt!
zN7aRpE_<OXOq26yQ&^LJ5y#pP7;4$-{K*ATxHsTJJZOdhQQ-dRV#Ax-;|u=TW(m{2
zTT#iW$IM=VEFm<J;3@K@YVsZF5|AYYh70Xyf<2zM9(7MW(aUL!`+RJuywP=AJyg;V
z@=E&2pkau2>`S@F=W^Qvophos+*X@O`DB~%!29i8>+K~@UzjZe%-}p7=WT~MUGWZo
z!S*+fJ9Hms2X#6Wjd}N0NU>7m-IccQeOg6^)`tv@w<UUlo!+D&$Z6OGj<>%7w;cau
zbM13;*-Epy352f&oC?gSwl;nz0jQt6UoC6i<=MLHf%g#Z^!9wKx6mmsUo*#{29c@F
z$K&o<A#RbrX0MAKa3{`SKbu@xY5S*RzU>caegB!skqTyH*QtzCCeLu~%1V>>z08l>
zm|46t-%c(3<zcN!haL{O{QID7)iT%b|FnEAVX1AGnUTRMb^Ea)*-!-RK;QZ6j#p(x
zTi;4Y-F-5{OC2aCU?qW=^z`}@z>V{O85h2el${aRCp(a_9Uv&d;4Of$YztNjm<l0d
z1z_?EnJ{nwI`sZ7ps^e#%IYog8gwq?A_I(-V!B{~_Yp5*M_TqkT+>(wLX!Aby#B~}
zxVQzR2{Mp+se=e)@H4ge04&I32u>r6Z^^*~ZGl*OViQLmh8G@iIlhA|%RzdGOR51E
z(o%<urKU&~R54%h_(u#`o=Xuyp8VArUpK^VzgY9ugeo((AxUiIo_OJIGsS8H667R^
zK+_>M9n=>3ttkf47isQC_RmED2K)>8Iu-V^Fl!OiRtYc_8L()*?^j4u75~=!5JeV7
zjM%5o249^&UF+39u{~E;S#u&_?F~{QP9-ABmdj%RJRd?!5C{&a<$q{?D#(-+ZbJh0
zf8EFgc6R6XGe&5aw<m*az}*qr)C|Ae41IKl*B{)=q|+=8bxdB8W4sthGmg{*v4s$u
zpP;8Gy=V?n*}%DKSdU&+9+O}|f{WCJ@@t{g=Sh=IYXZ+LMX;N?a|OsK<-6WIj6a0D
zf#LHTz(NZ|58c1}MS+njP9t{s&@Z3fN<A}x$T|%eVf(-;FO$U-Lj{1em~SK08xLy+
z9s(r+EP)MO)sf(>XC)95q~NkxJ*I4Ud^qz@;Ys?2&aAePBPqkVeI4k<bWon4^_sPn
zI-2)R24>nSl@9qx8W(HcRnff<N#jb}|24c;6?@Gx!mKFm+Tp%ybu-tF{=O!qj+J&^
zJsvwI2_0*y8!IjyJ2f+Qcc1I!XJehzYgaw5pO5XgNF1_c!;dqsUykkHbT7-+<!IaQ
z>sP#427a)X$cwxA#;qIOG*zs}<c-_0Hw}$8>~n|JpE^&?+*IE;5Blx^udU-ee17w#
zH*5d76bk90xghJ+?^}B-pcCr1zsy)diYviwUZ0lV{#|N$r3D6Pie2|^qrxm9`8gL^
zQA3p}`jH|#-n}Weg}C6(h6)=)5=fOm9tBl8kM6Ah#7uPqe`)h@@9tQXna6#*ERKQ<
z`R$f}##eRH)&+%p#ol#&WUdWK4B0L_w%uL$=Ps8v;q$-KxLX=#Oa4so!|-|J$;i0L
zc7e%?`pK33lNDT+$=IY|BW<LV8MEq!{eoumxccp<%=V}NeF0`ZqZRebzFUJHv#LGm
z4EL$$)GW_w)ORc;%!287vW#j>peJ=u=k4$UX`L06pnc{$vsq?ntj>jcAK0ykwJ&*w
zuc4aI#!s%#_jv2eNIzjKaB`b1X6Gr08y7S_xaM^_!U^L^of7bFg|yrov@-ELS@h_B
z-WWU6(C9VJnS;y(A&1))R!V`#WhSs-rP%_SUHURt*#nkI(dDAl84A<5Utu%#=!E_I
z8KT7Si-*hf^V3X{RCt0#8wUa*U`>XdXZ7`8Smz^=w>rmYS|z;NgV}7^)ls|CIC=%W
z!d??8gh#bHlR;fYi~A_pujlldY>a;}dUw2?{*TpOSq9g|1Ycspk|@VY><Zr52jwmM
zPIx%<sbM^iPb6KmIBGj{XC7#>={Mgsqs2WXeE={;LS59RSD!r&jy<9ZmV2VNJ^6NO
z0)4WzlS`p@+<JCk;}MvmtfKLsIA;RJ&%Hi@H0;*}0IBxknNVB0JbL!Dzc$n27m)sR
zWV8cV)2GQ%CYiAxH<tqlW&dNj;V*d?K?wwN;+Rr^2EB47=bC&LSt*Y~QedC4?GZ2U
z%ZGJT8GuTMxF$4X;f4|ayDsSiXWdr4BFdoj*Imyyn|c4@1Th-Y8A-rT!ufs1e{ztq
z!@Y~H@IHcuI_IyYRhpLpjpl(9Hvs7GkNsC0G@J{l>vwd$9e(#AnDQm~?K>7k;fI;Y
zUv3_7$CI?3tLDquzq$rGfotnPT{_g^_qH_a_V({JLz{2^egG``$N^G5jNVEAC+r=Y
z(J}iltv-u-o$n^T$~gDoO^((pVY|jV`Tn%aW=-uvm+u^RFR&%`0||z<g!<^109?kU
zWQz7~`<)IIzMc|>xhfFPj=Q-(KYKMPzL2^(YkH+U7<mW3<yLeyj^l}x=7n(b5$M>g
zu_^=9r$hF9U}xZhotEIaZrDraV=UdarU=@0i)Kz*!A3}8%Ccidp&T~Ijm*X8ErCK|
z8+i${>%!Ym)6$a%%;ZpQG^}5SeBFU7XB}r4n~X)F4tFo01?#qb2~KOO&5t}7HxXp^
zWj<!~oblz!1oE0andTKXg5=YyFn-(NV*Qk~p})N8p>}TYt&5%%M0&0i&|hw~q5JCc
zbEVooWZ$sVd(hsd@b%5HHK-`I0EBEIanc$?VX~=UiK*htm#>V-+b}ijysZ-XzJh4R
zfS1lso(@D6R3SzKWQGQlpw~Z+Og=A<B66D5lB3r+B1=b4KJ1~$K0CJrm=4O=myQTA
zjN}<L)rZTnoo%FX4y52+>KL3Z)y5k3asjc<-ny_ogM+tYpb1zk$CZp$r*dFzCl1Zt
z#lzSIF+5;PoIP<^D-(SiW2(Nr6&7+aYBoZfTic>9x>3BmSmb$QOItEi%N44*2LM<T
z19Jy6BU=Zmy;F@Ann*S<V54mrdK4p~4NPcqp?Wy6+@`QeeMmf;uWrO~pKjqO^Y`Mt
z>{+rL$TyE*WM6<0gbftq+>H5DIux*<P@5^I^AhA@nt^?h{G8Gkt7nwtEp$;17vOAH
zm|+H510Vpj7yjTv+9kT6cV7`hFf4+!JnM?eO?^rrL|i?$4GbvIr4+O*mkyvYc!rw7
z{b`=xesn+7mYl&v<9eOVB9rCuzE(Z7w4jM5aXt!fX^&FKo(|_@>?56jkP-q>lrQAt
zxp$NSh5DB6(M5D|g2fpIDw-v_);?cEguQh{TK2;ybr?D#cU6rVUef@VCCz~SigffX
zB$?p?xkw#AWzDe-{lGpfKh|yMT37>bV=w5Gm<E8F<kT#Q<it=R*2vl&bBA$79W3-0
zEP<|>%Lf5gn*t%g&eHSHv<W^>gU!c0#@ZFB1^^FtMBe2vArqnSrE(vXvmn0A#br*&
zh0H|Dqqn~hK!bS0J`(8NpMeAgn$w@<YR58!z67mVfMjt$CBawCx(CUBK06BmObzOr
zJkwnDasZ|elZN;d3?GxqP9_Zy?lsDIFwGB1b<nY@qemQa6_8WSIZ*^2jZ8fqu*o7Y
z3QV4_T#0DIB_egVcM=~Qj6qClZ({CpK^IKbkU1pe=kGw;V$&GoFVEy0vZ^8&gJlVQ
z)v?i6A#6xl?hvXa;5-j&t^p8n8?f9w6x4#OiEfv22MG?=<IG4n+0O@$=)HU}lwpg!
z9Y;O(@YL;O3ZFJFjZ<QRwHbW?ZCa!pz<`NDpDIwa$4AYjROqv;r0Df(NZWm7GErUP
zqrjhQqF>jrr>aEI$412fS}K$dU^F9T0K*_Th=Rpih&t36EuWcUeZ*^wGjCJ!0jt>K
z`v7LN#vmH$+WEj%ZMsMCmW^))h?Jfypa#~D58{m0X37Z{;^rkjc)N4w<)IcQ*i|Sm
zZ~CC4v$LdA-MfHJ4!mzizHZCd(YFf5+e#64Vi6t0KHS93pVlX?L&joevw7;)(?Wvl
zRFEnU@1fv7A=pO?_Mh}<Vedz~wn==uUz#fh2)_zcJ{S-8<8W^9xQd6CsYE<SEJYGt
zUz5xSCbTsKLu2MMbTP4&ydxCt(kB@h(HB(ZLz?dpEU8uF!+{8gP1a3TCPjOpCAoG|
zSnYkx=5v{}QWB5lfS?dig%`TSsw2+M|Df#zqC*&ap~zcm(Q1s>krLG9A~lfo_;s4X
zaUx8hPG;Rho3X*rNV>X>NL+3`1k&2(mD-F^ZdMjTT<8N}SC+_e|F?3|W97p3S`i_d
z4e^#EWP~3x>OR~u(wxAjQ-1YTs;U>$r-V)Qc`r60Hj&X+Y78Vb+NGbr*qe^B7}H+F
z4$qHytwibO4ydK^5#}WlMn{X$y{PV^_W{RdZNSfmEv`=!!3EF&VU|Htr@a8boaPSj
zW%*FFXoEHebml7a{!P1zhI@F+HVMS2(e;*7NTOC60U0Tz09jgxc9xIOh6PcB+&J_S
z2@kA`VCd(9(`<p5Cft}Yh1lBoW)P)Fl<p+(2ZE45yM+rok?tS^%N})i0PVsTt9$by
z!)PaHUR{Cog(Z2ZO?2p3!+=JM6-4q=F779Z)?6;=sb0WE-x($YhEhmJIpTmx18^36
zSe=iHboaI-L;}zTZ|O28{s0_=pyc&Wqojv<SkDn0c!QpJ;8O{lDkmGZ1jCh9Vs*Y>
zet0<-eeH{ArR`xb!Wuvu@8tS)4B_S|IDhtME*$Viw6{nAvM9lA7N;O|>=%FM8WD_A
zf;zu-ka^1h%0hxWE7i%+P3Aexwk{>t+=WZr$21l?<!`c=qV(j8107Z7RZYs8$u?f_
zlQ&{qtbC_>ksOr>iqsXNmZU$X?u$jCT48jk#&!bDm5Ru+L^YGs^8=vY0})PO6Gki=
z2t`Q=WZCkjOs0-6IxFJ*mpyzU&}^%ts#WW&Jf@BW>`BZ#0~XUO?8S)dU;YqTD2E>a
z07hy6k|*S_dUTSL5lL)VRCO3W$xGJTqO*~IsCRL1d(MS@gb&-?yzZ}~W_O9Nzh9`>
zK<T&N+JBn)Hs?^kDy|OFrB|3=+|u{9KYholhPXfb?_B~BzOXxDLMph>|8M^XasMTN
zk_n*KE*Q%*zw!9Xl`YFuUgAYphM)Y~zU9*Wp1%u@jX*vetAPjg!W~bKl$G@M9B1t6
zDE;Y`pm(9?io05R*>Y3@ZS&L>N*oZqJtM*Bm;2R)`#JmP4|yjT!!cK8(SMiM-neho
zH8{pj>VyK;2`s<ojzthRZEG!cN@*`MtqWTZC}P*yuJQ2NpxXpYuL!>fd`(|4Vzzb7
zjq}Xg(buBdJK(H}TdqStui8{NNw1YAXqxukOmFXO7<yMyACx;@xhbPEtM4^w`?kC7
zd=!^y_j*H5Vep!%FHOs6Nz1o;D)ue=bQ=CMXYxe9Z;!o8dHSE%`nx@^w-<gno&G0D
zE9#$diR+hRC#fk>yWL0pi5c7XJ!%Ym{?D|<eizroKO5HWH5fg-q-(>$;ne6w^tNx+
zS!XYXy|MUuXz)RhL;J&~M2fi_{P7&kt%-}<aO2_Qi>{9Cn~Uc;TB98QPn$+S3z=~9
z@YW~im#p_ZeKW<#^b%#`B`XW<xHqZIF^|u#9wywq1QZAT9v|Q2f4KI{8%{#ql<d~0
z1KL87b{6-70kB+{@Gfzi-r+&<>TVZ%!+hOX0c4O|azk4o+8zf_2QI|jbrOI(@q(vE
zy1$J*eEIAce&+;vzgu~r=bNvtNBCAn1L&NJ`dxEdpLKupEDNv8F#bL`zTscfBL~Ps
zGy1=$UoZH6)#FlS#dYRjL8p7fxduZ+<qHnkWDCTVf#hU?#q;*FJww|zy)Egbw6E>j
zvw35%28pCSw_@w+8nZVj3`L1>&|A*(@^ZDTf!y`m`_RXdwCDGJJrB8mf3$r5i^u%T
z5A3K(V#>d6$-R%CWFPDuGu^Q+T<_;=cJ_der`-4Us(FwsrTqOW^k18^ms55v6=D8;
zQTotwrO{gdkiU03M3ye5e(@S`!yt#1wa+>ywtfe6g`lBKTMID9L8Ri$l<$WKJ(g>8
z_vY^V3~&I(y#&xj#4wivobphF@qmW_A{(UAwb?@0N{TU)kQ$w{EZO0RwkV7O>hWP+
zDg4{a0<na9w@`EeV}j7oQVM#|&5_~1gCHvWsVO?wkU@qe*&r<8>+zv>24uhwSXvIM
z(^)yyNpv8<iVf<j06kR{O&NXeOa24yJRUg{*yzI!5Wq4GVj(Xe)e;Urz<{5())82V
zSiDp;1m|nW&a+cNv6av<;nppC%-?*+S{)}W3KxIkN9cV9SSmqTHi+z{ErmwbBBSFG
z_U4-b{YnrogWY66or|8C6mAkm*?bP&&<K&`5LFg_Zy7w38NIy)Iwne2HduH27!lck
zkt_iJAFmaB205<@T{zs(<;ftO4JyMkSMG81Q0SEU_!yC(gF|9FC0IuRkk>el3u8Zq
z{T=`#zB=4YCTS;vTts;;*gQT0>%n;}3CSyHe``FUbQ;Rs<LvMZ@KhR@2<!v=aW<dn
zl;q8J(s|$*Kaz#mwArvpF80R@qPBwK$HSnJip^$QG8fsDvk+0}XC*LBhEx4mbxIJ@
z0*z{6ipa*E4YElP0<1u$m!xn=oQM59u!t%#@$vU%smyMSgC+`4mkYh%d)NT3XaQ3(
z9R>5DBhwI7X{#&c(FU`~q!9fem!G~gg!FM~d_j!_LfF<wMAbZGd9V=<tMv&j0PCwr
zdUDM=f#rueC_mSeD&??&;<x%(M`tkB3H}jn^*{hRB*6NaaHpU59t_+Y4q~g_9N3@(
zpX4C|J^4@|59dKf5FFrOAi+uqvw-SO3D#6V))pAP)|#*KB*C5v&_H5P8(za?18P(8
zzH8YV?pHC`0Y<`A2Ty7me!;UuIGXH8jLU!2E9dEvi(!bZ04WMPdwPIZc+|Z-NU#>v
zN;E8K&^P0QNAKE=`&RGJ1}*8J4Y%rhFi&5~uoY=jlKJ+?`d$LFRA6?2j+X$G<U!RO
zNU+(LE`h0ts-*))UQs+AY?x)c_c?%DVMC>h2z=uR7FeAPA1jAVWk<GD0p8I?1&;7V
z`PzexWNM8kQE0U;61-N9fDaI!G&CF@^Qr={sK9c|t=vljqZ?g30PW+Z5O=Mv6>?{i
z!L~AO!#q9Te~$SaTwyPoKW^y5H<LIp2JL=ZLbm*v)lPVGUC>hkTX7+)B43yU0NVg3
zq3tmM+KGYj@})@WPgBNm<<>gOz&U+L;*Nvq2aqh$>i8}@0cfkhy*)w0vte&GgqMO=
zB94(#ugei81G|jbWiCpm)q8XpN|#x8pt=#`q@uCeFjGp-)dCm_1O)&cd<{@ln4KYz
zjTAt*Gn@_p6u@kS{ri)cC^7c$PIih5Oy9cTgfK9#7ph9oX_tZT9qp+?`x1p02xyFr
z8`HVTc5GIy)Lm%+E~?S?!Ls<>yQ(JuvdH?a9>kD>p?AF~Y*yqo@aiyF!k%|!A~rcX
zt8vzB2^uD<T0QQps*#yk3G%Ut4#Esz```*Up`O(#pXh5Ry_Jxy1lB%@H{b@nS$R-V
zzGt#kmm)iemSVn=!STC*rvUshWpJ3kSWn)GEaP42(4-g}+X3WMn*<H8wrfL=*`PV1
zDwKG*D$MmsRb!py4kB|+3H)dXYMO<#09;@~lY|dbvcO;&5X;MVTYEIY5$`bowHX{-
zp-<YvtFxAuJ1&EqRQ_i7A))|2_Mp>5ii_6qh9dxppP8Q-xMBlL17LMYu-0=oEjjGo
z<4ql_JtgQWH`Fo$mTQ6M-*!Nzj)trTOlB=~ta2U<&TOVhJWy)7TEh)Tdf@ZjMp{Cw
zt_Ys8)+VcaY+m6J@CEdci1%JNsE?DnAMS|sWx+Be*sg(r-V#~;Kv(glr@?xn<K{9r
zaVylK@S2r^ZvTPY^Gw+q#b(=^I^pO`j5_NR2l%>75_CrnYDrz&55ab#>VPV{8tw@y
z-Rdd5SJ|lR@^rruec|*Qlbg%Ix>m^j#~Mwxy{@&%0a#OiGvv%K(gP}l@lkZPrp*b+
zMrLcX8M!ZkizlJ;F2D?jN%;YVt|Y1Mllf1#(d5tyUvrir>1VmMHFvR@%p`c&X#)zr
z#m^!oEj%JL!o4-k#lY>%c@kM<9+91HToUnD=84b4I}etF*8t<VPi|-d%pWn@&OkoI
z_S>+V{&f0YgLO?K0JPHDv+n4^-wxd!LucZ<8Pa+Kx(4+WFje0AH!hC{7QI|q1Dm-d
z4+y0N$03n{=Gvfqz*t=gnMf<iBqZ1=C8haUOQ4b%Uy#Eh3abl_14g1#1QBxTGI_Yw
z{V;iSS0*C$JQYyQx;UIat#i)iZc9{0arj%}zy$tX1_be;@g66{%Gq-Vq}3ii7z1?D
z6GOiet1sB<%SK~bVqj?wtf)Ym47Q?(Kg%37w^0yG5vLr6s|Z)0oz)jrd=}F6wP6ER
z*`=-X@&CM7)Bh@cUnMKGLHD*rPHH)%WhS;sN_}{8+c$NArR%tXU5-`KE?m;CU%JMY
z9w18;|73EFP3D?=P4O>A;*VY!S9eXlzwYi+Eoq>-!=cUb{g&C*WpVcPao&&Oo=&b^
zP!`ARk1IaD#`;j4QU9ILvc=&q<JNtTD?1-=<(6)+#pQ_qL>MgxtDgAgYi5zF(7Zl*
zyW6_?=A^~1uv8%Yxp_j<RQ5*Nnh#eJT;rxo?`E^3c0jT_|GvQfa~jYSLe07x0@OCe
zZ%iyGyO$r9C?srhP}?X7oV2E;OUv%eoJ=WQFy1|ta(n9jJ9Mh$t0}9MaZhz8M=X;r
z*iAibnopp-TpjtoPPSm?$JYn<)h11vHZ3lTTfXuB$f1Wl8y}|8?hVJq^~Y_|xf;jT
zd!%x?ciQz)8=J5qaHD<w^y>2oL$f758>buJPkfkkU6V?9O%vM3opL!3toxkx9SzOR
z;mm~FPSv;V{FW5@3QS#|Kv}T<k76ByQqAd_X*vJMF>1r&90EaJF?BO#x|*i(m8oq%
z5fSj@(4VJM?BwaE+l)nHq+8QFt*5gI5PA+&b4`xgc;{J?vR~5XFclR%CMsBY-$FM7
z$Az{{J>FzD9h$SYr2!gP@aXf`hsr~CzJFHR=ERMgKd}+|-g61n%${^n)y#Y)fvRN;
zzV}9_`86&g@Z<L^ce4u{!yq^)B!OtT#dG@ZnYfOVOGk><+*`-dlV(lYJ+yMgm$-L6
z2zv2=0&qw!HUX7HQTU#`Qzzf!Slo~>r*mn>Ku0Jm`vgSY9M?g)QINWA&4O`);Pu8w
zfc#Ua8xUTHhFD*>TYg>a>0)I_k3p-zYo{P}*}7X_!>_1ou5Q?Mv27Rg<PvLD(-m{N
z=_G)YyaN=AmHGfJ_}$oZ{2%8Pnel_KP!VSGu-mKQtS-EBI4oPe<oCTuZ{gmI&KRr`
zaUKzil~KF%w_SV?ZTlKDl#>IpvDBmQqEIkXekqW-X9Q*1XP>Rfj%Y7(XDWa@jq}j$
zSoqKP6&|09VV5<lDUn-iLvPQ-9>6V87Ge9pm{TMccow8w4V`%r<+$G+DcG340MlOp
zOo4Fx+xwVOGo$42JyuKA6-)bPt=mQJc*#m_DfA|}^-q?$c{`N7Y{mF2-i-Wtp@S-r
z7s{ePx8{d(%|E!`2UfqxC9n~Tr%C_t6&JZBGa0VJ!3HAkBeV99g5#h_+l-`nID<bo
zi!;Bzd-n+t&+jzt^z{9Uzk5&UF4~5m4AzGG1_n|LEx|+?1eqv{?UeMTby~rnKuZ}I
zlsL#jq`_=x85PR<<Vcq8Oq??@kOtY4Y~v4~>)J{g*X9}U*N|oNpgM`>CSn|U0J-vm
zO8k6YZOG@yN}un8)Y(vq?SdI$G|XpsONZhkE$(-~CR|t}5%-}1{>Ko|mpQDRkZXN`
zlKyhk$N)1RI#~$_dQ$jp4SaViWKj-#mFv(BlSCK{+T6>Ot;e8fX^|Z~^gS6=FD-ML
zE{$#I#x`)Zrf_U*VTmb{;4+O2>}`!aoItFVy}g@(r>Q+l7wu{5;XyO7Wq4?L8fzP1
zAqY!Aw;Ox0(FQD=3TBI$t2yFj0|7+VMs?Np>~?n6H}i7QvTMOPSX$fKQcR7F$<EU?
zddz_R=oTLpeO<%hJrs^>B<5p0Z?B=ryyI}P_~}R~!G5)0P@^ey3hlKbw}+#g0(5Ph
zXMafP;(Q}?#I(S9t-Odv<)54;od_6$Y4+U4k88(Ev}CT+m=4oI&&cRwDL5eBuaHC}
z0|4K&aM5;;P04&EGXO>QSY0HMH0(K#w^~?KBWU0i>9knK0;Da&#rjXBYX#*ZSdC}|
zP1D2k_Lgbr2Jy@2enHPkHQF*6Fyyn(Fc>_QTQ1PT>$t8L>T{mTG4k8YewMI-R|r{W
zn&s9F4(6{vO-+jyKJ`n%8=wG;2t*fWu?llqR-TA~j$^H}YWQbk%LrKeNO#h+D@AzP
z5<8asy}axL+g&D^rw!#1iHtM_6<6+3IDleSef7cFgp%Yqy8;prYZ)oyV$_k^rN--i
zlCS#XdWo+Z4M|QhZ|)=91?y<3PXeU{kvB66grLu3H1`>X8OioVQQwh)oh|Nch+sOW
z6hPp+3NF#5Ny5WA7XX0TY2`rxhmMwl1kMgF%*6rfz68wzQGx_3XUo?(>5xQfpL!G!
z0gU86fXukFgKLeVC0x(~OG0c{RFxP;Hw2g@Ki()EgzaPRjqkP2Y7!AVL^3ONEnC$f
zVL>N<5T9MF@WB)MlyWRR>1!#*OTvy)GfGUpi`Nryhk~7E<c8{=6G9Pg-b+WuQ>R3#
z0IbuT|M5&SR1U9_9Hivp*wZq3AlghG#nO~>Ax8(Qj7u;KlKO^W&(Q}^_TI8Vz<xp@
zQqP;D^RRC2l7W6QODQ%Dwo^ia&KBtqj_dN$2m5#G331np9*MzDYNGraY+c}AzfDhv
z<O|tP%LWJrFLiw&-C?0vdRs8d)j-_6JR%yS1bx283IW1$tnema+!o}6_L^nOkq>f<
zeHhQ^QLIMBd8tst-j=&~4^vQt!@1RHFF^y|PGSN<q)eZnX-tSpA5BW~(R4E@s7W!C
z%AsXXm>@Q2!xt#JlH$>!Mlzjflp3BD#$o6GRg?ITO{Jeo;cF4NT3jOZJr9k0RWI5M
z{2$KVJu0R)e*fS5-g7?GOy_em(`h<SHPcz96iG29gfIyurI93rJ=0N<i5^0j2vL}h
zLYOHMMS~E+NOFFjaprND?|weN&-$(P{r9_8wOV_1*t2Tyec#vnbzN86mpPQ2BMjwv
z4v8lm5#(#`5wgsAGN{Y{jw8{k-ntvQuQGn+H~DGJRGR4sLyg#lY6Iv&l401;E)WA;
zc}<cy0}6@>%szooA!0LBXzKPNi6zC`KAkg0H5&dwBipt?hi($)cdN<%Vl_Qkg+<;9
z@kYZaaiIt#{^|wSe`1N5`Go^T3dHFIN^MYAbPlV4T{=vp^g5;vKm_Yym>Mi8WK@e0
zHpKek+}&u?$wD0R)s)%KLjSQ*08St*=1C6PzH0);-=WGTUuZ@&i{LY?CdBS2H;l&i
zzwX~v1RN?O)oXEM`MsifN_$$Ta1Ip>$NQsP>&#O0HliZ$h${RfTt(=js7XB3&qR_P
z70~wx3FZ}Uut3TWKY}g4n84I`qlh2(HsQNe#!#{HHl3I9I64`*NCjeds_+X{09v9b
zwk7pb&h3QfIAN_r1>tzHh)s)RIfZ=x3*vt`iUA)UWCa|VBo3Hy(~Eewdx~GM15VVw
z9Qj-^pOB-Gk;YiXcET&<Trn95?gJL+bg&hm{F{Fx9azk0m<BvL`*z8oSWVnJ2eHVl
z;FLCpJ6b!aZK}oio;y-p25T}+#>G2eQxgwHD-C*qKdg6<;&?ogVUZBDaEU)_904;_
z1ydy|zswd0&sF%rN$8Yt2^bC)!&HU}iPS*&dM)gY$DXdrJIw<oJ0Ar{J*q$BiT&F`
zA@t+ty4O<n9pGfWSucEKhFu*fD{tBY6(TPm+Fs6rT%+DRwNb=R+A|B<yg~Ie<_(JU
zabWMLjQOSvv@(N#io%di-4EY8vp5QNWGqh<d^>~f*XuLlq>J!Mh%eK^uCvgTPxE%_
zHYPSUuu7j=HKMz_hv3=U9zVTZZrT7F96ctCLJ~x?daQQ2&+}Z45EzA)Vj-ScHUlhU
z6dp4(JGx`rYgmZRg}M@3SfpwCAV`Al8&6#D#weWZA+NiczH+sbAT#yLUi4W;yNwUa
zbo$v9L9tflQ=Q_DlMGm>;$czes-hKBkH4AMaWrwgM)MXPcY{V3M_usS24^Nv0^u^K
zjg^kYd``Q2;nY8B!|9Kr9|WYpZD{n|Til|6t}y!Q?>&sKywWJzsL?))%RqcI*FW@G
zb9GX;OXY{s1-};G$O_Ezee&vGz^JpR7UI*~cI2eK+sdd|+HGAq8<|u4oOnispS1Gh
zzjBYIu8S<DB(Ych)td9zEMyWy7fE(kBrk!I%&*Rzys#>3>td_7HQjUn<oHegmlm)h
zse8qfkGqdJqy(&8HaNx3buU~0>&1)in!b5nt171cx|j3La?s@H$8D$k>n{+5>UAZb
zYxjhv#k3CIN-xQM80Ka>b#vh0-WBefj3<l+Wbf&(b#C+P9!Z&#oqN{L`Sa{cv<J&<
z9$v|RvKq1xFKD)SaMx-V|HPzsDdcZ^Zv>ob-S?$y{Nm_mj7s(RI5N+my?3uBw!7{4
z>aAnVO~a3_=6zo8cOz{~z=EDvHXr`hHQJ1J+_Bu{+O_n>;!|bSPh`9NszPl3nPY8p
zi#Tyr&@RGkeC_1bj++Qctpie68T`z5(`2L|H<MJjMnmv!L7cC9l1XC1+jvi^%^B28
z^|nWMN)7!g|3F_vymZw+hKkNzp`Ua_0cPCrZG5}n8ENKsaEX%(g{owV&F3tc;&2*e
zlWx-eUvC`7KV8{JTXyYwcm3o2@ZmSz(wjM-0|ln9`=a-vJi2vL4gU4~#(!^R>ffIf
zKgq5#<Lz(zY0_F+Tyk!S+H|U=#mlW(!nClAyNq<zaMn_z#kVTH-Xw^RZ5{0JDDSe}
z@YhL#O~Z*LX&UrTpb(jr)#zcRxVte`fv3et`*<O@e*>s3;X>}zrEYWE?kzbQ7gctj
zR{UUl&iV7-#k{T~8AJC1!*Gu2o1z0K344N7?_BXK9y+++U3+QYRM$W>@yhA5lyzcc
zaW-Mrw*9*!A5VBhmk4X%m(T%seOJ$&-gDK*yVh(yhFLi^d>bK>-~;<W2w#Oo*1>Vc
z!1^U{mrM)Mz!;nsC`Py#X@-Ia65t>No@fM<2bpPXvs_@}Vc@SoLUeG89C%<cv<w$7
z7VIKH{23+`9%L$qU#_C!HT)TOJVGR}Clp?EA6P>OS5D$AhNlXpr-wp$^+-q^bTb9<
zRLK&~_{pn8g?E<M9)@i(rW^bALztTC$5kS;nlam7iLC^(5J3U*II0|X_A~I;GMgkw
zXB}`a1V*eVPa*K=#0*a)GnT0n>h}XBO>G6Pn8YfAFhCenw_H??Of=}_96f{=Vf0><
zpb7~Udi(3>-fak-Pi5=E-IZG~k~ak)`&R|nDnWn*1M~q=1l{FeP4CemJk!QwTa4vM
z?IGA0qwb^>TRF~*6^rLV2JHx<gAX6_?W^CcwW$0z0NA3ST}3hz`cwRnk2#wj#l!xp
zsg_zu{1+lXIb|rAD*7+lG(f{tso)VgM8bi8+b|6qgfganQvgp1jA^ZOEoq988ATkK
z=Kv3e$40W*3_gI_Q~|WqE)`}9>269eLoh9G7<SNjnahzIcR&aV_{wm%W}`0CDN!B3
zU&YV+2>GtsPUJ%*fVfJ+&4qgNS1-W`3wk4gl6sf{D!!8amnn-zR3J8Bnm|Qy;6Zx=
zp>8EC87?u`LgT}*2MaRdO?%Dd`omLAv4JpF1dTDToCzK%X3NJisUx?-kOvQB4#73)
z2o$-?Mh65!WM?z*Qve55<!wL5nVcX;z73Y*u0-J*skHDa$Wg@1VnU^Nrc!uQ_h6?6
zS&v%mYni*$g8|z=18j!{uM=EtG?*418l>?z-x=V$bUR-{Ua3X`6c7_y%F)6$nu-Py
z$XJY+ulBr#F?xJ>MGx(p5pp|~d#u{*fw90+v?b|wp37P5V+`1f1iW~V%Q~U8PM?hl
z^4<bJDz+k3c-is5N+&v(Va8(_#>zr*TM+XqTzE5dsT%SZ$6G2OcO`@^DtsdVE)ne8
zjUa9?l?PiW%sG$+M+Y8E0>;OYp0Duer>R_Mnp^N52c6Vbff=BYZw~@oc%e>=h!Zcs
z`xdYbyTH;HY@BNA%5qRj*6Wtl`{C`W!pgJ0d<)?mdkkP+$MsFm?1%&|3dj`lW-A1{
zFMIfslDtU>MHt8T4Y9mkxO8!fIm_&Kz`lI9$_Dbp$A^op>JTd}F!2$cQ6dHWIOQ`M
z=0D<L!GaL7RY&;~J%80Ti}QluVBHM71i0;?JZ0(ayrv>Es>v=N<lZ`%r;}&Dp2C$Q
zv)M6CD1)fN6lgy|1L7t@>drU?Xy7^s>9`ZKbp7GM=U}0fVUn7-aMYHfFjLnA2$YDQ
z@~;Uo!T^=ikHSMD8CXn+H)qr#C_IyGAZahcSfwA&?UcDiF%|%zC)(Eo43-|1c$+I4
zJAYW&=VH+L1Xm?uDR1PXk?vynrRjdosC-%=@Kn*pg>f-H<$@nzyE?*82c2I9k1$|=
zMY5q7nOrWj7kNJW5dIO`!I%}-fO@oifCV~>1G>OI0KRQetXtn2_!Dw@4P&AkHf5sl
z5UWPmCJDi2K@>>u?8gH4d=eZ{Fi|$YTvFl+?Z--OdUwqI#DF<U(0SaQs55K#3t0HM
zjibr3pa2Y~W@4TbjMC@920X-)2ix%styHlr1_q07u9kDFC*?C0&2~Dox<jyy7G6{h
z?4`g~1!E?JFDyuaE=`7KFA`9#8X-$XCszTuT6p5T&dOUw&e6b_XXq+I{DdI-*j%FI
zzsO$!3#@Vn_E?i5T8A}aI7y(L%iWnmM70m@Sh0`JIJeVv0{abIWqod7F7or}E+@I|
zT6b`<V$tvPuFwr7Pjj%0@^e((!EMzrto!T9GpOKa$4i+56$N+C*V{pQp!f(aUtQv;
zgFXoXOLBm&I~@7e|7JxiE?GtBN`V=>G|u}H?=Qjf&$+Dgwo2ZU_|;4quu(X%dNWRa
z;@}F7`IZ2CUZ+4ynXxCGRiJVU-8V4Q?e!}ygCHs1wektO=W~b3kT3yB&hVp2#>Z)H
z&S`2wI+T`~|Fx%dcG~B!klMZ43hQ}INWVt7avu+^Yy>l|VWnwllS0$Z?*pNsmp>hi
zPxZ;ZiLRJ5uzX%YT0bGp<}1Y4M#cWh|9)l}JVgT1deUOAxQ|@jlqvcBEsHXzcV}<r
z*`w(e0qL$=Q{880EI+)I@7(t-Ewg=gAG)<CuD5scx2v@y`fJ4G>>s;RT|Fuf`CqrZ
z-&^=@1?%Ot<4wzt4qR8-^tXiew<Y&?6!dr2_MhwO?;7d9_^V%KGteD6a5;IPw_u>J
zcHnx~z`)4B&0hnWfopV|8$-!A?)~cDyKC9}f*akxu8;h>vA?z(5dX*U-nDdT?aenH
zwy<_hUa%PlZRg9mtH*D=EExQ5b7NcP%8RozHa(Yn_N1wE=JO=JI{zC#y1GgGHMHLu
zMZd%qggM#g*S+kBab>{XzBlO?ZrMB@7+-b;Gi=zPfb;mK02{ZeydTsDpfH^~#@x`Q
zvBeDU+xmH5UAM2FHf`tpq)d<ZPJX#xpl8D9aL+q}jryVJ8`pXMIq|E36*hP?T6P?d
z?M-U3RyZ21!<-EDe&V62nB#qc>R0HFS#*}26t$B;%X?xEuHf3o%ZwyUz8nr*+yB+(
zUjF-A1yP8DErMA(T(ppr1n?y`#`ltL=;FT+=VkZTt@}MJ&r<CukQhkBYi%FY?0?|=
zm8J?Q^wT|1oP@EhYJD6yI^kjc{)hFy9~{52aPRMj%Kegz)hCYq3wQhmUvcs0E<Ea@
z$8YQ_b$EBTdBTYDaaM)rU4^OV-dtqh@yN~hBO$7hm9LbS7d*Z<VR6&FP$vb+N%Q#0
zg~#RCG<hRnZ#-~+<C9le$9!ukf<37#&(El?)j#>TVB`%g)suN((Y-l~mYv4}qURKY
z$Lx_$6STGqdgpzk-MCI$nx`FPV1AAguCR^d^8mN-+0-oU`wk~O<G_;S*@GI>f}a;7
zW)6BMk2-G}<sKMyyEy9cWYp`=D9`S>Z`gDG!sq^*o(CRy9(-yvwgpha+|yf@FX|=1
zp6O<r#`3p?;x9X@aftCBnx6(Usw{C69g8>sg&cS>@8XN(CodNMc_FqNU%csgD~g1o
zj9Z#5e{3R;sVW7xpu_t?2WJdaj^+KiF(@jD)&ksIDCOB8H-|FbM~^&=lq{?WD0o@E
z@Xp|I1j9*;7$)dZ7!etN`s#5o%e`@*K29Gne&Ek*h25J&VQ=aezKP%^xS>cOBl@?8
zEoF`7dDmk0iD~;+zUkQXw)4Q-a~Izxdr|Qyj(_+{>aM3ZEs%~44!^rzUB7s%pnd-8
zhU@E-m-vZfKjVS%xvTvL-v1a$E6KUM{cBIu*NLYiS2r}hAOCYB&+JZG*UfR3{8p=W
z&8ELUo*MYF;GaOVj-=$l@!q$;p8WIY&p*(_H@j<>?Vj)tVf)|G@pR%PU36Bu?Lr;R
z{)3(82a`n~%r<|pIQYTp(g&NTAMETOeW*M(@9#eIwX4{ME1NyE^n#D3HkBU#Tzl@H
z<$dtlim!dzi+?XAT=VmW#ImI}v;V%;o5t<9%3G#iBMA7EG^O`Y*T<P9H>ne@n^g9v
z6)YK!>y6&L*y=*^yx1#sv0nrMXFy)Y%#qIvCZ{gY=N{-?a`awWxmoXyuYLWqKb`K-
zcJwY0U3$>soZ48sX3pvUyh~q&6ZcuQLwxzXn31Jl6`;mB`$^`4lN&P5*TaE%XQcjx
zfwK+BhvxDEE-n558KVv?Z5Q*5CbuK=L2L@7`~IhN1>@c&{@M&Dg?etO=|jZ3k(zyH
zJS8gc*34}m>-7J2lu(FRG?4c`hF(mUx3_BHhR}qcJJ?sfQ^P|LcU?}>2hV})mtKEN
zan;=3(ga-4sh*eO&3Fzkgg=s)h<9o#QyJy7OYdwfpKGav<_L_MoWq>Q;mwm;_8F4s
z<ia9P+afHYw9JoUU<Fl>T`3$Fc*hpNblp=<bmVwB7P`8D16!QzspN(V4vXo2`Z(3q
z5l=kcb>ZTrBDw{?(A<4T1JTM5u_IR<ryJWb?KpmPfhDUDa=i=tSvnf>jrSKiV3l>A
z#>7!KL$837z%;;*=ffpZm|PQDf)XhqnHonobfSkQlT9o$l52dTp>{IU4CA7Gt`wQQ
zA_#<a><Bv3YI<iM>vZo{$VkwDs(poybbE_n1=9!Gl5xr?NiGTR0Vb{sP0ARu6o|;>
z{Hj$wE2+R!T@7*=DKb6DDm1C9ua47$H*|7NCuyZl6kE$kh1`WB!%@R+>*JoK5Xxx8
znB+1oOI>L6JmHnN`5A${$}u6iQ#7fkl96uQ_ui$_mtW;%HsmRFRX?RMab<nzVrfx<
zgU99l;i>8(nz4<|WKUi=WMyvVkyN#qaEwr9uE@dGE@X?~c7e>|*8{}Do8OtfO0AAx
zXF4@DS)3=6A@Sz*QSrNvlyqL%y>9~hQ21P<5C`t}@n_P~)szNoedTmg(1WiZKxI@n
zT0#%qC01-tfADUHiV)&~nU<gb%B$p5;gmD*Y@JCV&cA?h4Y5dK-6G(-B!{THP?VDA
zIHu9V@wT}-84+)y6*^iJK;3i?G3Kqe7-94XgAz3`!FwyzV_<n%i4g6Z7?WT_nrx69
z(8iMDJR-&6<UyRE55XrhB1jLDl}D(YA~YQ5BN2t;0wmbxj4YR=;cSycD8Z-=l|c<f
zP$Awrsid3gp<z8I*wGl>OYJ+w@D5uVZzrKJT?`YDAw>_)JDO2wV494=scvlyX|-gV
zW{m97z&hd%awTdUrkP<T>Q@*8433E4BfFOJx=A*fyl%SXJEa4~KUt+V;LwySNVe5K
zB2tP1wSa<%<x&<obQsVC?;eDc!e#Ov$T~?9aU{M{u4fW_l)imr_b%}yiqVh~CfX%2
zy6O1N+bXK*kg|u&YnZy65}=zeb(bs_<`8+AW#I-)8W^Jl<rgfYUVkH&QiHw(2@PD|
zp<r>L2gauwb*f<Ez1d15vU}4WDbAr&m4mY?VoaiQMH?p_dxv3-l;Gh#;l%tFO$;Uj
zW8oIoj_cI~uP%`lr=c2EUt!_5GMr(F7$F)psf=m1hqaJ1k|ePuxzs8mX7Q6$(rof&
zNwk60tKaYnJB5*ol6OTRqa2w&Dg&_<y6%VO(Ym~;!NWQT@&}@6PY}LM4{X`wu7-Vz
zlwhCX60HnjEB2y<pg^&HCHdP?`APy{Jb;IYs@Sx%6ikk$a}}a>bU0enO|W!ScC+^`
zWyo-@!wMA?ouxq$m%s(;7jP0@k%-C+GFgyYegeR@dF3jFEpZse{PbaoT#S{lP=hd*
z%%DvL+#A%mWg;okCd6ALp+xaGIM{?DW`SsTnJGjQj}goiyGb#DP%}=kDUylOBhz8S
zA~9^nz?kuFh1qZ<gpal%JIdQ77f^&5O?Trdz-9ppH#hPTNRqH<j7G#MUqux%5Gyzm
zX%IiyEaXA>D<mI3tZK~&RnxRb@Lpw7(vu~HmN?H4viL4FSuV2}6HeFL`jLB`(+kP@
z<tvcD2lohdvaNJ6L{-i!6ve}4j_4#u>@Pe|a60mp7fkPy;>1EKnI?ptxUtAGOcLl6
zuM?o*q)4q4&tt*th9Np%<aXo*w2+++IR`2Ma}2?=ze5xu8a5|$N+PjAdcYYj#7jz-
z6vko~mQsqm*3Q~4O~fpkh3`By1a{|afI9|-#-D(!d3d5&f|{mZK>|dmCzXK|9M2${
zMckpCk~xuU6$E$TVuIaS=zRSu#K%I4lLtw|V}&4npV|O}Z_JuTVeas4qN5J$s&f(r
z2a>5dLSR5s1@o7yDC1*pMni5~X1-oc&e&UsRb=51i5kXaG)5EFnUhR>xePP@ma~W)
zQt{un%@L#Ae#@PKqd)WaQYXx9#kpt~3yE?d{n3cHYHXqLwUFr$)X29`(Q{3vheKlI
z+&L-YFM><D(Re{%RW^=?z7JZK=KYF8=dF@jC--0vDAh=&2&^<v)VqBb(mI<_Tbl5I
zVZ&T{GEZi#Y(NBkY7$=~vr$3Sg1+c$%fwRiOfm9#U>rm!uQs1WTU;2|4T7a)nu)f;
zSgoQ^7>af#fHZ-n#0)uPXz?vxnQV2%Y#rFxi4CB5;b3;W)G$&t6Hii8gRwok1~N5n
zM>p!{^Uw`<n;B*Acla3eC79%~+D(|~o(wT>*M%l9A}prlD5=q_7I%@;)g))iX?i3!
zbP%b@lXdrNw!NQXt(`*xXWMM7oN*pW8r*e$0D6msvuvOcyhNx$D2jNME%>jTFj3SQ
z%^!xSiD!ZJFrOIZONfhPM48M*&rEF;LL%m{+16CVD1V%C*=Ea@*;>5RQxYO(^pR_7
z&Th-vLCCx-CDpQUZrCky(_SdgERcXiAEP9M%BV|(F`Kd;yu4V{VQd27Nt4u<lH}8k
z63K#}O7uJb0x%W!+_sRYY5w8`w6;vd9D0Tg7Flp3Yay1Hir3WXQNun`^!5Y0=mSnK
zAl&IF(5&LZ4AlDaGD5Ox5-y2lZE#t<!l9E-Sh`vk7T0#Gf4|dLzHz&SNpFKpBiRw2
z@e)f-fGj)b2dK`M5xJ15b|boywi=2Zwl<}SQOF9L0$7AXuzdWz9ZHTit$jwY&#xg>
z>7ZBhA?BIyh}}(HfKQhezdJvQ-!taF&1NklAiw57_q*-8CqJj13GDuoWn8Tu(Uz>s
zSEoE!Qt0;xw)p4UT56@P$guWRNlIWndLS2imkb%mkN&-D^*^<#p`%5jpl)-Q8xU9V
zg1DJ-+qUX+SsEHAzW?p=#=~E5Tp?@v#P7XpPJIOWBrID<(N~Ts`$gHcuj#LDuzrQD
z-qvq3db)G{^*TG}^%Iv4Fzj2wUXQqx*vJRJ-Dz%il0xdxNJu}k=t9ruY&iA_uVT^!
zt@Fh38&Bs$*cxQ`=pWslZyTdo;GeYo_zHp$g*o5D)oV^~STY1G@+V#7`2V>+=C1!S
zs2})HH{<u4!UpRt(Z4_Y!P~}<aR~mr4-Zey__K(ls58<*5f2<^FpDaZ4&+}+tN*8h
zsM@yBL65(%0Y3ij%LI6$5QoztVjg}b1Vdun<v9g=Su?JeQhvLTXWplt-%WW`T3`@O
zvh3R+Pmo#-OJA7F%+hC6Xr;ZoC(L}gnfYD6V5*C3<*4j{X4T5ke6!MQ%bI*Q(n8yY
zIZx80_s@{5%Sf;UdcJ#O+)-JB4#^ZdWGDzTg}6ZoK9g!3bv4sU4o<F>7D}L^LnIL~
zcU}@xx>h><+nS$i*V|Z>^yy3}ESuNPvS3nSPT%I$Nz9L>vY&G{W|S3BYf7!s3!IZm
zXTB_TdL^wAiEg%%cGi)h&Z00L9*bNs)QJaKi?R+mkB^h9L}2&M_4%nm!@J3&^~JFt
zVsQ7<)}-5d^uV4PQ1U`1ttoG*DW_SK-!-qeURu!+xVbf{Z0sAfjR0g?s9J0hJp>b#
zkRdi!Wsq^v5Ox_)<l&EY=x4Cl3_5C06eB*G5-UkIkp;fMpdf(6f`FeKxvaHz)sQhb
zvzi5Acf1>1@cET3hY^dZM&}#=Q4vCwfFP8d-0NZ{tfUs%fBg)(Dg&R@fHMx23)fN&
z7_+mufIMf7`f#@PgY3fhDwgFAPS6g=Ya7WBQrF_K%K;|t@Z9AGh#L4N8ghH6WP5(d
zo>atL3G%1RG?(!Ini+b$c&Ud7{v#k^F`hP%d4t5C9hu?k56zzmhGxT+xP;x|VaDQW
z1F2ttA|)7W?&D=z^THoFF${!ao)#W%28C5Cj>wjl$oY?V0835Sr!@!@!|*yvoqp)C
zP@)=HPz~m`{wD(AX%fgR7_T;M{NiQ9bJUtj3dOiHskonx(HKAL4MhtuF;_eDZ$ALf
zMEo@{UggXtq&ct{K#1%$W1p$^@J8X+4d6G9=ZG3pc~E<*(1#%!FDAQ+AS%nn4|P3#
zk8<`3>`($@Ix05-F8fkRVP$ZYa7J6CoVO?h<$kFLOeOVPbj|p>1F!ZRP_cq5Mxn&T
zlUse|e4QhPfcre(42c0GiM?XJAE><XydpmxY^QYCle%_6+vEpjWJ?i*m8oDjWp8&_
znuAH_mz7Vq#Ck9g7y{P96~PjO#emS9N_%1LIf>rCjz1A%*^niRzwQE_B1=R#Z|8rR
z6#lDZZWuplhDw5iNt9=1tw#?`USA)*xBe7^95NSnL2EF)m+A{<aiBlG(cA`EUf+~e
zcVM?Ku+1UFlNY~v7i@6{!b=bf;X<-@A4W%-YL?V3Mz(#0OHkk=<b<q-@9Z!n>Hy0G
z-lmSiBwC&V0k>AT>)_*-y8<Ajc04acaa7$_$L&BCw!rp0qY(KL(r)B^p~OOgYypVh
z!<jye1u^GNG(9}Q{t?r`gi}5mH-Jz}jI3bI+jLe4u^En{*+fh%s>0eWkmPve=p5sV
zbu6k7d7Nl&Cq$&T^i~fPpkRtH<%MZxyvfR|Mo1~Bt_q<X0(Lt3brrm>nBpq*!Ft*@
z#v>hdfdX`&j~LE51ari2u{1>Q1E;YqEt!_5f|a=W$`?~)KVDXOijjtv#`Q@DoL&`g
z=1R{+m+fId2U;SZCnSWwqF4#p1nU+~NQ=qvW?Sxz2zg5c1Pnr?gJ@xJdW&m%%Zw$3
zzSdHpX!(7Ay)K~4c|+^O6*H<do7YEq_`S`0^Ag(5+Z3{)z;;@T$h!Tc71^~$Irwt3
z@%a!9T6#HcM&$f9)4Dmy=g}Vl9X?d)f(<QM2^A@i3O&9rm=q#qxVPudKQr^Ka!}md
zk#uI2g}%c%?F?$&DQnzZIKQ)GLuc8(&hqn}TOV~+{_K=npWP91wtD{AU05i>zOya)
zu~+NQ9{71y;VuO#$eAHIY%Kxb+Um}qYijJgarL0zdD+R3^KJ7xf1ZUV>YypA?So?D
z%jUB6^Uq@urR<<{VOqlUd>li93&Vi-3iQ&3ihOrjI(OsbDxf!QbADU=s6r|qh3ggP
zge1tO4jf@at}L+cSfI{@{NBpQWC~)L*K)_aP3vydudIKpMJ<O5_1_HrTQ&xEN_o;F
z=Vx9Ltd*_%Y54-Bu6Pc)i4F62=6nC7q~K+LrpY2JlzGD!_KHr~xsq+I4&&w`uBd($
zUp}pPHsUBO$;<B`3!zLMAyZov%j?M$p`o1@OoyS9N@Knb@}iuv|K19TyS<~^gbgLH
zcOL#dAHMQ1`IHIm74O1v1$f&~F!xa46AjeTY<kJBxm*DmI}|wz4{do>?96R4WLWkt
z&)M`^N)*q(#M^G_6OsM4AX`?vDSGo39mLe7X0CVi>NqmDw0M4gEn9iU=2w9s57DUP
zq<Ygmkd(`Vr{o=4my^I}dHAznIuA1EL35L@ZGqspSD4GLCtGtpONpZ-9q{C&Y`+J7
z?47=OA9=iIV}p{pZlH{#MC>IYA04Uff`w19vP;ZutFRg6Aw~*4;<+`1gR5E!1BMNp
zCS`VAhL<lf`0fLbCIk9whJlKC(g*o7Z^ku-DP8Dm#$q^$4}M&2Hsu-ABANj)nmk~T
z!CY*kVix&eJTfrEAZN(*MUR)C2n@u|aFrNcboKf5VlQABP$6(-y%ATOb^RH9G8|~<
z0VD#$q+!>s*X(Y|{{$Zhk{~^OWa2aU$SRh(ke0W{%2t`6yu9VrUP!sFx0emx_#hkC
zKpq;C{S04-bs%m$??o##EhxrchsC`ai<mHd3a0Z!t?_{cid)~Sx?>(OzOI5@AmFJ$
z>RM;4KMvl1XN<3g$+mDklf0k9V9NCfBu-;5+ei8g8*4#9V#M+>%0y|g^2eHg!nqt3
z&X9+nCPp*lJz_1E;bdncvMm$u^<Y4FRr#{EzvySyl~n;2bpLgxO`T--G1Tr%Il06a
zdcPOeRgkI}rZ=TQ?}~ut8Q)Tcw7me{6JR@&|Hi}~?vS~XjRp1G*@4(;j(aH)GbQ36
z;RlFfJVcPA3VC$W!BQ1wg~HY?u)6|DoN4j(<;))C<Kikf$P@{X^G|Ua)|)t6DUgcK
zV9xF6eG{O(b9Y=i_}f~M>~k<rl(6U1{>%x79T>>#Z6bFqI8hGlB}jnQC%D^#_g~zI
zk;U_UP0soo-a263<7*@t4H5dcEp_RinLa%Mwz+L>hMmL<_}yyc;Ftw97s<8aS}2Sj
zdj{cI@E8T*E@{9*&Zu78Qvy;RlNa)y28$Thvlcn>!BlACipP#@tn60oWFH2tx;@p4
zvCGmfHRVY+Sp@<Z>7&MG!H~#HlDs&Wq#zCXvmhtdp@Sx5OVxkfTx1^HqlD8R>~Sk$
zADm<uqRIbxETrLQ>rT<j=I+);c#d~DW>_Ipl`x?eB3$+j`E-;ocMi~`1uGU=iNs$v
z8iz=-NY9^FXuZA!fsgf}ZL`fj--#Gzu3(Q@vp&-(s-0tPL$P&0V*|Cd>-(U>U<byu
zv88{J?z+X@wApoMAE>H?wVV8elYMvk6r6)*nZArWbhjiv&PC@lb;xCu?Qq-G#0)}A
znw|37%cc{NX|5Y!6`1>Rrnip1do|l^A^frwyF-|V=&miB4JtC@h$45Q@R5%SVQ-RK
z^jaCInt^uL`<w8Q_#gu@d?4o)`w6&U4VLF3r(0_HzB*gRE(&YI^}H9G?*j3ODGf@i
zt+OyTZicnO%v$sjn{7`!v^Vd=I4{Dk@Hsa~6&5T%=BMJ@=_Xp<sm_mgcUxn~#PT05
zV^*q#kO~CN^X~WriH;x>1(WF-*j~7Tt&yD4!4U|uty}NpAn{M}Jr`43ID8DUss=t6
zqwq>kVgeMbtGoJy%x-x`W?0XDJ#V;2gpHq1<}6?TnRa0hIG=UbXvIilb8MmRsDUs%
zax(DD-Q2n+Qu7Pge}ii~?z^xc2L-5im~JS#+mZ_Bo(QEfULLy)S{P0tB7`Dd+vo(J
zWbhj<a9;<I_+o6lm(Eh{e7a>V<vCQ?5|2$59kt<iIIt<?-rs%<KqnB*%({Qa+amr&
zB*4S?S6BVVzM%-d0{*-Jz7LZGcHRzV27WF^WKIYbF{fJ4Z9{_$tOQ1mHpX72K;hu&
z>Jnl_Cc7b(W<m7*Hh3a{jkr{AeE>o>wXm~y5ZHtWOqsm~L5@66FH4FWoovhYU~};p
zH+X=Fue9_QPy~;-MurGh7sB<TSaJE@ybwRCorjA6@!a*ua&};nTHRBb>%@Phbcra&
zc2(0Ahn`XXI&VUBjAgwTg^82=>>SfYnNunaN*6|x6r(}_L!xW7d$hMZ5U=PV63oFj
z7}+F`G&D<b+pJ-Orf7I^IDq`!FeBhInE@>%#__v`eWe6%v`qP(7q0F>9AdhZDo=2u
z#$a-6w31a?Tw~}Tt@IJAu31|pjB%BNB^4yMyx3v0XC*i*%Vdegi_u6CJt*g$n3>vL
z0sEJ<m+3=BBWP5<S5aA2T~E0YZ<!-Wb0~sp;<r$e-=MkzU2w~68}?E3EFqHlBb{39
z6(ZHou}QA1Lo3#qiHk_XvSNY-moT!ip{@ruFto`e`LL%H+g^>xyrVq)8E+sc8Mp8e
zM*X2%ws9ipAxp4jFjJ)sC;7jFCeZ}woMd89Uk6HezpM(!Pj_NeP)cXrc}fdPW}uLD
zrz(Qr7|rO(^6tgL6FjQ5GQ4MzSdC+iFyal20>{`iqfRu!z^Cl8l#b^HMy#k@hsKbD
zl$!8VV+@m}dP;PQ$rd9bm~NCPky4FERBC_6k@QKVo_yBaz20LCSv6U&bBH4Z$Qi=?
zgkD7<6<?20zGh{-9)kooo@xr0w?#$_*or=x#$Ot<m_p_%jHrG?N?Ekea=8>TPZX>1
z$BVQ=(!qLAxZ4obsDUR}BQ$_EL5qd<iOM8k7@dZ7D=pnyjet-IIyZld5*xtVNL1i<
zAWIf);2}9g8UPU5?!86cjlf(jioEfcL>O4{Sy1~>*xPsT<C`26c;c@(1vodHW&St!
z7MFuN!5UTTAZNg%`3^+`k?8e}e**&>`N|&H1B!rNx4cCe5fDV_gOa+MyWg$6bKIYf
zEnvF6$JURw!%Kdty6>K-IDPKnp`YF=sy<Xmy<l;e1Dzi_M3qhJKU$ywkJ9J+TnZ|j
zFF}6!S7ax6)!p`K|5Nf)1qPQTH<P?3@L}4^oEz_uM|lOp>zo=VU)A?8oc{&=sm7I0
zY7U)<I2T2PWMIZpn-32Rwm!N$jby#;Q|H4_)0s#8Y&Ei(=F_!8h}tuDCK{%BV7s-x
z*%7!=XNjt#b${94z38AaoX&N8(Ai6@mwUwVTs>#Lt4%xiBUTX_8TyitSM%$0wo`V?
zr=h}#-(MR%o^FiYmwGVt>%OaPLfEp)G3?vO2Jbun{#`hV;*7R!{`L9h?!mARJ_}gk
z!;jBDor&wa^m{_o20Cf#(eiH>UmSU>XaAW0^jqid)|z^jMa}vx*GM&xktAa|=hgw(
zP-J5;AS|-XJve^3J&fdUSbQV(88s#6Lg|pC#CZjZ*fDlmy3tEx&Zm68e6`!YTvF!!
z?!aq{{Lptd7$&3O>CeEl7H(LT8Rb#QS59Ztd-h<NPZ!%{L;e-|MaQ(m^AA}b<o5V>
z_-t8RFgi20ug9Y0R%K>^gJ<o_$S)Tp>*geLC|?4jZe)2ETu!j~73*^O=LMf~`I6MD
zR_JA`^@HU;?EU@8Ns+`_YWe1-Q3A|rb<bePUxB5DCrRZAl$LyMsKU7Fs$k~7&FiSR
zrxtT9LgYuTrr-N{*kk{9=<qEtf0I7<2<{4L>NJ_})+>#(p>A_@aYpunRUQi+R~^6n
z_R6XnL8zVkBFo9_6A6W_51x7K>{Lzc)$I}`j%K3E`yjU&HJm1Azlvdx)HgnI??m$t
z2d+iZBQy>^yoC(=+mHbb!hbZGPudXOJ+m`=XWEbode}Q9+AR*e{yF;T-H%<RWyJ;W
znhwDB5i*-4Bt)Pc;Xm7boKW<_)ex<WwPVO?dJ~TDJzjmcI|OK-or(mnj}zi~yX`M-
zPvi&`{RYP)UifS;n>S!g6DlXT`1)?R6GFgkIJ@n{lNm*Tu|1+^?hT4Ccbn1J;ZN)D
zfMO$g*~3OOEP@rfIQ|_<7OM5sXqN2QgyKaQ<W6lngPO*wfF;*zLFb9{hSO6aN3M|m
zIjYmi4sASfd)Bd=f3>bSLdzO4g1MTKetc0Rd^<RvZw{e*n5W=}T+i0wUa#C)G*iRA
z@PGLd%H9SslKg&eY(z=(XS8jRpU~iuk&b%}%$Z~Hhz*fSyH=<p=NawW&oBSBhmb6u
z@8>?7#wVaAWn$*^2Xk(@vFu}mAY9)qyT?$+q~d2^VdnSioN+V$y*G1krt@ohRbMV{
zl?om8C!>fKSS_w+W$x`U^VYxT-z(M7mykZqzM5#=x<^XOf)(NM$vGG9pj#y&FCM~n
za#?%O6<{<x=U$6`J!H{<X$nH;Qm5JCUiH`cUUSth<sFmGO)Xs6bN(P=wpeP*h``xO
z)YK=`a=K2n*;?o|5gSg~y<=rMX)$_QzQ?RujGS(U4DTfx+rCl|{QFudoYjbxxSXKa
z67Cu{38AUB;DS5Di?KS5xFXeb^L&#z_B)muz0(r>b<07ha<>Jk+|E_3rcyNU&Lu)Y
zh+JqeyE#5qt$@q};p59Vu$=<J<_Ib;yB)xy>pjK{p*WKpuu&IEc**c8z9(}v9A*J;
zEbqcutf=Fk2VO#x+T|*lZI^4KZ8V@-31#%p!31PjZQw7jvf3sln(I{1WF@Q*xpZcx
z5jsnSlQhsSi-|0G6)spJH5?B1-E%MJ098Rt?4ls1HQ|NP3!n{MV{pWWDpG_z+f=6|
zY;C+o2^B7)i6;}Shc!e;g_OdOl?s-t8z(5`)(udsb$&cPR9<LOEr#5JV!S#rr$_QU
z#H?>kY-)n+Ut0MbgcMFPV7xYKQdoF5sJ3ACNE?+K@gNf$rg+K>hn7$D?o?4Q3wLIL
zm|&W|-ym8J8{n4WTp2SK{PX&)Q2~T=7fTncWH}wel30%2lq!kNE~W#{FpH!HNg7}}
zD12{Iri$Smsam2@;PJ|E_uF%f$(_4#r`S?&XAzvs&=+b28B)B54qz$2H@L#epd56k
zRjrU?Soe+a@6Mf|=n1edyFyzZikK&>gjnD&^R<tq)ovlKc~bbHT{~p9k~dCBjf%pP
z!weGz{@1H*_~AIP?y5N4iz<YbtM*wn{p)COwFxZ4=Cmr|Lqrj>^?87&3VGK7sE|9t
zKx*pXW;rGkaV>;^Dncx@`LkBTzE|U2M`5bi(OhnUK){7Z@yDJ&vmsM)W+jW+{vun_
zn#WZje-x&MDX<Tgpr~*lE0$P`3-`CceI1T3oH1TB>F6pjcQ;}y13XrS6-Mq#0GkIU
zG@Dt^Vw*AGmiq}*oxU)w2n!5wAZut>c7gy1c&X-iD>)7*DG-HWG;5Ycj_g^GrYbvr
z6~f^GTk&R&66Psw+;o-~{h<W5C6~3j?-(fbLEKD?{pGNe%7767NIgrBD`C3Q4bMRQ
zg@F8@v0r+)6Xs~JjW^7?3vXw@?yUJ_H0(w=rnLckIiP4=D#S>O57|QrnW4Z|0}vK8
z{|Y>_^S=!&qBL?<08=b{yPaM<jM2n^D-Tm(ak!X=uam+I1j(OLIqFp|BL2Lu;XbP@
z_D3N2W@p1H7*W7pT4R5flTSF}uUqNCtFUC5P2uK0)RK&aU|y--)l!alLD}^d3;ZO;
zcx@V0Y;CQzm!t5tkC>9d<)WyO!oW%7fdvO)VjhzPG37`C2jF?;hU`2aCH%t)68z`w
zg^ZPmjRxYfoR2+&C5JtY<W+_|hX&p{7nOkz52^0<-eoGg^~{>V1b=^LyopB+jDzDf
zVLoUW8~_;#r416`j`Ca;WTuLxZ2|FXp^Z7PwPa!MJt!uMY9TW9ms7m7zJbr6MzDK^
z5y;(*>oQ+EX6Ek*<>X<`eU>eM7i!Jkbw};u8UYR-F_6w;adoDcr@nHSNv(!tfxwir
zzEX|Wbi<~HsOJ<Jg2lGUPWq5@Uu~u=MtF>6Ofg~(#j+LFb5s8MtX;OLXPK!8GtAEo
zJig*8!QKdUaES(feU=^)14cVtb_m!rU^CtJ>T!oZ&IXMgh=s(;TSBqc0UwpC3xq^p
zA#InY+OW3XmQ%WCIgidcxIbsjv)xdDl0)G*^CYsX?ZsY<MHLDbTZjO~(laT+9=d}e
zL14+`MaADYu2Yluil9w(OArRjPy*u5Af61ytOVfBC^uBEPHD-tTjfmJg<t_-2h4!E
zh*NS4X64k@1!A5UN_7H^(b^C4pu$^legd^If#ap1xbc94B)eiRT(AnU)xqwf5=_6g
zQs{yH0i2NG@_iLzDS~4rOIE&cSW76^NWqgdg#3l^R?d28er#VJ;-|3nQ(=tw5l@D+
zZVDS)xDk-u!~PJ{2$|J=gvZ-j_Z?uob;<aD(Gb%E!T!+-^A@l&&mK#A9%#jCpe!&z
zl*L2hmIuRFI>IRIh7qKSoeq1zT#kRAzpEnywh{q>5E)}s`D_6K20Zy0>?(l;44yy=
z+_aFL2nh>7{=g^CT@SI4087SJH_g^tui%dnb~_Wm`<L*1qWFw<_3b^tPQ|g}!M_$e
za^65pg{k$BK^YUaLz|ps6pS+eCIW7#!rLbm`UE-g^vD9Y{omy9lX?G9r%v)kV5bR(
z4cLJT`{#kN-bR6@nXv(Kbimp1PSoybbi)`?RnzoUz(Wg}GvMIMP3=Z=RbNiH33DMW
zJQ|Za;Rp0b>ciEB_dSH%wD9?0)>w>3z|}^kO5rME+~HeCHNw2N@E<qmwq*{7=NfRo
znaML~lmb&8%Urk7#|QBkg*w@o=MXTpo(n4EKEkc1-2hqY%F&*3)wNr!IKvVFJJAVa
z)MD@iXrt^kR&2qh51%rcviF^K6t>yP8|hMu=PY2UoC|GO99j>XGpYt-K!4;cqev{O
zvZZ0)xfAElu~*E#=Mdtx1FP^>92_v7#cZFL^|8Plg)Mk!$37s?E$o;-<5d3yK7WE^
z>f{CO6RB9>2V>@g*64m?*g<PX7>c~&KI!Ys=-R`Or7zqXBD&uQHCKS^8FT!Y)9<ec
zoi(fL=!!{>g%_{yjC&DzNxI}xUC||e{iUgn(Bt5R>#F0P<3u78=<EsDCTMw0b;91~
zlRKt~TqaF_bXn+?sQ&u)qE)2PnAMc~cOpl|;=W5R62~SKM0VvYne_g14C*v};M18W
z!PX<Vn8dMJc|W_m$KqzyixfiNe@t2?{^j~%-$f`Y!F512T0gDIG3Mv_%Wp!$W7;kS
zdc^n+#k!g#PHpOXTtE4Iu0B$f964j_)bFj)ut{QuV~ow1Z;;0oQNi??pJS)euDrFr
zniG08H~DH_!PWfQt4Gg=f1B1TtL{0jU1rIPgSAexYkTr8Pdm0`GRB@x%bj);7kQX+
zZC@%EvY8%DR7oBEEwyR0BDdeEzbxU$_~WL1s0JO)*_#`}x~h8@)Q3&HtWK@J`u`)g
z_bb%AvFM`|(9Hwzb8~KO_`b1-8PZ-x+m@MvS#<t6($CP%A;<%k(6AYD(hfvsHrxCN
zcl?w+*J);qaeI2KF)ZBVrt~vLS0#MtD{fsg=P#GyIp?M~^?$_>+uFf@LyaAG=CZN0
zHwieo6ISlfTX|@VJgnW=C@jB%j0L#nEr!EhgRteaG#^WWw#9{Yu0rcH^#oYpi#RCe
zQ04HMl!Y6sZkmf>TgeGe2{^a=EJp;7vb*q@M^T>b0RfhdncQ*e=CFBH2uxbMi+LTH
z<%9S^ONgvh?92PjM6ipbcFnP7CI-mLt&Bwn{WL%vg9MA<+Y&fbbTp40{LsZQ@!MH*
z2~1HbjWOI@n?;Y`-{gSx*CH0@2MZqG-}L+bI|naViMUG+uSj>nw8ji`SX~0UxLRJ8
z?<=}b`MTE8g$Ezf0&59!TLB+i<<hUN@KeEeq!a;UYojn@>fk@UaDIRu@?s!~YP%qY
zm<`!CXw1!xkozcwjg~i`baRkAvPCJHdmH2LJH`2C%$4rkCO9*9HY13^tEOk$LdUSV
z=sGK8j}y$CW*+g%5KF{<B*L6B5F6cLtu%0ea>zm_uCDEDr`wVffTwH0D?x~O`KsN>
zjCuK}trmo7e-xaHK%HR?>(9eGwhSmJ+}uF|VzPFSS-THrIGEKy;PIXw;=pYd!2BN<
z8Z)y00=NrQM*IliA%|tKHe@GNHB4H!Q(XeG)0;jGgSM3Bdm$TM()Q9gBu9qvi=&Wv
zXBk@qJ8B;!NK?rQ_7BPmM==5yu4tEoPZB+NRpK5!TBgUMtK$NKMRSk72Se>(I1qSf
zHr>`0duw3>5oUNXs52KI&RY3g3j_+-L*!9es>a#9l7+qM|7jx-+fwHx;<Z}5YWQwS
zySWb3jT>&q+kZ=kofHjT0WDr?_zf93o%)wy${JG$xh-+DWM%Pm(g-ysR3o;E!(NPH
zQw7|c2X_U(F=7FSG>qq__$Xf5vuM_=^#b{gb&C-z)k7bZ#`yTUWl!J$IbiFojd-9#
zfw0XHo&@qoGp8z%$lw!4{5yX{o7<}zd8nm;VO;%@I{&Yy_n)1*7H)E0M6oM8)LUBU
zugUWioLE$6eSeDn6>gD^Fc@SABleo=p-{+9?r>mim#ciPao~Mh9gW|z$xU^8Y09n;
zCg=-8eq(d!k|sm7;i*?9`#ZrOCi+HX^NhIUs`ky}6t|$4Mt1S=?V8t>BjM$L?PjlJ
znW<boQmFSCqmHaK$*<g8MZ+Gd+iyg0vo3t;_2pUL;FsU(e4tDW8DE*@YrQD*#j=Y6
z=Gswq_C%MGPipwXy>K(_B`e>iwJn>fz6?gv*V?noiI=_=obGSxKi3-Xq^OVjQP1am
z@S;kBU0S|3;wXmbxk3JlO+y1UIUHFWmDNgDj>68ko{2c$4Mh{U$iKGlCh0~z?zhqv
zgK>Vd^ppHvgtp9z3p^6#=-~IJ&^PV#^zBz8_DqD==1gAGw&vKS@0*6c^=|&P={@Am
zsi<rdIx)6>z`Z*64)%ycbfLXJQ)fTeckyjSDBtPo6Jw}(S*)AsiIMHUULE}NEmkDP
z_rKBq(b?-i8tQM`4}N}k{~=%h?<M`Or}_{2o<INS|9jKl|MvfV^8fU4Q(SN`Klp!t
z)YJQ2m)|PQKyaAwe~&EEMh(Fp3g|fd$NwJLJ{Uf$#0?XO$N&57|Gocgn$Ts7+}r;1
zf4}0=Ap7lIf=xDG2*Tg}&nf<+|7w$nMU=U-%<%Gc=b!!W!5>|h43uM5JmeNB^G|mF
zm;ZSIA18JhD&VT;`ZF{Voys9al$2r|amChcmD~TXa<#3144c_|)qCOXAZUMM)5%k(
zmCY^xm8(@lWJ4dGm%}A%J2E(fm8<n#yWT(02OT8eQn*^dH}3yWx!U8-!Gjcmfa+#U
zfAadx+jsB(-f{e(fe+V0;A96*{PXMgA3c;hVVYKY1!3?52Q=o&x}MUAFd;2aG8xZs
zwBqNhB!~1@v351Lo%dKW3R6=ub^f)MBmKL1sn=^Q{r-xB|IIWQ(lL+CsO4CXlKxG1
zx|!m-+-<@2w&er0{~mfha(v*rljk-<3}Qttt9P5_Jooq7$-87Yb1pt#+jbm<vd^?+
z&ENU95XwEgYGiN!(%W6R2c<oh(CNXH-n@~Rsay9LL{al|Q+l6Eos9O=5+i(`osPK_
zf8^`NvtnGiu>}~5x%Et)u5$lL&<Y*03(Xu4-AKP-l(v=RxxM@7kEw-t;;n%rvGHm(
zn8r0&gDzReWImqcI(6>nua}E)XRW*+Hcu)wX{yRi<SL^t=Np)L^{MJOaLM~EnhE6+
zMb)3kQ2i@K5-0kyvTsRQ(Hhc*MeH2JFhQ#Uv@N1rr0J}B7CPCnnH7ulNe`hZx6tS$
zWX0L9D9C=SQscbey+8?TC#Y_v81Q*pkxbK)#n8kst<VeJ`hAz&%0>=tR|KMS%0;Hj
zp3kGpl|q80T%-b-8(UDkYnvuKMe!<dxFqr78r4n*AWuyUe85F_PQDv`l)$T3F-fe@
zo>71w&>iFu%N+2s5(RX9US;&ENHCeED5GQXr(zC2Q&EO5?Njt2wnNy0e67?7=U^AD
zfDFqUcndf@uHrdqXY{H`S>{_MD#G_Dqr$|4BwbA*xmpozz!?))ad>)1c@LY?t=mE=
zj}|#ETp6r<#!<c4@eVRmt}io7h}1+wp2@sPG;<F|96dCNfn`NRD$ts%QIjHQE^;iK
z*fd%bLE=g@Fp=CT38(W0W+4REOl1T~fbI~|eTqcgxX(95GOC%01`uqElv126ic0au
z>6S9Qg$4s$jgue9@P0)iA;~h*7`kMWD374=hc@(3`D5aomE>4e57}o-6i(zQdf|oS
zTBQ{4o{Or<wn>aaMARrmF2y*rWH^r^k@`{aWC!THF%62KSq-zoN&H$#H)5H@kP+~)
z@6?=7IRidjX4eg9M(Nk1VaEnWVP}M%`zqR?#-0OHJfl^G#bx!1NhF)-EGaNf60+M8
za(O)zD@S(moYFC#2Z!DFx0>{l&AG*y9nHQ%@z5zENEfU)llUxd%Ot|u!<)kMN?&QP
zM6e}V74bZ~s?5OYomb=s+cr@Ie1lroL}xcCAhJW_=`w@Ps5=oxP7<^ysRVnyzM}nc
zDJ;ZWw~(J8M+|X2nDtnSx5K7lkq*GS69u#72z^9BaOzh*2T)<Lz{83^EF~>u6e^>h
zL++4zC6={j(4+;ySbzpbcbcojkX@g;3$w%$4zTc)ohoW5&kbLsT4I4oHLAj0l;r<I
z)_X@a5x3vIQxZra5E4r0NdV~(dR0TOVnjr+#*T^_0THl;(0c$W3SvM+s)iz6O#l@I
zHDCip4cJf-V+AXB-uK+!z3ZIApINZ7W>)fLp8f3o*;M)Jb;!W8$OqB0Of;zsz-<<A
z$s)F#K81;J4I3k4rE(@hG0I8GQ@aYF^y&cYOa_l=!pze)=E`kgBp0{Op&Vt*-u=WR
zu!0?GDgr*(F`&H5z(IPXfuiOGV=Ph|<;dqQU{qk$9O{Nl016N54xo<Xj-(G2qrwF6
zn2rY+I07ihO@NeGHnZ_04`oLM@0(1cVGl2q0WlfmFqJDw{fa*I80~Q;Q0<mtc1TpB
zAqv4HYKd_4!@L7?(&%ii2#@Gudo+3SupiGNRRkNviO}gDgNlB_WX*BJ!W91s7%9eJ
z!`Z-Dq*F|jn7l}vj<+|K(v}q@E#l1CfJ5C%Xgb4(h+?B$gj6{Ppb{M_NU}!W@|8NM
z-Y!6E5k(jqW-@sRfO6)D07S}C^zwwQn2I_e6H*V7!eAW}>&Ixpx*>ukJL$0s3sg1`
zW!X|v@eGOG$torcvu=Sn7FXw$380k$$ORx(yyj9z;}mzmhQXC%1KSm;VD{<SvFtkL
z9_s}zY{O3mBdI7o33rnRpQo{*8Tjt+4XLoW%CAIdDu<~UBCEz^Gy?*nST2!~L^k%o
zO^%3;Ih{g0wg@zy@xoJ{8==M83OKR`l>i5Dj@A!Y`hhqP8JC!&0%`d1RXi9l)_jrK
z;lVYb53Pal;oR(^EIFKuysPfG(OLXh0nQ;aLzT@&Z6k~0RjYuRodD$E=Z=~*LFvR(
zvA~{Yv1o6GmeVMhbeoHMa5+QSZf&0<GuxA}%1x_J>YTZdg3i%Qf)?yR`SGg2y(~}-
zH6Jr76HTK^jdomT%3BGU@&}|tT3u$Koy46$3b*OAqspU)m<pSSpl~BIRZq&rEt7$~
zEBoYi;z8Ud;wp6~TS!mDL~cz-bCqBV&w9T?6rYQJMU?|R#fqo*icvGH%O{T{k&tKo
z#w7ySfe0#uBI&>xF6>&y&0CH%yUj<n#@uBhUDqJ?!5i`-JPtr;D)0DKHef+X@-XA@
zXuUZ2!ZR_<2Kp=`gIB4>C&>xSP}E2yb-`&pkjmMk9mPdka6B3gBR)GnpyyD<y8YxS
z1P3MUqY6$Ef~h86R8Vg19QdYz^Bz>uQg&wVM31};P%k?rho<%`a)@qnF9qlSsP+@6
z?47e~+;PF-?&uAI!L%iGu|AXcM&Wa^mm>G7O^Jol9)^>uc0i2H@y#ff(32GDqihKT
zL&rHi(9zYHsyQ)TmnFn(r$TeTP&i8_Vuz-pLE~_&v~_gZ1?IgEq=Ua~Si9qr?lwRY
zraYaxT_ygKlj;!jKh}K}a}gZhxY$nLEQQ`9hyj;Mrh=Q0OJ=`=OgY@wN0%jG9!OEU
zK951#0Cf2>6aB%%U1295RB`ja7e2=Iu;jL#JIQ^iEdwy?1>01|kILE3e2wTCNzx2I
zntx(xQn<Q+t1{V+)*WBaR%h{W@q)C>vs`=K(^68?kNZe#8-ejG!_qGa&2~t6!;v+j
z5bqT-rzqNOUZFl1r>wvN<@w9(2q&pg4;4Tk@+vo#2i*BO9YEn~X7XK1H4wPc{jJ-*
zB(;?C8p_35q;l=7hE!eI#Sg&sTdbh;v6a2cl72SH+OsSK$Mm#a9~_9|;q2Its~raw
zvjA9E3SddXee}f*e;;G6d9@yLSFZ%kFVV<oV%UJYw-1dBk82^J3k1JnDlj0_sbmZH
z<Zi>5$&O`nb<=?@7p`LznP3*c6sl|GGgcO|c?E(KnH<wB>FVDCq<en37WHVFAmHl_
zok}7>QGik9VhAi?>j0=EJ&-9un=TxY0gBQ0)pwDU3X92(pVgKfT(Z0%bsfcUd6G&*
z83Hmn<XD{=-j&)vmFl!AZD&`S^fQ^$k`_Tx+K$of=8z-fDeIjQGWqbR1fHrjRu=7Z
z9mj@UPbgwT`zh+_0~p;5jO`FMw+q*5zjQgnSV#=}#U<NP9p<KRt4FnVFOZ|1R8JW%
zX6<%T<t1ggh$$gX6o(cPc}JEDjZjlYYKYHnTS%!d%jOkiHiTz&#%HbZ%f3X*kqR-v
zG7O204O+k`?ZRGh!rCujmMo~<7NzI=;d!GZMi<U;RNanc&52AqWUP7^lMXCk2~0&l
znq&2<)Ose8a8GL~NTWSIWbqkLW@$CXQx1=-%d=pDG-b0>c!Y0$j&gdxvSz3sUzg>_
zrhr+8Qlq;t*tpf%3@}Rs?|%bjbG05!V_c93{O46C0mvgxMUiV=$U=o(2N?cX#G6>o
zfJLJ@1yuC?7*Kv5lO0bRWnm_*HIr$!pfD$wtC1!sNEh+afJH7X%sPPvWqsGMrKKv#
z;`K%OZ{kxnLdDIOVS|vI9xk-dr7EC;7>cGH4O;Kv{nVJC$N-O|mmG>uvnj|Pl{y%<
zLKZ}=!ta2s4CTQzyT)YUJ;KanVXo3deP);#SPFgtOV>oCE>ZYfjIrjF41bQ&W5K4(
zu<hPv9)KwxCJ=~_?kNn7k12Z{WG=>ptS-LvIr-N&=meRNCIR!EPiqSRL_TFu>|eR>
z%@TrzFl@v|qMXnkc-I#r7-_Oo;8HSJ5!W~vfNOd4ZH7ew{z|)2X*5QQSsJ^51zAw_
z01Qr_zzYu|djxw?3~m*yjtHUDMNe}4LDt&1_o)XNY`EAKwB<M=!V7^4B|2c%?4qdH
z7n(5uZ6j#MeAw?tc?1EZE<k(=TTgW6DN`Y;^aw5>{sPTYg9RxO?WU|1?D?QN7g`zz
ztR;bK3c=WSkPZhzM0hd_LM%-O<)P>20A*p7LpKq&F4b;;khK5ob}Kv)ROV{?ey-dY
z3p#MlLM)SC@gO7J<FFiPDAJ22BMS&Prxwck=AE?~Zc~PgSXxJYAUg>V{njgQdwf_|
z9vR^oP!A(>*AB<JV_}BMK(wv^!XZ&@)15|$aD2htT6j7`Wa2?YVHtbe;WfHMAi)>T
zp)Eoc2LYAGR>le7Tfrvi9jGCJkGyh3dBIdEXeb0~2cYBXz_QzQCFh7M>+pr95MH#E
zMhBFD(>r#>to*fxz^Ywuba?k_x|*;4R3u<lm9N3Yr7MH_jPPZ?Re8lUMk(GW5u{Q9
zXX57YqGospXejeCB8JcyOqdJWAoO4XoL|BuwL!*AWK9IxQkUGXU+N%PEg-{t>fx+t
z6?G1bq?oj14#sRSD{Yr%v<mv%wv^YPjs(=LW@rjQngD{zW8Jocef4pBPvL2dC`%h_
z*K;sGY@^GoEjk>~ngwW=z~mB-puwF5k3dt2VGqX>q0dlk7eU4$O)YlG*(7T%k)<Qi
zzPDf*jROnN1YHgsGPn~hqE7+NZ&PflTVdc~AT!;@fdd@90luzhAnUOAOF)CpdP@$}
zc5WAmMKomqI%yD$)F&d;4H0Pg3ba~X>&%5v@{l9-NXcpE5Xt3k7VJXoLacd+!{1eE
z>F@|zdL4vCo=1+rszR_T!b+XfWyK6+cfeGHN-Y6lru8fG9=ag3CmnR9;yg*_YTQ@{
z#x@;+zOS;tf&;I6iD>5li2>t^5Js+lKXVDPW!vW&9<epm@%1_fS(>Ji-~6x6m^e5p
zOi$boev>f0<iQOz)LEie$k-yXRI?SXfdap1#g73&4zS#o4Ogg;Bg)CJ2r}aUJXatJ
z)VD_t9($ra!`t>X`11(JTC-)>=}^_L0GR{hZbNG>Cw=LHRXKoF8@Ou~DYo7BQgJ4h
zh;%h>&|n-p{<gG70AxP&I7T)$<v?_9M8KO3Mc1LVjhg#+*}Q!azD{54EEEm!@jAXK
zgCzh7uvZmSm@=Zr0O-UKSY8l8-o10P3aBfAocSQ~L{AE@&q7^T+#dSJ2f6}4W_-|=
z3--H5-0p`WH-LBKan1;m39z+eK@ae-&f1~)$#d@4x5pYJvT5kjSPX&yClFid(kL1~
zKH|cngO=1XH_Y$QcJS$uLvKS{rkp_QJ|9CWq)ueShmuweudx*(TWN^9^*pzh7UKX+
z$E&EaK}HR5C3Mxc^*~^#=B@{MP4_`9WXUOmh`TXOwtzG9Dweec0eDb|5Mqrq=Wf$r
z(g{-Na@F=%f6i#xFI6%@JcIyR3K@vDbd<w5KD^)z;MkqILb&@w5Q7hzi5PMtkj8fH
z@a-4o>Y&e;&)W-a&AB$TKHvZb_<Rnekoye3b=o7T454+xPL=~BPFYGvbB@qhSy+Zm
zZ?q#+c=o3+Y$pX5zgZ!gsu}xWS4*%XXNMZIPFVuE@DF|w!Zg_;6#dZNYGBkwX104~
z-P9zq7~5bkU56Gy^6Yb){~$n;LIjg#IvSZ7u-ZZft}pR8>ZP<zHELc%!Ctrq&DxC?
zXpRbz5^3b(Z8VQU4#Yf1K3qJ2ETlIfk%KFum}r#^;8NI?VLPx5^J>g?)hOa#-C)jy
zNJ8D$q6<Zb#x!MXEo2A+S<^%WStReWVtR(whD5GfnfA2JmII@Y^f9QA9T$X)pnWNo
zw||D(0m4m@dT}x1=3K-w3_j8xLr7G*h->(I3oHl!cEWuu1Ks1`C($Yz(hz5aQ^l`x
zmGqV5R<3ypoZY?Qcmc3#TR2VT`B~N1lCh|$&#kbHLl{fA5^pOz0c0iIum9TR!#0x;
z7`n4Q2rEmPjT=)3V3!yhI~im_9bmqOIuFAaZ9{q|A+iX1lnPOk{YavTbS(%GWc@4v
zRbiN=07|=ZIXM|jodp9r_P5pS&yNeW7F<Ocfe|_mx3!e?92EiT9r89tTJbY|qO&@1
z#hAKoOKilSK++0b*o<l==8<8+gWX3N5#H-b>@CKU2}AB`0~lV=VhznpcO|KhYynLI
zTCN*_n|I!Ha~QOuZofXVvm_c~KijJ%g%Dx>R`{N-uP3`Dz&zo~ht&{W2i`n!Ct!8s
z`Xcbi#y9W2hUhYIALkdrjh%qcg6m=X$%~KOH3lF%5d{2(j{d@ub@bvkOpS3)!m1<2
z4uHFZy)n?LL)7`!Tkl%rbA8g{`)?2ydYO)%H`xid7emR1fMt%?yE)-Phev249bbo!
z-=e>ID<-BzEu@e>U8z67QJ<dscs_)w<^FL-!$3P}&NsStN9!35Z7wu~5=@`#kr>+B
z7&_7n<9JI9qYW1F<`(nj1QLCHkM!5$>IXw8S~jmf%k+n`v{_$(gKZ?FvXRJ2zZ5yg
z{9^Fg@-zL?9Fs?1y!v{`g+EzIHjbVXkIATG2GDW^Q$4^b0kgUSP#~h>st2D;&t+Gu
zKl}Lc*S|%BC;gwatv;D9V&w(;tE1J^Bown&Sqx1zHR;n(&v(uIuLr+o$uH-#x@4rY
znbED^eU){cX#_Kp(UByccz^NSc-r7+?$fLMvqPkFAYrOXb;rGVvGpo(mFnE&*A)f$
zG?99=ah6gU+0AO<kY3WL2v`?Bf7bnE**)&1$ocB2pSv)G%FpTqChATN%sQl2h%Q=u
z%&-15AOA@sS^4L7|M{@Y`TgMMP~+b@U|Cc|z6w_Lgc3RbQ~ssJ)K8Iln`Tn>&5Rut
z^BGg~RT;n6PW;5i{~bU3_sONd?4P8E-G8Mkv!|B-d*T1rtOc;@_>-Hcau8GY8Azin
zCB{21UgwNuBlUZ9B0%Rm5CDuk!9WR{1_4k;+W)24<|+UHR&b`~eC>t0Qyz^?jfTch
zZk4rmPE|)im9APUUr7<$lGZt3Z3(K|r`en1b#S1lwf@1wNB^&4TPgre5Rilc9w1Ov
zRk2hPP~OBAk5x3lDbY;~K#;CM)735;l_t3o73CC+zj0HN<?yrT{kYRUFhL%{$`L(M
z($HGw=0qARsk6v<b;AZku<h`og;z*uRoo294FfNctlBeGhqS*=DD3x^6FBcV$zHW3
zMGmjemPl5KA{8l1bS8(SRRd@>vpsb~h!k=?leEmSZrs}aW|pEeGnS=1a{gIw{MYx-
zhE2k9KzkgYFWNE)tI#%tQbe>H8Gu9V(F~fqH%QRh8YL54+$~@3+_O_ith$IkqieUF
zdvNQ=WF*<aXO(VEPgm7d$zdLx7SXPXlJR=MZfodSYIdRFtSJvgd3z6$u`<^yorraq
z9p~SJ<&@#z@wzGjFNHW2GVYed^L__l)n<()+^`I+?tTN2sQ-G-7kY{V&&GBIUj!2}
zLMC|%4l`6vCL19dIC}|;@r+k&SdO`o)33;S$Qi&-JtMj+T2CNw1oc^FHO^%_pp|N?
z?He9v*(dD>+%mdeF3O{YL$ExWe~3%aG!XGnV&gB;B9@Pdp*<KcfC%<Af_?}mASTHX
z5aa})QD*D`nQTYwt)?}s0R^QxE<{k@L0pA3kO-16h6`%haH_eWUqRQ{+k?>kkYR*X
zuAzFM@bMgX+HchT+vivBY<O2&5ljd0jBnAm=`|Y=_QWB={dWyb9X<6vR6FJ#hhU%n
z+Yt4^`}Y_7e!OpVX!~b6D;!k&kU<}$G|sk;IDD9GlOTxV_6K2mKVBZ++4!+zGVa62
zPHCFiT-U3Ty>nf+0tziHYnpm<d&m2;bNk{)U0)mD3NFXBmd|AS8UHdhX6S=Q8ivI6
z>uhf?>Z7+6?iap~{vxB_cZkZmezTfqZ9vqE);7Sq{%L6tb9pUSa{p*W-#!&vVM7NG
z^kGGRNaWjh@>58nYt>B^B2!qYO=jUm{$qWuD5s+Rrr{A&yIyC!ZTrRGx1`v6b0mux
zqxE`pdoe2}Na5iY{mJOZRyU(%k8f3Lx7>1=Kk6`%=0**MmDWx>=>Jd&Ib$b4Jr}~J
zUIGuEn^`=Q5HD}uWu9b2T1e6~rgj@Zd@k>7uo)2~$iP{@7aqR*57HN1Zq@o1t7vzR
zMW=iA&(39VqaJ&f>iR!E*ue6e#@9$&X@uFfeCYC<#`ueb^sSB<*T=Sb&-3i0?%Fcl
zvNIwDauVUo2kN$C8;X}yS&YDj4~Qb;BmkiOM4{0D3NQzdpKvGy1mqXFC|+_3ii)CV
zW~Jh7Q&TeY3yV$`m!zNzDJfn>`ei6A&lF`_&GQ0@MrtX|^lFP_;6iCfXIFPm?|;}Z
zB60t~AhOfpVQ;r}0${$qNpiZVpjh)hpI$<JBvS8yMo>z;dnwb?sP_bS=si#2H40Ri
zR!n`1T0j9K|Ar6)xt~xVPR5W;Pqyc*h5hYY-QoGVa_XKgFD_89^<0&gHjOYgzOQ`H
zV~O&LG3NBD=Hpf-nTaOBr?{t36hNiD=t5nk^Y70a{MzeA&-oRZt{E4yRwt%#!veYw
zK22&YVr=qq_FuQgOY1Vp#URWuDX&C2k@fD&*vKhhae|apKYQ}Q`Tw2}od^1NL?`G3
zIQy-mwdfvBeYVFWb(?$I@SbBn&fM3-C0G>J<3QWa=r>NDswxJ++k|AV6VIDgzDORc
z#MXzMQIFYqt!KZ|nD0o(f#=^CFLi_6sBg!69rcy|tzQWD%vX3>czpQtwk;116pUMD
z>=-V7dMyyQyt0@288vdw_nKqh@98Jc${m-SSa#{x?9_)BmyWRl|9siaCD`v+Q#fup
zk+5c?Wx6>_VGF$qHD&QAXy`>MWoO+~+7Pis$IwppHc1|p5>L$J37j&ruH?*2XPZC&
zLZ>lqIGxM3xf|}6>o#3BouTyuV{p_%ZMQ*=oo@ZB#VkM4ef{(fCy$pFDjV5`-aIze
z5H$J|?NOS-{b^Vh7}5RuRAg<!o8p~Mstv&?-u+qw;DLW2d(XP9qROK`PQ5+Ll{1|Y
z6c4=ymZvOfn5oWj$WmXPF&%AO!wY&pbH409Cq$>0sYx|o_x8KGnvy;5>+5P8-XkZ(
z`}d8)8>Szc+8^!t(A@Q=;lqDUh`olD|LcU<JKJ(jE-(WUkp^a$Nfe{&pnGuv%*(>9
zo*8wc0Us<{rEfH=GrRb%nI{L!8mqXot>vY1hM|f6&ho}ub5|}^mkh(da4*?3rFUai
zO;KpKmGUVm6sxNWy$y5L<HsX2Q}@1`1{OPbsGy9iKkmL(IjKivh+_z)O?$k0>{tU1
z)pcJ>s7mHh{%5-D4rR)n3f(&HNmHP=Q5nQ9{x~g6$VXetK8@SQagkAv^zpG#UmoNs
z9#t3J5}9Y*2`)9x>_`@vWpuCIOvi(*QM^Mma|Ig!v~sJ4MVfy;I6P60(=oxfwy*g9
z;(RSIY53~L@I6>u%ew1k;l~t#@Y=18h8yRDw%#qAVK}xQ&kqWq$rHzb!~;qs_(UR^
zWG8L9r0F>mqE2$B{c(E=5G+#v`PCGViD3V;Wn1YTdscqoUma;>iK$EXJ}i9p;&1TK
z?5|Y2LTZuTqeCAiH}|-;Db8%VwfLoYGMEWd0(qLZeYW*2H8lL@=67G?tl=$rM~={w
zW=WKa@n_pm;~CqQmYJ}1o2gzH()blQk|`Q|sW#))*&HB{lE#$J8kif3afy=1;dSLy
z;~yB38r{o5E6;9Wl*>lX?o!OzQpx(pmm8O?J2^aM85QoSyKXwZPh&F0#gF@MBYnBX
zx~XO6mz(9j1*fqlNx!#xaWkj~y?ZEQ`NrcG+VA{G547Z#`S@g@BPDA1p-r2{oO1nF
z?Ip=&RBJzM2UK#+wn)GN>iA(id8v6yiPJfmEWF`*jyG6DpVn5duhTMpeXK)Pg<1Wu
zKbsa(kTX)VWOMOQ;QlX*MFNHM#=g$xL4{vV*2RYXiu&wB4BlGYLELV-3;CFfzL1*x
z!YmHo8s7BlOQ}eqmXYp1vQ_hI*-+3D#`CI?oi1NbNpfoKF8JTs@@Q+^Pw{H|PK}YX
z3Uu%vA`ss6zZ-q}YsE~^1((OS?#A_eJtNDx;P%%4UgDFll?x*mmd)R~cYLfN>fg~N
zOzax`PKRxRtCBYc`@a-6KJ?Prk)7?-=CCR-o=meF2=umUU$r@rTy=s@b~bMt-8FRn
z9GdoW%s6Sx{c`MbD?`5^_%w0%r08Hz*=}2|*w?>HnwdY2B|I1}nVM;*E<OLwBdgSS
zWD1H$bxE!A0xkrMGfNv6$4XZJhTQn1l)Ae$Y06q}I=zl<wNeOufA+3iP<>$l8XdCt
z^d>&Yp1T*i<z(Zg`P+}L{`!82OK4)t2afk^{t#w7#H*5r!-MKq9M8>d+HSOWWNg)s
z*0MY1%U0A)+)ez^CLlCN`UXB3JN=`*ZbkE+wZl(tEIWT$xFaBHS1&Pj>_^97yv6>*
z!%v@2zb?5-m}5klO-^ghcMYw$7+pF%`Nn0wTatS*_CnyZ_v_|+#_u5Yi^I?666brR
zgiG-^1D}66J>NI8;!@({;pabk=C8<dFCBdw_~O@-$5-0BF72vs80qp*Z;i|<KQ136
zWx9t@PndIDk`fj46W55jugw=zy1NPge$eB{y0gi)BU6e;76x+B8L93SD>=N?#s)vk
zWM0Z5mEMKx{e_I2;&qQT<nP0K%*<Ndh&EcKds^N;V|ae^pKR#ZGx$)2%g0aUpP@#a
zV)}DkDmOeoEP+t_uX`7)#H!R2*8-q~x#{t$2hHg3>ZVUsiZ4uniVIsoo06%L`=Q$w
zHds?yLoeVUCs%;AM%0`<Wf01O+y__^)Xe9fgGRasujVfOS6niV+aj@ExfQgqOc`m-
zA<7$!Yj6A6ZmCxC&h-*1``XFtIFvOgca{`b!x76nQNiI&#YD%9QuKmPW_7_z5<|$m
z`=F)A|72b>ifKm+TRfJj?Il86uzt7`Ya^k)<|inQt-J78<tCN<`+XJ6&kt5{{qKK?
zJt^g$N00Ivr`sd*2GYhP2=5|B1Q|-KX`FQ#1-X|==(;53Op6RH?N?|DYyGID_|rCi
zW^=+tRKG4eS&jotTnRM^Yor9MDkBDBCpRQwL{T{@BN?LmaV5I$KE;*QcTbAAb$2GC
zChiEPFjHJSNd|U2f1=hHERHCsvfRJOA+kQ6_d8OYJSFghf^*m7k6U0JU%1Ha{;ng~
zCl;k8*Q-%(7N!)f!zRlQ-ihdpGu#9u*OCoC{{HpacG}HMXu3l;?q&Mm654Ra>O?&Y
zjf$3^b>L!0z(;_0Gd20!nR558Gl-U;U`XGmP|vC)9iKnAd7K2-Do%^+2d?)dtcqFy
zsPEkGo^(%AE*o6*=rnOlcj{|+nrpS=Zl@?SWN*^%D;4nthoM)TrD;{q&&J&P_+V+)
zuFvFu4(B0?{3lzYyn;YZpp6TU3BCFnzgB5@cY#M_hFnH|Zmm++4z)SC$;7Oi@U}y>
z$5GzVf_9I(Ns2{y(!{;a2IZ)~$}7@Wqosg05Gl6{)DkW~#XX(^#GI6Zct_0e*O=d>
z8*u>e+z30i1mm*{OS=z-uEm6S!1_R9rvO&w(zTdzEv?91*rO$|IJk|o+}DoB_PS`a
zh(RI?bXg2anvg7kWE^)ia~U0A-~SHKxw`ilG3=BW6lZM@n-d(rMk5}-xWsIEkzU}u
z`4_UCF-x)W4Q4vU_*-q90n#Y=8I%{EsC*1)5rI0RjV0F=5aD9c5li#Ks8c~_W9*?v
zpyD_e#ejP5Cv|c6Yt6Wf{J@B8V|hfll}TS)3{L0+8&@YLEPxlzsUbk+6DrDHZRw--
z%x6^xOQclSRZ!doT1<u(!u<%`MNDTT7V;qtHYqz^;TIh`6}S0Dx_WPy+4hs*wYr2J
z?$LX8-rLi1dIdRIg{#Cs?%j-_<Byac#IJe~ui{X3>|vMb(}mn=r^UQi;dyW3^JdEO
z$Z9$7$MZ7LM9Q1IF@xM9sgk^iS2LLRr7Qo>c>ceId;sedpvISZ<)ae#m{WXQH(z0b
zulUaN`2xT9l|rLY!DMKGTK5X&Qw7=+1-d`~hYb@^xFn&__*9{3ccJ-2p-)SJCD!{F
zr6|X)$S$GC=~R(Rcad8}uH)zYsfD2B5qS)aBKHV$lkHhAx9`6cdva-lxe+nx7ixRV
zx2(y~6AKSA-t5TENwt9m5E%eR3uw(w#`A}ZwoYubqe9+4Pa4{0?C<uED@yoNu=(JG
zF+eR@Ld9%ND6O$WAJ+&tF|=w}y{u|`K$?kh6u&I_&|+GShOvUIj2BTBY;x*GKTw7Z
zF5Z2rV&YWgt;BplY2VLN?erZ>SCMNbmO7j|J@n;B)6dgFjq+CK^7e@Gj)d~AQ{}(5
z@Omc9>YNG^l;MQ<jpuIRH)O87KC!9KKLESE80St;{<#55%=d9GJsn$N5Vz*mM0q0*
zdV1^3X`Y2VRWYvZwAU&tU-vWkRV7y-;9eo1Kw0-D!St(%!uJGz`8(#%-DbZ}<^9E)
zy*Q;Nbryh!5>SbP>dWAv41q$!TFzrZCnIMDwf`eU;G1+*tq1>p0>9{A{*R@;=}@l5
z?OgE%g~QRg-^Xoqa8>3{sx3{|ZT?w}15>$M!8xPFb60rzP7TDTK&Gopgi1iU{%w<x
zALlw5HCnCJK0P%-PilgH)vz?rhq#;%U3We#@qGB{^Xq!fZ+LQk)35Vv&DyOlwcFR#
z?o6zWJYBozN#G;@awZd4!!Zw&Iql6d`5bY<t-dDG#>SiII~4-16m1#3V48f|h{&jz
z&Vbs+@fxD|JF#o7y{mC|@#XB^=#^Uh#Q=U;cj1p%i5Y%gFY7`MuO?_+%}Z*-t-<<E
z4a&$XfRu=B=m{dKHU@rfz-NNlxA8|x4Ld0H0pE$^r`Fxg#N(gf4~K1wa0=g-Twiw?
zAR(}Q#0YN<>>1cSJ$Uj4qkcH8p+oBA6AC&o7njgNVAuq!&t0vQh;<M^PfllXU!N1M
zaVdLwZXf^?v;)rb$6nCSKuH|hUe-;zDD+IZ$Ecn8zO7-JlM0$C1ef4}sWmcYBm0-4
zik4y@^)zX?IV7#1n7B%^N{wBlh;Jks--a~xRaFfY8;f=~3xxWC3Tac+ymNpiS80hd
zV;Gx2_XEnd39W|lB%w>A4_%cVu^!<toU>E@Y;{U*f5)%34j@vW>R_`ZUQf29oDZG%
zgtZv(Hq_<K_81x@L@~2&w=z9TmyX~%c(VFl7U=j3A7YG2UVz4LcR&ZhSfh>vZ=At&
z*pckcUk5vR>$|uyXVd<Jh6(xq*)UJnmYq%M>J3r%ui9RM-*M;*OU@nNew%ftZi#Pk
z?&b6)<-J6?h?R}%C$3A|21TsnB`r4JbBufN7kUjBgpHIPJFZH)+f*?B9kX#j!2dpG
z(|O4OssCf0%%Nrx@&e4!X1;0gQg3~&(p2MIlBHLwRhmM&5Al4Or@0QbJ{`gW*#C3P
z{;zfN&fR;G(XpPQbbcm~O3(7oq&_BRCO^%_(_bV%&Qwi%m7)FceVS>myU#=&sH6nC
z7X|>3bimP!%LUR?{*dW{budWSy`tQ&rTTg{#dgo+(7~7HUhdTCz!V65C64#%OnCi}
z&N-Fm3g;JoH1m5@-bL~#YcsrPWsmOOT3xfn-C~1&ks8DvL~$=*DblR~TP?H>i(=GW
z7npgihboulhWlY2HbmSCTR+^<{Irv^`11Cdz|M>RONjfR#tg67*ya$~`rttL<@~4)
zS0URy>!#gX=yC^UFlfkScV(Me#I2Feq~(=5-I#g{&y~xo-ya$d3$54LHe9))x8vi}
zuJSDpy%P&pdYwA4_U`1**TK_#trf?AF4#V$N~)Ig@6IGuQPXNa4OA{o<O6@Net5b}
z$Hl`_Dn5{Z_0pB!-`+nRIJ@#h-|ycGU$0#{yJ_*r;vbn2``Daw>kBT1)TOiGIl4@m
zOvJ@gPXJ+Mn~(mEh}TQ~Epeo!eM@*u<^4e&Je%<M_57JQo!VWS=+lHq9eU}p``Xw$
zuj^jsxjoO=mcRT*{5k&8Jp%XjzM3A;BGzXQbpw5+>1a(skY$8nk-wVFj*_L${)Q!?
z`zLCOx0mdGb87qk-RH}q@-lap@2fU>TM_$c_uDf&`|EdA#Q%6_RJOmee%I+Eay_q3
z?g(}sP}oX(zr8xnp=U|?;V&k})oT+qc9!p7s<s^$cw>h~K}|`3>88`z>!l>uT-)Hr
zi~rY{{o#^G&I}Rada{CBhL#|1-7NET3_;h+?Bo9kaqBGzl7Qj=2yw&v+NXkDFLq8J
z{{XhXtvzDd{i?z2<Hpg8-XH0YT&Cw5{=7H*)c#k_oTLBZ_G@tS;~uk%9SV+7bG_J@
zr)r%Vp;4a~(W;w;V>i@eXFuPhrkj5mGRW@xe9QPklTBbzO_TL)?WPJFdF%VL(YI{g
z_J!QcJgM*ntN)>??Vc69v0dV4)ckGC=)}mk`z-wx-yYB$mtKCj=F^{;2mbPBzKPPJ
zCZlhfuZ2e^A`FRK7}x&s$5YNti}}ge$NT1=#cN3)f$^RD6u05K_Ay_isPA8x$}qaP
zFrDK#xA2nhYx(ol$+f|qu&vElIb3mg?&n)Uy5+B#n$rEh-qjsBE&}V!*m;<wn2REi
z{doWHk6mvs{+{cbpZonuWVR*vX<hmKGN@Hg@6VSJ$4`I0N_?&Uev8uKLmz7OKZ!o)
zbRPp|AEaCTTU>Zmdf?yBJ7<fQK0Tf-D*K(|O!dIw1P2!XF1)?8`0u42&<~y0-}H8;
zuV@04SmUK<A@w1VoQo_e>XhCOHK1$ZR`8MPm*sHNTM{NwmP}Qs!Xz8H-^KRF(<5Ij
z22sprO#mbPoGOJ~egm5Q*R98s&;AA?nYie=L&-AQQ%=8wmgeUSzo4yjMp@4imsN4K
zdzmv$H(k&*LhD=&DtWoDNX{5QeNSdniv4cb@HmGey|(G^^mXkq;8-*!55IqscB50g
zKUtW(QB8j6`doJ~NbqwfxC!e#G{5jOf@<jMw}yPwLSWl)l-$k88v*M=PT(X=!sKOt
z%@M?x0-K`<dqf$@Q>k)?>yu2Y)+E1d-{+%*p`y2Ry4)RQqWQ5kmWOWz`o6I#44^z)
zuBhA<h>Y1kW0>u3yE3+zZrvEW`y8p_7DnFAHl_&Bvz}1vnGj#HZgK@oRA&HHK`T)W
z*@V-%BXK=32`{xN1V3s{j2t<N9XmoZ;AY4v+|Lj3dJY9)#Y6%3^rxUYj|1r}pNbmg
zEB;<?quclcLDOy=@D<=7#Oz)|_t#^f@EeFpMkdmtRIZp7&RVwD6fCneyydYg;C|Bg
zw7|WAUO0$X<`WdEl^)Mrd7>dB-LhIvhl%o0Zh<{(?ps)2IoqZ{yMr@WgLPS~s}Jiu
zT`Iq@T3L~4yy___Or9@*Niq>wlX2&`0~cjV`9Rl}^2ls~4m$oEDHs~knUz95OH%^y
z1xY(eWOZ^^Bk4)jRiWk9h7HJ=t@XKvqQXlrMSpmzsC?5Sbd;!7@eGCI;07#Plvkmf
z?bge9AnQ$KD&{55?MQ}k1h+6NzJVrfxkl8UmMbD$<Y<jX7{&@9Pv=3WrJCx)bf_#%
zP%cMyPnIC(l^xrN9-{Tk;}uhQ^~_#+fQ0q=;A7(F&{@vo;Z1K`rZ0F`)ov=yczQgf
zbzgQQchxzshcK$d$Iv*5W=8~%g!F6vQxzu+%c~yVUSCzkwOBl2WIllo?9$v)JWYFF
zzU72V5o(ip3im0bvL{-xJ!F=xFW0+KKXJ5QC9lQxPCW)`aNqjOhI35adYZ20(Q9vs
z%JJU4&Cp9Ack-L|adCsUPhI#?t7R=a&zrwAHG81baMFy9Fn8nCPO;Cq4H_@^@3YRc
z8E!QHlBXkf>=+~^P>wcjtu37#_fU>K*wI=!uRTIj>h4XS5vFU2#y=|llKjhgNA^#T
zy!3A(Va2Pq8l!#Bz1RO5E4$lHE)9AYe8i=v<au?i?~3;!<(l`Zmu+lVee8W$@2`jF
z)!4Ppf8YIW(R|c(e7ZU2&WBCEe?9E|cUjmSz8C$AF)koa{|H}PdUJ^;C-!1*4Eb-}
z?3R1K;x9HjsBe3`V!!9_bV2)%`ew>p-~r`|CyE<;yd7QR4oIHXWd8t6{61`5ozKm#
z)PFIz;C%Iz{-Gzob;%|gUF%$w(>I3-yLKH@d@K%r^f#E+`>a&#KR5WS&nND!-T22t
z2iD#CIzVs#o4fS>PwR(rdd@mVw>~|Z=-td6sD1&JUVo^%;mw3%=Lbr%k9n>1(Csh)
z%kCrt$L~Fz9RBfsru5^fwVWl(f)doGuDI7;lEf=2Rg4v1J&04AeDnGuRT`}ur^jnM
z!k(X$T@@cJZ~HU#)N>yC=X*fiWoLR4*=t@j@$KTLKZgwSUGL;O9#~9t^vQRece%Ii
zuKQ&@rK#3)KL*Se9B<#(PL8?oaz>2_nQK<QNetb%?Rc<z-p#)=n|vK-IbRYUU3QyG
z2%<@!ulQnrZ9}N*&xFRSzTf6XH_rQB>ze)Nd-(a;<oU%Cop+fh^3o3PpX<Be|7KhM
z_2+H6D7O>;RPU|$b=GLZygO>zxnJj~`J3md8A^+bDtG%M-WMFNT<iJ+og{v)Bs<Y`
z@7(9I1LBVby6Kp2E;p;APQ)xNIe4_yGxqS~=$Ls<Gjts1bmEOHX6|dulefzo*Y1pw
zKjZ|OEnGNpZI^dhI$1^j;PTj|FWHLTzPz%|L;@w=sOHF}WO7sI(NE{t7Nv_En(yHg
zMaQql9y$D(v(}CrWqU%!H_#~~@pTF5aE-5%Q{a=Y-p{vtC(1KDN;p>W@h{F14%?-U
zzXe>kB!)&NR=iyPyEZjzekqle<`#b9Yw|IPkr#c&JN@k;dfl=5^yK!FQMe9Y>6>LC
zgAQxI5r)XoCsLS{Z%d=}IY@E)%AuHV7mm@#Q{o;cPjnnKGFX1JEe&I^{9F2d*PF)=
zJ_eS?yRUJ|Tw}}$J9+Gsab_$kIBCK2*vz5CS8>mOEX{H{{5sBUZD_&?gH*b4wDZie
zFoWd}cX=;QPntug>}~O8Jx&m`9u4z?h6a-4B?({k4{ABao<ZP_%F(vg%UAg=LJs{2
zR7UK&3rnXXHNx#;4HgJ9LkW2WD<2Pd(V4kVS4Y!XD$g^H8FX>^)`_u>y!kGdnHi6K
z>qJ4}kuP<}?4y@{iO)O}llRDT`R&787?m_QpL@nPwIP|je464!$1L8=yXP3|ZH-au
zc7KH_Bn+*XU!Xk3xIQR@G^xpUe#w{=@{?qykr(u9;e=!%H+M9Fz|S=r@_HMdo-==R
zxi9Zdf$xI){`sK<uk`$ifjmik-Y0b@9lt!Mv4mGnOi%UbEw}Qtj4_^$TT~A@?EhK9
z(I}1nS@MnsAYOMhq|=K9!7Pw01XZaJ7O~JE8+aB#6Cw5RAR5V~tMOq61|YYEc)JGB
z6}ppzAQBEhEMj)60Xl~Wa=;QUs4RnwS)j83BCf(<sgN!ez!8xy9)v0gYcOCM12B*Q
zst6pF4>}V;V*sf<I_+b93SzK8382PY`AY&hFjndbK^zBk<bZSpFN+}P5MlxYAre3j
zPgTf`X52Oi9iKop^MDBeYawzH3!t#qkOZan0tXP`NpL`2DFPorTzi1J5WsRkZ4MEl
zLRvD=h<~aItE&x^S;&Zx4A7B*h*cUdf@sW5FdJq_L9EcfI-yDpD64P=5WkTI15!rN
z62MwB3HavSBA}&;{8Is4g`j~zfD?k>GeJu}NE20pe883g>1u)`31lq;O}V8OM94@6
z7|I}u1OZgAPCK8)0m>jBBoSep2y|dUQd&7l1{rW6OIax<tK6Oq8%YqK*(oHUgd@Tq
zy8#*>w&KIq46xx9s7<Z(?*YEuI)jK%_5iF0KpH{_0n|2Obv4$(SrZ`40rxflXC^=`
zE~L*DAgF<Y+u(03tO~%|Lg<(VY)ORFaFCe@wC2`ZA_PNWxe@EUG7E~=sQN0-*?+L=
zw*+{p3^c9A<DOJ(y50l=l>;sSfvYl#Q~qbrobqOk|DHvBi&x~Gi3%L?VmF7lQtTj|
z0^~*={51pR#Z4_Wpc)bOf1;U2qs(XqN~cz;Hvk^roBt5Q_9VOcCgI=jA<F*-df25(
zQ)}kMO}oi~9;#t4cY{X6ONt-V@AyYP%TiJM4Kx=3N>t%-@kM~sO5gw*41mhUH;col
zffq+^JIE`C`L4o8sUq1@(4+Vw<-^L42UW&yE4>J~^qbqd_r5OmNR=X2#SHIf7TALO
z;QckRU7jU`1Q25E)DVI8EYO(m5MkY{NCh+zUV#v>V|7SQZyD}!*z&#^`m7=~Z7D0d
zNW!=N5?&s|T|O3w;8`d!>)T$uzqt47BC&h4EANBC2{GQ)tPQ(Y6UPQskvn?C!BDIF
zs#N_38#BmJ?czctwqSFWu#eSxaZAVU`<lK<s+XBP>0&J#yuz>dJ(APFYSXfo59&>g
z!s2pOak)^CjmJ|#Wxg8wphEgow-OPuX7%<H`$YU6F<&^aS3&1Cgg#w2vFD0klAD<s
z@#$X8Cgtwyy;>7ygv#GtGOcUpj`YQt^z9a3g$mT#hI=BD9p1V0-ZLXLHeM=f?D>7V
zCxb)j<luW7uT?ZQ|6SiLaS;<|HTRqJkw>~WgT4P;`wBjY8??lOA4IIFYp{Y^+Ci~;
z(>28=!4-bb_|yKjr~T}L#U25Ez<#o)n@zztU1`b2|NM==hwoKdKj0ZOSb^_pZ4@f}
zQD+<#n>6(}yY=rJ7SojnzLZ~IS8=hEjd18n=d-UINa&mH0j5q5QWUNq=*CC?6g~*-
zQJm~^%~9PxqGcU)bHw#V+=yo92hFVquNd}<3eB#&_ThiK+%%aT-1_-y^q-!0Jp-<0
zS6$q0dAq4Cez<lb=j#0M&1SQ!_@k=fvp08F^maTQ`thMBL`&`L<X{KBuXyj3Grxz_
z%!k)+7>-crF=Ta&aIRvdpg!?3^-p)d;L0^&X9v=mrEsmV;=i3)+6u?5$yRo;aqlwj
zQ=AO=9lt5H^BK;bHy1B3Bk*(pImsYxQ%GC$GL{3_a_@dEy3<JnOc?M;q9QX>e^_Jl
z%+aOKXEN{rY$P1H=O#gIl*k>EVD>3Mth3sP!4a_qBFvd}Aks?-ix979tr-%-;X|rO
zs-6hL+;VdfNaokzIItNX!MA``k}6F;ph$$)1VC0&2rayDB?tLKP!WLjg=1<m#CZ)`
z2%+H95LW|qK~UKo5DD%pmP<l6J`6kdF#OE*%ylrD50OL=g;8cJg?^ld)mVU71G1zd
z+|xd15z>KJX2para{x;rKnCD#I-mx>8RSAuXvmxhk{Li30IACs8$l}AeF|2hf-XcD
z%K}LZz=RDVh#)io<t#lH@pnR?^Q3y|lMz0``$nw8z_FiTiydq(0gQwYC<JsEP)jpl
zDuW!^Fja;aG+`~-SaJlQBn8n_KurMu{CS$es;3hXiW_Lo>Iqu|4mCpxrvaGw5KDYY
zp+YbbG3$cz(o!qp{hBk+-(Pt?yW$}z1RaTxBNuX&K#l^~t{Eotq2AmH7a{0Mgm0=M
z{z-TqiziXb6lF+8y$Z{$l=~%hqk@it)0KN*#l0^O)~me?xm4JN0Xqv}2kMw613>?S
z2s%gsCg{M1m7hPiS+@9}(yWeEcqPdWTP93p!76s(;yK8=93r!CB-_DM;me9-sKp<$
zC!XGd(5(evTm(cGwz*z4{^|wUN`<f6jfLF?rVQ3r-8Oj^WGkb%1;by@L96$@<mkSQ
zUiS7jb!dRy_xSg<9wMM4d1zxMiT!V&KV_Nn)&?<oWMJ)VNw(V!tx3vmZE;JZI4);q
zv$6<Dv7f&BuA=f`Q||~J>`T0QC9JP4$L(hEtoW^2?}g{@F8+Hj)cw%9>_hve5C30h
zR^RgvSO0ww>CW~qn;qOVd*k@*Q046HtFt4|XYc--mFRv{1!u-KeSCEM<9OxAC&y<M
znTzA5tdPFGkJHQMF3+`SF&~wkshJ9%n|(f)s@P+}0&Qg<Cp2%*9sjgo`Bw0|%!&i<
z?4A3mD}z=(k>!DJYQUl7i|{p>!ty7A4~>fa$G$#~3I8e0dblxYLY?@0;53Lk@tLak
z<&L?ylMi(nd@(-z<>svV^x>n;7r!v{zFt<og7|nHIbWSw9S<zOy1n>Ho>DhpG?^0F
zuY+zaJMqo$)73&VXj|pC;KgtE7;1n3BqOY+Ob7>jUw7^M4WQ?#Gi)RUjae{o@B7Y6
z-vvkN@A$uh6MyVq{L#>eU{?HAU-`;8F>j-H$Cd-^$e%xc@9W^7dEVl;C2k98pBBHC
z99_t|wvh8;A#ZVkulKWX`OlM^f0kUjRr=|D-148RMs7S<uMj*r|F!&`xA|p^#jmb%
z<(f;^k6FEM`Ft~d!>@;CgTt&Jzj}T`mu9T~d<hB~qU8LZ=zS09{Z7`tmffeIt?*}%
zCAua2)xP=dRjY2L5#^gtf2QW#K6~UUA*cT;`_shc+a~wKy&HxeUivdc94Z{SYIf=0
zE!n``d<AGy!J*=p7TEXZgu=ypq9?a+WGZ2>h%X9&Qj*iL=@5X;%gE2+@e5M3GD}XE
zSDdLlE2yeIS987`RLU(O$QM^Y_<E>K3D;1YlCEf?RM1w}b}?UxAnuk2^Sg%6f{WL?
zauspeWy3j;(qPBP#95_VU5bk35CLo(5%ic4QV8`KZ3xW!_1l89iM!z4hbiFDk^)x=
zext>ScO=sdL&7Q}5DXq1e^muLMc)nQ``Jm+{TyqCBs|5KnXbSi2D1+i74sCS9`2zT
z!S}DA3>h2#%#V(t6%90SLXOxo`;5cBWp&*C`!LqFWJly4e=bIy&U49mz=h>h@=#8E
zhRr6Pyjo~@wB0t5Q=o}KQ<rizB(LV@Z#lye+;5VzcBs_`&b@s!kU=(E5|I>%A-;sT
zk%woPS%9KqhEu!XA$-u9ZA{$~?Dc};+P~9PDg`qR@X08m^&E52%yXA_d#{j|ntTXN
z9;6Th9rn2^TKW;+Hc_~8H5*r3USPYo%F|o-0g1-UtleE3=cB3gh-5TgEtAC&0O9u^
z3}2v3xl3}C4Yb++a-R8QdS7P$c$!!zl=lczG-sXSb(sLXgiD4}X3DG2F_jQ<2)fJT
zWYLv}5X`BTi*XZoOH{E~;30qXvi`Kau*S$;4s|_a1@GnH0suTTjAmQ(5JEgb%{~^K
zfe*6vgI{N+R?_e}s{_p*?oPgaAic}sE{YK;$$~ALVnKH-<5Z5m1&5_=eyrHJX8%OH
zX9!N$OOz~UFW`y~w|aNwImsIjy@|m&5eMXSN){hI#yV3v#?SG6OcCDmEL%)qs8BuR
z(MS2kfKdw7L$PKPYXGOW9jTdN%!mfimLt-Ka(DqJnQr__C?=S_LJI6@ZgJ}J8h%92
zAX+Pf3F;mdcw#G>k#J^1g)o_5#bq!tmhmhPG$V?iq=+BnhCsHld)?9M2JlWrs|o=V
zLuulJN_t)$VjQjg9aElmlnBbv6qo}9=W*5m3a;RMlCxk7ljPx9na4K&b`A#P`ikS(
zVjtxSD#G8Qg>ve#fVrG~pKw49EffG<a1cw}!c)-bN6Ci^JwO8mVL#3^l(7%xGAW|t
zox>&lIC|*mWSpkLBBLLF_Nu^BPL0j1p(;y>(0#p7fjh=ZYLCaM8gFp#x2{7vsZ2Kr
z2IRHu7(#;iC7FkOx*Y?MSDTS~fYJL!$<4YeISmA5>Mk)}{{e8RpR6M5M_FzY2?=`R
z@0)Mz*#BEx?-Ilh8b`PP?S#yaN_iD^ucf>yQVtQss`&|~6>aMTEpE5sg#&gb;{dE+
zJ1FH5&iXJsu#excAcEPrNQ`rBx{cUp?ew5#!+3*tKW8r7!zz%y5RA83INwv=`9b<>
zP%(-lMl*7RQ3|S}7dY88PxFBk`rcMdcVolEC;_Y~bXTBwCleV;_Qne<AWLo%>d#_M
zvVpS*Z7PHlIb0__p*u(tfv-n1om`n>bZa3OJ}N*>(cNuOtRym{2`2e*Q3i|_Zxk2S
zUf{A>92M20fU%`;9m<8-rTu`4zEUMdMN<a|?S>E>?}Kw&lccI3f{i%txJ?W~R1{TC
zn<_?)Wi0JH*@9+JxOn8jLB-fV3>J#8mNGyy>Mcm7B;k->qBOA4N=*7&O<}SEhe_W(
z0XXsFlZXafv_6t8ix!sRCgtTUWlx+!kY|Sx07VjV<xQnYUU33BSHK+;LgZnHip6H*
zz|!y(s4175=0Ii|CcrShOMvFhhzLv4mrnUp<rmE*n?N}Mu<f7}4N%+_=)_{wcIrv<
znb$Z?X$Jg?y;?^gzO#vAq8TlK>0RN9+5#wB#~;FT-Q`&<y*1j^axOD?td9UZ`;030
zojj<Stpegx*yU*U=&S*^lyFjjGU@^e0TScyr@qy^ZF83kVDR8Sdr)*JNk5XB1cb9|
zPE{u*J247)Xl|sD6Zn<RNp^nSj8+Z@E?F}52szSN^RA?IBqYg;xd5nBL>1<uByEW&
z9ZRjklh}Pa8C3MT*IdP5Zk`+?TTbu+4LC8AHNzh?JWX~dsEu-o9DyS*BgsgIaR;S9
z<r^&Af-YwAlt<Wn%Zx=XZmZBlB}J-Xzz2X(p@m%@73~-f0EMIXC@3!4h|iVVDp9#a
zX$DPL?xBmxMTE-&NMaC$CNTmo`$<t~q-Sk|jH|GLiMGT51uTA&W)AYIYA}AQupgUa
z4{COa!CL&VQn(j<-%s7<%^{H3PDN(m5;@{c9-4zh7Q@f&wx?bob3`zWBf^apaj`RA
z4f%fnf;N-4DO_T2!o7uVoj;=@q(&Qaz>Q>9vQ{XdYrVjPL>au(xM{#~`~lielGM<X
zmZqLD2^a|BB_G-Hc996XlnLvkP*vxhQsiS9ilh|51~eB;a46!U+1`+WEC5{G!>lAT
z+t?6=iM6DLD%DBR#&=pvI-@h7E;h=!EQwH~!K0kCg}0=Mu`bBhtxwvgMQOBCcH$~2
zP~|Py?jGnW9;268;v#Vm%`61fn*g+yQ_`^#H?Be`bu)X|9UV(8+gim%n{u_ae;#`K
zXqJgIhg;w?b|mk%qmD{@ZFY5|Bq*<s`=Sg#DBd378LnkRRdC6`2GKR*D+HQAVQQ>l
zKz1<#9V$ZV8iTylUs2JnGotm{GDry}>fiDIu=So{O{HPD?)R;g9uksJ0-*&65PFa<
zs4IX9h)z&cMAU$&h^Rpk!MYNVqLhFrprQd$5m5u8f@Nl*s9>8|2OVdOU97R!8TOjJ
z&$aiy&N=_N_z}WN-sgSZ`(E7(D8@yW$zC+;QiA0tW+<0$LPKo`YKk5`nX3fLw&PqE
zqMuuI0F5vZTt8iV>Qs#S#keDIs&ZJpyiB=GMqqnq?AW_74AB1m1k7ZoBkL=$Z6aJg
z_U~6l2cpBl+=f6G%L?r?@!!M4)ZEF%p+bF#ZBXV)c0BJ6?<<G)^gBimlwA>#m^zDa
zN~U*K-1AY*FqFVKj_t1;%yiWLiv;lFAT}!ezO@u%FHya>)8l6Xv@dA|JS&f@O4PYq
zO-WHqdNj*Oa~Su7o}#l4e`ZAPu7fn6%Wpy!e|wAjpF6J*-?5AlQ#(69X9kle0kuln
zG+J-GP*EtjiBN+}aX3MzIWb>63Xw%JU5skW1SR6MN8T7KTV;M~EI7Cld-~6YZw!M1
zx?%EZv6z8AY!9dw$t{dz?QWO3ztX&7<;El<TpFyTN$cfcKDP8u#=q~NtcdQX`+3V7
z-$8=#KP@ofBd5-$_8(S1k`v!v8pPlA82m8rFtRG6Rk&iZoFaRRe{s?+@dU^R5602v
z^|fCL5CyX93uvfAT*#|U=kb-BJ$8qpL3)=5A)vn*NQqT^4E;PF<zuUM(~--cJP%E?
z<R}nFGJclMaMKn@h&7ze@O3cUMHg?GUa<SZ94?OZj7O$zMQjyoOEA<!i;&Yt{^V8U
z^NGzX<mjCrKD7%AWRQSHbee~5{4^=1*u4@2$<ljy8{(#B)a(JP(4xk)Vd!bhy1i9E
zMt7b7ysAU0>hhn7fqQ*HZ#3$Huc}>8U|(O*FN8autydo}Eq~7JmUE9Ag(Yc>QO;(;
za%Q2C#aE(9{IW8o%`GGAU!$~HRkqDkdQryOo6P9u0V~xap<x`u*=(wM<1Rh$R{BX*
z`~y-}Eraz-FJhreowkp0TFUIQF~7yzScoBE#~Ep9WskMx70DI1$$=Xyd#|r}ZV*)9
z+}|=|?uAtbKdAV#zM_(6{T|~q)R*1O=iaSn@;WMA6zE5cvwDzmCzf;nYejQ+Wtpz>
zLq6wQY~`c=s(<RWms+*w39al*#gEL5AiT2GW`mbuSopNNq9NJhZhmF4sro~ywl*_A
zfX4qxn0v}M^<vd`x+~wyQvAZJT!@0}L`Dy<YN%e|Ur_mKu%e1*{RNx*h*vq%vu3m>
z^W|W*|Nh#MaU1{mTKi(|rtkHYzUs<>?yBx<75@y@Jn65P_-*qM9VLA~Wox$<*jhS0
zs7NZSy=bTz)4)!7u=Ss>TfAp5|Lw2*8Ow=TxM@sW*^lRy=QGP=d&=u$nRz{R*Yj(;
z`PTE(Dm~@QfP(TJraG;Di+16b9u;S7k2MM1sKLwYzHKqs)Jq`q3|3p;U$5J5^;NlL
z`TlZ+?e<MJ^~b@+Lng5QDF4p%ZJ7%d3*#C_4-Ic-@dRQqaL`$M&#)k;bUF`RJ+<!e
zKqbFn+qN=>_)cX??b?B|EsXtU3ku4ly3F+r<cU1GIEk4YUj2qq(JI}z<y)DtRQnu{
z;Ag^*+RE1jWjA`Zc-z)x9QFNeM66wPZKV-d@xnQGY8xBeZ1vFNk4b?obt}p$MR&ID
zYTX<@qrP5+8FgFQOq(jn8F59`o&DR|rA_zinKz}|eNM~^eAlpNpbnjaEdAQ>ol#Nc
z$#^pY)^;%0?`L@Mmdtp!z~e+fR!ne8j{Cd)yMI+Q<b7j><;-os>s}|<cgi>U>e3Ej
z$Q>8EaY?mL>T5p97{cC7zk-HvujG;i!)qY1rZZrRY#Ud|Lqkcnt}3y5cR8t#T<TR7
zF0$mSbRN^aJ$a*r+cwV6Viv%<gzrGA2c8%@Drfg|Rf>nQ%JTCDsyMH)fHmbst*@x9
zq}uJv;~?WW^h;mH*;e?c5JoJswonP!CK!q#CFBQQkS=2d(y{=$U~9!=QBnY7VT7qi
zXL$wAvNpJzt6&UF*}04nz{?hj!IimiWbKGsd5Fk3+X_SI6yF^=h$&>OtqzziU$jw-
z6rp5Pv5So1-L%&7xzNYp?xIzZN79n{J2x50`FDj{1fc>wzK8r@Tk&e+%oQI3>8f9T
z?TtxxO;oiELl^y+{>gq8d5lZb(p@vu)Mu^j=YH|P*9G20f(>L4G~LI=gJo>5I)OSL
zW6Z5bRt6TocVTe!0$P&r!u)m*3_WALreGQxd$T>Li}6S?P9VUnhzw5)s}chY&>}bH
z<=cuQ*)kZE3l>cy=XNv{_p!p-qccJ{#`Zvh;T^RmNH!~Q=*Vvu*7{${v*qbIk3j43
zB`eOLF=+*4d^Weav#Z7IiRXlX3ljyCJ>PuD<?2%cOx9v0^g6rL-lVrzp!SSeBBN}n
zbDQp@%|;WX;`8~k(as&vmn1F7d{KAC&!^>Nre>#eV#;PXE1@JH=;6v}J~1ryG4xyv
zK}geCz!xagqkP2)wHqABBahP41{5$Y9kt*g=Ql1FJxIPHfmX}Ie8u}a6CrC5Nu>sT
zJ}*5jo{JimJAYn6CD$7t0-9VCZ+l0`u&8Iv$VipcpNy-p0Erd)G-{chDRqkl>M9%U
z&qF>3ljJEMH&s;lbR;My;9@iD`ppIQ`W2jZbld^LQJXmJDFU}Zub43?fmWlyxECVP
zC!{@Pp2XNLI~czVu@fJQ+-ILK^%Ut`qD}{10G%=}-bN>>DuaKx`Tki5NqmQ|dZxvz
zWo~--CJ<fY%$Vewv%?LVwBx?Djj+=D`0Mv)d>TG@{He|ghcio7=GQ@yGN{)Y`7j^K
z$T$>7R<@l8H7ZMr;kS(!mKF&Ybimd+ly8D<DE~%Aq}wv`WrkZM46#XJV<ML-s2f<~
zjiFh$Pqe*U*);Rw?yO{crEcLOf0va2x@t(6fJX1IOA_mV38YizOFC3sEj(N(vX{x8
z6?vpx5(;D+47Ff&E%1uAl=LE_rUIo85~3Ke*7^DX^zmcJI|m1}zszU?Tf5+=eB{Vo
z?zi|!A`_tMGpNx>khqyEThZJnkZOZO7<%kQmNO58(2-zLJZ^x?YGce98;-7a3X!FI
z=}wTT=L`rMBZk8UK0}XZSw$aKl&DUeXOd83biCL2n`05_<%0!BkbCws!@;4YHeil(
z4A^~gK;=XyA_tDl*@VL-$>{kuaGV<Sa5`vL_h$)!lNfewVNP>pILp%Qc>czCb8>ys
z$j<%uXGq)j3TRAZD&{-9+9Q>LnWHAJw6<|HaL@9SL$GOg@6De5I5ffSf+w$Ko{P{?
z)zOQbMF`o&sHsl8&_I>t*kfp2HEPR4CT|DZ%n&EzjTz5ikm?%Uc#84`gsN7JJ|fiK
zSYU@;-23wm``WzwZJs^^N>xI#IJwLf5_IyVAH~Mu&ttGVE%DKj=sEdl!ZFm>Fbtk=
zLGMc@zOS2QBSUv~PSj}ka0%pM)3r3Wej6V2YDV5&iuA`*??p{`lwp|n{x{kWg`cdq
zs|#KG0Jvfk_`oaDutR2A*S{s(q8j9+9bH}0Il9Cz#5g<D2rGmMWFq|IsZ(AP@R#ii
z#Yyuz6z~xGlu2XGA_84O!N<ExX;VtH<5>9hy!Q(?e?so(rryt;ck@QvNp$5l;l#k(
z6UM*Z<Hbv#_+i5io8;(ob`s<HwJk{Gbmb2cM{PhN6^>OK%UqS{5z~U{x5tzVZ9jIx
zPo2o+@>6eP1b;r9yyHpS0FLZG*grB7d9Yb-mxl_8RQC%Z9=KBoF?_&VnQ3G6y|nB>
z(=E6<1EpJx5YSLMft)^jU}TQ9fI?EM{$gwcA+jY!4r63WudaC+nOz8-@bcR?5Dfgh
z_ngwr8e%<Qn9H)ld#}j!c@=ppNIFYli-c=Hau>`-4esa>zs2t@JXGMk=h{@OIX3$F
zRGs_0X~<wi*3*Dlx&6p#UxsC2C!$E4zZaYdab0riR9DPA3(VY6hFI&MoBN*u1~|Rk
zC%TzGcH9!bv7v#4@kO!yA3Nc~h?PI5qO&D)z4Z|X18>=wmH<n1RkUpK(=mr7+1{#a
ztFFV#YvZ0+zVZ4|42+p1)IDe47*eWeZIH<~AROKB2ygE{t6Nqq?gV=)5x;pbSpa9}
zlG6}jk40}98>+M%+8m77lajfI&t6`)bTmHZ;s+(_SI#=nurvKyW4xn*5s1G1d{IK0
zBfh+5Y!_Uno0fbPA($nk{RS6E80H3e&KgLuv8O^ouwwqg_xBaU$3ov`d5M7)CFT_Q
zHgARwk<pj`IkdD18h+jnM7S0vOdy*uqGiR;bMY3Jkp+JQzn!0Y;mM1i^M;C-vaZEO
zR)8vABJaM5oU6WiR#$l@nz`tmsqf6Tuw0kEsCjB)lkW3E(^s%;PbFSM7&b4csrqT$
zEFEgt<6r6B@O>@od&EulL+ck7V3_aVY3FdaY1y8yGn!leii>=vG7mpivVV+)|Im-B
zJLZq_e+IteIE9<Nzw_-t;c21F%1$Pr+BW#@Z}E@&RuH%MoU$fD^5e+iCavkK?*7+u
zt=awi4u2+Vk1eXX@{8HmeD+0i20{`@A+r$K05t$;G|-$0%!`?I^$q`bV!L-=9oW3R
zaC2KpY5D%cb;#k$g9jy6o+b5dl}C3Ttk`y3Q-AD0ThGy|i-!;DD|_`9%dhnJpSfLl
zlWER&u#s~1H}u~s=_)<+{QBJk@2_kte{tZCzR$<5bbV_0msWN_CYNurzU&AedmOwS
zntQc2$NTdnyOa5>;Z1IlUoOo#I^KL#qS>(ui;fwuny*El`(Jd@6O@G`W{lk4HTvSV
zq!A6?8*UdZMB`sK{GMc6_6>c0ZF^u#?5AF|XL*VXou3rccP_rMuj)wlgU<Y_w9{J#
z%UO$VPWk)PoIBmO%`RR!7_8)+%d6?nv5VLx*;V0isqEmaor}MW@?Mye(!Zie7+M?G
z)A{65eS=`OOdS(Cptp~wgx}7@E$M<ur|mi%7S0N^ZyasvX(_e+J7l%&nQ+QRQQM@5
z?m8p3aqK4lV3VFm!D-I5vC|Rd$RKm6r3CFzzRK-GT24;7XdQHKnt5bc>nJNe5J)qp
zOu3@yy!N<^h*&YK>%CqmdigDQFi`UGkFD`lEwZ!gyO=thW?oviDPtKGi(bz3QQ4<K
zt$wyUORMZxDrN~>mT7GF+KgfN9ZQ-oJ1>1y{%gi{jBcHvpE|WM41XXqTH<Hi{qt%p
zV)#3F_ZYVM2m%~4WOv-8gCMG6TdP5ixcG>B&F+Qaw^;WV)@V4<?iLSn=cRXUqB`1l
zVkqVHR7nC?Y6NtbpJ(D4#L2*8E2uc*E-lQ|M(<)ud1tGzg)XzGcF8UqsZ^;!?$68z
z(aWcZ;$qE|?y6qKR_=S8<JR7cBW`QNana=Ar8~#F{rJt=38M(l@im>E|J}Nim#o8N
z$M*j@cE1opf|B_66lc-4QbqLoy4>W#Vo4;>FeC;QPVuuDU$`^yvXNB4wHV?_q^Rl%
z67;bLX9ZHg+nnRKNc)D@<G8|8>^^ThrY9iNIHwFAP8S6!4zXA_^@S|6UDHqo*MOZx
z>6QjIU|kj?%h}oqQOuDsN;&)f_sKZhu}GnzZ|L%7Iy>u(80X~COY<pP7$!T0xtUDE
zC^o1HS;8b!4)U8Pei;pHRpCH%Q-z^{34aohP8Xlq;B9emXU^S?$pk}k*?=QKKJ^I4
zYln~Fn0c}cVQk7sE@ZIsv5)9bHLsZ-7>1oWHY{#Ej;%c2LIm6iHW<O+)Y(JEC0|G1
zi3Mp@2g5kl#rjT^j*ClCM|)k`8Rczp?@L50Q?qsdPSeo1wG)xMj*&Wfx2KOzjhJhd
z&@AhZQ|~$a)Q7-q&Ivr~{oTDLf<~>kAZUUXyqDs-?}D$hr>qVsy7G1{Mje^@Z_dZ_
zzpH#JfSC@=6aec~C2%%^&t`nU?h{jX_KG%V5o)22j_RPrXh}-ceS;2A4TB$91~q4m
zA9U`Av}GifEEdrCnZ5g6WH>V$qgwUL*?GJ|L`fi??U0r(?uhPIL95o=%rIOn>;klK
zhMelBD-?n1VVZB4nnKy2X4oq!JL2WsEE!^{!>B$|%q(9~Xhi}}9rF7)N~2nstVA7^
z4>?|{QaWWZ;%g)4c!||4vrRM~td|zg)0p@BLEAw!Jw=IH7l~0j(q!Z)E@ke}A@=<^
zwJW*Mu3br)dIY1y8@q&N7#;1#IaxYQ;YS%YREqtls%57FH0&<ibGh1?Dea_s=c`Kv
zKx0(|CPpOp($Y)Sqkc7__8^0*)M*?p6Xn5K1PO=TlX^&r_+BPBHha{<RwdP5p>}gO
zPO#Bo^y?o1N2XKTnJQ5CsCgV&{`i$~y2e=t2<9@pX?mWK7BJjD&n(>*VJCrn2NMR}
zRgi0DL`4j>-Rc<{hYbH{lB`N!qEriY1oB9%=A`O((jSZ0h7iQK2pMjlY7~&UDLs>S
z4ebI{=EvHjyiAmHiriU;K{I;nt+td~9{-f@WRKu!0K}*sQf$AqNy7>Ho$7)0n$0$j
z<Q&5gk5V!n2O0}9Me;V*Mv?kZVYV3c9R%!+Q`Ehaf@pU7{WJwpC`=$#9t7~;XMxV;
z9z(2Ea<h@*BTdB^)t{s>o^Lq4C2a&c=hX)BG%d8zAA>?E&RU`cWPFZVOYObLP8VNg
zL}aCqJ;`uEw@{2`UMGfWEt@GrgNxCbB8&|tkk>Rybnh7gnf&z+R{bMjr)^{;*8`jU
z+E!mZ#?_wCuoLR`GL1u&b;}XE79~}hkBg#-qxL%h>cW7F6R3q0l@Sfl<Ng`p&^jMO
zB>I=^SMg_G<>-+11cH@5(7I%znC7Q&;wX59BWMJ5dOVJ%D#*l2tM;qMkR`a9a~VhZ
z<PHYmX(p^X&$G~i{gEoQkT(%wX%DhVq$^V?r8&i7lYVQt1}-b-KAkGRv3L9-tB*3&
zA-Pw1DXa{%W7LdKlg*M0(Y#pWz60|{m<1WHwYI$%xZv`9b6FY*<)l)1y})Of=e=qp
zreNvSXgaU(z{u~{Mu;ekJeeP72^Qg%*Gr936i%?$(PShvE}i7uN-=7py$9QiaN-ac
z1<xh%xXG}r2SdmP2!mxp9<AZkSd-E$!~_K~x(?q<cC<Wv=;AmXfLa1<{V7JDW*_7B
z6U8TAyf`!4`1@&D3?+}JvHSUvGGYE_)+CJlvyOmdWrGo-$M2v2I_4?6m$|0wA~8#c
z`e`f4N9Q97<p;tFp|pNUg8o}>UA&Tr&s`{-%5gHF%q3qq+2m%b#YnNUiDBg_)l?ai
z7C4BRag7MK9E;wzB#cIjRNI#x1HQ&bVs{fVJnLl`l`)KQwg%#1w?OY{6VCO)JE@F5
zns5*>H%>~o(ch)*B-6>QJC4}LdH~l<cxoUH;l4^h;ve<0zBZ*#8BJQZ*Q#nJfI{n^
z;pgmCa^y1`;jK|ZalaakB1dWlsQ2g1P)#R6rCNXJgf9nV5wO7#ki{5pO4E;0WQXy0
zNvWJl>X_r~F)Chpn44F)YQeuppNV7T>~sUL2~r->UOoM0o~E2tq(fuuABnljLf*~4
zc%tVRn|2bc`W@>IXjO7U3AIQsqj)`e;x<XI;qD;b`aQ=u*~&t$v<|hdhwO3s>x^76
zJ^U+1FTJQn+J`+zplq+%lGCWQ9zRbO18o!;L0Xh-8j@9qaD18{2?Qik!nLE$mOwK0
z+8MCwuiEwD?>*~ysQrSBDC<Ol&NUT5ooW*VT1TtyXpM)%&FRolwiw;Iz()^vd`2Af
z=*{s7_PmL~3M6W4Vzm&lBWsUEsbO`|Yu^J|>@@E_=ztgUra~)KlCM5Px{|@wLu(nZ
z#i5@v|6C6Gz65c?lV;_kWI;%#Q(9ni1N4rYVw5kPkx)~@pSf`B$Ks+t7AiNBt5BpT
zk9lHwT5AX#^H_b_gjDPm`f5k{YZIIeNaZ{<07pXI;_3)EQoFpQzv%j{VY0dcY#$<p
zw9L655kD-@PoJH>fGylJJJ^V9yBYK56OvN{ez^%lc<^cvh`?b=HIU%0YibdhZjt8t
zf04<jTg4*0;K-K1v&UB7&ac>`GjkC5i8Kol5ITuIMq&VLEm_)NdaCTN?FPr+0S-Vq
z3d6*%jB7^{%A)PeI~_fbfGk&}V{Qa#Kbhl-^i7%X0uYWO($feW5ZS-vr??pL6jwiH
zIPY^tX4N1mXUzv|f-K|w?(rkWSd8)nRsVKZlp26VLB!A2Mbu>&UCA)F*enS5M#R-N
zck&;1i|bV)&RMr=S3lpv>Pi$Gf8ffyGky~o4xJl~bcA{Ys_gN7&SwJ{mte5qTlm>f
z6~6$?YL0w(BQn7T4UZ1$`or^YHxG+&zvv-<uNy#P$j6_B{idq@bwsV8%-_c#KB{1x
zlap5q)fS#WtQ#?yu8hDUz3$j62e2BkpNp<W0)pu>^llCi$*S(&i2S$Tfj(4a9i3pk
zT>EZNTPpT@)D46N$>=-4q1of;?hv-pel|0h&{U9@tR-Rxmk!=_1q?BGtbEUG(zu-)
zV5tIj$P&#iF!@b9uQENuxfw2=Y<_WwbLE@)d2Qp>9$xbZ7Uv^!KFRlBb9#LUYYh}O
z8DWG>vK3f2%NRc5{PWnbWRGsgJ_F-l!;~ulJMQh@4pvnp<&gX!hmVju#)4gLtov2W
z5G->V`ew;fb9zmj`#evk+-A=Mv)gLxgL0c)4?Je_ErqMV4cMI3BxId1=iIeemMD55
z7P>w3D0-;7p2N?5U@@o)pDvd!Q8(L&%-6Z>p0{_)*eDC<L`MWf47#u*AM#$}HWgyW
zcC0D2iRZa&`yoJna(gS{E$;C=;mExwFPO>NyzJr_8v^+TJx8n65j@dVVn>XCSJq@X
z_>H{<6Nsw!1!h^iR5%S52*&aoH|iPHxQii>0m)~tvMDZSn{*jR@Pa)uV4p)raLQ0K
zi4$aj;ayYODAmRm*A!`aj=--ueWI5*erRuTQ^>AIe7<~dSIU87BVFh5_lXp+Shc#*
z-TYJ;cdGyhw>FOd-V(%;)QcTB1hS{b?6}c7I#HOX-gQ8he@X#R<vh+x=0w+#4`s?_
ztC({Z%<8e)qZS<;7%ALlS~KR+?m`7xIG;Q58sj8S{CUQ~djn=ADkP^_u<sG6J9B>K
z4EP}7=c)s&lX|m7wq?f3%C_{E>IM!OU7m-tSlmhxlVbpt1~_7xx0NL@vjqVSU_qgM
z`Pr}y+Rk~OL3%nv|3UAth%IqFqGEQKJ$6g!05v>&Lt*FcjWIi$SS!iK6o0tOeI`>f
zlgTpdnYFF;jA{M%u``3Q)v_OAy;aGh`mWQgQ5!6>C3>W~fl-;|@XG||1_g759W%YN
z<!NBZQ%^uLXUkN;p&+zh2ev)kAK(ezJO|g+(ekMQRidt6RiXBF9Tg`S=BBQSyL-yf
zZZk@KHLojT0Sr=rNBNBUO9>O)5&e;44y$`4?7H5&dQzIzwx|oY4hq!D-FO-CCD6wh
z??9+*tg|L}f=E@ggLqv?5#kGwsZ-$5Tx8D(__SpF^Ukzl+4SzcP(&cIVCc$2?mPlB
zTFCHEE>*xge<H`H%WZknrKS}^@hUIgFMM&*NKEtV)Zy5~Wayv+5B{7Tu7^Su;vkkh
zQgk%C@**(Amq0yn<ViYe$4lN*<c^YkOFjJQ%?)maUVG7r^H%&!Lh74S?yrs(?~PwR
zwkUyu`hX2&1Zs=Vbu_M(h~voyiNuK9+3p@63SJ*u6Nvlu%$z+n2{<eK@3Yb0Ud&`>
zKqnbkc}t0Yg(k{|6F1??sql*i1{+d7U&6vwsGDL9{ni9$?WUxbQx`AHa55H*3IUuQ
z(@T0!sO&GmHkKcOSb!+yAe3SYa~~64$5FBZPp;&4jc3j_%N-L0$x<X2&-yb7TAY`9
ziJ^L5qO%MgiT9R0UDvT?7_xX{Wkpq4vFIVor9Lw7dmb#$#zx=tXUb5j3UoY~@K+L2
zm&dGkf#C+2+n18pb?My%)KA~@_iB`uaJXLq7Pl4#5Wyv<P_lp2FYP5t<_Iv-^5X%u
z=+1=k4q%5OSh9va;44N(Vx!o~$@^+fi<X}(U7?Vw$jt{J?*+on%+-<<Qeu2XIvT{A
z|7;4hb4O}O4UBFM-<Y^17cF!Hk0o$sQJ~@rd~pu)`{jYeIyWN{sDw4L0$Uy)s7KJx
ztJVAFhEoQ>r;EM&$8p3v{k70N6a?u}PhQY-uM73iH}bC=qyM>qIouqzSmmZ&=BgN$
zxtPuwX&W>lAcR-#sXX^r4Qg5F8n%@ZZUDbOb+x&0rOpr~2t}tzz_!8m9qQER&a^A{
zd`X*Qh-}=6JftxI&>DdU4+e{O)?h1(!jZTjbjor=iGD1<Ohwn8p~|+CF<wAi)CV8n
zr^xzC3*2zjT8G2|1zQH5;+s%$(4;)ll@~42E#xa1h!#zFnjyvE;l0kOnoW*%cO&#I
zcgzs0Cu7h1gtso37T!9|8=tXPfS`nbI-M)Skii8?)W)OGxLVp0K5217o;UbDZO}n6
zV)y_sFNBq%R0{>uPPhJ7{38D;Sh<49%muryBcq;#JvcL*Fi?+z;67iS!_nKoIds;@
zzwZBAu^lSW-lzCUv*ZS!oo1==NkK6$By*2x(Th8#9HKrLv?ym5m;Q`IX{{(Wxa`SU
zH-1<q8PRvA!|!#z4mvDEyuM><bhxSb?U(uV+x8i^5(7xC2Js*i@6h&5UOKO@(rxFE
zRiHUQ{Rw!5PgajN4?SbE#BnU`J*HtIvY*^3rIO{}ch(ywf0*8vfm-B|B>AWxs~2pZ
zzVc&j;ZWzL+cN>Z5iRd0EoWZh)r+otjR{Ly-Wx)`YnIt6Chx9?WcdB<TA}spbyO34
zmj~Na(B~X%XbA`wBFtlG`;mvSekq~4VTaU<Ire&_;NWz-(VM)Dx9c()Zf*`oB=D`r
zFVp^*=&3t6>D_&@W1F;MwUh_9EI7?pAU-C$zz?Gw3@-&lKwX8|w7&ViKF_-Mgx#Gv
zeZ-a9<avh+$z1+>*Qc%L_+(AmfV`<$7xHJKNHwNv1hg=n-gmyw3rB>wU7Hq(k+}Qv
z;@b+KnWR)?_%&u~xcm{6C7-qJa_b(;un><d5xc~@s;spQK0G+^W$B3}<Ccw{WM?|y
z@K4%>bN)7pnAFLzY8f<5KIKpge_es>tH$;{J=`?@eM)oqqP@Ug`_f+T=&6f`#&!3v
zBM%n4cuv|X)xwjitwvd*DRFo$xm_9g2>R&Yk3Y!Hw;~WrJ-hOetqT6ATtJNXT6yqZ
zq#p<Z9uOoKoJDpP&OP1oA9>t0{blz3&&%&ww_@2Xv8<}<it+Con`Dr`9P(wm_&53X
za{FD_Bq;&co3mDqSmvd${krgA|6S&%Jui3Lq(91PEM5Pl8EaYc+qWI-Sq|G6TEN_+
z=2WG)=BGLFwh5=rKvGEfjH2~A&$iWE#26u-lE_)W;(BS}Kh3`goPDl&Ic5iZ@6dz!
z5`SHQWtd2`qX{;x7q-p`GgCMJY_tB}yQ4?lrC~W1n*g7b=1xZUoH5@lVjn*2v}D^p
zow?)Itb>iDmg+xg)|lasbA~^!AO5=Qe@e6dSI72$LlOR8KB@oRu_fuG``i9+pVa?{
zJ@|h?5pMh+I_cl{jSn7n0)RY0hK8O#dx3CRkof}AC0|6`50C!yNu9pju>DzO;|U5Y
zOQpbMjdVMotn9FW!}i2~Pz1|)i5LQkuX3^!yT^e-rpU4sODBP)cBD=!F7O(r<)+S8
z1U%3Hda!#-eOg+vSRkeZt2$tDF>t(bYe)RiwlTG=>@EhJduEs`uu|wtL32?l;D%+W
zOjkEhtpgv9(q<hcp$NC`xv5AgHJ$6J)aAbu6NS|ddH0kL2)SCs9FZ)YfE*?h+bXqv
zD^ko7+DAP$na&i_i|L8Au{?ZSC6Aw7q?13=oVwh-{N*9)h*>zpYJ}dX?A2%(z6md^
zoYQ9)qAactXhY7u{%i2aB9D0;n>ChZ$2U3s@^{UJx1MkQn(&Luh96%{kA7SFcIV=6
zBov_}ftOZTWCi}E8);O_Orx6N(yeBF4}NaUcO>cFMJ@?pX&jPHdbZd;uRo0&eouLp
zBWX4n%cKu)|K;rPm<L&8V7t3~RF3KlRhYDO_+e$_w0YVHM_;l7s+H<Ai5mRoqnd>I
zMUx^l`ANOp<#KAvNVZn%#&Ag>#Iq(Ad+rUh?wDJRhNc1wxl=)rh8@#{AuM`Q(9_2J
zB{ve29Jk2Mq@hzEUmGp%)<tpHeMD5_%f~~{cVDZu-2-4OCP`wJVrSzfe{+Xs?4N_u
zmX@t;4Px7TeHC36<gtbBU>{PN<ff7hwa0HG*@LI^B?u`Sx`|VcIZDnjIT>x5(VP~Y
zd^NlLg!$o{(`IfOZ*Ro=Sj<*E%$lsmvyot>;hve_8nQ`h9mc~2@v)0upZeJLFp=eD
zA~6KceFp7#<&Xu~%ejmV7t%$gAc`|?VCLJiyu$0VND+}Ldfw}pdQIdLN_;;O(fcx|
zPf}MNcfqj&?*o)xySMGnBJT+3?8~Y%NZz*g4_9k+32#98`SMP~<SR0qCAg_nQ`p^?
zKip7wBlsoy{u}RZMSJkjvFv+$r{7eTG*(`sHI%Km?O{kgn`&F~I`5|U>>1bYJeR2O
zEKmE4>Pu_By#8_@r~7?1{{KS}mVA3szknO&T&S5*_H60@fg<cX^!-Kq@i*UJ>M!`!
zIQN`i5^=O~UC{g2r{0cSU2~fLoA;@}1VZupjE6br{f@`qBVHdLeP(z~t>+b@cf!e)
zBc!f>x^_Nv(K&U__<$6w*M22_XO-3bwcBanV@dAYH9ri~HIYAyWV;U3+<0XE;p+B*
z!B;H;srU*y#Ssp``3C&&m_58_`{gL5yGlNa8H@h-dyAQidC}2@lV9=xGsxsMm7gK4
z71c846CLBuCGcRqnsNOd&M^8wX|A#cansV*6)hLPy0UXspuUxYp`P_y-_-PZxWCx5
z+@@s{L!sL9;YvI;uHbLTsTYWfJg67<r^uTrfZwXrU?;YTr{xPYsrt1nvPiq-d7tK^
zX-)Ip+5B%wJZVQ<`L)%=LP~(;Vfp?w=JmZ$5jB4HJaf&k_qLr$_Oe>UzKX|<-8eZ0
z)7Z(f*2_;cxkqZ%sG*97DjUQ}`fc)D3`r=z%$O8+n%+*twD%B*E)Y(g^vlQ{r~}i{
zh(CR`fOj@&4w6D1*W?_|6Xz3XPyvH)8A$shF$TEncAGz~;&GH$*|{+qM)uN->rrY>
z`HWKat7QmPx959H;UUxG-`6)13w}<n36l3I(b7^yP&6(n<+Q;4+b~XyQ7y^?3x;Cl
zv@9_$>JpcEm8uU20P4`H18Aul4N_@H_#|~C55`K2i9$Wr!s*6n8GC@kJtdUt8d%va
z8b+U(7OYgaNuNN=TtMaPhe7Tn@<ywVB)c;#qk{FDt#;zG`1wTjx*JfSY^CyvTH0*c
z4!S`+b^H#%`JATa<YFkh9x#@fG=f<2ob+p1N(>J^cy6S!v8#$H0yVo-M~mcL;VM*W
zo6Dq6w6&Zb#;cVW%278SR>v|VR0WCmiLqqXBo*kNB%Wd3zi@S~Y5!q^4t?{0NQ~2=
zLIb{$O(fdSV>et4CyHlvUJW1jC*tCZ`LYIaZlqq#O9GU@<V@PS7l#--0QJIwR;qgv
zSip1x6;na1hzyW>bx45hB{fpJm77e|n=`6uECpmo?rSM|*KanGS7(unqg(}+GdyAS
zZX$geD&icBv?SC?8+FA2vAw9~eWRHH13{UPA>yf-ie-pnt2EmJi?_ktVNkc6I!SwX
z-WFpq)gWh$<dO0D`F*e2w~lvI71}7p3)g$%>E}-(Y)fmJ>qa@e_ycH98EKB)y{y?P
zXqIH8*<4h6TIe;K;%sRFHdwhYxnFrj9E@5A<7be*TcwgN`&!!`r7MKb#T0*roDrq~
zE@KbFkT5x{u`XnHhtt`ns$`nD-ocEZZM%tYUn+y%XZMq#CLS9TEsk4Yq{VH%LZ44q
zIpl`Z1I`0Bi>ypP??;`rI3-?JX!F>3D$+(xRf>n7irVXcjWhzYak@ea%0A#TSh9Mi
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/angular-pdf/readme.md b/public/assets/plugins/angular-pdf/readme.md
new file mode 100644
index 0000000..196acb2
--- /dev/null
+++ b/public/assets/plugins/angular-pdf/readme.md
@@ -0,0 +1,219 @@
+# angular-pdf [![Build Status](https://travis-ci.org/sayanee/angularjs-pdf.png)](https://travis-ci.org/sayanee/angularjs-pdf) [![Dependency Status](https://gemnasium.com/sayanee/angularjs-pdf.png)](https://gemnasium.com/sayanee/angularjs-pdf)
+
+Version: 0.4.0
+
+>An [AngularJS](http://angularjs.org/) [directive](http://docs.angularjs.org/guide/directive) `ng-pdf` to display PDF files with [PDFJS](http://mozilla.github.io/pdf.js/).
+
+## Overview [[demo](http://sayan.ee/angularjs-pdf/)]
+
+Integrate PDF files right into web pages.
+
+![Angular PDF](ng-pdf.gif)
+
+##Requirements
+
+Check [`bower.json` file](https://github.com/sayanee/angularjs-pdf/blob/master/bower.json) for dependencies and their versions:
+
+1. [AngularJS](http://angularjs.org/) - get the latest [angular.min.js](https://developers.google.com/speed/libraries/devguide#angularjs)
+- [PDFJS](http://mozilla.github.io/pdf.js/) - build the files [`pdf.js` and `pdf.worker.js`](https://github.com/mozilla/pdf.js#building-pdfjs)
+- [Evergreen browsers](https://github.com/mozilla/pdf.js/wiki/Frequently-Asked-Questions#what-browsers-are-supported)
+
+###Features
+
+1. next / previous page
+- zoom in / out
+- rotate clockwise
+- jump to a page number
+- when scrolling, the pdf controls will get fixed position at the top
+- define the view template
+- define the path to pdf with scope variable
+- handles error
+- show loading of pdf
+- show progress percentage of loading pdf
+
+## Getting Started
+
+1. install or copy over the file `dist/angular-pdf.min.js` or `dist/angular-pdf.js`
+
+    ```shell
+    bower install angular-pdf
+    ```
+1. include the path to the direcitve file in `index.html`
+
+    ```html
+    <script src="js/vendor/angular-pdf/dist/angular-pdf.js"></script>
+    ```
+
+1. include the directive as a dependency when defining the angular app:
+
+    ```js
+    var app = angular.module('App', ['pdf']);
+    ```
+1. include the directive with the attribute path to the partial under a controller
+
+    ```html
+    <div class="wrapper" ng-controller="DocCtrl">
+        <ng-pdf template-url="/partials/viewer.html"></ng-pdf>
+    </div>
+    ```
+    - `scale` as an option
+
+        ```html
+        <ng-pdf template-url="/partials/viewer.html" scale=1></ng-pdf>
+        ```
+
+        `scale` attribute can also be `page-fit`
+
+        ```html
+        <ng-pdf template-url="/partials/viewer.html" scale="page-fit"></ng-pdf>
+        ```
+    - `page` as an option for initial page number
+
+        ```html
+        <ng-pdf template-url="/partials/viewer.html" page=12></ng-pdf>
+        ```
+
+1. include the `canvas` element to display the pdf in the template-url file
+
+    ```html
+    <canvas id="pdf-canvas"></canvas>
+    ```
+1. include the path to the pdf file in the controller
+
+    ```js
+    app.controller('DocCtrl', function($scope) {
+        $scope.pdfUrl = '/pdf/relativity.pdf';
+    });
+    ```
+
+###Options
+
+1. **Next / Previous page**: Include the controls in the view file as defined in the attribute `template-url`
+
+    ```
+    <button ng-click="goPrevious()"><</span></button>
+    <button ng-click="goNext()">></span></button>
+    ```
+1. **Zoom in / out**: Include the controls in the view file as defined in the attribute `template-url`
+
+    ```
+    <button ng-click="zoomIn()">+</span></button>
+    <button ng-click="zoomOut()">-</span></button>
+    ```
+1. **Rotate clockwise**: Include the controls in the view file as defined in the attribute `template-url` and the initial class `rotate0`
+
+    ```html
+    <button ng-click="rotate()">90</span></button>
+    ...
+    <canvas id="pdf-canvas" class="rotate0"></canvas>
+    ```
+
+    include the css styles:
+
+    ```css
+    .rotate0 {-webkit-transform: rotate(0deg); transform: rotate(0deg); }
+    .rotate90 {-webkit-transform: rotate(90deg); transform: rotate(90deg); }
+    .rotate180 {-webkit-transform: rotate(180deg); transform: rotate(180deg); }
+    .rotate270 {-webkit-transform: rotate(270deg); transform: rotate(270deg); }
+    ```
+1. **Jump to page number**: Include the controls in the view file as defined in the attribute `template-url`
+
+    ```html
+    <span>Page: </span><input type="text" min=1 ng-model="pageNum"><span> / {{pageCount}}</span>
+    ```
+1. **Fixed pdf controls upon scrolling**: Wrap the controls in the view file as defined in the attribute `template-url` with a tag `nav` with an `ng-class`. Amend the scroll amount as required.
+
+    ```html
+    <nav ng-class="{'pdf-controls fixed': scroll > 100, 'pdf-controls': scroll <= 100}">
+    ...
+    </nav>
+    ```
+
+    And include the relevant css styles as required:
+
+    ```css
+    .pdf-controls { width: 100%; display: block; background: #eee; padding: 1em;}
+    .fixed { position: fixed; top: 0; left: calc(50% - 480px); z-index: 100; width: 100%; padding: 1em; background: rgba(238, 238, 238,.9); width: 960px; }
+    ```
+1. open the file `index.html` with a web server
+
+###Handle error
+
+1. in the controller, you can call the function `$scope.onError`:
+
+	```js
+	$scope.onError = function(error) {
+    	// handle the error
+    	// console.log(error);
+  	}
+	```
+
+###Show loading
+
+1. in the controller, you can call the function `$scope.onLoad` when the pdf succesfully loaded:
+
+	```js
+	$scope.loading = 'loading';
+
+	$scope.onLoad = function() {
+    // do something when pdf is fully loaded
+    // $scope.loading = '';
+  }
+  ```
+
+###Show progress percentage
+
+1. in the controller, you can call the function `$scope.onProgress`
+
+	```js
+	$scope.onProgress = function(progress) {
+		// handle a progress bar
+    	// progress% = progress.loaded / progress.total
+    	// console.log(progress);
+  }
+  ```
+
+
+
+##Variations
+
+1. If using with [Angular UI modal](http://angular-ui.github.io/bootstrap/#/modal), `pageNum` attribute is no longer required. [Checkout the implementation](https://github.com/sayanee/angularjs-pdf/issues/12)
+
+
+##Similar projects
+
+1. [angular-pdf-viewer](https://github.com/winkerVSbecks/angular-pdf-viewer) - a more self-contained directive
+- [ng-pdfviewer](https://github.com/akrennmair/ng-pdfviewer)
+
+
+##Credit
+
+PDF example used is [Relativity: The Special and General Theory by Albert Einstein](http://www.gutenberg.org/ebooks/30155) as kindly organized and made available free by [Project Gutenberg](http://www.gutenberg.org/wiki/Main_Page).
+
+#Contribute
+
+Please see [`CONTRIBUTING.md`](CONTRIBUTING.md) for details.
+
+#Versioning
+
+This repository follows the [Semantic Versioning](http://semver.org/) guidelines:
+
+1. For **patches**, run the command:
+
+	```
+	grunt bump
+	```
+- For **minor release**, run the command:
+
+	```
+	grunt bump:minor
+	```
+- For **major release**, run the command:
+
+	```
+	grunt bump:major
+	```
+
+## License
+
+(C) Sayanee Basu 2014, released under an MIT license
diff --git a/public/assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css b/public/assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css
new file mode 100644
index 0000000..f1e5f34
--- /dev/null
+++ b/public/assets/plugins/bootstrap-fileinput/bootstrap-fileinput.css
@@ -0,0 +1,110 @@
+/*!
+ * Jasny Bootstrap v3.1.3 (http://jasny.github.io/bootstrap)
+ * Copyright 2012-2014 Arnold Daniels
+ * Licensed under Apache-2.0 (https://github.com/jasny/bootstrap/blob/master/LICENSE)
+ */
+ 
+.btn-file {
+  position: relative;
+  overflow: hidden;
+  vertical-align: middle;
+}
+.btn-file > input {
+  position: absolute;
+  top: 0;
+  right: 0;
+  width: 100%;
+  height: 100%;
+  margin: 0;
+  font-size: 23px;
+  cursor: pointer;
+  filter: alpha(opacity=0);
+  opacity: 0;
+
+  direction: ltr;
+}
+.fileinput {
+  display: inline-block;
+  margin-bottom: 9px;
+}
+.fileinput .form-control {
+  display: inline-block;
+  padding-top: 7px;
+  padding-bottom: 5px;
+  margin-bottom: 0;
+  vertical-align: middle;
+  cursor: text;
+}
+.fileinput .thumbnail {
+  display: inline-block;
+  margin-bottom: 5px;
+  overflow: hidden;
+  text-align: center;
+  vertical-align: middle;
+}
+.fileinput .thumbnail > img {
+  max-height: 100%;
+}
+.fileinput .btn {
+  vertical-align: middle;
+}
+.fileinput-exists .fileinput-new,
+.fileinput-new .fileinput-exists {
+  display: none;
+}
+.fileinput-inline .fileinput-controls {
+  display: inline;
+}
+.fileinput-filename {
+  display: inline-block;
+  overflow: hidden;
+  vertical-align: middle;
+}
+.form-control .fileinput-filename {
+  vertical-align: bottom;
+}
+.fileinput.input-group {
+  display: table;
+}
+.fileinput.input-group > * {
+  position: relative;
+  z-index: 2;
+}
+.fileinput.input-group > .btn-file {
+  z-index: 1;
+}
+.fileinput-new.input-group .btn-file,
+.fileinput-new .input-group .btn-file {
+  border-radius: 0 4px 4px 0;
+}
+.fileinput-new.input-group .btn-file.btn-xs,
+.fileinput-new .input-group .btn-file.btn-xs,
+.fileinput-new.input-group .btn-file.btn-sm,
+.fileinput-new .input-group .btn-file.btn-sm {
+  border-radius: 0 3px 3px 0;
+}
+.fileinput-new.input-group .btn-file.btn-lg,
+.fileinput-new .input-group .btn-file.btn-lg {
+  border-radius: 0 6px 6px 0;
+}
+.form-group.has-warning .fileinput .fileinput-preview {
+  color: #8a6d3b;
+}
+.form-group.has-warning .fileinput .thumbnail {
+  border-color: #faebcc;
+}
+.form-group.has-error .fileinput .fileinput-preview {
+  color: #a94442;
+}
+.form-group.has-error .fileinput .thumbnail {
+  border-color: #ebccd1;
+}
+.form-group.has-success .fileinput .fileinput-preview {
+  color: #3c763d;
+}
+.form-group.has-success .fileinput .thumbnail {
+  border-color: #d6e9c6;
+}
+.input-group-addon:not(:first-child) {
+  border-left: 0;
+}
\ No newline at end of file
diff --git a/public/assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js b/public/assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js
new file mode 100644
index 0000000..5cb0a4f
--- /dev/null
+++ b/public/assets/plugins/bootstrap-fileinput/bootstrap-fileinput.js
@@ -0,0 +1,198 @@
+/* ===========================================================
+ * Bootstrap: fileinput.js v3.1.3
+ * http://jasny.github.com/bootstrap/javascript/#fileinput
+ * ===========================================================
+ * Copyright 2012-2014 Arnold Daniels
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License")
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
++function ($) { "use strict";
+
+  var isIE = window.navigator.appName == 'Microsoft Internet Explorer'
+
+  // FILEUPLOAD PUBLIC CLASS DEFINITION
+  // =================================
+
+  var Fileinput = function (element, options) {
+    this.$element = $(element)
+    
+    this.$input = this.$element.find(':file')
+    if (this.$input.length === 0) return
+
+    this.name = this.$input.attr('name') || options.name
+
+    this.$hidden = this.$element.find('input[type=hidden][name="' + this.name + '"]')
+    if (this.$hidden.length === 0) {
+      this.$hidden = $('<input type="hidden">').insertBefore(this.$input)
+    }
+
+    this.$preview = this.$element.find('.fileinput-preview')
+    var height = this.$preview.css('height')
+    if (this.$preview.css('display') !== 'inline' && height !== '0px' && height !== 'none') {
+      this.$preview.css('line-height', height)
+    }
+        
+    this.original = {
+      exists: this.$element.hasClass('fileinput-exists'),
+      preview: this.$preview.html(),
+      hiddenVal: this.$hidden.val()
+    }
+    
+    this.listen()
+  }
+  
+  Fileinput.prototype.listen = function() {
+    this.$input.on('change.bs.fileinput', $.proxy(this.change, this))
+    $(this.$input[0].form).on('reset.bs.fileinput', $.proxy(this.reset, this))
+    
+    this.$element.find('[data-trigger="fileinput"]').on('click.bs.fileinput', $.proxy(this.trigger, this))
+    this.$element.find('[data-dismiss="fileinput"]').on('click.bs.fileinput', $.proxy(this.clear, this))
+  },
+
+  Fileinput.prototype.change = function(e) {
+    var files = e.target.files === undefined ? (e.target && e.target.value ? [{ name: e.target.value.replace(/^.+\\/, '')}] : []) : e.target.files
+    
+    e.stopPropagation()
+
+    if (files.length === 0) {
+      this.clear()
+      return
+    }
+
+    this.$hidden.val('')
+    this.$hidden.attr('name', '')
+    this.$input.attr('name', this.name)
+
+    var file = files[0]
+
+    if (this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match(/^image\/(gif|png|jpeg)$/) : file.name.match(/\.(gif|png|jpe?g)$/i)) && typeof FileReader !== "undefined") {
+      var reader = new FileReader()
+      var preview = this.$preview
+      var element = this.$element
+
+      reader.onload = function(re) {
+        var $img = $('<img>')
+        $img[0].src = re.target.result
+        files[0].result = re.target.result
+        
+        element.find('.fileinput-filename').text(file.name)
+        
+        // if parent has max-height, using `(max-)height: 100%` on child doesn't take padding and border into account
+        if (preview.css('max-height') != 'none') $img.css('max-height', parseInt(preview.css('max-height'), 10) - parseInt(preview.css('padding-top'), 10) - parseInt(preview.css('padding-bottom'), 10)  - parseInt(preview.css('border-top'), 10) - parseInt(preview.css('border-bottom'), 10))
+        
+        preview.html($img)
+        element.addClass('fileinput-exists').removeClass('fileinput-new')
+
+        element.trigger('change.bs.fileinput', files)
+      }
+
+      reader.readAsDataURL(file)
+    } else {
+      this.$element.find('.fileinput-filename').text(file.name)
+      this.$preview.text(file.name)
+      
+      this.$element.addClass('fileinput-exists').removeClass('fileinput-new')
+      
+      this.$element.trigger('change.bs.fileinput')
+    }
+  },
+
+  Fileinput.prototype.clear = function(e) {
+    if (e) e.preventDefault()
+    
+    this.$hidden.val('')
+    this.$hidden.attr('name', this.name)
+    this.$input.attr('name', '')
+
+    //ie8+ doesn't support changing the value of input with type=file so clone instead
+    if (isIE) { 
+      var inputClone = this.$input.clone(true);
+      this.$input.after(inputClone);
+      this.$input.remove();
+      this.$input = inputClone;
+    } else {
+      this.$input.val('')
+    }
+
+    this.$preview.html('')
+    this.$element.find('.fileinput-filename').text('')
+    this.$element.addClass('fileinput-new').removeClass('fileinput-exists')
+    
+    if (e !== undefined) {
+      this.$input.trigger('change')
+      this.$element.trigger('clear.bs.fileinput')
+    }
+  },
+
+  Fileinput.prototype.reset = function() {
+    this.clear()
+
+    this.$hidden.val(this.original.hiddenVal)
+    this.$preview.html(this.original.preview)
+    this.$element.find('.fileinput-filename').text('')
+
+    if (this.original.exists) this.$element.addClass('fileinput-exists').removeClass('fileinput-new')
+     else this.$element.addClass('fileinput-new').removeClass('fileinput-exists')
+    
+    this.$element.trigger('reset.bs.fileinput')
+  },
+
+  Fileinput.prototype.trigger = function(e) {
+    this.$input.trigger('click')
+    e.preventDefault()
+  }
+
+  
+  // FILEUPLOAD PLUGIN DEFINITION
+  // ===========================
+
+  var old = $.fn.fileinput
+  
+  $.fn.fileinput = function (options) {
+    return this.each(function () {
+      var $this = $(this),
+          data = $this.data('bs.fileinput')
+      if (!data) $this.data('bs.fileinput', (data = new Fileinput(this, options)))
+      if (typeof options == 'string') data[options]()
+    })
+  }
+
+  $.fn.fileinput.Constructor = Fileinput
+
+
+  // FILEINPUT NO CONFLICT
+  // ====================
+
+  $.fn.fileinput.noConflict = function () {
+    $.fn.fileinput = old
+    return this
+  }
+
+
+  // FILEUPLOAD DATA-API
+  // ==================
+
+  $(document).on('click.fileinput.data-api', '[data-provides="fileinput"]', function (e) {
+    var $this = $(this)
+    if ($this.data('bs.fileinput')) return
+    $this.fileinput($this.data())
+      
+    var $target = $(e.target).closest('[data-dismiss="fileinput"],[data-trigger="fileinput"]');
+    if ($target.length > 0) {
+      e.preventDefault()
+      $target.trigger('click.bs.fileinput')
+    }
+  })
+
+}(window.jQuery);
\ No newline at end of file
diff --git a/public/assets/plugins/jquery-multi-select/LICENSE.txt b/public/assets/plugins/jquery-multi-select/LICENSE.txt
new file mode 100644
index 0000000..5c93f45
--- /dev/null
+++ b/public/assets/plugins/jquery-multi-select/LICENSE.txt
@@ -0,0 +1,13 @@
+            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+                    Version 2, December 2004
+
+ Copyright (C) 2004 Sam Hocevar <[email-masked]>
+
+ Everyone is permitted to copy and distribute verbatim or modified
+ copies of this license document, and changing it is allowed as long
+ as the name is changed.
+
+            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. You just DO WHAT THE FUCK YOU WANT TO.
diff --git a/public/assets/plugins/jquery-multi-select/README.markdown b/public/assets/plugins/jquery-multi-select/README.markdown
new file mode 100644
index 0000000..6220308
--- /dev/null
+++ b/public/assets/plugins/jquery-multi-select/README.markdown
@@ -0,0 +1,3 @@
+# jquery.multi-select.js
+
+Usage and Demos [http://loudev.com](http://loudev.com "jquery.multi-select.js")
diff --git a/public/assets/plugins/jquery-multi-select/css/multi-select.css b/public/assets/plugins/jquery-multi-select/css/multi-select.css
new file mode 100644
index 0000000..e43e847
--- /dev/null
+++ b/public/assets/plugins/jquery-multi-select/css/multi-select.css
@@ -0,0 +1,98 @@
+.ms-container{
+  background: transparent url('../img/switch.png') no-repeat 50% 50%;
+  width: 570px;
+}
+
+.ms-container:after{
+  content: ".";
+  display: block;
+  height: 0;
+  line-height: 0;
+  font-size: 0;
+  clear: both;
+  min-height: 0;
+  visibility: hidden;
+}
+
+.ms-container .ms-selectable, .ms-container .ms-selection{
+  background: #fff;
+  color: #555555;
+  float: left;
+  width: 45%;
+}
+.ms-container .ms-selection{
+  float: right;
+}
+
+.ms-container .ms-list{
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
+  -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
+  -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
+  -o-transition: border linear 0.2s, box-shadow linear 0.2s;
+  transition: border linear 0.2s, box-shadow linear 0.2s;
+  border: 1px solid #ccc;
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  border-radius: 3px;
+  position: relative;
+  height: 350px;
+  padding: 0;
+  overflow-y: auto;
+}
+
+.ms-container .ms-list.ms-focus{
+  border-color: rgba(82, 168, 236, 0.8);
+  -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);
+  outline: 0;
+  outline: thin dotted \9;
+}
+
+.ms-container ul{
+  margin: 0;
+  list-style-type: none;
+  padding: 0;
+}
+
+.ms-container .ms-optgroup-container{
+  width: 100%;
+}
+
+.ms-container .ms-optgroup-label{
+  margin: 0;
+  padding: 5px 0px 0px 5px;
+  cursor: pointer;
+  color: #999;
+}
+
+.ms-container .ms-selectable li.ms-elem-selectable,
+.ms-container .ms-selection li.ms-elem-selection{
+  border-bottom: 1px #eee solid;
+  padding: 2px 10px;
+  color: #555;
+  font-size: 14px;
+}
+
+.ms-container .ms-selectable li.ms-hover,
+.ms-container .ms-selection li.ms-hover{
+  cursor: pointer;
+  color: #fff;
+  text-decoration: none;
+  background-color: #08c;
+}
+
+.ms-container .ms-selectable li.disabled,
+.ms-container .ms-selection li.disabled{
+  background-color: #eee;
+  color: #aaa;
+  cursor: text;
+}
+
+.multi-select {
+  right: auto !important;
+  left: -9999px !important;
+}
diff --git a/public/assets/plugins/jquery-multi-select/img/switch.png b/public/assets/plugins/jquery-multi-select/img/switch.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a9076c5487fc989034f64e91afe88afae045e4e
GIT binary patch
literal 236
zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1|(OCFP#RYBuiW)N`mv#O3D+9QW+dm@{>{(
zJaZG%Q-e|yQz{EjrrH1%^?ABDhE&{oGbNGhfC5Kr@UDE>rFwHtZ**#6+qyk|wu0c*
z<u;~bg6(Bx`ZwAaSUz`hIcKF5?4`+Ra#?`s<*fr7UiBwP>0fCM(*L-0dd^EjhNEtA
zIyZir9rIWtrO>!Hz+=Iz?Yq`yWC(9Ku<qq#pXI_=mEML`TP^e0uw9z<_QchU?@Z=?
j&&*!=-@f&x;sFM4oxcC?oD52UE@SX?^>bP0l+XkK?_pbO

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/jquery-multi-select/img/switch_original.png b/public/assets/plugins/jquery-multi-select/img/switch_original.png
new file mode 100644
index 0000000000000000000000000000000000000000..7accb6ac4bdd2afdbfb7b1e4cab0049f9d99cac4
GIT binary patch
literal 3080
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
WzjMhbZDN}M0000<MNUMnLSTZq|Lkl4

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/jquery-multi-select/js/jquery.multi-select.js b/public/assets/plugins/jquery-multi-select/js/jquery.multi-select.js
new file mode 100644
index 0000000..697d15b
--- /dev/null
+++ b/public/assets/plugins/jquery-multi-select/js/jquery.multi-select.js
@@ -0,0 +1,532 @@
+/*
+* MultiSelect v0.9.11
+* Copyright (c) 2012 Louis Cuny
+*
+* This program is free software. It comes without any warranty, to
+* the extent permitted by applicable law. You can redistribute it
+* and/or modify it under the terms of the Do What The Fuck You Want
+* To Public License, Version 2, as published by Sam Hocevar. See
+* http://sam.zoy.org/wtfpl/COPYING for more details.
+*/
+
+!function ($) {
+
+  "use strict";
+
+
+ /* MULTISELECT CLASS DEFINITION
+  * ====================== */
+
+  var MultiSelect = function (element, options) {
+    this.options = options;
+    this.$element = $(element);
+    this.$container = $('<div/>', { 'class': "ms-container" });
+    this.$selectableContainer = $('<div/>', { 'class': 'ms-selectable' });
+    this.$selectionContainer = $('<div/>', { 'class': 'ms-selection' });
+    this.$selectableUl = $('<ul/>', { 'class': "ms-list", 'tabindex' : '-1' });
+    this.$selectionUl = $('<ul/>', { 'class': "ms-list", 'tabindex' : '-1' });
+    this.scrollTo = 0;
+    this.elemsSelector = 'li:visible:not(.ms-optgroup-label,.ms-optgroup-container,.'+options.disabledClass+')';
+  };
+
+  MultiSelect.prototype = {
+    constructor: MultiSelect,
+
+    init: function(){
+      var that = this,
+          ms = this.$element;
+
+      if (ms.next('.ms-container').length === 0){
+        ms.css({ position: 'absolute', left: '-9999px' });
+        ms.attr('id', ms.attr('id') ? ms.attr('id') : Math.ceil(Math.random()*1000)+'multiselect');
+        this.$container.attr('id', 'ms-'+ms.attr('id'));
+        this.$container.addClass(that.options.cssClass);
+        ms.find('option').each(function(){
+          that.generateLisFromOption(this);
+        });
+
+        this.$selectionUl.find('.ms-optgroup-label').hide();
+
+        if (that.options.selectableHeader){
+          that.$selectableContainer.append(that.options.selectableHeader);
+        }
+        that.$selectableContainer.append(that.$selectableUl);
+        if (that.options.selectableFooter){
+          that.$selectableContainer.append(that.options.selectableFooter);
+        }
+
+        if (that.options.selectionHeader){
+          that.$selectionContainer.append(that.options.selectionHeader);
+        }
+        that.$selectionContainer.append(that.$selectionUl);
+        if (that.options.selectionFooter){
+          that.$selectionContainer.append(that.options.selectionFooter);
+        }
+
+        that.$container.append(that.$selectableContainer);
+        that.$container.append(that.$selectionContainer);
+        ms.after(that.$container);
+
+        that.activeMouse(that.$selectableUl);
+        that.activeKeyboard(that.$selectableUl);
+
+        var action = that.options.dblClick ? 'dblclick' : 'click';
+
+        that.$selectableUl.on(action, '.ms-elem-selectable', function(){
+          that.select($(this).data('ms-value'));
+        });
+        that.$selectionUl.on(action, '.ms-elem-selection', function(){
+          that.deselect($(this).data('ms-value'));
+        });
+
+        that.activeMouse(that.$selectionUl);
+        that.activeKeyboard(that.$selectionUl);
+
+        ms.on('focus', function(){
+          that.$selectableUl.focus();
+        })
+      }
+
+      var selectedValues = ms.find('option:selected').map(function(){ return $(this).val(); }).get();
+      that.select(selectedValues, 'init');
+
+      if (typeof that.options.afterInit === 'function') {
+        that.options.afterInit.call(this, this.$container);
+      }
+    },
+
+    'generateLisFromOption' : function(option, index, $container){
+      var that = this,
+          ms = that.$element,
+          attributes = "",
+          $option = $(option);
+
+      for (var cpt = 0; cpt < option.attributes.length; cpt++){
+        var attr = option.attributes[cpt];
+
+        if(attr.name !== 'value' && attr.name !== 'disabled'){
+          attributes += attr.name+'="'+attr.value+'" ';
+        }
+      }
+      var selectableLi = $('<li '+attributes+'><span>'+that.escapeHTML($option.text())+'</span></li>'),
+          selectedLi = selectableLi.clone(),
+          value = $option.val(),
+          elementId = that.sanitize(value);
+
+      selectableLi
+        .data('ms-value', value)
+        .addClass('ms-elem-selectable')
+        .attr('id', elementId+'-selectable');
+
+      selectedLi
+        .data('ms-value', value)
+        .addClass('ms-elem-selection')
+        .attr('id', elementId+'-selection')
+        .hide();
+
+      if ($option.prop('disabled') || ms.prop('disabled')){
+        selectedLi.addClass(that.options.disabledClass);
+        selectableLi.addClass(that.options.disabledClass);
+      }
+
+      var $optgroup = $option.parent('optgroup');
+
+      if ($optgroup.length > 0){
+        var optgroupLabel = $optgroup.attr('label'),
+            optgroupId = that.sanitize(optgroupLabel),
+            $selectableOptgroup = that.$selectableUl.find('#optgroup-selectable-'+optgroupId),
+            $selectionOptgroup = that.$selectionUl.find('#optgroup-selection-'+optgroupId);
+
+        if ($selectableOptgroup.length === 0){
+          var optgroupContainerTpl = '<li class="ms-optgroup-container"></li>',
+              optgroupTpl = '<ul class="ms-optgroup"><li class="ms-optgroup-label"><span>'+optgroupLabel+'</span></li></ul>';
+
+          $selectableOptgroup = $(optgroupContainerTpl);
+          $selectionOptgroup = $(optgroupContainerTpl);
+          $selectableOptgroup.attr('id', 'optgroup-selectable-'+optgroupId);
+          $selectionOptgroup.attr('id', 'optgroup-selection-'+optgroupId);
+          $selectableOptgroup.append($(optgroupTpl));
+          $selectionOptgroup.append($(optgroupTpl));
+          if (that.options.selectableOptgroup){
+            $selectableOptgroup.find('.ms-optgroup-label').on('click', function(){
+              var values = $optgroup.children(':not(:selected, :disabled)').map(function(){ return $(this).val() }).get();
+              that.select(values);
+            });
+            $selectionOptgroup.find('.ms-optgroup-label').on('click', function(){
+              var values = $optgroup.children(':selected:not(:disabled)').map(function(){ return $(this).val() }).get();
+              that.deselect(values);
+            });
+          }
+          that.$selectableUl.append($selectableOptgroup);
+          that.$selectionUl.append($selectionOptgroup);
+        }
+        index = index == undefined ? $selectableOptgroup.find('ul').children().length : index + 1;
+        selectableLi.insertAt(index, $selectableOptgroup.children());
+        selectedLi.insertAt(index, $selectionOptgroup.children());
+      } else {
+        index = index == undefined ? that.$selectableUl.children().length : index;
+
+        selectableLi.insertAt(index, that.$selectableUl);
+        selectedLi.insertAt(index, that.$selectionUl);
+      }
+    },
+
+    'addOption' : function(options){
+      var that = this;
+
+      if (options.value) options = [options];
+      $.each(options, function(index, option){
+        if (option.value && that.$element.find("option[value='"+option.value+"']").length === 0){
+          var $option = $('<option value="'+option.value+'">'+option.text+'</option>'),
+              index = parseInt((typeof option.index === 'undefined' ? that.$element.children().length : option.index)),
+              $container = option.nested == undefined ? that.$element : $("optgroup[label='"+option.nested+"']")
+
+          $option.insertAt(index, $container);
+          that.generateLisFromOption($option.get(0), index, option.nested);
+        }
+      })
+    },
+
+    'escapeHTML' : function(text){
+      return $("<div>").text(text).html();
+    },
+
+    'activeKeyboard' : function($list){
+      var that = this;
+
+      $list.on('focus', function(){
+        $(this).addClass('ms-focus');
+      })
+      .on('blur', function(){
+        $(this).removeClass('ms-focus');
+      })
+      .on('keydown', function(e){
+        switch (e.which) {
+          case 40:
+          case 38:
+            e.preventDefault();
+            e.stopPropagation();
+            that.moveHighlight($(this), (e.which === 38) ? -1 : 1);
+            return;
+          case 37:
+          case 39:
+            e.preventDefault();
+            e.stopPropagation();
+            that.switchList($list);
+            return;
+          case 9:
+            if(that.$element.is('[tabindex]')){
+              e.preventDefault();
+              var tabindex = parseInt(that.$element.attr('tabindex'), 10);
+              tabindex = (e.shiftKey) ? tabindex-1 : tabindex+1;
+              $('[tabindex="'+(tabindex)+'"]').focus();
+              return;
+            }else{
+              if(e.shiftKey){
+                that.$element.trigger('focus');
+              }
+            }
+        }
+        if($.inArray(e.which, that.options.keySelect) > -1){
+          e.preventDefault();
+          e.stopPropagation();
+          that.selectHighlighted($list);
+          return;
+        }
+      });
+    },
+
+    'moveHighlight': function($list, direction){
+      var $elems = $list.find(this.elemsSelector),
+          $currElem = $elems.filter('.ms-hover'),
+          $nextElem = null,
+          elemHeight = $elems.first().outerHeight(),
+          containerHeight = $list.height(),
+          containerSelector = '#'+this.$container.prop('id');
+
+      $elems.removeClass('ms-hover');
+      if (direction === 1){ // DOWN
+
+        $nextElem = $currElem.nextAll(this.elemsSelector).first();
+        if ($nextElem.length === 0){
+          var $optgroupUl = $currElem.parent();
+
+          if ($optgroupUl.hasClass('ms-optgroup')){
+            var $optgroupLi = $optgroupUl.parent(),
+                $nextOptgroupLi = $optgroupLi.next(':visible');
+
+            if ($nextOptgroupLi.length > 0){
+              $nextElem = $nextOptgroupLi.find(this.elemsSelector).first();
+            } else {
+              $nextElem = $elems.first();
+            }
+          } else {
+            $nextElem = $elems.first();
+          }
+        }
+      } else if (direction === -1){ // UP
+
+        $nextElem = $currElem.prevAll(this.elemsSelector).first();
+        if ($nextElem.length === 0){
+          var $optgroupUl = $currElem.parent();
+
+          if ($optgroupUl.hasClass('ms-optgroup')){
+            var $optgroupLi = $optgroupUl.parent(),
+                $prevOptgroupLi = $optgroupLi.prev(':visible');
+
+            if ($prevOptgroupLi.length > 0){
+              $nextElem = $prevOptgroupLi.find(this.elemsSelector).last();
+            } else {
+              $nextElem = $elems.last();
+            }
+          } else {
+            $nextElem = $elems.last();
+          }
+        }
+      }
+      if ($nextElem.length > 0){
+        $nextElem.addClass('ms-hover');
+        var scrollTo = $list.scrollTop() + $nextElem.position().top - 
+                       containerHeight / 2 + elemHeight / 2;
+
+        $list.scrollTop(scrollTo);
+      }
+    },
+
+    'selectHighlighted' : function($list){
+      var $elems = $list.find(this.elemsSelector),
+          $highlightedElem = $elems.filter('.ms-hover').first();
+
+      if ($highlightedElem.length > 0){
+        if ($list.parent().hasClass('ms-selectable')){
+          this.select($highlightedElem.data('ms-value'));
+        } else {
+          this.deselect($highlightedElem.data('ms-value'));
+        }
+        $elems.removeClass('ms-hover');
+      }
+    },
+
+    'switchList' : function($list){
+      $list.blur();
+      this.$container.find(this.elemsSelector).removeClass('ms-hover');
+      if ($list.parent().hasClass('ms-selectable')){
+        this.$selectionUl.focus();
+      } else {
+        this.$selectableUl.focus();
+      }
+    },
+
+    'activeMouse' : function($list){
+      var that = this;
+
+      $('body').on('mouseenter', that.elemsSelector, function(){
+        $(this).parents('.ms-container').find(that.elemsSelector).removeClass('ms-hover');
+        $(this).addClass('ms-hover');
+      });
+
+      $('body').on('mouseleave', that.elemsSelector, function () {
+          $(this).parents('.ms-container').find(that.elemsSelector).removeClass('ms-hover');;
+      });
+    },
+
+    'refresh' : function() {
+      this.destroy();
+      this.$element.multiSelect(this.options);
+    },
+
+    'destroy' : function(){
+      $("#ms-"+this.$element.attr("id")).remove();
+      this.$element.css('position', '').css('left', '')
+      this.$element.removeData('multiselect');
+    },
+
+    'select' : function(value, method){
+      if (typeof value === 'string'){ value = [value]; }
+
+      var that = this,
+          ms = this.$element,
+          msIds = $.map(value, function(val){ return(that.sanitize(val)); }),
+          selectables = this.$selectableUl.find('#' + msIds.join('-selectable, #')+'-selectable').filter(':not(.'+that.options.disabledClass+')'),
+          selections = this.$selectionUl.find('#' + msIds.join('-selection, #') + '-selection').filter(':not(.'+that.options.disabledClass+')'),
+          options = ms.find('option:not(:disabled)').filter(function(){ return($.inArray(this.value, value) > -1); });
+
+      if (method === 'init'){
+        selectables = this.$selectableUl.find('#' + msIds.join('-selectable, #')+'-selectable'),
+        selections = this.$selectionUl.find('#' + msIds.join('-selection, #') + '-selection');
+      }
+
+      if (selectables.length > 0){
+        selectables.addClass('ms-selected').hide();
+        selections.addClass('ms-selected').show();
+
+        options.prop('selected', true);
+
+        that.$container.find(that.elemsSelector).removeClass('ms-hover');
+
+        var selectableOptgroups = that.$selectableUl.children('.ms-optgroup-container');
+        if (selectableOptgroups.length > 0){
+          selectableOptgroups.each(function(){
+            var selectablesLi = $(this).find('.ms-elem-selectable');
+            if (selectablesLi.length === selectablesLi.filter('.ms-selected').length){
+              $(this).find('.ms-optgroup-label').hide();
+            }
+          });
+
+          var selectionOptgroups = that.$selectionUl.children('.ms-optgroup-container');
+          selectionOptgroups.each(function(){
+            var selectionsLi = $(this).find('.ms-elem-selection');
+            if (selectionsLi.filter('.ms-selected').length > 0){
+              $(this).find('.ms-optgroup-label').show();
+            }
+          });
+        } else {
+          if (that.options.keepOrder && method !== 'init'){
+            var selectionLiLast = that.$selectionUl.find('.ms-selected');
+            if((selectionLiLast.length > 1) && (selectionLiLast.last().get(0) != selections.get(0))) {
+              selections.insertAfter(selectionLiLast.last());
+            }
+          }
+        }
+        if (method !== 'init'){
+          ms.trigger('change');
+          if (typeof that.options.afterSelect === 'function') {
+            that.options.afterSelect.call(this, value);
+          }
+        }
+      }
+    },
+
+    'deselect' : function(value){
+      if (typeof value === 'string'){ value = [value]; }
+
+      var that = this,
+          ms = this.$element,
+          msIds = $.map(value, function(val){ return(that.sanitize(val)); }),
+          selectables = this.$selectableUl.find('#' + msIds.join('-selectable, #')+'-selectable'),
+          selections = this.$selectionUl.find('#' + msIds.join('-selection, #')+'-selection').filter('.ms-selected').filter(':not(.'+that.options.disabledClass+')'),
+          options = ms.find('option').filter(function(){ return($.inArray(this.value, value) > -1); });
+
+      if (selections.length > 0){
+        selectables.removeClass('ms-selected').show();
+        selections.removeClass('ms-selected').hide();
+        options.prop('selected', false);
+
+        that.$container.find(that.elemsSelector).removeClass('ms-hover');
+
+        var selectableOptgroups = that.$selectableUl.children('.ms-optgroup-container');
+        if (selectableOptgroups.length > 0){
+          selectableOptgroups.each(function(){
+            var selectablesLi = $(this).find('.ms-elem-selectable');
+            if (selectablesLi.filter(':not(.ms-selected)').length > 0){
+              $(this).find('.ms-optgroup-label').show();
+            }
+          });
+
+          var selectionOptgroups = that.$selectionUl.children('.ms-optgroup-container');
+          selectionOptgroups.each(function(){
+            var selectionsLi = $(this).find('.ms-elem-selection');
+            if (selectionsLi.filter('.ms-selected').length === 0){
+              $(this).find('.ms-optgroup-label').hide();
+            }
+          });
+        }
+        ms.trigger('change');
+        if (typeof that.options.afterDeselect === 'function') {
+          that.options.afterDeselect.call(this, value);
+        }
+      }
+    },
+
+    'select_all' : function(){
+      var ms = this.$element,
+          values = ms.val();
+
+      ms.find('option:not(":disabled")').prop('selected', true);
+      this.$selectableUl.find('.ms-elem-selectable').filter(':not(.'+this.options.disabledClass+')').addClass('ms-selected').hide();
+      this.$selectionUl.find('.ms-optgroup-label').show();
+      this.$selectableUl.find('.ms-optgroup-label').hide();
+      this.$selectionUl.find('.ms-elem-selection').filter(':not(.'+this.options.disabledClass+')').addClass('ms-selected').show();
+      this.$selectionUl.focus();
+      ms.trigger('change');
+      if (typeof this.options.afterSelect === 'function') {
+        var selectedValues = $.grep(ms.val(), function(item){
+          return $.inArray(item, values) < 0;
+        });
+        this.options.afterSelect.call(this, selectedValues);
+      }
+    },
+
+    'deselect_all' : function(){
+      var ms = this.$element,
+          values = ms.val();
+
+      ms.find('option').prop('selected', false);
+      this.$selectableUl.find('.ms-elem-selectable').removeClass('ms-selected').show();
+      this.$selectionUl.find('.ms-optgroup-label').hide();
+      this.$selectableUl.find('.ms-optgroup-label').show();
+      this.$selectionUl.find('.ms-elem-selection').removeClass('ms-selected').hide();
+      this.$selectableUl.focus();
+      ms.trigger('change');
+      if (typeof this.options.afterDeselect === 'function') {
+        this.options.afterDeselect.call(this, values);
+      }
+    },
+
+    sanitize: function(value){
+      var hash = 0, i, character;
+      if (value.length == 0) return hash;
+      var ls = 0;
+      for (i = 0, ls = value.length; i < ls; i++) {
+        character  = value.charCodeAt(i);
+        hash  = ((hash<<5)-hash)+character;
+        hash |= 0; // Convert to 32bit integer
+      }
+      return hash;
+    }
+  };
+
+  /* MULTISELECT PLUGIN DEFINITION
+   * ======================= */
+
+  $.fn.multiSelect = function () {
+    var option = arguments[0],
+        args = arguments;
+
+    return this.each(function () {
+      var $this = $(this),
+          data = $this.data('multiselect'),
+          options = $.extend({}, $.fn.multiSelect.defaults, $this.data(), typeof option === 'object' && option);
+
+      if (!data){ $this.data('multiselect', (data = new MultiSelect(this, options))); }
+
+      if (typeof option === 'string'){
+        data[option](args[1]);
+      } else {
+        data.init();
+      }
+    });
+  };
+
+  $.fn.multiSelect.defaults = {
+    keySelect: [32],
+    selectableOptgroup: false,
+    disabledClass : 'disabled',
+    dblClick : false,
+    keepOrder: false,
+    cssClass: ''
+  };
+
+  $.fn.multiSelect.Constructor = MultiSelect;
+
+  $.fn.insertAt = function(index, $parent) {
+    return this.each(function() {
+      if (index === 0) {
+        $parent.prepend(this);
+      } else {
+        $parent.children().eq(index - 1).after(this);
+      }
+    });
+}
+
+}(window.jQuery);
diff --git a/public/assets/plugins/jquery.sparkline.min.js b/public/assets/plugins/jquery.sparkline.min.js
new file mode 100644
index 0000000..fa616bf
--- /dev/null
+++ b/public/assets/plugins/jquery.sparkline.min.js
@@ -0,0 +1,5 @@
+/* jquery.sparkline 2.1.2 - http://omnipotent.net/jquery.sparkline/ 
+** Licensed under the New BSD License - see above site for details */
+
+(function(a,b,c){(function(a){typeof define=="function"&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.sparkline&&a(jQuery)})(function(d){"use strict";var e={},f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L=0;f=function(){return{common:{type:"line",lineColor:"#00f",fillColor:"#cdf",defaultPixelsPerValue:3,width:"auto",height:"auto",composite:!1,tagValuesAttribute:"values",tagOptionsPrefix:"spark",enableTagOptions:!1,enableHighlight:!0,highlightLighten:1.4,tooltipSkipNull:!0,tooltipPrefix:"",tooltipSuffix:"",disableHiddenCheck:!1,numberFormatter:!1,numberDigitGroupCount:3,numberDigitGroupSep:",",numberDecimalMark:".",disableTooltips:!1,disableInteraction:!1},line:{spotColor:"#f80",highlightSpotColor:"#5f5",highlightLineColor:"#f22",spotRadius:1.5,minSpotColor:"#f80",maxSpotColor:"#f80",lineWidth:1,normalRangeMin:c,normalRangeMax:c,normalRangeColor:"#ccc",drawNormalOnTop:!1,chartRangeMin:c,chartRangeMax:c,chartRangeMinX:c,chartRangeMaxX:c,tooltipFormat:new h('<span style="color: {{color}}">&#9679;</span> {{prefix}}{{y}}{{suffix}}')},bar:{barColor:"#3366cc",negBarColor:"#f44",stackedBarColor:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],zeroColor:c,nullColor:c,zeroAxis:!0,barWidth:4,barSpacing:1,chartRangeMax:c,chartRangeMin:c,chartRangeClip:!1,colorMap:c,tooltipFormat:new h('<span style="color: {{color}}">&#9679;</span> {{prefix}}{{value}}{{suffix}}')},tristate:{barWidth:4,barSpacing:1,posBarColor:"#6f6",negBarColor:"#f44",zeroBarColor:"#999",colorMap:{},tooltipFormat:new h('<span style="color: {{color}}">&#9679;</span> {{value:map}}'),tooltipValueLookups:{map:{"-1":"Loss",0:"Draw",1:"Win"}}},discrete:{lineHeight:"auto",thresholdColor:c,thresholdValue:0,chartRangeMax:c,chartRangeMin:c,chartRangeClip:!1,tooltipFormat:new h("{{prefix}}{{value}}{{suffix}}")},bullet:{targetColor:"#f33",targetWidth:3,performanceColor:"#33f",rangeColors:["#d3dafe","#a8b6ff","#7f94ff"],base:c,tooltipFormat:new h("{{fieldkey:fields}} - {{value}}"),tooltipValueLookups:{fields:{r:"Range",p:"Performance",t:"Target"}}},pie:{offset:0,sliceColors:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],borderWidth:0,borderColor:"#000",tooltipFormat:new h('<span style="color: {{color}}">&#9679;</span> {{value}} ({{percent.1}}%)')},box:{raw:!1,boxLineColor:"#000",boxFillColor:"#cdf",whiskerColor:"#000",outlierLineColor:"#333",outlierFillColor:"#fff",medianColor:"#f00",showOutliers:!0,outlierIQR:1.5,spotRadius:1.5,target:c,targetColor:"#4a2",chartRangeMax:c,chartRangeMin:c,tooltipFormat:new h("{{field:fields}}: {{value}}"),tooltipFormatFieldlistKey:"field",tooltipValueLookups:{fields:{lq:"Lower Quartile",med:"Median",uq:"Upper Quartile",lo:"Left Outlier",ro:"Right Outlier",lw:"Left Whisker",rw:"Right Whisker"}}}}},E='.jqstooltip { position: absolute;left: 0px;top: 0px;visibility: hidden;background: rgb(0, 0, 0) transparent;background-color: rgba(0,0,0,0.6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";color: white;font: 10px arial, san serif;text-align: left;white-space: nowrap;padding: 5px;border: 1px solid white;z-index: 10000;}.jqsfield { color: white;font: 10px arial, san serif;text-align: left;}',g=function(){var a,b;return a=function(){this.init.apply(this,arguments)},arguments.length>1?(arguments[0]?(a.prototype=d.extend(new arguments[0],arguments[arguments.length-1]),a._super=arguments[0].prototype):a.prototype=arguments[arguments.length-1],arguments.length>2&&(b=Array.prototype.slice.call(arguments,1,-1),b.unshift(a.prototype),d.extend.apply(d,b))):a.prototype=arguments[0],a.prototype.cls=a,a},d.SPFormatClass=h=g({fre:/\{\{([\w.]+?)(:(.+?))?\}\}/g,precre:/(\w+)\.(\d+)/,init:function(a,b){this.format=a,this.fclass=b},render:function(a,b,d){var e=this,f=a,g,h,i,j,k;return this.format.replace(this.fre,function(){var a;return h=arguments[1],i=arguments[3],g=e.precre.exec(h),g?(k=g[2],h=g[1]):k=!1,j=f[h],j===c?"":i&&b&&b[i]?(a=b[i],a.get?b[i].get(j)||j:b[i][j]||j):(n(j)&&(d.get("numberFormatter")?j=d.get("numberFormatter")(j):j=s(j,k,d.get("numberDigitGroupCount"),d.get("numberDigitGroupSep"),d.get("numberDecimalMark"))),j)})}}),d.spformat=function(a,b){return new h(a,b)},i=function(a,b,c){return a<b?b:a>c?c:a},j=function(a,c){var d;return c===2?(d=b.floor(a.length/2),a.length%2?a[d]:(a[d-1]+a[d])/2):a.length%2?(d=(a.length*c+c)/4,d%1?(a[b.floor(d)]+a[b.floor(d)-1])/2:a[d-1]):(d=(a.length*c+2)/4,d%1?(a[b.floor(d)]+a[b.floor(d)-1])/2:a[d-1])},k=function(a){var b;switch(a){case"undefined":a=c;break;case"null":a=null;break;case"true":a=!0;break;case"false":a=!1;break;default:b=parseFloat(a),a==b&&(a=b)}return a},l=function(a){var b,c=[];for(b=a.length;b--;)c[b]=k(a[b]);return c},m=function(a,b){var c,d,e=[];for(c=0,d=a.length;c<d;c++)a[c]!==b&&e.push(a[c]);return e},n=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},s=function(a,b,c,e,f){var g,h;a=(b===!1?parseFloat(a).toString():a.toFixed(b)).split(""),g=(g=d.inArray(".",a))<0?a.length:g,g<a.length&&(a[g]=f);for(h=g-c;h>0;h-=c)a.splice(h,0,e);return a.join("")},o=function(a,b,c){var d;for(d=b.length;d--;){if(c&&b[d]===null)continue;if(b[d]!==a)return!1}return!0},p=function(a){var b=0,c;for(c=a.length;c--;)b+=typeof a[c]=="number"?a[c]:0;return b},r=function(a){return d.isArray(a)?a:[a]},q=function(b){var c;a.createStyleSheet?a.createStyleSheet().cssText=b:(c=a.createElement("style"),c.type="text/css",a.getElementsByTagName("head")[0].appendChild(c),c[typeof a.body.style.WebkitAppearance=="string"?"innerText":"innerHTML"]=b)},d.fn.simpledraw=function(b,e,f,g){var h,i;if(f&&(h=this.data("_jqs_vcanvas")))return h;if(d.fn.sparkline.canvas===!1)return!1;if(d.fn.sparkline.canvas===c){var j=a.createElement("canvas");if(!j.getContext||!j.getContext("2d")){if(!a.namespaces||!!a.namespaces.v)return d.fn.sparkline.canvas=!1,!1;a.namespaces.add("v","urn:schemas-microsoft-com:vml","#default#VML"),d.fn.sparkline.canvas=function(a,b,c,d){return new J(a,b,c)}}else d.fn.sparkline.canvas=function(a,b,c,d){return new I(a,b,c,d)}}return b===c&&(b=d(this).innerWidth()),e===c&&(e=d(this).innerHeight()),h=d.fn.sparkline.canvas(b,e,this,g),i=d(this).data("_jqs_mhandler"),i&&i.registerCanvas(h),h},d.fn.cleardraw=function(){var a=this.data("_jqs_vcanvas");a&&a.reset()},d.RangeMapClass=t=g({init:function(a){var b,c,d=[];for(b in a)a.hasOwnProperty(b)&&typeof b=="string"&&b.indexOf(":")>-1&&(c=b.split(":"),c[0]=c[0].length===0?-Infinity:parseFloat(c[0]),c[1]=c[1].length===0?Infinity:parseFloat(c[1]),c[2]=a[b],d.push(c));this.map=a,this.rangelist=d||!1},get:function(a){var b=this.rangelist,d,e,f;if((f=this.map[a])!==c)return f;if(b)for(d=b.length;d--;){e=b[d];if(e[0]<=a&&e[1]>=a)return e[2]}return c}}),d.range_map=function(a){return new t(a)},u=g({init:function(a,b){var c=d(a);this.$el=c,this.options=b,this.currentPageX=0,this.currentPageY=0,this.el=a,this.splist=[],this.tooltip=null,this.over=!1,this.displayTooltips=!b.get("disableTooltips"),this.highlightEnabled=!b.get("disableHighlight")},registerSparkline:function(a){this.splist.push(a),this.over&&this.updateDisplay()},registerCanvas:function(a){var b=d(a.canvas);this.canvas=a,this.$canvas=b,b.mouseenter(d.proxy(this.mouseenter,this)),b.mouseleave(d.proxy(this.mouseleave,this)),b.click(d.proxy(this.mouseclick,this))},reset:function(a){this.splist=[],this.tooltip&&a&&(this.tooltip.remove(),this.tooltip=c)},mouseclick:function(a){var b=d.Event("sparklineClick");b.originalEvent=a,b.sparklines=this.splist,this.$el.trigger(b)},mouseenter:function(b){d(a.body).unbind("mousemove.jqs"),d(a.body).bind("mousemove.jqs",d.proxy(this.mousemove,this)),this.over=!0,this.currentPageX=b.pageX,this.currentPageY=b.pageY,this.currentEl=b.target,!this.tooltip&&this.displayTooltips&&(this.tooltip=new v(this.options),this.tooltip.updatePosition(b.pageX,b.pageY)),this.updateDisplay()},mouseleave:function(){d(a.body).unbind("mousemove.jqs");var b=this.splist,c=b.length,e=!1,f,g;this.over=!1,this.currentEl=null,this.tooltip&&(this.tooltip.remove(),this.tooltip=null);for(g=0;g<c;g++)f=b[g],f.clearRegionHighlight()&&(e=!0);e&&this.canvas.render()},mousemove:function(a){this.currentPageX=a.pageX,this.currentPageY=a.pageY,this.currentEl=a.target,this.tooltip&&this.tooltip.updatePosition(a.pageX,a.pageY),this.updateDisplay()},updateDisplay:function(){var a=this.splist,b=a.length,c=!1,e=this.$canvas.offset(),f=this.currentPageX-e.left,g=this.currentPageY-e.top,h,i,j,k,l;if(!this.over)return;for(j=0;j<b;j++)i=a[j],k=i.setRegionHighlight(this.currentEl,f,g),k&&(c=!0);if(c){l=d.Event("sparklineRegionChange"),l.sparklines=this.splist,this.$el.trigger(l);if(this.tooltip){h="";for(j=0;j<b;j++)i=a[j],h+=i.getCurrentRegionTooltip();this.tooltip.setContent(h)}this.disableHighlight||this.canvas.render()}k===null&&this.mouseleave()}}),v=g({sizeStyle:"position: static !important;display: block !important;visibility: hidden !important;float: left !important;",init:function(b){var c=b.get("tooltipClassname","jqstooltip"),e=this.sizeStyle,f;this.container=b.get("tooltipContainer")||a.body,this.tooltipOffsetX=b.get("tooltipOffsetX",10),this.tooltipOffsetY=b.get("tooltipOffsetY",12),d("#jqssizetip").remove(),d("#jqstooltip").remove(),this.sizetip=d("<div/>",{id:"jqssizetip",style:e,"class":c}),this.tooltip=d("<div/>",{id:"jqstooltip","class":c}).appendTo(this.container),f=this.tooltip.offset(),this.offsetLeft=f.left,this.offsetTop=f.top,this.hidden=!0,d(window).unbind("resize.jqs scroll.jqs"),d(window).bind("resize.jqs scroll.jqs",d.proxy(this.updateWindowDims,this)),this.updateWindowDims()},updateWindowDims:function(){this.scrollTop=d(window).scrollTop(),this.scrollLeft=d(window).scrollLeft(),this.scrollRight=this.scrollLeft+d(window).width(),this.updatePosition()},getSize:function(a){this.sizetip.html(a).appendTo(this.container),this.width=this.sizetip.width()+1,this.height=this.sizetip.height(),this.sizetip.remove()},setContent:function(a){if(!a){this.tooltip.css("visibility","hidden"),this.hidden=!0;return}this.getSize(a),this.tooltip.html(a).css({width:this.width,height:this.height,visibility:"visible"}),this.hidden&&(this.hidden=!1,this.updatePosition())},updatePosition:function(a,b){if(a===c){if(this.mousex===c)return;a=this.mousex-this.offsetLeft,b=this.mousey-this.offsetTop}else this.mousex=a-=this.offsetLeft,this.mousey=b-=this.offsetTop;if(!this.height||!this.width||this.hidden)return;b-=this.height+this.tooltipOffsetY,a+=this.tooltipOffsetX,b<this.scrollTop&&(b=this.scrollTop),a<this.scrollLeft?a=this.scrollLeft:a+this.width>this.scrollRight&&(a=this.scrollRight-this.width),this.tooltip.css({left:a,top:b})},remove:function(){this.tooltip.remove(),this.sizetip.remove(),this.sizetip=this.tooltip=c,d(window).unbind("resize.jqs scroll.jqs")}}),F=function(){q(E)},d(F),K=[],d.fn.sparkline=function(b,e){return this.each(function(){var f=new d.fn.sparkline.options(this,e),g=d(this),h,i;h=function(){var e,h,i,j,k,l,m;if(b==="html"||b===c){m=this.getAttribute(f.get("tagValuesAttribute"));if(m===c||m===null)m=g.html();e=m.replace(/(^\s*<!--)|(-->\s*$)|\s+/g,"").split(",")}else e=b;h=f.get("width")==="auto"?e.length*f.get("defaultPixelsPerValue"):f.get("width");if(f.get("height")==="auto"){if(!f.get("composite")||!d.data(this,"_jqs_vcanvas"))j=a.createElement("span"),j.innerHTML="a",g.html(j),i=d(j).innerHeight()||d(j).height(),d(j).remove(),j=null}else i=f.get("height");f.get("disableInteraction")?k=!1:(k=d.data(this,"_jqs_mhandler"),k?f.get("composite")||k.reset():(k=new u(this,f),d.data(this,"_jqs_mhandler",k)));if(f.get("composite")&&!d.data(this,"_jqs_vcanvas")){d.data(this,"_jqs_errnotify")||(alert("Attempted to attach a composite sparkline to an element with no existing sparkline"),d.data(this,"_jqs_errnotify",!0));return}l=new(d.fn.sparkline[f.get("type")])(this,e,f,h,i),l.render(),k&&k.registerSparkline(l)};if(d(this).html()&&!f.get("disableHiddenCheck")&&d(this).is(":hidden")||!d(this).parents("body").length){if(!f.get("composite")&&d.data(this,"_jqs_pending"))for(i=K.length;i;i--)K[i-1][0]==this&&K.splice(i-1,1);K.push([this,h]),d.data(this,"_jqs_pending",!0)}else h.call(this)})},d.fn.sparkline.defaults=f(),d.sparkline_display_visible=function(){var a,b,c,e=[];for(b=0,c=K.length;b<c;b++)a=K[b][0],d(a).is(":visible")&&!d(a).parents().is(":hidden")?(K[b][1].call(a),d.data(K[b][0],"_jqs_pending",!1),e.push(b)):!d(a).closest("html").length&&!d.data(a,"_jqs_pending")&&(d.data(K[b][0],"_jqs_pending",!1),e.push(b));for(b=e.length;b;b--)K.splice(e[b-1],1)},d.fn.sparkline.options=g({init:function(a,b){var c,f,g,h;this.userOptions=b=b||{},this.tag=a,this.tagValCache={},f=d.fn.sparkline.defaults,g=f.common,this.tagOptionsPrefix=b.enableTagOptions&&(b.tagOptionsPrefix||g.tagOptionsPrefix),h=this.getTagSetting("type"),h===e?c=f[b.type||g.type]:c=f[h],this.mergedOptions=d.extend({},g,c,b)},getTagSetting:function(a){var b=this.tagOptionsPrefix,d,f,g,h;if(b===!1||b===c)return e;if(this.tagValCache.hasOwnProperty(a))d=this.tagValCache.key;else{d=this.tag.getAttribute(b+a);if(d===c||d===null)d=e;else if(d.substr(0,1)==="["){d=d.substr(1,d.length-2).split(",");for(f=d.length;f--;)d[f]=k(d[f].replace(/(^\s*)|(\s*$)/g,""))}else if(d.substr(0,1)==="{"){g=d.substr(1,d.length-2).split(","),d={};for(f=g.length;f--;)h=g[f].split(":",2),d[h[0].replace(/(^\s*)|(\s*$)/g,"")]=k(h[1].replace(/(^\s*)|(\s*$)/g,""))}else d=k(d);this.tagValCache.key=d}return d},get:function(a,b){var d=this.getTagSetting(a),f;return d!==e?d:(f=this.mergedOptions[a])===c?b:f}}),d.fn.sparkline._base=g({disabled:!1,init:function(a,b,e,f,g){this.el=a,this.$el=d(a),this.values=b,this.options=e,this.width=f,this.height=g,this.currentRegion=c},initTarget:function(){var a=!this.options.get("disableInteraction");(this.target=this.$el.simpledraw(this.width,this.height,this.options.get("composite"),a))?(this.canvasWidth=this.target.pixelWidth,this.canvasHeight=this.target.pixelHeight):this.disabled=!0},render:function(){return this.disabled?(this.el.innerHTML="",!1):!0},getRegion:function(a,b){},setRegionHighlight:function(a,b,d){var e=this.currentRegion,f=!this.options.get("disableHighlight"),g;return b>this.canvasWidth||d>this.canvasHeight||b<0||d<0?null:(g=this.getRegion(a,b,d),e!==g?(e!==c&&f&&this.removeHighlight(),this.currentRegion=g,g!==c&&f&&this.renderHighlight(),!0):!1)},clearRegionHighlight:function(){return this.currentRegion!==c?(this.removeHighlight(),this.currentRegion=c,!0):!1},renderHighlight:function(){this.changeHighlight(!0)},removeHighlight:function(){this.changeHighlight(!1)},changeHighlight:function(a){},getCurrentRegionTooltip:function(){var a=this.options,b="",e=[],f,g,i,j,k,l,m,n,o,p,q,r,s,t;if(this.currentRegion===c)return"";f=this.getCurrentRegionFields(),q=a.get("tooltipFormatter");if(q)return q(this,a,f);a.get("tooltipChartTitle")&&(b+='<div class="jqs jqstitle">'+a.get("tooltipChartTitle")+"</div>\n"),g=this.options.get("tooltipFormat");if(!g)return"";d.isArray(g)||(g=[g]),d.isArray(f)||(f=[f]),m=this.options.get("tooltipFormatFieldlist"),n=this.options.get("tooltipFormatFieldlistKey");if(m&&n){o=[];for(l=f.length;l--;)p=f[l][n],(t=d.inArray(p,m))!=-1&&(o[t]=f[l]);f=o}i=g.length,s=f.length;for(l=0;l<i;l++){r=g[l],typeof r=="string"&&(r=new h(r)),j=r.fclass||"jqsfield";for(t=0;t<s;t++)if(!f[t].isNull||!a.get("tooltipSkipNull"))d.extend(f[t],{prefix:a.get("tooltipPrefix"),suffix:a.get("tooltipSuffix")}),k=r.render(f[t],a.get("tooltipValueLookups"),a),e.push('<div class="'+j+'">'+k+"</div>")}return e.length?b+e.join("\n"):""},getCurrentRegionFields:function(){},calcHighlightColor:function(a,c){var d=c.get("highlightColor"),e=c.get("highlightLighten"),f,g,h,j;if(d)return d;if(e){f=/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(a)||/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(a);if(f){h=[],g=a.length===4?16:1;for(j=0;j<3;j++)h[j]=i(b.round(parseInt(f[j+1],16)*g*e),0,255);return"rgb("+h.join(",")+")"}}return a}}),w={changeHighlight:function(a){var b=this.currentRegion,c=this.target,e=this.regionShapes[b],f;e&&(f=this.renderRegion(b,a),d.isArray(f)||d.isArray(e)?(c.replaceWithShapes(e,f),this.regionShapes[b]=d.map(f,function(a){return a.id})):(c.replaceWithShape(e,f),this.regionShapes[b]=f.id))},render:function(){var a=this.values,b=this.target,c=this.regionShapes,e,f,g,h;if(!this.cls._super.render.call(this))return;for(g=a.length;g--;){e=this.renderRegion(g);if(e)if(d.isArray(e)){f=[];for(h=e.length;h--;)e[h].append(),f.push(e[h].id);c[g]=f}else e.append(),c[g]=e.id;else c[g]=null}b.render()}},d.fn.sparkline.line=x=g(d.fn.sparkline._base,{type:"line",init:function(a,b,c,d,e){x._super.init.call(this,a,b,c,d,e),this.vertices=[],this.regionMap=[],this.xvalues=[],this.yvalues=[],this.yminmax=[],this.hightlightSpotId=null,this.lastShapeId=null,this.initTarget()},getRegion:function(a,b,d){var e,f=this.regionMap;for(e=f.length;e--;)if(f[e]!==null&&b>=f[e][0]&&b<=f[e][1])return f[e][2];return c},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.yvalues[a]===null,x:this.xvalues[a],y:this.yvalues[a],color:this.options.get("lineColor"),fillColor:this.options.get("fillColor"),offset:a}},renderHighlight:function(){var a=this.currentRegion,b=this.target,d=this.vertices[a],e=this.options,f=e.get("spotRadius"),g=e.get("highlightSpotColor"),h=e.get("highlightLineColor"),i,j;if(!d)return;f&&g&&(i=b.drawCircle(d[0],d[1],f,c,g),this.highlightSpotId=i.id,b.insertAfterShape(this.lastShapeId,i)),h&&(j=b.drawLine(d[0],this.canvasTop,d[0],this.canvasTop+this.canvasHeight,h),this.highlightLineId=j.id,b.insertAfterShape(this.lastShapeId,j))},removeHighlight:function(){var a=this.target;this.highlightSpotId&&(a.removeShapeId(this.highlightSpotId),this.highlightSpotId=null),this.highlightLineId&&(a.removeShapeId(this.highlightLineId),this.highlightLineId=null)},scanValues:function(){var a=this.values,c=a.length,d=this.xvalues,e=this.yvalues,f=this.yminmax,g,h,i,j,k;for(g=0;g<c;g++)h=a[g],i=typeof a[g]=="string",j=typeof a[g]=="object"&&a[g]instanceof Array,k=i&&a[g].split(":"),i&&k.length===2?(d.push(Number(k[0])),e.push(Number(k[1])),f.push(Number(k[1]))):j?(d.push(h[0]),e.push(h[1]),f.push(h[1])):(d.push(g),a[g]===null||a[g]==="null"?e.push(null):(e.push(Number(h)),f.push(Number(h))));this.options.get("xvalues")&&(d=this.options.get("xvalues")),this.maxy=this.maxyorg=b.max.apply(b,f),this.miny=this.minyorg=b.min.apply(b,f),this.maxx=b.max.apply(b,d),this.minx=b.min.apply(b,d),this.xvalues=d,this.yvalues=e,this.yminmax=f},processRangeOptions:function(){var a=this.options,b=a.get("normalRangeMin"),d=a.get("normalRangeMax");b!==c&&(b<this.miny&&(this.miny=b),d>this.maxy&&(this.maxy=d)),a.get("chartRangeMin")!==c&&(a.get("chartRangeClip")||a.get("chartRangeMin")<this.miny)&&(this.miny=a.get("chartRangeMin")),a.get("chartRangeMax")!==c&&(a.get("chartRangeClip")||a.get("chartRangeMax")>this.maxy)&&(this.maxy=a.get("chartRangeMax")),a.get("chartRangeMinX")!==c&&(a.get("chartRangeClipX")||a.get("chartRangeMinX")<this.minx)&&(this.minx=a.get("chartRangeMinX")),a.get("chartRangeMaxX")!==c&&(a.get("chartRangeClipX")||a.get("chartRangeMaxX")>this.maxx)&&(this.maxx=a.get("chartRangeMaxX"))},drawNormalRange:function(a,d,e,f,g){var h=this.options.get("normalRangeMin"),i=this.options.get("normalRangeMax"),j=d+b.round(e-e*((i-this.miny)/g)),k=b.round(e*(i-h)/g);this.target.drawRect(a,j,f,k,c,this.options.get("normalRangeColor")).append()},render:function(){var a=this.options,e=this.target,f=this.canvasWidth,g=this.canvasHeight,h=this.vertices,i=a.get("spotRadius"),j=this.regionMap,k,l,m,n,o,p,q,r,s,u,v,w,y,z,A,B,C,D,E,F,G,H,I,J,K;if(!x._super.render.call(this))return;this.scanValues(),this.processRangeOptions(),I=this.xvalues,J=this.yvalues;if(!this.yminmax.length||this.yvalues.length<2)return;n=o=0,k=this.maxx-this.minx===0?1:this.maxx-this.minx,l=this.maxy-this.miny===0?1:this.maxy-this.miny,m=this.yvalues.length-1,i&&(f<i*4||g<i*4)&&(i=0);if(i){G=a.get("highlightSpotColor")&&!a.get("disableInteraction");if(G||a.get("minSpotColor")||a.get("spotColor")&&J[m]===this.miny)g-=b.ceil(i);if(G||a.get("maxSpotColor")||a.get("spotColor")&&J[m]===this.maxy)g-=b.ceil(i),n+=b.ceil(i);if(G||(a.get("minSpotColor")||a.get("maxSpotColor"))&&(J[0]===this.miny||J[0]===this.maxy))o+=b.ceil(i),f-=b.ceil(i);if(G||a.get("spotColor")||a.get("minSpotColor")||a.get("maxSpotColor")&&(J[m]===this.miny||J[m]===this.maxy))f-=b.ceil(i)}g--,a.get("normalRangeMin")!==c&&!a.get("drawNormalOnTop")&&this.drawNormalRange(o,n,g,f,l),q=[],r=[q],z=A=null,B=J.length;for(K=0;K<B;K++)s=I[K],v=I[K+1],u=J[K],w=o+b.round((s-this.minx)*(f/k)),y=K<B-1?o+b.round((v-this.minx)*(f/k)):f,A=w+(y-w)/2,j[K]=[z||0,A,K],z=A,u===null?K&&(J[K-1]!==null&&(q=[],r.push(q)),h.push(null)):(u<this.miny&&(u=this.miny),u>this.maxy&&(u=this.maxy),q.length||q.push([w,n+g]),p=[w,n+b.round(g-g*((u-this.miny)/l))],q.push(p),h.push(p));C=[],D=[],E=r.length;for(K=0;K<E;K++)q=r[K],q.length&&(a.get("fillColor")&&(q.push([q[q.length-1][0],n+g]),D.push(q.slice(0)),q.pop()),q.length>2&&(q[0]=[q[0][0],q[1][1]]),C.push(q));E=D.length;for(K=0;K<E;K++)e.drawShape(D[K],a.get("fillColor"),a.get("fillColor")).append();a.get("normalRangeMin")!==c&&a.get("drawNormalOnTop")&&this.drawNormalRange(o,n,g,f,l),E=C.length;for(K=0;K<E;K++)e.drawShape(C[K],a.get("lineColor"),c,a.get("lineWidth")).append();if(i&&a.get("valueSpots")){F=a.get("valueSpots"),F.get===c&&(F=new t(F));for(K=0;K<B;K++)H=F.get(J[K]),H&&e.drawCircle(o+b.round((I[K]-this.minx)*(f/k)),n+b.round(g-g*((J[K]-this.miny)/l)),i,c,H).append()}i&&a.get("spotColor")&&J[m]!==null&&e.drawCircle(o+b.round((I[I.length-1]-this.minx)*(f/k)),n+b.round(g-g*((J[m]-this.miny)/l)),i,c,a.get("spotColor")).append(),this.maxy!==this.minyorg&&(i&&a.get("minSpotColor")&&(s=I[d.inArray(this.minyorg,J)],e.drawCircle(o+b.round((s-this.minx)*(f/k)),n+b.round(g-g*((this.minyorg-this.miny)/l)),i,c,a.get("minSpotColor")).append()),i&&a.get("maxSpotColor")&&(s=I[d.inArray(this.maxyorg,J)],e.drawCircle(o+b.round((s-this.minx)*(f/k)),n+b.round(g-g*((this.maxyorg-this.miny)/l)),i,c,a.get("maxSpotColor")).append())),this.lastShapeId=e.getLastShapeId(),this.canvasTop=n,e.render()}}),d.fn.sparkline.bar=y=g(d.fn.sparkline._base,w,{type:"bar",init:function(a,e,f,g,h){var j=parseInt(f.get("barWidth"),10),n=parseInt(f.get("barSpacing"),10),o=f.get("chartRangeMin"),p=f.get("chartRangeMax"),q=f.get("chartRangeClip"),r=Infinity,s=-Infinity,u,v,w,x,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R;y._super.init.call(this,a,e,f,g,h);for(A=0,B=e.length;A<B;A++){O=e[A],u=typeof O=="string"&&O.indexOf(":")>-1;if(u||d.isArray(O))J=!0,u&&(O=e[A]=l(O.split(":"))),O=m(O,null),v=b.min.apply(b,O),w=b.max.apply(b,O),v<r&&(r=v),w>s&&(s=w)}this.stacked=J,this.regionShapes={},this.barWidth=j,this.barSpacing=n,this.totalBarWidth=j+n,this.width=g=e.length*j+(e.length-1)*n,this.initTarget(),q&&(H=o===c?-Infinity:o,I=p===c?Infinity:p),z=[],x=J?[]:z;var S=[],T=[];for(A=0,B=e.length;A<B;A++)if(J){K=e[A],e[A]=N=[],S[A]=0,x[A]=T[A]=0;for(L=0,M=K.length;L<M;L++)O=N[L]=q?i(K[L],H,I):K[L],O!==null&&(O>0&&(S[A]+=O),r<0&&s>0?O<0?T[A]+=b.abs(O):x[A]+=O:x[A]+=b.abs(O-(O<0?s:r)),z.push(O))}else O=q?i(e[A],H,I):e[A],O=e[A]=k(O),O!==null&&z.push(O);this.max=G=b.max.apply(b,z),this.min=F=b.min.apply(b,z),this.stackMax=s=J?b.max.apply(b,S):G,this.stackMin=r=J?b.min.apply(b,z):F,f.get("chartRangeMin")!==c&&(f.get("chartRangeClip")||f.get("chartRangeMin")<F)&&(F=f.get("chartRangeMin")),f.get("chartRangeMax")!==c&&(f.get("chartRangeClip")||f.get("chartRangeMax")>G)&&(G=f.get("chartRangeMax")),this.zeroAxis=D=f.get("zeroAxis",!0),F<=0&&G>=0&&D?E=0:D==0?E=F:F>0?E=F:E=G,this.xaxisOffset=E,C=J?b.max.apply(b,x)+b.max.apply(b,T):G-F,this.canvasHeightEf=D&&F<0?this.canvasHeight-2:this.canvasHeight-1,F<E?(Q=J&&G>=0?s:G,P=(Q-E)/C*this.canvasHeight,P!==b.ceil(P)&&(this.canvasHeightEf-=2,P=b.ceil(P))):P=this.canvasHeight,this.yoffset=P,d.isArray(f.get("colorMap"))?(this.colorMapByIndex=f.get("colorMap"),this.colorMapByValue=null):(this.colorMapByIndex=null,this.colorMapByValue=f.get("colorMap"),this.colorMapByValue&&this.colorMapByValue.get===c&&(this.colorMapByValue=new t(this.colorMapByValue))),this.range=C},getRegion:function(a,d,e){var f=b.floor(d/this.totalBarWidth);return f<0||f>=this.values.length?c:f},getCurrentRegionFields:function(){var a=this.currentRegion,b=r(this.values[a]),c=[],d,e;for(e=b.length;e--;)d=b[e],c.push({isNull:d===null,value:d,color:this.calcColor(e,d,a),offset:a});return c},calcColor:function(a,b,e){var f=this.colorMapByIndex,g=this.colorMapByValue,h=this.options,i,j;return this.stacked?i=h.get("stackedBarColor"):i=b<0?h.get("negBarColor"):h.get("barColor"),b===0&&h.get("zeroColor")!==c&&(i=h.get("zeroColor")),g&&(j=g.get(b))?i=j:f&&f.length>e&&(i=f[e]),d.isArray(i)?i[a%i.length]:i},renderRegion:function(a,e){var f=this.values[a],g=this.options,h=this.xaxisOffset,i=[],j=this.range,k=this.stacked,l=this.target,m=a*this.totalBarWidth,n=this.canvasHeightEf,p=this.yoffset,q,r,s,t,u,v,w,x,y,z;f=d.isArray(f)?f:[f],w=f.length,x=f[0],t=o(null,f),z=o(h,f,!0);if(t)return g.get("nullColor")?(s=e?g.get("nullColor"):this.calcHighlightColor(g.get("nullColor"),g),q=p>0?p-1:p,l.drawRect(m,q,this.barWidth-1,0,s,s)):c;u=p;for(v=0;v<w;v++){x=f[v];if(k&&x===h){if(!z||y)continue;y=!0}j>0?r=b.floor(n*(b.abs(x-h)/j))+1:r=1,x<h||x===h&&p===0?(q=u,u+=r):(q=p-r,p-=r),s=this.calcColor(v,x,a),e&&(s=this.calcHighlightColor(s,g)),i.push(l.drawRect(m,q,this.barWidth-1,r-1,s,s))}return i.length===1?i[0]:i}}),d.fn.sparkline.tristate=z=g(d.fn.sparkline._base,w,{type:"tristate",init:function(a,b,e,f,g){var h=parseInt(e.get("barWidth"),10),i=parseInt(e.get("barSpacing"),10);z._super.init.call(this,a,b,e,f,g),this.regionShapes={},this.barWidth=h,this.barSpacing=i,this.totalBarWidth=h+i,this.values=d.map(b,Number),this.width=f=b.length*h+(b.length-1)*i,d.isArray(e.get("colorMap"))?(this.colorMapByIndex=e.get("colorMap"),this.colorMapByValue=null):(this.colorMapByIndex=null,this.colorMapByValue=e.get("colorMap"),this.colorMapByValue&&this.colorMapByValue.get===c&&(this.colorMapByValue=new t(this.colorMapByValue))),this.initTarget()},getRegion:function(a,c,d){return b.floor(c/this.totalBarWidth)},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.values[a]===c,value:this.values[a],color:this.calcColor(this.values[a],a),offset:a}},calcColor:function(a,b){var c=this.values,d=this.options,e=this.colorMapByIndex,f=this.colorMapByValue,g,h;return f&&(h=f.get(a))?g=h:e&&e.length>b?g=e[b]:c[b]<0?g=d.get("negBarColor"):c[b]>0?g=d.get("posBarColor"):g=d.get("zeroBarColor"),g},renderRegion:function(a,c){var d=this.values,e=this.options,f=this.target,g,h,i,j,k,l;g=f.pixelHeight,i=b.round(g/2),j=a*this.totalBarWidth,d[a]<0?(k=i,h=i-1):d[a]>0?(k=0,h=i-1):(k=i-1,h=2),l=this.calcColor(d[a],a);if(l===null)return;return c&&(l=this.calcHighlightColor(l,e)),f.drawRect(j,k,this.barWidth-1,h-1,l,l)}}),d.fn.sparkline.discrete=A=g(d.fn.sparkline._base,w,{type:"discrete",init:function(a,e,f,g,h){A._super.init.call(this,a,e,f,g,h),this.regionShapes={},this.values=e=d.map(e,Number),this.min=b.min.apply(b,e),this.max=b.max.apply(b,e),this.range=this.max-this.min,this.width=g=f.get("width")==="auto"?e.length*2:this.width,this.interval=b.floor(g/e.length),this.itemWidth=g/e.length,f.get("chartRangeMin")!==c&&(f.get("chartRangeClip")||f.get("chartRangeMin")<this.min)&&(this.min=f.get("chartRangeMin")),f.get("chartRangeMax")!==c&&(f.get("chartRangeClip")||f.get("chartRangeMax")>this.max)&&(this.max=f.get("chartRangeMax")),this.initTarget(),this.target&&(this.lineHeight=f.get("lineHeight")==="auto"?b.round(this.canvasHeight*.3):f.get("lineHeight"))},getRegion:function(a,c,d){return b.floor(c/this.itemWidth)},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.values[a]===c,value:this.values[a],offset:a}},renderRegion:function(a,c){var d=this.values,e=this.options,f=this.min,g=this.max,h=this.range,j=this.interval,k=this.target,l=this.canvasHeight,m=this.lineHeight,n=l-m,o,p,q,r;return p=i(d[a],f,g),r=a*j,o=b.round(n-n*((p-f)/h)),q=e.get("thresholdColor")&&p<e.get("thresholdValue")?e.get("thresholdColor"):e.get("lineColor"),c&&(q=this.calcHighlightColor(q,e)),k.drawLine(r,o,r,o+m,q)}}),d.fn.sparkline.bullet=B=g(d.fn.sparkline._base,{type:"bullet",init:function(a,d,e,f,g){var h,i,j;B._super.init.call(this,a,d,e,f,g),this.values=d=l(d),j=d.slice(),j[0]=j[0]===null?j[2]:j[0],j[1]=d[1]===null?j[2]:j[1],h=b.min.apply(b,d),i=b.max.apply(b,d),e.get("base")===c?h=h<0?h:0:h=e.get("base"),this.min=h,this.max=i,this.range=i-h,this.shapes={},this.valueShapes={},this.regiondata={},this.width=f=e.get("width")==="auto"?"4.0em":f,this.target=this.$el.simpledraw(f,g,e.get("composite")),d.length||(this.disabled=!0),this.initTarget()},getRegion:function(a,b,d){var e=this.target.getShapeAt(a,b,d);return e!==c&&this.shapes[e]!==c?this.shapes[e]:c},getCurrentRegionFields:function(){var a=this.currentRegion;return{fieldkey:a.substr(0,1),value:this.values[a.substr(1)],region:a}},changeHighlight:function(a){var b=this.currentRegion,c=this.valueShapes[b],d;delete this.shapes[c];switch(b.substr(0,1)){case"r":d=this.renderRange(b.substr(1),a);break;case"p":d=this.renderPerformance(a);break;case"t":d=this.renderTarget(a)}this.valueShapes[b]=d.id,this.shapes[d.id]=b,this.target.replaceWithShape(c,d)},renderRange:function(a,c){var d=this.values[a],e=b.round(this.canvasWidth*((d-this.min)/this.range)),f=this.options.get("rangeColors")[a-2];return c&&(f=this.calcHighlightColor(f,this.options)),this.target.drawRect(0,0,e-1,this.canvasHeight-1,f,f)},renderPerformance:function(a){var c=this.values[1],d=b.round(this.canvasWidth*((c-this.min)/this.range)),e=this.options.get("performanceColor");return a&&(e=this.calcHighlightColor(e,this.options)),this.target.drawRect(0,b.round(this.canvasHeight*.3),d-1,b.round(this.canvasHeight*.4)-1,e,e)},renderTarget:function(a){var c=this.values[0],d=b.round(this.canvasWidth*((c-this.min)/this.range)-this.options.get("targetWidth")/2),e=b.round(this.canvasHeight*.1),f=this.canvasHeight-e*2,g=this.options.get("targetColor");return a&&(g=this.calcHighlightColor(g,this.options)),this.target.drawRect(d,e,this.options.get("targetWidth")-1,f-1,g,g)},render:function(){var a=this.values.length,b=this.target,c,d;if(!B._super.render.call(this))return;for(c=2;c<a;c++)d=this.renderRange(c).append(),this.shapes[d.id]="r"+c,this.valueShapes["r"+c]=d.id;this.values[1]!==null&&(d=this.renderPerformance().append(),this.shapes[d.id]="p1",this.valueShapes.p1=d.id),this.values[0]!==null&&(d=this.renderTarget().append(),this.shapes[d.id]="t0",this.valueShapes.t0=d.id),b.render()}}),d.fn.sparkline.pie=C=g(d.fn.sparkline._base,{type:"pie",init:function(a,c,e,f,g){var h=0,i;C._super.init.call(this,a,c,e,f,g),this.shapes={},this.valueShapes={},this.values=c=d.map(c,Number),e.get("width")==="auto"&&(this.width=this.height);if(c.length>0)for(i=c.length;i--;)h+=c[i];this.total=h,this.initTarget(),this.radius=b.floor(b.min(this.canvasWidth,this.canvasHeight)/2)},getRegion:function(a,b,d){var e=this.target.getShapeAt(a,b,d);return e!==c&&this.shapes[e]!==c?this.shapes[e]:c},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.values[a]===c,value:this.values[a],percent:this.values[a]/this.total*100,color:this.options.get("sliceColors")[a%this.options.get("sliceColors").length],offset:a}},changeHighlight:function(a){var b=this.currentRegion,c=this.renderSlice(b,a),d=this.valueShapes[b];delete this.shapes[d],this.target.replaceWithShape(d,c),this.valueShapes[b]=c.id,this.shapes[c.id]=b},renderSlice:function(a,d){var e=this.target,f=this.options,g=this.radius,h=f.get("borderWidth"),i=f.get("offset"),j=2*b.PI,k=this.values,l=this.total,m=i?2*b.PI*(i/360):0,n,o,p,q,r;q=k.length;for(p=0;p<q;p++){n=m,o=m,l>0&&(o=m+j*(k[p]/l));if(a===p)return r=f.get("sliceColors")[p%f.get("sliceColors").length],d&&(r=this.calcHighlightColor(r,f)),e.drawPieSlice(g,g,g-h,n,o,c,r);m=o}},render:function(){var a=this.target,d=this.values,e=this.options,f=this.radius,g=e.get("borderWidth"),h,i;if(!C._super.render.call(this))return;g&&a.drawCircle(f,f,b.floor(f-g/2),e.get("borderColor"),c,g).append();for(i=d.length;i--;)d[i]&&(h=this.renderSlice(i).append(),this.valueShapes[i]=h.id,this.shapes[h.id]=i);a.render()}}),d.fn.sparkline.box=D=g(d.fn.sparkline._base,{type:"box",init:function(a,b,c,e,f){D._super.init.call(this,a,b,c,e,f),this.values=d.map(b,Number),this.width=c.get("width")==="auto"?"4.0em":e,this.initTarget(),this.values.length||(this.disabled=1)},getRegion:function(){return 1},getCurrentRegionFields:function(){var a=[{field:"lq",value:this.quartiles[0]},{field:"med",value:this.quartiles
+[1]},{field:"uq",value:this.quartiles[2]}];return this.loutlier!==c&&a.push({field:"lo",value:this.loutlier}),this.routlier!==c&&a.push({field:"ro",value:this.routlier}),this.lwhisker!==c&&a.push({field:"lw",value:this.lwhisker}),this.rwhisker!==c&&a.push({field:"rw",value:this.rwhisker}),a},render:function(){var a=this.target,d=this.values,e=d.length,f=this.options,g=this.canvasWidth,h=this.canvasHeight,i=f.get("chartRangeMin")===c?b.min.apply(b,d):f.get("chartRangeMin"),k=f.get("chartRangeMax")===c?b.max.apply(b,d):f.get("chartRangeMax"),l=0,m,n,o,p,q,r,s,t,u,v,w;if(!D._super.render.call(this))return;if(f.get("raw"))f.get("showOutliers")&&d.length>5?(n=d[0],m=d[1],p=d[2],q=d[3],r=d[4],s=d[5],t=d[6]):(m=d[0],p=d[1],q=d[2],r=d[3],s=d[4]);else{d.sort(function(a,b){return a-b}),p=j(d,1),q=j(d,2),r=j(d,3),o=r-p;if(f.get("showOutliers")){m=s=c;for(u=0;u<e;u++)m===c&&d[u]>p-o*f.get("outlierIQR")&&(m=d[u]),d[u]<r+o*f.get("outlierIQR")&&(s=d[u]);n=d[0],t=d[e-1]}else m=d[0],s=d[e-1]}this.quartiles=[p,q,r],this.lwhisker=m,this.rwhisker=s,this.loutlier=n,this.routlier=t,w=g/(k-i+1),f.get("showOutliers")&&(l=b.ceil(f.get("spotRadius")),g-=2*b.ceil(f.get("spotRadius")),w=g/(k-i+1),n<m&&a.drawCircle((n-i)*w+l,h/2,f.get("spotRadius"),f.get("outlierLineColor"),f.get("outlierFillColor")).append(),t>s&&a.drawCircle((t-i)*w+l,h/2,f.get("spotRadius"),f.get("outlierLineColor"),f.get("outlierFillColor")).append()),a.drawRect(b.round((p-i)*w+l),b.round(h*.1),b.round((r-p)*w),b.round(h*.8),f.get("boxLineColor"),f.get("boxFillColor")).append(),a.drawLine(b.round((m-i)*w+l),b.round(h/2),b.round((p-i)*w+l),b.round(h/2),f.get("lineColor")).append(),a.drawLine(b.round((m-i)*w+l),b.round(h/4),b.round((m-i)*w+l),b.round(h-h/4),f.get("whiskerColor")).append(),a.drawLine(b.round((s-i)*w+l),b.round(h/2),b.round((r-i)*w+l),b.round(h/2),f.get("lineColor")).append(),a.drawLine(b.round((s-i)*w+l),b.round(h/4),b.round((s-i)*w+l),b.round(h-h/4),f.get("whiskerColor")).append(),a.drawLine(b.round((q-i)*w+l),b.round(h*.1),b.round((q-i)*w+l),b.round(h*.9),f.get("medianColor")).append(),f.get("target")&&(v=b.ceil(f.get("spotRadius")),a.drawLine(b.round((f.get("target")-i)*w+l),b.round(h/2-v),b.round((f.get("target")-i)*w+l),b.round(h/2+v),f.get("targetColor")).append(),a.drawLine(b.round((f.get("target")-i)*w+l-v),b.round(h/2),b.round((f.get("target")-i)*w+l+v),b.round(h/2),f.get("targetColor")).append()),a.render()}}),G=g({init:function(a,b,c,d){this.target=a,this.id=b,this.type=c,this.args=d},append:function(){return this.target.appendShape(this),this}}),H=g({_pxregex:/(\d+)(px)?\s*$/i,init:function(a,b,c){if(!a)return;this.width=a,this.height=b,this.target=c,this.lastShapeId=null,c[0]&&(c=c[0]),d.data(c,"_jqs_vcanvas",this)},drawLine:function(a,b,c,d,e,f){return this.drawShape([[a,b],[c,d]],e,f)},drawShape:function(a,b,c,d){return this._genShape("Shape",[a,b,c,d])},drawCircle:function(a,b,c,d,e,f){return this._genShape("Circle",[a,b,c,d,e,f])},drawPieSlice:function(a,b,c,d,e,f,g){return this._genShape("PieSlice",[a,b,c,d,e,f,g])},drawRect:function(a,b,c,d,e,f){return this._genShape("Rect",[a,b,c,d,e,f])},getElement:function(){return this.canvas},getLastShapeId:function(){return this.lastShapeId},reset:function(){alert("reset not implemented")},_insert:function(a,b){d(b).html(a)},_calculatePixelDims:function(a,b,c){var e;e=this._pxregex.exec(b),e?this.pixelHeight=e[1]:this.pixelHeight=d(c).height(),e=this._pxregex.exec(a),e?this.pixelWidth=e[1]:this.pixelWidth=d(c).width()},_genShape:function(a,b){var c=L++;return b.unshift(c),new G(this,c,a,b)},appendShape:function(a){alert("appendShape not implemented")},replaceWithShape:function(a,b){alert("replaceWithShape not implemented")},insertAfterShape:function(a,b){alert("insertAfterShape not implemented")},removeShapeId:function(a){alert("removeShapeId not implemented")},getShapeAt:function(a,b,c){alert("getShapeAt not implemented")},render:function(){alert("render not implemented")}}),I=g(H,{init:function(b,e,f,g){I._super.init.call(this,b,e,f),this.canvas=a.createElement("canvas"),f[0]&&(f=f[0]),d.data(f,"_jqs_vcanvas",this),d(this.canvas).css({display:"inline-block",width:b,height:e,verticalAlign:"top"}),this._insert(this.canvas,f),this._calculatePixelDims(b,e,this.canvas),this.canvas.width=this.pixelWidth,this.canvas.height=this.pixelHeight,this.interact=g,this.shapes={},this.shapeseq=[],this.currentTargetShapeId=c,d(this.canvas).css({width:this.pixelWidth,height:this.pixelHeight})},_getContext:function(a,b,d){var e=this.canvas.getContext("2d");return a!==c&&(e.strokeStyle=a),e.lineWidth=d===c?1:d,b!==c&&(e.fillStyle=b),e},reset:function(){var a=this._getContext();a.clearRect(0,0,this.pixelWidth,this.pixelHeight),this.shapes={},this.shapeseq=[],this.currentTargetShapeId=c},_drawShape:function(a,b,d,e,f){var g=this._getContext(d,e,f),h,i;g.beginPath(),g.moveTo(b[0][0]+.5,b[0][1]+.5);for(h=1,i=b.length;h<i;h++)g.lineTo(b[h][0]+.5,b[h][1]+.5);d!==c&&g.stroke(),e!==c&&g.fill(),this.targetX!==c&&this.targetY!==c&&g.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=a)},_drawCircle:function(a,d,e,f,g,h,i){var j=this._getContext(g,h,i);j.beginPath(),j.arc(d,e,f,0,2*b.PI,!1),this.targetX!==c&&this.targetY!==c&&j.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=a),g!==c&&j.stroke(),h!==c&&j.fill()},_drawPieSlice:function(a,b,d,e,f,g,h,i){var j=this._getContext(h,i);j.beginPath(),j.moveTo(b,d),j.arc(b,d,e,f,g,!1),j.lineTo(b,d),j.closePath(),h!==c&&j.stroke(),i&&j.fill(),this.targetX!==c&&this.targetY!==c&&j.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=a)},_drawRect:function(a,b,c,d,e,f,g){return this._drawShape(a,[[b,c],[b+d,c],[b+d,c+e],[b,c+e],[b,c]],f,g)},appendShape:function(a){return this.shapes[a.id]=a,this.shapeseq.push(a.id),this.lastShapeId=a.id,a.id},replaceWithShape:function(a,b){var c=this.shapeseq,d;this.shapes[b.id]=b;for(d=c.length;d--;)c[d]==a&&(c[d]=b.id);delete this.shapes[a]},replaceWithShapes:function(a,b){var c=this.shapeseq,d={},e,f,g;for(f=a.length;f--;)d[a[f]]=!0;for(f=c.length;f--;)e=c[f],d[e]&&(c.splice(f,1),delete this.shapes[e],g=f);for(f=b.length;f--;)c.splice(g,0,b[f].id),this.shapes[b[f].id]=b[f]},insertAfterShape:function(a,b){var c=this.shapeseq,d;for(d=c.length;d--;)if(c[d]===a){c.splice(d+1,0,b.id),this.shapes[b.id]=b;return}},removeShapeId:function(a){var b=this.shapeseq,c;for(c=b.length;c--;)if(b[c]===a){b.splice(c,1);break}delete this.shapes[a]},getShapeAt:function(a,b,c){return this.targetX=b,this.targetY=c,this.render(),this.currentTargetShapeId},render:function(){var a=this.shapeseq,b=this.shapes,c=a.length,d=this._getContext(),e,f,g;d.clearRect(0,0,this.pixelWidth,this.pixelHeight);for(g=0;g<c;g++)e=a[g],f=b[e],this["_draw"+f.type].apply(this,f.args);this.interact||(this.shapes={},this.shapeseq=[])}}),J=g(H,{init:function(b,c,e){var f;J._super.init.call(this,b,c,e),e[0]&&(e=e[0]),d.data(e,"_jqs_vcanvas",this),this.canvas=a.createElement("span"),d(this.canvas).css({display:"inline-block",position:"relative",overflow:"hidden",width:b,height:c,margin:"0px",padding:"0px",verticalAlign:"top"}),this._insert(this.canvas,e),this._calculatePixelDims(b,c,this.canvas),this.canvas.width=this.pixelWidth,this.canvas.height=this.pixelHeight,f='<v:group coordorigin="0 0" coordsize="'+this.pixelWidth+" "+this.pixelHeight+'"'+' style="position:absolute;top:0;left:0;width:'+this.pixelWidth+"px;height="+this.pixelHeight+'px;"></v:group>',this.canvas.insertAdjacentHTML("beforeEnd",f),this.group=d(this.canvas).children()[0],this.rendered=!1,this.prerender=""},_drawShape:function(a,b,d,e,f){var g=[],h,i,j,k,l,m,n;for(n=0,m=b.length;n<m;n++)g[n]=""+b[n][0]+","+b[n][1];return h=g.splice(0,1),f=f===c?1:f,i=d===c?' stroked="false" ':' strokeWeight="'+f+'px" strokeColor="'+d+'" ',j=e===c?' filled="false"':' fillColor="'+e+'" filled="true" ',k=g[0]===g[g.length-1]?"x ":"",l='<v:shape coordorigin="0 0" coordsize="'+this.pixelWidth+" "+this.pixelHeight+'" '+' id="jqsshape'+a+'" '+i+j+' style="position:absolute;left:0px;top:0px;height:'+this.pixelHeight+"px;width:"+this.pixelWidth+'px;padding:0px;margin:0px;" '+' path="m '+h+" l "+g.join(", ")+" "+k+'e">'+" </v:shape>",l},_drawCircle:function(a,b,d,e,f,g,h){var i,j,k;return b-=e,d-=e,i=f===c?' stroked="false" ':' strokeWeight="'+h+'px" strokeColor="'+f+'" ',j=g===c?' filled="false"':' fillColor="'+g+'" filled="true" ',k='<v:oval  id="jqsshape'+a+'" '+i+j+' style="position:absolute;top:'+d+"px; left:"+b+"px; width:"+e*2+"px; height:"+e*2+'px"></v:oval>',k},_drawPieSlice:function(a,d,e,f,g,h,i,j){var k,l,m,n,o,p,q,r;if(g===h)return"";h-g===2*b.PI&&(g=0,h=2*b.PI),l=d+b.round(b.cos(g)*f),m=e+b.round(b.sin(g)*f),n=d+b.round(b.cos(h)*f),o=e+b.round(b.sin(h)*f);if(l===n&&m===o){if(h-g<b.PI)return"";l=n=d+f,m=o=e}return l===n&&m===o&&h-g<b.PI?"":(k=[d-f,e-f,d+f,e+f,l,m,n,o],p=i===c?' stroked="false" ':' strokeWeight="1px" strokeColor="'+i+'" ',q=j===c?' filled="false"':' fillColor="'+j+'" filled="true" ',r='<v:shape coordorigin="0 0" coordsize="'+this.pixelWidth+" "+this.pixelHeight+'" '+' id="jqsshape'+a+'" '+p+q+' style="position:absolute;left:0px;top:0px;height:'+this.pixelHeight+"px;width:"+this.pixelWidth+'px;padding:0px;margin:0px;" '+' path="m '+d+","+e+" wa "+k.join(", ")+' x e">'+" </v:shape>",r)},_drawRect:function(a,b,c,d,e,f,g){return this._drawShape(a,[[b,c],[b,c+e],[b+d,c+e],[b+d,c],[b,c]],f,g)},reset:function(){this.group.innerHTML=""},appendShape:function(a){var b=this["_draw"+a.type].apply(this,a.args);return this.rendered?this.group.insertAdjacentHTML("beforeEnd",b):this.prerender+=b,this.lastShapeId=a.id,a.id},replaceWithShape:function(a,b){var c=d("#jqsshape"+a),e=this["_draw"+b.type].apply(this,b.args);c[0].outerHTML=e},replaceWithShapes:function(a,b){var c=d("#jqsshape"+a[0]),e="",f=b.length,g;for(g=0;g<f;g++)e+=this["_draw"+b[g].type].apply(this,b[g].args);c[0].outerHTML=e;for(g=1;g<a.length;g++)d("#jqsshape"+a[g]).remove()},insertAfterShape:function(a,b){var c=d("#jqsshape"+a),e=this["_draw"+b.type].apply(this,b.args);c[0].insertAdjacentHTML("afterEnd",e)},removeShapeId:function(a){var b=d("#jqsshape"+a);this.group.removeChild(b[0])},getShapeAt:function(a,b,c){var d=a.id.substr(8);return d},render:function(){this.rendered||(this.group.innerHTML=this.prerender,this.rendered=!0)}})})})(document,Math);
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/css/common.css b/public/assets/plugins/mxgraph/css/common.css
new file mode 100644
index 0000000..5eb0b45
--- /dev/null
+++ b/public/assets/plugins/mxgraph/css/common.css
@@ -0,0 +1,152 @@
+div.mxRubberband {
+	position: absolute;
+	overflow: hidden;
+	border-style: solid;
+	border-width: 1px;
+	border-color: #0000FF;
+	background: #0077FF;
+}
+textarea.mxCellEditor {
+	background: url('../images/transparent.gif');
+	border-style: solid;
+	border-color: black;
+	border-width: 0;
+	overflow: auto;
+}
+div.mxWindow {
+	-webkit-box-shadow: 3px 3px 12px #C0C0C0;
+	-moz-box-shadow: 3px 3px 12px #C0C0C0;
+	box-shadow: 3px 3px 12px #C0C0C0;
+	background: url('../images/window.gif');
+	border-style: outset;
+	border-width: 1px;
+	position: absolute;
+	overflow: hidden;
+	z-index: 1;
+}
+table.mxWindow {
+	border-collapse: collapse;
+	table-layout: fixed;
+  	font-family: Arial;
+	font-size: 8pt;
+}
+td.mxWindowTitle {
+	background: url('../images/window-title.gif') repeat-x;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+ 	text-align: center;
+ 	font-weight: bold;
+ 	overflow: hidden;
+	height: 13px;
+	padding: 2px;
+ 	padding-top: 4px;
+ 	padding-bottom: 6px;
+ 	color: black;
+}
+td.mxWindowPane {
+	vertical-align: top;
+	padding: 0px;
+}
+div.mxWindowPane {
+	overflow: hidden;
+}
+td.mxWindowPane td {
+  	font-family: Arial;
+	font-size: 8pt;
+}
+td.mxWindowPane input, td.mxWindowPane select, td.mxWindowPane textarea, td.mxWindowPane radio {
+  	border-color: #8C8C8C;
+  	border-style: solid;
+  	border-width: 1px;
+  	font-family: Arial;
+	font-size: 8pt;
+ 	padding: 1px;
+}
+td.mxWindowPane button {
+	background: url('../images/button.gif') repeat-x;
+  	font-family: Arial;
+  	font-size: 8pt;
+  	padding: 2px;
+	float: left;
+}
+img.mxToolbarItem {
+	margin-right: 6px;
+	margin-bottom: 6px;
+	border-width: 1px;
+}
+select.mxToolbarCombo {
+	vertical-align: top;
+	border-style: inset;
+	border-width: 2px;
+}
+div.mxToolbarComboContainer {
+	padding: 2px;
+}
+img.mxToolbarMode {
+	margin: 2px;
+	margin-right: 4px;
+	margin-bottom: 4px;
+	border-width: 0px;
+}
+img.mxToolbarModeSelected {
+	margin: 0px;
+	margin-right: 2px;
+	margin-bottom: 2px;
+	border-width: 2px;
+	border-style: inset;
+}
+div.mxTooltip {
+	-webkit-box-shadow: 3px 3px 12px #C0C0C0;
+	-moz-box-shadow: 3px 3px 12px #C0C0C0;
+	box-shadow: 3px 3px 12px #C0C0C0;
+	background: #FFFFCC;
+	border-style: solid;
+	border-width: 1px;
+	border-color: black;
+	font-family: Arial;
+	font-size: 8pt;
+	position: absolute;
+	cursor: default;
+	padding: 4px;
+	color: black;
+}
+div.mxPopupMenu {
+	-webkit-box-shadow: 3px 3px 12px #C0C0C0;
+	-moz-box-shadow: 3px 3px 12px #C0C0C0;
+	box-shadow: 3px 3px 12px #C0C0C0;
+	background: url('../images/window.gif');
+	position: absolute;
+	border-style: solid;
+	border-width: 1px;
+	border-color: black;
+	cursor: default;
+}
+table.mxPopupMenu {
+	border-collapse: collapse;
+	margin-top: 1px;
+	margin-bottom: 1px;
+}
+tr.mxPopupMenuItem {
+	color: black;
+	cursor: default;
+}
+td.mxPopupMenuItem.disabled {
+	opacity: 0.2;
+}
+td.mxPopupMenuItem.disabled {
+	_filter:alpha(opacity=20) !important;
+}
+tr.mxPopupMenuItemHover {
+	background-color: #000066;
+	color: #FFFFFF;
+}
+td.mxPopupMenuItem {
+	padding: 2px 30px 2px 10px;
+	white-space: nowrap;
+	font-family: Arial;
+	font-size: 8pt;
+}
+td.mxPopupMenuIcon {
+	background-color: #D0D0D0;
+	padding: 2px 4px 2px 4px;
+}
diff --git a/public/assets/plugins/mxgraph/css/explorer.css b/public/assets/plugins/mxgraph/css/explorer.css
new file mode 100644
index 0000000..dfbbd21
--- /dev/null
+++ b/public/assets/plugins/mxgraph/css/explorer.css
@@ -0,0 +1,15 @@
+div.mxTooltip {
+	filter:progid:DXImageTransform.Microsoft.DropShadow(OffX=4, OffY=4, 
+        Color='#A2A2A2', Positive='true')
+}
+div.mxPopupMenu {
+	filter:progid:DXImageTransform.Microsoft.DropShadow(OffX=4, OffY=4, 
+        Color='#C0C0C0', Positive='true')
+}
+div.mxWindow {
+	filter:progid:DXImageTransform.Microsoft.DropShadow(OffX=4, OffY=4, 
+        Color='#C0C0C0', Positive='true')
+}
+td.mxWindowTitle {
+	_height: 23px;
+}
diff --git a/public/assets/plugins/mxgraph/images/1x1.png b/public/assets/plugins/mxgraph/images/1x1.png
new file mode 100644
index 0000000000000000000000000000000000000000..1914264c08781d1f30ee0b8482bccf44586f2dc1
GIT binary patch
literal 95
zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga%mF?ju0VQumF+E%TuG2$FoVOh
l8)-lem#2$k2*>s01R$G<f$@>z9%CSj!PC{xWt~$(697H@6ZHT9

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/checkmark.gif b/public/assets/plugins/mxgraph/images/checkmark.gif
new file mode 100644
index 0000000000000000000000000000000000000000..d79444daa99b23d12ca3fd0af8b66c5042bed1f2
GIT binary patch
literal 1253
zcmZ?wbhEHb6lD-)I3mxGlao_ZQ`6Pe)z;Sb?c2AaqM~2FejPY)VAiZz(b3V9Cr^I)
z@?~RV<C7;(_Uzd+W5$fXfB$~^^l9nRrR&zMJ8|N~qeqW^{P=PI{{6Ra-+uY>Wy6LI
zWo2d0o;};QZ(mwk+W-Im75{Tb_y#DrB$gxsX&d{Bg2d$P)DnfH)bz|eTc!8A_bVx6
zrr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9IEy7UZUuBq~(o=HwMyRoE&e
zrsOB3S^?Q0VSOb9u#%E&TO~)3gaXJ;=lr5n1yel(-DCqZ0|hffJwsy?b8~YY1tSAP
z1APM{eM2K%Lvt%*BP#;~1t?Gg+E$d3W)<Y(2DJ;wvsKC{DJihh*Do(G*DE*H%P&gT
zH?*|01esxEqzhD`TU?n}l31aeSF8*(!6mggxhS)sBr`ux0c2ugQhsTPtrF0s5HI8w
zz>Uo-)&qM-FF8L~zap_f-%!s0<RzFwUtj!6b93RUi%Wu15$?rmaB)awL8^XGYH@yP
zQF1C!xiZMA0xRdD)WnkfqLBRj99Sp@WaO9R7iZ)bC^!e3Duid|rR0|vgH`+bT6yLb
zmn7yTr+T{BDgpKDWoD*WS-4r4nz^`|SUNg78XCG9I$9c<I$IiB8oId|8k!rs!1TK0
zCzs}?=9R$orXcj1;?xUD2)PA7n_W_iGRsm^+=}vZ6~G?0%Eav!Bb??z^`_u<i!n~U
z`as9%gQ68Fnqfk~v;$(o6D^PfPxh&Kz_eZjOw^43|NZ^*``6DO-@kqR^7+%p5AWZ-
zee?R&%NNg|J$>@{(ZdJ#@7=v~`_|1H*RNf@a{1E53+K<BJ#+fh$rHzq9X)dR(7^-y
z_wC)Yd)Lk#+qZ4qvU$_S4eQsfU9)=C$`#9(EnTvB(ZU7u=gplnd)CYu)2B_HGI`R(
z3H^P&J>6ZM9qnzcEzM1h4fS=kHPuy>73F26CB;RB1^IcoIoVm68R==MDalER3Gs2U
zG0{<x5#eE>A;Cd`0selzKHgrQ9`0_gF3wJl4)%7oHr7^_7UpKACdNj<45g>5qphW>
zp{}N?qO7E-ATK8?BP}H<Auc8=A}k~*z|Y6a!_CFX!Oq6Y!py|Tz@Ye(1xU&>=r8~Q
zs5D|=^?0D(my$UzW7WEx)kV|1gBp~(-Iea%f5Is+^Wnq5J4Vg(6In0lh%@pxA9z*4
jHl;~jpit4~0k4}|hnUnJuZM?(18;xWQKQGr$Y2csh?(E!

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/clear.gif b/public/assets/plugins/mxgraph/images/clear.gif
new file mode 100644
index 0000000000000000000000000000000000000000..c6acf0a43455a3272d4b584de82d7583cbb401d7
GIT binary patch
literal 1114
zcmZ?wbhEHb<YnMuXkcVGaNxlI|Nj;Lb4U0FD7Yk+Bm!w0`-+0Z<m}WEg{0K<%sgAA
z_q+EiDP*SDDutW+8u%7Cr)Fe&R28KLSNVk`S7j$#rYPClDcDq4Rpb`rrj{fsROII5
z6<bx<DkY}mC#6~e*&tzkB?YjOl5ATgN05X9$WG_{qErP_Jp<ij12Y2!GebQ?V-s_8
za~%aE149FS10#JyBV9vtD`O)o0|NypPy*Ukl#*r@<l+Xk3&^uo$|xx*u+rBrFE7_C
zH`dE9O4m2Ew6p}7VPvEWRH0j3nOBlnp_^B%3^TzcwK%ybv!En1KTiQ<Vq#K$X^E{8
z(4`PB<QBk<%`4Uedq*!hKUcpZu|VHY&j92lm_lD){7Q3k;i`*Ef>IIg#cFVINM%8)
zeo$(0erZv1Dp0vH$f^P>=c3falKi5O{QMkPC<bKYm*f{`<QFJ72b(H{XXd5kmluOo
z`}$gW<`tJD<|U_ky4WfK_3LG3rdU}z8Cy7;nj2Y|85$WHx*9qf8#y~0I+~lAxwsgb
zIT^w9y5uL9=BDPA!1Sgd^cv&T3rYyN1wfl!Qj0RnQd8WD@^cly9=6KF?G^)^=0WwQ
z;C724PQCg-$LNEi6)BowLcp{GV!{(GkONQlsd>P(UIa|kjQ{`r{qy_R&mZ5vef{$J
z)5j0*-@SeF`qj%9&!0Vg^7zri2lwyYy>t84%^TORUA=Po(!~qs&z(JU`qar2$B!L7
za`@1}1N-;w-Lrew&K=vgZQZhY)5Z<!*R5T%dezDm%a<)(vUt(L1@q_4oilsZ%o)?C
zO`S4%(!>e<eZ4*1U7a26ZLKZMO^prpb+t9sRh1RxWu+y>MTG_VdAT{+S(zE>X{jm6
zNr?&Zaj`McQIQehVWA<xL4g7Oe!f25UY;KAZmurQPL2-tcD6RwR+bj#W~L^_M!*cE
zr>mo_rKzE=rmCW>q^KY-Co3Z@B`F~;CMqH<Bq+eo$IHXb#mT|W#>&FX#K^#)_>%=l
qGBW5e00F4XU|<sWN$9NH@VCc#@=D3vt>xM5wf*XucTS2hSOWl)*@>wD

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/close.png b/public/assets/plugins/mxgraph/images/close.png
new file mode 100644
index 0000000000000000000000000000000000000000..d319efb6e1ccda38d7228deb645634808f3b6992
GIT binary patch
literal 118
zcmeAS@N?(olHy`uVBq!ia0vp^oFL4|3?y&GPYDK6YymzYuGO>l{{R1f!=%%iKoO>r
zAiv=M3{STkcma8`o-U3d9J0wbt{+f1eBi>x0|grz9~#bJ+0>}?TZ*CdCdVq1vPfm1
OLIzJ)KbLh*2~7Z!bS2#Y

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/collapsed.gif b/public/assets/plugins/mxgraph/images/collapsed.gif
new file mode 100644
index 0000000000000000000000000000000000000000..568e8f7cd3d532b59bddc56dac070d9fbaf9245a
GIT binary patch
literal 67
zcmZ?wbhEHb<YnMxn8*ME|NsBLdi5%hRQ$=p$iTqNpaT*G$ulsC%;{g5eMsYubl|2e
P(Yn%Oo{f(<#2Bmr(^?g)

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/connector.png b/public/assets/plugins/mxgraph/images/connector.png
new file mode 100644
index 0000000000000000000000000000000000000000..e545f8ee84b4f40204de2152e328f7cde1f29213
GIT binary patch
literal 250
zcmeAS@N?(olHy`uVBq!ia0vp^{2<K23?xtf=%@rz>H$6>uK!;#xVpLmdH>Hb{6ER?
z|F7`BxeWieF#P{F`Tzgp|DQ7a|Nj~&%dNvB1*CXOg8YL2BLN267fNkFiBeA&#}JO0
z$ri=W7A$x$)0kc2oXnJY7j-z2Jp6eR3?^G1C@64aU}i2>nsD*dfh7kLDjFPxG!`6r
zpmsn(aKVx#OCIp07%)hBIkagohq%mOT+zn8;@JYm0CDbs>yD3Ed1B5v6rbamy<<m%
kk6m%Vo;^G{;#bNTyuPSSaf>op0dxR^r>mdKI;Vst0H{A=LI3~&

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/expanded.gif b/public/assets/plugins/mxgraph/images/expanded.gif
new file mode 100644
index 0000000000000000000000000000000000000000..3a974e2792f7a10faea8b8f9e99a58daa7427f03
GIT binary patch
literal 64
zcmZ?wbhEHb<YnMxn8*ME|NsBLdi5%hRQ$=p$iTqNpaT*G$ulqs&goxy`Yw}lNRi&l
NHMjTt4r5@j1^}5W6_o%0

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/google-drive-20x20.png b/public/assets/plugins/mxgraph/images/google-drive-20x20.png
new file mode 100644
index 0000000000000000000000000000000000000000..9f6b10a54e7160ab7c2b75e165825e3711b81ca1
GIT binary patch
literal 1736
zcmbVNX;2eq7!KGfN2s7w3fj6XR8%0@O+qdSm}CP42_R5G9gihhNF>>f$s!@8t#Ugc
zDpG;bRxRRq0fT~8Kt!P`qJULF@WR@H)mCLj#7beh;jsPT_@g_s`+e{Cz0dRBvs)v>
zgB|SL>}WKagFFO@qE=_iYcrktZrl2)1GTu4vN$rDNFY;C14a|8h<FT;>(E3j3PV+?
z8(T4d8f{vFCMJ%IQ-leXgpPq)bQmU`o<h@T{(&Yvs!YO2ARbH9;3DvO{W%cOs6=3_
zp8`_orI=b1Vm4sW=I|J$IY}u{fq?;lzez|D=r9rmOgb%Y6q-cfIIob}TaK9^Fs?!-
ziNFb`;uMj9lrUg`9|Q7LLR<*o!VH+r;qiDr01JX4Cd6XGEMJ%>WV3`21WZ04WzC>U
z5Jn+EleQ>H1gc3=FJv-PQc@TxYzARSWWoZ0z{0^|`BECb##Ed{O}@C%V~PR6j7oz>
zPihDpurQ+WL^3G?DNiRt(CHP5x5T({GEr2@m?l)ugc%T1r?bR0u5Bcvuz%fnr?xRB
zRgW>FFe8y{P*U|s@R$NqxqH7Miz4NXFv6grih^npLYb_?a8izlK<b8}(x`-NSSCZH
zJRT%wL0moz3s@3JzzGs_5k$sk^Ep!-@4_N%iIgv4^SCfq2E#I#FXpj>xD-k(;j>s0
zcnT}WjU<XIu_?P6%I+kV`(CV2YQRvEFvJjqcB%s+)dWcx)r209M*9H@RH?x&vZXu|
z(IS{Zvk6lL83-LPo?oHn9rhs(AA(^X2jWe{E#^tYVua0O2_$^3L?Qquv8w-*GbZH>
z)6yLOX_l!Yssk<Cx2;bJZ-)oNsfjUAqfyG}u%XecU&|43jH&l{j3UWd>{#)vv}e2L
z9y%g+RvGhLK6i9a50#8HnHBWh$D$GY3*U>h;QhZ#Y~a}8A6%S@P4+hDGfa0x3+r-Q
zJ)N$#hoy`h^*ULCWaQAJ*NAT1t6F#VD30bI*p=4u;OqX++FzfXcBf*-K;wutJ9Ed~
zzS{W>KACe{BaUa~bYJ;KTk}Gj*h%06z9l<8l9%kL9Eu9ndb*6|q0g>|mC|dQau%qI
z*XHAe19i7o9qa>F$CtYeGS1=i+am2;H(SYrJKwC`vZ8UwN$~TD*#${Gy#aKE-lsVp
zirw-hUjEC0vzgPskUVGL*MA46wcae*w_H_|-OXzljNRrz&x;sHLt+vWX64U2wRc%y
zdGK)K?#nh_*l<q7Y-C9NRd1kmZgr}=tjF4Lx%29W`=6evnYFu@rk)$d>$~)Amp4~=
zMcqF$lfDVtT>D9j+u=|T8~>0^emf5xiBRtG|I5KP8#%nH9F-Q<R0Z3`cJ;b8*FA=_
z%-ph~TWiXUBk~(_lQ{L&II<HgCy&mjJCqkCf7e}~)z|OYxOjmg<5LfvPih&tFuyY4
z;U6;j$AMn8Q2{601lb0LJ$l|d@IiQ3=)AK{>HDkqps@~1E9gh~E1%r8GbeM?hOpJg
zRJK7Ii#pr4=W?4FS@lk%PZoz3*&<_u+Pqz8*`q?oy^F+S15Y`3OTq5nT7GS98}7L}
z*zXehd{H=Ok$T3dgM}@4N%6f?d9HqtJ%6oDUMBETojbiT-v}%njtm%mRrI3dV#CZO
z#S60w<QI;wU!H%MqwG=*w?8>?{ZMIklJ-Ywg=UuA%B$Jq;n1C^>dgfi(nl|w{>&1C
zOA4-SAMRizuB>!B=8oJCi1?{ux#LrhQtzRHik_+y83De1qt;cg?3UEk*IAvuJQ`hL
zXL~w#XTz;LS8vj}(D{;0$A;ns?JJg<_c7A%U3}PffP3@I9P=A`;iHv`+s<=XA@mB?
tvKYI%b$MxCUFOV)Hy3x47di;5>9nQpWX-D&Hte_jTja8Eq*Agz{T~zkndSfh

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/grid.gif b/public/assets/plugins/mxgraph/images/grid.gif
new file mode 100644
index 0000000000000000000000000000000000000000..f4e7063e878d67961b48bea089c180c9b838dbdc
GIT binary patch
literal 56
zcmZ?wbhEHb<YM4rn8*ME|Ns9#bLI??RQ$=p$iTqNpaT*G$ulr<Ug=wT`Yr$B999Nv
E0P>&_IsgCw

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/logo-small.gif b/public/assets/plugins/mxgraph/images/logo-small.gif
new file mode 100644
index 0000000000000000000000000000000000000000..9623e8a8d112f42e216050663d5cefbba4913969
GIT binary patch
literal 1340
zcmZ?wbhEHb6krfwI3myR@8945XWjlEwEMr)?B7zk|Eo0qeZ2SY!Os8huK)k?^xt%m
z|4Yq(uk!f6BmVz^g8xUV{+{ane_`6c>nr|0J@RXs_NS}cKF$jKerCn}3azh)=X~BZ
z>HXPlKkl9X^7iG2`#1jo|F8I;JHj_W!6mUI5lGwER}>^BXQ!4ZB&DWj=GiK}-@RW+
zAv48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT8hBDWwnwIorYA~z?m*s8)-
zDKRBKDb)(d1_|pcDS(xfWZNn^f+Q3`b~@)5r7D=}8R#Y(m>DRT8R{7to0yxM>nIo*
z7#ips80i}t=^C0_85>y{7$`u26417ylr*a#7dNO~K%T8qMoCG5mA-y?dAVM>v0i>r
zy1t>Mr6tG=BO_g)3f<z$ypqHU-MnIDm<cYa#mPmP1tppJc?uvC6O-~wOKg>ZE`@j@
zw*YQzUa=n7J9^3ax%w4}1^R}11|ToN6#Dw&SDKp(S6y5Zl!|aKR)dQ}DhpEegHnt0
zON)|Ify$LZRuxz|7o{ea<QIkH=jXseF(4zqB)>Q#zd*q`*i<1rGcP5-ycn$7*VoE3
zuec;JFFDoI#a0QZUoSH=#md6O(89>Y#nHmT+}Y63)zHb+(!kZoz}U&e#MRl%+!?0V
zB|o_|H#M&WrZ)wl*9oUyP(sKp0NU)5T9jFqn&MWJpQ`}&uvI2*w^-mb52`l>w_7Z6
z>eUB2MjsTdNYM-v0;U}h6P{>+9C)%%%>$<OB4DCs{QvLopWnZJ{`mgw>zB`;K7M%r
z?(Lh`uU@`*{_N?K$B!O9xPR~No!hr=-nf44>XplvE?zi)?(CV<r%s+Ye(dOx!-ozY
z*uQV@p5424?%2L<>z2)%Hf~tIZta@Yt5&X9zHI4|#fug$m_KjsoY}Kx&X_)J>XgZo
zCQj(@>+R|8>g;H5Yi((6YHX;ltF5W7s;nq4D=jH5DlEv)%gxEo%FIYlOHD~mN=%54
zi;annii`*k3k?Yl3Jmb~^Y!ue^7L?bb9Hfca&)k_v$e6dva~QaGc_?b0%j;ZT^(&L
zO$~K5RTX6=MFn{|Ss7_5NeOW=Q4wJwK>>a~ULI~PP7Zc9Ru*O^Mg|7OpDaL9o<WBJ
z2tcI~1MB<;=?YIu=1dZC4fvvJkhJVImm`0Q#ATJ-sR>VuswGl2_!BrCB;@<rUM>hS
z;=RDu?C9&b#@ji0<I_tD(hiH5Cm4tov~@kbP$D(0ubHXcTR}=vicM5RLYhOYtBy~`
zhe2GbUzS@$fTzz#NV1<}Dv!ua@7euq^SO9+bfZ=Y@^OjqaBb#dVPR$6wq=9Z)*VcY
V2M;pu<dTq=IC<*yX?aBkYXH$g`Dp+E

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/logo.png b/public/assets/plugins/mxgraph/images/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..c07cd5c35df5a157932f0dbbd9818795eb81cf71
GIT binary patch
literal 2935
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/nocolor.png b/public/assets/plugins/mxgraph/images/nocolor.png
new file mode 100644
index 0000000000000000000000000000000000000000..aec4534d6ae7836a8cfb151aa5e11e9b1e2a662e
GIT binary patch
literal 948
zcmaJ=zi!$<9JUgvs!*e5OuO{ts8WVvpY4Ld!ik8_G)OT*fD}fIeSk&mbL^uwOr;&F
zZhe40L5GfAGIXxQ6Z8Q(bm=3|GXc_}^d$T4e)_)e_xC<D8?O#>Pjei{9n>#Si|vQm
z_i&&6Px6o3Y<oh@E^U(mP3#DBRhRTJsQdO1x3KL_Z@%LS$L#~J)1_VOQgete*cnDh
z{gAOau5y-!wll^Q^zqOObpH44Hy(Jd&R-QQXoUtIc^9(?w`YxxGaEZ)mp?lNl~iK_
zKBhKE{p%psQk`GvYV4euMINjmbgc7tL3OPrFi3<!L4bJ&79l7~f~34uRrLjsp#()J
zi;|p|R85gJ2*G;s%v<CRv=*wZeX*O)k0=c_QB0CVNECrYLs2T1%bA8O=NTd&PXlVF
z`5->tC?Fg=krz^r1Rzti`(#3Oo<(|>f*)>WgLqvgRxmNOLs1f7meK}jS^tOn{uUk6
z7QT=7pTcox8e*}9V={>x*0{lO<|@>T2-}oI9YU@*Rcww3CGm)az-Sl1l^3`qiC1XL
z(&|A>?ZClxr1Oj~c%G|O6;!TDCM*>twoK_<fhD9GvRs9RgcNndMZ}r-IG`J@d(V}2
za<f73L*^Ob$a{_5T10%XN?7xD#)8b9dTXw`GZs|a$rV{JV%FBb+PpEb*~yOEp=Fot
z*yDiBdc=nM=6&*$J%|U*%Z|BRE*FbM>DT9X%yLvm)lT}O-+QxHJLw&P`TXm%9Jlv~
WGY`4>^G~-Qvv*WC8|ce<@9iH<WFdP1

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/submenu.gif b/public/assets/plugins/mxgraph/images/submenu.gif
new file mode 100644
index 0000000000000000000000000000000000000000..ffe76176db93a40bbfcb96e60789886f68de0e49
GIT binary patch
literal 56
zcmZ?wbhEHb<YeGvXkcLY|Np<Sv9aP$7Dfgj&;b!383rc)mVU9yjc??-f-EDXZ!chA
Gum%8oRt?$!

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/tooltip.png b/public/assets/plugins/mxgraph/images/tooltip.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad20c04e875d82cf62ab6aec6dd7d7ff9fbd8628
GIT binary patch
literal 1006
zcmaJ=&ui0A9FGiP4yJhX2f{N0Piua(O}jo9x3)=LVJW2ztf0u!<ZX>x^0MUBX6?<B
zGDO&|i2s3j8B9dbiwG)$h@g1!xT8n$vij1s-450VdGCE6pU>y}GY`w9o6}R5rWl5q
zE-on*dY+}<<;e-UcOI2K(&HjgYov<TNXzgMleKUifuduqqY5&t?XCA{o?#|{t=C9R
zTZSffI3vPvq2p0D!^|&)o?&hv0_tepc4hY0t2ZpLEty@BG(q$7s9`U)eN=6ibhEu-
zW-NB$2AB^a6>tzSK<I3`0SslfuM6otdgfWshmZ}KJqoI(l|df+2uPd|Gli4@QX(fN
zlIe7M7Q_Wn;DtCZ#$#d{CgM;Kz+kb|n{Tbbic%Q(qL$1y2=O4#w^}W(mEf?y&Wo8$
zCenz<V-yh!wq0U`F*leQDkvy0ecK~8c0r_Q)Nzx@ERFOi1;-o7y1}4Kv|xN_c)Z97
zQA$Igru`r4I3sjGD(E=ge+mcswukr%3UJdmY2(&rB3B;F`^X^J*D>B4R<Yc`1P2Z5
zfqYd0E4FLlR?tUl8Z5d2F<cWB6`7@c&bBS63Q1)ylT@TcQWZs2%w^M(I+rd;sa&#<
z5~U$m!DiDzE*WyIW3D=u8x4ZvQO^qU?R&^7_}BscgrPk?mfTpq0oNKIOMWbur@`=1
zTTirk_(W$Xx{ijH8l$mCE}eCs4)x>3gKPAMI8$EM)n2dH?RM#2`#!TnA16qqRPFVc
zZy%<!)LbkoSv~x5`}525j4=6jv3t1l?&|K|m2*GE-}3B<_3Ute|LOG?x0(lczIL7z
g_U`U}`qMdmfq~6a54K9LzfdivsFsxHxz+oB0ct!y#Q*>R

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/touch-connector.png b/public/assets/plugins/mxgraph/images/touch-connector.png
new file mode 100644
index 0000000000000000000000000000000000000000..95b5ea2ee190645b5fd1676a10c75db03737e026
GIT binary patch
literal 2489
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/touch-handle.png b/public/assets/plugins/mxgraph/images/touch-handle.png
new file mode 100644
index 0000000000000000000000000000000000000000..13d60be7580859b1cb224d6b1fcbf774f81f9d31
GIT binary patch
literal 1617
zcmaJ>c~BE)9F0P$GGw5wqXj&ch(HmtIe{!JM-EJcAaV(UgG+Wp0`6|yT_hlkRn)3Q
zrKnIZJWCa?=`i(5Q7BYJv0@oOK#o>B(AZHdN<E5pgFyR7>CWta$GrD`*PGoM8?%V(
z=;p}baJU+^GLBtcZ0|G&_B(IrEy6CYj4GLlC-qD&LSdW;l+3^Y4US}DaTtQ;t!~6Z
zI2=2`n2^jQYoj3@iSrQ~hHu7AEStj#2{W4zT{gx58Ca%~fO$_WS9yRDg?Y=QT7lN2
zzzjxpK83~S$0X?Tvvo3*7ZwVHm?2gG#~1`K<Esc7GQ+%4U5MS=u0b9!3SqKg-n*od
zwXuMLq%c6r7x?Q00RkXE$QOzwfq{X3fJh(|fC3RH6!{ASA+ZP&2!OGN$3~-2Jrt*m
z9E-)CV4i_tOb`g>=H~Kq#e9;=1cfr0%%&j{`LhUrI*(uwvp+%4A6HOfw2m^G7$Zpl
zHbo?Z%wb?2o9Vj}aMOe=L65bGZ5U`qOrVf2u$43p)N219isKV#nu){y$@f2n>4ZEJ
z2F77DnM3K=!RhDQLYW{1g&_<{C6MH*@h-+1NQR^hqzO>OOMzuZ0wr_lQM6VIX$YD@
z2py(T!aSDGHyTk$C>1G#L}F!-N+u8rRe}h)B2q3^N`(rUBtjyH9Oo)YT@H>B%s3bQ
zhpU>DYcm3FVk0Xt%D4tYBPkLGMhk|FljkCzRBw!nPM(WmQZC3Q1KP&=uQ88bvEH$5
zCrry8CTx!ptk)^l)Fq*JYB-#!*EPzB1aoJ>u5@+$(%IM7_4imV9f@f%iucb@|MI=p
zh)1JZe6-Xx%XyDd9lJham<M~-+@oizKv=V{IrZ5xmsbjxqO@<Yl%YF%pN`72_~V{#
zOLx~3Z|^NW&ISDbo}t%;Ph?knUy3etaf9p|Ha?uM+H&v?UE)_NFDp@bZoctXusTHc
znKy2=TA{Z41;^p`q%>Zpvbxr(8@;hG-79qa^FMnpx;r_Hd>pvb^NZpEQ;^T48LPR@
z+@8**>zc(-o#WgcXVmAs(BXg+)86FO$5~CpmFAAN1B(}Y^x(k*x?q;u^waf?Wk0_z
zx}Y7dvOZdJv?*-==G|3A`=sGX+~mdjx>=<jN48ZCU3VXDie9oQQ!nq;Y_#{iYym4y
zb*=4dzMUC0h%dFPZm6wIoHNfsJ8+=5uA#uqzRq*a?4HN^=q<18)@z`3tK)U`cLUQ~
z2J>R36c;hqUU*9)N2a?_QBliNQ=yYYf-*H_?=i!mA}i<ChRXWoIwECLpL}y`S$Xi&
zZ%gbw8&~b&J$+$KH@u(C-M0120I*o^du6M=L=}_uGRb3+=25K^qMfn;4_}}7X>nQ7
zVB%K;=AhX-ey?h>Qyr_ezFlw<ts{0FreLvN(bDpzC3@=JMLQ3L8cvrM?{i$}mvQSS
z&u6n7&x`qwny*+~O7Aw`udO)}ygLft7~ZEle*W68L`Q#T-@#HOpen)v%yM{r0zu-<
zlFshEl^H=Ryl=vA`8jh<Pq~ka#}r@7s{-_4;mD8Ho7EL(-2G)AM)mccIQ(+v2Wc@2
z)3VMhx&q*~uCBGM{X;c<?J0VL*R`5(FDgHzVq}i@k^{b<&`@GMid?Q}Z9OFHy=Q4J
zENpj>X!kc<d=K5^^utAW*IeD)=VhOFxQJJ%=YH2T$MtLC&2N!z%<Tjsk?L@+@cTo$
k{oJXv<`>;<=~JCJvf!0r<&n2f+kWyIRgChieC39}0eO~m=Kufz

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/touch-submenu.png b/public/assets/plugins/mxgraph/images/touch-submenu.png
new file mode 100644
index 0000000000000000000000000000000000000000..8e6745998b4004080be6a0bd6c9f46da20f90177
GIT binary patch
literal 1046
zcmbVLJ#W)M7<Q?|N2LM_5@mpsD<KAA-`TNaTQyZ`J2a>XQ4*<<SnAr>#%k;{_LZa+
zqE#y)^>?sWVu67H6($hk7qBp}!rBeaNnAQqMZ&|~`<~zDdA|=D^@r0_x28Cbo31X}
zO?GGU^@&M#-gx~yyJo1<p)ImT`)-1{vQJhqsD|!3ZerKpdin{^aonUIv^%s@TQWQn
z3T|d248oY9Ic{!#5WC(6reGDX2a(DDdiS0Ofp7B5N)6Ux3wMLX?F6^B>uqm)!_$3!
z{sEX97>ppq)CGgE7p2C)<cGWlle1@$2SXFOVe+G(I<*F{NP>YPz=8)=2vj5>xmYTd
z?gI%TC_+g@QUR3=Su!95<Bw<F5`WET+Lf^{rkQ+~(%2Bie!nmDWq~B?BGPp|<B+5R
zvnZrn5p@TJD4oq2Y@B*Y5YvD}AY*h_$tE><7U?L3Fs{{3h@*5|C{{9Y;Km{npcsZ(
zUPJ4YHu2vu&a_V3TQL@!I3=5j$NI50n}b>H&Ucg<vS^IQNx+)o_H5#9hB%^C+vM3F
z!4G^xvQ?-mx}qYv;vj?;iX~)Q(6$z22RRDNInKf=np{L`QI{*Kgph;E<#NSRG+lOV
z)(~CIvDGN0Zsg(IZ@~PHvD&#<!%DDANzx{ymrp>WODIXZBnDPX0n0(;lYW{tXOydr
zli(TlD+vj~u)0QYhWCGGJ;M6`Q!$YRBW9y<YE<$kHh-CTGWbk6Ssfg)eM#72OkFuR
zW=nOkvD9{SO=BYe?aM26U7*c+>o@n~EquhZdsVyKzWl^H-r1el`*~+Y+u8koJn{15
mrJGl8uV~!eYx~aEeSGwp>mAJ;zDZtuU>L6I)a}ECmAyZ|Mn7r*

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/transparent.gif b/public/assets/plugins/mxgraph/images/transparent.gif
new file mode 100644
index 0000000000000000000000000000000000000000..76040f2b09d80470ad0536404ead54c3dba51d8e
GIT binary patch
literal 90
zcmZ?wbhEHbG+;1bXkcLY|NlP&1B2pE7Dgb&paUX6G7L<HE&VG`zvW*%XUnbb&G+{F
r=5KrCG3{CBvR9|Jz2iRq$>;jF-siv0egDVL!_|Id(Z?5>3=Gx)k9{Vl

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/web/drawio-cloud-edit.png b/public/assets/plugins/mxgraph/images/web/drawio-cloud-edit.png
new file mode 100644
index 0000000000000000000000000000000000000000..72a270ff8354d20b81efce072fc789976a5a2f92
GIT binary patch
literal 57767
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
UH+$PXivR!s07*qoM6N<$g6&RlxBvhE

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/web/drawio-drive.png b/public/assets/plugins/mxgraph/images/web/drawio-drive.png
new file mode 100644
index 0000000000000000000000000000000000000000..143d83dbb9e3fe794648f56aa4cc82c3a4abb175
GIT binary patch
literal 26388
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
CgU7`H

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/web/drawio-free-edit.png b/public/assets/plugins/mxgraph/images/web/drawio-free-edit.png
new file mode 100644
index 0000000000000000000000000000000000000000..e01c6803339f4047d652e909a3fddd1251bba99a
GIT binary patch
literal 25466
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
M07*qoM6N<$f}Kq&wg3PC

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/web/drawio-github.png b/public/assets/plugins/mxgraph/images/web/drawio-github.png
new file mode 100644
index 0000000000000000000000000000000000000000..c2f6e80b21e71da4e72fcadb4084b6599fd84173
GIT binary patch
literal 23387
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
SDupKi0000<MNUMnLSTZt=Rv>#

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/web/drawio-menu.png b/public/assets/plugins/mxgraph/images/web/drawio-menu.png
new file mode 100644
index 0000000000000000000000000000000000000000..670b852fd71bf7ac06da256e0dbca604e0af99ce
GIT binary patch
literal 22691
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
HmPq|S8ao@e

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/web/drawio-puzzle-edit.png b/public/assets/plugins/mxgraph/images/web/drawio-puzzle-edit.png
new file mode 100644
index 0000000000000000000000000000000000000000..4cca84d268ec65a11b57d28fb4fe112f798ca3ce
GIT binary patch
literal 19961
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%0A>v@8FC)6Ucja
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
Hu0mjf`N#@y

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/web/drawio-source-edit.png b/public/assets/plugins/mxgraph/images/web/drawio-source-edit.png
new file mode 100644
index 0000000000000000000000000000000000000000..4dc00a7c47f0f19a29eb399ca5e09e5bb2488432
GIT binary patch
literal 50031
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%0DAkG{^QA*4^r`WxJ^$YEhF0U(y&215_SwiD
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
IY!UIl0J7;=IsgCw

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/web/drawioscreen.png b/public/assets/plugins/mxgraph/images/web/drawioscreen.png
new file mode 100644
index 0000000000000000000000000000000000000000..36d583c454ef2e4ec47887f7861a1fbca21135dd
GIT binary patch
literal 196129
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
WC8fJc=h`^fpQb8UrAEmn?Ee9a3_HO9

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/web/glyphicons_362_google+_alt.png b/public/assets/plugins/mxgraph/images/web/glyphicons_362_google+_alt.png
new file mode 100644
index 0000000000000000000000000000000000000000..04356d633f00dc3dc980a23b8ce28a097b4a7c7f
GIT binary patch
literal 1165
zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM3?#3wJbMaANtU=qlmzFem6RtIr7}3C<R_&n
zc;+Uirv{}arc@T5OtoQPU{=Tsi71Ki^|4CM&(%u=snM&*Edc6fV6d^TC`e4sPAySL
zN=?tqvsHS(d%u!GW{Ry+xT&v!Z-H}aMy5wqQEG6NUr2IQcCuxPlD(aRO@$TEfZWuQ
zM1_jnoV;SI3R@+xxmG|nNLXJ<0j#7X+g1tUs0iNx1?T*tR0UH#1Knf;GXn)PLp?)d
z6LWKO9R(u;Lj!#SBYi_7T|;v#V<RgA0|h8h0@_xTl4cd;;s&(~$g@?-C@Cqh($_C9
zFV`zK*2^zS*Eh7Zv;>)9WTXpJp<7&;SCUwvn^&w1Gr=XbIJqdZpd>RtPXT0NVp4u-
ziLDaQr4TRV7Ql_oD~1LWFu?RH5)1SV^$b8>f+_U%#ji9s7p}UvBq$Z(UaSTehg24%
z>IbD3=a&{G10ya?8Dv#~m2**QVo82cNPd0}EEEGW@=NlIGx7@*oP$jj!ZY(y^2>|C
zs(pQ}JoAc667!N%JzZ>-fco_^GgGWgon0JV%*~99jEx-)4PA|#9373_9L=5GoK1{e
z%}t$PdR_99OLJ56N?>|Z5PFSq>IEf)+ybD@E~!PCWvMA{Mftf3U=Lem;&zJxPV=C8
zQ*gV*5T{;!pkwqw(TWt!Fd<;t0Wsl;7RZ4o`_w#OS}y`7>UYr}x`7$OIKU^wwX3V^
z$B!QuE?n5SapQ{@FD6ZzbmPX24<9}(T)1%7tXU^do?N+d<-vmockbNz;K75Yrl$Y@
z|6lPry9uaWuq4PY7|2Bd4618qCIKavd%8G=RNR_#$zABM0uO6|XNmZa@AkPZ+<iIe
z!e$0lD|nbgv-G>Q_8tqZI}-YjNj)??=9JtaM%AA}EFTt1a`em-ZOm|d@LP@{!ehnl
zgZT}`rc4#hRp&3vUMDYf<j^8btLHpw+`j6m6SHqI>iS2?Km6+XBjXE0dwam*%2j)>
z&3M%?RWSBkHd7k&;x>iI8SAvg+%8+sk*wVF`=8`FxtTj_>gV?}Ff#;Pmpk#i@Xkk|
PlNmf+{an^LB{Ts5(`}wn

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/web/glyphicons_381_github.png b/public/assets/plugins/mxgraph/images/web/glyphicons_381_github.png
new file mode 100644
index 0000000000000000000000000000000000000000..3dd5e6920694d435706c26bf224af9967150c4b3
GIT binary patch
literal 1085
zcmaJ=T}TvB6dp4pOdk>gt-#A@P|(iLuIsjwlde0vx!{WIF6g7<%+(#%nLEu~-O;C5
zd`XaCqu0nFsE9%cArivs#UPP-NUU&QLLs8R7op7VsJr&ic46k;bNIgRoO92)S9*Ic
z)>a>{rYNd5)+Hs#UhjT~E6M-u-B&Nk)_^1ZIEjXER<<A&Qqdp;F<l;p2`H=Mmlk0g
zMO6YV)sOq*-GYL2Ms_ibqnm_HQElyxDJvO>!5|#g43Ylw<S7j_Riyj;aV~C#VOr~&
zuwZhcC#6hel%PttUjS{6Km>G%W#H%|hAlWEy`w9Tv+HJQumiyvk={+JKi&(%$b!Jn
za2|zg<v=UX@V=HnAaE9VIi6!VFUxy9d_eGd1&#xIizd-5bx24^(Y;v266rL?rogh<
zY?jIT7-S8zd@vYvHN0LAL3r$O1Iv!bu$zhs60{XdGqHvY;3~?4XcUVy$#k~_-7Lu(
z_TDv-3u7JGWO;^jODY26@&7}0y@a-L0`BMgPhmSXZbCKzZ8T~rq;W${ZYWa-TTsTx
zN+C2-yv5!$!pKe|6NHm~(5D$H%Gx{VcwC4XHkJ(q#w3v@d`8n$!QT>;xR77+`g|dt
zk9f~T{o#<*%K4;dI2z<5MXrRDQ5_n%$W`~bk+NKO5OkA7mY}7LK{aY29qbe=XytS1
zEUUN2Rm<lRF3V*}GOXLyzuH`Mk=b#NrJ*H8Y3!jvX5At~otj>4ArGRtw>uS?nwrYz
z^UKT2g+gI-b8}^7Wnp1qc6N4SV`FA!CYQ@?Z*MoR-(Ds78l31!60^9dy0xVx;?KmS
zP|8`o|N2AqWl&R9*t&CleQPby^#0`ORLj?AKhAVFz<bwjb-$Tkq|x`IlcL-}ZM-;e
zu>MnpIr+SURx77(9_siub|k-WgPFhj=wqNc=k!(7{X9Rnntb=`_veQL!5X2lQLL(`
XQ2VjD`4f*%k+4)O(jz_S9LW6vR}gc_

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/web/glyphicons_390_facebook.png b/public/assets/plugins/mxgraph/images/web/glyphicons_390_facebook.png
new file mode 100644
index 0000000000000000000000000000000000000000..408846e341359145e4f86e0f382b8c008e5acd20
GIT binary patch
literal 1024
zcmaJ=PiWIn7>`WE4W}>!ogh3jJSaB*+OBI{Hq)lt0!t}vVLh59uWQ(n7n3)e4TMn-
z>O3lX_25A-Lh<Nf?&x%&C;#AK1Hp?ZqTYn~(zTrjYan^=``+*O`@Z*mUv3rh(}M%2
z1}KUeRA-bTSx-jq;Xd+x`*?ecEW<cg!6j71b=`xMY@&GxR9jzwMW~xAS6;wzis}Pa
zxq>U&tY{#c(IX5K*e+pH)c9oJ>c%3(U>+`5jzoWZwm}2Sl<2vn#%XRA)~uOT50+N*
zWn*>GNSpNJ1Q-uQB49(TgTP*Ld@+#dmaa(lk(;GK3xXFVdM~MpRsdP#L6Bs)n8A&5
zV3cS0cp{ZbT>t{db1WyYyb$A4Vq6e84zwSdMDxt5SX8Fkv4|znHH=-6W$X1iQ;##q
zTVVNgIvr^ULX03{{)&V3Am;cZ9R&sYhG)6hLJo)&^?9_6C7NWqcLm$+$~u0#Or&6J
zpt~&3aM6`IKu!BU)V8~59~a?%zW)^V%PTHqi_k~Qo<SN{9f?A@V%CE?MqU}ArA`$K
zHH490LoUdcl3>nqOjP$<XiXDU$H%&3Kvj`w!e=bY6q92aj!P?XAs&}`J}1ayGOx&)
zL_(0245y?zTm>1+Hgs@@YwmLsJ-N{!*e;2zK+n1g%_$Grpmkx<>YWSUQ?Jc6d*>qb
z<gz3gHfrl%ZSJ_p>_pq{&=R9N_Rt}-?vbIkzQE`Y8!F6}bL;EtJ3Bj@o14vMv(adT
zVfg*n@FY1sgp2tSF~g90y76#>c&1cEE(af8Z8wiT2gfsSZpXs#<+aoJoR(k&Z|2g+
zGdJJe|NZl<|N7I`3FhMUd%L#!*_i16`u@hRA9vP{fT0J|YX_)DmHzVwC&um)MM}-(
Jl_#0YjXzN>P2vCm

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/images/web/glyphicons_392_twitter.png b/public/assets/plugins/mxgraph/images/web/glyphicons_392_twitter.png
new file mode 100644
index 0000000000000000000000000000000000000000..a42cd3123dbc09417f23626d12a5dc790fe4c488
GIT binary patch
literal 1126
zcmaJ=Pe>F|9G)=BBrQ8tg1tscqITz>tM1@t>&{wBjoG@P7ol<HsgupTY3Av!+QGI{
z)}^fu2?chDBnqWENI^-5SSj!zC_&&Ugn|SM_fTwa)U|@P2Q%-_eBbx`e!usdtIbWv
zi;MOaQ501iIUz;KyxV;W3&?wJ?EN&E_TX?EZb6+muGo+YYN!K(h@o`BC{(omi)mO#
zQ3XJcwc$4Tl&B)ZtGF0%!mtRNqU!1smZJ7R3_4(!ZU*SDFJ93=*8+5_PiAE+1iSSU
z12$|KXo{%=J*r=$>yLuEgh&Joh!v19E|`v(2+*s#B3Zk~3=LKxxF<lbnQD`pK?vCp
z_`Iw~Wvf|G&3QSYs-~vq2;f<cWmul!cn?=23cSd&V13Xenyqz;QK@k~7TE>pZj3FF
zVdC+)H!gUQ-NkTzzu(p1c@IH&oPHB436JSi<P;?6sJ3ol9htyYR60;E4$#EuS_+1>
zA!|D8Wg-P*5{kueUe--12bAUiLk(jC?cgZ<?f0L;PORU8OcXk(*H+2Jbym2cEHPw5
z1tU9#(1lzTo4XN4PB*eZsKp0bbyGueXB92WV#IW?VyZAA1!%(e>bfTSSRp8c*bpxW
zL5>UaL0@g7R4r8Twf?ZgvHl!aLTax8O`PLuzqwLguG<KPMIuYk*88B=Xd?rxCM@dt
zy#({>t#h^fUK;Xp8DfTUul0{>&K;57ahDrSOEw#A4^7hRHfid+*Osr4A3|t86$>vc
zEX>TzOifKqOiYZ7jASyI`T6<9#l^9)u~aIRPNzplM<*vImzI`>hli8NWHy^U{h-)S
z=%qN?)Izp@4eG$-J00ZXP(%vG5+9zWPL{j|g;Htu1HDpjJU??-Zttr;__DU7kh;C2
z^wM0}p|YP_cV4GvpYE^pT#iqc-*|Lu{Qk{HSI-Z9FB(5vGFZTr@2EU|=qa@_>-pp}
z$Cr~|-efl2-(2<X+pgBi*vItr7GZlfbMLl4_2yXi$J@R=eV?6eEY<#S-`l#*!DZrw
NiiDe_Ck^M4zW_m!iGu(D

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/js/Actions.js b/public/assets/plugins/mxgraph/js/Actions.js
new file mode 100644
index 0000000..9f0b6c2
--- /dev/null
+++ b/public/assets/plugins/mxgraph/js/Actions.js
@@ -0,0 +1,631 @@
+'use strict';
+/**
+ * $Id: Actions.js,v 1.7 2013-02-14 07:48:01 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Constructs the actions object for the given UI.
+ */
+function Actions(editorUi) {
+	this.editorUi = editorUi;
+	this.actions = new Object();
+	this.init();
+};
+
+/**
+ * Adds the default actions.
+ */
+Actions.prototype.init = function() {
+	var ui = this.editorUi;
+	var editor = ui.editor;
+	var graph = editor.graph;
+
+	// File actions
+	this.addAction('new', function() {
+		ui.showDialog(new NewDialog(ui).container, 300, 180, true, true);
+	});
+	this.addAction('open', function() {
+		ui.showDialog(new OpenDialog(ui).container, 300, 180, true, true);
+	});
+	this.addAction('save', function() {
+		ui.saveFile(false);
+	}, null, null, 'Ctrl+S');
+	this.addAction('saveAs', function() {
+		ui.saveFile(true);
+	}, null, null, 'Ctrl+Shift-S');
+	this.addAction('publish', function() {
+		ui.publishFile(false);
+	}, null, null, 'Ctrl+Shift+P');
+	this.addAction('variable', function() {
+		ui.showDialog(new VariableDialog(ui).container, 300, 180, true, true);
+	});
+	this.addAction('import', function() {
+		ui.showDialog(new ImportDialog(ui).container, 300, 200, true, true);
+	});
+	this.addAction('export', function() {
+		ui.showDialog(new ExportDialog(ui).container, 300, 200, true, true);
+	}, null, null, 'Ctrl+E');
+	this.put('editFile', new Action(mxResources.get('edit'), mxUtils.bind(this,
+		function() {
+			this.editorUi.showDialog(new EditFileDialog(ui).container, 620, 420,
+				true, true);
+		})));
+	this.addAction('print', function() {
+		mxUtils.printScreen(graph);
+	}, null, 'sprite-print', 'Ctrl+P');
+	this.addAction('preview', function() {
+		mxUtils.show(graph, null, 10, 10);
+	});
+
+	// Edit actions
+	this.addAction('undo', function() {
+		editor.undoManager.undo();
+	}, null, 'sprite-undo', 'Ctrl+Z');
+	this.addAction('redo', function() {
+		editor.undoManager.redo();
+	}, null, 'sprite-redo', 'Ctrl+Y');
+	this.addAction('cut', function() {
+		mxClipboard.cut(graph);
+	}, null, 'sprite-cut', 'Ctrl+X');
+	this.addAction('copy', function() {
+		mxClipboard.copy(graph);
+	}, null, 'sprite-copy', 'Ctrl+C');
+	this.addAction('paste', function() {
+		mxClipboard.paste(graph);
+	}, false, 'sprite-paste', 'Ctrl+V');
+	this.addAction('delete', function() {
+		graph.removeCells();
+	}, null, null, 'Delete');
+	this.addAction('duplicate', function() {
+		var s = graph.gridSize;
+		graph.setSelectionCells(graph.moveCells(graph.getSelectionCells(), s, s,
+			true));
+	}, null, null, 'Ctrl+D');
+	this.addAction('selectVertices', function() {
+		graph.selectVertices();
+	}, null, null, 'Ctrl+Shift+V');
+	this.addAction('selectEdges', function() {
+		graph.selectEdges();
+	}, null, null, 'Ctrl+Shift+E');
+	this.addAction('selectAll', function() {
+		graph.selectAll();
+	}, null, null, 'Ctrl+A');
+
+	// Navigation actions
+	this.addAction('home', function() {
+		graph.home();
+	}, null, null, 'Home');
+	this.addAction('exitGroup', function() {
+		graph.exitGroup();
+	}, null, null, 'Page Up');
+	this.addAction('enterGroup', function() {
+		graph.enterGroup();
+	}, null, null, 'Page Down');
+	this.addAction('expand', function() {
+		graph.foldCells(false);
+	}, null, null, 'Enter');
+	this.addAction('collapse', function() {
+		graph.foldCells(true);
+	}, null, null, 'Backspace');
+
+	// Arrange actions
+	this.addAction('toFront', function() {
+		graph.orderCells(false);
+	}, null, null, 'Ctrl+F');
+	this.addAction('toBack', function() {
+		graph.orderCells(true);
+	}, null, null, 'Ctrl+B');
+	this.addAction('group', function() {
+		graph.setSelectionCell(graph.groupCells(null, 0));
+	}, null, null, 'Ctrl+G');
+	this.addAction('ungroup', function() {
+		graph.setSelectionCells(graph.ungroupCells());
+	}, null, null, 'Ctrl+U');
+	this.addAction('removeFromGroup', function() {
+		graph.removeCellsFromParent();
+	});
+	this.addAction('editLink', function() {
+		var cell = graph.getSelectionCell();
+		var link = graph.getLinkForCell(cell);
+
+		if (link == null) {
+			link = '';
+		}
+
+		link = mxUtils.prompt(mxResources.get('enterValue'), link);
+
+		if (link != null) {
+			graph.setLinkForCell(cell, link);
+		}
+	});
+	this.addAction('openLink', function() {
+		var cell = graph.getSelectionCell();
+		var link = graph.getLinkForCell(cell);
+
+		if (link != null) {
+			window.open(link);
+		}
+	});
+	this.addAction('autosize', function() {
+		var cells = graph.getSelectionCells();
+
+		if (cells != null) {
+			graph.getModel().beginUpdate();
+			try {
+				for (var i = 0; i < cells.length; i++) {
+					var cell = cells[i];
+
+					if (graph.getModel().getChildCount(cell)) {
+						graph.updateGroupBounds([cell], 20);
+					} else {
+						graph.updateCellSize(cell);
+					}
+				}
+			} finally {
+				graph.getModel().endUpdate();
+			}
+		}
+	});
+	this.addAction('wordWrap', function() {
+		var state = graph.getView().getState(graph.getSelectionCell());
+		var value = 'wrap';
+
+		if (state != null && state.style[mxConstants.STYLE_WHITE_SPACE] == 'wrap') {
+			value = null;
+		}
+
+		graph.setCellStyles(mxConstants.STYLE_WHITE_SPACE, value);
+	});
+	this.addAction('rotation', function() {
+		var value = '0';
+		var state = graph.getView().getState(graph.getSelectionCell());
+
+		if (state != null) {
+			value = state.style[mxConstants.STYLE_ROTATION] || value;
+		}
+
+		value = mxUtils.prompt(mxResources.get('enterValue') + ' (' +
+			mxResources.get('rotation') + ' 0-360)', value);
+
+		if (value != null) {
+			graph.setCellStyles(mxConstants.STYLE_ROTATION, value);
+		}
+	});
+	this.addAction('tilt', function() {
+		var cells = graph.getSelectionCells();
+
+		if (cells != null) {
+			graph.getModel().beginUpdate();
+			try {
+				for (var i = 0; i < cells.length; i++) {
+					var cell = cells[i];
+
+					if (graph.getModel().isVertex(cell) && graph.getModel().getChildCount(
+							cell) == 0) {
+						var geo = graph.getCellGeometry(cell);
+
+						if (geo != null) {
+							// Rotates the size and position in the geometry
+							geo = geo.clone();
+							geo.x += geo.width / 2 - geo.height / 2;
+							geo.y += geo.height / 2 - geo.width / 2;
+							var tmp = geo.width;
+							geo.width = geo.height;
+							geo.height = tmp;
+							graph.getModel().setGeometry(cell, geo);
+
+							// Reads the current direction and advances by 90 degrees
+							var state = graph.view.getState(cell);
+
+							if (state != null) {
+								var dir = state.style[mxConstants.STYLE_DIRECTION] || 'east' /*default*/ ;
+
+								if (dir == 'east') {
+									dir = 'south';
+								} else if (dir == 'south') {
+									dir = 'west';
+								} else if (dir == 'west') {
+									dir = 'north';
+								} else if (dir == 'north') {
+									dir = 'east';
+								}
+
+								graph.setCellStyles(mxConstants.STYLE_DIRECTION, dir, [cell]);
+							}
+						}
+					}
+				}
+			} finally {
+				graph.getModel().endUpdate();
+			}
+		}
+	}, null, null, 'Ctrl+R');
+
+	// View actions
+	this.addAction('actualSize', function() {
+		graph.zoomTo(1);
+	});
+	this.addAction('zoomIn', function() {
+		graph.zoomIn();
+	}, null, null, 'Add');
+	this.addAction('zoomOut', function() {
+		graph.zoomOut();
+	}, null, null, 'Subtract');
+	this.addAction('fitWindow', function() {
+		graph.fit();
+	});
+
+	this.addAction('fitPage', mxUtils.bind(this, function() {
+		if (!graph.pageVisible) {
+			this.get('pageView').funct();
+		}
+
+		var fmt = graph.pageFormat;
+		var ps = graph.pageScale;
+		var cw = graph.container.clientWidth - 20;
+		var ch = graph.container.clientHeight - 20;
+
+		var scale = Math.floor(100 * Math.min(cw / fmt.width / ps, ch / fmt.height /
+			ps)) / 100;
+		graph.zoomTo(scale);
+
+		graph.container.scrollLeft = Math.round(graph.view.translate.x * scale -
+			Math.max(10, (graph.container.clientWidth - fmt.width * ps * scale) / 2)
+		);
+		graph.container.scrollTop = Math.round(graph.view.translate.y * scale -
+			Math.max(10, (graph.container.clientHeight - fmt.height * ps * scale) /
+				2));
+	}));
+	this.addAction('fitPageWidth', mxUtils.bind(this, function() {
+		if (!graph.pageVisible) {
+			this.get('pageView').funct();
+		}
+
+		var fmt = graph.pageFormat;
+		var ps = graph.pageScale;
+		var cw = graph.container.clientWidth - 20;
+
+		var scale = Math.floor(100 * cw / fmt.width / ps) / 100;
+		graph.zoomTo(scale);
+
+		graph.container.scrollLeft = Math.round(graph.view.translate.x * scale -
+			Math.max(10, (graph.container.clientWidth - fmt.width * ps * scale) / 2)
+		);
+		graph.container.scrollTop = Math.round(graph.view.translate.y * scale -
+			Math.max(10, (graph.container.clientHeight - fmt.height * ps * scale) /
+				2));
+	}));
+	this.put('customZoom', new Action(mxResources.get('custom'), function() {
+		var value = mxUtils.prompt(mxResources.get('enterValue') + ' (%)',
+			parseInt(graph.getView().getScale() * 100));
+
+		if (value != null && value.length > 0 && !isNaN(parseInt(value))) {
+			graph.zoomTo(parseInt(value) / 100);
+		}
+	}));
+
+	// Option actions
+	var action = null;
+	action = this.addAction('grid', function() {
+		graph.setGridEnabled(!graph.isGridEnabled());
+		editor.updateGraphComponents();
+	}, null, null, 'Ctrl+Shift+G');
+	action.setToggleAction(true);
+	action.setSelectedCallback(function() {
+		return graph.isGridEnabled();
+	});
+	action = this.addAction('guides', function() {
+		graph.graphHandler.guidesEnabled = !graph.graphHandler.guidesEnabled;
+	});
+	action.setToggleAction(true);
+	action.setSelectedCallback(function() {
+		return graph.graphHandler.guidesEnabled;
+	});
+	action = this.addAction('tooltips', function() {
+		graph.tooltipHandler.setEnabled(!graph.tooltipHandler.isEnabled());
+	});
+	action.setToggleAction(true);
+	action.setSelectedCallback(function() {
+		return graph.tooltipHandler.isEnabled();
+	});
+	action = this.addAction('navigation', function() {
+		graph.foldingEnabled = !graph.foldingEnabled;
+		graph.view.revalidate();
+	});
+	action.setToggleAction(true);
+	action.setSelectedCallback(function() {
+		return graph.foldingEnabled;
+	});
+	action = this.addAction('scrollbars', function() {
+		graph.scrollbars = !graph.scrollbars;
+		editor.updateGraphComponents();
+
+		if (!graph.scrollbars) {
+			var t = graph.view.translate;
+			graph.view.setTranslate(t.x - graph.container.scrollLeft / graph.view.scale,
+				t.y - graph.container.scrollTop / graph.view.scale);
+			graph.container.scrollLeft = 0;
+			graph.container.scrollTop = 0;
+			graph.sizeDidChange();
+		} else {
+			var dx = graph.view.translate.x;
+			var dy = graph.view.translate.y;
+
+			graph.view.translate.x = 0;
+			graph.view.translate.y = 0;
+			graph.sizeDidChange();
+			graph.container.scrollLeft -= Math.round(dx * graph.view.scale);
+			graph.container.scrollTop -= Math.round(dy * graph.view.scale);
+		}
+	}, !mxClient.IS_TOUCH);
+	action.setToggleAction(true);
+	action.setSelectedCallback(function() {
+		return graph.container.style.overflow == 'auto';
+	});
+	action = this.addAction('pageView', mxUtils.bind(this, function() {
+		graph.pageVisible = !graph.pageVisible;
+		graph.pageBreaksVisible = graph.pageVisible;
+		graph.preferPageSize = graph.pageBreaksVisible;
+		graph.view.validate();
+		graph.sizeDidChange();
+
+		editor.updateGraphComponents();
+		editor.outline.update();
+
+		if (mxUtils.hasScrollbars(graph.container)) {
+			if (graph.pageVisible) {
+				graph.container.scrollLeft -= 20;
+				graph.container.scrollTop -= 20;
+			} else {
+				graph.container.scrollLeft += 20;
+				graph.container.scrollTop += 20;
+			}
+		}
+	}));
+	action.setToggleAction(true);
+	action.setSelectedCallback(function() {
+		return graph.pageVisible;
+	});
+	action = this.addAction('connect', function() {
+		graph.setConnectable(!graph.connectionHandler.isEnabled());
+	}, null, null, 'Ctrl+Q');
+	action.setToggleAction(true);
+	action.setSelectedCallback(function() {
+		return graph.connectionHandler.isEnabled();
+	});
+	action = this.addAction('copyConnect', function() {
+		graph.connectionHandler.setCreateTarget(!graph.connectionHandler.isCreateTarget());
+	});
+	action.setToggleAction(true);
+	action.setSelectedCallback(function() {
+		return graph.connectionHandler.isCreateTarget();
+	});
+
+	// Help actions
+	this.addAction('help', function() {
+		var ext = '';
+
+		if (mxResources.isLanguageSupported(mxClient.language)) {
+			ext = '_' + mxClient.language;
+		}
+
+		window.open(RESOURCES_PATH + '/help' + ext + '.html');
+	});
+	this.put('about', new Action(mxResources.get('about') + ' Cally Square',
+		function() {
+			ui.showDialog(new AboutDialog(ui).container, 320, 280, true, true);
+		}, null, null, 'F1'));
+
+	// Font style actions
+	var toggleFontStyle = mxUtils.bind(this, function(key, style) {
+		this.addAction(key, function() {
+			graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, style);
+		});
+	});
+
+	toggleFontStyle('bold', mxConstants.FONT_BOLD);
+	toggleFontStyle('italic', mxConstants.FONT_ITALIC);
+	toggleFontStyle('underline', mxConstants.FONT_UNDERLINE);
+
+	// Format actions
+	this.addAction('shadow', function() {
+		graph.toggleCellStyles(mxConstants.STYLE_SHADOW);
+	});
+	this.addAction('dashed', function() {
+		graph.toggleCellStyles(mxConstants.STYLE_DASHED);
+	});
+	this.addAction('rounded', function() {
+		graph.toggleCellStyles(mxConstants.STYLE_ROUNDED);
+	});
+	this.addAction('curved', function() {
+		graph.toggleCellStyles(mxConstants.STYLE_CURVED);
+	});
+	this.addAction('style', function() {
+		var cells = graph.getSelectionCells();
+
+		if (cells != null && cells.length > 0) {
+			var model = graph.getModel();
+			var style = mxUtils.prompt(mxResources.get('enterValue') + ' (' +
+				mxResources.get('style') + ')',
+				model.getStyle(cells[0]) || '');
+
+			if (style != null) {
+				graph.setCellStyle(style, cells);
+			}
+		}
+	});
+	this.addAction('setAsDefaultEdge', function() {
+		graph.setDefaultEdge(graph.getSelectionCell());
+	});
+	this.addAction('addWaypoint', function() {
+		var cell = graph.getSelectionCell();
+
+		if (cell != null && graph.getModel().isEdge(cell)) {
+			var handler = editor.graph.selectionCellsHandler.getHandler(cell);
+
+			if (handler instanceof mxEdgeHandler) {
+				var t = graph.view.translate;
+				var s = graph.view.scale;
+				var dx = t.x;
+				var dy = t.y;
+
+				var parent = graph.getModel().getParent(cell);
+				var pgeo = graph.getCellGeometry(parent);
+
+				if (graph.getModel().isVertex(parent) && pgeo != null) {
+					dx += pgeo.x;
+					dy += pgeo.y;
+				}
+
+				handler.addPointAt(handler.state, graph.panningHandler.triggerX / s - dx,
+					graph.panningHandler.triggerY / s - dy);
+			}
+		}
+	});
+	this.addAction('removeWaypoint', function() {
+		// TODO: Action should run with "this" set to action
+		var rmWaypointAction = ui.actions.get('removeWaypoint');
+
+		if (rmWaypointAction.handler != null) {
+			// NOTE: Popupevent handled and action updated in Menus.createPopupMenu
+			rmWaypointAction.handler.removePoint(rmWaypointAction.handler.state,
+				rmWaypointAction.index);
+		}
+	});
+	this.addAction('image', function() {
+		function updateImage(value, w, h) {
+			var select = null;
+			var cells = graph.getSelectionCells();
+
+			graph.getModel().beginUpdate();
+			try {
+				// Inserts new cell if no cell is selected
+				if (cells.length == 0) {
+					var gs = graph.getGridSize();
+					cells = [graph.insertVertex(graph.getDefaultParent(), null, '', gs, gs,
+						w, h)];
+					select = cells;
+				}
+
+				graph.setCellStyles(mxConstants.STYLE_IMAGE, value, cells);
+				graph.setCellStyles(mxConstants.STYLE_SHAPE, 'image', cells);
+
+				if (graph.getSelectionCount() == 1) {
+					if (w != null && h != null) {
+						var cell = cells[0];
+						var geo = graph.getModel().getGeometry(cell);
+
+						if (geo != null) {
+							geo = geo.clone();
+							geo.width = w;
+							geo.height = h;
+							graph.getModel().setGeometry(cell, geo);
+						}
+					}
+				}
+			} finally {
+				graph.getModel().endUpdate();
+			}
+
+			if (select != null) {
+				graph.setSelectionCells(select);
+				graph.scrollCellToVisible(select[0]);
+			}
+		};
+
+		var value = '';
+		var state = graph.getView().getState(graph.getSelectionCell());
+
+		if (state != null) {
+			value = state.style[mxConstants.STYLE_IMAGE] || value;
+		}
+
+		value = mxUtils.prompt(mxResources.get('enterValue') + ' (' + mxResources.get(
+			'url') + ')', value);
+
+		if (value != null) {
+			if (value.length > 0) {
+				var img = new Image();
+
+				img.onload = function() {
+					updateImage(value, img.width, img.height);
+				};
+				img.onerror = function() {
+					mxUtils.alert(mxResources.get('fileNotFound'));
+				};
+
+				img.src = value;
+			}
+		}
+	});
+};
+
+/**
+ * Registers the given action under the given name.
+ */
+Actions.prototype.addAction = function(key, funct, enabled, iconCls, shortcut) {
+	return this.put(key, new Action(mxResources.get(key), funct, enabled, iconCls,
+		shortcut));
+};
+
+/**
+ * Registers the given action under the given name.
+ */
+Actions.prototype.put = function(name, action) {
+	this.actions[name] = action;
+
+	return action;
+};
+
+/**
+ * Returns the action for the given name or null if no such action exists.
+ */
+Actions.prototype.get = function(name) {
+	return this.actions[name];
+};
+
+/**
+ * Constructs a new action for the given parameters.
+ */
+function Action(label, funct, enabled, iconCls, shortcut) {
+	mxEventSource.call(this);
+	this.label = label;
+	this.funct = funct;
+	this.enabled = (enabled != null) ? enabled : true;
+	this.iconCls = iconCls;
+	this.shortcut = shortcut;
+};
+
+// Action inherits from mxEventSource
+mxUtils.extend(Action, mxEventSource);
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Action.prototype.setEnabled = function(value) {
+	if (this.enabled != value) {
+		this.enabled = value;
+		this.fireEvent(new mxEventObject('stateChanged'));
+	}
+};
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Action.prototype.setToggleAction = function(value) {
+	this.toggleAction = value;
+};
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Action.prototype.setSelectedCallback = function(funct) {
+	this.selectedCallback = funct;
+};
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Action.prototype.isSelected = function() {
+	return this.selectedCallback();
+};
diff --git a/public/assets/plugins/mxgraph/js/Dialogs.js b/public/assets/plugins/mxgraph/js/Dialogs.js
new file mode 100644
index 0000000..5a04240
--- /dev/null
+++ b/public/assets/plugins/mxgraph/js/Dialogs.js
@@ -0,0 +1,949 @@
+'use strict';
+/**
+ * $Id: Dialogs.js,v 1.5 2013-01-29 17:23:31 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Constructs a new dialog.
+ */
+
+function createCheckbox(value) {
+	var input = document.createElement('input');
+	input.setAttribute('type', 'checkbox');
+	if (value) {
+		input.setAttribute('checked', true);
+	}
+	return input;
+}
+
+function createDropdownFromApi(path, value, option_name, option_value, editorUi, paginated) {
+	var req = new XMLHttpRequest();
+	req.open('GET', path, false); // `false` makes the request synchronous
+	req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token);
+	req.send(null);
+	var res = [];
+	if (req.status === 200) {
+		res = JSON.parse(req.response);
+	}
+	var input = document.createElement('select');
+	var option = document.createElement('option');
+	option.text = '-- None --';
+	option.value = '0';
+	input.appendChild(option);
+	var selectValues = paginated ? res.rows : res;
+	selectValues.forEach(function(elem) {
+		option = document.createElement('option');
+		option.text = elem[option_name];
+		option.value = elem[option_value];
+		option.selected = (elem[option_value] == value);
+		input.appendChild(option);
+	});
+	input.className = 'form-control select2';
+
+	return input;
+}
+
+function createGroupedDropdownFromApi(path, value, option_name, option_value, editorUi, paginated, associationField) {
+	var req = new XMLHttpRequest();
+	req.open('GET', path, false); // `false` makes the request synchronous
+	req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token);
+	req.send(null);
+	var res = [];
+	if (req.status === 200) {
+		res = JSON.parse(req.response);
+	}
+	var input = document.createElement('select');
+	var option = document.createElement('option');
+	option.text = '-- None --';
+	option.value = '0';
+	input.appendChild(option);
+	var selectValues = paginated ? res.rows : res;
+	var mainFilter = {};
+	var groupFilter = {};
+	mainFilter[associationField] = null;
+	var mainValues = _.filter(selectValues, mainFilter);
+	var groupValues = {};
+	mainValues.forEach(function(elem) {
+		option = document.createElement('option');
+		option.className = 'select-group-father';
+		option.text = elem[option_name].toUpperCase();
+		option.value = elem[option_value];
+		option.selected = (elem[option_value] == value);
+		input.appendChild(option);
+		groupFilter[associationField] = elem[option_value];
+		groupValues = _.filter(selectValues, groupFilter);
+		groupValues.forEach(function(elem) {
+			option = document.createElement('option');
+			option.className = 'select-group-son';
+			option.text = '-' + _.capitalize(elem[option_name]);
+			option.value = elem[option_value];
+			option.selected = (elem[option_value] == value);
+			input.appendChild(option);
+		});
+	})
+	input.className = 'form-control select2';
+
+	return input;
+}
+
+function createDropdownFromArray(array, value) {
+	var input = document.createElement('select');
+
+	for (var item in array) {
+		var option = document.createElement('option');
+		option.text = array[item];
+		option.value = item;
+		if (value > 0 || value != '')
+			option.selected = (value === item) ? true : false;
+
+		input.appendChild(option);
+	}
+
+	input.className = 'form-control select2';
+
+	return input;
+}
+
+function Dialog(editorUi, elt, w, h, modal, closable, onClose) {
+	var dx = 0;
+
+	if (mxClient.IS_IE && document.documentMode != 9) {
+		dx = 60;
+	}
+
+	w += dx;
+	h += dx;
+
+	var left = Math.max(0, Math.round((document.body.scrollWidth - w) / 2));
+	var top = Math.max(0, Math.round((Math.max(document.body.scrollHeight,
+		document.documentElement.scrollHeight) - h) / 3));
+
+	var div = editorUi.createDiv('geDialog');
+	div.className = 'modal fade in center';
+	div.style.display = 'block';
+	div.style.paddingRight = '12px';
+	// div.style.width = w + 'px';
+	// div.style.height = h + 'px';
+	// div.style.left = left + 'px';
+	// div.style.top = top + 'px';
+
+	var divModalDialog = editorUi.createDiv('geModalDialog');
+	divModalDialog.className = 'modal-dialog';
+
+	divModalDialog.appendChild(elt);
+	div.appendChild(divModalDialog);
+
+	if (this.bg == null) {
+		this.bg = editorUi.createDiv('background');
+		this.bg.className = 'modal-backdrop fade in';
+
+		if (mxClient.IS_QUIRKS) {
+			new mxDivResizer(this.bg);
+		}
+	}
+
+	if (modal) {
+		document.body.appendChild(this.bg);
+	}
+
+	document.body.appendChild(div);
+
+	this.onDialogClose = onClose;
+	this.container = div;
+};
+
+/**
+ * Removes the dialog from the DOM.
+ */
+Dialog.prototype.close = function() {
+	if (this.onDialogClose != null) {
+		this.onDialogClose();
+		this.onDialogClose = null;
+	}
+
+	this.container.parentNode.removeChild(this.container);
+	this.bg.parentNode.removeChild(this.bg);
+};
+
+/**
+ * Constructs a new open dialog.
+ */
+function ImportDialog(editorUi) {
+
+	var content = editorUi.createDiv('modal-content');
+	var header = editorUi.createDiv('modal-header');
+	var body = editorUi.createDiv('modal-body');
+	var footer = editorUi.createDiv('modal-footer');
+
+	//--- START HEADER
+	var title = editorUi.createHeader('h4');
+	mxUtils.write(title, mxResources.get('import') + ' XML');
+
+	var x = mxUtils.button('', function() {
+		editorUi.hideDialog();
+	});
+	x.className = 'close';
+
+	header.appendChild(x);
+	header.appendChild(title);
+	//--- END HEADER
+
+	//--- START BODY
+	var row = editorUi.createDiv('row');
+	var col1 = editorUi.createDiv('col-md-12');
+
+	var textarea = document.createElement('textarea');
+	textarea.style.width = '100%';
+	textarea.style.height = '374px';
+
+	var input = document.createElement('input');
+	input.type = 'file';
+	input.setAttribute('accept', 'text/xml');
+
+	input.addEventListener('change', function readSingleFile(evt) {
+		//Retrieve the first (and only!) File from the FileList object
+		var f = evt.target.files[0];
+		console.log(f);
+		if (f) {
+			if (f.type === 'text/xml') {
+				var r = new FileReader();
+				r.onload = function(e) {
+					var contents = e.target.result;
+					mxUtils.write(textarea, contents);
+				};
+				r.readAsText(f);
+			} else {
+				alert('Failed to load format file');
+			}
+		} else {
+			alert('Failed to load file');
+		}
+	}, false);
+
+	col1.appendChild(input);
+	col1.appendChild(textarea);
+
+	row.appendChild(col1);
+	body.appendChild(row);
+	//--- END BODY
+
+	//--- START FOOTER
+	var save = mxUtils.button(mxResources.get('import'), mxUtils.bind(this,
+		function(data) {
+			var doc = mxUtils.parseXml(textarea.value);
+			editorUi.editor.setGraphXml(doc.documentElement);
+			editorUi.hideDialog();
+		}));
+	save.className = 'btn blue';
+
+	var close = mxUtils.button(mxResources.get('cancel'), function() {
+		editorUi.hideDialog();
+	});
+	close.className = 'btn default';
+
+	footer.appendChild(save);
+	footer.appendChild(close);
+	//--- END FOOTER
+
+	//--- START CONTENT
+	content.appendChild(header);
+	content.appendChild(body);
+	content.appendChild(footer);
+	//--- END CONTENT
+
+	this.container = content;
+
+};
+
+/**
+ * Constructs a new about dialog.
+ */
+function AboutDialog(editorUi) {
+	var content = editorUi.createDiv('modal-content');
+	var header = editorUi.createDiv('modal-header');
+	var body = editorUi.createDiv('modal-body');
+	var footer = editorUi.createDiv('modal-footer');
+
+	//--- START HEADER
+	var title = editorUi.createHeader('h4');
+	mxUtils.write(title, mxResources.get('about') + ' Cally Square');
+
+	var x = mxUtils.button('', function() {
+		editorUi.hideDialog();
+	});
+	x.className = 'close';
+
+	header.appendChild(x);
+	header.appendChild(title);
+	//--- END HEADER
+
+	//--- START BODY
+	var img = document.createElement('img');
+	img.style.border = '0px';
+	img.setAttribute('width', '176');
+	img.setAttribute('width', '151');
+	img.setAttribute('src', IMAGE_PATH + '/logo.png');
+	body.appendChild(img);
+	mxUtils.br(body);
+	mxUtils.write(body, 'Powered by Xenialab ' + mxClient.VERSION);
+	mxUtils.br(body);
+	var link = document.createElement('a');
+	link.setAttribute('href', 'http://www.callysquare.com/');
+	link.setAttribute('target', '_blank');
+	mxUtils.write(link, 'www.callysquare.com');
+	body.appendChild(link);
+	mxUtils.br(body);
+	mxUtils.br(body);
+	//--- END BODY
+
+	var close = mxUtils.button(mxResources.get('close'), function() {
+		editorUi.hideDialog();
+	});
+	close.className = 'btn default';
+
+	footer.appendChild(close);
+	//--- END FOOTER
+
+	//--- START CONTENT
+	content.appendChild(header);
+	content.appendChild(body);
+	content.appendChild(footer);
+	//--- END CONTENT
+
+	this.container = content;
+};
+
+/**
+ * Constructs a new save dialog.
+ */
+function SaveDialog(editorUi) {
+
+	var content = editorUi.createDiv('modal-content');
+	var header = editorUi.createDiv('modal-header');
+	var body = editorUi.createDiv('modal-body');
+	var footer = editorUi.createDiv('modal-footer');
+
+	//--- START HEADER
+	var title = editorUi.createHeader('h4');
+	mxUtils.write(title, mxResources.get('saveAs'));
+
+	var x = mxUtils.button('', function() {
+		editorUi.hideDialog();
+	});
+	x.className = 'close';
+
+	header.appendChild(x);
+	header.appendChild(title);
+	//--- END HEADER
+
+	//--- START BODY
+	var name = 'name';
+	var id = '_' + name;
+	var value = editorUi.editor.getOrCreateFilename();
+
+	var row = editorUi.createDiv('row');
+	var col1 = editorUi.createDiv('col-md-4');
+	var col2 = editorUi.createDiv('col-md-8');
+
+	var label = document.createElement('label');
+	label.className = 'control-label pull-right';
+	mxUtils.write(label, mxResources.get(name));
+	col1.appendChild(label);
+
+	var select = document.createElement('input');
+	select.setAttribute('value', value + '_copy');
+	select.setAttribute('id', id)
+	select.className = 'form-control';
+	col2.appendChild(select);
+
+	row.appendChild(col1);
+	row.appendChild(col2);
+	body.appendChild(row);
+	//--- END BODY
+
+	//--- START FOOTER
+	var save = mxUtils.button(mxResources.get('save'), function() {
+		editorUi.saveAs(select.value);
+		editorUi.hideDialog();
+	});
+	save.className = 'btn blue';
+
+	var close = mxUtils.button(mxResources.get('cancel'), function() {
+		editorUi.hideDialog();
+	});
+	close.className = 'btn default';
+
+	footer.appendChild(save);
+	footer.appendChild(close);
+	//--- END FOOTER
+
+	//--- START CONTENT
+	content.appendChild(header);
+	content.appendChild(body);
+	content.appendChild(footer);
+	//--- END CONTENT
+
+	this.container = content;
+	//nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename());
+};
+
+/**
+ * Constructs a new save dialog.
+ */
+function NewDialog(editorUi) {
+
+	var content = editorUi.createDiv('modal-content');
+	var header = editorUi.createDiv('modal-header');
+	var body = editorUi.createDiv('modal-body');
+	var footer = editorUi.createDiv('modal-footer');
+
+	//--- START HEADER
+	var title = editorUi.createHeader('h4');
+	mxUtils.write(title, mxResources.get('new'));
+
+	var x = mxUtils.button('', function() {
+		editorUi.hideDialog();
+	});
+	x.className = 'close';
+
+	header.appendChild(x);
+	header.appendChild(title);
+	//--- END HEADER
+
+	//--- START BODY
+	var name = 'name';
+	var id = '_' + name;
+	var value = editorUi.editor.getOrCreateFilename();
+
+	var row = editorUi.createDiv('row');
+	var col1 = editorUi.createDiv('col-md-4');
+	var col2 = editorUi.createDiv('col-md-8');
+
+	var label = document.createElement('label');
+	label.className = 'control-label pull-right';
+	mxUtils.write(label, mxResources.get(name));
+	col1.appendChild(label);
+
+	var select = document.createElement('input');
+	select.setAttribute('value', value + '_new');
+	select.setAttribute('id', id)
+	select.className = 'form-control';
+	col2.appendChild(select);
+
+	row.appendChild(col1);
+	row.appendChild(col2);
+	body.appendChild(row);
+	//--- END BODY
+
+	//--- START FOOTER
+	var save = mxUtils.button(mxResources.get('new'), function() {
+		editorUi.new(select.value);
+		editorUi.hideDialog();
+	});
+	save.className = 'btn blue';
+
+	var close = mxUtils.button(mxResources.get('cancel'), function() {
+		editorUi.hideDialog();
+	});
+	close.className = 'btn default';
+
+	footer.appendChild(save);
+	footer.appendChild(close);
+	//--- END FOOTER
+
+	//--- START CONTENT
+	content.appendChild(header);
+	content.appendChild(body);
+	content.appendChild(footer);
+	//--- END CONTENT
+
+	this.container = content;
+	//nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename());
+};
+
+/**
+ * Constructs a new save dialog.
+ */
+function VariableDialog(editorUi) {
+
+	var content = editorUi.createDiv('modal-content');
+	var header = editorUi.createDiv('modal-header');
+	var body = editorUi.createDiv('modal-body');
+	var footer = editorUi.createDiv('modal-footer');
+
+	//--- START HEADER
+	var title = editorUi.createHeader('h4');
+	mxUtils.write(title, mxResources.get('variable'));
+
+	var x = mxUtils.button('', function() {
+		editorUi.hideDialog();
+	});
+	x.className = 'close';
+
+	header.appendChild(x);
+	header.appendChild(title);
+	//--- END HEADER
+
+	//--- START BODY
+	var name = 'name';
+	var id = '_' + name;
+	var value = editorUi.editor.getOrCreateFilename();
+
+	var row = editorUi.createDiv('row');
+	var col1 = editorUi.createDiv('col-md-4');
+	var col2 = editorUi.createDiv('col-md-8');
+
+	var label = document.createElement('label');
+	label.className = 'control-label pull-right';
+	mxUtils.write(label, mxResources.get(name));
+	col1.appendChild(label);
+
+	var select = document.createElement('input');
+	select.setAttribute('value', 'variable name');
+	select.setAttribute('id', id)
+	select.className = 'form-control';
+	col2.appendChild(select);
+
+	row.appendChild(col1);
+	row.appendChild(col2);
+	body.appendChild(row);
+	//--- END BODY
+
+	//--- START FOOTER
+	var save = mxUtils.button(mxResources.get('new'), function() {
+		editorUi.variable(select.value);
+		editorUi.hideDialog();
+	});
+	save.className = 'btn blue';
+
+	var close = mxUtils.button(mxResources.get('cancel'), function() {
+		editorUi.hideDialog();
+	});
+	close.className = 'btn default';
+
+	footer.appendChild(save);
+	footer.appendChild(close);
+	//--- END FOOTER
+
+	//--- START CONTENT
+	content.appendChild(header);
+	content.appendChild(body);
+	content.appendChild(footer);
+	//--- END CONTENT
+
+	this.container = content;
+	//nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename());
+};
+
+/**
+ * Constructs a new save dialog.
+ */
+function OpenDialog(editorUi) {
+
+	var content = editorUi.createDiv('modal-content');
+	var header = editorUi.createDiv('modal-header');
+	var body = editorUi.createDiv('modal-body');
+	var footer = editorUi.createDiv('modal-footer');
+
+	//--- START HEADER
+	var title = editorUi.createHeader('h4');
+	mxUtils.write(title, mxResources.get('open'));
+
+	var x = mxUtils.button('', function() {
+		editorUi.hideDialog();
+	});
+	x.className = 'close';
+
+	header.appendChild(x);
+	header.appendChild(title);
+	//--- END HEADER
+
+	//--- START BODY
+	var row = editorUi.createDiv('row');
+	var col1 = editorUi.createDiv('col-md-4');
+	var col2 = editorUi.createDiv('col-md-8');
+
+	var label = document.createElement('label');
+	label.className = 'control-label pull-right';
+	mxUtils.write(label, mxResources.get('name'));
+	col1.appendChild(label);
+
+	var req = new XMLHttpRequest();
+	req.open('GET', '/api/square/projects', false); // `false` makes the request synchronous
+	req.setRequestHeader('Authorization', 'Bearer ' + editorUi.editor.data.token);
+	req.send(null);
+	var res = [];
+	if (req.status === 200) {
+		res = JSON.parse(req.response);
+	}
+
+	var select = document.createElement('select');
+
+	for (var j = 0; j < res.length; j++) {
+		var option = document.createElement('option');
+		option.text = res[j].name;
+		option.value = res[j].id;
+		select.appendChild(option);
+	}
+	select.className = 'form-control';
+	col2.appendChild(select);
+
+	row.appendChild(col1);
+	row.appendChild(col2);
+	body.appendChild(row);
+	//--- END BODY
+
+	//--- START FOOTER
+	var save = mxUtils.button(mxResources.get('open'), function() {
+		console.log(select);
+		console.log(select.value);
+		window.open('square/project/' + select.value, '_blank');
+		editorUi.hideDialog();
+	});
+	save.className = 'btn blue';
+
+	var close = mxUtils.button(mxResources.get('cancel'), function() {
+		editorUi.hideDialog();
+	});
+	close.className = 'btn default';
+
+	footer.appendChild(save);
+	footer.appendChild(close);
+	//--- END FOOTER
+
+	//--- START CONTENT
+	content.appendChild(header);
+	content.appendChild(body);
+	content.appendChild(footer);
+	//--- END CONTENT
+
+	this.container = content;
+	//nameInput.setAttribute('value', editorUi.editor.getOrCreateFilename());
+};
+
+
+/**
+ * Constructs a new edit file dialog.
+ */
+function EditFileDialog(editorUi) {
+
+	var content = editorUi.createDiv('modal-content');
+	var header = editorUi.createDiv('modal-header');
+	var body = editorUi.createDiv('modal-body');
+	var footer = editorUi.createDiv('modal-footer');
+
+	//--- START HEADER
+	var title = editorUi.createHeader('h4');
+	mxUtils.write(title, mxResources.get('edit'));
+
+	var x = mxUtils.button('', function() {
+		editorUi.hideDialog();
+	});
+	x.className = 'close';
+
+	header.appendChild(x);
+	header.appendChild(title);
+	//--- END HEADER
+
+	//--- START BODY
+	var row = editorUi.createDiv('row');
+	var col1 = editorUi.createDiv('col-md-12');
+
+	var textarea = document.createElement('textarea');
+	textarea.style.width = '100%';
+	textarea.style.height = '374px';
+	textarea.value = mxUtils.getPrettyXml(editorUi.editor.getGraphXml());
+
+	// Enables dropping files
+	if (fileSupport) {
+		function handleDrop(evt) {
+			evt.stopPropagation();
+			evt.preventDefault();
+
+			if (evt.dataTransfer.files.length > 0) {
+				var file = evt.dataTransfer.files[0];
+
+				var reader = new FileReader();
+				reader.onload = function(e) {
+					textarea.value = e.target.result;
+				};
+				reader.readAsText(file);
+			}
+		};
+
+		function handleDragOver(evt) {
+			evt.stopPropagation();
+			evt.preventDefault();
+		};
+
+		// Setup the dnd listeners.
+		textarea.addEventListener('dragover', handleDragOver, false);
+		textarea.addEventListener('drop', handleDrop, false);
+	}
+	col1.appendChild(textarea);
+
+	row.appendChild(col1);
+	body.appendChild(row);
+	//--- END BODY
+
+	//--- START FOOTER
+	var save = mxUtils.button(mxResources.get('save'), function() {
+		var doc = mxUtils.parseXml(textarea.value);
+		editorUi.editor.setGraphXml(doc.documentElement);
+		editorUi.hideDialog();
+	});
+	save.className = 'btn blue';
+
+	var close = mxUtils.button(mxResources.get('cancel'), function() {
+		editorUi.hideDialog();
+	});
+	close.className = 'btn default';
+
+	footer.appendChild(save);
+	footer.appendChild(close);
+	//--- END FOOTER
+
+	//--- START CONTENT
+	content.appendChild(header);
+	content.appendChild(body);
+	content.appendChild(footer);
+	//--- END CONTENT
+
+	this.container = content;
+};
+
+/**
+ * Constructs a new export dialog.
+ */
+function ExportDialog(editorUi) {
+	var content = editorUi.createDiv('modal-content');
+	var header = editorUi.createDiv('modal-header');
+	var body = editorUi.createDiv('modal-body form');
+	var footer = editorUi.createDiv('modal-footer');
+
+	//--- START HEADER
+	var title = editorUi.createHeader('h4');
+	mxUtils.write(title, mxResources.get('export') + ' XML');
+
+	var x = mxUtils.button('', function() {
+		editorUi.hideDialog();
+	});
+	x.className = 'close';
+
+	header.appendChild(x);
+	header.appendChild(title);
+	//--- END HEADER
+
+	//--- START BODY
+	var form = editorUi.createDiv('form-horizontal form-row-seperated');
+	var group = editorUi.createDiv('form-group last');
+
+	var label = document.createElement('label');
+	label.className = 'col-sm-4 control-label';
+	mxUtils.write(label, mxResources.get('filename'));
+
+	var input = document.createElement('input');
+	input.setAttribute('value', editorUi.editor.getOrCreateFilename());
+	input.className = 'form-control';
+
+	var div = editorUi.createDiv('col-sm-8');
+	div.appendChild(input);
+
+	group.appendChild(label);
+	group.appendChild(div);
+	form.appendChild(group);
+
+	body.appendChild(form);
+	//--- END BODY
+
+	//--- START FOOTER
+	var save = mxUtils.button(mxResources.get('export'), mxUtils.bind(this,
+		function(data) {
+			editorUi.save(false);
+
+			var xml = encodeURIComponent(mxUtils.getXml(editorUi.editor.getGraphXml()));
+			new mxXmlRequest(SAVE_URL + editorUi.editor.data.id + '/download',
+				'filename=' + input.value, 'GET').simulate(document, "_blank");
+			editorUi.hideDialog();
+		}));
+	save.className = 'btn blue';
+
+	var close = mxUtils.button(mxResources.get('cancel'), function() {
+		editorUi.hideDialog();
+	});
+	close.className = 'btn default';
+
+	footer.appendChild(save);
+	footer.appendChild(close);
+	//--- END FOOTER
+
+	//--- START CONTENT
+	content.appendChild(header);
+	content.appendChild(body);
+	content.appendChild(footer);
+	//--- END CONTENT
+
+	this.container = content;
+};
+
+/**
+ * Giuseppe Careri
+ * Constructs a new general dialog.
+ */
+function GeneralDialog(editorUi, cell) {
+	var graph = editorUi.editor.graph;
+
+	var content = editorUi.createDiv('modal-content');
+	var header = editorUi.createDiv('modal-header');
+	var body = editorUi.createDiv('modal-body form modal-body-scroll');
+	var footer = editorUi.createDiv('modal-footer');
+
+	//--- START HEADER
+	var title = editorUi.createHeader('h4');
+	mxUtils.write(title, mxResources.get('edit') + ' ' + mxResources.get(cell.value
+		.nodeName));
+
+	var x = mxUtils.button('', function() {
+		editorUi.hideDialog();
+	});
+	x.className = 'close';
+
+	header.appendChild(x);
+	header.appendChild(title);
+	//--- END HEADER
+
+	//--- START BODY
+	var length = cell.value.attributes.length;
+	var form = editorUi.createDiv('form-horizontal form-row-seperated');
+
+	for (var i = 0; i < length; i++) {
+		var name = cell.value.attributes[i].name;
+		var id = '_' + name;
+		var value = cell.value.attributes[i].value;
+
+		var group = editorUi.createDiv((i == length - 1) ? 'form-group last' :
+			'form-group');
+
+		var label = document.createElement('label');
+		label.className = 'col-sm-4 control-label';
+		mxUtils.write(label, mxResources.get(name));
+		group.appendChild(label);
+
+		var input;
+
+		switch (name) {
+			case 'sip_id':
+				input = createDropdownFromApi('/api/agents', value, 'name', 'id', editorUi, true);
+				break;
+			case 'queue_id':
+				input = createDropdownFromApi('/api/voice/queues', value, 'name', 'name', editorUi, true);
+				break;
+			case 'trunk_id':
+				input = createDropdownFromApi('/api/trunks', value, 'name', 'id', editorUi, true);
+				break;
+			case 'variable_id':
+				input = createDropdownFromApi('/api/square/variables', value, 'name', 'id', editorUi, true); //mettere true dopo la pagination
+				break;
+			case 'model':
+				input = createDropdownFromArray(ISPEECHASRMODEL, value);
+				break;
+			case 'ispeech_asr_language':
+				input = createDropdownFromArray(ISPEECHASRLANG, value);
+				break;
+			case 'ispeech_tts_language':
+				input = createDropdownFromArray(ISPEECHLANG, value);
+				break;
+			case 'google_tts_language':
+				input = createDropdownFromArray(GOOGLETTSLANG, value);
+				break;
+			case 'interval_id':
+				input = createGroupedDropdownFromApi('/api/intervals/all', value, 'name', 'id', editorUi, false, 'IntervalId');
+				break;
+			case 'project_id':
+				input = createDropdownFromApi('/api/square/projects', value, 'name', 'id', editorUi, true);
+				break;
+			case 'odbc_id':
+				input = createDropdownFromApi('/api/square/odbc', value, 'name', 'id', editorUi, true);
+				break;
+			case 'file_id':
+				input = createDropdownFromApi('/api/uploads', value, 'display_name', 'id', editorUi, false);
+				break;
+			case 'timeout':
+			case 'digit':
+			case 'mindigit':
+			case 'maxdigit':
+			case 'response':
+			case 'retry':
+				input = document.createElement('input');
+				input.setAttribute('type', 'number');
+				input.setAttribute('min', 0);
+				input.setAttribute('max', 1000);
+				input.setAttribute('value', value);
+				input.className = 'form-control';
+				break;
+			case 'text':
+			case 'key':
+			case 'query':
+			case 'condition':
+			case 'command':
+				input = document.createElement('textarea');
+				input.innerHTML = value;
+				input.className = 'form-control';
+				break;
+			default:
+				input = document.createElement('input');
+				input.setAttribute('value', value);
+				input.className = 'form-control';
+				break;
+		}
+
+		input.setAttribute('id', id)
+
+		var div = editorUi.createDiv('col-sm-8');
+		div.appendChild(input);
+
+		// Help
+		if (mxResources.get('help_' + name)) {
+			var help = editorUi.createDiv('p');
+			help.className = 'help-block';
+			mxUtils.write(help, mxResources.get('help_' + name));
+			div.appendChild(help);
+		}
+
+		group.appendChild(div);
+		form.appendChild(group);
+	}
+	body.appendChild(form);
+	//--- END BODY
+
+	//--- START FOOTER
+	var save = mxUtils.button(mxResources.get('save'), mxUtils.bind(this,
+		function(data) {
+			for (var i = 0; i < cell.value.attributes.length; i++) {
+				var id = '_' + cell.value.attributes[i].name;
+				var name = cell.value.attributes[i].name;
+				console.log(name, document.getElementById(id).value);
+				cell.setAttribute(name, document.getElementById(id).value);
+			};
+			graph.refresh(cell);
+			editorUi.hideDialog();
+		}));
+	save.className = 'btn blue';
+
+	var close = mxUtils.button(mxResources.get('cancel'), function() {
+		editorUi.hideDialog();
+	});
+	close.className = 'btn default';
+
+	footer.appendChild(save);
+	footer.appendChild(close);
+	//--- END FOOTER
+
+	//--- START CONTENT
+	content.appendChild(header);
+	content.appendChild(body);
+	content.appendChild(footer);
+	//--- END CONTENT
+
+	this.container = content;
+};
diff --git a/public/assets/plugins/mxgraph/js/Editor.js b/public/assets/plugins/mxgraph/js/Editor.js
new file mode 100644
index 0000000..bd5ac4f
--- /dev/null
+++ b/public/assets/plugins/mxgraph/js/Editor.js
@@ -0,0 +1,1033 @@
+/**
+ * $Id: Editor.js,v 1.14 2013/03/06 17:57:10 boris Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+// Specifies if local storage should be used (eg. on the iPad which has no filesystem)
+var useLocalStorage = (mxClient.IS_TOUCH || urlParams['storage'] == 'local') && typeof(localStorage) != 'undefined';
+var fileSupport = window.File != null && window.FileReader != null && window.FileList != null;
+
+// Specifies if connector should be shown on selected cells
+var touchStyle = mxClient.IS_TOUCH || urlParams['touch'] == '1';
+
+// Counts open editor tabs (must be global for cross-window access)
+var counter = 0;
+
+// Cross-domain window access is not allowed in FF, so if we
+// were opened from another domain then this will fail. 
+try
+{
+	var op = window;
+	
+	while (op.opener != null && !isNaN(op.opener.counter))
+	{
+		op = op.opener;
+	}
+	
+	// Increments the counter in the first opener in the chain
+	if (op != null)
+	{
+		op.counter++;
+		counter = op.counter;
+	}
+}
+catch (e)
+{
+	// ignore
+}
+
+/**
+ * Editor constructor executed on page load.
+ */
+Editor = function()
+{
+	mxEventSource.call(this);
+	this.init();
+	this.initStencilRegistry();
+	this.graph = new Graph();
+	this.outline = new mxOutline(this.graph);
+	this.outline.updateOnPan = true;
+	this.undoManager = this.createUndoManager();
+	this.status = '';
+	
+	// Contains the name which was used for the last save. Default value is null.
+	this.filename = null;
+
+	this.getOrCreateFilename = function()
+	{
+		return this.filename || mxResources.get('drawing', [counter]) + '.xml';
+	};
+	
+	this.getFilename = function()
+	{
+		return this.filename;
+	};
+	
+	// Sets the status and fires a statusChanged event
+	this.setStatus = function(value)
+	{
+		this.status = value;
+		this.fireEvent(new mxEventObject('statusChanged'));
+	};
+	
+	// Returns the current status
+	this.getStatus = function()
+	{
+		return this.status;
+	};
+
+	// Contains the current modified state of the diagram. This is false for
+	// new diagrams and after the diagram was saved.
+	this.modified = false;
+
+	// Updates modified state if graph changes
+	this.graphChangeListener = function() 
+	{
+		this.modified = true;
+	};
+	this.graph.getModel().addListener(mxEvent.CHANGE, mxUtils.bind(this, function()
+	{
+		this.graphChangeListener.apply(this, arguments);
+	}));
+	
+	// Installs dialog if browser window is closed without saving
+	// This must be disabled during save and image export
+	window.onbeforeunload = mxUtils.bind(this, function()
+	{
+		if (this.modified)
+		{
+			return mxResources.get('allChangesLost');
+		}
+	});
+	
+	// Sets persistent graph state defaults
+	this.graph.resetViewOnRootChange = false;
+	this.graph.scrollbars = true;
+	this.graph.background = null;
+};
+
+// Editor inherits from mxEventSource
+mxUtils.extend(Editor, mxEventSource);
+
+/**
+ * Specifies the image URL to be used for the grid.
+ */
+Editor.prototype.gridImage = IMAGE_PATH + '/grid.gif';
+
+/**
+ * Specifies the image URL to be used for the transparent background.
+ */
+Editor.prototype.transparentImage = IMAGE_PATH + '/transparent.gif';
+
+/**
+ * Sets the XML node for the current diagram.
+ */
+Editor.prototype.setGraphXml = function(node)
+{
+	var dec = new mxCodec(node.ownerDocument);
+	
+	if (node.nodeName == 'mxGraphModel')
+	{
+		this.graph.view.scale = 1;
+		this.graph.gridEnabled = node.getAttribute('grid') != '0';
+		this.graph.graphHandler.guidesEnabled = node.getAttribute('guides') != '0';
+		this.graph.setTooltips(node.getAttribute('tooltips') != '0');
+		this.graph.setConnectable(node.getAttribute('connect') != '0');
+		this.graph.foldingEnabled = node.getAttribute('fold') != '0';
+		this.graph.scrollbars = node.getAttribute('scrollbars') != '0';
+		
+		if (!this.graph.scrollbars)
+		{
+			this.graph.container.scrollLeft = 0;
+			this.graph.container.scrollTop = 0;
+			this.graph.view.translate.x = Number(node.getAttribute('dx') || 0);
+			this.graph.view.translate.y = Number(node.getAttribute('dy') || 0);
+		}
+
+		this.graph.pageVisible = node.getAttribute('page') == '1';
+		this.graph.pageBreaksVisible = this.graph.pageVisible; 
+		this.graph.preferPageSize = this.graph.pageBreaksVisible;
+		
+		// Loads the persistent state settings
+		var ps = node.getAttribute('pageScale');
+		
+		if (ps != null)
+		{
+			this.graph.pageScale = ps;
+		}
+		else
+		{
+			this.graph.pageScale = 1.5;
+		}
+		
+		var pw = node.getAttribute('pageWidth');
+		var ph = node.getAttribute('pageHeight');
+		
+		if (pw != null && ph != null)
+		{
+			this.graph.pageFormat = new mxRectangle(0, 0, parseFloat(pw), parseFloat(ph));
+			this.outline.outline.pageFormat = this.graph.pageFormat;
+		}
+
+		// Loads the persistent state settings
+		var bg = node.getAttribute('background');
+		
+		if (bg != null && bg.length > 0)
+		{
+			this.graph.background = bg;
+		}
+		
+		dec.decode(node, this.graph.getModel());
+		this.updateGraphComponents();
+	}
+};
+
+/**
+ * Returns the XML node that represents the current diagram.
+ */
+Editor.prototype.getGraphXml = function()
+{
+	var enc = new mxCodec(mxUtils.createXmlDocument());
+	var node = enc.encode(this.graph.getModel());
+
+	if (this.graph.view.translate.x != 0 || this.graph.view.translate.y != 0)
+	{
+		node.setAttribute('dx', Math.round(this.graph.view.translate.x * 100) / 100);
+		node.setAttribute('dy', Math.round(this.graph.view.translate.y * 100) / 100);
+	}
+	
+	node.setAttribute('grid', (this.graph.isGridEnabled()) ? '1' : '0');
+	node.setAttribute('guides', (this.graph.graphHandler.guidesEnabled) ? '1' : '0');
+	node.setAttribute('guides', (this.graph.graphHandler.guidesEnabled) ? '1' : '0');
+	node.setAttribute('tooltips', (this.graph.tooltipHandler.isEnabled()) ? '1' : '0');
+	node.setAttribute('connect', (this.graph.connectionHandler.isEnabled()) ? '1' : '0');	
+	node.setAttribute('fold', (this.graph.foldingEnabled) ? '1' : '0');
+	node.setAttribute('page', (this.graph.pageVisible) ? '1' : '0');
+	node.setAttribute('pageScale', this.graph.pageScale);
+	node.setAttribute('pageWidth', this.graph.pageFormat.width);
+	node.setAttribute('pageHeight', this.graph.pageFormat.height);
+	
+	if (!this.graph.scrollbars)
+	{
+		node.setAttribute('scrollbars', '0');
+	}
+
+	if (this.graph.background != null)
+	{
+		node.setAttribute('background', this.graph.background);
+	}
+	
+	return node;
+};
+
+/**
+ * Keeps the graph container in sync with the persistent graph state
+ */
+Editor.prototype.updateGraphComponents = function()
+{
+	var graph = this.graph;
+	var outline = this.outline;
+	
+	if (graph.container != null && outline.outline.container != null)
+	{
+		if (graph.background != null)
+		{
+			if (graph.background == 'none')
+			{
+				graph.container.style.backgroundColor = 'transparent';
+			}
+			else
+			{
+				if (graph.view.backgroundPageShape != null)
+				{
+					graph.view.backgroundPageShape.fill = graph.background;
+					graph.view.backgroundPageShape.reconfigure();
+				}
+				
+				graph.container.style.backgroundColor = graph.background;
+			}
+		}
+		else
+		{
+			graph.container.style.backgroundColor = '';
+		}
+
+		if (graph.pageVisible)
+		{
+			graph.container.style.backgroundColor = '#ebebeb';
+			graph.container.style.borderStyle = 'solid';
+			graph.container.style.borderColor = '#e5e5e5';
+			graph.container.style.borderTopWidth = '1px';
+			graph.container.style.borderLeftWidth = '1px';
+			graph.container.style.borderRightWidth = '0px';
+			graph.container.style.borderBottomWidth = '0px';
+		}
+		else
+		{
+			graph.container.style.border = '';
+		}
+		
+		outline.outline.container.style.backgroundColor = graph.container.style.backgroundColor;
+
+		if (outline.outline.pageVisible != graph.pageVisible ||
+			outline.outline.pageScale != graph.pageScale)
+		{
+			outline.outline.pageScale = graph.pageScale;
+			outline.outline.pageVisible = graph.pageVisible;
+			outline.outline.view.validate();
+		}
+		
+		if (graph.scrollbars && graph.container.style.overflow == 'hidden' && !touchStyle)
+		{
+			graph.container.style.overflow = 'auto';
+		}
+		else if (!graph.scrollbars || touchStyle)
+		{
+			graph.container.style.overflow = 'hidden';
+		}
+		
+		// Transparent.gif is a workaround for focus repaint problems in IE
+		var noBackground = (mxClient.IS_IE && document.documentMode >= 9) ? 'url(' + this.transparentImage + ')' : 'none';
+		graph.container.style.backgroundImage = (!graph.pageVisible && graph.isGridEnabled()) ? 'url(' + this.gridImage + ')' : noBackground;
+
+		if (graph.view.backgroundPageShape != null)
+		{
+			graph.view.backgroundPageShape.node.style.backgroundImage = (this.graph.isGridEnabled()) ? 'url(' + this.gridImage + ')' : 'none';
+		}
+	}
+};
+
+/**
+ * Initializes the environment.
+ */
+Editor.prototype.init = function()
+{
+	// Adds stylesheet for IE6
+	if (mxClient.IS_IE6)
+	{
+		mxClient.link('stylesheet', CSS_PATH + '/grapheditor-ie6.css');
+	}
+
+	// Adds required resources (disables loading of fallback properties, this can only
+	// be used if we know that all keys are defined in the language specific file)
+	mxResources.loadDefaultBundle = false;
+	mxResources.add(RESOURCE_BASE);
+
+	// Makes the connection hotspot smaller
+	mxConstants.DEFAULT_HOTSPOT = 0.3;
+
+	var mxConnectionHandlerCreateMarker = mxConnectionHandler.prototype.createMarker;
+	mxConnectionHandler.prototype.createMarker = function()
+	{
+		var marker = mxConnectionHandlerCreateMarker.apply(this, arguments);
+		
+		// Overrides to ignore hotspot only for target terminal
+		marker.intersects = mxUtils.bind(this, function(state, evt)
+		{
+			if (this.isConnecting())
+			{
+				return true;
+			}
+			
+			return mxCellMarker.prototype.intersects.apply(marker, arguments);
+		});
+		
+		return marker;
+	};
+
+	// Makes the shadow brighter
+	mxConstants.SHADOWCOLOR = '#d0d0d0';
+	
+	// Changes some default colors
+	mxConstants.HANDLE_FILLCOLOR = '#99ccff';
+	mxConstants.HANDLE_STROKECOLOR = '#0088cf';
+	mxConstants.VERTEX_SELECTION_COLOR = '#00a8ff';
+	mxConstants.OUTLINE_COLOR = '#00a8ff';
+	mxConstants.OUTLINE_HANDLE_FILLCOLOR = '#99ccff';
+	mxConstants.OUTLINE_HANDLE_STROKECOLOR = '#00a8ff';
+	mxConstants.CONNECT_HANDLE_FILLCOLOR = '#cee7ff';
+	mxConstants.EDGE_SELECTION_COLOR = '#00a8ff';
+	mxConstants.DEFAULT_VALID_COLOR = '#00a8ff';
+	mxConstants.LABEL_HANDLE_FILLCOLOR = '#cee7ff';
+	mxConstants.GUIDE_COLOR = '#0088cf';
+
+	mxGraph.prototype.pageBreakColor = '#c0c0c0';
+	mxGraph.prototype.pageScale = 1;
+	
+	// Increases default rubberband opacity (default is 20)
+	mxRubberband.prototype.defaultOpacity = 30;
+	
+	// Changes border color of background page shape
+	mxGraphView.prototype.createBackgroundPageShape = function(bounds)
+	{
+		return new mxRectangleShape(bounds, this.graph.background || 'white', '#cacaca');
+	};
+
+	// Fits the number of background pages to the graph
+	mxGraphView.prototype.getBackgroundPageBounds = function()
+	{
+		var gb = this.getGraphBounds();
+		
+		// Computes unscaled, untranslated graph bounds
+		var x = (gb.width > 0) ? gb.x / this.scale - this.translate.x : 0;
+		var y = (gb.height > 0) ? gb.y / this.scale - this.translate.y : 0;
+		var w = gb.width / this.scale;
+		var h = gb.height / this.scale;
+		
+		var fmt = this.graph.pageFormat;
+		var ps = this.graph.pageScale;
+
+		var pw = fmt.width * ps;
+		var ph = fmt.height * ps;
+
+		var x0 = Math.floor(Math.min(0, x) / pw);
+		var y0 = Math.floor(Math.min(0, y) / ph);
+		var xe = Math.ceil(Math.max(1, x + w) / pw);
+		var ye = Math.ceil(Math.max(1, y + h) / ph);
+		
+		var rows = xe - x0;
+		var cols = ye - y0;
+
+		var bounds = new mxRectangle(this.scale * (this.translate.x + x0 * pw), this.scale *
+				(this.translate.y + y0 * ph), this.scale * rows * pw, this.scale * cols * ph);
+		
+		return bounds;
+	};
+	
+	// Add panning for background page in VML
+	var graphPanGraph = mxGraph.prototype.panGraph;
+	mxGraph.prototype.panGraph = function(dx, dy)
+	{
+		graphPanGraph.apply(this, arguments);
+		
+		if ((this.dialect != mxConstants.DIALECT_SVG && this.view.backgroundPageShape != null) &&
+			(!this.useScrollbarsForPanning || !mxUtils.hasScrollbars(this.container)))
+		{
+			this.view.backgroundPageShape.node.style.marginLeft = dx + 'px';
+			this.view.backgroundPageShape.node.style.marginTop = dy + 'px';
+		}
+	};
+	
+	var editor = this;
+	
+	// Uses HTML for background pages (to support grid background image)
+	mxGraphView.prototype.validateBackground = function()
+	{
+		var bg = this.graph.getBackgroundImage();
+		
+		if (bg != null)
+		{
+			if (this.backgroundImage == null || this.backgroundImage.image != bg.src)
+			{
+				if (this.backgroundImage != null)
+				{
+					this.backgroundImage.destroy();
+				}
+				
+				var bounds = new mxRectangle(0, 0, 1, 1);
+				
+				this.backgroundImage = new mxImageShape(bounds, bg.src);
+				this.backgroundImage.dialect = this.graph.dialect;
+				this.backgroundImage.init(this.backgroundPane);
+				this.backgroundImage.redraw();
+			}
+			
+			this.redrawBackgroundImage(this.backgroundImage, bg);
+		}
+		else if (this.backgroundImage != null)
+		{
+			this.backgroundImage.destroy();
+			this.backgroundImage = null;
+		}
+		
+		if (this.graph.pageVisible)
+		{
+			var bounds = this.getBackgroundPageBounds();
+			
+			if (this.backgroundPageShape == null)
+			{
+				this.backgroundPageShape = this.createBackgroundPageShape(bounds);
+				this.backgroundPageShape.scale = 1;
+				this.backgroundPageShape.isShadow = true;
+				this.backgroundPageShape.dialect = mxConstants.DIALECT_STRICTHTML;
+				this.backgroundPageShape.init(this.graph.container);
+				// Required for the browser to render the background page in correct order
+				this.graph.container.firstChild.style.position = 'absolute';
+				this.graph.container.insertBefore(this.backgroundPageShape.node, this.graph.container.firstChild);
+				this.backgroundPageShape.redraw();
+				
+				this.backgroundPageShape.node.className = 'geBackgroundPage';
+				this.backgroundPageShape.node.style.backgroundPosition = '-1px -1px';
+				
+				// Adds listener for double click handling on background
+				mxEvent.addListener(this.backgroundPageShape.node, 'dblclick',
+					mxUtils.bind(this, function(evt)
+					{
+						this.graph.dblClick(evt);
+					})
+				);
+				
+				// Adds basic listeners for graph event dispatching outside of the
+				// container and finishing the handling of a single gesture
+				mxEvent.addGestureListeners(this.backgroundPageShape.node,
+					mxUtils.bind(this, function(evt)
+					{
+						this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(evt));
+					}),
+					mxUtils.bind(this, function(evt)
+					{
+						// Hides the tooltip if mouse is outside container
+						if (this.graph.tooltipHandler != null &&
+								this.graph.tooltipHandler.isHideOnHover())
+						{
+							this.graph.tooltipHandler.hide();
+						}
+						
+						if (this.graph.isMouseDown &&
+							!mxEvent.isConsumed(evt))
+						{
+							this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE,
+								new mxMouseEvent(evt));
+						}
+					}),
+					mxUtils.bind(this, function(evt)
+					{
+						this.graph.fireMouseEvent(mxEvent.MOUSE_UP,
+								new mxMouseEvent(evt));
+					}));
+			}
+			else
+			{
+				this.backgroundPageShape.scale = 1;
+				this.backgroundPageShape.bounds = bounds;
+				this.backgroundPageShape.redraw();
+			}
+			
+			this.backgroundPageShape.node.style.backgroundImage = (this.graph.isGridEnabled()) ?
+					'url(' + editor.gridImage + ')' : 'none';
+		}
+		else if (this.backgroundPageShape != null)
+		{
+			this.backgroundPageShape.destroy();
+			this.backgroundPageShape = null;
+		}
+	};
+	
+	// Draws page breaks only within the page
+	mxGraph.prototype.updatePageBreaks = function(visible, width, height)
+	{
+		var scale = this.view.scale;
+		var tr = this.view.translate;
+		var fmt = this.pageFormat;
+		var ps = scale * this.pageScale;
+
+		var bounds2 = this.view.getBackgroundPageBounds();
+
+		width = bounds2.width;
+		height = bounds2.height;
+		var bounds = new mxRectangle(scale * tr.x, scale * tr.y,
+				fmt.width * ps, fmt.height * ps);
+
+		// Does not show page breaks if the scale is too small
+		visible = visible && Math.min(bounds.width, bounds.height) > this.minPageBreakDist;
+
+		var horizontalCount = (visible) ? Math.ceil(width / bounds.width) - 1 : 0;
+		var verticalCount = (visible) ? Math.ceil(height / bounds.height) - 1 : 0;
+		var right = bounds2.x + width;
+		var bottom = bounds2.y + height;
+
+		if (this.horizontalPageBreaks == null && horizontalCount > 0)
+		{
+			this.horizontalPageBreaks = [];
+		}
+
+		if (this.horizontalPageBreaks != null)
+		{
+			for (var i = 0; i <= horizontalCount; i++)
+			{
+				var pts = [new mxPoint(bounds2.x + (i + 1) * bounds.width, bounds2.y),
+				           new mxPoint(bounds2.x + (i + 1) * bounds.width, bottom)];
+				
+				if (this.horizontalPageBreaks[i] != null)
+				{
+					this.horizontalPageBreaks[i].scale = 1;
+					this.horizontalPageBreaks[i].points = pts;
+					this.horizontalPageBreaks[i].redraw();
+				}
+				else
+				{
+					var pageBreak = new mxPolyline(pts, this.pageBreakColor, this.scale);
+					pageBreak.dialect = this.dialect;
+					pageBreak.isDashed = this.pageBreakDashed;
+					pageBreak.addPipe = false;
+					pageBreak.scale = scale;
+					pageBreak.init(this.view.backgroundPane);
+					pageBreak.redraw();
+					
+					this.horizontalPageBreaks[i] = pageBreak;
+				}
+			}
+			
+			for (var i = horizontalCount; i < this.horizontalPageBreaks.length; i++)
+			{
+				this.horizontalPageBreaks[i].destroy();
+			}
+			
+			this.horizontalPageBreaks.splice(horizontalCount, this.horizontalPageBreaks.length - horizontalCount);
+		}
+		
+		if (this.verticalPageBreaks == null && verticalCount > 0)
+		{
+			this.verticalPageBreaks = [];
+		}
+		
+		if (this.verticalPageBreaks != null)
+		{
+			for (var i = 0; i <= verticalCount; i++)
+			{
+				var pts = [new mxPoint(bounds2.x, bounds2.y + (i + 1) * bounds.height),
+				           new mxPoint(right, bounds2.y + (i + 1) * bounds.height)];
+				
+				if (this.verticalPageBreaks[i] != null)
+				{
+					this.verticalPageBreaks[i].scale = 1; //scale;
+					this.verticalPageBreaks[i].points = pts;
+					this.verticalPageBreaks[i].redraw();
+				}
+				else
+				{
+					var pageBreak = new mxPolyline(pts, this.pageBreakColor, scale);
+					pageBreak.dialect = this.dialect;
+					pageBreak.isDashed = this.pageBreakDashed;
+					pageBreak.addPipe = false;
+					pageBreak.scale = scale;
+					pageBreak.init(this.view.backgroundPane);
+					pageBreak.redraw();
+		
+					this.verticalPageBreaks[i] = pageBreak;
+				}
+			}
+			
+			for (var i = verticalCount; i < this.verticalPageBreaks.length; i++)
+			{
+				this.verticalPageBreaks[i].destroy();
+			}
+			
+			this.verticalPageBreaks.splice(verticalCount, this.verticalPageBreaks.length - verticalCount);
+		}
+	};
+	
+	// Enables snapping to off-grid terminals for edge waypoints
+	mxEdgeHandler.prototype.snapToTerminals = true;
+
+	// Enables guides
+	mxGraphHandler.prototype.guidesEnabled = true;
+
+	// Disables removing relative children from parents
+	var mxGraphHandlerShouldRemoveCellsFromParent = mxGraphHandler.prototype.shouldRemoveCellsFromParent;
+	mxGraphHandler.prototype.shouldRemoveCellsFromParent = function(parent, cells, evt)
+	{
+		for (var i = 0; i < cells.length; i++)
+		{
+			if (this.graph.getModel().isVertex(cells[i]))
+			{
+				var geo = this.graph.getCellGeometry(cells[i]);
+				
+				if (geo != null && geo.relative)
+				{
+					return false;
+				}
+			}
+		}
+		
+		return mxGraphHandlerShouldRemoveCellsFromParent.apply(this, arguments);
+	};
+	
+	// Alt-move disables guides
+	mxGuide.prototype.isEnabledForEvent = function(evt)
+	{
+		return !mxEvent.isAltDown(evt);
+	};
+	
+	// Consumes click events for disabled menu items
+	mxPopupMenuAddItem = mxPopupMenu.prototype.addItem;
+	mxPopupMenu.prototype.addItem = function(title, image, funct, parent, iconCls, enabled)
+	{
+		var result = mxPopupMenuAddItem.apply(this, arguments);
+		
+		if (enabled != null && !enabled)
+		{
+			mxEvent.addListener(result, 'mousedown', function(evt)
+			{
+				mxEvent.consume(evt);
+			});
+		}
+		
+		return result;
+	};
+
+	// Selects descendants before children selection mode
+	var graphHandlerGetInitialCellForEvent = mxGraphHandler.prototype.getInitialCellForEvent;
+	mxGraphHandler.prototype.getInitialCellForEvent = function(me)
+	{
+		var model = this.graph.getModel();
+		var psel = model.getParent(this.graph.getSelectionCell());
+		var cell = graphHandlerGetInitialCellForEvent.apply(this, arguments);
+		var parent = model.getParent(cell);
+		
+		if (psel == null || (psel != cell && psel != parent))
+		{
+			while (!this.graph.isCellSelected(cell) && !this.graph.isCellSelected(parent) &&
+					model.isVertex(parent) && !this.graph.isValidRoot(parent))
+			{
+				cell = parent;
+				parent = this.graph.getModel().getParent(cell);
+			}
+		}
+		
+		return cell;
+	};
+	
+	// Selection is delayed to mouseup if child selected
+	var graphHandlerIsDelayedSelection = mxGraphHandler.prototype.isDelayedSelection;
+	mxGraphHandler.prototype.isDelayedSelection = function(cell)
+	{
+		var result = graphHandlerIsDelayedSelection.apply(this, arguments);
+		var model = this.graph.getModel();
+		var psel = model.getParent(this.graph.getSelectionCell());
+		var parent = model.getParent(cell);
+		
+		if (psel == null || (psel != cell && psel != parent))
+		{
+			if (!this.graph.isCellSelected(cell) && model.isVertex(parent) && !this.graph.isValidRoot(parent))
+			{
+				result = true;
+			}
+		}
+		
+		return result;
+	};
+	
+	// Delayed selection of parent group
+	mxGraphHandler.prototype.selectDelayed = function(me)
+	{
+		var cell = me.getCell();
+		
+		if (cell == null)
+		{
+			cell = this.cell;
+		}
+		
+		var model = this.graph.getModel();
+		var parent = model.getParent(cell);
+		
+		while (this.graph.isCellSelected(cell) && model.isVertex(parent) && !this.graph.isValidRoot(parent))
+		{
+			cell = parent;
+			parent = model.getParent(cell);
+		}
+		
+		this.graph.selectCellForEvent(cell, me.getEvent());
+	};
+
+	// Returns last selected ancestor
+	mxPanningHandler.prototype.getCellForPopupEvent = function(me)
+	{
+		var cell = me.getCell();
+		var model = this.graph.getModel();
+		var parent = model.getParent(cell);
+		
+		while (model.isVertex(parent) && !this.graph.isValidRoot(parent))
+		{
+			if (this.graph.isCellSelected(parent))
+			{
+				cell = parent;
+			}
+			
+			parent = model.getParent(parent);
+		}
+		
+		return cell;
+	};
+};
+
+/**
+ * Creates and returns a new undo manager.
+ */
+Editor.prototype.createUndoManager = function()
+{
+	var graph = this.graph;
+	var undoMgr = new mxUndoManager();
+
+    // Installs the command history
+	var listener = function(sender, evt)
+	{
+		undoMgr.undoableEditHappened(evt.getProperty('edit'));
+	};
+	
+	graph.getModel().addListener(mxEvent.UNDO, listener);
+	graph.getView().addListener(mxEvent.UNDO, listener);
+
+	// Keeps the selection in sync with the history
+	var undoHandler = function(sender, evt)
+	{
+		var cand = graph.getSelectionCellsForChanges(evt.getProperty('edit').changes);
+		var cells = [];
+		
+		for (var i = 0; i < cand.length; i++)
+		{
+			if (graph.view.getState(cand[i]) != null)
+			{
+				cells.push(cand[i]);
+			}
+		}
+		
+		graph.setSelectionCells(cells);
+	};
+	
+	undoMgr.addListener(mxEvent.UNDO, undoHandler);
+	undoMgr.addListener(mxEvent.REDO, undoHandler);
+
+	return undoMgr;
+};
+
+/**
+ * Adds basic stencil set (no namespace).
+ */
+Editor.prototype.initStencilRegistry = function()
+{
+	// Loads default stencils
+	mxStencilRegistry.loadStencilSet(STENCIL_PATH + '/general.xml');
+};
+
+/**
+ * Overrides stencil registry for dynamic loading of stencils.
+ */
+(function()
+{
+	/**
+	 * Maps from library names to an array of Javascript filenames,
+	 * which are synchronously loaded. Currently only stencil files
+	 * (.xml) and JS files (.js) are supported.
+	 * IMPORTANT: For embedded diagrams to work entries must also
+	 * be added in EmbedServlet.java.
+	 */
+	mxStencilRegistry.libraries = {};
+
+	/**
+	 * Stores all package names that have been dynamically loaded.
+	 * Each package is only loaded once.
+	 */
+	mxStencilRegistry.packages = [];
+	
+	// Extends the default stencil registry to add dynamic loading
+	mxStencilRegistry.getStencil = function(name)
+	{
+		var result = mxStencilRegistry.stencils[name];
+		
+		if (result == null)
+		{
+			var basename = mxStencilRegistry.getBasenameForStencil(name);
+			
+			// Loads stencil files and tries again
+			if (basename != null)
+			{
+				var libs = mxStencilRegistry.libraries[basename];
+
+				if (libs != null)
+				{
+					if (mxStencilRegistry.packages[basename] == null)
+					{
+						mxStencilRegistry.packages[basename] = 1;
+						
+						for (var i = 0; i < libs.length; i++)
+						{
+							var fname = libs[i];
+							
+							if (fname.toLowerCase().substring(fname.length - 4, fname.length) == '.xml')
+							{
+								mxStencilRegistry.loadStencilSet(fname, null);
+							}
+							else if (fname.toLowerCase().substring(fname.length - 3, fname.length) == '.js')
+							{
+								var req = mxUtils.load(fname);
+								
+								if (req != null)
+								{
+									eval.call(window, req.getText());
+								}
+							}
+							else
+							{
+								// FIXME: This does not yet work as the loading is triggered after
+								// the shape was used in the graph, at which point the keys have
+								// typically been translated in the calling method.
+								//mxResources.add(fname);
+							}
+						}
+					}
+				}
+				else
+				{
+					mxStencilRegistry.loadStencilSet(STENCIL_PATH + '/' + basename + '.xml', null);
+				}
+				
+				result = mxStencilRegistry.stencils[name];
+			}
+		}
+		
+		return result;
+	};
+	
+	// Returns the basename for the given stencil or null if no file must be
+	// loaded to render the given stencil.
+	mxStencilRegistry.getBasenameForStencil = function(name)
+	{
+		var parts = name.split('.');
+		var tmp = null;
+		
+		if (parts.length > 0 && parts[0] == 'mxgraph')
+		{
+			tmp = parts[1];
+			
+			for (var i = 2; i < parts.length - 1; i++)
+			{
+				tmp += '/' + parts[i];
+			}
+		}
+
+		return tmp;
+	};
+
+	// Loads the given stencil set
+	mxStencilRegistry.loadStencilSet = function(stencilFile, postStencilLoad, force)
+	{
+		force = (force != null) ? force : false;
+		
+		// Uses additional cache for detecting previous load attempts
+		var xmlDoc = mxStencilRegistry.packages[stencilFile];
+		
+		if (force || xmlDoc == null)
+		{
+			var install = false;
+			
+			if (xmlDoc == null)
+			{
+				var req = mxUtils.load(stencilFile);
+				xmlDoc = req.getXml();
+				mxStencilRegistry.packages[stencilFile] = xmlDoc;
+				install = true;
+			}
+		
+			mxStencilRegistry.parseStencilSet(xmlDoc, postStencilLoad, install);
+		}
+	};
+	
+	// Parses the given stencil set
+	mxStencilRegistry.parseStencilSet = function(xmlDocument, postStencilLoad, install)
+	{
+		install = (install != null) ? install : true;
+		var root = xmlDocument.documentElement;
+		var shape = root.firstChild;
+		var packageName = '';
+		var name = root.getAttribute('name');
+		
+		if (name != null)
+		{
+			packageName = name + '.';
+		}
+		
+		while (shape != null)
+		{
+			if (shape.nodeType == mxConstants.NODETYPE_ELEMENT)
+			{
+				name = shape.getAttribute('name');
+				
+				if (name != null)
+				{
+					packageName = packageName.toLowerCase();
+					var stencilName = name.replace(/ /g,"_");
+						
+					if (install)
+					{
+						mxStencilRegistry.addStencil(packageName + stencilName.toLowerCase(), new mxStencil(shape));
+					}
+	
+					if (postStencilLoad != null)
+					{
+						var w = shape.getAttribute('w');
+						var h = shape.getAttribute('h');
+						
+						w = (w == null) ? 80 : parseInt(w, 10);
+						h = (h == null) ? 80 : parseInt(h, 10);
+
+						postStencilLoad(packageName, stencilName, name, w, h);
+					}
+				}
+			}
+			
+			shape = shape.nextSibling;
+		}
+	};
+})();
+
+/**
+ * Class for asynchronously opening a new window and loading a file at the same
+ * time. This acts as a bridge between the open dialog and the new editor.
+ */
+OpenFile = function(done)
+{
+	this.producer = null;
+	this.consumer = null;
+	this.done = done;
+};
+
+/**
+ * Registers the editor from the new window.
+ */
+OpenFile.prototype.setConsumer = function(value)
+{
+	this.consumer = value;
+	this.execute();
+};
+
+/**
+ * Sets the data from the loaded file.
+ */
+OpenFile.prototype.setData = function(value, filename)
+{
+	this.data = value;
+	this.filename = filename;
+	this.execute();
+};
+
+/**
+ * Displays an error message.
+ */
+OpenFile.prototype.error = function(msg)
+{
+	this.cancel();
+	mxUtils.alert(msg);
+};
+
+/**
+ * Consumes the data.
+ */
+OpenFile.prototype.execute = function()
+{
+	if (this.consumer != null && this.data != null)
+	{
+		this.consumer(this.data, this.filename);
+		this.cancel();
+	}
+};
+
+/**
+ * Cancels the operation.
+ */
+OpenFile.prototype.cancel = function()
+{
+	if (this.done != null)
+	{
+		this.done();
+	}
+};
diff --git a/public/assets/plugins/mxgraph/js/EditorUi.js b/public/assets/plugins/mxgraph/js/EditorUi.js
new file mode 100644
index 0000000..04dc2cd
--- /dev/null
+++ b/public/assets/plugins/mxgraph/js/EditorUi.js
@@ -0,0 +1,1317 @@
+/**
+ * $Id: EditorUi.js,v 1.21 2013/03/14 20:46:36 david Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Constructs a new graph editor
+ */
+EditorUi = function(editor, container) {
+	this.editor = editor || new Editor();
+	this.container = container || document.getElementById('geEditor');
+	var graph = editor.graph;
+	var self = this;
+
+	// Disables scrollbars
+	this.container.style.overflow = 'hidden';
+
+	// Pre-fetches submenu image
+	new Image().src = mxPopupMenu.prototype.submenuImage;
+
+	// Pre-fetches connect image
+	if (mxConnectionHandler.prototype.connectImage != null) {
+		new Image().src = mxConnectionHandler.prototype.connectImage.src;
+	}
+
+	// Creates the user interface
+	this.actions = new Actions(this);
+	this.menus = new Menus(this);
+	this.createDivs();
+	this.refresh();
+	this.createUi();
+
+	// Disables HTML and text selection
+	var textEditing = mxUtils.bind(this, function(evt) {
+		if (evt == null) {
+			evt = window.event;
+		}
+
+		if (this.isSelectionAllowed(evt)) {
+			return true;
+		}
+
+		return graph.isEditing();
+	});
+
+	// Disables text selection while not editing and no dialog visible
+	if (this.container == document.body) {
+		this.menubarContainer.onselectstart = textEditing;
+		this.menubarContainer.onmousedown = textEditing;
+		this.toolbarContainer.onselectstart = textEditing;
+		this.toolbarContainer.onmousedown = textEditing;
+		this.diagramContainer.onselectstart = textEditing;
+		this.diagramContainer.onmousedown = textEditing;
+		this.sidebarContainer.onselectstart = textEditing;
+		this.sidebarContainer.onmousedown = textEditing;
+		this.footerContainer.onselectstart = textEditing;
+		this.footerContainer.onmousedown = textEditing;
+	}
+
+	// And uses built-in context menu while editing
+	if (mxClient.IS_IE && (typeof(document.documentMode) === 'undefined' ||
+			document.documentMode < 9)) {
+		mxEvent.addListener(this.diagramContainer, 'contextmenu', textEditing);
+		mxEvent.addListener(this.sidebarContainer, 'contextmenu', textEditing);
+	} else {
+		// Allows browser context menu outside of diagram and sidebar
+		this.diagramContainer.oncontextmenu = textEditing;
+		this.sidebarContainer.oncontextmenu = textEditing;
+	}
+
+	// Contains the main graph instance inside the given panel
+	graph.init(this.diagramContainer);
+	graph.refresh();
+
+	// Enables scrollbars and sets cursor style for the container
+	graph.container.setAttribute('tabindex', '0');
+	graph.container.style.overflow = (touchStyle) ? 'hidden' : 'auto';
+	graph.container.style.cursor = 'default';
+	graph.container.style.backgroundImage = 'url(' + editor.gridImage + ')';
+	graph.container.style.backgroundPosition = '-1px -1px';
+	graph.container.focus();
+
+	// Keeps graph container focused on mouse down
+	var graphFireMouseEvent = graph.fireMouseEvent;
+	graph.fireMouseEvent = function(evtName, me, sender) {
+		if (evtName == mxEvent.MOUSE_DOWN) {
+			this.container.focus();
+		}
+
+		graphFireMouseEvent.apply(this, arguments);
+	};
+
+	// Giuseppe Careri
+	// Defines invalid connections along with the error messages that they produce.
+	this.createMultiplicities(graph.multiplicities, ['start', 'finally', 'end'], [
+		[1, 1],
+		[1, 1],
+		[0, 0]
+	], [
+		[0, 0],
+		[0, 0],
+		[1, 'n']
+	]);
+	this.createMultiplicities(graph.multiplicities, ['answer', 'hangup', 'dial',
+		'ext_dial', 'queue', 'voicemail', 'callback'
+	], [
+		[1, 1],
+		[0, 0],
+		[0, 1],
+		[0, 1],
+		[0, 1],
+		[1, 1],
+		[0, 1]
+	], [
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n']
+	]);
+	this.createMultiplicities(graph.multiplicities, ['set', 'math'], [
+		[1, 1],
+		[1, 1]
+	], [
+		[1, 'n'],
+		[1, 'n']
+	]);
+	this.createMultiplicities(graph.multiplicities, ['background', 'playback',
+		'menu', 'saydigits', 'saynumber', 'sayphonetic', 'tts', 'ispeechtts', 'getdigits'
+	], [
+		[1, 'n'],
+		[1, 1],
+		[1, 'n'],
+		[1, 1],
+		[1, 1],
+		[1, 1],
+		[1, 1],
+		[1, 1],
+		[1, 'n']
+	], [
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n']
+	]);
+	this.createMultiplicities(graph.multiplicities, ['record'], [
+		[1, 1]
+	], [
+		[1, 'n']
+	]);
+	this.createMultiplicities(graph.multiplicities, ['database', 'ispeechasr'], [
+		[1, 1],
+		[1, 1]
+	], [
+		[1, 'n'],
+		[1, 'n']
+	]);
+	this.createMultiplicities(graph.multiplicities, ['gotoc', 'gotoif',
+		'gotoiftime', 'gotoifmultitime', 'vswitch'
+	], [
+		[0, 0],
+		[1, 2],
+		[1, 2],
+		[1, 2],
+		[1, 'n']
+	], [
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n']
+	]);
+	this.createMultiplicities(graph.multiplicities, ['queuelog', 'goal'], [
+		[1, 1],
+		[1, 1]
+	], [
+		[1, 'n'],
+		[1, 'n']
+	]);
+	this.createMultiplicities(graph.multiplicities, ['noop', 'system', 'agi',
+		'subproject', 'custom_app'
+	], [
+		[1, 1],
+		[1, 1],
+		[0, 1],
+		[0, 1],
+		[0, 1]
+	], [
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n'],
+		[1, 'n']
+	]);
+
+	// Giuseppe Careri
+	// Processes a doubleclick on an optional cell and fires a <dblclick> event.
+	// The event is fired initially.
+	// If the graph is enabled and the event has not been consumed, then <edit> is called with the given cell.
+	// The event is ignored if no cell was specified.
+	graph.dblClick = function(evt, cell) {
+		var edges = ['background', 'gotoif', 'gotoiftime', 'menu', 'getdigits', 'vswitch'];
+		var mxe = new mxEventObject(mxEvent.DOUBLE_CLICK, 'event', evt, 'cell',
+			cell);
+		this.fireEvent(mxe);
+
+		if (this.isEnabled() && !mxEvent.isConsumed(evt) && !mxe.isConsumed()) {
+			// Override dblClick Vertices and Edges
+			if (this.getModel().isEdge(cell)) {
+				if (edges.indexOf(cell.source.value.tagName) >= 0)
+					this.startEditingAtCell(cell);
+			} else if (this.getModel().isVertex(cell)) {
+				console.log(self);
+				console.log(cell);
+				self.showDialog(new GeneralDialog(self, cell).container, 320, 280, true,
+					true);
+			}
+			mxe.consume();
+		}
+	}
+
+	// Configures automatic expand on mouseover
+	graph.panningHandler.autoExpand = true;
+
+	// Installs context menu
+	graph.panningHandler.factoryMethod = mxUtils.bind(this, function(menu, cell,
+		evt) {
+		this.menus.createPopupMenu(menu, cell, evt);
+	});
+
+	// Initializes the outline
+	editor.outline.init(this.outlineContainer);
+
+	// Hides context menu
+	mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) {
+		graph.panningHandler.hideMenu();
+	}));
+
+	// Adds gesture handling (pinch to zoom)
+	if (mxClient.IS_TOUCH) {
+		mxEvent.addListener(graph.container, 'gesturechange',
+			mxUtils.bind(this, function(evt) {
+				graph.view.getDrawPane().setAttribute('transform', 'scale(' + evt.scale +
+					')');
+				graph.view.getOverlayPane().style.visibility = 'hidden';
+			})
+		);
+
+		mxEvent.addListener(graph.container, 'gestureend',
+			mxUtils.bind(this, function(evt) {
+				graph.view.getDrawPane().removeAttribute('transform');
+				graph.zoomToCenter = true;
+				graph.zoom(evt.scale);
+				graph.view.getOverlayPane().style.visibility = 'visible';
+			})
+		);
+	}
+
+	// Create handler for key events
+	var keyHandler = this.createKeyHandler(editor);
+
+	// Getter for key handler
+	this.getKeyHandler = function() {
+		return keyHandler;
+	};
+
+	// Updates the editor UI after the window has been resized
+	mxEvent.addListener(window, 'resize', mxUtils.bind(this, function() {
+		this.refresh();
+		graph.sizeDidChange();
+		this.editor.outline.update(false);
+		this.editor.outline.outline.sizeDidChange();
+	}));
+
+	// Updates action and menu states
+	this.init();
+	this.open();
+};
+
+/**
+ * Specifies the size of the split bar.
+ */
+EditorUi.prototype.splitSize = (mxClient.IS_TOUCH) ? 16 : 8;
+
+/**
+ * Specifies the height of the menubar. Default is 34.
+ */
+EditorUi.prototype.menubarHeight = 33;
+
+/**
+ * Specifies the height of the toolbar. Default is 36.
+ */
+EditorUi.prototype.toolbarHeight = 36;
+
+/**
+ * Specifies the height of the footer. Default is 28.
+ */
+EditorUi.prototype.footerHeight = 28;
+
+/**
+ * Specifies the position of the horizontal split bar. Default is 212.
+ */
+EditorUi.prototype.hsplitPosition = 204;
+
+/**
+ * Specifies the position of the vertical split bar. Default is 190.
+ */
+EditorUi.prototype.vsplitPosition = 190;
+
+/**
+ * Installs the listeners to update the action states.
+ */
+EditorUi.prototype.init = function() {
+	// Updates action states
+	this.addUndoListener();
+	this.addSelectionListener();
+
+	// Overrides clipboard to update paste action state
+	var paste = this.actions.get('paste');
+
+	var updatePaste = function() {
+		paste.setEnabled(!mxClipboard.isEmpty());
+	};
+
+	var mxClipboardCut = mxClipboard.cut;
+	mxClipboard.cut = function() {
+		mxClipboardCut.apply(this, arguments);
+		updatePaste();
+	};
+
+	var mxClipboardCopy = mxClipboard.copy;
+	mxClipboard.copy = function() {
+		mxClipboardCopy.apply(this, arguments);
+		updatePaste();
+	};
+};
+
+/**
+ * Hook for allowing selection and context menu for certain events.
+ */
+EditorUi.prototype.isSelectionAllowed = function(evt) {
+	return false;
+};
+
+/**
+ * Opens the current diagram via the window.opener if one exists.
+ */
+EditorUi.prototype.open = function() {
+	// Cross-domain window access is not allowed in FF, so if we
+	// were opened from another domain then this will fail.
+	try {
+		if (window.opener != null && window.opener.openFile != null) {
+			window.opener.openFile.setConsumer(mxUtils.bind(this, function(xml,
+				filename) {
+				try {
+					var doc = mxUtils.parseXml(xml);
+					this.editor.setGraphXml(doc.documentElement);
+					this.editor.modified = false;
+					this.editor.undoManager.clear();
+
+					if (filename != null) {
+						this.editor.filename = filename;
+					}
+				} catch (e) {
+					mxUtils.alert(mxResources.get('invalidOrMissingFile') + ': ' + e.message);
+				}
+			}));
+		}
+	} catch (e) {
+		// ignore
+	}
+};
+
+/**
+ * Giuseppe Careri
+ * Opens the current diagram via string.
+ */
+EditorUi.prototype.openString = function(xml, filename, data) {
+	try {
+		var doc = mxUtils.parseXml(xml);
+		this.editor.setGraphXml(doc.documentElement);
+		this.editor.modified = false;
+		this.editor.undoManager.clear();
+
+		if (filename != null) {
+			this.editor.filename = filename;
+		}
+
+		if (data != null) {
+			this.editor.data = data;
+		}
+	} catch (e) {
+		mxUtils.alert(mxResources.get('invalidOrMissingFile') + ': ' + e.message);
+	}
+};
+
+/**
+ * Saves As the current graph under the given project name.
+ */
+EditorUi.prototype.new = function(name) {
+	var editor = this.editor;
+
+	if (name != null) {
+		var xml = mxUtils.getPrettyXml(this.editor.getGraphXml());
+		try {
+			if (useLocalStorage) {
+				if (localStorage.getItem(name) != null &&
+					!mxUtils.confirm(mxResources.get('replace', [name]))) {
+					return;
+				}
+
+				localStorage.setItem(name, xml);
+				this.editor.setStatus(mxResources.get('saved') + ' ' + new Date());
+			} else {
+				console.log(xml.length);
+				console.log(MAX_REQUEST_SIZE);
+				if (xml.length < MAX_REQUEST_SIZE) {
+					xml = encodeURIComponent(xml);
+					name = encodeURIComponent(name);
+
+					var xhr = new XMLHttpRequest();
+					xhr.open("POST", SAVE_URL, true);
+					xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+					xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token);
+					xhr.onload = function(e) {
+						if (xhr.readyState === 4) {
+							if (xhr.status === 201) {
+								editor.setStatus('Project ' + JSON.parse(xhr.response).name +
+									' is opening in new window!');
+								setTimeout(function() {
+									window.open('square/project/' + JSON.parse(xhr.response).id,
+										'_blank');
+								}, 1500);
+							} else {
+								editor.setStatus('Error creating project: ' +
+									JSON.parse(xhr.response).errors[0].message);
+							}
+						}
+					};
+					xhr.onerror = function(e) {
+						mxUtils.alert(xhr.statusText);
+					};
+					xhr.send('description=project_new&name=' + name);
+				} else {
+					mxUtils.alert(mxResources.get('drawingTooLarge'));
+					mxUtils.popup(xml);
+
+					return;
+				}
+			}
+
+			this.editor.filename = name;
+			this.editor.modified = false;
+		} catch (e) {
+			this.editor.setStatus('Error creating project');
+		}
+	} else {
+		this.editor.setStatus('Error creating project');
+	}
+};
+
+
+/**
+ * Saves the current graph under the given project name.
+ */
+EditorUi.prototype.save = function(name) {
+	var editor = this.editor;
+
+	if (name != null) {
+		var xml = mxUtils.getPrettyXml(this.editor.getGraphXml());
+		try {
+			if (useLocalStorage) {
+				if (localStorage.getItem(name) != null &&
+					!mxUtils.confirm(mxResources.get('replace', [name]))) {
+					return;
+				}
+
+				localStorage.setItem(name, xml);
+				this.editor.setStatus(mxResources.get('saved') + ' ' + new Date());
+			} else {
+				console.log(xml.length);
+				console.log(MAX_REQUEST_SIZE);
+				if (xml.length < MAX_REQUEST_SIZE) {
+					xml = encodeURIComponent(xml);
+
+					var xhr = new XMLHttpRequest();
+					xhr.open("PUT", SAVE_URL + this.editor.data.id, true);
+					xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+					xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token);
+					xhr.onload = function(e) {
+						if (xhr.readyState === 4) {
+							if (xhr.status === 200) {
+								editor.setStatus('Updated at ' + JSON.parse(xhr.response).updatedAt +
+									' (' + xhr.status + ' ' + xhr.statusText + ')');
+							} else {
+								editor.setStatus('Error saving project: ' +
+									JSON.parse(xhr.response).errors[0].message);
+							}
+						}
+					};
+					xhr.onerror = function(e) {
+						mxUtils.alert(xhr.statusText);
+					};
+					xhr.send('preproduction=' + xml);
+				} else {
+					mxUtils.alert(mxResources.get('drawingTooLarge'));
+					mxUtils.popup(xml);
+
+					return;
+				}
+			}
+
+			this.editor.filename = name;
+			this.editor.modified = false;
+		} catch (e) {
+			this.editor.setStatus('Error saving file');
+		}
+	} else {
+		this.editor.setStatus('Error saving file');
+	}
+};
+
+/**
+ * Saves As the current graph under the given project name.
+ */
+EditorUi.prototype.saveAs = function(name) {
+	var editor = this.editor;
+
+	if (name != null) {
+		var xml = mxUtils.getPrettyXml(this.editor.getGraphXml());
+		try {
+			if (useLocalStorage) {
+				if (localStorage.getItem(name) != null &&
+					!mxUtils.confirm(mxResources.get('replace', [name]))) {
+					return;
+				}
+
+				localStorage.setItem(name, xml);
+				this.editor.setStatus(mxResources.get('saved') + ' ' + new Date());
+			} else {
+				console.log(xml.length);
+				console.log(MAX_REQUEST_SIZE);
+				if (xml.length < MAX_REQUEST_SIZE) {
+					xml = encodeURIComponent(xml);
+					name = encodeURIComponent(name);
+
+					var xhr = new XMLHttpRequest();
+					xhr.open("POST", SAVE_URL, true);
+					xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+					xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token);
+					xhr.onload = function(e) {
+						if (xhr.readyState === 4) {
+							if (xhr.status === 201) {
+								editor.setStatus('Project ' + JSON.parse(xhr.response).name +
+									' is opening in new window!');
+								setTimeout(function() {
+									window.open('square/project/' + JSON.parse(xhr.response).id,
+										'_blank');
+								}, 1500);
+							} else {
+								editor.setStatus('Error cloning project: ' +
+									JSON.parse(xhr.response).errors[0].message);
+							}
+						}
+					};
+					xhr.onerror = function(e) {
+						mxUtils.alert(xhr.statusText);
+					};
+					xhr.send('description=project_cloned&name=' + name +
+						'&preproduction=' + xml + '&production=' + xml);
+				} else {
+					mxUtils.alert(mxResources.get('drawingTooLarge'));
+					mxUtils.popup(xml);
+
+					return;
+				}
+			}
+
+			this.editor.filename = name;
+			this.editor.modified = false;
+		} catch (e) {
+			this.editor.setStatus('Error saving file');
+		}
+	} else {
+		this.editor.setStatus('Error saving file');
+	}
+};
+
+/**
+ * Plush the current graph under the given project name.
+ */
+EditorUi.prototype.publish = function(name) {
+	var editor = this.editor;
+
+	if (name != null) {
+		var xml = mxUtils.getPrettyXml(this.editor.getGraphXml());
+		try {
+			if (useLocalStorage) {
+				if (localStorage.getItem(name) != null &&
+					!mxUtils.confirm(mxResources.get('replace', [name]))) {
+					return;
+				}
+
+				localStorage.setItem(name, xml);
+				this.editor.setStatus(mxResources.get('saved') + ' ' + new Date());
+			} else {
+				console.log(xml.length);
+				console.log(MAX_REQUEST_SIZE);
+				if (xml.length < MAX_REQUEST_SIZE) {
+					xml = encodeURIComponent(xml);
+
+					var xhr = new XMLHttpRequest();
+					xhr.open("PUT", SAVE_URL + this.editor.data.id, true);
+					xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+					xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token);
+					xhr.onload = function(e) {
+						if (xhr.readyState === 4) {
+							if (xhr.status === 200) {
+								editor.setStatus('Published at ' + JSON.parse(xhr.response).updatedAt +
+									' (' + xhr.status + ' ' + xhr.statusText + ')');
+							} else {
+								editor.setStatus('Error saving project: ' +
+									JSON.parse(xhr.response).errors[0].message);
+							}
+						}
+					};
+					xhr.onerror = function(e) {
+						mxUtils.alert(xhr.statusText);
+					};
+					xhr.send('preproduction=' + xml + '&production=' + xml);
+				} else {
+					mxUtils.alert(mxResources.get('drawingTooLarge'));
+					mxUtils.popup(xml);
+
+					return;
+				}
+			}
+
+			this.editor.filename = name;
+			this.editor.modified = false;
+		} catch (e) {
+			this.editor.setStatus('Error publishing file');
+		}
+	} else {
+		this.editor.setStatus('Error publishing file');
+	}
+};
+
+/**
+ * Create variable
+ */
+EditorUi.prototype.variable = function(name) {
+	var editor = this.editor;
+
+	if (name != null) {
+		try {
+
+			var xhr = new XMLHttpRequest();
+			xhr.open("POST", VARIABLE_URL, true);
+			xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
+			xhr.setRequestHeader('Authorization', 'Bearer ' + editor.data.token);
+			xhr.onload = function(e) {
+				if (xhr.readyState === 4) {
+					if (xhr.status === 201) {
+						editor.setStatus('Variable created at ' + JSON.parse(xhr.response).createdAt +
+							' (' + xhr.status + ' ' + xhr.statusText + ')');
+					} else {
+						editor.setStatus('Error cloning project: ' +
+							JSON.parse(xhr.response).errors[0].message);
+					}
+				}
+			};
+			xhr.onerror = function(e) {
+				mxUtils.alert(xhr.statusText);
+			};
+			xhr.send('name=' + name);
+		} catch (e) {
+			this.editor.setStatus('Error creating variable');
+		}
+	} else {
+		this.editor.setStatus('Error creating variable');
+	}
+};
+
+/**
+ * Returns the URL for a copy of this editor with no state.
+ */
+EditorUi.prototype.getUrl = function(pathname) {
+	var href = (pathname != null) ? pathname : window.location.pathname;
+	var parms = (href.indexOf('?') > 0) ? 1 : 0;
+
+	// Removes template URL parameter for new blank diagram
+	for (var key in urlParams) {
+		if (parms == 0) {
+			href += '?';
+		} else {
+			href += '&';
+		}
+
+		href += key + '=' + urlParams[key];
+		parms++;
+	}
+
+	return href;
+};
+
+/**
+ * Updates the states of the given undo/redo items.
+ */
+EditorUi.prototype.addUndoListener = function() {
+	var undo = this.actions.get('undo');
+	var redo = this.actions.get('redo');
+
+	var undoMgr = this.editor.undoManager;
+
+	var undoListener = function() {
+		undo.setEnabled(undoMgr.canUndo());
+		redo.setEnabled(undoMgr.canRedo());
+	};
+
+	undoMgr.addListener(mxEvent.ADD, undoListener);
+	undoMgr.addListener(mxEvent.UNDO, undoListener);
+	undoMgr.addListener(mxEvent.REDO, undoListener);
+	undoMgr.addListener(mxEvent.CLEAR, undoListener);
+
+	// Updates the button states once
+	undoListener();
+};
+
+/**
+ * Updates the states of the given toolbar items based on the selection.
+ */
+EditorUi.prototype.addSelectionListener = function() {
+	var selectionListener = mxUtils.bind(this, function() {
+		var graph = this.editor.graph;
+		var selected = !graph.isSelectionEmpty();
+		var vertexSelected = false;
+		var edgeSelected = false;
+
+		var cells = graph.getSelectionCells();
+
+		if (cells != null) {
+			for (var i = 0; i < cells.length; i++) {
+				var cell = cells[i];
+
+				if (graph.getModel().isEdge(cell)) {
+					edgeSelected = true;
+				}
+
+				if (graph.getModel().isVertex(cell)) {
+					vertexSelected = true;
+				}
+
+				if (edgeSelected && vertexSelected) {
+					break;
+				}
+			}
+		}
+
+		// Updates action states
+		var actions = ['cut', 'copy', 'delete', 'duplicate', 'bold', 'italic',
+			'style', 'underline', 'toFront', 'toBack', 'dashed', 'rounded',
+			'shadow',
+			'tilt', 'autosize'
+		];
+
+		for (var i = 0; i < actions.length; i++) {
+			this.actions.get(actions[i]).setEnabled(selected);
+		}
+
+		this.actions.get('curved').setEnabled(edgeSelected);
+		this.actions.get('rotation').setEnabled(vertexSelected);
+		this.actions.get('wordWrap').setEnabled(vertexSelected);
+		this.actions.get('group').setEnabled(graph.getSelectionCount() > 1);
+		this.actions.get('ungroup').setEnabled(graph.getSelectionCount() == 1 &&
+			graph.getModel().getChildCount(graph.getSelectionCell()) > 0);
+		var oneVertexSelected = vertexSelected && graph.getSelectionCount() == 1;
+		this.actions.get('removeFromGroup').setEnabled(oneVertexSelected &&
+			graph.getModel().isVertex(graph.getModel().getParent(graph.getSelectionCell()))
+		);
+
+		// Updates menu states
+		var menus = ['fontFamily', 'fontSize', 'alignment', 'position', 'text',
+			'format',
+			'arrange', 'linewidth', 'spacing'
+		];
+
+		for (var i = 0; i < menus.length; i++) {
+			this.menus.get(menus[i]).setEnabled(selected);
+		}
+
+		menus = ['line', 'lineend', 'linestart'];
+
+		for (var i = 0; i < menus.length; i++) {
+			this.menus.get(menus[i]).setEnabled(edgeSelected);
+		}
+
+		this.actions.get('setAsDefaultEdge').setEnabled(edgeSelected);
+
+		this.menus.get('align').setEnabled(graph.getSelectionCount() > 1);
+		this.menus.get('direction').setEnabled(vertexSelected || (edgeSelected &&
+			graph.isLoop(graph.view.getState(graph.getSelectionCell()))));
+		this.menus.get('navigation').setEnabled(graph.foldingEnabled && ((graph.view
+				.currentRoot != null) ||
+			(graph.getSelectionCount() == 1 && graph.isValidRoot(graph.getSelectionCell()))
+		));
+		this.actions.get('home').setEnabled(graph.view.currentRoot != null);
+		this.actions.get('exitGroup').setEnabled(graph.view.currentRoot != null);
+		var groupEnabled = graph.getSelectionCount() == 1 && graph.isValidRoot(
+			graph.getSelectionCell());
+		this.actions.get('enterGroup').setEnabled(groupEnabled);
+		this.actions.get('expand').setEnabled(groupEnabled);
+		this.actions.get('collapse').setEnabled(groupEnabled);
+		this.actions.get('editLink').setEnabled(graph.getSelectionCount() == 1);
+		this.actions.get('openLink').setEnabled(graph.getSelectionCount() == 1 &&
+			graph.getLinkForCell(graph.getSelectionCell()) != null);
+	});
+
+	this.editor.graph.getSelectionModel().addListener(mxEvent.CHANGE,
+		selectionListener);
+	selectionListener();
+};
+
+/**
+ * Refreshes the viewport.
+ */
+EditorUi.prototype.refresh = function() {
+	var quirks = mxClient.IS_IE && (document.documentMode == null || document.documentMode ==
+		5);
+	var w = this.container.clientWidth;
+	var h = this.container.clientHeight;
+
+	if (this.container == document.body) {
+		w = document.body.clientWidth || document.documentElement.clientWidth;
+		h = (quirks) ? document.body.clientHeight || document.documentElement.clientHeight :
+			document.documentElement.clientHeight;
+	}
+
+	var effHsplitPosition = Math.max(0, Math.min(this.hsplitPosition, w - this.splitSize -
+		20));
+	var effVsplitPosition = Math.max(0, Math.min(this.vsplitPosition, h - this.menubarHeight -
+		this.toolbarHeight - this.footerHeight - this.splitSize - 1));
+
+	this.menubarContainer.style.height = this.menubarHeight + 'px';
+	this.toolbarContainer.style.top = this.menubarHeight + 'px';
+	this.toolbarContainer.style.height = this.toolbarHeight + 'px';
+
+	var tmp = this.menubarHeight + this.toolbarHeight;
+
+	if (!mxClient.IS_QUIRKS) {
+		tmp += 1;
+	}
+
+	this.sidebarContainer.style.top = tmp + 'px';
+	this.sidebarContainer.style.width = effHsplitPosition + 'px';
+	this.outlineContainer.style.width = effHsplitPosition + 'px';
+	this.outlineContainer.style.height = effVsplitPosition + 'px';
+	this.outlineContainer.style.bottom = this.footerHeight + 'px';
+	this.diagramContainer.style.left = (effHsplitPosition + this.splitSize) +
+		'px';
+	this.diagramContainer.style.top = this.sidebarContainer.style.top;
+	this.footerContainer.style.height = this.footerHeight + 'px';
+	this.footerContainer.style.display = 'none';
+	this.hsplit.style.top = this.sidebarContainer.style.top;
+	this.hsplit.style.bottom = this.outlineContainer.style.bottom;
+	this.hsplit.style.left = effHsplitPosition + 'px';
+	this.vsplit.style.width = this.sidebarContainer.style.width;
+	this.vsplit.style.bottom = (effVsplitPosition + this.footerHeight) + 'px';
+
+	if (quirks) {
+		this.menubarContainer.style.width = w + 'px';
+		this.toolbarContainer.style.width = this.menubarContainer.style.width;
+		var sidebarHeight = (h - effVsplitPosition - this.splitSize - this.footerHeight -
+			this.menubarHeight - this.toolbarHeight);
+		this.sidebarContainer.style.height = sidebarHeight + 'px';
+		this.diagramContainer.style.width = (w - effHsplitPosition - this.splitSize) +
+			'px';
+		var diagramHeight = (h - this.footerHeight - this.menubarHeight - this.toolbarHeight);
+		this.diagramContainer.style.height = diagramHeight + 'px';
+		this.footerContainer.style.width = this.menubarContainer.style.width;
+		this.hsplit.style.height = diagramHeight + 'px';
+	} else {
+		this.sidebarContainer.style.bottom = (effVsplitPosition + this.splitSize +
+			this.footerHeight) + 'px';
+		this.diagramContainer.style.bottom = this.outlineContainer.style.bottom;
+	}
+};
+
+/**
+ * Creates the required containers.
+ */
+EditorUi.prototype.createDivs = function() {
+	this.menubarContainer = this.createDiv('geMenubarContainer');
+	this.toolbarContainer = this.createDiv('geToolbarContainer');
+	this.sidebarContainer = this.createDiv('geSidebarContainer');
+	this.outlineContainer = this.createDiv('geOutlineContainer');
+	this.diagramContainer = this.createDiv('geDiagramContainer');
+	this.footerContainer = this.createDiv('geFooterContainer');
+	this.hsplit = this.createDiv('geHsplit');
+	this.vsplit = this.createDiv('geVsplit');
+
+	// Sets static style for containers
+	this.menubarContainer.style.top = '0px';
+	this.menubarContainer.style.left = '0px';
+	this.menubarContainer.style.right = '0px';
+	this.toolbarContainer.style.left = '0px';
+	this.toolbarContainer.style.right = '0px';
+	this.sidebarContainer.style.left = '0px';
+	this.outlineContainer.style.left = '0px';
+	this.diagramContainer.style.right = '0px';
+	this.footerContainer.style.left = '0px';
+	this.footerContainer.style.right = '0px';
+	this.footerContainer.style.bottom = '0px';
+	this.vsplit.style.left = '0px';
+	this.vsplit.style.height = this.splitSize + 'px';
+	this.hsplit.style.width = this.splitSize + 'px';
+};
+
+/**
+ * Creates the required containers.
+ */
+EditorUi.prototype.createUi = function() {
+	// Creates menubar
+	this.menubar = this.menus.createMenubar(this.createDiv('geMenubar'));
+	this.menubarContainer.appendChild(this.menubar.container);
+
+	// Creates toolbar
+	this.toolbar = this.createToolbar(this.createDiv('geToolbar'));
+	this.toolbarContainer.appendChild(this.toolbar.container);
+
+	// Creates the sidebar
+	this.sidebar = this.createSidebar(this.sidebarContainer);
+
+	// Creates the footer
+	this.footerContainer.appendChild(this.createFooter());
+
+	// Adds status bar in menubar
+	this.statusContainer = this.createStatusContainer();
+
+	// Connects the status bar to the editor status
+	this.editor.addListener('statusChanged', mxUtils.bind(this, function() {
+		this.setStatusText(this.editor.getStatus());
+	}));
+
+	this.setStatusText(this.editor.getStatus());
+	this.menubar.container.appendChild(this.statusContainer);
+
+	// Inserts into DOM
+	this.container.appendChild(this.menubarContainer);
+	this.container.appendChild(this.toolbarContainer);
+	this.container.appendChild(this.sidebarContainer);
+	this.container.appendChild(this.outlineContainer);
+	this.container.appendChild(this.diagramContainer);
+	this.container.appendChild(this.footerContainer);
+	this.container.appendChild(this.hsplit);
+	this.container.appendChild(this.vsplit);
+
+	// HSplit
+	this.addSplitHandler(this.hsplit, true, 0, mxUtils.bind(this, function(
+		value) {
+		this.hsplitPosition = value;
+		this.refresh();
+		this.editor.graph.sizeDidChange();
+		this.editor.outline.update(false);
+		this.editor.outline.outline.sizeDidChange();
+	}));
+
+	// VSplit
+	this.addSplitHandler(this.vsplit, false, this.footerHeight, mxUtils.bind(
+		this,
+		function(value) {
+			this.vsplitPosition = value;
+			this.refresh();
+			this.editor.outline.update(false);
+			this.editor.outline.outline.sizeDidChange();
+		}));
+};
+
+/**
+ * Creates a new toolbar for the given container.
+ */
+EditorUi.prototype.createStatusContainer = function() {
+	var container = document.createElement('a');
+	container.className = 'geItem geStatus';
+
+	return container;
+};
+
+/**
+ * Creates a new toolbar for the given container.
+ */
+EditorUi.prototype.createStatusContainer = function() {
+	var container = document.createElement('a');
+	container.className = 'geItem geStatus';
+
+	return container;
+};
+
+/**
+ * Creates a new toolbar for the given container.
+ */
+EditorUi.prototype.setStatusText = function(value) {
+	this.statusContainer.innerHTML = value;
+};
+
+/**
+ * Creates a new toolbar for the given container.
+ */
+EditorUi.prototype.createToolbar = function(container) {
+	return new Toolbar(this, container);
+};
+
+/**
+ * Creates a new sidebar for the given container.
+ */
+EditorUi.prototype.createSidebar = function(container) {
+	return new Sidebar(this, container);
+};
+
+/**
+ * Creates and returns a new footer.
+ */
+EditorUi.prototype.createFooter = function() {
+	return this.createDiv('geFooter');
+};
+
+/**
+ * Creates the actual toolbar for the toolbar container.
+ */
+EditorUi.prototype.createDiv = function(classname) {
+	var elt = document.createElement('div');
+	elt.className = classname;
+
+	return elt;
+};
+
+/**
+ * Creates the custom header.
+ */
+EditorUi.prototype.createHeader = function(classname) {
+	var elt = document.createElement(classname);
+	return elt;
+};
+
+/**
+ * Creates the custom header.
+ */
+EditorUi.prototype.createForm = function(classname) {
+	var elt = document.createElement('form');
+	elt.className = classname;
+
+	return elt;
+};
+
+/**
+ * Updates the states of the given undo/redo items.
+ */
+EditorUi.prototype.addSplitHandler = function(elt, horizontal, dx, onChange) {
+	var start = null;
+	var initial = null;
+
+	function getValue() {
+		return parseInt(((horizontal) ? elt.style.left : elt.style.bottom));
+	};
+
+	function moveHandler(evt) {
+		if (start != null) {
+			var pt = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+			onChange(Math.max(0, initial + ((horizontal) ? (pt.x - start.x) : (start.y -
+				pt.y)) - dx));
+			mxEvent.consume(evt);
+		}
+	};
+
+	function dropHandler(evt) {
+		moveHandler(evt);
+		start = null;
+		initial = null;
+	};
+
+	mxEvent.addGestureListeners(elt, function(evt) {
+		start = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+		initial = getValue();
+		mxEvent.consume(evt);
+	});
+
+	mxEvent.addListener(document, 'mousemove', moveHandler);
+	mxEvent.addListener(document, 'touchmove', moveHandler);
+	mxEvent.addListener(document, 'mouseup', dropHandler);
+	mxEvent.addListener(document, 'touchend', dropHandler);
+};
+
+/**
+ * Displays a print dialog.
+ */
+EditorUi.prototype.showDialog = function(elt, w, h, modal, closable, onClose) {
+	this.hideDialog();
+	this.dialog = new Dialog(this, elt, w, (mxClient.IS_VML) ? h - 12 : h,
+		modal,
+		closable, onClose);
+};
+
+/**
+ * Displays a print dialog.
+ */
+EditorUi.prototype.hideDialog = function() {
+	if (this.dialog != null) {
+		this.dialog.close();
+		this.dialog = null;
+		this.editor.graph.container.focus();
+	}
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+EditorUi.prototype.saveFile = function(forceDialog) {
+	if (!forceDialog && this.editor.filename != null) {
+		this.save(this.editor.getOrCreateFilename());
+	} else {
+		this.showDialog(new SaveDialog(this).container, 300, 100, true, true);
+	}
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+EditorUi.prototype.publishFile = function(forceDialog) {
+	if (!forceDialog && this.editor.filename != null) {
+		this.publish(this.editor.getOrCreateFilename());
+	} else {
+		//this.showDialog(new SaveDialog(this).container, 300, 100, true, true);
+	}
+};
+
+/**
+ * Executes the given layout.
+ */
+EditorUi.prototype.executeLayout = function(layout, animate, ignoreChildCount) {
+	var graph = this.editor.graph;
+	var cell = graph.getSelectionCell();
+
+	// Allow global overridding of animation
+	animate = this.animate != null ? this.animate : animate;
+
+	graph.getModel().beginUpdate();
+	try {
+		layout.execute(graph.getDefaultParent(), cell);
+	} catch (e) {
+		throw e;
+	} finally {
+		// Animates the changes in the graph model except
+		// for Camino, where animation is too slow
+		if (animate && navigator.userAgent.indexOf('Camino') < 0) {
+			// New API for animating graph layout results asynchronously
+			var morph = new mxMorphing(graph);
+			morph.addListener(mxEvent.DONE, mxUtils.bind(this, function() {
+				graph.getModel().endUpdate();
+			}));
+
+			morph.startAnimation();
+		} else {
+			graph.getModel().endUpdate();
+		}
+	}
+};
+
+/**
+ * Creates the keyboard event handler for the current graph and history.
+ */
+EditorUi.prototype.createKeyHandler = function(editor) {
+	var graph = this.editor.graph;
+	var keyHandler = new mxKeyHandler(graph);
+
+	// Routes command-key to control-key on Mac
+	keyHandler.isControlDown = function(evt) {
+		return mxEvent.isControlDown(evt) || (mxClient.IS_MAC && evt.metaKey);
+	};
+
+	// Helper function to move cells with the cursor keys
+	function nudge(keyCode) {
+		if (!graph.isSelectionEmpty()) {
+			var dx = 0;
+			var dy = 0;
+
+			if (keyCode == 37) {
+				dx = -1;
+			} else if (keyCode == 38) {
+				dy = -1;
+			} else if (keyCode == 39) {
+				dx = 1;
+			} else if (keyCode == 40) {
+				dy = 1;
+			}
+
+			graph.moveCells(graph.getSelectionCells(), dx, dy);
+			graph.scrollCellToVisible(graph.getSelectionCell());
+		}
+	};
+
+	// Binds keystrokes to actions
+	var bindAction = mxUtils.bind(this, function(code, control, key, shift) {
+		var action = this.actions.get(key);
+
+		if (action != null) {
+			var f = function() {
+				if (action.enabled) {
+					action.funct();
+				}
+			};
+
+			if (control) {
+				if (shift) {
+					keyHandler.bindControlShiftKey(code, f);
+				} else {
+					keyHandler.bindControlKey(code, f);
+				}
+			} else {
+				if (shift) {
+					keyHandler.bindShiftKey(code, f);
+				} else {
+					keyHandler.bindKey(code, f);
+				}
+			}
+		}
+	});
+
+	var ui = this;
+	var keyHandleEscape = keyHandler.escape;
+	keyHandler.escape = function(evt) {
+		ui.hideDialog();
+		keyHandleEscape.apply(this, arguments);
+	};
+
+	// Ignores enter keystroke. Remove this line if you want the
+	// enter keystroke to stop editing.
+	keyHandler.enter = function() {};
+	keyHandler.bindKey(8, function() {
+		graph.foldCells(true);
+	}); // Backspace
+	keyHandler.bindKey(13, function() {
+		graph.foldCells(false);
+	}); // Enter
+	keyHandler.bindKey(33, function() {
+		graph.exitGroup();
+	}); // Page Up
+	keyHandler.bindKey(34, function() {
+		graph.enterGroup();
+	}); // Page Down
+	keyHandler.bindKey(36, function() {
+		graph.home();
+	}); // Home
+	keyHandler.bindKey(35, function() {
+		graph.refresh();
+	}); // End
+	keyHandler.bindKey(37, function() {
+		nudge(37);
+	}); // Left arrow
+	keyHandler.bindKey(38, function() {
+		nudge(38);
+	}); // Up arrow
+	keyHandler.bindKey(39, function() {
+		nudge(39);
+	}); // Right arrow
+	keyHandler.bindKey(40, function() {
+		nudge(40);
+	}); // Down arrow
+	keyHandler.bindKey(113, function() {
+		graph.startEditingAtCell();
+	});
+	bindAction(46, false, 'delete'); // Delete
+	bindAction(82, true, 'tilt'); // Ctrl+R
+	bindAction(83, true, 'save'); // Ctrl+S
+	bindAction(83, true, 'saveAs', true); // Ctrl+Shift+S
+	bindAction(107, false, 'zoomIn'); // Add
+	bindAction(109, false, 'zoomOut'); // Subtract
+	bindAction(65, true, 'selectAll'); // Ctrl+A
+	bindAction(86, true, 'selectVertices', true); // Ctrl+Shift+V
+	bindAction(69, true, 'selectEdges', true); // Ctrl+Shift+E
+	bindAction(69, true, 'export'); // Ctrl+Shift+E
+	bindAction(66, true, 'toBack'); // Ctrl+B
+	bindAction(70, true, 'toFront'); // Ctrl+F
+	bindAction(68, true, 'duplicate'); // Ctrl+D
+	bindAction(90, true, 'undo'); // Ctrl+Z
+	bindAction(89, true, 'redo'); // Ctrl+Y
+	bindAction(88, true, 'cut'); // Ctrl+X
+	bindAction(67, true, 'copy'); // Ctrl+C
+	bindAction(81, true, 'connect'); // Ctrl+Q
+	bindAction(86, true, 'paste'); // Ctrl+V
+	bindAction(71, true, 'group'); // Ctrl+G
+	bindAction(71, true, 'grid', true); // Ctrl+Shift+G
+	bindAction(85, true, 'ungroup'); // Ctrl+U
+	bindAction(112, false, 'about'); // F1
+	bindAction(80, true, 'publish', true); // Ctrl+Shift+P
+
+	return keyHandler;
+};
+
+/**
+ * Giuseppe Careri
+ * Creates a new toolbar for the given container.
+ */
+EditorUi.prototype.createMultiplicities = function(graph, cells, source,
+	target) {
+	for (var i = 0; i < cells.length; i++) {
+		graph.push(new mxMultiplicity(true, cells[i], null, null, source[i][0],
+			source[i][1], null, mxResources.get(cells[i]) + ' must have ' + source[i][0] + ' outcoming edge.', null));
+		graph.push(new mxMultiplicity(false, cells[i], null, null, target[i][0],
+			target[i][1], null, mxResources.get(cells[i]) + ' must have ' + target[i][0] + ' incoming edge.', null));
+	};
+};
diff --git a/public/assets/plugins/mxgraph/js/Graph.js b/public/assets/plugins/mxgraph/js/Graph.js
new file mode 100644
index 0000000..46f34e4
--- /dev/null
+++ b/public/assets/plugins/mxgraph/js/Graph.js
@@ -0,0 +1,748 @@
+/**
+ * $Id: Graph.js,v 1.14 2013-02-16 10:19:54 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Constructs a new graph instance. Note that the constructor does not take a
+ * container because the graph instance is needed for creating the UI, which
+ * in turn will create the container for the graph. Hence, the container is
+ * assigned later in EditorUi.
+ */
+Graph = function(container, model, renderHint, stylesheet)
+{
+	mxGraph.call(this, container, model, renderHint, stylesheet);
+	
+	this.setConnectable(true);
+	this.setDropEnabled(false);
+	this.setPanning(true);
+	this.setTooltips(!mxClient.IS_TOUCH);
+	this.setAllowLoops(false);
+	this.setMultigraph(false);
+	this.allowAutoPanning = true;
+	this.resetEdgesOnConnect = false;
+	this.constrainChildren = false;
+	
+	// Centers the port icon on the target port
+    this.connectionHandler.targetConnectImage = true;
+
+    // Does not allow dangling edges
+    this.setAllowDanglingEdges(false);
+
+	// Enables cloning of connection sources
+	this.connectionHandler.setCreateTarget(false);
+	
+	// Disables built-in connection starts
+	this.connectionHandler.isValidSource = function()
+	{
+		return mxConnectionHandler.prototype.isValidSource.apply(this, arguments) && urlParams['connect'] != '2';
+	};
+
+	// Sets the style to be used when an elbow edge is double clicked
+	this.alternateEdgeStyle = 'vertical';
+
+	if (stylesheet == null)
+	{
+		this.loadStylesheet();
+	}
+	
+	// Creates rubberband selection
+    var rubberband = new mxRubberband(this);
+    
+    this.getRubberband = function()
+    {
+    	return rubberband;
+    };
+    
+    // Shows hand cursor while panning
+	this.panningHandler.addListener(mxEvent.PAN_START, mxUtils.bind(this, function()
+	{
+		this.container.style.cursor = 'pointer';
+	}));
+			
+	this.panningHandler.addListener(mxEvent.PAN_END, mxUtils.bind(this, function()
+	{
+		this.container.style.cursor = 'default';
+	}));
+
+    // Adds support for HTML labels via style. Note: Currently, only the Java
+    // backend supports HTML labels but CSS support is limited to the following:
+    // http://docs.oracle.com/javase/6/docs/api/index.html?javax/swing/text/html/CSS.html
+	this.isHtmlLabel = function(cell)
+	{
+		var state = this.view.getState(cell);
+		var style = (state != null) ? state.style : this.getCellStyle(cell);
+		
+		return style['html'] == '1' || style['whiteSpace'] == 'wrap';
+	};
+	
+	// HTML entities are displayed as plain text in wrapped plain text labels
+	this.cellRenderer.getLabelValue = function(state)
+	{
+		var result = mxCellRenderer.prototype.getLabelValue.apply(this, arguments);
+		
+		if (state.style['whiteSpace'] == 'wrap' && state.style['html'] != 1)
+		{
+			result = mxUtils.htmlEntities(result, false);
+		}
+		
+		return result;
+	};
+	
+	// Unlocks all cells
+	this.isCellLocked = function(cell)
+	{
+		return false;
+	};
+
+	// Tap and hold brings up context menu.
+	// Tolerance slightly below graph tolerance is better.
+	this.connectionHandler.tapAndHoldTolerance = 16;
+	
+	//  Tap and hold on background starts rubberband on cell starts connecting
+	var connectionHandlerTapAndHold = this.connectionHandler.tapAndHold;
+	this.connectionHandler.tapAndHold = function(me, state)
+	{
+		if (state == null)
+		{
+			if (!this.graph.panningHandler.active)
+			{
+				rubberband.start(me.getGraphX(), me.getGraphY());
+				this.graph.panningHandler.panningTrigger = false;
+			}
+		}
+		else if (tapAndHoldStartsConnection)
+		{
+			connectionHandlerTapAndHold.apply(this, arguments);	
+		}
+		else if (this.graph.isCellSelected(state.cell) && this.graph.getSelectionCount() > 1)
+		{
+			this.graph.removeSelectionCell(state.cell);
+		}
+	};
+
+	if (touchStyle)
+	{
+		this.initTouch();
+	}
+};
+
+// Graph inherits from mxGraph
+mxUtils.extend(Graph, mxGraph);
+
+/**
+ * Allows to all values in fit.
+ */
+Graph.prototype.minFitScale = null;
+
+/**
+ * Allows to all values in fit.
+ */
+Graph.prototype.maxFitScale = null;
+
+/**
+ * Loads the stylesheet for this graph.
+ */
+Graph.prototype.loadStylesheet = function()
+{
+    var node = mxUtils.load(STYLE_PATH + '/default.xml').getDocumentElement();
+	var dec = new mxCodec(node.ownerDocument);
+	dec.decode(node, this.getStylesheet());
+};
+
+/**
+ * Inverts the elbow edge style without removing existing styles.
+ */
+Graph.prototype.flipEdge = function(edge)
+{
+	if (edge != null)
+	{
+		var state = this.view.getState(edge);
+		var style = (state != null) ? state.style : this.getCellStyle(edge);
+		
+		if (style != null)
+		{
+			var elbow = mxUtils.getValue(style, mxConstants.STYLE_ELBOW,
+				mxConstants.ELBOW_HORIZONTAL);
+			var value = (elbow == mxConstants.ELBOW_HORIZONTAL) ?
+				mxConstants.ELBOW_VERTICAL : mxConstants.ELBOW_HORIZONTAL;
+			this.setCellStyles(mxConstants.STYLE_ELBOW, value, [edge]);
+		}
+	}
+};
+
+/**
+ * Sets the default edge for future connections.
+ */
+Graph.prototype.setDefaultEdge = function(cell)
+{
+	if (cell != null && this.getModel().isEdge(cell))
+	{
+		// Take a snapshot of the cell at the moment of calling
+		var proto = this.getModel().cloneCells([cell])[0];
+		
+		// Delete existing points
+		if (proto.geometry != null)
+		{
+			proto.geometry.points = null;
+		}
+		
+		// Delete entry-/exitXY styles
+		var style = proto.getStyle();
+		style = mxUtils.setStyle(style, mxConstants.STYLE_ENTRY_X, null);
+		style = mxUtils.setStyle(style, mxConstants.STYLE_ENTRY_Y, null);
+		style = mxUtils.setStyle(style, mxConstants.STYLE_EXIT_X, null);
+		style = mxUtils.setStyle(style, mxConstants.STYLE_EXIT_Y, null);
+		proto.setStyle(style);
+		
+		// Uses edge template for connect preview
+		this.connectionHandler.createEdgeState = function(me)
+		{
+    		return this.graph.view.createState(proto);
+	    };
+
+	    // Creates new connections from edge template
+	    this.connectionHandler.factoryMethod = function()
+	    {
+    		return this.graph.cloneCells([proto])[0];
+	    };
+	}
+};
+
+/**
+ * Disables folding for non-swimlanes.
+ */
+Graph.prototype.isCellFoldable = function(cell)
+{
+	return this.foldingEnabled && this.isSwimlane(cell);
+};
+
+/**
+ * Disables drill-down for non-swimlanes.
+ */
+Graph.prototype.isValidRoot = function(cell)
+{
+	return this.isSwimlane(cell);
+};
+
+/**
+ * Overrides createGroupCell to set the group style for new groups to 'group'.
+ */
+Graph.prototype.createGroupCell = function()
+{
+	var group = mxGraph.prototype.createGroupCell.apply(this, arguments);
+	group.setStyle('group');
+	
+	return group;
+};
+
+/**
+ * Giuseppe Careri
+ * Overrides tooltips to show position and size
+ */
+Graph.prototype.getTooltipForCell = function(cell)
+{
+	var tip = '';
+	
+	if (this.getModel().isVertex(cell))
+	{
+		// var geo = this.getCellGeometry(cell);
+		
+		// var f2 = function(x)
+		// {
+		// 	return Math.round(parseFloat(x) * 100) / 100;
+		// };
+		
+		// if (geo != null)
+		// {
+		// 	if (tip == null)
+		// 	{
+		// 		tip = '';
+		// 	}
+		// 	else if (tip.length > 0)
+		// 	{
+		// 		tip += '\n';
+		// 	}
+			
+		// 	tip += 'X: ' + f2(geo.x) + '\nY: ' + f2(geo.y) + '\nW: ' + f2(geo.width) + '\nH: ' + f2(geo.height);
+		// }
+		
+		tip += mxResources.get('description_' + cell.value.nodeName);
+	}
+	else if (this.getModel().isEdge(cell))
+	{
+		tip = mxGraph.prototype.getTooltipForCell.apply(this, arguments);
+	}
+	
+	return tip;
+};
+
+/**
+ * Giuseppe Careri
+ * Returns the label for the given cell.
+ */
+Graph.prototype.convertValueToString = function(cell)
+{
+	if (cell.value != null && typeof(cell.value) == 'object')
+	{
+		return cell.value.getAttribute('label');
+	}
+	
+	return mxGraph.prototype.convertValueToString.apply(this, arguments);
+};
+
+/**
+ * Giuseppe Careri
+ * Handles label changes for XML user objects.
+ */
+Graph.prototype.cellLabelChanged = function(cell, value, autoSize)
+{
+	if (cell.value != null && typeof(cell.value) == 'object')
+	{
+		var tmp = cell.value.cloneNode(true);
+		tmp.setAttribute('label', value);
+		value = tmp;
+	}
+	
+	mxGraph.prototype.cellLabelChanged.apply(this, arguments);
+};
+
+/**
+ * Sets the link for the given cell.
+ */
+Graph.prototype.setLinkForCell = function(cell, link)
+{
+	var value = null;
+	
+	if (cell.value != null && typeof(cell.value) == 'object')
+	{
+		value = cell.value.cloneNode(true);
+	}
+	else
+	{
+		var doc = mxUtils.createXmlDocument();
+		
+		value = doc.createElement('UserObject');
+		value.setAttribute('label', cell.value);
+	}
+	
+	if (link != null && link.length > 0)
+	{
+		value.setAttribute('link', link);
+	}
+	else
+	{
+		value.removeAttribute('link');
+	}
+	
+	this.model.setValue(cell, value);
+};
+
+/**
+ * Returns the link for the given cell.
+ */
+Graph.prototype.getLinkForCell = function(cell)
+{
+	if (cell.value != null && typeof(cell.value) == 'object')
+	{
+		return cell.value.getAttribute('link');
+	}
+	
+	return null;
+};
+
+/**
+ * Customized graph for touch devices.
+ */
+Graph.prototype.initTouch = function()
+{
+	// Disables new connections via "hotspot"
+	this.connectionHandler.marker.isEnabled = function()
+	{
+		return this.graph.connectionHandler.first != null;
+	};
+
+	// Hides menu when editing starts
+	this.addListener(mxEvent.START_EDITING, function(sender, evt)
+	{
+		this.panningHandler.hideMenu();
+	});
+
+	// Context menu for touchstyle
+	var showMenu = false;
+	var menuCell = null;
+
+	// Checks if native hit detection did not return anything and does custom
+	// hit detection for edges to take into account the tolerance
+	this.updateMouseEvent = function(me)
+	{
+		mxGraph.prototype.updateMouseEvent.apply(this, arguments);
+
+		if (me.getState() == null)
+		{
+			var cell = this.getCellAt(me.graphX, me.graphY);
+			
+			if (this.getModel().isEdge(cell))
+			{
+				me.state = this.view.getState(cell);
+				
+				if (me.state != null && me.state.shape != null)
+				{
+					this.container.style.cursor = me.state.shape.node.style.cursor;
+				}
+			}
+		}
+		
+		if (me.getState() == null)
+		{
+			this.container.style.cursor = 'default';
+		}
+	};
+	
+	// Handles popup menu on touch devices (tap selected cell)
+	this.fireMouseEvent = function(evtName, me, sender)
+	{
+		if (evtName == mxEvent.MOUSE_DOWN)
+		{
+			if (!this.panningHandler.isMenuShowing())
+			{
+				menuCell = me.getCell();
+				showMenu = (menuCell != null) ? this.isCellSelected(menuCell) : this.isSelectionEmpty();
+			}
+			else
+			{
+				showMenu = false;
+				menuCell = null;
+			}
+		}
+		else if (evtName == mxEvent.MOUSE_UP)
+		{
+			if (showMenu && !this.isEditing())
+			{
+				if (!this.panningHandler.isMenuShowing())
+				{
+					var x = mxEvent.getClientX(me.getEvent());
+					var y = mxEvent.getClientY(me.getEvent());
+					
+					this.panningHandler.popup(x + 16, y, menuCell, me.getEvent());
+				}
+				
+				showMenu = false;
+				menuCell = null;
+				me.consume();
+				
+				return;
+			}
+			
+			showMenu = false;
+			menuCell = null;
+		}
+
+		mxGraph.prototype.fireMouseEvent.apply(this, arguments);
+
+		if (evtName == mxEvent.MOUSE_MOVE && me.isConsumed())
+		{
+			showMenu = false;
+			menuCell = null;
+		}
+	};
+};
+
+/**
+ * Implements touch devices.
+ */
+(function()
+{
+	// Enables rotation handle
+	mxVertexHandler.prototype.rotationEnabled = true;
+	
+	// Matches label positions of mxGraph 1.x
+	mxText.prototype.baseSpacingTop = 5;
+	mxText.prototype.baseSpacingBottom = 1;
+
+	// Touch-specific static overrides
+	if (touchStyle)
+	{
+		// Sets constants for touch style
+		mxConstants.HANDLE_SIZE = 16;
+		mxConstants.LABEL_HANDLE_SIZE = 7;
+		
+		// Larger tolerance and grid for real touch devices
+		if (mxClient.IS_TOUCH)
+		{
+			mxVertexHandler.prototype.tolerance = 4;
+			mxEdgeHandler.prototype.tolerance = 6;
+			Graph.prototype.tolerance = 14;
+			Graph.prototype.gridSize = 20;
+			
+			// One finger pans (no rubberband selection) must start regardless of mouse button
+			mxPanningHandler.prototype.selectOnPopup = false;
+			mxPanningHandler.prototype.useLeftButtonForPanning = true;
+			mxPanningHandler.prototype.isPanningTrigger = function(me)
+			{
+				var evt = me.getEvent();
+			 	
+			 	return (this.useLeftButtonForPanning && (this.ignoreCell || me.getState() == null)/* &&
+			 			mxEvent.isLeftMouseButton(evt)*/) || (mxEvent.isControlDown(evt) &&
+			 			mxEvent.isShiftDown(evt)) || (this.usePopupTrigger &&
+			 		   	mxEvent.isPopupTrigger(evt));
+			};
+		}
+		
+		// Don't clear selection if multiple cells selected
+		var graphHandlerMouseDown = mxGraphHandler.prototype.mouseDown;
+		mxGraphHandler.prototype.mouseDown = function(sender, me)
+		{
+			graphHandlerMouseDown.apply(this, arguments);
+
+			if (this.graph.isCellSelected(me.getCell()) && this.graph.getSelectionCount() > 1)
+			{
+				this.delayedSelection = false;
+			}
+		};
+
+		// Changes order of panninghandler
+		Graph.prototype.createHandlers = function(container)
+		{
+			this.tooltipHandler = new mxTooltipHandler(this);
+			this.tooltipHandler.setEnabled(false);
+			// Selection cells first
+			this.selectionCellsHandler = new mxSelectionCellsHandler(this);
+			this.panningHandler = new mxPanningHandler(this);
+			this.panningHandler.panningEnabled = false;
+			this.connectionHandler = new mxConnectionHandler(this);
+			this.connectionHandler.setEnabled(false);
+			this.graphHandler = new mxGraphHandler(this);
+		};
+
+		// On connect the target is selected and we clone the cell of the preview edge for insert
+		mxConnectionHandler.prototype.selectCells = function(edge, target)
+		{
+			if (touchStyle && target != null)
+			{
+				this.graph.setSelectionCell(target);
+			}
+			else
+			{
+				this.graph.setSelectionCell(edge);
+			}
+		};
+
+		// Overrides double click handling to use the tolerance
+		// FIXME: Double click on edges in iPad needs focus on textarea
+		var graphDblClick = mxGraph.prototype.dblClick;
+		Graph.prototype.dblClick = function(evt, cell)
+		{
+			if (cell == null)
+			{
+				var pt = mxUtils.convertPoint(this.container,
+					mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+				cell = this.getCellAt(pt.x, pt.y);
+			}
+
+			graphDblClick.call(this, evt, cell);
+		};
+
+		// Rounded edge and vertex handles
+		var touchHandle = new mxImage(IMAGE_PATH + '/touch-handle.png', 16, 16);
+		mxVertexHandler.prototype.handleImage = touchHandle;
+		mxEdgeHandler.prototype.handleImage = touchHandle;
+		mxOutline.prototype.sizerImage = touchHandle;
+		
+		// Pre-fetches touch handle
+		new Image().src = touchHandle.src;
+
+		// Adds connect icon to selected vertices
+		var connectorSrc = IMAGE_PATH + '/touch-connector.png';
+		
+		var vertexHandlerInit = mxVertexHandler.prototype.init;
+		mxVertexHandler.prototype.init = function()
+		{
+			vertexHandlerInit.apply(this, arguments);
+
+			// Only show connector image on one cell and do not show on containers
+			if (showConnectorImg && this.graph.connectionHandler.isEnabled() &&
+				this.graph.isCellConnectable(this.state.cell) &&
+				!this.graph.isValidRoot(this.state.cell) &&
+				this.graph.getSelectionCount() == 1)
+			{
+				this.connectorImg = mxUtils.createImage(connectorSrc);
+				this.connectorImg.style.cursor = 'pointer';
+				this.connectorImg.style.width = '29px';
+				this.connectorImg.style.height = '29px';
+				this.connectorImg.style.position = 'absolute';
+				
+				if (!mxClient.IS_TOUCH)
+				{
+					this.connectorImg.setAttribute('title', mxResources.get('connect'));
+					mxEvent.redirectMouseEvents(this.connectorImg, this.graph, this.state);
+				}
+
+				// Adds 2px tolerance
+				this.connectorImg.style.padding = '2px';
+				
+				// Starts connecting on touch/mouse down
+				mxEvent.addGestureListeners(this.connectorImg,
+					mxUtils.bind(this, function(evt)
+					{
+						this.graph.panningHandler.hideMenu();
+						var pt = mxUtils.convertPoint(this.graph.container,
+								mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+						this.graph.connectionHandler.start(this.state, pt.x, pt.y);
+						this.graph.isMouseDown = true;
+						mxEvent.consume(evt);
+					})
+				);
+
+				this.graph.container.appendChild(this.connectorImg);
+			}
+
+			this.redrawTools();
+		};
+		
+		var vertexHandlerRedraw = mxVertexHandler.prototype.redraw;
+		mxVertexHandler.prototype.redraw = function()
+		{
+			vertexHandlerRedraw.apply(this);
+			this.redrawTools();
+		};
+		
+		mxVertexHandler.prototype.redrawTools = function()
+		{
+			if (this.state != null && this.connectorImg != null)
+			{
+				// Top right for single-sizer
+				if (mxVertexHandler.prototype.singleSizer)
+				{
+					this.connectorImg.style.left = (this.state.x + this.state.width - this.connectorImg.offsetWidth / 2) + 'px';
+					this.connectorImg.style.top = (this.state.y - this.connectorImg.offsetHeight / 2) + 'px';
+				}
+				else
+				{
+					this.connectorImg.style.left = (this.state.x + this.state.width + mxConstants.HANDLE_SIZE / 2 + 4/* - 2 padding*/) + 'px';
+					this.connectorImg.style.top = (this.state.y + (this.state.height - this.connectorImg.offsetHeight) / 2) + 'px';
+				}
+			}
+		};
+		
+		var vertexHandlerDestroy = mxVertexHandler.prototype.destroy;
+		mxVertexHandler.prototype.destroy = function(sender, me)
+		{
+			vertexHandlerDestroy.apply(this, arguments);
+
+			if (this.connectorImg != null)
+			{
+				this.connectorImg.parentNode.removeChild(this.connectorImg);
+				this.connectorImg = null;
+			}
+		};
+		
+		// Pre-fetches touch connector
+		new Image().src = connectorSrc;
+	}
+	else
+	{
+		var img = new mxImage(IMAGE_PATH + '/connector.png', 15, 15);
+		mxConnectionHandler.prototype.connectImage = img;
+
+		// Pre-fetches img
+		new Image().src = img.src;
+		
+		if (urlParams['connect'] == '2') // not touchStyle
+		{
+			var img = new mxImage(IMAGE_PATH + '/connector.png', 15, 15);
+					
+			var vertexHandlerInit = mxVertexHandler.prototype.init;
+			mxVertexHandler.prototype.init = function()
+			{
+				vertexHandlerInit.apply(this, arguments);
+	
+				// Only show connector image on one cell and do not show on containers
+				if (showConnectorImg && this.graph.connectionHandler.isEnabled() &&
+					this.graph.isCellConnectable(this.state.cell) &&
+					!this.graph.isValidRoot(this.state.cell) &&
+					this.graph.getSelectionCount() == 1)
+				{
+					// Workaround for event redirection via image tag in quirks and IE8
+					if (mxClient.IS_IE && !mxClient.IS_SVG)
+					{
+						this.connectorImg = document.createElement('div');
+						this.connectorImg.style.backgroundImage = 'url(' + img.src + ')';
+						this.connectorImg.style.backgroundPosition = 'center';
+						this.connectorImg.style.backgroundRepeat = 'no-repeat';
+						this.connectorImg.style.width = (img.width + 4) + 'px';
+						this.connectorImg.style.height = (img.height + 4) + 'px';
+						this.connectorImg.style.display = (mxClient.IS_QUIRKS) ? 'inline' : 'inline-block';
+					}
+					else
+					{
+						this.connectorImg = mxUtils.createImage(img.src);
+						this.connectorImg.style.width = img.width + 'px';
+						this.connectorImg.style.height = img.height + 'px';
+					}
+					
+					this.connectorImg.style.cursor = 'pointer';
+					this.connectorImg.style.position = 'absolute';
+					this.connectorImg.setAttribute('title', mxResources.get('connect'));
+					mxEvent.redirectMouseEvents(this.connectorImg, this.graph, this.state);
+					
+					// Adds 2px tolerance
+					this.connectorImg.style.padding = '2px';
+					
+					// Starts connecting on touch/mouse down
+					mxEvent.addListener(this.connectorImg, 'mousedown',
+						mxUtils.bind(this, function(evt)
+						{
+							this.graph.panningHandler.hideMenu();
+							var pt = mxUtils.convertPoint(this.graph.container,
+									mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+							this.graph.connectionHandler.start(this.state, pt.x, pt.y);
+							this.graph.isMouseDown = true;
+							mxEvent.consume(evt);
+						})
+					);
+	
+					this.graph.container.appendChild(this.connectorImg);
+				}
+	
+				this.redrawTools();
+			};
+			
+			var vertexHandlerRedraw = mxVertexHandler.prototype.redraw;
+			mxVertexHandler.prototype.redraw = function()
+			{
+				vertexHandlerRedraw.apply(this);
+				this.redrawTools();
+			};
+			
+			mxVertexHandler.prototype.redrawTools = function()
+			{
+				if (this.state != null && this.connectorImg != null)
+				{
+					// Top right for single-sizer
+					if (mxVertexHandler.prototype.singleSizer)
+					{
+						this.connectorImg.style.left = (this.state.x + this.state.width - this.connectorImg.offsetWidth / 2) + 'px';
+						this.connectorImg.style.top = (this.state.y - this.connectorImg.offsetHeight / 2) + 'px';
+					}
+					else
+					{
+						this.connectorImg.style.left = (this.state.x + this.state.width + mxConstants.HANDLE_SIZE / 2 + 2/* - 2 padding*/) + 'px';
+						this.connectorImg.style.top = (this.state.y + (this.state.height - this.connectorImg.offsetHeight) / 2) + 'px';
+					}
+				}
+			};
+			
+			var vertexHandlerDestroy = mxVertexHandler.prototype.destroy;
+			mxVertexHandler.prototype.destroy = function(sender, me)
+			{
+				vertexHandlerDestroy.apply(this, arguments);
+	
+				if (this.connectorImg != null)
+				{
+					this.connectorImg.parentNode.removeChild(this.connectorImg);
+					this.connectorImg = null;
+				}
+			};
+		}
+	}
+})();
diff --git a/public/assets/plugins/mxgraph/js/Menus.js b/public/assets/plugins/mxgraph/js/Menus.js
new file mode 100644
index 0000000..bc0cc25
--- /dev/null
+++ b/public/assets/plugins/mxgraph/js/Menus.js
@@ -0,0 +1,716 @@
+/**
+ * $Id: Menus.js,v 1.13 2013-02-20 16:21:29 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Constructs a new graph editor
+ */
+Menus = function(editorUi) {
+	this.editorUi = editorUi;
+	this.menus = new Object();
+	this.init();
+
+	// Pre-fetches checkmark image
+	new Image().src = IMAGE_PATH + '/checkmark.gif';
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+Menus.prototype.init = function() {
+	var graph = this.editorUi.editor.graph;
+
+	this.put('fontFamily', new Menu(mxUtils.bind(this, function(menu, parent) {
+		var fonts = ['Helvetica', 'Verdana', 'Times New Roman', 'Garamond',
+			'Comic Sans MS',
+			'Courier New', 'Georgia', 'Lucida Console', 'Tahoma'
+		];
+
+		for (var i = 0; i < fonts.length; i++) {
+			var tr = this.styleChange(menu, fonts[i], [mxConstants.STYLE_FONTFAMILY], [
+				fonts[i]
+			], null, parent);
+			tr.firstChild.nextSibling.style.fontFamily = fonts[i];
+		}
+
+		menu.addSeparator(parent);
+		this.promptChange(menu, mxResources.get('custom'), '', mxConstants.DEFAULT_FONTFAMILY,
+			mxConstants.STYLE_FONTFAMILY, parent);
+	})));
+	this.put('fontSize', new Menu(mxUtils.bind(this, function(menu, parent) {
+		var sizes = [6, 8, 9, 10, 11, 12, 14, 18, 24, 36, 48, 72];
+
+		for (var i = 0; i < sizes.length; i++) {
+			this.styleChange(menu, sizes[i], [mxConstants.STYLE_FONTSIZE], [sizes[i]],
+				null, parent);
+		}
+
+		menu.addSeparator(parent);
+		this.promptChange(menu, mxResources.get('custom'), '(pt)', '12',
+			mxConstants.STYLE_FONTSIZE, parent);
+	})));
+	this.put('linewidth', new Menu(mxUtils.bind(this, function(menu, parent) {
+		var sizes = [1, 2, 3, 4, 8, 12, 16, 24];
+
+		for (var i = 0; i < sizes.length; i++) {
+			this.styleChange(menu, sizes[i] + 'px', [mxConstants.STYLE_STROKEWIDTH], [
+				sizes[i]
+			], null, parent);
+		}
+
+		menu.addSeparator(parent);
+		this.promptChange(menu, mxResources.get('custom'), '(px)', '1',
+			mxConstants.STYLE_STROKEWIDTH, parent);
+	})));
+	this.put('line', new Menu(mxUtils.bind(this, function(menu, parent) {
+		this.styleChange(menu, mxResources.get('straight'), [mxConstants.STYLE_EDGE], [
+			null
+		], null, parent);
+		this.styleChange(menu, mxResources.get('entityRelation'), [mxConstants.STYLE_EDGE], [
+			'entityRelationEdgeStyle'
+		], null, parent);
+		menu.addSeparator(parent);
+		this.styleChange(menu, mxResources.get('horizontal'), [mxConstants.STYLE_EDGE,
+			mxConstants.STYLE_ELBOW
+		], ['elbowEdgeStyle', 'horizontal'], null, parent);
+		this.styleChange(menu, mxResources.get('vertical'), [mxConstants.STYLE_EDGE,
+			mxConstants.STYLE_ELBOW
+		], ['elbowEdgeStyle', 'vertical'], null, parent);
+		menu.addSeparator(parent);
+		this.styleChange(menu, mxResources.get('manual'), [mxConstants.STYLE_EDGE], [
+			'segmentEdgeStyle'
+		], null, parent);
+		this.styleChange(menu, mxResources.get('automatic'), [mxConstants.STYLE_EDGE], [
+			'orthogonalEdgeStyle'
+		], null, parent);
+	})));
+	this.put('lineend', new Menu(mxUtils.bind(this, function(menu, parent) {
+		this.styleChange(menu, mxResources.get('classic'), [mxConstants.STYLE_ENDARROW], [
+			mxConstants.ARROW_CLASSIC
+		], null, parent);
+		this.styleChange(menu, mxResources.get('openArrow'), [mxConstants.STYLE_ENDARROW], [
+			mxConstants.ARROW_OPEN
+		], null, parent);
+		this.styleChange(menu, mxResources.get('block'), [mxConstants.STYLE_ENDARROW], [
+			mxConstants.ARROW_BLOCK
+		], null, parent);
+		menu.addSeparator(parent);
+		this.styleChange(menu, mxResources.get('oval'), [mxConstants.STYLE_ENDARROW], [
+			mxConstants.ARROW_OVAL
+		], null, parent);
+		this.styleChange(menu, mxResources.get('diamond'), [mxConstants.STYLE_ENDARROW], [
+			mxConstants.ARROW_DIAMOND
+		], null, parent);
+		this.styleChange(menu, mxResources.get('diamondThin'), [mxConstants.STYLE_ENDARROW], [
+			mxConstants.ARROW_DIAMOND_THIN
+		], null, parent);
+		menu.addSeparator(parent);
+		this.styleChange(menu, mxResources.get('none'), [mxConstants.STYLE_ENDARROW], [
+			mxConstants.NONE
+		], null, parent);
+		menu.addSeparator(parent);
+		menu.addItem(mxResources.get('transparent'), null, function() {
+			graph.toggleCellStyles('endFill', true);
+		}, parent, null, true);
+		menu.addSeparator(parent);
+		this.promptChange(menu, mxResources.get('size'), '(px)', mxConstants.DEFAULT_MARKERSIZE,
+			mxConstants.STYLE_ENDSIZE, parent);
+	})));
+	this.put('linestart', new Menu(mxUtils.bind(this, function(menu, parent) {
+		this.styleChange(menu, mxResources.get('classic'), [mxConstants.STYLE_STARTARROW], [
+			mxConstants.ARROW_CLASSIC
+		], null, parent);
+		this.styleChange(menu, mxResources.get('openArrow'), [mxConstants.STYLE_STARTARROW], [
+			mxConstants.ARROW_OPEN
+		], null, parent);
+		this.styleChange(menu, mxResources.get('block'), [mxConstants.STYLE_STARTARROW], [
+			mxConstants.ARROW_BLOCK
+		], null, parent);
+		menu.addSeparator(parent);
+		this.styleChange(menu, mxResources.get('oval'), [mxConstants.STYLE_STARTARROW], [
+			mxConstants.ARROW_OVAL
+		], null, parent);
+		this.styleChange(menu, mxResources.get('diamond'), [mxConstants.STYLE_STARTARROW], [
+			mxConstants.ARROW_DIAMOND
+		], null, parent);
+		this.styleChange(menu, mxResources.get('diamondThin'), [mxConstants.STYLE_STARTARROW], [
+			mxConstants.ARROW_DIAMOND_THIN
+		], null, parent);
+		menu.addSeparator(parent);
+		this.styleChange(menu, mxResources.get('none'), [mxConstants.STYLE_STARTARROW], [
+			mxConstants.NONE
+		], null, parent);
+		menu.addSeparator(parent);
+		menu.addItem(mxResources.get('transparent'), null, function() {
+			graph.toggleCellStyles('startFill', true);
+		}, parent, null, true);
+		menu.addSeparator(parent);
+		this.promptChange(menu, mxResources.get('size'), '(px)', mxConstants.DEFAULT_MARKERSIZE,
+			mxConstants.STYLE_STARTSIZE, parent);
+	})));
+	this.put('spacing', new Menu(mxUtils.bind(this, function(menu, parent) {
+		// Uses shadow action and line menu to analyze selection
+		var vertexSelected = this.editorUi.actions.get('shadow').enabled;
+		var edgeSelected = this.get('line').enabled;
+
+		if (vertexSelected || menu.showDisabled) {
+			this.promptChange(menu, mxResources.get('top'), '(px)', '0',
+				mxConstants.STYLE_SPACING_TOP, parent, vertexSelected);
+			this.promptChange(menu, mxResources.get('right'), '(px)', '0',
+				mxConstants.STYLE_SPACING_RIGHT, parent, vertexSelected);
+			this.promptChange(menu, mxResources.get('bottom'), '(px)', '0',
+				mxConstants.STYLE_SPACING_BOTTOM, parent, vertexSelected);
+			this.promptChange(menu, mxResources.get('left'), '(px)', '0',
+				mxConstants.STYLE_SPACING_LEFT, parent, vertexSelected);
+			menu.addSeparator(parent);
+			this.promptChange(menu, mxResources.get('global'), '(px)', '0',
+				mxConstants.STYLE_SPACING, parent, vertexSelected);
+			this.promptChange(menu, mxResources.get('perimeter'), '(px)', '0',
+				mxConstants.STYLE_PERIMETER_SPACING, parent, vertexSelected);
+		}
+
+		if (edgeSelected || menu.showDisabled) {
+			menu.addSeparator(parent);
+			this.promptChange(menu, mxResources.get('sourceSpacing'), '(px)', '0',
+				mxConstants.STYLE_SOURCE_PERIMETER_SPACING, parent, edgeSelected);
+			this.promptChange(menu, mxResources.get('targetSpacing'), '(px)', '0',
+				mxConstants.STYLE_TARGET_PERIMETER_SPACING, parent, edgeSelected);
+		}
+	})));
+	this.put('format', new Menu(mxUtils.bind(this, function(menu, parent) {
+		this.addMenuItem(menu, 'style', parent);
+	})));
+	this.put('text', new Menu(mxUtils.bind(this, function(menu, parent) {
+		var enabled = this.get('text').enabled;
+		menu.addSeparator(parent);
+		this.addSubmenu('fontFamily', menu, parent);
+		this.addSubmenu('fontSize', menu, parent);
+		this.addMenuItems(menu, ['-', 'bold', 'italic', 'underline', '-'],
+			parent);
+		this.addSubmenu('alignment', menu, parent);
+		this.addMenuItem(menu, 'wordWrap', parent);
+		menu.addSeparator(parent);
+		this.promptChange(menu, mxResources.get('textOpacity'), '(%)', '100',
+			mxConstants.STYLE_TEXT_OPACITY, parent, enabled);
+		menu.addItem(mxResources.get('hide'), null, function() {
+			graph.toggleCellStyles(mxConstants.STYLE_NOLABEL, false);
+		}, parent, null, enabled);
+	})));
+	this.put('alignment', new Menu(mxUtils.bind(this, function(menu, parent) {
+		this.styleChange(menu, mxResources.get('leftAlign'), [mxConstants.STYLE_ALIGN], [
+			mxConstants.ALIGN_LEFT
+		], null, parent);
+		this.styleChange(menu, mxResources.get('center'), [mxConstants.STYLE_ALIGN], [
+			mxConstants.ALIGN_CENTER
+		], null, parent);
+		this.styleChange(menu, mxResources.get('rightAlign'), [mxConstants.STYLE_ALIGN], [
+			mxConstants.ALIGN_RIGHT
+		], null, parent);
+		menu.addSeparator(parent);
+		this.styleChange(menu, mxResources.get('topAlign'), [mxConstants.STYLE_VERTICAL_ALIGN], [
+			mxConstants.ALIGN_TOP
+		], null, parent);
+		this.styleChange(menu, mxResources.get('middle'), [mxConstants.STYLE_VERTICAL_ALIGN], [
+			mxConstants.ALIGN_MIDDLE
+		], null, parent);
+		this.styleChange(menu, mxResources.get('bottomAlign'), [mxConstants.STYLE_VERTICAL_ALIGN], [
+			mxConstants.ALIGN_BOTTOM
+		], null, parent);
+		menu.addSeparator(parent);
+		this.addSubmenu('position', menu, parent);
+		this.addSubmenu('spacing', menu, parent);
+		menu.addSeparator(parent);
+		var enabled = this.get('text').enabled;
+		menu.addItem(mxResources.get('vertical'), null, function() {
+			graph.toggleCellStyles(mxConstants.STYLE_HORIZONTAL, true);
+		}, parent, null, enabled);
+	})));
+	this.put('position', new Menu(mxUtils.bind(this, function(menu, parent) {
+		this.styleChange(menu, mxResources.get('left'), [mxConstants.STYLE_LABEL_POSITION,
+			mxConstants.STYLE_ALIGN
+		], [mxConstants.ALIGN_LEFT, mxConstants.ALIGN_RIGHT], null, parent);
+		this.styleChange(menu, mxResources.get('center'), [mxConstants.STYLE_LABEL_POSITION,
+			mxConstants.STYLE_ALIGN
+		], [mxConstants.ALIGN_CENTER, mxConstants.ALIGN_CENTER], null, parent);
+		this.styleChange(menu, mxResources.get('right'), [mxConstants.STYLE_LABEL_POSITION,
+			mxConstants.STYLE_ALIGN
+		], [mxConstants.ALIGN_RIGHT, mxConstants.ALIGN_LEFT], null, parent);
+		menu.addSeparator(parent);
+		this.styleChange(menu, mxResources.get('top'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION,
+			mxConstants.STYLE_VERTICAL_ALIGN
+		], [mxConstants.ALIGN_TOP, mxConstants.ALIGN_BOTTOM], null, parent);
+		this.styleChange(menu, mxResources.get('middle'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION,
+			mxConstants.STYLE_VERTICAL_ALIGN
+		], [mxConstants.ALIGN_MIDDLE, mxConstants.ALIGN_MIDDLE], null, parent);
+		this.styleChange(menu, mxResources.get('bottom'), [mxConstants.STYLE_VERTICAL_LABEL_POSITION,
+			mxConstants.STYLE_VERTICAL_ALIGN
+		], [mxConstants.ALIGN_BOTTOM, mxConstants.ALIGN_TOP], null, parent);
+	})));
+	this.put('direction', new Menu(mxUtils.bind(this, function(menu, parent) {
+		menu.addItem(mxResources.get('flipH'), null, function() {
+			graph.toggleCellStyles(mxConstants.STYLE_FLIPH, false);
+		}, parent);
+		menu.addItem(mxResources.get('flipV'), null, function() {
+			graph.toggleCellStyles(mxConstants.STYLE_FLIPV, false);
+		}, parent);
+		this.addMenuItems(menu, ['-', 'tilt', 'rotation'], parent);
+	})));
+	this.put('align', new Menu(mxUtils.bind(this, function(menu, parent) {
+		menu.addItem(mxResources.get('leftAlign'), null, function() {
+			graph.alignCells(mxConstants.ALIGN_LEFT);
+		}, parent);
+		menu.addItem(mxResources.get('center'), null, function() {
+			graph.alignCells(mxConstants.ALIGN_CENTER);
+		}, parent);
+		menu.addItem(mxResources.get('rightAlign'), null, function() {
+			graph.alignCells(mxConstants.ALIGN_RIGHT);
+		}, parent);
+		menu.addSeparator(parent);
+		menu.addItem(mxResources.get('topAlign'), null, function() {
+			graph.alignCells(mxConstants.ALIGN_TOP);
+		}, parent);
+		menu.addItem(mxResources.get('middle'), null, function() {
+			graph.alignCells(mxConstants.ALIGN_MIDDLE);
+		}, parent);
+		menu.addItem(mxResources.get('bottomAlign'), null, function() {
+			graph.alignCells(mxConstants.ALIGN_BOTTOM);
+		}, parent);
+	})));
+	this.put('layout', new Menu(mxUtils.bind(this, function(menu, parent) {
+		// menu.addItem(mxResources.get('horizontalTree'), null, mxUtils.bind(this, function()
+		// {
+		// 	if (!graph.isSelectionEmpty())
+		// 	{
+		// 		var layout = new mxCompactTreeLayout(graph, true);
+		// 		layout.edgeRouting = false;
+		// 		layout.levelDistance = 30;
+		//    		this.editorUi.executeLayout(layout, true, true);
+		// 	}
+		// }), parent);
+		// menu.addItem(mxResources.get('verticalTree'), null, mxUtils.bind(this, function()
+		// {
+		// 	if (!graph.isSelectionEmpty())
+		// 	{
+		// 		var layout = new mxCompactTreeLayout(graph, false);
+		// 		layout.edgeRouting = false;
+		// 		layout.levelDistance = 30;
+		//    		this.editorUi.executeLayout(layout, true, true);
+		// 	}
+		// }), parent);
+		// menu.addSeparator(parent);
+		menu.addItem(mxResources.get('horizontalFlow'), null, mxUtils.bind(this,
+			function() {
+				var layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_WEST);
+				this.editorUi.executeLayout(layout, true, true);
+			}), parent);
+		menu.addItem(mxResources.get('verticalFlow'), null, mxUtils.bind(this,
+			function() {
+				var layout = new mxHierarchicalLayout(graph, mxConstants.DIRECTION_NORTH);
+				this.editorUi.executeLayout(layout, true, true);
+			}), parent);
+		//menu.addSeparator(parent);
+		// menu.addItem(mxResources.get('organic'), null, mxUtils.bind(this, function()
+		// {
+		// 	var layout = new mxFastOrganicLayout(graph);
+		//   		this.editorUi.executeLayout(layout, true, true);
+		// }), parent);
+		// menu.addItem(mxResources.get('circle'), null, mxUtils.bind(this, function()
+		// {
+		// 	var layout = new mxCircleLayout(graph);
+		//   		this.editorUi.executeLayout(layout, true, true, graph.getSelectionCells());
+		// }), parent);
+	})));
+	this.put('navigation', new Menu(mxUtils.bind(this, function(menu, parent) {
+		this.addMenuItems(menu, ['home', '-', 'exitGroup', 'enterGroup', '-',
+			'expand', 'collapse'
+		], parent);
+	})));
+	this.put('arrange', new Menu(mxUtils.bind(this, function(menu, parent) {
+		this.addMenuItems(menu, ['toFront', 'toBack', '-'], parent);
+		//this.addSubmenu('direction', menu, parent);
+		this.addSubmenu('layout', menu, parent);
+		//this.addSubmenu('align', menu, parent);
+		menu.addSeparator(parent);
+		//this.addSubmenu('navigation', menu, parent);
+		this.addMenuItems(menu, ['-', 'group', 'ungroup', 'removeFromGroup'],
+			parent);
+		//this.addMenuItems(menu, ['-', 'group', 'ungroup', 'removeFromGroup', '-', 'autosize'], parent);
+	})));
+	this.put('view', new Menu(mxUtils.bind(this, function(menu, parent) {
+		this.addMenuItems(menu, ['actualSize'], parent);
+		menu.addSeparator();
+		var scales = [0.25, 0.5, 0.75, 1, 2, 4];
+
+		for (var i = 0; i < scales.length; i++) {
+			(function(scale) {
+				menu.addItem((scale * 100) + '%', null, function() {
+					graph.zoomTo(scale);
+				}, parent);
+			})(scales[i]);
+		}
+
+		this.addMenuItems(menu, ['-', 'zoomIn', 'zoomOut', '-', 'fitWindow',
+			'customZoom', '-', 'fitPage', 'fitPageWidth'
+		], parent);
+	})));
+	this.put('file', new Menu(mxUtils.bind(this, function(menu, parent) {
+		this.addMenuItems(menu, ['new', 'open', '-', 'save', 'saveAs', 'publish',
+			'-', 'variable', '-', 'import', 'export', '-', 'editFile', '-',
+			'print'
+		], parent);
+	})));
+	this.put('edit', new Menu(mxUtils.bind(this, function(menu, parent) {
+		this.addMenuItems(menu, ['undo', 'redo', '-', 'cut', 'copy', 'paste',
+			'delete', '-', 'duplicate', '-',
+			'selectVertices', 'selectEdges', 'selectAll'
+		]);
+	})));
+	this.put('help', new Menu(mxUtils.bind(this, function(menu, parent) {
+		this.addMenuItems(menu, ['help', '-', 'about']);
+	})));
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+Menus.prototype.put = function(name, menu) {
+	this.menus[name] = menu;
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+Menus.prototype.get = function(name) {
+	return this.menus[name];
+};
+
+/**
+ * Adds the given submenu.
+ */
+Menus.prototype.addSubmenu = function(name, menu, parent) {
+	var enabled = this.get(name).enabled;
+
+	if (menu.showDisabled || enabled) {
+		var submenu = menu.addItem(mxResources.get(name), null, null, parent, null,
+			enabled);
+		this.addMenu(name, menu, submenu);
+	}
+};
+
+/**
+ * Adds the label menu items to the given menu and parent.
+ */
+Menus.prototype.addMenu = function(name, popupMenu, parent) {
+	var menu = this.get(name);
+
+	if (menu != null && (popupMenu.showDisabled || menu.enabled)) {
+		this.get(name).execute(popupMenu, parent);
+	}
+};
+
+/**
+ * Adds a style change item to the given menu.
+ */
+Menus.prototype.styleChange = function(menu, label, keys, values, sprite,
+	parent) {
+	return menu.addItem(label, null, mxUtils.bind(this, function() {
+		var graph = this.editorUi.editor.graph;
+
+		graph.getModel().beginUpdate();
+		try {
+			for (var i = 0; i < keys.length; i++) {
+				graph.setCellStyles(keys[i], values[i]);
+			}
+		} finally {
+			graph.getModel().endUpdate();
+		}
+	}), parent, sprite);
+};
+
+/**
+ * Adds a style change item with a prompt to the given menu.
+ */
+Menus.prototype.promptChange = function(menu, label, hint, defaultValue, key,
+	parent, enabled) {
+	return menu.addItem(label, null, mxUtils.bind(this, function() {
+		var graph = this.editorUi.editor.graph;
+		var value = defaultValue;
+		var state = graph.getView().getState(graph.getSelectionCell());
+
+		if (state != null) {
+			value = state.style[key] || value;
+		}
+
+		value = mxUtils.prompt(mxResources.get('enterValue') + ((hint.length > 0) ?
+			(' ' + hint) : ''), value);
+
+		if (value != null && value.length > 0) {
+			graph.setCellStyles(key, value);
+		}
+	}), parent, null, enabled);
+};
+
+/**
+ * Creates the keyboard event handler for the current graph and history.
+ */
+Menus.prototype.addMenuItem = function(menu, key, parent) {
+	var action = this.editorUi.actions.get(key);
+
+	if (action != null && (menu.showDisabled || action.enabled)) {
+		var item = menu.addItem(action.label, null, action.funct, parent, null,
+			action.enabled);
+
+		// Adds checkmark image
+		if (action.toggleAction && action.isSelected()) {
+			this.addCheckmark(item);
+		}
+
+		this.addShortcut(item, action);
+
+		return item;
+	}
+
+	return null;
+};
+
+/**
+ * Adds a checkmark to the given menuitem.
+ */
+Menus.prototype.addShortcut = function(item, action) {
+	if (action.shortcut != null) {
+		var td = item.firstChild.nextSibling.nextSibling;
+		var span = document.createElement('span');
+		span.style.color = 'gray';
+		mxUtils.write(span, action.shortcut);
+		td.appendChild(span);
+	}
+};
+
+/**
+ * Adds a checkmark to the given menuitem.
+ */
+Menus.prototype.addCheckmark = function(item) {
+	var td = item.firstChild.nextSibling;
+	td.style.backgroundImage = 'url(' + IMAGE_PATH + '/checkmark.gif)';
+	td.style.backgroundRepeat = 'no-repeat';
+	td.style.backgroundPosition = '2px 50%';
+};
+
+/**
+ * Creates the keyboard event handler for the current graph and history.
+ */
+Menus.prototype.addMenuItems = function(menu, keys, parent) {
+	for (var i = 0; i < keys.length; i++) {
+		if (keys[i] == '-') {
+			menu.addSeparator(parent);
+		} else {
+			this.addMenuItem(menu, keys[i], parent);
+		}
+	}
+};
+
+/**
+ * Creates the keyboard event handler for the current graph and history.
+ */
+Menus.prototype.createPopupMenu = function(menu, cell, evt) {
+	var graph = this.editorUi.editor.graph;
+	menu.smartSeparators = true;
+
+	if (graph.isSelectionEmpty()) {
+		this.addMenuItems(menu, ['undo', 'redo', '-', 'paste', '-']);
+	} else {
+		this.addMenuItems(menu, ['delete', '-', 'cut', 'copy', '-', 'duplicate']);
+
+		if (graph.getSelectionCount() == 1 && graph.getModel().isEdge(graph.getSelectionCell())) {
+			this.addMenuItems(menu, ['setAsDefaultEdge']);
+		}
+
+		menu.addSeparator();
+	}
+
+	if (graph.getSelectionCount() > 0) {
+		this.addMenuItems(menu, ['toFront', 'toBack', '-']);
+
+		if (graph.getModel().isEdge(graph.getSelectionCell())) {
+			var isWaypoint = false;
+			var cell = graph.getSelectionCell();
+
+			if (cell != null && graph.getModel().isEdge(cell)) {
+				var handler = graph.selectionCellsHandler.getHandler(cell);
+
+				if (handler instanceof mxEdgeHandler && handler.bends != null && handler.bends
+					.length > 2) {
+					var index = handler.getHandleForEvent(new mxMouseEvent(evt));
+
+					// Configures removeWaypoint action before execution
+					var rmWaypointAction = this.editorUi.actions.get('removeWaypoint');
+					rmWaypointAction.handler = handler;
+					rmWaypointAction.index = index;
+
+					isWaypoint = index > 0 && index < handler.bends.length;
+				}
+			}
+
+			this.addMenuItems(menu, ['-', (isWaypoint) ? 'removeWaypoint' :
+				'addWaypoint'
+			]);
+		} else if (graph.getSelectionCount() > 1) {
+			menu.addSeparator();
+			this.addMenuItems(menu, ['group']);
+		}
+
+		menu.addSeparator();
+
+		if (graph.getSelectionCount() == 1) {
+			var link = graph.getLinkForCell(graph.getSelectionCell());
+
+			if (link != null) {
+				this.addMenuItems(menu, ['openLink']);
+			}
+		}
+	} else {
+		this.addMenuItems(menu, ['-', 'selectVertices', 'selectEdges', '-',
+			'selectAll'
+		]);
+	}
+};
+
+/**
+ * Creates the keyboard event handler for the current graph and history.
+ */
+Menus.prototype.createMenubar = function(container) {
+	var menubar = new Menubar(this.editorUi, container);
+	var menus = ['file', 'edit', 'view', 'format', 'text', 'arrange',
+		'help'
+	];
+
+	for (var i = 0; i < menus.length; i++) {
+		menubar.addMenu(mxResources.get(menus[i]), this.get(menus[i]).funct);
+	}
+
+	return menubar;
+};
+
+/**
+ * Construcs a new menubar for the given editor.
+ */
+function Menubar(editorUi, container) {
+	this.editorUi = editorUi;
+	this.container = container;
+
+	// Global handler to hide the current menu
+	mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt) {
+		this.hideMenu();
+	}));
+};
+
+/**
+ * Adds the menubar elements.
+ */
+Menubar.prototype.hideMenu = function() {
+	if (this.currentMenu != null) {
+		this.currentMenu.hideMenu();
+	}
+};
+
+/**
+ * Adds a submenu to this menubar.
+ */
+Menubar.prototype.addMenu = function(label, funct) {
+	var elt = document.createElement('a');
+	elt.setAttribute('href', 'javascript:void(0);');
+	elt.className = 'geItem';
+	mxUtils.write(elt, label);
+
+	this.addMenuHandler(elt, funct);
+	this.container.appendChild(elt);
+
+	return elt;
+};
+
+/**
+ * Adds a handler for showing a menu in the given element.
+ */
+Menubar.prototype.addMenuHandler = function(elt, funct) {
+	if (funct != null) {
+		var show = true;
+
+		var clickHandler = mxUtils.bind(this, function(evt) {
+			if (show && elt.enabled == null || elt.enabled) {
+				this.editorUi.editor.graph.panningHandler.hideMenu();
+				var menu = new mxPopupMenu(funct);
+				menu.div.className += ' geMenubarMenu';
+				menu.smartSeparators = true;
+				menu.showDisabled = true;
+				menu.autoExpand = true;
+
+				// Disables autoexpand and destroys menu when hidden
+				menu.hideMenu = mxUtils.bind(this, function() {
+					mxPopupMenu.prototype.hideMenu.apply(menu, arguments);
+					menu.destroy();
+					this.currentMenu = null;
+					this.currentElt = null;
+				});
+
+				// Added width of the page-sidebar
+				var x = elt.offsetLeft + document.getElementById('page-sidebar').offsetWidth +
+					22;
+				// Added static height of the page-navbar
+				var y = elt.offsetTop + elt.offsetHeight + 140;
+
+				menu.popup(x, y, null, evt);
+
+				//menu.popup(elt.offsetLeft + 4, elt.offsetTop + elt.offsetHeight + 4, null, evt);
+				this.currentMenu = menu;
+				this.currentElt = elt;
+			}
+
+			show = true;
+			mxEvent.consume(evt);
+		});
+
+		// Shows menu automatically while in expanded state
+		mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) {
+			if (this.currentMenu != null && this.currentElt != elt) {
+				this.hideMenu();
+				clickHandler(evt);
+			}
+		}));
+
+		// Hides menu if already showing
+		mxEvent.addListener(elt, 'mousedown', mxUtils.bind(this, function() {
+			show = this.currentElt != elt;
+		}));
+
+		mxEvent.addListener(elt, 'click', clickHandler);
+	}
+};
+
+/**
+ * Constructs a new action for the given parameters.
+ */
+function Menu(funct, enabled) {
+	mxEventSource.call(this);
+	this.funct = funct;
+	this.enabled = (enabled != null) ? enabled : true;
+};
+
+// Menu inherits from mxEventSource
+mxUtils.extend(Menu, mxEventSource);
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Menu.prototype.setEnabled = function(value) {
+	if (this.enabled != value) {
+		this.enabled = value;
+		this.fireEvent(new mxEventObject('stateChanged'));
+	}
+};
+
+/**
+ * Sets the enabled state of the action and fires a stateChanged event.
+ */
+Menu.prototype.execute = function(menu, parent) {
+	this.funct(menu, parent);
+};
diff --git a/public/assets/plugins/mxgraph/js/Shapes.js b/public/assets/plugins/mxgraph/js/Shapes.js
new file mode 100644
index 0000000..42e13ca
--- /dev/null
+++ b/public/assets/plugins/mxgraph/js/Shapes.js
@@ -0,0 +1,1234 @@
+/**
+ * $Id: Shapes.js,v 1.13 2013-02-02 06:44:30 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+
+/**
+ * Registers shapes.
+ */
+(function()
+{
+	// Cube Shape, supports size style
+	function CubeShape() { };
+	CubeShape.prototype = new mxCylinder();
+	CubeShape.prototype.constructor = CubeShape;
+	CubeShape.prototype.size = 20;
+	CubeShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+	{
+		var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size)));
+
+		if (isForeground)
+		{
+			path.moveTo(s, h);
+			path.lineTo(s, s);
+			path.lineTo(0, 0);
+			path.moveTo(s, s);
+			path.lineTo(w, s);
+			path.end();
+		}
+		else
+		{
+			path.moveTo(0, 0);
+			path.lineTo(w - s, 0);
+			path.lineTo(w, s);
+			path.lineTo(w, h);
+			path.lineTo(s, h);
+			path.lineTo(0, h - s);
+			path.lineTo(0, 0);
+			path.close();
+			path.end();
+		}
+	};
+
+	mxCellRenderer.prototype.defaultShapes['cube'] = CubeShape;
+
+	// Note Shape, supports size style
+	function NoteShape() { };
+	NoteShape.prototype = new mxCylinder();
+	NoteShape.prototype.constructor = NoteShape;
+	NoteShape.prototype.size = 30;
+	NoteShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+	{
+		var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size)));
+
+		if (isForeground)
+		{
+			path.moveTo(w - s, 0);
+			path.lineTo(w - s, s);
+			path.lineTo(w, s);
+			path.end();
+		}
+		else
+		{
+			path.moveTo(0, 0);
+			path.lineTo(w - s, 0);
+			path.lineTo(w, s);
+			path.lineTo(w, h);
+			path.lineTo(0, h);
+			path.lineTo(0, 0);
+			path.close();
+			path.end();
+		}
+	};
+
+	mxCellRenderer.prototype.defaultShapes['note'] = NoteShape;
+
+	// Folder Shape, supports tabWidth, tabHeight styles
+	function FolderShape() { };
+	FolderShape.prototype = new mxCylinder();
+	FolderShape.prototype.constructor = FolderShape;
+	FolderShape.prototype.tabWidth = 60;
+	FolderShape.prototype.tabHeight = 20;
+	FolderShape.prototype.tabPosition = 'right';
+	FolderShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+	{
+		var tw = mxUtils.getValue(this.style, 'tabWidth', this.tabWidth);
+		var th = mxUtils.getValue(this.style, 'tabHeight', this.tabHeight);
+		var tp = mxUtils.getValue(this.style, 'tabPosition', this.tabPosition);
+		var dx = Math.min(w, tw);
+		var dy = Math.min(h, th);
+
+		if (isForeground)
+		{
+			if (tp == 'left')
+			{
+				path.moveTo(0, dy);
+				path.lineTo(dx, dy);
+			}
+			// Right is default
+			else
+			{
+				path.moveTo(w - dx, dy);
+				path.lineTo(w, dy);
+			}
+			
+			path.end();
+		}
+		else
+		{
+			if (tp == 'left')
+			{
+				path.moveTo(0, 0);
+				path.lineTo(dx, 0);
+				path.lineTo(dx, dy);
+				path.lineTo(w, dy);
+			}
+			// Right is default
+			else
+			{
+				path.moveTo(0, dy);
+				path.lineTo(w - dx, dy);
+				path.lineTo(w - dx, 0);
+				path.lineTo(w, 0);
+			}
+			
+			path.lineTo(w, h);
+			path.lineTo(0, h);
+			path.lineTo(0, dy);
+			path.close();
+			path.end();
+		}
+	};
+
+	mxCellRenderer.prototype.defaultShapes['folder'] = FolderShape;
+
+	// Card Shape, supports size style
+	function CardShape() { };
+	CardShape.prototype = new mxCylinder();
+	CardShape.prototype.constructor = CardShape;
+	CardShape.prototype.size = 30;
+	CardShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+	{
+		var s = Math.min(w, Math.min(h, mxUtils.getValue(this.style, 'size', this.size)));
+
+		if (!isForeground)
+		{
+			path.moveTo(s, 0);
+			path.lineTo(w, 0);
+			path.lineTo(w, h);
+			path.lineTo(0, h);
+			path.lineTo(0, s);
+			path.lineTo(s, 0);
+			path.close();
+			path.end();
+		}
+	};
+
+	mxCellRenderer.prototype.defaultShapes['card'] = CardShape;
+
+	// Tape Shape, supports size style
+	function TapeShape() { };
+	TapeShape.prototype = new mxCylinder();
+	TapeShape.prototype.constructor = TapeShape;
+	TapeShape.prototype.size = 0.4;
+	TapeShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+	{
+		var s = mxUtils.getValue(this.style, 'size', this.size);
+		var dy = h * s;
+		var fy = 1.4;
+
+		if (!isForeground)
+		{
+			path.moveTo(0, dy / 2);
+			path.quadTo(w / 4, dy * fy, w / 2, dy / 2);
+			path.quadTo(w * 3 / 4, dy * (1 - fy), w, dy / 2);
+			path.lineTo(w, h - dy / 2);
+			path.quadTo(w * 3 / 4, h - dy * fy, w / 2, h - dy / 2);
+			path.quadTo(w / 4, h - dy * (1 - fy), 0, h - dy / 2);
+			path.lineTo(0, dy / 2);
+			path.close();
+			path.end();
+		}
+	};
+
+	mxCellRenderer.prototype.defaultShapes['tape'] = TapeShape;
+
+	// Tape Shape, supports size style
+	function StepShape() { };
+	StepShape.prototype = new mxCylinder();
+	StepShape.prototype.constructor = StepShape;
+	StepShape.prototype.size = 0.2;
+	StepShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+	{
+		var s =  w * mxUtils.getValue(this.style, 'size', this.size);
+
+		if (!isForeground)
+		{
+			path.moveTo(0, 0);
+			path.lineTo(w - s, 0);
+			path.lineTo(w, h / 2);
+			path.lineTo(w - s, h);
+			path.lineTo(0, h);
+			path.lineTo(s, h / 2);
+			path.close();
+			path.end();
+		}
+	};
+
+	mxCellRenderer.prototype.defaultShapes['step'] = StepShape;
+
+	// Plus Shape
+	function PlusShape()
+	{
+		mxRectangleShape.call(this);
+	};
+	mxUtils.extend(PlusShape, mxRectangleShape);
+	PlusShape.prototype.isHtmlAllowed = function()
+	{
+		return false;
+	};
+	PlusShape.prototype.paintForeground = function(c, x, y, w, h)
+	{
+		var border = Math.min(w / 5, h / 5) + 1;
+		
+		c.begin();
+		c.moveTo(x + w / 2, y + border);
+		c.lineTo(x + w / 2, y + h - border);
+		c.moveTo(x + border, y + h / 2);
+		c.lineTo(x + w - border, y + h / 2);
+		c.end();
+		c.stroke();
+		mxRectangleShape.prototype.paintForeground.apply(this, arguments);
+	};
+
+	mxCellRenderer.prototype.defaultShapes['plus'] = PlusShape;
+
+	// CompositeShape
+	function ExtendedShape()
+	{
+		mxRectangleShape.call(this);
+	};
+	mxUtils.extend(ExtendedShape, mxRectangleShape);
+	ExtendedShape.prototype.isHtmlAllowed = function()
+	{
+		return false;
+	};
+	ExtendedShape.prototype.paintForeground = function(c, x, y, w, h)
+	{
+		if (this.style != null)
+		{
+			if (this.style['double'] == 1)
+			{
+				var inset = Math.max(2, this.strokewidth + 1);
+	
+				mxRectangleShape.prototype.paintBackground.call(this, c, x + inset, y + inset, w - 2 * inset, h - 2 * inset);
+				mxRectangleShape.prototype.paintForeground.apply(this, arguments);
+				
+				x += inset;
+				y += inset;
+				w -= 2 * inset;
+				h -= 2 * inset;
+			}
+			
+			c.setDashed(false);
+			
+			// Draws the symbols defined in the style. The symbols are
+			// numbered from 1...n. Possible postfixes are align,
+			// verticalAlign, spacing, arcSpacing, width, height
+			var counter = 0;
+			var shape = null;
+			
+			do
+			{
+				shape = mxCellRenderer.prototype.defaultShapes[this.style['symbol' + counter]];
+				
+				if (shape != null)
+				{
+					var align = this.style['symbol' + counter + 'Align'];
+					var valign = this.style['symbol' + counter + 'VerticalAlign'];
+					var width = this.style['symbol' + counter + 'Width'];
+					var height = this.style['symbol' + counter + 'Height'];
+					var spacing = this.style['symbol' + counter + 'Spacing'] || 0;
+					var arcspacing = this.style['symbol' + counter + 'ArcSpacing'];
+					
+					if (arcspacing != null)
+					{
+						spacing += this.getArcSize(w + this.strokewidth, h + this.strokewidth) * arcspacing;
+					}
+					
+					var x2 = x;
+					var y2 = y;
+					
+					if (align == mxConstants.ALIGN_CENTER)
+					{
+						x2 += (w - width) / 2;
+					}
+					else if (align == mxConstants.ALIGN_RIGHT)
+					{
+						x2 += w - width - spacing;
+					}
+					else
+					{
+						x2 += spacing;
+					}
+					
+					if (valign == mxConstants.ALIGN_MIDDLE)
+					{
+						y2 += (h - height) / 2;
+					}
+					else if (valign == mxConstants.ALIGN_BOTTOM)
+					{
+						y2 += h - height - spacing;
+					}
+					else
+					{
+						y2 += spacing;
+					}
+					
+					c.save();
+					
+					// Small hack to pass style along into subshape
+					var tmp = new shape();
+					// TODO: Clone style and override settings (eg. strokewidth)
+					tmp.style = this.style;
+					shape.prototype.paintVertexShape.call(tmp, c, x2, y2, width, height);
+					c.restore();
+				}
+				
+				counter++;
+			}
+			while (shape != null);
+		}
+	};
+
+	mxCellRenderer.prototype.defaultShapes['ext'] = ExtendedShape;
+	
+	// Tape Shape, supports size style
+	function MessageShape() { };
+	MessageShape.prototype = new mxCylinder();
+	MessageShape.prototype.constructor = MessageShape;
+	MessageShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+	{
+		if (isForeground)
+		{
+			path.moveTo(0, 0);
+			path.lineTo(w / 2, h / 2);
+			path.lineTo(w, 0);
+			path.end();
+		}
+		else
+		{
+			path.moveTo(0, 0);
+			path.lineTo(w, 0);
+			path.lineTo(w, h);
+			path.lineTo(0, h);
+			path.close();
+		}
+	};
+
+	mxCellRenderer.prototype.defaultShapes['message'] = MessageShape;
+	
+	// New Actor Shape
+	function UmlActorShape() { };
+	UmlActorShape.prototype = new mxCylinder();
+	UmlActorShape.prototype.constructor = UmlActorShape;
+	UmlActorShape.prototype.addPipe = true;
+	UmlActorShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+	{
+		var width = w / 3;
+		var height = h / 4;
+		
+		if (!isForeground)
+		{
+			path.moveTo(w / 2, height);
+			path.curveTo(w / 2 - width, height, w / 2 - width, 0, w / 2, 0);
+			path.curveTo(w / 2 + width, 0, w / 2 + width, height, w / 2, height);
+			path.close();
+
+			path.moveTo(w / 2, height);
+			path.lineTo(w / 2, 2 * h / 3);
+			
+			// Arms
+			path.moveTo(w / 2, h / 3);
+			path.lineTo(0, h / 3);
+			path.moveTo(w / 2, h / 3);
+			path.lineTo(w, h / 3);
+			
+			// Legs
+			path.moveTo(w / 2, 2 * h / 3);
+			path.lineTo(0, h);
+			path.moveTo(w / 2, 2 * h / 3);
+			path.lineTo(w, h);
+			path.end();
+		}
+	};
+
+	// Replaces existing actor shape
+	mxCellRenderer.prototype.defaultShapes['umlActor'] = UmlActorShape;
+
+	// New Actor Shape
+	function LollipopShape() { };
+	LollipopShape.prototype = new mxCylinder();
+	LollipopShape.prototype.constructor = LollipopShape;
+	LollipopShape.prototype.size = 10;
+	LollipopShape.prototype.addPipe = true;
+	LollipopShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+	{
+		var ss = mxUtils.getValue(this.style, 'size', this.size);
+		var width = ss * 2 / 3;
+		var height = ss;
+		
+		if (!isForeground)
+		{
+			path.moveTo(w / 2, height);
+			path.curveTo(w / 2 - width, height, w / 2 - width, 0, w / 2, 0);
+			path.curveTo(w / 2 + width, 0, w / 2 + width, height, w / 2, height);
+			path.close();
+
+			path.moveTo(w / 2, height);
+			path.lineTo(w / 2, h);
+			path.end();
+		}
+	};
+
+	// Replaces existing actor shape
+	mxCellRenderer.prototype.defaultShapes['lollipop'] = LollipopShape;
+	
+	// Folder Shape, supports tabWidth, tabHeight styles
+	function ComponentShape() { };
+	ComponentShape.prototype = new mxCylinder();
+	ComponentShape.prototype.constructor = ComponentShape;
+	ComponentShape.prototype.jettyWidth = 32;
+	ComponentShape.prototype.jettyHeight = 12;
+	ComponentShape.prototype.redrawPath = function(path, x, y, w, h, isForeground)
+	{
+		var dx = mxUtils.getValue(this.style, 'jettyWidth', this.jettyWidth);
+		var dy = mxUtils.getValue(this.style, 'jettyHeight', this.jettyHeight);
+		var x0 = dx / 2;
+		var x1 = x0 + dx / 2;
+		var y0 = 0.3 * h - dy / 2;
+		var y1 = 0.7 * h - dy / 2;
+
+		if (isForeground)
+		{
+			path.moveTo(x0, y0);
+			path.lineTo(x1, y0);
+			path.lineTo(x1, y0 + dy);
+			path.lineTo(x0, y0 + dy);
+			path.moveTo(x0, y1);
+			path.lineTo(x1, y1);
+			path.lineTo(x1, y1 + dy);
+			path.lineTo(x0, y1 + dy);
+			path.end();
+		}
+		else
+		{
+			path.moveTo(x0, 0);
+			path.lineTo(w, 0);
+			path.lineTo(w, h);
+			path.lineTo(x0, h);
+			path.lineTo(x0, y1 + dy);
+			path.lineTo(0, y1 + dy);
+			path.lineTo(0, y1);
+			path.lineTo(x0, y1);
+			path.lineTo(x0, y0 + dy);
+			path.lineTo(0, y0 + dy);
+			path.lineTo(0, y0);
+			path.lineTo(x0, y0);
+			path.close();
+			path.end();
+		}
+	};
+
+	mxCellRenderer.prototype.defaultShapes['component'] = ComponentShape;
+	
+	// State Shapes derives from double ellipse
+	function StateShape() { };
+	StateShape.prototype = new mxDoubleEllipse();
+	StateShape.prototype.constructor = StateShape;
+	StateShape.prototype.outerStroke = true;
+	StateShape.prototype.paintVertexShape = function(c, x, y, w, h)
+	{
+		var inset = Math.min(4, Math.min(w / 5, h / 5));
+		
+		if (w > 0 && h > 0)
+		{
+			c.ellipse(x + inset, y + inset, w - 2 * inset, h - 2 * inset);
+			c.fillAndStroke();
+		}
+		
+		c.setShadow(false);
+
+		if (this.outerStroke)
+		{
+			c.ellipse(x, y, w, h);
+			c.stroke();			
+		}
+	};
+
+	mxCellRenderer.prototype.defaultShapes['endState'] = StateShape;
+
+	function StartStateShape() { };
+	StartStateShape.prototype = new StateShape();
+	StartStateShape.prototype.constructor = StartStateShape;
+	StartStateShape.prototype.outerStroke = false;
+	
+	mxCellRenderer.prototype.defaultShapes['startState'] = StartStateShape;
+
+	// Image export for state shapes
+	var imageExportInitShapes = mxImageExport.prototype.initShapes;
+	mxImageExport.prototype.initShapes = function()
+	{
+		imageExportInitShapes.apply(this, arguments);
+
+		function createStateShape(outerStroke)
+		{
+			return {
+				drawShape: function(canvas, state, bounds, background)
+				{
+					var x = bounds.x;
+					var y = bounds.y;
+					var w = bounds.width;
+					var h = bounds.height;
+					
+					if (background)
+					{
+						var inset = Math.min(4, Math.min(w / 5, h / 5));
+						x += inset;
+						y += inset;
+						w -= 2 * inset;
+						h -= 2 * inset;
+						
+						if (w > 0 && h > 0)
+						{
+							canvas.ellipse(x, y, w, h);
+						}
+						
+						return true;
+					}
+					else
+					{
+						canvas.fillAndStroke();
+		
+						if (outerStroke)
+						{
+							canvas.ellipse(x, y, w, h);
+							canvas.stroke();
+						}
+					}
+				}
+			};
+		};
+		
+		this.shapes['endState'] = createStateShape(true);
+		this.shapes['startState'] = createStateShape(false);
+	};
+
+	// Defines custom edge shape
+	function LinkShape()
+	{
+		mxArrow.call(this);
+	};
+	mxUtils.extend(LinkShape, mxArrow);
+	LinkShape.prototype.paintEdgeShape = function(c, pts)
+	{
+		var width = 10;
+
+		// Base vector (between end points)
+		var p0 = pts[0];
+		var pe = pts[pts.length - 1];
+		
+		var dx = pe.x - p0.x;
+		var dy = pe.y - p0.y;
+		var dist = Math.sqrt(dx * dx + dy * dy);
+		var length = dist;
+		
+		// Computes the norm and the inverse norm
+		var nx = dx / dist;
+		var ny = dy / dist;
+		var basex = length * nx;
+		var basey = length * ny;
+		var floorx = width * ny/3;
+		var floory = -width * nx/3;
+		
+		// Computes points
+		var p0x = p0.x - floorx / 2;
+		var p0y = p0.y - floory / 2;
+		var p1x = p0x + floorx;
+		var p1y = p0y + floory;
+		var p2x = p1x + basex;
+		var p2y = p1y + basey;
+		var p3x = p2x + floorx;
+		var p3y = p2y + floory;
+		// p4 not necessary
+		var p5x = p3x - 3 * floorx;
+		var p5y = p3y - 3 * floory;
+		
+		c.begin();
+		c.moveTo(p1x, p1y);
+		c.lineTo(p2x, p2y);
+		c.moveTo(p5x + floorx, p5y + floory);
+		c.lineTo(p0x, p0y);
+		c.stroke();
+	};
+
+	// Registers the link shape
+	mxCellRenderer.prototype.defaultShapes['link'] = LinkShape;
+
+	// Registers and defines the custom marker
+	mxMarker.addMarker('dash', function(canvas, shape, type, pe, unitX, unitY, size, source, sw, filled)
+	{
+		var nx = unitX * (size + sw + 1);
+		var ny = unitY * (size + sw + 1);
+
+		return function()
+		{
+			canvas.begin();
+			canvas.moveTo(pe.x - nx / 2 - ny / 2, pe.y - ny / 2 + nx / 2);
+			canvas.lineTo(pe.x + ny / 2 - 3 * nx / 2, pe.y - 3 * ny / 2 - nx / 2);
+			canvas.stroke();
+		};
+	});
+
+	// Implements custom handlers
+	var SPECIAL_HANDLE_INDEX = -99;
+
+	// Handlers are only added if mxVertexHandler is defined (ie. not in embedded graph)
+	if (typeof(mxVertexHandler) != 'undefined')
+	{
+		function mxExtVertexHandler(state)
+		{
+			mxVertexHandler.call(this, state);
+		};
+	
+		mxUtils.extend(mxExtVertexHandler, mxVertexHandler);
+	
+		mxExtVertexHandler.prototype.useGridForSpecialHandle = false;
+		
+		mxExtVertexHandler.prototype.init = function()
+		{
+			this.horizontal = mxUtils.getValue(this.state.style, mxConstants.STYLE_HORIZONTAL, true);
+			var graph = this.state.view.graph;
+	
+			if (this.handleImage != null)
+			{
+				var bounds = new mxRectangle(0, 0, this.handleImage.width, this.handleImage.height);
+				this.specialHandle = new mxImageShape(bounds, this.handleImage.src);
+			}
+			else
+			{
+				var size = 10;
+				var bounds = new mxRectangle(0, 0, size, size);
+				this.specialHandle = new mxRhombus(bounds, mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR);
+			}
+			
+			this.specialHandle.dialect = (graph.dialect != mxConstants.DIALECT_SVG) ?
+					mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG;
+			this.specialHandle.init(graph.getView().getOverlayPane());
+			this.specialHandle.node.style.cursor = this.getSpecialHandleCursor();
+	
+			mxEvent.redirectMouseEvents(this.specialHandle.node, graph, this.state);
+			mxVertexHandler.prototype.init.apply(this, arguments);
+		};
+		
+		mxExtVertexHandler.prototype.getSpecialHandleCursor = function()
+		{
+			return 'default';
+		};
+		
+		mxExtVertexHandler.prototype.redraw = function()
+		{
+			mxVertexHandler.prototype.redraw.apply(this, arguments);
+	
+			var size = this.specialHandle.bounds.width;
+			this.specialHandle.bounds = this.getSpecialHandleBounds(size);
+			this.specialHandle.redraw();
+		};
+
+		mxExtVertexHandler.prototype.destroy = function()
+		{
+			mxVertexHandler.prototype.destroy.apply(this, arguments);
+			
+			if (this.specialHandle != null)
+			{
+				this.specialHandle.destroy();
+				this.specialHandle = null;
+			}
+		};
+		
+		mxExtVertexHandler.prototype.getHandleForEvent = function(me)
+		{
+			if (me.isSource(this.specialHandle))
+			{
+				return SPECIAL_HANDLE_INDEX;
+			}
+			
+			return mxVertexHandler.prototype.getHandleForEvent.apply(this, arguments);
+		};
+
+		mxExtVertexHandler.prototype.mouseMove = function(sender, me)
+		{
+			if (!me.isConsumed() && this.index == SPECIAL_HANDLE_INDEX)
+			{
+				var point = new mxPoint(me.getGraphX(), me.getGraphY());
+				this.constrainPoint(point);
+				var gridEnabled = this.graph.isGridEnabledEvent(me.getEvent());
+				var scale = this.graph.getView().scale;
+				
+				if (gridEnabled && this.useGridForSpecialHandle)
+				{
+					point.x = this.graph.snap(point.x / scale) * scale;
+					point.y = this.graph.snap(point.y / scale) * scale;
+				}
+				
+				this.updateStyle(point);			
+				this.moveSizerTo(this.specialHandle, point.x, point.y);
+				this.state.view.graph.cellRenderer.redraw(this.state, true);
+				me.consume();
+			}
+			else
+			{
+				mxVertexHandler.prototype.mouseMove.apply(this, arguments);
+			}
+		};
+
+		mxExtVertexHandler.prototype.mouseUp = function(sender, me)
+		{
+			if (!me.isConsumed() && this.index == SPECIAL_HANDLE_INDEX)
+			{
+				this.applyStyle();
+				this.reset();
+				me.consume();
+			}
+			else
+			{
+				mxVertexHandler.prototype.mouseUp.apply(this, arguments);
+			}
+		};
+
+		mxExtVertexHandler.prototype.getSpecialHandleBounds = function(size)
+		{
+			var rotation = this.state.shape.getShapeRotation();
+			var alpha = mxUtils.toRadians(rotation);
+			var cos = Math.cos(alpha);
+			var sin = Math.sin(alpha);
+			
+			var bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height);
+			
+			if (this.state.shape.isPaintBoundsInverted())
+			{
+				var t = (bounds.width - bounds.height) / 2;
+				bounds.x += t;
+				bounds.y -= t;
+				var tmp = bounds.width;
+				bounds.width = bounds.height;
+				bounds.height = tmp;
+			}
+	
+			var pt = this.getSpecialHandlePoint(bounds);
+
+			if (this.state.shape.flipH)
+			{
+				pt.x = 2 * bounds.x + bounds.width - pt.x;
+			}
+			
+			if (this.state.shape.flipV)
+			{
+				pt.y = 2 * bounds.y + bounds.height - pt.y;
+			}
+			
+			pt = mxUtils.getRotatedPoint(pt, cos, sin,
+				new mxPoint(this.state.getCenterX(), this.state.getCenterY()));
+
+			return new mxRectangle(pt.x - size / 2, pt.y - size / 2, size, size);
+		};
+		
+		mxExtVertexHandler.prototype.getSpecialHandlePoint = function(bounds)
+		{
+			// Hook for subclassers
+			return null;
+		};
+	
+		mxExtVertexHandler.prototype.updateStyle = function(point)
+		{
+			// Hook for subclassers
+		};
+		
+		mxExtVertexHandler.prototype.constrainPoint = function(point)
+		{
+			point.x = Math.max(this.state.x, Math.min(this.state.x + this.state.width, point.x));
+			point.y = Math.max(this.state.y, Math.min(this.state.y + this.state.height, point.y));
+		};
+		
+		mxExtVertexHandler.prototype.applyStyle = function()
+		{
+			// Hook for subclassers
+		};
+
+		// Folder Handler
+		function mxFolderHandler(state)
+		{
+			mxExtVertexHandler.call(this, state);
+		};
+	
+		mxUtils.extend(mxFolderHandler, mxExtVertexHandler);
+
+		mxFolderHandler.prototype.getSpecialHandlePoint = function(bounds)
+		{
+			var scale = this.graph.getView().scale;
+			var tw = Math.min(bounds.width, mxUtils.getValue(this.state.style, 'tabWidth', 60) * scale);
+			var th = Math.min(bounds.height, mxUtils.getValue(this.state.style, 'tabHeight', 20) * scale);
+			
+			var tp = mxUtils.getValue(this.state.style, 'tabPosition', 'right');
+			var x = (tp == 'left') ? bounds.x + tw : bounds.x + bounds.width - tw;
+	
+			return new mxPoint(x, bounds.y + th);
+		};
+		
+		mxFolderHandler.prototype.updateStyle = function(point)
+		{
+			var rotation = this.state.shape.getShapeRotation();
+			var alpha = mxUtils.toRadians(rotation);
+			var cos = Math.cos(-alpha);
+			var sin = Math.sin(-alpha);
+
+			var bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height);
+			
+			if (this.state.shape.isPaintBoundsInverted())
+			{
+				var t = (bounds.width - bounds.height) / 2;
+				bounds.x += t;
+				bounds.y -= t;
+				var tmp = bounds.width;
+				bounds.width = bounds.height;
+				bounds.height = tmp;
+			}
+	
+			var pt = new mxPoint(point.x, point.y);
+			pt = mxUtils.getRotatedPoint(pt, cos, sin,
+				new mxPoint(this.state.getCenterX(), this.state.getCenterY()));
+
+			if (this.state.shape.flipH)
+			{
+				pt.x = 2 * bounds.x + bounds.width - pt.x;
+			}
+			
+			if (this.state.shape.flipV)
+			{
+				pt.y = 2 * bounds.y + bounds.height - pt.y;
+			}
+			
+			var result = this.updateStyleUnrotated(pt, bounds);
+		
+			// Modifies point to use rotated coordinates of return value
+			if (result != null)
+			{
+				if (this.state.shape.flipH)
+				{
+					result.x = 2 * bounds.x + bounds.width - result.x;
+				}
+				
+				if (this.state.shape.flipV)
+				{
+					result.y = 2 * bounds.y + bounds.height - result.y;
+				}
+				
+				cos = Math.cos(alpha);
+				sin = Math.sin(alpha);
+				result = mxUtils.getRotatedPoint(result, cos, sin,
+						new mxPoint(this.state.getCenterX(), this.state.getCenterY()));
+				point.x = result.x;
+				point.y = result.y;
+			}
+		};
+		
+		mxFolderHandler.prototype.updateStyleUnrotated = function(pt, bounds)
+		{
+			var tp = mxUtils.getValue(this.state.style, 'tabPosition', 'right');
+			var tw = (tp == 'left') ? pt.x - bounds.x : bounds.x + bounds.width - pt.x;
+			var th = pt.y - bounds.y;
+			
+			var scale = this.graph.getView().scale;
+			this.state.style['tabWidth'] = Math.round(Math.max(1, tw) / scale);
+			this.state.style['tabHeight'] =  Math.round(Math.max(1, th) / scale);
+		};
+		
+		mxFolderHandler.prototype.applyStyle = function()
+		{
+			var model = this.graph.getModel();
+			model.beginUpdate();
+			try
+			{
+				this.state.view.graph.setCellStyles('tabWidth', this.state.style['tabWidth'], [this.state.cell]);
+				this.state.view.graph.setCellStyles('tabHeight', this.state.style['tabHeight'], [this.state.cell]);
+			}
+			finally
+			{
+				model.endUpdate();
+			}
+		};
+		
+		// Swimlane Handler
+		function mxSwimlaneHandler(state)
+		{
+			mxFolderHandler.call(this, state);
+		};
+		
+		mxUtils.extend(mxSwimlaneHandler, mxFolderHandler);
+		
+		mxSwimlaneHandler.prototype.getSpecialHandlePoint = function(bounds)
+		{
+			var scale = this.graph.getView().scale;
+			var startSize = mxUtils.getValue(this.state.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE);
+
+			return new mxPoint(bounds.x + bounds.width / 2, bounds.y + Math.min(bounds.height, startSize * scale));
+		};
+		
+		mxSwimlaneHandler.prototype.updateStyleUnrotated = function(point, bounds)
+		{
+			point.x = bounds.x + bounds.width / 2;
+			startSize = point.y - bounds.y;
+			var scale = this.graph.getView().scale;
+			this.state.style['startSize'] = Math.round(Math.max(1, startSize) / scale);
+			
+			return point;
+		};
+		
+		mxSwimlaneHandler.prototype.applyStyle = function()
+		{
+			this.state.view.graph.setCellStyles('startSize', this.state.style['startSize'], [this.state.cell]);
+		};
+
+		// Cube Handler
+		function mxCubeHandler(state)
+		{
+			mxFolderHandler.call(this, state);
+		};
+	
+		mxUtils.extend(mxCubeHandler, mxFolderHandler);
+		
+		mxCubeHandler.prototype.defaultValue = 20;
+	
+		mxCubeHandler.prototype.scaleFactor = 1;
+		
+		mxCubeHandler.prototype.getSpecialHandlePoint = function(bounds)
+		{
+			var scale = this.graph.getView().scale;
+			var sz = Math.min(bounds.width, Math.min(bounds.height,
+				mxUtils.getValue(this.state.style, 'size', this.defaultValue) * scale / this.scaleFactor));
+			
+			return new mxPoint(bounds.x + sz, bounds.y + sz);
+		};
+	
+		mxCubeHandler.prototype.updateStyleUnrotated = function(pt, bounds)
+		{
+			var size = Math.max(0, Math.min(Math.min(bounds.width / this.scaleFactor, pt.x - bounds.x),
+					Math.min(bounds.height / this.scaleFactor, pt.y - bounds.y)));
+			var scale = this.graph.getView().scale;
+			this.state.style['size'] = Math.round(Math.max(1, size) / scale) * this.scaleFactor;
+			
+			// Stays on the diagonal
+			return new mxPoint(bounds.x + size, bounds.y + size);
+		};
+		
+		mxCubeHandler.prototype.applyStyle = function()
+		{
+			this.state.view.graph.setCellStyles('size', this.state.style['size'], [this.state.cell]);
+		};
+		
+		// Card Handler
+		function mxCardHandler(state)
+		{
+			mxCubeHandler.call(this, state);
+		};
+	
+		mxUtils.extend(mxCardHandler, mxCubeHandler);
+		
+		mxCardHandler.prototype.defaultValue = 30;
+	
+		mxCardHandler.prototype.scaleFactor = 2;
+		
+		// Note Handler
+		function mxNoteHandler(state)
+		{
+			mxCubeHandler.call(this, state);
+		};
+	
+		mxUtils.extend(mxNoteHandler, mxCubeHandler);
+		
+		mxNoteHandler.prototype.defaultValue = 30;
+	
+		mxNoteHandler.prototype.scaleFactor = 1;
+		
+		mxNoteHandler.prototype.getSpecialHandlePoint = function(bounds)
+		{
+			var scale = this.graph.getView().scale;
+			var sz = Math.min(bounds.width, Math.min(bounds.height,
+					mxUtils.getValue(this.state.style, 'size', this.defaultValue) * scale / this.scaleFactor));
+			
+			return new mxPoint(bounds.x + bounds.width - sz, bounds.y + sz);
+		};
+		
+		mxNoteHandler.prototype.updateStyleUnrotated = function(pt, bounds)
+		{
+			var size = Math.max(0, Math.min(Math.min(bounds.width / this.scaleFactor, pt.x - bounds.x + bounds.width),
+					Math.min(bounds.height / this.scaleFactor, pt.y - bounds.y)));
+			var scale = this.graph.getView().scale;
+			this.state.style['size'] = Math.round(Math.max(1, size) / scale) * this.scaleFactor;
+			
+			// Stays on the diagonal
+			return new mxPoint(bounds.x + bounds.width - size, bounds.y + size);
+		};
+		
+		// Step Handler
+		function mxStepHandler(state)
+		{
+			mxCubeHandler.call(this, state);
+		};
+	
+		mxUtils.extend(mxStepHandler, mxCubeHandler);
+		
+		mxStepHandler.prototype.defaultValue = 0.2;
+	
+		mxStepHandler.prototype.scaleFactor = 1;
+		
+		mxStepHandler.prototype.getSpecialHandlePoint = function(bounds)
+		{
+			var sz = mxUtils.getValue(this.state.style, 'size', this.defaultValue);
+			
+			return new mxPoint(bounds.x + bounds.width * sz, bounds.y + bounds.height / 2);
+		};
+	
+		mxStepHandler.prototype.updateStyleUnrotated = function(pt, bounds)
+		{
+			var size = Math.min(1, (pt.x - bounds.x) / bounds.width);
+			this.state.style['size'] = size;
+			
+			return new mxPoint(bounds.x + size * bounds.width, bounds.y + bounds.height / 2);
+		};
+		
+		// Tape Handler
+		function mxTapeHandler(state)
+		{
+			mxCubeHandler.call(this, state);
+		};
+	
+		mxUtils.extend(mxTapeHandler, mxCubeHandler);
+		
+		mxTapeHandler.prototype.defaultValue = 0.4;
+	
+		mxTapeHandler.prototype.scaleFactor = 1;
+		
+		mxTapeHandler.prototype.getSpecialHandlePoint = function(bounds)
+		{
+			var sz = mxUtils.getValue(this.state.style, 'size', this.defaultValue);
+	
+			return new mxPoint(bounds.x + bounds.width / 2, bounds.y + sz * bounds.height / 2);
+		};
+	
+		mxTapeHandler.prototype.updateStyleUnrotated = function(pt, bounds)
+		{
+			var size = Math.max(0, Math.min(1, ((pt.y - bounds.y) / bounds.height) * 2));
+			this.state.style['size'] = size;
+			
+			return new mxPoint(bounds.x + bounds.width / 2, bounds.y + size * bounds.height / 2);
+		};
+		
+		var handlers = {'swimlane': mxSwimlaneHandler, 'folder': mxFolderHandler, 'cube': mxCubeHandler,
+				'card': mxCardHandler, 'note': mxNoteHandler, 'step': mxStepHandler, 'tape': mxTapeHandler};
+
+		var mxGraphCreateHandler = mxGraph.prototype.createHandler;
+		mxGraph.prototype.createHandler = function(state)
+		{
+			if (state != null)
+			{
+				var ctor = handlers[state.style['shape']];
+
+				if (ctor != null)
+				{
+					return new ctor(state);
+				}
+			}
+			
+			return mxGraphCreateHandler.apply(this, arguments);
+		};
+	}
+	
+	// Constraints
+	mxGraph.prototype.getAllConnectionConstraints = function(terminal, source)
+	{
+		if (terminal != null && terminal.shape != null)
+		{
+			if (terminal.shape.stencil != null)
+			{
+				if (terminal.shape.stencil != null)
+				{
+					return terminal.shape.stencil.constraints;
+				}
+			}
+			else if (terminal.shape.constraints != null)
+			{
+				return terminal.shape.constraints;
+			}
+		}
+
+		return null;
+	};
+
+	mxRectangleShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true),
+	                                          new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+	                                          new mxConnectionConstraint(new mxPoint(0.75, 0), true),
+	        	              		 new mxConnectionConstraint(new mxPoint(0, 0.25), true),
+	        	              		 new mxConnectionConstraint(new mxPoint(0, 0.5), true),
+	        	              		 new mxConnectionConstraint(new mxPoint(0, 0.75), true),
+	        	            		 new mxConnectionConstraint(new mxPoint(1, 0.25), true),
+	        	            		 new mxConnectionConstraint(new mxPoint(1, 0.5), true),
+	        	            		 new mxConnectionConstraint(new mxPoint(1, 0.75), true),
+	        	            		 new mxConnectionConstraint(new mxPoint(0.25, 1), true),
+	        	            		 new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+	        	            		 new mxConnectionConstraint(new mxPoint(0.75, 1), true)];
+	mxLabel.prototype.constraints = mxRectangleShape.prototype.constraints;
+	mxImageShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+	mxSwimlane.prototype.constraints = mxRectangleShape.prototype.constraints;
+	PlusShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+	NoteShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+	CardShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+	CubeShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+	FolderShape.prototype.constraints = mxRectangleShape.prototype.constraints;
+	mxCylinder.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.15, 0.05), false),
+                                        new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+                                        new mxConnectionConstraint(new mxPoint(0.85, 0.05), false),
+      	              		 new mxConnectionConstraint(new mxPoint(0, 0.3), true),
+      	              		 new mxConnectionConstraint(new mxPoint(0, 0.5), true),
+      	              		 new mxConnectionConstraint(new mxPoint(0, 0.7), true),
+      	            		 new mxConnectionConstraint(new mxPoint(1, 0.3), true),
+      	            		 new mxConnectionConstraint(new mxPoint(1, 0.5), true),
+      	            		 new mxConnectionConstraint(new mxPoint(1, 0.7), true),
+      	            		 new mxConnectionConstraint(new mxPoint(0.15, 0.95), false),
+      	            		 new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+      	            		 new mxConnectionConstraint(new mxPoint(0.85, 0.95), false)];
+	UmlActorShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0.1), false),
+	                                          new mxConnectionConstraint(new mxPoint(0.5, 0), false),
+	                                          new mxConnectionConstraint(new mxPoint(0.75, 0.1), false),
+	        	              		 new mxConnectionConstraint(new mxPoint(0, 1/3), false),
+	        	              		 new mxConnectionConstraint(new mxPoint(0, 1), false),
+	        	            		 new mxConnectionConstraint(new mxPoint(1, 1/3), false),
+	        	            		 new mxConnectionConstraint(new mxPoint(1, 1), false),
+	        	            		 new mxConnectionConstraint(new mxPoint(0.5, 0.5), false)];
+	ComponentShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true),
+	                                          new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+	                                          new mxConnectionConstraint(new mxPoint(0.75, 0), true),
+	        	              		 new mxConnectionConstraint(new mxPoint(0, 0.3), true),
+	        	              		 new mxConnectionConstraint(new mxPoint(0, 0.7), true),
+	        	            		 new mxConnectionConstraint(new mxPoint(1, 0.25), true),
+	        	            		 new mxConnectionConstraint(new mxPoint(1, 0.5), true),
+	        	            		 new mxConnectionConstraint(new mxPoint(1, 0.75), true),
+	        	            		 new mxConnectionConstraint(new mxPoint(0.25, 1), true),
+	        	            		 new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+	        	            		 new mxConnectionConstraint(new mxPoint(0.75, 1), true)];
+	mxActor.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+   	              		 new mxConnectionConstraint(new mxPoint(0.25, 0.2), false),
+   	              		 new mxConnectionConstraint(new mxPoint(0.1, 0.5), false),
+   	              		 new mxConnectionConstraint(new mxPoint(0, 0.75), true),
+   	            		 new mxConnectionConstraint(new mxPoint(0.75, 0.25), false),
+   	            		 new mxConnectionConstraint(new mxPoint(0.9, 0.5), false),
+   	            		 new mxConnectionConstraint(new mxPoint(1, 0.75), true),
+   	            		 new mxConnectionConstraint(new mxPoint(0.25, 1), true),
+   	            		 new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+   	            		 new mxConnectionConstraint(new mxPoint(0.75, 1), true)];
+	TapeShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.35), false),
+	                                   new mxConnectionConstraint(new mxPoint(0, 0.5), false),
+	                                   new mxConnectionConstraint(new mxPoint(0, 0.65), false),
+	                                   new mxConnectionConstraint(new mxPoint(1, 0.35), false),
+		                                new mxConnectionConstraint(new mxPoint(1, 0.5), false),
+		                                new mxConnectionConstraint(new mxPoint(1, 0.65), false),
+										new mxConnectionConstraint(new mxPoint(0.25, 1), false),
+										new mxConnectionConstraint(new mxPoint(0.75, 0), false)];
+	// TODO: Relative ports
+	StepShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0), true),
+                                       new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+                                       new mxConnectionConstraint(new mxPoint(0.75, 0), true),
+                                       new mxConnectionConstraint(new mxPoint(0.25, 1), true),
+  	        	            		 	new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+  	        	            		 	new mxConnectionConstraint(new mxPoint(0.75, 1), true),
+	                                   new mxConnectionConstraint(new mxPoint(0.1, 0.25), false),
+	                                   new mxConnectionConstraint(new mxPoint(0.2, 0.5), false),
+	                                   new mxConnectionConstraint(new mxPoint(0.1, 0.75), false),
+	                                   new mxConnectionConstraint(new mxPoint(0.9, 0.25), false),
+		                                new mxConnectionConstraint(new mxPoint(1, 0.5), false),
+		                                new mxConnectionConstraint(new mxPoint(0.9, 0.75), false)];
+	mxLine.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.5), false),
+	                                new mxConnectionConstraint(new mxPoint(0.25, 0.5), false),
+	                                new mxConnectionConstraint(new mxPoint(0.75, 0.5), false),
+									new mxConnectionConstraint(new mxPoint(1, 0.5), false)];
+	LollipopShape.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.5, 0), false),
+										new mxConnectionConstraint(new mxPoint(0.5, 1), false)];
+	mxEllipse.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0), true), new mxConnectionConstraint(new mxPoint(1, 0), true),
+	                                   new mxConnectionConstraint(new mxPoint(0, 1), true), new mxConnectionConstraint(new mxPoint(1, 1), true),
+	                                   new mxConnectionConstraint(new mxPoint(0.5, 0), true), new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+	          	              		   new mxConnectionConstraint(new mxPoint(0, 0.5), true), new mxConnectionConstraint(new mxPoint(1, 0.5))];
+	mxDoubleEllipse.prototype.constraints = mxEllipse.prototype.constraints;
+	mxRhombus.prototype.constraints = mxEllipse.prototype.constraints;
+	mxTriangle.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0, 0.25), true),
+	                                    new mxConnectionConstraint(new mxPoint(0, 0.5), true),
+	                                   new mxConnectionConstraint(new mxPoint(0, 0.75), true),
+	                                   new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+	                                   new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+	                                   new mxConnectionConstraint(new mxPoint(1, 0.5), true)];
+	mxHexagon.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.375, 0), true),
+	                                    new mxConnectionConstraint(new mxPoint(0.5, 0), true),
+	                                   new mxConnectionConstraint(new mxPoint(0.625, 0), true),
+	                                   new mxConnectionConstraint(new mxPoint(0.125, 0.25), false),
+	                                   new mxConnectionConstraint(new mxPoint(0, 0.5), true),
+	                                   new mxConnectionConstraint(new mxPoint(0.125, 0.75), false),
+	                                   new mxConnectionConstraint(new mxPoint(0.875, 0.25), false),
+	                                   new mxConnectionConstraint(new mxPoint(0, 0.5), true),
+	                                   new mxConnectionConstraint(new mxPoint(1, 0.5), true),
+	                                   new mxConnectionConstraint(new mxPoint(0.875, 0.75), false),
+	                                   new mxConnectionConstraint(new mxPoint(0.375, 1), true),
+	                                    new mxConnectionConstraint(new mxPoint(0.5, 1), true),
+	                                   new mxConnectionConstraint(new mxPoint(0.625, 1), true)];
+	mxCloud.prototype.constraints = [new mxConnectionConstraint(new mxPoint(0.25, 0.25), false),
+	                                 new mxConnectionConstraint(new mxPoint(0.4, 0.1), false),
+	                                 new mxConnectionConstraint(new mxPoint(0.16, 0.55), false),
+	                                 new mxConnectionConstraint(new mxPoint(0.07, 0.4), false),
+	                                 new mxConnectionConstraint(new mxPoint(0.31, 0.8), false),
+	                                 new mxConnectionConstraint(new mxPoint(0.13, 0.77), false),
+	                                 new mxConnectionConstraint(new mxPoint(0.8, 0.8), false),
+	                                 new mxConnectionConstraint(new mxPoint(0.55, 0.95), false),
+	                                 new mxConnectionConstraint(new mxPoint(0.875, 0.5), false),
+	                                 new mxConnectionConstraint(new mxPoint(0.96, 0.7), false),
+	                                 new mxConnectionConstraint(new mxPoint(0.625, 0.2), false),
+	                                 new mxConnectionConstraint(new mxPoint(0.88, 0.25), false)];
+	mxArrow.prototype.constraints = null;
+})();
diff --git a/public/assets/plugins/mxgraph/js/Sidebar.js b/public/assets/plugins/mxgraph/js/Sidebar.js
new file mode 100644
index 0000000..3c4f47e
--- /dev/null
+++ b/public/assets/plugins/mxgraph/js/Sidebar.js
@@ -0,0 +1,903 @@
+'use strict';
+
+/**
+ * Construcs a new sidebar for the given editor.
+ */
+function Sidebar(editorUi, container) {
+	this.editorUi = editorUi;
+	this.container = container;
+	this.palettes = new Object();
+	this.showTooltips = true;
+	this.graph = new Graph(document.createElement('div'), null, null, this.editorUi
+		.editor.graph.getStylesheet());
+	this.graph.resetViewOnRootChange = false;
+	this.graph.foldingEnabled = false;
+	this.graph.setConnectable(false);
+	this.graph.autoScroll = false;
+	this.graph.setTooltips(false);
+	this.graph.setEnabled(false);
+
+	// Container must be in the DOM for correct HTML rendering
+	this.graph.container.style.visibility = 'hidden';
+	this.graph.container.style.position = 'absolute';
+	document.body.appendChild(this.graph.container);
+
+	if (!mxClient.IS_TOUCH) {
+		mxEvent.addListener(document, 'mouseup', mxUtils.bind(this, function() {
+			this.showTooltips = true;
+		}));
+
+		// Enables tooltips after scroll
+		mxEvent.addListener(container, 'scroll', mxUtils.bind(this, function() {
+			this.showTooltips = true;
+		}));
+
+		mxEvent.addListener(document, 'mousedown', mxUtils.bind(this, function() {
+			this.showTooltips = false;
+			this.hideTooltip();
+		}));
+
+		mxEvent.addListener(document, 'mousemove', mxUtils.bind(this, function(evt) {
+			var src = mxEvent.getSource(evt);
+
+			while (src != null) {
+				if (src == this.currentElt) {
+					return;
+				}
+
+				src = src.parentNode;
+			}
+
+			this.hideTooltip();
+		}));
+
+		// Handles mouse leaving the window
+		mxEvent.addListener(document, 'mouseout', mxUtils.bind(this, function(evt) {
+			if (evt.toElement == null && evt.relatedTarget == null) {
+				this.hideTooltip();
+			}
+		}));
+	}
+
+	this.init();
+
+	// Pre-fetches tooltip image
+	new Image().src = IMAGE_PATH + '/tooltip.png';
+};
+
+/**
+ * Adds all palettes to the sidebar.
+ */
+Sidebar.prototype.init = function() {
+	var dir = STENCIL_PATH;
+	console.log(dir);
+
+	this.addImagePalette('entry', mxResources.get('entry'), dir + '/entry/',
+		'_128x128.png', ['start', 'finally', 'end'], [mxResources.get('start'),
+			mxResources.get('finally'), mxResources.get('end')
+		]);
+	this.addImagePalette('call_management', mxResources.get('call_management'),
+		dir + '/call_management/', '_128x128.png', ['answer', 'hangup', 'dial',
+			'ext_dial', 'queue', 'voicemail'
+			// , 'callback'
+		], [mxResources.get('answer'), mxResources.get('hangup'), mxResources.get(
+				'dial'), mxResources.get('ext_dial'), mxResources.get('queue'),
+			mxResources.get('voicemail')
+			// , mxResources.get('callback')
+		]);
+	this.addImagePalette('variable', mxResources.get('variable'), dir +
+		'/variable/', '_128x128.png', ['set', 'math'], [mxResources.get('set'),
+			mxResources.get('math')
+		]);
+	this.addImagePalette('playback', mxResources.get('playback'), dir +
+		'/playback/', '_128x128.png', ['playback', 'menu',
+			'saydigits', 'saynumber', 'sayphonetic', 'tts', 'ispeechtts', 'getdigits'
+		], [mxResources.get('playback'), mxResources
+			.get('menu'), mxResources.get('saydigits'), mxResources.get('saynumber'),
+			mxResources.get('sayphonetic'), mxResources.get('tts'), mxResources.get('ispeechtts'), mxResources.get('getdigits')
+		]);
+	this.addImagePalette('recording', mxResources.get('recording'), dir +
+		'/recording/', '_128x128.png', ['record'], [mxResources.get('record')]);
+	this.addImagePalette('integrationServer', mxResources.get('integrationServer'),
+		dir + '/integration_server/', '_128x128.png', ['database', 'ispeechasr'], [
+			mxResources.get('database'), mxResources.get('ispeechasr')
+		]);
+	this.addImagePalette('callflow', mxResources.get('callflow'), dir +
+		'/callflow/', '_128x128.png', ['gotoc', 'gotoif', 'gotoiftime', 'vswitch'], [
+			mxResources.get('gotoc'), mxResources.get('gotoif'), mxResources.get(
+				'gotoiftime'), mxResources.get('vswitch')
+		]);
+	this.addImagePalette('stats', mxResources.get('stats'), dir + '/stats/',
+		'_128x128.png', [
+			// 'queuelog', 'goal'
+		], [
+			// mxResources.get('queuelog'),
+			// mxResources.get('goal')
+		]);
+	this.addImagePalette('general', mxResources.get('general'), dir + '/general/',
+		'_128x128.png', ['noop', 'system', 'agi', 'subproject','custom_app'], [mxResources.get(
+			'noop'), mxResources.get('system'), mxResources.get('agi'), mxResources.get(
+			'subproject'),mxResources.get(
+			'custom_app')]);
+
+};
+
+/**
+ * Specifies if tooltips should be visible. Default is true.
+ */
+Sidebar.prototype.enableTooltips = !mxClient.IS_TOUCH;
+
+/**
+ * Specifies the delay for the tooltip. Default is 16 px.
+ */
+Sidebar.prototype.tooltipBorder = 16;
+
+/**
+ * Specifies the delay for the tooltip. Default is 3 px.
+ */
+Sidebar.prototype.thumbBorder = 3;
+
+/**
+ * Specifies the delay for the tooltip. Default is 300 ms.
+ */
+Sidebar.prototype.tooltipDelay = 300;
+
+/**
+ * Specifies if edges should be used as templates if clicked. Default is true.
+ */
+Sidebar.prototype.installEdges = true;
+
+/**
+ * Specifies the URL of the gear image.
+ */
+Sidebar.prototype.gearImage = STENCIL_PATH + '/clipart/Gear_128x128.png';
+
+/**
+ * Specifies the width of the thumbnails.
+ */
+Sidebar.prototype.thumbWidth = 34;
+
+/**
+ * Specifies the height of the thumbnails.
+ */
+Sidebar.prototype.thumbHeight = 34;
+
+/**
+ * Specifies the padding for the thumbnails. Default is 3.
+ */
+Sidebar.prototype.thumbPadding = 2;
+
+/**
+ * Specifies the size of the sidebar titles.
+ */
+Sidebar.prototype.sidebarTitleSize = 9;
+
+/**
+ * Specifies if titles in the sidebar should be enabled.
+ */
+Sidebar.prototype.sidebarTitles = false;
+
+/**
+ * Specifies if titles in the tooltips should be enabled.
+ */
+Sidebar.prototype.tooltipTitles = false;
+
+/**
+ * Adds all palettes to the sidebar.
+ */
+Sidebar.prototype.showTooltip = function(elt, cells, title, showLabel) {
+	if (this.enableTooltips && this.showTooltips) {
+		if (this.currentElt != elt) {
+			if (this.thread != null) {
+				window.clearTimeout(this.thread);
+				this.thread = null;
+			}
+
+			var show = mxUtils.bind(this, function() {
+				// Lazy creation of the DOM nodes and graph instance
+				if (this.tooltip == null) {
+					this.tooltip = document.createElement('div');
+					this.tooltip.className = 'geSidebarTooltip';
+					document.body.appendChild(this.tooltip);
+
+					this.graph2 = new Graph(this.tooltip, null, null, this.editorUi.editor.graph
+						.getStylesheet());
+					this.graph2.view.setTranslate(this.tooltipBorder, this.tooltipBorder);
+					this.graph2.resetViewOnRootChange = false;
+					this.graph2.foldingEnabled = false;
+					this.graph2.autoScroll = false;
+					this.graph2.setTooltips(false);
+					this.graph2.setConnectable(false);
+					this.graph2.setEnabled(false);
+
+					if (!mxClient.IS_SVG) {
+						this.graph2.view.canvas.style.position = 'relative';
+					}
+
+					this.tooltipImage = mxUtils.createImage(IMAGE_PATH + '/tooltip.png');
+					this.tooltipImage.style.position = 'absolute';
+					this.tooltipImage.style.width = '14px';
+					this.tooltipImage.style.height = '27px';
+
+					document.body.appendChild(this.tooltipImage);
+				}
+
+				this.tooltip.style.display = 'block';
+				this.graph2.labelsVisible = (showLabel == null || showLabel);
+				this.graph2.model.clear();
+				this.graph2.addCells(cells);
+
+				var bounds = this.graph2.getGraphBounds();
+				var width = bounds.width + 2 * this.tooltipBorder;
+				var height = bounds.height + 2 * this.tooltipBorder;
+
+				if (mxClient.IS_QUIRKS) {
+					width += 4;
+					height += 4;
+					this.tooltip.style.overflow = 'hidden';
+				} else {
+					this.tooltip.style.overflow = 'visible';
+				}
+
+				this.tooltipImage.style.visibility = 'visible';
+				this.tooltip.style.width = width + 'px';
+
+				// Adds title for entry
+				if (this.tooltipTitles && title != null && title.length > 0) {
+					if (this.tooltipTitle == null) {
+						this.tooltipTitle = document.createElement('div');
+						this.tooltipTitle.style.borderTop = '1px solid gray';
+						this.tooltipTitle.style.textAlign = 'center';
+						this.tooltipTitle.style.width = '100%';
+
+						// Oversize titles are cut-off currently. Should make tooltip wider later.
+						this.tooltipTitle.style.overflow = 'hidden';
+
+						if (mxClient.IS_SVG) {
+							this.tooltipTitle.style.paddingTop = '2px';
+						} else {
+							this.tooltipTitle.style.position = 'absolute';
+							this.tooltipTitle.style.paddingTop = '6px';
+						}
+
+						this.tooltip.appendChild(this.tooltipTitle);
+					} else {
+						this.tooltipTitle.innerHTML = '';
+					}
+
+					this.tooltipTitle.style.display = '';
+					mxUtils.write(this.tooltipTitle, title);
+
+					var dy = this.tooltipTitle.offsetHeight + 10;
+					height += dy;
+
+					if (mxClient.IS_SVG) {
+						this.tooltipTitle.style.marginTop = (-dy) + 'px';
+					} else {
+						height -= 6;
+						this.tooltipTitle.style.top = (height - dy) + 'px';
+					}
+				} else if (this.tooltipTitle != null && this.tooltipTitle.parentNode !=
+					null) {
+					this.tooltipTitle.style.display = 'none';
+				}
+
+				this.tooltip.style.height = height + 'px';
+				var x0 = -Math.min(0, bounds.x - this.tooltipBorder);
+				var y0 = -Math.min(0, bounds.y - this.tooltipBorder);
+
+				var left = this.container.clientWidth + this.editorUi.splitSize + 3;
+				var top = Math.max(0, (this.container.offsetTop + elt.offsetTop - this.container
+					.scrollTop - height / 2 + 16));
+
+				if (mxClient.IS_SVG) {
+					this.graph2.view.canvas.setAttribute('transform', 'translate(' + x0 +
+						',' + y0 + ')');
+				} else {
+					this.graph2.view.drawPane.style.left = x0 + 'px';
+					this.graph2.view.drawPane.style.top = y0 + 'px';
+				}
+
+				// Workaround for ignored position CSS style in IE9
+				// (changes to relative without the following line)
+				// Added width of the page-sidebar
+				left += document.getElementById('page-sidebar').offsetWidth;
+				// Added static height of the page-navbar
+				top += 90;
+
+				this.tooltip.style.position = 'absolute';
+				this.tooltip.style.left = left + 'px';
+				this.tooltip.style.top = top + 'px';
+				this.tooltipImage.style.left = (left - 13) + 'px';
+				this.tooltipImage.style.top = (top + height / 2 - 13) + 'px';
+			});
+
+			if (this.tooltip != null && this.tooltip.style.display != 'none') {
+				show();
+			} else {
+				this.thread = window.setTimeout(show, this.tooltipDelay);
+			}
+
+			this.currentElt = elt;
+		}
+	}
+};
+
+/**
+ * Hides the current tooltip.
+ */
+Sidebar.prototype.hideTooltip = function() {
+	if (this.thread != null) {
+		window.clearTimeout(this.thread);
+		this.thread = null;
+	}
+
+	if (this.tooltip != null) {
+		this.tooltip.style.display = 'none';
+		this.tooltipImage.style.visibility = 'hidden';
+		this.currentElt = null;
+	}
+};
+
+/**
+ * Creates and returns the given title element.
+ */
+Sidebar.prototype.createTitle = function(label) {
+	var elt = document.createElement('a');
+	elt.setAttribute('href', 'javascript:void(0);');
+	elt.className = 'geTitle';
+	mxUtils.write(elt, label);
+
+	return elt;
+};
+
+/**
+ * Creates a thumbnail for the given cells.
+ */
+Sidebar.prototype.createThumb = function(cells, width, height, parent, title,
+	showLabel) {
+	this.graph.labelsVisible = (showLabel == null || showLabel);
+	this.graph.view.scaleAndTranslate(1, 0, 0);
+	this.graph.addCells(cells);
+	var bounds = this.graph.getGraphBounds();
+	var corr = this.thumbBorder;
+	var s = Math.min((width - 2) / (bounds.width - bounds.x + corr), (height - 2) /
+		(bounds.height - bounds.y + corr));
+	var x0 = -Math.min(bounds.x, 0);
+	var y0 = -Math.min(bounds.y, 0);
+	this.graph.view.scaleAndTranslate(s, x0, y0);
+
+	bounds = this.graph.getGraphBounds();
+	var dx = Math.max(0, Math.floor((width - bounds.width - bounds.x) / 2));
+	var dy = Math.max(0, Math.floor((height - bounds.height - bounds.y) / 2));
+
+	var node = null;
+
+	// For supporting HTML labels in IE9 standards mode the container is cloned instead
+	if (this.graph.dialect == mxConstants.DIALECT_SVG && !mxClient.NO_FO) {
+		node = this.graph.view.getCanvas().ownerSVGElement.cloneNode(true);
+	}
+	// LATER: Check if deep clone can be used for quirks if container in DOM
+	else {
+		node = this.graph.container.cloneNode(false);
+		node.innerHTML = this.graph.container.innerHTML;
+	}
+
+	this.graph.getModel().clear();
+
+	// Catch-all event handling
+	if (mxClient.IS_IE6) {
+		parent.style.backgroundImage = 'url(' + this.editorUi.editor.transparentImage +
+			')';
+	}
+
+	var dd = 3;
+	node.style.position = 'relative';
+	node.style.overflow = 'hidden';
+	node.style.cursor = 'pointer';
+	node.style.left = (dx + dd) + 'px';
+	node.style.top = (dy + dd) + 'px';
+	node.style.width = width + 'px';
+	node.style.height = height + 'px';
+	node.style.visibility = '';
+	node.style.minWidth = '';
+	node.style.minHeight = '';
+
+	parent.appendChild(node);
+
+	// Adds title for sidebar entries
+	if (this.sidebarTitles && title != null) {
+		var border = (mxClient.IS_QUIRKS) ? 2 * this.thumbPadding + 2 : 0;
+		parent.style.height = (this.thumbHeight + border + this.sidebarTitleSize + 8) +
+			'px';
+
+		var div = document.createElement('div');
+		div.style.fontSize = this.sidebarTitleSize + 'px';
+		div.style.textAlign = 'center';
+		div.style.whiteSpace = 'nowrap';
+
+		if (mxClient.IS_IE) {
+			div.style.height = (this.sidebarTitleSize + 12) + 'px';
+		}
+
+		div.style.paddingTop = '4px';
+		mxUtils.write(div, title);
+		parent.appendChild(div);
+	}
+};
+
+/**
+ * Creates and returns a new palette item for the given image.
+ */
+Sidebar.prototype.createItem = function(cells, title, showLabel) {
+	var elt = document.createElement('a');
+	elt.setAttribute('href', 'javascript:void(0);');
+	elt.className = 'geItem';
+	elt.style.overflow = 'hidden';
+	var border = (mxClient.IS_QUIRKS) ? 8 + 2 * this.thumbPadding : 6;
+	elt.style.width = (this.thumbWidth + border) + 'px';
+	elt.style.height = (this.thumbHeight + border) + 'px';
+	elt.style.padding = this.thumbPadding + 'px';
+
+	// Blocks default click action
+	mxEvent.addListener(elt, 'click', function(evt) {
+		mxEvent.consume(evt);
+	});
+
+	this.createThumb(cells, this.thumbWidth, this.thumbHeight, elt, title,
+		showLabel);
+
+	return elt;
+};
+
+/**
+ * Creates a drop handler for inserting the given cells.
+ */
+Sidebar.prototype.createDropHandler = function(cells, allowSplit) {
+	return function(graph, evt, target, x, y) {
+		if (graph.isEnabled()) {
+			cells = graph.getImportableCells(cells);
+
+			if (cells.length > 0) {
+				var validDropTarget = (target != null) ?
+					graph.isValidDropTarget(target, cells, evt) : false;
+				var select = null;
+
+				if (target != null && !validDropTarget) {
+					target = null;
+				}
+
+				// Splits the target edge or inserts into target group
+				if (allowSplit && graph.isSplitEnabled() && graph.isSplitTarget(target,
+						cells, evt)) {
+					graph.splitEdge(target, cells, null, x, y);
+					select = cells;
+				} else if (cells.length > 0) {
+					select = graph.importCells(cells, x, y, target);
+				}
+
+				if (select != null && select.length > 0) {
+					graph.scrollCellToVisible(select[0]);
+					graph.setSelectionCells(select);
+				}
+			}
+		}
+	};
+};
+
+/**
+ * Creates and returns a preview element for the given width and height.
+ */
+Sidebar.prototype.createDragPreview = function(width, height) {
+	var elt = document.createElement('div');
+	elt.style.border = '1px dashed black';
+	elt.style.width = width + 'px';
+	elt.style.height = height + 'px';
+
+	return elt;
+};
+
+/**
+ * Creates a drag source for the given element.
+ */
+Sidebar.prototype.createDragSource = function(elt, dropHandler, preview) {
+	var dragSource = mxUtils.makeDraggable(elt, this.editorUi.editor.graph,
+		dropHandler,
+		preview, 0, 0, this.editorUi.editor.graph.autoscroll, true, true);
+
+	// Allows drop into cell only if target is a valid root
+	dragSource.getDropTarget = function(graph, x, y) {
+		var target = mxDragSource.prototype.getDropTarget.apply(this, arguments);
+
+		if (!graph.isValidRoot(target)) {
+			target = null;
+		}
+
+		return target;
+	};
+
+	return dragSource;
+};
+
+/**
+ * Adds a handler for inserting the cell with a single click.
+ */
+Sidebar.prototype.addClickHandler = function(elt, ds) {
+	var graph = this.editorUi.editor.graph;
+	var first = null;
+
+	mxEvent.addGestureListeners(elt, function(evt) {
+		first = new mxPoint(mxEvent.getClientX(evt), mxEvent.getClientY(evt));
+	});
+
+	var oldMouseUp = ds.mouseUp;
+	ds.mouseUp = function(evt) {
+		if (!mxEvent.isPopupTrigger(evt) && this.currentGraph == null && first !=
+			null) {
+			var tol = graph.tolerance;
+
+			if (Math.abs(first.x - mxEvent.getClientX(evt)) <= tol &&
+				Math.abs(first.y - mxEvent.getClientY(evt)) <= tol) {
+				var gs = graph.getGridSize();
+				ds.drop(graph, evt, null, gs, gs);
+			}
+		}
+
+		oldMouseUp.apply(this, arguments);
+		first = null;
+	};
+};
+
+/**
+ * Giuseppe Careri
+ * Create xml document vertex
+ */
+Sidebar.prototype.createXmlDocument = function(element, label, variables,
+	values) {
+	var doc = mxUtils.createXmlDocument();
+	var node = doc.createElement(element)
+	node.setAttribute('label', label);
+
+	variables.forEach(function(variable, index) {
+		node.setAttribute(variable, values[index] ? values[index] : '');
+	});
+
+	return node;
+}
+
+/**
+ * Giuseppe Careri
+ * Creates a drop handler for inserting the given cells.
+ */
+Sidebar.prototype.createVertexTemplate = function(style, width, height, value,
+	title, showLabel) {
+	var variables = [];
+	var values = [];
+
+	switch (value) {
+		case 'answer':
+			break;
+		case 'ispeechasr':
+			variables = ['key', 'model', 'ispeech_asr_language'];
+			values = ['', 0, 'it-IT'];
+			break;
+		case 'playback':
+			variables = ['file_id', 'opts'];
+			values = ['0'];
+			break;
+		case 'background':
+			variables = ['file_id', 'response', 'digit'];
+			values = ['0', '5', '1'];
+			break;
+		case 'menu':
+			variables = ['file_id', 'response', 'digit', 'retry', 'variable_id'];
+			values = ['0', '5', '1', '1', '0'];
+			break;
+		case 'getdigits':
+			variables = ['file_id', 'response', 'mindigit', 'maxdigit', 'retry', 'variable_id'];
+			values = ['0', '5', '1', '10', '1', '0'];
+			break;
+		case 'custom_app':
+			variables = ['application', 'options'];
+			values = ['',''];
+			break;
+		case 'set':
+			variables = ['variable_id', 'variable_value'];
+			values = ['0', ''];
+			break;
+		case 'database':
+			variables = ['odbc_id', 'query', 'variable_id'];
+			values = ['0', '', '0'];
+			break;
+		case 'noop':
+			variables = ['output'];
+			values = [];
+			break;
+		case 'gotoc':
+			variables = ['context', 'extension'];
+			values = [];
+			break;
+		case 'system':
+			variables = ['variable_id', 'command'];
+			values = [];
+			break;
+		case 'agi':
+			variables = ['args', 'command'];
+			values = [];
+			break;
+		case 'gotoif':
+			variables = ['condition'];
+			values = [];
+			break;
+		case 'gotoiftime':
+			variables = ['interval_id'];
+			values = ['0'];
+			break;
+		case 'gotoifmultitime':
+			variables = ['interval_id'];
+			values = ['0'];
+			break;
+		case 'vswitch':
+			variables = ['variable_id'];
+			values = ['0'];
+			break;
+		case 'saydigits':
+			variables = ['digits', 'escape_digits'];
+			values = ['', '#'];
+			break;
+		case 'saynumber':
+			variables = ['number', 'escape_digits'];
+			values = ['', '#'];
+			break;
+		case 'sayphonetic':
+			variables = ['text', 'escape_digits'];
+			values = ['', '#'];
+			break;
+		case 'record':
+			variables = ['file', 'timeout', 'escape_digits'];
+			values = ['', '-1', '#'];
+			break;
+		case 'dial':
+			variables = ['sip_id', 'timeout', 'custom_app', 'url'];
+			values = ['0', '60'];
+			break;
+		case 'ext_dial':
+			variables = ['phone', 'trunk_id', 'timeout', 'opts', 'url'];
+			values = ['', '0', '60'];
+			break;
+		case 'tts':
+			variables = ['text', 'google_tts_language'];
+			values = ['', 'it'];
+			break;
+		case 'ispeechtts':
+			variables = ['text', 'key', 'ispeech_tts_language'];
+			values = ['', '', 'euritalianfemale'];
+			break;
+		case 'queue':
+			variables = ['queue_id', 'opts', 'url', 'file_id', 'timeout', 'agi',
+				'macro', 'gosub', 'position'
+			];
+			values = ['0', '', '', '0', '300'];
+			break;
+		case 'voicemail':
+			variables = ['boxnumber', 'context', 'opts'];
+			values = ['', 'from-voicemail'];
+			break;
+		case 'subproject':
+			variables = ['project_id'];
+			values = ['0'];
+			break;
+		case 'math':
+			variables = ['operation', 'variable_id'];
+			values = ['', '0'];
+			break;
+		case 'queuelog':
+			variables = ['queuename', 'agent', 'queue_event', 'data1', 'data2', 'data3',
+				'data4', 'data5'
+			];
+			values = [];
+			break;
+		case 'goal':
+			variables = ['goalname'];
+			values = [];
+			break;
+		case 'callback':
+			variables = ['list_id'];
+			values = ['0', '{CALLERID(num)}'];
+			break;
+		default:
+			variables = [];
+			values = [];
+			break;
+	}
+
+	var node = this.createXmlDocument(value, title, variables, values);
+
+	//var cells = [new mxCell((value != null) ? value : '', new mxGeometry(0, 0, width, height), style)];
+	var cells = [new mxCell(node, new mxGeometry(0, 0, width, height), style)];
+	cells[0].vertex = true;
+
+	return this.createVertexTemplateFromCells(cells, width, height, title,
+		showLabel);
+};
+
+/**
+ * Creates a drop handler for inserting the given cells.
+ */
+Sidebar.prototype.createVertexTemplateFromCells = function(cells, width, height,
+	title, showLabel) {
+	var elt = this.createItem(cells, title, showLabel);
+	var ds = this.createDragSource(elt, this.createDropHandler(cells, true), this
+		.createDragPreview(width, height));
+	this.addClickHandler(elt, ds);
+
+	// Uses guides for vertices only if enabled in graph
+	ds.isGuidesEnabled = mxUtils.bind(this, function() {
+		return this.editorUi.editor.graph.graphHandler.guidesEnabled;
+	});
+
+	// Shows a tooltip with the rendered cell
+	if (!touchStyle) {
+		mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) {
+			this.showTooltip(elt, cells, title, showLabel);
+		}));
+	}
+
+	return elt;
+};
+
+/**
+ * Creates a drop handler for inserting the given cells.
+ */
+Sidebar.prototype.createEdgeTemplate = function(style, width, height, value,
+	title, showLabel) {
+	var cells = [new mxCell((value != null) ? value : '', new mxGeometry(0, 0,
+		width, height), style)];
+	cells[0].geometry.setTerminalPoint(new mxPoint(0, height), true);
+	cells[0].geometry.setTerminalPoint(new mxPoint(width, 0), false);
+	cells[0].geometry.relative = true;
+	cells[0].edge = true;
+
+	return this.createEdgeTemplateFromCells(cells, width, height, title,
+		showLabel);
+};
+
+/**
+ * Creates a drop handler for inserting the given cells.
+ */
+Sidebar.prototype.createEdgeTemplateFromCells = function(cells, width, height,
+	title, showLabel) {
+	var elt = this.createItem(cells, title, showLabel);
+	this.createDragSource(elt, this.createDropHandler(cells, false), this.createDragPreview(
+		width, height));
+
+	// Installs the default edge
+	var graph = this.editorUi.editor.graph;
+	mxEvent.addListener(elt, 'click', mxUtils.bind(this, function(evt) {
+		if (this.installEdges) {
+			graph.setDefaultEdge(cells[0]);
+		}
+
+		// Highlights the entry for 200ms
+		elt.style.backgroundColor = '#ffffff';
+
+		window.setTimeout(function() {
+			elt.style.backgroundColor = '';
+		}, 300);
+
+		mxEvent.consume(evt);
+	}));
+
+	// Shows a tooltip with the rendered cell
+	if (!touchStyle) {
+		mxEvent.addListener(elt, 'mousemove', mxUtils.bind(this, function(evt) {
+			this.showTooltip(elt, cells, title, showLabel);
+		}));
+	}
+
+	return elt;
+};
+
+/**
+ * Adds the given palette.
+ */
+Sidebar.prototype.addPalette = function(id, title, expanded, onInit) {
+	var elt = this.createTitle(title);
+	this.container.appendChild(elt);
+
+	var div = document.createElement('div');
+	div.className = 'geSidebar';
+
+	if (expanded) {
+		onInit(div);
+		onInit = null;
+	} else {
+		div.style.display = 'none';
+	}
+
+	this.addFoldingHandler(elt, div, onInit);
+
+	var outer = document.createElement('div');
+	outer.appendChild(div);
+	this.container.appendChild(outer);
+
+	// Keeps references to the DOM nodes
+	if (id != null) {
+		this.palettes[id] = [elt, outer];
+	}
+};
+
+/**
+ * Create the given title element.
+ */
+Sidebar.prototype.addFoldingHandler = function(title, content, funct) {
+	var initialized = false;
+
+	title.style.backgroundImage = (content.style.display == 'none') ?
+		'url(' + IMAGE_PATH + '/collapsed.gif)' : 'url(' + IMAGE_PATH +
+		'/expanded.gif)';
+	title.style.backgroundRepeat = 'no-repeat';
+	title.style.backgroundPosition = '100% 50%';
+
+	mxEvent.addListener(title, 'click', function(evt) {
+		if (content.style.display == 'none') {
+			if (!initialized) {
+				initialized = true;
+
+				if (funct != null) {
+					title.style.cursor = 'wait';
+					window.setTimeout(function() {
+						funct(content);
+						title.style.cursor = '';
+					}, 0);
+				}
+			}
+
+			title.style.backgroundImage = 'url(' + IMAGE_PATH + '/expanded.gif)';
+			content.style.display = 'block';
+		} else {
+			title.style.backgroundImage = 'url(' + IMAGE_PATH + '/collapsed.gif)';
+			content.style.display = 'none';
+		}
+
+		mxEvent.consume(evt);
+	});
+};
+
+/**
+ * Removes the palette for the given ID.
+ */
+Sidebar.prototype.removePalette = function(id) {
+	var elts = this.palettes[id];
+
+	if (elts != null) {
+		this.palettes[id] = null;
+
+		for (var i = 0; i < elts.length; i++) {
+			this.container.removeChild(elts[i]);
+		}
+
+		return true;
+	}
+
+	return false;
+};
+
+/**
+ * Adds the given image palette.
+ */
+Sidebar.prototype.addImagePalette = function(id, title, prefix, postfix, items,
+	titles) {
+	// Giuseppe Careri
+	// Expanded Sidebar only entry
+	this.addPalette(id, title, (id === 'entry'), mxUtils.bind(this, function(
+		content) {
+		var showTitles = titles != null;
+
+		for (var i = 0; i < items.length; i++) {
+			var icon = prefix + items[i] + postfix;
+			content.appendChild(this.createVertexTemplate('image;image=' + icon, 80,
+				80, items[i], (showTitles) ? titles[i] : null, showTitles));
+		}
+	}));
+};
diff --git a/public/assets/plugins/mxgraph/js/Toolbar.js b/public/assets/plugins/mxgraph/js/Toolbar.js
new file mode 100644
index 0000000..7eab562
--- /dev/null
+++ b/public/assets/plugins/mxgraph/js/Toolbar.js
@@ -0,0 +1,407 @@
+/**
+ * $Id: Toolbar.js,v 1.3 2013-02-20 16:21:29 gaudenz Exp $
+ * Copyright (c) 2006-2012, JGraph Ltd
+ */
+/**
+ * Construcs a new toolbar for the given editor.
+ */
+function Toolbar(editorUi, container)
+{
+	this.editorUi = editorUi;
+	this.container = container;
+	this.init();
+
+	// Global handler to hide the current menu
+	mxEvent.addGestureListeners(document, mxUtils.bind(this, function(evt)
+	{
+		this.hideMenu();
+	}));
+};
+
+/**
+ * Adds the toolbar elements.
+ */
+Toolbar.prototype.init = function()
+{
+	this.addItems(['save', 'publish', '-', 'print', 'undo', 'redo', '-', 'copy', 'cut', 'paste', 'delete', '-', 'duplicate', '-', 'actualSize', 'zoomIn', 'zoomOut', '-']);
+	var fontElt = this.addMenu('Helvetica', mxResources.get('fontFamily'), true, 'fontFamily');
+	fontElt.style.whiteSpace = 'nowrap';
+	fontElt.style.overflow = 'hidden';
+	fontElt.style.width = '70px';
+	this.addSeparator();
+	var sizeElt = this.addMenu('12', mxResources.get('fontSize'), true, 'fontSize');
+	sizeElt.style.whiteSpace = 'nowrap';
+	sizeElt.style.overflow = 'hidden';
+	sizeElt.style.width = '30px';
+
+	this.addItems(['-', 'bold', 'italic', 'underline']);
+	// Giuseppe Careri
+	// var align = this.addMenuFunction('geSprite-left', mxResources.get('align'), false, mxUtils.bind(this, function(menu)
+	// {
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_LEFT], 'geIcon geSprite geSprite-left', null).setAttribute('title', mxResources.get('left'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_CENTER], 'geIcon geSprite geSprite-center', null).setAttribute('title', mxResources.get('center'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ALIGN], [mxConstants.ALIGN_RIGHT], 'geIcon geSprite geSprite-right', null).setAttribute('title', mxResources.get('right'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_TOP], 'geIcon geSprite geSprite-top', null).setAttribute('title', mxResources.get('top'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_MIDDLE], 'geIcon geSprite geSprite-middle', null).setAttribute('title', mxResources.get('middle'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_VERTICAL_ALIGN], [mxConstants.ALIGN_BOTTOM], 'geIcon geSprite geSprite-bottom', null).setAttribute('title', mxResources.get('bottom'));
+	// }));
+	// this.addItems(['fontColor', '-']);
+	// var line = this.addMenuFunction('geSprite-straight', mxResources.get('line'), false, mxUtils.bind(this, function(menu)
+	// {
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], [null], 'geIcon geSprite geSprite-straight', null).setAttribute('title', mxResources.get('straight'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['entityRelationEdgeStyle'], 'geIcon geSprite geSprite-entity', null).setAttribute('title', mxResources.get('entityRelation'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE, mxConstants.STYLE_ELBOW], ['elbowEdgeStyle', 'horizontal'], 'geIcon geSprite geSprite-helbow', null).setAttribute('title', mxResources.get('horizontal'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE, mxConstants.STYLE_ELBOW], ['elbowEdgeStyle', 'vertical'], 'geIcon geSprite geSprite-velbow', null).setAttribute('title', mxResources.get('vertical'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['segmentEdgeStyle'], 'geIcon geSprite geSprite-segment', null).setAttribute('title', mxResources.get('manual'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_EDGE], ['orthogonalEdgeStyle'], 'geIcon geSprite geSprite-orthogonal', null).setAttribute('title', mxResources.get('automatic'));
+	// }));
+	// var linestart = this.addMenuFunction('geSprite-startclassic', mxResources.get('lineend'), false, mxUtils.bind(this, function(menu)
+	// {
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.NONE, 0], 'geIcon geSprite geSprite-noarrow', null).setAttribute('title', mxResources.get('none'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_CLASSIC, 1], 'geIcon geSprite geSprite-startclassic', null).setAttribute('title', mxResources.get('classic'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OPEN, 1], 'geIcon geSprite geSprite-startopen', null).setAttribute('title', mxResources.get('openArrow'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_BLOCK, 1], 'geIcon geSprite geSprite-startblock', null).setAttribute('title', mxResources.get('block'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OVAL, 1], 'geIcon geSprite geSprite-startoval', null).setAttribute('title', mxResources.get('oval'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND, 1], 'geIcon geSprite geSprite-startdiamond', null).setAttribute('title', mxResources.get('diamond'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND_THIN, 1], 'geIcon geSprite geSprite-startthindiamond', null).setAttribute('title', mxResources.get('diamondThin'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_CLASSIC, 0], 'geIcon geSprite geSprite-startclassictrans', null).setAttribute('title', mxResources.get('classic'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_BLOCK, 0], 'geIcon geSprite geSprite-startblocktrans', null).setAttribute('title', mxResources.get('block'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_OVAL, 0], 'geIcon geSprite geSprite-startovaltrans', null).setAttribute('title', mxResources.get('oval'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND, 0], 'geIcon geSprite geSprite-startdiamondtrans', null).setAttribute('title', mxResources.get('diamond'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_STARTARROW, 'startFill'], [mxConstants.ARROW_DIAMOND_THIN, 0], 'geIcon geSprite geSprite-startthindiamondtrans', null).setAttribute('title', mxResources.get('diamondThin'));
+	// }));
+	// var lineend = this.addMenuFunction('geSprite-endclassic', mxResources.get('lineend'), false, mxUtils.bind(this, function(menu)
+	// {
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.NONE, 0], 'geIcon geSprite geSprite-noarrow', null).setAttribute('title', mxResources.get('none'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_CLASSIC, 1], 'geIcon geSprite geSprite-endclassic', null).setAttribute('title', mxResources.get('classic'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OPEN, 1], 'geIcon geSprite geSprite-endopen', null).setAttribute('title', mxResources.get('openArrow'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_BLOCK, 1], 'geIcon geSprite geSprite-endblock', null).setAttribute('title', mxResources.get('block'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OVAL, 1], 'geIcon geSprite geSprite-endoval', null).setAttribute('title', mxResources.get('oval'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND, 1], 'geIcon geSprite geSprite-enddiamond', null).setAttribute('title', mxResources.get('diamond'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND_THIN, 1], 'geIcon geSprite geSprite-endthindiamond', null).setAttribute('title', mxResources.get('diamondThin'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_CLASSIC, 0], 'geIcon geSprite geSprite-endclassictrans', null).setAttribute('title', mxResources.get('classic'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_BLOCK, 0], 'geIcon geSprite geSprite-endblocktrans', null).setAttribute('title', mxResources.get('block'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_OVAL, 0], 'geIcon geSprite geSprite-endovaltrans', null).setAttribute('title', mxResources.get('oval'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND, 0], 'geIcon geSprite geSprite-enddiamondtrans', null).setAttribute('title', mxResources.get('diamond'));
+	// 	this.editorUi.menus.styleChange(menu, '', [mxConstants.STYLE_ENDARROW, 'endFill'], [mxConstants.ARROW_DIAMOND_THIN, 0], 'geIcon geSprite geSprite-endthindiamondtrans', null).setAttribute('title', mxResources.get('diamondThin'));
+	// }));
+	// this.addItems(['-', 'strokeColor', 'image', 'fillColor']);
+	// this.addItem('geSprite-gradientcolor', 'gradientColor').setAttribute('title', mxResources.get('gradient'));
+	// this.addItems(['shadow']);
+
+	var graph = this.editorUi.editor.graph;
+
+	// Update font size and font family labels
+	var update = mxUtils.bind(this, function()
+	{
+		var ff = 'Helvetica';
+		var fs = '12';
+    	var state = graph.getView().getState(graph.getSelectionCell());
+
+    	if (state != null)
+    	{
+    		ff = state.style[mxConstants.STYLE_FONTFAMILY] || ff;
+    		fs = state.style[mxConstants.STYLE_FONTSIZE] || fs;
+
+    		if (ff.length > 10)
+    		{
+    			ff = ff.substring(0, 8) + '...';
+    		}
+
+    		fontElt.innerHTML = ff;
+    		sizeElt.innerHTML = fs;
+    	}
+	});
+
+    graph.getSelectionModel().addListener(mxEvent.CHANGE, update);
+    graph.getModel().addListener(mxEvent.CHANGE, update);
+
+	// Giuseppe Careri
+	// Updates button states
+  //this.addEdgeSelectionHandler([line, linestart, lineend]);
+	//this.addSelectionHandler([align]);
+};
+
+/**
+ * Hides the current menu.
+ */
+Toolbar.prototype.hideMenu = function()
+{
+	if (this.currentMenu != null)
+	{
+		this.currentMenu.hideMenu();
+		this.currentMenu.destroy();
+		this.currentMenu = null;
+	}
+};
+
+/**
+ * Adds a label to the toolbar.
+ */
+Toolbar.prototype.addMenu = function(label, tooltip, showLabels, name)
+{
+	var menu = this.editorUi.menus.get(name);
+	var elt = this.addMenuFunction(label, tooltip, showLabels, menu.funct);
+
+	menu.addListener('stateChanged', function()
+	{
+		elt.setEnabled(menu.enabled);
+	});
+
+	return elt;
+};
+
+/**
+ * Adds a label to the toolbar.
+ */
+Toolbar.prototype.addMenuFunction = function(label, tooltip, showLabels, funct)
+{
+	var elt = (showLabels) ? this.createLabel(label) : this.createButton(label);
+	this.initElement(elt, tooltip);
+	this.addMenuHandler(elt, showLabels, funct);
+	this.container.appendChild(elt);
+
+	return elt;
+};
+
+/**
+ * Adds a separator to the separator.
+ */
+Toolbar.prototype.addSeparator = function()
+{
+	var elt = document.createElement('div');
+	elt.className = 'geSeparator';
+	this.container.appendChild(elt);
+
+	return elt;
+};
+
+/**
+ * Adds given action item
+ */
+Toolbar.prototype.addItems = function(keys)
+{
+	for (var i = 0; i < keys.length; i++)
+	{
+		var key = keys[i];
+
+		if (key == '-')
+		{
+			this.addSeparator();
+		}
+		else
+		{
+			this.addItem('geSprite-' + key.toLowerCase(), key);
+		}
+	}
+};
+
+/**
+ * Adds given action item
+ */
+Toolbar.prototype.addItem = function(sprite, key)
+{
+	var action = this.editorUi.actions.get(key);
+	var elt = null;
+
+	if (action != null)
+	{
+		elt = this.addButton(sprite, action.label, action.funct);
+		elt.setEnabled(action.enabled);
+
+		action.addListener('stateChanged', function()
+		{
+			elt.setEnabled(action.enabled);
+		});
+	}
+
+	return elt;
+};
+
+/**
+ * Adds a button to the toolbar.
+ */
+Toolbar.prototype.addButton = function(classname, tooltip, funct)
+{
+	var elt = this.createButton(classname);
+
+	this.initElement(elt, tooltip);
+	this.addClickHandler(elt, funct);
+	this.container.appendChild(elt);
+
+	return elt;
+};
+
+/**
+ * Updates the states of the given toolbar items based on the selection.
+ */
+Toolbar.prototype.addSelectionHandler = function(items)
+{
+	var graph = this.editorUi.editor.graph;
+
+	var selectionListener = function()
+    {
+    	var selected = !graph.isSelectionEmpty();
+
+    	for (var i = 0; i < items.length; i++)
+    	{
+    		items[i].setEnabled(selected);
+    	}
+    };
+
+    graph.getSelectionModel().addListener(mxEvent.CHANGE, selectionListener);
+    selectionListener();
+};
+
+/**
+ * Updates the states of the given toolbar items based on the selection.
+ */
+Toolbar.prototype.addEdgeSelectionHandler = function(items)
+{
+	var graph = this.editorUi.editor.graph;
+
+	var selectionListener = function()
+    {
+		var edgeSelected = false;
+
+		if (!graph.isSelectionEmpty())
+		{
+			var cells = graph.getSelectionCells();
+
+			for (var i = 0; i < cells.length; i++)
+			{
+				if (graph.getModel().isEdge(cells[i]))
+				{
+					edgeSelected = true;
+					break;
+				}
+			}
+		}
+
+    	for (var i = 0; i < items.length; i++)
+    	{
+    		items[i].setEnabled(edgeSelected);
+    	}
+    };
+
+    graph.getSelectionModel().addListener(mxEvent.CHANGE, selectionListener);
+    selectionListener();
+};
+
+/**
+ * Initializes the given toolbar element.
+ */
+Toolbar.prototype.initElement = function(elt, tooltip)
+{
+	elt.setAttribute('tabindex', '0');
+
+	// Adds tooltip
+	if (tooltip != null)
+	{
+		elt.setAttribute('title', tooltip);
+	}
+
+	this.addEnabledState(elt);
+};
+
+/**
+ * Adds enabled state with setter to DOM node (avoids JS wrapper).
+ */
+Toolbar.prototype.addEnabledState = function(elt)
+{
+	var classname = elt.className;
+
+	elt.setEnabled = function(value)
+	{
+		elt.enabled = value;
+
+		if (value)
+		{
+			elt.className = classname;
+		}
+		else
+		{
+			elt.className = classname + ' geDisabled';
+		}
+	};
+
+	elt.setEnabled(true);
+};
+
+/**
+ * Adds enabled state with setter to DOM node (avoids JS wrapper).
+ */
+Toolbar.prototype.addClickHandler = function(elt, funct)
+{
+	if (funct != null)
+	{
+		mxEvent.addListener(elt, 'click', function(evt)
+		{
+			if (elt.enabled)
+			{
+				funct(evt);
+			}
+
+			mxEvent.consume(evt);
+		});
+	}
+};
+
+/**
+ * Creates and returns a new button.
+ */
+Toolbar.prototype.createButton = function(classname)
+{
+	var elt = document.createElement('a');
+	elt.setAttribute('href', 'javascript:void(0);');
+	elt.className = 'geButton';
+
+	var inner = document.createElement('div');
+	inner.className = 'geSprite ' + classname;
+	elt.appendChild(inner);
+
+	return elt;
+};
+
+/**
+ * Creates and returns a new button.
+ */
+Toolbar.prototype.createLabel = function(label, tooltip)
+{
+	var elt = document.createElement('a');
+	elt.setAttribute('href', 'javascript:void(0);');
+	elt.className = 'geLabel';
+	mxUtils.write(elt, label);
+
+	return elt;
+};
+
+/**
+ * Adds a handler for showing a menu in the given element.
+ */
+Toolbar.prototype.addMenuHandler = function(elt, showLabels, funct, showAll)
+{
+	if (funct != null)
+	{
+		var graph = this.editorUi.editor.graph;
+		var menu = null;
+
+		mxEvent.addListener(elt, 'click', mxUtils.bind(this, function(evt)
+		{
+			if (elt.enabled == null || elt.enabled)
+			{
+				graph.panningHandler.hideMenu();
+				menu = new mxPopupMenu(funct);
+				menu.div.className += ' geToolbarMenu';
+				menu.showDisabled = showAll;
+				menu.labels = showLabels;
+				menu.autoExpand = true;
+
+				menu.popup(elt.offsetLeft, elt.offsetTop + elt.offsetHeight + 34, null, evt);
+				this.currentMenu = menu;
+			}
+
+			mxEvent.consume(evt);
+		}));
+	}
+};
diff --git a/public/assets/plugins/mxgraph/js/custom.js b/public/assets/plugins/mxgraph/js/custom.js
new file mode 100644
index 0000000..a1dcf5c
--- /dev/null
+++ b/public/assets/plugins/mxgraph/js/custom.js
@@ -0,0 +1,270 @@
+var urlParams = (function(url) {
+	var result = new Object();
+	var idx = url.lastIndexOf('?');
+
+	if (idx > 0) {
+		var params = url.substring(idx + 1).split('&');
+
+		for (var i = 0; i < params.length; i++) {
+			idx = params[i].indexOf('=');
+
+			if (idx > 0) {
+				result[params[i].substring(0, idx)] = params[i].substring(idx + 1);
+			}
+		}
+	}
+
+	return result;
+})(window.location.href);
+
+var t0 = new Date();
+
+// Public global variables
+var MAX_REQUEST_SIZE = 10485760;
+var MAX_WIDTH = 12000;
+var MAX_HEIGHT = 12000;
+
+// CUSTOM_PARAMETERS - URLs for save and export
+var EXPORT_URL = 'http://exp.draw.io/ImageExport2/export';
+var SHARE_HOST = 'http://localhost:3000';
+
+var SAVE_URL = 'api/square/projects/';
+var VARIABLE_URL = 'api/square/variables/';
+
+// Paths and files
+var STENCIL_PATH = '/assets/plugins/mxgraph/stencils';
+var SHAPES_PATH = '/assets/plugins/mxgraph/shapes';
+var IMAGE_PATH = '/assets/plugins/mxgraph/images';
+// Path for images inside the diagram
+//var GRAPH_IMAGE_PATH = 'assets/plugins/mxgraph/img';
+//var ICONFINDER_PATH = 'iconfinder';
+var STYLE_PATH = '/assets/plugins/mxgraph/styles';
+var CSS_PATH = '/assets/plugins/mxgraph/styles';
+var OPEN_FORM = 'api/square/projects/open';
+var TEMPLATE_PATH = '/assets/plugins/mxgraph/templates';
+
+// Directory for i18 files and basename for main i18n file
+var RESOURCES_PATH = '/assets/plugins/mxgraph/resources';
+var RESOURCE_BASE = RESOURCES_PATH + '/dia';
+
+// Specifies connection mode for touch devices (at least one should be true)
+var tapAndHoldStartsConnection = true;
+var showConnectorImg = true;
+
+var mxLoadResources = false;
+var mxLanguage = 'it';
+var mxLanguages = ['ar', 'bs', 'cs', 'da', 'de', 'el', 'es', 'es-ar', 'fr',
+	'hu', 'id', 'it', 'ja', 'ko', 'nl', 'no', 'pl', 'pt-br', 'pt', 'ro', 'ru',
+	'sr', 'sv', 'th', 'tr', 'uk', 'zh'
+];
+var mxBasePath = 'assets/plugins/mxgraph';
+var geBasePath = 'assets/plugins/mxgraph/js';
+
+var ISPEECHLANG = {
+	usenglishfemale: "US English Female",
+	usenglishmale: "US English Male",
+	ukenglishfemale: "UK English Female",
+	ukenglishmale: "UK English Male",
+	auenglishfemale: "Australian English",
+	usspanishfemale: "US Spanish Female",
+	usspanishmale: "US Spanish Male",
+	chchinesefemale: "Chinese Female",
+	chchinesemale: "Chinese Male",
+	hkchinesefemale: "Hong Kong Cantonese Female",
+	twchinesefemale: "Taiwan Chinese Female",
+	jpjapanesefemale: "Japanese Female",
+	jpjapanesemale: "Japanese Male",
+	krkoreanfemale: "Korean Female",
+	krkoreanmale: "Korean Male",
+	caenglishfemale: "Canadian English Female",
+	huhungarianfemale: "Hungarian Female",
+	brportuguesefemale: "Brazilian Portuguese Female",
+	eurportuguesefemale: "European Portuguese Female",
+	eurportuguesemale: "European Portuguese Male",
+	eurspanishfemale: "European Spanish Female",
+	eurspanishmale: "European Spanish Male",
+	eurcatalanfemale: "European Catalan Female",
+	eurczechfemale: "European Czech Female",
+	eurdanishfemale: "European Danish Female",
+	eurfinnishfemale: "European Finnish Female",
+	eurfrenchfemale: "European French Female",
+	eurfrenchmale: "European French Male",
+	eurnorwegianfemale: "European Norwegian Female",
+	eurdutchfemale: "European Dutch Female",
+	eurpolishfemale: "European Polish Female",
+	euritalianfemale: "European Italian Female",
+	eurturkishfemale: "European Turkish Female	",
+	eurturkishmale: "European Turkish Male",
+	eurgermanfemale: "European German Female",
+	eurgermanmale: "European German Male",
+	rurussianfemale: "Russian Female",
+	rurussianmale: "Russian Male",
+	swswedishfemale: "Swedish Female",
+	cafrenchfemale: "Canadian French Female",
+	cafrenchmale: "Canadian French Male"
+};
+
+var ISPEECHASRLANG = {
+	"en-US": "English (US)",
+	"en-CA": "English (Canada)",
+	"en-GB": "English (UK)",
+	"en-AU": "English (Australia)",
+	"es-ES": "Spanish (Spain)",
+	"es-MX": "Spanish (Mexico)",
+	"it-IT": "Italian (Italy) / Finnish (Finland)",
+	"fr-FR": "French (France)",
+	"fr-CA": "French (Canada)",
+	"pl-PL": "Polish (Poland)",
+	"pt-PT": "Portuguese (Portugal)",
+	"ca-ES": "Catalan (Catalan)",
+	"zh-TW": "Chinese (Taiwan)",
+	"da-DK": "Danish (Denmark)",
+	"fr-FR": "German (Germany)",
+	"ja-JP": "Japanese (Japan)",
+	"ko-KR": "Korean (Korea)",
+	"nl-NL": "Dutch (Netherlands)",
+	"nb-NO": "Norwegian (Norway)",
+	"pt-BR": "Portuguese (Brazil)",
+	"ru-RU": "Russian (Russia)",
+	"sv-SE": "Swedish (Sweden)",
+	"zh-CN": "Chinese (China)",
+	"zh-HK": "Chinese (Hong Kong)"
+};
+
+var ISPEECHASRMODEL = {
+	0: "Default",
+	date: "Date",
+	usmoney: "US Money",
+	numbersto9: "Numbers to 9",
+	numbersto99: "Numbers to 99",
+	numbersto999: "Numbers to 999",
+	time: "Time",
+	phonenumber: "Phone number",
+	streets: "Streets",
+	citystate: "US City/States"
+};
+
+var GOOGLETTSLANG = {
+	"af": "Afrikaans",
+	"sq": "Albanian",
+	"am": "Amharic",
+	"ar": "Arabic",
+	"hy": "Armenian",
+	"az": "Azerbaijani",
+	"eu": "Basque",
+	"be": "Belarusian",
+	"bn": "Bengali",
+	"bh": "Bihari",
+	"bs": "Bosnian",
+	"br": "Breton",
+	"bg": "Bulgarian",
+	"km": "Cambodian",
+	"ca": "Catalan",
+	"zh-CN": "Chinese (Simplified)",
+	"zh-TW": "Chinese (Traditional)",
+	"co": "Corsican",
+	"hr": "Croatian",
+	"cs": "Czech",
+	"da": "Danish",
+	"nl": "Dutch",
+	"en": "English",
+	"eo": "Esperanto",
+	"et": "Estonian",
+	"fo": "Faroese",
+	"tl": "Filipino",
+	"fi": "Finnish",
+	"fr": "French",
+	"fy": "Frisian",
+	"gl": "Galician",
+	"ka": "Georgian",
+	"de": "German",
+	"el": "Greek",
+	"gn": "Guarani",
+	"gu": "Gujarati",
+	"xx-hacker": "Hacker",
+	"ha": "Hausa",
+	"iw": "Hebrew",
+	"hi": "Hindi",
+	"hu": "Hungarian",
+	"is": "Icelandic",
+	"id": "Indonesian",
+	"ia": "Interlingua",
+	"ga": "Irish",
+	"it": "Italian",
+	"jw": "Javanese",
+	"ja": "Japanese",
+	"kn": "Kannada",
+	"kk": "Kazakh",
+	"rw": "Kinyarwanda",
+	"rn": "Kirundi",
+	"xx-klingon": "Klingon",
+	"ku": "Kurdish",
+	"ko": "Korean",
+	"ky": "Kyrgyz",
+	"lo": "Laothian",
+	"la": "Latin",
+	"lv": "Latvian",
+	"ln": "Lingala",
+	"lt": "Lithuanian",
+	"mk": "Macedonian",
+	"mg": "Malagasy",
+	"ms": "Malay",
+	"ml": "Malayalam",
+	"mt": "Maltese",
+	"mi": "Maori",
+	"mr": "Marathi",
+	"mo": "Moldavian",
+	"mn": "Mongolian",
+	"sr-ME": "Montenegrin",
+	"ne": "Nepali",
+	"no": "Norwegian",
+	"nn": "Norwegian (Nynorsk)",
+	"oc": "Occitan",
+	"or": "Oriya",
+	"om": "Oromo",
+	"ps": "Pashto",
+	"fa": "Persian",
+	"xx-pirate": "Pirate",
+	"pl": "Polish",
+	"pt-BR": "Portuguese (Brazil)",
+	"pt-PT": "Portuguese (Portugal)",
+	"pa": "Punjabi",
+	"qu": "Quechua",
+	"ro": "Romanian",
+	"rm": "Romansh",
+	"ru": "Russian",
+	"gd": "Scots Gaelic",
+	"sr": "Serbian",
+	"sh": "Serbo-Croatian",
+	"st": "Sesotho",
+	"sn": "Shona",
+	"sd": "Sindhi",
+	"si": "Sinhalese",
+	"sk": "Slovak",
+	"sl": "Slovenian",
+	"so": "Somali",
+	"es": "Spanish",
+	"su": "Sundanese",
+	"sw": "Swahili",
+	"sv": "Swedish",
+	"tg": "Tajik",
+	"ta": "Tamil",
+	"tt": "Tatar",
+	"te": "Telugu",
+	"th": "Thai",
+	"ti": "Tigrinya",
+	"to": "Tonga",
+	"tr": "Turkish",
+	"tk": "Turkmen",
+	"tw": "Twi",
+	"ug": "Uighur",
+	"uk": "Ukrainian",
+	"ur": "Urdu",
+	"uz": "Uzbek",
+	"vi": "Vietnamese",
+	"cy": "Welsh",
+	"xh": "Xhosa",
+	"yi": "Yiddish",
+	"yo": "Yoruba",
+	"zu": "Zulu"
+};
diff --git a/public/assets/plugins/mxgraph/js/mxClient.js b/public/assets/plugins/mxgraph/js/mxClient.js
new file mode 100644
index 0000000..93d223d
--- /dev/null
+++ b/public/assets/plugins/mxgraph/js/mxClient.js
@@ -0,0 +1,18397 @@
+var mxClient = {
+    VERSION: "2.0.0.0",
+    IS_IE: 0 <= navigator.userAgent.indexOf("MSIE"),
+    IS_IE6: 0 <= navigator.userAgent.indexOf("MSIE 6"),
+    IS_QUIRKS: 0 <= navigator.userAgent.indexOf("MSIE") && (null == document.documentMode || 5 == document.documentMode),
+    VML_PREFIX: "v",
+    OFFICE_PREFIX: "o",
+    IS_NS: 0 <= navigator.userAgent.indexOf("Mozilla/") && 0 > navigator.userAgent.indexOf("MSIE"),
+    IS_OP: 0 <= navigator.userAgent.indexOf("Opera/"),
+    IS_OT: 0 > navigator.userAgent.indexOf("Presto/2.4.") && 0 > navigator.userAgent.indexOf("Presto/2.3.") && 0 > navigator.userAgent.indexOf("Presto/2.2.") &&
+        0 > navigator.userAgent.indexOf("Presto/2.1.") && 0 > navigator.userAgent.indexOf("Presto/2.0.") && 0 > navigator.userAgent.indexOf("Presto/1."),
+    IS_SF: 0 <= navigator.userAgent.indexOf("AppleWebKit/") && 0 > navigator.userAgent.indexOf("Chrome/"),
+    IS_GC: 0 <= navigator.userAgent.indexOf("Chrome/"),
+    IS_MT: 0 <= navigator.userAgent.indexOf("Firefox/") && 0 > navigator.userAgent.indexOf("Firefox/1.") && 0 > navigator.userAgent.indexOf("Firefox/2.") || 0 <= navigator.userAgent.indexOf("Iceweasel/") && 0 > navigator.userAgent.indexOf("Iceweasel/1.") &&
+        0 > navigator.userAgent.indexOf("Iceweasel/2.") || 0 <= navigator.userAgent.indexOf("SeaMonkey/") && 0 > navigator.userAgent.indexOf("SeaMonkey/1.") || 0 <= navigator.userAgent.indexOf("Iceape/") && 0 > navigator.userAgent.indexOf("Iceape/1."),
+    IS_SVG: 0 <= navigator.userAgent.indexOf("Firefox/") || 0 <= navigator.userAgent.indexOf("Iceweasel/") || 0 <= navigator.userAgent.indexOf("Seamonkey/") || 0 <= navigator.userAgent.indexOf("Iceape/") || 0 <= navigator.userAgent.indexOf("Galeon/") || 0 <= navigator.userAgent.indexOf("Epiphany/") || 0 <=
+        navigator.userAgent.indexOf("AppleWebKit/") || 0 <= navigator.userAgent.indexOf("Gecko/") || 0 <= navigator.userAgent.indexOf("Opera/"),
+    NO_FO: 0 <= navigator.userAgent.indexOf("Firefox/1.") || 0 <= navigator.userAgent.indexOf("Iceweasel/1.") || 0 <= navigator.userAgent.indexOf("Firefox/2.") || 0 <= navigator.userAgent.indexOf("Iceweasel/2.") || 0 <= navigator.userAgent.indexOf("SeaMonkey/1.") || 0 <= navigator.userAgent.indexOf("Iceape/1.") || 0 <= navigator.userAgent.indexOf("Camino/1.") || 0 <= navigator.userAgent.indexOf("Epiphany/2.") ||
+        0 <= navigator.userAgent.indexOf("Opera/") || 0 <= navigator.userAgent.indexOf("MSIE") || 0 <= navigator.userAgent.indexOf("Mozilla/2."),
+    IS_VML: "MICROSOFT INTERNET EXPLORER" == navigator.appName.toUpperCase(),
+    IS_MAC: 0 < navigator.userAgent.toUpperCase().indexOf("MACINTOSH"),
+    IS_TOUCH: 0 < navigator.userAgent.toUpperCase().indexOf("IPAD") || 0 < navigator.userAgent.toUpperCase().indexOf("IPOD") || 0 < navigator.userAgent.toUpperCase().indexOf("IPHONE") || 0 < navigator.userAgent.toUpperCase().indexOf("ANDROID"),
+    IS_LOCAL: 0 > document.location.href.indexOf("http://") &&
+        0 > document.location.href.indexOf("https://"),
+    isBrowserSupported: function() {
+        return mxClient.IS_VML || mxClient.IS_SVG
+    },
+    link: function(a, b, c) {
+        c = c || document;
+        if (mxClient.IS_IE6) c.write('\x3clink rel\x3d"' + a + '" href\x3d"' + b + '" charset\x3d"ISO-8859-1" type\x3d"text/css"/\x3e');
+        else {
+            var d = c.createElement("link");
+            d.setAttribute("rel", a);
+            d.setAttribute("href", b);
+            d.setAttribute("charset", "ISO-8859-1");
+            d.setAttribute("type", "text/css");
+            c.getElementsByTagName("head")[0].appendChild(d)
+        }
+    },
+    include: function(a) {
+        document.write('\x3cscript src\x3d"' +
+            a + '"\x3e\x3c/script\x3e')
+    },
+    dispose: function() {
+        for (var a = 0; a < mxEvent.objects.length; a++) null != mxEvent.objects[a].mxListenerList && mxEvent.removeAllListeners(mxEvent.objects[a])
+    }
+};
+mxClient.IS_OP && mxClient.IS_OT ? mxClient.CSS_PREFIX = "O" : mxClient.IS_SF || mxClient.IS_GC ? mxClient.CSS_PREFIX = "Webkit" : mxClient.IS_MT ? mxClient.CSS_PREFIX = "Moz" : mxClient.IS_IE && 9 <= document.documentMode && (mxClient.CSS_PREFIX = "ms");
+"undefined" == typeof mxLoadResources && (mxLoadResources = !0);
+"undefined" == typeof mxResourceExtension && (mxResourceExtension = ".txt");
+"undefined" == typeof mxLoadStylesheets && (mxLoadStylesheets = !0);
+"undefined" != typeof mxBasePath && 0 < mxBasePath.length ? ("/" == mxBasePath.substring(mxBasePath.length - 1) && (mxBasePath = mxBasePath.substring(0, mxBasePath.length - 1)), mxClient.basePath = mxBasePath) : mxClient.basePath = ".";
+"undefined" != typeof mxImageBasePath && 0 < mxImageBasePath.length ? ("/" == mxImageBasePath.substring(mxImageBasePath.length - 1) && (mxImageBasePath = mxImageBasePath.substring(0, mxImageBasePath.length - 1)), mxClient.imageBasePath = mxImageBasePath) : mxClient.imageBasePath = mxClient.basePath + "/images";
+mxClient.language = "undefined" != typeof mxLanguage ? mxLanguage : mxClient.IS_IE ? navigator.userLanguage : navigator.language;
+mxClient.defaultLanguage = "undefined" != typeof mxDefaultLanguage ? mxDefaultLanguage : "en";
+mxLoadStylesheets && mxClient.link("stylesheet", mxClient.basePath + "/css/common.css");
+"undefined" != typeof mxLanguages && (mxClient.languages = mxLanguages);
+if (mxClient.IS_IE) {
+    if (9 <= document.documentMode) mxClient.IS_VML = !1, mxClient.IS_SVG = !0;
+    else {
+        8 == document.documentMode ? (document.namespaces.add(mxClient.VML_PREFIX, "urn:schemas-microsoft-com:vml", "#default#VML"), document.namespaces.add(mxClient.OFFICE_PREFIX, "urn:schemas-microsoft-com:office:office", "#default#VML")) : (document.namespaces.add(mxClient.VML_PREFIX, "urn:schemas-microsoft-com:vml"), document.namespaces.add(mxClient.OFFICE_PREFIX, "urn:schemas-microsoft-com:office:office"));
+        var ss = document.createStyleSheet();
+        ss.cssText = "v\\:*{behavior:url(#default#VML)}o\\:*{behavior:url(#default#VML)}";
+        mxLoadStylesheets && mxClient.link("stylesheet", mxClient.basePath + "/css/explorer.css")
+    }
+    window.attachEvent("onunload", mxClient.dispose)
+}
+var mxLog = {
+        consoleName: "Console",
+        TRACE: !1,
+        DEBUG: !0,
+        WARN: !0,
+        buffer: "",
+        init: function() {
+            if (null == mxLog.window && null != document.body) {
+                var a = mxLog.consoleName + " - mxGraph " + mxClient.VERSION,
+                    b = document.createElement("table");
+                b.setAttribute("width", "100%");
+                b.setAttribute("height", "100%");
+                var c = document.createElement("tbody"),
+                    d = document.createElement("tr"),
+                    e = document.createElement("td");
+                e.style.verticalAlign = "top";
+                mxLog.textarea = document.createElement("textarea");
+                mxLog.textarea.setAttribute("readOnly", "true");
+                mxLog.textarea.style.height = "100%";
+                mxLog.textarea.style.resize = "none";
+                mxLog.textarea.value = mxLog.buffer;
+                mxLog.textarea.style.width = mxClient.IS_NS && "BackCompat" != document.compatMode ? "99%" : "100%";
+                e.appendChild(mxLog.textarea);
+                d.appendChild(e);
+                c.appendChild(d);
+                d = document.createElement("tr");
+                mxLog.td = document.createElement("td");
+                mxLog.td.style.verticalAlign = "top";
+                mxLog.td.setAttribute("height", "30px");
+                d.appendChild(mxLog.td);
+                c.appendChild(d);
+                b.appendChild(c);
+                mxLog.addButton("Info", function(a) {
+                    mxLog.info()
+                });
+                mxLog.addButton("DOM", function(a) {
+                    a = mxUtils.getInnerHtml(document.body);
+                    mxLog.debug(a)
+                });
+                mxLog.addButton("Trace", function(a) {
+                    mxLog.TRACE = !mxLog.TRACE;
+                    mxLog.TRACE ? mxLog.debug("Tracing enabled") : mxLog.debug("Tracing disabled")
+                });
+                mxLog.addButton("Copy", function(a) {
+                    try {
+                        mxUtils.copy(mxLog.textarea.value)
+                    } catch (b) {
+                        mxUtils.alert(b)
+                    }
+                });
+                mxLog.addButton("Show", function(a) {
+                    try {
+                        mxUtils.popup(mxLog.textarea.value)
+                    } catch (b) {
+                        mxUtils.alert(b)
+                    }
+                });
+                mxLog.addButton("Clear", function(a) {
+                    mxLog.textarea.value = ""
+                });
+                d = c = 0;
+                "number" === typeof window.innerWidth ? (c = window.innerHeight, d = window.innerWidth) : (c = document.documentElement.clientHeight || document.body.clientHeight, d = document.body.clientWidth);
+                mxLog.window = new mxWindow(a, b, Math.max(0, d - 320), Math.max(0, c - 210), 300, 160);
+                mxLog.window.setMaximizable(!0);
+                mxLog.window.setScrollable(!1);
+                mxLog.window.setResizable(!0);
+                mxLog.window.setClosable(!0);
+                mxLog.window.destroyOnClose = !1;
+                if ((mxClient.IS_NS || mxClient.IS_IE) && !mxClient.IS_GC && !mxClient.IS_SF && "BackCompat" != document.compatMode) {
+                    var f =
+                        mxLog.window.getElement(),
+                        a = function(a, b) {
+                            mxLog.textarea.style.height = Math.max(0, f.offsetHeight - 70) + "px"
+                        };
+                    mxLog.window.addListener(mxEvent.RESIZE_END, a);
+                    mxLog.window.addListener(mxEvent.MAXIMIZE, a);
+                    mxLog.window.addListener(mxEvent.NORMALIZE, a);
+                    mxLog.textarea.style.height = "92px"
+                }
+            }
+        },
+        info: function() {
+            mxLog.writeln(mxUtils.toString(navigator))
+        },
+        addButton: function(a, b) {
+            var c = document.createElement("button");
+            mxUtils.write(c, a);
+            mxEvent.addListener(c, "click", b);
+            mxLog.td.appendChild(c)
+        },
+        isVisible: function() {
+            return null !=
+                mxLog.window ? mxLog.window.isVisible() : !1
+        },
+        show: function() {
+            mxLog.setVisible(!0)
+        },
+        setVisible: function(a) {
+            null == mxLog.window && mxLog.init();
+            null != mxLog.window && mxLog.window.setVisible(a)
+        },
+        enter: function(a) {
+            if (mxLog.TRACE) return mxLog.writeln("Entering " + a), (new Date).getTime()
+        },
+        leave: function(a, b) {
+            if (mxLog.TRACE) {
+                var c = 0 != b ? " (" + ((new Date).getTime() - b) + " ms)" : "";
+                mxLog.writeln("Leaving " + a + c)
+            }
+        },
+        debug: function() {
+            mxLog.DEBUG && mxLog.writeln.apply(this, arguments)
+        },
+        warn: function() {
+            mxLog.WARN && mxLog.writeln.apply(this,
+                arguments)
+        },
+        write: function() {
+            for (var a = "", b = 0; b < arguments.length; b++) a += arguments[b], b < arguments.length - 1 && (a += " ");
+            null != mxLog.textarea ? (mxLog.textarea.value += a, 0 <= navigator.userAgent.indexOf("Presto/2.5") && (mxLog.textarea.style.visibility = "hidden", mxLog.textarea.style.visibility = "visible"), mxLog.textarea.scrollTop = mxLog.textarea.scrollHeight) : mxLog.buffer += a
+        },
+        writeln: function() {
+            for (var a = "", b = 0; b < arguments.length; b++) a += arguments[b], b < arguments.length - 1 && (a += " ");
+            mxLog.write(a + "\n")
+        }
+    },
+    mxObjectIdentity = {
+        FIELD_NAME: "mxObjectId",
+        counter: 0,
+        get: function(a) {
+            if ("object" == typeof a && null == a[mxObjectIdentity.FIELD_NAME]) {
+                var b = mxUtils.getFunctionName(a.constructor);
+                a[mxObjectIdentity.FIELD_NAME] = b + "#" + mxObjectIdentity.counter++
+            }
+            return a[mxObjectIdentity.FIELD_NAME]
+        },
+        clear: function(a) {
+            "object" == typeof a && delete a[mxObjectIdentity.FIELD_NAME]
+        }
+    };
+
+function mxDictionary() {
+    this.clear()
+}
+mxDictionary.prototype.map = null;
+mxDictionary.prototype.clear = function() {
+    this.map = {}
+};
+mxDictionary.prototype.get = function(a) {
+    a = mxObjectIdentity.get(a);
+    return this.map[a]
+};
+mxDictionary.prototype.put = function(a, b) {
+    var c = mxObjectIdentity.get(a),
+        d = this.map[c];
+    this.map[c] = b;
+    return d
+};
+mxDictionary.prototype.remove = function(a) {
+    a = mxObjectIdentity.get(a);
+    var b = this.map[a];
+    delete this.map[a];
+    return b
+};
+mxDictionary.prototype.getKeys = function() {
+    var a = [],
+        b;
+    for (b in this.map) a.push(b);
+    return a
+};
+mxDictionary.prototype.getValues = function() {
+    var a = [],
+        b;
+    for (b in this.map) a.push(this.map[b]);
+    return a
+};
+mxDictionary.prototype.visit = function(a) {
+    for (var b in this.map) a(b, this.map[b])
+};
+var mxResources = {
+    resources: [],
+    extension: mxResourceExtension,
+    resourcesEncoded: !1,
+    loadDefaultBundle: !0,
+    loadSpecialBundle: !0,
+    isLanguageSupported: function(a) {
+        return null != mxClient.languages ? 0 <= mxUtils.indexOf(mxClient.languages, a) : !0
+    },
+    getDefaultBundle: function(a, b) {
+        return mxResources.loadDefaultBundle || !mxResources.isLanguageSupported(b) ? a + mxResources.extension : null
+    },
+    getSpecialBundle: function(a, b) {
+        if (null == mxClient.languages || !this.isLanguageSupported(b)) {
+            var c = b.indexOf("-");
+            0 < c && (b = b.substring(0, c))
+        }
+        return mxResources.loadSpecialBundle &&
+            mxResources.isLanguageSupported(b) && b != mxClient.defaultLanguage ? a + "_" + b + mxResources.extension : null
+    },
+    add: function(a, b) {
+        b = null != b ? b : mxClient.language.toLowerCase();
+        if (b != mxConstants.NONE) {
+            var c = mxResources.getDefaultBundle(a, b);
+            if (null != c) try {
+                var d = mxUtils.load(c);
+                d.isReady() && mxResources.parse(d.getText())
+            } catch (e) {}
+            c = mxResources.getSpecialBundle(a, b);
+            if (null != c) try {
+                d = mxUtils.load(c), d.isReady() && mxResources.parse(d.getText())
+            } catch (f) {}
+        }
+    },
+    parse: function(a) {
+        if (null != a) {
+            a = a.split("\n");
+            for (var b = 0; b <
+                a.length; b++)
+                if ("#" != a[b].charAt(0)) {
+                    var c = a[b].indexOf("\x3d");
+                    if (0 < c) {
+                        var d = a[b].substring(0, c),
+                            e = a[b].length;
+                        13 == a[b].charCodeAt(e - 1) && e--;
+                        c = a[b].substring(c + 1, e);
+                        this.resourcesEncoded ? (c = c.replace(/\\(?=u[a-fA-F\d]{4})/g, "%"), mxResources.resources[d] = unescape(c)) : mxResources.resources[d] = c
+                    }
+                }
+        }
+    },
+    get: function(a, b, c) {
+        a = mxResources.resources[a];
+        null == a && (a = c);
+        if (null != a && null != b) {
+            c = [];
+            for (var d = null, e = 0; e < a.length; e++) {
+                var f = a.charAt(e);
+                "{" == f ? d = "" : null != d && "}" == f ? (d = parseInt(d) - 1, 0 <= d && d < b.length &&
+                    c.push(b[d]), d = null) : null != d ? d += f : c.push(f)
+            }
+            a = c.join("")
+        }
+        return a
+    }
+};
+
+function mxPoint(a, b) {
+    this.x = null != a ? a : 0;
+    this.y = null != b ? b : 0
+}
+mxPoint.prototype.x = null;
+mxPoint.prototype.y = null;
+mxPoint.prototype.equals = function(a) {
+    return a.x == this.x && a.y == this.y
+};
+mxPoint.prototype.clone = function() {
+    return mxUtils.clone(this)
+};
+
+function mxRectangle(a, b, c, d) {
+    mxPoint.call(this, a, b);
+    this.width = null != c ? c : 0;
+    this.height = null != d ? d : 0
+}
+mxRectangle.prototype = new mxPoint;
+mxRectangle.prototype.constructor = mxRectangle;
+mxRectangle.prototype.width = null;
+mxRectangle.prototype.height = null;
+mxRectangle.prototype.setRect = function(a, b, c, d) {
+    this.x = a;
+    this.y = b;
+    this.width = c;
+    this.height = d
+};
+mxRectangle.prototype.getCenterX = function() {
+    return this.x + this.width / 2
+};
+mxRectangle.prototype.getCenterY = function() {
+    return this.y + this.height / 2
+};
+mxRectangle.prototype.add = function(a) {
+    if (null != a) {
+        var b = Math.min(this.x, a.x),
+            c = Math.min(this.y, a.y),
+            d = Math.max(this.x + this.width, a.x + a.width);
+        a = Math.max(this.y + this.height, a.y + a.height);
+        this.x = b;
+        this.y = c;
+        this.width = d - b;
+        this.height = a - c
+    }
+};
+mxRectangle.prototype.grow = function(a) {
+    this.x -= a;
+    this.y -= a;
+    this.width += 2 * a;
+    this.height += 2 * a
+};
+mxRectangle.prototype.getPoint = function() {
+    return new mxPoint(this.x, this.y)
+};
+mxRectangle.prototype.equals = function(a) {
+    return a.x == this.x && a.y == this.y && a.width == this.width && a.height == this.height
+};
+var mxEffects = {
+        animateChanges: function(a, b, c) {
+            var d = 0,
+                e = function() {
+                    for (var g = !1, h = 0; h < b.length; h++) {
+                        var k = b[h];
+                        if (k instanceof mxGeometryChange || k instanceof mxTerminalChange || k instanceof mxValueChange || k instanceof mxChildChange || k instanceof mxStyleChange) {
+                            var l = a.getView().getState(k.cell || k.child, !1);
+                            if (null != l)
+                                if (g = !0, k.constructor != mxGeometryChange || a.model.isEdge(k.cell)) mxUtils.setOpacity(l.shape.node, 100 * d / 10);
+                                else {
+                                    var m = a.getView().scale,
+                                        n = (k.geometry.x - k.previous.x) * m,
+                                        p = (k.geometry.y -
+                                            k.previous.y) * m,
+                                        q = (k.geometry.width - k.previous.width) * m,
+                                        m = (k.geometry.height - k.previous.height) * m;
+                                    0 == d ? (l.x -= n, l.y -= p, l.width -= q, l.height -= m) : (l.x += n / 10, l.y += p / 10, l.width += q / 10, l.height += m / 10);
+                                    a.cellRenderer.redraw(l);
+                                    mxEffects.cascadeOpacity(a, k.cell, 100 * d / 10)
+                                }
+                        }
+                    }
+                    10 > d && g ? (d++, window.setTimeout(e, f)) : null != c && c()
+                },
+                f = 30;
+            e()
+        },
+        cascadeOpacity: function(a, b, c) {
+            for (var d = a.model.getChildCount(b), e = 0; e < d; e++) {
+                var f = a.model.getChildAt(b, e),
+                    g = a.getView().getState(f);
+                null != g && (mxUtils.setOpacity(g.shape.node,
+                    c), mxEffects.cascadeOpacity(a, f, c))
+            }
+            b = a.model.getEdges(b);
+            if (null != b)
+                for (e = 0; e < b.length; e++) d = a.getView().getState(b[e]), null != d && mxUtils.setOpacity(d.shape.node, c)
+        },
+        fadeOut: function(a, b, c, d, e, f) {
+            d = d || 40;
+            e = e || 30;
+            var g = b || 100;
+            mxUtils.setOpacity(a, g);
+            if (f || null == f) {
+                var h = function() {
+                    g = Math.max(g - d, 0);
+                    mxUtils.setOpacity(a, g);
+                    0 < g ? window.setTimeout(h, e) : (a.style.visibility = "hidden", c && a.parentNode && a.parentNode.removeChild(a))
+                };
+                window.setTimeout(h, e)
+            } else a.style.visibility = "hidden", c && a.parentNode && a.parentNode.removeChild(a)
+        }
+    },
+    mxUtils = {
+        errorResource: "none" != mxClient.language ? "error" : "",
+        closeResource: "none" != mxClient.language ? "close" : "",
+        errorImage: mxClient.imageBasePath + "/error.gif",
+        removeCursors: function(a) {
+            null != a.style && (a.style.cursor = "");
+            a = a.childNodes;
+            if (null != a)
+                for (var b = a.length, c = 0; c < b; c += 1) mxUtils.removeCursors(a[c])
+        },
+        getCurrentStyle: function() {
+            return mxClient.IS_IE ? function(a) {
+                return null != a ? a.currentStyle : null
+            } : function(a) {
+                return null != a ? window.getComputedStyle(a, "") : null
+            }
+        }(),
+        hasScrollbars: function(a) {
+            a = mxUtils.getCurrentStyle(a);
+            return null != a && ("scroll" == a.overflow || "auto" == a.overflow)
+        },
+        bind: function(a, b) {
+            return function() {
+                return b.apply(a, arguments)
+            }
+        },
+        eval: function(a) {
+            var b = null;
+            if (0 <= a.indexOf("function")) try {
+                eval("var _mxJavaScriptExpression\x3d" + a), b = _mxJavaScriptExpression, _mxJavaScriptExpression = null
+            } catch (c) {
+                mxLog.warn(c.message + " while evaluating " + a)
+            } else try {
+                b = eval(a)
+            } catch (d) {
+                mxLog.warn(d.message + " while evaluating " + a)
+            }
+            return b
+        },
+        findNode: function(a, b, c) {
+            var d = a.getAttribute(b);
+            if (null != d && d == c) return a;
+            for (a =
+                a.firstChild; null != a;) {
+                d = mxUtils.findNode(a, b, c);
+                if (null != d) return d;
+                a = a.nextSibling
+            }
+            return null
+        },
+        findNodeByAttribute: function() {
+            return 9 <= document.documentMode ? function(a, b, c) {
+                var d = null;
+                if (null != a)
+                    if (a.nodeType == mxConstants.NODETYPE_ELEMENT && a.getAttribute(b) == c) d = a;
+                    else
+                        for (a = a.firstChild; null != a && null == d;) d = mxUtils.findNodeByAttribute(a, b, c), a = a.nextSibling;
+                return d
+            } : mxClient.IS_IE ? function(a, b, c) {
+                return null == a ? null : a.ownerDocument.selectSingleNode("//*[@" + b + "\x3d'" + c + "']")
+            } : function(a, b, c) {
+                return null ==
+                    a ? null : a.ownerDocument.evaluate("//*[@" + b + "\x3d'" + c + "']", a.ownerDocument, null, XPathResult.ANY_TYPE, null).iterateNext()
+            }
+        }(),
+        getFunctionName: function(a) {
+            var b = null;
+            if (null != a)
+                if (null != a.name) b = a.name;
+                else {
+                    a = a.toString();
+                    for (b = 9;
+                        " " == a.charAt(b);) b++;
+                    var c = a.indexOf("(", b),
+                        b = a.substring(b, c)
+                }
+            return b
+        },
+        indexOf: function(a, b) {
+            if (null != a && null != b)
+                for (var c = 0; c < a.length; c++)
+                    if (a[c] == b) return c;
+            return -1
+        },
+        remove: function(a, b) {
+            var c = null;
+            if ("object" == typeof b)
+                for (var d = mxUtils.indexOf(b, a); 0 <= d;) b.splice(d,
+                    1), c = a, d = mxUtils.indexOf(b, a);
+            for (var e in b) b[e] == a && (delete b[e], c = a);
+            return c
+        },
+        isNode: function(a, b, c, d) {
+            return null != a && !isNaN(a.nodeType) && (null == b || a.nodeName.toLowerCase() == b.toLowerCase()) ? null == c || a.getAttribute(c) == d : !1
+        },
+        getChildNodes: function(a, b) {
+            b = b || mxConstants.NODETYPE_ELEMENT;
+            for (var c = [], d = a.firstChild; null != d;) d.nodeType == b && c.push(d), d = d.nextSibling;
+            return c
+        },
+        createXmlDocument: function() {
+            var a = null;
+            document.implementation && document.implementation.createDocument ? a = document.implementation.createDocument("",
+                "", null) : window.ActiveXObject && (a = new ActiveXObject("Microsoft.XMLDOM"));
+            return a
+        },
+        parseXml: function() {
+            return mxClient.IS_IE && ("undefined" === typeof document.documentMode || 9 > document.documentMode) ? function(a) {
+                var b = mxUtils.createXmlDocument();
+                b.async = "false";
+                b.loadXML(a);
+                return b
+            } : function(a) {
+                return (new DOMParser).parseFromString(a, "text/xml")
+            }
+        }(),
+        clearSelection: function() {
+            if (document.selection) return function() {
+                document.selection.empty()
+            };
+            if (window.getSelection) return function() {
+                window.getSelection().removeAllRanges()
+            }
+        }(),
+        getPrettyXml: function(a, b, c) {
+            var d = [];
+            if (null != a)
+                if (b = b || "  ", c = c || "", a.nodeType == mxConstants.NODETYPE_TEXT) d.push(a.nodeValue);
+                else {
+                    d.push(c + "\x3c" + a.nodeName);
+                    var e = a.attributes;
+                    if (null != e)
+                        for (var f = 0; f < e.length; f++) {
+                            var g = mxUtils.htmlEntities(e[f].nodeValue);
+                            d.push(" " + e[f].nodeName + '\x3d"' + g + '"')
+                        }
+                    e = a.firstChild;
+                    if (null != e) {
+                        for (d.push("\x3e\n"); null != e;) d.push(mxUtils.getPrettyXml(e, b, c + b)), e = e.nextSibling;
+                        d.push(c + "\x3c/" + a.nodeName + "\x3e\n")
+                    } else d.push("/\x3e\n")
+                }
+            return d.join("")
+        },
+        removeWhitespace: function(a,
+            b) {
+            for (var c = b ? a.previousSibling : a.nextSibling; null != c && c.nodeType == mxConstants.NODETYPE_TEXT;) {
+                var d = b ? c.previousSibling : c.nextSibling,
+                    e = mxUtils.getTextContent(c);
+                0 == mxUtils.trim(e).length && c.parentNode.removeChild(c);
+                c = d
+            }
+        },
+        htmlEntities: function(a, b) {
+            a = (a || "").replace(/&/g, "\x26amp;");
+            a = a.replace(/"/g, "\x26quot;");
+            a = a.replace(/\'/g, "\x26#39;");
+            a = a.replace(/</g, "\x26lt;");
+            a = a.replace(/>/g, "\x26gt;");
+            if (null == b || b) a = a.replace(/\n/g, "\x26#xa;");
+            return a
+        },
+        isVml: function(a) {
+            return null != a && "urn:schemas-microsoft-com:vml" ==
+                a.tagUrn
+        },
+        getXml: function(a, b) {
+            var c = "";
+            null != a && (c = a.xml, c = null == c ? a.innerHTML ? a.innerHTML : (new XMLSerializer).serializeToString(a) : c.replace(/\r\n\t[\t]*/g, "").replace(/>\r\n/g, "\x3e").replace(/\r\n/g, "\n"));
+            return c = c.replace(/\n/g, b || "\x26#xa;")
+        },
+        getTextContent: function(a) {
+            var b = "";
+            null != a && (null != a.firstChild && (a = a.firstChild), b = a.nodeValue || "");
+            return b
+        },
+        getInnerHtml: function() {
+            return mxClient.IS_IE ? function(a) {
+                return null != a ? a.innerHTML : ""
+            } : function(a) {
+                return null != a ? (new XMLSerializer).serializeToString(a) :
+                    ""
+            }
+        }(),
+        getOuterHtml: function() {
+            return mxClient.IS_IE ? function(a) {
+                if (null != a) {
+                    if (null != a.outerHTML) return a.outerHTML;
+                    var b = [];
+                    b.push("\x3c" + a.nodeName);
+                    var c = a.attributes;
+                    if (null != c)
+                        for (var d = 0; d < c.length; d++) {
+                            var e = c[d].nodeValue;
+                            null != e && 0 < e.length && (b.push(" "), b.push(c[d].nodeName), b.push('\x3d"'), b.push(e), b.push('"'))
+                        }
+                    0 == a.innerHTML.length ? b.push("/\x3e") : (b.push("\x3e"), b.push(a.innerHTML), b.push("\x3c/" + a.nodeName + "\x3e"));
+                    return b.join("")
+                }
+                return ""
+            } : function(a) {
+                return null != a ? (new XMLSerializer).serializeToString(a) :
+                    ""
+            }
+        }(),
+        write: function(a, b) {
+            var c = a.ownerDocument.createTextNode(b);
+            null != a && a.appendChild(c);
+            return c
+        },
+        writeln: function(a, b) {
+            var c = a.ownerDocument.createTextNode(b);
+            null != a && (a.appendChild(c), a.appendChild(document.createElement("br")));
+            return c
+        },
+        br: function(a, b) {
+            b = b || 1;
+            for (var c = null, d = 0; d < b; d++) null != a && (c = a.ownerDocument.createElement("br"), a.appendChild(c));
+            return c
+        },
+        button: function(a, b, c) {
+            c = null != c ? c : document;
+            c = c.createElement("button");
+            mxUtils.write(c, a);
+            mxEvent.addListener(c, "click", function(a) {
+                b(a)
+            });
+            return c
+        },
+        para: function(a, b) {
+            var c = document.createElement("p");
+            mxUtils.write(c, b);
+            null != a && a.appendChild(c);
+            return c
+        },
+        addTransparentBackgroundFilter: function(a) {
+            a.style.filter += "progid:DXImageTransform.Microsoft.AlphaImageLoader(src\x3d'" + mxClient.imageBasePath + "/transparent.gif', sizingMethod\x3d'scale')"
+        },
+        linkAction: function(a, b, c, d, e) {
+            return mxUtils.link(a, b, function() {
+                c.execute(d)
+            }, e)
+        },
+        linkInvoke: function(a, b, c, d, e, f) {
+            return mxUtils.link(a, b, function() {
+                c[d](e)
+            }, f)
+        },
+        link: function(a, b, c, d) {
+            var e =
+                document.createElement("span");
+            e.style.color = "blue";
+            e.style.textDecoration = "underline";
+            e.style.cursor = "pointer";
+            null != d && (e.style.paddingLeft = d + "px");
+            mxEvent.addListener(e, "click", c);
+            mxUtils.write(e, b);
+            null != a && a.appendChild(e);
+            return e
+        },
+        fit: function(a) {
+            var b = parseInt(a.offsetLeft),
+                c = parseInt(a.offsetWidth),
+                d = document.body,
+                e = document.documentElement,
+                f = (d.scrollLeft || e.scrollLeft) + (d.clientWidth || e.clientWidth);
+            b + c > f && (a.style.left = Math.max(d.scrollLeft || e.scrollLeft, f - c) + "px");
+            b = parseInt(a.offsetTop);
+            c = parseInt(a.offsetHeight);
+            f = (d.scrollTop || e.scrollTop) + Math.max(d.clientHeight || 0, e.clientHeight);
+            b + c > f && (a.style.top = Math.max(d.scrollTop || e.scrollTop, f - c) + "px")
+        },
+        open: function(a) {
+            if (mxClient.IS_NS) {
+                try {
+                    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect")
+                } catch (b) {
+                    return mxUtils.alert("Permission to read file denied."), ""
+                }
+                var c = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+                c.initWithPath(a);
+                if (!c.exists()) return mxUtils.alert("File not found."),
+                    "";
+                a = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream);
+                a.init(c, 1, 4, null);
+                c = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
+                c.init(a);
+                return c.read(c.available())
+            }
+            c = (new ActiveXObject("Scripting.FileSystemObject")).OpenTextFile(a, 1);
+            a = c.readAll();
+            c.close();
+            return a
+        },
+        save: function(a, b) {
+            if (mxClient.IS_NS) {
+                try {
+                    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect")
+                } catch (c) {
+                    mxUtils.alert("Permission to write file denied.");
+                    return
+                }
+                var d = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
+                d.initWithPath(a);
+                d.exists() || d.create(0, 420);
+                var e = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
+                e.init(d, 34, 4, null);
+                e.write(b, b.length);
+                e.flush();
+                e.close()
+            } else d = (new ActiveXObject("Scripting.FileSystemObject")).CreateTextFile(a, !0), d.Write(b), d.Close()
+        },
+        saveAs: function(a) {
+            var b = document.createElement("iframe");
+            b.setAttribute("src", "");
+            b.style.visibility = "hidden";
+            document.body.appendChild(b);
+            try {
+                if (mxClient.IS_NS) {
+                    var c = b.contentDocument;
+                    c.open();
+                    c.write(a);
+                    c.close();
+                    try {
+                        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"), b.focus(), saveDocument(c)
+                    } catch (d) {
+                        mxUtils.alert("Permission to save document denied.")
+                    }
+                } else c = b.contentWindow.document, c.write(a), c.execCommand("SaveAs", !1, document.location)
+            } finally {
+                document.body.removeChild(b)
+            }
+        },
+        copy: function(a) {
+            if (window.clipboardData) window.clipboardData.setData("Text",
+                a);
+            else {
+                netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+                var b = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard);
+                if (b) {
+                    var c = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
+                    if (c) {
+                        c.addDataFlavor("text/unicode");
+                        var d = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
+                        d.data = a;
+                        c.setTransferData("text/unicode",
+                            d, 2 * a.length);
+                        b.setData(c, null, Components.interfaces.nsIClipboard.kGlobalClipboard)
+                    }
+                }
+            }
+        },
+        load: function(a) {
+            a = new mxXmlRequest(a, null, "GET", !1);
+            a.send();
+            return a
+        },
+        get: function(a, b, c) {
+            return (new mxXmlRequest(a, null, "GET")).send(b, c)
+        },
+        post: function(a, b, c, d) {
+            return (new mxXmlRequest(a, b)).send(c, d)
+        },
+        submit: function(a, b, c, d) {
+            return (new mxXmlRequest(a, b)).simulate(c, d)
+        },
+        loadInto: function(a, b, c) {
+            mxClient.IS_IE ? b.onreadystatechange = function() {
+                4 == b.readyState && c()
+            } : b.addEventListener("load", c, !1);
+            b.load(a)
+        },
+        getValue: function(a, b, c) {
+            a = null != a ? a[b] : null;
+            null == a && (a = c);
+            return a
+        },
+        getNumber: function(a, b, c) {
+            a = null != a ? a[b] : null;
+            null == a && (a = c || 0);
+            return Number(a)
+        },
+        getColor: function(a, b, c) {
+            a = null != a ? a[b] : null;
+            null == a ? a = c : a == mxConstants.NONE && (a = null);
+            return a
+        },
+        clone: function(a, b, c) {
+            c = null != c ? c : !1;
+            var d = null;
+            if (null != a && "function" == typeof a.constructor) {
+                var d = new a.constructor,
+                    e;
+                for (e in a)
+                    if (e != mxObjectIdentity.FIELD_NAME && (null == b || 0 > mxUtils.indexOf(b, e))) d[e] = !c && "object" == typeof a[e] ? mxUtils.clone(a[e]) : a[e]
+            }
+            return d
+        },
+        equalPoints: function(a, b) {
+            if (null == a && null != b || null != a && null == b || null != a && null != b && a.length != b.length) return !1;
+            if (null != a && null != b)
+                for (var c = 0; c < a.length; c++)
+                    if (a[c] == b[c] || null != a[c] && !a[c].equals(b[c])) return !1;
+            return !0
+        },
+        equalEntries: function(a, b) {
+            if (null == a && null != b || null != a && null == b || null != a && null != b && a.length != b.length) return !1;
+            if (null != a && null != b)
+                for (var c in a)
+                    if (a[c] != b[c]) return !1;
+            return !0
+        },
+        extend: function(a, b) {
+            var c = function() {};
+            c.prototype = b.prototype;
+            a.prototype = new c;
+            a.prototype.constructor =
+                a
+        },
+        toString: function(a) {
+            var b = "",
+                c;
+            for (c in a) try {
+                if (null == a[c]) b += c + " \x3d [null]\n";
+                else if ("function" == typeof a[c]) b += c + " \x3d\x3e [Function]\n";
+                else if ("object" == typeof a[c]) var d = mxUtils.getFunctionName(a[c].constructor),
+                    b = b + (c + " \x3d\x3e [" + d + "]\n");
+                else b += c + " \x3d " + a[c] + "\n"
+            } catch (e) {
+                b += c + "\x3d" + e.message
+            }
+            return b
+        },
+        toRadians: function(a) {
+            return Math.PI * a / 180
+        },
+        arcToCurves: function(a, b, c, d, e, f, g, h, k) {
+            h -= a;
+            k -= b;
+            if (0 === c || 0 === d) return p;
+            c = Math.abs(c);
+            d = Math.abs(d);
+            var l = -h / 2,
+                m = -k / 2,
+                n = Math.cos(e *
+                    Math.PI / 180),
+                p = Math.sin(e * Math.PI / 180);
+            e = n * l + p * m;
+            var l = -1 * p * l + n * m,
+                m = e * e,
+                q = l * l,
+                s = c * c,
+                r = d * d,
+                t = m / s + q / r;
+            1 < t ? (c *= Math.sqrt(t), d *= Math.sqrt(t), f = 0) : (t = 1, f === g && (t = -1), f = t * Math.sqrt((s * r - s * q - r * m) / (s * q + r * m)));
+            m = f * c * l / d;
+            q = -1 * f * d * e / c;
+            h = n * m - p * q + h / 2;
+            k = p * m + n * q + k / 2;
+            s = Math.atan2((l - q) / d, (e - m) / c) - Math.atan2(0, 1);
+            f = 0 <= s ? s : 2 * Math.PI + s;
+            s = Math.atan2((-l - q) / d, (-e - m) / c) - Math.atan2((l - q) / d, (e - m) / c);
+            e = 0 <= s ? s : 2 * Math.PI + s;
+            0 == g && 0 < e ? e -= 2 * Math.PI : 0 != g && 0 > e && (e += 2 * Math.PI);
+            g = 2 * e / Math.PI;
+            g = Math.ceil(0 > g ? -1 * g : g);
+            e /= g;
+            l = 8 / 3 * Math.sin(e /
+                4) * Math.sin(e / 4) / Math.sin(e / 2);
+            m = n * c;
+            n *= d;
+            c *= p;
+            d *= p;
+            for (var v = Math.cos(f), w = Math.sin(f), q = -l * (m * w + d * v), s = -l * (c * w - n * v), t = r = 0, p = [], u = 0; u < g; ++u) {
+                f += e;
+                var v = Math.cos(f),
+                    w = Math.sin(f),
+                    r = m * v - d * w + h,
+                    t = c * v + n * w + k,
+                    y = -l * (m * w + d * v),
+                    v = -l * (c * w - n * v),
+                    w = 6 * u;
+                p[w] = Number(q + a);
+                p[w + 1] = Number(s + b);
+                p[w + 2] = Number(r - y + a);
+                p[w + 3] = Number(t - v + b);
+                p[w + 4] = Number(r + a);
+                p[w + 5] = Number(t + b);
+                q = r + y;
+                s = t + v
+            }
+            return p
+        },
+        getBoundingBox: function(a, b) {
+            var c = null;
+            if (null != a && null != b && 0 != b) {
+                var d = mxUtils.toRadians(b),
+                    c = Math.cos(d),
+                    e = Math.sin(d),
+                    f =
+                    new mxPoint(a.x + a.width / 2, a.y + a.height / 2),
+                    g = new mxPoint(a.x, a.y),
+                    d = new mxPoint(a.x + a.width, a.y),
+                    h = new mxPoint(d.x, a.y + a.height),
+                    k = new mxPoint(a.x, h.y),
+                    g = mxUtils.getRotatedPoint(g, c, e, f),
+                    d = mxUtils.getRotatedPoint(d, c, e, f),
+                    h = mxUtils.getRotatedPoint(h, c, e, f),
+                    k = mxUtils.getRotatedPoint(k, c, e, f),
+                    c = new mxRectangle(g.x, g.y, 0, 0);
+                c.add(new mxRectangle(d.x, d.y, 0, 0));
+                c.add(new mxRectangle(h.x, h.y, 0, 0));
+                c.add(new mxRectangle(k.x, k.y, 0, 0))
+            }
+            return c
+        },
+        getRotatedPoint: function(a, b, c, d) {
+            d = null != d ? d : new mxPoint;
+            var e =
+                a.x - d.x;
+            a = a.y - d.y;
+            return new mxPoint(e * b - a * c + d.x, a * b + e * c + d.y)
+        },
+        getPortConstraints: function(a, b, c, d) {
+            a = mxUtils.getValue(a.style, mxConstants.STYLE_PORT_CONSTRAINT, null);
+            if (null == a) return d;
+            d = a.toString();
+            a = mxConstants.DIRECTION_MASK_NONE;
+            0 <= d.indexOf(mxConstants.DIRECTION_NORTH) && (a |= mxConstants.DIRECTION_MASK_NORTH);
+            0 <= d.indexOf(mxConstants.DIRECTION_WEST) && (a |= mxConstants.DIRECTION_MASK_WEST);
+            0 <= d.indexOf(mxConstants.DIRECTION_SOUTH) && (a |= mxConstants.DIRECTION_MASK_SOUTH);
+            0 <= d.indexOf(mxConstants.DIRECTION_EAST) &&
+                (a |= mxConstants.DIRECTION_MASK_EAST);
+            return a
+        },
+        reversePortConstraints: function(a) {
+            var b = 0,
+                b = (a & mxConstants.DIRECTION_MASK_WEST) << 3,
+                b = b | (a & mxConstants.DIRECTION_MASK_NORTH) << 1,
+                b = b | (a & mxConstants.DIRECTION_MASK_SOUTH) >> 1;
+            return b |= (a & mxConstants.DIRECTION_MASK_EAST) >> 3
+        },
+        findNearestSegment: function(a, b, c) {
+            var d = -1;
+            if (0 < a.absolutePoints.length)
+                for (var e = a.absolutePoints[0], f = null, g = 1; g < a.absolutePoints.length; g++) {
+                    var h = a.absolutePoints[g],
+                        e = mxUtils.ptSegDistSq(e.x, e.y, h.x, h.y, b, c);
+                    if (null == f || e < f) f =
+                        e, d = g - 1;
+                    e = h
+                }
+            return d
+        },
+        rectangleIntersectsSegment: function(a, b, c) {
+            var d = a.y,
+                e = a.x,
+                f = d + a.height,
+                g = e + a.width;
+            a = b.x;
+            var h = c.x;
+            b.x > c.x && (a = c.x, h = b.x);
+            h > g && (h = g);
+            a < e && (a = e);
+            if (a > h) return !1;
+            var e = b.y,
+                g = c.y,
+                k = c.x - b.x;
+            1E-7 < Math.abs(k) && (c = (c.y - b.y) / k, b = b.y - c * b.x, e = c * a + b, g = c * h + b);
+            e > g && (b = g, g = e, e = b);
+            g > f && (g = f);
+            e < d && (e = d);
+            return e > g ? !1 : !0
+        },
+        contains: function(a, b, c) {
+            return a.x <= b && a.x + a.width >= b && a.y <= c && a.y + a.height >= c
+        },
+        intersects: function(a, b) {
+            var c = a.width,
+                d = a.height,
+                e = b.width,
+                f = b.height;
+            if (0 >= e || 0 >= f || 0 >= c ||
+                0 >= d) return !1;
+            var g = a.x,
+                h = a.y,
+                k = b.x,
+                l = b.y,
+                e = e + k,
+                f = f + l,
+                c = c + g,
+                d = d + h;
+            return (e < k || e > g) && (f < l || f > h) && (c < g || c > k) && (d < h || d > l)
+        },
+        intersectsHotspot: function(a, b, c, d, e, f) {
+            d = null != d ? d : 1;
+            e = null != e ? e : 0;
+            f = null != f ? f : 0;
+            if (0 < d) {
+                var g = a.getCenterX(),
+                    h = a.getCenterY(),
+                    k = a.width,
+                    l = a.height,
+                    m = mxUtils.getValue(a.style, mxConstants.STYLE_STARTSIZE) * a.view.scale;
+                0 < m && (mxUtils.getValue(a.style, mxConstants.STYLE_HORIZONTAL, !0) ? (h = a.y + m / 2, l = m) : (g = a.x + m / 2, k = m));
+                k = Math.max(e, k * d);
+                l = Math.max(e, l * d);
+                0 < f && (k = Math.min(k, f), l = Math.min(l,
+                    f));
+                d = new mxRectangle(g - k / 2, h - l / 2, k, l);
+                g = mxUtils.toRadians(mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION) || 0);
+                0 != g && (e = Math.cos(-g), f = Math.sin(-g), g = new mxPoint(a.getCenterX(), a.getCenterY()), a = mxUtils.getRotatedPoint(new mxPoint(b, c), e, f, g), b = a.x, c = a.y);
+                return mxUtils.contains(d, b, c)
+            }
+            return !0
+        },
+        getOffset: function(a, b) {
+            var c = 0,
+                d = 0;
+            if (null != b && b) var e = document.body,
+                f = document.documentElement,
+                c = c + (e.scrollLeft || f.scrollLeft),
+                d = d + (e.scrollTop || f.scrollTop);
+            for (; a.offsetParent;) c += a.offsetLeft, d +=
+                a.offsetTop, a = a.offsetParent;
+            return new mxPoint(c, d)
+        },
+        getScrollOrigin: function(a) {
+            for (var b = document.body, c = document.documentElement, d = new mxPoint(b.scrollLeft || c.scrollLeft, b.scrollTop || c.scrollTop); null != a && a != b && a != c;) !isNaN(a.scrollLeft) && !isNaN(a.scrollTop) && (d.x += a.scrollLeft, d.y += a.scrollTop), a = a.parentNode;
+            return d
+        },
+        convertPoint: function(a, b, c) {
+            var d = mxUtils.getScrollOrigin(a);
+            a = mxUtils.getOffset(a);
+            a.x -= d.x;
+            a.y -= d.y;
+            return new mxPoint(b - a.x, c - a.y)
+        },
+        ltrim: function(a, b) {
+            return a.replace(RegExp("^[" +
+                (b || "\\s") + "]+", "g"), "")
+        },
+        rtrim: function(a, b) {
+            return a.replace(RegExp("[" + (b || "\\s") + "]+$", "g"), "")
+        },
+        trim: function(a, b) {
+            return mxUtils.ltrim(mxUtils.rtrim(a, b), b)
+        },
+        isNumeric: function(a) {
+            return null != a && (null == a.length || 0 < a.length && 0 > a.indexOf("0x") && 0 > a.indexOf("0X")) && !isNaN(a)
+        },
+        mod: function(a, b) {
+            return (a % b + b) % b
+        },
+        intersection: function(a, b, c, d, e, f, g, h) {
+            var k = (h - f) * (c - a) - (g - e) * (d - b);
+            g = ((g - e) * (b - f) - (h - f) * (a - e)) / k;
+            e = ((c - a) * (b - f) - (d - b) * (a - e)) / k;
+            return 0 <= g && 1 >= g && 0 <= e && 1 >= e ? new mxPoint(a + g * (c - a), b + g *
+                (d - b)) : null
+        },
+        ptSegDistSq: function(a, b, c, d, e, f) {
+            c -= a;
+            d -= b;
+            e -= a;
+            f -= b;
+            0 >= e * c + f * d ? c = 0 : (e = c - e, f = d - f, a = e * c + f * d, c = 0 >= a ? 0 : a * a / (c * c + d * d));
+            e = e * e + f * f - c;
+            0 > e && (e = 0);
+            return e
+        },
+        relativeCcw: function(a, b, c, d, e, f) {
+            c -= a;
+            d -= b;
+            e -= a;
+            f -= b;
+            a = e * d - f * c;
+            0 == a && (a = e * c + f * d, 0 < a && (a = (e - c) * c + (f - d) * d, 0 > a && (a = 0)));
+            return 0 > a ? -1 : 0 < a ? 1 : 0
+        },
+        animateChanges: function(a, b) {
+            mxEffects.animateChanges.apply(this, arguments)
+        },
+        cascadeOpacity: function(a, b, c) {
+            mxEffects.cascadeOpacity.apply(this, arguments)
+        },
+        fadeOut: function(a, b, c, d, e, f) {
+            mxEffects.fadeOut.apply(this,
+                arguments)
+        },
+        setOpacity: function(a, b) {
+            mxUtils.isVml(a) ? a.style.filter = 100 <= b ? null : "alpha(opacity\x3d" + b / 5 + ")" : mxClient.IS_IE && ("undefined" === typeof document.documentMode || 9 > document.documentMode) ? a.style.filter = 100 <= b ? null : "alpha(opacity\x3d" + b + ")" : a.style.opacity = b / 100
+        },
+        createImage: function(a) {
+            var b = null;
+            mxClient.IS_IE6 && "CSS1Compat" != document.compatMode ? (b = document.createElement(mxClient.VML_PREFIX + ":image"), b.setAttribute("src", a), b.style.borderStyle = "none") : (b = document.createElement("img"), b.setAttribute("src",
+                a), b.setAttribute("border", "0"));
+            return b
+        },
+        sortCells: function(a, b) {
+            b = null != b ? b : !0;
+            var c = new mxDictionary;
+            a.sort(function(a, e) {
+                var f = c.get(a);
+                null == f && (f = mxCellPath.create(a).split(mxCellPath.PATH_SEPARATOR), c.put(a, f));
+                var g = c.get(e);
+                null == g && (g = mxCellPath.create(e).split(mxCellPath.PATH_SEPARATOR), c.put(e, g));
+                f = mxCellPath.compare(f, g);
+                return 0 == f ? 0 : 0 < f == b ? 1 : -1
+            });
+            return a
+        },
+        getStylename: function(a) {
+            return null != a && (a = a.split(";")[0], 0 > a.indexOf("\x3d")) ? a : ""
+        },
+        getStylenames: function(a) {
+            var b = [];
+            if (null !=
+                a) {
+                a = a.split(";");
+                for (var c = 0; c < a.length; c++) 0 > a[c].indexOf("\x3d") && b.push(a[c])
+            }
+            return b
+        },
+        indexOfStylename: function(a, b) {
+            if (null != a && null != b)
+                for (var c = a.split(";"), d = 0, e = 0; e < c.length; e++) {
+                    if (c[e] == b) return d;
+                    d += c[e].length + 1
+                }
+            return -1
+        },
+        addStylename: function(a, b) {
+            0 > mxUtils.indexOfStylename(a, b) && (null == a ? a = "" : 0 < a.length && ";" != a.charAt(a.length - 1) && (a += ";"), a += b);
+            return a
+        },
+        removeStylename: function(a, b) {
+            var c = [];
+            if (null != a)
+                for (var d = a.split(";"), e = 0; e < d.length; e++) d[e] != b && c.push(d[e]);
+            return c.join(";")
+        },
+        removeAllStylenames: function(a) {
+            var b = [];
+            if (null != a) {
+                a = a.split(";");
+                for (var c = 0; c < a.length; c++) 0 <= a[c].indexOf("\x3d") && b.push(a[c])
+            }
+            return b.join(";")
+        },
+        setCellStyles: function(a, b, c, d) {
+            if (null != b && 0 < b.length) {
+                a.beginUpdate();
+                try {
+                    for (var e = 0; e < b.length; e++)
+                        if (null != b[e]) {
+                            var f = mxUtils.setStyle(a.getStyle(b[e]), c, d);
+                            a.setStyle(b[e], f)
+                        }
+                } finally {
+                    a.endUpdate()
+                }
+            }
+        },
+        setStyle: function(a, b, c) {
+            var d = null != c && ("undefined" == typeof c.length || 0 < c.length);
+            if (null == a || 0 == a.length) d && (a = b + "\x3d" + c);
+            else {
+                var e = a.indexOf(b +
+                    "\x3d");
+                0 > e ? d && (d = ";" == a.charAt(a.length - 1) ? "" : ";", a = a + d + b + "\x3d" + c) : (b = d ? b + "\x3d" + c : "", c = a.indexOf(";", e), d || c++, a = a.substring(0, e) + b + (c > e ? a.substring(c) : ""))
+            }
+            return a
+        },
+        setCellStyleFlags: function(a, b, c, d, e) {
+            if (null != b && 0 < b.length) {
+                a.beginUpdate();
+                try {
+                    for (var f = 0; f < b.length; f++)
+                        if (null != b[f]) {
+                            var g = mxUtils.setStyleFlag(a.getStyle(b[f]), c, d, e);
+                            a.setStyle(b[f], g)
+                        }
+                } finally {
+                    a.endUpdate()
+                }
+            }
+        },
+        setStyleFlag: function(a, b, c, d) {
+            if (null == a || 0 == a.length) a = d || null == d ? b + "\x3d" + c : b + "\x3d0";
+            else {
+                var e = a.indexOf(b +
+                    "\x3d");
+                if (0 > e) e = ";" == a.charAt(a.length - 1) ? "" : ";", a = d || null == d ? a + e + b + "\x3d" + c : a + e + b + "\x3d0";
+                else {
+                    var f = a.indexOf(";", e),
+                        g = "",
+                        g = 0 > f ? a.substring(e + b.length + 1) : a.substring(e + b.length + 1, f),
+                        g = null == d ? parseInt(g) ^ c : d ? parseInt(g) | c : parseInt(g) & ~c;
+                    a = a.substring(0, e) + b + "\x3d" + g + (0 <= f ? a.substring(f) : "")
+                }
+            }
+            return a
+        },
+        getAlignmentAsPoint: function(a, b) {
+            var c = 0,
+                d = 0;
+            a == mxConstants.ALIGN_CENTER ? c = -0.5 : a == mxConstants.ALIGN_RIGHT && (c = -1);
+            b == mxConstants.ALIGN_MIDDLE ? d = -0.5 : b == mxConstants.ALIGN_BOTTOM && (d = -1);
+            return new mxPoint(c,
+                d)
+        },
+        getSizeForString: function(a, b, c) {
+            b = null != b ? b : mxConstants.DEFAULT_FONTSIZE;
+            c = null != c ? c : mxConstants.DEFAULT_FONTFAMILY;
+            var d = document.createElement("div");
+            d.style.fontFamily = c;
+            d.style.fontSize = Math.round(b) + "px";
+            d.style.lineHeight = Math.round(b * mxConstants.LINE_HEIGHT) + "px";
+            d.style.position = "absolute";
+            d.style.whiteSpace = "nowrap";
+            d.style.visibility = "hidden";
+            d.style.display = mxClient.IS_QUIRKS ? "inline" : "inline-block";
+            d.style.zoom = "1";
+            d.innerHTML = a;
+            document.body.appendChild(d);
+            a = new mxRectangle(0, 0,
+                d.offsetWidth, d.offsetHeight);
+            document.body.removeChild(d);
+            return a
+        },
+        getViewXml: function(a, b, c, d, e) {
+            d = null != d ? d : 0;
+            e = null != e ? e : 0;
+            b = null != b ? b : 1;
+            null == c && (c = [a.getModel().getRoot()]);
+            var f = a.getView(),
+                g = null,
+                h = f.isEventsEnabled();
+            f.setEventsEnabled(!1);
+            var k = f.drawPane,
+                l = f.overlayPane;
+            a.dialect == mxConstants.DIALECT_SVG ? (f.drawPane = document.createElementNS(mxConstants.NS_SVG, "g"), f.canvas.appendChild(f.drawPane), f.overlayPane = document.createElementNS(mxConstants.NS_SVG, "g")) : (f.drawPane = f.drawPane.cloneNode(!1),
+                f.canvas.appendChild(f.drawPane), f.overlayPane = f.overlayPane.cloneNode(!1));
+            f.canvas.appendChild(f.overlayPane);
+            var m = f.getTranslate();
+            f.translate = new mxPoint(d, e);
+            b = new mxTemporaryCellStates(a.getView(), b, c);
+            try {
+                g = (new mxCodec).encode(a.getView())
+            } finally {
+                b.destroy(), f.translate = m, f.canvas.removeChild(f.drawPane), f.canvas.removeChild(f.overlayPane), f.drawPane = k, f.overlayPane = l, f.setEventsEnabled(h)
+            }
+            return g
+        },
+        getScaleForPageCount: function(a, b, c, d) {
+            if (1 > a) return 1;
+            c = null != c ? c : mxConstants.PAGE_FORMAT_A4_PORTRAIT;
+            d = null != d ? d : 0;
+            var e = c.width - 2 * d;
+            c = c.height - 2 * d;
+            d = b.getGraphBounds().clone();
+            b = b.getView().getScale();
+            d.width /= b;
+            d.height /= b;
+            b = d.width;
+            c = b / d.height / (e / c);
+            d = Math.sqrt(a);
+            var f = Math.sqrt(c);
+            c = d * f;
+            d /= f;
+            if (1 > c && d > a) {
+                var g = d / a;
+                d = a;
+                c /= g
+            }
+            1 > d && c > a && (g = c / a, c = a, d /= g);
+            g = Math.ceil(c) * Math.ceil(d);
+            for (f = 0; g > a;) {
+                var g = Math.floor(c) / c,
+                    h = Math.floor(d) / d;
+                1 == g && (g = Math.floor(c - 1) / c);
+                1 == h && (h = Math.floor(d - 1) / d);
+                g = g > h ? g : h;
+                c *= g;
+                d *= g;
+                g = Math.ceil(c) * Math.ceil(d);
+                f++;
+                if (10 < f) break
+            }
+            return 0.99999 * (e * c / b)
+        },
+        show: function(a,
+            b, c, d) {
+            c = null != c ? c : 0;
+            d = null != d ? d : 0;
+            null == b ? b = window.open().document : b.open();
+            var e = a.getGraphBounds();
+            c = -e.x + c;
+            d = -e.y + d;
+            if (mxClient.IS_IE) {
+                for (var e = "\x3chtml\x3e\x3chead\x3e", f = document.getElementsByTagName("base"), g = 0; g < f.length; g++) e += f[g].outerHTML;
+                e += "\x3cstyle\x3e";
+                for (g = 0; g < document.styleSheets.length; g++) try {
+                    e += document.styleSheets(g).cssText
+                } catch (h) {}
+                e += "\x3c/style\x3e\x3c/head\x3e";
+                e += "\x3cbody\x3e";
+                e += a.container.innerHTML;
+                e += "\x3c/body\x3e";
+                e += "\x3chtml\x3e";
+                b.writeln(e);
+                b.close();
+                a =
+                    b.body.getElementsByTagName("DIV")[0];
+                null != a && (a.style.position = "absolute", a.style.left = c + "px", a.style.top = d + "px")
+            } else {
+                b.writeln("\x3chtml");
+                b.writeln("\x3chead\x3e");
+                f = document.getElementsByTagName("base");
+                for (g = 0; g < f.length; g++) b.writeln(mxUtils.getOuterHtml(f[g]));
+                f = document.getElementsByTagName("link");
+                for (g = 0; g < f.length; g++) b.writeln(mxUtils.getOuterHtml(f[g]));
+                f = document.getElementsByTagName("style");
+                for (g = 0; g < f.length; g++) b.writeln(mxUtils.getOuterHtml(f[g]));
+                b.writeln("\x3c/head\x3e");
+                b.writeln("\x3c/html\x3e");
+                b.close();
+                null == b.body && b.documentElement.appendChild(b.createElement("body"));
+                b.body.style.overflow = "auto";
+                for (a = a.container.firstChild; null != a;) g = a.cloneNode(!0), b.body.appendChild(g), a = a.nextSibling;
+                a = b.getElementsByTagName("g")[0];
+                null != a && (a.setAttribute("transform", "translate(" + c + "," + d + ")"), c = a.ownerSVGElement, c.setAttribute("width", e.width + Math.max(e.x, 0) + 3), c.setAttribute("height", e.height + Math.max(e.y, 0) + 3))
+            }
+            mxUtils.removeCursors(b.body);
+            return b
+        },
+        printScreen: function(a) {
+            var b = window.open();
+            mxUtils.show(a, b.document);
+            a = function() {
+                b.focus();
+                b.print();
+                b.close()
+            };
+            mxClient.IS_GC ? b.setTimeout(a, 500) : a()
+        },
+        popup: function(a, b) {
+            if (b) {
+                var c = document.createElement("div");
+                c.style.overflow = "scroll";
+                c.style.width = "636px";
+                c.style.height = "460px";
+                var d = document.createElement("pre");
+                d.innerHTML = mxUtils.htmlEntities(a, !1).replace(/\n/g, "\x3cbr\x3e").replace(/ /g, "\x26nbsp;");
+                c.appendChild(d);
+                c = new mxWindow("Popup Window", c, document.body.clientWidth / 2 - 320, (document.body.clientHeight || document.documentElement.clientHeight) /
+                    2 - 240, 640, 480, !1, !0);
+                c.setClosable(!0);
+                c.setVisible(!0)
+            } else mxClient.IS_NS ? (c = window.open(), c.document.writeln("\x3cpre\x3e" + mxUtils.htmlEntities(a) + "\x3c/pre"), c.document.close()) : (c = window.open(), d = c.document.createElement("pre"), d.innerHTML = mxUtils.htmlEntities(a, !1).replace(/\n/g, "\x3cbr\x3e").replace(/ /g, "\x26nbsp;"), c.document.body.appendChild(d))
+        },
+        alert: function(a) {
+            alert(a)
+        },
+        prompt: function(a, b) {
+            return prompt(a, b)
+        },
+        confirm: function(a) {
+            return confirm(a)
+        },
+        error: function(a, b, c, d) {
+            var e = document.createElement("div");
+            e.style.padding = "20px";
+            var f = document.createElement("img");
+            f.setAttribute("src", d || mxUtils.errorImage);
+            f.setAttribute("valign", "bottom");
+            f.style.verticalAlign = "middle";
+            e.appendChild(f);
+            e.appendChild(document.createTextNode("\u00a0"));
+            e.appendChild(document.createTextNode("\u00a0"));
+            e.appendChild(document.createTextNode("\u00a0"));
+            mxUtils.write(e, a);
+            a = document.body.clientWidth;
+            d = document.body.clientHeight || document.documentElement.clientHeight;
+            var g = new mxWindow(mxResources.get(mxUtils.errorResource) ||
+                mxUtils.errorResource, e, (a - b) / 2, d / 4, b, null, !1, !0);
+            c && (mxUtils.br(e), b = document.createElement("p"), c = document.createElement("button"), mxClient.IS_IE ? c.style.cssText = "float:right" : c.setAttribute("style", "float:right"), mxEvent.addListener(c, "click", function(a) {
+                g.destroy()
+            }), mxUtils.write(c, mxResources.get(mxUtils.closeResource) || mxUtils.closeResource), b.appendChild(c), e.appendChild(b), mxUtils.br(e), g.setClosable(!0));
+            g.setVisible(!0);
+            return g
+        },
+        makeDraggable: function(a, b, c, d, e, f, g, h, k, l) {
+            a = new mxDragSource(a,
+                c);
+            a.dragOffset = new mxPoint(null != e ? e : 0, null != f ? f : mxConstants.TOOLTIP_VERTICAL_OFFSET);
+            a.autoscroll = g;
+            a.setGuidesEnabled(!1);
+            null != k && (a.highlightDropTargets = k);
+            null != l && (a.getDropTarget = l);
+            a.getGraphForEvent = function(a) {
+                return "function" == typeof b ? b(a) : b
+            };
+            null != d && (a.createDragElement = function() {
+                return d.cloneNode(!0)
+            }, h && (a.createPreviewElement = function(a) {
+                var b = d.cloneNode(!0),
+                    c = parseInt(b.style.width),
+                    e = parseInt(b.style.height);
+                b.style.width = Math.round(c * a.view.scale) + "px";
+                b.style.height = Math.round(e *
+                    a.view.scale) + "px";
+                return b
+            }));
+            return a
+        }
+    },
+    mxConstants = {
+        DEFAULT_HOTSPOT: 0.3,
+        MIN_HOTSPOT_SIZE: 8,
+        MAX_HOTSPOT_SIZE: 0,
+        RENDERING_HINT_EXACT: "exact",
+        RENDERING_HINT_FASTER: "faster",
+        RENDERING_HINT_FASTEST: "fastest",
+        DIALECT_SVG: "svg",
+        DIALECT_VML: "vml",
+        DIALECT_MIXEDHTML: "mixedHtml",
+        DIALECT_PREFERHTML: "preferHtml",
+        DIALECT_STRICTHTML: "strictHtml",
+        NS_SVG: "http://www.w3.org/2000/svg",
+        NS_XHTML: "http://www.w3.org/1999/xhtml",
+        NS_XLINK: "http://www.w3.org/1999/xlink",
+        SHADOWCOLOR: "gray",
+        SHADOW_OFFSET_X: 2,
+        SHADOW_OFFSET_Y: 3,
+        SHADOW_OPACITY: 1,
+        NODETYPE_ELEMENT: 1,
+        NODETYPE_ATTRIBUTE: 2,
+        NODETYPE_TEXT: 3,
+        NODETYPE_CDATA: 4,
+        NODETYPE_ENTITY_REFERENCE: 5,
+        NODETYPE_ENTITY: 6,
+        NODETYPE_PROCESSING_INSTRUCTION: 7,
+        NODETYPE_COMMENT: 8,
+        NODETYPE_DOCUMENT: 9,
+        NODETYPE_DOCUMENTTYPE: 10,
+        NODETYPE_DOCUMENT_FRAGMENT: 11,
+        NODETYPE_NOTATION: 12,
+        TOOLTIP_VERTICAL_OFFSET: 16,
+        DEFAULT_VALID_COLOR: "#00FF00",
+        DEFAULT_INVALID_COLOR: "#FF0000",
+        HIGHLIGHT_STROKEWIDTH: 3,
+        CURSOR_MOVABLE_VERTEX: "move",
+        CURSOR_MOVABLE_EDGE: "move",
+        CURSOR_LABEL_HANDLE: "default",
+        CURSOR_BEND_HANDLE: "pointer",
+        CURSOR_CONNECT: "pointer",
+        HIGHLIGHT_COLOR: "#00FF00",
+        CONNECT_TARGET_COLOR: "#0000FF",
+        INVALID_CONNECT_TARGET_COLOR: "#FF0000",
+        DROP_TARGET_COLOR: "#0000FF",
+        VALID_COLOR: "#00FF00",
+        INVALID_COLOR: "#FF0000",
+        EDGE_SELECTION_COLOR: "#00FF00",
+        VERTEX_SELECTION_COLOR: "#00FF00",
+        VERTEX_SELECTION_STROKEWIDTH: 1,
+        EDGE_SELECTION_STROKEWIDTH: 1,
+        VERTEX_SELECTION_DASHED: !0,
+        EDGE_SELECTION_DASHED: !0,
+        GUIDE_COLOR: "#FF0000",
+        GUIDE_STROKEWIDTH: 1,
+        OUTLINE_COLOR: "#0099FF",
+        OUTLINE_STROKEWIDTH: mxClient.IS_IE ? 2 : 3,
+        HANDLE_SIZE: 7,
+        LABEL_HANDLE_SIZE: 4,
+        HANDLE_FILLCOLOR: "#00FF00",
+        HANDLE_STROKECOLOR: "black",
+        LABEL_HANDLE_FILLCOLOR: "yellow",
+        CONNECT_HANDLE_FILLCOLOR: "#0000FF",
+        LOCKED_HANDLE_FILLCOLOR: "#FF0000",
+        OUTLINE_HANDLE_FILLCOLOR: "#00FFFF",
+        OUTLINE_HANDLE_STROKECOLOR: "#0033FF",
+        DEFAULT_FONTFAMILY: "Arial,Helvetica",
+        DEFAULT_FONTSIZE: 11,
+        LINE_HEIGHT: 1.2,
+        DEFAULT_FONTSTYLE: 0,
+        DEFAULT_STARTSIZE: 40,
+        DEFAULT_MARKERSIZE: 6,
+        DEFAULT_IMAGESIZE: 24,
+        ENTITY_SEGMENT: 30,
+        RECTANGLE_ROUNDING_FACTOR: 0.15,
+        LINE_ARCSIZE: 20,
+        ARROW_SPACING: 10,
+        ARROW_WIDTH: 30,
+        ARROW_SIZE: 30,
+        PAGE_FORMAT_A4_PORTRAIT: new mxRectangle(0,
+            0, 826, 1169),
+        PAGE_FORMAT_A4_LANDSCAPE: new mxRectangle(0, 0, 1169, 826),
+        PAGE_FORMAT_LETTER_PORTRAIT: new mxRectangle(0, 0, 850, 1100),
+        PAGE_FORMAT_LETTER_LANDSCAPE: new mxRectangle(0, 0, 1100, 850),
+        NONE: "none",
+        STYLE_PERIMETER: "perimeter",
+        STYLE_SOURCE_PORT: "sourcePort",
+        STYLE_TARGET_PORT: "targetPort",
+        STYLE_PORT_CONSTRAINT: "portConstraint",
+        STYLE_OPACITY: "opacity",
+        STYLE_TEXT_OPACITY: "textOpacity",
+        STYLE_OVERFLOW: "overflow",
+        STYLE_ORTHOGONAL: "orthogonal",
+        STYLE_EXIT_X: "exitX",
+        STYLE_EXIT_Y: "exitY",
+        STYLE_EXIT_PERIMETER: "exitPerimeter",
+        STYLE_ENTRY_X: "entryX",
+        STYLE_ENTRY_Y: "entryY",
+        STYLE_ENTRY_PERIMETER: "entryPerimeter",
+        STYLE_WHITE_SPACE: "whiteSpace",
+        STYLE_ROTATION: "rotation",
+        STYLE_FILLCOLOR: "fillColor",
+        STYLE_SWIMLANE_FILLCOLOR: "swimlaneFillColor",
+        STYLE_GRADIENTCOLOR: "gradientColor",
+        STYLE_GRADIENT_DIRECTION: "gradientDirection",
+        STYLE_STROKECOLOR: "strokeColor",
+        STYLE_SEPARATORCOLOR: "separatorColor",
+        STYLE_STROKEWIDTH: "strokeWidth",
+        STYLE_ALIGN: "align",
+        STYLE_VERTICAL_ALIGN: "verticalAlign",
+        STYLE_LABEL_POSITION: "labelPosition",
+        STYLE_VERTICAL_LABEL_POSITION: "verticalLabelPosition",
+        STYLE_IMAGE_ASPECT: "imageAspect",
+        STYLE_IMAGE_ALIGN: "imageAlign",
+        STYLE_IMAGE_VERTICAL_ALIGN: "imageVerticalAlign",
+        STYLE_GLASS: "glass",
+        STYLE_IMAGE: "image",
+        STYLE_IMAGE_WIDTH: "imageWidth",
+        STYLE_IMAGE_HEIGHT: "imageHeight",
+        STYLE_IMAGE_BACKGROUND: "imageBackground",
+        STYLE_IMAGE_BORDER: "imageBorder",
+        STYLE_FLIPH: "flipH",
+        STYLE_FLIPV: "flipV",
+        STYLE_NOLABEL: "noLabel",
+        STYLE_NOEDGESTYLE: "noEdgeStyle",
+        STYLE_LABEL_BACKGROUNDCOLOR: "labelBackgroundColor",
+        STYLE_LABEL_BORDERCOLOR: "labelBorderColor",
+        STYLE_LABEL_PADDING: "labelPadding",
+        STYLE_INDICATOR_SHAPE: "indicatorShape",
+        STYLE_INDICATOR_IMAGE: "indicatorImage",
+        STYLE_INDICATOR_COLOR: "indicatorColor",
+        STYLE_INDICATOR_STROKECOLOR: "indicatorStrokeColor",
+        STYLE_INDICATOR_GRADIENTCOLOR: "indicatorGradientColor",
+        STYLE_INDICATOR_SPACING: "indicatorSpacing",
+        STYLE_INDICATOR_WIDTH: "indicatorWidth",
+        STYLE_INDICATOR_HEIGHT: "indicatorHeight",
+        STYLE_INDICATOR_DIRECTION: "indicatorDirection",
+        STYLE_SHADOW: "shadow",
+        STYLE_SEGMENT: "segment",
+        STYLE_ENDARROW: "endArrow",
+        STYLE_STARTARROW: "startArrow",
+        STYLE_ENDSIZE: "endSize",
+        STYLE_STARTSIZE: "startSize",
+        STYLE_SWIMLANE_LINE: "swimlaneLine",
+        STYLE_ENDFILL: "endFill",
+        STYLE_STARTFILL: "startFill",
+        STYLE_DASHED: "dashed",
+        STYLE_DASH_PATTERN: "dashPattern",
+        STYLE_ROUNDED: "rounded",
+        STYLE_CURVED: "curved",
+        STYLE_ARCSIZE: "arcSize",
+        STYLE_SMOOTH: "smooth",
+        STYLE_SOURCE_PERIMETER_SPACING: "sourcePerimeterSpacing",
+        STYLE_TARGET_PERIMETER_SPACING: "targetPerimeterSpacing",
+        STYLE_PERIMETER_SPACING: "perimeterSpacing",
+        STYLE_SPACING: "spacing",
+        STYLE_SPACING_TOP: "spacingTop",
+        STYLE_SPACING_LEFT: "spacingLeft",
+        STYLE_SPACING_BOTTOM: "spacingBottom",
+        STYLE_SPACING_RIGHT: "spacingRight",
+        STYLE_HORIZONTAL: "horizontal",
+        STYLE_DIRECTION: "direction",
+        STYLE_ELBOW: "elbow",
+        STYLE_FONTCOLOR: "fontColor",
+        STYLE_FONTFAMILY: "fontFamily",
+        STYLE_FONTSIZE: "fontSize",
+        STYLE_FONTSTYLE: "fontStyle",
+        STYLE_AUTOSIZE: "autosize",
+        STYLE_FOLDABLE: "foldable",
+        STYLE_EDITABLE: "editable",
+        STYLE_BENDABLE: "bendable",
+        STYLE_MOVABLE: "movable",
+        STYLE_RESIZABLE: "resizable",
+        STYLE_CLONEABLE: "cloneable",
+        STYLE_DELETABLE: "deletable",
+        STYLE_SHAPE: "shape",
+        STYLE_EDGE: "edgeStyle",
+        STYLE_LOOP: "loopStyle",
+        STYLE_ROUTING_CENTER_X: "routingCenterX",
+        STYLE_ROUTING_CENTER_Y: "routingCenterY",
+        FONT_BOLD: 1,
+        FONT_ITALIC: 2,
+        FONT_UNDERLINE: 4,
+        FONT_SHADOW: 8,
+        SHAPE_RECTANGLE: "rectangle",
+        SHAPE_ELLIPSE: "ellipse",
+        SHAPE_DOUBLE_ELLIPSE: "doubleEllipse",
+        SHAPE_RHOMBUS: "rhombus",
+        SHAPE_LINE: "line",
+        SHAPE_IMAGE: "image",
+        SHAPE_ARROW: "arrow",
+        SHAPE_LABEL: "label",
+        SHAPE_CYLINDER: "cylinder",
+        SHAPE_SWIMLANE: "swimlane",
+        SHAPE_CONNECTOR: "connector",
+        SHAPE_ACTOR: "actor",
+        SHAPE_CLOUD: "cloud",
+        SHAPE_TRIANGLE: "triangle",
+        SHAPE_HEXAGON: "hexagon",
+        ARROW_CLASSIC: "classic",
+        ARROW_BLOCK: "block",
+        ARROW_OPEN: "open",
+        ARROW_OVAL: "oval",
+        ARROW_DIAMOND: "diamond",
+        ARROW_DIAMOND_THIN: "diamondThin",
+        ALIGN_LEFT: "left",
+        ALIGN_CENTER: "center",
+        ALIGN_RIGHT: "right",
+        ALIGN_TOP: "top",
+        ALIGN_MIDDLE: "middle",
+        ALIGN_BOTTOM: "bottom",
+        DIRECTION_NORTH: "north",
+        DIRECTION_SOUTH: "south",
+        DIRECTION_EAST: "east",
+        DIRECTION_WEST: "west",
+        DIRECTION_MASK_NONE: 0,
+        DIRECTION_MASK_WEST: 1,
+        DIRECTION_MASK_NORTH: 2,
+        DIRECTION_MASK_SOUTH: 4,
+        DIRECTION_MASK_EAST: 8,
+        DIRECTION_MASK_ALL: 15,
+        ELBOW_VERTICAL: "vertical",
+        ELBOW_HORIZONTAL: "horizontal",
+        EDGESTYLE_ELBOW: "elbowEdgeStyle",
+        EDGESTYLE_ENTITY_RELATION: "entityRelationEdgeStyle",
+        EDGESTYLE_LOOP: "loopEdgeStyle",
+        EDGESTYLE_SIDETOSIDE: "sideToSideEdgeStyle",
+        EDGESTYLE_TOPTOBOTTOM: "topToBottomEdgeStyle",
+        EDGESTYLE_ORTHOGONAL: "orthogonalEdgeStyle",
+        EDGESTYLE_SEGMENT: "segmentEdgeStyle",
+        PERIMETER_ELLIPSE: "ellipsePerimeter",
+        PERIMETER_RECTANGLE: "rectanglePerimeter",
+        PERIMETER_RHOMBUS: "rhombusPerimeter",
+        PERIMETER_TRIANGLE: "trianglePerimeter"
+    };
+
+function mxEventObject(a) {
+    this.name = a;
+    this.properties = [];
+    for (var b = 1; b < arguments.length; b += 2) null != arguments[b + 1] && (this.properties[arguments[b]] = arguments[b + 1])
+}
+mxEventObject.prototype.name = null;
+mxEventObject.prototype.properties = null;
+mxEventObject.prototype.consumed = !1;
+mxEventObject.prototype.getName = function() {
+    return this.name
+};
+mxEventObject.prototype.getProperties = function() {
+    return this.properties
+};
+mxEventObject.prototype.getProperty = function(a) {
+    return this.properties[a]
+};
+mxEventObject.prototype.isConsumed = function() {
+    return this.consumed
+};
+mxEventObject.prototype.consume = function() {
+    this.consumed = !0
+};
+
+function mxMouseEvent(a, b) {
+    this.evt = a;
+    this.state = b
+}
+mxMouseEvent.prototype.consumed = !1;
+mxMouseEvent.prototype.evt = null;
+mxMouseEvent.prototype.graphX = null;
+mxMouseEvent.prototype.graphY = null;
+mxMouseEvent.prototype.state = null;
+mxMouseEvent.prototype.getEvent = function() {
+    return this.evt
+};
+mxMouseEvent.prototype.getSource = function() {
+    return mxEvent.getSource(this.evt)
+};
+mxMouseEvent.prototype.isSource = function(a) {
+    if (null != a)
+        for (var b = this.getSource(); null != b;) {
+            if (b == a.node) return !0;
+            b = b.parentNode
+        }
+    return !1
+};
+mxMouseEvent.prototype.getX = function() {
+    return mxEvent.getClientX(this.getEvent())
+};
+mxMouseEvent.prototype.getY = function() {
+    return mxEvent.getClientY(this.getEvent())
+};
+mxMouseEvent.prototype.getGraphX = function() {
+    return this.graphX
+};
+mxMouseEvent.prototype.getGraphY = function() {
+    return this.graphY
+};
+mxMouseEvent.prototype.getState = function() {
+    return this.state
+};
+mxMouseEvent.prototype.getCell = function() {
+    var a = this.getState();
+    return null != a ? a.cell : null
+};
+mxMouseEvent.prototype.isPopupTrigger = function() {
+    return mxEvent.isPopupTrigger(this.getEvent())
+};
+mxMouseEvent.prototype.isConsumed = function() {
+    return this.consumed
+};
+mxMouseEvent.prototype.consume = function(a) {
+    (null != a ? a : 1) && this.evt.preventDefault && this.evt.preventDefault();
+    this.evt.returnValue = !1;
+    this.consumed = !0
+};
+
+function mxEventSource(a) {
+    this.setEventSource(a)
+}
+mxEventSource.prototype.eventListeners = null;
+mxEventSource.prototype.eventsEnabled = !0;
+mxEventSource.prototype.eventSource = null;
+mxEventSource.prototype.isEventsEnabled = function() {
+    return this.eventsEnabled
+};
+mxEventSource.prototype.setEventsEnabled = function(a) {
+    this.eventsEnabled = a
+};
+mxEventSource.prototype.getEventSource = function() {
+    return this.eventSource
+};
+mxEventSource.prototype.setEventSource = function(a) {
+    this.eventSource = a
+};
+mxEventSource.prototype.addListener = function(a, b) {
+    null == this.eventListeners && (this.eventListeners = []);
+    this.eventListeners.push(a);
+    this.eventListeners.push(b)
+};
+mxEventSource.prototype.removeListener = function(a) {
+    if (null != this.eventListeners)
+        for (var b = 0; b < this.eventListeners.length;) this.eventListeners[b + 1] == a ? this.eventListeners.splice(b, 2) : b += 2
+};
+mxEventSource.prototype.fireEvent = function(a, b) {
+    if (null != this.eventListeners && this.isEventsEnabled()) {
+        null == a && (a = new mxEventObject);
+        null == b && (b = this.getEventSource());
+        null == b && (b = this);
+        for (var c = [b, a], d = 0; d < this.eventListeners.length; d += 2) {
+            var e = this.eventListeners[d];
+            (null == e || e == a.getName()) && this.eventListeners[d + 1].apply(this, c)
+        }
+    }
+};
+var mxEvent = {
+    objects: [],
+    addListener: function() {
+        var a = function(a, c, d) {
+            null == a.mxListenerList && (a.mxListenerList = [], mxEvent.objects.push(a));
+            a.mxListenerList.push({
+                name: c,
+                f: d
+            })
+        };
+        return window.addEventListener ? function(b, c, d) {
+            b.addEventListener(c, d, !1);
+            a(b, c, d)
+        } : function(b, c, d) {
+            b.attachEvent("on" + c, d);
+            a(b, c, d)
+        }
+    }(),
+    removeListener: function() {
+        var a = function(a, c, d) {
+            if (null != a.mxListenerList) {
+                c = a.mxListenerList.length;
+                for (var e = 0; e < c; e++)
+                    if (a.mxListenerList[e].f == d) {
+                        a.mxListenerList.splice(e, 1);
+                        break
+                    }
+                0 ==
+                    a.mxListenerList.length && (a.mxListenerList = null)
+            }
+        };
+        return window.removeEventListener ? function(b, c, d) {
+            b.removeEventListener(c, d, !1);
+            a(b, c, d)
+        } : function(b, c, d) {
+            b.detachEvent("on" + c, d);
+            a(b, c, d)
+        }
+    }(),
+    removeAllListeners: function(a) {
+        var b = a.mxListenerList;
+        if (null != b)
+            for (; 0 < b.length;) {
+                var c = b[0];
+                mxEvent.removeListener(a, c.name, c.f)
+            }
+    },
+    addGestureListeners: function(a, b, c, d) {
+        null != b && mxEvent.addListener(a, "mousedown", b);
+        null != c && mxEvent.addListener(a, "mousemove", c);
+        null != d && mxEvent.addListener(a, "mouseup", d);
+        mxClient.IS_TOUCH && (null != b && mxEvent.addListener(a, "touchstart", b), null != c && mxEvent.addListener(a, "touchmove", c), null != d && mxEvent.addListener(a, "touchend", d))
+    },
+    removeGestureListeners: function(a, b, c, d) {
+        null != b && mxEvent.removeListener(a, "mousedown", b);
+        null != c && mxEvent.removeListener(a, "mousemove", c);
+        null != d && mxEvent.removeListener(a, "mouseup", d);
+        mxClient.IS_TOUCH && (null != b && mxEvent.removeListener(a, "touchstart", b), null != c && mxEvent.removeListener(a, "touchmove", c), null != d && mxEvent.removeListener(a, "touchend",
+            d))
+    },
+    redirectMouseEvents: function(a, b, c, d, e, f, g) {
+        var h = function(a) {
+            return "function" == typeof c ? c(a) : c
+        };
+        mxEvent.addGestureListeners(a, function(a) {
+            null != d ? d(a) : mxEvent.isConsumed(a) || b.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a, h(a)))
+        }, function(a) {
+            null != e ? e(a) : mxEvent.isConsumed(a) || b.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(a, h(a)))
+        }, function(a) {
+            null != f ? f(a) : mxEvent.isConsumed(a) || b.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(a, h(a)))
+        });
+        mxEvent.addListener(a, "dblclick", function(a) {
+            if (null !=
+                g) g(a);
+            else if (!mxEvent.isConsumed(a)) {
+                var c = h(a);
+                b.dblClick(a, null != c ? c.cell : null)
+            }
+        })
+    },
+    release: function(a) {
+        if (null != a && (mxEvent.removeAllListeners(a), a = a.childNodes, null != a))
+            for (var b = a.length, c = 0; c < b; c += 1) mxEvent.release(a[c])
+    },
+    addMouseWheelListener: function(a) {
+        if (null != a) {
+            var b = function(b) {
+                null == b && (b = window.event);
+                var d = 0,
+                    d = mxClient.IS_NS && !mxClient.IS_SF && !mxClient.IS_GC ? -b.detail / 2 : b.wheelDelta / 120;
+                0 != d && a(b, 0 < d)
+            };
+            mxClient.IS_NS ? mxEvent.addListener(window, mxClient.IS_SF || mxClient.IS_GC ? "mousewheel" :
+                "DOMMouseScroll", b) : mxEvent.addListener(document, "mousewheel", b)
+        }
+    },
+    disableContextMenu: function() {
+        return mxClient.IS_IE && ("undefined" === typeof document.documentMode || 9 > document.documentMode) ? function(a) {
+            mxEvent.addListener(a, "contextmenu", function() {
+                return !1
+            })
+        } : function(a) {
+            a.setAttribute("oncontextmenu", "return false;")
+        }
+    }(),
+    getSource: function(a) {
+        return null != a.srcElement ? a.srcElement : a.target
+    },
+    isConsumed: function(a) {
+        return null != a.isConsumed && a.isConsumed
+    },
+    isLeftMouseButton: function(a) {
+        return a.button ==
+            (mxClient.IS_IE && ("undefined" === typeof document.documentMode || 9 > document.documentMode) ? 1 : 0)
+    },
+    isRightMouseButton: function(a) {
+        return 2 == a.button
+    },
+    isPopupTrigger: function(a) {
+        return mxEvent.isRightMouseButton(a) || mxEvent.isShiftDown(a) && !mxEvent.isControlDown(a)
+    },
+    isShiftDown: function(a) {
+        return null != a ? a.shiftKey : !1
+    },
+    isAltDown: function(a) {
+        return null != a ? a.altKey : !1
+    },
+    isControlDown: function(a) {
+        return null != a ? a.ctrlKey : !1
+    },
+    isMetaDown: function(a) {
+        return null != a ? a.metaKey : !1
+    },
+    getMainEvent: function(a) {
+        ("touchstart" ==
+            a.type || "touchmove" == a.type) && null != a.touches && null != a.touches[0] ? a = a.touches[0] : "touchend" == a.type && (null != a.changedTouches && null != a.changedTouches[0]) && (a = a.changedTouches[0]);
+        return a
+    },
+    getClientX: function(a) {
+        return mxEvent.getMainEvent(a).clientX
+    },
+    getClientY: function(a) {
+        return mxEvent.getMainEvent(a).clientY
+    },
+    consume: function(a, b, c) {
+        c = null != c ? c : !0;
+        if (null != b ? b : 1) a.preventDefault ? (c && a.stopPropagation(), a.preventDefault()) : c && (a.cancelBubble = !0);
+        a.isConsumed = !0;
+        a.returnValue = !1
+    },
+    LABEL_HANDLE: -1,
+    ROTATION_HANDLE: -2,
+    MOUSE_DOWN: "mouseDown",
+    MOUSE_MOVE: "mouseMove",
+    MOUSE_UP: "mouseUp",
+    ACTIVATE: "activate",
+    RESIZE_START: "resizeStart",
+    RESIZE: "resize",
+    RESIZE_END: "resizeEnd",
+    MOVE_START: "moveStart",
+    MOVE: "move",
+    MOVE_END: "moveEnd",
+    PAN_START: "panStart",
+    PAN: "pan",
+    PAN_END: "panEnd",
+    MINIMIZE: "minimize",
+    NORMALIZE: "normalize",
+    MAXIMIZE: "maximize",
+    HIDE: "hide",
+    SHOW: "show",
+    CLOSE: "close",
+    DESTROY: "destroy",
+    REFRESH: "refresh",
+    SIZE: "size",
+    SELECT: "select",
+    FIRED: "fired",
+    GET: "get",
+    RECEIVE: "receive",
+    CONNECT: "connect",
+    DISCONNECT: "disconnect",
+    SUSPEND: "suspend",
+    RESUME: "resume",
+    MARK: "mark",
+    SESSION: "session",
+    ROOT: "root",
+    POST: "post",
+    OPEN: "open",
+    SAVE: "save",
+    BEFORE_ADD_VERTEX: "beforeAddVertex",
+    ADD_VERTEX: "addVertex",
+    AFTER_ADD_VERTEX: "afterAddVertex",
+    DONE: "done",
+    EXECUTE: "execute",
+    EXECUTED: "executed",
+    BEGIN_UPDATE: "beginUpdate",
+    START_EDIT: "startEdit",
+    END_UPDATE: "endUpdate",
+    END_EDIT: "endEdit",
+    BEFORE_UNDO: "beforeUndo",
+    UNDO: "undo",
+    REDO: "redo",
+    CHANGE: "change",
+    NOTIFY: "notify",
+    LAYOUT_CELLS: "layoutCells",
+    CLICK: "click",
+    SCALE: "scale",
+    TRANSLATE: "translate",
+    SCALE_AND_TRANSLATE: "scaleAndTranslate",
+    UP: "up",
+    DOWN: "down",
+    ADD: "add",
+    REMOVE: "remove",
+    CLEAR: "clear",
+    ADD_CELLS: "addCells",
+    CELLS_ADDED: "cellsAdded",
+    MOVE_CELLS: "moveCells",
+    CELLS_MOVED: "cellsMoved",
+    RESIZE_CELLS: "resizeCells",
+    CELLS_RESIZED: "cellsResized",
+    TOGGLE_CELLS: "toggleCells",
+    CELLS_TOGGLED: "cellsToggled",
+    ORDER_CELLS: "orderCells",
+    CELLS_ORDERED: "cellsOrdered",
+    REMOVE_CELLS: "removeCells",
+    CELLS_REMOVED: "cellsRemoved",
+    GROUP_CELLS: "groupCells",
+    UNGROUP_CELLS: "ungroupCells",
+    REMOVE_CELLS_FROM_PARENT: "removeCellsFromParent",
+    FOLD_CELLS: "foldCells",
+    CELLS_FOLDED: "cellsFolded",
+    ALIGN_CELLS: "alignCells",
+    LABEL_CHANGED: "labelChanged",
+    CONNECT_CELL: "connectCell",
+    CELL_CONNECTED: "cellConnected",
+    SPLIT_EDGE: "splitEdge",
+    FLIP_EDGE: "flipEdge",
+    START_EDITING: "startEditing",
+    ADD_OVERLAY: "addOverlay",
+    REMOVE_OVERLAY: "removeOverlay",
+    UPDATE_CELL_SIZE: "updateCellSize",
+    ESCAPE: "escape",
+    CLICK: "click",
+    DOUBLE_CLICK: "doubleClick",
+    START: "start",
+    RESET: "reset"
+};
+
+function mxXmlRequest(a, b, c, d, e, f) {
+    this.url = a;
+    this.params = b;
+    this.method = c || "POST";
+    this.async = null != d ? d : !0;
+    this.username = e;
+    this.password = f
+}
+mxXmlRequest.prototype.url = null;
+mxXmlRequest.prototype.params = null;
+mxXmlRequest.prototype.method = null;
+mxXmlRequest.prototype.async = null;
+mxXmlRequest.prototype.binary = !1;
+mxXmlRequest.prototype.username = null;
+mxXmlRequest.prototype.password = null;
+mxXmlRequest.prototype.request = null;
+mxXmlRequest.prototype.isBinary = function() {
+    return this.binary
+};
+mxXmlRequest.prototype.setBinary = function(a) {
+    this.binary = a
+};
+mxXmlRequest.prototype.getText = function() {
+    return this.request.responseText
+};
+mxXmlRequest.prototype.isReady = function() {
+    return 4 == this.request.readyState
+};
+mxXmlRequest.prototype.getDocumentElement = function() {
+    var a = this.getXml();
+    return null != a ? a.documentElement : null
+};
+mxXmlRequest.prototype.getXml = function() {
+    var a = this.request.responseXML;
+    if (9 <= document.documentMode || null == a || null == a.documentElement) a = mxUtils.parseXml(this.request.responseText);
+    return a
+};
+mxXmlRequest.prototype.getText = function() {
+    return this.request.responseText
+};
+mxXmlRequest.prototype.getStatus = function() {
+    return this.request.status
+};
+mxXmlRequest.prototype.create = function() {
+    if (window.XMLHttpRequest) return function() {
+        var a = new XMLHttpRequest;
+        this.isBinary() && a.overrideMimeType && a.overrideMimeType("text/plain; charset\x3dx-user-defined");
+        return a
+    };
+    if ("undefined" != typeof ActiveXObject) return function() {
+        return new ActiveXObject("Microsoft.XMLHTTP")
+    }
+}();
+mxXmlRequest.prototype.send = function(a, b) {
+    this.request = this.create();
+    null != this.request && (null != a && (this.request.onreadystatechange = mxUtils.bind(this, function() {
+        this.isReady() && (a(this), this.onreadystatechaange = null)
+    })), this.request.open(this.method, this.url, this.async, this.username, this.password), this.setRequestHeaders(this.request, this.params), this.request.send(this.params))
+};
+mxXmlRequest.prototype.setRequestHeaders = function(a, b) {
+    null != b && a.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
+};
+mxXmlRequest.prototype.simulate = function(a, b) {
+    a = a || document;
+    var c = null;
+    a == document && (c = window.onbeforeunload, window.onbeforeunload = null);
+    var d = a.createElement("form");
+    d.setAttribute("method", this.method);
+    d.setAttribute("action", this.url);
+    null != b && d.setAttribute("target", b);
+    d.style.display = "none";
+    d.style.visibility = "hidden";
+    for (var e = 0 < this.params.indexOf("\x26") ? this.params.split("\x26") : this.params.split(), f = 0; f < e.length; f++) {
+        var g = e[f].indexOf("\x3d");
+        if (0 < g) {
+            var h = e[f].substring(0, g),
+                k = e[f].substring(g +
+                    1),
+                g = a.createElement("textarea");
+            g.setAttribute("name", h);
+            k = k.replace(/\n/g, "\x26#xa;");
+            h = a.createTextNode(k);
+            g.appendChild(h);
+            d.appendChild(g)
+        }
+    }
+    a.body.appendChild(d);
+    d.submit();
+    a.body.removeChild(d);
+    null != c && (window.onbeforeunload = c)
+};
+var mxClipboard = {
+    STEPSIZE: 10,
+    insertCount: 1,
+    cells: null,
+    isEmpty: function() {
+        return null == mxClipboard.cells
+    },
+    cut: function(a, b) {
+        b = mxClipboard.copy(a, b);
+        mxClipboard.insertCount = 0;
+        mxClipboard.removeCells(a, b);
+        return b
+    },
+    removeCells: function(a, b) {
+        a.removeCells(b)
+    },
+    copy: function(a, b) {
+        b = b || a.getSelectionCells();
+        var c = a.getExportableCells(b);
+        mxClipboard.insertCount = 1;
+        mxClipboard.cells = a.cloneCells(c);
+        return c
+    },
+    paste: function(a) {
+        if (null != mxClipboard.cells) {
+            var b = a.getImportableCells(mxClipboard.cells),
+                c = mxClipboard.insertCount *
+                mxClipboard.STEPSIZE,
+                d = a.getDefaultParent(),
+                b = a.importCells(b, c, c, d);
+            mxClipboard.insertCount++;
+            a.setSelectionCells(b)
+        }
+    }
+};
+
+function mxWindow(a, b, c, d, e, f, g, h, k, l) {
+    null != b && (g = null != g ? g : !0, this.content = b, this.init(c, d, e, f, l), this.installMaximizeHandler(), this.installMinimizeHandler(), this.installCloseHandler(), this.setMinimizable(g), this.setTitle(a), (null == h || h) && this.installMoveHandler(), null != k && null != k.parentNode ? k.parentNode.replaceChild(this.div, k) : document.body.appendChild(this.div))
+}
+mxWindow.prototype = new mxEventSource;
+mxWindow.prototype.constructor = mxWindow;
+mxWindow.prototype.closeImage = mxClient.imageBasePath + "/close.gif";
+mxWindow.prototype.minimizeImage = mxClient.imageBasePath + "/minimize.gif";
+mxWindow.prototype.normalizeImage = mxClient.imageBasePath + "/normalize.gif";
+mxWindow.prototype.maximizeImage = mxClient.imageBasePath + "/maximize.gif";
+mxWindow.prototype.resizeImage = mxClient.imageBasePath + "/resize.gif";
+mxWindow.prototype.visible = !1;
+mxWindow.prototype.content = !1;
+mxWindow.prototype.minimumSize = new mxRectangle(0, 0, 50, 40);
+mxWindow.prototype.title = !1;
+mxWindow.prototype.content = !1;
+mxWindow.prototype.destroyOnClose = !0;
+mxWindow.prototype.init = function(a, b, c, d, e) {
+    e = null != e ? e : "mxWindow";
+    this.div = document.createElement("div");
+    this.div.className = e;
+    this.div.style.left = a + "px";
+    this.div.style.top = b + "px";
+    this.table = document.createElement("table");
+    this.table.className = e;
+    null != c && (mxClient.IS_IE || (this.div.style.width = c + "px"), this.table.style.width = c + "px");
+    null != d && (mxClient.IS_IE || (this.div.style.height = d + "px"), this.table.style.height = d + "px");
+    a = document.createElement("tbody");
+    b = document.createElement("tr");
+    this.title = document.createElement("td");
+    this.title.className = e + "Title";
+    b.appendChild(this.title);
+    a.appendChild(b);
+    b = document.createElement("tr");
+    this.td = document.createElement("td");
+    this.td.className = e + "Pane";
+    this.contentWrapper = document.createElement("div");
+    this.contentWrapper.className = e + "Pane";
+    this.contentWrapper.style.width = "100%";
+    this.contentWrapper.appendChild(this.content);
+    if (mxClient.IS_IE || "DIV" != this.content.nodeName.toUpperCase()) this.contentWrapper.style.height = "100%";
+    this.td.appendChild(this.contentWrapper);
+    b.appendChild(this.td);
+    a.appendChild(b);
+    this.table.appendChild(a);
+    this.div.appendChild(this.table);
+    e = mxUtils.bind(this, function(a) {
+        this.activate()
+    });
+    mxEvent.addListener(this.title, "mousedown", e);
+    mxEvent.addListener(this.table, "mousedown", e);
+    mxClient.IS_TOUCH && (mxEvent.addListener(this.title, "touchstart", e), mxEvent.addListener(this.table, "touchstart", e));
+    this.hide()
+};
+mxWindow.prototype.setTitle = function(a) {
+    for (var b = this.title.firstChild; null != b;) {
+        var c = b.nextSibling;
+        b.nodeType == mxConstants.NODETYPE_TEXT && b.parentNode.removeChild(b);
+        b = c
+    }
+    mxUtils.write(this.title, a || "")
+};
+mxWindow.prototype.setScrollable = function(a) {
+    0 > navigator.userAgent.indexOf("Presto/2.5") && (this.contentWrapper.style.overflow = a ? "auto" : "hidden")
+};
+mxWindow.prototype.activate = function() {
+    if (mxWindow.activeWindow != this) {
+        var a = mxUtils.getCurrentStyle(this.getElement()),
+            a = null != a ? a.zIndex : 3;
+        if (mxWindow.activeWindow) {
+            var b = mxWindow.activeWindow.getElement();
+            null != b && null != b.style && (b.style.zIndex = a)
+        }
+        b = mxWindow.activeWindow;
+        this.getElement().style.zIndex = parseInt(a) + 1;
+        mxWindow.activeWindow = this;
+        this.fireEvent(new mxEventObject(mxEvent.ACTIVATE, "previousWindow", b))
+    }
+};
+mxWindow.prototype.getElement = function() {
+    return this.div
+};
+mxWindow.prototype.fit = function() {
+    mxUtils.fit(this.div)
+};
+mxWindow.prototype.isResizable = function() {
+    return null != this.resize ? "none" != this.resize.style.display : !1
+};
+mxWindow.prototype.setResizable = function(a) {
+    a ? null == this.resize ? (this.resize = document.createElement("img"), this.resize.style.position = "absolute", this.resize.style.bottom = "2px", this.resize.style.right = "2px", this.resize.setAttribute("src", mxClient.imageBasePath + "/resize.gif"), this.resize.style.cursor = "nw-resize", mxEvent.addGestureListeners(this.resize, mxUtils.bind(this, function(a) {
+            this.activate();
+            var c = mxEvent.getClientX(a),
+                d = mxEvent.getClientY(a),
+                e = this.div.offsetWidth,
+                f = this.div.offsetHeight,
+                g = mxUtils.bind(this,
+                    function(a) {
+                        var b = mxEvent.getClientX(a) - c,
+                            g = mxEvent.getClientY(a) - d;
+                        this.setSize(e + b, f + g);
+                        this.fireEvent(new mxEventObject(mxEvent.RESIZE, "event", a));
+                        mxEvent.consume(a)
+                    }),
+                h = mxUtils.bind(this, function(a) {
+                    mxEvent.removeGestureListeners(document, null, g, h);
+                    this.fireEvent(new mxEventObject(mxEvent.RESIZE_END, "event", a));
+                    mxEvent.consume(a)
+                });
+            mxEvent.addGestureListeners(document, null, g, h);
+            this.fireEvent(new mxEventObject(mxEvent.RESIZE_START, "event", a));
+            mxEvent.consume(a)
+        }), null, null), this.div.appendChild(this.resize)) :
+        this.resize.style.display = "inline" : null != this.resize && (this.resize.style.display = "none")
+};
+mxWindow.prototype.setSize = function(a, b) {
+    a = Math.max(this.minimumSize.width, a);
+    b = Math.max(this.minimumSize.height, b);
+    mxClient.IS_IE || (this.div.style.width = a + "px", this.div.style.height = b + "px");
+    this.table.style.width = a + "px";
+    this.table.style.height = b + "px";
+    mxClient.IS_IE || (this.contentWrapper.style.height = this.div.offsetHeight - this.title.offsetHeight - 2 + "px")
+};
+mxWindow.prototype.setMinimizable = function(a) {
+    this.minimize.style.display = a ? "" : "none"
+};
+mxWindow.prototype.getMinimumSize = function() {
+    return new mxRectangle(0, 0, 0, this.title.offsetHeight)
+};
+mxWindow.prototype.installMinimizeHandler = function() {
+    this.minimize = document.createElement("img");
+    this.minimize.setAttribute("src", this.minimizeImage);
+    this.minimize.setAttribute("align", "right");
+    this.minimize.setAttribute("title", "Minimize");
+    this.minimize.style.cursor = "pointer";
+    this.minimize.style.marginRight = "1px";
+    this.minimize.style.display = "none";
+    this.title.appendChild(this.minimize);
+    var a = !1,
+        b = null,
+        c = null,
+        d = mxUtils.bind(this, function(d) {
+            this.activate();
+            if (a) a = !1, this.minimize.setAttribute("src",
+                this.minimizeImage), this.minimize.setAttribute("title", "Minimize"), this.contentWrapper.style.display = "", this.maximize.style.display = b, mxClient.IS_IE || (this.div.style.height = c), this.table.style.height = c, null != this.resize && (this.resize.style.visibility = ""), this.fireEvent(new mxEventObject(mxEvent.NORMALIZE, "event", d));
+            else {
+                a = !0;
+                this.minimize.setAttribute("src", this.normalizeImage);
+                this.minimize.setAttribute("title", "Normalize");
+                this.contentWrapper.style.display = "none";
+                b = this.maximize.style.display;
+                this.maximize.style.display = "none";
+                c = this.table.style.height;
+                var f = this.getMinimumSize();
+                0 < f.height && (mxClient.IS_IE || (this.div.style.height = f.height + "px"), this.table.style.height = f.height + "px");
+                0 < f.width && (mxClient.IS_IE || (this.div.style.width = f.width + "px"), this.table.style.width = f.width + "px");
+                null != this.resize && (this.resize.style.visibility = "hidden");
+                this.fireEvent(new mxEventObject(mxEvent.MINIMIZE, "event", d))
+            }
+            mxEvent.consume(d)
+        });
+    mxEvent.addListener(this.minimize, "mousedown", d);
+    mxClient.IS_TOUCH &&
+        mxEvent.addListener(this.minimize, "touchstart", d)
+};
+mxWindow.prototype.setMaximizable = function(a) {
+    this.maximize.style.display = a ? "" : "none"
+};
+mxWindow.prototype.installMaximizeHandler = function() {
+    this.maximize = document.createElement("img");
+    this.maximize.setAttribute("src", this.maximizeImage);
+    this.maximize.setAttribute("align", "right");
+    this.maximize.setAttribute("title", "Maximize");
+    this.maximize.style.cursor = "default";
+    this.maximize.style.marginLeft = "1px";
+    this.maximize.style.cursor = "pointer";
+    this.maximize.style.display = "none";
+    this.title.appendChild(this.maximize);
+    var a = !1,
+        b = null,
+        c = null,
+        d = null,
+        e = null,
+        f = mxUtils.bind(this, function(f) {
+            this.activate();
+            if ("none" != this.maximize.style.display) {
+                if (a) {
+                    a = !1;
+                    this.maximize.setAttribute("src", this.maximizeImage);
+                    this.maximize.setAttribute("title", "Maximize");
+                    this.contentWrapper.style.display = "";
+                    this.minimize.style.visibility = "";
+                    this.div.style.left = b + "px";
+                    this.div.style.top = c + "px";
+                    if (!mxClient.IS_IE && (this.div.style.height = d, this.div.style.width = e, h = mxUtils.getCurrentStyle(this.contentWrapper), "auto" == h.overflow || null != this.resize)) this.contentWrapper.style.height = this.div.offsetHeight - this.title.offsetHeight -
+                        2 + "px";
+                    this.table.style.height = d;
+                    this.table.style.width = e;
+                    null != this.resize && (this.resize.style.visibility = "");
+                    this.fireEvent(new mxEventObject(mxEvent.NORMALIZE, "event", f))
+                } else {
+                    a = !0;
+                    this.maximize.setAttribute("src", this.normalizeImage);
+                    this.maximize.setAttribute("title", "Normalize");
+                    this.contentWrapper.style.display = "";
+                    this.minimize.style.visibility = "hidden";
+                    b = parseInt(this.div.style.left);
+                    c = parseInt(this.div.style.top);
+                    d = this.table.style.height;
+                    e = this.table.style.width;
+                    this.div.style.left = "0px";
+                    this.div.style.top = "0px";
+                    mxClient.IS_IE || (this.div.style.height = document.body.clientHeight - 2 + "px", this.div.style.width = document.body.clientWidth - 2 + "px");
+                    this.table.style.width = document.body.clientWidth - 2 + "px";
+                    this.table.style.height = document.body.clientHeight - 2 + "px";
+                    null != this.resize && (this.resize.style.visibility = "hidden");
+                    if (!mxClient.IS_IE) {
+                        var h = mxUtils.getCurrentStyle(this.contentWrapper);
+                        if ("auto" == h.overflow || null != this.resize) this.contentWrapper.style.height = this.div.offsetHeight - this.title.offsetHeight -
+                            2 + "px"
+                    }
+                    this.fireEvent(new mxEventObject(mxEvent.MAXIMIZE, "event", f))
+                }
+                mxEvent.consume(f)
+            }
+        });
+    mxEvent.addGestureListeners(this.maximize, f);
+    mxEvent.addListener(this.title, "dblclick", f)
+};
+mxWindow.prototype.installMoveHandler = function() {
+    this.title.style.cursor = "move";
+    mxEvent.addGestureListeners(this.title, mxUtils.bind(this, function(a) {
+        var b = mxEvent.getClientX(a),
+            c = mxEvent.getClientY(a),
+            d = this.getX(),
+            e = this.getY(),
+            f = mxUtils.bind(this, function(a) {
+                var f = mxEvent.getClientX(a) - b,
+                    g = mxEvent.getClientY(a) - c;
+                this.setLocation(d + f, e + g);
+                this.fireEvent(new mxEventObject(mxEvent.MOVE, "event", a));
+                mxEvent.consume(a)
+            }),
+            g = mxUtils.bind(this, function(a) {
+                mxEvent.removeGestureListeners(document, null, f,
+                    g);
+                this.fireEvent(new mxEventObject(mxEvent.MOVE_END, "event", a));
+                mxEvent.consume(a)
+            });
+        mxEvent.addGestureListeners(document, null, f, g);
+        this.fireEvent(new mxEventObject(mxEvent.MOVE_START, "event", a));
+        mxEvent.consume(a)
+    }))
+};
+mxWindow.prototype.setLocation = function(a, b) {
+    this.div.style.left = a + "px";
+    this.div.style.top = b + "px"
+};
+mxWindow.prototype.getX = function() {
+    return parseInt(this.div.style.left)
+};
+mxWindow.prototype.getY = function() {
+    return parseInt(this.div.style.top)
+};
+mxWindow.prototype.installCloseHandler = function() {
+    this.closeImg = document.createElement("img");
+    this.closeImg.setAttribute("src", this.closeImage);
+    this.closeImg.setAttribute("align", "right");
+    this.closeImg.setAttribute("title", "Close");
+    this.closeImg.style.marginLeft = "2px";
+    this.closeImg.style.cursor = "pointer";
+    this.closeImg.style.display = "none";
+    this.title.insertBefore(this.closeImg, this.title.firstChild);
+    mxEvent.addGestureListeners(this.closeImg, mxUtils.bind(this, function(a) {
+        this.fireEvent(new mxEventObject(mxEvent.CLOSE,
+            "event", a));
+        this.destroyOnClose ? this.destroy() : this.setVisible(!1);
+        mxEvent.consume(a)
+    }))
+};
+mxWindow.prototype.setImage = function(a) {
+    this.image = document.createElement("img");
+    this.image.setAttribute("src", a);
+    this.image.setAttribute("align", "left");
+    this.image.style.marginRight = "4px";
+    this.image.style.marginLeft = "0px";
+    this.image.style.marginTop = "-2px";
+    this.title.insertBefore(this.image, this.title.firstChild)
+};
+mxWindow.prototype.setClosable = function(a) {
+    this.closeImg.style.display = a ? "" : "none"
+};
+mxWindow.prototype.isVisible = function() {
+    return null != this.div ? "hidden" != this.div.style.visibility : !1
+};
+mxWindow.prototype.setVisible = function(a) {
+    null != this.div && this.isVisible() != a && (a ? this.show() : this.hide())
+};
+mxWindow.prototype.show = function() {
+    this.div.style.visibility = "";
+    this.activate();
+    var a = mxUtils.getCurrentStyle(this.contentWrapper);
+    if (!mxClient.IS_IE && ("auto" == a.overflow || null != this.resize)) this.contentWrapper.style.height = this.div.offsetHeight - this.title.offsetHeight - 2 + "px";
+    this.fireEvent(new mxEventObject(mxEvent.SHOW))
+};
+mxWindow.prototype.hide = function() {
+    this.div.style.visibility = "hidden";
+    this.fireEvent(new mxEventObject(mxEvent.HIDE))
+};
+mxWindow.prototype.destroy = function() {
+    this.fireEvent(new mxEventObject(mxEvent.DESTROY));
+    null != this.div && (mxEvent.release(this.div), this.div.parentNode.removeChild(this.div), this.div = null);
+    this.contentWrapper = this.content = this.title = null
+};
+
+function mxForm(a) {
+    this.table = document.createElement("table");
+    this.table.className = a;
+    this.body = document.createElement("tbody");
+    this.table.appendChild(this.body)
+}
+mxForm.prototype.table = null;
+mxForm.prototype.body = !1;
+mxForm.prototype.getTable = function() {
+    return this.table
+};
+mxForm.prototype.addButtons = function(a, b) {
+    var c = document.createElement("tr"),
+        d = document.createElement("td");
+    c.appendChild(d);
+    var d = document.createElement("td"),
+        e = document.createElement("button");
+    mxUtils.write(e, mxResources.get("ok") || "OK");
+    d.appendChild(e);
+    mxEvent.addListener(e, "click", function() {
+        a()
+    });
+    e = document.createElement("button");
+    mxUtils.write(e, mxResources.get("cancel") || "Cancel");
+    d.appendChild(e);
+    mxEvent.addListener(e, "click", function() {
+        b()
+    });
+    c.appendChild(d);
+    this.body.appendChild(c)
+};
+mxForm.prototype.addText = function(a, b) {
+    var c = document.createElement("input");
+    c.setAttribute("type", "text");
+    c.value = b;
+    return this.addField(a, c)
+};
+mxForm.prototype.addCheckbox = function(a, b) {
+    var c = document.createElement("input");
+    c.setAttribute("type", "checkbox");
+    this.addField(a, c);
+    b && (c.checked = !0);
+    return c
+};
+mxForm.prototype.addTextarea = function(a, b, c) {
+    var d = document.createElement("textarea");
+    mxClient.IS_NS && c--;
+    d.setAttribute("rows", c || 2);
+    d.value = b;
+    return this.addField(a, d)
+};
+mxForm.prototype.addCombo = function(a, b, c) {
+    var d = document.createElement("select");
+    null != c && d.setAttribute("size", c);
+    b && d.setAttribute("multiple", "true");
+    return this.addField(a, d)
+};
+mxForm.prototype.addOption = function(a, b, c, d) {
+    var e = document.createElement("option");
+    mxUtils.writeln(e, b);
+    e.setAttribute("value", c);
+    d && e.setAttribute("selected", d);
+    a.appendChild(e)
+};
+mxForm.prototype.addField = function(a, b) {
+    var c = document.createElement("tr"),
+        d = document.createElement("td");
+    mxUtils.write(d, a);
+    c.appendChild(d);
+    d = document.createElement("td");
+    d.appendChild(b);
+    c.appendChild(d);
+    this.body.appendChild(c);
+    return b
+};
+
+function mxImage(a, b, c) {
+    this.src = a;
+    this.width = b;
+    this.height = c
+}
+mxImage.prototype.src = null;
+mxImage.prototype.width = null;
+mxImage.prototype.height = null;
+
+function mxDivResizer(a, b) {
+    if ("div" == a.nodeName.toLowerCase()) {
+        null == b && (b = window);
+        this.div = a;
+        var c = mxUtils.getCurrentStyle(a);
+        null != c && (this.resizeWidth = "auto" == c.width, this.resizeHeight = "auto" == c.height);
+        mxEvent.addListener(b, "resize", mxUtils.bind(this, function(a) {
+            this.handlingResize || (this.handlingResize = !0, this.resize(), this.handlingResize = !1)
+        }));
+        this.resize()
+    }
+}
+mxDivResizer.prototype.resizeWidth = !0;
+mxDivResizer.prototype.resizeHeight = !0;
+mxDivResizer.prototype.handlingResize = !1;
+mxDivResizer.prototype.resize = function() {
+    var a = this.getDocumentWidth(),
+        b = this.getDocumentHeight(),
+        c = parseInt(this.div.style.left),
+        d = parseInt(this.div.style.right),
+        e = parseInt(this.div.style.top),
+        f = parseInt(this.div.style.bottom);
+    this.resizeWidth && (!isNaN(c) && !isNaN(d) && 0 <= c && 0 <= d && 0 < a - d - c) && (this.div.style.width = a - d - c + "px");
+    this.resizeHeight && (!isNaN(e) && !isNaN(f) && 0 <= e && 0 <= f && 0 < b - e - f) && (this.div.style.height = b - e - f + "px")
+};
+mxDivResizer.prototype.getDocumentWidth = function() {
+    return document.body.clientWidth
+};
+mxDivResizer.prototype.getDocumentHeight = function() {
+    return document.body.clientHeight
+};
+
+function mxDragSource(a, b) {
+    this.element = a;
+    this.dropHandler = b;
+    mxEvent.addGestureListeners(a, mxUtils.bind(this, this.mouseDown))
+}
+mxDragSource.prototype.element = null;
+mxDragSource.prototype.dropHandler = null;
+mxDragSource.prototype.dragOffset = null;
+mxDragSource.prototype.dragElement = null;
+mxDragSource.prototype.previewElement = null;
+mxDragSource.prototype.enabled = !0;
+mxDragSource.prototype.currentGraph = null;
+mxDragSource.prototype.currentDropTarget = null;
+mxDragSource.prototype.currentPoint = null;
+mxDragSource.prototype.currentGuide = null;
+mxDragSource.prototype.currentHighlight = null;
+mxDragSource.prototype.autoscroll = !0;
+mxDragSource.prototype.guidesEnabled = !0;
+mxDragSource.prototype.gridEnabled = !0;
+mxDragSource.prototype.highlightDropTargets = !0;
+mxDragSource.prototype.dragElementZIndex = 100;
+mxDragSource.prototype.dragElementOpacity = 70;
+mxDragSource.prototype.isEnabled = function() {
+    return this.enabled
+};
+mxDragSource.prototype.setEnabled = function(a) {
+    this.enabled = a
+};
+mxDragSource.prototype.isGuidesEnabled = function() {
+    return this.guidesEnabled
+};
+mxDragSource.prototype.setGuidesEnabled = function(a) {
+    this.guidesEnabled = a
+};
+mxDragSource.prototype.isGridEnabled = function() {
+    return this.gridEnabled
+};
+mxDragSource.prototype.setGridEnabled = function(a) {
+    this.gridEnabled = a
+};
+mxDragSource.prototype.getGraphForEvent = function(a) {
+    return null
+};
+mxDragSource.prototype.getDropTarget = function(a, b, c) {
+    return a.getCellAt(b, c)
+};
+mxDragSource.prototype.createDragElement = function(a) {
+    return this.element.cloneNode(!0)
+};
+mxDragSource.prototype.createPreviewElement = function(a) {
+    return null
+};
+mxDragSource.prototype.mouseDown = function(a) {
+    this.enabled && (!mxEvent.isConsumed(a) && null == this.mouseMoveHandler) && (this.startDrag(a), this.mouseMoveHandler = mxUtils.bind(this, this.mouseMove), this.mouseUpHandler = mxUtils.bind(this, this.mouseUp), mxEvent.addGestureListeners(document, null, this.mouseMoveHandler, this.mouseUpHandler), mxEvent.consume(a, !0, !1))
+};
+mxDragSource.prototype.startDrag = function(a) {
+    this.dragElement = this.createDragElement(a);
+    this.dragElement.style.position = "absolute";
+    this.dragElement.style.zIndex = this.dragElementZIndex;
+    mxUtils.setOpacity(this.dragElement, this.dragElementOpacity)
+};
+mxDragSource.prototype.stopDrag = function(a) {
+    null != this.dragElement && (null != this.dragElement.parentNode && this.dragElement.parentNode.removeChild(this.dragElement), this.dragElement = null)
+};
+mxDragSource.prototype.graphContainsEvent = function(a, b) {
+    var c = mxEvent.getClientX(b),
+        d = mxEvent.getClientY(b),
+        e = mxUtils.getOffset(a.container),
+        f = mxUtils.getScrollOrigin();
+    return c >= e.x - f.x && d >= e.y - f.y && c <= e.x - f.x + a.container.offsetWidth && d <= e.y - f.y + a.container.offsetHeight
+};
+mxDragSource.prototype.mouseMove = function(a) {
+    var b = this.getGraphForEvent(a);
+    null != b && !this.graphContainsEvent(b, a) && (b = null);
+    b != this.currentGraph && (null != this.currentGraph && this.dragExit(this.currentGraph), this.currentGraph = b, null != this.currentGraph && this.dragEnter(this.currentGraph));
+    null != this.currentGraph && this.dragOver(this.currentGraph, a);
+    if (null != this.dragElement && (null == this.previewElement || "visible" != this.previewElement.style.visibility)) {
+        var b = mxEvent.getClientX(a),
+            c = mxEvent.getClientY(a);
+        null == this.dragElement.parentNode && document.body.appendChild(this.dragElement);
+        this.dragElement.style.visibility = "visible";
+        null != this.dragOffset && (b += this.dragOffset.x, c += this.dragOffset.y);
+        b += document.body.scrollLeft || document.documentElement.scrollLeft;
+        c += document.body.scrollTop || document.documentElement.scrollTop;
+        this.dragElement.style.left = b + "px";
+        this.dragElement.style.top = c + "px"
+    } else null != this.dragElement && (this.dragElement.style.visibility = "hidden");
+    mxEvent.consume(a)
+};
+mxDragSource.prototype.mouseUp = function(a) {
+    if (null != this.currentGraph) {
+        if (null != this.currentPoint && (null == this.previewElement || "hidden" != this.previewElement.style.visibility)) {
+            var b = this.currentGraph.view.scale,
+                c = this.currentGraph.view.translate;
+            this.drop(this.currentGraph, a, this.currentDropTarget, this.currentPoint.x / b - c.x, this.currentPoint.y / b - c.y)
+        }
+        this.dragExit(this.currentGraph)
+    }
+    this.stopDrag(a);
+    mxEvent.removeGestureListeners(document, null, this.mouseMoveHandler, this.mouseUpHandler);
+    this.currentGraph =
+        this.mouseUpHandler = this.mouseMoveHandler = null;
+    mxEvent.consume(a)
+};
+mxDragSource.prototype.dragEnter = function(a) {
+    a.isMouseDown = !0;
+    this.previewElement = this.createPreviewElement(a);
+    this.isGuidesEnabled() && null != this.previewElement && (this.currentGuide = new mxGuide(a, a.graphHandler.getGuideStates()));
+    this.highlightDropTargets && (this.currentHighlight = new mxCellHighlight(a, mxConstants.DROP_TARGET_COLOR))
+};
+mxDragSource.prototype.dragExit = function(a) {
+    this.currentPoint = this.currentDropTarget = null;
+    a.isMouseDown = !1;
+    null != this.previewElement && (null != this.previewElement.parentNode && this.previewElement.parentNode.removeChild(this.previewElement), this.previewElement = null);
+    null != this.currentGuide && (this.currentGuide.destroy(), this.currentGuide = null);
+    null != this.currentHighlight && (this.currentHighlight.destroy(), this.currentHighlight = null)
+};
+mxDragSource.prototype.dragOver = function(a, b) {
+    var c = mxUtils.getOffset(a.container),
+        d = mxUtils.getScrollOrigin(a.container),
+        e = mxEvent.getClientX(b) - c.x + d.x,
+        c = mxEvent.getClientY(b) - c.y + d.y;
+    a.autoScroll && (null == this.autoscroll || this.autoscroll) && a.scrollPointToVisible(e, c, a.autoExtend);
+    null != this.currentHighlight && a.isDropEnabled() && (this.currentDropTarget = this.getDropTarget(a, e, c), d = a.getView().getState(this.currentDropTarget), this.currentHighlight.highlight(d));
+    if (null != this.previewElement) {
+        null == this.previewElement.parentNode &&
+            (a.container.appendChild(this.previewElement), this.previewElement.style.zIndex = "3", this.previewElement.style.position = "absolute");
+        var d = this.isGridEnabled() && a.isGridEnabledEvent(b),
+            f = !0;
+        if (null != this.currentGuide && this.currentGuide.isEnabledForEvent(b)) var f = parseInt(this.previewElement.style.width),
+            g = parseInt(this.previewElement.style.height),
+            f = new mxRectangle(0, 0, f, g),
+            c = new mxPoint(e, c),
+            c = this.currentGuide.move(f, c, d),
+            f = !1,
+            e = c.x,
+            c = c.y;
+        else if (d) var d = a.view.scale,
+            g = a.view.translate,
+            h = a.gridSize /
+            2,
+            e = (a.snap(e / d - g.x - h) + g.x) * d,
+            c = (a.snap(c / d - g.y - h) + g.y) * d;
+        null != this.currentGuide && f && this.currentGuide.hide();
+        null != this.previewOffset && (e += this.previewOffset.x, c += this.previewOffset.y);
+        this.previewElement.style.left = Math.round(e) + "px";
+        this.previewElement.style.top = Math.round(c) + "px";
+        this.previewElement.style.visibility = "visible"
+    }
+    this.currentPoint = new mxPoint(e, c)
+};
+mxDragSource.prototype.drop = function(a, b, c, d, e) {
+    this.dropHandler(a, b, c, d, e);
+    a.container.focus()
+};
+
+function mxToolbar(a) {
+    this.container = a
+}
+mxToolbar.prototype = new mxEventSource;
+mxToolbar.prototype.constructor = mxToolbar;
+mxToolbar.prototype.container = null;
+mxToolbar.prototype.enabled = !0;
+mxToolbar.prototype.noReset = !1;
+mxToolbar.prototype.updateDefaultMode = !0;
+mxToolbar.prototype.addItem = function(a, b, c, d, e, f) {
+    var g = document.createElement(null != b ? "img" : "button"),
+        h = e || (null != f ? "mxToolbarMode" : "mxToolbarItem");
+    g.className = h;
+    g.setAttribute("src", b);
+    null != a && (null != b ? g.setAttribute("title", a) : mxUtils.write(g, a));
+    this.container.appendChild(g);
+    null != c && (mxEvent.addListener(g, "click", c), mxClient.IS_TOUCH && mxEvent.addListener(g, "touchend", c));
+    a = mxUtils.bind(this, function(a) {
+        null != d ? g.setAttribute("src", b) : g.style.backgroundColor = ""
+    });
+    mxEvent.addGestureListeners(g,
+        mxUtils.bind(this, function(a) {
+            null != d ? g.setAttribute("src", d) : g.style.backgroundColor = "gray";
+            if (null != f) {
+                null == this.menu && (this.menu = new mxPopupMenu, this.menu.init());
+                var b = this.currentImg;
+                this.menu.isMenuShowing() && this.menu.hideMenu();
+                b != g && (this.currentImg = g, this.menu.factoryMethod = f, b = new mxPoint(g.offsetLeft, g.offsetTop + g.offsetHeight), this.menu.popup(b.x, b.y, null, a), this.menu.isMenuShowing() && (g.className = h + "Selected", this.menu.hideMenu = function() {
+                    mxPopupMenu.prototype.hideMenu.apply(this);
+                    g.className = h;
+                    this.currentImg = null
+                }))
+            }
+        }), null, a);
+    mxEvent.addListener(g, "mouseout", a);
+    return g
+};
+mxToolbar.prototype.addCombo = function(a) {
+    var b = document.createElement("div");
+    b.style.display = "inline";
+    b.className = "mxToolbarComboContainer";
+    var c = document.createElement("select");
+    c.className = a || "mxToolbarCombo";
+    b.appendChild(c);
+    this.container.appendChild(b);
+    return c
+};
+mxToolbar.prototype.addActionCombo = function(a, b) {
+    var c = document.createElement("select");
+    c.className = b || "mxToolbarCombo";
+    this.addOption(c, a, null);
+    mxEvent.addListener(c, "change", function(a) {
+        var b = c.options[c.selectedIndex];
+        c.selectedIndex = 0;
+        null != b.funct && b.funct(a)
+    });
+    this.container.appendChild(c);
+    return c
+};
+mxToolbar.prototype.addOption = function(a, b, c) {
+    var d = document.createElement("option");
+    mxUtils.writeln(d, b);
+    "function" == typeof c ? d.funct = c : d.setAttribute("value", c);
+    a.appendChild(d);
+    return d
+};
+mxToolbar.prototype.addSwitchMode = function(a, b, c, d, e) {
+    var f = document.createElement("img");
+    f.initialClassName = e || "mxToolbarMode";
+    f.className = f.initialClassName;
+    f.setAttribute("src", b);
+    f.altIcon = d;
+    null != a && f.setAttribute("title", a);
+    mxEvent.addListener(f, "click", mxUtils.bind(this, function(a) {
+        a = this.selectedMode.altIcon;
+        null != a ? (this.selectedMode.altIcon = this.selectedMode.getAttribute("src"), this.selectedMode.setAttribute("src", a)) : this.selectedMode.className = this.selectedMode.initialClassName;
+        this.updateDefaultMode &&
+            (this.defaultMode = f);
+        this.selectedMode = f;
+        a = f.altIcon;
+        null != a ? (f.altIcon = f.getAttribute("src"), f.setAttribute("src", a)) : f.className = f.initialClassName + "Selected";
+        this.fireEvent(new mxEventObject(mxEvent.SELECT));
+        c()
+    }));
+    this.container.appendChild(f);
+    null == this.defaultMode && (this.defaultMode = f, this.selectMode(f), c());
+    return f
+};
+mxToolbar.prototype.addMode = function(a, b, c, d, e, f) {
+    f = null != f ? f : !0;
+    var g = document.createElement(null != b ? "img" : "button");
+    g.initialClassName = e || "mxToolbarMode";
+    g.className = g.initialClassName;
+    g.setAttribute("src", b);
+    g.altIcon = d;
+    null != a && g.setAttribute("title", a);
+    this.enabled && f && (mxEvent.addListener(g, "click", mxUtils.bind(this, function(a) {
+            this.selectMode(g, c);
+            this.noReset = !1
+        })), mxEvent.addListener(g, "dblclick", mxUtils.bind(this, function(a) {
+            this.selectMode(g, c);
+            this.noReset = !0
+        })), null == this.defaultMode &&
+        (this.defaultMode = g, this.defaultFunction = c, this.selectMode(g, c)));
+    this.container.appendChild(g);
+    return g
+};
+mxToolbar.prototype.selectMode = function(a, b) {
+    if (this.selectedMode != a) {
+        if (null != this.selectedMode) {
+            var c = this.selectedMode.altIcon;
+            null != c ? (this.selectedMode.altIcon = this.selectedMode.getAttribute("src"), this.selectedMode.setAttribute("src", c)) : this.selectedMode.className = this.selectedMode.initialClassName
+        }
+        this.selectedMode = a;
+        c = this.selectedMode.altIcon;
+        null != c ? (this.selectedMode.altIcon = this.selectedMode.getAttribute("src"), this.selectedMode.setAttribute("src", c)) : this.selectedMode.className = this.selectedMode.initialClassName +
+            "Selected";
+        this.fireEvent(new mxEventObject(mxEvent.SELECT, "function", b))
+    }
+};
+mxToolbar.prototype.resetMode = function(a) {
+    (a || !this.noReset) && this.selectedMode != this.defaultMode && this.selectMode(this.defaultMode, this.defaultFunction)
+};
+mxToolbar.prototype.addSeparator = function(a) {
+    return this.addItem(null, a, null)
+};
+mxToolbar.prototype.addBreak = function() {
+    mxUtils.br(this.container)
+};
+mxToolbar.prototype.addLine = function() {
+    var a = document.createElement("hr");
+    a.style.marginRight = "6px";
+    a.setAttribute("size", "1");
+    this.container.appendChild(a)
+};
+mxToolbar.prototype.destroy = function() {
+    mxEvent.release(this.container);
+    this.selectedMode = this.defaultFunction = this.defaultMode = this.container = null;
+    null != this.menu && this.menu.destroy()
+};
+
+function mxSession(a, b, c, d) {
+    this.model = a;
+    this.urlInit = b;
+    this.urlPoll = c;
+    this.urlNotify = d;
+    null != a && (this.codec = new mxCodec, this.codec.lookup = function(b) {
+        return a.getCell(b)
+    });
+    a.addListener(mxEvent.NOTIFY, mxUtils.bind(this, function(a, b) {
+        var c = b.getProperty("edit");
+        (null != c && this.debug || this.connected && !this.suspended) && this.notify("\x3cedit\x3e" + this.encodeChanges(c.changes, c.undone) + "\x3c/edit\x3e")
+    }))
+}
+mxSession.prototype = new mxEventSource;
+mxSession.prototype.constructor = mxSession;
+mxSession.prototype.model = null;
+mxSession.prototype.urlInit = null;
+mxSession.prototype.urlPoll = null;
+mxSession.prototype.urlNotify = null;
+mxSession.prototype.codec = null;
+mxSession.prototype.linefeed = "\x26#xa;";
+mxSession.prototype.escapePostData = !0;
+mxSession.prototype.significantRemoteChanges = !0;
+mxSession.prototype.sent = 0;
+mxSession.prototype.received = 0;
+mxSession.prototype.debug = !1;
+mxSession.prototype.connected = !1;
+mxSession.prototype.suspended = !1;
+mxSession.prototype.polling = !1;
+mxSession.prototype.start = function() {
+    this.debug ? (this.connected = !0, this.fireEvent(new mxEventObject(mxEvent.CONNECT))) : this.connected || this.get(this.urlInit, mxUtils.bind(this, function(a) {
+        this.connected = !0;
+        this.fireEvent(new mxEventObject(mxEvent.CONNECT));
+        this.poll()
+    }))
+};
+mxSession.prototype.suspend = function() {
+    this.connected && !this.suspended && (this.suspended = !0, this.fireEvent(new mxEventObject(mxEvent.SUSPEND)))
+};
+mxSession.prototype.resume = function(a, b, c) {
+    this.connected && this.suspended && (this.suspended = !1, this.fireEvent(new mxEventObject(mxEvent.RESUME)), this.polling || this.poll())
+};
+mxSession.prototype.stop = function(a) {
+    this.connected && (this.connected = !1);
+    this.fireEvent(new mxEventObject(mxEvent.DISCONNECT, "reason", a))
+};
+mxSession.prototype.poll = function() {
+    this.connected && !this.suspended && null != this.urlPoll ? (this.polling = !0, this.get(this.urlPoll, mxUtils.bind(this, function() {
+        this.poll()
+    }))) : this.polling = !1
+};
+mxSession.prototype.notify = function(a, b, c) {
+    null != a && 0 < a.length && (null != this.urlNotify && (this.debug ? (mxLog.show(), mxLog.debug("mxSession.notify: " + this.urlNotify + " xml\x3d" + a)) : (a = "\x3cmessage\x3e\x3cdelta\x3e" + a + "\x3c/delta\x3e\x3c/message\x3e", this.escapePostData && (a = encodeURIComponent(a)), mxUtils.post(this.urlNotify, "xml\x3d" + a, b, c))), this.sent += a.length, this.fireEvent(new mxEventObject(mxEvent.NOTIFY, "url", this.urlNotify, "xml", a)))
+};
+mxSession.prototype.get = function(a, b, c) {
+    if ("undefined" != typeof mxUtils) {
+        var d = mxUtils.bind(this, function(a) {
+            null != c ? c(a) : this.stop(a)
+        });
+        mxUtils.get(a, mxUtils.bind(this, function(c) {
+                if ("undefined" != typeof mxUtils)
+                    if (c.isReady() && 404 != c.getStatus()) {
+                        if (this.received += c.getText().length, this.fireEvent(new mxEventObject(mxEvent.GET, "url", a, "request", c)), this.isValidResponse(c)) {
+                            if (0 < c.getText().length) {
+                                var f = c.getDocumentElement();
+                                null == f ? d("Invalid response: " + c.getText()) : this.receive(f)
+                            }
+                            null != b && b(c)
+                        }
+                    } else d("Response not ready")
+            }),
+            function(a) {
+                d("Transmission error")
+            })
+    }
+};
+mxSession.prototype.isValidResponse = function(a) {
+    return 0 > a.getText().indexOf("\x3c?php")
+};
+mxSession.prototype.encodeChanges = function(a, b) {
+    for (var c = "", d = b ? -1 : 1, e = b ? a.length - 1 : 0; 0 <= e && e < a.length; e += d) var f = this.codec.encode(a[e]),
+        c = c + mxUtils.getXml(f, this.linefeed);
+    return c
+};
+mxSession.prototype.receive = function(a) {
+    if (null != a && a.nodeType == mxConstants.NODETYPE_ELEMENT) {
+        var b = a.getAttribute("namespace");
+        null != b && (this.model.prefix = b + "-");
+        for (b = a.firstChild; null != b;) {
+            var c = b.nodeName.toLowerCase();
+            "state" == c ? this.processState(b) : "delta" == c && this.processDelta(b);
+            b = b.nextSibling
+        }
+        this.fireEvent(new mxEventObject(mxEvent.RECEIVE, "node", a))
+    }
+};
+mxSession.prototype.processState = function(a) {
+    (new mxCodec(a.ownerDocument)).decode(a.firstChild, this.model)
+};
+mxSession.prototype.processDelta = function(a) {
+    for (a = a.firstChild; null != a;) "edit" == a.nodeName && this.processEdit(a), a = a.nextSibling
+};
+mxSession.prototype.processEdit = function(a) {
+    a = this.decodeChanges(a);
+    if (0 < a.length) {
+        var b = this.createUndoableEdit(a);
+        this.model.fireEvent(new mxEventObject(mxEvent.CHANGE, "edit", b, "changes", a));
+        this.model.fireEvent(new mxEventObject(mxEvent.UNDO, "edit", b));
+        this.fireEvent(new mxEventObject(mxEvent.FIRED, "edit", b))
+    }
+};
+mxSession.prototype.createUndoableEdit = function(a) {
+    var b = new mxUndoableEdit(this.model, this.significantRemoteChanges);
+    b.changes = a;
+    b.notify = function() {
+        b.source.fireEvent(new mxEventObject(mxEvent.CHANGE, "edit", b, "changes", b.changes));
+        b.source.fireEvent(new mxEventObject(mxEvent.NOTIFY, "edit", b, "changes", b.changes))
+    };
+    return b
+};
+mxSession.prototype.decodeChanges = function(a) {
+    this.codec.document = a.ownerDocument;
+    var b = [];
+    for (a = a.firstChild; null != a;) {
+        var c = this.decodeChange(a);
+        null != c && b.push(c);
+        a = a.nextSibling
+    }
+    return b
+};
+mxSession.prototype.decodeChange = function(a) {
+    var b = null;
+    a.nodeType == mxConstants.NODETYPE_ELEMENT && (b = "mxRootChange" == a.nodeName ? (new mxCodec(a.ownerDocument)).decode(a) : this.codec.decode(a), null != b && (b.model = this.model, b.execute(), "mxChildChange" == a.nodeName && null == b.parent && this.cellRemoved(b.child)));
+    return b
+};
+mxSession.prototype.cellRemoved = function(a, b) {
+    this.codec.putObject(a.getId(), a);
+    for (var c = this.model.getChildCount(a), d = 0; d < c; d++) this.cellRemoved(this.model.getChildAt(a, d))
+};
+
+function mxUndoableEdit(a, b) {
+    this.source = a;
+    this.changes = [];
+    this.significant = null != b ? b : !0
+}
+mxUndoableEdit.prototype.source = null;
+mxUndoableEdit.prototype.changes = null;
+mxUndoableEdit.prototype.significant = null;
+mxUndoableEdit.prototype.undone = !1;
+mxUndoableEdit.prototype.redone = !1;
+mxUndoableEdit.prototype.isEmpty = function() {
+    return 0 == this.changes.length
+};
+mxUndoableEdit.prototype.isSignificant = function() {
+    return this.significant
+};
+mxUndoableEdit.prototype.add = function(a) {
+    this.changes.push(a)
+};
+mxUndoableEdit.prototype.notify = function() {};
+mxUndoableEdit.prototype.die = function() {};
+mxUndoableEdit.prototype.undo = function() {
+    if (!this.undone) {
+        this.source.fireEvent(new mxEventObject(mxEvent.START_EDIT));
+        for (var a = this.changes.length - 1; 0 <= a; a--) {
+            var b = this.changes[a];
+            null != b.execute ? b.execute() : null != b.undo && b.undo();
+            this.source.fireEvent(new mxEventObject(mxEvent.EXECUTED, "change", b))
+        }
+        this.undone = !0;
+        this.redone = !1;
+        this.source.fireEvent(new mxEventObject(mxEvent.END_EDIT))
+    }
+    this.notify()
+};
+mxUndoableEdit.prototype.redo = function() {
+    if (!this.redone) {
+        this.source.fireEvent(new mxEventObject(mxEvent.START_EDIT));
+        for (var a = this.changes.length, b = 0; b < a; b++) {
+            var c = this.changes[b];
+            null != c.execute ? c.execute() : null != c.redo && c.redo();
+            this.source.fireEvent(new mxEventObject(mxEvent.EXECUTED, "change", c))
+        }
+        this.undone = !1;
+        this.redone = !0;
+        this.source.fireEvent(new mxEventObject(mxEvent.END_EDIT))
+    }
+    this.notify()
+};
+
+function mxUndoManager(a) {
+    this.size = null != a ? a : 100;
+    this.clear()
+}
+mxUndoManager.prototype = new mxEventSource;
+mxUndoManager.prototype.constructor = mxUndoManager;
+mxUndoManager.prototype.size = null;
+mxUndoManager.prototype.history = null;
+mxUndoManager.prototype.indexOfNextAdd = 0;
+mxUndoManager.prototype.isEmpty = function() {
+    return 0 == this.history.length
+};
+mxUndoManager.prototype.clear = function() {
+    this.history = [];
+    this.indexOfNextAdd = 0;
+    this.fireEvent(new mxEventObject(mxEvent.CLEAR))
+};
+mxUndoManager.prototype.canUndo = function() {
+    return 0 < this.indexOfNextAdd
+};
+mxUndoManager.prototype.undo = function() {
+    for (; 0 < this.indexOfNextAdd;) {
+        var a = this.history[--this.indexOfNextAdd];
+        a.undo();
+        if (a.isSignificant()) {
+            this.fireEvent(new mxEventObject(mxEvent.UNDO, "edit", a));
+            break
+        }
+    }
+};
+mxUndoManager.prototype.canRedo = function() {
+    return this.indexOfNextAdd < this.history.length
+};
+mxUndoManager.prototype.redo = function() {
+    for (var a = this.history.length; this.indexOfNextAdd < a;) {
+        var b = this.history[this.indexOfNextAdd++];
+        b.redo();
+        if (b.isSignificant()) {
+            this.fireEvent(new mxEventObject(mxEvent.REDO, "edit", b));
+            break
+        }
+    }
+};
+mxUndoManager.prototype.undoableEditHappened = function(a) {
+    this.trim();
+    0 < this.size && this.size == this.history.length && this.history.shift();
+    this.history.push(a);
+    this.indexOfNextAdd = this.history.length;
+    this.fireEvent(new mxEventObject(mxEvent.ADD, "edit", a))
+};
+mxUndoManager.prototype.trim = function() {
+    if (this.history.length > this.indexOfNextAdd)
+        for (var a = this.history.splice(this.indexOfNextAdd, this.history.length - this.indexOfNextAdd), b = 0; b < a.length; b++) a[b].die()
+};
+var mxUrlConverter = function(a) {
+    var b = !0,
+        c = null,
+        d = null;
+    return {
+        isEnabled: function() {
+            return b
+        },
+        setEnabled: function(a) {
+            b = a
+        },
+        getBaseUrl: function() {
+            return c
+        },
+        setBaseUrl: function(a) {
+            c = a
+        },
+        getBaseDomain: function() {
+            return c
+        },
+        setBaseDomain: function(a) {
+            c = a
+        },
+        isRelativeUrl: function(a) {
+            return "http://" != a.substring(0, 7) && "https://" != a.substring(0, 8) && "data:image" != a.substring(0, 10)
+        },
+        convert: function(a) {
+            if (b && this.isRelativeUrl(a)) {
+                if (null == c) {
+                    d = location.protocol + "//" + location.host;
+                    c = d + location.pathname;
+                    var f = c.lastIndexOf("/");
+                    0 < f && (c = c.substring(0, f + 1))
+                }
+                a = "/" == a.charAt(0) ? d + a : c + a
+            }
+            return a
+        }
+    }
+};
+
+function mxPanningManager(a) {
+    this.thread = null;
+    this.active = !1;
+    this.dy = this.dx = this.t0y = this.t0x = this.tdy = this.tdx = 0;
+    this.scrollbars = !1;
+    this.scrollTop = this.scrollLeft = 0;
+    this.mouseListener = {
+        mouseDown: function(a, b) {},
+        mouseMove: function(a, b) {},
+        mouseUp: mxUtils.bind(this, function(a, b) {
+            this.active && this.stop()
+        })
+    };
+    a.addMouseListener(this.mouseListener);
+    mxEvent.addListener(document, "mouseup", mxUtils.bind(this, function() {
+        this.active && this.stop()
+    }));
+    var b = mxUtils.bind(this, function() {
+        this.scrollbars = mxUtils.hasScrollbars(a.container);
+        this.scrollLeft = a.container.scrollLeft;
+        this.scrollTop = a.container.scrollTop;
+        return window.setInterval(mxUtils.bind(this, function() {
+            this.tdx -= this.dx;
+            this.tdy -= this.dy;
+            if (this.scrollbars) {
+                var b = -a.container.scrollLeft - Math.ceil(this.dx),
+                    d = -a.container.scrollTop - Math.ceil(this.dy);
+                a.panGraph(b, d);
+                a.panDx = this.scrollLeft - a.container.scrollLeft;
+                a.panDy = this.scrollTop - a.container.scrollTop;
+                a.fireEvent(new mxEventObject(mxEvent.PAN))
+            } else a.panGraph(this.getDx(), this.getDy())
+        }), this.delay)
+    });
+    this.isActive =
+        function() {
+            return active
+        };
+    this.getDx = function() {
+        return Math.round(this.tdx)
+    };
+    this.getDy = function() {
+        return Math.round(this.tdy)
+    };
+    this.start = function() {
+        this.t0x = a.view.translate.x;
+        this.t0y = a.view.translate.y;
+        this.active = !0
+    };
+    this.panTo = function(c, d, e, f) {
+        this.active || this.start();
+        this.scrollLeft = a.container.scrollLeft;
+        this.scrollTop = a.container.scrollTop;
+        f = null != f ? f : 0;
+        var g = a.container;
+        this.dx = c + (null != e ? e : 0) - g.scrollLeft - g.clientWidth;
+        0 > this.dx && Math.abs(this.dx) < this.border ? this.dx = this.border + this.dx :
+            this.dx = this.handleMouseOut ? Math.max(this.dx, 0) : 0;
+        0 == this.dx && (this.dx = c - g.scrollLeft, this.dx = 0 < this.dx && this.dx < this.border ? this.dx - this.border : this.handleMouseOut ? Math.min(0, this.dx) : 0);
+        this.dy = d + f - g.scrollTop - g.clientHeight;
+        0 > this.dy && Math.abs(this.dy) < this.border ? this.dy = this.border + this.dy : this.dy = this.handleMouseOut ? Math.max(this.dy, 0) : 0;
+        0 == this.dy && (this.dy = d - g.scrollTop, this.dy = 0 < this.dy && this.dy < this.border ? this.dy - this.border : this.handleMouseOut ? Math.min(0, this.dy) : 0);
+        0 != this.dx || 0 != this.dy ?
+            (this.dx *= this.damper, this.dy *= this.damper, null == this.thread && (this.thread = b())) : null != this.thread && (window.clearInterval(this.thread), this.thread = null)
+    };
+    this.stop = function() {
+        if (this.active)
+            if (this.active = !1, null != this.thread && (window.clearInterval(this.thread), this.thread = null), this.tdy = this.tdx = 0, this.scrollbars) a.panDx = 0, a.panDy = 0, a.fireEvent(new mxEventObject(mxEvent.PAN));
+            else {
+                var b = a.panDx,
+                    d = a.panDy;
+                if (0 != b || 0 != d) a.panGraph(0, 0), a.view.setTranslate(this.t0x + b / a.view.scale, this.t0y + d / a.view.scale)
+            }
+    };
+    this.destroy = function() {
+        a.removeMouseListener(this.mouseListener)
+    }
+}
+mxPanningManager.prototype.damper = 1 / 6;
+mxPanningManager.prototype.delay = 10;
+mxPanningManager.prototype.handleMouseOut = !0;
+mxPanningManager.prototype.border = 0;
+
+function mxPopupMenu(a) {
+    this.factoryMethod = a;
+    null != a && this.init()
+}
+mxPopupMenu.prototype = new mxEventSource;
+mxPopupMenu.prototype.constructor = mxPopupMenu;
+mxPopupMenu.prototype.submenuImage = mxClient.imageBasePath + "/submenu.gif";
+mxPopupMenu.prototype.zIndex = 10006;
+mxPopupMenu.prototype.factoryMethod = null;
+mxPopupMenu.prototype.useLeftButtonForPopup = !1;
+mxPopupMenu.prototype.enabled = !0;
+mxPopupMenu.prototype.itemCount = 0;
+mxPopupMenu.prototype.autoExpand = !1;
+mxPopupMenu.prototype.smartSeparators = !1;
+mxPopupMenu.prototype.labels = !0;
+mxPopupMenu.prototype.init = function() {
+    this.table = document.createElement("table");
+    this.table.className = "mxPopupMenu";
+    this.tbody = document.createElement("tbody");
+    this.table.appendChild(this.tbody);
+    this.div = document.createElement("div");
+    this.div.className = "mxPopupMenu";
+    this.div.style.display = "inline";
+    this.div.style.zIndex = this.zIndex;
+    this.div.appendChild(this.table);
+    mxEvent.disableContextMenu(this.div)
+};
+mxPopupMenu.prototype.isEnabled = function() {
+    return this.enabled
+};
+mxPopupMenu.prototype.setEnabled = function(a) {
+    this.enabled = a
+};
+mxPopupMenu.prototype.isPopupTrigger = function(a) {
+    return a.isPopupTrigger() || this.useLeftButtonForPopup && mxEvent.isLeftMouseButton(a.getEvent())
+};
+mxPopupMenu.prototype.addItem = function(a, b, c, d, e, f) {
+    d = d || this;
+    this.itemCount++;
+    d.willAddSeparator && (d.containsItems && this.addSeparator(d, !0), d.willAddSeparator = !1);
+    d.containsItems = !0;
+    var g = document.createElement("tr");
+    g.className = "mxPopupMenuItem";
+    var h = document.createElement("td");
+    h.className = "mxPopupMenuIcon";
+    null != b ? (e = document.createElement("img"), e.src = b, h.appendChild(e)) : null != e && (b = document.createElement("div"), b.className = e, h.appendChild(b));
+    g.appendChild(h);
+    this.labels && (h = document.createElement("td"),
+        h.className = "mxPopupMenuItem" + (null != f && !f ? " disabled" : ""), mxUtils.write(h, a), h.align = "left", g.appendChild(h), a = document.createElement("td"), a.className = "mxPopupMenuItem" + (null != f && !f ? " disabled" : ""), a.style.paddingRight = "6px", a.style.textAlign = "right", g.appendChild(a), null == d.div && this.createSubmenu(d));
+    d.tbody.appendChild(g);
+    if (null == f || f) mxEvent.addGestureListeners(g, mxUtils.bind(this, function(a) {
+        this.eventReceiver = g;
+        d.activeRow != g && d.activeRow != d && (null != d.activeRow && null != d.activeRow.div.parentNode &&
+            this.hideSubmenu(d), null != g.div && (this.showSubmenu(d, g), d.activeRow = g));
+        mxEvent.consume(a)
+    }), mxUtils.bind(this, function(a) {
+        d.activeRow != g && d.activeRow != d && (null != d.activeRow && null != d.activeRow.div.parentNode && this.hideSubmenu(d), this.autoExpand && null != g.div && (this.showSubmenu(d, g), d.activeRow = g));
+        g.className = "mxPopupMenuItemHover"
+    }), mxUtils.bind(this, function(a) {
+        this.eventReceiver == g && (d.activeRow != g && this.hideMenu(), null != c && c(a));
+        this.eventReceiver = null;
+        mxEvent.consume(a)
+    })), mxEvent.addListener(g,
+        "mouseout", mxUtils.bind(this, function(a) {
+            g.className = "mxPopupMenuItem"
+        }));
+    return g
+};
+mxPopupMenu.prototype.createSubmenu = function(a) {
+    a.table = document.createElement("table");
+    a.table.className = "mxPopupMenu";
+    a.tbody = document.createElement("tbody");
+    a.table.appendChild(a.tbody);
+    a.div = document.createElement("div");
+    a.div.className = "mxPopupMenu";
+    a.div.style.position = "absolute";
+    a.div.style.display = "inline";
+    a.div.style.zIndex = this.zIndex;
+    a.div.appendChild(a.table);
+    var b = document.createElement("img");
+    b.setAttribute("src", this.submenuImage);
+    td = a.firstChild.nextSibling.nextSibling;
+    td.appendChild(b)
+};
+mxPopupMenu.prototype.showSubmenu = function(a, b) {
+    if (null != b.div) {
+        b.div.style.left = a.div.offsetLeft + b.offsetLeft + b.offsetWidth - 1 + "px";
+        b.div.style.top = a.div.offsetTop + b.offsetTop + "px";
+        document.body.appendChild(b.div);
+        var c = parseInt(b.div.offsetLeft),
+            d = parseInt(b.div.offsetWidth),
+            e = document.body,
+            f = document.documentElement;
+        if (c + d > (e.scrollLeft || f.scrollLeft) + (e.clientWidth || f.clientWidth)) b.div.style.left = a.div.offsetLeft - d + (mxClient.IS_IE ? 6 : -6) + "px";
+        mxUtils.fit(b.div)
+    }
+};
+mxPopupMenu.prototype.addSeparator = function(a, b) {
+    a = a || this;
+    if (this.smartSeparators && !b) a.willAddSeparator = !0;
+    else if (null != a.tbody) {
+        a.willAddSeparator = !1;
+        var c = document.createElement("tr"),
+            d = document.createElement("td");
+        d.className = "mxPopupMenuIcon";
+        d.style.padding = "0 0 0 0px";
+        c.appendChild(d);
+        d = document.createElement("td");
+        d.style.padding = "0 0 0 0px";
+        d.setAttribute("colSpan", "2");
+        var e = document.createElement("hr");
+        e.setAttribute("size", "1");
+        d.appendChild(e);
+        c.appendChild(d);
+        a.tbody.appendChild(c)
+    }
+};
+mxPopupMenu.prototype.popup = function(a, b, c, d) {
+    if (null != this.div && null != this.tbody && null != this.factoryMethod) {
+        this.div.style.left = a + "px";
+        for (this.div.style.top = b + "px"; null != this.tbody.firstChild;) mxEvent.release(this.tbody.firstChild), this.tbody.removeChild(this.tbody.firstChild);
+        this.itemCount = 0;
+        this.factoryMethod(this, c, d);
+        0 < this.itemCount && (this.showMenu(), this.fireEvent(new mxEventObject(mxEvent.SHOW)))
+    }
+};
+mxPopupMenu.prototype.isMenuShowing = function() {
+    return null != this.div && this.div.parentNode == document.body
+};
+mxPopupMenu.prototype.showMenu = function() {
+    9 <= document.documentMode && (this.div.style.filter = "none");
+    document.body.appendChild(this.div);
+    mxUtils.fit(this.div)
+};
+mxPopupMenu.prototype.hideMenu = function() {
+    null != this.div && (null != this.div.parentNode && this.div.parentNode.removeChild(this.div), this.hideSubmenu(this), this.containsItems = !1)
+};
+mxPopupMenu.prototype.hideSubmenu = function(a) {
+    null != a.activeRow && (this.hideSubmenu(a.activeRow), null != a.activeRow.div.parentNode && a.activeRow.div.parentNode.removeChild(a.activeRow.div), a.activeRow = null)
+};
+mxPopupMenu.prototype.destroy = function() {
+    null != this.div && (mxEvent.release(this.div), null != this.div.parentNode && this.div.parentNode.removeChild(this.div), this.div = null)
+};
+
+function mxAutoSaveManager(a) {
+    this.changeHandler = mxUtils.bind(this, function(a, c) {
+        this.isEnabled() && this.graphModelChanged(c.getProperty("edit").changes)
+    });
+    this.setGraph(a)
+}
+mxAutoSaveManager.prototype = new mxEventSource;
+mxAutoSaveManager.prototype.constructor = mxAutoSaveManager;
+mxAutoSaveManager.prototype.graph = null;
+mxAutoSaveManager.prototype.autoSaveDelay = 10;
+mxAutoSaveManager.prototype.autoSaveThrottle = 2;
+mxAutoSaveManager.prototype.autoSaveThreshold = 5;
+mxAutoSaveManager.prototype.ignoredChanges = 0;
+mxAutoSaveManager.prototype.lastSnapshot = 0;
+mxAutoSaveManager.prototype.enabled = !0;
+mxAutoSaveManager.prototype.changeHandler = null;
+mxAutoSaveManager.prototype.isEnabled = function() {
+    return this.enabled
+};
+mxAutoSaveManager.prototype.setEnabled = function(a) {
+    this.enabled = a
+};
+mxAutoSaveManager.prototype.setGraph = function(a) {
+    null != this.graph && this.graph.getModel().removeListener(this.changeHandler);
+    this.graph = a;
+    null != this.graph && this.graph.getModel().addListener(mxEvent.CHANGE, this.changeHandler)
+};
+mxAutoSaveManager.prototype.save = function() {};
+mxAutoSaveManager.prototype.graphModelChanged = function(a) {
+    a = ((new Date).getTime() - this.lastSnapshot) / 1E3;
+    a > this.autoSaveDelay || this.ignoredChanges >= this.autoSaveThreshold && a > this.autoSaveThrottle ? (this.save(), this.reset()) : this.ignoredChanges++
+};
+mxAutoSaveManager.prototype.reset = function() {
+    this.lastSnapshot = (new Date).getTime();
+    this.ignoredChanges = 0
+};
+mxAutoSaveManager.prototype.destroy = function() {
+    this.setGraph(null)
+};
+
+function mxAnimation(a) {
+    this.delay = null != a ? a : 20
+}
+mxAnimation.prototype = new mxEventSource;
+mxAnimation.prototype.constructor = mxAnimation;
+mxAnimation.prototype.delay = null;
+mxAnimation.prototype.thread = null;
+mxAnimation.prototype.startAnimation = function() {
+    null == this.thread && (this.thread = window.setInterval(mxUtils.bind(this, this.updateAnimation), this.delay))
+};
+mxAnimation.prototype.updateAnimation = function() {
+    this.fireEvent(new mxEventObject(mxEvent.EXECUTE))
+};
+mxAnimation.prototype.stopAnimation = function() {
+    null != this.thread && (window.clearInterval(this.thread), this.thread = null, this.fireEvent(new mxEventObject(mxEvent.DONE)))
+};
+
+function mxMorphing(a, b, c, d) {
+    mxAnimation.call(this, d);
+    this.graph = a;
+    this.steps = null != b ? b : 6;
+    this.ease = null != c ? c : 1.5
+}
+mxMorphing.prototype = new mxAnimation;
+mxMorphing.prototype.constructor = mxMorphing;
+mxMorphing.prototype.graph = null;
+mxMorphing.prototype.steps = null;
+mxMorphing.prototype.step = 0;
+mxMorphing.prototype.ease = null;
+mxMorphing.prototype.cells = null;
+mxMorphing.prototype.updateAnimation = function() {
+    var a = new mxCellStatePreview(this.graph);
+    if (null != this.cells)
+        for (var b = 0; b < this.cells.length; b++) this.animateCell(cells[b], a, !1);
+    else this.animateCell(this.graph.getModel().getRoot(), a, !0);
+    this.show(a);
+    (a.isEmpty() || this.step++ >= this.steps) && this.stopAnimation()
+};
+mxMorphing.prototype.show = function(a) {
+    a.show()
+};
+mxMorphing.prototype.animateCell = function(a, b, c) {
+    var d = this.graph.getView().getState(a),
+        e = null;
+    if (null != d && (e = this.getDelta(d), this.graph.getModel().isVertex(a) && (0 != e.x || 0 != e.y))) {
+        var f = this.graph.view.getTranslate(),
+            g = this.graph.view.getScale();
+        e.x += f.x * g;
+        e.y += f.y * g;
+        b.moveState(d, -e.x / this.ease, -e.y / this.ease)
+    }
+    if (c && !this.stopRecursion(d, e)) {
+        d = this.graph.getModel().getChildCount(a);
+        for (e = 0; e < d; e++) this.animateCell(this.graph.getModel().getChildAt(a, e), b, c)
+    }
+};
+mxMorphing.prototype.stopRecursion = function(a, b) {
+    return null != b && (0 != b.x || 0 != b.y)
+};
+mxMorphing.prototype.getDelta = function(a) {
+    var b = this.getOriginForCell(a.cell),
+        c = this.graph.getView().getTranslate(),
+        d = this.graph.getView().getScale();
+    a = new mxPoint(a.x / d - c.x, a.y / d - c.y);
+    return new mxPoint((b.x - a.x) * d, (b.y - a.y) * d)
+};
+mxMorphing.prototype.getOriginForCell = function(a) {
+    var b = null;
+    null != a && (b = this.getOriginForCell(this.graph.getModel().getParent(a)), a = this.graph.getCellGeometry(a), null != a && (b.x += a.x, b.y += a.y));
+    null == b && (b = this.graph.view.getTranslate(), b = new mxPoint(-b.x, -b.y));
+    return b
+};
+
+function mxImageBundle(a) {
+    this.images = [];
+    this.alt = null != a ? a : !1
+}
+mxImageBundle.prototype.images = null;
+mxImageBundle.prototype.images = null;
+mxImageBundle.prototype.putImage = function(a, b, c) {
+    this.images[a] = {
+        value: b,
+        fallback: c
+    }
+};
+mxImageBundle.prototype.getImage = function(a) {
+    var b = null;
+    null != a && (a = this.images[a], null != a && (b = this.alt ? a.fallback : a.value));
+    return b
+};
+
+function mxImageExport() {}
+mxImageExport.prototype.includeOverlays = !1;
+mxImageExport.prototype.drawState = function(a, b) {
+    null != a && (this.visitStatesRecursive(a, b, this.drawCellState), this.includeOverlays && this.visitStatesRecursive(a, b, this.drawOverlays))
+};
+mxImageExport.prototype.visitStatesRecursive = function(a, b, c) {
+    if (null != a) {
+        c(a, b);
+        for (var d = a.view.graph, e = d.model.getChildCount(a.cell), f = 0; f < e; f++) {
+            var g = d.view.getState(d.model.getChildAt(a.cell, f));
+            this.visitStatesRecursive(g, b, c)
+        }
+    }
+};
+mxImageExport.prototype.drawCellState = function(a, b) {
+    a.shape instanceof mxShape && (b.save(), a.shape.paint(b), b.restore());
+    null != a.text && (b.save(), a.text.paint(b), b.restore())
+};
+mxImageExport.prototype.drawOverlays = function(a, b) {
+    null != a.overlays && a.overlays.visit(function(a, d) {
+        d instanceof mxShape && d.paint(b)
+    })
+};
+
+function mxAbstractCanvas2D() {
+    this.converter = this.createUrlConverter();
+    this.reset()
+}
+mxAbstractCanvas2D.prototype.state = null;
+mxAbstractCanvas2D.prototype.states = null;
+mxAbstractCanvas2D.prototype.path = null;
+mxAbstractCanvas2D.prototype.rotateHtml = !0;
+mxAbstractCanvas2D.prototype.lastX = 0;
+mxAbstractCanvas2D.prototype.lastY = 0;
+mxAbstractCanvas2D.prototype.moveOp = "M";
+mxAbstractCanvas2D.prototype.lineOp = "L";
+mxAbstractCanvas2D.prototype.quadOp = "Q";
+mxAbstractCanvas2D.prototype.curveOp = "C";
+mxAbstractCanvas2D.prototype.closeOp = "Z";
+mxAbstractCanvas2D.prototype.pointerEvents = !1;
+mxAbstractCanvas2D.prototype.createUrlConverter = function() {
+    return new mxUrlConverter
+};
+mxAbstractCanvas2D.prototype.reset = function() {
+    this.state = this.createState();
+    this.states = []
+};
+mxAbstractCanvas2D.prototype.createState = function() {
+    return {
+        dx: 0,
+        dy: 0,
+        scale: 1,
+        alpha: 1,
+        fillColor: null,
+        fillAlpha: 1,
+        gradientColor: null,
+        gradientAlpha: 1,
+        gradientDirection: null,
+        strokeColor: null,
+        strokeWidth: 1,
+        dashed: !1,
+        dashPattern: "3 3",
+        lineCap: "flat",
+        lineJoin: "miter",
+        miterLimit: 10,
+        fontColor: "#000000",
+        fontBackgroundColor: null,
+        fontBorderColor: null,
+        fontSize: mxConstants.DEFAULT_FONTSIZE,
+        fontFamily: mxConstants.DEFAULT_FONTFAMILY,
+        fontStyle: 0,
+        shadow: !1,
+        shadowColor: mxConstants.SHADOWCOLOR,
+        shadowAlpha: mxConstants.SHADOW_OPACITY,
+        shadowDx: mxConstants.SHADOW_OFFSET_X,
+        shadowDy: mxConstants.SHADOW_OFFSET_Y,
+        rotation: 0,
+        rotationCx: 0,
+        rotationCy: 0
+    }
+};
+mxAbstractCanvas2D.prototype.format = function(a) {
+    return Math.round(parseFloat(a))
+};
+mxAbstractCanvas2D.prototype.addOp = function() {
+    if (null != this.path && (this.path.push(arguments[0]), 2 < arguments.length))
+        for (var a = this.state, b = 2; b < arguments.length; b += 2) this.lastX = arguments[b - 1], this.lastY = arguments[b], this.path.push(this.format((this.lastX + a.dx) * a.scale)), this.path.push(this.format((this.lastY + a.dy) * a.scale))
+};
+mxAbstractCanvas2D.prototype.rotatePoint = function(a, b, c, d, e) {
+    c *= Math.PI / 180;
+    return mxUtils.getRotatedPoint(new mxPoint(a, b), Math.cos(c), Math.sin(c), new mxPoint(d, e))
+};
+mxAbstractCanvas2D.prototype.save = function() {
+    this.states.push(this.state);
+    this.state = mxUtils.clone(this.state)
+};
+mxAbstractCanvas2D.prototype.restore = function() {
+    this.state = this.states.pop()
+};
+mxAbstractCanvas2D.prototype.scale = function(a) {
+    this.state.scale *= a;
+    this.state.strokeWidth *= a
+};
+mxAbstractCanvas2D.prototype.translate = function(a, b) {
+    this.state.dx += a;
+    this.state.dy += b
+};
+mxAbstractCanvas2D.prototype.setAlpha = function(a) {
+    this.state.alpha = a
+};
+mxAbstractCanvas2D.prototype.setFillColor = function(a) {
+    a == mxConstants.NONE && (a = null);
+    this.state.fillColor = a;
+    this.state.gradientColor = null
+};
+mxAbstractCanvas2D.prototype.setGradient = function(a, b, c, d, e, f, g, h, k) {
+    c = this.state;
+    c.fillColor = a;
+    c.fillAlpha = null != h ? h : 1;
+    c.gradientColor = b;
+    c.gradientAlpha = null != k ? k : 1;
+    c.gradientDirection = g
+};
+mxAbstractCanvas2D.prototype.setStrokeColor = function(a) {
+    a == mxConstants.NONE && (a = null);
+    this.state.strokeColor = a
+};
+mxAbstractCanvas2D.prototype.setStrokeWidth = function(a) {
+    this.state.strokeWidth = a
+};
+mxAbstractCanvas2D.prototype.setDashed = function(a) {
+    this.state.dashed = a
+};
+mxAbstractCanvas2D.prototype.setDashPattern = function(a) {
+    this.state.dashPattern = a
+};
+mxAbstractCanvas2D.prototype.setLineCap = function(a) {
+    this.state.lineCap = a
+};
+mxAbstractCanvas2D.prototype.setLineJoin = function(a) {
+    this.state.lineJoin = a
+};
+mxAbstractCanvas2D.prototype.setMiterLimit = function(a) {
+    this.state.miterLimit = a
+};
+mxAbstractCanvas2D.prototype.setFontColor = function(a) {
+    a == mxConstants.NONE && (a = null);
+    this.state.fontColor = a
+};
+mxAbstractCanvas2D.prototype.setFontBackgroundColor = function(a) {
+    a == mxConstants.NONE && (a = null);
+    this.state.fontBackgroundColor = a
+};
+mxAbstractCanvas2D.prototype.setFontBorderColor = function(a) {
+    a == mxConstants.NONE && (a = null);
+    this.state.fontBorderColor = a
+};
+mxAbstractCanvas2D.prototype.setFontSize = function(a) {
+    this.state.fontSize = a
+};
+mxAbstractCanvas2D.prototype.setFontFamily = function(a) {
+    this.state.fontFamily = a
+};
+mxAbstractCanvas2D.prototype.setFontStyle = function(a) {
+    null == a && (a = 0);
+    this.state.fontStyle = a
+};
+mxAbstractCanvas2D.prototype.setShadow = function(a) {
+    this.state.shadow = a
+};
+mxAbstractCanvas2D.prototype.setShadowColor = function(a) {
+    a == mxConstants.NONE && (a = null);
+    this.state.shadowColor = a
+};
+mxAbstractCanvas2D.prototype.setShadowAlpha = function(a) {
+    this.state.shadowAlpha = a
+};
+mxAbstractCanvas2D.prototype.setShadowOffset = function(a, b) {
+    this.state.shadowDx = a;
+    this.state.shadowDy = b
+};
+mxAbstractCanvas2D.prototype.begin = function() {
+    this.lastY = this.lastX = 0;
+    this.path = []
+};
+mxAbstractCanvas2D.prototype.moveTo = function(a, b) {
+    this.addOp(this.moveOp, a, b)
+};
+mxAbstractCanvas2D.prototype.lineTo = function(a, b) {
+    this.addOp(this.lineOp, a, b)
+};
+mxAbstractCanvas2D.prototype.quadTo = function(a, b, c, d) {
+    this.addOp(this.quadOp, a, b, c, d)
+};
+mxAbstractCanvas2D.prototype.curveTo = function(a, b, c, d, e, f) {
+    this.addOp(this.curveOp, a, b, c, d, e, f)
+};
+mxAbstractCanvas2D.prototype.arcTo = function(a, b, c, d, e, f, g) {
+    a = mxUtils.arcToCurves(this.lastX, this.lastY, a, b, c, d, e, f, g);
+    for (b = 0; b < a.length; b += 6) this.curveTo(a[b], a[b + 1], a[b + 2], a[b + 3], a[b + 4], a[b + 5])
+};
+mxAbstractCanvas2D.prototype.close = function(a, b, c, d, e, f) {
+    this.addOp(this.closeOp)
+};
+mxAbstractCanvas2D.prototype.end = function() {};
+
+function mxXmlCanvas2D(a) {
+    mxAbstractCanvas2D.call(this);
+    this.root = a;
+    this.writeDefaults()
+}
+mxUtils.extend(mxXmlCanvas2D, mxAbstractCanvas2D);
+mxXmlCanvas2D.prototype.textEnabled = !0;
+mxXmlCanvas2D.prototype.compressed = !0;
+mxXmlCanvas2D.prototype.writeDefaults = function() {
+    var a;
+    a = this.createElement("fontfamily");
+    a.setAttribute("family", mxConstants.DEFAULT_FONTFAMILY);
+    this.root.appendChild(a);
+    a = this.createElement("fontsize");
+    a.setAttribute("size", mxConstants.DEFAULT_FONTSIZE);
+    this.root.appendChild(a);
+    a = this.createElement("shadowcolor");
+    a.setAttribute("color", mxConstants.SHADOWCOLOR);
+    this.root.appendChild(a);
+    a = this.createElement("shadowalpha");
+    a.setAttribute("alpha", mxConstants.SHADOW_OPACITY);
+    this.root.appendChild(a);
+    a = this.createElement("shadowoffset");
+    a.setAttribute("dx", mxConstants.SHADOW_OFFSET_X);
+    a.setAttribute("dy", mxConstants.SHADOW_OFFSET_Y);
+    this.root.appendChild(a)
+};
+mxXmlCanvas2D.prototype.format = function(a) {
+    return parseFloat(parseFloat(a).toFixed(2))
+};
+mxXmlCanvas2D.prototype.createElement = function(a) {
+    return this.root.ownerDocument.createElement(a)
+};
+mxXmlCanvas2D.prototype.save = function() {
+    this.compressed && mxAbstractCanvas2D.prototype.save.apply(this, arguments);
+    this.root.appendChild(this.createElement("save"))
+};
+mxXmlCanvas2D.prototype.restore = function() {
+    this.compressed && mxAbstractCanvas2D.prototype.restore.apply(this, arguments);
+    this.root.appendChild(this.createElement("restore"))
+};
+mxXmlCanvas2D.prototype.scale = function(a) {
+    if (this.compressed) {
+        if (this.state.scale == a) return;
+        mxAbstractCanvas2D.prototype.setAlpha.apply(this, arguments)
+    }
+    var b = this.createElement("scale");
+    b.setAttribute("scale", a);
+    this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.translate = function(a, b) {
+    var c = this.createElement("translate");
+    c.setAttribute("dx", this.format(a));
+    c.setAttribute("dy", this.format(b));
+    this.root.appendChild(c)
+};
+mxXmlCanvas2D.prototype.rotate = function(a, b, c, d, e) {
+    var f = this.createElement("rotate");
+    if (0 != a || b || c) f.setAttribute("theta", this.format(a)), f.setAttribute("flipH", b ? "1" : "0"), f.setAttribute("flipV", c ? "1" : "0"), f.setAttribute("cx", this.format(d)), f.setAttribute("cy", this.format(e)), this.root.appendChild(f)
+};
+mxXmlCanvas2D.prototype.setAlpha = function(a) {
+    if (this.compressed) {
+        if (this.state.alpha == a) return;
+        mxAbstractCanvas2D.prototype.setAlpha.apply(this, arguments)
+    }
+    var b = this.createElement("alpha");
+    b.setAttribute("alpha", this.format(a));
+    this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setFillColor = function(a) {
+    a == mxConstants.NONE && (a = null);
+    if (this.compressed) {
+        if (this.state.fillColor == a) return;
+        mxAbstractCanvas2D.prototype.setFillColor.apply(this, arguments)
+    }
+    var b = this.createElement("fillcolor");
+    b.setAttribute("color", null != a ? a : mxConstants.NONE);
+    this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setGradient = function(a, b, c, d, e, f, g, h, k) {
+    if (null != a && null != b) {
+        mxAbstractCanvas2D.prototype.setGradient.apply(this, arguments);
+        var l = this.createElement("gradient");
+        l.setAttribute("c1", a);
+        l.setAttribute("c2", b);
+        l.setAttribute("x", this.format(c));
+        l.setAttribute("y", this.format(d));
+        l.setAttribute("w", this.format(e));
+        l.setAttribute("h", this.format(f));
+        null != g && l.setAttribute("direction", g);
+        null != h && l.setAttribute("alpha1", h);
+        null != k && l.setAttribute("alpha2", k);
+        this.root.appendChild(l)
+    }
+};
+mxXmlCanvas2D.prototype.setStrokeColor = function(a) {
+    a == mxConstants.NONE && (a = null);
+    if (this.compressed) {
+        if (this.state.strokeColor == a) return;
+        mxAbstractCanvas2D.prototype.setStrokeColor.apply(this, arguments)
+    }
+    var b = this.createElement("strokecolor");
+    b.setAttribute("color", null != a ? a : mxConstants.NONE);
+    this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setStrokeWidth = function(a) {
+    if (this.compressed) {
+        if (this.state.strokeWidth == a) return;
+        mxAbstractCanvas2D.prototype.setStrokeWidth.apply(this, arguments)
+    }
+    var b = this.createElement("strokewidth");
+    b.setAttribute("width", this.format(a));
+    this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setDashed = function(a) {
+    if (this.compressed) {
+        if (this.state.dashed == a) return;
+        mxAbstractCanvas2D.prototype.setDashed.apply(this, arguments)
+    }
+    var b = this.createElement("dashed");
+    b.setAttribute("dashed", a ? "1" : "0");
+    this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setDashPattern = function(a) {
+    if (this.compressed) {
+        if (this.state.dashPattern == a) return;
+        mxAbstractCanvas2D.prototype.setDashPattern.apply(this, arguments)
+    }
+    var b = this.createElement("dashpattern");
+    b.setAttribute("pattern", a);
+    this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setLineCap = function(a) {
+    if (this.compressed) {
+        if (this.state.lineCap == a) return;
+        mxAbstractCanvas2D.prototype.setLineCap.apply(this, arguments)
+    }
+    var b = this.createElement("linecap");
+    b.setAttribute("cap", a);
+    this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setLineJoin = function(a) {
+    if (this.compressed) {
+        if (this.state.lineJoin == a) return;
+        mxAbstractCanvas2D.prototype.setLineJoin.apply(this, arguments)
+    }
+    var b = this.createElement("linejoin");
+    b.setAttribute("join", a);
+    this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setMiterLimit = function(a) {
+    if (this.compressed) {
+        if (this.state.miterLimit == a) return;
+        mxAbstractCanvas2D.prototype.setMiterLimit.apply(this, arguments)
+    }
+    var b = this.createElement("miterlimit");
+    b.setAttribute("limit", a);
+    this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setFontColor = function(a) {
+    if (this.textEnabled) {
+        a == mxConstants.NONE && (a = null);
+        if (this.compressed) {
+            if (this.state.fontColor == a) return;
+            mxAbstractCanvas2D.prototype.setFontColor.apply(this, arguments)
+        }
+        var b = this.createElement("fontcolor");
+        b.setAttribute("color", null != a ? a : mxConstants.NONE);
+        this.root.appendChild(b)
+    }
+};
+mxXmlCanvas2D.prototype.setFontBackgroundColor = function(a) {
+    if (this.textEnabled) {
+        a == mxConstants.NONE && (a = null);
+        if (this.compressed) {
+            if (this.state.fontBackgroundColor == a) return;
+            mxAbstractCanvas2D.prototype.setFontBackgroundColor.apply(this, arguments)
+        }
+        var b = this.createElement("fontbackgroundcolor");
+        b.setAttribute("color", null != a ? a : mxConstants.NONE);
+        this.root.appendChild(b)
+    }
+};
+mxXmlCanvas2D.prototype.setFontBorderColor = function(a) {
+    if (this.textEnabled) {
+        a == mxConstants.NONE && (a = null);
+        if (this.compressed) {
+            if (this.state.fontBorderColor == a) return;
+            mxAbstractCanvas2D.prototype.setFontBorderColor.apply(this, arguments)
+        }
+        var b = this.createElement("fontbordercolor");
+        b.setAttribute("color", null != a ? a : mxConstants.NONE);
+        this.root.appendChild(b)
+    }
+};
+mxXmlCanvas2D.prototype.setFontSize = function(a) {
+    if (this.textEnabled) {
+        if (this.compressed) {
+            if (this.state.fontSize == a) return;
+            mxAbstractCanvas2D.prototype.setFontSize.apply(this, arguments)
+        }
+        var b = this.createElement("fontsize");
+        b.setAttribute("size", a);
+        this.root.appendChild(b)
+    }
+};
+mxXmlCanvas2D.prototype.setFontFamily = function(a) {
+    if (this.textEnabled) {
+        if (this.compressed) {
+            if (this.state.fontFamily == a) return;
+            mxAbstractCanvas2D.prototype.setFontFamily.apply(this, arguments)
+        }
+        var b = this.createElement("fontfamily");
+        b.setAttribute("family", a);
+        this.root.appendChild(b)
+    }
+};
+mxXmlCanvas2D.prototype.setFontStyle = function(a) {
+    if (this.textEnabled) {
+        null == a && (a = 0);
+        if (this.compressed) {
+            if (this.state.fontStyle == a) return;
+            mxAbstractCanvas2D.prototype.setFontStyle.apply(this, arguments)
+        }
+        var b = this.createElement("fontstyle");
+        b.setAttribute("style", a);
+        this.root.appendChild(b)
+    }
+};
+mxXmlCanvas2D.prototype.setShadow = function(a) {
+    if (this.compressed) {
+        if (this.state.shadow == a) return;
+        mxAbstractCanvas2D.prototype.setShadow.apply(this, arguments)
+    }
+    var b = this.createElement("shadow");
+    b.setAttribute("enabled", a ? "1" : "0");
+    this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setShadowColor = function(a) {
+    if (this.compressed) {
+        a == mxConstants.NONE && (a = null);
+        if (this.state.shadowColor == a) return;
+        mxAbstractCanvas2D.prototype.setShadowColor.apply(this, arguments)
+    }
+    var b = this.createElement("shadowcolor");
+    b.setAttribute("color", null != a ? a : mxConstants.NONE);
+    this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setShadowAlpha = function(a) {
+    if (this.compressed) {
+        if (this.state.shadowAlpha == a) return;
+        mxAbstractCanvas2D.prototype.setShadowAlpha.apply(this, arguments)
+    }
+    var b = this.createElement("shadowalpha");
+    b.setAttribute("alpha", a);
+    this.root.appendChild(b)
+};
+mxXmlCanvas2D.prototype.setShadowOffset = function(a, b) {
+    if (this.compressed) {
+        if (this.state.shadowDx == a && this.state.shadowDy == b) return;
+        mxAbstractCanvas2D.prototype.setShadowOffset.apply(this, arguments)
+    }
+    var c = this.createElement("shadowoffset");
+    c.setAttribute("dx", a);
+    c.setAttribute("dy", b);
+    this.root.appendChild(c)
+};
+mxXmlCanvas2D.prototype.rect = function(a, b, c, d) {
+    var e = this.createElement("rect");
+    e.setAttribute("x", this.format(a));
+    e.setAttribute("y", this.format(b));
+    e.setAttribute("w", this.format(c));
+    e.setAttribute("h", this.format(d));
+    this.root.appendChild(e)
+};
+mxXmlCanvas2D.prototype.roundrect = function(a, b, c, d, e, f) {
+    var g = this.createElement("roundrect");
+    g.setAttribute("x", this.format(a));
+    g.setAttribute("y", this.format(b));
+    g.setAttribute("w", this.format(c));
+    g.setAttribute("h", this.format(d));
+    g.setAttribute("dx", this.format(e));
+    g.setAttribute("dy", this.format(f));
+    this.root.appendChild(g)
+};
+mxXmlCanvas2D.prototype.ellipse = function(a, b, c, d) {
+    var e = this.createElement("ellipse");
+    e.setAttribute("x", this.format(a));
+    e.setAttribute("y", this.format(b));
+    e.setAttribute("w", this.format(c));
+    e.setAttribute("h", this.format(d));
+    this.root.appendChild(e)
+};
+mxXmlCanvas2D.prototype.image = function(a, b, c, d, e, f, g, h) {
+    e = this.converter.convert(e);
+    var k = this.createElement("image");
+    k.setAttribute("x", this.format(a));
+    k.setAttribute("y", this.format(b));
+    k.setAttribute("w", this.format(c));
+    k.setAttribute("h", this.format(d));
+    k.setAttribute("src", e);
+    k.setAttribute("aspect", f ? "1" : "0");
+    k.setAttribute("flipH", g ? "1" : "0");
+    k.setAttribute("flipV", h ? "1" : "0");
+    this.root.appendChild(k)
+};
+mxXmlCanvas2D.prototype.begin = function() {
+    this.root.appendChild(this.createElement("begin"));
+    this.lastY = this.lastX = 0
+};
+mxXmlCanvas2D.prototype.moveTo = function(a, b) {
+    var c = this.createElement("move");
+    c.setAttribute("x", this.format(a));
+    c.setAttribute("y", this.format(b));
+    this.root.appendChild(c);
+    this.lastX = a;
+    this.lastY = b
+};
+mxXmlCanvas2D.prototype.lineTo = function(a, b) {
+    var c = this.createElement("line");
+    c.setAttribute("x", this.format(a));
+    c.setAttribute("y", this.format(b));
+    this.root.appendChild(c);
+    this.lastX = a;
+    this.lastY = b
+};
+mxXmlCanvas2D.prototype.quadTo = function(a, b, c, d) {
+    var e = this.createElement("quad");
+    e.setAttribute("x1", this.format(a));
+    e.setAttribute("y1", this.format(b));
+    e.setAttribute("x2", this.format(c));
+    e.setAttribute("y2", this.format(d));
+    this.root.appendChild(e);
+    this.lastX = c;
+    this.lastY = d
+};
+mxXmlCanvas2D.prototype.curveTo = function(a, b, c, d, e, f) {
+    var g = this.createElement("curve");
+    g.setAttribute("x1", this.format(a));
+    g.setAttribute("y1", this.format(b));
+    g.setAttribute("x2", this.format(c));
+    g.setAttribute("y2", this.format(d));
+    g.setAttribute("x3", this.format(e));
+    g.setAttribute("y3", this.format(f));
+    this.root.appendChild(g);
+    this.lastX = e;
+    this.lastY = f
+};
+mxXmlCanvas2D.prototype.close = function() {
+    this.root.appendChild(this.createElement("close"))
+};
+mxXmlCanvas2D.prototype.text = function(a, b, c, d, e, f, g, h, k, l, m, n) {
+    if (this.textEnabled && null != e) {
+        mxUtils.isNode(e) && (e = mxUtils.getOuterHtml(e));
+        var p = this.createElement("text");
+        p.setAttribute("x", this.format(a));
+        p.setAttribute("y", this.format(b));
+        p.setAttribute("w", this.format(c));
+        p.setAttribute("h", this.format(d));
+        p.setAttribute("str", e);
+        null != f && p.setAttribute("align", f);
+        null != g && p.setAttribute("valign", g);
+        p.setAttribute("wrap", h ? "1" : "0");
+        null == k && (k = "");
+        p.setAttribute("format", k);
+        null != l && p.setAttribute("fill",
+            l ? "1" : "0");
+        null != m && p.setAttribute("clip", m ? "1" : "0");
+        null != n && p.setAttribute("rotation", n);
+        this.root.appendChild(p)
+    }
+};
+mxXmlCanvas2D.prototype.stroke = function() {
+    this.root.appendChild(this.createElement("stroke"))
+};
+mxXmlCanvas2D.prototype.fill = function() {
+    this.root.appendChild(this.createElement("fill"))
+};
+mxXmlCanvas2D.prototype.fillAndStroke = function() {
+    this.root.appendChild(this.createElement("fillstroke"))
+};
+
+function mxSvgCanvas2D(a, b) {
+    mxAbstractCanvas2D.call(this);
+    this.root = a;
+    this.gradients = [];
+    this.defs = null;
+    this.styleEnabled = null != b ? b : !1;
+    var c = null;
+    if (a.ownerDocument != document)
+        for (c = a; null != c && "svg" != c.nodeName;) c = c.parentNode;
+    null != c && (0 < c.getElementsByTagName("defs").length && (this.defs = c.getElementsByTagName("defs")[0]), null == this.defs && (this.defs = this.createElement("defs"), null != c.firstChild ? c.insertBefore(this.defs, c.firstChild) : c.appendChild(this.defs)), this.styleEnabled && this.defs.appendChild(this.createStyle()))
+}
+mxUtils.extend(mxSvgCanvas2D, mxAbstractCanvas2D);
+mxSvgCanvas2D.prototype.node = null;
+mxSvgCanvas2D.prototype.matchHtmlAlignment = !0;
+mxSvgCanvas2D.prototype.textEnabled = !0;
+mxSvgCanvas2D.prototype.foEnabled = !0;
+mxSvgCanvas2D.prototype.strokeTolerance = 0;
+mxSvgCanvas2D.prototype.refCount = 0;
+mxSvgCanvas2D.prototype.blockImagePointerEvents = !1;
+mxSvgCanvas2D.prototype.reset = function() {
+    mxAbstractCanvas2D.prototype.reset.apply(this, arguments);
+    this.gradients = []
+};
+mxSvgCanvas2D.prototype.createStyle = function(a) {
+    a = this.createElement("style");
+    a.setAttribute("type", "text/css");
+    mxUtils.write(a, "svg{font-family:" + mxConstants.DEFAULT_FONTFAMILY + ";font-size:" + mxConstants.DEFAULT_FONTSIZE + ";fill:none;stroke-miterlimit:10}");
+    return a
+};
+mxSvgCanvas2D.prototype.createElement = function(a, b) {
+    if (null != this.root.ownerDocument.createElementNS) return this.root.ownerDocument.createElementNS(b || mxConstants.NS_SVG, a);
+    var c = this.root.ownerDocument.createElement(a);
+    null != b && c.setAttribute("xmlns", b);
+    return c
+};
+mxSvgCanvas2D.prototype.createGradientId = function(a, b, c, d, e) {
+    "#" == a.charAt(0) && (a = a.substring(1));
+    "#" == b.charAt(0) && (b = b.substring(1));
+    a = a.toLowerCase() + "-" + c;
+    b = b.toLowerCase() + "-" + d;
+    c = null;
+    null == e || e == mxConstants.DIRECTION_SOUTH ? c = "s" : e == mxConstants.DIRECTION_EAST ? c = "e" : (d = a, a = b, b = d, e == mxConstants.DIRECTION_NORTH ? c = "s" : e == mxConstants.DIRECTION_WEST && (c = "e"));
+    return "mx-gradient-" + a + "-" + b + "-" + c
+};
+mxSvgCanvas2D.prototype.getSvgGradient = function(a, b, c, d, e) {
+    var f = this.createGradientId(a, b, c, d, e),
+        g = this.gradients[f];
+    if (null == g) {
+        var h = this.root.ownerSVGElement,
+            k = 0,
+            l = f + "-" + k;
+        if (null != h)
+            for (g = h.ownerDocument.getElementById(l); null != g && g.ownerSVGElement != h;) l = f + "-" + k++, g = h.ownerDocument.getElementById(l);
+        else l = "id" + ++this.refCount;
+        null == g && (g = this.createSvgGradient(a, b, c, d, e), g.setAttribute("id", l), null != this.defs ? this.defs.appendChild(g) : h.appendChild(g));
+        this.gradients[f] = g
+    }
+    return g.getAttribute("id")
+};
+mxSvgCanvas2D.prototype.createSvgGradient = function(a, b, c, d, e) {
+    var f = this.createElement("linearGradient");
+    f.setAttribute("x1", "0%");
+    f.setAttribute("y1", "0%");
+    f.setAttribute("x2", "0%");
+    f.setAttribute("y2", "0%");
+    null == e || e == mxConstants.DIRECTION_SOUTH ? f.setAttribute("y2", "100%") : e == mxConstants.DIRECTION_EAST ? f.setAttribute("x2", "100%") : e == mxConstants.DIRECTION_NORTH ? f.setAttribute("y1", "100%") : e == mxConstants.DIRECTION_WEST && f.setAttribute("x1", "100%");
+    c = 1 > c ? ";stop-opacity:" + c : "";
+    e = this.createElement("stop");
+    e.setAttribute("offset", "0%");
+    e.setAttribute("style", "stop-color:" + a + c);
+    f.appendChild(e);
+    c = 1 > d ? ";stop-opacity:" + d : "";
+    e = this.createElement("stop");
+    e.setAttribute("offset", "100%");
+    e.setAttribute("style", "stop-color:" + b + c);
+    f.appendChild(e);
+    return f
+};
+mxSvgCanvas2D.prototype.addNode = function(a, b) {
+    var c = this.node,
+        d = this.state;
+    if (null != c) {
+        if ("path" == c.nodeName)
+            if (null != this.path && 0 < this.path.length) c.setAttribute("d", this.path.join(" "));
+            else return;
+        a && null != d.fillColor ? this.updateFill() : this.styleEnabled || ("ellipse" == c.nodeName && mxClient.IS_NS && !mxClient.IS_GC && !mxClient.IS_SF ? c.setAttribute("fill", "transparent") : c.setAttribute("fill", "none"), a = !1);
+        b && null != d.strokeColor ? this.updateStroke() : this.styleEnabled || c.setAttribute("stroke", "none");
+        null !=
+            d.transform && 0 < d.transform.length && c.setAttribute("transform", d.transform);
+        d.shadow && this.root.appendChild(this.createShadow(c));
+        0 < this.strokeTolerance && !a && this.root.appendChild(this.createTolerance(c));
+        this.pointerEvents && ("path" != c.nodeName || this.path[this.path.length - 1] == this.closeOp) && c.setAttribute("pointer-events", "all");
+        this.root.appendChild(c)
+    }
+};
+mxSvgCanvas2D.prototype.updateFill = function() {
+    var a = this.state;
+    1 > a.alpha && this.node.setAttribute("fill-opacity", a.alpha);
+    null != a.fillColor && (null != a.gradientColor ? (a = this.getSvgGradient(a.fillColor, a.gradientColor, a.fillAlpha, a.gradientAlpha, a.gradientDirection), this.node.setAttribute("fill", "url(#" + a + ")")) : this.node.setAttribute("fill", a.fillColor.toLowerCase()))
+};
+mxSvgCanvas2D.prototype.updateStroke = function() {
+    var a = this.state;
+    this.node.setAttribute("stroke", a.strokeColor.toLowerCase());
+    1 > a.alpha && this.node.setAttribute("stroke-opacity", a.alpha);
+    var b = Math.max(1, this.format(a.strokeWidth * a.scale));
+    1 != b && this.node.setAttribute("stroke-width", b);
+    "path" == this.node.nodeName && this.updateStrokeAttributes();
+    a.dashed && this.node.setAttribute("stroke-dasharray", this.createDashPattern(b))
+};
+mxSvgCanvas2D.prototype.updateStrokeAttributes = function() {
+    var a = this.state;
+    null != a.lineJoin && "miter" != a.lineJoin && this.node.setAttribute("stroke-linejoin", a.lineJoin);
+    if (null != a.lineCap) {
+        var b = a.lineCap;
+        "flat" == b && (b = "butt");
+        "butt" != b && this.node.setAttribute("stroke-linecap", b)
+    }
+    null != a.miterLimit && (!this.styleEnabled || 10 != a.miterLimit) && this.node.setAttribute("stroke-miterlimit", a.miterLimit)
+};
+mxSvgCanvas2D.prototype.createDashPattern = function(a) {
+    var b = this.state.dashPattern.split(" "),
+        c = [];
+    if (0 < b.length)
+        for (var d = 0; d < b.length; d++) c[d] = Number(b[d]) * a;
+    return c.join(" ")
+};
+mxSvgCanvas2D.prototype.createTolerance = function(a) {
+    a = a.cloneNode(!0);
+    var b = parseFloat(a.getAttribute("stroke-width") || 1) + this.strokeTolerance;
+    a.setAttribute("pointer-events", "stroke");
+    a.setAttribute("visibility", "hidden");
+    a.removeAttribute("stroke-dasharray");
+    a.setAttribute("stroke-width", b);
+    a.setAttribute("fill", "none");
+    a.setAttribute("stroke", mxClient.IS_OP ? "none" : "white");
+    return a
+};
+mxSvgCanvas2D.prototype.createShadow = function(a) {
+    a = a.cloneNode(!0);
+    var b = this.state;
+    "none" != a.getAttribute("fill") && a.setAttribute("fill", b.shadowColor);
+    "none" != a.getAttribute("stroke") && a.setAttribute("stroke", b.shadowColor);
+    a.setAttribute("transform", "translate(" + this.format(b.shadowDx * b.scale) + "," + this.format(b.shadowDy * b.scale) + ")" + (b.transform || ""));
+    a.setAttribute("opacity", b.shadowAlpha);
+    return a
+};
+mxSvgCanvas2D.prototype.rotate = function(a, b, c, d, e) {
+    if (0 != a || b || c) {
+        var f = this.state;
+        d += f.dx;
+        e += f.dy;
+        d *= f.scale;
+        e *= f.scale;
+        f.transform = f.transform || "";
+        if (b && c) a += 180;
+        else if (b ^ c) {
+            var g = b ? d : 0,
+                h = b ? -1 : 1,
+                k = c ? e : 0,
+                l = c ? -1 : 1;
+            f.transform += "translate(" + this.format(g) + "," + this.format(k) + ")scale(" + this.format(h) + "," + this.format(l) + ")translate(" + this.format(-g) + "," + this.format(-k) + ")"
+        }
+        if (b ? !c : c) a *= -1;
+        0 != a && (f.transform += "rotate(" + this.format(a) + "," + this.format(d) + "," + this.format(e) + ")");
+        f.rotation += a;
+        f.rotationCx =
+            d;
+        f.rotationCy = e
+    }
+};
+mxSvgCanvas2D.prototype.begin = function() {
+    mxAbstractCanvas2D.prototype.begin.apply(this, arguments);
+    this.node = this.createElement("path")
+};
+mxSvgCanvas2D.prototype.rect = function(a, b, c, d) {
+    var e = this.state,
+        f = this.createElement("rect");
+    f.setAttribute("x", this.format((a + e.dx) * e.scale));
+    f.setAttribute("y", this.format((b + e.dy) * e.scale));
+    f.setAttribute("width", this.format(c * e.scale));
+    f.setAttribute("height", this.format(d * e.scale));
+    this.node = f
+};
+mxSvgCanvas2D.prototype.roundrect = function(a, b, c, d, e, f) {
+    this.rect(a, b, c, d);
+    0 < e && this.node.setAttribute("rx", this.format(e * this.state.scale));
+    0 < f && this.node.setAttribute("ry", this.format(f * this.state.scale))
+};
+mxSvgCanvas2D.prototype.ellipse = function(a, b, c, d) {
+    var e = this.state,
+        f = this.createElement("ellipse");
+    f.setAttribute("cx", Math.round((a + c / 2 + e.dx) * e.scale));
+    f.setAttribute("cy", Math.round((b + d / 2 + e.dy) * e.scale));
+    f.setAttribute("rx", c / 2 * e.scale);
+    f.setAttribute("ry", d / 2 * e.scale);
+    this.node = f
+};
+mxSvgCanvas2D.prototype.image = function(a, b, c, d, e, f, g, h) {
+    e = this.converter.convert(e);
+    f = null != f ? f : !0;
+    g = null != g ? g : !1;
+    h = null != h ? h : !1;
+    var k = this.state;
+    a += k.dx;
+    b += k.dy;
+    var l = this.createElement("image");
+    l.setAttribute("x", this.format(a * k.scale));
+    l.setAttribute("y", this.format(b * k.scale));
+    l.setAttribute("width", this.format(c * k.scale));
+    l.setAttribute("height", this.format(d * k.scale));
+    null == l.setAttributeNS ? l.setAttribute("xlink:href", e) : l.setAttributeNS(mxConstants.NS_XLINK, "href", e);
+    f || l.setAttribute("preserveAspectRatio",
+        "none");
+    1 > k.alpha && l.setAttribute("opacity", k.alpha);
+    e = this.state.transform || "";
+    if (g || h) {
+        var m = f = 1,
+            n = 0,
+            p = 0;
+        g && (f = -1, n = -c - 2 * a);
+        h && (m = -1, p = -d - 2 * b);
+        e += "scale(" + f + "," + m + ")translate(" + n + "," + p + ")"
+    }
+    0 < e.length && l.setAttribute("transform", e);
+    this.root.appendChild(l);
+    this.blockImagePointerEvents && (l.setAttribute("style", "pointer-events:none"), l = this.createElement("rect"), l.setAttribute("visibility", "hidden"), l.setAttribute("pointer-events", "fill"), l.setAttribute("x", this.format(a * k.scale)), l.setAttribute("y",
+        this.format(b * k.scale)), l.setAttribute("width", this.format(c * k.scale)), l.setAttribute("height", this.format(d * k.scale)), this.root.appendChild(l))
+};
+mxSvgCanvas2D.prototype.createDiv = function(a, b, c, d, e) {
+    c = this.state;
+    d = "display:inline-block;font-size:" + Math.round(c.fontSize) + "px;font-family:" + c.fontFamily + ";color:" + c.fontColor + ";line-height:" + Math.round(c.fontSize * mxConstants.LINE_HEIGHT) + "px;" + d;
+    (c.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && (d += "font-weight:bold;");
+    (c.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && (d += "font-style:italic;");
+    (c.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE && (d += "font-decoration:underline;");
+    b == mxConstants.ALIGN_CENTER ? d += "text-align:center;" : b == mxConstants.ALIGN_RIGHT && (d += "text-align:right;");
+    b = "";
+    null != c.fontBackgroundColor && (b += "background-color:" + c.fontBackgroundColor + ";");
+    null != c.fontBorderColor && (b += "border:1px solid " + c.fontBorderColor + ";");
+    mxUtils.isNode(a) || (c = document.createElement("textarea"), c.innerHTML = a.replace(/&lt;/g, "\x26amp;lt;").replace(/&gt;/g, "\x26amp;gt;").replace(/</g, "\x26lt;").replace(/>/g, "\x26gt;"), a = c.value, e ? d += b : 0 < b.length && (a = '\x3cdiv xmlns\x3d"http://www.w3.org/1999/xhtml" style\x3d"display:inline-block;' +
+        b + '"\x3e' + a + "\x3c/div\x3e"));
+    if (!mxClient.IS_IE && document.createElementNS) return e = document.createElementNS("http://www.w3.org/1999/xhtml", "div"), e.setAttribute("style", d), mxUtils.isNode(a) ? this.root.ownerDocument != document ? e.appendChild(a.cloneNode(!0)) : e.appendChild(a) : e.innerHTML = a, e;
+    mxUtils.isNode(a) && this.root.ownerDocument != document && (a = a.outerHTML);
+    a = a.replace(/<br>/g, "\x3cbr /\x3e").replace(/<hr>/g, "\x3chr /\x3e");
+    return mxUtils.parseXml('\x3cdiv xmlns\x3d"http://www.w3.org/1999/xhtml" style\x3d"' +
+        d + '"\x3e' + a + "\x3c/div\x3e").documentElement
+};
+mxSvgCanvas2D.prototype.text = function(a, b, c, d, e, f, g, h, k, l, m, n) {
+    if (this.textEnabled && null != e) {
+        n = null != n ? n : 0;
+        var p = this.state;
+        a += p.dx;
+        b += p.dy;
+        if (this.foEnabled && "html" == k) {
+            var q = "vertical-align:top;";
+            m ? (q += "overflow:hidden;", 0 < d && (q += "max-height:" + Math.round(d) + "px;"), 0 < c && (q += "width:" + Math.round(c) + "px;")) : l && (q += "width:" + Math.round(c) + "px;", 0 < d && (q += "max-height:" + Math.round(d) + "px;"));
+            h ? (!m && 0 < c && (q += "width:" + Math.round(c) + "px;"), q += "white-space:normal;") : q += "white-space:nowrap;";
+            h = this.createElement("g");
+            1 > p.alpha && h.setAttribute("opacity", p.alpha);
+            k = this.createElement("foreignObject");
+            k.setAttribute("pointer-events", "all");
+            q = this.createDiv(e, f, g, q, l);
+            if (null != q) {
+                h.appendChild(k);
+                this.root.appendChild(h);
+                var s = 0;
+                if (mxClient.IS_IE && !mxClient.IS_SVG) {
+                    var r = document.createElement("div");
+                    r.style.cssText = q.getAttribute("style");
+                    r.style.display = mxClient.IS_QUIRKS ? "inline" : "inline-block";
+                    r.style.visibility = "hidden";
+                    r.innerHTML = mxUtils.isNode(e) ? e.outerHTML : e;
+                    document.body.appendChild(r);
+                    s = r.offsetWidth;
+                    d = mxClient.IS_QUIRKS && 0 < d && m ? Math.min(d, r.offsetHeight + 2) : r.offsetHeight;
+                    r.parentNode.removeChild(r);
+                    k.appendChild(q)
+                } else this.root.ownerDocument != document ? (q.style.visibility = "hidden", document.body.appendChild(q), s = q.offsetWidth, d = q.offsetHeight, k.appendChild(q), q.style.visibility = "") : (k.appendChild(q), s = q.offsetWidth, d = q.offsetHeight);
+                c = l ? Math.max(c, s) : s;
+                1 > p.alpha && h.setAttribute("opacity", p.alpha);
+                l = e = 0;
+                f == mxConstants.ALIGN_CENTER ? e -= c / 2 : f == mxConstants.ALIGN_RIGHT && (e -= c);
+                a += e;
+                g == mxConstants.ALIGN_MIDDLE ?
+                    l -= d / 2 : g == mxConstants.ALIGN_BOTTOM && (l -= d);
+                b += l;
+                f = 1 != p.scale ? "scale(" + p.scale + ")" : "";
+                0 != p.rotation && this.rotateHtml ? (f += "rotate(" + p.rotation + "," + c / 2 + "," + d / 2 + ")", b = this.rotatePoint((a + c / 2) * p.scale, (b + d / 2) * p.scale, p.rotation, p.rotationCx, p.rotationCy), a = b.x - c * p.scale / 2, b = b.y - d * p.scale / 2) : (a *= p.scale, b *= p.scale);
+                0 != n && (f += "rotate(" + n + "," + -e + "," + -l + ")");
+                h.setAttribute("transform", "translate(" + Math.round(a) + "," + Math.round(b) + ")" + f);
+                k.setAttribute("width", Math.round(Math.max(1, c)));
+                k.setAttribute("height",
+                    Math.round(Math.max(1, d)))
+            }
+        } else this.plainText(a, b, c, d, e, f, g, h, l, m, n)
+    }
+};
+mxSvgCanvas2D.prototype.createClip = function(a, b, c, d) {
+    a = Math.round(a);
+    b = Math.round(b);
+    c = Math.round(c);
+    d = Math.round(d);
+    for (var e = "mx-clip-" + a + "-" + b + "-" + c + "-" + d, f = 0, g = e + "-" + f; null != document.getElementById(g);) g = e + "-" + ++f;
+    clip = this.createElement("clipPath");
+    clip.setAttribute("id", g);
+    e = this.createElement("rect");
+    e.setAttribute("x", a);
+    e.setAttribute("y", b);
+    e.setAttribute("width", c);
+    e.setAttribute("height", d);
+    clip.appendChild(e);
+    return clip
+};
+mxSvgCanvas2D.prototype.plainText = function(a, b, c, d, e, f, g, h, k, l, m) {
+    m = null != m ? m : 0;
+    h = this.state;
+    var n = Math.round(h.fontSize),
+        p = this.createElement("g"),
+        q = h.transform || "";
+    0 != m && (q += "rotate(" + m + "," + this.format(a * h.scale) + "," + this.format(b * h.scale) + ")");
+    if (l && 0 < c && 0 < d) {
+        var s = a;
+        m = b;
+        f == mxConstants.ALIGN_CENTER ? s -= c / 2 : f == mxConstants.ALIGN_RIGHT && (s -= c);
+        g == mxConstants.ALIGN_MIDDLE ? m -= d / 2 : g == mxConstants.ALIGN_BOTTOM && (m -= d);
+        m = this.createClip(s * h.scale - 2, m * h.scale - 2, c * h.scale + 4, d * h.scale + 4);
+        null != this.defs ? this.defs.appendChild(m) :
+            this.root.appendChild(m);
+        p.setAttribute("clip-path", "url(#" + m.getAttribute("id") + ")")
+    }
+    this.updateFont(p, f);
+    m = f == mxConstants.ALIGN_RIGHT ? "end" : f == mxConstants.ALIGN_CENTER ? "middle" : "start";
+    "start" != m && p.setAttribute("text-anchor", m);
+    (!this.styleEnabled || n != mxConstants.DEFAULT_FONTSIZE) && p.setAttribute("font-size", Math.round(n * h.scale) + "px");
+    0 < q.length && p.setAttribute("transform", q);
+    1 > h.alpha && p.setAttribute("opacity", h.alpha);
+    var q = e.split("\n"),
+        s = Math.round(n * mxConstants.LINE_HEIGHT),
+        r = n + (q.length -
+            1) * s;
+    m = b + n - 1;
+    g == mxConstants.ALIGN_MIDDLE ? (d = (this.matchHtmlAlignment && l && 0 < d ? Math.min(r, d) : r) / 2, m -= d + 1) : g == mxConstants.ALIGN_BOTTOM && (d = this.matchHtmlAlignment && l && 0 < d ? Math.min(r, d) : r, m -= d + 2);
+    for (d = 0; d < q.length; d++) 0 < q[d].length && 0 < mxUtils.trim(q[d]).length && (l = this.createElement("text"), l.setAttribute("x", this.format(a * h.scale)), l.setAttribute("y", this.format(m * h.scale)), mxUtils.write(l, q[d]), p.appendChild(l)), m += s;
+    this.root.appendChild(p);
+    this.addTextBackground(p, e, a, b, c, r, f, g, k)
+};
+mxSvgCanvas2D.prototype.updateFont = function(a) {
+    var b = this.state;
+    a.setAttribute("fill", b.fontColor);
+    (!this.styleEnabled || b.fontFamily != mxConstants.DEFAULT_FONTFAMILY) && a.setAttribute("font-family", b.fontFamily);
+    (b.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && a.setAttribute("font-weight", "bold");
+    (b.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && a.setAttribute("font-style", "italic");
+    (b.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE && a.setAttribute("text-decoration",
+        "underline")
+};
+mxSvgCanvas2D.prototype.addTextBackground = function(a, b, c, d, e, f, g, h, k) {
+    var l = this.state;
+    if (null != l.fontBackgroundColor || null != l.fontBorderColor) {
+        var m = null;
+        k ? (g == mxConstants.ALIGN_CENTER ? c -= e / 2 : g == mxConstants.ALIGN_RIGHT && (c -= e), h == mxConstants.ALIGN_MIDDLE ? d -= f / 2 : h == mxConstants.ALIGN_BOTTOM && (d -= f), m = new mxRectangle((c + 1) * l.scale, d * l.scale, (e - 2) * l.scale, (f + 2) * l.scale)) : null != a.getBBox && this.root.ownerDocument == document ? (m = a.getBBox(), b = mxClient.IS_IE && mxClient.IS_SVG, m = new mxRectangle(m.x, m.y + (b ? 0 :
+            1), m.width, m.height + (b ? 1 : 0))) : (m = document.createElement("div"), m.style.lineHeight = Math.round(l.fontSize * mxConstants.LINE_HEIGHT) + "px", m.style.fontSize = Math.round(l.fontSize) + "px", m.style.fontFamily = l.fontFamily, m.style.whiteSpace = "nowrap", m.style.position = "absolute", m.style.visibility = "hidden", m.style.display = mxClient.IS_QUIRKS ? "inline" : "inline-block", m.style.zoom = "1", (l.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && (m.style.fontWeight = "bold"), (l.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC &&
+            (m.style.fontStyle = "italic"), b = mxUtils.htmlEntities(b, !1), m.innerHTML = b.replace(/\n/g, "\x3cbr/\x3e"), document.body.appendChild(m), e = m.offsetWidth, f = m.offsetHeight, m.parentNode.removeChild(m), g == mxConstants.ALIGN_CENTER ? c -= e / 2 : g == mxConstants.ALIGN_RIGHT && (c -= e), h == mxConstants.ALIGN_MIDDLE ? d -= f / 2 : h == mxConstants.ALIGN_BOTTOM && (d -= f), m = new mxRectangle((c + 1) * l.scale, (d + 2) * l.scale, e * l.scale, (f + 1) * l.scale));
+        null != m && (b = this.createElement("rect"), b.setAttribute("fill", l.fontBackgroundColor || "none"), b.setAttribute("stroke",
+            l.fontBorderColor || "none"), b.setAttribute("x", Math.floor(m.x - 1)), b.setAttribute("y", Math.floor(m.y - 1)), b.setAttribute("width", Math.ceil(m.width + 2)), b.setAttribute("height", Math.ceil(m.height)), l = null != l.fontBorderColor ? Math.max(1, this.format(l.scale)) : 0, b.setAttribute("stroke-width", l), this.root.ownerDocument == document && 1 == mxUtils.mod(l, 2) && b.setAttribute("transform", "translate(0.5, 0.5)"), a.insertBefore(b, a.firstChild))
+    }
+};
+mxSvgCanvas2D.prototype.stroke = function() {
+    this.addNode(!1, !0)
+};
+mxSvgCanvas2D.prototype.fill = function() {
+    this.addNode(!0, !1)
+};
+mxSvgCanvas2D.prototype.fillAndStroke = function() {
+    this.addNode(!0, !0)
+};
+var mxVmlCanvas2D = function(a) {
+    mxAbstractCanvas2D.call(this);
+    this.root = a
+};
+mxUtils.extend(mxVmlCanvas2D, mxAbstractCanvas2D);
+mxVmlCanvas2D.prototype.node = null;
+mxVmlCanvas2D.prototype.textEnabled = !0;
+mxVmlCanvas2D.prototype.moveOp = "m";
+mxVmlCanvas2D.prototype.lineOp = "l";
+mxVmlCanvas2D.prototype.curveOp = "c";
+mxVmlCanvas2D.prototype.closeOp = "x";
+mxVmlCanvas2D.prototype.rotatedHtmlBackground = "";
+mxVmlCanvas2D.prototype.vmlScale = 1;
+mxVmlCanvas2D.prototype.addNode = function(a, b) {
+    var c = this.node,
+        d = this.state;
+    if (null != c) {
+        if ("shape" == c.nodeName)
+            if (null != this.path && 0 < this.path.length) c.path = this.path.join(" ") + " e", c.style.width = this.root.style.width, c.style.height = this.root.style.height, c.coordsize = parseInt(c.style.width) + " " + parseInt(c.style.height);
+            else return;
+        c.strokeweight = this.format(Math.max(1, d.strokeWidth * d.scale / this.vmlScale)) + "px";
+        d.shadow && this.root.appendChild(this.createShadow(c, a && null != d.fillColor, b && null != d.strokeColor));
+        b && null != d.strokeColor ? (c.stroked = "true", c.strokecolor = d.strokeColor) : c.stroked = "false";
+        c.appendChild(this.createStroke());
+        a && null != d.fillColor ? c.appendChild(this.createFill()) : this.pointerEvents && ("shape" != c.nodeName || this.path[this.path.length - 1] == this.closeOp) ? c.appendChild(this.createTransparentFill()) : c.filled = "false";
+        this.root.appendChild(c)
+    }
+};
+mxVmlCanvas2D.prototype.createTransparentFill = function() {
+    var a = document.createElement(mxClient.VML_PREFIX + ":fill");
+    a.src = mxClient.imageBasePath + "/transparent.gif";
+    a.type = "tile";
+    return a
+};
+mxVmlCanvas2D.prototype.createFill = function() {
+    var a = this.state,
+        b = document.createElement(mxClient.VML_PREFIX + ":fill");
+    b.color = a.fillColor;
+    if (null != a.gradientColor) {
+        b.type = "gradient";
+        b.method = "none";
+        b.color2 = a.gradientColor;
+        var c = 180 - a.rotation,
+            c = a.gradientDirection == mxConstants.DIRECTION_WEST ? c - (90 + ("x" == this.root.style.flip ? 180 : 0)) : a.gradientDirection == mxConstants.DIRECTION_EAST ? c + (90 + ("x" == this.root.style.flip ? 180 : 0)) : a.gradientDirection == mxConstants.DIRECTION_NORTH ? c - (180 + ("y" == this.root.style.flip ?
+                -180 : 0)) : c + ("y" == this.root.style.flip ? -180 : 0);
+        if ("x" == this.root.style.flip || "y" == this.root.style.flip) c *= -1;
+        b.angle = mxUtils.mod(c, 360);
+        b.opacity = 100 * a.alpha * a.fillAlpha + "%";
+        b.setAttribute(mxClient.OFFICE_PREFIX + ":opacity2", 100 * a.alpha * a.gradientAlpha + "%")
+    } else 1 > a.alpha && (b.opacity = 100 * a.alpha + "%");
+    return b
+};
+mxVmlCanvas2D.prototype.createStroke = function() {
+    var a = this.state,
+        b = document.createElement(mxClient.VML_PREFIX + ":stroke");
+    b.endcap = a.lineCap || "flat";
+    b.joinstyle = a.lineJoin || "miter";
+    b.miterlimit = a.miterLimit || "10";
+    1 > a.alpha && (b.opacity = 100 * a.alpha + "%");
+    a.dashed && (b.dashstyle = this.getVmlDashStyle());
+    return b
+};
+mxVmlCanvas2D.prototype.getVmlDashStyle = function() {
+    var a = "dash";
+    if (null != this.state.dashPattern) {
+        var b = this.state.dashPattern.split(" ");
+        0 < b.length && 1 == b[0] && (a = "0 2")
+    }
+    return a
+};
+mxVmlCanvas2D.prototype.createShadow = function(a, b, c) {
+    var d = this.state,
+        e = -d.rotation * (Math.PI / 180),
+        f = Math.cos(e),
+        e = Math.sin(e),
+        g = d.shadowDx * d.scale,
+        h = d.shadowDy * d.scale;
+    "x" == this.root.style.flip ? g *= -1 : "y" == this.root.style.flip && (h *= -1);
+    var k = a.cloneNode(!0);
+    k.style.marginLeft = Math.round(g * f - h * e) + "px";
+    k.style.marginTop = Math.round(g * e + h * f) + "px";
+    8 == document.documentMode && (k.strokeweight = a.strokeweight, "shape" == a.nodeName && (k.path = this.path.join(" ") + " e", k.style.width = this.root.style.width, k.style.height =
+        this.root.style.height, k.coordsize = parseInt(a.style.width) + " " + parseInt(a.style.height)));
+    c ? (k.strokecolor = d.shadowColor, k.appendChild(this.createShadowStroke())) : k.stroked = "false";
+    b ? k.appendChild(this.createShadowFill()) : k.filled = "false";
+    return k
+};
+mxVmlCanvas2D.prototype.createShadowFill = function() {
+    var a = document.createElement(mxClient.VML_PREFIX + ":fill");
+    a.color = this.state.shadowColor;
+    a.opacity = 100 * this.state.alpha * this.state.shadowAlpha + "%";
+    return a
+};
+mxVmlCanvas2D.prototype.createShadowStroke = function() {
+    var a = this.createStroke();
+    a.opacity = 100 * this.state.alpha * this.state.shadowAlpha + "%";
+    return a
+};
+mxVmlCanvas2D.prototype.rotate = function(a, b, c, d, e) {
+    b && c ? a += 180 : b ? this.root.style.flip = "x" : c && (this.root.style.flip = "y");
+    if (b ? !c : c) a *= -1;
+    this.root.style.rotation = a;
+    this.state.rotation += a;
+    this.state.rotationCx = d;
+    this.state.rotationCy = e
+};
+mxVmlCanvas2D.prototype.begin = function() {
+    mxAbstractCanvas2D.prototype.begin.apply(this, arguments);
+    this.node = document.createElement(mxClient.VML_PREFIX + ":shape");
+    this.node.style.position = "absolute"
+};
+mxVmlCanvas2D.prototype.quadTo = function(a, b, c, d) {
+    var e = this.state,
+        f = (this.lastX + e.dx) * e.scale,
+        g = (this.lastY + e.dy) * e.scale;
+    a = (a + e.dx) * e.scale;
+    b = (b + e.dy) * e.scale;
+    c = (c + e.dx) * e.scale;
+    d = (d + e.dy) * e.scale;
+    var g = g + 2 / 3 * (b - g),
+        h = c + 2 / 3 * (a - c);
+    b = d + 2 / 3 * (b - d);
+    this.path.push("c " + this.format(f + 2 / 3 * (a - f)) + " " + this.format(g) + " " + this.format(h) + " " + this.format(b) + " " + this.format(c) + " " + this.format(d));
+    this.lastX = c / e.scale - e.dx;
+    this.lastY = d / e.scale - e.dy
+};
+mxVmlCanvas2D.prototype.createRect = function(a, b, c, d, e) {
+    var f = this.state;
+    a = document.createElement(a);
+    a.style.position = "absolute";
+    a.style.left = this.format((b + f.dx) * f.scale) + "px";
+    a.style.top = this.format((c + f.dy) * f.scale) + "px";
+    a.style.width = this.format(d * f.scale) + "px";
+    a.style.height = this.format(e * f.scale) + "px";
+    return a
+};
+mxVmlCanvas2D.prototype.rect = function(a, b, c, d) {
+    this.node = this.createRect(mxClient.VML_PREFIX + ":rect", a, b, c, d)
+};
+mxVmlCanvas2D.prototype.roundrect = function(a, b, c, d, e, f) {
+    this.node = this.createRect(mxClient.VML_PREFIX + ":roundrect", a, b, c, d);
+    this.node.setAttribute("arcsize", Math.max(100 * e / c, 100 * f / d) + "%")
+};
+mxVmlCanvas2D.prototype.ellipse = function(a, b, c, d) {
+    this.node = this.createRect(mxClient.VML_PREFIX + ":oval", a, b, c, d)
+};
+mxVmlCanvas2D.prototype.image = function(a, b, c, d, e, f, g, h) {
+    var k = null;
+    f ? (k = this.createRect(mxClient.VML_PREFIX + ":rect", a, b, c, d), k.stroked = "false", a = document.createElement(mxClient.VML_PREFIX + ":fill"), a.aspect = f ? "atmost" : "ignore", a.rotate = "true", a.type = "frame", a.src = e, k.appendChild(a)) : (k = this.createRect(mxClient.VML_PREFIX + ":image", a, b, c, d), k.src = e);
+    g && h ? k.style.rotation = "180" : g ? k.style.flip = "x" : h && (k.style.flip = "y");
+    1 > this.state.alpha && (k.style.filter += "alpha(opacity\x3d" + 100 * this.state.alpha + ")");
+    this.root.appendChild(k)
+};
+mxVmlCanvas2D.prototype.createDiv = function(a, b, c, d) {
+    c = document.createElement("div");
+    var e = this.state,
+        f = "";
+    null != e.fontBackgroundColor && (f += "background-color:" + e.fontBackgroundColor + ";");
+    null != e.fontBorderColor && (f += "border:1px solid " + e.fontBorderColor + ";");
+    mxUtils.isNode(a) ? c.appendChild(a) : 0 < f.length && !d ? (d = document.createElement("div"), d.style.cssText = f, d.style.display = mxClient.IS_QUIRKS ? "inline" : "inline-block", d.style.zoom = "1", d.innerHTML = a, c.appendChild(d)) : (c.style.cssText = f, c.innerHTML = a);
+    a = c.style;
+    a.fontSize = Math.round(e.fontSize / this.vmlScale) + "px";
+    a.fontFamily = e.fontFamily;
+    a.color = e.fontColor;
+    a.verticalAlign = "top";
+    a.textAlign = b || "left";
+    a.lineHeight = Math.round(e.fontSize * mxConstants.LINE_HEIGHT / this.vmlScale) + "px";
+    (e.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && (a.fontWeight = "bold");
+    (e.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && (a.fontStyle = "italic");
+    (e.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE && (a.fontDecoration = "underline");
+    return c
+};
+mxVmlCanvas2D.prototype.text = function(a, b, c, d, e, f, g, h, k, l, m, n) {
+    if (this.textEnabled && null != e) {
+        var p = this.state;
+        if ("html" == k) {
+            null != p.rotation && (b = this.rotatePoint(a, b, p.rotation, p.rotationCx, p.rotationCy), a = b.x, b = b.y);
+            8 == document.documentMode ? (a += p.dx, b += p.dy) : (a *= p.scale, b *= p.scale);
+            k = 8 == document.documentMode ? document.createElement(mxClient.VML_PREFIX + ":group") : document.createElement("div");
+            k.style.position = "absolute";
+            k.style.display = "inline";
+            k.style.left = this.format(a) + "px";
+            k.style.top = this.format(b) +
+                "px";
+            k.style.zoom = p.scale;
+            var q = document.createElement("div");
+            q.style.position = "relative";
+            q.style.display = "inline";
+            var s = mxUtils.getAlignmentAsPoint(f, g),
+                r = s.x,
+                s = s.y;
+            e = this.createDiv(e, f, g, l);
+            f = document.createElement("div");
+            h ? (!m && 0 < c && (e.style.width = Math.round(c) + "px"), e.style.whiteSpace = "normal") : e.style.whiteSpace = "nowrap";
+            h = p.rotation + (n || 0);
+            this.rotateHtml && 0 != h ? (f.style.display = "inline", f.style.zoom = "1", f.appendChild(e), 8 == document.documentMode && "DIV" != this.root.nodeName ? (q.appendChild(f), k.appendChild(q)) :
+                k.appendChild(f)) : 8 == document.documentMode ? (q.appendChild(e), k.appendChild(q)) : (e.style.display = "inline", k.appendChild(e));
+            "DIV" != this.root.nodeName ? (n = document.createElement(mxClient.VML_PREFIX + ":rect"), n.stroked = "false", n.filled = "false", n.appendChild(k), this.root.appendChild(n)) : this.root.appendChild(k);
+            m ? (e.style.overflow = "hidden", 0 < c && (e.style.width = Math.round(c) + "px"), 0 < d && 8 == document.documentMode && (e.style.maxHeight = Math.round(d) + "px")) : l && (e.style.width = c + "px", 0 < d && (e.style.maxHeight = Math.round(d) +
+                "px"));
+            if (this.rotateHtml && 0 != h) {
+                c = h * (Math.PI / 180);
+                h = parseFloat(parseFloat(Math.cos(c)).toFixed(8));
+                n = parseFloat(parseFloat(Math.sin(-c)).toFixed(8));
+                c %= 2 * Math.PI;
+                0 > c && (c += 2 * Math.PI);
+                c %= Math.PI;
+                c > Math.PI / 2 && (c = Math.PI - c);
+                g = Math.cos(c);
+                var t = Math.sin(c);
+                8 == document.documentMode && (e.style.display = "inline-block", f.style.display = "inline-block", q.style.display = "inline-block");
+                e.style.visibility = "hidden";
+                document.body.appendChild(e);
+                c = e.offsetWidth;
+                q = e.offsetHeight;
+                if (mxClient.IS_QUIRKS && (m || l) && q > d) q =
+                    d, e.style.height = q + "px";
+                d = q;
+                m = (d - d * g + c * -t) / 2 - n * c * (r + 0.5) + h * d * (s + 0.5);
+                l = (c - c * g + d * -t) / 2 + h * c * (r + 0.5) + n * d * (s + 0.5);
+                "group" == k.nodeName && "DIV" == this.root.nodeName ? (r = document.createElement("div"), r.style.display = "inline-block", r.style.position = "absolute", r.style.left = this.format(a + (l - c / 2) * p.scale) + "px", r.style.top = this.format(b + (m - d / 2) * p.scale) + "px", k.parentNode.appendChild(r), r.appendChild(k)) : (p = 8 == document.documentMode ? 1 : p.scale, k.style.left = this.format(a + (l - c / 2) * p) + "px", k.style.top = this.format(b + (m -
+                    d / 2) * p) + "px");
+                f.style.filter = "progid:DXImageTransform.Microsoft.Matrix(M11\x3d" + h + ", M12\x3d" + n + ", M21\x3d" + -n + ", M22\x3d" + h + ", sizingMethod\x3d'auto expand')";
+                f.style.backgroundColor = this.rotatedHtmlBackground;
+                1 > this.state.alpha && (f.style.filter += "alpha(opacity\x3d" + 100 * this.state.alpha + ")");
+                e.style.visibility = "";
+                f.appendChild(e)
+            } else 8 != document.documentMode ? (e.style.verticalAlign = "top", 1 > this.state.alpha && (k.style.filter = "alpha(opacity\x3d" + 100 * this.state.alpha + ")"), p = e.parentNode, e.style.visibility =
+                "hidden", document.body.appendChild(e), c = e.offsetWidth, q = e.offsetHeight, mxClient.IS_QUIRKS && (m && q > d) && (q = d, e.style.height = q + "px"), d = q, e.style.visibility = "", p.appendChild(e), k.style.left = this.format(a + c * r * this.state.scale) + "px", k.style.top = this.format(b + d * s * this.state.scale) + "px") : (1 > this.state.alpha && (e.style.filter = "alpha(opacity\x3d" + 100 * this.state.alpha + ")"), q.style.left = 100 * r + "%", q.style.top = 100 * s + "%")
+        } else this.plainText(a, b, c, d, mxUtils.htmlEntities(e, !1), f, g, h, k, l, m, n)
+    }
+};
+mxVmlCanvas2D.prototype.plainText = function(a, b, c, d, e, f, g, h, k, l, m, n) {
+    d = this.state;
+    a = (a + d.dx) * d.scale;
+    b = (b + d.dy) * d.scale;
+    c = document.createElement(mxClient.VML_PREFIX + ":shape");
+    c.style.width = "1px";
+    c.style.height = "1px";
+    c.stroked = "false";
+    l = document.createElement(mxClient.VML_PREFIX + ":fill");
+    l.color = d.fontColor;
+    l.opacity = 100 * d.alpha + "%";
+    c.appendChild(l);
+    l = document.createElement(mxClient.VML_PREFIX + ":path");
+    l.textpathok = "true";
+    l.v = "m " + this.format(0) + " " + this.format(0) + " l " + this.format(1) + " " + this.format(0);
+    c.appendChild(l);
+    l = document.createElement(mxClient.VML_PREFIX + ":textpath");
+    l.style.cssText = "v-text-align:" + f;
+    l.style.align = f;
+    l.style.fontFamily = d.fontFamily;
+    l.string = e;
+    l.on = "true";
+    f = Math.round(d.fontSize * d.scale / this.vmlScale);
+    l.style.fontSize = f + "px";
+    (d.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD && (l.style.fontWeight = "bold");
+    (d.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC && (l.style.fontStyle = "italic");
+    (d.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE &&
+        (l.style.textDecoration = "underline");
+    e = e.split("\n");
+    d = f + (e.length - 1) * f * mxConstants.LINE_HEIGHT;
+    f = e = 0;
+    g == mxConstants.ALIGN_BOTTOM ? f = -d / 2 : g != mxConstants.ALIGN_MIDDLE && (f = d / 2);
+    null != n && (c.style.rotation = n, g = n * (Math.PI / 180), e = Math.sin(g) * f, f *= Math.cos(g));
+    c.appendChild(l);
+    c.style.left = this.format(a - e) + "px";
+    c.style.top = this.format(b + f) + "px";
+    this.root.appendChild(c)
+};
+mxVmlCanvas2D.prototype.stroke = function() {
+    this.addNode(!1, !0)
+};
+mxVmlCanvas2D.prototype.fill = function() {
+    this.addNode(!0, !1)
+};
+mxVmlCanvas2D.prototype.fillAndStroke = function() {
+    this.addNode(!0, !0)
+};
+
+function mxGuide(a, b) {
+    this.graph = a;
+    this.setStates(b)
+}
+mxGuide.prototype.graph = null;
+mxGuide.prototype.states = null;
+mxGuide.prototype.horizontal = !0;
+mxGuide.prototype.vertical = !0;
+mxGuide.prototype.guideX = null;
+mxGuide.prototype.guideY = null;
+mxGuide.prototype.setStates = function(a) {
+    this.states = a
+};
+mxGuide.prototype.isEnabledForEvent = function(a) {
+    return !0
+};
+mxGuide.prototype.getGuideTolerance = function() {
+    return this.graph.gridSize * this.graph.view.scale / 2
+};
+mxGuide.prototype.createGuideShape = function(a) {
+    a = new mxPolyline([], mxConstants.GUIDE_COLOR, mxConstants.GUIDE_STROKEWIDTH);
+    a.isDashed = !0;
+    return a
+};
+mxGuide.prototype.move = function(a, b, c) {
+    if (null != this.states && (this.horizontal || this.vertical) && null != a && null != b) {
+        var d = this.graph.getView().translate,
+            e = this.graph.getView().scale,
+            f = b.x,
+            g = b.y,
+            h = !1,
+            k = !1,
+            l = this.getGuideTolerance(),
+            m = l,
+            n = l,
+            l = a.clone();
+        l.x += b.x;
+        l.y += b.y;
+        var p = l.x,
+            q = l.x + l.width,
+            s = l.getCenterX(),
+            r = l.y,
+            t = l.y + l.height,
+            v = l.getCenterY();
+        b = function(b) {
+            b += this.graph.panDx;
+            var c = !1;
+            Math.abs(b - s) < m ? (f = b - a.getCenterX(), m = Math.abs(b - s), c = !0) : Math.abs(b - p) < m ? (f = b - a.x, m = Math.abs(b - p), c = !0) : Math.abs(b -
+                q) < m && (f = b - a.x - a.width, m = Math.abs(b - q), c = !0);
+            if (c) {
+                null == this.guideX && (this.guideX = this.createGuideShape(!0), this.guideX.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG, this.guideX.pointerEvents = !1, this.guideX.init(this.graph.getView().getOverlayPane()));
+                var d = this.graph.container;
+                b -= this.graph.panDx;
+                this.guideX.points = [new mxPoint(b, -this.graph.panDy), new mxPoint(b, d.scrollHeight - 3 - this.graph.panDy)]
+            }
+            h = h || c
+        };
+        for (var l = function(b) {
+                b += this.graph.panDy;
+                var c = !1;
+                Math.abs(b - v) < n ? (g = b - a.getCenterY(), n = Math.abs(b - v), c = !0) : Math.abs(b - r) < n ? (g = b - a.y, n = Math.abs(b - r), c = !0) : Math.abs(b - t) < n && (g = b - a.y - a.height, n = Math.abs(b - t), c = !0);
+                if (c) {
+                    null == this.guideY && (this.guideY = this.createGuideShape(!1), this.guideY.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG, this.guideY.pointerEvents = !1, this.guideY.init(this.graph.getView().getOverlayPane()));
+                    var d = this.graph.container;
+                    b -= this.graph.panDy;
+                    this.guideY.points = [new mxPoint(-this.graph.panDx,
+                        b), new mxPoint(d.scrollWidth - 3 - this.graph.panDx, b)]
+                }
+                k = k || c
+            }, w = 0; w < this.states.length; w++) {
+            var u = this.states[w];
+            null != u && (this.horizontal && (b.call(this, u.getCenterX()), b.call(this, u.x), b.call(this, u.x + u.width)), this.vertical && (l.call(this, u.getCenterY()), l.call(this, u.y), l.call(this, u.y + u.height)))
+        }!h && null != this.guideX ? this.guideX.node.style.visibility = "hidden" : null != this.guideX && (this.guideX.node.style.visibility = "visible", this.guideX.redraw());
+        !k && null != this.guideY ? this.guideY.node.style.visibility =
+            "hidden" : null != this.guideY && (this.guideY.node.style.visibility = "visible", this.guideY.redraw());
+        c && (h || (c = a.x - (this.graph.snap(a.x / e - d.x) + d.x) * e, f = this.graph.snap(f / e) * e - c), k || (d = a.y - (this.graph.snap(a.y / e - d.y) + d.y) * e, g = this.graph.snap(g / e) * e - d));
+        b = new mxPoint(f, g)
+    }
+    return b
+};
+mxGuide.prototype.hide = function() {
+    null != this.guideX && (this.guideX.node.style.visibility = "hidden");
+    null != this.guideY && (this.guideY.node.style.visibility = "hidden")
+};
+mxGuide.prototype.destroy = function() {
+    null != this.guideX && (this.guideX.destroy(), this.guideX = null);
+    null != this.guideY && (this.guideY.destroy(), this.guideY = null)
+};
+
+function mxStencil(a) {
+    this.desc = a;
+    this.parseDescription();
+    this.parseConstraints()
+}
+mxStencil.defaultLocalized = !1;
+mxStencil.prototype.desc = null;
+mxStencil.prototype.constraints = null;
+mxStencil.prototype.aspect = null;
+mxStencil.prototype.w0 = null;
+mxStencil.prototype.h0 = null;
+mxStencil.prototype.bgNode = null;
+mxStencil.prototype.fgNode = null;
+mxStencil.prototype.strokewidth = null;
+mxStencil.prototype.parseDescription = function() {
+    this.fgNode = this.desc.getElementsByTagName("foreground")[0];
+    this.bgNode = this.desc.getElementsByTagName("background")[0];
+    this.w0 = Number(this.desc.getAttribute("w") || 100);
+    this.h0 = Number(this.desc.getAttribute("h") || 100);
+    var a = this.desc.getAttribute("aspect");
+    this.aspect = null != a ? a : "variable";
+    a = this.desc.getAttribute("strokewidth");
+    this.strokewidth = null != a ? a : "1"
+};
+mxStencil.prototype.parseConstraints = function() {
+    var a = this.desc.getElementsByTagName("connections")[0];
+    if (null != a && (a = mxUtils.getChildNodes(a), null != a && 0 < a.length)) {
+        this.constraints = [];
+        for (var b = 0; b < a.length; b++) this.constraints.push(this.parseConstraint(a[b]))
+    }
+};
+mxStencil.prototype.parseConstraint = function(a) {
+    var b = Number(a.getAttribute("x")),
+        c = Number(a.getAttribute("y"));
+    a = "1" == a.getAttribute("perimeter");
+    return new mxConnectionConstraint(new mxPoint(b, c), a)
+};
+mxStencil.prototype.evaluateTextAttribute = function(a, b, c) {
+    b = this.evaluateAttribute(a, b, c);
+    a = a.getAttribute("localized");
+    if (mxStencil.defaultLocalized && null == a || "1" == a) b = mxResources.get(b);
+    return b
+};
+mxStencil.prototype.evaluateAttribute = function(a, b, c) {
+    b = a.getAttribute(b);
+    null == b && (a = mxUtils.getTextContent(a), null != a && (a = mxUtils.eval(a), "function" == typeof a && (b = a(c))));
+    return b
+};
+mxStencil.prototype.drawShape = function(a, b, c, d, e, f) {
+    this.drawChildren(a, b, c, d, e, f, this.bgNode, !1);
+    this.drawChildren(a, b, c, d, e, f, this.fgNode, !0)
+};
+mxStencil.prototype.drawChildren = function(a, b, c, d, e, f, g, h) {
+    if (null != g) {
+        var k = mxUtils.getValue(b.style, mxConstants.STYLE_DIRECTION, null);
+        c = this.computeAspect(b.style, c, d, e, f, k);
+        d = Math.min(c.width, c.height);
+        d = "inherit" == this.strokewidth ? Number(mxUtils.getNumber(b.style, mxConstants.STYLE_STROKEWIDTH, 1)) : Number(this.strokewidth) * d;
+        a.setStrokeWidth(d);
+        for (g = g.firstChild; null != g;) g.nodeType == mxConstants.NODETYPE_ELEMENT && this.drawNode(a, b, g, c, h), g = g.nextSibling
+    }
+};
+mxStencil.prototype.computeAspect = function(a, b, c, d, e, f) {
+    a = b;
+    b = d / this.w0;
+    var g = e / this.h0;
+    if (f = "north" == f || "south" == f) {
+        g = d / this.h0;
+        b = e / this.w0;
+        var h = (d - e) / 2;
+        a += h;
+        c -= h
+    }
+    "fixed" == this.aspect && (b = g = Math.min(b, g), f ? (a += (e - this.w0 * b) / 2, c += (d - this.h0 * g) / 2) : (a += (d - this.w0 * b) / 2, c += (e - this.h0 * g) / 2));
+    return new mxRectangle(a, c, b, g)
+};
+mxStencil.prototype.drawNode = function(a, b, c, d, e) {
+    var f = c.nodeName,
+        g = d.x,
+        h = d.y,
+        k = d.width,
+        l = d.height,
+        m = Math.min(k, l);
+    if ("save" == f) a.save();
+    else if ("restore" == f) a.restore();
+    else if ("path" == f) {
+        a.begin();
+        for (c = c.firstChild; null != c;) c.nodeType == mxConstants.NODETYPE_ELEMENT && this.drawNode(a, b, c, d, e), c = c.nextSibling
+    } else if ("close" == f) a.close();
+    else if ("move" == f) a.moveTo(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l);
+    else if ("line" == f) a.lineTo(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) *
+        l);
+    else if ("quad" == f) a.quadTo(g + Number(c.getAttribute("x1")) * k, h + Number(c.getAttribute("y1")) * l, g + Number(c.getAttribute("x2")) * k, h + Number(c.getAttribute("y2")) * l);
+    else if ("curve" == f) a.curveTo(g + Number(c.getAttribute("x1")) * k, h + Number(c.getAttribute("y1")) * l, g + Number(c.getAttribute("x2")) * k, h + Number(c.getAttribute("y2")) * l, g + Number(c.getAttribute("x3")) * k, h + Number(c.getAttribute("y3")) * l);
+    else if ("arc" == f) a.arcTo(Number(c.getAttribute("rx")) * k, Number(c.getAttribute("ry")) * l, Number(c.getAttribute("x-axis-rotation")),
+        Number(c.getAttribute("large-arc-flag")), Number(c.getAttribute("sweep-flag")), g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l);
+    else if ("rect" == f) a.rect(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, Number(c.getAttribute("w")) * k, Number(c.getAttribute("h")) * l);
+    else if ("roundrect" == f) b = c.getAttribute("arcsize"), 0 == b && (b = 100 * mxConstants.RECTANGLE_ROUNDING_FACTOR), m = Number(c.getAttribute("w")) * k, d = Number(c.getAttribute("h")) * l, b = Number(b) / 100, b = Math.min(m * b, d * b), a.roundrect(g +
+        Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, m, d, b, b);
+    else if ("ellipse" == f) a.ellipse(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, Number(c.getAttribute("w")) * k, Number(c.getAttribute("h")) * l);
+    else if ("image" == f) b = this.evaluateAttribute(c, "src", b), a.image(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, Number(c.getAttribute("w")) * k, Number(c.getAttribute("h")) * l, b, !1, "1" == c.getAttribute("flipH"), "1" == c.getAttribute("flipV"));
+    else if ("text" == f) {
+        m = this.evaluateTextAttribute(c,
+            "str", b);
+        d = "1" == c.getAttribute("vertical") ? -90 : 0;
+        if ("0" == c.getAttribute("align-shape")) {
+            var n = b.rotation,
+                p = 1 == mxUtils.getValue(b.style, mxConstants.STYLE_FLIPH, 0);
+            b = 1 == mxUtils.getValue(b.style, mxConstants.STYLE_FLIPV, 0);
+            d = p && b ? d - n : p || b ? d + n : d - n
+        }
+        d -= c.getAttribute("rotation");
+        a.text(g + Number(c.getAttribute("x")) * k, h + Number(c.getAttribute("y")) * l, 0, 0, m, c.getAttribute("align") || "left", c.getAttribute("valign") || "top", !1, "", !1, !1, d)
+    } else if ("include-shape" == f) n = mxStencilRegistry.getStencil(c.getAttribute("name")),
+        null != n && (g += Number(c.getAttribute("x")) * k, h += Number(c.getAttribute("y")) * l, m = Number(c.getAttribute("w")) * k, d = Number(c.getAttribute("h")) * l, n.drawShape(a, b, g, h, m, d));
+    else if ("fillstroke" == f) a.fillAndStroke();
+    else if ("fill" == f) a.fill();
+    else if ("stroke" == f) a.stroke();
+    else if ("strokewidth" == f) a.setStrokeWidth(Number(c.getAttribute("width")) * m);
+    else if ("dashed" == f) a.setDashed("1" == c.getAttribute("dashed"));
+    else if ("dashpattern" == f) {
+        if (c = c.getAttribute("pattern"), null != c) {
+            c = c.split(" ");
+            k = [];
+            for (l = 0; l <
+                c.length; l++) 0 < c[l].length && k.push(Number(c[l]) * m);
+            c = k.join(" ");
+            a.setDashPattern(c)
+        }
+    } else "strokecolor" == f ? a.setStrokeColor(c.getAttribute("color")) : "linecap" == f ? a.setLineCap(c.getAttribute("cap")) : "linejoin" == f ? a.setLineJoin(c.getAttribute("join")) : "miterlimit" == f ? a.setMiterLimit(Number(c.getAttribute("limit"))) : "fillcolor" == f ? a.setFillColor(c.getAttribute("color")) : "alpha" == f ? a.setAlpha(c.getAttribute("alpha")) : "fontcolor" == f ? a.setFontColor(c.getAttribute("color")) : "fontstyle" == f ? a.setFontStyle(c.getAttribute("style")) :
+        "fontfamily" == f ? a.setFontFamily(c.getAttribute("family")) : "fontsize" == f && a.setFontSize(Number(c.getAttribute("size")) * m);
+    e && ("fillstroke" == f || "fill" == f || "stroke" == f) && a.setShadow(!1)
+};
+
+function mxShape(a) {
+    this.stencil = a;
+    this.strokewidth = 1;
+    this.rotation = 0;
+    this.opacity = 100;
+    this.flipV = this.flipH = !1
+}
+mxShape.prototype.dialect = null;
+mxShape.prototype.scale = 1;
+mxShape.prototype.bounds = null;
+mxShape.prototype.points = null;
+mxShape.prototype.node = null;
+mxShape.prototype.style = null;
+mxShape.prototype.style = null;
+mxShape.prototype.boundingBox = null;
+mxShape.prototype.stencil = null;
+mxShape.prototype.svgStrokeTolerance = 6;
+mxShape.prototype.pointerEvents = !0;
+mxShape.prototype.stencilPointerEvents = !1;
+mxShape.prototype.vmlScale = 1;
+mxShape.prototype.init = function(a) {
+    null == this.node && (this.node = this.create(a), null != a && a.appendChild(this.node))
+};
+mxShape.prototype.isParseVml = function() {
+    return !0
+};
+mxShape.prototype.isHtmlAllowed = function() {
+    return !1
+};
+mxShape.prototype.getSvgScreenOffset = function() {
+    return 1 == mxUtils.mod(Math.max(1, Math.round(this.strokewidth * this.scale)), 2) ? 0.5 : 0
+};
+mxShape.prototype.create = function(a) {
+    var b = null;
+    return b = null != a.ownerSVGElement ? this.createSvg(a) : 8 == document.documentMode || this.dialect == mxConstants.DIALECT_SVG || this.dialect != mxConstants.DIALECT_VML && this.isHtmlAllowed() ? this.createHtml(a) : this.createVml(a)
+};
+mxShape.prototype.createSvg = function() {
+    return document.createElementNS(mxConstants.NS_SVG, "g")
+};
+mxShape.prototype.createVml = function() {
+    var a = document.createElement(mxClient.VML_PREFIX + ":group");
+    a.style.position = "absolute";
+    return a
+};
+mxShape.prototype.createHtml = function() {
+    var a = document.createElement("div");
+    a.style.position = "absolute";
+    return a
+};
+mxShape.prototype.reconfigure = function() {
+    this.redraw()
+};
+mxShape.prototype.redraw = function() {
+    this.updateBoundsFromPoints();
+    this.checkBounds() ? (this.node.style.visibility = "", "DIV" == this.node.nodeName && this.isHtmlAllowed() ? this.redrawHtmlShape() : this.redrawShape(), this.updateBoundingBox()) : (this.node.style.visibility = "hidden", this.boundingBox = null)
+};
+mxShape.prototype.updateBoundsFromPoints = function() {
+    var a = this.points;
+    if (null != a && 0 < a.length && null != a[0]) {
+        this.bounds = new mxRectangle(Number(a[0].x), Number(a[0].y), 1, 1);
+        for (var b = 1; b < this.points.length; b++) null != a[b] && this.bounds.add(new mxRectangle(Number(a[b].x), Number(a[b].y), 1, 1))
+    }
+};
+mxShape.prototype.checkBounds = function() {
+    return null != this.bounds && !isNaN(this.bounds.x) && !isNaN(this.bounds.y) && !isNaN(this.bounds.width) && !isNaN(this.bounds.height) && 0 < this.bounds.width && 0 < this.bounds.height
+};
+mxShape.prototype.createVmlGroup = function() {
+    var a = document.createElement(mxClient.VML_PREFIX + ":group");
+    a.style.position = "absolute";
+    a.style.width = this.node.style.width;
+    a.style.height = this.node.style.height;
+    return a
+};
+mxShape.prototype.redrawShape = function() {
+    var a = this.createCanvas();
+    for (a.pointerEvents = this.pointerEvents; this.node.hasChildNodes();) this.node.removeChild(this.node.lastChild);
+    this.paint(a);
+    this.node != a.root && this.node.insertAdjacentHTML("beforeend", a.root.outerHTML);
+    "DIV" == this.node.nodeName && 8 == document.documentMode && (this.node.style.filter = "", (null == this.stencil || !this.stencilPointerEvents) && mxUtils.addTransparentBackgroundFilter(this.node));
+    this.destroyCanvas(a)
+};
+mxShape.prototype.createCanvas = function() {
+    var a = null,
+        b = null;
+    if (null != this.node.ownerSVGElement) a = new mxSvgCanvas2D(this.node, !1), a.strokeTolerance = this.svgStrokeTolerance, a.blockImagePointerEvents = mxClient.IS_NS && !mxClient.IS_SF && !mxClient.IS_GC, b = this.getSvgScreenOffset(), 0 != b ? this.node.setAttribute("transform", "translate(" + b + "," + b + ")") : this.node.removeAttribute("transform");
+    else {
+        this.updateVmlContainer();
+        var c = Math.max(1, Math.round(this.bounds.width)),
+            d = Math.max(1, Math.round(this.bounds.height)),
+            b = 8 == document.documentMode && this.isParseVml() ? this.createVmlGroup() : this.node,
+            a = new mxVmlCanvas2D(b, !1);
+        "" != b.tagUrn && (b.coordsize = c * this.vmlScale + "," + d * this.vmlScale, a.scale(this.vmlScale), a.vmlScale = this.vmlScale);
+        b = this.scale;
+        a.translate(-Math.round(this.bounds.x / b), -Math.round(this.bounds.y / b))
+    }
+    return a
+};
+mxShape.prototype.updateVmlContainer = function() {
+    this.node.style.left = Math.round(this.bounds.x) + "px";
+    this.node.style.top = Math.round(this.bounds.y) + "px";
+    var a = Math.max(1, Math.round(this.bounds.width)),
+        b = Math.max(1, Math.round(this.bounds.height));
+    this.node.style.width = a + "px";
+    this.node.style.height = b + "px";
+    this.node.style.overflow = "visible"
+};
+mxShape.prototype.destroyCanvas = function(a) {
+    if (a instanceof mxSvgCanvas2D) {
+        for (var b in a.gradients) {
+            var c = a.gradients[b];
+            c.mxRefCount = (c.mxRefCount || 0) + 1
+        }
+        this.releaseSvgGradients(this.oldGradients);
+        this.oldGradients = a.gradients
+    }
+};
+mxShape.prototype.paint = function(a) {
+    var b = this.scale,
+        c = this.bounds.x / b,
+        d = this.bounds.y / b,
+        e = this.bounds.width / b,
+        f = this.bounds.height / b;
+    if (this.isPaintBoundsInverted()) var g = (e - f) / 2,
+        c = c + g,
+        d = d - g,
+        g = e,
+        e = f,
+        f = g;
+    this.updateTransform(a, c, d, e, f);
+    this.configureCanvas(a, c, d, e, f);
+    if (null != this.stencil) this.paintStencilShape(a, c, d, e, f);
+    else if (a.setStrokeWidth(this.strokewidth), null != this.points) {
+        c = [];
+        for (d = 0; d < this.points.length; d++) c.push(new mxPoint(this.points[d].x / b, this.points[d].y / b));
+        this.paintEdgeShape(a,
+            c)
+    } else this.paintVertexShape(a, c, d, e, f)
+};
+mxShape.prototype.configureCanvas = function(a, b, c, d, e) {
+    var f = null;
+    null != this.style && (f = this.style.dashPattern);
+    a.setAlpha(this.opacity / 100);
+    null != this.isShadow && a.setShadow(this.isShadow);
+    null != this.isDashed && a.setDashed(this.isDashed);
+    null != f && a.setDashPattern(f);
+    null != this.gradient ? (b = this.getGradientBounds(a, b, c, d, e), a.setGradient(this.fill, this.gradient, b.x, b.y, b.width, b.height, this.gradientDirection)) : a.setFillColor(this.fill);
+    a.setStrokeColor(this.stroke)
+};
+mxShape.prototype.getGradientBounds = function(a, b, c, d, e) {
+    return new mxRectangle(b, c, d, e)
+};
+mxShape.prototype.updateTransform = function(a, b, c, d, e) {
+    a.scale(this.scale);
+    a.rotate(this.getShapeRotation(), this.flipH, this.flipV, b + d / 2, c + e / 2)
+};
+mxShape.prototype.paintStencilShape = function(a, b, c, d, e) {
+    this.stencilPointerEvents && (this.dialect == mxConstants.DIALECT_SVG ? this.addTransparentBackgroundRectangle(this.node, b, c, d, e) : 8 != document.documentMode && this.setTransparentBackgroundImage(this.node));
+    this.stencil.drawShape(a, this, b, c, d, e)
+};
+mxShape.prototype.paintVertexShape = function(a, b, c, d, e) {
+    this.paintBackground(a, b, c, d, e);
+    a.setShadow(!1);
+    this.paintForeground(a, b, c, d, e)
+};
+mxShape.prototype.paintBackground = function(a, b, c, d, e) {};
+mxShape.prototype.paintForeground = function(a, b, c, d, e) {};
+mxShape.prototype.paintEdgeShape = function(a, b) {};
+mxShape.prototype.getArcSize = function(a, b) {
+    var c = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, 100 * mxConstants.RECTANGLE_ROUNDING_FACTOR) / 100;
+    return Math.min(a * c, b * c)
+};
+mxShape.prototype.paintGlassEffect = function(a, b, c, d, e, f) {
+    var g = Math.ceil(this.strokewidth / 2);
+    a.setGradient("#ffffff", "#ffffff", b, c, d, 0.6 * e, "south", 0.9, 0.1);
+    a.begin();
+    f += 2 * g;
+    this.isRounded ? (a.moveTo(b - g + f, c - g), a.quadTo(b - g, c - g, b - g, c - g + f), a.lineTo(b - g, c + 0.4 * e), a.quadTo(b + 0.5 * d, c + 0.7 * e, b + d + g, c + 0.4 * e), a.lineTo(b + d + g, c - g + f), a.quadTo(b + d + g, c - g, b + d + g - f, c - g)) : (a.moveTo(b - g, c - g), a.lineTo(b - g, c + 0.4 * e), a.quadTo(b + 0.5 * d, c + 0.7 * e, b + d + g, c + 0.4 * e), a.lineTo(b + d + g, c - g));
+    a.close();
+    a.fill()
+};
+mxShape.prototype.apply = function(a) {
+    this.state = a;
+    this.style = a.style;
+    if (null != this.style) {
+        this.fill = mxUtils.getValue(this.style, mxConstants.STYLE_FILLCOLOR, this.fill);
+        this.gradient = mxUtils.getValue(this.style, mxConstants.STYLE_GRADIENTCOLOR, this.gradient);
+        this.gradientDirection = mxUtils.getValue(this.style, mxConstants.STYLE_GRADIENT_DIRECTION, this.gradientDirection);
+        this.opacity = mxUtils.getValue(this.style, mxConstants.STYLE_OPACITY, this.opacity);
+        this.stroke = mxUtils.getValue(this.style, mxConstants.STYLE_STROKECOLOR,
+            this.stroke);
+        this.strokewidth = mxUtils.getNumber(this.style, mxConstants.STYLE_STROKEWIDTH, this.strokewidth);
+        this.spacing = mxUtils.getValue(this.style, mxConstants.STYLE_SPACING, this.spacing);
+        this.startSize = mxUtils.getNumber(this.style, mxConstants.STYLE_STARTSIZE, this.startSize);
+        this.endSize = mxUtils.getNumber(this.style, mxConstants.STYLE_ENDSIZE, this.endSize);
+        this.startArrow = mxUtils.getValue(this.style, mxConstants.STYLE_STARTARROW, this.startArrow);
+        this.endArrow = mxUtils.getValue(this.style, mxConstants.STYLE_ENDARROW,
+            this.endArrow);
+        this.rotation = mxUtils.getValue(this.style, mxConstants.STYLE_ROTATION, this.rotation);
+        this.direction = mxUtils.getValue(this.style, mxConstants.STYLE_DIRECTION, this.direction);
+        this.flipH = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_FLIPH, 0);
+        this.flipV = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_FLIPV, 0);
+        null != this.stencil && (this.flipH = 1 == mxUtils.getValue(this.style, "stencilFlipH", 0) || this.flipH, this.flipV = 1 == mxUtils.getValue(this.style, "stencilFlipV", 0) || this.flipV);
+        if ("north" ==
+            this.direction || "south" == this.direction) a = this.flipH, this.flipH = this.flipV, this.flipV = a;
+        this.isShadow = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_SHADOW, this.isShadow);
+        this.isDashed = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_DASHED, this.isDashed);
+        this.isRounded = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_ROUNDED, this.isRounded);
+        this.glass = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_GLASS, this.glass);
+        "none" == this.fill && (this.fill = null);
+        "none" == this.gradient && (this.gradient = null);
+        "none" == this.stroke && (this.stroke = null)
+    }
+};
+mxShape.prototype.setCursor = function(a) {
+    null == a && (a = "");
+    this.cursor = a;
+    null != this.node && (this.node.style.cursor = a)
+};
+mxShape.prototype.getCursor = function() {
+    return this.cursor
+};
+mxShape.prototype.updateBoundingBox = function() {
+    if (null != this.bounds) {
+        var a = this.createBoundingBox();
+        if (null != a) {
+            this.augmentBoundingBox(a);
+            var b = this.getShapeRotation();
+            0 != b && (a = mxUtils.getBoundingBox(a, b));
+            a.x = Math.floor(a.x);
+            a.y = Math.floor(a.y);
+            a.width = Math.ceil(a.width);
+            a.height = Math.ceil(a.height)
+        }
+        this.boundingBox = a
+    }
+};
+mxShape.prototype.createBoundingBox = function() {
+    var a = this.bounds.clone();
+    if (this.isPaintBoundsInverted()) {
+        var b = (a.width - a.height) / 2;
+        a.x += b;
+        a.y -= b;
+        b = a.width;
+        a.width = a.height;
+        a.height = b
+    }
+    return a
+};
+mxShape.prototype.augmentBoundingBox = function(a) {
+    this.isShadow && (a.width += Math.ceil(mxConstants.SHADOW_OFFSET_X * this.scale), a.height += Math.ceil(mxConstants.SHADOW_OFFSET_Y * this.scale));
+    var b = Math.ceil(this.strokewidth * this.scale);
+    a.grow(Math.ceil(b / 2))
+};
+mxShape.prototype.isPaintBoundsInverted = function() {
+    return null == this.stencil && ("north" == this.direction || "south" == this.direction)
+};
+mxShape.prototype.getRotation = function() {
+    return null != this.rotation ? this.rotation : 0
+};
+mxShape.prototype.getTextRotation = function() {
+    var a = this.getRotation();
+    1 != mxUtils.getValue(this.style, mxConstants.STYLE_HORIZONTAL, 1) && (a += mxText.prototype.verticalTextRotation);
+    return a
+};
+mxShape.prototype.getShapeRotation = function() {
+    var a = this.getRotation();
+    null != this.direction && ("north" == this.direction ? a += 270 : "west" == this.direction ? a += 180 : "south" == this.direction && (a += 90));
+    return a
+};
+mxShape.prototype.addTransparentBackgroundRectangle = function(a, b, c, d, e) {
+    a = document.createElementNS(mxConstants.NS_SVG, "rect");
+    a.setAttribute("x", b);
+    a.setAttribute("y", c);
+    a.setAttribute("width", d);
+    a.setAttribute("height", e);
+    a.setAttribute("fill", "none");
+    a.setAttribute("stroke", "none");
+    a.setAttribute("pointer-events", "all");
+    this.node.appendChild(a)
+};
+mxShape.prototype.setTransparentBackgroundImage = function(a) {
+    a.style.backgroundImage = "url('" + mxClient.imageBasePath + "/transparent.gif')"
+};
+mxShape.prototype.releaseSvgGradients = function(a) {
+    if (null != a)
+        for (var b in a) {
+            var c = a[b];
+            c.mxRefCount = (c.mxRefCount || 0) - 1;
+            0 == c.mxRefCount && null != c.parentNode && c.parentNode.removeChild(c)
+        }
+};
+mxShape.prototype.destroy = function() {
+    null != this.node && (mxEvent.release(this.node), null != this.node.parentNode && this.node.parentNode.removeChild(this.node), this.node = null);
+    this.releaseSvgGradients(this.oldGradients);
+    this.oldGradients = null
+};
+var mxStencilRegistry = {
+        stencils: [],
+        addStencil: function(a, b) {
+            mxStencilRegistry.stencils[a] = b
+        },
+        getStencil: function(a) {
+            return mxStencilRegistry.stencils[a]
+        }
+    },
+    mxMarker = {
+        markers: [],
+        addMarker: function(a, b) {
+            mxMarker.markers[a] = b
+        },
+        createMarker: function(a, b, c, d, e, f, g, h, k, l) {
+            var m = mxMarker.markers[c];
+            return null != m ? m(a, b, c, d, e, f, g, h, k, l) : null
+        }
+    };
+(function() {
+    function a(a, b, e, f, g, h, k, l, m, n) {
+        b = 1.118 * g * m;
+        l = 1.118 * h * m;
+        g *= k + m;
+        h *= k + m;
+        var p = f.clone();
+        p.x -= b;
+        p.y -= l;
+        k = e != mxConstants.ARROW_CLASSIC ? 1 : 0.75;
+        f.x += -g * k - b;
+        f.y += -h * k - l;
+        return function() {
+            a.begin();
+            a.moveTo(p.x, p.y);
+            a.lineTo(p.x - g - h / 2, p.y - h + g / 2);
+            e == mxConstants.ARROW_CLASSIC && a.lineTo(p.x - 3 * g / 4, p.y - 3 * h / 4);
+            a.lineTo(p.x + h / 2 - g, p.y - h - g / 2);
+            a.close();
+            n ? a.fillAndStroke() : a.stroke()
+        }
+    }
+
+    function b(a, b, e, f, g, h, k, l, m, n) {
+        l = e == mxConstants.ARROW_DIAMOND ? 0.7071 : 0.9862;
+        b = g * m * l;
+        l *= h * m;
+        g *= k + m;
+        h *= k + m;
+        var p = f.clone();
+        p.x -= b;
+        p.y -= l;
+        f.x += -g - b;
+        f.y += -h - l;
+        var q = e == mxConstants.ARROW_DIAMOND ? 2 : 3.4;
+        return function() {
+            a.begin();
+            a.moveTo(p.x, p.y);
+            a.lineTo(p.x - g / 2 - h / q, p.y + g / q - h / 2);
+            a.lineTo(p.x - g, p.y - h);
+            a.lineTo(p.x - g / 2 + h / q, p.y - h / 2 - g / q);
+            a.close();
+            n ? a.fillAndStroke() : a.stroke()
+        }
+    }
+    mxMarker.addMarker("classic", a);
+    mxMarker.addMarker("block", a);
+    mxMarker.addMarker("open", function(a, b, e, f, g, h, k, l, m, n) {
+        b = 1.118 * g * m;
+        e = 1.118 * h * m;
+        g *= k + m;
+        h *= k + m;
+        var p = f.clone();
+        p.x -= b;
+        p.y -= e;
+        f.x += 2 * -b;
+        f.y += 2 * -e;
+        return function() {
+            a.begin();
+            a.moveTo(p.x - g -
+                h / 2, p.y - h + g / 2);
+            a.lineTo(p.x, p.y);
+            a.lineTo(p.x + h / 2 - g, p.y - h - g / 2);
+            a.stroke()
+        }
+    });
+    mxMarker.addMarker("oval", function(a, b, e, f, g, h, k, l, m, n) {
+        var p = k / 2,
+            q = f.clone();
+        f.x -= g * p;
+        f.y -= h * p;
+        return function() {
+            a.ellipse(q.x - p, q.y - p, k, k);
+            n ? a.fillAndStroke() : a.stroke()
+        }
+    });
+    mxMarker.addMarker("diamond", b);
+    mxMarker.addMarker("diamondThin", b)
+})();
+
+function mxActor(a, b, c, d) {
+    mxShape.call(this);
+    this.bounds = a;
+    this.fill = b;
+    this.stroke = c;
+    this.strokewidth = null != d ? d : 1
+}
+mxUtils.extend(mxActor, mxShape);
+mxActor.prototype.paintVertexShape = function(a, b, c, d, e) {
+    a.translate(b, c);
+    a.begin();
+    this.redrawPath(a, b, c, d, e);
+    a.fillAndStroke()
+};
+mxActor.prototype.redrawPath = function(a, b, c, d, e) {
+    b = d / 3;
+    a.moveTo(0, e);
+    a.curveTo(0, 3 * e / 5, 0, 2 * e / 5, d / 2, 2 * e / 5);
+    a.curveTo(d / 2 - b, 2 * e / 5, d / 2 - b, 0, d / 2, 0);
+    a.curveTo(d / 2 + b, 0, d / 2 + b, 2 * e / 5, d / 2, 2 * e / 5);
+    a.curveTo(d, 2 * e / 5, d, 3 * e / 5, d, e);
+    a.close()
+};
+
+function mxCloud(a, b, c, d) {
+    mxActor.call(this);
+    this.bounds = a;
+    this.fill = b;
+    this.stroke = c;
+    this.strokewidth = null != d ? d : 1
+}
+mxUtils.extend(mxCloud, mxActor);
+mxCloud.prototype.redrawPath = function(a, b, c, d, e) {
+    a.moveTo(0.25 * d, 0.25 * e);
+    a.curveTo(0.05 * d, 0.25 * e, 0, 0.5 * e, 0.16 * d, 0.55 * e);
+    a.curveTo(0, 0.66 * e, 0.18 * d, 0.9 * e, 0.31 * d, 0.8 * e);
+    a.curveTo(0.4 * d, e, 0.7 * d, e, 0.8 * d, 0.8 * e);
+    a.curveTo(d, 0.8 * e, d, 0.6 * e, 0.875 * d, 0.5 * e);
+    a.curveTo(d, 0.3 * e, 0.8 * d, 0.1 * e, 0.625 * d, 0.2 * e);
+    a.curveTo(0.5 * d, 0.05 * e, 0.3 * d, 0.05 * e, 0.25 * d, 0.25 * e);
+    a.close()
+};
+
+function mxRectangleShape(a, b, c, d) {
+    mxShape.call(this);
+    this.bounds = a;
+    this.fill = b;
+    this.stroke = c;
+    this.strokewidth = null != d ? d : 1
+}
+mxUtils.extend(mxRectangleShape, mxShape);
+mxRectangleShape.prototype.isHtmlAllowed = function() {
+    return !this.isRounded && !this.glass && 0 == this.rotation
+};
+mxRectangleShape.prototype.paintBackground = function(a, b, c, d, e) {
+    if (this.isRounded) {
+        var f = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, 100 * mxConstants.RECTANGLE_ROUNDING_FACTOR) / 100,
+            f = Math.min(d * f, e * f);
+        a.roundrect(b, c, d, e, f, f)
+    } else a.rect(b, c, d, e);
+    a.fillAndStroke()
+};
+mxRectangleShape.prototype.paintForeground = function(a, b, c, d, e) {
+    this.glass && this.paintGlassEffect(a, b, c, d, e, this.getArcSize(d + this.strokewidth, e + this.strokewidth))
+};
+mxRectangleShape.prototype.redrawHtmlShape = function() {
+    this.updateHtmlBounds(this.node);
+    this.updateHtmlFilters(this.node);
+    this.updateHtmlColors(this.node)
+};
+mxRectangleShape.prototype.updateHtmlBounds = function(a) {
+    var b = 9 <= document.documentMode ? 0 : Math.ceil(this.strokewidth * this.scale);
+    a.style.borderWidth = Math.max(1, b) + "px";
+    a.style.overflow = "hidden";
+    a.style.left = Math.round(this.bounds.x - b / 2) + "px";
+    a.style.top = Math.round(this.bounds.y - b / 2) + "px";
+    "CSS1Compat" == document.compatMode && (b = -b);
+    a.style.width = Math.round(Math.max(0, this.bounds.width + b)) + "px";
+    a.style.height = Math.round(Math.max(0, this.bounds.height + b)) + "px"
+};
+mxRectangleShape.prototype.updateHtmlColors = function(a) {
+    var b = this.stroke;
+    null != b && b != mxConstants.NONE ? (a.style.borderColor = b, this.isDashed ? a.style.borderStyle = "dashed" : 0 < this.strokewidth && (a.style.borderStyle = "solid"), a.style.borderWidth = Math.max(1, Math.ceil(this.strokewidth * this.scale)) + "px") : a.style.borderWidth = "0px";
+    b = this.fill;
+    null != b && b != mxConstants.NONE ? (a.style.backgroundColor = b, a.style.backgroundImage = "none") : this.pointerEvents ? a.style.backgroundColor = "transparent" : 8 == document.documentMode ?
+        mxUtils.addTransparentBackgroundFilter(a) : this.setTransparentBackgroundImage(a)
+};
+mxRectangleShape.prototype.updateHtmlFilters = function(a) {
+    var b = "";
+    100 > this.opacity && (b += "alpha(opacity\x3d" + this.opacity + ")");
+    this.isShadow && (b += "progid:DXImageTransform.Microsoft.dropShadow (OffX\x3d'" + Math.round(mxConstants.SHADOW_OFFSET_X * this.scale) + "', OffY\x3d'" + Math.round(mxConstants.SHADOW_OFFSET_Y * this.scale) + "', Color\x3d'" + mxConstants.SHADOWCOLOR + "')");
+    if (this.gradient) {
+        var c = this.fill,
+            d = this.gradient,
+            e = "0",
+            f = {
+                east: 0,
+                south: 1,
+                west: 2,
+                north: 3
+            },
+            g = null != this.direction ? f[this.direction] : 0;
+        null !=
+            this.gradientDirection && (g = mxUtils.mod(g + f[this.gradientDirection] - 1, 4));
+        1 == g ? (e = "1", f = c, c = d, d = f) : 2 == g ? (f = c, c = d, d = f) : 3 == g && (e = "1");
+        b += "progid:DXImageTransform.Microsoft.gradient(startColorStr\x3d'" + c + "', endColorStr\x3d'" + d + "', gradientType\x3d'" + e + "')"
+    }
+    a.style.filter = b
+};
+
+function mxEllipse(a, b, c, d) {
+    mxShape.call(this);
+    this.bounds = a;
+    this.fill = b;
+    this.stroke = c;
+    this.strokewidth = null != d ? d : 1
+}
+mxUtils.extend(mxEllipse, mxShape);
+mxEllipse.prototype.paintVertexShape = function(a, b, c, d, e) {
+    a.ellipse(b, c, d, e);
+    a.fillAndStroke()
+};
+
+function mxDoubleEllipse(a, b, c, d) {
+    mxShape.call(this);
+    this.bounds = a;
+    this.fill = b;
+    this.stroke = c;
+    this.strokewidth = null != d ? d : 1
+}
+mxUtils.extend(mxDoubleEllipse, mxShape);
+mxDoubleEllipse.prototype.vmlScale = 10;
+mxDoubleEllipse.prototype.paintBackground = function(a, b, c, d, e) {
+    a.ellipse(b, c, d, e);
+    a.fillAndStroke()
+};
+mxDoubleEllipse.prototype.paintForeground = function(a, b, c, d, e) {
+    var f = Math.min(4, Math.min(d / 5, e / 5));
+    d -= 2 * f;
+    e -= 2 * f;
+    0 < d && 0 < e && a.ellipse(b + f, c + f, d, e);
+    a.stroke()
+};
+
+function mxRhombus(a, b, c, d) {
+    mxShape.call(this);
+    this.bounds = a;
+    this.fill = b;
+    this.stroke = c;
+    this.strokewidth = null != d ? d : 1
+}
+mxUtils.extend(mxRhombus, mxShape);
+mxRhombus.prototype.paintVertexShape = function(a, b, c, d, e) {
+    var f = d / 2,
+        g = e / 2;
+    a.begin();
+    a.moveTo(b + f, c);
+    a.lineTo(b + d, c + g);
+    a.lineTo(b + f, c + e);
+    a.lineTo(b, c + g);
+    a.close();
+    a.fillAndStroke()
+};
+
+function mxPolyline(a, b, c) {
+    mxShape.call(this);
+    this.points = a;
+    this.stroke = b;
+    this.strokewidth = null != c ? c : 1
+}
+mxUtils.extend(mxPolyline, mxShape);
+mxPolyline.prototype.getRotation = function() {
+    return 0
+};
+mxPolyline.prototype.paintEdgeShape = function(a, b) {
+    this.paintLine(a, b, this.isRounded)
+};
+mxPolyline.prototype.paintLine = function(a, b, c) {
+    var d = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, mxConstants.LINE_ARCSIZE) / 2,
+        e = b[0],
+        f = b[b.length - 1];
+    a.begin();
+    a.moveTo(e.x, e.y);
+    for (var g = 1; g < b.length - 1; g++) {
+        var h = b[g],
+            k = e.x - h.x,
+            e = e.y - h.y;
+        if (c && g < b.length - 1 && (0 != k || 0 != e)) {
+            var l = Math.sqrt(k * k + e * e),
+                k = k * Math.min(d, l / 2) / l,
+                e = e * Math.min(d, l / 2) / l;
+            a.lineTo(h.x + k, h.y + e);
+            e = b[g + 1];
+            k = e.x - h.x;
+            e = e.y - h.y;
+            l = Math.max(1, Math.sqrt(k * k + e * e));
+            k = k * Math.min(d, l / 2) / l;
+            e = e * Math.min(d, l / 2) / l;
+            k = h.x + k;
+            e = h.y + e;
+            a.quadTo(h.x,
+                h.y, k, e);
+            h = new mxPoint(k, e)
+        } else a.lineTo(h.x, h.y);
+        e = h
+    }
+    a.lineTo(f.x, f.y);
+    a.stroke()
+};
+
+function mxArrow(a, b, c, d, e, f, g) {
+    mxShape.call(this);
+    this.points = a;
+    this.fill = b;
+    this.stroke = c;
+    this.strokewidth = null != d ? d : 1;
+    this.arrowWidth = null != e ? e : mxConstants.ARROW_WIDTH;
+    this.spacing = null != f ? f : mxConstants.ARROW_SPACING;
+    this.endSize = null != g ? g : mxConstants.ARROW_SIZE
+}
+mxUtils.extend(mxArrow, mxShape);
+mxArrow.prototype.paintEdgeShape = function(a, b) {
+    var c = mxConstants.ARROW_SPACING,
+        d = mxConstants.ARROW_WIDTH,
+        e = mxConstants.ARROW_SIZE,
+        f = b[0],
+        g = b[b.length - 1],
+        h = g.x - f.x,
+        k = g.y - f.y,
+        l = Math.sqrt(h * h + k * k),
+        m = l - 2 * c - e,
+        h = h / l,
+        k = k / l,
+        l = d * k / 3,
+        d = -d * h / 3,
+        e = f.x - l / 2 + c * h,
+        f = f.y - d / 2 + c * k,
+        n = e + l,
+        p = f + d,
+        q = n + m * h,
+        m = p + m * k,
+        s = q + l,
+        r = m + d,
+        t = s - 3 * l,
+        v = r - 3 * d;
+    a.begin();
+    a.moveTo(e, f);
+    a.lineTo(n, p);
+    a.lineTo(q, m);
+    a.lineTo(s, r);
+    a.lineTo(g.x - c * h, g.y - c * k);
+    a.lineTo(t, v);
+    a.lineTo(t + l, v + d);
+    a.close();
+    a.fillAndStroke()
+};
+
+function mxText(a, b, c, d, e, f, g, h, k, l, m, n, p, q, s, r, t, v, w, u) {
+    mxShape.call(this);
+    this.value = a;
+    this.bounds = b;
+    this.color = null != e ? e : "black";
+    this.align = null != c ? c : "";
+    this.valign = null != d ? d : "";
+    this.family = null != f ? f : mxConstants.DEFAULT_FONTFAMILY;
+    this.size = null != g ? g : mxConstants.DEFAULT_FONTSIZE;
+    this.fontStyle = null != h ? h : mxConstants.DEFAULT_FONTSTYLE;
+    this.spacing = parseInt(k || 2);
+    this.spacingTop = this.spacing + parseInt(l || 0);
+    this.spacingRight = this.spacing + parseInt(m || 0);
+    this.spacingBottom = this.spacing + parseInt(n || 0);
+    this.spacingLeft = this.spacing + parseInt(p || 0);
+    this.horizontal = null != q ? q : !0;
+    this.background = s;
+    this.border = r;
+    this.wrap = null != t ? t : !1;
+    this.clipped = null != v ? v : !1;
+    this.overflow = null != w ? w : "visible";
+    this.labelPadding = null != u ? u : 0;
+    this.rotation = 0
+}
+mxUtils.extend(mxText, mxShape);
+mxText.prototype.baseSpacingTop = 0;
+mxText.prototype.baseSpacingBottom = 0;
+mxText.prototype.baseSpacingLeft = 0;
+mxText.prototype.baseSpacingRight = 0;
+mxText.prototype.replaceLinefeeds = !0;
+mxText.prototype.verticalTextRotation = -90;
+mxText.prototype.ignoreClippedStringSize = !0;
+mxText.prototype.ignoreStringSize = !1;
+mxText.prototype.isParseVml = function() {
+    return !1
+};
+mxText.prototype.isHtmlAllowed = function() {
+    return 8 != document.documentMode
+};
+mxText.prototype.getSvgScreenOffset = function() {
+    return 0
+};
+mxText.prototype.checkBounds = function() {
+    return null != this.bounds && !isNaN(this.bounds.x) && !isNaN(this.bounds.y) && !isNaN(this.bounds.width) && !isNaN(this.bounds.height)
+};
+mxText.prototype.updateBoundingBox = function() {
+    var a = this.node;
+    8 == document.documentMode && null != a.firstChild && (a = a.firstChild, null != a.firstChild && (a = a.firstChild));
+    this.boundingBox = this.bounds.clone();
+    var b = this.getTextRotation();
+    if (!this.ignoreStringSize && null != a && "fill" != this.overflow && (!this.clipped || !this.ignoreClippedStringSize)) {
+        var c = null,
+            d = null;
+        if (null != a.ownerSVGElement)
+            if (null != a.firstChild && null != a.firstChild.firstChild && "foreignObject" == a.firstChild.firstChild.nodeName) a = a.firstChild.firstChild,
+                c = this.wrap ? this.bounds.width : parseInt(a.getAttribute("width")) * this.scale, d = parseInt(a.getAttribute("height")) * this.scale;
+            else {
+                b = a.getBBox();
+                if (0 == b.width && 0 == b.height) return;
+                this.boundingBox = new mxRectangle(b.x, b.y, b.width, b.height);
+                b = 0
+            } else d = this.state.view.textDiv, null != this.offsetWidth && null != this.offsetHeight ? (c = this.wrap ? this.bounds.width : this.offsetWidth * this.scale, d = this.offsetHeight * this.scale) : null != d ? (this.updateFont(d), this.updateSize(d), mxUtils.isNode(this.value) ? d.innerHTML = this.value.outerHTML :
+            (c = this.replaceLinefeeds ? this.value.replace(/\n/g, "\x3cbr/\x3e") : this.value, d.innerHTML = c), c = this.wrap ? this.bounds.width : d.offsetWidth * this.scale, d = d.offsetHeight * this.scale) : (c = this.wrap ? this.bounds.width : a.offsetWidth * this.scale, d = a.offsetHeight * this.scale);
+        null != c && null != d && (this.boundingBox = new mxRectangle(this.bounds.x + this.margin.x * c, this.bounds.y + this.margin.y * d, c, d))
+    } else this.boundingBox.x += this.margin.x * this.boundingBox.width, this.boundingBox.y += this.margin.y * this.boundingBox.height;
+    null !=
+        this.boundingBox && (0 != b && (b = mxUtils.getBoundingBox(this.boundingBox, b), this.boundingBox.x = b.x, this.boundingBox.y = b.y, mxClient.IS_QUIRKS || (this.boundingBox.width = b.width, this.boundingBox.height = b.height)), this.boundingBox.x = Math.floor(this.boundingBox.x), this.boundingBox.y = Math.floor(this.boundingBox.y), this.boundingBox.width = Math.ceil(this.boundingBox.width), this.boundingBox.height = Math.ceil(this.boundingBox.height))
+};
+mxText.prototype.getShapeRotation = function() {
+    return 0
+};
+mxText.prototype.getTextRotation = function() {
+    return null != this.state && null != this.state.shape ? this.state.shape.getTextRotation() : 0
+};
+mxText.prototype.isPaintBoundsInverted = function() {
+    return !this.horizontal && null != this.state && this.state.view.graph.model.isVertex(this.state.cell)
+};
+mxText.prototype.configureCanvas = function(a, b, c, d, e) {
+    mxShape.prototype.configureCanvas.apply(this, arguments);
+    a.setFontColor(this.color);
+    a.setFontBackgroundColor(this.background);
+    a.setFontBorderColor(this.border);
+    a.setFontFamily(this.family);
+    a.setFontSize(this.size);
+    a.setFontStyle(this.fontStyle)
+};
+mxText.prototype.updateVmlContainer = function() {
+    this.node.style.left = Math.round(this.bounds.x) + "px";
+    this.node.style.top = Math.round(this.bounds.y) + "px";
+    this.node.style.width = "1px";
+    this.node.style.height = "1px";
+    this.node.style.overflow = "visible"
+};
+mxText.prototype.paint = function(a) {
+    var b = this.scale,
+        c = this.bounds.x / b,
+        d = this.bounds.y / b,
+        e = this.bounds.width / b,
+        b = this.bounds.height / b;
+    this.updateTransform(a, c, d, e, b);
+    this.configureCanvas(a, c, d, e, b);
+    var f = mxUtils.isNode(this.value) || this.dialect == mxConstants.DIALECT_STRICTHTML,
+        g = f || a instanceof mxVmlCanvas2D ? "html" : "",
+        h = this.value;
+    !f && "html" == g && (h = mxUtils.htmlEntities(h, !1));
+    h = !mxUtils.isNode(this.value) && this.replaceLinefeeds && "html" == g ? h.replace(/\n/g, "\x3cbr/\x3e") : h;
+    a.text(c, d, e, b, h, this.align,
+        this.valign, this.wrap, g, "fill" == this.overflow, this.clipped, this.getTextRotation())
+};
+mxText.prototype.redrawHtmlShape = function() {
+    var a = this.node.style;
+    a.opacity = 1 > this.opacity ? this.opacity : "";
+    a.overflow = "";
+    a.width = "";
+    a.height = "";
+    this.updateFont(this.node);
+    this.updateSize(this.node);
+    this.updateValue();
+    this.offsetHeight = this.offsetWidth = null;
+    null != mxClient.CSS_PREFIX ? this.updateHtmlTransform() : this.updateHtmlFilter()
+};
+mxText.prototype.updateHtmlTransform = function() {
+    var a = this.getTextRotation(),
+        b = this.node.style,
+        c = this.margin.x,
+        d = this.margin.y;
+    0 != a ? (b[mxClient.CSS_PREFIX + "TransformOrigin"] = 100 * -c + "% " + 100 * -d + "%", b[mxClient.CSS_PREFIX + "Transform"] = "translate(" + 100 * c + "%," + 100 * d + "%)scale(" + this.scale + ") rotate(" + a + "deg)") : (b[mxClient.CSS_PREFIX + "TransformOrigin"] = "0% 0%", b[mxClient.CSS_PREFIX + "Transform"] = "scale(" + this.scale + ")translate(" + 100 * c + "%," + 100 * d + "%)");
+    b.left = Math.round(this.bounds.x) + "px";
+    b.top = Math.round(this.bounds.y) +
+        "px"
+};
+mxText.prototype.updateHtmlFilter = function() {
+    var a = this.node.style,
+        b = this.margin.x,
+        c = this.margin.y,
+        d = this.scale;
+    a.filter = "";
+    var e = 0,
+        f = 0,
+        g = null != this.state ? this.state.view.textDiv : null;
+    if (null != g) {
+        g.style.overflow = "";
+        g.style.height = "";
+        g.style.width = "";
+        this.updateFont(g);
+        this.updateSize(g);
+        if (mxUtils.isNode(this.value)) g.innerHTML = this.value.outerHTML;
+        else {
+            var h = this.value;
+            this.dialect != mxConstants.DIALECT_STRICTHTML && (h = mxUtils.htmlEntities(h, !1));
+            h = this.replaceLinefeeds ? h.replace(/\n/g, "\x3cbr/\x3e") : h;
+            g.innerHTML = h
+        }
+        e = g.offsetWidth + 2;
+        f = g.offsetHeight + 2
+    } else e = this.node.offsetWidth, f = this.node.offsetHeight + 1;
+    this.offsetWidth = e;
+    this.offsetHeight = f;
+    g = this.bounds.width / d;
+    h = this.bounds.height / d;
+    mxClient.IS_QUIRKS && (this.clipped || "fill" == this.overflow) && 0 < h ? (h = Math.min(h, f), a.height = Math.round(h + 1) + "px") : h = f;
+    "fill" != this.overflow && (mxClient.IS_QUIRKS && (this.clipped || this.wrap) && 0 < g ? (g = Math.min(g, e), a.width = Math.round(g) + "px") : g = e);
+    var h = h * d,
+        g = g * d,
+        e = this.getTextRotation() * (Math.PI / 180),
+        f = parseFloat(parseFloat(Math.cos(e)).toFixed(8)),
+        k = parseFloat(parseFloat(Math.sin(-e)).toFixed(8)),
+        e = e % (2 * Math.PI);
+    0 > e && (e += 2 * Math.PI);
+    e %= Math.PI;
+    e > Math.PI / 2 && (e = Math.PI - e);
+    var l = Math.cos(e),
+        m = Math.sin(-e),
+        b = g * -(b + 0.5),
+        c = h * -(c + 0.5),
+        n = (h - h * l + g * m) / 2 + k * b - f * c;
+    0 != e && (a.filter = "progid:DXImageTransform.Microsoft.Matrix(M11\x3d" + f + ", M12\x3d" + k + ", M21\x3d" + -k + ", M22\x3d" + f + ", sizingMethod\x3d'auto expand')");
+    a.zoom = d;
+    a.left = Math.round(this.bounds.x + ((g - g * l + h * m) / 2 - f * b - k * c) - g / 2) + "px";
+    a.top = Math.round(this.bounds.y + n - h / 2) + "px"
+};
+mxText.prototype.updateValue = function() {
+    if (mxUtils.isNode(this.value)) this.node.innerHTML = "", this.node.appendChild(this.value);
+    else {
+        var a = this.value;
+        this.dialect != mxConstants.DIALECT_STRICTHTML && (a = mxUtils.htmlEntities(a, !1));
+        var a = this.replaceLinefeeds ? a.replace(/\n/g, "\x3cbr/\x3e") : a,
+            b = null != this.background && this.background != mxConstants.NONE ? this.background : null,
+            c = null != this.border && this.border != mxConstants.NONE ? this.border : null;
+        if (null != b || null != c)
+            if ("fill" == this.overflow) null != b && (this.node.style.backgroundColor =
+                b), null != c && (this.node.style.border = "1px solid " + c);
+            else {
+                var d = "";
+                null != b && (d += "background-color:" + b + ";");
+                null != c && (d += "border:1px solid " + c + ";");
+                a = '\x3cdiv style\x3d"zoom:1;' + d + "display:inline-block;_display:inline;padding-bottom:1px;padding-right:1px;line-height:" + this.node.style.lineHeight + '"\x3e' + a + "\x3c/div\x3e";
+                this.node.style.lineHeight = ""
+            }
+        this.node.innerHTML = a
+    }
+};
+mxText.prototype.updateFont = function(a) {
+    a = a.style;
+    a.lineHeight = Math.round(this.size * mxConstants.LINE_HEIGHT) + "px";
+    a.fontSize = Math.round(this.size) + "px";
+    a.fontFamily = this.family;
+    a.verticalAlign = "top";
+    a.color = this.color;
+    a.fontWeight = (this.fontStyle & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD ? "bold" : "";
+    a.fontStyle = (this.fontStyle & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC ? "italic" : "";
+    a.fontDecoration = (this.fontStyle & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE ? "underline" : "";
+    a.textAlign =
+        this.align == mxConstants.ALIGN_CENTER ? "center" : this.align == mxConstants.ALIGN_RIGHT ? "right" : "left"
+};
+mxText.prototype.updateSize = function(a) {
+    var b = Math.round(this.bounds.width / this.scale),
+        c = Math.round(this.bounds.height / this.scale);
+    a = a.style;
+    this.clipped ? (a.overflow = "hidden", 0 < c && (a.maxHeight = c + "px"), 0 < b && (a.width = b + "px")) : "fill" == this.overflow && (a.width = b + "px", 0 < c && (a.maxHeight = c + "px"));
+    this.wrap ? (!this.clipped && 0 < b && (a.width = b + "px"), a.whiteSpace = "normal") : a.whiteSpace = "nowrap"
+};
+mxText.prototype.updateMargin = function() {
+    this.margin = mxUtils.getAlignmentAsPoint(this.align, this.valign)
+};
+mxText.prototype.getSpacing = function() {
+    var a = 0,
+        b = 0,
+        a = this.align == mxConstants.ALIGN_CENTER ? (this.spacingLeft - this.spacingRight) / 2 : this.align == mxConstants.ALIGN_RIGHT ? -this.spacingRight - this.baseSpacingRight : this.spacingLeft + this.baseSpacingLeft,
+        b = this.valign == mxConstants.ALIGN_MIDDLE ? (this.spacingTop - this.spacingBottom) / 2 : this.valign == mxConstants.ALIGN_BOTTOM ? -this.spacingBottom - this.baseSpacingBottom : this.spacingTop + this.baseSpacingTop;
+    return new mxPoint(a, b)
+};
+
+function mxTriangle() {
+    mxActor.call(this)
+}
+mxUtils.extend(mxTriangle, mxActor);
+mxTriangle.prototype.redrawPath = function(a, b, c, d, e) {
+    a.moveTo(0, 0);
+    a.lineTo(d, 0.5 * e);
+    a.lineTo(0, e);
+    a.close()
+};
+
+function mxHexagon() {
+    mxActor.call(this)
+}
+mxUtils.extend(mxHexagon, mxActor);
+mxHexagon.prototype.redrawPath = function(a, b, c, d, e) {
+    a.moveTo(0.25 * d, 0);
+    a.lineTo(0.75 * d, 0);
+    a.lineTo(d, 0.5 * e);
+    a.lineTo(0.75 * d, e);
+    a.lineTo(0.25 * d, e);
+    a.lineTo(0, 0.5 * e);
+    a.close()
+};
+
+function mxLine(a, b, c) {
+    mxShape.call(this);
+    this.bounds = a;
+    this.stroke = b;
+    this.strokewidth = null != c ? c : 1
+}
+mxUtils.extend(mxLine, mxShape);
+mxLine.prototype.paintVertexShape = function(a, b, c, d, e) {
+    c += e / 2;
+    a.begin();
+    a.moveTo(b, c);
+    a.lineTo(b + d, c);
+    a.stroke()
+};
+
+function mxImageShape(a, b, c, d, e) {
+    mxShape.call(this);
+    this.bounds = a;
+    this.image = b;
+    this.fill = c;
+    this.stroke = d;
+    this.strokewidth = null != e ? e : 1;
+    this.shadow = !1
+}
+mxUtils.extend(mxImageShape, mxRectangleShape);
+mxImageShape.prototype.preserveImageAspect = !0;
+mxImageShape.prototype.getSvgScreenOffset = function() {
+    return !mxClient.IS_IE ? 0.5 : 0
+};
+mxImageShape.prototype.apply = function(a) {
+    mxShape.prototype.apply.apply(this, arguments);
+    this.gradient = this.stroke = this.fill = null;
+    null != this.style && (this.fill = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BACKGROUND), this.stroke = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BORDER), this.preserveImageAspect = 1 == mxUtils.getNumber(this.style, mxConstants.STYLE_IMAGE_ASPECT, 1), this.flipH = this.flipH || 1 == mxUtils.getValue(this.style, "imageFlipH", 0), this.flipV = this.flipV || 1 == mxUtils.getValue(this.style,
+        "imageFlipV", 0))
+};
+mxImageShape.prototype.isHtmlAllowed = function() {
+    return !this.preserveImageAspect
+};
+mxImageShape.prototype.createHtml = function() {
+    var a = document.createElement("div");
+    a.style.position = "absolute";
+    return a
+};
+mxImageShape.prototype.paintVertexShape = function(a, b, c, d, e) {
+    if (null != this.image) {
+        var f = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BACKGROUND, null),
+            g = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_BORDER, null);
+        if (null != f || null != g) a.setFillColor(f), a.setStrokeColor(g), a.rect(b, c, d, e), a.fillAndStroke();
+        a.image(b, c, d, e, this.image, this.preserveImageAspect, !1, !1)
+    } else mxRectangleShape.prototype.paintBackground.apply(this, arguments)
+};
+mxImageShape.prototype.redrawHtmlShape = function() {
+    this.node.style.left = Math.round(this.bounds.x) + "px";
+    this.node.style.top = Math.round(this.bounds.y) + "px";
+    this.node.style.width = Math.max(0, Math.round(this.bounds.width)) + "px";
+    this.node.style.height = Math.max(0, Math.round(this.bounds.height)) + "px";
+    this.node.style.backgroundColor = this.fill || "";
+    this.node.style.borderColor = this.stroke || "";
+    this.node.innerHTML = "";
+    if (null != this.image) {
+        var a = document.createElement(mxClient.IS_IE6 || null == mxClient.CSS_PREFIX && 0 !=
+            this.rotation ? mxClient.VML_PREFIX + ":image" : "img");
+        a.style.position = "absolute";
+        a.src = this.image;
+        var b = 100 > this.opacity ? "alpha(opacity\x3d" + this.opacity + ")" : "";
+        this.node.style.filter = b;
+        this.flipH && this.flipV ? b += "progid:DXImageTransform.Microsoft.BasicImage(rotation\x3d2)" : this.flipH ? b += "progid:DXImageTransform.Microsoft.BasicImage(mirror\x3d1)" : this.flipV && (b += "progid:DXImageTransform.Microsoft.BasicImage(rotation\x3d2, mirror\x3d1)");
+        a.style.filter != b && (a.style.filter = b);
+        "image" == a.nodeName ? a.style.rotation =
+            this.rotation : a.style[mxClient.CSS_PREFIX + "Transform"] = "rotate(" + this.rotation + "deg)";
+        a.style.width = this.node.style.width;
+        a.style.height = this.node.style.height;
+        this.node.style.backgroundImage = "";
+        this.node.appendChild(a)
+    } else this.setTransparentBackgroundImage(this.node)
+};
+
+function mxLabel(a, b, c, d) {
+    mxRectangleShape.call(this, a, b, c, d)
+}
+mxUtils.extend(mxLabel, mxRectangleShape);
+mxLabel.prototype.imageSize = mxConstants.DEFAULT_IMAGESIZE;
+mxLabel.prototype.spacing = 2;
+mxLabel.prototype.indicatorSize = 10;
+mxLabel.prototype.indicatorSpacing = 2;
+mxLabel.prototype.init = function(a) {
+    mxShape.prototype.init.apply(this, arguments);
+    null != this.indicatorColor && null != this.indicatorShape && (this.indicator = new this.indicatorShape, this.indicator.dialect = this.dialect, this.indicator.bounds = this.bounds, this.indicator.fill = this.indicatorColor, this.indicator.stroke = this.indicatorColor, this.indicator.gradient = this.indicatorGradientColor, this.indicator.direction = this.indicatorDirection, this.indicator.init(this.node))
+};
+mxLabel.prototype.redraw = function() {
+    null != this.indicator && (this.indicator.fill = this.indicatorColor, this.indicator.stroke = this.indicatorColor, this.indicator.gradient = this.indicatorGradientColor, this.indicator.direction = this.indicatorDirection);
+    mxShape.prototype.redraw.apply(this, arguments)
+};
+mxLabel.prototype.isHtmlAllowed = function() {
+    return mxRectangleShape.prototype.isHtmlAllowed.apply(this, arguments) && null == this.indicatorColor && null == this.indicatorShape
+};
+mxLabel.prototype.paintForeground = function(a, b, c, d, e) {
+    this.paintImage(a, b, c, d, e);
+    this.paintIndicator(a, b, c, d, e);
+    mxRectangleShape.prototype.paintForeground.apply(this, arguments)
+};
+mxLabel.prototype.paintImage = function(a, b, c, d, e) {
+    null != this.image && (b = this.getImageBounds(b, c, d, e), a.image(b.x, b.y, b.width, b.height, this.image, !1, !1, !1))
+};
+mxLabel.prototype.getImageBounds = function(a, b, c, d) {
+    var e = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_ALIGN, mxConstants.ALIGN_LEFT),
+        f = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE),
+        g = mxUtils.getNumber(this.style, mxConstants.STYLE_IMAGE_WIDTH, mxConstants.DEFAULT_IMAGESIZE),
+        h = mxUtils.getNumber(this.style, mxConstants.STYLE_IMAGE_HEIGHT, mxConstants.DEFAULT_IMAGESIZE),
+        k = mxUtils.getNumber(this.style, mxConstants.STYLE_SPACING, this.spacing) + 5;
+    a = e == mxConstants.ALIGN_CENTER ?
+        a + (c - g) / 2 : e == mxConstants.ALIGN_RIGHT ? a + (c - g - k) : a + k;
+    b = f == mxConstants.ALIGN_TOP ? b + k : f == mxConstants.ALIGN_BOTTOM ? b + (d - h - k) : b + (d - h) / 2;
+    return new mxRectangle(a, b, g, h)
+};
+mxLabel.prototype.paintIndicator = function(a, b, c, d, e) {
+    null != this.indicator ? (this.indicator.bounds = this.getIndicatorBounds(b, c, d, e), this.indicator.paint(a)) : null != this.indicatorImage && (b = this.getIndicatorBounds(b, c, d, e), a.image(b.x, b.y, b.width, b.height, this.indicatorImage, !1, !1, !1))
+};
+mxLabel.prototype.getIndicatorBounds = function(a, b, c, d) {
+    var e = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_ALIGN, mxConstants.ALIGN_LEFT),
+        f = mxUtils.getValue(this.style, mxConstants.STYLE_IMAGE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE),
+        g = mxUtils.getNumber(this.style, mxConstants.STYLE_INDICATOR_WIDTH, this.indicatorSize),
+        h = mxUtils.getNumber(this.style, mxConstants.STYLE_INDICATOR_HEIGHT, this.indicatorSize),
+        k = this.spacing + 5;
+    a = e == mxConstants.ALIGN_RIGHT ? a + (c - g - k) : e == mxConstants.ALIGN_CENTER ? a + (c - g) /
+        2 : a + k;
+    b = f == mxConstants.ALIGN_BOTTOM ? b + (d - h - k) : f == mxConstants.ALIGN_TOP ? b + k : b + (d - h) / 2;
+    return new mxRectangle(a, b, g, h)
+};
+mxLabel.prototype.redrawHtmlShape = function() {
+    for (mxRectangleShape.prototype.redrawHtmlShape.apply(this, arguments); this.node.hasChildNodes();) this.node.removeChild(this.node.lastChild);
+    if (null != this.image) {
+        var a = document.createElement("img");
+        a.style.position = "relative";
+        a.setAttribute("border", "0");
+        var b = this.getImageBounds(this.bounds.x, this.bounds.y, this.bounds.width, this.bounds.height);
+        b.x -= this.bounds.x;
+        b.y -= this.bounds.y;
+        a.style.left = Math.round(b.x) + "px";
+        a.style.top = Math.round(b.y) + "px";
+        a.style.width =
+            Math.round(b.width) + "px";
+        a.style.height = Math.round(b.height) + "px";
+        a.src = this.image;
+        this.node.appendChild(a)
+    }
+};
+
+function mxCylinder(a, b, c, d) {
+    mxShape.call(this);
+    this.bounds = a;
+    this.fill = b;
+    this.stroke = c;
+    this.strokewidth = null != d ? d : 1
+}
+mxUtils.extend(mxCylinder, mxShape);
+mxCylinder.prototype.maxHeight = 40;
+mxCylinder.prototype.svgStrokeTolerance = 0;
+mxCylinder.prototype.paintVertexShape = function(a, b, c, d, e) {
+    a.translate(b, c);
+    a.begin();
+    this.redrawPath(a, b, c, d, e, !1);
+    a.fillAndStroke();
+    a.setShadow(!1);
+    a.begin();
+    this.redrawPath(a, b, c, d, e, !0);
+    a.stroke()
+};
+mxCylinder.prototype.redrawPath = function(a, b, c, d, e, f) {
+    b = Math.min(this.maxHeight, Math.round(e / 5));
+    if (f && null != this.fill || !f && null == this.fill) a.moveTo(0, b), a.curveTo(0, 2 * b, d, 2 * b, d, b), f || (a.stroke(), a.begin());
+    f || (a.moveTo(0, b), a.curveTo(0, -b / 3, d, -b / 3, d, b), a.lineTo(d, e - b), a.curveTo(d, e + b / 3, 0, e + b / 3, 0, e - b), a.close())
+};
+
+function mxConnector(a, b, c) {
+    mxPolyline.call(this, a, b, c)
+}
+mxUtils.extend(mxConnector, mxPolyline);
+mxConnector.prototype.paintEdgeShape = function(a, b) {
+    var c = this.createMarker(a, b, !0),
+        d = this.createMarker(a, b, !1);
+    null == this.style || 1 != this.style[mxConstants.STYLE_CURVED] ? this.paintLine(a, b, this.isRounded) : this.paintCurvedLine(a, b);
+    a.setFillColor(this.stroke);
+    a.setShadow(!1);
+    a.setDashed(!1);
+    null != c && c();
+    null != d && d()
+};
+mxConnector.prototype.paintCurvedLine = function(a, b) {
+    a.begin();
+    var c = b[0],
+        d = b.length;
+    a.moveTo(c.x, c.y);
+    for (c = 1; c < d - 2; c++) {
+        var e = b[c],
+            f = b[c + 1];
+        a.quadTo(e.x, e.y, (e.x + f.x) / 2, (e.y + f.y) / 2)
+    }
+    e = b[d - 2];
+    f = b[d - 1];
+    a.quadTo(e.x, e.y, f.x, f.y);
+    a.stroke()
+};
+mxConnector.prototype.createMarker = function(a, b, c) {
+    var d = b.length,
+        e = c ? b[1] : b[d - 2];
+    b = c ? b[0] : b[d - 1];
+    var d = b.x - e.x,
+        f = b.y - e.y,
+        g = Math.max(1, Math.sqrt(d * d + f * f)),
+        e = d / g,
+        d = f / g,
+        f = mxUtils.getNumber(this.style, c ? mxConstants.STYLE_STARTSIZE : mxConstants.STYLE_ENDSIZE, mxConstants.DEFAULT_MARKERSIZE),
+        g = mxUtils.getValue(this.style, c ? mxConstants.STYLE_STARTARROW : mxConstants.STYLE_ENDARROW);
+    return mxMarker.createMarker(a, this, g, b, e, d, f, c, this.strokewidth, 0 != this.style[c ? mxConstants.STYLE_STARTFILL : mxConstants.STYLE_ENDFILL])
+};
+mxConnector.prototype.augmentBoundingBox = function(a) {
+    mxShape.prototype.augmentBoundingBox.apply(this, arguments);
+    var b = 0;
+    mxUtils.getValue(this.style, mxConstants.STYLE_STARTARROW, mxConstants.NONE) != mxConstants.NONE && (b = mxUtils.getNumber(this.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_MARKERSIZE) + 1);
+    mxUtils.getValue(this.style, mxConstants.STYLE_ENDARROW, mxConstants.NONE) != mxConstants.NONE && (b = Math.max(b, mxUtils.getNumber(this.style, mxConstants.STYLE_ENDSIZE, mxConstants.DEFAULT_MARKERSIZE)) +
+        1);
+    a.grow(Math.ceil(b * this.scale))
+};
+
+function mxSwimlane(a, b, c, d) {
+    mxShape.call(this);
+    this.bounds = a;
+    this.fill = b;
+    this.stroke = c;
+    this.strokewidth = null != d ? d : 1
+}
+mxUtils.extend(mxSwimlane, mxShape);
+mxSwimlane.prototype.imageSize = 16;
+mxSwimlane.prototype.getGradientBounds = function(a, b, c, d, e) {
+    a = Math.min(e, mxUtils.getValue(this.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE));
+    return new mxRectangle(b, c, d, a)
+};
+mxSwimlane.prototype.getRotation = function() {
+    var a = mxShape.prototype.getRotation.apply(this, arguments);
+    1 != mxUtils.getValue(this.style, mxConstants.STYLE_HORIZONTAL, 1) && (a += mxText.prototype.verticalTextRotation);
+    return a
+};
+mxSwimlane.prototype.getTextRotation = function() {
+    return this.getRotation()
+};
+mxSwimlane.prototype.isPaintBoundsInverted = function() {
+    return mxShape.prototype.isPaintBoundsInverted.apply(this, arguments) || 1 != mxUtils.getValue(this.style, mxConstants.STYLE_HORIZONTAL, 1)
+};
+mxSwimlane.prototype.getArcSize = function(a, b, c) {
+    a = mxUtils.getValue(this.style, mxConstants.STYLE_ARCSIZE, 100 * mxConstants.RECTANGLE_ROUNDING_FACTOR) / 100;
+    return 3 * c * a
+};
+mxSwimlane.prototype.paintVertexShape = function(a, b, c, d, e) {
+    var f = Math.min(e, mxUtils.getValue(this.style, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE)),
+        g = mxUtils.getValue(this.style, mxConstants.STYLE_SWIMLANE_FILLCOLOR, mxConstants.NONE),
+        h = 1 == mxUtils.getValue(this.style, mxConstants.STYLE_SWIMLANE_LINE, 1),
+        k = 0;
+    a.translate(b, c);
+    this.isRounded ? (k = this.getArcSize(d, e, f), this.paintRoundedSwimlane(a, b, c, d, e, f, k, g, h)) : this.paintSwimlane(a, b, c, d, e, f, g, h);
+    g = mxUtils.getValue(this.style, mxConstants.STYLE_SEPARATORCOLOR,
+        mxConstants.NONE);
+    this.paintSeparator(a, d, f, e, g);
+    null != this.image && (e = this.getImageBounds(b, f, d, e), a.image(e.x - b, e.y - c, e.width, e.height, this.image, !1, !1, !1));
+    this.glass && (a.setShadow(!1), this.paintGlassEffect(a, 0, 0, d, f, k))
+};
+mxSwimlane.prototype.paintSwimlane = function(a, b, c, d, e, f, g, h) {
+    g != mxConstants.NONE && (a.save(), a.setFillColor(g), a.rect(0, 0, d, e), a.fillAndStroke(), a.restore(), a.setShadow(!1));
+    a.begin();
+    a.moveTo(0, f);
+    a.lineTo(0, 0);
+    a.lineTo(d, 0);
+    a.lineTo(d, f);
+    h && a.close();
+    a.fillAndStroke();
+    f < e && g == mxConstants.NONE && (a.pointerEvents = !1, a.begin(), a.moveTo(0, f), a.lineTo(0, e), a.lineTo(d, e), a.lineTo(d, f), a.stroke())
+};
+mxSwimlane.prototype.paintRoundedSwimlane = function(a, b, c, d, e, f, g, h, k) {
+    h != mxConstants.NONE && (a.save(), a.setFillColor(h), a.roundrect(0, 0, d, e, g, g), a.fillAndStroke(), a.restore(), a.setShadow(!1));
+    a.begin();
+    a.moveTo(d, f);
+    a.lineTo(d, g);
+    a.quadTo(d, 0, d - Math.min(d / 2, g), 0);
+    a.lineTo(Math.min(d / 2, g), 0);
+    a.quadTo(0, 0, 0, g);
+    a.lineTo(0, f);
+    k && a.close();
+    a.fillAndStroke();
+    f < e && h == mxConstants.NONE && (a.pointerEvents = !1, a.begin(), a.moveTo(0, f), a.lineTo(0, e - g), a.quadTo(0, e, Math.min(d / 2, g), e), a.lineTo(d - Math.min(d / 2, g), e),
+        a.quadTo(d, e, d, e - g), a.lineTo(d, f), a.stroke())
+};
+mxSwimlane.prototype.paintSeparator = function(a, b, c, d, e) {
+    e != mxConstants.NONE && (a.setStrokeColor(e), a.setDashed(!0), a.begin(), a.moveTo(b, c), a.lineTo(b, d), a.stroke(), a.setDashed(!1))
+};
+mxSwimlane.prototype.getImageBounds = function(a, b, c, d) {
+    return new mxRectangle(a + c - this.imageSize, b, this.imageSize, this.imageSize)
+};
+
+function mxGraphLayout(a) {
+    this.graph = a
+}
+mxGraphLayout.prototype.graph = null;
+mxGraphLayout.prototype.useBoundingBox = !0;
+mxGraphLayout.prototype.parent = null;
+mxGraphLayout.prototype.moveCell = function(a, b, c) {};
+mxGraphLayout.prototype.execute = function(a) {};
+mxGraphLayout.prototype.getGraph = function() {
+    return this.graph
+};
+mxGraphLayout.prototype.getConstraint = function(a, b, c, d) {
+    c = this.graph.view.getState(b);
+    b = null != c ? c.style : this.graph.getCellStyle(b);
+    return null != b ? b[a] : null
+};
+mxGraphLayout.traverse = function(a, b, c, d, e) {
+    if (null != c && null != a) {
+        b = null != b ? b : !0;
+        e = e || [];
+        var f = mxCellPath.create(a);
+        if (null == e[f] && (e[f] = a, d = c(a, d), null == d || d))
+            if (d = this.graph.model.getEdgeCount(a), 0 < d)
+                for (f = 0; f < d; f++) {
+                    var g = this.graph.model.getEdgeAt(a, f),
+                        h = this.graph.model.getTerminal(g, !0) == a;
+                    if (!b || h) h = this.graph.view.getVisibleTerminal(g, !h), this.traverse(h, b, c, g, e)
+                }
+    }
+};
+mxGraphLayout.prototype.isVertexMovable = function(a) {
+    return this.graph.isCellMovable(a)
+};
+mxGraphLayout.prototype.isVertexIgnored = function(a) {
+    return !this.graph.getModel().isVertex(a) || !this.graph.isCellVisible(a)
+};
+mxGraphLayout.prototype.isEdgeIgnored = function(a) {
+    var b = this.graph.getModel();
+    return !b.isEdge(a) || !this.graph.isCellVisible(a) || null == b.getTerminal(a, !0) || null == b.getTerminal(a, !1)
+};
+mxGraphLayout.prototype.setEdgeStyleEnabled = function(a, b) {
+    this.graph.setCellStyles(mxConstants.STYLE_NOEDGESTYLE, b ? "0" : "1", [a])
+};
+mxGraphLayout.prototype.setOrthogonalEdge = function(a, b) {
+    this.graph.setCellStyles(mxConstants.STYLE_ORTHOGONAL, b ? "1" : "0", [a])
+};
+mxGraphLayout.prototype.getParentOffset = function(a) {
+    var b = new mxPoint;
+    if (null != a && a != this.parent) {
+        var c = this.graph.getModel();
+        if (c.isAncestor(this.parent, a))
+            for (var d = c.getGeometry(a); a != this.parent;) b.x += d.x, b.y += d.y, a = c.getParent(a), d = c.getGeometry(a)
+    }
+    return b
+};
+mxGraphLayout.prototype.setEdgePoints = function(a, b) {
+    if (null != a) {
+        var c = this.graph.model,
+            d = c.getGeometry(a);
+        null == d ? (d = new mxGeometry, d.setRelative(!0)) : d = d.clone();
+        if (null != this.parent && null != b)
+            for (var e = c.getParent(a), e = this.getParentOffset(e), f = 0; f < b.length; f++) b[f].x -= e.x, b[f].y -= e.y;
+        d.points = b;
+        c.setGeometry(a, d)
+    }
+};
+mxGraphLayout.prototype.setVertexLocation = function(a, b, c) {
+    var d = this.graph.getModel(),
+        e = d.getGeometry(a),
+        f = null;
+    if (null != e) {
+        f = new mxRectangle(b, c, e.width, e.height);
+        if (this.useBoundingBox) {
+            var g = this.graph.getView().getState(a);
+            if (null != g && null != g.text && null != g.text.boundingBox) {
+                var h = this.graph.getView().scale,
+                    k = g.text.boundingBox;
+                g.text.boundingBox.x < g.x && (b += (g.x - k.x) / h, f.width = k.width);
+                g.text.boundingBox.y < g.y && (c += (g.y - k.y) / h, f.height = k.height)
+            }
+        }
+        null != this.parent && (g = d.getParent(a), null != g && g !=
+            this.parent && (g = this.getParentOffset(g), b -= g.x, c -= g.y));
+        if (e.x != b || e.y != c) e = e.clone(), e.x = b, e.y = c, d.setGeometry(a, e)
+    }
+    return f
+};
+mxGraphLayout.prototype.getVertexBounds = function(a) {
+    var b = this.graph.getModel().getGeometry(a);
+    if (this.useBoundingBox) {
+        var c = this.graph.getView().getState(a);
+        if (null != c && null != c.text && null != c.text.boundingBox) var d = this.graph.getView().scale,
+            e = c.text.boundingBox,
+            f = Math.max(c.x - e.x, 0) / d,
+            g = Math.max(c.y - e.y, 0) / d,
+            h = Math.max(e.x + e.width - (c.x + c.width), 0) / d,
+            c = Math.max(e.y + e.height - (c.y + c.height), 0) / d,
+            b = new mxRectangle(b.x - f, b.y - g, b.width + f + h, b.height + g + c)
+    }
+    null != this.parent && (a = this.graph.getModel().getParent(a),
+        b = b.clone(), null != a && a != this.parent && (a = this.getParentOffset(a), b.x += a.x, b.y += a.y));
+    return new mxRectangle(b.x, b.y, b.width, b.height)
+};
+mxGraphLayout.prototype.arrangeGroups = function(a, b) {
+    this.graph.getModel().beginUpdate();
+    try {
+        for (var c = a.length - 1; 0 <= c; c--) {
+            var d = a[c],
+                e = this.graph.getChildVertices(d),
+                f = this.graph.getBoundingBoxFromGeometry(e),
+                g = this.graph.getCellGeometry(d),
+                h = 0,
+                k = 0;
+            if (this.graph.isSwimlane(d)) var l = this.graph.getStartSize(d),
+                h = l.width,
+                k = l.height;
+            null != f && null != g && (g = g.clone(), g.x = g.x + f.x - b - h, g.y = g.y + f.y - b - k, g.width = f.width + 2 * b + h, g.height = f.height + 2 * b + k, this.graph.getModel().setGeometry(d, g), this.graph.moveCells(e,
+                b + h - f.x, b + k - f.y))
+        }
+    } finally {
+        this.graph.getModel().endUpdate()
+    }
+};
+
+function mxStackLayout(a, b, c, d, e, f) {
+    mxGraphLayout.call(this, a);
+    this.horizontal = null != b ? b : !0;
+    this.spacing = null != c ? c : 0;
+    this.x0 = null != d ? d : 0;
+    this.y0 = null != e ? e : 0;
+    this.border = null != f ? f : 0
+}
+mxStackLayout.prototype = new mxGraphLayout;
+mxStackLayout.prototype.constructor = mxStackLayout;
+mxStackLayout.prototype.horizontal = null;
+mxStackLayout.prototype.spacing = null;
+mxStackLayout.prototype.x0 = null;
+mxStackLayout.prototype.y0 = null;
+mxStackLayout.prototype.border = 0;
+mxStackLayout.prototype.keepFirstLocation = !1;
+mxStackLayout.prototype.fill = !1;
+mxStackLayout.prototype.resizeParent = !1;
+mxStackLayout.prototype.resizeLast = !1;
+mxStackLayout.prototype.wrap = null;
+mxStackLayout.prototype.isHorizontal = function() {
+    return this.horizontal
+};
+mxStackLayout.prototype.moveCell = function(a, b, c) {
+    var d = this.graph.getModel(),
+        e = d.getParent(a),
+        f = this.isHorizontal();
+    if (null != a && null != e) {
+        var g = 0,
+            h = 0,
+            k = d.getChildCount(e);
+        b = f ? b : c;
+        g = this.graph.getView().getState(e);
+        null != g && (b -= f ? g.x : g.y);
+        for (g = 0; g < k; g++)
+            if (c = d.getChildAt(e, g), c != a && (c = d.getGeometry(c), null != c)) {
+                c = f ? c.x + c.width / 2 : c.y + c.height / 2;
+                if (h < b && c > b) break;
+                h = c
+            }
+        f = e.getIndex(a);
+        f = Math.max(0, g - (g > f ? 1 : 0));
+        d.add(e, a, f)
+    }
+};
+mxStackLayout.prototype.getParentSize = function(a) {
+    var b = this.graph.getModel(),
+        c = b.getGeometry(a);
+    if (null != this.graph.container && (null == c && b.isLayer(a) || a == this.graph.getView().currentRoot)) c = new mxRectangle(0, 0, this.graph.container.offsetWidth - 1, this.graph.container.offsetHeight - 1);
+    return c
+};
+mxStackLayout.prototype.execute = function(a) {
+    if (null != a) {
+        var b = this.isHorizontal(),
+            c = this.graph.getModel(),
+            d = this.getParentSize(a),
+            e = 0;
+        null != d && (e = b ? d.height : d.width);
+        var e = e - (2 * this.spacing + 2 * this.border),
+            f = this.x0 + this.border,
+            g = this.y0 + this.border;
+        if (this.graph.isSwimlane(a)) {
+            var h = this.graph.getCellStyle(a),
+                k = mxUtils.getValue(h, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE),
+                h = mxUtils.getValue(h, mxConstants.STYLE_HORIZONTAL, !0);
+            b == h && (e -= k);
+            b ? g += k : f += k
+        }
+        c.beginUpdate();
+        try {
+            for (var k = 0,
+                    h = null, l = c.getChildCount(a), m = 0; m < l; m++) {
+                var n = c.getChildAt(a, m);
+                if (!this.isVertexIgnored(n) && this.isVertexMovable(n)) {
+                    var p = c.getGeometry(n);
+                    if (null != p) {
+                        p = p.clone();
+                        if (null != this.wrap && null != h && (b && h.x + h.width + p.width + 2 * this.spacing > this.wrap || !b && h.y + h.height + p.height + 2 * this.spacing > this.wrap)) h = null, b ? g += k + this.spacing : f += k + this.spacing, k = 0;
+                        k = Math.max(k, b ? p.height : p.width);
+                        null != h ? b ? p.x = h.x + h.width + this.spacing : p.y = h.y + h.height + this.spacing : this.keepFirstLocation || (b ? p.x = f : p.y = g);
+                        b ? p.y = g : p.x = f;
+                        this.fill && 0 < e && (b ? p.height = e : p.width = e);
+                        c.setGeometry(n, p);
+                        h = p
+                    }
+                }
+            }
+            this.resizeParent && null != d && null != h && !this.graph.isCellCollapsed(a) ? (d = d.clone(), b ? d.width = h.x + h.width + this.spacing : d.height = h.y + h.height + this.spacing, c.setGeometry(a, d)) : this.resizeLast && (null != d && null != h) && (b ? h.width = d.width - h.x - this.spacing : h.height = d.height - h.y - this.spacing)
+        } finally {
+            c.endUpdate()
+        }
+    }
+};
+
+function mxPartitionLayout(a, b, c, d) {
+    mxGraphLayout.call(this, a);
+    this.horizontal = null != b ? b : !0;
+    this.spacing = c || 0;
+    this.border = d || 0
+}
+mxPartitionLayout.prototype = new mxGraphLayout;
+mxPartitionLayout.prototype.constructor = mxPartitionLayout;
+mxPartitionLayout.prototype.horizontal = null;
+mxPartitionLayout.prototype.spacing = null;
+mxPartitionLayout.prototype.border = null;
+mxPartitionLayout.prototype.resizeVertices = !0;
+mxPartitionLayout.prototype.isHorizontal = function() {
+    return this.horizontal
+};
+mxPartitionLayout.prototype.moveCell = function(a, b, c) {
+    c = this.graph.getModel();
+    var d = c.getParent(a);
+    if (null != a && null != d) {
+        for (var e = 0, f = 0, g = c.getChildCount(d), e = 0; e < g; e++) {
+            var h = c.getChildAt(d, e),
+                h = this.getVertexBounds(h);
+            if (null != h) {
+                h = h.x + h.width / 2;
+                if (f < b && h > b) break;
+                f = h
+            }
+        }
+        b = d.getIndex(a);
+        b = Math.max(0, e - (e > b ? 1 : 0));
+        c.add(d, a, b)
+    }
+};
+mxPartitionLayout.prototype.execute = function(a) {
+    var b = this.isHorizontal(),
+        c = this.graph.getModel(),
+        d = c.getGeometry(a);
+    if (null != this.graph.container && (null == d && c.isLayer(a) || a == this.graph.getView().currentRoot)) d = new mxRectangle(0, 0, this.graph.container.offsetWidth - 1, this.graph.container.offsetHeight - 1);
+    if (null != d) {
+        for (var e = [], f = c.getChildCount(a), g = 0; g < f; g++) {
+            var h = c.getChildAt(a, g);
+            !this.isVertexIgnored(h) && this.isVertexMovable(h) && e.push(h)
+        }
+        f = e.length;
+        if (0 < f) {
+            var k = this.border,
+                l = this.border,
+                m = b ?
+                d.height : d.width,
+                m = m - 2 * this.border;
+            a = this.graph.isSwimlane(a) ? this.graph.getStartSize(a) : new mxRectangle;
+            m -= b ? a.height : a.width;
+            k += a.width;
+            l += a.height;
+            a = this.border + (f - 1) * this.spacing;
+            d = b ? (d.width - k - a) / f : (d.height - l - a) / f;
+            if (0 < d) {
+                c.beginUpdate();
+                try {
+                    for (g = 0; g < f; g++) {
+                        var h = e[g],
+                            n = c.getGeometry(h);
+                        null != n && (n = n.clone(), n.x = k, n.y = l, b ? (this.resizeVertices && (n.width = d, n.height = m), k += d + this.spacing) : (this.resizeVertices && (n.height = d, n.width = m), l += d + this.spacing), c.setGeometry(h, n))
+                    }
+                } finally {
+                    c.endUpdate()
+                }
+            }
+        }
+    }
+};
+
+function mxCompactTreeLayout(a, b, c) {
+    mxGraphLayout.call(this, a);
+    this.horizontal = null != b ? b : !0;
+    this.invert = null != c ? c : !1
+}
+mxCompactTreeLayout.prototype = new mxGraphLayout;
+mxCompactTreeLayout.prototype.constructor = mxCompactTreeLayout;
+mxCompactTreeLayout.prototype.horizontal = null;
+mxCompactTreeLayout.prototype.invert = null;
+mxCompactTreeLayout.prototype.resizeParent = !0;
+mxCompactTreeLayout.prototype.groupPadding = 10;
+mxCompactTreeLayout.prototype.parentsChanged = null;
+mxCompactTreeLayout.prototype.moveTree = !1;
+mxCompactTreeLayout.prototype.levelDistance = 10;
+mxCompactTreeLayout.prototype.nodeDistance = 20;
+mxCompactTreeLayout.prototype.resetEdges = !0;
+mxCompactTreeLayout.prototype.prefHozEdgeSep = 5;
+mxCompactTreeLayout.prototype.prefVertEdgeOff = 4;
+mxCompactTreeLayout.prototype.minEdgeJetty = 8;
+mxCompactTreeLayout.prototype.channelBuffer = 4;
+mxCompactTreeLayout.prototype.edgeRouting = !0;
+mxCompactTreeLayout.prototype.isVertexIgnored = function(a) {
+    return mxGraphLayout.prototype.isVertexIgnored.apply(this, arguments) || 0 == this.graph.getConnections(a).length
+};
+mxCompactTreeLayout.prototype.isHorizontal = function() {
+    return this.horizontal
+};
+mxCompactTreeLayout.prototype.execute = function(a, b) {
+    this.parent = a;
+    var c = this.graph.getModel();
+    if (null == b)
+        if (0 < this.graph.getEdges(a, c.getParent(a), this.invert, !this.invert, !1).length) b = a;
+        else {
+            var d = this.graph.findTreeRoots(a, !0, this.invert);
+            if (0 < d.length)
+                for (var e = 0; e < d.length; e++)
+                    if (!this.isVertexIgnored(d[e]) && 0 < this.graph.getEdges(d[e], null, this.invert, !this.invert, !1).length) {
+                        b = d[e];
+                        break
+                    }
+        }
+    if (null != b) {
+        this.parentsChanged = this.resizeParent ? {} : null;
+        c.beginUpdate();
+        try {
+            var f = this.dfs(b, a);
+            if (null !=
+                f) {
+                this.layout(f);
+                var g = this.graph.gridSize,
+                    d = g;
+                if (!this.moveTree) {
+                    var h = this.getVertexBounds(b);
+                    null != h && (g = h.x, d = h.y)
+                }
+                h = null;
+                h = this.isHorizontal() ? this.horizontalLayout(f, g, d) : this.verticalLayout(f, null, g, d);
+                if (null != h) {
+                    var k = e = 0;
+                    0 > h.x && (e = Math.abs(g - h.x));
+                    0 > h.y && (k = Math.abs(d - h.y));
+                    (0 != e || 0 != k) && this.moveNode(f, e, k);
+                    this.resizeParent && this.adjustParents();
+                    this.edgeRouting && this.localEdgeProcessing(f)
+                }
+            }
+        } finally {
+            c.endUpdate()
+        }
+    }
+};
+mxCompactTreeLayout.prototype.moveNode = function(a, b, c) {
+    a.x += b;
+    a.y += c;
+    this.apply(a);
+    for (a = a.child; null != a;) this.moveNode(a, b, c), a = a.next
+};
+mxCompactTreeLayout.prototype.dfs = function(a, b, c) {
+    c = null != c ? c : [];
+    var d = mxCellPath.create(a),
+        e = null;
+    if (null != a && null == c[d] && !this.isVertexIgnored(a)) {
+        c[d] = a;
+        var e = this.createNode(a),
+            d = this.graph.getModel(),
+            f = null;
+        a = this.graph.getEdges(a, b, this.invert, !this.invert, !1, !0);
+        for (var g = this.graph.getView(), h = 0; h < a.length; h++) {
+            var k = a[h];
+            if (!this.isEdgeIgnored(k)) {
+                this.resetEdges && this.setEdgePoints(k, null);
+                this.edgeRouting && (this.setEdgeStyleEnabled(k, !1), this.setEdgePoints(k, null));
+                var l = g.getState(k),
+                    k = null != l ? l.getVisibleTerminal(this.invert) : g.getVisibleTerminal(k, this.invert),
+                    l = this.dfs(k, b, c);
+                null != l && null != d.getGeometry(k) && (null == f ? e.child = l : f.next = l, f = l)
+            }
+        }
+    }
+    return e
+};
+mxCompactTreeLayout.prototype.layout = function(a) {
+    if (null != a) {
+        for (var b = a.child; null != b;) this.layout(b), b = b.next;
+        null != a.child ? this.attachParent(a, this.join(a)) : this.layoutLeaf(a)
+    }
+};
+mxCompactTreeLayout.prototype.horizontalLayout = function(a, b, c, d) {
+    a.x += b + a.offsetX;
+    a.y += c + a.offsetY;
+    d = this.apply(a, d);
+    b = a.child;
+    if (null != b) {
+        d = this.horizontalLayout(b, a.x, a.y, d);
+        c = a.y + b.offsetY;
+        for (var e = b.next; null != e;) d = this.horizontalLayout(e, a.x + b.offsetX, c, d), c += e.offsetY, e = e.next
+    }
+    return d
+};
+mxCompactTreeLayout.prototype.verticalLayout = function(a, b, c, d, e) {
+    a.x += c + a.offsetY;
+    a.y += d + a.offsetX;
+    e = this.apply(a, e);
+    b = a.child;
+    if (null != b) {
+        e = this.verticalLayout(b, a, a.x, a.y, e);
+        c = a.x + b.offsetY;
+        for (d = b.next; null != d;) e = this.verticalLayout(d, a, c, a.y + b.offsetX, e), c += d.offsetY, d = d.next
+    }
+    return e
+};
+mxCompactTreeLayout.prototype.attachParent = function(a, b) {
+    var c = this.nodeDistance + this.levelDistance,
+        d = (b - a.width) / 2 - this.nodeDistance,
+        e = d + a.width + 2 * this.nodeDistance - b;
+    a.child.offsetX = c + a.height;
+    a.child.offsetY = e;
+    a.contour.upperHead = this.createLine(a.height, 0, this.createLine(c, e, a.contour.upperHead));
+    a.contour.lowerHead = this.createLine(a.height, 0, this.createLine(c, d, a.contour.lowerHead))
+};
+mxCompactTreeLayout.prototype.layoutLeaf = function(a) {
+    var b = 2 * this.nodeDistance;
+    a.contour.upperTail = this.createLine(a.height + b, 0);
+    a.contour.upperHead = a.contour.upperTail;
+    a.contour.lowerTail = this.createLine(0, -a.width - b);
+    a.contour.lowerHead = this.createLine(a.height + b, 0, a.contour.lowerTail)
+};
+mxCompactTreeLayout.prototype.join = function(a) {
+    var b = 2 * this.nodeDistance,
+        c = a.child;
+    a.contour = c.contour;
+    for (var d = c.width + b, e = d, c = c.next; null != c;) {
+        var f = this.merge(a.contour, c.contour);
+        c.offsetY = f + d;
+        c.offsetX = 0;
+        d = c.width + b;
+        e += f + d;
+        c = c.next
+    }
+    return e
+};
+mxCompactTreeLayout.prototype.merge = function(a, b) {
+    for (var c = 0, d = 0, e = 0, f = a.lowerHead, g = b.upperHead; null != g && null != f;) {
+        var h = this.offset(c, d, g.dx, g.dy, f.dx, f.dy),
+            d = d + h,
+            e = e + h;
+        c + g.dx <= f.dx ? (c += g.dx, d += g.dy, g = g.next) : (c -= f.dx, d -= f.dy, f = f.next)
+    }
+    null != g ? (c = this.bridge(a.upperTail, 0, 0, g, c, d), a.upperTail = null != c.next ? b.upperTail : c, a.lowerTail = b.lowerTail) : (c = this.bridge(b.lowerTail, c, d, f, 0, 0), null == c.next && (a.lowerTail = c));
+    a.lowerHead = b.lowerHead;
+    return e
+};
+mxCompactTreeLayout.prototype.offset = function(a, b, c, d, e, f) {
+    var g = 0;
+    if (e <= a || 0 >= a + c) return 0;
+    g = 0 < e * d - c * f ? 0 > a ? a * d / c - b : 0 < a ? a * f / e - b : -b : e < a + c ? f - (b + (e - a) * d / c) : e > a + c ? (c + a) * f / e - (b + d) : f - (b + d);
+    return 0 < g ? g : 0
+};
+mxCompactTreeLayout.prototype.bridge = function(a, b, c, d, e, f) {
+    b = e + d.dx - b;
+    e = e = 0;
+    0 == d.dx ? e = d.dy : (e = b * d.dy, e /= d.dx);
+    b = this.createLine(b, e, d.next);
+    a.next = this.createLine(0, f + d.dy - e - c, b);
+    return b
+};
+mxCompactTreeLayout.prototype.createNode = function(a) {
+    var b = {};
+    b.cell = a;
+    b.x = 0;
+    b.y = 0;
+    b.width = 0;
+    b.height = 0;
+    a = this.getVertexBounds(a);
+    null != a && (this.isHorizontal() ? (b.width = a.height, b.height = a.width) : (b.width = a.width, b.height = a.height));
+    b.offsetX = 0;
+    b.offsetY = 0;
+    b.contour = {};
+    return b
+};
+mxCompactTreeLayout.prototype.apply = function(a, b) {
+    var c = this.graph.getModel(),
+        d = a.cell,
+        e = c.getGeometry(d);
+    null != d && null != e && (this.isVertexMovable(d) && (e = this.setVertexLocation(d, a.x, a.y), this.resizeParent && (c = c.getParent(d), d = mxCellPath.create(c), null == this.parentsChanged[d] && (this.parentsChanged[d] = c))), b = null == b ? new mxRectangle(e.x, e.y, e.width, e.height) : new mxRectangle(Math.min(b.x, e.x), Math.min(b.y, e.y), Math.max(b.x + b.width, e.x + e.width), Math.max(b.y + b.height, e.y + e.height)));
+    return b
+};
+mxCompactTreeLayout.prototype.createLine = function(a, b, c) {
+    var d = {};
+    d.dx = a;
+    d.dy = b;
+    d.next = c;
+    return d
+};
+mxCompactTreeLayout.prototype.adjustParents = function() {
+    var a = [],
+        b;
+    for (b in this.parentsChanged) a.push(this.parentsChanged[b]);
+    this.arrangeGroups(mxUtils.sortCells(a, !0), this.groupPadding)
+};
+mxCompactTreeLayout.prototype.localEdgeProcessing = function(a) {
+    this.processNodeOutgoing(a);
+    for (a = a.child; null != a;) this.localEdgeProcessing(a), a = a.next
+};
+mxCompactTreeLayout.prototype.processNodeOutgoing = function(a) {
+    for (var b = a.child, c = a.cell, d = 0, e = []; null != b;) {
+        d++;
+        var f = b.x;
+        this.horizontal && (f = b.y);
+        e.push(new WeightedCellSorter(b, f));
+        b = b.next
+    }
+    e.sort(WeightedCellSorter.prototype.compare);
+    var f = a.width,
+        g = (d + 1) * this.prefHozEdgeSep;
+    f > g + 2 * this.prefHozEdgeSep && (f -= 2 * this.prefHozEdgeSep);
+    a = f / d;
+    b = a / 2;
+    f > g + 2 * this.prefHozEdgeSep && (b += this.prefHozEdgeSep);
+    for (var f = this.minEdgeJetty - this.prefVertEdgeOff, g = 0, h = this.getVertexBounds(c), k = 0; k < e.length; k++) {
+        for (var l =
+                e[k].cell.cell, m = this.getVertexBounds(l), l = this.graph.getEdgesBetween(c, l, !1), n = [], p = 0, q = 0, s = 0; s < l.length; s++) this.horizontal ? (p = h.x + h.width, q = h.y + b, n.push(new mxPoint(p, q)), p = h.x + h.width + f, n.push(new mxPoint(p, q)), q = m.y + m.height / 2) : (p = h.x + b, q = h.y + h.height, n.push(new mxPoint(p, q)), q = h.y + h.height + f, n.push(new mxPoint(p, q)), p = m.x + m.width / 2), n.push(new mxPoint(p, q)), this.setEdgePoints(l[s], n);
+        k < d / 2 ? f += this.prefVertEdgeOff : k > d / 2 && (f -= this.prefVertEdgeOff);
+        b += a;
+        g = Math.max(g, f)
+    }
+};
+
+function WeightedCellSorter(a, b) {
+    this.cell = a;
+    this.weightedValue = b
+}
+WeightedCellSorter.prototype.weightedValue = 0;
+WeightedCellSorter.prototype.nudge = !1;
+WeightedCellSorter.prototype.visited = !1;
+WeightedCellSorter.prototype.rankIndex = null;
+WeightedCellSorter.prototype.cell = null;
+WeightedCellSorter.prototype.compare = function(a, b) {
+    return null != a && null != b ? b.weightedValue > a.weightedValue ? 1 : b.weightedValue < a.weightedValue ? -1 : b.nudge ? 1 : -1 : 0
+};
+
+function mxFastOrganicLayout(a) {
+    mxGraphLayout.call(this, a)
+}
+mxFastOrganicLayout.prototype = new mxGraphLayout;
+mxFastOrganicLayout.prototype.constructor = mxFastOrganicLayout;
+mxFastOrganicLayout.prototype.useInputOrigin = !0;
+mxFastOrganicLayout.prototype.resetEdges = !0;
+mxFastOrganicLayout.prototype.disableEdgeStyle = !0;
+mxFastOrganicLayout.prototype.forceConstant = 50;
+mxFastOrganicLayout.prototype.forceConstantSquared = 0;
+mxFastOrganicLayout.prototype.minDistanceLimit = 2;
+mxFastOrganicLayout.prototype.maxDistanceLimit = 500;
+mxFastOrganicLayout.prototype.minDistanceLimitSquared = 4;
+mxFastOrganicLayout.prototype.initialTemp = 200;
+mxFastOrganicLayout.prototype.temperature = 0;
+mxFastOrganicLayout.prototype.maxIterations = 0;
+mxFastOrganicLayout.prototype.iteration = 0;
+mxFastOrganicLayout.prototype.allowedToRun = !0;
+mxFastOrganicLayout.prototype.isVertexIgnored = function(a) {
+    return mxGraphLayout.prototype.isVertexIgnored.apply(this, arguments) || 0 == this.graph.getConnections(a).length
+};
+mxFastOrganicLayout.prototype.execute = function(a) {
+    var b = this.graph.getModel();
+    this.vertexArray = [];
+    for (var c = this.graph.getChildVertices(a), d = 0; d < c.length; d++) this.isVertexIgnored(c[d]) || this.vertexArray.push(c[d]);
+    var e = this.useInputOrigin ? this.graph.view.getBounds(this.vertexArray) : null,
+        f = this.vertexArray.length;
+    this.indices = [];
+    this.dispX = [];
+    this.dispY = [];
+    this.cellLocation = [];
+    this.isMoveable = [];
+    this.neighbours = [];
+    this.radius = [];
+    this.radiusSquared = [];
+    0.0010 > this.forceConstant && (this.forceConstant =
+        0.0010);
+    this.forceConstantSquared = this.forceConstant * this.forceConstant;
+    for (d = 0; d < this.vertexArray.length; d++) {
+        var g = this.vertexArray[d];
+        this.cellLocation[d] = [];
+        var h = mxCellPath.create(g);
+        this.indices[h] = d;
+        var k = this.getVertexBounds(g),
+            l = k.width,
+            m = k.height,
+            n = k.x,
+            p = k.y;
+        this.cellLocation[d][0] = n + l / 2;
+        this.cellLocation[d][1] = p + m / 2;
+        this.radius[d] = Math.min(l, m);
+        this.radiusSquared[d] = this.radius[d] * this.radius[d]
+    }
+    b.beginUpdate();
+    try {
+        for (d = 0; d < f; d++) {
+            this.dispX[d] = 0;
+            this.dispY[d] = 0;
+            this.isMoveable[d] = this.isVertexMovable(this.vertexArray[d]);
+            var q = this.graph.getConnections(this.vertexArray[d], a),
+                c = this.graph.getOpposites(q, this.vertexArray[d]);
+            this.neighbours[d] = [];
+            for (l = 0; l < c.length; l++) {
+                this.resetEdges && this.graph.resetEdge(q[l]);
+                this.disableEdgeStyle && this.setEdgeStyleEnabled(q[l], !1);
+                var h = mxCellPath.create(c[l]),
+                    s = this.indices[h];
+                this.neighbours[d][l] = null != s ? s : d
+            }
+        }
+        this.temperature = this.initialTemp;
+        0 == this.maxIterations && (this.maxIterations = 20 * Math.sqrt(f));
+        for (this.iteration = 0; this.iteration < this.maxIterations; this.iteration++) {
+            if (!this.allowedToRun) return;
+            this.calcRepulsion();
+            this.calcAttraction();
+            this.calcPositions();
+            this.reduceTemperature()
+        }
+        a = c = null;
+        for (d = 0; d < this.vertexArray.length; d++) g = this.vertexArray[d], this.isVertexMovable(g) && (k = this.getVertexBounds(g), null != k && (this.cellLocation[d][0] -= k.width / 2, this.cellLocation[d][1] -= k.height / 2, n = this.graph.snap(this.cellLocation[d][0]), p = this.graph.snap(this.cellLocation[d][1]), this.setVertexLocation(g, n, p), c = null == c ? n : Math.min(c, n), a = null == a ? p : Math.min(a, p)));
+        d = -(c || 0) + 1;
+        g = -(a || 0) + 1;
+        null != e && (d += e.x,
+            g += e.y);
+        this.graph.moveCells(this.vertexArray, d, g)
+    } finally {
+        b.endUpdate()
+    }
+};
+mxFastOrganicLayout.prototype.calcPositions = function() {
+    for (var a = 0; a < this.vertexArray.length; a++)
+        if (this.isMoveable[a]) {
+            var b = Math.sqrt(this.dispX[a] * this.dispX[a] + this.dispY[a] * this.dispY[a]);
+            0.0010 > b && (b = 0.0010);
+            var c = this.dispX[a] / b * Math.min(b, this.temperature),
+                b = this.dispY[a] / b * Math.min(b, this.temperature);
+            this.dispX[a] = 0;
+            this.dispY[a] = 0;
+            this.cellLocation[a][0] += c;
+            this.cellLocation[a][1] += b
+        }
+};
+mxFastOrganicLayout.prototype.calcAttraction = function() {
+    for (var a = 0; a < this.vertexArray.length; a++)
+        for (var b = 0; b < this.neighbours[a].length; b++) {
+            var c = this.neighbours[a][b];
+            if (a != c && this.isMoveable[a] && this.isMoveable[c]) {
+                var d = this.cellLocation[a][0] - this.cellLocation[c][0],
+                    e = this.cellLocation[a][1] - this.cellLocation[c][1],
+                    f = d * d + e * e - this.radiusSquared[a] - this.radiusSquared[c];
+                f < this.minDistanceLimitSquared && (f = this.minDistanceLimitSquared);
+                var g = Math.sqrt(f),
+                    f = f / this.forceConstant,
+                    d = d / g * f,
+                    e = e / g * f;
+                this.dispX[a] -= d;
+                this.dispY[a] -= e;
+                this.dispX[c] += d;
+                this.dispY[c] += e
+            }
+        }
+};
+mxFastOrganicLayout.prototype.calcRepulsion = function() {
+    for (var a = this.vertexArray.length, b = 0; b < a; b++)
+        for (var c = b; c < a; c++) {
+            if (!this.allowedToRun) return;
+            if (c != b && this.isMoveable[b] && this.isMoveable[c]) {
+                var d = this.cellLocation[b][0] - this.cellLocation[c][0],
+                    e = this.cellLocation[b][1] - this.cellLocation[c][1];
+                0 == d && (d = 0.01 + Math.random());
+                0 == e && (e = 0.01 + Math.random());
+                var f = Math.sqrt(d * d + e * e),
+                    g = f - this.radius[b] - this.radius[c];
+                g > this.maxDistanceLimit || (g < this.minDistanceLimit && (g = this.minDistanceLimit), g = this.forceConstantSquared /
+                    g, d = d / f * g, e = e / f * g, this.dispX[b] += d, this.dispY[b] += e, this.dispX[c] -= d, this.dispY[c] -= e)
+            }
+        }
+};
+mxFastOrganicLayout.prototype.reduceTemperature = function() {
+    this.temperature = this.initialTemp * (1 - this.iteration / this.maxIterations)
+};
+
+function mxCircleLayout(a, b) {
+    mxGraphLayout.call(this, a);
+    this.radius = null != b ? b : 100
+}
+mxCircleLayout.prototype = new mxGraphLayout;
+mxCircleLayout.prototype.constructor = mxCircleLayout;
+mxCircleLayout.prototype.radius = null;
+mxCircleLayout.prototype.moveCircle = !1;
+mxCircleLayout.prototype.x0 = 0;
+mxCircleLayout.prototype.y0 = 0;
+mxCircleLayout.prototype.resetEdges = !0;
+mxCircleLayout.prototype.disableEdgeStyle = !0;
+mxCircleLayout.prototype.execute = function(a) {
+    var b = this.graph.getModel();
+    b.beginUpdate();
+    try {
+        for (var c = 0, d = null, e = null, f = [], g = b.getChildCount(a), h = 0; h < g; h++) {
+            var k = b.getChildAt(a, h);
+            if (this.isVertexIgnored(k)) this.isEdgeIgnored(k) || (this.resetEdges && this.graph.resetEdge(k), this.disableEdgeStyle && this.setEdgeStyleEnabled(k, !1));
+            else {
+                f.push(k);
+                var l = this.getVertexBounds(k),
+                    d = null == d ? l.y : Math.min(d, l.y),
+                    e = null == e ? l.x : Math.min(e, l.x),
+                    c = Math.max(c, Math.max(l.width, l.height))
+            }
+        }
+        var m = this.getRadius(f.length,
+            c);
+        this.moveCircle && (e = this.x0, d = this.y0);
+        this.circle(f, m, e, d)
+    } finally {
+        b.endUpdate()
+    }
+};
+mxCircleLayout.prototype.getRadius = function(a, b) {
+    return Math.max(a * b / Math.PI, this.radius)
+};
+mxCircleLayout.prototype.circle = function(a, b, c, d) {
+    for (var e = a.length, f = 2 * Math.PI / e, g = 0; g < e; g++) this.isVertexMovable(a[g]) && this.setVertexLocation(a[g], c + b + b * Math.sin(g * f), d + b + b * Math.cos(g * f))
+};
+
+function mxParallelEdgeLayout(a) {
+    mxGraphLayout.call(this, a)
+}
+mxParallelEdgeLayout.prototype = new mxGraphLayout;
+mxParallelEdgeLayout.prototype.constructor = mxParallelEdgeLayout;
+mxParallelEdgeLayout.prototype.spacing = 20;
+mxParallelEdgeLayout.prototype.execute = function(a) {
+    a = this.findParallels(a);
+    this.graph.model.beginUpdate();
+    try {
+        for (var b in a) {
+            var c = a[b];
+            1 < c.length && this.layout(c)
+        }
+    } finally {
+        this.graph.model.endUpdate()
+    }
+};
+mxParallelEdgeLayout.prototype.findParallels = function(a) {
+    for (var b = this.graph.getModel(), c = [], d = b.getChildCount(a), e = 0; e < d; e++) {
+        var f = b.getChildAt(a, e);
+        if (!this.isEdgeIgnored(f)) {
+            var g = this.getEdgeId(f);
+            null != g && (null == c[g] && (c[g] = []), c[g].push(f))
+        }
+    }
+    return c
+};
+mxParallelEdgeLayout.prototype.getEdgeId = function(a) {
+    var b = this.graph.getView(),
+        c = b.getState(a),
+        d = null != c ? c.getVisibleTerminal(!0) : b.getVisibleTerminal(a, !0);
+    a = null != c ? c.getVisibleTerminal(!1) : b.getVisibleTerminal(a, !1);
+    return null != d && null != a ? (d = mxCellPath.create(d), a = mxCellPath.create(a), d > a ? a + "-" + d : d + "-" + a) : null
+};
+mxParallelEdgeLayout.prototype.layout = function(a) {
+    var b = a[0],
+        c = this.graph.getModel(),
+        d = c.getGeometry(c.getTerminal(b, !0)),
+        e = c.getGeometry(c.getTerminal(b, !1));
+    if (d == e)
+        for (var b = d.x + d.width + this.spacing, c = d.y + d.height / 2, f = 0; f < a.length; f++) this.route(a[f], b, c), b += this.spacing;
+    else if (null != d && null != e)
+        for (var b = d.x + d.width / 2, c = d.y + d.height / 2, f = e.x + e.width / 2 - b, g = e.y + e.height / 2 - c, e = Math.sqrt(f * f + g * g), d = g * this.spacing / e, e = f * this.spacing / e, b = b + f / 2 + d * (a.length - 1) / 2, c = c + g / 2 - e * (a.length - 1) / 2, f = 0; f < a.length; f++) this.route(a[f],
+            b, c), b -= d, c += e
+};
+mxParallelEdgeLayout.prototype.route = function(a, b, c) {
+    this.graph.isCellMovable(a) && this.setEdgePoints(a, [new mxPoint(b, c)])
+};
+
+function mxCompositeLayout(a, b, c) {
+    mxGraphLayout.call(this, a);
+    this.layouts = b;
+    this.master = c
+}
+mxCompositeLayout.prototype = new mxGraphLayout;
+mxCompositeLayout.prototype.constructor = mxCompositeLayout;
+mxCompositeLayout.prototype.layouts = null;
+mxCompositeLayout.prototype.master = null;
+mxCompositeLayout.prototype.moveCell = function(a, b, c) {
+    null != this.master ? this.master.move.apply(this.master, arguments) : this.layouts[0].move.apply(this.layouts[0], arguments)
+};
+mxCompositeLayout.prototype.execute = function(a) {
+    var b = this.graph.getModel();
+    b.beginUpdate();
+    try {
+        for (var c = 0; c < this.layouts.length; c++) this.layouts[c].execute.apply(this.layouts[c], arguments)
+    } finally {
+        b.endUpdate()
+    }
+};
+
+function mxEdgeLabelLayout(a, b) {
+    mxGraphLayout.call(this, a)
+}
+mxEdgeLabelLayout.prototype = new mxGraphLayout;
+mxEdgeLabelLayout.prototype.constructor = mxEdgeLabelLayout;
+mxEdgeLabelLayout.prototype.execute = function(a) {
+    for (var b = this.graph.view, c = this.graph.getModel(), d = [], e = [], f = c.getChildCount(a), g = 0; g < f; g++) {
+        var h = c.getChildAt(a, g),
+            k = b.getState(h);
+        null != k && (this.isVertexIgnored(h) ? this.isEdgeIgnored(h) || d.push(k) : e.push(k))
+    }
+    this.placeLabels(e, d)
+};
+mxEdgeLabelLayout.prototype.placeLabels = function(a, b) {
+    var c = this.graph.getModel();
+    c.beginUpdate();
+    try {
+        for (var d = 0; d < b.length; d++) {
+            var e = b[d];
+            if (null != e && null != e.text && null != e.text.boundingBox)
+                for (var f = 0; f < a.length; f++) {
+                    var g = a[f];
+                    null != g && this.avoid(e, g)
+                }
+        }
+    } finally {
+        c.endUpdate()
+    }
+};
+mxEdgeLabelLayout.prototype.avoid = function(a, b) {
+    var c = this.graph.getModel(),
+        d = a.text.boundingBox;
+    if (mxUtils.intersects(d, b)) {
+        var e = -d.y - d.height + b.y,
+            f = -d.y + b.y + b.height,
+            e = Math.abs(e) < Math.abs(f) ? e : f,
+            f = -d.x - d.width + b.x,
+            d = -d.x + b.x + b.width,
+            d = Math.abs(f) < Math.abs(d) ? f : d;
+        Math.abs(d) < Math.abs(e) ? e = 0 : d = 0;
+        f = c.getGeometry(a.cell);
+        null != f && (f = f.clone(), null != f.offset ? (f.offset.x += d, f.offset.y += e) : f.offset = new mxPoint(d, e), c.setGeometry(a.cell, f))
+    }
+};
+
+function mxGraphAbstractHierarchyCell() {
+    this.x = [];
+    this.y = [];
+    this.temp = []
+}
+mxGraphAbstractHierarchyCell.prototype.maxRank = -1;
+mxGraphAbstractHierarchyCell.prototype.minRank = -1;
+mxGraphAbstractHierarchyCell.prototype.x = null;
+mxGraphAbstractHierarchyCell.prototype.y = null;
+mxGraphAbstractHierarchyCell.prototype.width = 0;
+mxGraphAbstractHierarchyCell.prototype.height = 0;
+mxGraphAbstractHierarchyCell.prototype.nextLayerConnectedCells = null;
+mxGraphAbstractHierarchyCell.prototype.previousLayerConnectedCells = null;
+mxGraphAbstractHierarchyCell.prototype.temp = null;
+mxGraphAbstractHierarchyCell.prototype.getNextLayerConnectedCells = function(a) {
+    return null
+};
+mxGraphAbstractHierarchyCell.prototype.getPreviousLayerConnectedCells = function(a) {
+    return null
+};
+mxGraphAbstractHierarchyCell.prototype.isEdge = function() {
+    return !1
+};
+mxGraphAbstractHierarchyCell.prototype.isVertex = function() {
+    return !1
+};
+mxGraphAbstractHierarchyCell.prototype.getGeneralPurposeVariable = function(a) {
+    return null
+};
+mxGraphAbstractHierarchyCell.prototype.setGeneralPurposeVariable = function(a, b) {
+    return null
+};
+mxGraphAbstractHierarchyCell.prototype.setX = function(a, b) {
+    this.isVertex() ? this.x[0] = b : this.isEdge() && (this.x[a - this.minRank - 1] = b)
+};
+mxGraphAbstractHierarchyCell.prototype.getX = function(a) {
+    return this.isVertex() ? this.x[0] : this.isEdge() ? this.x[a - this.minRank - 1] : 0
+};
+mxGraphAbstractHierarchyCell.prototype.setY = function(a, b) {
+    this.isVertex() ? this.y[0] = b : this.isEdge() && (this.y[a - this.minRank - 1] = b)
+};
+
+function mxGraphHierarchyNode(a) {
+    mxGraphAbstractHierarchyCell.apply(this, arguments);
+    this.cell = a
+}
+mxGraphHierarchyNode.prototype = new mxGraphAbstractHierarchyCell;
+mxGraphHierarchyNode.prototype.constructor = mxGraphHierarchyNode;
+mxGraphHierarchyNode.prototype.cell = null;
+mxGraphHierarchyNode.prototype.connectsAsTarget = [];
+mxGraphHierarchyNode.prototype.connectsAsSource = [];
+mxGraphHierarchyNode.prototype.hashCode = !1;
+mxGraphHierarchyNode.prototype.getRankValue = function(a) {
+    return this.maxRank
+};
+mxGraphHierarchyNode.prototype.getNextLayerConnectedCells = function(a) {
+    if (null == this.nextLayerConnectedCells) {
+        this.nextLayerConnectedCells = [];
+        this.nextLayerConnectedCells[0] = [];
+        for (var b = 0; b < this.connectsAsTarget.length; b++) {
+            var c = this.connectsAsTarget[b]; - 1 == c.maxRank || c.maxRank == a + 1 ? this.nextLayerConnectedCells[0].push(c.source) : this.nextLayerConnectedCells[0].push(c)
+        }
+    }
+    return this.nextLayerConnectedCells[0]
+};
+mxGraphHierarchyNode.prototype.getPreviousLayerConnectedCells = function(a) {
+    if (null == this.previousLayerConnectedCells) {
+        this.previousLayerConnectedCells = [];
+        this.previousLayerConnectedCells[0] = [];
+        for (var b = 0; b < this.connectsAsSource.length; b++) {
+            var c = this.connectsAsSource[b]; - 1 == c.minRank || c.minRank == a - 1 ? this.previousLayerConnectedCells[0].push(c.target) : this.previousLayerConnectedCells[0].push(c)
+        }
+    }
+    return this.previousLayerConnectedCells[0]
+};
+mxGraphHierarchyNode.prototype.isVertex = function() {
+    return !0
+};
+mxGraphHierarchyNode.prototype.getGeneralPurposeVariable = function(a) {
+    return this.temp[0]
+};
+mxGraphHierarchyNode.prototype.setGeneralPurposeVariable = function(a, b) {
+    this.temp[0] = b
+};
+mxGraphHierarchyNode.prototype.isAncestor = function(a) {
+    if (null != a && null != this.hashCode && null != a.hashCode && this.hashCode.length < a.hashCode.length) {
+        if (this.hashCode == a.hashCode) return !0;
+        if (null == this.hashCode || null == this.hashCode) return !1;
+        for (var b = 0; b < this.hashCode.length; b++)
+            if (this.hashCode[b] != a.hashCode[b]) return !1;
+        return !0
+    }
+    return !1
+};
+mxGraphHierarchyNode.prototype.getCoreCell = function() {
+    return this.cell
+};
+
+function mxGraphHierarchyEdge(a) {
+    mxGraphAbstractHierarchyCell.apply(this, arguments);
+    this.edges = a
+}
+mxGraphHierarchyEdge.prototype = new mxGraphAbstractHierarchyCell;
+mxGraphHierarchyEdge.prototype.constructor = mxGraphHierarchyEdge;
+mxGraphHierarchyEdge.prototype.edges = null;
+mxGraphHierarchyEdge.prototype.source = null;
+mxGraphHierarchyEdge.prototype.target = null;
+mxGraphHierarchyEdge.prototype.isReversed = !1;
+mxGraphHierarchyEdge.prototype.invert = function(a) {
+    a = this.source;
+    this.source = this.target;
+    this.target = a;
+    this.isReversed = !this.isReversed
+};
+mxGraphHierarchyEdge.prototype.getNextLayerConnectedCells = function(a) {
+    if (null == this.nextLayerConnectedCells) {
+        this.nextLayerConnectedCells = [];
+        for (var b = 0; b < this.temp.length; b++) this.nextLayerConnectedCells[b] = [], b == this.temp.length - 1 ? this.nextLayerConnectedCells[b].push(this.source) : this.nextLayerConnectedCells[b].push(this)
+    }
+    return this.nextLayerConnectedCells[a - this.minRank - 1]
+};
+mxGraphHierarchyEdge.prototype.getPreviousLayerConnectedCells = function(a) {
+    if (null == this.previousLayerConnectedCells) {
+        this.previousLayerConnectedCells = [];
+        for (var b = 0; b < this.temp.length; b++) this.previousLayerConnectedCells[b] = [], 0 == b ? this.previousLayerConnectedCells[b].push(this.target) : this.previousLayerConnectedCells[b].push(this)
+    }
+    return this.previousLayerConnectedCells[a - this.minRank - 1]
+};
+mxGraphHierarchyEdge.prototype.isEdge = function() {
+    return !0
+};
+mxGraphHierarchyEdge.prototype.getGeneralPurposeVariable = function(a) {
+    return this.temp[a - this.minRank - 1]
+};
+mxGraphHierarchyEdge.prototype.setGeneralPurposeVariable = function(a, b) {
+    this.temp[a - this.minRank - 1] = b
+};
+mxGraphHierarchyEdge.prototype.getCoreCell = function() {
+    return null != this.edges && 0 < this.edges.length ? this.edges[0] : null
+};
+
+function mxGraphHierarchyModel(a, b, c, d, e) {
+    a.getGraph();
+    this.tightenToSource = e;
+    this.roots = c;
+    this.parent = d;
+    this.vertexMapper = {};
+    this.edgeMapper = {};
+    this.maxRank = 0;
+    c = [];
+    null == b && (b = this.graph.getChildVertices(d));
+    this.maxRank = this.SOURCESCANSTARTRANK;
+    this.createInternalCells(a, b, c);
+    for (d = 0; d < b.length; d++) {
+        e = c[d].connectsAsSource;
+        for (var f = 0; f < e.length; f++) {
+            var g = e[f],
+                h = g.edges;
+            if (null != h && 0 < h.length) {
+                var h = h[0],
+                    k = a.getVisibleTerminal(h, !1),
+                    k = mxCellPath.create(k),
+                    k = this.vertexMapper[k];
+                c[d] == k && (k = a.getVisibleTerminal(h, !0), k = mxCellPath.create(k), k = this.vertexMapper[k]);
+                null != k && c[d] != k && (g.target = k, 0 == k.connectsAsTarget.length && (k.connectsAsTarget = []), 0 > mxUtils.indexOf(k.connectsAsTarget, g) && k.connectsAsTarget.push(g))
+            }
+        }
+        c[d].temp[0] = 1
+    }
+}
+mxGraphHierarchyModel.prototype.maxRank = null;
+mxGraphHierarchyModel.prototype.vertexMapper = null;
+mxGraphHierarchyModel.prototype.edgeMapper = null;
+mxGraphHierarchyModel.prototype.ranks = null;
+mxGraphHierarchyModel.prototype.roots = null;
+mxGraphHierarchyModel.prototype.parent = null;
+mxGraphHierarchyModel.prototype.dfsCount = 0;
+mxGraphHierarchyModel.prototype.SOURCESCANSTARTRANK = 1E8;
+mxGraphHierarchyModel.prototype.tightenToSource = !1;
+mxGraphHierarchyModel.prototype.createInternalCells = function(a, b, c) {
+    for (var d = a.getGraph(), e = 0; e < b.length; e++) {
+        c[e] = new mxGraphHierarchyNode(b[e]);
+        var f = mxCellPath.create(b[e]);
+        this.vertexMapper[f] = c[e];
+        f = a.getEdges(b[e]);
+        c[e].connectsAsSource = [];
+        for (var g = 0; g < f.length; g++) {
+            var h = a.getVisibleTerminal(f[g], !1);
+            if (h != b[e] && h != b[e] && a.graph.model.isVertex(h) && !a.isVertexIgnored(h)) {
+                var k = a.getEdgesBetween(b[e], h, !1),
+                    l = a.getEdgesBetween(b[e], h, !0),
+                    h = mxCellPath.create(k[0]);
+                if (null != k && 0 < k.length && null ==
+                    this.edgeMapper[h] && 2 * l.length >= k.length) {
+                    for (var l = new mxGraphHierarchyEdge(k), m = 0; m < k.length; m++) {
+                        var n = k[m],
+                            h = mxCellPath.create(n);
+                        this.edgeMapper[h] = l;
+                        d.resetEdge(n);
+                        a.disableEdgeStyle && (a.setEdgeStyleEnabled(n, !1), a.setOrthogonalEdge(n, !0))
+                    }
+                    l.source = c[e];
+                    0 > mxUtils.indexOf(c[e].connectsAsSource, l) && c[e].connectsAsSource.push(l)
+                }
+            }
+        }
+        c[e].temp[0] = 0
+    }
+};
+mxGraphHierarchyModel.prototype.initialRank = function() {
+    var a = [];
+    if (null != this.roots)
+        for (var b = 0; b < this.roots.length; b++) {
+            var c = mxCellPath.create(this.roots[b]),
+                c = this.vertexMapper[c];
+            null != c && a.push(c)
+        }
+    for (var d in this.vertexMapper) c = this.vertexMapper[d], c.temp[0] = -1;
+    for (var e = a.slice(); 0 < a.length;) {
+        var c = a[0],
+            f, g;
+        f = c.connectsAsTarget;
+        g = c.connectsAsSource;
+        for (var h = !0, k = this.SOURCESCANSTARTRANK, b = 0; b < f.length; b++) {
+            var l = f[b];
+            if (5270620 == l.temp[0]) l = l.source, k = Math.min(k, l.temp[0] - 1);
+            else {
+                h = !1;
+                break
+            }
+        }
+        if (h) {
+            c.temp[0] =
+                k;
+            this.maxRank = Math.min(this.maxRank, k);
+            if (null != g)
+                for (b = 0; b < g.length; b++) l = g[b], l.temp[0] = 5270620, l = l.target, -1 == l.temp[0] && (a.push(l), l.temp[0] = -2);
+            a.shift()
+        } else if (b = a.shift(), a.push(c), b == c && 1 == a.length) break
+    }
+    for (d in this.vertexMapper) c = this.vertexMapper[d], c.temp[0] -= this.maxRank;
+    for (b = 0; b < e.length; b++) {
+        c = e[b];
+        a = 0;
+        f = c.connectsAsSource;
+        for (d = 0; d < f.length; d++) l = f[d], l = l.target, c.temp[0] = Math.max(a, l.temp[0] + 1), a = c.temp[0]
+    }
+    this.maxRank = this.SOURCESCANSTARTRANK - this.maxRank
+};
+mxGraphHierarchyModel.prototype.fixRanks = function() {
+    var a = [];
+    this.ranks = [];
+    for (var b = 0; b < this.maxRank + 1; b++) a[b] = [], this.ranks[b] = a[b];
+    var c = null;
+    if (null != this.roots)
+        for (var d = this.roots, c = [], b = 0; b < d.length; b++) {
+            var e = mxCellPath.create(d[b]);
+            c[b] = this.vertexMapper[e]
+        }
+    this.visit(function(b, c, d, e, l) {
+        0 == l && (0 > c.maxRank && 0 > c.minRank) && (a[c.temp[0]].push(c), c.maxRank = c.temp[0], c.minRank = c.temp[0], c.temp[0] = a[c.maxRank].length - 1);
+        if (null != b && null != d && 1 < b.maxRank - c.maxRank) {
+            d.maxRank = b.maxRank;
+            d.minRank =
+                c.maxRank;
+            d.temp = [];
+            d.x = [];
+            d.y = [];
+            for (b = d.minRank + 1; b < d.maxRank; b++) a[b].push(d), d.setGeneralPurposeVariable(b, a[b].length - 1)
+        }
+    }, c, !1, null)
+};
+mxGraphHierarchyModel.prototype.visit = function(a, b, c, d) {
+    if (null != b) {
+        for (var e = 0; e < b.length; e++) {
+            var f = b[e];
+            null != f && (null == d && (d = {}), c ? (f.hashCode = [], f.hashCode[0] = this.dfsCount, f.hashCode[1] = e, this.extendedDfs(null, f, null, a, d, f.hashCode, e, 0)) : this.dfs(null, f, null, a, d, 0))
+        }
+        this.dfsCount++
+    }
+};
+mxGraphHierarchyModel.prototype.dfs = function(a, b, c, d, e, f) {
+    if (null != b) {
+        var g = mxCellPath.create(b.cell);
+        if (null == e[g]) {
+            e[g] = b;
+            d(a, b, c, f, 0);
+            a = b.connectsAsSource.slice();
+            for (c = 0; c < a.length; c++) g = a[c], this.dfs(b, g.target, g, d, e, f + 1)
+        } else d(a, b, c, f, 1)
+    }
+};
+mxGraphHierarchyModel.prototype.extendedDfs = function(a, b, c, d, e, f, g, h) {
+    if (null != b) {
+        if (null != a && (null == b.hashCode || b.hashCode[0] != a.hashCode[0])) f = a.hashCode.length + 1, b.hashCode = a.hashCode.slice(), b.hashCode[f - 1] = g;
+        g = mxCellPath.create(b.cell);
+        if (null == e[g]) {
+            e[g] = b;
+            d(a, b, c, h, 0);
+            a = b.connectsAsSource.slice();
+            for (c = 0; c < a.length; c++) g = a[c], this.extendedDfs(b, g.target, g, d, e, b.hashCode, c, h + 1)
+        } else d(a, b, c, h, 1)
+    }
+};
+
+function mxHierarchicalLayoutStage() {}
+mxHierarchicalLayoutStage.prototype.execute = function(a) {};
+
+function mxMedianHybridCrossingReduction(a) {
+    this.layout = a
+}
+mxMedianHybridCrossingReduction.prototype = new mxHierarchicalLayoutStage;
+mxMedianHybridCrossingReduction.prototype.constructor = mxMedianHybridCrossingReduction;
+mxMedianHybridCrossingReduction.prototype.layout = null;
+mxMedianHybridCrossingReduction.prototype.maxIterations = 24;
+mxMedianHybridCrossingReduction.prototype.nestedBestRanks = null;
+mxMedianHybridCrossingReduction.prototype.currentBestCrossings = 0;
+mxMedianHybridCrossingReduction.prototype.iterationsWithoutImprovement = 0;
+mxMedianHybridCrossingReduction.prototype.maxNoImprovementIterations = 2;
+mxMedianHybridCrossingReduction.prototype.execute = function(a) {
+    a = this.layout.getModel();
+    this.nestedBestRanks = [];
+    for (var b = 0; b < a.ranks.length; b++) this.nestedBestRanks[b] = a.ranks[b].slice();
+    for (var c = 0, d = this.calculateCrossings(a), b = 0; b < this.maxIterations && c < this.maxNoImprovementIterations; b++) {
+        this.weightedMedian(b, a);
+        this.transpose(b, a);
+        var e = this.calculateCrossings(a);
+        if (e < d) {
+            d = e;
+            for (e = c = 0; e < this.nestedBestRanks.length; e++)
+                for (var f = a.ranks[e], g = 0; g < f.length; g++) {
+                    var h = f[g];
+                    this.nestedBestRanks[e][h.getGeneralPurposeVariable(e)] =
+                        h
+                }
+        } else {
+            c++;
+            for (e = 0; e < this.nestedBestRanks.length; e++) {
+                f = a.ranks[e];
+                for (g = 0; g < f.length; g++) h = f[g], h.setGeneralPurposeVariable(e, g)
+            }
+        }
+        if (0 == d) break
+    }
+    c = [];
+    d = [];
+    for (b = 0; b < a.maxRank + 1; b++) d[b] = [], c[b] = d[b];
+    for (b = 0; b < this.nestedBestRanks.length; b++)
+        for (e = 0; e < this.nestedBestRanks[b].length; e++) d[b].push(this.nestedBestRanks[b][e]);
+    a.ranks = c
+};
+mxMedianHybridCrossingReduction.prototype.calculateCrossings = function(a) {
+    for (var b = a.ranks.length, c = 0, d = 1; d < b; d++) c += this.calculateRankCrossing(d, a);
+    return c
+};
+mxMedianHybridCrossingReduction.prototype.calculateRankCrossing = function(a, b) {
+    for (var c = 0, d = b.ranks[a], e = d.length, f = b.ranks[a - 1].length, g = [], h = 0; h < e; h++) g[h] = [];
+    for (h = 0; h < d.length; h++)
+        for (var k = d[h], l = k.getGeneralPurposeVariable(a), m = k.getPreviousLayerConnectedCells(a), k = 0; k < m.length; k++) {
+            var n = m[k].getGeneralPurposeVariable(a - 1);
+            g[l][n] = 201207
+        }
+    for (h = 0; h < e; h++)
+        for (k = 0; k < f; k++)
+            if (201207 == g[h][k]) {
+                for (d = h + 1; d < e; d++)
+                    for (l = 0; l < k; l++) 201207 == g[d][l] && c++;
+                for (d = 0; d < h; d++)
+                    for (l = k + 1; l < f; l++) 201207 == g[d][l] &&
+                        c++
+            }
+    return c / 2
+};
+mxMedianHybridCrossingReduction.prototype.transpose = function(a, b) {
+    for (var c = !0, d = 0; c && 10 > d++;)
+        for (var e = 1 == a % 2 && 1 == d % 2, c = !1, f = 0; f < b.ranks.length; f++) {
+            for (var g = b.ranks[f], h = [], k = 0; k < g.length; k++) {
+                var l = g[k],
+                    m = l.getGeneralPurposeVariable(f);
+                0 > m && (m = k);
+                h[m] = l
+            }
+            for (var n = m = l = null, p = null, q = null, s = null, r = null, t = null, v = null, w = null, k = 0; k < g.length - 1; k++) {
+                if (0 == k) {
+                    for (var v = h[k], l = v.getNextLayerConnectedCells(f), m = v.getPreviousLayerConnectedCells(f), q = [], s = [], u = 0; u < l.length; u++) q[u] = l[u].getGeneralPurposeVariable(f + 1);
+                    for (u = 0; u < m.length; u++) s[u] = m[u].getGeneralPurposeVariable(f - 1)
+                } else l = n, m = p, q = r, s = t, v = w;
+                w = h[k + 1];
+                n = w.getNextLayerConnectedCells(f);
+                p = w.getPreviousLayerConnectedCells(f);
+                r = [];
+                t = [];
+                for (u = 0; u < n.length; u++) r[u] = n[u].getGeneralPurposeVariable(f + 1);
+                for (u = 0; u < p.length; u++) t[u] = p[u].getGeneralPurposeVariable(f - 1);
+                for (var y = 0, z = 0, u = 0; u < q.length; u++)
+                    for (var x = 0; x < r.length; x++) q[u] > r[x] && y++, q[u] < r[x] && z++;
+                for (u = 0; u < s.length; u++)
+                    for (x = 0; x < t.length; x++) s[u] > t[x] && y++, s[u] < t[x] && z++;
+                if (z < y || z == y && e) n = v.getGeneralPurposeVariable(f),
+                    v.setGeneralPurposeVariable(f, w.getGeneralPurposeVariable(f)), w.setGeneralPurposeVariable(f, n), n = l, p = m, r = q, t = s, w = v, e || (c = !0)
+            }
+        }
+};
+mxMedianHybridCrossingReduction.prototype.weightedMedian = function(a, b) {
+    var c = 0 == a % 2;
+    if (c)
+        for (var d = b.maxRank - 1; 0 <= d; d--) this.medianRank(d, c);
+    else
+        for (d = 1; d < b.maxRank; d++) this.medianRank(d, c)
+};
+mxMedianHybridCrossingReduction.prototype.medianRank = function(a, b) {
+    for (var c = this.nestedBestRanks[a].length, d = [], e = [], f = 0; f < c; f++) {
+        var g = this.nestedBestRanks[a][f],
+            h = new MedianCellSorter;
+        h.cell = g;
+        var k;
+        k = b ? g.getNextLayerConnectedCells(a) : g.getPreviousLayerConnectedCells(a);
+        var l;
+        l = b ? a + 1 : a - 1;
+        null != k && 0 != k.length ? (h.medianValue = this.medianValue(k, l), d.push(h)) : e[g.getGeneralPurposeVariable(a)] = !0
+    }
+    d.sort(MedianCellSorter.prototype.compare);
+    for (f = 0; f < c; f++) null == e[f] && (g = d.shift().cell, g.setGeneralPurposeVariable(a,
+        f))
+};
+mxMedianHybridCrossingReduction.prototype.medianValue = function(a, b) {
+    for (var c = [], d = 0, e = 0; e < a.length; e++) {
+        var f = a[e];
+        c[d++] = f.getGeneralPurposeVariable(b)
+    }
+    c.sort(function(a, b) {
+        return a - b
+    });
+    if (1 == d % 2) return c[Math.floor(d / 2)];
+    if (2 == d) return (c[0] + c[1]) / 2;
+    e = d / 2;
+    f = c[e - 1] - c[0];
+    d = c[d - 1] - c[e];
+    return (c[e - 1] * d + c[e] * f) / (f + d)
+};
+
+function MedianCellSorter() {}
+MedianCellSorter.prototype.medianValue = 0;
+MedianCellSorter.prototype.cell = !1;
+MedianCellSorter.prototype.compare = function(a, b) {
+    return null != a && null != b ? b.medianValue > a.medianValue ? -1 : b.medianValue < a.medianValue ? 1 : 0 : 0
+};
+
+function mxMinimumCycleRemover(a) {
+    this.layout = a
+}
+mxMinimumCycleRemover.prototype = new mxHierarchicalLayoutStage;
+mxMinimumCycleRemover.prototype.constructor = mxMinimumCycleRemover;
+mxMinimumCycleRemover.prototype.layout = null;
+mxMinimumCycleRemover.prototype.execute = function(a) {
+    var b = this.layout.getModel(),
+        c = {},
+        d = mxUtils.clone(b.vertexMapper, null, !0),
+        e = null;
+    if (null != b.roots) {
+        var f = b.roots,
+            e = [];
+        for (a = 0; a < f.length; a++) {
+            var g = mxCellPath.create(f[a]);
+            e[a] = b.vertexMapper[g]
+        }
+    }
+    b.visit(function(a, b, e, f, g) {
+        b.isAncestor(a) && (e.invert(), mxUtils.remove(e, a.connectsAsSource), a.connectsAsTarget.push(e), mxUtils.remove(e, b.connectsAsTarget), b.connectsAsSource.push(e));
+        a = mxCellPath.create(b.cell);
+        c[a] = b;
+        delete d[a]
+    }, e, !0, null);
+    e = null;
+    0 <
+        d.lenth && (e = mxUtils.clone(d, null, !0));
+    a = mxUtils.clone(c, null, !0);
+    b.visit(function(a, b, e, f, g) {
+        b.isAncestor(a) && (e.invert(), mxUtils.remove(e, a.connectsAsSource), b.connectsAsSource.push(e), a.connectsAsTarget.push(e), mxUtils.remove(e, b.connectsAsTarget));
+        a = mxCellPath.create(b.cell);
+        c[a] = b;
+        delete d[a]
+    }, d, !0, a);
+    f = this.layout.getGraph();
+    if (null != e && 0 < e.length) {
+        b = b.roots;
+        for (a = 0; a < e.length; a++) g = e[a].cell, 0 == f.getIncomingEdges(g).length && b.push(g)
+    }
+};
+
+function mxCoordinateAssignment(a, b, c, d, e, f) {
+    this.layout = a;
+    this.intraCellSpacing = b;
+    this.interRankCellSpacing = c;
+    this.orientation = d;
+    this.initialX = e;
+    this.parallelEdgeSpacing = f
+}
+var mxHierarchicalEdgeStyle = {
+    ORTHOGONAL: 1,
+    POLYLINE: 2,
+    STRAIGHT: 3,
+    CURVE: 4
+};
+mxCoordinateAssignment.prototype = new mxHierarchicalLayoutStage;
+mxCoordinateAssignment.prototype.constructor = mxCoordinateAssignment;
+mxCoordinateAssignment.prototype.layout = null;
+mxCoordinateAssignment.prototype.intraCellSpacing = 30;
+mxCoordinateAssignment.prototype.interRankCellSpacing = 100;
+mxCoordinateAssignment.prototype.parallelEdgeSpacing = 10;
+mxCoordinateAssignment.prototype.maxIterations = 8;
+mxCoordinateAssignment.prototype.prefHozEdgeSep = 5;
+mxCoordinateAssignment.prototype.prefVertEdgeOff = 2;
+mxCoordinateAssignment.prototype.minEdgeJetty = 12;
+mxCoordinateAssignment.prototype.channelBuffer = 4;
+mxCoordinateAssignment.prototype.jettyPositions = null;
+mxCoordinateAssignment.prototype.orientation = mxConstants.DIRECTION_NORTH;
+mxCoordinateAssignment.prototype.initialX = null;
+mxCoordinateAssignment.prototype.limitX = null;
+mxCoordinateAssignment.prototype.currentXDelta = null;
+mxCoordinateAssignment.prototype.widestRank = null;
+mxCoordinateAssignment.prototype.rankTopY = null;
+mxCoordinateAssignment.prototype.rankBottomY = null;
+mxCoordinateAssignment.prototype.widestRankValue = null;
+mxCoordinateAssignment.prototype.rankWidths = null;
+mxCoordinateAssignment.prototype.rankY = null;
+mxCoordinateAssignment.prototype.fineTuning = !0;
+mxCoordinateAssignment.prototype.edgeStyle = mxHierarchicalEdgeStyle.POLYLINE;
+mxCoordinateAssignment.prototype.nextLayerConnectedCache = null;
+mxCoordinateAssignment.prototype.previousLayerConnectedCache = null;
+mxCoordinateAssignment.prototype.groupPadding = 10;
+mxCoordinateAssignment.prototype.printStatus = function() {
+    var a = this.layout.getModel();
+    mxLog.show();
+    mxLog.writeln("\x3d\x3d\x3d\x3d\x3d\x3dCoord assignment debug\x3d\x3d\x3d\x3d\x3d\x3d\x3d");
+    for (var b = 0; b < a.ranks.length; b++) {
+        mxLog.write("Rank ", b, " : ");
+        for (var c = a.ranks[b], d = 0; d < c.length; d++) mxLog.write(c[d].getGeneralPurposeVariable(b), "  ");
+        mxLog.writeln()
+    }
+    mxLog.writeln("\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d")
+};
+mxCoordinateAssignment.prototype.execute = function(a) {
+    this.jettyPositions = [];
+    a = this.layout.getModel();
+    this.currentXDelta = 0;
+    this.initialCoords(this.layout.getGraph(), a);
+    this.fineTuning && this.minNode(a);
+    var b = 1E8;
+    if (this.fineTuning)
+        for (var c = 0; c < this.maxIterations; c++) {
+            0 != c && (this.medianPos(c, a), this.minNode(a));
+            if (this.currentXDelta < b) {
+                for (var d = 0; d < a.ranks.length; d++)
+                    for (var e = a.ranks[d], f = 0; f < e.length; f++) {
+                        var g = e[f];
+                        g.setX(d, g.getGeneralPurposeVariable(d))
+                    }
+                b = this.currentXDelta
+            } else
+                for (d = 0; d < a.ranks.length; d++) {
+                    e =
+                        a.ranks[d];
+                    for (f = 0; f < e.length; f++) g = e[f], g.setGeneralPurposeVariable(d, g.getX(d))
+                }
+            this.minPath(this.layout.getGraph(), a);
+            this.currentXDelta = 0
+        }
+    this.setCellLocations(this.layout.getGraph(), a)
+};
+mxCoordinateAssignment.prototype.minNode = function(a) {
+    for (var b = [], c = [], d = [], e = 0; e <= a.maxRank; e++) {
+        d[e] = a.ranks[e];
+        for (var f = 0; f < d[e].length; f++) {
+            var g = d[e][f],
+                h = new WeightedCellSorter(g, e);
+            h.rankIndex = f;
+            h.visited = !0;
+            b.push(h);
+            g = mxCellPath.create(g.getCoreCell());
+            c[g] = h
+        }
+    }
+    a = 10 * b.length;
+    for (f = 0; 0 < b.length && f <= a;) {
+        var h = b.shift(),
+            e = h.cell,
+            k = h.weightedValue,
+            l = parseInt(h.rankIndex),
+            g = e.getNextLayerConnectedCells(k),
+            m = e.getPreviousLayerConnectedCells(k),
+            n = g.length,
+            p = m.length,
+            q = this.medianXValue(g, k + 1),
+            s =
+            this.medianXValue(m, k - 1),
+            r = n + p,
+            t = e.getGeneralPurposeVariable(k),
+            v = t;
+        0 < r && (v = (q * n + s * p) / r);
+        n = !1;
+        v < t - 1 ? 0 == l ? (e.setGeneralPurposeVariable(k, v), n = !0) : (l = d[k][l - 1], t = l.getGeneralPurposeVariable(k), t = t + l.width / 2 + this.intraCellSpacing + e.width / 2, t < v ? (e.setGeneralPurposeVariable(k, v), n = !0) : t < e.getGeneralPurposeVariable(k) - 1 && (e.setGeneralPurposeVariable(k, t), n = !0)) : v > t + 1 && (l == d[k].length - 1 ? (e.setGeneralPurposeVariable(k, v), n = !0) : (l = d[k][l + 1], t = l.getGeneralPurposeVariable(k), t = t - l.width / 2 - this.intraCellSpacing -
+            e.width / 2, t > v ? (e.setGeneralPurposeVariable(k, v), n = !0) : t > e.getGeneralPurposeVariable(k) + 1 && (e.setGeneralPurposeVariable(k, t), n = !0)));
+        if (n) {
+            for (e = 0; e < g.length; e++) k = g[e], k = mxCellPath.create(k.getCoreCell()), k = c[k], null != k && !1 == k.visited && (k.visited = !0, b.push(k));
+            for (e = 0; e < m.length; e++) k = m[e], k = mxCellPath.create(k.getCoreCell()), k = c[k], null != k && !1 == k.visited && (k.visited = !0, b.push(k))
+        }
+        h.visited = !1;
+        f++
+    }
+};
+mxCoordinateAssignment.prototype.medianPos = function(a, b) {
+    if (0 == a % 2)
+        for (var c = b.maxRank; 0 < c; c--) this.rankMedianPosition(c - 1, b, c);
+    else
+        for (c = 0; c < b.maxRank - 1; c++) this.rankMedianPosition(c + 1, b, c)
+};
+mxCoordinateAssignment.prototype.rankMedianPosition = function(a, b, c) {
+    b = b.ranks[a];
+    for (var d = [], e = [], f = 0; f < b.length; f++) {
+        var g = b[f];
+        d[f] = new WeightedCellSorter;
+        d[f].cell = g;
+        d[f].rankIndex = f;
+        var h = mxCellPath.create(g.getCoreCell());
+        e[h] = d[f];
+        var k = null,
+            k = c < a ? g.getPreviousLayerConnectedCells(a) : g.getNextLayerConnectedCells(a);
+        d[f].weightedValue = this.calculatedWeightedValue(g, k)
+    }
+    d.sort(WeightedCellSorter.prototype.compare);
+    for (f = 0; f < d.length; f++) {
+        h = 0;
+        g = d[f].cell;
+        h = 0;
+        k = c < a ? g.getPreviousLayerConnectedCells(a).slice() :
+            g.getNextLayerConnectedCells(a).slice();
+        null != k && (h = k.length, h = 0 < h ? this.medianXValue(k, c) : g.getGeneralPurposeVariable(a));
+        for (var l = 0, k = -1E8, m = d[f].rankIndex - 1; 0 <= m;) {
+            var n = mxCellPath.create(b[m].getCoreCell()),
+                n = e[n];
+            if (null != n) {
+                var p = n.cell;
+                n.visited ? (k = p.getGeneralPurposeVariable(a) + p.width / 2 + this.intraCellSpacing + l + g.width / 2, m = -1) : (l += p.width + this.intraCellSpacing, m--)
+            }
+        }
+        l = 0;
+        p = 1E8;
+        for (m = d[f].rankIndex + 1; m < d.length;)
+            if (n = mxCellPath.create(b[m].getCoreCell()), n = e[n], null != n) {
+                var q = n.cell;
+                n.visited ?
+                    (p = q.getGeneralPurposeVariable(a) - q.width / 2 - this.intraCellSpacing - l - g.width / 2, m = d.length) : (l += q.width + this.intraCellSpacing, m++)
+            }
+        h >= k && h <= p ? g.setGeneralPurposeVariable(a, h) : h < k ? (g.setGeneralPurposeVariable(a, k), this.currentXDelta += k - h) : h > p && (g.setGeneralPurposeVariable(a, p), this.currentXDelta += h - p);
+        d[f].visited = !0
+    }
+};
+mxCoordinateAssignment.prototype.calculatedWeightedValue = function(a, b) {
+    for (var c = 0, d = 0; d < b.length; d++) {
+        var e = b[d];
+        a.isVertex() && e.isVertex() ? c++ : c = a.isEdge() && e.isEdge() ? c + 8 : c + 2
+    }
+    return c
+};
+mxCoordinateAssignment.prototype.medianXValue = function(a, b) {
+    if (0 == a.length) return 0;
+    for (var c = [], d = 0; d < a.length; d++) c[d] = a[d].getGeneralPurposeVariable(b);
+    c.sort(function(a, b) {
+        return a - b
+    });
+    if (1 == a.length % 2) return c[Math.floor(a.length / 2)];
+    d = a.length / 2;
+    return (c[d - 1] + c[d]) / 2
+};
+mxCoordinateAssignment.prototype.initialCoords = function(a, b) {
+    this.calculateWidestRank(a, b);
+    for (var c = this.widestRank; 0 <= c; c--) c < b.maxRank && this.rankCoordinates(c, a, b);
+    for (c = this.widestRank + 1; c <= b.maxRank; c++) 0 < c && this.rankCoordinates(c, a, b)
+};
+mxCoordinateAssignment.prototype.rankCoordinates = function(a, b, c) {
+    b = c.ranks[a];
+    c = 0;
+    for (var d = this.initialX + (this.widestRankValue - this.rankWidths[a]) / 2, e = !1, f = 0; f < b.length; f++) {
+        var g = b[f];
+        if (g.isVertex()) {
+            var h = this.layout.getVertexBounds(g.cell);
+            null != h ? this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? (g.width = h.width, g.height = h.height) : (g.width = h.height, g.height = h.width) : e = !0;
+            c = Math.max(c, g.height)
+        } else g.isEdge() && (h = 1, null != g.edges ? h = g.edges.length : mxLog.warn("edge.edges is null"),
+            g.width = (h - 1) * this.parallelEdgeSpacing);
+        d += g.width / 2;
+        g.setX(a, d);
+        g.setGeneralPurposeVariable(a, d);
+        d += g.width / 2;
+        d += this.intraCellSpacing
+    }!0 == e && mxLog.warn("At least one cell has no bounds")
+};
+mxCoordinateAssignment.prototype.calculateWidestRank = function(a, b) {
+    var c = -this.interRankCellSpacing,
+        d = 0;
+    this.rankWidths = [];
+    this.rankY = [];
+    for (var e = b.maxRank; 0 <= e; e--) {
+        for (var f = 0, g = b.ranks[e], h = this.initialX, k = !1, l = 0; l < g.length; l++) {
+            var m = g[l];
+            if (m.isVertex()) {
+                var n = this.layout.getVertexBounds(m.cell);
+                null != n ? this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? (m.width = n.width, m.height = n.height) : (m.width = n.height, m.height = n.width) : k = !0;
+                f = Math.max(f, m.height)
+            } else m.isEdge() &&
+                (n = 1, null != m.edges ? n = m.edges.length : mxLog.warn("edge.edges is null"), m.width = (n - 1) * this.parallelEdgeSpacing);
+            h += m.width / 2;
+            m.setX(e, h);
+            m.setGeneralPurposeVariable(e, h);
+            h += m.width / 2;
+            h += this.intraCellSpacing;
+            h > this.widestRankValue && (this.widestRankValue = h, this.widestRank = e);
+            this.rankWidths[e] = h
+        }!0 == k && mxLog.warn("At least one cell has no bounds");
+        this.rankY[e] = c;
+        h = f / 2 + d / 2 + this.interRankCellSpacing;
+        d = f;
+        c = this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_WEST ? c + h : c -
+            h;
+        for (l = 0; l < g.length; l++) g[l].setY(e, c)
+    }
+};
+mxCoordinateAssignment.prototype.minPath = function(a, b) {
+    var c = b.edgeMapper,
+        d;
+    for (d in c) {
+        var e = c[d];
+        if (!(1 > e.maxRank - e.minRank - 1)) {
+            for (var f = e.getGeneralPurposeVariable(e.minRank + 1), g = !0, h = 0, k = e.minRank + 2; k < e.maxRank; k++) {
+                var l = e.getGeneralPurposeVariable(k);
+                f != l ? (g = !1, f = l) : h++
+            }
+            if (!g) {
+                for (var g = f = 0, l = [], m = [], n = e.getGeneralPurposeVariable(e.minRank + 1), k = e.minRank + 1; k < e.maxRank - 1; k++) {
+                    var p = e.getX(k + 1);
+                    n == p ? (l[k - e.minRank - 1] = n, f++) : this.repositionValid(b, e, k + 1, n) ? (l[k - e.minRank - 1] = n, f++) : n = l[k - e.minRank -
+                        1] = p
+                }
+                n = e.getX(k);
+                for (k = e.maxRank - 1; k > e.minRank + 1; k--) p = e.getX(k - 1), n == p ? (m[k - e.minRank - 2] = n, g++) : this.repositionValid(b, e, k - 1, n) ? (m[k - e.minRank - 2] = n, g++) : (m[k - e.minRank - 2] = e.getX(k - 1), n = p);
+                if (g > h || f > h)
+                    if (g >= f)
+                        for (k = e.maxRank - 2; k > e.minRank; k--) e.setX(k, m[k - e.minRank - 1]);
+                    else if (f > g)
+                    for (k = e.minRank + 2; k < e.maxRank; k++) e.setX(k, l[k - e.minRank - 2])
+            }
+        }
+    }
+};
+mxCoordinateAssignment.prototype.repositionValid = function(a, b, c, d) {
+    a = a.ranks[c];
+    for (var e = -1, f = 0; f < a.length; f++)
+        if (b == a[f]) {
+            e = f;
+            break
+        }
+    if (0 > e) return !1;
+    f = b.getGeneralPurposeVariable(c);
+    if (d < f) {
+        if (0 == e) return !0;
+        a = a[e - 1];
+        c = a.getGeneralPurposeVariable(c);
+        c = c + a.width / 2 + this.intraCellSpacing + b.width / 2;
+        if (!(c <= d)) return !1
+    } else if (d > f) {
+        if (e == a.length - 1) return !0;
+        a = a[e + 1];
+        c = a.getGeneralPurposeVariable(c);
+        c = c - a.width / 2 - this.intraCellSpacing - b.width / 2;
+        if (!(c >= d)) return !1
+    }
+    return !0
+};
+mxCoordinateAssignment.prototype.setCellLocations = function(a, b) {
+    this.rankTopY = [];
+    this.rankBottomY = [];
+    for (var c = 0; c < b.ranks.length; c++) this.rankTopY[c] = Number.MAX_VALUE, this.rankBottomY[c] = 0;
+    c = null;
+    this.layout.resizeParent && (c = {});
+    var d = b.edgeMapper,
+        e = b.vertexMapper,
+        f;
+    for (f in e) {
+        var g = e[f];
+        this.setVertexLocation(g);
+        if (this.layout.resizeParent) {
+            var g = a.model.getParent(g.cell),
+                h = mxCellPath.create(g);
+            null == c[h] && (c[h] = g)
+        }
+    }
+    this.layout.resizeParent && null != c && this.adjustParents(c);
+    (this.edgeStyle == mxHierarchicalEdgeStyle.ORTHOGONAL ||
+        this.edgeStyle == mxHierarchicalEdgeStyle.POLYLINE || this.edgeStyle == mxHierarchicalEdgeStyle.CURVE) && this.localEdgeProcessing(b);
+    for (f in d) this.setEdgePosition(d[f])
+};
+mxCoordinateAssignment.prototype.adjustParents = function(a) {
+    var b = [],
+        c;
+    for (c in a) b.push(a[c]);
+    this.layout.arrangeGroups(mxUtils.sortCells(b, !0), this.groupPadding)
+};
+mxCoordinateAssignment.prototype.localEdgeProcessing = function(a) {
+    for (var b = 0; b < a.ranks.length; b++)
+        for (var c = a.ranks[b], d = 0; d < c.length; d++) {
+            var e = c[d];
+            if (e.isVertex())
+                for (var f = e.getPreviousLayerConnectedCells(b), g = b - 1, h = 0; 2 > h; h++) {
+                    if (-1 < g && g < a.ranks.length && null != f && 0 < f.length) {
+                        for (var k = [], l = 0; l < f.length; l++) {
+                            var m = new WeightedCellSorter(f[l], f[l].getX(g));
+                            k.push(m)
+                        }
+                        k.sort(WeightedCellSorter.prototype.compare);
+                        for (var m = e.x[0] - e.width / 2, n = m + e.width, p = f = 0, g = [], l = 0; l < k.length; l++) {
+                            var q = k[l].cell,
+                                s;
+                            if (q.isVertex()) {
+                                s = 0 == h ? e.connectsAsSource : e.connectsAsTarget;
+                                for (var r = 0; r < s.length; r++)
+                                    if (s[r].source == q || s[r].target == q) f += s[r].edges.length, p++, g.push(s[r])
+                            } else f += q.edges.length, p++, g.push(q)
+                        }
+                        e.width > (f + 1) * this.prefHozEdgeSep + 2 * this.prefHozEdgeSep && (m += this.prefHozEdgeSep, n -= this.prefHozEdgeSep);
+                        k = (n - m) / f;
+                        m += k / 2;
+                        n = this.minEdgeJetty - this.prefVertEdgeOff;
+                        for (l = p = 0; l < g.length; l++) {
+                            q = g[l].edges.length;
+                            r = mxCellPath.create(g[l].edges[0]);
+                            s = this.jettyPositions[r];
+                            null == s && (s = [], this.jettyPositions[r] =
+                                s);
+                            l < f / 2 ? n += this.prefVertEdgeOff : l > f / 2 && (n -= this.prefVertEdgeOff);
+                            for (r = 0; r < q; r++) s[4 * r + 2 * h] = m, m += k, s[4 * r + 2 * h + 1] = n;
+                            p = Math.max(p, n)
+                        }
+                    }
+                    f = e.getNextLayerConnectedCells(b);
+                    g = b + 1
+                }
+        }
+};
+mxCoordinateAssignment.prototype.setEdgePosition = function(a) {
+    var b = 0;
+    if (101207 != a.temp[0]) {
+        var c = a.maxRank,
+            d = a.minRank;
+        c == d && (c = a.source.maxRank, d = a.target.minRank);
+        for (var e = 0, f = mxCellPath.create(a.edges[0]), f = this.jettyPositions[f], g = a.isReversed ? a.target.cell : a.source.cell, h = this.layout.graph, k = 0; k < a.edges.length; k++) {
+            var l = a.edges[k],
+                m = this.layout.getVisibleTerminal(l, !0),
+                n = h.model.getTerminal(l, !0),
+                p = [],
+                q = a.isReversed;
+            m != g && (q = !q);
+            if (null != f) {
+                var s = q ? 2 : 0,
+                    r = q ? this.rankTopY[d] : this.rankBottomY[c],
+                    t = f[4 * e + 1 + s];
+                q && (t = -t);
+                r += t;
+                s = f[4 * e + s];
+                n = h.model.getTerminal(l, !0);
+                this.layout.isPort(n) && h.model.getParent(n) == m && (s = h.view.getState(n), s = null != s ? s.x : m.geometry.x + a.source.width * n.geometry.x);
+                this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? (p.push(new mxPoint(s, r)), this.edgeStyle == mxHierarchicalEdgeStyle.CURVE && p.push(new mxPoint(s, r + t))) : (p.push(new mxPoint(r, s)), this.edgeStyle == mxHierarchicalEdgeStyle.CURVE && p.push(new mxPoint(r + t, s)))
+            }
+            s = a.x.length -
+                1;
+            r = t = -1;
+            m = a.maxRank - 1;
+            q && (s = 0, t = a.x.length, r = 1, m = a.minRank + 1);
+            for (; a.maxRank != a.minRank && s != t; s += r) {
+                var n = a.x[s] + b,
+                    v = (this.rankTopY[m] + this.rankBottomY[m + 1]) / 2,
+                    w = (this.rankTopY[m - 1] + this.rankBottomY[m]) / 2;
+                if (q) var u = v,
+                    v = w,
+                    w = u;
+                this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? (p.push(new mxPoint(n, v)), p.push(new mxPoint(n, w))) : (p.push(new mxPoint(v, n)), p.push(new mxPoint(w, n)));
+                this.limitX = Math.max(this.limitX, n);
+                m += r
+            }
+            null != f && (s = q ? 2 : 0, r = q ? this.rankBottomY[c] :
+                this.rankTopY[d], t = f[4 * e + 3 - s], q && (t = -t), r -= t, s = f[4 * e + 2 - s], q = h.model.getTerminal(l, !1), m = this.layout.getVisibleTerminal(l, !1), this.layout.isPort(q) && h.model.getParent(q) == m && (s = h.view.getState(q), s = null != s ? s.x : m.geometry.x + a.target.width * q.geometry.x), this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? (this.edgeStyle == mxHierarchicalEdgeStyle.CURVE && p.push(new mxPoint(s, r - t)), p.push(new mxPoint(s, r))) : (this.edgeStyle == mxHierarchicalEdgeStyle.CURVE && p.push(new mxPoint(r -
+                    t, s)), p.push(new mxPoint(r, s))));
+            a.isReversed && this.processReversedEdge(a, l);
+            this.layout.setEdgePoints(l, p);
+            b = 0 == b ? this.parallelEdgeSpacing : 0 < b ? -b : -b + this.parallelEdgeSpacing;
+            e++
+        }
+        a.temp[0] = 101207
+    }
+};
+mxCoordinateAssignment.prototype.setVertexLocation = function(a) {
+    var b = a.cell,
+        c = a.x[0] - a.width / 2,
+        d = a.y[0] - a.height / 2;
+    this.rankTopY[a.minRank] = Math.min(this.rankTopY[a.minRank], d);
+    this.rankBottomY[a.minRank] = Math.max(this.rankBottomY[a.minRank], d + a.height);
+    this.orientation == mxConstants.DIRECTION_NORTH || this.orientation == mxConstants.DIRECTION_SOUTH ? this.layout.setVertexLocation(b, c, d) : this.layout.setVertexLocation(b, d, c);
+    this.limitX = Math.max(this.limitX, c + a.width)
+};
+mxCoordinateAssignment.prototype.processReversedEdge = function(a, b) {};
+
+function WeightedCellSorter(a, b) {
+    this.cell = a;
+    this.weightedValue = b
+}
+WeightedCellSorter.prototype.weightedValue = 0;
+WeightedCellSorter.prototype.nudge = !1;
+WeightedCellSorter.prototype.visited = !1;
+WeightedCellSorter.prototype.rankIndex = null;
+WeightedCellSorter.prototype.cell = null;
+WeightedCellSorter.prototype.compare = function(a, b) {
+    return null != a && null != b ? b.weightedValue > a.weightedValue ? -1 : b.weightedValue < a.weightedValue ? 1 : b.nudge ? -1 : 1 : 0
+};
+
+function mxHierarchicalLayout(a, b, c) {
+    mxGraphLayout.call(this, a);
+    this.orientation = null != b ? b : mxConstants.DIRECTION_NORTH;
+    this.deterministic = null != c ? c : !0
+}
+mxHierarchicalLayout.prototype = new mxGraphLayout;
+mxHierarchicalLayout.prototype.constructor = mxHierarchicalLayout;
+mxHierarchicalLayout.prototype.roots = null;
+mxHierarchicalLayout.prototype.resizeParent = !1;
+mxHierarchicalLayout.prototype.moveParent = !1;
+mxHierarchicalLayout.prototype.parentBorder = 0;
+mxHierarchicalLayout.prototype.intraCellSpacing = 30;
+mxHierarchicalLayout.prototype.interRankCellSpacing = 100;
+mxHierarchicalLayout.prototype.interHierarchySpacing = 60;
+mxHierarchicalLayout.prototype.parallelEdgeSpacing = 10;
+mxHierarchicalLayout.prototype.orientation = mxConstants.DIRECTION_NORTH;
+mxHierarchicalLayout.prototype.fineTuning = !0;
+mxHierarchicalLayout.prototype.tightenToSource = !0;
+mxHierarchicalLayout.prototype.disableEdgeStyle = !0;
+mxHierarchicalLayout.prototype.traverseAncestors = !0;
+mxHierarchicalLayout.prototype.model = null;
+mxHierarchicalLayout.prototype.edgesCache = null;
+mxHierarchicalLayout.prototype.getModel = function() {
+    return this.model
+};
+mxHierarchicalLayout.prototype.execute = function(a, b) {
+    this.parent = a;
+    var c = this.graph.model;
+    this.edgesCache = {};
+    if (!(null == b && null == a)) {
+        if (null != b && null != a) {
+            for (var d = [], e = 0; e < b.length; e++) c.isAncestor(a, b[e]) && d.push(b[e]);
+            this.roots = d
+        } else this.roots = b;
+        c.beginUpdate();
+        try {
+            this.run(a), this.resizeParent && !this.graph.isCellCollapsed(a) && this.graph.updateGroupBounds([a], this.parentBorder, this.moveParent)
+        } finally {
+            c.endUpdate()
+        }
+    }
+};
+mxHierarchicalLayout.prototype.findRoots = function(a, b) {
+    var c = [];
+    if (null != a && null != b) {
+        var d = this.graph.model,
+            e = null,
+            f = -1E5,
+            g;
+        for (g in b) {
+            var h = b[g];
+            if (d.isVertex(h) && this.graph.isCellVisible(h)) {
+                for (var k = this.getEdges(h), l = 0, m = 0, n = 0; n < k.length; n++) this.getVisibleTerminal(k[n], !0) == h ? l++ : m++;
+                0 == m && 0 < l && c.push(h);
+                k = l - m;
+                k > f && (f = k, e = h)
+            }
+        }
+        0 == c.length && null != e && c.push(e)
+    }
+    return c
+};
+mxHierarchicalLayout.prototype.getEdges = function(a) {
+    var b = mxCellPath.create(a);
+    if (null != this.edgesCache[b]) return this.edgesCache[b];
+    for (var c = this.graph.model, d = [], e = this.graph.isCellCollapsed(a), f = c.getChildCount(a), g = 0; g < f; g++) {
+        var h = c.getChildAt(a, g);
+        if (this.isPort(h)) d = d.concat(c.getEdges(h, !0, !0));
+        else if (e || !this.graph.isCellVisible(h)) d = d.concat(c.getEdges(h, !0, !0))
+    }
+    d = d.concat(c.getEdges(a, !0, !0));
+    c = [];
+    for (g = 0; g < d.length; g++) e = this.getVisibleTerminal(d[g], !0), f = this.getVisibleTerminal(d[g], !1), (e == f || e != f && (f == a && (null == this.parent || this.graph.isValidAncestor(e, this.parent, this.traverseAncestors)) || e == a && (null == this.parent || this.graph.isValidAncestor(f, this.parent, this.traverseAncestors)))) && c.push(d[g]);
+    return this.edgesCache[b] = c
+};
+mxHierarchicalLayout.prototype.getVisibleTerminal = function(a, b) {
+    var c = this.graph.view.getState(a),
+        c = null != c ? c.getVisibleTerminal(b) : this.graph.view.getVisibleTerminal(a, b);
+    this.isPort(c) && (c = this.graph.model.getParent(c));
+    return c
+};
+mxHierarchicalLayout.prototype.run = function(a) {
+    var b = [],
+        c = [];
+    if (null == this.roots && null != a) {
+        var d = {};
+        this.filterDescendants(a, d);
+        this.roots = [];
+        var e = !0,
+            f;
+        for (f in d)
+            if (null != d[f]) {
+                e = !1;
+                break
+            }
+        for (; !e;) {
+            for (var g = this.findRoots(a, d), e = 0; e < g.length; e++) {
+                var h = [];
+                b.push(h);
+                this.traverse(g[e], !0, null, c, h, b, d)
+            }
+            for (e = 0; e < g.length; e++) this.roots.push(g[e]);
+            e = !0;
+            for (f in d)
+                if (null != d[f]) {
+                    e = !1;
+                    break
+                }
+        }
+    } else
+        for (e = 0; e < roots.length; e++) h = [], b.push(h), traverse(roots.get(e), !0, null, c, h, b, null);
+    for (e = c = 0; e < b.length; e++) {
+        h =
+            b[e];
+        d = [];
+        for (f in h) d.push(h[f]);
+        this.model = new mxGraphHierarchyModel(this, d, this.roots, a, this.tightenToSource);
+        this.cycleStage(a);
+        this.layeringStage();
+        this.crossingStage(a);
+        c = this.placementStage(c, a)
+    }
+};
+mxHierarchicalLayout.prototype.filterDescendants = function(a, b) {
+    var c = this.graph.model;
+    c.isVertex(a) && (a != this.parent && this.graph.isCellVisible(a)) && (b[mxCellPath.create(a)] = a);
+    if (this.traverseAncestors || a == this.parent && this.graph.isCellVisible(a))
+        for (var d = c.getChildCount(a), e = 0; e < d; e++) {
+            var f = c.getChildAt(a, e);
+            this.isPort(f) || this.filterDescendants(f, b)
+        }
+};
+mxHierarchicalLayout.prototype.isPort = function(a) {
+    return a.geometry.relative ? !0 : !1
+};
+mxHierarchicalLayout.prototype.getEdgesBetween = function(a, b, c) {
+    c = null != c ? c : !1;
+    for (var d = this.getEdges(a), e = [], f = 0; f < d.length; f++) {
+        var g = this.getVisibleTerminal(d[f], !0),
+            h = this.getVisibleTerminal(d[f], !1);
+        (g == a && h == b || !c && g == b && h == a) && e.push(d[f])
+    }
+    return e
+};
+mxHierarchicalLayout.prototype.traverse = function(a, b, c, d, e, f, g) {
+    if (null != a && null != d) {
+        var h = mxCellPath.create(a);
+        if (null == d[h] && (null == g || null != g[h])) {
+            null == e[h] && (e[h] = a);
+            null == d[h] && (d[h] = a);
+            delete g[h];
+            var k = this.getEdges(a);
+            for (c = 0; c < k.length; c++)
+                if (h = this.getVisibleTerminal(k[c], !0) == a, !b || h) h = this.getVisibleTerminal(k[c], !h), e = this.traverse(h, b, k[c], d, e, f, g)
+        } else if (null == e[h])
+            for (c = 0; c < f.length; c++)
+                if (a = f[c], null != a[h]) {
+                    for (k in e) a[k] = e[k];
+                    f.pop();
+                    return a
+                }
+    }
+    return e
+};
+mxHierarchicalLayout.prototype.cycleStage = function(a) {
+    (new mxMinimumCycleRemover(this)).execute(a)
+};
+mxHierarchicalLayout.prototype.layeringStage = function() {
+    this.model.initialRank();
+    this.model.fixRanks()
+};
+mxHierarchicalLayout.prototype.crossingStage = function(a) {
+    (new mxMedianHybridCrossingReduction(this)).execute(a)
+};
+mxHierarchicalLayout.prototype.placementStage = function(a, b) {
+    var c = new mxCoordinateAssignment(this, this.intraCellSpacing, this.interRankCellSpacing, this.orientation, a, this.parallelEdgeSpacing);
+    c.fineTuning = this.fineTuning;
+    c.execute(b);
+    return c.limitX + this.interHierarchySpacing
+};
+
+function mxGraphModel(a) {
+    this.currentEdit = this.createUndoableEdit();
+    null != a ? this.setRoot(a) : this.clear()
+}
+mxGraphModel.prototype = new mxEventSource;
+mxGraphModel.prototype.constructor = mxGraphModel;
+mxGraphModel.prototype.root = null;
+mxGraphModel.prototype.cells = null;
+mxGraphModel.prototype.maintainEdgeParent = !0;
+mxGraphModel.prototype.createIds = !0;
+mxGraphModel.prototype.prefix = "";
+mxGraphModel.prototype.postfix = "";
+mxGraphModel.prototype.nextId = 0;
+mxGraphModel.prototype.currentEdit = null;
+mxGraphModel.prototype.updateLevel = 0;
+mxGraphModel.prototype.endingUpdate = !1;
+mxGraphModel.prototype.clear = function() {
+    this.setRoot(this.createRoot())
+};
+mxGraphModel.prototype.isCreateIds = function() {
+    return this.createIds
+};
+mxGraphModel.prototype.setCreateIds = function(a) {
+    this.createIds = a
+};
+mxGraphModel.prototype.createRoot = function() {
+    var a = new mxCell;
+    a.insert(new mxCell);
+    return a
+};
+mxGraphModel.prototype.getCell = function(a) {
+    return null != this.cells ? this.cells[a] : null
+};
+mxGraphModel.prototype.filterCells = function(a, b) {
+    var c = null;
+    if (null != a)
+        for (var c = [], d = 0; d < a.length; d++) b(a[d]) && c.push(a[d]);
+    return c
+};
+mxGraphModel.prototype.getDescendants = function(a) {
+    return this.filterDescendants(null, a)
+};
+mxGraphModel.prototype.filterDescendants = function(a, b) {
+    var c = [];
+    b = b || this.getRoot();
+    (null == a || a(b)) && c.push(b);
+    for (var d = this.getChildCount(b), e = 0; e < d; e++) var f = this.getChildAt(b, e),
+        c = c.concat(this.filterDescendants(a, f));
+    return c
+};
+mxGraphModel.prototype.getRoot = function(a) {
+    var b = a || this.root;
+    if (null != a)
+        for (; null != a;) b = a, a = this.getParent(a);
+    return b
+};
+mxGraphModel.prototype.setRoot = function(a) {
+    this.execute(new mxRootChange(this, a));
+    return a
+};
+mxGraphModel.prototype.rootChanged = function(a) {
+    var b = this.root;
+    this.root = a;
+    this.nextId = 0;
+    this.cells = null;
+    this.cellAdded(a);
+    return b
+};
+mxGraphModel.prototype.isRoot = function(a) {
+    return null != a && this.root == a
+};
+mxGraphModel.prototype.isLayer = function(a) {
+    return this.isRoot(this.getParent(a))
+};
+mxGraphModel.prototype.isAncestor = function(a, b) {
+    for (; null != b && b != a;) b = this.getParent(b);
+    return b == a
+};
+mxGraphModel.prototype.contains = function(a) {
+    return this.isAncestor(this.root, a)
+};
+mxGraphModel.prototype.getParent = function(a) {
+    return null != a ? a.getParent() : null
+};
+mxGraphModel.prototype.add = function(a, b, c) {
+    if (b != a && null != a && null != b) {
+        null == c && (c = this.getChildCount(a));
+        var d = a != this.getParent(b);
+        this.execute(new mxChildChange(this, a, b, c));
+        this.maintainEdgeParent && d && this.updateEdgeParents(b)
+    }
+    return b
+};
+mxGraphModel.prototype.cellAdded = function(a) {
+    if (null != a) {
+        null == a.getId() && this.createIds && a.setId(this.createId(a));
+        if (null != a.getId()) {
+            var b = this.getCell(a.getId());
+            if (b != a) {
+                for (; null != b;) a.setId(this.createId(a)), b = this.getCell(a.getId());
+                null == this.cells && (this.cells = {});
+                this.cells[a.getId()] = a
+            }
+        }
+        mxUtils.isNumeric(a.getId()) && (this.nextId = Math.max(this.nextId, a.getId()));
+        for (var b = this.getChildCount(a), c = 0; c < b; c++) this.cellAdded(this.getChildAt(a, c))
+    }
+};
+mxGraphModel.prototype.createId = function(a) {
+    a = this.nextId;
+    this.nextId++;
+    return this.prefix + a + this.postfix
+};
+mxGraphModel.prototype.updateEdgeParents = function(a, b) {
+    b = b || this.getRoot(a);
+    for (var c = this.getChildCount(a), d = 0; d < c; d++) {
+        var e = this.getChildAt(a, d);
+        this.updateEdgeParents(e, b)
+    }
+    e = this.getEdgeCount(a);
+    c = [];
+    for (d = 0; d < e; d++) c.push(this.getEdgeAt(a, d));
+    for (d = 0; d < c.length; d++) e = c[d], this.isAncestor(b, e) && this.updateEdgeParent(e, b)
+};
+mxGraphModel.prototype.updateEdgeParent = function(a, b) {
+    for (var c = this.getTerminal(a, !0), d = this.getTerminal(a, !1), e = null; null != c && !this.isEdge(c) && null != c.geometry && c.geometry.relative;) c = this.getParent(c);
+    for (; null != d && !this.isEdge(d) && null != d.geometry && d.geometry.relative;) d = this.getParent(d);
+    if (this.isAncestor(b, c) && this.isAncestor(b, d) && (e = c == d ? this.getParent(c) : this.getNearestCommonAncestor(c, d), null != e && (this.getParent(e) != this.root || this.isAncestor(e, a)) && this.getParent(a) != e)) {
+        c = this.getGeometry(a);
+        if (null != c) {
+            var f = this.getOrigin(this.getParent(a)),
+                g = this.getOrigin(e),
+                d = g.x - f.x,
+                f = g.y - f.y,
+                c = c.clone();
+            c.translate(-d, -f);
+            this.setGeometry(a, c)
+        }
+        this.add(e, a, this.getChildCount(e))
+    }
+};
+mxGraphModel.prototype.getOrigin = function(a) {
+    var b = null;
+    null != a ? (b = this.getOrigin(this.getParent(a)), this.isEdge(a) || (a = this.getGeometry(a), null != a && (b.x += a.x, b.y += a.y))) : b = new mxPoint;
+    return b
+};
+mxGraphModel.prototype.getNearestCommonAncestor = function(a, b) {
+    if (null != a && null != b) {
+        var c = mxCellPath.create(b);
+        if (null != c && 0 < c.length) {
+            var d = a,
+                e = mxCellPath.create(d);
+            if (c.length < e.length) var d = b,
+                f = e,
+                e = c,
+                c = f;
+            for (; null != d;) {
+                f = this.getParent(d);
+                if (0 == c.indexOf(e + mxCellPath.PATH_SEPARATOR) && null != f) return d;
+                e = mxCellPath.getParentPath(e);
+                d = f
+            }
+        }
+    }
+    return null
+};
+mxGraphModel.prototype.remove = function(a) {
+    a == this.root ? this.setRoot(null) : null != this.getParent(a) && this.execute(new mxChildChange(this, null, a));
+    return a
+};
+mxGraphModel.prototype.cellRemoved = function(a) {
+    if (null != a && null != this.cells) {
+        for (var b = this.getChildCount(a) - 1; 0 <= b; b--) this.cellRemoved(this.getChildAt(a, b));
+        null != this.cells && null != a.getId() && delete this.cells[a.getId()]
+    }
+};
+mxGraphModel.prototype.parentForCellChanged = function(a, b, c) {
+    var d = this.getParent(a);
+    null != b ? (b != d || d.getIndex(a) != c) && b.insert(a, c) : null != d && (c = d.getIndex(a), d.remove(c));
+    !this.contains(d) && null != b ? this.cellAdded(a) : null == b && this.cellRemoved(a);
+    return d
+};
+mxGraphModel.prototype.getChildCount = function(a) {
+    return null != a ? a.getChildCount() : 0
+};
+mxGraphModel.prototype.getChildAt = function(a, b) {
+    return null != a ? a.getChildAt(b) : null
+};
+mxGraphModel.prototype.getChildren = function(a) {
+    return null != a ? a.children : null
+};
+mxGraphModel.prototype.getChildVertices = function(a) {
+    return this.getChildCells(a, !0, !1)
+};
+mxGraphModel.prototype.getChildEdges = function(a) {
+    return this.getChildCells(a, !1, !0)
+};
+mxGraphModel.prototype.getChildCells = function(a, b, c) {
+    b = null != b ? b : !1;
+    c = null != c ? c : !1;
+    for (var d = this.getChildCount(a), e = [], f = 0; f < d; f++) {
+        var g = this.getChildAt(a, f);
+        (!c && !b || c && this.isEdge(g) || b && this.isVertex(g)) && e.push(g)
+    }
+    return e
+};
+mxGraphModel.prototype.getTerminal = function(a, b) {
+    return null != a ? a.getTerminal(b) : null
+};
+mxGraphModel.prototype.setTerminal = function(a, b, c) {
+    var d = b != this.getTerminal(a, c);
+    this.execute(new mxTerminalChange(this, a, b, c));
+    this.maintainEdgeParent && d && this.updateEdgeParent(a, this.getRoot());
+    return b
+};
+mxGraphModel.prototype.setTerminals = function(a, b, c) {
+    this.beginUpdate();
+    try {
+        this.setTerminal(a, b, !0), this.setTerminal(a, c, !1)
+    } finally {
+        this.endUpdate()
+    }
+};
+mxGraphModel.prototype.terminalForCellChanged = function(a, b, c) {
+    var d = this.getTerminal(a, c);
+    null != b ? b.insertEdge(a, c) : null != d && d.removeEdge(a, c);
+    return d
+};
+mxGraphModel.prototype.getEdgeCount = function(a) {
+    return null != a ? a.getEdgeCount() : 0
+};
+mxGraphModel.prototype.getEdgeAt = function(a, b) {
+    return null != a ? a.getEdgeAt(b) : null
+};
+mxGraphModel.prototype.getDirectedEdgeCount = function(a, b, c) {
+    for (var d = 0, e = this.getEdgeCount(a), f = 0; f < e; f++) {
+        var g = this.getEdgeAt(a, f);
+        g != c && this.getTerminal(g, b) == a && d++
+    }
+    return d
+};
+mxGraphModel.prototype.getConnections = function(a) {
+    return this.getEdges(a, !0, !0, !1)
+};
+mxGraphModel.prototype.getIncomingEdges = function(a) {
+    return this.getEdges(a, !0, !1, !1)
+};
+mxGraphModel.prototype.getOutgoingEdges = function(a) {
+    return this.getEdges(a, !1, !0, !1)
+};
+mxGraphModel.prototype.getEdges = function(a, b, c, d) {
+    b = null != b ? b : !0;
+    c = null != c ? c : !0;
+    d = null != d ? d : !0;
+    for (var e = this.getEdgeCount(a), f = [], g = 0; g < e; g++) {
+        var h = this.getEdgeAt(a, g),
+            k = this.getTerminal(h, !0),
+            l = this.getTerminal(h, !1);
+        (d && k == l || k != l && (b && l == a || c && k == a)) && f.push(h)
+    }
+    return f
+};
+mxGraphModel.prototype.getEdgesBetween = function(a, b, c) {
+    c = null != c ? c : !1;
+    var d = this.getEdgeCount(a),
+        e = this.getEdgeCount(b),
+        f = a,
+        g = d;
+    e < d && (g = e, f = b);
+    d = [];
+    for (e = 0; e < g; e++) {
+        var h = this.getEdgeAt(f, e),
+            k = this.getTerminal(h, !0),
+            l = this.getTerminal(h, !1),
+            m = l == a && k == b;
+        (k == a && l == b || !c && m) && d.push(h)
+    }
+    return d
+};
+mxGraphModel.prototype.getOpposites = function(a, b, c, d) {
+    c = null != c ? c : !0;
+    d = null != d ? d : !0;
+    var e = [];
+    if (null != a)
+        for (var f = 0; f < a.length; f++) {
+            var g = this.getTerminal(a[f], !0),
+                h = this.getTerminal(a[f], !1);
+            g == b && null != h && h != b && d ? e.push(h) : h == b && (null != g && g != b && c) && e.push(g)
+        }
+    return e
+};
+mxGraphModel.prototype.getTopmostCells = function(a) {
+    for (var b = [], c = 0; c < a.length; c++) {
+        for (var d = a[c], e = !0, f = this.getParent(d); null != f;) {
+            if (0 <= mxUtils.indexOf(a, f)) {
+                e = !1;
+                break
+            }
+            f = this.getParent(f)
+        }
+        e && b.push(d)
+    }
+    return b
+};
+mxGraphModel.prototype.isVertex = function(a) {
+    return null != a ? a.isVertex() : !1
+};
+mxGraphModel.prototype.isEdge = function(a) {
+    return null != a ? a.isEdge() : !1
+};
+mxGraphModel.prototype.isConnectable = function(a) {
+    return null != a ? a.isConnectable() : !1
+};
+mxGraphModel.prototype.getValue = function(a) {
+    return null != a ? a.getValue() : null
+};
+mxGraphModel.prototype.setValue = function(a, b) {
+    this.execute(new mxValueChange(this, a, b));
+    return b
+};
+mxGraphModel.prototype.valueForCellChanged = function(a, b) {
+    return a.valueChanged(b)
+};
+mxGraphModel.prototype.getGeometry = function(a, b) {
+    return null != a ? a.getGeometry() : null
+};
+mxGraphModel.prototype.setGeometry = function(a, b) {
+    b != this.getGeometry(a) && this.execute(new mxGeometryChange(this, a, b));
+    return b
+};
+mxGraphModel.prototype.geometryForCellChanged = function(a, b) {
+    var c = this.getGeometry(a);
+    a.setGeometry(b);
+    return c
+};
+mxGraphModel.prototype.getStyle = function(a) {
+    return null != a ? a.getStyle() : null
+};
+mxGraphModel.prototype.setStyle = function(a, b) {
+    b != this.getStyle(a) && this.execute(new mxStyleChange(this, a, b));
+    return b
+};
+mxGraphModel.prototype.styleForCellChanged = function(a, b) {
+    var c = this.getStyle(a);
+    a.setStyle(b);
+    return c
+};
+mxGraphModel.prototype.isCollapsed = function(a) {
+    return null != a ? a.isCollapsed() : !1
+};
+mxGraphModel.prototype.setCollapsed = function(a, b) {
+    b != this.isCollapsed(a) && this.execute(new mxCollapseChange(this, a, b));
+    return b
+};
+mxGraphModel.prototype.collapsedStateForCellChanged = function(a, b) {
+    var c = this.isCollapsed(a);
+    a.setCollapsed(b);
+    return c
+};
+mxGraphModel.prototype.isVisible = function(a) {
+    return null != a ? a.isVisible() : !1
+};
+mxGraphModel.prototype.setVisible = function(a, b) {
+    b != this.isVisible(a) && this.execute(new mxVisibleChange(this, a, b));
+    return b
+};
+mxGraphModel.prototype.visibleStateForCellChanged = function(a, b) {
+    var c = this.isVisible(a);
+    a.setVisible(b);
+    return c
+};
+mxGraphModel.prototype.execute = function(a) {
+    a.execute();
+    this.beginUpdate();
+    this.currentEdit.add(a);
+    this.fireEvent(new mxEventObject(mxEvent.EXECUTE, "change", a));
+    this.fireEvent(new mxEventObject(mxEvent.EXECUTED, "change", a));
+    this.endUpdate()
+};
+mxGraphModel.prototype.beginUpdate = function() {
+    this.updateLevel++;
+    this.fireEvent(new mxEventObject(mxEvent.BEGIN_UPDATE));
+    1 == this.updateLevel && this.fireEvent(new mxEventObject(mxEvent.START_EDIT))
+};
+mxGraphModel.prototype.endUpdate = function() {
+    this.updateLevel--;
+    0 == this.updateLevel && this.fireEvent(new mxEventObject(mxEvent.END_EDIT));
+    if (!this.endingUpdate) {
+        this.endingUpdate = 0 == this.updateLevel;
+        this.fireEvent(new mxEventObject(mxEvent.END_UPDATE, "edit", this.currentEdit));
+        try {
+            if (this.endingUpdate && !this.currentEdit.isEmpty()) {
+                this.fireEvent(new mxEventObject(mxEvent.BEFORE_UNDO, "edit", this.currentEdit));
+                var a = this.currentEdit;
+                this.currentEdit = this.createUndoableEdit();
+                a.notify();
+                this.fireEvent(new mxEventObject(mxEvent.UNDO,
+                    "edit", a))
+            }
+        } finally {
+            this.endingUpdate = !1
+        }
+    }
+};
+mxGraphModel.prototype.createUndoableEdit = function() {
+    var a = new mxUndoableEdit(this, !0);
+    a.notify = function() {
+        a.source.fireEvent(new mxEventObject(mxEvent.CHANGE, "edit", a, "changes", a.changes));
+        a.source.fireEvent(new mxEventObject(mxEvent.NOTIFY, "edit", a, "changes", a.changes))
+    };
+    return a
+};
+mxGraphModel.prototype.mergeChildren = function(a, b, c) {
+    c = null != c ? c : !0;
+    this.beginUpdate();
+    try {
+        var d = {};
+        this.mergeChildrenImpl(a, b, c, d);
+        for (var e in d) {
+            var f = d[e],
+                g = this.getTerminal(f, !0);
+            null != g && (g = d[mxCellPath.create(g)], this.setTerminal(f, g, !0));
+            g = this.getTerminal(f, !1);
+            null != g && (g = d[mxCellPath.create(g)], this.setTerminal(f, g, !1))
+        }
+    } finally {
+        this.endUpdate()
+    }
+};
+mxGraphModel.prototype.mergeChildrenImpl = function(a, b, c, d) {
+    this.beginUpdate();
+    try {
+        for (var e = a.getChildCount(), f = 0; f < e; f++) {
+            var g = a.getChildAt(f);
+            if ("function" == typeof g.getId) {
+                var h = g.getId(),
+                    k = null != h && (!this.isEdge(g) || !c) ? this.getCell(h) : null;
+                if (null == k) {
+                    var l = g.clone();
+                    l.setId(h);
+                    l.setTerminal(g.getTerminal(!0), !0);
+                    l.setTerminal(g.getTerminal(!1), !1);
+                    k = b.insert(l);
+                    this.cellAdded(k)
+                }
+                d[mxCellPath.create(g)] = k;
+                this.mergeChildrenImpl(g, k, c, d)
+            }
+        }
+    } finally {
+        this.endUpdate()
+    }
+};
+mxGraphModel.prototype.getParents = function(a) {
+    var b = [];
+    if (null != a)
+        for (var c = {}, d = 0; d < a.length; d++) {
+            var e = this.getParent(a[d]);
+            if (null != e) {
+                var f = mxCellPath.create(e);
+                null == c[f] && (c[f] = e, b.push(e))
+            }
+        }
+    return b
+};
+mxGraphModel.prototype.cloneCell = function(a) {
+    return null != a ? this.cloneCells([a], !0)[0] : null
+};
+mxGraphModel.prototype.cloneCells = function(a, b) {
+    for (var c = {}, d = [], e = 0; e < a.length; e++) null != a[e] ? d.push(this.cloneCellImpl(a[e], c, b)) : d.push(null);
+    for (e = 0; e < d.length; e++) null != d[e] && this.restoreClone(d[e], a[e], c);
+    return d
+};
+mxGraphModel.prototype.cloneCellImpl = function(a, b, c) {
+    var d = this.cellCloned(a);
+    b[mxObjectIdentity.get(a)] = d;
+    if (c) {
+        c = this.getChildCount(a);
+        for (var e = 0; e < c; e++) {
+            var f = this.cloneCellImpl(this.getChildAt(a, e), b, !0);
+            d.insert(f)
+        }
+    }
+    return d
+};
+mxGraphModel.prototype.cellCloned = function(a) {
+    return a.clone()
+};
+mxGraphModel.prototype.restoreClone = function(a, b, c) {
+    var d = this.getTerminal(b, !0);
+    null != d && (d = c[mxObjectIdentity.get(d)], null != d && d.insertEdge(a, !0));
+    d = this.getTerminal(b, !1);
+    null != d && (d = c[mxObjectIdentity.get(d)], null != d && d.insertEdge(a, !1));
+    for (var d = this.getChildCount(a), e = 0; e < d; e++) this.restoreClone(this.getChildAt(a, e), this.getChildAt(b, e), c)
+};
+
+function mxRootChange(a, b) {
+    this.model = a;
+    this.previous = this.root = b
+}
+mxRootChange.prototype.execute = function() {
+    this.root = this.previous;
+    this.previous = this.model.rootChanged(this.previous)
+};
+
+function mxChildChange(a, b, c, d) {
+    this.model = a;
+    this.previous = this.parent = b;
+    this.child = c;
+    this.previousIndex = this.index = d
+}
+mxChildChange.prototype.execute = function() {
+    var a = this.model.getParent(this.child),
+        b = null != a ? a.getIndex(this.child) : 0;
+    null == this.previous && this.connect(this.child, !1);
+    a = this.model.parentForCellChanged(this.child, this.previous, this.previousIndex);
+    null != this.previous && this.connect(this.child, !0);
+    this.parent = this.previous;
+    this.previous = a;
+    this.index = this.previousIndex;
+    this.previousIndex = b
+};
+mxChildChange.prototype.connect = function(a, b) {
+    b = null != b ? b : !0;
+    var c = a.getTerminal(!0),
+        d = a.getTerminal(!1);
+    null != c && (b ? this.model.terminalForCellChanged(a, c, !0) : this.model.terminalForCellChanged(a, null, !0));
+    null != d && (b ? this.model.terminalForCellChanged(a, d, !1) : this.model.terminalForCellChanged(a, null, !1));
+    a.setTerminal(c, !0);
+    a.setTerminal(d, !1);
+    c = this.model.getChildCount(a);
+    for (d = 0; d < c; d++) this.connect(this.model.getChildAt(a, d), b)
+};
+
+function mxTerminalChange(a, b, c, d) {
+    this.model = a;
+    this.cell = b;
+    this.previous = this.terminal = c;
+    this.source = d
+}
+mxTerminalChange.prototype.execute = function() {
+    this.terminal = this.previous;
+    this.previous = this.model.terminalForCellChanged(this.cell, this.previous, this.source)
+};
+
+function mxValueChange(a, b, c) {
+    this.model = a;
+    this.cell = b;
+    this.previous = this.value = c
+}
+mxValueChange.prototype.execute = function() {
+    this.value = this.previous;
+    this.previous = this.model.valueForCellChanged(this.cell, this.previous)
+};
+
+function mxStyleChange(a, b, c) {
+    this.model = a;
+    this.cell = b;
+    this.previous = this.style = c
+}
+mxStyleChange.prototype.execute = function() {
+    this.style = this.previous;
+    this.previous = this.model.styleForCellChanged(this.cell, this.previous)
+};
+
+function mxGeometryChange(a, b, c) {
+    this.model = a;
+    this.cell = b;
+    this.previous = this.geometry = c
+}
+mxGeometryChange.prototype.execute = function() {
+    this.geometry = this.previous;
+    this.previous = this.model.geometryForCellChanged(this.cell, this.previous)
+};
+
+function mxCollapseChange(a, b, c) {
+    this.model = a;
+    this.cell = b;
+    this.previous = this.collapsed = c
+}
+mxCollapseChange.prototype.execute = function() {
+    this.collapsed = this.previous;
+    this.previous = this.model.collapsedStateForCellChanged(this.cell, this.previous)
+};
+
+function mxVisibleChange(a, b, c) {
+    this.model = a;
+    this.cell = b;
+    this.previous = this.visible = c
+}
+mxVisibleChange.prototype.execute = function() {
+    this.visible = this.previous;
+    this.previous = this.model.visibleStateForCellChanged(this.cell, this.previous)
+};
+
+function mxCellAttributeChange(a, b, c) {
+    this.cell = a;
+    this.attribute = b;
+    this.previous = this.value = c
+}
+mxCellAttributeChange.prototype.execute = function() {
+    var a = this.cell.getAttribute(this.attribute);
+    null == this.previous ? this.cell.value.removeAttribute(this.attribute) : this.cell.setAttribute(this.attribute, this.previous);
+    this.previous = a
+};
+
+function mxCell(a, b, c) {
+    this.value = a;
+    this.setGeometry(b);
+    this.setStyle(c);
+    if (null != this.onInit) this.onInit()
+}
+mxCell.prototype.id = null;
+mxCell.prototype.value = null;
+mxCell.prototype.geometry = null;
+mxCell.prototype.style = null;
+mxCell.prototype.vertex = !1;
+mxCell.prototype.edge = !1;
+mxCell.prototype.connectable = !0;
+mxCell.prototype.visible = !0;
+mxCell.prototype.collapsed = !1;
+mxCell.prototype.parent = null;
+mxCell.prototype.source = null;
+mxCell.prototype.target = null;
+mxCell.prototype.children = null;
+mxCell.prototype.edges = null;
+mxCell.prototype.mxTransient = "id value parent source target children edges".split(" ");
+mxCell.prototype.getId = function() {
+    return this.id
+};
+mxCell.prototype.setId = function(a) {
+    this.id = a
+};
+mxCell.prototype.getValue = function() {
+    return this.value
+};
+mxCell.prototype.setValue = function(a) {
+    this.value = a
+};
+mxCell.prototype.valueChanged = function(a) {
+    var b = this.getValue();
+    this.setValue(a);
+    return b
+};
+mxCell.prototype.getGeometry = function() {
+    return this.geometry
+};
+mxCell.prototype.setGeometry = function(a) {
+    this.geometry = a
+};
+mxCell.prototype.getStyle = function() {
+    return this.style
+};
+mxCell.prototype.setStyle = function(a) {
+    this.style = a
+};
+mxCell.prototype.isVertex = function() {
+    return this.vertex
+};
+mxCell.prototype.setVertex = function(a) {
+    this.vertex = a
+};
+mxCell.prototype.isEdge = function() {
+    return this.edge
+};
+mxCell.prototype.setEdge = function(a) {
+    this.edge = a
+};
+mxCell.prototype.isConnectable = function() {
+    return this.connectable
+};
+mxCell.prototype.setConnectable = function(a) {
+    this.connectable = a
+};
+mxCell.prototype.isVisible = function() {
+    return this.visible
+};
+mxCell.prototype.setVisible = function(a) {
+    this.visible = a
+};
+mxCell.prototype.isCollapsed = function() {
+    return this.collapsed
+};
+mxCell.prototype.setCollapsed = function(a) {
+    this.collapsed = a
+};
+mxCell.prototype.getParent = function() {
+    return this.parent
+};
+mxCell.prototype.setParent = function(a) {
+    this.parent = a
+};
+mxCell.prototype.getTerminal = function(a) {
+    return a ? this.source : this.target
+};
+mxCell.prototype.setTerminal = function(a, b) {
+    b ? this.source = a : this.target = a;
+    return a
+};
+mxCell.prototype.getChildCount = function() {
+    return null == this.children ? 0 : this.children.length
+};
+mxCell.prototype.getIndex = function(a) {
+    return mxUtils.indexOf(this.children, a)
+};
+mxCell.prototype.getChildAt = function(a) {
+    return null == this.children ? null : this.children[a]
+};
+mxCell.prototype.insert = function(a, b) {
+    null != a && (null == b && (b = this.getChildCount(), a.getParent() == this && b--), a.removeFromParent(), a.setParent(this), null == this.children ? (this.children = [], this.children.push(a)) : this.children.splice(b, 0, a));
+    return a
+};
+mxCell.prototype.remove = function(a) {
+    var b = null;
+    null != this.children && 0 <= a && (b = this.getChildAt(a), null != b && (this.children.splice(a, 1), b.setParent(null)));
+    return b
+};
+mxCell.prototype.removeFromParent = function() {
+    if (null != this.parent) {
+        var a = this.parent.getIndex(this);
+        this.parent.remove(a)
+    }
+};
+mxCell.prototype.getEdgeCount = function() {
+    return null == this.edges ? 0 : this.edges.length
+};
+mxCell.prototype.getEdgeIndex = function(a) {
+    return mxUtils.indexOf(this.edges, a)
+};
+mxCell.prototype.getEdgeAt = function(a) {
+    return null == this.edges ? null : this.edges[a]
+};
+mxCell.prototype.insertEdge = function(a, b) {
+    if (null != a && (a.removeFromTerminal(b), a.setTerminal(this, b), null == this.edges || a.getTerminal(!b) != this || 0 > mxUtils.indexOf(this.edges, a))) null == this.edges && (this.edges = []), this.edges.push(a);
+    return a
+};
+mxCell.prototype.removeEdge = function(a, b) {
+    if (null != a) {
+        if (a.getTerminal(!b) != this && null != this.edges) {
+            var c = this.getEdgeIndex(a);
+            0 <= c && this.edges.splice(c, 1)
+        }
+        a.setTerminal(null, b)
+    }
+    return a
+};
+mxCell.prototype.removeFromTerminal = function(a) {
+    var b = this.getTerminal(a);
+    null != b && b.removeEdge(this, a)
+};
+mxCell.prototype.getAttribute = function(a, b) {
+    var c = this.getValue();
+    return (null != c && c.nodeType == mxConstants.NODETYPE_ELEMENT ? c.getAttribute(a) : null) || b
+};
+mxCell.prototype.setAttribute = function(a, b) {
+    var c = this.getValue();
+    null != c && c.nodeType == mxConstants.NODETYPE_ELEMENT && c.setAttribute(a, b)
+};
+mxCell.prototype.clone = function() {
+    var a = mxUtils.clone(this, this.mxTransient);
+    a.setValue(this.cloneValue());
+    return a
+};
+mxCell.prototype.cloneValue = function() {
+    var a = this.getValue();
+    null != a && ("function" == typeof a.clone ? a = a.clone() : isNaN(a.nodeType) || (a = a.cloneNode(!0)));
+    return a
+};
+
+function mxGeometry(a, b, c, d) {
+    mxRectangle.call(this, a, b, c, d)
+}
+mxGeometry.prototype = new mxRectangle;
+mxGeometry.prototype.constructor = mxGeometry;
+mxGeometry.prototype.TRANSLATE_CONTROL_POINTS = !0;
+mxGeometry.prototype.alternateBounds = null;
+mxGeometry.prototype.sourcePoint = null;
+mxGeometry.prototype.targetPoint = null;
+mxGeometry.prototype.points = null;
+mxGeometry.prototype.offset = null;
+mxGeometry.prototype.relative = !1;
+mxGeometry.prototype.swap = function() {
+    if (null != this.alternateBounds) {
+        var a = new mxRectangle(this.x, this.y, this.width, this.height);
+        this.x = this.alternateBounds.x;
+        this.y = this.alternateBounds.y;
+        this.width = this.alternateBounds.width;
+        this.height = this.alternateBounds.height;
+        this.alternateBounds = a
+    }
+};
+mxGeometry.prototype.getTerminalPoint = function(a) {
+    return a ? this.sourcePoint : this.targetPoint
+};
+mxGeometry.prototype.setTerminalPoint = function(a, b) {
+    b ? this.sourcePoint = a : this.targetPoint = a;
+    return a
+};
+mxGeometry.prototype.translate = function(a, b) {
+    this.clone();
+    this.relative || (this.x += a, this.y += b);
+    null != this.sourcePoint && (this.sourcePoint.x += a, this.sourcePoint.y += b);
+    null != this.targetPoint && (this.targetPoint.x += a, this.targetPoint.y += b);
+    if (this.TRANSLATE_CONTROL_POINTS && null != this.points)
+        for (var c = this.points.length, d = 0; d < c; d++) {
+            var e = this.points[d];
+            null != e && (e.x += a, e.y += b)
+        }
+};
+var mxCellPath = {
+        PATH_SEPARATOR: ".",
+        create: function(a) {
+            var b = "";
+            if (null != a)
+                for (var c = a.getParent(); null != c;) b = c.getIndex(a) + mxCellPath.PATH_SEPARATOR + b, a = c, c = a.getParent();
+            a = b.length;
+            1 < a && (b = b.substring(0, a - 1));
+            return b
+        },
+        getParentPath: function(a) {
+            if (null != a) {
+                var b = a.lastIndexOf(mxCellPath.PATH_SEPARATOR);
+                if (0 <= b) return a.substring(0, b);
+                if (0 < a.length) return ""
+            }
+            return null
+        },
+        resolve: function(a, b) {
+            var c = a;
+            if (null != b)
+                for (var d = b.split(mxCellPath.PATH_SEPARATOR), e = 0; e < d.length; e++) c = c.getChildAt(parseInt(d[e]));
+            return c
+        },
+        compare: function(a, b) {
+            for (var c = Math.min(a.length, b.length), d = 0, e = 0; e < c; e++)
+                if (a[e] != b[e]) {
+                    0 == a[e].length || 0 == b[e].length ? d = a[e] == b[e] ? 0 : a[e] > b[e] ? 1 : -1 : (c = parseInt(a[e]), e = parseInt(b[e]), d = c == e ? 0 : c > e ? 1 : -1);
+                    break
+                }
+            0 == d && (c = a.length, e = b.length, c != e && (d = c > e ? 1 : -1));
+            return d
+        }
+    },
+    mxPerimeter = {
+        RectanglePerimeter: function(a, b, c, d) {
+            b = a.getCenterX();
+            var e = a.getCenterY(),
+                f = Math.atan2(c.y - e, c.x - b),
+                g = new mxPoint(0, 0),
+                h = Math.PI,
+                k = Math.PI / 2 - f,
+                l = Math.atan2(a.height, a.width);
+            f < -h + l || f > h - l ? (g.x = a.x, g.y = e - a.width *
+                Math.tan(f) / 2) : f < -l ? (g.y = a.y, g.x = b - a.height * Math.tan(k) / 2) : f < l ? (g.x = a.x + a.width, g.y = e + a.width * Math.tan(f) / 2) : (g.y = a.y + a.height, g.x = b + a.height * Math.tan(k) / 2);
+            d && (c.x >= a.x && c.x <= a.x + a.width ? g.x = c.x : c.y >= a.y && c.y <= a.y + a.height && (g.y = c.y), c.x < a.x ? g.x = a.x : c.x > a.x + a.width && (g.x = a.x + a.width), c.y < a.y ? g.y = a.y : c.y > a.y + a.height && (g.y = a.y + a.height));
+            return g
+        },
+        EllipsePerimeter: function(a, b, c, d) {
+            var e = a.x,
+                f = a.y,
+                g = a.width / 2,
+                h = a.height / 2,
+                k = e + g,
+                l = f + h;
+            b = c.x;
+            c = c.y;
+            var m = parseInt(b - k),
+                n = parseInt(c - l);
+            if (0 == m && 0 != n) return new mxPoint(k,
+                l + h * n / Math.abs(n));
+            if (0 == m && 0 == n) return new mxPoint(b, c);
+            if (d) {
+                if (c >= f && c <= f + a.height) return a = c - l, a = Math.sqrt(g * g * (1 - a * a / (h * h))) || 0, b <= e && (a = -a), new mxPoint(k + a, c);
+                if (b >= e && b <= e + a.width) return a = b - k, a = Math.sqrt(h * h * (1 - a * a / (g * g))) || 0, c <= f && (a = -a), new mxPoint(b, l + a)
+            }
+            e = n / m;
+            l -= e * k;
+            f = g * g * e * e + h * h;
+            a = -2 * k * f;
+            h = Math.sqrt(a * a - 4 * f * (g * g * e * e * k * k + h * h * k * k - g * g * h * h));
+            g = (-a + h) / (2 * f);
+            h = (-a - h) / (2 * f);
+            k = e * g + l;
+            l = e * h + l;
+            e = Math.sqrt(Math.pow(g - b, 2) + Math.pow(k - c, 2));
+            b = Math.sqrt(Math.pow(h - b, 2) + Math.pow(l - c, 2));
+            f = c = 0;
+            e < b ? (c =
+                g, f = k) : (c = h, f = l);
+            return new mxPoint(c, f)
+        },
+        RhombusPerimeter: function(a, b, c, d) {
+            b = a.x;
+            var e = a.y,
+                f = a.width;
+            a = a.height;
+            var g = b + f / 2,
+                h = e + a / 2,
+                k = c.x;
+            c = c.y;
+            if (g == k) return h > c ? new mxPoint(g, e) : new mxPoint(g, e + a);
+            if (h == c) return g > k ? new mxPoint(b, h) : new mxPoint(b + f, h);
+            var l = g,
+                m = h;
+            d && (k >= b && k <= b + f ? l = k : c >= e && c <= e + a && (m = c));
+            return k < g ? c < h ? mxUtils.intersection(k, c, l, m, g, e, b, h) : mxUtils.intersection(k, c, l, m, g, e + a, b, h) : c < h ? mxUtils.intersection(k, c, l, m, g, e, b + f, h) : mxUtils.intersection(k, c, l, m, g, e + a, b + f, h)
+        },
+        TrianglePerimeter: function(a,
+            b, c, d) {
+            b = null != b ? b.style[mxConstants.STYLE_DIRECTION] : null;
+            var e = b == mxConstants.DIRECTION_NORTH || b == mxConstants.DIRECTION_SOUTH,
+                f = a.x,
+                g = a.y,
+                h = a.width;
+            a = a.height;
+            var k = f + h / 2,
+                l = g + a / 2,
+                m = new mxPoint(f, g),
+                n = new mxPoint(f + h, l),
+                p = new mxPoint(f, g + a);
+            b == mxConstants.DIRECTION_NORTH ? (m = p, n = new mxPoint(k, g), p = new mxPoint(f + h, g + a)) : b == mxConstants.DIRECTION_SOUTH ? (n = new mxPoint(k, g + a), p = new mxPoint(f + h, g)) : b == mxConstants.DIRECTION_WEST && (m = new mxPoint(f + h, g), n = new mxPoint(f, l), p = new mxPoint(f + h, g + a));
+            var q = c.x -
+                k,
+                s = c.y - l,
+                q = e ? Math.atan2(q, s) : Math.atan2(s, q),
+                r = e ? Math.atan2(h, a) : Math.atan2(a, h),
+                s = !1,
+                s = b == mxConstants.DIRECTION_NORTH || b == mxConstants.DIRECTION_WEST ? q > -r && q < r : q < -Math.PI + r || q > Math.PI - r,
+                r = null;
+            s ? r = d && (e && c.x >= m.x && c.x <= p.x || !e && c.y >= m.y && c.y <= p.y) ? e ? new mxPoint(c.x, m.y) : new mxPoint(m.x, c.y) : b == mxConstants.DIRECTION_NORTH ? new mxPoint(f + h / 2 + a * Math.tan(q) / 2, g + a) : b == mxConstants.DIRECTION_SOUTH ? new mxPoint(f + h / 2 - a * Math.tan(q) / 2, g) : b == mxConstants.DIRECTION_WEST ? new mxPoint(f + h, g + a / 2 + h * Math.tan(q) / 2) : new mxPoint(f,
+                g + a / 2 - h * Math.tan(q) / 2) : (d && (d = new mxPoint(k, l), c.y >= g && c.y <= g + a ? (d.x = e ? k : b == mxConstants.DIRECTION_WEST ? f + h : f, d.y = c.y) : c.x >= f && c.x <= f + h && (d.x = c.x, d.y = !e ? l : b == mxConstants.DIRECTION_NORTH ? g + a : g), k = d.x, l = d.y), r = e && c.x <= f + h / 2 || !e && c.y <= g + a / 2 ? mxUtils.intersection(c.x, c.y, k, l, m.x, m.y, n.x, n.y) : mxUtils.intersection(c.x, c.y, k, l, n.x, n.y, p.x, p.y));
+            null == r && (r = new mxPoint(k, l));
+            return r
+        }
+    };
+
+function mxPrintPreview(a, b, c, d, e, f, g, h, k) {
+    this.graph = a;
+    this.scale = null != b ? b : 1 / a.pageScale;
+    this.border = null != d ? d : 0;
+    this.pageFormat = null != c ? c : a.pageFormat;
+    this.title = null != h ? h : "Printer-friendly version";
+    this.x0 = null != e ? e : 0;
+    this.y0 = null != f ? f : 0;
+    this.borderColor = g;
+    this.pageSelector = null != k ? k : !0
+}
+mxPrintPreview.prototype.graph = null;
+mxPrintPreview.prototype.pageFormat = null;
+mxPrintPreview.prototype.scale = null;
+mxPrintPreview.prototype.border = 0;
+mxPrintPreview.prototype.x0 = 0;
+mxPrintPreview.prototype.y0 = 0;
+mxPrintPreview.prototype.autoOrigin = !0;
+mxPrintPreview.prototype.printOverlays = !1;
+mxPrintPreview.prototype.borderColor = null;
+mxPrintPreview.prototype.title = null;
+mxPrintPreview.prototype.pageSelector = null;
+mxPrintPreview.prototype.wnd = null;
+mxPrintPreview.prototype.pageCount = 0;
+mxPrintPreview.prototype.getWindow = function() {
+    return this.wnd
+};
+mxPrintPreview.prototype.getDoctype = function() {
+    var a = "";
+    8 == document.documentMode && (a = '\x3cmeta http-equiv\x3d"X-UA-Compatible" content\x3d"IE\x3d8"\x3e');
+    return a
+};
+mxPrintPreview.prototype.open = function(a) {
+    var b = this.graph.cellRenderer.initializeOverlay,
+        c = null;
+    try {
+        this.printOverlays && (this.graph.cellRenderer.initializeOverlay = function(a, b) {
+            b.init(a.view.getDrawPane())
+        });
+        if (null == this.wnd) {
+            this.wnd = window.open();
+            var d = this.wnd.document,
+                e = this.getDoctype();
+            null != e && 0 < e.length && d.writeln(e);
+            d.writeln("\x3chtml\x3e");
+            d.writeln("\x3chead\x3e");
+            this.writeHead(d, a);
+            d.writeln("\x3c/head\x3e");
+            d.writeln('\x3cbody class\x3d"mxPage"\x3e');
+            mxClient.link("stylesheet", mxClient.basePath +
+                "/css/common.css", d);
+            mxClient.IS_VML && (d.namespaces.add("v", "urn:schemas-microsoft-com:vml"), d.namespaces.add("o", "urn:schemas-microsoft-com:office:office"), d.createStyleSheet().cssText = "v\\:*{behavior:url(#default#VML)}o\\:*{behavior:url(#default#VML)}", mxClient.link("stylesheet", mxClient.basePath + "/css/explorer.css", d));
+            var f = this.graph.getGraphBounds().clone(),
+                g = this.graph.getView().getScale(),
+                h = g / this.scale,
+                k = this.graph.getView().getTranslate();
+            this.autoOrigin || (this.x0 = -k.x * this.scale, this.y0 = -k.y * this.scale, f.width += f.x, f.height += f.y, f.x = 0, this.border = f.y = 0);
+            f.width /= h;
+            f.height /= h;
+            var l = this.pageFormat.width - 2 * this.border,
+                m = this.pageFormat.height - 2 * this.border,
+                n = Math.max(1, Math.ceil((f.width + this.x0) / l)),
+                p = Math.max(1, Math.ceil((f.height + this.y0) / m));
+            this.pageCount = n * p;
+            var q = mxUtils.bind(this, function() {
+                if (this.pageSelector && (1 < p || 1 < n)) {
+                    var a = this.createPageSelector(p, n);
+                    d.body.appendChild(a);
+                    if (mxClient.IS_IE) {
+                        a.style.position = "absolute";
+                        var b = function() {
+                            a.style.top = d.body.scrollTop +
+                                10 + "px"
+                        };
+                        mxEvent.addListener(this.wnd, "scroll", function(a) {
+                            b()
+                        });
+                        mxEvent.addListener(this.wnd, "resize", function(a) {
+                            b()
+                        })
+                    }
+                }
+            });
+            a = function(a, b) {
+                null != this.borderColor && (a.style.borderColor = this.borderColor, a.style.borderStyle = "solid", a.style.borderWidth = "1px");
+                a.style.background = "white";
+                b && (a.style.pageBreakAfter = "always");
+                mxClient.IS_IE ? (d.writeln(a.outerHTML), a.parentNode.removeChild(a)) : (a.parentNode.removeChild(a), d.body.appendChild(a));
+                if (b) {
+                    var c = d.createElement("hr");
+                    c.className = "mxPageBreak";
+                    d.body.appendChild(c)
+                }
+            };
+            var s = this.getCoverPages(this.pageFormat.width, this.pageFormat.height);
+            if (null != s)
+                for (var r = 0; r < s.length; r++) a(s[r], !0);
+            for (var t = this.getAppendices(this.pageFormat.width, this.pageFormat.height), r = 0; r < p; r++)
+                for (var v = r * m / this.scale - this.y0 / this.scale + (f.y - k.y * g) / g, s = 0; s < n; s++) {
+                    if (null == this.wnd) return null;
+                    var w = s * l / this.scale - this.x0 / this.scale + (f.x - k.x * g) / g,
+                        u = r * n + s + 1,
+                        c = this.renderPage(this.pageFormat.width, this.pageFormat.height, mxUtils.bind(this, function(a) {
+                            this.addGraphFragment(-w, -v, this.scale, u, a)
+                        }));
+                    c.setAttribute("id", "mxPage-" + u);
+                    a(c, null != t || r < p - 1 || s < n - 1)
+                }
+            if (null != t)
+                for (r = 0; r < t.length; r++) a(t[r], r < t.length);
+            d.writeln("\x3c/body\x3e");
+            d.writeln("\x3c/html\x3e");
+            d.close();
+            q();
+            mxEvent.release(d.body)
+        }
+        this.wnd.focus()
+    } catch (y) {
+        null != c && null != c.parentNode && c.parentNode.removeChild(c)
+    } finally {
+        this.graph.cellRenderer.initializeOverlay = b
+    }
+    return this.wnd
+};
+mxPrintPreview.prototype.writeHead = function(a, b) {
+    null != this.title && a.writeln("\x3ctitle\x3e" + this.title + "\x3c/title\x3e");
+    a.writeln('\x3cstyle type\x3d"text/css"\x3e');
+    a.writeln("@media print {");
+    a.writeln("  table.mxPageSelector { display: none; }");
+    a.writeln("  hr.mxPageBreak { display: none; }");
+    a.writeln("}");
+    a.writeln("@media screen {");
+    a.writeln("  table.mxPageSelector { position: fixed; right: 10px; top: 10px;font-family: Arial; font-size:10pt; border: solid 1px darkgray;background: white; border-collapse:collapse; }");
+    a.writeln("  table.mxPageSelector td { border: solid 1px gray; padding:4px; }");
+    a.writeln("  body.mxPage { background: gray; }");
+    a.writeln("}");
+    null != b && a.writeln(b);
+    a.writeln("\x3c/style\x3e")
+};
+mxPrintPreview.prototype.createPageSelector = function(a, b) {
+    var c = this.wnd.document,
+        d = c.createElement("table");
+    d.className = "mxPageSelector";
+    d.setAttribute("border", "0");
+    for (var e = c.createElement("tbody"), f = 0; f < a; f++) {
+        for (var g = c.createElement("tr"), h = 0; h < b; h++) {
+            var k = f * b + h + 1,
+                l = c.createElement("td");
+            if (!mxClient.IS_NS || mxClient.IS_SF || mxClient.IS_GC) {
+                var m = c.createElement("a");
+                m.setAttribute("href", "#mxPage-" + k);
+                mxUtils.write(m, k, c);
+                l.appendChild(m)
+            } else mxUtils.write(l, k, c);
+            g.appendChild(l)
+        }
+        e.appendChild(g)
+    }
+    d.appendChild(e);
+    return d
+};
+mxPrintPreview.prototype.renderPage = function(a, b, c) {
+    var d = document.createElement("div");
+    try {
+        d.style.width = a + "px";
+        d.style.height = b + "px";
+        d.style.overflow = "hidden";
+        d.style.pageBreakInside = "avoid";
+        d.style.position = "relative";
+        var e = document.createElement("div");
+        e.style.top = this.border + "px";
+        e.style.left = this.border + "px";
+        e.style.width = a - 2 * this.border + "px";
+        e.style.height = b - 2 * this.border + "px";
+        e.style.overflow = "hidden";
+        this.graph.dialect == mxConstants.DIALECT_VML && (e.style.position = "absolute");
+        d.appendChild(e);
+        document.body.appendChild(d);
+        c(e)
+    } catch (f) {
+        throw d.parentNode.removeChild(d), f;
+    }
+    return d
+};
+mxPrintPreview.prototype.addGraphFragment = function(a, b, c, d, e) {
+    d = this.graph.getView();
+    var f = this.graph.container;
+    this.graph.container = e;
+    var g = d.getCanvas(),
+        h = d.getBackgroundPane(),
+        k = d.getDrawPane(),
+        l = d.getOverlayPane();
+    this.graph.dialect == mxConstants.DIALECT_SVG ? d.createSvg() : this.graph.dialect == mxConstants.DIALECT_VML ? d.createVml() : d.createHtml();
+    var m = d.isEventsEnabled();
+    d.setEventsEnabled(!1);
+    var n = this.graph.isEnabled();
+    this.graph.setEnabled(!1);
+    var p = d.getTranslate();
+    d.translate = new mxPoint(a,
+        b);
+    a = null;
+    try {
+        var q = [this.graph.getModel().getRoot()];
+        a = new mxTemporaryCellStates(d, c, q)
+    } finally {
+        if (mxClient.IS_IE) d.overlayPane.innerHTML = "";
+        else
+            for (c = e.firstChild; null != c;) q = c.nextSibling, b = c.nodeName.toLowerCase(), "svg" == b ? (c.setAttribute("width", parseInt(e.style.width)), c.setAttribute("height", parseInt(e.style.height))) : "default" != c.style.cursor && "table" != b && c.parentNode.removeChild(c), c = q;
+        d.overlayPane.parentNode.removeChild(d.overlayPane);
+        this.graph.setEnabled(n);
+        this.graph.container = f;
+        d.canvas =
+            g;
+        d.backgroundPane = h;
+        d.drawPane = k;
+        d.overlayPane = l;
+        d.translate = p;
+        a.destroy();
+        d.setEventsEnabled(m)
+    }
+};
+mxPrintPreview.prototype.getCoverPages = function() {
+    return null
+};
+mxPrintPreview.prototype.getAppendices = function() {
+    return null
+};
+mxPrintPreview.prototype.print = function() {
+    var a = this.open();
+    null != a && a.print()
+};
+mxPrintPreview.prototype.close = function() {
+    null != this.wnd && (this.wnd.close(), this.wnd = null)
+};
+
+function mxStylesheet() {
+    this.styles = {};
+    this.putDefaultVertexStyle(this.createDefaultVertexStyle());
+    this.putDefaultEdgeStyle(this.createDefaultEdgeStyle())
+}
+mxStylesheet.prototype.createDefaultVertexStyle = function() {
+    var a = {};
+    a[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_RECTANGLE;
+    a[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;
+    a[mxConstants.STYLE_VERTICAL_ALIGN] = mxConstants.ALIGN_MIDDLE;
+    a[mxConstants.STYLE_ALIGN] = mxConstants.ALIGN_CENTER;
+    a[mxConstants.STYLE_FILLCOLOR] = "#C3D9FF";
+    a[mxConstants.STYLE_STROKECOLOR] = "#6482B9";
+    a[mxConstants.STYLE_FONTCOLOR] = "#774400";
+    return a
+};
+mxStylesheet.prototype.createDefaultEdgeStyle = function() {
+    var a = {};
+    a[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_CONNECTOR;
+    a[mxConstants.STYLE_ENDARROW] = mxConstants.ARROW_CLASSIC;
+    a[mxConstants.STYLE_VERTICAL_ALIGN] = mxConstants.ALIGN_MIDDLE;
+    a[mxConstants.STYLE_ALIGN] = mxConstants.ALIGN_CENTER;
+    a[mxConstants.STYLE_STROKECOLOR] = "#6482B9";
+    a[mxConstants.STYLE_FONTCOLOR] = "#446299";
+    return a
+};
+mxStylesheet.prototype.putDefaultVertexStyle = function(a) {
+    this.putCellStyle("defaultVertex", a)
+};
+mxStylesheet.prototype.putDefaultEdgeStyle = function(a) {
+    this.putCellStyle("defaultEdge", a)
+};
+mxStylesheet.prototype.getDefaultVertexStyle = function() {
+    return this.styles.defaultVertex
+};
+mxStylesheet.prototype.getDefaultEdgeStyle = function() {
+    return this.styles.defaultEdge
+};
+mxStylesheet.prototype.putCellStyle = function(a, b) {
+    this.styles[a] = b
+};
+mxStylesheet.prototype.getCellStyle = function(a, b) {
+    var c = b;
+    if (null != a && 0 < a.length)
+        for (var d = a.split(";"), c = null != c && ";" != a.charAt(0) ? mxUtils.clone(c) : {}, e = 0; e < d.length; e++) {
+            var f = d[e],
+                g = f.indexOf("\x3d");
+            if (0 <= g) {
+                var h = f.substring(0, g),
+                    f = f.substring(g + 1);
+                f == mxConstants.NONE ? delete c[h] : mxUtils.isNumeric(f) ? c[h] = parseFloat(f) : c[h] = f
+            } else if (f = this.styles[f], null != f)
+                for (h in f) c[h] = f[h]
+        }
+    return c
+};
+
+function mxCellState(a, b, c) {
+    this.view = a;
+    this.cell = b;
+    this.style = c;
+    this.origin = new mxPoint;
+    this.absoluteOffset = new mxPoint
+}
+mxCellState.prototype = new mxRectangle;
+mxCellState.prototype.constructor = mxCellState;
+mxCellState.prototype.view = null;
+mxCellState.prototype.cell = null;
+mxCellState.prototype.style = null;
+mxCellState.prototype.invalid = !0;
+mxCellState.prototype.invalidOrder = !1;
+mxCellState.prototype.orderChanged = !1;
+mxCellState.prototype.origin = null;
+mxCellState.prototype.absolutePoints = null;
+mxCellState.prototype.absoluteOffset = null;
+mxCellState.prototype.visibleSourceState = null;
+mxCellState.prototype.visibleTargetState = null;
+mxCellState.prototype.terminalDistance = 0;
+mxCellState.prototype.length = 0;
+mxCellState.prototype.segments = null;
+mxCellState.prototype.shape = null;
+mxCellState.prototype.text = null;
+mxCellState.prototype.getPerimeterBounds = function(a, b) {
+    a = a || 0;
+    b = null != b ? b : new mxRectangle(this.x, this.y, this.width, this.height);
+    if (null != this.shape && null != this.shape.stencil) {
+        var c = this.shape.stencil.computeAspect(this.style, b.x, b.y, b.width, b.height);
+        b.x = c.x;
+        b.y = c.y;
+        b.width = this.shape.stencil.w0 * c.width;
+        b.height = this.shape.stencil.h0 * c.height
+    }
+    0 != a && b.grow(a);
+    return b
+};
+mxCellState.prototype.setAbsoluteTerminalPoint = function(a, b) {
+    b ? (null == this.absolutePoints && (this.absolutePoints = []), 0 == this.absolutePoints.length ? this.absolutePoints.push(a) : this.absolutePoints[0] = a) : null == this.absolutePoints ? (this.absolutePoints = [], this.absolutePoints.push(null), this.absolutePoints.push(a)) : 1 == this.absolutePoints.length ? this.absolutePoints.push(a) : this.absolutePoints[this.absolutePoints.length - 1] = a
+};
+mxCellState.prototype.setCursor = function(a) {
+    null != this.shape && this.shape.setCursor(a);
+    null != this.text && this.text.setCursor(a)
+};
+mxCellState.prototype.getVisibleTerminal = function(a) {
+    a = this.getVisibleTerminalState(a);
+    return null != a ? a.cell : null
+};
+mxCellState.prototype.getVisibleTerminalState = function(a) {
+    return a ? this.visibleSourceState : this.visibleTargetState
+};
+mxCellState.prototype.setVisibleTerminalState = function(a, b) {
+    b ? this.visibleSourceState = a : this.visibleTargetState = a
+};
+mxCellState.prototype.destroy = function() {
+    this.view.graph.cellRenderer.destroy(this)
+};
+mxCellState.prototype.clone = function() {
+    var a = new mxCellState(this.view, this.cell, this.style);
+    if (null != this.absolutePoints) {
+        a.absolutePoints = [];
+        for (var b = 0; b < this.absolutePoints.length; b++) a.absolutePoints[b] = this.absolutePoints[b].clone()
+    }
+    null != this.origin && (a.origin = this.origin.clone());
+    null != this.absoluteOffset && (a.absoluteOffset = this.absoluteOffset.clone());
+    null != this.boundingBox && (a.boundingBox = this.boundingBox.clone());
+    a.terminalDistance = this.terminalDistance;
+    a.segments = this.segments;
+    a.length =
+        this.length;
+    a.x = this.x;
+    a.y = this.y;
+    a.width = this.width;
+    a.height = this.height;
+    return a
+};
+
+function mxGraphSelectionModel(a) {
+    this.graph = a;
+    this.cells = []
+}
+mxGraphSelectionModel.prototype = new mxEventSource;
+mxGraphSelectionModel.prototype.constructor = mxGraphSelectionModel;
+mxGraphSelectionModel.prototype.doneResource = "none" != mxClient.language ? "done" : "";
+mxGraphSelectionModel.prototype.updatingSelectionResource = "none" != mxClient.language ? "updatingSelection" : "";
+mxGraphSelectionModel.prototype.graph = null;
+mxGraphSelectionModel.prototype.singleSelection = !1;
+mxGraphSelectionModel.prototype.isSingleSelection = function() {
+    return this.singleSelection
+};
+mxGraphSelectionModel.prototype.setSingleSelection = function(a) {
+    this.singleSelection = a
+};
+mxGraphSelectionModel.prototype.isSelected = function(a) {
+    return null != a ? 0 <= mxUtils.indexOf(this.cells, a) : !1
+};
+mxGraphSelectionModel.prototype.isEmpty = function() {
+    return 0 == this.cells.length
+};
+mxGraphSelectionModel.prototype.clear = function() {
+    this.changeSelection(null, this.cells)
+};
+mxGraphSelectionModel.prototype.setCell = function(a) {
+    null != a && this.setCells([a])
+};
+mxGraphSelectionModel.prototype.setCells = function(a) {
+    if (null != a) {
+        this.singleSelection && (a = [this.getFirstSelectableCell(a)]);
+        for (var b = [], c = 0; c < a.length; c++) this.graph.isCellSelectable(a[c]) && b.push(a[c]);
+        this.changeSelection(b, this.cells)
+    }
+};
+mxGraphSelectionModel.prototype.getFirstSelectableCell = function(a) {
+    if (null != a)
+        for (var b = 0; b < a.length; b++)
+            if (this.graph.isCellSelectable(a[b])) return a[b];
+    return null
+};
+mxGraphSelectionModel.prototype.addCell = function(a) {
+    null != a && this.addCells([a])
+};
+mxGraphSelectionModel.prototype.addCells = function(a) {
+    if (null != a) {
+        var b = null;
+        this.singleSelection && (b = this.cells, a = [this.getFirstSelectableCell(a)]);
+        for (var c = [], d = 0; d < a.length; d++) !this.isSelected(a[d]) && this.graph.isCellSelectable(a[d]) && c.push(a[d]);
+        this.changeSelection(c, b)
+    }
+};
+mxGraphSelectionModel.prototype.removeCell = function(a) {
+    null != a && this.removeCells([a])
+};
+mxGraphSelectionModel.prototype.removeCells = function(a) {
+    if (null != a) {
+        for (var b = [], c = 0; c < a.length; c++) this.isSelected(a[c]) && b.push(a[c]);
+        this.changeSelection(null, b)
+    }
+};
+mxGraphSelectionModel.prototype.changeSelection = function(a, b) {
+    if (null != a && 0 < a.length && null != a[0] || null != b && 0 < b.length && null != b[0]) {
+        var c = new mxSelectionChange(this, a, b);
+        c.execute();
+        var d = new mxUndoableEdit(this, !1);
+        d.add(c);
+        this.fireEvent(new mxEventObject(mxEvent.UNDO, "edit", d))
+    }
+};
+mxGraphSelectionModel.prototype.cellAdded = function(a) {
+    null != a && !this.isSelected(a) && this.cells.push(a)
+};
+mxGraphSelectionModel.prototype.cellRemoved = function(a) {
+    null != a && (a = mxUtils.indexOf(this.cells, a), 0 <= a && this.cells.splice(a, 1))
+};
+
+function mxSelectionChange(a, b, c) {
+    this.selectionModel = a;
+    this.added = null != b ? b.slice() : null;
+    this.removed = null != c ? c.slice() : null
+}
+mxSelectionChange.prototype.execute = function() {
+    var a = mxLog.enter("mxSelectionChange.execute");
+    window.status = mxResources.get(this.selectionModel.updatingSelectionResource) || this.selectionModel.updatingSelectionResource;
+    if (null != this.removed)
+        for (var b = 0; b < this.removed.length; b++) this.selectionModel.cellRemoved(this.removed[b]);
+    if (null != this.added)
+        for (b = 0; b < this.added.length; b++) this.selectionModel.cellAdded(this.added[b]);
+    b = this.added;
+    this.added = this.removed;
+    this.removed = b;
+    window.status = mxResources.get(this.selectionModel.doneResource) ||
+        this.selectionModel.doneResource;
+    mxLog.leave("mxSelectionChange.execute", a);
+    this.selectionModel.fireEvent(new mxEventObject(mxEvent.CHANGE, "added", this.added, "removed", this.removed))
+};
+
+function mxCellEditor(a) {
+    this.graph = a
+}
+mxCellEditor.prototype.graph = null;
+mxCellEditor.prototype.textarea = null;
+mxCellEditor.prototype.editingCell = null;
+mxCellEditor.prototype.trigger = null;
+mxCellEditor.prototype.modified = !1;
+mxCellEditor.prototype.autoSize = !0;
+mxCellEditor.prototype.emptyLabelText = "";
+mxCellEditor.prototype.textNode = "";
+mxCellEditor.prototype.init = function() {
+    this.textarea = document.createElement("textarea");
+    this.textarea.className = "mxCellEditor";
+    this.textarea.style.position = "absolute";
+    this.textarea.style.overflow = "visible";
+    this.textarea.setAttribute("cols", "20");
+    this.textarea.setAttribute("rows", "4");
+    mxClient.IS_NS && (this.textarea.style.resize = "none");
+    mxEvent.addListener(this.textarea, "blur", mxUtils.bind(this, function(a) {
+        this.focusLost()
+    }));
+    mxEvent.addListener(this.textarea, "keydown", mxUtils.bind(this, function(a) {
+        mxEvent.isConsumed(a) ||
+            (113 == a.keyCode || this.graph.isEnterStopsCellEditing() && 13 == a.keyCode && !mxEvent.isControlDown(a) && !mxEvent.isShiftDown(a) ? (this.graph.stopEditing(!1), mxEvent.consume(a)) : 27 == a.keyCode ? (this.graph.stopEditing(!0), mxEvent.consume(a)) : (this.clearOnChange && (this.clearOnChange = !1, this.textarea.value = ""), this.setModified(!0)))
+    }));
+    mxEvent.addListener(this.textarea, "keypress", mxUtils.bind(this, function(a) {
+        this.autoSize && !mxEvent.isConsumed(a) && setTimeout(mxUtils.bind(this, function() {
+            this.resize()
+        }), 0)
+    }))
+};
+mxCellEditor.prototype.resize = function() {
+    if (null != this.textDiv) {
+        var a = this.graph.getView().getState(this.editingCell),
+            b = this.graph.isLabelClipped(a.cell),
+            c = this.graph.isWrapping(a.cell);
+        if (this.graph.getModel().isEdge(a.cell)) this.bounds.x = a.absoluteOffset.x, this.bounds.y = a.absoluteOffset.y, this.bounds.width = 0, this.bounds.height = 0;
+        else if (null != this.bounds) {
+            this.bounds.x = a.x;
+            this.bounds.y = a.y;
+            this.bounds.width = a.width;
+            this.bounds.height = a.height;
+            var d = mxUtils.getValue(a.style, mxConstants.STYLE_LABEL_POSITION,
+                mxConstants.ALIGN_CENTER);
+            d == mxConstants.ALIGN_LEFT ? this.bounds.x -= a.width : d == mxConstants.ALIGN_RIGHT && (this.bounds.x += a.width);
+            d = mxUtils.getValue(a.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
+            d == mxConstants.ALIGN_TOP ? this.bounds.y -= a.height : d == mxConstants.ALIGN_BOTTOM && (this.bounds.y += a.height)
+        }
+        d = this.textarea.value;
+        if ("\n" == d.charAt(d.length - 1) || "" == d) d += "\x26nbsp;";
+        d = mxUtils.htmlEntities(d, !1);
+        c ? (this.textDiv.style.whiteSpace = "normal", this.textDiv.style.width = this.bounds.width +
+            "px") : d = d.replace(/ /g, "\x26nbsp;");
+        d = d.replace(/\n/g, "\x3cbr/\x3e");
+        this.textDiv.innerHTML = d;
+        var d = this.textDiv.offsetWidth + 30,
+            e = this.textDiv.offsetHeight + 16,
+            d = Math.max(d, 40),
+            e = Math.max(e, 20);
+        b && (d = Math.min(this.bounds.width - 4, d), e = Math.min(this.bounds.height, e));
+        var f = null != a.text ? a.text.margin : null;
+        null == f && (f = mxUtils.getValue(a.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER), a = mxUtils.getValue(a.style, mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE), f = mxUtils.getAlignmentAsPoint(f,
+            a));
+        if (null != f) {
+            if (b || !c) this.textarea.style.left = Math.max(0, Math.round(this.bounds.x - f.x * this.bounds.width + f.x * d) - 3) + "px";
+            this.textarea.style.top = Math.max(0, Math.round(this.bounds.y - f.y * this.bounds.height + f.y * e) + 4) + "px"
+        }
+        if (b || !c) this.textarea.style.width = d + "px";
+        this.textarea.style.height = e + "px"
+    }
+};
+mxCellEditor.prototype.isModified = function() {
+    return this.modified
+};
+mxCellEditor.prototype.setModified = function(a) {
+    this.modified = a
+};
+mxCellEditor.prototype.focusLost = function() {
+    this.stopEditing(!this.graph.isInvokesStopCellEditing())
+};
+mxCellEditor.prototype.startEditing = function(a, b) {
+    null == this.textarea && this.init();
+    this.stopEditing(!0);
+    var c = this.graph.getView().getState(a);
+    if (null != c) {
+        this.editingCell = a;
+        this.trigger = b;
+        this.textNode = null;
+        null != c.text && this.isHideLabel(c) && (this.textNode = c.text.node, this.textNode.style.visibility = "hidden");
+        var d = this.graph.getView().scale,
+            d = mxUtils.getValue(c.style, mxConstants.STYLE_FONTSIZE, mxConstants.DEFAULT_FONTSIZE) * d,
+            e = mxUtils.getValue(c.style, mxConstants.STYLE_FONTFAMILY, mxConstants.DEFAULT_FONTFAMILY),
+            f = mxUtils.getValue(c.style, mxConstants.STYLE_FONTCOLOR, "black"),
+            g = mxUtils.getValue(c.style, mxConstants.STYLE_ALIGN, mxConstants.ALIGN_LEFT),
+            h = (mxUtils.getValue(c.style, mxConstants.STYLE_FONTSTYLE, 0) & mxConstants.FONT_BOLD) == mxConstants.FONT_BOLD,
+            k = (mxUtils.getValue(c.style, mxConstants.STYLE_FONTSTYLE, 0) & mxConstants.FONT_ITALIC) == mxConstants.FONT_ITALIC,
+            l = (mxUtils.getValue(c.style, mxConstants.STYLE_FONTSTYLE, 0) & mxConstants.FONT_UNDERLINE) == mxConstants.FONT_UNDERLINE;
+        this.textarea.style.fontSize = Math.round(d) +
+            "px";
+        this.textarea.style.lineHeight = Math.round(d * mxConstants.LINE_HEIGHT) + "px";
+        this.textarea.style.fontFamily = e;
+        this.textarea.style.textAlign = g;
+        this.textarea.style.color = f;
+        this.textarea.style.fontWeight = h ? "bold" : "normal";
+        this.textarea.style.fontStyle = k ? "italic" : "";
+        this.textarea.style.textDecoration = l ? "underline" : "";
+        this.textarea.style.overflow = "auto";
+        this.textarea.style.outline = "none";
+        this.bounds = d = this.getEditorBounds(c);
+        this.textarea.style.left = d.x + "px";
+        this.textarea.style.top = d.y + "px";
+        this.textarea.style.width =
+            d.width + "px";
+        this.textarea.style.height = d.height + "px";
+        this.textarea.style.zIndex = 5;
+        c = this.getInitialValue(c, b);
+        null == c || 0 == c.length ? (c = this.getEmptyLabelText(), this.clearOnChange = !0) : this.clearOnChange = !1;
+        this.setModified(!1);
+        this.textarea.value = c;
+        this.graph.container.appendChild(this.textarea);
+        "none" != this.textarea.style.display && (this.autoSize && (this.textDiv = this.createTextDiv(), document.body.appendChild(this.textDiv), this.resize()), this.textarea.focus(), this.textarea.select())
+    }
+};
+mxCellEditor.prototype.createTextDiv = function() {
+    var a = document.createElement("div"),
+        b = a.style;
+    b.position = "absolute";
+    b.whiteSpace = "nowrap";
+    b.visibility = "hidden";
+    b.display = mxClient.IS_QUIRKS ? "inline" : "inline-block";
+    b.zoom = "1";
+    b.verticalAlign = "top";
+    b.lineHeight = this.textarea.style.lineHeight;
+    b.fontSize = this.textarea.style.fontSize;
+    b.fontFamily = this.textarea.style.fontFamily;
+    b.fontWeight = this.textarea.style.fontWeight;
+    b.textAlign = this.textarea.style.textAlign;
+    b.fontStyle = this.textarea.style.fontStyle;
+    b.textDecoration = this.textarea.style.textDecoration;
+    return a
+};
+mxCellEditor.prototype.stopEditing = function(a) {
+    null != this.editingCell && (null != this.textNode && (this.textNode.style.visibility = "visible", this.textNode = null), !a && this.isModified() && this.graph.labelChanged(this.editingCell, this.getCurrentValue(), this.trigger), null != this.textDiv && (document.body.removeChild(this.textDiv), this.textDiv = null), this.bounds = this.trigger = this.editingCell = null, this.textarea.blur(), this.textarea.parentNode.removeChild(this.textarea))
+};
+mxCellEditor.prototype.getInitialValue = function(a, b) {
+    return this.graph.getEditingValue(a.cell, b)
+};
+mxCellEditor.prototype.getCurrentValue = function() {
+    return this.textarea.value.replace(/\r/g, "")
+};
+mxCellEditor.prototype.isHideLabel = function(a) {
+    return !0
+};
+mxCellEditor.prototype.getMinimumSize = function(a) {
+    var b = this.graph.getView().scale;
+    return new mxRectangle(0, 0, null == a.text ? 30 : a.text.size * b + 20, "left" == this.textarea.style.textAlign ? 120 : 40)
+};
+mxCellEditor.prototype.getEditorBounds = function(a) {
+    var b = this.graph.getModel().isEdge(a.cell),
+        c = this.graph.getView().scale,
+        d = this.getMinimumSize(a),
+        e = d.width,
+        d = d.height,
+        f = parseInt(a.style[mxConstants.STYLE_SPACING] || 2) * c,
+        g = parseInt(a.style[mxConstants.STYLE_SPACING_TOP] || 0) * c + f,
+        h = parseInt(a.style[mxConstants.STYLE_SPACING_RIGHT] || 0) * c + f,
+        k = parseInt(a.style[mxConstants.STYLE_SPACING_BOTTOM] || 0) * c + f,
+        c = parseInt(a.style[mxConstants.STYLE_SPACING_LEFT] || 0) * c + f,
+        h = new mxRectangle(a.x, a.y, Math.max(e, a.width -
+            c - h), Math.max(d, a.height - g - k));
+    b ? (h.x = a.absoluteOffset.x, h.y = a.absoluteOffset.y, null != a.text && null != a.text.boundingBox && (0 < a.text.boundingBox.x && (h.x = a.text.boundingBox.x), 0 < a.text.boundingBox.y && (h.y = a.text.boundingBox.y))) : null != a.text && null != a.text.boundingBox && (h.x = Math.min(h.x, a.text.boundingBox.x), h.y = Math.min(h.y, a.text.boundingBox.y));
+    h.x += c;
+    h.y += g;
+    null != a.text && null != a.text.boundingBox && (b ? (h.width = Math.max(e, a.text.boundingBox.width), h.height = Math.max(d, a.text.boundingBox.height)) : (h.width =
+        Math.max(h.width, a.text.boundingBox.width), h.height = Math.max(h.height, a.text.boundingBox.height)));
+    this.graph.getModel().isVertex(a.cell) && (b = mxUtils.getValue(a.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER), b == mxConstants.ALIGN_LEFT ? h.x -= a.width : b == mxConstants.ALIGN_RIGHT && (h.x += a.width), b = mxUtils.getValue(a.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE), b == mxConstants.ALIGN_TOP ? h.y -= a.height : b == mxConstants.ALIGN_BOTTOM && (h.y += a.height));
+    return h
+};
+mxCellEditor.prototype.getEmptyLabelText = function(a) {
+    return this.emptyLabelText
+};
+mxCellEditor.prototype.getEditingCell = function() {
+    return this.editingCell
+};
+mxCellEditor.prototype.destroy = function() {
+    null != this.textarea && (mxEvent.release(this.textarea), null != this.textarea.parentNode && this.textarea.parentNode.removeChild(this.textarea), this.textarea = null)
+};
+
+function mxCellRenderer() {}
+mxCellRenderer.prototype.defaultEdgeShape = mxConnector;
+mxCellRenderer.prototype.defaultVertexShape = mxRectangleShape;
+mxCellRenderer.prototype.defaultTextShape = mxText;
+mxCellRenderer.prototype.legacyControlPosition = !0;
+mxCellRenderer.prototype.defaultShapes = {};
+mxCellRenderer.registerShape = function(a, b) {
+    mxCellRenderer.prototype.defaultShapes[a] = b
+};
+mxCellRenderer.registerShape(mxConstants.SHAPE_RECTANGLE, mxRectangleShape);
+mxCellRenderer.registerShape(mxConstants.SHAPE_ELLIPSE, mxEllipse);
+mxCellRenderer.registerShape(mxConstants.SHAPE_RHOMBUS, mxRhombus);
+mxCellRenderer.registerShape(mxConstants.SHAPE_CYLINDER, mxCylinder);
+mxCellRenderer.registerShape(mxConstants.SHAPE_CONNECTOR, mxConnector);
+mxCellRenderer.registerShape(mxConstants.SHAPE_ACTOR, mxActor);
+mxCellRenderer.registerShape(mxConstants.SHAPE_TRIANGLE, mxTriangle);
+mxCellRenderer.registerShape(mxConstants.SHAPE_HEXAGON, mxHexagon);
+mxCellRenderer.registerShape(mxConstants.SHAPE_CLOUD, mxCloud);
+mxCellRenderer.registerShape(mxConstants.SHAPE_LINE, mxLine);
+mxCellRenderer.registerShape(mxConstants.SHAPE_ARROW, mxArrow);
+mxCellRenderer.registerShape(mxConstants.SHAPE_DOUBLE_ELLIPSE, mxDoubleEllipse);
+mxCellRenderer.registerShape(mxConstants.SHAPE_SWIMLANE, mxSwimlane);
+mxCellRenderer.registerShape(mxConstants.SHAPE_IMAGE, mxImageShape);
+mxCellRenderer.registerShape(mxConstants.SHAPE_LABEL, mxLabel);
+mxCellRenderer.prototype.initialize = function(a, b) {
+    var c = a.view.graph.getModel();
+    if (null != a.view.graph.container && null == a.shape && a.cell != a.view.currentRoot && (c.isVertex(a.cell) || c.isEdge(a.cell)))
+        if (this.createShape(a), null != a.shape && (null == b || b)) this.initializeShape(a), a.view.graph.ordered || c.isEdge(a.cell) ? a.invalidOrder = !0 : a.view.graph.keepEdgesInForeground && null != this.firstEdge && (this.firstEdge.parentNode == a.shape.node.parentNode ? this.insertState(a, this.firstEdge) : this.firstEdge = null), a.shape.scale =
+            a.view.scale, this.createCellOverlays(a), this.installListeners(a)
+};
+mxCellRenderer.prototype.initializeShape = function(a) {
+    a.shape.init(a.view.getDrawPane())
+};
+mxCellRenderer.prototype.getPreviousStateInContainer = function(a, b) {
+    for (var c = null, d = a.view.graph, e = d.getModel(), f = a.cell, g = e.getParent(f); null != g && null == c;) c = this.findPreviousStateInContainer(d, g, f, b), f = g, g = e.getParent(f);
+    return c
+};
+mxCellRenderer.prototype.findPreviousStateInContainer = function(a, b, c, d) {
+    var e = null,
+        f = a.getModel();
+    for (c = null != c ? b.getIndex(c) - 1 : f.getChildCount(b) - 1; 0 <= c && null == e; c--) e = this.findPreviousStateInContainer(a, f.getChildAt(b, c), null, d);
+    if (null == e && (e = a.view.getState(b), null != e && (null == e.shape || null == e.shape.node || e.shape.node.parentNode != d))) e = null;
+    return e
+};
+mxCellRenderer.prototype.order = function(a) {
+    var b = a.shape.node.parentNode,
+        c = this.getPreviousStateInContainer(a, b),
+        d = b.firstChild;
+    null != c && (d = c.shape.node, null != c.text && (null != c.text.node && c.text.node.parentNode == b) && (d = c.text.node), d = d.nextSibling);
+    this.insertState(a, d)
+};
+mxCellRenderer.prototype.orderEdge = function(a) {
+    var b = a.view,
+        c = b.graph.getModel();
+    if (b.graph.keepEdgesInForeground) {
+        if (null == this.firstEdge || null == this.firstEdge.parentNode || this.firstEdge.parentNode != a.shape.node.parentNode) this.firstEdge = a.shape.node
+    } else if (b.graph.keepEdgesInBackground) {
+        var d = a.shape.node,
+            e = d.parentNode,
+            c = c.getParent(a.cell),
+            b = b.getState(c),
+            e = null != b && null != b.shape && null != b.shape.node ? b.shape.node.nextSibling : e.firstChild;
+        null != e && e != d && this.insertState(a, e)
+    }
+};
+mxCellRenderer.prototype.insertState = function(a, b) {
+    a.shape.node.parentNode.insertBefore(a.shape.node, b);
+    null != a.text && (null != a.text.node && a.text.node.parentNode == a.shape.node.parentNode) && a.shape.node.parentNode.insertBefore(a.text.node, a.shape.node.nextSibling)
+};
+mxCellRenderer.prototype.createShape = function(a) {
+    if (null != a.style) {
+        var b = mxStencilRegistry.getStencil(a.style[mxConstants.STYLE_SHAPE]);
+        null != b ? a.shape = new mxShape(b) : (b = this.getShapeConstructor(a), a.shape = new b);
+        a.shape.points = a.absolutePoints;
+        a.shape.bounds = new mxRectangle(a.x, a.y, a.width, a.height);
+        a.shape.dialect = a.view.graph.dialect;
+        this.configureShape(a)
+    }
+};
+mxCellRenderer.prototype.getShape = function(a) {
+    return null != a ? mxCellRenderer.prototype.defaultShapes[a] : null
+};
+mxCellRenderer.prototype.getShapeConstructor = function(a) {
+    var b = this.getShape(a.style[mxConstants.STYLE_SHAPE]);
+    null == b && (b = a.view.graph.getModel().isEdge(a.cell) ? this.defaultEdgeShape : this.defaultVertexShape);
+    return b
+};
+mxCellRenderer.prototype.configureShape = function(a) {
+    a.shape.apply(a);
+    a.shape.image = a.view.graph.getImage(a);
+    a.shape.indicatorShape = this.getShape(a.view.graph.getIndicatorShape(a));
+    a.shape.indicatorColor = a.view.graph.getIndicatorColor(a);
+    a.shape.indicatorGradientColor = a.view.graph.getIndicatorGradientColor(a);
+    a.shape.indicatorDirection = a.style[mxConstants.STYLE_INDICATOR_DIRECTION];
+    a.shape.indicatorImage = a.view.graph.getIndicatorImage(a);
+    this.postConfigureShape(a)
+};
+mxCellRenderer.prototype.postConfigureShape = function(a) {
+    null != a.shape && (this.resolveColor(a, "indicatorColor", mxConstants.STYLE_FILLCOLOR), this.resolveColor(a, "indicatorGradientColor", mxConstants.STYLE_GRADIENTCOLOR), this.resolveColor(a, "fill", mxConstants.STYLE_FILLCOLOR), this.resolveColor(a, "stroke", mxConstants.STYLE_STROKECOLOR), this.resolveColor(a, "gradient", mxConstants.STYLE_GRADIENTCOLOR))
+};
+mxCellRenderer.prototype.resolveColor = function(a, b, c) {
+    var d = a.shape[b],
+        e = a.view.graph,
+        f = null;
+    "inherit" == d ? f = e.model.getParent(a.cell) : "swimlane" == d ? (f = null != e.model.getTerminal(a.cell, !1) ? e.model.getTerminal(a.cell, !1) : a.cell, f = e.getSwimlane(f), c = e.swimlaneIndicatorColorAttribute) : "indicated" == d && (a.shape[b] = a.shape.indicatorColor);
+    null != f && (d = e.getView().getState(f), a.shape[b] = null, null != d && (a.shape[b] = null != d.shape && "indicatorColor" != b ? d.shape[b] : d.style[c]))
+};
+mxCellRenderer.prototype.getLabelValue = function(a) {
+    return a.view.graph.getLabel(a.cell)
+};
+mxCellRenderer.prototype.createLabel = function(a, b) {
+    var c = a.view.graph;
+    c.getModel().isEdge(a.cell);
+    if (0 < a.style[mxConstants.STYLE_FONTSIZE] || null == a.style[mxConstants.STYLE_FONTSIZE]) {
+        var d = c.isHtmlLabel(a.cell) || null != b && mxUtils.isNode(b);
+        a.text = new this.defaultTextShape(b, new mxRectangle, a.style[mxConstants.STYLE_ALIGN] || mxConstants.ALIGN_CENTER, c.getVerticalAlign(a), a.style[mxConstants.STYLE_FONTCOLOR], a.style[mxConstants.STYLE_FONTFAMILY], a.style[mxConstants.STYLE_FONTSIZE], a.style[mxConstants.STYLE_FONTSTYLE],
+            a.style[mxConstants.STYLE_SPACING], a.style[mxConstants.STYLE_SPACING_TOP], a.style[mxConstants.STYLE_SPACING_RIGHT], a.style[mxConstants.STYLE_SPACING_BOTTOM], a.style[mxConstants.STYLE_SPACING_LEFT], a.style[mxConstants.STYLE_HORIZONTAL], a.style[mxConstants.STYLE_LABEL_BACKGROUNDCOLOR], a.style[mxConstants.STYLE_LABEL_BORDERCOLOR], c.isWrapping(a.cell) && c.isHtmlLabel(a.cell), c.isLabelClipped(a.cell), a.style[mxConstants.STYLE_OVERFLOW], a.style[mxConstants.STYLE_LABEL_PADDING]);
+        a.text.opacity = mxUtils.getValue(a.style,
+            mxConstants.STYLE_TEXT_OPACITY, 100);
+        a.text.dialect = d ? mxConstants.DIALECT_STRICTHTML : a.view.graph.dialect;
+        a.text.state = a;
+        this.initializeLabel(a);
+        var e = !1,
+            f = function(b) {
+                var d = a;
+                if (mxClient.IS_TOUCH || e) d = mxEvent.getClientX(b), b = mxEvent.getClientY(b), b = mxUtils.convertPoint(c.container, d, b), d = c.view.getState(c.getCellAt(b.x, b.y));
+                return d
+            };
+        mxEvent.addGestureListeners(a.text.node, mxUtils.bind(this, function(b) {
+            this.isLabelEvent(a, b) && (c.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(b, a)), e = c.dialect !=
+                mxConstants.DIALECT_SVG && "IMG" == mxEvent.getSource(b).nodeName)
+        }), mxUtils.bind(this, function(b) {
+            this.isLabelEvent(a, b) && c.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(b, f(b)))
+        }), mxUtils.bind(this, function(b) {
+            this.isLabelEvent(a, b) && (c.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(b, f(b))), e = !1)
+        }));
+        mxEvent.addListener(a.text.node, "dblclick", mxUtils.bind(this, function(b) {
+            this.isLabelEvent(a, b) && (c.dblClick(b, a.cell), mxEvent.consume(b))
+        }))
+    }
+};
+mxCellRenderer.prototype.initializeLabel = function(a) {
+    var b = a.view.graph;
+    a.text.dialect != mxConstants.DIALECT_SVG && (mxClient.IS_SVG && mxClient.NO_FO ? a.text.init(b.container) : mxUtils.isVml(a.view.getDrawPane()) && (null != a.shape.label ? a.text.init(a.shape.label) : a.text.init(a.shape.node)));
+    null == a.text.node && (a.text.init(a.view.getDrawPane()), null != a.shape && null != a.text && a.shape.node.parentNode.insertBefore(a.text.node, a.shape.node.nextSibling))
+};
+mxCellRenderer.prototype.createCellOverlays = function(a) {
+    var b = a.view.graph.getCellOverlays(a.cell),
+        c = null;
+    if (null != b)
+        for (var c = new mxDictionary, d = 0; d < b.length; d++) {
+            var e = null != a.overlays ? a.overlays.remove(b[d]) : null;
+            null == e && (e = new mxImageShape(new mxRectangle, b[d].image.src), e.dialect = a.view.graph.dialect, e.preserveImageAspect = !1, e.overlay = b[d], this.initializeOverlay(a, e), this.installCellOverlayListeners(a, b[d], e), null != b[d].cursor && (e.node.style.cursor = b[d].cursor));
+            c.put(b[d], e)
+        }
+    null != a.overlays &&
+        a.overlays.visit(function(a, b) {
+            b.destroy()
+        });
+    a.overlays = c
+};
+mxCellRenderer.prototype.initializeOverlay = function(a, b) {
+    b.init(a.view.getOverlayPane())
+};
+mxCellRenderer.prototype.installCellOverlayListeners = function(a, b, c) {
+    var d = a.view.graph;
+    mxEvent.addListener(c.node, "click", function(c) {
+        d.isEditing() && d.stopEditing(!d.isInvokesStopCellEditing());
+        b.fireEvent(new mxEventObject(mxEvent.CLICK, "event", c, "cell", a.cell))
+    });
+    mxEvent.addGestureListeners(c.node, function(a) {
+        mxEvent.consume(a)
+    }, function(b) {
+        d.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(b, a))
+    });
+    mxClient.IS_TOUCH && mxEvent.addListener(c.node, "touchend", function(c) {
+        b.fireEvent(new mxEventObject(mxEvent.CLICK,
+            "event", c, "cell", a.cell))
+    })
+};
+mxCellRenderer.prototype.createControl = function(a) {
+    var b = a.view.graph,
+        c = b.getFoldingImage(a);
+    if (b.foldingEnabled && null != c) {
+        if (null == a.control) {
+            var d = new mxRectangle(0, 0, c.width, c.height);
+            a.control = new mxImageShape(d, c.src);
+            a.control.preserveImageAspect = !1;
+            a.control.dialect = b.dialect;
+            this.initControl(a, a.control, !0, function(c) {
+                if (b.isEnabled()) {
+                    var d = !b.isCellCollapsed(a.cell);
+                    b.foldCells(d, !1, [a.cell]);
+                    mxEvent.consume(c)
+                }
+            })
+        }
+    } else null != a.control && (a.control.destroy(), a.control = null)
+};
+mxCellRenderer.prototype.initControl = function(a, b, c, d) {
+    var e = a.view.graph;
+    e.isHtmlLabel(a.cell) && mxClient.NO_FO && e.dialect == mxConstants.DIALECT_SVG ? (b.dialect = mxConstants.DIALECT_PREFERHTML, b.init(e.container), b.node.style.zIndex = 1) : b.init(a.view.getOverlayPane());
+    b = b.innerNode || b.node;
+    d && (e.isEnabled() && (b.style.cursor = "pointer"), mxEvent.addListener(b, "click", d));
+    c && mxEvent.addGestureListeners(b, function(b) {
+        e.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(b, a));
+        mxEvent.consume(b)
+    }, function(b) {
+        e.fireMouseEvent(mxEvent.MOUSE_MOVE,
+            new mxMouseEvent(b, a))
+    });
+    return b
+};
+mxCellRenderer.prototype.isShapeEvent = function(a, b) {
+    return !0
+};
+mxCellRenderer.prototype.isLabelEvent = function(a, b) {
+    return !0
+};
+mxCellRenderer.prototype.installListeners = function(a) {
+    var b = a.view.graph,
+        c = function(c) {
+            var d = a;
+            if (b.dialect != mxConstants.DIALECT_SVG && "IMG" == mxEvent.getSource(c).nodeName || mxClient.IS_TOUCH) d = mxEvent.getClientX(c), c = mxEvent.getClientY(c), c = mxUtils.convertPoint(b.container, d, c), d = b.view.getState(b.getCellAt(c.x, c.y));
+            return d
+        },
+        d = !1;
+    mxEvent.addListener(a.shape.node, "gesturestart", mxUtils.bind(this, function(a) {
+        b.lastTouchTime = 0;
+        d = !0;
+        mxEvent.consume(a)
+    }));
+    mxEvent.addGestureListeners(a.shape.node, mxUtils.bind(this,
+        function(c) {
+            this.isShapeEvent(a, c) && !d ? b.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(c, null != a.shape && mxEvent.getSource(c) == a.shape.content ? null : a)) : d && mxEvent.consume(c)
+        }), mxUtils.bind(this, function(e) {
+        this.isShapeEvent(a, e) && !d ? b.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(e, null != a.shape && mxEvent.getSource(e) == a.shape.content ? null : c(e))) : d && mxEvent.consume(e)
+    }), mxUtils.bind(this, function(e) {
+        this.isShapeEvent(a, e) && !d ? b.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(e, null != a.shape &&
+            mxEvent.getSource(e) == a.shape.content ? null : c(e))) : d && mxEvent.consume(e)
+    }));
+    var e = mxClient.IS_TOUCH ? "gestureend" : "dblclick";
+    mxEvent.addListener(a.shape.node, e, mxUtils.bind(this, function(c) {
+        d = !1;
+        "gestureend" == e ? (b.lastTouchTime = 0, b.gestureEnabled && (b.handleGesture(a, c), mxEvent.consume(c))) : this.isShapeEvent(a, c) && (b.dblClick(c, null != a.shape && mxEvent.getSource(c) == a.shape.content ? null : a.cell), mxEvent.consume(c))
+    }))
+};
+mxCellRenderer.prototype.redrawLabel = function(a, b) {
+    var c = this.getLabelValue(a);
+    if (null == a.text && null != c && (mxUtils.isNode(c) || 0 < c.length)) this.createLabel(a, c);
+    else if (null != a.text && (null == c || 0 == c.length)) a.text.destroy(), a.text = null;
+    if (null != a.text) {
+        var d = a.view.graph,
+            e = d.isWrapping(a.cell),
+            d = d.isLabelClipped(a.cell),
+            f = this.getLabelBounds(a);
+        if (b || a.text.value != c || a.text.isWrapping != e || a.text.isClipping != d || a.text.scale != a.view.scale || !a.text.bounds.equals(f)) a.text.value = c, a.text.bounds = f, a.text.scale =
+            this.getTextScale(a), a.text.isWrapping = e, a.text.isClipping = d, a.text.redraw()
+    }
+};
+mxCellRenderer.prototype.getTextScale = function(a) {
+    return a.view.scale
+};
+mxCellRenderer.prototype.getLabelBounds = function(a) {
+    var b = a.view.graph,
+        c = a.view.scale,
+        d = b.getModel().isEdge(a.cell),
+        e = new mxRectangle(a.absoluteOffset.x, a.absoluteOffset.y);
+    a.text.updateMargin();
+    d ? (d = a.text.getSpacing(), e.x += d.x * c, e.y += d.y * c, b = b.getCellGeometry(a.cell), null != b && (e.width = Math.max(0, a.text.margin.x * b.width * c - a.text.spacingLeft * c - a.text.spacingRight * c), e.height = Math.max(0, a.text.margin.y * b.height * c - a.text.spacingTop * c - a.text.spacingBottom * c))) : (a.text.isPaintBoundsInverted() && (d = e.x,
+        e.x = e.y, e.y = d), e.x += a.x, e.y += a.y, e.width = Math.max(1, a.width), e.height = Math.max(1, a.height), b.isSwimlane(a.cell) && (b = b.getStartSize(a.cell), 0 < b.width ? (d = Math.min(e.width, b.width * c), a.shape.flipH && (e.x += e.width - d), e.width = d) : 0 < b.height && (d = Math.min(e.height, b.height * c), a.shape.flipV && (e.y += e.height - d), e.height = d)), this.rotateLabelBounds(a, e));
+    return e
+};
+mxCellRenderer.prototype.rotateLabelBounds = function(a, b) {
+    if (a.text.isPaintBoundsInverted()) {
+        var c = (a.width - a.height) / 2;
+        b.x += c;
+        b.y -= c;
+        c = b.width;
+        b.width = b.height;
+        b.height = c
+    }
+    b.x -= a.text.margin.x * b.width;
+    b.y -= a.text.margin.y * b.height;
+    if ("fill" != a.style[mxConstants.STYLE_OVERFLOW]) {
+        var c = a.view.scale,
+            d = a.text.getSpacing();
+        b.x += d.x * c;
+        b.y += d.y * c;
+        b.width = Math.max(0, b.width - a.text.spacingLeft * c - a.text.spacingRight * c);
+        b.height = Math.max(0, b.height - a.text.spacingTop * c - a.text.spacingBottom * c)
+    }
+    var e = a.text.getTextRotation();
+    if (0 != e && (null != a && a.view.graph.model.isVertex(a.cell)) && (c = a.getCenterX(), d = a.getCenterY(), b.x != c || b.y != d)) e *= Math.PI / 180, pt = mxUtils.getRotatedPoint(new mxPoint(b.x, b.y), Math.cos(e), Math.sin(e), new mxPoint(c, d)), b.x = pt.x, b.y = pt.y
+};
+mxCellRenderer.prototype.redrawCellOverlays = function(a, b) {
+    this.createCellOverlays(a);
+    if (null != a.overlays) {
+        var c = mxUtils.mod(mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION, 0), 90),
+            d = mxUtils.toRadians(c),
+            e = Math.cos(d),
+            f = Math.sin(d);
+        a.overlays.visit(function(d, h) {
+            var k = h.overlay.getBounds(a);
+            if (!a.view.graph.getModel().isEdge(a.cell) && null != a.shape && 0 != c) {
+                var l = k.getCenterX(),
+                    m = k.getCenterY(),
+                    m = mxUtils.getRotatedPoint(new mxPoint(l, m), e, f, new mxPoint(a.getCenterX(), a.getCenterY())),
+                    l = m.x,
+                    m = m.y;
+                k.x =
+                    Math.round(l - k.width / 2);
+                k.y = Math.round(m - k.height / 2)
+            }
+            if (b || null == h.bounds || h.scale != a.view.scale || !h.bounds.equals(k)) h.bounds = k, h.scale = a.view.scale, h.redraw()
+        })
+    }
+};
+mxCellRenderer.prototype.redrawControl = function(a, b) {
+    if (null != a.control) {
+        var c = this.getControlBounds(a),
+            d = this.legacyControlPosition ? mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION, 0) : a.shape.getTextRotation(),
+            e = a.view.scale;
+        if (b || a.control.scale != e || !a.control.bounds.equals(c) || a.control.rotation != d) a.control.rotation = d, a.control.bounds = c, a.control.scale = e, a.control.redraw()
+    }
+};
+mxCellRenderer.prototype.getControlBounds = function(a) {
+    if (null != a.control) {
+        var b = a.control.scale,
+            c = a.control.bounds.width / b,
+            b = a.control.bounds.height / b,
+            d = a.view.scale,
+            e = a.getCenterX(),
+            f = a.getCenterY();
+        if (!a.view.graph.getModel().isEdge(a.cell) && (e = a.x + c * d, f = a.y + b * d, null != a.shape)) {
+            var g = a.shape.getShapeRotation();
+            if (this.legacyControlPosition) g = mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION, 0);
+            else if (a.shape.isPaintBoundsInverted()) var h = (a.width - a.height) / 2,
+                e = e + h,
+                f = f - h;
+            0 != g && (h = mxUtils.toRadians(g),
+                g = Math.cos(h), h = Math.sin(h), f = mxUtils.getRotatedPoint(new mxPoint(e, f), g, h, new mxPoint(a.getCenterX(), a.getCenterY())), e = f.x, f = f.y)
+        }
+        return a.view.graph.getModel().isEdge(a.cell), new mxRectangle(Math.round(e - c / 2 * d), Math.round(f - b / 2 * d), Math.round(c * d), Math.round(b * d))
+    }
+    return null
+};
+mxCellRenderer.prototype.redraw = function(a, b, c) {
+    if (null != a.shape) {
+        var d = !1;
+        a.view.graph.getModel().isEdge(a.cell);
+        reconfigure = null != b ? b : !1;
+        this.createControl(a);
+        if (a.orderChanged || a.invalidOrder) a.view.graph.ordered ? this.order(a) : this.orderEdge(a);
+        if (a.orderChanged || !mxUtils.equalEntries(a.shape.style, a.style)) this.configureShape(a), b = !0;
+        delete a.invalidOrder;
+        delete a.orderChanged;
+        if (b || null == a.shape.bounds || a.shape.scale != a.view.scale || !a.shape.bounds.equals(a) || !mxUtils.equalPoints(a.shape.points,
+                a.absolutePoints)) d = !0, a.shape.points = null != a.absolutePoints ? a.absolutePoints.slice() : null, a.shape.bounds = new mxRectangle(a.x, a.y, a.width, a.height), a.shape.scale = a.view.scale, null == c || c ? a.shape.redraw() : a.shape.updateBoundingBox();
+        if (null == c || c) this.redrawLabel(a, d), this.redrawCellOverlays(a, d), this.redrawControl(a, d)
+    }
+};
+mxCellRenderer.prototype.destroy = function(a) {
+    null != a.shape && (null != a.text && (a.text.destroy(), a.text = null), null != a.overlays && (a.overlays.visit(function(a, c) {
+        c.destroy()
+    }), a.overlays = null), null != a.control && (a.control.destroy(), a.control = null), a.shape.destroy(), a.shape = null)
+};
+var mxEdgeStyle = {
+        EntityRelation: function(a, b, c, d, e) {
+            var f = a.view,
+                g = f.graph;
+            d = mxUtils.getValue(a.style, mxConstants.STYLE_SEGMENT, mxConstants.ENTITY_SEGMENT) * f.scale;
+            var h = a.absolutePoints,
+                k = h[0],
+                l = h[h.length - 1],
+                h = !1;
+            if (null != k) b = new mxCellState, b.x = k.x, b.y = k.y;
+            else if (null != b) {
+                var m = mxUtils.getPortConstraints(b, a, !0, mxConstants.DIRECTION_MASK_NONE);
+                m != mxConstants.DIRECTION_MASK_NONE ? h = m == mxConstants.DIRECTION_MASK_WEST : (k = g.getCellGeometry(b.cell), k.relative ? h = 0.5 >= k.x : null != c && (h = c.x + c.width < b.x))
+            } else return;
+            k = !0;
+            null != l ? (c = new mxCellState, c.x = l.x, c.y = l.y) : null != c && (m = mxUtils.getPortConstraints(c, a, !1, mxConstants.DIRECTION_MASK_NONE), m != mxConstants.DIRECTION_MASK_NONE ? k = m == mxConstants.DIRECTION_MASK_WEST : (a = g.getCellGeometry(c.cell), a.relative ? k = 0.5 >= a.x : null != b && (k = b.x + b.width < c.x)));
+            null != b && null != c && (a = h ? b.x : b.x + b.width, b = f.getRoutingCenterY(b), g = k ? c.x : c.x + c.width, c = f.getRoutingCenterY(c), f = new mxPoint(a + (h ? -d : d), b), l = new mxPoint(g + (k ? -d : d), c), h == k ? (d = h ? Math.min(a, g) - d : Math.max(a, g) + d, e.push(new mxPoint(d,
+                b)), e.push(new mxPoint(d, c))) : (f.x < l.x == h ? (d = b + (c - b) / 2, e.push(f), e.push(new mxPoint(f.x, d)), e.push(new mxPoint(l.x, d))) : e.push(f), e.push(l)))
+        },
+        Loop: function(a, b, c, d, e) {
+            if (null != b) {
+                c = a.view;
+                var f = c.graph;
+                d = null != d && 0 < d.length ? d[0] : null;
+                null != d && (d = c.transformControlPoint(a, d), mxUtils.contains(b, d.x, d.y) && (d = null));
+                var g = 0,
+                    h = 0,
+                    k = 0,
+                    l = 0,
+                    f = mxUtils.getValue(a.style, mxConstants.STYLE_SEGMENT, f.gridSize) * c.scale;
+                a = mxUtils.getValue(a.style, mxConstants.STYLE_DIRECTION, mxConstants.DIRECTION_WEST);
+                a == mxConstants.DIRECTION_NORTH ||
+                    a == mxConstants.DIRECTION_SOUTH ? (g = c.getRoutingCenterX(b), h = f) : (k = c.getRoutingCenterY(b), l = f);
+                null == d || d.x < b.x || d.x > b.x + b.width ? null != d ? (g = d.x, l = Math.max(Math.abs(k - d.y), l)) : a == mxConstants.DIRECTION_NORTH ? k = b.y - 2 * h : a == mxConstants.DIRECTION_SOUTH ? k = b.y + b.height + 2 * h : g = a == mxConstants.DIRECTION_EAST ? b.x - 2 * l : b.x + b.width + 2 * l : null != d && (g = c.getRoutingCenterX(b), h = Math.max(Math.abs(g - d.x), l), k = d.y, l = 0);
+                e.push(new mxPoint(g - h, k - l));
+                e.push(new mxPoint(g + h, k + l))
+            }
+        },
+        ElbowConnector: function(a, b, c, d, e) {
+            var f = null !=
+                d && 0 < d.length ? d[0] : null,
+                g = !1,
+                h = !1;
+            if (null != b && null != c)
+                if (null != f) var k = Math.min(b.x, c.x),
+                    l = Math.max(b.x + b.width, c.x + c.width),
+                    h = Math.min(b.y, c.y),
+                    m = Math.max(b.y + b.height, c.y + c.height),
+                    f = a.view.transformControlPoint(a, f),
+                    g = f.y < h || f.y > m,
+                    h = f.x < k || f.x > l;
+                else k = Math.max(b.x, c.x), l = Math.min(b.x + b.width, c.x + c.width), g = k == l, g || (h = Math.max(b.y, c.y), m = Math.min(b.y + b.height, c.y + c.height), h = h == m);
+                !h && (g || a.style[mxConstants.STYLE_ELBOW] == mxConstants.ELBOW_VERTICAL) ? mxEdgeStyle.TopToBottom(a, b, c, d, e) : mxEdgeStyle.SideToSide(a,
+                b, c, d, e)
+        },
+        SideToSide: function(a, b, c, d, e) {
+            var f = a.view;
+            d = null != d && 0 < d.length ? d[0] : null;
+            var g = a.absolutePoints,
+                h = g[0],
+                g = g[g.length - 1];
+            null != d && (d = f.transformControlPoint(a, d));
+            null != h && (b = new mxCellState, b.x = h.x, b.y = h.y);
+            null != g && (c = new mxCellState, c.x = g.x, c.y = g.y);
+            null != b && null != c && (a = Math.max(b.x, c.x), h = Math.min(b.x + b.width, c.x + c.width), a = null != d ? d.x : h + (a - h) / 2, h = f.getRoutingCenterY(b), f = f.getRoutingCenterY(c), null != d && (d.y >= b.y && d.y <= b.y + b.height && (h = d.y), d.y >= c.y && d.y <= c.y + c.height && (f = d.y)), !mxUtils.contains(c,
+                a, h) && !mxUtils.contains(b, a, h) && e.push(new mxPoint(a, h)), !mxUtils.contains(c, a, f) && !mxUtils.contains(b, a, f) && e.push(new mxPoint(a, f)), 1 == e.length && (null != d ? !mxUtils.contains(c, a, d.y) && !mxUtils.contains(b, a, d.y) && e.push(new mxPoint(a, d.y)) : (f = Math.max(b.y, c.y), b = Math.min(b.y + b.height, c.y + c.height), e.push(new mxPoint(a, f + (b - f) / 2)))))
+        },
+        TopToBottom: function(a, b, c, d, e) {
+            var f = a.view;
+            d = null != d && 0 < d.length ? d[0] : null;
+            var g = a.absolutePoints,
+                h = g[0],
+                g = g[g.length - 1];
+            null != d && (d = f.transformControlPoint(a, d));
+            null !=
+                h && (b = new mxCellState, b.x = h.x, b.y = h.y);
+            null != g && (c = new mxCellState, c.x = g.x, c.y = g.y);
+            null != b && null != c && (h = Math.max(b.y, c.y), g = Math.min(b.y + b.height, c.y + c.height), a = f.getRoutingCenterX(b), null != d && (d.x >= b.x && d.x <= b.x + b.width) && (a = d.x), h = null != d ? d.y : g + (h - g) / 2, !mxUtils.contains(c, a, h) && !mxUtils.contains(b, a, h) && e.push(new mxPoint(a, h)), a = null != d && d.x >= c.x && d.x <= c.x + c.width ? d.x : f.getRoutingCenterX(c), !mxUtils.contains(c, a, h) && !mxUtils.contains(b, a, h) && e.push(new mxPoint(a, h)), 1 == e.length && (null != d && 1 ==
+                e.length ? !mxUtils.contains(c, d.x, h) && !mxUtils.contains(b, d.x, h) && e.push(new mxPoint(d.x, h)) : (f = Math.max(b.x, c.x), b = Math.min(b.x + b.width, c.x + c.width), e.push(new mxPoint(f + (b - f) / 2, h)))))
+        },
+        SegmentConnector: function(a, b, c, d, e) {
+            var f = a.absolutePoints,
+                g = !0,
+                h = null,
+                k = f[0];
+            null == k && null != b ? k = new mxPoint(a.view.getRoutingCenterX(b), a.view.getRoutingCenterY(b)) : null != k && (k = k.clone());
+            var l = f.length - 1;
+            if (null != d && 0 < d.length) {
+                for (var h = a.view.transformControlPoint(a, d[0]), m = b, n = f[0], p = !1, q = !1, p = h, s = d.length, r =
+                        0; 2 > r; r++) {
+                    var t = null != n && n.x == p.x,
+                        v = null != n && n.y == p.y,
+                        w = null != m && p.y >= m.y && p.y <= m.y + m.height,
+                        m = null != m && p.x >= m.x && p.x <= m.x + m.width,
+                        p = v || null == n && w,
+                        q = t || null == n && m;
+                    if (null != n && !v && !t && (w || m)) {
+                        g = w ? !1 : !0;
+                        break
+                    }
+                    if (q || p) {
+                        g = p;
+                        1 == r && (g = 0 == d.length % 2 ? p : q);
+                        break
+                    }
+                    m = c;
+                    n = f[l];
+                    p = a.view.transformControlPoint(a, d[s - 1])
+                }
+                g && (null != f[0] && f[0].y != h.y || null == f[0] && null != b && (h.y < b.y || h.y > b.y + b.height)) ? e.push(new mxPoint(k.x, h.y)) : !g && (null != f[0] && f[0].x != h.x || null == f[0] && null != b && (h.x < b.x || h.x > b.x + b.width)) && e.push(new mxPoint(h.x,
+                    k.y));
+                g ? k.y = h.y : k.x = h.x;
+                for (r = 0; r < d.length; r++) g = !g, h = a.view.transformControlPoint(a, d[r]), g ? k.y = h.y : k.x = h.x, e.push(k.clone())
+            } else h = k, g = !0;
+            k = f[l];
+            null == k && null != c && (k = new mxPoint(a.view.getRoutingCenterX(c), a.view.getRoutingCenterY(c)));
+            g && (null != f[l] && f[l].y != h.y || null == f[l] && null != c && (h.y < c.y || h.y > c.y + c.height)) ? e.push(new mxPoint(k.x, h.y)) : !g && (null != f[l] && f[l].x != h.x || null == f[l] && null != c && (h.x < c.x || h.x > c.x + c.width)) && e.push(new mxPoint(h.x, k.y));
+            if (null == f[0] && null != b)
+                for (; 1 < e.length && mxUtils.contains(b,
+                        e[1].x, e[1].y);) e = e.splice(1, 1);
+            if (null == f[l] && null != c)
+                for (; 1 < e.length && mxUtils.contains(c, e[e.length - 1].x, e[e.length - 1].y);) e = e.splice(e.length - 1, 1)
+        },
+        orthBuffer: 10,
+        dirVectors: [
+            [-1, 0],
+            [0, -1],
+            [1, 0],
+            [0, 1],
+            [-1, 0],
+            [0, -1],
+            [1, 0]
+        ],
+        wayPoints1: [
+            [0, 0],
+            [0, 0],
+            [0, 0],
+            [0, 0],
+            [0, 0],
+            [0, 0],
+            [0, 0],
+            [0, 0],
+            [0, 0],
+            [0, 0],
+            [0, 0],
+            [0, 0]
+        ],
+        routePatterns: [
+            [
+                [513, 2308, 2081, 2562],
+                [513, 1090, 514, 2184, 2114, 2561],
+                [513, 1090, 514, 2564, 2184, 2562],
+                [513, 2308, 2561, 1090, 514, 2568, 2308]
+            ],
+            [
+                [514, 1057, 513, 2308, 2081, 2562],
+                [514, 2184, 2114, 2561],
+                [514, 2184,
+                    2562, 1057, 513, 2564, 2184
+                ],
+                [514, 1057, 513, 2568, 2308, 2561]
+            ],
+            [
+                [1090, 514, 1057, 513, 2308, 2081, 2562],
+                [2114, 2561],
+                [1090, 2562, 1057, 513, 2564, 2184],
+                [1090, 514, 1057, 513, 2308, 2561, 2568]
+            ],
+            [
+                [2081, 2562],
+                [1057, 513, 1090, 514, 2184, 2114, 2561],
+                [1057, 513, 1090, 514, 2184, 2562, 2564],
+                [1057, 2561, 1090, 514, 2568, 2308]
+            ]
+        ],
+        inlineRoutePatterns: [
+            [null, [2114, 2568], null, null],
+            [null, [514, 2081, 2114, 2568], null, null],
+            [null, [2114, 2561], null, null],
+            [
+                [2081, 2562],
+                [1057, 2114, 2568],
+                [2184, 2562], null
+            ]
+        ],
+        vertexSeperations: [],
+        limits: [
+            [0, 0, 0, 0, 0, 0, 0, 0, 0],
+            [0, 0, 0, 0, 0, 0, 0, 0, 0]
+        ],
+        LEFT_MASK: 32,
+        TOP_MASK: 64,
+        RIGHT_MASK: 128,
+        BOTTOM_MASK: 256,
+        LEFT: 1,
+        TOP: 2,
+        RIGHT: 4,
+        BOTTOM: 8,
+        SIDE_MASK: 480,
+        CENTER_MASK: 512,
+        SOURCE_MASK: 1024,
+        TARGET_MASK: 2048,
+        VERTEX_MASK: 3072,
+        OrthConnector: function(a, b, c, d, e) {
+            var f = a.view.graph,
+                g = null == b ? !1 : f.getModel().isEdge(b.cell),
+                f = null == c ? !1 : f.getModel().isEdge(c.cell);
+            if (null != d && 0 < d.length || g || f) mxEdgeStyle.SegmentConnector(a, b, c, d, e);
+            else {
+                d = a.absolutePoints;
+                var h = d[0],
+                    k = d[d.length - 1];
+                d = null != b ? b.x : h.x;
+                var g = null != b ? b.y : h.y,
+                    l = null != b ? b.width :
+                    1,
+                    m = null != b ? b.height : 1,
+                    n = null != c ? c.x : k.x,
+                    p = null != c ? c.y : k.y,
+                    q = null != c ? c.width : 1,
+                    s = null != c ? c.height : 1,
+                    f = a.view.scale * mxEdgeStyle.orthBuffer,
+                    r = [mxConstants.DIRECTION_MASK_ALL, mxConstants.DIRECTION_MASK_ALL];
+                null != b && (r[0] = mxUtils.getPortConstraints(b, a, !0, mxConstants.DIRECTION_MASK_ALL));
+                null != c && (r[1] = mxUtils.getPortConstraints(c, a, !1, mxConstants.DIRECTION_MASK_ALL));
+                a = [0, 0];
+                d = [
+                    [d, g, l, m],
+                    [n, p, q, s]
+                ];
+                for (l = 0; 2 > l; l++) mxEdgeStyle.limits[l][1] = d[l][0] - f, mxEdgeStyle.limits[l][2] = d[l][1] - f, mxEdgeStyle.limits[l][4] =
+                    d[l][0] + d[l][2] + f, mxEdgeStyle.limits[l][8] = d[l][1] + d[l][3] + f;
+                l = d[0][0] + d[0][2] / 2 - (d[1][0] + d[1][2] / 2);
+                m = d[0][1] + d[0][3] / 2 - (d[1][1] + d[1][3] / 2);
+                g = 0;
+                0 > l ? g = 0 > m ? 2 : 1 : 0 >= m && (g = 3, 0 == l && (g = 2));
+                m = null;
+                null != b && (m = h);
+                b = [
+                    [0.5, 0.5],
+                    [0.5, 0.5]
+                ];
+                for (l = 0; 2 > l; l++) null != m && (b[l][0] = (m.x - d[l][0]) / d[l][2], 0.01 > b[l][0] ? a[l] = mxConstants.DIRECTION_MASK_WEST : 0.99 < b[l][0] && (a[l] = mxConstants.DIRECTION_MASK_EAST), b[l][1] = (m.y - d[l][1]) / d[l][3], 0.01 > b[l][1] ? a[l] = mxConstants.DIRECTION_MASK_NORTH : 0.99 < b[l][1] && (a[l] = mxConstants.DIRECTION_MASK_SOUTH)),
+                    m = null, null != c && (m = k);
+                l = d[0][1] - (d[1][1] + d[1][3]);
+                m = d[0][0] - (d[1][0] + d[1][2]);
+                n = d[1][1] - (d[0][1] + d[0][3]);
+                p = d[1][0] - (d[0][0] + d[0][2]);
+                mxEdgeStyle.vertexSeperations[1] = Math.max(m - 2 * f, 0);
+                mxEdgeStyle.vertexSeperations[2] = Math.max(l - 2 * f, 0);
+                mxEdgeStyle.vertexSeperations[4] = Math.max(n - 2 * f, 0);
+                mxEdgeStyle.vertexSeperations[3] = Math.max(p - 2 * f, 0);
+                c = [];
+                h = [];
+                k = [];
+                h[0] = m >= p ? mxConstants.DIRECTION_MASK_WEST : mxConstants.DIRECTION_MASK_EAST;
+                k[0] = l >= n ? mxConstants.DIRECTION_MASK_NORTH : mxConstants.DIRECTION_MASK_SOUTH;
+                h[1] = mxUtils.reversePortConstraints(h[0]);
+                k[1] = mxUtils.reversePortConstraints(k[0]);
+                m = m >= p ? m : p;
+                n = l >= n ? l : n;
+                p = [
+                    [0, 0],
+                    [0, 0]
+                ];
+                q = !1;
+                for (l = 0; 2 > l; l++) 0 == a[l] && (0 == (h[l] & r[l]) && (h[l] = mxUtils.reversePortConstraints(h[l])), 0 == (k[l] & r[l]) && (k[l] = mxUtils.reversePortConstraints(k[l])), p[l][0] = k[l], p[l][1] = h[l]);
+                n > 2 * f && m > 2 * f && (0 < (h[0] & r[0]) && 0 < (k[1] & r[1]) ? (p[0][0] = h[0], p[0][1] = k[0], p[1][0] = k[1], p[1][1] = h[1], q = !0) : 0 < (k[0] & r[0]) && 0 < (h[1] & r[1]) && (p[0][0] = k[0], p[0][1] = h[0], p[1][0] = h[1], p[1][1] = k[1], q = !0));
+                n > 2 * f && !q &&
+                    (p[0][0] = k[0], p[0][1] = h[0], p[1][0] = k[1], p[1][1] = h[1], q = !0);
+                m > 2 * f && !q && (p[0][0] = h[0], p[0][1] = k[0], p[1][0] = h[1], p[1][1] = k[1]);
+                for (l = 0; 2 > l; l++)
+                    if (0 == a[l] && (0 == (p[l][0] & r[l]) && (p[l][0] = p[l][1]), c[l] = p[l][0] & r[l], c[l] |= (p[l][1] & r[l]) << 8, c[l] |= (p[1 - l][l] & r[l]) << 16, c[l] |= (p[1 - l][1 - l] & r[l]) << 24, 0 == (c[l] & 15) && (c[l] <<= 8), 0 == (c[l] & 3840) && (c[l] = c[l] & 15 | c[l] >> 8), 0 == (c[l] & 983040) && (c[l] = c[l] & 65535 | (c[l] & 251658240) >> 8), a[l] = c[l] & 15, r[l] == mxConstants.DIRECTION_MASK_WEST || r[l] == mxConstants.DIRECTION_MASK_NORTH || r[l] ==
+                            mxConstants.DIRECTION_MASK_EAST || r[l] == mxConstants.DIRECTION_MASK_SOUTH)) a[l] = r[l];
+                l = a[0] == mxConstants.DIRECTION_MASK_EAST ? 3 : a[0];
+                r = a[1] == mxConstants.DIRECTION_MASK_EAST ? 3 : a[1];
+                l -= g;
+                r -= g;
+                1 > l && (l += 4);
+                1 > r && (r += 4);
+                r = mxEdgeStyle.routePatterns[l - 1][r - 1];
+                mxEdgeStyle.wayPoints1[0][0] = d[0][0];
+                mxEdgeStyle.wayPoints1[0][1] = d[0][1];
+                switch (a[0]) {
+                    case mxConstants.DIRECTION_MASK_WEST:
+                        mxEdgeStyle.wayPoints1[0][0] -= f;
+                        mxEdgeStyle.wayPoints1[0][1] += b[0][1] * d[0][3];
+                        break;
+                    case mxConstants.DIRECTION_MASK_SOUTH:
+                        mxEdgeStyle.wayPoints1[0][0] +=
+                            b[0][0] * d[0][2];
+                        mxEdgeStyle.wayPoints1[0][1] += d[0][3] + f;
+                        break;
+                    case mxConstants.DIRECTION_MASK_EAST:
+                        mxEdgeStyle.wayPoints1[0][0] += d[0][2] + f;
+                        mxEdgeStyle.wayPoints1[0][1] += b[0][1] * d[0][3];
+                        break;
+                    case mxConstants.DIRECTION_MASK_NORTH:
+                        mxEdgeStyle.wayPoints1[0][0] += b[0][0] * d[0][2], mxEdgeStyle.wayPoints1[0][1] -= f
+                }
+                f = 0;
+                h = c = 0 < (a[0] & (mxConstants.DIRECTION_MASK_EAST | mxConstants.DIRECTION_MASK_WEST)) ? 0 : 1;
+                for (l = k = 0; l < r.length; l++) {
+                    k = r[l] & 15;
+                    s = k == mxConstants.DIRECTION_MASK_EAST ? 3 : k;
+                    s += g;
+                    4 < s && (s -= 4);
+                    m = mxEdgeStyle.dirVectors[s -
+                        1];
+                    k = 0 < s % 2 ? 0 : 1;
+                    k != c && (f++, mxEdgeStyle.wayPoints1[f][0] = mxEdgeStyle.wayPoints1[f - 1][0], mxEdgeStyle.wayPoints1[f][1] = mxEdgeStyle.wayPoints1[f - 1][1]);
+                    var t = 0 < (r[l] & mxEdgeStyle.TARGET_MASK),
+                        q = 0 < (r[l] & mxEdgeStyle.SOURCE_MASK),
+                        n = (r[l] & mxEdgeStyle.SIDE_MASK) >> 5,
+                        n = n << g;
+                    15 < n && (n >>= 4);
+                    p = 0 < (r[l] & mxEdgeStyle.CENTER_MASK);
+                    (q || t) && 9 > n ? (s = 0, q = q ? 0 : 1, s = p && 0 == k ? d[q][0] + b[q][0] * d[q][2] : p ? d[q][1] + b[q][1] * d[q][3] : mxEdgeStyle.limits[q][n], 0 == k ? (n = (s - mxEdgeStyle.wayPoints1[f][0]) * m[0], 0 < n && (mxEdgeStyle.wayPoints1[f][0] +=
+                        m[0] * n)) : (n = (s - mxEdgeStyle.wayPoints1[f][1]) * m[1], 0 < n && (mxEdgeStyle.wayPoints1[f][1] += m[1] * n))) : p && (mxEdgeStyle.wayPoints1[f][0] += m[0] * Math.abs(mxEdgeStyle.vertexSeperations[s] / 2), mxEdgeStyle.wayPoints1[f][1] += m[1] * Math.abs(mxEdgeStyle.vertexSeperations[s] / 2));
+                    0 < f && mxEdgeStyle.wayPoints1[f][k] == mxEdgeStyle.wayPoints1[f - 1][k] ? f-- : c = k
+                }
+                for (l = 0; l <= f && !(l == f && ((0 < (a[1] & (mxConstants.DIRECTION_MASK_EAST | mxConstants.DIRECTION_MASK_WEST)) ? 0 : 1) == h ? 0 : 1) != (f + 1) % 2); l++) e.push(new mxPoint(mxEdgeStyle.wayPoints1[l][0],
+                    mxEdgeStyle.wayPoints1[l][1]))
+            }
+        },
+        getRoutePattern: function(a, b, c, d) {
+            var e = a[0] == mxConstants.DIRECTION_MASK_EAST ? 3 : a[0];
+            a = a[1] == mxConstants.DIRECTION_MASK_EAST ? 3 : a[1];
+            e -= b;
+            a -= b;
+            1 > e && (e += 4);
+            1 > a && (a += 4);
+            b = routePatterns[e - 1][a - 1];
+            if (0 == c || 0 == d) null != inlineRoutePatterns[e - 1][a - 1] && (b = inlineRoutePatterns[e - 1][a - 1]);
+            return b
+        }
+    },
+    mxStyleRegistry = {
+        values: [],
+        putValue: function(a, b) {
+            mxStyleRegistry.values[a] = b
+        },
+        getValue: function(a) {
+            return mxStyleRegistry.values[a]
+        },
+        getName: function(a) {
+            for (var b in mxStyleRegistry.values)
+                if (mxStyleRegistry.values[b] ==
+                    a) return b;
+            return null
+        }
+    };
+mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ELBOW, mxEdgeStyle.ElbowConnector);
+mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ENTITY_RELATION, mxEdgeStyle.EntityRelation);
+mxStyleRegistry.putValue(mxConstants.EDGESTYLE_LOOP, mxEdgeStyle.Loop);
+mxStyleRegistry.putValue(mxConstants.EDGESTYLE_SIDETOSIDE, mxEdgeStyle.SideToSide);
+mxStyleRegistry.putValue(mxConstants.EDGESTYLE_TOPTOBOTTOM, mxEdgeStyle.TopToBottom);
+mxStyleRegistry.putValue(mxConstants.EDGESTYLE_ORTHOGONAL, mxEdgeStyle.OrthConnector);
+mxStyleRegistry.putValue(mxConstants.EDGESTYLE_SEGMENT, mxEdgeStyle.SegmentConnector);
+mxStyleRegistry.putValue(mxConstants.PERIMETER_ELLIPSE, mxPerimeter.EllipsePerimeter);
+mxStyleRegistry.putValue(mxConstants.PERIMETER_RECTANGLE, mxPerimeter.RectanglePerimeter);
+mxStyleRegistry.putValue(mxConstants.PERIMETER_RHOMBUS, mxPerimeter.RhombusPerimeter);
+mxStyleRegistry.putValue(mxConstants.PERIMETER_TRIANGLE, mxPerimeter.TrianglePerimeter);
+
+function mxGraphView(a) {
+    this.graph = a;
+    this.translate = new mxPoint;
+    this.graphBounds = new mxRectangle;
+    this.states = new mxDictionary
+}
+mxGraphView.prototype = new mxEventSource;
+mxGraphView.prototype.constructor = mxGraphView;
+mxGraphView.prototype.EMPTY_POINT = new mxPoint;
+mxGraphView.prototype.doneResource = "none" != mxClient.language ? "done" : "";
+mxGraphView.prototype.updatingDocumentResource = "none" != mxClient.language ? "updatingDocument" : "";
+mxGraphView.prototype.allowEval = !1;
+mxGraphView.prototype.captureDocumentGesture = !0;
+mxGraphView.prototype.optimizeVmlReflows = !0;
+mxGraphView.prototype.rendering = !0;
+mxGraphView.prototype.graph = null;
+mxGraphView.prototype.currentRoot = null;
+mxGraphView.prototype.graphBounds = null;
+mxGraphView.prototype.scale = 1;
+mxGraphView.prototype.translate = null;
+mxGraphView.prototype.updateStyle = !1;
+mxGraphView.prototype.getGraphBounds = function() {
+    return this.graphBounds
+};
+mxGraphView.prototype.setGraphBounds = function(a) {
+    this.graphBounds = a
+};
+mxGraphView.prototype.getBounds = function(a) {
+    var b = null;
+    if (null != a && 0 < a.length)
+        for (var c = this.graph.getModel(), d = 0; d < a.length; d++)
+            if (c.isVertex(a[d]) || c.isEdge(a[d])) {
+                var e = this.getState(a[d]);
+                null != e && (null == b ? b = new mxRectangle(e.x, e.y, e.width, e.height) : b.add(e))
+            }
+    return b
+};
+mxGraphView.prototype.setCurrentRoot = function(a) {
+    if (this.currentRoot != a) {
+        var b = new mxCurrentRootChange(this, a);
+        b.execute();
+        var c = new mxUndoableEdit(this, !1);
+        c.add(b);
+        this.fireEvent(new mxEventObject(mxEvent.UNDO, "edit", c));
+        this.graph.sizeDidChange()
+    }
+    return a
+};
+mxGraphView.prototype.scaleAndTranslate = function(a, b, c) {
+    var d = this.scale,
+        e = new mxPoint(this.translate.x, this.translate.y);
+    if (this.scale != a || this.translate.x != b || this.translate.y != c) this.scale = a, this.translate.x = b, this.translate.y = c, this.isEventsEnabled() && (this.revalidate(), this.graph.sizeDidChange());
+    this.fireEvent(new mxEventObject(mxEvent.SCALE_AND_TRANSLATE, "scale", a, "previousScale", d, "translate", this.translate, "previousTranslate", e))
+};
+mxGraphView.prototype.getScale = function() {
+    return this.scale
+};
+mxGraphView.prototype.setScale = function(a) {
+    var b = this.scale;
+    this.scale != a && (this.scale = a, this.isEventsEnabled() && (this.revalidate(), this.graph.sizeDidChange()));
+    this.fireEvent(new mxEventObject(mxEvent.SCALE, "scale", a, "previousScale", b))
+};
+mxGraphView.prototype.getTranslate = function() {
+    return this.translate
+};
+mxGraphView.prototype.setTranslate = function(a, b) {
+    var c = new mxPoint(this.translate.x, this.translate.y);
+    if (this.translate.x != a || this.translate.y != b) this.translate.x = a, this.translate.y = b, this.isEventsEnabled() && (this.revalidate(), this.graph.sizeDidChange());
+    this.fireEvent(new mxEventObject(mxEvent.TRANSLATE, "translate", this.translate, "previousTranslate", c))
+};
+mxGraphView.prototype.refresh = function() {
+    null != this.currentRoot && this.clear();
+    this.revalidate()
+};
+mxGraphView.prototype.revalidate = function() {
+    this.invalidate();
+    this.validate()
+};
+mxGraphView.prototype.clear = function(a, b, c) {
+    var d = this.graph.getModel();
+    a = a || d.getRoot();
+    b = null != b ? b : !1;
+    c = null != c ? c : !0;
+    this.removeState(a);
+    if (c && (b || a != this.currentRoot)) {
+        c = d.getChildCount(a);
+        for (var e = 0; e < c; e++) this.clear(d.getChildAt(a, e), b)
+    } else this.invalidate(a)
+};
+mxGraphView.prototype.invalidate = function(a, b, c, d) {
+    var e = this.graph.getModel();
+    a = a || e.getRoot();
+    b = null != b ? b : !0;
+    c = null != c ? c : !0;
+    d = null != d ? d : !1;
+    var f = this.getState(a);
+    null != f && (f.invalid = !0, d && (f.orderChanged = !0));
+    if (b)
+        for (var g = e.getChildCount(a), f = 0; f < g; f++) {
+            var h = e.getChildAt(a, f);
+            this.invalidate(h, b, c, d)
+        }
+    if (c) {
+        d = e.getEdgeCount(a);
+        for (f = 0; f < d; f++) this.invalidate(e.getEdgeAt(a, f), b, c)
+    }
+};
+mxGraphView.prototype.validate = function(a) {
+    var b = mxLog.enter("mxGraphView.validate");
+    window.status = mxResources.get(this.updatingDocumentResource) || this.updatingDocumentResource;
+    var c = null;
+    if (this.optimizeVmlReflows && null != this.canvas && null == this.textDiv && (8 == document.documentMode || mxClient.IS_QUIRKS)) {
+        c = this.canvas.style.display;
+        this.canvas.style.display = "none";
+        var d = document.createElement("div");
+        d.style.position = "absolute";
+        d.style.whiteSpace = "nowrap";
+        d.style.visibility = "hidden";
+        d.style.display = mxClient.IS_QUIRKS ?
+            "inline" : "inline-block";
+        d.style.zoom = "1";
+        document.body.appendChild(d);
+        this.textDiv = d
+    }
+    a = a || (null != this.currentRoot ? this.currentRoot : this.graph.getModel().getRoot());
+    this.validateBounds(null, a);
+    a = this.validatePoints(null, a);
+    null == a && (a = new mxRectangle);
+    this.setGraphBounds(a);
+    this.validateBackground();
+    null != c && (this.canvas.style.display = c, document.body.removeChild(this.textDiv), this.textDiv = null);
+    window.status = mxResources.get(this.doneResource) || this.doneResource;
+    mxLog.leave("mxGraphView.validate", b)
+};
+mxGraphView.prototype.createBackgroundPageShape = function(a) {
+    return new mxRectangleShape(a, "white", "black")
+};
+mxGraphView.prototype.validateBackground = function() {
+    var a = this.graph.getBackgroundImage();
+    if (null != a) {
+        if (null == this.backgroundImage || this.backgroundImage.image != a.src) {
+            null != this.backgroundImage && this.backgroundImage.destroy();
+            var b = new mxRectangle(0, 0, 1, 1);
+            this.backgroundImage = new mxImageShape(b, a.src);
+            this.backgroundImage.dialect = this.graph.dialect;
+            this.backgroundImage.init(this.backgroundPane);
+            this.backgroundImage.redraw()
+        }
+        this.redrawBackgroundImage(this.backgroundImage, a)
+    } else null != this.backgroundImage &&
+        (this.backgroundImage.destroy(), this.backgroundImage = null);
+    this.graph.pageVisible ? (b = this.getBackgroundPageBounds(), null == this.backgroundPageShape ? (this.backgroundPageShape = this.createBackgroundPageShape(b), this.backgroundPageShape.scale = this.scale, this.backgroundPageShape.isShadow = !0, this.backgroundPageShape.dialect = this.graph.dialect, this.backgroundPageShape.init(this.backgroundPane), this.backgroundPageShape.redraw(), mxEvent.addListener(this.backgroundPageShape.node, "dblclick", mxUtils.bind(this,
+        function(a) {
+            this.graph.dblClick(a)
+        })), mxEvent.addGestureListeners(this.backgroundPageShape.node, mxUtils.bind(this, function(a) {
+        this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a))
+    }), mxUtils.bind(this, function(a) {
+        null != this.graph.tooltipHandler && this.graph.tooltipHandler.isHideOnHover() && this.graph.tooltipHandler.hide();
+        this.graph.isMouseDown && !mxEvent.isConsumed(a) && this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(a))
+    }), mxUtils.bind(this, function(a) {
+        this.graph.fireMouseEvent(mxEvent.MOUSE_UP,
+            new mxMouseEvent(a))
+    }))) : (this.backgroundPageShape.scale = this.scale, this.backgroundPageShape.bounds = b, this.backgroundPageShape.redraw())) : null != this.backgroundPageShape && (this.backgroundPageShape.destroy(), this.backgroundPageShape = null)
+};
+mxGraphView.prototype.getBackgroundPageBounds = function() {
+    var a = this.graph.pageFormat,
+        b = this.scale * this.graph.pageScale;
+    return new mxRectangle(this.scale * this.translate.x, this.scale * this.translate.y, a.width * b, a.height * b)
+};
+mxGraphView.prototype.redrawBackgroundImage = function(a, b) {
+    a.scale = this.scale;
+    a.bounds.x = this.scale * this.translate.x;
+    a.bounds.y = this.scale * this.translate.y;
+    a.bounds.width = this.scale * b.width;
+    a.bounds.height = this.scale * b.height;
+    a.redraw()
+};
+mxGraphView.prototype.validateBounds = function(a, b) {
+    var c = this.graph.getModel(),
+        d = this.getState(b, !0);
+    if (null != d && d.invalid) {
+        if (this.graph.isCellVisible(b)) {
+            if (b != this.currentRoot && null != a) {
+                d.absoluteOffset.x = 0;
+                d.absoluteOffset.y = 0;
+                d.origin.x = a.origin.x;
+                d.origin.y = a.origin.y;
+                var e = this.graph.getCellGeometry(b);
+                if (null != e) {
+                    if (!c.isEdge(b)) {
+                        var f = e.offset || this.EMPTY_POINT;
+                        e.relative ? (d.origin.x += e.x * a.width / this.scale + f.x, d.origin.y += e.y * a.height / this.scale + f.y) : (d.absoluteOffset.x = this.scale * f.x, d.absoluteOffset.y =
+                            this.scale * f.y, d.origin.x += e.x, d.origin.y += e.y)
+                    }
+                    d.x = this.scale * (this.translate.x + d.origin.x);
+                    d.y = this.scale * (this.translate.y + d.origin.y);
+                    d.width = this.scale * e.width;
+                    d.height = this.scale * e.height;
+                    if (c.isVertex(b)) {
+                        if (e.relative && (f = mxUtils.toRadians(a.style[mxConstants.STYLE_ROTATION] || "0"), 0 != f)) {
+                            var e = Math.cos(f),
+                                f = Math.sin(f),
+                                g = new mxPoint(d.getCenterX(), d.getCenterY()),
+                                h = new mxPoint(a.getCenterX(), a.getCenterY()),
+                                e = mxUtils.getRotatedPoint(g, e, f, h);
+                            d.x = e.x - d.width / 2;
+                            d.y = e.y - d.height / 2
+                        }
+                        this.updateVertexLabelOffset(d)
+                    }
+                }
+            }
+        } else this.removeState(b);
+        f = this.graph.getChildOffsetForCell(b);
+        null != f && (d.origin.x += f.x, d.origin.y += f.y)
+    }
+    if (null != d && (!this.graph.isCellCollapsed(b) || b == this.currentRoot)) {
+        e = c.getChildCount(b);
+        for (f = 0; f < e; f++) g = c.getChildAt(b, f), this.validateBounds(d, g)
+    }
+};
+mxGraphView.prototype.updateVertexLabelOffset = function(a) {
+    var b = mxUtils.getValue(a.style, mxConstants.STYLE_LABEL_POSITION, mxConstants.ALIGN_CENTER);
+    b == mxConstants.ALIGN_LEFT ? a.absoluteOffset.x -= a.width : b == mxConstants.ALIGN_RIGHT && (a.absoluteOffset.x += a.width);
+    b = mxUtils.getValue(a.style, mxConstants.STYLE_VERTICAL_LABEL_POSITION, mxConstants.ALIGN_MIDDLE);
+    b == mxConstants.ALIGN_TOP ? a.absoluteOffset.y -= a.height : b == mxConstants.ALIGN_BOTTOM && (a.absoluteOffset.y += a.height)
+};
+mxGraphView.prototype.validatePoints = function(a, b) {
+    var c = this.graph.getModel(),
+        d = this.getState(b),
+        e = null;
+    if (null != d) {
+        if (d.invalid) {
+            var f = this.graph.getCellGeometry(b);
+            if (null != f && c.isEdge(b)) {
+                var g = this.getState(this.getVisibleTerminal(b, !0));
+                d.setVisibleTerminalState(g, !0);
+                if (null != g && c.isEdge(g.cell) && !c.isAncestor(g.cell, b)) {
+                    var h = this.getState(c.getParent(g.cell));
+                    this.validatePoints(h, g.cell)
+                }
+                var k = this.getState(this.getVisibleTerminal(b, !1));
+                d.setVisibleTerminalState(k, !1);
+                null != k && (c.isEdge(k.cell) &&
+                    !c.isAncestor(k.cell, b)) && (h = this.getState(c.getParent(k.cell)), this.validatePoints(h, k.cell));
+                this.updateFixedTerminalPoints(d, g, k);
+                this.updatePoints(d, f.points, g, k);
+                this.updateFloatingTerminalPoints(d, g, k);
+                this.updateEdgeBounds(d);
+                this.updateEdgeLabelOffset(d)
+            } else null != f && (f.relative && null != a && c.isEdge(a.cell)) && (f = this.getPoint(a, f), null != f && (d.x = f.x, d.y = f.y, f.x = f.x / this.scale - this.translate.x, f.y = f.y / this.scale - this.translate.y, d.origin = f, this.childMoved(a, d)));
+            d.invalid = !1;
+            b != this.currentRoot &&
+                this.graph.cellRenderer.redraw(d, !1, this.isRendering())
+        }
+        if (c.isEdge(b) || c.isVertex(b)) null != d.shape && null != d.shape.boundingBox && (e = d.shape.boundingBox.clone()), null != d.text && !this.graph.isLabelClipped(d.cell) && null != d.text.boundingBox && (null != e ? e.add(d.text.boundingBox) : e = d.text.boundingBox.clone())
+    }
+    if (null != d && (!this.graph.isCellCollapsed(b) || b == this.currentRoot)) {
+        f = c.getChildCount(b);
+        for (g = 0; g < f; g++) h = c.getChildAt(b, g), h = this.validatePoints(d, h), null != h && (null == e ? e = h : e.add(h))
+    }
+    return e
+};
+mxGraphView.prototype.childMoved = function(a, b) {
+    var c = b.cell;
+    if (!this.graph.isCellCollapsed(c) || c == this.currentRoot)
+        for (var d = this.graph.getModel(), e = d.getChildCount(c), f = 0; f < e; f++) this.validateBounds(b, d.getChildAt(c, f))
+};
+mxGraphView.prototype.updateFixedTerminalPoints = function(a, b, c) {
+    this.updateFixedTerminalPoint(a, b, !0, this.graph.getConnectionConstraint(a, b, !0));
+    this.updateFixedTerminalPoint(a, c, !1, this.graph.getConnectionConstraint(a, c, !1))
+};
+mxGraphView.prototype.updateFixedTerminalPoint = function(a, b, c, d) {
+    var e = null;
+    null != d && (e = this.graph.getConnectionPoint(b, d));
+    if (null == e && null == b) {
+        b = this.scale;
+        d = this.translate;
+        var f = a.origin,
+            e = this.graph.getCellGeometry(a.cell).getTerminalPoint(c);
+        null != e && (e = new mxPoint(b * (d.x + e.x + f.x), b * (d.y + e.y + f.y)))
+    }
+    a.setAbsoluteTerminalPoint(e, c)
+};
+mxGraphView.prototype.updatePoints = function(a, b, c, d) {
+    if (null != a) {
+        var e = [];
+        e.push(a.absolutePoints[0]);
+        var f = this.getEdgeStyle(a, b, c, d);
+        if (null != f) c = this.getTerminalPort(a, c, !0), d = this.getTerminalPort(a, d, !1), f(a, c, d, b, e);
+        else if (null != b)
+            for (f = 0; f < b.length; f++) null != b[f] && (d = mxUtils.clone(b[f]), e.push(this.transformControlPoint(a, d)));
+        b = a.absolutePoints;
+        e.push(b[b.length - 1]);
+        a.absolutePoints = e
+    }
+};
+mxGraphView.prototype.transformControlPoint = function(a, b) {
+    var c = a.origin;
+    return new mxPoint(this.scale * (b.x + this.translate.x + c.x), this.scale * (b.y + this.translate.y + c.y))
+};
+mxGraphView.prototype.getEdgeStyle = function(a, b, c, d) {
+    a = null != c && c == d ? mxUtils.getValue(a.style, mxConstants.STYLE_LOOP, this.graph.defaultLoopStyle) : !mxUtils.getValue(a.style, mxConstants.STYLE_NOEDGESTYLE, !1) ? a.style[mxConstants.STYLE_EDGE] : null;
+    "string" == typeof a && (b = mxStyleRegistry.getValue(a), null == b && this.isAllowEval() && (b = mxUtils.eval(a)), a = b);
+    return "function" == typeof a ? a : null
+};
+mxGraphView.prototype.updateFloatingTerminalPoints = function(a, b, c) {
+    var d = a.absolutePoints,
+        e = d[0];
+    null == d[d.length - 1] && null != c && this.updateFloatingTerminalPoint(a, c, b, !1);
+    null == e && null != b && this.updateFloatingTerminalPoint(a, b, c, !0)
+};
+mxGraphView.prototype.updateFloatingTerminalPoint = function(a, b, c, d) {
+    b = this.getTerminalPort(a, b, d);
+    var e = this.getNextPoint(a, c, d),
+        f = this.graph.isOrthogonal(a);
+    c = mxUtils.toRadians(Number(b.style[mxConstants.STYLE_ROTATION] || "0"));
+    var g = new mxPoint(b.getCenterX(), b.getCenterY());
+    if (0 != c) var h = Math.cos(-c),
+        k = Math.sin(-c),
+        e = mxUtils.getRotatedPoint(e, h, k, g);
+    h = parseFloat(a.style[mxConstants.STYLE_PERIMETER_SPACING] || 0);
+    h += parseFloat(a.style[d ? mxConstants.STYLE_SOURCE_PERIMETER_SPACING : mxConstants.STYLE_TARGET_PERIMETER_SPACING] ||
+        0);
+    b = this.getPerimeterPoint(b, e, 0 == c && f, h);
+    0 != c && (h = Math.cos(c), k = Math.sin(c), b = mxUtils.getRotatedPoint(b, h, k, g));
+    a.setAbsoluteTerminalPoint(b, d)
+};
+mxGraphView.prototype.getTerminalPort = function(a, b, c) {
+    a = mxUtils.getValue(a.style, c ? mxConstants.STYLE_SOURCE_PORT : mxConstants.STYLE_TARGET_PORT);
+    null != a && (a = this.getState(this.graph.getModel().getCell(a)), null != a && (b = a));
+    return b
+};
+mxGraphView.prototype.getPerimeterPoint = function(a, b, c, d) {
+    var e = null;
+    if (null != a) {
+        var f = this.getPerimeterFunction(a);
+        if (null != f && null != b && (d = this.getPerimeterBounds(a, d), 0 < d.width || 0 < d.height)) e = f(d, a, b, c);
+        null == e && (e = this.getPoint(a))
+    }
+    return e
+};
+mxGraphView.prototype.getRoutingCenterX = function(a) {
+    var b = null != a.style ? parseFloat(a.style[mxConstants.STYLE_ROUTING_CENTER_X]) || 0 : 0;
+    return a.getCenterX() + b * a.width
+};
+mxGraphView.prototype.getRoutingCenterY = function(a) {
+    var b = null != a.style ? parseFloat(a.style[mxConstants.STYLE_ROUTING_CENTER_Y]) || 0 : 0;
+    return a.getCenterY() + b * a.height
+};
+mxGraphView.prototype.getPerimeterBounds = function(a, b) {
+    b = null != b ? b : 0;
+    null != a && (b += parseFloat(a.style[mxConstants.STYLE_PERIMETER_SPACING] || 0));
+    return a.getPerimeterBounds(b * this.scale)
+};
+mxGraphView.prototype.getPerimeterFunction = function(a) {
+    a = a.style[mxConstants.STYLE_PERIMETER];
+    if ("string" == typeof a) {
+        var b = mxStyleRegistry.getValue(a);
+        null == b && this.isAllowEval() && (b = mxUtils.eval(a));
+        a = b
+    }
+    return "function" == typeof a ? a : null
+};
+mxGraphView.prototype.getNextPoint = function(a, b, c) {
+    a = a.absolutePoints;
+    var d = null;
+    if (null != a && (c || 2 < a.length || null == b)) d = a.length, d = a[c ? Math.min(1, d - 1) : Math.max(0, d - 2)];
+    null == d && null != b && (d = new mxPoint(b.getCenterX(), b.getCenterY()));
+    return d
+};
+mxGraphView.prototype.getVisibleTerminal = function(a, b) {
+    for (var c = this.graph.getModel(), d = c.getTerminal(a, b), e = d; null != d && d != this.currentRoot;) {
+        if (!this.graph.isCellVisible(e) || this.graph.isCellCollapsed(d)) e = d;
+        d = c.getParent(d)
+    }
+    c.getParent(e) == c.getRoot() && (e = null);
+    return e
+};
+mxGraphView.prototype.updateEdgeBounds = function(a) {
+    var b = a.absolutePoints;
+    a.length = 0;
+    if (null != b && 0 < b.length) {
+        var c = b[0],
+            d = b[b.length - 1];
+        if (null == c || null == d) a.cell != this.currentRoot && this.clear(a.cell, !0);
+        else {
+            if (c.x != d.x || c.y != d.y) {
+                var e = d.x - c.x,
+                    f = d.y - c.y;
+                a.terminalDistance = Math.sqrt(e * e + f * f)
+            } else a.terminalDistance = 0;
+            var d = 0,
+                g = [],
+                f = c;
+            if (null != f) {
+                for (var c = f.x, h = f.y, k = c, l = h, m = 1; m < b.length; m++) {
+                    var n = b[m];
+                    null != n && (e = f.x - n.x, f = f.y - n.y, e = Math.sqrt(e * e + f * f), g.push(e), d += e, f = n, c = Math.min(f.x, c), h = Math.min(f.y,
+                        h), k = Math.max(f.x, k), l = Math.max(f.y, l))
+                }
+                a.length = d;
+                a.segments = g;
+                a.x = c;
+                a.y = h;
+                a.width = Math.max(1, k - c);
+                a.height = Math.max(1, l - h)
+            }
+        }
+    }
+};
+mxGraphView.prototype.getPoint = function(a, b) {
+    var c = a.getCenterX(),
+        d = a.getCenterY();
+    if (null != a.segments && (null == b || b.relative)) {
+        for (var e = a.absolutePoints.length, f = ((null != b ? b.x / 2 : 0) + 0.5) * a.length, g = a.segments[0], h = 0, k = 1; f > h + g && k < e - 1;) h += g, g = a.segments[k++];
+        e = 0 == g ? 0 : (f - h) / g;
+        f = a.absolutePoints[k - 1];
+        k = a.absolutePoints[k];
+        if (null != f && null != k) {
+            h = c = d = 0;
+            if (null != b) {
+                var d = b.y,
+                    l = b.offset;
+                null != l && (c = l.x, h = l.y)
+            }
+            l = k.x - f.x;
+            k = k.y - f.y;
+            c = f.x + l * e + ((0 == g ? 0 : k / g) * d + c) * this.scale;
+            d = f.y + k * e - ((0 == g ? 0 : l / g) * d - h) * this.scale
+        }
+    } else null !=
+        b && (l = b.offset, null != l && (c += l.x, d += l.y));
+    return new mxPoint(c, d)
+};
+mxGraphView.prototype.getRelativePoint = function(a, b, c) {
+    var d = this.graph.getModel().getGeometry(a.cell);
+    if (null != d) {
+        var e = a.absolutePoints.length;
+        if (d.relative && 1 < e) {
+            for (var d = a.length, f = a.segments, g = a.absolutePoints[0], h = a.absolutePoints[1], k = mxUtils.ptSegDistSq(g.x, g.y, h.x, h.y, b, c), l = 0, m = 0, n = 0, p = 2; p < e; p++) m += f[p - 2], h = a.absolutePoints[p], g = mxUtils.ptSegDistSq(g.x, g.y, h.x, h.y, b, c), g <= k && (k = g, l = p - 1, n = m), g = h;
+            e = f[l];
+            g = a.absolutePoints[l];
+            h = a.absolutePoints[l + 1];
+            k = h.x;
+            f = h.y;
+            a = g.x - k;
+            l = g.y - f;
+            k = b - k;
+            f = c - f;
+            k = a - k;
+            f = l - f;
+            f = k * a + f * l;
+            a = Math.sqrt(0 >= f ? 0 : f * f / (a * a + l * l));
+            a > e && (a = e);
+            e = Math.sqrt(mxUtils.ptSegDistSq(g.x, g.y, h.x, h.y, b, c)); - 1 == mxUtils.relativeCcw(g.x, g.y, h.x, h.y, b, c) && (e = -e);
+            return new mxPoint(-2 * ((d / 2 - n - a) / d), e / this.scale)
+        }
+    }
+    return new mxPoint
+};
+mxGraphView.prototype.updateEdgeLabelOffset = function(a) {
+    var b = a.absolutePoints;
+    a.absoluteOffset.x = a.getCenterX();
+    a.absoluteOffset.y = a.getCenterY();
+    if (null != b && 0 < b.length && null != a.segments) {
+        var c = this.graph.getCellGeometry(a.cell);
+        if (c.relative) {
+            var d = this.getPoint(a, c);
+            null != d && (a.absoluteOffset = d)
+        } else {
+            var d = b[0],
+                e = b[b.length - 1];
+            if (null != d && null != e) {
+                var b = e.x - d.x,
+                    f = e.y - d.y,
+                    g = e = 0,
+                    c = c.offset;
+                null != c && (e = c.x, g = c.y);
+                c = d.y + f / 2 + g * this.scale;
+                a.absoluteOffset.x = d.x + b / 2 + e * this.scale;
+                a.absoluteOffset.y = c
+            }
+        }
+    }
+};
+mxGraphView.prototype.getState = function(a, b) {
+    b = b || !1;
+    var c = null;
+    null != a && (c = this.states.get(a), this.graph.isCellVisible(a) && (null == c && b && this.graph.isCellVisible(a) ? (c = this.createState(a), this.states.put(a, c)) : b && (null != c && this.updateStyle) && (c.style = this.graph.getCellStyle(a))));
+    return c
+};
+mxGraphView.prototype.isRendering = function() {
+    return this.rendering
+};
+mxGraphView.prototype.setRendering = function(a) {
+    this.rendering = a
+};
+mxGraphView.prototype.isAllowEval = function() {
+    return this.allowEval
+};
+mxGraphView.prototype.setAllowEval = function(a) {
+    this.allowEval = a
+};
+mxGraphView.prototype.getStates = function() {
+    return this.states
+};
+mxGraphView.prototype.setStates = function(a) {
+    this.states = a
+};
+mxGraphView.prototype.getCellStates = function(a) {
+    if (null == a) return this.states;
+    for (var b = [], c = 0; c < a.length; c++) {
+        var d = this.getState(a[c]);
+        null != d && b.push(d)
+    }
+    return b
+};
+mxGraphView.prototype.removeState = function(a) {
+    var b = null;
+    null != a && (b = this.states.remove(a), null != b && (this.graph.cellRenderer.destroy(b), b.destroy()));
+    return b
+};
+mxGraphView.prototype.createState = function(a) {
+    var b = this.graph.getCellStyle(a);
+    a = new mxCellState(this, a, b);
+    this.graph.cellRenderer.initialize(a, this.isRendering());
+    return a
+};
+mxGraphView.prototype.getCanvas = function() {
+    return this.canvas
+};
+mxGraphView.prototype.getBackgroundPane = function() {
+    return this.backgroundPane
+};
+mxGraphView.prototype.getDrawPane = function() {
+    return this.drawPane
+};
+mxGraphView.prototype.getOverlayPane = function() {
+    return this.overlayPane
+};
+mxGraphView.prototype.isContainerEvent = function(a) {
+    a = mxEvent.getSource(a);
+    return a == this.graph.container || a.parentNode == this.backgroundPane || null != a.parentNode && a.parentNode.parentNode == this.backgroundPane || a == this.canvas.parentNode || a == this.canvas || a == this.backgroundPane || a == this.drawPane || a == this.overlayPane
+};
+mxGraphView.prototype.isScrollEvent = function(a) {
+    var b = mxUtils.getOffset(this.graph.container);
+    a = new mxPoint(a.clientX - b.x, a.clientY - b.y);
+    var b = this.graph.container.offsetWidth,
+        c = this.graph.container.clientWidth;
+    if (b > c && a.x > c + 2 && a.x <= b) return !0;
+    b = this.graph.container.offsetHeight;
+    c = this.graph.container.clientHeight;
+    return b > c && a.y > c + 2 && a.y <= b ? !0 : !1
+};
+mxGraphView.prototype.init = function() {
+    this.installListeners();
+    var a = this.graph;
+    a.dialect == mxConstants.DIALECT_SVG ? this.createSvg() : a.dialect == mxConstants.DIALECT_VML ? this.createVml() : this.createHtml()
+};
+mxGraphView.prototype.installListeners = function() {
+    var a = this.graph,
+        b = a.container;
+    if (null != b) {
+        mxEvent.addGestureListeners(b, mxUtils.bind(this, function(b) {
+            mxClient.IS_TOUCH && a.isEditing() && a.stopEditing(!a.isInvokesStopCellEditing());
+            this.isContainerEvent(b) && (!mxClient.IS_IE && !mxClient.IS_GC && !mxClient.IS_OP && !mxClient.IS_SF || !this.isScrollEvent(b)) && a.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(b))
+        }), mxUtils.bind(this, function(b) {
+            this.isContainerEvent(b) && a.fireMouseEvent(mxEvent.MOUSE_MOVE,
+                new mxMouseEvent(b))
+        }), mxUtils.bind(this, function(b) {
+            this.isContainerEvent(b) && a.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(b))
+        }));
+        mxEvent.addListener(b, "dblclick", mxUtils.bind(this, function(b) {
+            a.dblClick(b)
+        }));
+        var c = function(c) {
+            var e = null;
+            mxClient.IS_TOUCH && (e = mxEvent.getClientX(c), c = mxEvent.getClientY(c), c = mxUtils.convertPoint(b, e, c), e = a.view.getState(a.getCellAt(c.x, c.y)));
+            return e
+        };
+        a.addMouseListener({
+            mouseDown: function(b, c) {
+                a.panningHandler.hideMenu()
+            },
+            mouseMove: function() {},
+            mouseUp: function() {}
+        });
+        this.moveHandler = mxUtils.bind(this, function(b) {
+            null != a.tooltipHandler && a.tooltipHandler.isHideOnHover() && a.tooltipHandler.hide();
+            this.captureDocumentGesture && (a.isMouseDown && !mxEvent.isConsumed(b)) && a.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(b, c(b)))
+        });
+        this.endHandler = mxUtils.bind(this, function(b) {
+            this.captureDocumentGesture && a.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(b))
+        });
+        mxEvent.addGestureListeners(document, null, this.moveHandler, this.endHandler)
+    }
+};
+mxGraphView.prototype.createHtml = function() {
+    var a = this.graph.container;
+    null != a && (this.canvas = this.createHtmlPane("100%", "100%"), this.backgroundPane = this.createHtmlPane("1px", "1px"), this.drawPane = this.createHtmlPane("1px", "1px"), this.overlayPane = this.createHtmlPane("1px", "1px"), this.canvas.appendChild(this.backgroundPane), this.canvas.appendChild(this.drawPane), this.canvas.appendChild(this.overlayPane), a.appendChild(this.canvas), mxClient.IS_QUIRKS && (a = mxUtils.bind(this, function(a) {
+        a = this.getGraphBounds();
+        this.updateHtmlCanvasSize(a.x + a.width + this.graph.border, a.y + a.height + this.graph.border)
+    }), mxEvent.addListener(window, "resize", a)))
+};
+mxGraphView.prototype.updateHtmlCanvasSize = function(a, b) {
+    if (null != this.graph.container) {
+        var c = this.graph.container.offsetHeight;
+        this.canvas.style.width = this.graph.container.offsetWidth < a ? a + "px" : "100%";
+        this.canvas.style.height = c < b ? b + "px" : "100%"
+    }
+};
+mxGraphView.prototype.createHtmlPane = function(a, b) {
+    var c = document.createElement("DIV");
+    null != a && null != b ? (c.style.position = "absolute", c.style.left = "0px", c.style.top = "0px", c.style.width = a, c.style.height = b) : c.style.position = "relative";
+    return c
+};
+mxGraphView.prototype.createVml = function() {
+    var a = this.graph.container;
+    if (null != a) {
+        var b = a.offsetWidth,
+            c = a.offsetHeight;
+        this.canvas = this.createVmlPane(b, c);
+        this.backgroundPane = this.createVmlPane(b, c);
+        this.drawPane = this.createVmlPane(b, c);
+        this.overlayPane = this.createVmlPane(b, c);
+        this.canvas.appendChild(this.backgroundPane);
+        this.canvas.appendChild(this.drawPane);
+        this.canvas.appendChild(this.overlayPane);
+        a.appendChild(this.canvas)
+    }
+};
+mxGraphView.prototype.createVmlPane = function(a, b) {
+    var c = document.createElement(mxClient.VML_PREFIX + ":group");
+    c.style.position = "absolute";
+    c.style.left = "0px";
+    c.style.top = "0px";
+    c.style.width = a + "px";
+    c.style.height = b + "px";
+    c.setAttribute("coordsize", a + "," + b);
+    c.setAttribute("coordorigin", "0,0");
+    return c
+};
+mxGraphView.prototype.createSvg = function() {
+    var a = this.graph.container;
+    this.canvas = document.createElementNS(mxConstants.NS_SVG, "g");
+    this.backgroundPane = document.createElementNS(mxConstants.NS_SVG, "g");
+    this.canvas.appendChild(this.backgroundPane);
+    this.drawPane = document.createElementNS(mxConstants.NS_SVG, "g");
+    this.canvas.appendChild(this.drawPane);
+    this.overlayPane = document.createElementNS(mxConstants.NS_SVG, "g");
+    this.canvas.appendChild(this.overlayPane);
+    var b = document.createElementNS(mxConstants.NS_SVG,
+        "svg");
+    b.style.width = "100%";
+    b.style.height = "100%";
+    b.style.display = "block";
+    b.appendChild(this.canvas);
+    null != a && (a.appendChild(b), "static" == mxUtils.getCurrentStyle(a).position && (a.style.position = "relative"))
+};
+mxGraphView.prototype.destroy = function() {
+    var a = null != this.canvas ? this.canvas.ownerSVGElement : null;
+    null == a && (a = this.canvas);
+    null != a && null != a.parentNode && (this.clear(this.currentRoot, !0), mxEvent.removeGestureListeners(document, null, this.moveHandler, this.endHandler), mxEvent.release(this.graph.container), a.parentNode.removeChild(a), this.overlayPane = this.drawPane = this.backgroundPane = this.canvas = this.endHandler = this.moveHandler = null)
+};
+
+function mxCurrentRootChange(a, b) {
+    this.view = a;
+    this.previous = this.root = b;
+    this.isUp = null == b;
+    if (!this.isUp)
+        for (var c = this.view.currentRoot, d = this.view.graph.getModel(); null != c;) {
+            if (c == b) {
+                this.isUp = !0;
+                break
+            }
+            c = d.getParent(c)
+        }
+}
+mxCurrentRootChange.prototype.execute = function() {
+    var a = this.view.currentRoot;
+    this.view.currentRoot = this.previous;
+    this.previous = a;
+    a = this.view.graph.getTranslateForRoot(this.view.currentRoot);
+    null != a && (this.view.translate = new mxPoint(-a.x, -a.y));
+    this.view.fireEvent(new mxEventObject(this.isUp ? mxEvent.UP : mxEvent.DOWN, "root", this.view.currentRoot, "previous", this.previous));
+    this.isUp ? (this.view.clear(this.view.currentRoot, !0), this.view.validate()) : this.view.refresh();
+    this.isUp = !this.isUp
+};
+
+function mxGraph(a, b, c, d) {
+    this.mouseListeners = null;
+    this.renderHint = c;
+    this.dialect = mxClient.IS_SVG ? mxConstants.DIALECT_SVG : c == mxConstants.RENDERING_HINT_EXACT && mxClient.IS_VML ? mxConstants.DIALECT_VML : c == mxConstants.RENDERING_HINT_FASTEST ? mxConstants.DIALECT_STRICTHTML : c == mxConstants.RENDERING_HINT_FASTER ? mxConstants.DIALECT_PREFERHTML : mxConstants.DIALECT_MIXEDHTML;
+    this.model = null != b ? b : new mxGraphModel;
+    this.multiplicities = [];
+    this.imageBundles = [];
+    this.cellRenderer = this.createCellRenderer();
+    this.setSelectionModel(this.createSelectionModel());
+    this.setStylesheet(null != d ? d : this.createStylesheet());
+    this.view = this.createGraphView();
+    this.graphModelChangeListener = mxUtils.bind(this, function(a, b) {
+        this.graphModelChanged(b.getProperty("edit").changes)
+    });
+    this.model.addListener(mxEvent.CHANGE, this.graphModelChangeListener);
+    this.createHandlers();
+    null != a && this.init(a);
+    this.view.revalidate()
+}
+mxLoadResources && mxResources.add(mxClient.basePath + "/resources/graph");
+mxGraph.prototype = new mxEventSource;
+mxGraph.prototype.constructor = mxGraph;
+mxGraph.prototype.EMPTY_ARRAY = [];
+mxGraph.prototype.mouseListeners = null;
+mxGraph.prototype.isMouseDown = !1;
+mxGraph.prototype.model = null;
+mxGraph.prototype.view = null;
+mxGraph.prototype.stylesheet = null;
+mxGraph.prototype.selectionModel = null;
+mxGraph.prototype.cellEditor = null;
+mxGraph.prototype.cellRenderer = null;
+mxGraph.prototype.multiplicities = null;
+mxGraph.prototype.renderHint = null;
+mxGraph.prototype.dialect = null;
+mxGraph.prototype.gridSize = 10;
+mxGraph.prototype.gridEnabled = !0;
+mxGraph.prototype.portsEnabled = !0;
+mxGraph.prototype.doubleTapEnabled = !0;
+mxGraph.prototype.doubleTapTimeout = 700;
+mxGraph.prototype.doubleTapTolerance = 25;
+mxGraph.prototype.lastTouchY = 0;
+mxGraph.prototype.lastTouchY = 0;
+mxGraph.prototype.lastTouchTime = 0;
+mxGraph.prototype.gestureEnabled = !0;
+mxGraph.prototype.tolerance = 4;
+mxGraph.prototype.defaultOverlap = 0.5;
+mxGraph.prototype.defaultParent = null;
+mxGraph.prototype.alternateEdgeStyle = null;
+mxGraph.prototype.backgroundImage = null;
+mxGraph.prototype.pageVisible = !1;
+mxGraph.prototype.pageBreaksVisible = !1;
+mxGraph.prototype.pageBreakColor = "gray";
+mxGraph.prototype.pageBreakDashed = !0;
+mxGraph.prototype.minPageBreakDist = 20;
+mxGraph.prototype.preferPageSize = !1;
+mxGraph.prototype.pageFormat = mxConstants.PAGE_FORMAT_A4_PORTRAIT;
+mxGraph.prototype.pageScale = 1.5;
+mxGraph.prototype.enabled = !0;
+mxGraph.prototype.escapeEnabled = !0;
+mxGraph.prototype.invokesStopCellEditing = !0;
+mxGraph.prototype.enterStopsCellEditing = !1;
+mxGraph.prototype.useScrollbarsForPanning = !0;
+mxGraph.prototype.exportEnabled = !0;
+mxGraph.prototype.importEnabled = !0;
+mxGraph.prototype.cellsLocked = !1;
+mxGraph.prototype.cellsCloneable = !0;
+mxGraph.prototype.foldingEnabled = !0;
+mxGraph.prototype.cellsEditable = !0;
+mxGraph.prototype.cellsDeletable = !0;
+mxGraph.prototype.cellsMovable = !0;
+mxGraph.prototype.edgeLabelsMovable = !0;
+mxGraph.prototype.vertexLabelsMovable = !1;
+mxGraph.prototype.dropEnabled = !1;
+mxGraph.prototype.splitEnabled = !0;
+mxGraph.prototype.cellsResizable = !0;
+mxGraph.prototype.cellsBendable = !0;
+mxGraph.prototype.cellsSelectable = !0;
+mxGraph.prototype.cellsDisconnectable = !0;
+mxGraph.prototype.autoSizeCells = !1;
+mxGraph.prototype.autoScroll = !0;
+mxGraph.prototype.timerAutoScroll = !1;
+mxGraph.prototype.allowAutoPanning = !1;
+mxGraph.prototype.ignoreScrollbars = !1;
+mxGraph.prototype.autoExtend = !0;
+mxGraph.prototype.maximumGraphBounds = null;
+mxGraph.prototype.minimumGraphSize = null;
+mxGraph.prototype.minimumContainerSize = null;
+mxGraph.prototype.maximumContainerSize = null;
+mxGraph.prototype.resizeContainer = !1;
+mxGraph.prototype.border = 0;
+mxGraph.prototype.ordered = !0;
+mxGraph.prototype.keepEdgesInForeground = !1;
+mxGraph.prototype.keepEdgesInBackground = !0;
+mxGraph.prototype.allowNegativeCoordinates = !0;
+mxGraph.prototype.constrainChildren = !0;
+mxGraph.prototype.extendParents = !0;
+mxGraph.prototype.extendParentsOnAdd = !0;
+mxGraph.prototype.collapseToPreferredSize = !0;
+mxGraph.prototype.zoomFactor = 1.2;
+mxGraph.prototype.keepSelectionVisibleOnZoom = !1;
+mxGraph.prototype.centerZoom = !0;
+mxGraph.prototype.resetViewOnRootChange = !0;
+mxGraph.prototype.resetEdgesOnResize = !1;
+mxGraph.prototype.resetEdgesOnMove = !1;
+mxGraph.prototype.resetEdgesOnConnect = !0;
+mxGraph.prototype.allowLoops = !1;
+mxGraph.prototype.defaultLoopStyle = mxEdgeStyle.Loop;
+mxGraph.prototype.multigraph = !0;
+mxGraph.prototype.connectableEdges = !1;
+mxGraph.prototype.allowDanglingEdges = !0;
+mxGraph.prototype.cloneInvalidEdges = !1;
+mxGraph.prototype.disconnectOnMove = !0;
+mxGraph.prototype.labelsVisible = !0;
+mxGraph.prototype.htmlLabels = !1;
+mxGraph.prototype.swimlaneSelectionEnabled = !0;
+mxGraph.prototype.swimlaneNesting = !0;
+mxGraph.prototype.swimlaneIndicatorColorAttribute = mxConstants.STYLE_FILLCOLOR;
+mxGraph.prototype.imageBundles = null;
+mxGraph.prototype.minFitScale = 0.1;
+mxGraph.prototype.maxFitScale = 8;
+mxGraph.prototype.panDx = 0;
+mxGraph.prototype.panDy = 0;
+mxGraph.prototype.collapsedImage = new mxImage(mxClient.imageBasePath + "/collapsed.gif", 9, 9);
+mxGraph.prototype.expandedImage = new mxImage(mxClient.imageBasePath + "/expanded.gif", 9, 9);
+mxGraph.prototype.warningImage = new mxImage(mxClient.imageBasePath + "/warning" + (mxClient.IS_MAC ? ".png" : ".gif"), 16, 16);
+mxGraph.prototype.alreadyConnectedResource = "none" != mxClient.language ? "alreadyConnected" : "";
+mxGraph.prototype.containsValidationErrorsResource = "none" != mxClient.language ? "containsValidationErrors" : "";
+mxGraph.prototype.collapseExpandResource = "none" != mxClient.language ? "collapse-expand" : "";
+mxGraph.prototype.init = function(a) {
+    this.container = a;
+    this.cellEditor = this.createCellEditor();
+    this.view.init();
+    this.sizeDidChange();
+    mxClient.IS_IE && (mxEvent.addListener(window, "unload", mxUtils.bind(this, function() {
+        this.destroy()
+    })), mxEvent.addListener(a, "selectstart", mxUtils.bind(this, function() {
+        return this.isEditing()
+    })));
+    8 == document.documentMode && a.insertAdjacentHTML("beforeend", '\x3cv:group style\x3d"DISPLAY: none;"\x3e\x3c/v:group\x3e')
+};
+mxGraph.prototype.createHandlers = function(a) {
+    this.tooltipHandler = new mxTooltipHandler(this);
+    this.tooltipHandler.setEnabled(!1);
+    this.panningHandler = new mxPanningHandler(this);
+    this.panningHandler.panningEnabled = !1;
+    this.selectionCellsHandler = new mxSelectionCellsHandler(this);
+    this.connectionHandler = new mxConnectionHandler(this);
+    this.connectionHandler.setEnabled(!1);
+    this.graphHandler = new mxGraphHandler(this)
+};
+mxGraph.prototype.createSelectionModel = function() {
+    return new mxGraphSelectionModel(this)
+};
+mxGraph.prototype.createStylesheet = function() {
+    return new mxStylesheet
+};
+mxGraph.prototype.createGraphView = function() {
+    return new mxGraphView(this)
+};
+mxGraph.prototype.createCellRenderer = function() {
+    return new mxCellRenderer
+};
+mxGraph.prototype.createCellEditor = function() {
+    return new mxCellEditor(this)
+};
+mxGraph.prototype.getModel = function() {
+    return this.model
+};
+mxGraph.prototype.getView = function() {
+    return this.view
+};
+mxGraph.prototype.getStylesheet = function() {
+    return this.stylesheet
+};
+mxGraph.prototype.setStylesheet = function(a) {
+    this.stylesheet = a
+};
+mxGraph.prototype.getSelectionModel = function() {
+    return this.selectionModel
+};
+mxGraph.prototype.setSelectionModel = function(a) {
+    this.selectionModel = a
+};
+mxGraph.prototype.getSelectionCellsForChanges = function(a) {
+    for (var b = [], c = 0; c < a.length; c++) {
+        var d = a[c];
+        if (d.constructor != mxRootChange) {
+            var e = null;
+            d instanceof mxChildChange && null == d.previous ? e = d.child : null != d.cell && d.cell instanceof mxCell && (e = d.cell);
+            null != e && 0 > mxUtils.indexOf(b, e) && b.push(e)
+        }
+    }
+    return this.getModel().getTopmostCells(b)
+};
+mxGraph.prototype.graphModelChanged = function(a) {
+    for (var b = 0; b < a.length; b++) this.processChange(a[b]);
+    this.removeSelectionCells(this.getRemovedCellsForChanges(a));
+    this.view.validate();
+    this.sizeDidChange()
+};
+mxGraph.prototype.getRemovedCellsForChanges = function(a) {
+    for (var b = [], c = 0; c < a.length; c++) {
+        var d = a[c];
+        if (d instanceof mxRootChange) break;
+        else d instanceof mxChildChange ? null != d.previous && null == d.parent && (b = b.concat(this.model.getDescendants(d.child))) : d instanceof mxVisibleChange && (b = b.concat(this.model.getDescendants(d.cell)))
+    }
+    return b
+};
+mxGraph.prototype.processChange = function(a) {
+    if (a instanceof mxRootChange) this.clearSelection(), this.removeStateForCell(a.previous), this.resetViewOnRootChange && (this.view.scale = 1, this.view.translate.x = 0, this.view.translate.y = 0), this.fireEvent(new mxEventObject(mxEvent.ROOT));
+    else if (a instanceof mxChildChange) {
+        var b = this.model.getParent(a.child);
+        null != b ? this.view.invalidate(a.child, !0, !1, null != a.previous) : (this.removeStateForCell(a.child), this.view.currentRoot == a.child && this.home());
+        b != a.previous &&
+            (null != b && this.view.invalidate(b, !1, !1), null != a.previous && this.view.invalidate(a.previous, !1, !1))
+    } else a instanceof mxTerminalChange || a instanceof mxGeometryChange ? this.view.invalidate(a.cell) : a instanceof mxValueChange ? this.view.invalidate(a.cell, !1, !1) : a instanceof mxStyleChange ? (this.view.invalidate(a.cell, !0, !0, !1), this.view.removeState(a.cell)) : null != a.cell && a.cell instanceof mxCell && this.removeStateForCell(a.cell)
+};
+mxGraph.prototype.removeStateForCell = function(a) {
+    for (var b = this.model.getChildCount(a), c = 0; c < b; c++) this.removeStateForCell(this.model.getChildAt(a, c));
+    this.view.removeState(a)
+};
+mxGraph.prototype.addCellOverlay = function(a, b) {
+    null == a.overlays && (a.overlays = []);
+    a.overlays.push(b);
+    var c = this.view.getState(a);
+    null != c && this.cellRenderer.redraw(c);
+    this.fireEvent(new mxEventObject(mxEvent.ADD_OVERLAY, "cell", a, "overlay", b));
+    return b
+};
+mxGraph.prototype.getCellOverlays = function(a) {
+    return a.overlays
+};
+mxGraph.prototype.removeCellOverlay = function(a, b) {
+    if (null == b) this.removeCellOverlays(a);
+    else {
+        var c = mxUtils.indexOf(a.overlays, b);
+        0 <= c ? (a.overlays.splice(c, 1), 0 == a.overlays.length && (a.overlays = null), c = this.view.getState(a), null != c && this.cellRenderer.redraw(c), this.fireEvent(new mxEventObject(mxEvent.REMOVE_OVERLAY, "cell", a, "overlay", b))) : b = null
+    }
+    return b
+};
+mxGraph.prototype.removeCellOverlays = function(a) {
+    var b = a.overlays;
+    if (null != b) {
+        a.overlays = null;
+        var c = this.view.getState(a);
+        null != c && this.cellRenderer.redraw(c);
+        for (c = 0; c < b.length; c++) this.fireEvent(new mxEventObject(mxEvent.REMOVE_OVERLAY, "cell", a, "overlay", b[c]))
+    }
+    return b
+};
+mxGraph.prototype.clearCellOverlays = function(a) {
+    a = null != a ? a : this.model.getRoot();
+    this.removeCellOverlays(a);
+    for (var b = this.model.getChildCount(a), c = 0; c < b; c++) {
+        var d = this.model.getChildAt(a, c);
+        this.clearCellOverlays(d)
+    }
+};
+mxGraph.prototype.setCellWarning = function(a, b, c, d) {
+    if (null != b && 0 < b.length) return c = null != c ? c : this.warningImage, b = new mxCellOverlay(c, "\x3cfont color\x3dred\x3e" + b + "\x3c/font\x3e"), d && b.addListener(mxEvent.CLICK, mxUtils.bind(this, function(b, c) {
+        this.isEnabled() && this.setSelectionCell(a)
+    })), this.addCellOverlay(a, b);
+    this.removeCellOverlays(a);
+    return null
+};
+mxGraph.prototype.startEditing = function(a) {
+    this.startEditingAtCell(null, a)
+};
+mxGraph.prototype.startEditingAtCell = function(a, b) {
+    null == a && (a = this.getSelectionCell(), null != a && !this.isCellEditable(a) && (a = null));
+    null != a && (this.fireEvent(new mxEventObject(mxEvent.START_EDITING, "cell", a, "event", b)), this.cellEditor.startEditing(a, b))
+};
+mxGraph.prototype.getEditingValue = function(a, b) {
+    return this.convertValueToString(a)
+};
+mxGraph.prototype.stopEditing = function(a) {
+    this.cellEditor.stopEditing(a)
+};
+mxGraph.prototype.labelChanged = function(a, b, c) {
+    this.model.beginUpdate();
+    try {
+        this.cellLabelChanged(a, b, this.isAutoSizeCell(a)), this.fireEvent(new mxEventObject(mxEvent.LABEL_CHANGED, "cell", a, "value", b, "event", c))
+    } finally {
+        this.model.endUpdate()
+    }
+    return a
+};
+mxGraph.prototype.cellLabelChanged = function(a, b, c) {
+    this.model.beginUpdate();
+    try {
+        this.model.setValue(a, b), c && this.cellSizeUpdated(a, !1)
+    } finally {
+        this.model.endUpdate()
+    }
+};
+mxGraph.prototype.escape = function(a) {
+    this.stopEditing(!0);
+    this.connectionHandler.reset();
+    this.graphHandler.reset();
+    a = this.getSelectionCells();
+    for (var b = 0; b < a.length; b++) {
+        var c = this.view.getState(a[b]);
+        null != c && null != c.handler && c.handler.reset()
+    }
+};
+mxGraph.prototype.click = function(a) {
+    var b = a.getEvent(),
+        c = a.getCell(),
+        d = new mxEventObject(mxEvent.CLICK, "event", b, "cell", c);
+    a.isConsumed() && d.consume();
+    this.fireEvent(d);
+    this.isEnabled() && (!mxEvent.isConsumed(b) && !d.isConsumed()) && (null != c ? this.selectCellForEvent(c, b) : (c = null, this.isSwimlaneSelectionEnabled() && (c = this.getSwimlaneAt(a.getGraphX(), a.getGraphY())), null != c ? this.selectCellForEvent(c, b) : this.isToggleEvent(b) || this.clearSelection()))
+};
+mxGraph.prototype.dblClick = function(a, b) {
+    var c = new mxEventObject(mxEvent.DOUBLE_CLICK, "event", a, "cell", b);
+    this.fireEvent(c);
+    this.isEnabled() && (!mxEvent.isConsumed(a) && !c.isConsumed() && null != b && this.isCellEditable(b)) && this.startEditingAtCell(b, a)
+};
+mxGraph.prototype.scrollPointToVisible = function(a, b, c, d) {
+    if (!this.timerAutoScroll && (this.ignoreScrollbars || mxUtils.hasScrollbars(this.container))) {
+        var e = this.container;
+        d = null != d ? d : 20;
+        if (a >= e.scrollLeft && b >= e.scrollTop && a <= e.scrollLeft + e.clientWidth && b <= e.scrollTop + e.clientHeight) {
+            var f = e.scrollLeft + e.clientWidth - a;
+            if (f < d) {
+                if (a = e.scrollLeft, e.scrollLeft += d - f, c && a == e.scrollLeft) {
+                    if (this.dialect == mxConstants.DIALECT_SVG) {
+                        a = this.view.getDrawPane().ownerSVGElement;
+                        var g = this.container.scrollWidth + d - f
+                    } else g =
+                        Math.max(e.clientWidth, e.scrollWidth) + d - f, a = this.view.getCanvas();
+                    a.style.width = g + "px";
+                    e.scrollLeft += d - f
+                }
+            } else f = a - e.scrollLeft, f < d && (e.scrollLeft -= d - f);
+            f = e.scrollTop + e.clientHeight - b;
+            f < d ? (a = e.scrollTop, e.scrollTop += d - f, a == e.scrollTop && c && (this.dialect == mxConstants.DIALECT_SVG ? (a = this.view.getDrawPane().ownerSVGElement, b = this.container.scrollHeight + d - f) : (b = Math.max(e.clientHeight, e.scrollHeight) + d - f, a = this.view.getCanvas()), a.style.height = b + "px", e.scrollTop += d - f)) : (f = b - e.scrollTop, f < d && (e.scrollTop -=
+                d - f))
+        }
+    } else this.allowAutoPanning && !this.panningHandler.active && (null == this.panningManager && (this.panningManager = this.createPanningManager()), this.panningManager.panTo(a + this.panDx, b + this.panDy))
+};
+mxGraph.prototype.createPanningManager = function() {
+    return new mxPanningManager(this)
+};
+mxGraph.prototype.getBorderSizes = function() {
+    function a(a) {
+        var b = 0,
+            b = "thin" == a ? 2 : "medium" == a ? 4 : "thick" == a ? 6 : parseInt(a);
+        isNaN(b) && (b = 0);
+        return b
+    }
+    var b = mxUtils.getCurrentStyle(this.container),
+        c = new mxRectangle;
+    c.x = a(b.borderLeftWidth) + parseInt(b.paddingLeft || 0);
+    c.y = a(b.borderTopWidth) + parseInt(b.paddingTop || 0);
+    c.width = a(b.borderRightWidth) + parseInt(b.paddingRight || 0);
+    c.height = a(b.borderBottomWidth) + parseInt(b.paddingBottom || 0);
+    return c
+};
+mxGraph.prototype.getPreferredPageSize = function(a, b, c) {
+    a = this.view.scale;
+    var d = this.view.translate,
+        e = this.pageFormat,
+        f = a * this.pageScale,
+        e = new mxRectangle(0, 0, e.width * f, e.height * f);
+    b = this.pageBreaksVisible ? Math.ceil(b / e.width) : 1;
+    c = this.pageBreaksVisible ? Math.ceil(c / e.height) : 1;
+    return new mxRectangle(0, 0, b * e.width + 2 + d.x / a, c * e.height + 2 + d.y / a)
+};
+mxGraph.prototype.sizeDidChange = function() {
+    var a = this.getGraphBounds();
+    if (null != this.container) {
+        var b = this.getBorder(),
+            c = Math.max(0, a.x + a.width + 1 + b),
+            b = Math.max(0, a.y + a.height + 1 + b);
+        null != this.minimumContainerSize && (c = Math.max(c, this.minimumContainerSize.width), b = Math.max(b, this.minimumContainerSize.height));
+        this.resizeContainer && this.doResizeContainer(c, b);
+        if (this.preferPageSize || !mxClient.IS_IE && this.pageVisible) {
+            var d = this.getPreferredPageSize(a, c, b);
+            null != d && (c = d.width, b = d.height)
+        }
+        null != this.minimumGraphSize &&
+            (c = Math.max(c, this.minimumGraphSize.width * this.view.scale), b = Math.max(b, this.minimumGraphSize.height * this.view.scale));
+        c = Math.ceil(c - 1);
+        b = Math.ceil(b - 1);
+        this.dialect == mxConstants.DIALECT_SVG ? (d = this.view.getDrawPane().ownerSVGElement, d.style.minWidth = Math.max(1, c) + "px", d.style.minHeight = Math.max(1, b) + "px", d.style.width = "100%", d.style.height = "100%") : mxClient.IS_QUIRKS ? this.view.updateHtmlCanvasSize(Math.max(1, c), Math.max(1, b)) : (this.view.canvas.style.minWidth = Math.max(1, c) + "px", this.view.canvas.style.minHeight =
+            Math.max(1, b) + "px");
+        this.updatePageBreaks(this.pageBreaksVisible, c - 1, b - 1)
+    }
+    this.fireEvent(new mxEventObject(mxEvent.SIZE, "bounds", a))
+};
+mxGraph.prototype.doResizeContainer = function(a, b) {
+    if (mxClient.IS_IE)
+        if (mxClient.IS_QUIRKS) {
+            var c = this.getBorderSizes();
+            a += Math.max(2, c.x + c.width + 1);
+            b += Math.max(2, c.y + c.height + 1)
+        } else 9 <= document.documentMode ? (a += 3, b += 5) : (a += 1, b += 1);
+    else b += 1;
+    null != this.maximumContainerSize && (a = Math.min(this.maximumContainerSize.width, a), b = Math.min(this.maximumContainerSize.height, b));
+    this.container.style.width = Math.ceil(a) + "px";
+    this.container.style.height = Math.ceil(b) + "px"
+};
+mxGraph.prototype.updatePageBreaks = function(a, b, c) {
+    var d = this.view.scale,
+        e = this.view.translate,
+        f = this.pageFormat,
+        g = d * this.pageScale,
+        e = new mxRectangle(d * e.x, d * e.y, f.width * g, f.height * g);
+    a = a && Math.min(e.width, e.height) > this.minPageBreakDist;
+    e.x = mxUtils.mod(e.x, e.width);
+    e.y = mxUtils.mod(e.y, e.height);
+    f = a ? Math.ceil((b - e.x) / e.width) : 0;
+    a = a ? Math.ceil((c - e.y) / e.height) : 0;
+    null == this.horizontalPageBreaks && 0 < f && (this.horizontalPageBreaks = []);
+    if (null != this.horizontalPageBreaks) {
+        for (g = 0; g <= f; g++) {
+            var h = [new mxPoint(e.x +
+                g * e.width, 1), new mxPoint(e.x + g * e.width, c)];
+            null != this.horizontalPageBreaks[g] ? (this.horizontalPageBreaks[g].scale = 1, this.horizontalPageBreaks[g].points = h, this.horizontalPageBreaks[g].redraw()) : (h = new mxPolyline(h, this.pageBreakColor, this.scale), h.dialect = this.dialect, h.isDashed = this.pageBreakDashed, h.scale = d, h.init(this.view.backgroundPane), h.redraw(), this.horizontalPageBreaks[g] = h)
+        }
+        for (g = f; g < this.horizontalPageBreaks.length; g++) this.horizontalPageBreaks[g].destroy();
+        this.horizontalPageBreaks.splice(f,
+            this.horizontalPageBreaks.length - f)
+    }
+    null == this.verticalPageBreaks && 0 < a && (this.verticalPageBreaks = []);
+    if (null != this.verticalPageBreaks) {
+        for (g = 0; g <= a; g++) h = [new mxPoint(1, e.y + g * e.height), new mxPoint(b, e.y + g * e.height)], null != this.verticalPageBreaks[g] ? (this.verticalPageBreaks[g].scale = 1, this.verticalPageBreaks[g].points = h, this.verticalPageBreaks[g].redraw()) : (h = new mxPolyline(h, this.pageBreakColor, d), h.dialect = this.dialect, h.isDashed = this.pageBreakDashed, h.scale = d, h.init(this.view.backgroundPane), h.redraw(),
+            this.verticalPageBreaks[g] = h);
+        for (g = a; g < this.verticalPageBreaks.length; g++) this.verticalPageBreaks[g].destroy();
+        this.verticalPageBreaks.splice(a, this.verticalPageBreaks.length - a)
+    }
+};
+mxGraph.prototype.getCellStyle = function(a) {
+    var b = this.model.getStyle(a),
+        c = null,
+        c = this.model.isEdge(a) ? this.stylesheet.getDefaultEdgeStyle() : this.stylesheet.getDefaultVertexStyle();
+    null != b && (c = this.postProcessCellStyle(this.stylesheet.getCellStyle(b, c)));
+    null == c && (c = mxGraph.prototype.EMPTY_ARRAY);
+    return c
+};
+mxGraph.prototype.postProcessCellStyle = function(a) {
+    if (null != a) {
+        var b = a[mxConstants.STYLE_IMAGE],
+            c = this.getImageFromBundles(b);
+        null != c ? a[mxConstants.STYLE_IMAGE] = c : c = b;
+        null != c && "data:image/" == c.substring(0, 11) && (b = c.indexOf(","), 0 < b && (c = c.substring(0, b) + ";base64," + c.substring(b + 1)), a[mxConstants.STYLE_IMAGE] = c)
+    }
+    return a
+};
+mxGraph.prototype.setCellStyle = function(a, b) {
+    b = b || this.getSelectionCells();
+    if (null != b) {
+        this.model.beginUpdate();
+        try {
+            for (var c = 0; c < b.length; c++) this.model.setStyle(b[c], a)
+        } finally {
+            this.model.endUpdate()
+        }
+    }
+};
+mxGraph.prototype.toggleCellStyle = function(a, b, c) {
+    c = c || this.getSelectionCell();
+    this.toggleCellStyles(a, b, [c])
+};
+mxGraph.prototype.toggleCellStyles = function(a, b, c) {
+    b = null != b ? b : !1;
+    c = c || this.getSelectionCells();
+    if (null != c && 0 < c.length) {
+        var d = this.view.getState(c[0]),
+            d = null != d ? d.style : this.getCellStyle(c[0]);
+        null != d && (b = mxUtils.getValue(d, a, b) ? 0 : 1, this.setCellStyles(a, b, c))
+    }
+};
+mxGraph.prototype.setCellStyles = function(a, b, c) {
+    c = c || this.getSelectionCells();
+    mxUtils.setCellStyles(this.model, c, a, b)
+};
+mxGraph.prototype.toggleCellStyleFlags = function(a, b, c) {
+    this.setCellStyleFlags(a, b, null, c)
+};
+mxGraph.prototype.setCellStyleFlags = function(a, b, c, d) {
+    d = d || this.getSelectionCells();
+    if (null != d && 0 < d.length) {
+        if (null == c) {
+            var e = this.view.getState(d[0]),
+                e = null != e ? e.style : this.getCellStyle(d[0]);
+            null != e && (c = (parseInt(e[a] || 0) & b) != b)
+        }
+        mxUtils.setCellStyleFlags(this.model, d, a, b, c)
+    }
+};
+mxGraph.prototype.alignCells = function(a, b, c) {
+    null == b && (b = this.getSelectionCells());
+    if (null != b && 1 < b.length) {
+        if (null == c)
+            for (var d = 0; d < b.length; d++) {
+                var e = this.getCellGeometry(b[d]);
+                if (null != e && !this.model.isEdge(b[d]))
+                    if (null == c)
+                        if (a == mxConstants.ALIGN_CENTER) {
+                            c = e.x + e.width / 2;
+                            break
+                        } else if (a == mxConstants.ALIGN_RIGHT) c = e.x + e.width;
+                else if (a == mxConstants.ALIGN_TOP) c = e.y;
+                else if (a == mxConstants.ALIGN_MIDDLE) {
+                    c = e.y + e.height / 2;
+                    break
+                } else c = a == mxConstants.ALIGN_BOTTOM ? e.y + e.height : e.x;
+                else c = a == mxConstants.ALIGN_RIGHT ?
+                    Math.max(c, e.x + e.width) : a == mxConstants.ALIGN_TOP ? Math.min(c, e.y) : a == mxConstants.ALIGN_BOTTOM ? Math.max(c, e.y + e.height) : Math.min(c, e.x)
+            }
+        if (null != c) {
+            this.model.beginUpdate();
+            try {
+                for (d = 0; d < b.length; d++) e = this.getCellGeometry(b[d]), null != e && !this.model.isEdge(b[d]) && (e = e.clone(), a == mxConstants.ALIGN_CENTER ? e.x = c - e.width / 2 : a == mxConstants.ALIGN_RIGHT ? e.x = c - e.width : a == mxConstants.ALIGN_TOP ? e.y = c : a == mxConstants.ALIGN_MIDDLE ? e.y = c - e.height / 2 : a == mxConstants.ALIGN_BOTTOM ? e.y = c - e.height : e.x = c, this.model.setGeometry(b[d],
+                    e));
+                this.fireEvent(new mxEventObject(mxEvent.ALIGN_CELLS, "align", a, "cells", b))
+            } finally {
+                this.model.endUpdate()
+            }
+        }
+    }
+    return b
+};
+mxGraph.prototype.flipEdge = function(a) {
+    if (null != a && null != this.alternateEdgeStyle) {
+        this.model.beginUpdate();
+        try {
+            var b = this.model.getStyle(a);
+            null == b || 0 == b.length ? this.model.setStyle(a, this.alternateEdgeStyle) : this.model.setStyle(a, null);
+            this.resetEdge(a);
+            this.fireEvent(new mxEventObject(mxEvent.FLIP_EDGE, "edge", a))
+        } finally {
+            this.model.endUpdate()
+        }
+    }
+    return a
+};
+mxGraph.prototype.addImageBundle = function(a) {
+    this.imageBundles.push(a)
+};
+mxGraph.prototype.removeImageBundle = function(a) {
+    for (var b = [], c = 0; c < this.imageBundles.length; c++) this.imageBundles[c] != a && b.push(this.imageBundles[c]);
+    this.imageBundles = b
+};
+mxGraph.prototype.getImageFromBundles = function(a) {
+    if (null != a)
+        for (var b = 0; b < this.imageBundles.length; b++) {
+            var c = this.imageBundles[b].getImage(a);
+            if (null != c) return c
+        }
+    return null
+};
+mxGraph.prototype.orderCells = function(a, b) {
+    null == b && (b = mxUtils.sortCells(this.getSelectionCells(), !0));
+    this.model.beginUpdate();
+    try {
+        this.cellsOrdered(b, a), this.fireEvent(new mxEventObject(mxEvent.ORDER_CELLS, "back", a, "cells", b))
+    } finally {
+        this.model.endUpdate()
+    }
+    return b
+};
+mxGraph.prototype.cellsOrdered = function(a, b) {
+    if (null != a) {
+        this.model.beginUpdate();
+        try {
+            for (var c = 0; c < a.length; c++) {
+                var d = this.model.getParent(a[c]);
+                b ? this.model.add(d, a[c], c) : this.model.add(d, a[c], this.model.getChildCount(d) - 1)
+            }
+            this.fireEvent(new mxEventObject(mxEvent.CELLS_ORDERED, "back", b, "cells", a))
+        } finally {
+            this.model.endUpdate()
+        }
+    }
+};
+mxGraph.prototype.groupCells = function(a, b, c) {
+    null == c && (c = mxUtils.sortCells(this.getSelectionCells(), !0));
+    c = this.getCellsForGroup(c);
+    null == a && (a = this.createGroupCell(c));
+    var d = this.getBoundsForGroup(a, c, b);
+    if (0 < c.length && null != d) {
+        var e = this.model.getParent(a);
+        null == e && (e = this.model.getParent(c[0]));
+        this.model.beginUpdate();
+        try {
+            null == this.getCellGeometry(a) && this.model.setGeometry(a, new mxGeometry);
+            var f = this.model.getChildCount(e);
+            this.cellsAdded([a], e, f, null, null, !1);
+            f = this.model.getChildCount(a);
+            this.cellsAdded(c, a, f, null, null, !1, !1);
+            this.cellsMoved(c, -d.x, -d.y, !1, !0);
+            this.cellsResized([a], [d]);
+            this.fireEvent(new mxEventObject(mxEvent.GROUP_CELLS, "group", a, "border", b, "cells", c))
+        } finally {
+            this.model.endUpdate()
+        }
+    }
+    return a
+};
+mxGraph.prototype.getCellsForGroup = function(a) {
+    var b = [];
+    if (null != a && 0 < a.length) {
+        var c = this.model.getParent(a[0]);
+        b.push(a[0]);
+        for (var d = 1; d < a.length; d++) this.model.getParent(a[d]) == c && b.push(a[d])
+    }
+    return b
+};
+mxGraph.prototype.getBoundsForGroup = function(a, b, c) {
+    b = this.getBoundingBoxFromGeometry(b);
+    null != b && (this.isSwimlane(a) && (a = this.getStartSize(a), b.x -= a.width, b.y -= a.height, b.width += a.width, b.height += a.height), b.x -= c, b.y -= c, b.width += 2 * c, b.height += 2 * c);
+    return b
+};
+mxGraph.prototype.createGroupCell = function(a) {
+    a = new mxCell("");
+    a.setVertex(!0);
+    a.setConnectable(!1);
+    return a
+};
+mxGraph.prototype.ungroupCells = function(a) {
+    var b = [];
+    if (null == a) {
+        a = this.getSelectionCells();
+        for (var c = [], d = 0; d < a.length; d++) 0 < this.model.getChildCount(a[d]) && c.push(a[d]);
+        a = c
+    }
+    if (null != a && 0 < a.length) {
+        this.model.beginUpdate();
+        try {
+            for (d = 0; d < a.length; d++) {
+                var e = this.model.getChildren(a[d]);
+                if (null != e && 0 < e.length) {
+                    var e = e.slice(),
+                        f = this.model.getParent(a[d]),
+                        g = this.model.getChildCount(f);
+                    this.cellsAdded(e, f, g, null, null, !0);
+                    b = b.concat(e)
+                }
+            }
+            this.cellsRemoved(this.addAllEdges(a));
+            this.fireEvent(new mxEventObject(mxEvent.UNGROUP_CELLS,
+                "cells", a))
+        } finally {
+            this.model.endUpdate()
+        }
+    }
+    return b
+};
+mxGraph.prototype.removeCellsFromParent = function(a) {
+    null == a && (a = this.getSelectionCells());
+    this.model.beginUpdate();
+    try {
+        var b = this.getDefaultParent(),
+            c = this.model.getChildCount(b);
+        this.cellsAdded(a, b, c, null, null, !0);
+        this.fireEvent(new mxEventObject(mxEvent.REMOVE_CELLS_FROM_PARENT, "cells", a))
+    } finally {
+        this.model.endUpdate()
+    }
+    return a
+};
+mxGraph.prototype.updateGroupBounds = function(a, b, c) {
+    null == a && (a = this.getSelectionCells());
+    b = null != b ? b : 0;
+    c = null != c ? c : !1;
+    this.model.beginUpdate();
+    try {
+        for (var d = 0; d < a.length; d++) {
+            var e = this.getCellGeometry(a[d]);
+            if (null != e) {
+                var f = this.getChildCells(a[d]);
+                if (null != f && 0 < f.length) {
+                    var g = this.getBoundingBoxFromGeometry(f);
+                    if (0 < g.width && 0 < g.height) {
+                        var h = this.isSwimlane(a[d]) ? this.getStartSize(a[d]) : new mxRectangle,
+                            e = e.clone();
+                        c && (e.x += g.x - h.width - b, e.y += g.y - h.height - b);
+                        e.width = g.width + h.width + 2 * b;
+                        e.height =
+                            g.height + h.height + 2 * b;
+                        this.model.setGeometry(a[d], e);
+                        this.moveCells(f, -g.x + h.width + b, -g.y + h.height + b)
+                    }
+                }
+            }
+        }
+    } finally {
+        this.model.endUpdate()
+    }
+    return a
+};
+mxGraph.prototype.cloneCells = function(a, b) {
+    b = null != b ? b : !0;
+    var c = null;
+    if (null != a) {
+        for (var d = {}, c = [], e = 0; e < a.length; e++) {
+            var f = mxCellPath.create(a[e]);
+            d[f] = a[e];
+            c.push(a[e])
+        }
+        if (0 < c.length)
+            for (var f = this.view.scale, g = this.view.translate, c = this.model.cloneCells(a, !0), e = 0; e < a.length; e++)
+                if (!b && this.model.isEdge(c[e]) && null != this.getEdgeValidationError(c[e], this.model.getTerminal(c[e], !0), this.model.getTerminal(c[e], !1))) c[e] = null;
+                else {
+                    var h = this.model.getGeometry(c[e]);
+                    if (null != h) {
+                        var k = this.view.getState(a[e]),
+                            l = this.view.getState(this.model.getParent(a[e]));
+                        if (null != k && null != l) {
+                            var m = l.origin.x,
+                                l = l.origin.y;
+                            if (this.model.isEdge(c[e])) {
+                                for (var k = k.absolutePoints, n = this.model.getTerminal(a[e], !0), p = mxCellPath.create(n); null != n && null == d[p];) n = this.model.getParent(n), p = mxCellPath.create(n);
+                                null == n && h.setTerminalPoint(new mxPoint(k[0].x / f - g.x, k[0].y / f - g.y), !0);
+                                n = this.model.getTerminal(a[e], !1);
+                                for (p = mxCellPath.create(n); null != n && null == d[p];) n = this.model.getParent(n), p = mxCellPath.create(n);
+                                null == n && (n = k.length -
+                                    1, h.setTerminalPoint(new mxPoint(k[n].x / f - g.x, k[n].y / f - g.y), !1));
+                                h = h.points;
+                                if (null != h)
+                                    for (k = 0; k < h.length; k++) h[k].x += m, h[k].y += l
+                            } else h.x += m, h.y += l
+                        }
+                    }
+                } else c = []
+    }
+    return c
+};
+mxGraph.prototype.insertVertex = function(a, b, c, d, e, f, g, h, k) {
+    b = this.createVertex(a, b, c, d, e, f, g, h, k);
+    return this.addCell(b, a)
+};
+mxGraph.prototype.createVertex = function(a, b, c, d, e, f, g, h, k) {
+    a = new mxGeometry(d, e, f, g);
+    a.relative = null != k ? k : !1;
+    c = new mxCell(c, a, h);
+    c.setId(b);
+    c.setVertex(!0);
+    c.setConnectable(!0);
+    return c
+};
+mxGraph.prototype.insertEdge = function(a, b, c, d, e, f) {
+    b = this.createEdge(a, b, c, d, e, f);
+    return this.addEdge(b, a, d, e)
+};
+mxGraph.prototype.createEdge = function(a, b, c, d, e, f) {
+    a = new mxCell(c, new mxGeometry, f);
+    a.setId(b);
+    a.setEdge(!0);
+    a.geometry.relative = !0;
+    return a
+};
+mxGraph.prototype.addEdge = function(a, b, c, d, e) {
+    return this.addCell(a, b, e, c, d)
+};
+mxGraph.prototype.addCell = function(a, b, c, d, e) {
+    return this.addCells([a], b, c, d, e)[0]
+};
+mxGraph.prototype.addCells = function(a, b, c, d, e) {
+    null == b && (b = this.getDefaultParent());
+    null == c && (c = this.model.getChildCount(b));
+    this.model.beginUpdate();
+    try {
+        this.cellsAdded(a, b, c, d, e, !1, !0), this.fireEvent(new mxEventObject(mxEvent.ADD_CELLS, "cells", a, "parent", b, "index", c, "source", d, "target", e))
+    } finally {
+        this.model.endUpdate()
+    }
+    return a
+};
+mxGraph.prototype.cellsAdded = function(a, b, c, d, e, f, g) {
+    if (null != a && null != b && null != c) {
+        this.model.beginUpdate();
+        try {
+            for (var h = f ? this.view.getState(b) : null, k = null != h ? h.origin : null, l = new mxPoint(0, 0), h = 0; h < a.length; h++)
+                if (null == a[h]) c--;
+                else {
+                    var m = this.model.getParent(a[h]);
+                    if (null != k && a[h] != b && b != m) {
+                        var n = this.view.getState(m),
+                            p = null != n ? n.origin : l,
+                            q = this.model.getGeometry(a[h]);
+                        if (null != q) {
+                            var s = p.x - k.x,
+                                r = p.y - k.y,
+                                q = q.clone();
+                            q.translate(s, r);
+                            !q.relative && (this.model.isVertex(a[h]) && !this.isAllowNegativeCoordinates()) &&
+                                (q.x = Math.max(0, q.x), q.y = Math.max(0, q.y));
+                            this.model.setGeometry(a[h], q)
+                        }
+                    }
+                    b == m && c + h > this.model.getChildCount(b) && c--;
+                    this.model.add(b, a[h], c + h);
+                    this.isExtendParentsOnAdd() && this.isExtendParent(a[h]) && this.extendParent(a[h]);
+                    (null == g || g) && this.constrainChild(a[h]);
+                    null != d && this.cellConnected(a[h], d, !0);
+                    null != e && this.cellConnected(a[h], e, !1)
+                }
+            this.fireEvent(new mxEventObject(mxEvent.CELLS_ADDED, "cells", a, "parent", b, "index", c, "source", d, "target", e, "absolute", f))
+        } finally {
+            this.model.endUpdate()
+        }
+    }
+};
+mxGraph.prototype.removeCells = function(a, b) {
+    b = null != b ? b : !0;
+    null == a && (a = this.getDeletableCells(this.getSelectionCells()));
+    b && (a = this.getDeletableCells(this.addAllEdges(a)));
+    this.model.beginUpdate();
+    try {
+        this.cellsRemoved(a), this.fireEvent(new mxEventObject(mxEvent.REMOVE_CELLS, "cells", a, "includeEdges", b))
+    } finally {
+        this.model.endUpdate()
+    }
+    return a
+};
+mxGraph.prototype.cellsRemoved = function(a) {
+    if (null != a && 0 < a.length) {
+        var b = this.view.scale,
+            c = this.view.translate;
+        this.model.beginUpdate();
+        try {
+            for (var d = {}, e = 0; e < a.length; e++) {
+                var f = mxCellPath.create(a[e]);
+                d[f] = a[e]
+            }
+            for (e = 0; e < a.length; e++) {
+                for (var g = this.getConnections(a[e]), h = 0; h < g.length; h++)
+                    if (f = mxCellPath.create(g[h]), null == d[f]) {
+                        var k = this.model.getGeometry(g[h]);
+                        if (null != k) {
+                            var l = this.view.getState(g[h]);
+                            if (null != l) {
+                                var k = k.clone(),
+                                    m = l.getVisibleTerminal(!0) == a[e],
+                                    n = l.absolutePoints,
+                                    p = m ? 0 : n.length -
+                                    1;
+                                k.setTerminalPoint(new mxPoint(n[p].x / b - c.x, n[p].y / b - c.y), m);
+                                this.model.setTerminal(g[h], null, m);
+                                this.model.setGeometry(g[h], k)
+                            }
+                        }
+                    }
+                this.model.remove(a[e])
+            }
+            this.fireEvent(new mxEventObject(mxEvent.CELLS_REMOVED, "cells", a))
+        } finally {
+            this.model.endUpdate()
+        }
+    }
+};
+mxGraph.prototype.splitEdge = function(a, b, c, d, e) {
+    d = d || 0;
+    e = e || 0;
+    null == c && (c = this.cloneCells([a])[0]);
+    var f = this.model.getParent(a),
+        g = this.model.getTerminal(a, !0);
+    this.model.beginUpdate();
+    try {
+        this.cellsMoved(b, d, e, !1, !1), this.cellsAdded(b, f, this.model.getChildCount(f), null, null, !0), this.cellsAdded([c], f, this.model.getChildCount(f), g, b[0], !1), this.cellConnected(a, b[0], !0), this.fireEvent(new mxEventObject(mxEvent.SPLIT_EDGE, "edge", a, "cells", b, "newEdge", c, "dx", d, "dy", e))
+    } finally {
+        this.model.endUpdate()
+    }
+    return c
+};
+mxGraph.prototype.toggleCells = function(a, b, c) {
+    null == b && (b = this.getSelectionCells());
+    c && (b = this.addAllEdges(b));
+    this.model.beginUpdate();
+    try {
+        this.cellsToggled(b, a), this.fireEvent(new mxEventObject(mxEvent.TOGGLE_CELLS, "show", a, "cells", b, "includeEdges", c))
+    } finally {
+        this.model.endUpdate()
+    }
+    return b
+};
+mxGraph.prototype.cellsToggled = function(a, b) {
+    if (null != a && 0 < a.length) {
+        this.model.beginUpdate();
+        try {
+            for (var c = 0; c < a.length; c++) this.model.setVisible(a[c], b)
+        } finally {
+            this.model.endUpdate()
+        }
+    }
+};
+mxGraph.prototype.foldCells = function(a, b, c, d) {
+    b = null != b ? b : !1;
+    null == c && (c = this.getFoldableCells(this.getSelectionCells(), a));
+    this.stopEditing(!1);
+    this.model.beginUpdate();
+    try {
+        this.cellsFolded(c, a, b, d), this.fireEvent(new mxEventObject(mxEvent.FOLD_CELLS, "collapse", a, "recurse", b, "cells", c))
+    } finally {
+        this.model.endUpdate()
+    }
+    return c
+};
+mxGraph.prototype.cellsFolded = function(a, b, c, d) {
+    if (null != a && 0 < a.length) {
+        this.model.beginUpdate();
+        try {
+            for (var e = 0; e < a.length; e++)
+                if ((!d || this.isCellFoldable(a[e], b)) && b != this.isCellCollapsed(a[e]))
+                    if (this.model.setCollapsed(a[e], b), this.swapBounds(a[e], b), this.isExtendParent(a[e]) && this.extendParent(a[e]), c) {
+                        var f = this.model.getChildren(a[e]);
+                        this.foldCells(f, b, c)
+                    }
+            this.fireEvent(new mxEventObject(mxEvent.CELLS_FOLDED, "cells", a, "collapse", b, "recurse", c))
+        } finally {
+            this.model.endUpdate()
+        }
+    }
+};
+mxGraph.prototype.swapBounds = function(a, b) {
+    if (null != a) {
+        var c = this.model.getGeometry(a);
+        null != c && (c = c.clone(), this.updateAlternateBounds(a, c, b), c.swap(), this.model.setGeometry(a, c))
+    }
+};
+mxGraph.prototype.updateAlternateBounds = function(a, b, c) {
+    if (null != a && null != b) {
+        c = this.view.getState(a);
+        c = null != c ? c.style : this.getCellStyle(a);
+        if (null == b.alternateBounds) {
+            var d = b;
+            this.collapseToPreferredSize && (a = this.getPreferredSizeForCell(a), null != a && (d = a, a = mxUtils.getValue(c, mxConstants.STYLE_STARTSIZE), 0 < a && (d.height = Math.max(d.height, a))));
+            b.alternateBounds = new mxRectangle(0, 0, d.width, d.height)
+        }
+        if (null != b.alternateBounds) {
+            b.alternateBounds.x = b.x;
+            b.alternateBounds.y = b.y;
+            var e = mxUtils.toRadians(c[mxConstants.STYLE_ROTATION] ||
+                "0");
+            0 != e && (a = b.alternateBounds.getCenterX() - b.getCenterX(), c = b.alternateBounds.getCenterY() - b.getCenterY(), d = Math.cos(e), e = Math.sin(e), b.alternateBounds.x += d * a - e * c - a, b.alternateBounds.y += e * a + d * c - c)
+        }
+    }
+};
+mxGraph.prototype.addAllEdges = function(a) {
+    var b = a.slice();
+    return b = b.concat(this.getAllEdges(a))
+};
+mxGraph.prototype.getAllEdges = function(a) {
+    var b = [];
+    if (null != a)
+        for (var c = 0; c < a.length; c++) {
+            for (var d = this.model.getEdgeCount(a[c]), e = 0; e < d; e++) b.push(this.model.getEdgeAt(a[c], e));
+            d = this.model.getChildren(a[c]);
+            b = b.concat(this.getAllEdges(d))
+        }
+    return b
+};
+mxGraph.prototype.updateCellSize = function(a, b) {
+    b = null != b ? b : !1;
+    this.model.beginUpdate();
+    try {
+        this.cellSizeUpdated(a, b), this.fireEvent(new mxEventObject(mxEvent.UPDATE_CELL_SIZE, "cell", a, "ignoreChildren", b))
+    } finally {
+        this.model.endUpdate()
+    }
+    return a
+};
+mxGraph.prototype.cellSizeUpdated = function(a, b) {
+    if (null != a) {
+        this.model.beginUpdate();
+        try {
+            var c = this.getPreferredSizeForCell(a),
+                d = this.model.getGeometry(a);
+            if (null != c && null != d) {
+                var e = this.isCellCollapsed(a),
+                    d = d.clone();
+                if (this.isSwimlane(a)) {
+                    var f = this.view.getState(a),
+                        g = null != f ? f.style : this.getCellStyle(a),
+                        h = this.model.getStyle(a);
+                    null == h && (h = "");
+                    mxUtils.getValue(g, mxConstants.STYLE_HORIZONTAL, !0) ? (h = mxUtils.setStyle(h, mxConstants.STYLE_STARTSIZE, c.height + 8), e && (d.height = c.height + 8), d.width = c.width) :
+                        (h = mxUtils.setStyle(h, mxConstants.STYLE_STARTSIZE, c.width + 8), e && (d.width = c.width + 8), d.height = c.height);
+                    this.model.setStyle(a, h)
+                } else d.width = c.width, d.height = c.height;
+                if (!b && !e) {
+                    var k = this.view.getBounds(this.model.getChildren(a));
+                    if (null != k) {
+                        var l = this.view.translate,
+                            m = this.view.scale,
+                            n = (k.y + k.height) / m - d.y - l.y;
+                        d.width = Math.max(d.width, (k.x + k.width) / m - d.x - l.x);
+                        d.height = Math.max(d.height, n)
+                    }
+                }
+                this.cellsResized([a], [d])
+            }
+        } finally {
+            this.model.endUpdate()
+        }
+    }
+};
+mxGraph.prototype.getPreferredSizeForCell = function(a) {
+    var b = null;
+    if (null != a) {
+        var c = this.view.getState(a),
+            d = null != c ? c.style : this.getCellStyle(a);
+        if (null != d && !this.model.isEdge(a)) {
+            var e = d[mxConstants.STYLE_FONTSIZE] || mxConstants.DEFAULT_FONTSIZE,
+                f = 0,
+                b = 0;
+            if ((null != this.getImage(c) || null != d[mxConstants.STYLE_IMAGE]) && d[mxConstants.STYLE_SHAPE] == mxConstants.SHAPE_LABEL) d[mxConstants.STYLE_VERTICAL_ALIGN] == mxConstants.ALIGN_MIDDLE && (f += parseFloat(d[mxConstants.STYLE_IMAGE_WIDTH]) || mxLabel.prototype.imageSize),
+                d[mxConstants.STYLE_ALIGN] != mxConstants.ALIGN_CENTER && (b += parseFloat(d[mxConstants.STYLE_IMAGE_HEIGHT]) || mxLabel.prototype.imageSize);
+            f += 2 * (d[mxConstants.STYLE_SPACING] || 0);
+            f += d[mxConstants.STYLE_SPACING_LEFT] || 0;
+            f += d[mxConstants.STYLE_SPACING_RIGHT] || 0;
+            b += 2 * (d[mxConstants.STYLE_SPACING] || 0);
+            b += d[mxConstants.STYLE_SPACING_TOP] || 0;
+            b += d[mxConstants.STYLE_SPACING_BOTTOM] || 0;
+            c = this.getFoldingImage(c);
+            null != c && (f += c.width + 8);
+            c = this.getLabel(a);
+            null != c && 0 < c.length ? (this.isHtmlLabel(a) || (c = c.replace(/\n/g,
+                "\x3cbr\x3e")), e = mxUtils.getSizeForString(c, e, d[mxConstants.STYLE_FONTFAMILY]), a = e.width + f, b = e.height + b, mxUtils.getValue(d, mxConstants.STYLE_HORIZONTAL, !0) || (d = b, b = a, a = d), this.gridEnabled && (a = this.snap(a + this.gridSize / 2), b = this.snap(b + this.gridSize / 2)), b = new mxRectangle(0, 0, a, b)) : (d = 4 * this.gridSize, b = new mxRectangle(0, 0, d, d))
+        }
+    }
+    return b
+};
+mxGraph.prototype.handleGesture = function(a, b) {
+    if (0.2 < Math.abs(1 - b.scale)) {
+        var c = this.view.scale,
+            d = this.view.translate,
+            e = a.width * b.scale,
+            f = a.height * b.scale,
+            g = a.y - (f - a.height) / 2,
+            c = new mxRectangle(this.snap((a.x - (e - a.width) / 2) / c) - d.x, this.snap(g / c) - d.y, this.snap(e / c), this.snap(f / c));
+        this.resizeCell(a.cell, c)
+    }
+};
+mxGraph.prototype.resizeCell = function(a, b) {
+    return this.resizeCells([a], [b])[0]
+};
+mxGraph.prototype.resizeCells = function(a, b) {
+    this.model.beginUpdate();
+    try {
+        this.cellsResized(a, b), this.fireEvent(new mxEventObject(mxEvent.RESIZE_CELLS, "cells", a, "bounds", b))
+    } finally {
+        this.model.endUpdate()
+    }
+    return a
+};
+mxGraph.prototype.cellsResized = function(a, b) {
+    if (null != a && null != b && a.length == b.length) {
+        this.model.beginUpdate();
+        try {
+            for (var c = 0; c < a.length; c++) {
+                var d = b[c],
+                    e = this.model.getGeometry(a[c]);
+                if (null != e && (e.x != d.x || e.y != d.y || e.width != d.width || e.height != d.height)) {
+                    e = e.clone();
+                    if (e.relative) {
+                        var f = e.offset;
+                        null != f && (f.x += d.x - e.x, f.y += d.y - e.y)
+                    } else e.x = d.x, e.y = d.y;
+                    e.width = d.width;
+                    e.height = d.height;
+                    !e.relative && (this.model.isVertex(a[c]) && !this.isAllowNegativeCoordinates()) && (e.x = Math.max(0, e.x), e.y = Math.max(0,
+                        e.y));
+                    this.model.setGeometry(a[c], e);
+                    this.isExtendParent(a[c]) && this.extendParent(a[c])
+                }
+            }
+            this.resetEdgesOnResize && this.resetEdges(a);
+            this.fireEvent(new mxEventObject(mxEvent.CELLS_RESIZED, "cells", a, "bounds", b))
+        } finally {
+            this.model.endUpdate()
+        }
+    }
+};
+mxGraph.prototype.extendParent = function(a) {
+    if (null != a) {
+        var b = this.model.getParent(a),
+            c = this.model.getGeometry(b);
+        if (null != b && (null != c && !this.isCellCollapsed(b)) && (a = this.model.getGeometry(a), null != a && (c.width < a.x + a.width || c.height < a.y + a.height))) c = c.clone(), c.width = Math.max(c.width, a.x + a.width), c.height = Math.max(c.height, a.y + a.height), this.cellsResized([b], [c])
+    }
+};
+mxGraph.prototype.importCells = function(a, b, c, d, e) {
+    return this.moveCells(a, b, c, !0, d, e)
+};
+mxGraph.prototype.moveCells = function(a, b, c, d, e, f) {
+    b = null != b ? b : 0;
+    c = null != c ? c : 0;
+    d = null != d ? d : !1;
+    if (null != a && (0 != b || 0 != c || d || null != e)) {
+        this.model.beginUpdate();
+        try {
+            d && (a = this.cloneCells(a, this.isCloneInvalidEdges()), null == e && (e = this.getDefaultParent()));
+            var g = this.isAllowNegativeCoordinates();
+            null != e && this.setAllowNegativeCoordinates(!0);
+            this.cellsMoved(a, b, c, !d && this.isDisconnectOnMove() && this.isAllowDanglingEdges(), null == e);
+            this.setAllowNegativeCoordinates(g);
+            if (null != e) {
+                var h = this.model.getChildCount(e);
+                this.cellsAdded(a, e, h, null, null, !0)
+            }
+            this.fireEvent(new mxEventObject(mxEvent.MOVE_CELLS, "cells", a, "dx", b, "dy", c, "clone", d, "target", e, "event", f))
+        } finally {
+            this.model.endUpdate()
+        }
+    }
+    return a
+};
+mxGraph.prototype.cellsMoved = function(a, b, c, d, e) {
+    if (null != a && (0 != b || 0 != c)) {
+        this.model.beginUpdate();
+        try {
+            d && this.disconnectGraph(a);
+            for (var f = 0; f < a.length; f++) this.translateCell(a[f], b, c), e && this.constrainChild(a[f]);
+            this.resetEdgesOnMove && this.resetEdges(a);
+            this.fireEvent(new mxEventObject(mxEvent.CELLS_MOVED, "cells", a, "dx", c, "dy", c, "disconnect", d))
+        } finally {
+            this.model.endUpdate()
+        }
+    }
+};
+mxGraph.prototype.translateCell = function(a, b, c) {
+    var d = this.model.getGeometry(a);
+    null != d && (d = d.clone(), d.translate(b, c), !d.relative && (this.model.isVertex(a) && !this.isAllowNegativeCoordinates()) && (d.x = Math.max(0, d.x), d.y = Math.max(0, d.y)), d.relative && !this.model.isEdge(a) && (null == d.offset ? d.offset = new mxPoint(b, c) : (d.offset.x += b, d.offset.y += c)), this.model.setGeometry(a, d))
+};
+mxGraph.prototype.getCellContainmentArea = function(a) {
+    if (null != a && !this.model.isEdge(a)) {
+        var b = this.model.getParent(a);
+        if (b == this.getDefaultParent() || b == this.getCurrentRoot()) return this.getMaximumGraphBounds();
+        if (null != b && b != this.getDefaultParent()) {
+            var c = this.model.getGeometry(b);
+            if (null != c) {
+                var d = a = 0,
+                    e = c.width,
+                    c = c.height;
+                this.isSwimlane(b) && (b = this.getStartSize(b), a = b.width, e -= b.width, d = b.height, c -= b.height);
+                return new mxRectangle(a, d, e, c)
+            }
+        }
+    }
+    return null
+};
+mxGraph.prototype.getMaximumGraphBounds = function() {
+    return this.maximumGraphBounds
+};
+mxGraph.prototype.constrainChild = function(a) {
+    if (null != a) {
+        var b = this.model.getGeometry(a),
+            c = this.isConstrainChild(a) ? this.getCellContainmentArea(a) : this.getMaximumGraphBounds();
+        if (null != b && null != c && !b.relative && (b.x < c.x || b.y < c.y || c.width < b.x + b.width || c.height < b.y + b.height)) a = this.getOverlap(a), 0 < c.width && (b.x = Math.min(b.x, c.x + c.width - (1 - a) * b.width)), 0 < c.height && (b.y = Math.min(b.y, c.y + c.height - (1 - a) * b.height)), b.x = Math.max(b.x, c.x - b.width * a), b.y = Math.max(b.y, c.y - b.height * a)
+    }
+};
+mxGraph.prototype.resetEdges = function(a) {
+    if (null != a) {
+        for (var b = {}, c = 0; c < a.length; c++) {
+            var d = mxCellPath.create(a[c]);
+            b[d] = a[c]
+        }
+        this.model.beginUpdate();
+        try {
+            for (c = 0; c < a.length; c++) {
+                var e = this.model.getEdges(a[c]);
+                if (null != e)
+                    for (d = 0; d < e.length; d++) {
+                        var f = this.view.getState(e[d]),
+                            g = null != f ? f.getVisibleTerminal(!0) : this.view.getVisibleTerminal(e[d], !0),
+                            h = null != f ? f.getVisibleTerminal(!1) : this.view.getVisibleTerminal(e[d], !1),
+                            k = mxCellPath.create(g),
+                            l = mxCellPath.create(h);
+                        (null == b[k] || null == b[l]) && this.resetEdge(e[d])
+                    }
+                this.resetEdges(this.model.getChildren(a[c]))
+            }
+        } finally {
+            this.model.endUpdate()
+        }
+    }
+};
+mxGraph.prototype.resetEdge = function(a) {
+    var b = this.model.getGeometry(a);
+    null != b && (null != b.points && 0 < b.points.length) && (b = b.clone(), b.points = [], this.model.setGeometry(a, b));
+    return a
+};
+mxGraph.prototype.getAllConnectionConstraints = function(a, b) {
+    return null != a && null != a.shape && null != a.shape.stencil ? a.shape.stencil.constraints : null
+};
+mxGraph.prototype.getConnectionConstraint = function(a, b, c) {
+    b = null;
+    var d = a.style[c ? mxConstants.STYLE_EXIT_X : mxConstants.STYLE_ENTRY_X];
+    if (null != d) {
+        var e = a.style[c ? mxConstants.STYLE_EXIT_Y : mxConstants.STYLE_ENTRY_Y];
+        null != e && (b = new mxPoint(parseFloat(d), parseFloat(e)))
+    }
+    d = !1;
+    null != b && (d = mxUtils.getValue(a.style, c ? mxConstants.STYLE_EXIT_PERIMETER : mxConstants.STYLE_ENTRY_PERIMETER, !0));
+    return new mxConnectionConstraint(b, d)
+};
+mxGraph.prototype.setConnectionConstraint = function(a, b, c, d) {
+    if (null != d) {
+        this.model.beginUpdate();
+        try {
+            null == d || null == d.point ? (this.setCellStyles(c ? mxConstants.STYLE_EXIT_X : mxConstants.STYLE_ENTRY_X, null, [a]), this.setCellStyles(c ? mxConstants.STYLE_EXIT_Y : mxConstants.STYLE_ENTRY_Y, null, [a]), this.setCellStyles(c ? mxConstants.STYLE_EXIT_PERIMETER : mxConstants.STYLE_ENTRY_PERIMETER, null, [a])) : null != d.point && (this.setCellStyles(c ? mxConstants.STYLE_EXIT_X : mxConstants.STYLE_ENTRY_X, d.point.x, [a]), this.setCellStyles(c ?
+                mxConstants.STYLE_EXIT_Y : mxConstants.STYLE_ENTRY_Y, d.point.y, [a]), d.perimeter ? this.setCellStyles(c ? mxConstants.STYLE_EXIT_PERIMETER : mxConstants.STYLE_ENTRY_PERIMETER, null, [a]) : this.setCellStyles(c ? mxConstants.STYLE_EXIT_PERIMETER : mxConstants.STYLE_ENTRY_PERIMETER, "0", [a]))
+        } finally {
+            this.model.endUpdate()
+        }
+    }
+};
+mxGraph.prototype.getConnectionPoint = function(a, b) {
+    var c = null;
+    if (null != a) {
+        var d = this.view.getPerimeterBounds(a),
+            e = new mxPoint(d.getCenterX(), d.getCenterY()),
+            f = a.style[mxConstants.STYLE_DIRECTION],
+            g = 0;
+        if (null != f && ("north" == f ? g += 270 : "west" == f ? g += 180 : "south" == f && (g += 90), "north" == f || "south" == f)) {
+            d.x += d.width / 2 - d.height / 2;
+            d.y += d.height / 2 - d.width / 2;
+            var h = d.width;
+            d.width = d.height;
+            d.height = h
+        }
+        if (null != b.point) {
+            var k = c = 1,
+                l = 0,
+                m = 0;
+            if (this.getModel().isVertex(a.cell)) {
+                var n = a.style[mxConstants.STYLE_FLIPH],
+                    p =
+                    a.style[mxConstants.STYLE_FLIPV];
+                null != a.shape.stencil && (n = 1 == mxUtils.getValue(a.style, "stencilFlipH", 0) || n, p = 1 == mxUtils.getValue(a.style, "stencilFlipV", 0) || p);
+                if ("north" == f || "south" == f) h = n, n = p, p = h;
+                n && (c = -1, l = -d.width);
+                p && (k = -1, m = -d.height)
+            }
+            c = new mxPoint(d.x + b.point.x * d.width * c - l, d.y + b.point.y * d.height * k - m)
+        }
+        f = a.style[mxConstants.STYLE_ROTATION] || 0;
+        b.perimeter ? (0 != g && null != c && (h = d = 0, 90 == g ? h = 1 : 180 == g ? d = -1 : 270 == f && (h = -1), c = mxUtils.getRotatedPoint(c, d, h, e)), null != c && b.perimeter && (c = this.view.getPerimeterPoint(a,
+            c, !1))) : f += g;
+        0 != f && null != c && (g = mxUtils.toRadians(f), d = Math.cos(g), h = Math.sin(g), c = mxUtils.getRotatedPoint(c, d, h, e))
+    }
+    return c
+};
+mxGraph.prototype.connectCell = function(a, b, c, d) {
+    this.model.beginUpdate();
+    try {
+        var e = this.model.getTerminal(a, c);
+        this.cellConnected(a, b, c, d);
+        this.fireEvent(new mxEventObject(mxEvent.CONNECT_CELL, "edge", a, "terminal", b, "source", c, "previous", e))
+    } finally {
+        this.model.endUpdate()
+    }
+    return a
+};
+mxGraph.prototype.cellConnected = function(a, b, c, d) {
+    if (null != a) {
+        this.model.beginUpdate();
+        try {
+            var e = this.model.getTerminal(a, c);
+            this.setConnectionConstraint(a, b, c, d);
+            this.isPortsEnabled() && (d = null, this.isPort(b) && (d = b.getId(), b = this.getTerminalForPort(b, c)), this.setCellStyles(c ? mxConstants.STYLE_SOURCE_PORT : mxConstants.STYLE_TARGET_PORT, d, [a]));
+            this.model.setTerminal(a, b, c);
+            this.resetEdgesOnConnect && this.resetEdge(a);
+            this.fireEvent(new mxEventObject(mxEvent.CELL_CONNECTED, "edge", a, "terminal", b, "source",
+                c, "previous", e))
+        } finally {
+            this.model.endUpdate()
+        }
+    }
+};
+mxGraph.prototype.disconnectGraph = function(a) {
+    if (null != a) {
+        this.model.beginUpdate();
+        try {
+            for (var b = this.view.scale, c = this.view.translate, d = {}, e = 0; e < a.length; e++) {
+                var f = mxCellPath.create(a[e]);
+                d[f] = a[e]
+            }
+            for (e = 0; e < a.length; e++)
+                if (this.model.isEdge(a[e])) {
+                    var g = this.model.getGeometry(a[e]);
+                    if (null != g) {
+                        var h = this.view.getState(a[e]),
+                            k = this.view.getState(this.model.getParent(a[e]));
+                        if (null != h && null != k) {
+                            var g = g.clone(),
+                                l = -k.origin.x,
+                                m = -k.origin.y,
+                                n = h.absolutePoints,
+                                p = this.model.getTerminal(a[e], !0);
+                            if (null !=
+                                p && this.isCellDisconnectable(a[e], p, !0)) {
+                                for (var q = mxCellPath.create(p); null != p && null == d[q];) p = this.model.getParent(p), q = mxCellPath.create(p);
+                                null == p && (g.setTerminalPoint(new mxPoint(n[0].x / b - c.x + l, n[0].y / b - c.y + m), !0), this.model.setTerminal(a[e], null, !0))
+                            }
+                            var s = this.model.getTerminal(a[e], !1);
+                            if (null != s && this.isCellDisconnectable(a[e], s, !1)) {
+                                for (var r = mxCellPath.create(s); null != s && null == d[r];) s = this.model.getParent(s), r = mxCellPath.create(s);
+                                if (null == s) {
+                                    var t = n.length - 1;
+                                    g.setTerminalPoint(new mxPoint(n[t].x /
+                                        b - c.x + l, n[t].y / b - c.y + m), !1);
+                                    this.model.setTerminal(a[e], null, !1)
+                                }
+                            }
+                            this.model.setGeometry(a[e], g)
+                        }
+                    }
+                }
+        } finally {
+            this.model.endUpdate()
+        }
+    }
+};
+mxGraph.prototype.getCurrentRoot = function() {
+    return this.view.currentRoot
+};
+mxGraph.prototype.getTranslateForRoot = function(a) {
+    return null
+};
+mxGraph.prototype.isPort = function(a) {
+    return !1
+};
+mxGraph.prototype.getTerminalForPort = function(a, b) {
+    return this.model.getParent(a)
+};
+mxGraph.prototype.getChildOffsetForCell = function(a) {
+    return null
+};
+mxGraph.prototype.enterGroup = function(a) {
+    a = a || this.getSelectionCell();
+    null != a && this.isValidRoot(a) && (this.view.setCurrentRoot(a), this.clearSelection())
+};
+mxGraph.prototype.exitGroup = function() {
+    var a = this.model.getRoot(),
+        b = this.getCurrentRoot();
+    if (null != b) {
+        for (var c = this.model.getParent(b); c != a && !this.isValidRoot(c) && this.model.getParent(c) != a;) c = this.model.getParent(c);
+        c == a || this.model.getParent(c) == a ? this.view.setCurrentRoot(null) : this.view.setCurrentRoot(c);
+        null != this.view.getState(b) && this.setSelectionCell(b)
+    }
+};
+mxGraph.prototype.home = function() {
+    var a = this.getCurrentRoot();
+    null != a && (this.view.setCurrentRoot(null), null != this.view.getState(a) && this.setSelectionCell(a))
+};
+mxGraph.prototype.isValidRoot = function(a) {
+    return null != a
+};
+mxGraph.prototype.getGraphBounds = function() {
+    return this.view.getGraphBounds()
+};
+mxGraph.prototype.getCellBounds = function(a, b, c) {
+    var d = [a];
+    b && (d = d.concat(this.model.getEdges(a)));
+    d = this.view.getBounds(d);
+    if (c) {
+        c = this.model.getChildCount(a);
+        for (var e = 0; e < c; e++) {
+            var f = this.getCellBounds(this.model.getChildAt(a, e), b, !0);
+            null != d ? d.add(f) : d = f
+        }
+    }
+    return d
+};
+mxGraph.prototype.getBoundingBoxFromGeometry = function(a, b) {
+    b = null != b ? b : !1;
+    var c = null;
+    if (null != a)
+        for (var d = 0; d < a.length; d++)
+            if (b || this.model.isVertex(a[d])) {
+                var e = this.getCellGeometry(a[d]);
+                if (null != e) {
+                    var f = e.points;
+                    if (null != f && 0 < f.length) {
+                        for (var g = new mxRectangle(f[0].x, f[0].y, 0, 0), h = function(a) {
+                                null != a && g.add(new mxRectangle(a.x, a.y, 0, 0))
+                            }, k = 1; k < f.length; k++) h(f[k]);
+                        h(e.getTerminalPoint(!0));
+                        h(e.getTerminalPoint(!1))
+                    }
+                    null == c ? c = new mxRectangle(e.x, e.y, e.width, e.height) : c.add(e)
+                }
+            }
+    return c
+};
+mxGraph.prototype.refresh = function(a) {
+    this.view.clear(a, null == a);
+    this.view.validate();
+    this.sizeDidChange();
+    this.fireEvent(new mxEventObject(mxEvent.REFRESH))
+};
+mxGraph.prototype.snap = function(a) {
+    this.gridEnabled && (a = Math.round(a / this.gridSize) * this.gridSize);
+    return a
+};
+mxGraph.prototype.panGraph = function(a, b) {
+    if (this.useScrollbarsForPanning && mxUtils.hasScrollbars(this.container)) this.container.scrollLeft = -a, this.container.scrollTop = -b;
+    else {
+        var c = this.view.getCanvas();
+        if (this.dialect == mxConstants.DIALECT_SVG)
+            if (0 == a && 0 == b) {
+                if (mxClient.IS_IE ? c.setAttribute("transform", "translate(" + a + "," + b + ")") : c.removeAttribute("transform"), null != this.shiftPreview1) {
+                    for (var d = this.shiftPreview1.firstChild; null != d;) {
+                        var e = d.nextSibling;
+                        this.container.appendChild(d);
+                        d = e
+                    }
+                    this.shiftPreview1.parentNode.removeChild(this.shiftPreview1);
+                    this.shiftPreview1 = null;
+                    this.container.appendChild(c.parentNode);
+                    for (d = this.shiftPreview2.firstChild; null != d;) e = d.nextSibling, this.container.appendChild(d), d = e;
+                    this.shiftPreview2.parentNode.removeChild(this.shiftPreview2);
+                    this.shiftPreview2 = null
+                }
+            } else {
+                c.setAttribute("transform", "translate(" + a + "," + b + ")");
+                if (null == this.shiftPreview1) {
+                    this.shiftPreview1 = document.createElement("div");
+                    this.shiftPreview1.style.position = "absolute";
+                    this.shiftPreview1.style.overflow = "visible";
+                    this.shiftPreview2 = document.createElement("div");
+                    this.shiftPreview2.style.position = "absolute";
+                    this.shiftPreview2.style.overflow = "visible";
+                    for (var f = this.shiftPreview1, d = this.container.firstChild; null != d;) e = d.nextSibling, d != c.parentNode ? f.appendChild(d) : f = this.shiftPreview2, d = e;
+                    this.container.insertBefore(this.shiftPreview1, c.parentNode);
+                    this.container.appendChild(this.shiftPreview2)
+                }
+                this.shiftPreview1.style.left = a + "px";
+                this.shiftPreview1.style.top = b + "px";
+                this.shiftPreview2.style.left = a + "px";
+                this.shiftPreview2.style.top = b + "px"
+            } else c.style.left =
+            a + "px", c.style.top = b + "px";
+        this.panDx = a;
+        this.panDy = b;
+        this.fireEvent(new mxEventObject(mxEvent.PAN))
+    }
+};
+mxGraph.prototype.zoomIn = function() {
+    this.zoom(this.zoomFactor)
+};
+mxGraph.prototype.zoomOut = function() {
+    this.zoom(1 / this.zoomFactor)
+};
+mxGraph.prototype.zoomActual = function() {
+    1 == this.view.scale ? this.view.setTranslate(0, 0) : (this.view.translate.x = 0, this.view.translate.y = 0, this.view.setScale(1))
+};
+mxGraph.prototype.zoomTo = function(a, b) {
+    this.zoom(a / this.view.scale, b)
+};
+mxGraph.prototype.zoom = function(a, b) {
+    b = null != b ? b : this.centerZoom;
+    var c = this.view.scale * a,
+        d = this.view.getState(this.getSelectionCell());
+    if (this.keepSelectionVisibleOnZoom && null != d) d = new mxRectangle(d.x * a, d.y * a, d.width * a, d.height * a), this.view.scale = c, this.scrollRectToVisible(d) || (this.view.revalidate(), this.view.setScale(c));
+    else if (b && !mxUtils.hasScrollbars(this.container)) {
+        var d = this.container.offsetWidth,
+            e = this.container.offsetHeight;
+        if (1 < a) var f = (a - 1) / (2 * c),
+            d = d * -f,
+            e = e * -f;
+        else f = (1 / a - 1) / (2 * this.view.scale),
+            d *= f, e *= f;
+        this.view.scaleAndTranslate(c, this.view.translate.x + d, this.view.translate.y + e)
+    } else this.view.setScale(c), mxUtils.hasScrollbars(this.container) && (e = d = 0, b && (d = this.container.offsetWidth * (a - 1) / 2, e = this.container.offsetHeight * (a - 1) / 2), this.container.scrollLeft = Math.round(this.container.scrollLeft * a + d), this.container.scrollTop = Math.round(this.container.scrollTop * a + e))
+};
+mxGraph.prototype.zoomToRect = function(a) {
+    var b = this.container.clientWidth / a.width / (this.container.clientHeight / a.height);
+    a.x = Math.max(0, a.x);
+    a.y = Math.max(0, a.y);
+    var c = Math.min(this.container.scrollWidth, a.x + a.width),
+        d = Math.min(this.container.scrollHeight, a.y + a.height);
+    a.width = c - a.x;
+    a.height = d - a.y;
+    1 > b ? (b = a.height / b, c = (b - a.height) / 2, a.height = b, b = Math.min(a.y, c), a.y -= b, d = Math.min(this.container.scrollHeight, a.y + a.height), a.height = d - a.y) : (b *= a.width, c = (b - a.width) / 2, a.width = b, b = Math.min(a.x, c), a.x -= b,
+        c = Math.min(this.container.scrollWidth, a.x + a.width), a.width = c - a.x);
+    b = this.container.clientWidth / a.width;
+    c = this.view.scale * b;
+    mxUtils.hasScrollbars(this.container) ? (this.view.setScale(c), this.container.scrollLeft = Math.round(a.x * b), this.container.scrollTop = Math.round(a.y * b)) : this.view.scaleAndTranslate(c, this.view.translate.x - a.x / this.view.scale, this.view.translate.y - a.y / this.view.scale)
+};
+mxGraph.prototype.fit = function(a, b) {
+    if (null != this.container) {
+        a = null != a ? a : 0;
+        b = null != b ? b : !1;
+        var c = this.container.clientWidth,
+            d = this.container.clientHeight,
+            e = this.view.getGraphBounds();
+        b && (null != e.x && null != e.y) && (e.width += e.x, e.height += e.y, e.x = 0, e.y = 0);
+        var f = this.view.scale,
+            g = e.width / f,
+            h = e.height / f;
+        null != this.backgroundImage && (g = Math.max(g, this.backgroundImage.width - e.x / f), h = Math.max(h, this.backgroundImage.height - e.y / f));
+        var k = b ? a : 2 * a,
+            c = Math.floor(100 * Math.min(c / (g + k), d / (h + k))) / 100;
+        null != this.minFitScale &&
+            (c = Math.max(c, this.minFitScale));
+        null != this.maxFitScale && (c = Math.min(c, this.maxFitScale));
+        b ? this.view.scale != c && this.view.setScale(c) : mxUtils.hasScrollbars(this.container) ? (this.view.setScale(c), null != e.x && (this.container.scrollLeft = Math.round(e.x / f) * c - a - Math.max(0, (this.container.clientWidth - g * c) / 2)), null != e.y && (this.container.scrollTop = Math.round(e.y / f) * c - a - Math.max(0, (this.container.clientHeight - h * c) / 2))) : this.view.scaleAndTranslate(c, null != e.x ? Math.floor(this.view.translate.x - e.x / f + a + 1) : a, null !=
+            e.y ? Math.floor(this.view.translate.y - e.y / f + a + 1) : a)
+    }
+    return this.view.scale
+};
+mxGraph.prototype.scrollCellToVisible = function(a, b) {
+    var c = -this.view.translate.x,
+        d = -this.view.translate.y,
+        e = this.view.getState(a);
+    null != e && (c = new mxRectangle(c + e.x, d + e.y, e.width, e.height), b && null != this.container && (d = this.container.clientWidth, e = this.container.clientHeight, c.x = c.getCenterX() - d / 2, c.width = d, c.y = c.getCenterY() - e / 2, c.height = e), this.scrollRectToVisible(c) && this.view.setTranslate(this.view.translate.x, this.view.translate.y))
+};
+mxGraph.prototype.scrollRectToVisible = function(a) {
+    var b = !1;
+    if (null != a) {
+        var c = this.container.offsetWidth,
+            d = this.container.offsetHeight,
+            e = Math.min(c, a.width),
+            f = Math.min(d, a.height);
+        if (mxUtils.hasScrollbars(this.container)) {
+            c = this.container;
+            a.x += this.view.translate.x;
+            a.y += this.view.translate.y;
+            var g = c.scrollLeft - a.x,
+                d = Math.max(g - c.scrollLeft, 0);
+            0 < g ? c.scrollLeft -= g + 2 : (g = a.x + e - c.scrollLeft - c.clientWidth, 0 < g && (c.scrollLeft += g + 2));
+            e = c.scrollTop - a.y;
+            g = Math.max(0, e - c.scrollTop);
+            0 < e ? c.scrollTop -= e + 2 : (e = a.y +
+                f - c.scrollTop - c.clientHeight, 0 < e && (c.scrollTop += e + 2));
+            !this.useScrollbarsForPanning && (0 != d || 0 != g) && this.view.setTranslate(d, g)
+        } else {
+            var g = -this.view.translate.x,
+                h = -this.view.translate.y,
+                k = this.view.scale;
+            a.x + e > g + c && (this.view.translate.x -= (a.x + e - c - g) / k, b = !0);
+            a.y + f > h + d && (this.view.translate.y -= (a.y + f - d - h) / k, b = !0);
+            a.x < g && (this.view.translate.x += (g - a.x) / k, b = !0);
+            a.y < h && (this.view.translate.y += (h - a.y) / k, b = !0);
+            b && (this.view.refresh(), null != this.selectionCellsHandler && this.selectionCellsHandler.refresh())
+        }
+    }
+    return b
+};
+mxGraph.prototype.getCellGeometry = function(a) {
+    return this.model.getGeometry(a)
+};
+mxGraph.prototype.isCellVisible = function(a) {
+    return this.model.isVisible(a)
+};
+mxGraph.prototype.isCellCollapsed = function(a) {
+    return this.model.isCollapsed(a)
+};
+mxGraph.prototype.isCellConnectable = function(a) {
+    return this.model.isConnectable(a)
+};
+mxGraph.prototype.isOrthogonal = function(a) {
+    var b = a.style[mxConstants.STYLE_ORTHOGONAL];
+    if (null != b) return b;
+    a = this.view.getEdgeStyle(a);
+    return a == mxEdgeStyle.SegmentConnector || a == mxEdgeStyle.ElbowConnector || a == mxEdgeStyle.SideToSide || a == mxEdgeStyle.TopToBottom || a == mxEdgeStyle.EntityRelation || a == mxEdgeStyle.OrthConnector
+};
+mxGraph.prototype.isLoop = function(a) {
+    var b = a.getVisibleTerminalState(!0);
+    a = a.getVisibleTerminalState(!1);
+    return null != b && b == a
+};
+mxGraph.prototype.isCloneEvent = function(a) {
+    return mxEvent.isControlDown(a)
+};
+mxGraph.prototype.isToggleEvent = function(a) {
+    return mxClient.IS_MAC ? mxEvent.isMetaDown(a) : mxEvent.isControlDown(a)
+};
+mxGraph.prototype.isGridEnabledEvent = function(a) {
+    return null != a && !mxEvent.isAltDown(a)
+};
+mxGraph.prototype.isConstrainedEvent = function(a) {
+    return mxEvent.isShiftDown(a)
+};
+mxGraph.prototype.isForceMarqueeEvent = function(a) {
+    return mxEvent.isAltDown(a)
+};
+mxGraph.prototype.validationAlert = function(a) {
+    mxUtils.alert(a)
+};
+mxGraph.prototype.isEdgeValid = function(a, b, c) {
+    return null == this.getEdgeValidationError(a, b, c)
+};
+mxGraph.prototype.getEdgeValidationError = function(a, b, c) {
+    if (null != a && !this.isAllowDanglingEdges() && (null == b || null == c)) return "";
+    if (null != a && null == this.model.getTerminal(a, !0) && null == this.model.getTerminal(a, !1)) return null;
+    if (!this.allowLoops && b == c && null != b || !this.isValidConnection(b, c)) return "";
+    if (null != b && null != c) {
+        var d = "";
+        if (!this.multigraph) {
+            var e = this.model.getEdgesBetween(b, c, !0);
+            if (1 < e.length || 1 == e.length && e[0] != a) d += (mxResources.get(this.alreadyConnectedResource) || this.alreadyConnectedResource) +
+                "\n"
+        }
+        var e = this.model.getDirectedEdgeCount(b, !0, a),
+            f = this.model.getDirectedEdgeCount(c, !1, a);
+        if (null != this.multiplicities)
+            for (var g = 0; g < this.multiplicities.length; g++) {
+                var h = this.multiplicities[g].check(this, a, b, c, e, f);
+                null != h && (d += h)
+            }
+        h = this.validateEdge(a, b, c);
+        null != h && (d += h);
+        return 0 < d.length ? d : null
+    }
+    return this.allowDanglingEdges ? null : ""
+};
+mxGraph.prototype.validateEdge = function(a, b, c) {
+    return null
+};
+mxGraph.prototype.validateGraph = function(a, b) {
+    a = null != a ? a : this.model.getRoot();
+    b = null != b ? b : {};
+    for (var c = !0, d = this.model.getChildCount(a), e = 0; e < d; e++) {
+        var f = this.model.getChildAt(a, e),
+            g = b;
+        this.isValidRoot(f) && (g = {});
+        g = this.validateGraph(f, g);
+        null != g ? this.setCellWarning(f, g.replace(/\n/g, "\x3cbr\x3e")) : this.setCellWarning(f, null);
+        c = c && null == g
+    }
+    d = "";
+    this.isCellCollapsed(a) && !c && (d += (mxResources.get(this.containsValidationErrorsResource) || this.containsValidationErrorsResource) + "\n");
+    d = this.model.isEdge(a) ?
+        d + (this.getEdgeValidationError(a, this.model.getTerminal(a, !0), this.model.getTerminal(a, !1)) || "") : d + (this.getCellValidationError(a) || "");
+    e = this.validateCell(a, b);
+    null != e && (d += e);
+    null == this.model.getParent(a) && this.view.validate();
+    return 0 < d.length || !c ? d : null
+};
+mxGraph.prototype.getCellValidationError = function(a) {
+    var b = this.model.getDirectedEdgeCount(a, !0),
+        c = this.model.getDirectedEdgeCount(a, !1);
+    a = this.model.getValue(a);
+    var d = "";
+    if (null != this.multiplicities)
+        for (var e = 0; e < this.multiplicities.length; e++) {
+            var f = this.multiplicities[e];
+            if (f.source && mxUtils.isNode(a, f.type, f.attr, f.value) && (0 == f.max && 0 < b || 1 == f.min && 0 == b || 1 == f.max && 1 < b)) d += f.countError + "\n";
+            else if (!f.source && mxUtils.isNode(a, f.type, f.attr, f.value) && (0 == f.max && 0 < c || 1 == f.min && 0 == c || 1 == f.max && 1 <
+                    c)) d += f.countError + "\n"
+        }
+    return 0 < d.length ? d : null
+};
+mxGraph.prototype.validateCell = function(a, b) {
+    return null
+};
+mxGraph.prototype.getBackgroundImage = function() {
+    return this.backgroundImage
+};
+mxGraph.prototype.setBackgroundImage = function(a) {
+    this.backgroundImage = a
+};
+mxGraph.prototype.getFoldingImage = function(a) {
+    if (null != a && this.foldingEnabled && !this.getModel().isEdge(a.cell)) {
+        var b = this.isCellCollapsed(a.cell);
+        if (this.isCellFoldable(a.cell, !b)) return b ? this.collapsedImage : this.expandedImage
+    }
+    return null
+};
+mxGraph.prototype.convertValueToString = function(a) {
+    a = this.model.getValue(a);
+    if (null != a) {
+        if (mxUtils.isNode(a)) return a.nodeName;
+        if ("function" == typeof a.toString) return a.toString()
+    }
+    return ""
+};
+mxGraph.prototype.getLabel = function(a) {
+    var b = "";
+    if (this.labelsVisible && null != a) {
+        var c = this.view.getState(a),
+            c = null != c ? c.style : this.getCellStyle(a);
+        mxUtils.getValue(c, mxConstants.STYLE_NOLABEL, !1) || (b = this.convertValueToString(a))
+    }
+    return b
+};
+mxGraph.prototype.isHtmlLabel = function(a) {
+    return this.isHtmlLabels()
+};
+mxGraph.prototype.isHtmlLabels = function() {
+    return this.htmlLabels
+};
+mxGraph.prototype.setHtmlLabels = function(a) {
+    this.htmlLabels = a
+};
+mxGraph.prototype.isWrapping = function(a) {
+    var b = this.view.getState(a);
+    a = null != b ? b.style : this.getCellStyle(a);
+    return null != a ? "wrap" == a[mxConstants.STYLE_WHITE_SPACE] : !1
+};
+mxGraph.prototype.isLabelClipped = function(a) {
+    var b = this.view.getState(a);
+    a = null != b ? b.style : this.getCellStyle(a);
+    return null != a ? "hidden" == a[mxConstants.STYLE_OVERFLOW] : !1
+};
+mxGraph.prototype.getTooltip = function(a, b, c, d) {
+    var e = null;
+    if (null != a) {
+        if (null != a.control && (b == a.control.node || b.parentNode == a.control.node)) e = this.collapseExpandResource, e = mxResources.get(e) || e;
+        null == e && null != a.overlays && a.overlays.visit(function(a, c) {
+            if (null == e && (b == c.node || b.parentNode == c.node)) e = c.overlay.toString()
+        });
+        null == e && (c = this.selectionCellsHandler.getHandler(a.cell), null != c && "function" == typeof c.getTooltipForNode && (e = c.getTooltipForNode(b)));
+        null == e && (e = this.getTooltipForCell(a.cell))
+    }
+    return e
+};
+mxGraph.prototype.getTooltipForCell = function(a) {
+    var b = null;
+    return b = null != a && null != a.getTooltip ? a.getTooltip() : this.convertValueToString(a)
+};
+mxGraph.prototype.getCursorForCell = function(a) {
+    return null
+};
+mxGraph.prototype.getStartSize = function(a) {
+    var b = new mxRectangle,
+        c = this.view.getState(a);
+    a = null != c ? c.style : this.getCellStyle(a);
+    null != a && (c = parseInt(mxUtils.getValue(a, mxConstants.STYLE_STARTSIZE, mxConstants.DEFAULT_STARTSIZE)), mxUtils.getValue(a, mxConstants.STYLE_HORIZONTAL, !0) ? b.height = c : b.width = c);
+    return b
+};
+mxGraph.prototype.getImage = function(a) {
+    return null != a && null != a.style ? a.style[mxConstants.STYLE_IMAGE] : null
+};
+mxGraph.prototype.getVerticalAlign = function(a) {
+    return null != a && null != a.style ? a.style[mxConstants.STYLE_VERTICAL_ALIGN] || mxConstants.ALIGN_MIDDLE : null
+};
+mxGraph.prototype.getIndicatorColor = function(a) {
+    return null != a && null != a.style ? a.style[mxConstants.STYLE_INDICATOR_COLOR] : null
+};
+mxGraph.prototype.getIndicatorGradientColor = function(a) {
+    return null != a && null != a.style ? a.style[mxConstants.STYLE_INDICATOR_GRADIENTCOLOR] : null
+};
+mxGraph.prototype.getIndicatorShape = function(a) {
+    return null != a && null != a.style ? a.style[mxConstants.STYLE_INDICATOR_SHAPE] : null
+};
+mxGraph.prototype.getIndicatorImage = function(a) {
+    return null != a && null != a.style ? a.style[mxConstants.STYLE_INDICATOR_IMAGE] : null
+};
+mxGraph.prototype.getBorder = function() {
+    return this.border
+};
+mxGraph.prototype.setBorder = function(a) {
+    this.border = a
+};
+mxGraph.prototype.isSwimlane = function(a) {
+    if (null != a && this.model.getParent(a) != this.model.getRoot()) {
+        var b = this.view.getState(a),
+            b = null != b ? b.style : this.getCellStyle(a);
+        if (null != b && !this.model.isEdge(a)) return b[mxConstants.STYLE_SHAPE] == mxConstants.SHAPE_SWIMLANE
+    }
+    return !1
+};
+mxGraph.prototype.isResizeContainer = function() {
+    return this.resizeContainer
+};
+mxGraph.prototype.setResizeContainer = function(a) {
+    this.resizeContainer = a
+};
+mxGraph.prototype.isEnabled = function() {
+    return this.enabled
+};
+mxGraph.prototype.setEnabled = function(a) {
+    this.enabled = a
+};
+mxGraph.prototype.isEscapeEnabled = function() {
+    return this.escapeEnabled
+};
+mxGraph.prototype.setEscapeEnabled = function(a) {
+    this.escapeEnabled = a
+};
+mxGraph.prototype.isInvokesStopCellEditing = function() {
+    return this.invokesStopCellEditing
+};
+mxGraph.prototype.setInvokesStopCellEditing = function(a) {
+    this.invokesStopCellEditing = a
+};
+mxGraph.prototype.isEnterStopsCellEditing = function() {
+    return this.enterStopsCellEditing
+};
+mxGraph.prototype.setEnterStopsCellEditing = function(a) {
+    this.enterStopsCellEditing = a
+};
+mxGraph.prototype.isCellLocked = function(a) {
+    var b = this.model.getGeometry(a);
+    return this.isCellsLocked() || null != b && this.model.isVertex(a) && b.relative
+};
+mxGraph.prototype.isCellsLocked = function() {
+    return this.cellsLocked
+};
+mxGraph.prototype.setCellsLocked = function(a) {
+    this.cellsLocked = a
+};
+mxGraph.prototype.getCloneableCells = function(a) {
+    return this.model.filterCells(a, mxUtils.bind(this, function(a) {
+        return this.isCellCloneable(a)
+    }))
+};
+mxGraph.prototype.isCellCloneable = function(a) {
+    var b = this.view.getState(a);
+    a = null != b ? b.style : this.getCellStyle(a);
+    return this.isCellsCloneable() && 0 != a[mxConstants.STYLE_CLONEABLE]
+};
+mxGraph.prototype.isCellsCloneable = function() {
+    return this.cellsCloneable
+};
+mxGraph.prototype.setCellsCloneable = function(a) {
+    this.cellsCloneable = a
+};
+mxGraph.prototype.getExportableCells = function(a) {
+    return this.model.filterCells(a, mxUtils.bind(this, function(a) {
+        return this.canExportCell(a)
+    }))
+};
+mxGraph.prototype.canExportCell = function(a) {
+    return this.exportEnabled
+};
+mxGraph.prototype.getImportableCells = function(a) {
+    return this.model.filterCells(a, mxUtils.bind(this, function(a) {
+        return this.canImportCell(a)
+    }))
+};
+mxGraph.prototype.canImportCell = function(a) {
+    return this.importEnabled
+};
+mxGraph.prototype.isCellSelectable = function(a) {
+    return this.isCellsSelectable()
+};
+mxGraph.prototype.isCellsSelectable = function() {
+    return this.cellsSelectable
+};
+mxGraph.prototype.setCellsSelectable = function(a) {
+    this.cellsSelectable = a
+};
+mxGraph.prototype.getDeletableCells = function(a) {
+    return this.model.filterCells(a, mxUtils.bind(this, function(a) {
+        return this.isCellDeletable(a)
+    }))
+};
+mxGraph.prototype.isCellDeletable = function(a) {
+    var b = this.view.getState(a);
+    a = null != b ? b.style : this.getCellStyle(a);
+    return this.isCellsDeletable() && 0 != a[mxConstants.STYLE_DELETABLE]
+};
+mxGraph.prototype.isCellsDeletable = function() {
+    return this.cellsDeletable
+};
+mxGraph.prototype.setCellsDeletable = function(a) {
+    this.cellsDeletable = a
+};
+mxGraph.prototype.isLabelMovable = function(a) {
+    return !this.isCellLocked(a) && (this.model.isEdge(a) && this.edgeLabelsMovable || this.model.isVertex(a) && this.vertexLabelsMovable)
+};
+mxGraph.prototype.getMovableCells = function(a) {
+    return this.model.filterCells(a, mxUtils.bind(this, function(a) {
+        return this.isCellMovable(a)
+    }))
+};
+mxGraph.prototype.isCellMovable = function(a) {
+    var b = this.view.getState(a),
+        b = null != b ? b.style : this.getCellStyle(a);
+    return this.isCellsMovable() && !this.isCellLocked(a) && 0 != b[mxConstants.STYLE_MOVABLE]
+};
+mxGraph.prototype.isCellsMovable = function() {
+    return this.cellsMovable
+};
+mxGraph.prototype.setCellsMovable = function(a) {
+    this.cellsMovable = a
+};
+mxGraph.prototype.isGridEnabled = function() {
+    return this.gridEnabled
+};
+mxGraph.prototype.setGridEnabled = function(a) {
+    this.gridEnabled = a
+};
+mxGraph.prototype.isPortsEnabled = function() {
+    return this.portsEnabled
+};
+mxGraph.prototype.setPortsEnabled = function(a) {
+    this.portsEnabled = a
+};
+mxGraph.prototype.getGridSize = function() {
+    return this.gridSize
+};
+mxGraph.prototype.setGridSize = function(a) {
+    this.gridSize = a
+};
+mxGraph.prototype.getTolerance = function() {
+    return this.tolerance
+};
+mxGraph.prototype.setTolerance = function(a) {
+    this.tolerance = a
+};
+mxGraph.prototype.isVertexLabelsMovable = function() {
+    return this.vertexLabelsMovable
+};
+mxGraph.prototype.setVertexLabelsMovable = function(a) {
+    this.vertexLabelsMovable = a
+};
+mxGraph.prototype.isEdgeLabelsMovable = function() {
+    return this.edgeLabelsMovable
+};
+mxGraph.prototype.setEdgeLabelsMovable = function(a) {
+    this.edgeLabelsMovable = a
+};
+mxGraph.prototype.isSwimlaneNesting = function() {
+    return this.swimlaneNesting
+};
+mxGraph.prototype.setSwimlaneNesting = function(a) {
+    this.swimlaneNesting = a
+};
+mxGraph.prototype.isSwimlaneSelectionEnabled = function() {
+    return this.swimlaneSelectionEnabled
+};
+mxGraph.prototype.setSwimlaneSelectionEnabled = function(a) {
+    this.swimlaneSelectionEnabled = a
+};
+mxGraph.prototype.isMultigraph = function() {
+    return this.multigraph
+};
+mxGraph.prototype.setMultigraph = function(a) {
+    this.multigraph = a
+};
+mxGraph.prototype.isAllowLoops = function() {
+    return this.allowLoops
+};
+mxGraph.prototype.setAllowDanglingEdges = function(a) {
+    this.allowDanglingEdges = a
+};
+mxGraph.prototype.isAllowDanglingEdges = function() {
+    return this.allowDanglingEdges
+};
+mxGraph.prototype.setConnectableEdges = function(a) {
+    this.connectableEdges = a
+};
+mxGraph.prototype.isConnectableEdges = function() {
+    return this.connectableEdges
+};
+mxGraph.prototype.setCloneInvalidEdges = function(a) {
+    this.cloneInvalidEdges = a
+};
+mxGraph.prototype.isCloneInvalidEdges = function() {
+    return this.cloneInvalidEdges
+};
+mxGraph.prototype.setAllowLoops = function(a) {
+    this.allowLoops = a
+};
+mxGraph.prototype.isDisconnectOnMove = function() {
+    return this.disconnectOnMove
+};
+mxGraph.prototype.setDisconnectOnMove = function(a) {
+    this.disconnectOnMove = a
+};
+mxGraph.prototype.isDropEnabled = function() {
+    return this.dropEnabled
+};
+mxGraph.prototype.setDropEnabled = function(a) {
+    this.dropEnabled = a
+};
+mxGraph.prototype.isSplitEnabled = function() {
+    return this.splitEnabled
+};
+mxGraph.prototype.setSplitEnabled = function(a) {
+    this.splitEnabled = a
+};
+mxGraph.prototype.isCellResizable = function(a) {
+    var b = this.view.getState(a),
+        b = null != b ? b.style : this.getCellStyle(a);
+    return this.isCellsResizable() && !this.isCellLocked(a) && 0 != b[mxConstants.STYLE_RESIZABLE]
+};
+mxGraph.prototype.isCellsResizable = function() {
+    return this.cellsResizable
+};
+mxGraph.prototype.setCellsResizable = function(a) {
+    this.cellsResizable = a
+};
+mxGraph.prototype.isTerminalPointMovable = function(a, b) {
+    return !0
+};
+mxGraph.prototype.isCellBendable = function(a) {
+    var b = this.view.getState(a),
+        b = null != b ? b.style : this.getCellStyle(a);
+    return this.isCellsBendable() && !this.isCellLocked(a) && 0 != b[mxConstants.STYLE_BENDABLE]
+};
+mxGraph.prototype.isCellsBendable = function() {
+    return this.cellsBendable
+};
+mxGraph.prototype.setCellsBendable = function(a) {
+    this.cellsBendable = a
+};
+mxGraph.prototype.isCellEditable = function(a) {
+    var b = this.view.getState(a),
+        b = null != b ? b.style : this.getCellStyle(a);
+    return this.isCellsEditable() && !this.isCellLocked(a) && 0 != b[mxConstants.STYLE_EDITABLE]
+};
+mxGraph.prototype.isCellsEditable = function() {
+    return this.cellsEditable
+};
+mxGraph.prototype.setCellsEditable = function(a) {
+    this.cellsEditable = a
+};
+mxGraph.prototype.isCellDisconnectable = function(a, b, c) {
+    return this.isCellsDisconnectable() && !this.isCellLocked(a)
+};
+mxGraph.prototype.isCellsDisconnectable = function() {
+    return this.cellsDisconnectable
+};
+mxGraph.prototype.setCellsDisconnectable = function(a) {
+    this.cellsDisconnectable = a
+};
+mxGraph.prototype.isValidSource = function(a) {
+    return null == a && this.allowDanglingEdges || null != a && (!this.model.isEdge(a) || this.connectableEdges) && this.isCellConnectable(a)
+};
+mxGraph.prototype.isValidTarget = function(a) {
+    return this.isValidSource(a)
+};
+mxGraph.prototype.isValidConnection = function(a, b) {
+    return this.isValidSource(a) && this.isValidTarget(b)
+};
+mxGraph.prototype.setConnectable = function(a) {
+    this.connectionHandler.setEnabled(a)
+};
+mxGraph.prototype.isConnectable = function(a) {
+    return this.connectionHandler.isEnabled()
+};
+mxGraph.prototype.setTooltips = function(a) {
+    this.tooltipHandler.setEnabled(a)
+};
+mxGraph.prototype.setPanning = function(a) {
+    this.panningHandler.panningEnabled = a
+};
+mxGraph.prototype.isEditing = function(a) {
+    if (null != this.cellEditor) {
+        var b = this.cellEditor.getEditingCell();
+        return null == a ? null != b : a == b
+    }
+    return !1
+};
+mxGraph.prototype.isAutoSizeCell = function(a) {
+    var b = this.view.getState(a);
+    a = null != b ? b.style : this.getCellStyle(a);
+    return this.isAutoSizeCells() || 1 == a[mxConstants.STYLE_AUTOSIZE]
+};
+mxGraph.prototype.isAutoSizeCells = function() {
+    return this.autoSizeCells
+};
+mxGraph.prototype.setAutoSizeCells = function(a) {
+    this.autoSizeCells = a
+};
+mxGraph.prototype.isExtendParent = function(a) {
+    return !this.getModel().isEdge(a) && this.isExtendParents()
+};
+mxGraph.prototype.isExtendParents = function() {
+    return this.extendParents
+};
+mxGraph.prototype.setExtendParents = function(a) {
+    this.extendParents = a
+};
+mxGraph.prototype.isExtendParentsOnAdd = function() {
+    return this.extendParentsOnAdd
+};
+mxGraph.prototype.setExtendParentsOnAdd = function(a) {
+    this.extendParentsOnAdd = a
+};
+mxGraph.prototype.isConstrainChild = function(a) {
+    return this.isConstrainChildren() && !this.getModel().isEdge(this.getModel().getParent(a))
+};
+mxGraph.prototype.isConstrainChildren = function() {
+    return this.constrainChildren
+};
+mxGraph.prototype.setConstrainChildren = function(a) {
+    this.constrainChildren = a
+};
+mxGraph.prototype.isAllowNegativeCoordinates = function() {
+    return this.allowNegativeCoordinates
+};
+mxGraph.prototype.setAllowNegativeCoordinates = function(a) {
+    this.allowNegativeCoordinates = a
+};
+mxGraph.prototype.getOverlap = function(a) {
+    return this.isAllowOverlapParent(a) ? this.defaultOverlap : 0
+};
+mxGraph.prototype.isAllowOverlapParent = function(a) {
+    return !1
+};
+mxGraph.prototype.getFoldableCells = function(a, b) {
+    return this.model.filterCells(a, mxUtils.bind(this, function(a) {
+        return this.isCellFoldable(a, b)
+    }))
+};
+mxGraph.prototype.isCellFoldable = function(a, b) {
+    var c = this.view.getState(a),
+        c = null != c ? c.style : this.getCellStyle(a);
+    return 0 < this.model.getChildCount(a) && 0 != c[mxConstants.STYLE_FOLDABLE]
+};
+mxGraph.prototype.isValidDropTarget = function(a, b, c) {
+    return null != a && (this.isSplitEnabled() && this.isSplitTarget(a, b, c) || !this.model.isEdge(a) && (this.isSwimlane(a) || 0 < this.model.getChildCount(a) && !this.isCellCollapsed(a)))
+};
+mxGraph.prototype.isSplitTarget = function(a, b, c) {
+    return this.model.isEdge(a) && null != b && 1 == b.length && this.isCellConnectable(b[0]) && null == this.getEdgeValidationError(a, this.model.getTerminal(a, !0), b[0]) ? (c = this.model.getTerminal(a, !0), a = this.model.getTerminal(a, !1), !this.model.isAncestor(b[0], c) && !this.model.isAncestor(b[0], a)) : !1
+};
+mxGraph.prototype.getDropTarget = function(a, b, c) {
+    if (!this.isSwimlaneNesting())
+        for (var d = 0; d < a.length; d++)
+            if (this.isSwimlane(a[d])) return null;
+    d = mxUtils.convertPoint(this.container, mxEvent.getClientX(b), mxEvent.getClientY(b));
+    d.x -= this.panDx;
+    d.y -= this.panDy;
+    d = this.getSwimlaneAt(d.x, d.y);
+    if (null == c) c = d;
+    else if (null != d) {
+        for (var e = this.model.getParent(d); null != e && this.isSwimlane(e) && e != c;) e = this.model.getParent(e);
+        e == c && (c = d)
+    }
+    for (; null != c && !this.isValidDropTarget(c, a, b) && !this.model.isLayer(c);) c = this.model.getParent(c);
+    return !this.model.isLayer(c) && 0 > mxUtils.indexOf(a, c) ? c : null
+};
+mxGraph.prototype.getDefaultParent = function() {
+    var a = this.defaultParent;
+    null == a && (a = this.getCurrentRoot(), null == a && (a = this.model.getRoot(), a = this.model.getChildAt(a, 0)));
+    return a
+};
+mxGraph.prototype.setDefaultParent = function(a) {
+    this.defaultParent = a
+};
+mxGraph.prototype.getSwimlane = function(a) {
+    for (; null != a && !this.isSwimlane(a);) a = this.model.getParent(a);
+    return a
+};
+mxGraph.prototype.getSwimlaneAt = function(a, b, c) {
+    c = c || this.getDefaultParent();
+    if (null != c)
+        for (var d = this.model.getChildCount(c), e = 0; e < d; e++) {
+            var f = this.model.getChildAt(c, e),
+                g = this.getSwimlaneAt(a, b, f);
+            if (null != g) return g;
+            if (this.isSwimlane(f) && (g = this.view.getState(f), this.intersects(g, a, b))) return f
+        }
+    return null
+};
+mxGraph.prototype.getCellAt = function(a, b, c, d, e) {
+    d = null != d ? d : !0;
+    e = null != e ? e : !0;
+    c = null != c ? c : this.getDefaultParent();
+    if (null != c)
+        for (var f = this.model.getChildCount(c) - 1; 0 <= f; f--) {
+            var g = this.model.getChildAt(c, f),
+                h = this.getCellAt(a, b, g, d, e);
+            if (null != h) return h;
+            if (this.isCellVisible(g) && (e && this.model.isEdge(g) || d && this.model.isVertex(g)))
+                if (h = this.view.getState(g), this.intersects(h, a, b)) return g
+        }
+    return null
+};
+mxGraph.prototype.intersects = function(a, b, c) {
+    if (null != a) {
+        var d = a.absolutePoints;
+        if (null != d) {
+            a = this.tolerance * this.tolerance;
+            for (var e = d[0], f = 1; f < d.length; f++) {
+                var g = d[f];
+                if (mxUtils.ptSegDistSq(e.x, e.y, g.x, g.y, b, c) <= a) return !0;
+                e = g
+            }
+        } else if (e = mxUtils.toRadians(mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION) || 0), 0 != e && (d = Math.cos(-e), e = Math.sin(-e), f = new mxPoint(a.getCenterX(), a.getCenterY()), e = mxUtils.getRotatedPoint(new mxPoint(b, c), d, e, f), b = e.x, c = e.y), mxUtils.contains(a, b, c)) return !0
+    }
+    return !1
+};
+mxGraph.prototype.hitsSwimlaneContent = function(a, b, c) {
+    var d = this.getView().getState(a);
+    a = this.getStartSize(a);
+    if (null != d) {
+        var e = this.getView().getScale();
+        b -= d.x;
+        c -= d.y;
+        if (0 < a.width && 0 < b && b > a.width * e || 0 < a.height && 0 < c && c > a.height * e) return !0
+    }
+    return !1
+};
+mxGraph.prototype.getChildVertices = function(a) {
+    return this.getChildCells(a, !0, !1)
+};
+mxGraph.prototype.getChildEdges = function(a) {
+    return this.getChildCells(a, !1, !0)
+};
+mxGraph.prototype.getChildCells = function(a, b, c) {
+    a = null != a ? a : this.getDefaultParent();
+    a = this.model.getChildCells(a, null != b ? b : !1, null != c ? c : !1);
+    b = [];
+    for (c = 0; c < a.length; c++) this.isCellVisible(a[c]) && b.push(a[c]);
+    return b
+};
+mxGraph.prototype.getConnections = function(a, b) {
+    return this.getEdges(a, b, !0, !0, !1)
+};
+mxGraph.prototype.getIncomingEdges = function(a, b) {
+    return this.getEdges(a, b, !0, !1, !1)
+};
+mxGraph.prototype.getOutgoingEdges = function(a, b) {
+    return this.getEdges(a, b, !1, !0, !1)
+};
+mxGraph.prototype.getEdges = function(a, b, c, d, e, f) {
+    c = null != c ? c : !0;
+    d = null != d ? d : !0;
+    e = null != e ? e : !0;
+    f = null != f ? f : !1;
+    for (var g = [], h = this.isCellCollapsed(a), k = this.model.getChildCount(a), l = 0; l < k; l++) {
+        var m = this.model.getChildAt(a, l);
+        if (h || !this.isCellVisible(m)) g = g.concat(this.model.getEdges(m, c, d))
+    }
+    g = g.concat(this.model.getEdges(a, c, d));
+    h = [];
+    for (l = 0; l < g.length; l++) m = this.view.getState(g[l]), k = null != m ? m.getVisibleTerminal(!0) : this.view.getVisibleTerminal(g[l], !0), m = null != m ? m.getVisibleTerminal(!1) : this.view.getVisibleTerminal(g[l], !1), (e && k == m || k != m && (c && m == a && (null == b || this.isValidAncestor(k, b, f)) || d && k == a && (null == b || this.isValidAncestor(m, b, f)))) && h.push(g[l]);
+    return h
+};
+mxGraph.prototype.isValidAncestor = function(a, b, c) {
+    return c ? this.model.isAncestor(b, a) : this.model.getParent(a) == b
+};
+mxGraph.prototype.getOpposites = function(a, b, c, d) {
+    c = null != c ? c : !0;
+    d = null != d ? d : !0;
+    var e = [],
+        f = {};
+    if (null != a)
+        for (var g = 0; g < a.length; g++) {
+            var h = this.view.getState(a[g]),
+                k = null != h ? h.getVisibleTerminal(!0) : this.view.getVisibleTerminal(a[g], !0),
+                h = null != h ? h.getVisibleTerminal(!1) : this.view.getVisibleTerminal(a[g], !1);
+            if (k == b && null != h && h != b && d) {
+                var l = mxCellPath.create(h);
+                null == f[l] && (f[l] = h, e.push(h))
+            } else h == b && (null != k && k != b && c) && (l = mxCellPath.create(k), null == f[l] && (f[l] = k, e.push(k)))
+        }
+    return e
+};
+mxGraph.prototype.getEdgesBetween = function(a, b, c) {
+    c = null != c ? c : !1;
+    for (var d = this.getEdges(a), e = [], f = 0; f < d.length; f++) {
+        var g = this.view.getState(d[f]),
+            h = null != g ? g.getVisibleTerminal(!0) : this.view.getVisibleTerminal(d[f], !0),
+            g = null != g ? g.getVisibleTerminal(!1) : this.view.getVisibleTerminal(d[f], !1);
+        (h == a && g == b || !c && h == b && g == a) && e.push(d[f])
+    }
+    return e
+};
+mxGraph.prototype.getPointForEvent = function(a, b) {
+    var c = mxUtils.convertPoint(this.container, mxEvent.getClientX(a), mxEvent.getClientY(a)),
+        d = this.view.scale,
+        e = this.view.translate,
+        f = !1 != b ? this.gridSize / 2 : 0;
+    c.x = this.snap(c.x / d - e.x - f);
+    c.y = this.snap(c.y / d - e.y - f);
+    return c
+};
+mxGraph.prototype.getCells = function(a, b, c, d, e, f) {
+    f = null != f ? f : [];
+    if (0 < c || 0 < d) {
+        var g = a + c,
+            h = b + d;
+        e = e || this.getDefaultParent();
+        if (null != e)
+            for (var k = this.model.getChildCount(e), l = 0; l < k; l++) {
+                var m = this.model.getChildAt(e, l),
+                    n = this.view.getState(m);
+                if (this.isCellVisible(m) && null != n) {
+                    var p = n,
+                        n = mxUtils.getValue(n.style, mxConstants.STYLE_ROTATION) || 0;
+                    0 != n && (p = mxUtils.getBoundingBox(p, n));
+                    p.x >= a && p.y + p.height <= h && p.y >= b && p.x + p.width <= g ? f.push(m) : this.getCells(a, b, c, d, m, f)
+                }
+            }
+    }
+    return f
+};
+mxGraph.prototype.getCellsBeyond = function(a, b, c, d, e) {
+    var f = [];
+    if (d || e)
+        if (null == c && (c = this.getDefaultParent()), null != c)
+            for (var g = this.model.getChildCount(c), h = 0; h < g; h++) {
+                var k = this.model.getChildAt(c, h),
+                    l = this.view.getState(k);
+                this.isCellVisible(k) && null != l && (!d || l.x >= a) && (!e || l.y >= b) && f.push(k)
+            }
+        return f
+};
+mxGraph.prototype.findTreeRoots = function(a, b, c) {
+    b = null != b ? b : !1;
+    c = null != c ? c : !1;
+    var d = [];
+    if (null != a) {
+        for (var e = this.getModel(), f = e.getChildCount(a), g = null, h = 0, k = 0; k < f; k++) {
+            var l = e.getChildAt(a, k);
+            if (this.model.isVertex(l) && this.isCellVisible(l)) {
+                for (var m = this.getConnections(l, b ? a : null), n = 0, p = 0, q = 0; q < m.length; q++) this.view.getVisibleTerminal(m[q], !0) == l ? n++ : p++;
+                (c && 0 == n && 0 < p || !c && 0 == p && 0 < n) && d.push(l);
+                m = c ? p - n : n - p;
+                m > h && (h = m, g = l)
+            }
+        }
+        0 == d.length && null != g && d.push(g)
+    }
+    return d
+};
+mxGraph.prototype.traverse = function(a, b, c, d, e) {
+    if (null != c && null != a) {
+        b = null != b ? b : !0;
+        e = e || [];
+        var f = mxCellPath.create(a);
+        if (null == e[f] && (e[f] = a, d = c(a, d), null == d || d))
+            if (d = this.model.getEdgeCount(a), 0 < d)
+                for (f = 0; f < d; f++) {
+                    var g = this.model.getEdgeAt(a, f),
+                        h = this.model.getTerminal(g, !0) == a;
+                    if (!b || h) h = this.model.getTerminal(g, !h), this.traverse(h, b, c, g, e)
+                }
+    }
+};
+mxGraph.prototype.isCellSelected = function(a) {
+    return this.getSelectionModel().isSelected(a)
+};
+mxGraph.prototype.isSelectionEmpty = function() {
+    return this.getSelectionModel().isEmpty()
+};
+mxGraph.prototype.clearSelection = function() {
+    return this.getSelectionModel().clear()
+};
+mxGraph.prototype.getSelectionCount = function() {
+    return this.getSelectionModel().cells.length
+};
+mxGraph.prototype.getSelectionCell = function() {
+    return this.getSelectionModel().cells[0]
+};
+mxGraph.prototype.getSelectionCells = function() {
+    return this.getSelectionModel().cells.slice()
+};
+mxGraph.prototype.setSelectionCell = function(a) {
+    this.getSelectionModel().setCell(a)
+};
+mxGraph.prototype.setSelectionCells = function(a) {
+    this.getSelectionModel().setCells(a)
+};
+mxGraph.prototype.addSelectionCell = function(a) {
+    this.getSelectionModel().addCell(a)
+};
+mxGraph.prototype.addSelectionCells = function(a) {
+    this.getSelectionModel().addCells(a)
+};
+mxGraph.prototype.removeSelectionCell = function(a) {
+    this.getSelectionModel().removeCell(a)
+};
+mxGraph.prototype.removeSelectionCells = function(a) {
+    this.getSelectionModel().removeCells(a)
+};
+mxGraph.prototype.selectRegion = function(a, b) {
+    var c = this.getCells(a.x, a.y, a.width, a.height);
+    this.selectCellsForEvent(c, b);
+    return c
+};
+mxGraph.prototype.selectNextCell = function() {
+    this.selectCell(!0)
+};
+mxGraph.prototype.selectPreviousCell = function() {
+    this.selectCell()
+};
+mxGraph.prototype.selectParentCell = function() {
+    this.selectCell(!1, !0)
+};
+mxGraph.prototype.selectChildCell = function() {
+    this.selectCell(!1, !1, !0)
+};
+mxGraph.prototype.selectCell = function(a, b, c) {
+    var d = this.selectionModel,
+        e = 0 < d.cells.length ? d.cells[0] : null;
+    1 < d.cells.length && d.clear();
+    var d = null != e ? this.model.getParent(e) : this.getDefaultParent(),
+        f = this.model.getChildCount(d);
+    null == e && 0 < f ? (a = this.model.getChildAt(d, 0), this.setSelectionCell(a)) : (null == e || b) && null != this.view.getState(d) && null != this.model.getGeometry(d) ? this.getCurrentRoot() != d && this.setSelectionCell(d) : null != e && c ? 0 < this.model.getChildCount(e) && (a = this.model.getChildAt(e, 0), this.setSelectionCell(a)) :
+        0 < f && (b = d.getIndex(e), a ? (b++, a = this.model.getChildAt(d, b % f)) : (b--, a = this.model.getChildAt(d, 0 > b ? f - 1 : b)), this.setSelectionCell(a))
+};
+mxGraph.prototype.selectAll = function(a) {
+    a = a || this.getDefaultParent();
+    a = this.model.getChildren(a);
+    null != a && this.setSelectionCells(a)
+};
+mxGraph.prototype.selectVertices = function(a) {
+    this.selectCells(!0, !1, a)
+};
+mxGraph.prototype.selectEdges = function(a) {
+    this.selectCells(!1, !0, a)
+};
+mxGraph.prototype.selectCells = function(a, b, c) {
+    c = c || this.getDefaultParent();
+    var d = mxUtils.bind(this, function(c) {
+        return null != this.view.getState(c) && 0 == this.model.getChildCount(c) && (this.model.isVertex(c) && a || this.model.isEdge(c) && b)
+    });
+    c = this.model.filterDescendants(d, c);
+    this.setSelectionCells(c)
+};
+mxGraph.prototype.selectCellForEvent = function(a, b) {
+    var c = this.isCellSelected(a);
+    this.isToggleEvent(b) ? c ? this.removeSelectionCell(a) : this.addSelectionCell(a) : (!c || 1 != this.getSelectionCount()) && this.setSelectionCell(a)
+};
+mxGraph.prototype.selectCellsForEvent = function(a, b) {
+    this.isToggleEvent(b) ? this.addSelectionCells(a) : this.setSelectionCells(a)
+};
+mxGraph.prototype.createHandler = function(a) {
+    var b = null;
+    null != a && (this.model.isEdge(a.cell) ? (b = this.view.getEdgeStyle(a), b = this.isLoop(a) || b == mxEdgeStyle.ElbowConnector || b == mxEdgeStyle.SideToSide || b == mxEdgeStyle.TopToBottom ? new mxElbowEdgeHandler(a) : b == mxEdgeStyle.SegmentConnector || b == mxEdgeStyle.OrthConnector ? new mxEdgeSegmentHandler(a) : new mxEdgeHandler(a)) : b = new mxVertexHandler(a));
+    return b
+};
+mxGraph.prototype.addMouseListener = function(a) {
+    null == this.mouseListeners && (this.mouseListeners = []);
+    this.mouseListeners.push(a)
+};
+mxGraph.prototype.removeMouseListener = function(a) {
+    if (null != this.mouseListeners)
+        for (var b = 0; b < this.mouseListeners.length; b++)
+            if (this.mouseListeners[b] == a) {
+                this.mouseListeners.splice(b, 1);
+                break
+            }
+};
+mxGraph.prototype.updateMouseEvent = function(a) {
+    if (null == a.graphX || null == a.graphY) {
+        var b = mxUtils.convertPoint(this.container, a.getX(), a.getY());
+        a.graphX = b.x - this.panDx;
+        a.graphY = b.y - this.panDy
+    }
+};
+mxGraph.prototype.fireMouseEvent = function(a, b, c) {
+    null == c && (c = this);
+    this.updateMouseEvent(b);
+    a == mxEvent.MOUSE_DOWN && (this.isMouseDown = !0);
+    if (mxClient.IS_TOUCH && this.doubleTapEnabled && a == mxEvent.MOUSE_DOWN) {
+        var d = (new Date).getTime();
+        d - this.lastTouchTime < this.doubleTapTimeout && Math.abs(this.lastTouchX - b.getX()) < this.doubleTapTolerance && Math.abs(this.lastTouchY - b.getY()) < this.doubleTapTolerance ? (this.lastTouchTime = 0, this.dblClick(b.getEvent(), b.getCell()), b.getEvent().cancelBubble = !0) : (this.lastTouchX =
+            b.getX(), this.lastTouchY = b.getY(), this.lastTouchTime = d)
+    }
+    d = 2 != b.getEvent().detail;
+    if (mxClient.IS_IE && "CSS1Compat" == document.compatMode) {
+        if (null != this.lastMouseX && Math.abs(this.lastMouseX - b.getX()) > this.doubleTapTolerance || null != this.lastMouseY && Math.abs(this.lastMouseY - b.getY()) > this.doubleTapTolerance) d = !0;
+        a == mxEvent.MOUSE_UP && (this.lastMouseX = b.getX(), this.lastMouseY = b.getY())
+    }
+    if ((a != mxEvent.MOUSE_UP || this.isMouseDown) && d) {
+        if (a == mxEvent.MOUSE_UP && (this.isMouseDown = !1), !this.isEditing() && (mxClient.IS_OP ||
+                mxClient.IS_SF || mxClient.IS_GC || mxClient.IS_IE && mxClient.IS_SVG || b.getEvent().target != this.container)) {
+            a == mxEvent.MOUSE_MOVE && (this.isMouseDown && this.autoScroll) && this.scrollPointToVisible(b.getGraphX(), b.getGraphY(), this.autoExtend);
+            if (null != this.mouseListeners) {
+                c = [c, b];
+                b.getEvent().returnValue = !0;
+                for (d = 0; d < this.mouseListeners.length; d++) {
+                    var e = this.mouseListeners[d];
+                    a == mxEvent.MOUSE_DOWN ? e.mouseDown.apply(e, c) : a == mxEvent.MOUSE_MOVE ? e.mouseMove.apply(e, c) : a == mxEvent.MOUSE_UP && e.mouseUp.apply(e, c)
+                }
+            }
+            a ==
+                mxEvent.MOUSE_UP && this.click(b)
+        }
+    } else a == mxEvent.MOUSE_UP && (this.isMouseDown = !1)
+};
+mxGraph.prototype.destroy = function() {
+    this.destroyed || (this.destroyed = !0, null != this.tooltipHandler && this.tooltipHandler.destroy(), null != this.selectionCellsHandler && this.selectionCellsHandler.destroy(), null != this.panningHandler && this.panningHandler.destroy(), null != this.connectionHandler && this.connectionHandler.destroy(), null != this.graphHandler && this.graphHandler.destroy(), null != this.cellEditor && this.cellEditor.destroy(), null != this.view && this.view.destroy(), null != this.model && null != this.graphModelChangeListener &&
+        (this.model.removeListener(this.graphModelChangeListener), this.graphModelChangeListener = null), this.container = null)
+};
+
+function mxCellOverlay(a, b, c, d, e, f) {
+    this.image = a;
+    this.tooltip = b;
+    this.align = null != c ? c : this.align;
+    this.verticalAlign = null != d ? d : this.verticalAlign;
+    this.offset = null != e ? e : new mxPoint;
+    this.cursor = null != f ? f : "help"
+}
+mxCellOverlay.prototype = new mxEventSource;
+mxCellOverlay.prototype.constructor = mxCellOverlay;
+mxCellOverlay.prototype.image = null;
+mxCellOverlay.prototype.tooltip = null;
+mxCellOverlay.prototype.align = mxConstants.ALIGN_RIGHT;
+mxCellOverlay.prototype.verticalAlign = mxConstants.ALIGN_BOTTOM;
+mxCellOverlay.prototype.offset = null;
+mxCellOverlay.prototype.cursor = null;
+mxCellOverlay.prototype.defaultOverlap = 0.5;
+mxCellOverlay.prototype.getBounds = function(a) {
+    var b = a.view.graph.getModel().isEdge(a.cell),
+        c = a.view.scale,
+        d = null,
+        e = this.image.width,
+        f = this.image.height;
+    b ? (b = a.absolutePoints, 1 == b.length % 2 ? d = b[Math.floor(b.length / 2)] : (d = b.length / 2, a = b[d - 1], b = b[d], d = new mxPoint(a.x + (b.x - a.x) / 2, a.y + (b.y - a.y) / 2))) : (d = new mxPoint, d.x = this.align == mxConstants.ALIGN_LEFT ? a.x : this.align == mxConstants.ALIGN_CENTER ? a.x + a.width / 2 : a.x + a.width, d.y = this.verticalAlign == mxConstants.ALIGN_TOP ? a.y : this.verticalAlign == mxConstants.ALIGN_MIDDLE ?
+        a.y + a.height / 2 : a.y + a.height);
+    return new mxRectangle(Math.round(d.x - (e * this.defaultOverlap - this.offset.x) * c), Math.round(d.y - (f * this.defaultOverlap - this.offset.y) * c), e * c, f * c)
+};
+mxCellOverlay.prototype.toString = function() {
+    return this.tooltip
+};
+
+function mxOutline(a, b) {
+    this.source = a;
+    null != b && this.init(b)
+}
+mxOutline.prototype.source = null;
+mxOutline.prototype.outline = null;
+mxOutline.prototype.graphRenderHint = mxConstants.RENDERING_HINT_FASTER;
+mxOutline.prototype.enabled = !0;
+mxOutline.prototype.showViewport = !0;
+mxOutline.prototype.border = 10;
+mxOutline.prototype.sizerSize = 8;
+mxOutline.prototype.updateOnPan = !1;
+mxOutline.prototype.sizerImage = null;
+mxOutline.prototype.suspended = !1;
+mxOutline.prototype.init = function(a) {
+    this.outline = new mxGraph(a, this.source.getModel(), this.graphRenderHint, this.source.getStylesheet());
+    this.outline.foldingEnabled = !1;
+    this.outline.autoScroll = !1;
+    var b = this.outline.graphModelChanged;
+    this.outline.graphModelChanged = mxUtils.bind(this, function(a) {
+        !this.suspended && null != this.outline && b.apply(this.outline, arguments)
+    });
+    mxClient.IS_SVG && (a = this.outline.getView().getCanvas().parentNode, a.setAttribute("shape-rendering", "optimizeSpeed"), a.setAttribute("image-rendering",
+        "optimizeSpeed"));
+    this.outline.labelsVisible = !1;
+    this.outline.setEnabled(!1);
+    this.updateHandler = mxUtils.bind(this, function(a, b) {
+        !this.suspended && !this.active && this.update()
+    });
+    this.source.getModel().addListener(mxEvent.CHANGE, this.updateHandler);
+    this.outline.addMouseListener(this);
+    a = this.source.getView();
+    a.addListener(mxEvent.SCALE, this.updateHandler);
+    a.addListener(mxEvent.TRANSLATE, this.updateHandler);
+    a.addListener(mxEvent.SCALE_AND_TRANSLATE, this.updateHandler);
+    a.addListener(mxEvent.DOWN, this.updateHandler);
+    a.addListener(mxEvent.UP, this.updateHandler);
+    mxEvent.addListener(this.source.container, "scroll", this.updateHandler);
+    this.panHandler = mxUtils.bind(this, function(a) {
+        this.updateOnPan && this.updateHandler.apply(this, arguments)
+    });
+    this.source.addListener(mxEvent.PAN, this.panHandler);
+    this.refreshHandler = mxUtils.bind(this, function(a) {
+        this.outline.setStylesheet(this.source.getStylesheet());
+        this.outline.refresh()
+    });
+    this.source.addListener(mxEvent.REFRESH, this.refreshHandler);
+    this.bounds = new mxRectangle(0, 0, 0,
+        0);
+    this.selectionBorder = new mxRectangleShape(this.bounds, null, mxConstants.OUTLINE_COLOR, mxConstants.OUTLINE_STROKEWIDTH);
+    this.selectionBorder.dialect = this.outline.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG;
+    this.selectionBorder.init(this.outline.getView().getOverlayPane());
+    mxEvent.redirectMouseEvents(this.selectionBorder.node, this.outline);
+    this.selectionBorder.node.style.background = "";
+    this.sizer = this.createSizer();
+    this.sizer.init(this.outline.getView().getOverlayPane());
+    this.enabled && (this.sizer.node.style.cursor = "pointer");
+    mxEvent.addListener(this.sizer.node, mxClient.IS_TOUCH ? "touchstart" : "mousedown", mxUtils.bind(this, function(a) {
+        this.outline.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a))
+    }));
+    this.selectionBorder.node.style.display = this.showViewport ? "" : "none";
+    this.sizer.node.style.display = this.selectionBorder.node.style.display;
+    this.selectionBorder.node.style.cursor = "move";
+    this.update(!1)
+};
+mxOutline.prototype.isEnabled = function() {
+    return this.enabled
+};
+mxOutline.prototype.setEnabled = function(a) {
+    this.enabled = a
+};
+mxOutline.prototype.setZoomEnabled = function(a) {
+    this.sizer.node.style.visibility = a ? "visible" : "hidden"
+};
+mxOutline.prototype.refresh = function() {
+    this.update(!0)
+};
+mxOutline.prototype.createSizer = function() {
+    var a = null != this.sizerImage ? new mxImageShape(new mxRectangle(0, 0, this.sizerImage.width, this.sizerImage.height), this.sizerImage.src) : new mxRectangleShape(new mxRectangle(0, 0, this.sizerSize, this.sizerSize), mxConstants.OUTLINE_HANDLE_FILLCOLOR, mxConstants.OUTLINE_HANDLE_STROKECOLOR);
+    a.dialect = this.outline.dialect;
+    return a
+};
+mxOutline.prototype.getSourceContainerSize = function() {
+    return new mxRectangle(0, 0, this.source.container.scrollWidth, this.source.container.scrollHeight)
+};
+mxOutline.prototype.getOutlineOffset = function(a) {
+    return null
+};
+mxOutline.prototype.update = function(a) {
+    if (null != this.source) {
+        var b = this.source.view.scale,
+            c = this.source.getGraphBounds(),
+            c = new mxRectangle(c.x / b + this.source.panDx, c.y / b + this.source.panDy, c.width / b, c.height / b),
+            d = new mxRectangle(0, 0, this.source.container.clientWidth / b, this.source.container.clientHeight / b),
+            e = c.clone();
+        e.add(d);
+        var f = this.getSourceContainerSize(),
+            d = Math.max(f.width / b, e.width),
+            b = Math.max(f.height / b, e.height),
+            e = Math.max(0, this.outline.container.clientWidth - this.border),
+            f = Math.max(0, this.outline.container.clientHeight -
+                this.border),
+            e = Math.min(e / d, f / b);
+        if (0 < e) {
+            this.outline.getView().scale != e && (this.outline.getView().scale = e, a = !0);
+            d = this.outline.getView();
+            d.currentRoot != this.source.getView().currentRoot && d.setCurrentRoot(this.source.getView().currentRoot);
+            var b = this.source.view.translate,
+                f = b.x + this.source.panDx,
+                g = b.y + this.source.panDy,
+                e = this.getOutlineOffset(e);
+            null != e && (f += e.x, g += e.y);
+            0 > c.x && (f -= c.x);
+            0 > c.y && (g -= c.y);
+            if (d.translate.x != f || d.translate.y != g) d.translate.x = f, d.translate.y = g, a = !0;
+            var c = d.translate,
+                e = this.source.getView().scale,
+                f = e / d.scale,
+                g = 1 / d.scale,
+                h = this.source.container;
+            this.bounds = new mxRectangle((c.x - b.x - this.source.panDx) / g, (c.y - b.y - this.source.panDy) / g, h.clientWidth / f, h.clientHeight / f);
+            this.bounds.x += this.source.container.scrollLeft * d.scale / e;
+            this.bounds.y += this.source.container.scrollTop * d.scale / e;
+            c = this.selectionBorder.bounds;
+            if (c.x != this.bounds.x || c.y != this.bounds.y || c.width != this.bounds.width || c.height != this.bounds.height) this.selectionBorder.bounds = this.bounds, this.selectionBorder.redraw();
+            c = this.sizer.bounds;
+            d = new mxRectangle(this.bounds.x + this.bounds.width - c.width / 2, this.bounds.y + this.bounds.height - c.height / 2, c.width, c.height);
+            if (c.x != d.x || c.y != d.y || c.width != d.width || c.height != d.height) this.sizer.bounds = d, "hidden" != this.sizer.node.style.visibility && this.sizer.redraw();
+            a && this.outline.view.revalidate()
+        }
+    }
+};
+mxOutline.prototype.mouseDown = function(a, b) {
+    this.enabled && this.showViewport && (this.zoom = b.isSource(this.sizer), this.startX = b.getX(), this.startY = b.getY(), this.active = !0, this.source.useScrollbarsForPanning && mxUtils.hasScrollbars(this.source.container) ? (this.dx0 = this.source.container.scrollLeft, this.dy0 = this.source.container.scrollTop) : this.dy0 = this.dx0 = 0);
+    b.consume()
+};
+mxOutline.prototype.mouseMove = function(a, b) {
+    if (this.active) {
+        this.selectionBorder.node.style.display = this.showViewport ? "" : "none";
+        this.sizer.node.style.display = this.selectionBorder.node.style.display;
+        var c = b.getX() - this.startX,
+            d = b.getY() - this.startY,
+            e = null;
+        if (this.zoom) e = this.source.container, d = c / (e.clientWidth / e.clientHeight), e = new mxRectangle(this.bounds.x, this.bounds.y, Math.max(1, this.bounds.width + c), Math.max(1, this.bounds.height + d)), this.selectionBorder.bounds = e, this.selectionBorder.redraw();
+        else {
+            var f =
+                this.outline.getView().scale,
+                e = new mxRectangle(this.bounds.x + c, this.bounds.y + d, this.bounds.width, this.bounds.height);
+            this.selectionBorder.bounds = e;
+            this.selectionBorder.redraw();
+            c = c / f * this.source.getView().scale;
+            d = d / f * this.source.getView().scale;
+            this.source.panGraph(-c - this.dx0, -d - this.dy0)
+        }
+        c = this.sizer.bounds;
+        this.sizer.bounds = new mxRectangle(e.x + e.width - c.width / 2, e.y + e.height - c.height / 2, c.width, c.height);
+        "hidden" != this.sizer.node.style.visibility && this.sizer.redraw();
+        b.consume()
+    }
+};
+mxOutline.prototype.mouseUp = function(a, b) {
+    if (this.active) {
+        var c = b.getX() - this.startX,
+            d = b.getY() - this.startY;
+        if (0 < Math.abs(c) || 0 < Math.abs(d)) {
+            if (this.zoom) {
+                var d = this.selectionBorder.bounds.width,
+                    e = this.source.getView().scale;
+                this.source.zoomTo(e - c * e / d, !1)
+            } else if (!this.source.useScrollbarsForPanning || !mxUtils.hasScrollbars(this.source.container)) this.source.panGraph(0, 0), c /= this.outline.getView().scale, d /= this.outline.getView().scale, e = this.source.getView().translate, this.source.getView().setTranslate(e.x -
+                c, e.y - d);
+            this.update();
+            b.consume()
+        }
+        this.index = null;
+        this.active = !1
+    }
+};
+mxOutline.prototype.destroy = function() {
+    null != this.source && (this.source.removeListener(this.panHandler), this.source.removeListener(this.refreshHandler), this.source.getModel().removeListener(this.updateHandler), this.source.getView().removeListener(this.updateHandler), mxEvent.addListener(this.source.container, "scroll", this.updateHandler), this.source = null);
+    null != this.outline && (this.outline.removeMouseListener(this), this.outline.destroy(), this.outline = null);
+    null != this.selectionBorder && (this.selectionBorder.destroy(),
+        this.selectionBorder = null);
+    null != this.sizer && (this.sizer.destroy(), this.sizer = null)
+};
+
+function mxMultiplicity(a, b, c, d, e, f, g, h, k, l) {
+    this.source = a;
+    this.type = b;
+    this.attr = c;
+    this.value = d;
+    this.min = null != e ? e : 0;
+    this.max = null != f ? f : "n";
+    this.validNeighbors = g;
+    this.countError = mxResources.get(h) || h;
+    this.typeError = mxResources.get(k) || k;
+    this.validNeighborsAllowed = null != l ? l : !0
+}
+mxMultiplicity.prototype.type = null;
+mxMultiplicity.prototype.attr = null;
+mxMultiplicity.prototype.value = null;
+mxMultiplicity.prototype.source = null;
+mxMultiplicity.prototype.min = null;
+mxMultiplicity.prototype.max = null;
+mxMultiplicity.prototype.validNeighbors = null;
+mxMultiplicity.prototype.validNeighborsAllowed = !0;
+mxMultiplicity.prototype.countError = null;
+mxMultiplicity.prototype.typeError = null;
+mxMultiplicity.prototype.check = function(a, b, c, d, e, f) {
+    var g = "";
+    if (this.source && this.checkTerminal(a, c, b) || !this.source && this.checkTerminal(a, d, b)) {
+        if (null != this.countError && (this.source && (0 == this.max || e >= this.max) || !this.source && (0 == this.max || f >= this.max))) g += this.countError + "\n";
+        null != this.validNeighbors && (null != this.typeError && 0 < this.validNeighbors.length) && (this.checkNeighbors(a, b, c, d) || (g += this.typeError + "\n"))
+    }
+    return 0 < g.length ? g : null
+};
+mxMultiplicity.prototype.checkNeighbors = function(a, b, c, d) {
+    b = a.model.getValue(c);
+    d = a.model.getValue(d);
+    c = !this.validNeighborsAllowed;
+    for (var e = this.validNeighbors, f = 0; f < e.length; f++)
+        if (this.source && this.checkType(a, d, e[f])) {
+            c = this.validNeighborsAllowed;
+            break
+        } else if (!this.source && this.checkType(a, b, e[f])) {
+        c = this.validNeighborsAllowed;
+        break
+    }
+    return c
+};
+mxMultiplicity.prototype.checkTerminal = function(a, b, c) {
+    b = a.model.getValue(b);
+    return this.checkType(a, b, this.type, this.attr, this.value)
+};
+mxMultiplicity.prototype.checkType = function(a, b, c, d, e) {
+    return null != b ? isNaN(b.nodeType) ? b == c : mxUtils.isNode(b, c, d, e) : !1
+};
+
+function mxLayoutManager(a) {
+    this.undoHandler = mxUtils.bind(this, function(a, c) {
+        this.isEnabled() && this.beforeUndo(c.getProperty("edit"))
+    });
+    this.moveHandler = mxUtils.bind(this, function(a, c) {
+        this.isEnabled() && this.cellsMoved(c.getProperty("cells"), c.getProperty("event"))
+    });
+    this.setGraph(a)
+}
+mxLayoutManager.prototype = new mxEventSource;
+mxLayoutManager.prototype.constructor = mxLayoutManager;
+mxLayoutManager.prototype.graph = null;
+mxLayoutManager.prototype.bubbling = !0;
+mxLayoutManager.prototype.enabled = !0;
+mxLayoutManager.prototype.updateHandler = null;
+mxLayoutManager.prototype.moveHandler = null;
+mxLayoutManager.prototype.isEnabled = function() {
+    return this.enabled
+};
+mxLayoutManager.prototype.setEnabled = function(a) {
+    this.enabled = a
+};
+mxLayoutManager.prototype.isBubbling = function() {
+    return this.bubbling
+};
+mxLayoutManager.prototype.setBubbling = function(a) {
+    this.bubbling = a
+};
+mxLayoutManager.prototype.getGraph = function() {
+    return this.graph
+};
+mxLayoutManager.prototype.setGraph = function(a) {
+    if (null != this.graph) {
+        var b = this.graph.getModel();
+        b.removeListener(this.undoHandler);
+        this.graph.removeListener(this.moveHandler)
+    }
+    this.graph = a;
+    null != this.graph && (b = this.graph.getModel(), b.addListener(mxEvent.BEFORE_UNDO, this.undoHandler), this.graph.addListener(mxEvent.MOVE_CELLS, this.moveHandler))
+};
+mxLayoutManager.prototype.getLayout = function(a) {
+    return null
+};
+mxLayoutManager.prototype.beforeUndo = function(a) {
+    a = this.getCellsForChanges(a.changes);
+    var b = this.getGraph().getModel();
+    if (this.isBubbling())
+        for (var c = b.getParents(a); 0 < c.length;) a = a.concat(c), c = b.getParents(c);
+    this.layoutCells(mxUtils.sortCells(a, !1))
+};
+mxLayoutManager.prototype.cellsMoved = function(a, b) {
+    if (null != a && null != b)
+        for (var c = mxUtils.convertPoint(this.getGraph().container, mxEvent.getClientX(b), mxEvent.getClientY(b)), d = this.getGraph().getModel(), e = 0; e < a.length; e++) {
+            var f = this.getLayout(d.getParent(a[e]));
+            null != f && f.moveCell(a[e], c.x, c.y)
+        }
+};
+mxLayoutManager.prototype.getCellsForChanges = function(a) {
+    for (var b = [], c = {}, d = 0; d < a.length; d++) {
+        var e = a[d];
+        if (e instanceof mxRootChange) return [];
+        for (var e = this.getCellsForChange(e), f = 0; f < e.length; f++)
+            if (null != e[f]) {
+                var g = mxCellPath.create(e[f]);
+                null == c[g] && (c[g] = e[f], b.push(e[f]))
+            }
+    }
+    return b
+};
+mxLayoutManager.prototype.getCellsForChange = function(a) {
+    var b = this.getGraph().getModel();
+    return a instanceof mxChildChange ? [a.child, a.previous, b.getParent(a.child)] : a instanceof mxTerminalChange || a instanceof mxGeometryChange ? [a.cell, b.getParent(a.cell)] : []
+};
+mxLayoutManager.prototype.layoutCells = function(a) {
+    if (0 < a.length) {
+        var b = this.getGraph().getModel();
+        b.beginUpdate();
+        try {
+            for (var c = null, d = 0; d < a.length; d++) a[d] != b.getRoot() && a[d] != c && (c = a[d], this.executeLayout(this.getLayout(c), c));
+            this.fireEvent(new mxEventObject(mxEvent.LAYOUT_CELLS, "cells", a))
+        } finally {
+            b.endUpdate()
+        }
+    }
+};
+mxLayoutManager.prototype.executeLayout = function(a, b) {
+    null != a && null != b && a.execute(b)
+};
+mxLayoutManager.prototype.destroy = function() {
+    this.setGraph(null)
+};
+
+function mxSpaceManager(a, b, c, d) {
+    this.resizeHandler = mxUtils.bind(this, function(a, b) {
+        this.isEnabled() && this.cellsResized(b.getProperty("cells"))
+    });
+    this.foldHandler = mxUtils.bind(this, function(a, b) {
+        this.isEnabled() && this.cellsResized(b.getProperty("cells"))
+    });
+    this.shiftRightwards = null != b ? b : !0;
+    this.shiftDownwards = null != c ? c : !0;
+    this.extendParents = null != d ? d : !0;
+    this.setGraph(a)
+}
+mxSpaceManager.prototype = new mxEventSource;
+mxSpaceManager.prototype.constructor = mxSpaceManager;
+mxSpaceManager.prototype.graph = null;
+mxSpaceManager.prototype.enabled = !0;
+mxSpaceManager.prototype.shiftRightwards = !0;
+mxSpaceManager.prototype.shiftDownwards = !0;
+mxSpaceManager.prototype.extendParents = !0;
+mxSpaceManager.prototype.resizeHandler = null;
+mxSpaceManager.prototype.foldHandler = null;
+mxSpaceManager.prototype.isCellIgnored = function(a) {
+    return !this.getGraph().getModel().isVertex(a)
+};
+mxSpaceManager.prototype.isCellShiftable = function(a) {
+    return this.getGraph().getModel().isVertex(a) && this.getGraph().isCellMovable(a)
+};
+mxSpaceManager.prototype.isEnabled = function() {
+    return this.enabled
+};
+mxSpaceManager.prototype.setEnabled = function(a) {
+    this.enabled = a
+};
+mxSpaceManager.prototype.isShiftRightwards = function() {
+    return this.shiftRightwards
+};
+mxSpaceManager.prototype.setShiftRightwards = function(a) {
+    this.shiftRightwards = a
+};
+mxSpaceManager.prototype.isShiftDownwards = function() {
+    return this.shiftDownwards
+};
+mxSpaceManager.prototype.setShiftDownwards = function(a) {
+    this.shiftDownwards = a
+};
+mxSpaceManager.prototype.isExtendParents = function() {
+    return this.extendParents
+};
+mxSpaceManager.prototype.setExtendParents = function(a) {
+    this.extendParents = a
+};
+mxSpaceManager.prototype.getGraph = function() {
+    return this.graph
+};
+mxSpaceManager.prototype.setGraph = function(a) {
+    null != this.graph && (this.graph.removeListener(this.resizeHandler), this.graph.removeListener(this.foldHandler));
+    this.graph = a;
+    null != this.graph && (this.graph.addListener(mxEvent.RESIZE_CELLS, this.resizeHandler), this.graph.addListener(mxEvent.FOLD_CELLS, this.foldHandler))
+};
+mxSpaceManager.prototype.cellsResized = function(a) {
+    if (null != a) {
+        var b = this.graph.getModel();
+        b.beginUpdate();
+        try {
+            for (var c = 0; c < a.length; c++)
+                if (!this.isCellIgnored(a[c])) {
+                    this.cellResized(a[c]);
+                    break
+                }
+        } finally {
+            b.endUpdate()
+        }
+    }
+};
+mxSpaceManager.prototype.cellResized = function(a) {
+    var b = this.getGraph(),
+        c = b.getView(),
+        d = b.getModel(),
+        e = c.getState(a),
+        f = c.getState(d.getParent(a));
+    if (null != e && null != f) {
+        var g = this.getCellsToShift(e),
+            h = d.getGeometry(a);
+        if (null != g && null != h) {
+            var k = c.translate,
+                l = c.scale,
+                c = e.x - f.origin.x - k.x * l,
+                f = e.y - f.origin.y - k.y * l,
+                k = e.x + e.width,
+                m = e.y + e.height,
+                n = e.width - h.width * l + c - h.x * l,
+                p = e.height - h.height * l + f - h.y * l,
+                q = 1 - h.width * l / e.width,
+                e = 1 - h.height * l / e.height;
+            d.beginUpdate();
+            try {
+                for (h = 0; h < g.length; h++) g[h] != a && this.isCellShiftable(g[h]) &&
+                    this.shiftCell(g[h], n, p, c, f, k, m, q, e, this.isExtendParents() && b.isExtendParent(g[h]))
+            } finally {
+                d.endUpdate()
+            }
+        }
+    }
+};
+mxSpaceManager.prototype.shiftCell = function(a, b, c, d, e, f, g, h, k, l) {
+    d = this.getGraph();
+    var m = d.getView().getState(a);
+    if (null != m) {
+        var n = d.getModel(),
+            p = n.getGeometry(a);
+        if (null != p) {
+            n.beginUpdate();
+            try {
+                if (this.isShiftRightwards())
+                    if (m.x >= f) p = p.clone(), p.translate(-b, 0);
+                    else {
+                        var q = Math.max(0, m.x - x0),
+                            p = p.clone();
+                        p.translate(-h * q, 0)
+                    }
+                if (this.isShiftDownwards())
+                    if (m.y >= g) p = p.clone(), p.translate(0, -c);
+                    else {
+                        var s = Math.max(0, m.y - e),
+                            p = p.clone();
+                        p.translate(0, -k * s)
+                    }
+                p != n.getGeometry(a) && (n.setGeometry(a, p), l && d.extendParent(a))
+            } finally {
+                n.endUpdate()
+            }
+        }
+    }
+};
+mxSpaceManager.prototype.getCellsToShift = function(a) {
+    var b = this.getGraph(),
+        c = b.getModel().getParent(a.cell),
+        d = this.isShiftDownwards(),
+        e = this.isShiftRightwards();
+    return b.getCellsBeyond(a.x + (d ? 0 : a.width), a.y + (d && e ? 0 : a.height), c, e, d)
+};
+mxSpaceManager.prototype.destroy = function() {
+    this.setGraph(null)
+};
+
+function mxSwimlaneManager(a, b, c, d) {
+    this.horizontal = null != b ? b : !0;
+    this.addEnabled = null != c ? c : !0;
+    this.resizeEnabled = null != d ? d : !0;
+    this.addHandler = mxUtils.bind(this, function(a, b) {
+        this.isEnabled() && this.isAddEnabled() && this.cellsAdded(b.getProperty("cells"))
+    });
+    this.resizeHandler = mxUtils.bind(this, function(a, b) {
+        this.isEnabled() && this.isResizeEnabled() && this.cellsResized(b.getProperty("cells"))
+    });
+    this.setGraph(a)
+}
+mxSwimlaneManager.prototype = new mxEventSource;
+mxSwimlaneManager.prototype.constructor = mxSwimlaneManager;
+mxSwimlaneManager.prototype.graph = null;
+mxSwimlaneManager.prototype.enabled = !0;
+mxSwimlaneManager.prototype.horizontal = !0;
+mxSwimlaneManager.prototype.addEnabled = !0;
+mxSwimlaneManager.prototype.resizeEnabled = !0;
+mxSwimlaneManager.prototype.addHandler = null;
+mxSwimlaneManager.prototype.resizeHandler = null;
+mxSwimlaneManager.prototype.isEnabled = function() {
+    return this.enabled
+};
+mxSwimlaneManager.prototype.setEnabled = function(a) {
+    this.enabled = a
+};
+mxSwimlaneManager.prototype.isHorizontal = function() {
+    return this.horizontal
+};
+mxSwimlaneManager.prototype.setHorizontal = function(a) {
+    this.horizontal = a
+};
+mxSwimlaneManager.prototype.isAddEnabled = function() {
+    return this.addEnabled
+};
+mxSwimlaneManager.prototype.setAddEnabled = function(a) {
+    this.addEnabled = a
+};
+mxSwimlaneManager.prototype.isResizeEnabled = function() {
+    return this.resizeEnabled
+};
+mxSwimlaneManager.prototype.setResizeEnabled = function(a) {
+    this.resizeEnabled = a
+};
+mxSwimlaneManager.prototype.getGraph = function() {
+    return this.graph
+};
+mxSwimlaneManager.prototype.setGraph = function(a) {
+    null != this.graph && (this.graph.removeListener(this.addHandler), this.graph.removeListener(this.resizeHandler));
+    this.graph = a;
+    null != this.graph && (this.graph.addListener(mxEvent.ADD_CELLS, this.addHandler), this.graph.addListener(mxEvent.CELLS_RESIZED, this.resizeHandler))
+};
+mxSwimlaneManager.prototype.isSwimlaneIgnored = function(a) {
+    return !this.getGraph().isSwimlane(a)
+};
+mxSwimlaneManager.prototype.isCellHorizontal = function(a) {
+    if (this.graph.isSwimlane(a)) {
+        var b = this.graph.view.getState(a);
+        a = null != b ? b.style : this.graph.getCellStyle(a);
+        return 1 == mxUtils.getValue(a, mxConstants.STYLE_HORIZONTAL, 1)
+    }
+    return !this.isHorizontal()
+};
+mxSwimlaneManager.prototype.cellsAdded = function(a) {
+    if (null != a) {
+        var b = this.getGraph().getModel();
+        b.beginUpdate();
+        try {
+            for (var c = 0; c < a.length; c++) this.isSwimlaneIgnored(a[c]) || this.swimlaneAdded(a[c])
+        } finally {
+            b.endUpdate()
+        }
+    }
+};
+mxSwimlaneManager.prototype.swimlaneAdded = function(a) {
+    for (var b = this.getGraph().getModel(), c = b.getParent(a), d = b.getChildCount(c), e = null, f = 0; f < d; f++) {
+        var g = b.getChildAt(c, f);
+        if (g != a && !this.isSwimlaneIgnored(g) && (e = b.getGeometry(g), null != e)) break
+    }
+    null != e && this.resizeSwimlane(a, e.width, e.height)
+};
+mxSwimlaneManager.prototype.cellsResized = function(a) {
+    if (null != a) {
+        var b = this.getGraph().getModel();
+        b.beginUpdate();
+        try {
+            for (var c = 0; c < a.length; c++)
+                if (!this.isSwimlaneIgnored(a[c])) {
+                    var d = b.getGeometry(a[c]);
+                    if (null != d) {
+                        for (var e = new mxRectangle(0, 0, d.width, d.height), f = a[c], g = f; null != g;) {
+                            var f = g,
+                                g = b.getParent(g),
+                                h = this.graph.isSwimlane(g) ? this.graph.getStartSize(g) : new mxRectangle;
+                            e.width += h.width;
+                            e.height += h.height
+                        }
+                        this.resizeSwimlane(f, e.width, e.height)
+                    }
+                }
+        } finally {
+            b.endUpdate()
+        }
+    }
+};
+mxSwimlaneManager.prototype.resizeSwimlane = function(a, b, c) {
+    var d = this.getGraph().getModel();
+    d.beginUpdate();
+    try {
+        if (!this.isSwimlaneIgnored(a)) {
+            var e = d.getGeometry(a);
+            if (null != e) {
+                var f = this.isCellHorizontal(a);
+                if (f && e.height != c || !f && e.width != b) e = e.clone(), f ? e.height = c : e.width = b, d.setGeometry(a, e)
+            }
+        }
+        var g = this.graph.isSwimlane(a) ? this.graph.getStartSize(a) : new mxRectangle;
+        b -= g.width;
+        c -= g.height;
+        for (var h = d.getChildCount(a), e = 0; e < h; e++) {
+            var k = d.getChildAt(a, e);
+            this.resizeSwimlane(k, b, c)
+        }
+    } finally {
+        d.endUpdate()
+    }
+};
+mxSwimlaneManager.prototype.destroy = function() {
+    this.setGraph(null)
+};
+
+function mxTemporaryCellStates(a, b, c) {
+    this.view = a;
+    b = null != b ? b : 1;
+    this.oldBounds = a.getGraphBounds();
+    this.oldStates = a.getStates();
+    this.oldScale = a.getScale();
+    a.setStates(new mxDictionary);
+    a.setScale(b);
+    if (null != c) {
+        b = a.createState(new mxCell);
+        for (var d = 0; d < c.length; d++) a.validateBounds(b, c[d]);
+        for (var e = null, d = 0; d < c.length; d++) {
+            var f = a.validatePoints(b, c[d]);
+            null == e ? e = f : e.add(f)
+        }
+        null == e && (e = new mxRectangle);
+        a.setGraphBounds(e)
+    }
+}
+mxTemporaryCellStates.prototype.view = null;
+mxTemporaryCellStates.prototype.oldStates = null;
+mxTemporaryCellStates.prototype.oldBounds = null;
+mxTemporaryCellStates.prototype.oldScale = null;
+mxTemporaryCellStates.prototype.destroy = function() {
+    this.view.setScale(this.oldScale);
+    this.view.setStates(this.oldStates);
+    this.view.setGraphBounds(this.oldBounds)
+};
+
+function mxCellStatePreview(a) {
+    this.graph = a;
+    this.deltas = {}
+}
+mxCellStatePreview.prototype.graph = null;
+mxCellStatePreview.prototype.deltas = null;
+mxCellStatePreview.prototype.count = 0;
+mxCellStatePreview.prototype.isEmpty = function() {
+    return 0 == this.count
+};
+mxCellStatePreview.prototype.moveState = function(a, b, c, d, e) {
+    d = null != d ? d : !0;
+    e = null != e ? e : !0;
+    var f = mxCellPath.create(a.cell),
+        g = this.deltas[f];
+    null == g ? (g = new mxPoint(b, c), this.deltas[f] = g, this.count++) : d ? (g.X += b, g.Y += c) : (g.X = b, g.Y = c);
+    e && this.addEdges(a);
+    return g
+};
+mxCellStatePreview.prototype.show = function(a) {
+    var b = this.graph.getModel(),
+        c = b.getRoot(),
+        d;
+    for (d in this.deltas) {
+        var e = mxCellPath.resolve(c, d),
+            f = this.graph.view.getState(e),
+            g = this.deltas[d],
+            e = this.graph.view.getState(b.getParent(e));
+        this.translateState(e, f, g.x, g.y)
+    }
+    for (d in this.deltas) e = mxCellPath.resolve(c, d), f = this.graph.view.getState(e), g = this.deltas[d], e = this.graph.view.getState(b.getParent(e)), this.revalidateState(e, f, g.x, g.y, a)
+};
+mxCellStatePreview.prototype.translateState = function(a, b, c, d) {
+    if (null != b) {
+        var e = this.graph.getModel();
+        if (e.isVertex(b.cell)) {
+            b.invalid = !0;
+            this.graph.view.validateBounds(a, b.cell);
+            a = e.getGeometry(b.cell);
+            var f = mxCellPath.create(b.cell);
+            if ((0 != c || 0 != d) && null != a && (!a.relative || null != this.deltas[f])) b.x += c, b.y += d
+        }
+        a = e.getChildCount(b.cell);
+        for (f = 0; f < a; f++) this.translateState(b, this.graph.view.getState(e.getChildAt(b.cell, f)), c, d)
+    }
+};
+mxCellStatePreview.prototype.revalidateState = function(a, b, c, d, e) {
+    if (null != b) {
+        b.invalid = !0;
+        this.graph.view.validatePoints(a, b.cell);
+        var f = mxCellPath.create(b.cell),
+            g = this.graph.getModel(),
+            h = this.graph.getCellGeometry(b.cell);
+        if ((0 != c || 0 != d) && null != h && h.relative && g.isVertex(b.cell) && (null == a || g.isVertex(a.cell) || null != this.deltas[f])) b.x += c, b.y += d, this.graph.cellRenderer.redraw(b);
+        null != e && e(b);
+        a = g.getChildCount(b.cell);
+        for (f = 0; f < a; f++) this.revalidateState(b, this.graph.view.getState(g.getChildAt(b.cell,
+            f)), c, d, e)
+    }
+};
+mxCellStatePreview.prototype.addEdges = function(a) {
+    for (var b = this.graph.getModel(), c = b.getEdgeCount(a.cell), d = 0; d < c; d++) {
+        var e = this.graph.view.getState(b.getEdgeAt(a.cell, d));
+        null != e && this.moveState(e, 0, 0)
+    }
+};
+
+function mxConnectionConstraint(a, b) {
+    this.point = a;
+    this.perimeter = null != b ? b : !0
+}
+mxConnectionConstraint.prototype.point = null;
+mxConnectionConstraint.prototype.perimeter = null;
+
+function mxGraphHandler(a) {
+    this.graph = a;
+    this.graph.addMouseListener(this);
+    this.panHandler = mxUtils.bind(this, function() {
+        this.updatePreviewShape()
+    });
+    this.graph.addListener(mxEvent.PAN, this.panHandler)
+}
+mxGraphHandler.prototype.graph = null;
+mxGraphHandler.prototype.maxCells = mxClient.IS_IE ? 20 : 50;
+mxGraphHandler.prototype.enabled = !0;
+mxGraphHandler.prototype.highlightEnabled = !0;
+mxGraphHandler.prototype.cloneEnabled = !0;
+mxGraphHandler.prototype.moveEnabled = !0;
+mxGraphHandler.prototype.guidesEnabled = !1;
+mxGraphHandler.prototype.guide = null;
+mxGraphHandler.prototype.currentDx = null;
+mxGraphHandler.prototype.currentDy = null;
+mxGraphHandler.prototype.updateCursor = !0;
+mxGraphHandler.prototype.selectEnabled = !0;
+mxGraphHandler.prototype.removeCellsFromParent = !0;
+mxGraphHandler.prototype.connectOnDrop = !1;
+mxGraphHandler.prototype.scrollOnMove = !0;
+mxGraphHandler.prototype.minimumSize = 6;
+mxGraphHandler.prototype.previewColor = "black";
+mxGraphHandler.prototype.htmlPreview = !1;
+mxGraphHandler.prototype.shape = null;
+mxGraphHandler.prototype.scaleGrid = !1;
+mxGraphHandler.prototype.rotationEnabled = !0;
+mxGraphHandler.prototype.isEnabled = function() {
+    return this.enabled
+};
+mxGraphHandler.prototype.setEnabled = function(a) {
+    this.enabled = a
+};
+mxGraphHandler.prototype.isCloneEnabled = function() {
+    return this.cloneEnabled
+};
+mxGraphHandler.prototype.setCloneEnabled = function(a) {
+    this.cloneEnabled = a
+};
+mxGraphHandler.prototype.isMoveEnabled = function() {
+    return this.moveEnabled
+};
+mxGraphHandler.prototype.setMoveEnabled = function(a) {
+    this.moveEnabled = a
+};
+mxGraphHandler.prototype.isSelectEnabled = function() {
+    return this.selectEnabled
+};
+mxGraphHandler.prototype.setSelectEnabled = function(a) {
+    this.selectEnabled = a
+};
+mxGraphHandler.prototype.isRemoveCellsFromParent = function() {
+    return this.removeCellsFromParent
+};
+mxGraphHandler.prototype.setRemoveCellsFromParent = function(a) {
+    this.removeCellsFromParent = a
+};
+mxGraphHandler.prototype.getInitialCellForEvent = function(a) {
+    return a.getCell()
+};
+mxGraphHandler.prototype.isDelayedSelection = function(a) {
+    return this.graph.isCellSelected(a)
+};
+mxGraphHandler.prototype.mouseDown = function(a, b) {
+    if (!b.isConsumed() && this.isEnabled() && this.graph.isEnabled() && !this.graph.isForceMarqueeEvent(b.getEvent()) && null != b.getState()) {
+        var c = this.getInitialCellForEvent(b);
+        this.cell = null;
+        this.delayedSelection = this.isDelayedSelection(c);
+        this.isSelectEnabled() && !this.delayedSelection && this.graph.selectCellForEvent(c, b.getEvent());
+        if (this.isMoveEnabled()) {
+            var d = this.graph.model,
+                e = d.getGeometry(c);
+            this.graph.isCellMovable(c) && (!d.isEdge(c) || 1 < this.graph.getSelectionCount() ||
+                null != e.points && 0 < e.points.length || null == d.getTerminal(c, !0) || null == d.getTerminal(c, !1) || this.graph.allowDanglingEdges || this.graph.isCloneEvent(b.getEvent()) && this.graph.isCellsCloneable()) && this.start(c, b.getX(), b.getY());
+            this.cellWasClicked = !0;
+            !mxClient.IS_SF && !mxClient.IS_GC || "SELECT" != b.getSource().nodeName ? b.consume() : mxClient.IS_SF && "SELECT" == b.getSource().nodeName && (this.cellWasClicked = !1, this.first = null)
+        }
+    }
+};
+mxGraphHandler.prototype.getGuideStates = function() {
+    var a = this.graph.getDefaultParent(),
+        b = this.graph.getModel(),
+        c = mxUtils.bind(this, function(a) {
+            return null != this.graph.view.getState(a) && b.isVertex(a) && null != b.getGeometry(a) && !b.getGeometry(a).relative
+        });
+    return this.graph.view.getCellStates(b.filterDescendants(c, a))
+};
+mxGraphHandler.prototype.getCells = function(a) {
+    return !this.delayedSelection && this.graph.isCellMovable(a) ? [a] : this.graph.getMovableCells(this.graph.getSelectionCells())
+};
+mxGraphHandler.prototype.getPreviewBounds = function(a) {
+    a = this.getBoundingBox(a);
+    null != a && (a.grow(-1, -1), a.width < this.minimumSize && (a.x -= (this.minimumSize - a.width) / 2, a.width = this.minimumSize), a.height < this.minimumSize && (a.y -= (this.minimumSize - a.height) / 2, a.height = this.minimumSize));
+    return a
+};
+mxGraphHandler.prototype.getBoundingBox = function(a) {
+    var b = null;
+    if (null != a && 0 < a.length)
+        for (var c = this.graph.getModel(), d = 0; d < a.length; d++)
+            if (c.isVertex(a[d]) || c.isEdge(a[d])) {
+                var e = this.graph.view.getState(a[d]);
+                if (null != e) {
+                    var f = e;
+                    c.isVertex(a[d]) && (null != e.shape && null != e.shape.boundingBox) && (f = e.shape.boundingBox);
+                    null == b ? b = new mxRectangle(f.x, f.y, f.width, f.height) : b.add(f)
+                }
+            }
+    return b
+};
+mxGraphHandler.prototype.createPreviewShape = function(a) {
+    a = new mxRectangleShape(a, null, this.previewColor);
+    a.isDashed = !0;
+    this.htmlPreview ? (a.dialect = mxConstants.DIALECT_STRICTHTML, a.init(this.graph.container)) : (a.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG, a.init(this.graph.getView().getOverlayPane()), a.pointerEvents = !1);
+    return a
+};
+mxGraphHandler.prototype.start = function(a, b, c) {
+    this.cell = a;
+    this.first = mxUtils.convertPoint(this.graph.container, b, c);
+    this.cells = this.getCells(this.cell);
+    this.bounds = this.graph.getView().getBounds(this.cells);
+    this.pBounds = this.getPreviewBounds(this.cells);
+    this.guidesEnabled && (this.guide = new mxGuide(this.graph, this.getGuideStates()))
+};
+mxGraphHandler.prototype.useGuidesForEvent = function(a) {
+    return null != this.guide ? this.guide.isEnabledForEvent(a.getEvent()) : !0
+};
+mxGraphHandler.prototype.snap = function(a) {
+    var b = this.scaleGrid ? this.graph.view.scale : 1;
+    a.x = this.graph.snap(a.x / b) * b;
+    a.y = this.graph.snap(a.y / b) * b;
+    return a
+};
+mxGraphHandler.prototype.mouseMove = function(a, b) {
+    var c = this.graph;
+    if (!b.isConsumed() && c.isMouseDown && null != this.cell && null != this.first && null != this.bounds) {
+        var d = mxUtils.convertPoint(c.container, b.getX(), b.getY()),
+            e = d.x - this.first.x,
+            f = d.y - this.first.y,
+            d = c.tolerance;
+        if (null != this.shape || Math.abs(e) > d || Math.abs(f) > d) {
+            null == this.highlight && (this.highlight = new mxCellHighlight(this.graph, mxConstants.DROP_TARGET_COLOR, 3));
+            null == this.shape && (this.shape = this.createPreviewShape(this.bounds));
+            var g = c.isGridEnabledEvent(b.getEvent()),
+                d = !0;
+            if (null != this.guide && this.useGuidesForEvent(b)) f = this.guide.move(this.bounds, new mxPoint(e, f), g), d = !1, e = f.x, f = f.y;
+            else if (g) var h = c.getView().translate,
+                k = c.getView().scale,
+                g = this.bounds.x - (c.snap(this.bounds.x / k - h.x) + h.x) * k,
+                h = this.bounds.y - (c.snap(this.bounds.y / k - h.y) + h.y) * k,
+                f = this.snap(new mxPoint(e, f)),
+                e = f.x - g,
+                f = f.y - h;
+            null != this.guide && d && this.guide.hide();
+            c.isConstrainedEvent(b.getEvent()) && (Math.abs(e) > Math.abs(f) ? f = 0 : e = 0);
+            this.currentDx = e;
+            this.currentDy = f;
+            this.updatePreviewShape();
+            d = null;
+            f = b.getCell();
+            c.isDropEnabled() && this.highlightEnabled && (d = c.getDropTarget(this.cells, b.getEvent(), f));
+            g = d;
+            for (h = c.getModel(); null != g && g != this.cells[0];) g = h.getParent(g);
+            var k = c.isCloneEvent(b.getEvent()) && c.isCellsCloneable() && this.isCloneEnabled(),
+                e = c.getView().getState(d),
+                l = !1;
+            null != e && null == g && (h.getParent(this.cell) != d || k) ? (this.target != d && (this.target = d, this.setHighlightColor(mxConstants.DROP_TARGET_COLOR)), l = !0) : (this.target = null, this.connectOnDrop && (null != f && 1 == this.cells.length && c.getModel().isVertex(f) &&
+                c.isCellConnectable(f)) && (e = c.getView().getState(f), null != e && (c = null == c.getEdgeValidationError(null, this.cell, f) ? mxConstants.VALID_COLOR : mxConstants.INVALID_CONNECT_TARGET_COLOR, this.setHighlightColor(c), l = !0)));
+            null != e && l ? this.highlight.highlight(e) : this.highlight.hide()
+        }
+        b.consume();
+        mxEvent.consume(b.getEvent())
+    } else if ((this.isMoveEnabled() || this.isCloneEnabled()) && this.updateCursor && !b.isConsumed() && null != b.getState() && !c.isMouseDown) e = c.getCursorForCell(b.getCell()), null == e && (c.isEnabled() && c.isCellMovable(b.getCell())) &&
+        (e = c.getModel().isEdge(b.getCell()) ? mxConstants.CURSOR_MOVABLE_EDGE : mxConstants.CURSOR_MOVABLE_VERTEX), b.getState().setCursor(e), b.consume()
+};
+mxGraphHandler.prototype.updatePreviewShape = function() {
+    null != this.shape && (this.shape.bounds = new mxRectangle(Math.round(this.pBounds.x + this.currentDx - this.graph.panDx), Math.round(this.pBounds.y + this.currentDy - this.graph.panDy), this.pBounds.width, this.pBounds.height), this.shape.redraw())
+};
+mxGraphHandler.prototype.setHighlightColor = function(a) {
+    null != this.highlight && this.highlight.setHighlightColor(a)
+};
+mxGraphHandler.prototype.mouseUp = function(a, b) {
+    if (!b.isConsumed()) {
+        var c = this.graph;
+        if (null != this.cell && null != this.first && null != this.shape && null != this.currentDx && null != this.currentDy) {
+            var d = c.getView().scale,
+                e = c.isCloneEvent(b.getEvent()) && c.isCellsCloneable() && this.isCloneEnabled(),
+                f = this.currentDx / d,
+                d = this.currentDy / d,
+                g = b.getCell();
+            this.connectOnDrop && null == this.target && null != g && c.getModel().isVertex(g) && c.isCellConnectable(g) && c.isEdgeValid(null, this.cell, g) ? c.connectionHandler.connect(this.cell,
+                g, b.getEvent()) : (g = this.target, c.isSplitEnabled() && c.isSplitTarget(g, this.cells, b.getEvent()) ? c.splitEdge(g, this.cells, null, f, d) : this.moveCells(this.cells, f, d, e, this.target, b.getEvent()))
+        } else this.isSelectEnabled() && (this.delayedSelection && null != this.cell) && this.selectDelayed(b)
+    }
+    this.cellWasClicked && b.consume();
+    this.reset()
+};
+mxGraphHandler.prototype.selectDelayed = function(a) {
+    this.graph.selectCellForEvent(this.cell, a.getEvent())
+};
+mxGraphHandler.prototype.reset = function() {
+    this.destroyShapes();
+    this.delayedSelection = this.cellWasClicked = !1;
+    this.target = this.cell = this.first = this.guides = this.currentDy = this.currentDx = null
+};
+mxGraphHandler.prototype.shouldRemoveCellsFromParent = function(a, b, c) {
+    if (this.graph.getModel().isVertex(a)) {
+        a = this.graph.getView().getState(a);
+        c = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(c), mxEvent.getClientY(c));
+        var d = mxUtils.toRadians(mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION) || 0);
+        if (0 != d) {
+            b = Math.cos(-d);
+            var d = Math.sin(-d),
+                e = new mxPoint(a.getCenterX(), a.getCenterY());
+            c = mxUtils.getRotatedPoint(c, b, d, e)
+        }
+        return null != a && !mxUtils.contains(a, c.x, c.y)
+    }
+    return !1
+};
+mxGraphHandler.prototype.moveCells = function(a, b, c, d, e, f) {
+    d && (a = this.graph.getCloneableCells(a));
+    null == e && (this.isRemoveCellsFromParent() && this.shouldRemoveCellsFromParent(this.graph.getModel().getParent(this.cell), a, f)) && (e = this.graph.getDefaultParent());
+    a = this.graph.moveCells(a, b - this.graph.panDx / this.graph.view.scale, c - this.graph.panDy / this.graph.view.scale, d, e, f);
+    this.isSelectEnabled() && this.scrollOnMove && this.graph.scrollCellToVisible(a[0]);
+    d && this.graph.setSelectionCells(a)
+};
+mxGraphHandler.prototype.destroyShapes = function() {
+    null != this.shape && (this.shape.destroy(), this.shape = null);
+    null != this.guide && (this.guide.destroy(), this.guide = null);
+    null != this.highlight && (this.highlight.destroy(), this.highlight = null)
+};
+mxGraphHandler.prototype.destroy = function() {
+    this.graph.removeMouseListener(this);
+    this.graph.removeListener(this.panHandler);
+    this.destroyShapes()
+};
+
+function mxPanningHandler(a, b) {
+    null != a && (this.graph = a, this.factoryMethod = b, this.graph.addMouseListener(this), this.init())
+}
+mxPanningHandler.prototype = new mxPopupMenu;
+mxPanningHandler.prototype.constructor = mxPanningHandler;
+mxPanningHandler.prototype.graph = null;
+mxPanningHandler.prototype.triggerX = null;
+mxPanningHandler.prototype.triggerY = null;
+mxPanningHandler.prototype.usePopupTrigger = !0;
+mxPanningHandler.prototype.useLeftButtonForPanning = !1;
+mxPanningHandler.prototype.selectOnPopup = !0;
+mxPanningHandler.prototype.clearSelectionOnBackground = !0;
+mxPanningHandler.prototype.ignoreCell = !1;
+mxPanningHandler.prototype.previewEnabled = !0;
+mxPanningHandler.prototype.useGrid = !1;
+mxPanningHandler.prototype.panningEnabled = !0;
+mxPanningHandler.prototype.isPanningEnabled = function() {
+    return this.panningEnabled
+};
+mxPanningHandler.prototype.setPanningEnabled = function(a) {
+    this.panningEnabled = a
+};
+mxPanningHandler.prototype.init = function() {
+    mxPopupMenu.prototype.init.apply(this);
+    mxEvent.addListener(this.div, mxClient.IS_TOUCH ? "touchmove" : "mousemove", mxUtils.bind(this, function(a) {
+        this.graph.tooltipHandler.hide()
+    }))
+};
+mxPanningHandler.prototype.isPanningTrigger = function(a) {
+    var b = a.getEvent();
+    return this.useLeftButtonForPanning && (this.ignoreCell || null == a.getState()) && mxEvent.isLeftMouseButton(b) || mxEvent.isControlDown(b) && mxEvent.isShiftDown(b) || this.usePopupTrigger && mxEvent.isPopupTrigger(b)
+};
+mxPanningHandler.prototype.mouseDown = function(a, b) {
+    if (!b.isConsumed() && this.isEnabled()) {
+        this.hideMenu();
+        this.dx0 = -this.graph.container.scrollLeft;
+        this.dy0 = -this.graph.container.scrollTop;
+        var c = mxUtils.convertPoint(this.graph.container, b.getX(), b.getY());
+        this.triggerX = c.x;
+        this.triggerY = c.y;
+        this.popupTrigger = this.isPopupTrigger(b);
+        this.panningTrigger = this.isPanningEnabled() && this.isPanningTrigger(b);
+        this.startX = b.getX();
+        this.startY = b.getY();
+        this.panningTrigger && this.consumePanningTrigger(b)
+    }
+};
+mxPanningHandler.prototype.consumePanningTrigger = function(a) {
+    a.consume()
+};
+mxPanningHandler.prototype.mouseMove = function(a, b) {
+    var c = b.getX() - this.startX,
+        d = b.getY() - this.startY;
+    if (this.active) this.previewEnabled && (this.useGrid && (c = this.graph.snap(c), d = this.graph.snap(d)), this.graph.panGraph(c + this.dx0, d + this.dy0)), this.fireEvent(new mxEventObject(mxEvent.PAN, "event", b)), b.consume();
+    else if (this.panningTrigger) {
+        var e = this.active;
+        this.active = Math.abs(c) > this.graph.tolerance || Math.abs(d) > this.graph.tolerance;
+        !e && this.active && this.fireEvent(new mxEventObject(mxEvent.PAN_START,
+            "event", b))
+    }
+};
+mxPanningHandler.prototype.mouseUp = function(a, b) {
+    var c = Math.abs(b.getX() - this.startX),
+        d = Math.abs(b.getY() - this.startY);
+    if (this.active) {
+        if (!this.graph.useScrollbarsForPanning || !mxUtils.hasScrollbars(this.graph.container)) {
+            c = b.getX() - this.startX;
+            d = b.getY() - this.startY;
+            this.useGrid && (c = this.graph.snap(c), d = this.graph.snap(d));
+            var e = this.graph.getView().scale,
+                f = this.graph.getView().translate;
+            this.graph.panGraph(0, 0);
+            this.panGraph(f.x + c / e, f.y + d / e)
+        }
+        this.active = !1;
+        this.fireEvent(new mxEventObject(mxEvent.PAN_END, "event",
+            b));
+        b.consume()
+    } else this.popupTrigger && (c < this.graph.tolerance && d < this.graph.tolerance) && (c = this.getCellForPopupEvent(b), this.graph.isEnabled() && this.selectOnPopup && null != c && !this.graph.isCellSelected(c) ? this.graph.setSelectionCell(c) : this.clearSelectionOnBackground && null == c && this.graph.clearSelection(), this.graph.tooltipHandler.hide(), d = mxUtils.getScrollOrigin(), d = new mxPoint(b.getX() + d.x, b.getY() + d.y), this.popup(d.x + 1, d.y + 1, c, b.getEvent()), b.consume());
+    this.popupTrigger = this.panningTrigger = !1
+};
+mxPanningHandler.prototype.getCellForPopupEvent = function(a) {
+    return a.getCell()
+};
+mxPanningHandler.prototype.panGraph = function(a, b) {
+    this.graph.getView().setTranslate(a, b)
+};
+mxPanningHandler.prototype.destroy = function() {
+    this.graph.removeMouseListener(this);
+    mxPopupMenu.prototype.destroy.apply(this)
+};
+
+function mxCellMarker(a, b, c, d) {
+    mxEventSource.call(this);
+    null != a && (this.graph = a, this.validColor = null != b ? b : mxConstants.DEFAULT_VALID_COLOR, this.invalidColor = null != b ? c : mxConstants.DEFAULT_INVALID_COLOR, this.hotspot = null != d ? d : mxConstants.DEFAULT_HOTSPOT, this.highlight = new mxCellHighlight(a))
+}
+mxUtils.extend(mxCellMarker, mxEventSource);
+mxCellMarker.prototype.graph = null;
+mxCellMarker.prototype.enabled = !0;
+mxCellMarker.prototype.hotspot = mxConstants.DEFAULT_HOTSPOT;
+mxCellMarker.prototype.hotspotEnabled = !1;
+mxCellMarker.prototype.validColor = null;
+mxCellMarker.prototype.invalidColor = null;
+mxCellMarker.prototype.currentColor = null;
+mxCellMarker.prototype.validState = null;
+mxCellMarker.prototype.markedState = null;
+mxCellMarker.prototype.setEnabled = function(a) {
+    this.enabled = a
+};
+mxCellMarker.prototype.isEnabled = function() {
+    return this.enabled
+};
+mxCellMarker.prototype.setHotspot = function(a) {
+    this.hotspot = a
+};
+mxCellMarker.prototype.getHotspot = function() {
+    return this.hotspot
+};
+mxCellMarker.prototype.setHotspotEnabled = function(a) {
+    this.hotspotEnabled = a
+};
+mxCellMarker.prototype.isHotspotEnabled = function() {
+    return this.hotspotEnabled
+};
+mxCellMarker.prototype.hasValidState = function() {
+    return null != this.validState
+};
+mxCellMarker.prototype.getValidState = function() {
+    return this.validState
+};
+mxCellMarker.prototype.getMarkedState = function() {
+    return this.markedState
+};
+mxCellMarker.prototype.reset = function() {
+    this.validState = null;
+    null != this.markedState && (this.markedState = null, this.unmark())
+};
+mxCellMarker.prototype.process = function(a) {
+    var b = null;
+    if (this.isEnabled()) {
+        var b = this.getState(a),
+            c = null != b ? this.isValidState(b) : !1;
+        a = this.getMarkerColor(a.getEvent(), b, c);
+        this.validState = c ? b : null;
+        if (b != this.markedState || a != this.currentColor) this.currentColor = a, null != b && null != this.currentColor ? (this.markedState = b, this.mark()) : null != this.markedState && (this.markedState = null, this.unmark())
+    }
+    return b
+};
+mxCellMarker.prototype.markCell = function(a, b) {
+    var c = this.graph.getView().getState(a);
+    null != c && (this.currentColor = null != b ? b : this.validColor, this.markedState = c, this.mark())
+};
+mxCellMarker.prototype.mark = function() {
+    this.highlight.setHighlightColor(this.currentColor);
+    this.highlight.highlight(this.markedState);
+    this.fireEvent(new mxEventObject(mxEvent.MARK, "state", this.markedState))
+};
+mxCellMarker.prototype.unmark = function() {
+    this.mark()
+};
+mxCellMarker.prototype.isValidState = function(a) {
+    return !0
+};
+mxCellMarker.prototype.getMarkerColor = function(a, b, c) {
+    return c ? this.validColor : this.invalidColor
+};
+mxCellMarker.prototype.getState = function(a) {
+    var b = this.graph.getView();
+    cell = this.getCell(a);
+    b = this.getStateToMark(b.getState(cell));
+    return null != b && this.intersects(b, a) ? b : null
+};
+mxCellMarker.prototype.getCell = function(a) {
+    return a.getCell()
+};
+mxCellMarker.prototype.getStateToMark = function(a) {
+    return a
+};
+mxCellMarker.prototype.intersects = function(a, b) {
+    return this.hotspotEnabled ? mxUtils.intersectsHotspot(a, b.getGraphX(), b.getGraphY(), this.hotspot, mxConstants.MIN_HOTSPOT_SIZE, mxConstants.MAX_HOTSPOT_SIZE) : !0
+};
+mxCellMarker.prototype.destroy = function() {
+    this.graph.getView().removeListener(this.resetHandler);
+    this.graph.getModel().removeListener(this.resetHandler);
+    this.highlight.destroy()
+};
+
+function mxSelectionCellsHandler(a) {
+    mxEventSource.call(this);
+    this.graph = a;
+    this.handlers = new mxDictionary;
+    this.graph.addMouseListener(this);
+    this.refreshHandler = mxUtils.bind(this, function(a, c) {
+        this.isEnabled() && this.refresh()
+    });
+    this.graph.getSelectionModel().addListener(mxEvent.CHANGE, this.refreshHandler);
+    this.graph.getModel().addListener(mxEvent.CHANGE, this.refreshHandler);
+    this.graph.getView().addListener(mxEvent.SCALE, this.refreshHandler);
+    this.graph.getView().addListener(mxEvent.TRANSLATE, this.refreshHandler);
+    this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE, this.refreshHandler);
+    this.graph.getView().addListener(mxEvent.DOWN, this.refreshHandler);
+    this.graph.getView().addListener(mxEvent.UP, this.refreshHandler)
+}
+mxUtils.extend(mxSelectionCellsHandler, mxEventSource);
+mxSelectionCellsHandler.prototype.graph = null;
+mxSelectionCellsHandler.prototype.enabled = !0;
+mxSelectionCellsHandler.prototype.refreshHandler = null;
+mxSelectionCellsHandler.prototype.maxHandlers = 100;
+mxSelectionCellsHandler.prototype.handlers = null;
+mxSelectionCellsHandler.prototype.isEnabled = function() {
+    return this.enabled
+};
+mxSelectionCellsHandler.prototype.setEnabled = function(a) {
+    this.enabled = a
+};
+mxSelectionCellsHandler.prototype.getHandler = function(a) {
+    return this.handlers.get(a)
+};
+mxSelectionCellsHandler.prototype.reset = function() {
+    this.handlers.visit(function(a, b) {
+        b.reset.apply(b)
+    })
+};
+mxSelectionCellsHandler.prototype.refresh = function() {
+    var a = this.handlers;
+    this.handlers = new mxDictionary;
+    for (var b = this.graph.getSelectionCells(), c = 0; c < b.length; c++) {
+        var d = this.graph.view.getState(b[c]);
+        if (null != d) {
+            var e = a.remove(b[c]);
+            null != e && (e.state != d ? (e.destroy(), e = null) : e.redraw());
+            null == e && (e = this.graph.createHandler(d), this.fireEvent(new mxEventObject(mxEvent.ADD, "state", d)));
+            null != e && this.handlers.put(b[c], e)
+        }
+    }
+    a.visit(mxUtils.bind(this, function(a, b) {
+        this.fireEvent(new mxEventObject(mxEvent.REMOVE,
+            "state", b.state));
+        b.destroy()
+    }))
+};
+mxSelectionCellsHandler.prototype.mouseDown = function(a, b) {
+    if (this.graph.isEnabled() && this.isEnabled()) {
+        var c = [a, b];
+        this.handlers.visit(function(a, b) {
+            b.mouseDown.apply(b, c)
+        })
+    }
+};
+mxSelectionCellsHandler.prototype.mouseMove = function(a, b) {
+    if (this.graph.isEnabled() && this.isEnabled()) {
+        var c = [a, b];
+        this.handlers.visit(function(a, b) {
+            b.mouseMove.apply(b, c)
+        })
+    }
+};
+mxSelectionCellsHandler.prototype.mouseUp = function(a, b) {
+    if (this.graph.isEnabled() && this.isEnabled()) {
+        var c = [a, b];
+        this.handlers.visit(function(a, b) {
+            b.mouseUp.apply(b, c)
+        })
+    }
+};
+mxSelectionCellsHandler.prototype.destroy = function() {
+    this.graph.removeMouseListener(this);
+    null != this.refreshHandler && (this.graph.getSelectionModel().removeListener(this.refreshHandler), this.graph.getModel().removeListener(this.refreshHandler), this.graph.getView().removeListener(this.refreshHandler), this.refreshHandler = null)
+};
+
+function mxConnectionHandler(a, b) {
+    mxEventSource.call(this);
+    null != a && (this.graph = a, this.factoryMethod = b, this.init())
+}
+mxUtils.extend(mxConnectionHandler, mxEventSource);
+mxConnectionHandler.prototype.graph = null;
+mxConnectionHandler.prototype.factoryMethod = !0;
+mxConnectionHandler.prototype.moveIconFront = !1;
+mxConnectionHandler.prototype.moveIconBack = !1;
+mxConnectionHandler.prototype.connectImage = null;
+mxConnectionHandler.prototype.targetConnectImage = !1;
+mxConnectionHandler.prototype.enabled = !0;
+mxConnectionHandler.prototype.select = !0;
+mxConnectionHandler.prototype.createTarget = !1;
+mxConnectionHandler.prototype.marker = null;
+mxConnectionHandler.prototype.constraintHandler = null;
+mxConnectionHandler.prototype.error = null;
+mxConnectionHandler.prototype.waypointsEnabled = !1;
+mxConnectionHandler.prototype.tapAndHoldEnabled = !0;
+mxConnectionHandler.prototype.tapAndHoldDelay = 500;
+mxConnectionHandler.prototype.tapAndHoldInProgress = !1;
+mxConnectionHandler.prototype.tapAndHoldValid = !1;
+mxConnectionHandler.prototype.tapAndHoldTolerance = 4;
+mxConnectionHandler.prototype.initialTouchX = 0;
+mxConnectionHandler.prototype.initialTouchY = 0;
+mxConnectionHandler.prototype.ignoreMouseDown = !1;
+mxConnectionHandler.prototype.first = null;
+mxConnectionHandler.prototype.connectIconOffset = new mxPoint(0, mxConstants.TOOLTIP_VERTICAL_OFFSET);
+mxConnectionHandler.prototype.edgeState = null;
+mxConnectionHandler.prototype.changeHandler = null;
+mxConnectionHandler.prototype.drillHandler = null;
+mxConnectionHandler.prototype.mouseDownCounter = 0;
+mxConnectionHandler.prototype.movePreviewAway = mxClient.IS_VML;
+mxConnectionHandler.prototype.isEnabled = function() {
+    return this.enabled
+};
+mxConnectionHandler.prototype.setEnabled = function(a) {
+    this.enabled = a
+};
+mxConnectionHandler.prototype.isCreateTarget = function() {
+    return this.createTarget
+};
+mxConnectionHandler.prototype.setCreateTarget = function(a) {
+    this.createTarget = a
+};
+mxConnectionHandler.prototype.createShape = function() {
+    var a = new mxPolyline([], mxConstants.INVALID_COLOR);
+    a.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG;
+    a.init(this.graph.getView().getOverlayPane());
+    a.svgStrokeTolerance = 0;
+    a.pointerEvents = !1;
+    a.isDashed = !0;
+    if (this.graph.dialect == mxConstants.DIALECT_SVG) a.node.setAttribute("pointer-events", "none");
+    else {
+        var b = mxUtils.bind(this, function(a) {
+            a = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(a),
+                mxEvent.getClientY(a));
+            return this.graph.view.getState(this.graph.getCellAt(a.x, a.y))
+        });
+        mxEvent.redirectMouseEvents(a.node, this.graph, b)
+    }
+    return a
+};
+mxConnectionHandler.prototype.init = function() {
+    this.graph.addMouseListener(this);
+    this.marker = this.createMarker();
+    this.constraintHandler = new mxConstraintHandler(this.graph);
+    this.changeHandler = mxUtils.bind(this, function(a) {
+        null != this.iconState && (this.iconState = this.graph.getView().getState(this.iconState.cell));
+        null != this.iconState ? this.redrawIcons(this.icons, this.iconState) : (this.destroyIcons(this.icons), this.previous = null);
+        this.constraintHandler.reset()
+    });
+    this.graph.getModel().addListener(mxEvent.CHANGE,
+        this.changeHandler);
+    this.graph.getView().addListener(mxEvent.SCALE, this.changeHandler);
+    this.graph.getView().addListener(mxEvent.TRANSLATE, this.changeHandler);
+    this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE, this.changeHandler);
+    this.drillHandler = mxUtils.bind(this, function(a) {
+        this.destroyIcons(this.icons)
+    });
+    this.graph.addListener(mxEvent.START_EDITING, this.drillHandler);
+    this.graph.getView().addListener(mxEvent.DOWN, this.drillHandler);
+    this.graph.getView().addListener(mxEvent.UP, this.drillHandler)
+};
+mxConnectionHandler.prototype.isConnectableCell = function(a) {
+    return !0
+};
+mxConnectionHandler.prototype.createMarker = function() {
+    var a = new mxCellMarker(this.graph);
+    a.hotspotEnabled = !0;
+    a.getCell = mxUtils.bind(this, function(b, c) {
+        c = mxCellMarker.prototype.getCell.apply(a, arguments);
+        this.error = null;
+        if (!this.isConnectableCell(c)) return null;
+        null != c ? this.isConnecting() ? null != this.previous && (this.error = this.validateConnection(this.previous.cell, c), null != this.error && 0 == this.error.length && (c = null, this.isCreateTarget() && (this.error = null))) : this.isValidSource(c) || (c = null) : this.isConnecting() &&
+            (!this.isCreateTarget() && !this.graph.allowDanglingEdges) && (this.error = "");
+        return c
+    });
+    a.isValidState = mxUtils.bind(this, function(b) {
+        return this.isConnecting() ? null == this.error : mxCellMarker.prototype.isValidState.apply(a, arguments)
+    });
+    a.getMarkerColor = mxUtils.bind(this, function(b, c, d) {
+        return null == this.connectImage || this.isConnecting() ? mxCellMarker.prototype.getMarkerColor.apply(a, arguments) : null
+    });
+    a.intersects = mxUtils.bind(this, function(b, c) {
+        return null != this.connectImage || this.isConnecting() ? !0 : mxCellMarker.prototype.intersects.apply(a,
+            arguments)
+    });
+    return a
+};
+mxConnectionHandler.prototype.start = function(a, b, c, d) {
+    this.previous = a;
+    this.first = new mxPoint(b, c);
+    this.edgeState = null != d ? d : this.createEdgeState(null);
+    this.marker.currentColor = this.marker.validColor;
+    this.marker.markedState = a;
+    this.marker.mark();
+    this.fireEvent(new mxEventObject(mxEvent.START, "state", this.previous))
+};
+mxConnectionHandler.prototype.isConnecting = function() {
+    return null != this.first && null != this.shape
+};
+mxConnectionHandler.prototype.isValidSource = function(a) {
+    return this.graph.isValidSource(a)
+};
+mxConnectionHandler.prototype.isValidTarget = function(a) {
+    return !0
+};
+mxConnectionHandler.prototype.validateConnection = function(a, b) {
+    return !this.isValidTarget(b) ? "" : this.graph.getEdgeValidationError(null, a, b)
+};
+mxConnectionHandler.prototype.getConnectImage = function(a) {
+    return this.connectImage
+};
+mxConnectionHandler.prototype.isMoveIconToFrontForState = function(a) {
+    return null != a.text && a.text.node.parentNode == this.graph.container ? !0 : this.moveIconFront
+};
+mxConnectionHandler.prototype.createIcons = function(a) {
+    var b = this.getConnectImage(a);
+    if (null != b && null != a) {
+        this.iconState = a;
+        var c = [],
+            d = new mxRectangle(0, 0, b.width, b.height),
+            e = new mxImageShape(d, b.src, null, null, 0);
+        e.preserveImageAspect = !1;
+        this.isMoveIconToFrontForState(a) ? (e.dialect = mxConstants.DIALECT_STRICTHTML, e.init(this.graph.container)) : (e.dialect = this.graph.dialect == mxConstants.DIALECT_SVG ? mxConstants.DIALECT_SVG : mxConstants.DIALECT_VML, e.init(this.graph.getView().getOverlayPane()), this.moveIconBack &&
+            null != e.node.previousSibling && e.node.parentNode.insertBefore(e.node, e.node.parentNode.firstChild));
+        e.node.style.cursor = mxConstants.CURSOR_CONNECT;
+        var f = mxUtils.bind(this, function() {
+                return null != this.currentState ? this.currentState : a
+            }),
+            b = mxUtils.bind(this, function(a) {
+                mxEvent.isConsumed(a) || (this.icon = e, this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a, f())))
+            });
+        mxEvent.redirectMouseEvents(e.node, this.graph, f, b);
+        c.push(e);
+        this.redrawIcons(c, this.iconState);
+        return c
+    }
+    return null
+};
+mxConnectionHandler.prototype.redrawIcons = function(a, b) {
+    if (null != a && null != a[0] && null != b) {
+        var c = this.getIconPosition(a[0], b);
+        a[0].bounds.x = c.x;
+        a[0].bounds.y = c.y;
+        a[0].redraw()
+    }
+};
+mxConnectionHandler.prototype.getIconPosition = function(a, b) {
+    var c = this.graph.getView().scale,
+        d = b.getCenterX(),
+        e = b.getCenterY();
+    if (this.graph.isSwimlane(b.cell)) {
+        var f = this.graph.getStartSize(b.cell),
+            d = 0 != f.width ? b.x + f.width * c / 2 : d,
+            e = 0 != f.height ? b.y + f.height * c / 2 : e,
+            f = mxUtils.toRadians(mxUtils.getValue(b.style, mxConstants.STYLE_ROTATION) || 0);
+        if (0 != f) var c = Math.cos(f),
+            f = Math.sin(f),
+            g = new mxPoint(b.getCenterX(), b.getCenterY()),
+            e = mxUtils.getRotatedPoint(new mxPoint(d, e), c, f, g),
+            d = e.x,
+            e = e.y
+    }
+    return new mxPoint(d -
+        a.bounds.width / 2, e - a.bounds.height / 2)
+};
+mxConnectionHandler.prototype.destroyIcons = function(a) {
+    if (null != a) {
+        this.iconState = null;
+        for (var b = 0; b < a.length; b++) a[b].destroy()
+    }
+};
+mxConnectionHandler.prototype.isStartEvent = function(a) {
+    return !this.graph.isForceMarqueeEvent(a.getEvent()) && (null != this.constraintHandler.currentFocus && null != this.constraintHandler.currentConstraint || null != this.previous && null == this.error && (null == this.icons || null != this.icons && null != this.icon))
+};
+mxConnectionHandler.prototype.mouseDown = function(a, b) {
+    this.mouseDownCounter++;
+    if (this.isEnabled() && this.graph.isEnabled() && !b.isConsumed() && !this.isConnecting() && this.isStartEvent(b)) {
+        null != this.constraintHandler.currentConstraint && null != this.constraintHandler.currentFocus && null != this.constraintHandler.currentPoint ? (this.sourceConstraint = this.constraintHandler.currentConstraint, this.previous = this.constraintHandler.currentFocus, this.first = this.constraintHandler.currentPoint.clone()) : this.first = new mxPoint(b.getGraphX(),
+            b.getGraphY());
+        this.edgeState = this.createEdgeState(b);
+        this.mouseDownCounter = 1;
+        this.waypointsEnabled && null == this.shape && (this.waypoints = null, this.shape = this.createShape());
+        if (null == this.previous && null != this.edgeState) {
+            var c = this.graph.getPointForEvent(b.getEvent());
+            this.edgeState.cell.geometry.setTerminalPoint(c, !0)
+        }
+        this.fireEvent(new mxEventObject(mxEvent.START, "state", this.previous));
+        b.consume()
+    } else if (mxClient.IS_TOUCH && this.tapAndHoldEnabled && !this.tapAndHoldInProgress && this.isEnabled() && this.graph.isEnabled() &&
+        !this.isConnecting()) {
+        this.tapAndHoldInProgress = !0;
+        this.initialTouchX = b.getX();
+        this.initialTouchY = b.getY();
+        var d = this.graph.view.getState(this.marker.getCell(b));
+        this.tapAndHoldThread && window.clearTimeout(this.tapAndHoldThread);
+        this.tapAndHoldThread = window.setTimeout(mxUtils.bind(this, function() {
+            this.tapAndHoldValid && this.tapAndHold(b, d);
+            this.tapAndHoldValid = this.tapAndHoldInProgress = !1
+        }), this.tapAndHoldDelay);
+        this.tapAndHoldValid = !0
+    }
+    this.selectedIcon = this.icon;
+    this.icon = null
+};
+mxConnectionHandler.prototype.tapAndHold = function(a, b) {
+    null != b && (this.marker.currentColor = this.marker.validColor, this.marker.markedState = b, this.marker.mark(), this.first = new mxPoint(a.getGraphX(), a.getGraphY()), this.edgeState = this.createEdgeState(a), this.previous = b, this.fireEvent(new mxEventObject(mxEvent.START, "state", this.previous)))
+};
+mxConnectionHandler.prototype.isImmediateConnectSource = function(a) {
+    return !this.graph.isCellMovable(a.cell)
+};
+mxConnectionHandler.prototype.createEdgeState = function(a) {
+    return null
+};
+mxConnectionHandler.prototype.updateCurrentState = function(a) {
+    var b = this.marker.process(a);
+    this.constraintHandler.update(a, null == this.first);
+    this.currentState = b
+};
+mxConnectionHandler.prototype.convertWaypoint = function(a) {
+    var b = this.graph.getView().getScale(),
+        c = this.graph.getView().getTranslate();
+    a.x = a.x / b - c.x;
+    a.y = a.y / b - c.y
+};
+mxConnectionHandler.prototype.mouseMove = function(a, b) {
+    this.tapAndHoldValid && (this.tapAndHoldValid = Math.abs(this.initialTouchX - b.getX()) < this.tapAndHoldTolerance && Math.abs(this.initialTouchY - b.getY()) < this.tapAndHoldTolerance);
+    if (!b.isConsumed() && (this.ignoreMouseDown || null != this.first || !this.graph.isMouseDown)) {
+        !this.isEnabled() && null != this.currentState && (this.destroyIcons(this.icons), this.currentState = null);
+        (null != this.first || this.isEnabled() && this.graph.isEnabled()) && this.updateCurrentState(b);
+        if (null != this.first) {
+            var c = this.graph.getView().scale,
+                c = new mxPoint(this.graph.snap(b.getGraphX() / c) * c, this.graph.snap(b.getGraphY() / c) * c),
+                d = null,
+                e = c;
+            null != this.constraintHandler.currentConstraint && (null != this.constraintHandler.currentFocus && null != this.constraintHandler.currentPoint) && (d = this.constraintHandler.currentConstraint, e = this.constraintHandler.currentPoint.clone());
+            var f = this.first;
+            if (null != this.selectedIcon) {
+                var g = this.selectedIcon.bounds.width,
+                    h = this.selectedIcon.bounds.height;
+                null != this.currentState &&
+                    this.targetConnectImage ? (g = this.getIconPosition(this.selectedIcon, this.currentState), this.selectedIcon.bounds.x = g.x, this.selectedIcon.bounds.y = g.y) : (g = new mxRectangle(b.getGraphX() + this.connectIconOffset.x, b.getGraphY() + this.connectIconOffset.y, g, h), this.selectedIcon.bounds = g);
+                this.selectedIcon.redraw()
+            }
+            if (null != this.edgeState) {
+                this.edgeState.absolutePoints = [null, null != this.currentState ? null : e];
+                this.graph.view.updateFixedTerminalPoint(this.edgeState, this.previous, !0, this.sourceConstraint);
+                null != this.currentState &&
+                    (null == d && (d = this.graph.getConnectionConstraint(this.edgeState, this.previous, !1)), this.edgeState.setAbsoluteTerminalPoint(null, !1), this.graph.view.updateFixedTerminalPoint(this.edgeState, this.currentState, !1, d));
+                f = null;
+                if (null != this.waypoints) {
+                    f = [];
+                    for (e = 0; e < this.waypoints.length; e++) d = this.waypoints[e].clone(), this.convertWaypoint(d), f[e] = d
+                }
+                this.graph.view.updatePoints(this.edgeState, f, this.previous, this.currentState);
+                this.graph.view.updateFloatingTerminalPoints(this.edgeState, this.previous, this.currentState);
+                e = this.edgeState.absolutePoints[this.edgeState.absolutePoints.length - 1];
+                f = this.edgeState.absolutePoints[0]
+            } else null != this.currentState && null == this.constraintHandler.currentConstraint && (g = this.getTargetPerimeterPoint(this.currentState, b), null != g && (e = g)), null == this.sourceConstraint && null != this.previous && (g = this.getSourcePerimeterPoint(this.previous, null != this.waypoints && 0 < this.waypoints.length ? this.waypoints[0] : e, b), null != g && (f = g));
+            if (null == this.currentState && this.movePreviewAway) {
+                g = f;
+                null != this.edgeState &&
+                    2 < this.edgeState.absolutePoints.length && (d = this.edgeState.absolutePoints[this.edgeState.absolutePoints.length - 2], null != d && (g = d));
+                d = e.x - g.x;
+                g = e.y - g.y;
+                h = Math.sqrt(d * d + g * g);
+                if (0 == h) return;
+                e.x -= 4 * d / h;
+                e.y -= 4 * g / h
+            }
+            if (null == this.shape && (d = Math.abs(c.x - this.first.x), g = Math.abs(c.y - this.first.y), d > this.graph.tolerance || g > this.graph.tolerance)) this.shape = this.createShape(), this.updateCurrentState(b);
+            null != this.shape && (null != this.edgeState ? this.shape.points = this.edgeState.absolutePoints : (c = [f], null != this.waypoints &&
+                (c = c.concat(this.waypoints)), c.push(e), this.shape.points = c), this.drawPreview());
+            mxEvent.consume(b.getEvent());
+            b.consume()
+        } else !this.isEnabled() || !this.graph.isEnabled() ? this.constraintHandler.reset() : this.previous != this.currentState && null == this.edgeState ? (this.destroyIcons(this.icons), this.icons = null, null != this.currentState && null == this.error && (this.icons = this.createIcons(this.currentState), null == this.icons && (this.currentState.setCursor(mxConstants.CURSOR_CONNECT), b.consume())), this.previous = this.currentState) :
+            this.previous == this.currentState && (null != this.currentState && null == this.icons && !this.graph.isMouseDown) && b.consume();
+        null != this.constraintHandler.currentConstraint && this.marker.reset();
+        if (!this.graph.isMouseDown && null != this.currentState && null != this.icons) {
+            c = !1;
+            f = b.getSource();
+            for (e = 0; e < this.icons.length && !c; e++) c = f == this.icons[e].node || f.parentNode == this.icons[e].node;
+            c || this.updateIcons(this.currentState, this.icons, b)
+        }
+    } else this.constraintHandler.reset()
+};
+mxConnectionHandler.prototype.getTargetPerimeterPoint = function(a, b) {
+    var c = null,
+        d = a.view,
+        e = d.getPerimeterFunction(a);
+    if (null != e) {
+        var f = null != this.waypoints && 0 < this.waypoints.length ? this.waypoints[this.waypoints.length - 1] : new mxPoint(this.previous.getCenterX(), this.previous.getCenterY()),
+            d = e(d.getPerimeterBounds(a), this.edgeState, f, !1);
+        null != d && (c = d)
+    } else c = new mxPoint(a.getCenterX(), a.getCenterY());
+    return c
+};
+mxConnectionHandler.prototype.getSourcePerimeterPoint = function(a, b, c) {
+    c = null;
+    var d = a.view,
+        e = d.getPerimeterFunction(a),
+        f = new mxPoint(a.getCenterX(), a.getCenterY());
+    if (null != e) {
+        var g = mxUtils.getValue(a.style, mxConstants.STYLE_ROTATION, 0),
+            h = -g * (Math.PI / 180);
+        0 != g && (b = mxUtils.getRotatedPoint(new mxPoint(b.x, b.y), Math.cos(h), Math.sin(h), f));
+        a = e(d.getPerimeterBounds(a), a, b, !1);
+        null != a && (0 != g && (a = mxUtils.getRotatedPoint(new mxPoint(a.x, a.y), Math.cos(-h), Math.sin(-h), f)), c = a)
+    } else c = f;
+    return c
+};
+mxConnectionHandler.prototype.updateIcons = function(a, b, c) {};
+mxConnectionHandler.prototype.isStopEvent = function(a) {
+    return null != a.getState()
+};
+mxConnectionHandler.prototype.addWaypointForEvent = function(a) {
+    var b = mxUtils.convertPoint(this.graph.container, a.getX(), a.getY()),
+        c = Math.abs(b.x - this.first.x),
+        b = Math.abs(b.y - this.first.y);
+    if (null != this.waypoints || 1 < this.mouseDownCounter && (c > this.graph.tolerance || b > this.graph.tolerance)) null == this.waypoints && (this.waypoints = []), c = this.graph.view.scale, b = new mxPoint(this.graph.snap(a.getGraphX() / c) * c, this.graph.snap(a.getGraphY() / c) * c), this.waypoints.push(b)
+};
+mxConnectionHandler.prototype.mouseUp = function(a, b) {
+    if (!b.isConsumed() && this.isConnecting()) {
+        if (this.waypointsEnabled && !this.isStopEvent(b)) {
+            this.addWaypointForEvent(b);
+            b.consume();
+            return
+        }
+        if (null == this.error) {
+            var c = null != this.previous ? this.previous.cell : null,
+                d = null;
+            null != this.constraintHandler.currentConstraint && null != this.constraintHandler.currentFocus && (d = this.constraintHandler.currentFocus.cell);
+            null == d && this.marker.hasValidState() && (d = this.marker.validState.cell);
+            this.connect(c, d, b.getEvent(),
+                b.getCell())
+        } else null != this.previous && (null != this.marker.validState && this.previous.cell == this.marker.validState.cell) && this.graph.selectCellForEvent(this.marker.source, evt), 0 < this.error.length && this.graph.validationAlert(this.error);
+        this.destroyIcons(this.icons);
+        b.consume()
+    }
+    null != this.first && this.reset();
+    this.tapAndHoldValid = this.tapAndHoldInProgress = !1
+};
+mxConnectionHandler.prototype.reset = function() {
+    null != this.shape && (this.shape.destroy(), this.shape = null);
+    this.destroyIcons(this.icons);
+    this.icons = null;
+    this.marker.reset();
+    this.constraintHandler.reset();
+    this.sourceConstraint = this.error = this.previous = this.edgeState = this.selectedIcon = null;
+    this.mouseDownCounter = 0;
+    this.icon = this.first = null;
+    this.fireEvent(new mxEventObject(mxEvent.RESET))
+};
+mxConnectionHandler.prototype.drawPreview = function() {
+    var a = null == this.error;
+    this.shape.strokewidth = this.getEdgeWidth(a);
+    a = this.getEdgeColor(a);
+    this.shape.stroke = a;
+    this.shape.redraw()
+};
+mxConnectionHandler.prototype.getEdgeColor = function(a) {
+    return a ? mxConstants.VALID_COLOR : mxConstants.INVALID_COLOR
+};
+mxConnectionHandler.prototype.getEdgeWidth = function(a) {
+    return a ? 3 : 1
+};
+mxConnectionHandler.prototype.connect = function(a, b, c, d) {
+    if (null != b || this.isCreateTarget() || this.graph.allowDanglingEdges) {
+        var e = this.graph.getModel(),
+            f = null;
+        e.beginUpdate();
+        try {
+            if (null != a && (null == b && this.isCreateTarget()) && (b = this.createTargetVertex(c, a), null != b)) {
+                d = this.graph.getDropTarget([b], c, d);
+                if (null == d || !this.graph.getModel().isEdge(d)) {
+                    var g = this.graph.getView().getState(d);
+                    if (null != g) {
+                        var h = e.getGeometry(b);
+                        h.x -= g.origin.x;
+                        h.y -= g.origin.y
+                    }
+                } else d = this.graph.getDefaultParent();
+                this.graph.addCell(b,
+                    d)
+            }
+            var k = this.graph.getDefaultParent();
+            null != a && (null != b && e.getParent(a) == e.getParent(b) && e.getParent(e.getParent(a)) != e.getRoot()) && (k = e.getParent(a), null != a.geometry && a.geometry.relative && (null != b.geometry && b.geometry.relative) && (k = e.getParent(k)));
+            h = g = null;
+            null != this.edgeState && (g = this.edgeState.cell.value, h = this.edgeState.cell.style);
+            f = this.insertEdge(k, null, g, a, b, h);
+            if (null != f) {
+                this.graph.setConnectionConstraint(f, a, !0, this.sourceConstraint);
+                this.graph.setConnectionConstraint(f, b, !1, this.constraintHandler.currentConstraint);
+                null != this.edgeState && e.setGeometry(f, this.edgeState.cell.geometry);
+                var l = e.getGeometry(f);
+                null == l && (l = new mxGeometry, l.relative = !0, e.setGeometry(f, l));
+                if (null != this.waypoints && 0 < this.waypoints.length) {
+                    var m = this.graph.view.scale,
+                        n = this.graph.view.translate;
+                    l.points = [];
+                    for (a = 0; a < this.waypoints.length; a++) {
+                        var p = this.waypoints[a];
+                        l.points.push(new mxPoint(p.x / m - n.x, p.y / m - n.y))
+                    }
+                }
+                null == b && (p = this.graph.getPointForEvent(c, !1), p.x -= this.graph.panDx / this.graph.view.scale, p.y -= this.graph.panDy / this.graph.view.scale,
+                    l.setTerminalPoint(p, !1));
+                this.fireEvent(new mxEventObject(mxEvent.CONNECT, "cell", f, "event", c, "target", d))
+            }
+        } catch (q) {
+            mxLog.show(), mxLog.debug(q.message)
+        } finally {
+            e.endUpdate()
+        }
+        this.select && this.selectCells(f, b)
+    }
+};
+mxConnectionHandler.prototype.selectCells = function(a, b) {
+    this.graph.setSelectionCell(a)
+};
+mxConnectionHandler.prototype.insertEdge = function(a, b, c, d, e, f) {
+    if (null == this.factoryMethod) return this.graph.insertEdge(a, b, c, d, e, f);
+    b = this.createEdge(c, d, e, f);
+    return b = this.graph.addEdge(b, a, d, e)
+};
+mxConnectionHandler.prototype.createTargetVertex = function(a, b) {
+    for (var c = this.graph.getCellGeometry(b); null != c && c.relative;) b = this.graph.getModel().getParent(b), c = this.graph.getCellGeometry(b);
+    var d = this.graph.cloneCells([b])[0],
+        c = this.graph.getModel().getGeometry(d);
+    if (null != c) {
+        var e = this.graph.getPointForEvent(a);
+        c.x = this.graph.snap(e.x - c.width / 2) - this.graph.panDx / this.graph.view.scale;
+        c.y = this.graph.snap(e.y - c.height / 2) - this.graph.panDy / this.graph.view.scale;
+        if (null != this.first) {
+            var f = this.graph.view.getState(b);
+            if (null != f) {
+                var g = this.getAlignmentTolerance();
+                Math.abs(this.graph.snap(this.first.x) - this.graph.snap(e.x)) <= g ? c.x = f.x : Math.abs(this.graph.snap(this.first.y) - this.graph.snap(e.y)) <= g && (c.y = f.y)
+            }
+        }
+    }
+    return d
+};
+mxConnectionHandler.prototype.getAlignmentTolerance = function() {
+    return this.graph.isGridEnabled() ? this.graph.gridSize : this.graph.tolerance
+};
+mxConnectionHandler.prototype.createEdge = function(a, b, c, d) {
+    var e = null;
+    null != this.factoryMethod && (e = this.factoryMethod(b, c, d));
+    null == e && (e = new mxCell(a || ""), e.setEdge(!0), e.setStyle(d), a = new mxGeometry, a.relative = !0, e.setGeometry(a));
+    return e
+};
+mxConnectionHandler.prototype.destroy = function() {
+    this.graph.removeMouseListener(this);
+    null != this.shape && (this.shape.destroy(), this.shape = null);
+    null != this.marker && (this.marker.destroy(), this.marker = null);
+    null != this.constraintHandler && (this.constraintHandler.destroy(), this.constraintHandler = null);
+    null != this.changeHandler && (this.graph.getModel().removeListener(this.changeHandler), this.graph.getView().removeListener(this.changeHandler), this.changeHandler = null);
+    null != this.drillHandler && (this.graph.removeListener(this.drillHandler),
+        this.graph.getView().removeListener(this.drillHandler), this.drillHandler = null)
+};
+
+function mxConstraintHandler(a) {
+    this.graph = a
+}
+mxConstraintHandler.prototype.pointImage = new mxImage(mxClient.imageBasePath + "/point.gif", 5, 5);
+mxConstraintHandler.prototype.graph = null;
+mxConstraintHandler.prototype.enabled = !0;
+mxConstraintHandler.prototype.highlightColor = mxConstants.DEFAULT_VALID_COLOR;
+mxConstraintHandler.prototype.isEnabled = function() {
+    return this.enabled
+};
+mxConstraintHandler.prototype.setEnabled = function(a) {
+    this.enabled = a
+};
+mxConstraintHandler.prototype.reset = function() {
+    if (null != this.focusIcons) {
+        for (var a = 0; a < this.focusIcons.length; a++) this.focusIcons[a].destroy();
+        this.focusIcons = null
+    }
+    null != this.focusHighlight && (this.focusHighlight.destroy(), this.focusHighlight = null);
+    this.focusPoints = this.currentFocus = this.currentPoint = this.currentFocusArea = this.currentConstraint = null
+};
+mxConstraintHandler.prototype.getTolerance = function() {
+    return this.graph.getTolerance()
+};
+mxConstraintHandler.prototype.getImageForConstraint = function(a, b, c) {
+    return this.pointImage
+};
+mxConstraintHandler.prototype.isEventIgnored = function(a, b) {
+    return !1
+};
+mxConstraintHandler.prototype.update = function(a, b) {
+    if (this.isEnabled() && !this.isEventIgnored(a)) {
+        var c = this.getTolerance(),
+            d = new mxRectangle(a.getGraphX() - c, a.getGraphY() - c, 2 * c, 2 * c),
+            e = null != a.getCell() ? this.graph.isCellConnectable(a.getCell()) : !1;
+        if (null == this.currentFocusArea || !mxUtils.intersects(this.currentFocusArea, d) || null != a.getState() && null != this.currentFocus && e)
+            if (this.currentFocusArea = null, a.getState() != this.currentFocus)
+                if (this.currentFocus = null, this.constraints = null != a.getState() && e ? this.graph.getAllConnectionConstraints(a.getState(),
+                        b) : null, null != this.constraints) {
+                    this.currentFocus = a.getState();
+                    this.currentFocusArea = new mxRectangle(a.getState().x, a.getState().y, a.getState().width, a.getState().height);
+                    if (null != this.focusIcons) {
+                        for (e = 0; e < this.focusIcons.length; e++) this.focusIcons[e].destroy();
+                        this.focusPoints = this.focusIcons = null
+                    }
+                    this.focusIcons = [];
+                    this.focusPoints = [];
+                    for (e = 0; e < this.constraints.length; e++) {
+                        var f = this.graph.getConnectionPoint(a.getState(), this.constraints[e]),
+                            g = this.getImageForConstraint(a.getState(), this.constraints[e],
+                                f),
+                            h = g.src,
+                            g = new mxRectangle(f.x - g.width / 2, f.y - g.height / 2, g.width, g.height),
+                            g = new mxImageShape(g, h);
+                        g.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_MIXEDHTML : mxConstants.DIALECT_SVG;
+                        g.preserveImageAspect = !1;
+                        g.init(this.graph.getView().getOverlayPane());
+                        null != g.node.previousSibling && g.node.parentNode.insertBefore(g.node, g.node.parentNode.firstChild);
+                        h = mxUtils.bind(this, function() {
+                            return null != this.currentFocus ? this.currentFocus : a.getState()
+                        });
+                        g.redraw();
+                        mxEvent.redirectMouseEvents(g.node,
+                            this.graph, h);
+                        this.currentFocusArea.add(g.bounds);
+                        this.focusIcons.push(g);
+                        this.focusPoints.push(f)
+                    }
+                    this.currentFocusArea.grow(c)
+                } else if (null != this.focusIcons) {
+            null != this.focusHighlight && (this.focusHighlight.destroy(), this.focusHighlight = null);
+            for (e = 0; e < this.focusIcons.length; e++) this.focusIcons[e].destroy();
+            this.focusPoints = this.focusIcons = null
+        }
+        this.currentPoint = this.currentConstraint = null;
+        if (null != this.focusIcons && null != this.constraints && (null == a.getState() || this.currentFocus == a.getState()))
+            for (e =
+                0; e < this.focusIcons.length; e++)
+                if (mxUtils.intersects(this.focusIcons[e].bounds, d)) {
+                    this.currentConstraint = this.constraints[e];
+                    this.currentPoint = this.focusPoints[e];
+                    c = this.focusIcons[e].bounds.clone();
+                    c.grow(mxClient.IS_IE ? 3 : 2);
+                    mxClient.IS_IE && (c.width -= 1, c.height -= 1);
+                    null == this.focusHighlight ? (c = new mxRectangleShape(c, null, this.highlightColor, 3), c.dialect = this.graph.dialect == mxConstants.DIALECT_SVG ? mxConstants.DIALECT_SVG : mxConstants.DIALECT_VML, c.init(this.graph.getView().getOverlayPane()), this.focusHighlight =
+                        c, h = mxUtils.bind(this, function() {
+                            return null != this.currentFocus ? this.currentFocus : a.getState()
+                        }), mxEvent.redirectMouseEvents(c.node, this.graph, h)) : (this.focusHighlight.bounds = c, this.focusHighlight.redraw());
+                    break
+                }
+        null == this.currentConstraint && null != this.focusHighlight && (this.focusHighlight.destroy(), this.focusHighlight = null)
+    }
+};
+mxConstraintHandler.prototype.destroy = function() {
+    this.reset()
+};
+
+function mxRubberband(a) {
+    null != a && (this.graph = a, this.graph.addMouseListener(this), this.panHandler = mxUtils.bind(this, function() {
+        this.repaint()
+    }), this.graph.addListener(mxEvent.PAN, this.panHandler), mxClient.IS_IE && mxEvent.addListener(window, "unload", mxUtils.bind(this, function() {
+        this.destroy()
+    })))
+}
+mxRubberband.prototype.defaultOpacity = 20;
+mxRubberband.prototype.enabled = !0;
+mxRubberband.prototype.div = null;
+mxRubberband.prototype.sharedDiv = null;
+mxRubberband.prototype.currentX = 0;
+mxRubberband.prototype.currentY = 0;
+mxRubberband.prototype.isEnabled = function() {
+    return this.enabled
+};
+mxRubberband.prototype.setEnabled = function(a) {
+    this.enabled = a
+};
+mxRubberband.prototype.mouseDown = function(a, b) {
+    if (!b.isConsumed() && this.isEnabled() && this.graph.isEnabled() && (this.graph.isForceMarqueeEvent(b.getEvent()) || null == b.getState())) {
+        var c = mxUtils.getOffset(this.graph.container),
+            d = mxUtils.getScrollOrigin(this.graph.container);
+        d.x -= c.x;
+        d.y -= c.y;
+        this.start(b.getX() + d.x, b.getY() + d.y);
+        if (mxClient.IS_NS && !mxClient.IS_SF && !mxClient.IS_GC) {
+            var e = this.graph.container,
+                f = function(a) {
+                    a = new mxMouseEvent(a);
+                    var b = mxUtils.convertPoint(e, a.getX(), a.getY());
+                    a.graphX = b.x;
+                    a.graphY = b.y;
+                    return a
+                };
+            this.dragHandler = mxUtils.bind(this, function(a) {
+                this.mouseMove(this.graph, f(a))
+            });
+            this.dropHandler = mxUtils.bind(this, function(a) {
+                this.mouseUp(this.graph, f(a))
+            });
+            mxEvent.addListener(document, "mousemove", this.dragHandler);
+            mxEvent.addListener(document, "mouseup", this.dropHandler)
+        }
+        b.consume(!1)
+    }
+};
+mxRubberband.prototype.start = function(a, b) {
+    this.first = new mxPoint(a, b)
+};
+mxRubberband.prototype.mouseMove = function(a, b) {
+    if (!b.isConsumed() && null != this.first) {
+        var c = mxUtils.getScrollOrigin(this.graph.container),
+            d = mxUtils.getOffset(this.graph.container);
+        c.x -= d.x;
+        c.y -= d.y;
+        var d = b.getX() + c.x,
+            c = b.getY() + c.y,
+            e = this.first.x - d,
+            f = this.first.y - c,
+            g = this.graph.tolerance;
+        if (null != this.div || Math.abs(e) > g || Math.abs(f) > g) null == this.div && (this.div = this.createShape()), mxUtils.clearSelection(), this.update(d, c), b.consume()
+    }
+};
+mxRubberband.prototype.createShape = function() {
+    null == this.sharedDiv && (this.sharedDiv = document.createElement("div"), this.sharedDiv.className = "mxRubberband", mxUtils.setOpacity(this.sharedDiv, this.defaultOpacity));
+    this.graph.container.appendChild(this.sharedDiv);
+    return this.sharedDiv
+};
+mxRubberband.prototype.mouseUp = function(a, b) {
+    var c = null != this.div;
+    this.reset();
+    c && (c = new mxRectangle(this.x, this.y, this.width, this.height), this.graph.selectRegion(c, b.getEvent()), b.consume())
+};
+mxRubberband.prototype.reset = function() {
+    null != this.div && this.div.parentNode.removeChild(this.div);
+    null != this.dragHandler && (mxEvent.removeListener(document, "mousemove", this.dragHandler), this.dragHandler = null);
+    null != this.dropHandler && (mxEvent.removeListener(document, "mouseup", this.dropHandler), this.dropHandler = null);
+    this.currentY = this.currentX = 0;
+    this.div = this.first = null
+};
+mxRubberband.prototype.update = function(a, b) {
+    this.currentX = a;
+    this.currentY = b;
+    this.repaint()
+};
+mxRubberband.prototype.repaint = function() {
+    if (null != this.div) {
+        var a = this.currentX - this.graph.panDx,
+            b = this.currentY - this.graph.panDy;
+        this.x = Math.min(this.first.x, a);
+        this.y = Math.min(this.first.y, b);
+        this.width = Math.max(this.first.x, a) - this.x;
+        this.height = Math.max(this.first.y, b) - this.y;
+        a = mxClient.IS_VML ? this.graph.panDy : 0;
+        this.div.style.left = this.x + (mxClient.IS_VML ? this.graph.panDx : 0) + "px";
+        this.div.style.top = this.y + a + "px";
+        this.div.style.width = Math.max(1, this.width) + "px";
+        this.div.style.height = Math.max(1,
+            this.height) + "px"
+    }
+};
+mxRubberband.prototype.destroy = function() {
+    this.destroyed || (this.destroyed = !0, this.graph.removeMouseListener(this), this.graph.removeListener(this.panHandler), this.reset(), null != this.sharedDiv && (this.sharedDiv = null))
+};
+
+function mxVertexHandler(a) {
+    null != a && (this.state = a, this.init())
+}
+mxVertexHandler.prototype.graph = null;
+mxVertexHandler.prototype.state = null;
+mxVertexHandler.prototype.singleSizer = !1;
+mxVertexHandler.prototype.index = null;
+mxVertexHandler.prototype.allowHandleBoundsCheck = !0;
+mxVertexHandler.prototype.handleImage = null;
+mxVertexHandler.prototype.tolerance = 0;
+mxVertexHandler.prototype.rotationEnabled = !1;
+mxVertexHandler.prototype.rotationRaster = !0;
+mxVertexHandler.prototype.init = function() {
+    this.graph = this.state.view.graph;
+    this.selectionBounds = this.getSelectionBounds(this.state);
+    this.bounds = new mxRectangle(this.selectionBounds.x, this.selectionBounds.y, this.selectionBounds.width, this.selectionBounds.height);
+    this.selectionBorder = this.createSelectionShape(this.bounds);
+    this.selectionBorder.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG;
+    this.selectionBorder.pointerEvents = !1;
+    this.selectionBorder.init(this.graph.getView().getOverlayPane());
+    this.graph.isCellMovable(this.state.cell) && (this.selectionBorder.node.style.cursor = mxConstants.CURSOR_MOVABLE_VERTEX);
+    mxEvent.redirectMouseEvents(this.selectionBorder.node, this.graph, this.state);
+    if (0 >= mxGraphHandler.prototype.maxCells || this.graph.getSelectionCount() < mxGraphHandler.prototype.maxCells) {
+        var a = this.graph.isCellResizable(this.state.cell);
+        this.sizers = [];
+        if (a || this.graph.isLabelMovable(this.state.cell) && 2 <= this.state.width && 2 <= this.state.height) {
+            var b = 0;
+            a && (this.singleSizer || (this.sizers.push(this.createSizer("nw-resize",
+                b++)), this.sizers.push(this.createSizer("n-resize", b++)), this.sizers.push(this.createSizer("ne-resize", b++)), this.sizers.push(this.createSizer("w-resize", b++)), this.sizers.push(this.createSizer("e-resize", b++)), this.sizers.push(this.createSizer("sw-resize", b++)), this.sizers.push(this.createSizer("s-resize", b++))), this.sizers.push(this.createSizer("se-resize", b++)));
+            a = this.graph.model.getGeometry(this.state.cell);
+            null != a && (!a.relative && !this.graph.isSwimlane(this.state.cell) && this.graph.isLabelMovable(this.state.cell)) &&
+                (this.labelShape = this.createSizer(mxConstants.CURSOR_LABEL_HANDLE, mxEvent.LABEL_HANDLE, mxConstants.LABEL_HANDLE_SIZE, mxConstants.LABEL_HANDLE_FILLCOLOR), this.sizers.push(this.labelShape))
+        } else this.graph.isCellMovable(this.state.cell) && (!this.graph.isCellResizable(this.state.cell) && 2 > this.state.width && 2 > this.state.height) && (this.labelShape = this.createSizer(mxConstants.CURSOR_MOVABLE_VERTEX, null, null, mxConstants.LABEL_HANDLE_FILLCOLOR), this.sizers.push(this.labelShape))
+    }
+    if (this.rotationEnabled && (0 >=
+            mxGraphHandler.prototype.maxCells || this.graph.getSelectionCount() < mxGraphHandler.prototype.maxCells)) this.rotationShape = this.createSizer("pointer", mxEvent.ROTATION_HANDLE, mxConstants.HANDLE_SIZE + 3, mxConstants.HANDLE_FILLCOLOR), this.sizers.push(this.rotationShape);
+    this.redraw()
+};
+mxVertexHandler.prototype.getSelectionBounds = function(a) {
+    return new mxRectangle(Math.round(a.x), Math.round(a.y), Math.round(a.width), Math.round(a.height))
+};
+mxVertexHandler.prototype.createSelectionShape = function(a) {
+    a = new mxRectangleShape(a, null, this.getSelectionColor());
+    a.strokewidth = this.getSelectionStrokeWidth();
+    a.isDashed = this.isSelectionDashed();
+    return a
+};
+mxVertexHandler.prototype.getSelectionColor = function() {
+    return mxConstants.VERTEX_SELECTION_COLOR
+};
+mxVertexHandler.prototype.getSelectionStrokeWidth = function() {
+    return mxConstants.VERTEX_SELECTION_STROKEWIDTH
+};
+mxVertexHandler.prototype.isSelectionDashed = function() {
+    return mxConstants.VERTEX_SELECTION_DASHED
+};
+mxVertexHandler.prototype.createSizer = function(a, b, c, d) {
+    c = c || mxConstants.HANDLE_SIZE;
+    c = new mxRectangle(0, 0, c, c);
+    d = this.createSizerShape(c, b, d);
+    d.isHtmlAllowed() && null != this.state.text && this.state.text.node.parentNode == this.graph.container ? (d.bounds.height -= 1, d.bounds.width -= 1, d.dialect = mxConstants.DIALECT_STRICTHTML, d.init(this.graph.container)) : (d.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_MIXEDHTML : mxConstants.DIALECT_SVG, d.init(this.graph.getView().getOverlayPane()));
+    mxEvent.redirectMouseEvents(d.node, this.graph, this.state);
+    this.graph.isEnabled() && (d.node.style.cursor = a);
+    this.isSizerVisible(b) || (d.node.style.visibility = "hidden");
+    return d
+};
+mxVertexHandler.prototype.isSizerVisible = function(a) {
+    return !0
+};
+mxVertexHandler.prototype.createSizerShape = function(a, b, c) {
+    return null != this.handleImage ? (a.width = this.handleImage.width, a.height = this.handleImage.height, new mxImageShape(a, this.handleImage.src)) : b == mxEvent.ROTATION_HANDLE ? new mxEllipse(a, c || mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR) : new mxRectangleShape(a, c || mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR)
+};
+mxVertexHandler.prototype.moveSizerTo = function(a, b, c) {
+    null != a && (a.bounds.x = Math.round(b - a.bounds.width / 2), a.bounds.y = Math.round(c - a.bounds.height / 2), a.redraw())
+};
+mxVertexHandler.prototype.getHandleForEvent = function(a) {
+    if (a.isSource(this.rotationShape)) return mxEvent.ROTATION_HANDLE;
+    if (a.isSource(this.labelShape)) return mxEvent.LABEL_HANDLE;
+    if (null != this.sizers)
+        for (var b = this.tolerance, b = this.allowHandleBoundsCheck && (mxClient.IS_IE || 0 < b) ? new mxRectangle(a.getGraphX() - b, a.getGraphY() - b, 2 * b, 2 * b) : null, c = 0; c < this.sizers.length; c++)
+            if (a.isSource(this.sizers[c]) || null != b && mxUtils.intersects(this.sizers[c].bounds, b)) return c;
+    return null
+};
+mxVertexHandler.prototype.mouseDown = function(a, b) {
+    if (!b.isConsumed() && this.graph.isEnabled() && !this.graph.isForceMarqueeEvent(b.getEvent()) && (0 < this.tolerance || b.getState() == this.state)) {
+        var c = this.getHandleForEvent(b);
+        null != c && (this.start(b.getX(), b.getY(), c), b.consume())
+    }
+};
+mxVertexHandler.prototype.start = function(a, b, c) {
+    a = mxUtils.convertPoint(this.graph.container, a, b);
+    this.startX = a.x;
+    this.startY = a.y;
+    this.index = c;
+    this.selectionBorder.node.style.display = c == mxEvent.ROTATION_HANDLE ? "inline" : "none";
+    this.preview = this.createSelectionShape(this.bounds);
+    !(mxClient.IS_SVG && 0 != Number(this.state.style[mxConstants.STYLE_ROTATION] || "0")) && null != this.state.text && this.state.text.node.parentNode == this.graph.container ? (this.preview.dialect = mxConstants.DIALECT_STRICTHTML, this.preview.init(this.graph.container)) :
+        (this.preview.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG, this.preview.init(this.graph.view.getOverlayPane()))
+};
+mxVertexHandler.prototype.mouseMove = function(a, b) {
+    if (!b.isConsumed() && null != this.index) {
+        var c = new mxPoint(b.getGraphX(), b.getGraphY()),
+            d = this.graph.isGridEnabledEvent(b.getEvent()),
+            e = this.graph.getView().scale;
+        if (this.index == mxEvent.LABEL_HANDLE) d && (c.x = this.graph.snap(c.x / e) * e, c.y = this.graph.snap(c.y / e) * e), this.moveSizerTo(this.sizers[this.sizers.length - 1], c.x, c.y);
+        else if (this.index == mxEvent.ROTATION_HANDLE) {
+            var f = this.state.x + this.state.width / 2 - c.x,
+                g = this.state.y + this.state.height / 2 - c.y;
+            this.currentAlpha =
+                0 != f ? 180 * Math.atan(g / f) / Math.PI + 90 : 0 > g ? 180 : 0;
+            0 < f && (this.currentAlpha -= 180);
+            this.rotationRaster && (f = c.x - this.state.getCenterX(), g = c.y - this.state.getCenterY(), f = Math.abs(Math.sqrt(f * f + g * g) - this.state.height / 2 - 20), f = Math.max(1, 5 * Math.min(3, Math.max(0, Math.round(80 / Math.abs(f))))), this.currentAlpha = Math.round(this.currentAlpha / f) * f);
+            this.selectionBorder.rotation = this.currentAlpha;
+            this.selectionBorder.redraw()
+        } else {
+            var h = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || "0"),
+                k = Math.cos(-h),
+                l = Math.sin(-h),
+                m = new mxPoint(this.state.getCenterX(), this.state.getCenterY()),
+                f = c.x - this.startX,
+                g = c.y - this.startY,
+                c = this.graph.view.translate,
+                n = l * f + k * g,
+                f = k * f - l * g;
+            this.bounds = this.union(this.selectionBounds, f, n, this.index, d, e, c);
+            k = Math.cos(h);
+            l = Math.sin(h);
+            g = new mxPoint(this.bounds.getCenterX(), this.bounds.getCenterY());
+            f = g.x - m.x;
+            g = g.y - m.y;
+            m = l * f + k * g - g;
+            this.bounds.x += k * f - l * g - f;
+            this.bounds.y += m;
+            this.drawPreview()
+        }
+        b.consume()
+    } else null != this.getHandleForEvent(b) && b.consume(!1)
+};
+mxVertexHandler.prototype.mouseUp = function(a, b) {
+    if (!b.isConsumed() && null != this.index && null != this.state) {
+        var c = new mxPoint(b.getGraphX(), b.getGraphY());
+        this.graph.getModel().beginUpdate();
+        try {
+            if (this.index == mxEvent.ROTATION_HANDLE) null != this.currentAlpha && this.rotateCell(this.state.cell, this.currentAlpha - (this.state.style[mxConstants.STYLE_ROTATION] || 0));
+            else {
+                var d = this.graph.isGridEnabledEvent(b.getEvent()),
+                    e = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || "0"),
+                    f = Math.cos(-e),
+                    g = Math.sin(-e),
+                    h = c.x - this.startX,
+                    k = c.y - this.startY,
+                    c = g * h + f * k,
+                    h = f * h - g * k,
+                    k = c,
+                    l = this.graph.view.scale;
+                this.resizeCell(this.state.cell, h / l, k / l, this.index, d)
+            }
+        } finally {
+            this.graph.getModel().endUpdate()
+        }
+        this.reset();
+        b.consume()
+    }
+};
+mxVertexHandler.prototype.rotateCell = function(a, b) {
+    var c = this.graph.getModel();
+    if (c.isVertex(a)) {
+        var d = a == this.state ? this.state : this.graph.view.getState(a);
+        null != d && this.graph.setCellStyles(mxConstants.STYLE_ROTATION, (d.style[mxConstants.STYLE_ROTATION] || 0) + b, [a]);
+        if (this.state.cell != a && (d = this.graph.getCellGeometry(a), null != d && !d.relative))
+            if (0 != b) {
+                var e = this.graph.getModel().getParent(a),
+                    f = this.graph.getCellGeometry(e);
+                if (!d.relative && null != f) {
+                    var g = mxUtils.toRadians(b),
+                        e = Math.cos(g),
+                        g = Math.sin(g),
+                        h = new mxPoint(d.getCenterX(), d.getCenterY()),
+                        f = new mxPoint(f.width / 2, f.height / 2),
+                        e = mxUtils.getRotatedPoint(h, e, g, f),
+                        d = d.clone();
+                    d.x = e.x - d.width / 2;
+                    d.y = e.y - d.height / 2;
+                    c.setGeometry(a, d)
+                }
+            } else d = d.clone(), d.x += dx, d.y += dy, c.setGeometry(a, d);
+        d = c.getChildCount(a);
+        for (e = 0; e < d; e++) this.rotateCell(c.getChildAt(a, e), b)
+    }
+};
+mxVertexHandler.prototype.reset = function() {
+    this.index = this.currentAlpha = null;
+    null != this.preview && (this.preview.destroy(), this.preview = null);
+    null != this.selectionBorder && (this.selectionBorder.node.style.display = "inline", this.selectionBounds = this.getSelectionBounds(this.state), this.bounds = new mxRectangle(this.selectionBounds.x, this.selectionBounds.y, this.selectionBounds.width, this.selectionBounds.height), this.drawPreview())
+};
+mxVertexHandler.prototype.resizeCell = function(a, b, c, d, e) {
+    var f = this.graph.model.getGeometry(a);
+    if (null != f)
+        if (d == mxEvent.LABEL_HANDLE) d = this.graph.view.scale, b = (this.labelShape.bounds.getCenterX() - this.startX) / d, c = (this.labelShape.bounds.getCenterY() - this.startY) / d, f = f.clone(), null == f.offset ? f.offset = new mxPoint(b, c) : (f.offset.x += b, f.offset.y += c), this.graph.model.setGeometry(a, f);
+        else {
+            d = this.union(f, b, c, d, e, 1, new mxPoint(0, 0));
+            var g = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] || "0");
+            if (0 != g) {
+                b = d.getCenterX() - f.getCenterX();
+                c = d.getCenterY() - f.getCenterY();
+                e = Math.cos(g);
+                var h = Math.sin(g),
+                    g = e * b - h * c - b;
+                b = h * b + e * c - c;
+                c = d.x - f.x;
+                var k = d.y - f.y,
+                    l = e * c - h * k;
+                e = h * c + e * k;
+                d.x += g;
+                d.y += b;
+                if (!this.graph.isCellCollapsed(a) && (0 != g || 0 != b)) c = f.x - d.x + l, k = f.y - d.y + e, this.moveChildren(a, c, k)
+            }
+            this.graph.resizeCell(a, d)
+        }
+};
+mxVertexHandler.prototype.moveChildren = function(a, b, c) {
+    for (var d = this.graph.getModel(), e = d.getChildCount(a), f = 0; f < e; f++) {
+        var g = d.getChildAt(a, f);
+        if (d.isVertex(g)) {
+            var h = this.graph.getCellGeometry(g);
+            null != h && !h.relative && (h = h.clone(), h.x += b, h.y += c, d.setGeometry(g, h))
+        }
+    }
+};
+mxVertexHandler.prototype.union = function(a, b, c, d, e, f, g) {
+    if (this.singleSizer) {
+        g = a.x + a.width + b;
+        var h = a.y + a.height + c;
+        e && (g = this.graph.snap(g / f) * f, h = this.graph.snap(h / f) * f);
+        f = new mxRectangle(a.x, a.y, 0, 0);
+        f.add(new mxRectangle(g, h, 0, 0));
+        return f
+    }
+    var h = a.x - g.x * f,
+        k = h + a.width,
+        l = a.y - g.y * f;
+    a = l + a.height;
+    4 < d ? (a += c, e && (a = this.graph.snap(a / f) * f)) : 3 > d && (l += c, e && (l = this.graph.snap(l / f) * f));
+    if (0 == d || 3 == d || 5 == d) h += b, e && (h = this.graph.snap(h / f) * f);
+    else if (2 == d || 4 == d || 7 == d) k += b, e && (k = this.graph.snap(k / f) * f);
+    e = k - h;
+    a -=
+        l;
+    0 > e && (h += e, e = Math.abs(e));
+    0 > a && (l += a, a = Math.abs(a));
+    return new mxRectangle(h + g.x * f, l + g.y * f, e, a)
+};
+mxVertexHandler.prototype.redraw = function() {
+    this.selectionBounds = this.getSelectionBounds(this.state);
+    this.bounds = new mxRectangle(this.state.x, this.state.y, this.state.width, this.state.height);
+    var a = this.state;
+    if (null != this.sizers) {
+        var b = a.x + a.width,
+            c = a.y + a.height;
+        if (this.singleSizer) this.moveSizerTo(this.sizers[0], b, c);
+        else {
+            var d = a.x + a.width / 2,
+                e = a.y + a.height / 2;
+            if (1 < this.sizers.length) {
+                var f = mxUtils.toRadians(a.style[mxConstants.STYLE_ROTATION] || "0"),
+                    g = Math.cos(f),
+                    f = Math.sin(f),
+                    h = new mxPoint(a.getCenterX(),
+                        a.getCenterY()),
+                    k = mxUtils.getRotatedPoint(new mxPoint(a.x, a.y), g, f, h);
+                this.moveSizerTo(this.sizers[0], k.x, k.y);
+                k.x = d;
+                k.y = a.y;
+                k = mxUtils.getRotatedPoint(k, g, f, h);
+                this.moveSizerTo(this.sizers[1], k.x, k.y);
+                k.x = b;
+                k.y = a.y;
+                k = mxUtils.getRotatedPoint(k, g, f, h);
+                this.moveSizerTo(this.sizers[2], k.x, k.y);
+                k.x = a.x;
+                k.y = e;
+                k = mxUtils.getRotatedPoint(k, g, f, h);
+                this.moveSizerTo(this.sizers[3], k.x, k.y);
+                k.x = b;
+                k.y = e;
+                k = mxUtils.getRotatedPoint(k, g, f, h);
+                this.moveSizerTo(this.sizers[4], k.x, k.y);
+                k.x = a.x;
+                k.y = c;
+                k = mxUtils.getRotatedPoint(k,
+                    g, f, h);
+                this.moveSizerTo(this.sizers[5], k.x, k.y);
+                k.x = d;
+                k.y = c;
+                k = mxUtils.getRotatedPoint(k, g, f, h);
+                this.moveSizerTo(this.sizers[6], k.x, k.y);
+                k.x = b;
+                k.y = c;
+                k = mxUtils.getRotatedPoint(k, g, f, h);
+                this.moveSizerTo(this.sizers[7], k.x, k.y);
+                this.moveSizerTo(this.sizers[8], d + a.absoluteOffset.x, e + a.absoluteOffset.y)
+            } else 2 <= this.state.width && 2 <= this.state.height ? this.moveSizerTo(this.sizers[0], d + a.absoluteOffset.x, e + a.absoluteOffset.y) : this.moveSizerTo(this.sizers[0], a.x, a.y)
+        }
+    }
+    null != this.rotationShape && (f = mxUtils.toRadians(this.state.style[mxConstants.STYLE_ROTATION] ||
+        "0"), g = Math.cos(f), f = Math.sin(f), h = new mxPoint(this.state.getCenterX(), this.state.getCenterY()), k = mxUtils.getRotatedPoint(new mxPoint(a.x + a.width / 2, a.y - 16), g, f, h), this.moveSizerTo(this.rotationShape, k.x, k.y));
+    this.selectionBorder.rotation = Number(this.state.style[mxConstants.STYLE_ROTATION] || "0");
+    this.drawPreview()
+};
+mxVertexHandler.prototype.drawPreview = function() {
+    null != this.preview && (this.preview.bounds = this.bounds, this.preview.node.parentNode == this.graph.container && (this.preview.bounds.width = Math.max(0, this.preview.bounds.width - 1), this.preview.bounds.height = Math.max(0, this.preview.bounds.height - 1)), this.preview.rotation = Number(this.state.style[mxConstants.STYLE_ROTATION] || "0"), this.preview.redraw());
+    this.selectionBorder.bounds = this.bounds;
+    this.selectionBorder.redraw()
+};
+mxVertexHandler.prototype.destroy = function() {
+    null != this.preview && (this.preview.destroy(), this.preview = null);
+    this.selectionBorder.destroy();
+    this.labelShape = this.selectionBorder = null;
+    if (null != this.sizers)
+        for (var a = 0; a < this.sizers.length; a++) this.sizers[a].destroy(), this.sizers[a] = null
+};
+
+function mxEdgeHandler(a) {
+    null != a && (this.state = a, this.init())
+}
+mxEdgeHandler.prototype.graph = null;
+mxEdgeHandler.prototype.state = null;
+mxEdgeHandler.prototype.marker = null;
+mxEdgeHandler.prototype.constraintHandler = null;
+mxEdgeHandler.prototype.error = null;
+mxEdgeHandler.prototype.shape = null;
+mxEdgeHandler.prototype.bends = null;
+mxEdgeHandler.prototype.labelShape = null;
+mxEdgeHandler.prototype.cloneEnabled = !0;
+mxEdgeHandler.prototype.addEnabled = !1;
+mxEdgeHandler.prototype.removeEnabled = !1;
+mxEdgeHandler.prototype.preferHtml = !1;
+mxEdgeHandler.prototype.allowHandleBoundsCheck = !0;
+mxEdgeHandler.prototype.snapToTerminals = !1;
+mxEdgeHandler.prototype.handleImage = null;
+mxEdgeHandler.prototype.tolerance = 0;
+mxEdgeHandler.prototype.init = function() {
+    this.graph = this.state.view.graph;
+    this.marker = this.createMarker();
+    this.constraintHandler = new mxConstraintHandler(this.graph);
+    this.points = [];
+    this.abspoints = this.getSelectionPoints(this.state);
+    this.shape = this.createSelectionShape(this.abspoints);
+    this.shape.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_MIXEDHTML : mxConstants.DIALECT_SVG;
+    this.shape.init(this.graph.getView().getOverlayPane());
+    this.shape.svgStrokeTolerance = 0;
+    this.shape.node.style.cursor =
+        mxConstants.CURSOR_MOVABLE_EDGE;
+    mxEvent.addListener(this.shape.node, "dblclick", mxUtils.bind(this, function(a) {
+        this.graph.dblClick(a, this.state.cell)
+    }));
+    mxEvent.addGestureListeners(this.shape.node, mxUtils.bind(this, function(a) {
+        this.addEnabled && this.isAddPointEvent(a) ? this.addPoint(this.state, a) : this.graph.fireMouseEvent(mxEvent.MOUSE_DOWN, new mxMouseEvent(a, this.state))
+    }), mxUtils.bind(this, function(a) {
+        var c = this.state.cell;
+        if (null != this.index) {
+            var d = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(a),
+                    mxEvent.getClientY(a)),
+                c = this.graph.getCellAt(d.x, d.y);
+            this.graph.isSwimlane(c) && this.graph.hitsSwimlaneContent(c, d.x, d.y) && (c = null)
+        }
+        this.graph.fireMouseEvent(mxEvent.MOUSE_MOVE, new mxMouseEvent(a, this.graph.getView().getState(c)))
+    }), mxUtils.bind(this, function(a) {
+        this.graph.fireMouseEvent(mxEvent.MOUSE_UP, new mxMouseEvent(a, this.state))
+    }));
+    this.preferHtml = null != this.state.text && this.state.text.node.parentNode == this.graph.container;
+    if (!this.preferHtml) {
+        var a = this.state.getVisibleTerminalState(!0);
+        null != a && (this.preferHtml = null != a.text && a.text.node.parentNode == this.graph.container);
+        this.preferHtml || (a = this.state.getVisibleTerminalState(!1), null != a && (this.preferHtml = null != a.text && a.text.node.parentNode == this.graph.container))
+    }
+    if (this.graph.getSelectionCount() < mxGraphHandler.prototype.maxCells || 0 >= mxGraphHandler.prototype.maxCells) this.bends = this.createBends();
+    this.label = new mxPoint(this.state.absoluteOffset.x, this.state.absoluteOffset.y);
+    this.labelShape = new mxRectangleShape(new mxRectangle,
+        mxConstants.LABEL_HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR);
+    this.labelShape.pointerEvents = !1;
+    this.initBend(this.labelShape);
+    this.labelShape.node.style.cursor = mxConstants.CURSOR_LABEL_HANDLE;
+    mxEvent.redirectMouseEvents(this.labelShape.node, this.graph, this.state);
+    this.redraw()
+};
+mxEdgeHandler.prototype.isAddPointEvent = function(a) {
+    return mxEvent.isShiftDown(a)
+};
+mxEdgeHandler.prototype.isRemovePointEvent = function(a) {
+    return mxEvent.isShiftDown(a)
+};
+mxEdgeHandler.prototype.getSelectionPoints = function(a) {
+    return a.absolutePoints
+};
+mxEdgeHandler.prototype.createSelectionShape = function(a) {
+    a = new mxPolyline(a, this.getSelectionColor());
+    a.strokewidth = this.getSelectionStrokeWidth();
+    a.isDashed = this.isSelectionDashed();
+    return a
+};
+mxEdgeHandler.prototype.getSelectionColor = function() {
+    return mxConstants.EDGE_SELECTION_COLOR
+};
+mxEdgeHandler.prototype.getSelectionStrokeWidth = function() {
+    return mxConstants.EDGE_SELECTION_STROKEWIDTH
+};
+mxEdgeHandler.prototype.isSelectionDashed = function() {
+    return mxConstants.EDGE_SELECTION_DASHED
+};
+mxEdgeHandler.prototype.isConnectableCell = function(a) {
+    return !0
+};
+mxEdgeHandler.prototype.createMarker = function() {
+    var a = new mxCellMarker(this.graph),
+        b = this;
+    a.getCell = function(a) {
+        var d = mxCellMarker.prototype.getCell.apply(this, arguments);
+        if (!b.isConnectableCell(d)) return null;
+        var e = b.graph.getModel();
+        if (d == b.state.cell || null != d && !b.graph.connectableEdges && e.isEdge(d)) d = null;
+        return d
+    };
+    a.isValidState = function(a) {
+        var d = b.graph.getModel(),
+            d = b.graph.view.getTerminalPort(a, b.graph.view.getState(d.getTerminal(b.state.cell, !b.isSource)), !b.isSource),
+            d = null != d ? d.cell : null;
+        b.error = b.validateConnection(b.isSource ? a.cell : d, b.isSource ? d : a.cell);
+        return null == b.error
+    };
+    return a
+};
+mxEdgeHandler.prototype.validateConnection = function(a, b) {
+    return this.graph.getEdgeValidationError(this.state.cell, a, b)
+};
+mxEdgeHandler.prototype.createBends = function() {
+    for (var a = this.state.cell, b = [], c = 0; c < this.abspoints.length; c++)
+        if (this.isHandleVisible(c)) {
+            var d = c == this.abspoints.length - 1;
+            if ((d = 0 == c || d) || this.graph.isCellBendable(a)) {
+                var e = this.createHandleShape(c);
+                this.initBend(e);
+                mxClient.IS_TOUCH && e.node.setAttribute("pointer-events", "none");
+                if (this.isHandleEnabled(c))
+                    if (mxClient.IS_TOUCH) {
+                        var f = mxUtils.bind(this, function(a) {
+                            a = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(a), mxEvent.getClientY(a));
+                            return this.graph.view.getState(this.graph.getCellAt(a.x, a.y))
+                        });
+                        mxEvent.redirectMouseEvents(e.node, this.graph, f)
+                    } else e.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE, mxEvent.redirectMouseEvents(e.node, this.graph, this.state);
+                b.push(e);
+                d || (this.points.push(new mxPoint(0, 0)), e.node.style.visibility = "hidden")
+            }
+        }
+    return b
+};
+mxEdgeHandler.prototype.isHandleEnabled = function(a) {
+    return !0
+};
+mxEdgeHandler.prototype.isHandleVisible = function(a) {
+    return !0
+};
+mxEdgeHandler.prototype.createHandleShape = function(a) {
+    if (null != this.handleImage) return new mxImageShape(new mxRectangle(0, 0, this.handleImage.width, this.handleImage.height), this.handleImage.src);
+    a = mxConstants.HANDLE_SIZE;
+    this.preferHtml && (a -= 1);
+    return new mxRectangleShape(new mxRectangle(0, 0, a, a), mxConstants.HANDLE_FILLCOLOR, mxConstants.HANDLE_STROKECOLOR)
+};
+mxEdgeHandler.prototype.initBend = function(a) {
+    this.preferHtml ? (a.dialect = mxConstants.DIALECT_STRICTHTML, a.init(this.graph.container)) : (a.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_MIXEDHTML : mxConstants.DIALECT_SVG, a.init(this.graph.getView().getOverlayPane()))
+};
+mxEdgeHandler.prototype.getHandleForEvent = function(a) {
+    if (null != this.bends)
+        for (var b = this.tolerance, b = this.allowHandleBoundsCheck && (mxClient.IS_IE || 0 < b) ? new mxRectangle(a.getGraphX() - b, a.getGraphY() - b, 2 * b, 2 * b) : null, c = 0; c < this.bends.length; c++)
+            if ((a.isSource(this.bends[c]) || null != b && mxUtils.intersects(this.bends[c].bounds, b)) && "hidden" != this.bends[c].node.style.visibility) return c;
+    if (a.isSource(this.labelShape) && "hidden" != this.labelShape.node.style.visibility || a.isSource(this.state.text))
+        if (!mxClient.IS_SF &&
+            !mxClient.IS_GC || "SELECT" != a.getSource().nodeName) return mxEvent.LABEL_HANDLE;
+    return null
+};
+mxEdgeHandler.prototype.mouseDown = function(a, b) {
+    var c = null,
+        c = this.getHandleForEvent(b);
+    null != c && (!b.isConsumed() && this.graph.isEnabled() && !this.graph.isForceMarqueeEvent(b.getEvent())) && (this.removeEnabled && this.isRemovePointEvent(b.getEvent()) ? this.removePoint(this.state, c) : (c != mxEvent.LABEL_HANDLE || this.graph.isLabelMovable(b.getCell())) && this.start(b.getX(), b.getY(), c), b.consume())
+};
+mxEdgeHandler.prototype.start = function(a, b, c) {
+    this.startX = a;
+    this.startY = b;
+    this.isSource = null == this.bends ? !1 : 0 == c;
+    this.isTarget = null == this.bends ? !1 : c == this.bends.length - 1;
+    this.isLabel = c == mxEvent.LABEL_HANDLE;
+    if (this.isSource || this.isTarget) {
+        if (a = this.state.cell, b = this.graph.model.getTerminal(a, this.isSource), null == b && this.graph.isTerminalPointMovable(a, this.isSource) || null != b && this.graph.isCellDisconnectable(a, b, this.isSource)) this.index = c
+    } else this.index = c
+};
+mxEdgeHandler.prototype.clonePreviewState = function(a, b) {
+    return this.state.clone()
+};
+mxEdgeHandler.prototype.getSnapToTerminalTolerance = function() {
+    return this.graph.gridSize * this.graph.view.scale / 2
+};
+mxEdgeHandler.prototype.getPointForEvent = function(a) {
+    var b = new mxPoint(a.getGraphX(), a.getGraphY()),
+        c = this.getSnapToTerminalTolerance(),
+        d = this.graph.getView(),
+        e = !1,
+        f = !1;
+    if (this.snapToTerminals && 0 < c) {
+        var g = function(a) {
+                if (null != a) {
+                    var d = a.x;
+                    Math.abs(b.x - d) < c && (b.x = d, e = !0);
+                    a = a.y;
+                    Math.abs(b.y - a) < c && (b.y = a, f = !0)
+                }
+            },
+            h = function(a) {
+                null != a && g.call(this, new mxPoint(d.getRoutingCenterX(a), d.getRoutingCenterY(a)))
+            };
+        h.call(this, this.state.getVisibleTerminalState(!0));
+        h.call(this, this.state.getVisibleTerminalState(!1));
+        if (null != this.abspoints)
+            for (h = 0; h < this.abspoints; h++) h != this.index && g.call(this, this.abspoints[h])
+    }
+    this.graph.isGridEnabledEvent(a.getEvent()) && (a = d.scale, h = d.translate, e || (b.x = (this.graph.snap(b.x / a - h.x) + h.x) * a), f || (b.y = (this.graph.snap(b.y / a - h.y) + h.y) * a));
+    return b
+};
+mxEdgeHandler.prototype.getPreviewTerminalState = function(a) {
+    this.constraintHandler.update(a, this.isSource);
+    this.marker.process(a);
+    a = this.marker.getValidState();
+    var b = null;
+    null != this.constraintHandler.currentFocus && null != this.constraintHandler.currentConstraint && this.marker.reset();
+    null != a ? b = a : null != this.constraintHandler.currentConstraint && null != this.constraintHandler.currentFocus && (b = this.constraintHandler.currentFocus);
+    return b
+};
+mxEdgeHandler.prototype.getPreviewPoints = function(a) {
+    var b = this.graph.getCellGeometry(this.state.cell),
+        b = null != b.points ? b.points.slice() : null;
+    !this.isSource && !this.isTarget ? (this.convertPoint(a, !1), null == b ? b = [a] : b[this.index - 1] = a) : this.graph.resetEdgesOnConnect && (b = null);
+    return b
+};
+mxEdgeHandler.prototype.updatePreviewState = function(a, b, c) {
+    var d = this.isSource ? c : this.state.getVisibleTerminalState(!0),
+        e = this.isTarget ? c : this.state.getVisibleTerminalState(!1),
+        f = this.graph.getConnectionConstraint(a, d, !0),
+        g = this.graph.getConnectionConstraint(a, e, !1),
+        h = this.constraintHandler.currentConstraint;
+    null == h && (h = new mxConnectionConstraint);
+    this.isSource ? f = h : this.isTarget && (g = h);
+    (!this.isSource || null != d) && a.view.updateFixedTerminalPoint(a, d, !0, f);
+    (!this.isTarget || null != e) && a.view.updateFixedTerminalPoint(a,
+        e, !1, g);
+    if ((this.isSource || this.isTarget) && null == c) a.setAbsoluteTerminalPoint(b, this.isSource), null == this.marker.getMarkedState() && (this.error = this.graph.allowDanglingEdges ? null : "");
+    a.view.updatePoints(a, this.points, d, e);
+    a.view.updateFloatingTerminalPoints(a, d, e)
+};
+mxEdgeHandler.prototype.mouseMove = function(a, b) {
+    if (null != this.index && null != this.marker) {
+        var c = this.getPointForEvent(b);
+        if (this.isLabel) this.label.x = c.x, this.label.y = c.y;
+        else {
+            this.points = this.getPreviewPoints(c);
+            var d = this.isSource || this.isTarget ? this.getPreviewTerminalState(b) : null,
+                e = this.clonePreviewState(c, null != d ? d.cell : null);
+            this.updatePreviewState(e, c, d);
+            this.setPreviewColor(null == this.error ? this.marker.validColor : this.marker.invalidColor);
+            this.abspoints = e.absolutePoints;
+            this.active = !0
+        }
+        this.drawPreview();
+        mxEvent.consume(b.getEvent());
+        b.consume()
+    } else mxClient.IS_IE && null != this.getHandleForEvent(b) && b.consume(!1)
+};
+mxEdgeHandler.prototype.mouseUp = function(a, b) {
+    if (null != this.index && null != this.marker) {
+        var c = this.state.cell;
+        if (b.getX() != this.startX || b.getY() != this.startY)
+            if (null != this.error) 0 < this.error.length && this.graph.validationAlert(this.error);
+            else if (this.isLabel) this.moveLabel(this.state, this.label.x, this.label.y);
+        else if (this.isSource || this.isTarget) {
+            var d = null;
+            null != this.constraintHandler.currentConstraint && null != this.constraintHandler.currentFocus && (d = this.constraintHandler.currentFocus.cell);
+            null ==
+                d && this.marker.hasValidState() && (d = this.marker.validState.cell);
+            if (null != d) c = this.connect(c, d, this.isSource, this.graph.isCloneEvent(b.getEvent()) && this.cloneEnabled && this.graph.isCellsCloneable(), b);
+            else if (this.graph.isAllowDanglingEdges()) {
+                d = this.abspoints[this.isSource ? 0 : this.abspoints.length - 1];
+                d.x = d.x / this.graph.view.scale - this.graph.view.translate.x;
+                d.y = d.y / this.graph.view.scale - this.graph.view.translate.y;
+                var e = this.graph.getView().getState(this.graph.getModel().getParent(c));
+                null != e && (d.x -=
+                    e.origin.x, d.y -= e.origin.y);
+                d.x -= this.graph.panDx / this.graph.view.scale;
+                d.y -= this.graph.panDy / this.graph.view.scale;
+                this.changeTerminalPoint(c, d, this.isSource)
+            }
+        } else this.active ? this.changePoints(c, this.points) : (this.graph.getView().invalidate(this.state.cell), this.graph.getView().revalidate(this.state.cell));
+        null != this.marker && (this.reset(), c != this.state.cell && this.graph.setSelectionCell(c));
+        b.consume()
+    }
+};
+mxEdgeHandler.prototype.reset = function() {
+    this.points = this.label = this.index = this.error = null;
+    this.isTarget = this.isSource = this.isLabel = this.active = !1;
+    this.marker.reset();
+    this.constraintHandler.reset();
+    this.setPreviewColor(mxConstants.EDGE_SELECTION_COLOR);
+    this.redraw()
+};
+mxEdgeHandler.prototype.setPreviewColor = function(a) {
+    null != this.shape && (this.shape.stroke = a)
+};
+mxEdgeHandler.prototype.convertPoint = function(a, b) {
+    var c = this.graph.getView().getScale(),
+        d = this.graph.getView().getTranslate();
+    b && (a.x = this.graph.snap(a.x), a.y = this.graph.snap(a.y));
+    a.x = Math.round(a.x / c - d.x);
+    a.y = Math.round(a.y / c - d.y);
+    c = this.graph.getView().getState(this.graph.getModel().getParent(this.state.cell));
+    null != c && (a.x -= c.origin.x, a.y -= c.origin.y);
+    return a
+};
+mxEdgeHandler.prototype.moveLabel = function(a, b, c) {
+    var d = this.graph.getModel(),
+        e = d.getGeometry(a.cell);
+    if (null != e) {
+        var e = e.clone(),
+            f = this.graph.getView().getRelativePoint(a, b, c);
+        e.x = f.x;
+        e.y = f.y;
+        var g = this.graph.getView().scale;
+        e.offset = new mxPoint(0, 0);
+        f = this.graph.view.getPoint(a, e);
+        e.offset = new mxPoint((b - f.x) / g, (c - f.y) / g);
+        d.setGeometry(a.cell, e)
+    }
+};
+mxEdgeHandler.prototype.connect = function(a, b, c, d, e) {
+    e = this.graph.getModel();
+    var f = e.getParent(a);
+    e.beginUpdate();
+    try {
+        if (d) {
+            var g = a.clone();
+            e.add(f, g, e.getChildCount(f));
+            var h = e.getTerminal(a, !c);
+            this.graph.connectCell(g, h, !c);
+            a = g
+        }
+        var k = this.constraintHandler.currentConstraint;
+        null == k && (k = new mxConnectionConstraint);
+        this.graph.connectCell(a, b, c, k)
+    } finally {
+        e.endUpdate()
+    }
+    return a
+};
+mxEdgeHandler.prototype.changeTerminalPoint = function(a, b, c) {
+    var d = this.graph.getModel(),
+        e = d.getGeometry(a);
+    if (null != e) {
+        d.beginUpdate();
+        try {
+            e = e.clone(), e.setTerminalPoint(b, c), d.setGeometry(a, e), this.graph.connectCell(a, null, c, new mxConnectionConstraint)
+        } finally {
+            d.endUpdate()
+        }
+    }
+};
+mxEdgeHandler.prototype.changePoints = function(a, b) {
+    var c = this.graph.getModel(),
+        d = c.getGeometry(a);
+    null != d && (d = d.clone(), d.points = b, c.setGeometry(a, d))
+};
+mxEdgeHandler.prototype.addPoint = function(a, b) {
+    var c = mxUtils.convertPoint(this.graph.container, mxEvent.getClientX(b), mxEvent.getClientY(b)),
+        d = this.graph.isGridEnabledEvent(b);
+    this.convertPoint(c, d);
+    this.addPointAt(a, c.x, c.y);
+    mxEvent.consume(b)
+};
+mxEdgeHandler.prototype.addPointAt = function(a, b, c) {
+    var d = this.graph.getCellGeometry(a.cell);
+    b = new mxPoint(b, c);
+    if (null != d) {
+        d = d.clone();
+        c = this.graph.view.translate;
+        var e = this.graph.view.scale;
+        c = mxUtils.findNearestSegment(a, (b.x + c.x) * e, (b.y + c.y) * e);
+        null == d.points ? d.points = [b] : d.points.splice(c, 0, b);
+        this.graph.getModel().setGeometry(a.cell, d);
+        this.destroy();
+        this.init()
+    }
+};
+mxEdgeHandler.prototype.removePoint = function(a, b) {
+    if (0 < b && b < this.abspoints.length - 1) {
+        var c = this.graph.getCellGeometry(this.state.cell);
+        null != c && null != c.points && (c = c.clone(), c.points.splice(b - 1, 1), this.graph.getModel().setGeometry(a.cell, c), this.destroy(), this.init())
+    }
+};
+mxEdgeHandler.prototype.getHandleFillColor = function(a) {
+    a = 0 == a;
+    var b = this.state.cell,
+        c = this.graph.getModel().getTerminal(b, a),
+        d = mxConstants.HANDLE_FILLCOLOR;
+    null != c && !this.graph.isCellDisconnectable(b, c, a) || null == c && !this.graph.isTerminalPointMovable(b, a) ? d = mxConstants.LOCKED_HANDLE_FILLCOLOR : null != c && this.graph.isCellDisconnectable(b, c, a) && (d = mxConstants.CONNECT_HANDLE_FILLCOLOR);
+    return d
+};
+mxEdgeHandler.prototype.redraw = function() {
+    this.abspoints = this.state.absolutePoints.slice();
+    var a = this.state.cell,
+        b = mxConstants.LABEL_HANDLE_SIZE;
+    this.label = new mxPoint(this.state.absoluteOffset.x, this.state.absoluteOffset.y);
+    this.labelShape.bounds = new mxRectangle(Math.round(this.label.x - b / 2), Math.round(this.label.y - b / 2), b, b);
+    this.labelShape.redraw();
+    b = this.graph.getLabel(a);
+    null != b && 0 < b.length && this.graph.isLabelMovable(a) ? this.labelShape.node.style.visibility = "visible" : this.labelShape.node.style.visibility =
+        "hidden";
+    if (null != this.bends && 0 < this.bends.length) {
+        var c = this.abspoints.length - 1,
+            a = this.abspoints[0],
+            d = this.abspoints[0].y,
+            b = this.bends[0].bounds;
+        this.bends[0].bounds = new mxRectangle(Math.round(this.abspoints[0].x - b.width / 2), Math.round(d - b.height / 2), b.width, b.height);
+        this.bends[0].fill = this.getHandleFillColor(0);
+        this.bends[0].redraw();
+        var d = this.abspoints[c],
+            e = this.abspoints[c].x,
+            c = this.abspoints[c].y,
+            f = this.bends.length - 1,
+            b = this.bends[f].bounds;
+        this.bends[f].bounds = new mxRectangle(Math.round(e - b.width /
+            2), Math.round(c - b.height / 2), b.width, b.height);
+        this.bends[f].fill = this.getHandleFillColor(f);
+        this.bends[f].redraw();
+        this.redrawInnerBends(a, d)
+    }
+    this.drawPreview()
+};
+mxEdgeHandler.prototype.redrawInnerBends = function(a, b) {
+    var c = this.graph.getModel().getGeometry(this.state.cell).points;
+    if (null != c) {
+        null == this.points && (this.points = []);
+        for (var d = 1; d < this.bends.length - 1; d++)
+            if (null != this.bends[d])
+                if (null != this.abspoints[d]) {
+                    var e = this.abspoints[d].x,
+                        f = this.abspoints[d].y,
+                        g = this.bends[d].bounds;
+                    this.bends[d].node.style.visibility = "visible";
+                    this.bends[d].bounds = new mxRectangle(Math.round(e - g.width / 2), Math.round(f - g.height / 2), g.width, g.height);
+                    this.bends[d].redraw();
+                    this.points[d -
+                        1] = c[d - 1]
+                } else this.bends[d].destroy(), this.bends[d] = null
+    }
+};
+mxEdgeHandler.prototype.drawPreview = function() {
+    if (this.isLabel) {
+        var a = mxConstants.LABEL_HANDLE_SIZE,
+            a = new mxRectangle(Math.round(this.label.x - a / 2), Math.round(this.label.y - a / 2), a, a);
+        this.labelShape.bounds = a;
+        this.labelShape.redraw()
+    } else this.shape.points = this.abspoints, this.shape.redraw()
+};
+mxEdgeHandler.prototype.destroy = function() {
+    null != this.marker && (this.marker.destroy(), this.marker = null);
+    null != this.shape && (this.shape.destroy(), this.shape = null);
+    null != this.labelShape && (this.labelShape.destroy(), this.labelShape = null);
+    null != this.constraintHandler && (this.constraintHandler.destroy(), this.constraintHandler = null);
+    if (null != this.bends)
+        for (var a = 0; a < this.bends.length; a++) null != this.bends[a] && (this.bends[a].destroy(), this.bends[a] = null)
+};
+
+function mxElbowEdgeHandler(a) {
+    mxEdgeHandler.call(this, a)
+}
+mxUtils.extend(mxElbowEdgeHandler, mxEdgeHandler);
+mxElbowEdgeHandler.prototype = new mxEdgeHandler;
+mxElbowEdgeHandler.prototype.constructor = mxElbowEdgeHandler;
+mxElbowEdgeHandler.prototype.flipEnabled = !0;
+mxElbowEdgeHandler.prototype.doubleClickOrientationResource = "none" != mxClient.language ? "doubleClickOrientation" : "";
+mxElbowEdgeHandler.prototype.createBends = function() {
+    var a = [],
+        b = this.createHandleShape(0);
+    this.initBend(b);
+    b.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE;
+    mxEvent.redirectMouseEvents(b.node, this.graph, this.state);
+    a.push(b);
+    mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none");
+    a.push(this.createVirtualBend());
+    this.points.push(new mxPoint(0, 0));
+    b = this.createHandleShape(2);
+    this.initBend(b);
+    b.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE;
+    mxEvent.redirectMouseEvents(b.node, this.graph, this.state);
+    a.push(b);
+    mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none");
+    return a
+};
+mxElbowEdgeHandler.prototype.createVirtualBend = function() {
+    var a = this.createHandleShape();
+    this.initBend(a);
+    var b = this.getCursorForBend();
+    a.node.style.cursor = b;
+    b = mxUtils.bind(this, function(a) {
+        !mxEvent.isConsumed(a) && this.flipEnabled && (this.graph.flipEdge(this.state.cell, a), mxEvent.consume(a))
+    });
+    mxEvent.redirectMouseEvents(a.node, this.graph, this.state, null, null, null, b);
+    this.graph.isCellBendable(this.state.cell) || (a.node.style.display = "none");
+    return a
+};
+mxElbowEdgeHandler.prototype.getCursorForBend = function() {
+    return this.state.style[mxConstants.STYLE_EDGE] == mxEdgeStyle.TopToBottom || this.state.style[mxConstants.STYLE_EDGE] == mxConstants.EDGESTYLE_TOPTOBOTTOM || (this.state.style[mxConstants.STYLE_EDGE] == mxEdgeStyle.ElbowConnector || this.state.style[mxConstants.STYLE_EDGE] == mxConstants.EDGESTYLE_ELBOW) && this.state.style[mxConstants.STYLE_ELBOW] == mxConstants.ELBOW_VERTICAL ? "row-resize" : "col-resize"
+};
+mxElbowEdgeHandler.prototype.getTooltipForNode = function(a) {
+    var b = null;
+    if (null != this.bends && null != this.bends[1] && (a == this.bends[1].node || a.parentNode == this.bends[1].node)) b = this.doubleClickOrientationResource, b = mxResources.get(b) || b;
+    return b
+};
+mxElbowEdgeHandler.prototype.convertPoint = function(a, b) {
+    var c = this.graph.getView().getScale(),
+        d = this.graph.getView().getTranslate(),
+        e = this.state.origin;
+    b && (a.x = this.graph.snap(a.x), a.y = this.graph.snap(a.y));
+    a.x = Math.round(a.x / c - d.x - e.x);
+    a.y = Math.round(a.y / c - d.y - e.y)
+};
+mxElbowEdgeHandler.prototype.redrawInnerBends = function(a, b) {
+    var c = this.graph.getModel().getGeometry(this.state.cell).points,
+        c = null != c ? c[0] : null,
+        c = null == c ? new mxPoint(a.x + (b.x - a.x) / 2, a.y + (b.y - a.y) / 2) : new mxPoint(this.graph.getView().scale * (c.x + this.graph.getView().translate.x + this.state.origin.x), this.graph.getView().scale * (c.y + this.graph.getView().translate.y + this.state.origin.y)),
+        d = this.bends[1].bounds,
+        e = d.width,
+        d = d.height;
+    null == this.handleImage && (d = e = mxConstants.HANDLE_SIZE);
+    var f = new mxRectangle(Math.round(c.x -
+        e / 2), Math.round(c.y - d / 2), e, d);
+    null == this.handleImage && ("hidden" != this.labelShape.node.style.visibility && mxUtils.intersects(f, this.labelShape.bounds)) && (e += 3, d += 3, f = new mxRectangle(Math.round(c.x - e / 2), Math.round(c.y - d / 2), e, d));
+    this.bends[1].bounds = f;
+    this.bends[1].redraw()
+};
+
+function mxEdgeSegmentHandler(a) {
+    mxEdgeHandler.call(this, a)
+}
+mxUtils.extend(mxEdgeSegmentHandler, mxEdgeHandler);
+mxEdgeSegmentHandler.prototype = new mxElbowEdgeHandler;
+mxEdgeSegmentHandler.prototype.constructor = mxEdgeSegmentHandler;
+mxEdgeSegmentHandler.prototype.getPreviewPoints = function(a) {
+    if (this.isSource || this.isTarget) return mxElbowEdgeHandler.prototype.getPreviewPoints.apply(this, arguments);
+    this.convertPoint(a, !1);
+    var b = this.state.absolutePoints,
+        c = b[0].clone();
+    this.convertPoint(c, !1);
+    for (var d = [], e = 1; e < b.length; e++) {
+        var f = b[e].clone();
+        this.convertPoint(f, !1);
+        e == this.index && (c.x == f.x ? (c.x = a.x, f.x = a.x) : (c.y = a.y, f.y = a.y));
+        e < b.length - 1 && d.push(f);
+        c = f
+    }
+    if (1 == d.length) {
+        if (c = this.state.view, e = this.state.getVisibleTerminalState(!0),
+            f = this.state.getVisibleTerminalState(!1), null != f & null != e) {
+            var g = this.state.origin.x,
+                h = this.state.origin.y;
+            mxUtils.contains(f, d[0].x + g, d[0].y + h) ? b[1].y == b[2].y ? d[0].y = c.getRoutingCenterY(e) - h : d[0].x = c.getRoutingCenterX(e) - g : mxUtils.contains(e, d[0].x + g, d[0].y + h) && (b[1].y == b[0].y ? d[0].y = c.getRoutingCenterY(f) - h : d[0].x = c.getRoutingCenterX(f) - g)
+        }
+    } else 0 == d.length && (d = [a]);
+    return d
+};
+mxEdgeSegmentHandler.prototype.createBends = function() {
+    var a = [],
+        b = this.createHandleShape(0);
+    this.initBend(b);
+    b.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE;
+    mxEvent.redirectMouseEvents(b.node, this.graph, this.state);
+    a.push(b);
+    mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none");
+    var c = this.state.absolutePoints;
+    if (this.graph.isCellBendable(this.state.cell)) {
+        null == this.points && (this.points = []);
+        for (var d = 0; d < c.length - 1; d++) b = this.createVirtualBend(), a.push(b), b.node.style.cursor = 0 == c[d].x -
+            c[d + 1].x ? "col-resize" : "row-resize", this.points.push(new mxPoint(0, 0)), mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none")
+    }
+    b = this.createHandleShape(c.length);
+    this.initBend(b);
+    b.node.style.cursor = mxConstants.CURSOR_BEND_HANDLE;
+    mxEvent.redirectMouseEvents(b.node, this.graph, this.state);
+    a.push(b);
+    mxClient.IS_TOUCH && b.node.setAttribute("pointer-events", "none");
+    return a
+};
+mxEdgeSegmentHandler.prototype.redraw = function() {
+    this.refresh();
+    mxEdgeHandler.prototype.redraw.apply(this, arguments)
+};
+mxEdgeSegmentHandler.prototype.refresh = function() {
+    if (null != this.bends) {
+        for (var a = 0; a < this.bends.length; a++) null != this.bends[a] && (this.bends[a].destroy(), this.bends[a] = null);
+        this.bends = this.createBends()
+    }
+};
+mxEdgeSegmentHandler.prototype.redrawInnerBends = function(a, b) {
+    if (this.graph.isCellBendable(this.state.cell)) {
+        var c = mxConstants.HANDLE_SIZE,
+            d = this.state.absolutePoints;
+        if (null != d && 1 < d.length)
+            for (var e = 0; e < this.state.absolutePoints.length - 1; e++)
+                if (null != this.bends[e + 1]) {
+                    a = d[e];
+                    b = d[e + 1];
+                    var f = new mxPoint(a.x + (b.x - a.x) / 2, a.y + (b.y - a.y) / 2);
+                    this.bends[e + 1].bounds = new mxRectangle(Math.round(f.x - c / 2), Math.round(f.y - c / 2), c, c);
+                    this.bends[e + 1].redraw()
+                }
+    }
+};
+mxEdgeSegmentHandler.prototype.changePoints = function(a, b) {
+    b = [];
+    var c = this.abspoints;
+    if (1 < c.length)
+        for (var d = c[0], e = c[1], f = 2; f < c.length; f++) {
+            var g = c[f];
+            if ((Math.round(d.x) != Math.round(e.x) || Math.round(e.x) != Math.round(g.x)) && (Math.round(d.y) != Math.round(e.y) || Math.round(e.y) != Math.round(g.y))) d = e, e = e.clone(), this.convertPoint(e, !1), b.push(e);
+            e = g
+        }
+    mxElbowEdgeHandler.prototype.changePoints.apply(this, arguments)
+};
+
+function mxKeyHandler(a, b) {
+    null != a && (this.graph = a, this.target = b || document.documentElement, this.normalKeys = [], this.shiftKeys = [], this.controlKeys = [], this.controlShiftKeys = [], mxEvent.addListener(this.target, "keydown", mxUtils.bind(this, function(a) {
+        this.keyDown(a)
+    })), mxClient.IS_IE && mxEvent.addListener(window, "unload", mxUtils.bind(this, function() {
+        this.destroy()
+    })))
+}
+mxKeyHandler.prototype.graph = null;
+mxKeyHandler.prototype.target = null;
+mxKeyHandler.prototype.normalKeys = null;
+mxKeyHandler.prototype.shiftKeys = null;
+mxKeyHandler.prototype.controlKeys = null;
+mxKeyHandler.prototype.controlShiftKeys = null;
+mxKeyHandler.prototype.enabled = !0;
+mxKeyHandler.prototype.isEnabled = function() {
+    return this.enabled
+};
+mxKeyHandler.prototype.setEnabled = function(a) {
+    this.enabled = a
+};
+mxKeyHandler.prototype.bindKey = function(a, b) {
+    this.normalKeys[a] = b
+};
+mxKeyHandler.prototype.bindShiftKey = function(a, b) {
+    this.shiftKeys[a] = b
+};
+mxKeyHandler.prototype.bindControlKey = function(a, b) {
+    this.controlKeys[a] = b
+};
+mxKeyHandler.prototype.bindControlShiftKey = function(a, b) {
+    this.controlShiftKeys[a] = b
+};
+mxKeyHandler.prototype.isControlDown = function(a) {
+    return mxEvent.isControlDown(a)
+};
+mxKeyHandler.prototype.getFunction = function(a) {
+    return null != a ? this.isControlDown(a) ? mxEvent.isShiftDown(a) ? this.controlShiftKeys[a.keyCode] : this.controlKeys[a.keyCode] : mxEvent.isShiftDown(a) ? this.shiftKeys[a.keyCode] : this.normalKeys[a.keyCode] : null
+};
+mxKeyHandler.prototype.isGraphEvent = function(a) {
+    a = mxEvent.getSource(a);
+    if (a == this.target || a.parentNode == this.target || null != this.graph.cellEditor && a == this.graph.cellEditor.textarea) return !0;
+    for (; null != a;) {
+        if (a == this.graph.container) return !0;
+        a = a.parentNode
+    }
+    return !1
+};
+mxKeyHandler.prototype.keyDown = function(a) {
+    if (this.graph.isEnabled() && !mxEvent.isConsumed(a) && this.isGraphEvent(a) && this.isEnabled())
+        if (27 == a.keyCode) this.escape(a);
+        else if (!this.graph.isEditing()) {
+        var b = this.getFunction(a);
+        null != b && (b(a), mxEvent.consume(a))
+    }
+};
+mxKeyHandler.prototype.escape = function(a) {
+    this.graph.isEscapeEnabled() && this.graph.escape(a)
+};
+mxKeyHandler.prototype.destroy = function() {
+    this.target = null
+};
+
+function mxTooltipHandler(a, b) {
+    null != a && (this.graph = a, this.delay = b || 500, this.graph.addMouseListener(this))
+}
+mxTooltipHandler.prototype.zIndex = 10005;
+mxTooltipHandler.prototype.graph = null;
+mxTooltipHandler.prototype.delay = null;
+mxTooltipHandler.prototype.hideOnHover = !1;
+mxTooltipHandler.prototype.enabled = !0;
+mxTooltipHandler.prototype.isEnabled = function() {
+    return this.enabled
+};
+mxTooltipHandler.prototype.setEnabled = function(a) {
+    this.enabled = a
+};
+mxTooltipHandler.prototype.isHideOnHover = function() {
+    return this.hideOnHover
+};
+mxTooltipHandler.prototype.setHideOnHover = function(a) {
+    this.hideOnHover = a
+};
+mxTooltipHandler.prototype.init = function() {
+    null != document.body && (this.div = document.createElement("div"), this.div.className = "mxTooltip", this.div.style.visibility = "hidden", this.div.style.zIndex = this.zIndex, document.body.appendChild(this.div), mxEvent.addListener(this.div, "mousedown", mxUtils.bind(this, function(a) {
+        this.hideTooltip()
+    })))
+};
+mxTooltipHandler.prototype.mouseDown = function(a, b) {
+    this.reset(b, !1);
+    this.hideTooltip()
+};
+mxTooltipHandler.prototype.mouseMove = function(a, b) {
+    if (b.getX() != this.lastX || b.getY() != this.lastY) this.reset(b, !0), (this.isHideOnHover() || b.getState() != this.state || b.getSource() != this.node && (!this.stateSource || null != b.getState() && this.stateSource == (b.isSource(b.getState().shape) || !b.isSource(b.getState().text)))) && this.hideTooltip();
+    this.lastX = b.getX();
+    this.lastY = b.getY()
+};
+mxTooltipHandler.prototype.mouseUp = function(a, b) {
+    this.reset(b, !0);
+    this.hideTooltip()
+};
+mxTooltipHandler.prototype.resetTimer = function() {
+    null != this.thread && (window.clearTimeout(this.thread), this.thread = null)
+};
+mxTooltipHandler.prototype.reset = function(a, b) {
+    this.resetTimer();
+    if (b && this.isEnabled() && null != a.getState() && (null == this.div || "hidden" == this.div.style.visibility)) {
+        var c = a.getState(),
+            d = a.getSource(),
+            e = a.getX(),
+            f = a.getY(),
+            g = a.isSource(c.shape) || a.isSource(c.text);
+        this.thread = window.setTimeout(mxUtils.bind(this, function() {
+            if (!this.graph.isEditing() && !this.graph.panningHandler.isMenuShowing()) {
+                var a = this.graph.getTooltip(c, d, e, f);
+                this.show(a, e, f);
+                this.state = c;
+                this.node = d;
+                this.stateSource = g
+            }
+        }), this.delay)
+    }
+};
+mxTooltipHandler.prototype.hide = function() {
+    this.resetTimer();
+    this.hideTooltip()
+};
+mxTooltipHandler.prototype.hideTooltip = function() {
+    null != this.div && (this.div.style.visibility = "hidden")
+};
+mxTooltipHandler.prototype.show = function(a, b, c) {
+    if (null != a && 0 < a.length) {
+        null == this.div && this.init();
+        var d = mxUtils.getScrollOrigin();
+        this.div.style.left = b + d.x + "px";
+        this.div.style.top = c + mxConstants.TOOLTIP_VERTICAL_OFFSET + d.y + "px";
+        mxUtils.isNode(a) ? (this.div.innerHTML = "", this.div.appendChild(a)) : this.div.innerHTML = a.replace(/\n/g, "\x3cbr\x3e");
+        this.div.style.visibility = "";
+        mxUtils.fit(this.div)
+    }
+};
+mxTooltipHandler.prototype.destroy = function() {
+    this.graph.removeMouseListener(this);
+    mxEvent.release(this.div);
+    null != this.div && null != this.div.parentNode && this.div.parentNode.removeChild(this.div);
+    this.div = null
+};
+
+function mxCellTracker(a, b, c) {
+    mxCellMarker.call(this, a, b);
+    this.graph.addMouseListener(this);
+    null != c && (this.getCell = c);
+    mxClient.IS_IE && mxEvent.addListener(window, "unload", mxUtils.bind(this, function() {
+        this.destroy()
+    }))
+}
+mxUtils.extend(mxCellTracker, mxCellMarker);
+mxCellTracker.prototype.mouseDown = function(a, b) {};
+mxCellTracker.prototype.mouseMove = function(a, b) {
+    this.isEnabled() && this.process(b)
+};
+mxCellTracker.prototype.mouseUp = function(a, b) {
+    this.reset()
+};
+mxCellTracker.prototype.destroy = function() {
+    this.destroyed || (this.destroyed = !0, this.graph.removeMouseListener(this), mxCellMarker.prototype.destroy.apply(this))
+};
+
+function mxCellHighlight(a, b, c, d) {
+    null != a && (this.graph = a, this.highlightColor = null != b ? b : mxConstants.DEFAULT_VALID_COLOR, this.strokeWidth = null != c ? c : mxConstants.HIGHLIGHT_STROKEWIDTH, this.dashed = null != d ? d : !1, this.repaintHandler = mxUtils.bind(this, function() {
+        this.repaint()
+    }), this.graph.getView().addListener(mxEvent.SCALE, this.repaintHandler), this.graph.getView().addListener(mxEvent.TRANSLATE, this.repaintHandler), this.graph.getView().addListener(mxEvent.SCALE_AND_TRANSLATE, this.repaintHandler), this.graph.getModel().addListener(mxEvent.CHANGE,
+        this.repaintHandler), this.resetHandler = mxUtils.bind(this, function() {
+        this.hide()
+    }), this.graph.getView().addListener(mxEvent.DOWN, this.resetHandler), this.graph.getView().addListener(mxEvent.UP, this.resetHandler))
+}
+mxCellHighlight.prototype.keepOnTop = !1;
+mxCellHighlight.prototype.graph = !0;
+mxCellHighlight.prototype.state = null;
+mxCellHighlight.prototype.spacing = 2;
+mxCellHighlight.prototype.resetHandler = null;
+mxCellHighlight.prototype.setHighlightColor = function(a) {
+    this.highlightColor = a;
+    null != this.shape && (this.shape.stroke = a)
+};
+mxCellHighlight.prototype.drawHighlight = function() {
+    this.shape = this.createShape();
+    this.repaint();
+    !this.keepOnTop && this.shape.node.parentNode.firstChild != this.shape.node && this.shape.node.parentNode.insertBefore(this.shape.node, this.shape.node.parentNode.firstChild)
+};
+mxCellHighlight.prototype.createShape = function() {
+    var a = null,
+        a = this.graph.model.isEdge(this.state.cell) ? new mxPolyline(this.state.absolutePoints, this.highlightColor, this.strokeWidth) : new mxRectangleShape(new mxRectangle, null, this.highlightColor, this.strokeWidth);
+    a.dialect = this.graph.dialect != mxConstants.DIALECT_SVG ? mxConstants.DIALECT_VML : mxConstants.DIALECT_SVG;
+    a.init(this.graph.getView().getOverlayPane());
+    mxEvent.redirectMouseEvents(a.node, this.graph, this.state);
+    a.svgStrokeTolerance = 0;
+    a.pointerEvents = !1;
+    a.isDashed = this.dashed;
+    return a
+};
+mxCellHighlight.prototype.repaint = function() {
+    if (null != this.state && null != this.shape) {
+        var a = 0;
+        this.graph.model.isEdge(this.state.cell) ? this.shape.points = this.state.absolutePoints : (this.shape.bounds = new mxRectangle(this.state.x - this.spacing, this.state.y - this.spacing, this.state.width + 2 * this.spacing, this.state.height + 2 * this.spacing), a = Number(this.state.style[mxConstants.STYLE_ROTATION] || "0"));
+        null != this.state.shape && this.shape.setCursor(this.state.shape.getCursor());
+        0 != a && (this.shape.rotation = a);
+        this.shape.redraw()
+    }
+};
+mxCellHighlight.prototype.hide = function() {
+    this.highlight(null)
+};
+mxCellHighlight.prototype.highlight = function(a) {
+    this.state != a && (null != this.shape && (this.shape.destroy(), this.shape = null), this.state = a, null != this.state && this.drawHighlight())
+};
+mxCellHighlight.prototype.destroy = function() {
+    this.graph.getView().removeListener(this.repaintHandler);
+    this.graph.getModel().removeListener(this.repaintHandler);
+    this.graph.getView().removeListener(this.resetHandler);
+    this.graph.getModel().removeListener(this.resetHandler);
+    null != this.shape && (this.shape.destroy(), this.shape = null)
+};
+
+function mxDefaultKeyHandler(a) {
+    if (null != a) {
+        this.editor = a;
+        this.handler = new mxKeyHandler(a.graph);
+        var b = this.handler.escape;
+        this.handler.escape = function(c) {
+            b.apply(this, arguments);
+            a.hideProperties();
+            a.fireEvent(new mxEventObject(mxEvent.ESCAPE, "event", c))
+        }
+    }
+}
+mxDefaultKeyHandler.prototype.editor = null;
+mxDefaultKeyHandler.prototype.handler = null;
+mxDefaultKeyHandler.prototype.bindAction = function(a, b, c) {
+    var d = mxUtils.bind(this, function() {
+        this.editor.execute(b)
+    });
+    c ? this.handler.bindControlKey(a, d) : this.handler.bindKey(a, d)
+};
+mxDefaultKeyHandler.prototype.destroy = function() {
+    this.handler.destroy();
+    this.handler = null
+};
+
+function mxDefaultPopupMenu(a) {
+    this.config = a
+}
+mxDefaultPopupMenu.prototype.imageBasePath = null;
+mxDefaultPopupMenu.prototype.config = null;
+mxDefaultPopupMenu.prototype.createMenu = function(a, b, c, d) {
+    if (null != this.config) {
+        var e = this.createConditions(a, c, d);
+        this.addItems(a, b, c, d, e, this.config.firstChild, null)
+    }
+};
+mxDefaultPopupMenu.prototype.addItems = function(a, b, c, d, e, f, g) {
+    for (var h = !1; null != f;) {
+        if ("add" == f.nodeName) {
+            var k = f.getAttribute("if");
+            if (null == k || e[k]) {
+                var k = f.getAttribute("as"),
+                    k = mxResources.get(k) || k,
+                    l = mxUtils.eval(mxUtils.getTextContent(f)),
+                    m = f.getAttribute("action"),
+                    n = f.getAttribute("icon"),
+                    p = f.getAttribute("iconCls");
+                h && (b.addSeparator(g), h = !1);
+                null != n && this.imageBasePath && (n = this.imageBasePath + n);
+                k = this.addAction(b, a, k, n, l, m, c, g, p);
+                this.addItems(a, b, c, d, e, f.firstChild, k)
+            }
+        } else "separator" ==
+            f.nodeName && (h = !0);
+        f = f.nextSibling
+    }
+};
+mxDefaultPopupMenu.prototype.addAction = function(a, b, c, d, e, f, g, h, k) {
+    return a.addItem(c, d, function(a) {
+        "function" == typeof e && e.call(b, b, g, a);
+        null != f && b.execute(f, g, a)
+    }, h, k)
+};
+mxDefaultPopupMenu.prototype.createConditions = function(a, b, c) {
+    var d = a.graph.getModel(),
+        e = d.getChildCount(b),
+        f = [];
+    f.nocell = null == b;
+    f.ncells = 1 < a.graph.getSelectionCount();
+    f.notRoot = d.getRoot() != d.getParent(a.graph.getDefaultParent());
+    f.cell = null != b;
+    d = null != b && 1 == a.graph.getSelectionCount();
+    f.nonEmpty = d && 0 < e;
+    f.expandable = d && a.graph.isCellFoldable(b, !1);
+    f.collapsable = d && a.graph.isCellFoldable(b, !0);
+    f.validRoot = d && a.graph.isValidRoot(b);
+    f.emptyValidRoot = f.validRoot && 0 == e;
+    f.swimlane = d && a.graph.isSwimlane(b);
+    e = this.config.getElementsByTagName("condition");
+    for (d = 0; d < e.length; d++) {
+        var g = mxUtils.eval(mxUtils.getTextContent(e[d])),
+            h = e[d].getAttribute("name");
+        null != h && "function" == typeof g && (f[h] = g(a, b, c))
+    }
+    return f
+};
+
+function mxDefaultToolbar(a, b) {
+    this.editor = b;
+    null != a && null != b && this.init(a)
+}
+mxDefaultToolbar.prototype.editor = null;
+mxDefaultToolbar.prototype.toolbar = null;
+mxDefaultToolbar.prototype.resetHandler = null;
+mxDefaultToolbar.prototype.spacing = 4;
+mxDefaultToolbar.prototype.connectOnDrop = !1;
+mxDefaultToolbar.prototype.init = function(a) {
+    null != a && (this.toolbar = new mxToolbar(a), this.toolbar.addListener(mxEvent.SELECT, mxUtils.bind(this, function(a, c) {
+        var d = c.getProperty("function");
+        this.editor.insertFunction = null != d ? mxUtils.bind(this, function() {
+            d.apply(this, arguments);
+            this.toolbar.resetMode()
+        }) : null
+    })), this.resetHandler = mxUtils.bind(this, function() {
+        null != this.toolbar && this.toolbar.resetMode(!0)
+    }), this.editor.graph.addListener(mxEvent.DOUBLE_CLICK, this.resetHandler), this.editor.addListener(mxEvent.ESCAPE,
+        this.resetHandler))
+};
+mxDefaultToolbar.prototype.addItem = function(a, b, c, d) {
+    var e = mxUtils.bind(this, function() {
+        null != c && 0 < c.length && this.editor.execute(c)
+    });
+    return this.toolbar.addItem(a, b, e, d)
+};
+mxDefaultToolbar.prototype.addSeparator = function(a) {
+    a = a || mxClient.imageBasePath + "/separator.gif";
+    this.toolbar.addSeparator(a)
+};
+mxDefaultToolbar.prototype.addCombo = function() {
+    return this.toolbar.addCombo()
+};
+mxDefaultToolbar.prototype.addActionCombo = function(a) {
+    return this.toolbar.addActionCombo(a)
+};
+mxDefaultToolbar.prototype.addActionOption = function(a, b, c) {
+    var d = mxUtils.bind(this, function() {
+        this.editor.execute(c)
+    });
+    this.addOption(a, b, d)
+};
+mxDefaultToolbar.prototype.addOption = function(a, b, c) {
+    return this.toolbar.addOption(a, b, c)
+};
+mxDefaultToolbar.prototype.addMode = function(a, b, c, d, e) {
+    var f = mxUtils.bind(this, function() {
+        this.editor.setMode(c);
+        null != e && e(this.editor)
+    });
+    return this.toolbar.addSwitchMode(a, b, f, d)
+};
+mxDefaultToolbar.prototype.addPrototype = function(a, b, c, d, e, f) {
+    var g = function() {
+            return "function" == typeof c ? c() : null != c ? c.clone() : null
+        },
+        h = mxUtils.bind(this, function(a, b) {
+            "function" == typeof e ? e(this.editor, g(), a, b) : this.drop(g(), a, b);
+            this.toolbar.resetMode();
+            mxEvent.consume(a)
+        });
+    a = this.toolbar.addMode(a, b, h, d, null, f);
+    this.installDropHandler(a, function(a, b, c) {
+        h(b, c)
+    });
+    return a
+};
+mxDefaultToolbar.prototype.drop = function(a, b, c) {
+    var d = this.editor.graph,
+        e = d.getModel();
+    if (null == c || e.isEdge(c) || !this.connectOnDrop || !d.isCellConnectable(c)) {
+        for (; null != c && !d.isValidDropTarget(c, [a], b);) c = e.getParent(c);
+        this.insert(a, b, c)
+    } else this.connect(a, b, c)
+};
+mxDefaultToolbar.prototype.insert = function(a, b, c) {
+    var d = this.editor.graph;
+    if (d.canImportCell(a)) {
+        var e = mxEvent.getClientX(b),
+            f = mxEvent.getClientY(b),
+            e = mxUtils.convertPoint(d.container, e, f);
+        return d.isSplitEnabled() && d.isSplitTarget(c, [a], b) ? d.splitEdge(c, [a], null, e.x, e.y) : this.editor.addVertex(c, a, e.x, e.y)
+    }
+    return null
+};
+mxDefaultToolbar.prototype.connect = function(a, b, c) {
+    b = this.editor.graph;
+    var d = b.getModel();
+    if (null != c && b.isCellConnectable(a) && b.isEdgeValid(null, c, a)) {
+        var e = null;
+        d.beginUpdate();
+        try {
+            var f = d.getGeometry(c),
+                g = d.getGeometry(a).clone();
+            g.x = f.x + (f.width - g.width) / 2;
+            g.y = f.y + (f.height - g.height) / 2;
+            var h = this.spacing * b.gridSize,
+                k = 20 * d.getDirectedEdgeCount(c, !0);
+            this.editor.horizontalFlow ? g.x += (g.width + f.width) / 2 + h + k : g.y += (g.height + f.height) / 2 + h + k;
+            a.setGeometry(g);
+            var l = d.getParent(c);
+            b.addCell(a, l);
+            b.constrainChild(a);
+            e = this.editor.createEdge(c, a);
+            if (null == d.getGeometry(e)) {
+                var m = new mxGeometry;
+                m.relative = !0;
+                d.setGeometry(e, m)
+            }
+            b.addEdge(e, l, c, a)
+        } finally {
+            d.endUpdate()
+        }
+        b.setSelectionCells([a, e]);
+        b.scrollCellToVisible(a)
+    }
+};
+mxDefaultToolbar.prototype.installDropHandler = function(a, b) {
+    var c = document.createElement("img");
+    c.setAttribute("src", a.getAttribute("src"));
+    var d = mxUtils.bind(this, function(e) {
+        c.style.width = 2 * a.offsetWidth + "px";
+        c.style.height = 2 * a.offsetHeight + "px";
+        mxUtils.makeDraggable(a, this.editor.graph, b, c);
+        mxEvent.removeListener(c, "load", d)
+    });
+    mxClient.IS_IE ? d() : mxEvent.addListener(c, "load", d)
+};
+mxDefaultToolbar.prototype.destroy = function() {
+    null != this.resetHandler && (this.editor.graph.removeListener("dblclick", this.resetHandler), this.editor.removeListener("escape", this.resetHandler), this.resetHandler = null);
+    null != this.toolbar && (this.toolbar.destroy(), this.toolbar = null)
+};
+
+function mxEditor(a) {
+    this.actions = [];
+    this.addActions();
+    if (null != document.body) {
+        this.cycleAttributeValues = [];
+        this.popupHandler = new mxDefaultPopupMenu;
+        this.undoManager = new mxUndoManager;
+        this.graph = this.createGraph();
+        this.toolbar = this.createToolbar();
+        this.keyHandler = new mxDefaultKeyHandler(this);
+        this.configure(a);
+        this.graph.swimlaneIndicatorColorAttribute = this.cycleAttributeName;
+        !mxClient.IS_LOCAL && null != this.urlInit && (this.session = this.createSession());
+        if (null != this.onInit) this.onInit();
+        mxClient.IS_IE &&
+            mxEvent.addListener(window, "unload", mxUtils.bind(this, function() {
+                this.destroy()
+            }))
+    }
+}
+mxLoadResources && mxResources.add(mxClient.basePath + "/resources/editor");
+mxEditor.prototype = new mxEventSource;
+mxEditor.prototype.constructor = mxEditor;
+mxEditor.prototype.askZoomResource = "none" != mxClient.language ? "askZoom" : "";
+mxEditor.prototype.lastSavedResource = "none" != mxClient.language ? "lastSaved" : "";
+mxEditor.prototype.currentFileResource = "none" != mxClient.language ? "currentFile" : "";
+mxEditor.prototype.propertiesResource = "none" != mxClient.language ? "properties" : "";
+mxEditor.prototype.tasksResource = "none" != mxClient.language ? "tasks" : "";
+mxEditor.prototype.helpResource = "none" != mxClient.language ? "help" : "";
+mxEditor.prototype.outlineResource = "none" != mxClient.language ? "outline" : "";
+mxEditor.prototype.outline = null;
+mxEditor.prototype.graph = null;
+mxEditor.prototype.graphRenderHint = null;
+mxEditor.prototype.toolbar = null;
+mxEditor.prototype.session = null;
+mxEditor.prototype.status = null;
+mxEditor.prototype.popupHandler = null;
+mxEditor.prototype.undoManager = null;
+mxEditor.prototype.keyHandler = null;
+mxEditor.prototype.actions = null;
+mxEditor.prototype.dblClickAction = "edit";
+mxEditor.prototype.swimlaneRequired = !1;
+mxEditor.prototype.disableContextMenu = !0;
+mxEditor.prototype.insertFunction = null;
+mxEditor.prototype.forcedInserting = !1;
+mxEditor.prototype.templates = null;
+mxEditor.prototype.defaultEdge = null;
+mxEditor.prototype.defaultEdgeStyle = null;
+mxEditor.prototype.defaultGroup = null;
+mxEditor.prototype.groupBorderSize = null;
+mxEditor.prototype.filename = null;
+mxEditor.prototype.linefeed = "\x26#xa;";
+mxEditor.prototype.postParameterName = "xml";
+mxEditor.prototype.escapePostData = !0;
+mxEditor.prototype.urlPost = null;
+mxEditor.prototype.urlImage = null;
+mxEditor.prototype.urlInit = null;
+mxEditor.prototype.urlNotify = null;
+mxEditor.prototype.urlPoll = null;
+mxEditor.prototype.horizontalFlow = !1;
+mxEditor.prototype.layoutDiagram = !1;
+mxEditor.prototype.swimlaneSpacing = 0;
+mxEditor.prototype.maintainSwimlanes = !1;
+mxEditor.prototype.layoutSwimlanes = !1;
+mxEditor.prototype.cycleAttributeValues = null;
+mxEditor.prototype.cycleAttributeIndex = 0;
+mxEditor.prototype.cycleAttributeName = "fillColor";
+mxEditor.prototype.tasks = null;
+mxEditor.prototype.tasksWindowImage = null;
+mxEditor.prototype.tasksTop = 20;
+mxEditor.prototype.help = null;
+mxEditor.prototype.helpWindowImage = null;
+mxEditor.prototype.urlHelp = null;
+mxEditor.prototype.helpWidth = 300;
+mxEditor.prototype.helpHeight = 260;
+mxEditor.prototype.propertiesWidth = 240;
+mxEditor.prototype.propertiesHeight = null;
+mxEditor.prototype.movePropertiesDialog = !1;
+mxEditor.prototype.validating = !1;
+mxEditor.prototype.modified = !1;
+mxEditor.prototype.isModified = function() {
+    return this.modified
+};
+mxEditor.prototype.setModified = function(a) {
+    this.modified = a
+};
+mxEditor.prototype.addActions = function() {
+    this.addAction("save", function(a) {
+        a.save()
+    });
+    this.addAction("print", function(a) {
+        (new mxPrintPreview(a.graph, 1)).open()
+    });
+    this.addAction("show", function(a) {
+        mxUtils.show(a.graph, null, 10, 10)
+    });
+    this.addAction("exportImage", function(a) {
+        var b = a.getUrlImage();
+        if (null == b || mxClient.IS_LOCAL) a.execute("show");
+        else {
+            var c = mxUtils.getViewXml(a.graph, 1),
+                c = mxUtils.getXml(c, "\n");
+            mxUtils.submit(b, a.postParameterName + "\x3d" + encodeURIComponent(c), document, "_blank")
+        }
+    });
+    this.addAction("refresh",
+        function(a) {
+            a.graph.refresh()
+        });
+    this.addAction("cut", function(a) {
+        a.graph.isEnabled() && mxClipboard.cut(a.graph)
+    });
+    this.addAction("copy", function(a) {
+        a.graph.isEnabled() && mxClipboard.copy(a.graph)
+    });
+    this.addAction("paste", function(a) {
+        a.graph.isEnabled() && mxClipboard.paste(a.graph)
+    });
+    this.addAction("delete", function(a) {
+        a.graph.isEnabled() && a.graph.removeCells()
+    });
+    this.addAction("group", function(a) {
+        a.graph.isEnabled() && a.graph.setSelectionCell(a.groupCells())
+    });
+    this.addAction("ungroup", function(a) {
+        a.graph.isEnabled() &&
+            a.graph.setSelectionCells(a.graph.ungroupCells())
+    });
+    this.addAction("removeFromParent", function(a) {
+        a.graph.isEnabled() && a.graph.removeCellsFromParent()
+    });
+    this.addAction("undo", function(a) {
+        a.graph.isEnabled() && a.undo()
+    });
+    this.addAction("redo", function(a) {
+        a.graph.isEnabled() && a.redo()
+    });
+    this.addAction("zoomIn", function(a) {
+        a.graph.zoomIn()
+    });
+    this.addAction("zoomOut", function(a) {
+        a.graph.zoomOut()
+    });
+    this.addAction("actualSize", function(a) {
+        a.graph.zoomActual()
+    });
+    this.addAction("fit", function(a) {
+        a.graph.fit()
+    });
+    this.addAction("showProperties", function(a, b) {
+        a.showProperties(b)
+    });
+    this.addAction("selectAll", function(a) {
+        a.graph.isEnabled() && a.graph.selectAll()
+    });
+    this.addAction("selectNone", function(a) {
+        a.graph.isEnabled() && a.graph.clearSelection()
+    });
+    this.addAction("selectVertices", function(a) {
+        a.graph.isEnabled() && a.graph.selectVertices()
+    });
+    this.addAction("selectEdges", function(a) {
+        a.graph.isEnabled() && a.graph.selectEdges()
+    });
+    this.addAction("edit", function(a, b) {
+        a.graph.isEnabled() && a.graph.isCellEditable(b) && a.graph.startEditingAtCell(b)
+    });
+    this.addAction("toBack", function(a, b) {
+        a.graph.isEnabled() && a.graph.orderCells(!0)
+    });
+    this.addAction("toFront", function(a, b) {
+        a.graph.isEnabled() && a.graph.orderCells(!1)
+    });
+    this.addAction("enterGroup", function(a, b) {
+        a.graph.enterGroup(b)
+    });
+    this.addAction("exitGroup", function(a) {
+        a.graph.exitGroup()
+    });
+    this.addAction("home", function(a) {
+        a.graph.home()
+    });
+    this.addAction("selectPrevious", function(a) {
+        a.graph.isEnabled() && a.graph.selectPreviousCell()
+    });
+    this.addAction("selectNext", function(a) {
+        a.graph.isEnabled() &&
+            a.graph.selectNextCell()
+    });
+    this.addAction("selectParent", function(a) {
+        a.graph.isEnabled() && a.graph.selectParentCell()
+    });
+    this.addAction("selectChild", function(a) {
+        a.graph.isEnabled() && a.graph.selectChildCell()
+    });
+    this.addAction("collapse", function(a) {
+        a.graph.isEnabled() && a.graph.foldCells(!0)
+    });
+    this.addAction("collapseAll", function(a) {
+        if (a.graph.isEnabled()) {
+            var b = a.graph.getChildVertices();
+            a.graph.foldCells(!0, !1, b)
+        }
+    });
+    this.addAction("expand", function(a) {
+        a.graph.isEnabled() && a.graph.foldCells(!1)
+    });
+    this.addAction("expandAll", function(a) {
+        if (a.graph.isEnabled()) {
+            var b = a.graph.getChildVertices();
+            a.graph.foldCells(!1, !1, b)
+        }
+    });
+    this.addAction("bold", function(a) {
+        a.graph.isEnabled() && a.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, mxConstants.FONT_BOLD)
+    });
+    this.addAction("italic", function(a) {
+        a.graph.isEnabled() && a.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, mxConstants.FONT_ITALIC)
+    });
+    this.addAction("underline", function(a) {
+        a.graph.isEnabled() && a.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE,
+            mxConstants.FONT_UNDERLINE)
+    });
+    this.addAction("shadow", function(a) {
+        a.graph.isEnabled() && a.graph.toggleCellStyleFlags(mxConstants.STYLE_FONTSTYLE, mxConstants.FONT_SHADOW)
+    });
+    this.addAction("alignCellsLeft", function(a) {
+        a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_LEFT)
+    });
+    this.addAction("alignCellsCenter", function(a) {
+        a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_CENTER)
+    });
+    this.addAction("alignCellsRight", function(a) {
+        a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_RIGHT)
+    });
+    this.addAction("alignCellsTop", function(a) {
+        a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_TOP)
+    });
+    this.addAction("alignCellsMiddle", function(a) {
+        a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_MIDDLE)
+    });
+    this.addAction("alignCellsBottom", function(a) {
+        a.graph.isEnabled() && a.graph.alignCells(mxConstants.ALIGN_BOTTOM)
+    });
+    this.addAction("alignFontLeft", function(a) {
+        a.graph.setCellStyles(mxConstants.STYLE_ALIGN, mxConstants.ALIGN_LEFT)
+    });
+    this.addAction("alignFontCenter", function(a) {
+        a.graph.isEnabled() &&
+            a.graph.setCellStyles(mxConstants.STYLE_ALIGN, mxConstants.ALIGN_CENTER)
+    });
+    this.addAction("alignFontRight", function(a) {
+        a.graph.isEnabled() && a.graph.setCellStyles(mxConstants.STYLE_ALIGN, mxConstants.ALIGN_RIGHT)
+    });
+    this.addAction("alignFontTop", function(a) {
+        a.graph.isEnabled() && a.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_TOP)
+    });
+    this.addAction("alignFontMiddle", function(a) {
+        a.graph.isEnabled() && a.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_MIDDLE)
+    });
+    this.addAction("alignFontBottom", function(a) {
+        a.graph.isEnabled() && a.graph.setCellStyles(mxConstants.STYLE_VERTICAL_ALIGN, mxConstants.ALIGN_BOTTOM)
+    });
+    this.addAction("zoom", function(a) {
+        var b = 100 * a.graph.getView().scale,
+            b = parseFloat(mxUtils.prompt(mxResources.get(a.askZoomResource) || a.askZoomResource, b)) / 100;
+        isNaN(b) || a.graph.getView().setScale(b)
+    });
+    this.addAction("toggleTasks", function(a) {
+        null != a.tasks ? a.tasks.setVisible(!a.tasks.isVisible()) : a.showTasks()
+    });
+    this.addAction("toggleHelp", function(a) {
+        null !=
+            a.help ? a.help.setVisible(!a.help.isVisible()) : a.showHelp()
+    });
+    this.addAction("toggleOutline", function(a) {
+        null == a.outline ? a.showOutline() : a.outline.setVisible(!a.outline.isVisible())
+    });
+    this.addAction("toggleConsole", function(a) {
+        mxLog.setVisible(!mxLog.isVisible())
+    })
+};
+mxEditor.prototype.createSession = function() {
+    var a = mxUtils.bind(this, function(a) {
+        this.fireEvent(new mxEventObject(mxEvent.SESSION, "session", a))
+    });
+    return this.connect(this.urlInit, this.urlPoll, this.urlNotify, a)
+};
+mxEditor.prototype.configure = function(a) {
+    null != a && ((new mxCodec(a.ownerDocument)).decode(a, this), this.resetHistory())
+};
+mxEditor.prototype.resetFirstTime = function() {
+    document.cookie = "mxgraph\x3dseen; expires\x3dFri, 27 Jul 2001 02:47:11 UTC; path\x3d/"
+};
+mxEditor.prototype.resetHistory = function() {
+    this.lastSnapshot = (new Date).getTime();
+    this.undoManager.clear();
+    this.ignoredChanges = 0;
+    this.setModified(!1)
+};
+mxEditor.prototype.addAction = function(a, b) {
+    this.actions[a] = b
+};
+mxEditor.prototype.execute = function(a, b, c) {
+    var d = this.actions[a];
+    if (null != d) try {
+        var e = arguments;
+        e[0] = this;
+        d.apply(this, e)
+    } catch (f) {
+        throw mxUtils.error("Cannot execute " + a + ": " + f.message, 280, !0), f;
+    } else mxUtils.error("Cannot find action " + a, 280, !0)
+};
+mxEditor.prototype.addTemplate = function(a, b) {
+    this.templates[a] = b
+};
+mxEditor.prototype.getTemplate = function(a) {
+    return this.templates[a]
+};
+mxEditor.prototype.createGraph = function() {
+    var a = new mxGraph(null, null, this.graphRenderHint);
+    a.setTooltips(!0);
+    a.setPanning(!0);
+    this.installDblClickHandler(a);
+    this.installUndoHandler(a);
+    this.installDrillHandler(a);
+    this.installChangeHandler(a);
+    this.installInsertHandler(a);
+    a.panningHandler.factoryMethod = mxUtils.bind(this, function(a, c, d) {
+        return this.createPopupMenu(a, c, d)
+    });
+    a.connectionHandler.factoryMethod = mxUtils.bind(this, function(a, c) {
+        return this.createEdge(a, c)
+    });
+    this.createSwimlaneManager(a);
+    this.createLayoutManager(a);
+    return a
+};
+mxEditor.prototype.createSwimlaneManager = function(a) {
+    a = new mxSwimlaneManager(a, !1);
+    a.isHorizontal = mxUtils.bind(this, function() {
+        return this.horizontalFlow
+    });
+    a.isEnabled = mxUtils.bind(this, function() {
+        return this.maintainSwimlanes
+    });
+    return a
+};
+mxEditor.prototype.createLayoutManager = function(a) {
+    var b = new mxLayoutManager(a),
+        c = this;
+    b.getLayout = function(b) {
+        var e = null,
+            f = c.graph.getModel();
+        if (null != f.getParent(b))
+            if (c.layoutSwimlanes && a.isSwimlane(b)) null == c.swimlaneLayout && (c.swimlaneLayout = c.createSwimlaneLayout()), e = c.swimlaneLayout;
+            else if (c.layoutDiagram && (a.isValidRoot(b) || null == f.getParent(f.getParent(b)))) null == c.diagramLayout && (c.diagramLayout = c.createDiagramLayout()), e = c.diagramLayout;
+        return e
+    };
+    return b
+};
+mxEditor.prototype.setGraphContainer = function(a) {
+    null == this.graph.container && (this.graph.init(a), this.rubberband = new mxRubberband(this.graph), this.disableContextMenu && mxEvent.disableContextMenu(a), mxClient.IS_QUIRKS && new mxDivResizer(a))
+};
+mxEditor.prototype.installDblClickHandler = function(a) {
+    a.addListener(mxEvent.DOUBLE_CLICK, mxUtils.bind(this, function(b, c) {
+        var d = c.getProperty("cell");
+        null != d && (a.isEnabled() && null != this.dblClickAction) && (this.execute(this.dblClickAction, d), c.consume())
+    }))
+};
+mxEditor.prototype.installUndoHandler = function(a) {
+    var b = mxUtils.bind(this, function(a, b) {
+        var e = b.getProperty("edit");
+        this.undoManager.undoableEditHappened(e)
+    });
+    a.getModel().addListener(mxEvent.UNDO, b);
+    a.getView().addListener(mxEvent.UNDO, b);
+    b = function(b, d) {
+        var e = d.getProperty("edit").changes;
+        a.setSelectionCells(a.getSelectionCellsForChanges(e))
+    };
+    this.undoManager.addListener(mxEvent.UNDO, b);
+    this.undoManager.addListener(mxEvent.REDO, b)
+};
+mxEditor.prototype.installDrillHandler = function(a) {
+    var b = mxUtils.bind(this, function(a) {
+        this.fireEvent(new mxEventObject(mxEvent.ROOT))
+    });
+    a.getView().addListener(mxEvent.DOWN, b);
+    a.getView().addListener(mxEvent.UP, b)
+};
+mxEditor.prototype.installChangeHandler = function(a) {
+    var b = mxUtils.bind(this, function(b, d) {
+        this.setModified(!0);
+        !0 == this.validating && a.validateGraph();
+        for (var e = d.getProperty("edit").changes, f = 0; f < e.length; f++) {
+            var g = e[f];
+            if (g instanceof mxRootChange || g instanceof mxValueChange && g.cell == this.graph.model.root || g instanceof mxCellAttributeChange && g.cell == this.graph.model.root) {
+                this.fireEvent(new mxEventObject(mxEvent.ROOT));
+                break
+            }
+        }
+    });
+    a.getModel().addListener(mxEvent.CHANGE, b)
+};
+mxEditor.prototype.installInsertHandler = function(a) {
+    var b = this;
+    a.addMouseListener({
+        mouseDown: function(a, d) {
+            if (null != b.insertFunction && !d.isPopupTrigger() && (b.forcedInserting || null == d.getState())) b.graph.clearSelection(), b.insertFunction(d.getEvent(), d.getCell()), this.isActive = !0, d.consume()
+        },
+        mouseMove: function(a, b) {
+            this.isActive && b.consume()
+        },
+        mouseUp: function(a, b) {
+            this.isActive && (this.isActive = !1, b.consume())
+        }
+    })
+};
+mxEditor.prototype.createDiagramLayout = function() {
+    var a = this.graph.gridSize,
+        b = new mxStackLayout(this.graph, !this.horizontalFlow, this.swimlaneSpacing, 2 * a, 2 * a);
+    b.isVertexIgnored = function(a) {
+        return !b.graph.isSwimlane(a)
+    };
+    return b
+};
+mxEditor.prototype.createSwimlaneLayout = function() {
+    return new mxCompactTreeLayout(this.graph, this.horizontalFlow)
+};
+mxEditor.prototype.createToolbar = function() {
+    return new mxDefaultToolbar(null, this)
+};
+mxEditor.prototype.setToolbarContainer = function(a) {
+    this.toolbar.init(a);
+    mxClient.IS_QUIRKS && new mxDivResizer(a)
+};
+mxEditor.prototype.setStatusContainer = function(a) {
+    null == this.status && (this.status = a, this.addListener(mxEvent.SAVE, mxUtils.bind(this, function() {
+        var a = (new Date).toLocaleString();
+        this.setStatus((mxResources.get(this.lastSavedResource) || this.lastSavedResource) + ": " + a)
+    })), this.addListener(mxEvent.OPEN, mxUtils.bind(this, function() {
+        this.setStatus((mxResources.get(this.currentFileResource) || this.currentFileResource) + ": " + this.filename)
+    })), mxClient.IS_QUIRKS && new mxDivResizer(a))
+};
+mxEditor.prototype.setStatus = function(a) {
+    null != this.status && null != a && (this.status.innerHTML = a)
+};
+mxEditor.prototype.setTitleContainer = function(a) {
+    this.addListener(mxEvent.ROOT, mxUtils.bind(this, function(b) {
+        a.innerHTML = this.getTitle()
+    }));
+    mxClient.IS_QUIRKS && new mxDivResizer(a)
+};
+mxEditor.prototype.treeLayout = function(a, b) {
+    null != a && (new mxCompactTreeLayout(this.graph, b)).execute(a)
+};
+mxEditor.prototype.getTitle = function() {
+    for (var a = "", b = this.graph, c = b.getCurrentRoot(); null != c && null != b.getModel().getParent(b.getModel().getParent(c));) b.isValidRoot(c) && (a = " \x3e " + b.convertValueToString(c) + a), c = b.getModel().getParent(c);
+    return this.getRootTitle() + a
+};
+mxEditor.prototype.getRootTitle = function() {
+    var a = this.graph.getModel().getRoot();
+    return this.graph.convertValueToString(a)
+};
+mxEditor.prototype.undo = function() {
+    this.undoManager.undo()
+};
+mxEditor.prototype.redo = function() {
+    this.undoManager.redo()
+};
+mxEditor.prototype.groupCells = function() {
+    var a = null != this.groupBorderSize ? this.groupBorderSize : this.graph.gridSize;
+    return this.graph.groupCells(this.createGroup(), a)
+};
+mxEditor.prototype.createGroup = function() {
+    return this.graph.getModel().cloneCell(this.defaultGroup)
+};
+mxEditor.prototype.open = function(a) {
+    if (null != a) {
+        var b = mxUtils.load(a).getXml();
+        this.readGraphModel(b.documentElement);
+        this.filename = a;
+        this.fireEvent(new mxEventObject(mxEvent.OPEN, "filename", a))
+    }
+};
+mxEditor.prototype.readGraphModel = function(a) {
+    (new mxCodec(a.ownerDocument)).decode(a, this.graph.getModel());
+    this.resetHistory()
+};
+mxEditor.prototype.save = function(a, b) {
+    a = a || this.getUrlPost();
+    if (null != a && 0 < a.length) {
+        var c = this.writeGraphModel(b);
+        this.postDiagram(a, c);
+        this.setModified(!1)
+    }
+    this.fireEvent(new mxEventObject(mxEvent.SAVE, "url", a))
+};
+mxEditor.prototype.postDiagram = function(a, b) {
+    this.escapePostData && (b = encodeURIComponent(b));
+    mxUtils.post(a, this.postParameterName + "\x3d" + b, mxUtils.bind(this, function(c) {
+        this.fireEvent(new mxEventObject(mxEvent.POST, "request", c, "url", a, "data", b))
+    }))
+};
+mxEditor.prototype.writeGraphModel = function(a) {
+    a = null != a ? a : this.linefeed;
+    var b = (new mxCodec).encode(this.graph.getModel());
+    return mxUtils.getXml(b, a)
+};
+mxEditor.prototype.getUrlPost = function() {
+    return this.urlPost
+};
+mxEditor.prototype.getUrlImage = function() {
+    return this.urlImage
+};
+mxEditor.prototype.connect = function(a, b, c, d) {
+    var e = null;
+    mxClient.IS_LOCAL || (e = new mxSession(this.graph.getModel(), a, b, c), e.addListener(mxEvent.RECEIVE, mxUtils.bind(this, function(a, b) {
+        null != b.getProperty("node").getAttribute("namespace") && this.resetHistory()
+    })), e.addListener(mxEvent.DISCONNECT, d), e.addListener(mxEvent.CONNECT, d), e.addListener(mxEvent.NOTIFY, d), e.addListener(mxEvent.GET, d), e.start());
+    return e
+};
+mxEditor.prototype.swapStyles = function(a, b) {
+    var c = this.graph.getStylesheet().styles[b];
+    this.graph.getView().getStylesheet().putCellStyle(b, this.graph.getStylesheet().styles[a]);
+    this.graph.getStylesheet().putCellStyle(a, c);
+    this.graph.refresh()
+};
+mxEditor.prototype.showProperties = function(a) {
+    a = a || this.graph.getSelectionCell();
+    null == a && (a = this.graph.getCurrentRoot(), null == a && (a = this.graph.getModel().getRoot()));
+    if (null != a) {
+        this.graph.stopEditing(!0);
+        var b = mxUtils.getOffset(this.graph.container),
+            c = b.x + 10,
+            b = b.y;
+        if (null != this.properties && !this.movePropertiesDialog) c = this.properties.getX(), b = this.properties.getY();
+        else {
+            var d = this.graph.getCellBounds(a);
+            null != d && (c += d.x + Math.min(200, d.width), b += d.y)
+        }
+        this.hideProperties();
+        a = this.createProperties(a);
+        null != a && (this.properties = new mxWindow(mxResources.get(this.propertiesResource) || this.propertiesResource, a, c, b, this.propertiesWidth, this.propertiesHeight, !1), this.properties.setVisible(!0))
+    }
+};
+mxEditor.prototype.isPropertiesVisible = function() {
+    return null != this.properties
+};
+mxEditor.prototype.createProperties = function(a) {
+    var b = this.graph.getModel(),
+        c = b.getValue(a);
+    if (mxUtils.isNode(c)) {
+        var d = new mxForm("properties");
+        d.addText("ID", a.getId()).setAttribute("readonly", "true");
+        var e = null,
+            f = null,
+            g = null,
+            h = null,
+            k = null;
+        b.isVertex(a) && (e = b.getGeometry(a), null != e && (f = d.addText("top", e.y), g = d.addText("left", e.x), h = d.addText("width", e.width), k = d.addText("height", e.height)));
+        for (var l = b.getStyle(a), m = d.addText("Style", l || ""), n = c.attributes, p = [], c = 0; c < n.length; c++) p[c] = d.addTextarea(n[c].nodeName,
+            n[c].nodeValue, "label" == n[c].nodeName ? 4 : 2);
+        c = mxUtils.bind(this, function() {
+            this.hideProperties();
+            b.beginUpdate();
+            try {
+                null != e && (e = e.clone(), e.x = parseFloat(g.value), e.y = parseFloat(f.value), e.width = parseFloat(h.value), e.height = parseFloat(k.value), b.setGeometry(a, e));
+                0 < m.value.length ? b.setStyle(a, m.value) : b.setStyle(a, null);
+                for (var c = 0; c < n.length; c++) {
+                    var d = new mxCellAttributeChange(a, n[c].nodeName, p[c].value);
+                    b.execute(d)
+                }
+                this.graph.isAutoSizeCell(a) && this.graph.updateCellSize(a)
+            } finally {
+                b.endUpdate()
+            }
+        });
+        l = mxUtils.bind(this, function() {
+            this.hideProperties()
+        });
+        d.addButtons(c, l);
+        return d.table
+    }
+    return null
+};
+mxEditor.prototype.hideProperties = function() {
+    null != this.properties && (this.properties.destroy(), this.properties = null)
+};
+mxEditor.prototype.showTasks = function() {
+    if (null == this.tasks) {
+        var a = document.createElement("div");
+        a.style.padding = "4px";
+        a.style.paddingLeft = "20px";
+        var b = document.body.clientWidth,
+            b = new mxWindow(mxResources.get(this.tasksResource) || this.tasksResource, a, b - 220, this.tasksTop, 200);
+        b.setClosable(!0);
+        b.destroyOnClose = !1;
+        var c = mxUtils.bind(this, function(b) {
+            mxEvent.release(a);
+            a.innerHTML = "";
+            this.createTasks(a)
+        });
+        this.graph.getModel().addListener(mxEvent.CHANGE, c);
+        this.graph.getSelectionModel().addListener(mxEvent.CHANGE,
+            c);
+        this.graph.addListener(mxEvent.ROOT, c);
+        null != this.tasksWindowImage && b.setImage(this.tasksWindowImage);
+        this.tasks = b;
+        this.createTasks(a)
+    }
+    this.tasks.setVisible(!0)
+};
+mxEditor.prototype.refreshTasks = function(a) {
+    null != this.tasks && (a = this.tasks.content, mxEvent.release(a), a.innerHTML = "", this.createTasks(a))
+};
+mxEditor.prototype.createTasks = function(a) {};
+mxEditor.prototype.showHelp = function(a) {
+    if (null == this.help) {
+        var b = document.createElement("iframe");
+        b.setAttribute("src", mxResources.get("urlHelp") || this.urlHelp);
+        b.setAttribute("height", "100%");
+        b.setAttribute("width", "100%");
+        b.setAttribute("frameBorder", "0");
+        b.style.backgroundColor = "white";
+        a = document.body.clientWidth;
+        var c = document.body.clientHeight || document.documentElement.clientHeight,
+            d = new mxWindow(mxResources.get(this.helpResource) || this.helpResource, b, (a - this.helpWidth) / 2, (c - this.helpHeight) /
+                3, this.helpWidth, this.helpHeight);
+        d.setMaximizable(!0);
+        d.setClosable(!0);
+        d.destroyOnClose = !1;
+        d.setResizable(!0);
+        null != this.helpWindowImage && d.setImage(this.helpWindowImage);
+        mxClient.IS_NS && (a = function(a) {
+            b.setAttribute("height", d.div.offsetHeight - 26 + "px")
+        }, d.addListener(mxEvent.RESIZE_END, a), d.addListener(mxEvent.MAXIMIZE, a), d.addListener(mxEvent.NORMALIZE, a), d.addListener(mxEvent.SHOW, a));
+        this.help = d
+    }
+    this.help.setVisible(!0)
+};
+mxEditor.prototype.showOutline = function() {
+    if (null == this.outline) {
+        var a = document.createElement("div");
+        a.style.overflow = "hidden";
+        a.style.width = "100%";
+        a.style.height = "100%";
+        a.style.background = "white";
+        a.style.cursor = "move";
+        var b = new mxWindow(mxResources.get(this.outlineResource) || this.outlineResource, a, 600, 480, 200, 200, !1),
+            c = new mxOutline(this.graph, a);
+        b.setClosable(!0);
+        b.setResizable(!0);
+        b.destroyOnClose = !1;
+        b.addListener(mxEvent.RESIZE_END, function() {
+            c.update()
+        });
+        this.outline = b;
+        this.outline.outline = c
+    }
+    this.outline.setVisible(!0);
+    this.outline.outline.update(!0)
+};
+mxEditor.prototype.setMode = function(a) {
+    "select" == a ? (this.graph.panningHandler.useLeftButtonForPanning = !1, this.graph.setConnectable(!1)) : "connect" == a ? (this.graph.panningHandler.useLeftButtonForPanning = !1, this.graph.setConnectable(!0)) : "pan" == a && (this.graph.panningHandler.useLeftButtonForPanning = !0, this.graph.setConnectable(!1))
+};
+mxEditor.prototype.createPopupMenu = function(a, b, c) {
+    this.popupHandler.createMenu(this, a, b, c)
+};
+mxEditor.prototype.createEdge = function(a, b) {
+    var c = null;
+    if (null != this.defaultEdge) c = this.graph.getModel().cloneCell(this.defaultEdge);
+    else {
+        c = new mxCell("");
+        c.setEdge(!0);
+        var d = new mxGeometry;
+        d.relative = !0;
+        c.setGeometry(d)
+    }
+    d = this.getEdgeStyle();
+    null != d && c.setStyle(d);
+    return c
+};
+mxEditor.prototype.getEdgeStyle = function() {
+    return this.defaultEdgeStyle
+};
+mxEditor.prototype.consumeCycleAttribute = function(a) {
+    return null != this.cycleAttributeValues && 0 < this.cycleAttributeValues.length && this.graph.isSwimlane(a) ? this.cycleAttributeValues[this.cycleAttributeIndex++ % this.cycleAttributeValues.length] : null
+};
+mxEditor.prototype.cycleAttribute = function(a) {
+    if (null != this.cycleAttributeName) {
+        var b = this.consumeCycleAttribute(a);
+        null != b && a.setStyle(a.getStyle() + ";" + this.cycleAttributeName + "\x3d" + b)
+    }
+};
+mxEditor.prototype.addVertex = function(a, b, c, d) {
+    for (var e = this.graph.getModel(); null != a && !this.graph.isValidDropTarget(a);) a = e.getParent(a);
+    a = null != a ? a : this.graph.getSwimlaneAt(c, d);
+    var f = this.graph.getView().scale,
+        g = e.getGeometry(b),
+        h = e.getGeometry(a);
+    if (this.graph.isSwimlane(b) && !this.graph.swimlaneNesting) a = null;
+    else {
+        if (null == a && this.swimlaneRequired) return null;
+        if (null != a && null != h) {
+            var k = this.graph.getView().getState(a);
+            if (null != k) {
+                if (c -= k.origin.x * f, d -= k.origin.y * f, this.graph.isConstrainedMoving) {
+                    var h =
+                        g.width,
+                        l = g.height,
+                        m = k.x + k.width;
+                    c + h > m && (c -= c + h - m);
+                    m = k.y + k.height;
+                    d + l > m && (d -= d + l - m)
+                }
+            } else null != h && (c -= h.x * f, d -= h.y * f)
+        }
+    }
+    g = g.clone();
+    g.x = this.graph.snap(c / f - this.graph.getView().translate.x - this.graph.gridSize / 2);
+    g.y = this.graph.snap(d / f - this.graph.getView().translate.y - this.graph.gridSize / 2);
+    b.setGeometry(g);
+    null == a && (a = this.graph.getDefaultParent());
+    this.cycleAttribute(b);
+    this.fireEvent(new mxEventObject(mxEvent.BEFORE_ADD_VERTEX, "vertex", b, "parent", a));
+    e.beginUpdate();
+    try {
+        b = this.graph.addCell(b,
+            a), null != b && (this.graph.constrainChild(b), this.fireEvent(new mxEventObject(mxEvent.ADD_VERTEX, "vertex", b)))
+    } finally {
+        e.endUpdate()
+    }
+    null != b && (this.graph.setSelectionCell(b), this.graph.scrollCellToVisible(b), this.fireEvent(new mxEventObject(mxEvent.AFTER_ADD_VERTEX, "vertex", b)));
+    return b
+};
+mxEditor.prototype.destroy = function() {
+    this.destroyed || (this.destroyed = !0, null != this.tasks && this.tasks.destroy(), null != this.outline && this.outline.destroy(), null != this.properties && this.properties.destroy(), null != this.keyHandler && this.keyHandler.destroy(), null != this.rubberband && this.rubberband.destroy(), null != this.toolbar && this.toolbar.destroy(), null != this.graph && this.graph.destroy(), this.templates = this.status = null)
+};
+var mxCodecRegistry = {
+    codecs: [],
+    aliases: [],
+    register: function(a) {
+        if (null != a) {
+            var b = a.getName();
+            mxCodecRegistry.codecs[b] = a;
+            var c = mxUtils.getFunctionName(a.template.constructor);
+            c != b && mxCodecRegistry.addAlias(c, b)
+        }
+        return a
+    },
+    addAlias: function(a, b) {
+        mxCodecRegistry.aliases[a] = b
+    },
+    getCodec: function(a) {
+        var b = null;
+        if (null != a) {
+            var b = mxUtils.getFunctionName(a),
+                c = mxCodecRegistry.aliases[b];
+            null != c && (b = c);
+            b = mxCodecRegistry.codecs[b];
+            if (null == b) try {
+                b = new mxObjectCodec(new a), mxCodecRegistry.register(b)
+            } catch (d) {}
+        }
+        return b
+    }
+};
+
+function mxCodec(a) {
+    this.document = a || mxUtils.createXmlDocument();
+    this.objects = []
+}
+mxCodec.prototype.document = null;
+mxCodec.prototype.objects = null;
+mxCodec.prototype.encodeDefaults = !1;
+mxCodec.prototype.putObject = function(a, b) {
+    return this.objects[a] = b
+};
+mxCodec.prototype.getObject = function(a) {
+    var b = null;
+    null != a && (b = this.objects[a], null == b && (b = this.lookup(a), null == b && (a = this.getElementById(a), null != a && (b = this.decode(a)))));
+    return b
+};
+mxCodec.prototype.lookup = function(a) {
+    return null
+};
+mxCodec.prototype.getElementById = function(a, b) {
+    return mxUtils.findNodeByAttribute(this.document.documentElement, null != b ? b : "id", a)
+};
+mxCodec.prototype.getId = function(a) {
+    var b = null;
+    null != a && (b = this.reference(a), null == b && a instanceof mxCell && (b = a.getId(), null == b && (b = mxCellPath.create(a), 0 == b.length && (b = "root"))));
+    return b
+};
+mxCodec.prototype.reference = function(a) {
+    return null
+};
+mxCodec.prototype.encode = function(a) {
+    var b = null;
+    if (null != a && null != a.constructor) {
+        var c = mxCodecRegistry.getCodec(a.constructor);
+        null != c ? b = c.encode(this, a) : mxUtils.isNode(a) ? b = mxClient.IS_IE ? a.cloneNode(!0) : this.document.importNode(a, !0) : mxLog.warn("mxCodec.encode: No codec for " + mxUtils.getFunctionName(a.constructor))
+    }
+    return b
+};
+mxCodec.prototype.decode = function(a, b) {
+    var c = null;
+    if (null != a && a.nodeType == mxConstants.NODETYPE_ELEMENT) {
+        var d = null;
+        try {
+            d = eval(a.nodeName)
+        } catch (e) {}
+        try {
+            var f = mxCodecRegistry.getCodec(d);
+            null != f ? c = f.decode(this, a, b) : (c = a.cloneNode(!0), c.removeAttribute("as"))
+        } catch (g) {
+            mxLog.debug("Cannot decode " + a.nodeName + ": " + g.message)
+        }
+    }
+    return c
+};
+mxCodec.prototype.encodeCell = function(a, b, c) {
+    b.appendChild(this.encode(a));
+    if (null == c || c) {
+        c = a.getChildCount();
+        for (var d = 0; d < c; d++) this.encodeCell(a.getChildAt(d), b)
+    }
+};
+mxCodec.prototype.isCellCodec = function(a) {
+    return null != a && "function" == typeof a.isCellCodec ? a.isCellCodec() : !1
+};
+mxCodec.prototype.decodeCell = function(a, b) {
+    b = null != b ? b : !0;
+    var c = null;
+    if (null != a && a.nodeType == mxConstants.NODETYPE_ELEMENT) {
+        c = mxCodecRegistry.getCodec(a.nodeName);
+        if (!this.isCellCodec(c))
+            for (var d = a.firstChild; null != d && !this.isCellCodec(c);) c = mxCodecRegistry.getCodec(d.nodeName), d = d.nextSibling;
+        this.isCellCodec(c) || (c = mxCodecRegistry.getCodec(mxCell));
+        c = c.decode(this, a);
+        b && this.insertIntoGraph(c)
+    }
+    return c
+};
+mxCodec.prototype.insertIntoGraph = function(a) {
+    var b = a.parent,
+        c = a.getTerminal(!0),
+        d = a.getTerminal(!1);
+    a.setTerminal(null, !1);
+    a.setTerminal(null, !0);
+    a.parent = null;
+    null != b && b.insert(a);
+    null != c && c.insertEdge(a, !0);
+    null != d && d.insertEdge(a, !1)
+};
+mxCodec.prototype.setAttribute = function(a, b, c) {
+    null != b && null != c && a.setAttribute(b, c)
+};
+
+function mxObjectCodec(a, b, c, d) {
+    this.template = a;
+    this.exclude = null != b ? b : [];
+    this.idrefs = null != c ? c : [];
+    this.mapping = null != d ? d : [];
+    this.reverse = {};
+    for (var e in this.mapping) this.reverse[this.mapping[e]] = e
+}
+mxObjectCodec.prototype.template = null;
+mxObjectCodec.prototype.exclude = null;
+mxObjectCodec.prototype.idrefs = null;
+mxObjectCodec.prototype.mapping = null;
+mxObjectCodec.prototype.reverse = null;
+mxObjectCodec.prototype.getName = function() {
+    return mxUtils.getFunctionName(this.template.constructor)
+};
+mxObjectCodec.prototype.cloneTemplate = function() {
+    return new this.template.constructor
+};
+mxObjectCodec.prototype.getFieldName = function(a) {
+    if (null != a) {
+        var b = this.reverse[a];
+        null != b && (a = b)
+    }
+    return a
+};
+mxObjectCodec.prototype.getAttributeName = function(a) {
+    if (null != a) {
+        var b = this.mapping[a];
+        null != b && (a = b)
+    }
+    return a
+};
+mxObjectCodec.prototype.isExcluded = function(a, b, c, d) {
+    return b == mxObjectIdentity.FIELD_NAME || 0 <= mxUtils.indexOf(this.exclude, b)
+};
+mxObjectCodec.prototype.isReference = function(a, b, c, d) {
+    return 0 <= mxUtils.indexOf(this.idrefs, b)
+};
+mxObjectCodec.prototype.encode = function(a, b) {
+    var c = a.document.createElement(this.getName());
+    b = this.beforeEncode(a, b, c);
+    this.encodeObject(a, b, c);
+    return this.afterEncode(a, b, c)
+};
+mxObjectCodec.prototype.encodeObject = function(a, b, c) {
+    a.setAttribute(c, "id", a.getId(b));
+    for (var d in b) {
+        var e = d,
+            f = b[e];
+        null != f && !this.isExcluded(b, e, f, !0) && (mxUtils.isNumeric(e) && (e = null), this.encodeValue(a, b, e, f, c))
+    }
+};
+mxObjectCodec.prototype.encodeValue = function(a, b, c, d, e) {
+    if (null != d) {
+        if (this.isReference(b, c, d, !0)) {
+            var f = a.getId(d);
+            if (null == f) {
+                mxLog.warn("mxObjectCodec.encode: No ID for " + this.getName() + "." + c + "\x3d" + d);
+                return
+            }
+            d = f
+        }
+        f = this.template[c];
+        if (null == c || a.encodeDefaults || f != d) c = this.getAttributeName(c), this.writeAttribute(a, b, c, d, e)
+    }
+};
+mxObjectCodec.prototype.writeAttribute = function(a, b, c, d, e) {
+    "object" != typeof d ? this.writePrimitiveAttribute(a, b, c, d, e) : this.writeComplexAttribute(a, b, c, d, e)
+};
+mxObjectCodec.prototype.writePrimitiveAttribute = function(a, b, c, d, e) {
+    d = this.convertValueToXml(d);
+    null == c ? (b = a.document.createElement("add"), "function" == typeof d ? b.appendChild(a.document.createTextNode(d)) : a.setAttribute(b, "value", d), e.appendChild(b)) : "function" != typeof d && a.setAttribute(e, c, d)
+};
+mxObjectCodec.prototype.writeComplexAttribute = function(a, b, c, d, e) {
+    a = a.encode(d);
+    null != a ? (null != c && a.setAttribute("as", c), e.appendChild(a)) : mxLog.warn("mxObjectCodec.encode: No node for " + this.getName() + "." + c + ": " + d)
+};
+mxObjectCodec.prototype.convertValueToXml = function(a) {
+    if ("undefined" == typeof a.length && (!0 == a || !1 == a)) a = !0 == a ? "1" : "0";
+    return a
+};
+mxObjectCodec.prototype.convertValueFromXml = function(a) {
+    mxUtils.isNumeric(a) && (a = parseFloat(a));
+    return a
+};
+mxObjectCodec.prototype.beforeEncode = function(a, b, c) {
+    return b
+};
+mxObjectCodec.prototype.afterEncode = function(a, b, c) {
+    return c
+};
+mxObjectCodec.prototype.decode = function(a, b, c) {
+    var d = b.getAttribute("id"),
+        e = a.objects[d];
+    null == e && (e = c || this.cloneTemplate(), null != d && a.putObject(d, e));
+    b = this.beforeDecode(a, b, e);
+    this.decodeNode(a, b, e);
+    return this.afterDecode(a, b, e)
+};
+mxObjectCodec.prototype.decodeNode = function(a, b, c) {
+    null != b && (this.decodeAttributes(a, b, c), this.decodeChildren(a, b, c))
+};
+mxObjectCodec.prototype.decodeAttributes = function(a, b, c) {
+    b = b.attributes;
+    if (null != b)
+        for (var d = 0; d < b.length; d++) this.decodeAttribute(a, b[d], c)
+};
+mxObjectCodec.prototype.decodeAttribute = function(a, b, c) {
+    var d = b.nodeName;
+    if ("as" != d && "id" != d) {
+        b = this.convertValueFromXml(b.nodeValue);
+        var e = this.getFieldName(d);
+        if (this.isReference(c, e, b, !1)) {
+            a = a.getObject(b);
+            if (null == a) {
+                mxLog.warn("mxObjectCodec.decode: No object for " + this.getName() + "." + d + "\x3d" + b);
+                return
+            }
+            b = a
+        }
+        this.isExcluded(c, d, b, !1) || (c[d] = b)
+    }
+};
+mxObjectCodec.prototype.decodeChildren = function(a, b, c) {
+    for (b = b.firstChild; null != b;) {
+        var d = b.nextSibling;
+        b.nodeType == mxConstants.NODETYPE_ELEMENT && !this.processInclude(a, b, c) && this.decodeChild(a, b, c);
+        b = d
+    }
+};
+mxObjectCodec.prototype.decodeChild = function(a, b, c) {
+    var d = this.getFieldName(b.getAttribute("as"));
+    if (null == d || !this.isExcluded(c, d, b, !1)) {
+        var e = this.getFieldTemplate(c, d, b),
+            f = null;
+        "add" == b.nodeName ? (f = b.getAttribute("value"), null == f && (f = mxUtils.eval(mxUtils.getTextContent(b)))) : f = a.decode(b, e);
+        this.addObjectValue(c, d, f, e)
+    }
+};
+mxObjectCodec.prototype.getFieldTemplate = function(a, b, c) {
+    a = a[b];
+    a instanceof Array && 0 < a.length && (a = null);
+    return a
+};
+mxObjectCodec.prototype.addObjectValue = function(a, b, c, d) {
+    null != c && c != d && (null != b && 0 < b.length ? a[b] = c : a.push(c))
+};
+mxObjectCodec.prototype.processInclude = function(a, b, c) {
+    if ("include" == b.nodeName) {
+        b = b.getAttribute("name");
+        if (null != b) try {
+            var d = mxUtils.load(b).getDocumentElement();
+            null != d && a.decode(d, c)
+        } catch (e) {}
+        return !0
+    }
+    return !1
+};
+mxObjectCodec.prototype.beforeDecode = function(a, b, c) {
+    return b
+};
+mxObjectCodec.prototype.afterDecode = function(a, b, c) {
+    return c
+};
+mxCodecRegistry.register(function() {
+    var a = new mxObjectCodec(new mxCell, ["children", "edges", "overlays", "mxTransient"], ["parent", "source", "target"]);
+    a.isCellCodec = function() {
+        return !0
+    };
+    a.isExcluded = function(a, c, d, e) {
+        return mxObjectCodec.prototype.isExcluded.apply(this, arguments) || e && "value" == c && d.nodeType == mxConstants.NODETYPE_ELEMENT
+    };
+    a.afterEncode = function(a, c, d) {
+        if (null != c.value && c.value.nodeType == mxConstants.NODETYPE_ELEMENT) {
+            var e = d;
+            d = mxClient.IS_IE ? c.value.cloneNode(!0) : a.document.importNode(c.value, !0);
+            d.appendChild(e);
+            a = e.getAttribute("id");
+            d.setAttribute("id", a);
+            e.removeAttribute("id")
+        }
+        return d
+    };
+    a.beforeDecode = function(a, c, d) {
+        var e = c,
+            f = this.getName();
+        c.nodeName != f ? (e = c.getElementsByTagName(f)[0], null != e && e.parentNode == c ? (mxUtils.removeWhitespace(e, !0), mxUtils.removeWhitespace(e, !1), e.parentNode.removeChild(e)) : e = null, d.value = c.cloneNode(!0), c = d.value.getAttribute("id"), null != c && (d.setId(c), d.value.removeAttribute("id"))) : d.setId(c.getAttribute("id"));
+        if (null != e)
+            for (c = 0; c < this.idrefs.length; c++) {
+                var f =
+                    this.idrefs[c],
+                    g = e.getAttribute(f);
+                if (null != g) {
+                    e.removeAttribute(f);
+                    var h = a.objects[g] || a.lookup(g);
+                    null == h && (g = a.getElementById(g), null != g && (h = (mxCodecRegistry.codecs[g.nodeName] || this).decode(a, g)));
+                    d[f] = h
+                }
+            }
+        return e
+    };
+    return a
+}());
+mxCodecRegistry.register(function() {
+    var a = new mxObjectCodec(new mxGraphModel);
+    a.encodeObject = function(a, c, d) {
+        var e = a.document.createElement("root");
+        a.encodeCell(c.getRoot(), e);
+        d.appendChild(e)
+    };
+    a.decodeChild = function(a, c, d) {
+        "root" == c.nodeName ? this.decodeRoot(a, c, d) : mxObjectCodec.prototype.decodeChild.apply(this, arguments)
+    };
+    a.decodeRoot = function(a, c, d) {
+        var e = null;
+        for (c = c.firstChild; null != c;) {
+            var f = a.decodeCell(c);
+            null != f && null == f.getParent() && (e = f);
+            c = c.nextSibling
+        }
+        null != e && d.setRoot(e)
+    };
+    return a
+}());
+mxCodecRegistry.register(function() {
+    var a = new mxObjectCodec(new mxRootChange, ["model", "previous", "root"]);
+    a.afterEncode = function(a, c, d) {
+        a.encodeCell(c.root, d);
+        return d
+    };
+    a.beforeDecode = function(a, c, d) {
+        if (null != c.firstChild && c.firstChild.nodeType == mxConstants.NODETYPE_ELEMENT) {
+            c = c.cloneNode(!0);
+            var e = c.firstChild;
+            d.root = a.decodeCell(e, !1);
+            d = e.nextSibling;
+            e.parentNode.removeChild(e);
+            for (e = d; null != e;) d = e.nextSibling, a.decodeCell(e), e.parentNode.removeChild(e), e = d
+        }
+        return c
+    };
+    a.afterDecode = function(a, c,
+        d) {
+        d.previous = d.root;
+        return d
+    };
+    return a
+}());
+mxCodecRegistry.register(function() {
+    var a = new mxObjectCodec(new mxChildChange, ["model", "child", "previousIndex"], ["parent", "previous"]);
+    a.isReference = function(a, c, d, e) {
+        return "child" == c && (null != a.previous || !e) ? !0 : 0 <= mxUtils.indexOf(this.idrefs, c)
+    };
+    a.afterEncode = function(a, c, d) {
+        this.isReference(c, "child", c.child, !0) ? d.setAttribute("child", a.getId(c.child)) : a.encodeCell(c.child, d);
+        return d
+    };
+    a.beforeDecode = function(a, c, d) {
+        if (null != c.firstChild && c.firstChild.nodeType == mxConstants.NODETYPE_ELEMENT) {
+            c = c.cloneNode(!0);
+            var e = c.firstChild;
+            d.child = a.decodeCell(e, !1);
+            d = e.nextSibling;
+            e.parentNode.removeChild(e);
+            for (e = d; null != e;) {
+                d = e.nextSibling;
+                if (e.nodeType == mxConstants.NODETYPE_ELEMENT) {
+                    var f = e.getAttribute("id");
+                    null == a.lookup(f) && a.decodeCell(e)
+                }
+                e.parentNode.removeChild(e);
+                e = d
+            }
+        } else e = c.getAttribute("child"), d.child = a.getObject(e);
+        return c
+    };
+    a.afterDecode = function(a, c, d) {
+        d.child.parent = d.previous;
+        d.previous = d.parent;
+        d.previousIndex = d.index;
+        return d
+    };
+    return a
+}());
+mxCodecRegistry.register(function() {
+    var a = new mxObjectCodec(new mxTerminalChange, ["model", "previous"], ["cell", "terminal"]);
+    a.afterDecode = function(a, c, d) {
+        d.previous = d.terminal;
+        return d
+    };
+    return a
+}());
+var mxGenericChangeCodec = function(a, b) {
+    var c = new mxObjectCodec(a, ["model", "previous"], ["cell"]);
+    c.afterDecode = function(a, c, f) {
+        mxUtils.isNode(f.cell) && (f.cell = a.decodeCell(f.cell, !1));
+        f.previous = f[b];
+        return f
+    };
+    return c
+};
+mxCodecRegistry.register(mxGenericChangeCodec(new mxValueChange, "value"));
+mxCodecRegistry.register(mxGenericChangeCodec(new mxStyleChange, "style"));
+mxCodecRegistry.register(mxGenericChangeCodec(new mxGeometryChange, "geometry"));
+mxCodecRegistry.register(mxGenericChangeCodec(new mxCollapseChange, "collapsed"));
+mxCodecRegistry.register(mxGenericChangeCodec(new mxVisibleChange, "visible"));
+mxCodecRegistry.register(mxGenericChangeCodec(new mxCellAttributeChange, "value"));
+mxCodecRegistry.register(function() {
+    return new mxObjectCodec(new mxGraph, "graphListeners eventListeners view container cellRenderer editor selection".split(" "))
+}());
+mxCodecRegistry.register(function() {
+    var a = new mxObjectCodec(new mxGraphView);
+    a.encode = function(a, c) {
+        return this.encodeCell(a, c, c.graph.getModel().getRoot())
+    };
+    a.encodeCell = function(a, c, d) {
+        var e = c.graph.getModel(),
+            f = c.getState(d),
+            g = e.getParent(d);
+        if (null == g || null != f) {
+            var h = e.getChildCount(d),
+                k = c.graph.getCellGeometry(d),
+                l = null;
+            g == e.getRoot() ? l = "layer" : null == g ? l = "graph" : e.isEdge(d) ? l = "edge" : 0 < h && null != k ? l = "group" : e.isVertex(d) && (l = "vertex");
+            if (null != l) {
+                var m = a.document.createElement(l);
+                null != c.graph.getLabel(d) &&
+                    (m.setAttribute("label", c.graph.getLabel(d)), c.graph.isHtmlLabel(d) && m.setAttribute("html", !0));
+                if (null == g) {
+                    var n = c.getGraphBounds();
+                    null != n && (m.setAttribute("x", Math.round(n.x)), m.setAttribute("y", Math.round(n.y)), m.setAttribute("width", Math.round(n.width)), m.setAttribute("height", Math.round(n.height)));
+                    m.setAttribute("scale", c.scale)
+                } else if (null != f && null != k) {
+                    for (n in f.style) g = f.style[n], "function" == typeof g && "object" == typeof g && (g = mxStyleRegistry.getName(g)), null != g && ("function" != typeof g && "object" !=
+                        typeof g) && m.setAttribute(n, g);
+                    g = f.absolutePoints;
+                    if (null != g && 0 < g.length) {
+                        k = Math.round(g[0].x) + "," + Math.round(g[0].y);
+                        for (n = 1; n < g.length; n++) k += " " + Math.round(g[n].x) + "," + Math.round(g[n].y);
+                        m.setAttribute("points", k)
+                    } else m.setAttribute("x", Math.round(f.x)), m.setAttribute("y", Math.round(f.y)), m.setAttribute("width", Math.round(f.width)), m.setAttribute("height", Math.round(f.height));
+                    n = f.absoluteOffset;
+                    null != n && (0 != n.x && m.setAttribute("dx", Math.round(n.x)), 0 != n.y && m.setAttribute("dy", Math.round(n.y)))
+                }
+                for (n =
+                    0; n < h; n++) f = this.encodeCell(a, c, e.getChildAt(d, n)), null != f && m.appendChild(f)
+            }
+        }
+        return m
+    };
+    return a
+}());
+mxCodecRegistry.register(function() {
+    var a = new mxObjectCodec(new mxStylesheet);
+    a.encode = function(a, c) {
+        var d = a.document.createElement(this.getName()),
+            e;
+        for (e in c.styles) {
+            var f = c.styles[e],
+                g = a.document.createElement("add");
+            if (null != e) {
+                g.setAttribute("as", e);
+                for (var h in f) {
+                    var k = this.getStringValue(h, f[h]);
+                    if (null != k) {
+                        var l = a.document.createElement("add");
+                        l.setAttribute("value", k);
+                        l.setAttribute("as", h);
+                        g.appendChild(l)
+                    }
+                }
+                0 < g.childNodes.length && d.appendChild(g)
+            }
+        }
+        return d
+    };
+    a.getStringValue = function(a,
+        c) {
+        var d = typeof c;
+        "function" == d ? c = mxStyleRegistry.getName(style[j]) : "object" == d && (c = null);
+        return c
+    };
+    a.decode = function(a, c, d) {
+        d = d || new this.template.constructor;
+        var e = c.getAttribute("id");
+        null != e && (a.objects[e] = d);
+        for (c = c.firstChild; null != c;) {
+            if (!this.processInclude(a, c, d) && "add" == c.nodeName && (e = c.getAttribute("as"), null != e)) {
+                var f = c.getAttribute("extend"),
+                    g = null != f ? mxUtils.clone(d.styles[f]) : null;
+                null == g && (null != f && mxLog.warn("mxStylesheetCodec.decode: stylesheet " + f + " not found to extend"), g = {});
+                for (f = c.firstChild; null != f;) {
+                    if (f.nodeType == mxConstants.NODETYPE_ELEMENT) {
+                        var h = f.getAttribute("as");
+                        if ("add" == f.nodeName) {
+                            var k = mxUtils.getTextContent(f),
+                                l = null;
+                            null != k && 0 < k.length ? l = mxUtils.eval(k) : (l = f.getAttribute("value"), mxUtils.isNumeric(l) && (l = parseFloat(l)));
+                            null != l && (g[h] = l)
+                        } else "remove" == f.nodeName && delete g[h]
+                    }
+                    f = f.nextSibling
+                }
+                d.putCellStyle(e, g)
+            }
+            c = c.nextSibling
+        }
+        return d
+    };
+    return a
+}());
+mxCodecRegistry.register(function() {
+    var a = new mxObjectCodec(new mxDefaultKeyHandler);
+    a.encode = function(a, c) {
+        return null
+    };
+    a.decode = function(a, c, d) {
+        if (null != d)
+            for (c = c.firstChild; null != c;) {
+                if (!this.processInclude(a, c, d) && "add" == c.nodeName) {
+                    var e = c.getAttribute("as"),
+                        f = c.getAttribute("action"),
+                        g = c.getAttribute("control");
+                    d.bindAction(e, f, g)
+                }
+                c = c.nextSibling
+            }
+        return d
+    };
+    return a
+}());
+mxCodecRegistry.register(function() {
+    var a = new mxObjectCodec(new mxDefaultToolbar);
+    a.encode = function(a, c) {
+        return null
+    };
+    a.decode = function(a, c, d) {
+        if (null != d) {
+            var e = d.editor;
+            for (c = c.firstChild; null != c;) {
+                if (c.nodeType == mxConstants.NODETYPE_ELEMENT && !this.processInclude(a, c, d))
+                    if ("separator" == c.nodeName) d.addSeparator();
+                    else if ("br" == c.nodeName) d.toolbar.addBreak();
+                else if ("hr" == c.nodeName) d.toolbar.addLine();
+                else if ("add" == c.nodeName) {
+                    var f = c.getAttribute("as"),
+                        f = mxResources.get(f) || f,
+                        g = c.getAttribute("icon"),
+                        h = c.getAttribute("pressedIcon"),
+                        k = c.getAttribute("action"),
+                        l = c.getAttribute("mode"),
+                        m = c.getAttribute("template"),
+                        n = "0" != c.getAttribute("toggle"),
+                        p = mxUtils.getTextContent(c),
+                        q = null;
+                    if (null != k) q = d.addItem(f, g, k, h);
+                    else if (null != l) var s = mxUtils.eval(p),
+                        q = d.addMode(f, g, l, h, s);
+                    else if (null != m || null != p && 0 < p.length) q = e.templates[m], m = c.getAttribute("style"), null != q && null != m && (q = q.clone(), q.setStyle(m)), m = null, null != p && 0 < p.length && (m = mxUtils.eval(p)), q = d.addPrototype(f, g, q, h, m, n);
+                    else if (h = mxUtils.getChildNodes(c),
+                        0 < h.length)
+                        if (null == g) {
+                            m = d.addActionCombo(f);
+                            for (f = 0; f < h.length; f++) n = h[f], "separator" == n.nodeName ? d.addOption(m, "---") : "add" == n.nodeName && (g = n.getAttribute("as"), n = n.getAttribute("action"), d.addActionOption(m, g, n))
+                        } else {
+                            var r = null,
+                                t = d.addPrototype(f, g, function() {
+                                    var a = e.templates[r.value];
+                                    if (null != a) {
+                                        var a = a.clone(),
+                                            b = r.options[r.selectedIndex].cellStyle;
+                                        null != b && a.setStyle(b);
+                                        return a
+                                    }
+                                    mxLog.warn("Template " + a + " not found");
+                                    return null
+                                }, null, null, n),
+                                r = d.addCombo();
+                            mxEvent.addListener(r, "change",
+                                function() {
+                                    d.toolbar.selectMode(t, function(a) {
+                                        a = mxUtils.convertPoint(e.graph.container, mxEvent.getClientX(a), mxEvent.getClientY(a));
+                                        return e.addVertex(null, s(), a.x, a.y)
+                                    });
+                                    d.toolbar.noReset = !1
+                                });
+                            for (f = 0; f < h.length; f++) n = h[f], "separator" == n.nodeName ? d.addOption(r, "---") : "add" == n.nodeName && (g = n.getAttribute("as"), p = n.getAttribute("template"), d.addOption(r, g, p || m).cellStyle = n.getAttribute("style"))
+                        }
+                    null != q && (m = c.getAttribute("id"), null != m && 0 < m.length && q.setAttribute("id", m))
+                }
+                c = c.nextSibling
+            }
+        }
+        return d
+    };
+    return a
+}());
+mxCodecRegistry.register(function() {
+    var a = new mxObjectCodec(new mxDefaultPopupMenu);
+    a.encode = function(a, c) {
+        return null
+    };
+    a.decode = function(a, c, d) {
+        var e = c.getElementsByTagName("include")[0];
+        null != e ? this.processInclude(a, e, d) : null != d && (d.config = c);
+        return d
+    };
+    return a
+}());
+mxCodecRegistry.register(function() {
+    var a = new mxObjectCodec(new mxEditor, "modified lastSnapshot ignoredChanges undoManager graphContainer toolbarContainer".split(" "));
+    a.afterDecode = function(a, c, d) {
+        a = c.getAttribute("defaultEdge");
+        null != a && (c.removeAttribute("defaultEdge"), d.defaultEdge = d.templates[a]);
+        a = c.getAttribute("defaultGroup");
+        null != a && (c.removeAttribute("defaultGroup"), d.defaultGroup = d.templates[a]);
+        return d
+    };
+    a.decodeChild = function(a, c, d) {
+        if ("Array" == c.nodeName) {
+            if ("templates" == c.getAttribute("as")) {
+                this.decodeTemplates(a,
+                    c, d);
+                return
+            }
+        } else if ("ui" == c.nodeName) {
+            this.decodeUi(a, c, d);
+            return
+        }
+        mxObjectCodec.prototype.decodeChild.apply(this, arguments)
+    };
+    a.decodeUi = function(a, c, d) {
+        for (a = c.firstChild; null != a;) {
+            if ("add" == a.nodeName) {
+                c = a.getAttribute("as");
+                var e = a.getAttribute("element"),
+                    f = a.getAttribute("style"),
+                    g = null;
+                if (null != e) g = document.getElementById(e), null != g && null != f && (g.style.cssText += ";" + f);
+                else {
+                    var e = parseInt(a.getAttribute("x")),
+                        h = parseInt(a.getAttribute("y")),
+                        k = a.getAttribute("width"),
+                        l = a.getAttribute("height"),
+                        g = document.createElement("div");
+                    g.style.cssText = f;
+                    (new mxWindow(mxResources.get(c) || c, g, e, h, k, l, !1, !0)).setVisible(!0)
+                }
+                "graph" == c ? d.setGraphContainer(g) : "toolbar" == c ? d.setToolbarContainer(g) : "title" == c ? d.setTitleContainer(g) : "status" == c ? d.setStatusContainer(g) : "map" == c && d.setMapContainer(g)
+            } else "resource" == a.nodeName ? mxResources.add(a.getAttribute("basename")) : "stylesheet" == a.nodeName && mxClient.link("stylesheet", a.getAttribute("name"));
+            a = a.nextSibling
+        }
+    };
+    a.decodeTemplates = function(a, c, d) {
+        null == d.templates &&
+            (d.templates = []);
+        c = mxUtils.getChildNodes(c);
+        for (var e = 0; e < c.length; e++) {
+            for (var f = c[e].getAttribute("as"), g = c[e].firstChild; null != g && 1 != g.nodeType;) g = g.nextSibling;
+            null != g && (d.templates[f] = a.decodeCell(g))
+        }
+    };
+    return a
+}());
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/resources/dia.txt b/public/assets/plugins/mxgraph/resources/dia.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_am.txt b/public/assets/plugins/mxgraph/resources/dia_am.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_am.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_ar.txt b/public/assets/plugins/mxgraph/resources/dia_ar.txt
new file mode 100644
index 0000000..9e46f2b
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_ar.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=عن تطبيق draw.io
+access_denied=غير مسموح بالدخول
+actualSize=الحجم الحقيقي
+addToExistingDrawing=أضف إلى الرسم الحالي
+addWaypoint=Add waypoint
+align=صُف
+alignment=محاذاة
+allChangesLost=سيتم فقد جميع التغييرات
+alreadyConnected=العقد متصلة مسبقا
+apply=نفذ
+arrange=رتب
+appNotInstalledAlert=التطبيق غير مثبت. برجاء تثبيت draw.io على سوق كروم الإلكتروني ثم إعادة المحاولة.
+appNotInstalledStatus=التطبيق غير مثبت.
+arrow=سهم
+arrows=أسهم
+automatic=Automatic
+autosize=تحجيم تلقائي
+backgroundColor=لون الخلفية
+basic=أساس
+blankDrawing=تصميم فارغ
+block=كتلة
+bold=تغليظ الخط
+borderColor=لون الحد
+borderWidth=عرض الحد
+bottom=أسفل
+bottomAlign=محاذاة إلى الأسفل
+cancel=إلغاء
+center=توسيط
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=تغيير الاتجاه
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=دائرة
+classic=تقليدي
+clipart=قصاصة فنية
+close=إغلاق
+collapse=إخفاء
+collapse-expand=إخفاء/ إظهار الصفحات المفتوحة
+connect=اتصل
+connecting=اتصال
+connectWithDrive=اتصل بجوجل درايف
+connection=اتصال
+containsValidationErrors=يوجد أخطاء يجب التأكد من صحتها
+copy=نسخ
+copyConnect=Copy on connect
+copyOfDrawing=نسخة من الرسم
+curved=Curved
+custom=تخصيص
+cut=قص
+dashed=متقطع
+delete=حذف
+diamond=شكل ألماسي
+diamondThin=شكل ألماسي (رقيق)
+didYouKnow=هل تعرف ...
+direction=إتجاه
+done=تم
+doubleClickOrientation=أنقر مرتين لتغيير الإتجاه
+drawing=تصميم {1}
+drawingEmpty=التصميم فارغ
+drawingTooLarge=التصميم كبير للغاية
+duplicate=انسخ
+east=شرق
+edit=تعديل
+editLink=تعديل الرابط
+embed=تضمين
+embedNotice=أضف هذا مرة واحدة في نهاية الصفحة
+enterGroup=ادخل تصنيف
+enterValue=ادخل قيمة
+entityRelation=علاقة الكيانات
+error=خطأ
+errorLoadingFile=خطأ في تحميل الملف
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=خطأ في حفظ الملف
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=مغادرة مجموعة
+expand=إظهار
+export=تصدير
+failedToSaveTryReconnect=لم يتم الحفظ، محاولة إعادة الاتصال.
+featureRequest=Feature Request
+feedback=Feedback
+file=ملف
+filename=اسم الملف
+fileNotFound=الملف غير موجود
+fileNotLoaded=لم يتم تحميل الملف
+fileNotSaved=لم يتم حفظ الملف
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=تعبئة لون
+fit=ملائمة
+fitPage=ملائمة الصفحة
+fitPageWidth=ملائمة عرض الصفحة
+fitWindow=ملائمة الشاشة
+flipH=انعكاس أفقي
+flipV=انعكاس عمودي
+fontColor=لون الخط
+fontFamily=الخط
+fontSize=حجم الخط
+format=تنسيق
+forum=المناقشات/ منتديات المساعدة
+fromTemplate=من قالب
+fromText=من نص
+general=عام
+global=عالمي
+gradient=الميل
+gradientColor=اللون
+grid=شبكة
+group=تصنيف
+guides=أدلة
+hateApp=I hate draw.io
+height=الارتفاع
+help=مساعدة
+helpTranslate=ساعدنا في ترجمة هذا التطبيق
+hide=إخفاء
+home=الرئيسية
+horizontal=أفقي
+horizontalFlow=تدفق أفقي
+horizontalTree=شجرة أفقية
+image=صورة
+images=صور
+inline=مضمنة
+import=جلب
+invalidOrMissingFile=ملف غير صالح أو غير موجود
+italic=خط مائل
+landscape=طباعة بالعرض
+layout=التصميم
+left=اليسار
+leftAlign=محاذاة إلى اليسار
+line=الخط
+lineend=نهاية الخط
+linestart=بداية الخط
+linewidth=عرض الخط
+loading=تحميل
+loveApp=I love draw.io
+manual=Manual
+middle=وسط
+moreResults=المزيد من النتائج
+moreShapes=المزيد من الأشكال
+move=تحريك
+navigation=الملاحة
+new=جديد
+noColor=لا يوجد لون
+noFiles=لا يوجد ملفات
+noMoreResults=لا يوجد المزيد من النتائج
+none=لا شيء
+noResultsFor=لا توجد نتائج متعلقة بـ '{1}'
+north=شمال
+notConnected=غير متصل
+ok=موافقة
+opacity=معدل الشفافية
+open=فتح
+openArrow=فتح سهم
+openFile=فتح ملف
+openLink=فتح رابط
+openInNewWindow=فتح في نافذة جديدة
+openSupported=الصيغة المعتمدة هي الملفات ذات امتداد .XML المحفوظة من هذا البرنامج
+options=الخيارات
+organic=عضوي
+orthogonal=متعامد
+oval=بيضاوي
+pages=صفحات
+pageView=مشاهدة الصفحة
+pageSetup=إعداد الصفحة
+pageScale=مقياس الصفحة
+pan=تحريك
+paperSize=حجم الصفحة
+paste=لصق
+perimeter=المحيط
+plain=بسيط
+position=الوضع
+posterPrint=طباعة ملصق
+preview=معاينة
+print=طباعة
+readOnly=Read-only
+reconnecting=إعادة الإتصال
+redo=إعادة تنفيذ الأمر
+removeFromGroup=إزالة من مجموعة
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} موجود بالفعل. هل تريد استبداله؟
+replaceExistingDrawing=استبدال الرسم الحالي
+reset=إعادة تعيين
+resize=تغيير الحجم
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=يمين
+rightAlign=محاذاة إلى اليمين
+rotate=قم بالتدوير
+rotation=تدوير
+rounded=دائري
+save=حفظ
+saveAs=حفظ كـ
+saved=تم الحفظ
+saving=جاري الحفظ
+scrollbars=أشرطة التمرير
+search=بحث
+selectAll=تحديد الكل
+selectEdges=تحديد الحواف
+selectFont=تحديد الخط
+selectVertices=تحديد القمم
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=استخدام كحافة افتراضية
+shadow=ظل
+shape=شكل
+share=انشر
+shareLink=رابط للتحرير المنشور
+sharingServerNotice=ملحوظة: هذه الخاصية في حيز التجربة. قم باستخدامها على مسؤوليتك!
+sharingServerReady=خادم النشر جاهز.
+sharingServerUnavailable=خادم النشر غير متاح.
+signOut=تسجيل الخروج
+size=حجم
+sourceSpacing=تباعد المصدر
+south=جنوب
+spacing=التباعد
+straight=مستقيم
+strokeColor=لون الخط
+style=نمط
+support=Support
+targetSpacing=تباعد الهدف
+text=النص
+textAlignment=محاذاة النص
+textOpacity=معدل شفافية النص
+tilt=Tilt
+toBack=إلى الخلف
+toFront=إلى الأمام
+tooltips=تلميحات
+top=أعلى
+topAlign=محاذاة إلى الأعلى
+transparent=شفاف
+underline=تسطير
+undo=تراجع
+ungroup=تفكيك المجموعة
+updatingDocument=تحديث الوثيقة. برجاء الانتظار...
+updatingSelection=تحديث الاختيار. برجاء الانتظار...
+url=الرابط
+userLoggedOut=لقد انتهى عملك. لحفظ أي عمل لم يتم حفظه قم بتسجيل الدخول بحساب جوجل الخاص بك
+vertical=عمودي
+verticalFlow=تدفق عمودي
+verticalTree=شجرة عمودية
+view=عرض
+west=غرب
+width=العرض
+wordWrap=Word wrap
+zoom=تكبير
+zoomIn=تكبير
+zoomOut=تصغير
diff --git a/public/assets/plugins/mxgraph/resources/dia_bg.txt b/public/assets/plugins/mxgraph/resources/dia_bg.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_bg.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_bn.txt b/public/assets/plugins/mxgraph/resources/dia_bn.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_bn.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_bs.txt b/public/assets/plugins/mxgraph/resources/dia_bs.txt
new file mode 100644
index 0000000..f44bba0
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_bs.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=O draw.io
+access_denied=Pristup odbijen
+actualSize=Prirodna veličina
+addToExistingDrawing=Dodaj na postojeći crtež
+addWaypoint=Add waypoint
+align=Poravnaj
+alignment=Poravnanje
+allChangesLost=Sve promjene će biti izgubljene!
+alreadyConnected=Čvorovi su već povezani
+apply=Primjeni
+arrange=Složi
+appNotInstalledAlert=Aplikacija nije instalirana. Molim vas instalirajte Diagram.ly u Chrome Web Store i pokušajte ponovo
+appNotInstalledStatus=Aplikacija nije instalirana.
+arrow=Strijelica
+arrows=Strijelice
+automatic=Automatic
+autosize=Automatska veličina
+backgroundColor=Boja pozadine
+basic=Osnovni
+blankDrawing=Prazan crtež
+block=Blok
+bold=Podebljano
+borderColor=Boja okvira
+borderWidth=Širina okvira
+bottom=Dno
+bottomAlign=Poravnanje pri dnu
+cancel=Otkaži
+center=Centar
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Promjeni orijentaciju
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Krug
+classic=Klasičan
+clipart=Klip art
+close=Zatvori
+collapse=Spusti
+collapse-expand=Spusti/proširi
+connect=Poveži
+connecting=Povezivanje
+connectWithDrive=Connect with Google Drive
+connection=Konekcija
+containsValidationErrors=Sadrži greške u validaciji
+copy=Kopiraj
+copyConnect=Copy on connect
+copyOfDrawing=Kopija crteža
+curved=Curved
+custom=Posebno
+cut=Isjeci
+dashed=Isprekidan
+delete=Ukloni
+diamond=Romb
+diamondThin=Romb (tanak)
+didYouKnow=Da li ste znali...
+direction=Pravac
+done=Završeno
+doubleClickOrientation=Dupli klik za promjenu orijentacije
+drawing=Crtež{1}
+drawingEmpty=Crtež je prazan
+drawingTooLarge=Crtež je prevelik
+duplicate=Duplikat
+east=Istok
+edit=Uredi
+editLink=Uredi link
+embed=Ugradi
+embedNotice=Ugradi ovo jednom pri kraju stranice
+enterGroup=Uđi u grupu
+enterValue=Unesi vrjednost
+entityRelation=Relacija entiteta
+error=Greška
+errorLoadingFile=Greška pri učitavanju dokumenta
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Greška pri skladištenju dokumenta
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Izađi iz grupe
+expand=Razvij
+export=Eksportuj
+failedToSaveTryReconnect=Neuspelo skladištenje, pokušaj rekonekcije
+featureRequest=Feature Request
+feedback=Feedback
+file=Datoteka
+filename=Ime datoteke
+fileNotFound=Datoteka nije pronađena
+fileNotLoaded=Datoteka nije učitana
+fileNotSaved=Datoteka nije uskladištena
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Boja popunjavanja
+fit=Prilagodi
+fitPage=Prilagodi stranici
+fitPageWidth=Prilagodi širini stranice
+fitWindow=Prilagodi prozoru
+flipH=Preokreni vodoravno
+flipV=Preokreni uspravno
+fontColor=Boja fonta
+fontFamily=Font
+fontSize=Veličina slova
+format=Format
+forum=Forum
+fromTemplate=Od šablona
+fromText=Od teksta
+general=Opšti
+global=Globalan
+gradient=Gradijent
+gradientColor=Boja gradijenta
+grid=Mreža
+group=Grupiši
+guides=Vodiči
+hateApp=I hate draw.io
+height=Visina
+help=Pomoć
+helpTranslate=Pomozite nam u prijevođenju ove aplikacije
+hide=Sakrij
+home=Dom
+horizontal=Vodoravan
+horizontalFlow=Vodoravni tok
+horizontalTree=Vodoravno drvo
+image=Slika
+images=Slike
+inline=Inline
+import=Import
+invalidOrMissingFile=Neispravan ili nepostojeći dokument
+italic=Kurziv
+landscape=Pejzaž
+layout=Raspored
+left=Lijevo
+leftAlign=Lijevo poravnanje
+line=Linija
+lineend=Kraj linije
+linestart=Početak linije
+linewidth=Debljina linije
+loading=Učitavanje
+loveApp=I love draw.io
+manual=Manual
+middle=Sredina
+moreResults=Još rezultata
+moreShapes=Još oblika
+move=Pomjeri
+navigation=Navigacija
+new=Novi
+noColor=Bez boje
+noFiles=Nema fajlova
+noMoreResults=Nema više rezultata
+none=Ništa
+noResultsFor=Nema više rezultata za {1}
+north=Sjever
+notConnected=Bez konekcije
+ok=OK
+opacity=Prozirnost
+open=Otvori
+openArrow=Otvorena strijelica
+openFile=Otvori datoteku
+openLink=Otvori link
+openInNewWindow=Otvori u novom prozoru
+openSupported=Podržani format je .XML datoteka sačuvana iz ovog softvera
+options=Opcije
+organic=Organski
+orthogonal=Pravougaoni
+oval=Ovalan
+pages=Stranice
+pageView=Pregled strane
+pageSetup=Podešavanje strane
+pageScale=Razmjera strane
+pan=Pan
+paperSize=Veličina papira
+paste=Zalijepi
+perimeter=Perimetar
+plain=Jednostavan
+position=Pozicija
+posterPrint=Štampa postera
+preview=Pregled
+print=Štampa
+readOnly=Read-only
+reconnecting=Rekonekcija
+redo=Ponovi
+removeFromGroup=Ukloni iz grupe
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} već postoji. Da li želite da ga zamjenite?
+replaceExistingDrawing=Zamjeni postojeći crtež
+reset=Reset
+resize=Predimenzioniranje
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Desno
+rightAlign=Desno poravnanje
+rotate=Rotiraj
+rotation=Rotacija
+rounded=Zaobljen
+save=Skladišti
+saveAs=Skladišti kao
+saved=Uskladišten
+saving=Skladištenje
+scrollbars=Skrolbarovi
+search=Pretraga
+selectAll=Izaberi sve
+selectEdges=Izaberi grane
+selectFont=Izaberi font
+selectVertices=Izaberi čvorove
+sendMessage=Send
+sessionTimeoutOnSave=Vaša sesija je istjekla i odjavljeni ste sa Google Drive-a. Kliknite OK da se prijavite i snimite izmjene.
+setAsDefaultEdge=Postavi kao podrazumijevanu granu
+shadow=Senka
+shape=Oblik
+share=Podjeli
+shareLink=Podjeli link
+sharingServerNotice=Pažnja: experimentalni servis. Upotreba na sopstvenu odgovornost!
+sharingServerReady=Server za podjelu je spreman.
+sharingServerUnavailable=Server za podjelu je nedostupan.
+signOut=Odjavi se
+size=Veličina
+sourceSpacing=Proređivanje izvora
+south=Jug
+spacing=Proređivanje
+straight=Pravo
+strokeColor=Boja linije
+style=Stil
+support=Support
+targetSpacing=Proređivanje odredišta
+text=Tekst
+textAlignment=Poravnanje teksta
+textOpacity=Neprozirnost teksta
+tilt=Tilt
+toBack=Postavi iza
+toFront=Postavi ispred
+tooltips=Opisi alatki
+top=Vrh
+topAlign=Gornje poravnanje
+transparent=Proziran
+underline=Podvučen
+undo=Opozovi
+ungroup=Podjeli
+updatingDocument=Ažuriranje dokumenta. Molimo sačekajte...
+updatingSelection=Ažuriranje selekcije. Molimo sačekajte...
+url=URL
+userLoggedOut=Vaša sesija je završena. Da bi ste snimili posao koji nije snimljen, morate se prijaviti na vaš Google nalog kao
+vertical=Uspravno
+verticalFlow=Uspravni tok
+verticalTree=Uspravno drvo
+view=Pogled
+west=Zapad
+width=Širina
+wordWrap=Word wrap
+zoom=Uvećanje
+zoomIn=Uvećaj
+zoomOut=Umanji
diff --git a/public/assets/plugins/mxgraph/resources/dia_ca.txt b/public/assets/plugins/mxgraph/resources/dia_ca.txt
new file mode 100644
index 0000000..cc01565
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_ca.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Accès denegat
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_cs.txt b/public/assets/plugins/mxgraph/resources/dia_cs.txt
new file mode 100644
index 0000000..5da8f9e
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_cs.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=O aplikaci draw.io
+access_denied=Přístup odepřen
+actualSize=Skutečná velikost
+addToExistingDrawing=Přidat do existujícího výkresu
+addWaypoint=Add waypoint
+align=Zarovnat
+alignment=Zarovnání
+allChangesLost=Všechny změny budou ztraceny!
+alreadyConnected=Uzly jsou již spojeny
+apply=Použít
+arrange=Uspořádat
+appNotInstalledAlert=Aplikace není nainstalována. Nainstalujte draw.io z internetového obchodu Chrome a zkuste to znovu.
+appNotInstalledStatus=Aplikace není naistalována.
+arrow=Šipka
+arrows=Šipky
+automatic=Automatic
+autosize=Automatická velikost
+backgroundColor=Barva pozadí
+basic=Základní
+blankDrawing=Prázdný výkres
+block=Blok
+bold=Tučné
+borderColor=Barva okraje
+borderWidth=Tloušťka okraje
+bottom=Dolní
+bottomAlign=Podle dolní hrany
+cancel=Zrušit
+center=Na střed
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Změnit orientaci
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Kruh
+classic=Klasické
+clipart=Clipart
+close=Zavřít
+collapse=Sbalit
+collapse-expand=Sbalit/Rozbalit
+connect=Připojit
+connecting=Připojuji
+connectWithDrive=Připojit ke službě Disk Google
+connection=Připojení
+containsValidationErrors=Obsahuje chyby ověření
+copy=Kopírovat
+copyConnect=Copy on connect
+copyOfDrawing=Kopie výkresu
+curved=Curved
+custom=Vlastní
+cut=Vyjmout
+dashed=Přerušovaná
+delete=Smazat
+diamond=Kosočtverec
+diamondThin=Kosočtverec (tenký)
+didYouKnow=Věděli jste, že...
+direction=Směr
+done=Hotovo
+doubleClickOrientation=Poklepejte ke změně orientace
+drawing=Výkres{1}
+drawingEmpty=Výkres je prázdný
+drawingTooLarge=Výkres je příliš velký
+duplicate=Duplikovat
+east=Východ
+edit=Upravit
+editLink=Upravit odkaz
+embed=Vložit do stránky
+embedNotice=Toto vložte na konec své stránky
+enterGroup=Vložit skupinu
+enterValue=Vložit hodnotu
+entityRelation=Relace entity
+error=Chyba
+errorLoadingFile=Chyba při nahrávání souboru
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Chyba při ukládání souboru
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Odejít ze skupiny
+expand=Rozšířit
+export=Export
+failedToSaveTryReconnect=Nepodařilo se uložit, zkouším se připojit znovu
+featureRequest=Feature Request
+feedback=Feedback
+file=Soubor
+filename=Název souboru
+fileNotFound=Soubor nebyl nalezen
+fileNotLoaded=Soubor nebyl nahrán
+fileNotSaved=Soubor nebyl uložen
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Barva výplně
+fit=Roztáhnout
+fitPage=Roztáhnout do stránky
+fitPageWidth=Roztáhnout na šířku stránky
+fitWindow=Roztáhnout do okna
+flipH=Převrátit vodorovně
+flipV=Převrátit svisle
+fontColor=Barva písma
+fontFamily=Rodina písma
+fontSize=Velikost písma
+format=Formát
+forum=Fóra s diskusí/nápovědou
+fromTemplate=Ze šablony
+fromText=Z textu
+general=Obecné
+global=Globální
+gradient=Barevný přechod
+gradientColor=Barva
+grid=Mřížka
+group=Skupina
+guides=Vodicí linky
+hateApp=I hate draw.io
+height=Výška
+help=Nápověda
+helpTranslate=Pomozte nám přeložit tuto aplikaci
+hide=Skrýt
+home=Domů
+horizontal=Vodorovně
+horizontalFlow=Vodorovný tok
+horizontalTree=Vodorovný strom
+image=Obrázek
+images=Obrázky
+inline=Na řádku
+import=Import
+invalidOrMissingFile=Neplatný nebo chybějící soubor
+italic=Kurzíva
+landscape=Na šířku
+layout=Rozvržení
+left=Vlevo
+leftAlign=Podle levé hrany
+line=Řádek
+lineend=Konec řádku
+linestart=Začátek řádku
+linewidth=Šířka řádku
+loading=Nahrávám
+loveApp=I love draw.io
+manual=Manual
+middle=Střed
+moreResults=Další výsledky
+moreShapes=Další tvary
+move=Přesunout
+navigation=Navigace
+new=Nový
+noColor=Bez barvy
+noFiles=Žádné soubory
+noMoreResults=Žádné další výsledky
+none=Nic
+noResultsFor=Žádné výsledky pro {1}
+north=Sever
+notConnected=Bez připojení
+ok=OK
+opacity=Průhlednost
+open=Otevřít
+openArrow=Otevřená šipka
+openFile=Otevřít soubor
+openLink=Otevřít odkaz
+openInNewWindow=Otevřít v novém okně
+openSupported=Podporovaný formát je soubor .XML uložený z této aplikace
+options=Možnosti
+organic=Organický
+orthogonal=Pravoúhlý
+oval=Ovál
+pages=Stránky
+pageView=Zobrazení stránky
+pageSetup=Nastavení stránky
+pageScale=Škála stránky
+pan=Pan
+paperSize=Rozměry papíru
+paste=Vložit
+perimeter=Obvod
+plain=Jednoduchý
+position=Pozice
+posterPrint=Tisk plakátu
+preview=Náhled
+print=Tisk
+readOnly=Read-only
+reconnecting=Připojuji znovu
+redo=Opakovat
+removeFromGroup=Odstranit ze skupiny
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} již existuje. Chcete jej nahradit?
+replaceExistingDrawing=Nahradit existující výkres
+reset=Resetovat
+resize=Změnit rozměry
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Vpravo
+rightAlign=Podle pravé hrany
+rotate=Otočit
+rotation=Otočení
+rounded=Zaoblený
+save=Uložit
+saveAs=Uložit jako
+saved=Uloženo
+saving=Ukládám
+scrollbars=Rolovací lišty
+search=Hledat
+selectAll=Vybrat vše
+selectEdges=Vybrat hrany
+selectFont=Vybrat písmo
+selectVertices=Vybrat rohy
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Nastavit jako výchozí hranu
+shadow=Stín
+shape=Tvar
+share=Sdílet
+shareLink=Odkaz na sdílení
+sharingServerNotice=Pozor: experimentální funkce. Použití jen na vlastní riziko!
+sharingServerReady=Server sdílení je připraven.
+sharingServerUnavailable=Server sdílení je nedostupný.
+signOut=Odhlásit se
+size=Velikost
+sourceSpacing=Odsazení zdroje
+south=Jih
+spacing=Odsazení
+straight=Přímý
+strokeColor=Barva čáry
+style=Styl
+support=Support
+targetSpacing=Odsazení cíle
+text=Text
+textAlignment=Zarovnání textu
+textOpacity=Průhlednost textu
+tilt=Tilt
+toBack=Dozadu
+toFront=Dopředu
+tooltips=Popis nástrojů
+top=Horní
+topAlign=Podle horní hrany
+transparent=Průhledný
+underline=Podtržení
+undo=Zpět
+ungroup=Rozdělit skupinu
+updatingDocument=Aktualizuji dokument. Čekejte...
+updatingSelection=Aktualizuji výběr. Čekejte...
+url=URL
+userLoggedOut=Vaše připojení bylo ukončeno. K uložení neuložené práce se musíte přihlásit ke svému účtu Google jako
+vertical=Svisle
+verticalFlow=Svislý tok
+verticalTree=Svislý strom
+view=Zobrazení
+west=Západ
+width=Šířka
+wordWrap=Word wrap
+zoom=Lupa
+zoomIn=Zvětšit
+zoomOut=Zmenšit
diff --git a/public/assets/plugins/mxgraph/resources/dia_da.txt b/public/assets/plugins/mxgraph/resources/dia_da.txt
new file mode 100644
index 0000000..abb59a8
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_da.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=Om draw.io
+access_denied=Adgang nægtet
+actualSize=Faktisk størrelse
+addToExistingDrawing=Føj til eksisterende tegning
+addWaypoint=Add waypoint
+align=Juster
+alignment=Justering
+allChangesLost=Alle ændringer vil gå tabt!
+alreadyConnected=Punkter er allerede tilsluttet
+apply=Anvend
+arrange=Arranger
+appNotInstalledAlert=App ikke installeret. Du skal installere draw.io i Chrome Web Store og prøv igen.
+appNotInstalledStatus=App ikke installeret.
+arrow=Pil
+arrows=Pile
+automatic=Automatic
+autosize=AutoStørrelse
+backgroundColor=baggrundsfarve
+basic=Grundlæggende
+blankDrawing=Blank Tegning
+block=Bloker
+bold=Fed
+borderColor=Kantfarve
+borderWidth=Kantbredde
+bottom=Bund
+bottomAlign=Juster Bund 
+cancel=Annuller
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Skift Orientering
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Cirkel
+classic=Klassisk
+clipart=Clipart
+close=Luk
+collapse=Kollaps
+collapse-expand=Kollaps / Udvid
+connect=Tilslut
+connecting=Tilslutter
+connectWithDrive=Tilslut Google Drev
+connection=Tilslutter
+containsValidationErrors=Indeholder valideringsfejl
+copy=Kopiér
+copyConnect=Copy on connect
+copyOfDrawing=Kopi af Tegning
+curved=Curved
+custom=Brugerdefineret
+cut=Klip
+dashed=Stiplet
+delete=Slet
+diamond=Diamant
+diamondThin=Diamant (Tynd)
+didYouKnow=Vidste du...
+direction=Retning
+done=Udført
+doubleClickOrientation=Dobbeltklik for at ændre orientering
+drawing=Tegning {1}
+drawingEmpty=Tegning er tom
+drawingTooLarge=Tegningen er for stor
+duplicate=Dupliker
+east=Øst
+edit=Rediger
+editLink=Rediger link
+embed=Integrer
+embedNotice=Tilføj dette en gang ved slutningen af siden
+enterGroup=Indtast gruppe
+enterValue=Indtast værdi
+entityRelation=Enhedsrelation
+error=Fejl
+errorLoadingFile=Fejl indlæsning af fil
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Fejl under lagring af af fil
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Afslut Gruppe
+expand=Udvid
+export=Eksport
+failedToSaveTryReconnect=Det lykkedes ikke at gemme, forsøger at genoprette forbindelsen
+featureRequest=Feature Request
+feedback=Feedback
+file=Fil
+filename=Filnavn
+fileNotFound=Fil ikke fundet
+fileNotLoaded=Fil ikke indlæst
+fileNotSaved=Fil ikke gemt
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fyld farve
+fit=Tilpas
+fitPage=Tilpas siden
+fitPageWidth=Tilpas sidens bredde
+fitWindow=Tilpas Vindue
+flipH=Vend Horisontalt
+flipV=Vend Vertikalt
+fontColor=Skiftfarve
+fontFamily=Font familie
+fontSize=Skriftstørrelse
+format=Format
+forum=Diskussion/Hjælpeforumer 
+fromTemplate=Fra skabelon
+fromText=Fra Tekst
+general=Generel
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Gruppe
+guides=Guides
+hateApp=I hate draw.io
+height=Højde
+help=Hjælp
+helpTranslate=Hjælp os med at oversætte denne ansøgning
+hide=Skjul
+home=Hjem
+horizontal=Horisontal
+horizontalFlow=Horisontal Flow
+horizontalTree=Horisontalt træ
+image=Billede
+images=Billeder
+inline=inline
+import=Importer
+invalidOrMissingFile=Ugyldig eller manglende fil
+italic=Kursiv
+landscape=Landskab
+layout=Layout
+left=Venstre
+leftAlign=Venstre Justering
+line=linje
+lineend=Linjeafslutning 
+linestart=Linjestart 
+linewidth=Linjebredde
+loading=Indlæser
+loveApp=I love draw.io
+manual=Manual
+middle=Midt
+moreResults=Flere Fesultater
+moreShapes=Flere Figurer
+move=Flyt
+navigation=Navigation
+new=Nyt
+noColor=Ingen farve
+noFiles=Ingen filer
+noMoreResults=Ikke flere resultater
+none=Ingen
+noResultsFor=Ingen resultater for '{1}'
+north=Nord
+notConnected=ikke forbundet
+ok=OK
+opacity=Opacitet
+open=Åben
+openArrow=Åben Pil
+openFile=Åben fil
+openLink=Åben link
+openInNewWindow=Åben i nyt vindue
+openSupported=Understøttede format er .XML-filer gemt fra denne software
+options=Indstillinger
+organic=Organisk
+orthogonal=Ortogonal
+oval=Oval
+pages=Sider
+pageView=Sidevisning 
+pageSetup=Sideopsætning
+pageScale=Sideskalering 
+pan=Pan
+paperSize=Papirstørrelse 
+paste=indsæt
+perimeter=Perimeter
+plain=Almindelig
+position=Position
+posterPrint=Plakatudskift 
+preview=Eksempel
+print=Udskriv
+readOnly=Read-only
+reconnecting=Gentilslutter
+redo=Omgør
+removeFromGroup=Fjern fra gruppe
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} findes allerede. Ønsker du at erstatte den?
+replaceExistingDrawing=Erstat eksisterende tegning
+reset=Nulstil
+resize=Rejuster
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Højre
+rightAlign=Juster Højre 
+rotate=Roter
+rotation=Rotation
+rounded=Afrundet
+save=Gem
+saveAs=Gem som
+saved=Gemt
+saving=Lagring
+scrollbars=Rullebjælker
+search=Søg
+selectAll=Vælg Alt
+selectEdges=Vælg Kanter
+selectFont=Vælg en skrifttype
+selectVertices=Vælg Toppunkter
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Sæt som standard kant
+shadow=Skygge
+shape=Figur
+share=Del
+shareLink=Link til fælles redigering
+sharingServerNotice=Bemærk: Experimental funktion. Brug på eget ansvar!
+sharingServerReady=Deling server er klar.
+sharingServerUnavailable=Deling server er ikke tilgængelig.
+signOut=Log ud
+size=Størrelse
+sourceSpacing=Kildeafstand 
+south=Syd
+spacing=Mellemrum
+straight=Lige
+strokeColor=Linjefarve
+style=Stil
+support=Support
+targetSpacing=Målafstand
+text=Tekst
+textAlignment=Tekstjustering
+textOpacity=Tekst Opacitet
+tilt=Tilt
+toBack=Til Bagsiden
+toFront=Til Forsiden
+tooltips=Tooltips
+top=Top
+topAlign=Topjustering 
+transparent=Transparent
+underline=Understrege
+undo=Fortryd
+ungroup=Opdel
+updatingDocument=Opdaterer Dokument. Vent venligst...
+updatingSelection=Opdaterer Valg. Vent venligst...
+url=URL
+userLoggedOut=Din session er slut. Hvis du vil gemme eventuelle ikke gemt arbejde skal du logge ind på din Google-konto som
+vertical=Vertikal
+verticalFlow=Vertikalt Flow
+verticalTree=Vertikalt træ
+view=Vis
+west=Vest
+width=Bredde
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom ind
+zoomOut=Zoom ud
diff --git a/public/assets/plugins/mxgraph/resources/dia_de.txt b/public/assets/plugins/mxgraph/resources/dia_de.txt
new file mode 100644
index 0000000..335335d
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_de.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=Über draw.io
+access_denied=Zugriff verweigert
+actualSize=Tatsächliche Grösse
+addToExistingDrawing=In vorhandene Zeichnung einfügen
+addWaypoint=Wegpunkt einfügen
+align=Ausrichten
+alignment=Ausrichtung
+allChangesLost=Alle Änderungen gehen verloren!
+alreadyConnected=Knoten schon verbunden
+apply=Anwenden
+arrange=Anordnen
+appNotInstalledAlert=App nicht installiert. Bitte installieren Sie Diagram.ly im Chrome Web Store und versuchen Sie es erneut.
+appNotInstalledStatus=App nicht installiert.
+arrow=Pfeil
+arrows=Pfeile
+automatic=Automatisch
+autosize=Grösse anpassen
+backgroundColor=Hintegrundfarbe
+basic=Einfach
+blankDrawing=Leere Zeichnung
+block=Block
+bold=Fett
+borderColor=Rahmenfarbe
+borderWidth=Rahmenbreite
+bottom=Unten
+bottomAlign=Unten
+cancel=Abbrechen
+center=Zentriert
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Orientierung ändern
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Kreis
+classic=Klassisch
+clipart=Clipart
+close=Schliessen
+collapse=Einklappen
+collapse-expand=Einklappen/Ausklappen
+connect=Verbinden
+connecting=Verbindungsaufbau
+connectWithDrive=Mit Google Drive verbinden
+connection=Verbindung
+containsValidationErrors=Enthält Validierungsfehler
+copy=Kopieren
+copyConnect=Beim Verbinden kopieren
+copyOfDrawing=Kopie der Zeichnung
+curved=Gekrümmt
+custom=Benutzerdefiniert
+cut=Ausschneiden
+dashed=Gestrichelt
+delete=Löschen
+diamond=Diamant
+diamondThin=Diamant (Schmal)
+didYouKnow=Wussten Sie schon...
+direction=Richtung
+done=Fertig
+doubleClickOrientation=Doppelklicken um Orientierung zu ändern
+drawing=Zeichnung{1}
+drawingEmpty=Zeichnung ist leer
+drawingTooLarge=Zeichnung ist zu gross
+duplicate=Duplizieren
+east=Ost
+edit=Bearbeiten
+editLink=Link bearbeiten
+embed=Einbetten
+embedNotice=Fügen Sie dies einmal am Ende der Seite ein
+enterGroup=In Gruppe Hinein
+enterValue=Wert eingeben
+entityRelation=Entity Relation
+error=Fehler
+errorLoadingFile=Fehler beim Laden der Datei
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Fehler beim Speichern der Datei
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Aus Gruppe Heraus
+expand=Ausklappen
+export=Exportieren
+failedToSaveTryReconnect=Speichern fehlgeschlagen. Verbindungswiederherstellung
+featureRequest=Feature Request
+feedback=Feedback
+file=Datei
+filename=Dateiname
+fileNotFound=Datei nicht gefunden
+fileNotLoaded=Datei nicht geladen
+fileNotSaved=Datei nicht gespeichert
+fileOpenLocation=Wie möchten Sie diese Datei(en) öffnen?
+fillColor=Füllfarbe
+fit=Einpassen
+fitPage=Ganze Seite
+fitPageWidth=Seitenbreite
+fitWindow=An Fenstergrösse anpassen
+flipH=Horizontal Spiegeln
+flipV=Vertikal Spiegeln
+fontColor=Schriftfarbe
+fontFamily=Schriftart
+fontSize=Schriftgrösse
+format=Format
+forum=Diskussion/Hilfe Foren
+fromTemplate=Aus Vorlage
+fromText=Aus Text
+general=Allgemein
+global=Global
+gradient=Farbverlauf
+gradientColor=Farbe
+grid=Gitternetz
+group=Gruppieren
+guides=Hilfslinien
+hateApp=Ich hasse draw.io
+height=Höhe
+help=Hilfe
+helpTranslate=Hilf uns diese Anwendung zu übersetzen
+hide=Verstecken
+home=Ursprung
+horizontal=Horizontal
+horizontalFlow=Horizontaler Fluss
+horizontalTree=Horizontaler Baum
+image=Bild
+images=Bilder
+inline=Kein Absatz
+import=Importieren
+invalidOrMissingFile=Ungültige oder fehlende Datei
+italic=Kursiv
+landscape=Querformat
+layout=Layout
+left=Links
+leftAlign=Links
+line=Linie
+lineend=Linienende
+linestart=Linienanfang
+linewidth=Linienbreite
+loading=Wird geladen
+loveApp=Ich liebe draw.io
+manual=Manuell
+middle=Mitte
+moreResults=Mehr Resultate
+moreShapes=Mehr Shapes
+move=Verschieben
+navigation=Navigation
+new=Neu
+noColor=Keine Farbe
+noFiles=Keine Dateien
+noMoreResults=Keine Weiteren Resultate
+none=Keine
+noResultsFor=Keine Resultate für '{1}'
+north=Nord
+notConnected=Nicht verbunden
+ok=OK
+opacity=Deckkraft
+open=Öffnen
+openArrow=Offen
+openFile=Datei öffnen
+openLink=Link öffnen
+openInNewWindow=In neuem Fenster öffnen
+openSupported=Unterstützte Formate sind mit dieser Anwendung erstellte .XML Dateien
+options=Optionen
+organic=Organisch
+orthogonal=Orthogonal
+oval=Oval
+pages=Seiten
+pageView=Seitenansicht
+pageSetup=Seite einrichten
+pageScale=Seitenskalierung
+pan=Verschieben
+paperSize=Papiergrösse
+paste=Einfügen
+perimeter=Umfang
+plain=Einfach
+position=Position
+posterPrint=Posterdruck
+preview=Vorschau
+print=Drucken
+readOnly=Read-only
+reconnecting=Verbindungswiederherstellung
+redo=Wiederherstellen
+removeFromGroup=Aus Gruppe entfernen
+removeWaypoint=Wegpunkt entfernen
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} existiert bereits. Soll die Datei überschrieben werden?
+replaceExistingDrawing=Vorhandene Zeichnung ersetzen
+reset=Zurücksetzen
+resize=Grösse anpassen
+retryingIn=Versuche erneut in {1} Sekunde(n)
+retryingLoad=Laden fehlgeschlagen. Versuche erneut...
+retryingLogin=Zeitüberschreitung beim Anmelden. Versuche erneut...
+right=Rechts
+rightAlign=Rechts
+rotate=Rotieren
+rotation=Rotation
+rounded=Abgerundet
+save=Speichern
+saveAs=Speichern unter
+saved=Gespeichert
+saving=Wird gespeichert
+scrollbars=Scrollbars
+search=Suchen
+selectAll=Alles markieren
+selectEdges=Kanten markieren
+selectFont=Schriftart wählen
+selectVertices=Knoten markieren
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Als Standardkante festlegen
+shadow=Schatten
+shape=Shape
+share=Freigeben
+shareLink=Link zum gemeinsamen Bearbeiten
+sharingServerNotice=Hinweis: Experimentelles Feature. Benutzung auf eigene Gefahr!
+sharingServerReady=Freigabeserver ist bereit.
+sharingServerUnavailable=Freigabeserver ist nicht verfügbar.
+signOut=Abmelden
+size=Grösse
+sourceSpacing=Anfangsabstand
+south=Süd
+spacing=Abstand
+straight=Gerade
+strokeColor=Linienfarbe
+style=Style
+support=Support
+targetSpacing=Endabstand
+text=Text
+textAlignment=Text Ausrichtung
+textOpacity=Text Deckkraft
+tilt=Kippen
+toBack=Nach Hinten
+toFront=Nach Vorne
+tooltips=Tooltips
+top=Oben
+topAlign=Oben
+transparent=Transparent
+underline=Unterstrichen
+undo=Rückgängig
+ungroup=Gruppierung aufheben
+updatingDocument=Aktualisiere Dokument. Bitte warten...
+updatingSelection=Aktualisiere Markierung. Bitte warten...
+url=URL
+userLoggedOut=Ihre Sitzung wurde beendet. Um Änderungen zu speichern müssen Sie sich bei Google anmelden als
+vertical=Vertikal
+verticalFlow=Vertikaler Fluss
+verticalTree=Vertikaler Baum
+view=Ansicht
+west=West
+width=Breite
+wordWrap=Autom. Zeilenumbruch
+zoom=Zoom
+zoomIn=Hineinzoomen
+zoomOut=Herauszoomen
diff --git a/public/assets/plugins/mxgraph/resources/dia_el.txt b/public/assets/plugins/mxgraph/resources/dia_el.txt
new file mode 100644
index 0000000..c2d41fb
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_el.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=Σχετικά με το draw.io
+access_denied=Δεν επιτράπηκε πρόσβαση
+actualSize=Πραγματικό Μέγεθος
+addToExistingDrawing=Προσθήκη σε υπάρχουσα σχεδίαση
+addWaypoint=Add waypoint
+align=Στοίχισε
+alignment=Στοίχιση
+allChangesLost=Όλες οι αλλαγές θα χαθούν!
+alreadyConnected=Οι κόμβοι είναι ήδη συνδεδεμένοι
+apply=Εφαρμογή
+arrange=Οργάνωση
+appNotInstalledAlert=Η εφαρμογή δεν έχει εγκατασταθεί. Παρακαλούμε εγκαταστήστε το draw.io στο Διαδικτυακό Κατάστημα του Chrome και προσπαθήστε ξανά.
+appNotInstalledStatus=Η εφαρμογή δεν έχει εγκατασταθεί.
+arrow=Βέλος
+arrows=Βέλη
+automatic=Automatic
+autosize=Αυτόματο μέγεθος
+backgroundColor=Χρώμα φόντου
+basic=Βασικό
+blankDrawing=Κενή Σχεδίαση
+block=Μπλοκ
+bold=Έντονο
+borderColor=Χρώμα πλαισίου
+borderWidth=Μήκος πλαισίου
+bottom=Κάτω μέρος
+bottomAlign=Στοίχιση Κάτω Μέρους
+cancel=Ακύρωση
+center=Στοίχιση στο κέντρο
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Αλλαγή Προσανατολισμού
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Κύκλος
+classic=Κλασικό
+clipart=Συλλογή εικόνων
+close=Κλείσιμο
+collapse=Κατάρρευση
+collapse-expand=Κατάρρευση/Επέκταση
+connect=Σύνδεση
+connecting=Γίνεται Σύνδεση
+connectWithDrive=Σύνδεση με το Google Drive
+connection=Σύνδεση
+containsValidationErrors=Περιέχει σφάλματα επαλήθευσης
+copy=Αντιγραφή
+copyConnect=Copy on connect
+copyOfDrawing=Αντιγραφή σχεδίου
+curved=Curved
+custom=Παραμετροποιημένο
+cut=Αποκοπή
+dashed=Με διακεκομμένες γραμμές
+delete=Διαγραφή
+diamond=Διαμάντι
+diamondThin=Διαμάντι (λεπτό)
+didYouKnow=Γνώριζες ότι...
+direction=Κατεύθυνση
+done=Έγινε
+doubleClickOrientation=Κάντε διπλό κλικ για αλλαγή προσανατολισμού
+drawing=Σχέδιο{1}
+drawingEmpty=Το σχέδιο είναι κενό
+drawingTooLarge=Το σχέδιο είναι πολύ μεγάλο
+duplicate=Διπλασιαμός
+east=Ανατολή
+edit=Επεξεργασία
+editLink=Επεξεργασία συνδέσμου
+embed=Ενσωμάτωση
+embedNotice=Προσθέστε αυτό μια φορά στο τέλος της σελίδας
+enterGroup=Εισαγωγή σε ομάδα
+enterValue=Εισαγωγή αξίας
+entityRelation=Σχέση Οντότητας
+error=Σφάλμα
+errorLoadingFile=Σφάλμα φόρτωσης αρχείου
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Σφάλμα αποθήκευσης αρχείου
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Έξοδος από Ομάδα
+expand=Επέκταση
+export=Εξαγωγή
+failedToSaveTryReconnect=Αποτυχία αποθήκευσης, γίνεται προσπάθεια επανασύνδεσης
+featureRequest=Feature Request
+feedback=Feedback
+file=Αρχείο
+filename=Όνομα αρχείου
+fileNotFound=Το αρχείο δεν βρέθηκε
+fileNotLoaded=Δεν έγινε φόρτωση αρχείου
+fileNotSaved=Δεν έγινε αποθήκευση αρχείου
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Χρώμα γεμίσματος
+fit=Προσαρμογή μεγέθους
+fitPage=Προσαρμογή μεγέθους σελίδας
+fitPageWidth=Προσαρμογή μήκους Σελίδας
+fitWindow=Προσαρμογή μεγέθους Παραθύρου
+flipH=Οριζόντια αναστροφή
+flipV=Κάθετη αναστροφή
+fontColor=Χρώμα γραμματοσειράς
+fontFamily=Οικογένεια γραμματοσειράς
+fontSize=Μέγεθος γραμματοσειράς
+format=Μορφοποίηση
+forum=Συζήτηση/Φόρουμ βοήθειας
+fromTemplate=Από Υπόδειγμα
+fromText=Από Κείμενο
+general=Γενικά
+global=Συνολικά
+gradient=Ντεγκραντέ
+gradientColor=Χρώμα
+grid=Πλέγμα
+group=Ομάδα
+guides=Οδηγοί
+hateApp=I hate draw.io
+height=Ύψος
+help=Βοήθεια
+helpTranslate=Βοηθήστε μας να μεταφράσουμε αυτή την εφαρμογή
+hide=Απόκρυψη
+home=Αρχική
+horizontal=Οριζόντια
+horizontalFlow=Οριζόντια Ροή
+horizontalTree=Οριζόντιο δέντρο
+image=Εικόνα
+images=Εικόνες
+inline=Εσωτερικό γραμμής
+import=Εισαγωγή
+invalidOrMissingFile=Μη έγκυρο ή ανύπαρκτο αρχείο
+italic=Πλάγια
+landscape=Τοποθεσία
+layout=Σχεδιασμός
+left=Αριστερά
+leftAlign=Στοίχιση Αριστερά
+line=Γραμμή
+lineend=Τέλος Γραμμής
+linestart=Αρχή Γραμμής
+linewidth=Μήκος Γραμμής
+loading=Φόρτωση
+loveApp=I love draw.io
+manual=Manual
+middle=Μέσο
+moreResults=Περισσότερα Αποτελέσματα
+moreShapes=Περισσότερα Σχήματα
+move=Μετακίνηση
+navigation=Πλοήγηση
+new=Νέο
+noColor=Χωρίς χρώμα
+noFiles=Δεν υπάρχει αρχείο
+noMoreResults=Δεν Υπάρχουν Άλλα Αποτελέσματα
+none=Κανένα
+noResultsFor=Δεν υπάρχουν αποτελέσματα για '{1}'
+north=Βοράς
+notConnected=Δεν έγινε σύνδεση
+ok=Εντάξει
+opacity=Διαφάνεια
+open=Άνοιγμα
+openArrow=Άνοιγμα Τόξου
+openFile=Άνοιγμα αρχείου
+openLink=Άνοιγμα συνδέσμου
+openInNewWindow=Άνοιγμα σε νέο παράθυρο
+openSupported=Το υποστηριζόμενο είδος αρχείων που αποθηκεύει αυτό το λογισμικό είναι .XML
+options=Επιλογές
+organic=Οργανικό
+orthogonal=Ορθογώνιο
+oval=Ωοειδές
+pages=Σελίδες
+pageView=Προβολή Σελίδας
+pageSetup=Ρύθμιση Σελίδας
+pageScale=Κλίμακα Σελίδας
+pan=Πανοραμικό
+paperSize=Μέγεθος Χαρτιού
+paste=Επικόλληση
+perimeter=Περίμετρος
+plain=Απλό
+position=Θέση
+posterPrint=Εκτύπωση Αφίσας
+preview=Προεπισκόπηση
+print=Εκτύπωση
+readOnly=Read-only
+reconnecting=Επανασύνδεση
+redo=Επανάληψη
+removeFromGroup=Απομάκρυνση από ομάδα
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} υπάρχει ήδη. Θέλετε να το αντικαταστήσετε;
+replaceExistingDrawing=Αντικατάσταση υπάρχουσας σχεδίασης
+reset=Επαναφορά
+resize=Αλλαγή μεγέθους
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Δεξιά
+rightAlign=Στοίχιση Δεξιά
+rotate=Περίστρεψε
+rotation=Περιστροφή
+rounded=Στογγυλεμένο
+save=Αποθήκευση
+saveAs=Αποθήκευση ως
+saved=Αποθηκεύτηκε
+saving=Γίνεται αποθήκευση
+scrollbars=Μπάρες κύλησης
+search=Αναζήτηση
+selectAll=Επιλογή Όλων
+selectEdges=Επιλογή Άκρων
+selectFont=Επιλογή γραμματοσειράς
+selectVertices=Επιλογή Κορυφών
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Ορισμός ως αρχικής άκρης
+shadow=Σκιά
+shape=Σχήμα
+share=Κοινοποίηση
+shareLink=Σύνδεση κοινής επεξεργασίας
+sharingServerNotice=Σημείωση: Πειραματικό χαρακτηριστικό. Χρησιμοποιήστε το με δική σας ευθύνη.
+sharingServerReady=Ο κοινός διακομιστής είναι έτοιμος.
+sharingServerUnavailable=Ο κοινός διακομιστής δεν είναι διαθέσιμος.
+signOut=Έξοδος
+size=Μέγεθος
+sourceSpacing=Απόσταση Πηγής
+south=Νότια
+spacing=Απόσταση
+straight=Ευθεία
+strokeColor=Χρώμα γραμμής
+style=Στυλ
+support=Support
+targetSpacing=Απόσταση Στόχου
+text=Κείμενο
+textAlignment=Στοίχιση Κειμένου
+textOpacity=Διαφάνεια Κειμένου
+tilt=Tilt
+toBack=Πίσω
+toFront=Μπροστά
+tooltips=Βοήθεια εργαλείων
+top=Κορυφή
+topAlign=Στοίχιση στην Κορυφή
+transparent=Διαφανές
+underline=Υπογράμμιση
+undo=Αναίρεση
+ungroup=Απο-ομαδοποίηση
+updatingDocument=Ενημέρωση Εγγράφου. Παρακαλούμε περιμένετε...
+updatingSelection=Ενημέρωση Επιλογής. Παρακαλούμε περιμένετε...
+url=URL
+userLoggedOut=Η συνεδρία σας ολοκληρώθηκε. Για να αποθηκεύσετε την μη αποθηκευμένη εργασία σας, θα πρέπει να κάνετε εισαγωγή στον λογαριασμό σας Google ως
+vertical=Κάθετο
+verticalFlow=Κάθετη Ροή
+verticalTree=Κάθετο δέντρο
+view=Προβολή
+west=Δυτικά
+width=Μήκος
+wordWrap=Word wrap
+zoom=Ζουμ
+zoomIn=Ζουμ προς τα Μέσα
+zoomOut=Ζουμ προς τα Έξω
diff --git a/public/assets/plugins/mxgraph/resources/dia_es-AR.txt b/public/assets/plugins/mxgraph/resources/dia_es-AR.txt
new file mode 100644
index 0000000..747b9a9
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_es-AR.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=Acerca de draw.io
+access_denied=Acceso negado
+actualSize=Tamaño real
+addToExistingDrawing=Añadir al dibujo existente
+addWaypoint=Add waypoint
+align=Alinear
+alignment=Alineación
+allChangesLost=¡Se perderán todos los cambios!
+alreadyConnected=Los nodos ya están conectados
+apply=Aplicar
+arrange=Organizar
+appNotInstalledAlert=Aplicación no instalada. Por favor, installe draw.io en la Tienda Virtual de Chrome e intente nuevamente.
+appNotInstalledStatus=Aplicación no instalada.
+arrow=Flecha
+arrows=Flechas
+automatic=Automatic
+autosize=Tamaño automático
+backgroundColor=Color de fondo
+basic=Básico
+blankDrawing=Dibujo en blanco
+block=Bloquear
+bold=Negrita
+borderColor=Color de borde
+borderWidth=Ancho de borde
+bottom=Abajo
+bottomAlign=Alineación hacia abajo
+cancel=Cancelar
+center=Centrar
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Cambiar orientación
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Círculo
+classic=Clásico
+clipart=Imágenes prediseñadas
+close=Cerrar
+collapse=Minimizar
+collapse-expand=Minimizar/Maximizar
+connect=Conectar
+connecting=Conectando
+connectWithDrive=Conectar con Google Drive
+connection=Conexión
+containsValidationErrors=Contiene errores de validación
+copy=Copiar
+copyConnect=Copy on connect
+copyOfDrawing=Copia del dibujo
+curved=Curved
+custom=Personalizar
+cut=Cortar
+dashed=Con línea de puntos
+delete=Borrar
+diamond=Diamante
+diamondThin=Diamante (Fino)
+didYouKnow=¿Sabía que...
+direction=Dirección
+done=Hecho
+doubleClickOrientation=Hacer doble clic para cambiar la orientación
+drawing=Dibujo{1}
+drawingEmpty=El dibujo está vacío
+drawingTooLarge=El dibujo es muy grande
+duplicate=Duplicar
+east=Este
+edit=Editar
+editLink=Editar enlace
+embed=Insertar
+embedNotice=Agregar esto una vez al final de la página
+enterGroup=Ingresar grupo
+enterValue=Ingresar valor
+entityRelation=Relación de la entidad
+error=Error
+errorLoadingFile=Error en la carga del archivo
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error al guardar el archivo
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Salir del grupo
+expand=Maximizar
+export=Exportar
+failedToSaveTryReconnect=Error al guardar, tratando de reconectar
+featureRequest=Feature Request
+feedback=Feedback
+file=Archivo
+filename=Nombre del archivo
+fileNotFound=Archivo no encontrado
+fileNotLoaded=Archivo no cargado
+fileNotSaved=Archivo no guardado
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Color de relleno
+fit=Ajustar
+fitPage=Ajustar página
+fitPageWidth=Ajustar ancho de página
+fitWindow=Ajustar ventana
+flipH=Voltear horizontalmente
+flipV=Voltear verticalmente
+fontColor=Color de fuente
+fontFamily=Familia de fuente
+fontSize=Tamaño de fuente
+format=Formato
+forum=Discusión/Foro de ayuda
+fromTemplate=Desde plantilla
+fromText=Desde texto
+general=General
+global=Global
+gradient=Degradado
+gradientColor=Color
+grid=Grilla
+group=Agrupar
+guides=Guías
+hateApp=I hate draw.io
+height=Altura
+help=Ayuda
+helpTranslate=Ayúdanos a traducir esta aplicación
+hide=Ocultar
+home=Inicio
+horizontal=Horizontal
+horizontalFlow=Flujo horizontal
+horizontalTree=Árbol horizontal
+image=Imagen
+images=Imágenes
+inline=Dentro de la línea
+import=Importar
+invalidOrMissingFile=Archivo inválido o no encontrado
+italic=Cursiva
+landscape=Paisaje
+layout=Diseño
+left=Izquierda
+leftAlign=Alineación hacia la izquierda
+line=Línea
+lineend=Final de línea
+linestart=Comienzo de línea
+linewidth=Ancho de línea
+loading=Cargando
+loveApp=I love draw.io
+manual=Manual
+middle=Medio
+moreResults=Más resultados
+moreShapes=Más formas
+move=Mover
+navigation=Navegación
+new=Nuevo
+noColor=Sin color
+noFiles=No hay archivos
+noMoreResults=No hay más resultados
+none=Ninguno
+noResultsFor=Sin resultados para {1}
+north=Norte
+notConnected=Sin conexión
+ok=Bien
+opacity=Opacidad
+open=Abrir
+openArrow=Abrir flecha
+openFile=Abrir archivo
+openLink=Abrir enlace
+openInNewWindow=Abrir en una ventana nueva
+openSupported=El formato reconocido es el de archivos .XML guardados de este software.
+options=Opciones
+organic=Orgánico
+orthogonal=Ortogonal
+oval=Óvalo
+pages=Páginas
+pageView=Vista de página
+pageSetup=Configuración de página
+pageScale=Escala de página
+pan=Panorama
+paperSize=Tamaño de papel
+paste=Pegar
+perimeter=Perímetro
+plain=Sencillo
+position=Ubicación
+posterPrint=Impresión de póster
+preview=Vista preliminar
+print=Imprimir
+readOnly=Read-only
+reconnecting=Reconectando
+redo=Rehacer
+removeFromGroup=Quitar del grupo
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} ya existe. ¿Desea reemplazarlo?
+replaceExistingDrawing=Reemplazar el dibujo existente
+reset=Resetear
+resize=Redimensionar
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Derecha
+rightAlign=Alineación hacia la derecha
+rotate=Rotar
+rotation=Rotación
+rounded=Redondeado
+save=Guardar
+saveAs=Guardar como
+saved=Guardado
+saving=Guardando
+scrollbars=Barras de desplazamiento
+search=Búsqueda
+selectAll=Seleccionar todo
+selectEdges=Seleccionar bordes
+selectFont=Seleccionar una fuente
+selectVertices=Seleccionar los vértices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Establecer como borde predeterminado.
+shadow=Sombra
+shape=Forma
+share=Compartir
+shareLink=Enlace para edición compartida.
+sharingServerNotice=Aviso: característica experimental. ¡Utilizar bajo su propia responsabilidad!
+sharingServerReady=El servidor para compartir está listo.
+sharingServerUnavailable=El servidor para compartir no está disponible.
+signOut=Desconectarse
+size=Tamaño
+sourceSpacing=Espaciado de la fuente
+south=Sur
+spacing=Espaciado 
+straight=Derecho
+strokeColor=Color de línea
+style=Estilo
+support=Support
+targetSpacing=Espaciado del objetivo
+text=Texto
+textAlignment=Alineación del texto
+textOpacity=Opacidad del texto
+tilt=Tilt
+toBack=Hacia atrás
+toFront=Hacia adelante
+tooltips=Herramientas de ayuda
+top=Arriba
+topAlign=Alineación hacia arriba
+transparent=Transparente
+underline=Subrayar
+undo=Deshacer
+ungroup=Desagrupar
+updatingDocument=Actualizando el documento. Espere...
+updatingSelection=Actualizando la selección. Espere...
+url=URL
+userLoggedOut=Su sesión ha finalizado. Para guardar el trabajo no guardado debe ingresar en su cuenta de Google como 
+vertical=Vertical
+verticalFlow=Flujo vertical
+verticalTree=Árbol vertical
+view=Vista
+west=Oeste
+width=Ancho
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Acercar
+zoomOut=Alejar
diff --git a/public/assets/plugins/mxgraph/resources/dia_es.txt b/public/assets/plugins/mxgraph/resources/dia_es.txt
new file mode 100644
index 0000000..0029331
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_es.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=Acerca de draw.io
+access_denied=Acceso denegado
+actualSize=Tamaño real
+addToExistingDrawing=Añadir al dibujo existente
+addWaypoint=Add waypoint
+align=Alinear
+alignment=Alineación
+allChangesLost=¡Se perderán todos los cambios!
+alreadyConnected=Los nodos ya están conectados
+apply=Aplicar
+arrange=Arrange
+appNotInstalledAlert=Aplicación no instalada. Por favor, instala draw.io en la Tienda Virtual de Chrome e inténtalo de nuevo
+appNotInstalledStatus=Aplicación no instalada.
+arrow=Flecha
+arrows=Flechas
+automatic=Automatic
+autosize=Ajustar Tamaño Automáticamente
+backgroundColor=Color de fondo
+basic=Básico
+blankDrawing=Blank Drawing
+block=Bloque
+bold=Negrita
+borderColor=Color de Borde
+borderWidth=Borderwidth
+bottom=Abajo
+bottomAlign=Abajo
+cancel=Cancelar
+center=Centrado
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Cambiar Orientación
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Círculo
+classic=Clásico
+clipart=Clipart
+close=Cerrar
+collapse=Collapse
+collapse-expand=Minimizar/Maximizar
+connect=Conectar
+connecting=Conectando
+connectWithDrive=Connect with Google Drive
+connection=Conexión
+containsValidationErrors=Contiene errores de validación
+copy=Copiar
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Personalizar
+cut=Cortar
+dashed=Punteado
+delete=Eliminar
+diamond=Diamante
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Dirección
+done=Finalizado
+doubleClickOrientation=Doble clic para cambiar la orientación
+drawing=Dibujo{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Dibujo demasiado grande
+duplicate=Duplicate
+east=Este
+edit=Editar
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Ingresar Valor
+entityRelation=Relacionar Entidad
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Exportar
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=Archivo
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Color de Relleno
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Ajustar a la Ventana
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Color de Fuente
+fontFamily=Font family
+fontSize=Font size
+format=Formato
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Total
+gradient=Gradient
+gradientColor=Color
+grid=Cuadrícula
+group=Agrupar
+guides=Guides
+hateApp=I hate draw.io
+height=Alto
+help=Ayuda
+helpTranslate=Help us translate this application
+hide=Ocultar
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Archivo inválido o desconocido
+italic=Cursiva
+landscape=Orientación de Paisaje
+layout=Layout
+left=Izquierda
+leftAlign=Izquierda
+line=Línea
+lineend=Final de línea
+linestart=Inicio de línea
+linewidth=Ancho de línea
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Medio
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=Nuevo
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=Nada
+noResultsFor=No results for '{1}'
+north=Norte
+notConnected=Not connected
+ok=Correcto
+opacity=Opacidad
+open=Abrir
+openArrow=Abrir
+openFile=Abrir Archivo
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Opciones
+organic=Orgánico
+orthogonal=Orthogonal
+oval=Óvalo
+pages=Páginas
+pageView=Diseño de Página
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Tamaño del Papel
+paste=Pegar
+perimeter=Perímetro
+plain=Simple
+position=Posición
+posterPrint=Imprimir Poster
+preview=Vista preliminar
+print=Imprimir
+readOnly=Read-only
+reconnecting=Reconectando
+redo=Rehacer
+removeFromGroup=Quitar del Grupo
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} Ya existe. ¿Desea reemplazarlo?
+replaceExistingDrawing=Reemplazar con el dibujo existente
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Derecha
+rightAlign=Derecha
+rotate=Rotar
+rotation=Rotación
+rounded=Redondeado
+save=Guardar
+saveAs=Guardar Como
+saved=Guardado
+saving=Guardando
+scrollbars=Scrollbars
+search=Search
+selectAll=Seleccionar Todo
+selectEdges=Seleccionar Aristas
+selectFont=Seleccione un tipo de letra
+selectVertices=Seleccionar  Vértices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Sombra
+shape=Forma
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Tamaño
+sourceSpacing=Espacio entre Fuentes
+south=Sur
+spacing=Espaciado
+straight=Recto
+strokeColor=Color de Línea
+style=Estilo
+support=Support
+targetSpacing=Espacio entre Objetivos
+text=Text
+textAlignment=Alineación de Texto
+textOpacity=Opacidad del Texto
+tilt=Tilt
+toBack=Ir hacia atrás
+toFront=Ir hacia adelante
+tooltips=Tooltips
+top=Arriba
+topAlign=Arriba
+transparent=Transparent
+underline=Subrayado
+undo=Deshacer
+ungroup=Desagrupar
+updatingDocument=Actualizando Documento. Por favor espere..
+updatingSelection=Actualizando Selección. Por favor espere..
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=Oeste
+width=Ancho
+wordWrap=Word wrap
+zoom=Ampliar
+zoomIn=Acercar
+zoomOut=Alejar
diff --git a/public/assets/plugins/mxgraph/resources/dia_et.txt b/public/assets/plugins/mxgraph/resources/dia_et.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_et.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_fa.txt b/public/assets/plugins/mxgraph/resources/dia_fa.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_fa.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_fi.txt b/public/assets/plugins/mxgraph/resources/dia_fi.txt
new file mode 100644
index 0000000..693f99b
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_fi.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=Tietoja draw.io-sovelluksesta
+access_denied=Pääsy evätty
+actualSize=Oikea koko
+addToExistingDrawing=Lisää olemassa olevaan piirustukseen
+addWaypoint=Add waypoint
+align=Tasaus
+alignment=Sovita
+allChangesLost=Kaikki muutokset menetään!
+alreadyConnected=Solmut ovat yhdistetty jo
+apply=Käytä
+arrange=Sovita
+appNotInstalledAlert=Sovellusta ei asennettu. Ole hyvä ja asenna draw.io-sovellus Chrome Web Storessa ja yritä uudelleen.
+appNotInstalledStatus=Sovellusta ei ole asennettu
+arrow=Nuoli
+arrows=Nuolet
+automatic=Automatic
+autosize=Automaattinen koko
+backgroundColor=Taustaväri
+basic=Tavalliset
+blankDrawing=Tyhjä piirustus
+block=Blokki
+bold=Lihavoitu
+borderColor=Reunan väri
+borderWidth=Reunan leveys 
+bottom=Alasivu
+bottomAlign=Alasivun tasaus 
+cancel=Peruuta
+center=Keskusta
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Vaihda suuntaa
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Ympyrä
+classic=Klassinen
+clipart=Clipart
+close=Sulje
+collapse=Tiivistä
+collapse-expand=Tiivistä/Laajenna
+connect=Yhdistä
+connecting=Yhdistetään
+connectWithDrive=Yhdistä Google Driveen
+connection=Yhteys
+containsValidationErrors=Sisältää kelpoisuustarkistusvirheitä
+copy=Kopioi
+copyConnect=Copy on connect
+copyOfDrawing=Kopio piirustuksesta
+curved=Curved
+custom=Mukautettu
+cut=Leikkaa
+dashed=Viivamerkit
+delete=Poista
+diamond=Timantti
+diamondThin=Timantti (ohut)
+didYouKnow=Tiesitkö, että...
+direction=Suunta
+done=Valmis
+doubleClickOrientation=Tupla-klikkaa muuttaaksesi suuntaa
+drawing=Piirustus{1}
+drawingEmpty=Piirustus on tyhjä
+drawingTooLarge=Piirustus on liian iso
+duplicate=Jäljennä
+east=Itä
+edit=Muokkaa
+editLink=Muokkaa linkkiä
+embed=Upota
+embedNotice=Lisää tämä sivun loppuun
+enterGroup=Syötä ryhmä
+enterValue=Syötä arvo 
+entityRelation=Kokonaisuussuhde
+error=Virhe
+errorLoadingFile=Virhe tiedoston lataamisessa
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Virhe tiedoston tallentamisessa
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Poistu ryhmästä
+expand=Laajenna
+export=Vie
+failedToSaveTryReconnect=Tallentaminen epäonnistui, yritä yhdistämistä myöhemmin uudelleen
+featureRequest=Feature Request
+feedback=Feedback
+file=Tiedosto
+filename=Tiedostonimi
+fileNotFound=Tiedostoa ei löydetty
+fileNotLoaded=Tiedostoa ei ladattu
+fileNotSaved=Tiedostoa ei tallennettu
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Täyteväri
+fit=Sovita
+fitPage=Sovita sivu
+fitPageWidth=Sovita sivun leveys
+fitWindow=Sovita ikkuna
+flipH=Käännä vaakasuunnassa
+flipV=Käännä pystysuunnassa
+fontColor=Fontin väri
+fontFamily=Fonttiperhe
+fontSize=Fontin koko
+format=Muoto
+forum=Keskustelu-/Apu-foorumit
+fromTemplate=Mallipohjasta
+fromText=Tekstistä
+general=Yleinen
+global=Globaali
+gradient=Liukuvärjäys
+gradientColor=Väri
+grid=Ruudukko
+group=Ryhmitä
+guides=Apuviivat
+hateApp=I hate draw.io
+height=Korkeus
+help=Apu
+helpTranslate=Auta meitä kääntämään sovellus
+hide=Piilota
+home=Koti
+horizontal=Vaakasuunta
+horizontalFlow=Vaakasuuntainen vuo
+horizontalTree=Puunäkymä vaakasuunnassa
+image=Kuva
+images=Kuvat
+inline=Tekstinsisäinen
+import=Tuo
+invalidOrMissingFile=Epäkelvollinen tai puuttuva tiedosto
+italic=Kursivoitu
+landscape=Vaakakuva
+layout=Asettelu
+left=Vasen
+leftAlign=Vasen tasaus 
+line=Rivi
+lineend=Rivin loppu
+linestart=Rivin alku
+linewidth=Rivin leveys
+loading=Ladataan
+loveApp=I love draw.io
+manual=Manual
+middle=Keskellä
+moreResults=Lisää tuloksia
+moreShapes=Lisää muotoja
+move=Liikuta 
+navigation=Suuntaaminen
+new=Uusi
+noColor=Ei väriä
+noFiles=Ei tiedostoja
+noMoreResults=Ei enempää tuloksia
+none=Ei yhtään
+noResultsFor=Ei tuloksia haulle '{1}'
+north=Pohjoinen
+notConnected=Ei ole yhdistetty
+ok=OK
+opacity=Peittävyys
+open=Avaa
+openArrow=Avaa nuoli
+openFile=Avaa tiedosto
+openLink=Avaa linkki
+openInNewWindow=Avaa uuteen ikkunaan
+openSupported=Tuettu formaatti on .XML-tiedostot, jotka ovat tallennettu tällä ohjelmalla
+options=Vaihtoehdot
+organic=Orgaaninen
+orthogonal=Suorakulma
+oval=Ovaali
+pages=Sivut
+pageView=Sivun katselu
+pageSetup=Sivun asetukset
+pageScale=Sivuasteikko
+pan=Panoraama
+paperSize=Paperin koko
+paste=Liitä
+perimeter=Perimetri
+plain=Käsittelemätön
+position=Paikka
+posterPrint=Julistetulostus
+preview=Esikatsele
+print=Tulosta
+readOnly=Read-only
+reconnecting=Yhdistetään uudelleen
+redo=Toista
+removeFromGroup=Poista ryhmityksestä
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} on jo olemassa. Haluatko korvata sen?
+replaceExistingDrawing=Korvaa olemassa oleva piirustus
+reset=Tyhjennä
+resize=Muuta koko
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Oikea
+rightAlign=Oikea tasaus
+rotate=Kierrä
+rotation=Kiertäminen
+rounded=Pyöristetty
+save=Tallenna
+saveAs=Tallenna nimellä
+saved=Tallennettu
+saving=Tallennetaan
+scrollbars=Vierityspalkit
+search=Etsi
+selectAll=Valitse kaikki
+selectEdges=Valitse reunat
+selectFont=Valitse fontti
+selectVertices=Valitse verteksit
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Aseta oletusreunaksi
+shadow=Varjostus
+shape=Muoto
+share=Jaa
+shareLink=Linkki jaettuun muokkaukseen
+sharingServerNotice=Huomio: Kokeellisia ominaisuuksia. Käyttäminen omalla vastuulla!
+sharingServerReady=Jakopalvelin on nyt valmis.
+sharingServerUnavailable=Jakopalvelin ei ole saatavilla.
+signOut=Kirjaudu ulos
+size=Koko
+sourceSpacing=Lähteen väli
+south=Etelä 
+spacing=Väli
+straight=Suora
+strokeColor=Rivin väri
+style=Tyyli
+support=Support
+targetSpacing=Kohteen väli
+text=Teksti
+textAlignment=Tekstin sovittaminen
+textOpacity=Tekstin peittävyys 
+tilt=Tilt
+toBack=Taakse
+toFront=Eteen
+tooltips=Työkaluvihjeet
+top=Yläsivu
+topAlign=Yläsivun tasaus 
+transparent=Läpinäkyvä
+underline=Alleviivattu
+undo=Peruuta
+ungroup=Pura ryhmitys
+updatingDocument=Päivitetään dokumenttia. Ole hyvä ja odota...
+updatingSelection=Päivitetään valintaa. Ole hyvä ja odota...
+url=URL
+userLoggedOut=Istuntosi on päättynyt. Jotta voisit tallentaa tallentamattomat työsi, kirjaudu Google-tilillesi 
+vertical=Pystysuunta
+verticalFlow=Pystysuuntainen vuo
+verticalTree=Puunäkymä pystysuunnassa
+view=Katso
+west=Länsi
+width=Leveys 
+wordWrap=Word wrap
+zoom=Zoomaa
+zoomIn=Lähennä
+zoomOut=Loitonna
diff --git a/public/assets/plugins/mxgraph/resources/dia_fil.txt b/public/assets/plugins/mxgraph/resources/dia_fil.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_fil.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_fr.txt b/public/assets/plugins/mxgraph/resources/dia_fr.txt
new file mode 100644
index 0000000..704f1d8
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_fr.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=A propos de draw.io
+access_denied=Accès refusé
+actualSize=Taille réelle
+addToExistingDrawing=Ajouter au diagramme existant
+addWaypoint=Add waypoint
+align=Aligner
+alignment=Alignement
+allChangesLost=Toutes les modifications seront perdues!
+alreadyConnected=Nœuds déjà connectés
+apply=Appliquer
+arrange=Organiser
+appNotInstalledAlert=Application non installée. Merci d'installer Diagram.ly dans votre navigateur Chrome et d'essayer à nouveau.
+appNotInstalledStatus=Application non installée.
+arrow=Flèche
+arrows=Flèches
+automatic=Automatic
+autosize=Taille automatique
+backgroundColor=Couleur de fond
+basic=Basique
+blankDrawing=Diagramme vierge
+block=Bloc
+bold=Gras
+borderColor=Couleur de la bordure
+borderWidth=Largeur de la bordure
+bottom=En bas
+bottomAlign=Aligner en bas
+cancel=Annuler
+center=Centrer
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Modifier l’orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Cercle
+classic=Classique
+clipart=Clipart
+close=Fermer
+collapse=Réduire
+collapse-expand=Réduire-Developper
+connect=Connecter
+connecting=Connexion en cours
+connectWithDrive=Connect with Google Drive
+connection=Connexion
+containsValidationErrors=Contient des erreurs de validation
+copy=Copier
+copyConnect=Copy on connect
+copyOfDrawing=Copie d'un diagramme
+curved=Curved
+custom=Personnalisé
+cut=Couper
+dashed=Pointillé
+delete=Supprimer
+diamond=Losange
+diamondThin=Losange fin
+didYouKnow=Le savez vous...
+direction=Orientation
+done=Achevé
+doubleClickOrientation=Double-cliquer pour modifier l’orientation
+drawing=Diagramme{1}
+drawingEmpty=Le diagramme est vide
+drawingTooLarge=Le diagramme est trop grand
+duplicate=Dupliquer
+east=Est
+edit=Modifier
+editLink=Modifier le lien
+embed=Intégrer
+embedNotice=Ajouter ce code à la fin de votre page
+enterGroup=Entrer une valeur
+enterValue=Saisir une valeur
+entityRelation=Relation entre les éléments
+error=Erreur
+errorLoadingFile=Erreur au chargement du fichier
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Erreur à la sauvegarde du fichier
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Quitter le groupe
+expand=Developper
+export=Exporter
+failedToSaveTryReconnect=La sauvegarde à echouée, tentative de reconnexion
+featureRequest=Feature Request
+feedback=Feedback
+file=Fichier
+filename=Nom de fichier
+fileNotFound=Fichier non trouvé
+fileNotLoaded=Fichier non chargé
+fileNotSaved=Fichier non sauvegardé
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Couleur de remplissage
+fit=Ajuster
+fitPage=Ajuster à la page
+fitPageWidth=Ajuster à la largeur de la page
+fitWindow=Ajuster à la fenêtre
+flipH=Retourner horizontalement
+flipV=Retourner verticalement
+fontColor=Couleur de la police
+fontFamily=Police
+fontSize=Taille de la police
+format=Format
+forum=Forum d'aide
+fromTemplate=Depuis un modèle
+fromText=Depuis du texte
+general=Général
+global=Global
+gradient=Dégradé
+gradientColor=Couleur de dégradé
+grid=Grille
+group=Grouper
+guides=Guides
+hateApp=I hate draw.io
+height=Hauteur
+help=Aide
+helpTranslate=Aidez nous à traduire cette application
+hide=Masquer
+home=Accueil
+horizontal=Horizontal
+horizontalFlow=Flux horizontal
+horizontalTree=Arbre horizontal
+image=Image
+images=Images
+inline=Inline
+import=Importer
+invalidOrMissingFile=Fichier invalide ou manquant
+italic=Italique
+landscape=Paysage
+layout=Modèle
+left=Gauche
+leftAlign=Aligner à gauche
+line=Ligne
+lineend=Fin de la ligne
+linestart=Début de la ligne
+linewidth=Largeur de la ligne
+loading=Chargement
+loveApp=I love draw.io
+manual=Manual
+middle=Au milieu
+moreResults=Plus de résultats
+moreShapes=Plus d'icones
+move=Deplacer
+navigation=Navigation
+new=Nouveau
+noColor=Pas de couleur
+noFiles=Pas de fichiers
+noMoreResults=Pas d'autres résultats trouvés
+none=Aucun
+noResultsFor=Pas de résultats pour '{1}'
+north=Nord
+notConnected=Non connecté
+ok=OK
+opacity=Opacité
+open=Ouvrir
+openArrow=Ouvrir la flèche
+openFile=Ouvrir le fichier
+openLink=Ouvrir le lien
+openInNewWindow=Ouvrir dans une nouvelle fenêtre
+openSupported=Les fichiers supportés sont les fichiers XML sauvegardés depuis ce logiciel
+options=Options
+organic=Organique
+orthogonal=Orthogonale
+oval=Ovale
+pages=Pages
+pageView=Mise en page
+pageSetup=Paramètres de la page
+pageScale=Echelle de la page
+pan=Panoramique
+paperSize=Taille du papier
+paste=Coller
+perimeter=Périmètre
+plain=Brut
+position=Position
+posterPrint=Données de l’impression
+preview=Aperçu
+print=Imprimer
+readOnly=Read-only
+reconnecting=Reconnection
+redo=Refaire
+removeFromGroup=Retirer du groupe
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} existe déjà. Voulez-vous le remplacer?
+replaceExistingDrawing=Remplacer le diagramme existant
+reset=Reinistialiser
+resize=Redimensionner
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Droit
+rightAlign=Aligner à droite
+rotate=Pivoter
+rotation=Rotation
+rounded=Arrondi
+save=Enregistrer
+saveAs=Enregistrer sous
+saved=Enregistré
+saving=Enregistrement
+scrollbars=Barres de défilement
+search=Chercher
+selectAll=Tout sélectionner
+selectEdges=Selectionner les bordures
+selectFont=Sélectionner une police
+selectVertices=Sélectionner des sommets
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Définir comme bord par défaut
+shadow=Ombre
+shape=Forme
+share=Partager
+shareLink=Lien pour l'édition partagée
+sharingServerNotice=Note: Fonctionnalité experimentale.
+sharingServerReady=Le serveur de partage est fonctionnel
+sharingServerUnavailable=Le serveur de partage n'est pas disponible
+signOut=Se deconnecter
+size=Taille
+sourceSpacing=Espacement de la source
+south=Sud
+spacing=Espacement
+straight=Droit
+strokeColor=Couleur de la ligne
+style=Style
+support=Support
+targetSpacing=Espacement de la cible
+text=Texte
+textAlignment=Justifier le texte
+textOpacity=Opacité du texte
+tilt=Tilt
+toBack=Placer en dessous
+toFront=Placer au-dessus
+tooltips=Bulle d'information
+top=En haut
+topAlign=Aligner en haut
+transparent=Transparent
+underline=Souligné
+undo=Annuler
+ungroup=Dissocier
+updatingDocument=Mise à jour du document. Veuillez patienter...
+updatingSelection=Mise à jour de la sélection. Veuillez patienter...
+url=URL
+userLoggedOut=Votre session a expiré. Pour sauvegardé vos travaux en cours merci de vous reconnecter avec votre compte Google en tant que 
+vertical=Vertical
+verticalFlow=Flux vertical
+verticalTree=Arbre vertical
+view=Vue
+west=Ouest
+width=Largeur
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Agrandir
+zoomOut=Réduire
diff --git a/public/assets/plugins/mxgraph/resources/dia_gu.txt b/public/assets/plugins/mxgraph/resources/dia_gu.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_gu.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_he.txt b/public/assets/plugins/mxgraph/resources/dia_he.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_he.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_hi.txt b/public/assets/plugins/mxgraph/resources/dia_hi.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_hi.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_hr.txt b/public/assets/plugins/mxgraph/resources/dia_hr.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_hr.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_hu.txt b/public/assets/plugins/mxgraph/resources/dia_hu.txt
new file mode 100644
index 0000000..40fb543
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_hu.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=Draw.io névjegy
+access_denied=Hozzáférés megtagadva
+actualSize=Aktuális méret
+addToExistingDrawing=Add hozzá a meglévő rajzhoz
+addWaypoint=Add waypoint
+align=Igazít
+alignment=Igazítás
+allChangesLost=Elvesz minden változtatás!
+alreadyConnected=A csomók már összekapcsoltak
+apply=Alkalmaz
+arrange=Elrendezés
+appNotInstalledAlert=Az aplikáció nem lett telepítve. Kérem telepítse a Diagram.ly-t a Chrome Web Store-ban és próbálja újra.
+appNotInstalledStatus=Az aplikáció nem lett telepítve.
+arrow=Nyíl
+arrows=Nyilak
+automatic=Automatic
+autosize=Automatikus méret
+backgroundColor=Háttérszín
+basic=Alapvető
+blankDrawing=Üres rajz
+block=Blokk
+bold=Félkövér
+borderColor=Keretszín
+borderWidth=Keret vastagság
+bottom=Alsó
+bottomAlign=Alsó igazítás
+cancel=Töröl
+center=Közép
+cannotLoad=A betöltési próbálkozások sikertelenek. Kérjük próbálja ismét kesőbb...
+cannotLogin=A bejelentkezési próbálkozások sikertelenek. Kérjük próbálja ismét később...
+changeOrientation=Irányultságváltoztatás
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Kör
+classic=Klasszikus
+clipart=Felhasználható grafikus elemek
+close=Becsuk
+collapse=Osszevon
+collapse-expand=Összevon/Bővít
+connect=Csatlakoztat
+connecting=Csatlakoztatás
+connectWithDrive=Csatlkakoztatás a Google Drive-val
+connection=Kapcsolat
+containsValidationErrors=Érvényesítési hibákat tartalmaz
+copy=Másol
+copyConnect=Másol kapcsoláskor
+copyOfDrawing=Rajz másolás
+curved=Curved
+custom=Egyéni
+cut=Vágj
+dashed=Szaggatott
+delete=Töröl
+diamond=Rombusz
+diamondThin=Rombusz (vékony)
+didYouKnow=Tudta-e...
+direction=Irány
+done=Befejez
+doubleClickOrientation=Dupla klikk az irányultság változtatásához
+drawing=Rajz{1}
+drawingEmpty=A rajz üres
+drawingTooLarge=A rajz túl nagy
+duplicate=Duplikát
+east=Kelet
+edit=Szerkeszt
+editLink=Linket szerkeszt
+embed=Beágyaz
+embedNotice=Egyszer hozzáadja ezt az oldal végére
+enterGroup=Csoportba be
+enterValue=Érték betáplálása
+entityRelation=Egyedkapcsolat
+error=Hiba
+errorLoadingFile=Hiba a fájl betáplálásakor
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Hiba a fájl mentésekor
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Csoportból kilép
+expand=Bővít
+export=Exportálás
+failedToSaveTryReconnect=Sikertelen mentés, próbáljon újrakapcsolódni
+featureRequest=Sajátosságok kérelmez
+feedback=Visszajelzés
+file=Fájl
+filename=Fájlnév
+fileNotFound=Fájl nem található
+fileNotLoaded=Fájl nincs betöltve
+fileNotSaved=Fájl nincs mentve
+fileOpenLocation=Hogyan szeretné nyitni ezt a fájlt?
+fillColor=Kitöltés szín
+fit=Illeszt
+fitPage=Oldalmérethez méretezett
+fitPageWidth=Oldalszélességhez alakít
+fitWindow=Ablakhoz méretezett
+flipH=Vízszintesen tükröz
+flipV=Merőlegesen tükröz
+fontColor=Betűkészlet szín
+fontFamily=Betűcsalád
+fontSize=Betűméret
+format=Formátum
+forum=Fórum
+fromTemplate=Sablonból
+fromText=Szövegből
+general=Általános
+global=Globális
+gradient=Gradiens
+gradientColor=Gradiens szín
+grid=Hálózat
+group=Csoportosít
+guides=Vezetők
+hateApp=Utálom a draw.io-t
+height=Magasság
+help=Súgó
+helpTranslate=Segítsen a program fordításában
+hide=Elrejt
+home=Otthon
+horizontal=Vízszintes
+horizontalFlow=Vízszintes folyam
+horizontalTree=Függőleges fa
+image=Kép
+images=Képek
+inline=Beépített
+import=Importál
+invalidOrMissingFile=Érvénytelen vagy hiányzó fájl
+italic=Dőlt
+landscape=Fekvő lap
+layout=Elrendezés
+left=Bal
+leftAlign=Bal igazítás
+line=Vonal
+lineend=Vonalvég
+linestart=Vonalkezdet
+linewidth=Vonalvastagság
+loading=Betöltés
+loveApp=Tetszik a draw.io
+manual=Manual
+middle=Közép
+moreResults=Több eredmény
+moreShapes=Több alakzat
+move=Mozgat
+navigation=Navigáció
+new=Új
+noColor=Szín nélkül
+noFiles=Fájlok nélkül
+noMoreResults=Nincs több eredmény
+none=Semmi
+noResultsFor=Nincs eredmény a {1}-hez
+north=Észak
+notConnected=Nincs csatlakoztatva
+ok=OK
+opacity=Fedőképesség
+open=Kinyit
+openArrow=Nyitott nyíl
+openFile=Fájlt kinyit
+openLink=Linket nyit
+openInNewWindow=Új ablakban nyit
+openSupported=A támogatott formátum .XML fájlok ebből a programból mentve
+options=Beállítások
+organic=Szerves
+orthogonal=Merőleges
+oval=Ovális
+pages=Oldalak
+pageView=Oldal elrendezés
+pageSetup=Oldal beállítás
+pageScale=Oldal méretarány
+pan=Pan
+paperSize=Oldalméret
+paste=Beilleszt
+perimeter=Perem
+plain=Egyszerű
+position=Pozíció
+posterPrint=Poszter nyomtatás
+preview=Előnézet
+print=Nyomtat
+readOnly=Read-only
+reconnecting=Újracsatlakoztatás
+redo=Helyrehoz
+removeFromGroup=Eltávolítás a csoportból
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} már létezik. Helyettesíti?
+replaceExistingDrawing=Helyettesiti a meglévő rajzot
+reset=Újrakezd
+resize=Atméretez
+retryingIn=Újrapróbálkozás {1} másodperc múlva
+retryingLoad=A betöltés sikertelen. Ujrapróbálkozás...
+retryingLogin=A bejelentkezési idő lejárt. Újrapróbálkozás...
+right=Jobb
+rightAlign=Jobb igazítás
+rotate=Forgat
+rotation=Forgatás
+rounded=Lekerekített
+save=Mentés
+saveAs=Mentés másként
+saved=Mentett
+saving=Mentés
+scrollbars=Gördítősávok
+search=Keresés
+selectAll=Mindent kijelöl
+selectEdges=Éleket kijelöl
+selectFont=Betűkészlet választás
+selectVertices=Csomók kijelölése
+sendMessage=Send
+sessionTimeoutOnSave=Az öm munkamenete ideje lejárt és szétkapcsolódott a Google Drive-tól. Nyomja meg az OK-t, hogy bejelentkezzen és mentse adatait.
+setAsDefaultEdge=Alapértelmezett él bejelölése
+shadow=Árnyék
+shape=Alakzat
+share=Osztás
+shareLink=Link osztása
+sharingServerNotice=Megjegyzés: kisérleti eszköz. Saját felelősségre használja!
+sharingServerReady=Osztási szerver kész
+sharingServerUnavailable=Osztási szerver elérhetetlen
+signOut=Kijelentkezés
+size=Méret
+sourceSpacing=Forrás térköz
+south=Dél
+spacing=Térköz
+straight=Egyenes
+strokeColor=Vonal szín
+style=Stílus
+support=Support
+targetSpacing=Cél térköz
+text=Szöveg
+textAlignment=Szöveg igazítása
+textOpacity=Szöveg fedőképessége
+tilt=Tilt
+toBack=Hátra küld
+toFront=Előre hoz
+tooltips=Helyi súgók
+top=Felső
+topAlign=Felső igazítás
+transparent=Átlátszó
+underline=Aláhúz
+undo=Visszavon
+ungroup=Szétválaszt
+updatingDocument=Dokumentum frissítése. Kérem várjon...
+updatingSelection=Kiválasztás frissítése. Kérem várjon...
+url=URL
+userLoggedOut=Az ön munkafázisa befejeződött. A menteni akarja mentetlen munkáját, kérem jelentkezzen be mint
+vertical=Merőleges
+verticalFlow=Merőleges folyam
+verticalTree=Merőleges fa
+view=Nézet
+west=Nyugat
+width=Szélesség
+wordWrap=Word wrap
+zoom=Nagyitás
+zoomIn=Megnagyít
+zoomOut=Lekicsinyít
diff --git a/public/assets/plugins/mxgraph/resources/dia_id.txt b/public/assets/plugins/mxgraph/resources/dia_id.txt
new file mode 100644
index 0000000..9366284
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_id.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=Tentang draw.io
+access_denied=Akses ditolak
+actualSize=Ukuran Aktual
+addToExistingDrawing=Tambah ke gambar yang ada
+addWaypoint=Add waypoint
+align=Rata
+alignment=Perataan
+allChangesLost=Semua perubahan akan hilang!
+alreadyConnected=Node-node telah terhubung
+apply=Terapkan
+arrange=Atur
+appNotInstalledAlert=App belum diinstalasi. Pasang draw.io dalam Chrome Web Store lalu coba lagi.
+appNotInstalledStatus=App belum diinstalasi.
+arrow=Panah
+arrows=Panah-panah
+automatic=Automatic
+autosize=Ukuran Otomatis
+backgroundColor=Warna Latar
+basic=Dasar
+blankDrawing=Gambar Kosong
+block=Blok
+bold=Tebal
+borderColor=Warna border
+borderWidth=Lebar border
+bottom=Bawah
+bottomAlign=Rata Bawah
+cancel=Batal
+center=Tengahkan
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Ubah Orientasi
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Lingkaran
+classic=Klasik
+clipart=Grafik Klip
+close=Tutup
+collapse=Persempit
+collapse-expand=Perlebar/Persempit
+connect=Hubungi
+connecting=Menghubungi
+connectWithDrive=Hubungi Google Drive
+connection=Koneksi
+containsValidationErrors=Berisi error validasi
+copy=Salin
+copyConnect=Copy on connect
+copyOfDrawing=Salinan Gambar
+curved=Curved
+custom=Kustom
+cut=Potong
+dashed=Bergaris
+delete=Hapus
+diamond=Permata
+diamondThin=Permata (Tipis)
+didYouKnow=Tahukah anda...
+direction=Arah
+done=Selesai
+doubleClickOrientation=Klik ganda untuk ubah orientasi
+drawing=Gambar {1}
+drawingEmpty=Gambar kosong
+drawingTooLarge=Gambar terlalu besar
+duplicate=Duplikat
+east=Timur
+edit=Edit
+editLink=Edit tautan
+embed=Embed
+embedNotice=Tambah sekali ke akhir halaman
+enterGroup=Masukkan grup
+enterValue=Masukkan nilai
+entityRelation=Relasi Entitas
+error=Error
+errorLoadingFile=Error memuat file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error menyimpan file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Keluar Grup
+expand=Perluas
+export=Ekspor
+failedToSaveTryReconnect=Gagal menyimpan, coba menghubungi ulang
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Nama file
+fileNotFound=File tidak ditemukan
+fileNotLoaded=File tidak dimuat
+fileNotSaved=File tidak disimpan
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Isi warna
+fit=Paskan
+fitPage=Paskan dengan halaman
+fitPageWidth=Paskan dengan lebar halaman
+fitWindow=Paskan dengan Jendela
+flipH=Balik Horisontal
+flipV=Balik Vertikal
+fontColor=Warna font
+fontFamily=Kumpulan font
+fontSize=Ukuran font
+format=Format
+forum=Forum Diskusi/Bantuan
+fromTemplate=Dari Templat
+fromText=Dari Teks
+general=Umum
+global=Global
+gradient=Gradien
+gradientColor=Warna
+grid=Kisi
+group=Buat Grup
+guides=Panduan
+hateApp=I hate draw.io
+height=Tinggi
+help=Bantuan
+helpTranslate=Bantu kami menerjemahkan aplikasi ini
+hide=Sembunyi
+home=Beranda
+horizontal=Horisontal
+horizontalFlow=Alur Horisontal
+horizontalTree=Pohon Horisontal
+image=Gambar
+images=Gambar-gambar
+inline=Sebaris
+import=Impor
+invalidOrMissingFile=File tidak valid atau hilang
+italic=Miring
+landscape=Lansekap
+layout=Susunan
+left=Kiri
+leftAlign=Rata Kiri
+line=Garis
+lineend=Garis Awal
+linestart=Garis Akhir
+linewidth=Lebar garis
+loading=Memuat
+loveApp=I love draw.io
+manual=Manual
+middle=Pertengahan
+moreResults=Hasil Lainnya
+moreShapes=Bentuk Lainnya
+move=Pindah
+navigation=Navigasi
+new=Baru
+noColor=Tidak ada warna
+noFiles=Tidak ada file
+noMoreResults=Tidak Ada Hasil Lain
+none=Tidak ada
+noResultsFor=Tidak ada hasil untuk '{1}'
+north=Utara
+notConnected=Tidak tersambung
+ok=OK
+opacity=Opasitas
+open=Buka
+openArrow=Panah Terbuka
+openFile=Buka file
+openLink=Buka tautan
+openInNewWindow=Buka di jendela baru
+openSupported=Format didukung adalah file .XML yang disimpan dari software ini
+options=Opsi
+organic=Organik
+orthogonal=Ortogonal
+oval=Oval
+pages=Halaman-Halaman
+pageView=Tampilan Halaman
+pageSetup=Pengaturan Halaman
+pageScale=Skala Halaman
+pan=Pan
+paperSize=Ukuran Kertas
+paste=Sisip
+perimeter=Perimeter
+plain=Polos
+position=Posisi
+posterPrint=Cetak Poster
+preview=Pracetak
+print=Cetak
+readOnly=Read-only
+reconnecting=Menghubungi kembali
+redo=Ulangi
+removeFromGroup=Hapus dari grup
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} sudah ada. Anda ingin menimpanya?
+replaceExistingDrawing=Hapus gambar yang ada
+reset=Setel Ulang
+resize=Ubah ukuran
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Kanan
+rightAlign=Rata Kanan
+rotate=Putar
+rotation=Rotasi
+rounded=Bulat
+save=Simpan
+saveAs=Simpan Sebagai
+saved=Tersimpan
+saving=Menyimpan
+scrollbars=Baris Gulung
+search=Cari
+selectAll=Pilih Semua
+selectEdges=Pilih Tepi
+selectFont=Pilih font
+selectVertices=Pilih Simpul
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Setel sebagai tepi standar
+shadow=Bayangan
+shape=Bentuk
+share=Bagikan
+shareLink=Tautan untuk editan bersama
+sharingServerNotice=Catatan: Fitur eksperimental. Risiko tidak ditanggung!
+sharingServerReady=Server bersama siap.
+sharingServerUnavailable=Server bersama tidak tersedia.
+signOut=Sign out
+size=Ukuran
+sourceSpacing=Spasi Sumber
+south=Selatan
+spacing=Spasi
+straight=Lurus
+strokeColor=Warna Garis
+style=Gaya
+support=Support
+targetSpacing=Spasi Target
+text=Teks
+textAlignment=Perataan Teks
+textOpacity=Opasitas Teks
+tilt=Tilt
+toBack=Ke Belakang
+toFront=Ke Depan
+tooltips=Tooltip
+top=Atas
+topAlign=Rata Atas
+transparent=Transparan
+underline=Garis Bawah
+undo=Batal
+ungroup=Lepas Grup
+updatingDocument=Memperbarui Dokumen. Silakan tunggu...
+updatingSelection=Memperbarui Pilihan. Silakan tunggu...
+url=URL
+userLoggedOut=Sesi anda telah berakhir. Silakan log in ke Google Account anda untuk menyimpan data.
+vertical=Vertikal
+verticalFlow=Arus Vertikal
+verticalTree=Pohon Vertikal
+view=Tampilan
+west=Barat
+width=Lebar
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Perbesar
+zoomOut=Perkecil
diff --git a/public/assets/plugins/mxgraph/resources/dia_it.txt b/public/assets/plugins/mxgraph/resources/dia_it.txt
new file mode 100644
index 0000000..5035120
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_it.txt
@@ -0,0 +1,385 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Accesso negato
+actualSize=Dimensione attuale
+addToExistingDrawing=Aggiungi al disegno esistente
+addWaypoint=Add waypoint
+align=Allinea
+alignment=Allineamento
+allChangesLost=Tutti i cambiamenti saranno persi!
+alreadyConnected=Nodi già connessi
+apply=Applica
+arrange=Sistema
+appNotInstalledAlert=App non installata. Per favore installa Diagram.ly dal Chrome Web Store e prova nuovamente.
+appNotInstalledStatus=App non installata.
+arrow=Freccia
+arrows=Frecce
+automatic=Automatic
+autosize=Autoridimensiona
+backgroundColor=Colore sfondo
+basic=Base
+blankDrawing=Disegno vuoto
+block=Freccia
+bold=Grassetto
+borderColor=Colore bordo
+borderWidth=Spessore bordo
+bottom=In basso
+bottomAlign=Allinea in basso
+cancel=Cancella
+center=Al centro
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Cambia orientamento
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circolo
+classic=Classica
+clipart=Clipart
+close=Chiudi
+collapse=Riduci
+collapse-expand=Riduci/Espandi
+connect=Connetti
+connecting=Connessione
+connectWithDrive=Connect with Google Drive
+connection=Connessione
+containsValidationErrors=Contiene errori di convalida
+copy=Copia
+copyConnect=Copy on connect
+copyOfDrawing=Copia del disegno
+curved=Curved
+custom=Personalizza
+cut=Taglia
+dashed=Barrato
+delete=Cancella
+diamond=Quadrata
+diamondThin=Diamante (fino)
+didYouKnow=Lo sapevi...
+direction=Direzione
+done=Fatto
+doubleClickOrientation=Doppio click per cambiare orientamento
+drawing=Disegno{1}
+drawingEmpty=Il disegno è vuoto
+drawingTooLarge=Il disegno è troppo grande
+duplicate=Duplica
+east=Est
+edit=Modifica
+editLink=Modifica link
+embed=Integra
+embedNotice=Aggiungi questa volta alla fine della pagina
+enterGroup=Inserisci gruppo
+enterValue=Inserisci valore
+entityRelation=Entità-relazione
+error=Errore
+errorLoadingFile=Errore nel caricamento del file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Errore nel salvataggio del file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Esci dal gruppo
+expand=Espandi
+export=Esporta
+failedToSaveTryReconnect=Impossibile salvare, riconnessione in corso
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Nome file
+fileNotFound=File non trovato
+fileNotLoaded=File non caricato
+fileNotSaved=File non salvato
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Colore di riempimento
+fit=Adatta
+fitPage=Una pagina
+fitPageWidth=Larghezza pagina
+fitWindow=Adatta alla finestra
+flipH=Inverti orizzontalmente
+flipV=Inverti verticalmente
+fontColor=Colore font
+fontFamily=Famiglia font
+fontSize=Dimensione font
+format=Formato
+forum=Forum discussioni/aiuto
+fromTemplate=Da modello
+fromText=Da testo
+general=Generale
+global=Globale
+gradient=Gradiente
+gradientColor=Colore
+grid=Griglia
+group=Raggruppa
+guides=Guide
+hateApp=I hate draw.io
+height=Altezza
+help=Aiuto
+helpTranslate=Help us translate this application
+hide=Nascondi
+home=Pagina iniziale
+horizontal=Orizzontale
+horizontalFlow=Flusso orizzontale
+horizontalTree=Albero orizzontale
+image=Immagine
+images=Immagini
+inline=In linea
+import=Importa
+invalidOrMissingFile=File mancante o non valido
+italic=Corsivo
+landscape=Panoramica
+layout=Layout
+left=A sinistra
+leftAlign=Allinea a sinistra
+line=Linea
+lineend=Fine linea
+linestart=Inizio linea
+linewidth=Spessore linea
+loading=Caricamento
+loveApp=I love draw.io
+manual=Manual
+middle=Al centro
+moreResults=Altri risultati
+moreShapes=Altre forme
+move=Sposta
+navigation=Navigazione
+new=Nuovo
+noColor=Nessun colore
+noFiles=Nessun file
+noMoreResults=Nessun altro risultato
+none=Nessuna
+noResultsFor=Nessun risultato per '{1}'
+north=Nord
+notConnected=Non connesso
+ok=OK
+opacity=Opacità
+open=Apri
+openArrow=Punta a freccia
+openFile=Apri File
+openLink=Apri link
+openInNewWindow=Apri in una nuova finestra
+openSupported=I formati supportati sono i file .XML salvati tramite questo software
+options=Options
+organic=Organico
+orthogonal=Ortogonale
+oval=Ovale
+pages=Pagine
+pageView=Vista pagina
+pageSetup=Impostazioni pagina
+pageScale=Misura pagina
+pan=Pan
+paperSize=Dimensione carta
+paste=Incolla
+perimeter=Perimetro
+plain=Semplice
+position=Posizione
+posterPrint=Stampa poster
+preview=Anteprima
+print=Stampa
+readOnly=Read-only
+reconnecting=Riconessione
+redo=Ripeti
+removeFromGroup=Rimuovi dal gruppo
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} esiste già. Vuoi sostituirlo?
+replaceExistingDrawing=Sostituisci il disegno esistente
+reset=Resetta
+resize=Ridimensiona
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=A destra
+rightAlign=Allinea a destra
+rotate=Ruota
+rotation=Rotazione
+rounded=Arrotondato
+save=Salva
+saveAs=Salva come
+saved=Salvato
+saving=Salvataggio
+scrollbars=Barra di scorrimento
+search=Cerca
+selectAll=Seleziona tutto
+selectEdges=Seleziona bordi
+selectFont=Scegli un font
+selectVertices=Seleziona vertici
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save.
+setAsDefaultEdge=Imposta come bordo predefinito
+shadow=Ombreggiato
+shape=Forma
+share=Condividi
+shareLink=Link per la modifica condivisa
+sharingServerNotice=Nota: Caratteristica sperimentale. Usala a tuo rischio!
+sharingServerReady=Il server di condivisione è pronto.
+sharingServerUnavailable=Il server di condivisione non è disponibile.
+signOut=Esci
+size=Dimensione
+sourceSpacing=Spaziatura origine
+south=Sud
+spacing=Spaziatura
+straight=Diritta
+strokeColor=Colore linea
+style=Stile
+support=Support
+targetSpacing=Spaziatura destinazione
+text=Testo
+textAlignment=Allineamento testo
+textOpacity=Opacità testo
+tilt=Tilt
+toBack=Porta dietro
+toFront=Porta davanti
+tooltips=Tooltip
+top=In alto
+topAlign=Allinea in alto
+transparent=Trasparente
+underline=Sottolineato
+undo=Annulla
+ungroup=Separa
+updatingDocument=Aggiornamento documento. Ti preghiamo di attendere...
+updatingSelection=Aggiornamento selezione. Ti preghiamo di attendere...
+url=URL
+userLoggedOut=La tua sessione è terminata. Per salvare il lavoro devi accedere al tuo account Google come
+vertical=Verticale
+verticalFlow=Flusso verticale
+verticalTree=Albero verticale
+view=Visualizza
+west=Ovest
+width=Profondità
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Ingrandisci
+zoomOut=Rimpicciolisci
+
+#Giuseppe Careri
+label=Label
+timeout=Timeout
+response=Response Timeout
+digit=Max Digit
+escape=Escape Digits
+retry=Retry
+#Set
+name=Name
+value=Value
+#Entry
+entry=Entry
+start=Start
+finally=Finally
+end=End
+#Variable
+variable=Variable
+set=Set
+operation=Operation
+math=Math
+result=Result
+#Call Management
+call_management=Call Management
+answer=Rispondi
+hangup=Hangup
+dial=Internal Dial
+ext_dial=External Dial
+phone=Phone
+trunk=Trunk
+identifier=Identifier
+queue=Queue
+voicemail=VoiceMail
+boxnumber=Box Number
+callback=Callback
+#Playback
+playback=Playback
+background=Background
+menu=Menu
+saydigits=SayDigits
+digits=Digits
+saynumber=SayNumber
+number=Number
+sayphonetic=SayPhonetic
+text=Text
+escape_digits=Escape Digits
+tts=GoogleTTS
+ispeechtts=iSpeechTTS
+key=Key
+getdigits=GetDigits
+mindigit=Min Digits
+maxdigit=Max Digits
+custom_app=Custom App
+language=Language
+frequency=Frequency
+#Integration Server
+integrationServer=Integration Server
+database=Database
+query=Query
+asr=ASR
+threshold=Threshold
+maxspeech=Max Speech
+grammar=Grammar
+ispeechasr=iSpeechASR
+model=Model
+#General
+general=General
+noop=NoOp
+output=Output
+system=System
+command=Command
+application=Application
+agi=AGI
+args=Arguments
+subproject=SubProject
+goalname=Goal Name
+#Callflow
+callflow=Callflow
+gotoc=Goto
+context=Context
+extension=Extension
+gotoif=GotoIf
+gotoiftime=GotoIfTime
+gotoifmultitime=GotoIfMultiTime
+interval=Time Interval
+leftOperand=Left Operand
+condition=Condition
+rightOperand=Right Operand
+vswitch=Switch
+#Recording
+recording=Recording
+record=Record
+#Queue
+queuename=Queue Name
+announceoverride=Announce Override
+#QueueLog
+callid=CallID
+agent=Agent
+queue_event=Event
+data1=Data1
+data2=Data2
+data3=Data3
+data4=Data4
+data5=Data5
+macro=Macro
+#Stats
+stats=Stats
+queuelog=QueueLog
+goal=Goal
+#Extra
+opts=Opzioni
+queue_id=Queue
+file_id=File
+variable_id=Variable
+gosub=Gosub
+project_id=Project
+sip_id=SIP
+trunk_id=Trunk
+variable_value=Variable Value
+database_id=Database
+interval_id=Interval
+description_start=Start description
+publish=Pubblica
+about=About
+ispeech_asr_language=language
+ispeech_tts_language=language
+google_tts_language=language
+queue_variable=Queue from Variable
+odbc_id=ODBC Connection
+help_options=Ex. opt1,opt2,opt3
diff --git a/public/assets/plugins/mxgraph/resources/dia_ja.txt b/public/assets/plugins/mxgraph/resources/dia_ja.txt
new file mode 100644
index 0000000..2ec7078
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_ja.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=draw.ioについて
+access_denied=アクセスが拒否されました
+actualSize=実寸
+addToExistingDrawing=既存の図面に追加
+addWaypoint=「途中点」を追加
+align=配置指定
+alignment=列
+allChangesLost=すべての変更が失われます!
+alreadyConnected=ノードがすでに接続されています
+apply=適応
+arrange=調整
+appNotInstalledAlert=アプリケーションがインストールされていません。Chromeウェブストアからdraw.ioをインストールし、再試行してください。
+appNotInstalledStatus=アプリケーションがインストールされていません。
+arrow=矢印
+arrows=矢印
+automatic=Automatic
+autosize=自動サイズ
+backgroundColor=背景色
+basic=基本
+blankDrawing=空白に描く
+block=ブロック
+bold=太字
+borderColor=罫線の色
+borderWidth=枠線の太さ
+bottom=下付き
+bottomAlign=下付き
+cancel=キャンセル
+center=中央寄せする
+cannotLoad=ロードは失敗しました。後ほど再びご確認下さい。
+cannotLogin=ログインは失敗しました。後ほど再びご確認下さい。
+changeOrientation=向きを変更
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=円形
+classic=クラシック
+clipart=クリップアート
+close=終了する
+collapse=閉じる
+collapse-expand=縮小/拡大
+connect=接続する
+connecting=接続中
+connectWithDrive=Googleドライブに接続
+connection=接続
+containsValidationErrors=検証エラーがあります
+copy=コピー
+copyConnect=接続時にコピー
+copyOfDrawing=図をコピー
+curved=カーブ
+custom=カスタム
+cut=切り取り
+dashed=破線
+delete=削除
+diamond=ダイヤモンド
+diamondThin=ダイヤモンド（細）
+didYouKnow=ご存知ですか・・・
+direction=方向
+done=完了
+doubleClickOrientation=ダブルクリックして向きを変更
+drawing=描画{1}
+drawingEmpty=描画状態は空白です
+drawingTooLarge=描画が大きすぎます
+duplicate=コピーを作成
+east=東
+edit=編集
+editLink=編集リンク
+embed=埋め込み
+embedNotice=ページの最後にこのコードを埋め込んでください
+enterGroup=グループに入れる
+enterValue=値を入力
+entityRelation=ER
+error=エラー
+errorLoadingFile=ファイル読み込みエラー
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=ファイル保存エラー
+errorSavingFileForbidden=ファイル保存エラー。アクセス権が不十分。
+errorSavingFileNotFound=ファイル保存エラー。ファイルが見つかりません。
+exitGroup=グループから出る
+expand=拡大
+export=エクスポート
+failedToSaveTryReconnect=保存に失敗しました。再接続中です。
+featureRequest=機能追加のご依頼
+feedback=フィードバック
+file=ファイル
+filename=ファイル名
+fileNotFound=ファイルが見つかりません
+fileNotLoaded=ファイルが読み込まれません
+fileNotSaved=ファイルが保存されていません
+fileOpenLocation=このファイルはどのように開きますか？
+fillColor=塗りつぶしの色
+fit=フィット
+fitPage=ページ全体表示
+fitPageWidth=ページ幅
+fitWindow=ウィンドウに合わせる
+flipH=水平方向に反転
+flipV=縦方向に反転
+fontColor=フォントの色
+fontFamily=フォントの種類
+fontSize=フォントサイズ
+format=形式
+forum=ヘルプ・ディスカッション 
+fromTemplate=テンプレートから
+fromText=テキストから
+general=一般
+global=グローバル
+gradient=グラデーション
+gradientColor=色
+grid=グリッド
+group=グループ化
+guides=ガイド
+hateApp=draw.ioなんか大嫌い！
+height=縦幅
+help=ヘルプ
+helpTranslate=このアプリケーションの翻訳お手伝いをしてください
+hide=非表示
+home=ホーム
+horizontal=水平
+horizontalFlow=フロー図
+horizontalTree=横ツリー図
+image=イメージ
+images=イメージ
+inline=インライン
+import=インポート
+invalidOrMissingFile=無効または不明なファイル
+italic=斜体
+landscape=横向き
+layout=レイアウト
+left=左端
+leftAlign=左端
+line=線
+lineend=行の終了
+linestart=行の開始
+linewidth=線幅
+loading=読み込み中
+loveApp=draw.io大好きだよ！
+manual=Manual
+middle=中央
+moreResults=他の結果
+moreShapes=他の図形
+move=移動
+navigation=ナビゲーション
+new=新規作成
+noColor=色なし
+noFiles=ファイルなし
+noMoreResults=結果は以上です
+none=なし
+noResultsFor={1}'での検索結果はありません
+north=北
+notConnected=接続されていません
+ok=OK
+opacity=不透明度
+open=開く
+openArrow=開いた矢印
+openFile=ファイルを開く
+openLink=リンクを開く
+openInNewWindow=新しいウィンドウで開く
+openSupported=このソフトを使って保存された.XMLフォーマットのファイルのみ開くことが出来ます。
+options=オプション
+organic=オーガニック
+orthogonal=直交
+oval=楕円
+pages=ページ
+pageView=ページのレイアウト
+pageSetup=ページ設定
+pageScale=ページスケール
+pan=パニング
+paperSize=用紙サイズ
+paste=貼り付け
+perimeter=境界
+plain=プレーン
+position=位置
+posterPrint=ポスター印刷
+preview=印刷プレビュー
+print=印刷
+readOnly=Read-only
+reconnecting=再接続中
+redo=やり直し
+removeFromGroup=グループから削除
+removeWaypoint=「途中点」を削除
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1}はすでに存在します。上書きしますか？
+replaceExistingDrawing=既存の図を上書きします
+reset=リセット
+resize=サイズ変更
+retryingIn={1}秒後に再試行する。
+retryingLoad=ロードが失敗しました。再試行中。
+retryingLogin=ログインがタイムアウトしました。再試行中。
+right=右端
+rightAlign=右端
+rotate=回転
+rotation=回転
+rounded=角丸
+save=保存
+saveAs=名前を付けて保存
+saved=保存済み
+saving=保存中
+scrollbars=スクロール・バー
+search=検索
+selectAll=全ての選択
+selectEdges=エッジを選択
+selectFont=フォントの選択
+selectVertices=頂点を選択
+sendMessage=Send
+sessionTimeoutOnSave=セッションがタイムアウトして、Googleドライブから切断されました。ログインして保存するには、OKをクリックしてください。
+setAsDefaultEdge=デフォルトエッジとして設定
+shadow=影付き
+shape=図形
+share=共有
+shareLink=共同編集へのリンク
+sharingServerNotice=注意事項：試験的な機能です。ユーザーの責任でご使用ください。
+sharingServerReady=共有サーバーは準備完了です。
+sharingServerUnavailable=共有サーバーが使用できません。
+signOut=サインアウト
+size=サイズ
+sourceSpacing=元の空白
+south=南
+spacing=スペース
+straight=直線
+strokeColor=線の色
+style=スタイル
+support=サポート
+targetSpacing=ターゲットの空白
+text=テキスト
+textAlignment=テキストの位置
+textOpacity=テキストの不透明度
+tilt=９０度回転
+toBack=後ろへ
+toFront=前へ
+tooltips=ツール・チップ
+top=上付き
+topAlign=上付き
+transparent=透明
+underline=下線
+undo=元に戻す
+ungroup=グループ解除
+updatingDocument=文書の更新中。しばらくお待ちください...
+updatingSelection=選択の更新中。しばらくお待ちください...
+url=URL
+userLoggedOut=セッションは終了しました。未保存ファイルを保存するにはこのグーグルアカウントとしてログインする必要があります:
+vertical=垂直
+verticalFlow=縦向きフロー
+verticalTree=縦ツリー図
+view=表示
+west=西
+width=横幅
+wordWrap=ワードラップ
+zoom=拡大
+zoomIn=ズームイン
+zoomOut=ズームアウト
diff --git a/public/assets/plugins/mxgraph/resources/dia_kn.txt b/public/assets/plugins/mxgraph/resources/dia_kn.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_kn.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_ko.txt b/public/assets/plugins/mxgraph/resources/dia_ko.txt
new file mode 100644
index 0000000..d68dde6
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_ko.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=idraw.io에 대하어
+access_denied=접근 거부
+actualSize=실제 크기
+addToExistingDrawing=기존 그림에 추가
+addWaypoint=Add waypoint
+align=정렬
+alignment=정렬
+allChangesLost=모든 변경 분실
+alreadyConnected=이미 연결됨
+apply=적용
+arrange=배열
+appNotInstalledAlert=에플리케이션 설치 않됨 알림
+appNotInstalledStatus=에플리케이션 설치 않됨   
+arrow=화살표
+arrows=화살표
+automatic=Automatic
+autosize=자동 조정
+backgroundColor=바탕색상
+basic=기본
+blankDrawing=곰백 그리기
+block=블록
+bold=볼드
+borderColor=보더 색상
+borderWidth=보더 폭
+bottom=맨 아래로
+bottomAlign=맨아래로  정렬
+cancel=취소
+center=중앙
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=방향 바꾸기
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=원형
+classic=클래식
+clipart=클립아트
+close=종료
+collapse=닫기
+collapse-expand=닫기/확대
+connect=접속    
+connecting=접속중
+connectWithDrive=Connect with Google Drive
+connection=연결
+containsValidationErrors=오류 확인 포함
+copy=복사
+copyConnect=Copy on connect
+copyOfDrawing=드로잉 복사
+curved=Curved
+custom=주문
+cut=축소시키기
+dashed=점선
+delete=삭제
+diamond=다이아몬드
+diamondThin=다이아몬드(얇은)
+didYouKnow=알고계세요…
+direction=방향   
+done=완료
+doubleClickOrientation=방향을 바꾸려면 더블 클릭
+drawing=그리기 (1)
+drawingEmpty=그리기 비어있음
+drawingTooLarge=그리기 너무 큼
+duplicate=복사
+east=동쪽
+edit=편집
+editLink=링크 편집
+embed=삽입
+embedNotice=삽입 알림
+enterGroup=그룹 입력
+enterValue=값을 입력
+entityRelation=실체 관계
+error=오류 
+errorLoadingFile=로딩 파일 오류 
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=저장 파일 오류
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=그룹 나가기
+expand=확대
+export=보내기
+failedToSaveTryReconnect=저장 실패, 재접속중
+featureRequest=Feature Request
+feedback=Feedback
+file=파일
+filename=파일 이름
+fileNotFound=파일 무존재
+fileNotLoaded=파일 전송 않됨
+fileNotSaved=파일  저장 않됨
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=색상 채우기
+fit=설치
+fitPage=한 페이지
+fitPageWidth=페이지 폭
+fitWindow=창에 맞추기
+flipH=가로로 뒤집기
+flipV=세로로 뒤집기
+fontColor=글자채 색상
+fontFamily=글자채
+fontSize=글자 크기
+format=포멧
+forum=검토/도움 포럼
+fromTemplate=템플렛
+fromText=텍스트에서
+general=보편적
+global=종합적
+gradient=그라디에이션
+gradientColor=색상
+grid=그리드
+group=그룹
+guides=안내
+hateApp=I hate draw.io
+height=높이
+help=도움
+helpTranslate=도움 번역하기
+hide=감추기
+home=홈
+horizontal=가로   
+horizontalFlow=가로 흐름
+horizontalTree=가로 트리 그림
+image=이미지
+images=이미지
+inline=인라인
+import=가져오기
+invalidOrMissingFile=잘못된 또는 분실 파일
+italic=이탈릭
+landscape=가로
+layout=배열
+left=왼쪽
+leftAlign=왼쪽 정렬
+line=라인
+lineend=라인 종료
+linestart=라인 시작
+linewidth=라인 폭
+loading=로딩    
+loveApp=I love draw.io
+manual=Manual
+middle=중앙
+moreResults=추가 결과
+moreShapes=추가 모양
+move=이동
+navigation=내비게이션
+new=신규
+noColor=무 색상
+noFiles=파일 없음
+noMoreResults=결과 없음
+none=없음
+noResultsFor=(1) 의 결과 없음
+north=북쪽
+notConnected=연결 않됨
+ok=OK
+opacity=불투명도
+open=열기
+openArrow=화살표 열기
+openFile=파일 열기
+openLink=링크 열기
+openInNewWindow=새 윈도우 열기
+openSupported=개방형 지원
+options=옵숀
+organic=유기적
+orthogonal=직교
+oval=타원형
+pages=페이지
+pageView=페이지 뷰
+pageSetup=페이지 셋 업
+pageScale=페이지 스케일
+pan=팬
+paperSize=용지 크기
+paste=붙이기
+perimeter=경계
+plain=일반
+position=포지션
+posterPrint=포스터 프린트
+preview=미리보기
+print=프린트
+readOnly=Read-only
+reconnecting=재 접속중
+redo=다시하기
+removeFromGroup=그룹에서 제거
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace=대체하기
+replaceExistingDrawing=기존 드로잉 교체
+reset=리셋
+resize=크기조절
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=오른쪽
+rightAlign=오른쪽 정렬
+rotate=회전
+rotation=회전
+rounded=원형
+save=저장
+saveAs=다른이름으로 저장
+saved=저장됨
+saving=저장중
+scrollbars=스크롤바
+search=검색
+selectAll=모든것 선택
+selectEdges=끝 선택
+selectFont=글자체 선택
+selectVertices=세로 선택
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=디폴트 에지로 설정
+shadow=음영
+shape=모양
+share=공유
+shareLink=공유 편집 링크
+sharingServerNotice=공유 서버 알림
+sharingServerReady=공유 서버 완료
+sharingServerUnavailable=공유 서버 사용불가
+signOut=서명
+size=사이즈
+sourceSpacing=소스 간격
+south=남쪽
+spacing=간격
+straight=스트레이트
+strokeColor=줄 색상
+style=스타일
+support=Support
+targetSpacing=타겟 간격
+text=문자
+textAlignment=문자 정렬
+textOpacity=문자 불투명함
+tilt=Tilt
+toBack=뒤로
+toFront=앞으로
+tooltips=툴팁
+top=맨위로
+topAlign=맨위로 맞추기
+transparent=투과적
+underline=밑줄
+undo=취소
+ungroup=그룹 취소
+updatingDocument=다큐먼트 업데이트중
+updatingSelection=선택 업데이틍중
+url=URL
+userLoggedOut=사용자 로그 오프
+vertical=버티컬
+verticalFlow=세로 흐름
+verticalTree=세로 트리그림
+view=뷰
+west=서쪽
+width=폭
+wordWrap=Word wrap
+zoom=줌
+zoomIn=확대
+zoomOut=축소 
diff --git a/public/assets/plugins/mxgraph/resources/dia_lt.txt b/public/assets/plugins/mxgraph/resources/dia_lt.txt
new file mode 100644
index 0000000..cea8074
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_lt.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/resources/dia_lv.txt b/public/assets/plugins/mxgraph/resources/dia_lv.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_lv.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_ml.txt b/public/assets/plugins/mxgraph/resources/dia_ml.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_ml.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_mr.txt b/public/assets/plugins/mxgraph/resources/dia_mr.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_mr.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_ms.txt b/public/assets/plugins/mxgraph/resources/dia_ms.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_ms.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_nl.txt b/public/assets/plugins/mxgraph/resources/dia_nl.txt
new file mode 100644
index 0000000..0d64cf2
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_nl.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=Over draw.io
+access_denied=Toegang geweigerd
+actualSize=Origineel Formaat
+addToExistingDrawing=Toevoegen aan bestaande tekening
+addWaypoint=Add waypoint
+align=In lijn brengen
+alignment=Uitlijnen
+allChangesLost=Alle veranderingen zullen verloren gaan!
+alreadyConnected=Knooppunten reeds verbonden
+apply=Toepassen
+arrange=Rangschikken
+appNotInstalledAlert=De app is niet geïnstalleerd. Installeer draw.io in de Chrome Web Store en probeer het opnieuw.
+appNotInstalledStatus=App is niet geïnstalleerd.
+arrow=Pijl
+arrows=Pijlen
+automatic=Automatic
+autosize=Automatisch Formaat
+backgroundColor=Achtergrondkleur
+basic=Basis
+blankDrawing=Lege tekening
+block=Blok
+bold=Vet
+borderColor=Randkleur
+borderWidth=Randbreedte
+bottom=Beneden
+bottomAlign=Beneden uitlijnen
+cancel=Annuleren
+center=Centreren
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Verander Richting
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Cirkel
+classic=Klassiek
+clipart=Beeldbibliotheek
+close=Sluiten
+collapse=Verkleinen
+collapse-expand=Verkleinen/Vergroten
+connect=Verbinden
+connecting=Bezig te verbinden
+connectWithDrive=Verbinden met Google Drive
+connection=Verbinding
+containsValidationErrors=Bevat validatiefouten
+copy=Kopiëren
+copyConnect=Copy on connect
+copyOfDrawing=Kopie van tekening
+curved=Curved
+custom=Aanpassen
+cut=Knippen
+dashed=Gestreept
+delete=Verwijderen
+diamond=Diamand
+diamondThin=Diamand (dun)
+didYouKnow=Wist u dat...
+direction=Richting
+done=Voltooid
+doubleClickOrientation=Dubbelklik om richting te veranderen
+drawing=Tekening{1}
+drawingEmpty=Tekening is leeg
+drawingTooLarge=Tekening is te groot
+duplicate=Dupliceren
+east=Oost
+edit=Bewerken
+editLink=Link bewerken
+embed=Embed
+embedNotice=Voeg dit eenmaal toe aan het einde van de pagina
+enterGroup=Deelnemen aan groep
+enterValue=Waarde invullen
+entityRelation=Entiteit Relatie
+error=Foutmelding
+errorLoadingFile=Fout bij het laden van het bestand
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Fout bij het opslaan van het bestand
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Groep verlaten
+expand=Vergroten
+export=Exporteren
+failedToSaveTryReconnect=Opslaan mislukt, er wordt geprobeerd opnieuw te verbinden
+featureRequest=Feature Request
+feedback=Feedback
+file=Bestand
+filename=Bestandsnaam
+fileNotFound=Bestand niet gevonden
+fileNotLoaded=Bestand niet geladen
+fileNotSaved=Bestand niet opgeslagen
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Kleur Vullen
+fit=Aanpassen
+fitPage=Pagina aanpassen
+fitPageWidth=Paginabreedte aanpassen
+fitWindow=Venster Passend Maken
+flipH=Horizontaal kantelen
+flipV=Verticaal kantelen
+fontColor=Font Kleur
+fontFamily=Font-family
+fontSize=Lettergrootte
+format=Formatteren
+forum=Discussie-/Helpforums
+fromTemplate=Van sjabloon
+fromText=Van tekst
+general=Algemeen
+global=Globaal
+gradient=Kleurverloop
+gradientColor=Kleur
+grid=Raster
+group=Groeperen
+guides=Handleidingen
+hateApp=I hate draw.io
+height=Hoogte
+help=Help
+helpTranslate=Help ons deze applicatie te vertalen
+hide=Verbergen
+home=Home
+horizontal=Horizontaal
+horizontalFlow=Horizontale stroom
+horizontalTree=Horizontale boom
+image=Afbeelding
+images=Afbeeldingen
+inline=Inline
+import=Importeren
+invalidOrMissingFile=Onjuist of niet gevonden bestand
+italic=Cursief
+landscape=Liggend
+layout=Lay-out
+left=Links
+leftAlign=Links uitlijnen
+line=Lijn
+lineend=Lijn Eind
+linestart=Lijn Start
+linewidth=Lijnbreedte
+loading=Bezig met laden
+loveApp=I love draw.io
+manual=Manual
+middle=Midden
+moreResults=Meer resultaten
+moreShapes=Meer vormen
+move=Verplaatsen
+navigation=Navigatie
+new=Nieuw
+noColor=Geen kleur
+noFiles=Geen bestanden
+noMoreResults=Geen resultaten meer
+none=Geen
+noResultsFor=Geen resultaten voor '{1}'
+north=Noord
+notConnected=Geen verbinding
+ok=OK
+opacity=Opaciteit
+open=Openen
+openArrow=Openen
+openFile=Bestand Openen
+openLink=Link openen
+openInNewWindow=Openen in nieuw venster
+openSupported=Ondersteund formaat zijn .XML-bestanden opgeslagen met deze software
+options=Opties
+organic=Organisch
+orthogonal=Orthogonaal
+oval=Ovaal
+pages=Pagina's
+pageView=Pagina Indeling
+pageSetup=Pagina configureren
+pageScale=Pagina schalen
+pan=Pan
+paperSize=Formaat papier
+paste=Plakken
+perimeter=Perimeter
+plain=Normaal
+position=Positie
+posterPrint=Poster Afdrukken
+preview=Voorbeeld
+print=Afdrukken
+readOnly=Read-only
+reconnecting=Bezig met opnieuw te verbinden
+redo=Herhalen
+removeFromGroup=Verwijderen uit Groep
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace=Bestaat al. Wilt u het overschrijven?
+replaceExistingDrawing=Bestaande tekening vervangen
+reset=Opnieuw instellen
+resize=Grootte aanpassen
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Rechts
+rightAlign=Rechts uitlijnen
+rotate=Roteren
+rotation=Rotatie
+rounded=Afgerond
+save=Bewaren
+saveAs=Bewaren Als
+saved=Opgeslagen
+saving=Bezig met opslaan
+scrollbars=Schuifbalken
+search=Zoeken
+selectAll=Alles Selecteren
+selectEdges=Selecteer Randen
+selectFont=Selecteer Lettertype
+selectVertices=Selecteer Hoekpunten
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Instellen als standaard rand
+shadow=Schaduw
+shape=Vorm
+share=Delen
+shareLink=Link voor gedeeld bewerken
+sharingServerNotice=Let op: Experimentele functie. Gebruik is op eigen risico!
+sharingServerReady=Server delen is gereed.
+sharingServerUnavailable=Server delen is niet beschikbaar.
+signOut=Afmelden
+size=Formaat
+sourceSpacing=Bron Interlinie
+south=Zuid
+spacing=Interlinie
+straight=Recht
+strokeColor=Lijn Kleur
+style=Stijl
+support=Support
+targetSpacing=Doel Interlinie
+text=Tekst
+textAlignment=Tekst Uitlijnen
+textOpacity=Tekst Opaciteit
+tilt=Tilt
+toBack=Naar Achter Plaatsen
+toFront=Naar Voren Plaatsen
+tooltips=Tooltips
+top=Boven
+topAlign=Boven uitlijnen
+transparent=Transparant
+underline=Onderstrepen
+undo=Ongedaan Maken
+ungroup=Degroeperen
+updatingDocument=Document wordt bijgewerkt. Een ogenblik aub...
+updatingSelection=Selectie wordt bijgewerkt. Een ogenblik aub...
+url=URL
+userLoggedOut=Uw sessie is beëindigd. Om niet opgeslagen werk op te slaan, dient u zich aan te melden bij uw Google Account als 
+vertical=Verticaal
+verticalFlow=Verticale stroom
+verticalTree=Verticale boom
+view=Bekijken
+west=West
+width=Breedte
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Vergroten
+zoomOut=Verkleinen
diff --git a/public/assets/plugins/mxgraph/resources/dia_no.txt b/public/assets/plugins/mxgraph/resources/dia_no.txt
new file mode 100644
index 0000000..d9be511
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_no.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=Om draw.io
+access_denied=Tilgang nektet
+actualSize=Faktisk størrelse
+addToExistingDrawing=Legge til eksisterende tegning
+addWaypoint=Add waypoint
+align=Justere
+alignment=Justering
+allChangesLost=Alle endringer vil gå tapt
+alreadyConnected=Noder er allerede forbundet
+apply=Bruk
+arrange=Arranger
+appNotInstalledAlert=App er ikke installert. Vennligst installer draw.io i Chrome Web Store og prøv igjen.
+appNotInstalledStatus=App er ikke installert. 
+arrow=Pil
+arrows=Piler
+automatic=Automatic
+autosize=Automatisk størrelse
+backgroundColor=Bakgrunnfarge
+basic=Grunnlegende
+blankDrawing=Blank tegning
+block=Blokk
+bold=Fet
+borderColor=Kantfarge
+borderWidth=Kantbredde
+bottom=Bunn
+bottomAlign=Juster til bunn
+cancel=Annuler
+center=Sentrer
+cannotLoad=Lasting feilet. Vennligst forsøk igjen senere.
+cannotLogin=Innlogging feilet. Vennligst forsøk igjen senere.
+changeOrientation=Skift orientering
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Sirkel
+classic=Klassisk
+clipart=Bildebibliotek
+close=Lukk
+collapse=Reduser
+collapse-expand=Reduser/utvid
+connect=Koble til
+connecting=Kobler til
+connectWithDrive=Koble til Google Drive
+connection=Forbindelse
+containsValidationErrors=Inneholder valideringsfeil
+copy=Kopier
+copyConnect=Kopier ved sammenkobling
+copyOfDrawing=Kopi av tegning
+curved=Curved
+custom=Tilpasset
+cut=Klipp
+dashed=Stiplet
+delete=Slett
+diamond=Diamant
+diamondThin=Diamant (tynn)
+didYouKnow=Visste du at...
+direction=Retning
+done=Utført
+doubleClickOrientation=Dobbelklikk for å endre orientering
+drawing=Tegning
+drawingEmpty=Tegningen er tom
+drawingTooLarge=Tegningen er for stor
+duplicate=Dupliser
+east=Øst
+edit=Rediger
+editLink=Rediger lenke
+embed=Integrer
+embedNotice=Legge til dette en gang på sluten av siden
+enterGroup=Tast inn gruppe
+enterValue=Tast inn verdi
+entityRelation=Enhetsrelasjon
+error=Feil
+errorLoadingFile=Feil ved innlasting av fil
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Feil ved lagring av fil
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Avslutt gruppe
+expand=Utvid
+export=Eksport
+failedToSaveTryReconnect=Feil under lagring, prøver å koble til igjen
+featureRequest=Funksjonsforespørsel
+feedback=Tilbakemelding
+file=Fil
+filename=Filnavn
+fileNotFound=Filen ble ikke funnet
+fileNotLoaded=Filen ble ikke lastet
+fileNotSaved=Filen ble ikke lagret
+fileOpenLocation=Hvordan ønsker du å åpne filen(e)?
+fillColor=Fyll farge
+fit=Tilpass
+fitPage=Tilpass side
+fitPageWidth=Tilpass sidebredde
+fitWindow=Tilpass vindu
+flipH=Vend horisontalt
+flipV=Vend vertikalt
+fontColor=Skriftfarge
+fontFamily=Skriftfamilie
+fontSize=Skriftstørrelse
+format=Format
+forum=Diskusjon/Hjelpeforumer
+fromTemplate=Fra mal
+fromText=Fra tekst
+general=Generell
+global=Global
+gradient=Gradient
+gradientColor=Farge
+grid=Rutenett
+group=Grupper
+guides=Veileder
+hateApp=Jeg hater draw.io
+height=Høyde
+help=Hjelp
+helpTranslate=Hjelp oss å oversette denne appen
+hide=Skjul
+home=Hjem
+horizontal=Horisontal
+horizontalFlow=Horisontal flyt
+horizontalTree=Horisontalt tre
+image=Bilde
+images=Bilder
+inline=Inline
+import=Importer
+invalidOrMissingFile=Ugyldig eller manglende fil
+italic=Kursiv
+landscape=Landskap
+layout=Layout
+left=Venstre
+leftAlign=Venstrejustering
+line=Linje
+lineend=Linjeavslutning
+linestart=Linjestart
+linewidth=Linjebredde
+loading=Laster
+loveApp=Jeg elsker draw.io
+manual=Manual
+middle=Midt
+moreResults=Flere treff
+moreShapes=Flere former
+move=Flytt
+navigation=Navigasjon
+new=Ny
+noColor=Ingen farge
+noFiles=Ingen filer
+noMoreResults=Ingen flere treff
+none=Ingen
+noResultsFor=Ingen treff for '{1}'
+north=Nord
+notConnected=Ikke tilkoblet
+ok=OK
+opacity=Gjennomsiktighet
+open=Åpen
+openArrow=Åpen pil
+openFile=Åpen fil
+openLink=Åpen lenke
+openInNewWindow=Åpne i nytt vindu
+openSupported=Støttede format er .XML-filer lagret fra denne programvare
+options=Alternativer
+organic=Organisk
+orthogonal=Ortogonale
+oval=Oval
+pages=Sider
+pageView=Sidevisning
+pageSetup=Sideoppsett
+pageScale=Sideskalering
+pan=Panorer
+paperSize=Papirstørrelse
+paste=Lim inn
+perimeter=Utkant
+plain=Normal
+position=Posisjon
+posterPrint=Plakatutskrift
+preview=Forhåndsvisning
+print=Skriv ut
+readOnly=Read-only
+reconnecting=Kobler til på nytt
+redo=Gjør om
+removeFromGroup=Fjern fra gruppe
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} finnes fra før. Vil du erstatte den?
+replaceExistingDrawing=Erstatt eksisterende tegning
+reset=Tilbakestill
+resize=Omgjør størrelse
+retryingIn=Forsøker igjen om {1} sekund(er)
+retryingLoad=Lasting feilet. Forsøker på nytt...
+retryingLogin=Login timeout. Forsøker på nytt...
+right=Høyre
+rightAlign=Høyrejustering
+rotate=Roter
+rotation=Rotasjon
+rounded=Avrundet
+save=Lagre
+saveAs=Lagre som
+saved=Lagret
+saving=Lagrer
+scrollbars=Rullefelt
+search=Søk
+selectAll=Velg alt
+selectEdges=Velg kanter
+selectFont=Velg skrifttype
+selectVertices=Velg toppunkter
+sendMessage=Send
+sessionTimeoutOnSave=Sessjonen din har timet ut og du har mistet forbindelsen til Google Drive. Trykk på OK for å logge inn på nytt og lagre arbeidet.
+setAsDefaultEdge=Sett som standard kant
+shadow=Skygge
+shape=Form
+share=Del
+shareLink=Lenke til felles redigering
+sharingServerNotice=Bemerk: Eksperimentell funksjon. Bruk på eget ansvar!
+sharingServerReady=Delingsserver er klar.
+sharingServerUnavailable=Delingsserver er ikke tilgjengelig.
+signOut=Logg ut
+size=Størrelse
+sourceSpacing=Kildeavstand
+south=Syd
+spacing=Avstand
+straight=Rett
+strokeColor=Linjefarge
+style=Stil
+support=Support
+targetSpacing=Målavstand
+text=Tekst
+textAlignment=Tekstjustering
+textOpacity=Tekstgjennomsiktighet
+tilt=Tilt
+toBack=Til baksiden
+toFront=Til forsiden
+tooltips=Verktøytips
+top=Topp
+topAlign=Toppjustering
+transparent=Gjennomsiktig
+underline=Understreke
+undo=Angre
+ungroup=Del opp gruppe
+updatingDocument=Oppdaterer dokument. Vennligst vent...
+updatingSelection=Oppdaterer utvalg. Vennligst vent...
+url=URL
+userLoggedOut=Din session er avsluttet. For å lagre må du logge på din Google konto som
+vertical=Vertikal
+verticalFlow=Vertikal flyt
+verticalTree=Vertikalt tre
+view=Vis
+west=Vest
+width=Bredde
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom inn
+zoomOut=Zoom ut
diff --git a/public/assets/plugins/mxgraph/resources/dia_pl.txt b/public/assets/plugins/mxgraph/resources/dia_pl.txt
new file mode 100644
index 0000000..e87be75
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_pl.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=O draw.io
+access_denied=Odmówiono dostępu
+actualSize=Rzeczywisty rozmiar
+addToExistingDrawing=Dodaj do istniejącego rysunku
+addWaypoint=Add waypoint
+align=Wyjustuj
+alignment=Wyjustowanie
+allChangesLost=Wszystkie zmiany zostaną utracone!
+alreadyConnected=Węzły zostały już połączone.
+apply=Zastosuj
+arrange=Rozmieść
+appNotInstalledAlert=Aplikacja nie jest zainstalowana. Proszę zainstaluj draw.io z Chrome Web Store i spróbuj ponownie.
+appNotInstalledStatus=Aplikacja nie jest zainstalowana.
+arrow=Strzałka
+arrows=Strzałki
+automatic=Automatic
+autosize=Automatycznie dopasuj rozmiar
+backgroundColor=Kolor tła
+basic=Podstawowy
+blankDrawing=Nowy rysunek
+block=Blokada
+bold=Pogrubienie
+borderColor=Kolor ramki
+borderWidth=Szerokość ramki
+bottom=Dół
+bottomAlign=Dół
+cancel=Anuluj
+center=Środek
+cannotLoad=Nie udało się załadować. Spróbuj później.
+cannotLogin=Nie udało się zalogować. Spróbuj później.
+changeOrientation=Zmień kierunek
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Kolisty
+classic=Klasyczny
+clipart=Klipart
+close=Zamknij
+collapse=Zmniejsz
+collapse-expand=Zwiń/Rozwiń
+connect=Łącz
+connecting=Łączę
+connectWithDrive=Połącz z Dyskiem Google
+connection=Połączenie
+containsValidationErrors=Zawiera błędy potwierdzenia.
+copy=Kopiuj
+copyConnect=Łącz kopiując
+copyOfDrawing=Kopia z rysunku
+curved=Curved
+custom=Dopasuj
+cut=Wytnij
+dashed=Przerywana
+delete=Usuń
+diamond=Diament
+diamondThin=Diament (cienki)
+didYouKnow=Czy wiesz...
+direction=Kierunek
+done=Gotowe
+doubleClickOrientation=Kliknij dwa razy, aby zmienić kierunek
+drawing=Rysunek{1}
+drawingEmpty=Rysunek jest pusty
+drawingTooLarge=Rysunek jest zbyt duży
+duplicate=Zduplikuj
+east=Wschód
+edit=Edytuj
+editLink=Edytuj hiperłącze
+embed=Osadź
+embedNotice=Dołącz notatkę
+enterGroup=Wejdź w grupę
+enterValue=Wprowadź wartość
+entityRelation=Związek encji
+error=Błąd
+errorLoadingFile=Błąd ładowania pliku
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Błąd zapisywania pliku
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Wyjdź z grupy
+expand=Rozszerz
+export=Eksportuj
+failedToSaveTryReconnect=Błąd zapisu, próbuję połączyć ponownie
+featureRequest=Zgłoś nową funkcję
+feedback=Wsparcie
+file=Plik
+filename=Nazwa pliku
+fileNotFound=Plik nie znaleziono
+fileNotLoaded=Plik nie załadowano
+fileNotSaved=Plik nie zapisany
+fileOpenLocation=Jak chcesz otworzyć ten plik/te pliki?
+fillColor=Kolor wypełnienia
+fit=Dopasuj
+fitPage=Widok strony
+fitPageWidth=Dopasuj szerokość strony
+fitWindow=Widok okna
+flipH=Odbij poziomo
+flipV=Odbij pionowo
+fontColor=Kolor czcionki
+fontFamily=Rodzaj czcionki
+fontSize=Wielkość czcionki
+format=Format
+forum=Dyskusja/Forum wsparcia
+fromTemplate=Z szablonu
+fromText=Z tekstu
+general=Główny
+global=Globalny
+gradient=Cieniowanie
+gradientColor=Kolor
+grid=Siatka
+group=Łącz w grupę
+guides=Przewodnik
+hateApp=Nie lubię draw.io
+height=Długość
+help=Pomoc
+helpTranslate=Pomóż nam przetłumaczyć tę aplikację
+hide=Ukryj
+home=Początek
+horizontal=Poziome
+horizontalFlow=Poziomy przepływ
+horizontalTree=Poziome drzewo
+image=Obraz
+images=Obrazy
+inline=Wetnij
+import=Zaimportuj
+invalidOrMissingFile=Nieprawidłowy lub brakujący plik
+italic=Kursywa
+landscape=Widok
+layout=Układ
+left=Lewa
+leftAlign=Lewa
+line=Linia
+lineend=Koniec linii
+linestart=Początek linii
+linewidth=Szerokość linii
+loading=Ładuję
+loveApp=Kocham draw.io
+manual=Manual
+middle=Środek
+moreResults=Więcej wyników
+moreShapes=Więcej kształtów
+move=Przemieść
+navigation=Nawigacja
+new=Nowy
+noColor=Bezbarwny
+noFiles=Brak plików
+noMoreResults=Nie ma więcej wyników
+none=Żaden
+noResultsFor=Brak wyników dla '{1}'
+north=Północ
+notConnected=Nie połączony
+ok=OK
+opacity=Przeźroczystość
+open=Otwórz
+openArrow=Otwarty
+openFile=Otwórz plik
+openLink=Otwórz hiperłącze
+openInNewWindow=Otwórz w nowym oknie
+openSupported=Wspierany jest format XML utworzony tylko z tego programu
+options=Opcje
+organic=Organiczny
+orthogonal=Prostokątny
+oval=Owalny
+pages=Strona
+pageView=Układ strony
+pageSetup=Ustawienia strony
+pageScale=Skalowanie strony
+pan=Panorama
+paperSize=Rozmiar papieru
+paste=Wklej
+perimeter=Granica
+plain=Zwykłe
+position=Pozycja
+posterPrint=Drukuj plakat
+preview=Podgląd
+print=Drukuj
+readOnly=Read-only
+reconnecting=Łączę ponownie
+redo=Powtórz
+removeFromGroup=Usuń z grupy
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} już istnieje. Chcesz go zastąpić?
+replaceExistingDrawing=Zastąp istniejący rysunek
+reset=Czyść
+resize=Zmień rozmiar
+retryingIn=Ponawiam w ciągu {1} sekund/y
+retryingLoad=Błąd ładowania. Ponawiam...
+retryingLogin=Błąd logowania. Ponawiam...
+right=Prawa
+rightAlign=Prawa
+rotate=Obrót
+rotation=Obróć
+rounded=Okrągły
+save=Zapisz
+saveAs=Zapisz jako
+saved=Zapisany
+saving=Zapisuję
+scrollbars=Pasek przesuwania
+search=Szukaj
+selectAll=Zaznacz wszystko
+selectEdges=Zaznacz brzegi
+selectFont=Wybierz czcionkę
+selectVertices=Zaznacz wierzchołki
+sendMessage=Send
+sessionTimeoutOnSave=Twoja sesja wygasła i zostałeś odłączony od Dysku Google. Wciśnij OK by się zalogować i zapisać rysunek.
+setAsDefaultEdge=Ustaw jako domyślną krawędź
+shadow=Cień
+shape=Kształt
+share=Udostępnij
+shareLink=Udostępnij hiperłącze
+sharingServerNotice=Uwaga: Funkcjonalność eksperymentalna. Używaj na własne ryzyko.
+sharingServerReady=Serwer udostępniania jest gotowy.
+sharingServerUnavailable=Serwer udostępniania jest nieosiągalny.
+signOut=Wyloguj
+size=Rozmiar
+sourceSpacing=Rozmieszczenie źródła
+south=Południe
+spacing=Rozmieszczenie
+straight=Proste
+strokeColor=Kolor podkreślenia
+style=Styl
+support=Support
+targetSpacing=Rozmieszczenie celu
+text=Tekst
+textAlignment=Wyjustowanie tekstu
+textOpacity=Nieprzejrzystość tekstu
+tilt=Tilt
+toBack=Do tyłu
+toFront=Do przodu
+tooltips=Podpowiedzi
+top=Góra
+topAlign=Góra
+transparent=Przeźroczysty
+underline=Podkreślenie
+undo=Cofnij
+ungroup=Podziel grupę
+updatingDocument=Trwa aktualizowanie dokumentu. Proszę czekać...
+updatingSelection=Trwa aktualizowanie wyboru. Proszę czekać...
+url=URL
+userLoggedOut=Twoja sesja się zakończyła. Jeśli chcesz zapisać swoją pracę zaloguj się na konto Google 
+vertical=Pionowe
+verticalFlow=Pionowy przepływ
+verticalTree=Pionowe drzewo
+view=Widok
+west=Zachód
+width=Szerokość
+wordWrap=Word wrap
+zoom=Widok
+zoomIn=Przybliż
+zoomOut=Oddal
diff --git a/public/assets/plugins/mxgraph/resources/dia_pt-br.txt b/public/assets/plugins/mxgraph/resources/dia_pt-br.txt
new file mode 100644
index 0000000..4e739c0
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_pt-br.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=Sobre draw.io
+access_denied=Acesso negado
+actualSize=Tamanho Real 
+addToExistingDrawing=Adicionar ao desenho existente
+addWaypoint=Add waypoint
+align=Alinhar 
+alignment=Alinhamento
+allChangesLost=Todas as modificações serão perdidas! 
+alreadyConnected=Nodos já conectados 
+apply=Aplicar
+arrange=Ordenar
+appNotInstalledAlert=App não instalada. Por gentileza, instale draw.io da Chrome Web Store e tente outra vez.
+appNotInstalledStatus=App não instalada.
+arrow=Seta
+arrows=Setas
+automatic=Automatic
+autosize=Auto Dimensionar 
+backgroundColor=Cor do fundo
+basic=Básico
+blankDrawing=Desenho em branco
+block=Bloco 
+bold=Negrito 
+borderColor=Cor da borda 
+borderWidth=Largura da borda
+bottom=Fundo
+bottomAlign=Fundo
+cancel=Cancelar 
+center=Centro 
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Modificar Orientação
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Círculo
+classic=Clássica
+clipart=Clipart
+close=Fechar 
+collapse=Recolher
+collapse-expand=Recolher/Expandir
+connect=Conetar
+connecting=Conetando
+connectWithDrive=Conete-se com Google Drive
+connection=Conexão 
+containsValidationErrors=Contém erros de validação 
+copy=Copiar
+copyConnect=Copy on connect
+copyOfDrawing=Cópia do Desenho
+curved=Curved
+custom=Personalizado
+cut=Cortar 
+dashed=Tracejado 
+delete=Apagar
+diamond=Diamante
+diamondThin=Diamante (Fino)
+didYouKnow=Você sabia...
+direction=Direção 
+done=Concluído
+doubleClickOrientation=Clique duas vezes para mudar de orientação 
+drawing=Desenho{1}
+drawingEmpty=Desenho está vazio
+drawingTooLarge=O desenho é muito grande 
+duplicate=Duplicado
+east=Este
+edit=Editar 
+editLink=Editar ligação
+embed=Embutir
+embedNotice=Adicionar isto, uma vez, no fim da página
+enterGroup=Digitar grupo
+enterValue=Digite o valor 
+entityRelation=Relação Entidades
+error=Erro 
+errorLoadingFile=Erro ao carregar o arquivo
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Erro ao salvar o arquivo
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Sair do Grupo
+expand=Expandir
+export=Exportar
+failedToSaveTryReconnect=Falha ao salvar, tentando reconetar
+featureRequest=Feature Request
+feedback=Feedback
+file=Arquivo 
+filename=Nome do arquivo
+fileNotFound=Arquivo não encontrado
+fileNotLoaded=Arquivo não carregado
+fileNotSaved=Arquivo não salvo
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Cor de preenchimento 
+fit=Ajustar
+fitPage=Ajustar página
+fitPageWidth=Ajustar largura da página
+fitWindow=Ajustar Janela 
+flipH=Virar horizontal
+flipV=Virar vertical
+fontColor=Cor da fonte 
+fontFamily=Família fonte
+fontSize=Tamanho da fonte
+format=Formatar
+forum=Fóruns Discussão/Ajuda
+fromTemplate=Do Modelo
+fromText=Do Texto
+general=Geral
+global=Global 
+gradient=Gradiente
+gradientColor=Cor
+grid=Grelha
+group=Agrupar
+guides=Guias
+hateApp=I hate draw.io
+height=Altura 
+help=Ajuda 
+helpTranslate=Nos ajude a traduzir este aplicativo
+hide=Ocultar 
+home=Página Inicial
+horizontal=Horizontal 
+horizontalFlow=Fluxo Horizontal
+horizontalTree=Árvore Horizontal
+image=Imagem
+images=Imagens
+inline=Em linha
+import=Importar
+invalidOrMissingFile=Arquivo inválido ou em falta
+italic=Itálico 
+landscape=Paisagem 
+layout=Traçado
+left=Esquerda 
+leftAlign=Esquerda 
+line=Linha 
+lineend=Fim da Linha
+linestart=Início da Linha
+linewidth=Largura da Linha
+loading=Carregando...
+loveApp=I love draw.io
+manual=Manual
+middle=Meio
+moreResults=Mais resultados
+moreShapes=Mais Formas
+move=Mover
+navigation=Navegação
+new=Novo 
+noColor=Sem cor
+noFiles=Nenhum arquivo
+noMoreResults=Sem mais resultados
+none=Nenhum 
+noResultsFor=Sem resultados para '{1}'
+north=Norte 
+notConnected=Não conetado
+ok=OK 
+opacity=Opacidade 
+open=Abrir 
+openArrow=Aberta 
+openFile=Abrir Arquivo 
+openLink=Abrir ligação
+openInNewWindow=Abrir numa outra janela
+openSupported=Formato suportado é arquivo .XML salvos deste software
+options=Opções
+organic=Orgánico
+orthogonal=Ortogonal
+oval=Oval 
+pages=Páginas
+pageView=Layout da Página 
+pageSetup=Configuração da Página
+pageScale=Escala da Página
+pan=Panorama
+paperSize=Tamanho Papel 
+paste=Colar 
+perimeter=Perímetro 
+plain=Plana
+position=Posição 
+posterPrint=Imprimir Cartaz 
+preview=Pré-visualizar 
+print=Imprimir 
+readOnly=Read-only
+reconnecting=Reconetando
+redo=Refazer 
+removeFromGroup=Retirar do Grupo 
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} já existe. Você deseja substituí-lo? 
+replaceExistingDrawing=Substituir desenho já existente
+reset=Reset
+resize=Redimensionar
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Direita 
+rightAlign=Direita 
+rotate=Rodar
+rotation=Rotação 
+rounded=Arredondado 
+save=Salvar
+saveAs=Salvar como
+saved=Salvo
+saving=Salvando
+scrollbars=Barras de Rolagem
+search=Buscar
+selectAll=Selecionar Tudo 
+selectEdges=Selecione Bordas 
+selectFont=Selecione uma fonte 
+selectVertices=Selecione Vértices 
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Definir como borda padrão
+shadow=Sombra
+shape=Forma 
+share=Partilhar
+shareLink=Ligação para editar partilhado
+sharingServerNotice=Nota: Recurso Experimental. Use por sua conta e risco!
+sharingServerReady=Servidor de compartilhamento está pronto.
+sharingServerUnavailable=Servidor de compartilhamento está indisponível.
+signOut=Sair
+size=Tamanho 
+sourceSpacing=Espaçamento Fonte
+south=Sul
+spacing=Espaçamento 
+straight=Recta
+strokeColor=Cor da linha 
+style=Estilo 
+support=Support
+targetSpacing=Espaçamento Alvo
+text=Texto
+textAlignment=Alinhamento de texto 
+textOpacity=Opacidade do Texto
+tilt=Tilt
+toBack=Para Trás 
+toFront=Para a Frente 
+tooltips=Dicas Ferramenta
+top=Topo
+topAlign=Topo
+transparent=Transparente
+underline=Sublinhado 
+undo=Desfazer 
+ungroup=Desagrupar 
+updatingDocument=Atualizando Documento. Por favor, aguarde... 
+updatingSelection=Atualizando Seleção. Por favor, aguarde... 
+url=URL
+userLoggedOut=Sua sessão foi encerrada. Para salvar qualquer trabalho não salvo você tem que entrar na sua conta Google como
+vertical=Vertical 
+verticalFlow=Fluxo Vertical
+verticalTree=Árvore Vertical
+view=Visualização
+west=Oeste
+width=Largura 
+wordWrap=Word wrap
+zoom=Zoom 
+zoomIn=Mais Zoom 
+zoomOut=Menos Zoom 
diff --git a/public/assets/plugins/mxgraph/resources/dia_pt.txt b/public/assets/plugins/mxgraph/resources/dia_pt.txt
new file mode 100644
index 0000000..4e69edc
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_pt.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=Acerca draw.io
+access_denied=Acesso negado
+actualSize=Tamanho Real 
+addToExistingDrawing=Adicionar ao desenho existente
+addWaypoint=Add waypoint
+align=Alinhar 
+alignment=Alinhamento
+allChangesLost=Todas as modificações serão perdidas! 
+alreadyConnected=Nodos já conectados 
+apply=Aplicar
+arrange=Ordenar
+appNotInstalledAlert=App não instalada. Por favor, instale draw.io da Chrome Web Store e tente outra vez.
+appNotInstalledStatus=App não instalada.
+arrow=Seta
+arrows=Setas
+automatic=Automatic
+autosize=Auto Dimensionar 
+backgroundColor=Cor do fundo
+basic=Básico
+blankDrawing=Desenho em branco
+block=Bloco 
+bold=Negrito 
+borderColor=Cor da borda 
+borderWidth=Largura da borda
+bottom=Fundo
+bottomAlign=Fundo
+cancel=Cancelar 
+center=Centro 
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Modificar Orientação
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Círculo
+classic=Clássica
+clipart=Clipart
+close=Fechar 
+collapse=Recolher
+collapse-expand=Recolher/Expandir
+connect=Conectar
+connecting=A conectar
+connectWithDrive=Conecte-se com o Google Drive
+connection=Conexão 
+containsValidationErrors=Contém erros de validação 
+copy=Copiar
+copyConnect=Copy on connect
+copyOfDrawing=Cópia do Desenho
+curved=Curved
+custom=Personalizado
+cut=Cortar 
+dashed=Tracejado 
+delete=Apagar
+diamond=Diamante
+diamondThin=Diamante (Fino)
+didYouKnow=Sabia que...
+direction=Direcção 
+done=Concluído
+doubleClickOrientation=Clique duas vezes para mudar de orientação 
+drawing=Desenho{1}
+drawingEmpty=Desenho está vazio
+drawingTooLarge=O desenho é muito grande 
+duplicate=Duplicado
+east=Este
+edit=Editar 
+editLink=Editar link
+embed=Embutir
+embedNotice=Adicionar isto, uma vez, no fim da página
+enterGroup=Introduzir grupo
+enterValue=Introduzir o valor 
+entityRelation=Relação Entidades
+error=Erro 
+errorLoadingFile=Erro ao carregar o ficheiro
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Erro ao salvar o ficheiro
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Sair do Grupo
+expand=Expandir
+export=Exportar
+failedToSaveTryReconnect=Falha ao guardar, tentando reconetar
+featureRequest=Feature Request
+feedback=Feedback
+file=Ficheiro
+filename=Nome do ficheiro
+fileNotFound=Ficheiro não encontrado
+fileNotLoaded=Ficheiro não carregado
+fileNotSaved=Ficheiro não salvo
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Cor de preenchimento 
+fit=Ajustar
+fitPage=Ajustar página
+fitPageWidth=Ajustar largura da página
+fitWindow=Ajustar Janela 
+flipH=Virar na horizontal
+flipV=Virar na vertical
+fontColor=Cor da fonte 
+fontFamily=Família fonte
+fontSize=Tamanho da fonte
+format=Formatar
+forum=Fóruns Discussão/Ajuda
+fromTemplate=Do Template
+fromText=Do Texto
+general=Geral
+global=Global 
+gradient=Gradiente
+gradientColor=Cor
+grid=Grelha
+group=Agrupar
+guides=Guias
+hateApp=I hate draw.io
+height=Altura 
+help=Ajuda 
+helpTranslate=Nos ajude a traduzir esta aplicação
+hide=Ocultar 
+home=Página Inicial
+horizontal=Horizontal 
+horizontalFlow=Fluxo Horizontal
+horizontalTree=Árvore Horizontal
+image=Imagem
+images=Imagens
+inline=Em linha
+import=Importar
+invalidOrMissingFile=Ficheiro inválido ou em falta
+italic=Itálico 
+landscape=Paisagem 
+layout=Esboço
+left=Esquerda 
+leftAlign=Esquerda 
+line=Linha 
+lineend=Fim da Linha
+linestart=Início da Linha
+linewidth=Largura da Linha
+loading=A carregar...
+loveApp=I love draw.io
+manual=Manual
+middle=Meio
+moreResults=Mais resultados
+moreShapes=Mais Formas
+move=Mover
+navigation=Navegação
+new=Novo 
+noColor=Sem cor
+noFiles=Nenhum ficheiro
+noMoreResults=Sem mais resultados
+none=Nenhum 
+noResultsFor=Sem resultados para '{1}'
+north=Norte 
+notConnected=Não ligado
+ok=OK 
+opacity=Opacidade 
+open=Abrir 
+openArrow=Aberta 
+openFile=Abrir Ficheiro 
+openLink=Abrir link
+openInNewWindow=Abrir noutra janela
+openSupported=Formato suportado são ficheiros .XML guardados deste software
+options=Opções
+organic=Orgánico
+orthogonal=Ortogonal
+oval=Oval 
+pages=Páginas
+pageView=Layout da Página 
+pageSetup=Configuração da Página
+pageScale=Escala da Página
+pan=Panorama
+paperSize=Tamanho Papel 
+paste=Colar 
+perimeter=Perímetro 
+plain=Plana
+position=Posição 
+posterPrint=Imprimir Cartaz 
+preview=Pré-visualizar 
+print=Imprimir 
+readOnly=Read-only
+reconnecting=Reconectando
+redo=Refazer 
+removeFromGroup=Retirar do Grupo 
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} já existe. Você deseja substituí-lo? 
+replaceExistingDrawing=Substituir desenho já existente
+reset=Reset
+resize=Redimensionar
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Direita 
+rightAlign=Direita 
+rotate=Rodar
+rotation=Rotação 
+rounded=Arredondado 
+save=Guardar 
+saveAs=Guardar como 
+saved=Guardado
+saving=A guardar
+scrollbars=Scrollbars
+search=Procurar
+selectAll=Seleccionar Tudo 
+selectEdges=Seleccione Bordas 
+selectFont=Seleccione uma fonte 
+selectVertices=Seleccione Vértices 
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Definir como borda padrão
+shadow=Sombra
+shape=Forma 
+share=Partilhar
+shareLink=Link para edição partilhada
+sharingServerNotice=Nota: Função Experimental. Use por sua conta e risco!
+sharingServerReady=Servidor de compartilhamento está pronto.
+sharingServerUnavailable=Servidor de compartilhamento está indisponível.
+signOut=Sair
+size=Tamanho 
+sourceSpacing=Espaçamento Fonte
+south=Sul
+spacing=Espaçamento 
+straight=Recta
+strokeColor=Cor da linha 
+style=Estilo 
+support=Support
+targetSpacing=Espaçamento Alvo
+text=Texto
+textAlignment=Alinhamento de texto 
+textOpacity=Opacidade do Texto
+tilt=Tilt
+toBack=Para Trás 
+toFront=Para a Frente 
+tooltips=Dicas Ferramenta
+top=Topo
+topAlign=Topo
+transparent=Transparente
+underline=Sublinhado 
+undo=Desfazer 
+ungroup=Desagrupar 
+updatingDocument=Atualização do Documento. Por favor, aguarde... 
+updatingSelection=Atualização da Seleção. Por favor, aguarde... 
+url=URL
+userLoggedOut=Sua sessão foi encerrada. Para guardar qualquer trabalho por guardar, você tem que entrar na sua conta Google como
+vertical=Vertical 
+verticalFlow=Fluxo Vertical
+verticalTree=Árvore Vertical
+view=Visualização
+west=Oeste
+width=Largura 
+wordWrap=Word wrap
+zoom=Zoom 
+zoomIn=Mais Zoom 
+zoomOut=Menos Zoom 
diff --git a/public/assets/plugins/mxgraph/resources/dia_ro.txt b/public/assets/plugins/mxgraph/resources/dia_ro.txt
new file mode 100644
index 0000000..d5da7d1
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_ro.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=Despre draw.io
+access_denied=Accesul interzis
+actualSize=Dimensiunea Reală
+addToExistingDrawing=Adăugați la desenul existent
+addWaypoint=Add waypoint
+align=Aliniază
+alignment=Aliniere
+allChangesLost=Toate modificările vor fi pierdute!
+alreadyConnected=Nodurile sunt deja conectate
+apply=Aplică
+arrange=Aranjează
+appNotInstalledAlert=Aplicația nu a fost instalată. Vă rugăm să instalați draw.io în Chrome Web Store și încercați din nou
+appNotInstalledStatus=Aplicația nu a fost instalată.
+arrow=Săgeată
+arrows=Săgeți
+automatic=Automatic
+autosize=Auto-dimensionare
+backgroundColor=Culoare de fundal
+basic=De bază
+blankDrawing=Desen gol
+block=Bloc
+bold=Îngroșat
+borderColor=Culoarea marginilor
+borderWidth=Grosimea marginilor
+bottom=Bază
+bottomAlign=Aliniere in partea de jos
+cancel=Anulare
+center=Centrează
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Schimbă orientarea
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Cerc
+classic=Clasic
+clipart=Imagine
+close=Închide
+collapse=Micșorează
+collapse-expand=Micșorează/Extinde
+connect=Conectează
+connecting=În curs de conectare
+connectWithDrive=Connect with Google Drive
+connection=Conexiune
+containsValidationErrors=Conține erori de validare
+copy=Copiere
+copyConnect=Copy on connect
+copyOfDrawing=Copierea desenului
+curved=Curved
+custom=Personalizat
+cut=Tăiere
+dashed=Linie Punctată
+delete=Ștergere
+diamond=Romb
+diamondThin=Romb (Subțire)
+didYouKnow=Știați că...
+direction=Direcție
+done=Finalizat
+doubleClickOrientation=Efectuați dublu-click pentru a modifica orientarea
+drawing=Desen{1}
+drawingEmpty=Desenul este gol
+drawingTooLarge=Desenul este prea mare
+duplicate=Duplicare
+east=Est
+edit=Editare
+editLink=Editare link
+embed=Încorporați
+embedNotice=Adăugați aceasta o singură dată la finalul paginii
+enterGroup=Introduceți grup
+enterValue=Introduceți valoare
+entityRelation=Relația între entități
+error=Eroare
+errorLoadingFile=Eroare la încărcarea fișierului
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Eroare la salvarea fișierului
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Părăsiți grupul
+expand=Extinde
+export=Exportează
+failedToSaveTryReconnect=Salvare eșuată, se încearcă reconectarea
+featureRequest=Feature Request
+feedback=Feedback
+file=Fișier
+filename=Nume Fișier
+fileNotFound=Fișierul nu a fost găsit
+fileNotLoaded=Fișierul nu a fost încărcat
+fileNotSaved=Fișierul nu a fost salvat
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Culoarea de umplere
+fit=Potrivește dimensiunea
+fitPage=Potrivire cu dimensiunea paginii
+fitPageWidth=Potrivire cu lățimea paginii
+fitWindow=Potrivește dimensiunea cu cea a ferestrei
+flipH=Răsturnare pe orizontală
+flipV=Răsturnare pe verticală
+fontColor=Culoarea fontului
+fontFamily=Familia de fonturi
+fontSize=Dimensiunea fontului
+format=Formatare
+forum=Forumuri de Discuții/Ajutor
+fromTemplate=Din Template
+fromText=Din Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Culoare
+grid=Grilă
+group=Grupare
+guides=Ghidaje
+hateApp=I hate draw.io
+height=Înălțime
+help=Ajutor
+helpTranslate=Ajutați-ne să traducem această aplicație
+hide=Ascunde
+home=Acasă
+horizontal=Orizontal
+horizontalFlow=Curgere Orizontală
+horizontalTree=Arbore orizontal
+image=Imagine
+images=Imagini
+inline=Inline
+import=Importare
+invalidOrMissingFile=Fișier invalid sau inexistent
+italic=Inclinat
+landscape=Peisaj
+layout=Schemă
+left=Stânga
+leftAlign=Aliniere la Stânga
+line=Linie
+lineend=Final de Linie
+linestart=Început de Linie
+linewidth=Grosime linie
+loading=În curs de încărcare
+loveApp=I love draw.io
+manual=Manual
+middle=Mijloc
+moreResults=Mai Multe Rezultate
+moreShapes=Mai Multe Forme
+move=Mutare
+navigation=Navigare
+new=Nou
+noColor=Fără culoare
+noFiles=Nu există fișiere
+noMoreResults=Nu mai există rezultate
+none=Niciunul
+noResultsFor=Nu există rezultate pentru '{1}'
+north=Nord
+notConnected=Neconectat
+ok=OK
+opacity=Opacitate
+open=Deschidere
+openArrow=Săgeată deschisă
+openFile=Deschide fișier
+openLink=Deschide link
+openInNewWindow=Deschide în fereastră nouă
+openSupported=Formatul suportat este fișier .XML salvat cu acest software
+options=Opțiuni
+organic=Organic
+orthogonal=Ortogonal
+oval=Oval
+pages=Pagini
+pageView=Stil de pagină
+pageSetup=Reglaje pagină
+pageScale=Zoom pagină
+pan=Panoramare
+paperSize=Dimensiuni Hârtie
+paste=Lipire
+perimeter=Perimetru
+plain=Neted
+position=Poziție
+posterPrint=Imprimare Poster
+preview=Previzualizare
+print=Imprimare
+readOnly=Read-only
+reconnecting=Reconectare
+redo=Refacere
+removeFromGroup=Ștergere din grup
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} există deja. Doriți sa fie înlocuit?
+replaceExistingDrawing=Înlocuire desen existent
+reset=Resetare
+resize=Redimensionare
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Dreapta
+rightAlign=Aliniere la Dreapta
+rotate=Rotire
+rotation=Rotație
+rounded=Rotunjit
+save=Salvare
+saveAs=Salvare cu titlu nou
+saved=Salvat
+saving=În curs de salvare
+scrollbars=Bare de rulare
+search=Căutare
+selectAll=Selectează Totul
+selectEdges=Selectează Marginile
+selectFont=Selectează Fontul
+selectVertices=Selectează noduri
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Stabilește ca margine prestabilită
+shadow=Umbră
+shape=Formă
+share=Sharing
+shareLink=Link pentru editare în comun
+sharingServerNotice=Notă: Conținut experimental. Folosiți-l doar pe răspunderea dumneavoastră.
+sharingServerReady=Serverul de sharing este pregătit
+sharingServerUnavailable=Serverul de sharing nu este disponibil
+signOut=Deconectare
+size=Dimensiune
+sourceSpacing=Spațierea Sursei
+south=Sud
+spacing=Spațiere
+straight=Drept
+strokeColor=Culoarea liniei
+style=Stil
+support=Support
+targetSpacing=Spațierea țintei
+text=Text
+textAlignment=Aliniere Text
+textOpacity=Opacitate Text
+tilt=Tilt
+toBack=Înapoi
+toFront=Înainte
+tooltips=Sfaturi
+top=Vârf
+topAlign=Aliniere la Vârf
+transparent=Transparent
+underline=Subliniere
+undo=Anulare actiune anterioara
+ungroup=Degrupare
+updatingDocument=Actualizare Document. Vă rugăm așteptați...
+updatingSelection=Actualizare Selecție. Vă rugăm așteptați
+url=URL
+userLoggedOut=Sesiunea dumneavoastră s-a încheiat. Pentru a salva lucrările nesalvate trebuie să vă logați în contul Google ca
+vertical=Vertical
+verticalFlow=Curgere Verticală
+verticalTree=Arbore Vertical
+view=Vizualizare
+west=Vest
+width=Lărgime
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Apropiere
+zoomOut=Îndepărtare
diff --git a/public/assets/plugins/mxgraph/resources/dia_ru.txt b/public/assets/plugins/mxgraph/resources/dia_ru.txt
new file mode 100644
index 0000000..ff1334e
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_ru.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=О программе draw.io
+access_denied=Доступ запрещен
+actualSize=Фактический размер
+addToExistingDrawing=Добавить к существующему документу
+addWaypoint=Add waypoint
+align=Выровнять
+alignment=Выравнивание
+allChangesLost=Все изменения будут потеряны!
+alreadyConnected=Узлы уже соединены
+apply=Применить
+arrange=Упорядочить
+appNotInstalledAlert=Приложение не установлено. Установите приложение draw.io в Chrome Web Store и попытайтесь снова.
+appNotInstalledStatus=Приложение не установлено.
+arrow=Стрелка
+arrows=Стрелки
+automatic=Automatic
+autosize=Авторазмер
+backgroundColor=Цвет фона
+basic=Базовые
+blankDrawing=Новый документ
+block=Закрашенный наконечник
+bold=Полужирный
+borderColor=Цвет границы
+borderWidth=Толщина границы
+bottom=Снизу
+bottomAlign=По нижнему краю
+cancel=Отмена
+center=По центру
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Изменить ориентацию
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=По кругу
+classic=Классический наконечник
+clipart=Картинка
+close=Закрыть
+collapse=Свернуть
+collapse-expand=Свернуть/Развернуть
+connect=Соединить
+connecting=Подключение
+connectWithDrive=Connect with Google Drive
+connection=Соединение
+containsValidationErrors=Содержит ошибки проверки
+copy=Копировать
+copyConnect=Copy on connect
+copyOfDrawing=Копия документа
+curved=Curved
+custom=Настроить
+cut=Вырезать
+dashed=Пунктир
+delete=Удалить
+diamond=Ромб
+diamondThin=Ромб (тонкий)
+didYouKnow=Вы знали...
+direction=Направление
+done=Готово
+doubleClickOrientation=Дважды щелкните мышью, чтобы изменить ориентацию
+drawing=Рисунок{1}
+drawingEmpty=Документ пустой
+drawingTooLarge=Рисунок слишком большой
+duplicate=Дублировать
+east=Восток
+edit=Изменить
+editLink=Изменить ссылку
+embed=Вставить
+embedNotice=Добавьте один раз в конце страницы
+enterGroup=Введите группу
+enterValue=Введите значение
+entityRelation=Связь между объектами
+error=Ошибка
+errorLoadingFile=Ошибка при загрузке файла
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Ошибка при сохранении файла
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Выйти из группы
+expand=Развернуть
+export=Экспортировать
+failedToSaveTryReconnect=Не удалось сохранить, попытка повторного подключения
+featureRequest=Feature Request
+feedback=Feedback
+file=Файл
+filename=Имя файла
+fileNotFound=Файл не найден
+fileNotLoaded=Файл не загружен
+fileNotSaved=Файл не сохранен
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Цвет заливки
+fit=По размеру
+fitPage=Одна страница
+fitPageWidth=Ширина страницы
+fitWindow=Вписать в окно
+flipH=Отразить слева направо
+flipV=Отразить сверху вниз
+fontColor=Цвет текста
+fontFamily=Семейство шрифтов
+fontSize=Размер шрифта
+format=Формат
+forum=Обсуждение/Справочный форум
+fromTemplate=Из шаблона
+fromText=Из текста
+general=Общие
+global=Глобальный
+gradient=Градиент
+gradientColor=Цвет
+grid=Сетка
+group=Сгруппировать
+guides=Направляющие
+hateApp=I hate draw.io
+height=Высота
+help=Справка
+helpTranslate=Требуется помощь в переводе приложения
+hide=Скрыть
+home=Главная
+horizontal=Горизонтальная
+horizontalFlow=По горизонтали
+horizontalTree=Горизонтальное дерево
+image=Изображение
+images=Изображения
+inline=Встроенный
+import=Импортировать
+invalidOrMissingFile=Файл неверный или отсутствует
+italic=Курсив
+landscape=Альбомная
+layout=Структура
+left=Слева
+leftAlign=По левому краю
+line=Линия
+lineend=Конец линии
+linestart=Начало линии
+linewidth=Толщина линии
+loading=Загрузка
+loveApp=I love draw.io
+manual=Manual
+middle=По середине
+moreResults=Другие результаты
+moreShapes=Другие фигуры
+move=Переместить
+navigation=Навигация
+new=Создать
+noColor=Нет цвета
+noFiles=Нет файлов
+noMoreResults=Нет других результатов
+none=Ничего
+noResultsFor=Нет результатов для '{1}'
+north=Север
+notConnected=Нет подключен
+ok=OK
+opacity=Прозрачность
+open=Открыть
+openArrow=Незакрашенная стрелка
+openFile=Открыть файл
+openLink=Открыть ссылку
+openInNewWindow=Открыть в новом окне
+openSupported=Поддерживает файлы XML, сохраненные в данной программе
+options=Параметры
+organic=Взаимозависимая
+orthogonal=Ортогональная
+oval=Овал
+pages=Страницы
+pageView=Просмотр страницы
+pageSetup=Параметры страницы
+pageScale=Масштаб страницы
+pan=Панорама
+paperSize=Размер бумаги
+paste=Вставить
+perimeter=По периметру
+plain=Обычная
+position=Положение
+posterPrint=Печать постера
+preview=Просмотр
+print=Печать
+readOnly=Read-only
+reconnecting=Восстановление соединения
+redo=Вернуть
+removeFromGroup=Удалить из группы
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} уже существует. Хотите заменить?
+replaceExistingDrawing=Заменить существующий документ
+reset=Сбросить
+resize=Изменить размер
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Справа
+rightAlign=По правому краю
+rotate=Повернуть
+rotation=Поворот
+rounded=Скругленный
+save=Сохранить
+saveAs=Сохранить как
+saved=Сохранено
+saving=Идет сохранение
+scrollbars=Полосы прокрутки
+search=Поиск
+selectAll=Выделить все
+selectEdges=Выделить края
+selectFont=Выберите шрифт
+selectVertices=Выделить вершины
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Установить край по умолчанию
+shadow=Тень
+shape=Фигура
+share=Общий доступ
+shareLink=Ссылка на совместное редактирование
+sharingServerNotice=Примечание: экспериментальная функция, используйте по своему усмотрению!
+sharingServerReady=Сервер общего доступа доступен.
+sharingServerUnavailable=Сервер общего доступа не доступен.
+signOut=Выйти
+size=Размер
+sourceSpacing=От начального узла
+south=Юг
+spacing=Интервал
+straight=Прямой
+strokeColor=Цвет линии
+style=Стиль
+support=Support
+targetSpacing=От конечного узла
+text=Текст
+textAlignment=Выравнивание текста
+textOpacity=Прозрачность текста
+tilt=Tilt
+toBack=На задний план
+toFront=На передний план
+tooltips=Подсказки
+top=Сверху
+topAlign=По верхнему краю
+transparent=Прозрачный
+underline=Подчеркнутый
+undo=Отменить
+ungroup=Разгруппировать
+updatingDocument=Документ обновляется. Пожалуйста, подождите...
+updatingSelection=Выделенная область обновляется. Пожалуйста, подождите...
+url=URL-адрес
+userLoggedOut=Сеанс окончен. Чтобы сохранить изменения, войдите в свой аккаунт Google как
+vertical=Вертикальная
+verticalFlow=По вертикали
+verticalTree=Вертикальное дерево
+view=Вид
+west=Запад
+width=Ширина
+wordWrap=Word wrap
+zoom=Масштаб
+zoomIn=Увеличить
+zoomOut=Уменьшить
diff --git a/public/assets/plugins/mxgraph/resources/dia_sk.txt b/public/assets/plugins/mxgraph/resources/dia_sk.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_sk.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_sl.txt b/public/assets/plugins/mxgraph/resources/dia_sl.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_sl.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_sr.txt b/public/assets/plugins/mxgraph/resources/dia_sr.txt
new file mode 100644
index 0000000..4c14276
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_sr.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=O draw.io
+access_denied=Pristup odbijen
+actualSize=Prirodna veličina
+addToExistingDrawing=Dodaj na postojeći crtež
+addWaypoint=Add waypoint
+align=Poravnaj
+alignment=Poravnanje
+allChangesLost=Sve promene će biti izgubljene!
+alreadyConnected=Čvorovi su već povezani
+apply=Primeni
+arrange=Složi
+appNotInstalledAlert=Aplikacija nije instalirana. Molim vas instalirajte Diagram.ly u Chrome Web Store i pokušajte ponovo
+appNotInstalledStatus=Aplikacija nije instalirana.
+arrow=Strelica
+arrows=Strelice
+automatic=Automatic
+autosize=Automatska veličina
+backgroundColor=Boja pozadine
+basic=Osnovni
+blankDrawing=Prazan crtež
+block=Blok
+bold=Podebljano
+borderColor=Boja okvira
+borderWidth=Širina okvira
+bottom=Dno
+bottomAlign=Poravnanje pri dnu
+cancel=Otkaži
+center=Centar
+cannotLoad=Pokušaji učitavanja neuspešni. Molimo vas pokušajte kasnije.
+cannotLogin=Pokušaji logovanja neuspešni. Molimo vas pokušajte kasnije.
+changeOrientation=Promeni orijentaciju
+chatJoined={1} se pridružio
+chatLeft={1} je otišao
+chatWindowTitle=Chat
+circle=Krug
+classic=Klasičan
+clipart=Klip art
+close=Zatvori
+collapse=Spusti
+collapse-expand=Spusti/proširi
+connect=Poveži
+connecting=Povezivanje
+connectWithDrive=Povezivanje sa Google Drive
+connection=Veza
+containsValidationErrors=Sadrži greške u validaciji
+copy=Kopiraj
+copyConnect=Kopiraj pri povezivanju
+copyOfDrawing=Kopija crteža
+curved=Zakrivljeno
+custom=Posebno
+cut=Iseci
+dashed=Isprekidan
+delete=Ukloni
+diamond=Romb
+diamondThin=Romb (tanak)
+didYouKnow=Da li ste znali...
+direction=Pravac
+done=Završeno
+doubleClickOrientation=Dupli klik za promenu orijentacije
+drawing=Crtež{1}
+drawingEmpty=Crtež je prazan
+drawingTooLarge=Crtež je prevelik
+duplicate=Duplikat
+east=Istok
+edit=Uredi
+editLink=Uredi link
+embed=Ugradi
+embedNotice=Ugradi ovo jednom pri kraju stranice
+enterGroup=Uđi u grupu
+enterValue=Unesi vrednost
+entityRelation=Relacija entiteta
+error=Greška
+errorLoadingFile=Greška pri učitavanju dokumenta
+errorRenamingFile=Greška pri preimenovanju dokumenta
+errorRenamingFileNotFound=Greška pri preimenovanju. Datoteka nije pronađena.
+errorRenamingFileForbidden=Greška pri preimenovanju. Nedovoljna prava pristupa.
+errorSavingFile=Greška pri snimanju dokumenta
+errorSavingFileForbidden=Greška pri snimanju. Nedovoljna prava pristupa.
+errorSavingFileNotFound=Greška pri snimanju. Datoteka nije pronađena.
+exitGroup=Izađi iz grupe
+expand=Razvij
+export=Eksportuj
+failedToSaveTryReconnect=Neuspelo skladištenje, pokušaj rekonekcije
+featureRequest=Zatraži odliku
+feedback=Komentar
+file=Datoteka
+filename=Ime datoteke
+fileNotFound=Datoteka nije pronađena
+fileNotLoaded=Datoteka nije učitana
+fileNotSaved=Datoteka nije snimljena
+fileOpenLocation=Kako biste želeli otvoriti ovaj dokument?
+fillColor=Boja popunjavanja
+fit=Prilagodi
+fitPage=Prilagodi stranici
+fitPageWidth=Prilagodi širini stranice
+fitWindow=Prilagodi prozoru
+flipH=Preokreni vodoravno
+flipV=Preokreni uspravno
+fontColor=Boja fonta
+fontFamily=Font
+fontSize=Veličina slova
+format=Format
+forum=Forum
+fromTemplate=Od šablona
+fromText=Od teksta
+general=Opšti
+global=Globalan
+gradient=Gradijent
+gradientColor=Boja gradijenta
+grid=Mreža
+group=Grupiši
+guides=Vodiči
+hateApp=Mrzim draw.io
+height=Visina
+help=Pomoć
+helpTranslate=Pomozite nam u prevođenju ove aplikacije
+hide=Sakrij
+home=Dom
+horizontal=Vodoravan
+horizontalFlow=Vodoravni tok
+horizontalTree=Vodoravno drvo
+image=Slika
+images=Slike
+inline=Inline
+import=Import
+invalidOrMissingFile=Neispravan ili nepostojeći dokument
+italic=Kurziv
+landscape=Pejzaž
+layout=Raspored
+left=Levo
+leftAlign=Levo poravnanje
+line=Linija
+lineend=Kraj linije
+linestart=Početak linije
+linewidth=Debljina linije
+loading=Učitavanje
+loveApp=Volim draw.io
+manual=Ručno
+middle=Sredina
+moreResults=Još rezultata
+moreShapes=Još oblika
+move=Pomeri
+navigation=Navigacija
+new=Novi
+noColor=Bez boje
+noFiles=Nema fajlova
+noMoreResults=Nema više rezultata
+none=Ništa
+noResultsFor=Nema više rezultata za {1}
+north=Sever
+notConnected=Bez konekcije
+ok=OK
+opacity=Prozirnost
+open=Otvori
+openArrow=Otvorena strelica
+openFile=Otvori datoteku
+openLink=Otvori link
+openInNewWindow=Otvori u novom prozoru
+openSupported=Podržani format je .XML datoteka sačuvana iz ovog softvera
+options=Opcije
+organic=Organski
+orthogonal=Pravougaoni
+oval=Ovalan
+pages=Stranice
+pageView=Pregled strane
+pageSetup=Podešavanje strane
+pageScale=Razmera strane
+pan=Pan
+paperSize=Veličina papira
+paste=Zalepi
+perimeter=Perimetar
+plain=Jednostavan
+position=Pozicija
+posterPrint=Štampa postera
+preview=Pregled
+print=Štampa
+readOnly=Samo čitanje
+reconnecting=Rekonekcija
+redo=Ponovi
+removeFromGroup=Ukloni iz grupe
+removeWaypoint=Preimenuj
+rename=Preimenovano
+renamed=Preimenovanje
+renaming=Renaming
+replace={1} već postoji. Da li želite da ga zamenite?
+replaceExistingDrawing=Zameni postojeći crtež
+reset=Reset
+resize=Predimenzioniranje
+retryingIn=Ponovni pokušaj za {1} sekundi
+retryingLoad=Učitavanje neuspešno. Ponovni pokušaj...
+retryingLogin=Vreme logovanja isteklo. Ponovni pokušaj...
+right=Desno
+rightAlign=Desno poravnanje
+rotate=Rotiraj
+rotation=Rotacija
+rounded=Zaobljen
+save=Snimi
+saveAs=Snimi kao
+saved=Snimljeno
+saving=Snimanje
+scrollbars=Skroltrake
+search=Pretraga
+selectAll=Izaberi sve
+selectEdges=Izaberi grane
+selectFont=Izaberi font
+selectVertices=Izaberi čvorove
+sendMessage=Pošalji
+sessionTimeoutOnSave=Vaša sesija je istekla i odjavljeni ste sa Google Drive-a. Kliknite OK da se prijavite i snimite izmene.
+setAsDefaultEdge=Postavi kao podrazumevanu granu
+shadow=Senka
+shape=Oblik
+share=Podeli
+shareLink=Podeli link
+sharingServerNotice=Pažnja: eksperimentalna funkcija. Upotreba na sopstvenu odgovornost!
+sharingServerReady=Server za razmenu je spreman.
+sharingServerUnavailable=Server za razmenu je nedostupan.
+signOut=Odjavi se
+size=Veličina
+sourceSpacing=Proređivanje izvora
+south=Jug
+spacing=Proređivanje
+straight=Pravo
+strokeColor=Boja linije
+style=Stil
+support=Support
+targetSpacing=Proređivanje odredišta
+text=Tekst
+textAlignment=Poravnanje teksta
+textOpacity=Neprozirnost teksta
+tilt=Nagni
+toBack=Postavi iza
+toFront=Postavi ispred
+tooltips=Opisi alatki
+top=Vrh
+topAlign=Gornje poravnanje
+transparent=Proziran
+underline=Podvučen
+undo=Opozovi
+ungroup=Podeli
+updatingDocument=Ažuriranje dokumenta. Molimo sačekajte...
+updatingSelection=Ažuriranje selekcije. Molimo sačekajte...
+url=URL
+userLoggedOut=Vaša sesija je završena. Da bi ste snimili izmena, morate se prijaviti na vaš Google nalog kao
+vertical=Uspravno
+verticalFlow=Uspravni tok
+verticalTree=Uspravno drvo
+view=Pogled
+west=Zapad
+width=Širina
+wordWrap=Word wrap
+zoom=Uvećanje
+zoomIn=Uvećaj
+zoomOut=Umanji
diff --git a/public/assets/plugins/mxgraph/resources/dia_sv.txt b/public/assets/plugins/mxgraph/resources/dia_sv.txt
new file mode 100644
index 0000000..489cb16
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_sv.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=Om draw.io
+access_denied=Åtkomst nekad
+actualSize=Verklig storlek
+addToExistingDrawing=Lägg till i befintlig ritning
+addWaypoint=Lägg till vägpunkt
+align=Justera
+alignment=Justering
+allChangesLost=Alla ändringar kommer gå förlorade!
+alreadyConnected=Knutpunkterna är redan ihopkopplade
+apply=Använd
+arrange=Ordna
+appNotInstalledAlert=Appen är inte installerad. Vänligen installera draw.io i Chrome Web Store och försök igen.
+appNotInstalledStatus=Appen är inte installerad.
+arrow=Pil
+arrows=Pilar
+automatic=Automatic
+autosize=Ändra storlek automatiskt
+backgroundColor=Bakgrundsfärg
+basic=Enkel
+blankDrawing=Tom ritning
+block=Block
+bold=Fet
+borderColor=Linjefärg
+borderWidth=Linjebredd
+bottom=Nedtill
+bottomAlign=Justera nedtill
+cancel=Avbryt
+center=Centrera
+cannotLoad=Kunde inte ladda, försök igen senare.
+cannotLogin=Kunde inte logga in, försök igen senare.
+changeOrientation=Ändra riktning
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Cirkel
+classic=Klassisk
+clipart=Clipart
+close=Stäng
+collapse=Minimera
+collapse-expand=Minimera/Expandera
+connect=Anslut
+connecting=Ansluter
+connectWithDrive=Anslut till Google Drive
+connection=Anslutning
+containsValidationErrors=Innehåller valideringsfel
+copy=Kopiera
+copyConnect=Kopera vid anslutning
+copyOfDrawing=Kopia av ritning
+curved=Böjd
+custom=Anpassad
+cut=Klipp ut
+dashed=Streckad
+delete=Ta bort
+diamond=Romb
+diamondThin=Romb (tunn)
+didYouKnow=Visste du att…
+direction=Riktning
+done=Klar
+doubleClickOrientation=Dubbelklicka för att ändra riktning
+drawing=Ritning{1}
+drawingEmpty=Ritningen är tom
+drawingTooLarge=Ritningen är för stor
+duplicate=Duplicera
+east=Öster
+edit=Redigera
+editLink=Redigera länk
+embed=Infoga
+embedNotice=Lägg till den här koden i slutet av sidan
+enterGroup=Gå in i grupp
+enterValue=Ange värde
+entityRelation=Enhetsrelation
+error=Fel
+errorLoadingFile=Kunde inte ladda filen
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Kunde inte spara filen
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Gå ut ur grupp
+expand=Expandera
+export=Exportera
+failedToSaveTryReconnect=Kunde inte spara, försöker ansluta igen
+featureRequest=Önskemål om ny funktion 
+feedback=Feedback
+file=Arkiv
+filename=Filnamn
+fileNotFound=Kunde inte hitta filen
+fileNotLoaded=Kunde inte ladda filen
+fileNotSaved=Kunde inte spara filen
+fileOpenLocation=Hur fil du öppna de här filerna?
+fillColor=Fyllningsfärg
+fit=Anpassa
+fitPage=Anpassa till sidan
+fitPageWidth=Anpassa till sidbredden
+fitWindow=Anpassa till fönstret
+flipH=Vänd horisontellt
+flipV=Vänd vertikalt
+fontColor=Textfärg
+fontFamily=Typsnitt
+fontSize=Textstorlek
+format=Format
+forum=Diskussion/Hjälpforum
+fromTemplate=Från mall
+fromText=Från text
+general=Allmänt
+global=Global
+gradient=Övertoning
+gradientColor=Färg
+grid=Rutnät
+group=Gruppera
+guides=Stödlinjer
+hateApp=Jag hatar draw.io
+height=Höjd
+help=Hjälp
+helpTranslate=Hjälp oss översätta det här programmet
+hide=Göm
+home=Hem
+horizontal=Horisontell
+horizontalFlow=Horisontellt flöde
+horizontalTree=Horisontellt träd
+image=Bild
+images=Bilder
+inline=På rad
+import=Importera
+invalidOrMissingFile=Felaktig eller saknad fil
+italic=Kursiv
+landscape=Landskap
+layout=Layout
+left=Vänster
+leftAlign=Vänsterjustera
+line=Linje
+lineend=Linjens slut
+linestart=Linjens början
+linewidth=Linjebredd
+loading=Laddar
+loveApp=Jag älskar draw.io
+manual=Manual
+middle=Mitten
+moreResults=Fler resultat
+moreShapes=Fler former
+move=Flytta
+navigation=Navigering
+new=Ny
+noColor=Ingen färg
+noFiles=Inga filer
+noMoreResults=Inga fler resultat
+none=Ingen
+noResultsFor=Inga resultat för  '{1}'
+north=Norr
+notConnected=Inte ansluten
+ok=OK
+opacity=Opacitet
+open=Öppna
+openArrow=Öppen pil
+openFile=Öppna fil
+openLink=Öppna länk
+openInNewWindow=Öppna i nytt fönster
+openSupported=Formatet som stöds är .XML-filer som sparats från det här programmet
+options=Alternativ
+organic=Organisk
+orthogonal=Vinkelrät
+oval=Oval
+pages=Sidor
+pageView=Sidvisning
+pageSetup=Sidinställningar
+pageScale=Sidskala
+pan=Panorering
+paperSize=Pappersformat
+paste=Klistra in
+perimeter=Omkrets
+plain=Enkel
+position=Position
+posterPrint=Affischutskrift
+preview=Förhandsgranska
+print=Skriv ut
+readOnly=Read-only
+reconnecting=Återansluter
+redo=Gör om
+removeFromGroup=Ta bort från grupp
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} finns redan. Vill du ersätta den?
+replaceExistingDrawing=Ersätt befintlig ritning
+reset=Återställ
+resize=Ändra storlek
+retryingIn=Försöker igen om {1} sekunder
+retryingLoad=Kunde inte ladda, försöker igen…
+retryingLogin=Det tog för lång tid att logga in, försöker igen…
+right=Höger
+rightAlign=Högerjustera
+rotate=Rotera
+rotation=Rotering
+rounded=Rundad
+save=Spara
+saveAs=Spara som
+saved=Sparad
+saving=Sparar
+scrollbars=Rullningslister
+search=Sök
+selectAll=Markera allt
+selectEdges=Markera kanter
+selectFont=Välj typsnitt
+selectVertices=Markera hörn
+sendMessage=Send
+sessionTimeoutOnSave=Du har loggats ut från Google Drive på grund av inaktivitet. Klicka på OK för att logga in och spara.
+setAsDefaultEdge=Använd som förvald kant
+shadow=Skugga
+shape=Form
+share=Dela
+shareLink=Länk för delad redigering
+sharingServerNotice=Tänk på att det här är en experimentell funktion, använd den på egen risk!
+sharingServerReady=Delningsservern är redo.
+sharingServerUnavailable=Delningsservern är inte tillgänglig.
+signOut=Logga ut
+size=Storlek
+sourceSpacing=Källavstånd
+south=Söder
+spacing=Avstånd
+straight=Rak
+strokeColor=Linjefärg
+style=Stil
+support=Support
+targetSpacing=Målavstånd
+text=Text
+textAlignment=Textjustering
+textOpacity=Textopacitet
+tilt=Tilt
+toBack=Lägg underst
+toFront=Lägg överst
+tooltips=Verktygstips
+top=Överst
+topAlign=Justera upptill
+transparent=Genomskinlig
+underline=Understruken
+undo=Ångra
+ungroup=Dela upp
+updatingDocument=Uppdaterar dokumentet, vänligen vänta…
+updatingSelection=Uppdaterar markeringen, vänligen vänta…
+url=URL
+userLoggedOut=Du har loggats ut. För att spara igen måste du logga in på Google som
+vertical=Vertikal
+verticalFlow=Vertikalt flöde
+verticalTree=Vertikalt träd
+view=Innehåll
+west=Väster
+width=Bredd
+wordWrap=Radbrytning
+zoom=Zooma
+zoomIn=Zooma in
+zoomOut=Zooma ut
diff --git a/public/assets/plugins/mxgraph/resources/dia_sw.txt b/public/assets/plugins/mxgraph/resources/dia_sw.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_sw.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_ta.txt b/public/assets/plugins/mxgraph/resources/dia_ta.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_ta.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_te.txt b/public/assets/plugins/mxgraph/resources/dia_te.txt
new file mode 100644
index 0000000..1a9df74
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_te.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=About draw.io
+access_denied=Access denied
+actualSize=Actual Size
+addToExistingDrawing=Add to existing drawing
+addWaypoint=Add waypoint
+align=Align
+alignment=Alignment
+allChangesLost=All changes will be lost!
+alreadyConnected=Nodes already connected
+apply=Apply
+arrange=Arrange
+appNotInstalledAlert=App not installed. Please install draw.io in Chrome Web Store and try again.
+appNotInstalledStatus=App not installed.
+arrow=Arrow
+arrows=Arrows
+automatic=Automatic
+autosize=Autosize
+backgroundColor=Background color
+basic=Basic
+blankDrawing=Blank Drawing
+block=Block
+bold=Bold
+borderColor=Border color
+borderWidth=Borderwidth
+bottom=Bottom
+bottomAlign=Bottom Align
+cancel=Cancel
+center=Center
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Change Orientation
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Circle
+classic=Classic
+clipart=Clipart
+close=Close
+collapse=Collapse
+collapse-expand=Collapse/Expand
+connect=Connect
+connecting=Connecting
+connectWithDrive=Connect with Google Drive
+connection=Connection
+containsValidationErrors=Contains validation errors
+copy=Copy
+copyConnect=Copy on connect
+copyOfDrawing=Copy of Drawing
+curved=Curved
+custom=Custom
+cut=Cut
+dashed=Dashed
+delete=Delete
+diamond=Diamond
+diamondThin=Diamond (Thin)
+didYouKnow=Did you know...
+direction=Direction
+done=Done
+doubleClickOrientation=Doubleclick to change orientation
+drawing=Drawing{1}
+drawingEmpty=Drawing is empty
+drawingTooLarge=Drawing is too large
+duplicate=Duplicate
+east=East
+edit=Edit
+editLink=Edit link
+embed=Embed
+embedNotice=Add this once at the end of the page
+enterGroup=Enter group
+enterValue=Enter value
+entityRelation=Entity Relation
+error=Error
+errorLoadingFile=Error loading file
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Error saving file
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Exit Group
+expand=Expand
+export=Export
+failedToSaveTryReconnect=Failed to save, trying to reconnect
+featureRequest=Feature Request
+feedback=Feedback
+file=File
+filename=Filename
+fileNotFound=File not found
+fileNotLoaded=File not loaded
+fileNotSaved=File not saved
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Fill color
+fit=Fit
+fitPage=Fit page
+fitPageWidth=Fit Page width
+fitWindow=Fit Window
+flipH=Flip Horizontal
+flipV=Flip Vertical
+fontColor=Font color
+fontFamily=Font family
+fontSize=Font size
+format=Format
+forum=Discussion/Help Forums
+fromTemplate=From Template
+fromText=From Text
+general=General
+global=Global
+gradient=Gradient
+gradientColor=Color
+grid=Grid
+group=Group
+guides=Guides
+hateApp=I hate draw.io
+height=Height
+help=Help
+helpTranslate=Help us translate this application
+hide=Hide
+home=Home
+horizontal=Horizontal
+horizontalFlow=Horizontal Flow
+horizontalTree=Horizontal tree
+image=Image
+images=Images
+inline=Inline
+import=Import
+invalidOrMissingFile=Invalid or missing file
+italic=Italic
+landscape=Landscape
+layout=Layout
+left=Left
+leftAlign=Left Align
+line=Line
+lineend=Line End
+linestart=Line Start
+linewidth=Linewidth
+loading=Loading
+loveApp=I love draw.io
+manual=Manual
+middle=Middle
+moreResults=More Results
+moreShapes=More Shapes
+move=Move
+navigation=Navigation
+new=New
+noColor=No color
+noFiles=No files
+noMoreResults=No More Results
+none=None
+noResultsFor=No results for '{1}'
+north=North
+notConnected=Not connected
+ok=OK
+opacity=Opacity
+open=Open
+openArrow=Open Arrow
+openFile=Open file
+openLink=Open link
+openInNewWindow=Open in new window
+openSupported=Supported format is .XML files saved from this software
+options=Options
+organic=Organic
+orthogonal=Orthogonal
+oval=Oval
+pages=Pages
+pageView=Page View
+pageSetup=Page Setup
+pageScale=Page Scale
+pan=Pan
+paperSize=Paper Size
+paste=Paste
+perimeter=Perimeter
+plain=Plain
+position=Position
+posterPrint=Poster Print
+preview=Preview
+print=Print
+readOnly=Read-only
+reconnecting=Reconnecting
+redo=Redo
+removeFromGroup=Remove from group
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} already exists. Do you want to replace it?
+replaceExistingDrawing=Replace existing drawing
+reset=Reset
+resize=Resize
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Right
+rightAlign=Right Align
+rotate=Rotate
+rotation=Rotation
+rounded=Rounded
+save=Save
+saveAs=Save As
+saved=Saved
+saving=Saving
+scrollbars=Scrollbars
+search=Search
+selectAll=Select All
+selectEdges=Select Edges
+selectFont=Select a font
+selectVertices=Select Vertices
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Set as default edge
+shadow=Shadow
+shape=Shape
+share=Share
+shareLink=Link for shared editing
+sharingServerNotice=Note: Experimental feature. Use at own risk!
+sharingServerReady=Sharing server is ready.
+sharingServerUnavailable=Sharing server is unavailable.
+signOut=Sign Out
+size=Size
+sourceSpacing=Source Spacing
+south=South
+spacing=Spacing
+straight=Straight
+strokeColor=Line color
+style=Style
+support=Support
+targetSpacing=Target Spacing
+text=Text
+textAlignment=Text Alignment
+textOpacity=Text Opacity
+tilt=Tilt
+toBack=To Back
+toFront=To Front
+tooltips=Tooltips
+top=Top
+topAlign=Top Align
+transparent=Transparent
+underline=Underline
+undo=Undo
+ungroup=Ungroup
+updatingDocument=Updating Document. Please wait...
+updatingSelection=Updating Selection. Please wait...
+url=URL
+userLoggedOut=Your session has ended. To save any unsaved work you have to log in to your Google account as
+vertical=Vertical
+verticalFlow=Vertical Flow
+verticalTree=Vertical tree
+view=View
+west=West
+width=Width
+wordWrap=Word wrap
+zoom=Zoom
+zoomIn=Zoom In
+zoomOut=Zoom Out
diff --git a/public/assets/plugins/mxgraph/resources/dia_th.txt b/public/assets/plugins/mxgraph/resources/dia_th.txt
new file mode 100644
index 0000000..1edf3cc
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_th.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=เกี่ยวกับ draw.io
+access_denied=ปฏิเสธการเข้าถึง
+actualSize=ขนาดปกติ
+addToExistingDrawing=เพิ่มเข้าสู่การวาดปัจจุบัน
+addWaypoint=Add waypoint
+align=จัดเรียงแนวเดียวกัน
+alignment=การจัดเรียงแนวเดียวกัน
+allChangesLost=การเปลี่ยนแปลงทั้งหมดจะสูญหาย
+alreadyConnected=ปุ่มเชื่อมต่อเรียบร้อยแล้ว
+apply=ใช้งาน
+arrange=จัดการ
+appNotInstalledAlert=แอพฯยังไม่ถูกติดตั้ง กรุณาติดตั้ง draw.io ใน Chrome Web Store และลองอีกครั้ง
+appNotInstalledStatus=แอพฯยังไม่ถูกติดตั้ง
+arrow=ลูกศร
+arrows=ลูกศร
+automatic=Automatic
+autosize=ขนาดอัติโนมัติ
+backgroundColor=สีพื้นหลัง
+basic=พื้นฐาน
+blankDrawing=Drawing เปล่า
+block=ปิดกั้น
+bold=ตัวหนา
+borderColor=สีเส้นขอบ
+borderWidth=ความกว้างเส้นขอบ
+bottom=ด้านล่าง
+bottomAlign=จัดเรียงแนวเดียวกันด้านล่าง
+cancel=ยกเลิก
+center=ตรงกลาง
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=เปลี่ยนตำแหน่ง
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=วงกลม
+classic=คลาสสิค
+clipart=คลิปอาร์ท
+close=ปิด
+collapse=ย่อ
+collapse-expand=ย่อ/ขยาย
+connect=เชื่อมต่อ
+connecting=กำลังเชื่อมต่อ
+connectWithDrive=เชื่อมต่อกับ Google Drive 
+connection=เชื่อมต่อสัญญาณ
+containsValidationErrors=มีข้อผิดพลาดจากการตรวจสอบ
+copy=คัดลอก
+copyConnect=Copy on connect
+copyOfDrawing=คัดลอก Drawing
+curved=Curved
+custom=เลือกตามความต้องการ
+cut=ตัด
+dashed=เส้นประ
+delete=ลบ
+diamond=สี่เหลี่ยมขนมเปียกปูน
+diamondThin=สี่เหลี่ยมขนมเปียกปูน (บาง)
+didYouKnow=คุณรู้หรือไม่.....
+direction=ทิศทาง
+done=เสร็จสิ้น
+doubleClickOrientation=ดับเบิ้ลคลิ๊กเพื่อเปลี่ยนทิศทาง
+drawing=Drawing{1} 
+drawingEmpty=Drawing ว่างเปล่า
+drawingTooLarge=Drawing ใหญ่เกินไป
+duplicate=ทำซ้ำซ้อน
+east=ทิศตะวันออก
+edit=แก้ไข
+editLink=แก้ไข Link
+embed=ฝังตัว
+embedNotice=เพิ่มส่วนนี้ที่ส่วนท้ายของหน้าทันที
+enterGroup=ใส่กลุ่ม
+enterValue=ใส่ค่า
+entityRelation=ความสัมพันธ์ทางเอกลักษณ์
+error=ผิดพลาด
+errorLoadingFile=การโหลดไฟล์ผิดพลาด
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=การบันทึกไฟล์ผิดพลาด
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=ออกจากกลุ่ม
+expand=ขยาย
+export=ส่งออก
+failedToSaveTryReconnect=การบันทึกล้มเหลว กำลังเชื่อมต่อ
+featureRequest=ร้องขอคุณลักษณะ
+feedback=ผลตอบรับ
+file=ไฟล์
+filename=ชื่อไฟล์
+fileNotFound=ไม่พบไฟล์
+fileNotLoaded=ไฟล์ไม่โหลด
+fileNotSaved=ไฟล์ไม่ถูกบันทึก
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=เติมสี
+fit=พอดี
+fitPage=พอดีหน้า
+fitPageWidth=ความกว้างพอดีหน้า
+fitWindow=พอดีหน้าต่าง
+flipH=พลิกไปแนวนอน
+flipV=พลิกไปแนวตั้ง
+fontColor=สีตัวอักษร
+fontFamily=รูปแบบอักษร
+fontSize=ขนาดอักษร
+format=รูปแบบ
+forum=พูดคุย/ฟอรั่มให้ความช่วยเหลือ
+fromTemplate=จาก Template
+fromText=จากตัวอักษร
+general=ทั่วไป
+global=ทั่วโลก
+gradient=ความลาดชัน
+gradientColor=สี
+grid=แบบตาราง
+group=กลุ่ม
+guides=แนะนำ
+hateApp=ฉันเกลียด draw.io
+height=ความสูง
+help=ช่วยเหลือ
+helpTranslate=ช่วยเราแปลแอพพลิเคชั่นนี้
+hide=ซ่อน
+home=หน้าแรก
+horizontal=แนวนอน
+horizontalFlow=ผังในแนวนอน
+horizontalTree=แผนผังต้นไม้ในแนวนอน
+image=ภาพ
+images=ภาพ
+inline=อยู่ในเส้น
+import=นำเข้า
+invalidOrMissingFile=ไฟล์ไม่ถูกต้องหรือไฟล์สูญหาย
+italic=ตัวเอียง
+landscape=ภูมิทัศน์
+layout=ผังงาน
+left=ซ้าย
+leftAlign=จัดเรียงไปทางด้านซ้าย
+line=เส้น
+lineend=สิ้นสุดเส้น
+linestart=เริ่มต้นเส้น
+linewidth=ความกว้างของเส้น
+loading=กำหลังโหลด
+loveApp=ฉันรัก draw.io
+manual=Manual
+middle=กลาง
+moreResults=ผลลัพธ์เพิ่มเติม
+moreShapes=รูปร่างเพิ่มเติม
+move=เคลื่อนย้าย
+navigation=ท่องเว็บ
+new=ใหม่
+noColor=ไม่มีสี
+noFiles=ไม่มีไฟล์
+noMoreResults=ไม่มีผลลัพธ์อื่น
+none=ไม่มี
+noResultsFor=ไม่มีผลลัพธ์สำหรับ '{1}'
+north=ทิศเหนือ
+notConnected=ไม่มีการเชื่อมต่อ
+ok=OK
+opacity=ความทึบแสง
+open=เปิด
+openArrow=เปิดลูกศร
+openFile=เปิดไฟล์
+openLink=เปิด Link 
+openInNewWindow=เปิดหน้าต่างใหม่
+openSupported=รูปแบบไฟล์ที่สนับสนุนคือ .XML ที่ถูกบันทึกจากซอฟท์แวร์นี้
+options=ตัวเลือก
+organic=ออแกนิค
+orthogonal=ตั้งฉากกัน
+oval=รูปไข่
+pages=หน้า
+pageView=มุมมองหน้า
+pageSetup=ตั้งค่าหน้า
+pageScale=ขนาดหน้า
+pan=ดูมุมกว้าง
+paperSize=ขนาดกระดาษ
+paste=วาง
+perimeter=เส้นรอบวง
+plain=ราบเรียบ
+position=ตำแหน่ง
+posterPrint=พิมพ์โปสเตอร์
+preview=ดูภาพก่อนพิมพ์
+print=พิมพ์
+readOnly=Read-only
+reconnecting=เชื่อมต่ออีกครั้ง
+redo=ทำอีกครั้ง
+removeFromGroup=ลบออกจากกลุ่ม
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace=มีอยู่แล้ว คุณต้องการแทนที่หรือไม่?
+replaceExistingDrawing=แทนที่ Drawing ที่มีอยู่แล้ว
+reset=ตั้งค่าใหม่
+resize=ปรับขนาด
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=ขวา
+rightAlign=จัดเรียงด้านขวา
+rotate=หมุน
+rotation=การหมุน
+rounded=รูปร่างกลม
+save=บันทึก
+saveAs=บันทึกเป็น
+saved=บันทึกเรียบร้อยแล้ว
+saving=กำลังบันทึก
+scrollbars=แถบเลื่อน
+search=ค้นหา
+selectAll=เลือกทั้งหมด
+selectEdges=เลือกขอบ
+selectFont=เลือกอักษร
+selectVertices=เลือกจุดสูงสุด
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=ตั้งเป็นค่าอัตโนมัติ
+shadow=เงา
+shape=รูปร่าง
+share=แบ่งปัน
+shareLink=เชื่อมต่อเพื่อการแก้ไขร่วมกัน
+sharingServerNotice=หมายเหตุ: ทดลองใช้คุณลักษณะ ผู้ใช้รับผิดชอบความเสี่ยงเอง!
+sharingServerReady=การเชื่อมต่อเซอร์ฟเวอร์พร้อมใช้งาน
+sharingServerUnavailable=ไม่สามารถเชื่อมต่อเซอร์ฟเวอร์ได้
+signOut=ลงชื่อออก
+size=ขนาด
+sourceSpacing=เว้นวรรคแหล่งข้อมูล
+south=ทิศใต้
+spacing=การเว้นวรรค
+straight=ตรง
+strokeColor=เส้นสี
+style=รูปแบบ
+support=Support
+targetSpacing=การเว้นวรรคเป้าหมาย
+text=ข้อความ
+textAlignment=การจัดเรียงของข้อความ
+textOpacity=ความทึบแสงของข้อความ
+tilt=Tilt
+toBack=ไปยังด้านหลัง
+toFront=ไปยังด้านหน้า
+tooltips=กล่องข้อความช่วยเหลือ
+top=บนสุด
+topAlign=จัดเรียงแนวบนสุด
+transparent=ความโปร่งแสง
+underline=ขีดเส้นใต้
+undo=ยกเลิก
+ungroup=ยกเลิกการจัดกลุ่ม
+updatingDocument=กำลังอัพเดทข้อมูล กรุณารอสักครู่...
+updatingSelection=กำลังอัพเดทการเลือก กรุณารอสักครู่...
+url=URL
+userLoggedOut=ส่วนของคุณได้สิ้นสุดแล้ว ในการที่จะบันทึกข้อมูลที่ยังไม่มีการบันทึก กรุณาล็อกอินเข้าสู่บัญชี Google เป็น
+vertical=แนวตั้ง
+verticalFlow=ผังในแนวตั้ง
+verticalTree=แผนผังต้นไม้ในแนวตั้ง
+view=มุมมอง
+west=ทิศตะวันตก
+width=ความกว้าง
+wordWrap=Word wrap
+zoom=ขยาย
+zoomIn=ขยายเข้า
+zoomOut=ขยายออก
diff --git a/public/assets/plugins/mxgraph/resources/dia_tr.txt b/public/assets/plugins/mxgraph/resources/dia_tr.txt
new file mode 100644
index 0000000..10ec67e
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_tr.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=draw.io hakkında
+access_denied=Erişim engellendi
+actualSize=Gerçek boyutu
+addToExistingDrawing=Mevcut resime ekle
+addWaypoint=Add waypoint
+align=Aynı hizaya getir
+alignment=Hizalama
+allChangesLost=Bütün değişiklikler kaybedilecek!
+alreadyConnected=Düğümler zaten bağlı
+apply=Uygula
+arrange=Düzenle
+appNotInstalledAlert=Uygulama yüklü değil. Lütfen draw.io'yu Chrome Web Mağazası'na yükleyin ve tekrar deneyin
+appNotInstalledStatus=Uygulama yüklü değil
+arrow=Ok
+arrows=Oklar
+automatic=Automatic
+autosize=Otomatik boyutlandır
+backgroundColor=Arkaplan rengi
+basic=Temel
+blankDrawing=Boş resim
+block=Engelle
+bold=Koyu
+borderColor=Kenarlık rengi
+borderWidth=Kenarlık genişliği
+bottom=Alt hiza
+bottomAlign=Altı hizala
+cancel=İptal
+center=Ortala
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Sayfa yönünü değiştir
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Çember
+classic=Klasik
+clipart=Küçük resim
+close=Kapat
+collapse=Daralt
+collapse-expand=Daralt/Genişlet
+connect=Bağlan
+connecting=Bağlanıyor
+connectWithDrive=Connect with Google Drive
+connection=Bağlantı
+containsValidationErrors=Doğrulama hataları içeriyor
+copy=Kopyala
+copyConnect=Copy on connect
+copyOfDrawing=Resmin Kopyası
+curved=Curved
+custom=Özel
+cut=Kes
+dashed=Kesik çizgili
+delete=Sil
+diamond=Elmas ok
+diamondThin=Elmas ok (ince)
+didYouKnow=Biliyor muydunuz...
+direction=Yön
+done=Tamamlandı
+doubleClickOrientation=Yönü değiştirmek için çift tıklayın
+drawing=Resim{1}
+drawingEmpty=Boş resim
+drawingTooLarge=Resim çok büyük
+duplicate=Çoğalt
+east=Doğu
+edit=Düzenle
+editLink=Bağlantıyı düzenle
+embed=Dahil et
+embedNotice=Bunu sayfa sonuna ekleyin
+enterGroup=Grup gir
+enterValue=Değer gir
+entityRelation=Varlık bağlantısı
+error=Hata
+errorLoadingFile=Dosya yükleme hatası
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Dosya kayıt hatası
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Gruptan çık
+expand=Genişlet
+export=Dışa aktar
+failedToSaveTryReconnect=Kaydetme başarısız, tekrar bağlanmayı deniyor
+featureRequest=Feature Request
+feedback=Feedback
+file=Dosya
+filename=Dosya adı
+fileNotFound=Dosya bulunamadı
+fileNotLoaded=Dosya yüklenemedi
+fileNotSaved=Dosya kaydedilemedi
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Dolgu rengi
+fit=Sığdır
+fitPage=Sayfaya sığdır
+fitPageWidth=Sayfa genişliğine sığdır
+fitWindow=Pencereye sığdır
+flipH=Yatay çevir
+flipV=Dikey çevir
+fontColor=Yazı tipi rengi
+fontFamily=Yazı tipi
+fontSize=Yazı boyutu
+format=Format
+forum=Tartışma/Yardım Forumları
+fromTemplate=Şablondan
+fromText=Metinden
+general=Genel
+global=Global
+gradient=Gradyan
+gradientColor=Renk
+grid=Kılavuz
+group=Grupla
+guides=Rehberler
+hateApp=I hate draw.io
+height=Yükseklik
+help=Yardım
+helpTranslate=Bu uygulamayı tercümede bize yardım edin
+hide=Gizle
+home=Anasayfa
+horizontal=Yatay
+horizontalFlow=Yatay akış
+horizontalTree=Yatay şema
+image=Görsel
+images=Görseller
+inline=Satır içi
+import=İçe aktar
+invalidOrMissingFile=Hatalı veya eksik dosya
+italic=İtalik
+landscape=Manzara
+layout=Düzen
+left=Sol
+leftAlign=Sola hizala
+line=Çizgi
+lineend=Çizgi sonu
+linestart=Çizgi başı
+linewidth=Çizgi genişliği
+loading=Yüklüyor
+loveApp=I love draw.io
+manual=Manual
+middle=Orta
+moreResults=Daha fazla sonuç
+moreShapes=Daha fazla şekil
+move=Taşı
+navigation=Navigasyon
+new=Yeni
+noColor=Renk yok
+noFiles=Dosya yok
+noMoreResults=Görüntülenecek başka sonuç yok
+none=Hiçbiri
+noResultsFor={1}' için sonuç yok
+north=Kuzey
+notConnected=Bağlı değil
+ok=Tamam
+opacity=Bulanıklık
+open=Aç
+openArrow=Açık ok
+openFile=Dosyayı aç
+openLink=Bağlantıyı aç
+openInNewWindow=Yeni pencerede aç
+openSupported=Bu yazılıma ait desteklenen dosya formatı .XLS'tir
+options=Seçenekler
+organic=Organik
+orthogonal=Dikgen
+oval=Oval
+pages=Sayfalar
+pageView=Sayfa görünümü
+pageSetup=Sayfa ayarı
+pageScale=Sayfa ölçeği
+pan=Kaydır
+paperSize=Kağıt boyutu
+paste=Yapıştır
+perimeter=Çevresi
+plain=Düz
+position=Konum
+posterPrint=Poster baskı
+preview=Ön izleme
+print=Yazdır
+readOnly=Read-only
+reconnecting=Yeniden bağlanıyor
+redo=Yinele
+removeFromGroup=Gruptan çıkart
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} zaten bulunuyor. Değiştirmek istiyor musunuz?
+replaceExistingDrawing=Mevcut resmi değiştirin
+reset=Sıfırla
+resize=Yeniden boyutlandır
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Sağ
+rightAlign=Sağa hizala
+rotate=Döndür
+rotation=Döndürmek
+rounded=Yuvarlanmış
+save=Kaydet
+saveAs=Farklı kaydet
+saved=Kaydedildi
+saving=Kaydediliyor
+scrollbars=Kaydırma çubuğu
+search=Ara
+selectAll=Tümünü seç
+selectEdges=Kenarları seç
+selectFont=Bir yazı tipi seç
+selectVertices=Köşeleri seç
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Varsayılan köşe olarak belirle
+shadow=Gölge
+shape=Biçimlendir
+share=Paylaş
+shareLink=Paylaşılan düzenlemeye bağlantı
+sharingServerNotice=Dikkat: Deneysel özellik. Kullanmanın sorumluluğu size aittir!
+sharingServerReady=Paylaşım sunucusu hazır.
+sharingServerUnavailable=Paylaşım sunucusu mevcut değil.
+signOut=Oturumu kapat
+size=Boyut
+sourceSpacing=Kaynak boşluğu
+south=Güney
+spacing=Boşluk
+straight=Doğru
+strokeColor=Çizgi rengi
+style=Biçim
+support=Support
+targetSpacing=Hedef boşluğu
+text=Metin
+textAlignment=Metin hizalama
+textOpacity=Metin bulanıklığı
+tilt=Tilt
+toBack=Arkaya
+toFront=Öne
+tooltips=Araç bilgisi
+top=Üst
+topAlign=Üst hizala
+transparent=Saydam
+underline=Altını çiz
+undo=Geri al
+ungroup=Grubu dağıt
+updatingDocument=Dokümanı güncelliyor. Lütfen bekleyin...
+updatingSelection=Seçimi güncelliyor. Lütfen bekleyin...
+url=URL
+userLoggedOut=Oturumunuz sona erdi. Kaydedilmemiş herhangi bir dosya varsa kaydetmek için Google hesabınıza giriş yapmanız gerekiyor
+vertical=Dikey
+verticalFlow=Dikey akış
+verticalTree=Dikey şema
+view=Görüntüle
+west=Batı
+width=Genişlik
+wordWrap=Word wrap
+zoom=Yakınlaştır
+zoomIn=Büyült
+zoomOut=Küçült
diff --git a/public/assets/plugins/mxgraph/resources/dia_uk.txt b/public/assets/plugins/mxgraph/resources/dia_uk.txt
new file mode 100644
index 0000000..5e827ff
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_uk.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=О draw.io
+access_denied=Доступ заборонено
+actualSize=Фактичний розмір
+addToExistingDrawing=Додати до існуючого документу
+addWaypoint=Add waypoint
+align=Вирівняти
+alignment=Вирівнювання
+allChangesLost=Усі зміни будуть втрачені
+alreadyConnected=Вузли вже підключені
+apply=Застосувати
+arrange=Впорядкувати
+appNotInstalledAlert=Програма не встановлена. Будь ласка, встановіть програму draw.io у Chrome Web Storeта спробуйте ще раз.
+appNotInstalledStatus=Програма не встановлена.
+arrow=Стрілка
+arrows=Стрілки
+automatic=Automatic
+autosize=Авторозмір
+backgroundColor=Колір фону
+basic=Основний
+blankDrawing=Новий малюнок
+block=Блокувати
+bold=Напівжирний
+borderColor=Колір границі
+borderWidth=Ширина границі
+bottom=По нижньому краю
+bottomAlign=Вирівняти по нижньому краю
+cancel=Скасувати
+center=Відцентрувати
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=Змінити напрямок
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=Круг
+classic=Класичний
+clipart=Малюнок
+close=Закрити
+collapse=Згорнути
+collapse-expand=Згорнути/Розгорнути
+connect=З'єднати
+connecting=З'єднує
+connectWithDrive=Connect with Google Drive
+connection=З'єднання
+containsValidationErrors=Містить помилки підтвердження
+copy=Копіювати
+copyConnect=Copy on connect
+copyOfDrawing=Копія документа
+curved=Curved
+custom=Налаштувати
+cut=Вирізати
+dashed=Пуктир
+delete=Видалити
+diamond=Ромб
+diamondThin=Ромб (тонкий)
+didYouKnow=Ви знали...
+direction=Напрям
+done=Готово
+doubleClickOrientation=Двічу клацніть мишкою, щоб змінити напрям
+drawing=Малюнок{1}
+drawingEmpty=Малюнок порожній
+drawingTooLarge=Малюнок надто великий
+duplicate=Дублювати
+east=Схід
+edit=Редагувати
+editLink=Редагувати посилання
+embed=Вставити
+embedNotice=Додати 1 раз у кінці сторінки
+enterGroup=Увійти до групи
+enterValue=Введіть значення
+entityRelation=Існування залежності
+error=Помилка
+errorLoadingFile=Помилка при завантаженні файла
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=Помилка при зберіганні файла
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=Вийти із групи
+expand=Розгорнути
+export=Експортувати
+failedToSaveTryReconnect=Не вдалося зберегти, спроба повторного підключення
+featureRequest=Feature Request
+feedback=Feedback
+file=Файл
+filename=Ім'я файлу
+fileNotFound=Файл не знайдено
+fileNotLoaded=Файл не завантажено
+fileNotSaved=Файл не збережено
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=Колір заливки
+fit=По розміру
+fitPage=Одна сторінка
+fitPageWidth=Ширина сторінки
+fitWindow=По розміру вікна
+flipH=Відобразити зліва направо
+flipV=Відобразити зверху донизу
+fontColor=Колір тексту
+fontFamily=Сімейство шрифтів
+fontSize=Розмір шрифту
+format=Формат
+forum=Обговорення/Довідковий форум
+fromTemplate=З шаблону
+fromText=З тексту
+general=Загальний
+global=Глобальний
+gradient=Похил
+gradientColor=Колір
+grid=Сітка
+group=Група
+guides=Посібники
+hateApp=I hate draw.io
+height=Висоти
+help=Допомогти
+helpTranslate=Допоможіть нам перекласти цю програму
+hide=Сховати
+home=Домашня сторінка
+horizontal=Горизонтальний
+horizontalFlow=Горизонтальний потік
+horizontalTree=Горизонтальне дерево
+image=Малюнок
+images=Малюнки
+inline=Вбудований
+import=Імпорт
+invalidOrMissingFile=Файл невірний або відсутній
+italic=Курсив
+landscape=Альбомний
+layout=Макет
+left=Зліва
+leftAlign=Вирівнювання по лівому краю
+line=Лінія
+lineend=Кінець стрілки
+linestart=Початок стрілки
+linewidth=Товщина лінії
+loading=Завантаження
+loveApp=I love draw.io
+manual=Manual
+middle=Посередині
+moreResults=Додаткові результати
+moreShapes=Додаткові форми
+move=Переміщати
+navigation=Навігація
+new=Новий
+noColor=Немає кольору
+noFiles=Немає файлів
+noMoreResults=Інші результати відсутні
+none=Нічого
+noResultsFor=Немає результатів для'{1}'
+north=Північ
+notConnected=Немає зв'язку
+ok=Добре
+opacity=Непрозорість
+open=Відкрити
+openArrow=Відкрита стрілка
+openFile=Відкрити файл
+openLink=Відкрити посилання
+openInNewWindow=Відкрити нове вікно
+openSupported=Підтримується формат .XML-файлів, збережених за допомогою цього програмного забезпечення
+options=Параметри
+organic=Органічний
+orthogonal=Прямокутний
+oval=Овальний
+pages=Сторінки
+pageView=Перегляд сторінки
+pageSetup=Налаштування сторінки
+pageScale=Масштаб сторінки
+pan=Прокрутка
+paperSize=Розмір паперу
+paste=Вставити
+perimeter=По периметру
+plain=Простий
+position=Положення
+posterPrint=Багосторінкове роздрукування постеру
+preview=Попередній перегляд
+print=Роздрукувати
+readOnly=Read-only
+reconnecting=Повторне підключення
+redo=Повторити
+removeFromGroup=Видалити із групи
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1} вже існує. Ви хочете замінити його?
+replaceExistingDrawing=Замінити існуючий документ
+reset=Відрегулювати
+resize=Змінити розмір
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=Право
+rightAlign=Вирівнювання по правому краю
+rotate=Обертати
+rotation=Обертання
+rounded=Закруглений
+save=Зберегти
+saveAs=Зберегти як
+saved=Збережено
+saving=Збереження
+scrollbars=Прокручування
+search=Пошук
+selectAll=Вибрати все
+selectEdges=Вибрати сторони
+selectFont=Вибрати шрифт
+selectVertices=Вибрати вершини
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=Встановити край за умовчуванням
+shadow=Тінь
+shape=Формат
+share=Розділити
+shareLink=Посилання для спільного редагування
+sharingServerNotice=Примітка: Експериментальна функція. Використовуйте на свій страх і ризик!
+sharingServerReady=Сервер для обміну готовий.
+sharingServerUnavailable=Сервер для обміну недоступний.
+signOut=Вийти
+size=Розмір
+sourceSpacing=Від початкового вузла
+south=Південь
+spacing=Інтервали
+straight=Прямий
+strokeColor=Колір лінії
+style=Стиль
+support=Support
+targetSpacing=Від кінцевого вузла
+text=Текст
+textAlignment=Вирівнювання тексту
+textOpacity=Непрозорість тексту
+tilt=Tilt
+toBack=На задній план
+toFront=На передній план
+tooltips=Підказки
+top=Верх
+topAlign=По верхньому краю
+transparent=Прозорий
+underline=Підкреслений
+undo=Відмінити
+ungroup=Розгрупувати
+updatingDocument=Документ оновлюється. Будь ласка, зачекайте...
+updatingSelection=Вибір оновлюється. Будь ласка, зачекайте...
+url=URL-адреса
+userLoggedOut=Сеанс вашої роботи закінчився. Задля збререження будь-якої незбереженої інформації, Вам потрібно увійти до свого облікового запису Google як
+vertical=Вертикальний
+verticalFlow=Вертикальний потік
+verticalTree=Вертикальне дерево
+view=Оглянути
+west=Захід
+width=Ширина
+wordWrap=Word wrap
+zoom=Масштаб
+zoomIn=Збільшити
+zoomOut=Зменшити
diff --git a/public/assets/plugins/mxgraph/resources/dia_zh.txt b/public/assets/plugins/mxgraph/resources/dia_zh.txt
new file mode 100644
index 0000000..1f6add8
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/dia_zh.txt
@@ -0,0 +1,255 @@
+# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*
+# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE
+aboutDrawio=关于 draw.io
+access_denied=访问拒绝
+actualSize=实际尺寸
+addToExistingDrawing=添加到当前的图形
+addWaypoint=Add waypoint
+align=对齐
+alignment=对齐
+allChangesLost=所有修改都不会被保存！
+alreadyConnected=节点已连接
+apply=应用
+arrange=排列
+appNotInstalledAlert=App没有安装。请先从Chrome网上商店安装Diagram.ly，然后再尝试。
+appNotInstalledStatus=App没有安装。
+arrow=箭头
+arrows=箭头
+automatic=Automatic
+autosize=自动调整大小
+backgroundColor=背景颜色
+basic=基本
+blankDrawing=空图
+block=块
+bold=粗体
+borderColor=边框颜色
+borderWidth=边框宽度
+bottom=底
+bottomAlign=底部对齐
+cancel=取消
+center=中心
+cannotLoad=Load attempts failed. Please try again later.
+cannotLogin=Log in attempts failed. Please try again later.
+changeOrientation=改变方向
+chatJoined={1} has joined
+chatLeft={1} has left
+chatWindowTitle=Chat
+circle=圆形
+classic=经典
+clipart=剪贴画
+close=关闭
+collapse=折叠
+collapse-expand=折叠/展开
+connect=连接
+connecting=连接
+connectWithDrive=Connect with Google Drive
+connection=连接
+containsValidationErrors=包含验证错误
+copy=复制
+copyConnect=Copy on connect
+copyOfDrawing=复制图
+curved=Curved
+custom=自定义
+cut=剪切
+dashed=虚线
+delete=删除
+diamond=菱形
+diamondThin=菱形（细）
+didYouKnow=你知道吗......
+direction=方向
+done=完成
+doubleClickOrientation=双击改变方向
+drawing=图{1}
+drawingEmpty=图画为空
+drawingTooLarge=图过大
+duplicate=复制
+east=东
+edit=编辑
+editLink=编辑链接
+embed=嵌入
+embedNotice=在页尾添加一次
+enterGroup=进入组
+enterValue=输入值
+entityRelation=实体关系
+error=错误
+errorLoadingFile=加载文件错误
+errorRenamingFile=Error renaming file.
+errorRenamingFileNotFound=Error renaming file. File was not found.
+errorRenamingFileForbidden=Error renaming file. Insufficient access rights.
+errorSavingFile=保存文件错误
+errorSavingFileForbidden=Error saving file. Insufficient access rights.
+errorSavingFileNotFound=Error saving file. File was not found.
+exitGroup=离开组
+expand=展开
+export=导出
+failedToSaveTryReconnect=保持失败，尝试重新连接
+featureRequest=Feature Request
+feedback=Feedback
+file=文件
+filename=文件名
+fileNotFound=没有此文件
+fileNotLoaded=文件无法加载
+fileNotSaved=文件无法保存
+fileOpenLocation=How would you like to open these file(s)?
+fillColor=填充颜色
+fit=配合
+fitPage=一页
+fitPageWidth=页宽
+fitWindow=填满窗口
+flipH=水平翻转
+flipV=垂直翻转
+fontColor=字体颜色
+fontFamily=字体家族
+fontSize=字体大小
+format=格式
+forum=讨论组/帮助论坛
+fromTemplate=从模板
+fromText=从文本
+general=通用
+global=全局
+gradient=渐变
+gradientColor=颜色
+grid=格子
+group=组合
+guides=参考线
+hateApp=I hate draw.io
+height=高
+help=帮助
+helpTranslate=Help us translate this application
+hide=隐藏
+home=首页
+horizontal=水平
+horizontalFlow=水平流
+horizontalTree=水平树
+image=图像
+images=图像
+inline=内联
+import=导入
+invalidOrMissingFile=无效或丢失的文件
+italic=斜体
+landscape=整体效果
+layout=布局
+left=左
+leftAlign=左对齐
+line=线
+lineend=线末端
+linestart=线始端
+linewidth=线宽
+loading=加载中
+loveApp=I love draw.io
+manual=Manual
+middle=中央
+moreResults=更多结果
+moreShapes=更多形状
+move=移动
+navigation=导航
+new=新建
+noColor=无颜色
+noFiles=无文件
+noMoreResults=没有其他结果
+none=无
+noResultsFor={1}’没有结果
+north=北
+notConnected=没有连接
+ok=确定
+opacity=透明度
+open=打开
+openArrow=打开箭头
+openFile=打开文件
+openLink=打开链接
+openInNewWindow=在新窗口打开
+openSupported=此软件支持的保存格式为.xml
+options=选项
+organic=有机
+orthogonal=正交
+oval=椭圆形
+pages=页面
+pageView=页面视图
+pageSetup=页面设置
+pageScale=页面比例
+pan=盘子
+paperSize=页面尺寸
+paste=粘贴
+perimeter=周长
+plain=平
+position=位置
+posterPrint=海报样式
+preview=预览
+print=打印
+readOnly=Read-only
+reconnecting=重新连接
+redo=重做
+removeFromGroup=从组中删除
+removeWaypoint=Remove waypoint
+rename=Rename
+renamed=Renamed
+renaming=Renaming
+replace={1}已经存在了。要替换它吗？
+replaceExistingDrawing=替换当前图形
+reset=重置
+resize=重新大小
+retryingIn=Retrying in {1} second(s)
+retryingLoad=Load failed. Retrying...
+retryingLogin=Login time out. Retrying...
+right=右
+rightAlign=右对齐
+rotate=旋转
+rotation=旋转
+rounded=圆角
+save=保存
+saveAs=另存为
+saved=已保存
+saving=保存中
+scrollbars=滚动条
+search=搜索
+selectAll=选择全部
+selectEdges=选择边
+selectFont=选择一种字体
+selectVertices=选择顶点
+sendMessage=Send
+sessionTimeoutOnSave=Your session has timed out and you have been disconnected from the Google Drive. Press OK to login and save. 
+setAsDefaultEdge=设置成默认边
+shadow=阴影
+shape=形状
+share=共享
+shareLink=共享编辑的链接
+sharingServerNotice=注意：试验功能。风险自负！
+sharingServerReady=共享服务器已准备好。
+sharingServerUnavailable=共享服务器无法使用。
+signOut=登出
+size=大小
+sourceSpacing=源间距
+south=南
+spacing=间距
+straight=直线
+strokeColor=线颜色
+style=风格
+support=Support
+targetSpacing=目标间距
+text=文本
+textAlignment=文本对齐
+textOpacity=字体透明度
+tilt=Tilt
+toBack=转到后面
+toFront=转到前面
+tooltips=提示
+top=顶
+topAlign=顶部对齐
+transparent=透明
+underline=下划线
+undo=取消操作
+ungroup=取消组合
+updatingDocument=更新文件。请稍候...
+updatingSelection=更新选择。请稍候...
+url=链接
+userLoggedOut=你的会话已结束。你需要重新登入Google账户才能保存未完成的工作。
+vertical=垂直
+verticalFlow=垂直流
+verticalTree=垂直树
+view=视图
+west=西
+width=宽度
+wordWrap=Word wrap
+zoom=缩放
+zoomIn=放大
+zoomOut=缩小
diff --git a/public/assets/plugins/mxgraph/resources/help_it.html b/public/assets/plugins/mxgraph/resources/help_it.html
new file mode 100644
index 0000000..c87692f
--- /dev/null
+++ b/public/assets/plugins/mxgraph/resources/help_it.html
@@ -0,0 +1,10 @@
+<!DOCTYPE html>
+<html>
+<body>
+
+<h1>My First Heading</h1>
+
+<p>My first paragraph.</p>
+
+</body>
+</html>
diff --git a/public/assets/plugins/mxgraph/stencils/call_management/answer_128x128.png b/public/assets/plugins/mxgraph/stencils/call_management/answer_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..dba08945cd8ce69a0ec2afba6b44a54d4e7bcba5
GIT binary patch
literal 5966
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
XdMlm-ceu^JhXzoRQ<trlHvjm4UGOL7

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/call_management/callback_128x128.png b/public/assets/plugins/mxgraph/stencils/call_management/callback_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..082379a917fb6d72f63d775398430d46bdd41ff2
GIT binary patch
literal 2377
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
Q`ileX_B)a*_W8yA2ekM%RR910

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/call_management/dial_128x128.png b/public/assets/plugins/mxgraph/stencils/call_management/dial_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..6ccafca8736eff57247e73591214db7f10304da0
GIT binary patch
literal 5782
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
P9s@u@Mn$?-(k$#hQ+NQ<

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/call_management/ext_dial_128x128.png b/public/assets/plugins/mxgraph/stencils/call_management/ext_dial_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..228d0493beea47c2b96543685c5bde94f4344911
GIT binary patch
literal 5385
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
S;`@(90XiB6>a}WiFaHOsOf@wC

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/call_management/hangup_128x128.png b/public/assets/plugins/mxgraph/stencils/call_management/hangup_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..a08f547b69ebbffb86351414a4aef414b23d2eab
GIT binary patch
literal 7477
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
NKtV=Tx<<-0<bS#oUfuuz

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/call_management/queue_128x128.png b/public/assets/plugins/mxgraph/stencils/call_management/queue_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..71466667a4d8346a92fd739e89d801f74aae338a
GIT binary patch
literal 6290
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
bclE$>4HD~{?Y90G3IR=3U6ndz+qeG#5CX@L

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/call_management/voicemail_128x128.png b/public/assets/plugins/mxgraph/stencils/call_management/voicemail_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..10a67a7e31ef2568dbbeef6f522d5cfe2564815d
GIT binary patch
literal 7469
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/callflow/gotoc_128x128.png b/public/assets/plugins/mxgraph/stencils/callflow/gotoc_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..c51512d6744ce9fb145bf0f6049177ababf76ad6
GIT binary patch
literal 5581
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/callflow/gotoif_128x128.png b/public/assets/plugins/mxgraph/stencils/callflow/gotoif_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..5fad88fb439b8c267dd3d608cc39786de0a09db6
GIT binary patch
literal 7130
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/callflow/gotoifmultitime_128x128.png b/public/assets/plugins/mxgraph/stencils/callflow/gotoifmultitime_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..49c0794a2bc30b8c3903c95e27a4adebecc8b40b
GIT binary patch
literal 9851
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/callflow/gotoiftime_128x128.png b/public/assets/plugins/mxgraph/stencils/callflow/gotoiftime_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..b91b5b6d43abb6468dea70b7ef7dd355517546f7
GIT binary patch
literal 7388
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/callflow/vswitch_128x128.png b/public/assets/plugins/mxgraph/stencils/callflow/vswitch_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..b2379c69ed871d748231c46e8e2f8c5086679066
GIT binary patch
literal 5410
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/entry/end_128x128.png b/public/assets/plugins/mxgraph/stencils/entry/end_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..2847e9dcc7228695ce781f51acaf036936d76d44
GIT binary patch
literal 6551
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/entry/finally_128x128.png b/public/assets/plugins/mxgraph/stencils/entry/finally_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..85beff1d422275dbd5e0bdc016a1bac5b7c55852
GIT binary patch
literal 7568
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
P!~ivAEu|U-o5=qIV(DdM

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/entry/start_128x128.png b/public/assets/plugins/mxgraph/stencils/entry/start_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..b319c70e2c9fb9910d2172f96ba62ed28372a126
GIT binary patch
literal 5631
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
LqoLHKU>Ws)6raB)

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/general.xml b/public/assets/plugins/mxgraph/stencils/general.xml
new file mode 100644
index 0000000..137e5f5
--- /dev/null
+++ b/public/assets/plugins/mxgraph/stencils/general.xml
@@ -0,0 +1,58 @@
+<shapes>
+<shape name="and" w="50" strokewidth="inherit">
+	<background>
+		<path>
+			<move x="0" y="0"/>
+			<line x="50" y="50"/>
+			<line x="0" y="100"/>
+			<close/>
+		</path>
+	</background>
+	<foreground>
+		<fillstroke/>
+	</foreground>
+</shape>
+<shape name="or" strokewidth="inherit">
+	<connections>
+		<constraint x="0" y="0.25" perimeter="0"/>
+		<constraint x="0" y="0.5" perimeter="0"/>
+		<constraint x="0" y="0.75" perimeter="0"/>
+		<constraint x="1" y="0.5" perimeter="0"/>
+		<constraint x="0.7" y="0.1" perimeter="0"/>
+		<constraint x="0.7" y="0.9" perimeter="0"/>
+	</connections>
+	<background>
+		<path>
+			<move x="0" y="0"/>
+			<quad x1="100" y1="0" x2="100" y2="50"/>
+			<quad x1="100" y1="100" x2="0" y2="100"/>
+			<close/>
+		</path>
+	</background>
+	<foreground>
+		<fillstroke/>
+	</foreground>
+</shape>
+<shape name="xor" strokewidth="inherit">
+	<connections>
+		<constraint x="0.175" y="0.25" perimeter="0"/>
+		<constraint x="0.25" y="0.5" perimeter="0"/>
+		<constraint x="0.175" y="0.75" perimeter="0"/>
+		<constraint x="1" y="0.5" perimeter="0"/>
+		<constraint x="0.7" y="0.1" perimeter="0"/>
+		<constraint x="0.7" y="0.9" perimeter="0"/>
+	</connections>
+	<background>
+		<path>
+			<move x="0" y="0"/>
+			<quad x1="100" y1="0" x2="100" y2="50"/>
+			<quad x1="100" y1="100" x2="0" y2="100"/>
+			<quad x1="50" y1="50" x2="0" y2="0"/>
+			<close/>
+		</path>
+	</background>
+	<foreground>
+		<fillstroke/>
+	</foreground>
+</shape>
+</shapes>
diff --git a/public/assets/plugins/mxgraph/stencils/general/agi_128x128.png b/public/assets/plugins/mxgraph/stencils/general/agi_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..c9af63fd141f22b099f8d75620d7b3d2c082ca39
GIT binary patch
literal 4113
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/general/custom_app_128x128.png b/public/assets/plugins/mxgraph/stencils/general/custom_app_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..5fed7d3009c0b43c8174a8c7849b7c4fd14906b0
GIT binary patch
literal 5273
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/general/noop_128x128.png b/public/assets/plugins/mxgraph/stencils/general/noop_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..a7433894800bbb32cf7cccb025f05b3faa14f775
GIT binary patch
literal 5933
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/general/subproject_128x128.png b/public/assets/plugins/mxgraph/stencils/general/subproject_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..2121d75e39a046f1f6dede57c461f41433b24b36
GIT binary patch
literal 5143
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/general/system_128x128.png b/public/assets/plugins/mxgraph/stencils/general/system_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..cadc61170e2c1d141346a10a9d25cecb9cf7bd10
GIT binary patch
literal 5866
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
I!8+pq0BmL<!T<mO

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/integration_server/asr_128x128.png b/public/assets/plugins/mxgraph/stencils/integration_server/asr_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..fe440923fdfb8e8b618bd94e314ddc0228d38f75
GIT binary patch
literal 9355
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
KvNh7Cq5lIG%M?)n

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/integration_server/database_128x128.png b/public/assets/plugins/mxgraph/stencils/integration_server/database_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..e7fda199ad4d8cefb3fd44d02c579f168160aa8d
GIT binary patch
literal 5900
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/integration_server/ispeechasr_128x128.png b/public/assets/plugins/mxgraph/stencils/integration_server/ispeechasr_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..2f2406c9929612792927e50561f82c99ef44d54a
GIT binary patch
literal 4918
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/playback/background_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/background_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..ab99232d6f3dced7ae0b21594ffba1ee08912bbc
GIT binary patch
literal 6874
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
Kbfu)p*Z%`GED}-x

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/playback/getdigits_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/getdigits_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..ac1176a8807deff4ad9cf871b636e196562602d2
GIT binary patch
literal 4864
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
X<eje`S-|c-3P25_sa*T~P3V6B{g@xm

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/playback/ispeechtts_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/ispeechtts_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..d785d80d010b74e2a96d1e94af16ef1eb9f4b851
GIT binary patch
literal 4830
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/playback/menu_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/menu_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f6fbb0c2a553b3267614016cfb85a0b7019180b
GIT binary patch
literal 5010
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/playback/playback_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/playback_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..3eb62f77989ce47e80c6c6d1fcb6c313ae927679
GIT binary patch
literal 4903
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
S5&EyG06H3a>eXuY&;AcP_cbp7

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/playback/saydigits_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/saydigits_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..3b7d945398e18eaf30830720cad4cd92f76e3414
GIT binary patch
literal 6105
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/playback/saynumber_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/saynumber_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..aadeeacf308f3361e9708fc5e53fc918df86446a
GIT binary patch
literal 7097
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/playback/sayphonetic_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/sayphonetic_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..ed8ef20da72c4ffd118dcd237731ae940eeae9d3
GIT binary patch
literal 6642
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
ZQRl(*6V>>|e@{1{@={%)O3p0g{{V^9j=KN=

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/playback/tts_128x128.png b/public/assets/plugins/mxgraph/stencils/playback/tts_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..b28a2f29aedd5817fc66df1415341a5f22479ebb
GIT binary patch
literal 5600
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
U!z^OxKg0%Tywp{#Rk4oze`0Ec>i_@%

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/recording/record_128x128.png b/public/assets/plugins/mxgraph/stencils/recording/record_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..80011e23a646beb2aff3754f1da5884a5b846ed2
GIT binary patch
literal 5155
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
AS^xk5

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/stats/goal_128x128.png b/public/assets/plugins/mxgraph/stencils/stats/goal_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..bbce88942a2a5e670ac2b0698582671f7a492069
GIT binary patch
literal 5807
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
IrOm(m51K*vb^rhX

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/stats/queuelog_128x128.png b/public/assets/plugins/mxgraph/stencils/stats/queuelog_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..33f805ad2bc8e0a35946a0555ee73d89fb42cd94
GIT binary patch
literal 4347
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
PBOYiz&{0FHTEF}cP2enH

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/variable/math_128x128.png b/public/assets/plugins/mxgraph/stencils/variable/math_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..1cb6f903d99ecf956356c0593125b22f974cbef1
GIT binary patch
literal 6286
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
HO+)@4{3hh)

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/stencils/variable/set_128x128.png b/public/assets/plugins/mxgraph/stencils/variable/set_128x128.png
new file mode 100644
index 0000000000000000000000000000000000000000..104d75ae3a1f82764f06401a514ccc181616ad8a
GIT binary patch
literal 5854
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
E0E0X+R{#J2

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/styles/custom.css b/public/assets/plugins/mxgraph/styles/custom.css
new file mode 100644
index 0000000..c6cb8d9
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/custom.css
@@ -0,0 +1,45 @@
+.geSidebarContainer .geTitle { color:#606060; }
+.geSidebar .geItem:hover { opacity:1; }
+.geSidebar .geItem { opacity:0.7; }
+.geSidebarContainer .geTitle input {
+	font-size:8pt;
+	color:#606060;
+}
+.geBlock {
+	z-index: -3;
+	margin:100px;
+	margin-top:40px;
+	margin-bottom:30px;
+	padding:50px;
+	padding-bottom:40px;
+	padding-top:20px;
+	border-radius:10px;
+	-webkit-box-shadow:0px 0px 4px 4px #e5e5e5;
+	-moz-box-shadow:0px 0px 4px 4px #e5e5e5;
+	box-shadow:0px 0px 4px 4px #e5e5e5;
+	_filter:progid:DXImageTransform.Microsoft.DropShadow(OffX=4, OffY=4, Color='#e5e5e5', Positive='true');
+	border:1px solid gray;
+	background-color:white;
+}
+.geBlock p {
+	padding-top:10px;
+}
+.geEditor {
+	background-color:whiteSmoke;
+}
+.geEditor ::-webkit-scrollbar {
+    width:12px;
+    height:12px;
+}
+.geEditor ::-webkit-scrollbar-track {
+	background:whiteSmoke;
+	-webkit-box-shadow:inset 0 0 4px rgba(0,0,0,0.1);
+}
+.geEditor ::-webkit-scrollbar-thumb {
+	background:#c5c5c5;
+    border-radius:10px;
+	border:whiteSmoke solid 3px;
+}
+.geEditor ::-webkit-scrollbar-thumb:hover {
+	background:#b5b5b5;
+}
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/styles/default-old.xml b/public/assets/plugins/mxgraph/styles/default-old.xml
new file mode 100644
index 0000000..8e3bf0f
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/default-old.xml
@@ -0,0 +1,109 @@
+<mxStylesheet>
+	<add as="defaultVertex">
+		<add as="shape" value="label"/>
+		<add as="perimeter" value="rectanglePerimeter"/>
+		<add as="fontSize" value="12"/>
+		<add as="fontFamily" value="Verdana"/>
+		<add as="align" value="center"/>
+		<add as="verticalAlign" value="middle"/>
+		<add as="fillColor" value="#adc5ff"/>
+		<add as="gradientColor" value="#7d85df"/>
+		<add as="strokeColor" value="#5d65df"/>
+		<add as="fontColor" value="#1d258f"/>
+	</add>
+	<add as="defaultEdge">
+		<add as="shape" value="connector"/>
+		<add as="labelBackgroundColor" value="#FFFFFF"/>
+		<add as="endArrow" value="classic"/>
+		<add as="fontSize" value="11"/>
+		<add as="fontFamily" value="Verdana"/>
+		<add as="align" value="center"/>
+		<add as="verticalAlign" value="middle"/>
+		<add as="labelBackgroundColor" value="#FFFFFF"/>
+		<add as="rounded" value="1"/>
+		<add as="strokeColor" value="#5d65df"/>
+		<add as="fontColor" value="#1d258f"/>
+	</add>
+	<add as="text">
+		<add as="fillColor" value="none"/>
+		<add as="gradientColor" value="none"/>
+		<add as="strokeColor" value="none"/>
+		<add as="align" value="left"/>
+		<add as="verticalAlign" value="top"/>
+	</add>
+	<add as="label">
+		<add as="fontStyle" value="1"/>
+		<add as="align" value="left"/>
+		<add as="verticalAlign" value="middle"/>
+		<add as="spacing" value="2"/>
+		<add as="spacingLeft" value="50"/>
+		<add as="imageWidth" value="42"/>
+		<add as="imageHeight" value="42"/>
+		<add as="rounded" value="1"/>
+		<add as="shadow" value="1"/>
+		<add as="glass" value="1"/>
+	</add>
+	<add as="icon" extend="label">
+		<add as="align" value="center"/>
+		<add as="imageAlign" value="center"/>
+		<add as="verticalLabelPosition" value="bottom"/>
+		<add as="verticalAlign" value="top"/>
+		<add as="spacingTop" value="4"/>
+		<add as="labelBackgroundColor" value="#FFFFFF"/>
+		<add as="spacing" value="0"/>
+		<add as="spacingLeft" value="0"/>
+		<add as="spacingTop" value="6"/>
+		<add as="fontStyle" value="0"/>
+		<add as="imageWidth" value="48"/>
+		<add as="imageHeight" value="48"/>
+	</add>
+	<add as="swimlane">
+		<add as="shape" value="swimlane"/>
+		<add as="fontSize" value="12"/>
+		<add as="fontStyle" value="1"/>
+		<add as="startSize" value="23"/>
+	</add>
+	<add as="group">
+		<add as="verticalAlign" value="top"/>
+		<add as="fillColor" value="none"/>
+		<add as="strokeColor" value="none"/>
+		<add as="gradientColor" value="none"/>
+	</add>
+	<add as="ellipse">
+		<add as="shape" value="ellipse"/>
+		<add as="perimeter" value="ellipsePerimeter"/>
+	</add>
+	<add as="rhombus">
+		<add as="shape" value="rhombus"/>
+		<add as="perimeter" value="rhombusPerimeter"/>
+	</add>
+	<add as="triangle">
+		<add as="shape" value="triangle"/>
+		<add as="perimeter" value="trianglePerimeter"/>
+	</add>
+	<add as="line">
+		<add as="shape" value="line"/>
+		<add as="strokeWidth" value="4"/>
+		<add as="labelBackgroundColor" value="#FFFFFF"/>
+		<add as="verticalAlign" value="top"/>
+		<add as="spacingTop" value="8"/>
+	</add>
+	<add as="image">
+		<add as="shape" value="image"/>
+		<add as="labelBackgroundColor" value="white"/>
+		<add as="verticalAlign" value="top"/>
+		<add as="verticalLabelPosition" value="bottom"/>
+	</add>
+	<add as="roundImage" extend="image">
+		<add as="perimeter" value="ellipsePerimeter"/>
+	</add>
+	<add as="rhombusImage" extend="image">
+		<add as="perimeter" value="rhombusPerimeter"/>
+	</add>
+	<add as="arrow">
+		<add as="shape" value="arrow"/>
+		<add as="edgeStyle" value="none"/>
+		<add as="fillColor" value="#adc5ff"/>
+		<add as="gradientColor" value="#7d85df"/>
+	</add>
+</mxStylesheet>
diff --git a/public/assets/plugins/mxgraph/styles/default.xml b/public/assets/plugins/mxgraph/styles/default.xml
new file mode 100644
index 0000000..b7cfff2
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/default.xml
@@ -0,0 +1,230 @@
+<mxStylesheet>
+	<!-- Giuseppe Careri -->
+	<add as="image">
+		<add as="shape" value="image"/>
+		<add as="labelBackgroundColor" value="white"/>
+		<add as="verticalAlign" value="top"/>
+		<add as="verticalLabelPosition" value="bottom"/>
+	</add>
+	<add as="defaultEdge">
+		<add as="shape" value="connector"/>
+		<add as="labelBackgroundColor" value="#ffffff"/>
+		<add as="endArrow" value="classic"/>
+		<add as="fontSize" value="11"/>
+		<add as="fontFamily" value="Helvetica"/>
+		<add as="align" value="center"/>
+		<add as="verticalAlign" value="middle"/>
+		<add as="labelBackgroundColor" value="#ffffff"/>
+		<add as="rounded" value="1"/>
+		<add as="strokeColor" value="#1B78C8"/>
+        <add as="strokeWidth" value="1"/>
+		<add as="fontColor" value="#774400"/>
+		<add as="edgeStyle" value="elbowEdgeStyle"/>
+    </add>	
+    <!--add as="defaultVertex">
+		<add as="shape" value="label"/>
+		<add as="perimeter" value="rectanglePerimeter"/>
+		<add as="fontSize" value="12"/>
+		<add as="fontFamily" value="Helvetica"/>
+		<add as="align" value="center"/>
+		<add as="verticalAlign" value="middle"/>
+		<add as="fillColor" value="#ffffff"/>
+		<add as="strokeColor" value="#000000"/>
+		<add as="fontColor" value="#000000"/>
+	</add>
+	<add as="defaultEdge">
+		<add as="shape" value="connector"/>
+		<add as="labelBackgroundColor" value="#ffffff"/>
+		<add as="endArrow" value="classic"/>
+		<add as="fontSize" value="11"/>
+		<add as="fontFamily" value="Helvetica"/>
+		<add as="align" value="center"/>
+		<add as="verticalAlign" value="middle"/>
+		<add as="labelBackgroundColor" value="#ffffff"/>
+		<add as="rounded" value="1"/>
+		<add as="strokeColor" value="#000000"/>
+		<add as="fontColor" value="#000000"/>
+	</add>
+	<add as="text">
+		<add as="fillColor" value="none"/>
+		<add as="gradientColor" value="none"/>
+		<add as="strokeColor" value="none"/>
+		<add as="align" value="left"/>
+		<add as="verticalAlign" value="top"/>
+	</add>
+	<add as="label">
+		<add as="fontStyle" value="1"/>
+		<add as="align" value="left"/>
+		<add as="verticalAlign" value="middle"/>
+		<add as="spacing" value="2"/>
+		<add as="spacingLeft" value="52"/>
+		<add as="imageWidth" value="42"/>
+		<add as="imageHeight" value="42"/>
+		<add as="rounded" value="1"/>
+	</add>
+	<add as="icon" extend="label">
+		<add as="align" value="center"/>
+		<add as="imageAlign" value="center"/>
+		<add as="verticalLabelPosition" value="bottom"/>
+		<add as="verticalAlign" value="top"/>
+		<add as="spacingTop" value="4"/>
+		<add as="labelBackgroundColor" value="#ffffff"/>
+		<add as="spacing" value="0"/>
+		<add as="spacingLeft" value="0"/>
+		<add as="spacingTop" value="6"/>
+		<add as="fontStyle" value="0"/>
+		<add as="imageWidth" value="48"/>
+		<add as="imageHeight" value="48"/>
+	</add>
+	<add as="swimlane">
+		<add as="shape" value="swimlane"/>
+		<add as="fontSize" value="12"/>
+		<add as="fontStyle" value="1"/>
+		<add as="startSize" value="23"/>
+	</add>
+	<add as="group">
+		<add as="verticalAlign" value="top"/>
+		<add as="fillColor" value="none"/>
+		<add as="strokeColor" value="none"/>
+		<add as="gradientColor" value="none"/>
+	</add>
+	<add as="ellipse">
+		<add as="shape" value="ellipse"/>
+		<add as="perimeter" value="ellipsePerimeter"/>
+	</add>
+	<add as="rhombus">
+		<add as="shape" value="rhombus"/>
+		<add as="perimeter" value="rhombusPerimeter"/>
+	</add>
+	<add as="triangle">
+		<add as="shape" value="triangle"/>
+		<add as="perimeter" value="trianglePerimeter"/>
+	</add>
+	<add as="line">
+		<add as="shape" value="line"/>
+		<add as="strokeWidth" value="4"/>
+		<add as="labelBackgroundColor" value="#ffffff"/>
+		<add as="verticalAlign" value="top"/>
+		<add as="spacingTop" value="8"/>
+	</add>
+	<add as="image">
+		<add as="shape" value="image"/>
+		<add as="labelBackgroundColor" value="white"/>
+		<add as="verticalAlign" value="top"/>
+		<add as="verticalLabelPosition" value="bottom"/>
+	</add>
+	<add as="roundImage" extend="image">
+		<add as="perimeter" value="ellipsePerimeter"/>
+	</add>
+	<add as="rhombusImage" extend="image">
+		<add as="perimeter" value="rhombusPerimeter"/>
+	</add>
+	<add as="arrow">
+		<add as="shape" value="arrow"/>
+		<add as="edgeStyle" value="none"/>
+		<add as="fillColor" value="#ffffff"/>
+	</add>
+	<!--add as="defaultVertex">
+		<add as="shape" value="label"/>
+		<add as="perimeter" value="rectanglePerimeter"/>
+		<add as="fontSize" value="12"/>
+		<add as="fontFamily" value="Helvetica"/>
+		<add as="align" value="center"/>
+		<add as="verticalAlign" value="middle"/>
+		<add as="fillColor" value="#ffffff"/>
+		<add as="strokeColor" value="#000000"/>
+		<add as="fontColor" value="#000000"/>
+	</add>
+	<add as="defaultEdge">
+		<add as="shape" value="connector"/>
+		<add as="labelBackgroundColor" value="#ffffff"/>
+		<add as="endArrow" value="classic"/>
+		<add as="fontSize" value="11"/>
+		<add as="fontFamily" value="Helvetica"/>
+		<add as="align" value="center"/>
+		<add as="verticalAlign" value="middle"/>
+		<add as="labelBackgroundColor" value="#ffffff"/>
+		<add as="rounded" value="1"/>
+		<add as="strokeColor" value="#000000"/>
+		<add as="fontColor" value="#000000"/>
+	</add>
+	<add as="text">
+		<add as="fillColor" value="none"/>
+		<add as="gradientColor" value="none"/>
+		<add as="strokeColor" value="none"/>
+		<add as="align" value="left"/>
+		<add as="verticalAlign" value="top"/>
+	</add>
+	<add as="label">
+		<add as="fontStyle" value="1"/>
+		<add as="align" value="left"/>
+		<add as="verticalAlign" value="middle"/>
+		<add as="spacing" value="2"/>
+		<add as="spacingLeft" value="52"/>
+		<add as="imageWidth" value="42"/>
+		<add as="imageHeight" value="42"/>
+		<add as="rounded" value="1"/>
+	</add>
+	<add as="icon" extend="label">
+		<add as="align" value="center"/>
+		<add as="imageAlign" value="center"/>
+		<add as="verticalLabelPosition" value="bottom"/>
+		<add as="verticalAlign" value="top"/>
+		<add as="spacingTop" value="4"/>
+		<add as="labelBackgroundColor" value="#ffffff"/>
+		<add as="spacing" value="0"/>
+		<add as="spacingLeft" value="0"/>
+		<add as="spacingTop" value="6"/>
+		<add as="fontStyle" value="0"/>
+		<add as="imageWidth" value="48"/>
+		<add as="imageHeight" value="48"/>
+	</add>
+	<add as="swimlane">
+		<add as="shape" value="swimlane"/>
+		<add as="fontSize" value="12"/>
+		<add as="fontStyle" value="1"/>
+		<add as="startSize" value="23"/>
+	</add>
+	<add as="group">
+		<add as="verticalAlign" value="top"/>
+		<add as="fillColor" value="none"/>
+		<add as="strokeColor" value="none"/>
+		<add as="gradientColor" value="none"/>
+	</add>
+	<add as="ellipse">
+		<add as="shape" value="ellipse"/>
+		<add as="perimeter" value="ellipsePerimeter"/>
+	</add>
+	<add as="rhombus">
+		<add as="shape" value="rhombus"/>
+		<add as="perimeter" value="rhombusPerimeter"/>
+	</add>
+	<add as="triangle">
+		<add as="shape" value="triangle"/>
+		<add as="perimeter" value="trianglePerimeter"/>
+	</add>
+	<add as="line">
+		<add as="shape" value="line"/>
+		<add as="strokeWidth" value="4"/>
+		<add as="labelBackgroundColor" value="#ffffff"/>
+		<add as="verticalAlign" value="top"/>
+		<add as="spacingTop" value="8"/>
+	</add>
+	<add as="image">
+		<add as="shape" value="image"/>
+		<add as="labelBackgroundColor" value="white"/>
+		<add as="verticalAlign" value="top"/>
+		<add as="verticalLabelPosition" value="bottom"/>
+	</add>
+	<add as="roundImage" extend="image">
+		<add as="perimeter" value="ellipsePerimeter"/>
+	</add>
+	<add as="rhombusImage" extend="image">
+		<add as="perimeter" value="rhombusPerimeter"/>
+	</add>
+	<add as="arrow">
+		<add as="shape" value="arrow"/>
+		<add as="edgeStyle" value="none"/>
+		<add as="fillColor" value="#ffffff"/>
+	</add-->
+</mxStylesheet>
diff --git a/public/assets/plugins/mxgraph/styles/grapheditor-ie6.css b/public/assets/plugins/mxgraph/styles/grapheditor-ie6.css
new file mode 100644
index 0000000..8571925
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/grapheditor-ie6.css
@@ -0,0 +1,23 @@
+.geToolbar .geButton {
+	border-color:pink;
+	filter: chroma(color=pink)alpha(opacity=50);
+}
+.geToolbar .geLabel {
+	border-color:pink;
+	filter:chroma(color=pink)alpha(opacity=50);
+}
+.geToolbar .geDisabled {
+	filter:chroma(color=pink) alpha(opacity=20) !important;
+}
+.geToolbar .disabled:hover {
+	border-color:pink !important;
+	filter:chroma(color=pink) alpha(opacity=20) !important;
+}
+.geSidebar .geItem {
+	border-color:pink !important;
+	filter:chroma(color=pink) !important;
+}
+td.mxPopupMenuIcon .geIcon {
+	border-color:pink !important;
+	filter:chroma(color=pink) !important;
+}
diff --git a/public/assets/plugins/mxgraph/styles/grapheditor.css b/public/assets/plugins/mxgraph/styles/grapheditor.css
new file mode 100644
index 0000000..65bf61e
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/grapheditor.css
@@ -0,0 +1,382 @@
+.geEditor {
+	height: 800px;
+	width: 100%;
+	position: relative;
+	border-width:2px;
+    border-style:solid;
+    border-color: #f7f7f7;
+}
+.geBackgroundPage {
+  	-webkit-box-shadow:0px 0px 3px 0px #d9d9d9;
+	-moz-box-shadow:0px 0px 3px 0px #d9d9d9;
+  	box-shadow:0px 0px 3px 0px #d9d9d9;
+}
+.geSidebarContainer a, .geMenubar a, .geToolbar a {
+	color:black;
+	text-decoration:none;
+}
+.geMenubarContainer, .geToolbarContainer, .geDiagramContainer, .geOutlineContainer, .geSidebarContainer, .geFooterContainer, .geHsplit, .geVsplit {
+	overflow:hidden;
+	position:absolute;
+}
+.geDiagramContainer, .geOutlineContainer {
+	background-color:#ffffff;
+	outline:none;
+}
+.geMenubar, .geToolbar {
+	white-space:nowrap;
+	display:block;
+	width:100%;
+}
+.geMenubar .geItem, .geToolbar .geButton, .geToolbar .geLabel, .geSidebar, .geSidebarContainer .geTitle, .geSidebar .geItem, .mxPopupMenuItem {
+	-webkit-transition: all 0.1s ease-in-out;
+	-moz-transition: all 0.1s ease-in-out;
+	-o-transition: all 0.1s ease-in-out;
+	-ms-transition: all 0.1s ease-in-out;
+	transition: all 0.1s ease-in-out;
+}
+.geMenubarContainer {
+	background-color:#f7f7f7;
+}
+.geMenubar {
+	padding:2px;
+}
+.geMenubar .geItem {
+	float:left;
+	padding:4px 12px 5px 6px;
+	cursor:default;
+}
+.geMenubar .geItem:hover {
+	background:#eeeeee;
+}
+.geMenubar a.geStatus {
+	color:gray;
+	padding-left:18px;
+	position:absolute;
+	top:2px;
+}
+.geMenubar a.geStatus:hover {
+	background:transparent;
+}
+.geMenubarMenu {
+	border:1px solid #d5d5d5 !important;
+}
+.geToolbarContainer {
+	background:whiteSmoke;
+	border-bottom:1px solid #e0e0e0;
+}
+.geToolbar {
+	padding:2px 0px 0px 6px;
+	border-top:1px solid #e0e0e0;
+}
+.geToolbar .geSeparator {
+	float:left;
+	width:1px;
+	height:30px;
+	background:#e5e5e5;
+	margin-left:6px;
+	margin-right:6px;
+}
+.geToolbar .geButton {
+	float:left;
+	width:20px;
+	height:20px;
+	padding:0px 2px 0px 2px;
+	margin:2px;
+	padding-bottom:4px;
+	border:1px solid transparent;
+	cursor:pointer;
+	opacity:0.5;
+	_filter:alpha(opacity=50);
+}
+.geToolbar .geButton:hover {
+	border:1px solid gray;
+	border-radius:2px;
+	opacity:1;
+	_filter:none !important;
+}
+.geToolbar .geButton:active {
+	border:1px solid black;
+}
+.geToolbar .geLabel {
+	float:left;
+	padding:5px;
+	padding-top:1px;
+	margin:2px;
+	margin-top:2px;
+	border:1px solid transparent;
+	cursor:pointer;
+	opacity:0.5;
+	_filter:alpha(opacity=50);
+}
+.geToolbar .geLabel:hover {
+	border:1px solid gray;
+	border-radius:2px;
+	opacity:0.9;
+	_filter:alpha(opacity=90) !important;
+}
+.geToolbar .geLabel:active {
+	border:1px solid black;
+	opacity:1;
+	_filter:none !important;
+}
+.geToolbar .geDisabled {
+	cursor:default !important;
+	opacity:0.2 !important;
+	_filter:alpha(opacity=20) !important;
+}
+.geToolbar .geDisabled:hover {
+	border:1px solid transparent !important;
+	opacity:0.2 !important;
+	_filter:alpha(opacity=20) !important;
+}
+.geToolbarMenu {
+	border:3px solid #e0e0e0 !important;
+	-webkit-box-shadow:none !important;
+	-moz-box-shadow:none !important;
+	box-shadow:none !important;
+	_filter:none !important;
+}
+.geSidebarContainer {
+	overflow:hidden;
+	position:absolute;
+	border-top:1px solid #e5e5e5;
+	background:whiteSmoke;
+	overflow:auto;
+}
+.geSidebar {
+	border-bottom:1px solid #e5e5e5;
+	padding-top:2px;
+	padding-bottom:6px;
+	padding-left:1px;
+	padding-right:0px;
+	overflow:hidden;
+}
+.geSidebarContainer .geTitle {
+	display:block;
+	font-size:8pt;
+	border-bottom:1px solid #e5e5e5;
+	font-weight:normal;
+	padding:6px 0px 6px 6px;
+	margin:0px;
+	cursor:pointer;
+	background:#eeeeee;
+	white-space:nowrap;
+	overflow:hidden;
+	text-overflow:ellipsis;
+	line-height:1.4em;
+}
+.geSidebarContainer .geTitle:hover {
+	background:#e5e5e5;
+}
+.geSidebar .geItem {
+	display:inline-block;
+	background-repeat:no-repeat;
+	background-position:50% 50%;
+	border:1px solid transparent;
+	border-radius:2px;
+}
+.geSidebar .geItem:hover {
+	border:1px solid gray !important;
+}
+.geItem {
+	vertical-align: top;
+}
+.geSidebarTooltip {
+	position:absolute;
+	background:white;
+	overflow:hidden;
+	border:1px solid gray;
+	border-radius:8px;
+	-webkit-box-shadow:0px 0px 2px 2px #d5d5d5;
+	-moz-box-shadow:0px 0px 2px 2px #d5d5d5;
+	box-shadow:0px 0px 2px 2px #d5d5d5;
+	_filter:progid:DXImageTransform.Microsoft.DropShadow(OffX=2, OffY=2, Color='#d5d5d5', Positive='true');
+}
+.geFooterContainer {
+	background:#e5e5e5;
+}
+.geFooter {
+	border-top:1px solid #c0c0c0;
+}
+.geHsplit {
+	cursor:col-resize;
+	background-color:#e5e5e5;
+	background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAHBAMAAADdS/HjAAAAGFBMVEUzMzP///9tbW1QUFCKiopBQUF8fHxfX1/IXlmXAAAAHUlEQVQImWMQEGAQFWUQFmYQF2cQEmIQE2MQEQEACy4BF67hpEwAAAAASUVORK5CYII=);
+	_background-image:url('thumb_vertical.png');
+	background-repeat:no-repeat;
+	background-position:center center;
+}
+.geVsplit {
+	font-size:1pt;
+	cursor:row-resize;
+	background-color:#e5e5e5;
+	background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAEBAMAAACw6DhOAAAAGFBMVEUzMzP///9tbW1QUFCKiopBQUF8fHxfX1/IXlmXAAAAFElEQVQImWNgNVdzYBAUFBRggLMAEzYBy29kEPgAAAAASUVORK5CYII=);
+	_background-image:url('thumb_horz.png');
+	background-repeat:no-repeat;
+	background-position:center center;
+}
+.geHsplit:hover, .geVsplit:hover {
+	background-color:#d5d5d5;
+}
+.geDialog {
+	outline: none;
+	position: absolute;
+	margin-top: 0;
+	top: 50%;
+	overflow: visible; /* allow content to popup out (i.e tooltips) */
+	/*position:absolute;
+	background:white;
+	padding:20px;
+	border:10px solid whiteSmoke;
+	border-radius:8px;
+	-webkit-box-shadow:0px 0px 2px 2px #d5d5d5;
+	-moz-box-shadow:0px 0px 2px 2px #d5d5d5;
+	box-shadow:0px 0px 2px 2px #d5d5d5;
+	_filter:progid:DXImageTransform.Microsoft.DropShadow(OffX=2, OffY=2, Color='#d5d5d5', Positive='true');
+*/}
+.geDialogClose {
+	position:absolute;
+	width:9px;
+	height:9px;
+	opacity:0.5;
+	cursor:pointer;
+	_filter:alpha(opacity=50);
+}
+.geDialogClose:hover {
+	opacity:1;
+}
+.geSprite {
+	/*background:url(data:image/png;base64,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) no-repeat top left;
+	*/
+	background:url('sprites.png') no-repeat top left;
+	width:21px;
+	height:21px;
+}
+.geSprite-actualsize { background-position: 0 0; }
+.geSprite-bold { background-position: 0 -46px; }
+.geSprite-bottom { background-position: 0 -92px; }
+.geSprite-center { background-position: 0 -138px; }
+.geSprite-delete { background-position: 0 -184px; }
+.geSprite-fillcolor { background-position: 0 -230px; }
+.geSprite-fit { background-position: 0 -276px; }
+.geSprite-fontcolor { background-position: 0 -322px; }
+.geSprite-gradientcolor { background-position: 0 -368px; }
+.geSprite-image { background-position: 0 -414px; }
+.geSprite-italic { background-position: 0 -460px; }
+.geSprite-left { background-position: 0 -506px; }
+.geSprite-middle { background-position: 0 -552px; }
+.geSprite-print { background-position: 0 -598px; }
+.geSprite-redo { background-position: 0 -644px; }
+.geSprite-right { background-position: 0 -690px; }
+.geSprite-shadow { background-position: 0 -736px; }
+.geSprite-strokecolor { background-position: 0 -782px; }
+.geSprite-top { background-position: 0 -828px; }
+.geSprite-underline { background-position: 0 -874px; }
+.geSprite-undo { background-position: 0 -920px; }
+.geSprite-zoomin { background-position: 0 -966px; }
+.geSprite-zoomout { background-position: 0 -1012px; }
+.geSprite-helbow { background-position: 0 -1058px; }
+.geSprite-velbow { background-position: 0 -1104px; }
+.geSprite-straight { background-position: 0 -1150px; }
+.geSprite-entity { background-position: 0 -1196px; }
+.geSprite-segment { background-position: 0 -1242px; }
+.geSprite-orthogonal { background-position: 0 -1288px; }
+.geSprite-noarrow { background-position: 0 -1334px; }
+.geSprite-endclassic { background-position: 0 -1380px; }
+.geSprite-endopen { background-position: 0 -1426px; }
+.geSprite-endblock { background-position: 0 -1472px; }
+.geSprite-endoval { background-position: 0 -1518px; }
+.geSprite-enddiamond { background-position: 0 -1564px; }
+.geSprite-endthindiamond { background-position: 0 -1610px; }
+.geSprite-endclassictrans { background-position: 0 -1656px; }
+.geSprite-endblocktrans { background-position: 0 -1702px; }
+.geSprite-endovaltrans { background-position: 0 -1748px; }
+.geSprite-enddiamondtrans { background-position: 0 -1794px; }
+.geSprite-endthindiamondtrans { background-position: 0 -1840px; }
+.geSprite-startclassic { background-position: 0 -1886px; }
+.geSprite-startopen { background-position: 0 -1932px; }
+.geSprite-startblock { background-position: 0 -1978px; }
+.geSprite-startoval { background-position: 0 -2024px; }
+.geSprite-startdiamond { background-position: 0 -2070px; }
+.geSprite-startthindiamond { background-position: 0 -2116px; }
+.geSprite-startclassictrans { background-position: 0 -2162px; }
+.geSprite-startblocktrans { background-position: 0 -2208px; }
+.geSprite-startovaltrans { background-position: 0 -2254px; }
+.geSprite-startdiamondtrans { background-position: 0 -2300px; }
+.geSprite-startthindiamondtrans { background-position: 0 -2346px; }
+.geSprite-copy { background-position: 0 -410px; }
+.geSprite-cut { background-position: 0 -320px; }
+.geSprite-paste { background-position: 0 -367px; }
+.geSprite-duplicate { background-position: 0 -736px; }
+.geSprite-save { background-position: 0 -782px; }
+.geSprite-publish { background-position: 0 -92px; }
+
+html div.mxRubberband {
+	border-color:#0000DD;
+	background:#99ccff;
+}
+td.mxPopupMenuIcon div {
+	width:16px;
+	height:16px;
+}
+html td.mxPopupMenuItem {
+	font-size:9pt;
+	padding:6px;
+}
+html div.mxPopupMenu {
+	-webkit-box-shadow:2px 2px 3px #d5d5d5;
+	-moz-box-shadow:2px 2px 3px #d5d5d5;
+	box-shadow:2px 2px 3px #d5d5d5;
+	_filter:progid:DXImageTransform.Microsoft.DropShadow(OffX=2, OffY=2, Color='#d0d0d0', Positive='true');
+	background:white;
+	position:absolute;
+	border:3px solid #e7e7e7;
+	padding:3px;
+}
+html table.mxPopupMenu {
+	border-collapse:collapse;
+	margin:0px;
+}
+html tr.mxPopupMenuItem {
+	color:black;
+	cursor:default;
+}
+html td.mxPopupMenuItem {
+	/*padding:6px 30px 6px 30px;
+	font-family:Arial;
+	font-size:10pt;*/
+}
+html td.mxPopupMenuIcon {
+	background-color:white;
+	padding:0px;
+}
+td.mxPopupMenuIcon .geIcon {
+	padding:2px;
+	padding-bottom:4px;
+	margin:2px;
+	border:1px solid transparent;
+	opacity:0.5;
+	_width:26px;
+	_height:26px;
+}
+td.mxPopupMenuIcon .geIcon:hover {
+	border:1px solid gray;
+	border-radius:2px;
+	opacity:1;
+}
+html tr.mxPopupMenuItemHover {
+	background-color: #eeeeee;
+	color: black;
+}
+table.mxPopupMenu hr {
+	color:#cccccc;
+	background-color:#cccccc;
+	border:none;
+	height:1px;
+	padding:0px;
+	margin:2px;
+}
+table.mxPopupMenu tr {
+	font-size:4pt;
+}
diff --git a/public/assets/plugins/mxgraph/styles/ie6.min.css b/public/assets/plugins/mxgraph/styles/ie6.min.css
new file mode 100644
index 0000000..9b08277
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/ie6.min.css
@@ -0,0 +1 @@
+body{background:#fff;background-image:none;padding:0;}.row{margin:0 0 0 -20px;}.span1,.span2,.span3,.span4,.span5,.span6,.span7,.span8,.span9,.span10,.span11,.span12{float:left;display:inline;}.last-child{margin-right:0;}.margin-left-20{float:left;margin-left:20px;}.nav li a{display:block;}.navbar .nav .active a,.navbar .nav .active a:hover{color:#fff;text-decoration:none;background-color:#000;}.navbar .nav li{display:block;float:left;}.navbar .nav li a{float:none;line-height:19px;padding:10px 10px 11px;}.navbar .nav li a:hover{background-color:transparent;color:#fff;text-decoration:none;}.navbar .nav .open .dropdown-toggle,.navbar .nav .active .dropdown-toggle,.navbar .nav .open.active .dropdown-toggle{background-color:transparent;}.navbar .nav .active .dropdown-toggle:hover{color:#fff;}.dropdown .dropdown-toggle{margin-bottom:1px;position:relative;top:2px;left:0;}.dropdown-menu li{width:100%;}.dropdown-menu li a{width:100%;padding:3px 0 3px 5px;}.dropdown-menu li a:hover,.dropdown-menu .active a,.dropdown-menu .active a:hover{background-color:#08C;color:#FFF;text-decoration:none;}.nav-tabs li{float:left;display:inline;margin-bottom:-2px;}.nav-tabs li a{line-height:14px;margin-right:2px;padding:9px 12px;}.nav-tabs li.active{background:none;border:1px solid #ddd;border-color:#eee #eee #ddd;}.tab-content .tab-pane.active{display:block;background-color:transparent;}.button-reset{height:auto;width:auto;margin-bottom:0;}.input-text{display:inline-block;line-height:18px;height:18px;border:1px solid #ccc;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;margin:0 0 9px;padding:4px;}.help-inline{display:block;line-height:18px;height:18px;padding:4px 0 4px 5px;}.form-inline label.checkbox{display:inline-block;line-height:18px;height:18px;width:auto;padding-left:0;margin:0;}.form-horizontal .help-block{display:inline-block;margin-left:3px;}.form-horizontal .control-label{float:left;display:inline-block;width:140px;text-align:right;padding-top:5px;}.form-horizontal label.checkbox{display:inline-block;line-height:18px;height:18px;width:auto;padding-left:0;margin:0 9px 9px 0;}.form-horizontal .input-checkbox{margin-left:-3px;}.form-horizontal .input-multiple{height:auto;}.form-horizontal .input-file{display:inline-block;line-height:24px;height:24px;width:220px;padding:4px;}.btn-primary{margin-right:4px;}.disabled{cursor:not-allowed;}.control-group.warning label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#C09853;}.control-group.error label,.control-group.error .help-block,.control-group.error .help-inline{color:#B94A48;}.control-group.success label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;}input.span1,input.span2,input.span3,input.span4,input.span5,input.span6,input.span7,input.span8,input.span9,input.span10,input.span11,input.span12,select.span1,select.span2,select.span3,select.span4,select.span5,select.span6,select.span7,select.span8,select.span9,select.span10,select.span11,select.span12{float:left;display:inline-block;margin:0;}input.btn,a.btn,button.btn{height:auto;width:auto;}.input-prepend input{margin-top:1px;}.icon-sprite{background-image:url(img/glyphicons-halflings.png);background-repeat:no-repeat;display:inline-block;height:14px;line-height:14px;vertical-align:text-top;width:14px;padding-left:3px;}.dropdown .caret{font-size:1px;height:2px;background:none;background-color:#292929;color:#292929;}.pagination-first-child{border-left-width:1px!important;}ul.thumbnails{margin-left:-20px;float:none;display:inline-block;zoom:1;clear:both;}.thumbnails li{float:left;margin:0 0 18px 20px;}.tooltip.top{margin-top:5px;}.tooltip.bottom{margin-top:-5px;}.popover{opacity:1;filter:alpha(opacity=100);}.popover.top{margin-top:-7px;}.popover.bottom{margin-top:7px;}.btn{margin-left:0;padding:2px 8px;}.btn:hover{opacity:.4;filter:alpha(opacity=40);background-color:transparent;background-position:0 0;color:#000;}.modal{position:relative;filter:alpha(opacity=99);top:55%;}.modal-header a.close{cursor:pointer;}.nav-collapse,legend{width:auto;}.tab-content .tab-pane,.tooltip.top .tooltip-arrow,.tooltip.right .tooltip-arrow,.tooltip.bottom .tooltip-arrow,.tooltip.left .tooltip-arrow,.popover.top .arrow,.popover.right .arrow,.popover.bottom .arrow,.popover.left .arrow{display:none;}label.checkbox,label.radio{display:block;line-height:18px;height:18px;width:100%;padding-left:0;margin:0 0 9px -2px;}.input-checkbox,.input-radio,.form-inline .input-checkbox{width:auto;float:left;display:inline-block;height:auto;border:none;margin:0;padding:0;}
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/styles/manual-colors.css b/public/assets/plugins/mxgraph/styles/manual-colors.css
new file mode 100644
index 0000000..9aed55e
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/manual-colors.css
@@ -0,0 +1,69 @@
+.highlight  { background: #ffffff; }
+.highlight .c { color: #999988; font-style: italic } /* Comment */
+.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
+.highlight .k { font-weight: bold } /* Keyword */
+.highlight .o { font-weight: bold } /* Operator */
+.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */
+.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
+.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #aa0000 } /* Generic.Error */
+.highlight .gh { color: #999999 } /* Generic.Heading */
+.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
+.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #555555 } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold; } /* Generic.Subheading */
+.highlight .gt { color: #aa0000 } /* Generic.Traceback */
+.highlight .kc { font-weight: bold } /* Keyword.Constant */
+.highlight .kd { font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { font-weight: bold } /* Keyword.Pseudo */
+.highlight .kr { font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */
+.highlight .m { color: #009999 } /* Literal.Number */
+.highlight .s { color: #d14 } /* Literal.String */
+.highlight .na { color: #008080 } /* Name.Attribute */
+.highlight .nb { color: #0086B3 } /* Name.Builtin */
+.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */
+.highlight .no { color: #008080 } /* Name.Constant */
+.highlight .ni { color: #800080 } /* Name.Entity */
+.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */
+.highlight .nn { color: #555555 } /* Name.Namespace */
+.highlight .nt { color: #000080 } /* Name.Tag */
+.highlight .nv { color: #008080 } /* Name.Variable */
+.highlight .ow { font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mf { color: #009999 } /* Literal.Number.Float */
+.highlight .mh { color: #009999 } /* Literal.Number.Hex */
+.highlight .mi { color: #009999 } /* Literal.Number.Integer */
+.highlight .mo { color: #009999 } /* Literal.Number.Oct */
+.highlight .sb { color: #d14 } /* Literal.String.Backtick */
+.highlight .sc { color: #d14 } /* Literal.String.Char */
+.highlight .sd { color: #d14 } /* Literal.String.Doc */
+.highlight .s2 { color: #d14 } /* Literal.String.Double */
+.highlight .se { color: #d14 } /* Literal.String.Escape */
+.highlight .sh { color: #d14 } /* Literal.String.Heredoc */
+.highlight .si { color: #d14 } /* Literal.String.Interpol */
+.highlight .sx { color: #d14 } /* Literal.String.Other */
+.highlight .sr { color: #009926 } /* Literal.String.Regex */
+.highlight .s1 { color: #d14 } /* Literal.String.Single */
+.highlight .ss { color: #990073 } /* Literal.String.Symbol */
+.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */
+.highlight .vc { color: #008080 } /* Name.Variable.Class */
+.highlight .vg { color: #008080 } /* Name.Variable.Global */
+.highlight .vi { color: #008080 } /* Name.Variable.Instance */
+.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */
+
+.type-csharp .highlight .k { color: #0000FF }
+.type-csharp .highlight .kt { color: #0000FF }
+.type-csharp .highlight .nf { color: #000000; font-weight: normal }
+.type-csharp .highlight .nc { color: #2B91AF }
+.type-csharp .highlight .nn { color: #000000 }
+.type-csharp .highlight .s { color: #A31515 }
+.type-csharp .highlight .sc { color: #A31515 }
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/styles/manual-styles.css b/public/assets/plugins/mxgraph/styles/manual-styles.css
new file mode 100644
index 0000000..515e682
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/manual-styles.css
@@ -0,0 +1,255 @@
+@import url(https://fonts.googleapis.com/css?family=Lato:300italic,700italic,300,700);
+
+body {
+  padding:50px;
+  font:14px/1.5 Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
+  color:#777;
+  font-weight:300;
+}
+
+h1, h2, h3, h4, h5, h6 {
+  color:#222;
+  margin:0 0 20px;
+}
+
+p, ul, ol, table, pre, dl {
+  margin:0 0 20px;
+}
+
+h1, h2, h3 {
+  line-height:1.1;
+}
+
+h1 {
+  font-size:28px;
+}
+
+h2 {
+  color:#393939;
+}
+
+h3, h4, h5, h6 {
+  color:#494949;
+}
+
+a {
+  color:#39c;
+  font-weight:400;
+  text-decoration:none;
+}
+
+a small {
+  font-size:11px;
+  color:#777;
+  margin-top:-0.6em;
+  display:block;
+}
+
+.wrapper {
+  width:860px;
+  margin:0 auto;
+}
+
+blockquote {
+  border-left:1px solid #e5e5e5;
+  margin:0;
+  padding:0 0 0 20px;
+  font-style:italic;
+}
+
+code, pre {
+  font-family:Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal;
+  color:#333;
+  font-size:12px;
+}
+
+pre {
+  padding:8px 15px;
+  background: #f8f8f8;  
+  border-radius:5px;
+  border:1px solid #e5e5e5;
+  overflow-x: auto;
+}
+
+table {
+  width:100%;
+  border-collapse:collapse;
+}
+
+th, td {
+  text-align:left;
+  padding:5px 10px;
+  border-bottom:1px solid #e5e5e5;
+}
+
+dt {
+  color:#444;
+  font-weight:700;
+}
+
+th {
+  color:#444;
+}
+
+img {
+  max-width:100%;
+}
+
+header {
+  width:270px;
+  float:left;
+  position:fixed;
+}
+
+header ul {
+  list-style:none;
+  height:40px;
+  
+  padding:0;
+  
+  background: #eee;
+  background: -moz-linear-gradient(top, #f8f8f8 0%, #dddddd 100%);
+  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#dddddd));
+  background: -webkit-linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
+  background: -o-linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
+  background: -ms-linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
+  background: linear-gradient(top, #f8f8f8 0%,#dddddd 100%);
+  
+  border-radius:5px;
+  border:1px solid #d2d2d2;
+  box-shadow:inset #fff 0 1px 0, inset rgba(0,0,0,0.03) 0 -1px 0;
+  width:270px;
+}
+
+header li {
+  width:89px;
+  float:left;
+  border-right:1px solid #d2d2d2;
+  height:40px;
+}
+
+header ul a {
+  line-height:1;
+  font-size:11px;
+  color:#999;
+  display:block;
+  text-align:center;
+  padding-top:6px;
+  height:40px;
+}
+
+strong {
+  color:#222;
+  font-weight:700;
+}
+
+header ul li + li {
+  width:88px;
+  border-left:1px solid #fff;
+}
+
+header ul li + li + li {
+  border-right:none;
+  width:89px;
+}
+
+header ul a strong {
+  font-size:14px;
+  display:block;
+  color:#222;
+}
+
+section {
+  width:500px;
+  float:right;
+  padding-bottom:50px;
+}
+
+small {
+  font-size:11px;
+}
+
+hr {
+  border:0;
+  background:#e5e5e5;
+  height:1px;
+  margin:0 0 20px;
+}
+
+footer {
+  width:270px;
+  float:left;
+  position:fixed;
+  bottom:50px;
+}
+
+@media print, screen and (max-width: 960px) {
+  
+  div.wrapper {
+    width:auto;
+    margin:0;
+  }
+  
+  header, section, footer {
+    float:none;
+    position:static;
+    width:auto;
+  }
+  
+  header {
+    padding-right:320px;
+  }
+  
+  section {
+    border:1px solid #e5e5e5;
+    border-width:1px 0;
+    padding:20px 0;
+    margin:0 0 20px;
+  }
+  
+  header a small {
+    display:inline;
+  }
+  
+  header ul {
+    position:absolute;
+    right:50px;
+    top:52px;
+  }
+}
+
+@media print, screen and (max-width: 720px) {
+  body {
+    word-wrap:break-word;
+  }
+  
+  header {
+    padding:0;
+  }
+  
+  header ul, header p.view {
+    position:static;
+  }
+  
+  pre, code {
+    word-wrap:normal;
+  }
+}
+
+@media print, screen and (max-width: 480px) {
+  body {
+    padding:15px;
+  }
+  
+  header ul {
+    display:none;
+  }
+}
+
+@media print {
+  body {
+    padding:0.4in;
+    font-size:12pt;
+    color:#444;
+  }
+}
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/styles/sprites.png b/public/assets/plugins/mxgraph/styles/sprites.png
new file mode 100644
index 0000000000000000000000000000000000000000..31f1786d8762ac714d4ac6d3b6bcf5c8cbc5fd26
GIT binary patch
literal 6286
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
SrKC>&_1DtSg;lEAME)P!dkE10

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/styles/thumb_horz.png b/public/assets/plugins/mxgraph/styles/thumb_horz.png
new file mode 100644
index 0000000000000000000000000000000000000000..f2896f5c0c9ab969a0a9d8592a382294cc7577a0
GIT binary patch
literal 113
zcmeAS@N?(olHy`uVBq!ia0vp^>_E)I!VDxgys+>CQW60^A+E;8#{d8S&&|yZ2nguv
z>T+~+tf{GqkB>hQ7daiMM#R&_F@$4ga)N1iae{z|h)6=iW(Hw1#?$#J0zZKA44$rj
JF6*2UngA#o9_j!9

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/styles/thumb_vertical.png b/public/assets/plugins/mxgraph/styles/thumb_vertical.png
new file mode 100644
index 0000000000000000000000000000000000000000..e0a22e029c85ee85d86724ba4ef3cc46c61fe0f5
GIT binary patch
literal 122
zcmeAS@N?(olHy`uVBq!ia0vp^EI`c8!VDzudVhQjq$C1-LR^iFjsO4upPQQ-5D?JS
z)#d2uSW{CIA0K}rE^<0hjjX4OV+hC0WC4K$0nt<eu`~hkbOE6x0pVl;K}H5{Jx1|$
T5104=6*73b`njxgN@xNAKo=il

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/styles/web/bootstrap-extra.css b/public/assets/plugins/mxgraph/styles/web/bootstrap-extra.css
new file mode 100644
index 0000000..d743de9
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/web/bootstrap-extra.css
@@ -0,0 +1,510 @@
+body {
+    background:#eee; /* url("../img/bg/top.png") top left repeat-x; */
+    padding:40px 0 0;
+    border-top:3px solid #ddd;
+}
+
+p {
+    text-shadow:#fff 0 1px 0;
+}
+
+a:link, a:visited {
+    color:#338bb8;
+    text-decoration:none;
+}
+
+a:hover {
+    color:#3799ca;
+    text-decoration:underline;
+    
+}
+
+
+h3 {
+    text-align:center;
+    font-size:32px;
+    line-height:40px;
+    font-family: 'Open Sans', sans-serif;
+    font-weight:400;
+    margin:0 0 15px;
+}
+
+.hand {
+    font-family: 'Delius Swash Caps', sans-serif;
+    font-weight:400;
+    color:#4fb6e9; 
+}
+
+.subheader {
+    font-family: 'Open Sans Condensed', sans-serif;
+    font-weight:600;
+    color:#aaa;
+}
+
+h2 {
+    text-align:center;
+    font-size:48px;
+    line-height:56px;
+    margin:15px 0;
+    font-family: 'Open Sans', sans-serif;
+    font-weight:400;
+}
+
+
+h2 strong {
+    font-weight:700;
+}
+
+h4 {
+    font-family:'Open Sans', sans-serif;
+    font-weight:600;
+    font-size:16px;
+    
+}
+
+/** NAV **/
+
+.navbar {
+    margin:0 0 15px;
+    
+}
+
+.navbar-inner {
+    background:transparent;
+    box-shadow:none;
+    -webkit-box-shadow:none;
+    -moz-box-shadow:none;
+    filter:none;
+}
+
+.navbar .brand {
+    font-family: 'Open Sans Condensed', sans-serif;
+    font-weight:700;
+    font-size:32px;
+    padding:0;
+    margin-left:0;
+}
+
+.navbar .nav {
+    float:right;
+}
+
+.navbar .nav li {
+    margin-left:15px;
+}
+
+.navbar .nav li a {
+    font-family: 'Open Sans', sans-serif;
+    font-weight:600;
+    padding:6px 18px;
+    color:#888;
+    text-shadow:none;
+    -webkit-border-radius:16px;
+    border-radius:16px;
+    background:#fff;
+    border:1px solid #ddd;
+    border-color:#ddd #d0d0d0 #bbb;
+    line-height:16px;
+    text-align:center;
+    min-width:60px;
+}
+
+.navbar .nav .active a {
+    -webkit-border-radius:16px;
+    border-radius:16px;
+    background:#4fb6e9;
+    border:1px solid #ddd;
+    border-color:#3ca3d7 #3799ca #338bb8;
+    color:#fff;
+    text-shadow:none;
+    background-image: linear-gradient(top, rgb(146,219,255) 0%, rgb(79,182,233) 5%, rgb(57,160,211) 100%);
+    background-image: -o-linear-gradient(top, rgb(146,219,255) 0%, rgb(79,182,233) 5%, rgb(57,160,211) 100%);
+    background-image: -moz-linear-gradient(top, rgb(146,219,255) 0%, rgb(79,182,233) 5%, rgb(57,160,211) 100%);
+    background-image: -webkit-linear-gradient(top, rgb(146,219,255) 0%, rgb(79,182,233) 5%, rgb(57,160,211) 100%);
+    background-image: -ms-linear-gradient(top, rgb(146,219,255) 0%, rgb(79,182,233) 5%, rgb(57,160,211) 100%);
+    
+    background-image: -webkit-gradient(
+        linear,
+        left top,
+        left bottom,
+        color-stop(0, rgb(146,219,255)),
+        color-stop(0.05, rgb(79,182,233)),
+        color-stop(1, rgb(57,160,211))
+    );
+    text-shadow:#3799ca 0 -1px 0;
+    box-shadow:rgba(0,0,0,0.2) 0 1px 1px;
+}
+
+
+.navbar .nav li a:hover {
+    color:#3799ca;
+    background-image: linear-gradient(top, rgb(255,255,255) 0%, rgb(250,250,250) 5%, rgb(244,244,244) 100%);
+    background-image: -o-linear-gradient(top, rgb(255,255,255) 0%, rgb(250,250,250) 5%, rgb(244,244,244) 100%);
+    background-image: -moz-linear-gradient(top, rgb(255,255,255) 0%, rgb(250,250,250) 5%, rgb(244,244,244) 100%);
+    background-image: -webkit-linear-gradient(top, rgb(255,255,255) 0%, rgb(250,250,250) 5%, rgb(244,244,244) 100%);
+    background-image: -ms-linear-gradient(top, rgb(255,255,255) 0%, rgb(250,250,250) 5%, rgb(244,244,244) 100%);
+    
+    background-image: -webkit-gradient(
+        linear,
+        left top,
+        left bottom,
+        color-stop(0, rgb(255,255,255)),
+        color-stop(0.05, rgb(250,250,250)),
+        color-stop(1, rgb(244,244,244))
+    );
+    box-shadow:rgba(0,0,0,0.1) 0 1px 3px;
+    text-shadow:#fff 0 0 2px;
+}
+
+
+.navbar .nav .active a:hover {
+    background:#3ca3d7;
+    color:#fff;
+    text-shadow:none;
+    background-image: linear-gradient(top, rgb(146,219,255) 0%, rgb(79,182,233) 5%, rgb(57,160,211) 100%);
+    background-image: -o-linear-gradient(top, rgb(146,219,255) 0%, rgb(79,182,233) 5%, rgb(57,160,211) 100%);
+    background-image: -moz-linear-gradient(top, rgb(146,219,255) 0%, rgb(79,182,233) 5%, rgb(57,160,211) 100%);
+    background-image: -webkit-linear-gradient(top, rgb(146,219,255) 0%, rgb(79,182,233) 5%, rgb(57,160,211) 100%);
+    background-image: -ms-linear-gradient(top, rgb(146,219,255) 0%, rgb(79,182,233) 5%, rgb(57,160,211) 100%);
+    
+    background-image: -webkit-gradient(
+        linear,
+        left top,
+        left bottom,
+        color-stop(0, rgb(146,219,255)),
+        color-stop(0.05, rgb(79,182,233)),
+        color-stop(1, rgb(57,160,211))
+    );
+    text-shadow:#3799ca 0 -1px 0;
+    box-shadow:rgba(0,0,0,0.1) 0 1px 3px;
+}
+
+
+
+/** FEATURE ***/
+
+.feature {
+    margin-top:60px;
+    margin-bottom:60px;
+    text-align:center;
+}
+
+.feature img {
+    margin:30px 0 0;
+    text-align:center;
+}
+
+.box h3 {
+    font-family:'Open Sans', sans-serif;
+    font-weight:600;
+    font-size:24px;
+    margin-bottom:15px;
+    text-align:left;
+}
+
+
+.box {
+    background:#fff;
+    box-shadow:none;
+    border:1px solid #ddd;
+    -webkit-border-radius:3px;
+    border-radius:3px;
+    padding:60px 0;
+    margin-top:15px;
+    margin-bottom:60px;
+}
+
+.box .row + .row {
+    margin-top:30px;
+}
+
+.box .span6 + .span4 img {
+    float:right;
+}
+
+.quotes {
+    margin-top:30px;
+    margin-bottom:60px;
+}
+
+.thumbnails {
+    margin-top:30px;
+}
+
+.thumbnail {
+    background:#fff;
+}
+
+.thumbnail span {
+    display:block;
+    position:absolute;
+    margin-top:155px;
+    width:250px;
+    padding:5px;
+    font-family:'Open Sans', sans-serif;
+    font-weight:600;
+    font-size:14px;
+    color:#000;
+    text-shadow:rgba(0,0,0,0.4) 0 1px 2px;
+}
+
+/*** PRICING ****/
+
+.pricing {
+    padding-top:38px;
+    margin-bottom:30px;
+}
+
+.pricing .well {
+    background:#fff;
+    box-shadow:none;
+    border:1px solid #ddd;
+}
+
+.pricing .well.highlighted {
+    box-shadow:rgba(0,0,0,0.2) 0 0 10px;
+    margin-top:-19px;
+    padding-top:38px;
+    padding-bottom:38px;
+}
+
+.pricing .well ul {
+    margin-left:0;
+}
+
+.pricing .well ul li {
+    list-style:none;
+    text-align:center;
+    padding:8px 0;
+    border-bottom:1px solid #eee;
+    
+}
+
+.pricing .well h4 {
+    text-align:center;
+}
+
+.pricing .spot {
+    font-family: 'Open Sans', sans-serif;
+    font-weight:700;
+    font-size:14px;
+    -webkit-border-radius:64px;
+    border-radius:64px;
+    background:#71be42;
+    border:1px solid #ddd;
+    border-color:#7dca4f #71be42 #63a73a;
+    color:#fff;
+    text-shadow:none;
+    
+    background-image: -o-linear-gradient(top, rgb(188,255,146) 0%, rgb(144,231,91) 5%, rgb(124,202,79) 100%);
+    background-image: -moz-linear-gradient(top, rgb(188,255,146) 0%, rgb(144,231,91) 5%, rgb(124,202,79) 100%);
+    background-image: -webkit-linear-gradient(top, rgb(188,255,146) 0%, rgb(144,231,91) 5%, rgb(124,202,79) 100%);
+    background-image: -ms-linear-gradient(top, rgb(188,255,146) 0%, rgb(144,231,91) 5%, rgb(124,202,79) 100%);
+    background-image: -webkit-gradient(
+        linear,
+        left top,
+        left bottom,
+        color-stop(0, rgb(188,255,146)),
+        color-stop(0.05, rgb(144,231,91)),
+        color-stop(1, rgb(124,202,79))
+    );
+    background-image: linear-gradient(top, rgb(188,255,146) 0%, rgb(144,231,91) 5%, rgb(124,202,79) 100%);
+    text-shadow:#63a73a 0 -1px 0;
+    box-shadow:rgba(0,0,0,0.3) 0 1px 3px;
+    position:absolute;
+    height:32px;
+    padding:16px 0;
+    line-height:16px;
+    width:64px;
+    text-align:center;
+    margin-top:-35px;
+    margin-left:-16px;
+}
+
+/*** OTHER BITS ****/
+
+.signup {
+    display:inline-block;
+    font-family:'Open Sans', sans-serif;
+    font-size:24px;
+    font-weight:400;
+    padding:15px 30px;
+    -webkit-border-radius:32px;
+    border-radius:32px;
+    background:#4fb6e9;
+    border:1px solid #ddd;
+    border-color:#3ca3d7 #3799ca #338bb8;
+    color:#fff;
+    text-shadow:none;
+    background-image: linear-gradient(top, rgb(146,219,255) 0%, rgb(79,182,233) 5%, rgb(57,160,211) 100%);
+    background-image: -o-linear-gradient(top, rgb(146,219,255) 0%, rgb(79,182,233) 5%, rgb(57,160,211) 100%);
+    background-image: -moz-linear-gradient(top, rgb(146,219,255) 0%, rgb(79,182,233) 5%, rgb(57,160,211) 100%);
+    background-image: -webkit-linear-gradient(top, rgb(146,219,255) 0%, rgb(79,182,233) 5%, rgb(57,160,211) 100%);
+    background-image: -ms-linear-gradient(top, rgb(146,219,255) 0%, rgb(79,182,233) 5%, rgb(57,160,211) 100%);
+    
+    background-image: -webkit-gradient(
+        linear,
+        left top,
+        left bottom,
+        color-stop(0, rgb(146,219,255)),
+        color-stop(0.05, rgb(79,182,233)),
+        color-stop(1, rgb(57,160,211))
+    );
+    text-shadow:#3799ca 0 -1px 0;
+    box-shadow:rgba(0,0,0,0.2) 0 1px 1px;
+
+}
+
+.signup:link, .signup:visited {
+    color:#fff;
+}
+
+.signup:hover {
+    background:#3ca3d7;
+    box-shadow:none;
+    color:#fff;
+    text-decoration:none;
+}
+
+.table {
+    background:#fff;
+    
+}
+
+
+.table td {
+    text-align:center;
+}
+
+.table tbody tr:hover td {
+    background:#fff;
+}
+
+form h4 {
+    margin-bottom:15px;
+}
+
+.center {
+    text-align:center;
+}
+
+.right {
+    text-align:right;
+}
+
+.graded {
+    min-height:40px;
+    padding-bottom:100px;
+    background:url("../img/bg/graded2.png") bottom center repeat-x;
+}
+
+.drop-shadow {
+   position:relative;
+}
+
+.drop-shadow:before,
+.drop-shadow:after {
+   content:"";
+   position:absolute;
+   z-index:-1;
+    bottom:15px;
+   left:10px;
+   width:50%;
+   height:20%;
+   -webkit-box-shadow:0 15px 10px rgba(0, 0, 0, 0.7);
+   -moz-box-shadow:0 15px 10px rgba(0, 0, 0, 0.7);
+   box-shadow:0 15px 15px rgba(0, 0, 0, 0.7);
+   -webkit-transform:rotate(-2deg);
+   -moz-transform:rotate(-2deg);
+   -o-transform:rotate(-2deg);
+   transform:rotate(-2deg);
+}
+
+.drop-shadow:after{
+   right:10px;
+   left:auto;
+   -webkit-transform:rotate(2deg);
+   -moz-transform:rotate(2deg);
+   -o-transform:rotate(2deg);
+   transform:rotate(2deg);
+}
+
+.footer {
+    margin-bottom:30px;
+}
+
+.footer .links {
+    list-style:none;
+    margin-left:0;
+}
+
+.footer .links li {
+    float:left;
+    margin-right:15px;
+    line-height:34px;
+    height:34px;
+}
+
+
+/*** MEDIA QUERIES ****/
+
+@media (max-width: 767px) {
+    
+    .navbar .brand {
+        float:none;
+        margin-bottom:15px;
+    }
+    
+    .navbar .nav {
+        clear:both;
+        margin-top:15px;
+        float:none;
+    }
+    
+    .navbar .nav li {
+        float:none;
+        margin:0 0 15px 0;
+    }
+    
+    .navbar .nav li a {
+        padding-left:0;
+        padding-right:0;
+    }
+    
+    .container {
+        padding-left:10px;
+        padding-right:10px;
+    }
+    
+    .pricing .well.highlighted {
+        margin-top:0;
+        
+    }
+    
+    .pricing .spot {
+        margin-left:15px;
+        margin-top:-15px;
+    }
+    
+    
+    .box {
+        padding:15px;
+    }
+}
+
+@media (max-width: 480px) {
+    h2 {
+        font-size:32px;
+        line-height:36px;
+    }
+    
+    h3 {
+        font-size:26px;
+        line-height:30px;
+    }
+    
+    .pricing {
+        padding-top:0;
+        margin-top:30px;
+    }
+}
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/styles/web/bootstrap-responsive.css b/public/assets/plugins/mxgraph/styles/web/bootstrap-responsive.css
new file mode 100644
index 0000000..a4aa8f5
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/web/bootstrap-responsive.css
@@ -0,0 +1,808 @@
+/*!
+ * Bootstrap Responsive v2.0.3
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+
+.clearfix {
+  *zoom: 1;
+}
+
+.clearfix:before,
+.clearfix:after {
+  display: table;
+  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: 28px;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+      -ms-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;
+}
+
+@media (max-width: 767px) {
+  .visible-phone {
+    display: inherit !important;
+  }
+  .hidden-phone {
+    display: none !important;
+  }
+  .hidden-desktop {
+    display: inherit !important;
+  }
+  .visible-desktop {
+    display: none !important;
+  }
+}
+
+@media (min-width: 768px) and (max-width: 979px) {
+  .visible-tablet {
+    display: inherit !important;
+  }
+  .hidden-tablet {
+    display: none !important;
+  }
+  .hidden-desktop {
+    display: inherit !important;
+  }
+  .visible-desktop {
+    display: none !important ;
+  }
+}
+
+@media (max-width: 480px) {
+  .nav-collapse {
+    -webkit-transform: translate3d(0, 0, 0);
+  }
+  .page-header h1 small {
+    display: block;
+    line-height: 18px;
+  }
+  input[type="checkbox"],
+  input[type="radio"] {
+    border: 1px solid #ccc;
+  }
+  .form-horizontal .control-group > 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;
+  }
+  .modal {
+    position: absolute;
+    top: 10px;
+    right: 10px;
+    left: 10px;
+    width: auto;
+    margin: 0;
+  }
+  .modal.fade.in {
+    top: auto;
+  }
+  .modal-header .close {
+    padding: 10px;
+    margin: -10px;
+  }
+  .carousel-caption {
+    position: static;
+  }
+}
+
+@media (max-width: 767px) {
+  body {
+    padding-right: 20px;
+    padding-left: 20px;
+  }
+  .navbar-fixed-top,
+  .navbar-fixed-bottom {
+    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;
+  }
+  [class*="span"],
+  .row-fluid [class*="span"] {
+    display: block;
+    float: none;
+    width: auto;
+    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: 28px;
+    -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+        -ms-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;
+  }
+}
+
+@media (min-width: 768px) and (max-width: 979px) {
+  .row {
+    margin-left: -20px;
+    *zoom: 1;
+  }
+  .row:before,
+  .row:after {
+    display: table;
+    content: "";
+  }
+  .row:after {
+    clear: both;
+  }
+  [class*="span"] {
+    float: left;
+    margin-left: 20px;
+  }
+  .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;
+    content: "";
+  }
+  .row-fluid:after {
+    clear: both;
+  }
+  .row-fluid [class*="span"] {
+    display: block;
+    float: left;
+    width: 100%;
+    min-height: 28px;
+    margin-left: 2.762430939%;
+    *margin-left: 2.709239449638298%;
+    -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+        -ms-box-sizing: border-box;
+            box-sizing: border-box;
+  }
+  .row-fluid [class*="span"]:first-child {
+    margin-left: 0;
+  }
+  .row-fluid .span12 {
+    width: 99.999999993%;
+    *width: 99.9468085036383%;
+  }
+  .row-fluid .span11 {
+    width: 91.436464082%;
+    *width: 91.38327259263829%;
+  }
+  .row-fluid .span10 {
+    width: 82.87292817100001%;
+    *width: 82.8197366816383%;
+  }
+  .row-fluid .span9 {
+    width: 74.30939226%;
+    *width: 74.25620077063829%;
+  }
+  .row-fluid .span8 {
+    width: 65.74585634900001%;
+    *width: 65.6926648596383%;
+  }
+  .row-fluid .span7 {
+    width: 57.182320438000005%;
+    *width: 57.129128948638304%;
+  }
+  .row-fluid .span6 {
+    width: 48.618784527%;
+    *width: 48.5655930376383%;
+  }
+  .row-fluid .span5 {
+    width: 40.055248616%;
+    *width: 40.0020571266383%;
+  }
+  .row-fluid .span4 {
+    width: 31.491712705%;
+    *width: 31.4385212156383%;
+  }
+  .row-fluid .span3 {
+    width: 22.928176794%;
+    *width: 22.874985304638297%;
+  }
+  .row-fluid .span2 {
+    width: 14.364640883%;
+    *width: 14.311449393638298%;
+  }
+  .row-fluid .span1 {
+    width: 5.801104972%;
+    *width: 5.747913482638298%;
+  }
+  input,
+  textarea,
+  .uneditable-input {
+    margin-left: 0;
+  }
+  input.span12,
+  textarea.span12,
+  .uneditable-input.span12 {
+    width: 714px;
+  }
+  input.span11,
+  textarea.span11,
+  .uneditable-input.span11 {
+    width: 652px;
+  }
+  input.span10,
+  textarea.span10,
+  .uneditable-input.span10 {
+    width: 590px;
+  }
+  input.span9,
+  textarea.span9,
+  .uneditable-input.span9 {
+    width: 528px;
+  }
+  input.span8,
+  textarea.span8,
+  .uneditable-input.span8 {
+    width: 466px;
+  }
+  input.span7,
+  textarea.span7,
+  .uneditable-input.span7 {
+    width: 404px;
+  }
+  input.span6,
+  textarea.span6,
+  .uneditable-input.span6 {
+    width: 342px;
+  }
+  input.span5,
+  textarea.span5,
+  .uneditable-input.span5 {
+    width: 280px;
+  }
+  input.span4,
+  textarea.span4,
+  .uneditable-input.span4 {
+    width: 218px;
+  }
+  input.span3,
+  textarea.span3,
+  .uneditable-input.span3 {
+    width: 156px;
+  }
+  input.span2,
+  textarea.span2,
+  .uneditable-input.span2 {
+    width: 94px;
+  }
+  input.span1,
+  textarea.span1,
+  .uneditable-input.span1 {
+    width: 32px;
+  }
+}
+/*
+@media (min-width: 1200px) {
+  .row {
+    margin-left: -30px;
+    *zoom: 1;
+  }
+  .row:before,
+  .row:after {
+    display: table;
+    content: "";
+  }
+  .row:after {
+    clear: both;
+  }
+  [class*="span"] {
+    float: left;
+    margin-left: 30px;
+  }
+  .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;
+    content: "";
+  }
+  .row-fluid:after {
+    clear: both;
+  }
+  .row-fluid [class*="span"] {
+    display: block;
+    float: left;
+    width: 100%;
+    min-height: 28px;
+    margin-left: 2.564102564%;
+    *margin-left: 2.510911074638298%;
+    -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+        -ms-box-sizing: border-box;
+            box-sizing: border-box;
+  }
+  .row-fluid [class*="span"]:first-child {
+    margin-left: 0;
+  }
+  .row-fluid .span12 {
+    width: 100%;
+    *width: 99.94680851063829%;
+  }
+  .row-fluid .span11 {
+    width: 91.45299145300001%;
+    *width: 91.3997999636383%;
+  }
+  .row-fluid .span10 {
+    width: 82.905982906%;
+    *width: 82.8527914166383%;
+  }
+  .row-fluid .span9 {
+    width: 74.358974359%;
+    *width: 74.30578286963829%;
+  }
+  .row-fluid .span8 {
+    width: 65.81196581200001%;
+    *width: 65.7587743226383%;
+  }
+  .row-fluid .span7 {
+    width: 57.264957265%;
+    *width: 57.2117657756383%;
+  }
+  .row-fluid .span6 {
+    width: 48.717948718%;
+    *width: 48.6647572286383%;
+  }
+  .row-fluid .span5 {
+    width: 40.170940171000005%;
+    *width: 40.117748681638304%;
+  }
+  .row-fluid .span4 {
+    width: 31.623931624%;
+    *width: 31.5707401346383%;
+  }
+  .row-fluid .span3 {
+    width: 23.076923077%;
+    *width: 23.0237315876383%;
+  }
+  .row-fluid .span2 {
+    width: 14.529914530000001%;
+    *width: 14.4767230406383%;
+  }
+  .row-fluid .span1 {
+    width: 5.982905983%;
+    *width: 5.929714493638298%;
+  }
+  input,
+  textarea,
+  .uneditable-input {
+    margin-left: 0;
+  }
+  input.span12,
+  textarea.span12,
+  .uneditable-input.span12 {
+    width: 1160px;
+  }
+  input.span11,
+  textarea.span11,
+  .uneditable-input.span11 {
+    width: 1060px;
+  }
+  input.span10,
+  textarea.span10,
+  .uneditable-input.span10 {
+    width: 960px;
+  }
+  input.span9,
+  textarea.span9,
+  .uneditable-input.span9 {
+    width: 860px;
+  }
+  input.span8,
+  textarea.span8,
+  .uneditable-input.span8 {
+    width: 760px;
+  }
+  input.span7,
+  textarea.span7,
+  .uneditable-input.span7 {
+    width: 660px;
+  }
+  input.span6,
+  textarea.span6,
+  .uneditable-input.span6 {
+    width: 560px;
+  }
+  input.span5,
+  textarea.span5,
+  .uneditable-input.span5 {
+    width: 460px;
+  }
+  input.span4,
+  textarea.span4,
+  .uneditable-input.span4 {
+    width: 360px;
+  }
+  input.span3,
+  textarea.span3,
+  .uneditable-input.span3 {
+    width: 260px;
+  }
+  input.span2,
+  textarea.span2,
+  .uneditable-input.span2 {
+    width: 160px;
+  }
+  input.span1,
+  textarea.span1,
+  .uneditable-input.span1 {
+    width: 60px;
+  }
+  .thumbnails {
+    margin-left: -30px;
+  }
+  .thumbnails > li {
+    margin-left: 30px;
+  }
+  .row-fluid .thumbnails {
+    margin-left: 0;
+  }
+}
+ */
+@media (max-width: 979px) {
+  body {
+    padding-top: 0;
+  }
+  .navbar-fixed-top {
+    position: static;
+    margin-bottom: 18px;
+  }
+  .navbar-fixed-top .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 9px;
+  }
+  .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: #999999;
+    text-shadow: none;
+  }
+  .nav-collapse .nav > li > a,
+  .nav-collapse .dropdown-menu a {
+    padding: 6px 15px;
+    font-weight: bold;
+    color: #999999;
+    -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: #222222;
+  }
+  .nav-collapse.in .btn-group {
+    padding: 0;
+    margin-top: 5px;
+  }
+  .nav-collapse .dropdown-menu {
+    position: static;
+    top: auto;
+    left: auto;
+    display: block;
+    float: none;
+    max-width: none;
+    padding: 0;
+    margin: 0 15px;
+    background-color: transparent;
+    border: none;
+    -webkit-border-radius: 0;
+       -moz-border-radius: 0;
+            border-radius: 0;
+    -webkit-box-shadow: none;
+       -moz-box-shadow: none;
+            box-shadow: none;
+  }
+  .nav-collapse .dropdown-menu:before,
+  .nav-collapse .dropdown-menu:after {
+    display: none;
+  }
+  .nav-collapse .dropdown-menu .divider {
+    display: none;
+  }
+  .nav-collapse .navbar-form,
+  .nav-collapse .navbar-search {
+    float: none;
+    padding: 9px 15px;
+    margin: 9px 0;
+    border-top: 1px solid #222222;
+    border-bottom: 1px solid #222222;
+    -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 .nav-collapse .nav.pull-right {
+    float: none;
+    margin-left: 0;
+  }
+  .nav-collapse,
+  .nav-collapse.collapse {
+    height: 0;
+    overflow: hidden;
+  }
+  .navbar .btn-navbar {
+    display: block;
+  }
+  .navbar-static .navbar-inner {
+    padding-right: 10px;
+    padding-left: 10px;
+  }
+}
+
+@media (min-width: 980px) {
+  .nav-collapse.collapse {
+    height: auto !important;
+    overflow: visible !important;
+  }
+}
diff --git a/public/assets/plugins/mxgraph/styles/web/bootstrap-responsive.min.css b/public/assets/plugins/mxgraph/styles/web/bootstrap-responsive.min.css
new file mode 100644
index 0000000..dd134a1
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/web/bootstrap-responsive.min.css
@@ -0,0 +1,9 @@
+/*!
+ * Bootstrap Responsive v2.0.3
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;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:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-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}@media(max-width:767px){.visible-phone{display:inherit!important}.hidden-phone{display:none!important}.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}}@media(min-width:768px) and (max-width:979px){.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:18px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-group>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}.modal{position:absolute;top:10px;right:10px;left:10px;width:auto;margin:0}.modal.fade.in{top:auto}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom{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}[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:auto;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:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-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}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:20px}.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;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:28px;margin-left:2.762430939%;*margin-left:2.709239449638298%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:99.999999993%;*width:99.9468085036383%}.row-fluid .span11{width:91.436464082%;*width:91.38327259263829%}.row-fluid .span10{width:82.87292817100001%;*width:82.8197366816383%}.row-fluid .span9{width:74.30939226%;*width:74.25620077063829%}.row-fluid .span8{width:65.74585634900001%;*width:65.6926648596383%}.row-fluid .span7{width:57.182320438000005%;*width:57.129128948638304%}.row-fluid .span6{width:48.618784527%;*width:48.5655930376383%}.row-fluid .span5{width:40.055248616%;*width:40.0020571266383%}.row-fluid .span4{width:31.491712705%;*width:31.4385212156383%}.row-fluid .span3{width:22.928176794%;*width:22.874985304638297%}.row-fluid .span2{width:14.364640883%;*width:14.311449393638298%}.row-fluid .span1{width:5.801104972%;*width:5.747913482638298%}input,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:714px}input.span11,textarea.span11,.uneditable-input.span11{width:652px}input.span10,textarea.span10,.uneditable-input.span10{width:590px}input.span9,textarea.span9,.uneditable-input.span9{width:528px}input.span8,textarea.span8,.uneditable-input.span8{width:466px}input.span7,textarea.span7,.uneditable-input.span7{width:404px}input.span6,textarea.span6,.uneditable-input.span6{width:342px}input.span5,textarea.span5,.uneditable-input.span5{width:280px}input.span4,textarea.span4,.uneditable-input.span4{width:218px}input.span3,textarea.span3,.uneditable-input.span3{width:156px}input.span2,textarea.span2,.uneditable-input.span2{width:94px}input.span1,textarea.span1,.uneditable-input.span1{width:32px}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:30px}.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;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:28px;margin-left:2.564102564%;*margin-left:2.510911074638298%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145300001%;*width:91.3997999636383%}.row-fluid .span10{width:82.905982906%;*width:82.8527914166383%}.row-fluid .span9{width:74.358974359%;*width:74.30578286963829%}.row-fluid .span8{width:65.81196581200001%;*width:65.7587743226383%}.row-fluid .span7{width:57.264957265%;*width:57.2117657756383%}.row-fluid .span6{width:48.717948718%;*width:48.6647572286383%}.row-fluid .span5{width:40.170940171000005%;*width:40.117748681638304%}.row-fluid .span4{width:31.623931624%;*width:31.5707401346383%}.row-fluid .span3{width:23.076923077%;*width:23.0237315876383%}.row-fluid .span2{width:14.529914530000001%;*width:14.4767230406383%}.row-fluid .span1{width:5.982905983%;*width:5.929714493638298%}input,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:1160px}input.span11,textarea.span11,.uneditable-input.span11{width:1060px}input.span10,textarea.span10,.uneditable-input.span10{width:960px}input.span9,textarea.span9,.uneditable-input.span9{width:860px}input.span8,textarea.span8,.uneditable-input.span8{width:760px}input.span7,textarea.span7,.uneditable-input.span7{width:660px}input.span6,textarea.span6,.uneditable-input.span6{width:560px}input.span5,textarea.span5,.uneditable-input.span5{width:460px}input.span4,textarea.span4,.uneditable-input.span4{width:360px}input.span3,textarea.span3,.uneditable-input.span3{width:260px}input.span2,textarea.span2,.uneditable-input.span2{width:160px}input.span1,textarea.span1,.uneditable-input.span1{width:60px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top{position:static;margin-bottom:18px}.navbar-fixed-top .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 9px}.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:#999;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:6px 15px;font-weight:bold;color:#999;-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:#222}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:block;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 .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:9px 15px;margin:9px 0;border-top:1px solid #222;border-bottom:1px solid #222;-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 .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}}
diff --git a/public/assets/plugins/mxgraph/styles/web/bootstrap.css b/public/assets/plugins/mxgraph/styles/web/bootstrap.css
new file mode 100644
index 0000000..09e2833
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/web/bootstrap.css
@@ -0,0 +1,4960 @@
+/*!
+ * Bootstrap v2.0.3
+ *
+ * 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 {
+  max-width: 100%;
+  vertical-align: middle;
+  border: 0;
+  -ms-interpolation-mode: bicubic;
+}
+
+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,
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  cursor: pointer;
+  -webkit-appearance: button;
+}
+
+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;
+}
+
+.clearfix {
+  *zoom: 1;
+}
+
+.clearfix:before,
+.clearfix:after {
+  display: table;
+  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: 28px;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+      -ms-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+body {
+  margin: 0;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 13px;
+  line-height: 18px;
+  color: #333333;
+  background-color: #ffffff;
+}
+
+a {
+  color: #0088cc;
+  text-decoration: none;
+}
+
+a:hover {
+  color: #005580;
+  text-decoration: underline;
+}
+
+.row {
+  margin-left: -20px;
+  *zoom: 1;
+}
+
+.row:before,
+.row:after {
+  display: table;
+  content: "";
+}
+
+.row:after {
+  clear: both;
+}
+
+[class*="span"] {
+  float: left;
+  margin-left: 20px;
+}
+
+.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;
+  content: "";
+}
+
+.row-fluid:after {
+  clear: both;
+}
+
+.row-fluid [class*="span"] {
+  display: block;
+  float: left;
+  width: 100%;
+  min-height: 28px;
+  margin-left: 2.127659574%;
+  *margin-left: 2.0744680846382977%;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+      -ms-box-sizing: border-box;
+          box-sizing: border-box;
+}
+
+.row-fluid [class*="span"]:first-child {
+  margin-left: 0;
+}
+
+.row-fluid .span12 {
+  width: 99.99999998999999%;
+  *width: 99.94680850063828%;
+}
+
+.row-fluid .span11 {
+  width: 91.489361693%;
+  *width: 91.4361702036383%;
+}
+
+.row-fluid .span10 {
+  width: 82.97872339599999%;
+  *width: 82.92553190663828%;
+}
+
+.row-fluid .span9 {
+  width: 74.468085099%;
+  *width: 74.4148936096383%;
+}
+
+.row-fluid .span8 {
+  width: 65.95744680199999%;
+  *width: 65.90425531263828%;
+}
+
+.row-fluid .span7 {
+  width: 57.446808505%;
+  *width: 57.3936170156383%;
+}
+
+.row-fluid .span6 {
+  width: 48.93617020799999%;
+  *width: 48.88297871863829%;
+}
+
+.row-fluid .span5 {
+  width: 40.425531911%;
+  *width: 40.3723404216383%;
+}
+
+.row-fluid .span4 {
+  width: 31.914893614%;
+  *width: 31.8617021246383%;
+}
+
+.row-fluid .span3 {
+  width: 23.404255317%;
+  *width: 23.3510638276383%;
+}
+
+.row-fluid .span2 {
+  width: 14.89361702%;
+  *width: 14.8404255306383%;
+}
+
+.row-fluid .span1 {
+  width: 6.382978723%;
+  *width: 6.329787233638298%;
+}
+
+.container {
+  margin-right: auto;
+  margin-left: auto;
+  *zoom: 1;
+}
+
+.container:before,
+.container:after {
+  display: table;
+  content: "";
+}
+
+.container:after {
+  clear: both;
+}
+
+.container-fluid {
+  padding-right: 20px;
+  padding-left: 20px;
+  *zoom: 1;
+}
+
+.container-fluid:before,
+.container-fluid:after {
+  display: table;
+  content: "";
+}
+
+.container-fluid:after {
+  clear: both;
+}
+
+p {
+  margin: 0 0 9px;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 13px;
+  line-height: 18px;
+}
+
+p small {
+  font-size: 11px;
+  color: #999999;
+}
+
+.lead {
+  margin-bottom: 18px;
+  font-size: 20px;
+  font-weight: 200;
+  line-height: 27px;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  margin: 0;
+  font-family: inherit;
+  font-weight: bold;
+  color: inherit;
+  text-rendering: optimizelegibility;
+}
+
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small {
+  font-weight: normal;
+  color: #999999;
+}
+
+h1 {
+  font-size: 30px;
+  line-height: 36px;
+}
+
+h1 small {
+  font-size: 18px;
+}
+
+h2 {
+  font-size: 24px;
+  line-height: 36px;
+}
+
+h2 small {
+  font-size: 18px;
+}
+
+h3 {
+  font-size: 18px;
+  line-height: 27px;
+}
+
+h3 small {
+  font-size: 14px;
+}
+
+h4,
+h5,
+h6 {
+  line-height: 18px;
+}
+
+h4 {
+  font-size: 14px;
+}
+
+h4 small {
+  font-size: 12px;
+}
+
+h5 {
+  font-size: 12px;
+}
+
+h6 {
+  font-size: 11px;
+  color: #999999;
+  text-transform: uppercase;
+}
+
+.page-header {
+  padding-bottom: 17px;
+  margin: 18px 0;
+  border-bottom: 1px solid #eeeeee;
+}
+
+.page-header h1 {
+  line-height: 1;
+}
+
+ul,
+ol {
+  padding: 0;
+  margin: 0 0 9px 25px;
+}
+
+ul ul,
+ul ol,
+ol ol,
+ol ul {
+  margin-bottom: 0;
+}
+
+ul {
+  list-style: disc;
+}
+
+ol {
+  list-style: decimal;
+}
+
+li {
+  line-height: 18px;
+}
+
+ul.unstyled,
+ol.unstyled {
+  margin-left: 0;
+  list-style: none;
+}
+
+dl {
+  margin-bottom: 18px;
+}
+
+dt,
+dd {
+  line-height: 18px;
+}
+
+dt {
+  font-weight: bold;
+  line-height: 17px;
+}
+
+dd {
+  margin-left: 9px;
+}
+
+.dl-horizontal dt {
+  float: left;
+  width: 120px;
+  overflow: hidden;
+  clear: left;
+  text-align: right;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+
+.dl-horizontal dd {
+  margin-left: 130px;
+}
+
+hr {
+  margin: 18px 0;
+  border: 0;
+  border-top: 1px solid #eeeeee;
+  border-bottom: 1px solid #ffffff;
+}
+
+strong {
+  font-weight: bold;
+}
+
+em {
+  font-style: italic;
+}
+
+.muted {
+  color: #999999;
+}
+
+abbr[title] {
+  cursor: help;
+  border-bottom: 1px dotted #ddd;
+}
+
+abbr.initialism {
+  font-size: 90%;
+  text-transform: uppercase;
+}
+
+blockquote {
+  padding: 0 0 0 15px;
+  margin: 0 0 18px;
+  border-left: 5px solid #eeeeee;
+}
+
+blockquote p {
+  margin-bottom: 0;
+  font-size: 16px;
+  font-weight: 300;
+  line-height: 22.5px;
+}
+
+blockquote small {
+  display: block;
+  line-height: 18px;
+  color: #999999;
+}
+
+blockquote small:before {
+  content: '\2014 \00A0';
+}
+
+blockquote.pull-right {
+  float: right;
+  padding-right: 15px;
+  padding-left: 0;
+  border-right: 5px solid #eeeeee;
+  border-left: 0;
+}
+
+blockquote.pull-right p,
+blockquote.pull-right small {
+  text-align: right;
+}
+
+q:before,
+q:after,
+blockquote:before,
+blockquote:after {
+  content: "";
+}
+
+address {
+  display: block;
+  margin-bottom: 18px;
+  font-style: normal;
+  line-height: 18px;
+}
+
+small {
+  font-size: 100%;
+}
+
+cite {
+  font-style: normal;
+}
+
+code,
+pre {
+  padding: 0 3px 2px;
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+  font-size: 12px;
+  color: #333333;
+  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+}
+
+code {
+  padding: 2px 4px;
+  color: #d14;
+  background-color: #f7f7f9;
+  border: 1px solid #e1e1e8;
+}
+
+pre {
+  display: block;
+  padding: 8.5px;
+  margin: 0 0 9px;
+  font-size: 12.025px;
+  line-height: 18px;
+  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: 18px;
+}
+
+pre code {
+  padding: 0;
+  color: inherit;
+  background-color: transparent;
+  border: 0;
+}
+
+.pre-scrollable {
+  max-height: 340px;
+  overflow-y: scroll;
+}
+
+form {
+  margin: 0 0 18px;
+}
+
+fieldset {
+  padding: 0;
+  margin: 0;
+  border: 0;
+}
+
+legend {
+  display: block;
+  width: 100%;
+  padding: 0;
+  margin-bottom: 27px;
+  font-size: 19.5px;
+  line-height: 36px;
+  color: #333333;
+  border: 0;
+  border-bottom: 1px solid #eee;
+}
+
+legend small {
+  font-size: 13.5px;
+  color: #999999;
+}
+
+label,
+input,
+button,
+select,
+textarea {
+  font-size: 13px;
+  font-weight: normal;
+  line-height: 18px;
+}
+
+input,
+button,
+select,
+textarea {
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+}
+
+label {
+  display: block;
+  margin-bottom: 5px;
+  color: #333333;
+}
+
+input,
+textarea,
+select,
+.uneditable-input {
+  display: inline-block;
+  width: 210px;
+  height: 18px;
+  padding: 4px;
+  margin-bottom: 9px;
+  font-size: 13px;
+  line-height: 18px;
+  color: #555555;
+  background-color: #ffffff;
+  border: 1px solid #cccccc;
+  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+}
+
+.uneditable-textarea {
+  width: auto;
+  height: auto;
+}
+
+label input,
+label textarea,
+label select {
+  display: block;
+}
+
+input[type="image"],
+input[type="checkbox"],
+input[type="radio"] {
+  width: auto;
+  height: auto;
+  padding: 0;
+  margin: 3px 0;
+  *margin-top: 0;
+  /* IE7 */
+
+  line-height: normal;
+  cursor: pointer;
+  background-color: transparent;
+  border: 0 \9;
+  /* IE9 and down */
+
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+input[type="image"] {
+  border: 0;
+}
+
+input[type="file"] {
+  width: auto;
+  padding: initial;
+  line-height: initial;
+  background-color: #ffffff;
+  background-color: initial;
+  border: initial;
+  -webkit-box-shadow: none;
+     -moz-box-shadow: none;
+          box-shadow: none;
+}
+
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  width: auto;
+  height: auto;
+}
+
+select,
+input[type="file"] {
+  height: 28px;
+  /* In IE7, the height of the select element cannot be changed by height, only font-size */
+
+  *margin-top: 4px;
+  /* For IE7, add top margin to align select with labels */
+
+  line-height: 28px;
+}
+
+input[type="file"] {
+  line-height: 18px \9;
+}
+
+select {
+  width: 220px;
+  background-color: #ffffff;
+}
+
+select[multiple],
+select[size] {
+  height: auto;
+}
+
+input[type="image"] {
+  -webkit-box-shadow: none;
+     -moz-box-shadow: none;
+          box-shadow: none;
+}
+
+textarea {
+  height: auto;
+}
+
+input[type="hidden"] {
+  display: none;
+}
+
+.radio,
+.checkbox {
+  min-height: 18px;
+  padding-left: 18px;
+}
+
+.radio input[type="radio"],
+.checkbox input[type="checkbox"] {
+  float: left;
+  margin-left: -18px;
+}
+
+.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,
+textarea {
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
+     -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
+      -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
+       -o-transition: border linear 0.2s, box-shadow linear 0.2s;
+          transition: border linear 0.2s, box-shadow linear 0.2s;
+}
+
+input:focus,
+textarea:focus {
+  border-color: rgba(82, 168, 236, 0.8);
+  outline: 0;
+  outline: thin dotted \9;
+  /* IE6-9 */
+
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+}
+
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus,
+select:focus {
+  outline: thin dotted #333;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+  -webkit-box-shadow: none;
+     -moz-box-shadow: none;
+          box-shadow: none;
+}
+
+.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,
+textarea,
+.uneditable-input {
+  margin-left: 0;
+}
+
+input.span12,
+textarea.span12,
+.uneditable-input.span12 {
+  width: 930px;
+}
+
+input.span11,
+textarea.span11,
+.uneditable-input.span11 {
+  width: 850px;
+}
+
+input.span10,
+textarea.span10,
+.uneditable-input.span10 {
+  width: 770px;
+}
+
+input.span9,
+textarea.span9,
+.uneditable-input.span9 {
+  width: 690px;
+}
+
+input.span8,
+textarea.span8,
+.uneditable-input.span8 {
+  width: 610px;
+}
+
+input.span7,
+textarea.span7,
+.uneditable-input.span7 {
+  width: 530px;
+}
+
+input.span6,
+textarea.span6,
+.uneditable-input.span6 {
+  width: 450px;
+}
+
+input.span5,
+textarea.span5,
+.uneditable-input.span5 {
+  width: 370px;
+}
+
+input.span4,
+textarea.span4,
+.uneditable-input.span4 {
+  width: 290px;
+}
+
+input.span3,
+textarea.span3,
+.uneditable-input.span3 {
+  width: 210px;
+}
+
+input.span2,
+textarea.span2,
+.uneditable-input.span2 {
+  width: 130px;
+}
+
+input.span1,
+textarea.span1,
+.uneditable-input.span1 {
+  width: 50px;
+}
+
+input[disabled],
+select[disabled],
+textarea[disabled],
+input[readonly],
+select[readonly],
+textarea[readonly] {
+  cursor: not-allowed;
+  background-color: #eeeeee;
+  border-color: #ddd;
+}
+
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+input[type="radio"][readonly],
+input[type="checkbox"][readonly] {
+  background-color: transparent;
+}
+
+.control-group.warning > label,
+.control-group.warning .help-block,
+.control-group.warning .help-inline {
+  color: #c09853;
+}
+
+.control-group.warning input,
+.control-group.warning select,
+.control-group.warning textarea {
+  color: #c09853;
+  border-color: #c09853;
+}
+
+.control-group.warning input:focus,
+.control-group.warning select:focus,
+.control-group.warning textarea:focus {
+  border-color: #a47e3c;
+  -webkit-box-shadow: 0 0 6px #dbc59e;
+     -moz-box-shadow: 0 0 6px #dbc59e;
+          box-shadow: 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 > label,
+.control-group.error .help-block,
+.control-group.error .help-inline {
+  color: #b94a48;
+}
+
+.control-group.error input,
+.control-group.error select,
+.control-group.error textarea {
+  color: #b94a48;
+  border-color: #b94a48;
+}
+
+.control-group.error input:focus,
+.control-group.error select:focus,
+.control-group.error textarea:focus {
+  border-color: #953b39;
+  -webkit-box-shadow: 0 0 6px #d59392;
+     -moz-box-shadow: 0 0 6px #d59392;
+          box-shadow: 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 > label,
+.control-group.success .help-block,
+.control-group.success .help-inline {
+  color: #468847;
+}
+
+.control-group.success input,
+.control-group.success select,
+.control-group.success textarea {
+  color: #468847;
+  border-color: #468847;
+}
+
+.control-group.success input:focus,
+.control-group.success select:focus,
+.control-group.success textarea:focus {
+  border-color: #356635;
+  -webkit-box-shadow: 0 0 6px #7aba7b;
+     -moz-box-shadow: 0 0 6px #7aba7b;
+          box-shadow: 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;
+}
+
+input:focus:required:invalid,
+textarea:focus:required:invalid,
+select:focus:required:invalid {
+  color: #b94a48;
+  border-color: #ee5f5b;
+}
+
+input:focus:required:invalid:focus,
+textarea:focus:required:invalid:focus,
+select:focus:required: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: 17px 20px 18px;
+  margin-top: 18px;
+  margin-bottom: 18px;
+  background-color: #f5f5f5;
+  border-top: 1px solid #ddd;
+  *zoom: 1;
+}
+
+.form-actions:before,
+.form-actions:after {
+  display: table;
+  content: "";
+}
+
+.form-actions:after {
+  clear: both;
+}
+
+.uneditable-input {
+  overflow: hidden;
+  white-space: nowrap;
+  cursor: not-allowed;
+  background-color: #ffffff;
+  border-color: #eee;
+  -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);
+}
+
+:-moz-placeholder {
+  color: #999999;
+}
+
+::-webkit-input-placeholder {
+  color: #999999;
+}
+
+.help-block,
+.help-inline {
+  color: #555555;
+}
+
+.help-block {
+  display: block;
+  margin-bottom: 9px;
+}
+
+.help-inline {
+  display: inline-block;
+  *display: inline;
+  padding-left: 5px;
+  vertical-align: middle;
+  *zoom: 1;
+}
+
+.input-prepend,
+.input-append {
+  margin-bottom: 5px;
+}
+
+.input-prepend input,
+.input-append input,
+.input-prepend select,
+.input-append select,
+.input-prepend .uneditable-input,
+.input-append .uneditable-input {
+  position: relative;
+  margin-bottom: 0;
+  *margin-left: 0;
+  vertical-align: middle;
+  -webkit-border-radius: 0 3px 3px 0;
+     -moz-border-radius: 0 3px 3px 0;
+          border-radius: 0 3px 3px 0;
+}
+
+.input-prepend input:focus,
+.input-append input:focus,
+.input-prepend select:focus,
+.input-append select:focus,
+.input-prepend .uneditable-input:focus,
+.input-append .uneditable-input:focus {
+  z-index: 2;
+}
+
+.input-prepend .uneditable-input,
+.input-append .uneditable-input {
+  border-left-color: #ccc;
+}
+
+.input-prepend .add-on,
+.input-append .add-on {
+  display: inline-block;
+  width: auto;
+  height: 18px;
+  min-width: 16px;
+  padding: 4px 5px;
+  font-weight: normal;
+  line-height: 18px;
+  text-align: center;
+  text-shadow: 0 1px 0 #ffffff;
+  vertical-align: middle;
+  background-color: #eeeeee;
+  border: 1px solid #ccc;
+}
+
+.input-prepend .add-on,
+.input-append .add-on,
+.input-prepend .btn,
+.input-append .btn {
+  margin-left: -1px;
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.input-prepend .active,
+.input-append .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: 3px 0 0 3px;
+     -moz-border-radius: 3px 0 0 3px;
+          border-radius: 3px 0 0 3px;
+}
+
+.input-append input,
+.input-append select,
+.input-append .uneditable-input {
+  -webkit-border-radius: 3px 0 0 3px;
+     -moz-border-radius: 3px 0 0 3px;
+          border-radius: 3px 0 0 3px;
+}
+
+.input-append .uneditable-input {
+  border-right-color: #ccc;
+  border-left-color: #eee;
+}
+
+.input-append .add-on:last-child,
+.input-append .btn:last-child {
+  -webkit-border-radius: 0 3px 3px 0;
+     -moz-border-radius: 0 3px 3px 0;
+          border-radius: 0 3px 3px 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 .add-on:first-child,
+.input-prepend.input-append .btn:first-child {
+  margin-right: -1px;
+  -webkit-border-radius: 3px 0 0 3px;
+     -moz-border-radius: 3px 0 0 3px;
+          border-radius: 3px 0 0 3px;
+}
+
+.input-prepend.input-append .add-on:last-child,
+.input-prepend.input-append .btn:last-child {
+  margin-left: -1px;
+  -webkit-border-radius: 0 3px 3px 0;
+     -moz-border-radius: 0 3px 3px 0;
+          border-radius: 0 3px 3px 0;
+}
+
+.search-query {
+  padding-right: 14px;
+  padding-right: 4px \9;
+  padding-left: 14px;
+  padding-left: 4px \9;
+  /* IE7-8 doesn't have border-radius, so don't indent the padding */
+
+  margin-bottom: 0;
+  -webkit-border-radius: 14px;
+     -moz-border-radius: 14px;
+          border-radius: 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;
+  *zoom: 1;
+}
+
+.form-search .hide,
+.form-inline .hide,
+.form-horizontal .hide {
+  display: none;
+}
+
+.form-search label,
+.form-inline label {
+  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: 9px;
+}
+
+legend + .control-group {
+  margin-top: 18px;
+  -webkit-margin-top-collapse: separate;
+}
+
+.form-horizontal .control-group {
+  margin-bottom: 18px;
+  *zoom: 1;
+}
+
+.form-horizontal .control-group:before,
+.form-horizontal .control-group:after {
+  display: table;
+  content: "";
+}
+
+.form-horizontal .control-group:after {
+  clear: both;
+}
+
+.form-horizontal .control-label {
+  float: left;
+  width: 140px;
+  padding-top: 5px;
+  text-align: right;
+}
+
+.form-horizontal .controls {
+  *display: inline-block;
+  *padding-left: 20px;
+  margin-left: 160px;
+  *margin-left: 0;
+}
+
+.form-horizontal .controls:first-child {
+  *padding-left: 160px;
+}
+
+.form-horizontal .help-block {
+  margin-top: 9px;
+  margin-bottom: 0;
+}
+
+.form-horizontal .form-actions {
+  padding-left: 160px;
+}
+
+table {
+  max-width: 100%;
+  background-color: transparent;
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+
+.table {
+  width: 100%;
+  margin-bottom: 18px;
+}
+
+.table th,
+.table td {
+  padding: 8px;
+  line-height: 18px;
+  text-align: left;
+  vertical-align: top;
+  border-top: 1px solid #dddddd;
+}
+
+.table th {
+  font-weight: bold;
+}
+
+.table thead th {
+  vertical-align: bottom;
+}
+
+.table caption + thead tr:first-child th,
+.table caption + thead tr:first-child td,
+.table colgroup + thead tr:first-child th,
+.table colgroup + thead tr:first-child td,
+.table thead:first-child tr:first-child th,
+.table thead:first-child tr:first-child td {
+  border-top: 0;
+}
+
+.table tbody + tbody {
+  border-top: 2px solid #dddddd;
+}
+
+.table-condensed th,
+.table-condensed td {
+  padding: 4px 5px;
+}
+
+.table-bordered {
+  border: 1px solid #dddddd;
+  border-collapse: separate;
+  *border-collapse: collapsed;
+  border-left: 0;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+}
+
+.table-bordered th,
+.table-bordered td {
+  border-left: 1px solid #dddddd;
+}
+
+.table-bordered caption + thead tr:first-child th,
+.table-bordered caption + tbody tr:first-child th,
+.table-bordered caption + tbody tr:first-child td,
+.table-bordered colgroup + thead tr:first-child th,
+.table-bordered colgroup + tbody tr:first-child th,
+.table-bordered colgroup + tbody tr:first-child td,
+.table-bordered thead:first-child tr:first-child th,
+.table-bordered tbody:first-child tr:first-child th,
+.table-bordered tbody:first-child tr:first-child td {
+  border-top: 0;
+}
+
+.table-bordered thead:first-child tr:first-child th:first-child,
+.table-bordered tbody:first-child tr:first-child td:first-child {
+  -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 {
+  -webkit-border-radius: 0 0 0 4px;
+     -moz-border-radius: 0 0 0 4px;
+          border-radius: 0 0 0 4px;
+  -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 {
+  -webkit-border-bottom-right-radius: 4px;
+          border-bottom-right-radius: 4px;
+  -moz-border-radius-bottomright: 4px;
+}
+
+.table-striped tbody tr:nth-child(odd) td,
+.table-striped tbody tr:nth-child(odd) th {
+  background-color: #f9f9f9;
+}
+
+.table tbody tr:hover td,
+.table tbody tr:hover th {
+  background-color: #f5f5f5;
+}
+
+table .span1 {
+  float: none;
+  width: 44px;
+  margin-left: 0;
+}
+
+table .span2 {
+  float: none;
+  width: 124px;
+  margin-left: 0;
+}
+
+table .span3 {
+  float: none;
+  width: 204px;
+  margin-left: 0;
+}
+
+table .span4 {
+  float: none;
+  width: 284px;
+  margin-left: 0;
+}
+
+table .span5 {
+  float: none;
+  width: 364px;
+  margin-left: 0;
+}
+
+table .span6 {
+  float: none;
+  width: 444px;
+  margin-left: 0;
+}
+
+table .span7 {
+  float: none;
+  width: 524px;
+  margin-left: 0;
+}
+
+table .span8 {
+  float: none;
+  width: 604px;
+  margin-left: 0;
+}
+
+table .span9 {
+  float: none;
+  width: 684px;
+  margin-left: 0;
+}
+
+table .span10 {
+  float: none;
+  width: 764px;
+  margin-left: 0;
+}
+
+table .span11 {
+  float: none;
+  width: 844px;
+  margin-left: 0;
+}
+
+table .span12 {
+  float: none;
+  width: 924px;
+  margin-left: 0;
+}
+
+table .span13 {
+  float: none;
+  width: 1004px;
+  margin-left: 0;
+}
+
+table .span14 {
+  float: none;
+  width: 1084px;
+  margin-left: 0;
+}
+
+table .span15 {
+  float: none;
+  width: 1164px;
+  margin-left: 0;
+}
+
+table .span16 {
+  float: none;
+  width: 1244px;
+  margin-left: 0;
+}
+
+table .span17 {
+  float: none;
+  width: 1324px;
+  margin-left: 0;
+}
+
+table .span18 {
+  float: none;
+  width: 1404px;
+  margin-left: 0;
+}
+
+table .span19 {
+  float: none;
+  width: 1484px;
+  margin-left: 0;
+}
+
+table .span20 {
+  float: none;
+  width: 1564px;
+  margin-left: 0;
+}
+
+table .span21 {
+  float: none;
+  width: 1644px;
+  margin-left: 0;
+}
+
+table .span22 {
+  float: none;
+  width: 1724px;
+  margin-left: 0;
+}
+
+table .span23 {
+  float: none;
+  width: 1804px;
+  margin-left: 0;
+}
+
+table .span24 {
+  float: none;
+  width: 1884px;
+  margin-left: 0;
+}
+
+[class^="icon-"],
+[class*=" icon-"] {
+  display: inline-block;
+  width: 14px;
+  height: 14px;
+  *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;
+}
+
+[class^="icon-"]:last-child,
+[class*=" icon-"]:last-child {
+  *margin-left: 0;
+}
+
+.icon-white {
+  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 {
+  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 {
+  background-position: -408px -120px;
+}
+
+.icon-resize-vertical {
+  background-position: -432px -119px;
+}
+
+.icon-resize-horizontal {
+  background-position: -456px -118px;
+}
+
+.icon-hdd {
+  background-position: 0 -144px;
+}
+
+.icon-bullhorn {
+  background-position: -24px -144px;
+}
+
+.icon-bell {
+  background-position: -48px -144px;
+}
+
+.icon-certificate {
+  background-position: -72px -144px;
+}
+
+.icon-thumbs-up {
+  background-position: -96px -144px;
+}
+
+.icon-thumbs-down {
+  background-position: -120px -144px;
+}
+
+.icon-hand-right {
+  background-position: -144px -144px;
+}
+
+.icon-hand-left {
+  background-position: -168px -144px;
+}
+
+.icon-hand-up {
+  background-position: -192px -144px;
+}
+
+.icon-hand-down {
+  background-position: -216px -144px;
+}
+
+.icon-circle-arrow-right {
+  background-position: -240px -144px;
+}
+
+.icon-circle-arrow-left {
+  background-position: -264px -144px;
+}
+
+.icon-circle-arrow-up {
+  background-position: -288px -144px;
+}
+
+.icon-circle-arrow-down {
+  background-position: -312px -144px;
+}
+
+.icon-globe {
+  background-position: -336px -144px;
+}
+
+.icon-wrench {
+  background-position: -360px -144px;
+}
+
+.icon-tasks {
+  background-position: -384px -144px;
+}
+
+.icon-filter {
+  background-position: -408px -144px;
+}
+
+.icon-briefcase {
+  background-position: -432px -144px;
+}
+
+.icon-fullscreen {
+  background-position: -456px -144px;
+}
+
+.dropup,
+.dropdown {
+  position: relative;
+}
+
+.dropdown-toggle {
+  *margin-bottom: -3px;
+}
+
+.dropdown-toggle:active,
+.open .dropdown-toggle {
+  outline: 0;
+}
+
+.caret {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  vertical-align: top;
+  border-top: 4px solid #000000;
+  border-right: 4px solid transparent;
+  border-left: 4px solid transparent;
+  content: "";
+  opacity: 0.3;
+  filter: alpha(opacity=30);
+}
+
+.dropdown .caret {
+  margin-top: 8px;
+  margin-left: 2px;
+}
+
+.dropdown:hover .caret,
+.open .caret {
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+
+.dropdown-menu {
+  position: absolute;
+  top: 100%;
+  left: 0;
+  z-index: 1000;
+  display: none;
+  float: left;
+  min-width: 160px;
+  padding: 4px 0;
+  margin: 1px 0 0;
+  list-style: none;
+  background-color: #ffffff;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  *border-right-width: 2px;
+  *border-bottom-width: 2px;
+  -webkit-border-radius: 5px;
+     -moz-border-radius: 5px;
+          border-radius: 5px;
+  -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: 8px 1px;
+  *margin: -5px 0 5px;
+  overflow: hidden;
+  background-color: #e5e5e5;
+  border-bottom: 1px solid #ffffff;
+}
+
+.dropdown-menu a {
+  display: block;
+  padding: 3px 15px;
+  clear: both;
+  font-weight: normal;
+  line-height: 18px;
+  color: #333333;
+  white-space: nowrap;
+}
+
+.dropdown-menu li > a:hover,
+.dropdown-menu .active > a,
+.dropdown-menu .active > a:hover {
+  color: #ffffff;
+  text-decoration: none;
+  background-color: #0088cc;
+}
+
+.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 #000000;
+  content: "\2191";
+}
+
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+  top: auto;
+  bottom: 100%;
+  margin-bottom: 1px;
+}
+
+.typeahead {
+  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 #eee;
+  border: 1px solid rgba(0, 0, 0, 0.05);
+  -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;
+  filter: alpha(opacity=0);
+  -webkit-transition: opacity 0.15s linear;
+     -moz-transition: opacity 0.15s linear;
+      -ms-transition: opacity 0.15s linear;
+       -o-transition: opacity 0.15s linear;
+          transition: opacity 0.15s linear;
+}
+
+.fade.in {
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+
+.collapse {
+  position: relative;
+  height: 0;
+  overflow: hidden;
+  -webkit-transition: height 0.35s ease;
+     -moz-transition: height 0.35s ease;
+      -ms-transition: height 0.35s ease;
+       -o-transition: height 0.35s ease;
+          transition: height 0.35s ease;
+}
+
+.collapse.in {
+  height: auto;
+}
+
+.close {
+  float: right;
+  font-size: 20px;
+  font-weight: bold;
+  line-height: 18px;
+  color: #000000;
+  text-shadow: 0 1px 0 #ffffff;
+  opacity: 0.2;
+  filter: alpha(opacity=20);
+}
+
+.close:hover {
+  color: #000000;
+  text-decoration: none;
+  cursor: pointer;
+  opacity: 0.4;
+  filter: alpha(opacity=40);
+}
+
+button.close {
+  padding: 0;
+  cursor: pointer;
+  background: transparent;
+  border: 0;
+  -webkit-appearance: none;
+}
+
+.btn {
+  display: inline-block;
+  *display: inline;
+  padding: 4px 10px 4px;
+  margin-bottom: 0;
+  *margin-left: .3em;
+  font-size: 13px;
+  line-height: 18px;
+  *line-height: 20px;
+  color: #333333;
+  text-align: center;
+  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
+  vertical-align: middle;
+  cursor: pointer;
+  background-color: #f5f5f5;
+  *background-color: #e6e6e6;
+  background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
+  background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
+  background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
+  background-image: linear-gradient(top, #ffffff, #e6e6e6);
+  background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
+  background-repeat: repeat-x;
+  border: 1px solid #cccccc;
+  *border: 0;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  border-color: #e6e6e6 #e6e6e6 #bfbfbf;
+  border-bottom-color: #b3b3b3;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', 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] {
+  background-color: #e6e6e6;
+  *background-color: #d9d9d9;
+}
+
+.btn:active,
+.btn.active {
+  background-color: #cccccc \9;
+}
+
+.btn:first-child {
+  *margin-left: 0;
+}
+
+.btn:hover {
+  color: #333333;
+  text-decoration: none;
+  background-color: #e6e6e6;
+  *background-color: #d9d9d9;
+  /* Buttons in IE7 don't get borders, so darken on hover */
+
+  background-position: 0 -15px;
+  -webkit-transition: background-position 0.1s linear;
+     -moz-transition: background-position 0.1s linear;
+      -ms-transition: background-position 0.1s linear;
+       -o-transition: background-position 0.1s linear;
+          transition: background-position 0.1s linear;
+}
+
+.btn:focus {
+  outline: thin dotted #333;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+
+.btn.active,
+.btn:active {
+  background-color: #e6e6e6;
+  background-color: #d9d9d9 \9;
+  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-color: #e6e6e6;
+  background-image: none;
+  opacity: 0.65;
+  filter: alpha(opacity=65);
+  -webkit-box-shadow: none;
+     -moz-box-shadow: none;
+          box-shadow: none;
+}
+
+.btn-large {
+  padding: 9px 14px;
+  font-size: 15px;
+  line-height: normal;
+  -webkit-border-radius: 5px;
+     -moz-border-radius: 5px;
+          border-radius: 5px;
+}
+
+.btn-large [class^="icon-"] {
+  margin-top: 1px;
+}
+
+.btn-small {
+  padding: 5px 9px;
+  font-size: 11px;
+  line-height: 16px;
+}
+
+.btn-small [class^="icon-"] {
+  margin-top: -1px;
+}
+
+.btn-mini {
+  padding: 2px 6px;
+  font-size: 11px;
+  line-height: 14px;
+}
+
+.btn-primary,
+.btn-primary:hover,
+.btn-warning,
+.btn-warning:hover,
+.btn-danger,
+.btn-danger:hover,
+.btn-success,
+.btn-success:hover,
+.btn-info,
+.btn-info:hover,
+.btn-inverse,
+.btn-inverse:hover {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+
+.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: #ccc;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+}
+
+.btn-primary {
+  background-color: #0074cc;
+  *background-color: #0055cc;
+  background-image: -ms-linear-gradient(top, #0088cc, #0055cc);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc));
+  background-image: -webkit-linear-gradient(top, #0088cc, #0055cc);
+  background-image: -o-linear-gradient(top, #0088cc, #0055cc);
+  background-image: -moz-linear-gradient(top, #0088cc, #0055cc);
+  background-image: linear-gradient(top, #0088cc, #0055cc);
+  background-repeat: repeat-x;
+  border-color: #0055cc #0055cc #003580;
+  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='#0088cc', endColorstr='#0055cc', GradientType=0);
+  filter: progid:dximagetransform.microsoft.gradient(enabled=false);
+}
+
+.btn-primary:hover,
+.btn-primary:active,
+.btn-primary.active,
+.btn-primary.disabled,
+.btn-primary[disabled] {
+  background-color: #0055cc;
+  *background-color: #004ab3;
+}
+
+.btn-primary:active,
+.btn-primary.active {
+  background-color: #004099 \9;
+}
+
+.btn-warning {
+  background-color: #faa732;
+  *background-color: #f89406;
+  background-image: -ms-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: -moz-linear-gradient(top, #fbb450, #f89406);
+  background-image: linear-gradient(top, #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='#fbb450', endColorstr='#f89406', GradientType=0);
+  filter: progid:dximagetransform.microsoft.gradient(enabled=false);
+}
+
+.btn-warning:hover,
+.btn-warning:active,
+.btn-warning.active,
+.btn-warning.disabled,
+.btn-warning[disabled] {
+  background-color: #f89406;
+  *background-color: #df8505;
+}
+
+.btn-warning:active,
+.btn-warning.active {
+  background-color: #c67605 \9;
+}
+
+.btn-danger {
+  background-color: #da4f49;
+  *background-color: #bd362f;
+  background-image: -ms-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: -moz-linear-gradient(top, #ee5f5b, #bd362f);
+  background-image: linear-gradient(top, #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='#ee5f5b', endColorstr='#bd362f', GradientType=0);
+  filter: progid:dximagetransform.microsoft.gradient(enabled=false);
+}
+
+.btn-danger:hover,
+.btn-danger:active,
+.btn-danger.active,
+.btn-danger.disabled,
+.btn-danger[disabled] {
+  background-color: #bd362f;
+  *background-color: #a9302a;
+}
+
+.btn-danger:active,
+.btn-danger.active {
+  background-color: #942a25 \9;
+}
+
+.btn-success {
+  background-color: #5bb75b;
+  *background-color: #51a351;
+  background-image: -ms-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: -moz-linear-gradient(top, #62c462, #51a351);
+  background-image: linear-gradient(top, #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='#62c462', endColorstr='#51a351', GradientType=0);
+  filter: progid:dximagetransform.microsoft.gradient(enabled=false);
+}
+
+.btn-success:hover,
+.btn-success:active,
+.btn-success.active,
+.btn-success.disabled,
+.btn-success[disabled] {
+  background-color: #51a351;
+  *background-color: #499249;
+}
+
+.btn-success:active,
+.btn-success.active {
+  background-color: #408140 \9;
+}
+
+.btn-info {
+  background-color: #49afcd;
+  *background-color: #2f96b4;
+  background-image: -ms-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: -moz-linear-gradient(top, #5bc0de, #2f96b4);
+  background-image: linear-gradient(top, #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='#5bc0de', endColorstr='#2f96b4', GradientType=0);
+  filter: progid:dximagetransform.microsoft.gradient(enabled=false);
+}
+
+.btn-info:hover,
+.btn-info:active,
+.btn-info.active,
+.btn-info.disabled,
+.btn-info[disabled] {
+  background-color: #2f96b4;
+  *background-color: #2a85a0;
+}
+
+.btn-info:active,
+.btn-info.active {
+  background-color: #24748c \9;
+}
+
+.btn-inverse {
+  background-color: #414141;
+  *background-color: #222222;
+  background-image: -ms-linear-gradient(top, #555555, #222222);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));
+  background-image: -webkit-linear-gradient(top, #555555, #222222);
+  background-image: -o-linear-gradient(top, #555555, #222222);
+  background-image: -moz-linear-gradient(top, #555555, #222222);
+  background-image: linear-gradient(top, #555555, #222222);
+  background-repeat: repeat-x;
+  border-color: #222222 #222222 #000000;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);
+  filter: progid:dximagetransform.microsoft.gradient(enabled=false);
+}
+
+.btn-inverse:hover,
+.btn-inverse:active,
+.btn-inverse.active,
+.btn-inverse.disabled,
+.btn-inverse[disabled] {
+  background-color: #222222;
+  *background-color: #151515;
+}
+
+.btn-inverse:active,
+.btn-inverse.active {
+  background-color: #080808 \9;
+}
+
+button.btn,
+input[type="submit"].btn {
+  *padding-top: 2px;
+  *padding-bottom: 2px;
+}
+
+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-group {
+  position: relative;
+  *margin-left: .3em;
+  *zoom: 1;
+}
+
+.btn-group:before,
+.btn-group:after {
+  display: table;
+  content: "";
+}
+
+.btn-group:after {
+  clear: both;
+}
+
+.btn-group:first-child {
+  *margin-left: 0;
+}
+
+.btn-group + .btn-group {
+  margin-left: 5px;
+}
+
+.btn-toolbar {
+  margin-top: 9px;
+  margin-bottom: 9px;
+}
+
+.btn-toolbar .btn-group {
+  display: inline-block;
+  *display: inline;
+  /* IE7 inline-block hack */
+
+  *zoom: 1;
+}
+
+.btn-group > .btn {
+  position: relative;
+  float: left;
+  margin-left: -1px;
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.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 > .dropdown-toggle {
+  *padding-top: 4px;
+  padding-right: 8px;
+  *padding-bottom: 4px;
+  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-right: 5px;
+  padding-left: 5px;
+}
+
+.btn-group > .btn-small.dropdown-toggle {
+  *padding-top: 4px;
+  *padding-bottom: 4px;
+}
+
+.btn-group > .btn-large.dropdown-toggle {
+  padding-right: 12px;
+  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: #0055cc;
+}
+
+.btn-group.open .btn-warning.dropdown-toggle {
+  background-color: #f89406;
+}
+
+.btn-group.open .btn-danger.dropdown-toggle {
+  background-color: #bd362f;
+}
+
+.btn-group.open .btn-success.dropdown-toggle {
+  background-color: #51a351;
+}
+
+.btn-group.open .btn-info.dropdown-toggle {
+  background-color: #2f96b4;
+}
+
+.btn-group.open .btn-inverse.dropdown-toggle {
+  background-color: #222222;
+}
+
+.btn .caret {
+  margin-top: 7px;
+  margin-left: 0;
+}
+
+.btn:hover .caret,
+.open.btn-group .caret {
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+
+.btn-mini .caret {
+  margin-top: 5px;
+}
+
+.btn-small .caret {
+  margin-top: 6px;
+}
+
+.btn-large .caret {
+  margin-top: 6px;
+  border-top-width: 5px;
+  border-right-width: 5px;
+  border-left-width: 5px;
+}
+
+.dropup .btn-large .caret {
+  border-top: 0;
+  border-bottom: 5px solid #000000;
+}
+
+.btn-primary .caret,
+.btn-warning .caret,
+.btn-danger .caret,
+.btn-info .caret,
+.btn-success .caret,
+.btn-inverse .caret {
+  border-top-color: #ffffff;
+  border-bottom-color: #ffffff;
+  opacity: 0.75;
+  filter: alpha(opacity=75);
+}
+
+.alert {
+  padding: 8px 35px 8px 14px;
+  margin-bottom: 18px;
+  color: #c09853;
+  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-heading {
+  color: inherit;
+}
+
+.alert .close {
+  position: relative;
+  top: -2px;
+  right: -21px;
+  line-height: 18px;
+}
+
+.alert-success {
+  color: #468847;
+  background-color: #dff0d8;
+  border-color: #d6e9c6;
+}
+
+.alert-danger,
+.alert-error {
+  color: #b94a48;
+  background-color: #f2dede;
+  border-color: #eed3d7;
+}
+
+.alert-info {
+  color: #3a87ad;
+  background-color: #d9edf7;
+  border-color: #bce8f1;
+}
+
+.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: 18px;
+  margin-left: 0;
+  list-style: none;
+}
+
+.nav > li > a {
+  display: block;
+}
+
+.nav > li > a:hover {
+  text-decoration: none;
+  background-color: #eeeeee;
+}
+
+.nav > .pull-right {
+  float: right;
+}
+
+.nav .nav-header {
+  display: block;
+  padding: 3px 15px;
+  font-size: 11px;
+  font-weight: bold;
+  line-height: 18px;
+  color: #999999;
+  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+  text-transform: uppercase;
+}
+
+.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: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
+  background-color: #0088cc;
+}
+
+.nav-list [class^="icon-"] {
+  margin-right: 2px;
+}
+
+.nav-list .divider {
+  *width: 100%;
+  height: 1px;
+  margin: 8px 1px;
+  *margin: -5px 0 5px;
+  overflow: hidden;
+  background-color: #e5e5e5;
+  border-bottom: 1px solid #ffffff;
+}
+
+.nav-tabs,
+.nav-pills {
+  *zoom: 1;
+}
+
+.nav-tabs:before,
+.nav-pills:before,
+.nav-tabs:after,
+.nav-pills:after {
+  display: table;
+  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: 18px;
+  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: #eeeeee #eeeeee #dddddd;
+}
+
+.nav-tabs > .active > a,
+.nav-tabs > .active > a:hover {
+  color: #555555;
+  cursor: default;
+  background-color: #ffffff;
+  border: 1px solid #ddd;
+  border-bottom-color: transparent;
+}
+
+.nav-pills > li > a {
+  padding-top: 8px;
+  padding-bottom: 8px;
+  margin-top: 2px;
+  margin-bottom: 2px;
+  -webkit-border-radius: 5px;
+     -moz-border-radius: 5px;
+          border-radius: 5px;
+}
+
+.nav-pills > .active > a,
+.nav-pills > .active > a:hover {
+  color: #ffffff;
+  background-color: #0088cc;
+}
+
+.nav-stacked > li {
+  float: none;
+}
+
+.nav-stacked > li > a {
+  margin-right: 0;
+}
+
+.nav-tabs.nav-stacked {
+  border-bottom: 0;
+}
+
+.nav-tabs.nav-stacked > li > a {
+  border: 1px solid #ddd;
+  -webkit-border-radius: 0;
+     -moz-border-radius: 0;
+          border-radius: 0;
+}
+
+.nav-tabs.nav-stacked > li:first-child > a {
+  -webkit-border-radius: 4px 4px 0 0;
+     -moz-border-radius: 4px 4px 0 0;
+          border-radius: 4px 4px 0 0;
+}
+
+.nav-tabs.nav-stacked > li:last-child > a {
+  -webkit-border-radius: 0 0 4px 4px;
+     -moz-border-radius: 0 0 4px 4px;
+          border-radius: 0 0 4px 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 5px 5px;
+     -moz-border-radius: 0 0 5px 5px;
+          border-radius: 0 0 5px 5px;
+}
+
+.nav-pills .dropdown-menu {
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+}
+
+.nav-tabs .dropdown-toggle .caret,
+.nav-pills .dropdown-toggle .caret {
+  margin-top: 6px;
+  border-top-color: #0088cc;
+  border-bottom-color: #0088cc;
+}
+
+.nav-tabs .dropdown-toggle:hover .caret,
+.nav-pills .dropdown-toggle:hover .caret {
+  border-top-color: #005580;
+  border-bottom-color: #005580;
+}
+
+.nav-tabs .active .dropdown-toggle .caret,
+.nav-pills .active .dropdown-toggle .caret {
+  border-top-color: #333333;
+  border-bottom-color: #333333;
+}
+
+.nav > .dropdown.active > a:hover {
+  color: #000000;
+  cursor: pointer;
+}
+
+.nav-tabs .open .dropdown-toggle,
+.nav-pills .open .dropdown-toggle,
+.nav > li.dropdown.open.active > a:hover {
+  color: #ffffff;
+  background-color: #999999;
+  border-color: #999999;
+}
+
+.nav li.dropdown.open .caret,
+.nav li.dropdown.open.active .caret,
+.nav li.dropdown.open a:hover .caret {
+  border-top-color: #ffffff;
+  border-bottom-color: #ffffff;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+
+.tabs-stacked .open > a:hover {
+  border-color: #999999;
+}
+
+.tabbable {
+  *zoom: 1;
+}
+
+.tabbable:before,
+.tabbable:after {
+  display: table;
+  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: #eeeeee #dddddd #eeeeee #eeeeee;
+}
+
+.tabs-left > .nav-tabs .active > a,
+.tabs-left > .nav-tabs .active > a:hover {
+  border-color: #ddd transparent #ddd #ddd;
+  *border-right-color: #ffffff;
+}
+
+.tabs-right > .nav-tabs {
+  float: right;
+  margin-left: 19px;
+  border-left: 1px solid #ddd;
+}
+
+.tabs-right > .nav-tabs > li > a {
+  margin-left: -1px;
+  -webkit-border-radius: 0 4px 4px 0;
+     -moz-border-radius: 0 4px 4px 0;
+          border-radius: 0 4px 4px 0;
+}
+
+.tabs-right > .nav-tabs > li > a:hover {
+  border-color: #eeeeee #eeeeee #eeeeee #dddddd;
+}
+
+.tabs-right > .nav-tabs .active > a,
+.tabs-right > .nav-tabs .active > a:hover {
+  border-color: #ddd #ddd #ddd transparent;
+  *border-left-color: #ffffff;
+}
+
+.navbar {
+  *position: relative;
+  *z-index: 2;
+  margin-bottom: 18px;
+  overflow: visible;
+}
+
+.navbar-inner {
+  min-height: 40px;
+  padding-right: 20px;
+  padding-left: 20px;
+  background-color: #2c2c2c;
+  background-image: -moz-linear-gradient(top, #333333, #222222);
+  background-image: -ms-linear-gradient(top, #333333, #222222);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
+  background-image: -webkit-linear-gradient(top, #333333, #222222);
+  background-image: -o-linear-gradient(top, #333333, #222222);
+  background-image: linear-gradient(top, #333333, #222222);
+  background-repeat: repeat-x;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
+  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+     -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+}
+
+.navbar .container {
+  width: auto;
+}
+
+.nav-collapse.collapse {
+  height: auto;
+}
+
+.navbar {
+  color: #999999;
+}
+
+.navbar .brand:hover {
+  text-decoration: none;
+}
+
+.navbar .brand {
+  display: block;
+  float: left;
+  padding: 8px 20px 12px;
+  margin-left: -20px;
+  font-size: 20px;
+  font-weight: 200;
+  line-height: 1;
+  color: #999999;
+}
+
+.navbar .navbar-text {
+  margin-bottom: 0;
+  line-height: 40px;
+}
+
+.navbar .navbar-link {
+  color: #999999;
+}
+
+.navbar .navbar-link:hover {
+  color: #ffffff;
+}
+
+.navbar .btn,
+.navbar .btn-group {
+  margin-top: 5px;
+}
+
+.navbar .btn-group .btn {
+  margin: 0;
+}
+
+.navbar-form {
+  margin-bottom: 0;
+  *zoom: 1;
+}
+
+.navbar-form:before,
+.navbar-form:after {
+  display: table;
+  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 {
+  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: 6px;
+  white-space: nowrap;
+}
+
+.navbar-form .input-append input,
+.navbar-form .input-prepend input {
+  margin-top: 0;
+}
+
+.navbar-search {
+  position: relative;
+  float: left;
+  margin-top: 6px;
+  margin-bottom: 0;
+}
+
+.navbar-search .search-query {
+  padding: 4px 9px;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 13px;
+  font-weight: normal;
+  line-height: 1;
+  color: #ffffff;
+  background-color: #626262;
+  border: 1px solid #151515;
+  -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;
+      -ms-transition: none;
+       -o-transition: none;
+          transition: none;
+}
+
+.navbar-search .search-query:-moz-placeholder {
+  color: #cccccc;
+}
+
+.navbar-search .search-query::-webkit-input-placeholder {
+  color: #cccccc;
+}
+
+.navbar-search .search-query:focus,
+.navbar-search .search-query.focused {
+  padding: 5px 10px;
+  color: #333333;
+  text-shadow: 0 1px 0 #ffffff;
+  background-color: #ffffff;
+  border: 0;
+  outline: 0;
+  -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+     -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+          box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+}
+
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+  position: fixed;
+  right: 0;
+  left: 0;
+  z-index: 1030;
+  margin-bottom: 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-fixed-top .container,
+.navbar-fixed-bottom .container {
+  width: 940px;
+}
+
+.navbar-fixed-top {
+  top: 0;
+}
+
+.navbar-fixed-bottom {
+  bottom: 0;
+}
+
+.navbar .nav {
+  position: relative;
+  left: 0;
+  display: block;
+  float: left;
+  margin: 0 10px 0 0;
+}
+
+.navbar .nav.pull-right {
+  float: right;
+}
+
+.navbar .nav > li {
+  display: block;
+  float: left;
+}
+
+.navbar .nav > li > a {
+  float: none;
+  padding: 9px 10px 11px;
+  line-height: 19px;
+  color: #999999;
+  text-decoration: none;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+
+.navbar .btn {
+  display: inline-block;
+  padding: 4px 10px 4px;
+  margin: 5px 5px 6px;
+  line-height: 18px;
+}
+
+.navbar .btn-group {
+  padding: 5px 5px 6px;
+  margin: 0;
+}
+
+.navbar .nav > li > a:hover {
+  color: #ffffff;
+  text-decoration: none;
+  background-color: transparent;
+}
+
+.navbar .nav .active > a,
+.navbar .nav .active > a:hover {
+  color: #ffffff;
+  text-decoration: none;
+  background-color: #222222;
+}
+
+.navbar .divider-vertical {
+  width: 1px;
+  height: 40px;
+  margin: 0 9px;
+  overflow: hidden;
+  background-color: #222222;
+  border-right: 1px solid #333333;
+}
+
+.navbar .nav.pull-right {
+  margin-right: 0;
+  margin-left: 10px;
+}
+
+.navbar .btn-navbar {
+  display: none;
+  float: right;
+  padding: 7px 10px;
+  margin-right: 5px;
+  margin-left: 5px;
+  background-color: #2c2c2c;
+  *background-color: #222222;
+  background-image: -ms-linear-gradient(top, #333333, #222222);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
+  background-image: -webkit-linear-gradient(top, #333333, #222222);
+  background-image: -o-linear-gradient(top, #333333, #222222);
+  background-image: linear-gradient(top, #333333, #222222);
+  background-image: -moz-linear-gradient(top, #333333, #222222);
+  background-repeat: repeat-x;
+  border-color: #222222 #222222 #000000;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#333333', endColorstr='#222222', 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] {
+  background-color: #222222;
+  *background-color: #151515;
+}
+
+.navbar .btn-navbar:active,
+.navbar .btn-navbar.active {
+  background-color: #080808 \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 .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 .dropdown-menu:after {
+  position: absolute;
+  top: -6px;
+  left: 10px;
+  display: inline-block;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #ffffff;
+  border-left: 6px solid transparent;
+  content: '';
+}
+
+.navbar-fixed-bottom .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 .dropdown-menu:after {
+  top: auto;
+  bottom: -6px;
+  border-top: 6px solid #ffffff;
+  border-bottom: 0;
+}
+
+.navbar .nav li.dropdown .dropdown-toggle .caret,
+.navbar .nav li.dropdown.open .caret {
+  border-top-color: #ffffff;
+  border-bottom-color: #ffffff;
+}
+
+.navbar .nav li.dropdown.active .caret {
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+
+.navbar .nav li.dropdown.open > .dropdown-toggle,
+.navbar .nav li.dropdown.active > .dropdown-toggle,
+.navbar .nav li.dropdown.open.active > .dropdown-toggle {
+  background-color: transparent;
+}
+
+.navbar .nav li.dropdown.active > .dropdown-toggle:hover {
+  color: #ffffff;
+}
+
+.navbar .pull-right .dropdown-menu,
+.navbar .dropdown-menu.pull-right {
+  right: 0;
+  left: auto;
+}
+
+.navbar .pull-right .dropdown-menu:before,
+.navbar .dropdown-menu.pull-right:before {
+  right: 12px;
+  left: auto;
+}
+
+.navbar .pull-right .dropdown-menu:after,
+.navbar .dropdown-menu.pull-right:after {
+  right: 13px;
+  left: auto;
+}
+
+.breadcrumb {
+  padding: 7px 14px;
+  margin: 0 0 18px;
+  list-style: none;
+  background-color: #fbfbfb;
+  background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);
+  background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));
+  background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);
+  background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);
+  background-image: linear-gradient(top, #ffffff, #f5f5f5);
+  background-repeat: repeat-x;
+  border: 1px solid #ddd;
+  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);
+  -webkit-box-shadow: inset 0 1px 0 #ffffff;
+     -moz-box-shadow: inset 0 1px 0 #ffffff;
+          box-shadow: inset 0 1px 0 #ffffff;
+}
+
+.breadcrumb li {
+  display: inline-block;
+  *display: inline;
+  text-shadow: 0 1px 0 #ffffff;
+  *zoom: 1;
+}
+
+.breadcrumb .divider {
+  padding: 0 5px;
+  color: #999999;
+}
+
+.breadcrumb .active a {
+  color: #333333;
+}
+
+.pagination {
+  height: 36px;
+  margin: 18px 0;
+}
+
+.pagination ul {
+  display: inline-block;
+  *display: inline;
+  margin-bottom: 0;
+  margin-left: 0;
+  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+  *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 li {
+  display: inline;
+}
+
+.pagination a {
+  float: left;
+  padding: 0 14px;
+  line-height: 34px;
+  text-decoration: none;
+  border: 1px solid #ddd;
+  border-left-width: 0;
+}
+
+.pagination a:hover,
+.pagination .active a {
+  background-color: #f5f5f5;
+}
+
+.pagination .active a {
+  color: #999999;
+  cursor: default;
+}
+
+.pagination .disabled span,
+.pagination .disabled a,
+.pagination .disabled a:hover {
+  color: #999999;
+  cursor: default;
+  background-color: transparent;
+}
+
+.pagination li:first-child a {
+  border-left-width: 1px;
+  -webkit-border-radius: 3px 0 0 3px;
+     -moz-border-radius: 3px 0 0 3px;
+          border-radius: 3px 0 0 3px;
+}
+
+.pagination li:last-child a {
+  -webkit-border-radius: 0 3px 3px 0;
+     -moz-border-radius: 0 3px 3px 0;
+          border-radius: 0 3px 3px 0;
+}
+
+.pagination-centered {
+  text-align: center;
+}
+
+.pagination-right {
+  text-align: right;
+}
+
+.pager {
+  margin-bottom: 18px;
+  margin-left: 0;
+  text-align: center;
+  list-style: none;
+  *zoom: 1;
+}
+
+.pager:before,
+.pager:after {
+  display: table;
+  content: "";
+}
+
+.pager:after {
+  clear: both;
+}
+
+.pager li {
+  display: inline;
+}
+
+.pager a {
+  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 a:hover {
+  text-decoration: none;
+  background-color: #f5f5f5;
+}
+
+.pager .next a {
+  float: right;
+}
+
+.pager .previous a {
+  float: left;
+}
+
+.pager .disabled a,
+.pager .disabled a:hover {
+  color: #999999;
+  cursor: default;
+  background-color: #fff;
+}
+
+.modal-open .dropdown-menu {
+  z-index: 2050;
+}
+
+.modal-open .dropdown.open {
+  *z-index: 2050;
+}
+
+.modal-open .popover {
+  z-index: 2060;
+}
+
+.modal-open .tooltip {
+  z-index: 2070;
+}
+
+.modal-backdrop {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1040;
+  background-color: #000000;
+}
+
+.modal-backdrop.fade {
+  opacity: 0;
+}
+
+.modal-backdrop,
+.modal-backdrop.fade.in {
+  opacity: 0.8;
+  filter: alpha(opacity=80);
+}
+
+.modal {
+  position: fixed;
+  top: 50%;
+  left: 50%;
+  z-index: 1050;
+  width: 560px;
+  margin: -250px 0 0 -280px;
+  overflow: auto;
+  background-color: #ffffff;
+  border: 1px solid #999;
+  border: 1px solid rgba(0, 0, 0, 0.3);
+  *border: 1px solid #999;
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+     -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+          box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  -webkit-background-clip: padding-box;
+     -moz-background-clip: padding-box;
+          background-clip: padding-box;
+}
+
+.modal.fade {
+  top: -25%;
+  -webkit-transition: opacity 0.3s linear, top 0.3s ease-out;
+     -moz-transition: opacity 0.3s linear, top 0.3s ease-out;
+      -ms-transition: opacity 0.3s linear, top 0.3s ease-out;
+       -o-transition: opacity 0.3s linear, top 0.3s ease-out;
+          transition: opacity 0.3s linear, top 0.3s ease-out;
+}
+
+.modal.fade.in {
+  top: 50%;
+}
+
+.modal-header {
+  padding: 9px 15px;
+  border-bottom: 1px solid #eee;
+}
+
+.modal-header .close {
+  margin-top: 2px;
+}
+
+.modal-body {
+  max-height: 400px;
+  padding: 15px;
+  overflow-y: auto;
+}
+
+.modal-form {
+  margin-bottom: 0;
+}
+
+.modal-footer {
+  padding: 14px 15px 15px;
+  margin-bottom: 0;
+  text-align: right;
+  background-color: #f5f5f5;
+  border-top: 1px solid #ddd;
+  -webkit-border-radius: 0 0 6px 6px;
+     -moz-border-radius: 0 0 6px 6px;
+          border-radius: 0 0 6px 6px;
+  *zoom: 1;
+  -webkit-box-shadow: inset 0 1px 0 #ffffff;
+     -moz-box-shadow: inset 0 1px 0 #ffffff;
+          box-shadow: inset 0 1px 0 #ffffff;
+}
+
+.modal-footer:before,
+.modal-footer:after {
+  display: table;
+  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;
+}
+
+.tooltip {
+  position: absolute;
+  z-index: 1020;
+  display: block;
+  padding: 5px;
+  font-size: 11px;
+  opacity: 0;
+  filter: alpha(opacity=0);
+  visibility: visible;
+}
+
+.tooltip.in {
+  opacity: 0.8;
+  filter: alpha(opacity=80);
+}
+
+.tooltip.top {
+  margin-top: -2px;
+}
+
+.tooltip.right {
+  margin-left: 2px;
+}
+
+.tooltip.bottom {
+  margin-top: 2px;
+}
+
+.tooltip.left {
+  margin-left: -2px;
+}
+
+.tooltip.top .tooltip-arrow {
+  bottom: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-top: 5px solid #000000;
+  border-right: 5px solid transparent;
+  border-left: 5px solid transparent;
+}
+
+.tooltip.left .tooltip-arrow {
+  top: 50%;
+  right: 0;
+  margin-top: -5px;
+  border-top: 5px solid transparent;
+  border-bottom: 5px solid transparent;
+  border-left: 5px solid #000000;
+}
+
+.tooltip.bottom .tooltip-arrow {
+  top: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-right: 5px solid transparent;
+  border-bottom: 5px solid #000000;
+  border-left: 5px solid transparent;
+}
+
+.tooltip.right .tooltip-arrow {
+  top: 50%;
+  left: 0;
+  margin-top: -5px;
+  border-top: 5px solid transparent;
+  border-right: 5px solid #000000;
+  border-bottom: 5px solid transparent;
+}
+
+.tooltip-inner {
+  max-width: 200px;
+  padding: 3px 8px;
+  color: #ffffff;
+  text-align: center;
+  text-decoration: none;
+  background-color: #000000;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+}
+
+.tooltip-arrow {
+  position: absolute;
+  width: 0;
+  height: 0;
+}
+
+.popover {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 1010;
+  display: none;
+  padding: 5px;
+}
+
+.popover.top {
+  margin-top: -5px;
+}
+
+.popover.right {
+  margin-left: 5px;
+}
+
+.popover.bottom {
+  margin-top: 5px;
+}
+
+.popover.left {
+  margin-left: -5px;
+}
+
+.popover.top .arrow {
+  bottom: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-top: 5px solid #000000;
+  border-right: 5px solid transparent;
+  border-left: 5px solid transparent;
+}
+
+.popover.right .arrow {
+  top: 50%;
+  left: 0;
+  margin-top: -5px;
+  border-top: 5px solid transparent;
+  border-right: 5px solid #000000;
+  border-bottom: 5px solid transparent;
+}
+
+.popover.bottom .arrow {
+  top: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-right: 5px solid transparent;
+  border-bottom: 5px solid #000000;
+  border-left: 5px solid transparent;
+}
+
+.popover.left .arrow {
+  top: 50%;
+  right: 0;
+  margin-top: -5px;
+  border-top: 5px solid transparent;
+  border-bottom: 5px solid transparent;
+  border-left: 5px solid #000000;
+}
+
+.popover .arrow {
+  position: absolute;
+  width: 0;
+  height: 0;
+}
+
+.popover-inner {
+  width: 280px;
+  padding: 3px;
+  overflow: hidden;
+  background: #000000;
+  background: rgba(0, 0, 0, 0.8);
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+  -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);
+}
+
+.popover-title {
+  padding: 9px 15px;
+  line-height: 1;
+  background-color: #f5f5f5;
+  border-bottom: 1px solid #eee;
+  -webkit-border-radius: 3px 3px 0 0;
+     -moz-border-radius: 3px 3px 0 0;
+          border-radius: 3px 3px 0 0;
+}
+
+.popover-content {
+  padding: 14px;
+  background-color: #ffffff;
+  -webkit-border-radius: 0 0 3px 3px;
+     -moz-border-radius: 0 0 3px 3px;
+          border-radius: 0 0 3px 3px;
+  -webkit-background-clip: padding-box;
+     -moz-background-clip: padding-box;
+          background-clip: padding-box;
+}
+
+.popover-content p,
+.popover-content ul,
+.popover-content ol {
+  margin-bottom: 0;
+}
+
+.thumbnails {
+  margin-left: -20px;
+  list-style: none;
+  *zoom: 1;
+}
+
+.thumbnails:before,
+.thumbnails:after {
+  display: table;
+  content: "";
+}
+
+.thumbnails:after {
+  clear: both;
+}
+
+.row-fluid .thumbnails {
+  margin-left: 0;
+}
+
+.thumbnails > li {
+  float: left;
+  margin-bottom: 18px;
+  margin-left: 20px;
+}
+
+.thumbnail {
+  display: block;
+  padding: 4px;
+  line-height: 1;
+  border: 1px solid #ddd;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
+     -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
+          box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+
+a.thumbnail:hover {
+  border-color: #0088cc;
+  -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+     -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+          box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+}
+
+.thumbnail > img {
+  display: block;
+  max-width: 100%;
+  margin-right: auto;
+  margin-left: auto;
+}
+
+.thumbnail .caption {
+  padding: 9px;
+}
+
+.label,
+.badge {
+  font-size: 10.998px;
+  font-weight: bold;
+  line-height: 14px;
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  white-space: nowrap;
+  vertical-align: baseline;
+  background-color: #999999;
+}
+
+.label {
+  padding: 1px 4px 2px;
+  -webkit-border-radius: 3px;
+     -moz-border-radius: 3px;
+          border-radius: 3px;
+}
+
+.badge {
+  padding: 1px 9px 2px;
+  -webkit-border-radius: 9px;
+     -moz-border-radius: 9px;
+          border-radius: 9px;
+}
+
+a.label:hover,
+a.badge:hover {
+  color: #ffffff;
+  text-decoration: none;
+  cursor: pointer;
+}
+
+.label-important,
+.badge-important {
+  background-color: #b94a48;
+}
+
+.label-important[href],
+.badge-important[href] {
+  background-color: #953b39;
+}
+
+.label-warning,
+.badge-warning {
+  background-color: #f89406;
+}
+
+.label-warning[href],
+.badge-warning[href] {
+  background-color: #c67605;
+}
+
+.label-success,
+.badge-success {
+  background-color: #468847;
+}
+
+.label-success[href],
+.badge-success[href] {
+  background-color: #356635;
+}
+
+.label-info,
+.badge-info {
+  background-color: #3a87ad;
+}
+
+.label-info[href],
+.badge-info[href] {
+  background-color: #2d6987;
+}
+
+.label-inverse,
+.badge-inverse {
+  background-color: #333333;
+}
+
+.label-inverse[href],
+.badge-inverse[href] {
+  background-color: #1a1a1a;
+}
+
+@-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: 18px;
+  margin-bottom: 18px;
+  overflow: hidden;
+  background-color: #f7f7f7;
+  background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
+  background-image: -ms-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(top, #f5f5f5, #f9f9f9);
+  background-repeat: repeat-x;
+  -webkit-border-radius: 4px;
+     -moz-border-radius: 4px;
+          border-radius: 4px;
+  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', 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 {
+  width: 0;
+  height: 18px;
+  font-size: 12px;
+  color: #ffffff;
+  text-align: center;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #0e90d2;
+  background-image: -moz-linear-gradient(top, #149bdf, #0480be);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
+  background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
+  background-image: -o-linear-gradient(top, #149bdf, #0480be);
+  background-image: linear-gradient(top, #149bdf, #0480be);
+  background-image: -ms-linear-gradient(top, #149bdf, #0480be);
+  background-repeat: repeat-x;
+  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', 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;
+      -ms-box-sizing: border-box;
+          box-sizing: border-box;
+  -webkit-transition: width 0.6s ease;
+     -moz-transition: width 0.6s ease;
+      -ms-transition: width 0.6s ease;
+       -o-transition: width 0.6s ease;
+          transition: width 0.6s ease;
+}
+
+.progress-striped .bar {
+  background-color: #149bdf;
+  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: -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: -ms-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: -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: 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 {
+  background-color: #dd514c;
+  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
+  background-image: -ms-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(top, #ee5f5b, #c43c35);
+  background-repeat: repeat-x;
+  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
+}
+
+.progress-danger.progress-striped .bar {
+  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: -ms-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 {
+  background-color: #5eb95e;
+  background-image: -moz-linear-gradient(top, #62c462, #57a957);
+  background-image: -ms-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(top, #62c462, #57a957);
+  background-repeat: repeat-x;
+  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
+}
+
+.progress-success.progress-striped .bar {
+  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: -ms-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 {
+  background-color: #4bb1cf;
+  background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
+  background-image: -ms-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(top, #5bc0de, #339bb9);
+  background-repeat: repeat-x;
+  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);
+}
+
+.progress-info.progress-striped .bar {
+  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: -ms-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 {
+  background-color: #faa732;
+  background-image: -moz-linear-gradient(top, #fbb450, #f89406);
+  background-image: -ms-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(top, #fbb450, #f89406);
+  background-repeat: repeat-x;
+  filter: progid:dximagetransform.microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);
+}
+
+.progress-warning.progress-striped .bar {
+  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: -ms-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: 18px;
+}
+
+.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: 18px;
+  line-height: 1;
+}
+
+.carousel-inner {
+  position: relative;
+  width: 100%;
+  overflow: hidden;
+}
+
+.carousel .item {
+  position: relative;
+  display: none;
+  -webkit-transition: 0.6s ease-in-out left;
+     -moz-transition: 0.6s ease-in-out left;
+      -ms-transition: 0.6s ease-in-out left;
+       -o-transition: 0.6s ease-in-out left;
+          transition: 0.6s ease-in-out left;
+}
+
+.carousel .item > img {
+  display: block;
+  line-height: 1;
+}
+
+.carousel .active,
+.carousel .next,
+.carousel .prev {
+  display: block;
+}
+
+.carousel .active {
+  left: 0;
+}
+
+.carousel .next,
+.carousel .prev {
+  position: absolute;
+  top: 0;
+  width: 100%;
+}
+
+.carousel .next {
+  left: 100%;
+}
+
+.carousel .prev {
+  left: -100%;
+}
+
+.carousel .next.left,
+.carousel .prev.right {
+  left: 0;
+}
+
+.carousel .active.left {
+  left: -100%;
+}
+
+.carousel .active.right {
+  left: 100%;
+}
+
+.carousel-control {
+  position: absolute;
+  top: 40%;
+  left: 15px;
+  width: 40px;
+  height: 40px;
+  margin-top: -20px;
+  font-size: 60px;
+  font-weight: 100;
+  line-height: 30px;
+  color: #ffffff;
+  text-align: center;
+  background: #222222;
+  border: 3px solid #ffffff;
+  -webkit-border-radius: 23px;
+     -moz-border-radius: 23px;
+          border-radius: 23px;
+  opacity: 0.5;
+  filter: alpha(opacity=50);
+}
+
+.carousel-control.right {
+  right: 15px;
+  left: auto;
+}
+
+.carousel-control:hover {
+  color: #ffffff;
+  text-decoration: none;
+  opacity: 0.9;
+  filter: alpha(opacity=90);
+}
+
+.carousel-caption {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  padding: 10px 15px 5px;
+  background: #333333;
+  background: rgba(0, 0, 0, 0.75);
+}
+
+.carousel-caption h4,
+.carousel-caption p {
+  color: #ffffff;
+}
+
+.hero-unit {
+  padding: 60px;
+  margin-bottom: 30px;
+  background-color: #eeeeee;
+  -webkit-border-radius: 6px;
+     -moz-border-radius: 6px;
+          border-radius: 6px;
+}
+
+.hero-unit h1 {
+  margin-bottom: 0;
+  font-size: 60px;
+  line-height: 1;
+  letter-spacing: -1px;
+  color: inherit;
+}
+
+.hero-unit p {
+  font-size: 18px;
+  font-weight: 200;
+  line-height: 27px;
+  color: inherit;
+}
+
+.pull-right {
+  float: right;
+}
+
+.pull-left {
+  float: left;
+}
+
+.hide {
+  display: none;
+}
+
+.show {
+  display: block;
+}
+
+.invisible {
+  visibility: hidden;
+}
diff --git a/public/assets/plugins/mxgraph/styles/web/bootstrap.min.css b/public/assets/plugins/mxgraph/styles/web/bootstrap.min.css
new file mode 100644
index 0000000..1c75d0c
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/web/bootstrap.min.css
@@ -0,0 +1,9 @@
+/*!
+ * Bootstrap v2.0.3
+ *
+ * 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{max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}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,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}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}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;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:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover{color:#005580;text-decoration:underline}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;content:""}.row:after{clear:both}[class*="span"]{float:left;margin-left:20px}.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;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:28px;margin-left:2.127659574%;*margin-left:2.0744680846382977%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .span12{width:99.99999998999999%;*width:99.94680850063828%}.row-fluid .span11{width:91.489361693%;*width:91.4361702036383%}.row-fluid .span10{width:82.97872339599999%;*width:82.92553190663828%}.row-fluid .span9{width:74.468085099%;*width:74.4148936096383%}.row-fluid .span8{width:65.95744680199999%;*width:65.90425531263828%}.row-fluid .span7{width:57.446808505%;*width:57.3936170156383%}.row-fluid .span6{width:48.93617020799999%;*width:48.88297871863829%}.row-fluid .span5{width:40.425531911%;*width:40.3723404216383%}.row-fluid .span4{width:31.914893614%;*width:31.8617021246383%}.row-fluid .span3{width:23.404255317%;*width:23.3510638276383%}.row-fluid .span2{width:14.89361702%;*width:14.8404255306383%}.row-fluid .span1{width:6.382978723%;*width:6.329787233638298%}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;content:""}.container-fluid:after{clear:both}p{margin:0 0 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px}p small{font-size:11px;color:#999}.lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px}h1,h2,h3,h4,h5,h6{margin:0;font-family:inherit;font-weight:bold;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999}h1{font-size:30px;line-height:36px}h1 small{font-size:18px}h2{font-size:24px;line-height:36px}h2 small{font-size:18px}h3{font-size:18px;line-height:27px}h3 small{font-size:14px}h4,h5,h6{line-height:18px}h4{font-size:14px}h4 small{font-size:12px}h5{font-size:12px}h6{font-size:11px;color:#999;text-transform:uppercase}.page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eee}.page-header h1{line-height:1}ul,ol{padding:0;margin:0 0 9px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}ul{list-style:disc}ol{list-style:decimal}li{line-height:18px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}dl{margin-bottom:18px}dt,dd{line-height:18px}dt{font-weight:bold;line-height:17px}dd{margin-left:9px}.dl-horizontal dt{float:left;width:120px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:130px}hr{margin:18px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}strong{font-weight:bold}em{font-style:italic}.muted{color:#999}abbr[title]{cursor:help;border-bottom:1px dotted #ddd}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px}blockquote small{display:block;line-height:18px;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}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:18px;font-style:normal;line-height:18px}small{font-size:100%}cite{font-style:normal}code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,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;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12.025px;line-height:18px;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:18px}pre code{padding:0;color:inherit;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 18px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:27px;font-size:19.5px;line-height:36px;color:#333;border:0;border-bottom:1px solid #eee}legend small{font-size:13.5px;color:#999}label,input,button,select,textarea{font-size:13px;font-weight:normal;line-height:18px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px;color:#333}input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;margin-bottom:9px;font-size:13px;line-height:18px;color:#555;background-color:#fff;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.uneditable-textarea{width:auto;height:auto}label input,label textarea,label select{display:block}input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer;background-color:transparent;border:0 \9;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}input[type="image"]{border:0}input[type="file"]{width:auto;padding:initial;line-height:initial;background-color:#fff;background-color:initial;border:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto}select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px}input[type="file"]{line-height:18px \9}select{width:220px;background-color:#fff}select[multiple],select[size]{height:auto}input[type="image"]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}textarea{height:auto}input[type="hidden"]{display:none}.radio,.checkbox{min-height:18px;padding-left:18px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px}.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,textarea{-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;-ms-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}input:focus,textarea: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="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.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,textarea,.uneditable-input{margin-left:0}input.span12,textarea.span12,.uneditable-input.span12{width:930px}input.span11,textarea.span11,.uneditable-input.span11{width:850px}input.span10,textarea.span10,.uneditable-input.span10{width:770px}input.span9,textarea.span9,.uneditable-input.span9{width:690px}input.span8,textarea.span8,.uneditable-input.span8{width:610px}input.span7,textarea.span7,.uneditable-input.span7{width:530px}input.span6,textarea.span6,.uneditable-input.span6{width:450px}input.span5,textarea.span5,.uneditable-input.span5{width:370px}input.span4,textarea.span4,.uneditable-input.span4{width:290px}input.span3,textarea.span3,.uneditable-input.span3{width:210px}input.span2,textarea.span2,.uneditable-input.span2{width:130px}input.span1,textarea.span1,.uneditable-input.span1{width:50px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee;border-color:#ddd}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:0 0 6px #dbc59e;-moz-box-shadow:0 0 6px #dbc59e;box-shadow: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>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:0 0 6px #d59392;-moz-box-shadow:0 0 6px #d59392;box-shadow: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>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:0 0 6px #7aba7b;-moz-box-shadow:0 0 6px #7aba7b;box-shadow: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}input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required: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:17px 20px 18px;margin-top:18px;margin-bottom:18px;background-color:#f5f5f5;border-top:1px solid #ddd;*zoom:1}.form-actions:before,.form-actions:after{display:table;content:""}.form-actions:after{clear:both}.uneditable-input{overflow:hidden;white-space:nowrap;cursor:not-allowed;background-color:#fff;border-color:#eee;-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)}:-moz-placeholder{color:#999}::-webkit-input-placeholder{color:#999}.help-block,.help-inline{color:#555}.help-block{display:block;margin-bottom:9px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-prepend,.input-append{margin-bottom:5px}.input-prepend input,.input-append input,.input-prepend select,.input-append select,.input-prepend .uneditable-input,.input-append .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:middle;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.input-prepend input:focus,.input-append input:focus,.input-prepend select:focus,.input-append select:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{z-index:2}.input-prepend .uneditable-input,.input-append .uneditable-input{border-left-color:#ccc}.input-prepend .add-on,.input-append .add-on{display:inline-block;width:auto;height:18px;min-width:16px;padding:4px 5px;font-weight:normal;line-height:18px;text-align:center;text-shadow:0 1px 0 #fff;vertical-align:middle;background-color:#eee;border:1px solid #ccc}.input-prepend .add-on,.input-append .add-on,.input-prepend .btn,.input-append .btn{margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend .active,.input-append .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:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-append .uneditable-input{border-right-color:#ccc;border-left-color:#eee}.input-append .add-on:last-child,.input-append .btn:last-child{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 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 .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius: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;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label{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:9px}legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:18px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:140px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:160px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:160px}.form-horizontal .help-block{margin-top:9px;margin-bottom:0}.form-horizontal .form-actions{padding-left:160px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:18px}.table th,.table td{padding:8px;line-height:18px;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-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapsed;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{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;-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{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9}.table tbody tr:hover td,.table tbody tr:hover th{background-color:#f5f5f5}table .span1{float:none;width:44px;margin-left:0}table .span2{float:none;width:124px;margin-left:0}table .span3{float:none;width:204px;margin-left:0}table .span4{float:none;width:284px;margin-left:0}table .span5{float:none;width:364px;margin-left:0}table .span6{float:none;width:444px;margin-left:0}table .span7{float:none;width:524px;margin-left:0}table .span8{float:none;width:604px;margin-left:0}table .span9{float:none;width:684px;margin-left:0}table .span10{float:none;width:764px;margin-left:0}table .span11{float:none;width:844px;margin-left:0}table .span12{float:none;width:924px;margin-left:0}table .span13{float:none;width:1004px;margin-left:0}table .span14{float:none;width:1084px;margin-left:0}table .span15{float:none;width:1164px;margin-left:0}table .span16{float:none;width:1244px;margin-left:0}table .span17{float:none;width:1324px;margin-left:0}table .span18{float:none;width:1404px;margin-left:0}table .span19{float:none;width:1484px;margin-left:0}table .span20{float:none;width:1564px;margin-left:0}table .span21{float:none;width:1644px;margin-left:0}table .span22{float:none;width:1724px;margin-left:0}table .span23{float:none;width:1804px;margin-left:0}table .span24{float:none;width:1884px;margin-left:0}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;*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}[class^="icon-"]:last-child,[class*=" icon-"]:last-child{*margin-left:0}.icon-white{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{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{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:"";opacity:.3;filter:alpha(opacity=30)}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown:hover .caret,.open .caret{opacity:1;filter:alpha(opacity=100)}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:4px 0;margin:1px 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:5px;-moz-border-radius:5px;border-radius:5px;-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:8px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:18px;color:#333;white-space:nowrap}.dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff;text-decoration:none;background-color:#08c}.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:"\2191"}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.typeahead{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 #eee;border:1px solid rgba(0,0,0,0.05);-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;filter:alpha(opacity=0);-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-ms-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1;filter:alpha(opacity=100)}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-ms-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:18px;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 10px 4px;margin-bottom:0;*margin-left:.3em;font-size:13px;line-height:18px;*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:-ms-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(top,#fff,#e6e6e6);background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff',endColorstr='#e6e6e6',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]{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-color:#e6e6e6;*background-color:#d9d9d9;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-ms-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-color:#e6e6e6;background-color:#d9d9d9 \9;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-color:#e6e6e6;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.btn-large [class^="icon-"]{margin-top:1px}.btn-small{padding:5px 9px;font-size:11px;line-height:16px}.btn-small [class^="icon-"]{margin-top:-1px}.btn-mini{padding:2px 6px;font-size:11px;line-height:14px}.btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover,.btn-inverse,.btn-inverse:hover{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.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:#ccc;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25)}.btn-primary{background-color:#0074cc;*background-color:#05c;background-image:-ms-linear-gradient(top,#08c,#05c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#05c));background-image:-webkit-linear-gradient(top,#08c,#05c);background-image:-o-linear-gradient(top,#08c,#05c);background-image:-moz-linear-gradient(top,#08c,#05c);background-image:linear-gradient(top,#08c,#05c);background-repeat:repeat-x;border-color:#05c #05c #003580;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='#0088cc',endColorstr='#0055cc',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#05c;*background-color:#004ab3}.btn-primary:active,.btn-primary.active{background-color:#004099 \9}.btn-warning{background-color:#faa732;*background-color:#f89406;background-image:-ms-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:-moz-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(top,#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='#fbb450',endColorstr='#f89406',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{background-color:#da4f49;*background-color:#bd362f;background-image:-ms-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:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(top,#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='#ee5f5b',endColorstr='#bd362f',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{background-color:#5bb75b;*background-color:#51a351;background-image:-ms-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:-moz-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(top,#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='#62c462',endColorstr='#51a351',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{background-color:#49afcd;*background-color:#2f96b4;background-image:-ms-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:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(top,#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='#5bc0de',endColorstr='#2f96b4',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{background-color:#414141;*background-color:#222;background-image:-ms-linear-gradient(top,#555,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#555),to(#222));background-image:-webkit-linear-gradient(top,#555,#222);background-image:-o-linear-gradient(top,#555,#222);background-image:-moz-linear-gradient(top,#555,#222);background-image:linear-gradient(top,#555,#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='#555555',endColorstr='#222222',GradientType=0);filter:progid:dximagetransform.microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px}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-group{position:relative;*margin-left:.3em;*zoom:1}.btn-group:before,.btn-group:after{display:table;content:""}.btn-group:after{clear:both}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:9px;margin-bottom:9px}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1}.btn-group>.btn{position:relative;float:left;margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.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>.dropdown-toggle{*padding-top:4px;padding-right:8px;*padding-bottom:4px;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-right:5px;padding-left:5px}.btn-group>.btn-small.dropdown-toggle{*padding-top:4px;*padding-bottom:4px}.btn-group>.btn-large.dropdown-toggle{padding-right:12px;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:#05c}.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:7px;margin-left:0}.btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100)}.btn-mini .caret{margin-top:5px}.btn-small .caret{margin-top:6px}.btn-large .caret{margin-top:6px;border-top-width:5px;border-right-width:5px;border-left-width:5px}.dropup .btn-large .caret{border-top:0;border-bottom:5px solid #000}.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;opacity:.75;filter:alpha(opacity=75)}.alert{padding:8px 35px 8px 14px;margin-bottom:18px;color:#c09853;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-heading{color:inherit}.alert .close{position:relative;top:-2px;right:-21px;line-height:18px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.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:18px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>.pull-right{float:right}.nav .nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:18px;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-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:8px 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;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:18px;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-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 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 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px}.nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333;border-bottom-color:#333}.nav>.dropdown.active>a:hover{color:#000;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;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}.navbar{*position:relative;*z-index:2;margin-bottom:18px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top,#333,#222);background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-webkit-linear-gradient(top,#333,#222);background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#333333',endColorstr='#222222',GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.25),inset 0 -1px 0 rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.25),inset 0 -1px 0 rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.25),inset 0 -1px 0 rgba(0,0,0,0.1)}.navbar .container{width:auto}.nav-collapse.collapse{height:auto}.navbar{color:#999}.navbar .brand:hover{text-decoration:none}.navbar .brand{display:block;float:left;padding:8px 20px 12px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#999}.navbar .navbar-text{margin-bottom:0;line-height:40px}.navbar .navbar-link{color:#999}.navbar .navbar-link:hover{color:#fff}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn{margin:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;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{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:6px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0}.navbar-search .search-query{padding:4px 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;color:#fff;background-color:#626262;border:1px solid #151515;-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;-ms-transition:none;-o-transition:none;transition:none}.navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;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-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom: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-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-bottom{bottom:0}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right}.navbar .nav>li{display:block;float:left}.navbar .nav>li>a{float:none;padding:9px 10px 11px;line-height:19px;color:#999;text-decoration:none;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar .btn{display:inline-block;padding:4px 10px 4px;margin:5px 5px 6px;line-height:18px}.navbar .btn-group{padding:5px 5px 6px;margin:0}.navbar .nav>li>a:hover{color:#fff;text-decoration:none;background-color:transparent}.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#fff;text-decoration:none;background-color:#222}.navbar .divider-vertical{width:1px;height:40px;margin:0 9px;overflow:hidden;background-color:#222;border-right:1px solid #333}.navbar .nav.pull-right{margin-right:0;margin-left:10px}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;background-color:#2c2c2c;*background-color:#222;background-image:-ms-linear-gradient(top,#333,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#333),to(#222));background-image:-webkit-linear-gradient(top,#333,#222);background-image:-o-linear-gradient(top,#333,#222);background-image:linear-gradient(top,#333,#222);background-image:-moz-linear-gradient(top,#333,#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='#333333',endColorstr='#222222',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]{background-color:#222;*background-color:#151515}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#080808 \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 .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 .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 .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 .dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown .dropdown-toggle .caret,.navbar .nav li.dropdown.open .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar .nav li.dropdown.active .caret{opacity:1;filter:alpha(opacity=100)}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{background-color:transparent}.navbar .nav li.dropdown.active>.dropdown-toggle:hover{color:#fff}.navbar .pull-right .dropdown-menu,.navbar .dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right .dropdown-menu:before,.navbar .dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right .dropdown-menu:after,.navbar .dropdown-menu.pull-right:after{right:13px;left:auto}.breadcrumb{padding:7px 14px;margin:0 0 18px;list-style:none;background-color:#fbfbfb;background-image:-moz-linear-gradient(top,#fff,#f5f5f5);background-image:-ms-linear-gradient(top,#fff,#f5f5f5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#fff,#f5f5f5);background-image:-o-linear-gradient(top,#fff,#f5f5f5);background-image:linear-gradient(top,#fff,#f5f5f5);background-repeat:repeat-x;border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ffffff',endColorstr='#f5f5f5',GradientType=0);-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.breadcrumb li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb .divider{padding:0 5px;color:#999}.breadcrumb .active a{color:#333}.pagination{height:36px;margin:18px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;*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 li{display:inline}.pagination a{float:left;padding:0 14px;line-height:34px;text-decoration:none;border:1px solid #ddd;border-left-width:0}.pagination a:hover,.pagination .active a{background-color:#f5f5f5}.pagination .active a{color:#999;cursor:default}.pagination .disabled span,.pagination .disabled a,.pagination .disabled a:hover{color:#999;cursor:default;background-color:transparent}.pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px}.pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pager{margin-bottom:18px;margin-left:0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;content:""}.pager:after{clear:both}.pager li{display:inline}.pager a{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 a:hover{text-decoration:none;background-color:#f5f5f5}.pager .next a{float:right}.pager .previous a{float:left}.pager .disabled a,.pager .disabled a:hover{color:#999;cursor:default;background-color:#fff}.modal-open .dropdown-menu{z-index:2050}.modal-open .dropdown.open{*z-index:2050}.modal-open .popover{z-index:2060}.modal-open .tooltip{z-index:2070}.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:50%;left:50%;z-index:1050;width:560px;margin:-250px 0 0 -280px;overflow:auto;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;-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;-ms-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:50%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-body{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;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}.tooltip{position:absolute;z-index:1020;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:-2px}.tooltip.right{margin-left:2px}.tooltip.bottom{margin-top:2px}.tooltip.left{margin-left:-2px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top:5px solid #000;border-right:5px solid transparent;border-left:5px solid transparent}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-right:5px solid transparent;border-bottom:5px solid #000;border-left:5px solid transparent}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-right:5px solid #000;border-bottom:5px solid transparent}.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}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;padding:5px}.popover.top{margin-top:-5px}.popover.right{margin-left:5px}.popover.bottom{margin-top:5px}.popover.left{margin-left:-5px}.popover.top .arrow{bottom:0;left:50%;margin-left:-5px;border-top:5px solid #000;border-right:5px solid transparent;border-left:5px solid transparent}.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-right:5px solid #000;border-bottom:5px solid transparent}.popover.bottom .arrow{top:0;left:50%;margin-left:-5px;border-right:5px solid transparent;border-bottom:5px solid #000;border-left:5px solid transparent}.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000}.popover .arrow{position:absolute;width:0;height:0}.popover-inner{width:280px;padding:3px;overflow:hidden;background:#000;background:rgba(0,0,0,0.8);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-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)}.popover-title{padding:9px 15px;line-height:1;background-color:#f5f5f5;border-bottom:1px solid #eee;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0}.popover-content{padding:14px;background-color:#fff;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:18px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:1;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:0 1px 1px rgba(0,0,0,0.075);box-shadow:0 1px 1px rgba(0,0,0,0.075)}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}.label,.badge{font-size:10.998px;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{padding:1px 4px 2px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding:1px 9px 2px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}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}@-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:18px;margin-bottom:18px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-ms-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(top,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#f5f5f5',endColorstr='#f9f9f9',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{width:0;height:18px;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(top,#149bdf,#0480be);background-image:-ms-linear-gradient(top,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#149bdf',endColorstr='#0480be',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;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-ms-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .bar{background-color:#149bdf;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:-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:-ms-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:-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: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{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-ms-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(top,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#ee5f5b',endColorstr='#c43c35',GradientType=0)}.progress-danger.progress-striped .bar{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:-ms-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{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-ms-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(top,#62c462,#57a957);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#62c462',endColorstr='#57a957',GradientType=0)}.progress-success.progress-striped .bar{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:-ms-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{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-ms-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(top,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#5bc0de',endColorstr='#339bb9',GradientType=0)}.progress-info.progress-striped .bar{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:-ms-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{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-ms-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(top,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:dximagetransform.microsoft.gradient(startColorstr='#fbb450',endColorstr='#f89406',GradientType=0)}.progress-warning.progress-striped .bar{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:-ms-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:18px}.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:18px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel .item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-ms-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel .item>img{display:block;line-height:1}.carousel .active,.carousel .next,.carousel .prev{display:block}.carousel .active{left:0}.carousel .next,.carousel .prev{position:absolute;top:0;width:100%}.carousel .next{left:100%}.carousel .prev{left:-100%}.carousel .next.left,.carousel .prev.right{left:0}.carousel .active.left{left:-100%}.carousel .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:10px 15px 5px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{color:#fff}.hero-unit{padding:60px;margin-bottom:30px;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 p{font-size:18px;font-weight:200;line-height:27px;color:inherit}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}
diff --git a/public/assets/plugins/mxgraph/styles/web/font-awesome/font-awesome-ie7.css b/public/assets/plugins/mxgraph/styles/web/font-awesome/font-awesome-ie7.css
new file mode 100644
index 0000000..c1dc3ac
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/web/font-awesome/font-awesome-ie7.css
@@ -0,0 +1,645 @@
+[class^="icon-"],
+[class*=" icon-"] {
+  font-family: FontAwesome;
+  font-style: normal;
+  font-weight: normal;
+}
+.btn.dropdown-toggle [class^="icon-"],
+.btn.dropdown-toggle [class*=" icon-"] {
+  /* keeps button heights with and without icons the same */
+
+  line-height: 1.4em;
+}
+.icon-large {
+  font-size: 1.3333em;
+}
+.icon-glass {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf000;&nbsp;');
+}
+.icon-music {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf001;&nbsp;');
+}
+.icon-search {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf002;&nbsp;');
+}
+.icon-envelope {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf003;&nbsp;');
+}
+.icon-heart {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf004;&nbsp;');
+}
+.icon-star {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf005;&nbsp;');
+}
+.icon-star-empty {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf006;&nbsp;');
+}
+.icon-user {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf007;&nbsp;');
+}
+.icon-film {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf008;&nbsp;');
+}
+.icon-th-large {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf009;&nbsp;');
+}
+.icon-th {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00a;&nbsp;');
+}
+.icon-th-list {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00b;&nbsp;');
+}
+.icon-ok {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00c;&nbsp;');
+}
+.icon-remove {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00d;&nbsp;');
+}
+.icon-zoom-in {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf00e;&nbsp;');
+}
+.icon-zoom-out {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf010;&nbsp;');
+}
+.icon-off {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf011;&nbsp;');
+}
+.icon-signal {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf012;&nbsp;');
+}
+.icon-cog {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf013;&nbsp;');
+}
+.icon-trash {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf014;&nbsp;');
+}
+.icon-home {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf015;&nbsp;');
+}
+.icon-file {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf016;&nbsp;');
+}
+.icon-time {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf017;&nbsp;');
+}
+.icon-road {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf018;&nbsp;');
+}
+.icon-download-alt {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf019;&nbsp;');
+}
+.icon-download {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01a;&nbsp;');
+}
+.icon-upload {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01b;&nbsp;');
+}
+.icon-inbox {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01c;&nbsp;');
+}
+.icon-play-circle {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01d;&nbsp;');
+}
+.icon-repeat {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf01e;&nbsp;');
+}
+.icon-refresh {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf021;&nbsp;');
+}
+.icon-list-alt {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf022;&nbsp;');
+}
+.icon-lock {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf023;&nbsp;');
+}
+.icon-flag {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf024;&nbsp;');
+}
+.icon-headphones {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf025;&nbsp;');
+}
+.icon-volume-off {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf026;&nbsp;');
+}
+.icon-volume-down {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf027;&nbsp;');
+}
+.icon-volume-up {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf028;&nbsp;');
+}
+.icon-qrcode {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf029;&nbsp;');
+}
+.icon-barcode {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02a;&nbsp;');
+}
+.icon-tag {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02b;&nbsp;');
+}
+.icon-tags {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02c;&nbsp;');
+}
+.icon-book {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02d;&nbsp;');
+}
+.icon-bookmark {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02e;&nbsp;');
+}
+.icon-print {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf02f;&nbsp;');
+}
+.icon-camera {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf030;&nbsp;');
+}
+.icon-font {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf031;&nbsp;');
+}
+.icon-bold {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf032;&nbsp;');
+}
+.icon-italic {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf033;&nbsp;');
+}
+.icon-text-height {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf034;&nbsp;');
+}
+.icon-text-width {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf035;&nbsp;');
+}
+.icon-align-left {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf036;&nbsp;');
+}
+.icon-align-center {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf037;&nbsp;');
+}
+.icon-align-right {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf038;&nbsp;');
+}
+.icon-align-justify {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf039;&nbsp;');
+}
+.icon-list {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03a;&nbsp;');
+}
+.icon-indent-left {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03b;&nbsp;');
+}
+.icon-indent-right {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03c;&nbsp;');
+}
+.icon-facetime-video {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03d;&nbsp;');
+}
+.icon-picture {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf03e;&nbsp;');
+}
+.icon-pencil {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf040;&nbsp;');
+}
+.icon-map-marker {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf041;&nbsp;');
+}
+.icon-adjust {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf042;&nbsp;');
+}
+.icon-tint {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf043;&nbsp;');
+}
+.icon-edit {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf044;&nbsp;');
+}
+.icon-share {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf045;&nbsp;');
+}
+.icon-check {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf046;&nbsp;');
+}
+.icon-move {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf047;&nbsp;');
+}
+.icon-step-backward {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf048;&nbsp;');
+}
+.icon-fast-backward {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf049;&nbsp;');
+}
+.icon-backward {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04a;&nbsp;');
+}
+.icon-play {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04b;&nbsp;');
+}
+.icon-pause {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04c;&nbsp;');
+}
+.icon-stop {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04d;&nbsp;');
+}
+.icon-forward {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf04e;&nbsp;');
+}
+.icon-fast-forward {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf050;&nbsp;');
+}
+.icon-step-forward {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf051;&nbsp;');
+}
+.icon-eject {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf052;&nbsp;');
+}
+.icon-chevron-left {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf053;&nbsp;');
+}
+.icon-chevron-right {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf054;&nbsp;');
+}
+.icon-plus-sign {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf055;&nbsp;');
+}
+.icon-minus-sign {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf056;&nbsp;');
+}
+.icon-remove-sign {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf057;&nbsp;');
+}
+.icon-ok-sign {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf058;&nbsp;');
+}
+.icon-question-sign {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf059;&nbsp;');
+}
+.icon-info-sign {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05a;&nbsp;');
+}
+.icon-screenshot {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05b;&nbsp;');
+}
+.icon-remove-circle {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05c;&nbsp;');
+}
+.icon-ok-circle {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05d;&nbsp;');
+}
+.icon-ban-circle {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf05e;&nbsp;');
+}
+.icon-arrow-left {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf060;&nbsp;');
+}
+.icon-arrow-right {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf061;&nbsp;');
+}
+.icon-arrow-up {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf062;&nbsp;');
+}
+.icon-arrow-down {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf063;&nbsp;');
+}
+.icon-share-alt {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf064;&nbsp;');
+}
+.icon-resize-full {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf065;&nbsp;');
+}
+.icon-resize-small {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf066;&nbsp;');
+}
+.icon-plus {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf067;&nbsp;');
+}
+.icon-minus {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf068;&nbsp;');
+}
+.icon-asterisk {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf069;&nbsp;');
+}
+.icon-exclamation-sign {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06a;&nbsp;');
+}
+.icon-gift {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06b;&nbsp;');
+}
+.icon-leaf {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06c;&nbsp;');
+}
+.icon-fire {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06d;&nbsp;');
+}
+.icon-eye-open {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf06e;&nbsp;');
+}
+.icon-eye-close {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf070;&nbsp;');
+}
+.icon-warning-sign {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf071;&nbsp;');
+}
+.icon-plane {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf072;&nbsp;');
+}
+.icon-calendar {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf073;&nbsp;');
+}
+.icon-random {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf074;&nbsp;');
+}
+.icon-comment {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf075;&nbsp;');
+}
+.icon-magnet {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf076;&nbsp;');
+}
+.icon-chevron-up {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf077;&nbsp;');
+}
+.icon-chevron-down {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf078;&nbsp;');
+}
+.icon-retweet {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf079;&nbsp;');
+}
+.icon-shopping-cart {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07a;&nbsp;');
+}
+.icon-folder-close {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07b;&nbsp;');
+}
+.icon-folder-open {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07c;&nbsp;');
+}
+.icon-resize-vertical {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07d;&nbsp;');
+}
+.icon-resize-horizontal {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf07e;&nbsp;');
+}
+.icon-bar-chart {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf080;&nbsp;');
+}
+.icon-twitter-sign {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf081;&nbsp;');
+}
+.icon-facebook-sign {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf082;&nbsp;');
+}
+.icon-camera-retro {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf083;&nbsp;');
+}
+.icon-key {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf084;&nbsp;');
+}
+.icon-cogs {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf085;&nbsp;');
+}
+.icon-comments {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf086;&nbsp;');
+}
+.icon-thumbs-up {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf087;&nbsp;');
+}
+.icon-thumbs-down {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf088;&nbsp;');
+}
+.icon-star-half {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf089;&nbsp;');
+}
+.icon-heart-empty {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08a;&nbsp;');
+}
+.icon-signout {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08b;&nbsp;');
+}
+.icon-linkedin-sign {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08c;&nbsp;');
+}
+.icon-pushpin {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08d;&nbsp;');
+}
+.icon-external-link {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf08e;&nbsp;');
+}
+.icon-signin {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf090;&nbsp;');
+}
+.icon-trophy {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf091;&nbsp;');
+}
+.icon-github-sign {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf092;&nbsp;');
+}
+.icon-upload-alt {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf093;&nbsp;');
+}
+.icon-lemon {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf094;&nbsp;');
+}
+.icon-phone {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf095;&nbsp;');
+}
+.icon-check-empty {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf096;&nbsp;');
+}
+.icon-bookmark-empty {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf097;&nbsp;');
+}
+.icon-phone-sign {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf098;&nbsp;');
+}
+.icon-twitter {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf099;&nbsp;');
+}
+.icon-facebook {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09a;&nbsp;');
+}
+.icon-github {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09b;&nbsp;');
+}
+.icon-unlock {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09c;&nbsp;');
+}
+.icon-credit-card {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09d;&nbsp;');
+}
+.icon-rss {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf09e;&nbsp;');
+}
+.icon-hdd {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a0;&nbsp;');
+}
+.icon-bullhorn {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a1;&nbsp;');
+}
+.icon-bell {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a2;&nbsp;');
+}
+.icon-certificate {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a3;&nbsp;');
+}
+.icon-hand-right {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a4;&nbsp;');
+}
+.icon-hand-left {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a5;&nbsp;');
+}
+.icon-hand-up {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a6;&nbsp;');
+}
+.icon-hand-down {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a7;&nbsp;');
+}
+.icon-circle-arrow-left {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a8;&nbsp;');
+}
+.icon-circle-arrow-right {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0a9;&nbsp;');
+}
+.icon-circle-arrow-up {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0aa;&nbsp;');
+}
+.icon-circle-arrow-down {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ab;&nbsp;');
+}
+.icon-globe {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ac;&nbsp;');
+}
+.icon-wrench {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ad;&nbsp;');
+}
+.icon-tasks {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ae;&nbsp;');
+}
+.icon-filter {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b0;&nbsp;');
+}
+.icon-briefcase {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b1;&nbsp;');
+}
+.icon-fullscreen {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0b2;&nbsp;');
+}
+.icon-group {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c0;&nbsp;');
+}
+.icon-link {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c1;&nbsp;');
+}
+.icon-cloud {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c2;&nbsp;');
+}
+.icon-beaker {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c3;&nbsp;');
+}
+.icon-cut {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c4;&nbsp;');
+}
+.icon-copy {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c5;&nbsp;');
+}
+.icon-paper-clip {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c6;&nbsp;');
+}
+.icon-save {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c7;&nbsp;');
+}
+.icon-sign-blank {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c8;&nbsp;');
+}
+.icon-reorder {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0c9;&nbsp;');
+}
+.icon-list-ul {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ca;&nbsp;');
+}
+.icon-list-ol {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cb;&nbsp;');
+}
+.icon-strikethrough {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cc;&nbsp;');
+}
+.icon-underline {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0cd;&nbsp;');
+}
+.icon-table {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ce;&nbsp;');
+}
+.icon-magic {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d0;&nbsp;');
+}
+.icon-truck {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d1;&nbsp;');
+}
+.icon-pinterest {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d2;&nbsp;');
+}
+.icon-pinterest-sign {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d3;&nbsp;');
+}
+.icon-google-plus-sign {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d4;&nbsp;');
+}
+.icon-google-plus {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d5;&nbsp;');
+}
+.icon-money {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d6;&nbsp;');
+}
+.icon-caret-down {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d7;&nbsp;');
+}
+.icon-caret-up {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d8;&nbsp;');
+}
+.icon-caret-left {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0d9;&nbsp;');
+}
+.icon-caret-right {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0da;&nbsp;');
+}
+.icon-columns {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0db;&nbsp;');
+}
+.icon-sort {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0dc;&nbsp;');
+}
+.icon-sort-down {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0dd;&nbsp;');
+}
+.icon-sort-up {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0de;&nbsp;');
+}
+.icon-envelope-alt {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e0;&nbsp;');
+}
+.icon-linkedin {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e1;&nbsp;');
+}
+.icon-undo {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e2;&nbsp;');
+}
+.icon-legal {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e3;&nbsp;');
+}
+.icon-dashboard {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e4;&nbsp;');
+}
+.icon-comment-alt {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e5;&nbsp;');
+}
+.icon-comments-alt {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e6;&nbsp;');
+}
+.icon-bolt {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e7;&nbsp;');
+}
+.icon-sitemap {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e8;&nbsp;');
+}
+.icon-umbrella {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e9;&nbsp;');
+}
+.icon-paste {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0ea;&nbsp;');
+}
+.icon-user-md {
+  *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf200;&nbsp;');
+}
diff --git a/public/assets/plugins/mxgraph/styles/web/font-awesome/font-awesome.css b/public/assets/plugins/mxgraph/styles/web/font-awesome/font-awesome.css
new file mode 100644
index 0000000..7910024
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/web/font-awesome/font-awesome.css
@@ -0,0 +1,303 @@
+/*  Font Awesome
+    the iconic font designed for use with Twitter Bootstrap
+    -------------------------------------------------------
+    The full suite of pictographic icons, examples, and documentation
+    can be found at: http://fortawesome.github.com/Font-Awesome/
+
+    License
+    -------------------------------------------------------
+    The Font Awesome webfont, CSS, and LESS files are licensed under CC BY 3.0:
+    http://creativecommons.org/licenses/by/3.0/ A mention of
+    'Font Awesome - http://fortawesome.github.com/Font-Awesome' in human-readable
+    source code is considered acceptable attribution (most common on the web).
+    If human readable source code is not available to the end user, a mention in
+    an 'About' or 'Credits' screen is considered acceptable (most common in desktop
+    or mobile software).
+
+    Contact
+    -------------------------------------------------------
+    Email: [email-masked]
+    Twitter: http://twitter.com/fortaweso_me
+    Work: http://lemonwi.se co-founder
+
+    */
+@font-face {
+  font-family: "FontAwesome";
+  src: url('font/fontawesome-webfont.eot');
+  src: url('font/fontawesome-webfont.eot?#iefix') format('eot'), url('font/fontawesome-webfont.woff') format('woff'), url('font/fontawesome-webfont.ttf') format('truetype'), url('font/fontawesome-webfont.svg#FontAwesome') format('svg');
+  font-weight: normal;
+  font-style: normal;
+}
+
+/*  Font Awesome styles
+    ------------------------------------------------------- */
+[class^="icon-"]:before, [class*=" icon-"]:before {
+  font-family: FontAwesome;
+  font-weight: normal;
+  font-style: normal;
+  display: inline-block;
+  text-decoration: inherit;
+}
+a [class^="icon-"], a [class*=" icon-"] {
+  display: inline-block;
+  text-decoration: inherit;
+}
+/* makes the font 33% larger relative to the icon container */
+.icon-large:before {
+  vertical-align: top;
+  font-size: 1.3333333333333333em;
+}
+.btn [class^="icon-"], .btn [class*=" icon-"] {
+  /* keeps button heights with and without icons the same */
+
+  line-height: .9em;
+}
+li [class^="icon-"], li [class*=" icon-"] {
+  display: inline-block;
+  width: 1.25em;
+  text-align: center;
+}
+li .icon-large[class^="icon-"], li .icon-large[class*=" icon-"] {
+  /* 1.5 increased font size for icon-large * 1.25 width */
+
+  width: 1.875em;
+}
+li[class^="icon-"], li[class*=" icon-"] {
+  margin-left: 0;
+  list-style-type: none;
+}
+li[class^="icon-"]:before, li[class*=" icon-"]:before {
+  text-indent: -2em;
+  text-align: center;
+}
+li[class^="icon-"].icon-large:before, li[class*=" icon-"].icon-large:before {
+  text-indent: -1.3333333333333333em;
+}
+/*  Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+    readers do not read off random characters that represent icons */
+.icon-glass:before                { content: "\f000"; }
+.icon-music:before                { content: "\f001"; }
+.icon-search:before               { content: "\f002"; }
+.icon-envelope:before             { content: "\f003"; }
+.icon-heart:before                { content: "\f004"; }
+.icon-star:before                 { content: "\f005"; }
+.icon-star-empty:before           { content: "\f006"; }
+.icon-user:before                 { content: "\f007"; }
+.icon-film:before                 { content: "\f008"; }
+.icon-th-large:before             { content: "\f009"; }
+.icon-th:before                   { content: "\f00a"; }
+.icon-th-list:before              { content: "\f00b"; }
+.icon-ok:before                   { content: "\f00c"; }
+.icon-remove:before               { content: "\f00d"; }
+.icon-zoom-in:before              { content: "\f00e"; }
+
+.icon-zoom-out:before             { content: "\f010"; }
+.icon-off:before                  { content: "\f011"; }
+.icon-signal:before               { content: "\f012"; }
+.icon-cog:before                  { content: "\f013"; }
+.icon-trash:before                { content: "\f014"; }
+.icon-home:before                 { content: "\f015"; }
+.icon-file:before                 { content: "\f016"; }
+.icon-time:before                 { content: "\f017"; }
+.icon-road:before                 { content: "\f018"; }
+.icon-download-alt:before         { content: "\f019"; }
+.icon-download:before             { content: "\f01a"; }
+.icon-upload:before               { content: "\f01b"; }
+.icon-inbox:before                { content: "\f01c"; }
+.icon-play-circle:before          { content: "\f01d"; }
+.icon-repeat:before               { content: "\f01e"; }
+
+/* \f020 doesn't work in Safari. all shifted one down */
+.icon-refresh:before              { content: "\f021"; }
+.icon-list-alt:before             { content: "\f022"; }
+.icon-lock:before                 { content: "\f023"; }
+.icon-flag:before                 { content: "\f024"; }
+.icon-headphones:before           { content: "\f025"; }
+.icon-volume-off:before           { content: "\f026"; }
+.icon-volume-down:before          { content: "\f027"; }
+.icon-volume-up:before            { content: "\f028"; }
+.icon-qrcode:before               { content: "\f029"; }
+.icon-barcode:before              { content: "\f02a"; }
+.icon-tag:before                  { content: "\f02b"; }
+.icon-tags:before                 { content: "\f02c"; }
+.icon-book:before                 { content: "\f02d"; }
+.icon-bookmark:before             { content: "\f02e"; }
+.icon-print:before                { content: "\f02f"; }
+
+.icon-camera:before               { content: "\f030"; }
+.icon-font:before                 { content: "\f031"; }
+.icon-bold:before                 { content: "\f032"; }
+.icon-italic:before               { content: "\f033"; }
+.icon-text-height:before          { content: "\f034"; }
+.icon-text-width:before           { content: "\f035"; }
+.icon-align-left:before           { content: "\f036"; }
+.icon-align-center:before         { content: "\f037"; }
+.icon-align-right:before          { content: "\f038"; }
+.icon-align-justify:before        { content: "\f039"; }
+.icon-list:before                 { content: "\f03a"; }
+.icon-indent-left:before          { content: "\f03b"; }
+.icon-indent-right:before         { content: "\f03c"; }
+.icon-facetime-video:before       { content: "\f03d"; }
+.icon-picture:before              { content: "\f03e"; }
+
+.icon-pencil:before               { content: "\f040"; }
+.icon-map-marker:before           { content: "\f041"; }
+.icon-adjust:before               { content: "\f042"; }
+.icon-tint:before                 { content: "\f043"; }
+.icon-edit:before                 { content: "\f044"; }
+.icon-share:before                { content: "\f045"; }
+.icon-check:before                { content: "\f046"; }
+.icon-move:before                 { content: "\f047"; }
+.icon-step-backward:before        { content: "\f048"; }
+.icon-fast-backward:before        { content: "\f049"; }
+.icon-backward:before             { content: "\f04a"; }
+.icon-play:before                 { content: "\f04b"; }
+.icon-pause:before                { content: "\f04c"; }
+.icon-stop:before                 { content: "\f04d"; }
+.icon-forward:before              { content: "\f04e"; }
+
+.icon-fast-forward:before         { content: "\f050"; }
+.icon-step-forward:before         { content: "\f051"; }
+.icon-eject:before                { content: "\f052"; }
+.icon-chevron-left:before         { content: "\f053"; }
+.icon-chevron-right:before        { content: "\f054"; }
+.icon-plus-sign:before            { content: "\f055"; }
+.icon-minus-sign:before           { content: "\f056"; }
+.icon-remove-sign:before          { content: "\f057"; }
+.icon-ok-sign:before              { content: "\f058"; }
+.icon-question-sign:before        { content: "\f059"; }
+.icon-info-sign:before            { content: "\f05a"; }
+.icon-screenshot:before           { content: "\f05b"; }
+.icon-remove-circle:before        { content: "\f05c"; }
+.icon-ok-circle:before            { content: "\f05d"; }
+.icon-ban-circle:before           { content: "\f05e"; }
+
+.icon-arrow-left:before           { content: "\f060"; }
+.icon-arrow-right:before          { content: "\f061"; }
+.icon-arrow-up:before             { content: "\f062"; }
+.icon-arrow-down:before           { content: "\f063"; }
+.icon-share-alt:before            { content: "\f064"; }
+.icon-resize-full:before          { content: "\f065"; }
+.icon-resize-small:before         { content: "\f066"; }
+.icon-plus:before                 { content: "\f067"; }
+.icon-minus:before                { content: "\f068"; }
+.icon-asterisk:before             { content: "\f069"; }
+.icon-exclamation-sign:before     { content: "\f06a"; }
+.icon-gift:before                 { content: "\f06b"; }
+.icon-leaf:before                 { content: "\f06c"; }
+.icon-fire:before                 { content: "\f06d"; }
+.icon-eye-open:before             { content: "\f06e"; }
+
+.icon-eye-close:before            { content: "\f070"; }
+.icon-warning-sign:before         { content: "\f071"; }
+.icon-plane:before                { content: "\f072"; }
+.icon-calendar:before             { content: "\f073"; }
+.icon-random:before               { content: "\f074"; }
+.icon-comment:before              { content: "\f075"; }
+.icon-magnet:before               { content: "\f076"; }
+.icon-chevron-up:before           { content: "\f077"; }
+.icon-chevron-down:before         { content: "\f078"; }
+.icon-retweet:before              { content: "\f079"; }
+.icon-shopping-cart:before        { content: "\f07a"; }
+.icon-folder-close:before         { content: "\f07b"; }
+.icon-folder-open:before          { content: "\f07c"; }
+.icon-resize-vertical:before      { content: "\f07d"; }
+.icon-resize-horizontal:before    { content: "\f07e"; }
+
+.icon-bar-chart:before            { content: "\f080"; }
+.icon-twitter-sign:before         { content: "\f081"; }
+.icon-facebook-sign:before        { content: "\f082"; }
+.icon-camera-retro:before         { content: "\f083"; }
+.icon-key:before                  { content: "\f084"; }
+.icon-cogs:before                 { content: "\f085"; }
+.icon-comments:before             { content: "\f086"; }
+.icon-thumbs-up:before            { content: "\f087"; }
+.icon-thumbs-down:before          { content: "\f088"; }
+.icon-star-half:before            { content: "\f089"; }
+.icon-heart-empty:before          { content: "\f08a"; }
+.icon-signout:before              { content: "\f08b"; }
+.icon-linkedin-sign:before        { content: "\f08c"; }
+.icon-pushpin:before              { content: "\f08d"; }
+.icon-external-link:before        { content: "\f08e"; }
+
+.icon-signin:before               { content: "\f090"; }
+.icon-trophy:before               { content: "\f091"; }
+.icon-github-sign:before          { content: "\f092"; }
+.icon-upload-alt:before           { content: "\f093"; }
+.icon-lemon:before                { content: "\f094"; }
+.icon-phone:before                { content: "\f095"; }
+.icon-check-empty:before          { content: "\f096"; }
+.icon-bookmark-empty:before       { content: "\f097"; }
+.icon-phone-sign:before           { content: "\f098"; }
+.icon-twitter:before              { content: "\f099"; }
+.icon-facebook:before             { content: "\f09a"; }
+.icon-github:before               { content: "\f09b"; }
+.icon-unlock:before               { content: "\f09c"; }
+.icon-credit-card:before          { content: "\f09d"; }
+.icon-rss:before                  { content: "\f09e"; }
+
+.icon-hdd:before                  { content: "\f0a0"; }
+.icon-bullhorn:before             { content: "\f0a1"; }
+.icon-bell:before                 { content: "\f0a2"; }
+.icon-certificate:before          { content: "\f0a3"; }
+.icon-hand-right:before           { content: "\f0a4"; }
+.icon-hand-left:before            { content: "\f0a5"; }
+.icon-hand-up:before              { content: "\f0a6"; }
+.icon-hand-down:before            { content: "\f0a7"; }
+.icon-circle-arrow-left:before    { content: "\f0a8"; }
+.icon-circle-arrow-right:before   { content: "\f0a9"; }
+.icon-circle-arrow-up:before      { content: "\f0aa"; }
+.icon-circle-arrow-down:before    { content: "\f0ab"; }
+.icon-globe:before                { content: "\f0ac"; }
+.icon-wrench:before               { content: "\f0ad"; }
+.icon-tasks:before                { content: "\f0ae"; }
+
+.icon-filter:before               { content: "\f0b0"; }
+.icon-briefcase:before            { content: "\f0b1"; }
+.icon-fullscreen:before           { content: "\f0b2"; }
+
+.icon-group:before                { content: "\f0c0"; }
+.icon-link:before                 { content: "\f0c1"; }
+.icon-cloud:before                { content: "\f0c2"; }
+.icon-beaker:before               { content: "\f0c3"; }
+.icon-cut:before                  { content: "\f0c4"; }
+.icon-copy:before                 { content: "\f0c5"; }
+.icon-paper-clip:before           { content: "\f0c6"; }
+.icon-save:before                 { content: "\f0c7"; }
+.icon-sign-blank:before           { content: "\f0c8"; }
+.icon-reorder:before              { content: "\f0c9"; }
+.icon-list-ul:before              { content: "\f0ca"; }
+.icon-list-ol:before              { content: "\f0cb"; }
+.icon-strikethrough:before        { content: "\f0cc"; }
+.icon-underline:before            { content: "\f0cd"; }
+.icon-table:before                { content: "\f0ce"; }
+
+.icon-magic:before                { content: "\f0d0"; }
+.icon-truck:before                { content: "\f0d1"; }
+.icon-pinterest:before            { content: "\f0d2"; }
+.icon-pinterest-sign:before       { content: "\f0d3"; }
+.icon-google-plus-sign:before     { content: "\f0d4"; }
+.icon-google-plus:before          { content: "\f0d5"; }
+.icon-money:before                { content: "\f0d6"; }
+.icon-caret-down:before           { content: "\f0d7"; }
+.icon-caret-up:before             { content: "\f0d8"; }
+.icon-caret-left:before           { content: "\f0d9"; }
+.icon-caret-right:before          { content: "\f0da"; }
+.icon-columns:before              { content: "\f0db"; }
+.icon-sort:before                 { content: "\f0dc"; }
+.icon-sort-down:before            { content: "\f0dd"; }
+.icon-sort-up:before              { content: "\f0de"; }
+
+.icon-envelope-alt:before         { content: "\f0e0"; }
+.icon-linkedin:before             { content: "\f0e1"; }
+.icon-undo:before                 { content: "\f0e2"; }
+.icon-legal:before                { content: "\f0e3"; }
+.icon-dashboard:before            { content: "\f0e4"; }
+.icon-comment-alt:before          { content: "\f0e5"; }
+.icon-comments-alt:before         { content: "\f0e6"; }
+.icon-bolt:before                 { content: "\f0e7"; }
+.icon-sitemap:before              { content: "\f0e8"; }
+.icon-umbrella:before             { content: "\f0e9"; }
+.icon-paste:before                { content: "\f0ea"; }
+
+.icon-user-md:before              { content: "\f200"; }
diff --git a/public/assets/plugins/mxgraph/styles/web/font-awesome/font/README.TXT b/public/assets/plugins/mxgraph/styles/web/font-awesome/font/README.TXT
new file mode 100644
index 0000000..c4b290e
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/web/font-awesome/font/README.TXT
@@ -0,0 +1,8 @@
+This theme comes with support for font-awesome web-font, although the main font files can't be included in template package. 
+To ensure compatibility with this free webfont, please follow these steps:
+1. Download font-awesome from http://fortawesome.github.com/Font-Awesome/ 
+2. Copy content from "font" directory to css/font-awesome/font/ and ensure that these files are present in your template as follows:
+	css/font-awesome/font/fontawesome-webfont.eot
+	css/font-awesome/font/fontawesome-webfont.svg
+	css/font-awesome/font/fontawesome-webfont.ttf
+	css/font-awesome/font/fontawesome-webfont.woff 
diff --git a/public/assets/plugins/mxgraph/styles/web/font-awesome/font/fontawesome-webfont.eot b/public/assets/plugins/mxgraph/styles/web/font-awesome/font/fontawesome-webfont.eot
new file mode 100644
index 0000000000000000000000000000000000000000..89070c1e63c2703b2334023922ecc1664f759b55
GIT binary patch
literal 38708
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
B!ioR@

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/styles/web/font-awesome/font/fontawesome-webfont.svg b/public/assets/plugins/mxgraph/styles/web/font-awesome/font/fontawesome-webfont.svg
new file mode 100644
index 0000000..1245f92
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/web/font-awesome/font/fontawesome-webfont.svg
@@ -0,0 +1,255 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="FontAwesomeRegular" horiz-adv-x="1843" >
+<font-face units-per-em="2048" ascent="1536" descent="-512" />
+<missing-glyph horiz-adv-x="512" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="0" />
+<glyph unicode="&#xd;" horiz-adv-x="512" />
+<glyph unicode=" "  horiz-adv-x="512" />
+<glyph unicode="&#x09;" horiz-adv-x="512" />
+<glyph unicode="&#xa0;" horiz-adv-x="512" />
+<glyph unicode="o" horiz-adv-x="1591" />
+<glyph unicode="&#xa8;" horiz-adv-x="2048" />
+<glyph unicode="&#xa9;" horiz-adv-x="2048" />
+<glyph unicode="&#xae;" horiz-adv-x="2048" />
+<glyph unicode="&#xb4;" horiz-adv-x="2048" />
+<glyph unicode="&#xc6;" horiz-adv-x="2048" />
+<glyph unicode="&#xcd;" horiz-adv-x="2048" />
+<glyph unicode="&#x2000;" horiz-adv-x="784" />
+<glyph unicode="&#x2001;" horiz-adv-x="1569" />
+<glyph unicode="&#x2002;" horiz-adv-x="784" />
+<glyph unicode="&#x2003;" horiz-adv-x="1569" />
+<glyph unicode="&#x2004;" horiz-adv-x="523" />
+<glyph unicode="&#x2005;" horiz-adv-x="392" />
+<glyph unicode="&#x2006;" horiz-adv-x="261" />
+<glyph unicode="&#x2007;" horiz-adv-x="261" />
+<glyph unicode="&#x2008;" horiz-adv-x="196" />
+<glyph unicode="&#x2009;" horiz-adv-x="313" />
+<glyph unicode="&#x200a;" horiz-adv-x="87" />
+<glyph unicode="&#x202f;" horiz-adv-x="313" />
+<glyph unicode="&#x203a;" horiz-adv-x="2048" />
+<glyph unicode="&#x205f;" horiz-adv-x="392" />
+<glyph unicode="&#x2122;" horiz-adv-x="2048" />
+<glyph unicode="&#x221e;" horiz-adv-x="2048" />
+<glyph unicode="&#xe000;" horiz-adv-x="1024" d="M0 0z" />
+<glyph unicode="&#xf000;" horiz-adv-x="1536" d="M6 1489q20 47 70 47h1382q51 0 72 -47q20 -47 -17 -84l-610 -610v-641h248q33 0 55.5 -22.5t22.5 -53.5q0 -33 -22.5 -55.5t-55.5 -22.5h-768q-31 0 -53.5 22.5t-22.5 55.5q0 31 22.5 53.5t53.5 22.5h250v641l-610 610q-37 37 -17 84z" />
+<glyph unicode="&#xf001;" horiz-adv-x="1488" d="M0 213q0 57 27.5 103t72.5 77t98.5 47.5t106.5 16.5q25 0 50.5 -4t50.5 -11v779q0 27 16 48t43 29q23 6 99.5 29t178 52.5t215 62.5t211 60.5t164 46t74.5 18.5q35 0 58.5 -23.5t23.5 -58.5v-1028q0 -59 -27.5 -104.5t-73 -76t-99.5 -47t-105 -16.5t-105.5 16.5t-98.5 47 t-71.5 75.5t-27.5 105q0 57 27.5 103t71.5 77t98.5 47t105.5 16q27 0 52.5 -4t49.5 -10v537l-678 -195v-815q0 -59 -27.5 -104.5t-71.5 -76t-98.5 -47t-105.5 -16.5q-53 0 -106.5 16.5t-98.5 47t-72.5 76t-27.5 104.5z" />
+<glyph unicode="&#xf002;" horiz-adv-x="1597" d="M0 901q0 137 52 258t143.5 212t212 143.5t258.5 52.5q137 0 257.5 -52.5t212 -143.5t143.5 -212t52 -258q0 -98 -28.5 -191.5t-81.5 -174.5l358 -359q18 -18 18 -47q0 -16 -18 -43t-45 -53.5t-53.5 -45t-42.5 -18.5q-29 0 -47 19l-359 358q-82 -53 -175 -81.5t-191 -28.5 q-137 0 -258 52t-212.5 143t-143.5 212t-52 258zM266 901q0 -84 32 -156.5t86 -126t127 -85t155 -31.5t154.5 31.5t126.5 85t86 126t32 156.5q0 82 -32 154.5t-86 127t-126.5 86t-154.5 31.5t-155 -31.5t-127 -86t-86 -127t-32 -154.5zM414 901q0 51 19.5 97t54 81t80 54.5 t98.5 19.5q20 0 34.5 -14.5t14.5 -36.5q0 -20 -14.5 -34.5t-34.5 -14.5q-63 0 -107.5 -44t-44.5 -108q0 -20 -14.5 -34.5t-34.5 -14.5q-23 0 -37 14.5t-14 34.5z" />
+<glyph unicode="&#xf003;" d="M0 115v1306q0 47 34 81t81 34h1614q47 0 80.5 -34t33.5 -81v-1306q0 -47 -33.5 -81t-80.5 -34h-1614q-47 0 -81 34t-34 81zM154 154h1536v852q-31 -31 -58 -50q-106 -80 -212.5 -159.5t-211.5 -163.5q-61 -49 -131.5 -94t-156.5 -45q-82 0 -153 45t-132 94 q-104 84 -211 164t-213 159q-27 18 -57 50v-852zM154 1317q0 -31 14 -65.5t35.5 -66.5t47 -59.5t50.5 -46.5q100 -76 199.5 -150.5t199.5 -152.5q20 -16 48 -37.5t58 -42t59.5 -35t54.5 -14.5h2h2q25 0 54.5 14.5t59 35t57 42t48.5 37.5q100 78 199.5 153t199.5 150 q25 18 50.5 46t47 60t36 66.5t14.5 65.5v65h-1536v-65z" />
+<glyph unicode="&#xf004;" horiz-adv-x="1802" d="M0 1073q0 113 34 205t97.5 155.5t153.5 98.5t202 35q59 0 117 -18.5t110 -48.5t99 -68.5t88 -77.5q39 39 87 77.5t100.5 68.5t109 48.5t115.5 18.5q113 0 204 -35t154.5 -98.5t97 -155.5t33.5 -205q0 -66 -18.5 -130t-51 -124.5t-74.5 -115t-87 -99.5l-615 -612 q-23 -23 -55 -23q-31 0 -57 23l-615 614q-45 45 -87 99.5t-73.5 114t-50 124t-18.5 129.5z" />
+<glyph unicode="&#xf005;" horiz-adv-x="1675" d="M1 959.5q9 27.5 54 33.5l506 74l227 459q20 41 49 41t50 -41l227 -459l506 -74q45 -6 54 -33.5t-23 -60.5l-367 -356l86 -504q8 -45 -15.5 -62.5t-64.5 5.5l-452 237l-453 -237q-41 -23 -64.5 -5.5t-15.5 62.5l86 504l-364 356q-35 33 -26 60.5z" />
+<glyph unicode="&#xf006;" horiz-adv-x="1675" d="M0 948q0 23 18.5 32t36.5 13l506 74l227 459q6 14 20 27.5t30 13.5q18 0 30.5 -13.5t18.5 -27.5l227 -459l506 -74q18 -4 36.5 -13t18.5 -32q0 -14 -7 -26.5t-17 -22.5l-367 -356l86 -504q0 -4 1 -9t1 -12q0 -20 -9 -34.5t-32 -14.5t-41 13l-452 237l-453 -237 q-18 -12 -39 -13q-23 0 -33 14.5t-10 34.5q0 6 1 11.5t1 9.5l86 504l-364 356q-10 10 -18.5 22.5t-8.5 26.5zM289 866l274 -268l-65 -377l340 178l340 -178l-66 377l274 268l-378 56l-170 344l-170 -344z" />
+<glyph unicode="&#xf007;" horiz-adv-x="1566" d="M0 57v387q0 37 18.5 82t48 86t65.5 74t71 43q18 6 66 13.5t102.5 14.5t104.5 13t77 10q-92 59 -144.5 153.5t-52.5 205.5q0 88 34 165.5t91.5 136t135 92.5t165.5 34t166 -34t136.5 -92.5t92 -136t33.5 -165.5q0 -109 -52 -204.5t-144 -154.5q27 -4 77 -10t104 -13 t101 -14.5t68 -13.5q35 -10 70.5 -42t65.5 -74t48.5 -87t18.5 -82v-387q-10 -4 -22.5 -14t-27 -19.5t-27.5 -16.5t-22 -7h-1370q-35 0 -53 21.5t-45 35.5z" />
+<glyph unicode="&#xf008;" d="M0 115v1306q0 47 34 81t81 34h1614q47 0 80.5 -34t33.5 -81v-1306q0 -47 -33.5 -81t-80.5 -34h-1614q-47 0 -81 34t-34 81zM115 154q0 -16 11 -27.5t28 -11.5h153q16 0 27.5 11t11.5 28v153q0 16 -11 27.5t-28 11.5h-153q-16 0 -27.5 -11t-11.5 -28v-153zM115 512 q0 -16 11 -27.5t28 -11.5h153q16 0 27.5 11.5t11.5 27.5v154q0 16 -11 27.5t-28 11.5h-153q-16 0 -27.5 -11.5t-11.5 -27.5v-154zM115 870q0 -16 11 -27.5t28 -11.5h153q16 0 27.5 11.5t11.5 27.5v154q0 16 -11 27.5t-28 11.5h-153q-16 0 -27.5 -11.5t-11.5 -27.5v-154z M115 1229q0 -16 11 -27.5t28 -11.5h153q16 0 27.5 11t11.5 28v153q0 16 -11 27.5t-28 11.5h-153q-16 0 -27.5 -11t-11.5 -28v-153zM461 154q0 -16 11 -27.5t28 -11.5h843q16 0 27.5 11t11.5 28v512q0 16 -11 27.5t-28 11.5h-843q-16 0 -27.5 -11.5t-11.5 -27.5v-512z M461 870q0 -16 11 -27.5t28 -11.5h843q16 0 27.5 11.5t11.5 27.5v512q0 16 -11 27.5t-28 11.5h-843q-16 0 -27.5 -11t-11.5 -28v-512zM1497 154q0 -16 11.5 -27.5t27.5 -11.5h154q16 0 27.5 11t11.5 28v153q0 16 -11.5 27.5t-27.5 11.5h-154q-16 0 -27.5 -11t-11.5 -28v-153 zM1497 512q0 -16 11.5 -27.5t27.5 -11.5h154q16 0 27.5 11.5t11.5 27.5v154q0 16 -11.5 27.5t-27.5 11.5h-154q-16 0 -27.5 -11.5t-11.5 -27.5v-154zM1497 870q0 -16 11.5 -27.5t27.5 -11.5h154q16 0 27.5 11.5t11.5 27.5v154q0 16 -11.5 27.5t-27.5 11.5h-154 q-16 0 -27.5 -11.5t-11.5 -27.5v-154zM1497 1229q0 -16 11.5 -27.5t27.5 -11.5h154q16 0 27.5 11t11.5 28v153q0 16 -11.5 27.5t-27.5 11.5h-154q-16 0 -27.5 -11t-11.5 -28v-153z" />
+<glyph unicode="&#xf009;" d="M0 78v536q0 33 22.5 55.5t55.5 22.5h690q33 0 55.5 -22.5t22.5 -55.5v-536q0 -33 -22.5 -55.5t-55.5 -22.5h-690q-33 0 -55.5 22.5t-22.5 55.5zM0 922v538q0 31 22.5 53.5t55.5 22.5h690q33 0 55.5 -22.5t22.5 -53.5v-538q0 -33 -22.5 -54.5t-55.5 -21.5h-690 q-33 0 -55.5 21.5t-22.5 54.5zM999 78v536q0 33 21.5 55.5t54.5 22.5h692q31 0 53.5 -22.5t22.5 -55.5v-536q0 -33 -22.5 -55.5t-53.5 -22.5h-692q-33 0 -54.5 22.5t-21.5 55.5zM999 922v538q0 31 21.5 53.5t54.5 22.5h692q31 0 53.5 -22.5t22.5 -53.5v-538 q0 -33 -22.5 -54.5t-53.5 -21.5h-692q-33 0 -54.5 21.5t-21.5 54.5z" />
+<glyph unicode="&#xf00a;" d="M0 78v270q0 33 22.5 54.5t55.5 21.5h358q31 0 53.5 -21.5t22.5 -54.5v-270q0 -33 -22.5 -55.5t-53.5 -22.5h-358q-33 0 -55.5 22.5t-22.5 55.5zM0 655v226q0 33 22.5 54t55.5 21h358q31 0 53.5 -21.5t22.5 -53.5v-226q0 -33 -22.5 -55t-53.5 -22h-358q-33 0 -55.5 22.5 t-22.5 54.5zM0 1188v272q0 31 22.5 53.5t55.5 22.5h358q31 0 53.5 -22.5t22.5 -53.5v-272q0 -33 -22.5 -55.5t-53.5 -22.5h-358q-33 0 -55.5 22.5t-22.5 55.5zM666 78v270q0 33 22.5 54.5t54.5 21.5h359q31 0 53.5 -21.5t22.5 -54.5v-270q0 -33 -22.5 -55.5t-53.5 -22.5 h-359q-33 0 -55 22.5t-22 55.5zM666 655v226q0 33 22.5 54t54.5 21h359q31 0 53.5 -21.5t22.5 -53.5v-226q0 -33 -22.5 -55t-53.5 -22h-359q-33 0 -55 22.5t-22 54.5zM666 1188v272q0 31 22.5 53.5t54.5 22.5h359q31 0 53.5 -22.5t22.5 -53.5v-272q0 -33 -22.5 -55.5 t-53.5 -22.5h-359q-33 0 -55 22.5t-22 55.5zM1331 78v270q0 33 22.5 54.5t55.5 21.5h358q31 0 53.5 -21.5t22.5 -54.5v-270q0 -33 -22.5 -55.5t-53.5 -22.5h-358q-33 0 -55.5 22.5t-22.5 55.5zM1331 655v226q0 33 22.5 54t55.5 21h358q31 0 53.5 -21.5t22.5 -53.5v-226 q0 -33 -22.5 -55t-53.5 -22h-358q-33 0 -55.5 22.5t-22.5 54.5zM1331 1188v272q0 31 22.5 53.5t55.5 22.5h358q31 0 53.5 -22.5t22.5 -53.5v-272q0 -33 -22.5 -55.5t-53.5 -22.5h-358q-33 0 -55.5 22.5t-22.5 55.5z" />
+<glyph unicode="&#xf00b;" d="M0 78v270q0 33 22.5 54.5t55.5 21.5h297q31 0 53.5 -21.5t22.5 -54.5v-270q0 -33 -22.5 -55.5t-53.5 -22.5h-297q-33 0 -55.5 22.5t-22.5 55.5zM0 655v226q0 33 22.5 54t55.5 21h297q31 0 53.5 -21.5t22.5 -53.5v-226q0 -33 -22.5 -55t-53.5 -22h-297q-33 0 -55.5 22.5 t-22.5 54.5zM0 1188v272q0 31 22.5 53.5t55.5 22.5h297q31 0 53.5 -22.5t22.5 -53.5v-272q0 -33 -22.5 -55.5t-53.5 -22.5h-297q-33 0 -55.5 22.5t-22.5 55.5zM604 78v270q0 33 22.5 54.5t55.5 21.5h1085q31 0 53.5 -21.5t22.5 -54.5v-270q0 -33 -22.5 -55.5t-53.5 -22.5 h-1085q-33 0 -55.5 22.5t-22.5 55.5zM604 655v226q0 33 22.5 54t55.5 21h1085q31 0 53.5 -21.5t22.5 -53.5v-226q0 -33 -22.5 -55t-53.5 -22h-1085q-33 0 -55.5 22.5t-22.5 54.5zM604 1188v272q0 31 22.5 53.5t55.5 22.5h1085q31 0 53.5 -22.5t22.5 -53.5v-272 q0 -33 -22.5 -55.5t-53.5 -22.5h-1085q-33 0 -55.5 22.5t-22.5 55.5z" />
+<glyph unicode="&#xf00c;" d="M0 732.5q0 33.5 23 55.5l174 175q23 23 56.5 22.5t55.5 -22.5l365 -365q23 -23 56.5 -23t55.5 23l746 745q23 23 56.5 23t56.5 -23l174 -174q23 -23 22.5 -56.5t-22.5 -55.5l-910 -910q-23 -23 -62.5 -39t-72.5 -16h-88q-35 0 -75 16.5t-62 38.5l-526 529 q-23 23 -23 56.5z" />
+<glyph unicode="&#xf00d;" horiz-adv-x="1536" d="M0 192.5q0 38.5 29 67.5l508 510l-508 500q-29 29 -29 67.5t29 67.5l100 100q29 29 68 29t67 -29l504 -504l504 504q29 29 67.5 29t67.5 -29l100 -100q29 -29 29 -68t-29 -67l-508 -510l508 -500q29 -29 29 -66.5t-29 -66.5l-100 -102q-29 -29 -68 -29t-67 29l-504 505 l-506 -505q-29 -29 -66.5 -29t-66.5 29l-100 100q-29 29 -29 67.5z" />
+<glyph unicode="&#xf00e;" horiz-adv-x="1597" d="M0 901q0 137 52 258t143.5 212t212 143.5t258.5 52.5q137 0 259 -52.5t212 -143.5t142 -212t52 -258q0 -102 -28.5 -195.5t-81.5 -170.5l358 -359q18 -18 18 -46t-18 -48l-94 -94q-20 -18 -48 -18.5t-46 18.5l-359 358q-78 -53 -171 -81.5t-195 -28.5q-137 0 -258 52 t-212.5 142t-143.5 211t-52 260zM266 901q0 -84 32 -156.5t86 -126t127 -85t155 -31.5t155.5 31.5t126.5 85t85 126t32 156.5q0 82 -32 154.5t-85 127t-126.5 86t-155.5 31.5t-155 -31.5t-127 -86t-86 -127t-32 -154.5zM399 868v66q0 33 33 33h168v168q0 33 33 32h65 q14 0 24.5 -9t10.5 -23v-168h166q33 0 33 -33v-66q0 -14 -9.5 -24t-23.5 -10h-166v-166q0 -14 -10 -23.5t-25 -9.5h-65q-33 0 -33 33v166h-168q-14 0 -23.5 10t-9.5 24z" />
+<glyph unicode="&#xf010;" horiz-adv-x="1597" d="M0 901q0 137 52 258t143.5 212t212 143.5t258.5 52.5q137 0 259 -52.5t212 -143.5t142 -212t52 -258q0 -102 -28.5 -195.5t-81.5 -170.5l358 -359q18 -18 18 -46t-18 -48l-94 -94q-20 -18 -48 -18.5t-46 18.5l-359 358q-78 -53 -171 -81.5t-195 -28.5q-137 0 -258 52 t-212.5 142t-143.5 211t-52 260zM266 901q0 -84 32 -156.5t86 -126t127 -85t155 -31.5t155.5 31.5t126.5 85t85 126t32 156.5q0 82 -32 154.5t-85 127t-126.5 86t-155.5 31.5t-155 -31.5t-127 -86t-86 -127t-32 -154.5zM399 868v66q0 33 33 33h467q33 0 33 -33v-66 q0 -14 -9.5 -24t-23.5 -10h-467q-14 0 -23.5 10t-9.5 24z" />
+<glyph unicode="&#xf011;" horiz-adv-x="1488" d="M0 713q0 186 86 349t240 267q12 10 28 6q18 -4 25 -16l90 -131q10 -12 6 -27.5t-16 -25.5q-106 -72 -164.5 -182.5t-58.5 -239.5q0 -104 39.5 -197.5t108.5 -162t162 -108.5t197 -40t197.5 40t163.5 108.5t109.5 161.5t39.5 198q0 129 -59 239.5t-164 182.5 q-14 10 -16 24q-4 16 6 29l88 131q10 12 25.5 15t29.5 -5q154 -104 240 -267t86 -349q0 -154 -58.5 -289t-160 -236.5t-237.5 -160t-290 -58.5t-289 58.5t-236 160t-159.5 236.5t-58.5 289zM627 793v704q0 16 11 27.5t28 11.5h157q16 0 27.5 -11.5t11.5 -27.5v-704 q0 -16 -11 -27.5t-28 -11.5h-157q-16 0 -27.5 11t-11.5 28z" />
+<glyph unicode="&#xf012;" d="M0 39v260q0 16 11.5 27.5t27.5 11.5h192q16 0 26.5 -11.5t10.5 -27.5v-260q0 -16 -10 -27.5t-27 -11.5h-192q-39 0 -39 39zM393 39v434q0 16 11.5 27.5t27.5 11.5h193q16 0 26.5 -11.5t10.5 -27.5v-434q0 -16 -10.5 -27.5t-26.5 -11.5h-193q-16 0 -27.5 11.5t-11.5 27.5z M786 39v676q0 16 11.5 27.5t27.5 11.5h193q16 0 27.5 -11.5t11.5 -27.5v-676q0 -16 -11.5 -27.5t-27.5 -11.5h-193q-16 0 -27.5 11.5t-11.5 27.5zM1182 39v995q0 16 10 27.5t27 11.5h192q16 0 27.5 -11t11.5 -28v-995q0 -16 -11.5 -27.5t-27.5 -11.5h-192q-16 0 -26.5 11.5 t-10.5 27.5zM1575 39v1458q0 39 39 39h190q39 0 39 -39v-1458q0 -39 -39 -39h-190q-39 0 -39 39z" />
+<glyph unicode="&#xf013;" horiz-adv-x="1593" d="M0 651v236q0 12 30.5 21.5t68.5 15.5t74 9t48 5q18 61 49 117q-55 82 -120 157l-7 15q0 8 28 38.5t62.5 65.5t66.5 62.5t40 27.5q2 0 26.5 -18.5t54.5 -41t56.5 -43t32.5 -24.5q29 16 58.5 26.5t60.5 20.5q0 12 3 49t9 75t15.5 69t21.5 31h237q14 0 19 -15 q12 -49 17 -103t14 -106q31 -8 59.5 -19t56.5 -28q8 6 34 26.5t55.5 43t53 40t29.5 17.5t37 -27.5t65 -62.5t61.5 -65.5t27.5 -38.5q0 -4 -17.5 -28.5t-39 -53.5t-42 -55.5t-24.5 -32.5q33 -55 51 -123q49 -10 103.5 -13t101.5 -20q16 -4 16 -18v-236q0 -12 -29.5 -21.5 t-68.5 -15.5t-76 -9t-49 -5q-14 -57 -47 -117q55 -82 121 -157l6 -15q0 -8 -27.5 -38.5t-62.5 -65.5t-66.5 -62.5t-40.5 -27.5q-2 0 -26.5 18.5t-54 41t-56 43t-33.5 24.5q-29 -16 -58.5 -27.5t-59.5 -19.5q-2 -12 -5.5 -49.5t-9.5 -76t-14 -69.5t-21 -31h-237q-14 0 -19 17 q-14 49 -19 103t-11 103q-61 18 -117 50q-41 -31 -81 -60.5t-79 -62.5l-12 -4q-6 0 -37 27.5t-64.5 62.5t-61 65.5t-27.5 38.5q0 2 16 26.5t37.5 53.5t42 55.5t26.5 34.5q-33 55 -51 123q-51 10 -104.5 13t-100.5 20q-16 4 -16 18zM557 768q0 -49 18.5 -93t51 -77t77 -52.5 t93.5 -19.5t93 19.5t75.5 52.5t51 77t19.5 93t-19.5 92t-51 76t-75.5 51.5t-93 18.5t-93.5 -18.5t-77 -51.5t-51 -76t-18.5 -92z" />
+<glyph unicode="&#xf014;" horiz-adv-x="1304" d="M0 1175.5v34.5v36t2 36q25 14 71 23.5t98 15.5t102.5 9t78.5 5q-8 82 11.5 128t59.5 68.5t98.5 29t131.5 6.5q55 0 109.5 -3t97.5 -20.5t68.5 -54.5t25.5 -105v-24t-2 -25q29 -2 79 -5t102.5 -9t99.5 -15.5t72 -23.5v-72v-69q-37 -20 -123 -32.5t-185.5 -19t-193.5 -7.5 t-150 -1q-55 0 -150 1t-194.5 7.5t-184.5 18.5t-122 33q-2 16 -2 34.5zM133 154v837q123 -16 244 -21t244 -5h32q129 2 258 6t258 20v-837q0 -63 -44 -108.5t-107 -45.5h-731q-63 0 -108.5 45t-45.5 109zM303 199q0 -16 10.5 -26.5t26.5 -10.5h39q16 0 27.5 10t11.5 27v614 q0 16 -11.5 27.5t-27.5 11.5h-39q-16 0 -26.5 -11.5t-10.5 -27.5v-614zM504 1384q0 -10 1 -22t3 -23q144 2 291 0q0 12 2 23.5t0 21.5v15q-35 10 -74 11t-74 1q-37 0 -75.5 -1t-73.5 -11v-15zM596 199q0 -16 10 -26.5t27 -10.5h39q16 0 27.5 10t11.5 27v614q0 16 -11.5 27.5 t-27.5 11.5h-39q-16 0 -26.5 -11.5t-10.5 -27.5v-614zM887 199q0 -16 11 -26.5t28 -10.5h39q16 0 27.5 10t11.5 27v614q0 16 -11.5 27.5t-27.5 11.5h-39q-16 0 -27.5 -11.5t-11.5 -27.5v-614z" />
+<glyph unicode="&#xf015;" horiz-adv-x="1880" d="M0 809.5q2 15.5 14 26.5l867 710q27 20 59 21q33 0 59 -21l240 -196v102q0 16 11.5 27.5t27.5 11.5h223q16 0 26.5 -11.5t10.5 -27.5v-348l328 -268q12 -10 14 -25.5t-8 -28.5l-45 -53q-10 -14 -29 -14h-65q-16 0 -25 8l-743 608q-25 20 -50 0l-743 -608q-8 -8 -25 -8 h-65q-18 0 -29 14l-45 53q-10 12 -8 27.5zM266 76v622l674 553l674 -553v-622q0 -33 -21.5 -54.5t-54.5 -21.5h-422v498h-352v-498h-422q-33 0 -54.5 21.5t-21.5 54.5z" />
+<glyph unicode="&#xf016;" horiz-adv-x="1228" d="M0 78v1382q0 31 22.5 53.5t55.5 22.5h614q33 0 71 -16.5t60 -38.5l351 -351q23 -23 39 -60.5t16 -70.5v-921q0 -33 -22.5 -55.5t-53.5 -22.5h-1075q-33 0 -55.5 22.5t-22.5 55.5zM154 154h921v692h-459q-31 0 -53 22.5t-22 55.5v458h-387v-1228zM268 326v116h693v-116 h-693zM268 596v115h693v-115h-693zM694 999h381q0 4 -4 13.5t-6 11.5l-350 348q-2 4 -9.5 6t-11.5 4v-383z" />
+<glyph unicode="&#xf017;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM240 768q0 -117 44 -218t119.5 -177t177 -120t218.5 -44t218 44t177 120t120 177 t44 218t-44 218t-120 177t-177.5 120t-217.5 44q-117 0 -218.5 -44t-177 -120t-119.5 -177t-44 -218zM635 608v465q0 33 23.5 56.5t56.5 23.5h80q35 0 57 -23.5t22 -56.5v-305h201q33 0 56.5 -23.5t23.5 -56.5v-80q0 -33 -23.5 -56.5t-56.5 -23.5h-360q-33 0 -56.5 23.5 t-23.5 56.5z" />
+<glyph unicode="&#xf018;" d="M2 35l594 1466q6 14 21.5 24.5t31.5 10.5h195l-8 -170h172l-9 170h195q16 0 31.5 -10t21.5 -25l594 -1466q6 -14 -1 -24.5t-23 -10.5h-740l-26 512h-258l-27 -512h-739q-16 0 -23.5 10t-1.5 25zM807 797h229l-20 413h-189z" />
+<glyph unicode="&#xf019;" d="M0 39v614q0 16 11.5 27.5t27.5 11.5h229q16 0 27.5 -11t11.5 -28v-346h1229v346q0 16 11.5 27.5t27.5 11.5h229q16 0 27.5 -11t11.5 -28v-614q0 -39 -39 -39h-1765q-39 0 -39 39zM345.5 944.5q6.5 16.5 39.5 16.5h307v499q0 31 21.5 53.5t54.5 22.5h307q33 0 55.5 -22.5 t22.5 -53.5v-499h307q31 0 37 -16.5t-16 -39.5l-504 -506q-23 -23 -55.5 -22.5t-55.5 22.5l-504 506q-23 23 -16.5 39.5z" />
+<glyph unicode="&#xf01a;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM240 768q0 -117 44 -218t119.5 -177t177 -120t218.5 -44t218 44t177 120t120 177 t44 218t-44 218t-120 177t-177.5 120t-217.5 44q-117 0 -218.5 -44t-177 -120t-119.5 -177t-44 -218zM414 743q10 25 37 25h208v358q0 16 11.5 28.5t27.5 12.5h201q16 0 27.5 -12t11.5 -29v-358h209q27 0 37 -25t-10 -43l-347 -346q-14 -10 -28 -10t-29 10l-346 346 q-20 18 -10 43z" />
+<glyph unicode="&#xf01b;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM240 768q0 -117 44 -218t119.5 -177t177 -120t218.5 -44t218 44t177 120t120 177 t44 218t-44 218t-120 177t-177 120t-218 44t-218.5 -44t-177 -120t-119.5 -177t-44 -218zM414 793q-10 25 10 43l346 346q14 10 29 10q14 0 28 -10l347 -346q20 -18 10 -43t-37 -25h-209v-360q0 -16 -11.5 -27.5t-27.5 -11.5h-201q-16 0 -27.5 11t-11.5 28v360h-208 q-27 0 -37 25z" />
+<glyph unicode="&#xf01c;" d="M0 78v577q0 33 9 76t22 72l284 663q12 29 44 49.5t63 20.5h999q31 0 63 -20.5t44 -49.5l284 -663q12 -29 21.5 -72t9.5 -76v-577q0 -33 -22.5 -55.5t-53.5 -22.5h-1689q-33 0 -55.5 22.5t-22.5 55.5zM238 694h387l114 -231h383l117 231h367q-2 4 -2 9.5t-2 9.5l-256 594 h-848l-256 -596q-2 -2 -2 -7.5t-2 -9.5z" />
+<glyph unicode="&#xf01d;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM240 768q0 -117 44 -218t119.5 -177t177 -120t218.5 -44t218 44t177 120t120 177 t44 218t-44 218t-120 177t-177.5 120t-217.5 44q-117 0 -218.5 -44t-177 -120t-119.5 -177t-44 -218zM582 453v628q0 18 16 29q20 8 31 0l545 -315q16 -6 16 -27q0 -20 -16 -27l-545 -315q-8 -4 -15 -4q-8 0 -16 4q-16 10 -16 27z" />
+<glyph unicode="&#xf01e;" horiz-adv-x="1591" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5q141 0 271 -48.5t239 -140.5l161 162q35 35 58.5 24.5t23.5 -57.5v-463q0 -33 -22 -55q-10 -10 -23.5 -16t-29.5 -6h-463q-47 0 -58.5 23.5t23.5 58.5l160 159q-72 57 -159 88t-181 31q-117 0 -218.5 -44t-177 -120 t-119.5 -177t-44 -218t44 -218t119.5 -177t177 -120t218.5 -44q104 0 198.5 37t169 101.5t123.5 153.5t64 191q0 16 14 27q14 10 31 8l157 -20q16 -4 26.5 -16.5t8.5 -28.5q-20 -147 -89.5 -274.5t-176 -220.5t-242 -145.5t-284.5 -52.5q-166 0 -311.5 62.5t-254 171 t-171 254t-62.5 311.5z" />
+<glyph unicode="&#xf021;" horiz-adv-x="1916" d="M6 311l150 437q10 33 39 45t59 4l438 -150q45 -16 46 -40.5t-42 -47.5l-202 -100q53 -78 123.5 -134.5t160.5 -86.5q111 -37 221.5 -28t207 56t170 129t110.5 193q6 16 20.5 22t30.5 2l152 -51q16 -6 23 -20.5t1 -30.5q-53 -158 -159.5 -274.5t-243.5 -184t-296 -81 t-315 39.5q-135 47 -241.5 134t-179.5 208l-205 -100q-43 -23 -63.5 -5.5t-4.5 64.5zM203 1024q53 156 159.5 273.5t243.5 185t295 81t316 -39.5q133 -47 240.5 -134t180.5 -208l205 100q43 23 63.5 5.5t4.5 -62.5l-150 -439q-10 -33 -39 -45t-59 -4l-438 150 q-45 16 -46 40.5t40 47.5l202 100q-51 78 -122.5 134.5t-159.5 86.5q-111 37 -221.5 28t-207 -56t-170 -129t-110.5 -193q-6 -16 -20.5 -22t-30.5 -2l-152 51q-16 6 -23 20.5t-1 30.5z" />
+<glyph unicode="&#xf022;" d="M0 115v1306q0 47 34 81t81 34h1614q47 0 80.5 -34t33.5 -81v-1306q0 -47 -33.5 -81t-80.5 -34h-1614q-47 0 -81 34t-34 81zM154 154h1536v1075h-1536v-1075zM307 346v76q0 39 39 39h154q16 0 27.5 -11.5t11.5 -27.5v-76q0 -16 -11.5 -27.5t-27.5 -11.5h-154q-39 0 -39 39 zM307 653v76q0 39 39 39h154q16 0 27.5 -11.5t11.5 -27.5v-76q0 -16 -11.5 -27.5t-27.5 -11.5h-154q-39 0 -39 39zM307 961v75q0 39 39 39h154q16 0 27.5 -11t11.5 -28v-75q0 -16 -11.5 -27.5t-27.5 -11.5h-154q-39 0 -39 39zM692 346v76q0 16 10.5 27.5t26.5 11.5h768 q39 0 39 -39v-76q0 -39 -39 -39h-768q-16 0 -26.5 11.5t-10.5 27.5zM692 653v76q0 16 10.5 27.5t26.5 11.5h768q39 0 39 -39v-76q0 -39 -39 -39h-768q-16 0 -26.5 11.5t-10.5 27.5zM692 961v75q0 16 10.5 27.5t26.5 11.5h768q39 0 39 -39v-75q0 -39 -39 -39h-768 q-16 0 -26.5 11t-10.5 28z" />
+<glyph unicode="&#xf023;" horiz-adv-x="1253" d="M0 117v626q0 39 21.5 69t56.5 42v164q0 113 43 213t117.5 175t175 118t213.5 43t213 -43t175 -118t118 -175.5t43 -212.5v-164q35 -12 56 -42t21 -69v-626q0 -47 -34.5 -82t-81.5 -35h-1020q-47 0 -82 35t-35 82zM313 862h627v156q0 66 -24.5 123t-67.5 99t-100.5 66.5 t-120.5 24.5q-66 0 -122 -24.5t-99.5 -66.5t-68 -99.5t-24.5 -122.5v-156zM494 164h266l-66 285q29 18 47.5 48.5t18.5 65.5q0 55 -39 95t-94 40t-94 -40t-39 -95q0 -35 18 -65.5t47 -46.5z" />
+<glyph unicode="&#xf024;" d="M0 1382q0 63 45 108.5t109 45.5q63 0 108 -45.5t45 -108.5q0 -41 -20.5 -74.5t-55.5 -56.5v-1212q0 -16 -11 -27.5t-27 -11.5h-78q-16 0 -26.5 11.5t-10.5 27.5v1212q-35 23 -56.5 56.5t-21.5 74.5zM307 416v745q0 33 19.5 66t48.5 49q104 55 188 86t144 45q70 16 124 18 q68 0 124.5 -11t107.5 -29.5t99 -43t100 -51.5q63 -29 145 -33q70 -4 164 15.5t207 87.5q29 16 47 6t18 -43v-748q0 -31 -18.5 -64.5t-46.5 -49.5q-113 -68 -207 -87.5t-164 -15.5q-82 4 -145 33q-51 27 -99.5 51.5t-99.5 43t-107.5 29.5t-124.5 11q-55 -2 -124 -18 q-59 -14 -143.5 -45t-188.5 -88q-29 -16 -48.5 -4t-19.5 45z" />
+<glyph unicode="&#xf025;" horiz-adv-x="1916" d="M0 729q0 172 85 324.5t221 266.5t307 180.5t345 66.5t345.5 -66.5t307.5 -180.5t221 -266.5t85 -326.5q0 -182 -78 -350l-27 -60l-174 -26q-27 -104 -110.5 -173t-196.5 -69v-41q0 -16 -12 -27.5t-29 -11.5h-80q-16 0 -27.5 11.5t-11.5 27.5v719q0 16 11.5 28.5 t27.5 12.5h80q16 0 28.5 -12.5t12.5 -28.5v-39q88 0 161 -44t114 -116l39 7q33 90 32 192q0 125 -65.5 233.5t-170 190.5t-232.5 129t-251 47t-250.5 -47t-232 -128t-170 -190.5t-65.5 -232.5q0 -104 32 -194l39 -7q41 72 114 116t161 44v39q0 16 12 28.5t29 12.5h80 q16 0 27 -12.5t11 -28.5v-719q0 -16 -11 -27.5t-27 -11.5h-80q-16 0 -28.5 11.5t-12.5 27.5v41q-55 0 -106.5 18.5t-91.5 50.5t-68.5 76t-40.5 97l-175 26l-26 60q-78 168 -78 352z" />
+<glyph unicode="&#xf026;" horiz-adv-x="905" d="M0 578v380q0 16 11.5 27.5t27.5 11.5h420l325 326q49 51 84 37t35 -86v-1012q0 -72 -34.5 -86t-84.5 37l-325 326h-420q-16 0 -27.5 11t-11.5 28z" />
+<glyph unicode="&#xf027;" horiz-adv-x="1277" d="M0 578v380q0 16 11.5 27.5t27.5 11.5h420l325 326q49 51 84 37t35 -86v-1012q0 -72 -34.5 -86t-84.5 37l-325 326h-420q-16 0 -27.5 11t-11.5 28zM1027 406q-9 32 7 61q84 145 84 301t-84 301q-16 29 -7 61t38 48t60.5 8t48.5 -37q104 -182 104 -381q0 -201 -104 -381 q-23 -41 -70 -41q-20 0 -39 12q-29 16 -38 48z" />
+<glyph unicode="&#xf028;" horiz-adv-x="1916" d="M0 578v380q0 16 11.5 27.5t27.5 11.5h420l325 326q49 51 84 37t35 -86v-1012q0 -72 -34.5 -86t-84.5 37l-325 326h-420q-16 0 -27.5 11t-11.5 28zM1027 406q-9 32 7 61q84 145 84 301t-84 301q-16 29 -7 61t38 48t60.5 8t48.5 -37q104 -182 104 -381q0 -201 -104 -381 q-23 -41 -70 -41q-20 0 -39 12q-29 16 -38 48zM1285 219q-7 33 11 62q141 225 142 487q0 262 -142 487q-18 29 -11 62t36 49q29 18 61 11t50 -36q82 -131 123.5 -275t41.5 -298q0 -309 -167 -573q-10 -18 -29 -27.5t-37 -9.5q-25 0 -43 12q-29 16 -36 49zM1540 33 q-6 33 12 59q100 154 152.5 325t52.5 351t-52 351t-153 323q-18 29 -12 61.5t35 50.5q29 16 61 10.5t50 -32.5q115 -174 173 -366.5t58 -397.5t-58.5 -397.5t-172.5 -364.5q-10 -18 -29 -27.5t-37 -9.5q-25 0 -45 13q-29 18 -35 51z" />
+<glyph unicode="&#xf029;" horiz-adv-x="1536" d="M0 0v698h698v-698h-698zM0 838v698h698v-698h-698zM139 139h420v420h-420v-420zM139 977h420v420h-420v-420zM279 279v141h141v-141h-141zM279 1116v139h141v-139h-141zM838 0v698h417v-139h142v139h139v-419h-420v139h-139v-418h-139zM838 838v698h698v-698h-698z M977 977h420v420h-420v-420zM1116 0v139h139v-139h-139zM1116 1116v139h139v-139h-139zM1397 0v139h139v-139h-139z" />
+<glyph unicode="&#xf02a;" d="M0 0v1536h154v-1536h-154zM227 0v1536h37v-1536h-37zM356 0v1536h117v-1536h-117zM545 0v1536h78v-1536h-78zM715 0v1536h76v-1536h-76zM903 0v1536h37v-1536h-37zM1014 0v1536h153v-1536h-153zM1221 0v1536h77v-1536h-77zM1409 0v1536h39v-1536h-39zM1579 0v1536h37 v-1536h-37zM1690 0v1536h153v-1536h-153z" />
+<glyph unicode="&#xf02b;" horiz-adv-x="1488" d="M0 961v454q0 49 35 85t86 36h454q51 0 113 -24.5t94 -61.5l672 -748q33 -39 34 -88t-34 -84l-526 -526q-35 -35 -86 -36t-86 36l-670 750q-35 37 -60.5 96t-25.5 111zM197 1223q0 -49 33.5 -83t82.5 -34t83 34t34 83t-34 82.5t-83 33.5t-82.5 -33.5t-33.5 -82.5z" />
+<glyph unicode="&#xf02c;" horiz-adv-x="1875" d="M0 961v454q0 49 35 85t86 36h454q25 0 53.5 -6t57.5 -18.5t54.5 -28t41.5 -33.5l670 -748q33 -37 34 -86t-34 -84l-526 -524q-35 -35 -86.5 -37t-83.5 37l-670 746q-35 39 -60.5 98t-25.5 109zM195 1223q0 -47 34.5 -82t83.5 -35q47 0 82 35t35 82q0 49 -35 83.5 t-82 34.5q-49 0 -83.5 -34.5t-34.5 -83.5zM791 1534h174q51 0 112.5 -24.5t93.5 -61.5l670 -748q35 -37 35 -87t-35 -85l-524 -524q-35 -35 -86 -36t-86 36l-12 14l514 514q35 35 34.5 84.5t-34.5 85.5l-670 748q-31 35 -84 56.5t-102 27.5z" />
+<glyph unicode="&#xf02d;" horiz-adv-x="1710" d="M10 311q2 16 4 31.5t4 34.5q0 10 -4 20.5t-2 20.5q2 16 15.5 31.5t25.5 35.5q23 37 45.5 90.5t32.5 92.5q4 16 -1 30.5t-1 26.5q4 16 16.5 27.5t20.5 23.5q10 18 21.5 42t21.5 49.5t16 50t8 40.5t-2 33t0 29q6 16 20.5 26.5t24.5 24.5q10 12 21.5 34.5t23 49.5t19.5 52.5 t10 45.5q2 12 -4 24.5t-2 27.5q4 14 18.5 29.5t26.5 31.5q16 25 28.5 58.5t30 61t46 43t77.5 1.5l-2 -4q31 10 54 10h780q78 0 119 -57q41 -53 18 -129l-283 -906q-18 -63 -77.5 -107t-126.5 -44h-893q-10 0 -20.5 -2t-18.5 -12q-12 -20 0 -56q16 -43 60 -75.5t87 -32.5h946 q29 0 57.5 21.5t37.5 47.5l309 987q4 16 5 29.5t-1 28.5q41 -14 61 -43q41 -53 19 -129l-283 -905q-18 -66 -77.5 -109t-127.5 -43h-946q-41 0 -79.5 14.5t-73.5 39t-61.5 58t-41.5 72.5q-25 68 -2 127zM500 961q-10 -39 26 -39h615q16 0 30.5 11t18.5 28l24 75 q4 16 -3 27.5t-23 11.5h-615q-16 0 -31.5 -11t-19.5 -28zM569 1190q-4 -16 3.5 -26.5t23.5 -10.5h614q16 0 30.5 10.5t21.5 26.5l22 78q4 16 -3 27.5t-24 11.5h-614q-16 0 -30.5 -11.5t-20.5 -27.5z" />
+<glyph unicode="&#xf02e;" horiz-adv-x="1253" d="M0 84v1337q0 47 34 81t81 34h1024q47 0 80.5 -34t33.5 -81v-1337q0 -47 -33.5 -81t-80.5 -34t-80 33l-432 432l-432 -432q-33 -33 -80 -33t-81 34t-34 81z" />
+<glyph unicode="&#xf02f;" d="M0 39v346q0 47 18.5 89t50 73t73.5 49t89 18h1383q47 0 89 -18t72.5 -49t49 -73t18.5 -89v-346q0 -39 -39 -39h-1765q-39 0 -39 39zM268 193q0 -16 11.5 -26.5t27.5 -10.5h1229q16 0 27.5 10t11.5 27v38q0 16 -11.5 27.5t-27.5 11.5h-1229q-16 0 -27.5 -11t-11.5 -28v-38 zM307 729v731q0 31 22.5 53.5t55.5 22.5h651v-383q0 -49 34 -83t81 -34h385v-307h-1229zM1151 1153v383l385 -383h-385z" />
+<glyph unicode="&#xf030;" d="M0 115v1075q0 47 34 82t81 35h366l58 125q18 43 66 73.5t95 30.5h443q47 0 95 -30.5t67 -73.5l57 -125h367q47 0 80.5 -35t33.5 -82v-1075q0 -47 -33.5 -81t-80.5 -34h-1614q-47 0 -81 34t-34 81zM442 653q0 -100 38 -187t102.5 -152.5t153 -103.5t186.5 -38t186 38 t152.5 103.5t102.5 152.5t38 187q0 98 -38 186.5t-102.5 153t-152.5 102.5t-186 38t-186.5 -38t-153 -102.5t-102.5 -152.5t-38 -187zM596 653q0 68 25.5 127.5t69.5 103.5t103.5 69.5t127.5 25.5t127 -25.5t103 -69.5t69.5 -103.5t25.5 -127.5t-25.5 -127t-69.5 -104 t-103.5 -70.5t-126.5 -25.5q-68 0 -127.5 25.5t-103.5 70.5t-69.5 104.5t-25.5 126.5z" />
+<glyph unicode="&#xf031;" horiz-adv-x="1644" d="M0 0l2 80q10 4 29.5 8t48.5 8q92 18 108 33q16 10 50 68l233 614l277 725h73h53l11 -20l202 -482q33 -78 64 -151.5t59 -145.5q29 -72 52.5 -130t42.5 -103q12 -29 28.5 -70t36.5 -94q23 -66 64 -150q25 -49 34 -57q20 -18 68 -24q25 -2 49.5 -9.5t52.5 -17.5 q6 -37 7 -55v-10.5t-3 -16.5q-43 0 -90 2t-98 6q-53 4 -99 6t-87 2h-80t-53 -2l-199 -10l-57 -2q0 20 1 39.5t3 38.5l129 26q57 14 67 25q12 8 13 27q0 14 -7 30l-47 115l-90 227l-446 2q-12 -29 -37 -96t-66 -178q-23 -63 -22 -84q0 -27 16 -43q14 -10 40 -17.5t63 -13.5 q14 -4 84 -12v-59q0 -16 -2 -27q-35 0 -121 5t-224 16l-49 -9q-43 -8 -83 -11t-81 -3h-20zM549 655q135 -2 216 -4t105 0l29 2q-18 51 -40.5 111.5t-51.5 130.5t-51.5 122t-38.5 87z" />
+<glyph unicode="&#xf032;" horiz-adv-x="1419" d="M0 0l2 94q27 6 68 12q39 6 69.5 13.5t55.5 17.5q8 14 13 26.5t7 24.5q6 33 8 81t2 112l-2 498q-2 39 -3 139t-5 266q-4 88 -12 109q-4 8 -13 10q-20 14 -69 16q-23 0 -115 13l-4 84l262 6l383 12h45q8 2 15.5 2h13.5t21.5 -1t39.5 -1h76q92 0 193 -27q18 -4 42.5 -13 t53.5 -26q63 -31 104 -75q45 -47 66 -105q10 -29 15 -58.5t5 -62.5q0 -72 -32 -129q-31 -57 -95 -104q-16 -12 -54 -30.5t-97 -47.5q178 -41 268 -145q92 -104 92 -236q0 -72 -28 -162q-23 -66 -72 -116q-66 -72 -141 -109q-78 -35 -205 -59q-70 -12 -199 -11l-199 5 q-63 2 -138 -2.5t-163 -10.5q-25 -2 -93 -4t-181 -6zM537 1419q0 -12 1 -31.5t3 -44.5q2 -51 4 -119.5t0 -158.5v-98v-78q25 -4 52.5 -6t57.5 -2q176 0 267 65q90 66 90 225q0 113 -86 187q-84 76 -258 76q-53 0 -131 -15zM545 457l4 -271q0 -16 10 -43q74 -33 141 -32 q131 0 220 41q82 39 122 112q18 37 28.5 82t10.5 100q0 113 -43 181q-59 94 -141 125q-80 33 -250 32q-37 0 -61.5 -3t-40.5 -7v-143v-174z" />
+<glyph unicode="&#xf033;" horiz-adv-x="1054" d="M0 0l18 84q12 4 32 9t46 11q41 10 71 19.5t50 19.5q29 39 41 103l29 137l57 268l12 64q23 119 41.5 178t18.5 63l30 156l17 64l22 135l9 49v39q-45 23 -148 28q-14 0 -23.5 1.5t-17.5 1.5l21 104l325 -14q31 -2 49.5 -2h26.5q35 0 89 2t132 6q41 4 68.5 6t38.5 2 q-2 -10 -3 -19.5t-3 -19.5q-4 -10 -7.5 -22.5t-7.5 -28.5q-49 -16 -110 -31q-66 -16 -105 -31q-12 -33 -24 -88q-6 -25 -9.5 -45t-5.5 -37q-23 -100 -40 -175.5t-27 -129.5l-64 -311l-39 -158l-43 -235l-14 -45v-10.5t2 -16.5q35 -8 64.5 -13t58.5 -9q4 0 21.5 -2.5 l45.5 -6.5q-2 -18 -3 -32.5t-3 -26.5q-2 -6 -4 -16.5t-6 -22.5q-8 0 -14 -1t-10 -1q-18 -2 -28.5 -2h-14.5h-11.5t-17.5 4q-8 0 -45 4t-105 12l-202 2q-61 0 -181 -12q-39 -4 -63.5 -6t-36.5 -2z" />
+<glyph unicode="&#xf034;" d="M0 1151q14 37 34.5 110.5t45.5 184.5q8 33 13 54.5t9 31.5h58q4 -6 6 -10t4 -9q29 -57 41 -71q16 -4 129 -4q35 0 66.5 1t60.5 1l20 2l113 2l213 -2h289l55 10q10 8 27 53q2 6 4 12.5t6 16.5l43 2h10.5t16.5 -2q2 -39 1 -97.5t1 -138.5v-100v-57q0 -14 -1 -27.5t-3 -23.5 q-20 -8 -37 -11.5t-31 -7.5q-27 51 -53 129q-29 82 -37 92q-12 14 -27 21q-10 4 -60 4h-138h-31t-35 -4q-6 -43 -6 -72l2 -151v-334l2 -359v-147q0 -72 10 -117q8 -4 21.5 -8t34.5 -8q4 0 21 -4t50 -13q27 -10 49 -18q4 -20 4 -33.5v-17.5v-11.5t-2 -17.5h-34q-47 0 -88 2 t-76 6t-95.5 6t-148.5 2q-16 0 -57 -4t-109 -10q-29 -2 -45 -3t-24 -1q0 10 -1.5 16.5t-1.5 10.5l-2 24v10q18 31 80 50q94 27 135 49q4 10 6.5 25.5t4.5 31.5q4 68 6 176.5t0 255.5l-4 428q-2 90 -2 142.5t-4 72.5q0 8 -7 15q-4 6 -12 6q-16 4 -63 4h-127q-90 0 -119 -21 q-41 -29 -121 -153q-23 -35 -35 -35q-23 12 -36 23.5t-19 19.5zM1383 1305.5q-5 13.5 14 33.5l184 185q14 12 33 12q14 0 31 -12l184 -185q18 -20 13 -33.5t-34 -13.5h-118v-1048h118q29 0 34 -13.5t-13 -31.5l-184 -187q-16 -12 -33 -12q-16 0 -31 12l-184 187 q-18 18 -13 31.5t31 13.5h121v1048h-121q-27 0 -32 13.5z" />
+<glyph unicode="&#xf035;" horiz-adv-x="1536" d="M0 233q0 18 12 31l187 185q18 20 31.5 14t13.5 -33v-121h1048v121q0 27 13.5 33t33.5 -14l185 -185q12 -12 12 -31q0 -18 -12 -30l-185 -187q-20 -18 -33.5 -13t-13.5 34v119h-1048v-119q0 -29 -13.5 -34t-31.5 13l-187 187q-12 12 -12 30zM0 1233q14 29 33.5 87 t44.5 146q6 27 11 43.5t9 26.5h56q8 -12 10 -14q27 -47 37 -58q2 0 35.5 -1t77.5 -1h90.5h74.5h123l19 2h108h203h416l53 6q12 10 24 46l4.5 9l6.5 13h39h28v-188v-80v-45q0 -12 -1 -21.5t-3 -19.5q-33 -10 -63 -15q-25 37 -52 103q-27 59 -34 74q-12 10 -27 14q-6 2 -42 3 t-85 1h-103.5h-97.5h-28.5t-34.5 -2q-2 -18 -3 -32.5t-1 -24.5l4 -445l-2 -119q0 -61 12 -92q12 -6 53 -12q4 0 20.5 -4t45.5 -10q14 -4 26.5 -7.5t22.5 -7.5q2 -16 3 -25.5t1 -13.5t-1 -10t-1 -14h-33q-94 0 -157 6q-66 6 -236 6q-14 0 -53 -3t-105 -7q-27 -2 -43 -3 t-24 -1q0 16 -2 20v21v8q20 27 73 39q90 20 132 41q4 8 6 19t4 26q0 18 1 70.5t1 120t-1 142t-2 139t-2 107.5t-1 47q0 8 -6 13q-2 2 -13 6q-14 2 -59 2h-123q-20 0 -62 -1t-85 -2t-78 -4t-41 -7q-41 -25 -117 -123q-20 -29 -33 -29q-23 10 -35 19.5t-18 15.5z" />
+<glyph unicode="&#xf036;" d="M0 78v115q0 31 22.5 53t55.5 22h1689q31 0 53.5 -22.5t22.5 -52.5v-115q0 -33 -22.5 -55.5t-53.5 -22.5h-1689q-33 0 -55.5 22.5t-22.5 55.5zM0 500v114q0 33 22.5 55.5t55.5 22.5h1075q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -55.5t-53.5 -22.5h-1075 q-33 0 -55.5 22.5t-22.5 55.5zM0 922v114q0 33 22.5 55.5t55.5 22.5h1536q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -54.5t-53.5 -21.5h-1536q-33 0 -55.5 21.5t-22.5 54.5zM0 1343v117q0 31 22.5 53.5t55.5 22.5h921q31 0 53.5 -22.5t22.5 -53.5v-117q0 -31 -22.5 -53 t-53.5 -22h-921q-33 0 -55.5 22.5t-22.5 52.5z" />
+<glyph unicode="&#xf037;" d="M0 78v115q0 31 22.5 53t55.5 22h1689q31 0 53.5 -22.5t22.5 -52.5v-115q0 -33 -22.5 -55.5t-53.5 -22.5h-1689q-33 0 -55.5 22.5t-22.5 55.5zM78 922v114q0 33 21.5 55.5t54.5 22.5h1536q33 0 55 -22.5t22 -55.5v-114q0 -33 -22.5 -54.5t-54.5 -21.5h-1536 q-33 0 -54.5 21.5t-21.5 54.5zM307 500v114q0 33 22.5 55.5t55.5 22.5h1075q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -55.5t-53.5 -22.5h-1075q-33 0 -55.5 22.5t-22.5 55.5zM385 1343v117q0 31 21.5 53.5t54.5 22.5h921q33 0 55.5 -22.5t22.5 -53.5v-117 q0 -31 -22.5 -53t-55.5 -22h-921q-33 0 -54.5 22.5t-21.5 52.5z" />
+<glyph unicode="&#xf038;" d="M0 78v115q0 31 22.5 53t55.5 22h1689q31 0 53.5 -22.5t22.5 -52.5v-115q0 -33 -22.5 -55.5t-53.5 -22.5h-1689q-33 0 -55.5 22.5t-22.5 55.5zM154 922v114q0 33 22.5 55.5t54.5 22.5h1536q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -54.5t-53.5 -21.5h-1536 q-33 0 -55 21.5t-22 54.5zM614 500v114q0 33 22.5 55.5t55.5 22.5h1075q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -55.5t-53.5 -22.5h-1075q-33 0 -55.5 22.5t-22.5 55.5zM768 1343v117q0 31 22.5 53.5t55.5 22.5h921q31 0 53.5 -22.5t22.5 -53.5v-117q0 -31 -22.5 -53 t-53.5 -22h-921q-33 0 -55.5 22.5t-22.5 52.5z" />
+<glyph unicode="&#xf039;" d="M0 78v115q0 31 22.5 53t55.5 22h1689q31 0 53.5 -22.5t22.5 -52.5v-115q0 -33 -22.5 -55.5t-53.5 -22.5h-1689q-33 0 -55.5 22.5t-22.5 55.5zM0 500v114q0 33 22.5 55.5t55.5 22.5h1689q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -55.5t-53.5 -22.5h-1689 q-33 0 -55.5 22.5t-22.5 55.5zM0 922v114q0 33 22.5 55.5t55.5 22.5h1689q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -54.5t-53.5 -21.5h-1689q-33 0 -55.5 21.5t-22.5 54.5zM0 1343v117q0 31 22.5 53.5t55.5 22.5h1689q31 0 53.5 -22.5t22.5 -53.5v-117 q0 -31 -22.5 -53t-53.5 -22h-1689q-33 0 -55.5 22.5t-22.5 52.5z" />
+<glyph unicode="&#xf03a;" d="M0 78v115q0 31 22.5 53t55.5 22h153q31 0 53.5 -22.5t22.5 -52.5v-115q0 -33 -22.5 -55.5t-53.5 -22.5h-153q-33 0 -55.5 22.5t-22.5 55.5zM0 500v114q0 33 22.5 55.5t55.5 22.5h153q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -55.5t-53.5 -22.5h-153 q-33 0 -55.5 22.5t-22.5 55.5zM0 922v114q0 33 22.5 55.5t55.5 22.5h153q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -54.5t-53.5 -21.5h-153q-33 0 -55.5 21.5t-22.5 54.5zM0 1343v117q0 31 22.5 53.5t55.5 22.5h153q31 0 53.5 -22.5t22.5 -53.5v-117q0 -31 -22.5 -53 t-53.5 -22h-153q-33 0 -55.5 22.5t-22.5 52.5zM461 78v115q0 31 22.5 53t55.5 22h1228q31 0 53.5 -22.5t22.5 -52.5v-115q0 -33 -22.5 -55.5t-53.5 -22.5h-1228q-33 0 -55.5 22.5t-22.5 55.5zM461 500v114q0 33 22.5 55.5t55.5 22.5h1228q31 0 53.5 -22.5t22.5 -55.5v-114 q0 -33 -22.5 -55.5t-53.5 -22.5h-1228q-33 0 -55.5 22.5t-22.5 55.5zM461 922v114q0 33 22.5 55.5t55.5 22.5h1228q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -54.5t-53.5 -21.5h-1228q-33 0 -55.5 21.5t-22.5 54.5zM461 1343v117q0 31 22.5 53.5t55.5 22.5h1228 q31 0 53.5 -22.5t22.5 -53.5v-117q0 -31 -22.5 -53t-53.5 -22h-1228q-33 0 -55.5 22.5t-22.5 52.5z" />
+<glyph unicode="&#xf03b;" d="M0 756v75q0 39 39 39h213v154q0 31 16.5 37t38.5 -17l215 -215q16 -16 17 -36q0 -18 -17 -35l-215 -215q-23 -23 -39 -17t-16 39v152h-213q-39 0 -39 39zM614 39v1458q0 39 39 39h76q39 0 39 -39v-1458q0 -39 -39 -39h-76q-39 0 -39 39zM922 78v115q0 31 22.5 53t54.5 22 h768q31 0 53.5 -22.5t22.5 -52.5v-115q0 -33 -22.5 -55.5t-53.5 -22.5h-768q-33 0 -55 22.5t-22 55.5zM922 500v114q0 33 22.5 55.5t54.5 22.5h615q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -55.5t-53.5 -22.5h-615q-33 0 -55 22.5t-22 55.5zM922 922v114 q0 33 22.5 55.5t54.5 22.5h691q33 0 55 -22.5t22 -55.5v-114q0 -33 -22.5 -54.5t-54.5 -21.5h-691q-33 0 -55 21.5t-22 54.5zM922 1343v117q0 31 22.5 53.5t54.5 22.5h537q33 0 55.5 -22.5t22.5 -53.5v-117q0 -31 -22.5 -53t-55.5 -22h-537q-33 0 -55 22.5t-22 52.5z" />
+<glyph unicode="&#xf03c;" d="M0 78v115q0 31 22.5 53t53.5 22h768q33 0 55.5 -22.5t22.5 -52.5v-115q0 -33 -22.5 -55.5t-55.5 -22.5h-768q-31 0 -53.5 22.5t-22.5 55.5zM0 500v114q0 33 22.5 55.5t53.5 22.5h614q33 0 55.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -55.5t-55.5 -22.5h-614 q-31 0 -53.5 22.5t-22.5 55.5zM0 922v114q0 33 22.5 55.5t53.5 22.5h692q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -54.5t-53.5 -21.5h-692q-31 0 -53.5 21.5t-22.5 54.5zM0 1343v117q0 31 22.5 53.5t53.5 22.5h538q31 0 53.5 -22.5t22.5 -53.5v-117q0 -31 -22.5 -53 t-53.5 -22h-538q-31 0 -53.5 22.5t-22.5 52.5zM1075 39v1458q0 39 39 39h76q16 0 27.5 -11.5t11.5 -27.5v-1458q0 -16 -11.5 -27.5t-27.5 -11.5h-76q-39 0 -39 39zM1305 743q0 16 14 35l217 215q23 23 38 17t15 -39v-152h215q16 0 27.5 -11t11.5 -28v-75q0 -16 -11 -27.5 t-28 -11.5h-215v-154q0 -31 -15 -38t-38 15l-217 218q-14 18 -14 36z" />
+<glyph unicode="&#xf03d;" d="M0 324v768q0 47 18.5 89t50 72.5t73.5 49t89 18.5h768q47 0 89 -18.5t73 -49t49.5 -72.5t18.5 -89v-240l483 471q23 23 55 23q13 -1 29 -7q47 -20 47 -69v-1127q0 -49 -47 -69q-16 -6 -29 -6q-33 0 -55 22l-483 471v-237q0 -47 -18.5 -89t-49.5 -74t-72.5 -50.5 t-89.5 -18.5h-768q-47 0 -89 18.5t-73.5 50.5t-50 73.5t-18.5 89.5z" />
+<glyph unicode="&#xf03e;" d="M0 115v1306q0 47 34 81t81 34h1614q47 0 80.5 -34t33.5 -81v-1306q0 -47 -33.5 -81t-80.5 -34h-1614q-47 0 -81 34t-34 81zM154 154h1536v1228h-1536v-1228zM307 307v105l277 360l188 -156l354 537l410 -424v-422h-1229zM307 1073q0 66 45 111t111 45q63 0 108 -45 t45 -111q0 -63 -45 -108t-108 -45q-66 0 -111 45t-45 108z" />
+<glyph unicode="&#xf040;" horiz-adv-x="1536" d="M0 0l137 418l867 866l280 -280l-866 -867zM287 407.5q0 -12.5 10 -22.5q8 -8 22 -8q12 0 21 8l690 690q20 20 0 43q-10 10 -22.5 10t-20.5 -10l-690 -688q-10 -10 -10 -22.5zM1102 1382l119 119q35 35 84 35t84 -35l57 -55l55 -57q35 -35 35 -84.5t-35 -83.5l-119 -119z " />
+<glyph unicode="&#xf041;" horiz-adv-x="1128" d="M0 1001q0 117 44 220.5t121 180.5t180.5 121t219.5 44q117 0 219.5 -44t179 -121t120.5 -180.5t44 -220.5q0 -84 -24.5 -159.5t-65.5 -143.5l-379 -661q-41 -68 -95 -68t-93 68l-381 663q-41 68 -65.5 143t-24.5 158zM285 1001q0 -57 21.5 -108t60.5 -89t89 -59.5 t109 -21.5q57 0 108.5 21.5t89.5 59.5t59.5 89t21.5 108t-21.5 108.5t-59.5 90.5t-89 60.5t-109 21.5q-59 0 -109 -21.5t-89 -60.5t-60.5 -90t-21.5 -109z" />
+<glyph unicode="&#xf042;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM240 768q0 -117 44 -218t119.5 -177t177 -120t218.5 -44v1118q-117 0 -218.5 -44 t-177 -120t-119.5 -177t-44 -218z" />
+<glyph unicode="&#xf043;" horiz-adv-x="1130" d="M0 535q0 86 23.5 161.5t66.5 141.5q20 33 69.5 99.5t108 154.5t113.5 193.5t90 217.5q10 35 37 51.5t57 12.5q31 4 57.5 -12.5t36.5 -51.5q33 -113 89.5 -218t115 -193t107.5 -154.5t69 -99.5q43 -66 66.5 -141.5t23.5 -161.5q0 -117 -44 -220.5t-120.5 -180.5t-180 -121 t-220.5 -44t-220 44t-180 121t-121 180.5t-44 220.5zM248 410q0 -59 41 -100.5t100 -41.5t100 41t41 101q0 43 -22 75q-6 8 -18.5 24.5t-26.5 39t-28.5 48.5t-22.5 54q-4 20 -23 17q-18 4 -24 -17q-8 -29 -21.5 -54.5t-28 -48t-27 -38.5t-18.5 -25q-23 -33 -22 -75z" />
+<glyph unicode="&#xf044;" d="M0 307v922q0 63 24.5 119.5t65.5 97.5t97.5 65.5t119.5 24.5h1075q4 0 10.5 -1t10.5 -1l-191 -191h-905q-47 0 -80.5 -33.5t-33.5 -80.5v-922q0 -47 33.5 -80.5t80.5 -33.5h1075q47 0 81 33.5t34 80.5v445l193 192v-637q0 -63 -25 -118.5t-67 -97.5t-97 -66.5t-119 -24.5 h-1075q-63 0 -119.5 24.5t-97.5 66.5t-65.5 97.5t-24.5 118.5zM631 324l108 329l652 652l221 -222l-651 -651zM866 629q6 -8 17 -8q10 0 16 8l512 510q18 18 0 35q-18 16 -35 0l-510 -510q-18 -18 0 -35zM1501 1415l92 94q29 29 68 29t65 -29l46 -45l45 -45 q27 -29 27.5 -66.5t-27.5 -66.5l-95 -92z" />
+<glyph unicode="&#xf045;" d="M0 307v922q0 63 24.5 119.5t65.5 97.5t97.5 65.5t119.5 24.5h836q-6 -31 -6 -63v-52q-164 -20 -310 -78h-520q-47 0 -80.5 -33.5t-33.5 -80.5v-922q0 -47 33.5 -80.5t80.5 -33.5h1075q47 0 81 33.5t34 80.5v111q16 10 31.5 21.5t32.5 27.5l129 127v-287q0 -63 -25 -118.5 t-67 -97.5t-97 -66.5t-119 -24.5h-1075q-63 0 -119.5 24.5t-97.5 66.5t-65.5 97.5t-24.5 118.5zM385 388.5v37.5q0 166 56.5 312.5t173 256t293.5 173t419 65.5v231q0 57 28.5 69.5t69.5 -28.5l392 -391q27 -25 26 -65q0 -39 -26 -64l-392 -391q-41 -41 -69.5 -28.5 t-28.5 69.5v260q-207 0 -364.5 -43t-266 -116.5t-170 -174t-77.5 -215.5q-4 -27 -31 -27q-25 0 -29 27q-4 23 -4 42.5z" />
+<glyph unicode="&#xf046;" d="M0 307v922q0 63 24.5 119.5t65.5 97.5t97.5 65.5t119.5 24.5h1075q27 0 52 -6l-187 -187h-940q-47 0 -80.5 -33.5t-33.5 -80.5v-922q0 -47 33.5 -80.5t80.5 -33.5h1075q47 0 81 33.5t34 80.5v326l193 192v-518q0 -63 -25 -118.5t-67 -97.5t-97 -66.5t-119 -24.5h-1075 q-63 0 -119.5 24.5t-97.5 66.5t-65.5 97.5t-24.5 118.5zM385 966.5q0 32.5 23 55.5l98 98q23 23 55.5 23t54.5 -23l340 -340l654 656q23 23 56.5 22.5t55.5 -22.5l99 -99q23 -23 22.5 -55.5t-22.5 -54.5l-711 -711l-98 -98q-23 -23 -55.5 -23t-55.5 23l-100 98l-393 395 q-23 23 -23 55.5z" />
+<glyph unicode="&#xf047;" horiz-adv-x="1597" d="M0 768q0 25 18 43l256 256q27 27 45.5 19.5t18.5 -46.5v-170h360v359h-172q-37 0 -45 18.5t19 44.5l256 256q18 18 43 19q25 0 43 -19l256 -256q27 -27 19.5 -45t-46.5 -18h-172v-359h361v170q0 39 18 46.5t45 -19.5l256 -256q18 -18 18 -43t-18 -43l-256 -256 q-27 -27 -45 -19.5t-18 46.5v176h-361v-365h172q39 0 47 -18.5t-20 -44.5l-256 -256q-18 -18 -43 -19q-25 0 -43 19l-256 256q-27 27 -20 45t46 18h172v365h-360v-176q0 -39 -18.5 -46.5t-45.5 19.5l-256 256q-18 18 -18 43z" />
+<glyph unicode="&#xf048;" horiz-adv-x="1075" d="M0 76q0 -31 22.5 -53.5t53.5 -22.5h153q33 0 55.5 22.5t22.5 53.5v1382q0 33 -22.5 55.5t-55.5 22.5h-153q-31 0 -53.5 -22.5t-22.5 -55.5v-1382zM307.5 768q-0.5 27 16.5 43l653 707q14 18 41 18q6 0 22 -4q35 -18 35 -59v-1412q0 -41 -35 -57q-39 -14 -63 14l-653 705 q-16 18 -16.5 45z" />
+<glyph unicode="&#xf049;" d="M0 76q0 -31 22.5 -53.5t53.5 -22.5h153q33 0 55.5 22.5t22.5 53.5v1382q0 33 -22.5 55.5t-55.5 22.5h-153q-31 0 -53.5 -22.5t-22.5 -55.5v-1382zM307.5 768q-0.5 27 16.5 43l653 707q14 18 41 18q6 0 22 -4q35 -18 35 -59v-1412q0 -41 -35 -57q-39 -14 -63 14l-653 705 q-16 18 -16.5 45zM1075.5 768q-0.5 27 16.5 43l653 707q14 18 41 18q6 0 22 -4q35 -18 35 -59v-1412q0 -41 -35 -57q-39 -14 -63 14l-653 705q-16 18 -16.5 45z" />
+<glyph unicode="&#xf04a;" horiz-adv-x="1536" d="M0 767q0 26 16 44l654 707q14 18 41 18q10 0 22 -6q35 -14 35 -57v-1412q0 -41 -35 -57q-37 -16 -63 14l-654 705q-16 18 -16 44zM768 767q0 26 16 44l654 707q14 18 41 18q10 0 22 -6q35 -14 35 -57v-1412q0 -41 -35 -57q-37 -16 -63 14l-654 705q-16 18 -16 44z" />
+<glyph unicode="&#xf04b;" horiz-adv-x="1349" d="M0 70v1396q0 39 35 60q37 23 69 0l1211 -697q35 -25 35 -61q0 -37 -35 -61l-1211 -697q-16 -10 -34 -10t-35 10q-35 20 -35 60z" />
+<glyph unicode="&#xf04c;" horiz-adv-x="1536" d="M0 70v1396q0 29 20.5 49.5t49.5 20.5h489q29 0 49.5 -20.5t20.5 -49.5v-1396q0 -29 -20.5 -49.5t-49.5 -20.5h-489q-29 0 -49.5 20.5t-20.5 49.5zM907 70v1396q0 29 20.5 49.5t49.5 20.5h489q29 0 49.5 -20.5t20.5 -49.5v-1396q0 -29 -20.5 -49.5t-49.5 -20.5h-489 q-29 0 -49.5 20.5t-20.5 49.5z" />
+<glyph unicode="&#xf04d;" horiz-adv-x="1536" d="M0 70v1396q0 29 20.5 49.5t49.5 20.5h1396q29 0 49.5 -20.5t20.5 -49.5v-1396q0 -29 -20.5 -49.5t-49.5 -20.5h-1396q-29 0 -49.5 20.5t-20.5 49.5z" />
+<glyph unicode="&#xf04e;" horiz-adv-x="1536" d="M0 61v1414q0 39 35 57q39 14 63 -14l654 -705q16 -18 16 -45t-16 -45l-654 -705q-16 -18 -41 -18q-6 0 -22 4q-35 16 -35 57zM768 61v1414q0 39 35 57q39 14 63 -14l654 -705q16 -18 16 -45t-16 -45l-654 -705q-16 -18 -41 -18q-6 0 -22 4q-35 16 -35 57z" />
+<glyph unicode="&#xf050;" d="M0 61v1414q0 39 35 57q39 14 63 -14l654 -705q16 -18 16 -45t-16 -45l-654 -705q-16 -18 -41 -18q-6 0 -22 4q-35 16 -35 57zM768 61v1414q0 39 35 57q39 14 63 -14l654 -705q16 -18 16 -45t-16 -45l-654 -705q-16 -18 -41 -18q-6 0 -22 4q-35 16 -35 57zM1536 76 q0 -31 22.5 -53.5t53.5 -22.5h153q33 0 55.5 22.5t22.5 53.5v1382q0 33 -22.5 55.5t-55.5 22.5h-153q-31 0 -53.5 -22.5t-22.5 -55.5v-1382z" />
+<glyph unicode="&#xf051;" horiz-adv-x="1075" d="M0 61v1414q0 39 35 57q39 14 63 -14l654 -705q16 -18 16 -45t-16 -45l-654 -705q-16 -18 -41 -18q-6 0 -22 4q-35 16 -35 57zM768 76q0 -31 22.5 -53.5t53.5 -22.5h153q33 0 55.5 22.5t22.5 53.5v1382q0 33 -22.5 55.5t-55.5 22.5h-153q-31 0 -53.5 -22.5t-22.5 -55.5 v-1382z" />
+<glyph unicode="&#xf052;" horiz-adv-x="1536" d="M0 70v198q0 29 20.5 49.5t49.5 20.5h1396q29 0 49.5 -20.5t20.5 -49.5v-198q0 -29 -20.5 -49.5t-49.5 -20.5h-1396q-29 0 -49.5 20.5t-20.5 49.5zM6 594q-18 43 14 76l699 698q20 20 49 20.5t49 -20.5l699 -698q33 -33 14 -76q-16 -43 -64 -43h-1396q-47 0 -64 43z" />
+<glyph unicode="&#xf053;" horiz-adv-x="964" d="M0 765q0 38 29 66l671 674q29 29 68 29t68 -29l100 -100q29 -29 29 -68t-29 -67l-508 -510l508 -500q29 -29 29 -66.5t-29 -66.5l-100 -102q-29 -29 -68 -29t-68 29l-671 673q-29 29 -29 67z" />
+<glyph unicode="&#xf054;" horiz-adv-x="964" d="M0 194.5q0 38.5 29 67.5l508 508l-508 502q-29 29 -29 66.5t29 66.5l100 102q29 29 68 29t67 -29l672 -673q29 -29 29 -68t-29 -68l-672 -671q-29 -29 -67.5 -29t-67.5 29l-100 100q-29 29 -29 67.5z" />
+<glyph unicode="&#xf055;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM338 688q0 -33 33 -33h313v-344q0 -33 33 -32h164q33 0 32 32v344h314 q12 0 22.5 9.5t10.5 23.5v158q0 14 -10.5 23.5t-22.5 9.5h-314v346q0 33 -32 32h-164q-33 0 -33 -32v-346h-313q-33 0 -33 -33v-158z" />
+<glyph unicode="&#xf056;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM338 688q0 -33 33 -33h856q12 0 22.5 9.5t10.5 23.5v158q0 14 -10.5 23.5 t-22.5 9.5h-856q-33 0 -33 -33v-158z" />
+<glyph unicode="&#xf057;" horiz-adv-x="1597" d="M0 770q0 154 58.5 301.5t174.5 263.5q117 117 264.5 175.5t301 58.5t301 -58.5t264.5 -175.5t175 -264t58 -301t-58 -301t-175 -264t-264.5 -175.5t-301 -58.5t-301 58.5t-264.5 175.5t-175 264t-58 301zM385 505q0 -13 10 -24l115 -116q10 -10 23.5 -10.5t23.5 10.5 l244 243l219 -221q10 -10 23.5 -10t23.5 10l113 113q23 23 0 47l-222 219l246 246q23 23 0 47l-117 115q-25 25 -47 0l-243 -244l-222 221q-10 10 -23 10t-24 -10l-110 -113q-25 -23 0 -47l219 -219l-242 -244q-10 -10 -10 -23z" />
+<glyph unicode="&#xf058;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM240 718q0 -20 14 -34l319 -319q14 -14 38 -24.5t44 -10.5h56q20 0 43.5 10 t38.5 25l550 550q14 14 14.5 34t-14.5 34l-104 107q-16 14 -35.5 14t-34.5 -14l-452 -453q-14 -14 -33.5 -14t-34.5 14l-221 221q-14 14 -33.5 14t-36.5 -14l-104 -106q-14 -14 -14 -34z" />
+<glyph unicode="&#xf059;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM532 1100l95 -115q4 -8 20 -12q12 0 23 6l10 8t27.5 17.5t39 16.5t46.5 7 q41 0 69.5 -22.5t28.5 -57.5q0 -37 -24.5 -64.5t-61.5 -60.5q-23 -18 -46.5 -40.5t-43 -51.5t-31.5 -63.5t-12 -79.5v-64q0 -12 9 -21t21 -9h164q12 0 20.5 9t8.5 21v51q0 39 25.5 66.5t62.5 60.5q25 20 49.5 46t46 57t34.5 69.5t13 90.5q0 68 -27.5 121t-73.5 87.5 t-103.5 53t-114.5 18.5q-63 0 -113.5 -16.5t-85.5 -35.5t-53 -35.5t-20 -18.5q-16 -16 -3 -39zM672 252q0 -12 9 -21.5t21 -9.5h164q12 0 20.5 9.5t8.5 21.5v156q0 12 -8 21t-21 9h-164q-12 0 -21 -9t-9 -21v-156z" />
+<glyph unicode="&#xf05a;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM573 858q0 -29 29 -29h86v-409h-78q-12 0 -21 -8.5t-9 -20.5v-139q0 -12 9 -21.5 t21 -9.5h402q12 0 20 9.5t8 21.5v139q0 29 -28 29h-78v577q0 12 -8 21.5t-21 9.5h-303q-12 0 -20.5 -9t-8.5 -22v-139zM686 1151q0 -12 9.5 -21.5t21.5 -9.5h188q12 0 20.5 9.5t8.5 21.5v166q0 29 -29 29h-188q-12 0 -21.5 -8.5t-9.5 -20.5v-166z" />
+<glyph unicode="&#xf05b;" horiz-adv-x="1536" d="M0 692v154q0 16 11.5 26.5t27.5 10.5h164q18 84 59 158.5t99.5 133t133 99.5t158.5 59v164q0 39 39 39h154q16 0 26.5 -11.5t10.5 -27.5v-164q84 -18 158.5 -59t133 -99.5t99.5 -133t59 -158.5h164q16 0 27.5 -10.5t11.5 -26.5v-154q0 -39 -39 -39h-164 q-18 -84 -59 -158.5t-99.5 -133t-133 -99.5t-158.5 -59v-164q0 -16 -10.5 -27.5t-26.5 -11.5h-154q-39 0 -39 39v164q-84 18 -158.5 59t-133 99.5t-99.5 133t-59 158.5h-164q-39 0 -39 39zM365 653q29 -106 105.5 -183t182.5 -105v174q0 16 11.5 26t27.5 10h154 q16 0 26.5 -10t10.5 -26v-174q106 29 183 105.5t105 182.5h-172q-39 0 -38 39v154q0 16 11 26.5t27 10.5h172q-29 106 -105.5 183t-182.5 105v-172q0 -16 -10.5 -27t-26.5 -11h-154q-39 0 -39 38v172q-106 -29 -183 -105.5t-105 -182.5h174q16 0 26 -10.5t10 -26.5v-154 q0 -16 -10 -27.5t-26 -11.5h-174z" />
+<glyph unicode="&#xf05c;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM240 768q0 -117 44 -218t119.5 -177t177 -120t218.5 -44t218 44t177 120t120 177 t44 218t-44 218t-120 177t-177.5 120t-217.5 44q-117 0 -218.5 -44t-177 -120t-119.5 -177t-44 -218zM451 573.5q0 16.5 12 28.5l166 166l-166 166q-12 12 -12 28.5t12 28.5l112 113q29 29 58 0l166 -166l166 166q29 29 57 0l113 -113q29 -29 0 -57l-166 -166l166 -166 q29 -29 0 -57l-113 -113q-12 -12 -28.5 -12t-28.5 12l-166 166l-166 -166q-12 -12 -28.5 -12t-29.5 12l-112 113q-12 12 -12 28.5z" />
+<glyph unicode="&#xf05d;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM240 768q0 -117 44 -218t119.5 -177t177 -120t218.5 -44t218 44t177 120t120 177 t44 218t-44 218t-120 177t-177.5 120t-217.5 44q-117 0 -218.5 -44t-177 -120t-119.5 -177t-44 -218zM332 717.5q0 17.5 10 27.5l115 115q10 10 27.5 10t27.5 -10l178 -180q29 -25 58 0l337 340q10 10 27.5 10t28.5 -10l114 -115q10 -10 10.5 -27.5t-10.5 -27.5l-409 -410 q-12 -12 -32.5 -20t-37.5 -8h-114q-16 0 -37 8t-33 20l-250 250q-10 10 -10 27.5z" />
+<glyph unicode="&#xf05e;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM240 768q0 -84 23.5 -160t66.5 -141l770 770q-66 43 -141.5 66.5t-159.5 23.5 q-117 0 -218.5 -44t-177 -120t-119.5 -177t-44 -218zM498 297q66 -41 141.5 -64.5t159.5 -23.5q117 0 218 44t177 120t120 177t44 218q0 84 -23.5 160t-64.5 141z" />
+<glyph unicode="&#xf060;" horiz-adv-x="1536" d="M0 768q0 39 29 68l671 673q29 29 68 29t68 -29l100 -100q29 -29 29 -67.5t-29 -67.5l-338 -338h842q41 0 68.5 -27.5t27.5 -68.5v-144q0 -39 -27.5 -66.5t-66.5 -27.5h-844l338 -338q29 -29 29 -67.5t-29 -67.5l-100 -100q-29 -29 -68 -29t-68 29l-671 671q-29 29 -29 68 z" />
+<glyph unicode="&#xf061;" horiz-adv-x="1536" d="M0 698v144q0 39 27.5 66.5t66.5 27.5h844l-338 338q-29 29 -29 67.5t29 67.5l100 100q29 29 68 29t68 -29l671 -673q29 -29 29 -67t-29 -67l-671 -673q-29 -29 -68 -29t-68 29l-100 100q-29 29 -29 68t29 67l338 338h-844q-39 0 -66.5 27.5t-27.5 68.5z" />
+<glyph unicode="&#xf062;" horiz-adv-x="1536" d="M-1 768q-1 39 28 68l673 671q29 29 68 29t68 -29l671 -671q29 -29 29 -68t-29 -68l-100 -100q-29 -29 -66.5 -29t-66.5 29l-340 338v-844q0 -39 -27.5 -66.5t-66.5 -27.5h-144q-41 0 -67.5 27.5t-26.5 66.5v844l-338 -338q-29 -29 -67.5 -29t-67.5 29l-100 100 q-29 29 -30 68z" />
+<glyph unicode="&#xf063;" horiz-adv-x="1536" d="M0 766q0 39 29 68l100 100q29 29 68 29t67 -29l338 -338v844q0 39 27.5 66.5t66.5 27.5h144q41 0 67.5 -27.5t26.5 -66.5v-844l340 338q29 29 66.5 29t66.5 -29l102 -100q29 -29 29 -68t-29 -68l-673 -671q-29 -29 -68 -29t-68 29l-671 671q-29 29 -29 68z" />
+<glyph unicode="&#xf064;" d="M0 135q0 209 71.5 393.5t218 322.5t371 219t531.5 83v293q0 72 36 87t89 -36l491 -493q35 -33 35 -82q0 -47 -35 -82l-491 -494q-51 -51 -88 -35.5t-37 86.5v330q-262 -2 -461 -56.5t-336 -147.5t-215 -219t-98 -271q-4 -33 -37 -33h-2q-33 0 -37 33q-6 51 -6 102z" />
+<glyph unicode="&#xf065;" horiz-adv-x="1536" d="M0 86v522q0 53 26.5 64.5t65.5 -25.5l166 -166l274 275q12 12 31 12t33 -12l160 -160q12 -14 12 -32.5t-12 -31.5l-275 -274l166 -166q39 -39 27 -65.5t-66 -26.5h-520q-37 0 -61 25q-27 27 -27 61zM768 972.5q0 18.5 12 31.5l275 274l-166 166q-39 39 -27 65.5t66 26.5 h520q37 0 61 -25q27 -27 27 -61v-522q0 -53 -26.5 -64.5t-65.5 25.5l-166 166l-274 -273q-12 -14 -31 -14t-33 14l-160 158q-12 14 -12 32.5z" />
+<glyph unicode="&#xf066;" horiz-adv-x="1536" d="M0 202.5q0 18.5 12 33.5l275 272l-166 166q-39 39 -27 65.5t66 26.5h520q38 0 61 -25q27 -27 27 -61v-522q0 -53 -26.5 -64.5t-65.5 27.5l-166 166l-274 -275q-12 -14 -31 -14t-33 14l-160 160q-12 12 -12 30.5zM768 854v522q0 53 26.5 64.5t65.5 -27.5l166 -166l274 275 q12 14 31 14t33 -14l160 -160q12 -12 12 -30.5t-12 -33.5l-275 -272l166 -166q39 -39 27 -65.5t-66 -26.5h-520q-41 0 -61 25q-27 27 -27 61z" />
+<glyph unicode="&#xf067;" horiz-adv-x="1536" d="M0 696v144q0 39 27.5 66.5t66.5 27.5h508v506q0 41 26.5 68.5t67.5 27.5h144q39 0 66.5 -27.5t27.5 -66.5v-508h508q39 0 66.5 -27.5t27.5 -66.5v-144q0 -39 -27.5 -66.5t-66.5 -27.5h-508v-506q0 -41 -27.5 -68.5t-66.5 -27.5h-144q-39 0 -66.5 27.5t-27.5 66.5v508 h-506q-41 0 -68.5 26.5t-27.5 67.5z" />
+<glyph unicode="&#xf068;" horiz-adv-x="1536" d="M0 696v144q0 39 27.5 66.5t66.5 27.5h1348q39 0 66.5 -27.5t27.5 -66.5v-144q0 -39 -27.5 -66.5t-66.5 -27.5h-1346q-41 0 -68.5 26.5t-27.5 67.5z" />
+<glyph unicode="&#xf069;" horiz-adv-x="1427" d="M2 1018q-10 37 10 72l72 124q20 35 58 44.5t73 -9.5l332 -192v383q0 41 27.5 68.5t68.5 27.5h141q41 0 69 -27.5t28 -66.5v-385l331 192q35 18 73 9t58 -44l70 -124q20 -35 11 -72t-44 -57l-333 -193l333 -193q35 -20 44.5 -57t-9.5 -72l-72 -124q-20 -35 -58 -44.5 t-73 9.5l-331 192v-383q0 -41 -28 -68.5t-69 -27.5h-141q-41 0 -68.5 27.5t-27.5 66.5v385l-332 -192q-35 -20 -73 -10t-58 45l-72 124q-18 35 -9 72t44 57l334 193l-334 193q-35 20 -45 57z" />
+<glyph unicode="&#xf06a;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM672 1274l14 -739q4 -29 31 -29h162q12 0 21 8t9 21l17 739q0 10 -8 22q-8 8 -23 9 h-193q-14 0 -22 -9q-8 -12 -8 -22zM680 236q0 -12 8 -21.5t21 -9.5h180q12 0 21.5 9t9.5 22v174q0 12 -9.5 21t-21.5 9h-180q-12 0 -20.5 -9t-8.5 -21v-174z" />
+<glyph unicode="&#xf06b;" horiz-adv-x="1880" d="M0 588v391q0 16 11.5 27.5t27.5 11.5h539q-57 0 -107.5 21.5t-87.5 58.5t-58.5 87t-21.5 107t21.5 107.5t58.5 87.5t87 58.5t108 21.5q61 0 115.5 -24.5t88.5 -69.5l158 -203l158 203q35 45 89 69.5t116 24.5q57 0 107 -21.5t87 -58.5t58.5 -87t21.5 -108 q0 -57 -21.5 -107t-58.5 -87t-87 -58.5t-107 -21.5h538q16 0 27.5 -11.5t11.5 -27.5v-391q0 -16 -11 -27.5t-28 -11.5h-117v-432q0 -47 -34.5 -82t-83.5 -35h-1332q-49 0 -82.5 35t-33.5 82v432h-119q-16 0 -27.5 11t-11.5 28zM461 1292q0 -49 33.5 -82.5t83.5 -33.5h237 l-151 196q-10 10 -32 24.5t-54 14.5q-49 0 -83 -35t-34 -84zM743 221q0 -33 24 -56.5t56 -23.5h234q33 0 56.5 23.5t23.5 56.5v797h-394v-797zM1065 1176h238q49 0 82.5 33.5t33.5 82.5t-33.5 84t-82.5 35q-33 0 -54.5 -14.5t-31.5 -24.5z" />
+<glyph unicode="&#xf06c;" horiz-adv-x="1916" d="M6 135q20 53 56 89t71 65q29 23 50.5 43t27.5 43q2 6 0 12t-10 25q-6 12 -11.5 27.5t-9.5 35.5q-25 160 13 295t120 242.5t195 185.5t235 121q82 29 179.5 34t203.5 7q61 0 127 2t127.5 11t113.5 28.5t85 54.5q20 20 38.5 41t38 36t43 24.5t58.5 9.5q23 0 42.5 -11.5 t29.5 -31.5q66 -133 83 -281.5t-18 -322.5q-90 -487 -579 -740q-231 -123 -467 -123q-154 0 -307 54q-23 8 -45.5 20t-44.5 25q-29 16 -57.5 30.5t-49.5 14.5q-10 -2 -23.5 -17.5t-27.5 -35t-26.5 -41t-20.5 -33.5q-14 -23 -26.5 -41.5t-22.5 -32.5q-25 -31 -64 -31h-4 q-29 2 -49.5 12.5t-33.5 24.5t-20.5 28.5t-9.5 22.5q-27 37 -10 78zM401 507.5q2 -32.5 29 -54.5q20 -18 51 -19q37 0 62 27q90 102 181 175t191.5 117t212 62t242.5 14q33 -4 57.5 19.5t26.5 56.5q2 35 -20.5 58.5t-57.5 25.5q-147 6 -277 -16.5t-247 -73.5t-223.5 -133 t-206.5 -199q-23 -27 -21 -59.5z" />
+<glyph unicode="&#xf06d;" horiz-adv-x="1445" d="M0 442q0 123 63.5 254t174.5 238q10 16 33.5 13t31.5 -21q4 -16 0 -29q-8 -35 -14 -84t-4 -101.5t13 -101.5t38 -84q31 -37 78 -49q-49 154 -40 293t49 259t101.5 217t118.5 167t98 106.5t43 39.5q25 18 47 0q10 -8 13.5 -21.5t-0.5 -24.5q0 -2 -15.5 -42.5t-21.5 -102 t7 -134.5t71 -136q37 -43 67.5 -85t52 -93.5t34 -120t12.5 -162.5q0 -33 -31 -39q-12 -2 -24.5 4t-16.5 19q-14 31 -42 49t-63 18q-47 0 -79.5 -33.5t-32.5 -81.5q0 -121 156 -120q98 0 153 63q37 43 53.5 101.5t20.5 114.5t2 102.5t-4 62.5q-6 12 0 29q8 18 31.5 21 t35.5 -13q111 -106 173.5 -237.5t62.5 -254.5q0 -109 -51.5 -195.5t-145.5 -148t-228 -95.5t-298 -34t-298 34t-228.5 95.5t-145.5 148.5t-51 195z" />
+<glyph unicode="&#xf06e;" d="M0 722q0 44 25 83q78 125 178 224t216 168t242.5 104.5t260.5 35.5q135 0 262 -35.5t241.5 -103.5t215 -167t180.5 -226q23 -39 22.5 -83t-22.5 -81q-80 -127 -180.5 -226.5t-215 -167t-241.5 -103t-262 -35.5q-133 0 -260 35.5t-243 104t-216.5 168t-177.5 224.5 q-25 37 -25 81zM154 723q66 -104 149.5 -190.5t182 -145.5t208 -92t228.5 -33t228.5 33t207.5 92t182 145t150 191q-80 129 -187.5 226.5t-236.5 156.5q51 -59 79.5 -133t28.5 -160q0 -96 -35.5 -179t-99 -146.5t-147.5 -99.5t-179 -36q-96 0 -179 36t-146.5 99.5t-99 146.5 t-35.5 179q0 78 25.5 148.5t68.5 128.5q-117 -59 -217.5 -152.5t-175.5 -214.5zM614 813q0 -23 16.5 -40t41.5 -17t41 17.5t16 39.5q0 78 53.5 131t130.5 53q25 0 41.5 17.5t16.5 40.5q0 25 -16.5 41t-41.5 16q-61 0 -116.5 -23.5t-95 -63.5t-63.5 -95.5t-24 -116.5z" />
+<glyph unicode="&#xf070;" d="M0 767q0 44 25 83q78 125 178 224.5t216 168t242.5 104t260.5 35.5q53 0 105 -7t103 -17l89 158q8 14 24 18q12 6 29 -2l133 -76q14 -8 19.5 -23.5t-3.5 -29.5l-774 -1383q-6 -14 -22 -18q-4 -2 -11 -2q-6 0 -18 4l-135 76q-14 8 -18.5 23.5t3.5 29.5l66 115 q-145 68 -269 178.5t-218 259.5q-25 37 -25 81zM154 768q82 -131 191.5 -229.5t240.5 -157.5l57 104q-86 63 -138 159.5t-52 213.5q0 78 25.5 148.5t68.5 130.5q-117 -61 -217.5 -153.5t-175.5 -215.5zM614 858q0 -23 16.5 -40t41.5 -17t41 17.5t16 39.5q0 78 53.5 131 t130.5 53q25 0 41.5 17.5t16.5 40.5q0 25 -16.5 41t-41.5 16q-61 0 -116.5 -23.5t-95 -63.5t-63.5 -95.5t-24 -116.5zM928 154l88 159q209 25 382 145t292 310q-109 170 -263 283l76 137q92 -66 172 -150t146 -188q23 -39 22.5 -83t-22.5 -81q-160 -254 -392.5 -392 t-500.5 -140zM1081 430l285 510q4 -20 6 -39.5t2 -42.5q0 -74 -21.5 -140.5t-60.5 -121.5t-93 -98t-118 -68z" />
+<glyph unicode="&#xf071;" horiz-adv-x="1775" d="M0 92q0 20 6 39t17 35l768 1331q16 27 39.5 48.5t56.5 21.5t56.5 -21.5t39.5 -48.5l770 -1331q10 -16 16.5 -34.5t6.5 -39.5q0 -49 -38 -70.5t-81 -21.5h-1538q-43 0 -81 21.5t-38 70.5zM770 1114l12 -633q0 -14 10.5 -24.5t24.5 -10.5h139q14 0 24.5 10.5t10.5 24.5 l15 633q0 14 -10.5 24.5t-24.5 10.5h-166q-16 0 -25.5 -10.5t-9.5 -24.5zM776 168q0 -16 10.5 -25.5t24.5 -9.5h154q35 0 34 35v147q0 16 -9 26.5t-25 10.5h-154q-14 0 -24.5 -10t-10.5 -27v-147z" />
+<glyph unicode="&#xf072;" horiz-adv-x="1597" d="M0 541v4q0 31 23 57l30 29q20 25 56 24q8 0 10 -2l280 -32q39 63 93.5 134.5t125.5 151.5l-583 457q-31 25 -31 59v4q0 31 23 58l57 57q27 23 57 23h13.5t13.5 -4l803 -293l151 149q70 70 161 110t167 40q72 0 109 -37q20 -18 28 -46t8 -63q0 -76 -38.5 -167t-110.5 -160 l-150 -152l293 -803q6 -12 6 -26q0 -33 -24 -58l-58 -57q-23 -25 -57 -25h-4q-35 4 -59 31l-455 586q-82 -72 -153.5 -126t-135.5 -93l35 -281v-10q0 -33 -22 -55l-31 -31q-23 -23 -58 -23h-4q-39 4 -59 31l-205 272l-274 207q-29 25 -31 60z" />
+<glyph unicode="&#xf073;" horiz-adv-x="1566" d="M0 117v1147q0 47 35 81.5t82 34.5h39v13q0 31 10 62.5t32.5 56t59.5 40t90 15.5t90 -15.5t59.5 -40t33 -56.5t10.5 -62v-13h49v13q0 31 10 62.5t32.5 56t59.5 40t90 15.5t90 -15.5t60.5 -40t34 -56.5t10.5 -62v-13h49v13q0 31 10.5 62.5t33 56t59 40t90.5 15.5 q53 0 90 -15.5t59.5 -40t32.5 -56.5t10 -62v-13h39q47 0 82 -34.5t35 -81.5v-1147q0 -47 -35 -82t-82 -35h-1333q-47 0 -82 35t-35 82zM158 158h282v250h-282v-250zM158 446h282v252h-282v-252zM158 737h282v252h-282v-252zM272 1165q0 -57 76 -57t76 57v228q0 57 -76 57 t-76 -57v-228zM479 158h285v250h-285v-250zM479 446h285v252h-285v-252zM479 737h285v252h-285v-252zM709 1165q0 -31 16 -44t57 -13t58.5 13.5t17.5 43.5v228q0 29 -17.5 43t-58.5 14t-57 -14.5t-16 -42.5v-228zM803 158h284v250h-284v-250zM803 446h284v252h-284v-252z M803 737h284v252h-284v-252zM1126 158h283v250h-283v-250zM1126 446h283v252h-283v-252zM1126 737h283v252h-283v-252zM1143 1165q0 -57 76 -57t75 57v228q0 57 -75 57q-76 0 -76 -57v-228z" />
+<glyph unicode="&#xf074;" d="M0 252v154q0 16 11.5 27t27.5 11h219q51 0 99.5 31t93.5 83t90 119.5t90 139.5q55 88 114.5 175t127 156t147.5 110.5t180 41.5h203v185q0 41 24.5 49t59.5 -21l334 -278q23 -18 22 -45q0 -29 -22 -47l-334 -277q-35 -29 -59.5 -20.5t-24.5 49.5v174h-203 q-53 0 -100 -31.5t-93 -84t-91.5 -120t-90.5 -139.5q-55 -88 -113.5 -174t-126 -154.5t-148.5 -110.5t-179 -42h-219q-16 0 -27.5 11.5t-11.5 27.5zM0 1108v154q0 39 39 38h219q68 0 127 -20t111.5 -56t97.5 -84t88 -104q-61 -90 -117 -178q-4 -8 -9 -14t-9 -15 q-70 102 -139.5 172t-149.5 70h-219q-16 0 -27.5 10.5t-11.5 26.5zM778 481q29 41 56.5 85t56.5 87q4 10 10 17.5t10 17.5q70 -102 139.5 -170.5t149.5 -68.5h203v190q0 41 24.5 49t59.5 -20l334 -277q23 -18 22 -47q0 -27 -22 -45l-334 -279q-35 -29 -59.5 -20.5 t-24.5 49.5v168h-203q-68 0 -127 20.5t-110.5 56.5t-97.5 84t-87 103z" />
+<glyph unicode="&#xf075;" horiz-adv-x="1916" d="M0 866q0 145 76 272.5t206 222.5t303.5 150.5t372.5 55.5t373 -55.5t304 -150.5t206 -222t76 -273q0 -145 -76 -272t-206 -222.5t-304 -150.5t-373 -55q-92 0 -180 12q-176 -139 -411 -192q-25 -4 -50.5 -8.5t-54.5 -8.5q-16 -2 -27.5 6.5t-15.5 24.5t5 26.5t20 20.5 q23 23 43 44.5t36.5 51t30 69.5t23.5 97q-174 98 -275.5 241.5t-101.5 315.5z" />
+<glyph unicode="&#xf076;" horiz-adv-x="1566" d="M0 621v288q0 16 11.5 27.5t27.5 11.5h391q16 0 28.5 -11t12.5 -28v-288q0 -29 22.5 -60t63.5 -58.5t98.5 -45t128.5 -17.5q70 0 128.5 17.5t99.5 45t63.5 58.5t22.5 60v288q0 39 39 39h391q16 0 27.5 -11t11.5 -28v-288q0 -135 -61.5 -254t-168 -207t-249 -139.5 t-304.5 -51.5q-164 0 -306 51.5t-248.5 139.5t-168 206.5t-61.5 254.5zM0 1106v391q0 16 11.5 27.5t27.5 11.5h391q16 0 28.5 -11.5t12.5 -27.5v-391q0 -16 -12.5 -27.5t-28.5 -11.5h-391q-16 0 -27.5 11.5t-11.5 27.5zM1098 1106v391q0 16 11 27.5t28 11.5h391 q16 0 27.5 -11.5t11.5 -27.5v-391q0 -16 -11.5 -27.5t-27.5 -11.5h-391q-39 0 -39 39z" />
+<glyph unicode="&#xf077;" horiz-adv-x="1536" d="M-1 355.5q-1 37.5 28 66.5l673 674q29 29 68 28.5t68 -28.5l671 -674q29 -29 29 -67t-29 -66l-100 -103q-29 -29 -68 -28.5t-67 28.5l-508 510l-500 -510q-29 -29 -67.5 -28.5t-67.5 28.5l-100 103q-29 29 -30 66.5z" />
+<glyph unicode="&#xf078;" horiz-adv-x="1536" d="M0 918.5q0 37.5 29 66.5l100 102q29 29 68 29t67 -29l508 -509l500 509q29 29 67.5 29t67.5 -29l100 -102q29 -29 30 -66.5t-28 -66.5l-673 -674q-29 -29 -68 -28.5t-68 28.5l-671 674q-29 29 -29 66.5z" />
+<glyph unicode="&#xf079;" horiz-adv-x="1916" d="M2.5 1038.5q-12.5 30.5 28.5 75.5l385 424q25 29 63 29q39 0 64 -29l385 -424q41 -45 28.5 -75.5t-67.5 -30.5h-250v-680h174q6 -10 12 -19.5t17 -19.5l252 -281h-695q-33 0 -56.5 23.5t-23.5 56.5v920h-249q-55 0 -67.5 30.5zM823 1526h695q33 0 56 -22.5t23 -57.5v-918 h250q55 0 67.5 -30.5t-28.5 -75.5l-385 -424q-25 -29 -63 -29q-39 0 -64 29l-385 424q-41 45 -28.5 75.5t67.5 30.5h250v678h-174q-6 10 -12.5 20.5t-14.5 20.5z" />
+<glyph unicode="&#xf07a;" d="M0 1421v76q0 39 39 39h231q16 0 38 -4t36 -8q6 -4 14.5 -14.5t15.5 -23.5t12 -26.5t7 -21.5l27 -125h1347q35 0 58 -27t16 -59l-108 -578q-6 -25 -26.5 -42t-49.5 -17h-1084l35 -168q4 -16 17.5 -26.5t29.5 -10.5h856q16 0 27.5 -11.5t11.5 -27.5v-78q0 -16 -11 -26.5 t-28 -10.5h-163h-652h-104q-16 0 -36.5 3.5t-35.5 9.5q-6 2 -14 13t-15.5 24.5t-12.5 27t-7 21.5l-215 1016q-4 16 -17.5 26t-29.5 10h-170q-39 0 -39 39zM582 115q0 47 33.5 81.5t80.5 34.5q49 0 83 -34.5t34 -81.5t-34 -81t-83 -34q-47 0 -80.5 34t-33.5 81zM1233 115 q0 47 33.5 81.5t81.5 34.5q47 0 80.5 -34.5t33.5 -81.5t-33.5 -81t-80.5 -34t-81 34t-34 81z" />
+<glyph unicode="&#xf07b;" d="M0 115v1306q0 47 34 81t81 34h692q47 0 81 -34t34 -81t33.5 -80.5t80.5 -33.5h693q47 0 80.5 -35t33.5 -82v-1075q0 -47 -33.5 -81t-80.5 -34h-1614q-47 0 -81 34t-34 81z" />
+<glyph unicode="&#xf07c;" d="M0 379v1042q0 47 34 81t81 34h692q47 0 81 -34t34 -81t33.5 -80.5t80.5 -33.5h443q47 0 80.5 -35t33.5 -82v-221h-1228q-37 0 -72 -12.5t-65.5 -34t-53 -51t-35.5 -64.5zM43 0l246 760q6 23 30.5 39t47.5 16h1476l-260 -758q-6 -23 -30.5 -40t-47.5 -17h-1462z" />
+<glyph unicode="&#xf07d;" horiz-adv-x="798" d="M2 368.5q10 22.5 57 22.5h203v754h-203q-47 0 -57 22.5t25 57.5l319 319q23 23 53 23q31 0 54 -23l321 -319q33 -35 22.5 -57.5t-57.5 -22.5h-202v-754h202q47 0 57.5 -22.5t-24.5 -57.5l-319 -319q-23 -23 -54 -23t-53 23l-321 319q-33 35 -23 57.5z" />
+<glyph unicode="&#xf07e;" horiz-adv-x="1597" d="M0 729q0 31 23 53l319 322q35 33 57.5 23.5t22.5 -56.5v-205h754v203q0 47 22.5 57.5t56.5 -22.5l320 -322q23 -23 22 -53q0 -31 -22 -53l-320 -322q-35 -33 -57 -22.5t-22 57.5v203h-754v-203q0 -47 -22.5 -57t-57.5 24l-319 320q-23 23 -23 53z" />
+<glyph unicode="&#xf080;" d="M0 115v1306q0 47 35 81t82 34h1612q47 0 80.5 -34t33.5 -81v-1306q0 -47 -33.5 -81t-80.5 -34h-1612q-47 0 -82 34t-35 81zM154 154h1536v1228h-1536v-1228zM307 264v363h203v-363h-203zM649 264v776h201v-776h-201zM993 264v592h203v-592h-203zM1333 264v922h203v-922 h-203z" />
+<glyph unicode="&#xf081;" horiz-adv-x="1536" d="M0 193v1150q0 39 15.5 75t41 61.5t60.5 41t73 15.5h1153q80 0 136.5 -56.5t56.5 -136.5v-1150q0 -41 -15.5 -76t-41 -60.5t-61.5 -41t-75 -15.5h-1153q-39 0 -73.5 15.5t-60 41t-41 60.5t-15.5 76zM201 559q80 -111 198.5 -169t259.5 -58q96 0 184.5 26.5t160 73.5 t124 112.5t76.5 143.5q82 6 129 57q14 14 4 33q-8 18 -30 15h-4q23 23 30 45q8 20 -8 32q-14 14 -33 2q-8 -4 -29.5 -10t-45.5 -6q-4 0 -7.5 1t-7.5 1q0 2 -1 4t-1 4q-16 61 -57 110.5t-94 72.5q4 4 6 8t6 8q6 16 0 33q-2 6 -12.5 16t-34.5 8q-2 4 -6 8q-12 12 -25 9 q-25 -4 -49 -13l-2 2q-14 8 -31 -2q-59 -37 -98 -100t-68 -135q-35 31 -57 41q-61 35 -129 63.5t-154 61.5q-14 4 -24 -4q-10 -6 -15 -21q-2 -27 8.5 -58.5t38.5 -62.5q-25 -6 -20 -32q12 -68 68 -101l-13 -12q-14 -14 -4 -33q4 -12 26.5 -37.5t65.5 -38.5q-6 -12 -6 -22 t2 -14q6 -33 39 -50q-37 -25 -79 -34t-85 -5.5t-83 20.5t-70 46q-8 8 -19.5 8t-19.5 -8q-23 -18 -4 -39z" />
+<glyph unicode="&#xf082;" horiz-adv-x="1536" d="M2 193v1150q0 39 15.5 75t41 61.5t60.5 41t74 15.5h1153q80 0 136 -56.5t56 -136.5v-1150q0 -41 -15.5 -76t-41 -60.5t-61.5 -41t-74 -15.5h-486v643h172q12 0 21.5 8t9.5 21l12 168q0 14 -8 24q-10 10 -23 10h-184v74q0 41 10.5 54.5t53.5 13.5q25 0 55.5 -4t58.5 -11 q6 0 13.5 1.5t11.5 5.5q10 6 14 22l23 162q4 29 -25 35q-90 25 -188 24q-301 0 -301 -293v-84h-103q-33 0 -32 -32v-168q0 -12 9 -21.5t23 -9.5h103v-643h-393q-39 0 -74 15.5t-60.5 41t-41 60.5t-15.5 76z" />
+<glyph unicode="&#xf083;" d="M0 115v1306q0 47 34 81t81 34h1614q47 0 80.5 -34t33.5 -81v-1306q0 -47 -33.5 -81t-80.5 -34h-1614q-47 0 -81 34t-34 81zM154 160h1536v114h-1536v-114zM154 1145h1536v231h-957l-14 -92h-565v-139zM266 1341h316v93h-316v-93zM557 709q0 -76 28.5 -142.5t78 -116 t116 -78t142.5 -28.5t142 28.5t115.5 78t78 116t28.5 142.5t-28.5 142.5t-78 115.5t-116 77.5t-141.5 28.5q-76 0 -142.5 -28.5t-116 -77.5t-78 -115.5t-28.5 -142.5zM672 709q0 51 19.5 97t53 80t79.5 53t98 19q51 0 97 -19t80 -53t53 -80t19 -97t-19 -97.5t-53 -80 t-80 -53t-97 -19.5t-97.5 19.5t-80 53t-53 79.5t-19.5 98zM743 709q0 -16 12.5 -28.5t28.5 -12.5q18 0 30.5 12.5t12.5 28.5q0 41 28 67.5t67 26.5v2q18 0 30.5 12t12.5 29q0 18 -12.5 30.5t-30.5 12.5q-74 0 -126.5 -53.5t-52.5 -126.5z" />
+<glyph unicode="&#xf084;" horiz-adv-x="1916" d="M0 803.5q-6 111.5 30 230.5t113 228q78 109 179.5 180t209 102t213 17.5t191.5 -74.5q76 -53 121 -134t59 -176.5t-4 -199t-68 -203.5l414 -297l101 139l-105 74q-14 10 -17 27.5t7 32.5l51 69q10 14 26.5 17.5t32.5 -7.5l344 -247q16 -10 18.5 -27.5t-7.5 -32.5l-49 -69 q-10 -14 -27.5 -17.5t-32.5 6.5l-102 76l-101 -139l248 -178q43 -31 52.5 -83t-21.5 -95q-33 -43 -84 -51.5t-94 22.5l-803 573q-78 -80 -170 -130t-186.5 -68.5t-185.5 -2t-167 71.5q-86 61 -133 157.5t-53 208zM230.5 766q7.5 -41 30 -78t58.5 -63q37 -27 79 -36t83 -2 t78 29.5t64 59.5q39 53 41 114.5t-27 114.5q59 -10 116.5 11.5t96.5 74.5q27 37 36 79t2 84t-29.5 79t-59.5 63q-37 27 -79 36t-84 2t-79 -29.5t-63 -59.5q-37 -53 -39 -114.5t26 -114.5q-59 10 -116.5 -12.5t-96.5 -75.5q-27 -37 -36 -79t-1.5 -83z" />
+<glyph unicode="&#xf085;" horiz-adv-x="1916" d="M0 801v180q0 8 22.5 15.5t52 11.5t56.5 7t37 3q12 49 37 88q-23 31 -45.5 61.5t-46.5 59.5l-4 10q0 6 20.5 29.5t47 50t50 47t29.5 20.5q2 0 20.5 -13t41 -30.5t43 -34t24.5 -20.5q43 25 90 37q0 8 3 37t7 57.5t10.5 52t16.5 23.5h178q8 0 15.5 -23.5t11.5 -52t7 -57.5 t5 -37q45 -12 86 -35q31 23 62.5 45.5t60.5 46.5l8 4q4 0 27.5 -21.5t49.5 -47t47.5 -49t21.5 -29.5q0 -4 -13.5 -22.5t-30 -40t-32 -41t-19.5 -25.5q23 -39 39 -92q10 -2 37 -5t55.5 -8.5t51 -11.5t22.5 -14v-178q0 -10 -22.5 -16.5t-51 -11.5t-56.5 -7t-36 -4 q-14 -43 -37 -88q23 -31 44.5 -60.5t48.5 -58.5l2 -10q0 -6 -20.5 -30t-47.5 -50.5t-50.5 -47t-29.5 -20.5q-2 0 -20.5 13.5t-41 31t-42 32.5t-25.5 20q-45 -23 -88 -37q0 -10 -3 -37t-8 -56.5t-12.5 -52t-15.5 -22.5h-178q-8 0 -15.5 22.5t-11.5 52t-7 56t-3 37.5 q-45 12 -88 37q-31 -23 -61.5 -46.5t-59.5 -48.5l-10 -2q-4 0 -27.5 20.5t-49 47t-46 50.5t-20.5 30q0 2 13 20.5t29.5 40t31 41t18.5 25.5q-23 43 -39 94q-10 2 -37 5t-55.5 7t-51 10.5t-22.5 14.5zM420 889q0 -37 14.5 -70t39 -57.5t58 -38.5t70.5 -14t70 14t57.5 38.5 t38.5 57.5t14 70t-14 70.5t-38.5 58t-57.5 39t-70 14.5q-76 0 -129 -53t-53 -129zM1114 373q0 6 13.5 13t31 14.5t33.5 12.5t22 7q4 23 9.5 39t15.5 37q-4 4 -13 17t-18.5 27.5t-16.5 28t-7 17.5t18.5 23.5t43 41t47 40t28.5 24.5l8 4q4 0 16.5 -8.5t25.5 -19.5t25.5 -21.5 t16.5 -14.5q35 12 76 19q2 6 9 21.5t16.5 30.5t17.5 27.5t14 12.5q4 0 34 -7t63.5 -18.5t60.5 -23.5t27 -23q0 -23 -5.5 -47t-9.5 -47q16 -12 28.5 -26.5t22.5 -30.5q25 2 49.5 3t47.5 1q8 0 18 -26.5t17.5 -60.5t12.5 -64.5t5 -39.5q0 -6 -13.5 -13t-29.5 -13t-32.5 -12.5 t-22.5 -8.5q-9 -38 -23 -71q2 -6 11.5 -18.5t18.5 -27t16 -27.5t7 -18q0 -4 -18.5 -23.5t-43 -41t-47 -40.5t-28.5 -26l-8 -4q-4 0 -16.5 8.5t-25.5 19.5t-25.5 21.5t-16.5 14.5q-37 -12 -78 -19q-2 -6 -9 -21.5t-15.5 -30.5t-16.5 -27.5t-14 -12.5t-35 7.5t-62.5 18.5 t-60 23.5t-26.5 22.5q0 23 5 47.5t9 46.5q-16 12 -28.5 26.5t-22.5 30.5q-23 -2 -45.5 -3t-44.5 -1h-14.5t-8.5 11q-2 8 -8 35.5t-13.5 58t-12.5 55.5t-5 29zM1192 1264q0 6 12.5 12t29.5 10t33.5 6t22.5 4q10 33 31 64q-2 4 -8 17.5t-12.5 27.5t-11.5 25.5t-5 15.5 q0 6 21.5 22.5t49 35t51.5 32.5t28 14t13 -9t20.5 -21.5t20.5 -23.5t13 -15q14 4 28.5 6t29.5 0h14q2 4 11 16.5t18.5 25.5t17.5 23.5t12 10.5t30 -11.5t55.5 -26t53 -28.5t23.5 -20q0 -4 -4 -15.5t-8 -26t-8.5 -27.5t-6.5 -17q20 -25 39 -60q51 -4 74 -7t29 -18.5t5 -52 t3 -106.5q0 -6 -12.5 -12.5t-28.5 -10.5t-32.5 -6t-22.5 -4q-13 -36 -31 -63q2 -4 8 -16.5t13.5 -27t12.5 -26.5t5 -14q0 -6 -22.5 -23.5t-50 -36t-51.5 -33t-26 -14.5q-4 0 -14 9.5t-21.5 21.5t-20.5 23.5t-13 15.5q-14 -4 -28.5 -6t-29.5 0h-14q-4 -4 -12 -16.5t-17.5 -26 t-18.5 -23.5t-13 -10t-30 11t-54.5 25.5t-52 29t-23.5 20.5q0 2 3 14.5t8 26.5t9 27.5t6 17.5q-23 23 -38 59q-53 2 -75 5t-29 18.5t-5 52.5t-4 109zM1397 367q0 -49 34.5 -85t84.5 -36q49 0 84.5 34.5t35.5 86.5q0 49 -34.5 83.5t-85.5 34.5q-49 0 -84 -34.5t-35 -83.5z M1446 1206q0 -47 31.5 -78.5t76.5 -31.5q47 0 79 31.5t32 76.5q0 47 -31.5 79t-77.5 32q-47 0 -78.5 -32t-31.5 -77z" />
+<glyph unicode="&#xf086;" horiz-adv-x="1916" d="M0 997q0 119 61.5 222.5t167 180.5t246.5 122t303 45t303.5 -45t247 -122t166.5 -180.5t61 -222.5q0 -117 -61 -221t-166.5 -181t-247 -122t-303.5 -45q-37 0 -73.5 3t-71.5 7q-147 -113 -336 -155q-20 -4 -40.5 -7.5t-43.5 -7.5q-12 -2 -21.5 6.5t-13.5 18.5v2 q-4 12 3 19.5t18 17.5q18 18 34.5 36.5t29.5 42t24.5 55.5t19.5 79q-141 78 -224 195.5t-83 256.5zM649 258q6 4 13.5 8t13.5 8q51 -6 102 -6q197 0 369 56.5t298 155t198.5 231.5t72.5 286q0 41 -6 84q96 -78 151.5 -175t55.5 -208q0 -139 -83 -256.5t-224 -195.5 q8 -47 19 -79t25.5 -55.5t30 -42t33.5 -36.5q10 -10 17.5 -18.5t3.5 -18.5v-2q-2 -12 -12.5 -19.5t-22.5 -5.5q-23 4 -43.5 7.5t-40.5 7.5q-96 20 -180 60t-156 95q-35 -4 -71.5 -7t-73.5 -3q-141 0 -265 35t-225 94z" />
+<glyph unicode="&#xf087;" horiz-adv-x="1597" d="M0 193v643q0 49 35 83.5t84 34.5h348q27 14 43 30.5t35 39.5q16 20 32.5 38.5t34.5 37.5q33 35 76 68.5t66 74.5q16 29 23 64.5t12.5 71.5t12.5 70t23.5 60.5t47 42t81.5 15.5q61 0 111.5 -25.5t85.5 -68.5t54.5 -98.5t19.5 -112.5q0 -59 -17.5 -112.5t-42.5 -107.5 q35 2 70 4.5t70 2.5q55 0 107 -10.5t93 -35t66.5 -67.5t25.5 -109q0 -29 -5 -57t-15 -57q18 -43 18 -90q0 -78 -41 -142q10 -59 -7 -118.5t-58 -104.5q-4 -84 -45 -139.5t-102.5 -89t-135 -47t-143.5 -13.5q-72 0 -144.5 10.5t-142.5 28.5q-70 20 -139.5 43t-142.5 23h-375 q-49 0 -84 34.5t-35 84.5zM236 276q0 -35 22 -57t57 -22q33 0 56.5 22.5t23.5 56.5q0 33 -23.5 56.5t-56.5 23.5q-35 0 -57 -23.5t-22 -56.5zM492 193q70 0 136 -16.5t133.5 -35t141.5 -35t160 -16.5q45 0 98 6t99.5 26.5t78 56.5t31.5 95q0 10 -1 18.5t-3 18.5 q35 16 53.5 53t18.5 74q0 39 -21 68q60 49 60 123q0 23 -12.5 43t-26.5 35q16 29 28.5 57.5t12.5 62.5q0 35 -17.5 55.5t-43 31t-56.5 12.5t-57 2q-45 0 -90.5 -3t-90.5 -3q-31 0 -61.5 3t-58.5 15q0 41 16 78t35.5 74.5t35 78.5t15.5 91q0 33 -10.5 65.5t-29.5 59t-47 44 t-65 17.5h-11t-11 -2q-8 -4 -9 -8t-3 -13q-12 -59 -22.5 -123.5t-39.5 -117.5q-29 -51 -74 -88t-86 -78q-29 -31 -49 -56.5t-41.5 -48t-48.5 -42t-65 -35.5h-2v-643z" />
+<glyph unicode="&#xf088;" horiz-adv-x="1597" d="M0 309q0 29 5 57.5t15 57.5q-18 43 -18 90q0 78 41 141q-10 59 7.5 119t58.5 105q4 84 45 139t102 89t135 47t144 13q72 0 144.5 -10t141.5 -29q70 -20 139.5 -42.5t143.5 -22.5h375q49 0 83.5 -35t34.5 -84v-643q0 -49 -34.5 -84t-83.5 -35h-349q-27 -14 -43 -30.5 t-34 -38.5q-16 -20 -32.5 -39t-35.5 -37q-33 -35 -76 -69t-65 -74q-25 -43 -31 -99.5t-18.5 -106.5t-44 -84t-107.5 -34q-61 0 -111.5 25.5t-85 68.5t-54 98.5t-19.5 112.5q0 59 17.5 112.5t41.5 106.5q-35 -2 -69.5 -4t-69.5 -2q-55 0 -107.5 10.5t-93.5 35t-66.5 67.5 t-25.5 108zM119 309q0 -35 17.5 -55.5t43 -30.5t56 -12t57.5 -2q47 0 91 3t89 3q31 0 61.5 -3t59.5 -15q0 -41 -16.5 -78t-36 -75t-34.5 -79t-15 -90q0 -33 10 -65.5t29.5 -59t47 -43t64.5 -16.5q4 0 11.5 -1t11.5 1q8 4 9 8l3 12q12 59 22.5 124t38.5 118q29 51 74 88 t86 78q29 31 49.5 56.5t42 48t47 42t66.5 35.5h2v643q-72 0 -137.5 16.5t-133 36t-141 36t-159.5 16.5q-45 0 -98.5 -7.5t-99.5 -27t-78 -56t-32 -96.5q0 -10 1 -18t3 -19q-35 -16 -53 -53t-18 -74q0 -39 20 -67q-59 -49 -59 -123q0 -23 12 -43.5t27 -34.5 q-16 -29 -28.5 -57.5t-12.5 -63.5zM1202 860q0 -33 23.5 -56.5t56.5 -23.5q35 0 57.5 23.5t22.5 56.5q0 35 -22.5 57.5t-57.5 22.5q-33 0 -56.5 -22.5t-23.5 -57.5z" />
+<glyph unicode="&#xf089;" horiz-adv-x="837" d="M1 959.5q9 27.5 54 33.5l506 74l227 459q23 41 50 41v-1348l-453 -237q-41 -23 -64.5 -6.5t-15.5 63.5l86 504l-364 356q-35 33 -26 60.5z" />
+<glyph unicode="&#xf08a;" horiz-adv-x="1802" d="M0 1073q0 137 43 231.5t112.5 153t156.5 84t177 25.5q63 0 125 -21.5t115 -53.5t97 -70t75 -68q31 31 76 68.5t98 69.5t113.5 53.5t126.5 21.5q88 0 175 -25.5t156.5 -84t112.5 -153t43 -231.5q0 -94 -34.5 -177t-76.5 -146.5t-79 -102.5t-39 -43l-615 -612 q-26 -23 -57 -23q-33 0 -55 23l-617 614q-4 2 -39.5 41t-77.5 102.5t-77 146.5t-35 177zM160 1073q0 -68 27.5 -131t61.5 -112.5t63 -79.5l28 -29l561 -559l561 559l29 29q29 30 62.5 79.5t61 113t27.5 130.5q0 104 -29.5 169t-77.5 101.5t-106.5 50t-113.5 13.5 q-53 0 -107.5 -25.5t-102.5 -61.5t-86 -74t-56 -60q-25 -31 -62 -31t-61 31q-18 23 -56.5 60.5t-86.5 73.5t-102.5 61.5t-105.5 25.5q-57 0 -115.5 -13.5t-106.5 -50t-77.5 -101t-29.5 -169.5z" />
+<glyph unicode="&#xf08b;" horiz-adv-x="1689" d="M0 307v922q0 63 24.5 118.5t66.5 97.5t97.5 66.5t118.5 24.5h461v-193h-461q-47 0 -80.5 -33.5t-33.5 -80.5v-922q0 -47 33.5 -80.5t80.5 -33.5h461v-193h-461q-63 0 -118.5 24.5t-97.5 66.5t-66.5 97.5t-24.5 118.5zM508 584v368q0 33 22.5 54.5t55.5 21.5h428v293 q0 41 39 57q39 14 65 -14l553 -553q18 -18 18.5 -44t-18.5 -42l-553 -553q-18 -18 -43 -18q-10 0 -22 4q-39 16 -39 57v291h-428q-33 0 -55.5 22.5t-22.5 55.5z" />
+<glyph unicode="&#xf08c;" horiz-adv-x="1536" d="M0 193v1150q0 39 15.5 75t41 61.5t60.5 41t76 15.5h1150q80 0 136.5 -56.5t56.5 -136.5v-1150q0 -41 -15.5 -76t-41 -60.5t-61.5 -41t-75 -15.5h-1150q-80 0 -136.5 56.5t-56.5 136.5zM207 1192q0 -57 40 -97t95 -40q57 0 97 40t40 97q0 55 -40 95t-97 40q-55 0 -95 -40 t-40 -95zM213 240q0 -10 9 -19.5t20 -9.5h200q12 0 20.5 9t8.5 20v706q0 29 -29 29h-200q-10 0 -19.5 -8.5t-9.5 -20.5v-706zM580 240q0 -10 9 -19.5t19 -9.5h201q12 0 20.5 9t8.5 20v383q0 68 26.5 113.5t102.5 45.5q59 0 79.5 -28.5t20.5 -81.5v-432q0 -10 8 -19.5 t21 -9.5h204q10 0 19.5 9t9.5 20v477q0 141 -81 208.5t-216 67.5q-55 0 -107.5 -15t-93.5 -56q0 16 -3 34.5t-25 18.5h-195q-10 0 -19 -8.5t-9 -20.5v-706z" />
+<glyph unicode="&#xf08d;" horiz-adv-x="1916" d="M2 950q8 82 45 172t100 176t139 147.5t152 92.5t145.5 30t121.5 -40q53 -41 73.5 -107.5t12.5 -148.5l301 -225q111 63 215 73t180 -47q55 -41 80.5 -108.5t23.5 -150.5t-30.5 -177t-83.5 -188l428 -410q25 -25 4 -53q-12 -16 -33 -17q-10 0 -18 6l-517 293 q-74 -80 -155.5 -135t-161.5 -80.5t-151.5 -19.5t-127.5 47q-76 55 -95 158.5t9 228.5l-303 223q-76 -33 -145.5 -32t-122.5 40q-51 39 -72.5 104.5t-13.5 147.5zM171 858.5q3 -16.5 15 -27.5q21 -14 50 -14q31 0 65.5 17.5t71.5 46t72.5 66.5t66.5 79q10 14 7 30.5 t-15 26.5q-14 10 -30.5 8.5t-27.5 -16.5q-78 -104 -138 -143t-72 -35q-14 10 -31 7t-27 -15q-10 -14 -7 -30.5zM465 754l364 -271q8 -8 23 -8q20 0 33 17q10 14 8 29.5t-16 25.5l-347 258q-16 -14 -32.5 -27.5t-32.5 -23.5zM829.5 239.5q1.5 -16.5 16.5 -26.5q29 -23 69 -23 q41 0 88.5 21.5t95.5 57.5t94 84.5t87 101.5q10 12 8 28.5t-16 26.5q-12 10 -28.5 8t-26.5 -16q-51 -68 -102.5 -116t-95.5 -75.5t-78 -36t-48 4.5q-14 10 -29.5 7t-25.5 -18q-10 -12 -8.5 -28.5z" />
+<glyph unicode="&#xf08e;" d="M0 307v922q0 63 24.5 119.5t65.5 97.5t97.5 65.5t119.5 24.5h582q-2 -14 -4 -27.5t-2 -29.5v-88q0 -23 6 -48h-582q-47 0 -80.5 -33.5t-33.5 -80.5v-922q0 -47 33.5 -80.5t80.5 -33.5h1075q47 0 81 33.5t34 80.5v340q41 -31 90 -49t103 -20v-271q0 -63 -25 -118.5 t-67 -97.5t-97 -66.5t-119 -24.5h-1075q-63 0 -119.5 24.5t-97.5 66.5t-65.5 97.5t-24.5 118.5zM692.5 522q-0.5 25 16.5 41l770 772h-269q-25 0 -41 16.5t-16 41.5v86q-2 23 15.5 40t41.5 17h576q23 0 40 -17.5t17 -39.5v-86v-490q0 -25 -17.5 -42t-39.5 -15h-86 q-25 0 -41.5 16.5t-16.5 40.5v268l-772 -770q-16 -16 -40.5 -16t-41.5 16l-79 80q-16 16 -16.5 41z" />
+<glyph unicode="&#xf090;" horiz-adv-x="1689" d="M0 584v368q0 33 22.5 54.5t55.5 21.5h428v293q0 41 37 57q39 14 67 -14l553 -553q16 -18 16.5 -44t-16.5 -42l-553 -553q-18 -18 -43 -18q-8 0 -24 4q-37 16 -37 57v291h-428q-33 0 -55.5 22.5t-22.5 55.5zM922 0v193h460q47 0 81 33.5t34 80.5v922q0 47 -33.5 80.5 t-81.5 33.5h-460v193h460q63 0 118.5 -24.5t97.5 -65.5t67 -97.5t25 -119.5v-922q0 -63 -25 -118.5t-67 -97.5t-97 -66.5t-119 -24.5h-460z" />
+<glyph unicode="&#xf091;" horiz-adv-x="1689" d="M0 1042v187q0 33 22.5 54.5t55.5 21.5h323q-2 12 -2 25v24v4q0 53 4.5 88t15.5 54.5t31.5 27.5t55.5 8h678q33 0 54.5 -8t32.5 -27.5t15 -54.5t4 -88v-25.5t-2 -27.5h324q33 0 55.5 -21.5t22.5 -54.5v-187q0 -63 -45.5 -130.5t-122 -128t-180 -106.5t-222.5 -65 q-51 -10 -91 -41.5t-40 -70.5q0 -35 17.5 -51.5t39 -31t40 -31.5t22.5 -52q4 -23 -2 -47q-4 -14 23.5 -23.5t67.5 -18.5t82 -22.5t64 -34.5q12 -10 19.5 -39.5t9.5 -64.5q2 -33 -6 -58.5t-29 -25.5h-985q-20 0 -28.5 25.5t-6.5 58.5q2 35 9.5 64.5t19.5 39.5q23 20 64 34 t80.5 23t68.5 18t25 24q-4 14 -4 25.5v21.5q2 35 21.5 52t42 31.5t39.5 31t17 51.5q0 39 -39.5 70.5t-93.5 41.5q-117 20 -220 66.5t-180 106t-122 127t-45 130.5zM154 1042q0 -20 23.5 -54t67.5 -70.5t106.5 -71.5t140.5 -60q-25 80 -44.5 175.5t-33.5 189.5h-260v-109z M1198 786q78 25 140.5 60t106.5 71.5t67.5 70.5t23.5 54v109h-262q-12 -94 -31.5 -189.5t-44.5 -175.5z" />
+<glyph unicode="&#xf092;" horiz-adv-x="1536" d="M0 193v1150q0 39 15.5 75t41 61.5t60.5 41t76 15.5h1150q80 0 136.5 -56.5t56.5 -136.5v-1150q0 -41 -15.5 -76t-41 -60.5t-61.5 -41t-75 -15.5h-337v25q0 39 2 97t-3.5 115.5t-24.5 104.5t-65 66q188 20 290 110t102 287q0 66 -22.5 128t-67.5 114q6 23 8 45t2 45 q0 41 -9.5 91t-31.5 85h-12q-43 2 -79 -8.5t-68 -27.5t-62.5 -37.5t-65.5 -39.5q-33 4 -65.5 6t-65.5 2t-65.5 -2t-65.5 -6q-35 18 -65.5 39t-62.5 38t-67.5 27.5t-79.5 8.5h-12q-23 -35 -32 -85t-9 -91q0 -23 2 -45.5t8 -44.5q-45 -51 -66.5 -114t-21.5 -128 q0 -193 95.5 -283t281.5 -112q-39 -16 -59.5 -50t-32.5 -75q-27 -8 -49.5 -15.5t-50.5 -7.5q-55 0 -88 28.5t-59.5 62.5t-56.5 62.5t-79 28.5q-4 0 -20.5 -2t-16.5 -12q0 -23 19.5 -32t31.5 -19q39 -31 56.5 -71t39 -76.5t62.5 -62.5t127 -26q35 0 80 11q0 -10 -1 -18.5 t-1 -16.5q0 -29 2 -59.5t-2 -59.5h-317q-80 0 -136.5 56.5t-56.5 136.5z" />
+<glyph unicode="&#xf093;" d="M0 39v614q0 16 11.5 27.5t27.5 11.5h229q16 0 27.5 -11t11.5 -28v-346h1229v346q0 16 11.5 27.5t27.5 11.5h229q16 0 27.5 -11t11.5 -28v-614q0 -39 -39 -39h-1765q-39 0 -39 39zM346 969.5q-6 15.5 16 38.5l504 505q23 23 55.5 23t55.5 -23l506 -505q23 -23 15.5 -38.5 t-38.5 -15.5h-307v-499q0 -33 -22.5 -55.5t-55.5 -22.5h-307q-33 0 -54.5 22.5t-21.5 55.5v499h-307q-33 0 -39 15.5z" />
+<glyph unicode="&#xf094;" horiz-adv-x="1609" d="M2 514q-2 35 1 68.5t7 74.5q4 35 7 72t10 66q14 66 30.5 128t44.5 117q20 41 45 81t54 79q10 14 21 24.5t24 20.5q23 23 45 45.5t49 42.5t57.5 36.5t65.5 33.5q33 16 67.5 29.5t71.5 27.5q70 29 156 51l2 2q45 12 85 17.5t79 5.5q59 0 112.5 -9t106.5 -20q41 -8 85 -15 t93 -7h2q29 0 62.5 5t66.5 5q25 0 45.5 -6t32.5 -25q23 -31 26 -71.5t-2 -75.5q-4 -35 -8 -71t2 -72q4 -23 11.5 -39.5t15.5 -36.5q8 -18 11 -40t7 -42q18 -104 15.5 -195.5t-23 -170.5t-56.5 -148.5t-81 -132.5q-37 -49 -79 -97.5t-92 -91.5t-110.5 -77.5t-134.5 -59.5 q-76 -27 -158.5 -34t-158.5 -11h-31q-104 0 -194.5 16.5t-192.5 16.5h-4q-35 0 -77 -10.5t-83 -12.5h-2q-37 0 -65.5 17.5t-42.5 42.5q-20 35 -17.5 72.5t12.5 68.5t10.5 66.5t-5 75.5t-12.5 81t-9 82z" />
+<glyph unicode="&#xf095;" horiz-adv-x="1597" d="M0 1169q0 55 14.5 114.5t43 114t68.5 98.5t93 69q12 -2 26.5 0t26.5 2q10 0 30 -1l40 -2t38.5 -4.5t27.5 -7.5q8 -6 15 -18t12 -26.5t9.5 -30t8.5 -25.5q6 -18 23.5 -65.5t35.5 -97.5t32.5 -93t14.5 -53q0 -37 -24.5 -68t-54 -57.5t-54.5 -50t-25 -45.5q0 -20 16.5 -49 t26.5 -46q84 -145 188.5 -248.5t252.5 -187.5q18 -10 45.5 -27.5t50.5 -17.5t52.5 32t60 70.5t62 70.5t58.5 32q10 0 51.5 -22.5t89.5 -50t93 -55.5t61 -36q16 -10 46 -25.5t40 -35.5q2 -6 2 -23q0 -16 -3 -36.5t-8 -43t-12 -43t-13 -35.5q-18 -39 -59.5 -71.5t-92.5 -55 t-104.5 -36t-92.5 -13.5q-80 0 -153.5 25.5t-145.5 54.5q-123 45 -232.5 118t-203.5 164t-175 196.5t-144 215.5q-25 41 -52.5 95.5t-51 112t-39 113.5t-15.5 105z" />
+<glyph unicode="&#xf096;" d="M0 307v922q0 63 24.5 118.5t66.5 97.5t97.5 66.5t118.5 24.5h1075q63 0 118.5 -24.5t97.5 -66.5t67 -97.5t25 -118.5v-922q0 -63 -25 -118.5t-67 -97.5t-97 -66.5t-119 -24.5h-1075q-63 0 -118.5 24.5t-97.5 66.5t-66.5 97.5t-24.5 118.5zM193 307q0 -47 33.5 -80.5 t80.5 -33.5h1075q47 0 81 33.5t34 80.5v922q0 47 -34 80.5t-81 33.5h-1075q-47 0 -80.5 -33.5t-33.5 -80.5v-922z" />
+<glyph unicode="&#xf097;" horiz-adv-x="1253" d="M0 84v1337q0 47 34 81t81 34h1024q47 0 80.5 -34t33.5 -81v-1337q0 -47 -33.5 -81t-80.5 -34t-80 33l-432 432l-432 -432q-33 -33 -80 -33t-81 34t-34 81zM158 186l469 471l469 -471v1194h-938v-1194z" />
+<glyph unicode="&#xf098;" horiz-adv-x="1536" d="M0 193v1150q0 39 15.5 75t41 61.5t60.5 41t76 15.5h1150q80 0 136.5 -56.5t56.5 -136.5v-1150q0 -41 -15.5 -76t-41 -60.5t-61.5 -41t-75 -15.5h-1150q-80 0 -136.5 56.5t-56.5 136.5zM193 1040q2 -35 15 -76.5t30 -78.5q16 -37 33.5 -72t33.5 -63q74 -129 176.5 -241 t225.5 -190q31 -18 67.5 -36.5t75.5 -32.5q41 -16 83 -31.5t81 -21.5q63 -10 112.5 2t90.5 34q27 12 57.5 33.5t44.5 52.5q4 8 9 27t9 38t6.5 37.5t-2.5 29.5q-4 12 -24.5 22t-36.5 21q-43 25 -71.5 41t-67.5 38q-16 10 -36 23.5t-38 13.5q-23 0 -46.5 -27.5t-37.5 -43.5 q-12 -14 -36.5 -43t-47.5 -31q-14 -2 -32.5 10t-37.5 23q-106 59 -182 136t-135 177q-10 16 -21.5 37.5t-7.5 38.5q2 18 24.5 33.5t35.5 29.5q14 16 31.5 37t19.5 43q4 16 -5 38t-16 42q-16 43 -28.5 76t-26.5 76q-6 16 -12 40.5t-21 30.5q-8 4 -26.5 7t-39 4.5t-37.5 0 t-24 -1.5h-8q-33 -16 -62.5 -45.5t-51 -69.5t-34 -88t-9.5 -100z" />
+<glyph unicode="&#xf099;" d="M0 399q0 20 13.5 33.5t33.5 13.5q14 0 31 -12q123 -109 287 -108q59 0 117.5 15t107.5 48q-29 16 -47.5 42t-18.5 58q0 23 8 39q-18 6 -44.5 20.5t-51 34t-41 43t-16.5 46.5q0 16 10 28.5t25 22.5q-41 25 -76 74t-35 98q0 33 33 43q-35 35 -55.5 81t-20.5 95 q0 23 9.5 41.5t37.5 18.5q18 0 84 -27t142.5 -60.5t146.5 -67.5t98 -48q25 -14 47.5 -31.5t44.5 -36.5q20 51 47 106.5t60 106.5t73 96t89 74q8 6 24 6q18 0 27 -8q16 6 41.5 13.5t42.5 7.5q29 0 43 -27q31 0 56.5 -15.5t25.5 -50.5q0 -31 -27 -53q96 -43 159.5 -125 t90.5 -182q6 -2 23 -2q47 0 88 16.5t57 16.5q18 0 31.5 -14.5t13.5 -32.5q0 -23 -19.5 -48.5t-33.5 -39.5q23 4 42 -7.5t19 -38.5q0 -29 -26.5 -50t-61.5 -37.5t-72.5 -25.5t-58.5 -11q-43 -139 -133 -246t-210 -178.5t-258 -109.5t-275 -38q-219 0 -415 93.5t-325 273.5 q-8 16 -8 26z" />
+<glyph unicode="&#xf09a;" horiz-adv-x="790" d="M0 862v203q0 16 11.5 28.5t27.5 12.5h125v102q0 358 366 359q123 0 232 -31q33 -10 29 -43l-27 -199q-4 -16 -16 -26q-16 -10 -31 -6q-35 8 -72.5 12t-66.5 4q-53 0 -65.5 -16.5t-12.5 -67.5v-88h223q14 0 29 -14q10 -10 10 -29l-17 -205q0 -16 -11 -25.5t-27 -9.5h-207 v-784q0 -16 -11.5 -27.5t-27.5 -11.5h-258q-16 0 -27.5 11.5t-11.5 27.5v784h-125q-16 0 -27.5 11.5t-11.5 27.5z" />
+<glyph unicode="&#xf09b;" horiz-adv-x="1847" d="M0 743q0 115 37 222.5t113 193.5l-3 4l3 2q-16 39 -21.5 81t-5.5 85q0 25 2 56.5t8 65.5t15.5 63.5t23.5 50.5h8q61 0 110.5 -12.5t94.5 -35t87 -52t91 -60.5q86 25 178.5 33t182.5 8t182 -8t180 -33q47 31 90 60.5t87 52t93.5 35t110.5 12.5h10q12 -20 21.5 -50 t15.5 -64t9 -65.5t3 -56.5q0 -43 -6 -85t-20 -81v-2l-2 -4q76 -86 112.5 -193.5t36.5 -222.5q0 -233 -66.5 -383.5t-188.5 -236.5t-292 -120t-376 -34q-207 0 -378 34t-292 120t-187.5 236.5t-66.5 383.5zM250 483q0 -145 64.5 -224t165 -116t219 -43t227.5 -6q74 0 152.5 2 t153.5 12.5t142.5 34t117.5 67.5t80 111.5t30 165.5q0 84 -27 147.5t-75 106.5t-114.5 64.5t-146.5 21.5q-78 0 -156.5 -7t-156.5 -7t-157 7t-157 7q-162 0 -262 -87t-100 -257zM494 524q0 66 26.5 113t65.5 47t66.5 -47t27.5 -113t-27.5 -112.5t-66.5 -46.5t-65.5 46.5 t-26.5 112.5zM795 258q-6 16 12 25q16 6 24 -13q27 -76 93 -75q31 0 56.5 20.5t35.5 54.5q8 20 26 13q16 -6 13 -25q-16 -47 -51 -75.5t-80 -28.5q-43 0 -78 28.5t-51 75.5zM864 369q0 -12 17.5 -21.5t42.5 -9.5t42 9.5t17 21.5t-17.5 21t-41.5 9q-25 0 -42.5 -9t-17.5 -21z M1167 524q0 -66 28 -112.5t67 -46.5t65.5 46.5t26.5 112.5t-27 113t-65 47q-39 0 -67 -47t-28 -113z" />
+<glyph unicode="&#xf09c;" horiz-adv-x="1880" d="M0 117v626q0 49 35 84t82 35h665v156q0 113 43 213t118 175t175 118t213 43t213.5 -43t175 -118t117.5 -175.5t43 -212.5v-152q0 -33 -22.5 -55.5t-55.5 -22.5h-80q-33 0 -55 23t-22 55v152q0 66 -25 123t-67 99t-99 66.5t-123 24.5t-122 -24.5t-99 -66.5t-67.5 -99.5 t-24.5 -122.5v-156h119q47 0 81.5 -34.5t34.5 -84.5v-626q0 -47 -34.5 -82t-81.5 -35h-1020q-47 0 -82 35t-35 82zM494 164h266l-66 285q29 18 47.5 48.5t18.5 65.5q0 55 -39 95t-94 40t-94 -40t-39 -95q0 -35 18 -65.5t47 -46.5z" />
+<glyph unicode="&#xf09d;" d="M0 154v1228q0 63 45 108.5t109 45.5h1536q63 0 108 -45t45 -109v-1228q0 -63 -45 -108.5t-108 -45.5h-1536q-63 0 -108.5 45t-45.5 109zM154 154h1536v575h-1536v-575zM154 1114h1536v268h-1536v-268zM260 250v115h307v-115h-307zM676 250v115h446v-115h-446z" />
+<glyph unicode="&#xf09e;" horiz-adv-x="1566" d="M0 236q0 49 18.5 91t50 74.5t75 51t92.5 18.5t91 -18.5t74.5 -51t51 -74.5t18.5 -91t-18.5 -92.5t-51 -75t-74.5 -50t-91 -18.5t-92.5 18.5t-75 50t-50 74.5t-18.5 93zM0 819v158q0 35 25 57q23 23 53 23q2 0 3 -1t3 -1q193 -14 362.5 -95t301 -212.5t212 -301.5 t95.5 -362q4 -35 -21 -59q-23 -25 -57 -25h-158q-29 0 -51.5 20.5t-26.5 51.5q-12 133 -68.5 249.5t-145.5 205.5t-205.5 145.5t-249.5 68.5q-31 4 -51.5 27t-20.5 51zM0 1331v158q0 33 25 55q23 23 53 23h4q301 -16 565 -137t463 -320t319.5 -463t137.5 -565q4 -31 -23 -57 q-23 -25 -55 -25h-158q-31 0 -53.5 21.5t-24.5 52.5q-14 238 -110 446.5t-255 367.5t-368 255t-446 110q-31 2 -52.5 24.5t-21.5 53.5z" />
+<glyph unicode="&#xf0a0;" d="M0 193v382q0 23 6 45.5t12 45.5l238 727q20 63 75.5 103t121.5 40h938q66 0 121 -40t75 -103l238 -727q6 -23 12 -45.5t6 -45.5v-382q0 -41 -15.5 -76t-41 -60.5t-61 -41t-74.5 -15.5h-1458q-80 0 -136.5 56.5t-56.5 136.5zM154 193q0 -16 11 -27.5t28 -11.5h1458 q16 0 27.5 11t11.5 28v382q0 16 -11.5 27.5t-27.5 11.5h-1458q-16 0 -27.5 -11t-11.5 -28v-382zM213 768h1417l-188 578q-4 16 -19.5 26t-31.5 10h-938q-16 0 -31.5 -10t-20.5 -26zM1057 385q0 39 27.5 66.5t68.5 27.5q39 0 66.5 -27.5t27.5 -66.5q0 -41 -27.5 -68.5 t-66.5 -27.5q-41 0 -68.5 27.5t-27.5 68.5zM1364 385q0 39 27.5 66.5t68.5 27.5q39 0 66.5 -27.5t27.5 -66.5q0 -41 -27.5 -68.5t-66.5 -27.5q-41 0 -68.5 27.5t-27.5 68.5z" />
+<glyph unicode="&#xf0a1;" d="M0 754v229q0 63 45 108.5t109 45.5h499q115 0 245 33.5t255 90t235.5 128t186.5 147.5q63 0 108.5 -45t45.5 -109v-368q49 -12 81.5 -52.5t32.5 -93.5t-32.5 -93t-81.5 -52v-369q0 -63 -45.5 -108t-108.5 -45q-68 68 -164 132t-206.5 117.5t-227.5 91.5t-227 50 q-43 -12 -70 -40t-37 -62.5t-2 -70.5t37 -65q-25 -41 -23 -75.5t20.5 -66.5t49.5 -61.5t66 -58.5q-20 -43 -69.5 -65.5t-106 -25.5t-110.5 10.5t-85 43.5q-18 61 -40 125t-36 130.5t-14 138t24 151.5h-200q-63 0 -108.5 45t-45.5 109zM807 741q102 -16 206.5 -49t205 -78 t191.5 -99t165 -112v930q-76 -59 -166 -113.5t-190.5 -98.5t-205 -77.5t-206.5 -48.5v-254z" />
+<glyph unicode="&#xf0a2;" horiz-adv-x="1759" d="M0 317q104 78 172 172.5t109 201t60 224t28 240.5q6 84 56 159t126 131t163 89t167 33q74 0 163 -33t165.5 -88t129 -129t52.5 -158q6 -121 27.5 -239.5t63.5 -227t109.5 -204t167.5 -171.5q-4 -70 -56 -114.5t-120 -44.5h-469q-18 -82 -82.5 -135.5t-150.5 -53.5 t-151.5 53.5t-84.5 135.5h-469q-68 0 -120 45t-56 114zM238 317h1284q-78 86 -129.5 183.5t-84 202t-50 214t-25.5 222.5q-4 55 -41 104t-89 86t-111.5 57.5t-110.5 20.5q-47 0 -107.5 -21.5t-114 -56.5t-91.5 -83t-40 -99q-6 -111 -23.5 -222.5t-51 -218t-87 -205 t-128.5 -184.5zM713 209q0 -70 49 -119t119 -49q18 0 18 20t-18 21q-53 0 -91 37t-38 90q0 20 -19 20q-20 0 -20 -20z" />
+<glyph unicode="&#xf0a3;" horiz-adv-x="1597" d="M0 573q0 33 23 56l143 139l-143 139q-23 23 -23 56q0 25 16.5 45t40.5 26l195 49q-6 18 -15.5 48t-18.5 61t-16 59.5t-7 46.5q0 31 21.5 52.5t51.5 21.5q18 0 47 -7t60 -16.5t60.5 -18.5t47.5 -15l49 194q6 25 27 41.5t45 16.5q35 0 53 -23l142 -143l139 143q23 23 53 23 q27 0 47.5 -15.5t26.5 -42.5l49 -194q18 6 48 15t60.5 18.5t59.5 16.5t47 7q29 0 51.5 -21.5t22.5 -52.5q0 -18 -7 -46.5t-16.5 -59.5t-18.5 -60.5t-15 -48.5l194 -49q25 -6 41 -26.5t16 -44.5q0 -33 -22 -56l-145 -139l145 -139q23 -23 22 -56q0 -25 -16 -45t-41 -26 l-194 -49q6 -18 15 -48t18.5 -61t16.5 -59.5t7 -46.5q0 -29 -21.5 -51.5t-52.5 -22.5q-18 0 -47 7t-59.5 16.5t-60 18.5t-48.5 15l-49 -194q-6 -25 -26.5 -41.5t-45.5 -16.5q-33 0 -55 23l-139 143l-142 -143q-18 -23 -53 -23q-25 0 -45 16.5t-27 41.5l-49 194 q-18 -6 -47.5 -15t-60.5 -18.5t-59.5 -16.5t-47.5 -7q-31 0 -52 22.5t-21 51.5q0 18 7 46.5t16 59.5t18.5 60.5t15.5 48.5l-195 49q-25 6 -41 26.5t-16 44.5z" />
+<glyph unicode="&#xf0a4;" horiz-adv-x="1916" d="M0 193v643q0 49 35 83.5t84 34.5h348q27 14 42 30.5t34 39.5q16 20 33.5 38.5t33.5 37.5q35 35 77 68.5t65 74.5q25 43 29.5 99.5t17 106.5t44 84t109.5 34q61 0 111.5 -25.5t85.5 -68.5t54.5 -98.5t19.5 -112.5q0 -53 -15.5 -104.5t-38.5 -98.5h134l376 -2 q49 0 93.5 -17.5t76 -49.5t50 -75t18.5 -94q0 -49 -18.5 -92t-50 -74.5t-75.5 -49t-94 -17.5h-200q-10 -59 -39 -107q10 -59 -7.5 -117.5t-56.5 -103.5q0 -76 -28.5 -131t-75.5 -90t-109.5 -52.5t-132.5 -17.5q-78 0 -148.5 16.5t-136 36t-128 36t-123.5 16.5h-375 q-49 0 -84 34.5t-35 84.5zM233 276q0 -35 22.5 -57t57.5 -22q33 0 56.5 22.5t23.5 56.5q0 33 -23.5 56.5t-56.5 23.5q-35 0 -57.5 -23.5t-22.5 -56.5zM489 193q70 0 136.5 -16.5t133 -35t133 -35t138.5 -16.5q43 0 84 8t72 27.5t50 52.5t19 82q0 14 -1 26.5t-3 24.5 q35 16 53.5 53t18.5 74q0 39 -20 68q59 49 59 123q0 23 -12.5 43.5t-26.5 34.5q90 0 178 1t178 1q51 0 84 30.5t33 81.5q0 53 -32.5 85t-84.5 32q-172 0 -340 1t-338 1q0 41 16.5 78t35 74.5t34 78.5t15.5 91q0 33 -10.5 65.5t-29 59t-46 44t-64.5 17.5h-11t-11 -2 q-8 -4 -9 -8t-3 -13q-12 -59 -22.5 -123.5t-39.5 -117.5q-29 -51 -73 -88t-85 -78q-29 -31 -49 -56.5t-41.5 -48t-48.5 -42t-65 -35.5h-5v-643z" />
+<glyph unicode="&#xf0a5;" horiz-adv-x="1916" d="M0 821q0 51 18.5 94t50 75t75.5 49.5t94 17.5l376 2h134q-23 47 -38.5 98t-15.5 105q0 57 19.5 112.5t54.5 98.5t85 68.5t112 25.5q78 0 109.5 -34t43.5 -84t17.5 -106.5t29.5 -99.5q23 -41 65 -74.5t77 -68.5q16 -18 33.5 -37t33.5 -39q18 -23 33.5 -39t42.5 -31h348 q49 0 84 -34.5t35 -83.5v-643q0 -49 -35 -84t-84 -35h-375q-61 0 -123.5 -16.5t-128 -36t-136 -36t-148.5 -16.5q-70 0 -132.5 17.5t-109.5 52.5t-75.5 90t-28.5 131q-39 45 -56.5 103.5t-7.5 117.5q-29 47 -39 107h-200q-49 0 -93.5 17.5t-76 49t-50 74.5t-18.5 92z M121 821q0 -51 32.5 -81.5t84.5 -30.5q90 0 178 -1t178 -1q-14 -14 -26.5 -35t-12.5 -43q0 -74 59 -123q-20 -29 -20 -68q0 -37 18.5 -73.5t53.5 -53.5q-2 -12 -3 -24.5t-1 -26.5q0 -49 19 -82t50 -52.5t72 -27.5t84 -8q70 0 137.5 16.5t134 35t133 35t135.5 16.5v643h-4 q-41 16 -66.5 35.5t-47 42t-42 48t-48.5 56.5q-41 41 -85 78t-73 88q-29 53 -39 117.5t-23 123.5q-2 8 -3 12.5t-9 8.5q-4 2 -11 2h-11q-37 0 -65 -17.5t-46 -44t-28.5 -59.5t-10.5 -65q0 -49 15.5 -90.5t34 -79t34.5 -74.5t16 -78q-170 0 -337.5 -1t-339.5 -1 q-51 0 -84 -32t-33 -85zM1524 276q0 -35 23.5 -57t56.5 -22q35 0 57 22.5t22 56.5q0 33 -22.5 56.5t-56.5 23.5q-33 0 -56.5 -23.5t-23.5 -56.5z" />
+<glyph unicode="&#xf0a6;" horiz-adv-x="1597" d="M0 602q0 61 25.5 111.5t68.5 85.5t98.5 54t112.5 19q53 0 104.5 -15t98.5 -38v133l2 377q0 49 17.5 93t49 76t74.5 50.5t94 18.5q49 0 92.5 -18.5t75 -50.5t49 -76t17.5 -93v-201q59 -10 106 -38q59 10 118 -7.5t104 -56.5q76 0 131 -28.5t90 -76t52 -109.5t17 -132 q0 -78 -16 -148.5t-35.5 -136t-36 -128t-16.5 -124.5v-374q0 -49 -35 -84t-84 -35h-643q-49 0 -84 34.5t-35 84.5v348q-14 27 -30.5 42t-38.5 34q-20 16 -39 33.5t-37 33.5q-35 35 -68.5 77t-74.5 64q-43 25 -99.5 30t-106.5 17.5t-84 44t-34 109.5zM120 591q-1 -7 1 -11 q4 -8 8 -9.5t12 -3.5q59 -12 124 -22t118 -39q51 -29 88 -73t78 -85q31 -29 56.5 -49t48 -41.5t42 -48.5t35.5 -66v-4h643q0 70 16.5 136.5t35 133t35 133t16.5 138.5q0 43 -8.5 84t-28 71.5t-52 50t-81.5 19.5q-14 0 -26.5 -1t-25.5 -3q-16 35 -53 53.5t-74 18.5 q-39 0 -67 -21q-49 59 -123 60q-23 0 -43.5 -12.5t-34.5 -26.5q0 90 -1 178t-1 178q0 51 -30.5 84t-82.5 33q-53 0 -84.5 -33t-31.5 -84q0 -172 -1 -340t-1 -338q-41 0 -78 16.5t-75 35t-79 34t-90 15.5q-33 0 -65.5 -10.5t-59 -29t-43 -46t-16.5 -64.5q0 -4 -1 -11z M1210 -37q0 -35 23.5 -57.5t56.5 -22.5q35 0 57.5 22.5t22.5 57.5q0 33 -22.5 56.5t-57.5 23.5q-33 0 -56.5 -23.5t-23.5 -56.5z" />
+<glyph unicode="&#xf0a7;" horiz-adv-x="1597" d="M0 584q0 78 34 109.5t84 44t106.5 17.5t99.5 29q41 23 74.5 65t68.5 77q18 16 36.5 33.5t39.5 33.5q23 18 39 33.5t30 42.5v348q0 49 35 84t84 35h643q49 0 84 -35t35 -84v-375q0 -61 16.5 -123.5t36 -128t35.5 -136t16 -148.5q0 -70 -17 -132.5t-52 -109.5t-90.5 -75.5 t-130.5 -28.5q-45 -39 -103.5 -56.5t-118.5 -7.5q-47 -29 -106 -39v-200q0 -49 -17.5 -93.5t-49 -76t-74.5 -50t-93 -18.5q-51 0 -94 18.5t-74.5 50t-49 75.5t-17.5 94l-2 376v134q-47 -23 -98.5 -38.5t-104.5 -15.5q-57 0 -112.5 19.5t-98.5 54.5t-68.5 85t-25.5 112z M120 595q1 -7 1 -11q0 -37 16.5 -64.5t43 -46t59 -29t65.5 -10.5q49 0 90 15.5t79 34t75 35t78 16.5q0 -170 1 -338t1 -340q0 -51 31.5 -84t84.5 -33q51 0 82 32.5t31 84.5q0 90 1 178t1 178q14 -14 34.5 -26.5t43.5 -12.5q74 0 123 59q29 -20 67 -20q37 0 74 18.5t53 53.5 q12 -2 24.5 -3t27.5 -1q49 0 81.5 19t52 50t28 72t8.5 84q0 70 -16.5 137.5t-35 134t-35 133t-16.5 136.5h-643v-5q-16 -41 -35.5 -66.5t-42 -47t-48 -42t-56.5 -48.5q-41 -41 -78 -85t-88 -73q-53 -29 -117.5 -39t-124.5 -23l-12 -3t-8 -9q-2 -4 -1 -11zM1210 1223 q0 -33 23.5 -56.5t56.5 -23.5q35 0 57.5 23.5t22.5 56.5q0 35 -22.5 57.5t-57.5 22.5q-33 0 -56.5 -23t-23.5 -57z" />
+<glyph unicode="&#xf0a8;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM240 768q0 -29 20 -49l490 -490q20 -20 48.5 -20t49.5 20l74 74q20 20 20 48 t-20 50l-246 246h612q29 0 49.5 19.5t20.5 48.5v104q0 29 -20.5 49.5t-49.5 20.5h-612l246 246q20 20 20 48.5t-20 49.5l-74 74q-20 20 -48 20t-50 -20l-490 -490q-20 -20 -20 -49z" />
+<glyph unicode="&#xf0a9;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM240 717q0 -29 20.5 -49.5t48.5 -20.5h613l-246 -246q-20 -20 -20.5 -48.5 t20.5 -49.5l74 -74q20 -20 47.5 -20t50.5 20l489 490q20 20 20.5 49t-20.5 49l-489 490q-20 20 -49 20t-49 -20l-74 -74q-20 -20 -20.5 -48t20.5 -50l246 -246h-613q-29 0 -49 -19.5t-20 -48.5v-104z" />
+<glyph unicode="&#xf0aa;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM240 768q0 -29 20 -49l74 -74q20 -20 48 -20t50 20l246 246v-612q0 -29 19.5 -49.5 t47.5 -20.5h105q29 0 49.5 20.5t20.5 49.5v612l245 -246q20 -20 49 -20t50 20l73 74q20 20 20.5 48t-20.5 50l-489 490q-20 20 -49 20t-49 -20l-490 -490q-20 -20 -20 -49z" />
+<glyph unicode="&#xf0ab;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5t-311.5 62.5t-254 171t-171 254t-62.5 311.5zM240 769q0 -28 20 -50l490 -490q20 -20 48.5 -20t49.5 20l489 490q20 20 20.5 49 t-20.5 49l-73 74q-20 20 -48 20t-51 -20l-245 -246v612q0 29 -19.5 49.5t-48.5 20.5h-104q-29 0 -49.5 -20.5t-20.5 -49.5v-612l-246 246q-20 20 -49 20t-49 -20l-74 -74q-20 -20 -20 -48z" />
+<glyph unicode="&#xf0ac;" horiz-adv-x="1597" d="M0 768q0 162 63.5 307.5t173 255t254 173t308.5 63.5q162 0 307 -63.5t254.5 -173t173 -255t63.5 -307.5q0 -164 -63.5 -308.5t-173 -254t-254.5 -173t-307 -63.5q-164 0 -308.5 63.5t-254 173t-173 254t-63.5 308.5zM186 1141h4q4 0 12.5 3t8.5 -9q0 -4 -3 -10.5 t11 -6.5q4 0 5 6t3 0l4 -16v-2q0 -4 -5 -6t-3 -6q4 -4 9.5 -4h9.5l4 2l2 2q0 -6 6 -8.5t10 -2.5h2q0 -2 -4 -4t0 -6l23 -4v-2l14 -29q0 -4 -3 -10t-7 -6t-3 3t1 7t-2 7t-15 3q-2 0 -5 -1t-1 -5l12 -26l3 -2l2 -2q-10 0 -13.5 -24t-3.5 -34l4 -18l2 -6v-4l-4 -19l29 -43h6 q2 -4 -2 -8t-2 -8l8 -8q0 -10 4 -14.5t13 -12.5q-2 -12 20.5 -22.5t28.5 -14.5q8 -23 20 -45.5t29 -38.5l2 -14q0 -2 -5 -4t-1 -6l16 -7q4 4 10.5 -8t10.5 -16l-2 -6l12 -17l6 -2l4 8q-4 10 -14 26.5t-20.5 32t-17.5 28t-7 14.5t-2 16t-4 17q6 -4 15 -7.5t15 -7.5 q4 -25 19.5 -40t27.5 -34q-4 -4 0 -5t7 -1q4 -4 4 -14q14 -16 36.5 -44t22.5 -44v-2l-4 -14q6 -16 20.5 -25.5t28.5 -15.5h4q20 -10 41 -21.5t43 -19.5l23 14q8 -2 17 -10t20.5 -18.5t27 -19.5t35.5 -11q14 10 14 -5v-4l25 -30l4 -15q10 -6 20.5 -15t16.5 -20h4 q10 0 16.5 -9t16.5 -9q6 0 6 6q0 14 2 18.5t5 5.5t6 1t3 4l-4 6q-4 0 -6 -5t-6 -1l-14 -8l-17 4l-24 41l8 57q2 4 -7.5 9t-5.5 10q-14 8 -34 8q-4 0 -20.5 -3t-16.5 3t3 16t7 21.5t6 19.5t2 10l13 27l-3 4l-16 4q-4 0 -13 -6t-17.5 -14.5t-14.5 -16.5t-6 -14l-45 -10 q-14 0 -23 12q-4 16 -17 35.5t-13 34.5q0 23 8 43t-6 43q2 0 5 2t1 6l12 14l2 2l2 -2q14 10 37 7t29 14l16 -13q4 -2 9 4.5t5 10.5l-8 4l39 10l2 -6l19 2l22 -14q4 0 8 5t9 1l20 -21q-4 -8 -1 -12t3 -8q0 -6 10.5 -27.5t18.5 -21.5q10 0 9 13t-1 17q0 20 -8 39t-15 39v6 q0 10 12.5 17.5t12.5 9.5q10 8 22.5 16t18.5 19l8 16v10h6t4 6q0 2 -3 3.5t-7 5.5q-4 2 -8 6l6 4q4 6 6 15t-2 16l15 8q-2 -6 4 -8t10 0l10 16q-4 10 -5 7t5 7q10 4 19.5 9.5t19.5 5.5q2 -2 4 -2q6 0 6 2q0 10 -4 12l12 25q14 0 21 12l18 2q6 2 6 8v2l35 10l4 11l-10 14 q2 0 2 4t-4 6t-7 4t-7 4l-4 -2l4 2h6h13t9 9q0 12 -14 12q-18 0 -41.5 -8.5t-32.5 -28.5l-14 -8l18 18l3 6q0 4 -9.5 5.5t-5.5 1.5q18 0 27.5 4t15.5 9t12.5 10t18.5 9q23 -4 44 -2t44 2q6 4 12 8.5t8 10.5l23 4q4 -4 12 2t8 10q0 10 -11 13t-11 14q0 2 1 6t-3 4 q-6 0 -19.5 -6t-19.5 -10q-4 -2 -5 1t-1 7l2 -2l8 4l23 8l4 4q0 6 -7.5 8t-11.5 2t-12 -3t-8 3l2 4q-12 10 -21.5 22.5t-9.5 16.5t1 8.5t-5 4.5q-4 0 -7 -1t-3 5q0 4 -5 17t-14 13l-8 -8q0 -6 -6 -9t-6 -7h-4l-21 -12q-2 4 -5 2t-7 -2h-2l-2 -2q8 0 7 9t-7 9l-16 -4 q-4 0 -4.5 1t2 4t4.5 7t0 8t-6.5 1t-4.5 1h6l5 5q2 2 -1.5 7t-5.5 7l-22 4l-14 12q-2 -2 -7.5 3t-9.5 7l-16 -6l-39 9q-4 0 -8 -2.5t-4 -6.5t4 -6t4 -6t3 -21.5t-5 -13.5l-10 -14q2 -4 7 -7t10 -7.5t9 -10.5t2 -18l-45 -31v-4q0 -8 4 -15t8 -18q10 -4 9.5 -7t-7 -6t-12.5 -6 t-6 -5t-4 -2h-8h-4q0 2 2 3t2 5l-19 12v-2l-8 16q4 10 1 14.5t-3 10.5q0 16 -14.5 16t-30.5 -4q4 2 -1 6.5t-7 4.5q-16 0 -38 14t-36 14q-6 0 -14 -2t-15 -4q4 2 5 10l-13 23l-2 2q-6 0 -14 -5t-8 9q0 2 2 4t0 4q-2 12 5 20.5t11 18.5q4 4 4 8t4 4q8 0 15.5 4.5t17.5 6.5 l2 6q0 4 -21.5 7t-21.5 7l2 2q20 -6 30.5 -7t17.5 2t16.5 8t29.5 14q0 4 -21.5 8t-27.5 8h12q4 0 10.5 -2t10.5 -4q0 -4 6 -5t10 -1l15 10v6l-4 6l22 4q-2 2 1 4t5 2q6 0 12.5 -6t8.5 -6l20 8q-2 2 5.5 3t4.5 6l-14 16q-2 0 -3 3t1 3q10 0 6 10q-8 4 -17 9.5t-20 5.5 q-4 0 -9 -2t-5 -7q0 -4 5 -4t7 -4q4 -4 -2 -4t-6 -2q-8 0 -15 -12t-18 -17q-4 0 -3 2.5t-1 4.5q-2 4 -7 5t-5 5t5 13t-13 9q-8 0 -11.5 -6t-7.5 -12l-22 25l-17 2q0 8 3.5 14t-9.5 16q-6 4 -11 7.5t-11 3.5q-2 0 -9.5 -4.5t-13.5 -8.5t-6 -8t10 -4h-2q-6 0 -6 -8 q0 -2 9.5 -5t13.5 -3q4 2 6 -1.5t6 -3.5l8 3v-5q-2 -2 -2 -4l2 -8l-20 -10q-2 -2 -4 -2t-5 -2q0 -6 5.5 -12.5t-11.5 -6.5l-6 4q0 8 -16.5 13.5t-40 7.5t-47 3t-35.5 1l-33 -10l8 -19q-4 0 -5 -3t3 -5q-4 4 -15 14.5t-15 10.5l-17 4q-35 -2 -78 -33t-84 -72t-75.5 -84 t-53.5 -71zM471 674h2h-2zM487 1413q14 2 25.5 8t24.5 6l6 -4q6 -2 11 -2t9 -4q8 2 17 -2l6 4v8l-2 5l6 -2q6 0 12 10l-2 4q-4 2 -10 4t-10 2t-16.5 -5t-28 -11.5t-29.5 -12.5t-19 -8zM918 86q0 -4 3 -9t3 -9q0 -5 -2 -7q115 20 217 74.5t182 140.5h-2q-8 -4 -14 0l-5 -4 l-12 4h-4l-4 -8l2 8q-6 8 -14 15l-4 2q-4 0 -4 -8q2 16 -8.5 27.5t-26.5 11.5q0 -2 -2 -2h-4l-5 4h7l4 12l-11 8l-2 -2q-14 2 -20 16l-4 2l-2 -2l-4 -2q-12 -4 -21 -8q-12 4 -18 10l-27 -2q0 6 -4 12.5t-12 6.5q-10 0 -20.5 -2t-14.5 -13q0 -4 2 -8t4 -6v-8l-2 -6l-4 -2h-2 l-6 16l6 10q-2 4 -2 10.5t-2 10.5l-2 4h-6l-15 -10h-8l-4 -4q-2 -2 -2 -4t-2 -3l-2 3h-8q-8 -8 -9 -19l3 -4l-9 -6l-2 -4l-6 -4q0 -2 -1 -2t-1 -2v-2v-9l-2 -2v4l-2 2q-2 12 -23 21h-6v-4q2 -6 8.5 -10.5t10.5 -8.5q-2 2 -5 1t-3 -3v-4l14 -20v-39l4 -10q-4 -16 -16 -27v2 l-4 -2l-3 -2l-2 -10l2 -2v-2l-4 4l-2 -13l-12 -4q-6 -4 -5 -11t-5 -11l2 -4l-6 -6q0 -4 -1 -6.5t-1 -6.5l2 -14l6 -4l4 4l2 6l2 -12q0 -4 -4 -8q-6 -4 -12 -9.5t-6 -15.5z" />
+<glyph unicode="&#xf0ad;" horiz-adv-x="1593" d="M8 242q0 33 12.5 62.5t34.5 51.5l609 609q-16 66 -17 122q0 98 38 186.5t102.5 153t151.5 102.5t185 38q94 0 181.5 -36t154.5 -101l-442 -162l-43 -236l184 -153l443 159q-10 -92 -50.5 -171t-104 -137t-145 -91t-174.5 -33q-61 0 -127 17l-606 -607q-47 -47 -112 -47 q-68 0 -115 47q-23 23 -50.5 47.5t-52 52t-41 58.5t-16.5 68zM203 242q0 -33 22.5 -56.5t57.5 -23.5q33 0 56 23.5t23 56.5q0 35 -23.5 57.5t-55.5 22.5q-35 0 -57.5 -23t-22.5 -57z" />
+<glyph unicode="&#xf0ae;" d="M0 76v217q0 31 22.5 53.5t53.5 22.5h1689q33 0 55.5 -22.5t22.5 -53.5v-217q0 -31 -22.5 -53.5t-55.5 -22.5h-1689q-31 0 -53.5 22.5t-22.5 53.5zM0 662v215q0 31 22.5 53t53.5 22h1689q33 0 55.5 -22.5t22.5 -52.5v-215q0 -33 -22.5 -55.5t-55.5 -22.5h-1689 q-31 0 -53.5 22.5t-22.5 55.5zM0 1243v217q0 31 22.5 53.5t53.5 22.5h1689q33 0 55.5 -22.5t22.5 -53.5v-217q0 -31 -22.5 -53.5t-55.5 -22.5h-1689q-31 0 -53.5 22.5t-22.5 53.5zM752 692h999v154h-999v-154zM1059 109h692v153h-692v-153zM1366 1274h385v153h-385v-153z " />
+<glyph unicode="&#xf0b0;" horiz-adv-x="1566" d="M0 1458q0 33 22.5 55.5t55.5 22.5h1411q33 0 55.5 -22.5t22.5 -55.5t-23 -55l-565 -565v-791q0 -33 -22.5 -55.5t-55.5 -22.5t-55 23l-236 235q-23 23 -22 56v555l-565 565q-23 23 -23 55z" />
+<glyph unicode="&#xf0b1;" d="M0 115v512h713q-2 -6 -2 -19v-153q0 -55 38.5 -95.5t96.5 -40.5h153q55 0 94.5 40t39.5 96v153q0 12 -3 19h713v-512q0 -47 -33.5 -81t-80.5 -34h-1614q-47 0 -81 34t-34 81zM0 743v371q0 47 34 81t81 34h424v231q0 31 21.5 53.5t53.5 22.5h615q33 0 55.5 -22.5 t22.5 -53.5v-231h422q47 0 80.5 -34t33.5 -81v-371h-1843zM692 1229h461v153h-461v-153zM825 455v153q0 18 21 19h153q18 0 19 -19v-153q0 -18 -19 -19h-153q-20 0 -21 19z" />
+<glyph unicode="&#xf0b2;" horiz-adv-x="1536" d="M0 80v477q0 51 24.5 61.5t59.5 -24.5l162 -162l340 338l-338 338l-164 -164q-35 -35 -59.5 -25.5t-24.5 60.5v477q0 31 23 57q27 23 57 23h477q51 0 61.5 -24.5t-24.5 -59.5l-160 -158l338 -338l332 334l-162 162q-35 35 -24.5 59.5t61.5 24.5h477q33 0 55 -23 q25 -25 25 -57v-477q0 -51 -24.5 -61.5t-59.5 24.5l-162 162l-334 -334l338 -336l158 160q35 35 59.5 24.5t24.5 -61.5v-477q0 -35 -25 -55q-23 -25 -55 -25h-477q-51 0 -61.5 24.5t24.5 59.5l166 166l-336 336l-340 -340l162 -162q35 -35 24.5 -59.5t-61.5 -24.5h-477 q-31 0 -55 25q-25 20 -25 55z" />
+<glyph unicode="&#xf0c0;" horiz-adv-x="1880" d="M0 852v152q0 18 1 47.5t10 56.5t29.5 46.5t57.5 19.5q-45 29 -71.5 75.5t-26.5 104.5q0 43 16.5 82t46 68.5t68.5 46t82 16.5q45 0 84 -16.5t67.5 -46t46 -68.5t17.5 -82q0 -57 -27.5 -104t-72.5 -76q37 0 57.5 -19.5t29.5 -46.5t11 -56.5t2 -47.5v-152 q-14 -8 -23.5 -18.5t-27.5 -10.5h-328q-16 0 -26.5 10.5t-22.5 18.5zM158 57v387q0 78 45 138.5t98 109.5q10 10 25.5 21.5t33.5 15.5q18 6 41 7t45 5q61 10 130 19.5t135 19.5q-90 57 -144.5 151.5t-54.5 207.5q0 88 34 166.5t92 136t136 91.5t166 34t166 -34t136 -91.5 t92 -136t34 -166.5q0 -113 -54 -207t-145 -152q66 -10 134.5 -19t130.5 -20q23 -4 45 -5t41 -7q18 -4 33.5 -15.5t27.5 -21.5q66 -59 103.5 -116.5t37.5 -131.5v-387q-12 -6 -20 -13t-18.5 -14t-23.5 -14.5t-36 -15.5h-1368q-35 0 -54.5 22.5t-43.5 34.5zM1452 852v152 q0 18 2 47.5t11.5 56.5t30 46.5t56.5 19.5q-45 29 -72.5 75.5t-27.5 104.5q0 43 16.5 82t46 68.5t68.5 46t84 16.5q43 0 82 -16.5t68.5 -46t46 -68.5t16.5 -82q0 -57 -26.5 -104t-71.5 -76q37 0 56.5 -19.5t28.5 -46.5t11 -56.5t2 -47.5v-152q-12 -8 -22.5 -18.5 t-26.5 -10.5h-328q-18 0 -27.5 10.5t-23.5 18.5z" />
+<glyph unicode="&#xf0c1;" horiz-adv-x="1597" d="M0 1137q0 88 34 166.5t92 137t136 92.5t168 34q86 0 166 -33t139 -92q8 -8 21.5 -20.5t26 -25t21.5 -25.5t9 -25q0 -18 -12 -31q-6 -8 -25 -12q-47 -10 -88 -22.5t-86 -31.5q-4 -4 -16 -4t-25.5 10.5t-31 21.5t-42 21.5t-57.5 10.5q-35 0 -66.5 -13.5t-54 -37t-36 -54 t-13.5 -67.5q0 -41 17.5 -75t43 -63.5t56.5 -56.5t57 -53l180 -178q23 -25 54.5 -37t66.5 -12q43 0 73 16t46 16q12 0 39 -21.5t55.5 -49t50 -55t21.5 -42.5q0 -29 -36 -51t-83 -38.5t-94 -26t-72 -9.5q-86 0 -164.5 33t-140.5 92l-303 305q-61 59 -94 139.5t-33 166.5z M578 1010q0 29 35.5 51t82.5 38.5t94 26t72 9.5q86 0 166 -33t139 -92l303 -305q61 -59 94 -139.5t33 -166.5q0 -90 -33.5 -167.5t-92 -136t-137.5 -92.5t-167 -34q-86 0 -165.5 34t-139.5 93q-8 8 -21.5 19.5t-25.5 25t-21.5 26.5t-9.5 26q0 18 13 28q6 8 24 12 q47 10 88 22.5t86 33.5q12 4 17 4q12 0 25.5 -10.5t30.5 -21.5t41 -21.5t58 -10.5q72 0 121 49.5t49 120.5q0 41 -17 76t-44 63.5t-56.5 55.5t-56.5 53l-178 180q-53 49 -123 50q-43 0 -72.5 -17.5t-46.5 -17.5q-12 0 -38.5 21.5t-55 49t-50 56t-21.5 41.5z" />
+<glyph unicode="&#xf0c2;" horiz-adv-x="1880" d="M0 391q0 70 23.5 132.5t64.5 113.5t96.5 86t120.5 51q-33 41 -51 90t-18 105q0 66 24.5 123t66.5 99t99 66.5t123 24.5q113 0 196 -72q18 76 61.5 141.5t103 113.5t133 75t157.5 27q96 0 182 -37t149.5 -100.5t100.5 -149.5t37 -182q0 -57 -13 -109.5t-36 -99.5 q117 -59 188.5 -170t71.5 -248q0 -98 -37 -183t-101.5 -149.5t-149.5 -101.5t-183 -37h-1018q-80 0 -151.5 30.5t-125 84t-84 125t-30.5 151.5z" />
+<glyph unicode="&#xf0c3;" horiz-adv-x="1536" d="M16 72q-39 72 7 141l516 803v366h-78q-33 0 -54.5 22.5t-21.5 55.5q0 31 21.5 53.5t54.5 22.5h614q33 0 55.5 -22.5t22.5 -53.5q0 -33 -22.5 -55.5t-55.5 -22.5h-76v-368l514 -801q45 -70 7 -141q-18 -35 -51 -53.5t-70 -18.5h-1262q-37 0 -69.5 18.5t-51.5 53.5z M377 479h782l-313 490v413h-154v-411z" />
+<glyph unicode="&#xf0c4;" horiz-adv-x="1916" d="M0 180q0 86 44 168t113.5 146.5t154.5 103.5t169 39h13q18 25 57 60.5t63 58.5v12v12q-12 12 -28.5 27.5t-35 32t-33.5 32t-23 27.5q-84 -6 -172.5 33t-160 105.5t-116.5 150.5t-45 168q0 98 62.5 154.5t160.5 56.5q82 0 168 -39t155.5 -103.5t114 -146.5t44.5 -168 q0 -10 -1.5 -21.5t-3.5 -21.5l86 -76l34 17q34 18 90.5 46.5t129 65.5t148.5 76t150.5 77t135 69.5t102.5 52t52 26.5q16 8 37 9q14 0 39 -4.5t52.5 -9.5t53 -11t41.5 -8q29 -4 47.5 -26.5t18.5 -51.5q0 -43 -35 -66l-700 -485l700 -485q35 -23 35 -66q0 -29 -18.5 -51.5 t-47.5 -26.5q-16 -4 -41.5 -9t-53 -10t-52.5 -9.5t-39 -4.5q-10 0 -18.5 2.5t-18.5 6.5l-842 430l-86 -76q2 -10 3.5 -21.5t1.5 -21.5q0 -86 -44.5 -168t-114 -146.5t-155.5 -103.5t-168 -39q-98 0 -160.5 56.5t-62.5 154.5zM197 1358q0 -23 11 -49.5t27.5 -51t35 -45 t34.5 -34.5q35 -29 82 -54.5t94 -25.5q10 0 27 4v6q0 23 -11.5 48.5t-27.5 50t-34.5 46t-35.5 35.5q-35 29 -82 54.5t-94 25.5q-14 0 -26 -4v-6zM199 180q0 -6 2 -10q6 0 11 -1t11 -1q41 0 90 24.5t92.5 61.5t72 83t28.5 89q0 4 -1 5t-1 5q-8 2 -23 2q-41 0 -90 -24.5 t-92 -61.5t-71.5 -83t-28.5 -89zM586 616q53 -25 82 -69l108 96l45 -27l1016 703l-172 31l-975 -498l6 -127zM586 920l35 -35q12 29 36.5 41t53.5 26l-43 37q-29 -45 -82 -69zM741 768q0 35 23.5 57.5t58.5 22.5q33 0 55.5 -22.5t22.5 -57.5q0 -33 -22.5 -56.5t-57.5 -23.5 q-33 0 -56.5 23.5t-23.5 56.5zM903 575l762 -389l172 31l-727 502z" />
+<glyph unicode="&#xf0c5;" horiz-adv-x="1597" d="M0 385v707q0 33 16.5 70.5t38.5 60.5l258 258q23 23 61 39t70 16h463q31 0 53.5 -22.5t22.5 -53.5v-250q16 8 35.5 13.5t40.5 5.5h463q31 0 53 -22.5t22 -53.5v-1075q0 -33 -22.5 -55.5t-52.5 -22.5h-830q-33 0 -55.5 22.5t-22.5 55.5v229h-536q-33 0 -55.5 22.5 t-22.5 55.5zM154 461h460v293q0 45 10.5 87t45.5 74l159 162v305h-278v-321q0 -31 -22.5 -53.5t-53.5 -22.5h-321v-524zM186 1139h211v211zM768 154h676v921h-279v-321q0 -31 -22.5 -53.5t-52.5 -22.5h-322v-524zM801 831h211v211z" />
+<glyph unicode="&#xf0c6;" horiz-adv-x="1470" d="M0 1128q0 90 35 170t94 139.5t139 94.5t170 35q88 0 169 -34t143 -95l655 -656q12 -12 12 -28q0 -10 -11 -26.5t-26.5 -32t-32 -27t-26.5 -11.5q-16 0 -29 13l-655 655q-41 41 -92 61.5t-107 20.5q-57 0 -108 -21.5t-89 -59.5t-59.5 -89t-21.5 -109q0 -55 20.5 -106 t61.5 -92l745 -746q55 -55 133 -55q39 0 74 15.5t60.5 41t41 60.5t15.5 73q0 78 -56 134l-563 563q-29 29 -69 28q-41 0 -71 -29.5t-30 -70.5t29 -70l475 -475q12 -12 12 -28q0 -10 -11 -26.5t-26.5 -32t-32 -27t-26.5 -11.5q-16 0 -29 13l-475 473q-35 37 -55.5 85 t-20.5 99q0 53 20.5 100.5t55.5 83t83.5 56t101.5 20.5q51 0 99 -20.5t85 -55.5l561 -563q102 -102 102 -246q0 -74 -27.5 -137t-74.5 -110t-110.5 -75t-137.5 -28q-143 0 -246 103l-745 745q-61 61 -95 142t-34 169z" />
+<glyph unicode="&#xf0c7;" horiz-adv-x="1536" d="M0 154v1228q0 63 45 108.5t109 45.5h1075q63 0 108 -45l154 -154q45 -45 45 -108v-1075q0 -63 -45 -108.5t-109 -45.5h-1228q-63 0 -108.5 45t-45.5 109zM154 846h1075v536h-1075v-536zM846 922v385h190v-385h-190z" />
+<glyph unicode="&#xf0c8;" horiz-adv-x="1536" d="M0 193v1150q0 39 15.5 75t41 61.5t60.5 41t76 15.5h1150q80 0 136.5 -56.5t56.5 -136.5v-1150q0 -41 -15.5 -76t-41 -60.5t-61.5 -41t-75 -15.5h-1150q-80 0 -136.5 56.5t-56.5 136.5z" />
+<glyph unicode="&#xf0c9;" d="M0 78v215q0 31 22.5 53.5t55.5 22.5h1689q31 0 53.5 -22.5t22.5 -53.5v-215q0 -33 -22.5 -55.5t-53.5 -22.5h-1689q-33 0 -55.5 22.5t-22.5 55.5zM0 659v218q0 31 22.5 53t55.5 22h1689q31 0 53.5 -22.5t22.5 -52.5v-218q0 -31 -22.5 -53t-53.5 -22h-1689 q-33 0 -55.5 22.5t-22.5 52.5zM0 1243v217q0 31 22.5 53.5t55.5 22.5h1689q31 0 53.5 -22.5t22.5 -53.5v-217q0 -31 -22.5 -53.5t-53.5 -22.5h-1689q-33 0 -55.5 22.5t-22.5 53.5z" />
+<glyph unicode="&#xf0ca;" d="M0 211q0 39 15.5 75t41 61.5t60.5 40.5t76 15q39 0 73.5 -15t61 -40.5t42 -61.5t15.5 -75q0 -41 -15.5 -76t-42 -60.5t-61.5 -41t-73 -15.5q-80 0 -136.5 56.5t-56.5 136.5zM0 768q0 39 15.5 75t41 61.5t60.5 41t76 15.5q39 0 73.5 -15.5t61 -41t42 -61.5t15.5 -75 q0 -41 -15.5 -76t-42 -60.5t-61.5 -41t-73 -15.5q-41 0 -76 15.5t-60.5 41t-41 60.5t-15.5 76zM0 1325q0 39 15.5 75t41 61.5t60.5 41t76 15.5q39 0 73.5 -15.5t61 -41t42 -61.5t15.5 -75q0 -41 -15.5 -76t-42 -60.5t-61.5 -40.5t-73 -15q-41 0 -76 15t-60.5 40.5t-41 60.5 t-15.5 76zM522 154v114q0 33 22.5 55.5t55.5 22.5h1167q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -54.5t-53.5 -21.5h-1167q-33 0 -55.5 21.5t-22.5 54.5zM522 711v114q0 33 22.5 55.5t55.5 22.5h1167q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -55.5t-53.5 -22.5 h-1167q-33 0 -55.5 22.5t-22.5 55.5zM522 1268v114q0 33 22.5 55.5t55.5 22.5h1167q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -55.5t-53.5 -22.5h-1167q-33 0 -55.5 22.5t-22.5 55.5z" />
+<glyph unicode="&#xf0cb;" d="M0 594q0 55 30.5 90t68.5 61.5t69 50t31 56.5q0 29 -17.5 44t-46.5 15q-25 0 -44 -15t-34 -36l-53 37q23 39 58.5 60.5t78.5 21.5q55 0 96.5 -32t41.5 -91q0 -49 -30 -80t-67 -55.5t-67.5 -47t-30.5 -55.5h143v54h66v-115h-289q-2 10 -3 18.5t-1 18.5zM4 55l37 54 q6 -4 12 -10.5t15 -10.5q12 -8 29.5 -14t37.5 -6q35 0 55.5 18t20.5 47q0 31 -23.5 48.5t-58.5 17.5h-23l-16 37l90 108l6 6t7 6l4 6h-9q-4 -2 -14 -2h-92v-49h-66v111h263v-53l-97 -115q41 -6 74 -35t33 -82t-38 -95t-110 -42q-35 0 -60.5 9t-41.5 20q-25 14 -35 26z M14 1434l105 102h67v-360h93v-62h-259v62h93v258v8h-2q-10 -16 -22.5 -28.5t-29.5 -27.5zM522 154v114q0 33 22.5 55.5t55.5 22.5h1167q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -54.5t-53.5 -21.5h-1167q-33 0 -55.5 21.5t-22.5 54.5zM522 711v114q0 33 22.5 55.5 t55.5 22.5h1167q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -55.5t-53.5 -22.5h-1167q-33 0 -55.5 22.5t-22.5 55.5zM522 1268v114q0 33 22.5 55.5t55.5 22.5h1167q31 0 53.5 -22.5t22.5 -55.5v-114q0 -33 -22.5 -55.5t-53.5 -22.5h-1167q-33 0 -55.5 22.5t-22.5 55.5z " />
+<glyph unicode="&#xf0cc;" horiz-adv-x="1536" d="M0 692v152h1536v-152h-1536zM268 1114q0 117 44 202t118 141t170 83t203 27q88 0 176 -20.5t172 -49.5q20 -72 27.5 -156t7.5 -157q0 -10 -1 -22.5t-3 -24.5l-13 -2q-23 2 -50 2t-50 6q-18 59 -44 114.5t-62.5 98.5t-88 68.5t-122.5 25.5q-49 0 -94.5 -13.5t-80 -40 t-56 -66.5t-21.5 -93q0 -59 28.5 -102t75.5 -75t105.5 -54.5t118 -42t113.5 -39t93 -41.5h-696q-33 53 -51.5 110.5t-18.5 120.5zM285 310v63v45l110 2q31 -72 64 -134.5t76 -108.5t104 -71.5t152 -25.5q55 0 110 16.5t100.5 48t74 78.5t28.5 109q0 76 -49 128t-119 88 t-146.5 59.5t-132.5 45.5h617q8 -16 15 -38.5t10.5 -48t5.5 -50t2 -43.5q0 -131 -47.5 -226t-127 -156.5t-186 -91.5t-225.5 -30q-53 0 -93 4t-78 12.5t-78 20.5t-93 29q-12 4 -38 12t-36 16q-8 6 -12 50.5t-6 96.5t-2 100z" />
+<glyph unicode="&#xf0cd;" horiz-adv-x="1536" d="M0 0v154h1536v-154h-1536zM0 1532q10 2 19.5 2h19.5q72 0 140.5 -5t137.5 -5q100 0 200.5 2t199.5 6q-4 -16 -1 -36.5t3 -37.5v-8q-66 -10 -108 -7t-65.5 -5t-32.5 -39t-9 -109q0 -137 4 -272t10 -273q8 -147 88 -237t238 -90q125 0 207 29.5t131 88t69.5 146.5t20.5 203 q0 20 -2 65t-5 102.5t-8.5 119t-11.5 113.5t-13 89t-15 45q-33 33 -78 33q-6 0 -23.5 -1t-36 -1t-34 1t-21.5 3l2 82q82 4 163 -3t165 -7q39 0 77.5 5t79.5 5q4 0 9.5 -1t9.5 -1q2 -12 4 -24.5t2 -24.5t-4 -29q-23 -6 -52.5 -8t-58 -7t-48 -16.5t-19.5 -38.5q0 -14 1 -27 t3 -28q2 -6 5 -38.5t5 -79t4 -101.5t4 -103t3 -85t1 -50q0 -37 -2 -80.5t-8 -89t-17.5 -87.5t-29.5 -74q-41 -68 -104.5 -114t-137 -72.5t-153.5 -38t-154 -11.5q-72 0 -144.5 9.5t-140.5 35.5q-96 35 -151 88.5t-84 121t-36 148.5t-7 173v321v42t-1 62.5t-5 60.5t-10 38 q-12 16 -37 23.5t-53.5 10.5t-56.5 3t-44 4z" />
+<glyph unicode="&#xf0ce;" d="M0 115v1306q0 47 34 81t81 34h1614q47 0 80.5 -34t33.5 -81v-1306q0 -47 -33.5 -81t-80.5 -34h-1614q-47 0 -81 34t-34 81zM154 154h460v335h-460v-335zM154 565h460v332h-460v-332zM154 975h460v332h-460v-332zM692 154h461v335h-461v-335zM692 565h461v332h-461v-332z M692 975h461v332h-461v-332zM1229 154h461v335h-461v-335zM1229 565h461v332h-461v-332zM1229 975h461v332h-461v-332z" />
+<glyph unicode="&#xf0d0;" d="M0 197q0 39 29 61l1579 1247q20 17 47 17q35 0 59 -29q10 -12 29.5 -33.5t38 -44t32 -47.5t13.5 -43q0 -39 -29 -61l-1579 -1248q-20 -16 -47 -16q-37 0 -59 29q-10 12 -30 33.5t-38 44t-31.5 47t-13.5 43.5zM256 922l117 36l37 117l34 -117l119 -36l-119 -37l-34 -117 l-37 117zM373 1229l235 71l72 236l72 -236l235 -71l-235 -72l-72 -235l-72 235zM942 1382l117 37l37 117l37 -117l116 -37l-116 -36l-37 -117l-37 117zM1286 1153l94 -121l369 291l-94 121zM1536 885l117 35l37 118l36 -118l117 -35l-117 -37l-36 -117l-37 117z" />
+<glyph unicode="&#xf0d1;" d="M0 358v404q0 25 6 51.5t17.5 53t27 51t31.5 40.5l223 222q16 16 41 31.5t51.5 26.5t53 17.5t51.5 6.5h80v198q0 31 22.5 53.5t52.5 22.5h1108q33 0 55.5 -22.5t22.5 -53.5v-1102q0 -31 -22.5 -53t-55.5 -22h-75v-7q0 -63 -25 -119.5t-65.5 -97.5t-97 -65.5t-120.5 -24.5 q-63 0 -119.5 24.5t-97.5 65.5t-65.5 97.5t-24.5 119.5v7h-307v-7q0 -63 -24.5 -119.5t-65.5 -97.5t-97.5 -65.5t-119.5 -24.5t-119.5 24.5t-97.5 65.5t-65.5 97.5t-24.5 119.5v7h-78q-31 0 -53.5 22.5t-22.5 52.5zM193 700h387v369h-78q-10 0 -31.5 -8t-30.5 -17l-223 -221 q-8 -8 -16 -29.5t-8 -31.5v-62zM346 276q0 -47 34 -80.5t81 -33.5t80.5 33.5t33.5 80.5t-33.5 81t-80.5 34t-81 -33.5t-34 -81.5zM1268 276q0 -47 33.5 -80.5t80.5 -33.5t81 33.5t34 80.5t-33.5 81t-81.5 34q-47 0 -80.5 -33.5t-33.5 -81.5z" />
+<glyph unicode="&#xf0d2;" horiz-adv-x="1597" d="M0 768q0 166 62.5 311.5t171 254t254 171t311.5 62.5t311 -62.5t254 -171t171 -254t62 -311.5t-62 -311.5t-171 -254t-254 -171t-311 -62.5q-59 0 -115.5 8.5t-112.5 24.5q23 35 46.5 80t35.5 92l11 41q6 23 16 66t29 112q23 -41 76 -70.5t118 -29.5q96 0 176 41 t136.5 114.5t88 174t31.5 217.5q0 88 -35.5 171t-102.5 147.5t-160 102t-208 37.5q-141 0 -248.5 -46t-179 -118.5t-107.5 -160.5t-36 -174q0 -104 40 -187.5t124 -117.5q31 -10 41 20q2 10 7 31.5t9 32.5q4 16 1 23t-13 22q-53 59 -53 155q0 76 27.5 145.5t78.5 122t124 84 t163 31.5q80 0 142.5 -23.5t105.5 -64.5t64.5 -96t21.5 -121q0 -86 -18.5 -164t-52.5 -136t-80 -92t-103 -34q-31 0 -57.5 12.5t-45 34t-25.5 49t1 60.5q18 76 44.5 151.5t26.5 130.5q0 49 -26.5 84t-81.5 35q-66 0 -110 -58.5t-44 -146.5q-2 -23 2 -45q2 -18 7.5 -40.5 t15.5 -41.5q-33 -141 -53.5 -225t-30.5 -131q-12 -55 -18 -80q-10 -45 -13.5 -93t-1.5 -89q-104 45 -192 119.5t-151.5 169t-98.5 207t-35 235.5z" />
+<glyph unicode="&#xf0d3;" horiz-adv-x="1536" d="M0 193v1150q0 39 15.5 75t41 61.5t60.5 41t76 15.5h1150q80 0 136.5 -56.5t56.5 -136.5v-1150q0 -41 -15.5 -76t-41 -60.5t-61.5 -41t-75 -15.5h-829q27 39 59.5 95.5t49.5 117.5l10 41q6 25 17.5 68t29.5 112q20 -41 75.5 -70.5t121.5 -29.5q96 0 176 42t137 115.5 t89 175t32 220.5q0 90 -37 173t-103.5 147.5t-161 102.5t-208.5 38q-143 0 -251 -46.5t-180.5 -120t-108.5 -162.5t-36 -175q0 -104 40 -188.5t124 -118.5q14 -6 25.5 -1t15.5 21q4 10 8 31.5t8 34.5q8 23 -12 43q-23 29 -37 67.5t-14 91.5q0 76 27.5 145.5t79 123t124 85 t164.5 31.5q82 0 144.5 -23.5t105.5 -64.5t64.5 -97t21.5 -124q0 -86 -18.5 -164t-52 -136t-81 -93t-104.5 -35q-31 0 -57.5 12.5t-45 34t-25.5 49t1 60.5q18 78 45 154.5t27 131.5q0 49 -26.5 85t-82.5 36q-66 0 -110.5 -59t-44.5 -150q-2 -23 2 -45q4 -43 22 -84 q-35 -141 -54.5 -226t-29.5 -132q-12 -55 -18 -80q-16 -70 -14 -142.5t6 -117.5h-260q-80 0 -136.5 56.5t-56.5 136.5z" />
+<glyph unicode="&#xf0d4;" horiz-adv-x="1536" d="M0 342v438q55 -68 120.5 -96.5t153.5 -28.5h36t34 4q-8 -23 -14 -42t-6 -42q0 -41 18 -77.5t43 -67.5q-104 -4 -198.5 -22.5t-186.5 -65.5zM0 1214v129q0 39 15.5 75t41 61.5t60.5 41t76 15.5h1150q80 0 136.5 -56.5t56.5 -136.5v-1150q0 -41 -15.5 -76t-41 -60.5 t-61.5 -41t-75 -15.5h-583q23 39 36 81t13 89q0 70 -21.5 121t-54.5 90t-70.5 69.5t-70.5 57.5t-54.5 53.5t-21.5 59.5q0 49 34 81.5t76 72.5t75.5 99.5t33.5 163.5q0 78 -39 157t-106 122h131l133 76h-428q-129 0 -237.5 -36t-188.5 -143zM2 170q14 57 55 96t96.5 61.5 t115 33t110.5 10.5h31.5t31.5 -2q37 -27 78 -54.5t75 -61.5t55.5 -75t21.5 -92q0 -47 -19 -86h-460q-72 0 -126.5 49t-64.5 121zM102 1094q0 43 11.5 85t35 73.5t59.5 51t85 19.5q68 0 118 -41t81.5 -100.5t47 -128t15.5 -123.5q0 -45 -9 -84t-30.5 -68.5t-56.5 -47 t-84 -17.5q-66 0 -116 39t-85 96t-53.5 123.5t-18.5 122.5zM854 1051h223v-224h109v224h223v108h-223v225h-109v-225h-223v-108z" />
+<glyph unicode="&#xf0d5;" horiz-adv-x="1536" d="M0 262q0 100 56.5 166t139.5 105.5t179 56t174 18.5q-23 29 -41.5 64t-18.5 76q0 23 6.5 41t14.5 40q-16 -4 -33.5 -4h-34.5q-68 0 -130 23.5t-108 66.5t-74 101.5t-28 130.5q0 68 25 128t67 109.5t98 84t120 49.5q88 18 176 18h411l-127 -74h-127q72 -43 107 -120.5 t35 -157.5q0 -94 -33 -149.5t-73 -94.5t-72.5 -70.5t-32.5 -78.5q0 -45 44 -82t97 -82t97 -107.5t44 -161.5q0 -102 -50 -175.5t-126.5 -121t-170 -70t-181.5 -22.5q-66 0 -141.5 15.5t-140 50.5t-106.5 90t-42 137zM174 307q0 -68 35 -116t87 -78.5t114.5 -44t117.5 -13.5 q51 0 104.5 11.5t96.5 38t69.5 68.5t26.5 103q0 49 -21.5 89.5t-53 72t-70.5 59t-76 52.5q-14 2 -29.5 3t-29.5 1q-57 0 -123 -12.5t-121 -41t-91 -75.5t-36 -117zM276 1247q0 -53 17.5 -117.5t51.5 -120t82.5 -92t111.5 -36.5q96 0 134 61.5t38 147.5q0 53 -14.5 118.5 t-45 124t-78 97t-112.5 38.5q-47 0 -82 -18t-57.5 -49t-34 -71t-11.5 -83zM999 1206h215v-215h107v215h215v105h-215v217h-107v-217h-215v-105z" />
+<glyph unicode="&#xf0d6;" d="M0 78v1382q0 31 22.5 53.5t55.5 22.5h1689q31 0 53.5 -22.5t22.5 -53.5v-1382q0 -33 -22.5 -55.5t-53.5 -22.5h-1689q-33 0 -55.5 22.5t-22.5 55.5zM154 461q63 0 119.5 -24.5t97.5 -65.5t65.5 -97.5t24.5 -119.5h921q0 63 25 119.5t65.5 97.5t97 65.5t120.5 24.5v614 q-63 0 -120 24.5t-97.5 65.5t-65.5 97.5t-25 119.5h-921q0 -63 -24.5 -119.5t-65.5 -97.5t-97.5 -65.5t-119.5 -24.5v-614zM539 768q0 104 29.5 195.5t81.5 159t122 106.5t150 39t149.5 -39t121.5 -106.5t83 -159t31 -195.5t-31 -195.5t-83 -159t-122 -106.5t-149 -39 q-80 0 -150 39t-122 106.5t-81.5 159t-29.5 195.5zM692 969l94 -99l39 35q8 6 11.5 13.5t7.5 11.5q4 2 8 10h2v-16q0 -8 -1 -16.5t-1 -18.5v-283h-139v-129h438v129h-141v529h-140z" />
+<glyph unicode="&#xf0d7;" horiz-adv-x="1228" d="M6 967q20 47 72 47h1075q50 0 70 -47t-17 -84l-536 -537q-27 -23 -56 -22q-29 0 -55 22l-536 537q-37 37 -17 84z" />
+<glyph unicode="&#xf0d8;" horiz-adv-x="1228" d="M6 371q-20 47 17 84l536 536q23 23 55 23q31 0 54 -23l538 -536q37 -37 17 -84t-70 -47h-1077q-50 0 -70 47z" />
+<glyph unicode="&#xf0d9;" horiz-adv-x="692" d="M0 768q0 33 23 55l538 537q16 16 38 21t44 -5q23 -8 36 -27.5t13 -41.5v-1076q0 -25 -13 -43t-36 -28t-44 -5t-38 21l-538 539q-23 23 -23 53z" />
+<glyph unicode="&#xf0da;" horiz-adv-x="692" d="M0 231v1076q0 49 47 69t84 -16l539 -537q23 -23 22 -55q0 -31 -22 -53l-539 -539q-37 -37 -84 -16q-47 20 -47 71z" />
+<glyph unicode="&#xf0db;" d="M0 115v1306q0 47 34 81t81 34h1614q47 0 80.5 -34t33.5 -81v-1306q0 -47 -33.5 -81t-80.5 -34h-1614q-47 0 -81 34t-34 81zM154 154h692v1153h-692v-1153zM999 154h691v1153h-691v-1153z" />
+<glyph unicode="&#xf0dc;" horiz-adv-x="1228" d="M0 584q0 31 22.5 54.5t53.5 23.5h1075q33 0 55.5 -23t22.5 -55q0 -33 -23 -56l-536 -536q-23 -23 -56 -23t-55 23l-536 536q-23 23 -23 56zM0 952q0 33 23 56l536 536q23 23 55 23q33 0 56 -23l536 -536q23 -23 23 -56q0 -31 -22.5 -54.5t-55.5 -23.5h-1075 q-31 0 -53.5 23t-22.5 55z" />
+<glyph unicode="&#xf0dd;" horiz-adv-x="1228" d="M0 584q0 31 22.5 54.5t53.5 23.5h1077q31 0 53.5 -23t22.5 -55q0 -33 -23 -56l-536 -536q-23 -23 -56 -23q-35 0 -53 23l-538 536q-23 23 -23 56z" />
+<glyph unicode="&#xf0de;" horiz-adv-x="1228" d="M0 952q0 33 23 56l536 536q23 23 55 23q33 0 56 -23l536 -536q23 -23 23 -56q0 -31 -22.5 -54.5t-53.5 -23.5h-1077q-31 0 -53.5 23t-22.5 55z" />
+<glyph unicode="&#xf0e0;" d="M0 115v905q10 -10 20.5 -17.5t20.5 -15.5q129 -96 256 -191.5t252 -195.5q39 -31 82 -62.5t89 -57t96.5 -41t103.5 -15.5q55 0 105 15.5t96 40t89 56t84 64.5q125 100 252 195.5t256 191.5q10 8 20.5 15.5t20.5 17.5v-905q0 -47 -33.5 -81t-80.5 -34h-1614q-47 0 -81 34 t-34 81zM2 1434q0 41 36 71.5t77 30.5h1614q41 0 76.5 -30.5t35.5 -71.5q0 -31 -18.5 -69t-45 -75t-57 -67.5t-53.5 -48.5q-123 -92 -241.5 -182.5t-239.5 -182.5q-25 -18 -57.5 -45t-67.5 -51.5t-71 -42t-66 -17.5h-2h-2q-31 0 -67 17.5t-70.5 42t-67.5 51.5t-58 45 q-121 92 -239.5 182t-241.5 183q-23 18 -53.5 48.5t-57 67.5t-45 75t-18.5 69z" />
+<glyph unicode="&#xf0e1;" horiz-adv-x="1576" d="M0 1376q0 39 15.5 74t41 60.5t60 41t73.5 15.5t74 -15.5t61.5 -41t41 -60.5t14.5 -74t-14.5 -73.5t-41 -60t-61.5 -41t-74 -15.5t-73.5 15.5t-60 41t-41 60t-15.5 73.5zM10 41v991q0 16 12.5 28.5t28.5 12.5h281q16 0 28.5 -12t12.5 -29v-991q0 -16 -12.5 -28.5 t-28.5 -12.5h-281q-16 0 -28.5 12.5t-12.5 28.5zM524 41v991q0 16 12.5 28.5t28.5 12.5h273q33 0 37 -25.5t4 -48.5q57 53 129.5 76t150.5 23q190 0 304 -95.5t114 -293.5v-668q0 -16 -12.5 -28.5t-28.5 -12.5h-289q-16 0 -27.5 12.5t-11.5 28.5v604q0 76 -27.5 116 t-111.5 40q-53 0 -89 -17.5t-56.5 -47t-28.5 -70.5t-8 -88v-537q0 -16 -12.5 -28.5t-28.5 -12.5h-281q-16 0 -28.5 12.5t-12.5 28.5z" />
+<glyph unicode="&#xf0e2;" horiz-adv-x="1591" d="M0 662q-4 39 35 45l158 20q12 2 30 -8q12 -8 15 -27q14 -102 63 -191t123 -153.5t169 -101.5t200 -37q115 0 217 44t178 120t120 177t44 218t-44 218t-120 177t-178.5 120t-216.5 44q-94 0 -181.5 -30.5t-158.5 -88.5l159 -159q35 -35 24 -58.5t-58 -23.5h-463 q-16 0 -29.5 6t-24.5 16q-25 25 -24 55v463q0 47 24.5 57.5t59.5 -24.5l162 -162q109 92 238.5 140.5t271.5 48.5q166 0 311 -62.5t253.5 -171t171 -254t62.5 -311.5t-62.5 -311.5t-171 -254t-254 -171t-310.5 -62.5q-150 0 -285 52.5t-241.5 145.5t-176.5 220t-90 275z" />
+<glyph unicode="&#xf0e3;" horiz-adv-x="1916" d="M0 651q0 49 37 91t88 42q35 0 68 -22q-20 14 -21 37q0 8 8 24l334 502q14 20 37 21q16 0 24 -9q-25 18 -40 43t-15 56q0 49 38 90t87 41q33 0 62 -19l514 -342q23 -16 36 -40.5t13 -53.5q0 -25 -10.5 -48.5t-26.5 -41.5t-40 -29.5t-48 -11.5q-33 0 -68 23q20 -14 21 -37 q0 -14 -8 -25l-105 -158l227 -151q14 4 28 6t28 2q53 0 94 -29l475 -315q37 -27 58.5 -65.5t21.5 -84.5q0 -74 -52.5 -126t-125.5 -52q-55 0 -99 31l-475 315q-70 47 -75 131l-228 152l-106 -158q-14 -20 -37 -20q-14 0 -25 8q55 -39 56 -100q0 -25 -10.5 -47.5t-28 -41 t-40 -29.5t-46.5 -11q-35 0 -62 18l-514 342q-49 33 -49 92z" />
+<glyph unicode="&#xf0e4;" horiz-adv-x="1880" d="M0 627q0 195 73.5 365.5t201.5 298.5t299 202t366 74t366 -74t299 -202t201.5 -299t73.5 -365q0 -78 -14.5 -159t-42 -159t-68.5 -149.5t-92 -130.5q-23 -29 -59 -29h-1328q-37 0 -59 29q-53 59 -93 130.5t-67.5 149.5t-42 159t-14.5 159zM158 627q0 -49 33.5 -83 t82.5 -34t83 34t34 83t-34.5 82.5t-82.5 33.5q-49 0 -82.5 -33.5t-33.5 -82.5zM352 1098q0 -49 35 -84t82 -35q49 0 84 35t35 84t-35 82.5t-84 33.5q-47 0 -82 -33.5t-35 -82.5zM743 313q0 -82 57.5 -139t139.5 -57t139.5 57t57.5 139q0 49 -26 91t-67 71q4 14 15.5 55 t27 95.5t33 114t30.5 110.5t22.5 88t9.5 43q0 23 -17.5 40t-40.5 17q-20 0 -35.5 -12t-21.5 -31l-135 -487q-39 -2 -74 -17.5t-60.5 -42t-40 -61.5t-14.5 -74zM823 1292q0 -49 34 -82.5t83 -33.5t83 33.5t34 82.5t-34 83t-83 34t-83 -34t-34 -83zM1292 1098q0 -49 35 -83 t84 -34t83 34t34 83t-34 82.5t-83 33.5t-84 -33.5t-35 -82.5zM1489 627q0 -49 34 -83t83 -34t82.5 34t33.5 83t-33.5 82.5t-82.5 33.5t-83 -33.5t-34 -82.5z" />
+<glyph unicode="&#xf0e5;" horiz-adv-x="1916" d="M0 866q0 123 49 225.5t130 183.5t184.5 139.5t209.5 92.5q94 31 190.5 45.5t194.5 14.5t194.5 -14.5t190.5 -45.5q106 -35 210 -93t185 -139t130 -183.5t49 -225.5t-49 -225t-130 -183t-184.5 -140.5t-210.5 -92.5q-94 -31 -190 -45t-195 -14q-92 0 -180 12 q-92 -72 -195.5 -119t-215.5 -73q-27 -4 -55.5 -10.5t-53.5 -6.5q-16 0 -27.5 11.5t-11.5 27.5q0 12 8.5 21.5t16.5 17.5q31 33 53 60.5t37.5 57.5t25 64.5t17.5 79.5q-78 43 -145.5 100.5t-120 128t-82 153.5t-29.5 175zM160 866q0 -72 24.5 -133t65.5 -113.5t94 -95.5 t111 -75q27 -14 51 -27.5t49 -28.5q-10 -47 -17.5 -94t-19.5 -94q59 29 111.5 64.5t105.5 76.5q55 -8 110.5 -14t112.5 -6q156 0 308 43q84 25 171 68.5t158.5 107t116.5 143.5t45 178t-45 178t-116.5 143.5t-158.5 107.5t-171 69q-152 43 -308 43q-158 0 -307 -43 q-84 -25 -171 -69t-158.5 -107.5t-116.5 -143t-45 -178.5z" />
+<glyph unicode="&#xf0e6;" horiz-adv-x="1916" d="M0 997q0 98 40 182.5t106.5 151t150.5 113.5t170 76q76 25 154.5 36t156.5 11q80 0 159 -11.5t155 -35.5q86 -29 170 -76t149.5 -113.5t105 -150.5t39.5 -183q0 -98 -39.5 -182t-105 -149.5t-149.5 -113.5t-170 -77q-154 -47 -314 -47q-37 0 -72.5 3t-72.5 7 q-150 -115 -336 -155q-20 -4 -43 -9.5t-45 -5.5q-12 0 -21.5 9.5t-9.5 23.5q0 10 7.5 17.5l13.5 13.5q51 51 72.5 96t35.5 117q-63 35 -118.5 82t-97.5 104t-66.5 124t-24.5 142zM160 997q0 -72 30.5 -127t77.5 -99t104.5 -78t112.5 -64l-20 -111q33 18 63.5 42t59.5 46 q47 -6 95 -12t95 -6q135 0 264 41q61 18 124 52t114 81t84 105.5t33 129.5q0 72 -33 131.5t-84 105.5t-113.5 80t-124.5 52q-63 23 -129.5 32t-134.5 9q-66 0 -132 -9t-132 -32q-59 -18 -122.5 -52t-115 -80t-84 -105.5t-32.5 -131.5zM649 258l27 16q51 -6 102 -6 q197 0 381 62q111 37 211 99.5t177 147.5t123 190t46 230q0 41 -6 84q90 -72 148.5 -169t58.5 -214q0 -76 -24.5 -142.5t-66.5 -123.5t-97.5 -104t-118.5 -82q14 -72 35.5 -117t72.5 -96q6 -6 13.5 -14.5t7.5 -18.5q0 -16 -10.5 -23.5t-24.5 -7.5q-20 0 -43 5.5t-41 9.5 q-186 41 -336 155q-37 -4 -72.5 -7t-72.5 -3q-129 0 -254 32t-236 97z" />
+<glyph unicode="&#xf0e7;" horiz-adv-x="933" d="M0 557q0 8 2 10l209 932q4 16 16.5 26.5t28.5 10.5h344q18 0 31.5 -13.5t13.5 -33.5q0 -6 -1 -10t-3 -11l-180 -524q12 4 47 13.5t81 21.5t95 26.5t93 25.5t75 18.5t37 7.5q18 0 31.5 -13.5t13.5 -33.5q0 -12 -2 -19l-565 -1306q-10 -29 -43 -29q-18 0 -33 13.5t-15 33.5 q0 6 3 10l204 914q-12 -4 -48 -14.5t-82 -22.5t-97 -26.5t-95 -27t-76 -19.5t-38 -7q-20 0 -33.5 14.5t-13.5 32.5z" />
+<glyph unicode="&#xf0e8;" d="M0 78v383q0 33 22.5 55.5t55.5 22.5h133v153q0 55 40 94t95 39h518v174h-135q-31 0 -53.5 21.5t-22.5 54.5v385q0 31 22.5 53.5t53.5 22.5h385q31 0 53.5 -22.5t22.5 -53.5v-385q0 -33 -22.5 -54.5t-53.5 -21.5h-135v-174h518q55 0 95 -38.5t40 -94.5v-153h135 q31 0 53.5 -22.5t22.5 -55.5v-383q0 -33 -22.5 -55.5t-53.5 -22.5h-385q-33 0 -54 22.5t-21 55.5v383q0 33 21.5 55.5t53.5 22.5h136v153q0 18 -21 19h-518v-172h135q31 0 53.5 -22.5t22.5 -55.5v-383q0 -33 -22.5 -55.5t-53.5 -22.5h-385q-31 0 -53.5 22.5t-22.5 55.5v383 q0 33 22.5 55.5t53.5 22.5h135v172h-518q-20 0 -20 -19v-153h135q33 0 55.5 -22.5t22.5 -55.5v-383q0 -33 -22.5 -55.5t-55.5 -22.5h-383q-33 0 -55.5 22.5t-22.5 55.5z" />
+<glyph unicode="&#xf0e9;" horiz-adv-x="1884" d="M0 770q31 137 109.5 253t193.5 204t257 141t302 66v53q0 35 23.5 57.5t56.5 22.5q35 0 57.5 -22.5t22.5 -57.5v-53q160 -12 303 -65.5t258 -141.5t192.5 -204t108.5 -253q6 -29 -20 -43q-10 -6 -19 -6q-20 0 -28 12q-98 102 -218 103q-86 0 -163.5 -54.5t-130.5 -152.5 q-10 -23 -35 -23t-35 23q-82 150 -213 194v-526q0 -68 -23.5 -127t-63.5 -104.5t-93.5 -71t-114.5 -25.5t-115.5 25.5t-94.5 71t-63.5 104.5t-23.5 127q0 35 23.5 57.5t56.5 22.5q35 0 57.5 -22.5t22.5 -57.5q0 -70 40 -119t97 -49q55 0 95 49t40 119v526 q-131 -45 -213 -194q-10 -23 -35 -23t-34 23q-53 98 -130 152.5t-163 54.5q-121 0 -217 -103q-12 -12 -31 -12q-10 0 -19 6q-25 14 -20 43z" />
+<glyph unicode="&#xf0ea;" horiz-adv-x="1597" d="M0 385v1075q0 31 22.5 53.5t55.5 22.5h921q31 0 53.5 -22.5t22.5 -53.5v-231h33h61q25 0 55.5 -13.5t49.5 -29.5l280 -281q18 -18 30.5 -49t12.5 -55v-62v-678q0 -27 -17 -44t-44 -17h-860q-27 0 -44.5 17.5t-17.5 43.5v246h-536q-33 0 -55.5 22.5t-22.5 55.5zM276 1321 q0 -12 9.5 -21.5t21.5 -9.5h461q12 0 21.5 9.5t9.5 21.5v61q0 12 -9.5 21.5t-21.5 9.5h-461q-12 0 -21.5 -9t-9.5 -22v-61zM737 123h738v555h-367q-27 0 -44 17.5t-17 43.5v367h-310v-983zM1169 801h306q0 2 -3.5 8t-5.5 10l-280 279q0 4 -6 4q-2 0 -2 1t-2 1t-3.5 1t-3.5 1 v-305z" />
+<glyph unicode="&#xf105;" horiz-adv-x="2048" />
+<glyph unicode="&#xf200;" horiz-adv-x="1536" d="M0 57v379q0 39 20.5 87t54.5 90t74.5 73t81.5 35q-35 -59 -34 -129q0 -59 16 -124t59 -106q-18 -37 -18 -75q0 -72 50 -122t122 -50q37 0 68.5 13t55 36.5t37 55.5t13.5 67t-13.5 66.5t-37 55t-55 38t-68.5 14.5q-18 0 -36.5 -5t-35.5 -14q-12 12 -20 31t-13.5 40.5 t-7.5 41.5t-2 37q0 47 28 86t62 67l142 21q-92 57 -142.5 150.5t-50.5 201.5q0 86 33 162t90 133t133 90t162 33t162 -33t133 -90t90 -133t33 -162q0 -109 -50.5 -202t-142.5 -150l158 -23q18 -16 34.5 -36.5t16.5 -47.5q0 -45 -18 -77q-59 33 -121 32q-45 0 -87 -17 t-77 -46q-6 2 -11 3t-11 1q-47 0 -82 -34t-35 -81t34.5 -80.5t82.5 -33.5q47 0 80.5 33.5t33.5 80.5q0 8 -2 15.5t-4 13.5q16 12 35.5 20.5t42.5 8.5q55 0 95 -39t40 -94q0 -23 -8 -41.5t-19 -34.5q-25 10 -45 10q-47 0 -81.5 -34t-34.5 -81t34.5 -80.5t81.5 -33.5t81 33.5 t34 80.5l-2 4q74 74 74 177q0 74 -41 137q45 70 45 157q0 31 -12 62q41 -4 83 -34t74.5 -72t53 -90t20.5 -89v-379q-10 -6 -22.5 -15t-25.5 -18.5t-26.5 -16.5t-21.5 -7h-1344q-35 0 -52 20.5t-44 36.5zM369 287q0 25 17 41t40 16q25 0 41 -16t16 -41q0 -23 -16 -40.5 t-41 -17.5q-23 0 -40 17.5t-17 40.5z" />
+<glyph unicode="&#xf201;" horiz-adv-x="1597" />
+<glyph unicode="&#xf202;" horiz-adv-x="1597" />
+<glyph unicode="&#xf203;" horiz-adv-x="1597" />
+<glyph unicode="&#xf204;" horiz-adv-x="1597" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/styles/web/font-awesome/font/fontawesome-webfont.ttf b/public/assets/plugins/mxgraph/styles/web/font-awesome/font/fontawesome-webfont.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..c17e9f8d100d01a002029b5b93cc081062618bf3
GIT binary patch
literal 68476
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/styles/web/font-awesome/font/fontawesome-webfont.woff b/public/assets/plugins/mxgraph/styles/web/font-awesome/font/fontawesome-webfont.woff
new file mode 100644
index 0000000000000000000000000000000000000000..09f2469a1f7a71acb4c4778842511d797d7f6ad8
GIT binary patch
literal 41752
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/styles/web/static.min.css b/public/assets/plugins/mxgraph/styles/web/static.min.css
new file mode 100644
index 0000000..305f3ae
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/web/static.min.css
@@ -0,0 +1 @@
+footer{background:#292727;margin:40px 0 0;padding:20px 0 0;color:#ccc}footer h3{color:white;margin:0 0 10px 0}footer ul{list-style-type:none;margin:0 0 10px 0}footer ul li{padding:4px 0}footer ul li a{color:#999}footer ul li a:hover{color:#fff}footer input[type=submit].btn{margin-top:-8px!important}footer .social-networks a{display:inline-block;margin:10px 10px 0 0;padding:4px 0 0 0;font-size:22px;border-radius:50%;-moz-border-radius:50%;-webkit-border-radius:50%;text-align:center;width:32px;height:30px;line-height:24px;background:#222;text-decoration:none;color:#fff;-webkit-transition:all .3s;-moz-transition:all .3s;-o-transition:all .3s;-ms-transition:all .3s;transition:all .3s}footer .social-networks .icon-facebook{border:3px solid #3b5998}footer .social-networks .icon-facebook:hover{background:#3b5998}footer .social-networks .icon-github{border:3px solid #a9cf54}footer .social-networks .icon-github:hover{background:#a9cf54}footer .social-networks .icon-pinterest{border:3px solid #de2c6c}footer .social-networks .icon-pinterest:hover{background:#de2c6c}footer .social-networks .icon-twitter{border:3px solid #31cdfd}footer .social-networks .icon-twitter:hover{background:#31cdfd}footer .social-networks .icon-google-plus{border:3px solid #c9402e}footer .social-networks .icon-google-plus:hover{background:#c9402e}footer .social-networks a:hover{background:#000;color:#fff}#footer-extra{background:#1c1c1c;padding:10px 0;font-size:.9em;color:#999}#footer-extra i{color:#afdbea}
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/styles/web/static.uncompressed.css b/public/assets/plugins/mxgraph/styles/web/static.uncompressed.css
new file mode 100644
index 0000000..1bf3c1c
--- /dev/null
+++ b/public/assets/plugins/mxgraph/styles/web/static.uncompressed.css
@@ -0,0 +1,107 @@
+/* --------------------------------------------------------	*/
+/*	Footer */
+/* --------------------------------------------------------	*/
+
+footer {
+	background:#292727;
+	margin:40px 0 0;
+	padding:20px 0 0;
+	color:#ccc;
+}
+footer h3 {
+	color:white;
+	margin:0 0 10px 0;
+}
+footer ul {
+	list-style-type:none;
+	margin:0 0 10px 0;
+}
+footer ul li {
+	padding:4px 0;
+}
+footer ul li a {
+	color:#999
+}
+footer ul li a:hover {
+	color:#fff;
+}
+footer input[type=submit].btn {
+	margin-top:-8px!important;
+}
+
+	/* --------------------------------------------------------	*/
+	/*	Footer - Social networks */
+	/* --------------------------------------------------------	*/
+
+	footer .social-networks a {
+		display:inline-block;
+		margin:10px 10px 0 0;
+		padding:4px 0 0 0;
+		font-size:22px;
+		border-radius:50%;
+		-moz-border-radius:50%;
+		-webkit-border-radius:50%;
+		text-align:center;
+		width:32px;
+		height:30px;
+		line-height:24px;
+		background:#222;
+		text-decoration:none;
+		color:#fff;
+		-webkit-transition:all 0.3s;
+		-moz-transition:all 0.3s;
+		-o-transition:all 0.3s;
+		-ms-transition:all 0.3s;
+		transition:all 0.3s;
+	}
+	footer .social-networks .icon-facebook {
+		border:3px solid #3B5998;
+	}
+	footer .social-networks .icon-facebook:hover {
+		background:#3B5998
+	}
+
+	footer .social-networks .icon-github {
+		border:3px solid #A9CF54;
+	}
+	footer .social-networks .icon-github:hover {
+		background:#A9CF54
+	}
+
+	footer .social-networks .icon-pinterest {
+		border:3px solid #DE2C6C;
+	}
+	footer .social-networks .icon-pinterest:hover {
+		background:#DE2C6C
+	}
+	footer .social-networks .icon-twitter {
+		border:3px solid #31CDFD;
+	}
+	footer .social-networks .icon-twitter:hover {
+		background:#31CDFD;
+	}
+
+	footer .social-networks .icon-google-plus {
+		border:3px solid #C9402E;
+	}
+	footer .social-networks .icon-google-plus:hover {
+		background:#C9402E;
+	}
+	footer .social-networks a:hover {
+		background:#000;
+		color:#fff;
+	}
+
+	/* --------------------------------------------------------	*/
+	/*	Footer extra */
+	/* --------------------------------------------------------	*/
+
+	#footer-extra {
+		background:#1c1c1c;
+		padding:10px 0;
+		font-size:0.9em;
+		color:#999;
+	}
+	#footer-extra i {
+		color:#AFDBEA;
+	}
diff --git a/public/assets/plugins/mxgraph/templates/images/aws1.png b/public/assets/plugins/mxgraph/templates/images/aws1.png
new file mode 100644
index 0000000000000000000000000000000000000000..3c6243f40d5fd94d5914bb4a4af344440e755b75
GIT binary patch
literal 14950
zcmWk#1ymbL6b)Jm6n7~UcPQ>I#c6PNm*O5=OR?f!+`YIv6xZMm!QJ)e=bX*%*<^NR
zN8WpL?|qRfN;032iI4#Rz$e*nl0fKr7<%|4!9u^OZ;9Zcr;m=`v|RuI6s-Rbn3*-d
z7XW}9AS)@R=9zig;pM3}<iz?^E<9SHg&3Sgg#^1w{~ODE6iaI4x1D?)1>faa|A^w*
zt^A3H;mhN|5_T6a&*<yb-X8UYb3LyC_EJkDwE*;=$<(?6)HYj67*sGUS|7Rrsi6JL
zS^e|aY(iA`IFjEw56>6zslhI-WzTbJnwpyG*c|y~jwHp9he$R4we^MNhANj(<(6z7
zZf@alLW`I=aCl$tk+Uam3QXQld+S<)&xBb@RH%IfM4x4gfP2UCB3%4LE~Gp-s1G3F
zSL};t`%xmI&s7xRnodhb8XZ#VFdB^N;lO`kVNc7;I*28%@o5RAe}QrlHhwVs!D*3J
zkIz*m10_X9haR)F7H&OGGlvR8>GN)G4UE2)k_9+$DsoBZ8gg58?PujcbvHF_Q~E;S
zp+Z4t6%9$FJ!95H#gsTuE}k3^B>BjU@`YrG&--Mt(C1W=st`3)d~Izl<=3z-raE3l
z=i97AUw$u!TDoDQ-SXlhfxgC%M^I;E<cM$QpTrr>h~evk$wsi7L&+0zKB`3{({Xno
zT#FtH29h2H!w)ev)fzo;R)n%na;YK(1q1KIL%*b{scU5M-)<@5{E1;JmXuli22c6{
zMaAeaW3~7Zz9|aZmAk@(wI-S}dM#9>FLo;|ILLqqy3Ko2Cq~&Wc?&#o)K8ysgk2Wu
zm?~Fv(leMwflQOxq>Fyz8Wb};hFoFmbR|b>!((Gb#%6`^<RNURxmwKbZOK@#Kjh^(
zFtwAZlk$EeUvltB9x?uC`^ke0ttZ)Bzs;r1JRP71rljb@s5&;rtR)~N9p7_~{}vL#
ze(0)d>gws)+|ZDeray!kHZs;@<ml@9x3kmF#^z^)j;?O`@P#g3irA~BOwG*;7e7D0
zu<*oK%nm0fXNY*NL^zt8n_Hz}m){$uTxo4>tt3UQ$N73uQIQ_YeT+wY-*x-YXCEf4
zNH)rp(S?NtB_*Y&*SBb59^v~{7XgnmJ3Bkh@uTPUbsM^<xk8ss^=s;nUj!!;fJL*1
z4YmR#L!aPbmsR;U`shOzo1OBF33%2$^SN_FFqoN{kHOVo{drB~&>-vdB5QYdcm5a`
z*-wv6NU3}o<1JOhNYMGWL7gX_V#2lSZNQ)PF*K;rTwe?2x=S|Ypsg@N$o)ji($bQR
zpu+pPnuoW_=gMqj&NV3Qlf>VqCO7wr7Mzf>Rt7Vgywbx%%Apwf$@0p|wNCqTb7l!~
zktBs8X=xe7SrugS$9Ukv+}z)$26hSChH{!0sqMMax68=pNlQ4ReGbcsC%d-FhQcFL
zU67Btui%6nLU5oOf0kS^5k-6w8);6a-7jfkB8qHCQgUD%@HR(yWoCvc;;%_%s~<@I
zqpfgGjuMsK3Ip+Zk#$V0^52F=H4sJ_s}>j6)>eGHZ>N!N@|}5gi1n8cb8Sg89lUWp
zvsuo=vg$2hkdv%n-~2|1gRMQLIF)MY!v221hJQSRSgjmQLW)w&O>)c*?+=8f+viue
zhK8NX=1CT%&};}77xy-n)ft0rg#wKL8*hQuM=S^;VsMWrbP+OY|C6N`I)qUHYOsW5
z1#xh5Yv|KJ0wS;?`wL^nyt0g5pI8PM;=dh9-7m**+1t<a)Tp@ablmTbn6aA^&;)<v
z<Q7(v%(4|oHp>EVO6S*JUYfBN7W)sNQXGz0{mq5;(@%v7NLqv*I0<OL&rnVFVCVDP
zSlObdBoJ)30t@g4*)oA|NrrBpeZ6OBD8%T_8Cen6NGX6o{=zB5mBvsESPbeM4cy0y
zesQ>`qSa`c!nwtVe(3Nd&ak0U04oyJ8YdlW?0(IGnddH1@EeYlLMsxHA6^d?!eD0E
z>~bb`^{@|87z)`@zhcIsqkURwWG;mN?xLD+u9FR+{$0AiPeaj)>Qs<U+fEqGTsSwK
zy_1lj>WzB4?>~+C=~v9)f_sH_TYy9qt5#!~UAxTDvHc3WVnRd+MzTFFr~svdnVB){
z3&6GN)XKr;N{|N!nSS6WE=REOQu0|B#<p`aB2p${s59&S=u;~!M+m+2AjjoM$c80r
z$y1t_kyXK0yAV4r7dQ?CVq*iNUph(l6%!4%zQQ>e;&QT**^s?!uSy@thVOQNq$Guy
zWT2>#x3~B4LS?aX4mWBayW)^rM2Im#k+lVTT1-q#c6Rpu{yvxO!rVd?=jx+iizdMA
zJlMvJHFP<5m7&Q$w3{4;ma>V!z3Df?lwRfJn50qN?CWI6t}HsYwba080m9?`$-WEy
zfTOZ~nwzPqsWc8t<WO<;wADKED0A)SyVI4w*0T$hy0$hp`yzYSk2bcpGSbq%!iKyg
z+=?!z%MC(8Lh;}F&(RBjrOV69T1<Gzp?@6`fI7*c@`nq+%g@)XhQ+OJKhpW)-DH$*
zFRjLIo|Axe6y*VF%(G@Sn!|*|XOcIjMQ<~8@PzB@B9J-2e05g<eJy{G`p;6EkD=n;
zkmlT6G5Yzrxm{i*y1$}}0+^M$O)(LT4r^uAY#bb2*IDNk?UgU!ySuxxnpV^?XR|!m
zE<$*eG4f!*00~;S;G}%vj2iOgtzdOk6}KVXE()6UPF9iubr4|IqvvDLd?s>m&t@iQ
z6+x;Dwc}MY8ysQP$-q$kp<$!&=PC;-i@o}9PnT5fv7Z3?LibY7Y*+mzv$Qx`A!WJA
zgzRIyaYihTvL_0>9q39;2HxceXUG+==<4dEtgJDiBmix^`M=VxCZ^fi+SsiO&g*BP
zgnn*%dh!M*aBbB9|DE3_dE6AzLVtzz>oQOG&XjM~%8|dlM-G>k{tzC{JS({5-&#aN
zf*hKh%=`+DpVp$um=^+r8}hO<Gnbo<19^MOwLYeLIXgp_hlGkIgs6|LFj0<vwC;vs
zg$=bMYw!MXChga8D*&|*1OJt)s?&%s6gE&{mI((r=D4!vENG{dd0f%$nmt$f_V!q6
zkNPUUQ#+s7wX3MOILG%&cJdlJ+M1dvY`?HOI>@h<xIb>y+ZRIZpM$-9R(kqBGj@A>
z`)tUX(-3JjYjokp)RFpWsVhy&XhTzj)X{NGowfqTWpCP)D_7b!?4NK(9ORDsj&nB>
z8QNm4<OYjdo5|}Jzplg?PDRp7VkCI>v|ku`B&I<Fszw?S@>n9B7Pn>Mxfp1ndf)~P
zJjs7!;y9$axW*j4E^9j-9Vu!>AsCmQ?QOPeg;dVwMl0@o=D?_QG_#qf3ZU+!u7&<Y
zsfzs9X)LwLY+_y>Ho6dU3hE?lLS613Wx9d#vuwXcO07#16Xmd{j{y|5(7LXTt^|9=
zimajTtIq!3LP|STMJF~zWC8|Lzp6B@<)9Y<u&`eL=;4*k!_KZ_a6niT&&o?lnGZF<
z@_+Rw7)b~T6{&td<t6@xDOA(dmFFc9u4c)?zj;7}4dij6aoy8weR+099Ne4IlDbEv
z{jf<@>PI@Z`Kzlq2(D0zAZ(-VW?LKy^Wr(hQ-9AxR<d?+v8CtBDCcd4!!K#((Hp@Z
zR#pX#Mf)~1H^gY8$arx5kIm0x=cV<^qOEH6|5jhU@{hCg>}tyv{Y=1aP@_+?1E^sd
zWmlZM#j|bA+(-BWolMblE5bR)&5||tQ4y%K6}6}3gU`g6@+cZkr{}_Nwsr5{ksG^f
z_`DWgw^(PN$*@j&dPg<S{4$DKKr0%vbz1bLR0NIowx<n$v=kH-59c%h@U9+iG11W;
z?iI!sV7Cx9R}3YJc%)GAm>skFrPkI~+$zMX?SCe+Jthe3W*hf=OSGkpa5FG~azys?
zw_P41Ew-0C{de)(wF*Hj3&GDh+1cERs`R)>@USrNmpdTgoDK`cAzuMmIj_5uB{OzD
zUf#vU#Z;wYXs9B@$M?7$#kw#*FHf%zhFXkLwSSQ7|0A07^$ucgJFO;%tcjkkvTg&2
zmO+i@4Q>Fhh?E&%tm0d$An2#Ilf$ylV|B&-OTxMu15Rdb?N_i{adEN7*=pLj1=QAQ
zR2x+0`$4`18x!!~`avxszwP?@Jv5efcXd7JK$yH{8ilTbM*9!2fp>TA76x9+lj?ff
zOe|Uz<V;+CD%pO&PKZor!_{7R;{!;gzrb*On`Vyl@_Nx#nSl=0T!qg3Iy9`(A@pwW
zdwu#Rw9kjbFt6oxOB^Z5Ad>9SV0mt)KX6Qnf`Z35(ktrT``Y9GJ(45ukZ32}u&4G1
z@K0c#uGcoweC5swf%081s^`#|X5?%q`da|%N@|mpVXk``rLX2cqpq@#mc}EO;Os60
zQy`mRO(O6~8n#^(y>u6l22*A@sY)vb?+<4dNW|?E-f8CAfv<t&kZiMXaWEQ+9eYuP
zo)@P-HE`P+x_;oO-=sp9+Ea5SSgjH;8u!@rH?=m1G^AVx&P7^6=1xQU>-gliR7|Fh
z6MXUJDxWij_odpg^!iDUN8gz8Dd*r1QN6Z{_(>ziHj5P}h@S<-Z5?*HcZQXh8ml4Q
zvmnb1yR=Q7L?amTJXd}p$1^6~t>^?u*p3g!f_Be@u67O5Kir;ZRZD4F0|nh+7wO=%
zBw&$sn0PL<7aMHBPrjXeG13fR+qpwG)~=VUg99sh)t#d=`|(ozgWA}>4I|grUxL?^
zwMQ0pwtO54xf)zobzY~m>ULd%w@64Q1t2mny}x=QE0wp1-3kq94WvCPi!1jjgZr_-
z)8!~x6)%ne+;5(&?@6^=aB3S|A}YG{Nuzt)mk*npMof57()m2Aj=>w}tmQ1&xR}Sv
zLbr1<qyi4Dhcpzh9Lwj|MSftPQ?hnS!!I0kK3#Ac7&M78VW%$#su(odVyQ5;lQ|K|
z$J(-S&8angqp?>Exi1Jiz{hyTv85!0`Uw+#JI)Y{TopPTWH(n=z`^06*Jj`c=#rRS
zS}HX!Zw_^Sx;ZS)_CBH{dyI$~Wz^9b+mH6QvU>=Sy9pj$ndA?Z5JO_?&W>;>d~#q*
z@C;TAN}@~8TP7M{_c{FmgR%c>P#n*jug-TgnOR?7A6@W5R5)j&-K!q>k19`%;dYE;
z()T8x>=R<J&Z@<UuLjPViDVN~-ypF);@ng)R;+U8%RffdgiE2O)u#mwRY>%|VdtF5
z`{`J}8{Lg34Nf9^8yhS@w%^mCkk4IWq0L=BY(=;8NDfbd8jKMlhfMybtgLb#hZDp<
zbGjh3cD4gi%URCz=A9VJ91varA3r}s;mO&V0cZGYG(G32I6YpFv<xlT(|VK)+Pw%^
z@MWUyZq=k*UXAtWHpZm+AF_piGD;EKAv+S(N9C#<^haXvPv^_<IIKoAEeb~_mw{Ms
z-|m%PU%Okrj&c?k{oe34+Nj=$Qhtlo*{p1$(^CP()pnCJohi*w{B=8C02}y3cfOwf
z*l?K?lBWe!!T<Op%9oYL%a_)=S2T%+KCrS(OfvMG^zIIUydB^RKaTi!`e{O{L01lw
z39Tjl#0dCR_*#J>g0Gb410vzhFki6)Q%EV>@QSLf$S}nCrNJHhXCgYi^pj&7j}smW
zr~9oBo`F1Zy|WN7=)4C4{$cgr9eyWx(}BPKnyr7RcGl##6D4y;M$9kpV4Ksv!q!h*
zB7+Zu_>pe%_0Tff%_FMnzE^hKiq$yCeB{V1?jz5s@FSs)Tf(##Bq*?d`42SMvoLpk
zMW`E8kc3QRWu&LGD_-ALw-%^PTX~+Z2aDXlWxOBLp1ri>th|nKgbOMAZNE1^Prlz|
z#J)Lh1j2>et;GE{e9tSaXBFV*r(k5HXlH9D(IO;XXVo~@W;$!PBk^Q?rFOpjiGuQ{
zp<%xLK~|;hgqDV;@yCW=VZl-Rft)geL||1F7i4140JOIY?z-E#Q=d+t4SU;v_qo^%
zd@Cw?V%FuhM!)>$R5+JmOb{t);^?R%6RJnfdEMHL#;P&-D{B3RhSZ2|$&fb*GzuL<
zIPT75O<ig{y;{=8-`J!Mtt04`5q4kEKYt4Le}2NQI<C}Tx$*}+fzDfwpHykz{brNV
zawdyMd-Sc9G($wmRifbpnyFX@fkaXNx>!Sv*sMC=_Kd6(X}3KEJFiSXByFn<-;cce
z4Q;&Mnu@Dzlx~SUbW~>^kRGj1`GVJoW692^!xbvyJ`~P1+OJf79s-78Y%4l%PT$<P
zLU*jqc{hC|81cpgt<Hh&VERHohzHO5L(FmK)!q=|he3&4z{jW4jmJmF=xShDGP9tu
z_QF<QI7(<Q@k>7rgHq5xIOd1F-Jj8$=AF)CFEp4;qjfKS?^s@Vz<&xf*huiufJ*qK
zx6ytwp{e~kUH8Wd+8-51CV95tZwEVqqZG{{c84PRt@$x5*jk4H#sG|ccGWMKi;RX^
zs6ViJ(wD*w50oW2d3ilIy8|70Pk3X1{~AvxCX{j}p)pVTxW!H2RG{eQSQ<w|LxXpz
zx}hN%TKES<M5w3iumx8Y4jcpB&u03ns0}NhuM7z(pEoV=mTZmVMjYg*C%-FxsQI<*
zoq)7}H8q0~EnVGlr(-bzxz1JjW+{UGopX6=W+rpo0=nOj$Td<`O@Me6S<BHMA0O+3
zD@#kQZERX+vYK6|2A+pI?}^vn{M9Z^$@6Epi?!Q$;O|b_x+pZx)4tx}_hcB>aQ1Fp
z1eHGVmpj$QCVA#pJL5^w@2a}4qOn_6K16JqZSH+1Jl(D~lwIu6m8wxmuffZlW?-Et
z?a%Y~nw3l9PHb<#9v*@^?y+tK7)lCHglWHEt7Wum71R+R@a=}DGUw4F|F|Qn4H(#z
zXv7@<$kAmtnCY9#!=r`Q97ol+|NFB^z%V(3${PQ4XT}<;D7hHZUgUW$n|`bHH1~#h
zkQ**aV7Edi|M9*^vZX(TuNZ|%_Z01v=VvoK(7Sf#XIZ+*uZ{1T({AVhCT-h?GNX>Y
zT=ciaCnwY6q1h#0h6Ik#VLk&}m%hVJ4pP$7qCL}6)Pw?xoD!VkLf1$2o>pXl(P6yt
z9SPsm2ADPJmn4zraq@2eaQ?F)a#+xoqo<=|O=acj-O7&-*yPDb8Pm-STADC`UN)GM
zMX$95`xUqLbo-SamGQxG-JqU75HIklcZRw4-|foua%kf@E*^c8N{gY+w{Ht2iuwP-
zU-9>zBKZexl`dy+xvvHzP+NX726+lr-K*DnUd9eMs+;N$z)rCjC?n}zAR^+x1^fxc
z4_C*oU~I$m87MUrLu4Vn6(z6vV`M#9B33UvA?8-pOI=p3|Cvdn?xj-n6)1Unbf%!7
zaDY{pq=E|jyUN>v^L|luUvHVx$PZ&xoXB>sC92Ti_V$)k*w^g#XdZe6nN|kTt&@m9
zwYMiVsEozu{2~+djQeJ{RQKpBohFY!zpr9w9aB}r#mDD$F!dz>y0LVwopbsUEW*a-
zc(IwAoSbaM>0KLaD9%S^rliHh0dGux3VKV5O!&xS7oY#Y<H5N)iwQ*iKE3#YxoeWm
z$Vi6{NYo^8*n`n?(ocpv&qybd=n>VoCjit2{l-OizI@Y0*C28Jdc26ol9kf*po(jU
zfvF`;8LvV&hf&JhsN$=_(ietj_*$$zH-KE?lIAT@;P>Td^iwbF96pIJANJyiRBOHW
z2To4OATj@7;YK9EjI-?@mAnt~^g3WSMoMSgV5Dc-tFGr6Ps5qlvAZV`kk3xppIiKA
z+OCC+Ov*_Y_$Zj)#h>>hDQ#YAJhou~>yhVWi{)_$=Tj-XB9%o--b0-*qS=0GXo3=w
z>$$8_piqJP6BU^*L{T&$#%F(|?&HUzbitm`0*?dviz|jkLmoP1;Sy=XK-axoRu}h*
z2a4}=>NY2Tj-G`fG#!10VJVuXALNuln$exGho0e`V~_M)pnn4HB7mj$R3gu#s<v|n
zg6A*Ah;fl#;a#vbB)&>_{$2fpPAmoO5{5x3s-_>>*UtfQw4LSBcjF-|Hb*<*Y8#Z9
zIag@@ga%5{q)h9+S3Wj3=5%0z7xM|lE7u&4lMR^RSrH(_&l#fcAu~j_x65ZX)ZS+Z
z!^m~he&Pck0KO(;SnpG6{RVo813#ad1XHq(mp%2P#+~@9MYk6eDR~KPz>`1wlYhv8
zTNHRvpZMkIJtc6(1-M$By}B`#q>A+wVkkOmeWek8!cC4L0!d~2Vgx|DldF-;U|ryb
znuTiK>_=%2*}oo3nBhLdy*U8hi1duAF@M%VXk=8KxY1@#49$@}<}I;5$m;0+Uh$V%
z2XXrAyAwmp52o0keDP=`yfrS62@`@UrkadU=V49sotIvFd?5*KuYqNmsd+~Rwekdb
zLYt>Vt7UDwJhpKr+0={q9NJr{q5$fWHto30e(R7GXfX{ssxn#qq37gM6w`(F9SgDk
zNDici-y*O8hp;uKh+*Wc^QB9aAwnx$b+Z7r;^D*u_>W5Hs%ASszp+I)`Yu0$v-_*<
z%3fbnXoy}1TXl|yg40BNe0Dl(+sR)RCJ>ct>FMIXC2}SU_kk|>K8r~9B%3^3KN?M^
z>8Fxo_v(?SE|&%3ZhNvqXaJ5D{Q|cb2t>xLZg&$DbNFAn;N51?XD1(dhhpJ2$E=b{
z6H=u>6XiUwY;c)5+am@bF|_l&ksTZ>!HsH8JdVVl9Sf*qD4BIOMxpb=!a@%y7Oskl
zisN6`gJ~3Tcf0PWlxQ-e-R`2t-+q;M&Ltekw~hyD-#yty?^%3NAW*0G9S4ZvIX<8a
zD+k~f1W(zVyfA%ZA|Wr*`}RSj#0HnIAh^#^)Q_a%4+*@c@sQ;gypfD@3O7<CuO}Y@
z5FQ)gWAfsi^<1SP!yOP$6tOIcr%;dNO?TJC2w{(6F^IGa!Far|^FR^~0L4rRP>&d1
z_I%#ohUZlKS{k?(;zxSFEwt70kt6YqyxS_fL{tC0Qli4zb6^8-f#l{Y%VUfVn^aSK
zQT$<(Wc0Dy1#Q64HjpzVj>7&{sny)t8z{@*6GEjf?JP%jE*$Dk8(bF&9LuXBH2BPA
zTl>mE-Uf7Sj#IJx%)<>zouyP^nfK6?C?f>K_<b58lUAh+`A8cX^Q_Y3S7ky+wU<Ul
zm?4ZR8r{yMQ&k>hg!`P`zb+D-B5IFf2D7E!ywAbr%K>6V?>xkgUcpa%NKa3fGq1?;
z^+|XSoqnO^27_8?jWIwajK03hBi?$Zk^efAT66o{i=TNH#oZO>T@eXuNbH{Ahb5nw
zzHMHj=kC#*JW15d$$voR6vG2Jx|7t2-s;a6IPfn%ZIGW(+>-edF!PvzA^(gU%of#}
z&;SscO^cGwHk&!A&!oE3uit;2!V$>4!_apA%y>f#+)rz=T2$Mp`~m5`**-jlz>T-D
z8SU3TY8r*b@qeNay!^`9MGE%sWG_gq0EFmYYGLYJ{)&wSgTX1W4jAwQzNYe<ddsh;
z_$K3G99G*K%2b-6zuql1)mVl9ohHIZ!2?YDo-JKGE{%{-LgAH!U{|Ea8Fp!nj`}A|
z6wpIgqI{b=D}SezefRi%@C?ILF1aQW6|#k|C;*5^)>ki@K<x|fJg2;4*Ws4nH$vbE
z6}=u4DpKY&P&F%fUO$>*R>jB5#PKEz5G&CS7H=;>bNe6*_;b*>{aQ~eSy^&)boB4~
zPZ+t$Cgoa#hx?oYPIJ$otAYEx&K{=*%TIg@;&Z4CKS_PlD?EeY!=DMB?2l2-cfcm{
z5Zk|)`b_dD0E!~=`<@NL3i#Pk7IvSUrd_6PK|TLM1}byi0}Z!aQ28P@zVjdP<U8S;
z!Jwb^<g()YpjS9VX#aVtDZyG1;!Ow~xtfIacc((e`exeKp#|dUwVihSl>JEMcNL{0
z0k`?`*JJm1V8Qz>_<EL+TK}jn^EIDAh8!X$w+JiXM|!J^(SgQv32n>^;~y<p$t;j_
zq`{<NVy2+i)j>SvtK~#Y_K7u<f)aY>9kpq7`_nQs&P6BTjgu?<7n{h12lFRgo$cl6
z8ri3r&K0gxXZ6Ml363(BQYZ*}0}jTF0@Bk&v?2m$G2M#NYEmnr!{k{<;zmJXI^uIf
zcB*soMj014Jrqwk5P1$uedJE;{(`9WyLw{v#u$KOMb~kTd#nGII7%au2C#U?I2@Y~
zG3>#573uDm)q>3y|MR(xgAERlP`$AFvbD`IE+A_=i)-{4M6E%<148TVKfoUDcii>~
zV7Obe>z~+IPymj)Q6n^VtMLj6>GR>Ty9j<(rb&?8^}2c}RqYY|Q(i8RmWsIPWuU98
z+cK!2J&g&N{_C;?C(k*uxcD$NRin+1F`uvwrCp}O!jNOpU;=6!Um<L*_{#4vq8G$Q
z0jPB78nq%P1-XKCeQNbZ4@xN&NurV?m%Fu=vA;3GtiOS#XfRX3XD4>2WxTFRsf)LK
z{RRxc`!pj&LL>C#?`FW3%nWk>klyl?!m3;-D^vw}+nrL4fnZ?<I&3)EE|QtB1^%qI
z*<pq0F84?23bF4&WP%F|sy^{1ryE&vx|)Z>Xdq?O<8G<)-P^++Q-GgTEu@qhb~Bfk
zH#=@bv!G$GIY$5bMwI;~6tKyY+r9*1HJ$!j2;~y_9_4@dKd-ov>L$Wk7bG6@gNeev
z7Khm{d1?m44RwCu-%#9AA0?_uQy3&e!Z1oNqAiS*rb&pNn7o^l&};ha0m7W%6#VE?
z75)pmc*}xrwJIzpToWVfT${o;nmR#t()ao>{C$6`wW#%Q(Y1gpFE#X!*871XS?i<f
z`whK@-khb>(OUCylq1$fJMvMXO@xEerw$`Y?vnTpM~=MfD(VtO3$dH+%anR07R_P5
zCquuLgwL2Cu|!^TL{OV1SbmiVB4IbZAZTsxO)~Rlp6tzCL`j>$0jeSX#Ka<^Z&Dl<
zU+V?ZUMe>pO!Pr?BzN%{-mCxs5$gY1fcqQNRmZ-ftu0>6J?BtnU4ggD9Fg%cDx|Rz
z?I?jRB%V-%4}(nT0q(zD>_o-@mCGG}HohduskagX)RJw$?}TBweT@5aEve@1QMdQ;
z`l^?6c^KmGu)_Mb1J{Do_@&JiE0;1gdz#btfVu$XKmvqr#xt|XMh~1H^Rz_(d22=3
z0P&&=j-0o&Pds*lmnJ{-U9u89j)`o^-g^6(=Iz!$0(>#;9@TIBJ;J;{U)*rVQ2BQ_
zjkCgGjDs)h=Hx@aR-Jb){CNJc?Aymkd;h@~hGBjwM@X8cTkHMW5zBMG-Vs3m1t#At
z?rTEz#NwU&Q$ouvzMT6oI})OA+mH3K#Ii~hH&;%uOt1c$y<DjsO;=TU<(v~NOs6-r
z+DtEa?QV;>%tHY}K>xBwQkYF3n6@wzyW#sUWBMGyNo16}4ig4503DSvqQ<tnrKqfh
z6=iyo&hjEYV9Jki-NWB0RvT}s1`ZHXN)sc#FEx7W$YB(U%PW97dg9eci>s_HTn>5s
zY&ex;Q`X?Cu{WrJfCN}}=y~q^t^i3w;I#VyVBaj*-E@%#`z(zI?aj=&DXcs-p5gl#
zuD3WmH^x*>lKD(qKK`B2dH9&jCgC{=R!N;J9_X$LXN3hwI?g&@Xq&G2z?75<V=e`l
zk1@d-rAiMiTYL$@xOisn+L+iQnZ+q0w6QDes~FJ(h#o6?Zt(nES+5HiZoJCj^F!^;
z8xBL@TA)yeC8TPO3rNXVVXSfd)6XQ5Otj9puqwSJI`7Lz<UIv9zIbuDM8Y2NO>68k
zAp0nIOtr+#+Jg<y#~yPoB<yN3%=U@roS`)6R&17?vJx}V;9c-Yaq$8L<x08;9iV*Q
zGY%|qE5g}+@reX*g1I^&%PT&JK4iXIA`)+LCQ^S?DPOZ)!JL(i<4f+ptE|?XCQT$H
zsF?>YP4(I=_@1+1<Y?+Q+TUq!;~hbu63Al98qW_QFB9IZk?_8^K$jh|hs|*gj=DGS
zM#Sy)vl3u&y!YaJ=^i0FwTOnk{#pg)H|-!)uM^@kd4CvIOS_i<w^@ksGP!L`lv^X2
z?dYT?P`@si3DqPFLma7Lk>+t#ENu^fBc&<VH<%~?V_q?7j7f0~ZPC43Bby?4;q>6B
zxyZD}(&%Ls3RbNv^4OaUQ0==K8z0q(=k1^Y@?HnAZq1Wfe<oR{R^Bp;6QF9y&4(Xl
z*yIC1_n}Zk==cM^iI#?^Bg0*9W!yot{=1Fc+W~vW!X&I)Ll3&Im2&PTVsPhimF~Ih
z()=1rp)=`^+5P#wmE^-VZa=(BQkxd2BBg%2HdPGK(&Vf@N8$_2EQItSPw-M`+P4xk
z2{uMx>`<$J(K=dH*23@CpNN%$GCB{tyHHNs)7RO?*Ec9xp_%0_dF&_IcPjpN%`6aX
zKss;UAX*~SS%3Mi<AqFt!N}$0;Cp(f<Uic?F7y2T=aW`g>zSpW+~+rB0Io=p$+M;;
zDZFSctVG-}t}|KNZLq+CK1X(DbEEBZ@7zcUxzKf4GaGZPulhTSvT%Rs?o7e0&&Xa@
zwkd>W5L-gx67=lNarm+&QLLOra&%05c1)}tvgZW?2a8<%B3f$Fs)iz1Y*~boD%sCB
z=i&q=YgvPX=;>h4zk}wi`r6*6jmmAI)W|(L6uhM5?~G9*IO4n4UPDeUExx%b!w}N1
zni3U&Wh}cz1%A7*U$_ShfD4jIm%^(=*TTe^5xy3+v#hR%38-NjF06wL1(D*}ZhQ*R
z5C`F%7o-YN!*y=@3to3iu)fx`R5@KAT?_04SHu;e1&A{<Dtu6v`-G-&lSM=rtEfDv
zy0i0<UY#K+YDhJ~i8-C|;>U4Mtm}7snMYH?r#8&kA<I1CpFt0ag6<*(lsX$lvAz;D
zAKjygmXAALH1}56z_AVcjsIe!E+hcUD?0g~KH*Xhx9V+&!W*LGYYCILwtVx5#8&`d
z=&upPguEJyaAbJZ)9CE*pP9ZtSe>}qtu-7^BnTd|;o2;!=}5Cu8nniK+8XxoySJ4)
z*P@$WYn<Rdy+#))p3xwcTv^eSYt6m0y?;-J(0}=c!53qzQ{=9*5CR9lldnvZ*AXZj
zRci1GAtENWOrLR=A6@ySNTwD%*;ec)YNV8zdtd=%$;%jL?owG&qPLUw?q%Dn{Sgr(
zK)0%4z61Jt@aZlWvSlF&$+9`{8V)*WHa+Z>2PCQ;9=d)#NnE;HQJNs+<1%@y<kDSO
z47`q**nCOkzYM6|(VV|9Xx6U1(;o#Irc!I52#_Wh8Ki1-pc4rQ!-#%<t6RKyD}2?O
z58>{cd`TS((CV=4IS5mr*|~p)gmw6!Wy-QswS5lBQG+@8vWQF>@q0e!8`Zx{Eg({G
z0)%d{ef4LPq)}sQM}%O!i4F{8+eo%&e{Z0*)npQxidW?0US)*$$Fg1)?f$hIimL$x
z9rw(ac-*jYrg$7zzg}iijByV(>&Mj8)ROXY#uU^AeC15uuiRhv(BY4ck0N;Sh$qeJ
zi5EO79c;fcw=rq$ZIJ_Nf*6}P{>qoUxO|}-Ji58wbpo(e;Cdr{=T~pUlB4eo;MiKV
zbAsq<L5N%Fza{!lB-ng3Xl(v~+C5t3`<{U}Bqw{^qm1rCQzSBJO(tq;y7MAF2bDZ<
zYw>9h_e$Co<g(1Ist9oN+v(KP{M6RvFMAI+Ic?LZD^#Us6Fsrm+(X)|mAG)8d(5U5
zlr<kC>p>Z-G_58e5b`5%NasJ-`*>R>COe^s=TGV>=ei*?xR;K6yICA=^iXPX8`Rn7
zDfoZDm|S^<XwtHL{`3j(Co$d7z~6x#Aq4cbepyPa1)$E%eIG4F+RV0c_M0L}4gofh
z?~69zCVneP^B);RIkZrlej5GHfik0Ihc#{``azmMDK6Nn=UC6FV;gY~CJq#PF((T+
zDNsL|zq*ymDZ?Z7ekBp1c_u^XR+5YEbWSUEX_qPf2cuF8zTs6veKQ%qI<a7lAQO6c
z71^9Kx_lCZ3dtUUp)(q;)cYB}_0e#~NyCXLueitl3<x1(Eipfj|8BaKH5)huvjL!J
zXqon>fC}<r89*W|DZW>kj-8cE3@+Zd03Z%`d+flx2#rxq0R%U!Y3Llsvcfd(a2ND2
z9ZY6dB)Wq-jdina<m<cYL^2k}Z7HP8P?%_PC`&yL>+H4J4P&wJyjX$5G0LGlyoH~p
zjV4&`oRFE53^!Q=WLRf3eTLrZ_yd$UG23k^USurkC*-@TGfSpqEiV;Lt`fXgb)R7n
zq6jxIvfy$T9q>toK7ePIyq?5&{rK50t?ErvG5bPEaCi&~nx)eTC1pW(KZ5r+Ox%d0
zc7o$G-y`dtAE>hj24|(X5pyh|&#)@$Sxx-c55=6!t5vw)(zF$`ZoIi}DQ&h1I7WLQ
zYVMiWAHB}3HGqnD|E9rm!ED108fb#2e0*uVx+H(&HRt9^DQ?B(3T5^-T?)?<iN+Mm
z#!@{V%1`zfQ^>|nvb?ooNX-hN@3J&fa#QkIg3nz=@umjoyh)f8RlaI=SV)pm8w|Ae
z3zKIZ_&!^_H#|DVBy(4KILk!pbw=pU&cMO&!O+OU>rU3|jNZb68d4p?c|-rXUh`W8
zGlRvQ;GtJ`a{ZP4Q_A7tAp#C5*Lgq!3`b%)0*)Ns?0OUpQqu2zR1C~-tu4EAt|2O`
zA?&_VK2pkzy(~7S>U0Y<DlA&SK51hF%TDGeAN3Wny#nV~QdK3VcbPVzW$!#QKp|*x
zv;fPGI!Zt&?31x5!GI8Z-@>SuXy9$UFIu9!d-OpkdYJxSU9Q`7E;R)ykEj;U85qKV
zA{Gmr0C&6J0nSS<C3Y`F8uU@}s!b{rKk3oL)1Eq@kc9>Z9Q?E&ww8E{_eE6K@sMS!
z;b(seiplXJ>{-k&TJQ5UQU3FNTKfrE+k(R^e<hkp%xaMe62puWPigHV{NLk28=%b=
zbpPFjbCD~oZnDQkf%hF^k=H312hhDwRr%iz=-wM80A~B7S@5-_<uPCHn`jGLup<!A
zhukOIi>z8RBJ|=$Sr?P1yUEA@7UF_UQ5TqCIsfnl%Ctw$N`r+M`R0s-+w<QYDmvgS
zkl4{h!`r&if^pjjzi(t6cyVsVEN846W-6W#?b6ai2@A7#bjd!8qyzlhwYi!{K|-T|
z-P-4Y^cAD<tvwjgR5~gnZ~&o0`ca$9tH@UlNJX^BXy_d3tqL)!{2eGKPnYj5-D*kd
zQwB=_KR(t~fAD^C4n!PwjO`WLWTVi{BI76e#qB%aQ6z4aStUArxnAVlxIa%U6EUT^
zkb$zby7Tb;ee^z^O}m)Tj~v+3i;G%(oZ4iQerKx>J{#8`E<JyXhLxg!-x2TWu<(Ik
zi@c(YvU?dAY@NIvh|@jE)1Y!)B>p_TpP|Ijo=p2*b{f}#4s6asMd>Xvs;}L_wmB+5
zlAeF_H_5s?Ea3GTY<;bULR01S%33@irD(FSD)g!-8ytCVCIYQeIjK)L!<!=pTvrq`
z5;%5<NS*x9%YqMm1?lsdL^$U!qeKvrm4@|rf2bk?TElLw#2{A}(@|Ty=KK2c^$^L*
zWG7;}b&ksF*Q}v#k|R~x-HWJ9q5>n1Z{1bul&oU>Y)oa^<0CM~jql(nQcl~9-RWm_
z8pOV!8qb$MwYMpfebVRiUG)x+9MJCRC(Jii{cg!5*5Q27LoV^@Tpfy3pAgJ@I5`B_
z@b8Yi7Z_m=lN&OJSht_nuRnY@onP6_Wv$H!#SKY;j2Ij*yqB6hLtS?qE)bHv8?#cv
zqW4|Nl0FvrRkWm~Wg8g)73o4rWn={Kd6O$fwsFMa;n-P5lTNaBX)PX31yB+@(qz~B
z*<sr012R<o7$6#E)sAQ;%7?)n(qmvy)!GMkkG5G<(5NAh+9{yJ;NpJCti6OI|7zP*
zz|P_a^R##22LpIRw7n;j*pK=L<j;F0jbqX3y{S)tVKeub=l0NP%t@N_LUsfqasDQ(
zIqx8I*Q&u{7O*5@y?6CG!nD1IK)!o)BNrKdpbZ0WAhvxrL(;&V%Qr(j^*N{YhkGP0
zslx8I3-1kDt0wSegCZUhe>?TTEmQUNR;`E_acBx;TD2*V`KG7^<_HJMKF!Qf6j|hI
z_LuLq-sqt^m4miFGo(1y4A)CJg@j1a!f$)yA`-V9d8gJt3;Ee~H!7CyxQSIAOHmjb
zC9~Qsl{yxtV$-^(Wf>o4Vqc_5*P^5hwFv~9(U4uO6pp2hDuP%>jz0Mn8XcBiEKb*x
zJuHbB?>hrNWAep-7w{h6^8JadOQxIDpK6mWGNZ1+W3lOvFa?P_wU~d*@_?cKQUdz_
z&Js|>(puApL~EDgCfQ1QHQ}?rCP$5FhApe7wKADC>%G~)9N{VzMVT0F^?2xenArXO
zX1=hg$>u0F2jwvtk$Knxc7{F-4q^Lssk@th6zlnO-XEE3Iy3>Z>1E6zpLc+i=2m(Y
zjFDI6*H~0|C1k$m*<+Z`?w0O@IS@~h6CpzpuT8AWnQ;~>(2$Z><sZo@DW798)HJTr
zmAYh<*2AM%-^jwA!N33M*(*$c3`KF_(!FW54m6s~H57}kQ?!M?SVWH%*$x@eb?C4F
z-x8}})~Ys;{))<!WhE%YC=6rtT)5Aq3mA<pL+|`N|3BzE*#=yl)4SjFf18f=e_6iF
z4us?g5yjGq++8=Fw%n#ecY!GIb{(d?0<Xv0&;TVpy-ZJ1&*B?Bqv|>f$NpfLp@C;M
zkC4#X+??y1aoFgenMn1ROe^bX-xvH1sSs#b%DwZq+J=tUZBI`_O}+-T&&tlOLQWMw
z%#2;z(9pl|Z;?GTVlINwO2&<r{tm=dhe<iQlcvC2X-s?E><Na7$&0M_o%z7G5p+cM
zDw%v9ER=-`#j3(Nq)70yhd0U0x)Eg>V1yPu2VY;3?%iE8_B42mr~#58dK_d^Q&Rv`
z|2#K`69Cn}`wE|X88G3Q?z{4n#ty+i$wo7F!a_AByaXW2!k-=9Yhu*!zA-_5{<1{5
zLLfFac59C-e`O*ODe0{sYsUD|2U=QM>_~Wy6uw^rCapaqBeH8oEGgH5KSDnZntXlT
zgbI>!Ri-{2Wkov&FWD`)tzGZctU~Y7acDZHj$4e96wO)-Y3%Iml&Z<eK@~4Ytq$hF
zv$M0;#CmZO^yd6o*{P`!()r$g9we4fnSWQ8zpLxb?nr{=MCRGC0Pg?q6g?n4nI(|%
zjS7mqg@=XRluP2SeWHuxOTl^`P4_xH258ArFjxpxJ@h2$86F19VFelkP%>BA?4WY0
zO+h{?3JdxXHdfmdP4|w~YG*RWXU0ORJZERnW7vS;IX;qNowJ6)h+7TC7Zt4XBoWW`
z5WJ2+w=<%oJKc$<9zIIPY!dd=5w?b*cV{=RLhvX)B#K<_k|W7Pb1><voW-Awy?#F`
zr2viJw>ls+fcO!UNqv;5q0*57qJ*+q_3A1$Oj5<YTpFVxef~=^<02uVd|Y>bx#z*!
z!xm`ZXBhsTyr44TAAmSZ7#RrZ{ZR?^9Y+#>ORfWe2-w?td?()ULXUY73K;$NIwQX8
z+`=fC{?ni>_&s11hemn(;T6ELll)CqEc;=D0EAl=9Q=+1z(|RN(O3U^2OG12PR#p&
zJ{;S%o|nLi`six_)ipDUrS~95?(n{uSNM<#1_W?<Yz~W%<HPx+1S9PA%5GoaPc;&2
z0MMq~$do|X*wr{qDlE)yAK*z|4Qp(sYCc*2*>O-Hm3a36Fpx%FNe}Gq7Nm`58!CC@
z{voxAT?^kTj+-<ZqMZg2pYW5s31mKS8$6NPJy5Scv8J%Kh^9#TJYMs@An@{4w0$5J
zjyU|>Z`k+N6)N&;(Dt%^(g15lwARqlKOpA~zZvbQwdM?TQM6e-fPMytWAMPVe$Q#s
z#=_)&`cFLLE;u;2*G>Plu`_cHraMji3*1MX-!-<z;9gmAm`9S;{=Lm!`7b%au+9lJ
z;x)%xdtYE^qkH=csm1{0D8q%hB)diA3X8XZKH0uea<XzI{WC@w`!3o9S?`Cf@and+
z*7<TxO^}2UA@4_p&pj6j5hvXe=i$s3Z^djEblkoqx#~5O=bRZRX5?f;wf@qO$?bTb
zIEC%b=lIw!b)T4dddoWg#)~)*l?6x`b{~1{gl-I#b~NubP2ZuJnJzv=VRWMKKI~F_
z-5_)~K2=aw7I}NvalJX1)?#vhK5fz*kn#4LQk`+>iVXJu1ncl9WA`o+h0lt9Q{nou
zagkt%2)7~}y7G2-_4SWs>w}o@xdyK+=SDyd2y5SqDqk}&)GK>ZPTBf#2RT$BYN`|T
zT##r2Ro-8E3T7!8a+l5=lC=6#10;FGVWa_WwsIaN&f)m3o$8^%X`7YHTo+QCFqoik
z@cK50%_JL$-S}eq_;sRvMJ53(la()Chuve3zUyxKLr%^unRf-W2_sOeu_ud^``-F{
z;bz=&GJCDT7XPcukN-dC&+GTXSxHWj{A@$kx~(jcs5ictx!kU+9*1M|QiLkMLjrq-
z;&}t@yE+Nr@U3Z?8WGf}QjTQK!BECPY%pj&S>CwN>eLyk-=WR+q#%mEyS;UT=GVBo
zx_WrT{`!TAj!qngiHi8@=MSwc8k&-G+5lz|Dz@J8dbu2eiomMc&iH4NpP{ln%9Y03
zkO-Thd)}CQIJOXsGzDq7(!{drYH&ePBGWHDVf?@L15k;Ob$Y0HZc&jmebR^-Y#;zr
zJ<KtaRS!Hr7mBfDr$N8R3ne+XfN{mJxOzhr?97ZA<4~oh0*$IFl#={bJlkkb9Ol%6
zN>?a2$)Tu<w3Uc~7S22hl=~=_Z8mU`sYiz+XIa;14$Y3pnS@+F)-5q{9MA5SKLeZ9
z_-W$5L073B3wVAWT6t?*8`S1OJ6YHwPlb-{dLm0;Wn~3F;k<6F{boiUYV7aVJjgf_
zvQr}thD6?KAzmKqUd0+Zd&l@A9T?kCOA58Uhpzl-3Q$35l}>|=kr8>4+~cdCVqO(D
zNmMkwG!<4n@NBu^xG=>)r_J5o-@j{z7fL{<DOl_bMrUx_^KT$jSQuGZSwTx?jMHF!
z>|=vAN=8No>J~7U8ucABi>xFBh2ux|b#-)rrE_O%ZTIIJ8_@i<*rA<EPgB$UH=0$?
zo#^XPJf=?+P;oId#{%lOY;4L@=%C|w42Xs*@^y7Hl#27G!^DMoFmrxN=RfK>tZ;#;
z5@bOIE2XN%Q0}mI%aJ>y<G8BrCh`;H{d2Mjdi{MYzS=1YRwZXwB2ZcQ(JWV``F`Ce
z3Vh3<GfFDr_c9z$nU$55!Se$xTr)kmk?Hq{8A}QWYQ72`e6ZMPogUat-^1HmN5+XT
zY>O8m0GhP|WFSGK#rinQ$&vQUekE6>q`I0FE3!hT;i%V4C}&bxQ4#vWbU1b^Xo$g&
zzS$9jgM)d~C3w}o!qslUz%uBB@i)A+=i=h3)v8dTvs?Ey2v5V$O(Y^C<55&i(XS{i
zoo4X0vtuGaeexAvX(Szr2ijEb-#-^7hKh^XE<n|3UIzaD@3&w>f9;f0MhTjP!_!kC
zx1+iJ@eGfX#qZfHmW@TX)I&~aWWv68C)!^mp(Ewv<HJcbZ%)pNI%bz%v=Ag&Fk2h-
zSH5>*><Q6c@aW3|{^<Sj$Gu)@4WwM+xl=WEl{W+C;ebv>L-<WE`~wVdtuudjU4`rD
z&s>tXe}y=13<G&cUtDkD?C}i=Zp)zE)xUGOwPj5DJU=~MYdVDXn#D9p`!3R`IwQfB
Tx1S4590kZqDM?m|8wLFb256pf

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/bpmn1.png b/public/assets/plugins/mxgraph/templates/images/bpmn1.png
new file mode 100644
index 0000000000000000000000000000000000000000..5755f3124e1728013f6e31cb5ea12df58b88a699
GIT binary patch
literal 12907
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
V3M0qF&<+3q002ovPDHLkV1iHw>IDD*

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/compare1.png b/public/assets/plugins/mxgraph/templates/images/compare1.png
new file mode 100644
index 0000000000000000000000000000000000000000..74846aed6bfea4c3b7bd5e116bfa966ad84c64ca
GIT binary patch
literal 11640
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
C_G(uE

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/flowchart1.png b/public/assets/plugins/mxgraph/templates/images/flowchart1.png
new file mode 100644
index 0000000000000000000000000000000000000000..7cfa3c7c42c316da901b5c374ef51c30a650df64
GIT binary patch
literal 13007
zcmV;=GBC}FP)<h;3K|Lk000e1NJLTq0077U003kN0ssI2OyuZX00009a7bBm000XT
z000XT0n*)m`~UzT07*naRCt{2y?L-+*>NA%-RIopTi(9oJ>cPC9RP!6_LW;mibKgZ
zMMqT1MahabM|MS#<-|^<6sMAM?6NH>k*&zG6-BnSB%&jQl10jtC=MxU$QhcPecyn=
zG7rGpzwIt(>CPYbJq!lR_r3)rFrvFqED-bE(|ynBdrqJ3{&nMj_~r}a)v9AgxHi3V
zary28d$0FjzjKJ00RRC=DG|BZ;@qMn0GepI-q7RK%G6-hZq1sAAYw6bhzI}|o2}`g
z!S8UzB7!gs5W#!SbBjnfTcTT(L?F<F0NSw_X3t#whad=?b4n>hG{zvJV>aG@XDSvm
zm&@hno_*#^fBc09AAZ00zP7PGJ~4UEefK9xLiC^1>q-&;abmpJ2to*sxlpFFXHHK}
zPOYshJLh)H&RJ^}VWjnUreX<mq@fgs_uhTa;+ePBR#y>me&?=GgV*{$Dc03g>{yZ3
zS^xkL0RH{&{qFq_Jbd=dX=m+gufCF{=_fz+Uy!wlv1eD;72=IBD?~(!b3~Zo3T+ht
z#NzzDQACK`r#-X*rSYi)v%7YsDH4GQ625-!;+1j=;HI7lT=`<X5F#M-E&LXV2!J4x
zNU;Q0{O3aW8zA{RHWmU3a~OuV-FA3*WMsTP?wmVt@HRyB-V;%hW~Ud=2fAO2RYbJb
zVHo9k4j@q+gTU5%V)5F><enKfC!#MxMC06<)%63@lWndh9TGD~ajccf@|=jGFk%rA
z27yiCiLx{m5hCI(yP{`OL>o!6-b(jQjvMFt|JcGXLc%=Df-uxt7t{WZ@Q7)eDy3Oi
z`V+oTthH960RR!LwYMKTVN8DT@DY&W2VjgLqM>qpeCLin->ooKp8V!FzVYnSyBGF4
zYllaM0rBGb^K-lAMHrFtJlnVb;2W>MIzPWKHa_mGg+7=PVrs029GlzG=h`rHsZ{#%
zm%g~T`1Y<{^TwF5vGFX=*4NhNcQ535rnS!V{J_CO-~5kH965Sye0;)M+cQT22$i}}
zt6!)!j_ur$8cY36J`w%l=YHQ>H#s@wy&oMLtJgO2JfGXSGf5Jy17Y5?d*Mr8{K7{*
z`becZ!0dbGB>(}@#d<>*{|6AWEJegT%P!4G@fXjMSlj1O$joSME6XzHF0QVut*)H@
z@~LWduv99YU3}YGSFKi`dHTs8`q96!ytXDv4~~tceXI=>ish{FKC#9+-_KCOEK0Sq
zJT><G^77)_=aw#Bs8$E7)yi9E&H#W?>a|y2`LUn)Tc^&P-goFoVvOrUl?A}D&zv*f
zrN(Cc%>w`+Vv-w^=jWF$o;vwvv)QavDuaVVufG0T7)D9bT3ucF@xS?#tLq!}G*P9J
z>+h?uM45B=jaN=h4G!4L4hs>1%XI6>x6Yi{HP`1ybBUrTD(+LvTpWVd+As{Y*4A1g
zN?I))=r}I*c^VR8YVFI57w%q|w>RQ6LBt>k(j-w@JLh0)r;p<p5sQCmHJby2gMIQ6
zfIz9GTK!_Zabnk8YWv->3L~UAthLt8*}~ZJ&c&sY0C?vB#9CJ>^*inF>{uH~q7_|k
zg=nQbOQB#y)XMT&t97FkOPWn0DpU#qr7*3sOhgEYg_YKZC2KbOWK<|tGtFwPW}iFO
zJHm?)k>oiM74wgXrj-Z?Aqfb@aXm@;<pK~WswZhP&1$Vy|2x*@!h<o0cuDwTo(ZwI
zIOTm$dtqZWl0>g&R<tP;3jw^y$@3TIh6kaz<FJ3bm8nb!ZlJH(0|0D(83^D25D-8-
zAa4F|--L+9@>wHM!p`%JyKEN17gh)YZ0+uw!n+$Hydv1hcq3;@+1MK@{FVW|Nt?n8
zAi`xQRnH^<nqVUnefQpl>5)O}7!eS`dUn>{H9y-*5&$g6aUMhm4(!>o#X1}PTj2G=
z&ILda076KO)lqQtz;5g0#(FWjrOt&HEOsnd-e@kZZyeh@mzf(Ne5VF7_Pc+GfYz|Q
z(a@<iX>JM|3lWU-r1f*pKmYX8Po22q&SOW98taS^25^YbiAPX?_{OUi1BmKqRP;gs
zglLRd2gZPPS9xx}y~K#pnKPBVAb=<|Mx2w}fHD0F-^J81P~SEdd$dM0Ar^lM#ZpAZ
zm^%+0Uf8=YNfKur5g`B&PMJ62^cBJI`d=S{c+mqZl?RQ`4O>cKMjDchq1qF&od*v=
zHY)cuXasT7+q(6ao1<AG3`Aq@T&4c3V9<8s62Ne^`cMi{A#-sr?@M?QMyx_QTK}qu
zYwQ0+6xXQSS<}-feR)a?ne|nYNEies-+benPk!_EqsOKu#tT=P);Rk5Kg09C3&HS~
zg>j8BML1AFdg60QxS+)$T{(VN#LOZPYGy@47atvb`M-907_ZA61eLPublcC>rasNi
z2{W@W1M>|uQ@W!-vm+Wk^P9n2zaYWr^`{O5P)p{HeWp>pPkUzeBHWMgA`oa{r3N;h
z8GP<X9hMQU@BBoCb}d}^I~((VPmBXpeFm(qTzEuu-cL+UefXmvi=rsc&84?;HUK*U
zFw}N-fSp7ESF50zk_>v@S&5)jB0^YMu9rrJ6;hrLiL_B`094)xiBv0~ERmH`OqDWN
zN7q~%QqYGlaC<_8rKQ^F)CjXOW(1(U@Wiee5LYWuB1)WU=Bio-t*<S7dn#<5wbeS6
z1_MndA7otxX{T6V1UyvBAew+E>tpTUYQ=)$Kve42f901y@t=Qc|K5F<92;UmQU=d$
z<P#CC)mI;X>b3MtHH3#B{y=YvPXuX}f9cV$#c}lKfA-}w%dOx1TSvzXI`7+jb^;KC
zdgYC?kG}YLj4k8%{Oa1`8>g-p(n*q}R4RRoHZx|fR;$1BJHI_Tz4uqXmn36m#_LZV
zgOpG``OHht<V<FxWn60P=~u>kbHa&8sZ@I5`DY$`^2OiyyWhRvDPufc--Z`}Q0Uy^
z>K~kbf^01=Rqns<0j*Wfx^<Oe2>_t?o<)Knkjsu+u_U<yQElu50bq-J5AB^CJ^rOH
ze0K5t;@&-TS=QaXhMCJ{diJ^35aI5-@6m)%8jFLMe2Nn4cKanNYh`MF>du+F0$0l%
zR~8p<Us$+$ZA2uBqR)T+bGIKoIy^M&{f*za3b*7Z{>mpO=k~Mt3}y<X{W_6jyX(NN
z%FIJgKK4bgg8he&>>Tf1vBEGMtX2-+@zC&K%OwD$q|M5qat4N`hfnN2Q3>3ifAy=U
zPrr5e@ZL1-@lJZp9Sg0qlT%Z1T;k$eFWekS=4%N=LHnbSfX9ZagOh4*$5cOVToIm`
znHU=l9)9R<Dh2r5v%c2kC~S9{khW=~qSTHZp~}Zn>uY&BJvDr_yMdWYC7Pa|n4B0L
z8y$46XEEEq0({p;--n^%uVhkdK`Cl;^a>K%=5RR<$6;p2L@l*r<0CWE!^ZZwv?4G$
zb`)b3y!lnP(ewed*)M^VPn(g*%uHO-Ff}pSXDIzD#X=C~a=E;C?%e9i@{Z{#0YL;W
z;HMtYwG|259MuTyuri*6)8fF`K9exe8nFhF6vRV$=wLMcexx>cQUE{_+Za8Or=T5J
zE7r<2-3`p56j;mFh{?hEZ&j+X$pst?PTUzyJt#q?&D4o71yNGjV;oom&WbZ)axi`P
zO00l45LR}TcYIK>$2JRsL@r4uAILHYLNK;pXX(2YO8@{^gjw#s_x?Q3rO0dn^hOpB
zeOe#-^tK}kLT3DcfB<f0XLPx5Z6>6MKoR*yQeIZaj@JM3Z*1?sLof_v1&D5iymTZb
zRxZvzq8A?7R(L_kt*<Z$QWyT{ZP?33WiI*nuXZwZRsfBMNI|g*J**vo2#UzN6$?>B
zLakk%j*X1$Sy&*DFi>HD8bI0|(eD~N(ijGyH3S;N0N8iuiDAYtgg_$^MgiCWi4df-
zONu~<03i~B7YsCn!8Ke#%oqls6$Sx@A&~nPJ0m(5USSkMph0U40t|y2k^I;(_W(cz
z7zPk%EY{Au?zk7X(IB|Ok0qjr)*8*>cx=bP!!>I+E-WwCTGizZ1<;{h0RXd9lFC}G
zRa$SvOG%#R-5T$eq_VuxP^8W-<!REoEIG3iLMTG2)-G=}-(GH9%XsG~Dy=n=^DDK~
z;kUwgzlu5%o>|ICWqG~X%=2ii5mI<VQZqWAx?=KIYE29J+)`E~Q+35g6RkBG8ej{Z
z1DhX*W#7tkver4L5NoaG$;GolH~Co1Tq>8B)>k16I8X&BqYL3g;<$8Sb(x3;7SCjt
zrHFM-MF#1G)zxySoaZYOiABOFTG?1VdvS3iZGKx6t0NMTIF8S+E~VB<x#UdZ{EbP?
z=u`maxLm%tw$d_rI8f<!Qvd)Wsuvlg0H}iiLA>+M^W@Oru4-wcRvVw3szlM-X+APF
z6}It#Tt&=WsZ`Dl5AT>5o1dBPWyh*iHZCj@(e9b)G);PdTNOJNGw+_6zK**gJ~=eB
zb8=#6xFdH1N=Ftx0!km?FlH{7E47Q~o0-`$KE88&)H+AN-v-u~1gKOh7f%ll4Gr&}
zneO(herLx*0A^lZSr(S5>1lQjkX}Fe<}=ScbNr4w@4oY{+*oTZbg5W@waz<how3$*
znNh^d+8FB`5gBWZ?d2>evhb|)xi#*pd@K<`BImtv&RDyxVlg17Y6oH<d!r=jIo8I^
z+8XPe^UgYJtjQgt9_WZQ8{(wh)vq%F0&AV~*7dS>0>DJpIvs@J^3uhxfBlK6sp;9d
zIn0g8^Sh4Uv2%VQ%Tn(g5p^2}#cNTQk5kW&Um67PognVjBWy)^w;f*`!*Ixl%x{CO
z0qQm}c#^zUI{pgW1DyA!TUWd_3l0Ww*#0}T>)Wz!#7AFJ_w~&B-2y<Hsq16}ZH$?j
z*>UfE_m@f~XDxt)QS{2oFFyC&vqz7e*fqEFFEE_ElPOa~5R?Y_-010lp4${rU3Ya+
zp{tiCK5}a2!8FhM$+<0d9Yv_4%78sPcIFpz)4(>0g#@lq8UMh^9S<d2tS^VNfBQ*`
zND!!h^-I5a=iT>w|6lu5YK*mZ|H7V$sp&W_nLMW(m;Z9>&{n#=0TFfmS`135`o{W7
zeQ9o2XzZ|crM8Mi-~zB^A|N8_)!b1^F*706>-DUWj_<A*J7itB9qS0USSzF=BFD`A
zz&iRNjfl?i!rr}m_U^M505(&ye&Of-$)|tlM~)so!W|io?=eC|5t*Hx{o2>QS}vEb
z8NLvaAPCl1S3di>FZ}#}`_~VPPLq}*xZdgth-Rs+Hy=IqWs^61tM5=m7&q3}bLY}5
z`_dO5{f9sG14rW^ZPk@($6B#8H<B-Z`O9h6Dy$c4?LGJ0J3KOSQ*>+7kCn7qtyb$2
zcM;h!J2yBu<k{cc+{<qfA)+znwnK;a?A_NUC`P23^^GHU-hXg5%${Vh0k_>YtflgB
z_2GveO7m9FJC=w<VOUSnH{Uw-@cTY=bT-bO^58=D?N~cY@lfTVhaO7u1OZB=%5%>?
zedf&R$*HM+K#o0AaTL<%`1s25l2V&__1=4}G{B9CE8MbVtyM}XrP};vbZl&RszmuY
ztk=P0(EdC!4I0jaFmm4XlPFif<Hp9v_wC-NT4%7{fUE_y4Qn-+2VoR=i-<v>OQmv_
zWjAX9wNk3K(U{#a$IQ+FATs-EWu%p~)>c<`@7(zp*LL4L5ZnL8d3Ls04~AO@{yHS9
zKy55&B$sdOcqnrgix6wCR0KJkXOlJ?G}t`wgV<UEx_)LeBDuUabARR>!e)$*nQ!98
zphZM!y>s{O(a|xph2~Dv^!B62y!Y}Bbs?i%MP11xA|l-L<L@2_`WgWM02D&a;Wrk3
zZ2M~rqIVWdf(4qYSGx4x3ZZV{o4bE_`#a`ktS_zDrPuF#2Hsijo~BN=M$kn@*!=v0
z_fD7vP?HJ>7j`eq&Fv(SC<uZe=+^Td27y*O2y_?((q+~*Ge=<<XiY?65O~*1p)*7j
zfIzD#2nlb5_3B%l{7NH281~6ZD-{Gf&?*c90YKjo2=)@|0=N)pEuNzwa6!=dxxBe{
zS_N8%LBL%GlnT##5NHhm!fc$`^lK?vs?{}s9vXdfZ9}cCpIck2E8R=1aAO0an8UcY
zSmF7#H6j`~f1#gP;rX@oQWRYsE4;-?5!G5rz10e|?jZ;*B2gTlUtP1toIHOaOS=dp
zZ^jDOH(J(*gBSXY6#^0!NN5%blp3j)gD}j}OuQed4lK;>y1w0b4JzVIi*KHso1B@S
z-DNr!PA+@AzO+Q7_Rh{<mfg?=6|q7PwRd*c4N4H`ojT_&uvxodwO(JV*Z0lt%)7tS
z6$$Uz+D2~jeY3k-tyWh%R;5y1Idg7kcxdnJe1F*umk7~&KQ=VrYwORx@cjJ`K0G!y
zel{~R<3nwt3D*>^TBXs!^5jT$cA}J}afj)M#jlFT&kR+GXl^2GwtA_ZS0JGqNqxt7
z^`;}CJ5M>nEhKcHfrw`(Dm@^fnYmJ-3&Yhc)3Xy{v(&`|7Lz|VR2dl_n4O5yH0<)U
zDe|$d%pes2V1e~oO%T^>wV|P5>)2T7>Vm;6#)5NTofrd#L3gH@-U$dWZ{`y#lH7u^
z(nB^VAsQ>zfw4Cq2@MK6gCc`-0t}+jSaELi^}7|GSpo~ziSuH*oWNr3tP|@tpY4jf
z05GGqS7wj`B3ffk962&FI#&F$hdAU`6ca(%6HF)H7{2hYnaa=xFbPQDR(AY1E73j@
zK)O5{+FKC%)<8nD6Qy_7zf@WJe_6H3c?SR?)EDReyEQdU{UM>>nYZpoxO~og<$fI`
zbP$HGz52=<Z@h8v&|#w9ldnZ2j-e7kxbc*{^;rqWL9UC25mac`%Yz@H>ON#9Qq*S^
zftybP0HqR20KuuR@ms$yVS6Mr5jRU?-%BIYzyPpqIe}Z6u7QNM*4(!5K)Et7GB(z8
zG(ZG`KtKM(Qw=-t0jfAZEPk*(BoG<W3>!@#lQ0anTIt}xU=OTs1rh<JP?*2`mB)9?
zAKHOc=ZC?!2aywUkY-Y^%Sg#7h3{$Ax&~lXkxG)*FaE;M{m761#L*+S_v~FHq|bl;
z55D%)EBF7vM3ABPg4Z94ffcAX-#qo_FaBvPEghC#d+pUnKK60uo0j;|Gl@tL;KilY
z#~=UNm%sccLlg7w|D<3lyzLB-diB-UzL_$&R*u|pj}F53?xub1q8%b~<o2Uu;}g!c
zFHv$`LImgS-~OqeK7QY^;MsrcG9{v=O?4wwSuTf9>>uCv0ZDDO8a)2QXrtLsw3*`4
zgA6y3f&f-lR;H#V{^>vdSzQk0nV;ue1GJw3%58r1o<sY0Klu1#-#ov#xO@MBzgUWe
zAR@I|EzdISBN@wk86F-41kSx)Tay^tABAM<>?k*YrnnV?ZinW-rAY*|QUGdrD6AWh
z+~L}ql%O3F8W1`6jxqs6t#rSUsGCdIKti+UYIUGmt!`|rFYMmkv+<4y&Z8J;&Ob8n
zfpD8Ve-YL}edc}W07)0O!ru7aB2>(pXJ8ABecxY>XQWLO84$$#u+khmt~?0Pds?fY
z2tr>TYZMkltZi)U+_f8tgt-U^cjw0v;UbC&2p-nUGqqzsu<cU<07j6-i!j3`Ujdd5
z0hd=0%I4$1?M|Q@Pa?vCMHHO@#QW93g|*`g9Xtq}`zix(g>rin{?fcLbUlGvYxmCN
zcg0-*ig(vh5JX`>TQx|DSSuQ=R_-`)$LRPNu#W;=3ftxJUqd*?QUIZbIKWZ_D1aT}
z_5$2|JcKYnMOY4jE%uNeO$Y!OX()xD>D%hZ5`l6Eae!ff<p6w$gquZiw;==$upC09
zA=elMSc*V(FMKh9ae&~lR0z=V1TteefH1%~z;X!CC5pZ9yvHHxr%s(2tyV5oO?DzL
zzkS|WD}blZysZFUU0$zK*lnz^TrR(M?tI<hN-oB97swQmxKw)it#d@g<>79_RRtlU
zvG(od73<{NjrkOb;`r3bGmS>0^wPPm`h<yaTq?hE`t8J+8U!nAHQT-LA`-{(Yp2dy
zYt-;W)(tSTSi4uxEDo$US`_8oX8;gUt=ZBGlVg_}2q1uCS+CXhO;2g9bCU!6v#l)D
z6m*w1gK?-rO<_QBqzF{Eid70#7$_o&BL%$qc!xt2av~xjhXKW*avpjZ;R@>fSrLgt
z6$UEQ6o;B!7iAY^Yw9dh6sR~-%5`mSibx#kFi<F}6e@74^C&(u#-R>1g@G!C3c1U*
z1JFcyNP4hT8mg2pmE$(f4_7M5`s#}>zPPYw@4@~1%i;21x!k2<aivlzM^Uv@8Y-7_
z)tzw6T&`3qaYRHz<#K>PNFs7oyRd5$p%kHr+}d&!4_3+rV3kEW^EehIhOhW#frH-u
zaRfntIF74v?DKr6Qq~|{#emD@awU!hu~Lc$%az{JW=f?}C5{c@P^F>)y3B4Um!qf}
z$Ajf^NZl2xEELOm)}GmW_QEKD2+ZP{g<yPgQU%(1&%&OWIxZDn2<Mqur1*>PKGDy6
zW)=YPMS)uMih=<x9UREia^SpGM4q`2-irWBsDqN??eYwSLANZ!6*Y#DDuJTy3?&4}
zILJ)ynZ0ar?*`|zIb+iM>;ZsCF>lN)t|tLl*h??mivp0$d~F9Qk+Rl?VZ_4yz-s%X
z&Fd<AOO@N;srkkK-9p@^#=QUrke!+M$>;Gtl4LXQTtK`NJ#gH9cI5nL997#@F%=24
zesTPNe9P?!z!cTT4C74Hx^ww|ab}|(Y7~gL)f)cr6Y-BSJLs>d^?RMJ3POV*(fZoz
z^3ug}r7|}&b8{RjxLFV;3?uJMsX7|3oVQCa+U?45i(M}doQZ}%95~0wK@bK(s5Awo
zA$|G{v-~m#BijV*B&m+A2l0WBn*s#FQ8Z9-HNX6v-As~h2S*NJsyrVFsW6NH>iy5e
zdz7vbg!axY?A=>$HYO$}t-A@3v;v6`1i|^mw`ZoOpZMBi8I=Fd14?W~IBt`BBS6U2
zdfl9>zZG&Lce1p+JQfFEeeBO><_{g)Rbg9ZD78~fKtQ#!T0dvriX>G*xVF0d^b4>4
z@W<{z9$=GDTMQOD&a&X#+h+mX+vm>3rBeU1@gAiu#k$m>M}UaZB>i{)_iz2k-}s5?
z$%&h?V~I!*2Im(SPmhhAI`!s-4Vxa_3kH4Lt}6@xK(+PysoJR$CdTo_^^K~gS6_W)
zy~RAuk^=j7)*_35rj@0Yw`#hCxzgd<>dG@uKfQA299qShv|%p*iqW*p+4VD7*3ddQ
zaNt1Ek+t`Uc+b*iht(hqy>qbDZp?ds;?BFqCnjA_C4~AU5h)rM-hJ=AC+@s!|Gs_k
z=xlZIcWhH6RBa4VL6zrzcHfQ<-SZJ`HZsSj&R;k@zw5}6!<Erl|NK9ojD*`oO9aTI
z$!*6E1cUbmt_h@Uo_*wdKDkpaW`AnMX-2%R<%Hx6l!i<1d;j~>yrq!xEbG6G?|YPV
z0rJ1Nv@|k08buL+fCv$tJ$t5JuT4)(+!WBGh#*p)Wvxboh+3_tcPhvnxU5Z0X+a9C
zuXEIDHUitq9cM|JCW(kNn@!{}Xyxqkb~ctkpfGc))vSk{3J@V!pJm_!i;|?+4zNmS
zGUm9Mq$X`4(Rb!vRgezD@WO@jfBKb2ckGz^u8%*GH>_u_RI9re_B85sQoZ*k=#LNp
z5Q&HcQ2F%i$bIGm|5Dne_5y$)>5G+p%BQ3PWJ`od2&}{<CwG0{=-6G{zJr;t1eFV=
zh0t3hU2IKS{Hhu`b^p&Q(}1=vY!a?jcR6R2R^Q22LIBWtp3lwg{P0H~AtGxWA}XTQ
z)s^9qk<xX_uzb4-kw9t^tPkGN$<N7U1XuV%k;E^-;KiYPwtrqk`RrW}BUsOG#0Q|f
z?GA+KjS~AEu2oQEH-u5}fBy3Sao0Wf{?$+Y)g;fEd1QF}p@-fVmrB+cq9Ra#lOgs5
zLbk)kvRjapEu6Us1E2y6)^sEQTm#giebP}N8BmJOt3A=xQ`f`g=^d1O_k+kg5BCSL
zM?~j%=luN6UGvsKpwxw0y}-Y+NI-aIWo=Bwx|`mc!W_4<m0FWZH7u?6goMtPH|j`q
zc4@U|B(!yId81w}tzEB4(=A9M636NCMm;r-)@tH=iJ%uz@TK*-wdU-_)vluWTWi<I
z7)nd4{UM=6Om6Z#Cj`elIZ!>ZYZjIA-m^8Sjt(5Uy$8T*x^!WF*ZkhSJM*klY+7-C
z6_4vIQABqi+uv$&VFh=n+r=OSVD<HL=T7WfxcPw9j;X+!hIv{~vz-fj_e_l$CtH~-
zoxXlCNZGqQ%N{(wui0ePY1#~W=4zGv#`?&}$n8h=b=#y#05ri$t)WFE2-U#gz{QIf
zlmhlXisP4Gc>ek4pS$;g2lwyY*H_m%04Q3=b|xHMKT0eB9oB$rGst_Fe1~%=px{aa
zPl~q79ncNz5~Gz;wOVt2_a0}hbAUwFn7#A6<8p<F`VV*sK!mR1*S41#sYPS<TFsLM
zAVgpBs~uQ+n5Z!$?P{sL*GL4g3a!xB+xce!0EDU3z@f`y69S-726^Smu=-Vm0Erq+
zuY<4YmUQ8@nx5G)K0a=ZMMSOj+S=;LH(x(|`_X>g?&3Vc%<AtAocae|54DY@kmh9V
zz%QH~d_S>c9||)gG6RBlNVBy^hhP7@PF36cv9xQ{_Wi@tBYz3mG4m}B#<=>@&CJZi
zn|aMF0xTR5&7J!Dxbh{?18w_<Srtv3IrLlWGAvvS?j68r^4!#G|CNKFoh^Zi+(xqN
zr{0+SG4`;XTW5RHED}Z0zWoQBvqg78W>!j#j*VMm`$6ddfKogX0-BAy-uOzl%K!ip
zbxA})RFW{-uIp|+^y>oyAQ@I7D3y^As}bax8yN`HYAvfZC2ZF%5l}hP)Mm9h0LqdI
zgl_Gft6aLWQYkZ3BPf;70hTK&ih*+(u7GQ-Nizo>v{fvx)0K+OOazqx$|Y)89@e0w
zmDlQCxBDgm6_`Y&%L7%Y5X2Gn`Au%t$I6XCL?Qx27MYxydiL38cJAE8zDLa!fglKf
z_1AuV=e`p^^Pq-2V9|K}#C!qL5}!G{`pn|Vz}Mq)_4(&t*FjJ!4gc{U|KVy2{_!V<
zLmPTlZ8|RqsF35gFV?@ldMcJ?E4Lg)x2*RY5ng=xjimLi#AOkQ<I>BooZM(M>rJ;l
zHu`UV>(@W_k&plQXgNz2hPtg{A%xM3FP}PR)&^qr)|qq9KJ(-kAA9C!KCv+1BIgub
z|0ESufs0nwvj6yvla;`}@#dKmC&v1DyLZ*c0uT^D#5~KN`08T^Z#%SOX1b4%j%cmJ
zFz{A5N0xTc-%WIf6HiRc&U;eI<hk>nNQIH|mL*5lZ3jVN4{X5`dk|~P(%a|ojw1rn
zXCsgsODtS2(ep37{?f}Y-ge+nmcPrN(n?zU_U&J<H)_q6V~(Sk5Pc4u1Gdd{6ag0W
zES}jjdS*n5;)oq{j_nic1c4p01s}3!&iZUMe!bSc&bix<9UmPVch2?JX%i8wwLkX5
zKX`cmZuR8<<y$Q6nv??&n$+yNbE0zFKFMu03J@}-)LpmF?_2o6xDu9M`d!=bQfjxI
z1EERW^zB3MJH8hk=f-{h5C6nDxTUlTphzKsR;zXR(B22`JlHh+u1yOdP_VS#T;8bN
zzA$^@#LrYBW&ZuINs8jzD;9cVj~&{xt1>;PAdFycX6!$E@NPKun5{br<8~G^fl1xS
zLg~Q=_Ei9~yxC`c|7$2#k+SmU8?W89cHiXqSU;MZWwPdALXQSqX4|fvvjA!wYUqhZ
z6EGJ5NK+vtjU4hE5`hwpl%?WrfY-nA36g?p8cf$)psi%)+YBh|h6EH*mO&$jR*Nq`
zuLU4b)M{~(_#}ZeXY15pH~}sI3a|ThB8s=FG}UyKW?it1Ny65`nuiJwmT^#QTYDK5
za><1|8cmP@vW&~+zTWRzNNDCbE*-z)uB4k1gV!WfT6tL6{g)~;_iuN>6ri9LPbdaa
zniL=rArb+Q)(mU2AIQJ&^V<fY0d-QEP##Dta<@ts!fOzM04T)G{wVL>v5J30BqUHu
zd4`Mk|4-qGpWF^j&KwRT!GQKmghT|Sv_Ng-2!HbTfVYWYB4ApcKqnMqZ*4U$CryY%
zNK(}K0s;t>T3=l$m&>CgqwIOJ09QAIZk0O&Kp=!1^+si;qX!uXfiHV}6Gn^RKy6f}
zJ0AqE`g7|LUiE@kh=-TGc;R+WbtM_7Y(KQXR@u7EB_jj|td%D_5{!ZHofYqG>WW8n
zYD|)wO<W;@^W4hw%8se~9{vCz)LJda?40ieA9IPA**bEbon!03Igi(^xOSCL0L*MG
zIqylpI<U@fRyyqPP{typL)LlkWmAA#Nwco|f&fs=vnc1i^K2a0Limmi5|6kw|K5Av
z9KXZc{bkQO@9ib-9g_eEk#($JUA(wlZ(fdsKE1N0L|6n73E|BPE9+i#H|4mClFqN6
zJ+ooVa+>rMgpOZ*>n%cZQPg`7+L)7zZ-4#87yP#u3B4_C`+|z7-b(68(r8_yp>-$Y
zM{)e-sgu@Ps19@;gf5p~J$<^mw$>2oJqUf*p84tF!ApQu>)Bg#_wJp>I_F#|)HN@|
zQ<FWk?p+)n-Z4HlKQm=a-f{ex;GOohi$rQ+W-9HbO!*~3L}Se2(7?jXRMGwlvD4ZZ
z*NmLB0gYYp!);@g+rFSuv|ewnH5z+nriyah9Se^FSO8Yj)#cpedv;89Uyi%7d}erP
zXlP+(D$6pWPS1)W-AEIyHJaKuXRNz)6dLDA=@(yk;i;#eI(q!XiDSo|_fk|K=}@%I
ziY1%*JS<{73Uz{45hXdHY(D-@&68fPb_l>CvLy_HIM#xl^o$TC*%db^5pWQ<PaiGV
zq8N?an919|Aa4D;-xA((02p>)k9Z9^$U7{G5xT54BbNkYVdKNjStD$g+0l533gex~
zJ2$_uXKZp3kz7yhMlK`qLgPU)2`}+B>LG|~5%xB`{uZ2C!Vt`awGn@2o77|w!RT$+
zlQ_7fTOtx_+KaCdx7s+b3t(ZLX3x7ZgdQs)UP~ZB3U&t<D*hrvyYwXlwlsK_cUjk=
zN!x~Si?^N+ma6{zwyYfuoaK4D)m{54z$!}^MK8bj!q>j~*mwVxPfU%E_Y;RE6jtRu
z$?r^_`$tx76NC<>74G`kr|3h0uQ7Y+u+l<X5)o!b5K!g)^<Sx;|5e`}@(K{4$o#*2
zSq_Dg2%sXe7|g)R!83o`n0ovEx#${h?2+Zse`HMF=7SVwX3xSPMb!C97&{^`bAhu5
zgg^zit^6}ueN?s!LWj|KYwp+1awTTJ`TCx_$}i_F0udw(D7<au7uD(?Z^zn&;cz<t
zZ_fJR02r=UHF<V!?vtPT{<u_fzIXVS2pD53<p|a}ZG|p~+k=>$Ga7iHIzYyjtJN?J
zthG>Fh<cF$MMNo8sZ=)BR|kj6e$A&zEJ55J3GF2f6;#Uufk)Co(rOZ_I117hT36l%
z32hx#-9V+32Hd6*W?{#~QA~=e)#_%H_A=5+<(@Oor8rJDYGcFY{H%wx3_5PRx&b>W
zN2(eO43q;T)PWuts1^rN2Q&7LY^72u2!bR@M@J^id4{yK9cyL_$mY^YUBf{N0@Z=R
z-~9D|{aqjbo{7=X-eQH!JTN%$Tfgxe1Ap}Azx=5|Gz7lgI06!2aO%|AudF{>f|d%R
z#l^)FC+_gx_vV8V;UEZ>R#w0M_~U={h0jgS9sH$7H0HqEHrgnxm44}^SHE6wMUV<m
zqh9;`A3yrP{>|?@Ad$)PHuZo6Kr_`gvOjz5&#h^-+p$EVD0<_KH=-!2*J@Yanu(~H
zq|G#4J3IOReCD@5`r(h=aVXAH-p14s0HCLye)jcxPzo@N;&W%urb*IO>)t}PS6_Lh
zQmOp%zxbtl?|ta!?+aZf(5B2K6md#~%W~;-ArE_BxOzbV5S_Ct%S*yN#%_ry&-2@E
zJM{4T-cOYYl#@Oq4piG9G&zRB$)TOqoe?)Z!_HmvV`F2sOIO7uLPW>B=kV<_qr=CK
z-!ZxKfHz<10I-S<d30)Qc3>`s?C~d_IB?*=2R`_rk&#h*QaD%8rlSIqa~M>jx!Kt~
zZ>LxQ03wr9(;&jv`f?Oet<|cvlF6yb`|f{W|Ni|p`-&JP(k7dwD2+*zyC$>YLDSqg
zbN1{*55I4HZLNI^*{kH@I4-ZPt(D^V-uv!9a`=eLp5a^pZ^!!GKhPqe6~$4>SZ|##
zx}G>|=NI-=2L`<NJsY9S{Nay&6wBlI>c8;y%tvjDCZMt=87^0M&+O4=Lr@hR*n4BW
zDS+o{wK_XDw_|pPDv$EhU+@hhk!gPvI-g9Q7?~ejC`tC_skaUvIdbO%?;mTOvbBVr
z6})~N7zs=k4Ep)qyVI<>ZBOVzzpwe(Xr)%`^-{e#zjMdzu3e=tc8|5VX&^A|^RYOf
znW-rZrhL+PdvS4ObaZ%lxV;!xP;nGqxOjeOaOfi+djy#L*M5~72Ez8NnKc0OJ4ay{
z2FuIKpZkN~zvtfjZ$Eb2v|7R($ECMUo?Km7-Z4GhkMW)+sk7^OX?|$nAn0<t<WB%y
z-r0=jvZN8PDLhGidNmQjdvA;}CI_c%b$_Y4&j)St-B83+SZ=8CJZX|*YmG6+)YfAa
z)9_K<TETYxa|wf1Hgcks<t}e$yl+cRk;#oQxyenMXD$Xmd?c)|NO1jbJc!^74DW16
zY|_N$xrjJxyX`H)%vx(}thKh)Y&g+w=y0@gz8z~oVG9F0GChRO6?ZO;h{o6h2XBi@
zrNTqaBBa#4_dSqiS)VaBR9gG=_2GLLKX`ZBq!|DZLEZEi_#8TIm9-5CY{e^e04{xT
z>bom5-?eQloH1xR3D^N@L<FReU`<L--u+Ls*!DM71V|zDHl_YjSKn~~Au6Sv%bwly
zWAUCJYA-s1SPWa%YZ6<O#(c+>)GccO1f{e|vu79n%hJN9J7Vp;1`nX1Ktk`@Irrup
zuQ}(4NJIjyTaEfawK6w5hs;_jt(5M@^L_=1aKmH4ul)}d2<RJ=%#VnkS&<5q262ce
z;_JSXU4%7)D6N$uq~i5OIPrYFMjr3t3ohu!rnx3*rIb>NRG?JhjIiv@_7eyQK2SiU
zwNi>mE7f)1WJIl$BBe=br2?%S`+5hg0enCpq&1OJv{`ND(Led(UH9I1^w?oav7RK;
zlj8^PyvI8C_S#x4Nu*Zmss`!R)Zv@mK<GnJHM!PmE^llUn9t5<w}A6%t($4GQmchw
zDBXDf`+o~Xw9#zUTCL^UhOw?&;fW~AvPP0F*J`f&qcE|y)@rd*%e7jbW!v{Tzl^mM
zH;-mZ6QZ$h|H0e#A2?`?5K)qw^BXlJ^2`b#bABv{x+=$gD-a?oMxsEeP@oquu~M2y
zD-|l$g<{>1SyDtw8KOX`NO5=NWdVSQ6!}7U;V#ZX0YGG>B2rpyzI)ddPz&L;hy;N?
zzxejq)2DAgdbrv0)5AlzjSaPubZBTu6D6b%?wjul34JS2frO3%x?}&&9+1!?qBWj<
zW$gIgU2z<8hZUQPXS<d4s>cHb%Nxz5^^IeDXM1SfO9V-ht(-l1=e}8ErK=6kGY?d#
zc7AGfWaQZX>7-jEw1C#IywT8rC<1rfbx)q9MOYMwUV7!_XP$ogj=S!@<HQ}Ab*Yi}
zpkiTWBzKUSURw8xh-Ne%QX_)kMMQNphA{Nm!BYU7!qiCaBr%Yiu7xMU)QEMG7_e3V
zp>yHEiweP5$*d#>(k{6RfcBUf(MqY>#)b$_Oip<ZL}aZwa_Gp&*mxAh-Z{1DIepJ5
zR?$NM2!Xo189`yGARr(i2tbK=a^nl&>VR#G0z@%c`RH=#cs~g8f;AO4(w>CB^b`RI
z(jYX(*8WJgK|&*mZ45lLqIav!sq2ONCE>OAzC1Me;KT0^18wpgK;kHV=BX#Y@r|#4
z&tLvtnwsnv4E<gvL?9FuLaB9O;N}0`x)j?e7Aml{($vS-4*#09+_N7`07OuvxI#cr
zWsI;WK%_M&g6i7yl^1^6QMp}887j1EYT>6>=KqHxX5FX9r??dY5joF9ghY9sAHMze
zeFqN)LD*H8=`S9M_$*7Bxr_}cV}?9ewkyXSqKo3FfI{@XV+9JL2!jygXw$RQ)d)o3
z90UQbuC6;8m<zNuBOFxQxe`%<C1D*$5C;I@yyt#aUT?n2r9wGUfLHNf{n9Uf>aTrz
zc>jU#)E!Hd!hwO||L?QE|JgtMqksPQe)zj2XeKFLzXqv*D3-=r>kt0JpIOsIU!<!^
z5!I8VktC;Hn&=@lxkyo2T3UML<$wF7uRi&izyHbGy-JL0<1!MEQ1I-z<==nvu}E4Q
zwZ=z2eAwEa-{3kPze~9ja#K4~+(beoW8i}ycxYjM*P&x~AJ{vPKgM7KX?GNow^SOg
zK6K}UrVqsufIz90T5YvfKeT&3?==ixE|*__?d1nP_&rk-%jQ)86-e8o&>9?_9ee-5
zhb7%8RZ3A5S=)P5?Yc<l!J*+G2)<Ldt4%US=I3V@4(^Os&-wMb_w74VD9G!2C>t8m
z##H-LEHL78cEdwaX2RZ9ml=*7y$woAzq#Z$YCiDoP~@aAtp&~x4}-)5EadvDR(EZ{
zYPnKgSzcOQS(%-gd9PguZzLh2wcspJFh02VdsS;0+6SR+Viz9C9Z2s<As_$*;5~Q`
z&O@&WX#fD3L2n@%*i+i`y^7o33K7ZW>FkHB0rXpF#y)7Xq1L6T5&!{l&fjtOJ;qwu
zszcEguJBeMdH0{*2~h#GC_ek}|J=zI<OJA3KL*z2GWRV!DS%pOruC8kZTpZMg7p9v
zw!vGsrAxx=fGAJ|vW0nN2uZm-pPHE5y|4$I(?puuX42o1L<pKdA!q`j8-Ros*Af0p
z0jU1q=>nh$G=U-r2>cBZ-gdNnx|39a_KX0u0!^To>J0&KmvvZOt~X|ecI>?EaGINB
zy;e)o)mr1d7%R-Jt+kSsTGGSC>LyZQysy=p8_i^SBh9;vBHvuv#1+<C|369_R5Hpv
RS0n%c002ovPDHLkV1g*}R`37-

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/flowchart2.png b/public/assets/plugins/mxgraph/templates/images/flowchart2.png
new file mode 100644
index 0000000000000000000000000000000000000000..4c598e2eb5bf0d86d7ea915cce1e4ccdbc988a8d
GIT binary patch
literal 6606
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
M07*qoM6N<$f)1|sod5s;

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/gantt1.png b/public/assets/plugins/mxgraph/templates/images/gantt1.png
new file mode 100644
index 0000000000000000000000000000000000000000..1877287a38607d4a0f6b27805d4f9efbfb1cff3d
GIT binary patch
literal 15699
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
FV1l1P>dXKD

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/lean1.png b/public/assets/plugins/mxgraph/templates/images/lean1.png
new file mode 100644
index 0000000000000000000000000000000000000000..63a6ac3c7385d2c1e18a609c19d279a1c109ce31
GIT binary patch
literal 17148
zcmXwB2RN1Q`?nqYkd=9i?2sg69$T`q$qGrbl9kP|w+^AqWF;#rn|vjN>}(QB+1dQ>
ze%JLs*Hy0M@V?Lc-1q%ik7!+OH40KDQXCu{3JrB-efanZ{)8a#;BV5$wvXWhiJQ9V
z6C4~enty+Azs?4p;^3fgG?Wz$d|v(zc<9E`^VDr{V<TX`eaUhLMKX7jKU<7HHl@74
zAWcxi&{@z>IK5Ew%9UH#kI_54N7T2hjw0`t7?jc)3J6b&t7wcWZp*142uMP?g>7+>
zllQDQU&%TQW*h~|xIPeXGT9JTjCsEom`hZ1{p`at%eKHX?a)<U1Dxzt-)vru>e5>}
z(pxe*$dBK@bN5v<#S_hkpL8DKq7Zn0E)h^iE0Yr`J$Z8d^yJgY`5_*rLNb9%LtpaN
zA!T;$(t~qH1)kKgu`zzyn9{kgzxJz4HaMQHM-!3Kr3q=I<ms**v|XINyVvCR>{-aw
zqqFk@wL~^)&rj=~ov(EHJU1q*uA0}qz1Kv)w$aDd`59+$cgopFIK9g`ylZi~-u2+%
zfH$>Qi-#*&T|I?cBW2aMX;wJ3ccIEzf~@&>-=FgW{DkG;2V|R3pMsYqN&oD~1TA)A
zOoV=TO5ZJ^RYbD%ypnpt^GdtEzWzEnzW0|Ld7TkYH8nMftbp%aX1IJBxG&h3k2n#W
zIfKMu9nsOzJ~F~s%^OSuot>e>j#@mauoxrkXm#QAW!5MBq$kS@+X@0`CV?lB3%=*)
zXD7z*EFM05IMw)M6_yUIo~LW^!Ly{G;Qp`ia_>JgdSzqW8kVj8jV&z!({+zWMn>{<
z9d~~WB$D))B@eE9G&)OU8I^T=i)CoZuuV9M%M3nYDKZdv()iLqfbO%&u%oA~ZKq3p
z{rmR@3Gc`wpUG$-$;Q_`j}Nz(nI)XpHa5OXYI7!wlJEX$+Wa%qSW{R?_~-S=`tIuB
zU0$7RxcW#cc8LrvM4lGUlb@p{hGj;wCmS_HVIiwWp3(t7`ZNCgacKxcY8H(oI*4A`
zWY7u7NbJ~^>8lp%`$33v0Uz91PE`<uVI3bnNS|`{xUYVB)#p%SRQA-_x!<L}tI4VM
zc%dVVcAt34pu`~Xa4}LM>-W}TSEEHjKA%YiO|&v+vMw!Q5blD5A^PWXJ6@Hwtc=Wt
zN8@XK{yQTCit5}cd3kw9N51fe&6#H3CmtTvjg1+S?n@tQ2IXRrwx&j$$>Hd{?(S~5
z_QhL)ZSu6F`+xs(hVLB7sOa6le?M9|-yxxvGqsyO_l0e+Mdcbkx$0rn_JcQkngUpT
zS{3BSjg7axc3;;$8C7K1coCub#dcyPx_l;SuQD^?v#hMF4J+27pLUzaoCx3X{G@qf
zjj~Eu-kQ|FjgpRNG9H_eGoXo6=7bx+D}W`YVtbjBGq}17xB0y{l_zz*Jp?~BHPxeW
z##;2HT!2~8$nWX;L=>X5yqtnZg)<oy-tSN|<xC_;<qeN|z@ZE8JdEmXziwX;Gm61l
zbcoWQQR@mkeRc8t-$DFwy>?>heV8sA*yE=puCa&34K`gw!$`iEn4V=fiak9xRsm7H
zgk@`sMhjuM3=gRY8;?d7a^2!)92dP5LfhkK>J~`))q$*=Jv}|%8<WH1;}J+rp44;^
zD=$eFC?{7Jmxx;oB9`x`f1B64U~VO=hkv#cLvygJ5-v4Y?%Nl=J#7z8M)Y1u@3Zm1
zef@$WYWx}xLvxnF&RKX(7%7ePA3KSxJB9igS`o{VNdvWJkHwknO^x<A*;vP&6}j9f
z%-i+VZ-1e2Qw&ei;xVsVMgJGa8*jt7C??qZ;u@W1p}zmsWOZfY5B95%y}ZU(JOU1y
z=C2^|yhO{!zD-Xzd2d=8Opa`LJ#%&4{4?9M&6>i^Po24R#WH0@otuVwS7Z*GW_#{4
zz)wp`-DuEVFKFR=m>Y?NdnhpwNblna|L)N^?D$->aO=f@0~rAx=QedQZ-$mbjcLI!
zpB=Z`tHD)P${u}nb~jpuP?K!Id3B8`RBG>Y(+^j?ZTdI1kJs1M+6^$s(y}sq8`_$z
z|NgyH8^YEjX}l6ph>8g^S@lAFnZX|0Yqe%qQ+v(K&9CL4G<F`ypG=v%wiJ#z<vpbi
zgR)1ro+a5~3gxoZNxrySNWao98aeXM=GMTV^TwQFeX}hqCVuT-Vczp=>9wPg2&Icu
z(+YjTfM~Q9PQP6=g0>8<FUiQbT&YUC`B1%*xt%pH4?Tlb=U&=9vaMq5aTm+zw-#-f
zbtxL*|Hfh!us=3dX56>3L!9&6e$yZU{pqE3i-XwZ>{b34{St#*H-SJlCAl1iT9UrK
zvx9jxL~U*DqM_i%W5bi3u=bcFl&C;|Q6G+T?YgIQh8F3jadi;~hfT*|nNhh}t&^c#
zPS4xoh8~ul{ey$P6%XA`;TsW!=T}QU-23}QAC=FG%&wjiQbfWwE*M6rT;{kIEpelM
znl)P4x+F@j|L^bVD>Tu4D>RhEbGD3c^73%CF^P$!PAck1`Z)a(S{nMH3=3f@0z3pq
zt=TIr9<1gSKHE4|uE3Nf!mS{0GA+6U>rU6;o1dL}f+IP^9>!8;bq_vwR#RuMtc16_
z(Zb^uXTqF>MjdLRc~ae_Updu&*jYq{cP_edCKvz2_K<$oLTE9`g>`w8M0VBG)Z|J_
zFvYKXnsFw>ZgCVp9=)r>(P416Qc<XTP=%e5EwyijyvyJg(c8TbKHHocDNSC#@yZ#|
zYa3HFOz{qVX;%-wz;ZunoXM7b7G7GtGyoGL#0`bj#A+6z^Y}E9vAXgaDTl?>@v4_2
zu4N7AmxwdPGm#S|EH7<0n3WSr|2LC)vFx$Ohc6mQ8QJAhALbd7h}WIS5nkNbD3#jF
z{cY6xvq@U_CVsojmw^Gp6~f>QT|U|mp6mK@ImRUh2#%P1f4TYgb_Izn%o8~ky$<WG
zot3^~g^!0xiML+$tyI2&k^HdMEN^Qs*qo;Mmc0DtzMr9hp+pu1QJ7H~9c6IvtfRQg
zbY1z*lN0vK)@<AcO}Y6QMLyZ=tgKf9bL>qkCZ<P6xj*P2m8D-1jrn7)lO<A+lQ&qr
zlYRF0h1Q#26BS(H!d9&tUQJXil2AZ@=2~KrAN=-z&dki*)seNYH50LD2qySWm~~Gg
z3-)d9DxGF7*4YcIWMyR)6eQmzI^~?ktr20f=O;_f!tvTbpiP<^<6Tq8SflQMX`_h_
z_xq9YAkE3s#f6f##J)0Zliq48;?~oj&%14pzIeAPrMw<o&C1CMx;Q)7_dD}$-DM3=
zn*N=gl|_a@OTVK06W(PLVWW_8n<w?i-;y(#53Bh~+qito03RpEsKkIK+RoY<NBy(4
zsPkO2X_Oz~HMzR>YG-a54Q`t5AGhLFQ+w?c_@hEZCV%j!*{2^1kaq?DDLO3rd^6NQ
zV84TyePg=5qNIf6?~QV!tiF{x*LliF{_rHDvH^!09r-hHlT;*J#UB{cfo&IK##V*`
zSOIJ)_lL;OQVVgM$?E+MPsEuXJ38VVpZ}~B3{RSMX?wEzrSNuoxH%g-3KeB_aXbP2
z`Kk1)ZVxx%^pm!*Y@|ZmtCuf7COF?vl4Ozd-QgbGokT_$x>>JM&vpE_tj@i2ezM6+
zL!y_?Mx@XONTbT+?YH{Sj)l|HQ>EW?_sKTfF3#cU=(nYfjD>zQixw;Q=R)5rcWY!|
zSHXl==<<y^-LRyf%F=m0+>0g1<2hd3TdTs!r9m%bCy+Wn?24dpLkk@lNp+^Eb9aAU
z`xeZ{=w2{f+_wUl&#6{AwU>`J#$Qfn<o$pHbTIl@Ldv*eYiSee4Qwzv??pxi?u72J
z4tZC5blzdPfdHXHwY*Wgm`;@$N3yy}`FM&KcPL7LQz-Dt=;!wL5s{G$3=FK4YLYB2
zPENL_UVeVxoN9@}Isgc;-ts~uk|~#<GU$jI&6JeFx)zanVIhM91N_*}DL<d~+qUV4
zGVs)jjrZCkZm+3UbGG1mlcB^GG_;E@Sr~Tw@-7@28&}dJ4o<NX%g`*ud$evG6Z{$9
z%1Fv0p^`7gtfU<2jX_179Bj_FJTvA=g?a3@V8^IhZp1F>rch!aXT(nBM?)D&5<28m
zo2b*%>S<!ceJ`T2@=m1#QgdwxdwlE%J4l^dA>F3dtY+%177sv&wcE3IV+y4urBDCX
zx6QT&Gz~Zij<1|nshSFt`3RcFPzx!UP&LqburQEfa;Z->?8GihDx~{X(Nrv9@m^$>
zl$2Nq6H~_J_a4Lh%XRtQym=Ede}^aa)vH$v>3^~LmG)h%nwQ4e$w#RaO#U~ZhK%fL
zraYyu>KBl>(*<Ge#EusFs|7x-?%un1Z%o?QS0)?&lbq=!rd>bt33;E}+i%asw|!V<
zJo_E4Z-^A><h=7&yhM<!S@_vJ)rdts#m<zzPNHI>OqWlbi9#c#%B0^;EM!)<U^w^z
zrD$EG%^g2|oFAqA_=5fdT1Bw^v;?qb<wnlU{@dLQWlqY7#7Ta_(Z+&;0;uj~$u05H
ziV9*8%j{LaM-Lu6(9sz*e!SU*gI|HERQRNTuwggyFN%v6%^E;|is`UMcIOzBjsCY4
z)yDEe0brOiB4ibX=7U{_)lA{Oo)HJDb7$Q+wNx~C>U}?c;n*9Wae8`sn9qG9JU#B>
zcK|Gv8<Fwe8g>e-wpc`jzIgdE+|jUdE{uj7s|n!2`aU$Zit&lPUW{$wH34Ug{pf@h
zO6aX)_RE*gd+h*pU!1jF9E7o-;%K`yTD${7k(U?3!1&>Qm5KB#`lDO&rezrywx2lA
z>IK8E^-J6&-;O!akz%HtBP>u`m8u2QpG{u8x~M{Hu<K>7c8EMKsY*w^z2*JKM2H@d
z{%rM?Hw;l0+!>dH$;lU8i@|R$MH76?o_4O|jZMMX`awxfcN(+s2L59)9k;oy4?r98
z%kj|383LDb2Ol5brJi|GLI9}&&81LZM|Pj~d%XagPjtC%q5e}(PlW^|$ETGY0NSA_
z#t3L~v?`|M<Ghcul<@pQ8`XJIJFG>qngH{&v$H?*;}d<U-dJ1X(_--QQqf@=6s8Jn
z3+hQ=Mf)xILNC?Q);{)c6+n=2%EXQh3H1e@AFam6#}g>7?fbFt?<;HNM`bfckPwA!
z`@H1V2<upIlN@#0Ut4pOWT7ulvk*=na8RMa4z6C$8t`b8p^vStuji$S#$X7sn)WqQ
zZf426_6});jTV%88Tlsy*ch7^F?DG2D|GWfHuly>fLQ^RVxI9mUDa0B$<X4VB~{_1
zPFMzx`s~@Q1X2KBi*5~NWqnSyoFU)FS9k5jF2A&=Wr7*}<jE7bP=Nf5dMKn@(=1C5
zyuEBJ=4_Jf!c>5&8Kp!(qs334W^)ZEAXz6JB^0fU9uYr`QTUt$9m|(q!gcPYcG2Ys
zs0pOeg?fb1ji@#LoWaPhMIbVRtAK{h&6)omhg#heW*FQJ2ngu5j2G(r=_x%dhW|xe
zPVSGJWF-al*B#g%3MkQQ*Yb4v-Wmxi+vM{4$I`O7Y+(!p?wOc4Iy=8N5$djZK7PM<
z#Ur-6vs$Q9aY(Ow**$x;YjG>%`UCY8twMdGutlI=i5iyjIE&PY%MEUlER>OobYF*t
zP+Bo@q$KZVT<S%K39}_zlk91~4n$W%e?C7yud2GH{wtW_y?)8Z5`Vmq;GX4Sr&_=S
zHUIG@geboJ3j772@)rVrtmcZx(NxU?-)yTUudB%5Dd+zL`oH=?H(Ne9;UE>y8B|h@
z*W#%OIPqdp&eY-=%$AL1OElyYuiTQMV!x5vTRi3jJf{CI$M^3rj*k3WD=MgX%dWEB
zmdg>L7g@NL!fjk`c0*QHR$3aM|80a=G7W(ZJSElpfKv$Y4*txhY8C=}vaOPFCnx`E
z2Ov6H8BY)4)g+5V__WNmw#vn;UYC&INmkDvF4ixR@jnzzQhV6>d39H{;2Iz`vCA!%
z?D48krCEF29}H$g)4g>_5&CGZ;IjEOu8s-y_F|}AQO5A^c=WN|j^egPF}3(xH)%<I
zW!Rc#DSO8?J*b6bt#_5SuP+p@?H;+zx6Y1@73%VZ=QE<AW^Rc8dku;IJ~)A4b%QB>
z)}`lJRq<4z>hYCOEuJiRWn|>>X_gz6js4u-cE_MQM71705>y`N3Qy_%4iIwN{0c%a
zz0VXt#6ZO6`?@;L@Mg=+4^MxER}CksUNiA{harc%BM4JWI*n5;_+$_~aCb|j$Nlcz
zyFz_`_x7IK7~mZ8Y6*9LLz{F6V4ZAj^GiyALz1xn7sPRgrms3gVF5G>0>u~boTh~I
z^=aD<3rCFPa&Bg5QBY6}I~o+~cktv6JH9C@60vM<cr+nAL>QCu_4yBzT-t8aJ2s7B
z5v&{pc~OZx(u58YNCc3o7Y8OnZ${P?Ui~;YS>BdZ(G&IPSIk?5t4w*u5e}_gvoNOH
z7Etz;E2Sw59*v@xVw5@2zwn3-PtD5fDk@w(J)hgW08#~l3$+k|A^<gAypUt!N~Kl&
z5S&kkCK^=@4JO9Mynfq#gbB+)khF`s(9%)#i*7zZ!U6I3-{O>NdjCPOY>f2myN%&P
zaVAOf&Z4i5;#AMB;RZl=qNJo8pP1O3Z<}A<ektkR=_vm9;6RB9^X{Fn5WWp{B)3Ll
z&yznhQeho#-#;ar2>k{1#6c|M?Bw9!@82b%-?#VKx3cAf0zEuD0QC$E45SO+%Y5--
zvgU!#g9oen{<j6Npl6LQZ=VicoF+oe*1O#E_CBb6Gyz+r1%Mpv%thf6{SufyzS&e5
zv}J|2gTsG|Zg6cMX8+uHG`_dLe-AXc9|Kv5N_j-c`1VG89*SdpmtRS}<u4l3P;dR^
zg8pup!Y+*QcVp$z@UXGz*gPoG=Wm<0GB!@{TM0gq<@Taz@ot*E={h%4@5<gK3N^+a
zc*qfcU;O4xvTj=LNj3Ep*fgtyIrFgb`>Larm%Q6f?payoblc+A-aVqkpMy))qpf}V
z%LwX7Oe|%<q3xh$^Qw@L&^~>(OT|PivU>WrW+9EXzWiYal?)rzv8@;W3`K0WZIuZq
z9=tjJV)F8Be)~?LC>~y3rM#g>6)i-=l~#XT5ObO6F&bSd0?d6?u9&1lJev+OU{O0K
zXYdF|oN6sAfX1Nlege5x=5&XyK0ZF4oSdu_Ng1N}xSQdUm3k%&2>Ii+0!MKsQcOy(
zoeW#h3f9=D!ZMy+NhMoGX7GVn29?}l`||ea*w~T391xbtNyL%OLWbBp$(o0Q!;huz
z*p`--<>lq1mbH`l3ptGx*z&hqC`E*YgkDNNEzQg0KqBJe;&f^Ezdfqp2uJ;`d@-1Z
zZWg5FtTYjdjg8F-_<LC+Wl;XYALgTmX{+*1ie_Ps{|?FE?)B@}t^eS=_5d8U5WXoR
zL!RvK1|(JEe4G8Es(~Y{L-hLf-LJPrYU}DEx)xz$KvxUvNYXAc6d21>iiGu3Q;X!A
z|Ail_Ymf6z5=2Cxt^51?v$M0%)~6oiyvoXY^zdQFyKK(Ut*1prMIcBX@BgAklXo?5
zb&@5kzXplX)YWVzvZF)Mt(OyFdv?5^#CN-FEX`dgjG@A^<+%U);Fb)Kt$Ao!6Ti9^
zE4vo?mg$KD*jQKyzFGmRhb98e=+1~x-?6`3I8yuGb`+L2xER)~u+ZMqa}S1#P~Z62
z*yGs`wIwAFXFoi3sL6P<j!#V4KRC!P=g$~}d#cEAcZOwc)7;!V2y~oRx4hpqH8Fn`
ztQ2}wKm9QC{I_cmS<lN%*~9SQ#IzyWJ0rQ5Nh7<;j4QG;GodRCEsqrGguU|NkC)fA
zyM4Q_v$M16evg3wwrdd-K!S~6>?BDp6^!d7*0#dJ70`nKbJ|vI*>|libVC*S@AUE_
zIEqH3#Kh1e@6mYx%j|W#Vqp=X+hgz<)XmK6oYyxtoSmItKlHP+`?%t9B~@dQ|LIiK
zTNL2N46X60DH83wph}e+fqLRE=UQuaOIjMPK>ff#c=W}a^(6)*TF}Fc`f96>3>!Jo
zrRZ>Y-dO`CgoN07h2%QuR90407;a68D2*phPNaAtw4|89)fy9_{QkN=v{(ixQNrnD
z1i>FZd?2+VE?1LbOYgOVyI6GV@9!5SADNyum-~*jVZ@+8Wq+=DWlKs+HTN|FgGO*9
z^|BT667Ef{ctER|wHDo&Z8Bct_gw#arDCE9m^Lf`Lam<LCR$we_L-TINV2ss)Cmfi
z`!F+~4{B5_BfQSsnkHHOJ1CV14j7&If^VMsFJxwCf3Xw${rk6m$=+nu{V8Yq4dQ19
ze=r`mv7XEyw_v}Y!dBD87Bn?AwY3FJO)Pc~4-Z4NWN4|TfVe!<;9fAldEnOq>wH_~
z`_k@adpl0^<kzp&_I>ojp4Z4PAqd(jzSveFWci1<W;g{y%u={U6%6x}i$>N##)wy?
zMiYhMN^17<Qlo|X(A<|*^u+Ik)zvXNW@hL78%=Jn7bJ!0V-;K8sdImwnXzc>eJS!?
z@9&ZS)vH$(USW$=BSt$>@~H53YO!SX1`FXlqT0i5EgpRSFFx51OzT=(EgPD*-*3sV
zQ$~h$fS`7rksJ_(`5IexoJfj^s1P=Gf6-wUsiy&-jqDnBq!o{GsJZO_JvQfUa{%KQ
z%z^6}FsREaQx?KJvrve{9xkjVhCYheSu|%*M_c>nzF*!m@5gsKfS><8IfF6ElL|AO
z1^-l1v@#NH(wzJA5<1F$%373>GEyo5->)<937vLGWoka1*2w#w<!c#QS7t9MyBf{~
zg`$4^`0?KCs@LP<I?NJf7p8B;*0ipyj0|flO83`P+%;MK<L1EwvCHK~=Ela6>5o>{
zcZ^xsID3{Pg<;mBIVuTBC>R85U;kKL<#<oWY{~Y1gz%F?jgpem+1Z&Ob3Fbln4n-f
z3}oIA979<E3u>E(b>ZNO03k(ef4`QR-jV$iT9Hl{H+Y<#0|YU-la1@T{U+r`1;Zva
zOcATlT&a%rO@e|CPLFnhY0RI@9XLxc6QrjZ$Q#8X-gS&^58RwTod`NJjtYzzf35#;
z+tV->@!d1?&BY@7`J%}AlE{aqCihz=^2TD-r5;4|i9Kh5K@wSKYXymxzAJP|V{T@o
zi-Lk;`6-qDrtBOz6jxGvOG@|)^+`(pfKi}Ku0)ETp(P<JduQZ5Fu`%5^1PlB11Ap;
z8mAxVN<M)X9t`yK?f0H|dX73vh%g)6W&66m2X@Til43bdiNSFf`?;HwQw+C8F*D9w
zX!lXCAaV98$anv~WO#F?@luSY7&%vJZ+kRODShU^kHRl}R}|l$JgNoy`t0QI;}QdD
z2??TWP+j_<B+-&e>IYwakzf4x@83){1ENwcA)E*sX9@FwfHSax+Ha36y1B8e?)%l6
z{a#vH>Jw?xLVko1kjo=gcMpb@q5cF(MVo<uy;w$OX6B5`&DWy<m_WvVY5DW#PZaOM
z!U9SnIUl`dmC==sq?W;Pc>wz!!O=D!wEBhB?b@dm5BTEehlsq85Zpy`|BlOV(8{@O
zm{8Xc1?!1-_h?nXWP^fMG^O~I34$)P{w?yp-R54q&Oa3^xPG0Ypt|~>?N5kUwaVPQ
z3H>P8>2Aq$Egn$Lp8ef;=;8t+f_98azie#f60RYl7D<mrlsY}0YnI9x1c3>I#%1f*
zF98q-{*rdliigy@QPA{5JFHPipf0qRyJAI9^2Gh%cdST$ahBMetO~QA>h4zA2q!6%
zd8K{3P`}nJe&3R%r*YQB!lgilbAyQ>YQd-K!64hDWP62tdLM2Np3coUzN`U188+t-
z6MAZAFWrKQ`g#W4n>TMNSs?dtJrb2dybUIAUXIxIYXLn2tHo-yB_HPJ{`Be7h1Vp_
z0;#<U4}m+p1gOM*Us-0bY4(puNM-JU^ebUT^1#1S4`7((^8xTy=jKdCXyqt#f>+gO
z@nzkUG$1qtKaW&P5H!ElP_uHV@S83(xqPJKW$3)zhfHkv0XlLyu8$sFGQ|Ul*)U4s
zFF-lz!$a6F7U(z;S~3UIy2eJ+D1-%XDViIUM6s!sX9u9J75idn=oFFUT?z?C9Gt+n
z6X>v9p`FQGTwJ*>Du^pIB<+NSA)s2cZy9_1WMgq!1en!aU+)dLzNsn8ehR#@>})oh
z3>OX|Vd1&9Aa);Sjg)myKOY~)$uM+YaLgx^3OtWmGuGH{?Q9ueK({cHKd<Zntp|Qx
zVqhjltBmNd9$N8uJkvm3ET1(%Nkyd;{2ED3Yi%TeEiw4nMI|rexi$nEE?7WKA3i{P
z0uX6b))IK;_vFd0zVGw=;kCm<$<aunJ3r!?Z=!^7>Z!VW7df*AvL)SZ0cyh5BizJE
z?=v(uuHW#z&Xzde_~Ze=6MtNnxn`25(!pnTHKzW!G@a3xctJP~TxiEFH=3TCqm*#g
zEB|F{&G=)y-2Bn_Tj246*r#>j-d)u=eS);4>-)!di?sD<p8_!)*Kbrp=M6zsfrQty
zTvAcNtKs49?(X9w$(9IvbSobSvh^e`rnYDK==`8<P_!RI#;|a`XW1PLL;aF8>GmBN
zosm6IT-%qX$H&vuxg9gvn3$jt;pv>{l2cgu$Yjf(jmWDYz&}<k8VPyS28-aaLfYeg
z>C&Zc8jitTFm8S}&Nq1vu6u@#?i{V=jEKL|EX)l+IFVw|AS}?w0+epv`79`a1@9Fk
zK+;eW(H=7=<qR!wUaxBw0>7xPt-WD1X+iw|S%B2u@4H8W#_yC1^lVOs9mQ#)Vd6T9
z|J*&we)dNyYvAvCQ4W}0sl5aiq;;Ex$d%nASQN0{fz}s|T#i>wzt@FTh!>+*MCwv(
z!%uBH>=p?;-_4<-qy&wg`9wN2$#Z*2CG$;A(D_l$>33d0okPp}za|8+ntbb7nuYED
zM3ho8gOO;CD0k2|+m6R7&i`zlzw=MKt{^TdDthzgLAh(duZoM~io89+F40F5?=VP9
zN2_w9Fs(Pkj^N9hL@_fnQxJ8vU7WOC49uU#TL>3DJZ?FdJE;#ksrR1qT?HdWr1g+9
z?XR_Cy~`{UJNreiPT<Z+&iVV6mU{)mAX@^sDK-!&)bFhp;yw%$zoGj$!iF)j3%6G#
za68tj`RGU1<V5TD8NB@M?QN)v`Z>Q}n-}MszrCK_y?cp(7C52BN7aI11w&a7{V-)&
znVBFgj5(dH2A!`?SOwiH)DH<Z@%VWdnm&vbG(KOkI$tTTpL23@GNUd<-?&7N=7Y$<
z`}dwtpSGMI|Dumou`3{Kw1J%`e{nQ8@3S2Lc)AWA@sN4|h+n8O0ooW~-CuDe32~~J
z$RipX8;_2T+K$WGfR&2hNl(6tGhFw0TKL|Fz5ke9-<sC^XIlm4T?%((L<AB|tJ0AS
z#ucb?$iMtCfQv~noQ&ji;Dw4@?1;pxavc)8&bOZR$e&jkm7NVI26Bss;O4_4%aIE>
zj=wp#w!Z$*(Q)hKOe|vq7^TdhlA(hmJK0InC1iLJe3#bk|Cm97Sn<G0so>?ewzek9
zpC9f|Sh@c1RrC<1Tw+|D8w;^N?Kd^V;?JNG1JalafO*Sm^2d62?~ZhKqJ53ovsb6T
zeS2&4i`lh#(M=Kn?Tm}}o$tD%J`|+-s9Z=+BqUHqD~sK@F$P3z$JKoThDy&e_^Aj2
zyd(cP+p4(4M1UVJP?FEOG;XE$L3qVSCh+udo59itmw4w{i>11Pz5})^`6oygplS>C
zeSnQKB6aN=t~~`Ns&Wm6O(L7D-}g_{QP&j_Arw81;^;eJDcJ$mJ0P?G&L@ZiR11W!
z(vW1D;j;<kOk{nw7Uo)>*<ch-R>p|8#){s&k(QSJy8eFR7ojrTCYqJwF2mM+^;-k(
zGs6XH-oL*QVvmt%Ab$uBmhmcD&hQ~<-QT`_<EH8T_)%F$M~Bd$l4WZQpQQ)bi1C>D
zqTA&1w!xg7Rq@pKZ66R{4I6lPc$^eGFU|vOOpEO~at4hhNg57mEwprW0RMibE*x2h
z7ZVbC13_5FXX<Skc_}H=vEAE>zs+qxF*h-3|3RD2ryVBJz!p4&q>NnrZt^CHHCVTW
z;5RUH1=i{v2a4=fMPed4!7>#BY0Iedu&gWBY@w?ViMNk&eqQkaxnb%q2MX^U)p}E@
zN;uNY!h+T*v5#xXw>2Wa|4N=0m-x$#sF=RlEg6yi4t*&AeF`YuJSoI6H2QS?pywgr
zSTxcTBiB7YFufgxb@Cq;fOJf70KEXQ?zZvaR+!ek=y4~Ww-t+z`0#68F*kJW1{`+P
zB7Rk=>>cX7YDlh-8lTt_U2yMxw149?xnm-H|Aq{$&ucOI<7(N{wg@$%zE37A`|N@U
zd*rsEw0L?@tJaS+Ct`Cpz1rD#m)T4|DjV+JZPFmdOC0+8mTXYy&m9=@?u2!b;#^mX
zPHf($e)Av?A+1m8jid~FrbWSJ#;-hvZd7*+9})>V>XSdIk-v21A~+|3P4?U9s4^{%
zR*_E{NhnSQf!lv7h+%Pv0kj<rxY7qjYw_%sS)Kiilt0ZYKBt!P{kt)x%!&JZImXt6
z_^N^GE@n%%Z0y66Rc(V$E1}ceh^7DHnHQXd#As0Aa>r|2HiuWpNz2Nss_@i4Kd6}+
zA2)LAr{N5J5O~yQ)q4E1jPnw&Mcc`rCaCe#Ty%z!b0IQ-Iur#vaM<ymY~!Ll8UN4h
z14o0FBedie&|dC=h}A{98M*&3C*=S2bVX8;Q7g_bZ65}m0mMG+k>?Q<6fn=M%r%D?
z2SNSCgKS?_WeS-=s}?^xIW{!F(-7>yqT7)8z^;tXmEcuD6Z893liSNZzS;9_L2VYo
zk(xq~hjEs$YH-8-M!RAiq4!EIzz<s6WH8l3uYEt+*QCUo4><NAe^v8f5dDolk4zBl
z2!cw`#X(Rai<JJ$fw<*{`#lLQphQf@bh=w`CJ(K9(yD|=UH+>2eb@Jp+@=1Rn_DID
zM`-6S=9xJ>S3YAsrC;^hX$rqSn0vNqK7UMq&Y()r_vW>qEK_{o>2?og<b9whlZ%(e
z+b1U{x3(&QmIZJzc0b!}@rH^wiAUDr3UiCz@0Q~t?_!Y;Y_6)R0zkMkThLj0vNxh*
za}D@$Jq^!2Y1W%Q-wE+T(k=bgfw0uO&Rf<v#1~6#^>QPiKA{X#x!2t!K^&j>HRdSp
z(dh5sK*TXRG*sy{CJ>4OME5_Bok7^5;n{(UIMcxDE+|*u-aowL9}JCia>WDuirC2}
zSjcaH?RKEOK;@OX4fOYavJ-2ul$VfD)q6hRFb(gh%zzHJz0?iDqgx&UTb=LjkB*Lx
zwzKIrS+5Nf5MbOXc>qp78K~YE9i{DYhe{*W0RS*HWeT6R#0Q@v48t6)ENt1#NKUl6
zy4s;V0jo1LwZ3~~3AWnpbm3VDO#!&dFTtO~Y2Zx$)Zb73oi(~=8PJCQSFUgn%x1rS
z#p@G+JJ;5Ru>-T>g>TVFW6;Gp#DV^)HUMfqfBK{z6x4>GZXf~KKd}e@p$afIFn7W1
z_K``V%vhF;uz}Bj&hrn>X1sj)5+YH%ySp#~Q+xOJ_P}~5G57%A6Q1tiZ?BsY62eV{
z={!QAC?X=F@d~Sp`HQo8Fvj;Fv!JF%{Keor@+Lp&X~>@6KMiy{plF1IA?X<+OtnC-
z!~k>!Fw0w7WYhb$Whx8=A|oRq%C!A=+7(o%!=Gbi<>lqw%rYn-D0lAMQP2WJS6^=|
zfCXHnu0f?}hTsTA@x^#Zzglo;tgLL`ZMG2pCsG1>RbvkT0`~N1XJs`f$nrZ~Sj80@
z4G_U3j}*eArkv}hoOQz{oh6ooH8JR6ShmZ_9LzwL$ce(3Z@T!O{H|}?j&~)er1X0F
zH2U!J$Nr8Rw0VYQW5{?ge?T`v-A~po!e4?V0)lp`4y6>%P(1b%;M`jf<ZeR80b~nz
zbL-YEmH8-cjZfu-yLGVZit8Q4GGH#{5A#WKmW?@0@&Slf(SsRC-UZKHJvmde5R_7A
zO}nrNo3P^?9g9<Facw*CQrOwp>deZui>~Jk-eO4re+PcrLI9}`NHpxs%w4z6*k4}Z
zBi)?oyicu>(qRpD;G(WTFx(EHkT>P!SF;8{;sb}!qRHzqXtSMIaOchf<%j4iw{`gl
zwy%Rg<IJ^TWQ|VfwgpQCvWr_%i_=<n?)=+$@Gp=q*MI-sKRN4mmIRRm&9Nrx|I9Hd
zzgU+~Sr62&&_hEXA*?1$67cQY&k3X6S+%hx_DoMto2EULWC1g;$^U2vG|{b5Y69xm
zZU+a4tu%sOZB(c!-{R3(U=r$K=D1VsEw2qEPsG!vSr9fLl@!WHm1Zvja4O!_UrCZP
z3WxBzR9xt?Bot8E!%zDN7HSUAnJz~Ff`%9c-7%>}v(K=d81A+A_4R6;$$%K|WJzG>
zk=@~hT`w{-{niW9Aq$8?R+^PB*m_-@pQWYIYn2ixf|P#0nvey)t(UMmCB6(hn{L^d
zD9!>dOAjF)?k8r1+&YNLptSTPviI;u;!bpS;(0w*!br;_v4r!W7ASZU(O>7lWw#VS
z#Wo)<#nME7Tyz7o5Hu!sXksAr)Je1^6&^wrG|<!`snvaGq6xw|4sXzsLVm}lHr7te
z7cPgv%AfiTrG7oQmv?k@l(0fRG(WFfPpJFr20Q1l^mIt$YJ{Pp9K}hS2`nRbKLRhy
z_Wg00(V8>a(bY94BV*e~rd@k$n-hr;CCBH20LP>|OEs%f<+YdZz)R$&f#}u?|8Kwc
zzlxth7^)*mVNTL-uXto#C}(h+ESyl>2R5BLx5v*>{wR4!EP-vy6rT_mhae%#KiblL
z;NSp?whY_m`ugR|mtoDp{YgqBOWkO14>l_Y?)lFl1{aQC9XKgX0s<@vP#uOH_W(no
zi_}tkfpBunX!rn>dS6=`(i-+={l^ann}wBIo6R*14Qn2a0G`1IduQ1q4YeaKPMg>R
znm8{n?;W1Ik}T)Y{&RpGZ8;HdBgB+#0oZ{B2-17#(52Y!_5m6;;FO?r0xWWIae?@j
z=u-$x0XJ&bwD}1w^V25;lHT7K#ymJ7afl^NVBi36QQh%_tG|B!>^xHU$-YRuIHXGN
zyCEgzyS1PQf)Ko9WdrtqjzJE2CrPycWDzKzlT`VmON*nwC##gAfI$on4tjfgivVhC
za5gv38X9Ef`d06ngU)LJKq1Z~3n?C-MyQ!WeT|X5!^6V_)?1%ndkQ7bc#XWd12qcL
z-GUayM@uWK#Khwlr0%B>`dRnPL`8vjs6-!BsNV>E%_5u9Xl`%M6Ou3>V)QIazXBI3
zfTag?J8P1y5Gpnq1m9LRM0!7Nc0N1>_=41+At$P^Xw0AZg&)!m0>M9OsqoQ#=AVvh
zZe_LUDZLmD;*OyJT?6eC7H_!W1*aFfsC97*CH*8jv4{239E*^t-SKOI5%w?cWc*1j
z07&K56W50ifs0##9s+Ag&%p376OwlA<*<suQwt?w_fc|uGhjx6m?tj&(Y9)MSTBl!
zlmIW1k~NgNO6b|y@lz0)^?)`!eEj$~2=`7-p<*oBMXC0tY4#K4=EP0%+0rc9<nxc5
zorP$kC0P>e#H1u7fOdiwI`Jz2WS#A$Hu%YdyH2%!E-vq&zBFGbI9}q30NY~0)gYzx
zV>o7l*ja%sQ4J`dptrjRfu#RZkh|D@)WDJhNvI@jMc9?#=Z4(tIs>2%v`)ET%!!pU
zGO8nnauK>ow^WK{;L(b$GSo7Fh=~a`PHK}_Btl+V8fZGCGhYf~WD0zg!8jY2?tjH+
zk1zAaK!9V9k0x3nS5{89Y1SnwDY@4Uh<A6Cn>DE4Fo=8PWiL*5ySeiDAQj^}RtlL*
zDl@RZ^-DYh1Le~D6h9IuBEc%p7m3FYzzu)!mP;*xmJ5vlxvSi~{>$pF;+qF1Xh<v(
zXH)d#YKqxEf2S3K{Q2wOtLvtUCQM>Tmh`X(35{;#g_h#UM=%pa(^U_k>qXc1!1Syk
zPn!!r3&9s9Aj|Dk!#r{{H92Hb9)@T>qTA%~yMD=gFz+SHh6<Rt@*ny+I7ILre(b#7
z$%U{&EJnt{q_8PQ*NUQx0rLSWd*q^G%Bb*ynTaX%FD8EZk+$v;@$3J9c`jjxfE<dM
zZa3p{X1*aNBHH4|brtcc!#rY4-~#d{8All8ovfWpbGs`=)p3}_6fr~>+g%M2gA{HK
zWo5pfwl+u(Zpiua@Ul?qXlc>jH003{CcpJc`<V<IVvZ*Jrpoe1Wt_{4?zsed!C$_7
z5sN~CX9nI4dcm2ZpM5@LKa9!+ylO8?y`axptZX+Ne}o?q=kX)uMN1T=NnRKlAo4%{
z7W$<WN4>}vO3!xbl8E{o0aX}7+uBECCE?{OB)7#)yTu^xfWN*2O<Q+{{^ue%@!T}g
zx_sQp>ZnVib`gudfsT&qMI&%1;$P5qk%T(B(wda$5z$Li>$&JqSumjaP_e#pJ??E6
zXPdFch8fhj<*=FWHF=TbfDD<mo@-})UxrOS;MlVkZa}rb9o#nra7p4KQ4{>6Z&ECj
z_{`(K_T6Lv^ZX++DBCIlNNQ?xr-3jifYp2{c)P?P<{JwuE2ba-6O|Tvh2+sxx^H&m
zrkRx$$p3ko?*~`Iq?Nff(0EjtZ#deC#G7+zeSg<ZY)zQa>&fLrYPv(L9R{_tM9(s4
zEZYz%53_?vZ~m~OaQbwmO;@R58Dqp{CZ_y{-yCW}=nWclu((4yOT)lt!AjOFgx>YP
zgyuZB=HNN&R&0Z<2}2VS%i^krV)>rZcl1V=mY@mMnh1&C`6m)W#0YNH$w?FDCeKHh
z(2(>8d<o?NB?j8p&$0?54B`zXNeapFSzyf+OSCe;BA5+z?#rr+<Z<!w|MZ<A5J`6B
zFLpmu(<%KvH&NzDmKT15L3U2xao0A9$@lZ~^ZGMG^0v?;5l5XZ9Qh6I1^h0Xq%4WY
zp%z=<_UERAeB-870qGoMHi6|*Re}v&A8-_9U(|$Z>KqD=V#;u-RrFBRaB2mZK`kSL
zD3wfPE}1eyQEIQQuFeVn>DH(XPO4OUYru)}MofM&1OngcmxN@WSClZ#Es|+q<PR6{
zh5AF87#{H{Fty{sIT`UgzxI#o>Ld)R%1BT#ss%|BtaM916lfwn)H~Is5BW2+;5!GN
zOwa#UVGxSoARu%Lr=jC7E+vNJ4tKd}pi>?FxY<UMQ?x@3X{e!(q*YxCNeXZN`-0f^
znSrx5A;}`<D5dbIH|yXSzm2AgW=CHq5kPDLq8OAtc)7LsEtkF%&mWo+92xnqfg|s^
zQ5l$H*7O8CaSu3Xq5<{t(2&Hd-j!-X<6WlbzN1UJ5KdU>tN2ufTm2hR(I+M(i4JB<
z`jdj>J$gBlkbIUyd&8#_7%ns+o%{w)r6ew)9DYYvG0%L3t#Sk5P~hVB(g?m8Nlz{D
zH&RU8=<;@4LIPx@i^YLN!w9gf=y}H3|E)WgVWPrnbK6Jr=Z6?QR5)nSy0{Rngb@u=
z)c=llI5|6m*xL|C{m*jy$1%RuK7uG;Bwj2Qwd6Yon^TJd`OkjO?Y4D?R9R#J(6MB7
z1S=iK#Mk!r_Uef1!%@IvbgN;8LqaV06CAjyukWJi{+QXf^5vz}69C@OWPj}XCX47^
zR`zSLEPfsJ?+MvLsKZgbuC~^lCGwuc*7biGBVc`lyI7PNsS~ddwYY>t=qcqF=63CH
zS)yIuJ0rkG&$qg$PL7WiY>Sog;2_1}%Z=S5RW&upj`7g~29?VJnMkAXD*&MW3t%Ub
zEUiy}jRSGn`;p~}4t;G;ZKFbx_T-*$I^=AWIYG;Z-hWTr*#-VVtAgoT1U(i;`kx~C
zGk&3L`&H6MbMF6KPysC7GnO^ihnfFr6Tkrs&Sc1-0SrEv54y-XU(XT9ksfN^C0zD~
zI8?tTfufd{R(m6x`A-y`sQ{Mg@@3zHS?{2~H93YUHnrTN+9oVLA!V$mWOR9z)s&kv
zxeSVkDj_)D0<iwEgt@nOJvy(r5=0LYjFI}UyFYw~{sdFvWd#a$5U$5>wQ<t9UsL!y
z>?7j>7Fbr6jnvgx!T`P91SD{_$%$g_;KuY-UkK+cw1<%PGSEGo>wC>l%gKpAmyOAt
z?Ttug*k5V*Sp3L`*iA%OIPiGA=sUypl=}}<h9pR80u?*&FIwK^fbjxMOJ$WIdCsDE
zjDT<*e7OEy|EfAaeq}_SwW!a*pL@ePGYogLt*^!MH3+wYPH)Ho=fIGNe<!%Kro56>
z1)%>eZ-bCP!ZA8OZzYxQCh32E>igDL&1z4AzKRn$2bq_$iq;rpXV2KTT(8BJygWrm
zSG;vG`dD`s2&jOw)Z^ZH+9ZAlB6JkfuLT*<QVCuEIUBf%;U2LTVLEEb5TQ7O^sNiQ
zR!5=u_;PRbgnllO5()J!wZLIFj{H(p7<RwCZqes$HTfvwscKOGByjvvVetY;Cb-v6
z)J}!f*E$QtWs)=t7rG2j;$s#=mPn-(nVj0@<*!|%CdIVh+J>_M4mG|2PaBdlx8m;F
zBvx$+zqfQ}VTkPpj0T$wQj2#+76wAutxf*|E>^}BQ2w~vJnO>nc~p1r+w!(!ty$Bo
z9OM;^$}nDe5G00Hj+<7h3f@F+8l?hg4MbrO>B-ae^!5g$0S3_GA~fzp|JKqslnS80
zd+%!T{EG!Rwz$lG01Q<n)C4U%uZQ%|B&fFtz1V{<kC!z5RC+d<OU)#WP?2;qqIRE-
zk>txX37r~8ceQ0jP8Q_sJs?%C-#|lvi=A>(2!Bd%V%G{94NR+)t4Uh){j7}1j$~y>
z$%MYuT@#<d6%Po-@(^o=p#Nw!^OPC3+b;OZVKr?QS&@06A~J3~ZZSPkPRx4OU_XN;
zLq?(Zys}-xolRMna4Z;+#&2n;TCiPGl->EVx`CE@TzotNaq$S^+(v?`1WyIGOsrpx
zMj(`Rn!kdyHS|Pv%_}mU)9YgZQW?TNpH47Z+qnNGP<XA&tTZ(-%}=-3L0hL<CjYw9
z6?6ECJyM5|;^(bdLI&o=^f3(hss<j9_#|E!K)kW#`zXnZz#@Kwvu*9&2ldk`yLZo-
zA*ki7e@MDWqJH0?E6^${YU>j+fG*doQ($@1f@VvvjL2fltNKUcy)Ng`;IeNeWta6R
zx=Qj~uN1EG2Hy{$(BT|?hXS6SG*h=z4_Dl6TjGBb%p2B$`o2)XlB`+~@^jaaBNX|)
z)Tb1khfE`=Ktf11m?@ObcG1_eY|O~=HwzaSTjF<&yF>oWw<X?wDNIJ72wu&*cke*=
z)SGu=m;+xQ&g88a1$<Jxr=&vBHt$+LjdAGNX|LWmJ@uzh=?sv|sXRZbZr?oxbPoa9
z+Gml2tB*j=7&;F_0&4?Y{+$BM(Y(<2G|HgC`9O7VM<GHkQ3u8$m2n{T30V{@w-B5c
z#Ge<yO;|=DTFh|R*Gf<I1qK!G#T9#ysv^dcIGO3*yc0;EBPV*KK)_Y{GE^#|3~)94
z98x$1DAIbNkm;Sr{<T`u#`&qQg7Our@0`lDCFwZHTk|_nhiGU0$5G+)O{Z)J!FMC6
z>4<sgxI$ktHQa`*odF+ho-UjQRl=5;2#rrqlkxMmzccipG3tLzL|S`|d}MM`QdX8C
zK^OXPxqqVpg1oE$%NG#dV3neyNkp|P?lsl<Ym_qu+fRWOm)Z-l;CCbIkf`UjFRl!C
z!Qce60(%;8fCLZH7G@#QBCp^L7Dv)0Bv&%R?lMG=^K=oKxg_o+A~3W%tb-ZN{vGq`
z{33%MdvxvXq%kq`RiDVxv7Z1@?Z?|A+NwXZg`(aXJ%TdPFNTn4;pdyAxc!5=l)`L@
zVU72vhTeV4ZEek7mW0z++C><L2rOac90+<96VTA%B&ubFh}Cj9cQ0J+R_LHZ&Ctyk
z;XCu5-3UmVEs0ZbcKF(tXgZqEl|&oUgT@rB{yg!aJ?=5NO^<pK0crV~TNIl6>Z!Sq
z%2iD4n{}|EQ+pvKg%^So?hWMWV1FOG%0OFc86R<AjWc{!_@R$%fdtJhUL%AlMhn>^
z^YRsC<EZJV)WXTw{u6`Y3IVmGjgs10I{C!2wW{lZ*K~`Iv5K_*0m?gfkGyifc=;~6
z^DA%JVxn@Ze~@yTm9mDSln0FyiW^J}GrUl3GhvCvr)~?rz`JLnZu49q&p~p#?J@)U
zt7K^jdV#Ew8Rg&9S>OJkK!BPVIF_NMM4Y{8{q)s1%L*21gdrX0k}n(5@UR&Pw`;gw
z<&-Ub9-B<u$H~OXS}ux*S@lif4v=H-e-Ra44B>uKOsPJ50oqR4Fa>a)8)J!=mmOg-
zlDe<@23M$73>{~vs}a6UhdK5Vy>iW%%v0<EGUkK1P?~1t7Dl;mLE(xY24IY{#6&I<
z#?e?S95QoKGAQ?gvzw#A2(f;nLiXrx+Z!nGuF><gn!z?NGK=2rT<00wh1f`EoIzh`
z*CHbun{cZRN4Ns7k$x&iXG{f*q0INB9N^N&Mu{BCqS0BT)HYYG9!Ckx&-iAGWQUVd
zFX}I1acKMB`6^?d2wBUcef|0KKMq2k;R@Yr69H~gw#RT(v0_50GOOEGqi7^QpJoMn
z|BB)vsp|WN283k-oN#ogacAMJW)~@oDnkyhtreS<r}f$a#LA_ho=SYA5KeG6l0Z{E
zD%!-vq;mSVP+!bOkKhf?`f1pQ5O@TQjAIn^VA8SD8(f@Z8r{f$@NChIac?8AZQh|~
zWfwp~@QuyedY0=dm!g%$neIrkKuQe02qq8&glfN)ey`NT`C5nW51sx!?kEmg-Hpk_
zbi#O5{E*C~5;(e|Fy2O|M$pW%fpn=iFB_APkQld?x1?u`=w01~=+&?N&L|+!WwSPY
z_=?Ef%MPZXXMC7-IaCFn(0N#vqRaV64DARhVQ!7k<7=<9W5xcI8x&Ea!L3r*fuQ3T
zhnghEBO6p_NG9ytb}k!UGk4|58?9|^7kLSYo}>0C)UR1m&QP!8<72n5U*mfbR2w)r
zcxnHBFF-jQ@-PX~V;g3tea*R&B}z`WDnN}k{EA)cE<`T&Pf{fmGA1Jxo>YZKr5&&5
zB}6g!yscP>Iuude=LnI+kox{z#MMsPYh&bFGuqY`I<0>p;m(s*iu2&D6{(&^v!PT!
zP7<bC%|6>yQF$fDlv=s_u5p~V3ex5Zy-WEaJ_$2qbPMTTLqr>$=X4JrC2LjtDq@3S
zOyIs_=6`Qs_x#&{d`$61f=?l^RVq_>i1tV*twe>Ra?~j98e^Y8)&*n?1{PC#LX8wM
zGO{aOY$R#+Wn<0wpo*8WoFUPHZEX>iH&{*$q!hHVPSlEpMWuGM>T4!fIWx43$|czm
z1Wr+(-wM1Wb9DFjXZc)bh^8S>RA7B>tF~1U#@`wdi5G;N!+d5GqKgqe%;(08u_=V_
z@E9FXhn`-2@mXb1CO7D7^{ps`tKrp&@xmT@Jqo$1E8SD_{<kfD7YOtjKgRL1+qi0}
zblhdnk=h$v2AJwGoRBtvs0?f&h*M-}r42Y-j=;?UQPC_c>Ey<9Vp0xpXdvw*$|%lA
zu3hxR%ZuJaPgq#k%iEh6FT_raKeZRa(Vz`Hx|_O#aeNJjZrtK$fn{!NY|PBCyzn3i
zg~J0N+~nSY$c<$MLmK>|fsM`03M9Xkx{Es~;yyCkDFDyIzg`2O6)po<(VDoJ7+z5t
zs8|Mc&;Q;qz@tU0myLm4QY@%}B;Y<Lb_Wgw2ND!WpIeI_1`9Hav3kO>pB0EFPr!i?
ztR~<^o>Vv#0a%UH96Vxmqf3cBWijEnOQMYA@Vf+pJ9QR#f4fOS236v>;x+Yz<y>W)
p(!jn$rq5jyohK7px(gTh1~&L*-OlvS;n!K<XsBo_ze8Jx{vRL1-i-hN

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/mindmap1.png b/public/assets/plugins/mxgraph/templates/images/mindmap1.png
new file mode 100644
index 0000000000000000000000000000000000000000..74646e2457698ff342de6735c253a99af51b90ed
GIT binary patch
literal 30976
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/orgchart1.png b/public/assets/plugins/mxgraph/templates/images/orgchart1.png
new file mode 100644
index 0000000000000000000000000000000000000000..40f8416e27c49a5912355d9d39272cd1229d1d4e
GIT binary patch
literal 17824
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
Y2XJs9OG*7^vH$=807*qoM6N<$f}x!f=l}o!

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/orgchart2.png b/public/assets/plugins/mxgraph/templates/images/orgchart2.png
new file mode 100644
index 0000000000000000000000000000000000000000..bd28c40b1afca24683d23629f1c9a52d816429c5
GIT binary patch
literal 14114
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/package1.png b/public/assets/plugins/mxgraph/templates/images/package1.png
new file mode 100644
index 0000000000000000000000000000000000000000..1c446df681c3804e691c7d413ea7514eaf9294c8
GIT binary patch
literal 12484
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
O0000<MNUMnLSTa2!bd~^

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/pid1.png b/public/assets/plugins/mxgraph/templates/images/pid1.png
new file mode 100644
index 0000000000000000000000000000000000000000..9abd6d3935543b7683ca8d12159b157830cfa776
GIT binary patch
literal 12276
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/plcladder1.png b/public/assets/plugins/mxgraph/templates/images/plcladder1.png
new file mode 100644
index 0000000000000000000000000000000000000000..cc6960bae71f50b381c3ce9cc0b15370e9b609cc
GIT binary patch
literal 3315
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/seqdiag1.png b/public/assets/plugins/mxgraph/templates/images/seqdiag1.png
new file mode 100644
index 0000000000000000000000000000000000000000..2463c26a27cb72bd2a903836bc5702fbdce9cdd5
GIT binary patch
literal 10392
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
Cb7>d=

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/sitemap1.png b/public/assets/plugins/mxgraph/templates/images/sitemap1.png
new file mode 100644
index 0000000000000000000000000000000000000000..94d9d8503e8b3d753611eb3efcab1154027abd4a
GIT binary patch
literal 18466
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
Q9{>OV07*qoM6N<$f}1!wB>(^b

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/socnet1.png b/public/assets/plugins/mxgraph/templates/images/socnet1.png
new file mode 100644
index 0000000000000000000000000000000000000000..29805f947d9b48ec861f60248adaf96e6e1a5bb8
GIT binary patch
literal 19817
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
U(QF!9?EnA(07*qoM6N<$f|yCaj{pDw

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/stardelta.png b/public/assets/plugins/mxgraph/templates/images/stardelta.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b7b42b8a72e377f90abeef9b0c1226783ff6dd1
GIT binary patch
literal 7197
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
B)Z737

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/statemachine1.png b/public/assets/plugins/mxgraph/templates/images/statemachine1.png
new file mode 100644
index 0000000000000000000000000000000000000000..0478176be82094402a8c8de118043713f796bee5
GIT binary patch
literal 15022
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
Eg6KA4eE<Le

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/uml1.png b/public/assets/plugins/mxgraph/templates/images/uml1.png
new file mode 100644
index 0000000000000000000000000000000000000000..ffe977f2df9f5a48ef8cb0b20efc55fa866fcbf4
GIT binary patch
literal 6388
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
JpJXip{|C;)!fOBk

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/usecase1.png b/public/assets/plugins/mxgraph/templates/images/usecase1.png
new file mode 100644
index 0000000000000000000000000000000000000000..1bbc1858b215a8a067fbabf58a1cbb960cb21159
GIT binary patch
literal 25313
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
Eg5A&l8vp<R

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/venn1.png b/public/assets/plugins/mxgraph/templates/images/venn1.png
new file mode 100644
index 0000000000000000000000000000000000000000..c1c2df6a5c763ecdf4a9b964cb5bb8cb3760285c
GIT binary patch
literal 9761
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/images/wf1.png b/public/assets/plugins/mxgraph/templates/images/wf1.png
new file mode 100644
index 0000000000000000000000000000000000000000..2e4e2efceb68a22bf5f17b7d33c996fc79870a23
GIT binary patch
literal 7413
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

literal 0
HcmV?d00001

diff --git a/public/assets/plugins/mxgraph/templates/xml/aws1.xml b/public/assets/plugins/mxgraph/templates/xml/aws1.xml
new file mode 100644
index 0000000..9e03520
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/aws1.xml
@@ -0,0 +1 @@
+<mxGraphModel grid="1" guides="1" tooltips="1" connect="1" fold="1" page="0" background="#FFFFFF" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="11" value="" style="rounded=1;fillColor=none;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="77" y="290" width="1333" height="570" as="geometry"/></mxCell><mxCell id="46" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=0.5;exitY=1;exitPerimeter=0;strokeColor=#CCCCCC;dashed=1;strokeWidth=3;endArrow=none" edge="1" parent="1" source="6" target="21"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1281" y="750"/><mxPoint x="1086" y="750"/></Array></mxGeometry></mxCell><mxCell id="47" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=0.5;exitY=1;exitPerimeter=0;strokeColor=#CCCCCC;dashed=1;strokeWidth=3;endArrow=none" edge="1" parent="1" source="6" target="20"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1281" y="750"/><mxPoint x="801" y="750"/></Array></mxGeometry></mxCell><mxCell id="48" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=0.5;exitY=1;exitPerimeter=0;strokeColor=#CCCCCC;dashed=1;strokeWidth=3;endArrow=none" edge="1" parent="1" source="6" target="18"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1281" y="750"/><mxPoint x="521" y="750"/></Array></mxGeometry></mxCell><mxCell id="49" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=0.5;exitY=1;exitPerimeter=0;strokeColor=#CCCCCC;dashed=1;strokeWidth=3;endArrow=none" edge="1" parent="1" source="6" target="17"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1281" y="750"/><mxPoint x="239" y="750"/></Array></mxGeometry></mxCell><mxCell id="18" value="Access Zone #2" style="rounded=1;fillColor=none;strokeWidth=3;strokeColor=#F7981F;dashed=1;fontColor=#F7981F;verticalLabelPosition=bottom;verticalAlign=top;fontStyle=1;fontSize=18" vertex="1" parent="1"><mxGeometry x="390" y="510" width="262" height="170" as="geometry"/></mxCell><mxCell id="2" value="Client Terminal #1" style="shape=mxgraph.aws.non_service_specific.client;fillColor=#C5C7C9;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="380" y="19" width="56" height="53" as="geometry"/></mxCell><mxCell id="3" value="User #1" style="shape=mxgraph.aws.non_service_specific.user;fillColor=#C5C7C9;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="250" y="15" width="45" height="61" as="geometry"/></mxCell><mxCell id="4" value="AWS Administrator" style="shape=mxgraph.aws.non_service_specific.user;fillColor=#C5C7C9;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="1159" y="93" width="80" height="100" as="geometry"/></mxCell><mxCell id="5" value="" style="shape=mxgraph.aws.misc.aws_cloud;fillColor=#F7981F;strokeColor=none" vertex="1" parent="1"><mxGeometry x="140" y="240" width="100" height="70" as="geometry"/></mxCell><mxCell id="6" value="AWS Server" style="shape=mxgraph.aws.non_service_specific.client;fillColor=#F7981F;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="1230" y="342" width="102.5" height="90" as="geometry"/></mxCell><mxCell id="8" value="" style="shape=mxgraph.aws.compute.ec2_instances;fillColor=#FF9800;strokeColor=none" vertex="1" parent="1"><mxGeometry x="290" y="530.5" width="58" height="59" as="geometry"/></mxCell><mxCell id="9" value="Load Dependent Scaling" style="shape=mxgraph.aws.compute.elastic_mapreduce_auto_scaling;fillColor=#FF9800;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="345" y="770" width="63" height="62" as="geometry"/></mxCell><mxCell id="10" value="Access Control" style="shape=mxgraph.aws.networking.route_53;fillColor=#262261;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="1319.75" y="680" width="60" height="56" as="geometry"/></mxCell><mxCell id="12" value="User #2" style="shape=mxgraph.aws.non_service_specific.user;fillColor=#C5C7C9;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="250" y="99" width="45" height="61" as="geometry"/></mxCell><mxCell id="13" value="User #3" style="shape=mxgraph.aws.non_service_specific.user;fillColor=#C5C7C9;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="250" y="189" width="45" height="61" as="geometry"/></mxCell><mxCell id="14" value="Client Terminal #2" style="shape=mxgraph.aws.non_service_specific.client;fillColor=#C5C7C9;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="380" y="103" width="56" height="53" as="geometry"/></mxCell><mxCell id="15" value="Client Terminal #3" style="shape=mxgraph.aws.non_service_specific.client;fillColor=#C5C7C9;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="380" y="193" width="56" height="53" as="geometry"/></mxCell><mxCell id="16" value="Elastic Load Balancer" style="shape=mxgraph.aws.networking.elastic_load_balancer;fillColor=#262261;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="633" y="330" width="57" height="57" as="geometry"/></mxCell><mxCell id="17" value="Access Zone #1" style="rounded=1;fillColor=none;strokeWidth=3;strokeColor=#F7981F;dashed=1;fontColor=#F7981F;verticalLabelPosition=bottom;verticalAlign=top;fontStyle=1;fontSize=18" vertex="1" parent="1"><mxGeometry x="108" y="510" width="262" height="170" as="geometry"/></mxCell><mxCell id="20" value="Access Zone #3" style="rounded=1;fillColor=none;strokeWidth=3;strokeColor=#F7981F;dashed=1;fontColor=#F7981F;verticalLabelPosition=bottom;verticalAlign=top;fontStyle=1;fontSize=18" vertex="1" parent="1"><mxGeometry x="670" y="510" width="262" height="170" as="geometry"/></mxCell><mxCell id="21" value="Access Zone #4" style="rounded=1;fillColor=none;strokeWidth=3;strokeColor=#F7981F;dashed=1;fontColor=#F7981F;verticalLabelPosition=bottom;verticalAlign=top;fontStyle=1;fontSize=18" vertex="1" parent="1"><mxGeometry x="954.5" y="510" width="262" height="170" as="geometry"/></mxCell><mxCell id="24" value="Security" style="shape=mxgraph.aws.misc.virtual_private_cloud;fillColor=#F7981F;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="1321.25" y="593.25" width="60" height="34.5" as="geometry"/></mxCell><mxCell id="25" value="" style="shape=mxgraph.aws.on_demand_workforce.mechanical_turk_requester;fillColor=#C5C7C9;strokeColor=none" vertex="1" parent="1"><mxGeometry x="200" y="568.5" width="40" height="53" as="geometry"/></mxCell><mxCell id="26" value="" style="shape=mxgraph.aws.compute.ec2_instances;fillColor=#FF9800;strokeColor=none" vertex="1" parent="1"><mxGeometry x="570" y="530.5" width="58" height="59" as="geometry"/></mxCell><mxCell id="27" value="" style="shape=mxgraph.aws.compute.ec2_instances;fillColor=#FF9800;strokeColor=none" vertex="1" parent="1"><mxGeometry x="845.5" y="530.5" width="58" height="59" as="geometry"/></mxCell><mxCell id="28" value="" style="shape=mxgraph.aws.compute.ec2_instances;fillColor=#FF9800;strokeColor=none" vertex="1" parent="1"><mxGeometry x="1130" y="530.5" width="58" height="59" as="geometry"/></mxCell><mxCell id="29" value="" style="shape=mxgraph.aws.database.rds_mysql_db_instance;fillColor=#6F2D6E;strokeColor=none" vertex="1" parent="1"><mxGeometry x="480" y="571.5" width="61" height="57" as="geometry"/></mxCell><mxCell id="30" value="Global DNS" style="shape=mxgraph.aws.content_delivery.cloudfront;fillColor=#1EA4DD;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="1322.75" y="492.25" width="57" height="57" as="geometry"/></mxCell><mxCell id="31" value="" style="shape=mxgraph.aws.deployment_management.aws_elastic_beanstalk;fillColor=#296934;strokeColor=none" vertex="1" parent="1"><mxGeometry x="760" y="571.5" width="63" height="50" as="geometry"/></mxCell><mxCell id="32" value="" style="shape=mxgraph.aws.networking.route_53_routetable;fillColor=#262261;strokeColor=none" vertex="1" parent="1"><mxGeometry x="1050" y="572" width="58" height="49" as="geometry"/></mxCell><mxCell id="33" value="Load Dependent Scaling" style="shape=mxgraph.aws.compute.elastic_mapreduce_auto_scaling;fillColor=#FF9800;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="633" y="770" width="63" height="62" as="geometry"/></mxCell><mxCell id="34" value="Load Dependent Scaling" style="shape=mxgraph.aws.compute.elastic_mapreduce_auto_scaling;fillColor=#FF9800;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="914.5" y="770" width="63" height="62" as="geometry"/></mxCell><mxCell id="35" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=0;exitY=0.5;exitPerimeter=0;strokeColor=#999999;strokeWidth=3" edge="1" parent="1" source="16" target="17"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="36" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.5;exitPerimeter=0;strokeColor=#999999;strokeWidth=3" edge="1" parent="1" source="16" target="21"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="37" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=0.855;exitY=0.855;exitPerimeter=0;strokeColor=#999999;strokeWidth=3" edge="1" parent="1" source="16" target="20"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="801" y="379"/></Array></mxGeometry></mxCell><mxCell id="38" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=0.145;exitY=0.855;exitPerimeter=0;strokeColor=#999999;strokeWidth=3" edge="1" parent="1" source="16" target="18"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="521" y="379"/></Array></mxGeometry></mxCell><mxCell id="39" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.5;exitPerimeter=0;strokeColor=#999999;strokeWidth=3" edge="1" parent="1" source="2" target="16"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="40" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.5;exitPerimeter=0;strokeColor=#999999;strokeWidth=3" edge="1" parent="1" source="14" target="16"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="41" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.5;exitPerimeter=0;strokeColor=#999999;strokeWidth=3" edge="1" parent="1" source="15" target="16"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="42" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=1;exitY=0.7;exitPerimeter=0;strokeColor=#F7981F;strokeWidth=4;endArrow=none" edge="1" parent="1" source="4" target="6"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="43" value="" style="edgeStyle=orthogonalEdgeStyle;exitX=0;exitY=0.7;exitPerimeter=0;entryX=0.855;entryY=0.145;entryPerimeter=0;strokeColor=#F7981F;strokeWidth=4;endArrow=none" edge="1" parent="1" source="4" target="16"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="50" value="AWS Cloud" style="text;fontStyle=1;fontSize=14" vertex="1" parent="1"><mxGeometry x="1210" y="819" width="100" height="26" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/bpmn1.xml b/public/assets/plugins/mxgraph/templates/xml/bpmn1.xml
new file mode 100644
index 0000000..33ee552
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/bpmn1.xml
@@ -0,0 +1 @@
+<mxGraphModel scale="0.833" grid="1" guides="1" tooltips="1" connect="1" fold="1" page="0" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="23" value="" style="rounded=1;fillColor=#FFE599;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="30" y="398.50000000000006" width="1660" height="301.49999999999994" as="geometry"/></mxCell><mxCell id="39" value="" style="rounded=1;fillColor=#F1C232;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="280" y="430" width="1220" height="230" as="geometry"/></mxCell><mxCell id="2" value="" style="rounded=1;fillColor=#FFE599;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="20" y="20" width="1660" height="180" as="geometry"/></mxCell><mxCell id="3" value="" style="edgeStyle=none;endArrow=none;startArrow=none;strokeWidth=2" parent="1" edge="1"><mxGeometry x="125" y="-80.75" width="100" height="100" as="geometry"><mxPoint x="102.5" y="19.25" as="sourcePoint"/><mxPoint x="102.5" y="199.25" as="targetPoint"/></mxGeometry></mxCell><mxCell id="4" value="" style="shape=mxgraph.bpmn.message_end;fillColor=#B6D7A8;strokeColor=black;strokeWidth=2;perimeter=ellipsePerimeter;" parent="1" vertex="1"><mxGeometry x="170" y="80" width="50" height="58.5" as="geometry"/></mxCell><mxCell id="5" value="Get Task" style="rounded=1;fillColor=#CFE2F3;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="320" y="78.5" width="160" height="60" as="geometry"/></mxCell><mxCell id="6" value="Create Schedule" style="rounded=1;fillColor=#CFE2F3;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="590" y="78.5" width="210" height="60" as="geometry"/></mxCell><mxCell id="7" value="Verify Schedule" style="rounded=1;fillColor=#CFE2F3;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="910" y="79.9" width="210" height="60" as="geometry"/></mxCell><mxCell id="8" value="Commit Schedule" style="rounded=1;fillColor=#CFE2F3;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1210" y="80" width="200" height="60" as="geometry"/></mxCell><mxCell id="10" value="" style="edgeStyle=none;exitX=1;exitY=0.5;exitPerimeter=0;strokeWidth=2" parent="1" source="4" target="5" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="11" value="" style="edgeStyle=none;strokeWidth=2" parent="1" source="5" target="6" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="12" value="" style="edgeStyle=none;strokeWidth=2" parent="1" source="6" target="7" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="13" value="" style="edgeStyle=none;strokeWidth=2" parent="1" source="7" target="8" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="16" value="" style="shape=mxgraph.bpmn.general_end;fillColor=#B6D7A8;strokeColor=black;strokeWidth=2;perimeter=ellipsePerimeter;" parent="1" vertex="1"><mxGeometry x="1540" y="82.75000000000001" width="50" height="54.30000000000001" as="geometry"/></mxCell><mxCell id="20" value="" style="edgeStyle=none;strokeWidth=2" parent="1" source="8" target="16" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="21" value="Scheduling" style="text;horizontal=0;fontSize=18;fontStyle=1" parent="1" vertex="1"><mxGeometry x="55.40000000000005" y="139.9" width="129.59999999999997" height="26" as="geometry"/></mxCell><mxCell id="22" value="Order list" style="shape=note;verticalLabelPosition=bottom;verticalAlign=top;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="390" y="240" width="60" height="90" as="geometry"/></mxCell><mxCell id="24" value="" style="edgeStyle=none;endArrow=none;startArrow=none;strokeWidth=2" parent="1" edge="1"><mxGeometry x="126.75" y="298.50000000000006" width="100" height="100" as="geometry"><mxPoint x="104.25" y="398.50000000000006" as="sourcePoint"/><mxPoint x="101.75" y="700" as="targetPoint"/></mxGeometry></mxCell><mxCell id="26" value="Compose Specification" style="rounded=1;fillColor=#CFE2F3;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="510" y="457" width="160" height="60" as="geometry"/></mxCell><mxCell id="27" value="Check warehouse" style="rounded=1;fillColor=#CFE2F3;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="740" y="457.75000000000006" width="150" height="59.99999999999994" as="geometry"/></mxCell><mxCell id="29" value="Produce Goods" style="rounded=1;fillColor=#CFE2F3;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1110" y="457" width="200" height="60" as="geometry"/></mxCell><mxCell id="31" value="" style="edgeStyle=none;strokeWidth=2" parent="1" source="26" target="27" edge="1"><mxGeometry x="10" y="378.50000000000006" width="100" height="100" as="geometry"><mxPoint x="10" y="478.50000000000006" as="sourcePoint"/><mxPoint x="110" y="378.50000000000006" as="targetPoint"/></mxGeometry></mxCell><mxCell id="35" value="" style="edgeStyle=none;strokeWidth=2" parent="1" source="29" target="46" edge="1"><mxGeometry x="10" y="378.50000000000006" width="100" height="100" as="geometry"><mxPoint x="10" y="478.50000000000006" as="sourcePoint"/><mxPoint x="110" y="378.50000000000006" as="targetPoint"/></mxGeometry></mxCell><mxCell id="36" value="Factory" style="text;horizontal=0;fontSize=18;fontStyle=1" parent="1" vertex="1"><mxGeometry x="65.40000000000006" y="567.6750000000001" width="129.59999999999997" height="26" as="geometry"/></mxCell><mxCell id="40" value="Available?" style="shape=mxgraph.bpmn.gateway;fillColor=#F4CCCC;strokeColor=black;strokeWidth=2;perimeter=ellipsePerimeter;" parent="1" vertex="1"><mxGeometry x="960" y="447.625" width="80" height="78.74999999999994" as="geometry"/></mxCell><mxCell id="41" value="" style="shape=mxgraph.bpmn.message_intermediate;fillColor=#B6D7A8;strokeColor=black;strokeWidth=2;perimeter=ellipsePerimeter;" parent="1" vertex="1"><mxGeometry x="975" y="570" width="49.99999999999997" height="49.80000000000001" as="geometry"/></mxCell><mxCell id="42" value="" style="edgeStyle=orthogonalEdgeStyle;strokeWidth=2" parent="1" source="27" target="40" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="43" value="no" style="edgeStyle=orthogonalEdgeStyle;strokeWidth=2" parent="1" source="40" target="41" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="44" value="yes" style="edgeStyle=orthogonalEdgeStyle;strokeWidth=2" parent="1" source="40" target="29" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="45" value="" style="edgeStyle=orthogonalEdgeStyle;strokeWidth=2" parent="1" source="41" target="29" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="46" value="" style="shape=mxgraph.bpmn.message_end;fillColor=#B6D7A8;strokeColor=black;strokeWidth=2;perimeter=ellipsePerimeter;" parent="1" vertex="1"><mxGeometry x="1385" y="463.50000000000006" width="50" height="50" as="geometry"/></mxCell><mxCell id="47" value="" style="shape=mxgraph.bpmn.general_start;fillColor=#B6D7A8;strokeColor=black;strokeWidth=2;perimeter=ellipsePerimeter;" parent="1" vertex="1"><mxGeometry x="390" y="463.50000000000006" width="50" height="50" as="geometry"/></mxCell><mxCell id="48" value="" style="edgeStyle=none;strokeWidth=2" parent="1" source="47" target="26" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="49" value="" style="shape=mxgraph.bpmn.timer_intermediate;fillColor=#B6D7A8;strokeColor=black;strokeWidth=2;perimeter=ellipsePerimeter;" parent="1" vertex="1"><mxGeometry x="180.40000000000003" y="510" width="50" height="51" as="geometry"/></mxCell><mxCell id="50" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=2" parent="1" source="49" target="39" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="51" value="" style="shape=mxgraph.bpmn.general_end;fillColor=#B6D7A8;strokeColor=black;strokeWidth=2;perimeter=ellipsePerimeter;" parent="1" vertex="1"><mxGeometry x="1550" y="526.375" width="50" height="54.30000000000001" as="geometry"/></mxCell><mxCell id="52" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=2" parent="1" source="39" target="51" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="53" value="Order Completed" style="edgeStyle=elbowEdgeStyle;elbow=vertical;dashed=1;rounded=1;strokeWidth=2" parent="1" source="46" target="6" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="56" value="" style="edgeStyle=none;dashed=1;strokeWidth=2" parent="1" source="6" target="22" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="57" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;dashed=1;startArrow=classic;endArrow=classic;strokeWidth=2" parent="1" source="22" target="39" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="61" value="" style="rounded=1;fillColor=#FFE599;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="30" y="920" width="1660" height="180" as="geometry"/></mxCell><mxCell id="62" value="" style="edgeStyle=none;endArrow=none;startArrow=none;strokeWidth=2" parent="1" edge="1"><mxGeometry x="130.57" y="820" width="100" height="100" as="geometry"><mxPoint x="102.5" y="920" as="sourcePoint"/><mxPoint x="102.5" y="1100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="63" value="Analysis" style="text;horizontal=0;fontSize=18;fontStyle=1" parent="1" vertex="1"><mxGeometry x="55.40000000000005" y="1027.5" width="129.59999999999997" height="26" as="geometry"/></mxCell><mxCell id="64" value="Quality Control" style="rounded=1;fillColor=#CFE2F3;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="419.99999999999994" y="985" width="160" height="60" as="geometry"/></mxCell><mxCell id="65" value="Issue Revision" style="rounded=1;fillColor=#CFE2F3;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="715.0000000000001" y="985" width="160" height="60" as="geometry"/></mxCell><mxCell id="66" value="" style="shape=mxgraph.bpmn.timer_intermediate;fillColor=#B6D7A8;strokeColor=black;strokeWidth=2;perimeter=ellipsePerimeter;" parent="1" vertex="1"><mxGeometry x="185" y="989.5" width="50" height="51" as="geometry"/></mxCell><mxCell id="67" value="" style="shape=mxgraph.bpmn.general_end;fillColor=#B6D7A8;strokeColor=black;strokeWidth=2;perimeter=ellipsePerimeter;" parent="1" vertex="1"><mxGeometry x="1020" y="987.8499999999999" width="50" height="54.30000000000001" as="geometry"/></mxCell><mxCell id="68" value="" style="edgeStyle=none;dashed=1;strokeWidth=2" parent="1" source="27" target="70" edge="1"><mxGeometry x="120.87110481586399" y="611.5" width="100" height="100" as="geometry"><mxPoint x="769.128895184136" y="750" as="sourcePoint"/><mxPoint x="570.871104815864" y="877.2454545454545" as="targetPoint"/></mxGeometry></mxCell><mxCell id="69" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;dashed=1;startArrow=classic;endArrow=classic;strokeWidth=2" parent="1" source="70" target="64" edge="1"><mxGeometry x="33.599999999999916" y="580" width="100" height="100" as="geometry"><mxPoint x="453.59999999999997" y="910" as="sourcePoint"/><mxPoint x="453.59999999999997" y="1010" as="targetPoint"/></mxGeometry></mxCell><mxCell id="70" value="Planned&#xa; Stock Balance" style="shape=note;verticalLabelPosition=bottom;verticalAlign=top;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="440.00000000000006" y="780" width="60" height="90" as="geometry"/></mxCell><mxCell id="71" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2" parent="1" source="66" target="64" edge="1"><mxGeometry x="5" y="-65.00000000000023" width="100" height="100" as="geometry"><mxPoint x="5" y="34.99999999999977" as="sourcePoint"/><mxPoint x="105" y="-65.00000000000023" as="targetPoint"/></mxGeometry></mxCell><mxCell id="72" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2" parent="1" source="64" target="65" edge="1"><mxGeometry x="5" y="-65.00000000000023" width="100" height="100" as="geometry"><mxPoint x="5" y="34.99999999999977" as="sourcePoint"/><mxPoint x="105" y="-65.00000000000023" as="targetPoint"/></mxGeometry></mxCell><mxCell id="73" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2" parent="1" source="65" target="67" edge="1"><mxGeometry x="5" y="-65.00000000000023" width="100" height="100" as="geometry"><mxPoint x="5" y="34.99999999999977" as="sourcePoint"/><mxPoint x="105" y="-65.00000000000023" as="targetPoint"/></mxGeometry></mxCell><mxCell id="74" value="Materials Delivered" style="edgeStyle=elbowEdgeStyle;elbow=vertical;dashed=1;strokeWidth=2" parent="1" source="65" target="41" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/compare1.xml b/public/assets/plugins/mxgraph/templates/xml/compare1.xml
new file mode 100644
index 0000000..8b3a001
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/compare1.xml
@@ -0,0 +1 @@
+<mxGraphModel scale="0.694" grid="0" guides="1" tooltips="1" connect="1" fold="1" page="0" background="#FFFFCC" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="6" value="How alike?" style="text;align=center;fontFamily=Tahoma;fontStyle=1;fontSize=24;fontColor=#660000" vertex="1" parent="1"><mxGeometry x="390" y="177.75000000000003" width="350" height="26" as="geometry"/></mxCell><mxCell id="13" value="How different?" style="text;align=center;fontFamily=Tahoma;fontStyle=1;fontSize=24;fontColor=#660000" vertex="1" parent="1"><mxGeometry x="400" y="426.75" width="330" height="26" as="geometry"/></mxCell><mxCell id="20" style="strokeWidth=8;strokeColor=#FF8000" edge="1" parent="1" source="18" target="17"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="21" style="strokeWidth=8;strokeColor=#FF8000" edge="1" parent="1" source="19" target="17"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="25" style="strokeWidth=8;strokeColor=#FF8000" edge="1" parent="1" source="17" target="14"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="26" style="strokeWidth=8;strokeColor=#FF8000" edge="1" parent="1" source="17" target="16"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="17" value="domestic&#xa;mammal&#xa;furry&#xa;four legs&#xa;tail&#xa;inner organs" style="rounded=1;fillColor=#660000;gradientColor=#990000;gradientDirection=north;fontFamily=Helvetica;fontSize=20;fontColor=#FF8000;fontStyle=1;shadow=1;strokeColor=none" vertex="1" parent="1"><mxGeometry x="321.23000000000013" y="227.74999999999991" width="489.99999999999994" height="175.00000000000017" as="geometry"/></mxCell><mxCell id="19" value="Concept 2:&#xa;Cat" style="rounded=1;fillColor=#660000;gradientColor=#990000;gradientDirection=north;fontFamily=Helvetica;fontSize=20;fontColor=#FF8000;fontStyle=1;shadow=1;strokeColor=none" vertex="1" parent="1"><mxGeometry x="771.2300000000001" y="42.75000000000009" width="240" height="90" as="geometry"/></mxCell><mxCell id="18" value="Concept 1:&#xa;Dog" style="rounded=1;fillColor=#660000;gradientColor=#990000;gradientDirection=north;fontFamily=Helvetica;fontSize=20;fontColor=#FF8000;fontStyle=1;shadow=1;strokeColor=none" vertex="1" parent="1"><mxGeometry x="121.23000000000013" y="42.75000000000009" width="240" height="90" as="geometry"/></mxCell><mxCell id="14" value="blunt nails&#xa;barks&#xa;obedient&#xa;doesn't really clean itself&#xa;social&#xa;pack&#xa;eats bone&#xa;doesn't like heights&#xa;42 teeth" style="rounded=1;fillColor=#660000;gradientColor=#990000;gradientDirection=north;fontFamily=Helvetica;fontSize=20;fontColor=#FF8000;fontStyle=1;shadow=1;strokeColor=none" vertex="1" parent="1"><mxGeometry x="88.69000000000017" y="467.7500000000001" width="305.0799999999999" height="365.00000000000006" as="geometry"/></mxCell><mxCell id="16" value="sharp claw&#xa;meows&#xa;disobedient&#xa;bathes by licking&#xa;antisocial&#xa;individual&#xa;eats mice&#xa;likes climbing&#xa;30 teeth" style="rounded=1;fillColor=#660000;gradientColor=#990000;gradientDirection=north;fontFamily=Helvetica;fontSize=20;fontColor=#FF8000;fontStyle=1;shadow=1;strokeColor=none" vertex="1" parent="1"><mxGeometry x="736.2300000000001" y="470.25" width="305.0799999999999" height="365.00000000000006" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/flowchart1.xml b/public/assets/plugins/mxgraph/templates/xml/flowchart1.xml
new file mode 100644
index 0000000..81959c0
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/flowchart1.xml
@@ -0,0 +1 @@
+<mxGraphModel grid="1" guides="1" tooltips="1" connect="1" fold="1" page="0" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="75" value="Project&#xa;" style="strokeColor=#19697A;fillColor=#E9F2F8;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="90" y="20" width="1560" height="80" as="geometry"/></mxCell><mxCell id="76" value="Milestone 1" style="strokeColor=#19697A;fillColor=#DAE2E8;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="180" y="60" width="490" height="40" as="geometry"/></mxCell><mxCell id="79" value="Milestone 2" style="strokeColor=#19697A;fillColor=#DAE2E8;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="670" y="60" width="490" height="40" as="geometry"/></mxCell><mxCell id="80" value="Milestone 3" style="strokeColor=#19697A;fillColor=#DAE2E8;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="1160" y="60" width="490" height="40" as="geometry"/></mxCell><mxCell id="81" value="Lane 1" style="strokeColor=#19697A;fillColor=#E9F2F8;fontSize=18;strokeWidth=2;horizontal=0;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="90" y="100" width="50" height="300" as="geometry"/></mxCell><mxCell id="82" value="Lane 1.1" style="strokeColor=#19697A;fillColor=#DAE2E8;fontSize=18;strokeWidth=2;horizontal=0;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="140" y="100" width="40" height="100" as="geometry"/></mxCell><mxCell id="83" value="v 1.0" style="strokeColor=#19697A;fillColor=#DAE2E8;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="90" y="20" width="90" height="80" as="geometry"/></mxCell><mxCell id="84" value="Lane 1.2" style="strokeColor=#19697A;fillColor=#DAE2E8;fontSize=18;strokeWidth=2;horizontal=0;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="140" y="200" width="40" height="100" as="geometry"/></mxCell><mxCell id="85" value="Lane 1.3" style="strokeColor=#19697A;fillColor=#DAE2E8;fontSize=18;strokeWidth=2;horizontal=0;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="140" y="300" width="40" height="100" as="geometry"/></mxCell><mxCell id="86" value="Lane 2.2" style="strokeColor=#19697A;fillColor=#DAE2E8;fontSize=18;strokeWidth=2;horizontal=0;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="140" y="500" width="40" height="100" as="geometry"/></mxCell><mxCell id="87" value="Lane 2.1" style="strokeColor=#19697A;fillColor=#DAE2E8;fontSize=18;strokeWidth=2;horizontal=0;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="140" y="400" width="40" height="100" as="geometry"/></mxCell><mxCell id="88" value="Lane 2" style="strokeColor=#19697A;fillColor=#E9F2F8;fontSize=18;strokeWidth=2;horizontal=0;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="90" y="400" width="50" height="200" as="geometry"/></mxCell><mxCell id="89" value="Lane 3.2" style="strokeColor=#19697A;fillColor=#DAE2E8;fontSize=18;strokeWidth=2;horizontal=0;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="140" y="700" width="40" height="100" as="geometry"/></mxCell><mxCell id="90" value="Lane 3.1" style="strokeColor=#19697A;fillColor=#DAE2E8;fontSize=18;strokeWidth=2;horizontal=0;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="140" y="600" width="40" height="100" as="geometry"/></mxCell><mxCell id="91" value="Lane 3" style="strokeColor=#19697A;fillColor=#E9F2F8;fontSize=18;strokeWidth=2;horizontal=0;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="90" y="600" width="50" height="200" as="geometry"/></mxCell><mxCell id="93" value="" style="strokeColor=#19697A;fillColor=#CCF1FF;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="180" y="100" width="490" height="100" as="geometry"/></mxCell><mxCell id="94" value="" style="strokeColor=#19697A;fillColor=#B0DBE6;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="180" y="200" width="490" height="100" as="geometry"/></mxCell><mxCell id="95" value="" style="strokeColor=#19697A;fillColor=#CCF1FF;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="180" y="300" width="490" height="100" as="geometry"/></mxCell><mxCell id="96" value="" style="strokeColor=#19697A;fillColor=#B0DBE6;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="180" y="400" width="490" height="100" as="geometry"/></mxCell><mxCell id="97" value="" style="strokeColor=#19697A;fillColor=#CCF1FF;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="180" y="500" width="490" height="100" as="geometry"/></mxCell><mxCell id="98" value="" style="strokeColor=#19697A;fillColor=#B0DBE6;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="180" y="600" width="490" height="100" as="geometry"/></mxCell><mxCell id="99" value="" style="strokeColor=#19697A;fillColor=#CCF1FF;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="180" y="700" width="490" height="100" as="geometry"/></mxCell><mxCell id="101" value="" style="strokeColor=#19697A;fillColor=#CCF1FF;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="670" y="100" width="490" height="100" as="geometry"/></mxCell><mxCell id="102" value="" style="strokeColor=#19697A;fillColor=#B0DBE6;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="670" y="200" width="490" height="100" as="geometry"/></mxCell><mxCell id="103" value="" style="strokeColor=#19697A;fillColor=#CCF1FF;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="670" y="300" width="490" height="100" as="geometry"/></mxCell><mxCell id="104" value="" style="strokeColor=#19697A;fillColor=#B0DBE6;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="670" y="400" width="490" height="100" as="geometry"/></mxCell><mxCell id="105" value="" style="strokeColor=#19697A;fillColor=#CCF1FF;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="670" y="500" width="490" height="100" as="geometry"/></mxCell><mxCell id="106" value="" style="strokeColor=#19697A;fillColor=#B0DBE6;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="670" y="600" width="490" height="100" as="geometry"/></mxCell><mxCell id="107" value="" style="strokeColor=#19697A;fillColor=#CCF1FF;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="670" y="700" width="490" height="100" as="geometry"/></mxCell><mxCell id="108" value="" style="strokeColor=#19697A;fillColor=#CCF1FF;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="1160" y="100.00000000000001" width="490" height="100" as="geometry"/></mxCell><mxCell id="109" value="" style="strokeColor=#19697A;fillColor=#B0DBE6;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="1160" y="200" width="490" height="100" as="geometry"/></mxCell><mxCell id="110" value="" style="strokeColor=#19697A;fillColor=#CCF1FF;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="1160" y="300" width="490" height="100" as="geometry"/></mxCell><mxCell id="111" value="" style="strokeColor=#19697A;fillColor=#B0DBE6;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="1160" y="400" width="490" height="100" as="geometry"/></mxCell><mxCell id="112" value="" style="strokeColor=#19697A;fillColor=#CCF1FF;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="1160" y="500" width="490" height="100" as="geometry"/></mxCell><mxCell id="113" value="" style="strokeColor=#19697A;fillColor=#B0DBE6;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="1160" y="600" width="490" height="100" as="geometry"/></mxCell><mxCell id="114" value="" style="strokeColor=#19697A;fillColor=#CCF1FF;fontSize=18;strokeWidth=2;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="1160" y="700" width="490" height="100" as="geometry"/></mxCell><mxCell id="115" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="200" y="125" width="110" height="50" as="geometry"/></mxCell><mxCell id="116" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="530" y="125" width="110" height="50" as="geometry"/></mxCell><mxCell id="117" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="350" y="325" width="110" height="50" as="geometry"/></mxCell><mxCell id="118" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="530" y="425" width="110" height="50" as="geometry"/></mxCell><mxCell id="119" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="530" y="525" width="110" height="50" as="geometry"/></mxCell><mxCell id="120" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="350" y="625" width="110" height="50" as="geometry"/></mxCell><mxCell id="121" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="350" y="525" width="110" height="50" as="geometry"/></mxCell><mxCell id="122" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="860" y="225" width="110" height="50" as="geometry"/></mxCell><mxCell id="123" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="1020" y="125" width="110" height="50" as="geometry"/></mxCell><mxCell id="124" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="1510" y="625" width="110" height="50" as="geometry"/></mxCell><mxCell id="125" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="860" y="425" width="110" height="50" as="geometry"/></mxCell><mxCell id="126" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="860" y="725" width="110" height="50" as="geometry"/></mxCell><mxCell id="127" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="700" y="625" width="110" height="50" as="geometry"/></mxCell><mxCell id="128" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="860" y="625" width="110" height="50" as="geometry"/></mxCell><mxCell id="129" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="700" y="425" width="110" height="50" as="geometry"/></mxCell><mxCell id="130" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="1020" y="325" width="110" height="50" as="geometry"/></mxCell><mxCell id="131" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="1190" y="525" width="110" height="50" as="geometry"/></mxCell><mxCell id="132" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="1350" y="525" width="110" height="50" as="geometry"/></mxCell><mxCell id="133" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="1180" y="225" width="110" height="50" as="geometry"/></mxCell><mxCell id="134" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="1190" y="625" width="110" height="50" as="geometry"/></mxCell><mxCell id="135" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="1350" y="725" width="110" height="50" as="geometry"/></mxCell><mxCell id="136" value="" style="rounded=1;fillColor=#F1C232;strokeColor=#FFFFFF;strokeWidth=2;gradientColor=#E69138;fontFamily=Helvetica" parent="1" vertex="1"><mxGeometry x="1350" y="125" width="110" height="50" as="geometry"/></mxCell><mxCell id="137" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="115" target="117" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="138" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="115" target="121" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="139" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="115" target="120" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="140" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="117" target="116" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="141" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="117" target="118" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="142" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="121" target="118" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="143" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="121" target="119" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="144" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="120" target="119" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="145" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="116" target="122" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="146" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="118" target="129" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="147" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="129" target="125" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="148" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="116" target="123" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="149" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="119" target="127" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="150" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="127" target="128" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="151" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="127" target="126" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="152" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="126" target="135" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="153" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="135" target="124" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="154" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="133" target="124" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1330" y="450"/></Array></mxGeometry></mxCell><mxCell id="155" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="134" target="135" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="156" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="128" target="131" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="157" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="128" target="134" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="158" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="125" target="130" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="159" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="122" target="133" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="160" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="123" target="133" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1150" y="200"/></Array></mxGeometry></mxCell><mxCell id="161" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="123" target="136" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="162" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="136" target="124" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="163" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="132" target="124" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="164" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="131" target="132" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="165" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=3;strokeColor=#0C343D;fontFamily=Helvetica" parent="1" source="130" target="131" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1150" y="450"/></Array></mxGeometry></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/flowchart2.xml b/public/assets/plugins/mxgraph/templates/xml/flowchart2.xml
new file mode 100644
index 0000000..5e53264
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/flowchart2.xml
@@ -0,0 +1 @@
+<mxGraphModel grid="0" guides="1" tooltips="1" connect="0" fold="1" page="0" background="#FFE6CC" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="2" value="start" style="shape=mxgraph.flowchart.terminator;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="260" y="60" width="120" height="30" as="geometry"/></mxCell><mxCell id="3" value="analyse project&#xa; documentation" style="shape=mxgraph.flowchart.data;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="240.5" y="130" width="159" height="80" as="geometry"/></mxCell><mxCell id="4" value="create&#xa;material&#xa;specification" style="shape=mxgraph.flowchart.data;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="240.5" y="510" width="159" height="80" as="geometry"/></mxCell><mxCell id="6" value="check for&#xa;obscurities" style="shape=mxgraph.flowchart.data;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="240.5" y="250" width="159" height="80" as="geometry"/></mxCell><mxCell id="8" value="obscurities?" style="shape=mxgraph.flowchart.decision;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="271" y="390" width="98" height="57" as="geometry"/></mxCell><mxCell id="9" style="fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="2" target="3"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="10" style="fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="3" target="6"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="11" style="entryX=0.5;entryY=0;entryPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="6" target="8"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="12" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;entryX=0.5;entryY=0.91;entryPerimeter=0;exitX=1;exitY=0.5;exitPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="8" target="59"><mxGeometry x="381" y="28.5" width="100" height="100" as="geometry"><mxPoint x="750" y="447" as="sourcePoint"/><mxPoint x="765.395" y="318.5" as="targetPoint"/><Array as="points"><mxPoint x="545" y="400"/></Array></mxGeometry></mxCell><mxCell id="13" value="yes" style="text;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="370" y="390" width="40" height="26" as="geometry"/></mxCell><mxCell id="14" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="8" target="4"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="15" value="order material" style="shape=mxgraph.flowchart.data;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="240.5" y="640" width="159" height="80" as="geometry"/></mxCell><mxCell id="16" value="No" style="text;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="320" y="447" width="40" height="26" as="geometry"/></mxCell><mxCell id="17" value="final project" style="shape=mxgraph.flowchart.document;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="480" y="515" width="140" height="70" as="geometry"/></mxCell><mxCell id="18" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=0.905;exitY=0.5;exitPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="4" target="17"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="19" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="4" target="15"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="21" value="material&#xa;balance" style="shape=mxgraph.flowchart.predefined_process;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="480" y="635" width="190" height="90" as="geometry"/></mxCell><mxCell id="22" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=0.905;exitY=0.5;exitPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="15" target="21"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="23" value="organize &#xa;workforce" style="shape=mxgraph.flowchart.manual_input;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="242" y="780" width="158" height="80" as="geometry"/></mxCell><mxCell id="25" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;entryX=0.5;entryY=0.195;entryPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="15" target="23"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="26" value="create Gantt&#xa;diagram" style="shape=mxgraph.flowchart.document;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="240.5" y="920" width="159" height="90" as="geometry"/></mxCell><mxCell id="27" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=0.5;exitY=1;exitPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="23" target="26"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="28" value="late&#xa;project&#xa;changes?" style="shape=mxgraph.flowchart.decision;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="261.5" y="1080" width="119" height="78.5" as="geometry"/></mxCell><mxCell id="29" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=0.5;exitY=0.9;exitPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="26" target="28"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="30" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=0;exitY=0.5;exitPerimeter=0;entryX=0;entryY=0.5;entryPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="32" target="8"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="160" y="850"/></Array></mxGeometry></mxCell><mxCell id="31" value="yes" style="text;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="280" y="1158.5" width="40" height="26" as="geometry"/></mxCell><mxCell id="32" value="investor&#xa;disapproves&#xa; investment?" style="shape=mxgraph.flowchart.decision;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="255" y="1210" width="130" height="100" as="geometry"/></mxCell><mxCell id="33" value="agreement?" style="shape=mxgraph.flowchart.decision;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="510" y="1210" width="130" height="100" as="geometry"/></mxCell><mxCell id="34" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=0.5;exitY=1;exitPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="28" target="32"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="35" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=1;exitY=0.5;exitPerimeter=0;entryX=0;entryY=0.5;entryPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="32" target="33"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="36" value="terminate&#xa;contract&#xa;" style="shape=mxgraph.flowchart.merge_or_storage;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="760" y="1300" width="130" height="80.5" as="geometry"/></mxCell><mxCell id="38" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;entryX=0.5;entryY=0;entryPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="33" target="36"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="740" y="1260"/></Array></mxGeometry></mxCell><mxCell id="39" value="create&#xa;status&#xa;report" style="shape=mxgraph.flowchart.data;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="240.5" y="1490" width="159" height="80" as="geometry"/></mxCell><mxCell id="40" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="32" target="39"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="41" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;entryX=0.5;entryY=0;entryPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="33" target="39"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="42" value="project&#xa;complete?" style="shape=mxgraph.flowchart.decision;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="271" y="1621.5" width="98" height="57" as="geometry"/></mxCell><mxCell id="44" value="create&#xa;final&#xa;report" style="shape=mxgraph.flowchart.data;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="240.5" y="1730" width="159" height="80" as="geometry"/></mxCell><mxCell id="46" value="issue&#xa;bill of works" style="shape=mxgraph.flowchart.predefined_process;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="560" y="1725" width="190" height="90" as="geometry"/></mxCell><mxCell id="47" value="end" style="shape=mxgraph.flowchart.terminator;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="260" y="1910" width="120" height="30" as="geometry"/></mxCell><mxCell id="48" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;entryX=0.5;entryY=0;entryPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="39" target="42"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="49" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;entryX=0.5;entryY=0;entryPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="42" target="44"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="50" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;entryX=0.5;entryY=0;entryPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="44" target="47"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="51" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.905;exitY=0.5;exitPerimeter=0;entryX=0;entryY=0.5;entryPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="44" target="46"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="53" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=1;exitY=0.5;exitPerimeter=0;entryX=0.905;entryY=0.5;entryPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="28" target="39"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="950" y="1320"/></Array></mxGeometry></mxCell><mxCell id="54" value="no" style="text;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="380.5" y="1093.25" width="40" height="26" as="geometry"/></mxCell><mxCell id="55" value="yes" style="text;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="385" y="1234" width="40" height="26" as="geometry"/></mxCell><mxCell id="56" value="no" style="text;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="320" y="1310" width="40" height="26" as="geometry"/></mxCell><mxCell id="57" value="yes" style="text;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="575" y="1310" width="40" height="26" as="geometry"/></mxCell><mxCell id="58" value="no" style="text;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="640" y="1234" width="40" height="26" as="geometry"/></mxCell><mxCell id="59" value="iron out&#xa;obscurities &#xa;with investor" style="shape=mxgraph.flowchart.paper_tape;fillColor=#99CCFF;strokeColor=#004C99;strokeWidth=3;gradientColor=#CCE5FF;gradientDirection=north;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="470" y="300" width="150" height="81" as="geometry"/></mxCell><mxCell id="63" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=0.5;exitY=0.09;exitPerimeter=0;entryX=0.905;entryY=0.5;entryPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="59" target="6"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="545" y="300"/></Array></mxGeometry></mxCell><mxCell id="64" value="yes" style="text;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="321" y="1680" width="40" height="26" as="geometry"/></mxCell><mxCell id="65" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=0;exitY=0.5;exitPerimeter=0;entryX=0.095;entryY=0.5;entryPerimeter=0;fontColor=#001933;fontStyle=1;strokeColor=#003366;strokeWidth=2" edge="1" parent="1" source="42" target="6"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="120" y="970"/></Array></mxGeometry></mxCell><mxCell id="66" value="no" style="text;fontColor=#001933;fontStyle=1" vertex="1" parent="1"><mxGeometry x="235" y="1624" width="40" height="26" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/gantt1.xml b/public/assets/plugins/mxgraph/templates/xml/gantt1.xml
new file mode 100644
index 0000000..0c2d0bd
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/gantt1.xml
@@ -0,0 +1 @@
+<mxGraphModel grid="1" guides="1" tooltips="1" connect="0" fold="1" page="0" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="63" value="1" style="strokeColor=#DEEDFF;fillColor=#ADC3D9" vertex="1" parent="1"><mxGeometry x="50" y="80.00000000000001" width="40" height="20" as="geometry"/></mxCell><mxCell id="64" value="Complete project execution" style="align=left;strokeColor=#DEEDFF;fillColor=#ADC3D9" vertex="1" parent="1"><mxGeometry x="90" y="80.00000000000001" width="320" height="20" as="geometry"/></mxCell><mxCell id="65" value="35 days" style="strokeColor=#DEEDFF;fillColor=#ADC3D9" vertex="1" parent="1"><mxGeometry x="410.00000000000176" y="79.99999999999997" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="66" value="16.04.12" style="strokeColor=#DEEDFF;fillColor=#ADC3D9" vertex="1" parent="1"><mxGeometry x="490.00000000000205" y="79.99999999999997" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="67" value="1.06.12" style="strokeColor=#DEEDFF;fillColor=#ADC3D9" vertex="1" parent="1"><mxGeometry x="570.0000000000016" y="80.00000000000024" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="68" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="650.000000000002" y="80.00000000000026" width="20" height="520" as="geometry"/></mxCell><mxCell id="69" value="2" style="strokeColor=#DEEDFF;fillColor=#CCE5FF" vertex="1" parent="1"><mxGeometry x="50.000000000000256" y="99.99999999999989" width="40" height="20" as="geometry"/></mxCell><mxCell id="70" value="Engineering" style="align=left;strokeColor=#DEEDFF;fillColor=#CCE5FF" vertex="1" parent="1"><mxGeometry x="90.00000000000026" y="99.99999999999989" width="319.9999999999998" height="20" as="geometry"/></mxCell><mxCell id="71" value="35 days" style="strokeColor=#DEEDFF;fillColor=#CCE5FF" vertex="1" parent="1"><mxGeometry x="410.000000000002" y="99.99999999999984" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="72" value="16.04.12" style="strokeColor=#DEEDFF;fillColor=#CCE5FF" vertex="1" parent="1"><mxGeometry x="490.0000000000023" y="99.99999999999984" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="73" value="1.06.12" style="strokeColor=#DEEDFF;fillColor=#CCE5FF" vertex="1" parent="1"><mxGeometry x="570.0000000000018" y="100.00000000000011" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="74" value="3" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="50.00000000000027" y="119.99999999999976" width="40" height="20" as="geometry"/></mxCell><mxCell id="75" value="Project examination" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="90.00000000000027" y="119.99999999999976" width="319.9999999999997" height="20.000000000000014" as="geometry"/></mxCell><mxCell id="76" value="1 day" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.000000000002" y="119.99999999999972" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="77" value="16.04.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.0000000000023" y="119.99999999999972" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="78" value="16.04.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000018" y="119.99999999999999" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="79" value="4" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="50" y="140.00000000000017" width="40" height="20" as="geometry"/></mxCell><mxCell id="80" value="Material specification" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="90" y="140.00000000000017" width="320" height="20" as="geometry"/></mxCell><mxCell id="81" value="2 days" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.0000000000017" y="140.0000000000001" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="82" value="17.04.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.00000000000205" y="140.0000000000001" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="83" value="18.04.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000015" y="140.0000000000004" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="84" value="5" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="49.99999999999991" y="160.00000000000017" width="40" height="20" as="geometry"/></mxCell><mxCell id="85" value="Material ordering" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="89.99999999999991" y="160.00000000000017" width="320.0000000000001" height="20" as="geometry"/></mxCell><mxCell id="86" value="1 day" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.00000000000165" y="160.0000000000001" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="87" value="19.04.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.00000000000193" y="160.0000000000001" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="88" value="19.04.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000015" y="160.0000000000004" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="89" value="6" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="49.9999999999999" y="180.00000000000043" width="40" height="20" as="geometry"/></mxCell><mxCell id="90" value="Equipment layouting" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="89.9999999999999" y="180.00000000000043" width="320.0000000000001" height="20" as="geometry"/></mxCell><mxCell id="91" value="3 days" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.00000000000165" y="180.00000000000037" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="92" value="20.04.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.00000000000193" y="180.00000000000037" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="93" value="24.04.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000015" y="180.00000000000065" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="94" value="7" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="50.000000000000625" y="200.0000000000007" width="40" height="20" as="geometry"/></mxCell><mxCell id="95" value="Supervision and meetings" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="90.00000000000063" y="200.0000000000007" width="319.9999999999994" height="20" as="geometry"/></mxCell><mxCell id="96" value="27 days" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.0000000000024" y="200.00000000000068" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="97" value="25.04.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.0000000000027" y="200.00000000000068" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="98" value="31.05.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000022" y="200.00000000000094" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="99" value="8" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="50.00000000000064" y="220.0000000000006" width="40" height="20" as="geometry"/></mxCell><mxCell id="100" value="Bill of works" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="90.00000000000064" y="220.0000000000006" width="319.9999999999994" height="20" as="geometry"/></mxCell><mxCell id="101" value="1 day" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.0000000000024" y="220.00000000000054" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="102" value="1.06.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.0000000000027" y="220.00000000000054" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="103" value="1.06.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000022" y="220.00000000000082" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="104" value="9" style="strokeColor=#DEEDFF;fillColor=#CCE5FF" vertex="1" parent="1"><mxGeometry x="50.00000000000037" y="240.000000000001" width="40" height="20" as="geometry"/></mxCell><mxCell id="105" value="Workshop" style="align=left;strokeColor=#DEEDFF;fillColor=#CCE5FF" vertex="1" parent="1"><mxGeometry x="90.00000000000037" y="240.000000000001" width="319.99999999999966" height="20.00000000000003" as="geometry"/></mxCell><mxCell id="106" value="20 days" style="strokeColor=#DEEDFF;fillColor=#CCE5FF" vertex="1" parent="1"><mxGeometry x="410.0000000000021" y="240.00000000000094" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="107" value="24.04.12" style="strokeColor=#DEEDFF;fillColor=#CCE5FF" vertex="1" parent="1"><mxGeometry x="490.00000000000244" y="240.00000000000094" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="108" value="21.05.12" style="strokeColor=#DEEDFF;fillColor=#CCE5FF" vertex="1" parent="1"><mxGeometry x="570.0000000000018" y="240.00000000000122" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="109" value="10" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="50.00000000000028" y="260.000000000001" width="40" height="20" as="geometry"/></mxCell><mxCell id="110" value="Project examination and material comparison" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="90.00000000000028" y="260.000000000001" width="319.9999999999997" height="20" as="geometry"/></mxCell><mxCell id="111" value="2 days" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.00000000000205" y="260.0000000000009" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="112" value="24.04.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.00000000000233" y="260.0000000000009" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="113" value="25.04.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000018" y="260.00000000000125" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="114" value="11" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="50.00000000000027" y="280.00000000000125" width="40" height="20" as="geometry"/></mxCell><mxCell id="115" value="Preparing distribution boards" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="90.00000000000027" y="280.00000000000125" width="319.9999999999997" height="20" as="geometry"/></mxCell><mxCell id="116" value="2 days" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.00000000000205" y="280.0000000000012" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="117" value="26.04.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.00000000000233" y="280.0000000000012" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="118" value="27.04.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000018" y="280.0000000000015" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="119" value="12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="49.99999999999997" y="300.00000000000153" width="40" height="20" as="geometry"/></mxCell><mxCell id="120" value="Mounting equipment" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="89.99999999999997" y="300.00000000000153" width="320" height="20" as="geometry"/></mxCell><mxCell id="121" value="3 days" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.0000000000017" y="300.0000000000015" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="122" value="30.04.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.000000000002" y="300.0000000000015" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="123" value="2.05.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000015" y="300.00000000000176" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="124" value="13" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="49.999999999999986" y="320.0000000000014" width="40" height="20" as="geometry"/></mxCell><mxCell id="125" value="Wiring" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="89.99999999999999" y="320.0000000000014" width="320" height="20" as="geometry"/></mxCell><mxCell id="126" value="10 days" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.0000000000017" y="320.00000000000136" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="127" value="3.05.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.000000000002" y="320.00000000000136" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="128" value="16.05.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000015" y="320.00000000000165" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="129" value="14" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="49.999999999999716" y="340.0000000000018" width="40" height="20" as="geometry"/></mxCell><mxCell id="130" value="Testing" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="89.99999999999972" y="340.0000000000018" width="320.0000000000003" height="20" as="geometry"/></mxCell><mxCell id="131" value="2 days" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.0000000000014" y="340.00000000000176" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="132" value="17.05.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.00000000000176" y="340.00000000000176" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="133" value="18.05.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000011" y="340.00000000000205" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="134" value="15" style="strokeColor=#DEEDFF;fillColor=#FFFFFF" vertex="1" parent="1"><mxGeometry x="49.99999999999963" y="360.0000000000018" width="40" height="20" as="geometry"/></mxCell><mxCell id="135" value="Packaging" style="align=left;strokeColor=#DEEDFF;fillColor=#FFFFFF" vertex="1" parent="1"><mxGeometry x="89.99999999999963" y="360.0000000000018" width="320.00000000000034" height="20" as="geometry"/></mxCell><mxCell id="136" value="1 day" style="strokeColor=#DEEDFF;fillColor=#FFFFFF" vertex="1" parent="1"><mxGeometry x="410.00000000000136" y="360.00000000000176" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="137" value="21.05.12" style="strokeColor=#DEEDFF;fillColor=#FFFFFF" vertex="1" parent="1"><mxGeometry x="490.00000000000165" y="360.00000000000176" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="138" value="21.05.12" style="strokeColor=#DEEDFF;fillColor=#FFFFFF" vertex="1" parent="1"><mxGeometry x="570.0000000000011" y="360.00000000000205" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="139" value="16" style="strokeColor=#DEEDFF;fillColor=#CCE5FF" vertex="1" parent="1"><mxGeometry x="49.999999999999616" y="380.00000000000205" width="40" height="20" as="geometry"/></mxCell><mxCell id="140" value="Field" style="align=left;strokeColor=#DEEDFF;fillColor=#CCE5FF" vertex="1" parent="1"><mxGeometry x="89.99999999999962" y="380.00000000000205" width="320.0000000000004" height="20" as="geometry"/></mxCell><mxCell id="141" value="31 days" style="strokeColor=#DEEDFF;fillColor=#CCE5FF" vertex="1" parent="1"><mxGeometry x="410.00000000000136" y="380.00000000000205" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="142" value="19.04.12" style="strokeColor=#DEEDFF;fillColor=#CCE5FF" vertex="1" parent="1"><mxGeometry x="490.00000000000165" y="380.00000000000205" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="143" value="31.05.12" style="strokeColor=#DEEDFF;fillColor=#CCE5FF" vertex="1" parent="1"><mxGeometry x="570.0000000000011" y="380.0000000000023" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="144" value="17" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="50.000000000001" y="400.0000000000023" width="40" height="20" as="geometry"/></mxCell><mxCell id="145" value="Field preparations and digging" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="90.000000000001" y="400.0000000000023" width="319.999999999999" height="20" as="geometry"/></mxCell><mxCell id="146" value="7 days" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.00000000000273" y="400.0000000000022" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="147" value="19.04.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.000000000003" y="400.0000000000022" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="148" value="27.04.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000025" y="400.0000000000025" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="149" value="18" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="50.000000000001016" y="420.00000000000216" width="40" height="20" as="geometry"/></mxCell><mxCell id="150" value="Cable laying" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="90.00000000000102" y="420.00000000000216" width="319.999999999999" height="20" as="geometry"/></mxCell><mxCell id="151" value="4 days" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.00000000000273" y="420.0000000000021" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="152" value="30.04.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.000000000003" y="420.0000000000021" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="153" value="3.05.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000025" y="420.0000000000024" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="154" value="19" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="50.000000000000746" y="440.00000000000256" width="40" height="20" as="geometry"/></mxCell><mxCell id="155" value="Installation laying" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="90.00000000000074" y="440.00000000000256" width="319.99999999999926" height="20" as="geometry"/></mxCell><mxCell id="156" value="13 days" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.00000000000244" y="440.0000000000025" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="157" value="4.05.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.0000000000028" y="440.0000000000025" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="158" value="22.05.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000023" y="440.0000000000028" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="159" value="20" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="50.00000000000066" y="460.00000000000256" width="40" height="20" as="geometry"/></mxCell><mxCell id="160" value="Mount distribution boards" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="90.00000000000065" y="460.00000000000256" width="319.9999999999993" height="20" as="geometry"/></mxCell><mxCell id="161" value="1 day" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.0000000000024" y="460.0000000000025" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="162" value="23.05.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.0000000000027" y="460.0000000000025" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="163" value="23.05.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000023" y="460.0000000000028" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="164" value="21" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="50.00000000000065" y="480.00000000000284" width="40" height="20" as="geometry"/></mxCell><mxCell id="165" value="Wiring distribution boards" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="90.00000000000065" y="480.00000000000284" width="319.9999999999993" height="20" as="geometry"/></mxCell><mxCell id="166" value="4 days" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.0000000000024" y="480.00000000000273" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="167" value="24.05.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.0000000000027" y="480.00000000000273" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="168" value="29.05.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000023" y="480.00000000000307" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="169" value="22" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="50.00000000000137" y="500.00000000000307" width="40" height="20" as="geometry"/></mxCell><mxCell id="170" value="Testing" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="90.00000000000136" y="500.00000000000307" width="319.99999999999864" height="20" as="geometry"/></mxCell><mxCell id="171" value="2 days" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.0000000000031" y="500.000000000003" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="172" value="30.05.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.0000000000034" y="500.000000000003" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="173" value="31.05.12" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.000000000003" y="500.0000000000033" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="174" value="23" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="50.000000000001386" y="520.000000000003" width="40" height="20" as="geometry"/></mxCell><mxCell id="175" value="" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="90.00000000000139" y="520.000000000003" width="319.99999999999864" height="20" as="geometry"/></mxCell><mxCell id="176" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.0000000000031" y="520.000000000003" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="177" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.0000000000034" y="520.000000000003" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="178" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.000000000003" y="520.0000000000032" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="179" value="24" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="50.000000000001116" y="540.0000000000034" width="40" height="20" as="geometry"/></mxCell><mxCell id="180" value="" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="90.00000000000111" y="540.0000000000034" width="319.99999999999886" height="20" as="geometry"/></mxCell><mxCell id="181" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.00000000000284" y="540.0000000000033" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="182" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.0000000000032" y="540.0000000000033" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="183" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000026" y="540.0000000000036" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="184" value="25" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="50.00000000000103" y="560.0000000000034" width="40" height="20" as="geometry"/></mxCell><mxCell id="185" value="" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="90.00000000000102" y="560.0000000000034" width="319.999999999999" height="20" as="geometry"/></mxCell><mxCell id="186" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.0000000000028" y="560.0000000000033" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="187" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.00000000000307" y="560.0000000000033" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="188" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000026" y="560.0000000000036" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="189" value="26" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="50.000000000001016" y="580.0000000000036" width="40" height="20" as="geometry"/></mxCell><mxCell id="190" value="" style="align=left;strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="90.000000000001" y="580.0000000000036" width="319.999999999999" height="20" as="geometry"/></mxCell><mxCell id="191" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="410.0000000000028" y="580.0000000000035" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="192" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="490.00000000000307" y="580.0000000000035" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="193" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="570.0000000000026" y="580.0000000000039" width="80.00000000000028" height="20" as="geometry"/></mxCell><mxCell id="194" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="670.000000000002" y="80.0000000000039" width="20" height="520" as="geometry"/></mxCell><mxCell id="195" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="690.000000000002" y="80.0000000000039" width="20" height="520" as="geometry"/></mxCell><mxCell id="196" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="710.000000000002" y="80.0000000000039" width="20" height="520" as="geometry"/></mxCell><mxCell id="197" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="730.000000000002" y="80.0000000000039" width="20" height="520" as="geometry"/></mxCell><mxCell id="198" value="" style="strokeColor=#DEEDFF;fillColor=#D4E1FF" vertex="1" parent="1"><mxGeometry x="750.000000000002" y="80.00000000000753" width="20" height="520" as="geometry"/></mxCell><mxCell id="199" value="" style="strokeColor=#DEEDFF;fillColor=#D4E1FF" vertex="1" parent="1"><mxGeometry x="770.000000000002" y="80.00000000000753" width="20" height="520" as="geometry"/></mxCell><mxCell id="200" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="790.000000000002" y="80.00000000000753" width="20" height="520" as="geometry"/></mxCell><mxCell id="201" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="810.0000000000016" y="80.00000000000753" width="20" height="520" as="geometry"/></mxCell><mxCell id="202" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="830.0000000000016" y="80.00000000001117" width="20" height="520" as="geometry"/></mxCell><mxCell id="203" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="850.0000000000016" y="80.00000000001117" width="20" height="520" as="geometry"/></mxCell><mxCell id="204" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="870.0000000000016" y="80.00000000001117" width="20" height="520" as="geometry"/></mxCell><mxCell id="205" value="" style="strokeColor=#DEEDFF;fillColor=#D4E1FF" vertex="1" parent="1"><mxGeometry x="890.0000000000018" y="80.00000000001117" width="20" height="520" as="geometry"/></mxCell><mxCell id="206" value="" style="strokeColor=#DEEDFF;fillColor=#D4E1FF" vertex="1" parent="1"><mxGeometry x="910.0000000000018" y="80.00000000001481" width="20" height="520" as="geometry"/></mxCell><mxCell id="207" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="930.0000000000018" y="80.00000000001481" width="20" height="520" as="geometry"/></mxCell><mxCell id="208" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="950.0000000000018" y="80.00000000001481" width="20" height="520" as="geometry"/></mxCell><mxCell id="209" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="970.0000000000018" y="80.00000000000026" width="20" height="520" as="geometry"/></mxCell><mxCell id="210" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="990.0000000000018" y="80.0000000000039" width="20" height="520" as="geometry"/></mxCell><mxCell id="211" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1010.0000000000018" y="80.0000000000039" width="20" height="520" as="geometry"/></mxCell><mxCell id="212" value="" style="strokeColor=#DEEDFF;fillColor=#D4E1FF" vertex="1" parent="1"><mxGeometry x="1030.0000000000018" y="80.0000000000039" width="20" height="520" as="geometry"/></mxCell><mxCell id="213" value="" style="strokeColor=#DEEDFF;fillColor=#D4E1FF" vertex="1" parent="1"><mxGeometry x="1050.0000000000018" y="80.00000000001481" width="20" height="520" as="geometry"/></mxCell><mxCell id="214" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1070.0000000000018" y="80.00000000001845" width="20" height="520" as="geometry"/></mxCell><mxCell id="215" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1090.0000000000018" y="80.00000000001845" width="20" height="520" as="geometry"/></mxCell><mxCell id="216" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1110.0000000000018" y="80.00000000001845" width="20" height="520" as="geometry"/></mxCell><mxCell id="217" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1130.000000000002" y="80.00000000001845" width="20" height="520" as="geometry"/></mxCell><mxCell id="218" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1150.000000000002" y="80.00000000002208" width="20" height="520" as="geometry"/></mxCell><mxCell id="219" value="" style="strokeColor=#DEEDFF;fillColor=#D4E1FF" vertex="1" parent="1"><mxGeometry x="1170.000000000002" y="80.00000000002208" width="20" height="520" as="geometry"/></mxCell><mxCell id="220" value="" style="strokeColor=#DEEDFF;fillColor=#D4E1FF" vertex="1" parent="1"><mxGeometry x="1190.000000000002" y="80.00000000002208" width="20" height="520" as="geometry"/></mxCell><mxCell id="221" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1210.000000000002" y="80.00000000002208" width="20" height="520" as="geometry"/></mxCell><mxCell id="222" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1230.000000000002" y="80.00000000002572" width="20" height="520" as="geometry"/></mxCell><mxCell id="223" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1250.000000000002" y="80.00000000002572" width="20" height="520" as="geometry"/></mxCell><mxCell id="224" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1270.000000000002" y="80.00000000002572" width="20" height="520" as="geometry"/></mxCell><mxCell id="225" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1290.0000000000016" y="80.00000000002572" width="20" height="520" as="geometry"/></mxCell><mxCell id="226" value="" style="strokeColor=#DEEDFF;fillColor=#D4E1FF" vertex="1" parent="1"><mxGeometry x="1310.0000000000016" y="80.00000000002936" width="20" height="520" as="geometry"/></mxCell><mxCell id="227" value="" style="strokeColor=#DEEDFF;fillColor=#D4E1FF" vertex="1" parent="1"><mxGeometry x="1330.0000000000016" y="80.00000000002936" width="20" height="520" as="geometry"/></mxCell><mxCell id="228" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1350.0000000000016" y="80.00000000002936" width="20" height="520" as="geometry"/></mxCell><mxCell id="229" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1370.0000000000016" y="80.00000000002936" width="20" height="520" as="geometry"/></mxCell><mxCell id="230" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1390.0000000000016" y="80.000000000033" width="20" height="520" as="geometry"/></mxCell><mxCell id="231" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1410.0000000000016" y="80.000000000033" width="20" height="520" as="geometry"/></mxCell><mxCell id="232" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1430.0000000000016" y="80.000000000033" width="20" height="520" as="geometry"/></mxCell><mxCell id="233" value="" style="strokeColor=#DEEDFF;fillColor=#D4E1FF" vertex="1" parent="1"><mxGeometry x="1450.0000000000016" y="80.00000000001845" width="20" height="520" as="geometry"/></mxCell><mxCell id="234" value="" style="strokeColor=#DEEDFF;fillColor=#D4E1FF" vertex="1" parent="1"><mxGeometry x="1470.0000000000016" y="80.00000000002208" width="20" height="520" as="geometry"/></mxCell><mxCell id="235" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1490.0000000000016" y="80.00000000002208" width="20" height="520" as="geometry"/></mxCell><mxCell id="236" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1510.0000000000016" y="80.00000000002208" width="20" height="520" as="geometry"/></mxCell><mxCell id="237" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1530.0000000000016" y="80.000000000033" width="20" height="520" as="geometry"/></mxCell><mxCell id="238" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1550.0000000000016" y="80.00000000003664" width="20" height="520" as="geometry"/></mxCell><mxCell id="239" value="" style="strokeColor=#DEEDFF" vertex="1" parent="1"><mxGeometry x="1570.0000000000016" y="80.00000000003664" width="20" height="520" as="geometry"/></mxCell><mxCell id="240" value="" style="strokeColor=#DEEDFF;fillColor=#D4E1FF" vertex="1" parent="1"><mxGeometry x="1590.0000000000016" y="80.00000000003664" width="20" height="520" as="geometry"/></mxCell><mxCell id="241" value="" style="strokeColor=#DEEDFF;fillColor=#D4E1FF" vertex="1" parent="1"><mxGeometry x="1610.0000000000018" y="80.00000000003664" width="20" height="520" as="geometry"/></mxCell><mxCell id="2" value="Task Name" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="90" y="40" width="320" height="40" as="geometry"/></mxCell><mxCell id="3" value="" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="50" y="40" width="40" height="40" as="geometry"/></mxCell><mxCell id="4" value="16 Apr 12" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="650.0000000000018" y="40.000000000000114" width="140" height="20" as="geometry"/></mxCell><mxCell id="5" value="M" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="650.0000000000018" y="60.000000000000114" width="20" height="20" as="geometry"/></mxCell><mxCell id="6" value="T" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="670.0000000000018" y="60.000000000000114" width="20" height="20" as="geometry"/></mxCell><mxCell id="7" value="W" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="690.0000000000018" y="60.000000000000114" width="20" height="20" as="geometry"/></mxCell><mxCell id="8" value="T" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="710.0000000000018" y="60.000000000000114" width="20" height="20" as="geometry"/></mxCell><mxCell id="9" value="F" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="730.0000000000016" y="60.000000000000085" width="20" height="20" as="geometry"/></mxCell><mxCell id="10" value="S" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="750.0000000000016" y="60.000000000000085" width="20" height="20" as="geometry"/></mxCell><mxCell id="11" value="S" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="770.0000000000016" y="60.000000000000085" width="20" height="20" as="geometry"/></mxCell><mxCell id="12" value="Duration" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="410.00000000000176" y="40.000000000000064" width="80.00000000000006" height="40.00000000000001" as="geometry"/></mxCell><mxCell id="13" value="Start" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="490.0000000000018" y="40.000000000000064" width="80.00000000000006" height="40.00000000000001" as="geometry"/></mxCell><mxCell id="14" value="ETA" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="570.0000000000019" y="40.00000000000011" width="80.00000000000006" height="40.00000000000001" as="geometry"/></mxCell><mxCell id="15" value="23 Apr 12" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="790.0000000000018" y="40.000000000000114" width="140" height="20" as="geometry"/></mxCell><mxCell id="16" value="M" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="790.0000000000018" y="60.000000000000114" width="20" height="20" as="geometry"/></mxCell><mxCell id="17" value="T" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="810.0000000000018" y="60.000000000000114" width="20" height="20" as="geometry"/></mxCell><mxCell id="18" value="W" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="830.0000000000018" y="60.000000000000114" width="20" height="20" as="geometry"/></mxCell><mxCell id="19" value="T" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="850.0000000000018" y="60.000000000000114" width="20" height="20" as="geometry"/></mxCell><mxCell id="20" value="F" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="870.0000000000016" y="60.000000000000085" width="20" height="20" as="geometry"/></mxCell><mxCell id="21" value="S" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="890.0000000000016" y="60.000000000000085" width="20" height="20" as="geometry"/></mxCell><mxCell id="22" value="S" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="910.0000000000016" y="60.000000000000085" width="20" height="20" as="geometry"/></mxCell><mxCell id="23" value="30 Apr 12" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="930.0000000000018" y="40.000000000000064" width="140" height="20" as="geometry"/></mxCell><mxCell id="24" value="M" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="930.0000000000018" y="60.000000000000064" width="20" height="20" as="geometry"/></mxCell><mxCell id="25" value="T" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="950.0000000000018" y="60.000000000000064" width="20" height="20" as="geometry"/></mxCell><mxCell id="26" value="W" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="970.0000000000018" y="60.000000000000064" width="20" height="20" as="geometry"/></mxCell><mxCell id="27" value="T" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="990.0000000000018" y="60.000000000000064" width="20" height="20" as="geometry"/></mxCell><mxCell id="28" value="F" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1010.0000000000016" y="60.000000000000036" width="20" height="20" as="geometry"/></mxCell><mxCell id="29" value="S" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1030.0000000000016" y="60.000000000000036" width="20" height="20" as="geometry"/></mxCell><mxCell id="30" value="S" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1050.0000000000016" y="60.000000000000036" width="20" height="20" as="geometry"/></mxCell><mxCell id="31" value="7 May 12" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1070.0000000000018" y="40.000000000000036" width="140" height="20" as="geometry"/></mxCell><mxCell id="32" value="M" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1070.0000000000018" y="60.000000000000036" width="20" height="20" as="geometry"/></mxCell><mxCell id="33" value="T" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1090.0000000000018" y="60.000000000000036" width="20" height="20" as="geometry"/></mxCell><mxCell id="34" value="W" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1110.0000000000018" y="60.000000000000036" width="20" height="20" as="geometry"/></mxCell><mxCell id="35" value="T" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1130.0000000000018" y="60.000000000000036" width="20" height="20" as="geometry"/></mxCell><mxCell id="36" value="F" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1150.0000000000016" y="60.00000000000001" width="20" height="20" as="geometry"/></mxCell><mxCell id="37" value="S" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1170.0000000000016" y="60.00000000000001" width="20" height="20" as="geometry"/></mxCell><mxCell id="38" value="S" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1190.0000000000016" y="60.00000000000001" width="20" height="20" as="geometry"/></mxCell><mxCell id="39" value="14 May 12" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1210.0000000000018" y="40.000000000000036" width="140" height="20" as="geometry"/></mxCell><mxCell id="40" value="M" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1210.0000000000018" y="60.00000000000004" width="20" height="20" as="geometry"/></mxCell><mxCell id="41" value="T" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1230.0000000000018" y="60.00000000000004" width="20" height="20" as="geometry"/></mxCell><mxCell id="42" value="W" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1250.0000000000018" y="60.00000000000004" width="20" height="20" as="geometry"/></mxCell><mxCell id="43" value="T" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1270.0000000000018" y="60.00000000000004" width="20" height="20" as="geometry"/></mxCell><mxCell id="44" value="F" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1290.0000000000016" y="60.000000000000014" width="20" height="20" as="geometry"/></mxCell><mxCell id="45" value="S" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1310.0000000000016" y="60.000000000000014" width="20" height="20" as="geometry"/></mxCell><mxCell id="46" value="S" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1330.0000000000016" y="60.000000000000014" width="20" height="20" as="geometry"/></mxCell><mxCell id="47" value="21 May 12" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1350.0000000000018" y="40" width="140" height="20" as="geometry"/></mxCell><mxCell id="48" value="M" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1350.0000000000018" y="60.00000000000001" width="20" height="20" as="geometry"/></mxCell><mxCell id="49" value="T" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1370.0000000000018" y="60.00000000000001" width="20" height="20" as="geometry"/></mxCell><mxCell id="50" value="W" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1390.0000000000018" y="60.00000000000001" width="20" height="20" as="geometry"/></mxCell><mxCell id="51" value="T" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1410.0000000000018" y="60.00000000000001" width="20" height="20" as="geometry"/></mxCell><mxCell id="52" value="F" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1430.0000000000016" y="59.99999999999998" width="20" height="20" as="geometry"/></mxCell><mxCell id="53" value="S" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1450.0000000000016" y="59.99999999999998" width="20" height="20" as="geometry"/></mxCell><mxCell id="54" value="S" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1470.0000000000016" y="59.99999999999998" width="20" height="20" as="geometry"/></mxCell><mxCell id="55" value="28 May 12" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1490.0000000000018" y="40.000000000000114" width="140" height="20" as="geometry"/></mxCell><mxCell id="56" value="M" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1490.0000000000018" y="60.000000000000114" width="20" height="20" as="geometry"/></mxCell><mxCell id="57" value="T" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1510.0000000000018" y="60.000000000000114" width="20" height="20" as="geometry"/></mxCell><mxCell id="58" value="W" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1530.0000000000018" y="60.000000000000114" width="20" height="20" as="geometry"/></mxCell><mxCell id="59" value="T" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1550.0000000000018" y="60.000000000000114" width="20" height="20" as="geometry"/></mxCell><mxCell id="60" value="F" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1570.0000000000016" y="60.000000000000085" width="20" height="20" as="geometry"/></mxCell><mxCell id="61" value="S" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1590.0000000000016" y="60.000000000000085" width="20" height="20" as="geometry"/></mxCell><mxCell id="62" value="S" style="fillColor=#003366;strokeColor=#FFFFFF;strokeWidth=2;fontColor=#FFFFFF;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1610.0000000000016" y="60.000000000000085" width="20" height="20" as="geometry"/></mxCell><mxCell id="242" value="" style="shape=mxgraph.flowchart.process;fillColor=#660000;strokeColor=#000000;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="650.0000000000015" y="100.0000000000004" width="940.0000000000006" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="243" value="" style="shape=mxgraph.arrows.bent_right_arrow;fillColor=#000000;strokeColor=none;strokeWidth=2;direction=south" vertex="1" parent="1"><mxGeometry x="670.000000000002" y="129.99999999999963" width="10.000000000000341" height="9.99999999999983" as="geometry"/></mxCell><mxCell id="244" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="650.0000000000032" y="119.99999999999972" width="19.999999999998863" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="245" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="670.0000000000018" y="140.00000000000057" width="40.00000000000023" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="246" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="710.0000000000018" y="160.00000000000085" width="19.999999999998863" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="247" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="830.0000000000016" y="200.0000000000016" width="739.9999999999995" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="248" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="1570.0000000000032" y="220.0000000000014" width="19.999999999998863" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="249" value="" style="shape=mxgraph.arrows.bent_right_arrow;fillColor=#000000;strokeColor=none;strokeWidth=2;direction=south" vertex="1" parent="1"><mxGeometry x="710.000000000001" y="149.99999999999946" width="10.000000000000341" height="9.99999999999983" as="geometry"/></mxCell><mxCell id="250" value="" style="shape=mxgraph.arrows.bent_right_arrow;fillColor=#000000;strokeColor=none;strokeWidth=2;direction=south" vertex="1" parent="1"><mxGeometry x="730.0000000000007" y="170.00000000000009" width="10.000000000000341" height="9.99999999999983" as="geometry"/></mxCell><mxCell id="251" value="" style="shape=mxgraph.arrows.bent_right_arrow;fillColor=#000000;strokeColor=none;strokeWidth=2;direction=south" vertex="1" parent="1"><mxGeometry x="1570.000000000002" y="210.0000000000016" width="10.000000000000341" height="9.99999999999983" as="geometry"/></mxCell><mxCell id="252" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="730.0000000000019" y="179.99999999999991" width="100.00000000000011" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="253" value="" style="shape=mxgraph.arrows.bent_right_arrow;fillColor=#000000;strokeColor=none;strokeWidth=2;direction=south" vertex="1" parent="1"><mxGeometry x="830.000000000002" y="189.99999999999983" width="10.000000000000341" height="9.99999999999983" as="geometry"/></mxCell><mxCell id="254" value="" style="shape=mxgraph.flowchart.process;fillColor=#660000;strokeColor=#000000;strokeWidth=2;opacity=100" vertex="1" parent="1"><mxGeometry x="650.000000000001" y="79.99999999999997" width="940.0000000000006" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="255" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="810" y="260.00000000000165" width="40" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="256" value="" style="shape=mxgraph.flowchart.process;fillColor=#660000;strokeColor=#000000;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="810" y="240.00000000000054" width="560" height="19.9999999999998" as="geometry"/></mxCell><mxCell id="257" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="849.9999999999999" y="280.00000000000193" width="80.00000000000011" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="258" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="929.9999999999999" y="300.0000000000012" width="60.000000000000114" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="259" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="990.0000000000019" y="320.00000000000045" width="279.99999999999807" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="260" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="1270.000000000002" y="340.0000000000002" width="79.99999999999795" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="261" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="1350.0000000000039" y="360.0000000000001" width="19.999999999996135" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="262" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="710.0000000000022" y="400.000000000002" width="219.99999999999784" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="263" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="930.0000000000017" y="420.0000000000018" width="79.9999999999983" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="264" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="1010.0000000000035" y="440.00000000000165" width="379.9999999999965" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="265" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="1390.0000000000034" y="460.00000000000136" width="19.99999999999659" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="266" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="1410.0000000000052" y="480.0000000000035" width="119.99999999999477" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="267" value="" style="shape=mxgraph.flowchart.process;fillColor=#CC0000;strokeColor=none;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="1530" y="500.0000000000012" width="40" height="19.99999999999983" as="geometry"/></mxCell><mxCell id="268" value="" style="shape=mxgraph.flowchart.process;fillColor=#660000;strokeColor=#000000;strokeWidth=2;opacity=50" vertex="1" parent="1"><mxGeometry x="710" y="380.00000000000273" width="860" height="19.999999999999773" as="geometry"/></mxCell><mxCell id="269" value="" style="shape=mxgraph.arrows.bent_right_arrow;fillColor=#000000;strokeColor=none;strokeWidth=2;direction=south" vertex="1" parent="1"><mxGeometry x="850.0000000000024" y="270.0000000000021" width="10.000000000000341" height="9.99999999999983" as="geometry"/></mxCell><mxCell id="270" value="" style="shape=mxgraph.arrows.bent_right_arrow;fillColor=#000000;strokeColor=none;strokeWidth=2;direction=south" vertex="1" parent="1"><mxGeometry x="929.9999999999998" y="290.00000000000193" width="10.000000000000341" height="9.99999999999983" as="geometry"/></mxCell><mxCell id="271" value="" style="shape=mxgraph.arrows.bent_right_arrow;fillColor=#000000;strokeColor=none;strokeWidth=2;direction=south" vertex="1" parent="1"><mxGeometry x="990" y="310.00000000000193" width="10.000000000000341" height="9.99999999999983" as="geometry"/></mxCell><mxCell id="272" value="" style="shape=mxgraph.arrows.bent_right_arrow;fillColor=#000000;strokeColor=none;strokeWidth=2;direction=south" vertex="1" parent="1"><mxGeometry x="1270" y="330.0000000000368" width="10.000000000000341" height="9.99999999999983" as="geometry"/></mxCell><mxCell id="273" value="" style="shape=mxgraph.arrows.bent_right_arrow;fillColor=#000000;strokeColor=none;strokeWidth=2;direction=south" vertex="1" parent="1"><mxGeometry x="1350" y="350.0000000000023" width="10.000000000000341" height="9.99999999999983" as="geometry"/></mxCell><mxCell id="274" value="" style="shape=mxgraph.arrows.bent_right_arrow;fillColor=#000000;strokeColor=none;strokeWidth=2;direction=south" vertex="1" parent="1"><mxGeometry x="930.0000000000018" y="410.0000000000027" width="10.000000000000341" height="9.99999999999983" as="geometry"/></mxCell><mxCell id="275" value="" style="shape=mxgraph.arrows.bent_right_arrow;fillColor=#000000;strokeColor=none;strokeWidth=2;direction=south" vertex="1" parent="1"><mxGeometry x="1010.0000000000036" y="430.00000000000296" width="10.000000000000341" height="9.99999999999983" as="geometry"/></mxCell><mxCell id="276" value="" style="shape=mxgraph.arrows.bent_right_arrow;fillColor=#000000;strokeColor=none;strokeWidth=2;direction=south" vertex="1" parent="1"><mxGeometry x="1390.0000000000036" y="450.000000000003" width="10.000000000000341" height="9.99999999999983" as="geometry"/></mxCell><mxCell id="277" value="" style="shape=mxgraph.arrows.bent_right_arrow;fillColor=#000000;strokeColor=none;strokeWidth=2;direction=south" vertex="1" parent="1"><mxGeometry x="1410" y="470.00000000000375" width="10.000000000000341" height="9.99999999999983" as="geometry"/></mxCell><mxCell id="278" value="" style="shape=mxgraph.arrows.bent_right_arrow;fillColor=#000000;strokeColor=none;strokeWidth=2;direction=south" vertex="1" parent="1"><mxGeometry x="1530.0000000000018" y="490.00000000000136" width="10.000000000000341" height="9.99999999999983" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/lean1.xml b/public/assets/plugins/mxgraph/templates/xml/lean1.xml
new file mode 100644
index 0000000..bc7b3ad
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/lean1.xml
@@ -0,0 +1 @@
+<mxGraphModel grid="1" guides="1" tooltips="1" connect="1" fold="1" page="0" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="2" value="" style="shape=mxgraph.lean_mapping.data_box;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="160" y="552" width="110" height="160" as="geometry"/></mxCell><mxCell id="3" value="C/T 10 min" style="strokeColor=none;align=center" vertex="1" parent="1"><mxGeometry x="160.5787037037037" y="553.7361111111111" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="6" value="U/T 60%" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="161.89814814814815" y="584.5694444444445" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="7" value="Scrap 6/day" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="161.48148148148152" y="617.1388888888889" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="8" value="Shifts 1" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="161.64351851851853" y="649.1296296296297" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="9" value="U/D 45" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="161.22685185185185" y="681.1203703703704" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="10" value="" style="shape=mxgraph.lean_mapping.data_box;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="390" y="555.2060185185186" width="110" height="160" as="geometry"/></mxCell><mxCell id="11" value="C/T 15 min" style="strokeColor=none;align=center" vertex="1" parent="1"><mxGeometry x="390.5787037037037" y="556.9421296296298" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="12" value="U/T 60%" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="391.89814814814815" y="587.775462962963" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="13" value="Scrap 1/day" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="391.4814814814815" y="620.3449074074075" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="14" value="Shifts 1" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="391.6435185185185" y="652.3356481481483" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="15" value="U/D 10" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="391.22685185185185" y="684.326388888889" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="16" value="" style="shape=mxgraph.lean_mapping.data_box;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="618.912037037037" y="555.2060185185186" width="110" height="160" as="geometry"/></mxCell><mxCell id="17" value="C/T 1 hour" style="strokeColor=none;align=center" vertex="1" parent="1"><mxGeometry x="622.4907407407406" y="556.9421296296298" width="104.26851851851848" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="18" value="U/T 60%" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="620.8101851851851" y="587.775462962963" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="19" value="Scrap" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="620.3935185185185" y="620.3449074074075" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="20" value="Shifts 1" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="620.5555555555554" y="652.3356481481483" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="21" value="U/D 65" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="620.1388888888888" y="684.326388888889" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="23" value="" style="shape=mxgraph.lean_mapping.data_box;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="848.912037037037" y="554.4305555555557" width="110" height="160" as="geometry"/></mxCell><mxCell id="24" value="C/T 5 min" style="strokeColor=none;align=center" vertex="1" parent="1"><mxGeometry x="853.4907407407406" y="556.1666666666667" width="103.26851851851848" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="25" value="U/T 60%" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="850.8101851851851" y="587.0000000000001" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="26" value="Scrap 2/day" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="850.3935185185185" y="619.5694444444446" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="27" value="Shifts 1" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="850.5555555555554" y="651.5601851851853" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="28" value="U/D 45" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="850.1388888888888" y="683.5509259259261" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="29" value="" style="shape=mxgraph.lean_mapping.data_box;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1078.912037037037" y="554.4305555555557" width="110" height="160" as="geometry"/></mxCell><mxCell id="30" value="C/T 2 hours" style="strokeColor=none;align=center" vertex="1" parent="1"><mxGeometry x="1082.4907407407406" y="556.1666666666667" width="104.26851851851848" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="31" value="U/T 60%" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="1080.8101851851852" y="587.0000000000001" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="32" value="Scrap" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="1080.3935185185185" y="619.5694444444446" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="33" value="Shifts 1" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="1080.5555555555554" y="651.5601851851853" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="34" value="U/D 30" style="strokeColor=none" vertex="1" parent="1"><mxGeometry x="1080.1388888888887" y="683.5509259259261" width="107.26851851851852" height="28.171296296296305" as="geometry"/></mxCell><mxCell id="35" value="3000" style="shape=mxgraph.lean_mapping.inventory_box;fillColor=white;strokeColor=black;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="76.22685185185185" y="553.7361111111111" width="50" height="40.77546296296293" as="geometry"/></mxCell><mxCell id="36" value="2000" style="shape=mxgraph.lean_mapping.inventory_box;fillColor=white;strokeColor=black;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="305" y="553.7361111111111" width="50" height="40.77546296296293" as="geometry"/></mxCell><mxCell id="40" value="" vertex="1" parent="1"><mxGeometry x="159.74537037037038" y="432" width="108.10185185185185" height="60" as="geometry"/></mxCell><mxCell id="42" value="2500" style="shape=mxgraph.lean_mapping.inventory_box;fillColor=white;strokeColor=black;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="535" y="556.1666666666667" width="50" height="40.77546296296293" as="geometry"/></mxCell><mxCell id="43" value="3500" style="shape=mxgraph.lean_mapping.inventory_box;fillColor=white;strokeColor=black;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="765.1388888888888" y="553.7361111111111" width="50" height="40.77546296296293" as="geometry"/></mxCell><mxCell id="44" value="1500" style="shape=mxgraph.lean_mapping.inventory_box;fillColor=white;strokeColor=black;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="995.1388888888887" y="554.4305555555557" width="50" height="40.77546296296293" as="geometry"/></mxCell><mxCell id="45" value="2000" style="shape=mxgraph.lean_mapping.inventory_box;fillColor=white;strokeColor=black;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="1223.912037037037" y="553.7361111111111" width="50" height="40.77546296296293" as="geometry"/></mxCell><mxCell id="46" value="" vertex="1" parent="1"><mxGeometry x="391.89814814814815" y="432" width="108.10185185185185" height="60" as="geometry"/></mxCell><mxCell id="47" value="" vertex="1" parent="1"><mxGeometry x="620.810185185185" y="432" width="108.10185185185185" height="60" as="geometry"/></mxCell><mxCell id="48" value="" vertex="1" parent="1"><mxGeometry x="849.7222222222222" y="432" width="108.10185185185185" height="60" as="geometry"/></mxCell><mxCell id="49" value="" vertex="1" parent="1"><mxGeometry x="1080.810185185185" y="432" width="108.10185185185185" height="60" as="geometry"/></mxCell><mxCell id="50" value="" style="shape=mxgraph.lean_mapping.operator;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="240" y="452" width="20" height="20" as="geometry"/></mxCell><mxCell id="51" value="" style="shape=mxgraph.lean_mapping.operator;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="470" y="452" width="20" height="20" as="geometry"/></mxCell><mxCell id="52" value="" style="shape=mxgraph.lean_mapping.operator;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="700" y="452" width="20" height="20" as="geometry"/></mxCell><mxCell id="53" value="" style="shape=mxgraph.lean_mapping.operator;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="930" y="452" width="20" height="20" as="geometry"/></mxCell><mxCell id="54" value="" style="shape=mxgraph.lean_mapping.operator;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1160" y="452" width="20" height="20" as="geometry"/></mxCell><mxCell id="55" value="" style="shape=mxgraph.lean_mapping.operator;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="630" y="452" width="20" height="20" as="geometry"/></mxCell><mxCell id="56" value="" style="shape=mxgraph.lean_mapping.operator;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="170" y="452" width="20" height="20" as="geometry"/></mxCell><mxCell id="57" value="machine" style="rounded=1" vertex="1" parent="1"><mxGeometry x="150" y="422" width="80" height="20" as="geometry"/></mxCell><mxCell id="58" value="inspect" style="rounded=1" vertex="1" parent="1"><mxGeometry x="380" y="422" width="80" height="20" as="geometry"/></mxCell><mxCell id="59" value="stock" style="rounded=1" vertex="1" parent="1"><mxGeometry x="610" y="422" width="80" height="20" as="geometry"/></mxCell><mxCell id="60" value="cln / deburr" style="rounded=1" vertex="1" parent="1"><mxGeometry x="840" y="422" width="80" height="20" as="geometry"/></mxCell><mxCell id="61" value="package" style="rounded=1" vertex="1" parent="1"><mxGeometry x="1070" y="422" width="80" height="20" as="geometry"/></mxCell><mxCell id="62" value="Production &#xa;supervision" vertex="1" parent="1"><mxGeometry x="613.1249999999999" y="232" width="120" height="60" as="geometry"/></mxCell><mxCell id="63" edge="1" parent="1" source="62" target="57"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="64" edge="1" parent="1" source="62" target="58"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="65" edge="1" parent="1" source="62" target="59"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="66" edge="1" parent="1" source="62" target="60"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="67" edge="1" parent="1" source="62" target="61"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="68" value="daily" style="shape=mxgraph.lean_mapping.go_see_production_scheduling;fillColor=white;strokeColor=black;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="380" y="342" width="50" height="30" as="geometry"/></mxCell><mxCell id="69" value="daily" style="shape=mxgraph.lean_mapping.go_see_production_scheduling;fillColor=white;strokeColor=black;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="498.912037037037" y="342" width="50" height="30" as="geometry"/></mxCell><mxCell id="70" value="daily" style="shape=mxgraph.lean_mapping.go_see_production_scheduling;fillColor=white;strokeColor=black;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="640" y="342" width="50" height="30" as="geometry"/></mxCell><mxCell id="71" value="daily" style="shape=mxgraph.lean_mapping.go_see_production_scheduling;fillColor=white;strokeColor=black;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="765.1388888888888" y="342" width="50" height="30" as="geometry"/></mxCell><mxCell id="72" value="daily" style="shape=mxgraph.lean_mapping.go_see_production_scheduling;fillColor=white;strokeColor=black;strokeWidth=2;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="890" y="342" width="50" height="30" as="geometry"/></mxCell><mxCell id="73" value="" style="shape=mxgraph.lean_mapping.truck_shipment;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="76.22685185185185" y="274" width="89" height="98" as="geometry"/></mxCell><mxCell id="74" value="incoming&#xa;shipment" style="strokeColor=none;fontSize=10" vertex="1" parent="1"><mxGeometry x="79.22685185185185" y="277" width="51" height="74" as="geometry"/></mxCell><mxCell id="75" value="" style="shape=mxgraph.lean_mapping.truck_shipment;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1230.2268518518517" y="279" width="89" height="98" as="geometry"/></mxCell><mxCell id="76" value="outgoing&#xa;shipment" style="strokeColor=none;fontSize=10" vertex="1" parent="1"><mxGeometry x="1233.2268518518517" y="282" width="51" height="74" as="geometry"/></mxCell><mxCell id="77" value="" style="shape=mxgraph.lean_mapping.outside_sources;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="32" y="74" width="118" height="91" as="geometry"/></mxCell><mxCell id="78" value="supplier" style="strokeColor=none;fontSize=12" vertex="1" parent="1"><mxGeometry x="35.22685185185185" y="104" width="113" height="59" as="geometry"/></mxCell><mxCell id="79" value="" style="shape=mxgraph.lean_mapping.outside_sources;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1226" y="88" width="118" height="91" as="geometry"/></mxCell><mxCell id="80" value="customer" style="strokeColor=none;fontSize=12" vertex="1" parent="1"><mxGeometry x="1229.2268518518517" y="118" width="113" height="59" as="geometry"/></mxCell><mxCell id="81" edge="1" parent="1" source="78" target="74"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="83" edge="1" parent="1" source="75" target="80"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="84" value="" style="shape=mxgraph.lean_mapping.push_arrow;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="281.5" y="447" width="97" height="30" as="geometry"/></mxCell><mxCell id="85" value="" style="shape=mxgraph.lean_mapping.push_arrow;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="511.5" y="447" width="97" height="30" as="geometry"/></mxCell><mxCell id="86" value="" style="shape=mxgraph.lean_mapping.push_arrow;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="741.6388888888888" y="447" width="97" height="30" as="geometry"/></mxCell><mxCell id="87" value="" style="shape=mxgraph.lean_mapping.push_arrow;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="971.6388888888887" y="447" width="97" height="30" as="geometry"/></mxCell><mxCell id="88" value="Production &#xa;plan" vertex="1" parent="1"><mxGeometry x="614.8611111111109" y="140" width="120" height="60" as="geometry"/></mxCell><mxCell id="89" value="Business&#xa;strategy" vertex="1" parent="1"><mxGeometry x="614.8611111111109" y="59.5" width="120" height="60" as="geometry"/></mxCell><mxCell id="90" edge="1" parent="1" source="88" target="62"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="91" edge="1" parent="1" source="89" target="88"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="92" edge="1" parent="1" source="89" target="78"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="95" value="10 min" vertex="1" parent="1"><mxGeometry x="160" y="740" width="110" height="60" as="geometry"/></mxCell><mxCell id="96" value="15 min" vertex="1" parent="1"><mxGeometry x="390" y="740" width="110.94907407407408" height="60" as="geometry"/></mxCell><mxCell id="97" value="1 hour" vertex="1" parent="1"><mxGeometry x="620.1388888888888" y="740" width="110" height="60" as="geometry"/></mxCell><mxCell id="98" value="5 min" vertex="1" parent="1"><mxGeometry x="849.0277777777777" y="740" width="110" height="60" as="geometry"/></mxCell><mxCell id="99" value="2 hours" vertex="1" parent="1"><mxGeometry x="1079.0277777777778" y="740" width="110" height="60" as="geometry"/></mxCell><mxCell id="100" value="2 days" vertex="1" parent="1"><mxGeometry x="270" y="800" width="120" height="60" as="geometry"/></mxCell><mxCell id="101" value="5 days" vertex="1" parent="1"><mxGeometry x="500.9490740740741" y="800" width="119.05092592592592" height="60" as="geometry"/></mxCell><mxCell id="102" value="3 days" vertex="1" parent="1"><mxGeometry x="730" y="800" width="119.02777777777771" height="60" as="geometry"/></mxCell><mxCell id="103" value="4 days" vertex="1" parent="1"><mxGeometry x="959.0277777777777" y="800" width="120" height="60" as="geometry"/></mxCell><mxCell id="104" value="2 days" vertex="1" parent="1"><mxGeometry x="39.74537037037038" y="800" width="120" height="60" as="geometry"/></mxCell><mxCell id="106" value="3 hours&#xa;30 mins" style="strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1189.0277777777778" y="740" width="110" height="60" as="geometry"/></mxCell><mxCell id="107" value="16 days" style="strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1189.0277777777778" y="800" width="110" height="60" as="geometry"/></mxCell><mxCell id="108" value="C/T: cycle time" style="text" vertex="1" parent="1"><mxGeometry x="39.74537037037044" y="880" width="150.25462962962956" height="26" as="geometry"/></mxCell><mxCell id="109" value="U/T: utilization time" style="text" vertex="1" parent="1"><mxGeometry x="269.74537037037044" y="880" width="150.25462962962956" height="26" as="geometry"/></mxCell><mxCell id="110" value="U/D: units / day" style="text" vertex="1" parent="1"><mxGeometry x="499.74537037037044" y="877" width="150.25462962962956" height="26" as="geometry"/></mxCell><mxCell id="111" value="" style="shape=mxgraph.lean_mapping.outside_sources;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="250" y="154.5" width="118" height="91" as="geometry"/></mxCell><mxCell id="112" value="alternative&#xa;supplier" style="strokeColor=none;fontSize=12" vertex="1" parent="1"><mxGeometry x="253.22685185185185" y="184.5" width="113" height="59" as="geometry"/></mxCell><mxCell id="113" style="dashed=1" edge="1" parent="1" source="89" target="111"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="114" style="dashed=1" edge="1" parent="1" source="111" target="74"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="115" edge="1" parent="1" source="79" target="89"><mxGeometry relative="1" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/mindmap1.xml b/public/assets/plugins/mxgraph/templates/xml/mindmap1.xml
new file mode 100644
index 0000000..a3fc6b7
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/mindmap1.xml
@@ -0,0 +1 @@
+<mxGraphModel grid="1" guides="1" tooltips="1" connect="1" fold="1" page="0" background="#D9EAD3" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="2" value="Living Beings" style="rounded=1;fontSize=18;fontStyle=1;fillColor=#F9CB9C;strokeColor=#EA9999;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="990" y="690" width="350" height="110" as="geometry"/></mxCell><mxCell id="3" value="Human" style="rounded=1;fillColor=#EA9999;strokeColor=#85200C;strokeWidth=3;fontStyle=1;shadow=1" parent="1" vertex="1"><mxGeometry x="444.9999999999999" y="725" width="140" height="50" as="geometry"/></mxCell><mxCell id="4" value="Mammal" style="rounded=1;fillColor=#EA9999;strokeColor=#85200C;strokeWidth=3;fontStyle=1;shadow=1" parent="1" vertex="1"><mxGeometry x="540" y="255" width="140" height="50" as="geometry"/></mxCell><mxCell id="5" value="Insect" style="rounded=1;fillColor=#EA9999;strokeColor=#85200C;strokeWidth=3;fontStyle=1;shadow=1" parent="1" vertex="1"><mxGeometry x="1095" y="290" width="140" height="50" as="geometry"/></mxCell><mxCell id="6" value="Bird" style="rounded=1;fillColor=#EA9999;strokeColor=#85200C;strokeWidth=3;fontStyle=1;shadow=1" parent="1" vertex="1"><mxGeometry x="1680" y="310" width="140" height="50" as="geometry"/></mxCell><mxCell id="7" value="Fish" style="rounded=1;fillColor=#EA9999;strokeColor=#85200C;strokeWidth=3;fontStyle=1;shadow=1" parent="1" vertex="1"><mxGeometry x="1950" y="635" width="140" height="50" as="geometry"/></mxCell><mxCell id="8" value="Tree" style="rounded=1;fillColor=#EA9999;strokeColor=#85200C;strokeWidth=3;fontStyle=1;shadow=1" parent="1" vertex="1"><mxGeometry x="1780" y="1035" width="140" height="50" as="geometry"/></mxCell><mxCell id="9" value="Bacteria" style="rounded=1;fillColor=#EA9999;strokeColor=#85200C;strokeWidth=3;fontStyle=1;shadow=1" parent="1" vertex="1"><mxGeometry x="1450" y="1297.5" width="140" height="50" as="geometry"/></mxCell><mxCell id="10" value="Fungi" style="rounded=1;fillColor=#EA9999;strokeColor=#85200C;strokeWidth=3;fontStyle=1;shadow=1" parent="1" vertex="1"><mxGeometry x="920" y="1270" width="140" height="50" as="geometry"/></mxCell><mxCell id="11" value="Flower" style="rounded=1;fillColor=#EA9999;strokeColor=#85200C;strokeWidth=3;fontStyle=1;shadow=1" parent="1" vertex="1"><mxGeometry x="415" y="1135" width="140" height="50" as="geometry"/></mxCell><mxCell id="12" value="Caucasian" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="444.9999999999999" y="555" width="120" height="40" as="geometry"/></mxCell><mxCell id="13" value="Indian" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="584.9999999999999" y="605" width="130" height="40" as="geometry"/></mxCell><mxCell id="14" value="Eskimo" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="334.9999999999999" y="605" width="130" height="40" as="geometry"/></mxCell><mxCell id="15" value="Black" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="274.9999999999999" y="655" width="120" height="40" as="geometry"/></mxCell><mxCell id="16" value="Asian" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="244.99999999999991" y="775" width="120" height="40" as="geometry"/></mxCell><mxCell id="17" value="Oriental" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="254.99999999999991" y="720" width="110" height="40" as="geometry"/></mxCell><mxCell id="18" value="Hispano" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="374.9999999999999" y="845" width="120" height="40" as="geometry"/></mxCell><mxCell id="21" value="Ant" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="970" y="390" width="120" height="40" as="geometry"/></mxCell><mxCell id="51" value="Dolphin" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="350" y="360" width="130" height="40" as="geometry"/></mxCell><mxCell id="53" style="endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="2" target="3" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="54" style="endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="2" target="4" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="55" style="endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="2" target="5" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="56" style="endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="2" target="6" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="57" style="endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="2" target="7" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="58" style="endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="2" target="8" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="59" style="endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="2" target="9" edge="1"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="63" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="2" target="10" edge="1"><mxGeometry x="240" y="210" width="100" height="100" as="geometry"><mxPoint x="240" y="310" as="sourcePoint"/><mxPoint x="340" y="210" as="targetPoint"/></mxGeometry></mxCell><mxCell id="64" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="2" target="11" edge="1"><mxGeometry x="240" y="210" width="100" height="100" as="geometry"><mxPoint x="240" y="310" as="sourcePoint"/><mxPoint x="340" y="210" as="targetPoint"/></mxGeometry></mxCell><mxCell id="67" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="3" target="13" edge="1"><mxGeometry x="-75.00000000000009" y="15.000000000000043" width="100" height="100" as="geometry"><mxPoint x="-75.00000000000009" y="115.00000000000004" as="sourcePoint"/><mxPoint x="24.999999999999915" y="15.000000000000043" as="targetPoint"/></mxGeometry></mxCell><mxCell id="68" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="3" target="12" edge="1"><mxGeometry x="-75.00000000000009" y="15.000000000000043" width="100" height="100" as="geometry"><mxPoint x="-75.00000000000009" y="115.00000000000004" as="sourcePoint"/><mxPoint x="24.999999999999915" y="15.000000000000043" as="targetPoint"/></mxGeometry></mxCell><mxCell id="69" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="3" target="14" edge="1"><mxGeometry x="24.999999999999915" y="215.00000000000006" width="100" height="100" as="geometry"><mxPoint x="24.999999999999915" y="315.00000000000006" as="sourcePoint"/><mxPoint x="124.99999999999991" y="215.00000000000006" as="targetPoint"/></mxGeometry></mxCell><mxCell id="70" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="3" target="15" edge="1"><mxGeometry x="24.999999999999915" y="215.00000000000006" width="100" height="100" as="geometry"><mxPoint x="24.999999999999915" y="315.00000000000006" as="sourcePoint"/><mxPoint x="124.99999999999991" y="215.00000000000006" as="targetPoint"/></mxGeometry></mxCell><mxCell id="71" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="3" target="17" edge="1"><mxGeometry x="24.999999999999915" y="215.00000000000006" width="100" height="100" as="geometry"><mxPoint x="24.999999999999915" y="315.00000000000006" as="sourcePoint"/><mxPoint x="124.99999999999991" y="215.00000000000006" as="targetPoint"/></mxGeometry></mxCell><mxCell id="72" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="3" target="16" edge="1"><mxGeometry x="24.999999999999915" y="215.00000000000006" width="100" height="100" as="geometry"><mxPoint x="24.999999999999915" y="315.00000000000006" as="sourcePoint"/><mxPoint x="124.99999999999991" y="215.00000000000006" as="targetPoint"/></mxGeometry></mxCell><mxCell id="73" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="3" target="18" edge="1"><mxGeometry x="24.999999999999915" y="215.00000000000006" width="100" height="100" as="geometry"><mxPoint x="24.999999999999915" y="315.00000000000006" as="sourcePoint"/><mxPoint x="124.99999999999991" y="215.00000000000006" as="targetPoint"/></mxGeometry></mxCell><mxCell id="79" value="Lion" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="420" y="410" width="130" height="40" as="geometry"/></mxCell><mxCell id="80" value="Elephant" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="320" y="290" width="130" height="40" as="geometry"/></mxCell><mxCell id="81" value="Cat" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="320" y="215" width="130" height="40" as="geometry"/></mxCell><mxCell id="82" value="Giraffe" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="360" y="150" width="130" height="40" as="geometry"/></mxCell><mxCell id="83" value="Dog" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="410" y="90" width="130" height="40" as="geometry"/></mxCell><mxCell id="84" value="Donkey" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="490" y="30" width="130" height="40" as="geometry"/></mxCell><mxCell id="85" value="Leopard" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="610" y="90" width="130" height="40" as="geometry"/></mxCell><mxCell id="86" value="Horse" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="665" y="150" width="130" height="40" as="geometry"/></mxCell><mxCell id="87" value="Zebra" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="700" y="210" width="130" height="40" as="geometry"/></mxCell><mxCell id="89" value="Gazelle" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="715" y="290" width="130" height="40" as="geometry"/></mxCell><mxCell id="90" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="4" target="89" edge="1"><mxGeometry x="-220" width="100" height="100" as="geometry"><mxPoint x="-220" y="100" as="sourcePoint"/><mxPoint x="-120" as="targetPoint"/></mxGeometry></mxCell><mxCell id="91" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="4" target="79" edge="1"><mxGeometry x="-220" width="100" height="100" as="geometry"><mxPoint x="-220" y="100" as="sourcePoint"/><mxPoint x="-120" as="targetPoint"/></mxGeometry></mxCell><mxCell id="92" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="4" target="51" edge="1"><mxGeometry x="-220" width="100" height="100" as="geometry"><mxPoint x="-220" y="100" as="sourcePoint"/><mxPoint x="-120" as="targetPoint"/></mxGeometry></mxCell><mxCell id="93" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="4" target="80" edge="1"><mxGeometry x="-220" width="100" height="100" as="geometry"><mxPoint x="-220" y="100" as="sourcePoint"/><mxPoint x="-120" as="targetPoint"/></mxGeometry></mxCell><mxCell id="94" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="4" target="81" edge="1"><mxGeometry x="-220" width="100" height="100" as="geometry"><mxPoint x="-220" y="100" as="sourcePoint"/><mxPoint x="-120" as="targetPoint"/></mxGeometry></mxCell><mxCell id="95" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="4" target="82" edge="1"><mxGeometry x="-220" width="100" height="100" as="geometry"><mxPoint x="-220" y="100" as="sourcePoint"/><mxPoint x="-120" as="targetPoint"/></mxGeometry></mxCell><mxCell id="96" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="4" target="83" edge="1"><mxGeometry x="-220" width="100" height="100" as="geometry"><mxPoint x="-220" y="100" as="sourcePoint"/><mxPoint x="-120" as="targetPoint"/></mxGeometry></mxCell><mxCell id="97" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="4" target="84" edge="1"><mxGeometry x="-220" width="100" height="100" as="geometry"><mxPoint x="-220" y="100" as="sourcePoint"/><mxPoint x="-120" as="targetPoint"/></mxGeometry></mxCell><mxCell id="98" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="4" target="85" edge="1"><mxGeometry x="-220" width="100" height="100" as="geometry"><mxPoint x="-220" y="100" as="sourcePoint"/><mxPoint x="-120" as="targetPoint"/></mxGeometry></mxCell><mxCell id="99" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="4" target="86" edge="1"><mxGeometry x="-220" width="100" height="100" as="geometry"><mxPoint x="-220" y="100" as="sourcePoint"/><mxPoint x="-120" as="targetPoint"/></mxGeometry></mxCell><mxCell id="100" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="4" target="87" edge="1"><mxGeometry x="-220" width="100" height="100" as="geometry"><mxPoint x="-220" y="100" as="sourcePoint"/><mxPoint x="-120" as="targetPoint"/></mxGeometry></mxCell><mxCell id="102" value="Bee" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="910" y="320" width="120" height="40" as="geometry"/></mxCell><mxCell id="103" value="Hornet" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="900" y="250" width="120" height="40" as="geometry"/></mxCell><mxCell id="104" value="Fly" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="920" y="180" width="120" height="40" as="geometry"/></mxCell><mxCell id="105" value="Termite" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="960" y="120" width="120" height="40" as="geometry"/></mxCell><mxCell id="106" value="Mantis" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1030" y="60" width="120" height="40" as="geometry"/></mxCell><mxCell id="107" value="Ladybug" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1160" y="60" width="120" height="40" as="geometry"/></mxCell><mxCell id="108" value="Butterfly" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1230" y="120" width="120" height="40" as="geometry"/></mxCell><mxCell id="109" value="Flea" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1280" y="180" width="120" height="40" as="geometry"/></mxCell><mxCell id="110" value="Mosquito" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1295" y="250" width="120" height="40" as="geometry"/></mxCell><mxCell id="111" value="Spider" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1290" y="310" width="120" height="40" as="geometry"/></mxCell><mxCell id="112" value="Bumblebee" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1235" y="380" width="120" height="40" as="geometry"/></mxCell><mxCell id="113" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="5" target="21" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="114" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="5" target="102" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="115" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="5" target="103" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="116" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="5" target="104" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="117" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="5" target="105" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="118" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="5" target="106" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="119" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="5" target="107" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="120" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="5" target="108" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="121" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="5" target="109" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="122" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="5" target="110" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="123" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="5" target="111" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="124" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="5" target="112" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="125" value="Eagle" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1480" y="390" width="120" height="40" as="geometry"/></mxCell><mxCell id="126" value="Pigeon" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1850" y="250" width="120" height="40" as="geometry"/></mxCell><mxCell id="127" value="Hawk" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1460" y="330" width="120" height="40" as="geometry"/></mxCell><mxCell id="128" value="Falcon" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1480" y="260" width="120" height="40" as="geometry"/></mxCell><mxCell id="129" value="Sparrow" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1510" y="190" width="120" height="40" as="geometry"/></mxCell><mxCell id="130" value="Stork" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1570" y="120" width="120" height="40" as="geometry"/></mxCell><mxCell id="131" value="Flamingo" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1670" y="70" width="120" height="40" as="geometry"/></mxCell><mxCell id="132" value="Penguin" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1770" y="120" width="120" height="40" as="geometry"/></mxCell><mxCell id="133" value="Owl" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1820" y="190" width="120" height="40" as="geometry"/></mxCell><mxCell id="134" value="Albatross" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1640" y="460" width="120" height="40" as="geometry"/></mxCell><mxCell id="135" value="Pelican" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1800" y="410" width="120" height="40" as="geometry"/></mxCell><mxCell id="136" value="Swallow" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1860" y="335" width="120" height="40" as="geometry"/></mxCell><mxCell id="137" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="6" target="125" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="138" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="6" target="127" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="139" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="6" target="128" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="140" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="6" target="129" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="141" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="6" target="130" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="142" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="6" target="131" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="143" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="6" target="132" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="144" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="6" target="133" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="145" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="6" target="126" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="146" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="6" target="136" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="147" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="6" target="135" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="148" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="6" target="134" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="149" value="Perch" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1760" y="615" width="120" height="40" as="geometry"/></mxCell><mxCell id="150" value="Mackerel" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1780" y="560" width="120" height="40" as="geometry"/></mxCell><mxCell id="151" value="Tuna" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1830" y="500" width="120" height="40" as="geometry"/></mxCell><mxCell id="152" value="Shark" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1950" y="440" width="120" height="40" as="geometry"/></mxCell><mxCell id="153" value="Whale" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="2090" y="500" width="120" height="40" as="geometry"/></mxCell><mxCell id="154" value="Bass" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="2110" y="570" width="120" height="40" as="geometry"/></mxCell><mxCell id="155" value="Eel" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="2120" y="715" width="120" height="40" as="geometry"/></mxCell><mxCell id="156" value="Oyster" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="2130" y="635" width="120" height="40" as="geometry"/></mxCell><mxCell id="157" value="Ray" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="2060" y="780" width="120" height="40" as="geometry"/></mxCell><mxCell id="158" value="Trout" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1910" y="780" width="120" height="40" as="geometry"/></mxCell><mxCell id="159" value="Catfish" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1790" y="725" width="120" height="40" as="geometry"/></mxCell><mxCell id="162" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="7" target="149" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="163" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="7" target="150" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="164" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="7" target="151" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="165" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="7" target="152" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="166" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="7" target="153" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="167" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="7" target="154" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="168" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="7" target="156" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="169" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="7" target="155" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="170" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="7" target="157" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="171" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="7" target="158" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="172" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="7" target="159" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="175" value="Organisation" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1700" y="940" width="120" height="40" as="geometry"/></mxCell><mxCell id="176" value="Oak" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1800" y="890" width="120" height="40" as="geometry"/></mxCell><mxCell id="177" value="Birch" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1940" y="910" width="120" height="40" as="geometry"/></mxCell><mxCell id="178" value="Silverfern" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1990" y="960" width="120" height="40" as="geometry"/></mxCell><mxCell id="179" value="Personal &#xa;Development" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="2020" y="1015" width="120" height="40" as="geometry"/></mxCell><mxCell id="180" value="Pine" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="2010" y="1080" width="120" height="40" as="geometry"/></mxCell><mxCell id="181" value="Lime" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1970" y="1135" width="120" height="40" as="geometry"/></mxCell><mxCell id="182" value="Chestnut" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1920" y="1195" width="120" height="40" as="geometry"/></mxCell><mxCell id="183" value="Beech" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1780" y="1195" width="120" height="40" as="geometry"/></mxCell><mxCell id="184" value="Poplar" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1670" y="1145" width="120" height="40" as="geometry"/></mxCell><mxCell id="185" value="Willow" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1620" y="1095" width="120" height="40" as="geometry"/></mxCell><mxCell id="186" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="8" target="175" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="187" value="Acacia" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1590" y="1035" width="120" height="40" as="geometry"/></mxCell><mxCell id="190" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="8" target="176" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="191" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="8" target="177" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="192" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="8" target="178" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="193" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="8" target="179" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="194" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="8" target="180" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="195" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="8" target="181" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="196" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="8" target="182" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="197" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="8" target="183" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="198" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="8" target="184" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="199" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="8" target="185" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="200" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="8" target="187" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="203" value="Streptococcus" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1300" y="1257.5" width="120" height="40" as="geometry"/></mxCell><mxCell id="204" value="Echericia Colli" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1410" y="1412.5" width="120" height="40" as="geometry"/></mxCell><mxCell id="205" value="Lactobacyllus" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1550" y="1217.5" width="120" height="40" as="geometry"/></mxCell><mxCell id="206" value="Helicobacter" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1650" y="1297.5" width="120" height="40" as="geometry"/></mxCell><mxCell id="207" value="Bifidobacterium" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1610" y="1402.5" width="120" height="40" as="geometry"/></mxCell><mxCell id="208" value="Staphyllococcus" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1290" y="1342.5" width="120" height="40" as="geometry"/></mxCell><mxCell id="215" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="9" target="205" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="216" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="9" target="206" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="217" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="9" target="207" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="218" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="9" target="204" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="219" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="9" target="208" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="220" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="9" target="203" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="221" value="Zygomycota" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1115" y="1235" width="120" height="40" as="geometry"/></mxCell><mxCell id="223" value="Script Writing" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1130" y="1307.5" width="120" height="40" as="geometry"/></mxCell><mxCell id="224" value="Ascomycota" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1105" y="1372.5" width="120" height="40" as="geometry"/></mxCell><mxCell id="225" value="Basidiomycota" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1040" y="1432.5" width="120" height="40" as="geometry"/></mxCell><mxCell id="226" value="Mushroom" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="940" y="1490" width="120" height="40" as="geometry"/></mxCell><mxCell id="227" value="Lichen" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="840" y="1432.5" width="120" height="40" as="geometry"/></mxCell><mxCell id="228" value="Bread Mold" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="760" y="1372.5" width="120" height="40" as="geometry"/></mxCell><mxCell id="229" value="Yeast" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="720" y="1300" width="120" height="40" as="geometry"/></mxCell><mxCell id="230" value="Zygospore" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="725" y="1235" width="120" height="40" as="geometry"/></mxCell><mxCell id="231" value="Truffle" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="785" y="1170" width="120" height="40" as="geometry"/></mxCell><mxCell id="233" value="Chytrid" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="1055" y="1155" width="120" height="40" as="geometry"/></mxCell><mxCell id="234" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="10" target="233" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="235" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="10" target="221" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="236" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="10" target="223" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="237" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="10" target="224" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="238" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="10" target="225" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="239" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="10" target="226" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="240" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="10" target="227" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="241" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="10" target="228" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="242" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="10" target="229" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="243" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="10" target="230" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="244" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="10" target="231" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="246" value="Philadendron" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="435" y="955" width="120" height="40" as="geometry"/></mxCell><mxCell id="247" value="Dahlia" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="300" y="960" width="120" height="40" as="geometry"/></mxCell><mxCell id="248" value="Petunia" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="235" y="1015" width="120" height="40" as="geometry"/></mxCell><mxCell id="249" value="Cactus" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="180" y="1075" width="120" height="40" as="geometry"/></mxCell><mxCell id="250" value="Tulip" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="160" y="1130" width="120" height="40" as="geometry"/></mxCell><mxCell id="251" value="Lilac" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="175" y="1195" width="120" height="40" as="geometry"/></mxCell><mxCell id="252" value="Dandelion" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="210" y="1257.5" width="120" height="40" as="geometry"/></mxCell><mxCell id="253" value="Poppy" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="280" y="1307.5" width="120" height="40" as="geometry"/></mxCell><mxCell id="254" value="Gerbera" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="390" y="1362.5" width="120" height="40" as="geometry"/></mxCell><mxCell id="255" value="Orchid" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="515" y="1297.5" width="120" height="40" as="geometry"/></mxCell><mxCell id="256" value="Gladiola" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="575" y="1230" width="120" height="40" as="geometry"/></mxCell><mxCell id="257" value="Rose" style="rounded=1;fillColor=#93C47D;strokeColor=#274E13;strokeWidth=3;shadow=1" parent="1" vertex="1"><mxGeometry x="510" y="1005" width="120" height="40" as="geometry"/></mxCell><mxCell id="258" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="11" target="257" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="259" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="11" target="246" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="260" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="11" target="247" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="261" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="11" target="248" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="262" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="11" target="249" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="263" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="11" target="250" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="264" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="11" target="251" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="265" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="11" target="252" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="266" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="11" target="253" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="267" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="11" target="254" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="268" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="11" target="255" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="269" value="" style="edgeStyle=none;endArrow=none;strokeWidth=2;strokeColor=#A61C00" parent="1" source="11" target="256" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/orgchart1.xml b/public/assets/plugins/mxgraph/templates/xml/orgchart1.xml
new file mode 100644
index 0000000..df46b8b
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/orgchart1.xml
@@ -0,0 +1 @@
+<mxGraphModel grid="1" guides="1" tooltips="1" connect="1" fold="1" page="0" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="2" value="CEO" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="650" y="40" width="200" height="60" as="geometry"/></mxCell><mxCell id="3" value="Deputy Director" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="640" y="180" width="220" height="60" as="geometry"/></mxCell><mxCell id="4" value="Office of &#xa;Workplace Solutions" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="280" y="290" width="200" height="60" as="geometry"/></mxCell><mxCell id="5" value="Office of Public Relations" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="520" y="290" width="200" height="60" as="geometry"/></mxCell><mxCell id="6" value="Counsel Division" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="850" y="290" width="200" height="60" as="geometry"/></mxCell><mxCell id="7" value="Cooperation" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="1250" y="290" width="200" height="60" as="geometry"/></mxCell><mxCell id="8" value="Analysis &#xa;Division" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="260" y="460" width="200" height="60" as="geometry"/></mxCell><mxCell id="9" value="Office of Global Support" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="260" y="540" width="200" height="60" as="geometry"/></mxCell><mxCell id="10" value="Office of &#xa;Backtrack Analysis" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="260" y="630" width="200" height="60" as="geometry"/></mxCell><mxCell id="11" value="Department of &#xa;Heuristic Support" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="260" y="720" width="200" height="60" as="geometry"/></mxCell><mxCell id="12" value="Office of Intelligence &#xa;Support" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="260" y="810" width="200" height="60" as="geometry"/></mxCell><mxCell id="13" value="IT&#xa;Division" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="530" y="450" width="200" height="60" as="geometry"/></mxCell><mxCell id="14" value="Database Administration" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="530" y="540" width="200" height="60" as="geometry"/></mxCell><mxCell id="15" value="Office of Technology &#xa;Research" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="530" y="630" width="200" height="60" as="geometry"/></mxCell><mxCell id="16" value="Office of&#xa;Data Services" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="530" y="720" width="200" height="60" as="geometry"/></mxCell><mxCell id="18" value="Management Programs &#xa;Division" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="820" y="450" width="200" height="60" as="geometry"/></mxCell><mxCell id="19" value="Office of Financial &#xa;Management" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="820" y="540" width="200" height="60" as="geometry"/></mxCell><mxCell id="20" value="Office of Human Resources" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="820" y="630" width="200" height="60" as="geometry"/></mxCell><mxCell id="21" value="Office of Management " style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="820" y="720" width="200" height="60" as="geometry"/></mxCell><mxCell id="22" value="Office of Training Services" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="820" y="810" width="200" height="60" as="geometry"/></mxCell><mxCell id="23" value="Regulatory &#xa;and Enforcement Division" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="1070" y="450" width="200" height="60" as="geometry"/></mxCell><mxCell id="24" value="Office of Regulatory Policy" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="1070" y="540" width="200" height="60" as="geometry"/></mxCell><mxCell id="25" value="Office Compliance" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="1070" y="630" width="200" height="60" as="geometry"/></mxCell><mxCell id="26" value="Office of &#xa;Enforcement" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="1070" y="720" width="200" height="60" as="geometry"/></mxCell><mxCell id="27" value="Office of&#xa; Regulatory Support" style="rounded=1;fillColor=#6C96A1;strokeColor=none;shadow=1;gradientColor=#52727A;fontStyle=1" parent="1" vertex="1"><mxGeometry x="1070" y="810" width="200" height="60" as="geometry"/></mxCell><mxCell id="29" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="2" target="3" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="30" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="3" target="5" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="31" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="3" target="4" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="32" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="3" target="6" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="33" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1;dashed=1" parent="1" source="2" target="7" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1040" y="130"/></Array></mxGeometry></mxCell><mxCell id="34" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="3" target="8" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="530" y="390"/></Array></mxGeometry></mxCell><mxCell id="37" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="3" target="23" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="950" y="390"/></Array></mxGeometry></mxCell><mxCell id="38" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="8" target="9" edge="1"><mxGeometry x="40" width="100" height="100" as="geometry"><mxPoint x="40" y="100" as="sourcePoint"/><mxPoint x="140" as="targetPoint"/></mxGeometry></mxCell><mxCell id="39" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="9" target="10" edge="1"><mxGeometry x="40" y="10" width="100" height="100" as="geometry"><mxPoint x="40" y="110" as="sourcePoint"/><mxPoint x="140" y="10" as="targetPoint"/></mxGeometry></mxCell><mxCell id="40" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="10" target="11" edge="1"><mxGeometry x="40" y="20" width="100" height="100" as="geometry"><mxPoint x="40" y="120" as="sourcePoint"/><mxPoint x="140" y="20" as="targetPoint"/></mxGeometry></mxCell><mxCell id="41" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="11" target="12" edge="1"><mxGeometry x="40" y="30" width="100" height="100" as="geometry"><mxPoint x="40" y="130" as="sourcePoint"/><mxPoint x="140" y="30" as="targetPoint"/></mxGeometry></mxCell><mxCell id="42" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="13" target="14" edge="1"><mxGeometry x="40" width="100" height="100" as="geometry"><mxPoint x="40" y="100" as="sourcePoint"/><mxPoint x="140" as="targetPoint"/></mxGeometry></mxCell><mxCell id="43" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="14" target="15" edge="1"><mxGeometry x="40" y="10" width="100" height="100" as="geometry"><mxPoint x="40" y="110" as="sourcePoint"/><mxPoint x="140" y="10" as="targetPoint"/></mxGeometry></mxCell><mxCell id="44" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="15" target="16" edge="1"><mxGeometry x="40" y="20" width="100" height="100" as="geometry"><mxPoint x="40" y="120" as="sourcePoint"/><mxPoint x="140" y="20" as="targetPoint"/></mxGeometry></mxCell><mxCell id="46" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="18" target="19" edge="1"><mxGeometry x="50" width="100" height="100" as="geometry"><mxPoint x="50" y="100" as="sourcePoint"/><mxPoint x="150" as="targetPoint"/></mxGeometry></mxCell><mxCell id="47" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="19" target="20" edge="1"><mxGeometry x="50" y="10" width="100" height="100" as="geometry"><mxPoint x="50" y="110" as="sourcePoint"/><mxPoint x="150" y="10" as="targetPoint"/></mxGeometry></mxCell><mxCell id="48" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="20" target="21" edge="1"><mxGeometry x="50" y="20" width="100" height="100" as="geometry"><mxPoint x="50" y="120" as="sourcePoint"/><mxPoint x="150" y="20" as="targetPoint"/></mxGeometry></mxCell><mxCell id="49" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="21" target="22" edge="1"><mxGeometry x="50" y="30" width="100" height="100" as="geometry"><mxPoint x="50" y="130" as="sourcePoint"/><mxPoint x="150" y="30" as="targetPoint"/></mxGeometry></mxCell><mxCell id="50" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="23" target="24" edge="1"><mxGeometry x="50" width="100" height="100" as="geometry"><mxPoint x="50" y="100" as="sourcePoint"/><mxPoint x="150" as="targetPoint"/></mxGeometry></mxCell><mxCell id="51" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="24" target="25" edge="1"><mxGeometry x="50" y="10" width="100" height="100" as="geometry"><mxPoint x="50" y="110" as="sourcePoint"/><mxPoint x="150" y="10" as="targetPoint"/></mxGeometry></mxCell><mxCell id="52" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="25" target="26" edge="1"><mxGeometry x="50" y="20" width="100" height="100" as="geometry"><mxPoint x="50" y="120" as="sourcePoint"/><mxPoint x="150" y="20" as="targetPoint"/></mxGeometry></mxCell><mxCell id="53" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="26" target="27" edge="1"><mxGeometry x="50" y="30" width="100" height="100" as="geometry"><mxPoint x="50" y="130" as="sourcePoint"/><mxPoint x="150" y="30" as="targetPoint"/></mxGeometry></mxCell><mxCell id="54" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="3" target="13" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="630" y="390"/></Array></mxGeometry></mxCell><mxCell id="55" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=4;endArrow=block;endFill=1;fontStyle=1" parent="1" source="3" target="18" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="920" y="390"/></Array></mxGeometry></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/orgchart2.xml b/public/assets/plugins/mxgraph/templates/xml/orgchart2.xml
new file mode 100644
index 0000000..b829c2d
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/orgchart2.xml
@@ -0,0 +1 @@
+<mxGraphModel grid="1" guides="1" tooltips="1" connect="1" fold="1" page="0" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="56" value="" style="rounded=1;fillColor=#1C4587;strokeColor=none;shadow=1;gradientColor=#132E59" parent="1" vertex="1"><mxGeometry x="150" y="80" width="280" height="160" as="geometry"/></mxCell><mxCell id="57" value="Kara Malley&#xa;&#xa;Director&#xa;&#xa;Human Resources &#xa;Management" style="text;fontColor=#FFFFFF;fontStyle=1" parent="1" vertex="1"><mxGeometry x="300" y="97" width="120" height="133" as="geometry"/></mxCell><mxCell id="58" value="" style="image;image=/img/lib/clip_art/people/Suit_Woman_128x128.png" parent="1" vertex="1"><mxGeometry x="180" y="97" width="80" height="80" as="geometry"/></mxCell><mxCell id="59" value="" style="rounded=1;fillColor=#1C4587;strokeColor=none;shadow=1;gradientColor=#132E59" parent="1" vertex="1"><mxGeometry x="880" y="80" width="275" height="160" as="geometry"/></mxCell><mxCell id="60" value="Eugene Jeanlouis&#xa;&#xa;Director&#xa;&#xa;Property&#xa;Management" style="text;fontColor=#FFFFFF;fontStyle=1" parent="1" vertex="1"><mxGeometry x="1025" y="97" width="120" height="133" as="geometry"/></mxCell><mxCell id="62" value="" style="image;image=/img/lib/clip_art/people/Suit_Man_Green_128x128.png" parent="1" vertex="1"><mxGeometry x="910" y="110" width="80" height="80" as="geometry"/></mxCell><mxCell id="63" value="" style="rounded=1;fillColor=#1C4587;strokeColor=none;shadow=1;gradientColor=#132E59" parent="1" vertex="1"><mxGeometry x="155" y="330" width="275" height="160" as="geometry"/></mxCell><mxCell id="64" value="Charles Dutcher&#xa;&#xa;Director&#xa;&#xa;Development &#xa;Director" style="text;fontColor=#FFFFFF;fontStyle=1" parent="1" vertex="1"><mxGeometry x="300" y="347" width="120" height="133" as="geometry"/></mxCell><mxCell id="66" value="" style="rounded=1;fillColor=#1C4587;strokeColor=none;shadow=1;gradientColor=#132E59" parent="1" vertex="1"><mxGeometry x="880" y="330" width="275" height="160" as="geometry"/></mxCell><mxCell id="67" value="Jeffery Guajardo&#xa;&#xa;Director&#xa;&#xa;Office of &#xa;Research" style="text;fontColor=#FFFFFF;fontStyle=1" parent="1" vertex="1"><mxGeometry x="1025" y="347" width="120" height="133" as="geometry"/></mxCell><mxCell id="69" value="" style="rounded=1;fillColor=#1C4587;strokeColor=none;shadow=1;gradientColor=#132E59" parent="1" vertex="1"><mxGeometry x="530" y="600" width="275" height="160" as="geometry"/></mxCell><mxCell id="70" value="Antonio Weese&#xa;&#xa;Director&#xa;&#xa;Central&#xa;Regional&#xa;Director" style="text;fontColor=#FFFFFF;fontStyle=1" parent="1" vertex="1"><mxGeometry x="675" y="617" width="120" height="133" as="geometry"/></mxCell><mxCell id="72" value="" style="rounded=1;fillColor=#1C4587;strokeColor=none;shadow=1;gradientColor=#132E59" parent="1" vertex="1"><mxGeometry x="947.5" y="603.5" width="275" height="160" as="geometry"/></mxCell><mxCell id="73" value="Gloria Racine&#xa;&#xa;Director&#xa;&#xa;Eastern&#xa;Regional&#xa;Director" style="text;fontColor=#FFFFFF;fontStyle=1" parent="1" vertex="1"><mxGeometry x="1092.5" y="620.5" width="120" height="133" as="geometry"/></mxCell><mxCell id="75" value="" style="rounded=1;fillColor=#1C4587;strokeColor=none;shadow=1;gradientColor=#132E59" parent="1" vertex="1"><mxGeometry x="127.5" y="593.5" width="275" height="160" as="geometry"/></mxCell><mxCell id="76" value="Thomas Donahue&#xa;&#xa;Director&#xa;&#xa;Western&#xa;Regional&#xa;Director" style="text;fontColor=#FFFFFF;fontStyle=1" parent="1" vertex="1"><mxGeometry x="272.5" y="610.5" width="120" height="133" as="geometry"/></mxCell><mxCell id="78" value="" style="image;image=/img/lib/clip_art/people/Suit_Woman_Green_Black_128x128.png" parent="1" vertex="1"><mxGeometry x="977.5" y="633.5" width="80" height="80" as="geometry"/></mxCell><mxCell id="79" value="" style="image;image=/img/lib/clip_art/people/Suit_Man_Black_128x128.png" parent="1" vertex="1"><mxGeometry x="180" y="360" width="80" height="80" as="geometry"/></mxCell><mxCell id="80" value="" style="image;image=/img/lib/clip_art/people/Suit_Man_Green_Black_128x128.png" parent="1" vertex="1"><mxGeometry x="155" y="620.5" width="80" height="80" as="geometry"/></mxCell><mxCell id="81" value="" style="image;image=/img/lib/clip_art/people/Suit_Man_Blue_128x128.png" parent="1" vertex="1"><mxGeometry x="560" y="620.5" width="80" height="80" as="geometry"/></mxCell><mxCell id="82" value="" style="image;image=/img/lib/clip_art/people/Suit_Man_128x128.png" parent="1" vertex="1"><mxGeometry x="907.5" y="350" width="80" height="80" as="geometry"/></mxCell><mxCell id="83" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;endArrow=none;rounded=0;strokeColor=#FF9900;strokeWidth=12" parent="1" source="75" target="72" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="690" y="550"/></Array></mxGeometry></mxCell><mxCell id="84" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;endArrow=none;rounded=0;strokeColor=#FF9900;strokeWidth=12" parent="1" source="56" target="69" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="668" y="430"/></Array></mxGeometry></mxCell><mxCell id="85" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;endArrow=none;rounded=0;strokeColor=#FF9900;strokeWidth=12" parent="1" source="59" target="69" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="668" y="410"/></Array></mxGeometry></mxCell><mxCell id="86" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;endArrow=none;rounded=0;strokeColor=#FF9900;strokeWidth=12" parent="1" source="66" target="69" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="668" y="530"/></Array></mxGeometry></mxCell><mxCell id="87" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;endArrow=none;rounded=0;strokeColor=#FF9900;strokeWidth=12" parent="1" source="63" target="69" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="668" y="550"/></Array></mxGeometry></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/package1.xml b/public/assets/plugins/mxgraph/templates/xml/package1.xml
new file mode 100644
index 0000000..1fa6cdf
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/package1.xml
@@ -0,0 +1 @@
+<mxGraphModel grid="1" guides="1" tooltips="1" connect="1" fold="1" page="0" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="37" value="Abstraction layer" style="swimlane;fillColor=#66B2FF" vertex="1" parent="1"><mxGeometry x="170" y="100" width="1140" height="430" as="geometry"><mxRectangle x="170" y="100" width="140" height="23" as="alternateBounds"/></mxGeometry></mxCell><mxCell id="40" value="" style="strokeWidth=1" vertex="1" parent="37"><mxGeometry y="23" width="1140" height="407" as="geometry"/></mxCell><mxCell id="3" value="&lt;&lt;namespace&gt;&gt;&#xa;System" style="shape=folder;fontStyle=0;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;shadow=1;verticalAlign=top;fillColor=#FF9933;gradientColor=#FFE6CC;gradientDirection=north" vertex="1" parent="37"><mxGeometry x="56" y="58" width="200" height="70" as="geometry"/></mxCell><mxCell id="6" value="&lt;&lt;namespace&gt;&gt;&#xa;Ajax" style="shape=folder;fontStyle=0;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;shadow=1;verticalAlign=top;fillColor=#FF9933;gradientColor=#FFE6CC;gradientDirection=north" vertex="1" parent="37"><mxGeometry x="576" y="58" width="200" height="70" as="geometry"/></mxCell><mxCell id="15" value="&lt;&lt;namespace&gt;&gt;&#xa;JavaScript" style="shape=folder;fontStyle=0;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;shadow=1;verticalAlign=top;fillColor=#FF9933;gradientColor=#FFE6CC;gradientDirection=north" vertex="1" parent="37"><mxGeometry x="826" y="160.00000000000006" width="200" height="90" as="geometry"/></mxCell><mxCell id="16" value="&lt;&lt;namespace&gt;&gt;&#xa;Apache Server" style="shape=folder;fontStyle=0;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;shadow=1;verticalAlign=top;fillColor=#FF9933;gradientColor=#FFE6CC;gradientDirection=north" vertex="1" parent="37"><mxGeometry x="576" y="160.00000000000006" width="200" height="90" as="geometry"/></mxCell><mxCell id="17" value="&lt;&lt;namespace&gt;&gt;&#xa;Protocol" style="shape=folder;fontStyle=0;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;shadow=1;verticalAlign=top;fillColor=#FF9933;gradientColor=#FFE6CC;gradientDirection=north" vertex="1" parent="37"><mxGeometry x="56" y="175.00000000000006" width="200" height="60" as="geometry"/></mxCell><mxCell id="18" value="&lt;&lt;namespace&gt;&gt;&#xa;P2P" style="shape=folder;fontStyle=0;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;shadow=1;verticalAlign=top;fillColor=#FF9933;gradientColor=#FFE6CC;gradientDirection=north" vertex="1" parent="37"><mxGeometry x="56" y="315.00000000000006" width="200" height="70" as="geometry"/></mxCell><mxCell id="19" value="&lt;&lt;namespace&gt;&gt;&#xa;HTTP" style="shape=folder;fontStyle=0;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;shadow=1;verticalAlign=top;fillColor=#FF9933;gradientColor=#FFE6CC;gradientDirection=north" vertex="1" parent="37"><mxGeometry x="316" y="315.00000000000006" width="200" height="70" as="geometry"/></mxCell><mxCell id="28" value="" style="edgeStyle=none;dashed=1;endArrow=open" edge="1" parent="37" source="16" target="22"><mxGeometry x="-154" y="-124.99999999999994" width="100" height="100" as="geometry"><mxPoint x="-154" y="-24.999999999999943" as="sourcePoint"/><mxPoint x="-54" y="-124.99999999999994" as="targetPoint"/></mxGeometry></mxCell><mxCell id="29" value="" style="shape=mxgraph.basic.x;fillColor=#990000;strokeColor=black;strokeWidth=1" vertex="1" parent="37"><mxGeometry x="236" y="78" width="16" height="20" as="geometry"/></mxCell><mxCell id="30" value="" style="shape=mxgraph.basic.x;fillColor=#990000;strokeColor=black;strokeWidth=1" vertex="1" parent="37"><mxGeometry x="756" y="78" width="16" height="20" as="geometry"/></mxCell><mxCell id="31" value="" style="shape=mxgraph.basic.tick;fillColor=#006600;strokeColor=black;strokeWidth=1" vertex="1" parent="37"><mxGeometry x="236" y="191.3888888888889" width="16" height="23.611111111111143" as="geometry"/></mxCell><mxCell id="32" value="" style="shape=mxgraph.basic.tick;fillColor=#006600;strokeColor=black;strokeWidth=1" vertex="1" parent="37"><mxGeometry x="236" y="338.1944444444445" width="16" height="23.611111111111143" as="geometry"/></mxCell><mxCell id="33" value="" style="shape=mxgraph.basic.tick;fillColor=#006600;strokeColor=black;strokeWidth=1" vertex="1" parent="37"><mxGeometry x="756" y="179.58333333333337" width="16" height="23.611111111111143" as="geometry"/></mxCell><mxCell id="34" value="" style="shape=mxgraph.basic.tick;fillColor=#006600;strokeColor=black;strokeWidth=1" vertex="1" parent="37"><mxGeometry x="1006" y="179.58333333333337" width="16" height="23.611111111111143" as="geometry"/></mxCell><mxCell id="35" value="" style="shape=mxgraph.basic.x;fillColor=#990000;strokeColor=black;strokeWidth=1" vertex="1" parent="37"><mxGeometry x="756" y="315.0000000000001" width="16" height="20" as="geometry"/></mxCell><mxCell id="36" value="" style="shape=mxgraph.basic.x;fillColor=#990000;strokeColor=black;strokeWidth=1" vertex="1" parent="37"><mxGeometry x="496" y="335.0000000000001" width="16" height="20" as="geometry"/></mxCell><mxCell id="27" value="" style="edgeStyle=none;dashed=1;endArrow=open" edge="1" parent="37" source="6" target="15"><mxGeometry x="-154" y="-124.99999999999994" width="100" height="100" as="geometry"><mxPoint x="-154" y="-24.999999999999943" as="sourcePoint"/><mxPoint x="-54" y="-124.99999999999994" as="targetPoint"/></mxGeometry></mxCell><mxCell id="26" value="" style="edgeStyle=none;dashed=1;endArrow=open" edge="1" parent="37" source="6" target="16"><mxGeometry x="-154" y="-124.99999999999994" width="100" height="100" as="geometry"><mxPoint x="-154" y="-24.999999999999943" as="sourcePoint"/><mxPoint x="-54" y="-124.99999999999994" as="targetPoint"/></mxGeometry></mxCell><mxCell id="25" value="" style="edgeStyle=none;dashed=1;endArrow=open" edge="1" parent="37" source="17" target="19"><mxGeometry x="-154" y="-124.99999999999994" width="100" height="100" as="geometry"><mxPoint x="-154" y="-24.999999999999943" as="sourcePoint"/><mxPoint x="-54" y="-124.99999999999994" as="targetPoint"/></mxGeometry></mxCell><mxCell id="24" value="" style="edgeStyle=none;dashed=1;endArrow=open" edge="1" parent="37" source="17" target="18"><mxGeometry x="-154" y="-124.99999999999994" width="100" height="100" as="geometry"><mxPoint x="-154" y="-24.999999999999943" as="sourcePoint"/><mxPoint x="-54" y="-124.99999999999994" as="targetPoint"/></mxGeometry></mxCell><mxCell id="23" value="" style="edgeStyle=none;dashed=1;endArrow=open" edge="1" parent="37" source="3" target="17"><mxGeometry x="-154" y="-124.99999999999994" width="100" height="100" as="geometry"><mxPoint x="-154" y="-24.999999999999943" as="sourcePoint"/><mxPoint x="-54" y="-124.99999999999994" as="targetPoint"/></mxGeometry></mxCell><mxCell id="22" value="&lt;&lt;namespace&gt;&gt;&#xa;Tomcat" style="shape=folder;fontStyle=0;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;shadow=1;verticalAlign=top;fillColor=#FF9933;gradientColor=#FFE6CC;gradientDirection=north" vertex="1" parent="37"><mxGeometry x="576" y="295.00000000000006" width="200" height="90" as="geometry"/></mxCell><mxCell id="42" value="" style="shape=mxgraph.basic.x;fillColor=#990000;strokeColor=black;strokeWidth=1" vertex="1" parent="37"><mxGeometry x="756" y="315.0000000000001" width="16" height="20" as="geometry"/></mxCell><mxCell id="43" value="Implementation layer" style="swimlane;fillColor=#66B2FF" vertex="1" parent="1"><mxGeometry x="170" y="530" width="1140" height="430" as="geometry"><mxRectangle x="170" y="530" width="140" height="23" as="alternateBounds"/></mxGeometry></mxCell><mxCell id="44" value="" style="strokeWidth=1" vertex="1" parent="43"><mxGeometry y="23" width="1140" height="407" as="geometry"/></mxCell><mxCell id="45" value="Presentation Logic" style="shape=folder;fontStyle=0;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;shadow=1;verticalAlign=top;fillColor=#FF9933;gradientColor=#FFE6CC;gradientDirection=north" vertex="1" parent="43"><mxGeometry x="56" y="58" width="200" height="70" as="geometry"/></mxCell><mxCell id="46" value="Communication" style="shape=folder;fontStyle=0;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;shadow=1;verticalAlign=top;fillColor=#FF9933;gradientColor=#FFE6CC;gradientDirection=north" vertex="1" parent="43"><mxGeometry x="576" y="58" width="200" height="70" as="geometry"/></mxCell><mxCell id="47" value="Security" style="shape=folder;fontStyle=0;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;shadow=1;verticalAlign=top;fillColor=#FF9933;gradientColor=#FFE6CC;gradientDirection=north" vertex="1" parent="43"><mxGeometry x="826" y="160.00000000000006" width="200" height="90" as="geometry"/></mxCell><mxCell id="48" value="Data Access" style="shape=folder;fontStyle=0;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;shadow=1;verticalAlign=top;fillColor=#FF9933;gradientColor=#FFE6CC;gradientDirection=north" vertex="1" parent="43"><mxGeometry x="576" y="160.00000000000006" width="200" height="90" as="geometry"/></mxCell><mxCell id="49" value="User Interface" style="shape=folder;fontStyle=0;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;shadow=1;verticalAlign=top;fillColor=#FF9933;gradientColor=#FFE6CC;gradientDirection=north" vertex="1" parent="43"><mxGeometry x="56" y="175.00000000000006" width="200" height="60" as="geometry"/></mxCell><mxCell id="50" value="Menu subsystem" style="shape=folder;fontStyle=0;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;shadow=1;verticalAlign=top;fillColor=#FF9933;gradientColor=#FFE6CC;gradientDirection=north" vertex="1" parent="43"><mxGeometry x="56" y="315.00000000000006" width="200" height="70" as="geometry"/></mxCell><mxCell id="51" value="Action Linking" style="shape=folder;fontStyle=0;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;shadow=1;verticalAlign=top;fillColor=#FF9933;gradientColor=#FFE6CC;gradientDirection=north" vertex="1" parent="43"><mxGeometry x="316" y="315.00000000000006" width="200" height="70" as="geometry"/></mxCell><mxCell id="52" value="" style="edgeStyle=none;dashed=1;endArrow=open" edge="1" parent="43" source="48" target="66"><mxGeometry x="-154" y="-124.99999999999994" width="100" height="100" as="geometry"><mxPoint x="-154" y="-24.999999999999943" as="sourcePoint"/><mxPoint x="-54" y="-124.99999999999994" as="targetPoint"/></mxGeometry></mxCell><mxCell id="59" value="" style="shape=mxgraph.basic.x;fillColor=#990000;strokeColor=black;strokeWidth=1" vertex="1" parent="43"><mxGeometry x="756" y="315.0000000000001" width="16" height="20" as="geometry"/></mxCell><mxCell id="61" value="" style="edgeStyle=none;dashed=1;endArrow=open" edge="1" parent="43" source="46" target="47"><mxGeometry x="-154" y="-124.99999999999994" width="100" height="100" as="geometry"><mxPoint x="-154" y="-24.999999999999943" as="sourcePoint"/><mxPoint x="-54" y="-124.99999999999994" as="targetPoint"/></mxGeometry></mxCell><mxCell id="62" value="" style="edgeStyle=none;dashed=1;endArrow=open" edge="1" parent="43" source="46" target="48"><mxGeometry x="-154" y="-124.99999999999994" width="100" height="100" as="geometry"><mxPoint x="-154" y="-24.999999999999943" as="sourcePoint"/><mxPoint x="-54" y="-124.99999999999994" as="targetPoint"/></mxGeometry></mxCell><mxCell id="63" value="" style="edgeStyle=none;dashed=1;endArrow=open" edge="1" parent="43" source="49" target="51"><mxGeometry x="-154" y="-124.99999999999994" width="100" height="100" as="geometry"><mxPoint x="-154" y="-24.999999999999943" as="sourcePoint"/><mxPoint x="-54" y="-124.99999999999994" as="targetPoint"/></mxGeometry></mxCell><mxCell id="64" value="" style="edgeStyle=none;dashed=1;endArrow=open" edge="1" parent="43" source="49" target="50"><mxGeometry x="-154" y="-124.99999999999994" width="100" height="100" as="geometry"><mxPoint x="-154" y="-24.999999999999943" as="sourcePoint"/><mxPoint x="-54" y="-124.99999999999994" as="targetPoint"/></mxGeometry></mxCell><mxCell id="65" value="" style="edgeStyle=none;dashed=1;endArrow=open" edge="1" parent="43" source="45" target="49"><mxGeometry x="-154" y="-124.99999999999994" width="100" height="100" as="geometry"><mxPoint x="-154" y="-24.999999999999943" as="sourcePoint"/><mxPoint x="-54" y="-124.99999999999994" as="targetPoint"/></mxGeometry></mxCell><mxCell id="66" value="Data Sources" style="shape=folder;fontStyle=0;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;shadow=1;verticalAlign=top;fillColor=#FF9933;gradientColor=#FFE6CC;gradientDirection=north" vertex="1" parent="43"><mxGeometry x="576" y="295.00000000000006" width="200" height="90" as="geometry"/></mxCell><mxCell id="68" value="Help subsystem" style="shape=folder;fontStyle=0;spacingTop=10;tabWidth=40;tabHeight=14;tabPosition=left;shadow=1;verticalAlign=top;fillColor=#FF9933;gradientColor=#FFE6CC;gradientDirection=north" vertex="1" parent="43"><mxGeometry x="316" y="175" width="200" height="60" as="geometry"/></mxCell><mxCell id="69" value="" style="edgeStyle=none;dashed=1;endArrow=open" edge="1" parent="43" source="45" target="68"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/pid1.xml b/public/assets/plugins/mxgraph/templates/xml/pid1.xml
new file mode 100644
index 0000000..bfac4da
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/pid1.xml
@@ -0,0 +1 @@
+<mxGraphModel scale="0.833" grid="1" guides="1" tooltips="1" connect="1" fold="1" page="0" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="180" value="" style="fillColor=none;strokeWidth=3" parent="1" vertex="1"><mxGeometry x="33.999999999999744" y="30.000000000000018" width="1700" height="1140" as="geometry"/></mxCell><mxCell id="179" value="" parent="1" vertex="1"><mxGeometry x="1573.9999999999998" y="79.69907407407409" width="40" height="37.800925925925924" as="geometry"/></mxCell><mxCell id="178" value="" parent="1" vertex="1"><mxGeometry x="1473.9999999999998" y="79.69907407407409" width="40" height="37.800925925925924" as="geometry"/></mxCell><mxCell id="177" value="" parent="1" vertex="1"><mxGeometry x="1424.9999999999998" y="78.34953703703705" width="40" height="37.800925925925924" as="geometry"/></mxCell><mxCell id="176" value="" parent="1" vertex="1"><mxGeometry x="1369.9999999999998" y="77.50000000000001" width="40" height="37.800925925925924" as="geometry"/></mxCell><mxCell id="175" value="" parent="1" vertex="1"><mxGeometry x="1319.9999999999995" y="79.09953703703705" width="40" height="37.800925925925924" as="geometry"/></mxCell><mxCell id="174" value="" parent="1" vertex="1"><mxGeometry x="1183.9999999999998" y="78.34953703703704" width="40" height="37.800925925925924" as="geometry"/></mxCell><mxCell id="173" value="" parent="1" vertex="1"><mxGeometry x="1126.9999999999998" y="78.9490740740741" width="40" height="37.800925925925924" as="geometry"/></mxCell><mxCell id="172" value="" parent="1" vertex="1"><mxGeometry x="998.9999999999998" y="79.09953703703708" width="40" height="37.800925925925924" as="geometry"/></mxCell><mxCell id="171" value="" parent="1" vertex="1"><mxGeometry x="943.9999999999998" y="78.00000000000001" width="40" height="37.800925925925924" as="geometry"/></mxCell><mxCell id="170" value="" parent="1" vertex="1"><mxGeometry x="887.9999999999997" y="78.94907407407409" width="40" height="37.800925925925924" as="geometry"/></mxCell><mxCell id="169" value="" parent="1" vertex="1"><mxGeometry x="701.9999999999998" y="76.50000000000001" width="40" height="37.800925925925924" as="geometry"/></mxCell><mxCell id="168" value="" parent="1" vertex="1"><mxGeometry x="623.9999999999998" y="76.5" width="40" height="37.800925925925924" as="geometry"/></mxCell><mxCell id="167" value="" parent="1" vertex="1"><mxGeometry x="433.99999999999983" y="77.25000000000001" width="40" height="37.800925925925924" as="geometry"/></mxCell><mxCell id="166" value="" parent="1" vertex="1"><mxGeometry x="383.99999999999983" y="77.6990740740741" width="40" height="37.800925925925924" as="geometry"/></mxCell><mxCell id="2" value="" style="shape=mxgraph.pid.vessels.tank;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1349.9999999999998" y="320" width="80" height="290" as="geometry"/></mxCell><mxCell id="3" value="" style="shape=mxgraph.pid.vessels.tank;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1229.9999999999998" y="320" width="80" height="290" as="geometry"/></mxCell><mxCell id="4" value="" style="shape=mxgraph.pid.vessels.mixing_reactor;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="693.9999999999998" y="620" width="200" height="316" as="geometry"/></mxCell><mxCell id="5" value="" style="shape=mxgraph.pid.vessels.tower_with_packing;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1013.9999999999998" y="300" width="80" height="440" as="geometry"/></mxCell><mxCell id="6" value="" style="shape=mxgraph.pid.compressors.centrifugal_compressor_-_turbine_driven;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="453.9999999999998" y="320" width="268" height="180" as="geometry"/></mxCell><mxCell id="7" value="" style="shape=mxgraph.pid.heat_exchangers.u-tube_heat_exchanger;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1219.9999999999998" y="550" width="60" height="20" as="geometry"/></mxCell><mxCell id="8" value="" style="shape=mxgraph.pid.heat_exchangers.hairpin_exchanger;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1003.9999999999998" y="687" width="70" height="22" as="geometry"/></mxCell><mxCell id="9" value="RTU 021" style="horizontal=0" parent="1" vertex="1"><mxGeometry x="33.999999999999744" y="130.00000000000003" width="20" height="100" as="geometry"/></mxCell><mxCell id="10" value="" parent="1" vertex="1"><mxGeometry x="53.999999999999744" y="130.00000000000003" width="1680" height="100" as="geometry"/></mxCell><mxCell id="11" value="N-OZ-301" style="shape=mxgraph.arrows.signal-in_arrow;fillColor=white;strokeColor=black;strokeWidth=1" parent="1" vertex="1"><mxGeometry x="123.99999999999974" y="572.5" width="80" height="30" as="geometry"/></mxCell><mxCell id="12" value="Crude Oil from DBS-01" style="text" parent="1" vertex="1"><mxGeometry x="103.99999999999974" y="539.5" width="40" height="26" as="geometry"/></mxCell><mxCell id="13" value="1" parent="1" vertex="1"><mxGeometry x="93.99999999999974" y="572.5" width="30" height="30" as="geometry"/></mxCell><mxCell id="14" value="" style="shape=mxgraph.pid.valves.ball_valve;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="263.9999999999998" y="565" width="70" height="45" as="geometry"/></mxCell><mxCell id="15" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=1;exitY=0.5;exitPerimeter=0;entryX=0;entryY=0.067;entryPerimeter=0;endArrow=none;rounded=0" parent="1" source="14" target="6" edge="1"><mxGeometry x="63.999999999999744" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="63.999999999999744" y="110.00000000000001" as="sourcePoint"/><mxPoint x="163.99999999999974" y="10.000000000000018" as="targetPoint"/><Array as="points"><mxPoint x="363.9999999999998" y="490"/></Array></mxGeometry></mxCell><mxCell id="16" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=1;exitY=0.5;exitPerimeter=0;entryX=0;entryY=0.5;entryPerimeter=0;endArrow=none;rounded=0" parent="1" source="11" target="14" edge="1"><mxGeometry x="63.999999999999744" y="-47.499999999999986" width="100" height="100" as="geometry"><mxPoint x="63.999999999999744" y="52.500000000000014" as="sourcePoint"/><mxPoint x="163.99999999999974" y="-47.499999999999986" as="targetPoint"/></mxGeometry></mxCell><mxCell id="19" value="" style="shape=mxgraph.pid.instruments.pressure_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="393.9999999999998" y="370" width="40" height="38" as="geometry"/></mxCell><mxCell id="21" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=0.5;exitY=1;exitPerimeter=0;entryX=0;entryY=0.63;entryPerimeter=0;endArrow=none;rounded=0" parent="1" source="19" target="6" edge="1"><mxGeometry x="63.999999999999744" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="63.999999999999744" y="110.00000000000001" as="sourcePoint"/><mxPoint x="163.99999999999974" y="10.000000000000018" as="targetPoint"/><Array as="points"><mxPoint x="413.9999999999998" y="420"/></Array></mxGeometry></mxCell><mxCell id="22" value="1201" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="393.9999999999998" y="389" width="40" height="21" as="geometry"/></mxCell><mxCell id="27" value="" style="shape=mxgraph.pid.instruments.pressure_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="433.9999999999998" y="260" width="40" height="38" as="geometry"/></mxCell><mxCell id="28" value="1202" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="433.9999999999998" y="279" width="40" height="21" as="geometry"/></mxCell><mxCell id="29" value="" style="shape=mxgraph.pid.instruments.pressure_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="701.9999999999998" y="260" width="40" height="38" as="geometry"/></mxCell><mxCell id="30" value="1203" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="701.9999999999998" y="279" width="40" height="21" as="geometry"/></mxCell><mxCell id="31" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=0;exitY=0.067;exitPerimeter=0;endArrow=none;rounded=0" parent="1" source="6" target="27" edge="1"><mxGeometry x="63.999999999999744" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="63.999999999999744" y="110.00000000000001" as="sourcePoint"/><mxPoint x="163.99999999999974" y="10.000000000000018" as="targetPoint"/></mxGeometry></mxCell><mxCell id="32" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=1;exitY=0.067;exitPerimeter=0;endArrow=none;rounded=0" parent="1" source="6" target="29" edge="1"><mxGeometry x="63.999999999999744" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="63.999999999999744" y="110.00000000000001" as="sourcePoint"/><mxPoint x="163.99999999999974" y="10.000000000000018" as="targetPoint"/></mxGeometry></mxCell><mxCell id="33" value="" style="strokeWidth=2" parent="1" vertex="1"><mxGeometry x="43.999999999999744" y="1020" width="1560" height="150" as="geometry"/></mxCell><mxCell id="34" value="Europe Oil Inc.&#xa;&#xa;Auxiliary Oil Refining Plant" style="strokeWidth=2;fontSize=18;fontStyle=1" parent="1" vertex="1"><mxGeometry x="741.9999999999998" y="1020" width="372" height="150" as="geometry"/></mxCell><mxCell id="35" value="" style="strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1113.9999999999998" y="1020" width="26" height="150" as="geometry"/></mxCell><mxCell id="36" value="" style="strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1403.9999999999998" y="1100" width="26" height="70" as="geometry"/></mxCell><mxCell id="37" value="" style="strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1403.9999999999998" y="1020" width="26" height="80" as="geometry"/></mxCell><mxCell id="38" value="" style="strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1429.9999999999998" y="1020" width="304" height="80" as="geometry"/></mxCell><mxCell id="39" value="" style="strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1429.9999999999998" y="1100" width="304" height="70" as="geometry"/></mxCell><mxCell id="40" value="" style="strokeWidth=2" parent="1" vertex="1"><mxGeometry x="33.999999999999744" y="1020.0000000000001" width="30" height="79.99999999999989" as="geometry"/></mxCell><mxCell id="41" value="" style="strokeWidth=2" parent="1" vertex="1"><mxGeometry x="33.999999999999744" y="1100" width="30" height="70" as="geometry"/></mxCell><mxCell id="42" value="" style="strokeWidth=2" parent="1" vertex="1"><mxGeometry x="63.999999999999744" y="1020" width="180" height="40" as="geometry"/></mxCell><mxCell id="43" value="" style="strokeWidth=2" parent="1" vertex="1"><mxGeometry x="63.999999999999744" y="1060" width="180" height="40" as="geometry"/></mxCell><mxCell id="44" value="Plant: RP 12" style="strokeWidth=2" parent="1" vertex="1"><mxGeometry x="63.999999999999744" y="1100" width="180" height="30" as="geometry"/></mxCell><mxCell id="45" value="Page: 1 of 1" style="strokeWidth=2" parent="1" vertex="1"><mxGeometry x="63.999999999999744" y="1130" width="180" height="40" as="geometry"/></mxCell><mxCell id="46" value="10'' CWS" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=1;exitY=0.5;exitPerimeter=0;entryX=0.5;entryY=0;entryPerimeter=0;endArrow=none;rounded=0" parent="1" source="14" target="4" edge="1"><mxGeometry x="3.9999999999997446" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="3.9999999999997446" y="110.00000000000001" as="sourcePoint"/><mxPoint x="103.99999999999974" y="10.000000000000018" as="targetPoint"/><Array as="points"><mxPoint x="793.9999999999998" y="600"/></Array></mxGeometry></mxCell><mxCell id="47" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=0;exitPerimeter=0;entryX=0.5;entryY=0;entryPerimeter=0;endArrow=none;rounded=0" parent="1" source="4" target="5" edge="1"><mxGeometry x="823.9999999999998" y="420" width="100" height="100" as="geometry"><mxPoint x="823.9999999999998" y="520" as="sourcePoint"/><mxPoint x="923.9999999999998" y="420" as="targetPoint"/><Array as="points"><mxPoint x="943.9999999999998" y="280"/></Array></mxGeometry></mxCell><mxCell id="48" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=1;exitY=0.5;exitPerimeter=0;entryX=0;entryY=0.5;entryPerimeter=0;endArrow=none;rounded=0" parent="1" source="5" target="3" edge="1"><mxGeometry x="1203.9999999999998" y="680" width="100" height="100" as="geometry"><mxPoint x="1203.9999999999998" y="780" as="sourcePoint"/><mxPoint x="1303.9999999999998" y="680" as="targetPoint"/><Array as="points"><mxPoint x="1133.9999999999998" y="490"/></Array></mxGeometry></mxCell><mxCell id="49" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;exitX=1;exitY=0.5;exitPerimeter=0;entryX=0;entryY=0.5;entryPerimeter=0;endArrow=none;rounded=0" parent="1" source="3" target="2" edge="1"><mxGeometry x="59.999999999999744" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="59.999999999999744" y="110.00000000000001" as="sourcePoint"/><mxPoint x="159.99999999999974" y="10.000000000000018" as="targetPoint"/></mxGeometry></mxCell><mxCell id="53" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=0;exitPerimeter=0;entryX=0.5;entryY=0;entryPerimeter=0;endArrow=none;rounded=0" parent="1" source="2" target="3" edge="1"><mxGeometry x="59.999999999999744" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="59.999999999999744" y="110.00000000000001" as="sourcePoint"/><mxPoint x="159.99999999999974" y="10.000000000000018" as="targetPoint"/><Array as="points"><mxPoint x="1329.9999999999998" y="290"/></Array></mxGeometry></mxCell><mxCell id="54" value="" style="shape=mxgraph.pid.instruments.level_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="943.9999999999998" y="310" width="40" height="40" as="geometry"/></mxCell><mxCell id="55" value="1204" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="943.9999999999998" y="330" width="40" height="21" as="geometry"/></mxCell><mxCell id="56" value="" style="shape=mxgraph.pid.instruments.level_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="943.9999999999998" y="602.5" width="40" height="40" as="geometry"/></mxCell><mxCell id="57" value="1204" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="943.9999999999998" y="622.5" width="40" height="21" as="geometry"/></mxCell><mxCell id="58" value="" style="shape=mxgraph.pid.instruments.level_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1153.9999999999998" y="515.5" width="40" height="40" as="geometry"/></mxCell><mxCell id="59" value="1206" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="1153.9999999999998" y="535.5" width="40" height="21" as="geometry"/></mxCell><mxCell id="60" value="" style="shape=mxgraph.pid.instruments.level_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1153.9999999999998" y="289.5" width="40" height="40" as="geometry"/></mxCell><mxCell id="61" value="1205" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="1153.9999999999998" y="309.5" width="40" height="21" as="geometry"/></mxCell><mxCell id="62" value="" style="shape=mxgraph.pid.instruments.level_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1473.9999999999998" y="291.5" width="40" height="40" as="geometry"/></mxCell><mxCell id="63" value="1207" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="1473.9999999999998" y="311.5" width="40" height="21" as="geometry"/></mxCell><mxCell id="64" value="" style="shape=mxgraph.pid.instruments.level_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1473.9999999999998" y="515.5" width="40" height="40" as="geometry"/></mxCell><mxCell id="65" value="1208" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="1473.9999999999998" y="535.5" width="40" height="21" as="geometry"/></mxCell><mxCell id="72" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;endArrow=none;rounded=0" parent="1" source="54" target="5" edge="1"><mxGeometry x="3.9999999999997446" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="3.9999999999997446" y="110.00000000000001" as="sourcePoint"/><mxPoint x="103.99999999999974" y="10.000000000000018" as="targetPoint"/><Array as="points"><mxPoint x="993.9999999999998" y="370"/></Array></mxGeometry></mxCell><mxCell id="73" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;endArrow=none;rounded=0" parent="1" source="56" target="5" edge="1"><mxGeometry x="3.9999999999997446" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="3.9999999999997446" y="110.00000000000001" as="sourcePoint"/><mxPoint x="103.99999999999974" y="10.000000000000018" as="targetPoint"/><Array as="points"><mxPoint x="983.9999999999998" y="670"/></Array></mxGeometry></mxCell><mxCell id="74" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;endArrow=none;rounded=0" parent="1" source="60" target="3" edge="1"><mxGeometry x="3.9999999999997446" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="3.9999999999997446" y="110.00000000000001" as="sourcePoint"/><mxPoint x="103.99999999999974" y="10.000000000000018" as="targetPoint"/><Array as="points"><mxPoint x="1203.9999999999998" y="360"/></Array></mxGeometry></mxCell><mxCell id="75" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;endArrow=none;rounded=0" parent="1" source="58" target="3" edge="1"><mxGeometry x="3.9999999999997446" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="3.9999999999997446" y="110.00000000000001" as="sourcePoint"/><mxPoint x="103.99999999999974" y="10.000000000000018" as="targetPoint"/><Array as="points"><mxPoint x="1203.9999999999998" y="580"/></Array></mxGeometry></mxCell><mxCell id="76" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;endArrow=none;rounded=0" parent="1" source="62" target="2" edge="1"><mxGeometry x="3.9999999999997446" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="3.9999999999997446" y="110.00000000000001" as="sourcePoint"/><mxPoint x="103.99999999999974" y="10.000000000000018" as="targetPoint"/><Array as="points"><mxPoint x="1443.9999999999998" y="370"/></Array></mxGeometry></mxCell><mxCell id="77" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;endArrow=none;rounded=0" parent="1" source="64" target="2" edge="1"><mxGeometry x="3.9999999999997446" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="3.9999999999997446" y="110.00000000000001" as="sourcePoint"/><mxPoint x="103.99999999999974" y="10.000000000000018" as="targetPoint"/><Array as="points"><mxPoint x="1453.9999999999998" y="580"/></Array></mxGeometry></mxCell><mxCell id="78" value="OV 01" style="text;align=center;fontStyle=1" parent="1" vertex="1"><mxGeometry x="1233.9999999999998" y="408" width="70" height="26" as="geometry"/></mxCell><mxCell id="79" value="OV 02" style="text;align=center;fontStyle=1" parent="1" vertex="1"><mxGeometry x="1354.9999999999998" y="408" width="70" height="26" as="geometry"/></mxCell><mxCell id="80" value="RT 01" style="text;align=center;fontStyle=1" parent="1" vertex="1"><mxGeometry x="1018.9999999999998" y="330.5" width="70" height="26" as="geometry"/></mxCell><mxCell id="81" value="OT 01" style="text;align=center;fontStyle=1" parent="1" vertex="1"><mxGeometry x="553.9999999999998" y="421" width="70" height="26" as="geometry"/></mxCell><mxCell id="82" value="OM 01" style="text;align=center;fontStyle=1" parent="1" vertex="1"><mxGeometry x="758.9999999999998" y="830" width="70" height="26" as="geometry"/></mxCell><mxCell id="83" value="N-WC-303" style="shape=mxgraph.arrows.signal-in_arrow;fillColor=white;strokeColor=black;strokeWidth=1" parent="1" vertex="1"><mxGeometry x="1598.9999999999998" y="969" width="80" height="30" as="geometry"/></mxCell><mxCell id="84" value="Water to Cooler 01" style="text" parent="1" vertex="1"><mxGeometry x="1578.9999999999998" y="936" width="40" height="26" as="geometry"/></mxCell><mxCell id="85" value="1" parent="1" vertex="1"><mxGeometry x="1568.9999999999998" y="969" width="30" height="30" as="geometry"/></mxCell><mxCell id="86" value="N-RO-302" style="shape=mxgraph.arrows.signal-in_arrow;fillColor=white;strokeColor=black;strokeWidth=1" parent="1" vertex="1"><mxGeometry x="1593.9999999999998" y="695.5" width="80" height="30" as="geometry"/></mxCell><mxCell id="87" value="Refined Oil to ROT-02" style="text" parent="1" vertex="1"><mxGeometry x="1573.9999999999998" y="662.5" width="40" height="26" as="geometry"/></mxCell><mxCell id="88" value="1" parent="1" vertex="1"><mxGeometry x="1563.9999999999998" y="695.5" width="30" height="30" as="geometry"/></mxCell><mxCell id="89" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;entryX=0;entryY=0.67;entryPerimeter=0;endArrow=none;rounded=0" parent="1" source="4" target="102" edge="1"><mxGeometry x="3.9999999999997446" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="3.9999999999997446" y="110.00000000000001" as="sourcePoint"/><mxPoint x="103.99999999999974" y="10.000000000000018" as="targetPoint"/><Array as="points"><mxPoint x="1043.9999999999998" y="981"/></Array></mxGeometry></mxCell><mxCell id="90" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;entryX=0;entryY=0.67;entryPerimeter=0;endArrow=none;rounded=0" parent="1" source="2" target="104" edge="1"><mxGeometry x="3.9999999999997446" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="3.9999999999997446" y="110.00000000000001" as="sourcePoint"/><mxPoint x="103.99999999999974" y="10.000000000000018" as="targetPoint"/><Array as="points"><mxPoint x="1433.9999999999998" y="708"/></Array></mxGeometry></mxCell><mxCell id="93" value="" style="shape=mxgraph.pid.instruments.pressure_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="623.9999999999998" y="730" width="40" height="38" as="geometry"/></mxCell><mxCell id="94" value="1210" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="623.9999999999998" y="749" width="40" height="21" as="geometry"/></mxCell><mxCell id="95" value="" style="shape=mxgraph.pid.instruments.pressure_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="943.9999999999998" y="460" width="40" height="38" as="geometry"/></mxCell><mxCell id="96" value="1209" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="943.9999999999998" y="479" width="40" height="21" as="geometry"/></mxCell><mxCell id="97" value="" style="shape=mxgraph.pid.instruments.pressure_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1403.9999999999998" y="635.5" width="40" height="38" as="geometry"/></mxCell><mxCell id="98" value="1211" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="1403.9999999999998" y="654.5" width="40" height="21" as="geometry"/></mxCell><mxCell id="99" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;entryX=0;entryY=0.67;entryPerimeter=0;endArrow=none;rounded=0" parent="1" source="97" target="104" edge="1"><mxGeometry x="3.9999999999997446" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="3.9999999999997446" y="110.00000000000001" as="sourcePoint"/><mxPoint x="103.99999999999974" y="10.000000000000018" as="targetPoint"/><Array as="points"><mxPoint x="1453.9999999999998" y="708"/></Array></mxGeometry></mxCell><mxCell id="100" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;endArrow=none;rounded=0" parent="1" source="95" target="5" edge="1"><mxGeometry x="3.9999999999997446" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="3.9999999999997446" y="110.00000000000001" as="sourcePoint"/><mxPoint x="103.99999999999974" y="10.000000000000018" as="targetPoint"/><Array as="points"><mxPoint x="993.9999999999998" y="520"/></Array></mxGeometry></mxCell><mxCell id="101" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;endArrow=none;rounded=0" parent="1" source="93" target="4" edge="1"><mxGeometry x="3.9999999999997446" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="3.9999999999997446" y="110.00000000000001" as="sourcePoint"/><mxPoint x="103.99999999999974" y="10.000000000000018" as="targetPoint"/><Array as="points"><mxPoint x="673.9999999999998" y="790"/></Array></mxGeometry></mxCell><mxCell id="102" value="" style="shape=mxgraph.pid.valves.motor_operated_valve;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1317.9999999999998" y="936" width="64" height="67.5" as="geometry"/></mxCell><mxCell id="103" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.67;exitPerimeter=0;endArrow=none;rounded=0" parent="1" source="102" target="85" edge="1"><mxGeometry x="3.9999999999997446" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="3.9999999999997446" y="110.00000000000001" as="sourcePoint"/><mxPoint x="103.99999999999974" y="10.000000000000018" as="targetPoint"/></mxGeometry></mxCell><mxCell id="104" value="" style="shape=mxgraph.pid.valves.motor_operated_valve;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1481.9999999999998" y="662.5" width="64" height="67.5" as="geometry"/></mxCell><mxCell id="106" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.67;exitPerimeter=0;endArrow=none;rounded=0" parent="1" source="104" target="88" edge="1"><mxGeometry x="3.9999999999997446" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="3.9999999999997446" y="110.00000000000001" as="sourcePoint"/><mxPoint x="103.99999999999974" y="10.000000000000018" as="targetPoint"/></mxGeometry></mxCell><mxCell id="107" value="" style="shape=mxgraph.pid.instruments.flow_transmitter;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1329.9999999999998" y="860" width="40" height="38.5" as="geometry"/></mxCell><mxCell id="108" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;endArrow=none;rounded=0" parent="1" source="107" target="102" edge="1"><mxGeometry x="3.9999999999997446" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="3.9999999999997446" y="110.00000000000001" as="sourcePoint"/><mxPoint x="103.99999999999974" y="10.000000000000018" as="targetPoint"/></mxGeometry></mxCell><mxCell id="109" value="" style="shape=mxgraph.pid.instruments.flow_transmitter;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1493.9999999999998" y="594.5" width="40" height="38.5" as="geometry"/></mxCell><mxCell id="112" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;endArrow=none;rounded=0" parent="1" source="109" target="104" edge="1"><mxGeometry x="3.9999999999997446" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="3.9999999999997446" y="110.00000000000001" as="sourcePoint"/><mxPoint x="103.99999999999974" y="10.000000000000018" as="targetPoint"/></mxGeometry></mxCell><mxCell id="113" value="1212" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="1289.9999999999998" y="868.75" width="40" height="21" as="geometry"/></mxCell><mxCell id="114" value="1213" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="1453.9999999999998" y="603.25" width="40" height="21" as="geometry"/></mxCell><mxCell id="115" value="10'' CWS" style="text" parent="1" vertex="1"><mxGeometry x="887.9999999999998" y="253.00000000000003" width="40" height="26" as="geometry"/></mxCell><mxCell id="116" value="5'' GWS" style="text" parent="1" vertex="1"><mxGeometry x="383.9999999999998" y="307" width="40" height="26" as="geometry"/></mxCell><mxCell id="117" value="5'' OWS" style="text" parent="1" vertex="1"><mxGeometry x="1309.9999999999998" y="266" width="40" height="26" as="geometry"/></mxCell><mxCell id="119" value="" style="fillColor=none;strokeColor=none" parent="1" vertex="1"><mxGeometry x="793.9999999999998" y="307" width="50" height="60" as="geometry"/></mxCell><mxCell id="120" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.067;exitPerimeter=0;endArrow=none" parent="1" source="6" target="119" edge="1"><mxGeometry x="3.9999999999997446" y="10.000000000000018" width="100" height="100" as="geometry"><mxPoint x="3.9999999999997446" y="110.00000000000001" as="sourcePoint"/><mxPoint x="103.99999999999974" y="10.000000000000018" as="targetPoint"/></mxGeometry></mxCell><mxCell id="121" value="" style="shape=mxgraph.pid.instruments.pressure_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="383.9999999999998" y="77.50000000000001" width="40" height="38" as="geometry"/></mxCell><mxCell id="122" value="1201" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="383.9999999999998" y="96.50000000000001" width="40" height="21" as="geometry"/></mxCell><mxCell id="125" value="" style="shape=mxgraph.pid.instruments.pressure_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="433.9999999999998" y="76.50000000000001" width="40" height="38" as="geometry"/></mxCell><mxCell id="126" value="1202" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="433.9999999999998" y="95.50000000000001" width="40" height="21" as="geometry"/></mxCell><mxCell id="127" value="" style="shape=mxgraph.pid.instruments.pressure_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="701.9999999999998" y="76.50000000000001" width="40" height="38" as="geometry"/></mxCell><mxCell id="128" value="1203" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="701.9999999999998" y="95.50000000000001" width="40" height="21" as="geometry"/></mxCell><mxCell id="129" value="" style="shape=mxgraph.pid.instruments.pressure_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="623.9999999999998" y="76.50000000000001" width="40" height="38" as="geometry"/></mxCell><mxCell id="130" value="1210" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="623.9999999999998" y="95.50000000000001" width="40" height="21" as="geometry"/></mxCell><mxCell id="131" value="" style="shape=mxgraph.pid.instruments.pressure_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="943.9999999999998" y="77.50000000000001" width="40" height="38" as="geometry"/></mxCell><mxCell id="132" value="1209" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="943.9999999999998" y="96.50000000000001" width="40" height="21" as="geometry"/></mxCell><mxCell id="133" value="" style="shape=mxgraph.pid.instruments.level_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="887.9999999999998" y="77.50000000000001" width="40" height="40" as="geometry"/></mxCell><mxCell id="134" value="1204" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="887.9999999999998" y="97.50000000000001" width="40" height="21" as="geometry"/></mxCell><mxCell id="135" value="" style="shape=mxgraph.pid.instruments.level_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="998.9999999999998" y="77.50000000000001" width="40" height="40" as="geometry"/></mxCell><mxCell id="136" value="1204" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="998.9999999999998" y="97.50000000000001" width="40" height="21" as="geometry"/></mxCell><mxCell id="137" value="" style="shape=mxgraph.pid.instruments.level_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1183.9999999999998" y="77.50000000000001" width="40" height="40" as="geometry"/></mxCell><mxCell id="138" value="1205" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="1183.9999999999998" y="97.50000000000001" width="40" height="21" as="geometry"/></mxCell><mxCell id="139" value="" style="shape=mxgraph.pid.instruments.level_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1126.9999999999998" y="77.50000000000001" width="40" height="40" as="geometry"/></mxCell><mxCell id="140" value="1206" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="1126.9999999999998" y="97.50000000000001" width="40" height="21" as="geometry"/></mxCell><mxCell id="141" value="" style="shape=mxgraph.pid.instruments.flow_transmitter;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1319.9999999999998" y="78.00000000000001" width="40" height="38.5" as="geometry"/></mxCell><mxCell id="142" value="1212" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="1279.9999999999998" y="86.75000000000001" width="40" height="21" as="geometry"/></mxCell><mxCell id="143" value="" style="shape=mxgraph.pid.instruments.pressure_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1369.9999999999998" y="77.25000000000001" width="40" height="38" as="geometry"/></mxCell><mxCell id="144" value="1211" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="1369.9999999999998" y="96.25000000000001" width="40" height="21" as="geometry"/></mxCell><mxCell id="145" value="" style="shape=mxgraph.pid.instruments.level_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1423.9999999999998" y="77.50000000000001" width="40" height="40" as="geometry"/></mxCell><mxCell id="146" value="1207" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="1423.9999999999998" y="97.50000000000001" width="40" height="21" as="geometry"/></mxCell><mxCell id="147" value="" style="shape=mxgraph.pid.instruments.level_transmitter_2;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1473.9999999999998" y="78.00000000000001" width="40" height="40" as="geometry"/></mxCell><mxCell id="148" value="1208" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="1473.9999999999998" y="98.00000000000001" width="40" height="21" as="geometry"/></mxCell><mxCell id="149" value="" style="shape=mxgraph.pid.instruments.flow_transmitter;fillColor=white;strokeColor=black" parent="1" vertex="1"><mxGeometry x="1573.9999999999998" y="78.25000000000001" width="40" height="38.5" as="geometry"/></mxCell><mxCell id="150" value="1213" style="text;fontSize=8;align=center" parent="1" vertex="1"><mxGeometry x="1533.9999999999998" y="87.00000000000001" width="40" height="21" as="geometry"/></mxCell><mxCell id="151" value="SCADA" style="horizontal=0" parent="1" vertex="1"><mxGeometry x="33.999999999999744" y="30.000000000000018" width="20" height="100" as="geometry"/></mxCell><mxCell id="152" value="PRESS" style="text;align=center;fontSize=10" parent="1" vertex="1"><mxGeometry x="383.9999999999998" y="40.000000000000014" width="40" height="26" as="geometry"/></mxCell><mxCell id="153" value="PRESS" style="text;align=center;fontSize=10" parent="1" vertex="1"><mxGeometry x="433.9999999999998" y="40.000000000000014" width="40" height="26" as="geometry"/></mxCell><mxCell id="154" value="PRESS" style="text;align=center;fontSize=10" parent="1" vertex="1"><mxGeometry x="623.9999999999998" y="40.000000000000014" width="40" height="26" as="geometry"/></mxCell><mxCell id="155" value="PRESS" style="text;align=center;fontSize=10" parent="1" vertex="1"><mxGeometry x="701.9999999999998" y="40.000000000000014" width="40" height="26" as="geometry"/></mxCell><mxCell id="156" value="LEVEL" style="text;align=center;fontSize=10" parent="1" vertex="1"><mxGeometry x="887.9999999999998" y="40.000000000000014" width="40" height="26" as="geometry"/></mxCell><mxCell id="157" value="LEVEL" style="text;align=center;fontSize=10" parent="1" vertex="1"><mxGeometry x="998.9999999999998" y="40.000000000000014" width="40" height="26" as="geometry"/></mxCell><mxCell id="158" value="LEVEL" style="text;align=center;fontSize=10" parent="1" vertex="1"><mxGeometry x="1126.9999999999998" y="40.000000000000014" width="40" height="26" as="geometry"/></mxCell><mxCell id="159" value="LEVEL" style="text;align=center;fontSize=10" parent="1" vertex="1"><mxGeometry x="1183.9999999999998" y="40.000000000000014" width="40" height="26" as="geometry"/></mxCell><mxCell id="160" value="LEVEL" style="text;align=center;fontSize=10" parent="1" vertex="1"><mxGeometry x="1424.9999999999998" y="40.000000000000014" width="40" height="26" as="geometry"/></mxCell><mxCell id="161" value="LEVEL" style="text;align=center;fontSize=10" parent="1" vertex="1"><mxGeometry x="1473.9999999999998" y="40.000000000000014" width="40" height="26" as="geometry"/></mxCell><mxCell id="162" value="PRESS" style="text;align=center;fontSize=10" parent="1" vertex="1"><mxGeometry x="943.9999999999998" y="40.000000000000014" width="40" height="26" as="geometry"/></mxCell><mxCell id="163" value="PRESS" style="text;align=center;fontSize=10" parent="1" vertex="1"><mxGeometry x="1369.9999999999998" y="40.000000000000014" width="40" height="26" as="geometry"/></mxCell><mxCell id="164" value="FLOW" style="text;align=center;fontSize=10" parent="1" vertex="1"><mxGeometry x="1319.9999999999998" y="40.000000000000014" width="40" height="26" as="geometry"/></mxCell><mxCell id="165" value="FLOW" style="text;align=center;fontSize=10" parent="1" vertex="1"><mxGeometry x="1573.9999999999998" y="40.000000000000014" width="40" height="26" as="geometry"/></mxCell><mxCell id="181" value="A" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="33.999999999999744" y="10.000000000000018" width="146.00000000000026" height="20" as="geometry"/></mxCell><mxCell id="182" value="B" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="180" y="10.000000000000016" width="146.00000000000026" height="20" as="geometry"/></mxCell><mxCell id="183" value="C" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="326.0000000000002" y="10.000000000000014" width="146.00000000000026" height="20" as="geometry"/></mxCell><mxCell id="184" value="D" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="472.00000000000045" y="10.000000000000014" width="146.00000000000026" height="20" as="geometry"/></mxCell><mxCell id="185" value="E" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="618.0000000000007" y="10.00000000000002" width="146.00000000000026" height="20" as="geometry"/></mxCell><mxCell id="186" value="F" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="764.000000000001" y="10.00000000000002" width="146.00000000000026" height="20" as="geometry"/></mxCell><mxCell id="187" value="G" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="910.0000000000014" y="10.000000000000014" width="146.00000000000026" height="20" as="geometry"/></mxCell><mxCell id="188" value="H" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="1056.0000000000016" y="10.000000000000014" width="146.00000000000026" height="20" as="geometry"/></mxCell><mxCell id="189" value="I" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="1202.0000000000018" y="10.000000000000014" width="146.00000000000026" height="20" as="geometry"/></mxCell><mxCell id="190" value="J" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="1350.9999999999995" y="10.000000000000028" width="146.00000000000026" height="20" as="geometry"/></mxCell><mxCell id="191" value="K" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="1495.9999999999995" y="10.000000000000014" width="146.00000000000026" height="20" as="geometry"/></mxCell><mxCell id="192" value="" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="1641.9999999999998" y="10.000000000000028" width="92.44444444444457" height="20" as="geometry"/></mxCell><mxCell id="193" value="1" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="11.999999999999217" y="30.000000000000032" width="22.000000000000526" height="99.99999999999999" as="geometry"/></mxCell><mxCell id="194" value="2" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="11.999999999999218" y="130.00000000000003" width="22.000000000000526" height="99.99999999999999" as="geometry"/></mxCell><mxCell id="195" value="3" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="11.999999999999226" y="229" width="22.000000000000526" height="99.99999999999999" as="geometry"/></mxCell><mxCell id="196" value="4" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="11.999999999999218" y="329" width="22.000000000000526" height="99.99999999999999" as="geometry"/></mxCell><mxCell id="197" value="5" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="11.999999999999226" y="429" width="22.000000000000526" height="99.99999999999999" as="geometry"/></mxCell><mxCell id="198" value="6" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="11.999999999999226" y="529" width="22.000000000000526" height="99.99999999999999" as="geometry"/></mxCell><mxCell id="199" value="7" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="11.999999999999233" y="629" width="22.000000000000526" height="99.99999999999999" as="geometry"/></mxCell><mxCell id="200" value="8" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="11.999999999999233" y="729.0000000000001" width="22.000000000000526" height="99.99999999999999" as="geometry"/></mxCell><mxCell id="202" value="9" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="11.999999999999233" y="829.0000000000002" width="22.000000000000526" height="99.99999999999999" as="geometry"/></mxCell><mxCell id="203" value="10" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="11.999999999999233" y="929.0000000000003" width="22.000000000000526" height="90.99999999999966" as="geometry"/></mxCell><mxCell id="204" value="" style="strokeWidth=3" parent="1" vertex="1"><mxGeometry x="11.999999999999233" y="1020" width="22.000000000000526" height="150" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/plcladder1.xml b/public/assets/plugins/mxgraph/templates/xml/plcladder1.xml
new file mode 100644
index 0000000..d23e8a2
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/plcladder1.xml
@@ -0,0 +1 @@
+<mxGraphModel grid="1" guides="1" tooltips="1" connect="1" fold="1" page="0" background="none" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="67" value="light_a" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="300" y="80" width="100" height="50" as="geometry"/></mxCell><mxCell id="74" value="" vertex="1" parent="1"><mxGeometry x="60" y="10" width="10" height="1990" as="geometry"/></mxCell><mxCell id="76" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="67" target="74"><mxGeometry x="50" width="100" height="100" as="geometry"><mxPoint x="50" y="100" as="sourcePoint"/><mxPoint x="150" as="targetPoint"/></mxGeometry></mxCell><mxCell id="77" value="in_1" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="300" y="180" width="100" height="50" as="geometry"/></mxCell><mxCell id="78" value="in_2" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="300" y="280" width="100" height="50" as="geometry"/></mxCell><mxCell id="79" value="in_3" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="300" y="380" width="100" height="50" as="geometry"/></mxCell><mxCell id="80" value="no_conflict" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="300" y="480" width="100" height="50" as="geometry"/></mxCell><mxCell id="82" value="vehicle1_sensor" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="230" y="580" width="100" height="50" as="geometry"/></mxCell><mxCell id="83" value="vehicle2_sensor" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="390" y="580" width="100" height="50" as="geometry"/></mxCell><mxCell id="84" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;entryX=1;entryY=0.5;entryPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="83" target="82"><mxGeometry x="50" width="100" height="100" as="geometry"><mxPoint x="50" y="100" as="sourcePoint"/><mxPoint x="150" as="targetPoint"/></mxGeometry></mxCell><mxCell id="87" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="82" target="88"><mxGeometry x="150" y="220" width="100" height="100" as="geometry"><mxPoint x="150" y="320" as="sourcePoint"/><mxPoint x="160" y="100" as="targetPoint"/><Array as="points"><mxPoint x="180" y="605"/></Array></mxGeometry></mxCell><mxCell id="88" value="" style="strokeColor=none;fillColor=none" vertex="1" parent="1"><mxGeometry x="160" y="70" width="40" height="35" as="geometry"/></mxCell><mxCell id="89" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="80" target="88"><mxGeometry x="50" width="100" height="100" as="geometry"><mxPoint x="50" y="100" as="sourcePoint"/><mxPoint x="150" as="targetPoint"/><Array as="points"><mxPoint x="250" y="505"/></Array></mxGeometry></mxCell><mxCell id="90" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="79" target="88"><mxGeometry x="50" width="100" height="100" as="geometry"><mxPoint x="50" y="100" as="sourcePoint"/><mxPoint x="150" as="targetPoint"/><Array as="points"><mxPoint x="180" y="405"/></Array></mxGeometry></mxCell><mxCell id="91" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="78" target="88"><mxGeometry x="50" width="100" height="100" as="geometry"><mxPoint x="50" y="100" as="sourcePoint"/><mxPoint x="150" as="targetPoint"/><Array as="points"><mxPoint x="180" y="305"/></Array></mxGeometry></mxCell><mxCell id="92" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="77" target="88"><mxGeometry x="50" width="100" height="100" as="geometry"><mxPoint x="50" y="100" as="sourcePoint"/><mxPoint x="150" as="targetPoint"/><Array as="points"><mxPoint x="180" y="205"/></Array></mxGeometry></mxCell><mxCell id="93" value="" vertex="1" parent="1"><mxGeometry x="1060" y="10" width="10" height="1990" as="geometry"/></mxCell><mxCell id="94" value="critical_stop" style="shape=mxgraph.electrical.plc_ladder.not_contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="660" y="80" width="100" height="50" as="geometry"/></mxCell><mxCell id="95" value="enable" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="660" y="180" width="100" height="50" as="geometry"/></mxCell><mxCell id="96" value="" style="strokeColor=none;fillColor=none" vertex="1" parent="1"><mxGeometry x="610" y="70" width="40" height="35" as="geometry"/></mxCell><mxCell id="97" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="95" target="96"><mxGeometry x="150" width="100" height="100" as="geometry"><mxPoint x="150" y="100" as="sourcePoint"/><mxPoint x="250" as="targetPoint"/><Array as="points"><mxPoint x="630" y="205"/></Array></mxGeometry></mxCell><mxCell id="98" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;entryX=1;entryY=0.5;entryPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="94" target="67"><mxGeometry x="150" width="100" height="100" as="geometry"><mxPoint x="150" y="100" as="sourcePoint"/><mxPoint x="500" y="105" as="targetPoint"/></mxGeometry></mxCell><mxCell id="99" value="" style="strokeColor=none;fillColor=none" vertex="1" parent="1"><mxGeometry x="540" y="70" width="40" height="35" as="geometry"/></mxCell><mxCell id="100" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="77" target="99"><mxGeometry x="150" width="100" height="100" as="geometry"><mxPoint x="500" y="205" as="sourcePoint"/><mxPoint x="250" as="targetPoint"/><Array as="points"><mxPoint x="560" y="205"/></Array></mxGeometry></mxCell><mxCell id="101" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;entryX=0;entryY=0.5;entryPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="94" target="109"><mxGeometry x="50" width="100" height="100" as="geometry"><mxPoint x="50" y="100" as="sourcePoint"/><mxPoint x="150" as="targetPoint"/></mxGeometry></mxCell><mxCell id="102" value="" style="strokeColor=none;fillColor=none" vertex="1" parent="1"><mxGeometry x="800" y="70" width="40" height="35" as="geometry"/></mxCell><mxCell id="103" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="95" target="102"><mxGeometry x="150" width="100" height="100" as="geometry"><mxPoint x="150" y="100" as="sourcePoint"/><mxPoint x="250" as="targetPoint"/><Array as="points"><mxPoint x="820" y="205"/></Array></mxGeometry></mxCell><mxCell id="104" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="78" target="99"><mxGeometry x="50" width="100" height="100" as="geometry"><mxPoint x="50" y="100" as="sourcePoint"/><mxPoint x="150" as="targetPoint"/><Array as="points"><mxPoint x="560" y="305"/></Array></mxGeometry></mxCell><mxCell id="105" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="79" target="99"><mxGeometry x="50" width="100" height="100" as="geometry"><mxPoint x="50" y="100" as="sourcePoint"/><mxPoint x="150" as="targetPoint"/><Array as="points"><mxPoint x="560" y="405"/></Array></mxGeometry></mxCell><mxCell id="106" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="80" target="99"><mxGeometry x="50" width="100" height="100" as="geometry"><mxPoint x="50" y="100" as="sourcePoint"/><mxPoint x="150" as="targetPoint"/><Array as="points"><mxPoint x="560" y="505"/></Array></mxGeometry></mxCell><mxCell id="107" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="83" target="99"><mxGeometry x="50" width="100" height="100" as="geometry"><mxPoint x="50" y="100" as="sourcePoint"/><mxPoint x="150" as="targetPoint"/><Array as="points"><mxPoint x="560" y="605"/></Array></mxGeometry></mxCell><mxCell id="108" value="001" style="text" vertex="1" parent="1"><mxGeometry x="10" y="92" width="40" height="26" as="geometry"/></mxCell><mxCell id="109" value="ramp_1" style="shape=mxgraph.electrical.plc_ladder.output_1;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="920" y="80" width="100" height="50" as="geometry"/></mxCell><mxCell id="110" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="109" target="93"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="111" value="light_b" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="300" y="690" width="100" height="50" as="geometry"/></mxCell><mxCell id="112" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" source="111" parent="1"><mxGeometry x="50" y="610" width="100" height="100" as="geometry"><mxPoint x="50" y="710" as="sourcePoint"/><mxPoint x="70" y="715" as="targetPoint"/></mxGeometry></mxCell><mxCell id="113" value="in_1" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="300" y="790" width="100" height="50" as="geometry"/></mxCell><mxCell id="114" value="in_2" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="300" y="890" width="100" height="50" as="geometry"/></mxCell><mxCell id="115" value="in_3" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="300" y="990" width="100" height="50" as="geometry"/></mxCell><mxCell id="116" value="no_conflict" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="300" y="1090" width="100" height="50" as="geometry"/></mxCell><mxCell id="117" value="vehicle3_sensor" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="230" y="1190" width="100" height="50" as="geometry"/></mxCell><mxCell id="118" value="vehicle4_sensor" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="390" y="1190" width="100" height="50" as="geometry"/></mxCell><mxCell id="119" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;entryX=1;entryY=0.5;entryPerimeter=0;rounded=0;endArrow=none" edge="1" source="118" target="117" parent="1"><mxGeometry x="50" y="610" width="100" height="100" as="geometry"><mxPoint x="50" y="710" as="sourcePoint"/><mxPoint x="150" y="610" as="targetPoint"/></mxGeometry></mxCell><mxCell id="120" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" source="117" target="121" parent="1"><mxGeometry x="150" y="830" width="100" height="100" as="geometry"><mxPoint x="150" y="930" as="sourcePoint"/><mxPoint x="160" y="710" as="targetPoint"/><Array as="points"><mxPoint x="180" y="1215"/></Array></mxGeometry></mxCell><mxCell id="121" value="" style="strokeColor=none;fillColor=none" vertex="1" parent="1"><mxGeometry x="160" y="680" width="40" height="35" as="geometry"/></mxCell><mxCell id="122" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" source="116" target="121" parent="1"><mxGeometry x="50" y="610" width="100" height="100" as="geometry"><mxPoint x="50" y="710" as="sourcePoint"/><mxPoint x="150" y="610" as="targetPoint"/><Array as="points"><mxPoint x="250" y="1115"/></Array></mxGeometry></mxCell><mxCell id="123" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" source="115" target="121" parent="1"><mxGeometry x="50" y="610" width="100" height="100" as="geometry"><mxPoint x="50" y="710" as="sourcePoint"/><mxPoint x="150" y="610" as="targetPoint"/><Array as="points"><mxPoint x="180" y="1015"/></Array></mxGeometry></mxCell><mxCell id="124" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" source="114" target="121" parent="1"><mxGeometry x="50" y="610" width="100" height="100" as="geometry"><mxPoint x="50" y="710" as="sourcePoint"/><mxPoint x="150" y="610" as="targetPoint"/><Array as="points"><mxPoint x="180" y="915"/></Array></mxGeometry></mxCell><mxCell id="125" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" source="113" target="121" parent="1"><mxGeometry x="50" y="610" width="100" height="100" as="geometry"><mxPoint x="50" y="710" as="sourcePoint"/><mxPoint x="150" y="610" as="targetPoint"/><Array as="points"><mxPoint x="180" y="815"/></Array></mxGeometry></mxCell><mxCell id="126" value="critical_stop" style="shape=mxgraph.electrical.plc_ladder.not_contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="660" y="690" width="100" height="50" as="geometry"/></mxCell><mxCell id="127" value="enable" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="660" y="790" width="100" height="50" as="geometry"/></mxCell><mxCell id="128" value="" style="strokeColor=none;fillColor=none" vertex="1" parent="1"><mxGeometry x="610" y="680" width="40" height="35" as="geometry"/></mxCell><mxCell id="129" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" source="127" target="128" parent="1"><mxGeometry x="150" y="610" width="100" height="100" as="geometry"><mxPoint x="150" y="710" as="sourcePoint"/><mxPoint x="250" y="610" as="targetPoint"/><Array as="points"><mxPoint x="630" y="815"/></Array></mxGeometry></mxCell><mxCell id="130" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;entryX=1;entryY=0.5;entryPerimeter=0;rounded=0;endArrow=none" edge="1" source="126" target="111" parent="1"><mxGeometry x="150" y="610" width="100" height="100" as="geometry"><mxPoint x="150" y="710" as="sourcePoint"/><mxPoint x="500" y="715" as="targetPoint"/></mxGeometry></mxCell><mxCell id="131" value="" style="strokeColor=none;fillColor=none" vertex="1" parent="1"><mxGeometry x="540" y="680" width="40" height="35" as="geometry"/></mxCell><mxCell id="132" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" source="113" target="131" parent="1"><mxGeometry x="150" y="610" width="100" height="100" as="geometry"><mxPoint x="500" y="815" as="sourcePoint"/><mxPoint x="250" y="610" as="targetPoint"/><Array as="points"><mxPoint x="560" y="815"/></Array></mxGeometry></mxCell><mxCell id="133" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;entryX=0;entryY=0.5;entryPerimeter=0;rounded=0;endArrow=none" edge="1" source="126" target="141" parent="1"><mxGeometry x="50" y="610" width="100" height="100" as="geometry"><mxPoint x="50" y="710" as="sourcePoint"/><mxPoint x="150" y="610" as="targetPoint"/></mxGeometry></mxCell><mxCell id="134" value="" style="strokeColor=none;fillColor=none" vertex="1" parent="1"><mxGeometry x="800" y="680" width="40" height="35" as="geometry"/></mxCell><mxCell id="135" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" source="127" target="134" parent="1"><mxGeometry x="150" y="610" width="100" height="100" as="geometry"><mxPoint x="150" y="710" as="sourcePoint"/><mxPoint x="250" y="610" as="targetPoint"/><Array as="points"><mxPoint x="820" y="815"/></Array></mxGeometry></mxCell><mxCell id="136" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" source="114" target="131" parent="1"><mxGeometry x="50" y="610" width="100" height="100" as="geometry"><mxPoint x="50" y="710" as="sourcePoint"/><mxPoint x="150" y="610" as="targetPoint"/><Array as="points"><mxPoint x="560" y="915"/></Array></mxGeometry></mxCell><mxCell id="137" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" source="115" target="131" parent="1"><mxGeometry x="50" y="610" width="100" height="100" as="geometry"><mxPoint x="50" y="710" as="sourcePoint"/><mxPoint x="150" y="610" as="targetPoint"/><Array as="points"><mxPoint x="560" y="1015"/></Array></mxGeometry></mxCell><mxCell id="138" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" source="116" target="131" parent="1"><mxGeometry x="50" y="610" width="100" height="100" as="geometry"><mxPoint x="50" y="710" as="sourcePoint"/><mxPoint x="150" y="610" as="targetPoint"/><Array as="points"><mxPoint x="560" y="1115"/></Array></mxGeometry></mxCell><mxCell id="139" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" source="118" target="131" parent="1"><mxGeometry x="50" y="610" width="100" height="100" as="geometry"><mxPoint x="50" y="710" as="sourcePoint"/><mxPoint x="150" y="610" as="targetPoint"/><Array as="points"><mxPoint x="560" y="1215"/></Array></mxGeometry></mxCell><mxCell id="140" value="002" style="text" vertex="1" parent="1"><mxGeometry x="10" y="702" width="40" height="26" as="geometry"/></mxCell><mxCell id="141" value="ramp_2" style="shape=mxgraph.electrical.plc_ladder.output_1;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="920" y="690" width="100" height="50" as="geometry"/></mxCell><mxCell id="142" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" source="141" parent="1"><mxGeometry y="610" width="100" height="100" as="geometry"><mxPoint y="710" as="sourcePoint"/><mxPoint x="1060" y="715" as="targetPoint"/></mxGeometry></mxCell><mxCell id="145" value="critical_stop" style="shape=mxgraph.electrical.plc_ladder.not_contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="200" y="1320" width="100" height="50" as="geometry"/></mxCell><mxCell id="146" value="alarm_light" style="shape=mxgraph.electrical.plc_ladder.output_1;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="920" y="1320" width="100" height="50" as="geometry"/></mxCell><mxCell id="147" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="146" target="93"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="148" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="145" target="74"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="149" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;entryX=0;entryY=0.5;entryPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="145" target="146"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="150" value="vehicle1_sensor" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="200" y="1460" width="100" height="50" as="geometry"/></mxCell><mxCell id="152" value="vehicle2_sensor" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="200" y="1560" width="100" height="50" as="geometry"/></mxCell><mxCell id="153" value="vehicle3_sensor" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="200" y="1660" width="100" height="50" as="geometry"/></mxCell><mxCell id="154" value="vehicle4_sensor" style="shape=mxgraph.electrical.plc_ladder.contact;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="200" y="1760" width="100" height="50" as="geometry"/></mxCell><mxCell id="155" value="passage_light" style="shape=mxgraph.electrical.plc_ladder.output_1;fillColor=white;strokeColor=black;verticalLabelPosition=bottom;verticalAlign=top" vertex="1" parent="1"><mxGeometry x="920" y="1460" width="100" height="50" as="geometry"/></mxCell><mxCell id="156" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="155" target="93"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="157" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="150" target="155"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="158" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="150" target="74"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="159" value="" style="strokeColor=none;fillColor=none" vertex="1" parent="1"><mxGeometry x="135" y="1450" width="40" height="35" as="geometry"/></mxCell><mxCell id="160" value="" style="strokeColor=none;fillColor=none" vertex="1" parent="1"><mxGeometry x="540" y="1450" width="40" height="35" as="geometry"/></mxCell><mxCell id="161" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="152" target="159"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="155" y="1585"/></Array></mxGeometry></mxCell><mxCell id="162" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="153" target="159"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="155" y="1685"/></Array></mxGeometry></mxCell><mxCell id="163" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="154" target="159"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="155" y="1785"/></Array></mxGeometry></mxCell><mxCell id="164" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="152" target="160"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="430" y="1585"/></Array></mxGeometry></mxCell><mxCell id="165" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="153" target="160"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="430" y="1685"/></Array></mxGeometry></mxCell><mxCell id="166" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;rounded=0;endArrow=none" edge="1" parent="1" source="154" target="160"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="420" y="1785"/></Array></mxGeometry></mxCell><mxCell id="167" value="003" style="text" vertex="1" parent="1"><mxGeometry x="10" y="1332" width="40" height="26" as="geometry"/></mxCell><mxCell id="168" value="004" style="text" vertex="1" parent="1"><mxGeometry x="10" y="1472" width="40" height="26" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/seqdiag1.xml b/public/assets/plugins/mxgraph/templates/xml/seqdiag1.xml
new file mode 100644
index 0000000..130ac37
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/seqdiag1.xml
@@ -0,0 +1 @@
+<mxGraphModel grid="1" guides="1" tooltips="1" connect="1" fold="1" page="0" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="69" value="" style="fillColor=#DEE8FF;strokeColor=none" parent="1" vertex="1"><mxGeometry x="40" y="10" width="1570" height="800" as="geometry"/></mxCell><mxCell id="20" value="" style="fillColor=#CCD5EB" parent="1" vertex="1"><mxGeometry x="140" y="410" width="1460" height="390" as="geometry"/></mxCell><mxCell id="81" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;endArrow=none;dashed=1" parent="1" edge="1"><mxGeometry x="1460" y="437.8935185185186" width="100" height="100" as="geometry"><mxPoint x="1354.5" y="610" as="sourcePoint"/><mxPoint x="1354.5" y="770" as="targetPoint"/></mxGeometry></mxCell><mxCell id="2" value="" style="fillColor=#CC4125;strokeColor=#660000" parent="1" vertex="1"><mxGeometry x="200" y="150" width="10" height="130" as="geometry"/></mxCell><mxCell id="3" value="validate()" style="edgeStyle=none;verticalLabelPosition=top;verticalAlign=bottom;labelPosition=left;align=right" parent="1" edge="1"><mxGeometry x="110" y="49.5" width="100" height="100" as="geometry"><mxPoint x="110" y="149.5" as="sourcePoint"/><mxPoint x="200" y="149.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="4" value=":dialog" style="shadow=1;fillColor=#A2C4C9;strokeColor=none" parent="1" vertex="1"><mxGeometry x="152.5" y="60" width="105" height="50" as="geometry"/></mxCell><mxCell id="6" value="" style="fillColor=#CC4125;strokeColor=#660000" parent="1" vertex="1"><mxGeometry x="342.5" y="180" width="10" height="80" as="geometry"/></mxCell><mxCell id="7" value="&lt;&lt;javascript&gt;&gt;&#xa;:Comments" style="shadow=1;fillColor=#A2C4C9;strokeColor=none" parent="1" vertex="1"><mxGeometry x="295" y="60" width="105" height="50" as="geometry"/></mxCell><mxCell id="8" value="" style="edgeStyle=none;endArrow=none;dashed=1" parent="1" source="7" target="6" edge="1"><mxGeometry x="272.3350694444445" y="165" width="100" height="100" as="geometry"><mxPoint x="347.2588734567901" y="110" as="sourcePoint"/><mxPoint x="347.5761959876544" y="165" as="targetPoint"/></mxGeometry></mxCell><mxCell id="9" value="validate()" style="edgeStyle=none;verticalLabelPosition=top;verticalAlign=bottom" parent="1" edge="1"><mxGeometry x="220" y="92" width="100" height="100" as="geometry"><mxPoint x="210" y="179.5" as="sourcePoint"/><mxPoint x="340" y="179.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="11" value="" style="edgeStyle=none;verticalLabelPosition=top;verticalAlign=bottom;endArrow=none;startArrow=classic;dashed=1" parent="1" edge="1"><mxGeometry x="220" y="172.25887345679013" width="100" height="100" as="geometry"><mxPoint x="210" y="259.7588734567901" as="sourcePoint"/><mxPoint x="340" y="259.7588734567901" as="targetPoint"/></mxGeometry></mxCell><mxCell id="12" value="" style="edgeStyle=none;verticalLabelPosition=top;verticalAlign=bottom;labelPosition=left;align=right;endArrow=none;startArrow=classic;dashed=1" parent="1" edge="1"><mxGeometry x="110" y="179.75887345679013" width="100" height="100" as="geometry"><mxPoint x="110" y="279.7588734567901" as="sourcePoint"/><mxPoint x="200" y="279.7588734567901" as="targetPoint"/></mxGeometry></mxCell><mxCell id="13" value="&lt;&lt;create&gt;&gt;" style="edgeStyle=none;verticalLabelPosition=top;verticalAlign=bottom;dashed=1" parent="1" edge="1"><mxGeometry x="385.45524691358025" y="113.91550925925924" width="100" height="100" as="geometry"><mxPoint x="352.5" y="201.20563271604937" as="sourcePoint"/><mxPoint x="462.5" y="201.20563271604937" as="targetPoint"/></mxGeometry></mxCell><mxCell id="15" value="&lt;&lt;javascript&gt;&gt;&#xa;:Proxy" style="shadow=1;fillColor=#A2C4C9;strokeColor=none" parent="1" vertex="1"><mxGeometry x="462.2839506172839" y="169.99999999999997" width="105" height="50" as="geometry"/></mxCell><mxCell id="16" value="" style="edgeStyle=none;endArrow=none" parent="1" source="15" target="17" edge="1"><mxGeometry x="437.042824074074" y="270" width="100" height="100" as="geometry"><mxPoint x="514.542824074074" y="219.99999999999997" as="sourcePoint"/><mxPoint x="514.542824074074" y="239.99999999999997" as="targetPoint"/></mxGeometry></mxCell><mxCell id="17" value="" style="fillColor=#CC4125;strokeColor=#660000" parent="1" vertex="1"><mxGeometry x="509.7839506172839" y="244.3942901234568" width="10" height="130" as="geometry"/></mxCell><mxCell id="19" value="&lt;&lt;ajax&gt;&gt;" style="edgeStyle=elbowEdgeStyle;elbow=vertical;verticalLabelPosition=top;verticalAlign=bottom" parent="1" source="6" target="17" edge="1"><mxGeometry x="350" y="290" width="100" height="100" as="geometry"><mxPoint x="350" y="390" as="sourcePoint"/><mxPoint x="450" y="290" as="targetPoint"/></mxGeometry></mxCell><mxCell id="21" value="" style="fillColor=#CC4125;strokeColor=#660000" parent="1" vertex="1"><mxGeometry x="670" y="269.3942901234568" width="10" height="80" as="geometry"/></mxCell><mxCell id="22" value="&lt;&lt;servlet&gt;&gt;&#xa;:CVSServlet" style="shadow=1;fillColor=#A2C4C9;strokeColor=none" parent="1" vertex="1"><mxGeometry x="622.5" y="60" width="105" height="50" as="geometry"/></mxCell><mxCell id="23" value="" style="edgeStyle=none;endArrow=none;dashed=1" parent="1" source="22" target="21" edge="1"><mxGeometry x="614.4878472222224" y="174.99999999999997" width="100" height="100" as="geometry"><mxPoint x="674.6527777777778" y="110" as="sourcePoint"/><mxPoint x="674.6527777777778" y="260" as="targetPoint"/></mxGeometry></mxCell><mxCell id="24" value="&lt;&lt;service&gt;&gt;&#xa;:CVSService" style="shadow=1;fillColor=#A2C4C9;strokeColor=none" parent="1" vertex="1"><mxGeometry x="750" y="60" width="105" height="50" as="geometry"/></mxCell><mxCell id="25" value="" style="edgeStyle=none;endArrow=none;dashed=1" parent="1" source="24" target="26" edge="1"><mxGeometry x="727.3350694444446" y="165" width="100" height="100" as="geometry"><mxPoint x="802.2588734567901" y="110" as="sourcePoint"/><mxPoint x="802.5761959876544" y="165" as="targetPoint"/></mxGeometry></mxCell><mxCell id="26" value="" style="fillColor=#CC4125;strokeColor=#660000" parent="1" vertex="1"><mxGeometry x="797.4999999999999" y="289.3942901234568" width="10" height="40" as="geometry"/></mxCell><mxCell id="27" value="&lt;&lt;ajax&gt;&gt;" style="edgeStyle=elbowEdgeStyle;elbow=vertical;verticalLabelPosition=top;verticalAlign=bottom" parent="1" source="17" target="21" edge="1"><mxGeometry x="540" y="270" width="100" height="100" as="geometry"><mxPoint x="540" y="370" as="sourcePoint"/><mxPoint x="640" y="270" as="targetPoint"/><Array as="points"><mxPoint x="590" y="270"/></Array></mxGeometry></mxCell><mxCell id="28" value="errors" style="edgeStyle=elbowEdgeStyle;elbow=vertical;dashed=1;verticalLabelPosition=bottom;verticalAlign=top" parent="1" source="21" target="17" edge="1"><mxGeometry x="550" y="280" width="100" height="100" as="geometry"><mxPoint x="529.7839506172838" y="280" as="sourcePoint"/><mxPoint x="680" y="280" as="targetPoint"/><Array as="points"><mxPoint x="593" y="348"/></Array></mxGeometry></mxCell><mxCell id="30" value="&lt;&lt;javascript&gt;&gt;&#xa;:GimqRequest&#xa;Batch" style="shadow=1;fillColor=#A2C4C9;strokeColor=none" parent="1" vertex="1"><mxGeometry x="952.5" y="60" width="105" height="50" as="geometry"/></mxCell><mxCell id="33" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;endArrow=none;dashed=1" parent="1" source="4" target="2" edge="1"><mxGeometry x="230.00000000000003" y="310" width="100" height="100" as="geometry"><mxPoint x="230.00000000000003" y="410" as="sourcePoint"/><mxPoint x="330" y="310" as="targetPoint"/></mxGeometry></mxCell><mxCell id="34" value="validate()" style="edgeStyle=elbowEdgeStyle;elbow=vertical;verticalLabelPosition=top;verticalAlign=bottom" parent="1" edge="1"><mxGeometry x="550" y="261.7361111111111" width="100" height="100" as="geometry"><mxPoint x="680" y="291.1304012345679" as="sourcePoint"/><mxPoint x="797.4999999999999" y="291.1304012345679" as="targetPoint"/><Array as="points"/></mxGeometry></mxCell><mxCell id="35" value="errors" style="edgeStyle=elbowEdgeStyle;elbow=vertical;dashed=1;verticalLabelPosition=bottom;verticalAlign=top" parent="1" edge="1"><mxGeometry x="560" y="309.65277777777777" width="100" height="100" as="geometry"><mxPoint x="797.4999999999999" y="329.0470679012346" as="sourcePoint"/><mxPoint x="680" y="329.0470679012346" as="targetPoint"/><Array as="points"/></mxGeometry></mxCell><mxCell id="38" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;endArrow=none;dashed=1" parent="1" edge="1"><mxGeometry x="932.2588734567901" y="240" width="100" height="100" as="geometry"><mxPoint x="802.2588734567901" y="329.3942901234568" as="sourcePoint"/><mxPoint x="802.2588734567901" y="370" as="targetPoint"/><Array as="points"><mxPoint x="802.2588734567901" y="350"/></Array></mxGeometry></mxCell><mxCell id="39" value="" style="ellipse;fillColor=none" parent="1" vertex="1"><mxGeometry x="802.5000000000001" y="304.3942901234568" width="9.999999999999886" height="10" as="geometry"/></mxCell><mxCell id="40" value=" - user&#xa; validation&#xa;&#xa; - password check" style="shape=note;align=left" parent="1" vertex="1"><mxGeometry x="829.9729938271605" y="180.17361111111111" width="120.02700617283949" height="109.82638888888889" as="geometry"/></mxCell><mxCell id="41" value="" style="edgeStyle=none;endArrow=none;dashed=1" parent="1" source="40" target="39" edge="1"><mxGeometry x="1030" y="180" width="100" height="100" as="geometry"><mxPoint x="1030" y="280" as="sourcePoint"/><mxPoint x="1130" y="180" as="targetPoint"/></mxGeometry></mxCell><mxCell id="42" value="" style="fillColor=#CC4125;strokeColor=#660000" parent="1" vertex="1"><mxGeometry x="200" y="360" width="10" height="220" as="geometry"/></mxCell><mxCell id="43" value="             &lt;&lt;callback&gt;&gt;                                " style="edgeStyle=elbowEdgeStyle;elbow=vertical;dashed=0;verticalLabelPosition=top;verticalAlign=bottom;align=right" parent="1" source="17" target="42" edge="1"><mxGeometry x="190" y="329.75887345679007" width="100" height="100" as="geometry"><mxPoint x="500" y="310" as="sourcePoint"/><mxPoint x="220" y="370" as="targetPoint"/><Array as="points"/></mxGeometry></mxCell><mxCell id="44" value="" style="edgeStyle=none;dashed=1;endArrow=none" parent="1" source="2" target="42" edge="1"><mxGeometry x="50" y="300" width="100" height="100" as="geometry"><mxPoint x="50" y="400" as="sourcePoint"/><mxPoint x="150" y="300" as="targetPoint"/></mxGeometry></mxCell><mxCell id="46" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;endArrow=none" parent="1" source="42" edge="1"><mxGeometry x="60" y="310" width="100" height="100" as="geometry"><mxPoint x="60" y="410" as="sourcePoint"/><mxPoint x="150" y="360" as="targetPoint"/></mxGeometry></mxCell><mxCell id="47" value="{100..600ms}" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;startArrow=open;endArrow=open;labelPosition=left;align=right" parent="1" edge="1"><mxGeometry x="61.20563271604938" y="290" width="100" height="100" as="geometry"><mxPoint x="181.20563271604937" y="280" as="sourcePoint"/><mxPoint x="181.20563271604937" y="360" as="targetPoint"/></mxGeometry></mxCell><mxCell id="48" value="" style="fillColor=#CC4125;strokeColor=#660000" parent="1" vertex="1"><mxGeometry x="342.5" y="464.1666666666667" width="10" height="95.83333333333331" as="geometry"/></mxCell><mxCell id="49" value="" style="fillColor=#CC4125;strokeColor=#660000" parent="1" vertex="1"><mxGeometry x="1000" y="468.3333333333333" width="10" height="81.66666666666669" as="geometry"/></mxCell><mxCell id="50" value="" style="edgeStyle=none;endArrow=none;dashed=1" parent="1" source="30" target="49" edge="1"><mxGeometry x="956.5711805555559" y="205" width="100" height="100" as="geometry"><mxPoint x="1031.7361111111113" y="150" as="sourcePoint"/><mxPoint x="1031.7361111111113" y="329.3942901234568" as="targetPoint"/></mxGeometry></mxCell><mxCell id="51" value="post_comments()" style="edgeStyle=elbowEdgeStyle;elbow=vertical;verticalLabelPosition=top;verticalAlign=bottom" parent="1" edge="1"><mxGeometry x="212.5" y="469.58333333333337" width="100" height="100" as="geometry"><mxPoint x="210" y="469.58333333333337" as="sourcePoint"/><mxPoint x="342.5" y="469.58333333333337" as="targetPoint"/><Array as="points"/></mxGeometry></mxCell><mxCell id="52" value="" style="edgeStyle=none;endArrow=none;dashed=1" parent="1" source="6" target="48" edge="1"><mxGeometry x="376.5711805555559" y="339.6971450617284" width="100" height="100" as="geometry"><mxPoint x="451.7361111111112" y="284.6971450617284" as="sourcePoint"/><mxPoint x="451.7361111111112" y="464.0914351851852" as="targetPoint"/></mxGeometry></mxCell><mxCell id="53" value="BeginRequest()" style="edgeStyle=elbowEdgeStyle;elbow=vertical;verticalLabelPosition=top;verticalAlign=bottom" parent="1" edge="1"><mxGeometry x="530" y="436.8055555555556" width="100" height="100" as="geometry"><mxPoint x="352.5" y="477.56944444444446" as="sourcePoint"/><mxPoint x="1000" y="477.56944444444446" as="targetPoint"/><Array as="points"/></mxGeometry></mxCell><mxCell id="54" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;dashed=1;verticalLabelPosition=bottom;verticalAlign=top" parent="1" edge="1"><mxGeometry x="530" y="549.0779320987654" width="100" height="100" as="geometry"><mxPoint x="1000" y="541.7361111111111" as="sourcePoint"/><mxPoint x="352.49999999999994" y="541.7361111111111" as="targetPoint"/><Array as="points"/></mxGeometry></mxCell><mxCell id="55" value="&lt;&lt;javascript&gt;&gt;&#xa;:Proxy" style="shadow=1;fillColor=#A2C4C9;strokeColor=none" parent="1" vertex="1"><mxGeometry x="1090" y="462.08333333333337" width="105" height="50" as="geometry"/></mxCell><mxCell id="56" value="" style="edgeStyle=none;endArrow=none;dashed=1" parent="1" source="55" target="57" edge="1"><mxGeometry x="1204.0711805555559" y="380.08680555555554" width="100" height="100" as="geometry"><mxPoint x="1279.2361111111113" y="325.08680555555554" as="sourcePoint"/><mxPoint x="1350" y="445.08680555555554" as="targetPoint"/></mxGeometry></mxCell><mxCell id="57" value="" style="fillColor=#CC4125;strokeColor=#660000" parent="1" vertex="1"><mxGeometry x="1137.5" y="530" width="10" height="90" as="geometry"/></mxCell><mxCell id="58" value="" style="fillColor=#CC4125;strokeColor=#660000" parent="1" vertex="1"><mxGeometry x="1350" y="540" width="10" height="70" as="geometry"/></mxCell><mxCell id="60" value="&lt;&lt;create&gt;&gt;" style="edgeStyle=elbowEdgeStyle;elbow=vertical;verticalLabelPosition=top;verticalAlign=bottom;dashed=1" parent="1" source="49" target="55" edge="1"><mxGeometry x="901.25" y="322.5" width="100" height="100" as="geometry"><mxPoint x="1031.25" y="351.8942901234568" as="sourcePoint"/><mxPoint x="1148.75" y="351.8942901234568" as="targetPoint"/><Array as="points"/></mxGeometry></mxCell><mxCell id="61" value="&lt;&lt;ajax&gt;&gt;" style="edgeStyle=elbowEdgeStyle;elbow=vertical;verticalLabelPosition=top;verticalAlign=bottom" parent="1" source="49" target="57" edge="1"><mxGeometry x="1065" y="359.5" width="100" height="100" as="geometry"><mxPoint x="1044.7839506172838" y="359.5" as="sourcePoint"/><mxPoint x="1195" y="359.5" as="targetPoint"/><Array as="points"/></mxGeometry></mxCell><mxCell id="62" value="postComments()" style="edgeStyle=elbowEdgeStyle;elbow=vertical;verticalLabelPosition=top;verticalAlign=bottom" parent="1" edge="1"><mxGeometry x="1225" y="309.5" width="100" height="100" as="geometry"><mxPoint x="1147.5" y="542.5" as="sourcePoint"/><mxPoint x="1350" y="542.5" as="targetPoint"/><Array as="points"/></mxGeometry></mxCell><mxCell id="63" value="&lt;&lt;json&gt;&gt;" style="edgeStyle=elbowEdgeStyle;elbow=vertical;dashed=1;verticalLabelPosition=bottom;verticalAlign=top" parent="1" edge="1"><mxGeometry x="1075" y="396" width="100" height="100" as="geometry"><mxPoint x="1350" y="606.5" as="sourcePoint"/><mxPoint x="1147.5" y="606.5" as="targetPoint"/><Array as="points"/></mxGeometry></mxCell><mxCell id="64" value="&lt;&lt;service&gt;&gt;&#xa;:GimqService" style="shadow=1;fillColor=#A2C4C9;strokeColor=none" parent="1" vertex="1"><mxGeometry x="1302.5" y="60" width="105" height="50" as="geometry"/></mxCell><mxCell id="65" value="" style="edgeStyle=none;endArrow=none;dashed=1" parent="1" source="64" target="58" edge="1"><mxGeometry x="1174.0711805555559" y="210" width="100" height="100" as="geometry"><mxPoint x="1222.5" y="115" as="sourcePoint"/><mxPoint x="1222.5" y="445" as="targetPoint"/></mxGeometry></mxCell><mxCell id="66" value="" style="fillColor=#CC4125;strokeColor=#660000" parent="1" vertex="1"><mxGeometry x="200" y="600" width="10" height="130" as="geometry"/></mxCell><mxCell id="67" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;dashed=1;verticalLabelPosition=bottom;verticalAlign=top" parent="1" edge="1"><mxGeometry x="507.50000000000006" y="664.3418209876543" width="100" height="100" as="geometry"><mxPoint x="342.5" y="549.5" as="sourcePoint"/><mxPoint x="210" y="549.5" as="targetPoint"/><Array as="points"/></mxGeometry></mxCell><mxCell id="68" value="&lt;&lt;callback&gt;&gt;" style="edgeStyle=elbowEdgeStyle;elbow=vertical;dashed=1;verticalLabelPosition=bottom;verticalAlign=bottom" parent="1" source="57" target="66" edge="1"><mxGeometry x="540" y="559.0779320987654" width="100" height="100" as="geometry"><mxPoint x="1010" y="551.7361111111111" as="sourcePoint"/><mxPoint x="362.49999999999994" y="551.7361111111111" as="targetPoint"/><Array as="points"/></mxGeometry></mxCell><mxCell id="71" value="rt submit_changes" style="rounded=1;fontStyle=1;fillColor=#FFD966;strokeColor=none" parent="1" vertex="1"><mxGeometry x="50" y="20" width="150" height="30" as="geometry"/></mxCell><mxCell id="72" value="opt" style="rounded=1;fontStyle=1;fillColor=#FFD966;strokeColor=none" parent="1" vertex="1"><mxGeometry x="152.5" y="420" width="87.5" height="30" as="geometry"/></mxCell><mxCell id="74" value="Handle errors from Gimq" style="fillColor=#BFC8DB" parent="1" vertex="1"><mxGeometry x="190" y="625" width="310" height="60.55555555555554" as="geometry"/></mxCell><mxCell id="75" value="ref" style="rounded=1;fontStyle=1;fillColor=#FFD966;strokeColor=none" parent="1" vertex="1"><mxGeometry x="196.25" y="632.8935185185186" width="53.75" height="25" as="geometry"/></mxCell><mxCell id="76" value="" style="align=left;fillColor=#BFC8DB" parent="1" vertex="1"><mxGeometry x="189.99999999999997" y="699.7222222222223" width="1201.1944444444443" height="60.55555555555554" as="geometry"/></mxCell><mxCell id="77" value="ref" style="rounded=1;fontStyle=1;fillColor=#FFD966;strokeColor=none" parent="1" vertex="1"><mxGeometry x="196.24999999999997" y="707.6157407407409" width="53.75" height="25" as="geometry"/></mxCell><mxCell id="78" value="Request all changes" style="text;align=left" parent="1" vertex="1"><mxGeometry x="268.05555555555554" y="720.1157407407408" width="351.80555555555554" height="26" as="geometry"/></mxCell><mxCell id="82" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;endArrow=none" parent="1" edge="1"><mxGeometry x="59.999999999999986" y="419.7106481481482" width="100" height="100" as="geometry"><mxPoint x="200" y="469.7106481481482" as="sourcePoint"/><mxPoint x="149.99999999999997" y="469.7106481481482" as="targetPoint"/></mxGeometry></mxCell><mxCell id="83" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;endArrow=none" parent="1" edge="1"><mxGeometry x="60" y="499.71064814814815" width="100" height="100" as="geometry"><mxPoint x="200.00000000000003" y="549.7106481481482" as="sourcePoint"/><mxPoint x="150" y="549.7106481481482" as="targetPoint"/></mxGeometry></mxCell><mxCell id="84" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;endArrow=none" parent="1" edge="1"><mxGeometry x="59.999999999999986" y="559.7106481481482" width="100" height="100" as="geometry"><mxPoint x="200" y="609.7106481481482" as="sourcePoint"/><mxPoint x="149.99999999999997" y="609.7106481481482" as="targetPoint"/></mxGeometry></mxCell><mxCell id="85" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;endArrow=none" parent="1" edge="1"><mxGeometry x="49.99999999999999" y="649.4328703703704" width="100" height="100" as="geometry"><mxPoint x="190.00000000000003" y="699.4328703703704" as="sourcePoint"/><mxPoint x="140" y="699.4328703703704" as="targetPoint"/></mxGeometry></mxCell><mxCell id="86" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;endArrow=none" parent="1" edge="1"><mxGeometry x="49.99999999999993" y="709.9884259259259" width="100" height="100" as="geometry"><mxPoint x="189.99999999999994" y="759.9884259259259" as="sourcePoint"/><mxPoint x="139.99999999999994" y="759.9884259259259" as="targetPoint"/></mxGeometry></mxCell><mxCell id="87" value="{5..50ms}" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;startArrow=open;endArrow=open;labelPosition=left;align=right" parent="1" edge="1"><mxGeometry x="41.44675925925927" y="479.1666666666667" width="100" height="100" as="geometry"><mxPoint x="161.44675925925927" y="469.1666666666667" as="sourcePoint"/><mxPoint x="161.44675925925927" y="549.1666666666667" as="targetPoint"/></mxGeometry></mxCell><mxCell id="88" value="{1..500ms}" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;startArrow=open;endArrow=open;labelPosition=left;align=right" parent="1" edge="1"><mxGeometry x="42.89351851851853" y="560" width="100" height="100" as="geometry"><mxPoint x="161.44675925925927" y="550" as="sourcePoint"/><mxPoint x="161.44675925925927" y="610" as="targetPoint"/></mxGeometry></mxCell><mxCell id="89" value="{10..50ms}" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;startArrow=open;endArrow=open;labelPosition=left;align=right" parent="1" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint x="153.94675925925927" y="700.2777777777778" as="sourcePoint"/><mxPoint x="153.94675925925927" y="760.2777777777778" as="targetPoint"/><mxPoint x="-4.236111111111107" y="-0.2777777777777883" as="offset"/></mxGeometry></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/sitemap1.xml b/public/assets/plugins/mxgraph/templates/xml/sitemap1.xml
new file mode 100644
index 0000000..93048cc
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/sitemap1.xml
@@ -0,0 +1 @@
+<mxGraphModel scale="0.833" grid="1" guides="1" tooltips="1" connect="1" fold="1" page="0" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="123" value="" style="fillColor=#E6B8AF;strokeColor=none" parent="1" vertex="1"><mxGeometry x="770" y="40.00000000000003" width="210" height="99.99999999999994" as="geometry"/></mxCell><mxCell id="122" value="" style="fillColor=#B6D7A8;strokeColor=none" parent="1" vertex="1"><mxGeometry x="120" y="190" width="1470" height="99.99999999999994" as="geometry"/></mxCell><mxCell id="121" value="" style="fillColor=#FFF2CC;strokeColor=none" parent="1" vertex="1"><mxGeometry x="1580.0000000000005" y="409.99999999999994" width="150" height="430.00000000000006" as="geometry"/></mxCell><mxCell id="120" value="" style="fillColor=#FFF2CC;strokeColor=none" parent="1" vertex="1"><mxGeometry x="990.0000000000001" y="310.0000000000002" width="149.9999999999999" height="189.99999999999977" as="geometry"/></mxCell><mxCell id="119" value="" style="fillColor=#FFF2CC;strokeColor=none" parent="1" vertex="1"><mxGeometry x="779.9999999999999" y="560" width="149.9999999999999" height="280" as="geometry"/></mxCell><mxCell id="118" value="" style="fillColor=#FFF2CC;strokeColor=none" parent="1" vertex="1"><mxGeometry x="250.00000000000009" y="310.0000000000002" width="149.99999999999991" height="439.9999999999998" as="geometry"/></mxCell><mxCell id="117" value="" style="fillColor=#FFF2CC;strokeColor=none" parent="1" vertex="1"><mxGeometry x="250.00000000000003" y="400.0000000000001" width="1480" height="169.9999999999999" as="geometry"/></mxCell><mxCell id="116" value="" style="fillColor=#D9EAD3;strokeColor=none" parent="1" vertex="1"><mxGeometry x="1580" y="850.0000000000002" width="150" height="80" as="geometry"/></mxCell><mxCell id="115" value="" style="fillColor=#D9EAD3;strokeColor=none" parent="1" vertex="1"><mxGeometry x="1230" y="580" width="330" height="80" as="geometry"/></mxCell><mxCell id="114" value="" style="fillColor=#D9EAD3;strokeColor=none" parent="1" vertex="1"><mxGeometry x="779.9999999999999" y="850.0000000000001" width="150" height="80" as="geometry"/></mxCell><mxCell id="113" value="" style="fillColor=#D9EAD3;strokeColor=none" parent="1" vertex="1"><mxGeometry x="430.00000000000006" y="580.0000000000001" width="329.99999999999994" height="80" as="geometry"/></mxCell><mxCell id="112" value="" style="fillColor=#D9EAD3;strokeColor=none" parent="1" vertex="1"><mxGeometry x="249.99999999999997" y="760" width="150" height="80" as="geometry"/></mxCell><mxCell id="111" value="" style="fillColor=#D9EAD3;strokeColor=none" parent="1" vertex="1"><mxGeometry x="70" y="400.0000000000001" width="150" height="80" as="geometry"/></mxCell><mxCell id="110" value="" style="fillColor=#D0E0E3;strokeColor=none" parent="1" vertex="1"><mxGeometry x="1230" y="310.0000000000001" width="500" height="80" as="geometry"/></mxCell><mxCell id="109" value="" style="fillColor=#D0E0E3;strokeColor=none" parent="1" vertex="1"><mxGeometry x="430" y="310" width="500" height="80" as="geometry"/></mxCell><mxCell id="108" value="" style="fillColor=#D0E0E3;strokeColor=none" parent="1" vertex="1"><mxGeometry x="70.00000000000001" y="310" width="150" height="80" as="geometry"/></mxCell><mxCell id="2" value="Head of Development" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="780" y="50" width="190" height="80" as="geometry"/></mxCell><mxCell id="4" value="Training Department" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1384.9999999999998" y="200" width="190" height="80" as="geometry"/></mxCell><mxCell id="9" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=2;rounded=0" parent="1" source="2" target="4" edge="1"><mxGeometry x="360" y="80" width="100" height="100" as="geometry"><mxPoint x="360" y="180" as="sourcePoint"/><mxPoint x="460" y="80" as="targetPoint"/></mxGeometry></mxCell><mxCell id="10" value="Technical Support" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="970" y="200" width="190" height="80" as="geometry"/></mxCell><mxCell id="12" value="Research and &#xa;Development" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="584.9999999999999" y="200" width="190" height="80" as="geometry"/></mxCell><mxCell id="13" value="Human Resources" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="130" y="200" width="190" height="80" as="geometry"/></mxCell><mxCell id="14" value="Regular Report" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="80" y="320" width="130" height="60" as="geometry"/></mxCell><mxCell id="15" value="Data Collection" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="80" y="410" width="130" height="60" as="geometry"/></mxCell><mxCell id="16" value="Programming" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="260" y="320" width="130" height="60" as="geometry"/></mxCell><mxCell id="17" value="HTTP" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="260" y="410" width="130" height="60" as="geometry"/></mxCell><mxCell id="18" value="HTS" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="260" y="500" width="130" height="60" as="geometry"/></mxCell><mxCell id="19" value="CVS" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="260" y="590" width="130" height="60" as="geometry"/></mxCell><mxCell id="20" value="Client / Server" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="260" y="680" width="130" height="60" as="geometry"/></mxCell><mxCell id="23" value="Data Collection" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="260" y="769.9999999999999" width="130" height="60" as="geometry"/></mxCell><mxCell id="25" value="SI" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="440" y="320" width="130" height="60" as="geometry"/></mxCell><mxCell id="26" value="Programming" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="440" y="410" width="130" height="60" as="geometry"/></mxCell><mxCell id="27" value="Client / Server" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="440" y="500" width="130" height="60" as="geometry"/></mxCell><mxCell id="28" value="Data Collection" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="440" y="590" width="130" height="60" as="geometry"/></mxCell><mxCell id="29" value="SSI" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="615" y="320" width="130" height="60" as="geometry"/></mxCell><mxCell id="30" value="Programming" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="615" y="410" width="130" height="60" as="geometry"/></mxCell><mxCell id="31" value="Client / Server" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="615" y="500" width="130" height="60" as="geometry"/></mxCell><mxCell id="32" value="Data Collection" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="615" y="590" width="130" height="60" as="geometry"/></mxCell><mxCell id="33" value="XMI" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="790" y="320" width="130" height="60" as="geometry"/></mxCell><mxCell id="34" value="Programming" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="790" y="410" width="130" height="60" as="geometry"/></mxCell><mxCell id="35" value="HTTP" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="790" y="500" width="130" height="60" as="geometry"/></mxCell><mxCell id="36" value="HTS" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="790" y="590" width="130" height="60" as="geometry"/></mxCell><mxCell id="37" value="CVS" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="790" y="680" width="130" height="60" as="geometry"/></mxCell><mxCell id="38" value="Client / Server" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="790" y="770" width="130" height="60" as="geometry"/></mxCell><mxCell id="39" value="Data Collection" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="790" y="860" width="130" height="60" as="geometry"/></mxCell><mxCell id="41" value="FAQ" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1000" y="320" width="130" height="60" as="geometry"/></mxCell><mxCell id="42" value="Know Issues" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1000" y="410" width="130" height="60" as="geometry"/></mxCell><mxCell id="43" value="Knowhow" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1000" y="500" width="130" height="60" as="geometry"/></mxCell><mxCell id="44" value="SI" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1240" y="320.00000000000006" width="130" height="60" as="geometry"/></mxCell><mxCell id="45" value="Programming" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1240" y="410.00000000000006" width="130" height="60" as="geometry"/></mxCell><mxCell id="46" value="Client / Server" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1240" y="500.00000000000006" width="130" height="60" as="geometry"/></mxCell><mxCell id="47" value="Data Collection" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1240" y="590.0000000000001" width="130" height="60" as="geometry"/></mxCell><mxCell id="48" value="SSI" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1415" y="320.00000000000006" width="130" height="60" as="geometry"/></mxCell><mxCell id="49" value="Programming" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1415" y="410.00000000000006" width="130" height="60" as="geometry"/></mxCell><mxCell id="50" value="Client / Server" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1415" y="500.00000000000006" width="130" height="60" as="geometry"/></mxCell><mxCell id="51" value="Data Collection" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1415" y="590.0000000000001" width="130" height="60" as="geometry"/></mxCell><mxCell id="52" value="XMI" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1590" y="320.00000000000006" width="130" height="60" as="geometry"/></mxCell><mxCell id="53" value="Programming" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1590" y="410.00000000000006" width="130" height="60" as="geometry"/></mxCell><mxCell id="54" value="HTTP" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1590" y="500.00000000000006" width="130" height="60" as="geometry"/></mxCell><mxCell id="55" value="HTS" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1590" y="590.0000000000001" width="130" height="60" as="geometry"/></mxCell><mxCell id="56" value="CVS" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1590" y="680.0000000000001" width="130" height="60" as="geometry"/></mxCell><mxCell id="57" value="Client / Server" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1590" y="770.0000000000001" width="130" height="60" as="geometry"/></mxCell><mxCell id="58" value="Data Collection" style="rounded=1;fillColor=#696969;gradientColor=#454545;strokeColor=none;fontColor=#FFFFFF;fontStyle=1;fontFamily=Tahoma;fontSize=14" parent="1" vertex="1"><mxGeometry x="1590" y="860.0000000000001" width="130" height="60" as="geometry"/></mxCell><mxCell id="59" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=2;rounded=0" parent="1" source="2" target="12" edge="1"><mxGeometry x="370" y="90" width="100" height="100" as="geometry"><mxPoint x="884.9999999999999" y="140" as="sourcePoint"/><mxPoint x="1489.9999999999998" y="210" as="targetPoint"/></mxGeometry></mxCell><mxCell id="61" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=2;rounded=0" parent="1" source="2" target="13" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="62" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=2;rounded=0" parent="1" source="13" target="14" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="64" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="13" target="16" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="225" y="300"/></Array></mxGeometry></mxCell><mxCell id="65" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="13" target="17" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="225" y="340"/></Array></mxGeometry></mxCell><mxCell id="66" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="13" target="18" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="225" y="390"/></Array></mxGeometry></mxCell><mxCell id="67" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="13" target="19" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="225" y="440"/></Array></mxGeometry></mxCell><mxCell id="68" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="13" target="20" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="225" y="480"/></Array></mxGeometry></mxCell><mxCell id="69" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="13" target="23" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="225" y="530"/></Array></mxGeometry></mxCell><mxCell id="70" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="25" target="26" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="420" y="400"/></Array></mxGeometry></mxCell><mxCell id="71" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="25" target="27" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="420" y="440"/></Array></mxGeometry></mxCell><mxCell id="72" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="25" target="28" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="420" y="480"/></Array></mxGeometry></mxCell><mxCell id="73" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="29" target="30" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="590" y="400"/></Array></mxGeometry></mxCell><mxCell id="74" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="29" target="31" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="590" y="440"/></Array></mxGeometry></mxCell><mxCell id="75" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="29" target="32" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="590" y="480"/></Array></mxGeometry></mxCell><mxCell id="76" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="33" target="34" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="770" y="400"/></Array></mxGeometry></mxCell><mxCell id="77" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="33" target="35" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="770" y="440"/></Array></mxGeometry></mxCell><mxCell id="78" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="33" target="36" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="770" y="490"/></Array></mxGeometry></mxCell><mxCell id="79" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="33" target="37" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="770" y="530"/></Array></mxGeometry></mxCell><mxCell id="80" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="33" target="38" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="770" y="570"/></Array></mxGeometry></mxCell><mxCell id="81" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="33" target="39" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="770" y="620"/></Array></mxGeometry></mxCell><mxCell id="82" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="41" target="42" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="980" y="400"/></Array></mxGeometry></mxCell><mxCell id="83" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="41" target="43" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="980" y="450"/></Array></mxGeometry></mxCell><mxCell id="84" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="44" target="45" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1220" y="410"/></Array></mxGeometry></mxCell><mxCell id="85" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="44" target="46" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1220" y="440"/></Array></mxGeometry></mxCell><mxCell id="86" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="44" target="47" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1220" y="490"/></Array></mxGeometry></mxCell><mxCell id="87" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="48" target="49" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1390" y="400"/></Array></mxGeometry></mxCell><mxCell id="88" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="48" target="50" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1390" y="460"/></Array></mxGeometry></mxCell><mxCell id="89" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="48" target="51" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1390" y="490"/></Array></mxGeometry></mxCell><mxCell id="90" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="52" target="53" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1570" y="400"/></Array></mxGeometry></mxCell><mxCell id="91" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="52" target="54" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1570" y="440"/></Array></mxGeometry></mxCell><mxCell id="92" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="52" target="55" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1570" y="490"/></Array></mxGeometry></mxCell><mxCell id="93" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="52" target="56" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1570" y="540"/></Array></mxGeometry></mxCell><mxCell id="94" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="52" target="57" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1570" y="590"/></Array></mxGeometry></mxCell><mxCell id="95" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;strokeWidth=2;rounded=0" parent="1" source="52" target="58" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1570" y="630"/></Array></mxGeometry></mxCell><mxCell id="100" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=2;rounded=0" parent="1" source="12" target="25" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="101" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=2;rounded=0" parent="1" source="12" target="29" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="102" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=2;rounded=0" parent="1" source="12" target="33" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="103" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=2;rounded=0" parent="1" source="10" target="41" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="104" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=2;rounded=0" parent="1" source="4" target="48" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="105" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=2;rounded=0" parent="1" source="4" target="44" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="106" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;strokeWidth=2;rounded=0" parent="1" source="4" target="52" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="107" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;rounded=0;strokeWidth=2" parent="1" source="14" target="15" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/socnet1.xml b/public/assets/plugins/mxgraph/templates/xml/socnet1.xml
new file mode 100644
index 0000000..1d2cf4c
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/socnet1.xml
@@ -0,0 +1 @@
+<mxGraphModel scale="0.579" grid="0" guides="0" tooltips="1" connect="1" fold="1" page="0" background="#003300" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="60" value="MoneyGuy" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="288.87871999999925" y="215.89888000000042" width="40" height="60" as="geometry"/></mxCell><mxCell id="61" value="FatWatcher" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1080.8185599999993" y="84.01792000000046" width="40" height="60" as="geometry"/></mxCell><mxCell id="62" value="Quietdran" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1290.3046399999992" y="524.4972800000003" width="40" height="60" as="geometry"/></mxCell><mxCell id="63" value="IronEagle" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2582.861759999999" y="344.66304000000036" width="40" height="60" as="geometry"/></mxCell><mxCell id="64" value="BlogCat" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="445.1635199999996" y="1134.1824000000001" width="40" height="60" as="geometry"/></mxCell><mxCell id="65" value="MaPhantom" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="164.35711999999967" y="131.3894400000005" width="40" height="60" as="geometry"/></mxCell><mxCell id="66" value="SilentHunter" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="264.3103999999994" y="46.78656000000046" width="40" height="60" as="geometry"/></mxCell><mxCell id="67" value="AvengedExquiste" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="399.0534399999997" y="44.29824000000053" width="40" height="60" as="geometry"/></mxCell><mxCell id="68" value="CrazyNetwork" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="123.36383999999953" y="265.7587200000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="69" value="starvingGod" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1097.6294399999992" y="1293.9488000000001" width="40" height="60" as="geometry"/></mxCell><mxCell id="70" value="MicroChef" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1881.4758399999992" y="1063.3481600000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="71" value="WolfPriest" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2084.475839999999" y="1091.3481600000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="72" value="Packbitsu" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1990.851839999999" y="1464.3881600000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="73" value="warston" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2395.959679999999" y="485.29152000000045" width="40" height="60" as="geometry"/></mxCell><mxCell id="74" value="CloudShaman" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="517.6985599999994" y="450.50176000000044" width="40" height="60" as="geometry"/></mxCell><mxCell id="75" value="StonerFanatic" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2722.817279999999" y="522.6630400000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="76" value="	kbSmith" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="717.6985599999994" y="440.50176000000044" width="40" height="60" as="geometry"/></mxCell><mxCell id="77" value="	lacStoned" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1218.2713599999995" y="1552.7808" width="40" height="60" as="geometry"/></mxCell><mxCell id="78" value="	FishBloom" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="186.08575999999948" y="405.10464000000036" width="40" height="60" as="geometry"/></mxCell><mxCell id="79" value="	ShipWiz" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1308.2713599999995" y="1542.7808" width="40" height="60" as="geometry"/></mxCell><mxCell id="80" value="	Dishkarta" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1921.263359999999" y="266.78656000000046" width="40" height="60" as="geometry"/></mxCell><mxCell id="81" value="	CraftySnake" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1859.4758399999992" y="1212.3481600000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="82" value="DeathMan" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1976.4758399999992" y="1233.3481600000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="83" value="	DishStar" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2097.475839999999" y="1226.3481600000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="84" value="	cocaGrabber" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="407.69855999999936" y="560.5017600000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="85" value="sukaMelody" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="507.69855999999936" y="570.5017600000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="86" value="	CockyStack" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="607.6985599999994" y="570.5017600000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="87" value="	Passionmentra" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="785.6985599999994" y="565.5017600000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="88" value="	fadrosa" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1238.2713599999995" y="1682.7808" width="40" height="60" as="geometry"/></mxCell><mxCell id="89" value="	tritress" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1216.5772799999993" y="1370.5728000000001" width="40" height="60" as="geometry"/></mxCell><mxCell id="90" value="	RunningMofo" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1398.2713599999995" y="1532.7808" width="40" height="60" as="geometry"/></mxCell><mxCell id="91" value="	LovelyPuss" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1328.2713599999995" y="1682.7808" width="40" height="60" as="geometry"/></mxCell><mxCell id="92" value="	BoobyJerk" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1749.569279999999" y="1324.7897600000003" width="40" height="60" as="geometry"/></mxCell><mxCell id="93" value="	FlashingBlonde" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1879.4758399999992" y="1322.3481600000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="94" value="	HollowHorse" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1989.4758399999992" y="1332.3481600000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="95" value="	orrissHopper" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2069.475839999999" y="1342.3481600000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="96" value="	BlogFighter" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="417.69855999999936" y="680.5017600000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="97" value="	Nursena" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="517.6985599999994" y="680.5017600000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="98" value="Moonlight0002" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="670.6985599999994" y="642.5017600000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="99" value="	ShipGhost" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="747.6985599999994" y="734.5017600000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="100" value="	DayHead" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2823.097599999999" y="1531.5072" width="40" height="60" as="geometry"/></mxCell><mxCell id="101" value="	shaggBuns" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1120.0467199999994" y="1475.12896" width="40" height="60" as="geometry"/></mxCell><mxCell id="102" value="	Flaminstrength" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="982.2147199999995" y="1437.0144000000003" width="40" height="60" as="geometry"/></mxCell><mxCell id="103" value="AwesomeChris" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1702.3603199999993" y="669.4272000000003" width="40" height="60" as="geometry"/></mxCell><mxCell id="104" value="WOWlet" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1832.3603199999993" y="679.4272000000003" width="40" height="60" as="geometry"/></mxCell><mxCell id="105" value="	LiveDoony" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1438.2713599999995" y="1682.7808" width="40" height="60" as="geometry"/></mxCell><mxCell id="106" value="Dragho" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1649.3603199999993" y="782.4272000000003" width="40" height="60" as="geometry"/></mxCell><mxCell id="107" value="	furWatcher" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1832.3603199999993" y="809.4272000000003" width="40" height="60" as="geometry"/></mxCell><mxCell id="108" value="	PhotoMuffin" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2621.578239999999" y="559.4739200000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="109" value="	CellRenegade" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1922.3603199999993" y="689.4272000000003" width="40" height="60" as="geometry"/></mxCell><mxCell id="110" value="	MrsTwig" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1932.3603199999993" y="829.4272000000003" width="40" height="60" as="geometry"/></mxCell><mxCell id="111" value="	Blazehold" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2684.172159999999" y="1531.60064" width="40" height="60" as="geometry"/></mxCell><mxCell id="112" value="	Fashionkin" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2582.571519999999" y="1648.5984" width="40" height="60" as="geometry"/></mxCell><mxCell id="113" value="miruko" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2682.571519999999" y="1648.5984" width="40" height="60" as="geometry"/></mxCell><mxCell id="114" value="SnailPorker" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2762.571519999999" y="1648.5984" width="40" height="60" as="geometry"/></mxCell><mxCell id="115" value="	lactron" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1125.6774399999995" y="827.4995200000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="116" value="millonstrength" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2967.454719999999" y="961.8220800000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="117" value="	LadySpent" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2498.6003199999986" y="1372.7219200000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="118" value="	texSnake" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2359.6748799999987" y="972.1024000000003" width="40" height="60" as="geometry"/></mxCell><mxCell id="119" value="	durSummer" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2469.6748799999987" y="982.1024000000003" width="40" height="60" as="geometry"/></mxCell><mxCell id="120" value="	ekag" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2569.6748799999987" y="992.1024000000003" width="40" height="60" as="geometry"/></mxCell><mxCell id="121" value="	Coffeemore" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2659.6748799999987" y="1002.1024000000003" width="40" height="60" as="geometry"/></mxCell><mxCell id="122" value="	chuChris" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2749.6748799999987" y="1002.1024000000003" width="40" height="60" as="geometry"/></mxCell><mxCell id="123" value="PorkPriest" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2829.6748799999987" y="992.1024000000003" width="40" height="60" as="geometry"/></mxCell><mxCell id="124" value="Tooltal" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="160.2214399999998" y="1442.5350400000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="125" value="	Demore" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="250.2214399999998" y="1452.5350400000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="126" value="	iTunespra" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="379.2214399999998" y="1503.5350400000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="127" value="Ravydrum" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2602.571519999999" y="1788.5984" width="40" height="60" as="geometry"/></mxCell><mxCell id="128" value="Binarylup" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2692.571519999999" y="1788.5984" width="40" height="60" as="geometry"/></mxCell><mxCell id="129" value="enverruski" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2772.571519999999" y="1788.5984" width="40" height="60" as="geometry"/></mxCell><mxCell id="130" value="dugFluffer" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1135.6774399999995" y="967.4995200000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="131" value="Liveka" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1215.6774399999995" y="977.4995200000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="132" value="nosar" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1392.6774399999995" y="988.4995200000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="133" value="WolfBro" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="985.701759999999" y="1560" width="40" height="60" as="geometry"/></mxCell><mxCell id="134" value="misGuard" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2359.6748799999987" y="1122.1024000000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="135" value="TVize" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2469.6748799999987" y="1132.1024000000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="136" value="gunia" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2559.6748799999987" y="1152.1024000000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="137" value="Lovelyacu" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2741.7193599999987" y="832.4105600000003" width="40" height="60" as="geometry"/></mxCell><mxCell id="138" value="BinaryFool" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2719.6748799999987" y="1162.1024000000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="139" value="biNetworker" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2809.6748799999987" y="1162.1024000000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="140" value="MoodySassy" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="130.2214399999998" y="1622.5350400000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="141" value="StonerTool" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="210.2214399999998" y="1622.5350400000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="142" value="	Turtleprincess" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="290.2214399999998" y="1622.5350400000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="143" value="hoaco" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2107.4303999999993" y="1696.9510400000001" width="40" height="60" as="geometry"/></mxCell><mxCell id="144" value="PartyTwig" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2187.4303999999993" y="1696.9510400000001" width="40" height="60" as="geometry"/></mxCell><mxCell id="145" value="MegaDream" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1433.7964799999995" y="532.5574400000005" width="40" height="60" as="geometry"/></mxCell><mxCell id="146" value="GhoulSoiling" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1533.7964799999995" y="552.5574400000005" width="40" height="60" as="geometry"/></mxCell><mxCell id="147" value="Bloodlorn" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="427.6863999999996" y="935.8054400000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="148" value="studyCow" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1633.7964799999995" y="532.5574400000005" width="40" height="60" as="geometry"/></mxCell><mxCell id="149" value="studyFoo" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2385.3625599999996" y="689.7888000000005" width="40" height="60" as="geometry"/></mxCell><mxCell id="150" value="	Jr.Master" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="547.6863999999996" y="915.8054400000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="151" value="VisualNerd" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="607.6863999999996" y="1035.8054400000005" width="40" height="60" as="geometry"/></mxCell><mxCell id="152" value="GuitarWizard" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2067.4303999999993" y="1796.9510400000001" width="40" height="60" as="geometry"/></mxCell><mxCell id="153" value="Bronzedren" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="658.6863999999996" y="873.8054400000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="154" value="DawgTucker" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1815.6774399999995" y="487.5808000000006" width="40" height="60" as="geometry"/></mxCell><mxCell id="155" value="elPerformance" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="827.6863999999996" y="915.8054400000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="156" value="hoFan" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2215.3625599999996" y="789.7888000000005" width="40" height="60" as="geometry"/></mxCell><mxCell id="157" value="4Dlin" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2177.4303999999993" y="1816.9510400000001" width="40" height="60" as="geometry"/></mxCell><mxCell id="158" value="zalha" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="747.6863999999996" y="935.8054400000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="159" value="GolfBlockhead" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2105.3625599999996" y="809.7888000000005" width="40" height="60" as="geometry"/></mxCell><mxCell id="160" value="gunlup" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2305.3625599999996" y="739.7888000000005" width="40" height="60" as="geometry"/></mxCell><mxCell id="161" value="Scribbledron" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="847.6863999999996" y="1025.8054400000005" width="40" height="60" as="geometry"/></mxCell><mxCell id="162" value="Pinkmill" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2257.4303999999993" y="1836.9510400000001" width="40" height="60" as="geometry"/></mxCell><mxCell id="163" value="zalTrout" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2405.3625599999996" y="789.7888000000005" width="40" height="60" as="geometry"/></mxCell><mxCell id="164" value="TrekHog" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2305.3625599999996" y="859.7888000000005" width="40" height="60" as="geometry"/></mxCell><mxCell id="165" value="Bigkan" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2214.381439999999" y="374.05248000000057" width="40" height="60" as="geometry"/></mxCell><mxCell id="166" value="JunkStar" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="697.6863999999996" y="1085.8054400000005" width="40" height="60" as="geometry"/></mxCell><mxCell id="167" value="vivaDude" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="330.2214399999998" y="1782.5350400000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="168" value="RooPorker" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2579.6748799999987" y="1262.1024000000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="169" value="Oldzom" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="210.2214399999998" y="1752.5350400000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="170" value="FlicTime" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="100.2214399999998" y="1742.5350400000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="171" value="JackNerd" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2729.6748799999987" y="1282.1024000000002" width="40" height="60" as="geometry"/></mxCell><mxCell id="172" value="NightGoddess" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="497.6863999999996" y="1035.8054400000005" width="40" height="60" as="geometry"/></mxCell><mxCell id="173" value="	Heartlac" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2751.624959999999" y="377.8265600000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="174" value="	FlicRacer" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3097.454719999999" y="701.8220800000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="175" value="	PhantomPill" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3097.454719999999" y="811.8220800000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="176" value="	MoneyHog" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3039.454719999999" y="891.8220800000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="177" value="Blazesar" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1365.6774399999995" y="887.4995200000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="178" value="	hilo" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2617.6294399999992" y="238.48064000000045" width="40" height="60" as="geometry"/></mxCell><mxCell id="179" value="	BroadbandGuru" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3187.454719999999" y="711.8220800000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="180" value="	veraGuy" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3187.454719999999" y="841.8220800000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="181" value="	jalReborn" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3203.454719999999" y="1019.8220800000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="182" value="ChocolateFan" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2423.8675199999993" y="235.9923200000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="183" value="	zarRunt" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2954.159999999999" y="54.25152000000047" width="40" height="60" as="geometry"/></mxCell><mxCell id="184" value="	estellaSpent" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2872.159999999999" y="135.25152000000043" width="40" height="60" as="geometry"/></mxCell><mxCell id="185" value="	Newtel" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3297.454719999999" y="861.8220800000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="186" value="Nightdune" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3267.454719999999" y="971.8220800000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="187" value="	enverPopper" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2147.4303999999993" y="1576.9510400000001" width="40" height="60" as="geometry"/></mxCell><mxCell id="188" value="	Twin3602" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3044.159999999999" y="74.25152000000047" width="40" height="60" as="geometry"/></mxCell><mxCell id="189" value="	BloodIce" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3134.159999999999" y="84.25152000000047" width="40" height="60" as="geometry"/></mxCell><mxCell id="190" value="mugo" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3198.949759999999" y="283.7843200000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="191" value="CuteVixen" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3359.454719999999" y="1095.8220800000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="192" value="BinBloom" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2994.159999999999" y="322.2515200000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="193" value="MetaHopper" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3174.253439999999" y="411.57632000000046" width="40" height="60" as="geometry"/></mxCell><mxCell id="194" value="	Luckygo" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3104.159999999999" y="174.25152000000043" width="40" height="60" as="geometry"/></mxCell><mxCell id="195" value="Ironboc" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3214.159999999999" y="164.25152000000043" width="40" height="60" as="geometry"/></mxCell><mxCell id="196" value="foet" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3069.230079999999" y="336.3193600000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="197" value="	Bigdog" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="2994.159999999999" y="154.25152000000043" width="40" height="60" as="geometry"/></mxCell><mxCell id="198" value="crisLove" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1673.7964799999995" y="392.55744000000055" width="40" height="60" as="geometry"/></mxCell><mxCell id="199" value="Phantomtel" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1583.7964799999995" y="262.55744000000055" width="40" height="60" as="geometry"/></mxCell><mxCell id="200" value="	CadTurd" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3204.159999999999" y="64.25152000000047" width="40" height="60" as="geometry"/></mxCell><mxCell id="201" value="MechaRunt" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1423.7964799999995" y="382.55744000000055" width="40" height="60" as="geometry"/></mxCell><mxCell id="202" value="NanoRunt" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1493.7964799999995" y="442.55744000000055" width="40" height="60" as="geometry"/></mxCell><mxCell id="203" value="Seweryo" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1583.7964799999995" y="162.55744000000055" width="40" height="60" as="geometry"/></mxCell><mxCell id="204" value="Tomatobitsu" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1683.7964799999995" y="92.55744000000055" width="40" height="60" as="geometry"/></mxCell><mxCell id="205" value="timAddict" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="3367.454719999999" y="951.8220800000004" width="40" height="60" as="geometry"/></mxCell><mxCell id="206" value="	Jackgress" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1523.7964799999995" y="342.55744000000055" width="40" height="60" as="geometry"/></mxCell><mxCell id="207" value="RunningBall" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1683.7964799999995" y="302.55744000000055" width="40" height="60" as="geometry"/></mxCell><mxCell id="208" value="timAddict" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1573.7964799999995" y="432.55744000000055" width="40" height="60" as="geometry"/></mxCell><mxCell id="209" value="" style="shape=actor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#4D9900;strokeColor=none;fontColor=#99FF99" vertex="1" parent="1"><mxGeometry x="1693.7964799999995" y="202.55744000000055" width="40" height="60" as="geometry"/></mxCell><mxCell id="210" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="66" target="60"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="211" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="67" target="60"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="212" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="65" target="60"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="213" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="68" target="60"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="214" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="78" target="60"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="215" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="60" target="74"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="216" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="74" target="76"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="217" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="74" target="84"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="218" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="74" target="85"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="219" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="74" target="86"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="220" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="85" target="96"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="221" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="84" target="96"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="222" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="97" target="85"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="223" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="97" target="96"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="224" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="98" target="86"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="225" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="76" target="60"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="226" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="76" target="86"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="227" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="76" target="87"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="228" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="76" target="98"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="229" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="99" target="98"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="230" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="99" target="97"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="231" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="61" target="76"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="232" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="61" target="60"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="233" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="204" target="209"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="234" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="204" target="203"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="235" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="204" target="199"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="236" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="203" target="201"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="237" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="206" target="199"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="238" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="206" target="203"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="239" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="206" target="202"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="240" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="206" target="208"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="241" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="206" target="198"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="242" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="206" target="207"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="243" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="80" target="204"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="244" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="80" target="207"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="245" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="154" target="207"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="246" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="198" target="207"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="247" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="148" target="208"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="248" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="146" target="148"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="249" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="145" target="202"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="250" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="62" target="201"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="251" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="145" target="201"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="252" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="145" target="146"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="253" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="177" target="145"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="254" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="177" target="115"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="255" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="132" target="177"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="256" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="131" target="177"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="257" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="130" target="177"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="260" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="103" target="106"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="261" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="107" target="104"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="262" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="104" target="103"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="263" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="104" target="109"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="264" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="104" target="110"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="265" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="107" target="110"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="266" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="107" target="177"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="267" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="159" target="156"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="268" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="156" target="160"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="269" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="149" target="160"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="270" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="163" target="160"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="271" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="164" target="160"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="272" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="160" target="137"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="273" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="165" target="73"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="274" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="182" target="73"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="275" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="63" target="73"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="276" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="178" target="73"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="277" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="73" target="104"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="278" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="73" target="207"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="279" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="73" target="108"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="280" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="75" target="73"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="281" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="173" target="73"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="282" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="194" target="188"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="283" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="194" target="189"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="284" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="194" target="195"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="285" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="200" target="195"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="286" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="194" target="197"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="287" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="188" target="183"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="288" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="184" target="197"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="289" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="192" target="197"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="290" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="194" target="192"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="291" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="194" target="196"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="292" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="194" target="193"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="293" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="194" target="190"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="294" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="194" target="73"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="295" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="191" target="205"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="296" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="205" target="185"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="297" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="185" target="179"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="298" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="185" target="180"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="299" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="185" target="186"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="300" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="185" target="181"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="301" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="185" target="176"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="302" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="185" target="175"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="303" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="179" target="174"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="304" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="116" target="185"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="305" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="116" target="160"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="306" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="116" target="73"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="307" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="113" target="114"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="308" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="113" target="129"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="309" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="113" target="128"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="310" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="113" target="127"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="311" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="113" target="112"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="312" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="113" target="111"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="313" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="113" target="100"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="314" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="113" target="83"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="315" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="117" target="168"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="316" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="144" target="162"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="317" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="144" target="157"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="318" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="144" target="187"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="319" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="144" target="143"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="320" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="144" target="152"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="321" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="143" target="152"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="322" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="82" target="83"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="323" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="82" target="71"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="324" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="82" target="70"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="325" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="82" target="81"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="326" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="82" target="92"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="327" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="83" target="93"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="328" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="83" target="94"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="329" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="83" target="95"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="330" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="83" target="72"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="331" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="83" target="71"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="332" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="83" target="70"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="333" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="82" target="95"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="334" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="82" target="94"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="335" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="105" target="79"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="336" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="90" target="79"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="337" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="91" target="79"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="338" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="88" target="79"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="339" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="77" target="101"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="340" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="133" target="101"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="341" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="69" target="101"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="344" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="102" target="101"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="345" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="101" target="89"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="346" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="79" target="89"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="347" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="89" target="177"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="348" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="126" target="125"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="349" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="124" target="125"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="350" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="141" target="125"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="351" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="142" target="125"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="352" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="140" target="125"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="353" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="170" target="140"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="354" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="169" target="141"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="355" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="167" target="142"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="356" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="125" target="89"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="357" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="155" target="166"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="358" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="158" target="166"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="359" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="161" target="166"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="360" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="166" target="153"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="361" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="172" target="151"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="362" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="64" target="151"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="363" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="150" target="151"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="364" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="147" target="151"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="365" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="151" target="153"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="366" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="151" target="166"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="367" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="153" target="177"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="368" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="153" target="60"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="369" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="61" target="207"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="370" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="61" target="160"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="371" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="177" target="83"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="372" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="118" target="83"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="373" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="119" target="118"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="374" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="135" target="118"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="375" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="134" target="118"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="376" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="120" target="138"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="377" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="136" target="138"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="378" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="135" target="138"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="379" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="168" target="138"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="380" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="171" target="138"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="381" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="139" target="138"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="382" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="123" target="138"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="383" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="122" target="138"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="384" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="121" target="138"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="385" style="endArrow=none;strokeWidth=2;strokeColor=#CCCC00" edge="1" parent="1" source="138" target="185"><mxGeometry relative="1" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/stardelta.xml b/public/assets/plugins/mxgraph/templates/xml/stardelta.xml
new file mode 100644
index 0000000..4dba8e2
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/stardelta.xml
@@ -0,0 +1 @@
+<mxGraphModel style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="2" value="L1" style="text;align=center;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="80" y="30" width="40" height="26" as="geometry"/></mxCell><mxCell id="3" value="F3" style="shape=mxgraph.electrical.miscellaneous.fuse_2;fillColor=white;strokeColor=black;direction=south;labelPosition=left;align=right;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="90" y="90" width="20" height="100" as="geometry"/></mxCell><mxCell id="6" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal;endArrow=none;rounded=0;fontStyle=1;strokeWidth=2" edge="1" parent="1" source="3" target="2"><mxGeometry x="420" y="60" width="100" height="100" as="geometry"><mxPoint x="420" y="160" as="sourcePoint"/><mxPoint x="520" y="60" as="targetPoint"/></mxGeometry></mxCell><mxCell id="7" value="F2" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_nc;fillColor=white;strokeColor=black;labelPosition=left;align=right;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="95" y="210" width="10" height="100" as="geometry"/></mxCell><mxCell id="9" style="startArrow=none;endArrow=none;rounded=0;fontStyle=1;strokeWidth=2" edge="1" parent="1" source="3" target="7"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="10" value="S1" style="shape=mxgraph.electrical.electro-mechanical.push_switch_nc;fillColor=white;strokeColor=black;direction=north;labelPosition=left;align=right;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="75" y="320" width="30" height="100" as="geometry"/></mxCell><mxCell id="11" style="entryX=1;entryY=0.835;entryPerimeter=0;exitX=0.5;exitY=1;exitPerimeter=0;endArrow=none;rounded=0;fontStyle=1;strokeWidth=2" edge="1" parent="1" source="7" target="10"><mxGeometry relative="1" as="geometry"><mxPoint x="290" y="360" as="sourcePoint"/></mxGeometry></mxCell><mxCell id="12" value="S2" style="shape=mxgraph.electrical.electro-mechanical.push_switch_no;fillColor=white;strokeColor=black;direction=north;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="75" y="470" width="30" height="100" as="geometry"/></mxCell><mxCell id="13" style="exitX=0;exitY=0.835;exitPerimeter=0;entryX=1;entryY=0.835;entryPerimeter=0;endArrow=none;rounded=0;fontStyle=1;strokeWidth=2" edge="1" parent="1" source="10" target="12"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="15" value="K2" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_nc;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="95" y="600" width="10" height="100" as="geometry"/></mxCell><mxCell id="16" style="exitX=0;exitY=0.835;exitPerimeter=0;entryX=0.5;entryY=0;entryPerimeter=0;endArrow=none;rounded=0;fontStyle=1;strokeWidth=2" edge="1" parent="1" source="12" target="15"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="17" value="K3" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_nc;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="95" y="900" width="10" height="100" as="geometry"/></mxCell><mxCell id="18" value="K1" style="shape=mxgraph.electrical.electro-mechanical.relay_coil;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="50.5" y="1100" width="99" height="100" as="geometry"/></mxCell><mxCell id="19" style="exitX=0.5;exitY=0;exitPerimeter=0;entryX=0.5;entryY=1;entryPerimeter=0;rounded=0;endArrow=none;fontStyle=1;strokeWidth=2" edge="1" parent="1" source="17" target="15"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="20" style="exitX=0.5;exitY=1;exitPerimeter=0;entryX=0.5;entryY=0;entryPerimeter=0;rounded=0;endArrow=none;fontStyle=1;strokeWidth=2" edge="1" parent="1" source="17" target="18"><mxGeometry relative="1" as="geometry"/></mxCell><mxCell id="21" value="K1T" style="shape=mxgraph.electrical.electro-mechanical.relay_coil;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="200" y="1100" width="99" height="100" as="geometry"/></mxCell><mxCell id="22" value="K3" style="shape=mxgraph.electrical.electro-mechanical.relay_coil;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="360" y="1100" width="99" height="100" as="geometry"/></mxCell><mxCell id="23" value="K2" style="shape=mxgraph.electrical.electro-mechanical.relay_coil;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="640" y="1100" width="99" height="100" as="geometry"/></mxCell><mxCell id="27" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=0;exitPerimeter=0;rounded=0;endArrow=none;fontStyle=1;strokeWidth=2" edge="1" parent="1" source="21"><mxGeometry x="280" y="900" width="100" height="100" as="geometry"><mxPoint x="280" y="1000" as="sourcePoint"/><mxPoint x="100" y="1050" as="targetPoint"/><Array as="points"><mxPoint x="190" y="1050"/></Array></mxGeometry></mxCell><mxCell id="28" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;rounded=0;endArrow=none;fontStyle=1;strokeWidth=2" edge="1" parent="1"><mxGeometry x="454.5" y="899.5" width="100" height="100" as="geometry"><mxPoint x="24.5" y="1199.5" as="sourcePoint"/><mxPoint x="794.5" y="1199.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="29" value="K1" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_nc;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="404.5" y="910" width="10" height="100" as="geometry"/></mxCell><mxCell id="30" value="K1T" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_nc;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="540" y="910" width="10" height="100" as="geometry"/></mxCell><mxCell id="31" value="K1" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_no;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="404.5" y="780" width="20" height="100" as="geometry"/></mxCell><mxCell id="32" value="K2" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_no;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="684.5" y="780" width="20" height="100" as="geometry"/></mxCell><mxCell id="34" value="K1" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_no;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="800" y="780" width="20" height="100" as="geometry"/></mxCell><mxCell id="35" value="" style="edgeStyle=none;exitX=0.5;exitY=1;exitPerimeter=0;entryX=0.5;entryY=0;entryPerimeter=0;rounded=0;endArrow=none;fontStyle=1;strokeWidth=2" edge="1" parent="1" source="29" target="22"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="36" value="" style="edgeStyle=none;exitX=0.5;exitY=0;exitPerimeter=0;entryX=0.25;entryY=1;entryPerimeter=0;rounded=0;endArrow=none;fontStyle=1;strokeWidth=2" edge="1" parent="1" source="29" target="31"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="39" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.25;exitY=0;exitPerimeter=0;rounded=0;endArrow=none;fontStyle=1;strokeWidth=2" edge="1" parent="1" source="31"><mxGeometry x="300" y="570" width="100" height="100" as="geometry"><mxPoint x="300" y="670" as="sourcePoint"/><mxPoint x="100" y="740" as="targetPoint"/><Array as="points"><mxPoint x="260" y="740"/></Array></mxGeometry></mxCell><mxCell id="40" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=0;exitPerimeter=0;rounded=0;endArrow=none;fontStyle=1;strokeWidth=2" edge="1" parent="1" source="30"><mxGeometry x="500" y="690" width="100" height="100" as="geometry"><mxPoint x="500" y="790" as="sourcePoint"/><mxPoint x="410" y="900" as="targetPoint"/><Array as="points"><mxPoint x="480" y="900"/></Array></mxGeometry></mxCell><mxCell id="41" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=0;exitPerimeter=0;entryX=0.25;entryY=1;entryPerimeter=0;rounded=0;endArrow=none;fontStyle=1;strokeWidth=2" edge="1" parent="1" source="23" target="32"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="42" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.25;exitY=1;exitPerimeter=0;entryX=0.5;entryY=0;entryPerimeter=0;rounded=0;endArrow=none;fontStyle=1;strokeWidth=2" edge="1" parent="1" source="34" target="23"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="750" y="1060"/></Array></mxGeometry></mxCell><mxCell id="45" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.5;exitY=1;exitPerimeter=0;entryX=0.5;entryY=0;entryPerimeter=0;rounded=0;endArrow=none;fontStyle=1;strokeWidth=2" edge="1" parent="1" source="30" target="23"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="630" y="1060"/></Array></mxGeometry></mxCell><mxCell id="48" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.25;exitY=0;exitPerimeter=0;rounded=0;endArrow=none;fontStyle=1;strokeWidth=2" edge="1" parent="1" source="32"><mxGeometry x="490" y="460" width="100" height="100" as="geometry"><mxPoint x="490" y="560" as="sourcePoint"/><mxPoint x="100" y="440" as="targetPoint"/><Array as="points"><mxPoint x="390" y="440"/></Array></mxGeometry></mxCell><mxCell id="50" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.25;exitY=0;exitPerimeter=0;rounded=0;endArrow=none;fontStyle=1;strokeWidth=2" edge="1" parent="1" source="34"><mxGeometry x="840" y="500" width="100" height="100" as="geometry"><mxPoint x="840" y="600" as="sourcePoint"/><mxPoint x="690" y="440" as="targetPoint"/><Array as="points"><mxPoint x="760" y="440"/></Array></mxGeometry></mxCell><mxCell id="51" value="1" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="100" y="80" width="60" height="26" as="geometry"/></mxCell><mxCell id="52" value="2" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="100" y="170" width="60" height="26" as="geometry"/></mxCell><mxCell id="53" value="55" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="100" y="200" width="60" height="26" as="geometry"/></mxCell><mxCell id="54" value="56" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="100" y="290" width="60" height="26" as="geometry"/></mxCell><mxCell id="55" value="21" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="100" y="310" width="60" height="26" as="geometry"/></mxCell><mxCell id="56" value="22" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="100" y="400" width="60" height="26" as="geometry"/></mxCell><mxCell id="57" value="13" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="100" y="460" width="60" height="26" as="geometry"/></mxCell><mxCell id="58" value="14" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="100" y="550" width="60" height="26" as="geometry"/></mxCell><mxCell id="59" value="22" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="100" y="680" width="60" height="26" as="geometry"/></mxCell><mxCell id="60" value="21" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="100" y="590" width="60" height="26" as="geometry"/></mxCell><mxCell id="61" value="21" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="100" y="890" width="60" height="26" as="geometry"/></mxCell><mxCell id="62" value="22" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="100" y="984" width="60" height="26" as="geometry"/></mxCell><mxCell id="63" value="43" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="409.5" y="770" width="60" height="26" as="geometry"/></mxCell><mxCell id="64" value="44" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="409.5" y="864" width="60" height="26" as="geometry"/></mxCell><mxCell id="65" value="21" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="409.5" y="900" width="60" height="26" as="geometry"/></mxCell><mxCell id="66" value="22" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="409.5" y="994" width="60" height="26" as="geometry"/></mxCell><mxCell id="67" value="15" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="545" y="903" width="60" height="26" as="geometry"/></mxCell><mxCell id="68" value="16" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="545" y="994" width="60" height="26" as="geometry"/></mxCell><mxCell id="69" value="13" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="689.5" y="770" width="60" height="26" as="geometry"/></mxCell><mxCell id="70" value="14" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="689.5" y="864" width="60" height="26" as="geometry"/></mxCell><mxCell id="71" value="13" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="810" y="770" width="60" height="26" as="geometry"/></mxCell><mxCell id="72" value="14" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="810" y="864" width="60" height="26" as="geometry"/></mxCell><mxCell id="73" value="A1" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="100" y="1110" width="60" height="26" as="geometry"/></mxCell><mxCell id="74" value="A1" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="249.5" y="1110" width="60" height="26" as="geometry"/></mxCell><mxCell id="75" value="A1" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="409.5" y="1110" width="60" height="26" as="geometry"/></mxCell><mxCell id="76" value="A1" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="689.5" y="1110" width="60" height="26" as="geometry"/></mxCell><mxCell id="77" value="A2" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="100" y="1163" width="60" height="26" as="geometry"/></mxCell><mxCell id="78" value="A2" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="249.5" y="1163" width="60" height="26" as="geometry"/></mxCell><mxCell id="79" value="A2" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="409.5" y="1163" width="60" height="26" as="geometry"/></mxCell><mxCell id="80" value="A2" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="689.5" y="1163" width="60" height="26" as="geometry"/></mxCell><mxCell id="81" value="N" style="text;align=left;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="20.5" y="1176" width="60" height="26" as="geometry"/></mxCell><mxCell id="82" value="N" style="text;align=left;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="760" y="1174" width="60" height="26" as="geometry"/></mxCell><mxCell id="83" value="star" style="text;align=center;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="70" y="1217" width="60" height="26" as="geometry"/></mxCell><mxCell id="84" value="delta" style="text;align=center;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="379.5" y="1217" width="60" height="26" as="geometry"/></mxCell><mxCell id="85" value="motor" style="text;align=center;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="659.5" y="1217" width="60" height="26" as="geometry"/></mxCell><mxCell id="86" value="Control circuit diagram" style="text;align=center;fontSize=24;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="105" y="1310" width="625" height="36" as="geometry"/></mxCell><mxCell id="88" value="M&#xa;3~" style="shape=mxgraph.bpmn.general_start;fillColor=white;strokeColor=black;strokeWidth=2;perimeter=ellipsePerimeter;fontSize=24;fontStyle=1" vertex="1" parent="1"><mxGeometry x="1540" y="1086.5" width="99" height="99" as="geometry"/></mxCell><mxCell id="89" value="F1" style="shape=mxgraph.electrical.miscellaneous.fuse_2;fillColor=white;strokeColor=black;direction=south;labelPosition=left;align=right;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1250" y="376" width="20" height="100" as="geometry"/></mxCell><mxCell id="90" value="" style="shape=mxgraph.electrical.miscellaneous.fuse_2;fillColor=white;strokeColor=black;direction=south;labelPosition=left;align=right;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1310" y="376" width="20" height="100" as="geometry"/></mxCell><mxCell id="91" value="" style="shape=mxgraph.electrical.miscellaneous.fuse_2;fillColor=white;strokeColor=black;direction=south;labelPosition=left;align=right;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1370" y="376" width="20" height="100" as="geometry"/></mxCell><mxCell id="92" value="K2" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_no;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1255" y="603" width="20" height="100" as="geometry"/></mxCell><mxCell id="93" value="" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_no;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1315" y="600" width="20" height="100" as="geometry"/></mxCell><mxCell id="94" value="" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_no;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1375" y="600" width="20" height="100" as="geometry"/></mxCell><mxCell id="97" value="F2" style="shape=mxgraph.electrical.electro-mechanical.relay_coil;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1230.5" y="760" width="59" height="100" as="geometry"/></mxCell><mxCell id="98" value="" style="shape=mxgraph.electrical.electro-mechanical.relay_coil;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1290.5" y="760" width="59" height="100" as="geometry"/></mxCell><mxCell id="99" value="" style="shape=mxgraph.electrical.electro-mechanical.relay_coil;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1350.5" y="760" width="59" height="100" as="geometry"/></mxCell><mxCell id="101" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.25;exitY=0;exitPerimeter=0;entryX=1;entryY=0.5;entryPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="92" target="89"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="102" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;entryX=0.25;entryY=0;entryPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="90" target="93"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="103" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=1;exitY=0.5;exitPerimeter=0;entryX=0.25;entryY=0;entryPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="91" target="94"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="104" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.25;exitY=1;exitPerimeter=0;entryX=0.5;entryY=0;entryPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="94" target="99"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="105" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.25;exitY=1;exitPerimeter=0;entryX=0.5;entryY=0;entryPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="93" target="98"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="106" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.25;exitY=1;exitPerimeter=0;entryX=0.5;entryY=0;entryPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="92" target="97"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="107" value="" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_no;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1490" y="760" width="20" height="100" as="geometry"/></mxCell><mxCell id="108" value="" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_nc;fillColor=white;strokeColor=black;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1560" y="760" width="10" height="100" as="geometry"/></mxCell><mxCell id="109" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;rounded=0;endArrow=none;dashed=1;strokeWidth=2" edge="1" parent="1" source="99"><mxGeometry x="299.5" y="47" width="100" height="100" as="geometry"><mxPoint x="1559.5" y="650" as="sourcePoint"/><mxPoint x="1570" y="810" as="targetPoint"/></mxGeometry></mxCell><mxCell id="110" value="" style="edgeStyle=segmentEdgeStyle;exitX=0.145;exitY=0.145;exitPerimeter=0;entryX=0.5;entryY=1;entryPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="88" target="99"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="111" value="" style="edgeStyle=segmentEdgeStyle;exitX=0;exitY=0.5;exitPerimeter=0;entryX=0.5;entryY=1;entryPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="88" target="98"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="112" value="" style="edgeStyle=segmentEdgeStyle;exitX=0.145;exitY=0.855;exitPerimeter=0;entryX=0.5;entryY=1;entryPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="88" target="97"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="113" value="K3" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_no;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1720" y="611.5" width="20" height="100" as="geometry"/></mxCell><mxCell id="114" value="" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_no;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1780" y="608.5" width="20" height="100" as="geometry"/></mxCell><mxCell id="115" value="" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_no;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1840" y="608.5" width="20" height="100" as="geometry"/></mxCell><mxCell id="118" value="" style="edgeStyle=segmentEdgeStyle;exitX=0.25;exitY=0;exitPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="113"><mxGeometry x="1640" y="320" width="100" height="100" as="geometry"><mxPoint x="1640" y="420" as="sourcePoint"/><mxPoint x="1260" y="570" as="targetPoint"/><Array as="points"><mxPoint x="1725" y="570"/></Array></mxGeometry></mxCell><mxCell id="119" value="" style="edgeStyle=segmentEdgeStyle;exitX=0.25;exitY=0;exitPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="114"><mxGeometry x="1840" y="320" width="100" height="100" as="geometry"><mxPoint x="1840" y="420" as="sourcePoint"/><mxPoint x="1320" y="530" as="targetPoint"/><Array as="points"><mxPoint x="1785" y="530"/></Array></mxGeometry></mxCell><mxCell id="120" value="" style="edgeStyle=segmentEdgeStyle;exitX=0.25;exitY=0;exitPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="115"><mxGeometry x="2030" y="330" width="100" height="100" as="geometry"><mxPoint x="2030" y="430" as="sourcePoint"/><mxPoint x="1380" y="480" as="targetPoint"/><Array as="points"><mxPoint x="1845" y="480"/></Array></mxGeometry></mxCell><mxCell id="121" value="K1" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_no;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="2010" y="609.9999999999998" width="20" height="100" as="geometry"/></mxCell><mxCell id="122" value="" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_no;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="2070" y="606.9999999999998" width="20" height="100" as="geometry"/></mxCell><mxCell id="123" value="" style="shape=mxgraph.electrical.electro-mechanical.relay_contact_no;fillColor=white;strokeColor=black;fontStyle=1;labelPosition=left;align=right;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="2130" y="606.9999999999998" width="20" height="100" as="geometry"/></mxCell><mxCell id="124" value="" style="edgeStyle=segmentEdgeStyle;exitX=0.25;exitY=1;exitPerimeter=0;entryX=0.855;entryY=0.145;entryPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="113" target="88"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1724" y="712"/><mxPoint x="1724" y="1101"/></Array></mxGeometry></mxCell><mxCell id="125" value="" style="edgeStyle=segmentEdgeStyle;exitX=0.25;exitY=1;exitPerimeter=0;entryX=0.855;entryY=0.855;entryPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="114" target="88"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1785" y="1171"/><mxPoint x="1625" y="1171"/><mxPoint x="1625" y="1171"/></Array></mxGeometry></mxCell><mxCell id="126" value="" style="edgeStyle=segmentEdgeStyle;exitX=0.25;exitY=1;exitPerimeter=0;entryX=1;entryY=0.5;entryPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="115" target="88"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1845" y="1136"/></Array></mxGeometry></mxCell><mxCell id="127" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.25;exitY=1;exitPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="121"><mxGeometry x="2011" y="855" width="100" height="100" as="geometry"><mxPoint x="2011" y="955" as="sourcePoint"/><mxPoint x="1724.3595679012346" y="789.2708333333334" as="targetPoint"/><Array as="points"><mxPoint x="1870" y="789"/></Array></mxGeometry></mxCell><mxCell id="128" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.25;exitY=1;exitPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="122"><mxGeometry x="2223" y="851" width="100" height="100" as="geometry"><mxPoint x="2223" y="951" as="sourcePoint"/><mxPoint x="1784.6412037037037" y="841.8364197530865" as="targetPoint"/><Array as="points"><mxPoint x="1937" y="842"/></Array></mxGeometry></mxCell><mxCell id="129" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.25;exitY=1;exitPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="123"><mxGeometry x="2209" y="555" width="100" height="100" as="geometry"><mxPoint x="2209" y="655" as="sourcePoint"/><mxPoint x="1844.4405864197531" y="884.7569444444445" as="targetPoint"/><Array as="points"><mxPoint x="2001" y="885"/></Array></mxGeometry></mxCell><mxCell id="130" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;exitX=0.25;exitY=0;exitPerimeter=0;entryX=0.25;entryY=0;entryPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="123" target="121"><mxGeometry x="2180" y="508.5" width="100" height="100" as="geometry"><mxPoint x="2180" y="608.5" as="sourcePoint"/><mxPoint x="2242" y="942" as="targetPoint"/><Array as="points"><mxPoint x="2070" y="557"/></Array></mxGeometry></mxCell><mxCell id="133" value="" style="edgeStyle=none;exitX=0.25;exitY=0;exitPerimeter=0;rounded=0;endArrow=none;strokeWidth=2" edge="1" parent="1" source="122"><mxGeometry x="2010.335648148148" y="408.2908950617284" width="100" height="100" as="geometry"><mxPoint x="2010.335648148148" y="508.2908950617284" as="sourcePoint"/><mxPoint x="2074.4753086419755" y="559.2361111111111" as="targetPoint"/></mxGeometry></mxCell><mxCell id="134" value="L1" style="text;align=center;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1240" y="350" width="40" height="26" as="geometry"/></mxCell><mxCell id="135" value="L2" style="text;align=center;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1300" y="350" width="40" height="26" as="geometry"/></mxCell><mxCell id="136" value="L3" style="text;align=center;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1360" y="350" width="40" height="26" as="geometry"/></mxCell><mxCell id="137" value="W1" style="text;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1510" y="1073.5" width="40" height="26" as="geometry"/></mxCell><mxCell id="138" value="V1" style="text;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1500" y="1109.5" width="40" height="26" as="geometry"/></mxCell><mxCell id="139" value="U1" style="text;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1510" y="1142.5" width="40" height="26" as="geometry"/></mxCell><mxCell id="140" value="W2" style="text;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1626" y="1073.5" width="40" height="26" as="geometry"/></mxCell><mxCell id="141" value="V2" style="text;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1646.0000000000005" y="1109.4999999999998" width="40" height="26" as="geometry"/></mxCell><mxCell id="142" value="U2" style="text;fontStyle=1;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1639" y="1142.5" width="40" height="26" as="geometry"/></mxCell><mxCell id="143" value="M1" style="text;fontStyle=1;fontSize=14;align=center;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1569.5" y="1200" width="40" height="26" as="geometry"/></mxCell><mxCell id="144" value="1" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1260.5" y="370" width="60" height="26" as="geometry"/></mxCell><mxCell id="145" value="2" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1259.5" y="457" width="60" height="26" as="geometry"/></mxCell><mxCell id="146" value="3" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1319.5" y="370" width="60" height="26" as="geometry"/></mxCell><mxCell id="147" value="4" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1319.5" y="457" width="60" height="26" as="geometry"/></mxCell><mxCell id="148" value="5" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1379.5" y="370" width="60" height="26" as="geometry"/></mxCell><mxCell id="149" value="6" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1379.5" y="457" width="60" height="26" as="geometry"/></mxCell><mxCell id="150" value="1" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1260.5" y="593" width="60" height="26" as="geometry"/></mxCell><mxCell id="151" value="3" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1319.5" y="593" width="60" height="26" as="geometry"/></mxCell><mxCell id="152" value="5" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1379.5" y="593" width="60" height="26" as="geometry"/></mxCell><mxCell id="153" value="2" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1259.5" y="680" width="60" height="26" as="geometry"/></mxCell><mxCell id="154" value="4" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1319.5" y="680" width="60" height="26" as="geometry"/></mxCell><mxCell id="155" value="6" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1379.5" y="680" width="60" height="26" as="geometry"/></mxCell><mxCell id="156" value="1" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1261.5" y="753.5" width="60" height="26" as="geometry"/></mxCell><mxCell id="157" value="3" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1320.5" y="753.5" width="60" height="26" as="geometry"/></mxCell><mxCell id="158" value="5" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1380.5" y="753.5" width="60" height="26" as="geometry"/></mxCell><mxCell id="159" value="2" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1260.5" y="840.5" width="60" height="26" as="geometry"/></mxCell><mxCell id="160" value="4" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1320.5" y="840.5" width="60" height="26" as="geometry"/></mxCell><mxCell id="161" value="6" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1380.5" y="840.5" width="60" height="26" as="geometry"/></mxCell><mxCell id="162" value="1" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1731" y="602" width="60" height="26" as="geometry"/></mxCell><mxCell id="163" value="3" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1790" y="602" width="60" height="26" as="geometry"/></mxCell><mxCell id="164" value="5" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1850" y="602" width="60" height="26" as="geometry"/></mxCell><mxCell id="165" value="2" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1730" y="689" width="60" height="26" as="geometry"/></mxCell><mxCell id="166" value="4" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1790" y="689" width="60" height="26" as="geometry"/></mxCell><mxCell id="167" value="6" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1850" y="689" width="60" height="26" as="geometry"/></mxCell><mxCell id="168" value="1" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="2021" y="602" width="60" height="26" as="geometry"/></mxCell><mxCell id="169" value="3" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="2080" y="602" width="60" height="26" as="geometry"/></mxCell><mxCell id="170" value="5" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="2140" y="602" width="60" height="26" as="geometry"/></mxCell><mxCell id="171" value="2" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="2020" y="689" width="60" height="26" as="geometry"/></mxCell><mxCell id="172" value="4" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="2080" y="689" width="60" height="26" as="geometry"/></mxCell><mxCell id="173" value="6" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="2140" y="689" width="60" height="26" as="geometry"/></mxCell><mxCell id="174" value="97" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1500" y="753.5" width="60" height="26" as="geometry"/></mxCell><mxCell id="175" value="95" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1569.5" y="753.5" width="60" height="26" as="geometry"/></mxCell><mxCell id="177" value="98" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1499" y="840.5" width="60" height="26" as="geometry"/></mxCell><mxCell id="178" value="96" style="text;align=left;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1570" y="840.5" width="60" height="26" as="geometry"/></mxCell><mxCell id="181" value="" style="edgeStyle=none;endArrow=none;dashed=1;strokeWidth=2" edge="1" parent="1"><mxGeometry x="1285.0000000000002" y="652.6527777777777" width="100" height="100" as="geometry"><mxPoint x="1265" y="652.6527777777777" as="sourcePoint"/><mxPoint x="1385.0000000000002" y="652.6527777777777" as="targetPoint"/></mxGeometry></mxCell><mxCell id="182" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;rounded=0;endArrow=none;dashed=1;strokeWidth=2" edge="1" parent="1"><mxGeometry x="650.9999999999998" y="-93.52777777777831" width="100" height="100" as="geometry"><mxPoint x="1731" y="661.7361111111109" as="sourcePoint"/><mxPoint x="1851" y="661.7361111111109" as="targetPoint"/></mxGeometry></mxCell><mxCell id="183" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;rounded=0;endArrow=none;dashed=1;strokeWidth=2" edge="1" parent="1"><mxGeometry x="941" y="-94.11111111111141" width="100" height="100" as="geometry"><mxPoint x="2021.0000000000002" y="661.1527777777777" as="sourcePoint"/><mxPoint x="2141" y="661.1527777777777" as="targetPoint"/></mxGeometry></mxCell><mxCell id="184" value="Power circuit diagram" style="text;align=center;fontSize=24;strokeWidth=2" vertex="1" parent="1"><mxGeometry x="1277" y="1310" width="625" height="36" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/statemachine1.xml b/public/assets/plugins/mxgraph/templates/xml/statemachine1.xml
new file mode 100644
index 0000000..1804865
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/statemachine1.xml
@@ -0,0 +1 @@
+<mxGraphModel grid="1" guides="1" tooltips="1" connect="1" fold="1" page="0" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="193" value="" style="fillColor=#FFF2CC" vertex="1" parent="1"><mxGeometry x="10" y="200" width="1550" height="510" as="geometry"/></mxCell><mxCell id="124" value="waiting for &#xa;hotel response" style="rounded=1;fillColor=#A2C4C9" vertex="1" parent="1"><mxGeometry x="710" y="440" width="140" height="70" as="geometry"/></mxCell><mxCell id="126" value="Created" style="rounded=1;fillColor=#A2C4C9" vertex="1" parent="1"><mxGeometry x="715.0000000000001" y="40.000000000000014" width="140" height="70" as="geometry"/></mxCell><mxCell id="127" value="hotel room &#xa;confirmed" style="rounded=1;fillColor=#A2C4C9" vertex="1" parent="1"><mxGeometry x="710.0000000000001" y="610" width="140" height="70" as="geometry"/></mxCell><mxCell id="128" value="no answer&#xa;to hotel request" style="rounded=1;fillColor=#A2C4C9" vertex="1" parent="1"><mxGeometry x="540" y="610" width="140" height="70" as="geometry"/></mxCell><mxCell id="129" value="lodging not&#xa;available" style="rounded=1;fillColor=#A2C4C9" vertex="1" parent="1"><mxGeometry x="880" y="609.9999999999999" width="140" height="70" as="geometry"/></mxCell><mxCell id="132" value="flights not&#xa;available" style="rounded=1;fillColor=#A2C4C9" vertex="1" parent="1"><mxGeometry x="360" y="610" width="140" height="70" as="geometry"/></mxCell><mxCell id="133" value="flights &#xa;confirmed" style="rounded=1;fillColor=#A2C4C9" vertex="1" parent="1"><mxGeometry x="200" y="610" width="140" height="70" as="geometry"/></mxCell><mxCell id="134" value="no answer&#xa;to flight&#xa;request" style="rounded=1;fillColor=#A2C4C9" vertex="1" parent="1"><mxGeometry x="40" y="610" width="140" height="70" as="geometry"/></mxCell><mxCell id="135" value="waiting for &#xa;airline response" style="rounded=1;fillColor=#A2C4C9" vertex="1" parent="1"><mxGeometry x="200" y="440" width="140" height="70" as="geometry"/></mxCell><mxCell id="136" value="no answer&#xa;to activity&#xa;request" style="rounded=1;fillColor=#A2C4C9" vertex="1" parent="1"><mxGeometry x="1060" y="610" width="140" height="70" as="geometry"/></mxCell><mxCell id="137" value="activities&#xa;booking&#xa;confirmed" style="rounded=1;fillColor=#A2C4C9" vertex="1" parent="1"><mxGeometry x="1220" y="610" width="140" height="70" as="geometry"/></mxCell><mxCell id="138" value="activity not&#xa;available" style="rounded=1;fillColor=#A2C4C9" vertex="1" parent="1"><mxGeometry x="1380" y="609.9999999999999" width="140" height="70" as="geometry"/></mxCell><mxCell id="139" value="waiting for &#xa;activity sup.&#xa;response" style="rounded=1;fillColor=#A2C4C9" vertex="1" parent="1"><mxGeometry x="1220" y="440" width="140" height="70" as="geometry"/></mxCell><mxCell id="140" value="" style="shape=mxgraph.bpmn.terminate;fillColor=white;strokeColor=black;strokeWidth=2;perimeter=ellipsePerimeter;" vertex="1" parent="1"><mxGeometry x="1115.0000000000002" y="60.000000000000014" width="30" height="30" as="geometry"/></mxCell><mxCell id="141" value="" style="ellipse;fillColor=#000000;strokeColor=none" vertex="1" parent="1"><mxGeometry x="415.0000000000002" y="60.000000000000014" width="30" height="30" as="geometry"/></mxCell><mxCell id="142" value="" style="ellipse;fillColor=#000000;strokeColor=none" vertex="1" parent="1"><mxGeometry x="300" y="290" width="30" height="30" as="geometry"/></mxCell><mxCell id="143" value="" style="ellipse;fillColor=#000000;strokeColor=none" vertex="1" parent="1"><mxGeometry x="810" y="290" width="30" height="30" as="geometry"/></mxCell><mxCell id="146" value="" style="ellipse;fillColor=#000000;strokeColor=none" vertex="1" parent="1"><mxGeometry x="1310" y="290" width="30" height="30" as="geometry"/></mxCell><mxCell id="147" value="user places order" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="141" target="126"><mxGeometry x="2.2737367544323206e-13" y="-60" width="100" height="100" as="geometry"><mxPoint x="2.2737367544323206e-13" y="40" as="sourcePoint"/><mxPoint x="100.00000000000023" y="-60" as="targetPoint"/></mxGeometry></mxCell><mxCell id="148" value="credit card charge not &#xa;authorized / email customer" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="126" target="140"><mxGeometry x="2.2737367544323206e-13" y="-60" width="100" height="100" as="geometry"><mxPoint x="2.2737367544323206e-13" y="40" as="sourcePoint"/><mxPoint x="100.00000000000023" y="-60" as="targetPoint"/></mxGeometry></mxCell><mxCell id="151" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal" edge="1" parent="1" source="142" target="135"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="152" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal" edge="1" parent="1" source="143" target="124"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="153" value="" style="edgeStyle=elbowEdgeStyle;elbow=horizontal" edge="1" parent="1" source="146" target="139"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="155" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="135" target="132"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="430" y="470"/></Array></mxGeometry></mxCell><mxCell id="156" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="135" target="134"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="110" y="475"/></Array></mxGeometry></mxCell><mxCell id="157" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="135" target="133"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="158" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="124" target="127"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="159" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="124" target="128"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="610" y="475"/></Array></mxGeometry></mxCell><mxCell id="160" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="124" target="129"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="950" y="475"/></Array></mxGeometry></mxCell><mxCell id="161" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="139" target="137"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="162" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="139" target="136"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1130" y="480"/></Array></mxGeometry></mxCell><mxCell id="163" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="139" target="138"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1450" y="475"/></Array></mxGeometry></mxCell><mxCell id="164" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="135" target="142"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="230" y="305"/></Array></mxGeometry></mxCell><mxCell id="165" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="124" target="143"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="740" y="305"/></Array></mxGeometry></mxCell><mxCell id="166" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="139" target="146"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1240" y="305"/></Array></mxGeometry></mxCell><mxCell id="167" value="a supplier &#xa;could not &#xa;fill the order" style="rounded=1;fillColor=#A2C4C9" vertex="1" parent="1"><mxGeometry x="710.0000000000001" y="850" width="140" height="70" as="geometry"/></mxCell><mxCell id="170" value="completed&#xa;successfully" style="rounded=1;fillColor=#A2C4C9" vertex="1" parent="1"><mxGeometry x="920" y="780" width="140" height="70" as="geometry"/></mxCell><mxCell id="171" value="canceled&#xa;by user" style="rounded=1;fillColor=#A2C4C9" vertex="1" parent="1"><mxGeometry x="1380" y="850" width="140" height="70" as="geometry"/></mxCell><mxCell id="172" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="134" target="167"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="173" value="[activities and flights confirmed]" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="133" target="170"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="640" y="815"/></Array><mxPoint x="-5" y="82.5" as="offset"/></mxGeometry></mxCell><mxCell id="174" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="132" target="167"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="175" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="128" target="167"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="176" value="[activities and hotel confirmed]" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="127" target="170"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="177" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="129" target="167"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="178" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="136" target="167"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="179" value="[flights and hotel confirmed]" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="137" target="170"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="180" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="138" target="167"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="181" value="automatic transition" style="text;align=center" vertex="1" parent="1"><mxGeometry x="705.0000000000002" y="780" width="149.9999999999999" height="26" as="geometry"/></mxCell><mxCell id="182" value="user&#xa;canceled&#xa;order" style="edgeStyle=elbowEdgeStyle;elbow=vertical" edge="1" parent="1" source="170" target="171"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="183" value="[#retries &gt; 3]&#xa;timeout" style="text;align=center" vertex="1" parent="1"><mxGeometry x="180" y="335" width="100" height="50" as="geometry"/></mxCell><mxCell id="184" value="[#retries &gt; 3]&#xa;timeout" style="text;align=center" vertex="1" parent="1"><mxGeometry x="690" y="335" width="100" height="50" as="geometry"/></mxCell><mxCell id="185" value="[#retries &gt; 3]&#xa;timeout" style="text;align=center" vertex="1" parent="1"><mxGeometry x="1190" y="335" width="100" height="50" as="geometry"/></mxCell><mxCell id="186" value="book flight&#xa;request sent" style="text;align=center" vertex="1" parent="1"><mxGeometry x="270" y="360" width="100" height="50" as="geometry"/></mxCell><mxCell id="189" value="book hotel&#xa;request sent" style="text;align=center" vertex="1" parent="1"><mxGeometry x="780" y="360" width="100" height="50" as="geometry"/></mxCell><mxCell id="190" value="book activities&#xa;request sent" style="text;align=center" vertex="1" parent="1"><mxGeometry x="1280" y="360" width="100" height="50" as="geometry"/></mxCell><mxCell id="192" value="" style="edgeStyle=none;endArrow=none" edge="1" parent="1"><mxGeometry x="100.00000000000001" y="183.59999999999997" width="100" height="100" as="geometry"><mxPoint x="10.000000000000018" y="233.6" as="sourcePoint"/><mxPoint x="1560" y="233.6" as="targetPoint"/></mxGeometry></mxCell><mxCell id="194" value="Filling Order" style="text;align=center" vertex="1" parent="1"><mxGeometry x="10" y="200" width="1550" height="26" as="geometry"/></mxCell><mxCell id="196" value="" style="edgeStyle=none" edge="1" parent="1" source="126" target="193"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="197" value="[#retries &gt; 3]&#xa;timeout" style="text;align=center" vertex="1" parent="1"><mxGeometry x="60" y="520" width="100" height="50" as="geometry"/></mxCell><mxCell id="198" value="[#retries &gt; 3]&#xa;timeout" style="text;align=center" vertex="1" parent="1"><mxGeometry x="560" y="520" width="100" height="50" as="geometry"/></mxCell><mxCell id="199" value="[#retries &gt; 3]&#xa;timeout" style="text;align=center" vertex="1" parent="1"><mxGeometry x="1080.0000000000002" y="520" width="100" height="50" as="geometry"/></mxCell><mxCell id="200" value="flight booking&#xa;confirmation&#xa;received" style="text;align=center" vertex="1" parent="1"><mxGeometry x="220" y="530" width="100" height="50" as="geometry"/></mxCell><mxCell id="201" value="airline&#xa;replies&#xa;denying&#xa;request" style="text;align=center" vertex="1" parent="1"><mxGeometry x="380.0000000000002" y="500" width="100" height="80" as="geometry"/></mxCell><mxCell id="202" value="hotel booking&#xa;confirmation&#xa;received" style="text;align=center" vertex="1" parent="1"><mxGeometry x="730" y="530" width="100" height="50" as="geometry"/></mxCell><mxCell id="204" value="hotel&#xa;replies&#xa;denying&#xa;request" style="text;align=center" vertex="1" parent="1"><mxGeometry x="900" y="505" width="100" height="80" as="geometry"/></mxCell><mxCell id="205" value="activity booking&#xa;confirmation&#xa;received" style="text;align=center" vertex="1" parent="1"><mxGeometry x="1240" y="530" width="100" height="50" as="geometry"/></mxCell><mxCell id="206" value="activity sup.&#xa;replies&#xa;denying&#xa;request" style="text;align=center" vertex="1" parent="1"><mxGeometry x="1400" y="505" width="100" height="80" as="geometry"/></mxCell><mxCell id="207" value="user&#xa;canceled&#xa;order" style="edgeStyle=elbowEdgeStyle;elbow=horizontal" edge="1" parent="1" source="193" target="171"><mxGeometry x="1580" y="700" width="100" height="100" as="geometry"><mxPoint x="1580" y="800" as="sourcePoint"/><mxPoint x="1680" y="700" as="targetPoint"/><Array as="points"><mxPoint x="1480" y="780"/></Array></mxGeometry></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/uml1.xml b/public/assets/plugins/mxgraph/templates/xml/uml1.xml
new file mode 100644
index 0000000..e4b6887
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/uml1.xml
@@ -0,0 +1 @@
+<mxGraphModel style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="45" value="&lt;p style=&quot;margin: 0px; margin-top: 4px; text-align: center;&quot;&gt;&lt;strong&gt;IWLayerInfoEvent&lt;/strong&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;margin: 0px; margin-left: 4px;&quot;&gt;+requestedid : int&lt;br /&gt;+requestedEvent : String&lt;br /&gt;+json : Object&lt;br /&gt;+mouseCoordinate : IWCoordinate&lt;br /&gt;+records : int&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;margin: 0px; margin-left: 4px;&quot;&gt;+toString() : String&lt;/p&gt;" style="shadow=1;fillColor=#FFCC99;gradientColor=#FFFED8;verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1" parent="1" vertex="1"><mxGeometry x="40" y="40" width="280" height="150" as="geometry"/></mxCell><mxCell id="46" value="&lt;p style=&quot;margin: 0px; margin-top: 4px; text-align: center;&quot;&gt;&lt;strong&gt;IWRequestLayerEvent&lt;/strong&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;margin: 0px; margin-left: 4px;&quot;&gt;+eventName : String&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;margin: 0px; margin-left: 4px;&quot;&gt;+toString() : String&lt;/p&gt;" style="shadow=1;fillColor=#FFCC99;gradientColor=#FFFED8;verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1" parent="1" vertex="1"><mxGeometry x="400" y="105" width="160" height="85" as="geometry"/></mxCell><mxCell id="47" value="&lt;p style=&quot;margin: 0px; margin-top: 4px; text-align: center;&quot;&gt;&lt;strong&gt;IWRequestLayer&lt;/strong&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;margin: 0px; margin-left: 4px;&quot;&gt;-layer : IWLayer&lt;br /&gt;-maxHits : Integer = 5&lt;br /&gt;-events : Object&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;margin: 0px; margin-left: 4px;&quot;&gt;+setMaximumHits( maxHits : Integer ) : void&lt;br /&gt;+getMaximumHits() : Integer&lt;br /&gt;+registerEvent( eventname : String ) : Boolean&lt;br /&gt;+getEvents() : Object&lt;br /&gt;+getLayer() : IWLayer&lt;br /&gt;+triggerOnRegisterEvent( event : IWRequestLayerEvent ) : void&lt;br /&gt;+triggerOnUnregisterEvent( event : IWRequestLayerEvent ) : void&lt;br /&gt;+triggerDataReceived( event : IWLayerInfoEvent ) : void&lt;/p&gt;" style="shadow=1;fillColor=#FFCC99;gradientColor=#FFFED8;verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1" parent="1" vertex="1"><mxGeometry x="150" y="270" width="380" height="230" as="geometry"/></mxCell><mxCell id="57" value="&lt;&lt;use&gt;&gt;" style="endArrow=open;endSize=12;startArrow=none;startSize=10;startFill=0;edgeStyle=elbowEdgeStyle;sourcePerimeterSpacing=5;dashed=1;elbow=horizontal" parent="1" source="47" target="45" edge="1"><mxGeometry width="100" as="geometry"><mxPoint as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="60" value="&lt;&lt;use&gt;&gt;" style="endArrow=open;endSize=12;startArrow=none;startSize=10;startFill=0;edgeStyle=elbowEdgeStyle;sourcePerimeterSpacing=5;dashed=1;elbow=horizontal" parent="1" source="47" target="46" edge="1"><mxGeometry x="10" y="10" width="100" as="geometry"><mxPoint x="245" y="275" as="sourcePoint"/><mxPoint x="245" y="180" as="targetPoint"/></mxGeometry></mxCell><mxCell id="61" value="&lt;p style=&quot;margin: 0px; margin-top: 4px; text-align: center;&quot;&gt;&lt;strong&gt;IWLayerInfoManager&lt;/strong&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;margin: 0px; margin-left: 4px;&quot;&gt;-captureSize&lt;br /&gt;-eventListeners&lt;br /&gt;-maxHits : Integer = 100&lt;br /&gt;-requestedIdCounter : int&lt;br /&gt;-requestLayers&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;margin: 0px; margin-left: 4px;&quot;&gt;-addEvent( eventName : String ) : void&lt;br /&gt;-callbackSendServerRequest( xmlHttp, eventName : String, mouseCoordinate ) : void&lt;br /&gt;-removeEvent( eventName : String ) : void&lt;br /&gt;-sendServerRequest( event : IWMouseEvent, eventName : String ) : void&lt;br /&gt;+addRequestLayer( requestLayer : IWRequestLayer ) : boolean&lt;br /&gt;+getCaptureSize()&lt;br /&gt;+getMaximumHits() : integer&lt;br /&gt;+removeRequestLayer( requestLayer : IWRequestLayer) : boolean&lt;br /&gt;+setCaptureSize( captureSize ) : void&lt;br /&gt;+setMaximumHits( maxHits : integer ) : void&lt;br /&gt;+toString() : String&lt;br /&gt;+triggerDataReceived( event : IWLayerInfoEvent ) : void&lt;/p&gt;" style="shadow=1;fillColor=#FFCC99;gradientColor=#FFFED8;verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1" parent="1" vertex="1"><mxGeometry x="50" y="600" width="560" height="320" as="geometry"/></mxCell><mxCell id="63" value="request" style="endArrow=open;endSize=12;startArrow=diamond;startSize=10;startFill=0;edgeStyle=elbowEdgeStyle;sourcePerimeterSpacing=5;dashed=1;align=right;elbow=horizontal;verticalAlign=top" parent="1" source="61" target="47" edge="1"><mxGeometry width="100" as="geometry"><mxPoint as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="330" y="540"/><mxPoint x="310" y="540"/></Array><mxPoint x="-10.5" y="32.5" as="offset"/></mxGeometry></mxCell><mxCell id="64" value="1" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=white;fontSize=10" parent="63" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"><mxPoint x="8" y="-25" as="offset"/></mxGeometry></mxCell><mxCell id="65" value="&lt;p style=&quot;margin: 0px; margin-top: 4px; text-align: center;&quot;&gt;&lt;strong&gt;IWLayer&lt;/strong&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;margin: 0px; margin-left: 4px;&quot;&gt;-map : IWMap&lt;br /&gt;-layerName : String&lt;br /&gt;-idfLayerName : String&lt;br /&gt;-shapes : Array&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;margin: 0px; margin-left: 4px;&quot;&gt;+add( node : IWNodeElement ) : void&lt;br /&gt;+expand( node : IWNodeElement ) : void&lt;br /&gt;+collapse( node : IWNodeElement ) : void&lt;br /&gt;+addLayer( node : IWNodeElement ) : void&lt;br /&gt;+setLayerName( layerName : String ) : void&lt;br /&gt;+getLayerName() : String&lt;br /&gt;+setLayerTitle( layerTitle : String ) : void&lt;br /&gt;+getLayerTitle() : String&lt;br /&gt;+getCurrentShapeName( newZoomLevel : int ) : String&lt;br /&gt;+setVisibility( visibility : Boolean ) : void&lt;br /&gt;+setIdfLayerName( idfLayerName : String ) : void&lt;br /&gt;+getidfLayerName() : String&lt;br /&gt;+addShape( shape : IWShape ) : Boolean&lt;br /&gt;+removeShape( shapeName : String ) : Boolean&lt;br /&gt;+getShapes() : Array&lt;br /&gt;+isVisible() : Boolean&lt;br /&gt;+toString() : String&lt;br /&gt;+triggerOnRemove() : void&lt;br /&gt;-updateVisiblity( newZoomLevel : int ) : void&lt;br /&gt;-updateParentVisiblity( parent : IWNodeElement ) : void&lt;/p&gt;" style="shadow=1;fillColor=#FFCC99;gradientColor=#FFFED8;verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1" parent="1" vertex="1"><mxGeometry x="690" y="527.5" width="380" height="422.5" as="geometry"/></mxCell><mxCell id="67" value="&lt;p style=&quot;margin: 0px; margin-top: 4px; text-align: center;&quot;&gt;&lt;strong&gt;IWRequestLayer&lt;/strong&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;margin: 0px; margin-left: 4px;&quot;&gt;-parent : Object&lt;br /&gt;-children : Array&lt;br /&gt;-name : String&lt;br /&gt;-marked : Bolean = false&lt;br /&gt;-collapsed : Boolean = false&lt;br /&gt;+isNodeElement : Boolean = true&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;margin: 0px; margin-left: 4px;&quot;&gt;+setParent( parent : IWNodeElement ) : void&lt;br /&gt;+getParent() : IWNodeElement&lt;br /&gt;+hasChildren() : Boolean&lt;br /&gt;+hasChild( child : Object ) : Boolean&lt;br /&gt;+getChildren() : Array&lt;br /&gt;+add( node : IWNodeElement ) : void&lt;br /&gt;+remove( node : IWNodeElement ) : void&lt;br /&gt;+getName() : String&lt;br /&gt;+chackIfExistsAsParent( node : IWNodeElement ) : Boolean&lt;br /&gt;+mark() : void&lt;br /&gt;+unmark() : void&lt;br /&gt;+isMarked() : void&lt;br /&gt;+collapse() : void&lt;br /&gt;+expand() : void&lt;br /&gt;+isCollapsed() : Boolean&lt;br /&gt;+triggerStateChangedEvent() : void&lt;/p&gt;" style="shadow=1;fillColor=#FFCC99;gradientColor=#FFFED8;verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1" parent="1" vertex="1"><mxGeometry x="690" y="40" width="380" height="422.5" as="geometry"/></mxCell><mxCell id="71" value="&lt;p style=&quot;margin: 0px; margin-top: 4px; text-align: center;&quot;&gt;&lt;strong&gt;IWShape&lt;/strong&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;margin: 0px; margin-left: 4px;&quot;&gt;-shapeName : String&lt;br /&gt;-range : IWRange&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;margin: 0px; margin-left: 4px;&quot;&gt;+setShapeName( shapeName : String ) : void&lt;br /&gt;+getShapeName() : String&lt;br /&gt;+setRange( range : IWRange ) : IWRange&lt;br /&gt;+getRange() : IWRange&lt;br /&gt;+toString() : String&lt;/p&gt;" style="shadow=1;fillColor=#FFCC99;gradientColor=#FFFED8;verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1" parent="1" vertex="1"><mxGeometry x="1140" y="610" width="280" height="165" as="geometry"/></mxCell><mxCell id="72" value="&lt;p style=&quot;margin: 0px; margin-top: 4px; text-align: center;&quot;&gt;&lt;strong&gt;IWLayerInterface&lt;/strong&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;margin: 0px; margin-left: 4px;&quot;&gt;-useDefaults : Boolean&lt;/p&gt;&lt;hr /&gt;&lt;p style=&quot;margin: 0px; margin-left: 4px;&quot;&gt;-isVisible() : Boolean&lt;br /&gt;+setUseDefaults( useDefaults : Boolean ) : void&lt;br /&gt;+setVisible( visible : Boolean ) : void&lt;br /&gt;+useDefaults() : Boolean&lt;br /&gt;+triggerViewChangedEvent() : void&lt;/p&gt;" style="shadow=1;fillColor=#FFCC99;gradientColor=#FFFED8;verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1" parent="1" vertex="1"><mxGeometry x="1100" y="322.5" width="280" height="145" as="geometry"/></mxCell><mxCell id="44" value="" style="edgeStyle=elbowEdgeStyle;elbow=vertical;rounded=0;dashed=0;endArrow=block" parent="1" source="72" target="67" edge="1"><mxGeometry x="577.5" y="109.99999999999994" width="100" height="100" as="geometry"><mxPoint x="1120" y="194.99999999999994" as="sourcePoint"/><mxPoint x="1300" y="124.99999999999994" as="targetPoint"/><Array as="points"><mxPoint x="1270" y="80"/></Array></mxGeometry></mxCell><mxCell id="73" value="" style="endArrow=open;endSize=12;startArrow=diamond;startSize=10;startFill=0;edgeStyle=orthogonalEdgeStyle;sourcePerimeterSpacing=5;" parent="1" source="47" target="65" edge="1"><mxGeometry width="100" as="geometry"><mxPoint as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="640" y="385"/><mxPoint x="640" y="580"/></Array></mxGeometry></mxCell><mxCell id="74" value="1" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=white;fontSize=10" parent="73" connectable="0" vertex="1"><mxGeometry x="-1" relative="1" as="geometry"/></mxCell><mxCell id="75" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=white;fontSize=10" parent="73" connectable="0" vertex="1"><mxGeometry x="1" relative="1" as="geometry"/></mxCell><mxCell id="76" value="" style="endArrow=open;endSize=12;startArrow=diamond;startSize=10;startFill=0;edgeStyle=orthogonalEdgeStyle;sourcePerimeterSpacing=5;" edge="1" parent="1" source="65" target="72"><mxGeometry width="100" as="geometry"><mxPoint as="sourcePoint"/><mxPoint x="100" as="targetPoint"/><Array as="points"><mxPoint x="1210" y="570"/></Array></mxGeometry></mxCell><mxCell id="77" value="1" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=white;fontSize=10" connectable="0" vertex="1" parent="76"><mxGeometry x="-1" relative="1" as="geometry"/></mxCell><mxCell id="79" value="" style="endArrow=open;endSize=12;startArrow=diamond;startSize=10;startFill=0;edgeStyle=elbowEdgeStyle;sourcePerimeterSpacing=5;elbow=vertical" edge="1" parent="1" source="65" target="71"><mxGeometry x="10" y="10" width="100" as="geometry"><mxPoint x="1085" y="580" as="sourcePoint"/><mxPoint x="1220" y="477.5" as="targetPoint"/><Array as="points"><mxPoint x="1100" y="693"/></Array></mxGeometry></mxCell><mxCell id="80" value="1" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=white;fontSize=10" connectable="0" vertex="1" parent="79"><mxGeometry x="-1" relative="1" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/usecase1.xml b/public/assets/plugins/mxgraph/templates/xml/usecase1.xml
new file mode 100644
index 0000000..26192cd
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/usecase1.xml
@@ -0,0 +1 @@
+<mxGraphModel grid="1" guides="1" tooltips="1" connect="1" fold="1" page="0" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="90" value="Storage&#xa;Deparmnet" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#274E13;strokeColor=#274E13;fontStyle=3;fontSize=18;fontFamily=Helvetica;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="140" y="160" width="40" height="80" as="geometry"/></mxCell><mxCell id="91" value="HR" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#274E13;strokeColor=#274E13;fontStyle=3;fontSize=18;fontFamily=Helvetica;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="140" y="430" width="40" height="80" as="geometry"/></mxCell><mxCell id="92" value="Maintenance" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#274E13;strokeColor=#274E13;fontStyle=3;fontSize=18;fontFamily=Helvetica;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1140" y="217.5" width="40" height="80" as="geometry"/></mxCell><mxCell id="93" value="Office &#xa;of Sales" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#274E13;strokeColor=#274E13;fontStyle=3;fontSize=18;fontFamily=Helvetica;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1140" y="390" width="40" height="80" as="geometry"/></mxCell><mxCell id="119" value="Update Storage List" style="shape=mxgraph.flowchart.on-page_reference;fillColor=#FFE599;strokeColor=black;strokeWidth=2;shadow=1;gradientColor=#F1C232" parent="1" vertex="1"><mxGeometry x="390" y="55" width="180" height="75" as="geometry"/></mxCell><mxCell id="121" value="Adjust Stock List" style="shape=mxgraph.flowchart.on-page_reference;fillColor=#FFE599;strokeColor=black;strokeWidth=2;shadow=1;gradientColor=#F1C232" parent="1" vertex="1"><mxGeometry x="390" y="142.5" width="180" height="75" as="geometry"/></mxCell><mxCell id="122" value="Fill Storage" style="shape=mxgraph.flowchart.on-page_reference;fillColor=#FFE599;strokeColor=black;strokeWidth=2;shadow=1;gradientColor=#F1C232" parent="1" vertex="1"><mxGeometry x="390" y="240" width="180" height="75" as="geometry"/></mxCell><mxCell id="123" value="Form Request Criteria" style="shape=mxgraph.flowchart.on-page_reference;fillColor=#FFE599;strokeColor=black;strokeWidth=2;shadow=1;gradientColor=#F1C232" parent="1" vertex="1"><mxGeometry x="390" y="322.5" width="180" height="75" as="geometry"/></mxCell><mxCell id="124" value="Workforce &#xa;Market Research" style="shape=mxgraph.flowchart.on-page_reference;fillColor=#FFE599;strokeColor=black;strokeWidth=2;shadow=1;gradientColor=#F1C232" parent="1" vertex="1"><mxGeometry x="390" y="410" width="180" height="75" as="geometry"/></mxCell><mxCell id="125" value="Employee Analysis" style="shape=mxgraph.flowchart.on-page_reference;fillColor=#FFE599;strokeColor=black;strokeWidth=2;shadow=1;gradientColor=#F1C232" parent="1" vertex="1"><mxGeometry x="390" y="500" width="180" height="75" as="geometry"/></mxCell><mxCell id="126" value="Adjust Earnings" style="shape=mxgraph.flowchart.on-page_reference;fillColor=#FFE599;strokeColor=black;strokeWidth=2;shadow=1;gradientColor=#F1C232" parent="1" vertex="1"><mxGeometry x="390" y="590" width="180" height="75" as="geometry"/></mxCell><mxCell id="127" value="Recruit &#xa;Workforce" style="shape=mxgraph.flowchart.on-page_reference;fillColor=#FFE599;strokeColor=black;strokeWidth=2;shadow=1;gradientColor=#F1C232" parent="1" vertex="1"><mxGeometry x="390" y="680" width="180" height="75" as="geometry"/></mxCell><mxCell id="128" value="SCADA" style="shape=mxgraph.flowchart.on-page_reference;fillColor=#FFE599;strokeColor=black;strokeWidth=2;shadow=1;gradientColor=#F1C232" parent="1" vertex="1"><mxGeometry x="790" y="47.5" width="180" height="75" as="geometry"/></mxCell><mxCell id="129" value="Intervention" style="shape=mxgraph.flowchart.on-page_reference;fillColor=#FFE599;strokeColor=black;strokeWidth=2;shadow=1;gradientColor=#F1C232" parent="1" vertex="1"><mxGeometry x="790" y="135" width="180" height="75" as="geometry"/></mxCell><mxCell id="130" value="Form Order List" style="shape=mxgraph.flowchart.on-page_reference;fillColor=#FFE599;strokeColor=black;strokeWidth=2;shadow=1;gradientColor=#F1C232" parent="1" vertex="1"><mxGeometry x="790" y="215" width="180" height="75" as="geometry"/></mxCell><mxCell id="132" value="Market Research" style="shape=mxgraph.flowchart.on-page_reference;fillColor=#FFE599;strokeColor=black;strokeWidth=2;shadow=1;gradientColor=#F1C232" parent="1" vertex="1"><mxGeometry x="790" y="397.5" width="180" height="75" as="geometry"/></mxCell><mxCell id="133" value="Adjust Prices" style="shape=mxgraph.flowchart.on-page_reference;fillColor=#FFE599;strokeColor=black;strokeWidth=2;shadow=1;gradientColor=#F1C232" parent="1" vertex="1"><mxGeometry x="790" y="492.5" width="180" height="75" as="geometry"/></mxCell><mxCell id="134" value="Financial Report" style="shape=mxgraph.flowchart.on-page_reference;fillColor=#FFE599;strokeColor=black;strokeWidth=2;shadow=1;gradientColor=#F1C232" parent="1" vertex="1"><mxGeometry x="790" y="582.5" width="180" height="75" as="geometry"/></mxCell><mxCell id="135" value="Investment" style="shape=mxgraph.flowchart.on-page_reference;fillColor=#FFE599;strokeColor=black;strokeWidth=2;shadow=1;gradientColor=#F1C232" parent="1" vertex="1"><mxGeometry x="790" y="672.5" width="180" height="75" as="geometry"/></mxCell><mxCell id="139" value="" style="edgeStyle=none;entryX=0;entryY=0.5;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="90" target="119" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="140" value="" style="edgeStyle=none;entryX=0;entryY=0.5;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="90" target="121" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="141" value="" style="edgeStyle=none;entryX=0;entryY=0.5;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="90" target="122" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="142" value="" style="edgeStyle=none;entryX=0;entryY=0.5;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="91" target="123" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="143" value="" style="edgeStyle=none;entryX=0;entryY=0.5;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="91" target="124" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="144" value="" style="edgeStyle=none;entryX=0;entryY=0.5;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="91" target="125" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="145" value="" style="edgeStyle=none;entryX=0;entryY=0.5;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="91" target="126" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="146" value="" style="edgeStyle=none;entryX=0;entryY=0.5;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="91" target="127" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="147" value="" style="edgeStyle=none;entryX=1;entryY=0.5;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="92" target="128" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="148" value="" style="edgeStyle=none;entryX=1;entryY=0.5;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="92" target="129" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="149" value="" style="edgeStyle=none;entryX=1;entryY=0.5;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="92" target="130" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="152" value="" style="edgeStyle=none;entryX=0.855;entryY=0.855;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="93" target="130" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="153" value="" style="edgeStyle=none;entryX=1;entryY=0.5;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="93" target="132" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="154" value="" style="edgeStyle=none;entryX=1;entryY=0.5;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="93" target="133" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="155" value="" style="edgeStyle=none;entryX=1;entryY=0.5;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="93" target="134" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="156" value="" style="edgeStyle=none;entryX=1;entryY=0.5;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="93" target="135" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="157" value="" style="edgeStyle=none;entryX=0;entryY=0.5;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="90" target="130" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell><mxCell id="158" value="" style="edgeStyle=none;entryX=1;entryY=0.5;entryPerimeter=0;strokeWidth=2;endArrow=block;endFill=1;strokeColor=#990000" parent="1" source="92" target="123" edge="1"><mxGeometry width="100" height="100" as="geometry"><mxPoint y="100" as="sourcePoint"/><mxPoint x="100" as="targetPoint"/></mxGeometry></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/venn1.xml b/public/assets/plugins/mxgraph/templates/xml/venn1.xml
new file mode 100644
index 0000000..c0a0610
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/venn1.xml
@@ -0,0 +1 @@
+<mxGraphModel grid="1" guides="1" tooltips="1" connect="1" fold="1" page="0" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="2" value="" style="ellipse;fillColor=#007FFF;opacity=50" vertex="1" parent="1"><mxGeometry x="220" y="20" width="500" height="500" as="geometry"/></mxCell><mxCell id="4" value="" style="ellipse;fillColor=#FF0000;opacity=50" vertex="1" parent="1"><mxGeometry x="530" y="20" width="500" height="500" as="geometry"/></mxCell><mxCell id="5" value="" style="ellipse;fillColor=#006600;opacity=50" vertex="1" parent="1"><mxGeometry x="380" y="310" width="500" height="500" as="geometry"/></mxCell><mxCell id="6" value="Invention" style="text;fontSize=18;align=center;verticalAlign=middle" vertex="1" parent="1"><mxGeometry x="340" y="230" width="190" height="70" as="geometry"/></mxCell><mxCell id="7" value="Revolution" style="text;fontSize=18;align=center;verticalAlign=middle" vertex="1" parent="1"><mxGeometry x="740" y="230" width="190" height="70" as="geometry"/></mxCell><mxCell id="8" value="Tradition" style="text;fontSize=18;align=center;verticalAlign=middle" vertex="1" parent="1"><mxGeometry x="540" y="560" width="190" height="70" as="geometry"/></mxCell><mxCell id="9" value="Military" style="text;align=center" vertex="1" parent="1"><mxGeometry x="610" y="200" width="40" height="40" as="geometry"/></mxCell><mxCell id="10" value="Conflict" style="text;align=center" vertex="1" parent="1"><mxGeometry x="490" y="420" width="40" height="40" as="geometry"/></mxCell><mxCell id="11" value="Chaos" style="text;align=center" vertex="1" parent="1"><mxGeometry x="740" y="420" width="40" height="40" as="geometry"/></mxCell><mxCell id="12" value="Balance" style="text;align=center" vertex="1" parent="1"><mxGeometry x="610" y="350" width="40" height="40" as="geometry"/></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/mxgraph/templates/xml/wf1.xml b/public/assets/plugins/mxgraph/templates/xml/wf1.xml
new file mode 100644
index 0000000..8d72685
--- /dev/null
+++ b/public/assets/plugins/mxgraph/templates/xml/wf1.xml
@@ -0,0 +1 @@
+<mxGraphModel style="default-style2" background="#99CC00"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="2" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=4" parent="1" vertex="1"><mxGeometry x="690" y="20" width="50" height="50" as="geometry"/></mxCell><mxCell id="4" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="690" y="100" width="50" height="50" as="geometry"/></mxCell><mxCell id="5" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="739.0799999999998" y="200" width="50" height="50" as="geometry"/></mxCell><mxCell id="6" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="640" y="200" width="50" height="50" as="geometry"/></mxCell><mxCell id="7" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="879.9999999999999" y="200" width="50" height="50" as="geometry"/></mxCell><mxCell id="8" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="490.92" y="200" width="50" height="50" as="geometry"/></mxCell><mxCell id="9" value="" style="shape=hexagon;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="350" y="320" width="50" height="50" as="geometry"/></mxCell><mxCell id="11" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="450.00000000000006" y="320" width="50" height="50" as="geometry"/></mxCell><mxCell id="14" value="" style="rhombus;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="560" y="320" width="51.84000000000003" height="50" as="geometry"/></mxCell><mxCell id="16" value="" style="shape=hexagon;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="640" y="320" width="50" height="50" as="geometry"/></mxCell><mxCell id="19" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="465.91999999999996" y="456.99999999999994" width="50" height="50" as="geometry"/></mxCell><mxCell id="21" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="110" y="456.99999999999994" width="50" height="50" as="geometry"/></mxCell><mxCell id="22" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="739.0799999999998" y="320" width="50" height="50" as="geometry"/></mxCell><mxCell id="28" value="" style="shape=hexagon;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="465.91999999999996" y="579" width="50" height="50" as="geometry"/></mxCell><mxCell id="29" value="" style="shape=hexagon;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="739.0799999999998" y="456.99999999999994" width="50" height="50" as="geometry"/></mxCell><mxCell id="30" value="" style="shape=hexagon;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="385.00000000000006" y="456.99999999999994" width="50" height="50" as="geometry"/></mxCell><mxCell id="39" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;gradientColor=#880000" parent="1" source="2" target="4" edge="1"><mxGeometry x="440" y="20" width="100" height="100" as="geometry"><mxPoint x="440" y="120" as="sourcePoint"/><mxPoint x="540" y="20" as="targetPoint"/></mxGeometry></mxCell><mxCell id="42" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1070" y="320" width="50" height="50" as="geometry"/></mxCell><mxCell id="43" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="929.9999999999999" y="320" width="50" height="50" as="geometry"/></mxCell><mxCell id="44" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="830" y="320" width="50" height="50" as="geometry"/></mxCell><mxCell id="51" value="" style="strokeColor=#FFFF00;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="208.15999999999997" y="456.99999999999994" width="50" height="50" as="geometry"/></mxCell><mxCell id="52" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="560.9200000000001" y="456.99999999999994" width="50" height="50" as="geometry"/></mxCell><mxCell id="53" value="" style="strokeColor=#FFFF00;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="640" y="456.99999999999994" width="50" height="50" as="geometry"/></mxCell><mxCell id="54" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="830" y="456.99999999999994" width="50" height="50" as="geometry"/></mxCell><mxCell id="55" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1255" y="456.99999999999994" width="50" height="50" as="geometry"/></mxCell><mxCell id="56" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1175" y="456.99999999999994" width="50" height="50" as="geometry"/></mxCell><mxCell id="57" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1100" y="456.99999999999994" width="50" height="50" as="geometry"/></mxCell><mxCell id="58" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1020" y="456.99999999999994" width="50" height="50" as="geometry"/></mxCell><mxCell id="59" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="929.9999999999999" y="456.99999999999994" width="50" height="50" as="geometry"/></mxCell><mxCell id="63" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="739.0799999999998" y="579" width="50" height="50" as="geometry"/></mxCell><mxCell id="64" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="560.9200000000001" y="579" width="50" height="50" as="geometry"/></mxCell><mxCell id="65" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="385.00000000000006" y="579" width="50" height="50" as="geometry"/></mxCell><mxCell id="66" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="305" y="579" width="50" height="50" as="geometry"/></mxCell><mxCell id="67" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="110" y="579" width="50" height="50" as="geometry"/></mxCell><mxCell id="68" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="30" y="579" width="50" height="50" as="geometry"/></mxCell><mxCell id="69" value="" style="strokeColor=#FFFF00;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="208.15999999999997" y="579" width="50" height="50" as="geometry"/></mxCell><mxCell id="72" value="" style="strokeColor=#FFFF00;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="640" y="579" width="50" height="50" as="geometry"/></mxCell><mxCell id="75" value="" style="shape=hexagon;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="830" y="579" width="50" height="50" as="geometry"/></mxCell><mxCell id="76" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="929.9999999999999" y="579" width="50" height="50" as="geometry"/></mxCell><mxCell id="77" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1100" y="579" width="50" height="50" as="geometry"/></mxCell><mxCell id="78" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1175" y="579" width="50" height="50" as="geometry"/></mxCell><mxCell id="79" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1255" y="579" width="50" height="50" as="geometry"/></mxCell><mxCell id="80" value="" style="triangle;direction=east;rotation=270;gradientColor=#880000;fillColor=#FF0000;gradientDirection=north;strokeColor=#FFFF00;strokeWidth=4" parent="1" vertex="1"><mxGeometry x="1020" y="579" width="50" height="50" as="geometry"/></mxCell><mxCell id="81" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="70" y="736" width="50" height="50" as="geometry"/></mxCell><mxCell id="82" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="150" y="736" width="50" height="50" as="geometry"/></mxCell><mxCell id="83" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="110" y="841" width="50" height="50" as="geometry"/></mxCell><mxCell id="90" value="" style="group" parent="1" vertex="1" connectable="0"><mxGeometry x="375" y="859" width="50" height="50" as="geometry"/></mxCell><mxCell id="88" value="" style="group" parent="90" vertex="1" connectable="0"><mxGeometry width="50" height="50" as="geometry"/></mxCell><mxCell id="84" value="" style="ellipse;fillColor=#FF0000;gradientColor=#FF9900;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="110" y="960" width="50" height="50" as="geometry"/></mxCell><mxCell id="85" value="" style="ellipse;fillColor=#FFFFFF;gradientColor=none;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="115" y="965" width="40" height="40" as="geometry"/></mxCell><mxCell id="102" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="385.00000000000006" y="736" width="50" height="50" as="geometry"/></mxCell><mxCell id="103" value="" style="strokeColor=#FFFF00;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="465.91999999999996" y="736" width="50" height="50" as="geometry"/></mxCell><mxCell id="104" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="560.9200000000001" y="736" width="50" height="50" as="geometry"/></mxCell><mxCell id="105" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="739.0799999999998" y="736" width="50" height="50" as="geometry"/></mxCell><mxCell id="106" value="" style="strokeColor=#FFFF00;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="830" y="736" width="50" height="50" as="geometry"/></mxCell><mxCell id="107" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="929.9999999999999" y="736" width="50" height="50" as="geometry"/></mxCell><mxCell id="108" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1140" y="736" width="50" height="50" as="geometry"/></mxCell><mxCell id="109" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="889.0799999999999" y="841" width="50" height="50" as="geometry"/></mxCell><mxCell id="110" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="500.9200000000001" y="841" width="50" height="50" as="geometry"/></mxCell><mxCell id="111" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="4" target="6" edge="1"><mxGeometry x="450" y="30" width="100" height="100" as="geometry"><mxPoint x="725" y="80" as="sourcePoint"/><mxPoint x="725" y="110" as="targetPoint"/></mxGeometry></mxCell><mxCell id="112" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;gradientColor=#880000" parent="1" source="8" target="9" edge="1"><mxGeometry x="460" y="40" width="100" height="100" as="geometry"><mxPoint x="712.0972573879905" y="156.41306220716478" as="sourcePoint"/><mxPoint x="677.862393885692" y="213.56267685718012" as="targetPoint"/></mxGeometry></mxCell><mxCell id="113" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="6" target="8" edge="1"><mxGeometry x="460" y="40" width="100" height="100" as="geometry"><mxPoint x="712.0972573879905" y="156.41306220716478" as="sourcePoint"/><mxPoint x="677.862393885692" y="213.56267685718012" as="targetPoint"/></mxGeometry></mxCell><mxCell id="114" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="4" target="5" edge="1"><mxGeometry x="470" y="50" width="100" height="100" as="geometry"><mxPoint x="640" y="235" as="sourcePoint"/><mxPoint x="510" y="235" as="targetPoint"/></mxGeometry></mxCell><mxCell id="115" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="4" target="8" edge="1"><mxGeometry x="480" y="60" width="100" height="100" as="geometry"><mxPoint x="650" y="245" as="sourcePoint"/><mxPoint x="520" y="245" as="targetPoint"/></mxGeometry></mxCell><mxCell id="116" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="4" target="7" edge="1"><mxGeometry x="490" y="70" width="100" height="100" as="geometry"><mxPoint x="660" y="255" as="sourcePoint"/><mxPoint x="530" y="255" as="targetPoint"/></mxGeometry></mxCell><mxCell id="117" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="8" target="11" edge="1"><mxGeometry x="500" y="80" width="100" height="100" as="geometry"><mxPoint x="670" y="265" as="sourcePoint"/><mxPoint x="540" y="265" as="targetPoint"/></mxGeometry></mxCell><mxCell id="118" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="8" target="14" edge="1"><mxGeometry x="510" y="90" width="100" height="100" as="geometry"><mxPoint x="680" y="275" as="sourcePoint"/><mxPoint x="550" y="275" as="targetPoint"/></mxGeometry></mxCell><mxCell id="119" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="6" target="11" edge="1"><mxGeometry x="520" y="100" width="100" height="100" as="geometry"><mxPoint x="690" y="285" as="sourcePoint"/><mxPoint x="560" y="285" as="targetPoint"/></mxGeometry></mxCell><mxCell id="120" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="6" target="16" edge="1"><mxGeometry x="530" y="110" width="100" height="100" as="geometry"><mxPoint x="700" y="295" as="sourcePoint"/><mxPoint x="570" y="295" as="targetPoint"/></mxGeometry></mxCell><mxCell id="121" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="6" target="44" edge="1"><mxGeometry x="530" y="110" width="100" height="100" as="geometry"><mxPoint x="652.8729080761252" y="246.63579833927903" as="sourcePoint"/><mxPoint x="507.11929178484297" y="323.34938066294535" as="targetPoint"/></mxGeometry></mxCell><mxCell id="122" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="5" target="14" edge="1"><mxGeometry x="540" y="120" width="100" height="100" as="geometry"><mxPoint x="662.8729080761252" y="256.63579833927906" as="sourcePoint"/><mxPoint x="517.119291784843" y="333.34938066294535" as="targetPoint"/></mxGeometry></mxCell><mxCell id="123" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="5" target="42" edge="1"><mxGeometry x="550" y="130" width="100" height="100" as="geometry"><mxPoint x="672.8729080761252" y="266.63579833927906" as="sourcePoint"/><mxPoint x="527.119291784843" y="343.34938066294535" as="targetPoint"/></mxGeometry></mxCell><mxCell id="124" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="5" target="22" edge="1"><mxGeometry x="560" y="140" width="100" height="100" as="geometry"><mxPoint x="682.8729080761252" y="276.63579833927906" as="sourcePoint"/><mxPoint x="537.119291784843" y="353.34938066294535" as="targetPoint"/></mxGeometry></mxCell><mxCell id="125" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="7" target="44" edge="1"><mxGeometry x="570" y="150" width="100" height="100" as="geometry"><mxPoint x="692.8729080761252" y="286.63579833927906" as="sourcePoint"/><mxPoint x="547.119291784843" y="363.34938066294535" as="targetPoint"/></mxGeometry></mxCell><mxCell id="126" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="7" target="43" edge="1"><mxGeometry x="580" y="160" width="100" height="100" as="geometry"><mxPoint x="702.8729080761252" y="296.63579833927906" as="sourcePoint"/><mxPoint x="557.119291784843" y="373.34938066294535" as="targetPoint"/></mxGeometry></mxCell><mxCell id="127" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="7" target="42" edge="1"><mxGeometry x="590" y="170" width="100" height="100" as="geometry"><mxPoint x="712.8729080761252" y="306.63579833927906" as="sourcePoint"/><mxPoint x="567.119291784843" y="383.34938066294535" as="targetPoint"/></mxGeometry></mxCell><mxCell id="128" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="9" target="21" edge="1"><mxGeometry x="490" y="90" width="100" height="100" as="geometry"><mxPoint x="702.6393202250011" y="166.1803398874994" as="sourcePoint"/><mxPoint x="548.2806797749977" y="243.81966011250114" as="targetPoint"/></mxGeometry></mxCell><mxCell id="129" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="9" target="51" edge="1"><mxGeometry x="500" y="100" width="100" height="100" as="geometry"><mxPoint x="360" y="364.3790713314624" as="sourcePoint"/><mxPoint x="168.4198048912987" y="436.25284395626187" as="targetPoint"/></mxGeometry></mxCell><mxCell id="130" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="9" target="30" edge="1"><mxGeometry x="510" y="110" width="100" height="100" as="geometry"><mxPoint x="360" y="370.8629441624365" as="sourcePoint"/><mxPoint x="268.15999999999997" y="429.1370558375634" as="targetPoint"/></mxGeometry></mxCell><mxCell id="131" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="11" target="21" edge="1"><mxGeometry x="520" y="120" width="100" height="100" as="geometry"><mxPoint x="370" y="380.8629441624365" as="sourcePoint"/><mxPoint x="278.15999999999997" y="439.1370558375634" as="targetPoint"/></mxGeometry></mxCell><mxCell id="135" value="" style="rhombus;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="304.0799999999999" y="456.99999999999994" width="51.84000000000003" height="50" as="geometry"/></mxCell><mxCell id="136" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="11" target="135" edge="1"><mxGeometry x="530" y="130" width="100" height="100" as="geometry"><mxPoint x="460.83317236953803" y="361.40034704368406" as="sourcePoint"/><mxPoint x="169.17951561712246" y="438.64775437177286" as="targetPoint"/></mxGeometry></mxCell><mxCell id="137" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="14" target="30" edge="1"><mxGeometry x="540" y="140" width="100" height="100" as="geometry"><mxPoint x="463.73319282260354" y="368.1424089298518" as="sourcePoint"/><mxPoint x="355.7709221524723" y="435.21115176743086" as="targetPoint"/></mxGeometry></mxCell><mxCell id="138" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="14" target="19" edge="1"><mxGeometry x="550" y="150" width="100" height="100" as="geometry"><mxPoint x="473.73319282260354" y="378.1424089298518" as="sourcePoint"/><mxPoint x="365.7709221524723" y="445.21115176743086" as="targetPoint"/></mxGeometry></mxCell><mxCell id="139" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="14" target="52" edge="1"><mxGeometry x="560" y="160" width="100" height="100" as="geometry"><mxPoint x="483.73319282260354" y="388.1424089298518" as="sourcePoint"/><mxPoint x="375.7709221524723" y="455.21115176743086" as="targetPoint"/></mxGeometry></mxCell><mxCell id="140" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="16" target="135" edge="1"><mxGeometry x="570" y="170" width="100" height="100" as="geometry"><mxPoint x="493.73319282260354" y="398.1424089298518" as="sourcePoint"/><mxPoint x="385.7709221524723" y="465.21115176743086" as="targetPoint"/></mxGeometry></mxCell><mxCell id="142" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="16" target="53" edge="1"><mxGeometry x="580" y="180" width="100" height="100" as="geometry"><mxPoint x="650" y="361.7164179104478" as="sourcePoint"/><mxPoint x="360.2730719662302" y="439.5535030538486" as="targetPoint"/></mxGeometry></mxCell><mxCell id="143" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="16" target="29" edge="1"><mxGeometry x="590" y="190" width="100" height="100" as="geometry"><mxPoint x="660" y="371.7164179104478" as="sourcePoint"/><mxPoint x="370.2730719662302" y="449.5535030538486" as="targetPoint"/></mxGeometry></mxCell><mxCell id="144" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="22" target="52" edge="1"><mxGeometry x="600" y="200" width="100" height="100" as="geometry"><mxPoint x="670" y="381.7164179104478" as="sourcePoint"/><mxPoint x="380.2730719662302" y="459.5535030538486" as="targetPoint"/></mxGeometry></mxCell><mxCell id="145" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="22" target="58" edge="1"><mxGeometry x="610" y="210" width="100" height="100" as="geometry"><mxPoint x="751.748209704176" y="366.23793318112416" as="sourcePoint"/><mxPoint x="618.2303194038157" y="433.719501425037" as="targetPoint"/></mxGeometry></mxCell><mxCell id="146" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="44" target="29" edge="1"><mxGeometry x="620" y="220" width="100" height="100" as="geometry"><mxPoint x="761.748209704176" y="376.23793318112416" as="sourcePoint"/><mxPoint x="628.2303194038157" y="443.719501425037" as="targetPoint"/></mxGeometry></mxCell><mxCell id="147" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="44" target="54" edge="1"><mxGeometry x="630" y="230" width="100" height="100" as="geometry"><mxPoint x="771.748209704176" y="386.23793318112416" as="sourcePoint"/><mxPoint x="638.2303194038157" y="453.719501425037" as="targetPoint"/></mxGeometry></mxCell><mxCell id="148" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="44" target="59" edge="1"><mxGeometry x="640" y="240" width="100" height="100" as="geometry"><mxPoint x="781.748209704176" y="396.23793318112416" as="sourcePoint"/><mxPoint x="648.2303194038157" y="463.719501425037" as="targetPoint"/></mxGeometry></mxCell><mxCell id="149" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="43" target="59" edge="1"><mxGeometry x="650" y="250" width="100" height="100" as="geometry"><mxPoint x="791.748209704176" y="406.23793318112416" as="sourcePoint"/><mxPoint x="658.2303194038157" y="473.719501425037" as="targetPoint"/></mxGeometry></mxCell><mxCell id="150" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="43" target="57" edge="1"><mxGeometry x="660" y="260" width="100" height="100" as="geometry"><mxPoint x="801.748209704176" y="416.23793318112416" as="sourcePoint"/><mxPoint x="668.2303194038157" y="483.719501425037" as="targetPoint"/></mxGeometry></mxCell><mxCell id="151" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="42" target="58" edge="1"><mxGeometry x="630" y="230" width="100" height="100" as="geometry"><mxPoint x="847.3223304703363" y="372.6776695296637" as="sourcePoint"/><mxPoint x="799.0799999999998" y="420.2529696436428" as="targetPoint"/></mxGeometry></mxCell><mxCell id="152" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="42" target="57" edge="1"><mxGeometry x="640" y="240" width="100" height="100" as="geometry"><mxPoint x="857.3223304703363" y="382.6776695296637" as="sourcePoint"/><mxPoint x="809.0799999999998" y="430.2529696436428" as="targetPoint"/></mxGeometry></mxCell><mxCell id="153" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="42" target="56" edge="1"><mxGeometry x="650" y="250" width="100" height="100" as="geometry"><mxPoint x="867.3223304703363" y="392.6776695296637" as="sourcePoint"/><mxPoint x="819.0799999999998" y="440.2529696436428" as="targetPoint"/></mxGeometry></mxCell><mxCell id="154" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="42" target="55" edge="1"><mxGeometry x="660" y="260" width="100" height="100" as="geometry"><mxPoint x="877.3223304703363" y="402.6776695296637" as="sourcePoint"/><mxPoint x="829.0799999999998" y="450.2529696436428" as="targetPoint"/></mxGeometry></mxCell><mxCell id="155" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="21" target="68" edge="1"><mxGeometry x="500" y="146.99999999999994" width="100" height="100" as="geometry"><mxPoint x="360" y="411.37499999999994" as="sourcePoint"/><mxPoint x="168.40822943922612" y="483.2219139602901" as="targetPoint"/></mxGeometry></mxCell><mxCell id="156" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="21" target="67" edge="1"><mxGeometry x="510" y="156.99999999999994" width="100" height="100" as="geometry"><mxPoint x="129.38262381113938" y="511.52172023607574" as="sourcePoint"/><mxPoint x="80.6173761888606" y="572.4782797639243" as="targetPoint"/></mxGeometry></mxCell><mxCell id="157" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="51" target="69" edge="1"><mxGeometry x="520" y="166.99999999999994" width="100" height="100" as="geometry"><mxPoint x="139.38262381113938" y="521.5217202360757" as="sourcePoint"/><mxPoint x="90.6173761888606" y="582.4782797639243" as="targetPoint"/></mxGeometry></mxCell><mxCell id="158" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="135" target="66" edge="1"><mxGeometry x="530" y="176.99999999999994" width="100" height="100" as="geometry"><mxPoint x="149.38262381113938" y="531.5217202360757" as="sourcePoint"/><mxPoint x="100.6173761888606" y="592.4782797639243" as="targetPoint"/></mxGeometry></mxCell><mxCell id="159" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="30" target="65" edge="1"><mxGeometry x="540" y="186.99999999999994" width="100" height="100" as="geometry"><mxPoint x="159.38262381113938" y="541.5217202360758" as="sourcePoint"/><mxPoint x="110.6173761888606" y="602.4782797639243" as="targetPoint"/></mxGeometry></mxCell><mxCell id="160" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="51" target="68" edge="1"><mxGeometry x="550" y="196.99999999999994" width="100" height="100" as="geometry"><mxPoint x="169.38262381113938" y="551.5217202360758" as="sourcePoint"/><mxPoint x="120.6173761888606" y="612.4782797639243" as="targetPoint"/></mxGeometry></mxCell><mxCell id="161" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="135" target="67" edge="1"><mxGeometry x="560" y="206.99999999999994" width="100" height="100" as="geometry"><mxPoint x="179.38262381113938" y="561.5217202360758" as="sourcePoint"/><mxPoint x="130.6173761888606" y="622.4782797639243" as="targetPoint"/></mxGeometry></mxCell><mxCell id="162" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="30" target="69" edge="1"><mxGeometry x="570" y="216.99999999999994" width="100" height="100" as="geometry"><mxPoint x="189.38262381113938" y="571.5217202360758" as="sourcePoint"/><mxPoint x="140.6173761888606" y="632.4782797639243" as="targetPoint"/></mxGeometry></mxCell><mxCell id="163" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="30" target="28" edge="1"><mxGeometry x="580" y="226.99999999999994" width="100" height="100" as="geometry"><mxPoint x="199.38262381113938" y="581.5217202360758" as="sourcePoint"/><mxPoint x="150.6173761888606" y="642.4782797639243" as="targetPoint"/></mxGeometry></mxCell><mxCell id="164" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="19" target="65" edge="1"><mxGeometry x="590" y="236.99999999999994" width="100" height="100" as="geometry"><mxPoint x="209.38262381113938" y="591.5217202360758" as="sourcePoint"/><mxPoint x="160.6173761888606" y="652.4782797639243" as="targetPoint"/></mxGeometry></mxCell><mxCell id="165" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="52" target="28" edge="1"><mxGeometry x="600" y="246.99999999999994" width="100" height="100" as="geometry"><mxPoint x="485.1551843726377" y="511.4028500029074" as="sourcePoint"/><mxPoint x="435.61737618886065" y="572.4782797639242" as="targetPoint"/></mxGeometry></mxCell><mxCell id="166" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="52" target="64" edge="1"><mxGeometry x="610" y="256.99999999999994" width="100" height="100" as="geometry"><mxPoint x="495.1551843726377" y="521.4028500029074" as="sourcePoint"/><mxPoint x="445.61737618886065" y="582.4782797639242" as="targetPoint"/></mxGeometry></mxCell><mxCell id="167" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="53" target="72" edge="1"><mxGeometry x="620" y="266.99999999999994" width="100" height="100" as="geometry"><mxPoint x="505.1551843726377" y="531.4028500029074" as="sourcePoint"/><mxPoint x="455.61737618886065" y="592.4782797639242" as="targetPoint"/></mxGeometry></mxCell><mxCell id="168" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="53" target="66" edge="1"><mxGeometry x="630" y="276.99999999999994" width="100" height="100" as="geometry"><mxPoint x="515.1551843726377" y="541.4028500029075" as="sourcePoint"/><mxPoint x="465.61737618886065" y="602.4782797639242" as="targetPoint"/></mxGeometry></mxCell><mxCell id="169" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="29" target="72" edge="1"><mxGeometry x="630" y="276.99999999999994" width="100" height="100" as="geometry"><mxPoint x="675" y="517" as="sourcePoint"/><mxPoint x="675" y="567" as="targetPoint"/></mxGeometry></mxCell><mxCell id="170" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="29" target="63" edge="1"><mxGeometry x="640" y="286.99999999999994" width="100" height="100" as="geometry"><mxPoint x="685" y="527" as="sourcePoint"/><mxPoint x="685" y="577" as="targetPoint"/></mxGeometry></mxCell><mxCell id="171" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="29" target="75" edge="1"><mxGeometry x="650" y="296.99999999999994" width="100" height="100" as="geometry"><mxPoint x="695" y="537" as="sourcePoint"/><mxPoint x="695" y="587" as="targetPoint"/></mxGeometry></mxCell><mxCell id="172" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="54" target="63" edge="1"><mxGeometry x="660" y="306.99999999999994" width="100" height="100" as="geometry"><mxPoint x="705" y="547" as="sourcePoint"/><mxPoint x="705" y="597" as="targetPoint"/></mxGeometry></mxCell><mxCell id="173" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="59" target="75" edge="1"><mxGeometry x="670" y="316.99999999999994" width="100" height="100" as="geometry"><mxPoint x="715" y="557" as="sourcePoint"/><mxPoint x="715" y="607" as="targetPoint"/></mxGeometry></mxCell><mxCell id="174" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="59" target="76" edge="1"><mxGeometry x="680" y="326.99999999999994" width="100" height="100" as="geometry"><mxPoint x="725" y="567" as="sourcePoint"/><mxPoint x="725" y="617" as="targetPoint"/></mxGeometry></mxCell><mxCell id="176" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="58" target="77" edge="1"><mxGeometry x="690" y="336.99999999999994" width="100" height="100" as="geometry"><mxPoint x="957.4413679901335" y="519.7959108208106" as="sourcePoint"/><mxPoint x="900" y="577" as="targetPoint"/></mxGeometry></mxCell><mxCell id="177" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="57" target="80" edge="1"><mxGeometry x="700" y="346.99999999999994" width="100" height="100" as="geometry"><mxPoint x="967.4413679901335" y="529.7959108208106" as="sourcePoint"/><mxPoint x="910" y="587" as="targetPoint"/></mxGeometry></mxCell><mxCell id="178" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="57" target="78" edge="1"><mxGeometry x="710" y="356.99999999999994" width="100" height="100" as="geometry"><mxPoint x="977.4413679901335" y="539.7959108208106" as="sourcePoint"/><mxPoint x="920" y="597" as="targetPoint"/></mxGeometry></mxCell><mxCell id="179" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="56" target="77" edge="1"><mxGeometry x="720" y="366.99999999999994" width="100" height="100" as="geometry"><mxPoint x="987.4413679901335" y="549.7959108208106" as="sourcePoint"/><mxPoint x="930" y="607" as="targetPoint"/></mxGeometry></mxCell><mxCell id="180" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="56" target="79" edge="1"><mxGeometry x="730" y="376.99999999999994" width="100" height="100" as="geometry"><mxPoint x="997.4413679901335" y="559.7959108208106" as="sourcePoint"/><mxPoint x="940" y="617" as="targetPoint"/></mxGeometry></mxCell><mxCell id="181" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="55" target="78" edge="1"><mxGeometry x="740" y="386.99999999999994" width="100" height="100" as="geometry"><mxPoint x="1007.4413679901335" y="569.7959108208106" as="sourcePoint"/><mxPoint x="950" y="627" as="targetPoint"/></mxGeometry></mxCell><mxCell id="182" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="55" target="79" edge="1"><mxGeometry x="750" y="396.99999999999994" width="100" height="100" as="geometry"><mxPoint x="1017.4413679901335" y="579.7959108208106" as="sourcePoint"/><mxPoint x="960" y="637" as="targetPoint"/></mxGeometry></mxCell><mxCell id="183" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="68" target="81" edge="1"><mxGeometry x="520" y="189" width="100" height="100" as="geometry"><mxPoint x="145" y="539" as="sourcePoint"/><mxPoint x="145" y="589" as="targetPoint"/></mxGeometry></mxCell><mxCell id="184" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="67" target="81" edge="1"><mxGeometry x="530" y="199" width="100" height="100" as="geometry"><mxPoint x="73.74715604373807" y="637.4198048912987" as="sourcePoint"/><mxPoint x="96.24590239688774" y="697.5827889116747" as="targetPoint"/></mxGeometry></mxCell><mxCell id="185" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="67" target="82" edge="1"><mxGeometry x="540" y="209" width="100" height="100" as="geometry"><mxPoint x="83.74715604373807" y="647.4198048912987" as="sourcePoint"/><mxPoint x="106.24590239688774" y="707.5827889116747" as="targetPoint"/></mxGeometry></mxCell><mxCell id="186" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="69" target="103" edge="1"><mxGeometry x="550" y="219" width="100" height="100" as="geometry"><mxPoint x="93.74715604373807" y="657.4198048912987" as="sourcePoint"/><mxPoint x="116.24590239688774" y="717.5827889116747" as="targetPoint"/></mxGeometry></mxCell><mxCell id="187" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="66" target="82" edge="1"><mxGeometry x="560" y="229" width="100" height="100" as="geometry"><mxPoint x="103.74715604373807" y="667.4198048912987" as="sourcePoint"/><mxPoint x="126.24590239688774" y="727.5827889116747" as="targetPoint"/></mxGeometry></mxCell><mxCell id="188" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="65" target="102" edge="1"><mxGeometry x="570" y="239" width="100" height="100" as="geometry"><mxPoint x="113.74715604373807" y="677.4198048912987" as="sourcePoint"/><mxPoint x="136.24590239688774" y="737.5827889116747" as="targetPoint"/></mxGeometry></mxCell><mxCell id="189" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="28" target="103" edge="1"><mxGeometry x="580" y="249" width="100" height="100" as="geometry"><mxPoint x="123.74715604373807" y="687.4198048912987" as="sourcePoint"/><mxPoint x="146.24590239688774" y="747.5827889116747" as="targetPoint"/></mxGeometry></mxCell><mxCell id="190" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="64" target="104" edge="1"><mxGeometry x="590" y="259" width="100" height="100" as="geometry"><mxPoint x="133.74715604373807" y="697.4198048912987" as="sourcePoint"/><mxPoint x="156.24590239688774" y="757.5827889116747" as="targetPoint"/></mxGeometry></mxCell><mxCell id="191" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="72" target="106" edge="1"><mxGeometry x="600" y="269" width="100" height="100" as="geometry"><mxPoint x="143.74715604373807" y="707.4198048912987" as="sourcePoint"/><mxPoint x="166.24590239688774" y="767.5827889116747" as="targetPoint"/></mxGeometry></mxCell><mxCell id="192" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="63" target="105" edge="1"><mxGeometry x="610" y="279" width="100" height="100" as="geometry"><mxPoint x="153.74715604373807" y="717.4198048912987" as="sourcePoint"/><mxPoint x="176.24590239688774" y="777.5827889116747" as="targetPoint"/></mxGeometry></mxCell><mxCell id="193" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="75" target="106" edge="1"><mxGeometry x="620" y="289" width="100" height="100" as="geometry"><mxPoint x="774.0799999999998" y="639" as="sourcePoint"/><mxPoint x="774.0799999999998" y="696" as="targetPoint"/></mxGeometry></mxCell><mxCell id="194" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="75" target="107" edge="1"><mxGeometry x="630" y="299" width="100" height="100" as="geometry"><mxPoint x="784.0799999999998" y="649" as="sourcePoint"/><mxPoint x="784.0799999999998" y="706" as="targetPoint"/></mxGeometry></mxCell><mxCell id="195" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="76" target="107" edge="1"><mxGeometry x="640" y="309" width="100" height="100" as="geometry"><mxPoint x="794.0799999999998" y="659" as="sourcePoint"/><mxPoint x="794.0799999999998" y="716" as="targetPoint"/></mxGeometry></mxCell><mxCell id="196" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="77" target="108" edge="1"><mxGeometry x="650" y="319" width="100" height="100" as="geometry"><mxPoint x="804.0799999999998" y="669" as="sourcePoint"/><mxPoint x="804.0799999999998" y="726" as="targetPoint"/></mxGeometry></mxCell><mxCell id="197" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="78" target="108" edge="1"><mxGeometry x="660" y="329" width="100" height="100" as="geometry"><mxPoint x="814.0799999999998" y="679" as="sourcePoint"/><mxPoint x="814.0799999999998" y="736" as="targetPoint"/></mxGeometry></mxCell><mxCell id="199" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="81" target="83" edge="1"><mxGeometry x="530" y="248.99999999999994" width="100" height="100" as="geometry"><mxPoint x="73.74715604373807" y="687.4198048912987" as="sourcePoint"/><mxPoint x="96.24590239688774" y="747.5827889116747" as="targetPoint"/></mxGeometry></mxCell><mxCell id="200" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="82" target="83" edge="1"><mxGeometry x="540" y="258.99999999999994" width="100" height="100" as="geometry"><mxPoint x="83.74715604373807" y="697.4198048912987" as="sourcePoint"/><mxPoint x="106.24590239688774" y="757.5827889116747" as="targetPoint"/></mxGeometry></mxCell><mxCell id="201" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="103" target="110" edge="1"><mxGeometry x="550" y="268.99999999999994" width="100" height="100" as="geometry"><mxPoint x="93.74715604373807" y="707.4198048912987" as="sourcePoint"/><mxPoint x="116.24590239688774" y="767.5827889116747" as="targetPoint"/></mxGeometry></mxCell><mxCell id="202" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="104" target="110" edge="1"><mxGeometry x="560" y="278.99999999999994" width="100" height="100" as="geometry"><mxPoint x="103.74715604373807" y="717.4198048912987" as="sourcePoint"/><mxPoint x="126.24590239688774" y="777.5827889116747" as="targetPoint"/></mxGeometry></mxCell><mxCell id="203" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="106" target="109" edge="1"><mxGeometry x="570" y="288.99999999999994" width="100" height="100" as="geometry"><mxPoint x="583.6012993907641" y="792.7543010758849" as="sourcePoint"/><mxPoint x="548.3234734589224" y="854.2939214468859" as="targetPoint"/></mxGeometry></mxCell><mxCell id="204" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" source="107" target="109" edge="1"><mxGeometry x="580" y="298.99999999999994" width="100" height="100" as="geometry"><mxPoint x="593.6012993907641" y="802.7543010758849" as="sourcePoint"/><mxPoint x="558.3234734589224" y="864.2939214468859" as="targetPoint"/></mxGeometry></mxCell><mxCell id="205" value="" style="ellipse;fillColor=#FF0000;gradientColor=#FF9900;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="385" y="841" width="50" height="50" as="geometry"/></mxCell><mxCell id="206" value="" style="ellipse;fillColor=#FFFFFF;gradientColor=none;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="390" y="846" width="40" height="40" as="geometry"/></mxCell><mxCell id="207" value="" style="ellipse;fillColor=#FF0000;gradientColor=#FF9900;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="500.92000000000013" y="960" width="50" height="50" as="geometry"/></mxCell><mxCell id="208" value="" style="ellipse;fillColor=#FFFFFF;gradientColor=none;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="505.92000000000013" y="965" width="40" height="40" as="geometry"/></mxCell><mxCell id="209" value="" style="ellipse;fillColor=#FF0000;gradientColor=#FF9900;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="739.0799999999998" y="841" width="50" height="50" as="geometry"/></mxCell><mxCell id="210" value="" style="ellipse;fillColor=#FFFFFF;gradientColor=none;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="744.0799999999998" y="846" width="40" height="40" as="geometry"/></mxCell><mxCell id="211" value="" style="ellipse;fillColor=#FF0000;gradientColor=#FF9900;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="889.0799999999999" y="960" width="50" height="50" as="geometry"/></mxCell><mxCell id="212" value="" style="ellipse;fillColor=#FFFFFF;gradientColor=none;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="894.0799999999999" y="965" width="40" height="40" as="geometry"/></mxCell><mxCell id="213" value="" style="ellipse;fillColor=#FF0000;gradientColor=#FF9900;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1140" y="841" width="50" height="50" as="geometry"/></mxCell><mxCell id="214" value="" style="ellipse;fillColor=#FFFFFF;gradientColor=none;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1145" y="846" width="40" height="40" as="geometry"/></mxCell><mxCell id="215" value="" style="ellipse;fillColor=#FF0000;gradientColor=#FF9900;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1254.9999999999998" y="736" width="50" height="50" as="geometry"/></mxCell><mxCell id="216" value="" style="ellipse;fillColor=#FFFFFF;gradientColor=none;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="1259.9999999999998" y="741" width="40" height="40" as="geometry"/></mxCell><mxCell id="217" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="83" target="84" edge="1"><mxGeometry x="600" y="269" width="100" height="100" as="geometry"><mxPoint x="595.9200000000001" y="638.9999999999999" as="sourcePoint"/><mxPoint x="595.9200000000001" y="746" as="targetPoint"/></mxGeometry></mxCell><mxCell id="218" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="102" target="205" edge="1"><mxGeometry x="610" y="279" width="100" height="100" as="geometry"><mxPoint x="605.9200000000001" y="648.9999999999999" as="sourcePoint"/><mxPoint x="605.9200000000001" y="756" as="targetPoint"/></mxGeometry></mxCell><mxCell id="219" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="110" target="207" edge="1"><mxGeometry x="620" y="289" width="100" height="100" as="geometry"><mxPoint x="615.9200000000001" y="658.9999999999999" as="sourcePoint"/><mxPoint x="615.9200000000001" y="766" as="targetPoint"/></mxGeometry></mxCell><mxCell id="220" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="105" target="209" edge="1"><mxGeometry x="630" y="299" width="100" height="100" as="geometry"><mxPoint x="625.9200000000001" y="668.9999999999999" as="sourcePoint"/><mxPoint x="625.9200000000001" y="776" as="targetPoint"/></mxGeometry></mxCell><mxCell id="221" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="109" target="211" edge="1"><mxGeometry x="640" y="309" width="100" height="100" as="geometry"><mxPoint x="635.9200000000001" y="678.9999999999999" as="sourcePoint"/><mxPoint x="635.9200000000001" y="786" as="targetPoint"/></mxGeometry></mxCell><mxCell id="222" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="108" target="213" edge="1"><mxGeometry x="650" y="319" width="100" height="100" as="geometry"><mxPoint x="645.9200000000001" y="688.9999999999999" as="sourcePoint"/><mxPoint x="645.9200000000001" y="796" as="targetPoint"/></mxGeometry></mxCell><mxCell id="223" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" source="79" target="215" edge="1"><mxGeometry x="660" y="329" width="100" height="100" as="geometry"><mxPoint x="655.9200000000001" y="698.9999999999999" as="sourcePoint"/><mxPoint x="655.9200000000001" y="806" as="targetPoint"/></mxGeometry></mxCell><mxCell id="224" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=4" parent="1" vertex="1"><mxGeometry x="20.000000000000224" y="294.99999999999994" width="50" height="50" as="geometry"/></mxCell><mxCell id="225" value="" style="triangle;direction=east;rotation=270;gradientColor=#880000;fillColor=#FF0000;gradientDirection=north;strokeColor=#FFFF00;strokeWidth=4" parent="1" vertex="1"><mxGeometry x="20.000000000000227" y="74.99999999999982" width="50" height="50" as="geometry"/></mxCell><mxCell id="226" value="" style="strokeColor=#FFFF00;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="20.000000000000114" y="144.99999999999983" width="50" height="50" as="geometry"/></mxCell><mxCell id="227" value="" style="shape=hexagon;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="20.00000000000017" y="219.9999999999999" width="50" height="50" as="geometry"/></mxCell><mxCell id="228" value="" style="ellipse;fillColor=#FF0000;gradientColor=#880000;gradientDirection=west;strokeColor=#FFFF00;strokeWidth=2" parent="1" vertex="1"><mxGeometry x="20" y="14.999999999999986" width="50" height="50" as="geometry"/></mxCell><mxCell id="229" value="safe state" style="text;verticalAlign=middle;fontSize=24;fontStyle=1" parent="1" vertex="1"><mxGeometry x="80" y="17.50000000000007" width="208.33333333333331" height="44.99999999999983" as="geometry"/></mxCell><mxCell id="230" value="deadlock state" style="text;verticalAlign=middle;fontSize=24;fontStyle=1" parent="1" vertex="1"><mxGeometry x="79.99999999999999" y="77.50000000000009" width="270" height="44.99999999999983" as="geometry"/></mxCell><mxCell id="231" value="forbidden state" style="text;verticalAlign=middle;fontSize=24;fontStyle=1" parent="1" vertex="1"><mxGeometry x="85.91999999999994" y="147.49999999999994" width="270" height="44.99999999999983" as="geometry"/></mxCell><mxCell id="232" value="unsafe state" style="text;verticalAlign=middle;fontSize=24;fontStyle=1" parent="1" vertex="1"><mxGeometry x="85.91999999999997" y="222.5" width="270" height="44.99999999999983" as="geometry"/></mxCell><mxCell id="233" value="terminal state" style="text;verticalAlign=middle;fontSize=24;fontStyle=1" parent="1" vertex="1"><mxGeometry x="85.91999999999996" y="297.5000000000001" width="270" height="44.99999999999983" as="geometry"/></mxCell><mxCell id="234" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" parent="1" edge="1"><mxGeometry x="835.8264567335628" y="-49.94246064490471" width="100" height="100" as="geometry"><mxPoint x="950" y="40" as="sourcePoint"/><mxPoint x="1040" y="40" as="targetPoint"/></mxGeometry></mxCell><mxCell id="235" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=1;gradientColor=#880000" parent="1" edge="1"><mxGeometry x="840.8264567335626" y="21.957539355095193" width="100" height="100" as="geometry"><mxPoint x="954.9999999999998" y="111.8999999999999" as="sourcePoint"/><mxPoint x="1044.9999999999998" y="111.8999999999999" as="targetPoint"/></mxGeometry></mxCell><mxCell id="236" value="controllable&#xa;transition" style="text;verticalAlign=middle;fontSize=24;fontStyle=1" parent="1" vertex="1"><mxGeometry x="1060.8333333333335" y="14.999999999999986" width="208.33333333333331" height="44.99999999999983" as="geometry"/></mxCell><mxCell id="237" value="uncontrollable&#xa;transition" style="text;verticalAlign=middle;fontSize=24;fontStyle=1" parent="1" vertex="1"><mxGeometry x="1069.9999999999998" y="90" width="208.33333333333331" height="44.99999999999983" as="geometry"/></mxCell><mxCell id="238" value="" style="edgeStyle=none;strokeWidth=3;fillColor=#000000;endArrow=block;strokeColor=#FFFF00;dashed=0;gradientColor=#880000" edge="1" parent="1"><mxGeometry x="921.7572449417013" y="286.9999999999999" width="100" height="100" as="geometry"><mxPoint x="1045.8372449417009" y="506.99999999999994" as="sourcePoint"/><mxPoint x="1045.8372449417009" y="579" as="targetPoint"/></mxGeometry></mxCell></root></mxGraphModel>
\ No newline at end of file
diff --git a/public/assets/plugins/ui-select/select.min.css b/public/assets/plugins/ui-select/select.min.css
new file mode 100644
index 0000000..c871a75
--- /dev/null
+++ b/public/assets/plugins/ui-select/select.min.css
@@ -0,0 +1,221 @@
+/*!
+ * ui-select
+ * http://github.com/angular-ui/ui-select
+ * Version: 0.11.2 - 2015-03-17T04:08:46.478Z
+ * License: MIT
+ */
+
+
+/* Style when highlighting a search. */
+.ui-select-highlight {
+  font-weight: bold;
+}
+
+.ui-select-offscreen {
+  clip: rect(0 0 0 0) !important;
+  width: 1px !important;
+  height: 1px !important;
+  border: 0 !important;
+  margin: 0 !important;
+  padding: 0 !important;
+  overflow: hidden !important;
+  position: absolute !important;
+  outline: 0 !important;
+  left: 0px !important;
+  top: 0px !important;
+}
+
+/* Select2 theme */
+
+/* Mark invalid Select2 */
+.ng-dirty.ng-invalid > a.select2-choice {
+    border-color: #D44950;
+}
+
+.select2-result-single {
+  padding-left: 0;
+}
+
+.select2-locked > .select2-search-choice-close{
+  display:none;
+}
+
+.select-locked > .ui-select-match-close{
+    display:none;
+}
+
+body > .select2-container.open {
+  z-index: 9999; /* The z-index Select2 applies to the select2-drop */
+}
+
+/* Selectize theme */
+
+/* Helper class to show styles when focus */
+.selectize-input.selectize-focus{
+  border-color: #007FBB !important;
+}
+
+/* Fix input width for Selectize theme */
+.selectize-control > .selectize-input > input {
+  width: 100%;
+}
+
+/* Fix dropdown width for Selectize theme */
+.selectize-control > .selectize-dropdown {
+  width: 100%;
+}
+
+/* Mark invalid Selectize */
+.ng-dirty.ng-invalid > div.selectize-input {
+    border-color: #D44950;
+}
+
+
+/* Bootstrap theme */
+
+/* Helper class to show styles when focus */
+.btn-default-focus {
+  color: #333;
+  background-color: #EBEBEB;
+  border-color: #ADADAD;
+  text-decoration: none;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);
+}
+
+.ui-select-bootstrap .ui-select-toggle {
+  position: relative;
+}
+
+.ui-select-bootstrap .ui-select-toggle > .caret {
+  position: absolute;
+  height: 10px;
+  top: 50%;
+  right: 10px;
+  margin-top: -2px;
+}
+
+/* Fix Bootstrap dropdown position when inside a input-group */
+.input-group > .ui-select-bootstrap.dropdown {
+  /* Instead of relative */
+  position: static;
+}
+
+.input-group > .ui-select-bootstrap > input.ui-select-search.form-control {
+  border-radius: 4px; /* FIXME hardcoded value :-/ */
+  border-top-right-radius: 0;
+  border-bottom-right-radius: 0;
+}
+
+.ui-select-bootstrap > .ui-select-match > .btn{
+  /* Instead of center because of .btn */
+  text-align: left !important;
+}
+
+.ui-select-bootstrap > .ui-select-match > .caret {
+  position: absolute;
+  top: 45%;
+  right: 15px;
+}
+
+/* See Scrollable Menu with Bootstrap 3 http://stackoverflow.com/questions/19227496 */
+.ui-select-bootstrap > .ui-select-choices {
+  width: 100%;
+  height: auto;
+  max-height: 200px;
+  overflow-x: hidden;
+  margin-top: -1px;
+}
+
+body > .ui-select-bootstrap.open {
+  z-index: 1000; /* Standard Bootstrap dropdown z-index */
+}
+
+.ui-select-multiple.ui-select-bootstrap {
+  height: auto;
+  padding: 3px 3px 0 3px;
+}
+
+.ui-select-multiple.ui-select-bootstrap input.ui-select-search {
+  background-color: transparent !important; /* To prevent double background when disabled */
+  border: none;
+  outline: none;
+  height: 1.666666em;
+  margin-bottom: 3px;
+}
+
+.ui-select-multiple.ui-select-bootstrap .ui-select-match .close {
+  font-size: 1.6em;
+  line-height: 0.75;
+}
+
+.ui-select-multiple.ui-select-bootstrap .ui-select-match-item {
+  outline: 0;
+  margin: 0 3px 3px 0;
+}
+
+.ui-select-multiple .ui-select-match-item {
+  position: relative;
+}
+
+.ui-select-multiple .ui-select-match-item.dropping-before:before {
+  content: "";
+  position: absolute;
+  top: 0;
+  right: 100%;
+  height: 100%;
+  margin-right: 2px;
+  border-left: 1px solid #428bca;
+}
+
+.ui-select-multiple .ui-select-match-item.dropping-after:after {
+  content: "";
+  position: absolute;
+  top: 0;
+  left: 100%;
+  height: 100%;
+  margin-left: 2px;
+  border-right: 1px solid #428bca;
+}
+
+.ui-select-bootstrap .ui-select-choices-row>a {
+    display: block;
+    padding: 3px 20px;
+    clear: both;
+    font-weight: 400;
+    line-height: 1.42857143;
+    color: #333;
+    white-space: nowrap;
+}
+
+.ui-select-bootstrap .ui-select-choices-row>a:hover, .ui-select-bootstrap .ui-select-choices-row>a:focus {
+    text-decoration: none;
+    color: #262626;
+    background-color: #f5f5f5;
+}
+
+.ui-select-bootstrap .ui-select-choices-row.active>a {
+    color: #fff;
+    text-decoration: none;
+    outline: 0;
+    background-color: #428bca;
+}
+
+.ui-select-bootstrap .ui-select-choices-row.disabled>a,
+.ui-select-bootstrap .ui-select-choices-row.active.disabled>a {
+    color: #777;
+    cursor: not-allowed;
+    background-color: #fff;
+}
+
+/* fix hide/show angular animation */
+.ui-select-match.ng-hide-add,
+.ui-select-search.ng-hide-add {
+    display: none !important;
+}
+
+/* Mark invalid Bootstrap */
+.ui-select-bootstrap.ng-dirty.ng-invalid > button.btn.ui-select-match {
+    border-color: #D44950;
+}
diff --git a/public/assets/plugins/ui-select/select.min.js b/public/assets/plugins/ui-select/select.min.js
new file mode 100644
index 0000000..9bff03f
--- /dev/null
+++ b/public/assets/plugins/ui-select/select.min.js
@@ -0,0 +1,2050 @@
+/*!
+ * ui-select
+ * http://github.com/angular-ui/ui-select
+ * Version: 0.11.2 - 2015-03-17T04:08:46.474Z
+ * License: MIT
+ */
+
+
+(function() {
+  'use strict';
+
+  var KEY = {
+    TAB: 9,
+    ENTER: 13,
+    ESC: 27,
+    SPACE: 32,
+    LEFT: 37,
+    UP: 38,
+    RIGHT: 39,
+    DOWN: 40,
+    SHIFT: 16,
+    CTRL: 17,
+    ALT: 18,
+    PAGE_UP: 33,
+    PAGE_DOWN: 34,
+    HOME: 36,
+    END: 35,
+    BACKSPACE: 8,
+    DELETE: 46,
+    COMMAND: 91,
+
+    MAP: {
+      91: "COMMAND",
+      8: "BACKSPACE",
+      9: "TAB",
+      13: "ENTER",
+      16: "SHIFT",
+      17: "CTRL",
+      18: "ALT",
+      19: "PAUSEBREAK",
+      20: "CAPSLOCK",
+      27: "ESC",
+      32: "SPACE",
+      33: "PAGE_UP",
+      34: "PAGE_DOWN",
+      35: "END",
+      36: "HOME",
+      37: "LEFT",
+      38: "UP",
+      39: "RIGHT",
+      40: "DOWN",
+      43: "+",
+      44: "PRINTSCREEN",
+      45: "INSERT",
+      46: "DELETE",
+      48: "0",
+      49: "1",
+      50: "2",
+      51: "3",
+      52: "4",
+      53: "5",
+      54: "6",
+      55: "7",
+      56: "8",
+      57: "9",
+      59: ";",
+      61: "=",
+      65: "A",
+      66: "B",
+      67: "C",
+      68: "D",
+      69: "E",
+      70: "F",
+      71: "G",
+      72: "H",
+      73: "I",
+      74: "J",
+      75: "K",
+      76: "L",
+      77: "M",
+      78: "N",
+      79: "O",
+      80: "P",
+      81: "Q",
+      82: "R",
+      83: "S",
+      84: "T",
+      85: "U",
+      86: "V",
+      87: "W",
+      88: "X",
+      89: "Y",
+      90: "Z",
+      96: "0",
+      97: "1",
+      98: "2",
+      99: "3",
+      100: "4",
+      101: "5",
+      102: "6",
+      103: "7",
+      104: "8",
+      105: "9",
+      106: "*",
+      107: "+",
+      109: "-",
+      110: ".",
+      111: "/",
+      112: "F1",
+      113: "F2",
+      114: "F3",
+      115: "F4",
+      116: "F5",
+      117: "F6",
+      118: "F7",
+      119: "F8",
+      120: "F9",
+      121: "F10",
+      122: "F11",
+      123: "F12",
+      144: "NUMLOCK",
+      145: "SCROLLLOCK",
+      186: ";",
+      187: "=",
+      188: ",",
+      189: "-",
+      190: ".",
+      191: "/",
+      192: "`",
+      219: "[",
+      220: "\\",
+      221: "]",
+      222: "'"
+    },
+
+    isControl: function(e) {
+      var k = e.which;
+      switch (k) {
+        case KEY.COMMAND:
+        case KEY.SHIFT:
+        case KEY.CTRL:
+        case KEY.ALT:
+          return true;
+      }
+
+      if (e.metaKey) return true;
+
+      return false;
+    },
+    isFunctionKey: function(k) {
+      k = k.which ? k.which : k;
+      return k >= 112 && k <= 123;
+    },
+    isVerticalMovement: function(k) {
+      return ~[KEY.UP, KEY.DOWN].indexOf(k);
+    },
+    isHorizontalMovement: function(k) {
+      return ~[KEY.LEFT, KEY.RIGHT, KEY.BACKSPACE, KEY.DELETE].indexOf(k);
+    }
+  };
+
+  /**
+   * Add querySelectorAll() to jqLite.
+   *
+   * jqLite find() is limited to lookups by tag name.
+   * TODO This will change with future versions of AngularJS, to be removed when this happens
+   *
+   * See jqLite.find - why not use querySelectorAll? https://github.com/angular/angular.js/issues/3586
+   * See feat(jqLite): use querySelectorAll instead of getElementsByTagName in jqLite.find https://github.com/angular/angular.js/pull/3598
+   */
+  if (angular.element.prototype.querySelectorAll === undefined) {
+    angular.element.prototype.querySelectorAll = function(selector) {
+      return angular.element(this[0].querySelectorAll(selector));
+    };
+  }
+
+  /**
+   * Add closest() to jqLite.
+   */
+  if (angular.element.prototype.closest === undefined) {
+    angular.element.prototype.closest = function(selector) {
+      var elem = this[0];
+      var matchesSelector = elem.matches || elem.webkitMatchesSelector ||
+        elem.mozMatchesSelector || elem.msMatchesSelector;
+
+      while (elem) {
+        if (matchesSelector.bind(elem)(selector)) {
+          return elem;
+        } else {
+          elem = elem.parentElement;
+        }
+      }
+      return false;
+    };
+  }
+
+  var latestId = 0;
+
+  var uis = angular.module('ui.select', [])
+
+  .constant('uiSelectConfig', {
+    theme: 'bootstrap',
+    searchEnabled: true,
+    sortable: false,
+    placeholder: '', // Empty by default, like HTML tag <select>
+    refreshDelay: 1000, // In milliseconds
+    closeOnSelect: true,
+    generateId: function() {
+      return latestId++;
+    },
+    appendToBody: false
+  })
+
+  // See Rename minErr and make it accessible from outside https://github.com/angular/angular.js/issues/6913
+  .service('uiSelectMinErr', function() {
+    var minErr = angular.$$minErr('ui.select');
+    return function() {
+      var error = minErr.apply(this, arguments);
+      var message = error.message.replace(new RegExp(
+        '\nhttp://errors.angularjs.org/.*'), '');
+      return new Error(message);
+    };
+  })
+
+  // Recreates old behavior of ng-transclude. Used internally.
+  .directive('uisTranscludeAppend', function() {
+    return {
+      link: function(scope, element, attrs, ctrl, transclude) {
+        transclude(scope, function(clone) {
+          element.append(clone);
+        });
+      }
+    };
+  })
+
+  /**
+   * Highlights text that matches $select.search.
+   *
+   * Taken from AngularUI Bootstrap Typeahead
+   * See https://github.com/angular-ui/bootstrap/blob/0.10.0/src/typeahead/typeahead.js#L340
+   */
+  .filter('highlight', function() {
+    function escapeRegexp(queryToEscape) {
+      return queryToEscape.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
+    }
+
+    return function(matchItem, query) {
+      return query && matchItem ? matchItem.replace(new RegExp(
+          escapeRegexp(query), 'gi'),
+        '<span class="ui-select-highlight">$&</span>') : matchItem;
+    };
+  })
+
+  /**
+   * A read-only equivalent of jQuery's offset function: http://api.jquery.com/offset/
+   *
+   * Taken from AngularUI Bootstrap Position:
+   * See https://github.com/angular-ui/bootstrap/blob/master/src/position/position.js#L70
+   */
+  .factory('uisOffset', ['$document', '$window',
+    function($document, $window) {
+
+      return function(element) {
+        var boundingClientRect = element[0].getBoundingClientRect();
+        return {
+          width: boundingClientRect.width || element.prop('offsetWidth'),
+          height: boundingClientRect.height || element.prop(
+            'offsetHeight'),
+          top: boundingClientRect.top + ($window.pageYOffset ||
+            $document[0].documentElement.scrollTop),
+          left: boundingClientRect.left + ($window.pageXOffset ||
+            $document[0].documentElement.scrollLeft)
+        };
+      };
+    }
+  ]);
+
+  uis.directive('uiSelectChoices', ['uiSelectConfig', 'uisRepeatParser',
+    'uiSelectMinErr', '$compile',
+    function(uiSelectConfig, RepeatParser, uiSelectMinErr, $compile) {
+
+      return {
+        restrict: 'EA',
+        require: '^uiSelect',
+        replace: true,
+        transclude: true,
+        templateUrl: function(tElement) {
+          // Gets theme attribute from parent (ui-select)
+          var theme = tElement.parent().attr('theme') || uiSelectConfig
+            .theme;
+          return theme + '/choices.tpl.html';
+        },
+
+        compile: function(tElement, tAttrs) {
+
+          if (!tAttrs.repeat) throw uiSelectMinErr('repeat',
+            "Expected 'repeat' expression.");
+
+          return function link(scope, element, attrs, $select,
+            transcludeFn) {
+
+            // var repeat = RepeatParser.parse(attrs.repeat);
+            var groupByExp = attrs.groupBy;
+
+            $select.parseRepeatAttr(attrs.repeat, groupByExp); //Result ready at $select.parserResult
+
+            $select.disableChoiceExpression = attrs.uiDisableChoice;
+            $select.onHighlightCallback = attrs.onHighlight;
+
+            if (groupByExp) {
+              var groups = element.querySelectorAll(
+                '.ui-select-choices-group');
+              if (groups.length !== 1) throw uiSelectMinErr('rows',
+                "Expected 1 .ui-select-choices-group but got '{0}'.",
+                groups.length);
+              groups.attr('ng-repeat', RepeatParser.getGroupNgRepeatExpression());
+            }
+
+            var choices = element.querySelectorAll(
+              '.ui-select-choices-row');
+            if (choices.length !== 1) {
+              throw uiSelectMinErr('rows',
+                "Expected 1 .ui-select-choices-row but got '{0}'.",
+                choices.length);
+            }
+
+            choices.attr('ng-repeat', RepeatParser.getNgRepeatExpression(
+                $select.parserResult.itemName, '$select.items',
+                $select.parserResult.trackByExp, groupByExp))
+              .attr('ng-if', '$select.open') //Prevent unnecessary watches when dropdown is closed
+              .attr('ng-mouseenter', '$select.setActiveItem(' +
+                $select.parserResult.itemName + ')')
+              .attr('ng-click', '$select.select(' + $select.parserResult
+                .itemName + ',false,$event)');
+
+            var rowsInner = element.querySelectorAll(
+              '.ui-select-choices-row-inner');
+            if (rowsInner.length !== 1) throw uiSelectMinErr('rows',
+              "Expected 1 .ui-select-choices-row-inner but got '{0}'.",
+              rowsInner.length);
+            rowsInner.attr('uis-transclude-append', ''); //Adding uisTranscludeAppend directive to row element after choices element has ngRepeat
+
+            $compile(element, transcludeFn)(scope); //Passing current transcludeFn to be able to append elements correctly from uisTranscludeAppend
+
+            scope.$watch('$select.search', function(newValue) {
+              if (newValue && !$select.open && $select.multiple)
+                $select.activate(false, true);
+              $select.activeIndex = $select.tagging.isActivated ?
+                -1 : 0;
+              $select.refresh(attrs.refresh);
+            });
+
+            attrs.$observe('refreshDelay', function() {
+              // $eval() is needed otherwise we get a string instead of a number
+              var refreshDelay = scope.$eval(attrs.refreshDelay);
+              $select.refreshDelay = refreshDelay !== undefined ?
+                refreshDelay : uiSelectConfig.refreshDelay;
+            });
+          };
+        }
+      };
+    }
+  ]);
+
+  /**
+   * Contains ui-select "intelligence".
+   *
+   * The goal is to limit dependency on the DOM whenever possible and
+   * put as much logic in the controller (instead of the link functions) as possible so it can be easily tested.
+   */
+  uis.controller('uiSelectCtrl', ['$scope', '$element', '$timeout', '$filter',
+    'uisRepeatParser', 'uiSelectMinErr', 'uiSelectConfig',
+    function($scope, $element, $timeout, $filter, RepeatParser,
+      uiSelectMinErr, uiSelectConfig) {
+
+      var ctrl = this;
+
+      var EMPTY_SEARCH = '';
+
+      ctrl.placeholder = uiSelectConfig.placeholder;
+      ctrl.searchEnabled = uiSelectConfig.searchEnabled;
+      ctrl.sortable = uiSelectConfig.sortable;
+      ctrl.refreshDelay = uiSelectConfig.refreshDelay;
+
+      ctrl.removeSelected = false; //If selected item(s) should be removed from dropdown list
+      ctrl.closeOnSelect = true; //Initialized inside uiSelect directive link function
+      ctrl.search = EMPTY_SEARCH;
+
+      ctrl.activeIndex = 0; //Dropdown of choices
+      ctrl.items = []; //All available choices
+
+      ctrl.open = false;
+      ctrl.focus = false;
+      ctrl.disabled = false;
+      ctrl.selected = undefined;
+
+      ctrl.focusser = undefined; //Reference to input element used to handle focus events
+      ctrl.resetSearchInput = true;
+      ctrl.multiple = undefined; // Initialized inside uiSelect directive link function
+      ctrl.disableChoiceExpression = undefined; // Initialized inside uiSelectChoices directive link function
+      ctrl.tagging = {
+        isActivated: false,
+        fct: undefined
+      };
+      ctrl.taggingTokens = {
+        isActivated: false,
+        tokens: undefined
+      };
+      ctrl.lockChoiceExpression = undefined; // Initialized inside uiSelectMatch directive link function
+      ctrl.clickTriggeredSelect = false;
+      ctrl.$filter = $filter;
+
+      ctrl.searchInput = $element.querySelectorAll(
+        'input.ui-select-search');
+      if (ctrl.searchInput.length !== 1) {
+        throw uiSelectMinErr('searchInput',
+          "Expected 1 input.ui-select-search but got '{0}'.", ctrl.searchInput
+          .length);
+      }
+
+      ctrl.isEmpty = function() {
+        return angular.isUndefined(ctrl.selected) || ctrl.selected ===
+          null || ctrl.selected === '';
+      };
+
+      // Most of the time the user does not want to empty the search input when in typeahead mode
+      function _resetSearchInput() {
+        if (ctrl.resetSearchInput || (ctrl.resetSearchInput === undefined &&
+            uiSelectConfig.resetSearchInput)) {
+          ctrl.search = EMPTY_SEARCH;
+          //reset activeIndex
+          if (ctrl.selected && ctrl.items.length && !ctrl.multiple) {
+            ctrl.activeIndex = ctrl.items.indexOf(ctrl.selected);
+          }
+        }
+      }
+
+      // When the user clicks on ui-select, displays the dropdown list
+      ctrl.activate = function(initSearchValue, avoidReset) {
+        if (!ctrl.disabled && !ctrl.open) {
+          if (!avoidReset) _resetSearchInput();
+
+          $scope.$broadcast('uis:activate');
+
+          ctrl.open = true;
+
+          ctrl.activeIndex = ctrl.activeIndex >= ctrl.items.length ? 0 :
+            ctrl.activeIndex;
+
+          // ensure that the index is set to zero for tagging variants
+          // that where first option is auto-selected
+          if (ctrl.activeIndex === -1 && ctrl.taggingLabel !== false) {
+            ctrl.activeIndex = 0;
+          }
+
+          // Give it time to appear before focus
+          $timeout(function() {
+            ctrl.search = initSearchValue || ctrl.search;
+            ctrl.searchInput[0].focus();
+          });
+        }
+      };
+
+      ctrl.findGroupByName = function(name) {
+        return ctrl.groups && ctrl.groups.filter(function(group) {
+          return group.name === name;
+        })[0];
+      };
+
+      ctrl.parseRepeatAttr = function(repeatAttr, groupByExp) {
+        function updateGroups(items) {
+          ctrl.groups = [];
+          angular.forEach(items, function(item) {
+            var groupFn = $scope.$eval(groupByExp);
+            var groupName = angular.isFunction(groupFn) ? groupFn(
+              item) : item[groupFn];
+            var group = ctrl.findGroupByName(groupName);
+            if (group) {
+              group.items.push(item);
+            } else {
+              ctrl.groups.push({
+                name: groupName,
+                items: [item]
+              });
+            }
+          });
+          ctrl.items = [];
+          ctrl.groups.forEach(function(group) {
+            ctrl.items = ctrl.items.concat(group.items);
+          });
+        }
+
+        function setPlainItems(items) {
+          ctrl.items = items;
+        }
+
+        ctrl.setItemsFn = groupByExp ? updateGroups : setPlainItems;
+
+        ctrl.parserResult = RepeatParser.parse(repeatAttr);
+
+        ctrl.isGrouped = !!groupByExp;
+        ctrl.itemProperty = ctrl.parserResult.itemName;
+
+        ctrl.refreshItems = function(data) {
+          data = data || ctrl.parserResult.source($scope);
+          var selectedItems = ctrl.selected;
+          //TODO should implement for single mode removeSelected
+          if ((angular.isArray(selectedItems) && !selectedItems.length) ||
+            !ctrl.removeSelected) {
+            ctrl.setItemsFn(data);
+          } else {
+            if (data !== undefined) {
+              var filteredItems = data.filter(function(i) {
+                return selectedItems.indexOf(i) < 0;
+              });
+              ctrl.setItemsFn(filteredItems);
+            }
+          }
+        };
+
+        // See https://github.com/angular/angular.js/blob/v1.2.15/src/ng/directive/ngRepeat.js#L259
+        $scope.$watchCollection(ctrl.parserResult.source, function(
+          items) {
+          if (items === undefined || items === null) {
+            // If the user specifies undefined or null => reset the collection
+            // Special case: items can be undefined if the user did not initialized the collection on the scope
+            // i.e $scope.addresses = [] is missing
+            ctrl.items = [];
+          } else {
+            if (!angular.isArray(items)) {
+              throw uiSelectMinErr('items',
+                "Expected an array but got '{0}'.", items);
+            } else {
+              //Remove already selected items (ex: while searching)
+              //TODO Should add a test
+              ctrl.refreshItems(items);
+              ctrl.ngModel.$modelValue = null; //Force scope model value and ngModel value to be out of sync to re-run formatters
+            }
+          }
+        });
+
+      };
+
+      var _refreshDelayPromise;
+
+      /**
+       * Typeahead mode: lets the user refresh the collection using his own function.
+       *
+       * See Expose $select.search for external / remote filtering https://github.com/angular-ui/ui-select/pull/31
+       */
+      ctrl.refresh = function(refreshAttr) {
+        if (refreshAttr !== undefined) {
+
+          // Debounce
+          // See https://github.com/angular-ui/bootstrap/blob/0.10.0/src/typeahead/typeahead.js#L155
+          // FYI AngularStrap typeahead does not have debouncing: https://github.com/mgcrea/angular-strap/blob/v2.0.0-rc.4/src/typeahead/typeahead.js#L177
+          if (_refreshDelayPromise) {
+            $timeout.cancel(_refreshDelayPromise);
+          }
+          _refreshDelayPromise = $timeout(function() {
+            $scope.$eval(refreshAttr);
+          }, ctrl.refreshDelay);
+        }
+      };
+
+      ctrl.setActiveItem = function(item) {
+        ctrl.activeIndex = ctrl.items.indexOf(item);
+      };
+
+      ctrl.isActive = function(itemScope) {
+        if (!ctrl.open) {
+          return false;
+        }
+        var itemIndex = ctrl.items.indexOf(itemScope[ctrl.itemProperty]);
+        var isActive = itemIndex === ctrl.activeIndex;
+
+        if (!isActive || (itemIndex < 0 && ctrl.taggingLabel !== false) ||
+          (itemIndex < 0 && ctrl.taggingLabel === false)) {
+          return false;
+        }
+
+        if (isActive && !angular.isUndefined(ctrl.onHighlightCallback)) {
+          itemScope.$eval(ctrl.onHighlightCallback);
+        }
+
+        return isActive;
+      };
+
+      ctrl.isDisabled = function(itemScope) {
+
+        if (!ctrl.open) return;
+
+        var itemIndex = ctrl.items.indexOf(itemScope[ctrl.itemProperty]);
+        var isDisabled = false;
+        var item;
+
+        if (itemIndex >= 0 && !angular.isUndefined(ctrl.disableChoiceExpression)) {
+          item = ctrl.items[itemIndex];
+          isDisabled = !!(itemScope.$eval(ctrl.disableChoiceExpression)); // force the boolean value
+          item._uiSelectChoiceDisabled = isDisabled; // store this for later reference
+        }
+
+        return isDisabled;
+      };
+
+
+      // When the user selects an item with ENTER or clicks the dropdown
+      ctrl.select = function(item, skipFocusser, $event) {
+        if (item === undefined || !item._uiSelectChoiceDisabled) {
+
+          if (!ctrl.items && !ctrl.search) return;
+
+          if (!item || !item._uiSelectChoiceDisabled) {
+            if (ctrl.tagging.isActivated) {
+              // if taggingLabel is disabled, we pull from ctrl.search val
+              if (ctrl.taggingLabel === false) {
+                if (ctrl.activeIndex < 0) {
+                  item = ctrl.tagging.fct !== undefined ? ctrl.tagging.fct(
+                    ctrl.search) : ctrl.search;
+                  if (!item || angular.equals(ctrl.items[0], item)) {
+                    return;
+                  }
+                } else {
+                  // keyboard nav happened first, user selected from dropdown
+                  item = ctrl.items[ctrl.activeIndex];
+                }
+              } else {
+                // tagging always operates at index zero, taggingLabel === false pushes
+                // the ctrl.search value without having it injected
+                if (ctrl.activeIndex === 0) {
+                  // ctrl.tagging pushes items to ctrl.items, so we only have empty val
+                  // for `item` if it is a detected duplicate
+                  if (item === undefined) return;
+
+                  // create new item on the fly if we don't already have one;
+                  // use tagging function if we have one
+                  if (ctrl.tagging.fct !== undefined && typeof item ===
+                    'string') {
+                    item = ctrl.tagging.fct(ctrl.search);
+                    if (!item) return;
+                    // if item type is 'string', apply the tagging label
+                  } else if (typeof item === 'string') {
+                    // trim the trailing space
+                    item = item.replace(ctrl.taggingLabel, '').trim();
+                  }
+                }
+              }
+              // search ctrl.selected for dupes potentially caused by tagging and return early if found
+              if (ctrl.selected && angular.isArray(ctrl.selected) &&
+                ctrl.selected.filter(function(selection) {
+                  return angular.equals(selection, item);
+                }).length > 0) {
+                ctrl.close(skipFocusser);
+                return;
+              }
+            }
+
+            $scope.$broadcast('uis:select', item);
+
+            var locals = {};
+            locals[ctrl.parserResult.itemName] = item;
+
+            $timeout(function() {
+              ctrl.onSelectCallback($scope, {
+                $item: item,
+                $model: ctrl.parserResult.modelMapper($scope,
+                  locals)
+              });
+            });
+
+            if (ctrl.closeOnSelect) {
+              ctrl.close(skipFocusser);
+            }
+            if ($event && $event.type === 'click') {
+              ctrl.clickTriggeredSelect = true;
+            }
+          }
+        }
+      };
+
+      // Closes the dropdown
+      ctrl.close = function(skipFocusser) {
+        if (!ctrl.open) return;
+        if (ctrl.ngModel && ctrl.ngModel.$setTouched) ctrl.ngModel.$setTouched();
+        _resetSearchInput();
+        ctrl.open = false;
+
+        $scope.$broadcast('uis:close', skipFocusser);
+
+      };
+
+      ctrl.setFocus = function() {
+        if (!ctrl.focus) ctrl.focusInput[0].focus();
+      };
+
+      ctrl.clear = function($event) {
+        ctrl.select(undefined);
+        $event.stopPropagation();
+        ctrl.focusser[0].focus();
+      };
+
+      // Toggle dropdown
+      ctrl.toggle = function(e) {
+        if (ctrl.open) {
+          ctrl.close();
+          e.preventDefault();
+          e.stopPropagation();
+        } else {
+          ctrl.activate();
+        }
+      };
+
+      ctrl.isLocked = function(itemScope, itemIndex) {
+        var isLocked, item = ctrl.selected[itemIndex];
+
+        if (item && !angular.isUndefined(ctrl.lockChoiceExpression)) {
+          isLocked = !!(itemScope.$eval(ctrl.lockChoiceExpression)); // force the boolean value
+          item._uiSelectChoiceLocked = isLocked; // store this for later reference
+        }
+
+        return isLocked;
+      };
+
+      var sizeWatch = null;
+      ctrl.sizeSearchInput = function() {
+
+        var input = ctrl.searchInput[0],
+          container = ctrl.searchInput.parent().parent()[0],
+          calculateContainerWidth = function() {
+            // Return the container width only if the search input is visible
+            return container.clientWidth * !!input.offsetParent;
+          },
+          updateIfVisible = function(containerWidth) {
+            if (containerWidth === 0) {
+              return false;
+            }
+            var inputWidth = containerWidth - input.offsetLeft - 10;
+            if (inputWidth < 50) inputWidth = containerWidth;
+            ctrl.searchInput.css('width', inputWidth + 'px');
+            return true;
+          };
+
+        ctrl.searchInput.css('width', '10px');
+        $timeout(function() { //Give tags time to render correctly
+          if (sizeWatch === null && !updateIfVisible(
+              calculateContainerWidth())) {
+            sizeWatch = $scope.$watch(calculateContainerWidth,
+              function(containerWidth) {
+                if (updateIfVisible(containerWidth)) {
+                  sizeWatch();
+                  sizeWatch = null;
+                }
+              });
+          }
+        });
+      };
+
+      function _handleDropDownSelection(key) {
+        var processed = true;
+        switch (key) {
+          case KEY.DOWN:
+            if (!ctrl.open && ctrl.multiple) ctrl.activate(false, true); //In case its the search input in 'multiple' mode
+            else if (ctrl.activeIndex < ctrl.items.length - 1) {
+              ctrl.activeIndex++;
+            }
+            break;
+          case KEY.UP:
+            if (!ctrl.open && ctrl.multiple) ctrl.activate(false, true); //In case its the search input in 'multiple' mode
+            else if (ctrl.activeIndex > 0 || (ctrl.search.length === 0 &&
+                ctrl.tagging.isActivated && ctrl.activeIndex > -1)) {
+              ctrl.activeIndex--;
+            }
+            break;
+          case KEY.TAB:
+            if (!ctrl.multiple || ctrl.open) ctrl.select(ctrl.items[ctrl.activeIndex],
+              true);
+            break;
+          case KEY.ENTER:
+            if (ctrl.open && ctrl.activeIndex >= 0) {
+              ctrl.select(ctrl.items[ctrl.activeIndex]); // Make sure at least one dropdown item is highlighted before adding.
+            } else {
+              ctrl.activate(false, true); //In case its the search input in 'multiple' mode
+            }
+            break;
+          case KEY.ESC:
+            ctrl.close();
+            break;
+          default:
+            processed = false;
+        }
+        return processed;
+      }
+
+      // Bind to keyboard shortcuts
+      ctrl.searchInput.on('keydown', function(e) {
+
+        var key = e.which;
+
+        // if(~[KEY.ESC,KEY.TAB].indexOf(key)){
+        //   //TODO: SEGURO?
+        //   ctrl.close();
+        // }
+
+        $scope.$apply(function() {
+
+          var tagged = false;
+
+          if (ctrl.items.length > 0 || ctrl.tagging.isActivated) {
+            _handleDropDownSelection(key);
+            if (ctrl.taggingTokens.isActivated) {
+              for (var i = 0; i < ctrl.taggingTokens.tokens.length; i++) {
+                if (ctrl.taggingTokens.tokens[i] === KEY.MAP[e.keyCode]) {
+                  // make sure there is a new value to push via tagging
+                  if (ctrl.search.length > 0) {
+                    tagged = true;
+                  }
+                }
+              }
+              if (tagged) {
+                $timeout(function() {
+                  ctrl.searchInput.triggerHandler('tagged');
+                  var newItem = ctrl.search.replace(KEY.MAP[e
+                    .keyCode], '').trim();
+                  if (ctrl.tagging.fct) {
+                    newItem = ctrl.tagging.fct(newItem);
+                  }
+                  if (newItem) ctrl.select(newItem, true);
+                });
+              }
+            }
+          }
+
+        });
+
+        if (KEY.isVerticalMovement(key) && ctrl.items.length > 0) {
+          _ensureHighlightVisible();
+        }
+
+      });
+
+      // If tagging try to split by tokens and add items
+      ctrl.searchInput.on('paste', function(e) {
+        var data = e.originalEvent.clipboardData.getData('text/plain');
+        if (data && data.length > 0 && ctrl.taggingTokens.isActivated &&
+          ctrl.tagging.fct) {
+          var items = data.split(ctrl.taggingTokens.tokens[0]); // split by first token only
+          if (items && items.length > 0) {
+            angular.forEach(items, function(item) {
+              var newItem = ctrl.tagging.fct(item);
+              if (newItem) {
+                ctrl.select(newItem, true);
+              }
+            });
+            e.preventDefault();
+            e.stopPropagation();
+          }
+        }
+      });
+
+      ctrl.searchInput.on('tagged', function() {
+        $timeout(function() {
+          _resetSearchInput();
+        });
+      });
+
+      // See https://github.com/ivaynberg/select2/blob/3.4.6/select2.js#L1431
+      function _ensureHighlightVisible() {
+        var container = $element.querySelectorAll(
+          '.ui-select-choices-content');
+        var choices = container.querySelectorAll('.ui-select-choices-row');
+        if (choices.length < 1) {
+          throw uiSelectMinErr('choices',
+            "Expected multiple .ui-select-choices-row but got '{0}'.",
+            choices.length);
+        }
+
+        if (ctrl.activeIndex < 0) {
+          return;
+        }
+
+        var highlighted = choices[ctrl.activeIndex];
+        var posY = highlighted.offsetTop + highlighted.clientHeight -
+          container[0].scrollTop;
+        var height = container[0].offsetHeight;
+
+        if (posY > height) {
+          container[0].scrollTop += posY - height;
+        } else if (posY < highlighted.clientHeight) {
+          if (ctrl.isGrouped && ctrl.activeIndex === 0)
+            container[0].scrollTop = 0; //To make group header visible when going all the way up
+          else
+            container[0].scrollTop -= highlighted.clientHeight - posY;
+        }
+      }
+
+      $scope.$on('$destroy', function() {
+        ctrl.searchInput.off('keyup keydown tagged blur paste');
+      });
+
+    }
+  ]);
+
+  uis.directive('uiSelect', ['$document', 'uiSelectConfig', 'uiSelectMinErr',
+    'uisOffset', '$compile', '$parse', '$timeout',
+    function($document, uiSelectConfig, uiSelectMinErr, uisOffset,
+      $compile, $parse, $timeout) {
+
+      return {
+        restrict: 'EA',
+        templateUrl: function(tElement, tAttrs) {
+          var theme = tAttrs.theme || uiSelectConfig.theme;
+          return theme + (angular.isDefined(tAttrs.multiple) ?
+            '/select-multiple.tpl.html' : '/select.tpl.html');
+        },
+        replace: true,
+        transclude: true,
+        require: ['uiSelect', '^ngModel'],
+        scope: true,
+
+        controller: 'uiSelectCtrl',
+        controllerAs: '$select',
+        compile: function(tElement, tAttrs) {
+
+          //Multiple or Single depending if multiple attribute presence
+          if (angular.isDefined(tAttrs.multiple))
+            tElement.append("<ui-select-multiple/>").removeAttr(
+              'multiple');
+          else
+            tElement.append("<ui-select-single/>");
+
+          return function(scope, element, attrs, ctrls, transcludeFn) {
+
+            var $select = ctrls[0];
+            var ngModel = ctrls[1];
+
+            $select.generatedId = uiSelectConfig.generateId();
+            $select.baseTitle = attrs.title || 'Select box';
+            $select.focusserTitle = $select.baseTitle + ' focus';
+            $select.focusserId = 'focusser-' + $select.generatedId;
+
+            $select.closeOnSelect = function() {
+              if (angular.isDefined(attrs.closeOnSelect)) {
+                return $parse(attrs.closeOnSelect)();
+              } else {
+                return uiSelectConfig.closeOnSelect;
+              }
+            }();
+
+            $select.onSelectCallback = $parse(attrs.onSelect);
+            $select.onRemoveCallback = $parse(attrs.onRemove);
+
+            //Set reference to ngModel from uiSelectCtrl
+            $select.ngModel = ngModel;
+
+            $select.choiceGrouped = function(group) {
+              return $select.isGrouped && group && group.name;
+            };
+
+            if (attrs.tabindex) {
+              attrs.$observe('tabindex', function(value) {
+                $select.focusInput.attr("tabindex", value);
+                element.removeAttr("tabindex");
+              });
+            }
+
+            scope.$watch('searchEnabled', function() {
+              var searchEnabled = scope.$eval(attrs.searchEnabled);
+              $select.searchEnabled = searchEnabled !== undefined ?
+                searchEnabled : uiSelectConfig.searchEnabled;
+            });
+
+            scope.$watch('sortable', function() {
+              var sortable = scope.$eval(attrs.sortable);
+              $select.sortable = sortable !== undefined ?
+                sortable : uiSelectConfig.sortable;
+            });
+
+            attrs.$observe('disabled', function() {
+              // No need to use $eval() (thanks to ng-disabled) since we already get a boolean instead of a string
+              $select.disabled = attrs.disabled !== undefined ?
+                attrs.disabled : false;
+            });
+
+            attrs.$observe('resetSearchInput', function() {
+              // $eval() is needed otherwise we get a string instead of a boolean
+              var resetSearchInput = scope.$eval(attrs.resetSearchInput);
+              $select.resetSearchInput = resetSearchInput !==
+                undefined ? resetSearchInput : true;
+            });
+
+            attrs.$observe('tagging', function() {
+              if (attrs.tagging !== undefined) {
+                // $eval() is needed otherwise we get a string instead of a boolean
+                var taggingEval = scope.$eval(attrs.tagging);
+                $select.tagging = {
+                  isActivated: true,
+                  fct: taggingEval !== true ? taggingEval : undefined
+                };
+              } else {
+                $select.tagging = {
+                  isActivated: false,
+                  fct: undefined
+                };
+              }
+            });
+
+            attrs.$observe('taggingLabel', function() {
+              if (attrs.tagging !== undefined) {
+                // check eval for FALSE, in this case, we disable the labels
+                // associated with tagging
+                if (attrs.taggingLabel === 'false') {
+                  $select.taggingLabel = false;
+                } else {
+                  $select.taggingLabel = attrs.taggingLabel !==
+                    undefined ? attrs.taggingLabel : '(new)';
+                }
+              }
+            });
+
+            attrs.$observe('taggingTokens', function() {
+              if (attrs.tagging !== undefined) {
+                var tokens = attrs.taggingTokens !== undefined ?
+                  attrs.taggingTokens.split('|') : [',', 'ENTER'];
+                $select.taggingTokens = {
+                  isActivated: true,
+                  tokens: tokens
+                };
+              }
+            });
+
+            //Automatically gets focus when loaded
+            if (angular.isDefined(attrs.autofocus)) {
+              $timeout(function() {
+                $select.setFocus();
+              });
+            }
+
+            //Gets focus based on scope event name (e.g. focus-on='SomeEventName')
+            if (angular.isDefined(attrs.focusOn)) {
+              scope.$on(attrs.focusOn, function() {
+                $timeout(function() {
+                  $select.setFocus();
+                });
+              });
+            }
+
+            function onDocumentClick(e) {
+              if (!$select.open) return; //Skip it if dropdown is close
+
+              var contains = false;
+
+              if (window.jQuery) {
+                // Firefox 3.6 does not support element.contains()
+                // See Node.contains https://developer.mozilla.org/en-US/docs/Web/API/Node.contains
+                contains = window.jQuery.contains(element[0], e.target);
+              } else {
+                contains = element[0].contains(e.target);
+              }
+
+              if (!contains && !$select.clickTriggeredSelect) {
+                //Will lose focus only with certain targets
+                var focusableControls = ['input', 'button',
+                  'textarea'
+                ];
+                var targetScope = angular.element(e.target).scope(); //To check if target is other ui-select
+                var skipFocusser = targetScope && targetScope.$select &&
+                  targetScope.$select !== $select; //To check if target is other ui-select
+                if (!skipFocusser) skipFocusser = ~focusableControls.indexOf(
+                  e.target.tagName.toLowerCase()); //Check if target is input, button or textarea
+                $select.close(skipFocusser);
+                scope.$digest();
+              }
+              $select.clickTriggeredSelect = false;
+            }
+
+            // See Click everywhere but here event http://stackoverflow.com/questions/12931369
+            $document.on('click', onDocumentClick);
+
+            scope.$on('$destroy', function() {
+              $document.off('click', onDocumentClick);
+            });
+
+            // Move transcluded elements to their correct position in main template
+            transcludeFn(scope, function(clone) {
+              // See Transclude in AngularJS http://blog.omkarpatil.com/2012/11/transclude-in-angularjs.html
+
+              // One day jqLite will be replaced by jQuery and we will be able to write:
+              // var transcludedElement = clone.filter('.my-class')
+              // instead of creating a hackish DOM element:
+              var transcluded = angular.element('<div>').append(
+                clone);
+
+              var transcludedMatch = transcluded.querySelectorAll(
+                '.ui-select-match');
+              transcludedMatch.removeAttr('ui-select-match'); //To avoid loop in case directive as attr
+              transcludedMatch.removeAttr('data-ui-select-match'); // Properly handle HTML5 data-attributes
+              if (transcludedMatch.length !== 1) {
+                throw uiSelectMinErr('transcluded',
+                  "Expected 1 .ui-select-match but got '{0}'.",
+                  transcludedMatch.length);
+              }
+              element.querySelectorAll('.ui-select-match').replaceWith(
+                transcludedMatch);
+
+              var transcludedChoices = transcluded.querySelectorAll(
+                '.ui-select-choices');
+              transcludedChoices.removeAttr('ui-select-choices'); //To avoid loop in case directive as attr
+              transcludedChoices.removeAttr(
+                'data-ui-select-choices'); // Properly handle HTML5 data-attributes
+              if (transcludedChoices.length !== 1) {
+                throw uiSelectMinErr('transcluded',
+                  "Expected 1 .ui-select-choices but got '{0}'.",
+                  transcludedChoices.length);
+              }
+              element.querySelectorAll('.ui-select-choices').replaceWith(
+                transcludedChoices);
+            });
+
+            // Support for appending the select field to the body when its open
+            var appendToBody = scope.$eval(attrs.appendToBody);
+            if (appendToBody !== undefined ? appendToBody :
+              uiSelectConfig.appendToBody) {
+              scope.$watch('$select.open', function(isOpen) {
+                if (isOpen) {
+                  positionDropdown();
+                } else {
+                  resetDropdown();
+                }
+              });
+
+              // Move the dropdown back to its original location when the scope is destroyed. Otherwise
+              // it might stick around when the user routes away or the select field is otherwise removed
+              scope.$on('$destroy', function() {
+                resetDropdown();
+              });
+            }
+
+            // Hold on to a reference to the .ui-select-container element for appendToBody support
+            var placeholder = null,
+              originalWidth = '';
+
+            function positionDropdown() {
+              // Remember the absolute position of the element
+              var offset = uisOffset(element);
+
+              // Clone the element into a placeholder element to take its original place in the DOM
+              placeholder = angular.element(
+                '<div class="ui-select-placeholder"></div>');
+              placeholder[0].style.width = offset.width + 'px';
+              placeholder[0].style.height = offset.height + 'px';
+              element.after(placeholder);
+
+              // Remember the original value of the element width inline style, so it can be restored
+              // when the dropdown is closed
+              originalWidth = element[0].style.width;
+
+              // Now move the actual dropdown element to the end of the body
+              $document.find('body').append(element);
+
+              element[0].style.position = 'absolute';
+              element[0].style.left = offset.left + 'px';
+              element[0].style.top = offset.top + 'px';
+              element[0].style.width = offset.width + 'px';
+            }
+
+            function resetDropdown() {
+              if (placeholder === null) {
+                // The dropdown has not actually been display yet, so there's nothing to reset
+                return;
+              }
+
+              // Move the dropdown element back to its original location in the DOM
+              placeholder.replaceWith(element);
+              placeholder = null;
+
+              element[0].style.position = '';
+              element[0].style.left = '';
+              element[0].style.top = '';
+              element[0].style.width = originalWidth;
+            }
+          };
+        }
+      };
+    }
+  ]);
+
+  uis.directive('uiSelectMatch', ['uiSelectConfig', function(uiSelectConfig) {
+    return {
+      restrict: 'EA',
+      require: '^uiSelect',
+      replace: true,
+      transclude: true,
+      templateUrl: function(tElement) {
+        // Gets theme attribute from parent (ui-select)
+        var theme = tElement.parent().attr('theme') || uiSelectConfig
+          .theme;
+        var multi = tElement.parent().attr('multiple');
+        return theme + (multi ? '/match-multiple.tpl.html' :
+          '/match.tpl.html');
+      },
+      link: function(scope, element, attrs, $select) {
+        $select.lockChoiceExpression = attrs.uiLockChoice;
+        attrs.$observe('placeholder', function(placeholder) {
+          $select.placeholder = placeholder !== undefined ?
+            placeholder : uiSelectConfig.placeholder;
+        });
+
+        function setAllowClear(allow) {
+          $select.allowClear = (angular.isDefined(allow)) ? (allow ===
+            '') ? true : (allow.toLowerCase() === 'true') : false;
+        }
+
+        attrs.$observe('allowClear', setAllowClear);
+        setAllowClear(attrs.allowClear);
+
+        if ($select.multiple) {
+          $select.sizeSearchInput();
+        }
+
+      }
+    };
+  }]);
+
+  uis.directive('uiSelectMultiple', ['uiSelectMinErr', '$timeout', function(
+    uiSelectMinErr, $timeout) {
+    return {
+      restrict: 'EA',
+      require: ['^uiSelect', '^ngModel'],
+
+      controller: ['$scope', '$timeout', function($scope, $timeout) {
+
+        var ctrl = this,
+          $select = $scope.$select,
+          ngModel;
+
+        //Wait for link fn to inject it
+        $scope.$evalAsync(function() {
+          ngModel = $scope.ngModel;
+        });
+
+        ctrl.activeMatchIndex = -1;
+
+        ctrl.updateModel = function() {
+          ngModel.$setViewValue(Date.now()); //Set timestamp as a unique string to force changes
+          ctrl.refreshComponent();
+        };
+
+        ctrl.refreshComponent = function() {
+          //Remove already selected items
+          //e.g. When user clicks on a selection, the selected array changes and
+          //the dropdown should remove that item
+          $select.refreshItems();
+          $select.sizeSearchInput();
+        };
+
+        // Remove item from multiple select
+        ctrl.removeChoice = function(index) {
+
+          var removedChoice = $select.selected[index];
+
+          // if the choice is locked, can't remove it
+          if (removedChoice._uiSelectChoiceLocked) return;
+
+          var locals = {};
+          locals[$select.parserResult.itemName] = removedChoice;
+
+          $select.selected.splice(index, 1);
+          ctrl.activeMatchIndex = -1;
+          $select.sizeSearchInput();
+
+          // Give some time for scope propagation.
+          $timeout(function() {
+            $select.onRemoveCallback($scope, {
+              $item: removedChoice,
+              $model: $select.parserResult.modelMapper(
+                $scope, locals)
+            });
+          });
+
+          ctrl.updateModel();
+
+        };
+
+        ctrl.getPlaceholder = function() {
+          //Refactor single?
+          if ($select.selected.length) return;
+          return $select.placeholder;
+        };
+
+
+      }],
+      controllerAs: '$selectMultiple',
+
+      link: function(scope, element, attrs, ctrls) {
+
+        var $select = ctrls[0];
+        var ngModel = scope.ngModel = ctrls[1];
+        var $selectMultiple = scope.$selectMultiple;
+
+        //$select.selected = raw selected objects (ignoring any property binding)
+
+        $select.multiple = true;
+        $select.removeSelected = true;
+
+        //Input that will handle focus
+        $select.focusInput = $select.searchInput;
+
+        //From view --> model
+        ngModel.$parsers.unshift(function() {
+          var locals = {},
+            result,
+            resultMultiple = [];
+          for (var j = $select.selected.length - 1; j >= 0; j--) {
+            locals = {};
+            locals[$select.parserResult.itemName] = $select.selected[
+              j];
+            result = $select.parserResult.modelMapper(scope,
+              locals);
+            resultMultiple.unshift(result);
+          }
+          return resultMultiple;
+        });
+
+        ngModel.$isEmpty = function() {
+          return !(angular.isArray(ngModel.$$rawModelValue) && ngModel.$$rawModelValue.length > 0);
+        };
+
+        // From model --> view
+        ngModel.$formatters.unshift(function(inputValue) {
+          var data = $select.parserResult.source(scope, {
+              $select: {
+                search: ''
+              }
+            }), //Overwrite $search
+            locals = {},
+            result;
+          if (!data) return inputValue;
+          var resultMultiple = [];
+          var checkFnMultiple = function(list, value) {
+            if (!list || !list.length) return;
+            for (var p = list.length - 1; p >= 0; p--) {
+              locals[$select.parserResult.itemName] = list[p];
+              result = $select.parserResult.modelMapper(scope,
+                locals);
+              if ($select.parserResult.trackByExp) {
+                var matches = /\.(.+)/.exec($select.parserResult
+                  .trackByExp);
+                if (matches.length > 0 && result[matches[1]] ==
+                  value[matches[1]]) {
+                  resultMultiple.unshift(list[p]);
+                  return true;
+                }
+              }
+              if (angular.equals(result, value)) {
+                resultMultiple.unshift(list[p]);
+                return true;
+              }
+            }
+            return false;
+          };
+          if (!inputValue) return resultMultiple; //If ngModel was undefined
+          for (var k = inputValue.length - 1; k >= 0; k--) {
+            //Check model array of currently selected items
+            if (!checkFnMultiple($select.selected, inputValue[k])) {
+              //Check model array of all items available
+              if (!checkFnMultiple(data, inputValue[k])) {
+                //If not found on previous lists, just add it directly to resultMultiple
+                resultMultiple.unshift(inputValue[k]);
+              }
+            }
+          }
+          return resultMultiple;
+        });
+
+        //Watch for external model changes
+        scope.$watchCollection(function() {
+          return ngModel.$modelValue;
+        }, function(newValue, oldValue) {
+          if (oldValue != newValue) {
+            ngModel.$modelValue = null; //Force scope model value and ngModel value to be out of sync to re-run formatters
+            $selectMultiple.refreshComponent();
+          }
+        });
+
+        ngModel.$render = function() {
+          // Make sure that model value is array
+          if (!angular.isArray(ngModel.$viewValue)) {
+            // Have tolerance for null or undefined values
+            if (angular.isUndefined(ngModel.$viewValue) || ngModel.$viewValue ===
+              null) {
+              $select.selected = [];
+            } else {
+              throw uiSelectMinErr('multiarr',
+                "Expected model value to be array but got '{0}'",
+                ngModel.$viewValue);
+            }
+          }
+          $select.selected = ngModel.$viewValue;
+          scope.$evalAsync(); //To force $digest
+        };
+
+        scope.$on('uis:select', function(event, item) {
+          $select.selected.push(item);
+          $selectMultiple.updateModel();
+        });
+
+        scope.$on('uis:activate', function() {
+          $selectMultiple.activeMatchIndex = -1;
+        });
+
+        scope.$watch('$select.disabled', function(newValue, oldValue) {
+          // As the search input field may now become visible, it may be necessary to recompute its size
+          if (oldValue && !newValue) $select.sizeSearchInput();
+        });
+
+        $select.searchInput.on('keydown', function(e) {
+          var key = e.which;
+          scope.$apply(function() {
+            var processed = false;
+            // var tagged = false; //Checkme
+            if (KEY.isHorizontalMovement(key)) {
+              processed = _handleMatchSelection(key);
+            }
+            if (processed && key != KEY.TAB) {
+              //TODO Check si el tab selecciona aun correctamente
+              //Crear test
+              e.preventDefault();
+              e.stopPropagation();
+            }
+          });
+        });
+
+        function _getCaretPosition(el) {
+          if (angular.isNumber(el.selectionStart)) return el.selectionStart;
+          // selectionStart is not supported in IE8 and we don't want hacky workarounds so we compromise
+          else return el.value.length;
+        }
+        // Handles selected options in "multiple" mode
+        function _handleMatchSelection(key) {
+          var caretPosition = _getCaretPosition($select.searchInput[0]),
+            length = $select.selected.length,
+            // none  = -1,
+            first = 0,
+            last = length - 1,
+            curr = $selectMultiple.activeMatchIndex,
+            next = $selectMultiple.activeMatchIndex + 1,
+            prev = $selectMultiple.activeMatchIndex - 1,
+            newIndex = curr;
+
+          if (caretPosition > 0 || ($select.search.length && key ==
+              KEY.RIGHT)) return false;
+
+          $select.close();
+
+          function getNewActiveMatchIndex() {
+            switch (key) {
+              case KEY.LEFT:
+                // Select previous/first item
+                if (~$selectMultiple.activeMatchIndex) return prev;
+                // Select last item
+                else return last;
+                break;
+              case KEY.RIGHT:
+                // Open drop-down
+                if (!~$selectMultiple.activeMatchIndex || curr ===
+                  last) {
+                  $select.activate();
+                  return false;
+                }
+                // Select next/last item
+                else return next;
+                break;
+              case KEY.BACKSPACE:
+                // Remove selected item and select previous/first
+                if (~$selectMultiple.activeMatchIndex) {
+                  $selectMultiple.removeChoice(curr);
+                  return prev;
+                }
+                // Select last item
+                else return last;
+                break;
+              case KEY.DELETE:
+                // Remove selected item and select next item
+                if (~$selectMultiple.activeMatchIndex) {
+                  $selectMultiple.removeChoice($selectMultiple.activeMatchIndex);
+                  return curr;
+                } else return false;
+            }
+          }
+
+          newIndex = getNewActiveMatchIndex();
+
+          if (!$select.selected.length || newIndex === false)
+            $selectMultiple.activeMatchIndex = -1;
+          else $selectMultiple.activeMatchIndex = Math.min(last, Math
+            .max(first, newIndex));
+
+          return true;
+        }
+
+        $select.searchInput.on('keyup', function(e) {
+
+          if (!KEY.isVerticalMovement(e.which)) {
+            scope.$evalAsync(function() {
+              $select.activeIndex = $select.taggingLabel ===
+                false ? -1 : 0;
+            });
+          }
+          // Push a "create new" item into array if there is a search string
+          if ($select.tagging.isActivated && $select.search.length >
+            0) {
+
+            // return early with these keys
+            if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(
+                e) || e.which === KEY.ESC || KEY.isVerticalMovement(
+                e.which)) {
+              return;
+            }
+            // always reset the activeIndex to the first item when tagging
+            $select.activeIndex = $select.taggingLabel === false ?
+              -1 : 0;
+            // taggingLabel === false bypasses all of this
+            if ($select.taggingLabel === false) return;
+
+            var items = angular.copy($select.items);
+            var stashArr = angular.copy($select.items);
+            var newItem;
+            var item;
+            var hasTag = false;
+            var dupeIndex = -1;
+            var tagItems;
+            var tagItem;
+
+            // case for object tagging via transform `$select.tagging.fct` function
+            if ($select.tagging.fct !== undefined) {
+              tagItems = $select.$filter('filter')(items, {
+                'isTag': true
+              });
+              if (tagItems.length > 0) {
+                tagItem = tagItems[0];
+              }
+              // remove the first element, if it has the `isTag` prop we generate a new one with each keyup, shaving the previous
+              if (items.length > 0 && tagItem) {
+                hasTag = true;
+                items = items.slice(1, items.length);
+                stashArr = stashArr.slice(1, stashArr.length);
+              }
+              newItem = $select.tagging.fct($select.search);
+              newItem.isTag = true;
+              // verify the the tag doesn't match the value of an existing item
+              if (stashArr.filter(function(origItem) {
+                  return angular.equals(origItem, $select.tagging
+                    .fct($select.search));
+                }).length > 0) {
+                return;
+              }
+              newItem.isTag = true;
+              // handle newItem string and stripping dupes in tagging string context
+            } else {
+              // find any tagging items already in the $select.items array and store them
+              tagItems = $select.$filter('filter')(items,
+                function(item) {
+                  return item.match($select.taggingLabel);
+                });
+              if (tagItems.length > 0) {
+                tagItem = tagItems[0];
+              }
+              item = items[0];
+              // remove existing tag item if found (should only ever be one tag item)
+              if (item !== undefined && items.length > 0 &&
+                tagItem) {
+                hasTag = true;
+                items = items.slice(1, items.length);
+                stashArr = stashArr.slice(1, stashArr.length);
+              }
+              newItem = $select.search + ' ' + $select.taggingLabel;
+              if (_findApproxDupe($select.selected, $select.search) >
+                -1) {
+                return;
+              }
+              // verify the the tag doesn't match the value of an existing item from
+              // the searched data set or the items already selected
+              if (_findCaseInsensitiveDupe(stashArr.concat(
+                  $select.selected))) {
+                // if there is a tag from prev iteration, strip it / queue the change
+                // and return early
+                if (hasTag) {
+                  items = stashArr;
+                  scope.$evalAsync(function() {
+                    $select.activeIndex = 0;
+                    $select.items = items;
+                  });
+                }
+                return;
+              }
+              if (_findCaseInsensitiveDupe(stashArr)) {
+                // if there is a tag from prev iteration, strip it
+                if (hasTag) {
+                  $select.items = stashArr.slice(1, stashArr.length);
+                }
+                return;
+              }
+            }
+            if (hasTag) dupeIndex = _findApproxDupe($select.selected,
+              newItem);
+            // dupe found, shave the first item
+            if (dupeIndex > -1) {
+              items = items.slice(dupeIndex + 1, items.length - 1);
+            } else {
+              items = [];
+              items.push(newItem);
+              items = items.concat(stashArr);
+            }
+            scope.$evalAsync(function() {
+              $select.activeIndex = 0;
+              $select.items = items;
+            });
+          }
+        });
+
+        function _findCaseInsensitiveDupe(arr) {
+          if (arr === undefined || $select.search === undefined) {
+            return false;
+          }
+          var hasDupe = arr.filter(function(origItem) {
+            if ($select.search.toUpperCase() === undefined ||
+              origItem === undefined) {
+              return false;
+            }
+            return origItem.toUpperCase() === $select.search.toUpperCase();
+          }).length > 0;
+
+          return hasDupe;
+        }
+
+        function _findApproxDupe(haystack, needle) {
+          var dupeIndex = -1;
+          if (angular.isArray(haystack)) {
+            var tempArr = angular.copy(haystack);
+            for (var i = 0; i < tempArr.length; i++) {
+              // handle the simple string version of tagging
+              if ($select.tagging.fct === undefined) {
+                // search the array for the match
+                if (tempArr[i] + ' ' + $select.taggingLabel ===
+                  needle) {
+                  dupeIndex = i;
+                }
+                // handle the object tagging implementation
+              } else {
+                var mockObj = tempArr[i];
+                mockObj.isTag = true;
+                if (angular.equals(mockObj, needle)) {
+                  dupeIndex = i;
+                }
+              }
+            }
+          }
+          return dupeIndex;
+        }
+
+        $select.searchInput.on('blur', function() {
+          $timeout(function() {
+            $selectMultiple.activeMatchIndex = -1;
+          });
+        });
+
+      }
+    };
+  }]);
+  uis.directive('uiSelectSingle', ['$timeout', '$compile', function($timeout,
+    $compile) {
+    return {
+      restrict: 'EA',
+      require: ['^uiSelect', '^ngModel'],
+      link: function(scope, element, attrs, ctrls) {
+
+        var $select = ctrls[0];
+        var ngModel = ctrls[1];
+
+        //From view --> model
+        ngModel.$parsers.unshift(function(inputValue) {
+          var locals = {},
+            result;
+          locals[$select.parserResult.itemName] = inputValue;
+          result = $select.parserResult.modelMapper(scope, locals);
+          return result;
+        });
+
+        //From model --> view
+        ngModel.$formatters.unshift(function(inputValue) {
+          var data = $select.parserResult.source(scope, {
+              $select: {
+                search: ''
+              }
+            }), //Overwrite $search
+            locals = {},
+            result;
+          if (data) {
+            var checkFnSingle = function(d) {
+              locals[$select.parserResult.itemName] = d;
+              result = $select.parserResult.modelMapper(scope,
+                locals);
+              return result == inputValue;
+            };
+            //If possible pass same object stored in $select.selected
+            if ($select.selected && checkFnSingle($select.selected)) {
+              return $select.selected;
+            }
+            for (var i = data.length - 1; i >= 0; i--) {
+              if (checkFnSingle(data[i])) return data[i];
+            }
+          }
+          return inputValue;
+        });
+
+        //Update viewValue if model change
+        scope.$watch('$select.selected', function(newValue) {
+          if (ngModel.$viewValue !== newValue) {
+            ngModel.$setViewValue(newValue);
+          }
+        });
+
+        ngModel.$render = function() {
+          $select.selected = ngModel.$viewValue;
+        };
+
+        scope.$on('uis:select', function(event, item) {
+          $select.selected = item;
+        });
+
+        scope.$on('uis:close', function(event, skipFocusser) {
+          $timeout(function() {
+            $select.focusser.prop('disabled', false);
+            if (!skipFocusser) $select.focusser[0].focus();
+          }, 0, false);
+        });
+
+        scope.$on('uis:activate', function() {
+          focusser.prop('disabled', true); //Will reactivate it on .close()
+        });
+
+        //Idea from: https://github.com/ivaynberg/select2/blob/79b5bf6db918d7560bdd959109b7bcfb47edaf43/select2.js#L1954
+        var focusser = angular.element(
+          "<input ng-disabled='$select.disabled' class='ui-select-focusser ui-select-offscreen' type='text' id='{{ $select.focusserId }}' aria-label='{{ $select.focusserTitle }}' aria-haspopup='true' role='button' />"
+        );
+        $compile(focusser)(scope);
+        $select.focusser = focusser;
+
+        //Input that will handle focus
+        $select.focusInput = focusser;
+
+        element.parent().append(focusser);
+        focusser.bind("focus", function() {
+          scope.$evalAsync(function() {
+            $select.focus = true;
+          });
+        });
+        focusser.bind("blur", function() {
+          scope.$evalAsync(function() {
+            $select.focus = false;
+          });
+        });
+        focusser.bind("keydown", function(e) {
+
+          if (e.which === KEY.BACKSPACE) {
+            e.preventDefault();
+            e.stopPropagation();
+            $select.select(undefined);
+            scope.$apply();
+            return;
+          }
+
+          if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(
+              e) || e.which === KEY.ESC) {
+            return;
+          }
+
+          if (e.which == KEY.DOWN || e.which == KEY.UP || e.which ==
+            KEY.ENTER || e.which == KEY.SPACE) {
+            e.preventDefault();
+            e.stopPropagation();
+            $select.activate();
+          }
+
+          scope.$digest();
+        });
+
+        focusser.bind("keyup input", function(e) {
+
+          if (e.which === KEY.TAB || KEY.isControl(e) || KEY.isFunctionKey(
+              e) || e.which === KEY.ESC || e.which == KEY.ENTER ||
+            e.which === KEY.BACKSPACE) {
+            return;
+          }
+
+          $select.activate(focusser.val()); //User pressed some regular key, so we pass it to the search input
+          focusser.val('');
+          scope.$digest();
+
+        });
+
+
+      }
+    };
+  }]);
+  // Make multiple matches sortable
+  uis.directive('uiSelectSort', ['$timeout', 'uiSelectConfig',
+    'uiSelectMinErr',
+    function($timeout, uiSelectConfig, uiSelectMinErr) {
+      return {
+        require: '^uiSelect',
+        link: function(scope, element, attrs, $select) {
+          if (scope[attrs.uiSelectSort] === null) {
+            throw uiSelectMinErr('sort', "Expected a list to sort");
+          }
+
+          var options = angular.extend({
+              axis: 'horizontal'
+            },
+            scope.$eval(attrs.uiSelectSortOptions));
+
+          var axis = options.axis,
+            draggingClassName = 'dragging',
+            droppingClassName = 'dropping',
+            droppingBeforeClassName = 'dropping-before',
+            droppingAfterClassName = 'dropping-after';
+
+          scope.$watch(function() {
+            return $select.sortable;
+          }, function(n) {
+            if (n) {
+              element.attr('draggable', true);
+            } else {
+              element.removeAttr('draggable');
+            }
+          });
+
+          element.on('dragstart', function(e) {
+            element.addClass(draggingClassName);
+
+            (e.dataTransfer || e.originalEvent.dataTransfer).setData
+              ('text/plain', scope.$index);
+          });
+
+          element.on('dragend', function() {
+            element.removeClass(draggingClassName);
+          });
+
+          var move = function(from, to) {
+            /*jshint validthis: true */
+            this.splice(to, 0, this.splice(from, 1)[0]);
+          };
+
+          var dragOverHandler = function(e) {
+            e.preventDefault();
+
+            var offset = axis === 'vertical' ? e.offsetY || e.layerY ||
+              (e.originalEvent ? e.originalEvent.offsetY : 0) : e.offsetX ||
+              e.layerX || (e.originalEvent ? e.originalEvent.offsetX :
+                0);
+
+            if (offset < (this[axis === 'vertical' ? 'offsetHeight' :
+                'offsetWidth'] / 2)) {
+              element.removeClass(droppingAfterClassName);
+              element.addClass(droppingBeforeClassName);
+
+            } else {
+              element.removeClass(droppingBeforeClassName);
+              element.addClass(droppingAfterClassName);
+            }
+          };
+
+          var dropTimeout;
+
+          var dropHandler = function(e) {
+            e.preventDefault();
+
+            var droppedItemIndex = parseInt((e.dataTransfer || e.originalEvent
+              .dataTransfer).getData('text/plain'), 10);
+
+            // prevent event firing multiple times in firefox
+            $timeout.cancel(dropTimeout);
+            dropTimeout = $timeout(function() {
+              _dropHandler(droppedItemIndex);
+            }, 20);
+          };
+
+          var _dropHandler = function(droppedItemIndex) {
+            var theList = scope.$eval(attrs.uiSelectSort),
+              itemToMove = theList[droppedItemIndex],
+              newIndex = null;
+
+            if (element.hasClass(droppingBeforeClassName)) {
+              if (droppedItemIndex < scope.$index) {
+                newIndex = scope.$index - 1;
+              } else {
+                newIndex = scope.$index;
+              }
+            } else {
+              if (droppedItemIndex < scope.$index) {
+                newIndex = scope.$index;
+              } else {
+                newIndex = scope.$index + 1;
+              }
+            }
+
+            move.apply(theList, [droppedItemIndex, newIndex]);
+
+            scope.$apply(function() {
+              scope.$emit('uiSelectSort:change', {
+                array: theList,
+                item: itemToMove,
+                from: droppedItemIndex,
+                to: newIndex
+              });
+            });
+
+            element.removeClass(droppingClassName);
+            element.removeClass(droppingBeforeClassName);
+            element.removeClass(droppingAfterClassName);
+
+            element.off('drop', dropHandler);
+          };
+
+          element.on('dragenter', function() {
+            if (element.hasClass(draggingClassName)) {
+              return;
+            }
+
+            element.addClass(droppingClassName);
+
+            element.on('dragover', dragOverHandler);
+            element.on('drop', dropHandler);
+          });
+
+          element.on('dragleave', function(e) {
+            if (e.target != element) {
+              return;
+            }
+            element.removeClass(droppingClassName);
+            element.removeClass(droppingBeforeClassName);
+            element.removeClass(droppingAfterClassName);
+
+            element.off('dragover', dragOverHandler);
+            element.off('drop', dropHandler);
+          });
+        }
+      };
+    }
+  ]);
+
+  /**
+   * Parses "repeat" attribute.
+   *
+   * Taken from AngularJS ngRepeat source code
+   * See https://github.com/angular/angular.js/blob/v1.2.15/src/ng/directive/ngRepeat.js#L211
+   *
+   * Original discussion about parsing "repeat" attribute instead of fully relying on ng-repeat:
+   * https://github.com/angular-ui/ui-select/commit/5dd63ad#commitcomment-5504697
+   */
+
+  uis.service('uisRepeatParser', ['uiSelectMinErr', '$parse', function(
+    uiSelectMinErr, $parse) {
+    var self = this;
+
+    /**
+     * Example:
+     * expression = "address in addresses | filter: {street: $select.search} track by $index"
+     * itemName = "address",
+     * source = "addresses | filter: {street: $select.search}",
+     * trackByExp = "$index",
+     */
+    self.parse = function(expression) {
+
+      var match = expression.match(
+        /^\s*(?:([\s\S]+?)\s+as\s+)?([\S]+?)\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?\s*$/
+      );
+
+      if (!match) {
+        throw uiSelectMinErr('iexp',
+          "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.",
+          expression);
+      }
+
+      return {
+        itemName: match[2], // (lhs) Left-hand side,
+        source: $parse(match[3]),
+        trackByExp: match[4],
+        modelMapper: $parse(match[1] || match[2])
+      };
+
+    };
+
+    self.getGroupNgRepeatExpression = function() {
+      return '$group in $select.groups';
+    };
+
+    self.getNgRepeatExpression = function(itemName, source, trackByExp,
+      grouped) {
+      var expression = itemName + ' in ' + (grouped ? '$group.items' :
+        source);
+      if (trackByExp) {
+        expression += ' track by ' + trackByExp;
+      }
+      return expression;
+    };
+  }]);
+
+}());
+angular.module("ui.select").run(["$templateCache", function($templateCache) {
+  $templateCache.put("bootstrap/choices.tpl.html",
+    "<ul class=\"ui-select-choices ui-select-choices-content dropdown-menu\" role=\"listbox\" ng-show=\"$select.items.length > 0\"><li class=\"ui-select-choices-group\" id=\"ui-select-choices-{{ $select.generatedId }}\"><div class=\"divider\" ng-show=\"$select.isGrouped && $index > 0\"></div><div ng-show=\"$select.isGrouped\" class=\"ui-select-choices-group-label dropdown-header\" ng-bind=\"$group.name\"></div><div id=\"ui-select-choices-row-{{ $select.generatedId }}-{{$index}}\" class=\"ui-select-choices-row\" ng-class=\"{active: $select.isActive(this), disabled: $select.isDisabled(this)}\" role=\"option\"><a href=\"javascript:void(0)\" class=\"ui-select-choices-row-inner\"></a></div></li></ul>"
+  );
+  $templateCache.put("bootstrap/match-multiple.tpl.html",
+    "<span class=\"ui-select-match\"><span ng-repeat=\"$item in $select.selected\"><span class=\"ui-select-match-item btn btn-default btn-xs\" tabindex=\"-1\" type=\"button\" ng-disabled=\"$select.disabled\" ng-click=\"$selectMultiple.activeMatchIndex = $index;\" ng-class=\"{\'btn-primary\':$selectMultiple.activeMatchIndex === $index, \'select-locked\':$select.isLocked(this, $index)}\" ui-select-sort=\"$select.selected\"><span class=\"close ui-select-match-close\" ng-hide=\"$select.disabled\" ng-click=\"$selectMultiple.removeChoice($index)\">&nbsp;&times;</span> <span uis-transclude-append=\"\"></span></span></span></span>"
+  );
+  $templateCache.put("bootstrap/match.tpl.html",
+    "<div class=\"ui-select-match\" ng-hide=\"$select.open\" ng-disabled=\"$select.disabled\" ng-class=\"{\'btn-default-focus\':$select.focus}\"><span tabindex=\"-1\" class=\"btn btn-default form-control ui-select-toggle\" aria-label=\"{{ $select.baseTitle }} activate\" ng-disabled=\"$select.disabled\" ng-click=\"$select.activate()\" style=\"outline: 0;\"><span ng-show=\"$select.isEmpty()\" class=\"ui-select-placeholder text-muted\">{{$select.placeholder}}</span> <span ng-hide=\"$select.isEmpty()\" class=\"ui-select-match-text pull-left\" ng-class=\"{\'ui-select-allow-clear\': $select.allowClear && !$select.isEmpty()}\" ng-transclude=\"\"></span> <i class=\"caret pull-right\" ng-click=\"$select.toggle($event)\"></i> <a ng-show=\"$select.allowClear && !$select.isEmpty()\" aria-label=\"{{ $select.baseTitle }} clear\" style=\"margin-right: 10px\" ng-click=\"$select.clear($event)\" class=\"btn btn-xs btn-link pull-right\"><i class=\"glyphicon glyphicon-remove\" aria-hidden=\"true\"></i></a></span></div>"
+  );
+  $templateCache.put("bootstrap/select-multiple.tpl.html",
+    "<div class=\"ui-select-container ui-select-multiple ui-select-bootstrap dropdown form-control\" ng-class=\"{open: $select.open}\"><div><div class=\"ui-select-match\"></div><input type=\"text\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" class=\"ui-select-search input-xs\" placeholder=\"{{$selectMultiple.getPlaceholder()}}\" ng-disabled=\"$select.disabled\" ng-hide=\"$select.disabled\" ng-click=\"$select.activate()\" ng-model=\"$select.search\" role=\"combobox\" aria-label=\"{{ $select.baseTitle }}\" ondrop=\"return false;\"></div><div class=\"ui-select-choices\"></div></div>"
+  );
+  $templateCache.put("bootstrap/select.tpl.html",
+    "<div class=\"ui-select-container ui-select-bootstrap dropdown\" ng-class=\"{open: $select.open}\"><div class=\"ui-select-match\"></div><input type=\"text\" autocomplete=\"off\" tabindex=\"-1\" aria-expanded=\"true\" aria-label=\"{{ $select.baseTitle }}\" aria-owns=\"ui-select-choices-{{ $select.generatedId }}\" aria-activedescendant=\"ui-select-choices-row-{{ $select.generatedId }}-{{ $select.activeIndex }}\" class=\"form-control ui-select-search\" placeholder=\"{{$select.placeholder}}\" ng-model=\"$select.search\" ng-show=\"$select.searchEnabled && $select.open\"><div class=\"ui-select-choices\"></div></div>"
+  );
+  $templateCache.put("select2/choices.tpl.html",
+    "<ul class=\"ui-select-choices ui-select-choices-content select2-results\"><li class=\"ui-select-choices-group\" ng-class=\"{\'select2-result-with-children\': $select.choiceGrouped($group) }\"><div ng-show=\"$select.choiceGrouped($group)\" class=\"ui-select-choices-group-label select2-result-label\" ng-bind=\"$group.name\"></div><ul role=\"listbox\" id=\"ui-select-choices-{{ $select.generatedId }}\" ng-class=\"{\'select2-result-sub\': $select.choiceGrouped($group), \'select2-result-single\': !$select.choiceGrouped($group) }\"><li role=\"option\" id=\"ui-select-choices-row-{{ $select.generatedId }}-{{$index}}\" class=\"ui-select-choices-row\" ng-class=\"{\'select2-highlighted\': $select.isActive(this), \'select2-disabled\': $select.isDisabled(this)}\"><div class=\"select2-result-label ui-select-choices-row-inner\"></div></li></ul></li></ul>"
+  );
+  $templateCache.put("select2/match-multiple.tpl.html",
+    "<span class=\"ui-select-match\"><li class=\"ui-select-match-item select2-search-choice\" ng-repeat=\"$item in $select.selected\" ng-class=\"{\'select2-search-choice-focus\':$selectMultiple.activeMatchIndex === $index, \'select2-locked\':$select.isLocked(this, $index)}\" ui-select-sort=\"$select.selected\"><span uis-transclude-append=\"\"></span> <a href=\"javascript:;\" class=\"ui-select-match-close select2-search-choice-close\" ng-click=\"$selectMultiple.removeChoice($index)\" tabindex=\"-1\"></a></li></span>"
+  );
+  $templateCache.put("select2/match.tpl.html",
+    "<a class=\"select2-choice ui-select-match\" ng-class=\"{\'select2-default\': $select.isEmpty()}\" ng-click=\"$select.toggle($event)\" aria-label=\"{{ $select.baseTitle }} select\"><span ng-show=\"$select.isEmpty()\" class=\"select2-chosen\">{{$select.placeholder}}</span> <span ng-hide=\"$select.isEmpty()\" class=\"select2-chosen\" ng-transclude=\"\"></span> <abbr ng-if=\"$select.allowClear && !$select.isEmpty()\" class=\"select2-search-choice-close\" ng-click=\"$select.clear($event)\"></abbr> <span class=\"select2-arrow ui-select-toggle\"><b></b></span></a>"
+  );
+  $templateCache.put("select2/select-multiple.tpl.html",
+    "<div class=\"ui-select-container ui-select-multiple select2 select2-container select2-container-multi\" ng-class=\"{\'select2-container-active select2-dropdown-open open\': $select.open, \'select2-container-disabled\': $select.disabled}\"><ul class=\"select2-choices\"><span class=\"ui-select-match\"></span><li class=\"select2-search-field\"><input type=\"text\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" role=\"combobox\" aria-expanded=\"true\" aria-owns=\"ui-select-choices-{{ $select.generatedId }}\" aria-label=\"{{ $select.baseTitle }}\" aria-activedescendant=\"ui-select-choices-row-{{ $select.generatedId }}-{{ $select.activeIndex }}\" class=\"select2-input ui-select-search\" placeholder=\"{{$selectMultiple.getPlaceholder()}}\" ng-disabled=\"$select.disabled\" ng-hide=\"$select.disabled\" ng-model=\"$select.search\" ng-click=\"$select.activate()\" style=\"width: 34px;\" ondrop=\"return false;\"></li></ul><div class=\"select2-drop select2-with-searchbox select2-drop-active\" ng-class=\"{\'select2-display-none\': !$select.open}\"><div class=\"ui-select-choices\"></div></div></div>"
+  );
+  $templateCache.put("select2/select.tpl.html",
+    "<div class=\"ui-select-container select2 select2-container\" ng-class=\"{\'select2-container-active select2-dropdown-open open\': $select.open, \'select2-container-disabled\': $select.disabled, \'select2-container-active\': $select.focus, \'select2-allowclear\': $select.allowClear && !$select.isEmpty()}\"><div class=\"ui-select-match\"></div><div class=\"select2-drop select2-with-searchbox select2-drop-active\" ng-class=\"{\'select2-display-none\': !$select.open}\"><div class=\"select2-search\" ng-show=\"$select.searchEnabled\"><input type=\"text\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" role=\"combobox\" aria-expanded=\"true\" aria-owns=\"ui-select-choices-{{ $select.generatedId }}\" aria-label=\"{{ $select.baseTitle }}\" aria-activedescendant=\"ui-select-choices-row-{{ $select.generatedId }}-{{ $select.activeIndex }}\" class=\"ui-select-search select2-input\" ng-model=\"$select.search\"></div><div class=\"ui-select-choices\"></div></div></div>"
+  );
+  $templateCache.put("selectize/choices.tpl.html",
+    "<div ng-show=\"$select.open\" class=\"ui-select-choices selectize-dropdown single\"><div class=\"ui-select-choices-content selectize-dropdown-content\"><div class=\"ui-select-choices-group optgroup\" role=\"listbox\"><div ng-show=\"$select.isGrouped\" class=\"ui-select-choices-group-label optgroup-header\" ng-bind=\"$group.name\"></div><div role=\"option\" class=\"ui-select-choices-row\" ng-class=\"{active: $select.isActive(this), disabled: $select.isDisabled(this)}\"><div class=\"option ui-select-choices-row-inner\" data-selectable=\"\"></div></div></div></div></div>"
+  );
+  $templateCache.put("selectize/match.tpl.html",
+    "<div ng-hide=\"($select.open || $select.isEmpty())\" class=\"ui-select-match\" ng-transclude=\"\"></div>"
+  );
+  $templateCache.put("selectize/select.tpl.html",
+    "<div class=\"ui-select-container selectize-control single\" ng-class=\"{\'open\': $select.open}\"><div class=\"selectize-input\" ng-class=\"{\'focus\': $select.open, \'disabled\': $select.disabled, \'selectize-focus\' : $select.focus}\" ng-click=\"$select.activate()\"><div class=\"ui-select-match\"></div><input type=\"text\" autocomplete=\"off\" tabindex=\"-1\" class=\"ui-select-search ui-select-toggle\" ng-click=\"$select.toggle($event)\" placeholder=\"{{$select.placeholder}}\" ng-model=\"$select.search\" ng-hide=\"!$select.searchEnabled || ($select.selected && !$select.open)\" ng-disabled=\"$select.disabled\" aria-label=\"{{ $select.baseTitle }}\"></div><div class=\"ui-select-choices\"></div></div>"
+  );
+}]);
diff --git a/public/assets/scripts/charts-flotcharts.js b/public/assets/scripts/charts-flotcharts.js
new file mode 100644
index 0000000..e22b181
--- /dev/null
+++ b/public/assets/scripts/charts-flotcharts.js
@@ -0,0 +1,899 @@
+var ChartsFlotcharts = function() {
+
+    return {
+        //main function to initiate the module
+
+        init: function() {
+
+            Metronic.addResizeHandler(function() {
+                Charts.initPieCharts();
+            });
+
+        },
+
+        initCharts: function() {
+
+            if (!jQuery.plot) {
+                return;
+            }
+
+            var data = [];
+            var totalPoints = 250;
+
+            // random data generator for plot charts
+
+            function getRandomData() {
+                if (data.length > 0) data = data.slice(1);
+                // do a random walk
+                while (data.length < totalPoints) {
+                    var prev = data.length > 0 ? data[data.length - 1] : 50;
+                    var y = prev + Math.random() * 10 - 5;
+                    if (y < 0) y = 0;
+                    if (y > 100) y = 100;
+                    data.push(y);
+                }
+                // zip the generated y values with the x values
+                var res = [];
+                for (var i = 0; i < data.length; ++i) {
+                    res.push([i, data[i]]);
+                }
+
+                return res;
+            }
+
+            //Basic Chart
+
+            function chart1() {
+                if ($('#chart_1').size() != 1) {
+                    return;
+                }
+
+                var d1 = [];
+                for (var i = 0; i < Math.PI * 2; i += 0.25)
+                    d1.push([i, Math.sin(i)]);
+
+                var d2 = [];
+                for (var i = 0; i < Math.PI * 2; i += 0.25)
+                    d2.push([i, Math.cos(i)]);
+
+                var d3 = [];
+                for (var i = 0; i < Math.PI * 2; i += 0.1)
+                    d3.push([i, Math.tan(i)]);
+
+                $.plot($("#chart_1"), [{
+                    label: "sin(x)",
+                    data: d1,
+                    lines: {
+                        lineWidth: 1,
+                    },
+                    shadowSize: 0
+                }, {
+                    label: "cos(x)",
+                    data: d2,
+                    lines: {
+                        lineWidth: 1,
+                    },
+                    shadowSize: 0
+                }, {
+                    label: "tan(x)",
+                    data: d3,
+                    lines: {
+                        lineWidth: 1,
+                    },
+                    shadowSize: 0
+                }], {
+                    series: {
+                        lines: {
+                            show: true,
+                        },
+                        points: {
+                            show: true,
+                            fill: true,
+                            radius: 3,
+                            lineWidth: 1
+                        }
+                    },
+                    xaxis: {
+                        tickColor: "#eee",
+                        ticks: [0, [Math.PI / 2, "\u03c0/2"],
+                            [Math.PI, "\u03c0"],
+                            [Math.PI * 3 / 2, "3\u03c0/2"],
+                            [Math.PI * 2, "2\u03c0"]
+                        ]
+                    },
+                    yaxis: {
+                        tickColor: "#eee",
+                        ticks: 10,
+                        min: -2,
+                        max: 2
+                    },
+                    grid: {
+                        borderColor: "#eee",
+                        borderWidth: 1
+                    }
+                });
+
+            }
+
+            //Interactive Chart
+
+            function chart2() {
+                if ($('#chart_2').size() != 1) {
+                    return;
+                }
+
+                function randValue() {
+                    return (Math.floor(Math.random() * (1 + 40 - 20))) + 20;
+                }
+                var pageviews = [
+                    [1, randValue()],
+                    [2, randValue()],
+                    [3, 2 + randValue()],
+                    [4, 3 + randValue()],
+                    [5, 5 + randValue()],
+                    [6, 10 + randValue()],
+                    [7, 15 + randValue()],
+                    [8, 20 + randValue()],
+                    [9, 25 + randValue()],
+                    [10, 30 + randValue()],
+                    [11, 35 + randValue()],
+                    [12, 25 + randValue()],
+                    [13, 15 + randValue()],
+                    [14, 20 + randValue()],
+                    [15, 45 + randValue()],
+                    [16, 50 + randValue()],
+                    [17, 65 + randValue()],
+                    [18, 70 + randValue()],
+                    [19, 85 + randValue()],
+                    [20, 80 + randValue()],
+                    [21, 75 + randValue()],
+                    [22, 80 + randValue()],
+                    [23, 75 + randValue()],
+                    [24, 70 + randValue()],
+                    [25, 65 + randValue()],
+                    [26, 75 + randValue()],
+                    [27, 80 + randValue()],
+                    [28, 85 + randValue()],
+                    [29, 90 + randValue()],
+                    [30, 95 + randValue()]
+                ];
+                var visitors = [
+                    [1, randValue() - 5],
+                    [2, randValue() - 5],
+                    [3, randValue() - 5],
+                    [4, 6 + randValue()],
+                    [5, 5 + randValue()],
+                    [6, 20 + randValue()],
+                    [7, 25 + randValue()],
+                    [8, 36 + randValue()],
+                    [9, 26 + randValue()],
+                    [10, 38 + randValue()],
+                    [11, 39 + randValue()],
+                    [12, 50 + randValue()],
+                    [13, 51 + randValue()],
+                    [14, 12 + randValue()],
+                    [15, 13 + randValue()],
+                    [16, 14 + randValue()],
+                    [17, 15 + randValue()],
+                    [18, 15 + randValue()],
+                    [19, 16 + randValue()],
+                    [20, 17 + randValue()],
+                    [21, 18 + randValue()],
+                    [22, 19 + randValue()],
+                    [23, 20 + randValue()],
+                    [24, 21 + randValue()],
+                    [25, 14 + randValue()],
+                    [26, 24 + randValue()],
+                    [27, 25 + randValue()],
+                    [28, 26 + randValue()],
+                    [29, 27 + randValue()],
+                    [30, 31 + randValue()]
+                ];
+
+                var plot = $.plot($("#chart_2"), [{
+                    data: pageviews,
+                    label: "Unique Visits",
+                    lines: {
+                        lineWidth: 1,
+                    },
+                    shadowSize: 0
+
+                }, {
+                    data: visitors,
+                    label: "Page Views",
+                    lines: {
+                        lineWidth: 1,
+                    },
+                    shadowSize: 0
+                }], {
+                    series: {
+                        lines: {
+                            show: true,
+                            lineWidth: 2,
+                            fill: true,
+                            fillColor: {
+                                colors: [{
+                                    opacity: 0.05
+                                }, {
+                                    opacity: 0.01
+                                }]
+                            }
+                        },
+                        points: {
+                            show: true,
+                            radius: 3,
+                            lineWidth: 1
+                        },
+                        shadowSize: 2
+                    },
+                    grid: {
+                        hoverable: true,
+                        clickable: true,
+                        tickColor: "#eee",
+                        borderColor: "#eee",
+                        borderWidth: 1
+                    },
+                    colors: ["#d12610", "#37b7f3", "#52e136"],
+                    xaxis: {
+                        ticks: 11,
+                        tickDecimals: 0,
+                        tickColor: "#eee",
+                    },
+                    yaxis: {
+                        ticks: 11,
+                        tickDecimals: 0,
+                        tickColor: "#eee",
+                    }
+                });
+
+
+                function showTooltip(x, y, contents) {
+                    $('<div id="tooltip">' + contents + '</div>').css({
+                        position: 'absolute',
+                        display: 'none',
+                        top: y + 5,
+                        left: x + 15,
+                        border: '1px solid #333',
+                        padding: '4px',
+                        color: '#fff',
+                        'border-radius': '3px',
+                        'background-color': '#333',
+                        opacity: 0.80
+                    }).appendTo("body").fadeIn(200);
+                }
+
+                var previousPoint = null;
+                $("#chart_2").bind("plothover", function(event, pos, item) {
+                    $("#x").text(pos.x.toFixed(2));
+                    $("#y").text(pos.y.toFixed(2));
+
+                    if (item) {
+                        if (previousPoint != item.dataIndex) {
+                            previousPoint = item.dataIndex;
+
+                            $("#tooltip").remove();
+                            var x = item.datapoint[0].toFixed(2),
+                                y = item.datapoint[1].toFixed(2);
+
+                            showTooltip(item.pageX, item.pageY, item.series.label + " of " + x + " = " + y);
+                        }
+                    } else {
+                        $("#tooltip").remove();
+                        previousPoint = null;
+                    }
+                });
+            }
+
+            //Tracking Curves
+
+            function chart3() {
+                if ($('#chart_3').size() != 1) {
+                    return;
+                }
+                //tracking curves:
+
+                var sin = [],
+                    cos = [];
+                for (var i = 0; i < 14; i += 0.1) {
+                    sin.push([i, Math.sin(i)]);
+                    cos.push([i, Math.cos(i)]);
+                }
+
+                plot = $.plot($("#chart_3"), [{
+                    data: sin,
+                    label: "sin(x) = -0.00",
+                    lines: {
+                        lineWidth: 1,
+                    },
+                    shadowSize: 0
+                }, {
+                    data: cos,
+                    label: "cos(x) = -0.00",
+                    lines: {
+                        lineWidth: 1,
+                    },
+                    shadowSize: 0
+                }], {
+                    series: {
+                        lines: {
+                            show: true
+                        }
+                    },
+                    crosshair: {
+                        mode: "x"
+                    },
+                    grid: {
+                        hoverable: true,
+                        autoHighlight: false,
+                        tickColor: "#eee",
+                        borderColor: "#eee",
+                        borderWidth: 1
+                    },
+                    yaxis: {
+                        min: -1.2,
+                        max: 1.2
+                    }
+                });
+
+                var legends = $("#chart_3 .legendLabel");
+                legends.each(function() {
+                    // fix the widths so they don't jump around
+                    $(this).css('width', $(this).width());
+                });
+
+                var updateLegendTimeout = null;
+                var latestPosition = null;
+
+                function updateLegend() {
+                    updateLegendTimeout = null;
+
+                    var pos = latestPosition;
+
+                    var axes = plot.getAxes();
+                    if (pos.x < axes.xaxis.min || pos.x > axes.xaxis.max || pos.y < axes.yaxis.min || pos.y > axes.yaxis.max) return;
+
+                    var i, j, dataset = plot.getData();
+                    for (i = 0; i < dataset.length; ++i) {
+                        var series = dataset[i];
+
+                        // find the nearest points, x-wise
+                        for (j = 0; j < series.data.length; ++j)
+                            if (series.data[j][0] > pos.x) break;
+
+                            // now interpolate
+                        var y, p1 = series.data[j - 1],
+                            p2 = series.data[j];
+
+                        if (p1 == null) y = p2[1];
+                        else if (p2 == null) y = p1[1];
+                        else y = p1[1] + (p2[1] - p1[1]) * (pos.x - p1[0]) / (p2[0] - p1[0]);
+
+                        legends.eq(i).text(series.label.replace(/=.*/, "= " + y.toFixed(2)));
+                    }
+                }
+
+                $("#chart_3").bind("plothover", function(event, pos, item) {
+                    latestPosition = pos;
+                    if (!updateLegendTimeout) updateLegendTimeout = setTimeout(updateLegend, 50);
+                });
+            }
+
+            //Dynamic Chart
+
+            function chart4() {
+                if ($('#chart_4').size() != 1) {
+                    return;
+                }
+                //server load
+                var options = {
+                    series: {
+                        shadowSize: 1
+                    },
+                    lines: {
+                        show: true,
+                        lineWidth: 0.5,
+                        fill: true,
+                        fillColor: {
+                            colors: [{
+                                opacity: 0.1
+                            }, {
+                                opacity: 1
+                            }]
+                        }
+                    },
+                    yaxis: {
+                        min: 0,
+                        max: 100,
+                        tickColor: "#eee",
+                        tickFormatter: function(v) {
+                            return v + "%";
+                        }
+                    },
+                    xaxis: {
+                        show: false,
+                    },
+                    colors: ["#6ef146"],
+                    grid: {
+                        tickColor: "#eee",
+                        borderWidth: 0,
+                    }
+                };
+
+                var updateInterval = 30;
+                var plot = $.plot($("#chart_4"), [getRandomData()], options);
+
+                function update() {
+                    plot.setData([getRandomData()]);
+                    plot.draw();
+                    setTimeout(update, updateInterval);
+                }
+                update();
+            }
+
+            //bars with controls
+
+            function chart5() {
+                if ($('#chart_5').size() != 1) {
+                    return;
+                }
+                var d1 = [];
+                for (var i = 0; i <= 10; i += 1)
+                    d1.push([i, parseInt(Math.random() * 30)]);
+
+                var d2 = [];
+                for (var i = 0; i <= 10; i += 1)
+                    d2.push([i, parseInt(Math.random() * 30)]);
+
+                var d3 = [];
+                for (var i = 0; i <= 10; i += 1)
+                    d3.push([i, parseInt(Math.random() * 30)]);
+
+                var stack = 0,
+                    bars = true,
+                    lines = false,
+                    steps = false;
+
+                function plotWithOptions() {
+                    $.plot($("#chart_5"),
+
+                        [{
+                            label: "sales",
+                            data: d1,
+                            lines: {
+                                lineWidth: 1,
+                            },
+                            shadowSize: 0
+                        }, {
+                            label: "tax",
+                            data: d2,
+                            lines: {
+                                lineWidth: 1,
+                            },
+                            shadowSize: 0
+                        }, {
+                            label: "profit",
+                            data: d3,
+                            lines: {
+                                lineWidth: 1,
+                            },
+                            shadowSize: 0
+                        }]
+
+                        , {
+                            series: {
+                                stack: stack,
+                                lines: {
+                                    show: lines,
+                                    fill: true,
+                                    steps: steps,
+                                    lineWidth: 0, // in pixels
+                                },
+                                bars: {
+                                    show: bars,
+                                    barWidth: 0.5,
+                                    lineWidth: 0, // in pixels
+                                    shadowSize: 0,
+                                    align: 'center'
+                                }
+                            },
+                            grid: {
+                                tickColor: "#eee",
+                                borderColor: "#eee",
+                                borderWidth: 1
+                            }
+                        }
+                    );
+                }
+
+                $(".stackControls input").click(function(e) {
+                    e.preventDefault();
+                    stack = $(this).val() == "With stacking" ? true : null;
+                    plotWithOptions();
+                });
+
+                $(".graphControls input").click(function(e) {
+                    e.preventDefault();
+                    bars = $(this).val().indexOf("Bars") != -1;
+                    lines = $(this).val().indexOf("Lines") != -1;
+                    steps = $(this).val().indexOf("steps") != -1;
+                    plotWithOptions();
+                });
+
+                plotWithOptions();
+            }
+
+            //graph
+            chart1();
+            chart2();
+            chart3();
+            chart4();
+            chart5();
+
+        },
+
+        initBarCharts: function() {
+
+            // bar chart:
+            var data = GenerateSeries(0);
+
+            function GenerateSeries(added) {
+                var data = [];
+                var start = 100 + added;
+                var end = 200 + added;
+
+                for (i = 1; i <= 20; i++) {
+                    var d = Math.floor(Math.random() * (end - start + 1) + start);
+                    data.push([i, d]);
+                    start++;
+                    end++;
+                }
+
+                return data;
+            }
+
+            var options = {
+                series: {
+                    bars: {
+                        show: true
+                    }
+                },
+                bars: {
+                    barWidth: 0.8,
+                    lineWidth: 0, // in pixels
+                    shadowSize: 0,
+                    align: 'left'
+                },
+
+                grid: {
+                    tickColor: "#eee",
+                    borderColor: "#eee",
+                    borderWidth: 1
+                }
+            };
+
+            if ($('#chart_1_1').size() !== 0) {
+                $.plot($("#chart_1_1"), [{
+                    data: data,
+                    lines: {
+                        lineWidth: 1,
+                    },
+                    shadowSize: 0
+                }], options);
+            }
+
+            // horizontal bar chart:
+
+            var data1 = [
+                [10, 10],
+                [20, 20],
+                [30, 30],
+                [40, 40],
+                [50, 50]
+            ];
+
+            var options = {
+                series: {
+                    bars: {
+                        show: true
+                    }
+                },
+                bars: {
+                    horizontal: true,
+                    barWidth: 6,
+                    lineWidth: 0, // in pixels
+                    shadowSize: 0,
+                    align: 'left'
+                },
+                grid: {
+                    tickColor: "#eee",
+                    borderColor: "#eee",
+                    borderWidth: 1
+                }
+            };
+
+            if ($('#chart_1_2').size() !== 0) {
+                $.plot($("#chart_1_2"), [data1], options);
+            }
+        },
+
+        initPieCharts: function() {
+
+            var data = [];
+            var series = Math.floor(Math.random() * 10) + 1;
+            series = series < 5 ? 5 : series;
+
+            for (var i = 0; i < series; i++) {
+                data[i] = {
+                    label: "Series" + (i + 1),
+                    data: Math.floor(Math.random() * 100) + 1
+                };
+            }
+
+            // DEFAULT
+            if ($('#pie_chart').size() !== 0) {
+                $.plot($("#pie_chart"), data, {
+                    series: {
+                        pie: {
+                            show: true
+                        }
+                    }
+                });
+            }
+
+            // GRAPH 1
+            if ($('#pie_chart_1').size() !== 0) {
+                $.plot($("#pie_chart_1"), data, {
+                    series: {
+                        pie: {
+                            show: true
+                        }
+                    },
+                    legend: {
+                        show: false
+                    }
+                });
+            }
+
+            // GRAPH 2
+            if ($('#pie_chart_2').size() !== 0) {
+                $.plot($("#pie_chart_2"), data, {
+                    series: {
+                        pie: {
+                            show: true,
+                            radius: 1,
+                            label: {
+                                show: true,
+                                radius: 1,
+                                formatter: function(label, series) {
+                                    return '<div style="font-size:8pt;text-align:center;padding:2px;color:white;">' + label + '<br/>' + Math.round(series.percent) + '%</div>';
+                                },
+                                background: {
+                                    opacity: 0.8
+                                }
+                            }
+                        }
+                    },
+                    legend: {
+                        show: false
+                    }
+                });
+            }
+
+            // GRAPH 3
+            if ($('#pie_chart_3').size() !== 0) {
+                $.plot($("#pie_chart_3"), data, {
+                    series: {
+                        pie: {
+                            show: true,
+                            radius: 1,
+                            label: {
+                                show: true,
+                                radius: 3 / 4,
+                                formatter: function(label, series) {
+                                    return '<div style="font-size:8pt;text-align:center;padding:2px;color:white;">' + label + '<br/>' + Math.round(series.percent) + '%</div>';
+                                },
+                                background: {
+                                    opacity: 0.5
+                                }
+                            }
+                        }
+                    },
+                    legend: {
+                        show: false
+                    }
+                });
+            }
+
+            // GRAPH 4
+            if ($('#pie_chart_4').size() !== 0) {
+                $.plot($("#pie_chart_4"), data, {
+                    series: {
+                        pie: {
+                            show: true,
+                            radius: 1,
+                            label: {
+                                show: true,
+                                radius: 3 / 4,
+                                formatter: function(label, series) {
+                                    return '<div style="font-size:8pt;text-align:center;padding:2px;color:white;">' + label + '<br/>' + Math.round(series.percent) + '%</div>';
+                                },
+                                background: {
+                                    opacity: 0.5,
+                                    color: '#000'
+                                }
+                            }
+                        }
+                    },
+                    legend: {
+                        show: false
+                    }
+                });
+            }
+
+            // GRAPH 5
+            if ($('#pie_chart_5').size() !== 0) {
+                $.plot($("#pie_chart_5"), data, {
+                    series: {
+                        pie: {
+                            show: true,
+                            radius: 3 / 4,
+                            label: {
+                                show: true,
+                                radius: 3 / 4,
+                                formatter: function(label, series) {
+                                    return '<div style="font-size:8pt;text-align:center;padding:2px;color:white;">' + label + '<br/>' + Math.round(series.percent) + '%</div>';
+                                },
+                                background: {
+                                    opacity: 0.5,
+                                    color: '#000'
+                                }
+                            }
+                        }
+                    },
+                    legend: {
+                        show: false
+                    }
+                });
+            }
+
+            // GRAPH 6
+            if ($('#pie_chart_6').size() !== 0) {
+                $.plot($("#pie_chart_6"), data, {
+                    series: {
+                        pie: {
+                            show: true,
+                            radius: 1,
+                            label: {
+                                show: true,
+                                radius: 2 / 3,
+                                formatter: function(label, series) {
+                                    return '<div style="font-size:8pt;text-align:center;padding:2px;color:white;">' + label + '<br/>' + Math.round(series.percent) + '%</div>';
+                                },
+                                threshold: 0.1
+                            }
+                        }
+                    },
+                    legend: {
+                        show: false
+                    }
+                });
+            }
+
+            // GRAPH 7
+            if ($('#pie_chart_7').size() !== 0) {
+                $.plot($("#pie_chart_7"), data, {
+                    series: {
+                        pie: {
+                            show: true,
+                            combine: {
+                                color: '#999',
+                                threshold: 0.1
+                            }
+                        }
+                    },
+                    legend: {
+                        show: false
+                    }
+                });
+            }
+
+            // GRAPH 8
+            if ($('#pie_chart_8').size() !== 0) {
+                $.plot($("#pie_chart_8"), data, {
+                    series: {
+                        pie: {
+                            show: true,
+                            radius: 300,
+                            label: {
+                                show: true,
+                                formatter: function(label, series) {
+                                    return '<div style="font-size:8pt;text-align:center;padding:2px;color:white;">' + label + '<br/>' + Math.round(series.percent) + '%</div>';
+                                },
+                                threshold: 0.1
+                            }
+                        }
+                    },
+                    legend: {
+                        show: false
+                    }
+                });
+            }
+
+            // GRAPH 9
+            if ($('#pie_chart_9').size() !== 0) {
+                $.plot($("#pie_chart_9"), data, {
+                    series: {
+                        pie: {
+                            show: true,
+                            radius: 1,
+                            tilt: 0.5,
+                            label: {
+                                show: true,
+                                radius: 1,
+                                formatter: function(label, series) {
+                                    return '<div style="font-size:8pt;text-align:center;padding:2px;color:white;">' + label + '<br/>' + Math.round(series.percent) + '%</div>';
+                                },
+                                background: {
+                                    opacity: 0.8
+                                }
+                            },
+                            combine: {
+                                color: '#999',
+                                threshold: 0.1
+                            }
+                        }
+                    },
+                    legend: {
+                        show: false
+                    }
+                });
+            }
+
+            // DONUT
+            if ($('#donut').size() !== 0) {
+                $.plot($("#donut"), data, {
+                    series: {
+                        pie: {
+                            innerRadius: 0.5,
+                            show: true
+                        }
+                    }
+                });
+            }
+
+            // INTERACTIVE
+            if ($('#interactive').size() !== 0) {
+                $.plot($("#interactive"), data, {
+                    series: {
+                        pie: {
+                            show: true
+                        }
+                    },
+                    grid: {
+                        hoverable: true,
+                        clickable: true
+                    }
+                });
+                $("#interactive").bind("plothover", pieHover);
+                $("#interactive").bind("plotclick", pieClick);
+            }
+
+            function pieHover(event, pos, obj) {
+                if (!obj)
+                    return;
+                percent = parseFloat(obj.series.percent).toFixed(2);
+                $("#hover").html('<span style="font-weight: bold; color: ' + obj.series.color + '">' + obj.series.label + ' (' + percent + '%)</span>');
+            }
+
+            function pieClick(event, pos, obj) {
+                if (!obj)
+                    return;
+                percent = parseFloat(obj.series.percent).toFixed(2);
+                alert('' + obj.series.label + ': ' + percent + '%');
+            }
+
+        }
+
+    };
+
+}();
diff --git a/public/assets/scripts/components-dropdowns.js b/public/assets/scripts/components-dropdowns.js
new file mode 100644
index 0000000..55204c7
--- /dev/null
+++ b/public/assets/scripts/components-dropdowns.js
@@ -0,0 +1,464 @@
+var ComponentsDropdowns = function() {
+
+  var handleSelect2 = function() {
+
+    $('#select2_sample1').select2({
+      placeholder: "Select an option",
+      allowClear: true
+    });
+
+    $('#select2_sample2').select2({
+      placeholder: "Select a State",
+      allowClear: true
+    });
+
+    $("#select2_sample3").select2({
+      placeholder: "Select...",
+      allowClear: true,
+      minimumInputLength: 1,
+      query: function(query) {
+        var data = {
+            results: []
+          },
+          i, j, s;
+        for (i = 1; i < 5; i++) {
+          s = "";
+          for (j = 0; j < i; j++) {
+            s = s + query.term;
+          }
+          data.results.push({
+            id: query.term + i,
+            text: s
+          });
+        }
+        query.callback(data);
+      }
+    });
+
+    function format(state) {
+      if (!state.id) return state.text; // optgroup
+      return "<img class='flag' src='" + Metronic.getGlobalImgPath() +
+        "flags/" + state.id.toLowerCase() + ".png'/>&nbsp;&nbsp;" + state.text;
+    }
+    $("#select2_sample4").select2({
+      placeholder: "Select a Country",
+      allowClear: true,
+      formatResult: format,
+      formatSelection: format,
+      escapeMarkup: function(m) {
+        return m;
+      }
+    });
+
+    $("#select2_sample5").select2({
+      tags: ["red", "green", "blue", "yellow", "pink"]
+    });
+
+
+    function movieFormatResult(movie) {
+      var markup = "<table class='movie-result'><tr>";
+      if (movie.posters !== undefined && movie.posters.thumbnail !==
+        undefined) {
+        markup += "<td valign='top'><img src='" + movie.posters.thumbnail +
+          "'/></td>";
+      }
+      markup += "<td valign='top'><h5>" + movie.title + "</h5>";
+      if (movie.critics_consensus !== undefined) {
+        markup += "<div class='movie-synopsis'>" + movie.critics_consensus +
+          "</div>";
+      } else if (movie.synopsis !== undefined) {
+        markup += "<div class='movie-synopsis'>" + movie.synopsis +
+          "</div>";
+      }
+      markup += "</td></tr></table>"
+      return markup;
+    }
+
+    function movieFormatSelection(movie) {
+      return movie.title;
+    }
+
+    $("#select2_sample6").select2({
+      placeholder: "Search for a movie",
+      minimumInputLength: 1,
+      ajax: { // instead of writing the function to execute the request we use Select2's convenient helper
+        url: "http://api.rottentomatoes.com/api/public/v1.0/movies.json",
+        dataType: 'jsonp',
+        data: function(term, page) {
+          return {
+            q: term, // search term
+            page_limit: 10,
+            apikey: "ju6z9mjyajq2djue3gbvv26t" // please do not use so this example keeps working
+          };
+        },
+        results: function(data, page) { // parse the results into the format expected by Select2.
+          // since we are using custom formatting functions we do not need to alter remote JSON data
+          return {
+            results: data.movies
+          };
+        }
+      },
+      initSelection: function(element, callback) {
+        // the input tag has a value attribute preloaded that points to a preselected movie's id
+        // this function resolves that id attribute to an object that select2 can render
+        // using its formatResult renderer - that way the movie name is shown preselected
+        var id = $(element).val();
+        if (id !== "") {
+          $.ajax(
+            "http://api.rottentomatoes.com/api/public/v1.0/movies/" +
+            id + ".json", {
+              data: {
+                apikey: "ju6z9mjyajq2djue3gbvv26t"
+              },
+              dataType: "jsonp"
+            }).done(function(data) {
+            callback(data);
+          });
+        }
+      },
+      formatResult: movieFormatResult, // omitted for brevity, see the source of this page
+      formatSelection: movieFormatSelection, // omitted for brevity, see the source of this page
+      dropdownCssClass: "bigdrop", // apply css that makes the dropdown taller
+      escapeMarkup: function(m) {
+          return m;
+        } // we do not want to escape markup since we are displaying html in results
+    });
+  }
+
+  var handleSelect2Modal = function() {
+
+    $('#select2_sample_modal_1').select2({
+      placeholder: "Select an option",
+      allowClear: true
+    });
+
+    $('#select2_sample_modal_2').select2({
+      placeholder: "Select a State",
+      allowClear: true
+    });
+
+    $("#select2_sample_modal_3").select2({
+      allowClear: true,
+      minimumInputLength: 1,
+      query: function(query) {
+        var data = {
+            results: []
+          },
+          i, j, s;
+        for (i = 1; i < 5; i++) {
+          s = "";
+          for (j = 0; j < i; j++) {
+            s = s + query.term;
+          }
+          data.results.push({
+            id: query.term + i,
+            text: s
+          });
+        }
+        query.callback(data);
+      }
+    });
+
+    function format(state) {
+      if (!state.id) return state.text; // optgroup
+      return "<img class='flag' src='" + Metronic.getGlobalImgPath() +
+        "flags/" + state.id.toLowerCase() + ".png'/>&nbsp;&nbsp;" + state.text;
+    }
+    $("#select2_sample_modal_4").select2({
+      allowClear: true,
+      formatResult: format,
+      formatSelection: format,
+      escapeMarkup: function(m) {
+        return m;
+      }
+    });
+
+    $("#select2_sample_modal_5").select2({
+      tags: ["red", "green", "blue", "yellow", "pink"]
+    });
+
+
+    function movieFormatResult(movie) {
+      var markup = "<table class='movie-result'><tr>";
+      if (movie.posters !== undefined && movie.posters.thumbnail !==
+        undefined) {
+        markup += "<td valign='top'><img src='" + movie.posters.thumbnail +
+          "'/></td>";
+      }
+      markup += "<td valign='top'><h5>" + movie.title + "</h5>";
+      if (movie.critics_consensus !== undefined) {
+        markup += "<div class='movie-synopsis'>" + movie.critics_consensus +
+          "</div>";
+      } else if (movie.synopsis !== undefined) {
+        markup += "<div class='movie-synopsis'>" + movie.synopsis +
+          "</div>";
+      }
+      markup += "</td></tr></table>"
+      return markup;
+    }
+
+    function movieFormatSelection(movie) {
+      return movie.title;
+    }
+
+    $("#select2_sample_modal_6").select2({
+      placeholder: "Search for a movie",
+      minimumInputLength: 1,
+      ajax: { // instead of writing the function to execute the request we use Select2's convenient helper
+        url: "http://api.rottentomatoes.com/api/public/v1.0/movies.json",
+        dataType: 'jsonp',
+        data: function(term, page) {
+          return {
+            q: term, // search term
+            page_limit: 10,
+            apikey: "ju6z9mjyajq2djue3gbvv26t" // please do not use so this example keeps working
+          };
+        },
+        results: function(data, page) { // parse the results into the format expected by Select2.
+          // since we are using custom formatting functions we do not need to alter remote JSON data
+          return {
+            results: data.movies
+          };
+        }
+      },
+      initSelection: function(element, callback) {
+        // the input tag has a value attribute preloaded that points to a preselected movie's id
+        // this function resolves that id attribute to an object that select2 can render
+        // using its formatResult renderer - that way the movie name is shown preselected
+        var id = $(element).val();
+        if (id !== "") {
+          $.ajax(
+            "http://api.rottentomatoes.com/api/public/v1.0/movies/" +
+            id + ".json", {
+              data: {
+                apikey: "ju6z9mjyajq2djue3gbvv26t"
+              },
+              dataType: "jsonp"
+            }).done(function(data) {
+            callback(data);
+          });
+        }
+      },
+      formatResult: movieFormatResult, // omitted for brevity, see the source of this page
+      formatSelection: movieFormatSelection, // omitted for brevity, see the source of this page
+      dropdownCssClass: "bigdrop", // apply css that makes the dropdown taller
+      escapeMarkup: function(m) {
+          return m;
+        } // we do not want to escape markup since we are displaying html in results
+    });
+  }
+
+  var handleBootstrapSelect = function() {
+    $('.bs-select').selectpicker({
+      iconBase: 'fa',
+      tickIcon: 'fa-check'
+    });
+  }
+
+  var handleMultiSelect = function() {
+    $('#my_multi_select1').multiSelect();
+    $('#my_multi_select2').multiSelect({
+      selectableOptgroup: true,
+      afterSelect: function(values) {
+        console.log(values);
+      },
+      afterDeselect: function(values) {
+        console.log(values);
+      }
+    });
+  }
+
+  return {
+    //main function to initiate the module
+    init: function() {
+      handleSelect2();
+      handleSelect2Modal();
+      handleMultiSelect();
+      handleBootstrapSelect();
+    },
+    bindTeam: function(teamAgents, agents, teams) {
+      var select = document.createElement('select');
+      select.className = 'multi-select';
+      select.setAttribute('multiple', 'multiple');
+
+      for (var agent in agents) {
+        var option = document.createElement('option');
+        option.value = agents[agent].id;
+        option.text = agents[agent].name;
+
+        if (_.includes(teamAgents, agents[agent].id)) {
+          option.setAttribute('selected', '');
+        }
+
+        select.appendChild(option);
+      }
+
+      var div = document.getElementById('multi-select-team');
+      div.innerHTML = '';
+      div.appendChild(select);
+
+      $(select).multiSelect({
+        selectableFooter: 'Agents available',
+        selectionFooter: 'Agents associated',
+        // selectableOptgroup: true,
+        afterSelect: function(values) {
+          teams().select(values);
+        },
+        afterDeselect: function(values) {
+          teams().deselect(values);
+        }
+      });
+    },
+    bindMailQueue: function(teams, queues, agents) {
+      var select = document.createElement('select');
+      select.className = 'multi-select';
+      select.setAttribute('multiple', 'multiple');
+
+      for (var team in teams) {
+        var optgroup = document.createElement('optgroup');
+        optgroup.label = teams[team].name;
+
+        for (var user in teams[team].Users) {
+          var option = document.createElement('option');
+          option.value = teams[team].Users[user].id;
+          option.text = teams[team].Users[user].name;
+          if (_.includes(queues, teams[team].Users[user].id)) {
+            option.setAttribute('selected', '');
+          }
+
+          optgroup.appendChild(option);
+        }
+        select.appendChild(optgroup);
+      }
+
+      var div = document.getElementById('multi-select-team');
+      div.innerHTML = '';
+      div.appendChild(select);
+
+      $(select).multiSelect({
+        selectableFooter: 'Agents available',
+        selectionFooter: 'Agents associated',
+        selectableOptgroup: true,
+        afterSelect: function(values) {
+          agents().select(values);
+        },
+        afterDeselect: function(values) {
+          agents().deselect(values);
+        }
+      });
+    },
+    bindChatQueue: function(teams, queues, agents) {
+      var select = document.createElement('select');
+      select.className = 'multi-select';
+      select.setAttribute('multiple', 'multiple');
+
+      for (var team in teams) {
+        var optgroup = document.createElement('optgroup');
+        optgroup.label = teams[team].name;
+
+        for (var user in teams[team].Users) {
+          var option = document.createElement('option');
+          option.value = teams[team].Users[user].id;
+          option.text = teams[team].Users[user].name;
+          if (_.includes(queues, teams[team].Users[user].id)) {
+            option.setAttribute('selected', '');
+          }
+
+          optgroup.appendChild(option);
+        }
+        select.appendChild(optgroup);
+      }
+
+      var div = document.getElementById('multi-select-team');
+      div.innerHTML = '';
+      div.appendChild(select);
+
+      $(select).multiSelect({
+        selectableOptgroup: true,
+        afterSelect: function(values) {
+          agents().select(values);
+        },
+        afterDeselect: function(values) {
+          agents().deselect(values);
+        }
+      });
+    },
+    bindFaxQueue: function(teams, queues, agents) {
+      var select = document.createElement('select');
+      select.className = 'multi-select';
+      select.setAttribute('multiple', 'multiple');
+
+      for (var team in teams) {
+        var optgroup = document.createElement('optgroup');
+        optgroup.label = teams[team].name;
+
+        for (var user in teams[team].Users) {
+          var option = document.createElement('option');
+          option.value = teams[team].Users[user].id;
+          option.text = teams[team].Users[user].name;
+          if (_.includes(queues, teams[team].Users[user].id)) {
+            option.setAttribute('selected', '');
+          }
+
+          optgroup.appendChild(option);
+        }
+        select.appendChild(optgroup);
+      }
+
+      var div = document.getElementById('multi-select-team');
+      div.innerHTML = '';
+      div.appendChild(select);
+
+      $(select).multiSelect({
+        selectableFooter: 'Agents available',
+        selectionFooter: 'Agents associated',
+        selectableOptgroup: true,
+        afterSelect: function(values) {
+          agents().select(values);
+        },
+        afterDeselect: function(values) {
+          agents().deselect(values);
+        }
+      });
+    },
+    bindQueue: function(teams, queues, agents) {
+      var select = document.createElement('select');
+      select.className = 'multi-select';
+      select.setAttribute('multiple', 'multiple');
+
+      for (var team in teams) {
+        var optgroup = document.createElement('optgroup');
+        optgroup.label = teams[team].name;
+
+        for (var user in teams[team].Users) {
+          var option = document.createElement('option');
+          option.value = teams[team].Users[user].id;
+          option.text = teams[team].Users[user].name;
+          if (_.includes(queues, teams[team].Users[user].id)) {
+            option.setAttribute('selected', '');
+          }
+
+          optgroup.appendChild(option);
+        }
+        select.appendChild(optgroup);
+      }
+
+      var div = document.getElementById('multi-select-team');
+      div.innerHTML = '';
+      div.appendChild(select);
+
+      $(select).multiSelect({
+        selectableFooter: 'Agents available',
+        selectionFooter: 'Agents associated',
+        selectableOptgroup: true,
+        afterSelect: function(values) {
+          agents().select(values);
+        },
+        afterDeselect: function(values) {
+          agents().deselect(values);
+        }
+      });
+    }
+  };
+
+}();
diff --git a/public/assets/scripts/datatable.js b/public/assets/scripts/datatable.js
new file mode 100644
index 0000000..e7c9e9f
--- /dev/null
+++ b/public/assets/scripts/datatable.js
@@ -0,0 +1,318 @@
+/***
+Wrapper/Helper Class for datagrid based on jQuery Datatable Plugin
+***/
+var Datatable = function() {
+
+    var tableOptions; // main options
+    var dataTable; // datatable object
+    var table; // actual table jquery object
+    var tableContainer; // actual table container object
+    var tableWrapper; // actual table wrapper jquery object
+    var tableInitialized = false;
+    var ajaxParams = {}; // set filter mode
+    var the;
+
+    var countSelectedRecords = function() {
+        var selected = $('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).size();
+        var text = tableOptions.dataTable.language.metronicGroupActions;
+        if (selected > 0) {
+            $('.table-group-actions > span', tableWrapper).text(text.replace("_TOTAL_", selected));
+        } else {
+            $('.table-group-actions > span', tableWrapper).text("");
+        }
+    };
+
+    return {
+
+        //main function to initiate the module
+        init: function(options) {
+
+            if (!$().dataTable) {
+                return;
+            }
+
+            the = this;
+
+            // default settings
+            options = $.extend(true, {
+                src: "", // actual table
+                filterApplyAction: "filter",
+                filterCancelAction: "filter_cancel",
+                resetGroupActionInputOnSuccess: true,
+                loadingMessage: 'Loading...',
+                dataTable: {
+                    "dom":
+                    "<'row' <'col-md-12'T>>" +
+                    "<'row'<'col-md-8 col-sm-12'pl><'col-md-4 col-sm-12'f>r>" +
+                    "<'row'<'col-md-8 col-sm-12'i><'col-md-4 col-sm-12'<'table-group-actions pull-right'>>r><'table-scrollable't>", // datatable layout
+                    "pageLength": 10, // default records per page
+                    "language": { // language settings
+                        // metronic spesific
+                        "metronicGroupActions": "_TOTAL_ records selected:  ",
+                        "metronicAjaxRequestGeneralError": "Could not complete request. Please check your internet connection",
+
+                        // data tables spesific
+                        "lengthMenu": "<span class='seperator'>|</span>View _MENU_ records",
+                        "info": "Found total _TOTAL_ records",
+                        "infoEmpty": "No records found to show",
+                        "emptyTable": "No data available in table",
+                        "zeroRecords": "No matching records found",
+                        "paginate": {
+                            "previous": "Prev",
+                            "next": "Next",
+                            "last": "Last",
+                            "first": "First",
+                            "page": "Page",
+                            "pageOf": "of"
+                        }
+                    },
+                    "bStateSave": true,
+                    "orderCellsTop": true,
+                    "columnDefs": [{ // define columns sorting options(by default all columns are sortable extept the first checkbox column)
+                        'orderable': false,
+                        'targets': [0]
+                    }],
+                    "pagingType": "bootstrap_extended", // pagination type(bootstrap, bootstrap_full_number or bootstrap_extended)
+                    "autoWidth": false, // disable fixed width and enable fluid table
+                    "processing": false, // enable/disable display message box on record load
+                    "serverSide": true, // enable/disable server side ajax loading
+
+                    "ajax": { // define ajax settings
+                        "url": "", // ajax URL
+                        "type": "POST", // request type
+                        "timeout": 20000,
+                        "data": function(data) { // add request parameters before submit
+                            $.each(ajaxParams, function(key, value) {
+                                data[key] = value;
+                            });
+                            Metronic.blockUI({
+                                message: tableOptions.loadingMessage,
+                                target: tableContainer,
+                                overlayColor: 'none',
+                                cenrerY: true,
+                                boxed: true
+                            });
+                        },
+                        "dataSrc": function(res) { // Manipulate the data returned from the server
+                            if (res.customActionMessage) {
+                                Metronic.alert({
+                                    type: (res.customActionStatus == 'OK' ? 'success' : 'danger'),
+                                    icon: (res.customActionStatus == 'OK' ? 'check' : 'warning'),
+                                    message: res.customActionMessage,
+                                    container: tableWrapper,
+                                    place: 'prepend'
+                                });
+                            }
+
+                            if (res.customActionStatus) {
+                                if (tableOptions.resetGroupActionInputOnSuccess) {
+                                    $('.table-group-action-input', tableWrapper).val("");
+                                }
+                            }
+
+                            if ($('.group-checkable', table).size() === 1) {
+                                $('.group-checkable', table).attr("checked", false);
+                                $.uniform.update($('.group-checkable', table));
+                            }
+
+                            if (tableOptions.onSuccess) {
+                                tableOptions.onSuccess.call(undefined, the);
+                            }
+
+                            Metronic.unblockUI(tableContainer);
+
+                            return res.data;
+                        },
+                        "error": function() { // handle general connection errors
+                            if (tableOptions.onError) {
+                                tableOptions.onError.call(undefined, the);
+                            }
+
+                            Metronic.alert({
+                                type: 'danger',
+                                icon: 'warning',
+                                message: tableOptions.dataTable.language.metronicAjaxRequestGeneralError,
+                                container: tableWrapper,
+                                place: 'prepend'
+                            });
+
+                            Metronic.unblockUI(tableContainer);
+                        }
+                    },
+
+                    "drawCallback": function(oSettings) { // run some code on table redraw
+                        if (tableInitialized === false) { // check if table has been initialized
+                            tableInitialized = true; // set table initialized
+                            table.show(); // display table
+                        }
+                        Metronic.initUniform($('input[type="checkbox"]', table)); // reinitialize uniform checkboxes on each table reload
+                        countSelectedRecords(); // reset selected records indicator
+
+                        // callback for ajax data load
+                        if (tableOptions.onDataLoad) {
+                            tableOptions.onDataLoad.call(undefined, the);
+                        }
+                    }
+                }
+            }, options);
+
+            tableOptions = options;
+
+            // create table's jquery object
+            table = $(options.src);
+            tableContainer = table.parents(".table-container");
+
+            // apply the special class that used to restyle the default datatable
+            var tmp = $.fn.dataTableExt.oStdClasses;
+
+            $.fn.dataTableExt.oStdClasses.sWrapper = $.fn.dataTableExt.oStdClasses.sWrapper + " dataTables_extended_wrapper";
+            $.fn.dataTableExt.oStdClasses.sFilterInput = "form-control input-small input-sm input-inline";
+            $.fn.dataTableExt.oStdClasses.sLengthSelect = "form-control input-xsmall input-sm input-inline";
+
+            $.extend(true, $.fn.DataTable.TableTools.classes, {
+                "container": "btn-group tabletools-dropdown-on-portlet",
+                "buttons": {
+                    "normal": "btn btn-sm default",
+                    "disabled": "btn btn-sm default disabled"
+                },
+                "collection": {
+                    "container": "DTTT_dropdown dropdown-menu tabletools-dropdown-menu"
+                }
+            });
+
+            // initialize a datatable
+            dataTable = table.DataTable(options.dataTable);
+
+            // revert back to default
+            $.fn.dataTableExt.oStdClasses.sWrapper = tmp.sWrapper;
+            $.fn.dataTableExt.oStdClasses.sFilterInput = tmp.sFilterInput;
+            $.fn.dataTableExt.oStdClasses.sLengthSelect = tmp.sLengthSelect;
+
+
+            // get table wrapper
+            tableWrapper = table.parents('.dataTables_wrapper');
+
+            // build table group actions panel
+            if ($('.table-actions-wrapper', tableContainer).size() === 1) {
+                $('.table-group-actions', tableWrapper).html($('.table-actions-wrapper', tableContainer).html()); // place the panel inside the wrapper
+                $('.table-actions-wrapper', tableContainer).remove(); // remove the template container
+            }
+            // handle group checkboxes check/uncheck
+            $('.group-checkable', table).change(function() {
+                var set = $('tbody > tr > td:nth-child(1) input[type="checkbox"]', table);
+                var checked = $(this).is(":checked");
+                $(set).each(function() {
+                    $(this).attr("checked", checked);
+                });
+                $.uniform.update(set);
+                countSelectedRecords();
+            });
+
+            // handle row's checkbox click
+            table.on('change', 'tbody > tr > td:nth-child(1) input[type="checkbox"]', function() {
+                countSelectedRecords();
+            });
+
+            // handle filter submit button click
+            table.on('click', '.filter-submit', function(e) {
+                e.preventDefault();
+                the.submitFilter();
+            });
+
+            // handle filter cancel button click
+            table.on('click', '.filter-cancel', function(e) {
+                e.preventDefault();
+                the.resetFilter();
+            });
+        },
+
+        submitFilter: function() {
+            the.setAjaxParam("action", tableOptions.filterApplyAction);
+
+            // get all typeable inputs
+            $('textarea.form-filter, select.form-filter, input.form-filter:not([type="radio"],[type="checkbox"])', table).each(function() {
+                the.setAjaxParam($(this).attr("name"), $(this).val());
+            });
+
+            // get all checkboxes
+            $('input.form-filter[type="checkbox"]:checked', table).each(function() {
+                the.addAjaxParam($(this).attr("name"), $(this).val());
+            });
+
+            // get all radio buttons
+            $('input.form-filter[type="radio"]:checked', table).each(function() {
+                the.setAjaxParam($(this).attr("name"), $(this).val());
+            });
+
+            dataTable.ajax.reload();
+        },
+
+        resetFilter: function() {
+            $('textarea.form-filter, select.form-filter, input.form-filter', table).each(function() {
+                $(this).val("");
+            });
+            $('input.form-filter[type="checkbox"]', table).each(function() {
+                $(this).attr("checked", false);
+            });
+            the.clearAjaxParams();
+            the.addAjaxParam("action", tableOptions.filterCancelAction);
+            dataTable.ajax.reload();
+        },
+
+        getSelectedRowsCount: function() {
+            return $('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).size();
+        },
+
+        getSelectedRows: function() {
+            var rows = [];
+            $('tbody > tr > td:nth-child(1) input[type="checkbox"]:checked', table).each(function() {
+                rows.push($(this).val());
+            });
+
+            return rows;
+        },
+
+        setAjaxParam: function(name, value) {
+            ajaxParams[name] = value;
+        },
+
+        addAjaxParam: function(name, value) {
+            if (!ajaxParams[name]) {
+                ajaxParams[name] = [];
+            }
+
+            skip = false;
+            for (var i = 0; i < (ajaxParams[name]).length; i++) { // check for duplicates
+                if (ajaxParams[name][i] === value) {
+                    skip = true;
+                }
+            }
+
+            if (skip === false) {
+                ajaxParams[name].push(value);
+            }
+        },
+
+        clearAjaxParams: function(name, value) {
+            ajaxParams = {};
+        },
+
+        getDataTable: function() {
+            return dataTable;
+        },
+
+        getTableWrapper: function() {
+            return tableWrapper;
+        },
+
+        gettableContainer: function() {
+            return tableContainer;
+        },
+
+        getTable: function() {
+            return table;
+        }
+
+    };
+
+};
diff --git a/public/assets/scripts/form-wizard-agent.js b/public/assets/scripts/form-wizard-agent.js
new file mode 100644
index 0000000..a82e1f9
--- /dev/null
+++ b/public/assets/scripts/form-wizard-agent.js
@@ -0,0 +1,254 @@
+var FormWizard = function () {
+
+
+    return {
+        //main function to initiate the module
+        init: function () {
+            if (!jQuery().bootstrapWizard) {
+                return;
+            }
+
+            function format(state) {
+                if (!state.id) return state.text; // optgroup
+                return "<img class='flag' src='../../assets/global/img/flags/" + state.id.toLowerCase() + ".png'/>&nbsp;&nbsp;" + state.text;
+            }
+
+            $("#country_list").select2({
+                placeholder: "Select",
+                allowClear: true,
+                formatResult: format,
+                formatSelection: format,
+                escapeMarkup: function (m) {
+                    return m;
+                }
+            });
+
+            var form = $('#submit_form');
+            var error = $('.alert-danger', form);
+            var success = $('.alert-success', form);
+
+            form.validate({
+                doNotHideMessage: true, //this option enables to show the error/success messages on tab switch.
+                errorElement: 'span', //default input error message container
+                errorClass: 'help-block help-block-error', // default input error message class
+                focusInvalid: false, // do not focus the last invalid input
+                rules: {
+                    //account
+                    username: {
+                        minlength: 5,
+                        required: true
+                    },
+                    password: {
+                        minlength: 5,
+                        required: true
+                    },
+                    rpassword: {
+                        minlength: 5,
+                        required: true,
+                        equalTo: "#submit_form_password"
+                    },
+                    //profile
+                    fullname: {
+                        required: true
+                    },
+                    email: {
+                        required: true,
+                        email: true
+                    },
+                    phone: {
+                        required: true
+                    },
+                    gender: {
+                        required: true
+                    },
+                    address: {
+                        required: true
+                    },
+                    city: {
+                        required: true
+                    },
+                    country: {
+                        required: true
+                    },
+                    //payment
+                    card_name: {
+                        required: true
+                    },
+                    card_number: {
+                        minlength: 16,
+                        maxlength: 16,
+                        required: true
+                    },
+                    card_cvc: {
+                        digits: true,
+                        required: true,
+                        minlength: 3,
+                        maxlength: 4
+                    },
+                    card_expiry_date: {
+                        required: true
+                    },
+                    'payment[]': {
+                        required: true,
+                        minlength: 1
+                    }
+                },
+
+                messages: { // custom messages for radio buttons and checkboxes
+                    'payment[]': {
+                        required: "Please select at least one option",
+                        minlength: jQuery.validator.format("Please select at least one option")
+                    }
+                },
+
+                errorPlacement: function (error, element) { // render error placement for each input type
+                    if (element.attr("name") == "gender") { // for uniform radio buttons, insert the after the given container
+                        error.insertAfter("#form_gender_error");
+                    } else if (element.attr("name") == "payment[]") { // for uniform checkboxes, insert the after the given container
+                        error.insertAfter("#form_payment_error");
+                    } else {
+                        error.insertAfter(element); // for other inputs, just perform default behavior
+                    }
+                },
+
+                invalidHandler: function (event, validator) { //display error alert on form submit
+                    success.hide();
+                    error.show();
+                    Metronic.scrollTo(error, -200);
+                },
+
+                highlight: function (element) { // hightlight error inputs
+                    $(element)
+                        .closest('.form-group').removeClass('has-success').addClass('has-error'); // set error class to the control group
+                },
+
+                unhighlight: function (element) { // revert the change done by hightlight
+                    $(element)
+                        .closest('.form-group').removeClass('has-error'); // set error class to the control group
+                },
+
+                success: function (label) {
+                    if (label.attr("for") == "gender" || label.attr("for") == "payment[]") { // for checkboxes and radio buttons, no need to show OK icon
+                        label
+                            .closest('.form-group').removeClass('has-error').addClass('has-success');
+                        label.remove(); // remove error label here
+                    } else { // display success icon for other inputs
+                        label
+                            .addClass('valid') // mark the current input as valid and display OK icon
+                        .closest('.form-group').removeClass('has-error').addClass('has-success'); // set success class to the control group
+                    }
+                },
+
+                submitHandler: function (form) {
+                    success.show();
+                    error.hide();
+                    //add here some ajax code to submit your form or just call form.submit() if you want to submit the form without ajax
+                }
+
+            });
+
+            var displayConfirm = function() {
+                $('#tab4 .form-control-static', form).each(function(){
+                    var input = $('[name="'+$(this).attr("data-display")+'"]', form);
+                    if (input.is(":radio")) {
+                        input = $('[name="'+$(this).attr("data-display")+'"]:checked', form);
+                    }
+                    if (input.is(":text") || input.is("textarea")) {
+                        $(this).html(input.val());
+                    } else if (input.is("select")) {
+                        $(this).html(input.find('option:selected').text());
+                    } else if (input.is(":radio") && input.is(":checked")) {
+                        $(this).html(input.attr("data-title"));
+                    } else if ($(this).attr("data-display") == 'payment[]') {
+                        var payment = [];
+                        $('[name="payment[]"]:checked', form).each(function(){
+                            payment.push($(this).attr('data-title'));
+                        });
+                        $(this).html(payment.join("<br>"));
+                    }
+                });
+            };
+
+            var handleTitle = function(tab, navigation, index) {
+                var total = navigation.find('li').length;
+                var current = index + 1;
+
+                // set wizard title
+                $('.step-title', $('#form_wizard_agent')).text('Step ' + (index + 1) + ' of ' + total);
+                // set done steps
+                jQuery('li', $('#form_wizard_agent')).removeClass("done");
+                var li_list = navigation.find('li');
+                for (var i = 0; i < index; i++) {
+                    jQuery(li_list[i]).addClass("done");
+                }
+
+                if (current == 1) {
+                    $('#form_wizard_agent').find('.button-previous').hide();
+                } else {
+                    $('#form_wizard_agent').find('.button-previous').show();
+                }
+
+                if (current >= total) {
+                    $('#form_wizard_agent').find('.button-next').hide();
+                    $('#form_wizard_agent').find('.button-submit').show();
+                    displayConfirm();
+                } else {
+                    $('#form_wizard_agent').find('.button-next').show();
+                    $('#form_wizard_agent').find('.button-submit').hide();
+                }
+                Metronic.scrollTo($('.page-title'));
+            };
+
+            // default form wizard
+            $('#form_wizard_agent').bootstrapWizard({
+                'nextSelector': '.button-next',
+                'previousSelector': '.button-previous',
+                onTabClick: function (tab, navigation, index, clickedIndex) {
+                    return false;
+                    /*
+                    success.hide();
+                    error.hide();
+                    if (form.valid() == false) {
+                        return false;
+                    }
+                    handleTitle(tab, navigation, clickedIndex);
+                    */
+                },
+                onNext: function (tab, navigation, index) {
+                    console.log('next');
+                    console.log(tab);
+                    success.hide();
+                    error.hide();
+
+                    if (form.valid() === false) {
+                        return false;
+                    }
+
+                    handleTitle(tab, navigation, index);
+                },
+                onPrevious: function (tab, navigation, index) {
+                    success.hide();
+                    error.hide();
+
+                    handleTitle(tab, navigation, index);
+                },
+                onTabShow: function (tab, navigation, index) {
+                    var total = navigation.find('li').length;
+                    var current = index + 1;
+                    var $percent = (current / total) * 100;
+                    console.log($percent);
+                    $('#form_wizard_agent').find('.progress-bar').css({
+                        width: $percent + '%'
+                    });
+                }
+            });
+
+            $('#form_wizard_agent').find('.button-previous').hide();
+            $('#form_wizard_agent .button-submit').click(function () {
+                alert('Finished! Hope you like it :)');
+            }).hide();
+        }
+
+    };
+
+}();
diff --git a/public/assets/scripts/global/layout.js b/public/assets/scripts/global/layout.js
new file mode 100644
index 0000000..0e45e7c
--- /dev/null
+++ b/public/assets/scripts/global/layout.js
@@ -0,0 +1,608 @@
+/**
+Core script to handle the entire theme and core functions
+**/
+var Layout = function() {
+
+  var layoutImgPath = 'img/';
+
+  var layoutCssPath = 'css/';
+
+  var resBreakpointMd = Metronic.getResponsiveBreakpoint('md');
+
+  //* BEGIN:CORE HANDLERS *//
+  // this function handles responsive layout on screen size resize or mobile device rotate.
+
+  // Set proper height for sidebar and content. The content and sidebar height must be synced always.
+  var handleSidebarAndContentHeight = function() {
+    var content = $('.page-content');
+    var sidebar = $('.page-sidebar');
+    var body = $('body');
+    var height;
+
+    if (body.hasClass("page-footer-fixed") === true && body.hasClass("page-sidebar-fixed") === false) {
+      var available_height = Metronic.getViewPort().height - $('.page-footer').outerHeight() - $('.page-header').outerHeight();
+      if (content.height() < available_height) {
+        content.attr('style', 'min-height:' + available_height + 'px');
+      }
+    } else {
+      if (body.hasClass('page-sidebar-fixed')) {
+        height = _calculateFixedSidebarViewportHeight();
+        if (body.hasClass('page-footer-fixed') === false) {
+          height = height - $('.page-footer').outerHeight();
+        }
+      } else {
+        var headerHeight = $('.page-header').outerHeight();
+        var footerHeight = $('.page-footer').outerHeight();
+
+        if (Metronic.getViewPort().width < resBreakpointMd) {
+          height = Metronic.getViewPort().height - headerHeight - footerHeight;
+        } else {
+          height = sidebar.height() + 20;
+        }
+
+        if ((height + headerHeight + footerHeight) <= Metronic.getViewPort().height) {
+          height = Metronic.getViewPort().height - headerHeight - footerHeight;
+        }
+      }
+      content.attr('style', 'min-height:' + height + 'px');
+    }
+  };
+
+  // Handle sidebar menu links
+  var handleSidebarMenuActiveLink = function(mode, el) {
+    var url = location.hash.toLowerCase();
+
+    var menu = $('.page-sidebar-menu');
+
+    if (mode === 'click' || mode === 'set') {
+      el = $(el);
+    } else if (mode === 'match') {
+      menu.find("li > a").each(function() {
+        var path = $(this).attr("href").toLowerCase();
+        // url match condition
+        if (path.length > 1 && url.substr(1, path.length - 1) == path.substr(1)) {
+          el = $(this);
+          return;
+        }
+      });
+    }
+
+    if (!el || el.size() == 0) {
+      return;
+    }
+
+    if (el.attr('href').toLowerCase() === 'javascript:;' || el.attr('href').toLowerCase() === '#') {
+      return;
+    }
+
+    var slideSpeed = parseInt(menu.data("slide-speed"));
+    var keepExpand = menu.data("keep-expanded");
+
+    // disable active states
+    menu.find('li.active').removeClass('active');
+    menu.find('li > a > .selected').remove();
+
+    if (menu.hasClass('page-sidebar-menu-hover-submenu') === false) {
+      menu.find('li.open').each(function() {
+        if ($(this).children('.sub-menu').size() === 0) {
+          $(this).removeClass('open');
+          $(this).find('> a > .arrow.open').removeClass('open');
+        }
+      });
+    } else {
+      menu.find('li.open').removeClass('open');
+    }
+
+    el.parents('li').each(function() {
+      $(this).addClass('active');
+      $(this).find('> a > span.arrow').addClass('open');
+
+      if ($(this).parent('ul.page-sidebar-menu').size() === 1) {
+        $(this).find('> a').append('<span class="selected"></span>');
+      }
+
+      if ($(this).children('ul.sub-menu').size() === 1) {
+        $(this).addClass('open');
+      }
+    });
+
+    if (mode === 'click') {
+      if (Metronic.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass("in")) { // close the menu on mobile view while laoding a page
+        $('.page-header .responsive-toggler').click();
+      }
+    }
+  };
+
+  // Handle sidebar menu
+  var handleSidebarMenu = function() {
+    // handle sidebar link click
+    jQuery('.page-sidebar').on('click', 'li > a', function(e) {
+      var hasSubMenu = $(this).next().hasClass('sub-menu');
+
+      if (Metronic.getViewPort().width >= resBreakpointMd && $(this).parents('.page-sidebar-menu-hover-submenu').size() === 1) { // exit of hover sidebar menu
+        return;
+      }
+
+      if (hasSubMenu === false) {
+        if (Metronic.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass("in")) { // close the menu on mobile view while laoding a page
+          $('.page-header .responsive-toggler').click();
+        }
+        return;
+      }
+
+      if ($(this).next().hasClass('sub-menu always-open')) {
+        return;
+      }
+
+      var parent = $(this).parent().parent();
+      var the = $(this);
+      var menu = $('.page-sidebar-menu');
+      var sub = jQuery(this).next();
+
+      var autoScroll = menu.data("auto-scroll");
+      var slideSpeed = parseInt(menu.data("slide-speed"));
+      var keepExpand = menu.data("keep-expanded");
+
+      if (keepExpand !== true) {
+        parent.children('li.open').children('a').children('.arrow').removeClass('open');
+        parent.children('li.open').children('.sub-menu:not(.always-open)').slideUp(slideSpeed);
+        parent.children('li.open').removeClass('open');
+      }
+
+      var slideOffeset = -200;
+
+      if (sub.is(":visible")) {
+        jQuery('.arrow', jQuery(this)).removeClass("open");
+        jQuery(this).parent().removeClass("open");
+        sub.slideUp(slideSpeed, function() {
+          if (autoScroll === true && $('body').hasClass('page-sidebar-closed') === false) {
+            if ($('body').hasClass('page-sidebar-fixed')) {
+              menu.slimScroll({
+                'scrollTo': (the.position()).top
+              });
+            } else {
+              Metronic.scrollTo(the, slideOffeset);
+            }
+          }
+          handleSidebarAndContentHeight();
+        });
+      } else if (hasSubMenu) {
+        jQuery('.arrow', jQuery(this)).addClass("open");
+        jQuery(this).parent().addClass("open");
+        sub.slideDown(slideSpeed, function() {
+          if (autoScroll === true && $('body').hasClass('page-sidebar-closed') === false) {
+            if ($('body').hasClass('page-sidebar-fixed')) {
+              menu.slimScroll({
+                'scrollTo': (the.position()).top
+              });
+            } else {
+              Metronic.scrollTo(the, slideOffeset);
+            }
+          }
+          handleSidebarAndContentHeight();
+        });
+      }
+
+      e.preventDefault();
+    });
+
+    // handle ajax links within sidebar menu
+    jQuery('.page-sidebar').on('click', ' li > a.ajaxify', function(e) {
+      e.preventDefault();
+      Metronic.scrollTop();
+
+      var url = $(this).attr("href");
+      var menuContainer = jQuery('.page-sidebar ul');
+      var pageContent = $('.page-content');
+      var pageContentBody = $('.page-content .page-content-body');
+
+      menuContainer.children('li.active').removeClass('active');
+      menuContainer.children('arrow.open').removeClass('open');
+
+      $(this).parents('li').each(function() {
+        $(this).addClass('active');
+        $(this).children('a > span.arrow').addClass('open');
+      });
+      $(this).parents('li').addClass('active');
+
+      if (Metronic.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass("in")) { // close the menu on mobile view while laoding a page
+        $('.page-header .responsive-toggler').click();
+      }
+
+      Metronic.startPageLoading();
+
+      var the = $(this);
+
+      $.ajax({
+        type: "GET",
+        cache: false,
+        url: url,
+        dataType: "html",
+        success: function(res) {
+          if (the.parents('li.open').size() === 0) {
+            $('.page-sidebar-menu > li.open > a').click();
+          }
+
+          Metronic.stopPageLoading();
+          pageContentBody.html(res);
+          Layout.fixContentHeight(); // fix content height
+          Metronic.initAjax(); // initialize core stuff
+        },
+        error: function(xhr, ajaxOptions, thrownError) {
+          Metronic.stopPageLoading();
+          pageContentBody.html('<h4>Could not load the requested content.</h4>');
+        }
+      });
+    });
+
+    // handle ajax link within main content
+    jQuery('.page-content').on('click', '.ajaxify', function(e) {
+      e.preventDefault();
+      Metronic.scrollTop();
+
+      var url = $(this).attr("href");
+      var pageContent = $('.page-content');
+      var pageContentBody = $('.page-content .page-content-body');
+
+      Metronic.startPageLoading();
+
+      if (Metronic.getViewPort().width < resBreakpointMd && $('.page-sidebar').hasClass("in")) { // close the menu on mobile view while laoding a page
+        $('.page-header .responsive-toggler').click();
+      }
+
+      $.ajax({
+        type: "GET",
+        cache: false,
+        url: url,
+        dataType: "html",
+        success: function(res) {
+          Metronic.stopPageLoading();
+          pageContentBody.html(res);
+          Layout.fixContentHeight(); // fix content height
+          Metronic.initAjax(); // initialize core stuff
+        },
+        error: function(xhr, ajaxOptions, thrownError) {
+          pageContentBody.html('<h4>Could not load the requested content.</h4>');
+          Metronic.stopPageLoading();
+        }
+      });
+    });
+
+    // handle sidebar hover effect
+    handleFixedSidebarHoverEffect();
+
+    // handle the search bar close
+    $('.page-sidebar').on('click', '.sidebar-search .remove', function(e) {
+      e.preventDefault();
+      $('.sidebar-search').removeClass("open");
+    });
+
+    // handle the search query submit on enter press
+    $('.page-sidebar .sidebar-search').on('keypress', 'input.form-control', function(e) {
+      if (e.which == 13) {
+        $('.sidebar-search').submit();
+        return false; //<---- Add this line
+      }
+    });
+
+    // handle the search submit(for sidebar search and responsive mode of the header search)
+    $('.sidebar-search .submit').on('click', function(e) {
+      e.preventDefault();
+      if ($('body').hasClass("page-sidebar-closed")) {
+        if ($('.sidebar-search').hasClass('open') === false) {
+          if ($('.page-sidebar-fixed').size() === 1) {
+            $('.page-sidebar .sidebar-toggler').click(); //trigger sidebar toggle button
+          }
+          $('.sidebar-search').addClass("open");
+        } else {
+          $('.sidebar-search').submit();
+        }
+      } else {
+        $('.sidebar-search').submit();
+      }
+    });
+
+    // handle close on body click
+    if ($('.sidebar-search').size() !== 0) {
+      $('.sidebar-search .input-group').on('click', function(e) {
+        e.stopPropagation();
+      });
+
+      $('body').on('click', function() {
+        if ($('.sidebar-search').hasClass('open')) {
+          $('.sidebar-search').removeClass("open");
+        }
+      });
+    }
+  };
+
+  // Helper function to calculate sidebar height for fixed sidebar layout.
+  var _calculateFixedSidebarViewportHeight = function() {
+    var sidebarHeight = Metronic.getViewPort().height - $('.page-header').outerHeight();
+    if ($('body').hasClass("page-footer-fixed")) {
+      sidebarHeight = sidebarHeight - $('.page-footer').outerHeight();
+    }
+
+    return sidebarHeight;
+  };
+
+  // Handles fixed sidebar
+  var handleFixedSidebar = function() {
+    var menu = $('.page-sidebar-menu');
+
+    Metronic.destroySlimScroll(menu);
+
+    if ($('.page-sidebar-fixed').size() === 0) {
+      handleSidebarAndContentHeight();
+      return;
+    }
+
+    if (Metronic.getViewPort().width >= resBreakpointMd) {
+      menu.attr("data-height", _calculateFixedSidebarViewportHeight());
+      Metronic.initSlimScroll(menu);
+      handleSidebarAndContentHeight();
+    }
+  };
+
+  // Handles sidebar toggler to close/hide the sidebar.
+  var handleFixedSidebarHoverEffect = function() {
+    var body = $('body');
+    if (body.hasClass('page-sidebar-fixed')) {
+      $('.page-sidebar').on('mouseenter', function() {
+        if (body.hasClass('page-sidebar-closed')) {
+          $(this).find('.page-sidebar-menu').removeClass('page-sidebar-menu-closed');
+        }
+      }).on('mouseleave', function() {
+        if (body.hasClass('page-sidebar-closed')) {
+          $(this).find('.page-sidebar-menu').addClass('page-sidebar-menu-closed');
+        }
+      });
+    }
+  };
+
+  // Hanles sidebar toggler
+  var handleSidebarToggler = function() {
+    var body = $('body');
+    if ($.cookie && $.cookie('sidebar_closed') === '1' && Metronic.getViewPort().width >= resBreakpointMd) {
+      $('body').addClass('page-sidebar-closed');
+      $('.page-sidebar-menu').addClass('page-sidebar-menu-closed');
+    } else {
+      if ($.cookie) {
+        $.cookie('sidebar_closed', '0');
+      }
+    }
+
+    // handle sidebar show/hide
+    $('body').on('click', '.sidebar-toggler', function(e) {
+      var sidebar = $('.page-sidebar');
+      var sidebarMenu = $('.page-sidebar-menu');
+      $(".sidebar-search", sidebar).removeClass("open");
+
+      if (body.hasClass("page-sidebar-closed")) {
+        body.removeClass("page-sidebar-closed");
+        sidebarMenu.removeClass("page-sidebar-menu-closed");
+        if ($.cookie) {
+          $.cookie('sidebar_closed', '0');
+        }
+      } else {
+        body.addClass("page-sidebar-closed");
+        sidebarMenu.addClass("page-sidebar-menu-closed");
+        if (body.hasClass("page-sidebar-fixed")) {
+          sidebarMenu.trigger("mouseleave");
+        }
+        if ($.cookie) {
+          $.cookie('sidebar_closed', '1');
+        }
+      }
+
+      $(window).trigger('resize');
+    });
+  };
+
+  // Handles the horizontal menu
+  var handleHorizontalMenu = function() {
+    //handle tab click
+    $('.page-header').on('click', '.hor-menu a[data-toggle="tab"]', function(e) {
+      e.preventDefault();
+      var nav = $(".hor-menu .nav");
+      var active_link = nav.find('li.current');
+      $('li.active', active_link).removeClass("active");
+      $('.selected', active_link).remove();
+      var new_link = $(this).parents('li').last();
+      new_link.addClass("current");
+      new_link.find("a:first").append('<span class="selected"></span>');
+    });
+
+    // handle search box expand/collapse
+    $('.page-header').on('click', '.search-form', function(e) {
+      $(this).addClass("open");
+      $(this).find('.form-control').focus();
+
+      $('.page-header .search-form .form-control').on('blur', function(e) {
+        $(this).closest('.search-form').removeClass("open");
+        $(this).unbind("blur");
+      });
+    });
+
+    // handle hor menu search form on enter press
+    $('.page-header').on('keypress', '.hor-menu .search-form .form-control', function(e) {
+      if (e.which == 13) {
+        $(this).closest('.search-form').submit();
+        return false;
+      }
+    });
+
+    // handle header search button click
+    $('.page-header').on('mousedown', '.search-form.open .submit', function(e) {
+      e.preventDefault();
+      e.stopPropagation();
+      $(this).closest('.search-form').submit();
+    });
+
+    // handle hover dropdown menu for desktop devices only
+    $('[data-hover="megamenu-dropdown"]').not('.hover-initialized').each(function() {
+      $(this).dropdownHover();
+      $(this).addClass('hover-initialized');
+    });
+
+    $(document).on('click', '.mega-menu-dropdown .dropdown-menu', function(e) {
+      e.stopPropagation();
+    });
+  };
+
+  // Handles Bootstrap Tabs.
+  var handleTabs = function() {
+    // fix content height on tab click
+    $('body').on('shown.bs.tab', 'a[data-toggle="tab"]', function() {
+      handleSidebarAndContentHeight();
+    });
+  };
+
+  // Handles the go to top button at the footer
+  var handleGoTop = function() {
+    var offset = 300;
+    var duration = 500;
+
+    if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) { // ios supported
+      $(window).bind("touchend touchcancel touchleave", function(e) {
+        if ($(this).scrollTop() > offset) {
+          $('.scroll-to-top').fadeIn(duration);
+        } else {
+          $('.scroll-to-top').fadeOut(duration);
+        }
+      });
+    } else { // general
+      $(window).scroll(function() {
+        if ($(this).scrollTop() > offset) {
+          $('.scroll-to-top').fadeIn(duration);
+        } else {
+          $('.scroll-to-top').fadeOut(duration);
+        }
+      });
+    }
+
+    $('.scroll-to-top').click(function(e) {
+      e.preventDefault();
+      $('html, body').animate({
+        scrollTop: 0
+      }, duration);
+      return false;
+    });
+  };
+
+  // Hanlde 100% height elements(block, portlet, etc)
+  var handle100HeightContent = function() {
+
+    var target = $('.full-height-content');
+    var height;
+
+    height = Metronic.getViewPort().height -
+      $('.page-header').outerHeight(true) -
+      $('.page-footer').outerHeight(true) -
+      $('.page-title').outerHeight(true) -
+      $('.page-bar').outerHeight(true);
+
+    if (target.hasClass('portlet')) {
+      var portletBody = target.find('.portlet-body');
+
+      if (Metronic.getViewPort().width < resBreakpointMd) {
+        Metronic.destroySlimScroll(portletBody.find('.full-height-content-body')); // destroy slimscroll
+        return;
+      }
+
+      height = height -
+        target.find('.portlet-title').outerHeight(true) -
+        parseInt(target.find('.portlet-body').css('padding-top')) -
+        parseInt(target.find('.portlet-body').css('padding-bottom')) - 2;
+
+      if (target.hasClass("full-height-content-scrollable")) {
+        height = height - 35;
+        portletBody.find('.full-height-content-body').css('height', height);
+        Metronic.initSlimScroll(portletBody.find('.full-height-content-body'));
+      } else {
+        portletBody.css('min-height', height);
+      }
+    } else {
+      if (Metronic.getViewPort().width < resBreakpointMd) {
+        Metronic.destroySlimScroll(target.find('.full-height-content-body')); // destroy slimscroll
+        return;
+      }
+
+      if (target.hasClass("full-height-content-scrollable")) {
+        height = height - 35;
+        target.find('.full-height-content-body').css('height', height);
+        Metronic.initSlimScroll(target.find('.full-height-content-body'));
+      } else {
+        target.css('min-height', height);
+      }
+    }
+  };
+  //* END:CORE HANDLERS *//
+
+  return {
+    // Main init methods to initialize the layout
+    //IMPORTANT!!!: Do not modify the core handlers call order.
+
+    initHeader: function() {
+      handleHorizontalMenu(); // handles horizontal menu
+    },
+
+    setSidebarMenuActiveLink: function(mode, el) {
+      handleSidebarMenuActiveLink(mode, el);
+    },
+
+    initSidebar: function() {
+      //layout handlers
+      handleFixedSidebar(); // handles fixed sidebar menu
+      handleSidebarMenu(); // handles main menu
+      handleSidebarToggler(); // handles sidebar hide/show
+
+      if (Metronic.isAngularJsApp()) {
+        handleSidebarMenuActiveLink('match'); // init sidebar active links
+      }
+
+      Metronic.addResizeHandler(handleFixedSidebar); // reinitialize fixed sidebar on window resize
+    },
+
+    initContent: function() {
+      handle100HeightContent(); // handles 100% height elements(block, portlet, etc)
+      handleTabs(); // handle bootstrah tabs
+
+      Metronic.addResizeHandler(handleSidebarAndContentHeight); // recalculate sidebar & content height on window resize
+      Metronic.addResizeHandler(handle100HeightContent); // reinitialize content height on window resize
+    },
+
+    initFooter: function() {
+      handleGoTop(); //handles scroll to top functionality in the footer
+    },
+
+    init: function() {
+      this.initHeader();
+      this.initSidebar();
+      this.initContent();
+      this.initFooter();
+    },
+
+    //public function to fix the sidebar and content height accordingly
+    fixContentHeight: function() {
+      handleSidebarAndContentHeight();
+    },
+
+    initFixedSidebarHoverEffect: function() {
+      handleFixedSidebarHoverEffect();
+    },
+
+    initFixedSidebar: function() {
+      handleFixedSidebar();
+    },
+
+    getLayoutImgPath: function() {
+      return Metronic.getAssetsPath() + layoutImgPath;
+    },
+
+    getLayoutCssPath: function() {
+      return Metronic.getAssetsPath() + layoutCssPath;
+    }
+  };
+
+}();
diff --git a/public/assets/scripts/global/metronic.js b/public/assets/scripts/global/metronic.js
new file mode 100644
index 0000000..6cc5e7c
--- /dev/null
+++ b/public/assets/scripts/global/metronic.js
@@ -0,0 +1,953 @@
+/**
+Core script to handle the entire theme and core functions
+**/
+var Metronic = function() {
+
+  // IE mode
+  var isRTL = false;
+  var isIE8 = false;
+  var isIE9 = false;
+  var isIE10 = false;
+
+  var resizeHandlers = [];
+
+  var assetsPath = 'assets/';
+
+  var globalImgPath = 'img/';
+
+  var globalPluginsPath = 'plugins/';
+
+  var globalCssPath = 'css/';
+
+  // theme layout color set
+
+  var brandColors = {
+    'blue': '#89C4F4',
+    'red': '#F3565D',
+    'green': '#1bbc9b',
+    'purple': '#9b59b6',
+    'grey': '#95a5a6',
+    'yellow': '#F8CB00'
+  };
+
+  // initializes main settings
+  var handleInit = function() {
+
+    if ($('body').css('direction') === 'rtl') {
+      isRTL = true;
+    }
+
+    isIE8 = !!navigator.userAgent.match(/MSIE 8.0/);
+    isIE9 = !!navigator.userAgent.match(/MSIE 9.0/);
+    isIE10 = !!navigator.userAgent.match(/MSIE 10.0/);
+
+    if (isIE10) {
+      $('html').addClass('ie10'); // detect IE10 version
+    }
+
+    if (isIE10 || isIE9 || isIE8) {
+      $('html').addClass('ie'); // detect IE10 version
+    }
+  };
+
+  // runs callback functions set by Metronic.addResponsiveHandler().
+  var _runResizeHandlers = function() {
+    // reinitialize other subscribed elements
+    for (var i = 0; i < resizeHandlers.length; i++) {
+      var each = resizeHandlers[i];
+      each.call();
+    }
+  };
+
+  // handle the layout reinitialization on window resize
+  var handleOnResize = function() {
+    var resize;
+    if (isIE8) {
+      var currheight;
+      $(window).resize(function() {
+        if (currheight == document.documentElement.clientHeight) {
+          return; //quite event since only body resized not window.
+        }
+        if (resize) {
+          clearTimeout(resize);
+        }
+        resize = setTimeout(function() {
+          _runResizeHandlers();
+        }, 50); // wait 50ms until window resize finishes.
+        currheight = document.documentElement.clientHeight; // store last body client height
+      });
+    } else {
+      $(window).resize(function() {
+        if (resize) {
+          clearTimeout(resize);
+        }
+        resize = setTimeout(function() {
+          _runResizeHandlers();
+        }, 50); // wait 50ms until window resize finishes.
+      });
+    }
+  };
+
+  // Handles portlet tools & actions
+  var handlePortletTools = function() {
+    // handle portlet remove
+    $('body').on('click', '.portlet > .portlet-title > .tools > a.remove',
+      function(e) {
+        e.preventDefault();
+        var portlet = $(this).closest(".portlet");
+
+        if ($('body').hasClass('page-portlet-fullscreen')) {
+          $('body').removeClass('page-portlet-fullscreen');
+        }
+
+        portlet.find('.portlet-title .fullscreen').tooltip('destroy');
+        portlet.find('.portlet-title > .tools > .reload').tooltip(
+          'destroy');
+        portlet.find('.portlet-title > .tools > .remove').tooltip(
+          'destroy');
+        portlet.find('.portlet-title > .tools > .config').tooltip(
+          'destroy');
+        portlet.find(
+          '.portlet-title > .tools > .collapse, .portlet > .portlet-title > .tools > .expand'
+        ).tooltip('destroy');
+
+        portlet.remove();
+      });
+
+    // handle portlet fullscreen
+    $('body').on('click', '.portlet > .portlet-title .fullscreen', function(
+      e) {
+      e.preventDefault();
+      var portlet = $(this).closest(".portlet");
+      if (portlet.hasClass('portlet-fullscreen')) {
+        $(this).removeClass('on');
+        portlet.removeClass('portlet-fullscreen');
+        $('body').removeClass('page-portlet-fullscreen');
+        portlet.children('.portlet-body').css('height', 'auto');
+      } else {
+        var height = Metronic.getViewPort().height -
+          portlet.children('.portlet-title').outerHeight() -
+          parseInt(portlet.children('.portlet-body').css('padding-top')) -
+          parseInt(portlet.children('.portlet-body').css(
+            'padding-bottom'));
+
+        $(this).addClass('on');
+        portlet.addClass('portlet-fullscreen');
+        $('body').addClass('page-portlet-fullscreen');
+        portlet.children('.portlet-body').css('height', height);
+      }
+    });
+
+    $('body').on('click', '.portlet > .portlet-title > .tools > a.reload',
+      function(e) {
+        e.preventDefault();
+        var el = $(this).closest(".portlet").children(".portlet-body");
+        var url = $(this).attr("data-url");
+        var error = $(this).attr("data-error-display");
+        if (url) {
+          Metronic.blockUI({
+            target: el,
+            animate: true,
+            overlayColor: 'none'
+          });
+          $.ajax({
+            type: "GET",
+            cache: false,
+            url: url,
+            dataType: "html",
+            success: function(res) {
+              Metronic.unblockUI(el);
+              el.html(res);
+            },
+            error: function(xhr, ajaxOptions, thrownError) {
+              Metronic.unblockUI(el);
+              var msg =
+                'Error on reloading the content. Please check your connection and try again.';
+              if (error == "toastr" && toastr) {
+                toastr.error(msg);
+              } else if (error == "notific8" && $.notific8) {
+                $.notific8('zindex', 11500);
+                $.notific8(msg, {
+                  theme: 'ruby',
+                  life: 3000
+                });
+              } else {
+                alert(msg);
+              }
+            }
+          });
+        } else {
+          // for demo purpose
+          Metronic.blockUI({
+            target: el,
+            animate: true,
+            overlayColor: 'none'
+          });
+          window.setTimeout(function() {
+            Metronic.unblockUI(el);
+          }, 1000);
+        }
+      });
+
+    // load ajax data on page init
+    $('.portlet .portlet-title a.reload[data-load="true"]').click();
+
+    $('body').on('click',
+      '.portlet > .portlet-title > .tools > .collapse, .portlet .portlet-title > .tools > .expand',
+      function(e) {
+        e.preventDefault();
+        // var el = $(this).closest(".portlet").children(".portlet-body");
+        // if ($(this).hasClass("collapse")) {
+        //   $(this).removeClass("collapse").addClass("expand");
+        //   el.slideUp(200);
+        // } else {
+        //   $(this).removeClass("expand").addClass("collapse");
+        //   el.slideDown(200);
+        // }
+      });
+  };
+
+  // Handles custom checkboxes & radios using jQuery Uniform plugin
+  var handleUniform = function() {
+    if (!$().uniform) {
+      return;
+    }
+    var test = $(
+      "input[type=checkbox]:not(.toggle, .make-switch, .icheck), input[type=radio]:not(.toggle, .star, .make-switch, .icheck)"
+    );
+    if (test.size() > 0) {
+      test.each(function() {
+        if ($(this).parents(".checker").size() === 0) {
+          $(this).show();
+          // $(this).uniform();
+        }
+      });
+    }
+  };
+
+  // Handles custom checkboxes & radios using jQuery iCheck plugin
+  var handleiCheck = function() {
+    if (!$().iCheck) {
+      return;
+    }
+
+    $('.icheck').each(function() {
+      var checkboxClass = $(this).attr('data-checkbox') ? $(this).attr(
+        'data-checkbox') : 'icheckbox_minimal-grey';
+      var radioClass = $(this).attr('data-radio') ? $(this).attr(
+        'data-radio') : 'iradio_minimal-grey';
+
+      if (checkboxClass.indexOf('_line') > -1 || radioClass.indexOf(
+          '_line') > -1) {
+        $(this).iCheck({
+          checkboxClass: checkboxClass,
+          radioClass: radioClass,
+          insert: '<div class="icheck_line-icon"></div>' + $(this).attr(
+            "data-label")
+        });
+      } else {
+        $(this).iCheck({
+          checkboxClass: checkboxClass,
+          radioClass: radioClass
+        });
+      }
+    });
+  };
+
+  // Handles Bootstrap switches
+  var handleBootstrapSwitch = function() {
+    if (!$().bootstrapSwitch) {
+      return;
+    }
+    $('.make-switch').bootstrapSwitch();
+  };
+
+  // Handles Bootstrap confirmations
+  var handleBootstrapConfirmation = function() {
+    if (!$().confirmation) {
+      return;
+    }
+    $('[data-toggle=confirmation]').confirmation({
+      container: 'body',
+      btnOkClass: 'btn-xs btn-success',
+      btnCancelClass: 'btn-xs btn-danger'
+    });
+  }
+
+  // Handles Bootstrap Accordions.
+  var handleAccordions = function() {
+    $('body').on('shown.bs.collapse', '.accordion.scrollable', function(e) {
+      Metronic.scrollTo($(e.target));
+    });
+  };
+
+  // Handles Bootstrap Tabs.
+  var handleTabs = function() {
+    //activate tab if tab id provided in the URL
+    if (location.hash) {
+      var tabid = location.hash.substr(1);
+      $('a[href="#' + tabid + '"]').parents('.tab-pane:hidden').each(
+        function() {
+          var tabid = $(this).attr("id");
+          $('a[href="#' + tabid + '"]').click();
+        });
+      $('a[href="#' + tabid + '"]').click();
+    }
+  };
+
+  // Handles Bootstrap Modals.
+  var handleModals = function() {
+    // fix stackable modal issue: when 2 or more modals opened, closing one of modal will remove .modal-open class.
+    $('body').on('hide.bs.modal', function() {
+      if ($('.modal:visible').size() > 1 && $('html').hasClass(
+          'modal-open') === false) {
+        $('html').addClass('modal-open');
+      } else if ($('.modal:visible').size() <= 1) {
+        $('html').removeClass('modal-open');
+      }
+    });
+
+    // fix page scrollbars issue
+    $('body').on('show.bs.modal', '.modal', function() {
+      if ($(this).hasClass("modal-scroll")) {
+        $('body').addClass("modal-open-noscroll");
+      }
+    });
+
+    // fix page scrollbars issue
+    $('body').on('hide.bs.modal', '.modal', function() {
+      $('body').removeClass("modal-open-noscroll");
+    });
+
+    // remove ajax content and remove cache on modal closed
+    $('body').on('hidden.bs.modal', '.modal:not(.modal-cached)', function() {
+      $(this).removeData('bs.modal');
+    });
+  };
+
+  // Handles Bootstrap Tooltips.
+  var handleTooltips = function() {
+    // global tooltips
+    $('.tooltips').tooltip();
+
+    // portlet tooltips
+    $('.portlet > .portlet-title .fullscreen').tooltip({
+      container: 'body',
+      title: 'Fullscreen'
+    });
+    $('.portlet > .portlet-title > .tools > .reload').tooltip({
+      container: 'body',
+      title: 'Reload'
+    });
+    $('.portlet > .portlet-title > .tools > .remove').tooltip({
+      container: 'body',
+      title: 'Remove'
+    });
+    $('.portlet > .portlet-title > .tools > .config').tooltip({
+      container: 'body',
+      title: 'Settings'
+    });
+    $(
+      '.portlet > .portlet-title > .tools > .collapse, .portlet > .portlet-title > .tools > .expand'
+    ).tooltip({
+      container: 'body',
+      title: 'Collapse/Expand'
+    });
+  };
+
+  // Handles Bootstrap Dropdowns
+  var handleDropdowns = function() {
+    /*
+      Hold dropdown on click
+    */
+    $('body').on('click', '.dropdown-menu.hold-on-click', function(e) {
+      e.stopPropagation();
+    });
+  };
+
+  var handleAlerts = function() {
+    $('body').on('click', '[data-close="alert"]', function(e) {
+      $(this).parent('.alert').hide();
+      $(this).closest('.note').hide();
+      e.preventDefault();
+    });
+
+    $('body').on('click', '[data-close="note"]', function(e) {
+      $(this).closest('.note').hide();
+      e.preventDefault();
+    });
+
+    $('body').on('click', '[data-remove="note"]', function(e) {
+      $(this).closest('.note').remove();
+      e.preventDefault();
+    });
+  };
+
+  // Handle Hower Dropdowns
+  var handleDropdownHover = function() {
+    $('[data-hover="dropdown"]').not('.hover-initialized').each(function() {
+      $(this).dropdownHover();
+      $(this).addClass('hover-initialized');
+    });
+  };
+
+  // Handles Bootstrap Popovers
+
+  // last popep popover
+  var lastPopedPopover;
+
+  var handlePopovers = function() {
+    $('.popovers').popover();
+
+    // close last displayed popover
+
+    $(document).on('click.bs.popover.data-api', function(e) {
+      if (lastPopedPopover) {
+        lastPopedPopover.popover('hide');
+      }
+    });
+  };
+
+  // Handles scrollable contents using jQuery SlimScroll plugin.
+  var handleScrollers = function() {
+    Metronic.initSlimScroll('.scroller');
+  };
+
+  // Handles Image Preview using jQuery Fancybox plugin
+  var handleFancybox = function() {
+    if (!jQuery.fancybox) {
+      return;
+    }
+
+    if ($(".fancybox-button").size() > 0) {
+      $(".fancybox-button").fancybox({
+        groupAttr: 'data-rel',
+        prevEffect: 'none',
+        nextEffect: 'none',
+        closeBtn: true,
+        helpers: {
+          title: {
+            type: 'inside'
+          }
+        }
+      });
+    }
+  };
+
+  // Fix input placeholder issue for IE8 and IE9
+  var handleFixInputPlaceholderForIE = function() {
+    //fix html5 placeholder attribute for ie7 & ie8
+    if (isIE8 || isIE9) { // ie8 & ie9
+      // this is html5 placeholder fix for inputs, inputs with placeholder-no-fix class will be skipped(e.g: we need this for password fields)
+      $(
+        'input[placeholder]:not(.placeholder-no-fix), textarea[placeholder]:not(.placeholder-no-fix)'
+      ).each(function() {
+        var input = $(this);
+
+        if (input.val() === '' && input.attr("placeholder") !== '') {
+          input.addClass("placeholder").val(input.attr('placeholder'));
+        }
+
+        input.focus(function() {
+          if (input.val() == input.attr('placeholder')) {
+            input.val('');
+          }
+        });
+
+        input.blur(function() {
+          if (input.val() === '' || input.val() == input.attr(
+              'placeholder')) {
+            input.val(input.attr('placeholder'));
+          }
+        });
+      });
+    }
+  };
+
+  // Handle Select2 Dropdowns
+  var handleSelect2 = function() {
+    if ($().select2) {
+      $('.select2me').select2({
+        placeholder: "Select",
+        // allowClear: true
+      });
+    }
+  };
+
+  //* END:CORE HANDLERS *//
+
+  return {
+
+    //main function to initiate the theme
+    init: function() {
+      //IMPORTANT!!!: Do not modify the core handlers call order.
+
+      //Core handlers
+      handleInit(); // initialize core variables
+      handleOnResize(); // set and handle responsive
+
+      //UI Component handlers
+      handleUniform(); // hanfle custom radio & checkboxes
+      handleiCheck(); // handles custom icheck radio and checkboxes
+      handleBootstrapSwitch(); // handle bootstrap switch plugin
+      handleScrollers(); // handles slim scrolling contents
+      handleFancybox(); // handle fancy box
+      handleSelect2(); // handle custom Select2 dropdowns
+      handlePortletTools(); // handles portlet action bar functionality(refresh, configure, toggle, remove)
+      handleAlerts(); //handle closabled alerts
+      handleDropdowns(); // handle dropdowns
+      handleTabs(); // handle tabs
+      handleTooltips(); // handle bootstrap tooltips
+      handlePopovers(); // handles bootstrap popovers
+      handleAccordions(); //handles accordions
+      handleModals(); // handle modals
+      handleBootstrapConfirmation(); // handle bootstrap confirmations
+
+      // Hacks
+      handleFixInputPlaceholderForIE(); //IE8 & IE9 input placeholder issue fix
+    },
+
+    //main function to initiate core javascript after ajax complete
+    initAjax: function() {
+      handleUniform(); // handles custom radio & checkboxes
+      handleiCheck(); // handles custom icheck radio and checkboxes
+      handleBootstrapSwitch(); // handle bootstrap switch plugin
+      handleDropdownHover(); // handles dropdown hover
+      handleScrollers(); // handles slim scrolling contents
+      handleSelect2(); // handle custom Select2 dropdowns
+      handleFancybox(); // handle fancy box
+      handleDropdowns(); // handle dropdowns
+      handleTooltips(); // handle bootstrap tooltips
+      handlePopovers(); // handles bootstrap popovers
+      handleAccordions(); //handles accordions
+      handleBootstrapConfirmation(); // handle bootstrap confirmations
+    },
+
+    //init main components
+    initComponents: function() {
+      this.initAjax();
+    },
+
+    //public function to remember last opened popover that needs to be closed on click
+    setLastPopedPopover: function(el) {
+      lastPopedPopover = el;
+    },
+
+    //public function to add callback a function which will be called on window resize
+    addResizeHandler: function(func) {
+      resizeHandlers.push(func);
+    },
+
+    //public functon to call _runresizeHandlers
+    runResizeHandlers: function() {
+      _runResizeHandlers();
+    },
+
+    // wrMetronicer function to scroll(focus) to an element
+    scrollTo: function(el, offeset) {
+      var pos = (el && el.size() > 0) ? el.offset().top : 0;
+
+      if (el) {
+        if ($('body').hasClass('page-header-fixed')) {
+          pos = pos - $('.page-header').height();
+        }
+        pos = pos + (offeset ? offeset : -1 * el.height());
+      }
+
+      $('html,body').animate({
+        scrollTop: pos
+      }, 'slow');
+    },
+
+    initSlimScroll: function(el) {
+      $(el).each(function() {
+        if ($(this).attr("data-initialized")) {
+          return; // exit
+        }
+
+        var height;
+
+        if ($(this).attr("data-height")) {
+          height = $(this).attr("data-height");
+        } else {
+          height = $(this).css('height');
+        }
+
+        $(this).slimScroll({
+          allowPageScroll: true, // allow page scroll when the element scroll is ended
+          size: '7px',
+          color: ($(this).attr("data-handle-color") ? $(this).attr(
+            "data-handle-color") : '#bbb'),
+          wrapperClass: ($(this).attr("data-wrapper-class") ? $(
+            this).attr("data-wrapper-class") : 'slimScrollDiv'),
+          railColor: ($(this).attr("data-rail-color") ? $(this).attr(
+            "data-rail-color") : '#eaeaea'),
+          position: isRTL ? 'left' : 'right',
+          height: height,
+          alwaysVisible: ($(this).attr("data-always-visible") ==
+            "1" ? true : false),
+          railVisible: ($(this).attr("data-rail-visible") == "1" ?
+            true : false),
+          disableFadeOut: true
+        });
+
+        $(this).attr("data-initialized", "1");
+      });
+    },
+
+    destroySlimScroll: function(el) {
+      $(el).each(function() {
+        if ($(this).attr("data-initialized") === "1") { // destroy existing instance before updating the height
+          $(this).removeAttr("data-initialized");
+          $(this).removeAttr("style");
+
+          var attrList = {};
+
+          // store the custom attribures so later we will reassign.
+          if ($(this).attr("data-handle-color")) {
+            attrList["data-handle-color"] = $(this).attr(
+              "data-handle-color");
+          }
+          if ($(this).attr("data-wrapper-class")) {
+            attrList["data-wrapper-class"] = $(this).attr(
+              "data-wrapper-class");
+          }
+          if ($(this).attr("data-rail-color")) {
+            attrList["data-rail-color"] = $(this).attr(
+              "data-rail-color");
+          }
+          if ($(this).attr("data-always-visible")) {
+            attrList["data-always-visible"] = $(this).attr(
+              "data-always-visible");
+          }
+          if ($(this).attr("data-rail-visible")) {
+            attrList["data-rail-visible"] = $(this).attr(
+              "data-rail-visible");
+          }
+
+          $(this).slimScroll({
+            wrapperClass: ($(this).attr("data-wrapper-class") ? $(
+                this).attr("data-wrapper-class") :
+              'slimScrollDiv'),
+            destroy: true
+          });
+
+          var the = $(this);
+
+          // reassign custom attributes
+          $.each(attrList, function(key, value) {
+            the.attr(key, value);
+          });
+
+        }
+      });
+    },
+
+    // function to scroll to the top
+    scrollTop: function() {
+      Metronic.scrollTo();
+    },
+
+    // wrMetronicer function to  block element(indicate loading)
+    blockUI: function(options) {
+      options = $.extend(true, {}, options);
+      var html = '';
+      if (options.animate) {
+        html = '<div class="loading-message ' + (options.boxed ?
+            'loading-message-boxed' : '') + '">' +
+          '<div class="block-spinner-bar"><div class="bounce1"></div><div class="bounce2"></div><div class="bounce3"></div></div>' +
+          '</div>';
+      } else if (options.iconOnly) {
+        html = '<div class="loading-message ' + (options.boxed ?
+            'loading-message-boxed' : '') + '"><img src="' + this.getGlobalImgPath() +
+          'loading-spinner-blue.gif" align=""></div>';
+      } else if (options.textOnly) {
+        html = '<div class="loading-message ' + (options.boxed ?
+            'loading-message-boxed' : '') + '"><span>&nbsp;&nbsp;' + (
+            options.message ? options.message : 'LOADING...') +
+          '</span></div>';
+      } else {
+        html = '<div class="loading-message ' + (options.boxed ?
+            'loading-message-boxed' : '') + '"><img src="' + this.getGlobalImgPath() +
+          'loading-spinner-blue.gif" align=""><span>&nbsp;&nbsp;' +
+          (options.message ? options.message : 'LOADING...') +
+          '</span></div>';
+      }
+
+      if (options.target) { // element blocking
+        var el = $(options.target);
+        if (el.height() <= ($(window).height())) {
+          options.cenrerY = true;
+        }
+        el.block({
+          message: html,
+          baseZ: options.zIndex ? options.zIndex : 1000,
+          centerY: options.cenrerY !== undefined ? options.cenrerY : false,
+          css: {
+            top: '10%',
+            border: '0',
+            padding: '0',
+            backgroundColor: 'none'
+          },
+          overlayCSS: {
+            backgroundColor: options.overlayColor ? options.overlayColor : '#555',
+            opacity: options.boxed ? 0.05 : 0.1,
+            cursor: 'wait'
+          }
+        });
+      } else { // page blocking
+        $.blockUI({
+          message: html,
+          baseZ: options.zIndex ? options.zIndex : 1000,
+          css: {
+            border: '0',
+            padding: '0',
+            backgroundColor: 'none'
+          },
+          overlayCSS: {
+            backgroundColor: options.overlayColor ? options.overlayColor : '#555',
+            opacity: options.boxed ? 0.05 : 0.1,
+            cursor: 'wait'
+          }
+        });
+      }
+    },
+
+    // wrMetronicer function to  un-block element(finish loading)
+    unblockUI: function(target) {
+      if (target) {
+        $(target).unblock({
+          onUnblock: function() {
+            $(target).css('position', '');
+            $(target).css('zoom', '');
+          }
+        });
+      } else {
+        $.unblockUI();
+      }
+    },
+
+    startPageLoading: function(options) {
+      if (options && options.animate) {
+        $('.page-spinner-bar').remove();
+        $('body').append(
+          '<div class="page-spinner-bar"><div class="bounce1"></div><div class="bounce2"></div><div class="bounce3"></div></div>'
+        );
+      } else {
+        $('.page-loading').remove();
+        $('body').append('<div class="page-loading"><img src="' + this.getGlobalImgPath() +
+          'loading-spinner-blue.gif"/>&nbsp;&nbsp;<span>' + (options &&
+            options.message ? options.message :
+            'Loading...') + '</span></div>');
+      }
+    },
+
+    stopPageLoading: function() {
+      $('.page-loading, .page-spinner-bar').remove();
+    },
+
+    alert: function(options) {
+
+      options = $.extend(true, {
+        container: "", // alerts parent container(by default placed after the page breadcrumbs)
+        place: "append", // "append" or "prepend" in container
+        type: 'success', // alert's type
+        message: "", // alert's message
+        close: true, // make alert closable
+        reset: true, // close all previouse alerts first
+        focus: true, // auto scroll to the alert after shown
+        closeInSeconds: 0, // auto close after defined seconds
+        icon: "" // put icon before the message
+      }, options);
+
+      var id = Metronic.getUniqueID("Metronic_alert");
+
+      var html = '<div id="' + id + '" class="Metronic-alerts alert alert-' +
+        options.type + ' fade in">' + (options.close ?
+          '<button type="button" class="close" data-dismiss="alert" aria-hidden="true"></button>' :
+          '') + (options.icon !== "" ? '<i class="fa-lg fa fa-' + options.icon +
+          '"></i>  ' : '') +
+        options.message + '</div>';
+
+      if (options.reset) {
+        $('.Metronic-alerts').remove();
+      }
+
+      if (!options.container) {
+        if ($('body').hasClass("page-container-bg-solid")) {
+          $('.page-title').after(html);
+        } else {
+          if ($('.page-bar').size() > 0) {
+            $('.page-bar').after(html);
+          } else {
+            $('.page-breadcrumb').after(html);
+          }
+        }
+      } else {
+        if (options.place == "append") {
+          $(options.container).append(html);
+        } else {
+          $(options.container).prepend(html);
+        }
+      }
+
+      if (options.focus) {
+        Metronic.scrollTo($('#' + id));
+      }
+
+      if (options.closeInSeconds > 0) {
+        setTimeout(function() {
+          $('#' + id).remove();
+        }, options.closeInSeconds * 1000);
+      }
+
+      return id;
+    },
+
+    // initializes uniform elements
+    initUniform: function(els) {
+      if (els) {
+        $(els).each(function() {
+          if ($(this).parents(".checker").size() === 0) {
+            $(this).show();
+            $(this).uniform();
+          }
+        });
+      } else {
+        handleUniform();
+      }
+    },
+
+    //wrMetronicer function to update/sync jquery uniform checkbox & radios
+    updateUniform: function(els) {
+      $.uniform.update(els); // update the uniform checkbox & radios UI after the actual input control state changed
+    },
+
+    //public function to initialize the fancybox plugin
+    initFancybox: function() {
+      handleFancybox();
+    },
+
+    //public helper function to get actual input value(used in IE9 and IE8 due to placeholder attribute not supported)
+    getActualVal: function(el) {
+      el = $(el);
+      if (el.val() === el.attr("placeholder")) {
+        return "";
+      }
+      return el.val();
+    },
+
+    //public function to get a paremeter by name from URL
+    getURLParameter: function(paramName) {
+      var searchString = window.location.search.substring(1),
+        i, val, params = searchString.split("&");
+
+      for (i = 0; i < params.length; i++) {
+        val = params[i].split("=");
+        if (val[0] == paramName) {
+          return unescape(val[1]);
+        }
+      }
+      return null;
+    },
+
+    // check for device touch support
+    isTouchDevice: function() {
+      try {
+        document.createEvent("TouchEvent");
+        return true;
+      } catch (e) {
+        return false;
+      }
+    },
+
+    // To get the correct viewport width based on  http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/
+    getViewPort: function() {
+      var e = window,
+        a = 'inner';
+      if (!('innerWidth' in window)) {
+        a = 'client';
+        e = document.documentElement || document.body;
+      }
+
+      return {
+        width: e[a + 'Width'],
+        height: e[a + 'Height']
+      };
+    },
+
+    getUniqueID: function(prefix) {
+      return 'prefix_' + Math.floor(Math.random() * (new Date()).getTime());
+    },
+
+    // check IE8 mode
+    isIE8: function() {
+      return isIE8;
+    },
+
+    // check IE9 mode
+    isIE9: function() {
+      return isIE9;
+    },
+
+    //check RTL mode
+    isRTL: function() {
+      return isRTL;
+    },
+
+    // check IE8 mode
+    isAngularJsApp: function() {
+      return (typeof angular == 'undefined') ? false : true;
+    },
+
+    getAssetsPath: function() {
+      return assetsPath;
+    },
+
+    setAssetsPath: function(path) {
+      assetsPath = path;
+    },
+
+    setGlobalImgPath: function(path) {
+      globalImgPath = path;
+    },
+
+    getGlobalImgPath: function() {
+      return assetsPath + globalImgPath;
+    },
+
+    setGlobalPluginsPath: function(path) {
+      globalPluginsPath = path;
+    },
+
+    getGlobalPluginsPath: function() {
+      return assetsPath + globalPluginsPath;
+    },
+
+    getGlobalCssPath: function() {
+      return assetsPath + globalCssPath;
+    },
+
+    // get layout color code by color name
+    getBrandColor: function(name) {
+      if (brandColors[name]) {
+        return brandColors[name];
+      } else {
+        return '';
+      }
+    },
+
+    getResponsiveBreakpoint: function(size) {
+      // bootstrap responsive breakpoints
+      var sizes = {
+        'xs': 480, // extra small
+        'sm': 768, // small
+        'md': 900, // medium
+        'lg': 1200 // large
+      };
+
+      return sizes[size] ? sizes[size] : 0;
+    }
+  };
+
+}();
diff --git a/public/assets/scripts/inbox-fax.js b/public/assets/scripts/inbox-fax.js
new file mode 100644
index 0000000..883011e
--- /dev/null
+++ b/public/assets/scripts/inbox-fax.js
@@ -0,0 +1,332 @@
+var Inbox = function () {
+
+    var content = $('.inbox-content');
+    var loading = $('.inbox-loading');
+    var listListing = '';
+
+    var loadInbox = function (el, name) {
+        var url = 'fax/views/list-inbox.client.view.html';
+        var title = $('.inbox-nav > li.' + name + ' a').attr('data-title');
+        listListing = name;
+
+        loading.show();
+        content.html('');
+        toggleButton(el);
+
+        $.ajax({
+            type: "GET",
+            cache: false,
+            url: url,
+            dataType: "html",
+            success: function(res)
+            {
+                toggleButton(el);
+
+                $('.inbox-nav > li.active').removeClass('active');
+                $('.inbox-nav > li.' + name).addClass('active');
+                $('.inbox-header > h1').text(title);
+
+                loading.hide();
+                content.html(res);
+                if (Layout.fixContentHeight) {
+                    Layout.fixContentHeight();
+                }
+                Metronic.initUniform();
+            },
+            error: function(xhr, ajaxOptions, thrownError)
+            {
+                toggleButton(el);
+            },
+            async: false
+        });
+
+        // handle group checkbox:
+        jQuery('body').on('change', '.mail-group-checkbox', function () {
+            var set = jQuery('.mail-checkbox');
+            var checked = jQuery(this).is(":checked");
+            jQuery(set).each(function () {
+                $(this).attr("checked", checked);
+            });
+            jQuery.uniform.update(set);
+        });
+    };
+
+    var loadMessage = function (el, name, resetMenu) {
+        var url = 'inbox_view.html';
+
+        loading.show();
+        content.html('');
+        toggleButton(el);
+
+        var message_id = el.parent('tr').attr("data-messageid");
+
+        $.ajax({
+            type: "GET",
+            cache: false,
+            url: url,
+            dataType: "html",
+            data: {'message_id': message_id},
+            success: function(res)
+            {
+                toggleButton(el);
+
+                if (resetMenu) {
+                    $('.inbox-nav > li.active').removeClass('active');
+                }
+                $('.inbox-header > h1').text('View Message');
+
+                loading.hide();
+                content.html(res);
+                Layout.fixContentHeight();
+                Metronic.initUniform();
+            },
+            error: function(xhr, ajaxOptions, thrownError)
+            {
+                toggleButton(el);
+            },
+            async: false
+        });
+    };
+
+    var initWysihtml5 = function () {
+        $('.inbox-wysihtml5').wysihtml5({
+            "stylesheets": ["../../assets/global/plugins/bootstrap-wysihtml5/wysiwyg-color.css"]
+        });
+    };
+
+    var initFileupload = function () {
+
+        $('#fileupload').fileupload({
+            // Uncomment the following to send cross-domain cookies:
+            //xhrFields: {withCredentials: true},
+            url: '../../assets/global/plugins/jquery-file-upload/server/php/',
+            autoUpload: true
+        });
+
+        // Upload server status check for browsers with CORS support:
+        if ($.support.cors) {
+            $.ajax({
+                url: '../../assets/global/plugins/jquery-file-upload/server/php/',
+                type: 'HEAD'
+            }).fail(function () {
+                $('<span class="alert alert-error"/>')
+                    .text('Upload server currently unavailable - ' +
+                    new Date())
+                    .appendTo('#fileupload');
+            });
+        }
+    };
+
+    var loadCompose = function (el) {
+        var url = 'fax/views/inbox-fax-compose.client.view.html';
+
+        loading.show();
+        content.html('');
+        toggleButton(el);
+
+        // load the form via ajax
+        $.ajax({
+            type: "GET",
+            cache: false,
+            url: url,
+            dataType: "html",
+            success: function(res)
+            {
+                toggleButton(el);
+
+                $('.inbox-nav > li.active').removeClass('active');
+                $('.inbox-header > h1').text('Compose');
+
+                loading.hide();
+                content.html(res);
+
+                initFileupload();
+                initWysihtml5();
+
+                $('.inbox-wysihtml5').focus();
+                Layout.fixContentHeight();
+                Metronic.initUniform();
+            },
+            error: function(xhr, ajaxOptions, thrownError)
+            {
+                toggleButton(el);
+            },
+            async: false
+        });
+    };
+
+    var loadReply = function (el) {
+        var messageid = $(el).attr("data-messageid");
+        var url = 'inbox_reply.html?messageid=' + messageid;
+
+        loading.show();
+        content.html('');
+        toggleButton(el);
+
+        // load the form via ajax
+        $.ajax({
+            type: "GET",
+            cache: false,
+            url: url,
+            dataType: "html",
+            success: function(res)
+            {
+                toggleButton(el);
+
+                $('.inbox-nav > li.active').removeClass('active');
+                $('.inbox-header > h1').text('Reply');
+
+                loading.hide();
+                content.html(res);
+                $('[name="message"]').val($('#reply_email_content_body').html());
+
+                handleCCInput(); // init "CC" input field
+
+                initFileupload();
+                initWysihtml5();
+                Layout.fixContentHeight();
+                Metronic.initUniform();
+            },
+            error: function(xhr, ajaxOptions, thrownError)
+            {
+                toggleButton(el);
+            },
+            async: false
+        });
+    };
+
+    var loadSearchResults = function (el) {
+        var url = 'inbox_search_result.html';
+
+        loading.show();
+        content.html('');
+        toggleButton(el);
+
+        $.ajax({
+            type: "GET",
+            cache: false,
+            url: url,
+            dataType: "html",
+            success: function(res)
+            {
+                toggleButton(el);
+
+                $('.inbox-nav > li.active').removeClass('active');
+                $('.inbox-header > h1').text('Search');
+
+                loading.hide();
+                content.html(res);
+                Layout.fixContentHeight();
+                Metronic.initUniform();
+            },
+            error: function(xhr, ajaxOptions, thrownError)
+            {
+                toggleButton(el);
+            },
+            async: false
+        });
+    };
+
+    var handleCCInput = function () {
+        var the = $('.inbox-compose .mail-to .inbox-cc');
+        var input = $('.inbox-compose .input-cc');
+        the.hide();
+        input.show();
+        $('.close', input).click(function () {
+            input.hide();
+            the.show();
+        });
+    };
+
+    var handleBCCInput = function () {
+
+        var the = $('.inbox-compose .mail-to .inbox-bcc');
+        var input = $('.inbox-compose .input-bcc');
+        the.hide();
+        input.show();
+        $('.close', input).click(function () {
+            input.hide();
+            the.show();
+        });
+    };
+
+    var toggleButton = function(el) {
+        if (typeof el == 'undefined') {
+            return;
+        }
+        if (el.attr("disabled")) {
+            el.attr("disabled", false);
+        } else {
+            el.attr("disabled", true);
+        }
+    };
+
+    return {
+        //main function to initiate the module
+        init: function () {
+
+            // handle compose btn click
+            $('.inbox').on('click', '.compose-btn a', function () {
+                loadCompose($(this));
+            });
+
+            // handle discard btn
+            $('.inbox').on('click', '.inbox-discard-btn', function(e) {
+                e.preventDefault();
+                loadInbox($(this), listListing);
+            });
+
+            // handle reply and forward button click
+            $('.inbox').on('click', '.reply-btn', function () {
+                loadReply($(this));
+            });
+
+            // handle view message
+            $('.inbox-content').on('click', '.view-message', function () {
+                loadMessage($(this));
+            });
+
+            // handle inbox listing
+            $('.inbox-nav > li.inbox > a').click(function () {
+                loadInbox($(this), 'inbox');
+            });
+
+            // handle sent listing
+            $('.inbox-nav > li.sent > a').click(function () {
+                loadInbox($(this), 'sent');
+            });
+
+            // handle draft listing
+            $('.inbox-nav > li.draft > a').click(function () {
+                loadInbox($(this), 'draft');
+            });
+
+            // handle trash listing
+            $('.inbox-nav > li.trash > a').click(function () {
+                loadInbox($(this), 'trash');
+            });
+
+            //handle compose/reply cc input toggle
+            $('.inbox-content').on('click', '.mail-to .inbox-cc', function () {
+                handleCCInput();
+            });
+
+            //handle compose/reply bcc input toggle
+            $('.inbox-content').on('click', '.mail-to .inbox-bcc', function () {
+                handleBCCInput();
+            });
+
+            //handle loading content based on URL parameter
+            if (Metronic.getURLParameter("a") === "view") {
+                loadMessage();
+            } else if (Metronic.getURLParameter("a") === "compose") {
+                loadCompose();
+            } else {
+               $('.inbox-nav > li.inbox > a').click();
+            }
+
+        }
+
+    };
+
+}();
diff --git a/public/assets/scripts/inbox.js b/public/assets/scripts/inbox.js
new file mode 100644
index 0000000..5a4a663
--- /dev/null
+++ b/public/assets/scripts/inbox.js
@@ -0,0 +1,335 @@
+'use strict';
+
+var Inbox = function () {
+
+    var content = $('.inbox-content');
+    var loading = $('.inbox-loading');
+    var listListing = '';
+
+    var loadInbox = function (el, name) {
+        var url = 'inbox_inbox.html';
+        var title = $('.inbox-nav > li.' + name + ' a').attr('data-title');
+        listListing = name;
+
+        loading.show();
+        content.html('');
+        toggleButton(el);
+
+        $.ajax({
+            type: 'GET',
+            cache: false,
+            url: url,
+            dataType: 'html',
+            success: function(res)
+            {
+                toggleButton(el);
+
+                $('.inbox-nav > li.active').removeClass('active');
+                $('.inbox-nav > li.' + name).addClass('active');
+                $('.inbox-header > h1').text(title);
+
+                loading.hide();
+                content.html(res);
+                if (Layout.fixContentHeight) {
+                    Layout.fixContentHeight();
+                }
+                Metronic.initUniform();
+            },
+            error: function(xhr, ajaxOptions, thrownError)
+            {
+                toggleButton(el);
+            },
+            async: false
+        });
+
+        // handle group checkbox:
+        jQuery('body').on('change', '.mail-group-checkbox', function () {
+            var set = jQuery('.mail-checkbox');
+            var checked = jQuery(this).is(":checked");
+            jQuery(set).each(function () {
+                $(this).attr("checked", checked);
+            });
+            jQuery.uniform.update(set);
+        });
+    }
+
+    var loadMessage = function (el, name, resetMenu) {
+        var url = 'inbox_view.html';
+
+        loading.show();
+        content.html('');
+        toggleButton(el);
+
+        var message_id = el.parent('tr').attr("data-messageid");
+
+        $.ajax({
+            type: "GET",
+            cache: false,
+            url: url,
+            dataType: "html",
+            data: {'message_id': message_id},
+            success: function(res)
+            {
+                toggleButton(el);
+
+                if (resetMenu) {
+                    $('.inbox-nav > li.active').removeClass('active');
+                }
+                $('.inbox-header > h1').text('View Message');
+
+                loading.hide();
+                content.html(res);
+                Layout.fixContentHeight();
+                Metronic.initUniform();
+            },
+            error: function(xhr, ajaxOptions, thrownError)
+            {
+                toggleButton(el);
+            },
+            async: false
+        });
+    }
+
+    var initWysihtml5 = function () {
+        $('.inbox-wysihtml5').wysihtml5({
+            "stylesheets": ["assets/plugins/bootstrap-wysihtml5/wysiwyg-color.css"]
+        });
+    }
+
+    var initFileupload = function () {
+
+        $('#fileupload').fileupload({
+            // Uncomment the following to send cross-domain cookies:
+            //xhrFields: {withCredentials: true},
+            url: '../../assets/global/plugins/jquery-file-upload/server/php/',
+            autoUpload: true
+        });
+
+        // Upload server status check for browsers with CORS support:
+        if ($.support.cors) {
+            $.ajax({
+                url: '../../assets/global/plugins/jquery-file-upload/server/php/',
+                type: 'HEAD'
+            }).fail(function () {
+                $('<span class="alert alert-error"/>')
+                    .text('Upload server currently unavailable - ' +
+                    new Date())
+                    .appendTo('#fileupload');
+            });
+        }
+    }
+
+    var loadCompose = function () {
+        // var url = 'inbox_compose.html';
+
+        // loading.show();
+        // content.html('');
+        // toggleButton(el);
+
+        // load the form via ajax
+        // $.ajax({
+        //     type: "GET",
+        //     cache: false,
+        //     url: url,
+        //     dataType: "html",
+        //     success: function(res)
+        //     {
+        //         toggleButton(el);
+        //
+        //         $('.inbox-nav > li.active').removeClass('active');
+        //         $('.inbox-header > h1').text('Compose');
+
+                // loading.hide();
+                // content.html(res);
+
+                // initFileupload();
+                initWysihtml5();
+
+                // $('.inbox-wysihtml5').focus();
+                // Layout.fixContentHeight();
+        //         Metronic.initUniform();
+        //     },
+        //     error: function(xhr, ajaxOptions, thrownError)
+        //     {
+        //         toggleButton(el);
+        //     },
+        //     async: false
+        // });
+    }
+
+    var loadReply = function (el) {
+        var messageid = $(el).attr("data-messageid");
+        var url = 'inbox_reply.html?messageid=' + messageid;
+
+        loading.show();
+        content.html('');
+        toggleButton(el);
+
+        // load the form via ajax
+        $.ajax({
+            type: "GET",
+            cache: false,
+            url: url,
+            dataType: "html",
+            success: function(res)
+            {
+                toggleButton(el);
+
+                $('.inbox-nav > li.active').removeClass('active');
+                $('.inbox-header > h1').text('Reply');
+
+                loading.hide();
+                content.html(res);
+                $('[name="message"]').val($('#reply_email_content_body').html());
+
+                handleCCInput(); // init "CC" input field
+
+                initFileupload();
+                initWysihtml5();
+                Layout.fixContentHeight();
+                Metronic.initUniform();
+            },
+            error: function(xhr, ajaxOptions, thrownError)
+            {
+                toggleButton(el);
+            },
+            async: false
+        });
+    }
+
+    var loadSearchResults = function (el) {
+        var url = 'inbox_search_result.html';
+
+        loading.show();
+        content.html('');
+        toggleButton(el);
+
+        $.ajax({
+            type: "GET",
+            cache: false,
+            url: url,
+            dataType: "html",
+            success: function(res)
+            {
+                toggleButton(el);
+
+                $('.inbox-nav > li.active').removeClass('active');
+                $('.inbox-header > h1').text('Search');
+
+                loading.hide();
+                content.html(res);
+                Layout.fixContentHeight();
+                Metronic.initUniform();
+            },
+            error: function(xhr, ajaxOptions, thrownError)
+            {
+                toggleButton(el);
+            },
+            async: false
+        });
+    }
+
+    var handleCCInput = function () {
+        var the = $('.inbox-compose .mail-to .inbox-cc');
+        var input = $('.inbox-compose .input-cc');
+        the.hide();
+        input.show();
+        $('.close', input).click(function () {
+            input.hide();
+            the.show();
+        });
+    }
+
+    var handleBCCInput = function () {
+
+        var the = $('.inbox-compose .mail-to .inbox-bcc');
+        var input = $('.inbox-compose .input-bcc');
+        the.hide();
+        input.show();
+        $('.close', input).click(function () {
+            input.hide();
+            the.show();
+        });
+    }
+
+    var toggleButton = function(el) {
+        if (typeof el == 'undefined') {
+            return;
+        }
+        if (el.attr("disabled")) {
+            el.attr("disabled", false);
+        } else {
+            el.attr("disabled", true);
+        }
+    }
+
+    return {
+        //main function to initiate the module
+        init: function () {
+
+            // handle compose btn click
+            // $('.inbox').on('click', '.compose-btn a', function () {
+            // loadCompose($(this));
+                loadCompose();
+            // });
+
+            // handle discard btn
+            // $('.inbox').on('click', '.inbox-discard-btn', function(e) {
+            //     e.preventDefault();
+            //     loadInbox($(this), listListing);
+            // });
+            //
+            // // handle reply and forward button click
+            // $('.inbox').on('click', '.reply-btn', function () {
+            //     loadReply($(this));
+            // });
+            //
+            // // handle view message
+            // $('.inbox-content').on('click', '.view-message', function () {
+            //     loadMessage($(this));
+            // });
+            //
+            // // handle inbox listing
+            // $('.inbox-nav > li.inbox > a').click(function () {
+            //     loadInbox($(this), 'inbox');
+            // });
+            //
+            // // handle sent listing
+            // $('.inbox-nav > li.sent > a').click(function () {
+            //     loadInbox($(this), 'sent');
+            // });
+            //
+            // // handle draft listing
+            // $('.inbox-nav > li.draft > a').click(function () {
+            //     loadInbox($(this), 'draft');
+            // });
+            //
+            // // handle trash listing
+            // $('.inbox-nav > li.trash > a').click(function () {
+            //     loadInbox($(this), 'trash');
+            // });
+            //
+            // //handle compose/reply cc input toggle
+            // $('.inbox-content').on('click', '.mail-to .inbox-cc', function () {
+            //     handleCCInput();
+            // });
+            //
+            // //handle compose/reply bcc input toggle
+            // $('.inbox-content').on('click', '.mail-to .inbox-bcc', function () {
+            //     handleBCCInput();
+            // });
+
+            //handle loading content based on URL parameter
+            // if (Metronic.getURLParameter("a") === "view") {
+            //     // loadMessage();
+            // } else if (Metronic.getURLParameter("a") === "compose") {
+            //     loadCompose();
+            // } else {
+            //    $('.inbox-nav > li.inbox > a').click();
+            // }
+
+        }
+
+    };
+
+}();
diff --git a/public/assets/scripts/index.js b/public/assets/scripts/index.js
new file mode 100644
index 0000000..00506a8
--- /dev/null
+++ b/public/assets/scripts/index.js
@@ -0,0 +1,645 @@
+var Index = function() {
+
+  return {
+
+    //main function
+    init: function() {
+      Metronic.addResizeHandler(function() {
+        jQuery('.vmaps').each(function() {
+          var map = jQuery(this);
+          map.width(map.parent().width());
+        });
+      });
+    },
+
+    initJQVMAP: function() {
+      if (!jQuery().vectorMap) {
+        return;
+      }
+
+      var showMap = function(name) {
+        jQuery('.vmaps').hide();
+        jQuery('#vmap_' + name).show();
+      }
+
+      var setMap = function(name) {
+        var data = {
+          map: 'world_en',
+          backgroundColor: null,
+          borderColor: '#333333',
+          borderOpacity: 0.5,
+          borderWidth: 1,
+          color: '#c6c6c6',
+          enableZoom: true,
+          hoverColor: '#c9dfaf',
+          hoverOpacity: null,
+          values: sample_data,
+          normalizeFunction: 'linear',
+          scaleColors: ['#b6da93', '#909cae'],
+          selectedColor: '#c9dfaf',
+          selectedRegion: null,
+          showTooltip: true,
+          onLabelShow: function(event, label, code) {
+
+          },
+          onRegionOver: function(event, code) {
+            if (code == 'ca') {
+              event.preventDefault();
+            }
+          },
+          onRegionClick: function(element, code, region) {
+            var message = 'You clicked "' + region + '" which has the code: ' + code.toUpperCase();
+            alert(message);
+          }
+        };
+
+        data.map = name + '_en';
+        var map = jQuery('#vmap_' + name);
+        if (!map) {
+          return;
+        }
+        map.width(map.parent().parent().width());
+        map.show();
+        map.vectorMap(data);
+        map.hide();
+      }
+
+      setMap("world");
+      setMap("usa");
+      setMap("europe");
+      setMap("russia");
+      setMap("germany");
+      showMap("world");
+
+      jQuery('#regional_stat_world').click(function() {
+        showMap("world");
+      });
+
+      jQuery('#regional_stat_usa').click(function() {
+        showMap("usa");
+      });
+
+      jQuery('#regional_stat_europe').click(function() {
+        showMap("europe");
+      });
+      jQuery('#regional_stat_russia').click(function() {
+        showMap("russia");
+      });
+      jQuery('#regional_stat_germany').click(function() {
+        showMap("germany");
+      });
+
+      $('#region_statistics_loading').hide();
+      $('#region_statistics_content').show();
+    },
+
+    initCalendar: function() {
+      if (!jQuery().fullCalendar) {
+        return;
+      }
+
+      var date = new Date();
+      var d = date.getDate();
+      var m = date.getMonth();
+      var y = date.getFullYear();
+
+      var h = {};
+
+      if ($('#calendar').width() <= 400) {
+        $('#calendar').addClass("mobile");
+        h = {
+          left: 'title, prev, next',
+          center: '',
+          right: 'today,month,agendaWeek,agendaDay'
+        };
+      } else {
+        $('#calendar').removeClass("mobile");
+        if (Metronic.isRTL()) {
+          h = {
+            right: 'title',
+            center: '',
+            left: 'prev,next,today,month,agendaWeek,agendaDay'
+          };
+        } else {
+          h = {
+            left: 'title',
+            center: '',
+            right: 'prev,next,today,month,agendaWeek,agendaDay'
+          };
+        }
+      }
+
+      $('#calendar').fullCalendar('destroy'); // destroy the calendar
+      $('#calendar').fullCalendar({ //re-initialize the calendar
+        disableDragging: false,
+        header: h,
+        editable: true,
+        events: [{
+          title: 'All Day',
+          start: new Date(y, m, 1),
+          backgroundColor: Metronic.getBrandColor('yellow')
+        }, {
+          title: 'Long Event',
+          start: new Date(y, m, d - 5),
+          end: new Date(y, m, d - 2),
+          backgroundColor: Metronic.getBrandColor('blue')
+        }, {
+          title: 'Repeating Event',
+          start: new Date(y, m, d - 3, 16, 0),
+          allDay: false,
+          backgroundColor: Metronic.getBrandColor('red')
+        }, {
+          title: 'Repeating Event',
+          start: new Date(y, m, d + 6, 16, 0),
+          allDay: false,
+          backgroundColor: Metronic.getBrandColor('green')
+        }, {
+          title: 'Meeting',
+          start: new Date(y, m, d + 9, 10, 30),
+          allDay: false
+        }, {
+          title: 'Lunch',
+          start: new Date(y, m, d, 14, 0),
+          end: new Date(y, m, d, 14, 0),
+          backgroundColor: Metronic.getBrandColor('grey'),
+          allDay: false
+        }, {
+          title: 'Birthday',
+          start: new Date(y, m, d + 1, 19, 0),
+          end: new Date(y, m, d + 1, 22, 30),
+          backgroundColor: Metronic.getBrandColor('purple'),
+          allDay: false
+        }, {
+          title: 'Click for Google',
+          start: new Date(y, m, 28),
+          end: new Date(y, m, 29),
+          backgroundColor: Metronic.getBrandColor('yellow'),
+          url: 'http://google.com/'
+        }]
+      });
+    },
+
+    initCharts: function() {
+      if (!jQuery.plot) {
+        return;
+      }
+
+      function showChartTooltip(x, y, xValue, yValue) {
+        $('<div id="tooltip" class="chart-tooltip">' + yValue + '<\/div>').css({
+          position: 'absolute',
+          display: 'none',
+          top: y - 40,
+          left: x - 40,
+          border: '0px solid #ccc',
+          padding: '2px 6px',
+          'background-color': '#fff'
+        }).appendTo("body").fadeIn(200);
+      }
+
+      var data = [];
+      var totalPoints = 250;
+
+      // random data generator for plot charts
+
+      function getRandomData() {
+        if (data.length > 0) data = data.slice(1);
+        // do a random walk
+        while (data.length < totalPoints) {
+          var prev = data.length > 0 ? data[data.length - 1] : 50;
+          var y = prev + Math.random() * 10 - 5;
+          if (y < 0) y = 0;
+          if (y > 100) y = 100;
+          data.push(y);
+        }
+        // zip the generated y values with the x values
+        var res = [];
+        for (var i = 0; i < data.length; ++i) res.push([i, data[i]])
+        return res;
+      }
+
+      function randValue() {
+        return (Math.floor(Math.random() * (1 + 50 - 20))) + 10;
+      }
+
+      var visitors = [
+        ['02/2013', 1500],
+        ['03/2013', 2500],
+        ['04/2013', 1700],
+        ['05/2013', 800],
+        ['06/2013', 1500],
+        ['07/2013', 2350],
+        ['08/2013', 1500],
+        ['09/2013', 1300],
+        ['10/2013', 4600]
+      ];
+
+
+      if ($('#site_statistics').size() != 0) {
+
+        $('#site_statistics_loading').hide();
+        $('#site_statistics_content').show();
+
+        var plot_statistics = $.plot($("#site_statistics"), [{
+            data: visitors,
+            lines: {
+              fill: 0.6,
+              lineWidth: 0
+            },
+            color: ['#f89f9f']
+          }, {
+            data: visitors,
+            points: {
+              show: true,
+              fill: true,
+              radius: 5,
+              fillColor: "#f89f9f",
+              lineWidth: 3
+            },
+            color: '#fff',
+            shadowSize: 0
+          }],
+
+          {
+            xaxis: {
+              tickLength: 0,
+              tickDecimals: 0,
+              mode: "categories",
+              min: 0,
+              font: {
+                lineHeight: 14,
+                style: "normal",
+                variant: "small-caps",
+                color: "#6F7B8A"
+              }
+            },
+            yaxis: {
+              ticks: 5,
+              tickDecimals: 0,
+              tickColor: "#eee",
+              font: {
+                lineHeight: 14,
+                style: "normal",
+                variant: "small-caps",
+                color: "#6F7B8A"
+              }
+            },
+            grid: {
+              hoverable: true,
+              clickable: true,
+              tickColor: "#eee",
+              borderColor: "#eee",
+              borderWidth: 1
+            }
+          });
+
+        var previousPoint = null;
+        $("#site_statistics").bind("plothover", function(event, pos, item) {
+          $("#x").text(pos.x.toFixed(2));
+          $("#y").text(pos.y.toFixed(2));
+          if (item) {
+            if (previousPoint != item.dataIndex) {
+              previousPoint = item.dataIndex;
+
+              $("#tooltip").remove();
+              var x = item.datapoint[0].toFixed(2),
+                y = item.datapoint[1].toFixed(2);
+
+              showChartTooltip(item.pageX, item.pageY, item.datapoint[0], item.datapoint[1] + ' visits');
+            }
+          } else {
+            $("#tooltip").remove();
+            previousPoint = null;
+          }
+        });
+      }
+
+
+      if ($('#site_activities').size() != 0) {
+        //site activities
+        var previousPoint2 = null;
+        $('#site_activities_loading').hide();
+        $('#site_activities_content').show();
+
+        var data1 = [
+          ['DEC', 300],
+          ['JAN', 600],
+          ['FEB', 1100],
+          ['MAR', 1200],
+          ['APR', 860],
+          ['MAY', 1200],
+          ['JUN', 1450],
+          ['JUL', 1800],
+          ['AUG', 1200],
+          ['SEP', 600]
+        ];
+
+
+        var plot_statistics = $.plot($("#site_activities"),
+
+          [{
+            data: data1,
+            lines: {
+              fill: 0.2,
+              lineWidth: 0,
+            },
+            color: ['#BAD9F5']
+          }, {
+            data: data1,
+            points: {
+              show: true,
+              fill: true,
+              radius: 4,
+              fillColor: "#9ACAE6",
+              lineWidth: 2
+            },
+            color: '#9ACAE6',
+            shadowSize: 1
+          }, {
+            data: data1,
+            lines: {
+              show: true,
+              fill: false,
+              lineWidth: 3
+            },
+            color: '#9ACAE6',
+            shadowSize: 0
+          }],
+
+          {
+
+            xaxis: {
+              tickLength: 0,
+              tickDecimals: 0,
+              mode: "categories",
+              min: 0,
+              font: {
+                lineHeight: 18,
+                style: "normal",
+                variant: "small-caps",
+                color: "#6F7B8A"
+              }
+            },
+            yaxis: {
+              ticks: 5,
+              tickDecimals: 0,
+              tickColor: "#eee",
+              font: {
+                lineHeight: 14,
+                style: "normal",
+                variant: "small-caps",
+                color: "#6F7B8A"
+              }
+            },
+            grid: {
+              hoverable: true,
+              clickable: true,
+              tickColor: "#eee",
+              borderColor: "#eee",
+              borderWidth: 1
+            }
+          });
+
+        $("#site_activities").bind("plothover", function(event, pos, item) {
+          $("#x").text(pos.x.toFixed(2));
+          $("#y").text(pos.y.toFixed(2));
+          if (item) {
+            if (previousPoint2 != item.dataIndex) {
+              previousPoint2 = item.dataIndex;
+              $("#tooltip").remove();
+              var x = item.datapoint[0].toFixed(2),
+                y = item.datapoint[1].toFixed(2);
+              showChartTooltip(item.pageX, item.pageY, item.datapoint[0], item.datapoint[1] + 'M$');
+            }
+          }
+        });
+
+        $('#site_activities').bind("mouseleave", function() {
+          $("#tooltip").remove();
+        });
+      }
+    },
+
+    initMiniCharts: function() {
+      if (!jQuery().easyPieChart || !jQuery().sparkline) {
+        return;
+      }
+
+      // IE8 Fix: function.bind polyfill
+      if (Metronic.isIE8() && !Function.prototype.bind) {
+        Function.prototype.bind = function(oThis) {
+          if (typeof this !== "function") {
+            // closest thing possible to the ECMAScript 5 internal IsCallable function
+            throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
+          }
+
+          var aArgs = Array.prototype.slice.call(arguments, 1),
+            fToBind = this,
+            fNOP = function() {},
+            fBound = function() {
+              return fToBind.apply(this instanceof fNOP && oThis ? this : oThis,
+                aArgs.concat(Array.prototype.slice.call(arguments)));
+            };
+
+          fNOP.prototype = this.prototype;
+          fBound.prototype = new fNOP();
+
+          return fBound;
+        };
+      }
+
+      $('.easy-pie-chart .number.transactions').easyPieChart({
+        animate: 1000,
+        size: 75,
+        lineWidth: 3,
+        barColor: Metronic.getBrandColor('yellow')
+      });
+
+      $('.easy-pie-chart .number.visits').easyPieChart({
+        animate: 1000,
+        size: 75,
+        lineWidth: 3,
+        barColor: Metronic.getBrandColor('green')
+      });
+
+      $('.easy-pie-chart .number.bounce').easyPieChart({
+        animate: 1000,
+        size: 75,
+        lineWidth: 3,
+        barColor: Metronic.getBrandColor('red')
+      });
+
+      $('.easy-pie-chart-reload').click(function() {
+        $('.easy-pie-chart .number').each(function() {
+          var newValue = Math.floor(100 * Math.random());
+          $(this).data('easyPieChart').update(newValue);
+          $('span', this).text(newValue);
+        });
+      });
+
+      $("#sparkline_bar").sparkline([8, 9, 10, 11, 10, 10, 12, 10, 10, 11, 9, 12, 11, 10, 9, 11, 13, 13, 12], {
+        type: 'bar',
+        width: '100',
+        barWidth: 5,
+        height: '55',
+        barColor: '#35aa47',
+        negBarColor: '#e02222'
+      });
+
+      $("#sparkline_bar2").sparkline([9, 11, 12, 13, 12, 13, 10, 14, 13, 11, 11, 12, 11, 11, 10, 12, 11, 10], {
+        type: 'bar',
+        width: '100',
+        barWidth: 5,
+        height: '55',
+        barColor: '#ffb848',
+        negBarColor: '#e02222'
+      });
+
+      $("#sparkline_bar3").sparkline([8, 9, 10, 11, 10, 10, 12, 10, 10, 11, 9, 12, 11, 10, 9, 11, 13, 13, 12], {
+        type: 'bar',
+        width: '100',
+        barWidth: 5,
+        height: '55',
+        barColor: '#35aa47',
+        negBarColor: '#e02222'
+      });
+
+      $("#sparkline_bar4").sparkline([9, 11, 12, 13, 12, 13, 10, 14, 13, 11, 11, 12, 11, 11, 10, 12, 11, 10], {
+        type: 'bar',
+        width: '100',
+        barWidth: 5,
+        height: '55',
+        barColor: '#ffb848',
+        negBarColor: '#e02222'
+      });
+
+      $("#sparkline_line").sparkline([9, 10, 9, 10, 10, 11, 12, 10, 10, 11, 11, 12, 11, 10, 12, 11, 10, 12], {
+        type: 'line',
+        width: '100',
+        height: '55',
+        lineColor: '#ffb848'
+      });
+
+    },
+
+    initChat: function() {
+
+      var cont = $('#chats');
+      var list = $('.chats', cont);
+      var form = $('.chat-form', cont);
+      var input = $('input', form);
+      var btn = $('.btn', form);
+
+      var handleClick = function(e) {
+        e.preventDefault();
+
+        var text = input.val();
+        if (text.length == 0) {
+          return;
+        }
+
+        var time = new Date();
+        var time_str = (time.getHours() + ':' + time.getMinutes());
+        var tpl = '';
+        tpl += '<li class="out">';
+        tpl += '<img class="avatar" alt="" src="' + Layout.getLayoutImgPath() + 'avatar1.jpg"/>';
+        tpl += '<div class="message">';
+        tpl += '<span class="arrow"></span>';
+        tpl += '<a href="#" class="name">Bob Nilson</a>&nbsp;';
+        tpl += '<span class="datetime">at ' + time_str + '</span>';
+        tpl += '<span class="body">';
+        tpl += text;
+        tpl += '</span>';
+        tpl += '</div>';
+        tpl += '</li>';
+
+        var msg = list.append(tpl);
+        input.val("");
+
+        var getLastPostPos = function() {
+          var height = 0;
+          cont.find("li.out, li.in").each(function() {
+            height = height + $(this).outerHeight();
+          });
+
+          return height;
+        }
+
+        cont.find('.scroller').slimScroll({
+          scrollTo: getLastPostPos()
+        });
+      }
+
+      $('body').on('click', '.message .name', function(e) {
+        e.preventDefault(); // prevent click event
+
+        var name = $(this).text(); // get clicked user's full name
+        input.val('@' + name + ':'); // set it into the input field
+        Metronic.scrollTo(input); // scroll to input if needed
+      });
+
+      btn.click(handleClick);
+
+      input.keypress(function(e) {
+        if (e.which == 13) {
+          handleClick(e);
+          return false; //<---- Add this line
+        }
+      });
+    },
+
+    initDashboardDaterange: function() {
+
+      if (!jQuery().daterangepicker) {
+        return;
+      }
+
+      $('#dashboard-report-range').daterangepicker({
+          opens: (Metronic.isRTL() ? 'right' : 'left'),
+          startDate: moment().subtract(29, 'days'),
+          endDate: moment(),
+          minDate: '01/01/2012',
+          maxDate: '12/31/2014',
+          dateLimit: {
+            days: 60
+          },
+          showDropdowns: false,
+          showWeekNumbers: true,
+          timePicker: false,
+          timePickerIncrement: 1,
+          timePicker12Hour: true,
+          ranges: {
+            'Today': [moment(), moment()],
+            'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
+            'Last 7 Days': [moment().subtract(6, 'days'), moment()],
+            'Last 30 Days': [moment().subtract(29, 'days'), moment()],
+            'This Month': [moment().startOf('month'), moment().endOf('month')],
+            'Last Month': [moment().subtract(1, 'days').startOf('month'), moment().subtract(1, 'month').endOf('month')]
+          },
+          buttonClasses: ['btn btn-sm'],
+          applyClass: ' blue',
+          cancelClass: 'default',
+          format: 'MM/DD/YYYY',
+          separator: ' to ',
+          locale: {
+            applyLabel: 'Apply',
+            fromLabel: 'From',
+            toLabel: 'To',
+            customRangeLabel: 'Custom Range',
+            daysOfWeek: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
+            monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
+            firstDay: 1
+          }
+        },
+        function(start, end) {
+          $('#dashboard-report-range span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
+        }
+      );
+
+
+      $('#dashboard-report-range span').html(moment().subtract(29, 'days').format('MMMM D, YYYY') + ' - ' + moment().format('MMMM D, YYYY'));
+      $('#dashboard-report-range').show();
+    }
+
+  };
+
+}();
diff --git a/public/assets/scripts/jquery-ui-1.10.3.custom.min.js b/public/assets/scripts/jquery-ui-1.10.3.custom.min.js
new file mode 100644
index 0000000..2a21218
--- /dev/null
+++ b/public/assets/scripts/jquery-ui-1.10.3.custom.min.js
@@ -0,0 +1,7 @@
+/*! jQuery UI - v1.10.3 - 2013-09-14
+* http://jqueryui.com
+* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.position.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.menu.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js, jquery.ui.effect.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js
+* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
+
+(function(e,t){function i(t,i){var s,n,r,o=t.nodeName.toLowerCase();return"area"===o?(s=t.parentNode,n=s.name,t.href&&n&&"map"===s.nodeName.toLowerCase()?(r=e("img[usemap=#"+n+"]")[0],!!r&&a(r)):!1):(/input|select|textarea|button|object/.test(o)?!t.disabled:"a"===o?t.href||i:i)&&a(t)}function a(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var s=0,n=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.3",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,a){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),a&&a.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var a,s,n=e(this[0]);n.length&&n[0]!==document;){if(a=n.css("position"),("absolute"===a||"relative"===a||"fixed"===a)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++s)})},removeUniqueId:function(){return this.each(function(){n.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,a){return!!e.data(t,a[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var a=e.attr(t,"tabindex"),s=isNaN(a);return(s||a>=0)&&i(t,!s)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,a){function s(t,i,a,s){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,a&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),s&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===a?["Left","Right"]:["Top","Bottom"],r=a.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+a]=function(i){return i===t?o["inner"+a].call(this):this.each(function(){e(this).css(r,s(this,i)+"px")})},e.fn["outer"+a]=function(t,i){return"number"!=typeof t?o["outer"+a].call(this,t):this.each(function(){e(this).css(r,s(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,a){var s,n=e.ui[t].prototype;for(s in a)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([i,a[s]])},call:function(e,t,i){var a,s=e.plugins[t];if(s&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(a=0;s.length>a;a++)e.options[s[a][0]]&&s[a][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var a=i&&"left"===i?"scrollLeft":"scrollTop",s=!1;return t[a]>0?!0:(t[a]=1,s=t[a]>0,t[a]=0,s)}})})(jQuery);(function(e,t){var i=0,s=Array.prototype.slice,a=e.cleanData;e.cleanData=function(t){for(var i,s=0;null!=(i=t[s]);s++)try{e(i).triggerHandler("remove")}catch(n){}a(t)},e.widget=function(i,s,a){var n,r,o,h,l={},u=i.split(".")[0];i=i.split(".")[1],n=u+"-"+i,a||(a=s,s=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[u]=e[u]||{},r=e[u][i],o=e[u][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new o(e,i)},e.extend(o,r,{version:a.version,_proto:e.extend({},a),_childConstructors:[]}),h=new s,h.options=e.widget.extend({},h.options),e.each(a,function(i,a){return e.isFunction(a)?(l[i]=function(){var e=function(){return s.prototype[i].apply(this,arguments)},t=function(e){return s.prototype[i].apply(this,e)};return function(){var i,s=this._super,n=this._superApply;return this._super=e,this._superApply=t,i=a.apply(this,arguments),this._super=s,this._superApply=n,i}}(),t):(l[i]=a,t)}),o.prototype=e.widget.extend(h,{widgetEventPrefix:r?h.widgetEventPrefix:i},l,{constructor:o,namespace:u,widgetName:i,widgetFullName:n}),r?(e.each(r._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete r._childConstructors):s._childConstructors.push(o),e.widget.bridge(i,o)},e.widget.extend=function(i){for(var a,n,r=s.call(arguments,1),o=0,h=r.length;h>o;o++)for(a in r[o])n=r[o][a],r[o].hasOwnProperty(a)&&n!==t&&(i[a]=e.isPlainObject(n)?e.isPlainObject(i[a])?e.widget.extend({},i[a],n):e.widget.extend({},n):n);return i},e.widget.bridge=function(i,a){var n=a.prototype.widgetFullName||i;e.fn[i]=function(r){var o="string"==typeof r,h=s.call(arguments,1),l=this;return r=!o&&h.length?e.widget.extend.apply(null,[r].concat(h)):r,o?this.each(function(){var s,a=e.data(this,n);return a?e.isFunction(a[r])&&"_"!==r.charAt(0)?(s=a[r].apply(a,h),s!==a&&s!==t?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):t):e.error("no such method '"+r+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+r+"'")}):this.each(function(){var t=e.data(this,n);t?t.option(r||{})._init():e.data(this,n,new a(r,this))}),l}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),s!==this&&(e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(i,s){var a,n,r,o=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(o={},a=i.split("."),i=a.shift(),a.length){for(n=o[i]=e.widget.extend({},this.options[i]),r=0;a.length-1>r;r++)n[a[r]]=n[a[r]]||{},n=n[a[r]];if(i=a.pop(),s===t)return n[i]===t?null:n[i];n[i]=s}else{if(s===t)return this.options[i]===t?null:this.options[i];o[i]=s}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,a){var n,r=this;"boolean"!=typeof i&&(a=s,s=i,i=!1),a?(s=n=e(s),this.bindings=this.bindings.add(s)):(a=s,s=this.element,n=this.widget()),e.each(a,function(a,o){function h(){return i||r.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?r[o]:o).apply(r,arguments):t}"string"!=typeof o&&(h.guid=o.guid=o.guid||h.guid||e.guid++);var l=a.match(/^(\w+)\s*(.*)$/),u=l[1]+r.eventNamespace,c=l[2];c?n.delegate(c,u,h):s.bind(u,h)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var a,n,r=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],n=i.originalEvent)for(a in n)a in i||(i[a]=n[a]);return this.element.trigger(i,s),!(e.isFunction(r)&&r.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,a,n){"string"==typeof a&&(a={effect:a});var r,o=a?a===!0||"number"==typeof a?i:a.effect||i:t;a=a||{},"number"==typeof a&&(a={duration:a}),r=!e.isEmptyObject(a),a.complete=n,a.delay&&s.delay(a.delay),r&&e.effects&&e.effects.effect[o]?s[t](a):o!==t&&s[o]?s[o](a.duration,a.easing,n):s.queue(function(i){e(this)[t](),n&&n.call(s[0]),i()})}})})(jQuery);(function(e){var t=!1;e(document).mouseup(function(){t=!1}),e.widget("ui.mouse",{version:"1.10.3",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!t){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,a=1===i.which,n="string"==typeof this.options.cancel&&i.target.nodeName?e(i.target).closest(this.options.cancel).length:!1;return a&&!n&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===e.data(i.target,this.widgetName+".preventClickEvent")&&e.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return s._mouseMove(e)},this._mouseUpDelegate=function(e){return s._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),t=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);(function(e,t){function i(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function s(t,i){return parseInt(e.css(t,i),10)||0}function a(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,r=Math.max,o=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,c=/[\+\-]\d+(\.[\d]+)?%?/,d=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(n!==t)return n;var i,s,a=e("<div style='display:block;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),r=a.children()[0];return e("body").append(a),i=r.offsetWidth,a.css("overflow","scroll"),s=r.offsetWidth,i===s&&(s=a[0].clientWidth),a.remove(),n=i-s},getScrollInfo:function(t){var i=t.isWindow?"":t.element.css("overflow-x"),s=t.isWindow?"":t.element.css("overflow-y"),a="scroll"===i||"auto"===i&&t.width<t.element[0].scrollWidth,n="scroll"===s||"auto"===s&&t.height<t.element[0].scrollHeight;return{width:n?e.position.scrollbarWidth():0,height:a?e.position.scrollbarWidth():0}},getWithinInfo:function(t){var i=e(t||window),s=e.isWindow(i[0]);return{element:i,isWindow:s,offset:i.offset()||{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:s?i.width():i.outerWidth(),height:s?i.height():i.outerHeight()}}},e.fn.position=function(t){if(!t||!t.of)return f.apply(this,arguments);t=e.extend({},t);var n,p,m,g,v,y,b=e(t.of),_=e.position.getWithinInfo(t.within),x=e.position.getScrollInfo(_),k=(t.collision||"flip").split(" "),w={};return y=a(b),b[0].preventDefault&&(t.at="left top"),p=y.width,m=y.height,g=y.offset,v=e.extend({},g),e.each(["my","at"],function(){var e,i,s=(t[this]||"").split(" ");1===s.length&&(s=l.test(s[0])?s.concat(["center"]):u.test(s[0])?["center"].concat(s):["center","center"]),s[0]=l.test(s[0])?s[0]:"center",s[1]=u.test(s[1])?s[1]:"center",e=c.exec(s[0]),i=c.exec(s[1]),w[this]=[e?e[0]:0,i?i[0]:0],t[this]=[d.exec(s[0])[0],d.exec(s[1])[0]]}),1===k.length&&(k[1]=k[0]),"right"===t.at[0]?v.left+=p:"center"===t.at[0]&&(v.left+=p/2),"bottom"===t.at[1]?v.top+=m:"center"===t.at[1]&&(v.top+=m/2),n=i(w.at,p,m),v.left+=n[0],v.top+=n[1],this.each(function(){var a,l,u=e(this),c=u.outerWidth(),d=u.outerHeight(),f=s(this,"marginLeft"),y=s(this,"marginTop"),D=c+f+s(this,"marginRight")+x.width,T=d+y+s(this,"marginBottom")+x.height,M=e.extend({},v),S=i(w.my,u.outerWidth(),u.outerHeight());"right"===t.my[0]?M.left-=c:"center"===t.my[0]&&(M.left-=c/2),"bottom"===t.my[1]?M.top-=d:"center"===t.my[1]&&(M.top-=d/2),M.left+=S[0],M.top+=S[1],e.support.offsetFractions||(M.left=h(M.left),M.top=h(M.top)),a={marginLeft:f,marginTop:y},e.each(["left","top"],function(i,s){e.ui.position[k[i]]&&e.ui.position[k[i]][s](M,{targetWidth:p,targetHeight:m,elemWidth:c,elemHeight:d,collisionPosition:a,collisionWidth:D,collisionHeight:T,offset:[n[0]+S[0],n[1]+S[1]],my:t.my,at:t.at,within:_,elem:u})}),t.using&&(l=function(e){var i=g.left-M.left,s=i+p-c,a=g.top-M.top,n=a+m-d,h={target:{element:b,left:g.left,top:g.top,width:p,height:m},element:{element:u,left:M.left,top:M.top,width:c,height:d},horizontal:0>s?"left":i>0?"right":"center",vertical:0>n?"top":a>0?"bottom":"middle"};c>p&&p>o(i+s)&&(h.horizontal="center"),d>m&&m>o(a+n)&&(h.vertical="middle"),h.important=r(o(i),o(s))>r(o(a),o(n))?"horizontal":"vertical",t.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,a=s.isWindow?s.scrollLeft:s.offset.left,n=s.width,o=e.left-t.collisionPosition.marginLeft,h=a-o,l=o+t.collisionWidth-n-a;t.collisionWidth>n?h>0&&0>=l?(i=e.left+h+t.collisionWidth-n-a,e.left+=h-i):e.left=l>0&&0>=h?a:h>l?a+n-t.collisionWidth:a:h>0?e.left+=h:l>0?e.left-=l:e.left=r(e.left-o,e.left)},top:function(e,t){var i,s=t.within,a=s.isWindow?s.scrollTop:s.offset.top,n=t.within.height,o=e.top-t.collisionPosition.marginTop,h=a-o,l=o+t.collisionHeight-n-a;t.collisionHeight>n?h>0&&0>=l?(i=e.top+h+t.collisionHeight-n-a,e.top+=h-i):e.top=l>0&&0>=h?a:h>l?a+n-t.collisionHeight:a:h>0?e.top+=h:l>0?e.top-=l:e.top=r(e.top-o,e.top)}},flip:{left:function(e,t){var i,s,a=t.within,n=a.offset.left+a.scrollLeft,r=a.width,h=a.isWindow?a.scrollLeft:a.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,c=l+t.collisionWidth-r-h,d="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+d+p+f+t.collisionWidth-r-n,(0>i||o(u)>i)&&(e.left+=d+p+f)):c>0&&(s=e.left-t.collisionPosition.marginLeft+d+p+f-h,(s>0||c>o(s))&&(e.left+=d+p+f))},top:function(e,t){var i,s,a=t.within,n=a.offset.top+a.scrollTop,r=a.height,h=a.isWindow?a.scrollTop:a.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,c=l+t.collisionHeight-r-h,d="top"===t.my[1],p=d?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-r-n,e.top+p+f+m>u&&(0>s||o(u)>s)&&(e.top+=p+f+m)):c>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,e.top+p+f+m>c&&(i>0||c>o(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,a,n,r=document.getElementsByTagName("body")[0],o=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(n in s)t.style[n]=s[n];t.appendChild(o),i=r||document.documentElement,i.insertBefore(t,i.firstChild),o.style.cssText="position: absolute; left: 10.7432222px;",a=e(o).offset().left,e.support.offsetFractions=a>10&&11>a,t.innerHTML="",i.removeChild(t)}()})(jQuery);(function(e){e.widget("ui.draggable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"!==this.options.helper||/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative"),this.options.addClasses&&this.element.addClass("ui-draggable"),this.options.disabled&&this.element.addClass("ui-draggable-disabled"),this._mouseInit()},_destroy:function(){this.element.removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled"),this._mouseDestroy()},_mouseCapture:function(t){var i=this.options;return this.helper||i.disabled||e(t.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(t),this.handle?(e(i.iframeFix===!0?"iframe":i.iframeFix).each(function(){e("<div class='ui-draggable-iframeFix' style='background: #fff;'></div>").css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var i=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offsetParent=this.helper.offsetParent(),this.offsetParentCssPosition=this.offsetParent.css("position"),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},this.offset.scroll=!1,e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,i){if("fixed"===this.offsetParentCssPosition&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),!i){var a=this._uiHash();if(this._trigger("drag",t,a)===!1)return this._mouseUp({}),!1;this.position=a.position}return this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var i=this,a=!1;return e.ui.ddmanager&&!this.options.dropBehaviour&&(a=e.ui.ddmanager.drop(this,t)),this.dropped&&(a=this.dropped,this.dropped=!1),"original"!==this.options.helper||e.contains(this.element[0].ownerDocument,this.element[0])?("invalid"===this.options.revert&&!a||"valid"===this.options.revert&&a||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,a)?e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",t)!==!1&&i._clear()}):this._trigger("stop",t)!==!1&&this._clear(),!1):!1},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){return this.options.handle?!!e(t.target).closest(this.element.find(this.options.handle)).length:!0},_createHelper:function(t){var i=this.options,a=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return a.parents("body").length||a.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),a[0]===this.element[0]||/(fixed|absolute)/.test(a.css("position"))||a.css("position","absolute"),a},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.element.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,a,s=this.options;return s.containment?"window"===s.containment?(this.containment=[e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,e(window).scrollLeft()+e(window).width()-this.helperProportions.width-this.margins.left,e(window).scrollTop()+(e(window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):"document"===s.containment?(this.containment=[0,0,e(document).width()-this.helperProportions.width-this.margins.left,(e(document).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],undefined):s.containment.constructor===Array?(this.containment=s.containment,undefined):("parent"===s.containment&&(s.containment=this.helper[0].parentNode),i=e(s.containment),a=i[0],a&&(t="hidden"!==i.css("overflow"),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(t?Math.max(a.scrollWidth,a.offsetWidth):a.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(t?Math.max(a.scrollHeight,a.offsetHeight):a.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=i),undefined):(this.containment=null,undefined)},_convertPositionTo:function(t,i){i||(i=this.position);var a="absolute"===t?1:-1,s="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent;return this.offset.scroll||(this.offset.scroll={top:s.scrollTop(),left:s.scrollLeft()}),{top:i.top+this.offset.relative.top*a+this.offset.parent.top*a-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top)*a,left:i.left+this.offset.relative.left*a+this.offset.parent.left*a-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)*a}},_generatePosition:function(t){var i,a,s,n,r=this.options,o="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,l=t.pageX,h=t.pageY;return this.offset.scroll||(this.offset.scroll={top:o.scrollTop(),left:o.scrollLeft()}),this.originalPosition&&(this.containment&&(this.relative_container?(a=this.relative_container.offset(),i=[this.containment[0]+a.left,this.containment[1]+a.top,this.containment[2]+a.left,this.containment[3]+a.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(l=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(h=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(l=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(h=i[3]+this.offset.click.top)),r.grid&&(s=r.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/r.grid[1])*r.grid[1]:this.originalPageY,h=i?s-this.offset.click.top>=i[1]||s-this.offset.click.top>i[3]?s:s-this.offset.click.top>=i[1]?s-r.grid[1]:s+r.grid[1]:s,n=r.grid[0]?this.originalPageX+Math.round((l-this.originalPageX)/r.grid[0])*r.grid[0]:this.originalPageX,l=i?n-this.offset.click.left>=i[0]||n-this.offset.click.left>i[2]?n:n-this.offset.click.left>=i[0]?n-r.grid[0]:n+r.grid[0]:n)),{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():this.offset.scroll.top),left:l-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():this.offset.scroll.left)}},_clear:function(){this.helper.removeClass("ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1},_trigger:function(t,i,a){return a=a||this._uiHash(),e.ui.plugin.call(this,t,[i,a]),"drag"===t&&(this.positionAbs=this._convertPositionTo("absolute")),e.Widget.prototype._trigger.call(this,t,i,a)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),e.ui.plugin.add("draggable","connectToSortable",{start:function(t,i){var a=e(this).data("ui-draggable"),s=a.options,n=e.extend({},i,{item:a.element});a.sortables=[],e(s.connectToSortable).each(function(){var i=e.data(this,"ui-sortable");i&&!i.options.disabled&&(a.sortables.push({instance:i,shouldRevert:i.options.revert}),i.refreshPositions(),i._trigger("activate",t,n))})},stop:function(t,i){var a=e(this).data("ui-draggable"),s=e.extend({},i,{item:a.element});e.each(a.sortables,function(){this.instance.isOver?(this.instance.isOver=0,a.cancelHelperRemoval=!0,this.instance.cancelHelperRemoval=!1,this.shouldRevert&&(this.instance.options.revert=this.shouldRevert),this.instance._mouseStop(t),this.instance.options.helper=this.instance.options._helper,"original"===a.options.helper&&this.instance.currentItem.css({top:"auto",left:"auto"})):(this.instance.cancelHelperRemoval=!1,this.instance._trigger("deactivate",t,s))})},drag:function(t,i){var a=e(this).data("ui-draggable"),s=this;e.each(a.sortables,function(){var n=!1,r=this;this.instance.positionAbs=a.positionAbs,this.instance.helperProportions=a.helperProportions,this.instance.offset.click=a.offset.click,this.instance._intersectsWith(this.instance.containerCache)&&(n=!0,e.each(a.sortables,function(){return this.instance.positionAbs=a.positionAbs,this.instance.helperProportions=a.helperProportions,this.instance.offset.click=a.offset.click,this!==r&&this.instance._intersectsWith(this.instance.containerCache)&&e.contains(r.instance.element[0],this.instance.element[0])&&(n=!1),n})),n?(this.instance.isOver||(this.instance.isOver=1,this.instance.currentItem=e(s).clone().removeAttr("id").appendTo(this.instance.element).data("ui-sortable-item",!0),this.instance.options._helper=this.instance.options.helper,this.instance.options.helper=function(){return i.helper[0]},t.target=this.instance.currentItem[0],this.instance._mouseCapture(t,!0),this.instance._mouseStart(t,!0,!0),this.instance.offset.click.top=a.offset.click.top,this.instance.offset.click.left=a.offset.click.left,this.instance.offset.parent.left-=a.offset.parent.left-this.instance.offset.parent.left,this.instance.offset.parent.top-=a.offset.parent.top-this.instance.offset.parent.top,a._trigger("toSortable",t),a.dropped=this.instance.element,a.currentItem=a.element,this.instance.fromOutside=a),this.instance.currentItem&&this.instance._mouseDrag(t)):this.instance.isOver&&(this.instance.isOver=0,this.instance.cancelHelperRemoval=!0,this.instance.options.revert=!1,this.instance._trigger("out",t,this.instance._uiHash(this.instance)),this.instance._mouseStop(t,!0),this.instance.options.helper=this.instance.options._helper,this.instance.currentItem.remove(),this.instance.placeholder&&this.instance.placeholder.remove(),a._trigger("fromSortable",t),a.dropped=!1)})}}),e.ui.plugin.add("draggable","cursor",{start:function(){var t=e("body"),i=e(this).data("ui-draggable").options;t.css("cursor")&&(i._cursor=t.css("cursor")),t.css("cursor",i.cursor)},stop:function(){var t=e(this).data("ui-draggable").options;t._cursor&&e("body").css("cursor",t._cursor)}}),e.ui.plugin.add("draggable","opacity",{start:function(t,i){var a=e(i.helper),s=e(this).data("ui-draggable").options;a.css("opacity")&&(s._opacity=a.css("opacity")),a.css("opacity",s.opacity)},stop:function(t,i){var a=e(this).data("ui-draggable").options;a._opacity&&e(i.helper).css("opacity",a._opacity)}}),e.ui.plugin.add("draggable","scroll",{start:function(){var t=e(this).data("ui-draggable");t.scrollParent[0]!==document&&"HTML"!==t.scrollParent[0].tagName&&(t.overflowOffset=t.scrollParent.offset())},drag:function(t){var i=e(this).data("ui-draggable"),a=i.options,s=!1;i.scrollParent[0]!==document&&"HTML"!==i.scrollParent[0].tagName?(a.axis&&"x"===a.axis||(i.overflowOffset.top+i.scrollParent[0].offsetHeight-t.pageY<a.scrollSensitivity?i.scrollParent[0].scrollTop=s=i.scrollParent[0].scrollTop+a.scrollSpeed:t.pageY-i.overflowOffset.top<a.scrollSensitivity&&(i.scrollParent[0].scrollTop=s=i.scrollParent[0].scrollTop-a.scrollSpeed)),a.axis&&"y"===a.axis||(i.overflowOffset.left+i.scrollParent[0].offsetWidth-t.pageX<a.scrollSensitivity?i.scrollParent[0].scrollLeft=s=i.scrollParent[0].scrollLeft+a.scrollSpeed:t.pageX-i.overflowOffset.left<a.scrollSensitivity&&(i.scrollParent[0].scrollLeft=s=i.scrollParent[0].scrollLeft-a.scrollSpeed))):(a.axis&&"x"===a.axis||(t.pageY-e(document).scrollTop()<a.scrollSensitivity?s=e(document).scrollTop(e(document).scrollTop()-a.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<a.scrollSensitivity&&(s=e(document).scrollTop(e(document).scrollTop()+a.scrollSpeed))),a.axis&&"y"===a.axis||(t.pageX-e(document).scrollLeft()<a.scrollSensitivity?s=e(document).scrollLeft(e(document).scrollLeft()-a.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<a.scrollSensitivity&&(s=e(document).scrollLeft(e(document).scrollLeft()+a.scrollSpeed)))),s!==!1&&e.ui.ddmanager&&!a.dropBehaviour&&e.ui.ddmanager.prepareOffsets(i,t)}}),e.ui.plugin.add("draggable","snap",{start:function(){var t=e(this).data("ui-draggable"),i=t.options;t.snapElements=[],e(i.snap.constructor!==String?i.snap.items||":data(ui-draggable)":i.snap).each(function(){var i=e(this),a=i.offset();this!==t.element[0]&&t.snapElements.push({item:this,width:i.outerWidth(),height:i.outerHeight(),top:a.top,left:a.left})})},drag:function(t,i){var a,s,n,r,o,l,h,u,d,c,p=e(this).data("ui-draggable"),f=p.options,m=f.snapTolerance,g=i.offset.left,v=g+p.helperProportions.width,y=i.offset.top,b=y+p.helperProportions.height;for(d=p.snapElements.length-1;d>=0;d--)o=p.snapElements[d].left,l=o+p.snapElements[d].width,h=p.snapElements[d].top,u=h+p.snapElements[d].height,o-m>v||g>l+m||h-m>b||y>u+m||!e.contains(p.snapElements[d].item.ownerDocument,p.snapElements[d].item)?(p.snapElements[d].snapping&&p.options.snap.release&&p.options.snap.release.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[d].item})),p.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(a=m>=Math.abs(h-b),s=m>=Math.abs(u-y),n=m>=Math.abs(o-v),r=m>=Math.abs(l-g),a&&(i.position.top=p._convertPositionTo("relative",{top:h-p.helperProportions.height,left:0}).top-p.margins.top),s&&(i.position.top=p._convertPositionTo("relative",{top:u,left:0}).top-p.margins.top),n&&(i.position.left=p._convertPositionTo("relative",{top:0,left:o-p.helperProportions.width}).left-p.margins.left),r&&(i.position.left=p._convertPositionTo("relative",{top:0,left:l}).left-p.margins.left)),c=a||s||n||r,"outer"!==f.snapMode&&(a=m>=Math.abs(h-y),s=m>=Math.abs(u-b),n=m>=Math.abs(o-g),r=m>=Math.abs(l-v),a&&(i.position.top=p._convertPositionTo("relative",{top:h,left:0}).top-p.margins.top),s&&(i.position.top=p._convertPositionTo("relative",{top:u-p.helperProportions.height,left:0}).top-p.margins.top),n&&(i.position.left=p._convertPositionTo("relative",{top:0,left:o}).left-p.margins.left),r&&(i.position.left=p._convertPositionTo("relative",{top:0,left:l-p.helperProportions.width}).left-p.margins.left)),!p.snapElements[d].snapping&&(a||s||n||r||c)&&p.options.snap.snap&&p.options.snap.snap.call(p.element,t,e.extend(p._uiHash(),{snapItem:p.snapElements[d].item})),p.snapElements[d].snapping=a||s||n||r||c)}}),e.ui.plugin.add("draggable","stack",{start:function(){var t,i=this.data("ui-draggable").options,a=e.makeArray(e(i.stack)).sort(function(t,i){return(parseInt(e(t).css("zIndex"),10)||0)-(parseInt(e(i).css("zIndex"),10)||0)});a.length&&(t=parseInt(e(a[0]).css("zIndex"),10)||0,e(a).each(function(i){e(this).css("zIndex",t+i)}),this.css("zIndex",t+a.length))}}),e.ui.plugin.add("draggable","zIndex",{start:function(t,i){var a=e(i.helper),s=e(this).data("ui-draggable").options;a.css("zIndex")&&(s._zIndex=a.css("zIndex")),a.css("zIndex",s.zIndex)},stop:function(t,i){var a=e(this).data("ui-draggable").options;a._zIndex&&e(i.helper).css("zIndex",a._zIndex)}})})(jQuery);(function(e){function t(e,t,i){return e>t&&t+i>e}e.widget("ui.droppable",{version:"1.10.3",widgetEventPrefix:"drop",options:{accept:"*",activeClass:!1,addClasses:!0,greedy:!1,hoverClass:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var t=this.options,i=t.accept;this.isover=!1,this.isout=!0,this.accept=e.isFunction(i)?i:function(e){return e.is(i)},this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight},e.ui.ddmanager.droppables[t.scope]=e.ui.ddmanager.droppables[t.scope]||[],e.ui.ddmanager.droppables[t.scope].push(this),t.addClasses&&this.element.addClass("ui-droppable")},_destroy:function(){for(var t=0,i=e.ui.ddmanager.droppables[this.options.scope];i.length>t;t++)i[t]===this&&i.splice(t,1);this.element.removeClass("ui-droppable ui-droppable-disabled")},_setOption:function(t,i){"accept"===t&&(this.accept=e.isFunction(i)?i:function(e){return e.is(i)}),e.Widget.prototype._setOption.apply(this,arguments)},_activate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.addClass(this.options.activeClass),i&&this._trigger("activate",t,this.ui(i))},_deactivate:function(t){var i=e.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass),i&&this._trigger("deactivate",t,this.ui(i))},_over:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.addClass(this.options.hoverClass),this._trigger("over",t,this.ui(i)))},_out:function(t){var i=e.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("out",t,this.ui(i)))},_drop:function(t,i){var a=i||e.ui.ddmanager.current,s=!1;return a&&(a.currentItem||a.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var t=e.data(this,"ui-droppable");return t.options.greedy&&!t.options.disabled&&t.options.scope===a.options.scope&&t.accept.call(t.element[0],a.currentItem||a.element)&&e.ui.intersect(a,e.extend(t,{offset:t.element.offset()}),t.options.tolerance)?(s=!0,!1):undefined}),s?!1:this.accept.call(this.element[0],a.currentItem||a.element)?(this.options.activeClass&&this.element.removeClass(this.options.activeClass),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass),this._trigger("drop",t,this.ui(a)),this.element):!1):!1},ui:function(e){return{draggable:e.currentItem||e.element,helper:e.helper,position:e.position,offset:e.positionAbs}}}),e.ui.intersect=function(e,i,a){if(!i.offset)return!1;var s,n,r=(e.positionAbs||e.position.absolute).left,o=r+e.helperProportions.width,l=(e.positionAbs||e.position.absolute).top,h=l+e.helperProportions.height,u=i.offset.left,d=u+i.proportions.width,c=i.offset.top,p=c+i.proportions.height;switch(a){case"fit":return r>=u&&d>=o&&l>=c&&p>=h;case"intersect":return r+e.helperProportions.width/2>u&&d>o-e.helperProportions.width/2&&l+e.helperProportions.height/2>c&&p>h-e.helperProportions.height/2;case"pointer":return s=(e.positionAbs||e.position.absolute).left+(e.clickOffset||e.offset.click).left,n=(e.positionAbs||e.position.absolute).top+(e.clickOffset||e.offset.click).top,t(n,c,i.proportions.height)&&t(s,u,i.proportions.width);case"touch":return(l>=c&&p>=l||h>=c&&p>=h||c>l&&h>p)&&(r>=u&&d>=r||o>=u&&d>=o||u>r&&o>d);default:return!1}},e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,i){var a,s,n=e.ui.ddmanager.droppables[t.options.scope]||[],r=i?i.type:null,o=(t.currentItem||t.element).find(":data(ui-droppable)").addBack();e:for(a=0;n.length>a;a++)if(!(n[a].options.disabled||t&&!n[a].accept.call(n[a].element[0],t.currentItem||t.element))){for(s=0;o.length>s;s++)if(o[s]===n[a].element[0]){n[a].proportions.height=0;continue e}n[a].visible="none"!==n[a].element.css("display"),n[a].visible&&("mousedown"===r&&n[a]._activate.call(n[a],i),n[a].offset=n[a].element.offset(),n[a].proportions={width:n[a].element[0].offsetWidth,height:n[a].element[0].offsetHeight})}},drop:function(t,i){var a=!1;return e.each((e.ui.ddmanager.droppables[t.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&e.ui.intersect(t,this,this.options.tolerance)&&(a=this._drop.call(this,i)||a),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],t.currentItem||t.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),a},dragStart:function(t,i){t.element.parentsUntil("body").bind("scroll.droppable",function(){t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)})},drag:function(t,i){t.options.refreshPositions&&e.ui.ddmanager.prepareOffsets(t,i),e.each(e.ui.ddmanager.droppables[t.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var a,s,n,r=e.ui.intersect(t,this,this.options.tolerance),o=!r&&this.isover?"isout":r&&!this.isover?"isover":null;o&&(this.options.greedy&&(s=this.options.scope,n=this.element.parents(":data(ui-droppable)").filter(function(){return e.data(this,"ui-droppable").options.scope===s}),n.length&&(a=e.data(n[0],"ui-droppable"),a.greedyChild="isover"===o)),a&&"isover"===o&&(a.isover=!1,a.isout=!0,a._out.call(a,i)),this[o]=!0,this["isout"===o?"isover":"isout"]=!1,this["isover"===o?"_over":"_out"].call(this,i),a&&"isout"===o&&(a.isout=!1,a.isover=!0,a._over.call(a,i)))}})},dragStop:function(t,i){t.element.parentsUntil("body").unbind("scroll.droppable"),t.options.refreshPositions||e.ui.ddmanager.prepareOffsets(t,i)}}})(jQuery);(function(e){function t(e){return parseInt(e,10)||0}function i(e){return!isNaN(parseInt(e,10))}e.widget("ui.resizable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_create:function(){var t,i,s,a,n,r=this,o=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!o.aspectRatio,aspectRatio:o.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:o.helper||o.ghost||o.animate?o.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=o.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),n="ui-resizable-"+s,a=e("<div class='ui-resizable-handle "+n+"'></div>"),a.css({zIndex:o.zIndex}),"se"===s&&a.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(a);this._renderAxis=function(t){var i,s,a,n;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=e(this.handles[i],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),n=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),a=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(a,n),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){r.resizing||(this.className&&(a=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=a&&a[1]?a[1]:"se")}),o.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){o.disabled||(e(this).removeClass("ui-resizable-autohide"),r._handles.show())}).mouseleave(function(){o.disabled||r.resizing||(e(this).addClass("ui-resizable-autohide"),r._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,a=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(a=!0);return!this.options.disabled&&a},_mouseStart:function(i){var s,a,n,r=this.options,o=this.element.position(),h=this.element;return this.resizing=!0,/absolute/.test(h.css("position"))?h.css({position:"absolute",top:h.css("top"),left:h.css("left")}):h.is(".ui-draggable")&&h.css({position:"absolute",top:o.top,left:o.left}),this._renderProxy(),s=t(this.helper.css("left")),a=t(this.helper.css("top")),r.containment&&(s+=e(r.containment).scrollLeft()||0,a+=e(r.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:s,top:a},this.size=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalSize=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalPosition={left:s,top:a},this.sizeDiff={width:h.outerWidth()-h.width(),height:h.outerHeight()-h.height()},this.originalMousePosition={left:i.pageX,top:i.pageY},this.aspectRatio="number"==typeof r.aspectRatio?r.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===n?this.axis+"-resize":n),h.addClass("ui-resizable-resizing"),this._propagate("start",i),!0},_mouseDrag:function(t){var i,s=this.helper,a={},n=this.originalMousePosition,r=this.axis,o=this.position.top,h=this.position.left,l=this.size.width,u=this.size.height,c=t.pageX-n.left||0,d=t.pageY-n.top||0,p=this._change[r];return p?(i=p.apply(this,[t,c,d]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),this.position.top!==o&&(a.top=this.position.top+"px"),this.position.left!==h&&(a.left=this.position.left+"px"),this.size.width!==l&&(a.width=this.size.width+"px"),this.size.height!==u&&(a.height=this.size.height+"px"),s.css(a),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(a)||this._trigger("resize",t,this.ui()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,a,n,r,o,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),a=s&&e.ui.hasScroll(i[0],"left")?0:u.sizeDiff.height,n=s?0:u.sizeDiff.width,r={width:u.helper.width()-n,height:u.helper.height()-a},o=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(r,{top:h,left:o})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t,s,a,n,r,o=this.options;r={minWidth:i(o.minWidth)?o.minWidth:0,maxWidth:i(o.maxWidth)?o.maxWidth:1/0,minHeight:i(o.minHeight)?o.minHeight:0,maxHeight:i(o.maxHeight)?o.maxHeight:1/0},(this._aspectRatio||e)&&(t=r.minHeight*this.aspectRatio,a=r.minWidth/this.aspectRatio,s=r.maxHeight*this.aspectRatio,n=r.maxWidth/this.aspectRatio,t>r.minWidth&&(r.minWidth=t),a>r.minHeight&&(r.minHeight=a),r.maxWidth>s&&(r.maxWidth=s),r.maxHeight>n&&(r.maxHeight=n)),this._vBoundaries=r},_updateCache:function(e){this.offset=this.helper.offset(),i(e.left)&&(this.position.left=e.left),i(e.top)&&(this.position.top=e.top),i(e.height)&&(this.size.height=e.height),i(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,s=this.size,a=this.axis;return i(e.height)?e.width=e.height*this.aspectRatio:i(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===a&&(e.left=t.left+(s.width-e.width),e.top=null),"nw"===a&&(e.top=t.top+(s.height-e.height),e.left=t.left+(s.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,s=this.axis,a=i(e.width)&&t.maxWidth&&t.maxWidth<e.width,n=i(e.height)&&t.maxHeight&&t.maxHeight<e.height,r=i(e.width)&&t.minWidth&&t.minWidth>e.width,o=i(e.height)&&t.minHeight&&t.minHeight>e.height,h=this.originalPosition.left+this.originalSize.width,l=this.position.top+this.size.height,u=/sw|nw|w/.test(s),c=/nw|ne|n/.test(s);return r&&(e.width=t.minWidth),o&&(e.height=t.minHeight),a&&(e.width=t.maxWidth),n&&(e.height=t.maxHeight),r&&u&&(e.left=h-t.minWidth),a&&u&&(e.left=h-t.maxWidth),o&&c&&(e.top=l-t.minHeight),n&&c&&(e.top=l-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length){var e,t,i,s,a,n=this.helper||this.element;for(e=0;this._proportionallyResizeElements.length>e;e++){if(a=this._proportionallyResizeElements[e],!this.borderDif)for(this.borderDif=[],i=[a.css("borderTopWidth"),a.css("borderRightWidth"),a.css("borderBottomWidth"),a.css("borderLeftWidth")],s=[a.css("paddingTop"),a.css("paddingRight"),a.css("paddingBottom"),a.css("paddingLeft")],t=0;i.length>t;t++)this.borderDif[t]=(parseInt(i[t],10)||0)+(parseInt(s[t],10)||0);a.css({height:n.height()-this.borderDif[0]-this.borderDif[2]||0,width:n.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,a=this.originalPosition;return{top:a.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).data("ui-resizable"),s=i.options,a=i._proportionallyResizeElements,n=a.length&&/textarea/i.test(a[0].nodeName),r=n&&e.ui.hasScroll(a[0],"left")?0:i.sizeDiff.height,o=n?0:i.sizeDiff.width,h={width:i.size.width-o,height:i.size.height-r},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};a&&a.length&&e(a[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var i,s,a,n,r,o,h,l=e(this).data("ui-resizable"),u=l.options,c=l.element,d=u.containment,p=d instanceof e?d.get(0):/parent/.test(d)?c.parent().get(0):d;p&&(l.containerElement=e(p),/document/.test(d)||d===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(i=e(p),s=[],e(["Top","Right","Left","Bottom"]).each(function(e,a){s[e]=t(i.css("padding"+a))}),l.containerOffset=i.offset(),l.containerPosition=i.position(),l.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},a=l.containerOffset,n=l.containerSize.height,r=l.containerSize.width,o=e.ui.hasScroll(p,"left")?p.scrollWidth:r,h=e.ui.hasScroll(p)?p.scrollHeight:n,l.parentData={element:p,left:a.left,top:a.top,width:o,height:h}))},resize:function(t){var i,s,a,n,r=e(this).data("ui-resizable"),o=r.options,h=r.containerOffset,l=r.position,u=r._aspectRatio||t.shiftKey,c={top:0,left:0},d=r.containerElement;d[0]!==document&&/static/.test(d.css("position"))&&(c=h),l.left<(r._helper?h.left:0)&&(r.size.width=r.size.width+(r._helper?r.position.left-h.left:r.position.left-c.left),u&&(r.size.height=r.size.width/r.aspectRatio),r.position.left=o.helper?h.left:0),l.top<(r._helper?h.top:0)&&(r.size.height=r.size.height+(r._helper?r.position.top-h.top:r.position.top),u&&(r.size.width=r.size.height*r.aspectRatio),r.position.top=r._helper?h.top:0),r.offset.left=r.parentData.left+r.position.left,r.offset.top=r.parentData.top+r.position.top,i=Math.abs((r._helper?r.offset.left-c.left:r.offset.left-c.left)+r.sizeDiff.width),s=Math.abs((r._helper?r.offset.top-c.top:r.offset.top-h.top)+r.sizeDiff.height),a=r.containerElement.get(0)===r.element.parent().get(0),n=/relative|absolute/.test(r.containerElement.css("position")),a&&n&&(i-=r.parentData.left),i+r.size.width>=r.parentData.width&&(r.size.width=r.parentData.width-i,u&&(r.size.height=r.size.width/r.aspectRatio)),s+r.size.height>=r.parentData.height&&(r.size.height=r.parentData.height-s,u&&(r.size.width=r.size.height*r.aspectRatio))},stop:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.containerOffset,a=t.containerPosition,n=t.containerElement,r=e(t.helper),o=r.offset(),h=r.outerWidth()-t.sizeDiff.width,l=r.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(n.css("position"))&&e(this).css({left:o.left-a.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(n.css("position"))&&e(this).css({left:o.left-a.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).data("ui-resizable"),a=s.options,n=s.originalSize,r=s.originalPosition,o={height:s.size.height-n.height||0,width:s.size.width-n.width||0,top:s.position.top-r.top||0,left:s.position.left-r.left||0},h=function(t,s){e(t).each(function(){var t=e(this),a=e(this).data("ui-resizable-alsoresize"),n={},r=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(e,t){var i=(a[t]||0)+(o[t]||0);i&&i>=0&&(n[t]=i||null)}),t.css(n)})};"object"!=typeof a.alsoResize||a.alsoResize.nodeType?h(a.alsoResize):e.each(a.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).data("ui-resizable");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).data("ui-resizable");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size,a=t.originalSize,n=t.originalPosition,r=t.axis,o="number"==typeof i.grid?[i.grid,i.grid]:i.grid,h=o[0]||1,l=o[1]||1,u=Math.round((s.width-a.width)/h)*h,c=Math.round((s.height-a.height)/l)*l,d=a.width+u,p=a.height+c,f=i.maxWidth&&d>i.maxWidth,m=i.maxHeight&&p>i.maxHeight,g=i.minWidth&&i.minWidth>d,v=i.minHeight&&i.minHeight>p;i.grid=o,g&&(d+=h),v&&(p+=l),f&&(d-=h),m&&(p-=l),/^(se|s|e)$/.test(r)?(t.size.width=d,t.size.height=p):/^(ne)$/.test(r)?(t.size.width=d,t.size.height=p,t.position.top=n.top-c):/^(sw)$/.test(r)?(t.size.width=d,t.size.height=p,t.position.left=n.left-u):(t.size.width=d,t.size.height=p,t.position.top=n.top-c,t.position.left=n.left-u)}})})(jQuery);(function(e){e.widget("ui.selectable",e.ui.mouse,{version:"1.10.3",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var t,i=this;this.element.addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){t=e(i.options.filter,i.element[0]),t.addClass("ui-selectee"),t.each(function(){var t=e(this),i=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:i.left,top:i.top,right:i.left+t.outerWidth(),bottom:i.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=t.addClass("ui-selectee"),this._mouseInit(),this.helper=e("<div class='ui-selectable-helper'></div>")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var i=this,s=this.options;this.opos=[t.pageX,t.pageY],this.options.disabled||(this.selectees=e(s.filter,this.element[0]),this._trigger("start",t),e(s.appendTo).append(this.helper),this.helper.css({left:t.pageX,top:t.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=e.data(this,"selectable-item");s.startselected=!0,t.metaKey||t.ctrlKey||(s.$element.removeClass("ui-selected"),s.selected=!1,s.$element.addClass("ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",t,{unselecting:s.element}))}),e(t.target).parents().addBack().each(function(){var s,a=e.data(this,"selectable-item");return a?(s=!t.metaKey&&!t.ctrlKey||!a.$element.hasClass("ui-selected"),a.$element.removeClass(s?"ui-unselecting":"ui-selected").addClass(s?"ui-selecting":"ui-unselecting"),a.unselecting=!s,a.selecting=s,a.selected=s,s?i._trigger("selecting",t,{selecting:a.element}):i._trigger("unselecting",t,{unselecting:a.element}),!1):undefined}))},_mouseDrag:function(t){if(this.dragged=!0,!this.options.disabled){var i,s=this,a=this.options,n=this.opos[0],r=this.opos[1],o=t.pageX,h=t.pageY;return n>o&&(i=o,o=n,n=i),r>h&&(i=h,h=r,r=i),this.helper.css({left:n,top:r,width:o-n,height:h-r}),this.selectees.each(function(){var i=e.data(this,"selectable-item"),l=!1;i&&i.element!==s.element[0]&&("touch"===a.tolerance?l=!(i.left>o||n>i.right||i.top>h||r>i.bottom):"fit"===a.tolerance&&(l=i.left>n&&o>i.right&&i.top>r&&h>i.bottom),l?(i.selected&&(i.$element.removeClass("ui-selected"),i.selected=!1),i.unselecting&&(i.$element.removeClass("ui-unselecting"),i.unselecting=!1),i.selecting||(i.$element.addClass("ui-selecting"),i.selecting=!0,s._trigger("selecting",t,{selecting:i.element}))):(i.selecting&&((t.metaKey||t.ctrlKey)&&i.startselected?(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.$element.addClass("ui-selected"),i.selected=!0):(i.$element.removeClass("ui-selecting"),i.selecting=!1,i.startselected&&(i.$element.addClass("ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",t,{unselecting:i.element}))),i.selected&&(t.metaKey||t.ctrlKey||i.startselected||(i.$element.removeClass("ui-selected"),i.selected=!1,i.$element.addClass("ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",t,{unselecting:i.element})))))}),!1}},_mouseStop:function(t){var i=this;return this.dragged=!1,e(".ui-unselecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",t,{unselected:s.element})}),e(".ui-selecting",this.element[0]).each(function(){var s=e.data(this,"selectable-item");s.$element.removeClass("ui-selecting").addClass("ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",t,{selected:s.element})}),this._trigger("stop",t),this.helper.remove(),!1}})})(jQuery);(function(e){function t(e,t,i){return e>t&&t+i>e}function i(e){return/left|right/.test(e.css("float"))||/inline|table-cell/.test(e.css("display"))}e.widget("ui.sortable",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?"x"===e.axis||i(this.items[0].item):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_setOption:function(t,i){"disabled"===t?(this.options[t]=i,this.widget().toggleClass("ui-sortable-disabled",!!i)):e.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(t,i){var s=null,a=!1,n=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(t),e(t.target).parents().each(function(){return e.data(this,n.widgetName+"-item")===n?(s=e(this),!1):undefined}),e.data(t.target,n.widgetName+"-item")===n&&(s=e(t.target)),s?!this.options.handle||i||(e(this.options.handle,s).find("*").addBack().each(function(){this===t.target&&(a=!0)}),a)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(t,i,s){var a,n,r=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,r.cursorAt&&this._adjustOffsetFromHelper(r.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),r.containment&&this._setContainment(),r.cursor&&"auto"!==r.cursor&&(n=this.document.find("body"),this.storedCursor=n.css("cursor"),n.css("cursor",r.cursor),this.storedStylesheet=e("<style>*{ cursor: "+r.cursor+" !important; }</style>").appendTo(n)),r.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",r.opacity)),r.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",r.zIndex)),this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(a=this.containers.length-1;a>=0;a--)this.containers[a]._trigger("activate",t,this._uiHash(this));return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!r.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){var i,s,a,n,r=this.options,o=!1;for(this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==document&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY<r.scrollSensitivity?this.scrollParent[0].scrollTop=o=this.scrollParent[0].scrollTop+r.scrollSpeed:t.pageY-this.overflowOffset.top<r.scrollSensitivity&&(this.scrollParent[0].scrollTop=o=this.scrollParent[0].scrollTop-r.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-t.pageX<r.scrollSensitivity?this.scrollParent[0].scrollLeft=o=this.scrollParent[0].scrollLeft+r.scrollSpeed:t.pageX-this.overflowOffset.left<r.scrollSensitivity&&(this.scrollParent[0].scrollLeft=o=this.scrollParent[0].scrollLeft-r.scrollSpeed)):(t.pageY-e(document).scrollTop()<r.scrollSensitivity?o=e(document).scrollTop(e(document).scrollTop()-r.scrollSpeed):e(window).height()-(t.pageY-e(document).scrollTop())<r.scrollSensitivity&&(o=e(document).scrollTop(e(document).scrollTop()+r.scrollSpeed)),t.pageX-e(document).scrollLeft()<r.scrollSensitivity?o=e(document).scrollLeft(e(document).scrollLeft()-r.scrollSpeed):e(window).width()-(t.pageX-e(document).scrollLeft())<r.scrollSensitivity&&(o=e(document).scrollLeft(e(document).scrollLeft()+r.scrollSpeed))),o!==!1&&e.ui.ddmanager&&!r.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],a=s.item[0],n=this._intersectsWithPointer(s),n&&s.instance===this.currentContainer&&a!==this.currentItem[0]&&this.placeholder[1===n?"next":"prev"]()[0]!==a&&!e.contains(this.placeholder[0],a)&&("semi-dynamic"===this.options.type?!e.contains(this.element[0],a):!0)){if(this.direction=1===n?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,i){if(t){if(e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t),this.options.revert){var s=this,a=this.placeholder.offset(),n=this.options.axis,r={};n&&"x"!==n||(r.left=a.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollLeft)),n&&"y"!==n||(r.top=a.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===document.body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,e(this.helper).animate(r,parseInt(this.options.revert,10)||500,function(){s._clear(t)})}else this._clear(t,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp({target:null}),"original"===this.options.helper?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},e(i).each(function(){var i=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[\-=_](.+)/);i&&s.push((t.key||i[1]+"[]")+"="+(t.key&&t.expression?i[1]:i[2]))}),!s.length&&t.key&&s.push(t.key+"="),s.join("&")},toArray:function(t){var i=this._getItemsAsjQuery(t&&t.connected),s=[];return t=t||{},i.each(function(){s.push(e(t.item||this).attr(t.attribute||"id")||"")}),s},_intersectsWith:function(e){var t=this.positionAbs.left,i=t+this.helperProportions.width,s=this.positionAbs.top,a=s+this.helperProportions.height,n=e.left,r=n+e.width,o=e.top,h=o+e.height,l=this.offset.click.top,u=this.offset.click.left,c="x"===this.options.axis||s+l>o&&h>s+l,d="y"===this.options.axis||t+u>n&&r>t+u,p=c&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>e[this.floating?"width":"height"]?p:t+this.helperProportions.width/2>n&&r>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>o&&h>a-this.helperProportions.height/2},_intersectsWithPointer:function(e){var i="x"===this.options.axis||t(this.positionAbs.top+this.offset.click.top,e.top,e.height),s="y"===this.options.axis||t(this.positionAbs.left+this.offset.click.left,e.left,e.width),a=i&&s,n=this._getDragVerticalDirection(),r=this._getDragHorizontalDirection();return a?this.floating?r&&"right"===r||"down"===n?2:1:n&&("down"===n?2:1):!1},_intersectsWithSides:function(e){var i=t(this.positionAbs.top+this.offset.click.top,e.top+e.height/2,e.height),s=t(this.positionAbs.left+this.offset.click.left,e.left+e.width/2,e.width),a=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&s||"left"===n&&!s:a&&("down"===a&&i||"up"===a&&!i)},_getDragVerticalDirection:function(){var e=this.positionAbs.top-this.lastPositionAbs.top;return 0!==e&&(e>0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return 0!==e&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor===String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){var i,s,a,n,r=[],o=[],h=this._connectWith();if(h&&t)for(i=h.length-1;i>=0;i--)for(a=e(h[i]),s=a.length-1;s>=0;s--)n=e.data(a[s],this.widgetFullName),n&&n!==this&&!n.options.disabled&&o.push([e.isFunction(n.options.items)?n.options.items.call(n.element):e(n.options.items,n.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),n]);for(o.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),i=o.length-1;i>=0;i--)o[i][0].each(function(){r.push(this)});return e(r)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var i=0;t.length>i;i++)if(t[i]===e.item[0])return!1;return!0})},_refreshItems:function(t){this.items=[],this.containers=[this];var i,s,a,n,r,o,h,l,u=this.items,c=[[e.isFunction(this.options.items)?this.options.items.call(this.element[0],t,{item:this.currentItem}):e(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(a=e(d[i]),s=a.length-1;s>=0;s--)n=e.data(a[s],this.widgetFullName),n&&n!==this&&!n.options.disabled&&(c.push([e.isFunction(n.options.items)?n.options.items.call(n.element[0],t,{item:this.currentItem}):e(n.options.items,n.element),n]),this.containers.push(n));for(i=c.length-1;i>=0;i--)for(r=c[i][1],o=c[i][0],s=0,l=o.length;l>s;s++)h=e(o[s]),h.data(this.widgetName+"-item",r),u.push({item:h,instance:r,width:0,height:0,left:0,top:0})},refreshPositions:function(t){this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,a,n;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(a=this.options.toleranceElement?e(this.options.toleranceElement,s.item):s.item,t||(s.width=a.outerWidth(),s.height=a.outerHeight()),n=a.offset(),s.left=n.left,s.top=n.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)n=this.containers[i].element.offset(),this.containers[i].containerCache.left=n.left,this.containers[i].containerCache.top=n.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(t){t=t||this;var i,s=t.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=t.currentItem[0].nodeName.toLowerCase(),a=e("<"+s+">",t.document[0]).addClass(i||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper");return"tr"===s?t.currentItem.children().each(function(){e("<td>&#160;</td>",t.document[0]).attr("colspan",e(this).attr("colspan")||1).appendTo(a)}):"img"===s&&a.attr("src",t.currentItem.attr("src")),i||a.css("visibility","hidden"),a},update:function(e,a){(!i||s.forcePlaceholderSize)&&(a.height()||a.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),a.width()||a.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10)))}}),t.placeholder=e(s.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),s.placeholder.update(t,t.placeholder)},_contactContainers:function(s){var a,n,r,o,h,l,u,c,d,p,f=null,m=null;for(a=this.containers.length-1;a>=0;a--)if(!e.contains(this.currentItem[0],this.containers[a].element[0]))if(this._intersectsWith(this.containers[a].containerCache)){if(f&&e.contains(this.containers[a].element[0],f.element[0]))continue;f=this.containers[a],m=a}else this.containers[a].containerCache.over&&(this.containers[a]._trigger("out",s,this._uiHash(this)),this.containers[a].containerCache.over=0);if(f)if(1===this.containers.length)this.containers[m].containerCache.over||(this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1);else{for(r=1e4,o=null,p=f.floating||i(this.currentItem),h=p?"left":"top",l=p?"width":"height",u=this.positionAbs[h]+this.offset.click[h],n=this.items.length-1;n>=0;n--)e.contains(this.containers[m].element[0],this.items[n].item[0])&&this.items[n].item[0]!==this.currentItem[0]&&(!p||t(this.positionAbs.top+this.offset.click.top,this.items[n].top,this.items[n].height))&&(c=this.items[n].item.offset()[h],d=!1,Math.abs(c-u)>Math.abs(c+this.items[n][l]-u)&&(d=!0,c+=this.items[n][l]),r>Math.abs(c-u)&&(r=Math.abs(c-u),o=this.items[n],this.direction=d?"up":"down"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[m])return;o?this._rearrange(s,o,null,!0):this._rearrange(s,null,this.containers[m].element,!0),this._trigger("change",s,this._uiHash()),this.containers[m]._trigger("change",s,this._uiHash(this)),this.currentContainer=this.containers[m],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[m]._trigger("over",s,this._uiHash(this)),this.containers[m].containerCache.over=1}},_createHelper:function(t){var i=this.options,s=e.isFunction(i.helper)?e(i.helper.apply(this.element[0],[t,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||e("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(t){"string"==typeof t&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===document.body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&e.ui.ie)&&(t={top:0,left:0}),{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var e=this.currentItem.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t,i,s,a=this.options;"parent"===a.containment&&(a.containment=this.helper[0].parentNode),("document"===a.containment||"window"===a.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,e("document"===a.containment?document:window).width()-this.helperProportions.width-this.margins.left,(e("document"===a.containment?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(a.containment)||(t=e(a.containment)[0],i=e(a.containment).offset(),s="hidden"!==e(t).css("overflow"),this.containment=[i.left+(parseInt(e(t).css("borderLeftWidth"),10)||0)+(parseInt(e(t).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(e(t).css("borderTopWidth"),10)||0)+(parseInt(e(t).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(t.scrollWidth,t.offsetWidth):t.offsetWidth)-(parseInt(e(t).css("borderLeftWidth"),10)||0)-(parseInt(e(t).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(t.scrollHeight,t.offsetHeight):t.offsetHeight)-(parseInt(e(t).css("borderTopWidth"),10)||0)-(parseInt(e(t).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(t,i){i||(i=this.position);var s="absolute"===t?1:-1,a="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,n=/(html|body)/i.test(a[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():n?0:a.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():n?0:a.scrollLeft())*s}},_generatePosition:function(t){var i,s,a=this.options,n=t.pageX,r=t.pageY,o="absolute"!==this.cssPosition||this.scrollParent[0]!==document&&e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(o[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==document&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(t.pageX-this.offset.click.left<this.containment[0]&&(n=this.containment[0]+this.offset.click.left),t.pageY-this.offset.click.top<this.containment[1]&&(r=this.containment[1]+this.offset.click.top),t.pageX-this.offset.click.left>this.containment[2]&&(n=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(r=this.containment[3]+this.offset.click.top)),a.grid&&(i=this.originalPageY+Math.round((r-this.originalPageY)/a.grid[1])*a.grid[1],r=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-a.grid[1]:i+a.grid[1]:i,s=this.originalPageX+Math.round((n-this.originalPageX)/a.grid[0])*a.grid[0],n=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-a.grid[0]:s+a.grid[0]:s)),{top:r-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:o.scrollTop()),left:n-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:o.scrollLeft())}},_rearrange:function(e,t,i,s){i?i[0].appendChild(this.placeholder[0]):t.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?t.item[0]:t.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var a=this.counter;this._delay(function(){a===this.counter&&this.refreshPositions(!s)})},_clear:function(e,t){this.reverting=!1;var i,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(i in this._storedCSS)("auto"===this._storedCSS[i]||"static"===this._storedCSS[i])&&(this._storedCSS[i]="");this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!t&&s.push(function(e){this._trigger("receive",e,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||t||s.push(function(e){this._trigger("update",e,this._uiHash())}),this!==this.currentContainer&&(t||(s.push(function(e){this._trigger("remove",e,this._uiHash())}),s.push(function(e){return function(t){e._trigger("receive",t,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(e){return function(t){e._trigger("update",t,this._uiHash(this))}}.call(this,this.currentContainer)))),i=this.containers.length-1;i>=0;i--)t||s.push(function(e){return function(t){e._trigger("deactivate",t,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over&&(s.push(function(e){return function(t){e._trigger("out",t,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,this.cancelHelperRemoval){if(!t){for(this._trigger("beforeStop",e,this._uiHash()),i=0;s.length>i;i++)s[i].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!1}if(t||this._trigger("beforeStop",e,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null,!t){for(i=0;s.length>i;i++)s[i].call(this,e);this._trigger("stop",e,this._uiHash())}return this.fromOutside=!1,!0},_trigger:function(){e.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(t){var i=t||this;return{helper:i.helper,placeholder:i.placeholder||e([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:t?t.element:null}}})})(jQuery);(function(e){var t=0,i={},a={};i.height=i.paddingTop=i.paddingBottom=i.borderTopWidth=i.borderBottomWidth="hide",a.height=a.paddingTop=a.paddingBottom=a.borderTopWidth=a.borderBottomWidth="show",e.widget("ui.accordion",{version:"1.10.3",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e(),content:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("<span>").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),this._destroyIcons(),e=this.headers.next().css("display","").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").each(function(){/^ui-accordion/.test(this.id)&&this.removeAttribute("id")}),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),undefined):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t),undefined)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,a=this.headers.length,s=this.headers.index(t.target),n=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:n=this.headers[(s+1)%a];break;case i.LEFT:case i.UP:n=this.headers[(s-1+a)%a];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:n=this.headers[0];break;case i.END:n=this.headers[a-1]}n&&(e(t.target).attr("tabIndex",-1),e(n).attr("tabIndex",0),n.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all"),this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide()},_refresh:function(){var i,a=this.options,s=a.heightStyle,n=this.element.parent(),r=this.accordionId="ui-accordion-"+(this.element.attr("id")||++t);this.active=this._findActive(a.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(t){var i=e(this),a=i.attr("id"),s=i.next(),n=s.attr("id");a||(a=r+"-header-"+t,i.attr("id",a)),n||(n=r+"-panel-"+t,s.attr("id",n)),i.attr("aria-controls",n),s.attr("aria-labelledby",a)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false",tabIndex:-1}).next().attr({"aria-expanded":"false","aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true",tabIndex:0}).next().attr({"aria-expanded":"true","aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(a.event),"fill"===s?(i=n.height(),this.element.siblings(":visible").each(function(){var t=e(this),a=t.css("position");"absolute"!==a&&"fixed"!==a&&(i-=t.outerHeight(!0))}),this.headers.each(function(){i-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(i=0,this.headers.next().each(function(){i=Math.max(i,e(this).css("height","").height())}).height(i))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,a=this.active,s=e(t.currentTarget),n=s[0]===a[0],r=n&&i.collapsible,o=r?e():s.next(),h=a.next(),l={oldHeader:a,oldPanel:h,newHeader:r?e():s,newPanel:o};t.preventDefault(),n&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=r?!1:this.headers.index(s),this.active=n?e():s,this._toggle(l),a.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&a.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),n||(s.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),s.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,a=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=a,this.options.animate?this._animate(i,a,t):(a.hide(),i.show(),this._toggleComplete(t)),a.attr({"aria-expanded":"false","aria-hidden":"true"}),a.prev().attr("aria-selected","false"),i.length&&a.length?a.prev().attr("tabIndex",-1):i.length&&this.headers.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}).prev().attr({"aria-selected":"true",tabIndex:0})},_animate:function(e,t,s){var n,r,o,h=this,l=0,u=e.length&&(!t.length||e.index()<t.index()),d=this.options.animate||{},c=u&&d.down||d,p=function(){h._toggleComplete(s)};return"number"==typeof c&&(o=c),"string"==typeof c&&(r=c),r=r||c.easing||d.easing,o=o||c.duration||d.duration,t.length?e.length?(n=e.show().outerHeight(),t.animate(i,{duration:o,easing:r,step:function(e,t){t.now=Math.round(e)}}),e.hide().animate(a,{duration:o,easing:r,complete:p,step:function(e,i){i.now=Math.round(e),"height"!==i.prop?l+=i.now:"content"!==h.options.heightStyle&&(i.now=Math.round(n-t.outerHeight()-l),l=0)}}),undefined):t.animate(i,o,r,p):e.animate(a,o,r,p)},_toggleComplete:function(e){var t=e.oldPanel;t.removeClass("ui-accordion-content-active").prev().removeClass("ui-corner-top").addClass("ui-corner-all"),t.length&&(t.parent()[0].className=t.parent()[0].className),this._trigger("activate",null,e)}})})(jQuery);(function(e){var t=0;e.widget("ui.autocomplete",{version:"1.10.3",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},pending:0,_create:function(){var t,i,a,s=this.element[0].nodeName.toLowerCase(),n="textarea"===s,r="input"===s;this.isMultiLine=n?!0:r?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[n||r?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(s){if(this.element.prop("readOnly"))return t=!0,a=!0,i=!0,undefined;t=!1,a=!1,i=!1;var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:t=!0,this._move("previousPage",s);break;case n.PAGE_DOWN:t=!0,this._move("nextPage",s);break;case n.UP:t=!0,this._keyEvent("previous",s);break;case n.DOWN:t=!0,this._keyEvent("next",s);break;case n.ENTER:case n.NUMPAD_ENTER:this.menu.active&&(t=!0,s.preventDefault(),this.menu.select(s));break;case n.TAB:this.menu.active&&this.menu.select(s);break;case n.ESCAPE:this.menu.element.is(":visible")&&(this._value(this.term),this.close(s),s.preventDefault());break;default:i=!0,this._searchTimeout(s)}},keypress:function(a){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&a.preventDefault(),undefined;if(!i){var s=e.ui.keyCode;switch(a.keyCode){case s.PAGE_UP:this._move("previousPage",a);break;case s.PAGE_DOWN:this._move("nextPage",a);break;case s.UP:this._keyEvent("previous",a);break;case s.DOWN:this._keyEvent("next",a)}}},input:function(e){return a?(a=!1,e.preventDefault(),undefined):(this._searchTimeout(e),undefined)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,undefined):(clearTimeout(this.searching),this.close(e),this._change(e),undefined)}}),this._initSource(),this.menu=e("<ul>").addClass("ui-autocomplete ui-front").appendTo(this._appendTo()).menu({role:null}).hide().data("ui-menu"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur});var i=this.menu.element[0];e(t.target).closest(".ui-menu-item").length||this._delay(function(){var t=this;this.document.one("mousedown",function(a){a.target===t.element[0]||a.target===i||e.contains(i,a.target)||t.close()})})},menufocus:function(t,i){if(this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type)))return this.menu.blur(),this.document.one("mousemove",function(){e(t.target).trigger(t.originalEvent)}),undefined;var a=i.item.data("ui-autocomplete-item");!1!==this._trigger("focus",t,{item:a})?t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(a.value):this.liveRegion.text(a.value)},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),a=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.focus(),this.previous=a,this._delay(function(){this.previous=a,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=e("<span>",{role:"status","aria-live":"polite"}).addClass("ui-helper-hidden-accessible").insertBefore(this.element),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t||(t=this.element.closest(".ui-front")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,a=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,a){a(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,s){a.xhr&&a.xhr.abort(),a.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){s(e)},error:function(){s([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay(function(){this.term!==this._value()&&(this.selectedItem=null,this.search(null,e))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):this._trigger("search",t)!==!1?this._search(e):undefined},_search:function(e){this.pending++,this.element.addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var e=this,i=++t;return function(a){i===t&&e.__response(a),e.pending--,e.pending||e.element.removeClass("ui-autocomplete-loading")}},__response:function(e){e&&(e=this._normalize(e)),this._trigger("response",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger("open")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",e))},_change:function(e){this.previous!==this._value()&&this._trigger("change",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,function(t){return"string"==typeof t?{label:t,value:t}:e.extend({label:t.label||t.value,value:t.value||t.label},t)})},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next()},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var a=this;e.each(i,function(e,i){a._renderItemData(t,i)})},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-autocomplete-item",t)},_renderItem:function(t,i){return e("<li>").append(e("<a>").text(i.label)).appendTo(t)},_move:function(e,t){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this._value(this.term),this.menu.blur(),undefined):(this.menu[e](t),undefined):(this.search(null,t),undefined)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(e,t),t.preventDefault())}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var a=RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,function(e){return a.test(e.label||e.value||e)})}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var t;this._superApply(arguments),this.options.disabled||this.cancelSearch||(t=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.text(t))}})})(jQuery);(function(e){var t,i,a,s,n="ui-button ui-widget ui-state-default ui-corner-all",r="ui-state-hover ui-state-active ",o="ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",h=function(){var t=e(this);setTimeout(function(){t.find(":ui-button").button("refresh")},1)},l=function(t){var i=t.name,a=t.form,s=e([]);return i&&(i=i.replace(/'/g,"\\'"),s=a?e(a).find("[name='"+i+"']"):e("[name='"+i+"']",t.ownerDocument).filter(function(){return!this.form})),s};e.widget("ui.button",{version:"1.10.3",defaultElement:"<button>",options:{disabled:null,text:!0,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset"+this.eventNamespace).bind("reset"+this.eventNamespace,h),"boolean"!=typeof this.options.disabled?this.options.disabled=!!this.element.prop("disabled"):this.element.prop("disabled",this.options.disabled),this._determineButtonType(),this.hasTitle=!!this.buttonElement.attr("title");var r=this,o=this.options,u="checkbox"===this.type||"radio"===this.type,d=u?"":"ui-state-active",c="ui-state-focus";null===o.label&&(o.label="input"===this.type?this.buttonElement.val():this.buttonElement.html()),this._hoverable(this.buttonElement),this.buttonElement.addClass(n).attr("role","button").bind("mouseenter"+this.eventNamespace,function(){o.disabled||this===t&&e(this).addClass("ui-state-active")}).bind("mouseleave"+this.eventNamespace,function(){o.disabled||e(this).removeClass(d)}).bind("click"+this.eventNamespace,function(e){o.disabled&&(e.preventDefault(),e.stopImmediatePropagation())}),this.element.bind("focus"+this.eventNamespace,function(){r.buttonElement.addClass(c)}).bind("blur"+this.eventNamespace,function(){r.buttonElement.removeClass(c)}),u&&(this.element.bind("change"+this.eventNamespace,function(){s||r.refresh()}),this.buttonElement.bind("mousedown"+this.eventNamespace,function(e){o.disabled||(s=!1,i=e.pageX,a=e.pageY)}).bind("mouseup"+this.eventNamespace,function(e){o.disabled||(i!==e.pageX||a!==e.pageY)&&(s=!0)})),"checkbox"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){return o.disabled||s?!1:undefined}):"radio"===this.type?this.buttonElement.bind("click"+this.eventNamespace,function(){if(o.disabled||s)return!1;e(this).addClass("ui-state-active"),r.buttonElement.attr("aria-pressed","true");var t=r.element[0];l(t).not(t).map(function(){return e(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")}):(this.buttonElement.bind("mousedown"+this.eventNamespace,function(){return o.disabled?!1:(e(this).addClass("ui-state-active"),t=this,r.document.one("mouseup",function(){t=null}),undefined)}).bind("mouseup"+this.eventNamespace,function(){return o.disabled?!1:(e(this).removeClass("ui-state-active"),undefined)}).bind("keydown"+this.eventNamespace,function(t){return o.disabled?!1:((t.keyCode===e.ui.keyCode.SPACE||t.keyCode===e.ui.keyCode.ENTER)&&e(this).addClass("ui-state-active"),undefined)}).bind("keyup"+this.eventNamespace+" blur"+this.eventNamespace,function(){e(this).removeClass("ui-state-active")}),this.buttonElement.is("a")&&this.buttonElement.keyup(function(t){t.keyCode===e.ui.keyCode.SPACE&&e(this).click()})),this._setOption("disabled",o.disabled),this._resetButton()},_determineButtonType:function(){var e,t,i;this.type=this.element.is("[type=checkbox]")?"checkbox":this.element.is("[type=radio]")?"radio":this.element.is("input")?"input":"button","checkbox"===this.type||"radio"===this.type?(e=this.element.parents().last(),t="label[for='"+this.element.attr("id")+"']",this.buttonElement=e.find(t),this.buttonElement.length||(e=e.length?e.siblings():this.element.siblings(),this.buttonElement=e.filter(t),this.buttonElement.length||(this.buttonElement=e.find(t))),this.element.addClass("ui-helper-hidden-accessible"),i=this.element.is(":checked"),i&&this.buttonElement.addClass("ui-state-active"),this.buttonElement.prop("aria-pressed",i)):this.buttonElement=this.element},widget:function(){return this.buttonElement},_destroy:function(){this.element.removeClass("ui-helper-hidden-accessible"),this.buttonElement.removeClass(n+" "+r+" "+o).removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html()),this.hasTitle||this.buttonElement.removeAttr("title")},_setOption:function(e,t){return this._super(e,t),"disabled"===e?(t?this.element.prop("disabled",!0):this.element.prop("disabled",!1),undefined):(this._resetButton(),undefined)},refresh:function(){var t=this.element.is("input, button")?this.element.is(":disabled"):this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOption("disabled",t),"radio"===this.type?l(this.element[0]).each(function(){e(this).is(":checked")?e(this).button("widget").addClass("ui-state-active").attr("aria-pressed","true"):e(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")}):"checkbox"===this.type&&(this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false"))},_resetButton:function(){if("input"===this.type)return this.options.label&&this.element.val(this.options.label),undefined;var t=this.buttonElement.removeClass(o),i=e("<span></span>",this.document[0]).addClass("ui-button-text").html(this.options.label).appendTo(t.empty()).text(),a=this.options.icons,s=a.primary&&a.secondary,n=[];a.primary||a.secondary?(this.options.text&&n.push("ui-button-text-icon"+(s?"s":a.primary?"-primary":"-secondary")),a.primary&&t.prepend("<span class='ui-button-icon-primary ui-icon "+a.primary+"'></span>"),a.secondary&&t.append("<span class='ui-button-icon-secondary ui-icon "+a.secondary+"'></span>"),this.options.text||(n.push(s?"ui-button-icons-only":"ui-button-icon-only"),this.hasTitle||t.attr("title",e.trim(i)))):n.push("ui-button-text-only"),t.addClass(n.join(" "))}}),e.widget("ui.buttonset",{version:"1.10.3",options:{items:"button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(e,t){"disabled"===e&&this.buttons.button("option",e,t),this._super(e,t)},refresh:function(){var t="rtl"===this.element.css("direction");this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(t?"ui-corner-right":"ui-corner-left").end().filter(":last").addClass(t?"ui-corner-left":"ui-corner-right").end().end()},_destroy:function(){this.element.removeClass("ui-buttonset"),this.buttons.map(function(){return e(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy")}})})(jQuery);(function(e,t){function i(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},e.extend(this._defaults,this.regional[""]),this.dpDiv=a(e("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(i,"mouseout",function(){e(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",function(){e.datepicker._isDisabledDatepicker(n.inline?t.parent()[0]:n.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).addClass("ui-datepicker-next-hover"))})}function s(t,i){e.extend(t,i);for(var a in i)null==i[a]&&(t[a]=i[a]);return t}e.extend(e.ui,{datepicker:{version:"1.10.3"}});var n,r="datepicker";e.extend(i.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(e){return s(this._defaults,e||{}),this},_attachDatepicker:function(t,i){var a,s,n;a=t.nodeName.toLowerCase(),s="div"===a||"span"===a,t.id||(this.uuid+=1,t.id="dp"+this.uuid),n=this._newInst(e(t),s),n.settings=e.extend({},i||{}),"input"===a?this._connectDatepicker(t,n):s&&this._inlineDatepicker(t,n)},_newInst:function(t,i){var s=t[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:t,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?a(e("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(t,i){var a=e(t);i.append=e([]),i.trigger=e([]),a.hasClass(this.markerClassName)||(this._attachments(a,i),a.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp),this._autoSize(i),e.data(t,r,i),i.settings.disabled&&this._disableDatepicker(t))},_attachments:function(t,i){var a,s,n,r=this._get(i,"appendText"),o=this._get(i,"isRTL");i.append&&i.append.remove(),r&&(i.append=e("<span class='"+this._appendClass+"'>"+r+"</span>"),t[o?"before":"after"](i.append)),t.unbind("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),a=this._get(i,"showOn"),("focus"===a||"both"===a)&&t.focus(this._showDatepicker),("button"===a||"both"===a)&&(s=this._get(i,"buttonText"),n=this._get(i,"buttonImage"),i.trigger=e(this._get(i,"buttonImageOnly")?e("<img/>").addClass(this._triggerClass).attr({src:n,alt:s,title:s}):e("<button type='button'></button>").addClass(this._triggerClass).html(n?e("<img/>").attr({src:n,alt:s,title:s}):s)),t[o?"before":"after"](i.trigger),i.trigger.click(function(){return e.datepicker._datepickerShowing&&e.datepicker._lastInput===t[0]?e.datepicker._hideDatepicker():e.datepicker._datepickerShowing&&e.datepicker._lastInput!==t[0]?(e.datepicker._hideDatepicker(),e.datepicker._showDatepicker(t[0])):e.datepicker._showDatepicker(t[0]),!1}))},_autoSize:function(e){if(this._get(e,"autoSize")&&!e.inline){var t,i,a,s,n=new Date(2009,11,20),r=this._get(e,"dateFormat");r.match(/[DM]/)&&(t=function(e){for(i=0,a=0,s=0;e.length>s;s++)e[s].length>i&&(i=e[s].length,a=s);return a},n.setMonth(t(this._get(e,r.match(/MM/)?"monthNames":"monthNamesShort"))),n.setDate(t(this._get(e,r.match(/DD/)?"dayNames":"dayNamesShort"))+20-n.getDay())),e.input.attr("size",this._formatDate(e,n).length)}},_inlineDatepicker:function(t,i){var a=e(t);a.hasClass(this.markerClassName)||(a.addClass(this.markerClassName).append(i.dpDiv),e.data(t,r,i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(t),i.dpDiv.css("display","block"))},_dialogDatepicker:function(t,i,a,n,o){var h,l,u,d,c,p=this._dialogInst;return p||(this.uuid+=1,h="dp"+this.uuid,this._dialogInput=e("<input type='text' id='"+h+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.keydown(this._doKeyDown),e("body").append(this._dialogInput),p=this._dialogInst=this._newInst(this._dialogInput,!1),p.settings={},e.data(this._dialogInput[0],r,p)),s(p.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(p,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(l=document.documentElement.clientWidth,u=document.documentElement.clientHeight,d=document.documentElement.scrollLeft||document.body.scrollLeft,c=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[l/2-100+d,u/2-150+c]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),p.settings.onSelect=a,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),e.blockUI&&e.blockUI(this.dpDiv),e.data(this._dialogInput[0],r,p),this},_destroyDatepicker:function(t){var i,a=e(t),s=e.data(t,r);a.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),e.removeData(t,r),"input"===i?(s.append.remove(),s.trigger.remove(),a.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)):("div"===i||"span"===i)&&a.removeClass(this.markerClassName).empty())},_enableDatepicker:function(t){var i,a,s=e(t),n=e.data(t,r);s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!1,n.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(a=s.children("."+this._inlineClass),a.children().removeClass("ui-state-disabled"),a.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}))},_disableDatepicker:function(t){var i,a,s=e(t),n=e.data(t,r);s.hasClass(this.markerClassName)&&(i=t.nodeName.toLowerCase(),"input"===i?(t.disabled=!0,n.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(a=s.children("."+this._inlineClass),a.children().addClass("ui-state-disabled"),a.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=e.map(this._disabledInputs,function(e){return e===t?null:e}),this._disabledInputs[this._disabledInputs.length]=t)},_isDisabledDatepicker:function(e){if(!e)return!1;for(var t=0;this._disabledInputs.length>t;t++)if(this._disabledInputs[t]===e)return!0;return!1},_getInst:function(t){try{return e.data(t,r)}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(i,a,n){var r,o,h,l,u=this._getInst(i);return 2===arguments.length&&"string"==typeof a?"defaults"===a?e.extend({},e.datepicker._defaults):u?"all"===a?e.extend({},u.settings):this._get(u,a):null:(r=a||{},"string"==typeof a&&(r={},r[a]=n),u&&(this._curInst===u&&this._hideDatepicker(),o=this._getDateDatepicker(i,!0),h=this._getMinMaxDate(u,"min"),l=this._getMinMaxDate(u,"max"),s(u.settings,r),null!==h&&r.dateFormat!==t&&r.minDate===t&&(u.settings.minDate=this._formatDate(u,h)),null!==l&&r.dateFormat!==t&&r.maxDate===t&&(u.settings.maxDate=this._formatDate(u,l)),"disabled"in r&&(r.disabled?this._disableDatepicker(i):this._enableDatepicker(i)),this._attachments(e(i),u),this._autoSize(u),this._setDate(u,o),this._updateAlternate(u),this._updateDatepicker(u)),t)},_changeDatepicker:function(e,t,i){this._optionDatepicker(e,t,i)},_refreshDatepicker:function(e){var t=this._getInst(e);t&&this._updateDatepicker(t)},_setDateDatepicker:function(e,t){var i=this._getInst(e);i&&(this._setDate(i,t),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(e,t){var i=this._getInst(e);return i&&!i.inline&&this._setDateFromField(i,t),i?this._getDate(i):null},_doKeyDown:function(t){var i,a,s,n=e.datepicker._getInst(t.target),r=!0,o=n.dpDiv.is(".ui-datepicker-rtl");if(n._keyEvent=!0,e.datepicker._datepickerShowing)switch(t.keyCode){case 9:e.datepicker._hideDatepicker(),r=!1;break;case 13:return s=e("td."+e.datepicker._dayOverClass+":not(."+e.datepicker._currentClass+")",n.dpDiv),s[0]&&e.datepicker._selectDay(t.target,n.selectedMonth,n.selectedYear,s[0]),i=e.datepicker._get(n,"onSelect"),i?(a=e.datepicker._formatDate(n),i.apply(n.input?n.input[0]:null,[a,n])):e.datepicker._hideDatepicker(),!1;case 27:e.datepicker._hideDatepicker();break;case 33:e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(n,"stepBigMonths"):-e.datepicker._get(n,"stepMonths"),"M");break;case 34:e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(n,"stepBigMonths"):+e.datepicker._get(n,"stepMonths"),"M");break;case 35:(t.ctrlKey||t.metaKey)&&e.datepicker._clearDate(t.target),r=t.ctrlKey||t.metaKey;break;case 36:(t.ctrlKey||t.metaKey)&&e.datepicker._gotoToday(t.target),r=t.ctrlKey||t.metaKey;break;case 37:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,o?1:-1,"D"),r=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?-e.datepicker._get(n,"stepBigMonths"):-e.datepicker._get(n,"stepMonths"),"M");break;case 38:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,-7,"D"),r=t.ctrlKey||t.metaKey;break;case 39:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,o?-1:1,"D"),r=t.ctrlKey||t.metaKey,t.originalEvent.altKey&&e.datepicker._adjustDate(t.target,t.ctrlKey?+e.datepicker._get(n,"stepBigMonths"):+e.datepicker._get(n,"stepMonths"),"M");break;case 40:(t.ctrlKey||t.metaKey)&&e.datepicker._adjustDate(t.target,7,"D"),r=t.ctrlKey||t.metaKey;break;default:r=!1}else 36===t.keyCode&&t.ctrlKey?e.datepicker._showDatepicker(this):r=!1;r&&(t.preventDefault(),t.stopPropagation())},_doKeyPress:function(i){var a,s,n=e.datepicker._getInst(i.target);return e.datepicker._get(n,"constrainInput")?(a=e.datepicker._possibleChars(e.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==i.charCode?i.keyCode:i.charCode),i.ctrlKey||i.metaKey||" ">s||!a||a.indexOf(s)>-1):t},_doKeyUp:function(t){var i,a=e.datepicker._getInst(t.target);if(a.input.val()!==a.lastVal)try{i=e.datepicker.parseDate(e.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,e.datepicker._getFormatConfig(a)),i&&(e.datepicker._setDateFromField(a),e.datepicker._updateAlternate(a),e.datepicker._updateDatepicker(a))}catch(s){}return!0},_showDatepicker:function(t){if(t=t.target||t,"input"!==t.nodeName.toLowerCase()&&(t=e("input",t.parentNode)[0]),!e.datepicker._isDisabledDatepicker(t)&&e.datepicker._lastInput!==t){var i,a,n,r,o,h,l;i=e.datepicker._getInst(t),e.datepicker._curInst&&e.datepicker._curInst!==i&&(e.datepicker._curInst.dpDiv.stop(!0,!0),i&&e.datepicker._datepickerShowing&&e.datepicker._hideDatepicker(e.datepicker._curInst.input[0])),a=e.datepicker._get(i,"beforeShow"),n=a?a.apply(t,[t,i]):{},n!==!1&&(s(i.settings,n),i.lastVal=null,e.datepicker._lastInput=t,e.datepicker._setDateFromField(i),e.datepicker._inDialog&&(t.value=""),e.datepicker._pos||(e.datepicker._pos=e.datepicker._findPos(t),e.datepicker._pos[1]+=t.offsetHeight),r=!1,e(t).parents().each(function(){return r|="fixed"===e(this).css("position"),!r}),o={left:e.datepicker._pos[0],top:e.datepicker._pos[1]},e.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),e.datepicker._updateDatepicker(i),o=e.datepicker._checkOffset(i,o,r),i.dpDiv.css({position:e.datepicker._inDialog&&e.blockUI?"static":r?"fixed":"absolute",display:"none",left:o.left+"px",top:o.top+"px"}),i.inline||(h=e.datepicker._get(i,"showAnim"),l=e.datepicker._get(i,"duration"),i.dpDiv.zIndex(e(t).zIndex()+1),e.datepicker._datepickerShowing=!0,e.effects&&e.effects.effect[h]?i.dpDiv.show(h,e.datepicker._get(i,"showOptions"),l):i.dpDiv[h||"show"](h?l:null),e.datepicker._shouldFocusInput(i)&&i.input.focus(),e.datepicker._curInst=i))}},_updateDatepicker:function(t){this.maxRows=4,n=t,t.dpDiv.empty().append(this._generateHTML(t)),this._attachHandlers(t),t.dpDiv.find("."+this._dayOverClass+" a").mouseover();var i,a=this._getNumberOfMonths(t),s=a[1],r=17;t.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),s>1&&t.dpDiv.addClass("ui-datepicker-multi-"+s).css("width",r*s+"em"),t.dpDiv[(1!==a[0]||1!==a[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),t.dpDiv[(this._get(t,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),t===e.datepicker._curInst&&e.datepicker._datepickerShowing&&e.datepicker._shouldFocusInput(t)&&t.input.focus(),t.yearshtml&&(i=t.yearshtml,setTimeout(function(){i===t.yearshtml&&t.yearshtml&&t.dpDiv.find("select.ui-datepicker-year:first").replaceWith(t.yearshtml),i=t.yearshtml=null},0))},_shouldFocusInput:function(e){return e.input&&e.input.is(":visible")&&!e.input.is(":disabled")&&!e.input.is(":focus")},_checkOffset:function(t,i,a){var s=t.dpDiv.outerWidth(),n=t.dpDiv.outerHeight(),r=t.input?t.input.outerWidth():0,o=t.input?t.input.outerHeight():0,h=document.documentElement.clientWidth+(a?0:e(document).scrollLeft()),l=document.documentElement.clientHeight+(a?0:e(document).scrollTop());return i.left-=this._get(t,"isRTL")?s-r:0,i.left-=a&&i.left===t.input.offset().left?e(document).scrollLeft():0,i.top-=a&&i.top===t.input.offset().top+o?e(document).scrollTop():0,i.left-=Math.min(i.left,i.left+s>h&&h>s?Math.abs(i.left+s-h):0),i.top-=Math.min(i.top,i.top+n>l&&l>n?Math.abs(n+o):0),i},_findPos:function(t){for(var i,a=this._getInst(t),s=this._get(a,"isRTL");t&&("hidden"===t.type||1!==t.nodeType||e.expr.filters.hidden(t));)t=t[s?"previousSibling":"nextSibling"];return i=e(t).offset(),[i.left,i.top]},_hideDatepicker:function(t){var i,a,s,n,o=this._curInst;!o||t&&o!==e.data(t,r)||this._datepickerShowing&&(i=this._get(o,"showAnim"),a=this._get(o,"duration"),s=function(){e.datepicker._tidyDialog(o)},e.effects&&(e.effects.effect[i]||e.effects[i])?o.dpDiv.hide(i,e.datepicker._get(o,"showOptions"),a,s):o.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?a:null,s),i||s(),this._datepickerShowing=!1,n=this._get(o,"onClose"),n&&n.apply(o.input?o.input[0]:null,[o.input?o.input.val():"",o]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),e.blockUI&&(e.unblockUI(),e("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(e){e.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(t){if(e.datepicker._curInst){var i=e(t.target),a=e.datepicker._getInst(i[0]);(i[0].id!==e.datepicker._mainDivId&&0===i.parents("#"+e.datepicker._mainDivId).length&&!i.hasClass(e.datepicker.markerClassName)&&!i.closest("."+e.datepicker._triggerClass).length&&e.datepicker._datepickerShowing&&(!e.datepicker._inDialog||!e.blockUI)||i.hasClass(e.datepicker.markerClassName)&&e.datepicker._curInst!==a)&&e.datepicker._hideDatepicker()}},_adjustDate:function(t,i,a){var s=e(t),n=this._getInst(s[0]);this._isDisabledDatepicker(s[0])||(this._adjustInstDate(n,i+("M"===a?this._get(n,"showCurrentAtPos"):0),a),this._updateDatepicker(n))},_gotoToday:function(t){var i,a=e(t),s=this._getInst(a[0]);this._get(s,"gotoCurrent")&&s.currentDay?(s.selectedDay=s.currentDay,s.drawMonth=s.selectedMonth=s.currentMonth,s.drawYear=s.selectedYear=s.currentYear):(i=new Date,s.selectedDay=i.getDate(),s.drawMonth=s.selectedMonth=i.getMonth(),s.drawYear=s.selectedYear=i.getFullYear()),this._notifyChange(s),this._adjustDate(a)},_selectMonthYear:function(t,i,a){var s=e(t),n=this._getInst(s[0]);n["selected"+("M"===a?"Month":"Year")]=n["draw"+("M"===a?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(n),this._adjustDate(s)},_selectDay:function(t,i,a,s){var n,r=e(t);e(s).hasClass(this._unselectableClass)||this._isDisabledDatepicker(r[0])||(n=this._getInst(r[0]),n.selectedDay=n.currentDay=e("a",s).html(),n.selectedMonth=n.currentMonth=i,n.selectedYear=n.currentYear=a,this._selectDate(t,this._formatDate(n,n.currentDay,n.currentMonth,n.currentYear)))},_clearDate:function(t){var i=e(t);this._selectDate(i,"")},_selectDate:function(t,i){var a,s=e(t),n=this._getInst(s[0]);i=null!=i?i:this._formatDate(n),n.input&&n.input.val(i),this._updateAlternate(n),a=this._get(n,"onSelect"),a?a.apply(n.input?n.input[0]:null,[i,n]):n.input&&n.input.trigger("change"),n.inline?this._updateDatepicker(n):(this._hideDatepicker(),this._lastInput=n.input[0],"object"!=typeof n.input[0]&&n.input.focus(),this._lastInput=null)},_updateAlternate:function(t){var i,a,s,n=this._get(t,"altField");n&&(i=this._get(t,"altFormat")||this._get(t,"dateFormat"),a=this._getDate(t),s=this.formatDate(i,a,this._getFormatConfig(t)),e(n).each(function(){e(this).val(s)}))},noWeekends:function(e){var t=e.getDay();return[t>0&&6>t,""]},iso8601Week:function(e){var t,i=new Date(e.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),t=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((t-i)/864e5)/7)+1},parseDate:function(i,a,s){if(null==i||null==a)throw"Invalid arguments";if(a="object"==typeof a?""+a:a+"",""===a)return null;var n,r,o,h,l=0,u=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,d="string"!=typeof u?u:(new Date).getFullYear()%100+parseInt(u,10),c=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,p=(s?s.dayNames:null)||this._defaults.dayNames,m=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,v=-1,y=-1,b=-1,_=!1,k=function(e){var t=i.length>n+1&&i.charAt(n+1)===e;return t&&n++,t},x=function(e){var t=k(e),i="@"===e?14:"!"===e?20:"y"===e&&t?4:"o"===e?3:2,s=RegExp("^\\d{1,"+i+"}"),n=a.substring(l).match(s);if(!n)throw"Missing number at position "+l;return l+=n[0].length,parseInt(n[0],10)},D=function(i,s,n){var r=-1,o=e.map(k(i)?n:s,function(e,t){return[[t,e]]}).sort(function(e,t){return-(e[1].length-t[1].length)});if(e.each(o,function(e,i){var s=i[1];return a.substr(l,s.length).toLowerCase()===s.toLowerCase()?(r=i[0],l+=s.length,!1):t}),-1!==r)return r+1;throw"Unknown name at position "+l},w=function(){if(a.charAt(l)!==i.charAt(n))throw"Unexpected literal at position "+l;l++};for(n=0;i.length>n;n++)if(_)"'"!==i.charAt(n)||k("'")?w():_=!1;else switch(i.charAt(n)){case"d":y=x("d");break;case"D":D("D",c,p);break;case"o":b=x("o");break;case"m":v=x("m");break;case"M":v=D("M",m,f);break;case"y":g=x("y");break;case"@":h=new Date(x("@")),g=h.getFullYear(),v=h.getMonth()+1,y=h.getDate();break;case"!":h=new Date((x("!")-this._ticksTo1970)/1e4),g=h.getFullYear(),v=h.getMonth()+1,y=h.getDate();break;case"'":k("'")?w():_=!0;break;default:w()}if(a.length>l&&(o=a.substr(l),!/^\s+/.test(o)))throw"Extra/unparsed characters found in date: "+o;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(d>=g?0:-100)),b>-1)for(v=1,y=b;;){if(r=this._getDaysInMonth(g,v-1),r>=y)break;v++,y-=r}if(h=this._daylightSavingAdjust(new Date(g,v-1,y)),h.getFullYear()!==g||h.getMonth()+1!==v||h.getDate()!==y)throw"Invalid date";return h},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(e,t,i){if(!t)return"";var a,s=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,n=(i?i.dayNames:null)||this._defaults.dayNames,r=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,o=(i?i.monthNames:null)||this._defaults.monthNames,h=function(t){var i=e.length>a+1&&e.charAt(a+1)===t;return i&&a++,i},l=function(e,t,i){var a=""+t;if(h(e))for(;i>a.length;)a="0"+a;return a},u=function(e,t,i,a){return h(e)?a[t]:i[t]},d="",c=!1;if(t)for(a=0;e.length>a;a++)if(c)"'"!==e.charAt(a)||h("'")?d+=e.charAt(a):c=!1;else switch(e.charAt(a)){case"d":d+=l("d",t.getDate(),2);break;case"D":d+=u("D",t.getDay(),s,n);break;case"o":d+=l("o",Math.round((new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()-new Date(t.getFullYear(),0,0).getTime())/864e5),3);break;case"m":d+=l("m",t.getMonth()+1,2);break;case"M":d+=u("M",t.getMonth(),r,o);break;case"y":d+=h("y")?t.getFullYear():(10>t.getYear()%100?"0":"")+t.getYear()%100;break;case"@":d+=t.getTime();break;case"!":d+=1e4*t.getTime()+this._ticksTo1970;break;case"'":h("'")?d+="'":c=!0;break;default:d+=e.charAt(a)}return d},_possibleChars:function(e){var t,i="",a=!1,s=function(i){var a=e.length>t+1&&e.charAt(t+1)===i;return a&&t++,a};for(t=0;e.length>t;t++)if(a)"'"!==e.charAt(t)||s("'")?i+=e.charAt(t):a=!1;else switch(e.charAt(t)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":s("'")?i+="'":a=!0;break;default:i+=e.charAt(t)}return i},_get:function(e,i){return e.settings[i]!==t?e.settings[i]:this._defaults[i]},_setDateFromField:function(e,t){if(e.input.val()!==e.lastVal){var i=this._get(e,"dateFormat"),a=e.lastVal=e.input?e.input.val():null,s=this._getDefaultDate(e),n=s,r=this._getFormatConfig(e);try{n=this.parseDate(i,a,r)||s}catch(o){a=t?"":a}e.selectedDay=n.getDate(),e.drawMonth=e.selectedMonth=n.getMonth(),e.drawYear=e.selectedYear=n.getFullYear(),e.currentDay=a?n.getDate():0,e.currentMonth=a?n.getMonth():0,e.currentYear=a?n.getFullYear():0,this._adjustInstDate(e)}},_getDefaultDate:function(e){return this._restrictMinMax(e,this._determineDate(e,this._get(e,"defaultDate"),new Date))},_determineDate:function(t,i,a){var s=function(e){var t=new Date;return t.setDate(t.getDate()+e),t},n=function(i){try{return e.datepicker.parseDate(e.datepicker._get(t,"dateFormat"),i,e.datepicker._getFormatConfig(t))}catch(a){}for(var s=(i.toLowerCase().match(/^c/)?e.datepicker._getDate(t):null)||new Date,n=s.getFullYear(),r=s.getMonth(),o=s.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":o+=parseInt(l[1],10);break;case"w":case"W":o+=7*parseInt(l[1],10);break;case"m":case"M":r+=parseInt(l[1],10),o=Math.min(o,e.datepicker._getDaysInMonth(n,r));break;case"y":case"Y":n+=parseInt(l[1],10),o=Math.min(o,e.datepicker._getDaysInMonth(n,r))}l=h.exec(i)}return new Date(n,r,o)},r=null==i||""===i?a:"string"==typeof i?n(i):"number"==typeof i?isNaN(i)?a:s(i):new Date(i.getTime());return r=r&&"Invalid Date"==""+r?a:r,r&&(r.setHours(0),r.setMinutes(0),r.setSeconds(0),r.setMilliseconds(0)),this._daylightSavingAdjust(r)},_daylightSavingAdjust:function(e){return e?(e.setHours(e.getHours()>12?e.getHours()+2:0),e):null},_setDate:function(e,t,i){var a=!t,s=e.selectedMonth,n=e.selectedYear,r=this._restrictMinMax(e,this._determineDate(e,t,new Date));e.selectedDay=e.currentDay=r.getDate(),e.drawMonth=e.selectedMonth=e.currentMonth=r.getMonth(),e.drawYear=e.selectedYear=e.currentYear=r.getFullYear(),s===e.selectedMonth&&n===e.selectedYear||i||this._notifyChange(e),this._adjustInstDate(e),e.input&&e.input.val(a?"":this._formatDate(e))},_getDate:function(e){var t=!e.currentYear||e.input&&""===e.input.val()?null:this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return t},_attachHandlers:function(t){var i=this._get(t,"stepMonths"),a="#"+t.id.replace(/\\\\/g,"\\");t.dpDiv.find("[data-handler]").map(function(){var t={prev:function(){e.datepicker._adjustDate(a,-i,"M")},next:function(){e.datepicker._adjustDate(a,+i,"M")},hide:function(){e.datepicker._hideDatepicker()},today:function(){e.datepicker._gotoToday(a)},selectDay:function(){return e.datepicker._selectDay(a,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return e.datepicker._selectMonthYear(a,this,"M"),!1},selectYear:function(){return e.datepicker._selectMonthYear(a,this,"Y"),!1}};e(this).bind(this.getAttribute("data-event"),t[this.getAttribute("data-handler")])})},_generateHTML:function(e){var t,i,a,s,n,r,o,h,l,u,d,c,p,m,f,g,v,y,b,_,k,x,D,w,T,M,S,N,C,A,P,I,F,j,H,E,z,L,O,R=new Date,W=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(e,"isRTL"),J=this._get(e,"showButtonPanel"),$=this._get(e,"hideIfNoPrevNext"),Q=this._get(e,"navigationAsDateFormat"),B=this._getNumberOfMonths(e),K=this._get(e,"showCurrentAtPos"),V=this._get(e,"stepMonths"),U=1!==B[0]||1!==B[1],G=this._daylightSavingAdjust(e.currentDay?new Date(e.currentYear,e.currentMonth,e.currentDay):new Date(9999,9,9)),q=this._getMinMaxDate(e,"min"),X=this._getMinMaxDate(e,"max"),Z=e.drawMonth-K,et=e.drawYear;if(0>Z&&(Z+=12,et--),X)for(t=this._daylightSavingAdjust(new Date(X.getFullYear(),X.getMonth()-B[0]*B[1]+1,X.getDate())),t=q&&q>t?q:t;this._daylightSavingAdjust(new Date(et,Z,1))>t;)Z--,0>Z&&(Z=11,et--);for(e.drawMonth=Z,e.drawYear=et,i=this._get(e,"prevText"),i=Q?this.formatDate(i,this._daylightSavingAdjust(new Date(et,Z-V,1)),this._getFormatConfig(e)):i,a=this._canAdjustMonth(e,-1,et,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":$?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",s=this._get(e,"nextText"),s=Q?this.formatDate(s,this._daylightSavingAdjust(new Date(et,Z+V,1)),this._getFormatConfig(e)):s,n=this._canAdjustMonth(e,1,et,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+s+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+s+"</span></a>":$?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+s+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+s+"</span></a>",r=this._get(e,"currentText"),o=this._get(e,"gotoCurrent")&&e.currentDay?G:W,r=Q?this.formatDate(r,o,this._getFormatConfig(e)):r,h=e.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(e,"closeText")+"</button>",l=J?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(e,o)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+r+"</button>":"")+(Y?"":h)+"</div>":"",u=parseInt(this._get(e,"firstDay"),10),u=isNaN(u)?0:u,d=this._get(e,"showWeek"),c=this._get(e,"dayNames"),p=this._get(e,"dayNamesMin"),m=this._get(e,"monthNames"),f=this._get(e,"monthNamesShort"),g=this._get(e,"beforeShowDay"),v=this._get(e,"showOtherMonths"),y=this._get(e,"selectOtherMonths"),b=this._getDefaultDate(e),_="",x=0;B[0]>x;x++){for(D="",this.maxRows=4,w=0;B[1]>w;w++){if(T=this._daylightSavingAdjust(new Date(et,Z,e.selectedDay)),M=" ui-corner-all",S="",U){if(S+="<div class='ui-datepicker-group",B[1]>1)switch(w){case 0:S+=" ui-datepicker-group-first",M=" ui-corner-"+(Y?"right":"left");break;case B[1]-1:S+=" ui-datepicker-group-last",M=" ui-corner-"+(Y?"left":"right");break;default:S+=" ui-datepicker-group-middle",M=""}S+="'>"}for(S+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+M+"'>"+(/all|left/.test(M)&&0===x?Y?n:a:"")+(/all|right/.test(M)&&0===x?Y?a:n:"")+this._generateMonthYearHeader(e,Z,et,q,X,x>0||w>0,m,f)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",N=d?"<th class='ui-datepicker-week-col'>"+this._get(e,"weekHeader")+"</th>":"",k=0;7>k;k++)C=(k+u)%7,N+="<th"+((k+u+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+c[C]+"'>"+p[C]+"</span></th>";for(S+=N+"</tr></thead><tbody>",A=this._getDaysInMonth(et,Z),et===e.selectedYear&&Z===e.selectedMonth&&(e.selectedDay=Math.min(e.selectedDay,A)),P=(this._getFirstDayOfMonth(et,Z)-u+7)%7,I=Math.ceil((P+A)/7),F=U?this.maxRows>I?this.maxRows:I:I,this.maxRows=F,j=this._daylightSavingAdjust(new Date(et,Z,1-P)),H=0;F>H;H++){for(S+="<tr>",E=d?"<td class='ui-datepicker-week-col'>"+this._get(e,"calculateWeek")(j)+"</td>":"",k=0;7>k;k++)z=g?g.apply(e.input?e.input[0]:null,[j]):[!0,""],L=j.getMonth()!==Z,O=L&&!y||!z[0]||q&&q>j||X&&j>X,E+="<td class='"+((k+u+6)%7>=5?" ui-datepicker-week-end":"")+(L?" ui-datepicker-other-month":"")+(j.getTime()===T.getTime()&&Z===e.selectedMonth&&e._keyEvent||b.getTime()===j.getTime()&&b.getTime()===T.getTime()?" "+this._dayOverClass:"")+(O?" "+this._unselectableClass+" ui-state-disabled":"")+(L&&!v?"":" "+z[1]+(j.getTime()===G.getTime()?" "+this._currentClass:"")+(j.getTime()===W.getTime()?" ui-datepicker-today":""))+"'"+(L&&!v||!z[2]?"":" title='"+z[2].replace(/'/g,"&#39;")+"'")+(O?"":" data-handler='selectDay' data-event='click' data-month='"+j.getMonth()+"' data-year='"+j.getFullYear()+"'")+">"+(L&&!v?"&#xa0;":O?"<span class='ui-state-default'>"+j.getDate()+"</span>":"<a class='ui-state-default"+(j.getTime()===W.getTime()?" ui-state-highlight":"")+(j.getTime()===G.getTime()?" ui-state-active":"")+(L?" ui-priority-secondary":"")+"' href='#'>"+j.getDate()+"</a>")+"</td>",j.setDate(j.getDate()+1),j=this._daylightSavingAdjust(j);S+=E+"</tr>"}Z++,Z>11&&(Z=0,et++),S+="</tbody></table>"+(U?"</div>"+(B[0]>0&&w===B[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),D+=S}_+=D}return _+=l,e._keyEvent=!1,_},_generateMonthYearHeader:function(e,t,i,a,s,n,r,o){var h,l,u,d,c,p,m,f,g=this._get(e,"changeMonth"),v=this._get(e,"changeYear"),y=this._get(e,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",_="";if(n||!g)_+="<span class='ui-datepicker-month'>"+r[t]+"</span>";else{for(h=a&&a.getFullYear()===i,l=s&&s.getFullYear()===i,_+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",u=0;12>u;u++)(!h||u>=a.getMonth())&&(!l||s.getMonth()>=u)&&(_+="<option value='"+u+"'"+(u===t?" selected='selected'":"")+">"+o[u]+"</option>");_+="</select>"}if(y||(b+=_+(!n&&g&&v?"":"&#xa0;")),!e.yearshtml)if(e.yearshtml="",n||!v)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(d=this._get(e,"yearRange").split(":"),c=(new Date).getFullYear(),p=function(e){var t=e.match(/c[+\-].*/)?i+parseInt(e.substring(1),10):e.match(/[+\-].*/)?c+parseInt(e,10):parseInt(e,10);
+return isNaN(t)?c:t},m=p(d[0]),f=Math.max(m,p(d[1]||"")),m=a?Math.max(m,a.getFullYear()):m,f=s?Math.min(f,s.getFullYear()):f,e.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";f>=m;m++)e.yearshtml+="<option value='"+m+"'"+(m===i?" selected='selected'":"")+">"+m+"</option>";e.yearshtml+="</select>",b+=e.yearshtml,e.yearshtml=null}return b+=this._get(e,"yearSuffix"),y&&(b+=(!n&&g&&v?"":"&#xa0;")+_),b+="</div>"},_adjustInstDate:function(e,t,i){var a=e.drawYear+("Y"===i?t:0),s=e.drawMonth+("M"===i?t:0),n=Math.min(e.selectedDay,this._getDaysInMonth(a,s))+("D"===i?t:0),r=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(a,s,n)));e.selectedDay=r.getDate(),e.drawMonth=e.selectedMonth=r.getMonth(),e.drawYear=e.selectedYear=r.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(e)},_restrictMinMax:function(e,t){var i=this._getMinMaxDate(e,"min"),a=this._getMinMaxDate(e,"max"),s=i&&i>t?i:t;return a&&s>a?a:s},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return null==t?[1,1]:"number"==typeof t?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return new Date(e,t,1).getDay()},_canAdjustMonth:function(e,t,i,a){var s=this._getNumberOfMonths(e),n=this._daylightSavingAdjust(new Date(i,a+(0>t?t:s[0]*s[1]),1));return 0>t&&n.setDate(this._getDaysInMonth(n.getFullYear(),n.getMonth())),this._isInRange(e,n)},_isInRange:function(e,t){var i,a,s=this._getMinMaxDate(e,"min"),n=this._getMinMaxDate(e,"max"),r=null,o=null,h=this._get(e,"yearRange");return h&&(i=h.split(":"),a=(new Date).getFullYear(),r=parseInt(i[0],10),o=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(r+=a),i[1].match(/[+\-].*/)&&(o+=a)),(!s||t.getTime()>=s.getTime())&&(!n||t.getTime()<=n.getTime())&&(!r||t.getFullYear()>=r)&&(!o||o>=t.getFullYear())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t="string"!=typeof t?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,i,a){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var s=t?"object"==typeof t?t:this._daylightSavingAdjust(new Date(a,i,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),s,this._getFormatConfig(e))}}),e.fn.datepicker=function(t){if(!this.length)return this;e.datepicker.initialized||(e(document).mousedown(e.datepicker._checkExternalClick),e.datepicker.initialized=!0),0===e("#"+e.datepicker._mainDivId).length&&e("body").append(e.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof t||"isDisabled"!==t&&"getDate"!==t&&"widget"!==t?"option"===t&&2===arguments.length&&"string"==typeof arguments[1]?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof t?e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this].concat(i)):e.datepicker._attachDatepicker(this,t)}):e.datepicker["_"+t+"Datepicker"].apply(e.datepicker,[this[0]].concat(i))},e.datepicker=new i,e.datepicker.initialized=!1,e.datepicker.uuid=(new Date).getTime(),e.datepicker.version="1.10.3"})(jQuery);(function(e){var t={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},i={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};e.widget("ui.dialog",{version:"1.10.3",options:{appendTo:"body",autoOpen:!0,buttons:[],closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var i=e(this).css(t).offset().top;0>i&&e(this).css("top",t.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this._createWrapper(),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(this.uiDialog),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&e.fn.draggable&&this._makeDraggable(),this.options.resizable&&e.fn.resizable&&this._makeResizable(),this._isOpen=!1},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var t=this.options.appendTo;return t&&(t.jquery||t.nodeType)?e(t):this.document.find(t||"body").eq(0)},_destroy:function(){var e,t=this.originalPosition;this._destroyOverlay(),this.element.removeUniqueId().removeClass("ui-dialog-content ui-widget-content").css(this.originalCss).detach(),this.uiDialog.stop(!0,!0).remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},disable:e.noop,enable:e.noop,close:function(t){var i=this;this._isOpen&&this._trigger("beforeClose",t)!==!1&&(this._isOpen=!1,this._destroyOverlay(),this.opener.filter(":focusable").focus().length||e(this.document[0].activeElement).blur(),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",t)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,t){var i=!!this.uiDialog.nextAll(":visible").insertBefore(this.uiDialog).length;return i&&!t&&this._trigger("focus",e),i},open:function(){var t=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),undefined):(this._isOpen=!0,this.opener=e(this.document[0].activeElement),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this._show(this.uiDialog,this.options.show,function(){t._focusTabbable(),t._trigger("focus")}),this._trigger("open"),undefined)},_focusTabbable:function(){var e=this.element.find("[autofocus]");e.length||(e=this.element.find(":tabbable")),e.length||(e=this.uiDialogButtonPane.find(":tabbable")),e.length||(e=this.uiDialogTitlebarClose.filter(":tabbable")),e.length||(e=this.uiDialog),e.eq(0).focus()},_keepFocus:function(t){function i(){var t=this.document[0].activeElement,i=this.uiDialog[0]===t||e.contains(this.uiDialog[0],t);i||this._focusTabbable()}t.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=e("<div>").addClass("ui-dialog ui-widget ui-widget-content ui-corner-all ui-front "+this.options.dialogClass).hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._on(this.uiDialog,{keydown:function(t){if(this.options.closeOnEscape&&!t.isDefaultPrevented()&&t.keyCode&&t.keyCode===e.ui.keyCode.ESCAPE)return t.preventDefault(),this.close(t),undefined;if(t.keyCode===e.ui.keyCode.TAB){var i=this.uiDialog.find(":tabbable"),a=i.filter(":first"),s=i.filter(":last");t.target!==s[0]&&t.target!==this.uiDialog[0]||t.shiftKey?t.target!==a[0]&&t.target!==this.uiDialog[0]||!t.shiftKey||(s.focus(1),t.preventDefault()):(a.focus(1),t.preventDefault())}},mousedown:function(e){this._moveToTop(e)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var t;this.uiDialogTitlebar=e("<div>").addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(this.uiDialog),this._on(this.uiDialogTitlebar,{mousedown:function(t){e(t.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.focus()}}),this.uiDialogTitlebarClose=e("<button></button>").button({label:this.options.closeText,icons:{primary:"ui-icon-closethick"},text:!1}).addClass("ui-dialog-titlebar-close").appendTo(this.uiDialogTitlebar),this._on(this.uiDialogTitlebarClose,{click:function(e){e.preventDefault(),this.close(e)}}),t=e("<span>").uniqueId().addClass("ui-dialog-title").prependTo(this.uiDialogTitlebar),this._title(t),this.uiDialog.attr({"aria-labelledby":t.attr("id")})},_title:function(e){this.options.title||e.html("&#160;"),e.text(this.options.title)},_createButtonPane:function(){this.uiDialogButtonPane=e("<div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),this.uiButtonSet=e("<div>").addClass("ui-dialog-buttonset").appendTo(this.uiDialogButtonPane),this._createButtons()},_createButtons:function(){var t=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),e.isEmptyObject(i)||e.isArray(i)&&!i.length?(this.uiDialog.removeClass("ui-dialog-buttons"),undefined):(e.each(i,function(i,a){var s,n;a=e.isFunction(a)?{click:a,text:i}:a,a=e.extend({type:"button"},a),s=a.click,a.click=function(){s.apply(t.element[0],arguments)},n={icons:a.icons,text:a.showText},delete a.icons,delete a.showText,e("<button></button>",a).button(n).appendTo(t.uiButtonSet)}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),undefined)},_makeDraggable:function(){function t(e){return{position:e.position,offset:e.offset}}var i=this,a=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(a,s){e(this).addClass("ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",a,t(s))},drag:function(e,a){i._trigger("drag",e,t(a))},stop:function(s,n){a.position=[n.position.left-i.document.scrollLeft(),n.position.top-i.document.scrollTop()],e(this).removeClass("ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",s,t(n))}})},_makeResizable:function(){function t(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}var i=this,a=this.options,s=a.resizable,n=this.uiDialog.css("position"),r="string"==typeof s?s:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:a.maxWidth,maxHeight:a.maxHeight,minWidth:a.minWidth,minHeight:this._minHeight(),handles:r,start:function(a,s){e(this).addClass("ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",a,t(s))},resize:function(e,a){i._trigger("resize",e,t(a))},stop:function(s,n){a.height=e(this).height(),a.width=e(this).width(),e(this).removeClass("ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",s,t(n))}}).css("position",n)},_minHeight:function(){var e=this.options;return"auto"===e.height?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(){var e=this.uiDialog.is(":visible");e||this.uiDialog.show(),this.uiDialog.position(this.options.position),e||this.uiDialog.hide()},_setOptions:function(a){var s=this,n=!1,r={};e.each(a,function(e,a){s._setOption(e,a),e in t&&(n=!0),e in i&&(r[e]=a)}),n&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",r)},_setOption:function(e,t){var i,a,s=this.uiDialog;"dialogClass"===e&&s.removeClass(this.options.dialogClass).addClass(t),"disabled"!==e&&(this._super(e,t),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:""+t}),"draggable"===e&&(i=s.is(":data(ui-draggable)"),i&&!t&&s.draggable("destroy"),!i&&t&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(a=s.is(":data(ui-resizable)"),a&&!t&&s.resizable("destroy"),a&&"string"==typeof t&&s.resizable("option","handles",t),a||t===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var e,t,i,a=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),a.minWidth>a.width&&(a.width=a.minWidth),e=this.uiDialog.css({height:"auto",width:a.width}).outerHeight(),t=Math.max(0,a.minHeight-e),i="number"==typeof a.maxHeight?Math.max(0,a.maxHeight-e):"none","auto"===a.height?this.element.css({minHeight:t,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,a.height-e)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var t=e(this);return e("<div>").css({position:"absolute",width:t.outerWidth(),height:t.outerHeight()}).appendTo(t.parent()).offset(t.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(t){return e(t.target).closest(".ui-dialog").length?!0:!!e(t.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var t=this,i=this.widgetFullName;e.ui.dialog.overlayInstances||this._delay(function(){e.ui.dialog.overlayInstances&&this.document.bind("focusin.dialog",function(a){t._allowInteraction(a)||(a.preventDefault(),e(".ui-dialog:visible:last .ui-dialog-content").data(i)._focusTabbable())})}),this.overlay=e("<div>").addClass("ui-widget-overlay ui-front").appendTo(this._appendTo()),this._on(this.overlay,{mousedown:"_keepFocus"}),e.ui.dialog.overlayInstances++}},_destroyOverlay:function(){this.options.modal&&this.overlay&&(e.ui.dialog.overlayInstances--,e.ui.dialog.overlayInstances||this.document.unbind("focusin.dialog"),this.overlay.remove(),this.overlay=null)}}),e.ui.dialog.overlayInstances=0,e.uiBackCompat!==!1&&e.widget("ui.dialog",e.ui.dialog,{_position:function(){var t,i=this.options.position,a=[],s=[0,0];i?(("string"==typeof i||"object"==typeof i&&"0"in i)&&(a=i.split?i.split(" "):[i[0],i[1]],1===a.length&&(a[1]=a[0]),e.each(["left","top"],function(e,t){+a[e]===a[e]&&(s[e]=a[e],a[e]=t)}),i={my:a[0]+(0>s[0]?s[0]:"+"+s[0])+" "+a[1]+(0>s[1]?s[1]:"+"+s[1]),at:a.join(" ")}),i=e.extend({},e.ui.dialog.prototype.options.position,i)):i=e.ui.dialog.prototype.options.position,t=this.uiDialog.is(":visible"),t||this.uiDialog.show(),this.uiDialog.position(i),t||this.uiDialog.hide()}})})(jQuery);(function(e){e.widget("ui.menu",{version:"1.10.3",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}).bind("click"+this.eventNamespace,e.proxy(function(e){this.options.disabled&&e.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(e){e.preventDefault()},"click .ui-state-disabled > a":function(e){e.preventDefault()},"click .ui-menu-item:has(a)":function(t){var i=e(t.target).closest(".ui-menu-item");!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.mouseHandled=!0,this.select(t),i.has(".ui-menu").length?this.expand(t):this.element.is(":focus")||(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){var i=e(t.currentTarget);i.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.children(".ui-menu-item").eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){e(t.target).closest(".ui-menu").length||this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){function i(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var s,a,n,r,o,h=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:h=!1,a=this.previousFilter||"",n=String.fromCharCode(t.keyCode),r=!1,clearTimeout(this.filterTimer),n===a?r=!0:n=a+n,o=RegExp("^"+i(n),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return o.test(e(this).children("a").text())}),s=r&&-1!==s.index(this.active.next())?this.active.nextAll(".ui-menu-item"):s,s.length||(n=String.fromCharCode(t.keyCode),o=RegExp("^"+i(n),"i"),s=this.activeMenu.children(".ui-menu-item").filter(function(){return o.test(e(this).children("a").text())})),s.length?(this.focus(t,s),s.length>1?(this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}h&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(e):this.select(e))},refresh:function(){var t,i=this.options.icons.submenu,s=this.element.find(this.options.menus);s.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),s=t.prev("a"),a=e("<span>").addClass("ui-menu-icon ui-icon "+i).data("ui-menu-submenu-carat",!0);s.attr("aria-haspopup","true").prepend(a),t.attr("aria-labelledby",s.attr("id"))}),t=s.add(this.element),t.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex:-1,role:this._itemRole()}),t.children(":not(.ui-menu-item)").each(function(){var t=e(this);/[^\-\u2014\u2013\s]/.test(t.text())||t.addClass("ui-widget-content ui-menu-divider")}),t.children(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,a,n,r,o;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,a=t.offset().top-this.activeMenu.offset().top-i-s,n=this.activeMenu.scrollTop(),r=this.activeMenu.height(),o=t.height(),0>a?this.activeMenu.scrollTop(n+a):a+o>r&&this.activeMenu.scrollTop(n+a-r+o))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.children(".ui-menu-item")[t]()),this.focus(i,s)},nextPage:function(t){var i,s,a;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,a=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-a}),this.focus(t,i)):this.focus(t,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())),undefined):(this.next(t),undefined)},previousPage:function(t){var i,s,a;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,a=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+a>0}),this.focus(t,i)):this.focus(t,this.activeMenu.children(".ui-menu-item").first())),undefined):(this.next(t),undefined)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||e(t.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,i)}})})(jQuery);(function(e,t){e.widget("ui.progressbar",{version:"1.10.3",options:{max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min}),this.valueDiv=e("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return e===t?this.options.value:(this.options.value=this._constrainedValue(e),this._refreshValue(),t)},_constrainedValue:function(e){return e===t&&(e=this.options.value),this.indeterminate=e===!1,"number"!=typeof e&&(e=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,e))},_setOptions:function(e){var t=e.value;delete e.value,this._super(e),this.options.value=this._constrainedValue(t),this._refreshValue()},_setOption:function(e,t){"max"===e&&(t=Math.max(this.min,t)),this._super(e,t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var t=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||t>this.min).toggleClass("ui-corner-right",t===this.options.max).width(i.toFixed(0)+"%"),this.element.toggleClass("ui-progressbar-indeterminate",this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=e("<div class='ui-progressbar-overlay'></div>").appendTo(this.valueDiv))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":t}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==t&&(this.oldValue=t,this._trigger("change")),t===this.options.max&&this._trigger("complete")}})})(jQuery);(function(e){var t=5;e.widget("ui.slider",e.ui.mouse,{version:"1.10.3",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var t,i,s=this.options,a=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),n="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",r=[];for(i=s.values&&s.values.length||1,a.length>i&&(a.slice(i).remove(),a=a.slice(0,i)),t=a.length;i>t;t++)r.push(n);this.handles=a.add(e(r.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(t){e(this).data("ui-slider-handle-index",t)})},_createRange:function(){var t=this.options,i="";t.range?(t.range===!0&&(t.values?t.values.length&&2!==t.values.length?t.values=[t.values[0],t.values[0]]:e.isArray(t.values)&&(t.values=t.values.slice(0)):t.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=e("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===t.range||"max"===t.range?" ui-slider-range-"+t.range:""))):this.range=e([])},_setupEvents:function(){var e=this.handles.add(this.range).filter("a");this._off(e),this._on(e,this._handleEvents),this._hoverable(e),this._focusable(e)},_destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(t){var i,s,a,n,r,o,h,l,u=this,c=this.options;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:t.pageX,y:t.pageY},s=this._normValueFromMouse(i),a=this._valueMax()-this._valueMin()+1,this.handles.each(function(t){var i=Math.abs(s-u.values(t));(a>i||a===i&&(t===u._lastChangedValue||u.values(t)===c.min))&&(a=i,n=e(this),r=t)}),o=this._start(t,r),o===!1?!1:(this._mouseSliding=!0,this._handleIndex=r,n.addClass("ui-state-active").focus(),h=n.offset(),l=!e(t.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:t.pageX-h.left-n.width()/2,top:t.pageY-h.top-n.height()/2-(parseInt(n.css("borderTopWidth"),10)||0)-(parseInt(n.css("borderBottomWidth"),10)||0)+(parseInt(n.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,r,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},i=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,i),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,i,s,a,n;return"horizontal"===this.orientation?(t=this.elementSize.width,i=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,i=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/t,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),a=this._valueMax()-this._valueMin(),n=this._valueMin()+s*a,this._trimAlignValue(n)},_start:function(e,t){var i={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("start",e,i)},_slide:function(e,t,i){var s,a,n;this.options.values&&this.options.values.length?(s=this.values(t?0:1),2===this.options.values.length&&this.options.range===!0&&(0===t&&i>s||1===t&&s>i)&&(i=s),i!==this.values(t)&&(a=this.values(),a[t]=i,n=this._trigger("slide",e,{handle:this.handles[t],value:i,values:a}),s=this.values(t?0:1),n!==!1&&this.values(t,i,!0))):i!==this.value()&&(n=this._trigger("slide",e,{handle:this.handles[t],value:i}),n!==!1&&this.value(i))},_stop:function(e,t){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._trigger("stop",e,i)},_change:function(e,t){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[t],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(t),i.values=this.values()),this._lastChangedValue=t,this._trigger("change",e,i)}},value:function(e){return arguments.length?(this.options.value=this._trimAlignValue(e),this._refreshValue(),this._change(null,0),undefined):this._value()},values:function(t,i){var s,a,n;if(arguments.length>1)return this.options.values[t]=this._trimAlignValue(i),this._refreshValue(),this._change(null,t),undefined;if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();for(s=this.options.values,a=arguments[0],n=0;s.length>n;n+=1)s[n]=this._trimAlignValue(a[n]),this._change(null,n);this._refreshValue()},_setOption:function(t,i){var s,a=0;switch("range"===t&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),e.isArray(this.options.values)&&(a=this.options.values.length),e.Widget.prototype._setOption.apply(this,arguments),t){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;a>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var e=this.options.value;return e=this._trimAlignValue(e)},_values:function(e){var t,i,s;if(arguments.length)return t=this.options.values[e],t=this._trimAlignValue(t);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(e){if(this._valueMin()>=e)return this._valueMin();if(e>=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,i=(e-this._valueMin())%t,s=e-i;return 2*Math.abs(i)>=t&&(s+=i>0?t:-t),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var t,i,s,a,n,r=this.options.range,o=this.options,h=this,l=this._animateOff?!1:o.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",e(this).stop(1,1)[l?"animate":"css"](u,o.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},o.animate),1===s&&h.range[l?"animate":"css"]({width:i-t+"%"},{queue:!1,duration:o.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},o.animate),1===s&&h.range[l?"animate":"css"]({height:i-t+"%"},{queue:!1,duration:o.animate}))),t=i}):(s=this.value(),a=this._valueMin(),n=this._valueMax(),i=n!==a?100*((s-a)/(n-a)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,o.animate),"min"===r&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},o.animate),"max"===r&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:o.animate}),"min"===r&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},o.animate),"max"===r&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:o.animate}))},_handleEvents:{keydown:function(i){var s,a,n,r,o=e(i.target).data("ui-slider-handle-index");switch(i.keyCode){case e.ui.keyCode.HOME:case e.ui.keyCode.END:case e.ui.keyCode.PAGE_UP:case e.ui.keyCode.PAGE_DOWN:case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(i.preventDefault(),!this._keySliding&&(this._keySliding=!0,e(i.target).addClass("ui-state-active"),s=this._start(i,o),s===!1))return}switch(r=this.options.step,a=n=this.options.values&&this.options.values.length?this.values(o):this.value(),i.keyCode){case e.ui.keyCode.HOME:n=this._valueMin();break;case e.ui.keyCode.END:n=this._valueMax();break;case e.ui.keyCode.PAGE_UP:n=this._trimAlignValue(a+(this._valueMax()-this._valueMin())/t);break;case e.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(a-(this._valueMax()-this._valueMin())/t);break;case e.ui.keyCode.UP:case e.ui.keyCode.RIGHT:if(a===this._valueMax())return;n=this._trimAlignValue(a+r);break;case e.ui.keyCode.DOWN:case e.ui.keyCode.LEFT:if(a===this._valueMin())return;n=this._trimAlignValue(a-r)}this._slide(i,o,n)},click:function(e){e.preventDefault()},keyup:function(t){var i=e(t.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(t,i),this._change(t,i),e(t.target).removeClass("ui-state-active"))}}})})(jQuery);(function(e){function t(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.widget("ui.spinner",{version:"1.10.3",defaultElement:"<input>",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},i=this.element;return e.each(["min","max","step"],function(e,s){var a=i.attr(s);void 0!==a&&a.length&&(t[s]=a)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e),void 0)},mousewheel:function(e,t){if(t){if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()}},"mousedown .ui-spinner-button":function(t){function i(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(t)!==!1&&this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){return e(t.currentTarget).hasClass("ui-state-active")?this._start(t)===!1?!1:(this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(.5*e.height())&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var i=this.options,s=e.ui.keyCode;switch(t.keyCode){case s.UP:return this._repeat(null,1,t),!0;case s.DOWN:return this._repeat(null,-1,t),!0;case s.PAGE_UP:return this._repeat(null,i.page,t),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,t),!0}return!1},_uiSpinnerHtml:function(){return"<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>"},_buttonHtml:function(){return"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'><span class='ui-icon "+this.options.icons.up+"'>&#9650;</span>"+"</a>"+"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>"+"<span class='ui-icon "+this.options.icons.down+"'>&#9660;</span>"+"</a>"},_start:function(e){return this.spinning||this._trigger("start",e)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(e,t,i){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,i)},e),this._spin(t*this.options.step,i)},_spin:function(e,t){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+e*this._increment(this.counter)),this.spinning&&this._trigger("spin",t,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(t){var i=this.options.incremental;return i?e.isFunction(i)?i(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return null!==this.options.min&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=""+e,i=t.indexOf(".");return-1===i?0:t.length-i-1},_adjustValue:function(e){var t,i,s=this.options;return t=null!==s.min?s.min:0,i=e-t,i=Math.round(i/s.step)*s.step,e=t+i,e=parseFloat(e.toFixed(this._precision())),null!==s.max&&e>s.max?s.max:null!==s.min&&s.min>e?s.min:e},_stop:function(e){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",e))},_setOption:function(e,t){if("culture"===e||"numberFormat"===e){var i=this._parse(this.element.val());return this.options[e]=t,this.element.val(this._format(i)),void 0}("max"===e||"min"===e||"step"===e)&&"string"==typeof t&&(t=this._parse(t)),"icons"===e&&(this.buttons.first().find(".ui-icon").removeClass(this.options.icons.up).addClass(t.up),this.buttons.last().find(".ui-icon").removeClass(this.options.icons.down).addClass(t.down)),this._super(e,t),"disabled"===e&&(t?(this.element.prop("disabled",!0),this.buttons.button("disable")):(this.element.prop("disabled",!1),this.buttons.button("enable")))},_setOptions:t(function(e){this._super(e),this._value(this.element.val())}),_parse:function(e){return"string"==typeof e&&""!==e&&(e=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(e,10,this.options.culture):+e),""===e||isNaN(e)?null:e},_format:function(e){return""===e?"":window.Globalize&&this.options.numberFormat?Globalize.format(e,this.options.numberFormat,this.options.culture):e},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},_value:function(e,t){var i;""!==e&&(i=this._parse(e),null!==i&&(t||(i=this._adjustValue(i)),e=this._format(i))),this.element.val(e),this._refresh()},_destroy:function(){this.element.removeClass("ui-spinner-input").prop("disabled",!1).removeAttr("autocomplete").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:t(function(e){this._stepUp(e)}),_stepUp:function(e){this._start()&&(this._spin((e||1)*this.options.step),this._stop())},stepDown:t(function(e){this._stepDown(e)}),_stepDown:function(e){this._start()&&(this._spin((e||1)*-this.options.step),this._stop())},pageUp:t(function(e){this._stepUp((e||1)*this.options.page)}),pageDown:t(function(e){this._stepDown((e||1)*this.options.page)}),value:function(e){return arguments.length?(t(this._value).call(this,e),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}})})(jQuery);(function(e,t){function i(){return++a}function s(e){return e.hash.length>1&&decodeURIComponent(e.href.replace(n,""))===decodeURIComponent(location.href.replace(n,""))}var a=0,n=/#.*$/;e.widget("ui.tabs",{version:"1.10.3",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var t=this,i=this.options;this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",i.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs(),i.active=this._initialActive(),e.isArray(i.disabled)&&(i.disabled=e.unique(i.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):e(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var i=this.options.active,s=this.options.collapsible,a=location.hash.substring(1);return null===i&&(a&&this.tabs.each(function(s,n){return e(n).attr("aria-controls")===a?(i=s,!1):t}),null===i&&(i=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===i||-1===i)&&(i=this.tabs.length?0:!1)),i!==!1&&(i=this.tabs.index(this.tabs.eq(i)),-1===i&&(i=s?!1:0)),!s&&i===!1&&this.anchors.length&&(i=0),i},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(i){var s=e(this.document[0].activeElement).closest("li"),a=this.tabs.index(s),n=!0;if(!this._handlePageNav(i)){switch(i.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:a++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:n=!1,a--;break;case e.ui.keyCode.END:a=this.anchors.length-1;break;case e.ui.keyCode.HOME:a=0;break;case e.ui.keyCode.SPACE:return i.preventDefault(),clearTimeout(this.activating),this._activate(a),t;case e.ui.keyCode.ENTER:return i.preventDefault(),clearTimeout(this.activating),this._activate(a===this.options.active?!1:a),t;default:return}i.preventDefault(),clearTimeout(this.activating),a=this._focusNextTab(a,n),i.ctrlKey||(s.attr("aria-selected","false"),this.tabs.eq(a).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",a)},this.delay))}},_panelKeydown:function(t){this._handlePageNav(t)||t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(i){return i.altKey&&i.keyCode===e.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):i.altKey&&i.keyCode===e.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):t},_findNextTab:function(t,i){function s(){return t>a&&(t=0),0>t&&(t=a),t}for(var a=this.tabs.length-1;-1!==e.inArray(s(),this.options.disabled);)t=i?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,i){return"active"===e?(this._activate(i),t):"disabled"===e?(this._setupDisabled(i),t):(this._super(e,i),"collapsible"===e&&(this.element.toggleClass("ui-tabs-collapsible",i),i||this.options.active!==!1||this._activate(0)),"event"===e&&this._setupEvents(i),"heightStyle"===e&&this._setupHeightStyle(i),t)},_tabId:function(e){return e.attr("aria-controls")||"ui-tabs-"+i()},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,i=this.tablist.children(":has(a[href])");t.disabled=e.map(i.filter(".ui-state-disabled"),function(e){return i.index(e)}),this._processTabs(),t.active!==!1&&this.anchors.length?this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active):(t.active=!1,this.active=e()),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-expanded":"false","aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-expanded":"true","aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist"),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(i,a){var n,r,o,h=e(a).uniqueId().attr("id"),l=e(a).closest("li"),u=l.attr("aria-controls");s(a)?(n=a.hash,r=t.element.find(t._sanitizeSelector(n))):(o=t._tabId(l),n="#"+o,r=t.element.find(n),r.length||(r=t._createPanel(o),r.insertAfter(t.panels[i-1]||t.tablist)),r.attr("aria-live","polite")),r.length&&(t.panels=t.panels.add(r)),u&&l.data("ui-tabs-aria-controls",u),l.attr({"aria-controls":n.substring(1),"aria-labelledby":h}),r.attr("aria-labelledby",h)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("<div>").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var i,s=0;i=this.tabs[s];s++)t===!0||-1!==e.inArray(s,t)?e(i).addClass("ui-state-disabled").attr("aria-disabled","true"):e(i).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var i={click:function(e){e.preventDefault()}};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var i,s=this.element.parent();"fill"===t?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var t=e(this),s=t.css("position");"absolute"!==s&&"fixed"!==s&&(i-=t.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,i-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.panels.each(function(){i=Math.max(i,e(this).height("").height())}).height(i))},_eventHandler:function(t){var i=this.options,s=this.active,a=e(t.currentTarget),n=a.closest("li"),r=n[0]===s[0],o=r&&i.collapsible,h=o?e():this._getPanelForTab(n),l=s.length?this._getPanelForTab(s):e(),u={oldTab:s,oldPanel:l,newTab:o?e():n,newPanel:h};t.preventDefault(),n.hasClass("ui-state-disabled")||n.hasClass("ui-tabs-loading")||this.running||r&&!i.collapsible||this._trigger("beforeActivate",t,u)===!1||(i.active=o?!1:this.tabs.index(n),this.active=r?e():n,this.xhr&&this.xhr.abort(),l.length||h.length||e.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(n),t),this._toggle(t,u))},_toggle:function(t,i){function s(){n.running=!1,n._trigger("activate",t,i)}function a(){i.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),r.length&&n.options.show?n._show(r,n.options.show,s):(r.show(),s())}var n=this,r=i.newPanel,o=i.oldPanel;this.running=!0,o.length&&this.options.hide?this._hide(o,this.options.hide,function(){i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),a()}):(i.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),o.hide(),a()),o.attr({"aria-expanded":"false","aria-hidden":"true"}),i.oldTab.attr("aria-selected","false"),r.length&&o.length?i.oldTab.attr("tabIndex",-1):r.length&&this.tabs.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),r.attr({"aria-expanded":"true","aria-hidden":"false"}),i.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(t){var i,s=this._findActive(t);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),i=t.data("ui-tabs-aria-controls");i?t.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):t.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(i){var s=this.options.disabled;s!==!1&&(i===t?s=!1:(i=this._getIndex(i),s=e.isArray(s)?e.map(s,function(e){return e!==i?e:null}):e.map(this.tabs,function(e,t){return t!==i?t:null})),this._setupDisabled(s))},disable:function(i){var s=this.options.disabled;if(s!==!0){if(i===t)s=!0;else{if(i=this._getIndex(i),-1!==e.inArray(i,s))return;s=e.isArray(s)?e.merge([i],s).sort():[i]}this._setupDisabled(s)}},load:function(t,i){t=this._getIndex(t);var a=this,n=this.tabs.eq(t),r=n.find(".ui-tabs-anchor"),o=this._getPanelForTab(n),h={tab:n,panel:o};s(r[0])||(this.xhr=e.ajax(this._ajaxSettings(r,i,h)),this.xhr&&"canceled"!==this.xhr.statusText&&(n.addClass("ui-tabs-loading"),o.attr("aria-busy","true"),this.xhr.success(function(e){setTimeout(function(){o.html(e),a._trigger("load",i,h)},1)}).complete(function(e,t){setTimeout(function(){"abort"===t&&a.panels.stop(!1,!0),n.removeClass("ui-tabs-loading"),o.removeAttr("aria-busy"),e===a.xhr&&delete a.xhr},1)})))},_ajaxSettings:function(t,i,s){var a=this;return{url:t.attr("href"),beforeSend:function(t,n){return a._trigger("beforeLoad",i,e.extend({jqXHR:t,ajaxSettings:n},s))}}},_getPanelForTab:function(t){var i=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}})})(jQuery);(function(e){function t(t,i){var s=(t.attr("aria-describedby")||"").split(/\s+/);s.push(i),t.data("ui-tooltip-id",i).attr("aria-describedby",e.trim(s.join(" ")))}function i(t){var i=t.data("ui-tooltip-id"),s=(t.attr("aria-describedby")||"").split(/\s+/),a=e.inArray(i,s);-1!==a&&s.splice(a,1),t.removeData("ui-tooltip-id"),s=e.trim(s.join(" ")),s?t.attr("aria-describedby",s):t.removeAttr("aria-describedby")}var s=0;e.widget("ui.tooltip",{version:"1.10.3",options:{content:function(){var t=e(this).attr("title")||"";return e("<a>").text(t).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable()},_setOption:function(t,i){var s=this;return"disabled"===t?(this[i?"_disable":"_enable"](),this.options[t]=i,void 0):(this._super(t,i),"content"===t&&e.each(this.tooltips,function(e,t){s._updateContent(t)}),void 0)},_disable:function(){var t=this;e.each(this.tooltips,function(i,s){var a=e.Event("blur");a.target=a.currentTarget=s[0],t.close(a,!0)}),this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).addBack().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var i=this,s=e(t?t.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),t&&"mouseover"===t.type&&s.parents().each(function(){var t,s=e(this);s.data("ui-tooltip-open")&&(t=e.Event("blur"),t.target=t.currentTarget=this,i.close(t,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._updateContent(s,t))},_updateContent:function(e,t){var i,s=this.options.content,a=this,n=t?t.type:null;return"string"==typeof s?this._open(t,e,s):(i=s.call(e[0],function(i){e.data("ui-tooltip-open")&&a._delay(function(){t&&(t.type=n),this._open(t,e,i)})}),i&&this._open(t,e,i),void 0)},_open:function(i,s,a){function n(e){l.of=e,r.is(":hidden")||r.position(l)}var r,o,h,l=e.extend({},this.options.position);if(a){if(r=this._find(s),r.length)return r.find(".ui-tooltip-content").html(a),void 0;s.is("[title]")&&(i&&"mouseover"===i.type?s.attr("title",""):s.removeAttr("title")),r=this._tooltip(s),t(s,r.attr("id")),r.find(".ui-tooltip-content").html(a),this.options.track&&i&&/^mouse/.test(i.type)?(this._on(this.document,{mousemove:n}),n(i)):r.position(e.extend({of:s},this.options.position)),r.hide(),this._show(r,this.options.show),this.options.show&&this.options.show.delay&&(h=this.delayedShow=setInterval(function(){r.is(":visible")&&(n(l.of),clearInterval(h))},e.fx.interval)),this._trigger("open",i,{tooltip:r}),o={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var i=e.Event(t);i.currentTarget=s[0],this.close(i,!0)}},remove:function(){this._removeTooltip(r)}},i&&"mouseover"!==i.type||(o.mouseleave="close"),i&&"focusin"!==i.type||(o.focusout="close"),this._on(!0,s,o)}},close:function(t){var s=this,a=e(t?t.currentTarget:this.element),n=this._find(a);this.closing||(clearInterval(this.delayedShow),a.data("ui-tooltip-title")&&a.attr("title",a.data("ui-tooltip-title")),i(a),n.stop(!0),this._hide(n,this.options.hide,function(){s._removeTooltip(e(this))}),a.removeData("ui-tooltip-open"),this._off(a,"mouseleave focusout keyup"),a[0]!==this.element[0]&&this._off(a,"remove"),this._off(this.document,"mousemove"),t&&"mouseleave"===t.type&&e.each(this.parents,function(t,i){e(i.element).attr("title",i.title),delete s.parents[t]}),this.closing=!0,this._trigger("close",t,{tooltip:n}),this.closing=!1)},_tooltip:function(t){var i="ui-tooltip-"+s++,a=e("<div>").attr({id:i,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return e("<div>").addClass("ui-tooltip-content").appendTo(a),a.appendTo(this.document[0].body),this.tooltips[i]=t,a},_find:function(t){var i=t.data("ui-tooltip-id");return i?e("#"+i):e()},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(i,s){var a=e.Event("blur");a.target=a.currentTarget=s[0],t.close(a,!0),e("#"+i).remove(),s.data("ui-tooltip-title")&&(s.attr("title",s.data("ui-tooltip-title")),s.removeData("ui-tooltip-title"))})}})})(jQuery);(function(e,t){var i="ui-effects-";e.effects={effect:{}},function(e,t){function i(e,t,i){var s=c[t.type]||{};return null==e?i||!t.def?null:t.def:(e=s.floor?~~e:parseFloat(e),isNaN(e)?t.def:s.mod?(e+s.mod)%s.mod:0>e?0:e>s.max?s.max:e)}function s(i){var s=l(),a=s._rgba=[];return i=i.toLowerCase(),f(h,function(e,n){var r,o=n.re.exec(i),h=o&&n.parse(o),l=n.space||"rgba";return h?(r=s[l](h),s[u[l].cache]=r[u[l].cache],a=s._rgba=r._rgba,!1):t}),a.length?("0,0,0,0"===a.join()&&e.extend(a,n.transparent),s):n[i]}function a(e,t,i){return i=(i+1)%1,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+6*(t-e)*(2/3-i):e}var n,r="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",o=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[e[1],e[2],e[3],e[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(e){return[2.55*e[1],2.55*e[2],2.55*e[3],e[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(e){return[e[1],e[2]/100,e[3]/100,e[4]]}}],l=e.Color=function(t,i,s,a){return new e.Color.fn.parse(t,i,s,a)},u={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},c={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=e("<p>")[0],f=e.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),l.fn=e.extend(l.prototype,{parse:function(a,r,o,h){if(a===t)return this._rgba=[null,null,null,null],this;(a.jquery||a.nodeType)&&(a=e(a).css(r),r=t);var c=this,d=e.type(a),p=this._rgba=[];return r!==t&&(a=[a,r,o,h],d="array"),"string"===d?this.parse(s(a)||n._default):"array"===d?(f(u.rgba.props,function(e,t){p[t.idx]=i(a[t.idx],t)}),this):"object"===d?(a instanceof l?f(u,function(e,t){a[t.cache]&&(c[t.cache]=a[t.cache].slice())}):f(u,function(t,s){var n=s.cache;f(s.props,function(e,t){if(!c[n]&&s.to){if("alpha"===e||null==a[e])return;c[n]=s.to(c._rgba)}c[n][t.idx]=i(a[e],t,!0)}),c[n]&&0>e.inArray(null,c[n].slice(0,3))&&(c[n][3]=1,s.from&&(c._rgba=s.from(c[n])))}),this):t},is:function(e){var i=l(e),s=!0,a=this;return f(u,function(e,n){var r,o=i[n.cache];return o&&(r=a[n.cache]||n.to&&n.to(a._rgba)||[],f(n.props,function(e,i){return null!=o[i.idx]?s=o[i.idx]===r[i.idx]:t})),s}),s},_space:function(){var e=[],t=this;return f(u,function(i,s){t[s.cache]&&e.push(i)}),e.pop()},transition:function(e,t){var s=l(e),a=s._space(),n=u[a],r=0===this.alpha()?l("transparent"):this,o=r[n.cache]||n.to(r._rgba),h=o.slice();return s=s[n.cache],f(n.props,function(e,a){var n=a.idx,r=o[n],l=s[n],u=c[a.type]||{};null!==l&&(null===r?h[n]=l:(u.mod&&(l-r>u.mod/2?r+=u.mod:r-l>u.mod/2&&(r-=u.mod)),h[n]=i((l-r)*t+r,a)))}),this[a](h)},blend:function(t){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),a=l(t)._rgba;return l(e.map(i,function(e,t){return(1-s)*a[t]+s*e}))},toRgbaString:function(){var t="rgba(",i=e.map(this._rgba,function(e,t){return null==e?t>2?1:0:e});return 1===i[3]&&(i.pop(),t="rgb("),t+i.join()+")"},toHslaString:function(){var t="hsla(",i=e.map(this.hsla(),function(e,t){return null==e&&(e=t>2?1:0),t&&3>t&&(e=Math.round(100*e)+"%"),e});return 1===i[3]&&(i.pop(),t="hsl("),t+i.join()+")"},toHexString:function(t){var i=this._rgba.slice(),s=i.pop();return t&&i.push(~~(255*s)),"#"+e.map(i,function(e){return e=(e||0).toString(16),1===e.length?"0"+e:e}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,u.hsla.to=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t,i,s=e[0]/255,a=e[1]/255,n=e[2]/255,r=e[3],o=Math.max(s,a,n),h=Math.min(s,a,n),l=o-h,u=o+h,c=.5*u;return t=h===o?0:s===o?60*(a-n)/l+360:a===o?60*(n-s)/l+120:60*(s-a)/l+240,i=0===l?0:.5>=c?l/u:l/(2-u),[Math.round(t)%360,i,c,null==r?1:r]},u.hsla.from=function(e){if(null==e[0]||null==e[1]||null==e[2])return[null,null,null,e[3]];var t=e[0]/360,i=e[1],s=e[2],n=e[3],r=.5>=s?s*(1+i):s+i-s*i,o=2*s-r;return[Math.round(255*a(o,r,t+1/3)),Math.round(255*a(o,r,t)),Math.round(255*a(o,r,t-1/3)),n]},f(u,function(s,a){var n=a.props,r=a.cache,h=a.to,u=a.from;l.fn[s]=function(s){if(h&&!this[r]&&(this[r]=h(this._rgba)),s===t)return this[r].slice();var a,o=e.type(s),c="array"===o||"object"===o?s:arguments,d=this[r].slice();return f(n,function(e,t){var s=c["object"===o?e:t.idx];null==s&&(s=d[t.idx]),d[t.idx]=i(s,t)}),u?(a=l(u(d)),a[r]=d,a):l(d)},f(n,function(t,i){l.fn[t]||(l.fn[t]=function(a){var n,r=e.type(a),h="alpha"===t?this._hsla?"hsla":"rgba":s,l=this[h](),u=l[i.idx];return"undefined"===r?u:("function"===r&&(a=a.call(this,u),r=e.type(a)),null==a&&i.empty?this:("string"===r&&(n=o.exec(a),n&&(a=u+parseFloat(n[2])*("+"===n[1]?1:-1))),l[i.idx]=a,this[h](l)))})})}),l.hook=function(t){var i=t.split(" ");f(i,function(t,i){e.cssHooks[i]={set:function(t,a){var n,r,o="";if("transparent"!==a&&("string"!==e.type(a)||(n=s(a)))){if(a=l(n||a),!d.rgba&&1!==a._rgba[3]){for(r="backgroundColor"===i?t.parentNode:t;(""===o||"transparent"===o)&&r&&r.style;)try{o=e.css(r,"backgroundColor"),r=r.parentNode}catch(h){}a=a.blend(o&&"transparent"!==o?o:"_default")}a=a.toRgbaString()}try{t.style[i]=a}catch(h){}}},e.fx.step[i]=function(t){t.colorInit||(t.start=l(t.elem,i),t.end=l(t.end),t.colorInit=!0),e.cssHooks[i].set(t.elem,t.start.transition(t.end,t.pos))}})},l.hook(r),e.cssHooks.borderColor={expand:function(e){var t={};return f(["Top","Right","Bottom","Left"],function(i,s){t["border"+s+"Color"]=e}),t}},n=e.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(t){var i,s,a=t.ownerDocument.defaultView?t.ownerDocument.defaultView.getComputedStyle(t,null):t.currentStyle,n={};if(a&&a.length&&a[0]&&a[a[0]])for(s=a.length;s--;)i=a[s],"string"==typeof a[i]&&(n[e.camelCase(i)]=a[i]);else for(i in a)"string"==typeof a[i]&&(n[i]=a[i]);return n}function s(t,i){var s,a,r={};for(s in i)a=i[s],t[s]!==a&&(n[s]||(e.fx.step[s]||!isNaN(parseFloat(a)))&&(r[s]=a));return r}var a=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,i){e.fx.step[i]=function(e){("none"!==e.end&&!e.setAttr||1===e.pos&&!e.setAttr)&&(jQuery.style(e.elem,i,e.end),e.setAttr=!0)}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e.effects.animateClass=function(t,n,r,o){var h=e.speed(n,r,o);return this.queue(function(){var n,r=e(this),o=r.attr("class")||"",l=h.children?r.find("*").addBack():r;l=l.map(function(){var t=e(this);return{el:t,start:i(this)}}),n=function(){e.each(a,function(e,i){t[i]&&r[i+"Class"](t[i])})},n(),l=l.map(function(){return this.end=i(this.el[0]),this.diff=s(this.start,this.end),this}),r.attr("class",o),l=l.map(function(){var t=this,i=e.Deferred(),s=e.extend({},h,{queue:!1,complete:function(){i.resolve(t)}});return this.el.animate(this.diff,s),i.promise()}),e.when.apply(e,l.get()).done(function(){n(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),h.complete.call(r[0])})})},e.fn.extend({addClass:function(t){return function(i,s,a,n){return s?e.effects.animateClass.call(this,{add:i},s,a,n):t.apply(this,arguments)}}(e.fn.addClass),removeClass:function(t){return function(i,s,a,n){return arguments.length>1?e.effects.animateClass.call(this,{remove:i},s,a,n):t.apply(this,arguments)}}(e.fn.removeClass),toggleClass:function(i){return function(s,a,n,r,o){return"boolean"==typeof a||a===t?n?e.effects.animateClass.call(this,a?{add:s}:{remove:s},n,r,o):i.apply(this,arguments):e.effects.animateClass.call(this,{toggle:s},a,n,r)}}(e.fn.toggleClass),switchClass:function(t,i,s,a,n){return e.effects.animateClass.call(this,{add:i,remove:t},s,a,n)}})}(),function(){function s(t,i,s,a){return e.isPlainObject(t)&&(i=t,t=t.effect),t={effect:t},null==i&&(i={}),e.isFunction(i)&&(a=i,s=null,i={}),("number"==typeof i||e.fx.speeds[i])&&(a=s,s=i,i={}),e.isFunction(s)&&(a=s,s=null),i&&e.extend(t,i),s=s||i.duration,t.duration=e.fx.off?0:"number"==typeof s?s:s in e.fx.speeds?e.fx.speeds[s]:e.fx.speeds._default,t.complete=a||i.complete,t}function a(t){return!t||"number"==typeof t||e.fx.speeds[t]?!0:"string"!=typeof t||e.effects.effect[t]?e.isFunction(t)?!0:"object"!=typeof t||t.effect?!1:!0:!0}e.extend(e.effects,{version:"1.10.3",save:function(e,t){for(var s=0;t.length>s;s++)null!==t[s]&&e.data(i+t[s],e[0].style[t[s]])},restore:function(e,s){var a,n;for(n=0;s.length>n;n++)null!==s[n]&&(a=e.data(i+s[n]),a===t&&(a=""),e.css(s[n],a))},setMode:function(e,t){return"toggle"===t&&(t=e.is(":hidden")?"show":"hide"),t},getBaseline:function(e,t){var i,s;switch(e[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=e[0]/t.height}switch(e[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=e[1]/t.width}return{x:s,y:i}},createWrapper:function(t){if(t.parent().is(".ui-effects-wrapper"))return t.parent();var i={width:t.outerWidth(!0),height:t.outerHeight(!0),"float":t.css("float")},s=e("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),a={width:t.width(),height:t.height()},n=document.activeElement;try{n.id}catch(r){n=document.body}return t.wrap(s),(t[0]===n||e.contains(t[0],n))&&e(n).focus(),s=t.parent(),"static"===t.css("position")?(s.css({position:"relative"}),t.css({position:"relative"})):(e.extend(i,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,s){i[s]=t.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(a),s.css(i).show()},removeWrapper:function(t){var i=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===i||e.contains(t[0],i))&&e(i).focus()),t},setTransition:function(t,i,s,a){return a=a||{},e.each(i,function(e,i){var n=t.cssUnit(i);n[0]>0&&(a[i]=n[0]*s+n[1])}),a}}),e.fn.extend({effect:function(){function t(t){function s(){e.isFunction(n)&&n.call(a[0]),e.isFunction(t)&&t()}var a=e(this),n=i.complete,o=i.mode;(a.is(":hidden")?"hide"===o:"show"===o)?(a[o](),s()):r.call(a[0],i,s)}var i=s.apply(this,arguments),a=i.mode,n=i.queue,r=e.effects.effect[i.effect];return e.fx.off||!r?a?this[a](i.duration,i.complete):this.each(function(){i.complete&&i.complete.call(this)}):n===!1?this.each(t):this.queue(n||"fx",t)},show:function(e){return function(t){if(a(t))return e.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="show",this.effect.call(this,i)}}(e.fn.show),hide:function(e){return function(t){if(a(t))return e.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="hide",this.effect.call(this,i)}}(e.fn.hide),toggle:function(e){return function(t){if(a(t)||"boolean"==typeof t)return e.apply(this,arguments);var i=s.apply(this,arguments);return i.mode="toggle",this.effect.call(this,i)}}(e.fn.toggle),cssUnit:function(t){var i=this.css(t),s=[];return e.each(["em","px","%","pt"],function(e,t){i.indexOf(t)>0&&(s=[parseFloat(i),t])}),s}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,i){t[i]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return 0===e||1===e?e:-Math.pow(2,8*(e-1))*Math.sin((80*(e-1)-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){for(var t,i=4;((t=Math.pow(2,--i))-1)/11>e;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*t-2)/22-e,2)}}),e.each(t,function(t,i){e.easing["easeIn"+t]=i,e.easing["easeOut"+t]=function(e){return 1-i(1-e)},e.easing["easeInOut"+t]=function(e){return.5>e?i(2*e)/2:1-i(-2*e+2)/2}})}()})(jQuery);(function(e){var t=/up|down|vertical/,i=/up|left|vertical|horizontal/;e.effects.effect.blind=function(a,s){var n,r,o,l=e(this),h=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(l,a.mode||"hide"),d=a.direction||"up",c=t.test(d),p=c?"height":"width",f=c?"top":"left",m=i.test(d),g={},v="show"===u;l.parent().is(".ui-effects-wrapper")?e.effects.save(l.parent(),h):e.effects.save(l,h),l.show(),n=e.effects.createWrapper(l).css({overflow:"hidden"}),r=n[p](),o=parseFloat(n.css(f))||0,g[p]=v?r:0,m||(l.css(c?"bottom":"right",0).css(c?"top":"left","auto").css({position:"absolute"}),g[f]=v?o:r+o),v&&(n.css(p,0),m||n.css(f,o+r)),n.animate(g,{duration:a.duration,easing:a.easing,queue:!1,complete:function(){"hide"===u&&l.hide(),e.effects.restore(l,h),e.effects.removeWrapper(l),s()}})}})(jQuery);(function(e){e.effects.effect.bounce=function(t,i){var a,s,n,r=e(this),o=["position","top","bottom","left","right","height","width"],l=e.effects.setMode(r,t.mode||"effect"),h="hide"===l,u="show"===l,d=t.direction||"up",c=t.distance,p=t.times||5,f=2*p+(u||h?1:0),m=t.duration/f,g=t.easing,v="up"===d||"down"===d?"top":"left",y="up"===d||"left"===d,b=r.queue(),_=b.length;for((u||h)&&o.push("opacity"),e.effects.save(r,o),r.show(),e.effects.createWrapper(r),c||(c=r["top"===v?"outerHeight":"outerWidth"]()/3),u&&(n={opacity:1},n[v]=0,r.css("opacity",0).css(v,y?2*-c:2*c).animate(n,m,g)),h&&(c/=Math.pow(2,p-1)),n={},n[v]=0,a=0;p>a;a++)s={},s[v]=(y?"-=":"+=")+c,r.animate(s,m,g).animate(n,m,g),c=h?2*c:c/2;h&&(s={opacity:0},s[v]=(y?"-=":"+=")+c,r.animate(s,m,g)),r.queue(function(){h&&r.hide(),e.effects.restore(r,o),e.effects.removeWrapper(r),i()}),_>1&&b.splice.apply(b,[1,0].concat(b.splice(_,f+1))),r.dequeue()}})(jQuery);(function(e){e.effects.effect.clip=function(t,i){var a,s,n,r=e(this),o=["position","top","bottom","left","right","height","width"],l=e.effects.setMode(r,t.mode||"hide"),h="show"===l,u=t.direction||"vertical",d="vertical"===u,c=d?"height":"width",p=d?"top":"left",f={};e.effects.save(r,o),r.show(),a=e.effects.createWrapper(r).css({overflow:"hidden"}),s="IMG"===r[0].tagName?a:r,n=s[c](),h&&(s.css(c,0),s.css(p,n/2)),f[c]=h?n:0,f[p]=h?0:n/2,s.animate(f,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){h||r.hide(),e.effects.restore(r,o),e.effects.removeWrapper(r),i()}})}})(jQuery);(function(e){e.effects.effect.drop=function(t,i){var a,s=e(this),n=["position","top","bottom","left","right","opacity","height","width"],r=e.effects.setMode(s,t.mode||"hide"),o="show"===r,l=t.direction||"left",h="up"===l||"down"===l?"top":"left",u="up"===l||"left"===l?"pos":"neg",d={opacity:o?1:0};e.effects.save(s,n),s.show(),e.effects.createWrapper(s),a=t.distance||s["top"===h?"outerHeight":"outerWidth"](!0)/2,o&&s.css("opacity",0).css(h,"pos"===u?-a:a),d[h]=(o?"pos"===u?"+=":"-=":"pos"===u?"-=":"+=")+a,s.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===r&&s.hide(),e.effects.restore(s,n),e.effects.removeWrapper(s),i()}})}})(jQuery);(function(e){e.effects.effect.explode=function(t,i){function s(){b.push(this),b.length===d*c&&a()}function a(){p.css({visibility:"visible"}),e(b).remove(),m||p.hide(),i()}var n,r,o,l,h,u,d=t.pieces?Math.round(Math.sqrt(t.pieces)):3,c=d,p=e(this),f=e.effects.setMode(p,t.mode||"hide"),m="show"===f,g=p.show().css("visibility","hidden").offset(),v=Math.ceil(p.outerWidth()/c),y=Math.ceil(p.outerHeight()/d),b=[];for(n=0;d>n;n++)for(l=g.top+n*y,u=n-(d-1)/2,r=0;c>r;r++)o=g.left+r*v,h=r-(c-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-r*v,top:-n*y}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:v,height:y,left:o+(m?h*v:0),top:l+(m?u*y:0),opacity:m?0:1}).animate({left:o+(m?0:h*v),top:l+(m?0:u*y),opacity:m?1:0},t.duration||500,t.easing,s)}})(jQuery);(function(e){e.effects.effect.fade=function(t,i){var s=e(this),a=e.effects.setMode(s,t.mode||"toggle");s.animate({opacity:a},{queue:!1,duration:t.duration,easing:t.easing,complete:i})}})(jQuery);(function(e){e.effects.effect.fold=function(t,i){var s,a,n=e(this),r=["position","top","bottom","left","right","height","width"],o=e.effects.setMode(n,t.mode||"hide"),l="show"===o,h="hide"===o,u=t.size||15,d=/([0-9]+)%/.exec(u),c=!!t.horizFirst,p=l!==c,f=p?["width","height"]:["height","width"],m=t.duration/2,g={},v={};e.effects.save(n,r),n.show(),s=e.effects.createWrapper(n).css({overflow:"hidden"}),a=p?[s.width(),s.height()]:[s.height(),s.width()],d&&(u=parseInt(d[1],10)/100*a[h?0:1]),l&&s.css(c?{height:0,width:u}:{height:u,width:0}),g[f[0]]=l?a[0]:u,v[f[1]]=l?a[1]:0,s.animate(g,m,t.easing).animate(v,m,t.easing,function(){h&&n.hide(),e.effects.restore(n,r),e.effects.removeWrapper(n),i()})}})(jQuery);(function(e){e.effects.effect.highlight=function(t,i){var s=e(this),a=["backgroundImage","backgroundColor","opacity"],n=e.effects.setMode(s,t.mode||"show"),r={backgroundColor:s.css("backgroundColor")};"hide"===n&&(r.opacity=0),e.effects.save(s,a),s.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(r,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===n&&s.hide(),e.effects.restore(s,a),i()}})}})(jQuery);(function(e){e.effects.effect.pulsate=function(t,i){var s,a=e(this),n=e.effects.setMode(a,t.mode||"show"),r="show"===n,o="hide"===n,l=r||"hide"===n,h=2*(t.times||5)+(l?1:0),u=t.duration/h,d=0,c=a.queue(),p=c.length;for((r||!a.is(":visible"))&&(a.css("opacity",0).show(),d=1),s=1;h>s;s++)a.animate({opacity:d},u,t.easing),d=1-d;a.animate({opacity:d},u,t.easing),a.queue(function(){o&&a.hide(),i()}),p>1&&c.splice.apply(c,[1,0].concat(c.splice(p,h+1))),a.dequeue()}})(jQuery);(function(e){e.effects.effect.puff=function(t,i){var s=e(this),a=e.effects.setMode(s,t.mode||"hide"),n="hide"===a,r=parseInt(t.percent,10)||150,o=r/100,h={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:a,complete:i,percent:n?r:100,from:n?h:{height:h.height*o,width:h.width*o,outerHeight:h.outerHeight*o,outerWidth:h.outerWidth*o}}),s.effect(t)},e.effects.effect.scale=function(t,i){var s=e(this),a=e.extend(!0,{},t),n=e.effects.setMode(s,t.mode||"effect"),r=parseInt(t.percent,10)||(0===parseInt(t.percent,10)?0:"hide"===n?0:100),o=t.direction||"both",h=t.origin,l={height:s.height(),width:s.width(),outerHeight:s.outerHeight(),outerWidth:s.outerWidth()},u={y:"horizontal"!==o?r/100:1,x:"vertical"!==o?r/100:1};a.effect="size",a.queue=!1,a.complete=i,"effect"!==n&&(a.origin=h||["middle","center"],a.restore=!0),a.from=t.from||("show"===n?{height:0,width:0,outerHeight:0,outerWidth:0}:l),a.to={height:l.height*u.y,width:l.width*u.x,outerHeight:l.outerHeight*u.y,outerWidth:l.outerWidth*u.x},a.fade&&("show"===n&&(a.from.opacity=0,a.to.opacity=1),"hide"===n&&(a.from.opacity=1,a.to.opacity=0)),s.effect(a)},e.effects.effect.size=function(t,i){var s,a,n,r=e(this),o=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],l=["width","height","overflow"],u=["fontSize"],d=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],c=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(r,t.mode||"effect"),f=t.restore||"effect"!==p,m=t.scale||"both",g=t.origin||["middle","center"],v=r.css("position"),y=f?o:h,b={height:0,width:0,outerHeight:0,outerWidth:0};"show"===p&&r.show(),s={height:r.height(),width:r.width(),outerHeight:r.outerHeight(),outerWidth:r.outerWidth()},"toggle"===t.mode&&"show"===p?(r.from=t.to||b,r.to=t.from||s):(r.from=t.from||("show"===p?b:s),r.to=t.to||("hide"===p?b:s)),n={from:{y:r.from.height/s.height,x:r.from.width/s.width},to:{y:r.to.height/s.height,x:r.to.width/s.width}},("box"===m||"both"===m)&&(n.from.y!==n.to.y&&(y=y.concat(d),r.from=e.effects.setTransition(r,d,n.from.y,r.from),r.to=e.effects.setTransition(r,d,n.to.y,r.to)),n.from.x!==n.to.x&&(y=y.concat(c),r.from=e.effects.setTransition(r,c,n.from.x,r.from),r.to=e.effects.setTransition(r,c,n.to.x,r.to))),("content"===m||"both"===m)&&n.from.y!==n.to.y&&(y=y.concat(u).concat(l),r.from=e.effects.setTransition(r,u,n.from.y,r.from),r.to=e.effects.setTransition(r,u,n.to.y,r.to)),e.effects.save(r,y),r.show(),e.effects.createWrapper(r),r.css("overflow","hidden").css(r.from),g&&(a=e.effects.getBaseline(g,s),r.from.top=(s.outerHeight-r.outerHeight())*a.y,r.from.left=(s.outerWidth-r.outerWidth())*a.x,r.to.top=(s.outerHeight-r.to.outerHeight)*a.y,r.to.left=(s.outerWidth-r.to.outerWidth)*a.x),r.css(r.from),("content"===m||"both"===m)&&(d=d.concat(["marginTop","marginBottom"]).concat(u),c=c.concat(["marginLeft","marginRight"]),l=o.concat(d).concat(c),r.find("*[width]").each(function(){var i=e(this),s={height:i.height(),width:i.width(),outerHeight:i.outerHeight(),outerWidth:i.outerWidth()};f&&e.effects.save(i,l),i.from={height:s.height*n.from.y,width:s.width*n.from.x,outerHeight:s.outerHeight*n.from.y,outerWidth:s.outerWidth*n.from.x},i.to={height:s.height*n.to.y,width:s.width*n.to.x,outerHeight:s.height*n.to.y,outerWidth:s.width*n.to.x},n.from.y!==n.to.y&&(i.from=e.effects.setTransition(i,d,n.from.y,i.from),i.to=e.effects.setTransition(i,d,n.to.y,i.to)),n.from.x!==n.to.x&&(i.from=e.effects.setTransition(i,c,n.from.x,i.from),i.to=e.effects.setTransition(i,c,n.to.x,i.to)),i.css(i.from),i.animate(i.to,t.duration,t.easing,function(){f&&e.effects.restore(i,l)})})),r.animate(r.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){0===r.to.opacity&&r.css("opacity",r.from.opacity),"hide"===p&&r.hide(),e.effects.restore(r,y),f||("static"===v?r.css({position:"relative",top:r.to.top,left:r.to.left}):e.each(["top","left"],function(e,t){r.css(t,function(t,i){var s=parseInt(i,10),a=e?r.to.left:r.to.top;return"auto"===i?a+"px":s+a+"px"})})),e.effects.removeWrapper(r),i()}})}})(jQuery);(function(e){e.effects.effect.shake=function(t,i){var s,a=e(this),n=["position","top","bottom","left","right","height","width"],r=e.effects.setMode(a,t.mode||"effect"),o=t.direction||"left",h=t.distance||20,l=t.times||3,u=2*l+1,d=Math.round(t.duration/u),c="up"===o||"down"===o?"top":"left",p="up"===o||"left"===o,f={},m={},g={},v=a.queue(),y=v.length;for(e.effects.save(a,n),a.show(),e.effects.createWrapper(a),f[c]=(p?"-=":"+=")+h,m[c]=(p?"+=":"-=")+2*h,g[c]=(p?"-=":"+=")+2*h,a.animate(f,d,t.easing),s=1;l>s;s++)a.animate(m,d,t.easing).animate(g,d,t.easing);a.animate(m,d,t.easing).animate(f,d/2,t.easing).queue(function(){"hide"===r&&a.hide(),e.effects.restore(a,n),e.effects.removeWrapper(a),i()}),y>1&&v.splice.apply(v,[1,0].concat(v.splice(y,u+1))),a.dequeue()}})(jQuery);(function(e){e.effects.effect.slide=function(t,i){var s,a=e(this),n=["position","top","bottom","left","right","width","height"],r=e.effects.setMode(a,t.mode||"show"),o="show"===r,h=t.direction||"left",l="up"===h||"down"===h?"top":"left",u="up"===h||"left"===h,d={};e.effects.save(a,n),a.show(),s=t.distance||a["top"===l?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(a).css({overflow:"hidden"}),o&&a.css(l,u?isNaN(s)?"-"+s:-s:s),d[l]=(o?u?"+=":"-=":u?"-=":"+=")+s,a.animate(d,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){"hide"===r&&a.hide(),e.effects.restore(a,n),e.effects.removeWrapper(a),i()}})}})(jQuery);(function(e){e.effects.effect.transfer=function(t,i){var s=e(this),a=e(t.to),n="fixed"===a.css("position"),r=e("body"),o=n?r.scrollTop():0,h=n?r.scrollLeft():0,l=a.offset(),u={top:l.top-o,left:l.left-h,height:a.innerHeight(),width:a.innerWidth()},d=s.offset(),c=e("<div class='ui-effects-transfer'></div>").appendTo(document.body).addClass(t.className).css({top:d.top-o,left:d.left-h,height:s.innerHeight(),width:s.innerWidth(),position:n?"fixed":"absolute"}).animate(u,t.duration,t.easing,function(){c.remove(),i()})}})(jQuery);
\ No newline at end of file
diff --git a/public/assets/scripts/jquery.cokie.min.js b/public/assets/scripts/jquery.cokie.min.js
new file mode 100644
index 0000000..0f1b501
--- /dev/null
+++ b/public/assets/scripts/jquery.cokie.min.js
@@ -0,0 +1,9 @@
+/*!
+ * jQuery Cookie Plugin v1.3.1
+ * https://github.com/carhartl/jquery-cookie
+ * Plugin file name changed to jquery.cokie.min to prevent blocking by ModSecurity module
+ *
+ * Copyright 2013 Klaus Hartl
+ * Released under the MIT license
+ */
+(function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(e){var a=/\+/g;function d(g){return g}function b(g){return decodeURIComponent(g.replace(a," "))}function f(g){if(g.indexOf('"')===0){g=g.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\")}try{return c.json?JSON.parse(g):g}catch(h){}}var c=e.cookie=function(p,o,u){if(o!==undefined){u=e.extend({},c.defaults,u);if(typeof u.expires==="number"){var q=u.expires,s=u.expires=new Date();s.setDate(s.getDate()+q)}o=c.json?JSON.stringify(o):String(o);return(document.cookie=[c.raw?p:encodeURIComponent(p),"=",c.raw?o:encodeURIComponent(o),u.expires?"; expires="+u.expires.toUTCString():"",u.path?"; path="+u.path:"",u.domain?"; domain="+u.domain:"",u.secure?"; secure":""].join(""))}var g=c.raw?d:b;var r=document.cookie.split("; ");var v=p?undefined:{};for(var n=0,k=r.length;n<k;n++){var m=r[n].split("=");var h=g(m.shift());var j=g(m.join("="));if(p&&p===h){v=f(j);break}if(!p){v[h]=f(j)}}return v};c.defaults={};e.removeCookie=function(h,g){if(e.cookie(h)!==undefined){e.cookie(h,"",e.extend({},g,{expires:-1}));return true}return false}}));
\ No newline at end of file
diff --git a/public/assets/scripts/jquery.sparkline.min.js b/public/assets/scripts/jquery.sparkline.min.js
new file mode 100644
index 0000000..fa616bf
--- /dev/null
+++ b/public/assets/scripts/jquery.sparkline.min.js
@@ -0,0 +1,5 @@
+/* jquery.sparkline 2.1.2 - http://omnipotent.net/jquery.sparkline/ 
+** Licensed under the New BSD License - see above site for details */
+
+(function(a,b,c){(function(a){typeof define=="function"&&define.amd?define(["jquery"],a):jQuery&&!jQuery.fn.sparkline&&a(jQuery)})(function(d){"use strict";var e={},f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L=0;f=function(){return{common:{type:"line",lineColor:"#00f",fillColor:"#cdf",defaultPixelsPerValue:3,width:"auto",height:"auto",composite:!1,tagValuesAttribute:"values",tagOptionsPrefix:"spark",enableTagOptions:!1,enableHighlight:!0,highlightLighten:1.4,tooltipSkipNull:!0,tooltipPrefix:"",tooltipSuffix:"",disableHiddenCheck:!1,numberFormatter:!1,numberDigitGroupCount:3,numberDigitGroupSep:",",numberDecimalMark:".",disableTooltips:!1,disableInteraction:!1},line:{spotColor:"#f80",highlightSpotColor:"#5f5",highlightLineColor:"#f22",spotRadius:1.5,minSpotColor:"#f80",maxSpotColor:"#f80",lineWidth:1,normalRangeMin:c,normalRangeMax:c,normalRangeColor:"#ccc",drawNormalOnTop:!1,chartRangeMin:c,chartRangeMax:c,chartRangeMinX:c,chartRangeMaxX:c,tooltipFormat:new h('<span style="color: {{color}}">&#9679;</span> {{prefix}}{{y}}{{suffix}}')},bar:{barColor:"#3366cc",negBarColor:"#f44",stackedBarColor:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],zeroColor:c,nullColor:c,zeroAxis:!0,barWidth:4,barSpacing:1,chartRangeMax:c,chartRangeMin:c,chartRangeClip:!1,colorMap:c,tooltipFormat:new h('<span style="color: {{color}}">&#9679;</span> {{prefix}}{{value}}{{suffix}}')},tristate:{barWidth:4,barSpacing:1,posBarColor:"#6f6",negBarColor:"#f44",zeroBarColor:"#999",colorMap:{},tooltipFormat:new h('<span style="color: {{color}}">&#9679;</span> {{value:map}}'),tooltipValueLookups:{map:{"-1":"Loss",0:"Draw",1:"Win"}}},discrete:{lineHeight:"auto",thresholdColor:c,thresholdValue:0,chartRangeMax:c,chartRangeMin:c,chartRangeClip:!1,tooltipFormat:new h("{{prefix}}{{value}}{{suffix}}")},bullet:{targetColor:"#f33",targetWidth:3,performanceColor:"#33f",rangeColors:["#d3dafe","#a8b6ff","#7f94ff"],base:c,tooltipFormat:new h("{{fieldkey:fields}} - {{value}}"),tooltipValueLookups:{fields:{r:"Range",p:"Performance",t:"Target"}}},pie:{offset:0,sliceColors:["#3366cc","#dc3912","#ff9900","#109618","#66aa00","#dd4477","#0099c6","#990099"],borderWidth:0,borderColor:"#000",tooltipFormat:new h('<span style="color: {{color}}">&#9679;</span> {{value}} ({{percent.1}}%)')},box:{raw:!1,boxLineColor:"#000",boxFillColor:"#cdf",whiskerColor:"#000",outlierLineColor:"#333",outlierFillColor:"#fff",medianColor:"#f00",showOutliers:!0,outlierIQR:1.5,spotRadius:1.5,target:c,targetColor:"#4a2",chartRangeMax:c,chartRangeMin:c,tooltipFormat:new h("{{field:fields}}: {{value}}"),tooltipFormatFieldlistKey:"field",tooltipValueLookups:{fields:{lq:"Lower Quartile",med:"Median",uq:"Upper Quartile",lo:"Left Outlier",ro:"Right Outlier",lw:"Left Whisker",rw:"Right Whisker"}}}}},E='.jqstooltip { position: absolute;left: 0px;top: 0px;visibility: hidden;background: rgb(0, 0, 0) transparent;background-color: rgba(0,0,0,0.6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";color: white;font: 10px arial, san serif;text-align: left;white-space: nowrap;padding: 5px;border: 1px solid white;z-index: 10000;}.jqsfield { color: white;font: 10px arial, san serif;text-align: left;}',g=function(){var a,b;return a=function(){this.init.apply(this,arguments)},arguments.length>1?(arguments[0]?(a.prototype=d.extend(new arguments[0],arguments[arguments.length-1]),a._super=arguments[0].prototype):a.prototype=arguments[arguments.length-1],arguments.length>2&&(b=Array.prototype.slice.call(arguments,1,-1),b.unshift(a.prototype),d.extend.apply(d,b))):a.prototype=arguments[0],a.prototype.cls=a,a},d.SPFormatClass=h=g({fre:/\{\{([\w.]+?)(:(.+?))?\}\}/g,precre:/(\w+)\.(\d+)/,init:function(a,b){this.format=a,this.fclass=b},render:function(a,b,d){var e=this,f=a,g,h,i,j,k;return this.format.replace(this.fre,function(){var a;return h=arguments[1],i=arguments[3],g=e.precre.exec(h),g?(k=g[2],h=g[1]):k=!1,j=f[h],j===c?"":i&&b&&b[i]?(a=b[i],a.get?b[i].get(j)||j:b[i][j]||j):(n(j)&&(d.get("numberFormatter")?j=d.get("numberFormatter")(j):j=s(j,k,d.get("numberDigitGroupCount"),d.get("numberDigitGroupSep"),d.get("numberDecimalMark"))),j)})}}),d.spformat=function(a,b){return new h(a,b)},i=function(a,b,c){return a<b?b:a>c?c:a},j=function(a,c){var d;return c===2?(d=b.floor(a.length/2),a.length%2?a[d]:(a[d-1]+a[d])/2):a.length%2?(d=(a.length*c+c)/4,d%1?(a[b.floor(d)]+a[b.floor(d)-1])/2:a[d-1]):(d=(a.length*c+2)/4,d%1?(a[b.floor(d)]+a[b.floor(d)-1])/2:a[d-1])},k=function(a){var b;switch(a){case"undefined":a=c;break;case"null":a=null;break;case"true":a=!0;break;case"false":a=!1;break;default:b=parseFloat(a),a==b&&(a=b)}return a},l=function(a){var b,c=[];for(b=a.length;b--;)c[b]=k(a[b]);return c},m=function(a,b){var c,d,e=[];for(c=0,d=a.length;c<d;c++)a[c]!==b&&e.push(a[c]);return e},n=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},s=function(a,b,c,e,f){var g,h;a=(b===!1?parseFloat(a).toString():a.toFixed(b)).split(""),g=(g=d.inArray(".",a))<0?a.length:g,g<a.length&&(a[g]=f);for(h=g-c;h>0;h-=c)a.splice(h,0,e);return a.join("")},o=function(a,b,c){var d;for(d=b.length;d--;){if(c&&b[d]===null)continue;if(b[d]!==a)return!1}return!0},p=function(a){var b=0,c;for(c=a.length;c--;)b+=typeof a[c]=="number"?a[c]:0;return b},r=function(a){return d.isArray(a)?a:[a]},q=function(b){var c;a.createStyleSheet?a.createStyleSheet().cssText=b:(c=a.createElement("style"),c.type="text/css",a.getElementsByTagName("head")[0].appendChild(c),c[typeof a.body.style.WebkitAppearance=="string"?"innerText":"innerHTML"]=b)},d.fn.simpledraw=function(b,e,f,g){var h,i;if(f&&(h=this.data("_jqs_vcanvas")))return h;if(d.fn.sparkline.canvas===!1)return!1;if(d.fn.sparkline.canvas===c){var j=a.createElement("canvas");if(!j.getContext||!j.getContext("2d")){if(!a.namespaces||!!a.namespaces.v)return d.fn.sparkline.canvas=!1,!1;a.namespaces.add("v","urn:schemas-microsoft-com:vml","#default#VML"),d.fn.sparkline.canvas=function(a,b,c,d){return new J(a,b,c)}}else d.fn.sparkline.canvas=function(a,b,c,d){return new I(a,b,c,d)}}return b===c&&(b=d(this).innerWidth()),e===c&&(e=d(this).innerHeight()),h=d.fn.sparkline.canvas(b,e,this,g),i=d(this).data("_jqs_mhandler"),i&&i.registerCanvas(h),h},d.fn.cleardraw=function(){var a=this.data("_jqs_vcanvas");a&&a.reset()},d.RangeMapClass=t=g({init:function(a){var b,c,d=[];for(b in a)a.hasOwnProperty(b)&&typeof b=="string"&&b.indexOf(":")>-1&&(c=b.split(":"),c[0]=c[0].length===0?-Infinity:parseFloat(c[0]),c[1]=c[1].length===0?Infinity:parseFloat(c[1]),c[2]=a[b],d.push(c));this.map=a,this.rangelist=d||!1},get:function(a){var b=this.rangelist,d,e,f;if((f=this.map[a])!==c)return f;if(b)for(d=b.length;d--;){e=b[d];if(e[0]<=a&&e[1]>=a)return e[2]}return c}}),d.range_map=function(a){return new t(a)},u=g({init:function(a,b){var c=d(a);this.$el=c,this.options=b,this.currentPageX=0,this.currentPageY=0,this.el=a,this.splist=[],this.tooltip=null,this.over=!1,this.displayTooltips=!b.get("disableTooltips"),this.highlightEnabled=!b.get("disableHighlight")},registerSparkline:function(a){this.splist.push(a),this.over&&this.updateDisplay()},registerCanvas:function(a){var b=d(a.canvas);this.canvas=a,this.$canvas=b,b.mouseenter(d.proxy(this.mouseenter,this)),b.mouseleave(d.proxy(this.mouseleave,this)),b.click(d.proxy(this.mouseclick,this))},reset:function(a){this.splist=[],this.tooltip&&a&&(this.tooltip.remove(),this.tooltip=c)},mouseclick:function(a){var b=d.Event("sparklineClick");b.originalEvent=a,b.sparklines=this.splist,this.$el.trigger(b)},mouseenter:function(b){d(a.body).unbind("mousemove.jqs"),d(a.body).bind("mousemove.jqs",d.proxy(this.mousemove,this)),this.over=!0,this.currentPageX=b.pageX,this.currentPageY=b.pageY,this.currentEl=b.target,!this.tooltip&&this.displayTooltips&&(this.tooltip=new v(this.options),this.tooltip.updatePosition(b.pageX,b.pageY)),this.updateDisplay()},mouseleave:function(){d(a.body).unbind("mousemove.jqs");var b=this.splist,c=b.length,e=!1,f,g;this.over=!1,this.currentEl=null,this.tooltip&&(this.tooltip.remove(),this.tooltip=null);for(g=0;g<c;g++)f=b[g],f.clearRegionHighlight()&&(e=!0);e&&this.canvas.render()},mousemove:function(a){this.currentPageX=a.pageX,this.currentPageY=a.pageY,this.currentEl=a.target,this.tooltip&&this.tooltip.updatePosition(a.pageX,a.pageY),this.updateDisplay()},updateDisplay:function(){var a=this.splist,b=a.length,c=!1,e=this.$canvas.offset(),f=this.currentPageX-e.left,g=this.currentPageY-e.top,h,i,j,k,l;if(!this.over)return;for(j=0;j<b;j++)i=a[j],k=i.setRegionHighlight(this.currentEl,f,g),k&&(c=!0);if(c){l=d.Event("sparklineRegionChange"),l.sparklines=this.splist,this.$el.trigger(l);if(this.tooltip){h="";for(j=0;j<b;j++)i=a[j],h+=i.getCurrentRegionTooltip();this.tooltip.setContent(h)}this.disableHighlight||this.canvas.render()}k===null&&this.mouseleave()}}),v=g({sizeStyle:"position: static !important;display: block !important;visibility: hidden !important;float: left !important;",init:function(b){var c=b.get("tooltipClassname","jqstooltip"),e=this.sizeStyle,f;this.container=b.get("tooltipContainer")||a.body,this.tooltipOffsetX=b.get("tooltipOffsetX",10),this.tooltipOffsetY=b.get("tooltipOffsetY",12),d("#jqssizetip").remove(),d("#jqstooltip").remove(),this.sizetip=d("<div/>",{id:"jqssizetip",style:e,"class":c}),this.tooltip=d("<div/>",{id:"jqstooltip","class":c}).appendTo(this.container),f=this.tooltip.offset(),this.offsetLeft=f.left,this.offsetTop=f.top,this.hidden=!0,d(window).unbind("resize.jqs scroll.jqs"),d(window).bind("resize.jqs scroll.jqs",d.proxy(this.updateWindowDims,this)),this.updateWindowDims()},updateWindowDims:function(){this.scrollTop=d(window).scrollTop(),this.scrollLeft=d(window).scrollLeft(),this.scrollRight=this.scrollLeft+d(window).width(),this.updatePosition()},getSize:function(a){this.sizetip.html(a).appendTo(this.container),this.width=this.sizetip.width()+1,this.height=this.sizetip.height(),this.sizetip.remove()},setContent:function(a){if(!a){this.tooltip.css("visibility","hidden"),this.hidden=!0;return}this.getSize(a),this.tooltip.html(a).css({width:this.width,height:this.height,visibility:"visible"}),this.hidden&&(this.hidden=!1,this.updatePosition())},updatePosition:function(a,b){if(a===c){if(this.mousex===c)return;a=this.mousex-this.offsetLeft,b=this.mousey-this.offsetTop}else this.mousex=a-=this.offsetLeft,this.mousey=b-=this.offsetTop;if(!this.height||!this.width||this.hidden)return;b-=this.height+this.tooltipOffsetY,a+=this.tooltipOffsetX,b<this.scrollTop&&(b=this.scrollTop),a<this.scrollLeft?a=this.scrollLeft:a+this.width>this.scrollRight&&(a=this.scrollRight-this.width),this.tooltip.css({left:a,top:b})},remove:function(){this.tooltip.remove(),this.sizetip.remove(),this.sizetip=this.tooltip=c,d(window).unbind("resize.jqs scroll.jqs")}}),F=function(){q(E)},d(F),K=[],d.fn.sparkline=function(b,e){return this.each(function(){var f=new d.fn.sparkline.options(this,e),g=d(this),h,i;h=function(){var e,h,i,j,k,l,m;if(b==="html"||b===c){m=this.getAttribute(f.get("tagValuesAttribute"));if(m===c||m===null)m=g.html();e=m.replace(/(^\s*<!--)|(-->\s*$)|\s+/g,"").split(",")}else e=b;h=f.get("width")==="auto"?e.length*f.get("defaultPixelsPerValue"):f.get("width");if(f.get("height")==="auto"){if(!f.get("composite")||!d.data(this,"_jqs_vcanvas"))j=a.createElement("span"),j.innerHTML="a",g.html(j),i=d(j).innerHeight()||d(j).height(),d(j).remove(),j=null}else i=f.get("height");f.get("disableInteraction")?k=!1:(k=d.data(this,"_jqs_mhandler"),k?f.get("composite")||k.reset():(k=new u(this,f),d.data(this,"_jqs_mhandler",k)));if(f.get("composite")&&!d.data(this,"_jqs_vcanvas")){d.data(this,"_jqs_errnotify")||(alert("Attempted to attach a composite sparkline to an element with no existing sparkline"),d.data(this,"_jqs_errnotify",!0));return}l=new(d.fn.sparkline[f.get("type")])(this,e,f,h,i),l.render(),k&&k.registerSparkline(l)};if(d(this).html()&&!f.get("disableHiddenCheck")&&d(this).is(":hidden")||!d(this).parents("body").length){if(!f.get("composite")&&d.data(this,"_jqs_pending"))for(i=K.length;i;i--)K[i-1][0]==this&&K.splice(i-1,1);K.push([this,h]),d.data(this,"_jqs_pending",!0)}else h.call(this)})},d.fn.sparkline.defaults=f(),d.sparkline_display_visible=function(){var a,b,c,e=[];for(b=0,c=K.length;b<c;b++)a=K[b][0],d(a).is(":visible")&&!d(a).parents().is(":hidden")?(K[b][1].call(a),d.data(K[b][0],"_jqs_pending",!1),e.push(b)):!d(a).closest("html").length&&!d.data(a,"_jqs_pending")&&(d.data(K[b][0],"_jqs_pending",!1),e.push(b));for(b=e.length;b;b--)K.splice(e[b-1],1)},d.fn.sparkline.options=g({init:function(a,b){var c,f,g,h;this.userOptions=b=b||{},this.tag=a,this.tagValCache={},f=d.fn.sparkline.defaults,g=f.common,this.tagOptionsPrefix=b.enableTagOptions&&(b.tagOptionsPrefix||g.tagOptionsPrefix),h=this.getTagSetting("type"),h===e?c=f[b.type||g.type]:c=f[h],this.mergedOptions=d.extend({},g,c,b)},getTagSetting:function(a){var b=this.tagOptionsPrefix,d,f,g,h;if(b===!1||b===c)return e;if(this.tagValCache.hasOwnProperty(a))d=this.tagValCache.key;else{d=this.tag.getAttribute(b+a);if(d===c||d===null)d=e;else if(d.substr(0,1)==="["){d=d.substr(1,d.length-2).split(",");for(f=d.length;f--;)d[f]=k(d[f].replace(/(^\s*)|(\s*$)/g,""))}else if(d.substr(0,1)==="{"){g=d.substr(1,d.length-2).split(","),d={};for(f=g.length;f--;)h=g[f].split(":",2),d[h[0].replace(/(^\s*)|(\s*$)/g,"")]=k(h[1].replace(/(^\s*)|(\s*$)/g,""))}else d=k(d);this.tagValCache.key=d}return d},get:function(a,b){var d=this.getTagSetting(a),f;return d!==e?d:(f=this.mergedOptions[a])===c?b:f}}),d.fn.sparkline._base=g({disabled:!1,init:function(a,b,e,f,g){this.el=a,this.$el=d(a),this.values=b,this.options=e,this.width=f,this.height=g,this.currentRegion=c},initTarget:function(){var a=!this.options.get("disableInteraction");(this.target=this.$el.simpledraw(this.width,this.height,this.options.get("composite"),a))?(this.canvasWidth=this.target.pixelWidth,this.canvasHeight=this.target.pixelHeight):this.disabled=!0},render:function(){return this.disabled?(this.el.innerHTML="",!1):!0},getRegion:function(a,b){},setRegionHighlight:function(a,b,d){var e=this.currentRegion,f=!this.options.get("disableHighlight"),g;return b>this.canvasWidth||d>this.canvasHeight||b<0||d<0?null:(g=this.getRegion(a,b,d),e!==g?(e!==c&&f&&this.removeHighlight(),this.currentRegion=g,g!==c&&f&&this.renderHighlight(),!0):!1)},clearRegionHighlight:function(){return this.currentRegion!==c?(this.removeHighlight(),this.currentRegion=c,!0):!1},renderHighlight:function(){this.changeHighlight(!0)},removeHighlight:function(){this.changeHighlight(!1)},changeHighlight:function(a){},getCurrentRegionTooltip:function(){var a=this.options,b="",e=[],f,g,i,j,k,l,m,n,o,p,q,r,s,t;if(this.currentRegion===c)return"";f=this.getCurrentRegionFields(),q=a.get("tooltipFormatter");if(q)return q(this,a,f);a.get("tooltipChartTitle")&&(b+='<div class="jqs jqstitle">'+a.get("tooltipChartTitle")+"</div>\n"),g=this.options.get("tooltipFormat");if(!g)return"";d.isArray(g)||(g=[g]),d.isArray(f)||(f=[f]),m=this.options.get("tooltipFormatFieldlist"),n=this.options.get("tooltipFormatFieldlistKey");if(m&&n){o=[];for(l=f.length;l--;)p=f[l][n],(t=d.inArray(p,m))!=-1&&(o[t]=f[l]);f=o}i=g.length,s=f.length;for(l=0;l<i;l++){r=g[l],typeof r=="string"&&(r=new h(r)),j=r.fclass||"jqsfield";for(t=0;t<s;t++)if(!f[t].isNull||!a.get("tooltipSkipNull"))d.extend(f[t],{prefix:a.get("tooltipPrefix"),suffix:a.get("tooltipSuffix")}),k=r.render(f[t],a.get("tooltipValueLookups"),a),e.push('<div class="'+j+'">'+k+"</div>")}return e.length?b+e.join("\n"):""},getCurrentRegionFields:function(){},calcHighlightColor:function(a,c){var d=c.get("highlightColor"),e=c.get("highlightLighten"),f,g,h,j;if(d)return d;if(e){f=/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(a)||/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(a);if(f){h=[],g=a.length===4?16:1;for(j=0;j<3;j++)h[j]=i(b.round(parseInt(f[j+1],16)*g*e),0,255);return"rgb("+h.join(",")+")"}}return a}}),w={changeHighlight:function(a){var b=this.currentRegion,c=this.target,e=this.regionShapes[b],f;e&&(f=this.renderRegion(b,a),d.isArray(f)||d.isArray(e)?(c.replaceWithShapes(e,f),this.regionShapes[b]=d.map(f,function(a){return a.id})):(c.replaceWithShape(e,f),this.regionShapes[b]=f.id))},render:function(){var a=this.values,b=this.target,c=this.regionShapes,e,f,g,h;if(!this.cls._super.render.call(this))return;for(g=a.length;g--;){e=this.renderRegion(g);if(e)if(d.isArray(e)){f=[];for(h=e.length;h--;)e[h].append(),f.push(e[h].id);c[g]=f}else e.append(),c[g]=e.id;else c[g]=null}b.render()}},d.fn.sparkline.line=x=g(d.fn.sparkline._base,{type:"line",init:function(a,b,c,d,e){x._super.init.call(this,a,b,c,d,e),this.vertices=[],this.regionMap=[],this.xvalues=[],this.yvalues=[],this.yminmax=[],this.hightlightSpotId=null,this.lastShapeId=null,this.initTarget()},getRegion:function(a,b,d){var e,f=this.regionMap;for(e=f.length;e--;)if(f[e]!==null&&b>=f[e][0]&&b<=f[e][1])return f[e][2];return c},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.yvalues[a]===null,x:this.xvalues[a],y:this.yvalues[a],color:this.options.get("lineColor"),fillColor:this.options.get("fillColor"),offset:a}},renderHighlight:function(){var a=this.currentRegion,b=this.target,d=this.vertices[a],e=this.options,f=e.get("spotRadius"),g=e.get("highlightSpotColor"),h=e.get("highlightLineColor"),i,j;if(!d)return;f&&g&&(i=b.drawCircle(d[0],d[1],f,c,g),this.highlightSpotId=i.id,b.insertAfterShape(this.lastShapeId,i)),h&&(j=b.drawLine(d[0],this.canvasTop,d[0],this.canvasTop+this.canvasHeight,h),this.highlightLineId=j.id,b.insertAfterShape(this.lastShapeId,j))},removeHighlight:function(){var a=this.target;this.highlightSpotId&&(a.removeShapeId(this.highlightSpotId),this.highlightSpotId=null),this.highlightLineId&&(a.removeShapeId(this.highlightLineId),this.highlightLineId=null)},scanValues:function(){var a=this.values,c=a.length,d=this.xvalues,e=this.yvalues,f=this.yminmax,g,h,i,j,k;for(g=0;g<c;g++)h=a[g],i=typeof a[g]=="string",j=typeof a[g]=="object"&&a[g]instanceof Array,k=i&&a[g].split(":"),i&&k.length===2?(d.push(Number(k[0])),e.push(Number(k[1])),f.push(Number(k[1]))):j?(d.push(h[0]),e.push(h[1]),f.push(h[1])):(d.push(g),a[g]===null||a[g]==="null"?e.push(null):(e.push(Number(h)),f.push(Number(h))));this.options.get("xvalues")&&(d=this.options.get("xvalues")),this.maxy=this.maxyorg=b.max.apply(b,f),this.miny=this.minyorg=b.min.apply(b,f),this.maxx=b.max.apply(b,d),this.minx=b.min.apply(b,d),this.xvalues=d,this.yvalues=e,this.yminmax=f},processRangeOptions:function(){var a=this.options,b=a.get("normalRangeMin"),d=a.get("normalRangeMax");b!==c&&(b<this.miny&&(this.miny=b),d>this.maxy&&(this.maxy=d)),a.get("chartRangeMin")!==c&&(a.get("chartRangeClip")||a.get("chartRangeMin")<this.miny)&&(this.miny=a.get("chartRangeMin")),a.get("chartRangeMax")!==c&&(a.get("chartRangeClip")||a.get("chartRangeMax")>this.maxy)&&(this.maxy=a.get("chartRangeMax")),a.get("chartRangeMinX")!==c&&(a.get("chartRangeClipX")||a.get("chartRangeMinX")<this.minx)&&(this.minx=a.get("chartRangeMinX")),a.get("chartRangeMaxX")!==c&&(a.get("chartRangeClipX")||a.get("chartRangeMaxX")>this.maxx)&&(this.maxx=a.get("chartRangeMaxX"))},drawNormalRange:function(a,d,e,f,g){var h=this.options.get("normalRangeMin"),i=this.options.get("normalRangeMax"),j=d+b.round(e-e*((i-this.miny)/g)),k=b.round(e*(i-h)/g);this.target.drawRect(a,j,f,k,c,this.options.get("normalRangeColor")).append()},render:function(){var a=this.options,e=this.target,f=this.canvasWidth,g=this.canvasHeight,h=this.vertices,i=a.get("spotRadius"),j=this.regionMap,k,l,m,n,o,p,q,r,s,u,v,w,y,z,A,B,C,D,E,F,G,H,I,J,K;if(!x._super.render.call(this))return;this.scanValues(),this.processRangeOptions(),I=this.xvalues,J=this.yvalues;if(!this.yminmax.length||this.yvalues.length<2)return;n=o=0,k=this.maxx-this.minx===0?1:this.maxx-this.minx,l=this.maxy-this.miny===0?1:this.maxy-this.miny,m=this.yvalues.length-1,i&&(f<i*4||g<i*4)&&(i=0);if(i){G=a.get("highlightSpotColor")&&!a.get("disableInteraction");if(G||a.get("minSpotColor")||a.get("spotColor")&&J[m]===this.miny)g-=b.ceil(i);if(G||a.get("maxSpotColor")||a.get("spotColor")&&J[m]===this.maxy)g-=b.ceil(i),n+=b.ceil(i);if(G||(a.get("minSpotColor")||a.get("maxSpotColor"))&&(J[0]===this.miny||J[0]===this.maxy))o+=b.ceil(i),f-=b.ceil(i);if(G||a.get("spotColor")||a.get("minSpotColor")||a.get("maxSpotColor")&&(J[m]===this.miny||J[m]===this.maxy))f-=b.ceil(i)}g--,a.get("normalRangeMin")!==c&&!a.get("drawNormalOnTop")&&this.drawNormalRange(o,n,g,f,l),q=[],r=[q],z=A=null,B=J.length;for(K=0;K<B;K++)s=I[K],v=I[K+1],u=J[K],w=o+b.round((s-this.minx)*(f/k)),y=K<B-1?o+b.round((v-this.minx)*(f/k)):f,A=w+(y-w)/2,j[K]=[z||0,A,K],z=A,u===null?K&&(J[K-1]!==null&&(q=[],r.push(q)),h.push(null)):(u<this.miny&&(u=this.miny),u>this.maxy&&(u=this.maxy),q.length||q.push([w,n+g]),p=[w,n+b.round(g-g*((u-this.miny)/l))],q.push(p),h.push(p));C=[],D=[],E=r.length;for(K=0;K<E;K++)q=r[K],q.length&&(a.get("fillColor")&&(q.push([q[q.length-1][0],n+g]),D.push(q.slice(0)),q.pop()),q.length>2&&(q[0]=[q[0][0],q[1][1]]),C.push(q));E=D.length;for(K=0;K<E;K++)e.drawShape(D[K],a.get("fillColor"),a.get("fillColor")).append();a.get("normalRangeMin")!==c&&a.get("drawNormalOnTop")&&this.drawNormalRange(o,n,g,f,l),E=C.length;for(K=0;K<E;K++)e.drawShape(C[K],a.get("lineColor"),c,a.get("lineWidth")).append();if(i&&a.get("valueSpots")){F=a.get("valueSpots"),F.get===c&&(F=new t(F));for(K=0;K<B;K++)H=F.get(J[K]),H&&e.drawCircle(o+b.round((I[K]-this.minx)*(f/k)),n+b.round(g-g*((J[K]-this.miny)/l)),i,c,H).append()}i&&a.get("spotColor")&&J[m]!==null&&e.drawCircle(o+b.round((I[I.length-1]-this.minx)*(f/k)),n+b.round(g-g*((J[m]-this.miny)/l)),i,c,a.get("spotColor")).append(),this.maxy!==this.minyorg&&(i&&a.get("minSpotColor")&&(s=I[d.inArray(this.minyorg,J)],e.drawCircle(o+b.round((s-this.minx)*(f/k)),n+b.round(g-g*((this.minyorg-this.miny)/l)),i,c,a.get("minSpotColor")).append()),i&&a.get("maxSpotColor")&&(s=I[d.inArray(this.maxyorg,J)],e.drawCircle(o+b.round((s-this.minx)*(f/k)),n+b.round(g-g*((this.maxyorg-this.miny)/l)),i,c,a.get("maxSpotColor")).append())),this.lastShapeId=e.getLastShapeId(),this.canvasTop=n,e.render()}}),d.fn.sparkline.bar=y=g(d.fn.sparkline._base,w,{type:"bar",init:function(a,e,f,g,h){var j=parseInt(f.get("barWidth"),10),n=parseInt(f.get("barSpacing"),10),o=f.get("chartRangeMin"),p=f.get("chartRangeMax"),q=f.get("chartRangeClip"),r=Infinity,s=-Infinity,u,v,w,x,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R;y._super.init.call(this,a,e,f,g,h);for(A=0,B=e.length;A<B;A++){O=e[A],u=typeof O=="string"&&O.indexOf(":")>-1;if(u||d.isArray(O))J=!0,u&&(O=e[A]=l(O.split(":"))),O=m(O,null),v=b.min.apply(b,O),w=b.max.apply(b,O),v<r&&(r=v),w>s&&(s=w)}this.stacked=J,this.regionShapes={},this.barWidth=j,this.barSpacing=n,this.totalBarWidth=j+n,this.width=g=e.length*j+(e.length-1)*n,this.initTarget(),q&&(H=o===c?-Infinity:o,I=p===c?Infinity:p),z=[],x=J?[]:z;var S=[],T=[];for(A=0,B=e.length;A<B;A++)if(J){K=e[A],e[A]=N=[],S[A]=0,x[A]=T[A]=0;for(L=0,M=K.length;L<M;L++)O=N[L]=q?i(K[L],H,I):K[L],O!==null&&(O>0&&(S[A]+=O),r<0&&s>0?O<0?T[A]+=b.abs(O):x[A]+=O:x[A]+=b.abs(O-(O<0?s:r)),z.push(O))}else O=q?i(e[A],H,I):e[A],O=e[A]=k(O),O!==null&&z.push(O);this.max=G=b.max.apply(b,z),this.min=F=b.min.apply(b,z),this.stackMax=s=J?b.max.apply(b,S):G,this.stackMin=r=J?b.min.apply(b,z):F,f.get("chartRangeMin")!==c&&(f.get("chartRangeClip")||f.get("chartRangeMin")<F)&&(F=f.get("chartRangeMin")),f.get("chartRangeMax")!==c&&(f.get("chartRangeClip")||f.get("chartRangeMax")>G)&&(G=f.get("chartRangeMax")),this.zeroAxis=D=f.get("zeroAxis",!0),F<=0&&G>=0&&D?E=0:D==0?E=F:F>0?E=F:E=G,this.xaxisOffset=E,C=J?b.max.apply(b,x)+b.max.apply(b,T):G-F,this.canvasHeightEf=D&&F<0?this.canvasHeight-2:this.canvasHeight-1,F<E?(Q=J&&G>=0?s:G,P=(Q-E)/C*this.canvasHeight,P!==b.ceil(P)&&(this.canvasHeightEf-=2,P=b.ceil(P))):P=this.canvasHeight,this.yoffset=P,d.isArray(f.get("colorMap"))?(this.colorMapByIndex=f.get("colorMap"),this.colorMapByValue=null):(this.colorMapByIndex=null,this.colorMapByValue=f.get("colorMap"),this.colorMapByValue&&this.colorMapByValue.get===c&&(this.colorMapByValue=new t(this.colorMapByValue))),this.range=C},getRegion:function(a,d,e){var f=b.floor(d/this.totalBarWidth);return f<0||f>=this.values.length?c:f},getCurrentRegionFields:function(){var a=this.currentRegion,b=r(this.values[a]),c=[],d,e;for(e=b.length;e--;)d=b[e],c.push({isNull:d===null,value:d,color:this.calcColor(e,d,a),offset:a});return c},calcColor:function(a,b,e){var f=this.colorMapByIndex,g=this.colorMapByValue,h=this.options,i,j;return this.stacked?i=h.get("stackedBarColor"):i=b<0?h.get("negBarColor"):h.get("barColor"),b===0&&h.get("zeroColor")!==c&&(i=h.get("zeroColor")),g&&(j=g.get(b))?i=j:f&&f.length>e&&(i=f[e]),d.isArray(i)?i[a%i.length]:i},renderRegion:function(a,e){var f=this.values[a],g=this.options,h=this.xaxisOffset,i=[],j=this.range,k=this.stacked,l=this.target,m=a*this.totalBarWidth,n=this.canvasHeightEf,p=this.yoffset,q,r,s,t,u,v,w,x,y,z;f=d.isArray(f)?f:[f],w=f.length,x=f[0],t=o(null,f),z=o(h,f,!0);if(t)return g.get("nullColor")?(s=e?g.get("nullColor"):this.calcHighlightColor(g.get("nullColor"),g),q=p>0?p-1:p,l.drawRect(m,q,this.barWidth-1,0,s,s)):c;u=p;for(v=0;v<w;v++){x=f[v];if(k&&x===h){if(!z||y)continue;y=!0}j>0?r=b.floor(n*(b.abs(x-h)/j))+1:r=1,x<h||x===h&&p===0?(q=u,u+=r):(q=p-r,p-=r),s=this.calcColor(v,x,a),e&&(s=this.calcHighlightColor(s,g)),i.push(l.drawRect(m,q,this.barWidth-1,r-1,s,s))}return i.length===1?i[0]:i}}),d.fn.sparkline.tristate=z=g(d.fn.sparkline._base,w,{type:"tristate",init:function(a,b,e,f,g){var h=parseInt(e.get("barWidth"),10),i=parseInt(e.get("barSpacing"),10);z._super.init.call(this,a,b,e,f,g),this.regionShapes={},this.barWidth=h,this.barSpacing=i,this.totalBarWidth=h+i,this.values=d.map(b,Number),this.width=f=b.length*h+(b.length-1)*i,d.isArray(e.get("colorMap"))?(this.colorMapByIndex=e.get("colorMap"),this.colorMapByValue=null):(this.colorMapByIndex=null,this.colorMapByValue=e.get("colorMap"),this.colorMapByValue&&this.colorMapByValue.get===c&&(this.colorMapByValue=new t(this.colorMapByValue))),this.initTarget()},getRegion:function(a,c,d){return b.floor(c/this.totalBarWidth)},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.values[a]===c,value:this.values[a],color:this.calcColor(this.values[a],a),offset:a}},calcColor:function(a,b){var c=this.values,d=this.options,e=this.colorMapByIndex,f=this.colorMapByValue,g,h;return f&&(h=f.get(a))?g=h:e&&e.length>b?g=e[b]:c[b]<0?g=d.get("negBarColor"):c[b]>0?g=d.get("posBarColor"):g=d.get("zeroBarColor"),g},renderRegion:function(a,c){var d=this.values,e=this.options,f=this.target,g,h,i,j,k,l;g=f.pixelHeight,i=b.round(g/2),j=a*this.totalBarWidth,d[a]<0?(k=i,h=i-1):d[a]>0?(k=0,h=i-1):(k=i-1,h=2),l=this.calcColor(d[a],a);if(l===null)return;return c&&(l=this.calcHighlightColor(l,e)),f.drawRect(j,k,this.barWidth-1,h-1,l,l)}}),d.fn.sparkline.discrete=A=g(d.fn.sparkline._base,w,{type:"discrete",init:function(a,e,f,g,h){A._super.init.call(this,a,e,f,g,h),this.regionShapes={},this.values=e=d.map(e,Number),this.min=b.min.apply(b,e),this.max=b.max.apply(b,e),this.range=this.max-this.min,this.width=g=f.get("width")==="auto"?e.length*2:this.width,this.interval=b.floor(g/e.length),this.itemWidth=g/e.length,f.get("chartRangeMin")!==c&&(f.get("chartRangeClip")||f.get("chartRangeMin")<this.min)&&(this.min=f.get("chartRangeMin")),f.get("chartRangeMax")!==c&&(f.get("chartRangeClip")||f.get("chartRangeMax")>this.max)&&(this.max=f.get("chartRangeMax")),this.initTarget(),this.target&&(this.lineHeight=f.get("lineHeight")==="auto"?b.round(this.canvasHeight*.3):f.get("lineHeight"))},getRegion:function(a,c,d){return b.floor(c/this.itemWidth)},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.values[a]===c,value:this.values[a],offset:a}},renderRegion:function(a,c){var d=this.values,e=this.options,f=this.min,g=this.max,h=this.range,j=this.interval,k=this.target,l=this.canvasHeight,m=this.lineHeight,n=l-m,o,p,q,r;return p=i(d[a],f,g),r=a*j,o=b.round(n-n*((p-f)/h)),q=e.get("thresholdColor")&&p<e.get("thresholdValue")?e.get("thresholdColor"):e.get("lineColor"),c&&(q=this.calcHighlightColor(q,e)),k.drawLine(r,o,r,o+m,q)}}),d.fn.sparkline.bullet=B=g(d.fn.sparkline._base,{type:"bullet",init:function(a,d,e,f,g){var h,i,j;B._super.init.call(this,a,d,e,f,g),this.values=d=l(d),j=d.slice(),j[0]=j[0]===null?j[2]:j[0],j[1]=d[1]===null?j[2]:j[1],h=b.min.apply(b,d),i=b.max.apply(b,d),e.get("base")===c?h=h<0?h:0:h=e.get("base"),this.min=h,this.max=i,this.range=i-h,this.shapes={},this.valueShapes={},this.regiondata={},this.width=f=e.get("width")==="auto"?"4.0em":f,this.target=this.$el.simpledraw(f,g,e.get("composite")),d.length||(this.disabled=!0),this.initTarget()},getRegion:function(a,b,d){var e=this.target.getShapeAt(a,b,d);return e!==c&&this.shapes[e]!==c?this.shapes[e]:c},getCurrentRegionFields:function(){var a=this.currentRegion;return{fieldkey:a.substr(0,1),value:this.values[a.substr(1)],region:a}},changeHighlight:function(a){var b=this.currentRegion,c=this.valueShapes[b],d;delete this.shapes[c];switch(b.substr(0,1)){case"r":d=this.renderRange(b.substr(1),a);break;case"p":d=this.renderPerformance(a);break;case"t":d=this.renderTarget(a)}this.valueShapes[b]=d.id,this.shapes[d.id]=b,this.target.replaceWithShape(c,d)},renderRange:function(a,c){var d=this.values[a],e=b.round(this.canvasWidth*((d-this.min)/this.range)),f=this.options.get("rangeColors")[a-2];return c&&(f=this.calcHighlightColor(f,this.options)),this.target.drawRect(0,0,e-1,this.canvasHeight-1,f,f)},renderPerformance:function(a){var c=this.values[1],d=b.round(this.canvasWidth*((c-this.min)/this.range)),e=this.options.get("performanceColor");return a&&(e=this.calcHighlightColor(e,this.options)),this.target.drawRect(0,b.round(this.canvasHeight*.3),d-1,b.round(this.canvasHeight*.4)-1,e,e)},renderTarget:function(a){var c=this.values[0],d=b.round(this.canvasWidth*((c-this.min)/this.range)-this.options.get("targetWidth")/2),e=b.round(this.canvasHeight*.1),f=this.canvasHeight-e*2,g=this.options.get("targetColor");return a&&(g=this.calcHighlightColor(g,this.options)),this.target.drawRect(d,e,this.options.get("targetWidth")-1,f-1,g,g)},render:function(){var a=this.values.length,b=this.target,c,d;if(!B._super.render.call(this))return;for(c=2;c<a;c++)d=this.renderRange(c).append(),this.shapes[d.id]="r"+c,this.valueShapes["r"+c]=d.id;this.values[1]!==null&&(d=this.renderPerformance().append(),this.shapes[d.id]="p1",this.valueShapes.p1=d.id),this.values[0]!==null&&(d=this.renderTarget().append(),this.shapes[d.id]="t0",this.valueShapes.t0=d.id),b.render()}}),d.fn.sparkline.pie=C=g(d.fn.sparkline._base,{type:"pie",init:function(a,c,e,f,g){var h=0,i;C._super.init.call(this,a,c,e,f,g),this.shapes={},this.valueShapes={},this.values=c=d.map(c,Number),e.get("width")==="auto"&&(this.width=this.height);if(c.length>0)for(i=c.length;i--;)h+=c[i];this.total=h,this.initTarget(),this.radius=b.floor(b.min(this.canvasWidth,this.canvasHeight)/2)},getRegion:function(a,b,d){var e=this.target.getShapeAt(a,b,d);return e!==c&&this.shapes[e]!==c?this.shapes[e]:c},getCurrentRegionFields:function(){var a=this.currentRegion;return{isNull:this.values[a]===c,value:this.values[a],percent:this.values[a]/this.total*100,color:this.options.get("sliceColors")[a%this.options.get("sliceColors").length],offset:a}},changeHighlight:function(a){var b=this.currentRegion,c=this.renderSlice(b,a),d=this.valueShapes[b];delete this.shapes[d],this.target.replaceWithShape(d,c),this.valueShapes[b]=c.id,this.shapes[c.id]=b},renderSlice:function(a,d){var e=this.target,f=this.options,g=this.radius,h=f.get("borderWidth"),i=f.get("offset"),j=2*b.PI,k=this.values,l=this.total,m=i?2*b.PI*(i/360):0,n,o,p,q,r;q=k.length;for(p=0;p<q;p++){n=m,o=m,l>0&&(o=m+j*(k[p]/l));if(a===p)return r=f.get("sliceColors")[p%f.get("sliceColors").length],d&&(r=this.calcHighlightColor(r,f)),e.drawPieSlice(g,g,g-h,n,o,c,r);m=o}},render:function(){var a=this.target,d=this.values,e=this.options,f=this.radius,g=e.get("borderWidth"),h,i;if(!C._super.render.call(this))return;g&&a.drawCircle(f,f,b.floor(f-g/2),e.get("borderColor"),c,g).append();for(i=d.length;i--;)d[i]&&(h=this.renderSlice(i).append(),this.valueShapes[i]=h.id,this.shapes[h.id]=i);a.render()}}),d.fn.sparkline.box=D=g(d.fn.sparkline._base,{type:"box",init:function(a,b,c,e,f){D._super.init.call(this,a,b,c,e,f),this.values=d.map(b,Number),this.width=c.get("width")==="auto"?"4.0em":e,this.initTarget(),this.values.length||(this.disabled=1)},getRegion:function(){return 1},getCurrentRegionFields:function(){var a=[{field:"lq",value:this.quartiles[0]},{field:"med",value:this.quartiles
+[1]},{field:"uq",value:this.quartiles[2]}];return this.loutlier!==c&&a.push({field:"lo",value:this.loutlier}),this.routlier!==c&&a.push({field:"ro",value:this.routlier}),this.lwhisker!==c&&a.push({field:"lw",value:this.lwhisker}),this.rwhisker!==c&&a.push({field:"rw",value:this.rwhisker}),a},render:function(){var a=this.target,d=this.values,e=d.length,f=this.options,g=this.canvasWidth,h=this.canvasHeight,i=f.get("chartRangeMin")===c?b.min.apply(b,d):f.get("chartRangeMin"),k=f.get("chartRangeMax")===c?b.max.apply(b,d):f.get("chartRangeMax"),l=0,m,n,o,p,q,r,s,t,u,v,w;if(!D._super.render.call(this))return;if(f.get("raw"))f.get("showOutliers")&&d.length>5?(n=d[0],m=d[1],p=d[2],q=d[3],r=d[4],s=d[5],t=d[6]):(m=d[0],p=d[1],q=d[2],r=d[3],s=d[4]);else{d.sort(function(a,b){return a-b}),p=j(d,1),q=j(d,2),r=j(d,3),o=r-p;if(f.get("showOutliers")){m=s=c;for(u=0;u<e;u++)m===c&&d[u]>p-o*f.get("outlierIQR")&&(m=d[u]),d[u]<r+o*f.get("outlierIQR")&&(s=d[u]);n=d[0],t=d[e-1]}else m=d[0],s=d[e-1]}this.quartiles=[p,q,r],this.lwhisker=m,this.rwhisker=s,this.loutlier=n,this.routlier=t,w=g/(k-i+1),f.get("showOutliers")&&(l=b.ceil(f.get("spotRadius")),g-=2*b.ceil(f.get("spotRadius")),w=g/(k-i+1),n<m&&a.drawCircle((n-i)*w+l,h/2,f.get("spotRadius"),f.get("outlierLineColor"),f.get("outlierFillColor")).append(),t>s&&a.drawCircle((t-i)*w+l,h/2,f.get("spotRadius"),f.get("outlierLineColor"),f.get("outlierFillColor")).append()),a.drawRect(b.round((p-i)*w+l),b.round(h*.1),b.round((r-p)*w),b.round(h*.8),f.get("boxLineColor"),f.get("boxFillColor")).append(),a.drawLine(b.round((m-i)*w+l),b.round(h/2),b.round((p-i)*w+l),b.round(h/2),f.get("lineColor")).append(),a.drawLine(b.round((m-i)*w+l),b.round(h/4),b.round((m-i)*w+l),b.round(h-h/4),f.get("whiskerColor")).append(),a.drawLine(b.round((s-i)*w+l),b.round(h/2),b.round((r-i)*w+l),b.round(h/2),f.get("lineColor")).append(),a.drawLine(b.round((s-i)*w+l),b.round(h/4),b.round((s-i)*w+l),b.round(h-h/4),f.get("whiskerColor")).append(),a.drawLine(b.round((q-i)*w+l),b.round(h*.1),b.round((q-i)*w+l),b.round(h*.9),f.get("medianColor")).append(),f.get("target")&&(v=b.ceil(f.get("spotRadius")),a.drawLine(b.round((f.get("target")-i)*w+l),b.round(h/2-v),b.round((f.get("target")-i)*w+l),b.round(h/2+v),f.get("targetColor")).append(),a.drawLine(b.round((f.get("target")-i)*w+l-v),b.round(h/2),b.round((f.get("target")-i)*w+l+v),b.round(h/2),f.get("targetColor")).append()),a.render()}}),G=g({init:function(a,b,c,d){this.target=a,this.id=b,this.type=c,this.args=d},append:function(){return this.target.appendShape(this),this}}),H=g({_pxregex:/(\d+)(px)?\s*$/i,init:function(a,b,c){if(!a)return;this.width=a,this.height=b,this.target=c,this.lastShapeId=null,c[0]&&(c=c[0]),d.data(c,"_jqs_vcanvas",this)},drawLine:function(a,b,c,d,e,f){return this.drawShape([[a,b],[c,d]],e,f)},drawShape:function(a,b,c,d){return this._genShape("Shape",[a,b,c,d])},drawCircle:function(a,b,c,d,e,f){return this._genShape("Circle",[a,b,c,d,e,f])},drawPieSlice:function(a,b,c,d,e,f,g){return this._genShape("PieSlice",[a,b,c,d,e,f,g])},drawRect:function(a,b,c,d,e,f){return this._genShape("Rect",[a,b,c,d,e,f])},getElement:function(){return this.canvas},getLastShapeId:function(){return this.lastShapeId},reset:function(){alert("reset not implemented")},_insert:function(a,b){d(b).html(a)},_calculatePixelDims:function(a,b,c){var e;e=this._pxregex.exec(b),e?this.pixelHeight=e[1]:this.pixelHeight=d(c).height(),e=this._pxregex.exec(a),e?this.pixelWidth=e[1]:this.pixelWidth=d(c).width()},_genShape:function(a,b){var c=L++;return b.unshift(c),new G(this,c,a,b)},appendShape:function(a){alert("appendShape not implemented")},replaceWithShape:function(a,b){alert("replaceWithShape not implemented")},insertAfterShape:function(a,b){alert("insertAfterShape not implemented")},removeShapeId:function(a){alert("removeShapeId not implemented")},getShapeAt:function(a,b,c){alert("getShapeAt not implemented")},render:function(){alert("render not implemented")}}),I=g(H,{init:function(b,e,f,g){I._super.init.call(this,b,e,f),this.canvas=a.createElement("canvas"),f[0]&&(f=f[0]),d.data(f,"_jqs_vcanvas",this),d(this.canvas).css({display:"inline-block",width:b,height:e,verticalAlign:"top"}),this._insert(this.canvas,f),this._calculatePixelDims(b,e,this.canvas),this.canvas.width=this.pixelWidth,this.canvas.height=this.pixelHeight,this.interact=g,this.shapes={},this.shapeseq=[],this.currentTargetShapeId=c,d(this.canvas).css({width:this.pixelWidth,height:this.pixelHeight})},_getContext:function(a,b,d){var e=this.canvas.getContext("2d");return a!==c&&(e.strokeStyle=a),e.lineWidth=d===c?1:d,b!==c&&(e.fillStyle=b),e},reset:function(){var a=this._getContext();a.clearRect(0,0,this.pixelWidth,this.pixelHeight),this.shapes={},this.shapeseq=[],this.currentTargetShapeId=c},_drawShape:function(a,b,d,e,f){var g=this._getContext(d,e,f),h,i;g.beginPath(),g.moveTo(b[0][0]+.5,b[0][1]+.5);for(h=1,i=b.length;h<i;h++)g.lineTo(b[h][0]+.5,b[h][1]+.5);d!==c&&g.stroke(),e!==c&&g.fill(),this.targetX!==c&&this.targetY!==c&&g.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=a)},_drawCircle:function(a,d,e,f,g,h,i){var j=this._getContext(g,h,i);j.beginPath(),j.arc(d,e,f,0,2*b.PI,!1),this.targetX!==c&&this.targetY!==c&&j.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=a),g!==c&&j.stroke(),h!==c&&j.fill()},_drawPieSlice:function(a,b,d,e,f,g,h,i){var j=this._getContext(h,i);j.beginPath(),j.moveTo(b,d),j.arc(b,d,e,f,g,!1),j.lineTo(b,d),j.closePath(),h!==c&&j.stroke(),i&&j.fill(),this.targetX!==c&&this.targetY!==c&&j.isPointInPath(this.targetX,this.targetY)&&(this.currentTargetShapeId=a)},_drawRect:function(a,b,c,d,e,f,g){return this._drawShape(a,[[b,c],[b+d,c],[b+d,c+e],[b,c+e],[b,c]],f,g)},appendShape:function(a){return this.shapes[a.id]=a,this.shapeseq.push(a.id),this.lastShapeId=a.id,a.id},replaceWithShape:function(a,b){var c=this.shapeseq,d;this.shapes[b.id]=b;for(d=c.length;d--;)c[d]==a&&(c[d]=b.id);delete this.shapes[a]},replaceWithShapes:function(a,b){var c=this.shapeseq,d={},e,f,g;for(f=a.length;f--;)d[a[f]]=!0;for(f=c.length;f--;)e=c[f],d[e]&&(c.splice(f,1),delete this.shapes[e],g=f);for(f=b.length;f--;)c.splice(g,0,b[f].id),this.shapes[b[f].id]=b[f]},insertAfterShape:function(a,b){var c=this.shapeseq,d;for(d=c.length;d--;)if(c[d]===a){c.splice(d+1,0,b.id),this.shapes[b.id]=b;return}},removeShapeId:function(a){var b=this.shapeseq,c;for(c=b.length;c--;)if(b[c]===a){b.splice(c,1);break}delete this.shapes[a]},getShapeAt:function(a,b,c){return this.targetX=b,this.targetY=c,this.render(),this.currentTargetShapeId},render:function(){var a=this.shapeseq,b=this.shapes,c=a.length,d=this._getContext(),e,f,g;d.clearRect(0,0,this.pixelWidth,this.pixelHeight);for(g=0;g<c;g++)e=a[g],f=b[e],this["_draw"+f.type].apply(this,f.args);this.interact||(this.shapes={},this.shapeseq=[])}}),J=g(H,{init:function(b,c,e){var f;J._super.init.call(this,b,c,e),e[0]&&(e=e[0]),d.data(e,"_jqs_vcanvas",this),this.canvas=a.createElement("span"),d(this.canvas).css({display:"inline-block",position:"relative",overflow:"hidden",width:b,height:c,margin:"0px",padding:"0px",verticalAlign:"top"}),this._insert(this.canvas,e),this._calculatePixelDims(b,c,this.canvas),this.canvas.width=this.pixelWidth,this.canvas.height=this.pixelHeight,f='<v:group coordorigin="0 0" coordsize="'+this.pixelWidth+" "+this.pixelHeight+'"'+' style="position:absolute;top:0;left:0;width:'+this.pixelWidth+"px;height="+this.pixelHeight+'px;"></v:group>',this.canvas.insertAdjacentHTML("beforeEnd",f),this.group=d(this.canvas).children()[0],this.rendered=!1,this.prerender=""},_drawShape:function(a,b,d,e,f){var g=[],h,i,j,k,l,m,n;for(n=0,m=b.length;n<m;n++)g[n]=""+b[n][0]+","+b[n][1];return h=g.splice(0,1),f=f===c?1:f,i=d===c?' stroked="false" ':' strokeWeight="'+f+'px" strokeColor="'+d+'" ',j=e===c?' filled="false"':' fillColor="'+e+'" filled="true" ',k=g[0]===g[g.length-1]?"x ":"",l='<v:shape coordorigin="0 0" coordsize="'+this.pixelWidth+" "+this.pixelHeight+'" '+' id="jqsshape'+a+'" '+i+j+' style="position:absolute;left:0px;top:0px;height:'+this.pixelHeight+"px;width:"+this.pixelWidth+'px;padding:0px;margin:0px;" '+' path="m '+h+" l "+g.join(", ")+" "+k+'e">'+" </v:shape>",l},_drawCircle:function(a,b,d,e,f,g,h){var i,j,k;return b-=e,d-=e,i=f===c?' stroked="false" ':' strokeWeight="'+h+'px" strokeColor="'+f+'" ',j=g===c?' filled="false"':' fillColor="'+g+'" filled="true" ',k='<v:oval  id="jqsshape'+a+'" '+i+j+' style="position:absolute;top:'+d+"px; left:"+b+"px; width:"+e*2+"px; height:"+e*2+'px"></v:oval>',k},_drawPieSlice:function(a,d,e,f,g,h,i,j){var k,l,m,n,o,p,q,r;if(g===h)return"";h-g===2*b.PI&&(g=0,h=2*b.PI),l=d+b.round(b.cos(g)*f),m=e+b.round(b.sin(g)*f),n=d+b.round(b.cos(h)*f),o=e+b.round(b.sin(h)*f);if(l===n&&m===o){if(h-g<b.PI)return"";l=n=d+f,m=o=e}return l===n&&m===o&&h-g<b.PI?"":(k=[d-f,e-f,d+f,e+f,l,m,n,o],p=i===c?' stroked="false" ':' strokeWeight="1px" strokeColor="'+i+'" ',q=j===c?' filled="false"':' fillColor="'+j+'" filled="true" ',r='<v:shape coordorigin="0 0" coordsize="'+this.pixelWidth+" "+this.pixelHeight+'" '+' id="jqsshape'+a+'" '+p+q+' style="position:absolute;left:0px;top:0px;height:'+this.pixelHeight+"px;width:"+this.pixelWidth+'px;padding:0px;margin:0px;" '+' path="m '+d+","+e+" wa "+k.join(", ")+' x e">'+" </v:shape>",r)},_drawRect:function(a,b,c,d,e,f,g){return this._drawShape(a,[[b,c],[b,c+e],[b+d,c+e],[b+d,c],[b,c]],f,g)},reset:function(){this.group.innerHTML=""},appendShape:function(a){var b=this["_draw"+a.type].apply(this,a.args);return this.rendered?this.group.insertAdjacentHTML("beforeEnd",b):this.prerender+=b,this.lastShapeId=a.id,a.id},replaceWithShape:function(a,b){var c=d("#jqsshape"+a),e=this["_draw"+b.type].apply(this,b.args);c[0].outerHTML=e},replaceWithShapes:function(a,b){var c=d("#jqsshape"+a[0]),e="",f=b.length,g;for(g=0;g<f;g++)e+=this["_draw"+b[g].type].apply(this,b[g].args);c[0].outerHTML=e;for(g=1;g<a.length;g++)d("#jqsshape"+a[g]).remove()},insertAfterShape:function(a,b){var c=d("#jqsshape"+a),e=this["_draw"+b.type].apply(this,b.args);c[0].insertAdjacentHTML("afterEnd",e)},removeShapeId:function(a){var b=d("#jqsshape"+a);this.group.removeChild(b[0])},getShapeAt:function(a,b,c){var d=a.id.substr(8);return d},render:function(){this.rendered||(this.group.innerHTML=this.prerender,this.rendered=!0)}})})})(document,Math);
\ No newline at end of file
diff --git a/public/assets/scripts/login-soft.js b/public/assets/scripts/login-soft.js
new file mode 100644
index 0000000..c33275f
--- /dev/null
+++ b/public/assets/scripts/login-soft.js
@@ -0,0 +1,249 @@
+var Login = function () {
+
+	var handleLogin = function() {
+		$('.login-form').validate({
+	            errorElement: 'span', //default input error message container
+	            errorClass: 'help-block', // default input error message class
+	            focusInvalid: false, // do not focus the last invalid input
+	            rules: {
+	                username: {
+	                    required: true
+	                },
+	                password: {
+	                    required: true
+	                },
+	                remember: {
+	                    required: false
+	                }
+	            },
+
+	            messages: {
+	                username: {
+	                    required: "Username is required."
+	                },
+	                password: {
+	                    required: "Password is required."
+	                }
+	            },
+
+	            invalidHandler: function (event, validator) { //display error alert on form submit
+	                $('.alert-danger', $('.login-form')).show();
+	            },
+
+	            highlight: function (element) { // hightlight error inputs
+	                $(element)
+	                    .closest('.form-group').addClass('has-error'); // set error class to the control group
+	            },
+
+	            success: function (label) {
+	                label.closest('.form-group').removeClass('has-error');
+	                label.remove();
+	            },
+
+	            errorPlacement: function (error, element) {
+	                error.insertAfter(element.closest('.input-icon'));
+	            },
+
+	            submitHandler: function (form) {
+	                form.submit();
+	            }
+	        });
+
+	        $('.login-form input').keypress(function (e) {
+	            if (e.which == 13) {
+	                if ($('.login-form').validate().form()) {
+	                    $('.login-form').submit();
+	                }
+	                return false;
+	            }
+	        });
+	}
+
+	var handleForgetPassword = function () {
+		$('.forget-form').validate({
+	            errorElement: 'span', //default input error message container
+	            errorClass: 'help-block', // default input error message class
+	            focusInvalid: false, // do not focus the last invalid input
+	            ignore: "",
+	            rules: {
+	                email: {
+	                    required: true,
+	                    email: true
+	                }
+	            },
+
+	            messages: {
+	                email: {
+	                    required: "Email is required."
+	                }
+	            },
+
+	            invalidHandler: function (event, validator) { //display error alert on form submit
+
+	            },
+
+	            highlight: function (element) { // hightlight error inputs
+	                $(element)
+	                    .closest('.form-group').addClass('has-error'); // set error class to the control group
+	            },
+
+	            success: function (label) {
+	                label.closest('.form-group').removeClass('has-error');
+	                label.remove();
+	            },
+
+	            errorPlacement: function (error, element) {
+	                error.insertAfter(element.closest('.input-icon'));
+	            },
+
+	            submitHandler: function (form) {
+	                form.submit();
+	            }
+	        });
+
+	        $('.forget-form input').keypress(function (e) {
+	            if (e.which == 13) {
+	                if ($('.forget-form').validate().form()) {
+	                    $('.forget-form').submit();
+	                }
+	                return false;
+	            }
+	        });
+
+	        jQuery('#forget-password').click(function () {
+	            jQuery('.login-form').hide();
+	            jQuery('.forget-form').show();
+	        });
+
+	        jQuery('#back-btn').click(function () {
+	            jQuery('.login-form').show();
+	            jQuery('.forget-form').hide();
+	        });
+
+	}
+
+	var handleRegister = function () {
+
+		function format(state) {
+            if (!state.id) return state.text; // optgroup
+            return "<img class='flag' src='../../assets/global/img/flags/" + state.id.toLowerCase() + ".png'/>&nbsp;&nbsp;" + state.text;
+        }
+
+
+		$("#select2_sample4").select2({
+		  	placeholder: '<i class="fa fa-map-marker"></i>&nbsp;Select a Role',
+            allowClear: true,
+            // formatResult: format,
+            // formatSelection: format,
+            escapeMarkup: function (m) {
+                return m;
+            }
+        });
+
+
+			$('#select2_sample4').change(function () {
+                $('.register-form').validate().element($(this)); //revalidate the chosen dropdown value and show error or success message for the input
+            });
+
+
+
+         $('.register-form').validate({
+	            errorElement: 'span', //default input error message container
+	            errorClass: 'help-block', // default input error message class
+	            focusInvalid: false, // do not focus the last invalid input
+	            ignore: "",
+	            rules: {
+
+	                name: {
+	                    required: true
+	                },
+	                email: {
+	                    required: true,
+	                    email: true
+	                },
+	                role: {
+	                    required: true
+	                },
+
+	                username: {
+	                    required: true
+	                },
+	                password: {
+	                    required: true
+	                },
+	                rpassword: {
+	                    equalTo: "#register_password"
+	                },
+
+	                tnc: {
+	                    required: true
+	                }
+	            },
+
+	            messages: { // custom messages for radio buttons and checkboxes
+	                tnc: {
+	                    required: "Please accept TNC first."
+	                }
+	            },
+
+	            invalidHandler: function (event, validator) { //display error alert on form submit
+
+	            },
+
+	            highlight: function (element) { // hightlight error inputs
+	                $(element)
+	                    .closest('.form-group').addClass('has-error'); // set error class to the control group
+	            },
+
+	            success: function (label) {
+	                label.closest('.form-group').removeClass('has-error');
+	                label.remove();
+	            },
+
+	            errorPlacement: function (error, element) {
+	                if (element.attr("name") == "tnc") { // insert checkbox errors after the container
+	                    error.insertAfter($('#register_tnc_error'));
+	                } else if (element.closest('.input-icon').size() === 1) {
+	                    error.insertAfter(element.closest('.input-icon'));
+	                } else {
+	                	error.insertAfter(element);
+	                }
+	            },
+
+	            submitHandler: function (form) {
+	                form.submit();
+	            }
+	        });
+
+			$('.register-form input').keypress(function (e) {
+	            if (e.which == 13) {
+	                if ($('.register-form').validate().form()) {
+	                    $('.register-form').submit();
+	                }
+	                return false;
+	            }
+	        });
+
+	        jQuery('#register-btn').click(function () {
+	            jQuery('.login-form').hide();
+	            jQuery('.register-form').show();
+	        });
+
+	        jQuery('#register-back-btn').click(function () {
+	            jQuery('.login-form').show();
+	            jQuery('.register-form').hide();
+	        });
+	}
+
+    return {
+        //main function to initiate the module
+        init: function () {
+
+            handleLogin();
+            handleForgetPassword();
+            handleRegister();
+        }
+
+    };
+
+}();
diff --git a/public/assets/scripts/portfolio.js b/public/assets/scripts/portfolio.js
new file mode 100644
index 0000000..09b3acb
--- /dev/null
+++ b/public/assets/scripts/portfolio.js
@@ -0,0 +1,12 @@
+var Portfolio = function () {
+
+
+    return {
+        //main function to initiate the module
+        init: function () {
+            $('.mix-grid').mixitup();
+        }
+
+    };
+
+}();
\ No newline at end of file
diff --git a/public/assets/scripts/profile.js b/public/assets/scripts/profile.js
new file mode 100644
index 0000000..a7c419f
--- /dev/null
+++ b/public/assets/scripts/profile.js
@@ -0,0 +1,77 @@
+var Profile = function() {
+
+    var dashboardMainChart = null;
+
+    return {
+
+        //main function
+        init: function() {
+
+            Profile.initMiniCharts();
+        },
+
+        initMiniCharts: function() {
+
+            // IE8 Fix: function.bind polyfill
+            if (Metronic.isIE8() && !Function.prototype.bind) {
+                Function.prototype.bind = function(oThis) {
+                    if (typeof this !== "function") {
+                        // closest thing possible to the ECMAScript 5 internal IsCallable function
+                        throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
+                    }
+
+                    var aArgs = Array.prototype.slice.call(arguments, 1),
+                        fToBind = this,
+                        fNOP = function() {},
+                        fBound = function() {
+                            return fToBind.apply(this instanceof fNOP && oThis ? this : oThis,
+                                aArgs.concat(Array.prototype.slice.call(arguments)));
+                        };
+
+                    fNOP.prototype = this.prototype;
+                    fBound.prototype = new fNOP();
+
+                    return fBound;
+                };
+            }
+
+            $("#sparkline_bar").sparkline([8, 9, 10, 11, 10, 10, 12, 10, 10, 11, 9, 12, 11], {
+                type: 'bar',
+                width: '100',
+                barWidth: 6,
+                height: '45',
+                barColor: '#F36A5B',
+                negBarColor: '#e02222'
+            });
+
+            $("#sparkline_bar2").sparkline([9, 11, 12, 13, 12, 13, 10, 14, 13, 11, 11, 12, 11], {
+                type: 'bar',
+                width: '100',
+                barWidth: 6,
+                height: '45',
+                barColor: '#5C9BD1',
+                negBarColor: '#e02222'
+            });
+
+            $("#sparkline_bar3").sparkline([8, 9, 10, 11, 10, 10, 12, 10, 10, 11, 9, 12, 11, 10, 9, 11, 13, 13, 12], {
+                type: 'bar',
+                width: '100',
+                barWidth: 5,
+                height: '55',
+                barColor: '#35aa47',
+                negBarColor: '#e02222'
+            });
+
+            $("#sparkline_bar4").sparkline([9, 11, 12, 13, 12, 13, 10, 14, 13, 11, 11, 12, 11, 11, 10, 12, 11, 10], {
+                type: 'bar',
+                width: '100',
+                barWidth: 5,
+                height: '55',
+                barColor: '#ffb848',
+                negBarColor: '#e02222'
+            });
+        }
+
+    };
+
+}();
diff --git a/public/assets/scripts/table-ajax.js b/public/assets/scripts/table-ajax.js
new file mode 100644
index 0000000..1d2aaa3
--- /dev/null
+++ b/public/assets/scripts/table-ajax.js
@@ -0,0 +1,82 @@
+var TableAjax = function () {
+
+    var initPickers = function () {
+        //init date pickers
+        $('.date-picker').datepicker({
+            rtl: Metronic.isRTL(),
+            autoclose: true
+        });
+    };
+
+    var handleRecords = function (dataTable) {
+
+        var table = $("#datatable_ajax");
+        var grid = new Datatable();
+
+        grid.init({
+            src: table,
+            onSuccess: function (grid) {
+                // execute some code after table records loaded
+            },
+            onError: function (grid) {
+                // execute some code on network or other general error  
+            },
+            onDataLoad: function(grid) {
+                // execute some code on ajax data load
+            },
+            loadingMessage: 'Loading...',
+            dataTable: dataTable
+        });
+
+        // handle group actionsubmit button click
+        grid.getTableWrapper().on('click', '.table-group-action-submit', function (e) {
+            e.preventDefault();
+            var action = $(".table-group-action-input", grid.getTableWrapper());
+            if (action.val() != "" && grid.getSelectedRowsCount() > 0) {
+                grid.setAjaxParam("customActionType", "group_action");
+                grid.setAjaxParam("customActionName", action.val());
+                grid.setAjaxParam("id", grid.getSelectedRows());
+                grid.getDataTable().ajax.reload();
+                grid.clearAjaxParams();
+            } else if (action.val() == "") {
+                Metronic.alert({
+                    type: 'danger',
+                    icon: 'warning',
+                    message: 'Please select an action',
+                    container: grid.getTableWrapper(),
+                    place: 'prepend'
+                });
+            } else if (grid.getSelectedRowsCount() === 0) {
+                Metronic.alert({
+                    type: 'danger',
+                    icon: 'warning',
+                    message: 'No record selected',
+                    container: grid.getTableWrapper(),
+                    place: 'prepend'
+                });
+            }
+        });
+
+        // Apply the search
+        grid.getDataTable().columns().eq( 0 ).each( function ( colIdx ) {
+            $( 'input', grid.getDataTable().column( colIdx ).footer() ).on( 'keyup change', function () {
+                grid.getDataTable()
+                .column( colIdx )
+                .search( this.value )
+                .draw();
+            });
+        });
+    };
+
+    return {
+
+        //main function to initiate the module
+        init: function (dataTable) {
+
+            initPickers();
+            handleRecords(dataTable);
+        }
+
+    };
+
+}();
\ No newline at end of file
diff --git a/public/assets/scripts/tasks.js b/public/assets/scripts/tasks.js
new file mode 100644
index 0000000..748feb0
--- /dev/null
+++ b/public/assets/scripts/tasks.js
@@ -0,0 +1,19 @@
+var Tasks = function () {
+
+
+    return {
+
+        //main function to initiate the module
+        initDashboardWidget: function () {
+			$('.task-list input[type="checkbox"]').change(function() {
+				if ($(this).is(':checked')) { 
+					$(this).parents('li').addClass("task-done"); 
+				} else { 
+					$(this).parents('li').removeClass("task-done"); 
+				}
+			}); 
+        }
+
+    };
+
+}();
\ No newline at end of file
diff --git a/public/bower_components/Chart.js/Chart.js b/public/bower_components/Chart.js/Chart.js
new file mode 100644
index 0000000..c264262
--- /dev/null
+++ b/public/bower_components/Chart.js/Chart.js
@@ -0,0 +1,3477 @@
+/*!
+ * Chart.js
+ * http://chartjs.org/
+ * Version: 1.0.2
+ *
+ * Copyright 2015 Nick Downie
+ * Released under the MIT license
+ * https://github.com/nnnick/Chart.js/blob/master/LICENSE.md
+ */
+
+
+(function(){
+
+	"use strict";
+
+	//Declare root variable - window in the browser, global on the server
+	var root = this,
+		previous = root.Chart;
+
+	//Occupy the global variable of Chart, and create a simple base class
+	var Chart = function(context){
+		var chart = this;
+		this.canvas = context.canvas;
+
+		this.ctx = context;
+
+		//Variables global to the chart
+		var computeDimension = function(element,dimension)
+		{
+			if (element['offset'+dimension])
+			{
+				return element['offset'+dimension];
+			}
+			else
+			{
+				return document.defaultView.getComputedStyle(element).getPropertyValue(dimension);
+			}
+		}
+
+		var width = this.width = computeDimension(context.canvas,'Width');
+		var height = this.height = computeDimension(context.canvas,'Height');
+
+		// Firefox requires this to work correctly
+		context.canvas.width  = width;
+		context.canvas.height = height;
+
+		var width = this.width = context.canvas.width;
+		var height = this.height = context.canvas.height;
+		this.aspectRatio = this.width / this.height;
+		//High pixel density displays - multiply the size of the canvas height/width by the device pixel ratio, then scale.
+		helpers.retinaScale(this);
+
+		return this;
+	};
+	//Globally expose the defaults to allow for user updating/changing
+	Chart.defaults = {
+		global: {
+			// Boolean - Whether to animate the chart
+			animation: true,
+
+			// Number - Number of animation steps
+			animationSteps: 60,
+
+			// String - Animation easing effect
+			animationEasing: "easeOutQuart",
+
+			// Boolean - If we should show the scale at all
+			showScale: true,
+
+			// Boolean - If we want to override with a hard coded scale
+			scaleOverride: false,
+
+			// ** Required if scaleOverride is true **
+			// Number - The number of steps in a hard coded scale
+			scaleSteps: null,
+			// Number - The value jump in the hard coded scale
+			scaleStepWidth: null,
+			// Number - The scale starting value
+			scaleStartValue: null,
+
+			// String - Colour of the scale line
+			scaleLineColor: "rgba(0,0,0,.1)",
+
+			// Number - Pixel width of the scale line
+			scaleLineWidth: 1,
+
+			// Boolean - Whether to show labels on the scale
+			scaleShowLabels: true,
+
+			// Interpolated JS string - can access value
+			scaleLabel: "<%=value%>",
+
+			// Boolean - Whether the scale should stick to integers, and not show any floats even if drawing space is there
+			scaleIntegersOnly: true,
+
+			// Boolean - Whether the scale should start at zero, or an order of magnitude down from the lowest value
+			scaleBeginAtZero: false,
+
+			// String - Scale label font declaration for the scale label
+			scaleFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
+
+			// Number - Scale label font size in pixels
+			scaleFontSize: 12,
+
+			// String - Scale label font weight style
+			scaleFontStyle: "normal",
+
+			// String - Scale label font colour
+			scaleFontColor: "#666",
+
+			// Boolean - whether or not the chart should be responsive and resize when the browser does.
+			responsive: false,
+
+			// Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container
+			maintainAspectRatio: true,
+
+			// Boolean - Determines whether to draw tooltips on the canvas or not - attaches events to touchmove & mousemove
+			showTooltips: true,
+
+			// Boolean - Determines whether to draw built-in tooltip or call custom tooltip function
+			customTooltips: false,
+
+			// Array - Array of string names to attach tooltip events
+			tooltipEvents: ["mousemove", "touchstart", "touchmove", "mouseout"],
+
+			// String - Tooltip background colour
+			tooltipFillColor: "rgba(0,0,0,0.8)",
+
+			// String - Tooltip label font declaration for the scale label
+			tooltipFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
+
+			// Number - Tooltip label font size in pixels
+			tooltipFontSize: 14,
+
+			// String - Tooltip font weight style
+			tooltipFontStyle: "normal",
+
+			// String - Tooltip label font colour
+			tooltipFontColor: "#fff",
+
+			// String - Tooltip title font declaration for the scale label
+			tooltipTitleFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
+
+			// Number - Tooltip title font size in pixels
+			tooltipTitleFontSize: 14,
+
+			// String - Tooltip title font weight style
+			tooltipTitleFontStyle: "bold",
+
+			// String - Tooltip title font colour
+			tooltipTitleFontColor: "#fff",
+
+			// Number - pixel width of padding around tooltip text
+			tooltipYPadding: 6,
+
+			// Number - pixel width of padding around tooltip text
+			tooltipXPadding: 6,
+
+			// Number - Size of the caret on the tooltip
+			tooltipCaretSize: 8,
+
+			// Number - Pixel radius of the tooltip border
+			tooltipCornerRadius: 6,
+
+			// Number - Pixel offset from point x to tooltip edge
+			tooltipXOffset: 10,
+
+			// String - Template string for single tooltips
+			tooltipTemplate: "<%if (label){%><%=label%>: <%}%><%= value %>",
+
+			// String - Template string for single tooltips
+			multiTooltipTemplate: "<%= value %>",
+
+			// String - Colour behind the legend colour block
+			multiTooltipKeyBackground: '#fff',
+
+			// Function - Will fire on animation progression.
+			onAnimationProgress: function(){},
+
+			// Function - Will fire on animation completion.
+			onAnimationComplete: function(){}
+
+		}
+	};
+
+	//Create a dictionary of chart types, to allow for extension of existing types
+	Chart.types = {};
+
+	//Global Chart helpers object for utility methods and classes
+	var helpers = Chart.helpers = {};
+
+		//-- Basic js utility methods
+	var each = helpers.each = function(loopable,callback,self){
+			var additionalArgs = Array.prototype.slice.call(arguments, 3);
+			// Check to see if null or undefined firstly.
+			if (loopable){
+				if (loopable.length === +loopable.length){
+					var i;
+					for (i=0; i<loopable.length; i++){
+						callback.apply(self,[loopable[i], i].concat(additionalArgs));
+					}
+				}
+				else{
+					for (var item in loopable){
+						callback.apply(self,[loopable[item],item].concat(additionalArgs));
+					}
+				}
+			}
+		},
+		clone = helpers.clone = function(obj){
+			var objClone = {};
+			each(obj,function(value,key){
+				if (obj.hasOwnProperty(key)) objClone[key] = value;
+			});
+			return objClone;
+		},
+		extend = helpers.extend = function(base){
+			each(Array.prototype.slice.call(arguments,1), function(extensionObject) {
+				each(extensionObject,function(value,key){
+					if (extensionObject.hasOwnProperty(key)) base[key] = value;
+				});
+			});
+			return base;
+		},
+		merge = helpers.merge = function(base,master){
+			//Merge properties in left object over to a shallow clone of object right.
+			var args = Array.prototype.slice.call(arguments,0);
+			args.unshift({});
+			return extend.apply(null, args);
+		},
+		indexOf = helpers.indexOf = function(arrayToSearch, item){
+			if (Array.prototype.indexOf) {
+				return arrayToSearch.indexOf(item);
+			}
+			else{
+				for (var i = 0; i < arrayToSearch.length; i++) {
+					if (arrayToSearch[i] === item) return i;
+				}
+				return -1;
+			}
+		},
+		where = helpers.where = function(collection, filterCallback){
+			var filtered = [];
+
+			helpers.each(collection, function(item){
+				if (filterCallback(item)){
+					filtered.push(item);
+				}
+			});
+
+			return filtered;
+		},
+		findNextWhere = helpers.findNextWhere = function(arrayToSearch, filterCallback, startIndex){
+			// Default to start of the array
+			if (!startIndex){
+				startIndex = -1;
+			}
+			for (var i = startIndex + 1; i < arrayToSearch.length; i++) {
+				var currentItem = arrayToSearch[i];
+				if (filterCallback(currentItem)){
+					return currentItem;
+				}
+			}
+		},
+		findPreviousWhere = helpers.findPreviousWhere = function(arrayToSearch, filterCallback, startIndex){
+			// Default to end of the array
+			if (!startIndex){
+				startIndex = arrayToSearch.length;
+			}
+			for (var i = startIndex - 1; i >= 0; i--) {
+				var currentItem = arrayToSearch[i];
+				if (filterCallback(currentItem)){
+					return currentItem;
+				}
+			}
+		},
+		inherits = helpers.inherits = function(extensions){
+			//Basic javascript inheritance based on the model created in Backbone.js
+			var parent = this;
+			var ChartElement = (extensions && extensions.hasOwnProperty("constructor")) ? extensions.constructor : function(){ return parent.apply(this, arguments); };
+
+			var Surrogate = function(){ this.constructor = ChartElement;};
+			Surrogate.prototype = parent.prototype;
+			ChartElement.prototype = new Surrogate();
+
+			ChartElement.extend = inherits;
+
+			if (extensions) extend(ChartElement.prototype, extensions);
+
+			ChartElement.__super__ = parent.prototype;
+
+			return ChartElement;
+		},
+		noop = helpers.noop = function(){},
+		uid = helpers.uid = (function(){
+			var id=0;
+			return function(){
+				return "chart-" + id++;
+			};
+		})(),
+		warn = helpers.warn = function(str){
+			//Method for warning of errors
+			if (window.console && typeof window.console.warn == "function") console.warn(str);
+		},
+		amd = helpers.amd = (typeof define == 'function' && define.amd),
+		//-- Math methods
+		isNumber = helpers.isNumber = function(n){
+			return !isNaN(parseFloat(n)) && isFinite(n);
+		},
+		max = helpers.max = function(array){
+			return Math.max.apply( Math, array );
+		},
+		min = helpers.min = function(array){
+			return Math.min.apply( Math, array );
+		},
+		cap = helpers.cap = function(valueToCap,maxValue,minValue){
+			if(isNumber(maxValue)) {
+				if( valueToCap > maxValue ) {
+					return maxValue;
+				}
+			}
+			else if(isNumber(minValue)){
+				if ( valueToCap < minValue ){
+					return minValue;
+				}
+			}
+			return valueToCap;
+		},
+		getDecimalPlaces = helpers.getDecimalPlaces = function(num){
+			if (num%1!==0 && isNumber(num)){
+				return num.toString().split(".")[1].length;
+			}
+			else {
+				return 0;
+			}
+		},
+		toRadians = helpers.radians = function(degrees){
+			return degrees * (Math.PI/180);
+		},
+		// Gets the angle from vertical upright to the point about a centre.
+		getAngleFromPoint = helpers.getAngleFromPoint = function(centrePoint, anglePoint){
+			var distanceFromXCenter = anglePoint.x - centrePoint.x,
+				distanceFromYCenter = anglePoint.y - centrePoint.y,
+				radialDistanceFromCenter = Math.sqrt( distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);
+
+
+			var angle = Math.PI * 2 + Math.atan2(distanceFromYCenter, distanceFromXCenter);
+
+			//If the segment is in the top left quadrant, we need to add another rotation to the angle
+			if (distanceFromXCenter < 0 && distanceFromYCenter < 0){
+				angle += Math.PI*2;
+			}
+
+			return {
+				angle: angle,
+				distance: radialDistanceFromCenter
+			};
+		},
+		aliasPixel = helpers.aliasPixel = function(pixelWidth){
+			return (pixelWidth % 2 === 0) ? 0 : 0.5;
+		},
+		splineCurve = helpers.splineCurve = function(FirstPoint,MiddlePoint,AfterPoint,t){
+			//Props to Rob Spencer at scaled innovation for his post on splining between points
+			//http://scaledinnovation.com/analytics/splines/aboutSplines.html
+			var d01=Math.sqrt(Math.pow(MiddlePoint.x-FirstPoint.x,2)+Math.pow(MiddlePoint.y-FirstPoint.y,2)),
+				d12=Math.sqrt(Math.pow(AfterPoint.x-MiddlePoint.x,2)+Math.pow(AfterPoint.y-MiddlePoint.y,2)),
+				fa=t*d01/(d01+d12),// scaling factor for triangle Ta
+				fb=t*d12/(d01+d12);
+			return {
+				inner : {
+					x : MiddlePoint.x-fa*(AfterPoint.x-FirstPoint.x),
+					y : MiddlePoint.y-fa*(AfterPoint.y-FirstPoint.y)
+				},
+				outer : {
+					x: MiddlePoint.x+fb*(AfterPoint.x-FirstPoint.x),
+					y : MiddlePoint.y+fb*(AfterPoint.y-FirstPoint.y)
+				}
+			};
+		},
+		calculateOrderOfMagnitude = helpers.calculateOrderOfMagnitude = function(val){
+			return Math.floor(Math.log(val) / Math.LN10);
+		},
+		calculateScaleRange = helpers.calculateScaleRange = function(valuesArray, drawingSize, textSize, startFromZero, integersOnly){
+
+			//Set a minimum step of two - a point at the top of the graph, and a point at the base
+			var minSteps = 2,
+				maxSteps = Math.floor(drawingSize/(textSize * 1.5)),
+				skipFitting = (minSteps >= maxSteps);
+
+			var maxValue = max(valuesArray),
+				minValue = min(valuesArray);
+
+			// We need some degree of seperation here to calculate the scales if all the values are the same
+			// Adding/minusing 0.5 will give us a range of 1.
+			if (maxValue === minValue){
+				maxValue += 0.5;
+				// So we don't end up with a graph with a negative start value if we've said always start from zero
+				if (minValue >= 0.5 && !startFromZero){
+					minValue -= 0.5;
+				}
+				else{
+					// Make up a whole number above the values
+					maxValue += 0.5;
+				}
+			}
+
+			var	valueRange = Math.abs(maxValue - minValue),
+				rangeOrderOfMagnitude = calculateOrderOfMagnitude(valueRange),
+				graphMax = Math.ceil(maxValue / (1 * Math.pow(10, rangeOrderOfMagnitude))) * Math.pow(10, rangeOrderOfMagnitude),
+				graphMin = (startFromZero) ? 0 : Math.floor(minValue / (1 * Math.pow(10, rangeOrderOfMagnitude))) * Math.pow(10, rangeOrderOfMagnitude),
+				graphRange = graphMax - graphMin,
+				stepValue = Math.pow(10, rangeOrderOfMagnitude),
+				numberOfSteps = Math.round(graphRange / stepValue);
+
+			//If we have more space on the graph we'll use it to give more definition to the data
+			while((numberOfSteps > maxSteps || (numberOfSteps * 2) < maxSteps) && !skipFitting) {
+				if(numberOfSteps > maxSteps){
+					stepValue *=2;
+					numberOfSteps = Math.round(graphRange/stepValue);
+					// Don't ever deal with a decimal number of steps - cancel fitting and just use the minimum number of steps.
+					if (numberOfSteps % 1 !== 0){
+						skipFitting = true;
+					}
+				}
+				//We can fit in double the amount of scale points on the scale
+				else{
+					//If user has declared ints only, and the step value isn't a decimal
+					if (integersOnly && rangeOrderOfMagnitude >= 0){
+						//If the user has said integers only, we need to check that making the scale more granular wouldn't make it a float
+						if(stepValue/2 % 1 === 0){
+							stepValue /=2;
+							numberOfSteps = Math.round(graphRange/stepValue);
+						}
+						//If it would make it a float break out of the loop
+						else{
+							break;
+						}
+					}
+					//If the scale doesn't have to be an int, make the scale more granular anyway.
+					else{
+						stepValue /=2;
+						numberOfSteps = Math.round(graphRange/stepValue);
+					}
+
+				}
+			}
+
+			if (skipFitting){
+				numberOfSteps = minSteps;
+				stepValue = graphRange / numberOfSteps;
+			}
+
+			return {
+				steps : numberOfSteps,
+				stepValue : stepValue,
+				min : graphMin,
+				max	: graphMin + (numberOfSteps * stepValue)
+			};
+
+		},
+		/* jshint ignore:start */
+		// Blows up jshint errors based on the new Function constructor
+		//Templating methods
+		//Javascript micro templating by John Resig - source at http://ejohn.org/blog/javascript-micro-templating/
+		template = helpers.template = function(templateString, valuesObject){
+
+			// If templateString is function rather than string-template - call the function for valuesObject
+
+			if(templateString instanceof Function){
+			 	return templateString(valuesObject);
+		 	}
+
+			var cache = {};
+			function tmpl(str, data){
+				// Figure out if we're getting a template, or if we need to
+				// load the template - and be sure to cache the result.
+				var fn = !/\W/.test(str) ?
+				cache[str] = cache[str] :
+
+				// Generate a reusable function that will serve as a template
+				// generator (and which will be cached).
+				new Function("obj",
+					"var p=[],print=function(){p.push.apply(p,arguments);};" +
+
+					// Introduce the data as local variables using with(){}
+					"with(obj){p.push('" +
+
+					// Convert the template into pure JavaScript
+					str
+						.replace(/[\r\t\n]/g, " ")
+						.split("<%").join("\t")
+						.replace(/((^|%>)[^\t]*)'/g, "$1\r")
+						.replace(/\t=(.*?)%>/g, "',$1,'")
+						.split("\t").join("');")
+						.split("%>").join("p.push('")
+						.split("\r").join("\\'") +
+					"');}return p.join('');"
+				);
+
+				// Provide some basic currying to the user
+				return data ? fn( data ) : fn;
+			}
+			return tmpl(templateString,valuesObject);
+		},
+		/* jshint ignore:end */
+		generateLabels = helpers.generateLabels = function(templateString,numberOfSteps,graphMin,stepValue){
+			var labelsArray = new Array(numberOfSteps);
+			if (labelTemplateString){
+				each(labelsArray,function(val,index){
+					labelsArray[index] = template(templateString,{value: (graphMin + (stepValue*(index+1)))});
+				});
+			}
+			return labelsArray;
+		},
+		//--Animation methods
+		//Easing functions adapted from Robert Penner's easing equations
+		//http://www.robertpenner.com/easing/
+		easingEffects = helpers.easingEffects = {
+			linear: function (t) {
+				return t;
+			},
+			easeInQuad: function (t) {
+				return t * t;
+			},
+			easeOutQuad: function (t) {
+				return -1 * t * (t - 2);
+			},
+			easeInOutQuad: function (t) {
+				if ((t /= 1 / 2) < 1) return 1 / 2 * t * t;
+				return -1 / 2 * ((--t) * (t - 2) - 1);
+			},
+			easeInCubic: function (t) {
+				return t * t * t;
+			},
+			easeOutCubic: function (t) {
+				return 1 * ((t = t / 1 - 1) * t * t + 1);
+			},
+			easeInOutCubic: function (t) {
+				if ((t /= 1 / 2) < 1) return 1 / 2 * t * t * t;
+				return 1 / 2 * ((t -= 2) * t * t + 2);
+			},
+			easeInQuart: function (t) {
+				return t * t * t * t;
+			},
+			easeOutQuart: function (t) {
+				return -1 * ((t = t / 1 - 1) * t * t * t - 1);
+			},
+			easeInOutQuart: function (t) {
+				if ((t /= 1 / 2) < 1) return 1 / 2 * t * t * t * t;
+				return -1 / 2 * ((t -= 2) * t * t * t - 2);
+			},
+			easeInQuint: function (t) {
+				return 1 * (t /= 1) * t * t * t * t;
+			},
+			easeOutQuint: function (t) {
+				return 1 * ((t = t / 1 - 1) * t * t * t * t + 1);
+			},
+			easeInOutQuint: function (t) {
+				if ((t /= 1 / 2) < 1) return 1 / 2 * t * t * t * t * t;
+				return 1 / 2 * ((t -= 2) * t * t * t * t + 2);
+			},
+			easeInSine: function (t) {
+				return -1 * Math.cos(t / 1 * (Math.PI / 2)) + 1;
+			},
+			easeOutSine: function (t) {
+				return 1 * Math.sin(t / 1 * (Math.PI / 2));
+			},
+			easeInOutSine: function (t) {
+				return -1 / 2 * (Math.cos(Math.PI * t / 1) - 1);
+			},
+			easeInExpo: function (t) {
+				return (t === 0) ? 1 : 1 * Math.pow(2, 10 * (t / 1 - 1));
+			},
+			easeOutExpo: function (t) {
+				return (t === 1) ? 1 : 1 * (-Math.pow(2, -10 * t / 1) + 1);
+			},
+			easeInOutExpo: function (t) {
+				if (t === 0) return 0;
+				if (t === 1) return 1;
+				if ((t /= 1 / 2) < 1) return 1 / 2 * Math.pow(2, 10 * (t - 1));
+				return 1 / 2 * (-Math.pow(2, -10 * --t) + 2);
+			},
+			easeInCirc: function (t) {
+				if (t >= 1) return t;
+				return -1 * (Math.sqrt(1 - (t /= 1) * t) - 1);
+			},
+			easeOutCirc: function (t) {
+				return 1 * Math.sqrt(1 - (t = t / 1 - 1) * t);
+			},
+			easeInOutCirc: function (t) {
+				if ((t /= 1 / 2) < 1) return -1 / 2 * (Math.sqrt(1 - t * t) - 1);
+				return 1 / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1);
+			},
+			easeInElastic: function (t) {
+				var s = 1.70158;
+				var p = 0;
+				var a = 1;
+				if (t === 0) return 0;
+				if ((t /= 1) == 1) return 1;
+				if (!p) p = 1 * 0.3;
+				if (a < Math.abs(1)) {
+					a = 1;
+					s = p / 4;
+				} else s = p / (2 * Math.PI) * Math.asin(1 / a);
+				return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p));
+			},
+			easeOutElastic: function (t) {
+				var s = 1.70158;
+				var p = 0;
+				var a = 1;
+				if (t === 0) return 0;
+				if ((t /= 1) == 1) return 1;
+				if (!p) p = 1 * 0.3;
+				if (a < Math.abs(1)) {
+					a = 1;
+					s = p / 4;
+				} else s = p / (2 * Math.PI) * Math.asin(1 / a);
+				return a * Math.pow(2, -10 * t) * Math.sin((t * 1 - s) * (2 * Math.PI) / p) + 1;
+			},
+			easeInOutElastic: function (t) {
+				var s = 1.70158;
+				var p = 0;
+				var a = 1;
+				if (t === 0) return 0;
+				if ((t /= 1 / 2) == 2) return 1;
+				if (!p) p = 1 * (0.3 * 1.5);
+				if (a < Math.abs(1)) {
+					a = 1;
+					s = p / 4;
+				} else s = p / (2 * Math.PI) * Math.asin(1 / a);
+				if (t < 1) return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p));
+				return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * 1 - s) * (2 * Math.PI) / p) * 0.5 + 1;
+			},
+			easeInBack: function (t) {
+				var s = 1.70158;
+				return 1 * (t /= 1) * t * ((s + 1) * t - s);
+			},
+			easeOutBack: function (t) {
+				var s = 1.70158;
+				return 1 * ((t = t / 1 - 1) * t * ((s + 1) * t + s) + 1);
+			},
+			easeInOutBack: function (t) {
+				var s = 1.70158;
+				if ((t /= 1 / 2) < 1) return 1 / 2 * (t * t * (((s *= (1.525)) + 1) * t - s));
+				return 1 / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);
+			},
+			easeInBounce: function (t) {
+				return 1 - easingEffects.easeOutBounce(1 - t);
+			},
+			easeOutBounce: function (t) {
+				if ((t /= 1) < (1 / 2.75)) {
+					return 1 * (7.5625 * t * t);
+				} else if (t < (2 / 2.75)) {
+					return 1 * (7.5625 * (t -= (1.5 / 2.75)) * t + 0.75);
+				} else if (t < (2.5 / 2.75)) {
+					return 1 * (7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375);
+				} else {
+					return 1 * (7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375);
+				}
+			},
+			easeInOutBounce: function (t) {
+				if (t < 1 / 2) return easingEffects.easeInBounce(t * 2) * 0.5;
+				return easingEffects.easeOutBounce(t * 2 - 1) * 0.5 + 1 * 0.5;
+			}
+		},
+		//Request animation polyfill - http://www.paulirish.com/2011/requestanimationframe-for-smart-animating/
+		requestAnimFrame = helpers.requestAnimFrame = (function(){
+			return window.requestAnimationFrame ||
+				window.webkitRequestAnimationFrame ||
+				window.mozRequestAnimationFrame ||
+				window.oRequestAnimationFrame ||
+				window.msRequestAnimationFrame ||
+				function(callback) {
+					return window.setTimeout(callback, 1000 / 60);
+				};
+		})(),
+		cancelAnimFrame = helpers.cancelAnimFrame = (function(){
+			return window.cancelAnimationFrame ||
+				window.webkitCancelAnimationFrame ||
+				window.mozCancelAnimationFrame ||
+				window.oCancelAnimationFrame ||
+				window.msCancelAnimationFrame ||
+				function(callback) {
+					return window.clearTimeout(callback, 1000 / 60);
+				};
+		})(),
+		animationLoop = helpers.animationLoop = function(callback,totalSteps,easingString,onProgress,onComplete,chartInstance){
+
+			var currentStep = 0,
+				easingFunction = easingEffects[easingString] || easingEffects.linear;
+
+			var animationFrame = function(){
+				currentStep++;
+				var stepDecimal = currentStep/totalSteps;
+				var easeDecimal = easingFunction(stepDecimal);
+
+				callback.call(chartInstance,easeDecimal,stepDecimal, currentStep);
+				onProgress.call(chartInstance,easeDecimal,stepDecimal);
+				if (currentStep < totalSteps){
+					chartInstance.animationFrame = requestAnimFrame(animationFrame);
+				} else{
+					onComplete.apply(chartInstance);
+				}
+			};
+			requestAnimFrame(animationFrame);
+		},
+		//-- DOM methods
+		getRelativePosition = helpers.getRelativePosition = function(evt){
+			var mouseX, mouseY;
+			var e = evt.originalEvent || evt,
+				canvas = evt.currentTarget || evt.srcElement,
+				boundingRect = canvas.getBoundingClientRect();
+
+			if (e.touches){
+				mouseX = e.touches[0].clientX - boundingRect.left;
+				mouseY = e.touches[0].clientY - boundingRect.top;
+
+			}
+			else{
+				mouseX = e.clientX - boundingRect.left;
+				mouseY = e.clientY - boundingRect.top;
+			}
+
+			return {
+				x : mouseX,
+				y : mouseY
+			};
+
+		},
+		addEvent = helpers.addEvent = function(node,eventType,method){
+			if (node.addEventListener){
+				node.addEventListener(eventType,method);
+			} else if (node.attachEvent){
+				node.attachEvent("on"+eventType, method);
+			} else {
+				node["on"+eventType] = method;
+			}
+		},
+		removeEvent = helpers.removeEvent = function(node, eventType, handler){
+			if (node.removeEventListener){
+				node.removeEventListener(eventType, handler, false);
+			} else if (node.detachEvent){
+				node.detachEvent("on"+eventType,handler);
+			} else{
+				node["on" + eventType] = noop;
+			}
+		},
+		bindEvents = helpers.bindEvents = function(chartInstance, arrayOfEvents, handler){
+			// Create the events object if it's not already present
+			if (!chartInstance.events) chartInstance.events = {};
+
+			each(arrayOfEvents,function(eventName){
+				chartInstance.events[eventName] = function(){
+					handler.apply(chartInstance, arguments);
+				};
+				addEvent(chartInstance.chart.canvas,eventName,chartInstance.events[eventName]);
+			});
+		},
+		unbindEvents = helpers.unbindEvents = function (chartInstance, arrayOfEvents) {
+			each(arrayOfEvents, function(handler,eventName){
+				removeEvent(chartInstance.chart.canvas, eventName, handler);
+			});
+		},
+		getMaximumWidth = helpers.getMaximumWidth = function(domNode){
+			var container = domNode.parentNode;
+			// TODO = check cross browser stuff with this.
+			return container.clientWidth;
+		},
+		getMaximumHeight = helpers.getMaximumHeight = function(domNode){
+			var container = domNode.parentNode;
+			// TODO = check cross browser stuff with this.
+			return container.clientHeight;
+		},
+		getMaximumSize = helpers.getMaximumSize = helpers.getMaximumWidth, // legacy support
+		retinaScale = helpers.retinaScale = function(chart){
+			var ctx = chart.ctx,
+				width = chart.canvas.width,
+				height = chart.canvas.height;
+
+			if (window.devicePixelRatio) {
+				ctx.canvas.style.width = width + "px";
+				ctx.canvas.style.height = height + "px";
+				ctx.canvas.height = height * window.devicePixelRatio;
+				ctx.canvas.width = width * window.devicePixelRatio;
+				ctx.scale(window.devicePixelRatio, window.devicePixelRatio);
+			}
+		},
+		//-- Canvas methods
+		clear = helpers.clear = function(chart){
+			chart.ctx.clearRect(0,0,chart.width,chart.height);
+		},
+		fontString = helpers.fontString = function(pixelSize,fontStyle,fontFamily){
+			return fontStyle + " " + pixelSize+"px " + fontFamily;
+		},
+		longestText = helpers.longestText = function(ctx,font,arrayOfStrings){
+			ctx.font = font;
+			var longest = 0;
+			each(arrayOfStrings,function(string){
+				var textWidth = ctx.measureText(string).width;
+				longest = (textWidth > longest) ? textWidth : longest;
+			});
+			return longest;
+		},
+		drawRoundedRectangle = helpers.drawRoundedRectangle = function(ctx,x,y,width,height,radius){
+			ctx.beginPath();
+			ctx.moveTo(x + radius, y);
+			ctx.lineTo(x + width - radius, y);
+			ctx.quadraticCurveTo(x + width, y, x + width, y + radius);
+			ctx.lineTo(x + width, y + height - radius);
+			ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);
+			ctx.lineTo(x + radius, y + height);
+			ctx.quadraticCurveTo(x, y + height, x, y + height - radius);
+			ctx.lineTo(x, y + radius);
+			ctx.quadraticCurveTo(x, y, x + radius, y);
+			ctx.closePath();
+		};
+
+
+	//Store a reference to each instance - allowing us to globally resize chart instances on window resize.
+	//Destroy method on the chart will remove the instance of the chart from this reference.
+	Chart.instances = {};
+
+	Chart.Type = function(data,options,chart){
+		this.options = options;
+		this.chart = chart;
+		this.id = uid();
+		//Add the chart instance to the global namespace
+		Chart.instances[this.id] = this;
+
+		// Initialize is always called when a chart type is created
+		// By default it is a no op, but it should be extended
+		if (options.responsive){
+			this.resize();
+		}
+		this.initialize.call(this,data);
+	};
+
+	//Core methods that'll be a part of every chart type
+	extend(Chart.Type.prototype,{
+		initialize : function(){return this;},
+		clear : function(){
+			clear(this.chart);
+			return this;
+		},
+		stop : function(){
+			// Stops any current animation loop occuring
+			cancelAnimFrame(this.animationFrame);
+			return this;
+		},
+		resize : function(callback){
+			this.stop();
+			var canvas = this.chart.canvas,
+				newWidth = getMaximumWidth(this.chart.canvas),
+				newHeight = this.options.maintainAspectRatio ? newWidth / this.chart.aspectRatio : getMaximumHeight(this.chart.canvas);
+
+			canvas.width = this.chart.width = newWidth;
+			canvas.height = this.chart.height = newHeight;
+
+			retinaScale(this.chart);
+
+			if (typeof callback === "function"){
+				callback.apply(this, Array.prototype.slice.call(arguments, 1));
+			}
+			return this;
+		},
+		reflow : noop,
+		render : function(reflow){
+			if (reflow){
+				this.reflow();
+			}
+			if (this.options.animation && !reflow){
+				helpers.animationLoop(
+					this.draw,
+					this.options.animationSteps,
+					this.options.animationEasing,
+					this.options.onAnimationProgress,
+					this.options.onAnimationComplete,
+					this
+				);
+			}
+			else{
+				this.draw();
+				this.options.onAnimationComplete.call(this);
+			}
+			return this;
+		},
+		generateLegend : function(){
+			return template(this.options.legendTemplate,this);
+		},
+		destroy : function(){
+			this.clear();
+			unbindEvents(this, this.events);
+			var canvas = this.chart.canvas;
+
+			// Reset canvas height/width attributes starts a fresh with the canvas context
+			canvas.width = this.chart.width;
+			canvas.height = this.chart.height;
+
+			// < IE9 doesn't support removeProperty
+			if (canvas.style.removeProperty) {
+				canvas.style.removeProperty('width');
+				canvas.style.removeProperty('height');
+			} else {
+				canvas.style.removeAttribute('width');
+				canvas.style.removeAttribute('height');
+			}
+
+			delete Chart.instances[this.id];
+		},
+		showTooltip : function(ChartElements, forceRedraw){
+			// Only redraw the chart if we've actually changed what we're hovering on.
+			if (typeof this.activeElements === 'undefined') this.activeElements = [];
+
+			var isChanged = (function(Elements){
+				var changed = false;
+
+				if (Elements.length !== this.activeElements.length){
+					changed = true;
+					return changed;
+				}
+
+				each(Elements, function(element, index){
+					if (element !== this.activeElements[index]){
+						changed = true;
+					}
+				}, this);
+				return changed;
+			}).call(this, ChartElements);
+
+			if (!isChanged && !forceRedraw){
+				return;
+			}
+			else{
+				this.activeElements = ChartElements;
+			}
+			this.draw();
+			if(this.options.customTooltips){
+				this.options.customTooltips(false);
+			}
+			if (ChartElements.length > 0){
+				// If we have multiple datasets, show a MultiTooltip for all of the data points at that index
+				if (this.datasets && this.datasets.length > 1) {
+					var dataArray,
+						dataIndex;
+
+					for (var i = this.datasets.length - 1; i >= 0; i--) {
+						dataArray = this.datasets[i].points || this.datasets[i].bars || this.datasets[i].segments;
+						dataIndex = indexOf(dataArray, ChartElements[0]);
+						if (dataIndex !== -1){
+							break;
+						}
+					}
+					var tooltipLabels = [],
+						tooltipColors = [],
+						medianPosition = (function(index) {
+
+							// Get all the points at that particular index
+							var Elements = [],
+								dataCollection,
+								xPositions = [],
+								yPositions = [],
+								xMax,
+								yMax,
+								xMin,
+								yMin;
+							helpers.each(this.datasets, function(dataset){
+								dataCollection = dataset.points || dataset.bars || dataset.segments;
+								if (dataCollection[dataIndex] && dataCollection[dataIndex].hasValue()){
+									Elements.push(dataCollection[dataIndex]);
+								}
+							});
+
+							helpers.each(Elements, function(element) {
+								xPositions.push(element.x);
+								yPositions.push(element.y);
+
+
+								//Include any colour information about the element
+								tooltipLabels.push(helpers.template(this.options.multiTooltipTemplate, element));
+								tooltipColors.push({
+									fill: element._saved.fillColor || element.fillColor,
+									stroke: element._saved.strokeColor || element.strokeColor
+								});
+
+							}, this);
+
+							yMin = min(yPositions);
+							yMax = max(yPositions);
+
+							xMin = min(xPositions);
+							xMax = max(xPositions);
+
+							return {
+								x: (xMin > this.chart.width/2) ? xMin : xMax,
+								y: (yMin + yMax)/2
+							};
+						}).call(this, dataIndex);
+
+					new Chart.MultiTooltip({
+						x: medianPosition.x,
+						y: medianPosition.y,
+						xPadding: this.options.tooltipXPadding,
+						yPadding: this.options.tooltipYPadding,
+						xOffset: this.options.tooltipXOffset,
+						fillColor: this.options.tooltipFillColor,
+						textColor: this.options.tooltipFontColor,
+						fontFamily: this.options.tooltipFontFamily,
+						fontStyle: this.options.tooltipFontStyle,
+						fontSize: this.options.tooltipFontSize,
+						titleTextColor: this.options.tooltipTitleFontColor,
+						titleFontFamily: this.options.tooltipTitleFontFamily,
+						titleFontStyle: this.options.tooltipTitleFontStyle,
+						titleFontSize: this.options.tooltipTitleFontSize,
+						cornerRadius: this.options.tooltipCornerRadius,
+						labels: tooltipLabels,
+						legendColors: tooltipColors,
+						legendColorBackground : this.options.multiTooltipKeyBackground,
+						title: ChartElements[0].label,
+						chart: this.chart,
+						ctx: this.chart.ctx,
+						custom: this.options.customTooltips
+					}).draw();
+
+				} else {
+					each(ChartElements, function(Element) {
+						var tooltipPosition = Element.tooltipPosition();
+						new Chart.Tooltip({
+							x: Math.round(tooltipPosition.x),
+							y: Math.round(tooltipPosition.y),
+							xPadding: this.options.tooltipXPadding,
+							yPadding: this.options.tooltipYPadding,
+							fillColor: this.options.tooltipFillColor,
+							textColor: this.options.tooltipFontColor,
+							fontFamily: this.options.tooltipFontFamily,
+							fontStyle: this.options.tooltipFontStyle,
+							fontSize: this.options.tooltipFontSize,
+							caretHeight: this.options.tooltipCaretSize,
+							cornerRadius: this.options.tooltipCornerRadius,
+							text: template(this.options.tooltipTemplate, Element),
+							chart: this.chart,
+							custom: this.options.customTooltips
+						}).draw();
+					}, this);
+				}
+			}
+			return this;
+		},
+		toBase64Image : function(){
+			return this.chart.canvas.toDataURL.apply(this.chart.canvas, arguments);
+		}
+	});
+
+	Chart.Type.extend = function(extensions){
+
+		var parent = this;
+
+		var ChartType = function(){
+			return parent.apply(this,arguments);
+		};
+
+		//Copy the prototype object of the this class
+		ChartType.prototype = clone(parent.prototype);
+		//Now overwrite some of the properties in the base class with the new extensions
+		extend(ChartType.prototype, extensions);
+
+		ChartType.extend = Chart.Type.extend;
+
+		if (extensions.name || parent.prototype.name){
+
+			var chartName = extensions.name || parent.prototype.name;
+			//Assign any potential default values of the new chart type
+
+			//If none are defined, we'll use a clone of the chart type this is being extended from.
+			//I.e. if we extend a line chart, we'll use the defaults from the line chart if our new chart
+			//doesn't define some defaults of their own.
+
+			var baseDefaults = (Chart.defaults[parent.prototype.name]) ? clone(Chart.defaults[parent.prototype.name]) : {};
+
+			Chart.defaults[chartName] = extend(baseDefaults,extensions.defaults);
+
+			Chart.types[chartName] = ChartType;
+
+			//Register this new chart type in the Chart prototype
+			Chart.prototype[chartName] = function(data,options){
+				var config = merge(Chart.defaults.global, Chart.defaults[chartName], options || {});
+				return new ChartType(data,config,this);
+			};
+		} else{
+			warn("Name not provided for this chart, so it hasn't been registered");
+		}
+		return parent;
+	};
+
+	Chart.Element = function(configuration){
+		extend(this,configuration);
+		this.initialize.apply(this,arguments);
+		this.save();
+	};
+	extend(Chart.Element.prototype,{
+		initialize : function(){},
+		restore : function(props){
+			if (!props){
+				extend(this,this._saved);
+			} else {
+				each(props,function(key){
+					this[key] = this._saved[key];
+				},this);
+			}
+			return this;
+		},
+		save : function(){
+			this._saved = clone(this);
+			delete this._saved._saved;
+			return this;
+		},
+		update : function(newProps){
+			each(newProps,function(value,key){
+				this._saved[key] = this[key];
+				this[key] = value;
+			},this);
+			return this;
+		},
+		transition : function(props,ease){
+			each(props,function(value,key){
+				this[key] = ((value - this._saved[key]) * ease) + this._saved[key];
+			},this);
+			return this;
+		},
+		tooltipPosition : function(){
+			return {
+				x : this.x,
+				y : this.y
+			};
+		},
+		hasValue: function(){
+			return isNumber(this.value);
+		}
+	});
+
+	Chart.Element.extend = inherits;
+
+
+	Chart.Point = Chart.Element.extend({
+		display: true,
+		inRange: function(chartX,chartY){
+			var hitDetectionRange = this.hitDetectionRadius + this.radius;
+			return ((Math.pow(chartX-this.x, 2)+Math.pow(chartY-this.y, 2)) < Math.pow(hitDetectionRange,2));
+		},
+		draw : function(){
+			if (this.display){
+				var ctx = this.ctx;
+				ctx.beginPath();
+
+				ctx.arc(this.x, this.y, this.radius, 0, Math.PI*2);
+				ctx.closePath();
+
+				ctx.strokeStyle = this.strokeColor;
+				ctx.lineWidth = this.strokeWidth;
+
+				ctx.fillStyle = this.fillColor;
+
+				ctx.fill();
+				ctx.stroke();
+			}
+
+
+			//Quick debug for bezier curve splining
+			//Highlights control points and the line between them.
+			//Handy for dev - stripped in the min version.
+
+			// ctx.save();
+			// ctx.fillStyle = "black";
+			// ctx.strokeStyle = "black"
+			// ctx.beginPath();
+			// ctx.arc(this.controlPoints.inner.x,this.controlPoints.inner.y, 2, 0, Math.PI*2);
+			// ctx.fill();
+
+			// ctx.beginPath();
+			// ctx.arc(this.controlPoints.outer.x,this.controlPoints.outer.y, 2, 0, Math.PI*2);
+			// ctx.fill();
+
+			// ctx.moveTo(this.controlPoints.inner.x,this.controlPoints.inner.y);
+			// ctx.lineTo(this.x, this.y);
+			// ctx.lineTo(this.controlPoints.outer.x,this.controlPoints.outer.y);
+			// ctx.stroke();
+
+			// ctx.restore();
+
+
+
+		}
+	});
+
+	Chart.Arc = Chart.Element.extend({
+		inRange : function(chartX,chartY){
+
+			var pointRelativePosition = helpers.getAngleFromPoint(this, {
+				x: chartX,
+				y: chartY
+			});
+
+			//Check if within the range of the open/close angle
+			var betweenAngles = (pointRelativePosition.angle >= this.startAngle && pointRelativePosition.angle <= this.endAngle),
+				withinRadius = (pointRelativePosition.distance >= this.innerRadius && pointRelativePosition.distance <= this.outerRadius);
+
+			return (betweenAngles && withinRadius);
+			//Ensure within the outside of the arc centre, but inside arc outer
+		},
+		tooltipPosition : function(){
+			var centreAngle = this.startAngle + ((this.endAngle - this.startAngle) / 2),
+				rangeFromCentre = (this.outerRadius - this.innerRadius) / 2 + this.innerRadius;
+			return {
+				x : this.x + (Math.cos(centreAngle) * rangeFromCentre),
+				y : this.y + (Math.sin(centreAngle) * rangeFromCentre)
+			};
+		},
+		draw : function(animationPercent){
+
+			var easingDecimal = animationPercent || 1;
+
+			var ctx = this.ctx;
+
+			ctx.beginPath();
+
+			ctx.arc(this.x, this.y, this.outerRadius, this.startAngle, this.endAngle);
+
+			ctx.arc(this.x, this.y, this.innerRadius, this.endAngle, this.startAngle, true);
+
+			ctx.closePath();
+			ctx.strokeStyle = this.strokeColor;
+			ctx.lineWidth = this.strokeWidth;
+
+			ctx.fillStyle = this.fillColor;
+
+			ctx.fill();
+			ctx.lineJoin = 'bevel';
+
+			if (this.showStroke){
+				ctx.stroke();
+			}
+		}
+	});
+
+	Chart.Rectangle = Chart.Element.extend({
+		draw : function(){
+			var ctx = this.ctx,
+				halfWidth = this.width/2,
+				leftX = this.x - halfWidth,
+				rightX = this.x + halfWidth,
+				top = this.base - (this.base - this.y),
+				halfStroke = this.strokeWidth / 2;
+
+			// Canvas doesn't allow us to stroke inside the width so we can
+			// adjust the sizes to fit if we're setting a stroke on the line
+			if (this.showStroke){
+				leftX += halfStroke;
+				rightX -= halfStroke;
+				top += halfStroke;
+			}
+
+			ctx.beginPath();
+
+			ctx.fillStyle = this.fillColor;
+			ctx.strokeStyle = this.strokeColor;
+			ctx.lineWidth = this.strokeWidth;
+
+			// It'd be nice to keep this class totally generic to any rectangle
+			// and simply specify which border to miss out.
+			ctx.moveTo(leftX, this.base);
+			ctx.lineTo(leftX, top);
+			ctx.lineTo(rightX, top);
+			ctx.lineTo(rightX, this.base);
+			ctx.fill();
+			if (this.showStroke){
+				ctx.stroke();
+			}
+		},
+		height : function(){
+			return this.base - this.y;
+		},
+		inRange : function(chartX,chartY){
+			return (chartX >= this.x - this.width/2 && chartX <= this.x + this.width/2) && (chartY >= this.y && chartY <= this.base);
+		}
+	});
+
+	Chart.Tooltip = Chart.Element.extend({
+		draw : function(){
+
+			var ctx = this.chart.ctx;
+
+			ctx.font = fontString(this.fontSize,this.fontStyle,this.fontFamily);
+
+			this.xAlign = "center";
+			this.yAlign = "above";
+
+			//Distance between the actual element.y position and the start of the tooltip caret
+			var caretPadding = this.caretPadding = 2;
+
+			var tooltipWidth = ctx.measureText(this.text).width + 2*this.xPadding,
+				tooltipRectHeight = this.fontSize + 2*this.yPadding,
+				tooltipHeight = tooltipRectHeight + this.caretHeight + caretPadding;
+
+			if (this.x + tooltipWidth/2 >this.chart.width){
+				this.xAlign = "left";
+			} else if (this.x - tooltipWidth/2 < 0){
+				this.xAlign = "right";
+			}
+
+			if (this.y - tooltipHeight < 0){
+				this.yAlign = "below";
+			}
+
+
+			var tooltipX = this.x - tooltipWidth/2,
+				tooltipY = this.y - tooltipHeight;
+
+			ctx.fillStyle = this.fillColor;
+
+			// Custom Tooltips
+			if(this.custom){
+				this.custom(this);
+			}
+			else{
+				switch(this.yAlign)
+				{
+				case "above":
+					//Draw a caret above the x/y
+					ctx.beginPath();
+					ctx.moveTo(this.x,this.y - caretPadding);
+					ctx.lineTo(this.x + this.caretHeight, this.y - (caretPadding + this.caretHeight));
+					ctx.lineTo(this.x - this.caretHeight, this.y - (caretPadding + this.caretHeight));
+					ctx.closePath();
+					ctx.fill();
+					break;
+				case "below":
+					tooltipY = this.y + caretPadding + this.caretHeight;
+					//Draw a caret below the x/y
+					ctx.beginPath();
+					ctx.moveTo(this.x, this.y + caretPadding);
+					ctx.lineTo(this.x + this.caretHeight, this.y + caretPadding + this.caretHeight);
+					ctx.lineTo(this.x - this.caretHeight, this.y + caretPadding + this.caretHeight);
+					ctx.closePath();
+					ctx.fill();
+					break;
+				}
+
+				switch(this.xAlign)
+				{
+				case "left":
+					tooltipX = this.x - tooltipWidth + (this.cornerRadius + this.caretHeight);
+					break;
+				case "right":
+					tooltipX = this.x - (this.cornerRadius + this.caretHeight);
+					break;
+				}
+
+				drawRoundedRectangle(ctx,tooltipX,tooltipY,tooltipWidth,tooltipRectHeight,this.cornerRadius);
+
+				ctx.fill();
+
+				ctx.fillStyle = this.textColor;
+				ctx.textAlign = "center";
+				ctx.textBaseline = "middle";
+				ctx.fillText(this.text, tooltipX + tooltipWidth/2, tooltipY + tooltipRectHeight/2);
+			}
+		}
+	});
+
+	Chart.MultiTooltip = Chart.Element.extend({
+		initialize : function(){
+			this.font = fontString(this.fontSize,this.fontStyle,this.fontFamily);
+
+			this.titleFont = fontString(this.titleFontSize,this.titleFontStyle,this.titleFontFamily);
+
+			this.height = (this.labels.length * this.fontSize) + ((this.labels.length-1) * (this.fontSize/2)) + (this.yPadding*2) + this.titleFontSize *1.5;
+
+			this.ctx.font = this.titleFont;
+
+			var titleWidth = this.ctx.measureText(this.title).width,
+				//Label has a legend square as well so account for this.
+				labelWidth = longestText(this.ctx,this.font,this.labels) + this.fontSize + 3,
+				longestTextWidth = max([labelWidth,titleWidth]);
+
+			this.width = longestTextWidth + (this.xPadding*2);
+
+
+			var halfHeight = this.height/2;
+
+			//Check to ensure the height will fit on the canvas
+			if (this.y - halfHeight < 0 ){
+				this.y = halfHeight;
+			} else if (this.y + halfHeight > this.chart.height){
+				this.y = this.chart.height - halfHeight;
+			}
+
+			//Decide whether to align left or right based on position on canvas
+			if (this.x > this.chart.width/2){
+				this.x -= this.xOffset + this.width;
+			} else {
+				this.x += this.xOffset;
+			}
+
+
+		},
+		getLineHeight : function(index){
+			var baseLineHeight = this.y - (this.height/2) + this.yPadding,
+				afterTitleIndex = index-1;
+
+			//If the index is zero, we're getting the title
+			if (index === 0){
+				return baseLineHeight + this.titleFontSize/2;
+			} else{
+				return baseLineHeight + ((this.fontSize*1.5*afterTitleIndex) + this.fontSize/2) + this.titleFontSize * 1.5;
+			}
+
+		},
+		draw : function(){
+			// Custom Tooltips
+			if(this.custom){
+				this.custom(this);
+			}
+			else{
+				drawRoundedRectangle(this.ctx,this.x,this.y - this.height/2,this.width,this.height,this.cornerRadius);
+				var ctx = this.ctx;
+				ctx.fillStyle = this.fillColor;
+				ctx.fill();
+				ctx.closePath();
+
+				ctx.textAlign = "left";
+				ctx.textBaseline = "middle";
+				ctx.fillStyle = this.titleTextColor;
+				ctx.font = this.titleFont;
+
+				ctx.fillText(this.title,this.x + this.xPadding, this.getLineHeight(0));
+
+				ctx.font = this.font;
+				helpers.each(this.labels,function(label,index){
+					ctx.fillStyle = this.textColor;
+					ctx.fillText(label,this.x + this.xPadding + this.fontSize + 3, this.getLineHeight(index + 1));
+
+					//A bit gnarly, but clearing this rectangle breaks when using explorercanvas (clears whole canvas)
+					//ctx.clearRect(this.x + this.xPadding, this.getLineHeight(index + 1) - this.fontSize/2, this.fontSize, this.fontSize);
+					//Instead we'll make a white filled block to put the legendColour palette over.
+
+					ctx.fillStyle = this.legendColorBackground;
+					ctx.fillRect(this.x + this.xPadding, this.getLineHeight(index + 1) - this.fontSize/2, this.fontSize, this.fontSize);
+
+					ctx.fillStyle = this.legendColors[index].fill;
+					ctx.fillRect(this.x + this.xPadding, this.getLineHeight(index + 1) - this.fontSize/2, this.fontSize, this.fontSize);
+
+
+				},this);
+			}
+		}
+	});
+
+	Chart.Scale = Chart.Element.extend({
+		initialize : function(){
+			this.fit();
+		},
+		buildYLabels : function(){
+			this.yLabels = [];
+
+			var stepDecimalPlaces = getDecimalPlaces(this.stepValue);
+
+			for (var i=0; i<=this.steps; i++){
+				this.yLabels.push(template(this.templateString,{value:(this.min + (i * this.stepValue)).toFixed(stepDecimalPlaces)}));
+			}
+			this.yLabelWidth = (this.display && this.showLabels) ? longestText(this.ctx,this.font,this.yLabels) : 0;
+		},
+		addXLabel : function(label){
+			this.xLabels.push(label);
+			this.valuesCount++;
+			this.fit();
+		},
+		removeXLabel : function(){
+			this.xLabels.shift();
+			this.valuesCount--;
+			this.fit();
+		},
+		// Fitting loop to rotate x Labels and figure out what fits there, and also calculate how many Y steps to use
+		fit: function(){
+			// First we need the width of the yLabels, assuming the xLabels aren't rotated
+
+			// To do that we need the base line at the top and base of the chart, assuming there is no x label rotation
+			this.startPoint = (this.display) ? this.fontSize : 0;
+			this.endPoint = (this.display) ? this.height - (this.fontSize * 1.5) - 5 : this.height; // -5 to pad labels
+
+			// Apply padding settings to the start and end point.
+			this.startPoint += this.padding;
+			this.endPoint -= this.padding;
+
+			// Cache the starting height, so can determine if we need to recalculate the scale yAxis
+			var cachedHeight = this.endPoint - this.startPoint,
+				cachedYLabelWidth;
+
+			// Build the current yLabels so we have an idea of what size they'll be to start
+			/*
+			 *	This sets what is returned from calculateScaleRange as static properties of this class:
+			 *
+				this.steps;
+				this.stepValue;
+				this.min;
+				this.max;
+			 *
+			 */
+			this.calculateYRange(cachedHeight);
+
+			// With these properties set we can now build the array of yLabels
+			// and also the width of the largest yLabel
+			this.buildYLabels();
+
+			this.calculateXLabelRotation();
+
+			while((cachedHeight > this.endPoint - this.startPoint)){
+				cachedHeight = this.endPoint - this.startPoint;
+				cachedYLabelWidth = this.yLabelWidth;
+
+				this.calculateYRange(cachedHeight);
+				this.buildYLabels();
+
+				// Only go through the xLabel loop again if the yLabel width has changed
+				if (cachedYLabelWidth < this.yLabelWidth){
+					this.calculateXLabelRotation();
+				}
+			}
+
+		},
+		calculateXLabelRotation : function(){
+			//Get the width of each grid by calculating the difference
+			//between x offsets between 0 and 1.
+
+			this.ctx.font = this.font;
+
+			var firstWidth = this.ctx.measureText(this.xLabels[0]).width,
+				lastWidth = this.ctx.measureText(this.xLabels[this.xLabels.length - 1]).width,
+				firstRotated,
+				lastRotated;
+
+
+			this.xScalePaddingRight = lastWidth/2 + 3;
+			this.xScalePaddingLeft = (firstWidth/2 > this.yLabelWidth + 10) ? firstWidth/2 : this.yLabelWidth + 10;
+
+			this.xLabelRotation = 0;
+			if (this.display){
+				var originalLabelWidth = longestText(this.ctx,this.font,this.xLabels),
+					cosRotation,
+					firstRotatedWidth;
+				this.xLabelWidth = originalLabelWidth;
+				//Allow 3 pixels x2 padding either side for label readability
+				var xGridWidth = Math.floor(this.calculateX(1) - this.calculateX(0)) - 6;
+
+				//Max label rotate should be 90 - also act as a loop counter
+				while ((this.xLabelWidth > xGridWidth && this.xLabelRotation === 0) || (this.xLabelWidth > xGridWidth && this.xLabelRotation <= 90 && this.xLabelRotation > 0)){
+					cosRotation = Math.cos(toRadians(this.xLabelRotation));
+
+					firstRotated = cosRotation * firstWidth;
+					lastRotated = cosRotation * lastWidth;
+
+					// We're right aligning the text now.
+					if (firstRotated + this.fontSize / 2 > this.yLabelWidth + 8){
+						this.xScalePaddingLeft = firstRotated + this.fontSize / 2;
+					}
+					this.xScalePaddingRight = this.fontSize/2;
+
+
+					this.xLabelRotation++;
+					this.xLabelWidth = cosRotation * originalLabelWidth;
+
+				}
+				if (this.xLabelRotation > 0){
+					this.endPoint -= Math.sin(toRadians(this.xLabelRotation))*originalLabelWidth + 3;
+				}
+			}
+			else{
+				this.xLabelWidth = 0;
+				this.xScalePaddingRight = this.padding;
+				this.xScalePaddingLeft = this.padding;
+			}
+
+		},
+		// Needs to be overidden in each Chart type
+		// Otherwise we need to pass all the data into the scale class
+		calculateYRange: noop,
+		drawingArea: function(){
+			return this.startPoint - this.endPoint;
+		},
+		calculateY : function(value){
+			var scalingFactor = this.drawingArea() / (this.min - this.max);
+			return this.endPoint - (scalingFactor * (value - this.min));
+		},
+		calculateX : function(index){
+			var isRotated = (this.xLabelRotation > 0),
+				// innerWidth = (this.offsetGridLines) ? this.width - offsetLeft - this.padding : this.width - (offsetLeft + halfLabelWidth * 2) - this.padding,
+				innerWidth = this.width - (this.xScalePaddingLeft + this.xScalePaddingRight),
+				valueWidth = innerWidth/Math.max((this.valuesCount - ((this.offsetGridLines) ? 0 : 1)), 1),
+				valueOffset = (valueWidth * index) + this.xScalePaddingLeft;
+
+			if (this.offsetGridLines){
+				valueOffset += (valueWidth/2);
+			}
+
+			return Math.round(valueOffset);
+		},
+		update : function(newProps){
+			helpers.extend(this, newProps);
+			this.fit();
+		},
+		draw : function(){
+			var ctx = this.ctx,
+				yLabelGap = (this.endPoint - this.startPoint) / this.steps,
+				xStart = Math.round(this.xScalePaddingLeft);
+			if (this.display){
+				ctx.fillStyle = this.textColor;
+				ctx.font = this.font;
+				each(this.yLabels,function(labelString,index){
+					var yLabelCenter = this.endPoint - (yLabelGap * index),
+						linePositionY = Math.round(yLabelCenter),
+						drawHorizontalLine = this.showHorizontalLines;
+
+					ctx.textAlign = "right";
+					ctx.textBaseline = "middle";
+					if (this.showLabels){
+						ctx.fillText(labelString,xStart - 10,yLabelCenter);
+					}
+
+					// This is X axis, so draw it
+					if (index === 0 && !drawHorizontalLine){
+						drawHorizontalLine = true;
+					}
+
+					if (drawHorizontalLine){
+						ctx.beginPath();
+					}
+
+					if (index > 0){
+						// This is a grid line in the centre, so drop that
+						ctx.lineWidth = this.gridLineWidth;
+						ctx.strokeStyle = this.gridLineColor;
+					} else {
+						// This is the first line on the scale
+						ctx.lineWidth = this.lineWidth;
+						ctx.strokeStyle = this.lineColor;
+					}
+
+					linePositionY += helpers.aliasPixel(ctx.lineWidth);
+
+					if(drawHorizontalLine){
+						ctx.moveTo(xStart, linePositionY);
+						ctx.lineTo(this.width, linePositionY);
+						ctx.stroke();
+						ctx.closePath();
+					}
+
+					ctx.lineWidth = this.lineWidth;
+					ctx.strokeStyle = this.lineColor;
+					ctx.beginPath();
+					ctx.moveTo(xStart - 5, linePositionY);
+					ctx.lineTo(xStart, linePositionY);
+					ctx.stroke();
+					ctx.closePath();
+
+				},this);
+
+				each(this.xLabels,function(label,index){
+					var xPos = this.calculateX(index) + aliasPixel(this.lineWidth),
+						// Check to see if line/bar here and decide where to place the line
+						linePos = this.calculateX(index - (this.offsetGridLines ? 0.5 : 0)) + aliasPixel(this.lineWidth),
+						isRotated = (this.xLabelRotation > 0),
+						drawVerticalLine = this.showVerticalLines;
+
+					// This is Y axis, so draw it
+					if (index === 0 && !drawVerticalLine){
+						drawVerticalLine = true;
+					}
+
+					if (drawVerticalLine){
+						ctx.beginPath();
+					}
+
+					if (index > 0){
+						// This is a grid line in the centre, so drop that
+						ctx.lineWidth = this.gridLineWidth;
+						ctx.strokeStyle = this.gridLineColor;
+					} else {
+						// This is the first line on the scale
+						ctx.lineWidth = this.lineWidth;
+						ctx.strokeStyle = this.lineColor;
+					}
+
+					if (drawVerticalLine){
+						ctx.moveTo(linePos,this.endPoint);
+						ctx.lineTo(linePos,this.startPoint - 3);
+						ctx.stroke();
+						ctx.closePath();
+					}
+
+
+					ctx.lineWidth = this.lineWidth;
+					ctx.strokeStyle = this.lineColor;
+
+
+					// Small lines at the bottom of the base grid line
+					ctx.beginPath();
+					ctx.moveTo(linePos,this.endPoint);
+					ctx.lineTo(linePos,this.endPoint + 5);
+					ctx.stroke();
+					ctx.closePath();
+
+					ctx.save();
+					ctx.translate(xPos,(isRotated) ? this.endPoint + 12 : this.endPoint + 8);
+					ctx.rotate(toRadians(this.xLabelRotation)*-1);
+					ctx.font = this.font;
+					ctx.textAlign = (isRotated) ? "right" : "center";
+					ctx.textBaseline = (isRotated) ? "middle" : "top";
+					ctx.fillText(label, 0, 0);
+					ctx.restore();
+				},this);
+
+			}
+		}
+
+	});
+
+	Chart.RadialScale = Chart.Element.extend({
+		initialize: function(){
+			this.size = min([this.height, this.width]);
+			this.drawingArea = (this.display) ? (this.size/2) - (this.fontSize/2 + this.backdropPaddingY) : (this.size/2);
+		},
+		calculateCenterOffset: function(value){
+			// Take into account half font size + the yPadding of the top value
+			var scalingFactor = this.drawingArea / (this.max - this.min);
+
+			return (value - this.min) * scalingFactor;
+		},
+		update : function(){
+			if (!this.lineArc){
+				this.setScaleSize();
+			} else {
+				this.drawingArea = (this.display) ? (this.size/2) - (this.fontSize/2 + this.backdropPaddingY) : (this.size/2);
+			}
+			this.buildYLabels();
+		},
+		buildYLabels: function(){
+			this.yLabels = [];
+
+			var stepDecimalPlaces = getDecimalPlaces(this.stepValue);
+
+			for (var i=0; i<=this.steps; i++){
+				this.yLabels.push(template(this.templateString,{value:(this.min + (i * this.stepValue)).toFixed(stepDecimalPlaces)}));
+			}
+		},
+		getCircumference : function(){
+			return ((Math.PI*2) / this.valuesCount);
+		},
+		setScaleSize: function(){
+			/*
+			 * Right, this is really confusing and there is a lot of maths going on here
+			 * The gist of the problem is here: https://gist.github.com/nnnick/696cc9c55f4b0beb8fe9
+			 *
+			 * Reaction: https://dl.dropboxusercontent.com/u/34601363/toomuchscience.gif
+			 *
+			 * Solution:
+			 *
+			 * We assume the radius of the polygon is half the size of the canvas at first
+			 * at each index we check if the text overlaps.
+			 *
+			 * Where it does, we store that angle and that index.
+			 *
+			 * After finding the largest index and angle we calculate how much we need to remove
+			 * from the shape radius to move the point inwards by that x.
+			 *
+			 * We average the left and right distances to get the maximum shape radius that can fit in the box
+			 * along with labels.
+			 *
+			 * Once we have that, we can find the centre point for the chart, by taking the x text protrusion
+			 * on each side, removing that from the size, halving it and adding the left x protrusion width.
+			 *
+			 * This will mean we have a shape fitted to the canvas, as large as it can be with the labels
+			 * and position it in the most space efficient manner
+			 *
+			 * https://dl.dropboxusercontent.com/u/34601363/yeahscience.gif
+			 */
+
+
+			// Get maximum radius of the polygon. Either half the height (minus the text width) or half the width.
+			// Use this to calculate the offset + change. - Make sure L/R protrusion is at least 0 to stop issues with centre points
+			var largestPossibleRadius = min([(this.height/2 - this.pointLabelFontSize - 5), this.width/2]),
+				pointPosition,
+				i,
+				textWidth,
+				halfTextWidth,
+				furthestRight = this.width,
+				furthestRightIndex,
+				furthestRightAngle,
+				furthestLeft = 0,
+				furthestLeftIndex,
+				furthestLeftAngle,
+				xProtrusionLeft,
+				xProtrusionRight,
+				radiusReductionRight,
+				radiusReductionLeft,
+				maxWidthRadius;
+			this.ctx.font = fontString(this.pointLabelFontSize,this.pointLabelFontStyle,this.pointLabelFontFamily);
+			for (i=0;i<this.valuesCount;i++){
+				// 5px to space the text slightly out - similar to what we do in the draw function.
+				pointPosition = this.getPointPosition(i, largestPossibleRadius);
+				textWidth = this.ctx.measureText(template(this.templateString, { value: this.labels[i] })).width + 5;
+				if (i === 0 || i === this.valuesCount/2){
+					// If we're at index zero, or exactly the middle, we're at exactly the top/bottom
+					// of the radar chart, so text will be aligned centrally, so we'll half it and compare
+					// w/left and right text sizes
+					halfTextWidth = textWidth/2;
+					if (pointPosition.x + halfTextWidth > furthestRight) {
+						furthestRight = pointPosition.x + halfTextWidth;
+						furthestRightIndex = i;
+					}
+					if (pointPosition.x - halfTextWidth < furthestLeft) {
+						furthestLeft = pointPosition.x - halfTextWidth;
+						furthestLeftIndex = i;
+					}
+				}
+				else if (i < this.valuesCount/2) {
+					// Less than half the values means we'll left align the text
+					if (pointPosition.x + textWidth > furthestRight) {
+						furthestRight = pointPosition.x + textWidth;
+						furthestRightIndex = i;
+					}
+				}
+				else if (i > this.valuesCount/2){
+					// More than half the values means we'll right align the text
+					if (pointPosition.x - textWidth < furthestLeft) {
+						furthestLeft = pointPosition.x - textWidth;
+						furthestLeftIndex = i;
+					}
+				}
+			}
+
+			xProtrusionLeft = furthestLeft;
+
+			xProtrusionRight = Math.ceil(furthestRight - this.width);
+
+			furthestRightAngle = this.getIndexAngle(furthestRightIndex);
+
+			furthestLeftAngle = this.getIndexAngle(furthestLeftIndex);
+
+			radiusReductionRight = xProtrusionRight / Math.sin(furthestRightAngle + Math.PI/2);
+
+			radiusReductionLeft = xProtrusionLeft / Math.sin(furthestLeftAngle + Math.PI/2);
+
+			// Ensure we actually need to reduce the size of the chart
+			radiusReductionRight = (isNumber(radiusReductionRight)) ? radiusReductionRight : 0;
+			radiusReductionLeft = (isNumber(radiusReductionLeft)) ? radiusReductionLeft : 0;
+
+			this.drawingArea = largestPossibleRadius - (radiusReductionLeft + radiusReductionRight)/2;
+
+			//this.drawingArea = min([maxWidthRadius, (this.height - (2 * (this.pointLabelFontSize + 5)))/2])
+			this.setCenterPoint(radiusReductionLeft, radiusReductionRight);
+
+		},
+		setCenterPoint: function(leftMovement, rightMovement){
+
+			var maxRight = this.width - rightMovement - this.drawingArea,
+				maxLeft = leftMovement + this.drawingArea;
+
+			this.xCenter = (maxLeft + maxRight)/2;
+			// Always vertically in the centre as the text height doesn't change
+			this.yCenter = (this.height/2);
+		},
+
+		getIndexAngle : function(index){
+			var angleMultiplier = (Math.PI * 2) / this.valuesCount;
+			// Start from the top instead of right, so remove a quarter of the circle
+
+			return index * angleMultiplier - (Math.PI/2);
+		},
+		getPointPosition : function(index, distanceFromCenter){
+			var thisAngle = this.getIndexAngle(index);
+			return {
+				x : (Math.cos(thisAngle) * distanceFromCenter) + this.xCenter,
+				y : (Math.sin(thisAngle) * distanceFromCenter) + this.yCenter
+			};
+		},
+		draw: function(){
+			if (this.display){
+				var ctx = this.ctx;
+				each(this.yLabels, function(label, index){
+					// Don't draw a centre value
+					if (index > 0){
+						var yCenterOffset = index * (this.drawingArea/this.steps),
+							yHeight = this.yCenter - yCenterOffset,
+							pointPosition;
+
+						// Draw circular lines around the scale
+						if (this.lineWidth > 0){
+							ctx.strokeStyle = this.lineColor;
+							ctx.lineWidth = this.lineWidth;
+
+							if(this.lineArc){
+								ctx.beginPath();
+								ctx.arc(this.xCenter, this.yCenter, yCenterOffset, 0, Math.PI*2);
+								ctx.closePath();
+								ctx.stroke();
+							} else{
+								ctx.beginPath();
+								for (var i=0;i<this.valuesCount;i++)
+								{
+									pointPosition = this.getPointPosition(i, this.calculateCenterOffset(this.min + (index * this.stepValue)));
+									if (i === 0){
+										ctx.moveTo(pointPosition.x, pointPosition.y);
+									} else {
+										ctx.lineTo(pointPosition.x, pointPosition.y);
+									}
+								}
+								ctx.closePath();
+								ctx.stroke();
+							}
+						}
+						if(this.showLabels){
+							ctx.font = fontString(this.fontSize,this.fontStyle,this.fontFamily);
+							if (this.showLabelBackdrop){
+								var labelWidth = ctx.measureText(label).width;
+								ctx.fillStyle = this.backdropColor;
+								ctx.fillRect(
+									this.xCenter - labelWidth/2 - this.backdropPaddingX,
+									yHeight - this.fontSize/2 - this.backdropPaddingY,
+									labelWidth + this.backdropPaddingX*2,
+									this.fontSize + this.backdropPaddingY*2
+								);
+							}
+							ctx.textAlign = 'center';
+							ctx.textBaseline = "middle";
+							ctx.fillStyle = this.fontColor;
+							ctx.fillText(label, this.xCenter, yHeight);
+						}
+					}
+				}, this);
+
+				if (!this.lineArc){
+					ctx.lineWidth = this.angleLineWidth;
+					ctx.strokeStyle = this.angleLineColor;
+					for (var i = this.valuesCount - 1; i >= 0; i--) {
+						if (this.angleLineWidth > 0){
+							var outerPosition = this.getPointPosition(i, this.calculateCenterOffset(this.max));
+							ctx.beginPath();
+							ctx.moveTo(this.xCenter, this.yCenter);
+							ctx.lineTo(outerPosition.x, outerPosition.y);
+							ctx.stroke();
+							ctx.closePath();
+						}
+						// Extra 3px out for some label spacing
+						var pointLabelPosition = this.getPointPosition(i, this.calculateCenterOffset(this.max) + 5);
+						ctx.font = fontString(this.pointLabelFontSize,this.pointLabelFontStyle,this.pointLabelFontFamily);
+						ctx.fillStyle = this.pointLabelFontColor;
+
+						var labelsCount = this.labels.length,
+							halfLabelsCount = this.labels.length/2,
+							quarterLabelsCount = halfLabelsCount/2,
+							upperHalf = (i < quarterLabelsCount || i > labelsCount - quarterLabelsCount),
+							exactQuarter = (i === quarterLabelsCount || i === labelsCount - quarterLabelsCount);
+						if (i === 0){
+							ctx.textAlign = 'center';
+						} else if(i === halfLabelsCount){
+							ctx.textAlign = 'center';
+						} else if (i < halfLabelsCount){
+							ctx.textAlign = 'left';
+						} else {
+							ctx.textAlign = 'right';
+						}
+
+						// Set the correct text baseline based on outer positioning
+						if (exactQuarter){
+							ctx.textBaseline = 'middle';
+						} else if (upperHalf){
+							ctx.textBaseline = 'bottom';
+						} else {
+							ctx.textBaseline = 'top';
+						}
+
+						ctx.fillText(this.labels[i], pointLabelPosition.x, pointLabelPosition.y);
+					}
+				}
+			}
+		}
+	});
+
+	// Attach global event to resize each chart instance when the browser resizes
+	helpers.addEvent(window, "resize", (function(){
+		// Basic debounce of resize function so it doesn't hurt performance when resizing browser.
+		var timeout;
+		return function(){
+			clearTimeout(timeout);
+			timeout = setTimeout(function(){
+				each(Chart.instances,function(instance){
+					// If the responsive flag is set in the chart instance config
+					// Cascade the resize event down to the chart.
+					if (instance.options.responsive){
+						instance.resize(instance.render, true);
+					}
+				});
+			}, 50);
+		};
+	})());
+
+
+	if (amd) {
+		define(function(){
+			return Chart;
+		});
+	} else if (typeof module === 'object' && module.exports) {
+		module.exports = Chart;
+	}
+
+	root.Chart = Chart;
+
+	Chart.noConflict = function(){
+		root.Chart = previous;
+		return Chart;
+	};
+
+}).call(this);
+
+(function(){
+	"use strict";
+
+	var root = this,
+		Chart = root.Chart,
+		helpers = Chart.helpers;
+
+
+	var defaultConfig = {
+		//Boolean - Whether the scale should start at zero, or an order of magnitude down from the lowest value
+		scaleBeginAtZero : true,
+
+		//Boolean - Whether grid lines are shown across the chart
+		scaleShowGridLines : true,
+
+		//String - Colour of the grid lines
+		scaleGridLineColor : "rgba(0,0,0,.05)",
+
+		//Number - Width of the grid lines
+		scaleGridLineWidth : 1,
+
+		//Boolean - Whether to show horizontal lines (except X axis)
+		scaleShowHorizontalLines: true,
+
+		//Boolean - Whether to show vertical lines (except Y axis)
+		scaleShowVerticalLines: true,
+
+		//Boolean - If there is a stroke on each bar
+		barShowStroke : true,
+
+		//Number - Pixel width of the bar stroke
+		barStrokeWidth : 2,
+
+		//Number - Spacing between each of the X value sets
+		barValueSpacing : 5,
+
+		//Number - Spacing between data sets within X values
+		barDatasetSpacing : 1,
+
+		//String - A legend template
+		legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<datasets.length; i++){%><li><span style=\"background-color:<%=datasets[i].fillColor%>\"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>"
+
+	};
+
+
+	Chart.Type.extend({
+		name: "Bar",
+		defaults : defaultConfig,
+		initialize:  function(data){
+
+			//Expose options as a scope variable here so we can access it in the ScaleClass
+			var options = this.options;
+
+			this.ScaleClass = Chart.Scale.extend({
+				offsetGridLines : true,
+				calculateBarX : function(datasetCount, datasetIndex, barIndex){
+					//Reusable method for calculating the xPosition of a given bar based on datasetIndex & width of the bar
+					var xWidth = this.calculateBaseWidth(),
+						xAbsolute = this.calculateX(barIndex) - (xWidth/2),
+						barWidth = this.calculateBarWidth(datasetCount);
+
+					return xAbsolute + (barWidth * datasetIndex) + (datasetIndex * options.barDatasetSpacing) + barWidth/2;
+				},
+				calculateBaseWidth : function(){
+					return (this.calculateX(1) - this.calculateX(0)) - (2*options.barValueSpacing);
+				},
+				calculateBarWidth : function(datasetCount){
+					//The padding between datasets is to the right of each bar, providing that there are more than 1 dataset
+					var baseWidth = this.calculateBaseWidth() - ((datasetCount - 1) * options.barDatasetSpacing);
+
+					return (baseWidth / datasetCount);
+				}
+			});
+
+			this.datasets = [];
+
+			//Set up tooltip events on the chart
+			if (this.options.showTooltips){
+				helpers.bindEvents(this, this.options.tooltipEvents, function(evt){
+					var activeBars = (evt.type !== 'mouseout') ? this.getBarsAtEvent(evt) : [];
+
+					this.eachBars(function(bar){
+						bar.restore(['fillColor', 'strokeColor']);
+					});
+					helpers.each(activeBars, function(activeBar){
+						activeBar.fillColor = activeBar.highlightFill;
+						activeBar.strokeColor = activeBar.highlightStroke;
+					});
+					this.showTooltip(activeBars);
+				});
+			}
+
+			//Declare the extension of the default point, to cater for the options passed in to the constructor
+			this.BarClass = Chart.Rectangle.extend({
+				strokeWidth : this.options.barStrokeWidth,
+				showStroke : this.options.barShowStroke,
+				ctx : this.chart.ctx
+			});
+
+			//Iterate through each of the datasets, and build this into a property of the chart
+			helpers.each(data.datasets,function(dataset,datasetIndex){
+
+				var datasetObject = {
+					label : dataset.label || null,
+					fillColor : dataset.fillColor,
+					strokeColor : dataset.strokeColor,
+					bars : []
+				};
+
+				this.datasets.push(datasetObject);
+
+				helpers.each(dataset.data,function(dataPoint,index){
+					//Add a new point for each piece of data, passing any required data to draw.
+					datasetObject.bars.push(new this.BarClass({
+						value : dataPoint,
+						label : data.labels[index],
+						datasetLabel: dataset.label,
+						strokeColor : dataset.strokeColor,
+						fillColor : dataset.fillColor,
+						highlightFill : dataset.highlightFill || dataset.fillColor,
+						highlightStroke : dataset.highlightStroke || dataset.strokeColor
+					}));
+				},this);
+
+			},this);
+
+			this.buildScale(data.labels);
+
+			this.BarClass.prototype.base = this.scale.endPoint;
+
+			this.eachBars(function(bar, index, datasetIndex){
+				helpers.extend(bar, {
+					width : this.scale.calculateBarWidth(this.datasets.length),
+					x: this.scale.calculateBarX(this.datasets.length, datasetIndex, index),
+					y: this.scale.endPoint
+				});
+				bar.save();
+			}, this);
+
+			this.render();
+		},
+		update : function(){
+			this.scale.update();
+			// Reset any highlight colours before updating.
+			helpers.each(this.activeElements, function(activeElement){
+				activeElement.restore(['fillColor', 'strokeColor']);
+			});
+
+			this.eachBars(function(bar){
+				bar.save();
+			});
+			this.render();
+		},
+		eachBars : function(callback){
+			helpers.each(this.datasets,function(dataset, datasetIndex){
+				helpers.each(dataset.bars, callback, this, datasetIndex);
+			},this);
+		},
+		getBarsAtEvent : function(e){
+			var barsArray = [],
+				eventPosition = helpers.getRelativePosition(e),
+				datasetIterator = function(dataset){
+					barsArray.push(dataset.bars[barIndex]);
+				},
+				barIndex;
+
+			for (var datasetIndex = 0; datasetIndex < this.datasets.length; datasetIndex++) {
+				for (barIndex = 0; barIndex < this.datasets[datasetIndex].bars.length; barIndex++) {
+					if (this.datasets[datasetIndex].bars[barIndex].inRange(eventPosition.x,eventPosition.y)){
+						helpers.each(this.datasets, datasetIterator);
+						return barsArray;
+					}
+				}
+			}
+
+			return barsArray;
+		},
+		buildScale : function(labels){
+			var self = this;
+
+			var dataTotal = function(){
+				var values = [];
+				self.eachBars(function(bar){
+					values.push(bar.value);
+				});
+				return values;
+			};
+
+			var scaleOptions = {
+				templateString : this.options.scaleLabel,
+				height : this.chart.height,
+				width : this.chart.width,
+				ctx : this.chart.ctx,
+				textColor : this.options.scaleFontColor,
+				fontSize : this.options.scaleFontSize,
+				fontStyle : this.options.scaleFontStyle,
+				fontFamily : this.options.scaleFontFamily,
+				valuesCount : labels.length,
+				beginAtZero : this.options.scaleBeginAtZero,
+				integersOnly : this.options.scaleIntegersOnly,
+				calculateYRange: function(currentHeight){
+					var updatedRanges = helpers.calculateScaleRange(
+						dataTotal(),
+						currentHeight,
+						this.fontSize,
+						this.beginAtZero,
+						this.integersOnly
+					);
+					helpers.extend(this, updatedRanges);
+				},
+				xLabels : labels,
+				font : helpers.fontString(this.options.scaleFontSize, this.options.scaleFontStyle, this.options.scaleFontFamily),
+				lineWidth : this.options.scaleLineWidth,
+				lineColor : this.options.scaleLineColor,
+				showHorizontalLines : this.options.scaleShowHorizontalLines,
+				showVerticalLines : this.options.scaleShowVerticalLines,
+				gridLineWidth : (this.options.scaleShowGridLines) ? this.options.scaleGridLineWidth : 0,
+				gridLineColor : (this.options.scaleShowGridLines) ? this.options.scaleGridLineColor : "rgba(0,0,0,0)",
+				padding : (this.options.showScale) ? 0 : (this.options.barShowStroke) ? this.options.barStrokeWidth : 0,
+				showLabels : this.options.scaleShowLabels,
+				display : this.options.showScale
+			};
+
+			if (this.options.scaleOverride){
+				helpers.extend(scaleOptions, {
+					calculateYRange: helpers.noop,
+					steps: this.options.scaleSteps,
+					stepValue: this.options.scaleStepWidth,
+					min: this.options.scaleStartValue,
+					max: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)
+				});
+			}
+
+			this.scale = new this.ScaleClass(scaleOptions);
+		},
+		addData : function(valuesArray,label){
+			//Map the values array for each of the datasets
+			helpers.each(valuesArray,function(value,datasetIndex){
+				//Add a new point for each piece of data, passing any required data to draw.
+				this.datasets[datasetIndex].bars.push(new this.BarClass({
+					value : value,
+					label : label,
+					x: this.scale.calculateBarX(this.datasets.length, datasetIndex, this.scale.valuesCount+1),
+					y: this.scale.endPoint,
+					width : this.scale.calculateBarWidth(this.datasets.length),
+					base : this.scale.endPoint,
+					strokeColor : this.datasets[datasetIndex].strokeColor,
+					fillColor : this.datasets[datasetIndex].fillColor
+				}));
+			},this);
+
+			this.scale.addXLabel(label);
+			//Then re-render the chart.
+			this.update();
+		},
+		removeData : function(){
+			this.scale.removeXLabel();
+			//Then re-render the chart.
+			helpers.each(this.datasets,function(dataset){
+				dataset.bars.shift();
+			},this);
+			this.update();
+		},
+		reflow : function(){
+			helpers.extend(this.BarClass.prototype,{
+				y: this.scale.endPoint,
+				base : this.scale.endPoint
+			});
+			var newScaleProps = helpers.extend({
+				height : this.chart.height,
+				width : this.chart.width
+			});
+			this.scale.update(newScaleProps);
+		},
+		draw : function(ease){
+			var easingDecimal = ease || 1;
+			this.clear();
+
+			var ctx = this.chart.ctx;
+
+			this.scale.draw(easingDecimal);
+
+			//Draw all the bars for each dataset
+			helpers.each(this.datasets,function(dataset,datasetIndex){
+				helpers.each(dataset.bars,function(bar,index){
+					if (bar.hasValue()){
+						bar.base = this.scale.endPoint;
+						//Transition then draw
+						bar.transition({
+							x : this.scale.calculateBarX(this.datasets.length, datasetIndex, index),
+							y : this.scale.calculateY(bar.value),
+							width : this.scale.calculateBarWidth(this.datasets.length)
+						}, easingDecimal).draw();
+					}
+				},this);
+
+			},this);
+		}
+	});
+
+
+}).call(this);
+
+(function(){
+	"use strict";
+
+	var root = this,
+		Chart = root.Chart,
+		//Cache a local reference to Chart.helpers
+		helpers = Chart.helpers;
+
+	var defaultConfig = {
+		//Boolean - Whether we should show a stroke on each segment
+		segmentShowStroke : true,
+
+		//String - The colour of each segment stroke
+		segmentStrokeColor : "#fff",
+
+		//Number - The width of each segment stroke
+		segmentStrokeWidth : 2,
+
+		//The percentage of the chart that we cut out of the middle.
+		percentageInnerCutout : 50,
+
+		//Number - Amount of animation steps
+		animationSteps : 100,
+
+		//String - Animation easing effect
+		animationEasing : "easeOutBounce",
+
+		//Boolean - Whether we animate the rotation of the Doughnut
+		animateRotate : true,
+
+		//Boolean - Whether we animate scaling the Doughnut from the centre
+		animateScale : false,
+
+		//String - A legend template
+		legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<segments.length; i++){%><li><span style=\"background-color:<%=segments[i].fillColor%>\"></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>"
+
+	};
+
+
+	Chart.Type.extend({
+		//Passing in a name registers this chart in the Chart namespace
+		name: "Doughnut",
+		//Providing a defaults will also register the deafults in the chart namespace
+		defaults : defaultConfig,
+		//Initialize is fired when the chart is initialized - Data is passed in as a parameter
+		//Config is automatically merged by the core of Chart.js, and is available at this.options
+		initialize:  function(data){
+
+			//Declare segments as a static property to prevent inheriting across the Chart type prototype
+			this.segments = [];
+			this.outerRadius = (helpers.min([this.chart.width,this.chart.height]) -	this.options.segmentStrokeWidth/2)/2;
+
+			this.SegmentArc = Chart.Arc.extend({
+				ctx : this.chart.ctx,
+				x : this.chart.width/2,
+				y : this.chart.height/2
+			});
+
+			//Set up tooltip events on the chart
+			if (this.options.showTooltips){
+				helpers.bindEvents(this, this.options.tooltipEvents, function(evt){
+					var activeSegments = (evt.type !== 'mouseout') ? this.getSegmentsAtEvent(evt) : [];
+
+					helpers.each(this.segments,function(segment){
+						segment.restore(["fillColor"]);
+					});
+					helpers.each(activeSegments,function(activeSegment){
+						activeSegment.fillColor = activeSegment.highlightColor;
+					});
+					this.showTooltip(activeSegments);
+				});
+			}
+			this.calculateTotal(data);
+
+			helpers.each(data,function(datapoint, index){
+				this.addData(datapoint, index, true);
+			},this);
+
+			this.render();
+		},
+		getSegmentsAtEvent : function(e){
+			var segmentsArray = [];
+
+			var location = helpers.getRelativePosition(e);
+
+			helpers.each(this.segments,function(segment){
+				if (segment.inRange(location.x,location.y)) segmentsArray.push(segment);
+			},this);
+			return segmentsArray;
+		},
+		addData : function(segment, atIndex, silent){
+			var index = atIndex || this.segments.length;
+			this.segments.splice(index, 0, new this.SegmentArc({
+				value : segment.value,
+				outerRadius : (this.options.animateScale) ? 0 : this.outerRadius,
+				innerRadius : (this.options.animateScale) ? 0 : (this.outerRadius/100) * this.options.percentageInnerCutout,
+				fillColor : segment.color,
+				highlightColor : segment.highlight || segment.color,
+				showStroke : this.options.segmentShowStroke,
+				strokeWidth : this.options.segmentStrokeWidth,
+				strokeColor : this.options.segmentStrokeColor,
+				startAngle : Math.PI * 1.5,
+				circumference : (this.options.animateRotate) ? 0 : this.calculateCircumference(segment.value),
+				label : segment.label
+			}));
+			if (!silent){
+				this.reflow();
+				this.update();
+			}
+		},
+		calculateCircumference : function(value){
+			return (Math.PI*2)*(Math.abs(value) / this.total);
+		},
+		calculateTotal : function(data){
+			this.total = 0;
+			helpers.each(data,function(segment){
+				this.total += Math.abs(segment.value);
+			},this);
+		},
+		update : function(){
+			this.calculateTotal(this.segments);
+
+			// Reset any highlight colours before updating.
+			helpers.each(this.activeElements, function(activeElement){
+				activeElement.restore(['fillColor']);
+			});
+
+			helpers.each(this.segments,function(segment){
+				segment.save();
+			});
+			this.render();
+		},
+
+		removeData: function(atIndex){
+			var indexToDelete = (helpers.isNumber(atIndex)) ? atIndex : this.segments.length-1;
+			this.segments.splice(indexToDelete, 1);
+			this.reflow();
+			this.update();
+		},
+
+		reflow : function(){
+			helpers.extend(this.SegmentArc.prototype,{
+				x : this.chart.width/2,
+				y : this.chart.height/2
+			});
+			this.outerRadius = (helpers.min([this.chart.width,this.chart.height]) -	this.options.segmentStrokeWidth/2)/2;
+			helpers.each(this.segments, function(segment){
+				segment.update({
+					outerRadius : this.outerRadius,
+					innerRadius : (this.outerRadius/100) * this.options.percentageInnerCutout
+				});
+			}, this);
+		},
+		draw : function(easeDecimal){
+			var animDecimal = (easeDecimal) ? easeDecimal : 1;
+			this.clear();
+			helpers.each(this.segments,function(segment,index){
+				segment.transition({
+					circumference : this.calculateCircumference(segment.value),
+					outerRadius : this.outerRadius,
+					innerRadius : (this.outerRadius/100) * this.options.percentageInnerCutout
+				},animDecimal);
+
+				segment.endAngle = segment.startAngle + segment.circumference;
+
+				segment.draw();
+				if (index === 0){
+					segment.startAngle = Math.PI * 1.5;
+				}
+				//Check to see if it's the last segment, if not get the next and update the start angle
+				if (index < this.segments.length-1){
+					this.segments[index+1].startAngle = segment.endAngle;
+				}
+			},this);
+
+		}
+	});
+
+	Chart.types.Doughnut.extend({
+		name : "Pie",
+		defaults : helpers.merge(defaultConfig,{percentageInnerCutout : 0})
+	});
+
+}).call(this);
+(function(){
+	"use strict";
+
+	var root = this,
+		Chart = root.Chart,
+		helpers = Chart.helpers;
+
+	var defaultConfig = {
+
+		///Boolean - Whether grid lines are shown across the chart
+		scaleShowGridLines : true,
+
+		//String - Colour of the grid lines
+		scaleGridLineColor : "rgba(0,0,0,.05)",
+
+		//Number - Width of the grid lines
+		scaleGridLineWidth : 1,
+
+		//Boolean - Whether to show horizontal lines (except X axis)
+		scaleShowHorizontalLines: true,
+
+		//Boolean - Whether to show vertical lines (except Y axis)
+		scaleShowVerticalLines: true,
+
+		//Boolean - Whether the line is curved between points
+		bezierCurve : true,
+
+		//Number - Tension of the bezier curve between points
+		bezierCurveTension : 0.4,
+
+		//Boolean - Whether to show a dot for each point
+		pointDot : true,
+
+		//Number - Radius of each point dot in pixels
+		pointDotRadius : 4,
+
+		//Number - Pixel width of point dot stroke
+		pointDotStrokeWidth : 1,
+
+		//Number - amount extra to add to the radius to cater for hit detection outside the drawn point
+		pointHitDetectionRadius : 20,
+
+		//Boolean - Whether to show a stroke for datasets
+		datasetStroke : true,
+
+		//Number - Pixel width of dataset stroke
+		datasetStrokeWidth : 2,
+
+		//Boolean - Whether to fill the dataset with a colour
+		datasetFill : true,
+
+		//String - A legend template
+		legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<datasets.length; i++){%><li><span style=\"background-color:<%=datasets[i].strokeColor%>\"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>"
+
+	};
+
+
+	Chart.Type.extend({
+		name: "Line",
+		defaults : defaultConfig,
+		initialize:  function(data){
+			//Declare the extension of the default point, to cater for the options passed in to the constructor
+			this.PointClass = Chart.Point.extend({
+				strokeWidth : this.options.pointDotStrokeWidth,
+				radius : this.options.pointDotRadius,
+				display: this.options.pointDot,
+				hitDetectionRadius : this.options.pointHitDetectionRadius,
+				ctx : this.chart.ctx,
+				inRange : function(mouseX){
+					return (Math.pow(mouseX-this.x, 2) < Math.pow(this.radius + this.hitDetectionRadius,2));
+				}
+			});
+
+			this.datasets = [];
+
+			//Set up tooltip events on the chart
+			if (this.options.showTooltips){
+				helpers.bindEvents(this, this.options.tooltipEvents, function(evt){
+					var activePoints = (evt.type !== 'mouseout') ? this.getPointsAtEvent(evt) : [];
+					this.eachPoints(function(point){
+						point.restore(['fillColor', 'strokeColor']);
+					});
+					helpers.each(activePoints, function(activePoint){
+						activePoint.fillColor = activePoint.highlightFill;
+						activePoint.strokeColor = activePoint.highlightStroke;
+					});
+					this.showTooltip(activePoints);
+				});
+			}
+
+			//Iterate through each of the datasets, and build this into a property of the chart
+			helpers.each(data.datasets,function(dataset){
+
+				var datasetObject = {
+					label : dataset.label || null,
+					fillColor : dataset.fillColor,
+					strokeColor : dataset.strokeColor,
+					pointColor : dataset.pointColor,
+					pointStrokeColor : dataset.pointStrokeColor,
+					points : []
+				};
+
+				this.datasets.push(datasetObject);
+
+
+				helpers.each(dataset.data,function(dataPoint,index){
+					//Add a new point for each piece of data, passing any required data to draw.
+					datasetObject.points.push(new this.PointClass({
+						value : dataPoint,
+						label : data.labels[index],
+						datasetLabel: dataset.label,
+						strokeColor : dataset.pointStrokeColor,
+						fillColor : dataset.pointColor,
+						highlightFill : dataset.pointHighlightFill || dataset.pointColor,
+						highlightStroke : dataset.pointHighlightStroke || dataset.pointStrokeColor
+					}));
+				},this);
+
+				this.buildScale(data.labels);
+
+
+				this.eachPoints(function(point, index){
+					helpers.extend(point, {
+						x: this.scale.calculateX(index),
+						y: this.scale.endPoint
+					});
+					point.save();
+				}, this);
+
+			},this);
+
+
+			this.render();
+		},
+		update : function(){
+			this.scale.update();
+			// Reset any highlight colours before updating.
+			helpers.each(this.activeElements, function(activeElement){
+				activeElement.restore(['fillColor', 'strokeColor']);
+			});
+			this.eachPoints(function(point){
+				point.save();
+			});
+			this.render();
+		},
+		eachPoints : function(callback){
+			helpers.each(this.datasets,function(dataset){
+				helpers.each(dataset.points,callback,this);
+			},this);
+		},
+		getPointsAtEvent : function(e){
+			var pointsArray = [],
+				eventPosition = helpers.getRelativePosition(e);
+			helpers.each(this.datasets,function(dataset){
+				helpers.each(dataset.points,function(point){
+					if (point.inRange(eventPosition.x,eventPosition.y)) pointsArray.push(point);
+				});
+			},this);
+			return pointsArray;
+		},
+		buildScale : function(labels){
+			var self = this;
+
+			var dataTotal = function(){
+				var values = [];
+				self.eachPoints(function(point){
+					values.push(point.value);
+				});
+
+				return values;
+			};
+
+			var scaleOptions = {
+				templateString : this.options.scaleLabel,
+				height : this.chart.height,
+				width : this.chart.width,
+				ctx : this.chart.ctx,
+				textColor : this.options.scaleFontColor,
+				fontSize : this.options.scaleFontSize,
+				fontStyle : this.options.scaleFontStyle,
+				fontFamily : this.options.scaleFontFamily,
+				valuesCount : labels.length,
+				beginAtZero : this.options.scaleBeginAtZero,
+				integersOnly : this.options.scaleIntegersOnly,
+				calculateYRange : function(currentHeight){
+					var updatedRanges = helpers.calculateScaleRange(
+						dataTotal(),
+						currentHeight,
+						this.fontSize,
+						this.beginAtZero,
+						this.integersOnly
+					);
+					helpers.extend(this, updatedRanges);
+				},
+				xLabels : labels,
+				font : helpers.fontString(this.options.scaleFontSize, this.options.scaleFontStyle, this.options.scaleFontFamily),
+				lineWidth : this.options.scaleLineWidth,
+				lineColor : this.options.scaleLineColor,
+				showHorizontalLines : this.options.scaleShowHorizontalLines,
+				showVerticalLines : this.options.scaleShowVerticalLines,
+				gridLineWidth : (this.options.scaleShowGridLines) ? this.options.scaleGridLineWidth : 0,
+				gridLineColor : (this.options.scaleShowGridLines) ? this.options.scaleGridLineColor : "rgba(0,0,0,0)",
+				padding: (this.options.showScale) ? 0 : this.options.pointDotRadius + this.options.pointDotStrokeWidth,
+				showLabels : this.options.scaleShowLabels,
+				display : this.options.showScale
+			};
+
+			if (this.options.scaleOverride){
+				helpers.extend(scaleOptions, {
+					calculateYRange: helpers.noop,
+					steps: this.options.scaleSteps,
+					stepValue: this.options.scaleStepWidth,
+					min: this.options.scaleStartValue,
+					max: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)
+				});
+			}
+
+
+			this.scale = new Chart.Scale(scaleOptions);
+		},
+		addData : function(valuesArray,label){
+			//Map the values array for each of the datasets
+
+			helpers.each(valuesArray,function(value,datasetIndex){
+				//Add a new point for each piece of data, passing any required data to draw.
+				this.datasets[datasetIndex].points.push(new this.PointClass({
+					value : value,
+					label : label,
+					x: this.scale.calculateX(this.scale.valuesCount+1),
+					y: this.scale.endPoint,
+					strokeColor : this.datasets[datasetIndex].pointStrokeColor,
+					fillColor : this.datasets[datasetIndex].pointColor
+				}));
+			},this);
+
+			this.scale.addXLabel(label);
+			//Then re-render the chart.
+			this.update();
+		},
+		removeData : function(){
+			this.scale.removeXLabel();
+			//Then re-render the chart.
+			helpers.each(this.datasets,function(dataset){
+				dataset.points.shift();
+			},this);
+			this.update();
+		},
+		reflow : function(){
+			var newScaleProps = helpers.extend({
+				height : this.chart.height,
+				width : this.chart.width
+			});
+			this.scale.update(newScaleProps);
+		},
+		draw : function(ease){
+			var easingDecimal = ease || 1;
+			this.clear();
+
+			var ctx = this.chart.ctx;
+
+			// Some helper methods for getting the next/prev points
+			var hasValue = function(item){
+				return item.value !== null;
+			},
+			nextPoint = function(point, collection, index){
+				return helpers.findNextWhere(collection, hasValue, index) || point;
+			},
+			previousPoint = function(point, collection, index){
+				return helpers.findPreviousWhere(collection, hasValue, index) || point;
+			};
+
+			this.scale.draw(easingDecimal);
+
+
+			helpers.each(this.datasets,function(dataset){
+				var pointsWithValues = helpers.where(dataset.points, hasValue);
+
+				//Transition each point first so that the line and point drawing isn't out of sync
+				//We can use this extra loop to calculate the control points of this dataset also in this loop
+
+				helpers.each(dataset.points, function(point, index){
+					if (point.hasValue()){
+						point.transition({
+							y : this.scale.calculateY(point.value),
+							x : this.scale.calculateX(index)
+						}, easingDecimal);
+					}
+				},this);
+
+
+				// Control points need to be calculated in a seperate loop, because we need to know the current x/y of the point
+				// This would cause issues when there is no animation, because the y of the next point would be 0, so beziers would be skewed
+				if (this.options.bezierCurve){
+					helpers.each(pointsWithValues, function(point, index){
+						var tension = (index > 0 && index < pointsWithValues.length - 1) ? this.options.bezierCurveTension : 0;
+						point.controlPoints = helpers.splineCurve(
+							previousPoint(point, pointsWithValues, index),
+							point,
+							nextPoint(point, pointsWithValues, index),
+							tension
+						);
+
+						// Prevent the bezier going outside of the bounds of the graph
+
+						// Cap puter bezier handles to the upper/lower scale bounds
+						if (point.controlPoints.outer.y > this.scale.endPoint){
+							point.controlPoints.outer.y = this.scale.endPoint;
+						}
+						else if (point.controlPoints.outer.y < this.scale.startPoint){
+							point.controlPoints.outer.y = this.scale.startPoint;
+						}
+
+						// Cap inner bezier handles to the upper/lower scale bounds
+						if (point.controlPoints.inner.y > this.scale.endPoint){
+							point.controlPoints.inner.y = this.scale.endPoint;
+						}
+						else if (point.controlPoints.inner.y < this.scale.startPoint){
+							point.controlPoints.inner.y = this.scale.startPoint;
+						}
+					},this);
+				}
+
+
+				//Draw the line between all the points
+				ctx.lineWidth = this.options.datasetStrokeWidth;
+				ctx.strokeStyle = dataset.strokeColor;
+				ctx.beginPath();
+
+				helpers.each(pointsWithValues, function(point, index){
+					if (index === 0){
+						ctx.moveTo(point.x, point.y);
+					}
+					else{
+						if(this.options.bezierCurve){
+							var previous = previousPoint(point, pointsWithValues, index);
+
+							ctx.bezierCurveTo(
+								previous.controlPoints.outer.x,
+								previous.controlPoints.outer.y,
+								point.controlPoints.inner.x,
+								point.controlPoints.inner.y,
+								point.x,
+								point.y
+							);
+						}
+						else{
+							ctx.lineTo(point.x,point.y);
+						}
+					}
+				}, this);
+
+				ctx.stroke();
+
+				if (this.options.datasetFill && pointsWithValues.length > 0){
+					//Round off the line by going to the base of the chart, back to the start, then fill.
+					ctx.lineTo(pointsWithValues[pointsWithValues.length - 1].x, this.scale.endPoint);
+					ctx.lineTo(pointsWithValues[0].x, this.scale.endPoint);
+					ctx.fillStyle = dataset.fillColor;
+					ctx.closePath();
+					ctx.fill();
+				}
+
+				//Now draw the points over the line
+				//A little inefficient double looping, but better than the line
+				//lagging behind the point positions
+				helpers.each(pointsWithValues,function(point){
+					point.draw();
+				});
+			},this);
+		}
+	});
+
+
+}).call(this);
+
+(function(){
+	"use strict";
+
+	var root = this,
+		Chart = root.Chart,
+		//Cache a local reference to Chart.helpers
+		helpers = Chart.helpers;
+
+	var defaultConfig = {
+		//Boolean - Show a backdrop to the scale label
+		scaleShowLabelBackdrop : true,
+
+		//String - The colour of the label backdrop
+		scaleBackdropColor : "rgba(255,255,255,0.75)",
+
+		// Boolean - Whether the scale should begin at zero
+		scaleBeginAtZero : true,
+
+		//Number - The backdrop padding above & below the label in pixels
+		scaleBackdropPaddingY : 2,
+
+		//Number - The backdrop padding to the side of the label in pixels
+		scaleBackdropPaddingX : 2,
+
+		//Boolean - Show line for each value in the scale
+		scaleShowLine : true,
+
+		//Boolean - Stroke a line around each segment in the chart
+		segmentShowStroke : true,
+
+		//String - The colour of the stroke on each segement.
+		segmentStrokeColor : "#fff",
+
+		//Number - The width of the stroke value in pixels
+		segmentStrokeWidth : 2,
+
+		//Number - Amount of animation steps
+		animationSteps : 100,
+
+		//String - Animation easing effect.
+		animationEasing : "easeOutBounce",
+
+		//Boolean - Whether to animate the rotation of the chart
+		animateRotate : true,
+
+		//Boolean - Whether to animate scaling the chart from the centre
+		animateScale : false,
+
+		//String - A legend template
+		legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<segments.length; i++){%><li><span style=\"background-color:<%=segments[i].fillColor%>\"></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>"
+	};
+
+
+	Chart.Type.extend({
+		//Passing in a name registers this chart in the Chart namespace
+		name: "PolarArea",
+		//Providing a defaults will also register the deafults in the chart namespace
+		defaults : defaultConfig,
+		//Initialize is fired when the chart is initialized - Data is passed in as a parameter
+		//Config is automatically merged by the core of Chart.js, and is available at this.options
+		initialize:  function(data){
+			this.segments = [];
+			//Declare segment class as a chart instance specific class, so it can share props for this instance
+			this.SegmentArc = Chart.Arc.extend({
+				showStroke : this.options.segmentShowStroke,
+				strokeWidth : this.options.segmentStrokeWidth,
+				strokeColor : this.options.segmentStrokeColor,
+				ctx : this.chart.ctx,
+				innerRadius : 0,
+				x : this.chart.width/2,
+				y : this.chart.height/2
+			});
+			this.scale = new Chart.RadialScale({
+				display: this.options.showScale,
+				fontStyle: this.options.scaleFontStyle,
+				fontSize: this.options.scaleFontSize,
+				fontFamily: this.options.scaleFontFamily,
+				fontColor: this.options.scaleFontColor,
+				showLabels: this.options.scaleShowLabels,
+				showLabelBackdrop: this.options.scaleShowLabelBackdrop,
+				backdropColor: this.options.scaleBackdropColor,
+				backdropPaddingY : this.options.scaleBackdropPaddingY,
+				backdropPaddingX: this.options.scaleBackdropPaddingX,
+				lineWidth: (this.options.scaleShowLine) ? this.options.scaleLineWidth : 0,
+				lineColor: this.options.scaleLineColor,
+				lineArc: true,
+				width: this.chart.width,
+				height: this.chart.height,
+				xCenter: this.chart.width/2,
+				yCenter: this.chart.height/2,
+				ctx : this.chart.ctx,
+				templateString: this.options.scaleLabel,
+				valuesCount: data.length
+			});
+
+			this.updateScaleRange(data);
+
+			this.scale.update();
+
+			helpers.each(data,function(segment,index){
+				this.addData(segment,index,true);
+			},this);
+
+			//Set up tooltip events on the chart
+			if (this.options.showTooltips){
+				helpers.bindEvents(this, this.options.tooltipEvents, function(evt){
+					var activeSegments = (evt.type !== 'mouseout') ? this.getSegmentsAtEvent(evt) : [];
+					helpers.each(this.segments,function(segment){
+						segment.restore(["fillColor"]);
+					});
+					helpers.each(activeSegments,function(activeSegment){
+						activeSegment.fillColor = activeSegment.highlightColor;
+					});
+					this.showTooltip(activeSegments);
+				});
+			}
+
+			this.render();
+		},
+		getSegmentsAtEvent : function(e){
+			var segmentsArray = [];
+
+			var location = helpers.getRelativePosition(e);
+
+			helpers.each(this.segments,function(segment){
+				if (segment.inRange(location.x,location.y)) segmentsArray.push(segment);
+			},this);
+			return segmentsArray;
+		},
+		addData : function(segment, atIndex, silent){
+			var index = atIndex || this.segments.length;
+
+			this.segments.splice(index, 0, new this.SegmentArc({
+				fillColor: segment.color,
+				highlightColor: segment.highlight || segment.color,
+				label: segment.label,
+				value: segment.value,
+				outerRadius: (this.options.animateScale) ? 0 : this.scale.calculateCenterOffset(segment.value),
+				circumference: (this.options.animateRotate) ? 0 : this.scale.getCircumference(),
+				startAngle: Math.PI * 1.5
+			}));
+			if (!silent){
+				this.reflow();
+				this.update();
+			}
+		},
+		removeData: function(atIndex){
+			var indexToDelete = (helpers.isNumber(atIndex)) ? atIndex : this.segments.length-1;
+			this.segments.splice(indexToDelete, 1);
+			this.reflow();
+			this.update();
+		},
+		calculateTotal: function(data){
+			this.total = 0;
+			helpers.each(data,function(segment){
+				this.total += segment.value;
+			},this);
+			this.scale.valuesCount = this.segments.length;
+		},
+		updateScaleRange: function(datapoints){
+			var valuesArray = [];
+			helpers.each(datapoints,function(segment){
+				valuesArray.push(segment.value);
+			});
+
+			var scaleSizes = (this.options.scaleOverride) ?
+				{
+					steps: this.options.scaleSteps,
+					stepValue: this.options.scaleStepWidth,
+					min: this.options.scaleStartValue,
+					max: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)
+				} :
+				helpers.calculateScaleRange(
+					valuesArray,
+					helpers.min([this.chart.width, this.chart.height])/2,
+					this.options.scaleFontSize,
+					this.options.scaleBeginAtZero,
+					this.options.scaleIntegersOnly
+				);
+
+			helpers.extend(
+				this.scale,
+				scaleSizes,
+				{
+					size: helpers.min([this.chart.width, this.chart.height]),
+					xCenter: this.chart.width/2,
+					yCenter: this.chart.height/2
+				}
+			);
+
+		},
+		update : function(){
+			this.calculateTotal(this.segments);
+
+			helpers.each(this.segments,function(segment){
+				segment.save();
+			});
+			
+			this.reflow();
+			this.render();
+		},
+		reflow : function(){
+			helpers.extend(this.SegmentArc.prototype,{
+				x : this.chart.width/2,
+				y : this.chart.height/2
+			});
+			this.updateScaleRange(this.segments);
+			this.scale.update();
+
+			helpers.extend(this.scale,{
+				xCenter: this.chart.width/2,
+				yCenter: this.chart.height/2
+			});
+
+			helpers.each(this.segments, function(segment){
+				segment.update({
+					outerRadius : this.scale.calculateCenterOffset(segment.value)
+				});
+			}, this);
+
+		},
+		draw : function(ease){
+			var easingDecimal = ease || 1;
+			//Clear & draw the canvas
+			this.clear();
+			helpers.each(this.segments,function(segment, index){
+				segment.transition({
+					circumference : this.scale.getCircumference(),
+					outerRadius : this.scale.calculateCenterOffset(segment.value)
+				},easingDecimal);
+
+				segment.endAngle = segment.startAngle + segment.circumference;
+
+				// If we've removed the first segment we need to set the first one to
+				// start at the top.
+				if (index === 0){
+					segment.startAngle = Math.PI * 1.5;
+				}
+
+				//Check to see if it's the last segment, if not get the next and update the start angle
+				if (index < this.segments.length - 1){
+					this.segments[index+1].startAngle = segment.endAngle;
+				}
+				segment.draw();
+			}, this);
+			this.scale.draw();
+		}
+	});
+
+}).call(this);
+(function(){
+	"use strict";
+
+	var root = this,
+		Chart = root.Chart,
+		helpers = Chart.helpers;
+
+
+
+	Chart.Type.extend({
+		name: "Radar",
+		defaults:{
+			//Boolean - Whether to show lines for each scale point
+			scaleShowLine : true,
+
+			//Boolean - Whether we show the angle lines out of the radar
+			angleShowLineOut : true,
+
+			//Boolean - Whether to show labels on the scale
+			scaleShowLabels : false,
+
+			// Boolean - Whether the scale should begin at zero
+			scaleBeginAtZero : true,
+
+			//String - Colour of the angle line
+			angleLineColor : "rgba(0,0,0,.1)",
+
+			//Number - Pixel width of the angle line
+			angleLineWidth : 1,
+
+			//String - Point label font declaration
+			pointLabelFontFamily : "'Arial'",
+
+			//String - Point label font weight
+			pointLabelFontStyle : "normal",
+
+			//Number - Point label font size in pixels
+			pointLabelFontSize : 10,
+
+			//String - Point label font colour
+			pointLabelFontColor : "#666",
+
+			//Boolean - Whether to show a dot for each point
+			pointDot : true,
+
+			//Number - Radius of each point dot in pixels
+			pointDotRadius : 3,
+
+			//Number - Pixel width of point dot stroke
+			pointDotStrokeWidth : 1,
+
+			//Number - amount extra to add to the radius to cater for hit detection outside the drawn point
+			pointHitDetectionRadius : 20,
+
+			//Boolean - Whether to show a stroke for datasets
+			datasetStroke : true,
+
+			//Number - Pixel width of dataset stroke
+			datasetStrokeWidth : 2,
+
+			//Boolean - Whether to fill the dataset with a colour
+			datasetFill : true,
+
+			//String - A legend template
+			legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<datasets.length; i++){%><li><span style=\"background-color:<%=datasets[i].strokeColor%>\"></span><%if(datasets[i].label){%><%=datasets[i].label%><%}%></li><%}%></ul>"
+
+		},
+
+		initialize: function(data){
+			this.PointClass = Chart.Point.extend({
+				strokeWidth : this.options.pointDotStrokeWidth,
+				radius : this.options.pointDotRadius,
+				display: this.options.pointDot,
+				hitDetectionRadius : this.options.pointHitDetectionRadius,
+				ctx : this.chart.ctx
+			});
+
+			this.datasets = [];
+
+			this.buildScale(data);
+
+			//Set up tooltip events on the chart
+			if (this.options.showTooltips){
+				helpers.bindEvents(this, this.options.tooltipEvents, function(evt){
+					var activePointsCollection = (evt.type !== 'mouseout') ? this.getPointsAtEvent(evt) : [];
+
+					this.eachPoints(function(point){
+						point.restore(['fillColor', 'strokeColor']);
+					});
+					helpers.each(activePointsCollection, function(activePoint){
+						activePoint.fillColor = activePoint.highlightFill;
+						activePoint.strokeColor = activePoint.highlightStroke;
+					});
+
+					this.showTooltip(activePointsCollection);
+				});
+			}
+
+			//Iterate through each of the datasets, and build this into a property of the chart
+			helpers.each(data.datasets,function(dataset){
+
+				var datasetObject = {
+					label: dataset.label || null,
+					fillColor : dataset.fillColor,
+					strokeColor : dataset.strokeColor,
+					pointColor : dataset.pointColor,
+					pointStrokeColor : dataset.pointStrokeColor,
+					points : []
+				};
+
+				this.datasets.push(datasetObject);
+
+				helpers.each(dataset.data,function(dataPoint,index){
+					//Add a new point for each piece of data, passing any required data to draw.
+					var pointPosition;
+					if (!this.scale.animation){
+						pointPosition = this.scale.getPointPosition(index, this.scale.calculateCenterOffset(dataPoint));
+					}
+					datasetObject.points.push(new this.PointClass({
+						value : dataPoint,
+						label : data.labels[index],
+						datasetLabel: dataset.label,
+						x: (this.options.animation) ? this.scale.xCenter : pointPosition.x,
+						y: (this.options.animation) ? this.scale.yCenter : pointPosition.y,
+						strokeColor : dataset.pointStrokeColor,
+						fillColor : dataset.pointColor,
+						highlightFill : dataset.pointHighlightFill || dataset.pointColor,
+						highlightStroke : dataset.pointHighlightStroke || dataset.pointStrokeColor
+					}));
+				},this);
+
+			},this);
+
+			this.render();
+		},
+		eachPoints : function(callback){
+			helpers.each(this.datasets,function(dataset){
+				helpers.each(dataset.points,callback,this);
+			},this);
+		},
+
+		getPointsAtEvent : function(evt){
+			var mousePosition = helpers.getRelativePosition(evt),
+				fromCenter = helpers.getAngleFromPoint({
+					x: this.scale.xCenter,
+					y: this.scale.yCenter
+				}, mousePosition);
+
+			var anglePerIndex = (Math.PI * 2) /this.scale.valuesCount,
+				pointIndex = Math.round((fromCenter.angle - Math.PI * 1.5) / anglePerIndex),
+				activePointsCollection = [];
+
+			// If we're at the top, make the pointIndex 0 to get the first of the array.
+			if (pointIndex >= this.scale.valuesCount || pointIndex < 0){
+				pointIndex = 0;
+			}
+
+			if (fromCenter.distance <= this.scale.drawingArea){
+				helpers.each(this.datasets, function(dataset){
+					activePointsCollection.push(dataset.points[pointIndex]);
+				});
+			}
+
+			return activePointsCollection;
+		},
+
+		buildScale : function(data){
+			this.scale = new Chart.RadialScale({
+				display: this.options.showScale,
+				fontStyle: this.options.scaleFontStyle,
+				fontSize: this.options.scaleFontSize,
+				fontFamily: this.options.scaleFontFamily,
+				fontColor: this.options.scaleFontColor,
+				showLabels: this.options.scaleShowLabels,
+				showLabelBackdrop: this.options.scaleShowLabelBackdrop,
+				backdropColor: this.options.scaleBackdropColor,
+				backdropPaddingY : this.options.scaleBackdropPaddingY,
+				backdropPaddingX: this.options.scaleBackdropPaddingX,
+				lineWidth: (this.options.scaleShowLine) ? this.options.scaleLineWidth : 0,
+				lineColor: this.options.scaleLineColor,
+				angleLineColor : this.options.angleLineColor,
+				angleLineWidth : (this.options.angleShowLineOut) ? this.options.angleLineWidth : 0,
+				// Point labels at the edge of each line
+				pointLabelFontColor : this.options.pointLabelFontColor,
+				pointLabelFontSize : this.options.pointLabelFontSize,
+				pointLabelFontFamily : this.options.pointLabelFontFamily,
+				pointLabelFontStyle : this.options.pointLabelFontStyle,
+				height : this.chart.height,
+				width: this.chart.width,
+				xCenter: this.chart.width/2,
+				yCenter: this.chart.height/2,
+				ctx : this.chart.ctx,
+				templateString: this.options.scaleLabel,
+				labels: data.labels,
+				valuesCount: data.datasets[0].data.length
+			});
+
+			this.scale.setScaleSize();
+			this.updateScaleRange(data.datasets);
+			this.scale.buildYLabels();
+		},
+		updateScaleRange: function(datasets){
+			var valuesArray = (function(){
+				var totalDataArray = [];
+				helpers.each(datasets,function(dataset){
+					if (dataset.data){
+						totalDataArray = totalDataArray.concat(dataset.data);
+					}
+					else {
+						helpers.each(dataset.points, function(point){
+							totalDataArray.push(point.value);
+						});
+					}
+				});
+				return totalDataArray;
+			})();
+
+
+			var scaleSizes = (this.options.scaleOverride) ?
+				{
+					steps: this.options.scaleSteps,
+					stepValue: this.options.scaleStepWidth,
+					min: this.options.scaleStartValue,
+					max: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)
+				} :
+				helpers.calculateScaleRange(
+					valuesArray,
+					helpers.min([this.chart.width, this.chart.height])/2,
+					this.options.scaleFontSize,
+					this.options.scaleBeginAtZero,
+					this.options.scaleIntegersOnly
+				);
+
+			helpers.extend(
+				this.scale,
+				scaleSizes
+			);
+
+		},
+		addData : function(valuesArray,label){
+			//Map the values array for each of the datasets
+			this.scale.valuesCount++;
+			helpers.each(valuesArray,function(value,datasetIndex){
+				var pointPosition = this.scale.getPointPosition(this.scale.valuesCount, this.scale.calculateCenterOffset(value));
+				this.datasets[datasetIndex].points.push(new this.PointClass({
+					value : value,
+					label : label,
+					x: pointPosition.x,
+					y: pointPosition.y,
+					strokeColor : this.datasets[datasetIndex].pointStrokeColor,
+					fillColor : this.datasets[datasetIndex].pointColor
+				}));
+			},this);
+
+			this.scale.labels.push(label);
+
+			this.reflow();
+
+			this.update();
+		},
+		removeData : function(){
+			this.scale.valuesCount--;
+			this.scale.labels.shift();
+			helpers.each(this.datasets,function(dataset){
+				dataset.points.shift();
+			},this);
+			this.reflow();
+			this.update();
+		},
+		update : function(){
+			this.eachPoints(function(point){
+				point.save();
+			});
+			this.reflow();
+			this.render();
+		},
+		reflow: function(){
+			helpers.extend(this.scale, {
+				width : this.chart.width,
+				height: this.chart.height,
+				size : helpers.min([this.chart.width, this.chart.height]),
+				xCenter: this.chart.width/2,
+				yCenter: this.chart.height/2
+			});
+			this.updateScaleRange(this.datasets);
+			this.scale.setScaleSize();
+			this.scale.buildYLabels();
+		},
+		draw : function(ease){
+			var easeDecimal = ease || 1,
+				ctx = this.chart.ctx;
+			this.clear();
+			this.scale.draw();
+
+			helpers.each(this.datasets,function(dataset){
+
+				//Transition each point first so that the line and point drawing isn't out of sync
+				helpers.each(dataset.points,function(point,index){
+					if (point.hasValue()){
+						point.transition(this.scale.getPointPosition(index, this.scale.calculateCenterOffset(point.value)), easeDecimal);
+					}
+				},this);
+
+
+
+				//Draw the line between all the points
+				ctx.lineWidth = this.options.datasetStrokeWidth;
+				ctx.strokeStyle = dataset.strokeColor;
+				ctx.beginPath();
+				helpers.each(dataset.points,function(point,index){
+					if (index === 0){
+						ctx.moveTo(point.x,point.y);
+					}
+					else{
+						ctx.lineTo(point.x,point.y);
+					}
+				},this);
+				ctx.closePath();
+				ctx.stroke();
+
+				ctx.fillStyle = dataset.fillColor;
+				ctx.fill();
+
+				//Now draw the points over the line
+				//A little inefficient double looping, but better than the line
+				//lagging behind the point positions
+				helpers.each(dataset.points,function(point){
+					if (point.hasValue()){
+						point.draw();
+					}
+				});
+
+			},this);
+
+		}
+
+	});
+
+
+
+
+
+}).call(this);
\ No newline at end of file
diff --git a/public/bower_components/Sortable/Sortable.js b/public/bower_components/Sortable/Sortable.js
new file mode 100644
index 0000000..9a24f6e
--- /dev/null
+++ b/public/bower_components/Sortable/Sortable.js
@@ -0,0 +1,1144 @@
+/**!
+ * Sortable
+ * @author	RubaXa   <[email-masked]>
+ * @license MIT
+ */
+
+
+(function (factory) {
+	"use strict";
+
+	if (typeof define === "function" && define.amd) {
+		define(factory);
+	}
+	else if (typeof module != "undefined" && typeof module.exports != "undefined") {
+		module.exports = factory();
+	}
+	else if (typeof Package !== "undefined") {
+		Sortable = factory();  // export for Meteor.js
+	}
+	else {
+		/* jshint sub:true */
+		window["Sortable"] = factory();
+	}
+})(function () {
+	"use strict";
+
+	var dragEl,
+		ghostEl,
+		cloneEl,
+		rootEl,
+		nextEl,
+
+		scrollEl,
+		scrollParentEl,
+
+		lastEl,
+		lastCSS,
+
+		oldIndex,
+		newIndex,
+
+		activeGroup,
+		autoScroll = {},
+
+		tapEvt,
+		touchEvt,
+
+		/** @const */
+		RSPACE = /\s+/g,
+
+		expando = 'Sortable' + (new Date).getTime(),
+
+		win = window,
+		document = win.document,
+		parseInt = win.parseInt,
+
+		supportDraggable = !!('draggable' in document.createElement('div')),
+
+		_silent = false,
+
+		abs = Math.abs,
+		slice = [].slice,
+
+		touchDragOverListeners = [],
+
+		_autoScroll = _throttle(function (/**Event*/evt, /**Object*/options, /**HTMLElement*/rootEl) {
+			// Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521
+			if (rootEl && options.scroll) {
+				var el,
+					rect,
+					sens = options.scrollSensitivity,
+					speed = options.scrollSpeed,
+
+					x = evt.clientX,
+					y = evt.clientY,
+
+					winWidth = window.innerWidth,
+					winHeight = window.innerHeight,
+
+					vx,
+					vy
+				;
+
+				// Delect scrollEl
+				if (scrollParentEl !== rootEl) {
+					scrollEl = options.scroll;
+					scrollParentEl = rootEl;
+
+					if (scrollEl === true) {
+						scrollEl = rootEl;
+
+						do {
+							if ((scrollEl.offsetWidth < scrollEl.scrollWidth) ||
+								(scrollEl.offsetHeight < scrollEl.scrollHeight)
+							) {
+								break;
+							}
+							/* jshint boss:true */
+						} while (scrollEl = scrollEl.parentNode);
+					}
+				}
+
+				if (scrollEl) {
+					el = scrollEl;
+					rect = scrollEl.getBoundingClientRect();
+					vx = (abs(rect.right - x) <= sens) - (abs(rect.left - x) <= sens);
+					vy = (abs(rect.bottom - y) <= sens) - (abs(rect.top - y) <= sens);
+				}
+
+
+				if (!(vx || vy)) {
+					vx = (winWidth - x <= sens) - (x <= sens);
+					vy = (winHeight - y <= sens) - (y <= sens);
+
+					/* jshint expr:true */
+					(vx || vy) && (el = win);
+				}
+
+
+				if (autoScroll.vx !== vx || autoScroll.vy !== vy || autoScroll.el !== el) {
+					autoScroll.el = el;
+					autoScroll.vx = vx;
+					autoScroll.vy = vy;
+
+					clearInterval(autoScroll.pid);
+
+					if (el) {
+						autoScroll.pid = setInterval(function () {
+							if (el === win) {
+								win.scrollTo(win.pageXOffset + vx * speed, win.pageYOffset + vy * speed);
+							} else {
+								vy && (el.scrollTop += vy * speed);
+								vx && (el.scrollLeft += vx * speed);
+							}
+						}, 24);
+					}
+				}
+			}
+		}, 30)
+	;
+
+
+
+	/**
+	 * @class  Sortable
+	 * @param  {HTMLElement}  el
+	 * @param  {Object}       [options]
+	 */
+	function Sortable(el, options) {
+		this.el = el; // root element
+		this.options = options = _extend({}, options);
+
+
+		// Export instance
+		el[expando] = this;
+
+
+		// Default options
+		var defaults = {
+			group: Math.random(),
+			sort: true,
+			disabled: false,
+			store: null,
+			handle: null,
+			scroll: true,
+			scrollSensitivity: 30,
+			scrollSpeed: 10,
+			draggable: /[uo]l/i.test(el.nodeName) ? 'li' : '>*',
+			ghostClass: 'sortable-ghost',
+			ignore: 'a, img',
+			filter: null,
+			animation: 0,
+			setData: function (dataTransfer, dragEl) {
+				dataTransfer.setData('Text', dragEl.textContent);
+			},
+			dropBubble: false,
+			dragoverBubble: false,
+			dataIdAttr: 'data-id',
+			delay: 0
+		};
+
+
+		// Set default options
+		for (var name in defaults) {
+			!(name in options) && (options[name] = defaults[name]);
+		}
+
+
+		var group = options.group;
+
+		if (!group || typeof group != 'object') {
+			group = options.group = { name: group };
+		}
+
+
+		['pull', 'put'].forEach(function (key) {
+			if (!(key in group)) {
+				group[key] = true;
+			}
+		});
+
+
+		options.groups = ' ' + group.name + (group.put.join ? ' ' + group.put.join(' ') : '') + ' ';
+
+
+		// Bind all private methods
+		for (var fn in this) {
+			if (fn.charAt(0) === '_') {
+				this[fn] = _bind(this, this[fn]);
+			}
+		}
+
+
+		// Bind events
+		_on(el, 'mousedown', this._onTapStart);
+		_on(el, 'touchstart', this._onTapStart);
+
+		_on(el, 'dragover', this);
+		_on(el, 'dragenter', this);
+
+		touchDragOverListeners.push(this._onDragOver);
+
+		// Restore sorting
+		options.store && this.sort(options.store.get(this));
+	}
+
+
+	Sortable.prototype = /** @lends Sortable.prototype */ {
+		constructor: Sortable,
+
+		_onTapStart: function (/** Event|TouchEvent */evt) {
+			var _this = this,
+				el = this.el,
+				options = this.options,
+				type = evt.type,
+				touch = evt.touches && evt.touches[0],
+				target = (touch || evt).target,
+				originalTarget = target,
+				filter = options.filter;
+
+
+			if (type === 'mousedown' && evt.button !== 0 || options.disabled) {
+				return; // only left button or enabled
+			}
+
+			target = _closest(target, options.draggable, el);
+
+			if (!target) {
+				return;
+			}
+
+			// get the index of the dragged element within its parent
+			oldIndex = _index(target);
+
+			// Check filter
+			if (typeof filter === 'function') {
+				if (filter.call(this, evt, target, this)) {
+					_dispatchEvent(_this, originalTarget, 'filter', target, el, oldIndex);
+					evt.preventDefault();
+					return; // cancel dnd
+				}
+			}
+			else if (filter) {
+				filter = filter.split(',').some(function (criteria) {
+					criteria = _closest(originalTarget, criteria.trim(), el);
+
+					if (criteria) {
+						_dispatchEvent(_this, criteria, 'filter', target, el, oldIndex);
+						return true;
+					}
+				});
+
+				if (filter) {
+					evt.preventDefault();
+					return; // cancel dnd
+				}
+			}
+
+
+			if (options.handle && !_closest(originalTarget, options.handle, el)) {
+				return;
+			}
+
+
+			// Prepare `dragstart`
+			this._prepareDragStart(evt, touch, target);
+		},
+
+		_prepareDragStart: function (/** Event */evt, /** Touch */touch, /** HTMLElement */target) {
+			var _this = this,
+				el = _this.el,
+				options = _this.options,
+				ownerDocument = el.ownerDocument,
+				dragStartFn;
+
+			if (target && !dragEl && (target.parentNode === el)) {
+				tapEvt = evt;
+
+				rootEl = el;
+				dragEl = target;
+				nextEl = dragEl.nextSibling;
+				activeGroup = options.group;
+
+				dragStartFn = function () {
+					// Delayed drag has been triggered
+					// we can re-enable the events: touchmove/mousemove
+					_this._disableDelayedDrag();
+
+					// Make the element draggable
+					dragEl.draggable = true;
+
+					// Disable "draggable"
+					options.ignore.split(',').forEach(function (criteria) {
+						_find(dragEl, criteria.trim(), _disableDraggable);
+					});
+
+					// Bind the events: dragstart/dragend
+					_this._triggerDragStart(touch);
+				};
+
+				_on(ownerDocument, 'mouseup', _this._onDrop);
+				_on(ownerDocument, 'touchend', _this._onDrop);
+				_on(ownerDocument, 'touchcancel', _this._onDrop);
+
+				if (options.delay) {
+					// If the user moves the pointer before the delay has been reached:
+					// disable the delayed drag
+					_on(ownerDocument, 'mousemove', _this._disableDelayedDrag);
+					_on(ownerDocument, 'touchmove', _this._disableDelayedDrag);
+
+					_this._dragStartTimer = setTimeout(dragStartFn, options.delay);
+				} else {
+					dragStartFn();
+				}
+			}
+		},
+
+		_disableDelayedDrag: function () {
+			var ownerDocument = this.el.ownerDocument;
+
+			clearTimeout(this._dragStartTimer);
+
+			_off(ownerDocument, 'mousemove', this._disableDelayedDrag);
+			_off(ownerDocument, 'touchmove', this._disableDelayedDrag);
+		},
+
+		_triggerDragStart: function (/** Touch */touch) {
+			if (touch) {
+				// Touch device support
+				tapEvt = {
+					target: dragEl,
+					clientX: touch.clientX,
+					clientY: touch.clientY
+				};
+
+				this._onDragStart(tapEvt, 'touch');
+			}
+			else if (!supportDraggable) {
+				this._onDragStart(tapEvt, true);
+			}
+			else {
+				_on(dragEl, 'dragend', this);
+				_on(rootEl, 'dragstart', this._onDragStart);
+			}
+
+			try {
+				if (document.selection) {
+					document.selection.empty();
+				} else {
+					window.getSelection().removeAllRanges();
+				}
+			} catch (err) {
+			}
+		},
+
+		_dragStarted: function () {
+			if (rootEl && dragEl) {
+				// Apply effect
+				_toggleClass(dragEl, this.options.ghostClass, true);
+
+				Sortable.active = this;
+
+				// Drag start event
+				_dispatchEvent(this, rootEl, 'start', dragEl, rootEl, oldIndex);
+			}
+		},
+
+		_emulateDragOver: function () {
+			if (touchEvt) {
+				_css(ghostEl, 'display', 'none');
+
+				var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY),
+					parent = target,
+					groupName = ' ' + this.options.group.name + '',
+					i = touchDragOverListeners.length;
+
+				if (parent) {
+					do {
+						if (parent[expando] && parent[expando].options.groups.indexOf(groupName) > -1) {
+							while (i--) {
+								touchDragOverListeners[i]({
+									clientX: touchEvt.clientX,
+									clientY: touchEvt.clientY,
+									target: target,
+									rootEl: parent
+								});
+							}
+
+							break;
+						}
+
+						target = parent; // store last element
+					}
+					/* jshint boss:true */
+					while (parent = parent.parentNode);
+				}
+
+				_css(ghostEl, 'display', '');
+			}
+		},
+
+
+		_onTouchMove: function (/**TouchEvent*/evt) {
+			if (tapEvt) {
+				var touch = evt.touches ? evt.touches[0] : evt,
+					dx = touch.clientX - tapEvt.clientX,
+					dy = touch.clientY - tapEvt.clientY,
+					translate3d = evt.touches ? 'translate3d(' + dx + 'px,' + dy + 'px,0)' : 'translate(' + dx + 'px,' + dy + 'px)';
+
+				touchEvt = touch;
+
+				_css(ghostEl, 'webkitTransform', translate3d);
+				_css(ghostEl, 'mozTransform', translate3d);
+				_css(ghostEl, 'msTransform', translate3d);
+				_css(ghostEl, 'transform', translate3d);
+
+				evt.preventDefault();
+			}
+		},
+
+
+		_onDragStart: function (/**Event*/evt, /**boolean*/useFallback) {
+			var dataTransfer = evt.dataTransfer,
+				options = this.options;
+
+			this._offUpEvents();
+
+			if (activeGroup.pull == 'clone') {
+				cloneEl = dragEl.cloneNode(true);
+				_css(cloneEl, 'display', 'none');
+				rootEl.insertBefore(cloneEl, dragEl);
+			}
+
+			if (useFallback) {
+				var rect = dragEl.getBoundingClientRect(),
+					css = _css(dragEl),
+					ghostRect;
+
+				ghostEl = dragEl.cloneNode(true);
+
+				_css(ghostEl, 'top', rect.top - parseInt(css.marginTop, 10));
+				_css(ghostEl, 'left', rect.left - parseInt(css.marginLeft, 10));
+				_css(ghostEl, 'width', rect.width);
+				_css(ghostEl, 'height', rect.height);
+				_css(ghostEl, 'opacity', '0.8');
+				_css(ghostEl, 'position', 'fixed');
+				_css(ghostEl, 'zIndex', '100000');
+
+				rootEl.appendChild(ghostEl);
+
+				// Fixing dimensions.
+				ghostRect = ghostEl.getBoundingClientRect();
+				_css(ghostEl, 'width', rect.width * 2 - ghostRect.width);
+				_css(ghostEl, 'height', rect.height * 2 - ghostRect.height);
+
+				if (useFallback === 'touch') {
+					// Bind touch events
+					_on(document, 'touchmove', this._onTouchMove);
+					_on(document, 'touchend', this._onDrop);
+					_on(document, 'touchcancel', this._onDrop);
+				} else {
+					// Old brwoser
+					_on(document, 'mousemove', this._onTouchMove);
+					_on(document, 'mouseup', this._onDrop);
+				}
+
+				this._loopId = setInterval(this._emulateDragOver, 150);
+			}
+			else {
+				if (dataTransfer) {
+					dataTransfer.effectAllowed = 'move';
+					options.setData && options.setData.call(this, dataTransfer, dragEl);
+				}
+
+				_on(document, 'drop', this);
+			}
+
+			setTimeout(this._dragStarted, 0);
+		},
+
+		_onDragOver: function (/**Event*/evt) {
+			var el = this.el,
+				target,
+				dragRect,
+				revert,
+				options = this.options,
+				group = options.group,
+				groupPut = group.put,
+				isOwner = (activeGroup === group),
+				canSort = options.sort;
+
+			if (evt.preventDefault !== void 0) {
+				evt.preventDefault();
+				!options.dragoverBubble && evt.stopPropagation();
+			}
+
+			if (activeGroup && !options.disabled &&
+				(isOwner
+					? canSort || (revert = !rootEl.contains(dragEl)) // Reverting item into the original list
+					: activeGroup.pull && groupPut && (
+						(activeGroup.name === group.name) || // by Name
+						(groupPut.indexOf && ~groupPut.indexOf(activeGroup.name)) // by Array
+					)
+				) &&
+				(evt.rootEl === void 0 || evt.rootEl === this.el) // touch fallback
+			) {
+				// Smart auto-scrolling
+				_autoScroll(evt, options, this.el);
+
+				if (_silent) {
+					return;
+				}
+
+				target = _closest(evt.target, options.draggable, el);
+				dragRect = dragEl.getBoundingClientRect();
+
+
+				if (revert) {
+					_cloneHide(true);
+
+					if (cloneEl || nextEl) {
+						rootEl.insertBefore(dragEl, cloneEl || nextEl);
+					}
+					else if (!canSort) {
+						rootEl.appendChild(dragEl);
+					}
+
+					return;
+				}
+
+
+				if ((el.children.length === 0) || (el.children[0] === ghostEl) ||
+					(el === evt.target) && (target = _ghostInBottom(el, evt))
+				) {
+					if (target) {
+						if (target.animated) {
+							return;
+						}
+						targetRect = target.getBoundingClientRect();
+					}
+
+					_cloneHide(isOwner);
+
+					if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect) !== false) {
+						el.appendChild(dragEl);
+						this._animate(dragRect, dragEl);
+						target && this._animate(targetRect, target);
+					}
+				}
+				else if (target && !target.animated && target !== dragEl && (target.parentNode[expando] !== void 0)) {
+					if (lastEl !== target) {
+						lastEl = target;
+						lastCSS = _css(target);
+					}
+
+
+					var targetRect = target.getBoundingClientRect(),
+						width = targetRect.right - targetRect.left,
+						height = targetRect.bottom - targetRect.top,
+						floating = /left|right|inline/.test(lastCSS.cssFloat + lastCSS.display),
+						isWide = (target.offsetWidth > dragEl.offsetWidth),
+						isLong = (target.offsetHeight > dragEl.offsetHeight),
+						halfway = (floating ? (evt.clientX - targetRect.left) / width : (evt.clientY - targetRect.top) / height) > 0.5,
+						nextSibling = target.nextElementSibling,
+						moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect),
+						after
+					;
+
+					if (moveVector !== false) {
+						_silent = true;
+						setTimeout(_unsilent, 30);
+
+						_cloneHide(isOwner);
+
+						if (moveVector === 1 || moveVector === -1) {
+							after = (moveVector === 1);
+						}
+						else if (floating) {
+							after = (target.previousElementSibling === dragEl) && !isWide || halfway && isWide;
+						} else {
+							after = (nextSibling !== dragEl) && !isLong || halfway && isLong;
+						}
+
+						if (after && !nextSibling) {
+							el.appendChild(dragEl);
+						} else {
+							target.parentNode.insertBefore(dragEl, after ? nextSibling : target);
+						}
+
+						this._animate(dragRect, dragEl);
+						this._animate(targetRect, target);
+					}
+				}
+			}
+		},
+
+		_animate: function (prevRect, target) {
+			var ms = this.options.animation;
+
+			if (ms) {
+				var currentRect = target.getBoundingClientRect();
+
+				_css(target, 'transition', 'none');
+				_css(target, 'transform', 'translate3d('
+					+ (prevRect.left - currentRect.left) + 'px,'
+					+ (prevRect.top - currentRect.top) + 'px,0)'
+				);
+
+				target.offsetWidth; // repaint
+
+				_css(target, 'transition', 'all ' + ms + 'ms');
+				_css(target, 'transform', 'translate3d(0,0,0)');
+
+				clearTimeout(target.animated);
+				target.animated = setTimeout(function () {
+					_css(target, 'transition', '');
+					_css(target, 'transform', '');
+					target.animated = false;
+				}, ms);
+			}
+		},
+
+		_offUpEvents: function () {
+			var ownerDocument = this.el.ownerDocument;
+
+			_off(document, 'touchmove', this._onTouchMove);
+			_off(ownerDocument, 'mouseup', this._onDrop);
+			_off(ownerDocument, 'touchend', this._onDrop);
+			_off(ownerDocument, 'touchcancel', this._onDrop);
+		},
+
+		_onDrop: function (/**Event*/evt) {
+			var el = this.el,
+				options = this.options;
+
+			clearInterval(this._loopId);
+			clearInterval(autoScroll.pid);
+			clearTimeout(this._dragStartTimer);
+
+			// Unbind events
+			_off(document, 'drop', this);
+			_off(document, 'mousemove', this._onTouchMove);
+			_off(el, 'dragstart', this._onDragStart);
+
+			this._offUpEvents();
+
+			if (evt) {
+				evt.preventDefault();
+				!options.dropBubble && evt.stopPropagation();
+
+				ghostEl && ghostEl.parentNode.removeChild(ghostEl);
+
+				if (dragEl) {
+					_off(dragEl, 'dragend', this);
+
+					_disableDraggable(dragEl);
+					_toggleClass(dragEl, this.options.ghostClass, false);
+
+					if (rootEl !== dragEl.parentNode) {
+						newIndex = _index(dragEl);
+
+						// drag from one list and drop into another
+						_dispatchEvent(null, dragEl.parentNode, 'sort', dragEl, rootEl, oldIndex, newIndex);
+						_dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex);
+
+						// Add event
+						_dispatchEvent(null, dragEl.parentNode, 'add', dragEl, rootEl, oldIndex, newIndex);
+
+						// Remove event
+						_dispatchEvent(this, rootEl, 'remove', dragEl, rootEl, oldIndex, newIndex);
+					}
+					else {
+						// Remove clone
+						cloneEl && cloneEl.parentNode.removeChild(cloneEl);
+
+						if (dragEl.nextSibling !== nextEl) {
+							// Get the index of the dragged element within its parent
+							newIndex = _index(dragEl);
+
+							// drag & drop within the same list
+							_dispatchEvent(this, rootEl, 'update', dragEl, rootEl, oldIndex, newIndex);
+							_dispatchEvent(this, rootEl, 'sort', dragEl, rootEl, oldIndex, newIndex);
+						}
+					}
+
+					if (Sortable.active) {
+						// Drag end event
+						_dispatchEvent(this, rootEl, 'end', dragEl, rootEl, oldIndex, newIndex);
+
+						// Save sorting
+						this.save();
+					}
+				}
+
+				// Nulling
+				rootEl =
+				dragEl =
+				ghostEl =
+				nextEl =
+				cloneEl =
+
+				scrollEl =
+				scrollParentEl =
+
+				tapEvt =
+				touchEvt =
+
+				lastEl =
+				lastCSS =
+
+				activeGroup =
+				Sortable.active = null;
+			}
+		},
+
+
+		handleEvent: function (/**Event*/evt) {
+			var type = evt.type;
+
+			if (type === 'dragover' || type === 'dragenter') {
+				if (dragEl) {
+					this._onDragOver(evt);
+					_globalDragOver(evt);
+				}
+			}
+			else if (type === 'drop' || type === 'dragend') {
+				this._onDrop(evt);
+			}
+		},
+
+
+		/**
+		 * Serializes the item into an array of string.
+		 * @returns {String[]}
+		 */
+		toArray: function () {
+			var order = [],
+				el,
+				children = this.el.children,
+				i = 0,
+				n = children.length,
+				options = this.options;
+
+			for (; i < n; i++) {
+				el = children[i];
+				if (_closest(el, options.draggable, this.el)) {
+					order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));
+				}
+			}
+
+			return order;
+		},
+
+
+		/**
+		 * Sorts the elements according to the array.
+		 * @param  {String[]}  order  order of the items
+		 */
+		sort: function (order) {
+			var items = {}, rootEl = this.el;
+
+			this.toArray().forEach(function (id, i) {
+				var el = rootEl.children[i];
+
+				if (_closest(el, this.options.draggable, rootEl)) {
+					items[id] = el;
+				}
+			}, this);
+
+			order.forEach(function (id) {
+				if (items[id]) {
+					rootEl.removeChild(items[id]);
+					rootEl.appendChild(items[id]);
+				}
+			});
+		},
+
+
+		/**
+		 * Save the current sorting
+		 */
+		save: function () {
+			var store = this.options.store;
+			store && store.set(this);
+		},
+
+
+		/**
+		 * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.
+		 * @param   {HTMLElement}  el
+		 * @param   {String}       [selector]  default: `options.draggable`
+		 * @returns {HTMLElement|null}
+		 */
+		closest: function (el, selector) {
+			return _closest(el, selector || this.options.draggable, this.el);
+		},
+
+
+		/**
+		 * Set/get option
+		 * @param   {string} name
+		 * @param   {*}      [value]
+		 * @returns {*}
+		 */
+		option: function (name, value) {
+			var options = this.options;
+
+			if (value === void 0) {
+				return options[name];
+			} else {
+				options[name] = value;
+			}
+		},
+
+
+		/**
+		 * Destroy
+		 */
+		destroy: function () {
+			var el = this.el;
+
+			el[expando] = null;
+
+			_off(el, 'mousedown', this._onTapStart);
+			_off(el, 'touchstart', this._onTapStart);
+
+			_off(el, 'dragover', this);
+			_off(el, 'dragenter', this);
+
+			// Remove draggable attributes
+			Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {
+				el.removeAttribute('draggable');
+			});
+
+			touchDragOverListeners.splice(touchDragOverListeners.indexOf(this._onDragOver), 1);
+
+			this._onDrop();
+
+			this.el = el = null;
+		}
+	};
+
+
+	function _cloneHide(state) {
+		if (cloneEl && (cloneEl.state !== state)) {
+			_css(cloneEl, 'display', state ? 'none' : '');
+			!state && cloneEl.state && rootEl.insertBefore(cloneEl, dragEl);
+			cloneEl.state = state;
+		}
+	}
+
+
+	function _bind(ctx, fn) {
+		var args = slice.call(arguments, 2);
+		return	fn.bind ? fn.bind.apply(fn, [ctx].concat(args)) : function () {
+			return fn.apply(ctx, args.concat(slice.call(arguments)));
+		};
+	}
+
+
+	function _closest(/**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx) {
+		if (el) {
+			ctx = ctx || document;
+			selector = selector.split('.');
+
+			var tag = selector.shift().toUpperCase(),
+				re = new RegExp('\\s(' + selector.join('|') + ')(?=\\s)', 'g');
+
+			do {
+				if (
+					(tag === '>*' && el.parentNode === ctx) || (
+						(tag === '' || el.nodeName.toUpperCase() == tag) &&
+						(!selector.length || ((' ' + el.className + ' ').match(re) || []).length == selector.length)
+					)
+				) {
+					return el;
+				}
+			}
+			while (el !== ctx && (el = el.parentNode));
+		}
+
+		return null;
+	}
+
+
+	function _globalDragOver(/**Event*/evt) {
+		evt.dataTransfer.dropEffect = 'move';
+		evt.preventDefault();
+	}
+
+
+	function _on(el, event, fn) {
+		el.addEventListener(event, fn, false);
+	}
+
+
+	function _off(el, event, fn) {
+		el.removeEventListener(event, fn, false);
+	}
+
+
+	function _toggleClass(el, name, state) {
+		if (el) {
+			if (el.classList) {
+				el.classList[state ? 'add' : 'remove'](name);
+			}
+			else {
+				var className = (' ' + el.className + ' ').replace(RSPACE, ' ').replace(' ' + name + ' ', ' ');
+				el.className = (className + (state ? ' ' + name : '')).replace(RSPACE, ' ');
+			}
+		}
+	}
+
+
+	function _css(el, prop, val) {
+		var style = el && el.style;
+
+		if (style) {
+			if (val === void 0) {
+				if (document.defaultView && document.defaultView.getComputedStyle) {
+					val = document.defaultView.getComputedStyle(el, '');
+				}
+				else if (el.currentStyle) {
+					val = el.currentStyle;
+				}
+
+				return prop === void 0 ? val : val[prop];
+			}
+			else {
+				if (!(prop in style)) {
+					prop = '-webkit-' + prop;
+				}
+
+				style[prop] = val + (typeof val === 'string' ? '' : 'px');
+			}
+		}
+	}
+
+
+	function _find(ctx, tagName, iterator) {
+		if (ctx) {
+			var list = ctx.getElementsByTagName(tagName), i = 0, n = list.length;
+
+			if (iterator) {
+				for (; i < n; i++) {
+					iterator(list[i], i);
+				}
+			}
+
+			return list;
+		}
+
+		return [];
+	}
+
+
+
+	function _dispatchEvent(sortable, rootEl, name, targetEl, fromEl, startIndex, newIndex) {
+		var evt = document.createEvent('Event'),
+			options = (sortable || rootEl[expando]).options,
+			onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);
+
+		evt.initEvent(name, true, true);
+
+		evt.to = rootEl;
+		evt.from = fromEl || rootEl;
+		evt.item = targetEl || rootEl;
+		evt.clone = cloneEl;
+
+		evt.oldIndex = startIndex;
+		evt.newIndex = newIndex;
+
+		rootEl.dispatchEvent(evt);
+
+		if (options[onName]) {
+			options[onName].call(sortable, evt);
+		}
+	}
+
+
+	function _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect) {
+		var evt,
+			sortable = fromEl[expando],
+			onMoveFn = sortable.options.onMove,
+			retVal;
+
+		if (onMoveFn) {
+			evt = document.createEvent('Event');
+			evt.initEvent('move', true, true);
+
+			evt.to = toEl;
+			evt.from = fromEl;
+			evt.dragged = dragEl;
+			evt.draggedRect = dragRect;
+			evt.related = targetEl || toEl;
+			evt.relatedRect = targetRect || toEl.getBoundingClientRect();
+
+			retVal = onMoveFn.call(sortable, evt);
+		}
+
+		return retVal;
+	}
+
+
+	function _disableDraggable(el) {
+		el.draggable = false;
+	}
+
+
+	function _unsilent() {
+		_silent = false;
+	}
+
+
+	/** @returns {HTMLElement|false} */
+	function _ghostInBottom(el, evt) {
+		var lastEl = el.lastElementChild,
+			rect = lastEl.getBoundingClientRect();
+
+		return (evt.clientY - (rect.top + rect.height) > 5) && lastEl; // min delta
+	}
+
+
+	/**
+	 * Generate id
+	 * @param   {HTMLElement} el
+	 * @returns {String}
+	 * @private
+	 */
+	function _generateId(el) {
+		var str = el.tagName + el.className + el.src + el.href + el.textContent,
+			i = str.length,
+			sum = 0;
+
+		while (i--) {
+			sum += str.charCodeAt(i);
+		}
+
+		return sum.toString(36);
+	}
+
+	/**
+	 * Returns the index of an element within its parent
+	 * @param el
+	 * @returns {number}
+	 * @private
+	 */
+	function _index(/**HTMLElement*/el) {
+		var index = 0;
+		while (el && (el = el.previousElementSibling)) {
+			if (el.nodeName.toUpperCase() !== 'TEMPLATE') {
+				index++;
+			}
+		}
+		return index;
+	}
+
+	function _throttle(callback, ms) {
+		var args, _this;
+
+		return function () {
+			if (args === void 0) {
+				args = arguments;
+				_this = this;
+
+				setTimeout(function () {
+					if (args.length === 1) {
+						callback.call(_this, args[0]);
+					} else {
+						callback.apply(_this, args);
+					}
+
+					args = void 0;
+				}, ms);
+			}
+		};
+	}
+
+	function _extend(dst, src) {
+		if (dst && src) {
+			for (var key in src) {
+				if (src.hasOwnProperty(key)) {
+					dst[key] = src[key];
+				}
+			}
+		}
+
+		return dst;
+	}
+
+
+	// Export utils
+	Sortable.utils = {
+		on: _on,
+		off: _off,
+		css: _css,
+		find: _find,
+		bind: _bind,
+		is: function (el, selector) {
+			return !!_closest(el, selector, el);
+		},
+		extend: _extend,
+		throttle: _throttle,
+		closest: _closest,
+		toggleClass: _toggleClass,
+		index: _index
+	};
+
+
+	Sortable.version = '1.2.1';
+
+
+	/**
+	 * Create sortable instance
+	 * @param {HTMLElement}  el
+	 * @param {Object}      [options]
+	 */
+	Sortable.create = function (el, options) {
+		return new Sortable(el, options);
+	};
+
+	// Export
+	return Sortable;
+});
diff --git a/public/bower_components/Sortable/knockout-sortable.js b/public/bower_components/Sortable/knockout-sortable.js
new file mode 100644
index 0000000..6a7f701
--- /dev/null
+++ b/public/bower_components/Sortable/knockout-sortable.js
@@ -0,0 +1,161 @@
+(function () {
+    "use strict";
+
+    var init = function (element, valueAccessor, allBindings, viewModel, bindingContext, sortableOptions) {
+
+        var options = buildOptions(valueAccessor, sortableOptions);
+
+        //It's seems that we cannot update the eventhandlers after we've created the sortable, so define them in init instead of update
+        ['onStart', 'onEnd', 'onRemove', 'onAdd', 'onUpdate', 'onSort', 'onFilter'].forEach(function (e) {
+            if (options[e] || eventHandlers[e])
+                options[e] = function (eventType, parentVM, parentBindings, handler, e) {
+                    var itemVM = ko.dataFor(e.item),
+                        //All of the bindings on the parent element
+                        bindings = ko.utils.peekObservable(parentBindings()),
+                        //The binding options for the draggable/sortable binding of the parent element
+                        bindingHandlerBinding = bindings.sortable || bindings.draggable,
+                        //The collection that we should modify
+                        collection = bindingHandlerBinding.collection || bindingHandlerBinding.foreach;
+                    if (handler)
+                        handler(e, itemVM, parentVM, collection, bindings);
+                    if (eventHandlers[eventType])
+                        eventHandlers[eventType](e, itemVM, parentVM, collection, bindings);
+                }.bind(undefined, e, viewModel, allBindings, options[e]);
+        });
+
+        viewModel._sortable = Sortable.create(element, options);
+
+        //Destroy the sortable if knockout disposes the element it's connected to
+        ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
+            viewModel._sortable.destroy();
+        });
+        return ko.bindingHandlers.template.init(element, valueAccessor);
+    },
+    update = function (element, valueAccessor, allBindings, viewModel, bindingContext, sortableOptions) {
+
+        //There seems to be some problems with updating the options of a sortable
+        //Tested to change eventhandlers and the group options without any luck
+
+        return ko.bindingHandlers.template.update(element, valueAccessor, allBindings, viewModel, bindingContext);
+    },
+    eventHandlers = (function (handlers) {
+
+        var moveOperations = [],
+            tryMoveOperation = function (e, itemVM, parentVM, collection, parentBindings) {
+                //A move operation is the combination of a add and remove event, this is to make sure that we have both the target and origin collections
+                var currentOperation = { event: e, itemVM: itemVM, parentVM: parentVM, collection: collection, parentBindings: parentBindings },
+                    existingOperation = moveOperations.filter(function (op) {
+                        return op.itemVM === currentOperation.itemVM;
+                    })[0];
+
+                if (!existingOperation) {
+                    moveOperations.push(currentOperation);
+                }
+                else {
+                    //We're finishing the operation and already have a handle on the operation item meaning that it's safe to remove it
+                    moveOperations.splice(moveOperations.indexOf(existingOperation), 1);
+
+                    var removeOperation = currentOperation.event.type === 'remove' ? currentOperation : existingOperation,
+                        addOperation = currentOperation.event.type === 'add' ? currentOperation : existingOperation;
+
+                    moveItem(itemVM, removeOperation.collection, addOperation.collection, addOperation.event.clone, addOperation.event);
+                }
+            },
+            //Moves an item from the to (collection to from (collection), these can be references to the same collection which means it's a sort,
+            //clone indicates if we should move or copy the item into the new collection
+            moveItem = function (itemVM, from, to, clone, e) {
+                //Unwrapping this allows us to manipulate the actual array
+                var fromArray = from(),
+                    //It's not certain that the items actual index is the same as the index reported by sortable due to filtering etc.
+                    originalIndex = fromArray.indexOf(itemVM);
+
+                //Remove sortables "unbound" element
+                e.item.parentNode.removeChild(e.item);
+
+                //This splice is necessary for both clone and move/sort
+                //In sort/move since it shouldn't be at this index/in this array anymore
+                //In clone since we have to work around knockouts valuHasMutated when manipulating arrays and avoid a "unbound" item added by sortable
+                fromArray.splice(originalIndex, 1);
+                //Update the array, this will also remove sortables "unbound" clone
+                from.valueHasMutated();
+                if (clone && from !== to) {
+                    //Readd the item
+                    fromArray.splice(originalIndex, 0, itemVM);
+                    //Force knockout to update
+                    from.valueHasMutated();
+                }
+                //Insert the item on its new position
+                to().splice(e.newIndex, 0, itemVM);
+                //Make sure to tell knockout that we've modified the actual array.
+                to.valueHasMutated();
+            };
+
+        handlers.onRemove = tryMoveOperation;
+        handlers.onAdd = tryMoveOperation;
+        handlers.onUpdate = function (e, itemVM, parentVM, collection, parentBindings) {
+            //This will be performed as a sort since the to/from collections reference the same collection and clone is set to false
+            moveItem(itemVM, collection, collection, false, e);
+        };
+
+        return handlers;
+    })({}),
+    //bindingOptions are the options set in the "data-bind" attribute in the ui.
+    //options are custom options, for instance draggable/sortable specific options
+    buildOptions = function (bindingOptions, options) {
+        //deep clone/copy of properties from the "from" argument onto the "into" argument and returns the modified "into"
+        var merge = function (into, from) {
+            for (var prop in from) {
+                if (Object.prototype.toString.call(from[prop]) === '[object Object]') {
+                    if (Object.prototype.toString.call(into[prop]) !== '[object Object]') {
+                        into[prop] = {};
+                    }
+                    into[prop] = merge(into[prop], from[prop]);
+                }
+                else
+                    into[prop] = from[prop];
+            }
+
+            return into;
+        },
+        //unwrap the supplied options
+        unwrappedOptions = ko.utils.peekObservable(bindingOptions()).options || {};
+
+        //Make sure that we don't modify the provided settings object
+        options = merge({}, options);
+
+        //group is handled differently since we should both allow to change a draggable to a sortable (and vice versa),
+        //but still be able to set a name on a draggable without it becoming a drop target.
+        if (unwrappedOptions.group && Object.prototype.toString.call(unwrappedOptions.group) !== '[object Object]') {
+            //group property is a name string declaration, convert to object.
+            unwrappedOptions.group = { name: unwrappedOptions.group };
+        }
+
+        return merge(options, unwrappedOptions);
+    };
+
+    ko.bindingHandlers.draggable = {
+        sortableOptions: {
+            group: { pull: 'clone', put: false },
+            sort: false
+        },
+        init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
+            return init(element, valueAccessor, allBindings, viewModel, bindingContext, ko.bindingHandlers.draggable.sortableOptions);
+        },
+        update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
+            return update(element, valueAccessor, allBindings, viewModel, bindingContext, ko.bindingHandlers.draggable.sortableOptions);
+        }
+    };
+
+    ko.bindingHandlers.sortable = {
+        sortableOptions: {
+            group: { pull: true, put: true }
+        },
+        init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
+            return init(element, valueAccessor, allBindings, viewModel, bindingContext, ko.bindingHandlers.sortable.sortableOptions);
+        },
+        update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
+            return update(element, valueAccessor, allBindings, viewModel, bindingContext, ko.bindingHandlers.sortable.sortableOptions);
+        }
+    };
+
+})();
\ No newline at end of file
diff --git a/public/bower_components/Sortable/ng-sortable.js b/public/bower_components/Sortable/ng-sortable.js
new file mode 100644
index 0000000..4f0b8c5
--- /dev/null
+++ b/public/bower_components/Sortable/ng-sortable.js
@@ -0,0 +1,185 @@
+/**
+ * @author RubaXa <[email-masked]>
+ * @licence MIT
+ */
+(function (factory) {
+	'use strict';
+
+	if (window.angular && window.Sortable) {
+		factory(angular, Sortable);
+	}
+	else if (typeof define === 'function' && define.amd) {
+		define(['angular', './Sortable'], factory);
+	}
+})(function (angular, Sortable) {
+	'use strict';
+
+
+	/**
+	 * @typedef   {Object}        ngSortEvent
+	 * @property  {*}             model      List item
+	 * @property  {Object|Array}  models     List of items
+	 * @property  {number}        oldIndex   before sort
+	 * @property  {number}        newIndex   after sort
+	 */
+
+
+	angular.module('ng-sortable', [])
+		.constant('ngSortableVersion', '0.3.7')
+		.constant('ngSortableConfig', {})
+		.directive('ngSortable', ['$parse', 'ngSortableConfig', function ($parse, ngSortableConfig) {
+			var removed,
+				nextSibling;
+
+			function getSource(el) {
+				var scope = angular.element(el).scope();
+				var ngRepeat = [].filter.call(el.childNodes, function (node) {
+					return (
+							(node.nodeType === 8) &&
+							(node.nodeValue.indexOf('ngRepeat:') !== -1)
+						);
+				})[0];
+
+				if (!ngRepeat) {
+					// Without ng-repeat
+					return null;
+				}
+
+				// tests: http://jsbin.com/kosubutilo/1/edit?js,output
+				ngRepeat = ngRepeat.nodeValue.match(/ngRepeat:\s*(?:\(.*?,\s*)?([^\s)]+)[\s)]+in\s+([^\s|]+)/);
+
+				var itemExpr = $parse(ngRepeat[1]);
+				var itemsExpr = $parse(ngRepeat[2]);
+
+				return {
+					item: function (el) {
+						return itemExpr(angular.element(el).scope());
+					},
+					items: function () {
+						return itemsExpr(scope);
+					}
+				};
+			}
+
+
+			// Export
+			return {
+				restrict: 'AC',
+				scope: { ngSortable: "=?" },
+				link: function (scope, $el, attrs) {
+					var el = $el[0],
+						options = angular.extend(scope.ngSortable || {}, ngSortableConfig),
+						source = getSource(el),
+						watchers = [],
+						sortable
+					;
+
+
+					function _emitEvent(/**Event*/evt, /*Mixed*/item) {
+						var name = 'on' + evt.type.charAt(0).toUpperCase() + evt.type.substr(1);
+
+						/* jshint expr:true */
+						options[name] && options[name]({
+							model: item || source && source.item(evt.item),
+							models: source && source.items(),
+							oldIndex: evt.oldIndex,
+							newIndex: evt.newIndex
+						});
+					}
+
+
+					function _sync(/**Event*/evt) {
+						if (!source) {
+							// Without ng-repeat
+							return;
+						}
+
+						var oldIndex = evt.oldIndex,
+							newIndex = evt.newIndex,
+							items = source.items();
+
+						if (el !== evt.from) {
+							var prevSource = getSource(evt.from),
+								prevItems = prevSource.items();
+
+							oldIndex = prevItems.indexOf(prevSource.item(evt.item));
+							removed = prevItems[oldIndex];
+
+							if (evt.clone) {
+								evt.from.removeChild(evt.clone);
+								removed = angular.copy(removed);
+							}
+							else {
+								prevItems.splice(oldIndex, 1);
+							}
+
+							items.splice(newIndex, 0, removed);
+
+							evt.from.insertBefore(evt.item, nextSibling); // revert element
+						}
+						else {
+							items.splice(newIndex, 0, items.splice(oldIndex, 1)[0]);
+						}
+
+						scope.$apply();
+					}
+
+
+					sortable = Sortable.create(el, Object.keys(options).reduce(function (opts, name) {
+						opts[name] = opts[name] || options[name];
+						return opts;
+					}, {
+						onStart: function (/**Event*/evt) {
+							nextSibling = evt.item.nextSibling;
+							_emitEvent(evt);
+							scope.$apply();
+						},
+						onEnd: function (/**Event*/evt) {
+							_emitEvent(evt, removed);
+							scope.$apply();
+						},
+						onAdd: function (/**Event*/evt) {
+							_sync(evt);
+							_emitEvent(evt, removed);
+							scope.$apply();
+						},
+						onUpdate: function (/**Event*/evt) {
+							_sync(evt);
+							_emitEvent(evt);
+						},
+						onRemove: function (/**Event*/evt) {
+							_emitEvent(evt, removed);
+						},
+						onSort: function (/**Event*/evt) {
+							_emitEvent(evt);
+						}
+					}));
+
+					$el.on('$destroy', function () {
+						angular.forEach(watchers, function (/** Function */unwatch) {
+							unwatch();
+						});
+						sortable.destroy();
+						watchers = null;
+						sortable = null;
+						nextSibling = null;
+					});
+
+					angular.forEach([
+						'sort', 'disabled', 'draggable', 'handle', 'animation',
+						'onStart', 'onEnd', 'onAdd', 'onUpdate', 'onRemove', 'onSort'
+					], function (name) {
+						watchers.push(scope.$watch('ngSortable.' + name, function (value) {
+							if (value !== void 0) {
+								options[name] = value;
+
+								if (!/^on[A-Z]/.test(name)) {
+									sortable.option(name, value);
+								}
+							}
+						}));
+					});
+				}
+			};
+		}]);
+});
diff --git a/public/bower_components/Sortable/react-sortable-mixin.js b/public/bower_components/Sortable/react-sortable-mixin.js
new file mode 100644
index 0000000..56ae93d
--- /dev/null
+++ b/public/bower_components/Sortable/react-sortable-mixin.js
@@ -0,0 +1,157 @@
+/**
+ * @author RubaXa <[email-masked]>
+ * @licence MIT
+ */
+
+(function (factory) {
+	'use strict';
+
+	if (typeof module != 'undefined' && typeof module.exports != 'undefined') {
+		module.exports = factory(require('./Sortable'));
+	}
+	else if (typeof define === 'function' && define.amd) {
+		define(['./Sortable'], factory);
+	}
+	else {
+		/* jshint sub:true */
+		window['SortableMixin'] = factory(Sortable);
+	}
+})(function (/** Sortable */Sortable) {
+	'use strict';
+
+	var _nextSibling;
+
+	var _activeComponent;
+
+	var _defaultOptions = {
+		ref: 'list',
+		model: 'items',
+
+		animation: 100,
+		onStart: 'handleStart',
+		onEnd: 'handleEnd',
+		onAdd: 'handleAdd',
+		onUpdate: 'handleUpdate',
+		onRemove: 'handleRemove',
+		onSort: 'handleSort',
+		onFilter: 'handleFilter'
+	};
+
+
+	function _getModelName(component) {
+		return component.sortableOptions && component.sortableOptions.model || _defaultOptions.model;
+	}
+
+
+	function _getModelItems(component) {
+		var name = _getModelName(component),
+			items = component.state && component.state[name] || component.props[name];
+
+		return items.slice();
+	}
+
+
+	function _extend(dst, src) {
+		for (var key in src) {
+			if (src.hasOwnProperty(key)) {
+				dst[key] = src[key];
+			}
+		}
+
+		return dst;
+	}
+
+
+	/**
+	 * Simple and easy mixin-wrapper for rubaxa/Sortable library, in order to
+	 * make reorderable drag-and-drop lists on modern browsers and touch devices.
+	 *
+	 * @mixin
+	 */
+	var SortableMixin = {
+		sortableMixinVersion: '0.1.0',
+
+
+		/**
+		 * @type {Sortable}
+		 * @private
+		 */
+		_sortableInstance: null,
+
+
+		componentDidMount: function () {
+			var options = _extend(_extend({}, _defaultOptions), this.sortableOptions || {}),
+				copyOptions = _extend({}, options),
+
+				emitEvent = function (/** string */type, /** Event */evt) {
+					var method = this[options[type]];
+					method && method.call(this, evt, this._sortableInstance);
+				}.bind(this);
+
+
+			// Bind callbacks so that "this" refers to the component
+			'onStart onEnd onAdd onSort onUpdate onRemove onFilter'.split(' ').forEach(function (/** string */name) {
+				copyOptions[name] = function (evt) {
+					if (name === 'onStart') {
+						_nextSibling = evt.item.nextElementSibling;
+						_activeComponent = this;
+					}
+					else if (name === 'onAdd' || name === 'onUpdate') {
+						evt.from.insertBefore(evt.item, _nextSibling);
+
+						var newState = {},
+							remoteState = {},
+							oldIndex = evt.oldIndex,
+							newIndex = evt.newIndex,
+							items = _getModelItems(this),
+							remoteItems,
+							item;
+
+						if (name === 'onAdd') {
+							remoteItems = _getModelItems(_activeComponent);
+							item = remoteItems.splice(oldIndex, 1)[0];
+							items.splice(newIndex, 0, item);
+
+							remoteState[_getModelName(_activeComponent)] = remoteItems;
+						}
+						else {
+							items.splice(newIndex, 0, items.splice(oldIndex, 1)[0]);
+						}
+
+						newState[_getModelName(this)] = items;
+						this.setState(newState);
+						(this !== _activeComponent) && _activeComponent.setState(remoteState);
+					}
+
+					setTimeout(function () {
+						emitEvent(name, evt);
+					}, 0);
+				}.bind(this);
+			}, this);
+
+
+			/** @namespace this.refs — http://facebook.github.io/react/docs/more-about-refs.html */
+			this._sortableInstance = Sortable.create((this.refs[options.ref] || this).getDOMNode(), copyOptions);
+		},
+
+		componentWillReceiveProps: function (nextProps) {
+			var newState = {},
+				modelName = _getModelName(this),
+				items = nextProps[modelName];
+
+			if (items) {
+				newState[modelName] = items;
+				this.setState(newState);
+			}
+		},
+
+		componentWillUnmount: function () {
+			this._sortableInstance.destroy();
+			this._sortableInstance = null;
+		}
+	};
+
+
+	// Export
+	return SortableMixin;
+});
diff --git a/public/bower_components/adf-structures-base/adf-structures-base.js b/public/bower_components/adf-structures-base/adf-structures-base.js
new file mode 100644
index 0000000..7e9edd7
--- /dev/null
+++ b/public/bower_components/adf-structures-base/adf-structures-base.js
@@ -0,0 +1,116 @@
+/* *
+ * The MIT License
+ *
+ * Copyright (c) 2015, Sebastian Sdorra
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+'use strict';
+
+angular.module('adf.structures.base', ['adf'])
+  .config(function(dashboardProvider){
+
+    dashboardProvider
+      .structure('6-6', {
+        rows: [{
+          columns: [{
+            styleClass: 'col-md-6'
+          }, {
+            styleClass: 'col-md-6'
+          }]
+        }]
+      })
+      .structure('4-8', {
+        rows: [{
+          columns: [{
+            styleClass: 'col-md-4',
+            widgets: []
+          }, {
+            styleClass: 'col-md-8',
+            widgets: []
+          }]
+        }]
+      })
+      .structure('12/4-4-4', {
+        rows: [{
+          columns: [{
+            styleClass: 'col-md-12'
+          }]
+        }, {
+          columns: [{
+            styleClass: 'col-md-4'
+          }, {
+            styleClass: 'col-md-4'
+          }, {
+            styleClass: 'col-md-4'
+          }]
+        }]
+      })
+      .structure('12/6-6', {
+        rows: [{
+          columns: [{
+            styleClass: 'col-md-12'
+          }]
+        }, {
+          columns: [{
+            styleClass: 'col-md-6'
+          }, {
+            styleClass: 'col-md-6'
+          }]
+        }]
+      })
+      .structure('12/6-6/12', {
+        rows: [{
+          columns: [{
+            styleClass: 'col-md-12'
+          }]
+        }, {
+          columns: [{
+            styleClass: 'col-md-6'
+          }, {
+            styleClass: 'col-md-6'
+          }]
+        }, {
+          columns: [{
+            styleClass: 'col-md-12'
+          }]
+        }]
+      })
+      .structure('3-9 (12/6-6)', {
+        rows: [{
+          columns: [{
+            styleClass: 'col-md-3'
+          }, {
+            styleClass: 'col-md-9',
+            rows: [{
+              columns: [{
+                styleClass: 'col-md-12'
+              }]
+            }, {
+              columns: [{
+                styleClass: 'col-md-6'
+              }, {
+                styleClass: 'col-md-6'
+              }]
+            }]
+          }]
+        }]
+      });
+
+  });
diff --git a/public/bower_components/adf-widget-clock/adf-widget-clock.css b/public/bower_components/adf-widget-clock/adf-widget-clock.css
new file mode 100644
index 0000000..fbba935
--- /dev/null
+++ b/public/bower_components/adf-widget-clock/adf-widget-clock.css
@@ -0,0 +1,11 @@
+.clock {
+  text-align: center;
+}
+
+.clock-time {
+  font-size: 3em;
+}
+
+.clock-date {
+  font-size: 1em;
+}
diff --git a/public/bower_components/adf-widget-clock/adf-widget-clock.js b/public/bower_components/adf-widget-clock/adf-widget-clock.js
new file mode 100644
index 0000000..2ce3614
--- /dev/null
+++ b/public/bower_components/adf-widget-clock/adf-widget-clock.js
@@ -0,0 +1,67 @@
+(function(window, undefined) {'use strict';
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015, Sebastian Sdorra
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+
+
+angular.module('adf.widget.clock', ['adf.provider'])
+  .config(["dashboardProvider", function(dashboardProvider){
+    dashboardProvider
+      .widget('clock', {
+        title: 'Clock',
+        description: 'Displays date and time',
+        templateUrl: '{widgetsPath}/clock/src/view.html',
+        controller: 'clockController',
+        controllerAs: 'clock',
+        config: {
+          timePattern: 'HH:mm:ss',
+          datePattern: 'YYYY-MM-DD'
+        },
+        edit: {
+          templateUrl: '{widgetsPath}/clock/src/edit.html'
+        }
+      });
+  }])
+  .controller('clockController', ["$scope", "$interval", "config", function($scope, $interval, config){
+    var clock = this;
+
+    function setDateAndTime(){
+      var d = new moment();
+      clock.time = d.format(config.timePattern);
+      clock.date = d.format(config.datePattern);
+    }
+
+    setDateAndTime();
+
+    // refresh every second
+    var promise = $interval(setDateAndTime, 1000);
+
+    // cancel interval on scope destroy
+    $scope.$on('$destroy', function(){
+      $interval.cancel(promise);
+    });
+  }]);
+
+angular.module("adf.widget.clock").run(["$templateCache", function($templateCache) {$templateCache.put("{widgetsPath}/clock/src/edit.html","<form role=form><div class=form-group><label for=time>Time pattern</label> <input type=text class=form-control id=time ng-model=config.timePattern></div><div class=form-group><label for=date>Date pattern</label> <input type=text class=form-control id=date ng-model=config.datePattern></div><p class=text-info>For the list of possible patterns, please have a look at <a target=_blank href=\"http://momentjs.com/docs/#/displaying/\">moment.js documentation</a></p></form>");
+$templateCache.put("{widgetsPath}/clock/src/view.html","<div class=clock><div class=clock-time>{{clock.time}}</div><div class=clock-date>{{clock.date}}</div></div>");}]);})(window);
\ No newline at end of file
diff --git a/public/bower_components/adf-widget-iframe/adf-widget-iframe.css b/public/bower_components/adf-widget-iframe/adf-widget-iframe.css
new file mode 100644
index 0000000..0116987
--- /dev/null
+++ b/public/bower_components/adf-widget-iframe/adf-widget-iframe.css
@@ -0,0 +1,6 @@
+iframe {
+  width: 100%;
+  height: 100%;
+  min-height: 400px;
+  border: 1px solid grey;
+}
diff --git a/public/bower_components/adf-widget-iframe/adf-widget-iframe.js b/public/bower_components/adf-widget-iframe/adf-widget-iframe.js
new file mode 100644
index 0000000..c3194ab
--- /dev/null
+++ b/public/bower_components/adf-widget-iframe/adf-widget-iframe.js
@@ -0,0 +1,28 @@
+(function(window, undefined) {'use strict';
+
+
+angular.module('adf.widget.iframe', ['adf.provider'])
+  .config(["dashboardProvider", function(dashboardProvider){
+    dashboardProvider
+      .widget('iframe', {
+        title: 'iframe',
+        description: 'Embed an external page into the dashboard',
+        templateUrl: '{widgetsPath}/iframe/src/view.html',
+        controller: 'iframeController',
+        controllerAs: 'iframe',
+        edit: {
+          templateUrl: '{widgetsPath}/iframe/src/edit.html'
+        },
+        config: {
+          height: '420px'
+        }
+      });
+  }])
+  .controller('iframeController', ["$sce", "config", function($sce, config){
+    if (config.url){
+      this.url = $sce.trustAsResourceUrl(config.url);
+    }
+  }]);
+
+angular.module("adf.widget.iframe").run(["$templateCache", function($templateCache) {$templateCache.put("{widgetsPath}/iframe/src/edit.html","<form role=form><div class=form-group><label for=url>URL</label> <input type=url class=form-control id=url ng-model=config.url placeholder=http://www.example.com></div><div class=form-group><label for=url>Height</label> <input type=text class=form-control id=url ng-model=config.height></div></form>");
+$templateCache.put("{widgetsPath}/iframe/src/view.html","<div><div class=\"alert alert-info\" ng-if=!config.url>Please insert a url in the widget configuration</div><iframe ng-if=iframe.url class=adf-iframe style=\"height: {{config.height}}\" src={{iframe.url}}></iframe></div>");}]);})(window);
\ No newline at end of file
diff --git a/public/bower_components/angular-animate/angular-animate.js b/public/bower_components/angular-animate/angular-animate.js
new file mode 100644
index 0000000..3061004
--- /dev/null
+++ b/public/bower_components/angular-animate/angular-animate.js
@@ -0,0 +1,3930 @@
+/**
+ * @license AngularJS v1.4.8
+ * (c) 2010-2015 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/* jshint ignore:start */
+var noop        = angular.noop;
+var extend      = angular.extend;
+var jqLite      = angular.element;
+var forEach     = angular.forEach;
+var isArray     = angular.isArray;
+var isString    = angular.isString;
+var isObject    = angular.isObject;
+var isUndefined = angular.isUndefined;
+var isDefined   = angular.isDefined;
+var isFunction  = angular.isFunction;
+var isElement   = angular.isElement;
+
+var ELEMENT_NODE = 1;
+var COMMENT_NODE = 8;
+
+var ADD_CLASS_SUFFIX = '-add';
+var REMOVE_CLASS_SUFFIX = '-remove';
+var EVENT_CLASS_PREFIX = 'ng-';
+var ACTIVE_CLASS_SUFFIX = '-active';
+
+var NG_ANIMATE_CLASSNAME = 'ng-animate';
+var NG_ANIMATE_CHILDREN_DATA = '$$ngAnimateChildren';
+
+// Detect proper transitionend/animationend event names.
+var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT;
+
+// If unprefixed events are not supported but webkit-prefixed are, use the latter.
+// Otherwise, just use W3C names, browsers not supporting them at all will just ignore them.
+// Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend`
+// but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`.
+// Register both events in case `window.onanimationend` is not supported because of that,
+// do the same for `transitionend` as Safari is likely to exhibit similar behavior.
+// Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit
+// therefore there is no reason to test anymore for other vendor prefixes:
+// http://caniuse.com/#search=transition
+if (isUndefined(window.ontransitionend) && isDefined(window.onwebkittransitionend)) {
+  CSS_PREFIX = '-webkit-';
+  TRANSITION_PROP = 'WebkitTransition';
+  TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend';
+} else {
+  TRANSITION_PROP = 'transition';
+  TRANSITIONEND_EVENT = 'transitionend';
+}
+
+if (isUndefined(window.onanimationend) && isDefined(window.onwebkitanimationend)) {
+  CSS_PREFIX = '-webkit-';
+  ANIMATION_PROP = 'WebkitAnimation';
+  ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend';
+} else {
+  ANIMATION_PROP = 'animation';
+  ANIMATIONEND_EVENT = 'animationend';
+}
+
+var DURATION_KEY = 'Duration';
+var PROPERTY_KEY = 'Property';
+var DELAY_KEY = 'Delay';
+var TIMING_KEY = 'TimingFunction';
+var ANIMATION_ITERATION_COUNT_KEY = 'IterationCount';
+var ANIMATION_PLAYSTATE_KEY = 'PlayState';
+var SAFE_FAST_FORWARD_DURATION_VALUE = 9999;
+
+var ANIMATION_DELAY_PROP = ANIMATION_PROP + DELAY_KEY;
+var ANIMATION_DURATION_PROP = ANIMATION_PROP + DURATION_KEY;
+var TRANSITION_DELAY_PROP = TRANSITION_PROP + DELAY_KEY;
+var TRANSITION_DURATION_PROP = TRANSITION_PROP + DURATION_KEY;
+
+var isPromiseLike = function(p) {
+  return p && p.then ? true : false;
+};
+
+function assertArg(arg, name, reason) {
+  if (!arg) {
+    throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required"));
+  }
+  return arg;
+}
+
+function mergeClasses(a,b) {
+  if (!a && !b) return '';
+  if (!a) return b;
+  if (!b) return a;
+  if (isArray(a)) a = a.join(' ');
+  if (isArray(b)) b = b.join(' ');
+  return a + ' ' + b;
+}
+
+function packageStyles(options) {
+  var styles = {};
+  if (options && (options.to || options.from)) {
+    styles.to = options.to;
+    styles.from = options.from;
+  }
+  return styles;
+}
+
+function pendClasses(classes, fix, isPrefix) {
+  var className = '';
+  classes = isArray(classes)
+      ? classes
+      : classes && isString(classes) && classes.length
+          ? classes.split(/\s+/)
+          : [];
+  forEach(classes, function(klass, i) {
+    if (klass && klass.length > 0) {
+      className += (i > 0) ? ' ' : '';
+      className += isPrefix ? fix + klass
+                            : klass + fix;
+    }
+  });
+  return className;
+}
+
+function removeFromArray(arr, val) {
+  var index = arr.indexOf(val);
+  if (val >= 0) {
+    arr.splice(index, 1);
+  }
+}
+
+function stripCommentsFromElement(element) {
+  if (element instanceof jqLite) {
+    switch (element.length) {
+      case 0:
+        return [];
+        break;
+
+      case 1:
+        // there is no point of stripping anything if the element
+        // is the only element within the jqLite wrapper.
+        // (it's important that we retain the element instance.)
+        if (element[0].nodeType === ELEMENT_NODE) {
+          return element;
+        }
+        break;
+
+      default:
+        return jqLite(extractElementNode(element));
+        break;
+    }
+  }
+
+  if (element.nodeType === ELEMENT_NODE) {
+    return jqLite(element);
+  }
+}
+
+function extractElementNode(element) {
+  if (!element[0]) return element;
+  for (var i = 0; i < element.length; i++) {
+    var elm = element[i];
+    if (elm.nodeType == ELEMENT_NODE) {
+      return elm;
+    }
+  }
+}
+
+function $$addClass($$jqLite, element, className) {
+  forEach(element, function(elm) {
+    $$jqLite.addClass(elm, className);
+  });
+}
+
+function $$removeClass($$jqLite, element, className) {
+  forEach(element, function(elm) {
+    $$jqLite.removeClass(elm, className);
+  });
+}
+
+function applyAnimationClassesFactory($$jqLite) {
+  return function(element, options) {
+    if (options.addClass) {
+      $$addClass($$jqLite, element, options.addClass);
+      options.addClass = null;
+    }
+    if (options.removeClass) {
+      $$removeClass($$jqLite, element, options.removeClass);
+      options.removeClass = null;
+    }
+  }
+}
+
+function prepareAnimationOptions(options) {
+  options = options || {};
+  if (!options.$$prepared) {
+    var domOperation = options.domOperation || noop;
+    options.domOperation = function() {
+      options.$$domOperationFired = true;
+      domOperation();
+      domOperation = noop;
+    };
+    options.$$prepared = true;
+  }
+  return options;
+}
+
+function applyAnimationStyles(element, options) {
+  applyAnimationFromStyles(element, options);
+  applyAnimationToStyles(element, options);
+}
+
+function applyAnimationFromStyles(element, options) {
+  if (options.from) {
+    element.css(options.from);
+    options.from = null;
+  }
+}
+
+function applyAnimationToStyles(element, options) {
+  if (options.to) {
+    element.css(options.to);
+    options.to = null;
+  }
+}
+
+function mergeAnimationOptions(element, target, newOptions) {
+  var toAdd = (target.addClass || '') + ' ' + (newOptions.addClass || '');
+  var toRemove = (target.removeClass || '') + ' ' + (newOptions.removeClass || '');
+  var classes = resolveElementClasses(element.attr('class'), toAdd, toRemove);
+
+  if (newOptions.preparationClasses) {
+    target.preparationClasses = concatWithSpace(newOptions.preparationClasses, target.preparationClasses);
+    delete newOptions.preparationClasses;
+  }
+
+  // noop is basically when there is no callback; otherwise something has been set
+  var realDomOperation = target.domOperation !== noop ? target.domOperation : null;
+
+  extend(target, newOptions);
+
+  // TODO(matsko or sreeramu): proper fix is to maintain all animation callback in array and call at last,but now only leave has the callback so no issue with this.
+  if (realDomOperation) {
+    target.domOperation = realDomOperation;
+  }
+
+  if (classes.addClass) {
+    target.addClass = classes.addClass;
+  } else {
+    target.addClass = null;
+  }
+
+  if (classes.removeClass) {
+    target.removeClass = classes.removeClass;
+  } else {
+    target.removeClass = null;
+  }
+
+  return target;
+}
+
+function resolveElementClasses(existing, toAdd, toRemove) {
+  var ADD_CLASS = 1;
+  var REMOVE_CLASS = -1;
+
+  var flags = {};
+  existing = splitClassesToLookup(existing);
+
+  toAdd = splitClassesToLookup(toAdd);
+  forEach(toAdd, function(value, key) {
+    flags[key] = ADD_CLASS;
+  });
+
+  toRemove = splitClassesToLookup(toRemove);
+  forEach(toRemove, function(value, key) {
+    flags[key] = flags[key] === ADD_CLASS ? null : REMOVE_CLASS;
+  });
+
+  var classes = {
+    addClass: '',
+    removeClass: ''
+  };
+
+  forEach(flags, function(val, klass) {
+    var prop, allow;
+    if (val === ADD_CLASS) {
+      prop = 'addClass';
+      allow = !existing[klass];
+    } else if (val === REMOVE_CLASS) {
+      prop = 'removeClass';
+      allow = existing[klass];
+    }
+    if (allow) {
+      if (classes[prop].length) {
+        classes[prop] += ' ';
+      }
+      classes[prop] += klass;
+    }
+  });
+
+  function splitClassesToLookup(classes) {
+    if (isString(classes)) {
+      classes = classes.split(' ');
+    }
+
+    var obj = {};
+    forEach(classes, function(klass) {
+      // sometimes the split leaves empty string values
+      // incase extra spaces were applied to the options
+      if (klass.length) {
+        obj[klass] = true;
+      }
+    });
+    return obj;
+  }
+
+  return classes;
+}
+
+function getDomNode(element) {
+  return (element instanceof angular.element) ? element[0] : element;
+}
+
+function applyGeneratedPreparationClasses(element, event, options) {
+  var classes = '';
+  if (event) {
+    classes = pendClasses(event, EVENT_CLASS_PREFIX, true);
+  }
+  if (options.addClass) {
+    classes = concatWithSpace(classes, pendClasses(options.addClass, ADD_CLASS_SUFFIX));
+  }
+  if (options.removeClass) {
+    classes = concatWithSpace(classes, pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX));
+  }
+  if (classes.length) {
+    options.preparationClasses = classes;
+    element.addClass(classes);
+  }
+}
+
+function clearGeneratedClasses(element, options) {
+  if (options.preparationClasses) {
+    element.removeClass(options.preparationClasses);
+    options.preparationClasses = null;
+  }
+  if (options.activeClasses) {
+    element.removeClass(options.activeClasses);
+    options.activeClasses = null;
+  }
+}
+
+function blockTransitions(node, duration) {
+  // we use a negative delay value since it performs blocking
+  // yet it doesn't kill any existing transitions running on the
+  // same element which makes this safe for class-based animations
+  var value = duration ? '-' + duration + 's' : '';
+  applyInlineStyle(node, [TRANSITION_DELAY_PROP, value]);
+  return [TRANSITION_DELAY_PROP, value];
+}
+
+function blockKeyframeAnimations(node, applyBlock) {
+  var value = applyBlock ? 'paused' : '';
+  var key = ANIMATION_PROP + ANIMATION_PLAYSTATE_KEY;
+  applyInlineStyle(node, [key, value]);
+  return [key, value];
+}
+
+function applyInlineStyle(node, styleTuple) {
+  var prop = styleTuple[0];
+  var value = styleTuple[1];
+  node.style[prop] = value;
+}
+
+function concatWithSpace(a,b) {
+  if (!a) return b;
+  if (!b) return a;
+  return a + ' ' + b;
+}
+
+var $$rAFSchedulerFactory = ['$$rAF', function($$rAF) {
+  var queue, cancelFn;
+
+  function scheduler(tasks) {
+    // we make a copy since RAFScheduler mutates the state
+    // of the passed in array variable and this would be difficult
+    // to track down on the outside code
+    queue = queue.concat(tasks);
+    nextTick();
+  }
+
+  queue = scheduler.queue = [];
+
+  /* waitUntilQuiet does two things:
+   * 1. It will run the FINAL `fn` value only when an uncancelled RAF has passed through
+   * 2. It will delay the next wave of tasks from running until the quiet `fn` has run.
+   *
+   * The motivation here is that animation code can request more time from the scheduler
+   * before the next wave runs. This allows for certain DOM properties such as classes to
+   * be resolved in time for the next animation to run.
+   */
+  scheduler.waitUntilQuiet = function(fn) {
+    if (cancelFn) cancelFn();
+
+    cancelFn = $$rAF(function() {
+      cancelFn = null;
+      fn();
+      nextTick();
+    });
+  };
+
+  return scheduler;
+
+  function nextTick() {
+    if (!queue.length) return;
+
+    var items = queue.shift();
+    for (var i = 0; i < items.length; i++) {
+      items[i]();
+    }
+
+    if (!cancelFn) {
+      $$rAF(function() {
+        if (!cancelFn) nextTick();
+      });
+    }
+  }
+}];
+
+var $$AnimateChildrenDirective = [function() {
+  return function(scope, element, attrs) {
+    var val = attrs.ngAnimateChildren;
+    if (angular.isString(val) && val.length === 0) { //empty attribute
+      element.data(NG_ANIMATE_CHILDREN_DATA, true);
+    } else {
+      attrs.$observe('ngAnimateChildren', function(value) {
+        value = value === 'on' || value === 'true';
+        element.data(NG_ANIMATE_CHILDREN_DATA, value);
+      });
+    }
+  };
+}];
+
+var ANIMATE_TIMER_KEY = '$$animateCss';
+
+/**
+ * @ngdoc service
+ * @name $animateCss
+ * @kind object
+ *
+ * @description
+ * The `$animateCss` service is a useful utility to trigger customized CSS-based transitions/keyframes
+ * from a JavaScript-based animation or directly from a directive. The purpose of `$animateCss` is NOT
+ * to side-step how `$animate` and ngAnimate work, but the goal is to allow pre-existing animations or
+ * directives to create more complex animations that can be purely driven using CSS code.
+ *
+ * Note that only browsers that support CSS transitions and/or keyframe animations are capable of
+ * rendering animations triggered via `$animateCss` (bad news for IE9 and lower).
+ *
+ * ## Usage
+ * Once again, `$animateCss` is designed to be used inside of a registered JavaScript animation that
+ * is powered by ngAnimate. It is possible to use `$animateCss` directly inside of a directive, however,
+ * any automatic control over cancelling animations and/or preventing animations from being run on
+ * child elements will not be handled by Angular. For this to work as expected, please use `$animate` to
+ * trigger the animation and then setup a JavaScript animation that injects `$animateCss` to trigger
+ * the CSS animation.
+ *
+ * The example below shows how we can create a folding animation on an element using `ng-if`:
+ *
+ * ```html
+ * <!-- notice the `fold-animation` CSS class -->
+ * <div ng-if="onOff" class="fold-animation">
+ *   This element will go BOOM
+ * </div>
+ * <button ng-click="onOff=true">Fold In</button>
+ * ```
+ *
+ * Now we create the **JavaScript animation** that will trigger the CSS transition:
+ *
+ * ```js
+ * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) {
+ *   return {
+ *     enter: function(element, doneFn) {
+ *       var height = element[0].offsetHeight;
+ *       return $animateCss(element, {
+ *         from: { height:'0px' },
+ *         to: { height:height + 'px' },
+ *         duration: 1 // one second
+ *       });
+ *     }
+ *   }
+ * }]);
+ * ```
+ *
+ * ## More Advanced Uses
+ *
+ * `$animateCss` is the underlying code that ngAnimate uses to power **CSS-based animations** behind the scenes. Therefore CSS hooks
+ * like `.ng-EVENT`, `.ng-EVENT-active`, `.ng-EVENT-stagger` are all features that can be triggered using `$animateCss` via JavaScript code.
+ *
+ * This also means that just about any combination of adding classes, removing classes, setting styles, dynamically setting a keyframe animation,
+ * applying a hardcoded duration or delay value, changing the animation easing or applying a stagger animation are all options that work with
+ * `$animateCss`. The service itself is smart enough to figure out the combination of options and examine the element styling properties in order
+ * to provide a working animation that will run in CSS.
+ *
+ * The example below showcases a more advanced version of the `.fold-animation` from the example above:
+ *
+ * ```js
+ * ngModule.animation('.fold-animation', ['$animateCss', function($animateCss) {
+ *   return {
+ *     enter: function(element, doneFn) {
+ *       var height = element[0].offsetHeight;
+ *       return $animateCss(element, {
+ *         addClass: 'red large-text pulse-twice',
+ *         easing: 'ease-out',
+ *         from: { height:'0px' },
+ *         to: { height:height + 'px' },
+ *         duration: 1 // one second
+ *       });
+ *     }
+ *   }
+ * }]);
+ * ```
+ *
+ * Since we're adding/removing CSS classes then the CSS transition will also pick those up:
+ *
+ * ```css
+ * /&#42; since a hardcoded duration value of 1 was provided in the JavaScript animation code,
+ * the CSS classes below will be transitioned despite them being defined as regular CSS classes &#42;/
+ * .red { background:red; }
+ * .large-text { font-size:20px; }
+ *
+ * /&#42; we can also use a keyframe animation and $animateCss will make it work alongside the transition &#42;/
+ * .pulse-twice {
+ *   animation: 0.5s pulse linear 2;
+ *   -webkit-animation: 0.5s pulse linear 2;
+ * }
+ *
+ * @keyframes pulse {
+ *   from { transform: scale(0.5); }
+ *   to { transform: scale(1.5); }
+ * }
+ *
+ * @-webkit-keyframes pulse {
+ *   from { -webkit-transform: scale(0.5); }
+ *   to { -webkit-transform: scale(1.5); }
+ * }
+ * ```
+ *
+ * Given this complex combination of CSS classes, styles and options, `$animateCss` will figure everything out and make the animation happen.
+ *
+ * ## How the Options are handled
+ *
+ * `$animateCss` is very versatile and intelligent when it comes to figuring out what configurations to apply to the element to ensure the animation
+ * works with the options provided. Say for example we were adding a class that contained a keyframe value and we wanted to also animate some inline
+ * styles using the `from` and `to` properties.
+ *
+ * ```js
+ * var animator = $animateCss(element, {
+ *   from: { background:'red' },
+ *   to: { background:'blue' }
+ * });
+ * animator.start();
+ * ```
+ *
+ * ```css
+ * .rotating-animation {
+ *   animation:0.5s rotate linear;
+ *   -webkit-animation:0.5s rotate linear;
+ * }
+ *
+ * @keyframes rotate {
+ *   from { transform: rotate(0deg); }
+ *   to { transform: rotate(360deg); }
+ * }
+ *
+ * @-webkit-keyframes rotate {
+ *   from { -webkit-transform: rotate(0deg); }
+ *   to { -webkit-transform: rotate(360deg); }
+ * }
+ * ```
+ *
+ * The missing pieces here are that we do not have a transition set (within the CSS code nor within the `$animateCss` options) and the duration of the animation is
+ * going to be detected from what the keyframe styles on the CSS class are. In this event, `$animateCss` will automatically create an inline transition
+ * style matching the duration detected from the keyframe style (which is present in the CSS class that is being added) and then prepare both the transition
+ * and keyframe animations to run in parallel on the element. Then when the animation is underway the provided `from` and `to` CSS styles will be applied
+ * and spread across the transition and keyframe animation.
+ *
+ * ## What is returned
+ *
+ * `$animateCss` works in two stages: a preparation phase and an animation phase. Therefore when `$animateCss` is first called it will NOT actually
+ * start the animation. All that is going on here is that the element is being prepared for the animation (which means that the generated CSS classes are
+ * added and removed on the element). Once `$animateCss` is called it will return an object with the following properties:
+ *
+ * ```js
+ * var animator = $animateCss(element, { ... });
+ * ```
+ *
+ * Now what do the contents of our `animator` variable look like:
+ *
+ * ```js
+ * {
+ *   // starts the animation
+ *   start: Function,
+ *
+ *   // ends (aborts) the animation
+ *   end: Function
+ * }
+ * ```
+ *
+ * To actually start the animation we need to run `animation.start()` which will then return a promise that we can hook into to detect when the animation ends.
+ * If we choose not to run the animation then we MUST run `animation.end()` to perform a cleanup on the element (since some CSS classes and stlyes may have been
+ * applied to the element during the preparation phase). Note that all other properties such as duration, delay, transitions and keyframes are just properties
+ * and that changing them will not reconfigure the parameters of the animation.
+ *
+ * ### runner.done() vs runner.then()
+ * It is documented that `animation.start()` will return a promise object and this is true, however, there is also an additional method available on the
+ * runner called `.done(callbackFn)`. The done method works the same as `.finally(callbackFn)`, however, it does **not trigger a digest to occur**.
+ * Therefore, for performance reasons, it's always best to use `runner.done(callback)` instead of `runner.then()`, `runner.catch()` or `runner.finally()`
+ * unless you really need a digest to kick off afterwards.
+ *
+ * Keep in mind that, to make this easier, ngAnimate has tweaked the JS animations API to recognize when a runner instance is returned from $animateCss
+ * (so there is no need to call `runner.done(doneFn)` inside of your JavaScript animation code).
+ * Check the {@link ngAnimate.$animateCss#usage animation code above} to see how this works.
+ *
+ * @param {DOMElement} element the element that will be animated
+ * @param {object} options the animation-related options that will be applied during the animation
+ *
+ * * `event` - The DOM event (e.g. enter, leave, move). When used, a generated CSS class of `ng-EVENT` and `ng-EVENT-active` will be applied
+ * to the element during the animation. Multiple events can be provided when spaces are used as a separator. (Note that this will not perform any DOM operation.)
+ * * `structural` - Indicates that the `ng-` prefix will be added to the event class. Setting to `false` or omitting will turn `ng-EVENT` and
+ * `ng-EVENT-active` in `EVENT` and `EVENT-active`. Unused if `event` is omitted.
+ * * `easing` - The CSS easing value that will be applied to the transition or keyframe animation (or both).
+ * * `transitionStyle` - The raw CSS transition style that will be used (e.g. `1s linear all`).
+ * * `keyframeStyle` - The raw CSS keyframe animation style that will be used (e.g. `1s my_animation linear`).
+ * * `from` - The starting CSS styles (a key/value object) that will be applied at the start of the animation.
+ * * `to` - The ending CSS styles (a key/value object) that will be applied across the animation via a CSS transition.
+ * * `addClass` - A space separated list of CSS classes that will be added to the element and spread across the animation.
+ * * `removeClass` - A space separated list of CSS classes that will be removed from the element and spread across the animation.
+ * * `duration` - A number value representing the total duration of the transition and/or keyframe (note that a value of 1 is 1000ms). If a value of `0`
+ * is provided then the animation will be skipped entirely.
+ * * `delay` - A number value representing the total delay of the transition and/or keyframe (note that a value of 1 is 1000ms). If a value of `true` is
+ * used then whatever delay value is detected from the CSS classes will be mirrored on the elements styles (e.g. by setting delay true then the style value
+ * of the element will be `transition-delay: DETECTED_VALUE`). Using `true` is useful when you want the CSS classes and inline styles to all share the same
+ * CSS delay value.
+ * * `stagger` - A numeric time value representing the delay between successively animated elements
+ * ({@link ngAnimate#css-staggering-animations Click here to learn how CSS-based staggering works in ngAnimate.})
+ * * `staggerIndex` - The numeric index representing the stagger item (e.g. a value of 5 is equal to the sixth item in the stagger; therefore when a
+ * * `stagger` option value of `0.1` is used then there will be a stagger delay of `600ms`)
+ * * `applyClassesEarly` - Whether or not the classes being added or removed will be used when detecting the animation. This is set by `$animate` when enter/leave/move animations are fired to ensure that the CSS classes are resolved in time. (Note that this will prevent any transitions from occuring on the classes being added and removed.)
+ * * `cleanupStyles` - Whether or not the provided `from` and `to` styles will be removed once
+ *    the animation is closed. This is useful for when the styles are used purely for the sake of
+ *    the animation and do not have a lasting visual effect on the element (e.g. a colapse and open animation).
+ *    By default this value is set to `false`.
+ *
+ * @return {object} an object with start and end methods and details about the animation.
+ *
+ * * `start` - The method to start the animation. This will return a `Promise` when called.
+ * * `end` - This method will cancel the animation and remove all applied CSS classes and styles.
+ */
+var ONE_SECOND = 1000;
+var BASE_TEN = 10;
+
+var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;
+var CLOSING_TIME_BUFFER = 1.5;
+
+var DETECT_CSS_PROPERTIES = {
+  transitionDuration:      TRANSITION_DURATION_PROP,
+  transitionDelay:         TRANSITION_DELAY_PROP,
+  transitionProperty:      TRANSITION_PROP + PROPERTY_KEY,
+  animationDuration:       ANIMATION_DURATION_PROP,
+  animationDelay:          ANIMATION_DELAY_PROP,
+  animationIterationCount: ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY
+};
+
+var DETECT_STAGGER_CSS_PROPERTIES = {
+  transitionDuration:      TRANSITION_DURATION_PROP,
+  transitionDelay:         TRANSITION_DELAY_PROP,
+  animationDuration:       ANIMATION_DURATION_PROP,
+  animationDelay:          ANIMATION_DELAY_PROP
+};
+
+function getCssKeyframeDurationStyle(duration) {
+  return [ANIMATION_DURATION_PROP, duration + 's'];
+}
+
+function getCssDelayStyle(delay, isKeyframeAnimation) {
+  var prop = isKeyframeAnimation ? ANIMATION_DELAY_PROP : TRANSITION_DELAY_PROP;
+  return [prop, delay + 's'];
+}
+
+function computeCssStyles($window, element, properties) {
+  var styles = Object.create(null);
+  var detectedStyles = $window.getComputedStyle(element) || {};
+  forEach(properties, function(formalStyleName, actualStyleName) {
+    var val = detectedStyles[formalStyleName];
+    if (val) {
+      var c = val.charAt(0);
+
+      // only numerical-based values have a negative sign or digit as the first value
+      if (c === '-' || c === '+' || c >= 0) {
+        val = parseMaxTime(val);
+      }
+
+      // by setting this to null in the event that the delay is not set or is set directly as 0
+      // then we can still allow for zegative values to be used later on and not mistake this
+      // value for being greater than any other negative value.
+      if (val === 0) {
+        val = null;
+      }
+      styles[actualStyleName] = val;
+    }
+  });
+
+  return styles;
+}
+
+function parseMaxTime(str) {
+  var maxValue = 0;
+  var values = str.split(/\s*,\s*/);
+  forEach(values, function(value) {
+    // it's always safe to consider only second values and omit `ms` values since
+    // getComputedStyle will always handle the conversion for us
+    if (value.charAt(value.length - 1) == 's') {
+      value = value.substring(0, value.length - 1);
+    }
+    value = parseFloat(value) || 0;
+    maxValue = maxValue ? Math.max(value, maxValue) : value;
+  });
+  return maxValue;
+}
+
+function truthyTimingValue(val) {
+  return val === 0 || val != null;
+}
+
+function getCssTransitionDurationStyle(duration, applyOnlyDuration) {
+  var style = TRANSITION_PROP;
+  var value = duration + 's';
+  if (applyOnlyDuration) {
+    style += DURATION_KEY;
+  } else {
+    value += ' linear all';
+  }
+  return [style, value];
+}
+
+function createLocalCacheLookup() {
+  var cache = Object.create(null);
+  return {
+    flush: function() {
+      cache = Object.create(null);
+    },
+
+    count: function(key) {
+      var entry = cache[key];
+      return entry ? entry.total : 0;
+    },
+
+    get: function(key) {
+      var entry = cache[key];
+      return entry && entry.value;
+    },
+
+    put: function(key, value) {
+      if (!cache[key]) {
+        cache[key] = { total: 1, value: value };
+      } else {
+        cache[key].total++;
+      }
+    }
+  };
+}
+
+// we do not reassign an already present style value since
+// if we detect the style property value again we may be
+// detecting styles that were added via the `from` styles.
+// We make use of `isDefined` here since an empty string
+// or null value (which is what getPropertyValue will return
+// for a non-existing style) will still be marked as a valid
+// value for the style (a falsy value implies that the style
+// is to be removed at the end of the animation). If we had a simple
+// "OR" statement then it would not be enough to catch that.
+function registerRestorableStyles(backup, node, properties) {
+  forEach(properties, function(prop) {
+    backup[prop] = isDefined(backup[prop])
+        ? backup[prop]
+        : node.style.getPropertyValue(prop);
+  });
+}
+
+var $AnimateCssProvider = ['$animateProvider', function($animateProvider) {
+  var gcsLookup = createLocalCacheLookup();
+  var gcsStaggerLookup = createLocalCacheLookup();
+
+  this.$get = ['$window', '$$jqLite', '$$AnimateRunner', '$timeout',
+               '$$forceReflow', '$sniffer', '$$rAFScheduler', '$animate',
+       function($window,   $$jqLite,   $$AnimateRunner,   $timeout,
+                $$forceReflow,   $sniffer,   $$rAFScheduler, $animate) {
+
+    var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
+
+    var parentCounter = 0;
+    function gcsHashFn(node, extraClasses) {
+      var KEY = "$$ngAnimateParentKey";
+      var parentNode = node.parentNode;
+      var parentID = parentNode[KEY] || (parentNode[KEY] = ++parentCounter);
+      return parentID + '-' + node.getAttribute('class') + '-' + extraClasses;
+    }
+
+    function computeCachedCssStyles(node, className, cacheKey, properties) {
+      var timings = gcsLookup.get(cacheKey);
+
+      if (!timings) {
+        timings = computeCssStyles($window, node, properties);
+        if (timings.animationIterationCount === 'infinite') {
+          timings.animationIterationCount = 1;
+        }
+      }
+
+      // we keep putting this in multiple times even though the value and the cacheKey are the same
+      // because we're keeping an interal tally of how many duplicate animations are detected.
+      gcsLookup.put(cacheKey, timings);
+      return timings;
+    }
+
+    function computeCachedCssStaggerStyles(node, className, cacheKey, properties) {
+      var stagger;
+
+      // if we have one or more existing matches of matching elements
+      // containing the same parent + CSS styles (which is how cacheKey works)
+      // then staggering is possible
+      if (gcsLookup.count(cacheKey) > 0) {
+        stagger = gcsStaggerLookup.get(cacheKey);
+
+        if (!stagger) {
+          var staggerClassName = pendClasses(className, '-stagger');
+
+          $$jqLite.addClass(node, staggerClassName);
+
+          stagger = computeCssStyles($window, node, properties);
+
+          // force the conversion of a null value to zero incase not set
+          stagger.animationDuration = Math.max(stagger.animationDuration, 0);
+          stagger.transitionDuration = Math.max(stagger.transitionDuration, 0);
+
+          $$jqLite.removeClass(node, staggerClassName);
+
+          gcsStaggerLookup.put(cacheKey, stagger);
+        }
+      }
+
+      return stagger || {};
+    }
+
+    var cancelLastRAFRequest;
+    var rafWaitQueue = [];
+    function waitUntilQuiet(callback) {
+      rafWaitQueue.push(callback);
+      $$rAFScheduler.waitUntilQuiet(function() {
+        gcsLookup.flush();
+        gcsStaggerLookup.flush();
+
+        // DO NOT REMOVE THIS LINE OR REFACTOR OUT THE `pageWidth` variable.
+        // PLEASE EXAMINE THE `$$forceReflow` service to understand why.
+        var pageWidth = $$forceReflow();
+
+        // we use a for loop to ensure that if the queue is changed
+        // during this looping then it will consider new requests
+        for (var i = 0; i < rafWaitQueue.length; i++) {
+          rafWaitQueue[i](pageWidth);
+        }
+        rafWaitQueue.length = 0;
+      });
+    }
+
+    function computeTimings(node, className, cacheKey) {
+      var timings = computeCachedCssStyles(node, className, cacheKey, DETECT_CSS_PROPERTIES);
+      var aD = timings.animationDelay;
+      var tD = timings.transitionDelay;
+      timings.maxDelay = aD && tD
+          ? Math.max(aD, tD)
+          : (aD || tD);
+      timings.maxDuration = Math.max(
+          timings.animationDuration * timings.animationIterationCount,
+          timings.transitionDuration);
+
+      return timings;
+    }
+
+    return function init(element, options) {
+      var restoreStyles = {};
+      var node = getDomNode(element);
+      if (!node
+          || !node.parentNode
+          || !$animate.enabled()) {
+        return closeAndReturnNoopAnimator();
+      }
+
+      options = prepareAnimationOptions(options);
+
+      var temporaryStyles = [];
+      var classes = element.attr('class');
+      var styles = packageStyles(options);
+      var animationClosed;
+      var animationPaused;
+      var animationCompleted;
+      var runner;
+      var runnerHost;
+      var maxDelay;
+      var maxDelayTime;
+      var maxDuration;
+      var maxDurationTime;
+
+      if (options.duration === 0 || (!$sniffer.animations && !$sniffer.transitions)) {
+        return closeAndReturnNoopAnimator();
+      }
+
+      var method = options.event && isArray(options.event)
+            ? options.event.join(' ')
+            : options.event;
+
+      var isStructural = method && options.structural;
+      var structuralClassName = '';
+      var addRemoveClassName = '';
+
+      if (isStructural) {
+        structuralClassName = pendClasses(method, EVENT_CLASS_PREFIX, true);
+      } else if (method) {
+        structuralClassName = method;
+      }
+
+      if (options.addClass) {
+        addRemoveClassName += pendClasses(options.addClass, ADD_CLASS_SUFFIX);
+      }
+
+      if (options.removeClass) {
+        if (addRemoveClassName.length) {
+          addRemoveClassName += ' ';
+        }
+        addRemoveClassName += pendClasses(options.removeClass, REMOVE_CLASS_SUFFIX);
+      }
+
+      // there may be a situation where a structural animation is combined together
+      // with CSS classes that need to resolve before the animation is computed.
+      // However this means that there is no explicit CSS code to block the animation
+      // from happening (by setting 0s none in the class name). If this is the case
+      // we need to apply the classes before the first rAF so we know to continue if
+      // there actually is a detected transition or keyframe animation
+      if (options.applyClassesEarly && addRemoveClassName.length) {
+        applyAnimationClasses(element, options);
+      }
+
+      var preparationClasses = [structuralClassName, addRemoveClassName].join(' ').trim();
+      var fullClassName = classes + ' ' + preparationClasses;
+      var activeClasses = pendClasses(preparationClasses, ACTIVE_CLASS_SUFFIX);
+      var hasToStyles = styles.to && Object.keys(styles.to).length > 0;
+      var containsKeyframeAnimation = (options.keyframeStyle || '').length > 0;
+
+      // there is no way we can trigger an animation if no styles and
+      // no classes are being applied which would then trigger a transition,
+      // unless there a is raw keyframe value that is applied to the element.
+      if (!containsKeyframeAnimation
+           && !hasToStyles
+           && !preparationClasses) {
+        return closeAndReturnNoopAnimator();
+      }
+
+      var cacheKey, stagger;
+      if (options.stagger > 0) {
+        var staggerVal = parseFloat(options.stagger);
+        stagger = {
+          transitionDelay: staggerVal,
+          animationDelay: staggerVal,
+          transitionDuration: 0,
+          animationDuration: 0
+        };
+      } else {
+        cacheKey = gcsHashFn(node, fullClassName);
+        stagger = computeCachedCssStaggerStyles(node, preparationClasses, cacheKey, DETECT_STAGGER_CSS_PROPERTIES);
+      }
+
+      if (!options.$$skipPreparationClasses) {
+        $$jqLite.addClass(element, preparationClasses);
+      }
+
+      var applyOnlyDuration;
+
+      if (options.transitionStyle) {
+        var transitionStyle = [TRANSITION_PROP, options.transitionStyle];
+        applyInlineStyle(node, transitionStyle);
+        temporaryStyles.push(transitionStyle);
+      }
+
+      if (options.duration >= 0) {
+        applyOnlyDuration = node.style[TRANSITION_PROP].length > 0;
+        var durationStyle = getCssTransitionDurationStyle(options.duration, applyOnlyDuration);
+
+        // we set the duration so that it will be picked up by getComputedStyle later
+        applyInlineStyle(node, durationStyle);
+        temporaryStyles.push(durationStyle);
+      }
+
+      if (options.keyframeStyle) {
+        var keyframeStyle = [ANIMATION_PROP, options.keyframeStyle];
+        applyInlineStyle(node, keyframeStyle);
+        temporaryStyles.push(keyframeStyle);
+      }
+
+      var itemIndex = stagger
+          ? options.staggerIndex >= 0
+              ? options.staggerIndex
+              : gcsLookup.count(cacheKey)
+          : 0;
+
+      var isFirst = itemIndex === 0;
+
+      // this is a pre-emptive way of forcing the setup classes to be added and applied INSTANTLY
+      // without causing any combination of transitions to kick in. By adding a negative delay value
+      // it forces the setup class' transition to end immediately. We later then remove the negative
+      // transition delay to allow for the transition to naturally do it's thing. The beauty here is
+      // that if there is no transition defined then nothing will happen and this will also allow
+      // other transitions to be stacked on top of each other without any chopping them out.
+      if (isFirst && !options.skipBlocking) {
+        blockTransitions(node, SAFE_FAST_FORWARD_DURATION_VALUE);
+      }
+
+      var timings = computeTimings(node, fullClassName, cacheKey);
+      var relativeDelay = timings.maxDelay;
+      maxDelay = Math.max(relativeDelay, 0);
+      maxDuration = timings.maxDuration;
+
+      var flags = {};
+      flags.hasTransitions          = timings.transitionDuration > 0;
+      flags.hasAnimations           = timings.animationDuration > 0;
+      flags.hasTransitionAll        = flags.hasTransitions && timings.transitionProperty == 'all';
+      flags.applyTransitionDuration = hasToStyles && (
+                                        (flags.hasTransitions && !flags.hasTransitionAll)
+                                         || (flags.hasAnimations && !flags.hasTransitions));
+      flags.applyAnimationDuration  = options.duration && flags.hasAnimations;
+      flags.applyTransitionDelay    = truthyTimingValue(options.delay) && (flags.applyTransitionDuration || flags.hasTransitions);
+      flags.applyAnimationDelay     = truthyTimingValue(options.delay) && flags.hasAnimations;
+      flags.recalculateTimingStyles = addRemoveClassName.length > 0;
+
+      if (flags.applyTransitionDuration || flags.applyAnimationDuration) {
+        maxDuration = options.duration ? parseFloat(options.duration) : maxDuration;
+
+        if (flags.applyTransitionDuration) {
+          flags.hasTransitions = true;
+          timings.transitionDuration = maxDuration;
+          applyOnlyDuration = node.style[TRANSITION_PROP + PROPERTY_KEY].length > 0;
+          temporaryStyles.push(getCssTransitionDurationStyle(maxDuration, applyOnlyDuration));
+        }
+
+        if (flags.applyAnimationDuration) {
+          flags.hasAnimations = true;
+          timings.animationDuration = maxDuration;
+          temporaryStyles.push(getCssKeyframeDurationStyle(maxDuration));
+        }
+      }
+
+      if (maxDuration === 0 && !flags.recalculateTimingStyles) {
+        return closeAndReturnNoopAnimator();
+      }
+
+      if (options.delay != null) {
+        var delayStyle = parseFloat(options.delay);
+
+        if (flags.applyTransitionDelay) {
+          temporaryStyles.push(getCssDelayStyle(delayStyle));
+        }
+
+        if (flags.applyAnimationDelay) {
+          temporaryStyles.push(getCssDelayStyle(delayStyle, true));
+        }
+      }
+
+      // we need to recalculate the delay value since we used a pre-emptive negative
+      // delay value and the delay value is required for the final event checking. This
+      // property will ensure that this will happen after the RAF phase has passed.
+      if (options.duration == null && timings.transitionDuration > 0) {
+        flags.recalculateTimingStyles = flags.recalculateTimingStyles || isFirst;
+      }
+
+      maxDelayTime = maxDelay * ONE_SECOND;
+      maxDurationTime = maxDuration * ONE_SECOND;
+      if (!options.skipBlocking) {
+        flags.blockTransition = timings.transitionDuration > 0;
+        flags.blockKeyframeAnimation = timings.animationDuration > 0 &&
+                                       stagger.animationDelay > 0 &&
+                                       stagger.animationDuration === 0;
+      }
+
+      if (options.from) {
+        if (options.cleanupStyles) {
+          registerRestorableStyles(restoreStyles, node, Object.keys(options.from));
+        }
+        applyAnimationFromStyles(element, options);
+      }
+
+      if (flags.blockTransition || flags.blockKeyframeAnimation) {
+        applyBlocking(maxDuration);
+      } else if (!options.skipBlocking) {
+        blockTransitions(node, false);
+      }
+
+      // TODO(matsko): for 1.5 change this code to have an animator object for better debugging
+      return {
+        $$willAnimate: true,
+        end: endFn,
+        start: function() {
+          if (animationClosed) return;
+
+          runnerHost = {
+            end: endFn,
+            cancel: cancelFn,
+            resume: null, //this will be set during the start() phase
+            pause: null
+          };
+
+          runner = new $$AnimateRunner(runnerHost);
+
+          waitUntilQuiet(start);
+
+          // we don't have access to pause/resume the animation
+          // since it hasn't run yet. AnimateRunner will therefore
+          // set noop functions for resume and pause and they will
+          // later be overridden once the animation is triggered
+          return runner;
+        }
+      };
+
+      function endFn() {
+        close();
+      }
+
+      function cancelFn() {
+        close(true);
+      }
+
+      function close(rejected) { // jshint ignore:line
+        // if the promise has been called already then we shouldn't close
+        // the animation again
+        if (animationClosed || (animationCompleted && animationPaused)) return;
+        animationClosed = true;
+        animationPaused = false;
+
+        if (!options.$$skipPreparationClasses) {
+          $$jqLite.removeClass(element, preparationClasses);
+        }
+        $$jqLite.removeClass(element, activeClasses);
+
+        blockKeyframeAnimations(node, false);
+        blockTransitions(node, false);
+
+        forEach(temporaryStyles, function(entry) {
+          // There is only one way to remove inline style properties entirely from elements.
+          // By using `removeProperty` this works, but we need to convert camel-cased CSS
+          // styles down to hyphenated values.
+          node.style[entry[0]] = '';
+        });
+
+        applyAnimationClasses(element, options);
+        applyAnimationStyles(element, options);
+
+        if (Object.keys(restoreStyles).length) {
+          forEach(restoreStyles, function(value, prop) {
+            value ? node.style.setProperty(prop, value)
+                  : node.style.removeProperty(prop);
+          });
+        }
+
+        // the reason why we have this option is to allow a synchronous closing callback
+        // that is fired as SOON as the animation ends (when the CSS is removed) or if
+        // the animation never takes off at all. A good example is a leave animation since
+        // the element must be removed just after the animation is over or else the element
+        // will appear on screen for one animation frame causing an overbearing flicker.
+        if (options.onDone) {
+          options.onDone();
+        }
+
+        // if the preparation function fails then the promise is not setup
+        if (runner) {
+          runner.complete(!rejected);
+        }
+      }
+
+      function applyBlocking(duration) {
+        if (flags.blockTransition) {
+          blockTransitions(node, duration);
+        }
+
+        if (flags.blockKeyframeAnimation) {
+          blockKeyframeAnimations(node, !!duration);
+        }
+      }
+
+      function closeAndReturnNoopAnimator() {
+        runner = new $$AnimateRunner({
+          end: endFn,
+          cancel: cancelFn
+        });
+
+        // should flush the cache animation
+        waitUntilQuiet(noop);
+        close();
+
+        return {
+          $$willAnimate: false,
+          start: function() {
+            return runner;
+          },
+          end: endFn
+        };
+      }
+
+      function start() {
+        if (animationClosed) return;
+        if (!node.parentNode) {
+          close();
+          return;
+        }
+
+        var startTime, events = [];
+
+        // even though we only pause keyframe animations here the pause flag
+        // will still happen when transitions are used. Only the transition will
+        // not be paused since that is not possible. If the animation ends when
+        // paused then it will not complete until unpaused or cancelled.
+        var playPause = function(playAnimation) {
+          if (!animationCompleted) {
+            animationPaused = !playAnimation;
+            if (timings.animationDuration) {
+              var value = blockKeyframeAnimations(node, animationPaused);
+              animationPaused
+                  ? temporaryStyles.push(value)
+                  : removeFromArray(temporaryStyles, value);
+            }
+          } else if (animationPaused && playAnimation) {
+            animationPaused = false;
+            close();
+          }
+        };
+
+        // checking the stagger duration prevents an accidently cascade of the CSS delay style
+        // being inherited from the parent. If the transition duration is zero then we can safely
+        // rely that the delay value is an intential stagger delay style.
+        var maxStagger = itemIndex > 0
+                         && ((timings.transitionDuration && stagger.transitionDuration === 0) ||
+                            (timings.animationDuration && stagger.animationDuration === 0))
+                         && Math.max(stagger.animationDelay, stagger.transitionDelay);
+        if (maxStagger) {
+          $timeout(triggerAnimationStart,
+                   Math.floor(maxStagger * itemIndex * ONE_SECOND),
+                   false);
+        } else {
+          triggerAnimationStart();
+        }
+
+        // this will decorate the existing promise runner with pause/resume methods
+        runnerHost.resume = function() {
+          playPause(true);
+        };
+
+        runnerHost.pause = function() {
+          playPause(false);
+        };
+
+        function triggerAnimationStart() {
+          // just incase a stagger animation kicks in when the animation
+          // itself was cancelled entirely
+          if (animationClosed) return;
+
+          applyBlocking(false);
+
+          forEach(temporaryStyles, function(entry) {
+            var key = entry[0];
+            var value = entry[1];
+            node.style[key] = value;
+          });
+
+          applyAnimationClasses(element, options);
+          $$jqLite.addClass(element, activeClasses);
+
+          if (flags.recalculateTimingStyles) {
+            fullClassName = node.className + ' ' + preparationClasses;
+            cacheKey = gcsHashFn(node, fullClassName);
+
+            timings = computeTimings(node, fullClassName, cacheKey);
+            relativeDelay = timings.maxDelay;
+            maxDelay = Math.max(relativeDelay, 0);
+            maxDuration = timings.maxDuration;
+
+            if (maxDuration === 0) {
+              close();
+              return;
+            }
+
+            flags.hasTransitions = timings.transitionDuration > 0;
+            flags.hasAnimations = timings.animationDuration > 0;
+          }
+
+          if (flags.applyAnimationDelay) {
+            relativeDelay = typeof options.delay !== "boolean" && truthyTimingValue(options.delay)
+                  ? parseFloat(options.delay)
+                  : relativeDelay;
+
+            maxDelay = Math.max(relativeDelay, 0);
+            timings.animationDelay = relativeDelay;
+            delayStyle = getCssDelayStyle(relativeDelay, true);
+            temporaryStyles.push(delayStyle);
+            node.style[delayStyle[0]] = delayStyle[1];
+          }
+
+          maxDelayTime = maxDelay * ONE_SECOND;
+          maxDurationTime = maxDuration * ONE_SECOND;
+
+          if (options.easing) {
+            var easeProp, easeVal = options.easing;
+            if (flags.hasTransitions) {
+              easeProp = TRANSITION_PROP + TIMING_KEY;
+              temporaryStyles.push([easeProp, easeVal]);
+              node.style[easeProp] = easeVal;
+            }
+            if (flags.hasAnimations) {
+              easeProp = ANIMATION_PROP + TIMING_KEY;
+              temporaryStyles.push([easeProp, easeVal]);
+              node.style[easeProp] = easeVal;
+            }
+          }
+
+          if (timings.transitionDuration) {
+            events.push(TRANSITIONEND_EVENT);
+          }
+
+          if (timings.animationDuration) {
+            events.push(ANIMATIONEND_EVENT);
+          }
+
+          startTime = Date.now();
+          var timerTime = maxDelayTime + CLOSING_TIME_BUFFER * maxDurationTime;
+          var endTime = startTime + timerTime;
+
+          var animationsData = element.data(ANIMATE_TIMER_KEY) || [];
+          var setupFallbackTimer = true;
+          if (animationsData.length) {
+            var currentTimerData = animationsData[0];
+            setupFallbackTimer = endTime > currentTimerData.expectedEndTime;
+            if (setupFallbackTimer) {
+              $timeout.cancel(currentTimerData.timer);
+            } else {
+              animationsData.push(close);
+            }
+          }
+
+          if (setupFallbackTimer) {
+            var timer = $timeout(onAnimationExpired, timerTime, false);
+            animationsData[0] = {
+              timer: timer,
+              expectedEndTime: endTime
+            };
+            animationsData.push(close);
+            element.data(ANIMATE_TIMER_KEY, animationsData);
+          }
+
+          element.on(events.join(' '), onAnimationProgress);
+          if (options.to) {
+            if (options.cleanupStyles) {
+              registerRestorableStyles(restoreStyles, node, Object.keys(options.to));
+            }
+            applyAnimationToStyles(element, options);
+          }
+        }
+
+        function onAnimationExpired() {
+          var animationsData = element.data(ANIMATE_TIMER_KEY);
+
+          // this will be false in the event that the element was
+          // removed from the DOM (via a leave animation or something
+          // similar)
+          if (animationsData) {
+            for (var i = 1; i < animationsData.length; i++) {
+              animationsData[i]();
+            }
+            element.removeData(ANIMATE_TIMER_KEY);
+          }
+        }
+
+        function onAnimationProgress(event) {
+          event.stopPropagation();
+          var ev = event.originalEvent || event;
+          var timeStamp = ev.$manualTimeStamp || ev.timeStamp || Date.now();
+
+          /* Firefox (or possibly just Gecko) likes to not round values up
+           * when a ms measurement is used for the animation */
+          var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES));
+
+          /* $manualTimeStamp is a mocked timeStamp value which is set
+           * within browserTrigger(). This is only here so that tests can
+           * mock animations properly. Real events fallback to event.timeStamp,
+           * or, if they don't, then a timeStamp is automatically created for them.
+           * We're checking to see if the timeStamp surpasses the expected delay,
+           * but we're using elapsedTime instead of the timeStamp on the 2nd
+           * pre-condition since animations sometimes close off early */
+          if (Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) {
+            // we set this flag to ensure that if the transition is paused then, when resumed,
+            // the animation will automatically close itself since transitions cannot be paused.
+            animationCompleted = true;
+            close();
+          }
+        }
+      }
+    };
+  }];
+}];
+
+var $$AnimateCssDriverProvider = ['$$animationProvider', function($$animationProvider) {
+  $$animationProvider.drivers.push('$$animateCssDriver');
+
+  var NG_ANIMATE_SHIM_CLASS_NAME = 'ng-animate-shim';
+  var NG_ANIMATE_ANCHOR_CLASS_NAME = 'ng-anchor';
+
+  var NG_OUT_ANCHOR_CLASS_NAME = 'ng-anchor-out';
+  var NG_IN_ANCHOR_CLASS_NAME = 'ng-anchor-in';
+
+  function isDocumentFragment(node) {
+    return node.parentNode && node.parentNode.nodeType === 11;
+  }
+
+  this.$get = ['$animateCss', '$rootScope', '$$AnimateRunner', '$rootElement', '$sniffer', '$$jqLite', '$document',
+       function($animateCss,   $rootScope,   $$AnimateRunner,   $rootElement,   $sniffer,   $$jqLite,   $document) {
+
+    // only browsers that support these properties can render animations
+    if (!$sniffer.animations && !$sniffer.transitions) return noop;
+
+    var bodyNode = $document[0].body;
+    var rootNode = getDomNode($rootElement);
+
+    var rootBodyElement = jqLite(
+      // this is to avoid using something that exists outside of the body
+      // we also special case the doc fragement case because our unit test code
+      // appends the $rootElement to the body after the app has been bootstrapped
+      isDocumentFragment(rootNode) || bodyNode.contains(rootNode) ? rootNode : bodyNode
+    );
+
+    var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
+
+    return function initDriverFn(animationDetails) {
+      return animationDetails.from && animationDetails.to
+          ? prepareFromToAnchorAnimation(animationDetails.from,
+                                         animationDetails.to,
+                                         animationDetails.classes,
+                                         animationDetails.anchors)
+          : prepareRegularAnimation(animationDetails);
+    };
+
+    function filterCssClasses(classes) {
+      //remove all the `ng-` stuff
+      return classes.replace(/\bng-\S+\b/g, '');
+    }
+
+    function getUniqueValues(a, b) {
+      if (isString(a)) a = a.split(' ');
+      if (isString(b)) b = b.split(' ');
+      return a.filter(function(val) {
+        return b.indexOf(val) === -1;
+      }).join(' ');
+    }
+
+    function prepareAnchoredAnimation(classes, outAnchor, inAnchor) {
+      var clone = jqLite(getDomNode(outAnchor).cloneNode(true));
+      var startingClasses = filterCssClasses(getClassVal(clone));
+
+      outAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME);
+      inAnchor.addClass(NG_ANIMATE_SHIM_CLASS_NAME);
+
+      clone.addClass(NG_ANIMATE_ANCHOR_CLASS_NAME);
+
+      rootBodyElement.append(clone);
+
+      var animatorIn, animatorOut = prepareOutAnimation();
+
+      // the user may not end up using the `out` animation and
+      // only making use of the `in` animation or vice-versa.
+      // In either case we should allow this and not assume the
+      // animation is over unless both animations are not used.
+      if (!animatorOut) {
+        animatorIn = prepareInAnimation();
+        if (!animatorIn) {
+          return end();
+        }
+      }
+
+      var startingAnimator = animatorOut || animatorIn;
+
+      return {
+        start: function() {
+          var runner;
+
+          var currentAnimation = startingAnimator.start();
+          currentAnimation.done(function() {
+            currentAnimation = null;
+            if (!animatorIn) {
+              animatorIn = prepareInAnimation();
+              if (animatorIn) {
+                currentAnimation = animatorIn.start();
+                currentAnimation.done(function() {
+                  currentAnimation = null;
+                  end();
+                  runner.complete();
+                });
+                return currentAnimation;
+              }
+            }
+            // in the event that there is no `in` animation
+            end();
+            runner.complete();
+          });
+
+          runner = new $$AnimateRunner({
+            end: endFn,
+            cancel: endFn
+          });
+
+          return runner;
+
+          function endFn() {
+            if (currentAnimation) {
+              currentAnimation.end();
+            }
+          }
+        }
+      };
+
+      function calculateAnchorStyles(anchor) {
+        var styles = {};
+
+        var coords = getDomNode(anchor).getBoundingClientRect();
+
+        // we iterate directly since safari messes up and doesn't return
+        // all the keys for the coods object when iterated
+        forEach(['width','height','top','left'], function(key) {
+          var value = coords[key];
+          switch (key) {
+            case 'top':
+              value += bodyNode.scrollTop;
+              break;
+            case 'left':
+              value += bodyNode.scrollLeft;
+              break;
+          }
+          styles[key] = Math.floor(value) + 'px';
+        });
+        return styles;
+      }
+
+      function prepareOutAnimation() {
+        var animator = $animateCss(clone, {
+          addClass: NG_OUT_ANCHOR_CLASS_NAME,
+          delay: true,
+          from: calculateAnchorStyles(outAnchor)
+        });
+
+        // read the comment within `prepareRegularAnimation` to understand
+        // why this check is necessary
+        return animator.$$willAnimate ? animator : null;
+      }
+
+      function getClassVal(element) {
+        return element.attr('class') || '';
+      }
+
+      function prepareInAnimation() {
+        var endingClasses = filterCssClasses(getClassVal(inAnchor));
+        var toAdd = getUniqueValues(endingClasses, startingClasses);
+        var toRemove = getUniqueValues(startingClasses, endingClasses);
+
+        var animator = $animateCss(clone, {
+          to: calculateAnchorStyles(inAnchor),
+          addClass: NG_IN_ANCHOR_CLASS_NAME + ' ' + toAdd,
+          removeClass: NG_OUT_ANCHOR_CLASS_NAME + ' ' + toRemove,
+          delay: true
+        });
+
+        // read the comment within `prepareRegularAnimation` to understand
+        // why this check is necessary
+        return animator.$$willAnimate ? animator : null;
+      }
+
+      function end() {
+        clone.remove();
+        outAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME);
+        inAnchor.removeClass(NG_ANIMATE_SHIM_CLASS_NAME);
+      }
+    }
+
+    function prepareFromToAnchorAnimation(from, to, classes, anchors) {
+      var fromAnimation = prepareRegularAnimation(from, noop);
+      var toAnimation = prepareRegularAnimation(to, noop);
+
+      var anchorAnimations = [];
+      forEach(anchors, function(anchor) {
+        var outElement = anchor['out'];
+        var inElement = anchor['in'];
+        var animator = prepareAnchoredAnimation(classes, outElement, inElement);
+        if (animator) {
+          anchorAnimations.push(animator);
+        }
+      });
+
+      // no point in doing anything when there are no elements to animate
+      if (!fromAnimation && !toAnimation && anchorAnimations.length === 0) return;
+
+      return {
+        start: function() {
+          var animationRunners = [];
+
+          if (fromAnimation) {
+            animationRunners.push(fromAnimation.start());
+          }
+
+          if (toAnimation) {
+            animationRunners.push(toAnimation.start());
+          }
+
+          forEach(anchorAnimations, function(animation) {
+            animationRunners.push(animation.start());
+          });
+
+          var runner = new $$AnimateRunner({
+            end: endFn,
+            cancel: endFn // CSS-driven animations cannot be cancelled, only ended
+          });
+
+          $$AnimateRunner.all(animationRunners, function(status) {
+            runner.complete(status);
+          });
+
+          return runner;
+
+          function endFn() {
+            forEach(animationRunners, function(runner) {
+              runner.end();
+            });
+          }
+        }
+      };
+    }
+
+    function prepareRegularAnimation(animationDetails) {
+      var element = animationDetails.element;
+      var options = animationDetails.options || {};
+
+      if (animationDetails.structural) {
+        options.event = animationDetails.event;
+        options.structural = true;
+        options.applyClassesEarly = true;
+
+        // we special case the leave animation since we want to ensure that
+        // the element is removed as soon as the animation is over. Otherwise
+        // a flicker might appear or the element may not be removed at all
+        if (animationDetails.event === 'leave') {
+          options.onDone = options.domOperation;
+        }
+      }
+
+      // We assign the preparationClasses as the actual animation event since
+      // the internals of $animateCss will just suffix the event token values
+      // with `-active` to trigger the animation.
+      if (options.preparationClasses) {
+        options.event = concatWithSpace(options.event, options.preparationClasses);
+      }
+
+      var animator = $animateCss(element, options);
+
+      // the driver lookup code inside of $$animation attempts to spawn a
+      // driver one by one until a driver returns a.$$willAnimate animator object.
+      // $animateCss will always return an object, however, it will pass in
+      // a flag as a hint as to whether an animation was detected or not
+      return animator.$$willAnimate ? animator : null;
+    }
+  }];
+}];
+
+// TODO(matsko): use caching here to speed things up for detection
+// TODO(matsko): add documentation
+//  by the time...
+
+var $$AnimateJsProvider = ['$animateProvider', function($animateProvider) {
+  this.$get = ['$injector', '$$AnimateRunner', '$$jqLite',
+       function($injector,   $$AnimateRunner,   $$jqLite) {
+
+    var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
+         // $animateJs(element, 'enter');
+    return function(element, event, classes, options) {
+      // the `classes` argument is optional and if it is not used
+      // then the classes will be resolved from the element's className
+      // property as well as options.addClass/options.removeClass.
+      if (arguments.length === 3 && isObject(classes)) {
+        options = classes;
+        classes = null;
+      }
+
+      options = prepareAnimationOptions(options);
+      if (!classes) {
+        classes = element.attr('class') || '';
+        if (options.addClass) {
+          classes += ' ' + options.addClass;
+        }
+        if (options.removeClass) {
+          classes += ' ' + options.removeClass;
+        }
+      }
+
+      var classesToAdd = options.addClass;
+      var classesToRemove = options.removeClass;
+
+      // the lookupAnimations function returns a series of animation objects that are
+      // matched up with one or more of the CSS classes. These animation objects are
+      // defined via the module.animation factory function. If nothing is detected then
+      // we don't return anything which then makes $animation query the next driver.
+      var animations = lookupAnimations(classes);
+      var before, after;
+      if (animations.length) {
+        var afterFn, beforeFn;
+        if (event == 'leave') {
+          beforeFn = 'leave';
+          afterFn = 'afterLeave'; // TODO(matsko): get rid of this
+        } else {
+          beforeFn = 'before' + event.charAt(0).toUpperCase() + event.substr(1);
+          afterFn = event;
+        }
+
+        if (event !== 'enter' && event !== 'move') {
+          before = packageAnimations(element, event, options, animations, beforeFn);
+        }
+        after  = packageAnimations(element, event, options, animations, afterFn);
+      }
+
+      // no matching animations
+      if (!before && !after) return;
+
+      function applyOptions() {
+        options.domOperation();
+        applyAnimationClasses(element, options);
+      }
+
+      return {
+        start: function() {
+          var closeActiveAnimations;
+          var chain = [];
+
+          if (before) {
+            chain.push(function(fn) {
+              closeActiveAnimations = before(fn);
+            });
+          }
+
+          if (chain.length) {
+            chain.push(function(fn) {
+              applyOptions();
+              fn(true);
+            });
+          } else {
+            applyOptions();
+          }
+
+          if (after) {
+            chain.push(function(fn) {
+              closeActiveAnimations = after(fn);
+            });
+          }
+
+          var animationClosed = false;
+          var runner = new $$AnimateRunner({
+            end: function() {
+              endAnimations();
+            },
+            cancel: function() {
+              endAnimations(true);
+            }
+          });
+
+          $$AnimateRunner.chain(chain, onComplete);
+          return runner;
+
+          function onComplete(success) {
+            animationClosed = true;
+            applyOptions();
+            applyAnimationStyles(element, options);
+            runner.complete(success);
+          }
+
+          function endAnimations(cancelled) {
+            if (!animationClosed) {
+              (closeActiveAnimations || noop)(cancelled);
+              onComplete(cancelled);
+            }
+          }
+        }
+      };
+
+      function executeAnimationFn(fn, element, event, options, onDone) {
+        var args;
+        switch (event) {
+          case 'animate':
+            args = [element, options.from, options.to, onDone];
+            break;
+
+          case 'setClass':
+            args = [element, classesToAdd, classesToRemove, onDone];
+            break;
+
+          case 'addClass':
+            args = [element, classesToAdd, onDone];
+            break;
+
+          case 'removeClass':
+            args = [element, classesToRemove, onDone];
+            break;
+
+          default:
+            args = [element, onDone];
+            break;
+        }
+
+        args.push(options);
+
+        var value = fn.apply(fn, args);
+        if (value) {
+          if (isFunction(value.start)) {
+            value = value.start();
+          }
+
+          if (value instanceof $$AnimateRunner) {
+            value.done(onDone);
+          } else if (isFunction(value)) {
+            // optional onEnd / onCancel callback
+            return value;
+          }
+        }
+
+        return noop;
+      }
+
+      function groupEventedAnimations(element, event, options, animations, fnName) {
+        var operations = [];
+        forEach(animations, function(ani) {
+          var animation = ani[fnName];
+          if (!animation) return;
+
+          // note that all of these animations will run in parallel
+          operations.push(function() {
+            var runner;
+            var endProgressCb;
+
+            var resolved = false;
+            var onAnimationComplete = function(rejected) {
+              if (!resolved) {
+                resolved = true;
+                (endProgressCb || noop)(rejected);
+                runner.complete(!rejected);
+              }
+            };
+
+            runner = new $$AnimateRunner({
+              end: function() {
+                onAnimationComplete();
+              },
+              cancel: function() {
+                onAnimationComplete(true);
+              }
+            });
+
+            endProgressCb = executeAnimationFn(animation, element, event, options, function(result) {
+              var cancelled = result === false;
+              onAnimationComplete(cancelled);
+            });
+
+            return runner;
+          });
+        });
+
+        return operations;
+      }
+
+      function packageAnimations(element, event, options, animations, fnName) {
+        var operations = groupEventedAnimations(element, event, options, animations, fnName);
+        if (operations.length === 0) {
+          var a,b;
+          if (fnName === 'beforeSetClass') {
+            a = groupEventedAnimations(element, 'removeClass', options, animations, 'beforeRemoveClass');
+            b = groupEventedAnimations(element, 'addClass', options, animations, 'beforeAddClass');
+          } else if (fnName === 'setClass') {
+            a = groupEventedAnimations(element, 'removeClass', options, animations, 'removeClass');
+            b = groupEventedAnimations(element, 'addClass', options, animations, 'addClass');
+          }
+
+          if (a) {
+            operations = operations.concat(a);
+          }
+          if (b) {
+            operations = operations.concat(b);
+          }
+        }
+
+        if (operations.length === 0) return;
+
+        // TODO(matsko): add documentation
+        return function startAnimation(callback) {
+          var runners = [];
+          if (operations.length) {
+            forEach(operations, function(animateFn) {
+              runners.push(animateFn());
+            });
+          }
+
+          runners.length ? $$AnimateRunner.all(runners, callback) : callback();
+
+          return function endFn(reject) {
+            forEach(runners, function(runner) {
+              reject ? runner.cancel() : runner.end();
+            });
+          };
+        };
+      }
+    };
+
+    function lookupAnimations(classes) {
+      classes = isArray(classes) ? classes : classes.split(' ');
+      var matches = [], flagMap = {};
+      for (var i=0; i < classes.length; i++) {
+        var klass = classes[i],
+            animationFactory = $animateProvider.$$registeredAnimations[klass];
+        if (animationFactory && !flagMap[klass]) {
+          matches.push($injector.get(animationFactory));
+          flagMap[klass] = true;
+        }
+      }
+      return matches;
+    }
+  }];
+}];
+
+var $$AnimateJsDriverProvider = ['$$animationProvider', function($$animationProvider) {
+  $$animationProvider.drivers.push('$$animateJsDriver');
+  this.$get = ['$$animateJs', '$$AnimateRunner', function($$animateJs, $$AnimateRunner) {
+    return function initDriverFn(animationDetails) {
+      if (animationDetails.from && animationDetails.to) {
+        var fromAnimation = prepareAnimation(animationDetails.from);
+        var toAnimation = prepareAnimation(animationDetails.to);
+        if (!fromAnimation && !toAnimation) return;
+
+        return {
+          start: function() {
+            var animationRunners = [];
+
+            if (fromAnimation) {
+              animationRunners.push(fromAnimation.start());
+            }
+
+            if (toAnimation) {
+              animationRunners.push(toAnimation.start());
+            }
+
+            $$AnimateRunner.all(animationRunners, done);
+
+            var runner = new $$AnimateRunner({
+              end: endFnFactory(),
+              cancel: endFnFactory()
+            });
+
+            return runner;
+
+            function endFnFactory() {
+              return function() {
+                forEach(animationRunners, function(runner) {
+                  // at this point we cannot cancel animations for groups just yet. 1.5+
+                  runner.end();
+                });
+              };
+            }
+
+            function done(status) {
+              runner.complete(status);
+            }
+          }
+        };
+      } else {
+        return prepareAnimation(animationDetails);
+      }
+    };
+
+    function prepareAnimation(animationDetails) {
+      // TODO(matsko): make sure to check for grouped animations and delegate down to normal animations
+      var element = animationDetails.element;
+      var event = animationDetails.event;
+      var options = animationDetails.options;
+      var classes = animationDetails.classes;
+      return $$animateJs(element, event, classes, options);
+    }
+  }];
+}];
+
+var NG_ANIMATE_ATTR_NAME = 'data-ng-animate';
+var NG_ANIMATE_PIN_DATA = '$ngAnimatePin';
+var $$AnimateQueueProvider = ['$animateProvider', function($animateProvider) {
+  var PRE_DIGEST_STATE = 1;
+  var RUNNING_STATE = 2;
+
+  var rules = this.rules = {
+    skip: [],
+    cancel: [],
+    join: []
+  };
+
+  function isAllowed(ruleType, element, currentAnimation, previousAnimation) {
+    return rules[ruleType].some(function(fn) {
+      return fn(element, currentAnimation, previousAnimation);
+    });
+  }
+
+  function hasAnimationClasses(options, and) {
+    options = options || {};
+    var a = (options.addClass || '').length > 0;
+    var b = (options.removeClass || '').length > 0;
+    return and ? a && b : a || b;
+  }
+
+  rules.join.push(function(element, newAnimation, currentAnimation) {
+    // if the new animation is class-based then we can just tack that on
+    return !newAnimation.structural && hasAnimationClasses(newAnimation.options);
+  });
+
+  rules.skip.push(function(element, newAnimation, currentAnimation) {
+    // there is no need to animate anything if no classes are being added and
+    // there is no structural animation that will be triggered
+    return !newAnimation.structural && !hasAnimationClasses(newAnimation.options);
+  });
+
+  rules.skip.push(function(element, newAnimation, currentAnimation) {
+    // why should we trigger a new structural animation if the element will
+    // be removed from the DOM anyway?
+    return currentAnimation.event == 'leave' && newAnimation.structural;
+  });
+
+  rules.skip.push(function(element, newAnimation, currentAnimation) {
+    // if there is an ongoing current animation then don't even bother running the class-based animation
+    return currentAnimation.structural && currentAnimation.state === RUNNING_STATE && !newAnimation.structural;
+  });
+
+  rules.cancel.push(function(element, newAnimation, currentAnimation) {
+    // there can never be two structural animations running at the same time
+    return currentAnimation.structural && newAnimation.structural;
+  });
+
+  rules.cancel.push(function(element, newAnimation, currentAnimation) {
+    // if the previous animation is already running, but the new animation will
+    // be triggered, but the new animation is structural
+    return currentAnimation.state === RUNNING_STATE && newAnimation.structural;
+  });
+
+  rules.cancel.push(function(element, newAnimation, currentAnimation) {
+    var nO = newAnimation.options;
+    var cO = currentAnimation.options;
+
+    // if the exact same CSS class is added/removed then it's safe to cancel it
+    return (nO.addClass && nO.addClass === cO.removeClass) || (nO.removeClass && nO.removeClass === cO.addClass);
+  });
+
+  this.$get = ['$$rAF', '$rootScope', '$rootElement', '$document', '$$HashMap',
+               '$$animation', '$$AnimateRunner', '$templateRequest', '$$jqLite', '$$forceReflow',
+       function($$rAF,   $rootScope,   $rootElement,   $document,   $$HashMap,
+                $$animation,   $$AnimateRunner,   $templateRequest,   $$jqLite,   $$forceReflow) {
+
+    var activeAnimationsLookup = new $$HashMap();
+    var disabledElementsLookup = new $$HashMap();
+    var animationsEnabled = null;
+
+    function postDigestTaskFactory() {
+      var postDigestCalled = false;
+      return function(fn) {
+        // we only issue a call to postDigest before
+        // it has first passed. This prevents any callbacks
+        // from not firing once the animation has completed
+        // since it will be out of the digest cycle.
+        if (postDigestCalled) {
+          fn();
+        } else {
+          $rootScope.$$postDigest(function() {
+            postDigestCalled = true;
+            fn();
+          });
+        }
+      };
+    }
+
+    // Wait until all directive and route-related templates are downloaded and
+    // compiled. The $templateRequest.totalPendingRequests variable keeps track of
+    // all of the remote templates being currently downloaded. If there are no
+    // templates currently downloading then the watcher will still fire anyway.
+    var deregisterWatch = $rootScope.$watch(
+      function() { return $templateRequest.totalPendingRequests === 0; },
+      function(isEmpty) {
+        if (!isEmpty) return;
+        deregisterWatch();
+
+        // Now that all templates have been downloaded, $animate will wait until
+        // the post digest queue is empty before enabling animations. By having two
+        // calls to $postDigest calls we can ensure that the flag is enabled at the
+        // very end of the post digest queue. Since all of the animations in $animate
+        // use $postDigest, it's important that the code below executes at the end.
+        // This basically means that the page is fully downloaded and compiled before
+        // any animations are triggered.
+        $rootScope.$$postDigest(function() {
+          $rootScope.$$postDigest(function() {
+            // we check for null directly in the event that the application already called
+            // .enabled() with whatever arguments that it provided it with
+            if (animationsEnabled === null) {
+              animationsEnabled = true;
+            }
+          });
+        });
+      }
+    );
+
+    var callbackRegistry = {};
+
+    // remember that the classNameFilter is set during the provider/config
+    // stage therefore we can optimize here and setup a helper function
+    var classNameFilter = $animateProvider.classNameFilter();
+    var isAnimatableClassName = !classNameFilter
+              ? function() { return true; }
+              : function(className) {
+                return classNameFilter.test(className);
+              };
+
+    var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
+
+    function normalizeAnimationOptions(element, options) {
+      return mergeAnimationOptions(element, options, {});
+    }
+
+    function findCallbacks(parent, element, event) {
+      var targetNode = getDomNode(element);
+      var targetParentNode = getDomNode(parent);
+
+      var matches = [];
+      var entries = callbackRegistry[event];
+      if (entries) {
+        forEach(entries, function(entry) {
+          if (entry.node.contains(targetNode)) {
+            matches.push(entry.callback);
+          } else if (event === 'leave' && entry.node.contains(targetParentNode)) {
+            matches.push(entry.callback);
+          }
+        });
+      }
+
+      return matches;
+    }
+
+    return {
+      on: function(event, container, callback) {
+        var node = extractElementNode(container);
+        callbackRegistry[event] = callbackRegistry[event] || [];
+        callbackRegistry[event].push({
+          node: node,
+          callback: callback
+        });
+      },
+
+      off: function(event, container, callback) {
+        var entries = callbackRegistry[event];
+        if (!entries) return;
+
+        callbackRegistry[event] = arguments.length === 1
+            ? null
+            : filterFromRegistry(entries, container, callback);
+
+        function filterFromRegistry(list, matchContainer, matchCallback) {
+          var containerNode = extractElementNode(matchContainer);
+          return list.filter(function(entry) {
+            var isMatch = entry.node === containerNode &&
+                            (!matchCallback || entry.callback === matchCallback);
+            return !isMatch;
+          });
+        }
+      },
+
+      pin: function(element, parentElement) {
+        assertArg(isElement(element), 'element', 'not an element');
+        assertArg(isElement(parentElement), 'parentElement', 'not an element');
+        element.data(NG_ANIMATE_PIN_DATA, parentElement);
+      },
+
+      push: function(element, event, options, domOperation) {
+        options = options || {};
+        options.domOperation = domOperation;
+        return queueAnimation(element, event, options);
+      },
+
+      // this method has four signatures:
+      //  () - global getter
+      //  (bool) - global setter
+      //  (element) - element getter
+      //  (element, bool) - element setter<F37>
+      enabled: function(element, bool) {
+        var argCount = arguments.length;
+
+        if (argCount === 0) {
+          // () - Global getter
+          bool = !!animationsEnabled;
+        } else {
+          var hasElement = isElement(element);
+
+          if (!hasElement) {
+            // (bool) - Global setter
+            bool = animationsEnabled = !!element;
+          } else {
+            var node = getDomNode(element);
+            var recordExists = disabledElementsLookup.get(node);
+
+            if (argCount === 1) {
+              // (element) - Element getter
+              bool = !recordExists;
+            } else {
+              // (element, bool) - Element setter
+              bool = !!bool;
+              if (!bool) {
+                disabledElementsLookup.put(node, true);
+              } else if (recordExists) {
+                disabledElementsLookup.remove(node);
+              }
+            }
+          }
+        }
+
+        return bool;
+      }
+    };
+
+    function queueAnimation(element, event, options) {
+      var node, parent;
+      element = stripCommentsFromElement(element);
+      if (element) {
+        node = getDomNode(element);
+        parent = element.parent();
+      }
+
+      options = prepareAnimationOptions(options);
+
+      // we create a fake runner with a working promise.
+      // These methods will become available after the digest has passed
+      var runner = new $$AnimateRunner();
+
+      // this is used to trigger callbacks in postDigest mode
+      var runInNextPostDigestOrNow = postDigestTaskFactory();
+
+      if (isArray(options.addClass)) {
+        options.addClass = options.addClass.join(' ');
+      }
+
+      if (options.addClass && !isString(options.addClass)) {
+        options.addClass = null;
+      }
+
+      if (isArray(options.removeClass)) {
+        options.removeClass = options.removeClass.join(' ');
+      }
+
+      if (options.removeClass && !isString(options.removeClass)) {
+        options.removeClass = null;
+      }
+
+      if (options.from && !isObject(options.from)) {
+        options.from = null;
+      }
+
+      if (options.to && !isObject(options.to)) {
+        options.to = null;
+      }
+
+      // there are situations where a directive issues an animation for
+      // a jqLite wrapper that contains only comment nodes... If this
+      // happens then there is no way we can perform an animation
+      if (!node) {
+        close();
+        return runner;
+      }
+
+      var className = [node.className, options.addClass, options.removeClass].join(' ');
+      if (!isAnimatableClassName(className)) {
+        close();
+        return runner;
+      }
+
+      var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0;
+
+      // this is a hard disable of all animations for the application or on
+      // the element itself, therefore  there is no need to continue further
+      // past this point if not enabled
+      var skipAnimations = !animationsEnabled || disabledElementsLookup.get(node);
+      var existingAnimation = (!skipAnimations && activeAnimationsLookup.get(node)) || {};
+      var hasExistingAnimation = !!existingAnimation.state;
+
+      // there is no point in traversing the same collection of parent ancestors if a followup
+      // animation will be run on the same element that already did all that checking work
+      if (!skipAnimations && (!hasExistingAnimation || existingAnimation.state != PRE_DIGEST_STATE)) {
+        skipAnimations = !areAnimationsAllowed(element, parent, event);
+      }
+
+      if (skipAnimations) {
+        close();
+        return runner;
+      }
+
+      if (isStructural) {
+        closeChildAnimations(element);
+      }
+
+      var newAnimation = {
+        structural: isStructural,
+        element: element,
+        event: event,
+        close: close,
+        options: options,
+        runner: runner
+      };
+
+      if (hasExistingAnimation) {
+        var skipAnimationFlag = isAllowed('skip', element, newAnimation, existingAnimation);
+        if (skipAnimationFlag) {
+          if (existingAnimation.state === RUNNING_STATE) {
+            close();
+            return runner;
+          } else {
+            mergeAnimationOptions(element, existingAnimation.options, options);
+            return existingAnimation.runner;
+          }
+        }
+
+        var cancelAnimationFlag = isAllowed('cancel', element, newAnimation, existingAnimation);
+        if (cancelAnimationFlag) {
+          if (existingAnimation.state === RUNNING_STATE) {
+            // this will end the animation right away and it is safe
+            // to do so since the animation is already running and the
+            // runner callback code will run in async
+            existingAnimation.runner.end();
+          } else if (existingAnimation.structural) {
+            // this means that the animation is queued into a digest, but
+            // hasn't started yet. Therefore it is safe to run the close
+            // method which will call the runner methods in async.
+            existingAnimation.close();
+          } else {
+            // this will merge the new animation options into existing animation options
+            mergeAnimationOptions(element, existingAnimation.options, newAnimation.options);
+            return existingAnimation.runner;
+          }
+        } else {
+          // a joined animation means that this animation will take over the existing one
+          // so an example would involve a leave animation taking over an enter. Then when
+          // the postDigest kicks in the enter will be ignored.
+          var joinAnimationFlag = isAllowed('join', element, newAnimation, existingAnimation);
+          if (joinAnimationFlag) {
+            if (existingAnimation.state === RUNNING_STATE) {
+              normalizeAnimationOptions(element, options);
+            } else {
+              applyGeneratedPreparationClasses(element, isStructural ? event : null, options);
+
+              event = newAnimation.event = existingAnimation.event;
+              options = mergeAnimationOptions(element, existingAnimation.options, newAnimation.options);
+
+              //we return the same runner since only the option values of this animation will
+              //be fed into the `existingAnimation`.
+              return existingAnimation.runner;
+            }
+          }
+        }
+      } else {
+        // normalization in this case means that it removes redundant CSS classes that
+        // already exist (addClass) or do not exist (removeClass) on the element
+        normalizeAnimationOptions(element, options);
+      }
+
+      // when the options are merged and cleaned up we may end up not having to do
+      // an animation at all, therefore we should check this before issuing a post
+      // digest callback. Structural animations will always run no matter what.
+      var isValidAnimation = newAnimation.structural;
+      if (!isValidAnimation) {
+        // animate (from/to) can be quickly checked first, otherwise we check if any classes are present
+        isValidAnimation = (newAnimation.event === 'animate' && Object.keys(newAnimation.options.to || {}).length > 0)
+                            || hasAnimationClasses(newAnimation.options);
+      }
+
+      if (!isValidAnimation) {
+        close();
+        clearElementAnimationState(element);
+        return runner;
+      }
+
+      // the counter keeps track of cancelled animations
+      var counter = (existingAnimation.counter || 0) + 1;
+      newAnimation.counter = counter;
+
+      markElementAnimationState(element, PRE_DIGEST_STATE, newAnimation);
+
+      $rootScope.$$postDigest(function() {
+        var animationDetails = activeAnimationsLookup.get(node);
+        var animationCancelled = !animationDetails;
+        animationDetails = animationDetails || {};
+
+        // if addClass/removeClass is called before something like enter then the
+        // registered parent element may not be present. The code below will ensure
+        // that a final value for parent element is obtained
+        var parentElement = element.parent() || [];
+
+        // animate/structural/class-based animations all have requirements. Otherwise there
+        // is no point in performing an animation. The parent node must also be set.
+        var isValidAnimation = parentElement.length > 0
+                                && (animationDetails.event === 'animate'
+                                    || animationDetails.structural
+                                    || hasAnimationClasses(animationDetails.options));
+
+        // this means that the previous animation was cancelled
+        // even if the follow-up animation is the same event
+        if (animationCancelled || animationDetails.counter !== counter || !isValidAnimation) {
+          // if another animation did not take over then we need
+          // to make sure that the domOperation and options are
+          // handled accordingly
+          if (animationCancelled) {
+            applyAnimationClasses(element, options);
+            applyAnimationStyles(element, options);
+          }
+
+          // if the event changed from something like enter to leave then we do
+          // it, otherwise if it's the same then the end result will be the same too
+          if (animationCancelled || (isStructural && animationDetails.event !== event)) {
+            options.domOperation();
+            runner.end();
+          }
+
+          // in the event that the element animation was not cancelled or a follow-up animation
+          // isn't allowed to animate from here then we need to clear the state of the element
+          // so that any future animations won't read the expired animation data.
+          if (!isValidAnimation) {
+            clearElementAnimationState(element);
+          }
+
+          return;
+        }
+
+        // this combined multiple class to addClass / removeClass into a setClass event
+        // so long as a structural event did not take over the animation
+        event = !animationDetails.structural && hasAnimationClasses(animationDetails.options, true)
+            ? 'setClass'
+            : animationDetails.event;
+
+        markElementAnimationState(element, RUNNING_STATE);
+        var realRunner = $$animation(element, event, animationDetails.options);
+
+        realRunner.done(function(status) {
+          close(!status);
+          var animationDetails = activeAnimationsLookup.get(node);
+          if (animationDetails && animationDetails.counter === counter) {
+            clearElementAnimationState(getDomNode(element));
+          }
+          notifyProgress(runner, event, 'close', {});
+        });
+
+        // this will update the runner's flow-control events based on
+        // the `realRunner` object.
+        runner.setHost(realRunner);
+        notifyProgress(runner, event, 'start', {});
+      });
+
+      return runner;
+
+      function notifyProgress(runner, event, phase, data) {
+        runInNextPostDigestOrNow(function() {
+          var callbacks = findCallbacks(parent, element, event);
+          if (callbacks.length) {
+            // do not optimize this call here to RAF because
+            // we don't know how heavy the callback code here will
+            // be and if this code is buffered then this can
+            // lead to a performance regression.
+            $$rAF(function() {
+              forEach(callbacks, function(callback) {
+                callback(element, phase, data);
+              });
+            });
+          }
+        });
+        runner.progress(event, phase, data);
+      }
+
+      function close(reject) { // jshint ignore:line
+        clearGeneratedClasses(element, options);
+        applyAnimationClasses(element, options);
+        applyAnimationStyles(element, options);
+        options.domOperation();
+        runner.complete(!reject);
+      }
+    }
+
+    function closeChildAnimations(element) {
+      var node = getDomNode(element);
+      var children = node.querySelectorAll('[' + NG_ANIMATE_ATTR_NAME + ']');
+      forEach(children, function(child) {
+        var state = parseInt(child.getAttribute(NG_ANIMATE_ATTR_NAME));
+        var animationDetails = activeAnimationsLookup.get(child);
+        switch (state) {
+          case RUNNING_STATE:
+            animationDetails.runner.end();
+            /* falls through */
+          case PRE_DIGEST_STATE:
+            if (animationDetails) {
+              activeAnimationsLookup.remove(child);
+            }
+            break;
+        }
+      });
+    }
+
+    function clearElementAnimationState(element) {
+      var node = getDomNode(element);
+      node.removeAttribute(NG_ANIMATE_ATTR_NAME);
+      activeAnimationsLookup.remove(node);
+    }
+
+    function isMatchingElement(nodeOrElmA, nodeOrElmB) {
+      return getDomNode(nodeOrElmA) === getDomNode(nodeOrElmB);
+    }
+
+    function areAnimationsAllowed(element, parentElement, event) {
+      var bodyElement = jqLite($document[0].body);
+      var bodyElementDetected = isMatchingElement(element, bodyElement) || element[0].nodeName === 'HTML';
+      var rootElementDetected = isMatchingElement(element, $rootElement);
+      var parentAnimationDetected = false;
+      var animateChildren;
+
+      var parentHost = element.data(NG_ANIMATE_PIN_DATA);
+      if (parentHost) {
+        parentElement = parentHost;
+      }
+
+      while (parentElement && parentElement.length) {
+        if (!rootElementDetected) {
+          // angular doesn't want to attempt to animate elements outside of the application
+          // therefore we need to ensure that the rootElement is an ancestor of the current element
+          rootElementDetected = isMatchingElement(parentElement, $rootElement);
+        }
+
+        var parentNode = parentElement[0];
+        if (parentNode.nodeType !== ELEMENT_NODE) {
+          // no point in inspecting the #document element
+          break;
+        }
+
+        var details = activeAnimationsLookup.get(parentNode) || {};
+        // either an enter, leave or move animation will commence
+        // therefore we can't allow any animations to take place
+        // but if a parent animation is class-based then that's ok
+        if (!parentAnimationDetected) {
+          parentAnimationDetected = details.structural || disabledElementsLookup.get(parentNode);
+        }
+
+        if (isUndefined(animateChildren) || animateChildren === true) {
+          var value = parentElement.data(NG_ANIMATE_CHILDREN_DATA);
+          if (isDefined(value)) {
+            animateChildren = value;
+          }
+        }
+
+        // there is no need to continue traversing at this point
+        if (parentAnimationDetected && animateChildren === false) break;
+
+        if (!rootElementDetected) {
+          // angular doesn't want to attempt to animate elements outside of the application
+          // therefore we need to ensure that the rootElement is an ancestor of the current element
+          rootElementDetected = isMatchingElement(parentElement, $rootElement);
+          if (!rootElementDetected) {
+            parentHost = parentElement.data(NG_ANIMATE_PIN_DATA);
+            if (parentHost) {
+              parentElement = parentHost;
+            }
+          }
+        }
+
+        if (!bodyElementDetected) {
+          // we also need to ensure that the element is or will be apart of the body element
+          // otherwise it is pointless to even issue an animation to be rendered
+          bodyElementDetected = isMatchingElement(parentElement, bodyElement);
+        }
+
+        parentElement = parentElement.parent();
+      }
+
+      var allowAnimation = !parentAnimationDetected || animateChildren;
+      return allowAnimation && rootElementDetected && bodyElementDetected;
+    }
+
+    function markElementAnimationState(element, state, details) {
+      details = details || {};
+      details.state = state;
+
+      var node = getDomNode(element);
+      node.setAttribute(NG_ANIMATE_ATTR_NAME, state);
+
+      var oldValue = activeAnimationsLookup.get(node);
+      var newValue = oldValue
+          ? extend(oldValue, details)
+          : details;
+      activeAnimationsLookup.put(node, newValue);
+    }
+  }];
+}];
+
+var $$AnimateAsyncRunFactory = ['$$rAF', function($$rAF) {
+  var waitQueue = [];
+
+  function waitForTick(fn) {
+    waitQueue.push(fn);
+    if (waitQueue.length > 1) return;
+    $$rAF(function() {
+      for (var i = 0; i < waitQueue.length; i++) {
+        waitQueue[i]();
+      }
+      waitQueue = [];
+    });
+  }
+
+  return function() {
+    var passed = false;
+    waitForTick(function() {
+      passed = true;
+    });
+    return function(callback) {
+      passed ? callback() : waitForTick(callback);
+    };
+  };
+}];
+
+var $$AnimateRunnerFactory = ['$q', '$sniffer', '$$animateAsyncRun',
+                      function($q,   $sniffer,   $$animateAsyncRun) {
+
+  var INITIAL_STATE = 0;
+  var DONE_PENDING_STATE = 1;
+  var DONE_COMPLETE_STATE = 2;
+
+  AnimateRunner.chain = function(chain, callback) {
+    var index = 0;
+
+    next();
+    function next() {
+      if (index === chain.length) {
+        callback(true);
+        return;
+      }
+
+      chain[index](function(response) {
+        if (response === false) {
+          callback(false);
+          return;
+        }
+        index++;
+        next();
+      });
+    }
+  };
+
+  AnimateRunner.all = function(runners, callback) {
+    var count = 0;
+    var status = true;
+    forEach(runners, function(runner) {
+      runner.done(onProgress);
+    });
+
+    function onProgress(response) {
+      status = status && response;
+      if (++count === runners.length) {
+        callback(status);
+      }
+    }
+  };
+
+  function AnimateRunner(host) {
+    this.setHost(host);
+
+    this._doneCallbacks = [];
+    this._runInAnimationFrame = $$animateAsyncRun();
+    this._state = 0;
+  }
+
+  AnimateRunner.prototype = {
+    setHost: function(host) {
+      this.host = host || {};
+    },
+
+    done: function(fn) {
+      if (this._state === DONE_COMPLETE_STATE) {
+        fn();
+      } else {
+        this._doneCallbacks.push(fn);
+      }
+    },
+
+    progress: noop,
+
+    getPromise: function() {
+      if (!this.promise) {
+        var self = this;
+        this.promise = $q(function(resolve, reject) {
+          self.done(function(status) {
+            status === false ? reject() : resolve();
+          });
+        });
+      }
+      return this.promise;
+    },
+
+    then: function(resolveHandler, rejectHandler) {
+      return this.getPromise().then(resolveHandler, rejectHandler);
+    },
+
+    'catch': function(handler) {
+      return this.getPromise()['catch'](handler);
+    },
+
+    'finally': function(handler) {
+      return this.getPromise()['finally'](handler);
+    },
+
+    pause: function() {
+      if (this.host.pause) {
+        this.host.pause();
+      }
+    },
+
+    resume: function() {
+      if (this.host.resume) {
+        this.host.resume();
+      }
+    },
+
+    end: function() {
+      if (this.host.end) {
+        this.host.end();
+      }
+      this._resolve(true);
+    },
+
+    cancel: function() {
+      if (this.host.cancel) {
+        this.host.cancel();
+      }
+      this._resolve(false);
+    },
+
+    complete: function(response) {
+      var self = this;
+      if (self._state === INITIAL_STATE) {
+        self._state = DONE_PENDING_STATE;
+        self._runInAnimationFrame(function() {
+          self._resolve(response);
+        });
+      }
+    },
+
+    _resolve: function(response) {
+      if (this._state !== DONE_COMPLETE_STATE) {
+        forEach(this._doneCallbacks, function(fn) {
+          fn(response);
+        });
+        this._doneCallbacks.length = 0;
+        this._state = DONE_COMPLETE_STATE;
+      }
+    }
+  };
+
+  return AnimateRunner;
+}];
+
+var $$AnimationProvider = ['$animateProvider', function($animateProvider) {
+  var NG_ANIMATE_REF_ATTR = 'ng-animate-ref';
+
+  var drivers = this.drivers = [];
+
+  var RUNNER_STORAGE_KEY = '$$animationRunner';
+
+  function setRunner(element, runner) {
+    element.data(RUNNER_STORAGE_KEY, runner);
+  }
+
+  function removeRunner(element) {
+    element.removeData(RUNNER_STORAGE_KEY);
+  }
+
+  function getRunner(element) {
+    return element.data(RUNNER_STORAGE_KEY);
+  }
+
+  this.$get = ['$$jqLite', '$rootScope', '$injector', '$$AnimateRunner', '$$HashMap', '$$rAFScheduler',
+       function($$jqLite,   $rootScope,   $injector,   $$AnimateRunner,   $$HashMap,   $$rAFScheduler) {
+
+    var animationQueue = [];
+    var applyAnimationClasses = applyAnimationClassesFactory($$jqLite);
+
+    function sortAnimations(animations) {
+      var tree = { children: [] };
+      var i, lookup = new $$HashMap();
+
+      // this is done first beforehand so that the hashmap
+      // is filled with a list of the elements that will be animated
+      for (i = 0; i < animations.length; i++) {
+        var animation = animations[i];
+        lookup.put(animation.domNode, animations[i] = {
+          domNode: animation.domNode,
+          fn: animation.fn,
+          children: []
+        });
+      }
+
+      for (i = 0; i < animations.length; i++) {
+        processNode(animations[i]);
+      }
+
+      return flatten(tree);
+
+      function processNode(entry) {
+        if (entry.processed) return entry;
+        entry.processed = true;
+
+        var elementNode = entry.domNode;
+        var parentNode = elementNode.parentNode;
+        lookup.put(elementNode, entry);
+
+        var parentEntry;
+        while (parentNode) {
+          parentEntry = lookup.get(parentNode);
+          if (parentEntry) {
+            if (!parentEntry.processed) {
+              parentEntry = processNode(parentEntry);
+            }
+            break;
+          }
+          parentNode = parentNode.parentNode;
+        }
+
+        (parentEntry || tree).children.push(entry);
+        return entry;
+      }
+
+      function flatten(tree) {
+        var result = [];
+        var queue = [];
+        var i;
+
+        for (i = 0; i < tree.children.length; i++) {
+          queue.push(tree.children[i]);
+        }
+
+        var remainingLevelEntries = queue.length;
+        var nextLevelEntries = 0;
+        var row = [];
+
+        for (i = 0; i < queue.length; i++) {
+          var entry = queue[i];
+          if (remainingLevelEntries <= 0) {
+            remainingLevelEntries = nextLevelEntries;
+            nextLevelEntries = 0;
+            result.push(row);
+            row = [];
+          }
+          row.push(entry.fn);
+          entry.children.forEach(function(childEntry) {
+            nextLevelEntries++;
+            queue.push(childEntry);
+          });
+          remainingLevelEntries--;
+        }
+
+        if (row.length) {
+          result.push(row);
+        }
+
+        return result;
+      }
+    }
+
+    // TODO(matsko): document the signature in a better way
+    return function(element, event, options) {
+      options = prepareAnimationOptions(options);
+      var isStructural = ['enter', 'move', 'leave'].indexOf(event) >= 0;
+
+      // there is no animation at the current moment, however
+      // these runner methods will get later updated with the
+      // methods leading into the driver's end/cancel methods
+      // for now they just stop the animation from starting
+      var runner = new $$AnimateRunner({
+        end: function() { close(); },
+        cancel: function() { close(true); }
+      });
+
+      if (!drivers.length) {
+        close();
+        return runner;
+      }
+
+      setRunner(element, runner);
+
+      var classes = mergeClasses(element.attr('class'), mergeClasses(options.addClass, options.removeClass));
+      var tempClasses = options.tempClasses;
+      if (tempClasses) {
+        classes += ' ' + tempClasses;
+        options.tempClasses = null;
+      }
+
+      animationQueue.push({
+        // this data is used by the postDigest code and passed into
+        // the driver step function
+        element: element,
+        classes: classes,
+        event: event,
+        structural: isStructural,
+        options: options,
+        beforeStart: beforeStart,
+        close: close
+      });
+
+      element.on('$destroy', handleDestroyedElement);
+
+      // we only want there to be one function called within the post digest
+      // block. This way we can group animations for all the animations that
+      // were apart of the same postDigest flush call.
+      if (animationQueue.length > 1) return runner;
+
+      $rootScope.$$postDigest(function() {
+        var animations = [];
+        forEach(animationQueue, function(entry) {
+          // the element was destroyed early on which removed the runner
+          // form its storage. This means we can't animate this element
+          // at all and it already has been closed due to destruction.
+          if (getRunner(entry.element)) {
+            animations.push(entry);
+          } else {
+            entry.close();
+          }
+        });
+
+        // now any future animations will be in another postDigest
+        animationQueue.length = 0;
+
+        var groupedAnimations = groupAnimations(animations);
+        var toBeSortedAnimations = [];
+
+        forEach(groupedAnimations, function(animationEntry) {
+          toBeSortedAnimations.push({
+            domNode: getDomNode(animationEntry.from ? animationEntry.from.element : animationEntry.element),
+            fn: function triggerAnimationStart() {
+              // it's important that we apply the `ng-animate` CSS class and the
+              // temporary classes before we do any driver invoking since these
+              // CSS classes may be required for proper CSS detection.
+              animationEntry.beforeStart();
+
+              var startAnimationFn, closeFn = animationEntry.close;
+
+              // in the event that the element was removed before the digest runs or
+              // during the RAF sequencing then we should not trigger the animation.
+              var targetElement = animationEntry.anchors
+                  ? (animationEntry.from.element || animationEntry.to.element)
+                  : animationEntry.element;
+
+              if (getRunner(targetElement)) {
+                var operation = invokeFirstDriver(animationEntry);
+                if (operation) {
+                  startAnimationFn = operation.start;
+                }
+              }
+
+              if (!startAnimationFn) {
+                closeFn();
+              } else {
+                var animationRunner = startAnimationFn();
+                animationRunner.done(function(status) {
+                  closeFn(!status);
+                });
+                updateAnimationRunners(animationEntry, animationRunner);
+              }
+            }
+          });
+        });
+
+        // we need to sort each of the animations in order of parent to child
+        // relationships. This ensures that the child classes are applied at the
+        // right time.
+        $$rAFScheduler(sortAnimations(toBeSortedAnimations));
+      });
+
+      return runner;
+
+      // TODO(matsko): change to reference nodes
+      function getAnchorNodes(node) {
+        var SELECTOR = '[' + NG_ANIMATE_REF_ATTR + ']';
+        var items = node.hasAttribute(NG_ANIMATE_REF_ATTR)
+              ? [node]
+              : node.querySelectorAll(SELECTOR);
+        var anchors = [];
+        forEach(items, function(node) {
+          var attr = node.getAttribute(NG_ANIMATE_REF_ATTR);
+          if (attr && attr.length) {
+            anchors.push(node);
+          }
+        });
+        return anchors;
+      }
+
+      function groupAnimations(animations) {
+        var preparedAnimations = [];
+        var refLookup = {};
+        forEach(animations, function(animation, index) {
+          var element = animation.element;
+          var node = getDomNode(element);
+          var event = animation.event;
+          var enterOrMove = ['enter', 'move'].indexOf(event) >= 0;
+          var anchorNodes = animation.structural ? getAnchorNodes(node) : [];
+
+          if (anchorNodes.length) {
+            var direction = enterOrMove ? 'to' : 'from';
+
+            forEach(anchorNodes, function(anchor) {
+              var key = anchor.getAttribute(NG_ANIMATE_REF_ATTR);
+              refLookup[key] = refLookup[key] || {};
+              refLookup[key][direction] = {
+                animationID: index,
+                element: jqLite(anchor)
+              };
+            });
+          } else {
+            preparedAnimations.push(animation);
+          }
+        });
+
+        var usedIndicesLookup = {};
+        var anchorGroups = {};
+        forEach(refLookup, function(operations, key) {
+          var from = operations.from;
+          var to = operations.to;
+
+          if (!from || !to) {
+            // only one of these is set therefore we can't have an
+            // anchor animation since all three pieces are required
+            var index = from ? from.animationID : to.animationID;
+            var indexKey = index.toString();
+            if (!usedIndicesLookup[indexKey]) {
+              usedIndicesLookup[indexKey] = true;
+              preparedAnimations.push(animations[index]);
+            }
+            return;
+          }
+
+          var fromAnimation = animations[from.animationID];
+          var toAnimation = animations[to.animationID];
+          var lookupKey = from.animationID.toString();
+          if (!anchorGroups[lookupKey]) {
+            var group = anchorGroups[lookupKey] = {
+              structural: true,
+              beforeStart: function() {
+                fromAnimation.beforeStart();
+                toAnimation.beforeStart();
+              },
+              close: function() {
+                fromAnimation.close();
+                toAnimation.close();
+              },
+              classes: cssClassesIntersection(fromAnimation.classes, toAnimation.classes),
+              from: fromAnimation,
+              to: toAnimation,
+              anchors: [] // TODO(matsko): change to reference nodes
+            };
+
+            // the anchor animations require that the from and to elements both have at least
+            // one shared CSS class which effictively marries the two elements together to use
+            // the same animation driver and to properly sequence the anchor animation.
+            if (group.classes.length) {
+              preparedAnimations.push(group);
+            } else {
+              preparedAnimations.push(fromAnimation);
+              preparedAnimations.push(toAnimation);
+            }
+          }
+
+          anchorGroups[lookupKey].anchors.push({
+            'out': from.element, 'in': to.element
+          });
+        });
+
+        return preparedAnimations;
+      }
+
+      function cssClassesIntersection(a,b) {
+        a = a.split(' ');
+        b = b.split(' ');
+        var matches = [];
+
+        for (var i = 0; i < a.length; i++) {
+          var aa = a[i];
+          if (aa.substring(0,3) === 'ng-') continue;
+
+          for (var j = 0; j < b.length; j++) {
+            if (aa === b[j]) {
+              matches.push(aa);
+              break;
+            }
+          }
+        }
+
+        return matches.join(' ');
+      }
+
+      function invokeFirstDriver(animationDetails) {
+        // we loop in reverse order since the more general drivers (like CSS and JS)
+        // may attempt more elements, but custom drivers are more particular
+        for (var i = drivers.length - 1; i >= 0; i--) {
+          var driverName = drivers[i];
+          if (!$injector.has(driverName)) continue; // TODO(matsko): remove this check
+
+          var factory = $injector.get(driverName);
+          var driver = factory(animationDetails);
+          if (driver) {
+            return driver;
+          }
+        }
+      }
+
+      function beforeStart() {
+        element.addClass(NG_ANIMATE_CLASSNAME);
+        if (tempClasses) {
+          $$jqLite.addClass(element, tempClasses);
+        }
+      }
+
+      function updateAnimationRunners(animation, newRunner) {
+        if (animation.from && animation.to) {
+          update(animation.from.element);
+          update(animation.to.element);
+        } else {
+          update(animation.element);
+        }
+
+        function update(element) {
+          getRunner(element).setHost(newRunner);
+        }
+      }
+
+      function handleDestroyedElement() {
+        var runner = getRunner(element);
+        if (runner && (event !== 'leave' || !options.$$domOperationFired)) {
+          runner.end();
+        }
+      }
+
+      function close(rejected) { // jshint ignore:line
+        element.off('$destroy', handleDestroyedElement);
+        removeRunner(element);
+
+        applyAnimationClasses(element, options);
+        applyAnimationStyles(element, options);
+        options.domOperation();
+
+        if (tempClasses) {
+          $$jqLite.removeClass(element, tempClasses);
+        }
+
+        element.removeClass(NG_ANIMATE_CLASSNAME);
+        runner.complete(!rejected);
+      }
+    };
+  }];
+}];
+
+/* global angularAnimateModule: true,
+
+   $$AnimateAsyncRunFactory,
+   $$rAFSchedulerFactory,
+   $$AnimateChildrenDirective,
+   $$AnimateRunnerFactory,
+   $$AnimateQueueProvider,
+   $$AnimationProvider,
+   $AnimateCssProvider,
+   $$AnimateCssDriverProvider,
+   $$AnimateJsProvider,
+   $$AnimateJsDriverProvider,
+*/
+
+/**
+ * @ngdoc module
+ * @name ngAnimate
+ * @description
+ *
+ * The `ngAnimate` module provides support for CSS-based animations (keyframes and transitions) as well as JavaScript-based animations via
+ * callback hooks. Animations are not enabled by default, however, by including `ngAnimate` the animation hooks are enabled for an Angular app.
+ *
+ * <div doc-module-components="ngAnimate"></div>
+ *
+ * # Usage
+ * Simply put, there are two ways to make use of animations when ngAnimate is used: by using **CSS** and **JavaScript**. The former works purely based
+ * using CSS (by using matching CSS selectors/styles) and the latter triggers animations that are registered via `module.animation()`. For
+ * both CSS and JS animations the sole requirement is to have a matching `CSS class` that exists both in the registered animation and within
+ * the HTML element that the animation will be triggered on.
+ *
+ * ## Directive Support
+ * The following directives are "animation aware":
+ *
+ * | Directive                                                                                                | Supported Animations                                                     |
+ * |----------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------|
+ * | {@link ng.directive:ngRepeat#animations ngRepeat}                                                        | enter, leave and move                                                    |
+ * | {@link ngRoute.directive:ngView#animations ngView}                                                       | enter and leave                                                          |
+ * | {@link ng.directive:ngInclude#animations ngInclude}                                                      | enter and leave                                                          |
+ * | {@link ng.directive:ngSwitch#animations ngSwitch}                                                        | enter and leave                                                          |
+ * | {@link ng.directive:ngIf#animations ngIf}                                                                | enter and leave                                                          |
+ * | {@link ng.directive:ngClass#animations ngClass}                                                          | add and remove (the CSS class(es) present)                               |
+ * | {@link ng.directive:ngShow#animations ngShow} & {@link ng.directive:ngHide#animations ngHide}            | add and remove (the ng-hide class value)                                 |
+ * | {@link ng.directive:form#animation-hooks form} & {@link ng.directive:ngModel#animation-hooks ngModel}    | add and remove (dirty, pristine, valid, invalid & all other validations) |
+ * | {@link module:ngMessages#animations ngMessages}                                                          | add and remove (ng-active & ng-inactive)                                 |
+ * | {@link module:ngMessages#animations ngMessage}                                                           | enter and leave                                                          |
+ *
+ * (More information can be found by visiting each the documentation associated with each directive.)
+ *
+ * ## CSS-based Animations
+ *
+ * CSS-based animations with ngAnimate are unique since they require no JavaScript code at all. By using a CSS class that we reference between our HTML
+ * and CSS code we can create an animation that will be picked up by Angular when an the underlying directive performs an operation.
+ *
+ * The example below shows how an `enter` animation can be made possible on an element using `ng-if`:
+ *
+ * ```html
+ * <div ng-if="bool" class="fade">
+ *    Fade me in out
+ * </div>
+ * <button ng-click="bool=true">Fade In!</button>
+ * <button ng-click="bool=false">Fade Out!</button>
+ * ```
+ *
+ * Notice the CSS class **fade**? We can now create the CSS transition code that references this class:
+ *
+ * ```css
+ * /&#42; The starting CSS styles for the enter animation &#42;/
+ * .fade.ng-enter {
+ *   transition:0.5s linear all;
+ *   opacity:0;
+ * }
+ *
+ * /&#42; The finishing CSS styles for the enter animation &#42;/
+ * .fade.ng-enter.ng-enter-active {
+ *   opacity:1;
+ * }
+ * ```
+ *
+ * The key thing to remember here is that, depending on the animation event (which each of the directives above trigger depending on what's going on) two
+ * generated CSS classes will be applied to the element; in the example above we have `.ng-enter` and `.ng-enter-active`. For CSS transitions, the transition
+ * code **must** be defined within the starting CSS class (in this case `.ng-enter`). The destination class is what the transition will animate towards.
+ *
+ * If for example we wanted to create animations for `leave` and `move` (ngRepeat triggers move) then we can do so using the same CSS naming conventions:
+ *
+ * ```css
+ * /&#42; now the element will fade out before it is removed from the DOM &#42;/
+ * .fade.ng-leave {
+ *   transition:0.5s linear all;
+ *   opacity:1;
+ * }
+ * .fade.ng-leave.ng-leave-active {
+ *   opacity:0;
+ * }
+ * ```
+ *
+ * We can also make use of **CSS Keyframes** by referencing the keyframe animation within the starting CSS class:
+ *
+ * ```css
+ * /&#42; there is no need to define anything inside of the destination
+ * CSS class since the keyframe will take charge of the animation &#42;/
+ * .fade.ng-leave {
+ *   animation: my_fade_animation 0.5s linear;
+ *   -webkit-animation: my_fade_animation 0.5s linear;
+ * }
+ *
+ * @keyframes my_fade_animation {
+ *   from { opacity:1; }
+ *   to { opacity:0; }
+ * }
+ *
+ * @-webkit-keyframes my_fade_animation {
+ *   from { opacity:1; }
+ *   to { opacity:0; }
+ * }
+ * ```
+ *
+ * Feel free also mix transitions and keyframes together as well as any other CSS classes on the same element.
+ *
+ * ### CSS Class-based Animations
+ *
+ * Class-based animations (animations that are triggered via `ngClass`, `ngShow`, `ngHide` and some other directives) have a slightly different
+ * naming convention. Class-based animations are basic enough that a standard transition or keyframe can be referenced on the class being added
+ * and removed.
+ *
+ * For example if we wanted to do a CSS animation for `ngHide` then we place an animation on the `.ng-hide` CSS class:
+ *
+ * ```html
+ * <div ng-show="bool" class="fade">
+ *   Show and hide me
+ * </div>
+ * <button ng-click="bool=true">Toggle</button>
+ *
+ * <style>
+ * .fade.ng-hide {
+ *   transition:0.5s linear all;
+ *   opacity:0;
+ * }
+ * </style>
+ * ```
+ *
+ * All that is going on here with ngShow/ngHide behind the scenes is the `.ng-hide` class is added/removed (when the hidden state is valid). Since
+ * ngShow and ngHide are animation aware then we can match up a transition and ngAnimate handles the rest.
+ *
+ * In addition the addition and removal of the CSS class, ngAnimate also provides two helper methods that we can use to further decorate the animation
+ * with CSS styles.
+ *
+ * ```html
+ * <div ng-class="{on:onOff}" class="highlight">
+ *   Highlight this box
+ * </div>
+ * <button ng-click="onOff=!onOff">Toggle</button>
+ *
+ * <style>
+ * .highlight {
+ *   transition:0.5s linear all;
+ * }
+ * .highlight.on-add {
+ *   background:white;
+ * }
+ * .highlight.on {
+ *   background:yellow;
+ * }
+ * .highlight.on-remove {
+ *   background:black;
+ * }
+ * </style>
+ * ```
+ *
+ * We can also make use of CSS keyframes by placing them within the CSS classes.
+ *
+ *
+ * ### CSS Staggering Animations
+ * A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a
+ * curtain-like effect. The ngAnimate module (versions >=1.2) supports staggering animations and the stagger effect can be
+ * performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for
+ * the animation. The style property expected within the stagger class can either be a **transition-delay** or an
+ * **animation-delay** property (or both if your animation contains both transitions and keyframe animations).
+ *
+ * ```css
+ * .my-animation.ng-enter {
+ *   /&#42; standard transition code &#42;/
+ *   transition: 1s linear all;
+ *   opacity:0;
+ * }
+ * .my-animation.ng-enter-stagger {
+ *   /&#42; this will have a 100ms delay between each successive leave animation &#42;/
+ *   transition-delay: 0.1s;
+ *
+ *   /&#42; As of 1.4.4, this must always be set: it signals ngAnimate
+ *     to not accidentally inherit a delay property from another CSS class &#42;/
+ *   transition-duration: 0s;
+ * }
+ * .my-animation.ng-enter.ng-enter-active {
+ *   /&#42; standard transition styles &#42;/
+ *   opacity:1;
+ * }
+ * ```
+ *
+ * Staggering animations work by default in ngRepeat (so long as the CSS class is defined). Outside of ngRepeat, to use staggering animations
+ * on your own, they can be triggered by firing multiple calls to the same event on $animate. However, the restrictions surrounding this
+ * are that each of the elements must have the same CSS className value as well as the same parent element. A stagger operation
+ * will also be reset if one or more animation frames have passed since the multiple calls to `$animate` were fired.
+ *
+ * The following code will issue the **ng-leave-stagger** event on the element provided:
+ *
+ * ```js
+ * var kids = parent.children();
+ *
+ * $animate.leave(kids[0]); //stagger index=0
+ * $animate.leave(kids[1]); //stagger index=1
+ * $animate.leave(kids[2]); //stagger index=2
+ * $animate.leave(kids[3]); //stagger index=3
+ * $animate.leave(kids[4]); //stagger index=4
+ *
+ * window.requestAnimationFrame(function() {
+ *   //stagger has reset itself
+ *   $animate.leave(kids[5]); //stagger index=0
+ *   $animate.leave(kids[6]); //stagger index=1
+ *
+ *   $scope.$digest();
+ * });
+ * ```
+ *
+ * Stagger animations are currently only supported within CSS-defined animations.
+ *
+ * ### The `ng-animate` CSS class
+ *
+ * When ngAnimate is animating an element it will apply the `ng-animate` CSS class to the element for the duration of the animation.
+ * This is a temporary CSS class and it will be removed once the animation is over (for both JavaScript and CSS-based animations).
+ *
+ * Therefore, animations can be applied to an element using this temporary class directly via CSS.
+ *
+ * ```css
+ * .zipper.ng-animate {
+ *   transition:0.5s linear all;
+ * }
+ * .zipper.ng-enter {
+ *   opacity:0;
+ * }
+ * .zipper.ng-enter.ng-enter-active {
+ *   opacity:1;
+ * }
+ * .zipper.ng-leave {
+ *   opacity:1;
+ * }
+ * .zipper.ng-leave.ng-leave-active {
+ *   opacity:0;
+ * }
+ * ```
+ *
+ * (Note that the `ng-animate` CSS class is reserved and it cannot be applied on an element directly since ngAnimate will always remove
+ * the CSS class once an animation has completed.)
+ *
+ *
+ * ## JavaScript-based Animations
+ *
+ * ngAnimate also allows for animations to be consumed by JavaScript code. The approach is similar to CSS-based animations (where there is a shared
+ * CSS class that is referenced in our HTML code) but in addition we need to register the JavaScript animation on the module. By making use of the
+ * `module.animation()` module function we can register the ainmation.
+ *
+ * Let's see an example of a enter/leave animation using `ngRepeat`:
+ *
+ * ```html
+ * <div ng-repeat="item in items" class="slide">
+ *   {{ item }}
+ * </div>
+ * ```
+ *
+ * See the **slide** CSS class? Let's use that class to define an animation that we'll structure in our module code by using `module.animation`:
+ *
+ * ```js
+ * myModule.animation('.slide', [function() {
+ *   return {
+ *     // make note that other events (like addClass/removeClass)
+ *     // have different function input parameters
+ *     enter: function(element, doneFn) {
+ *       jQuery(element).fadeIn(1000, doneFn);
+ *
+ *       // remember to call doneFn so that angular
+ *       // knows that the animation has concluded
+ *     },
+ *
+ *     move: function(element, doneFn) {
+ *       jQuery(element).fadeIn(1000, doneFn);
+ *     },
+ *
+ *     leave: function(element, doneFn) {
+ *       jQuery(element).fadeOut(1000, doneFn);
+ *     }
+ *   }
+ * }]);
+ * ```
+ *
+ * The nice thing about JS-based animations is that we can inject other services and make use of advanced animation libraries such as
+ * greensock.js and velocity.js.
+ *
+ * If our animation code class-based (meaning that something like `ngClass`, `ngHide` and `ngShow` triggers it) then we can still define
+ * our animations inside of the same registered animation, however, the function input arguments are a bit different:
+ *
+ * ```html
+ * <div ng-class="color" class="colorful">
+ *   this box is moody
+ * </div>
+ * <button ng-click="color='red'">Change to red</button>
+ * <button ng-click="color='blue'">Change to blue</button>
+ * <button ng-click="color='green'">Change to green</button>
+ * ```
+ *
+ * ```js
+ * myModule.animation('.colorful', [function() {
+ *   return {
+ *     addClass: function(element, className, doneFn) {
+ *       // do some cool animation and call the doneFn
+ *     },
+ *     removeClass: function(element, className, doneFn) {
+ *       // do some cool animation and call the doneFn
+ *     },
+ *     setClass: function(element, addedClass, removedClass, doneFn) {
+ *       // do some cool animation and call the doneFn
+ *     }
+ *   }
+ * }]);
+ * ```
+ *
+ * ## CSS + JS Animations Together
+ *
+ * AngularJS 1.4 and higher has taken steps to make the amalgamation of CSS and JS animations more flexible. However, unlike earlier versions of Angular,
+ * defining CSS and JS animations to work off of the same CSS class will not work anymore. Therefore the example below will only result in **JS animations taking
+ * charge of the animation**:
+ *
+ * ```html
+ * <div ng-if="bool" class="slide">
+ *   Slide in and out
+ * </div>
+ * ```
+ *
+ * ```js
+ * myModule.animation('.slide', [function() {
+ *   return {
+ *     enter: function(element, doneFn) {
+ *       jQuery(element).slideIn(1000, doneFn);
+ *     }
+ *   }
+ * }]);
+ * ```
+ *
+ * ```css
+ * .slide.ng-enter {
+ *   transition:0.5s linear all;
+ *   transform:translateY(-100px);
+ * }
+ * .slide.ng-enter.ng-enter-active {
+ *   transform:translateY(0);
+ * }
+ * ```
+ *
+ * Does this mean that CSS and JS animations cannot be used together? Do JS-based animations always have higher priority? We can make up for the
+ * lack of CSS animations by using the `$animateCss` service to trigger our own tweaked-out, CSS-based animations directly from
+ * our own JS-based animation code:
+ *
+ * ```js
+ * myModule.animation('.slide', ['$animateCss', function($animateCss) {
+ *   return {
+ *     enter: function(element) {
+*        // this will trigger `.slide.ng-enter` and `.slide.ng-enter-active`.
+ *       return $animateCss(element, {
+ *         event: 'enter',
+ *         structural: true
+ *       });
+ *     }
+ *   }
+ * }]);
+ * ```
+ *
+ * The nice thing here is that we can save bandwidth by sticking to our CSS-based animation code and we don't need to rely on a 3rd-party animation framework.
+ *
+ * The `$animateCss` service is very powerful since we can feed in all kinds of extra properties that will be evaluated and fed into a CSS transition or
+ * keyframe animation. For example if we wanted to animate the height of an element while adding and removing classes then we can do so by providing that
+ * data into `$animateCss` directly:
+ *
+ * ```js
+ * myModule.animation('.slide', ['$animateCss', function($animateCss) {
+ *   return {
+ *     enter: function(element) {
+ *       return $animateCss(element, {
+ *         event: 'enter',
+ *         structural: true,
+ *         addClass: 'maroon-setting',
+ *         from: { height:0 },
+ *         to: { height: 200 }
+ *       });
+ *     }
+ *   }
+ * }]);
+ * ```
+ *
+ * Now we can fill in the rest via our transition CSS code:
+ *
+ * ```css
+ * /&#42; the transition tells ngAnimate to make the animation happen &#42;/
+ * .slide.ng-enter { transition:0.5s linear all; }
+ *
+ * /&#42; this extra CSS class will be absorbed into the transition
+ * since the $animateCss code is adding the class &#42;/
+ * .maroon-setting { background:red; }
+ * ```
+ *
+ * And `$animateCss` will figure out the rest. Just make sure to have the `done()` callback fire the `doneFn` function to signal when the animation is over.
+ *
+ * To learn more about what's possible be sure to visit the {@link ngAnimate.$animateCss $animateCss service}.
+ *
+ * ## Animation Anchoring (via `ng-animate-ref`)
+ *
+ * ngAnimate in AngularJS 1.4 comes packed with the ability to cross-animate elements between
+ * structural areas of an application (like views) by pairing up elements using an attribute
+ * called `ng-animate-ref`.
+ *
+ * Let's say for example we have two views that are managed by `ng-view` and we want to show
+ * that there is a relationship between two components situated in within these views. By using the
+ * `ng-animate-ref` attribute we can identify that the two components are paired together and we
+ * can then attach an animation, which is triggered when the view changes.
+ *
+ * Say for example we have the following template code:
+ *
+ * ```html
+ * <!-- index.html -->
+ * <div ng-view class="view-animation">
+ * </div>
+ *
+ * <!-- home.html -->
+ * <a href="#/banner-page">
+ *   <img src="./banner.jpg" class="banner" ng-animate-ref="banner">
+ * </a>
+ *
+ * <!-- banner-page.html -->
+ * <img src="./banner.jpg" class="banner" ng-animate-ref="banner">
+ * ```
+ *
+ * Now, when the view changes (once the link is clicked), ngAnimate will examine the
+ * HTML contents to see if there is a match reference between any components in the view
+ * that is leaving and the view that is entering. It will scan both the view which is being
+ * removed (leave) and inserted (enter) to see if there are any paired DOM elements that
+ * contain a matching ref value.
+ *
+ * The two images match since they share the same ref value. ngAnimate will now create a
+ * transport element (which is a clone of the first image element) and it will then attempt
+ * to animate to the position of the second image element in the next view. For the animation to
+ * work a special CSS class called `ng-anchor` will be added to the transported element.
+ *
+ * We can now attach a transition onto the `.banner.ng-anchor` CSS class and then
+ * ngAnimate will handle the entire transition for us as well as the addition and removal of
+ * any changes of CSS classes between the elements:
+ *
+ * ```css
+ * .banner.ng-anchor {
+ *   /&#42; this animation will last for 1 second since there are
+ *          two phases to the animation (an `in` and an `out` phase) &#42;/
+ *   transition:0.5s linear all;
+ * }
+ * ```
+ *
+ * We also **must** include animations for the views that are being entered and removed
+ * (otherwise anchoring wouldn't be possible since the new view would be inserted right away).
+ *
+ * ```css
+ * .view-animation.ng-enter, .view-animation.ng-leave {
+ *   transition:0.5s linear all;
+ *   position:fixed;
+ *   left:0;
+ *   top:0;
+ *   width:100%;
+ * }
+ * .view-animation.ng-enter {
+ *   transform:translateX(100%);
+ * }
+ * .view-animation.ng-leave,
+ * .view-animation.ng-enter.ng-enter-active {
+ *   transform:translateX(0%);
+ * }
+ * .view-animation.ng-leave.ng-leave-active {
+ *   transform:translateX(-100%);
+ * }
+ * ```
+ *
+ * Now we can jump back to the anchor animation. When the animation happens, there are two stages that occur:
+ * an `out` and an `in` stage. The `out` stage happens first and that is when the element is animated away
+ * from its origin. Once that animation is over then the `in` stage occurs which animates the
+ * element to its destination. The reason why there are two animations is to give enough time
+ * for the enter animation on the new element to be ready.
+ *
+ * The example above sets up a transition for both the in and out phases, but we can also target the out or
+ * in phases directly via `ng-anchor-out` and `ng-anchor-in`.
+ *
+ * ```css
+ * .banner.ng-anchor-out {
+ *   transition: 0.5s linear all;
+ *
+ *   /&#42; the scale will be applied during the out animation,
+ *          but will be animated away when the in animation runs &#42;/
+ *   transform: scale(1.2);
+ * }
+ *
+ * .banner.ng-anchor-in {
+ *   transition: 1s linear all;
+ * }
+ * ```
+ *
+ *
+ *
+ *
+ * ### Anchoring Demo
+ *
+  <example module="anchoringExample"
+           name="anchoringExample"
+           id="anchoringExample"
+           deps="angular-animate.js;angular-route.js"
+           animations="true">
+    <file name="index.html">
+      <a href="#/">Home</a>
+      <hr />
+      <div class="view-container">
+        <div ng-view class="view"></div>
+      </div>
+    </file>
+    <file name="script.js">
+      angular.module('anchoringExample', ['ngAnimate', 'ngRoute'])
+        .config(['$routeProvider', function($routeProvider) {
+          $routeProvider.when('/', {
+            templateUrl: 'home.html',
+            controller: 'HomeController as home'
+          });
+          $routeProvider.when('/profile/:id', {
+            templateUrl: 'profile.html',
+            controller: 'ProfileController as profile'
+          });
+        }])
+        .run(['$rootScope', function($rootScope) {
+          $rootScope.records = [
+            { id:1, title: "Miss Beulah Roob" },
+            { id:2, title: "Trent Morissette" },
+            { id:3, title: "Miss Ava Pouros" },
+            { id:4, title: "Rod Pouros" },
+            { id:5, title: "Abdul Rice" },
+            { id:6, title: "Laurie Rutherford Sr." },
+            { id:7, title: "Nakia McLaughlin" },
+            { id:8, title: "Jordon Blanda DVM" },
+            { id:9, title: "Rhoda Hand" },
+            { id:10, title: "Alexandrea Sauer" }
+          ];
+        }])
+        .controller('HomeController', [function() {
+          //empty
+        }])
+        .controller('ProfileController', ['$rootScope', '$routeParams', function($rootScope, $routeParams) {
+          var index = parseInt($routeParams.id, 10);
+          var record = $rootScope.records[index - 1];
+
+          this.title = record.title;
+          this.id = record.id;
+        }]);
+    </file>
+    <file name="home.html">
+      <h2>Welcome to the home page</h1>
+      <p>Please click on an element</p>
+      <a class="record"
+         ng-href="#/profile/{{ record.id }}"
+         ng-animate-ref="{{ record.id }}"
+         ng-repeat="record in records">
+        {{ record.title }}
+      </a>
+    </file>
+    <file name="profile.html">
+      <div class="profile record" ng-animate-ref="{{ profile.id }}">
+        {{ profile.title }}
+      </div>
+    </file>
+    <file name="animations.css">
+      .record {
+        display:block;
+        font-size:20px;
+      }
+      .profile {
+        background:black;
+        color:white;
+        font-size:100px;
+      }
+      .view-container {
+        position:relative;
+      }
+      .view-container > .view.ng-animate {
+        position:absolute;
+        top:0;
+        left:0;
+        width:100%;
+        min-height:500px;
+      }
+      .view.ng-enter, .view.ng-leave,
+      .record.ng-anchor {
+        transition:0.5s linear all;
+      }
+      .view.ng-enter {
+        transform:translateX(100%);
+      }
+      .view.ng-enter.ng-enter-active, .view.ng-leave {
+        transform:translateX(0%);
+      }
+      .view.ng-leave.ng-leave-active {
+        transform:translateX(-100%);
+      }
+      .record.ng-anchor-out {
+        background:red;
+      }
+    </file>
+  </example>
+ *
+ * ### How is the element transported?
+ *
+ * When an anchor animation occurs, ngAnimate will clone the starting element and position it exactly where the starting
+ * element is located on screen via absolute positioning. The cloned element will be placed inside of the root element
+ * of the application (where ng-app was defined) and all of the CSS classes of the starting element will be applied. The
+ * element will then animate into the `out` and `in` animations and will eventually reach the coordinates and match
+ * the dimensions of the destination element. During the entire animation a CSS class of `.ng-animate-shim` will be applied
+ * to both the starting and destination elements in order to hide them from being visible (the CSS styling for the class
+ * is: `visibility:hidden`). Once the anchor reaches its destination then it will be removed and the destination element
+ * will become visible since the shim class will be removed.
+ *
+ * ### How is the morphing handled?
+ *
+ * CSS Anchoring relies on transitions and keyframes and the internal code is intelligent enough to figure out
+ * what CSS classes differ between the starting element and the destination element. These different CSS classes
+ * will be added/removed on the anchor element and a transition will be applied (the transition that is provided
+ * in the anchor class). Long story short, ngAnimate will figure out what classes to add and remove which will
+ * make the transition of the element as smooth and automatic as possible. Be sure to use simple CSS classes that
+ * do not rely on DOM nesting structure so that the anchor element appears the same as the starting element (since
+ * the cloned element is placed inside of root element which is likely close to the body element).
+ *
+ * Note that if the root element is on the `<html>` element then the cloned node will be placed inside of body.
+ *
+ *
+ * ## Using $animate in your directive code
+ *
+ * So far we've explored how to feed in animations into an Angular application, but how do we trigger animations within our own directives in our application?
+ * By injecting the `$animate` service into our directive code, we can trigger structural and class-based hooks which can then be consumed by animations. Let's
+ * imagine we have a greeting box that shows and hides itself when the data changes
+ *
+ * ```html
+ * <greeting-box active="onOrOff">Hi there</greeting-box>
+ * ```
+ *
+ * ```js
+ * ngModule.directive('greetingBox', ['$animate', function($animate) {
+ *   return function(scope, element, attrs) {
+ *     attrs.$observe('active', function(value) {
+ *       value ? $animate.addClass(element, 'on') : $animate.removeClass(element, 'on');
+ *     });
+ *   });
+ * }]);
+ * ```
+ *
+ * Now the `on` CSS class is added and removed on the greeting box component. Now if we add a CSS class on top of the greeting box element
+ * in our HTML code then we can trigger a CSS or JS animation to happen.
+ *
+ * ```css
+ * /&#42; normally we would create a CSS class to reference on the element &#42;/
+ * greeting-box.on { transition:0.5s linear all; background:green; color:white; }
+ * ```
+ *
+ * The `$animate` service contains a variety of other methods like `enter`, `leave`, `animate` and `setClass`. To learn more about what's
+ * possible be sure to visit the {@link ng.$animate $animate service API page}.
+ *
+ *
+ * ### Preventing Collisions With Third Party Libraries
+ *
+ * Some third-party frameworks place animation duration defaults across many element or className
+ * selectors in order to make their code small and reuseable. This can lead to issues with ngAnimate, which
+ * is expecting actual animations on these elements and has to wait for their completion.
+ *
+ * You can prevent this unwanted behavior by using a prefix on all your animation classes:
+ *
+ * ```css
+ * /&#42; prefixed with animate- &#42;/
+ * .animate-fade-add.animate-fade-add-active {
+ *   transition:1s linear all;
+ *   opacity:0;
+ * }
+ * ```
+ *
+ * You then configure `$animate` to enforce this prefix:
+ *
+ * ```js
+ * $animateProvider.classNameFilter(/animate-/);
+ * ```
+ *
+ * This also may provide your application with a speed boost since only specific elements containing CSS class prefix
+ * will be evaluated for animation when any DOM changes occur in the application.
+ *
+ * ## Callbacks and Promises
+ *
+ * When `$animate` is called it returns a promise that can be used to capture when the animation has ended. Therefore if we were to trigger
+ * an animation (within our directive code) then we can continue performing directive and scope related activities after the animation has
+ * ended by chaining onto the returned promise that animation method returns.
+ *
+ * ```js
+ * // somewhere within the depths of the directive
+ * $animate.enter(element, parent).then(function() {
+ *   //the animation has completed
+ * });
+ * ```
+ *
+ * (Note that earlier versions of Angular prior to v1.4 required the promise code to be wrapped using `$scope.$apply(...)`. This is not the case
+ * anymore.)
+ *
+ * In addition to the animation promise, we can also make use of animation-related callbacks within our directives and controller code by registering
+ * an event listener using the `$animate` service. Let's say for example that an animation was triggered on our view
+ * routing controller to hook into that:
+ *
+ * ```js
+ * ngModule.controller('HomePageController', ['$animate', function($animate) {
+ *   $animate.on('enter', ngViewElement, function(element) {
+ *     // the animation for this route has completed
+ *   }]);
+ * }])
+ * ```
+ *
+ * (Note that you will need to trigger a digest within the callback to get angular to notice any scope-related changes.)
+ */
+
+/**
+ * @ngdoc service
+ * @name $animate
+ * @kind object
+ *
+ * @description
+ * The ngAnimate `$animate` service documentation is the same for the core `$animate` service.
+ *
+ * Click here {@link ng.$animate to learn more about animations with `$animate`}.
+ */
+angular.module('ngAnimate', [])
+  .directive('ngAnimateChildren', $$AnimateChildrenDirective)
+  .factory('$$rAFScheduler', $$rAFSchedulerFactory)
+
+  .factory('$$AnimateRunner', $$AnimateRunnerFactory)
+  .factory('$$animateAsyncRun', $$AnimateAsyncRunFactory)
+
+  .provider('$$animateQueue', $$AnimateQueueProvider)
+  .provider('$$animation', $$AnimationProvider)
+
+  .provider('$animateCss', $AnimateCssProvider)
+  .provider('$$animateCssDriver', $$AnimateCssDriverProvider)
+
+  .provider('$$animateJs', $$AnimateJsProvider)
+  .provider('$$animateJsDriver', $$AnimateJsDriverProvider);
+
+
+})(window, window.angular);
diff --git a/public/bower_components/angular-audio/angular.audio.js b/public/bower_components/angular-audio/angular.audio.js
new file mode 100644
index 0000000..f2c40b8
--- /dev/null
+++ b/public/bower_components/angular-audio/angular.audio.js
@@ -0,0 +1,490 @@
+'use strict';
+angular.module('ngAudio', [])
+.directive('ngAudio', ['$compile', '$q', 'ngAudio', function($compile, $q, ngAudio) {
+    return {
+        restrict: 'AEC',
+        scope: {
+            volume: '=',
+            start: '=',
+            currentTime: '=',
+            loop: '=',
+            clickPlay: '=',
+            disablePreload:'='
+            //ngAudio:'='
+        },
+        controller: function($scope, $attrs, $element, $timeout) {
+            
+            /* Loads the sound from destination */
+            var audio;
+            function initSound(){
+                audio = ngAudio.load($attrs.ngAudio, $scope);
+                /* Add audio to local scope for modification with nested inputs */
+                $scope.$audio = audio;
+
+                /* Remove watching features for improved performance */
+                audio.unbind();
+            }            
+
+            if (!$scope.disablePreload){
+                initSound();
+            }        
+            
+
+            $element.on('click', function() {
+                if ($scope.clickPlay === false) {
+                    return;
+                }
+                
+                if ($scope.disablePreload){
+                    initSound();
+                }        
+
+                /* iOS workaround: Call the play method directly in listener function */
+                audio.audio.play();
+                
+                /* Set volume to $scope volume if it exists, or default to audio's current value */
+                audio.volume = $scope.volume || audio.volume;
+                audio.loop = $scope.loop;
+                audio.currentTime = $scope.start || 0;
+
+                /* Fixes a bug with Firefox (???) */
+                $timeout(function() {
+                    audio.play();
+                }, 5);
+            });
+            
+            $element.on('$destroy', function() {
+                audio.destroy();
+            });
+        }
+    };
+}])
+
+.directive('ngAudioHover', ['$compile', '$q', 'ngAudio', function($compile, $q, ngAudio) {
+    return {
+        restrict: 'AEC',
+        controller: function($scope, $attrs, $element, $timeout) {
+
+            var audio = ngAudio.load($attrs.ngAudioHover, $scope);
+
+            $element.on('mouseover rollover hover', function() {
+                
+                /* iOS workaround: Call the play method directly in listener function */
+                audio.audio.play();
+                
+                audio.volume = $attrs.volumeHover || audio.volume;
+                audio.loop = $attrs.loop;
+                audio.currentTime = $attrs.startHover || 0;
+
+            });
+
+            $element.on('$destroy', function() {
+                audio.destroy();
+            });
+        }
+    };
+}])
+
+.service('localAudioFindingService', ['$q', function($q) {
+
+    this.find = function(id) {
+        var deferred = $q.defer();
+        var $sound = document.getElementById(id);
+        if ($sound) {
+            deferred.resolve($sound);
+        } else {
+            deferred.reject(id);
+        }
+
+        return deferred.promise;
+    };
+}])
+
+.service('remoteAudioFindingService', ['$q', function($q) {
+
+    this.find = function(url) {
+        var deferred = $q.defer();
+        var audio = new Audio();
+
+        audio.addEventListener('error', function() {
+            deferred.reject();
+        });
+
+        audio.addEventListener('loadstart', function() {
+            deferred.resolve(audio);
+        });
+
+        // bugfix for chrome...
+        setTimeout(function() {
+            audio.src = url;
+        }, 1);
+
+        return deferred.promise;
+
+    };
+}])
+
+.service('cleverAudioFindingService', ['$q', 'localAudioFindingService', 'remoteAudioFindingService', function($q, localAudioFindingService, remoteAudioFindingService) {
+    this.find = function(id) {
+        var deferred = $q.defer();
+
+        id = id.replace('|', '/');
+
+        localAudioFindingService.find(id)
+            .then(deferred.resolve, function() {
+                return remoteAudioFindingService.find(id);
+            })
+            .then(deferred.resolve, deferred.reject);
+
+        return deferred.promise;
+    };
+}])
+
+.value('ngAudioGlobals', {
+    muting: false,
+    songmuting: false,
+    performance: 25,
+    unlock: true
+})
+
+.factory('NgAudioObject', ['cleverAudioFindingService', '$rootScope', '$interval', '$timeout', 'ngAudioGlobals', function(cleverAudioFindingService, $rootScope, $interval, $timeout, ngAudioGlobals) {
+    return function(id, scope) {
+
+        function twiddle(){
+            audio.play();
+            audio.pause();
+            window.removeEventListener("click",twiddle);
+        }
+
+        var $audioWatch,
+            $intervalWatch,
+            $willPlay = false,
+            $willPause = false,
+            $willRestart = false,
+            $willChangePlaybackRate = false,
+            $newPlaybackRate = false,
+            $volumeToSet,
+            $looping,
+            $isMuting = false,
+            $observeProperties = true,
+            $destroyed = false,
+            $scope = scope || $rootScope,
+            audio,
+            audioObject = this;
+
+        this.id = id;
+        this.safeId = id.replace('/', '|');
+        this.loop = 0;
+
+        this.unbind = function() {
+            $observeProperties = false;
+        };
+
+        this.play = function() {
+            $willPlay = true;
+            return this;
+        };
+        
+        var completeListeners = [];
+        this.complete = function(callback){
+            completeListeners.push(callback);
+        }
+
+        this.pause = function() {
+            $willPause = true;
+        };
+
+        this.restart = function() {
+            $willRestart = true;
+        };
+
+        this.stop = function() {
+            this.restart();
+        };
+
+        this.setVolume = function(volume) {
+            $volumeToSet = volume;
+        };
+
+        this.setPlaybackRate = function(rate) {
+            $newPlaybackRate = rate;
+            $willChangePlaybackRate = true;
+        };
+
+        this.setMuting = function(muting) {
+            $isMuting = muting;
+        };
+
+        this.setProgress = function(progress) {
+            if (audio && audio.duration && isFinite(progress)) {
+                audio.currentTime = audio.duration * progress;
+            }
+        };
+
+        this.setCurrentTime = function(currentTime) {
+            if (audio && audio.duration) {
+                audio.currentTime = currentTime;
+            }
+        };
+
+        this.destroy = $destroy;
+        
+        $scope.$on('$destroy', function() {
+            $destroy();
+        });
+        
+        function $destroy() {
+            if (!$destroyed) {
+                if (interval) {
+                    $interval.cancel(interval);
+                }
+                if ($intervalWatch) {
+                    $intervalWatch();
+                }
+                if ($audioWatch) {
+                    $audioWatch();
+                }
+                $destroyed = true;
+            }
+        }
+
+        function $setWatch() {
+            if ($destroyed) {
+                return;
+            }
+            $audioWatch = $scope.$watch(function() {
+                return {
+                    volume: audioObject.volume,
+                    currentTime: audioObject.currentTime,
+                    progress: audioObject.progress,
+                    muting: audioObject.muting,
+                    loop: audioObject.loop,
+                    playbackRate: audioObject.playbackRate
+                };
+            }, function(newValue, oldValue) {
+                //console.log("ngaudio watch callback for: " + audioObject.id);
+                if (newValue.currentTime !== oldValue.currentTime) {
+                    audioObject.setCurrentTime(newValue.currentTime);
+                }
+
+                if (newValue.progress !== oldValue.progress) {
+                    audioObject.setProgress(newValue.progress);
+                }
+                if (newValue.volume !== oldValue.volume) {
+                    audioObject.setVolume(newValue.volume);
+                }
+
+                if (newValue.playbackRate !== oldValue.playbackRate) {
+                    audioObject.setPlaybackRate(newValue.playbackRate);
+                }
+
+
+
+                $looping = newValue.loop;
+
+                if (newValue.muting !== oldValue.muting) {
+                    audioObject.setMuting(newValue.muting);
+                }
+            }, true);
+        }
+
+        cleverAudioFindingService.find(id)
+            .then(function(nativeAudio) {
+                audio = nativeAudio;
+                if (ngAudioGlobals.unlock) {
+
+                    window.addEventListener("click", twiddle);
+                    
+                    audio.addEventListener('playing', function() {
+                        window.removeEventListener("click",twiddle);
+                    });
+
+                }
+
+                audio.addEventListener('canplay', function() {
+                    audioObject.canPlay = true;
+                });
+
+            }, function(error) {
+                audioObject.error = true;
+                console.warn(error);
+            });
+
+
+        var interval = $interval(checkWatchers, ngAudioGlobals.performance);
+        $intervalWatch = $scope.$watch(function(){
+            return ngAudioGlobals.performance;
+        },function(){
+            $interval.cancel(interval);
+            interval = $interval(checkWatchers, ngAudioGlobals.performance);
+        })
+        
+        function checkWatchers() {
+            if ($audioWatch) {
+                $audioWatch();
+            }
+            if (audio) {
+
+                if ($isMuting || ngAudioGlobals.isMuting) {
+                    audio.volume = 0;
+                } else {
+                    audio.volume = audioObject.volume !== undefined ? audioObject.volume : 1;
+                }
+
+                if ($willPlay) {
+                    audio.play();
+                    $willPlay = false;
+                }
+
+                if ($willRestart) {
+                    audio.pause();
+                    audio.currentTime = 0;
+                    $willRestart = false;
+                }
+
+                if ($willPause) {
+                    audio.pause();
+                    $willPause = false;
+                }
+
+                if ($willChangePlaybackRate) {
+                    audio.playbackRate = $newPlaybackRate;
+                    $willChangePlaybackRate = false;
+                }
+
+                if ($volumeToSet) {
+                    audio.volume = $volumeToSet;
+                    $volumeToSet = undefined;
+                }
+
+                if ($observeProperties) {
+                    audioObject.currentTime = audio.currentTime;
+                    audioObject.duration = audio.duration;
+                    audioObject.remaining = audio.duration - audio.currentTime;
+                    audioObject.progress = audio.currentTime / audio.duration;
+                    audioObject.paused = audio.paused;
+                    audioObject.src = audio.src;
+                    
+                    if (audioObject.currentTime >= audioObject.duration) {
+                        completeListeners.forEach(function(listener){
+                            listener(audioObject);
+                        })
+                    }
+
+                    if ($looping && audioObject.currentTime >= audioObject.duration) {
+                        if ($looping !== true) {
+                            $looping--;
+                            audioObject.loop--;
+                            // if (!$looping) return;
+                        }
+                        audioObject.setCurrentTime(0);
+                        audioObject.play();
+
+                    }
+                }
+
+                if (!$isMuting && !ngAudioGlobals.isMuting) {
+                    audioObject.volume = audio.volume;
+                }
+
+                audioObject.audio = audio;
+            }
+
+            $setWatch();
+        }
+    };
+}])
+.service('ngAudio', ['NgAudioObject', 'ngAudioGlobals', function(NgAudioObject, ngAudioGlobals) {
+    this.play = function(id, scope) {
+
+        var audio = new NgAudioObject(id, scope);
+        audio.play();
+        return audio;
+    };
+
+    this.load = function(id, scope) {
+        return new NgAudioObject(id, scope);
+    };
+
+    this.mute = function() {
+        ngAudioGlobals.muting = true;
+    };
+
+    this.unmute = function() {
+        ngAudioGlobals.muting = false;
+    };
+
+    this.toggleMute = function() {
+        ngAudioGlobals.muting = !ngAudioGlobals.muting;
+    };
+
+    this.setUnlock = function(unlock) {
+      ngAudioGlobals.unlock = unlock;
+    };
+}])
+.filter("trackTime", function(){
+    /* Conveniently takes a number and returns the track time */
+    
+    return function(input){
+
+        var totalSec = Math.floor(input | 0);
+
+        var output = "";
+        var hours = 0;
+        var minutes = 0;
+        var seconds = 0;
+
+        if (totalSec > 3599) {
+
+            hours = Math.floor(totalSec / 3600);
+            minutes = Math.floor((totalSec - (hours * 3600)) / 60);
+            seconds = (totalSec - ((minutes * 60) + (hours * 3600))); 
+
+            if (hours.toString().length == 1) {
+                hours = "0" + (Math.floor(totalSec / 3600)).toString();
+            } 
+
+            if (minutes.toString().length == 1) {
+                minutes = "0" + (Math.floor((totalSec - (hours * 3600)) / 60)).toString();
+            } 
+
+            if (seconds.toString().length == 1) {
+                seconds = "0" + (totalSec - ((minutes * 60) + (hours * 3600))).toString(); 
+            } 
+
+            output = hours + ":" + minutes + ":" + seconds;
+
+        } else if (totalSec > 59) {
+
+            minutes = Math.floor(totalSec / 60);
+            seconds = totalSec - (minutes * 60);
+
+            if (minutes.toString().length == 1) {
+                 minutes = "0" + (Math.floor(totalSec / 60)).toString();
+            }
+
+            if (seconds.toString().length == 1) {
+                 seconds = "0" + (totalSec - (minutes * 60)).toString();
+            }
+
+            output = minutes + ":" + seconds;
+
+        } else {
+
+            seconds = totalSec;
+
+            if (seconds.toString().length == 1) {
+                seconds = "0" + (totalSec).toString();
+            }
+
+            output = totalSec + "s";
+
+        }
+        
+        if (typeof Number.isNaN === "function" && Number.isNaN(output)){
+            debugger;
+        }
+
+        return output; 
+    }
+});
diff --git a/public/bower_components/angular-bootstrap-colorpicker/bootstrap-colorpicker-module.js b/public/bower_components/angular-bootstrap-colorpicker/bootstrap-colorpicker-module.js
new file mode 100644
index 0000000..f7137c1
--- /dev/null
+++ b/public/bower_components/angular-bootstrap-colorpicker/bootstrap-colorpicker-module.js
@@ -0,0 +1,567 @@
+angular.module('colorpicker.module', [])
+    .factory('Helper', function () {
+      'use strict';
+      return {
+        closestSlider: function (elem) {
+          var matchesSelector = elem.matches || elem.webkitMatchesSelector || elem.mozMatchesSelector || elem.msMatchesSelector;
+          if (matchesSelector.bind(elem)('I')) {
+            return elem.parentNode;
+          }
+          return elem;
+        },
+        getOffset: function (elem, fixedPosition) {
+          var
+            scrollX = 0,
+            scrollY = 0,
+            rect = elem.getBoundingClientRect();
+          while (elem && !isNaN(elem.offsetLeft) && !isNaN(elem.offsetTop)) {
+            if (!fixedPosition && elem.tagName === 'BODY') {
+              scrollX += document.documentElement.scrollLeft || elem.scrollLeft;
+              scrollY += document.documentElement.scrollTop || elem.scrollTop;
+            } else {
+              scrollX += elem.scrollLeft;
+              scrollY += elem.scrollTop;
+            }
+            elem = elem.offsetParent;
+          }
+          return {
+            top: rect.top + window.pageYOffset,
+            left: rect.left + window.pageXOffset,
+            scrollX: scrollX,
+            scrollY: scrollY
+          };
+        },
+        // a set of RE's that can match strings and generate color tuples. https://github.com/jquery/jquery-color/
+        stringParsers: [
+          {
+            re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,
+            parse: function (execResult) {
+              return [
+                execResult[1],
+                execResult[2],
+                execResult[3],
+                execResult[4]
+              ];
+            }
+          },
+          {
+            re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d+(?:\.\d+)?)\s*)?\)/,
+            parse: function (execResult) {
+              return [
+                2.55 * execResult[1],
+                2.55 * execResult[2],
+                2.55 * execResult[3],
+                execResult[4]
+              ];
+            }
+          },
+          {
+            re: /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/,
+            parse: function (execResult) {
+              return [
+                parseInt(execResult[1], 16),
+                parseInt(execResult[2], 16),
+                parseInt(execResult[3], 16)
+              ];
+            }
+          },
+          {
+            re: /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/,
+            parse: function (execResult) {
+              return [
+                parseInt(execResult[1] + execResult[1], 16),
+                parseInt(execResult[2] + execResult[2], 16),
+                parseInt(execResult[3] + execResult[3], 16)
+              ];
+            }
+          }
+        ]
+      };
+    })
+    .factory('Color', ['Helper', function (Helper) {
+      'use strict';
+      return {
+        value: {
+          h: 1,
+          s: 1,
+          b: 1,
+          a: 1
+        },
+        // translate a format from Color object to a string
+        'rgb': function () {
+          var rgb = this.toRGB();
+          return 'rgb(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ')';
+        },
+        'rgba': function () {
+          var rgb = this.toRGB();
+          return 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + rgb.a + ')';
+        },
+        'hex': function () {
+          return  this.toHex();
+        },
+
+        // HSBtoRGB from RaphaelJS
+        RGBtoHSB: function (r, g, b, a) {
+          r /= 255;
+          g /= 255;
+          b /= 255;
+
+          var H, S, V, C;
+          V = Math.max(r, g, b);
+          C = V - Math.min(r, g, b);
+          H = (C === 0 ? null :
+              V === r ? (g - b) / C :
+                  V === g ? (b - r) / C + 2 :
+                      (r - g) / C + 4
+              );
+          H = ((H + 360) % 6) * 60 / 360;
+          S = C === 0 ? 0 : C / V;
+          return {h: H || 1, s: S, b: V, a: a || 1};
+        },
+
+        //parse a string to HSB
+        setColor: function (val) {
+          val = val.toLowerCase();
+          for (var key in Helper.stringParsers) {
+            if (Helper.stringParsers.hasOwnProperty(key)) {
+              var parser = Helper.stringParsers[key];
+              var match = parser.re.exec(val),
+                  values = match && parser.parse(match);
+              if (values) {
+                this.value = this.RGBtoHSB.apply(null, values);
+                return false;
+              }
+            }
+          }
+        },
+
+        setHue: function (h) {
+          this.value.h = 1 - h;
+        },
+
+        setSaturation: function (s) {
+          this.value.s = s;
+        },
+
+        setLightness: function (b) {
+          this.value.b = 1 - b;
+        },
+
+        setAlpha: function (a) {
+          this.value.a = parseInt((1 - a) * 100, 10) / 100;
+        },
+
+        // HSBtoRGB from RaphaelJS
+        // https://github.com/DmitryBaranovskiy/raphael/
+        toRGB: function (h, s, b, a) {
+          if (!h) {
+            h = this.value.h;
+            s = this.value.s;
+            b = this.value.b;
+          }
+          h *= 360;
+          var R, G, B, X, C;
+          h = (h % 360) / 60;
+          C = b * s;
+          X = C * (1 - Math.abs(h % 2 - 1));
+          R = G = B = b - C;
+
+          h = ~~h;
+          R += [C, X, 0, 0, X, C][h];
+          G += [X, C, C, X, 0, 0][h];
+          B += [0, 0, X, C, C, X][h];
+          return {
+            r: Math.round(R * 255),
+            g: Math.round(G * 255),
+            b: Math.round(B * 255),
+            a: a || this.value.a
+          };
+        },
+
+        toHex: function (h, s, b, a) {
+          var rgb = this.toRGB(h, s, b, a);
+          return '#' + ((1 << 24) | (parseInt(rgb.r, 10) << 16) | (parseInt(rgb.g, 10) << 8) | parseInt(rgb.b, 10)).toString(16).substr(1);
+        }
+      };
+    }])
+    .factory('Slider', ['Helper', function (Helper) {
+      'use strict';
+      var
+          slider = {
+            maxLeft: 0,
+            maxTop: 0,
+            callLeft: null,
+            callTop: null,
+            knob: {
+              top: 0,
+              left: 0
+            }
+          },
+          pointer = {};
+
+      return {
+        getSlider: function() {
+          return slider;
+        },
+        getLeftPosition: function(event) {
+          return Math.max(0, Math.min(slider.maxLeft, slider.left + ((event.pageX || pointer.left) - pointer.left)));
+        },
+        getTopPosition: function(event) {
+          return Math.max(0, Math.min(slider.maxTop, slider.top + ((event.pageY || pointer.top) - pointer.top)));
+        },
+        setSlider: function (event, fixedPosition) {
+          var
+            target = Helper.closestSlider(event.target),
+            targetOffset = Helper.getOffset(target, fixedPosition),
+            rect = target.getBoundingClientRect(),
+            offsetX = event.clientX - rect.left,
+            offsetY = event.clientY - rect.top;
+
+          slider.knob = target.children[0].style;
+          slider.left = event.pageX - targetOffset.left - window.pageXOffset + targetOffset.scrollX;
+          slider.top = event.pageY - targetOffset.top - window.pageYOffset + targetOffset.scrollY;
+
+          pointer = {
+            left: event.pageX - (offsetX - slider.left),
+            top: event.pageY - (offsetY - slider.top)
+          };
+        },
+        setSaturation: function(event, fixedPosition) {
+          slider = {
+            maxLeft: 100,
+            maxTop: 100,
+            callLeft: 'setSaturation',
+            callTop: 'setLightness'
+          };
+          this.setSlider(event, fixedPosition);
+        },
+        setHue: function(event, fixedPosition) {
+          slider = {
+            maxLeft: 0,
+            maxTop: 100,
+            callLeft: false,
+            callTop: 'setHue'
+          };
+          this.setSlider(event, fixedPosition);
+        },
+        setAlpha: function(event, fixedPosition) {
+          slider = {
+            maxLeft: 0,
+            maxTop: 100,
+            callLeft: false,
+            callTop: 'setAlpha'
+          };
+          this.setSlider(event, fixedPosition);
+        },
+        setKnob: function(top, left) {
+          slider.knob.top = top + 'px';
+          slider.knob.left = left + 'px';
+        }
+      };
+    }])
+    .directive('colorpicker', ['$document', '$compile', 'Color', 'Slider', 'Helper', function ($document, $compile, Color, Slider, Helper) {
+      'use strict';
+      return {
+        require: '?ngModel',
+        restrict: 'A',
+        link: function ($scope, elem, attrs, ngModel) {
+          var
+              thisFormat = attrs.colorpicker ? attrs.colorpicker : 'hex',
+              position = angular.isDefined(attrs.colorpickerPosition) ? attrs.colorpickerPosition : 'bottom',
+              inline = angular.isDefined(attrs.colorpickerInline) ? attrs.colorpickerInline : false,
+              fixedPosition = angular.isDefined(attrs.colorpickerFixedPosition) ? attrs.colorpickerFixedPosition : false,
+              target = angular.isDefined(attrs.colorpickerParent) ? elem.parent() : angular.element(document.body),
+              withInput = angular.isDefined(attrs.colorpickerWithInput) ? attrs.colorpickerWithInput : false,
+              inputTemplate = withInput ? '<input type="text" name="colorpicker-input" spellcheck="false">' : '',
+              closeButton = !inline ? '<button type="button" class="close close-colorpicker">&times;</button>' : '',
+              template =
+                  '<div class="colorpicker dropdown">' +
+                      '<div class="dropdown-menu">' +
+                      '<colorpicker-saturation><i></i></colorpicker-saturation>' +
+                      '<colorpicker-hue><i></i></colorpicker-hue>' +
+                      '<colorpicker-alpha><i></i></colorpicker-alpha>' +
+                      '<colorpicker-preview></colorpicker-preview>' +
+                      inputTemplate +
+                      closeButton +
+                      '</div>' +
+                      '</div>',
+              colorpickerTemplate = angular.element(template),
+              pickerColor = Color,
+              sliderAlpha,
+              sliderHue = colorpickerTemplate.find('colorpicker-hue'),
+              sliderSaturation = colorpickerTemplate.find('colorpicker-saturation'),
+              colorpickerPreview = colorpickerTemplate.find('colorpicker-preview'),
+              pickerColorPointers = colorpickerTemplate.find('i');
+
+          $compile(colorpickerTemplate)($scope);
+
+          if (withInput) {
+            var pickerColorInput = colorpickerTemplate.find('input');
+            pickerColorInput
+                .on('mousedown', function(event) {
+                  event.stopPropagation();
+                })
+              .on('keyup', function() {
+                var newColor = this.value;
+                elem.val(newColor);
+                if (ngModel && ngModel.$modelValue !== newColor) {
+                  $scope.$apply(ngModel.$setViewValue(newColor));
+                  update(true);
+                }
+              });
+          }
+
+          var bindMouseEvents = function() {
+            $document.on('mousemove', mousemove);
+            $document.on('mouseup', mouseup);
+          };
+
+          if (thisFormat === 'rgba') {
+            colorpickerTemplate.addClass('alpha');
+            sliderAlpha = colorpickerTemplate.find('colorpicker-alpha');
+            sliderAlpha
+                .on('click', function(event) {
+                  Slider.setAlpha(event, fixedPosition);
+                  mousemove(event);
+                })
+                .on('mousedown', function(event) {
+                  Slider.setAlpha(event, fixedPosition);
+                  bindMouseEvents();
+                })
+                .on('mouseup', function(event){
+                  emitEvent('colorpicker-selected-alpha');
+                });
+          }
+
+          sliderHue
+              .on('click', function(event) {
+                Slider.setHue(event, fixedPosition);
+                mousemove(event);
+              })
+              .on('mousedown', function(event) {
+                Slider.setHue(event, fixedPosition);
+                bindMouseEvents();
+              })
+              .on('mouseup', function(event){
+                emitEvent('colorpicker-selected-hue');
+              });
+
+          sliderSaturation
+              .on('click', function(event) {
+                Slider.setSaturation(event, fixedPosition);
+                mousemove(event);
+                if (angular.isDefined(attrs.colorpickerCloseOnSelect)) {
+                  hideColorpickerTemplate();
+                }
+              })
+              .on('mousedown', function(event) {
+                Slider.setSaturation(event, fixedPosition);
+                bindMouseEvents();
+              })
+              .on('mouseup', function(event){
+                emitEvent('colorpicker-selected-saturation');
+              });
+
+          if (fixedPosition) {
+            colorpickerTemplate.addClass('colorpicker-fixed-position');
+          }
+
+          colorpickerTemplate.addClass('colorpicker-position-' + position);
+          if (inline === 'true') {
+            colorpickerTemplate.addClass('colorpicker-inline');
+          }
+
+          target.append(colorpickerTemplate);
+
+          if(ngModel) {
+            ngModel.$render = function () {
+              elem.val(ngModel.$viewValue);
+            };
+          }
+
+          elem.on('blur keyup change', function() {
+            update();
+          });
+
+          elem.on('$destroy', function() {
+            colorpickerTemplate.remove();
+          });
+
+          var previewColor = function () {
+            try {
+              colorpickerPreview.css('backgroundColor', pickerColor[thisFormat]());
+            } catch (e) {
+              colorpickerPreview.css('backgroundColor', pickerColor.toHex());
+            }
+            sliderSaturation.css('backgroundColor', pickerColor.toHex(pickerColor.value.h, 1, 1, 1));
+            if (thisFormat === 'rgba') {
+              sliderAlpha.css.backgroundColor = pickerColor.toHex();
+            }
+          };
+
+          var mousemove = function (event) {
+            var
+                left = Slider.getLeftPosition(event),
+                top = Slider.getTopPosition(event),
+                slider = Slider.getSlider();
+
+            Slider.setKnob(top, left);
+
+            if (slider.callLeft) {
+              pickerColor[slider.callLeft].call(pickerColor, left / 100);
+            }
+            if (slider.callTop) {
+              pickerColor[slider.callTop].call(pickerColor, top / 100);
+            }
+            previewColor();
+            var newColor = pickerColor[thisFormat]();
+            elem.val(newColor);
+            if(ngModel) {
+              $scope.$apply(ngModel.$setViewValue(newColor));
+            }
+            if (withInput) {
+              pickerColorInput.val(newColor);
+            }
+            return false;
+          };
+
+          var mouseup = function () {
+            emitEvent('colorpicker-selected');
+            $document.off('mousemove', mousemove);
+            $document.off('mouseup', mouseup);
+          };
+
+          var update = function (omitInnerInput) {
+            pickerColor.setColor(elem.val());
+            if (withInput && !omitInnerInput) {
+              pickerColorInput.val(elem.val());
+            }
+            pickerColorPointers.eq(0).css({
+              left: pickerColor.value.s * 100 + 'px',
+              top: 100 - pickerColor.value.b * 100 + 'px'
+            });
+            pickerColorPointers.eq(1).css('top', 100 * (1 - pickerColor.value.h) + 'px');
+            pickerColorPointers.eq(2).css('top', 100 * (1 - pickerColor.value.a) + 'px');
+            previewColor();
+          };
+
+          var getColorpickerTemplatePosition = function() {
+            var
+                positionValue,
+                positionOffset = Helper.getOffset(elem[0]);
+
+            if(angular.isDefined(attrs.colorpickerParent)) {
+              positionOffset.left = 0;
+              positionOffset.top = 0;
+            }
+
+            if (position === 'top') {
+              positionValue =  {
+                'top': positionOffset.top - 147,
+                'left': positionOffset.left
+              };
+            } else if (position === 'right') {
+              positionValue = {
+                'top': positionOffset.top,
+                'left': positionOffset.left + 126
+              };
+            } else if (position === 'bottom') {
+              positionValue = {
+                'top': positionOffset.top + elem[0].offsetHeight + 2,
+                'left': positionOffset.left
+              };
+            } else if (position === 'left') {
+              positionValue = {
+                'top': positionOffset.top,
+                'left': positionOffset.left - 150
+              };
+            }
+            return {
+              'top': positionValue.top + 'px',
+              'left': positionValue.left + 'px'
+            };
+          };
+
+          var documentMousedownHandler = function() {
+            hideColorpickerTemplate();
+          };
+
+          var showColorpickerTemplate = function() {
+
+            if (!colorpickerTemplate.hasClass('colorpicker-visible')) {
+              update();
+              colorpickerTemplate
+                .addClass('colorpicker-visible')
+                .css(getColorpickerTemplatePosition());
+              emitEvent('colorpicker-shown');
+
+              if (inline === false) {
+                // register global mousedown event to hide the colorpicker
+                $document.on('mousedown', documentMousedownHandler);
+              }
+
+              if (attrs.colorpickerIsOpen) {
+                $scope[attrs.colorpickerIsOpen] = true;
+                if (!$scope.$$phase) {
+                  $scope.$digest(); //trigger the watcher to fire
+                }
+              }
+            }
+
+          };
+
+          if(inline === false) {
+            elem.on('click', showColorpickerTemplate);
+          } else {
+            showColorpickerTemplate();
+          }
+
+          colorpickerTemplate.on('mousedown', function (event) {
+            event.stopPropagation();
+            event.preventDefault();
+          });
+
+          var emitEvent = function(name) {
+            if(ngModel) {
+              $scope.$emit(name, {
+                name: attrs.ngModel,
+                value: ngModel.$modelValue
+              });
+            }
+          };
+
+          var hideColorpickerTemplate = function() {
+            if (colorpickerTemplate.hasClass('colorpicker-visible')) {
+              colorpickerTemplate.removeClass('colorpicker-visible');
+              emitEvent('colorpicker-closed');
+              // unregister the global mousedown event
+              $document.off('mousedown', documentMousedownHandler);
+
+              if (attrs.colorpickerIsOpen) {
+                $scope[attrs.colorpickerIsOpen] = false;
+                if (!$scope.$$phase) {
+                  $scope.$digest(); //trigger the watcher to fire
+                }
+              }
+            }
+          };
+
+          colorpickerTemplate.find('button').on('click', function () {
+            hideColorpickerTemplate();
+          });
+
+          if (attrs.colorpickerIsOpen) {
+            $scope.$watch(attrs.colorpickerIsOpen, function(shouldBeOpen) {
+
+              if (shouldBeOpen === true) {
+                showColorpickerTemplate();
+              } else if (shouldBeOpen === false) {
+                hideColorpickerTemplate();
+              }
+
+            });
+          }
+
+        }
+      };
+    }]);
diff --git a/public/bower_components/angular-bootstrap-colorpicker/colorpicker.css b/public/bower_components/angular-bootstrap-colorpicker/colorpicker.css
new file mode 100644
index 0000000..400162c
--- /dev/null
+++ b/public/bower_components/angular-bootstrap-colorpicker/colorpicker.css
@@ -0,0 +1,169 @@
+.colorpicker-visible,
+.colorpicker-visible .dropdown-menu {
+  display: block !important;
+}
+colorpicker-saturation {
+  display: block;
+  width: 100px;
+  height: 100px;
+  background-image: url("data:image/png;base64,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");
+  cursor: crosshair;
+  float: left;
+}
+colorpicker-saturation i {
+  display: block;
+  height: 7px;
+  width: 7px;
+  border: 1px solid #000;
+  border-radius: 5px;
+  position: absolute;
+  top: 0;
+  left: 0;
+  margin: -4px 0 0 -4px;
+}
+colorpicker-saturation i::after {
+  content: '';
+  display: block;
+  height: 7px;
+  width: 7px;
+  border: 1px solid #fff;
+  border-radius: 5px;
+}
+colorpicker-hue,
+colorpicker-alpha {
+  width: 15px;
+  height: 100px;
+  float: left;
+  cursor: row-resize;
+  margin-left: 4px;
+  margin-bottom: 4px;
+}
+colorpicker-hue i,
+colorpicker-alpha i {
+  display: block;
+  height: 2px;
+  background: #000;
+  border-top: 1px solid #fff;
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  margin-top: -1px;
+}
+colorpicker-hue {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAMAAABw8qpSAAABLFBMVEUA/z8AuP//JAAA/33/3AAA/1ABAv8A/7r/AH7/jgD2AP8A//j/AEHmAP/XAP/HAP+4AP//ALyoAP+aAP+JAP97AP9rAP9cAP9MAP8+AP8tAP8fAP8PAP8ATv//AG7/cAD/vgD/APoAmv//ADH/AKwB/wMA5//4Eg4AL///AOr/UQD/nwAA/27/7AAA/+kAe/8Ayf8A/5sA/zEA/6z/ABEAEP8A/17/MgAA/9n/ACL/gAD/AJ0AXP8Aqv//AMoA/yHqFBb/zAD/AGD/ANsA9//1/wDk/wDV/wDF/wC3/wD/AI2m/wD/FACY/wCI/wB5/wBp/wD/YgBb/wBK/wA8/wAs/wAd/wAN/wAAPv8A/xH/AFAAi///rQAA/8r/+gAA1///QwAAH/8Abf8A/43c/JNGAAAAiUlEQVR4AQXBg2EDAAAAsMy2bds2ttp2+/8PTby79mDLsKJPq/oFPdk24dWXAxsGjRg1ZtykKdNmzJozb8GiJct63WjYl7fiWdOZkk0vOpyr2fVtyKl7FX2uXGjpcuxWDy69KdiRk5WRlpIUFxMVERLw78+vH1Unun1YV3ZkwKM1CYfq7nQK22sD03ITV2Aqp0IAAAAASUVORK5CYII=");
+}
+colorpicker-alpha {
+  display: none;
+}
+colorpicker-alpha,
+.colorpicker-color {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAABkCAMAAACIElGlAAADAFBMVEUAAADT09PT09P////T09P////e3t7q6urT09Px8fHT09P////////T09PT09P////////T09PT09P////////////T09PT09P////////////T09P////T09PT09PT09P////T09PT09P////////////////T09P////T09PT09P////T09PT09PT09PT09PT09PT09P////T09P////T09PT09P////////////T09P////T09P////////////T09PT09P////T09P////////////////////T09P////////T09PT09P////////////////////////T09PT09P////////////////////////T09PT09P////T09PT09P////////T09P////////////T09P////////T09P////T09P////T09P////T09PT09PT09PT09P////T09PT09PT09PT09PT09PT09P////T09P////T09PT09P////////////T09PT09PT09P////T09PT09PT09PT09PT09PT09PT09P////////////////T09PT09P////////////T09P////////T09P////T09PT09PT09P////////T09P////////T09P////T09PT09P////////////////T09PT09PT09PT09P////T09PT09PT09PT09PT09PT09PT09P////T09P////T09PT09PT09PT09PT09P////////////////////////////////////T09P////T09P////T09P////T09PT09P////////////T09P////T09P////T09P////////////T09PT09P////////////////T09PT09P////T09P////T09PT09P////T09P////T09PT09P////T09PT09PT09PT09P////T09PT09P////////////T09PT09P////T09P////////T09MQsm1FAAABAHRSTlMAgJN8/vcDAfcCnJyGaZmZlomGk4yJOmM/eTxs8wY0YDFC7HNdLx18n5/7aUvzCcW9+qKiK8P0ZiltRwfdw/n8Px3WduJjItj78ss5PDHUNELbwP5wplA2FglEVwvkqNarCs4Z7b2sDLgQ0xNdyLrr0eLLUeW1Vs5TWQLwjPI3ZvQGdvxFyFrAeevaLCLvGd0kpRskGyf4qK605xKvFrGyDRHnBYMEkJaDkIBvB/gpH99O6CrbIC4nH3Lg2SXp4A7Qul/GDEgPSlMQ6LjqFU0SjyCCj5V/gnBN7xglL3O70WBU7gjFFEfft0sPTo1ndRipwXr2yRemWRVENq+ytbGuxGaWGQAAAnpJREFUeNpNxmdcDHAAxvEHOWXvmXX23ntv2XvvMg/Z44x0KaRBSnfcKSqlnYZKp1QqGpT20KZh783/eePj+3vzw3/q/AM9iURPTy6XS+RwcXNzcZMQTE1dTE3bE7y9S0u9xxD600rCGtpI2ErOsbGxzoiMrIqscnaOi4vDdnp4XYSrguwxQSb7KpMllycnl2MFaTSaTxrY5NrY5BoKb2BnZ2doZ29vb2OPSdSd4Bcc7OcXGhqamgqrYCsrq+mEiEtC3gUBDg55Dg53IkQYSYG+gb6+GEqB5wV0o5D8/JAQdKK5hA40n3BS+L6c0JJmE+ZQW8JEak1YQJ0Jq+jbaQEPnotGE+IrK+Pj+xKqU6pTUrIDAgKysZ+WEY5QQkJxcQIO0WrCUbL4YmFhgZ3UlVAUHR1d1JEwjVoRRpDJKxMTE/ShBoRR1I6whLyyvLyyUFAQFhbWhTCFFArFawXOCu/bEHpQLYKnZ0aGZw2CR1qah0dmpqurK+pTU0ILakJoTi+PC7j5RHTrqQg1qRkh3T3d3b0xoSE1ItSleoSe1IswmIYQPl8UlhLWkaOj41tHbKENBLX6j1qt/KFUKnFN+Onk9NvJCQdJpfqlUqGiIjExcRthN91/JsJmGkhYRO/OCBhHwwgxMWUxZQMIu8j8o7m5OfbRLMJh2kTYQ1FRhYVR2EHzCOtpMmEG3SUsJEvLoKAg2Prb2tqOJYSH+/uH33shwlTaS1hLBwhX6AYX2tuiRwStVntOa5yUZJwEqbREKjUi5Bjl5BhZW1uXWOMYGRBOnNDX1zfoxz1FwwkfSJfgo6vr41P7soBBNJ7Qm2YSzHTMzMwmEHRoMf0Fm5mYOUrzNBYAAAAASUVORK5CYII=");
+}
+.colorpicker {
+  top: 0;
+  left: 0;
+  z-index: 9999;
+  display: none;
+}
+.colorpicker colorpicker-hue,
+.colorpicker colorpicker-alpha,
+.colorpicker colorpicker-saturation {
+  position: relative;
+}
+.colorpicker input {
+  width: 100px;
+  font-size: 11px;
+  color: #000;
+  background-color: #fff;
+}
+.colorpicker.alpha {
+  min-width: 140px;
+}
+.colorpicker.alpha colorpicker-alpha {
+  display: block;
+}
+.colorpicker.dropdown {
+  position: absolute;
+}
+.colorpicker.colorpicker-fixed-position {
+  position: fixed;
+}
+.colorpicker .dropdown-menu::after,
+.colorpicker .dropdown-menu::before {
+  content: '';
+  display: inline-block;
+  position: absolute;
+}
+.colorpicker .dropdown-menu::after {
+  clear: both;
+  border: 6px solid transparent;
+  top: -5px;
+  left: 7px;
+}
+.colorpicker .dropdown-menu::before {
+  border: 7px solid transparent;
+  top: -6px;
+  left: 6px;
+}
+.colorpicker .dropdown-menu {
+  position: static;
+  top: 0;
+  left: 0;
+  min-width: 129px;
+  padding: 4px;
+  margin-top: 0;
+}
+.colorpicker-position-top .dropdown-menu::after {
+  border-top: 6px solid #fff;
+  border-bottom: 0;
+  top: auto;
+  bottom: -5px;
+}
+.colorpicker-position-top .dropdown-menu::before {
+  border-top: 7px solid rgba(0, 0, 0, 0.2);
+  border-bottom: 0;
+  top: auto;
+  bottom: -6px;
+}
+.colorpicker-position-right .dropdown-menu::after {
+  border-right: 6px solid #fff;
+  border-left: 0;
+  top: 11px;
+  left: -5px;
+}
+.colorpicker-position-right .dropdown-menu::before {
+  border-right: 7px solid rgba(0, 0, 0, 0.2);
+  border-left: 0;
+  top: 10px;
+  left: -6px;
+}
+.colorpicker-position-bottom .dropdown-menu::after {
+  border-bottom: 6px solid #fff;
+  border-top: 0;
+}
+.colorpicker-position-bottom .dropdown-menu::before {
+  border-bottom: 7px solid rgba(0, 0, 0, 0.2);
+  border-top: 0;
+}
+.colorpicker-position-left .dropdown-menu::after {
+  border-left: 6px solid #fff;
+  border-right: 0;
+  top: 11px;
+  left: auto;
+  right: -5px;
+}
+.colorpicker-position-left .dropdown-menu::before {
+  border-left: 7px solid rgba(0, 0, 0, 0.2);
+  border-right: 0;
+  top: 10px;
+  left: auto;
+  right: -6px;
+}
+colorpicker-preview {
+  display: block;
+  height: 10px;
+  margin: 5px 0 3px 0;
+  clear: both;
+  background-position: 0 100%;
+}
diff --git a/public/bower_components/angular-bootstrap-contextmenu/contextMenu.js b/public/bower_components/angular-bootstrap-contextmenu/contextMenu.js
new file mode 100644
index 0000000..9ff195b
--- /dev/null
+++ b/public/bower_components/angular-bootstrap-contextmenu/contextMenu.js
@@ -0,0 +1,89 @@
+angular.module('ui.bootstrap.contextMenu', [])
+
+.directive('contextMenu', ["$parse", function ($parse) {
+    var renderContextMenu = function ($scope, event, options, model) {
+        if (!$) { var $ = angular.element; }
+        $(event.currentTarget).addClass('context');
+        var $contextMenu = $('<div>');
+        $contextMenu.addClass('dropdown clearfix');
+        var $ul = $('<ul>');
+        $ul.addClass('dropdown-menu');
+        $ul.attr({ 'role': 'menu' });
+        $ul.css({
+            display: 'block',
+            position: 'absolute',
+            left: event.pageX + 'px',
+            top: event.pageY + 'px'
+        });
+        angular.forEach(options, function (item, i) {
+            var $li = $('<li>');
+            if (item === null) {
+                $li.addClass('divider');
+            } else {
+                var $a = $('<a>');
+                $a.attr({ tabindex: '-1', href: '#' });
+                var text = typeof item[0] == 'string' ? item[0] : item[0].call($scope, $scope, event, model);
+                $a.text(text);
+                $li.append($a);
+                var enabled = angular.isDefined(item[2]) ? item[2].call($scope, $scope, event, text, model) : true;
+                if (enabled) {
+                    $li.on('click', function ($event) {
+                        $event.preventDefault();
+                        $scope.$apply(function () {
+                            $(event.currentTarget).removeClass('context');
+                            $contextMenu.remove();
+                            item[1].call($scope, $scope, event, model);
+                        });
+                    });
+                } else {
+                    $li.on('click', function ($event) {
+                        $event.preventDefault();
+                    });
+                    $li.addClass('disabled');
+                }
+            }
+            $ul.append($li);
+        });
+        $contextMenu.append($ul);
+        var height = Math.max(
+            document.body.scrollHeight, document.documentElement.scrollHeight,
+            document.body.offsetHeight, document.documentElement.offsetHeight,
+            document.body.clientHeight, document.documentElement.clientHeight
+        );
+        $contextMenu.css({
+            width: '100%',
+            height: height + 'px',
+            position: 'absolute',
+            top: 0,
+            left: 0,
+            zIndex: 9999
+        });
+        $(document).find('body').append($contextMenu);
+        $contextMenu.on("mousedown", function (e) {
+            if ($(e.target).hasClass('dropdown')) {
+                $(event.currentTarget).removeClass('context');
+                $contextMenu.remove();
+            }
+        }).on('contextmenu', function (event) {
+            $(event.currentTarget).removeClass('context');
+            event.preventDefault();
+            $contextMenu.remove();
+        });
+    };
+    return function ($scope, element, attrs) {
+        element.on('contextmenu', function (event) {
+            event.stopPropagation();
+            $scope.$apply(function () {
+                event.preventDefault();
+                var options = $scope.$eval(attrs.contextMenu);
+                var model = $scope.$eval(attrs.model);
+                if (options instanceof Array) {
+                    if (options.length === 0) { return; }
+                    renderContextMenu($scope, event, options, model);
+                } else {
+                    throw '"' + attrs.contextMenu + '" not an array';
+                }
+            });
+        });
+    };
+}]);
diff --git a/public/bower_components/angular-bootstrap-switch/angular-bootstrap-switch.js b/public/bower_components/angular-bootstrap-switch/angular-bootstrap-switch.js
new file mode 100644
index 0000000..e1532c6
--- /dev/null
+++ b/public/bower_components/angular-bootstrap-switch/angular-bootstrap-switch.js
@@ -0,0 +1,252 @@
+/**
+ * angular-bootstrap-switch
+ * @version v0.4.1 - 2015-06-15
+ * @author Francesco Pontillo ([email-masked])
+ * @link https://github.com/frapontillo/angular-bootstrap-switch
+ * @license Apache License 2.0(http://www.apache.org/licenses/LICENSE-2.0.html)
+**/
+
+(function() {
+'use strict';
+
+// Source: common/module.js
+angular.module('frapontillo.bootstrap-switch', []);
+
+// Source: dist/.temp/directives/bsSwitch.js
+angular.module('frapontillo.bootstrap-switch').directive('bsSwitch', [
+  '$parse',
+  '$timeout',
+  function ($parse, $timeout) {
+    return {
+      restrict: 'A',
+      require: 'ngModel',
+      link: function link(scope, element, attrs, controller) {
+        var isInit = false;
+        /**
+         * Return the true value for this specific checkbox.
+         * @returns {Object} representing the true view value; if undefined, returns true.
+         */
+        var getTrueValue = function () {
+          if (attrs.type === 'radio') {
+            return attrs.value || $parse(attrs.ngValue)(scope) || true;
+          }
+          var trueValue = $parse(attrs.ngTrueValue)(scope);
+          if (angular.isUndefined(trueValue)) {
+            trueValue = true;
+          }
+          return trueValue;
+        };
+        /**
+         * Get a boolean value from a boolean-like string, evaluating it on the current scope.
+         * @param value The input object
+         * @returns {boolean} A boolean value
+         */
+        var getBooleanFromString = function (value) {
+          return scope.$eval(value) === true;
+        };
+        /**
+         * Get a boolean value from a boolean-like string, defaulting to true if undefined.
+         * @param value The input object
+         * @returns {boolean} A boolean value
+         */
+        var getBooleanFromStringDefTrue = function (value) {
+          return value === true || value === 'true' || !value;
+        };
+        /**
+         * Returns the value if it is truthy, or undefined.
+         *
+         * @param value The value to check.
+         * @returns the original value if it is truthy, {@link undefined} otherwise.
+         */
+        var getValueOrUndefined = function (value) {
+          return value ? value : undefined;
+        };
+        /**
+         * Get the value of the angular-bound attribute, given its name.
+         * The returned value may or may not equal the attribute value, as it may be transformed by a function.
+         *
+         * @param attrName  The angular-bound attribute name to get the value for
+         * @returns {*}     The attribute value
+         */
+        var getSwitchAttrValue = function (attrName) {
+          var map = {
+              'switchRadioOff': getBooleanFromStringDefTrue,
+              'switchActive': function (value) {
+                return !getBooleanFromStringDefTrue(value);
+              },
+              'switchAnimate': getBooleanFromStringDefTrue,
+              'switchLabel': function (value) {
+                return value ? value : '&nbsp;';
+              },
+              'switchIcon': function (value) {
+                if (value) {
+                  return '<span class=\'' + value + '\'></span>';
+                }
+              },
+              'switchWrapper': function (value) {
+                return value || 'wrapper';
+              },
+              'switchInverse': getBooleanFromString,
+              'switchReadonly': getBooleanFromString
+            };
+          var transFn = map[attrName] || getValueOrUndefined;
+          return transFn(attrs[attrName]);
+        };
+        /**
+         * Set a bootstrapSwitch parameter according to the angular-bound attribute.
+         * The parameter will be changed only if the switch has already been initialized
+         * (to avoid creating it before the model is ready).
+         *
+         * @param element   The switch to apply the parameter modification to
+         * @param attr      The name of the switch parameter
+         * @param modelAttr The name of the angular-bound parameter
+         */
+        var setSwitchParamMaybe = function (element, attr, modelAttr) {
+          if (!isInit) {
+            return;
+          }
+          var newValue = getSwitchAttrValue(modelAttr);
+          element.bootstrapSwitch(attr, newValue);
+        };
+        var setActive = function () {
+          setSwitchParamMaybe(element, 'disabled', 'switchActive');
+        };
+        /**
+         * If the directive has not been initialized yet, do so.
+         */
+        var initMaybe = function () {
+          // if it's the first initialization
+          if (!isInit) {
+            var viewValue = controller.$modelValue === getTrueValue();
+            isInit = !isInit;
+            // Bootstrap the switch plugin
+            element.bootstrapSwitch({
+              radioAllOff: getSwitchAttrValue('switchRadioOff'),
+              disabled: getSwitchAttrValue('switchActive'),
+              state: viewValue,
+              onText: getSwitchAttrValue('switchOnText'),
+              offText: getSwitchAttrValue('switchOffText'),
+              onColor: getSwitchAttrValue('switchOnColor'),
+              offColor: getSwitchAttrValue('switchOffColor'),
+              animate: getSwitchAttrValue('switchAnimate'),
+              size: getSwitchAttrValue('switchSize'),
+              labelText: attrs.switchLabel ? getSwitchAttrValue('switchLabel') : getSwitchAttrValue('switchIcon'),
+              wrapperClass: getSwitchAttrValue('switchWrapper'),
+              handleWidth: getSwitchAttrValue('switchHandleWidth'),
+              labelWidth: getSwitchAttrValue('switchLabelWidth'),
+              inverse: getSwitchAttrValue('switchInverse'),
+              readonly: getSwitchAttrValue('switchReadonly')
+            });
+            if (attrs.type === 'radio') {
+              controller.$setViewValue(controller.$modelValue);
+            } else {
+              controller.$setViewValue(viewValue);
+            }
+          }
+        };
+        /**
+         * Listen to model changes.
+         */
+        var listenToModel = function () {
+          attrs.$observe('switchActive', function (newValue) {
+            var active = getBooleanFromStringDefTrue(newValue);
+            // if we are disabling the switch, delay the deactivation so that the toggle can be switched
+            if (!active) {
+              $timeout(function () {
+                setActive(active);
+              });
+            } else {
+              // if we are enabling the switch, set active right away
+              setActive(active);
+            }
+          });
+          function modelValue() {
+            return controller.$modelValue;
+          }
+          // When the model changes
+          scope.$watch(modelValue, function (newValue) {
+            initMaybe();
+            if (newValue !== undefined) {
+              element.bootstrapSwitch('state', newValue === getTrueValue(), false);
+            } else {
+              element.bootstrapSwitch('toggleIndeterminate', true, false);
+            }
+          }, true);
+          // angular attribute to switch property bindings
+          var bindings = {
+              'switchRadioOff': 'radioAllOff',
+              'switchOnText': 'onText',
+              'switchOffText': 'offText',
+              'switchOnColor': 'onColor',
+              'switchOffColor': 'offColor',
+              'switchAnimate': 'animate',
+              'switchSize': 'size',
+              'switchLabel': 'labelText',
+              'switchIcon': 'labelText',
+              'switchWrapper': 'wrapperClass',
+              'switchHandleWidth': 'handleWidth',
+              'switchLabelWidth': 'labelWidth',
+              'switchInverse': 'inverse',
+              'switchReadonly': 'readonly'
+            };
+          var observeProp = function (prop, bindings) {
+            return function () {
+              attrs.$observe(prop, function () {
+                setSwitchParamMaybe(element, bindings[prop], prop);
+              });
+            };
+          };
+          // for every angular-bound attribute, observe it and trigger the appropriate switch function
+          for (var prop in bindings) {
+            attrs.$observe(prop, observeProp(prop, bindings));
+          }
+        };
+        /**
+         * Listen to view changes.
+         */
+        var listenToView = function () {
+          if (attrs.type === 'radio') {
+            // when the switch is clicked
+            element.on('change.bootstrapSwitch', function (e) {
+              // discard not real change events
+              if (controller.$modelValue === controller.$viewValue && e.target.checked !== $(e.target).bootstrapSwitch('state')) {
+                // $setViewValue --> $viewValue --> $parsers --> $modelValue
+                // if the switch is indeed selected
+                if (e.target.checked) {
+                  // set its value into the view
+                  controller.$setViewValue(getTrueValue());
+                } else if (getTrueValue() === controller.$viewValue) {
+                  // otherwise if it's been deselected, delete the view value
+                  controller.$setViewValue(undefined);
+                }
+              }
+            });
+          } else {
+            // When the checkbox switch is clicked, set its value into the ngModel
+            element.on('switchChange.bootstrapSwitch', function (e) {
+              // $setViewValue --> $viewValue --> $parsers --> $modelValue
+              controller.$setViewValue(e.target.checked);
+            });
+          }
+        };
+        // Listen and respond to view changes
+        listenToView();
+        // Listen and respond to model changes
+        listenToModel();
+        // On destroy, collect ya garbage
+        scope.$on('$destroy', function () {
+          element.bootstrapSwitch('destroy');
+        });
+      }
+    };
+  }
+]).directive('bsSwitch', function () {
+  return {
+    restrict: 'E',
+    require: 'ngModel',
+    template: '<input bs-switch>',
+    replace: true
+  };
+});
+// Source: bsSwitch.suffix
+})();
\ No newline at end of file
diff --git a/public/bower_components/angular-bootstrap/ui-bootstrap-tpls.js b/public/bower_components/angular-bootstrap/ui-bootstrap-tpls.js
new file mode 100644
index 0000000..f72df49
--- /dev/null
+++ b/public/bower_components/angular-bootstrap/ui-bootstrap-tpls.js
@@ -0,0 +1,8503 @@
+/*
+ * angular-ui-bootstrap
+ * http://angular-ui.github.io/bootstrap/
+
+ * Version: 0.14.3 - 2015-10-23
+ * License: MIT
+ */
+angular.module("ui.bootstrap", ["ui.bootstrap.tpls", "ui.bootstrap.collapse","ui.bootstrap.accordion","ui.bootstrap.alert","ui.bootstrap.buttons","ui.bootstrap.carousel","ui.bootstrap.dateparser","ui.bootstrap.position","ui.bootstrap.datepicker","ui.bootstrap.dropdown","ui.bootstrap.stackedMap","ui.bootstrap.modal","ui.bootstrap.pagination","ui.bootstrap.tooltip","ui.bootstrap.popover","ui.bootstrap.progressbar","ui.bootstrap.rating","ui.bootstrap.tabs","ui.bootstrap.timepicker","ui.bootstrap.typeahead"]);
+angular.module("ui.bootstrap.tpls", ["template/accordion/accordion-group.html","template/accordion/accordion.html","template/alert/alert.html","template/carousel/carousel.html","template/carousel/slide.html","template/datepicker/datepicker.html","template/datepicker/day.html","template/datepicker/month.html","template/datepicker/popup.html","template/datepicker/year.html","template/modal/backdrop.html","template/modal/window.html","template/pagination/pager.html","template/pagination/pagination.html","template/tooltip/tooltip-html-popup.html","template/tooltip/tooltip-popup.html","template/tooltip/tooltip-template-popup.html","template/popover/popover-html.html","template/popover/popover-template.html","template/popover/popover.html","template/progressbar/bar.html","template/progressbar/progress.html","template/progressbar/progressbar.html","template/rating/rating.html","template/tabs/tab.html","template/tabs/tabset.html","template/timepicker/timepicker.html","template/typeahead/typeahead-match.html","template/typeahead/typeahead-popup.html"]);
+angular.module('ui.bootstrap.collapse', [])
+
+  .directive('uibCollapse', ['$animate', '$injector', function($animate, $injector) {
+    var $animateCss = $injector.has('$animateCss') ? $injector.get('$animateCss') : null;
+    return {
+      link: function(scope, element, attrs) {
+        function expand() {
+          element.removeClass('collapse')
+            .addClass('collapsing')
+            .attr('aria-expanded', true)
+            .attr('aria-hidden', false);
+
+          if ($animateCss) {
+            $animateCss(element, {
+              addClass: 'in',
+              easing: 'ease',
+              to: { height: element[0].scrollHeight + 'px' }
+            }).start().finally(expandDone);
+          } else {
+            $animate.addClass(element, 'in', {
+              to: { height: element[0].scrollHeight + 'px' }
+            }).then(expandDone);
+          }
+        }
+
+        function expandDone() {
+          element.removeClass('collapsing')
+            .addClass('collapse')
+            .css({height: 'auto'});
+        }
+
+        function collapse() {
+          if (!element.hasClass('collapse') && !element.hasClass('in')) {
+            return collapseDone();
+          }
+
+          element
+            // IMPORTANT: The height must be set before adding "collapsing" class.
+            // Otherwise, the browser attempts to animate from height 0 (in
+            // collapsing class) to the given height here.
+            .css({height: element[0].scrollHeight + 'px'})
+            // initially all panel collapse have the collapse class, this removal
+            // prevents the animation from jumping to collapsed state
+            .removeClass('collapse')
+            .addClass('collapsing')
+            .attr('aria-expanded', false)
+            .attr('aria-hidden', true);
+
+          if ($animateCss) {
+            $animateCss(element, {
+              removeClass: 'in',
+              to: {height: '0'}
+            }).start().finally(collapseDone);
+          } else {
+            $animate.removeClass(element, 'in', {
+              to: {height: '0'}
+            }).then(collapseDone);
+          }
+        }
+
+        function collapseDone() {
+          element.css({height: '0'}); // Required so that collapse works when animation is disabled
+          element.removeClass('collapsing')
+            .addClass('collapse');
+        }
+
+        scope.$watch(attrs.uibCollapse, function(shouldCollapse) {
+          if (shouldCollapse) {
+            collapse();
+          } else {
+            expand();
+          }
+        });
+      }
+    };
+  }]);
+
+/* Deprecated collapse below */
+
+angular.module('ui.bootstrap.collapse')
+
+  .value('$collapseSuppressWarning', false)
+
+  .directive('collapse', ['$animate', '$injector', '$log', '$collapseSuppressWarning', function($animate, $injector, $log, $collapseSuppressWarning) {
+    var $animateCss = $injector.has('$animateCss') ? $injector.get('$animateCss') : null;
+    return {
+      link: function(scope, element, attrs) {
+        if (!$collapseSuppressWarning) {
+          $log.warn('collapse is now deprecated. Use uib-collapse instead.');
+        }
+
+        function expand() {
+          element.removeClass('collapse')
+            .addClass('collapsing')
+            .attr('aria-expanded', true)
+            .attr('aria-hidden', false);
+
+          if ($animateCss) {
+            $animateCss(element, {
+              easing: 'ease',
+              to: { height: element[0].scrollHeight + 'px' }
+            }).start().done(expandDone);
+          } else {
+            $animate.animate(element, {}, {
+              height: element[0].scrollHeight + 'px'
+            }).then(expandDone);
+          }
+        }
+
+        function expandDone() {
+          element.removeClass('collapsing')
+            .addClass('collapse in')
+            .css({height: 'auto'});
+        }
+
+        function collapse() {
+          if (!element.hasClass('collapse') && !element.hasClass('in')) {
+            return collapseDone();
+          }
+
+          element
+            // IMPORTANT: The height must be set before adding "collapsing" class.
+            // Otherwise, the browser attempts to animate from height 0 (in
+            // collapsing class) to the given height here.
+            .css({height: element[0].scrollHeight + 'px'})
+            // initially all panel collapse have the collapse class, this removal
+            // prevents the animation from jumping to collapsed state
+            .removeClass('collapse in')
+            .addClass('collapsing')
+            .attr('aria-expanded', false)
+            .attr('aria-hidden', true);
+
+          if ($animateCss) {
+            $animateCss(element, {
+              to: {height: '0'}
+            }).start().done(collapseDone);
+          } else {
+            $animate.animate(element, {}, {
+              height: '0'
+            }).then(collapseDone);
+          }
+        }
+
+        function collapseDone() {
+          element.css({height: '0'}); // Required so that collapse works when animation is disabled
+          element.removeClass('collapsing')
+            .addClass('collapse');
+        }
+
+        scope.$watch(attrs.collapse, function(shouldCollapse) {
+          if (shouldCollapse) {
+            collapse();
+          } else {
+            expand();
+          }
+        });
+      }
+    };
+  }]);
+
+angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse'])
+
+.constant('uibAccordionConfig', {
+  closeOthers: true
+})
+
+.controller('UibAccordionController', ['$scope', '$attrs', 'uibAccordionConfig', function($scope, $attrs, accordionConfig) {
+  // This array keeps track of the accordion groups
+  this.groups = [];
+
+  // Ensure that all the groups in this accordion are closed, unless close-others explicitly says not to
+  this.closeOthers = function(openGroup) {
+    var closeOthers = angular.isDefined($attrs.closeOthers) ?
+      $scope.$eval($attrs.closeOthers) : accordionConfig.closeOthers;
+    if (closeOthers) {
+      angular.forEach(this.groups, function(group) {
+        if (group !== openGroup) {
+          group.isOpen = false;
+        }
+      });
+    }
+  };
+
+  // This is called from the accordion-group directive to add itself to the accordion
+  this.addGroup = function(groupScope) {
+    var that = this;
+    this.groups.push(groupScope);
+
+    groupScope.$on('$destroy', function(event) {
+      that.removeGroup(groupScope);
+    });
+  };
+
+  // This is called from the accordion-group directive when to remove itself
+  this.removeGroup = function(group) {
+    var index = this.groups.indexOf(group);
+    if (index !== -1) {
+      this.groups.splice(index, 1);
+    }
+  };
+
+}])
+
+// The accordion directive simply sets up the directive controller
+// and adds an accordion CSS class to itself element.
+.directive('uibAccordion', function() {
+  return {
+    controller: 'UibAccordionController',
+    controllerAs: 'accordion',
+    transclude: true,
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/accordion/accordion.html';
+    }
+  };
+})
+
+// The accordion-group directive indicates a block of html that will expand and collapse in an accordion
+.directive('uibAccordionGroup', function() {
+  return {
+    require: '^uibAccordion',         // We need this directive to be inside an accordion
+    transclude: true,              // It transcludes the contents of the directive into the template
+    replace: true,                // The element containing the directive will be replaced with the template
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/accordion/accordion-group.html';
+    },
+    scope: {
+      heading: '@',               // Interpolate the heading attribute onto this scope
+      isOpen: '=?',
+      isDisabled: '=?'
+    },
+    controller: function() {
+      this.setHeading = function(element) {
+        this.heading = element;
+      };
+    },
+    link: function(scope, element, attrs, accordionCtrl) {
+      accordionCtrl.addGroup(scope);
+
+      scope.openClass = attrs.openClass || 'panel-open';
+      scope.panelClass = attrs.panelClass;
+      scope.$watch('isOpen', function(value) {
+        element.toggleClass(scope.openClass, !!value);
+        if (value) {
+          accordionCtrl.closeOthers(scope);
+        }
+      });
+
+      scope.toggleOpen = function($event) {
+        if (!scope.isDisabled) {
+          if (!$event || $event.which === 32) {
+            scope.isOpen = !scope.isOpen;
+          }
+        }
+      };
+    }
+  };
+})
+
+// Use accordion-heading below an accordion-group to provide a heading containing HTML
+.directive('uibAccordionHeading', function() {
+  return {
+    transclude: true,   // Grab the contents to be used as the heading
+    template: '',       // In effect remove this element!
+    replace: true,
+    require: '^uibAccordionGroup',
+    link: function(scope, element, attrs, accordionGroupCtrl, transclude) {
+      // Pass the heading to the accordion-group controller
+      // so that it can be transcluded into the right place in the template
+      // [The second parameter to transclude causes the elements to be cloned so that they work in ng-repeat]
+      accordionGroupCtrl.setHeading(transclude(scope, angular.noop));
+    }
+  };
+})
+
+// Use in the accordion-group template to indicate where you want the heading to be transcluded
+// You must provide the property on the accordion-group controller that will hold the transcluded element
+.directive('uibAccordionTransclude', function() {
+  return {
+    require: ['?^uibAccordionGroup', '?^accordionGroup'],
+    link: function(scope, element, attrs, controller) {
+      controller = controller[0] ? controller[0] : controller[1]; // Delete after we remove deprecation
+      scope.$watch(function() { return controller[attrs.uibAccordionTransclude]; }, function(heading) {
+        if (heading) {
+          element.find('span').html('');
+          element.find('span').append(heading);
+        }
+      });
+    }
+  };
+});
+
+/* Deprecated accordion below */
+
+angular.module('ui.bootstrap.accordion')
+
+  .value('$accordionSuppressWarning', false)
+
+  .controller('AccordionController', ['$scope', '$attrs', '$controller', '$log', '$accordionSuppressWarning', function($scope, $attrs, $controller, $log, $accordionSuppressWarning) {
+    if (!$accordionSuppressWarning) {
+      $log.warn('AccordionController is now deprecated. Use UibAccordionController instead.');
+    }
+
+    angular.extend(this, $controller('UibAccordionController', {
+      $scope: $scope,
+      $attrs: $attrs
+    }));
+  }])
+
+  .directive('accordion', ['$log', '$accordionSuppressWarning', function($log, $accordionSuppressWarning) {
+    return {
+      restrict: 'EA',
+      controller: 'AccordionController',
+      controllerAs: 'accordion',
+      transclude: true,
+      replace: false,
+      templateUrl: function(element, attrs) {
+        return attrs.templateUrl || 'template/accordion/accordion.html';
+      },
+      link: function() {
+        if (!$accordionSuppressWarning) {
+          $log.warn('accordion is now deprecated. Use uib-accordion instead.');
+        }
+      }
+    };
+  }])
+
+  .directive('accordionGroup', ['$log', '$accordionSuppressWarning', function($log, $accordionSuppressWarning) {
+    return {
+      require: '^accordion',         // We need this directive to be inside an accordion
+      restrict: 'EA',
+      transclude: true,              // It transcludes the contents of the directive into the template
+      replace: true,                // The element containing the directive will be replaced with the template
+      templateUrl: function(element, attrs) {
+        return attrs.templateUrl || 'template/accordion/accordion-group.html';
+      },
+      scope: {
+        heading: '@',               // Interpolate the heading attribute onto this scope
+        isOpen: '=?',
+        isDisabled: '=?'
+      },
+      controller: function() {
+        this.setHeading = function(element) {
+          this.heading = element;
+        };
+      },
+      link: function(scope, element, attrs, accordionCtrl) {
+        if (!$accordionSuppressWarning) {
+          $log.warn('accordion-group is now deprecated. Use uib-accordion-group instead.');
+        }
+
+        accordionCtrl.addGroup(scope);
+
+        scope.openClass = attrs.openClass || 'panel-open';
+        scope.panelClass = attrs.panelClass;
+        scope.$watch('isOpen', function(value) {
+          element.toggleClass(scope.openClass, !!value);
+          if (value) {
+            accordionCtrl.closeOthers(scope);
+          }
+        });
+
+        scope.toggleOpen = function($event) {
+          if (!scope.isDisabled) {
+            if (!$event || $event.which === 32) {
+              scope.isOpen = !scope.isOpen;
+            }
+          }
+        };
+      }
+    };
+  }])
+
+  .directive('accordionHeading', ['$log', '$accordionSuppressWarning', function($log, $accordionSuppressWarning) {
+    return {
+      restrict: 'EA',
+      transclude: true,   // Grab the contents to be used as the heading
+      template: '',       // In effect remove this element!
+      replace: true,
+      require: '^accordionGroup',
+      link: function(scope, element, attr, accordionGroupCtrl, transclude) {
+        if (!$accordionSuppressWarning) {
+          $log.warn('accordion-heading is now deprecated. Use uib-accordion-heading instead.');
+        }
+        // Pass the heading to the accordion-group controller
+        // so that it can be transcluded into the right place in the template
+        // [The second parameter to transclude causes the elements to be cloned so that they work in ng-repeat]
+        accordionGroupCtrl.setHeading(transclude(scope, angular.noop));
+      }
+    };
+  }])
+
+  .directive('accordionTransclude', ['$log', '$accordionSuppressWarning', function($log, $accordionSuppressWarning) {
+    return {
+      require: '^accordionGroup',
+      link: function(scope, element, attr, controller) {
+        if (!$accordionSuppressWarning) {
+          $log.warn('accordion-transclude is now deprecated. Use uib-accordion-transclude instead.');
+        }
+
+        scope.$watch(function() { return controller[attr.accordionTransclude]; }, function(heading) {
+          if (heading) {
+            element.find('span').html('');
+            element.find('span').append(heading);
+          }
+        });
+      }
+    };
+  }]);
+
+
+angular.module('ui.bootstrap.alert', [])
+
+.controller('UibAlertController', ['$scope', '$attrs', '$interpolate', '$timeout', function($scope, $attrs, $interpolate, $timeout) {
+  $scope.closeable = !!$attrs.close;
+
+  var dismissOnTimeout = angular.isDefined($attrs.dismissOnTimeout) ?
+    $interpolate($attrs.dismissOnTimeout)($scope.$parent) : null;
+
+  if (dismissOnTimeout) {
+    $timeout(function() {
+      $scope.close();
+    }, parseInt(dismissOnTimeout, 10));
+  }
+}])
+
+.directive('uibAlert', function() {
+  return {
+    controller: 'UibAlertController',
+    controllerAs: 'alert',
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/alert/alert.html';
+    },
+    transclude: true,
+    replace: true,
+    scope: {
+      type: '@',
+      close: '&'
+    }
+  };
+});
+
+/* Deprecated alert below */
+
+angular.module('ui.bootstrap.alert')
+
+  .value('$alertSuppressWarning', false)
+
+  .controller('AlertController', ['$scope', '$attrs', '$controller', '$log', '$alertSuppressWarning', function($scope, $attrs, $controller, $log, $alertSuppressWarning) {
+    if (!$alertSuppressWarning) {
+      $log.warn('AlertController is now deprecated. Use UibAlertController instead.');
+    }
+
+    angular.extend(this, $controller('UibAlertController', {
+      $scope: $scope,
+      $attrs: $attrs
+    }));
+  }])
+
+  .directive('alert', ['$log', '$alertSuppressWarning', function($log, $alertSuppressWarning) {
+    return {
+      controller: 'AlertController',
+      controllerAs: 'alert',
+      templateUrl: function(element, attrs) {
+        return attrs.templateUrl || 'template/alert/alert.html';
+      },
+      transclude: true,
+      replace: true,
+      scope: {
+        type: '@',
+        close: '&'
+      },
+      link: function() {
+        if (!$alertSuppressWarning) {
+          $log.warn('alert is now deprecated. Use uib-alert instead.');
+        }
+      }
+    };
+  }]);
+
+angular.module('ui.bootstrap.buttons', [])
+
+.constant('uibButtonConfig', {
+  activeClass: 'active',
+  toggleEvent: 'click'
+})
+
+.controller('UibButtonsController', ['uibButtonConfig', function(buttonConfig) {
+  this.activeClass = buttonConfig.activeClass || 'active';
+  this.toggleEvent = buttonConfig.toggleEvent || 'click';
+}])
+
+.directive('uibBtnRadio', function() {
+  return {
+    require: ['uibBtnRadio', 'ngModel'],
+    controller: 'UibButtonsController',
+    controllerAs: 'buttons',
+    link: function(scope, element, attrs, ctrls) {
+      var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+      element.find('input').css({display: 'none'});
+
+      //model -> UI
+      ngModelCtrl.$render = function() {
+        element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.uibBtnRadio)));
+      };
+
+      //ui->model
+      element.on(buttonsCtrl.toggleEvent, function() {
+        if (attrs.disabled) {
+          return;
+        }
+
+        var isActive = element.hasClass(buttonsCtrl.activeClass);
+
+        if (!isActive || angular.isDefined(attrs.uncheckable)) {
+          scope.$apply(function() {
+            ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.uibBtnRadio));
+            ngModelCtrl.$render();
+          });
+        }
+      });
+    }
+  };
+})
+
+.directive('uibBtnCheckbox', function() {
+  return {
+    require: ['uibBtnCheckbox', 'ngModel'],
+    controller: 'UibButtonsController',
+    controllerAs: 'button',
+    link: function(scope, element, attrs, ctrls) {
+      var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+      element.find('input').css({display: 'none'});
+
+      function getTrueValue() {
+        return getCheckboxValue(attrs.btnCheckboxTrue, true);
+      }
+
+      function getFalseValue() {
+        return getCheckboxValue(attrs.btnCheckboxFalse, false);
+      }
+
+      function getCheckboxValue(attribute, defaultValue) {
+        return angular.isDefined(attribute) ? scope.$eval(attribute) : defaultValue;
+      }
+
+      //model -> UI
+      ngModelCtrl.$render = function() {
+        element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue()));
+      };
+
+      //ui->model
+      element.on(buttonsCtrl.toggleEvent, function() {
+        if (attrs.disabled) {
+          return;
+        }
+
+        scope.$apply(function() {
+          ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());
+          ngModelCtrl.$render();
+        });
+      });
+    }
+  };
+});
+
+/* Deprecated buttons below */
+
+angular.module('ui.bootstrap.buttons')
+
+  .value('$buttonsSuppressWarning', false)
+
+  .controller('ButtonsController', ['$controller', '$log', '$buttonsSuppressWarning', function($controller, $log, $buttonsSuppressWarning) {
+    if (!$buttonsSuppressWarning) {
+      $log.warn('ButtonsController is now deprecated. Use UibButtonsController instead.');
+    }
+
+    angular.extend(this, $controller('UibButtonsController'));
+  }])
+
+  .directive('btnRadio', ['$log', '$buttonsSuppressWarning', function($log, $buttonsSuppressWarning) {
+    return {
+      require: ['btnRadio', 'ngModel'],
+      controller: 'ButtonsController',
+      controllerAs: 'buttons',
+      link: function(scope, element, attrs, ctrls) {
+        if (!$buttonsSuppressWarning) {
+          $log.warn('btn-radio is now deprecated. Use uib-btn-radio instead.');
+        }
+
+        var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+        element.find('input').css({display: 'none'});
+
+        //model -> UI
+        ngModelCtrl.$render = function() {
+          element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.btnRadio)));
+        };
+
+        //ui->model
+        element.bind(buttonsCtrl.toggleEvent, function() {
+          if (attrs.disabled) {
+            return;
+          }
+
+          var isActive = element.hasClass(buttonsCtrl.activeClass);
+
+          if (!isActive || angular.isDefined(attrs.uncheckable)) {
+            scope.$apply(function() {
+              ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.btnRadio));
+              ngModelCtrl.$render();
+            });
+          }
+        });
+      }
+    };
+  }])
+
+  .directive('btnCheckbox', ['$document', '$log', '$buttonsSuppressWarning', function($document, $log, $buttonsSuppressWarning) {
+    return {
+      require: ['btnCheckbox', 'ngModel'],
+      controller: 'ButtonsController',
+      controllerAs: 'button',
+      link: function(scope, element, attrs, ctrls) {
+        if (!$buttonsSuppressWarning) {
+          $log.warn('btn-checkbox is now deprecated. Use uib-btn-checkbox instead.');
+        }
+
+        var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+        element.find('input').css({display: 'none'});
+
+        function getTrueValue() {
+          return getCheckboxValue(attrs.btnCheckboxTrue, true);
+        }
+
+        function getFalseValue() {
+          return getCheckboxValue(attrs.btnCheckboxFalse, false);
+        }
+
+        function getCheckboxValue(attributeValue, defaultValue) {
+          var val = scope.$eval(attributeValue);
+          return angular.isDefined(val) ? val : defaultValue;
+        }
+
+        //model -> UI
+        ngModelCtrl.$render = function() {
+          element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue()));
+        };
+
+        //ui->model
+        element.bind(buttonsCtrl.toggleEvent, function() {
+          if (attrs.disabled) {
+            return;
+          }
+
+          scope.$apply(function() {
+            ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());
+            ngModelCtrl.$render();
+          });
+        });
+
+        //accessibility
+        element.on('keypress', function(e) {
+          if (attrs.disabled || e.which !== 32 || $document[0].activeElement !== element[0]) {
+            return;
+          }
+
+          scope.$apply(function() {
+            ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue());
+            ngModelCtrl.$render();
+          });
+        });
+      }
+    };
+  }]);
+
+
+/**
+ * @ngdoc overview
+ * @name ui.bootstrap.carousel
+ *
+ * @description
+ * AngularJS version of an image carousel.
+ *
+ */
+angular.module('ui.bootstrap.carousel', [])
+
+.controller('UibCarouselController', ['$scope', '$element', '$interval', '$animate', function($scope, $element, $interval, $animate) {
+  var self = this,
+    slides = self.slides = $scope.slides = [],
+    NEW_ANIMATE = angular.version.minor >= 4,
+    NO_TRANSITION = 'uib-noTransition',
+    SLIDE_DIRECTION = 'uib-slideDirection',
+    currentIndex = -1,
+    currentInterval, isPlaying;
+  self.currentSlide = null;
+
+  var destroyed = false;
+  /* direction: "prev" or "next" */
+  self.select = $scope.select = function(nextSlide, direction) {
+    var nextIndex = $scope.indexOfSlide(nextSlide);
+    //Decide direction if it's not given
+    if (direction === undefined) {
+      direction = nextIndex > self.getCurrentIndex() ? 'next' : 'prev';
+    }
+    //Prevent this user-triggered transition from occurring if there is already one in progress
+    if (nextSlide && nextSlide !== self.currentSlide && !$scope.$currentTransition) {
+      goNext(nextSlide, nextIndex, direction);
+    }
+  };
+
+  function goNext(slide, index, direction) {
+    // Scope has been destroyed, stop here.
+    if (destroyed) { return; }
+
+    angular.extend(slide, {direction: direction, active: true});
+    angular.extend(self.currentSlide || {}, {direction: direction, active: false});
+    if ($animate.enabled() && !$scope.noTransition && !$scope.$currentTransition &&
+      slide.$element && self.slides.length > 1) {
+      slide.$element.data(SLIDE_DIRECTION, slide.direction);
+      if (self.currentSlide && self.currentSlide.$element) {
+        self.currentSlide.$element.data(SLIDE_DIRECTION, slide.direction);
+      }
+
+      $scope.$currentTransition = true;
+      if (NEW_ANIMATE) {
+        $animate.on('addClass', slide.$element, function(element, phase) {
+          if (phase === 'close') {
+            $scope.$currentTransition = null;
+            $animate.off('addClass', element);
+          }
+        });
+      } else {
+        slide.$element.one('$animate:close', function closeFn() {
+          $scope.$currentTransition = null;
+        });
+      }
+    }
+
+    self.currentSlide = slide;
+    currentIndex = index;
+
+    //every time you change slides, reset the timer
+    restartTimer();
+  }
+
+  $scope.$on('$destroy', function() {
+    destroyed = true;
+  });
+
+  function getSlideByIndex(index) {
+    if (angular.isUndefined(slides[index].index)) {
+      return slides[index];
+    }
+    var i, len = slides.length;
+    for (i = 0; i < slides.length; ++i) {
+      if (slides[i].index == index) {
+        return slides[i];
+      }
+    }
+  }
+
+  self.getCurrentIndex = function() {
+    if (self.currentSlide && angular.isDefined(self.currentSlide.index)) {
+      return +self.currentSlide.index;
+    }
+    return currentIndex;
+  };
+
+  /* Allow outside people to call indexOf on slides array */
+  $scope.indexOfSlide = function(slide) {
+    return angular.isDefined(slide.index) ? +slide.index : slides.indexOf(slide);
+  };
+
+  $scope.next = function() {
+    var newIndex = (self.getCurrentIndex() + 1) % slides.length;
+
+    if (newIndex === 0 && $scope.noWrap()) {
+      $scope.pause();
+      return;
+    }
+
+    return self.select(getSlideByIndex(newIndex), 'next');
+  };
+
+  $scope.prev = function() {
+    var newIndex = self.getCurrentIndex() - 1 < 0 ? slides.length - 1 : self.getCurrentIndex() - 1;
+
+    if ($scope.noWrap() && newIndex === slides.length - 1) {
+      $scope.pause();
+      return;
+    }
+
+    return self.select(getSlideByIndex(newIndex), 'prev');
+  };
+
+  $scope.isActive = function(slide) {
+     return self.currentSlide === slide;
+  };
+
+  $scope.$watch('interval', restartTimer);
+  $scope.$watchCollection('slides', resetTransition);
+  $scope.$on('$destroy', resetTimer);
+
+  function restartTimer() {
+    resetTimer();
+    var interval = +$scope.interval;
+    if (!isNaN(interval) && interval > 0) {
+      currentInterval = $interval(timerFn, interval);
+    }
+  }
+
+  function resetTimer() {
+    if (currentInterval) {
+      $interval.cancel(currentInterval);
+      currentInterval = null;
+    }
+  }
+
+  function timerFn() {
+    var interval = +$scope.interval;
+    if (isPlaying && !isNaN(interval) && interval > 0 && slides.length) {
+      $scope.next();
+    } else {
+      $scope.pause();
+    }
+  }
+
+  function resetTransition(slides) {
+    if (!slides.length) {
+      $scope.$currentTransition = null;
+    }
+  }
+
+  $scope.play = function() {
+    if (!isPlaying) {
+      isPlaying = true;
+      restartTimer();
+    }
+  };
+  $scope.pause = function() {
+    if (!$scope.noPause) {
+      isPlaying = false;
+      resetTimer();
+    }
+  };
+
+  self.addSlide = function(slide, element) {
+    slide.$element = element;
+    slides.push(slide);
+    //if this is the first slide or the slide is set to active, select it
+    if (slides.length === 1 || slide.active) {
+      self.select(slides[slides.length - 1]);
+      if (slides.length === 1) {
+        $scope.play();
+      }
+    } else {
+      slide.active = false;
+    }
+  };
+
+  self.removeSlide = function(slide) {
+    if (angular.isDefined(slide.index)) {
+      slides.sort(function(a, b) {
+        return +a.index > +b.index;
+      });
+    }
+    //get the index of the slide inside the carousel
+    var index = slides.indexOf(slide);
+    slides.splice(index, 1);
+    if (slides.length > 0 && slide.active) {
+      if (index >= slides.length) {
+        self.select(slides[index - 1]);
+      } else {
+        self.select(slides[index]);
+      }
+    } else if (currentIndex > index) {
+      currentIndex--;
+    }
+
+    //clean the currentSlide when no more slide
+    if (slides.length === 0) {
+      self.currentSlide = null;
+    }
+  };
+
+  $scope.$watch('noTransition', function(noTransition) {
+    $element.data(NO_TRANSITION, noTransition);
+  });
+
+}])
+
+/**
+ * @ngdoc directive
+ * @name ui.bootstrap.carousel.directive:carousel
+ * @restrict EA
+ *
+ * @description
+ * Carousel is the outer container for a set of image 'slides' to showcase.
+ *
+ * @param {number=} interval The time, in milliseconds, that it will take the carousel to go to the next slide.
+ * @param {boolean=} noTransition Whether to disable transitions on the carousel.
+ * @param {boolean=} noPause Whether to disable pausing on the carousel (by default, the carousel interval pauses on hover).
+ *
+ * @example
+<example module="ui.bootstrap">
+  <file name="index.html">
+    <uib-carousel>
+      <uib-slide>
+        <img src="http://placekitten.com/150/150" style="margin:auto;">
+        <div class="carousel-caption">
+          <p>Beautiful!</p>
+        </div>
+      </uib-slide>
+      <uib-slide>
+        <img src="http://placekitten.com/100/150" style="margin:auto;">
+        <div class="carousel-caption">
+          <p>D'aww!</p>
+        </div>
+      </uib-slide>
+    </uib-carousel>
+  </file>
+  <file name="demo.css">
+    .carousel-indicators {
+      top: auto;
+      bottom: 15px;
+    }
+  </file>
+</example>
+ */
+.directive('uibCarousel', [function() {
+  return {
+    transclude: true,
+    replace: true,
+    controller: 'UibCarouselController',
+    controllerAs: 'carousel',
+    require: 'carousel',
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/carousel/carousel.html';
+    },
+    scope: {
+      interval: '=',
+      noTransition: '=',
+      noPause: '=',
+      noWrap: '&'
+    }
+  };
+}])
+
+/**
+ * @ngdoc directive
+ * @name ui.bootstrap.carousel.directive:slide
+ * @restrict EA
+ *
+ * @description
+ * Creates a slide inside a {@link ui.bootstrap.carousel.directive:carousel carousel}.  Must be placed as a child of a carousel element.
+ *
+ * @param {boolean=} active Model binding, whether or not this slide is currently active.
+ * @param {number=} index The index of the slide. The slides will be sorted by this parameter.
+ *
+ * @example
+<example module="ui.bootstrap">
+  <file name="index.html">
+<div ng-controller="CarouselDemoCtrl">
+  <uib-carousel>
+    <uib-slide ng-repeat="slide in slides" active="slide.active" index="$index">
+      <img ng-src="{{slide.image}}" style="margin:auto;">
+      <div class="carousel-caption">
+        <h4>Slide {{$index}}</h4>
+        <p>{{slide.text}}</p>
+      </div>
+    </uib-slide>
+  </uib-carousel>
+  Interval, in milliseconds: <input type="number" ng-model="myInterval">
+  <br />Enter a negative number to stop the interval.
+</div>
+  </file>
+  <file name="script.js">
+function CarouselDemoCtrl($scope) {
+  $scope.myInterval = 5000;
+}
+  </file>
+  <file name="demo.css">
+    .carousel-indicators {
+      top: auto;
+      bottom: 15px;
+    }
+  </file>
+</example>
+*/
+
+.directive('uibSlide', function() {
+  return {
+    require: '^uibCarousel',
+    restrict: 'EA',
+    transclude: true,
+    replace: true,
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/carousel/slide.html';
+    },
+    scope: {
+      active: '=?',
+      actual: '=?',
+      index: '=?'
+    },
+    link: function (scope, element, attrs, carouselCtrl) {
+      carouselCtrl.addSlide(scope, element);
+      //when the scope is destroyed then remove the slide from the current slides array
+      scope.$on('$destroy', function() {
+        carouselCtrl.removeSlide(scope);
+      });
+
+      scope.$watch('active', function(active) {
+        if (active) {
+          carouselCtrl.select(scope);
+        }
+      });
+    }
+  };
+})
+
+.animation('.item', [
+         '$injector', '$animate',
+function ($injector, $animate) {
+  var NO_TRANSITION = 'uib-noTransition',
+    SLIDE_DIRECTION = 'uib-slideDirection',
+    $animateCss = null;
+
+  if ($injector.has('$animateCss')) {
+    $animateCss = $injector.get('$animateCss');
+  }
+
+  function removeClass(element, className, callback) {
+    element.removeClass(className);
+    if (callback) {
+      callback();
+    }
+  }
+
+  return {
+    beforeAddClass: function(element, className, done) {
+      // Due to transclusion, noTransition property is on parent's scope
+      if (className == 'active' && element.parent() && element.parent().parent() &&
+          !element.parent().parent().data(NO_TRANSITION)) {
+        var stopped = false;
+        var direction = element.data(SLIDE_DIRECTION);
+        var directionClass = direction == 'next' ? 'left' : 'right';
+        var removeClassFn = removeClass.bind(this, element,
+          directionClass + ' ' + direction, done);
+        element.addClass(direction);
+
+        if ($animateCss) {
+          $animateCss(element, {addClass: directionClass})
+            .start()
+            .done(removeClassFn);
+        } else {
+          $animate.addClass(element, directionClass).then(function () {
+            if (!stopped) {
+              removeClassFn();
+            }
+            done();
+          });
+        }
+
+        return function () {
+          stopped = true;
+        };
+      }
+      done();
+    },
+    beforeRemoveClass: function (element, className, done) {
+      // Due to transclusion, noTransition property is on parent's scope
+      if (className === 'active' && element.parent() && element.parent().parent() &&
+          !element.parent().parent().data(NO_TRANSITION)) {
+        var stopped = false;
+        var direction = element.data(SLIDE_DIRECTION);
+        var directionClass = direction == 'next' ? 'left' : 'right';
+        var removeClassFn = removeClass.bind(this, element, directionClass, done);
+
+        if ($animateCss) {
+          $animateCss(element, {addClass: directionClass})
+            .start()
+            .done(removeClassFn);
+        } else {
+          $animate.addClass(element, directionClass).then(function() {
+            if (!stopped) {
+              removeClassFn();
+            }
+            done();
+          });
+        }
+        return function() {
+          stopped = true;
+        };
+      }
+      done();
+    }
+  };
+}]);
+
+/* deprecated carousel below */
+
+angular.module('ui.bootstrap.carousel')
+
+.value('$carouselSuppressWarning', false)
+
+.controller('CarouselController', ['$scope', '$element', '$controller', '$log', '$carouselSuppressWarning', function($scope, $element, $controller, $log, $carouselSuppressWarning) {
+  if (!$carouselSuppressWarning) {
+    $log.warn('CarouselController is now deprecated. Use UibCarouselController instead.');
+  }
+
+  angular.extend(this, $controller('UibCarouselController', {
+    $scope: $scope,
+    $element: $element
+  }));
+}])
+
+.directive('carousel', ['$log', '$carouselSuppressWarning', function($log, $carouselSuppressWarning) {
+  return {
+    transclude: true,
+    replace: true,
+    controller: 'CarouselController',
+    controllerAs: 'carousel',
+    require: 'carousel',
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/carousel/carousel.html';
+    },
+    scope: {
+      interval: '=',
+      noTransition: '=',
+      noPause: '=',
+      noWrap: '&'
+    },
+    link: function() {
+      if (!$carouselSuppressWarning) {
+        $log.warn('carousel is now deprecated. Use uib-carousel instead.');
+      }
+    }
+  };
+}])
+
+.directive('slide', ['$log', '$carouselSuppressWarning', function($log, $carouselSuppressWarning) {
+  return {
+    require: '^carousel',
+    transclude: true,
+    replace: true,
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/carousel/slide.html';
+    },
+    scope: {
+      active: '=?',
+      actual: '=?',
+      index: '=?'
+    },
+    link: function (scope, element, attrs, carouselCtrl) {
+      if (!$carouselSuppressWarning) {
+        $log.warn('slide is now deprecated. Use uib-slide instead.');
+      }
+
+      carouselCtrl.addSlide(scope, element);
+      //when the scope is destroyed then remove the slide from the current slides array
+      scope.$on('$destroy', function() {
+        carouselCtrl.removeSlide(scope);
+      });
+
+      scope.$watch('active', function(active) {
+        if (active) {
+          carouselCtrl.select(scope);
+        }
+      });
+    }
+  };
+}]);
+
+angular.module('ui.bootstrap.dateparser', [])
+
+.service('uibDateParser', ['$log', '$locale', 'orderByFilter', function($log, $locale, orderByFilter) {
+  // Pulled from https://github.com/mbostock/d3/blob/master/src/format/requote.js
+  var SPECIAL_CHARACTERS_REGEXP = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
+
+  var localeId;
+  var formatCodeToRegex;
+
+  this.init = function() {
+    localeId = $locale.id;
+
+    this.parsers = {};
+
+    formatCodeToRegex = {
+      'yyyy': {
+        regex: '\\d{4}',
+        apply: function(value) { this.year = +value; }
+      },
+      'yy': {
+        regex: '\\d{2}',
+        apply: function(value) { this.year = +value + 2000; }
+      },
+      'y': {
+        regex: '\\d{1,4}',
+        apply: function(value) { this.year = +value; }
+      },
+      'MMMM': {
+        regex: $locale.DATETIME_FORMATS.MONTH.join('|'),
+        apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); }
+      },
+      'MMM': {
+        regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),
+        apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); }
+      },
+      'MM': {
+        regex: '0[1-9]|1[0-2]',
+        apply: function(value) { this.month = value - 1; }
+      },
+      'M': {
+        regex: '[1-9]|1[0-2]',
+        apply: function(value) { this.month = value - 1; }
+      },
+      'dd': {
+        regex: '[0-2][0-9]{1}|3[0-1]{1}',
+        apply: function(value) { this.date = +value; }
+      },
+      'd': {
+        regex: '[1-2]?[0-9]{1}|3[0-1]{1}',
+        apply: function(value) { this.date = +value; }
+      },
+      'EEEE': {
+        regex: $locale.DATETIME_FORMATS.DAY.join('|')
+      },
+      'EEE': {
+        regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|')
+      },
+      'HH': {
+        regex: '(?:0|1)[0-9]|2[0-3]',
+        apply: function(value) { this.hours = +value; }
+      },
+      'hh': {
+        regex: '0[0-9]|1[0-2]',
+        apply: function(value) { this.hours = +value; }
+      },
+      'H': {
+        regex: '1?[0-9]|2[0-3]',
+        apply: function(value) { this.hours = +value; }
+      },
+      'h': {
+        regex: '[0-9]|1[0-2]',
+        apply: function(value) { this.hours = +value; }
+      },
+      'mm': {
+        regex: '[0-5][0-9]',
+        apply: function(value) { this.minutes = +value; }
+      },
+      'm': {
+        regex: '[0-9]|[1-5][0-9]',
+        apply: function(value) { this.minutes = +value; }
+      },
+      'sss': {
+        regex: '[0-9][0-9][0-9]',
+        apply: function(value) { this.milliseconds = +value; }
+      },
+      'ss': {
+        regex: '[0-5][0-9]',
+        apply: function(value) { this.seconds = +value; }
+      },
+      's': {
+        regex: '[0-9]|[1-5][0-9]',
+        apply: function(value) { this.seconds = +value; }
+      },
+      'a': {
+        regex: $locale.DATETIME_FORMATS.AMPMS.join('|'),
+        apply: function(value) {
+          if (this.hours === 12) {
+            this.hours = 0;
+          }
+
+          if (value === 'PM') {
+            this.hours += 12;
+          }
+        }
+      }
+    };
+  };
+
+  this.init();
+
+  function createParser(format) {
+    var map = [], regex = format.split('');
+
+    angular.forEach(formatCodeToRegex, function(data, code) {
+      var index = format.indexOf(code);
+
+      if (index > -1) {
+        format = format.split('');
+
+        regex[index] = '(' + data.regex + ')';
+        format[index] = '$'; // Custom symbol to define consumed part of format
+        for (var i = index + 1, n = index + code.length; i < n; i++) {
+          regex[i] = '';
+          format[i] = '$';
+        }
+        format = format.join('');
+
+        map.push({ index: index, apply: data.apply });
+      }
+    });
+
+    return {
+      regex: new RegExp('^' + regex.join('') + '$'),
+      map: orderByFilter(map, 'index')
+    };
+  }
+
+  this.parse = function(input, format, baseDate) {
+    if (!angular.isString(input) || !format) {
+      return input;
+    }
+
+    format = $locale.DATETIME_FORMATS[format] || format;
+    format = format.replace(SPECIAL_CHARACTERS_REGEXP, '\\$&');
+
+    if ($locale.id !== localeId) {
+      this.init();
+    }
+
+    if (!this.parsers[format]) {
+      this.parsers[format] = createParser(format);
+    }
+
+    var parser = this.parsers[format],
+        regex = parser.regex,
+        map = parser.map,
+        results = input.match(regex);
+
+    if (results && results.length) {
+      var fields, dt;
+      if (angular.isDate(baseDate) && !isNaN(baseDate.getTime())) {
+        fields = {
+          year: baseDate.getFullYear(),
+          month: baseDate.getMonth(),
+          date: baseDate.getDate(),
+          hours: baseDate.getHours(),
+          minutes: baseDate.getMinutes(),
+          seconds: baseDate.getSeconds(),
+          milliseconds: baseDate.getMilliseconds()
+        };
+      } else {
+        if (baseDate) {
+          $log.warn('dateparser:', 'baseDate is not a valid date');
+        }
+        fields = { year: 1900, month: 0, date: 1, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 };
+      }
+
+      for (var i = 1, n = results.length; i < n; i++) {
+        var mapper = map[i-1];
+        if (mapper.apply) {
+          mapper.apply.call(fields, results[i]);
+        }
+      }
+
+      if (isValid(fields.year, fields.month, fields.date)) {
+        if (angular.isDate(baseDate) && !isNaN(baseDate.getTime())) {
+          dt = new Date(baseDate);
+          dt.setFullYear(fields.year, fields.month, fields.date,
+            fields.hours, fields.minutes, fields.seconds,
+            fields.milliseconds || 0);
+        } else {
+          dt = new Date(fields.year, fields.month, fields.date,
+            fields.hours, fields.minutes, fields.seconds,
+            fields.milliseconds || 0);
+        }
+      }
+
+      return dt;
+    }
+  };
+
+  // Check if date is valid for specific month (and year for February).
+  // Month: 0 = Jan, 1 = Feb, etc
+  function isValid(year, month, date) {
+    if (date < 1) {
+      return false;
+    }
+
+    if (month === 1 && date > 28) {
+      return date === 29 && ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);
+    }
+
+    if (month === 3 || month === 5 || month === 8 || month === 10) {
+      return date < 31;
+    }
+
+    return true;
+  }
+}]);
+
+/* Deprecated dateparser below */
+
+angular.module('ui.bootstrap.dateparser')
+
+.value('$dateParserSuppressWarning', false)
+
+.service('dateParser', ['$log', '$dateParserSuppressWarning', 'uibDateParser', function($log, $dateParserSuppressWarning, uibDateParser) {
+  if (!$dateParserSuppressWarning) {
+    $log.warn('dateParser is now deprecated. Use uibDateParser instead.');
+  }
+
+  angular.extend(this, uibDateParser);
+}]);
+
+angular.module('ui.bootstrap.position', [])
+
+/**
+ * A set of utility methods that can be use to retrieve position of DOM elements.
+ * It is meant to be used where we need to absolute-position DOM elements in
+ * relation to other, existing elements (this is the case for tooltips, popovers,
+ * typeahead suggestions etc.).
+ */
+  .factory('$uibPosition', ['$document', '$window', function($document, $window) {
+    function getStyle(el, cssprop) {
+      if (el.currentStyle) { //IE
+        return el.currentStyle[cssprop];
+      } else if ($window.getComputedStyle) {
+        return $window.getComputedStyle(el)[cssprop];
+      }
+      // finally try and get inline style
+      return el.style[cssprop];
+    }
+
+    /**
+     * Checks if a given element is statically positioned
+     * @param element - raw DOM element
+     */
+    function isStaticPositioned(element) {
+      return (getStyle(element, 'position') || 'static' ) === 'static';
+    }
+
+    /**
+     * returns the closest, non-statically positioned parentOffset of a given element
+     * @param element
+     */
+    var parentOffsetEl = function(element) {
+      var docDomEl = $document[0];
+      var offsetParent = element.offsetParent || docDomEl;
+      while (offsetParent && offsetParent !== docDomEl && isStaticPositioned(offsetParent) ) {
+        offsetParent = offsetParent.offsetParent;
+      }
+      return offsetParent || docDomEl;
+    };
+
+    return {
+      /**
+       * Provides read-only equivalent of jQuery's position function:
+       * http://api.jquery.com/position/
+       */
+      position: function(element) {
+        var elBCR = this.offset(element);
+        var offsetParentBCR = { top: 0, left: 0 };
+        var offsetParentEl = parentOffsetEl(element[0]);
+        if (offsetParentEl != $document[0]) {
+          offsetParentBCR = this.offset(angular.element(offsetParentEl));
+          offsetParentBCR.top += offsetParentEl.clientTop - offsetParentEl.scrollTop;
+          offsetParentBCR.left += offsetParentEl.clientLeft - offsetParentEl.scrollLeft;
+        }
+
+        var boundingClientRect = element[0].getBoundingClientRect();
+        return {
+          width: boundingClientRect.width || element.prop('offsetWidth'),
+          height: boundingClientRect.height || element.prop('offsetHeight'),
+          top: elBCR.top - offsetParentBCR.top,
+          left: elBCR.left - offsetParentBCR.left
+        };
+      },
+
+      /**
+       * Provides read-only equivalent of jQuery's offset function:
+       * http://api.jquery.com/offset/
+       */
+      offset: function(element) {
+        var boundingClientRect = element[0].getBoundingClientRect();
+        return {
+          width: boundingClientRect.width || element.prop('offsetWidth'),
+          height: boundingClientRect.height || element.prop('offsetHeight'),
+          top: boundingClientRect.top + ($window.pageYOffset || $document[0].documentElement.scrollTop),
+          left: boundingClientRect.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft)
+        };
+      },
+
+      /**
+       * Provides coordinates for the targetEl in relation to hostEl
+       */
+      positionElements: function(hostEl, targetEl, positionStr, appendToBody) {
+        var positionStrParts = positionStr.split('-');
+        var pos0 = positionStrParts[0], pos1 = positionStrParts[1] || 'center';
+
+        var hostElPos,
+          targetElWidth,
+          targetElHeight,
+          targetElPos;
+
+        hostElPos = appendToBody ? this.offset(hostEl) : this.position(hostEl);
+
+        targetElWidth = targetEl.prop('offsetWidth');
+        targetElHeight = targetEl.prop('offsetHeight');
+
+        var shiftWidth = {
+          center: function() {
+            return hostElPos.left + hostElPos.width / 2 - targetElWidth / 2;
+          },
+          left: function() {
+            return hostElPos.left;
+          },
+          right: function() {
+            return hostElPos.left + hostElPos.width;
+          }
+        };
+
+        var shiftHeight = {
+          center: function() {
+            return hostElPos.top + hostElPos.height / 2 - targetElHeight / 2;
+          },
+          top: function() {
+            return hostElPos.top;
+          },
+          bottom: function() {
+            return hostElPos.top + hostElPos.height;
+          }
+        };
+
+        switch (pos0) {
+          case 'right':
+            targetElPos = {
+              top: shiftHeight[pos1](),
+              left: shiftWidth[pos0]()
+            };
+            break;
+          case 'left':
+            targetElPos = {
+              top: shiftHeight[pos1](),
+              left: hostElPos.left - targetElWidth
+            };
+            break;
+          case 'bottom':
+            targetElPos = {
+              top: shiftHeight[pos0](),
+              left: shiftWidth[pos1]()
+            };
+            break;
+          default:
+            targetElPos = {
+              top: hostElPos.top - targetElHeight,
+              left: shiftWidth[pos1]()
+            };
+            break;
+        }
+
+        return targetElPos;
+      }
+    };
+  }]);
+
+/* Deprecated position below */
+
+angular.module('ui.bootstrap.position')
+
+.value('$positionSuppressWarning', false)
+
+.service('$position', ['$log', '$positionSuppressWarning', '$uibPosition', function($log, $positionSuppressWarning, $uibPosition) {
+  if (!$positionSuppressWarning) {
+    $log.warn('$position is now deprecated. Use $uibPosition instead.');
+  }
+
+  angular.extend(this, $uibPosition);
+}]);
+
+angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.position'])
+
+.value('$datepickerSuppressError', false)
+
+.constant('uibDatepickerConfig', {
+  formatDay: 'dd',
+  formatMonth: 'MMMM',
+  formatYear: 'yyyy',
+  formatDayHeader: 'EEE',
+  formatDayTitle: 'MMMM yyyy',
+  formatMonthTitle: 'yyyy',
+  datepickerMode: 'day',
+  minMode: 'day',
+  maxMode: 'year',
+  showWeeks: true,
+  startingDay: 0,
+  yearRange: 20,
+  minDate: null,
+  maxDate: null,
+  shortcutPropagation: false
+})
+
+.controller('UibDatepickerController', ['$scope', '$attrs', '$parse', '$interpolate', '$log', 'dateFilter', 'uibDatepickerConfig', '$datepickerSuppressError', function($scope, $attrs, $parse, $interpolate, $log, dateFilter, datepickerConfig, $datepickerSuppressError) {
+  var self = this,
+      ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl;
+
+  // Modes chain
+  this.modes = ['day', 'month', 'year'];
+
+  // Configuration attributes
+  angular.forEach(['formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle',
+                   'showWeeks', 'startingDay', 'yearRange', 'shortcutPropagation'], function(key, index) {
+    self[key] = angular.isDefined($attrs[key]) ? (index < 6 ? $interpolate($attrs[key])($scope.$parent) : $scope.$parent.$eval($attrs[key])) : datepickerConfig[key];
+  });
+
+  // Watchable date attributes
+  angular.forEach(['minDate', 'maxDate'], function(key) {
+    if ($attrs[key]) {
+      $scope.$parent.$watch($parse($attrs[key]), function(value) {
+        self[key] = value ? new Date(value) : null;
+        self.refreshView();
+      });
+    } else {
+      self[key] = datepickerConfig[key] ? new Date(datepickerConfig[key]) : null;
+    }
+  });
+
+  angular.forEach(['minMode', 'maxMode'], function(key) {
+    if ($attrs[key]) {
+      $scope.$parent.$watch($parse($attrs[key]), function(value) {
+        self[key] = angular.isDefined(value) ? value : $attrs[key];
+        $scope[key] = self[key];
+        if ((key == 'minMode' && self.modes.indexOf($scope.datepickerMode) < self.modes.indexOf(self[key])) || (key == 'maxMode' && self.modes.indexOf($scope.datepickerMode) > self.modes.indexOf(self[key]))) {
+          $scope.datepickerMode = self[key];
+        }
+      });
+    } else {
+      self[key] = datepickerConfig[key] || null;
+      $scope[key] = self[key];
+    }
+  });
+
+  $scope.datepickerMode = $scope.datepickerMode || datepickerConfig.datepickerMode;
+  $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000);
+
+  if (angular.isDefined($attrs.initDate)) {
+    this.activeDate = $scope.$parent.$eval($attrs.initDate) || new Date();
+    $scope.$parent.$watch($attrs.initDate, function(initDate) {
+      if (initDate && (ngModelCtrl.$isEmpty(ngModelCtrl.$modelValue) || ngModelCtrl.$invalid)) {
+        self.activeDate = initDate;
+        self.refreshView();
+      }
+    });
+  } else {
+    this.activeDate = new Date();
+  }
+
+  $scope.isActive = function(dateObject) {
+    if (self.compare(dateObject.date, self.activeDate) === 0) {
+      $scope.activeDateId = dateObject.uid;
+      return true;
+    }
+    return false;
+  };
+
+  this.init = function(ngModelCtrl_) {
+    ngModelCtrl = ngModelCtrl_;
+
+    ngModelCtrl.$render = function() {
+      self.render();
+    };
+  };
+
+  this.render = function() {
+    if (ngModelCtrl.$viewValue) {
+      var date = new Date(ngModelCtrl.$viewValue),
+          isValid = !isNaN(date);
+
+      if (isValid) {
+        this.activeDate = date;
+      } else if (!$datepickerSuppressError) {
+        $log.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');
+      }
+    }
+    this.refreshView();
+  };
+
+  this.refreshView = function() {
+    if (this.element) {
+      this._refreshView();
+
+      var date = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;
+      ngModelCtrl.$setValidity('dateDisabled', !date || (this.element && !this.isDisabled(date)));
+    }
+  };
+
+  this.createDateObject = function(date, format) {
+    var model = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;
+    return {
+      date: date,
+      label: dateFilter(date, format),
+      selected: model && this.compare(date, model) === 0,
+      disabled: this.isDisabled(date),
+      current: this.compare(date, new Date()) === 0,
+      customClass: this.customClass(date)
+    };
+  };
+
+  this.isDisabled = function(date) {
+    return ((this.minDate && this.compare(date, this.minDate) < 0) || (this.maxDate && this.compare(date, this.maxDate) > 0) || ($attrs.dateDisabled && $scope.dateDisabled({date: date, mode: $scope.datepickerMode})));
+  };
+
+  this.customClass = function(date) {
+    return $scope.customClass({date: date, mode: $scope.datepickerMode});
+  };
+
+  // Split array into smaller arrays
+  this.split = function(arr, size) {
+    var arrays = [];
+    while (arr.length > 0) {
+      arrays.push(arr.splice(0, size));
+    }
+    return arrays;
+  };
+
+  $scope.select = function(date) {
+    if ($scope.datepickerMode === self.minMode) {
+      var dt = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : new Date(0, 0, 0, 0, 0, 0, 0);
+      dt.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());
+      ngModelCtrl.$setViewValue(dt);
+      ngModelCtrl.$render();
+    } else {
+      self.activeDate = date;
+      $scope.datepickerMode = self.modes[self.modes.indexOf($scope.datepickerMode) - 1];
+    }
+  };
+
+  $scope.move = function(direction) {
+    var year = self.activeDate.getFullYear() + direction * (self.step.years || 0),
+        month = self.activeDate.getMonth() + direction * (self.step.months || 0);
+    self.activeDate.setFullYear(year, month, 1);
+    self.refreshView();
+  };
+
+  $scope.toggleMode = function(direction) {
+    direction = direction || 1;
+
+    if (($scope.datepickerMode === self.maxMode && direction === 1) || ($scope.datepickerMode === self.minMode && direction === -1)) {
+      return;
+    }
+
+    $scope.datepickerMode = self.modes[self.modes.indexOf($scope.datepickerMode) + direction];
+  };
+
+  // Key event mapper
+  $scope.keys = { 13: 'enter', 32: 'space', 33: 'pageup', 34: 'pagedown', 35: 'end', 36: 'home', 37: 'left', 38: 'up', 39: 'right', 40: 'down' };
+
+  var focusElement = function() {
+    self.element[0].focus();
+  };
+
+  // Listen for focus requests from popup directive
+  $scope.$on('uib:datepicker.focus', focusElement);
+
+  $scope.keydown = function(evt) {
+    var key = $scope.keys[evt.which];
+
+    if (!key || evt.shiftKey || evt.altKey) {
+      return;
+    }
+
+    evt.preventDefault();
+    if (!self.shortcutPropagation) {
+      evt.stopPropagation();
+    }
+
+    if (key === 'enter' || key === 'space') {
+      if (self.isDisabled(self.activeDate)) {
+        return; // do nothing
+      }
+      $scope.select(self.activeDate);
+    } else if (evt.ctrlKey && (key === 'up' || key === 'down')) {
+      $scope.toggleMode(key === 'up' ? 1 : -1);
+    } else {
+      self.handleKeyDown(key, evt);
+      self.refreshView();
+    }
+  };
+}])
+
+.controller('UibDaypickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
+  var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
+
+  this.step = { months: 1 };
+  this.element = $element;
+  function getDaysInMonth(year, month) {
+    return ((month === 1) && (year % 4 === 0) && ((year % 100 !== 0) || (year % 400 === 0))) ? 29 : DAYS_IN_MONTH[month];
+  }
+
+  this.init = function(ctrl) {
+    angular.extend(ctrl, this);
+    scope.showWeeks = ctrl.showWeeks;
+    ctrl.refreshView();
+  };
+
+  this.getDates = function(startDate, n) {
+    var dates = new Array(n), current = new Date(startDate), i = 0, date;
+    while (i < n) {
+      date = new Date(current);
+      dates[i++] = date;
+      current.setDate(current.getDate() + 1);
+    }
+    return dates;
+  };
+
+  this._refreshView = function() {
+    var year = this.activeDate.getFullYear(),
+      month = this.activeDate.getMonth(),
+      firstDayOfMonth = new Date(this.activeDate);
+
+    firstDayOfMonth.setFullYear(year, month, 1);
+
+    var difference = this.startingDay - firstDayOfMonth.getDay(),
+      numDisplayedFromPreviousMonth = (difference > 0) ? 7 - difference : - difference,
+      firstDate = new Date(firstDayOfMonth);
+
+    if (numDisplayedFromPreviousMonth > 0) {
+      firstDate.setDate(-numDisplayedFromPreviousMonth + 1);
+    }
+
+    // 42 is the number of days on a six-month calendar
+    var days = this.getDates(firstDate, 42);
+    for (var i = 0; i < 42; i ++) {
+      days[i] = angular.extend(this.createDateObject(days[i], this.formatDay), {
+        secondary: days[i].getMonth() !== month,
+        uid: scope.uniqueId + '-' + i
+      });
+    }
+
+    scope.labels = new Array(7);
+    for (var j = 0; j < 7; j++) {
+      scope.labels[j] = {
+        abbr: dateFilter(days[j].date, this.formatDayHeader),
+        full: dateFilter(days[j].date, 'EEEE')
+      };
+    }
+
+    scope.title = dateFilter(this.activeDate, this.formatDayTitle);
+    scope.rows = this.split(days, 7);
+
+    if (scope.showWeeks) {
+      scope.weekNumbers = [];
+      var thursdayIndex = (4 + 7 - this.startingDay) % 7,
+          numWeeks = scope.rows.length;
+      for (var curWeek = 0; curWeek < numWeeks; curWeek++) {
+        scope.weekNumbers.push(
+          getISO8601WeekNumber(scope.rows[curWeek][thursdayIndex].date));
+      }
+    }
+  };
+
+  this.compare = function(date1, date2) {
+    return (new Date(date1.getFullYear(), date1.getMonth(), date1.getDate()) - new Date(date2.getFullYear(), date2.getMonth(), date2.getDate()));
+  };
+
+  function getISO8601WeekNumber(date) {
+    var checkDate = new Date(date);
+    checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday
+    var time = checkDate.getTime();
+    checkDate.setMonth(0); // Compare with Jan 1
+    checkDate.setDate(1);
+    return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+  }
+
+  this.handleKeyDown = function(key, evt) {
+    var date = this.activeDate.getDate();
+
+    if (key === 'left') {
+      date = date - 1;   // up
+    } else if (key === 'up') {
+      date = date - 7;   // down
+    } else if (key === 'right') {
+      date = date + 1;   // down
+    } else if (key === 'down') {
+      date = date + 7;
+    } else if (key === 'pageup' || key === 'pagedown') {
+      var month = this.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1);
+      this.activeDate.setMonth(month, 1);
+      date = Math.min(getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth()), date);
+    } else if (key === 'home') {
+      date = 1;
+    } else if (key === 'end') {
+      date = getDaysInMonth(this.activeDate.getFullYear(), this.activeDate.getMonth());
+    }
+    this.activeDate.setDate(date);
+  };
+}])
+
+.controller('UibMonthpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
+  this.step = { years: 1 };
+  this.element = $element;
+
+  this.init = function(ctrl) {
+    angular.extend(ctrl, this);
+    ctrl.refreshView();
+  };
+
+  this._refreshView = function() {
+    var months = new Array(12),
+        year = this.activeDate.getFullYear(),
+        date;
+
+    for (var i = 0; i < 12; i++) {
+      date = new Date(this.activeDate);
+      date.setFullYear(year, i, 1);
+      months[i] = angular.extend(this.createDateObject(date, this.formatMonth), {
+        uid: scope.uniqueId + '-' + i
+      });
+    }
+
+    scope.title = dateFilter(this.activeDate, this.formatMonthTitle);
+    scope.rows = this.split(months, 3);
+  };
+
+  this.compare = function(date1, date2) {
+    return new Date(date1.getFullYear(), date1.getMonth()) - new Date(date2.getFullYear(), date2.getMonth());
+  };
+
+  this.handleKeyDown = function(key, evt) {
+    var date = this.activeDate.getMonth();
+
+    if (key === 'left') {
+      date = date - 1;   // up
+    } else if (key === 'up') {
+      date = date - 3;   // down
+    } else if (key === 'right') {
+      date = date + 1;   // down
+    } else if (key === 'down') {
+      date = date + 3;
+    } else if (key === 'pageup' || key === 'pagedown') {
+      var year = this.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1);
+      this.activeDate.setFullYear(year);
+    } else if (key === 'home') {
+      date = 0;
+    } else if (key === 'end') {
+      date = 11;
+    }
+    this.activeDate.setMonth(date);
+  };
+}])
+
+.controller('UibYearpickerController', ['$scope', '$element', 'dateFilter', function(scope, $element, dateFilter) {
+  var range;
+  this.element = $element;
+
+  function getStartingYear(year) {
+    return parseInt((year - 1) / range, 10) * range + 1;
+  }
+
+  this.yearpickerInit = function() {
+    range = this.yearRange;
+    this.step = { years: range };
+  };
+
+  this._refreshView = function() {
+    var years = new Array(range), date;
+
+    for (var i = 0, start = getStartingYear(this.activeDate.getFullYear()); i < range; i++) {
+      date = new Date(this.activeDate);
+      date.setFullYear(start + i, 0, 1);
+      years[i] = angular.extend(this.createDateObject(date, this.formatYear), {
+        uid: scope.uniqueId + '-' + i
+      });
+    }
+
+    scope.title = [years[0].label, years[range - 1].label].join(' - ');
+    scope.rows = this.split(years, 5);
+  };
+
+  this.compare = function(date1, date2) {
+    return date1.getFullYear() - date2.getFullYear();
+  };
+
+  this.handleKeyDown = function(key, evt) {
+    var date = this.activeDate.getFullYear();
+
+    if (key === 'left') {
+      date = date - 1;   // up
+    } else if (key === 'up') {
+      date = date - 5;   // down
+    } else if (key === 'right') {
+      date = date + 1;   // down
+    } else if (key === 'down') {
+      date = date + 5;
+    } else if (key === 'pageup' || key === 'pagedown') {
+      date += (key === 'pageup' ? - 1 : 1) * this.step.years;
+    } else if (key === 'home') {
+      date = getStartingYear(this.activeDate.getFullYear());
+    } else if (key === 'end') {
+      date = getStartingYear(this.activeDate.getFullYear()) + range - 1;
+    }
+    this.activeDate.setFullYear(date);
+  };
+}])
+
+.directive('uibDatepicker', function() {
+  return {
+    replace: true,
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/datepicker/datepicker.html';
+    },
+    scope: {
+      datepickerMode: '=?',
+      dateDisabled: '&',
+      customClass: '&',
+      shortcutPropagation: '&?'
+    },
+    require: ['uibDatepicker', '^ngModel'],
+    controller: 'UibDatepickerController',
+    controllerAs: 'datepicker',
+    link: function(scope, element, attrs, ctrls) {
+      var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+      datepickerCtrl.init(ngModelCtrl);
+    }
+  };
+})
+
+.directive('uibDaypicker', function() {
+  return {
+    replace: true,
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/datepicker/day.html';
+    },
+    require: ['^?uibDatepicker', 'uibDaypicker', '^?datepicker'],
+    controller: 'UibDaypickerController',
+    link: function(scope, element, attrs, ctrls) {
+      var datepickerCtrl = ctrls[0] || ctrls[2],
+        daypickerCtrl = ctrls[1];
+
+      daypickerCtrl.init(datepickerCtrl);
+    }
+  };
+})
+
+.directive('uibMonthpicker', function() {
+  return {
+    replace: true,
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/datepicker/month.html';
+    },
+    require: ['^?uibDatepicker', 'uibMonthpicker', '^?datepicker'],
+    controller: 'UibMonthpickerController',
+    link: function(scope, element, attrs, ctrls) {
+      var datepickerCtrl = ctrls[0] || ctrls[2],
+        monthpickerCtrl = ctrls[1];
+
+      monthpickerCtrl.init(datepickerCtrl);
+    }
+  };
+})
+
+.directive('uibYearpicker', function() {
+  return {
+    replace: true,
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/datepicker/year.html';
+    },
+    require: ['^?uibDatepicker', 'uibYearpicker', '^?datepicker'],
+    controller: 'UibYearpickerController',
+    link: function(scope, element, attrs, ctrls) {
+      var ctrl = ctrls[0] || ctrls[2];
+      angular.extend(ctrl, ctrls[1]);
+      ctrl.yearpickerInit();
+
+      ctrl.refreshView();
+    }
+  };
+})
+
+.constant('uibDatepickerPopupConfig', {
+  datepickerPopup: 'yyyy-MM-dd',
+  datepickerPopupTemplateUrl: 'template/datepicker/popup.html',
+  datepickerTemplateUrl: 'template/datepicker/datepicker.html',
+  html5Types: {
+    date: 'yyyy-MM-dd',
+    'datetime-local': 'yyyy-MM-ddTHH:mm:ss.sss',
+    'month': 'yyyy-MM'
+  },
+  currentText: 'Today',
+  clearText: 'Clear',
+  closeText: 'Done',
+  closeOnDateSelection: true,
+  appendToBody: false,
+  showButtonBar: true,
+  onOpenFocus: true
+})
+
+.controller('UibDatepickerPopupController', ['$scope', '$element', '$attrs', '$compile', '$parse', '$document', '$rootScope', '$uibPosition', 'dateFilter', 'uibDateParser', 'uibDatepickerPopupConfig', '$timeout',
+function(scope, element, attrs, $compile, $parse, $document, $rootScope, $position, dateFilter, dateParser, datepickerPopupConfig, $timeout) {
+  var self = this;
+  var cache = {},
+    isHtml5DateInput = false;
+  var dateFormat, closeOnDateSelection, appendToBody, onOpenFocus,
+    datepickerPopupTemplateUrl, datepickerTemplateUrl, popupEl, datepickerEl,
+    ngModel, $popup;
+
+  scope.watchData = {};
+
+  this.init = function(_ngModel_) {
+    ngModel = _ngModel_;
+    closeOnDateSelection = angular.isDefined(attrs.closeOnDateSelection) ? scope.$parent.$eval(attrs.closeOnDateSelection) : datepickerPopupConfig.closeOnDateSelection;
+    appendToBody = angular.isDefined(attrs.datepickerAppendToBody) ? scope.$parent.$eval(attrs.datepickerAppendToBody) : datepickerPopupConfig.appendToBody;
+    onOpenFocus = angular.isDefined(attrs.onOpenFocus) ? scope.$parent.$eval(attrs.onOpenFocus) : datepickerPopupConfig.onOpenFocus;
+    datepickerPopupTemplateUrl = angular.isDefined(attrs.datepickerPopupTemplateUrl) ? attrs.datepickerPopupTemplateUrl : datepickerPopupConfig.datepickerPopupTemplateUrl;
+    datepickerTemplateUrl = angular.isDefined(attrs.datepickerTemplateUrl) ? attrs.datepickerTemplateUrl : datepickerPopupConfig.datepickerTemplateUrl;
+
+    scope.showButtonBar = angular.isDefined(attrs.showButtonBar) ? scope.$parent.$eval(attrs.showButtonBar) : datepickerPopupConfig.showButtonBar;
+
+    if (datepickerPopupConfig.html5Types[attrs.type]) {
+      dateFormat = datepickerPopupConfig.html5Types[attrs.type];
+      isHtml5DateInput = true;
+    } else {
+      dateFormat = attrs.datepickerPopup || attrs.uibDatepickerPopup || datepickerPopupConfig.datepickerPopup;
+      attrs.$observe('uibDatepickerPopup', function(value, oldValue) {
+          var newDateFormat = value || datepickerPopupConfig.datepickerPopup;
+          // Invalidate the $modelValue to ensure that formatters re-run
+          // FIXME: Refactor when PR is merged: https://github.com/angular/angular.js/pull/10764
+          if (newDateFormat !== dateFormat) {
+            dateFormat = newDateFormat;
+            ngModel.$modelValue = null;
+
+            if (!dateFormat) {
+              throw new Error('uibDatepickerPopup must have a date format specified.');
+            }
+          }
+      });
+    }
+
+    if (!dateFormat) {
+      throw new Error('uibDatepickerPopup must have a date format specified.');
+    }
+
+    if (isHtml5DateInput && attrs.datepickerPopup) {
+      throw new Error('HTML5 date input types do not support custom formats.');
+    }
+
+    // popup element used to display calendar
+    popupEl = angular.element('<div uib-datepicker-popup-wrap><div uib-datepicker></div></div>');
+    popupEl.attr({
+      'ng-model': 'date',
+      'ng-change': 'dateSelection(date)',
+      'template-url': datepickerPopupTemplateUrl
+    });
+
+    // datepicker element
+    datepickerEl = angular.element(popupEl.children()[0]);
+    datepickerEl.attr('template-url', datepickerTemplateUrl);
+
+    if (isHtml5DateInput) {
+      if (attrs.type === 'month') {
+        datepickerEl.attr('datepicker-mode', '"month"');
+        datepickerEl.attr('min-mode', 'month');
+      }
+    }
+
+    if (attrs.datepickerOptions) {
+      var options = scope.$parent.$eval(attrs.datepickerOptions);
+      if (options && options.initDate) {
+        scope.initDate = options.initDate;
+        datepickerEl.attr('init-date', 'initDate');
+        delete options.initDate;
+      }
+      angular.forEach(options, function(value, option) {
+        datepickerEl.attr(cameltoDash(option), value);
+      });
+    }
+
+    angular.forEach(['minMode', 'maxMode', 'minDate', 'maxDate', 'datepickerMode', 'initDate', 'shortcutPropagation'], function(key) {
+      if (attrs[key]) {
+        var getAttribute = $parse(attrs[key]);
+        scope.$parent.$watch(getAttribute, function(value) {
+          scope.watchData[key] = value;
+          if (key === 'minDate' || key === 'maxDate') {
+            cache[key] = new Date(value);
+          }
+        });
+        datepickerEl.attr(cameltoDash(key), 'watchData.' + key);
+
+        // Propagate changes from datepicker to outside
+        if (key === 'datepickerMode') {
+          var setAttribute = getAttribute.assign;
+          scope.$watch('watchData.' + key, function(value, oldvalue) {
+            if (angular.isFunction(setAttribute) && value !== oldvalue) {
+              setAttribute(scope.$parent, value);
+            }
+          });
+        }
+      }
+    });
+    if (attrs.dateDisabled) {
+      datepickerEl.attr('date-disabled', 'dateDisabled({ date: date, mode: mode })');
+    }
+
+    if (attrs.showWeeks) {
+      datepickerEl.attr('show-weeks', attrs.showWeeks);
+    }
+
+    if (attrs.customClass) {
+      datepickerEl.attr('custom-class', 'customClass({ date: date, mode: mode })');
+    }
+
+    if (!isHtml5DateInput) {
+      // Internal API to maintain the correct ng-invalid-[key] class
+      ngModel.$$parserName = 'date';
+      ngModel.$validators.date = validator;
+      ngModel.$parsers.unshift(parseDate);
+      ngModel.$formatters.push(function(value) {
+        scope.date = value;
+        return ngModel.$isEmpty(value) ? value : dateFilter(value, dateFormat);
+      });
+    } else {
+      ngModel.$formatters.push(function(value) {
+        scope.date = value;
+        return value;
+      });
+    }
+
+    // Detect changes in the view from the text box
+    ngModel.$viewChangeListeners.push(function() {
+      scope.date = dateParser.parse(ngModel.$viewValue, dateFormat, scope.date);
+    });
+
+    element.bind('keydown', inputKeydownBind);
+
+    $popup = $compile(popupEl)(scope);
+    // Prevent jQuery cache memory leak (template is now redundant after linking)
+    popupEl.remove();
+
+    if (appendToBody) {
+      $document.find('body').append($popup);
+    } else {
+      element.after($popup);
+    }
+
+    scope.$on('$destroy', function() {
+      if (scope.isOpen === true) {
+        if (!$rootScope.$$phase) {
+          scope.$apply(function() {
+            scope.isOpen = false;
+          });
+        }
+      }
+
+      $popup.remove();
+      element.unbind('keydown', inputKeydownBind);
+      $document.unbind('click', documentClickBind);
+    });
+  };
+
+  scope.getText = function(key) {
+    return scope[key + 'Text'] || datepickerPopupConfig[key + 'Text'];
+  };
+
+  scope.isDisabled = function(date) {
+    if (date === 'today') {
+      date = new Date();
+    }
+
+    return ((scope.watchData.minDate && scope.compare(date, cache.minDate) < 0) ||
+      (scope.watchData.maxDate && scope.compare(date, cache.maxDate) > 0));
+  };
+
+  scope.compare = function(date1, date2) {
+    return (new Date(date1.getFullYear(), date1.getMonth(), date1.getDate()) - new Date(date2.getFullYear(), date2.getMonth(), date2.getDate()));
+  };
+
+  // Inner change
+  scope.dateSelection = function(dt) {
+    if (angular.isDefined(dt)) {
+      scope.date = dt;
+    }
+    var date = scope.date ? dateFilter(scope.date, dateFormat) : null; // Setting to NULL is necessary for form validators to function
+    element.val(date);
+    ngModel.$setViewValue(date);
+
+    if (closeOnDateSelection) {
+      scope.isOpen = false;
+      element[0].focus();
+    }
+  };
+
+  scope.keydown = function(evt) {
+    if (evt.which === 27) {
+      scope.isOpen = false;
+      element[0].focus();
+    }
+  };
+
+  scope.select = function(date) {
+    if (date === 'today') {
+      var today = new Date();
+      if (angular.isDate(scope.date)) {
+        date = new Date(scope.date);
+        date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate());
+      } else {
+        date = new Date(today.setHours(0, 0, 0, 0));
+      }
+    }
+    scope.dateSelection(date);
+  };
+
+  scope.close = function() {
+    scope.isOpen = false;
+    element[0].focus();
+  };
+
+  scope.$watch('isOpen', function(value) {
+    if (value) {
+      scope.position = appendToBody ? $position.offset(element) : $position.position(element);
+      scope.position.top = scope.position.top + element.prop('offsetHeight');
+
+      $timeout(function() {
+        if (onOpenFocus) {
+          scope.$broadcast('uib:datepicker.focus');
+        }
+        $document.bind('click', documentClickBind);
+      }, 0, false);
+    } else {
+      $document.unbind('click', documentClickBind);
+    }
+  });
+
+  function cameltoDash(string) {
+    return string.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); });
+  }
+
+  function parseDate(viewValue) {
+    if (angular.isNumber(viewValue)) {
+      // presumably timestamp to date object
+      viewValue = new Date(viewValue);
+    }
+
+    if (!viewValue) {
+      return null;
+    } else if (angular.isDate(viewValue) && !isNaN(viewValue)) {
+      return viewValue;
+    } else if (angular.isString(viewValue)) {
+      var date = dateParser.parse(viewValue, dateFormat, scope.date);
+      if (isNaN(date)) {
+        return undefined;
+      } else {
+        return date;
+      }
+    } else {
+      return undefined;
+    }
+  }
+
+  function validator(modelValue, viewValue) {
+    var value = modelValue || viewValue;
+
+    if (!attrs.ngRequired && !value) {
+      return true;
+    }
+
+    if (angular.isNumber(value)) {
+      value = new Date(value);
+    }
+    if (!value) {
+      return true;
+    } else if (angular.isDate(value) && !isNaN(value)) {
+      return true;
+    } else if (angular.isString(value)) {
+      var date = dateParser.parse(value, dateFormat);
+      return !isNaN(date);
+    } else {
+      return false;
+    }
+  }
+
+  function documentClickBind(event) {
+    var popup = $popup[0];
+    var dpContainsTarget = element[0].contains(event.target);
+    // The popup node may not be an element node
+    // In some browsers (IE) only element nodes have the 'contains' function
+    var popupContainsTarget = popup.contains !== undefined && popup.contains(event.target);
+    if (scope.isOpen && !(dpContainsTarget || popupContainsTarget)) {
+      scope.$apply(function() {
+        scope.isOpen = false;
+      });
+    }
+  }
+
+  function inputKeydownBind(evt) {
+    if (evt.which === 27 && scope.isOpen) {
+      evt.preventDefault();
+      evt.stopPropagation();
+      scope.$apply(function() {
+        scope.isOpen = false;
+      });
+      element[0].focus();
+    } else if (evt.which === 40 && !scope.isOpen) {
+      evt.preventDefault();
+      evt.stopPropagation();
+      scope.$apply(function() {
+        scope.isOpen = true;
+      });
+    }
+  }
+}])
+
+.directive('uibDatepickerPopup', function() {
+  return {
+    require: ['ngModel', 'uibDatepickerPopup'],
+    controller: 'UibDatepickerPopupController',
+    scope: {
+      isOpen: '=?',
+      currentText: '@',
+      clearText: '@',
+      closeText: '@',
+      dateDisabled: '&',
+      customClass: '&'
+    },
+    link: function(scope, element, attrs, ctrls) {
+      var ngModel = ctrls[0],
+        ctrl = ctrls[1];
+
+      ctrl.init(ngModel);
+    }
+  };
+})
+
+.directive('uibDatepickerPopupWrap', function() {
+  return {
+    replace: true,
+    transclude: true,
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/datepicker/popup.html';
+    }
+  };
+});
+
+/* Deprecated datepicker below */
+
+angular.module('ui.bootstrap.datepicker')
+
+.value('$datepickerSuppressWarning', false)
+
+.controller('DatepickerController', ['$scope', '$attrs', '$parse', '$interpolate', '$log', 'dateFilter', 'uibDatepickerConfig', '$datepickerSuppressError', '$datepickerSuppressWarning', function($scope, $attrs, $parse, $interpolate, $log, dateFilter, datepickerConfig, $datepickerSuppressError, $datepickerSuppressWarning) {
+  if (!$datepickerSuppressWarning) {
+    $log.warn('DatepickerController is now deprecated. Use UibDatepickerController instead.');
+  }
+
+  var self = this,
+    ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl;
+
+  this.modes = ['day', 'month', 'year'];
+
+  angular.forEach(['formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle',
+    'showWeeks', 'startingDay', 'yearRange', 'shortcutPropagation'], function(key, index) {
+    self[key] = angular.isDefined($attrs[key]) ? (index < 6 ? $interpolate($attrs[key])($scope.$parent) : $scope.$parent.$eval($attrs[key])) : datepickerConfig[key];
+  });
+
+  angular.forEach(['minDate', 'maxDate'], function(key) {
+    if ($attrs[key]) {
+      $scope.$parent.$watch($parse($attrs[key]), function(value) {
+        self[key] = value ? new Date(value) : null;
+        self.refreshView();
+      });
+    } else {
+      self[key] = datepickerConfig[key] ? new Date(datepickerConfig[key]) : null;
+    }
+  });
+
+  angular.forEach(['minMode', 'maxMode'], function(key) {
+    if ($attrs[key]) {
+      $scope.$parent.$watch($parse($attrs[key]), function(value) {
+        self[key] = angular.isDefined(value) ? value : $attrs[key];
+        $scope[key] = self[key];
+        if ((key == 'minMode' && self.modes.indexOf($scope.datepickerMode) < self.modes.indexOf(self[key])) || (key == 'maxMode' && self.modes.indexOf($scope.datepickerMode) > self.modes.indexOf(self[key]))) {
+          $scope.datepickerMode = self[key];
+        }
+      });
+    } else {
+      self[key] = datepickerConfig[key] || null;
+      $scope[key] = self[key];
+    }
+  });
+
+  $scope.datepickerMode = $scope.datepickerMode || datepickerConfig.datepickerMode;
+  $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000);
+
+  if (angular.isDefined($attrs.initDate)) {
+    this.activeDate = $scope.$parent.$eval($attrs.initDate) || new Date();
+    $scope.$parent.$watch($attrs.initDate, function(initDate) {
+      if (initDate && (ngModelCtrl.$isEmpty(ngModelCtrl.$modelValue) || ngModelCtrl.$invalid)) {
+        self.activeDate = initDate;
+        self.refreshView();
+      }
+    });
+  } else {
+    this.activeDate = new Date();
+  }
+
+  $scope.isActive = function(dateObject) {
+    if (self.compare(dateObject.date, self.activeDate) === 0) {
+      $scope.activeDateId = dateObject.uid;
+      return true;
+    }
+    return false;
+  };
+
+  this.init = function(ngModelCtrl_) {
+    ngModelCtrl = ngModelCtrl_;
+
+    ngModelCtrl.$render = function() {
+      self.render();
+    };
+  };
+
+  this.render = function() {
+    if (ngModelCtrl.$viewValue) {
+      var date = new Date(ngModelCtrl.$viewValue),
+        isValid = !isNaN(date);
+
+      if (isValid) {
+        this.activeDate = date;
+      } else if (!$datepickerSuppressError) {
+        $log.error('Datepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');
+      }
+    }
+    this.refreshView();
+  };
+
+  this.refreshView = function() {
+    if (this.element) {
+      this._refreshView();
+
+      var date = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;
+      ngModelCtrl.$setValidity('dateDisabled', !date || (this.element && !this.isDisabled(date)));
+    }
+  };
+
+  this.createDateObject = function(date, format) {
+    var model = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;
+    return {
+      date: date,
+      label: dateFilter(date, format),
+      selected: model && this.compare(date, model) === 0,
+      disabled: this.isDisabled(date),
+      current: this.compare(date, new Date()) === 0,
+      customClass: this.customClass(date)
+    };
+  };
+
+  this.isDisabled = function(date) {
+    return ((this.minDate && this.compare(date, this.minDate) < 0) || (this.maxDate && this.compare(date, this.maxDate) > 0) || ($attrs.dateDisabled && $scope.dateDisabled({date: date, mode: $scope.datepickerMode})));
+  };
+
+  this.customClass = function(date) {
+    return $scope.customClass({date: date, mode: $scope.datepickerMode});
+  };
+
+  // Split array into smaller arrays
+  this.split = function(arr, size) {
+    var arrays = [];
+    while (arr.length > 0) {
+      arrays.push(arr.splice(0, size));
+    }
+    return arrays;
+  };
+
+  this.fixTimeZone = function(date) {
+    var hours = date.getHours();
+    date.setHours(hours === 23 ? hours + 2 : 0);
+  };
+
+  $scope.select = function(date) {
+    if ($scope.datepickerMode === self.minMode) {
+      var dt = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : new Date(0, 0, 0, 0, 0, 0, 0);
+      dt.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());
+      ngModelCtrl.$setViewValue(dt);
+      ngModelCtrl.$render();
+    } else {
+      self.activeDate = date;
+      $scope.datepickerMode = self.modes[self.modes.indexOf($scope.datepickerMode) - 1];
+    }
+  };
+
+  $scope.move = function(direction) {
+    var year = self.activeDate.getFullYear() + direction * (self.step.years || 0),
+      month = self.activeDate.getMonth() + direction * (self.step.months || 0);
+    self.activeDate.setFullYear(year, month, 1);
+    self.refreshView();
+  };
+
+  $scope.toggleMode = function(direction) {
+    direction = direction || 1;
+
+    if (($scope.datepickerMode === self.maxMode && direction === 1) || ($scope.datepickerMode === self.minMode && direction === -1)) {
+      return;
+    }
+
+    $scope.datepickerMode = self.modes[self.modes.indexOf($scope.datepickerMode) + direction];
+  };
+
+  // Key event mapper
+  $scope.keys = { 13: 'enter', 32: 'space', 33: 'pageup', 34: 'pagedown', 35: 'end', 36: 'home', 37: 'left', 38: 'up', 39: 'right', 40: 'down' };
+
+  var focusElement = function() {
+    self.element[0].focus();
+  };
+
+  $scope.$on('uib:datepicker.focus', focusElement);
+
+  $scope.keydown = function(evt) {
+    var key = $scope.keys[evt.which];
+
+    if (!key || evt.shiftKey || evt.altKey) {
+      return;
+    }
+
+    evt.preventDefault();
+    if (!self.shortcutPropagation) {
+      evt.stopPropagation();
+    }
+
+    if (key === 'enter' || key === 'space') {
+      if (self.isDisabled(self.activeDate)) {
+        return; // do nothing
+      }
+      $scope.select(self.activeDate);
+    } else if (evt.ctrlKey && (key === 'up' || key === 'down')) {
+      $scope.toggleMode(key === 'up' ? 1 : -1);
+    } else {
+      self.handleKeyDown(key, evt);
+      self.refreshView();
+    }
+  };
+}])
+
+.directive('datepicker', ['$log', '$datepickerSuppressWarning', function($log, $datepickerSuppressWarning) {
+  return {
+    replace: true,
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/datepicker/datepicker.html';
+    },
+    scope: {
+      datepickerMode: '=?',
+      dateDisabled: '&',
+      customClass: '&',
+      shortcutPropagation: '&?'
+    },
+    require: ['datepicker', '^ngModel'],
+    controller: 'DatepickerController',
+    controllerAs: 'datepicker',
+    link: function(scope, element, attrs, ctrls) {
+      if (!$datepickerSuppressWarning) {
+        $log.warn('datepicker is now deprecated. Use uib-datepicker instead.');
+      }
+
+      var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+      datepickerCtrl.init(ngModelCtrl);
+    }
+  };
+}])
+
+.directive('daypicker', ['$log', '$datepickerSuppressWarning', function($log, $datepickerSuppressWarning) {
+  return {
+    replace: true,
+    templateUrl: 'template/datepicker/day.html',
+    require: ['^datepicker', 'daypicker'],
+    controller: 'UibDaypickerController',
+    link: function(scope, element, attrs, ctrls) {
+      if (!$datepickerSuppressWarning) {
+        $log.warn('daypicker is now deprecated. Use uib-daypicker instead.');
+      }
+
+      var datepickerCtrl = ctrls[0],
+        daypickerCtrl = ctrls[1];
+
+      daypickerCtrl.init(datepickerCtrl);
+    }
+  };
+}])
+
+.directive('monthpicker', ['$log', '$datepickerSuppressWarning', function($log, $datepickerSuppressWarning) {
+  return {
+    replace: true,
+    templateUrl: 'template/datepicker/month.html',
+    require: ['^datepicker', 'monthpicker'],
+    controller: 'UibMonthpickerController',
+    link: function(scope, element, attrs, ctrls) {
+      if (!$datepickerSuppressWarning) {
+        $log.warn('monthpicker is now deprecated. Use uib-monthpicker instead.');
+      }
+
+      var datepickerCtrl = ctrls[0],
+        monthpickerCtrl = ctrls[1];
+
+      monthpickerCtrl.init(datepickerCtrl);
+    }
+  };
+}])
+
+.directive('yearpicker', ['$log', '$datepickerSuppressWarning', function($log, $datepickerSuppressWarning) {
+  return {
+    replace: true,
+    templateUrl: 'template/datepicker/year.html',
+    require: ['^datepicker', 'yearpicker'],
+    controller: 'UibYearpickerController',
+    link: function(scope, element, attrs, ctrls) {
+      if (!$datepickerSuppressWarning) {
+        $log.warn('yearpicker is now deprecated. Use uib-yearpicker instead.');
+      }
+
+      var ctrl = ctrls[0];
+      angular.extend(ctrl, ctrls[1]);
+      ctrl.yearpickerInit();
+
+      ctrl.refreshView();
+    }
+  };
+}])
+
+.directive('datepickerPopup', ['$log', '$datepickerSuppressWarning', function($log, $datepickerSuppressWarning) {
+  return {
+    require: ['ngModel', 'datepickerPopup'],
+    controller: 'UibDatepickerPopupController',
+    scope: {
+      isOpen: '=?',
+      currentText: '@',
+      clearText: '@',
+      closeText: '@',
+      dateDisabled: '&',
+      customClass: '&'
+    },
+    link: function(scope, element, attrs, ctrls) {
+      if (!$datepickerSuppressWarning) {
+        $log.warn('datepicker-popup is now deprecated. Use uib-datepicker-popup instead.');
+      }
+
+      var ngModel = ctrls[0],
+        ctrl = ctrls[1];
+
+      ctrl.init(ngModel);
+    }
+  };
+}])
+
+.directive('datepickerPopupWrap', ['$log', '$datepickerSuppressWarning', function($log, $datepickerSuppressWarning) {
+  return {
+    replace: true,
+    transclude: true,
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/datepicker/popup.html';
+    },
+    link: function() {
+      if (!$datepickerSuppressWarning) {
+        $log.warn('datepicker-popup-wrap is now deprecated. Use uib-datepicker-popup-wrap instead.');
+      }
+    }
+  };
+}]);
+
+angular.module('ui.bootstrap.dropdown', ['ui.bootstrap.position'])
+
+.constant('uibDropdownConfig', {
+  openClass: 'open'
+})
+
+.service('uibDropdownService', ['$document', '$rootScope', function($document, $rootScope) {
+  var openScope = null;
+
+  this.open = function(dropdownScope) {
+    if (!openScope) {
+      $document.bind('click', closeDropdown);
+      $document.bind('keydown', keybindFilter);
+    }
+
+    if (openScope && openScope !== dropdownScope) {
+      openScope.isOpen = false;
+    }
+
+    openScope = dropdownScope;
+  };
+
+  this.close = function(dropdownScope) {
+    if (openScope === dropdownScope) {
+      openScope = null;
+      $document.unbind('click', closeDropdown);
+      $document.unbind('keydown', keybindFilter);
+    }
+  };
+
+  var closeDropdown = function(evt) {
+    // This method may still be called during the same mouse event that
+    // unbound this event handler. So check openScope before proceeding.
+    if (!openScope) { return; }
+
+    if (evt && openScope.getAutoClose() === 'disabled')  { return ; }
+
+    var toggleElement = openScope.getToggleElement();
+    if (evt && toggleElement && toggleElement[0].contains(evt.target)) {
+      return;
+    }
+
+    var dropdownElement = openScope.getDropdownElement();
+    if (evt && openScope.getAutoClose() === 'outsideClick' &&
+      dropdownElement && dropdownElement[0].contains(evt.target)) {
+      return;
+    }
+
+    openScope.isOpen = false;
+
+    if (!$rootScope.$$phase) {
+      openScope.$apply();
+    }
+  };
+
+  var keybindFilter = function(evt) {
+    if (evt.which === 27) {
+      openScope.focusToggleElement();
+      closeDropdown();
+    } else if (openScope.isKeynavEnabled() && /(38|40)/.test(evt.which) && openScope.isOpen) {
+      evt.preventDefault();
+      evt.stopPropagation();
+      openScope.focusDropdownEntry(evt.which);
+    }
+  };
+}])
+
+.controller('UibDropdownController', ['$scope', '$element', '$attrs', '$parse', 'uibDropdownConfig', 'uibDropdownService', '$animate', '$uibPosition', '$document', '$compile', '$templateRequest', function($scope, $element, $attrs, $parse, dropdownConfig, uibDropdownService, $animate, $position, $document, $compile, $templateRequest) {
+  var self = this,
+    scope = $scope.$new(), // create a child scope so we are not polluting original one
+    templateScope,
+    openClass = dropdownConfig.openClass,
+    getIsOpen,
+    setIsOpen = angular.noop,
+    toggleInvoker = $attrs.onToggle ? $parse($attrs.onToggle) : angular.noop,
+    appendToBody = false,
+    keynavEnabled =false,
+    selectedOption = null;
+
+
+  $element.addClass('dropdown');
+
+  this.init = function() {
+    if ($attrs.isOpen) {
+      getIsOpen = $parse($attrs.isOpen);
+      setIsOpen = getIsOpen.assign;
+
+      $scope.$watch(getIsOpen, function(value) {
+        scope.isOpen = !!value;
+      });
+    }
+
+    appendToBody = angular.isDefined($attrs.dropdownAppendToBody);
+    keynavEnabled = angular.isDefined($attrs.uibKeyboardNav);
+
+    if (appendToBody && self.dropdownMenu) {
+      $document.find('body').append(self.dropdownMenu);
+      $element.on('$destroy', function handleDestroyEvent() {
+        self.dropdownMenu.remove();
+      });
+    }
+  };
+
+  this.toggle = function(open) {
+    return scope.isOpen = arguments.length ? !!open : !scope.isOpen;
+  };
+
+  // Allow other directives to watch status
+  this.isOpen = function() {
+    return scope.isOpen;
+  };
+
+  scope.getToggleElement = function() {
+    return self.toggleElement;
+  };
+
+  scope.getAutoClose = function() {
+    return $attrs.autoClose || 'always'; //or 'outsideClick' or 'disabled'
+  };
+
+  scope.getElement = function() {
+    return $element;
+  };
+
+  scope.isKeynavEnabled = function() {
+    return keynavEnabled;
+  };
+
+  scope.focusDropdownEntry = function(keyCode) {
+    var elems = self.dropdownMenu ? //If append to body is used.
+      (angular.element(self.dropdownMenu).find('a')) :
+      (angular.element($element).find('ul').eq(0).find('a'));
+
+    switch (keyCode) {
+      case (40): {
+        if (!angular.isNumber(self.selectedOption)) {
+          self.selectedOption = 0;
+        } else {
+          self.selectedOption = (self.selectedOption === elems.length - 1 ?
+            self.selectedOption :
+            self.selectedOption + 1);
+        }
+        break;
+      }
+      case (38): {
+        if (!angular.isNumber(self.selectedOption)) {
+          self.selectedOption = elems.length - 1;
+        } else {
+          self.selectedOption = self.selectedOption === 0 ?
+            0 : self.selectedOption - 1;
+        }
+        break;
+      }
+    }
+    elems[self.selectedOption].focus();
+  };
+
+  scope.getDropdownElement = function() {
+    return self.dropdownMenu;
+  };
+
+  scope.focusToggleElement = function() {
+    if (self.toggleElement) {
+      self.toggleElement[0].focus();
+    }
+  };
+
+  scope.$watch('isOpen', function(isOpen, wasOpen) {
+    if (appendToBody && self.dropdownMenu) {
+      var pos = $position.positionElements($element, self.dropdownMenu, 'bottom-left', true);
+      var css = {
+        top: pos.top + 'px',
+        display: isOpen ? 'block' : 'none'
+      };
+
+      var rightalign = self.dropdownMenu.hasClass('dropdown-menu-right');
+      if (!rightalign) {
+        css.left = pos.left + 'px';
+        css.right = 'auto';
+      } else {
+        css.left = 'auto';
+        css.right = (window.innerWidth - (pos.left + $element.prop('offsetWidth'))) + 'px';
+      }
+
+      self.dropdownMenu.css(css);
+    }
+
+    $animate[isOpen ? 'addClass' : 'removeClass']($element, openClass).then(function() {
+      if (angular.isDefined(isOpen) && isOpen !== wasOpen) {
+        toggleInvoker($scope, { open: !!isOpen });
+      }
+    });
+
+    if (isOpen) {
+      if (self.dropdownMenuTemplateUrl) {
+        $templateRequest(self.dropdownMenuTemplateUrl).then(function(tplContent) {
+          templateScope = scope.$new();
+          $compile(tplContent.trim())(templateScope, function(dropdownElement) {
+            var newEl = dropdownElement;
+            self.dropdownMenu.replaceWith(newEl);
+            self.dropdownMenu = newEl;
+          });
+        });
+      }
+
+      scope.focusToggleElement();
+      uibDropdownService.open(scope);
+    } else {
+      if (self.dropdownMenuTemplateUrl) {
+        if (templateScope) {
+          templateScope.$destroy();
+        }
+        var newEl = angular.element('<ul class="dropdown-menu"></ul>');
+        self.dropdownMenu.replaceWith(newEl);
+        self.dropdownMenu = newEl;
+      }
+
+      uibDropdownService.close(scope);
+      self.selectedOption = null;
+    }
+
+    if (angular.isFunction(setIsOpen)) {
+      setIsOpen($scope, isOpen);
+    }
+  });
+
+  $scope.$on('$locationChangeSuccess', function() {
+    if (scope.getAutoClose() !== 'disabled') {
+      scope.isOpen = false;
+    }
+  });
+
+  var offDestroy = $scope.$on('$destroy', function() {
+    scope.$destroy();
+  });
+  scope.$on('$destroy', offDestroy);
+}])
+
+.directive('uibDropdown', function() {
+  return {
+    controller: 'UibDropdownController',
+    link: function(scope, element, attrs, dropdownCtrl) {
+      dropdownCtrl.init();
+    }
+  };
+})
+
+.directive('uibDropdownMenu', function() {
+  return {
+    restrict: 'AC',
+    require: '?^uibDropdown',
+    link: function(scope, element, attrs, dropdownCtrl) {
+      if (!dropdownCtrl || angular.isDefined(attrs.dropdownNested)) {
+        return;
+      }
+
+      element.addClass('dropdown-menu');
+
+      var tplUrl = attrs.templateUrl;
+      if (tplUrl) {
+        dropdownCtrl.dropdownMenuTemplateUrl = tplUrl;
+      }
+
+      if (!dropdownCtrl.dropdownMenu) {
+        dropdownCtrl.dropdownMenu = element;
+      }
+    }
+  };
+})
+
+.directive('uibKeyboardNav', function() {
+  return {
+    restrict: 'A',
+    require: '?^uibDropdown',
+    link: function(scope, element, attrs, dropdownCtrl) {
+      element.bind('keydown', function(e) {
+        if ([38, 40].indexOf(e.which) !== -1) {
+          e.preventDefault();
+          e.stopPropagation();
+
+          var elems = dropdownCtrl.dropdownMenu.find('a');
+
+          switch (e.which) {
+            case (40): { // Down
+              if (!angular.isNumber(dropdownCtrl.selectedOption)) {
+                dropdownCtrl.selectedOption = 0;
+              } else {
+                dropdownCtrl.selectedOption = dropdownCtrl.selectedOption === elems.length -1 ?
+                  dropdownCtrl.selectedOption : dropdownCtrl.selectedOption + 1;
+              }
+              break;
+            }
+            case (38): { // Up
+              if (!angular.isNumber(dropdownCtrl.selectedOption)) {
+                dropdownCtrl.selectedOption = elems.length - 1;
+              } else {
+                dropdownCtrl.selectedOption = dropdownCtrl.selectedOption === 0 ?
+                  0 : dropdownCtrl.selectedOption - 1;
+              }
+              break;
+            }
+          }
+          elems[dropdownCtrl.selectedOption].focus();
+        }
+      });
+    }
+  };
+})
+
+.directive('uibDropdownToggle', function() {
+  return {
+    require: '?^uibDropdown',
+    link: function(scope, element, attrs, dropdownCtrl) {
+      if (!dropdownCtrl) {
+        return;
+      }
+
+      element.addClass('dropdown-toggle');
+
+      dropdownCtrl.toggleElement = element;
+
+      var toggleDropdown = function(event) {
+        event.preventDefault();
+
+        if (!element.hasClass('disabled') && !attrs.disabled) {
+          scope.$apply(function() {
+            dropdownCtrl.toggle();
+          });
+        }
+      };
+
+      element.bind('click', toggleDropdown);
+
+      // WAI-ARIA
+      element.attr({ 'aria-haspopup': true, 'aria-expanded': false });
+      scope.$watch(dropdownCtrl.isOpen, function(isOpen) {
+        element.attr('aria-expanded', !!isOpen);
+      });
+
+      scope.$on('$destroy', function() {
+        element.unbind('click', toggleDropdown);
+      });
+    }
+  };
+});
+
+/* Deprecated dropdown below */
+
+angular.module('ui.bootstrap.dropdown')
+
+.value('$dropdownSuppressWarning', false)
+
+.service('dropdownService', ['$log', '$dropdownSuppressWarning', 'uibDropdownService', function($log, $dropdownSuppressWarning, uibDropdownService) {
+  if (!$dropdownSuppressWarning) {
+    $log.warn('dropdownService is now deprecated. Use uibDropdownService instead.');
+  }
+
+  angular.extend(this, uibDropdownService);
+}])
+
+.controller('DropdownController', ['$scope', '$element', '$attrs', '$parse', 'uibDropdownConfig', 'uibDropdownService', '$animate', '$uibPosition', '$document', '$compile', '$templateRequest', '$log', '$dropdownSuppressWarning', function($scope, $element, $attrs, $parse, dropdownConfig, uibDropdownService, $animate, $position, $document, $compile, $templateRequest, $log, $dropdownSuppressWarning) {
+  if (!$dropdownSuppressWarning) {
+    $log.warn('DropdownController is now deprecated. Use UibDropdownController instead.');
+  }
+
+  var self = this,
+    scope = $scope.$new(), // create a child scope so we are not polluting original one
+    templateScope,
+    openClass = dropdownConfig.openClass,
+    getIsOpen,
+    setIsOpen = angular.noop,
+    toggleInvoker = $attrs.onToggle ? $parse($attrs.onToggle) : angular.noop,
+    appendToBody = false,
+    keynavEnabled =false,
+    selectedOption = null;
+
+
+  $element.addClass('dropdown');
+
+  this.init = function() {
+    if ($attrs.isOpen) {
+      getIsOpen = $parse($attrs.isOpen);
+      setIsOpen = getIsOpen.assign;
+
+      $scope.$watch(getIsOpen, function(value) {
+        scope.isOpen = !!value;
+      });
+    }
+
+    appendToBody = angular.isDefined($attrs.dropdownAppendToBody);
+    keynavEnabled = angular.isDefined($attrs.uibKeyboardNav);
+
+    if (appendToBody && self.dropdownMenu) {
+      $document.find('body').append(self.dropdownMenu);
+      $element.on('$destroy', function handleDestroyEvent() {
+        self.dropdownMenu.remove();
+      });
+    }
+  };
+
+  this.toggle = function(open) {
+    return scope.isOpen = arguments.length ? !!open : !scope.isOpen;
+  };
+
+  // Allow other directives to watch status
+  this.isOpen = function() {
+    return scope.isOpen;
+  };
+
+  scope.getToggleElement = function() {
+    return self.toggleElement;
+  };
+
+  scope.getAutoClose = function() {
+    return $attrs.autoClose || 'always'; //or 'outsideClick' or 'disabled'
+  };
+
+  scope.getElement = function() {
+    return $element;
+  };
+
+  scope.isKeynavEnabled = function() {
+    return keynavEnabled;
+  };
+
+  scope.focusDropdownEntry = function(keyCode) {
+    var elems = self.dropdownMenu ? //If append to body is used.
+      (angular.element(self.dropdownMenu).find('a')) :
+      (angular.element($element).find('ul').eq(0).find('a'));
+
+    switch (keyCode) {
+      case (40): {
+        if (!angular.isNumber(self.selectedOption)) {
+          self.selectedOption = 0;
+        } else {
+          self.selectedOption = (self.selectedOption === elems.length -1 ?
+            self.selectedOption :
+          self.selectedOption + 1);
+        }
+        break;
+      }
+      case (38): {
+        if (!angular.isNumber(self.selectedOption)) {
+          self.selectedOption = elems.length - 1;
+        } else {
+          self.selectedOption = self.selectedOption === 0 ?
+            0 : self.selectedOption - 1;
+        }
+        break;
+      }
+    }
+    elems[self.selectedOption].focus();
+  };
+
+  scope.getDropdownElement = function() {
+    return self.dropdownMenu;
+  };
+
+  scope.focusToggleElement = function() {
+    if (self.toggleElement) {
+      self.toggleElement[0].focus();
+    }
+  };
+
+  scope.$watch('isOpen', function(isOpen, wasOpen) {
+    if (appendToBody && self.dropdownMenu) {
+      var pos = $position.positionElements($element, self.dropdownMenu, 'bottom-left', true);
+      var css = {
+        top: pos.top + 'px',
+        display: isOpen ? 'block' : 'none'
+      };
+
+      var rightalign = self.dropdownMenu.hasClass('dropdown-menu-right');
+      if (!rightalign) {
+        css.left = pos.left + 'px';
+        css.right = 'auto';
+      } else {
+        css.left = 'auto';
+        css.right = (window.innerWidth - (pos.left + $element.prop('offsetWidth'))) + 'px';
+      }
+
+      self.dropdownMenu.css(css);
+    }
+
+    $animate[isOpen ? 'addClass' : 'removeClass']($element, openClass).then(function() {
+      if (angular.isDefined(isOpen) && isOpen !== wasOpen) {
+        toggleInvoker($scope, { open: !!isOpen });
+      }
+    });
+
+    if (isOpen) {
+      if (self.dropdownMenuTemplateUrl) {
+        $templateRequest(self.dropdownMenuTemplateUrl).then(function(tplContent) {
+          templateScope = scope.$new();
+          $compile(tplContent.trim())(templateScope, function(dropdownElement) {
+            var newEl = dropdownElement;
+            self.dropdownMenu.replaceWith(newEl);
+            self.dropdownMenu = newEl;
+          });
+        });
+      }
+
+      scope.focusToggleElement();
+      uibDropdownService.open(scope);
+    } else {
+      if (self.dropdownMenuTemplateUrl) {
+        if (templateScope) {
+          templateScope.$destroy();
+        }
+        var newEl = angular.element('<ul class="dropdown-menu"></ul>');
+        self.dropdownMenu.replaceWith(newEl);
+        self.dropdownMenu = newEl;
+      }
+
+      uibDropdownService.close(scope);
+      self.selectedOption = null;
+    }
+
+    if (angular.isFunction(setIsOpen)) {
+      setIsOpen($scope, isOpen);
+    }
+  });
+
+  $scope.$on('$locationChangeSuccess', function() {
+    if (scope.getAutoClose() !== 'disabled') {
+      scope.isOpen = false;
+    }
+  });
+
+  var offDestroy = $scope.$on('$destroy', function() {
+    scope.$destroy();
+  });
+  scope.$on('$destroy', offDestroy);
+}])
+
+.directive('dropdown', ['$log', '$dropdownSuppressWarning', function($log, $dropdownSuppressWarning) {
+  return {
+    controller: 'DropdownController',
+    link: function(scope, element, attrs, dropdownCtrl) {
+      if (!$dropdownSuppressWarning) {
+        $log.warn('dropdown is now deprecated. Use uib-dropdown instead.');
+      }
+
+      dropdownCtrl.init();
+    }
+  };
+}])
+
+.directive('dropdownMenu', ['$log', '$dropdownSuppressWarning', function($log, $dropdownSuppressWarning) {
+  return {
+    restrict: 'AC',
+    require: '?^dropdown',
+    link: function(scope, element, attrs, dropdownCtrl) {
+      if (!dropdownCtrl || angular.isDefined(attrs.dropdownNested)) {
+        return;
+      }
+
+      if (!$dropdownSuppressWarning) {
+        $log.warn('dropdown-menu is now deprecated. Use uib-dropdown-menu instead.');
+      }
+
+      element.addClass('dropdown-menu');
+
+      var tplUrl = attrs.templateUrl;
+      if (tplUrl) {
+        dropdownCtrl.dropdownMenuTemplateUrl = tplUrl;
+      }
+
+      if (!dropdownCtrl.dropdownMenu) {
+        dropdownCtrl.dropdownMenu = element;
+      }
+    }
+  };
+}])
+
+.directive('keyboardNav', ['$log', '$dropdownSuppressWarning', function($log, $dropdownSuppressWarning) {
+  return {
+    restrict: 'A',
+    require: '?^dropdown',
+    link: function(scope, element, attrs, dropdownCtrl) {
+      if (!$dropdownSuppressWarning) {
+        $log.warn('keyboard-nav is now deprecated. Use uib-keyboard-nav instead.');
+      }
+
+      element.bind('keydown', function(e) {
+        if ([38, 40].indexOf(e.which) !== -1) {
+          e.preventDefault();
+          e.stopPropagation();
+
+          var elems = dropdownCtrl.dropdownMenu.find('a');
+
+          switch (e.which) {
+            case (40): { // Down
+              if (!angular.isNumber(dropdownCtrl.selectedOption)) {
+                dropdownCtrl.selectedOption = 0;
+              } else {
+                dropdownCtrl.selectedOption = dropdownCtrl.selectedOption === elems.length -1 ?
+                  dropdownCtrl.selectedOption : dropdownCtrl.selectedOption + 1;
+              }
+              break;
+            }
+            case (38): { // Up
+              if (!angular.isNumber(dropdownCtrl.selectedOption)) {
+                dropdownCtrl.selectedOption = elems.length - 1;
+              } else {
+                dropdownCtrl.selectedOption = dropdownCtrl.selectedOption === 0 ?
+                  0 : dropdownCtrl.selectedOption - 1;
+              }
+              break;
+            }
+          }
+          elems[dropdownCtrl.selectedOption].focus();
+        }
+      });
+    }
+  };
+}])
+
+.directive('dropdownToggle', ['$log', '$dropdownSuppressWarning', function($log, $dropdownSuppressWarning) {
+  return {
+    require: '?^dropdown',
+    link: function(scope, element, attrs, dropdownCtrl) {
+      if (!$dropdownSuppressWarning) {
+        $log.warn('dropdown-toggle is now deprecated. Use uib-dropdown-toggle instead.');
+      }
+
+      if (!dropdownCtrl) {
+        return;
+      }
+
+      element.addClass('dropdown-toggle');
+
+      dropdownCtrl.toggleElement = element;
+
+      var toggleDropdown = function(event) {
+        event.preventDefault();
+
+        if (!element.hasClass('disabled') && !attrs.disabled) {
+          scope.$apply(function() {
+            dropdownCtrl.toggle();
+          });
+        }
+      };
+
+      element.bind('click', toggleDropdown);
+
+      // WAI-ARIA
+      element.attr({ 'aria-haspopup': true, 'aria-expanded': false });
+      scope.$watch(dropdownCtrl.isOpen, function(isOpen) {
+        element.attr('aria-expanded', !!isOpen);
+      });
+
+      scope.$on('$destroy', function() {
+        element.unbind('click', toggleDropdown);
+      });
+    }
+  };
+}]);
+
+angular.module('ui.bootstrap.stackedMap', [])
+/**
+ * A helper, internal data structure that acts as a map but also allows getting / removing
+ * elements in the LIFO order
+ */
+  .factory('$$stackedMap', function() {
+    return {
+      createNew: function() {
+        var stack = [];
+
+        return {
+          add: function(key, value) {
+            stack.push({
+              key: key,
+              value: value
+            });
+          },
+          get: function(key) {
+            for (var i = 0; i < stack.length; i++) {
+              if (key == stack[i].key) {
+                return stack[i];
+              }
+            }
+          },
+          keys: function() {
+            var keys = [];
+            for (var i = 0; i < stack.length; i++) {
+              keys.push(stack[i].key);
+            }
+            return keys;
+          },
+          top: function() {
+            return stack[stack.length - 1];
+          },
+          remove: function(key) {
+            var idx = -1;
+            for (var i = 0; i < stack.length; i++) {
+              if (key == stack[i].key) {
+                idx = i;
+                break;
+              }
+            }
+            return stack.splice(idx, 1)[0];
+          },
+          removeTop: function() {
+            return stack.splice(stack.length - 1, 1)[0];
+          },
+          length: function() {
+            return stack.length;
+          }
+        };
+      }
+    };
+  });
+angular.module('ui.bootstrap.modal', ['ui.bootstrap.stackedMap'])
+/**
+ * A helper, internal data structure that stores all references attached to key
+ */
+  .factory('$$multiMap', function() {
+    return {
+      createNew: function() {
+        var map = {};
+
+        return {
+          entries: function() {
+            return Object.keys(map).map(function(key) {
+              return {
+                key: key,
+                value: map[key]
+              };
+            });
+          },
+          get: function(key) {
+            return map[key];
+          },
+          hasKey: function(key) {
+            return !!map[key];
+          },
+          keys: function() {
+            return Object.keys(map);
+          },
+          put: function(key, value) {
+            if (!map[key]) {
+              map[key] = [];
+            }
+
+            map[key].push(value);
+          },
+          remove: function(key, value) {
+            var values = map[key];
+
+            if (!values) {
+              return;
+            }
+
+            var idx = values.indexOf(value);
+
+            if (idx !== -1) {
+              values.splice(idx, 1);
+            }
+
+            if (!values.length) {
+              delete map[key];
+            }
+          }
+        };
+      }
+    };
+  })
+
+/**
+ * A helper directive for the $modal service. It creates a backdrop element.
+ */
+  .directive('uibModalBackdrop', [
+           '$animate', '$injector', '$uibModalStack',
+  function($animate ,  $injector,   $modalStack) {
+    var $animateCss = null;
+
+    if ($injector.has('$animateCss')) {
+      $animateCss = $injector.get('$animateCss');
+    }
+
+    return {
+      replace: true,
+      templateUrl: 'template/modal/backdrop.html',
+      compile: function(tElement, tAttrs) {
+        tElement.addClass(tAttrs.backdropClass);
+        return linkFn;
+      }
+    };
+
+    function linkFn(scope, element, attrs) {
+      // Temporary fix for prefixing
+      element.addClass('modal-backdrop');
+
+      if (attrs.modalInClass) {
+        if ($animateCss) {
+          $animateCss(element, {
+            addClass: attrs.modalInClass
+          }).start();
+        } else {
+          $animate.addClass(element, attrs.modalInClass);
+        }
+
+        scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {
+          var done = setIsAsync();
+          if ($animateCss) {
+            $animateCss(element, {
+              removeClass: attrs.modalInClass
+            }).start().then(done);
+          } else {
+            $animate.removeClass(element, attrs.modalInClass).then(done);
+          }
+        });
+      }
+    }
+  }])
+
+  .directive('uibModalWindow', [
+           '$uibModalStack', '$q', '$animate', '$injector',
+  function($modalStack ,  $q ,  $animate,   $injector) {
+    var $animateCss = null;
+
+    if ($injector.has('$animateCss')) {
+      $animateCss = $injector.get('$animateCss');
+    }
+
+    return {
+      scope: {
+        index: '@'
+      },
+      replace: true,
+      transclude: true,
+      templateUrl: function(tElement, tAttrs) {
+        return tAttrs.templateUrl || 'template/modal/window.html';
+      },
+      link: function(scope, element, attrs) {
+        element.addClass(attrs.windowClass || '');
+        element.addClass(attrs.windowTopClass || '');
+        scope.size = attrs.size;
+
+        scope.close = function(evt) {
+          var modal = $modalStack.getTop();
+          if (modal && modal.value.backdrop && modal.value.backdrop !== 'static' && (evt.target === evt.currentTarget)) {
+            evt.preventDefault();
+            evt.stopPropagation();
+            $modalStack.dismiss(modal.key, 'backdrop click');
+          }
+        };
+
+        // moved from template to fix issue #2280
+        element.on('click', scope.close);
+
+        // This property is only added to the scope for the purpose of detecting when this directive is rendered.
+        // We can detect that by using this property in the template associated with this directive and then use
+        // {@link Attribute#$observe} on it. For more details please see {@link TableColumnResize}.
+        scope.$isRendered = true;
+
+        // Deferred object that will be resolved when this modal is render.
+        var modalRenderDeferObj = $q.defer();
+        // Observe function will be called on next digest cycle after compilation, ensuring that the DOM is ready.
+        // In order to use this way of finding whether DOM is ready, we need to observe a scope property used in modal's template.
+        attrs.$observe('modalRender', function(value) {
+          if (value == 'true') {
+            modalRenderDeferObj.resolve();
+          }
+        });
+
+        modalRenderDeferObj.promise.then(function() {
+          var animationPromise = null;
+
+          if (attrs.modalInClass) {
+            if ($animateCss) {
+              animationPromise = $animateCss(element, {
+                addClass: attrs.modalInClass
+              }).start();
+            } else {
+              animationPromise = $animate.addClass(element, attrs.modalInClass);
+            }
+
+            scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {
+              var done = setIsAsync();
+              if ($animateCss) {
+                $animateCss(element, {
+                  removeClass: attrs.modalInClass
+                }).start().then(done);
+              } else {
+                $animate.removeClass(element, attrs.modalInClass).then(done);
+              }
+            });
+          }
+
+
+          $q.when(animationPromise).then(function() {
+            var inputWithAutofocus = element[0].querySelector('[autofocus]');
+            /**
+             * Auto-focusing of a freshly-opened modal element causes any child elements
+             * with the autofocus attribute to lose focus. This is an issue on touch
+             * based devices which will show and then hide the onscreen keyboard.
+             * Attempts to refocus the autofocus element via JavaScript will not reopen
+             * the onscreen keyboard. Fixed by updated the focusing logic to only autofocus
+             * the modal element if the modal does not contain an autofocus element.
+             */
+            if (inputWithAutofocus) {
+              inputWithAutofocus.focus();
+            } else {
+              element[0].focus();
+            }
+          });
+
+          // Notify {@link $modalStack} that modal is rendered.
+          var modal = $modalStack.getTop();
+          if (modal) {
+            $modalStack.modalRendered(modal.key);
+          }
+        });
+      }
+    };
+  }])
+
+  .directive('uibModalAnimationClass', function() {
+    return {
+      compile: function(tElement, tAttrs) {
+        if (tAttrs.modalAnimation) {
+          tElement.addClass(tAttrs.uibModalAnimationClass);
+        }
+      }
+    };
+  })
+
+  .directive('uibModalTransclude', function() {
+    return {
+      link: function($scope, $element, $attrs, controller, $transclude) {
+        $transclude($scope.$parent, function(clone) {
+          $element.empty();
+          $element.append(clone);
+        });
+      }
+    };
+  })
+
+  .factory('$uibModalStack', [
+             '$animate', '$timeout', '$document', '$compile', '$rootScope',
+             '$q',
+             '$injector',
+             '$$multiMap',
+             '$$stackedMap',
+    function($animate ,  $timeout ,  $document ,  $compile ,  $rootScope ,
+              $q,
+              $injector,
+              $$multiMap,
+              $$stackedMap) {
+      var $animateCss = null;
+
+      if ($injector.has('$animateCss')) {
+        $animateCss = $injector.get('$animateCss');
+      }
+
+      var OPENED_MODAL_CLASS = 'modal-open';
+
+      var backdropDomEl, backdropScope;
+      var openedWindows = $$stackedMap.createNew();
+      var openedClasses = $$multiMap.createNew();
+      var $modalStack = {
+        NOW_CLOSING_EVENT: 'modal.stack.now-closing'
+      };
+
+      //Modal focus behavior
+      var focusableElementList;
+      var focusIndex = 0;
+      var tababbleSelector = 'a[href], area[href], input:not([disabled]), ' +
+        'button:not([disabled]),select:not([disabled]), textarea:not([disabled]), ' +
+        'iframe, object, embed, *[tabindex], *[contenteditable=true]';
+
+      function backdropIndex() {
+        var topBackdropIndex = -1;
+        var opened = openedWindows.keys();
+        for (var i = 0; i < opened.length; i++) {
+          if (openedWindows.get(opened[i]).value.backdrop) {
+            topBackdropIndex = i;
+          }
+        }
+        return topBackdropIndex;
+      }
+
+      $rootScope.$watch(backdropIndex, function(newBackdropIndex) {
+        if (backdropScope) {
+          backdropScope.index = newBackdropIndex;
+        }
+      });
+
+      function removeModalWindow(modalInstance, elementToReceiveFocus) {
+        var body = $document.find('body').eq(0);
+        var modalWindow = openedWindows.get(modalInstance).value;
+
+        //clean up the stack
+        openedWindows.remove(modalInstance);
+
+        removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, function() {
+          var modalBodyClass = modalWindow.openedClass || OPENED_MODAL_CLASS;
+          openedClasses.remove(modalBodyClass, modalInstance);
+          body.toggleClass(modalBodyClass, openedClasses.hasKey(modalBodyClass));
+          toggleTopWindowClass(true);
+        });
+        checkRemoveBackdrop();
+
+        //move focus to specified element if available, or else to body
+        if (elementToReceiveFocus && elementToReceiveFocus.focus) {
+          elementToReceiveFocus.focus();
+        } else {
+          body.focus();
+        }
+      }
+
+      // Add or remove "windowTopClass" from the top window in the stack
+      function toggleTopWindowClass(toggleSwitch) {
+        var modalWindow;
+
+        if (openedWindows.length() > 0) {
+          modalWindow = openedWindows.top().value;
+          modalWindow.modalDomEl.toggleClass(modalWindow.windowTopClass || '', toggleSwitch);
+        }
+      }
+
+      function checkRemoveBackdrop() {
+        //remove backdrop if no longer needed
+        if (backdropDomEl && backdropIndex() == -1) {
+          var backdropScopeRef = backdropScope;
+          removeAfterAnimate(backdropDomEl, backdropScope, function() {
+            backdropScopeRef = null;
+          });
+          backdropDomEl = undefined;
+          backdropScope = undefined;
+        }
+      }
+
+      function removeAfterAnimate(domEl, scope, done) {
+        var asyncDeferred;
+        var asyncPromise = null;
+        var setIsAsync = function() {
+          if (!asyncDeferred) {
+            asyncDeferred = $q.defer();
+            asyncPromise = asyncDeferred.promise;
+          }
+
+          return function asyncDone() {
+            asyncDeferred.resolve();
+          };
+        };
+        scope.$broadcast($modalStack.NOW_CLOSING_EVENT, setIsAsync);
+
+        // Note that it's intentional that asyncPromise might be null.
+        // That's when setIsAsync has not been called during the
+        // NOW_CLOSING_EVENT broadcast.
+        return $q.when(asyncPromise).then(afterAnimating);
+
+        function afterAnimating() {
+          if (afterAnimating.done) {
+            return;
+          }
+          afterAnimating.done = true;
+
+          if ($animateCss) {
+            $animateCss(domEl, {
+              event: 'leave'
+            }).start().then(function() {
+              domEl.remove();
+            });
+          } else {
+            $animate.leave(domEl);
+          }
+          scope.$destroy();
+          if (done) {
+            done();
+          }
+        }
+      }
+
+      $document.bind('keydown', function(evt) {
+        if (evt.isDefaultPrevented()) {
+          return evt;
+        }
+
+        var modal = openedWindows.top();
+        if (modal && modal.value.keyboard) {
+          switch (evt.which) {
+            case 27: {
+              evt.preventDefault();
+              $rootScope.$apply(function() {
+                $modalStack.dismiss(modal.key, 'escape key press');
+              });
+              break;
+            }
+            case 9: {
+              $modalStack.loadFocusElementList(modal);
+              var focusChanged = false;
+              if (evt.shiftKey) {
+                if ($modalStack.isFocusInFirstItem(evt)) {
+                  focusChanged = $modalStack.focusLastFocusableElement();
+                }
+              } else {
+                if ($modalStack.isFocusInLastItem(evt)) {
+                  focusChanged = $modalStack.focusFirstFocusableElement();
+                }
+              }
+
+              if (focusChanged) {
+                evt.preventDefault();
+                evt.stopPropagation();
+              }
+              break;
+            }
+          }
+        }
+      });
+
+      $modalStack.open = function(modalInstance, modal) {
+        var modalOpener = $document[0].activeElement,
+          modalBodyClass = modal.openedClass || OPENED_MODAL_CLASS;
+
+        toggleTopWindowClass(false);
+
+        openedWindows.add(modalInstance, {
+          deferred: modal.deferred,
+          renderDeferred: modal.renderDeferred,
+          modalScope: modal.scope,
+          backdrop: modal.backdrop,
+          keyboard: modal.keyboard,
+          openedClass: modal.openedClass,
+          windowTopClass: modal.windowTopClass
+        });
+
+        openedClasses.put(modalBodyClass, modalInstance);
+
+        var body = $document.find('body').eq(0),
+            currBackdropIndex = backdropIndex();
+
+        if (currBackdropIndex >= 0 && !backdropDomEl) {
+          backdropScope = $rootScope.$new(true);
+          backdropScope.index = currBackdropIndex;
+          var angularBackgroundDomEl = angular.element('<div uib-modal-backdrop="modal-backdrop"></div>');
+          angularBackgroundDomEl.attr('backdrop-class', modal.backdropClass);
+          if (modal.animation) {
+            angularBackgroundDomEl.attr('modal-animation', 'true');
+          }
+          backdropDomEl = $compile(angularBackgroundDomEl)(backdropScope);
+          body.append(backdropDomEl);
+        }
+
+        var angularDomEl = angular.element('<div uib-modal-window="modal-window"></div>');
+        angularDomEl.attr({
+          'template-url': modal.windowTemplateUrl,
+          'window-class': modal.windowClass,
+          'window-top-class': modal.windowTopClass,
+          'size': modal.size,
+          'index': openedWindows.length() - 1,
+          'animate': 'animate'
+        }).html(modal.content);
+        if (modal.animation) {
+          angularDomEl.attr('modal-animation', 'true');
+        }
+
+        var modalDomEl = $compile(angularDomEl)(modal.scope);
+        openedWindows.top().value.modalDomEl = modalDomEl;
+        openedWindows.top().value.modalOpener = modalOpener;
+        body.append(modalDomEl);
+        body.addClass(modalBodyClass);
+
+        $modalStack.clearFocusListCache();
+      };
+
+      function broadcastClosing(modalWindow, resultOrReason, closing) {
+        return !modalWindow.value.modalScope.$broadcast('modal.closing', resultOrReason, closing).defaultPrevented;
+      }
+
+      $modalStack.close = function(modalInstance, result) {
+        var modalWindow = openedWindows.get(modalInstance);
+        if (modalWindow && broadcastClosing(modalWindow, result, true)) {
+          modalWindow.value.modalScope.$$uibDestructionScheduled = true;
+          modalWindow.value.deferred.resolve(result);
+          removeModalWindow(modalInstance, modalWindow.value.modalOpener);
+          return true;
+        }
+        return !modalWindow;
+      };
+
+      $modalStack.dismiss = function(modalInstance, reason) {
+        var modalWindow = openedWindows.get(modalInstance);
+        if (modalWindow && broadcastClosing(modalWindow, reason, false)) {
+          modalWindow.value.modalScope.$$uibDestructionScheduled = true;
+          modalWindow.value.deferred.reject(reason);
+          removeModalWindow(modalInstance, modalWindow.value.modalOpener);
+          return true;
+        }
+        return !modalWindow;
+      };
+
+      $modalStack.dismissAll = function(reason) {
+        var topModal = this.getTop();
+        while (topModal && this.dismiss(topModal.key, reason)) {
+          topModal = this.getTop();
+        }
+      };
+
+      $modalStack.getTop = function() {
+        return openedWindows.top();
+      };
+
+      $modalStack.modalRendered = function(modalInstance) {
+        var modalWindow = openedWindows.get(modalInstance);
+        if (modalWindow) {
+          modalWindow.value.renderDeferred.resolve();
+        }
+      };
+
+      $modalStack.focusFirstFocusableElement = function() {
+        if (focusableElementList.length > 0) {
+          focusableElementList[0].focus();
+          return true;
+        }
+        return false;
+      };
+      $modalStack.focusLastFocusableElement = function() {
+        if (focusableElementList.length > 0) {
+          focusableElementList[focusableElementList.length - 1].focus();
+          return true;
+        }
+        return false;
+      };
+
+      $modalStack.isFocusInFirstItem = function(evt) {
+        if (focusableElementList.length > 0) {
+          return (evt.target || evt.srcElement) == focusableElementList[0];
+        }
+        return false;
+      };
+
+      $modalStack.isFocusInLastItem = function(evt) {
+        if (focusableElementList.length > 0) {
+          return (evt.target || evt.srcElement) == focusableElementList[focusableElementList.length - 1];
+        }
+        return false;
+      };
+
+      $modalStack.clearFocusListCache = function() {
+        focusableElementList = [];
+        focusIndex = 0;
+      };
+
+      $modalStack.loadFocusElementList = function(modalWindow) {
+        if (focusableElementList === undefined || !focusableElementList.length) {
+          if (modalWindow) {
+            var modalDomE1 = modalWindow.value.modalDomEl;
+            if (modalDomE1 && modalDomE1.length) {
+              focusableElementList = modalDomE1[0].querySelectorAll(tababbleSelector);
+            }
+          }
+        }
+      };
+
+      return $modalStack;
+    }])
+
+  .provider('$uibModal', function() {
+    var $modalProvider = {
+      options: {
+        animation: true,
+        backdrop: true, //can also be false or 'static'
+        keyboard: true
+      },
+      $get: ['$injector', '$rootScope', '$q', '$templateRequest', '$controller', '$uibModalStack', '$modalSuppressWarning', '$log',
+        function ($injector, $rootScope, $q, $templateRequest, $controller, $modalStack, $modalSuppressWarning, $log) {
+          var $modal = {};
+
+          function getTemplatePromise(options) {
+            return options.template ? $q.when(options.template) :
+              $templateRequest(angular.isFunction(options.templateUrl) ? (options.templateUrl)() : options.templateUrl);
+          }
+
+          function getResolvePromises(resolves) {
+            var promisesArr = [];
+            angular.forEach(resolves, function(value) {
+              if (angular.isFunction(value) || angular.isArray(value)) {
+                promisesArr.push($q.when($injector.invoke(value)));
+              } else if (angular.isString(value)) {
+                promisesArr.push($q.when($injector.get(value)));
+              } else {
+                promisesArr.push($q.when(value));
+              }
+            });
+            return promisesArr;
+          }
+
+          var promiseChain = null;
+          $modal.getPromiseChain = function() {
+            return promiseChain;
+          };
+
+          $modal.open = function(modalOptions) {
+            var modalResultDeferred = $q.defer();
+            var modalOpenedDeferred = $q.defer();
+            var modalRenderDeferred = $q.defer();
+
+            //prepare an instance of a modal to be injected into controllers and returned to a caller
+            var modalInstance = {
+              result: modalResultDeferred.promise,
+              opened: modalOpenedDeferred.promise,
+              rendered: modalRenderDeferred.promise,
+              close: function (result) {
+                return $modalStack.close(modalInstance, result);
+              },
+              dismiss: function (reason) {
+                return $modalStack.dismiss(modalInstance, reason);
+              }
+            };
+
+            //merge and clean up options
+            modalOptions = angular.extend({}, $modalProvider.options, modalOptions);
+            modalOptions.resolve = modalOptions.resolve || {};
+
+            //verify options
+            if (!modalOptions.template && !modalOptions.templateUrl) {
+              throw new Error('One of template or templateUrl options is required.');
+            }
+
+            var templateAndResolvePromise =
+              $q.all([getTemplatePromise(modalOptions)].concat(getResolvePromises(modalOptions.resolve)));
+
+            function resolveWithTemplate() {
+              return templateAndResolvePromise;
+            }
+
+            // Wait for the resolution of the existing promise chain.
+            // Then switch to our own combined promise dependency (regardless of how the previous modal fared).
+            // Then add to $modalStack and resolve opened.
+            // Finally clean up the chain variable if no subsequent modal has overwritten it.
+            var samePromise;
+            samePromise = promiseChain = $q.all([promiseChain])
+              .then(resolveWithTemplate, resolveWithTemplate)
+              .then(function resolveSuccess(tplAndVars) {
+
+                var modalScope = (modalOptions.scope || $rootScope).$new();
+                modalScope.$close = modalInstance.close;
+                modalScope.$dismiss = modalInstance.dismiss;
+
+                modalScope.$on('$destroy', function() {
+                  if (!modalScope.$$uibDestructionScheduled) {
+                    modalScope.$dismiss('$uibUnscheduledDestruction');
+                  }
+                });
+
+                var ctrlInstance, ctrlLocals = {};
+                var resolveIter = 1;
+
+                //controllers
+                if (modalOptions.controller) {
+                  ctrlLocals.$scope = modalScope;
+                  ctrlLocals.$uibModalInstance = modalInstance;
+                  Object.defineProperty(ctrlLocals, '$modalInstance', {
+                    get: function() {
+                      if (!$modalSuppressWarning) {
+                        $log.warn('$modalInstance is now deprecated. Use $uibModalInstance instead.');
+                      }
+
+                      return modalInstance;
+                    }
+                  });
+                  angular.forEach(modalOptions.resolve, function(value, key) {
+                    ctrlLocals[key] = tplAndVars[resolveIter++];
+                  });
+
+                  ctrlInstance = $controller(modalOptions.controller, ctrlLocals);
+                  if (modalOptions.controllerAs) {
+                    if (modalOptions.bindToController) {
+                      angular.extend(ctrlInstance, modalScope);
+                    }
+
+                    modalScope[modalOptions.controllerAs] = ctrlInstance;
+                  }
+                }
+
+                $modalStack.open(modalInstance, {
+                  scope: modalScope,
+                  deferred: modalResultDeferred,
+                  renderDeferred: modalRenderDeferred,
+                  content: tplAndVars[0],
+                  animation: modalOptions.animation,
+                  backdrop: modalOptions.backdrop,
+                  keyboard: modalOptions.keyboard,
+                  backdropClass: modalOptions.backdropClass,
+                  windowTopClass: modalOptions.windowTopClass,
+                  windowClass: modalOptions.windowClass,
+                  windowTemplateUrl: modalOptions.windowTemplateUrl,
+                  size: modalOptions.size,
+                  openedClass: modalOptions.openedClass
+                });
+                modalOpenedDeferred.resolve(true);
+
+            }, function resolveError(reason) {
+              modalOpenedDeferred.reject(reason);
+              modalResultDeferred.reject(reason);
+            })
+            .finally(function() {
+              if (promiseChain === samePromise) {
+                promiseChain = null;
+              }
+            });
+
+            return modalInstance;
+          };
+
+          return $modal;
+        }
+      ]
+    };
+
+    return $modalProvider;
+  });
+
+/* deprecated modal below */
+
+angular.module('ui.bootstrap.modal')
+
+  .value('$modalSuppressWarning', false)
+
+  /**
+   * A helper directive for the $modal service. It creates a backdrop element.
+   */
+  .directive('modalBackdrop', [
+    '$animate', '$injector', '$modalStack', '$log', '$modalSuppressWarning',
+    function($animate ,  $injector,   $modalStack, $log, $modalSuppressWarning) {
+      var $animateCss = null;
+
+      if ($injector.has('$animateCss')) {
+        $animateCss = $injector.get('$animateCss');
+      }
+
+      return {
+        replace: true,
+        templateUrl: 'template/modal/backdrop.html',
+        compile: function(tElement, tAttrs) {
+          tElement.addClass(tAttrs.backdropClass);
+          return linkFn;
+        }
+      };
+
+      function linkFn(scope, element, attrs) {
+        if (!$modalSuppressWarning) {
+          $log.warn('modal-backdrop is now deprecated. Use uib-modal-backdrop instead.');
+        }
+        element.addClass('modal-backdrop');
+
+        if (attrs.modalInClass) {
+          if ($animateCss) {
+            $animateCss(element, {
+              addClass: attrs.modalInClass
+            }).start();
+          } else {
+            $animate.addClass(element, attrs.modalInClass);
+          }
+
+          scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {
+            var done = setIsAsync();
+            if ($animateCss) {
+              $animateCss(element, {
+                removeClass: attrs.modalInClass
+              }).start().then(done);
+            } else {
+              $animate.removeClass(element, attrs.modalInClass).then(done);
+            }
+          });
+        }
+      }
+    }])
+
+  .directive('modalWindow', [
+    '$modalStack', '$q', '$animate', '$injector', '$log', '$modalSuppressWarning',
+    function($modalStack ,  $q ,  $animate,   $injector, $log, $modalSuppressWarning) {
+      var $animateCss = null;
+
+      if ($injector.has('$animateCss')) {
+        $animateCss = $injector.get('$animateCss');
+      }
+
+      return {
+        scope: {
+          index: '@'
+        },
+        replace: true,
+        transclude: true,
+        templateUrl: function(tElement, tAttrs) {
+          return tAttrs.templateUrl || 'template/modal/window.html';
+        },
+        link: function(scope, element, attrs) {
+          if (!$modalSuppressWarning) {
+            $log.warn('modal-window is now deprecated. Use uib-modal-window instead.');
+          }
+          element.addClass(attrs.windowClass || '');
+          element.addClass(attrs.windowTopClass || '');
+          scope.size = attrs.size;
+
+          scope.close = function(evt) {
+            var modal = $modalStack.getTop();
+            if (modal && modal.value.backdrop && modal.value.backdrop !== 'static' && (evt.target === evt.currentTarget)) {
+              evt.preventDefault();
+              evt.stopPropagation();
+              $modalStack.dismiss(modal.key, 'backdrop click');
+            }
+          };
+
+          // moved from template to fix issue #2280
+          element.on('click', scope.close);
+
+          // This property is only added to the scope for the purpose of detecting when this directive is rendered.
+          // We can detect that by using this property in the template associated with this directive and then use
+          // {@link Attribute#$observe} on it. For more details please see {@link TableColumnResize}.
+          scope.$isRendered = true;
+
+          // Deferred object that will be resolved when this modal is render.
+          var modalRenderDeferObj = $q.defer();
+          // Observe function will be called on next digest cycle after compilation, ensuring that the DOM is ready.
+          // In order to use this way of finding whether DOM is ready, we need to observe a scope property used in modal's template.
+          attrs.$observe('modalRender', function(value) {
+            if (value == 'true') {
+              modalRenderDeferObj.resolve();
+            }
+          });
+
+          modalRenderDeferObj.promise.then(function() {
+            var animationPromise = null;
+
+            if (attrs.modalInClass) {
+              if ($animateCss) {
+                animationPromise = $animateCss(element, {
+                  addClass: attrs.modalInClass
+                }).start();
+              } else {
+                animationPromise = $animate.addClass(element, attrs.modalInClass);
+              }
+
+              scope.$on($modalStack.NOW_CLOSING_EVENT, function(e, setIsAsync) {
+                var done = setIsAsync();
+                if ($animateCss) {
+                  $animateCss(element, {
+                    removeClass: attrs.modalInClass
+                  }).start().then(done);
+                } else {
+                  $animate.removeClass(element, attrs.modalInClass).then(done);
+                }
+              });
+            }
+
+
+            $q.when(animationPromise).then(function() {
+              var inputWithAutofocus = element[0].querySelector('[autofocus]');
+              /**
+               * Auto-focusing of a freshly-opened modal element causes any child elements
+               * with the autofocus attribute to lose focus. This is an issue on touch
+               * based devices which will show and then hide the onscreen keyboard.
+               * Attempts to refocus the autofocus element via JavaScript will not reopen
+               * the onscreen keyboard. Fixed by updated the focusing logic to only autofocus
+               * the modal element if the modal does not contain an autofocus element.
+               */
+              if (inputWithAutofocus) {
+                inputWithAutofocus.focus();
+              } else {
+                element[0].focus();
+              }
+            });
+
+            // Notify {@link $modalStack} that modal is rendered.
+            var modal = $modalStack.getTop();
+            if (modal) {
+              $modalStack.modalRendered(modal.key);
+            }
+          });
+        }
+      };
+    }])
+
+  .directive('modalAnimationClass', [
+    '$log', '$modalSuppressWarning',
+    function ($log, $modalSuppressWarning) {
+      return {
+        compile: function(tElement, tAttrs) {
+          if (!$modalSuppressWarning) {
+            $log.warn('modal-animation-class is now deprecated. Use uib-modal-animation-class instead.');
+          }
+          if (tAttrs.modalAnimation) {
+            tElement.addClass(tAttrs.modalAnimationClass);
+          }
+        }
+      };
+    }])
+
+  .directive('modalTransclude', [
+    '$log', '$modalSuppressWarning',
+    function ($log, $modalSuppressWarning) {
+    return {
+      link: function($scope, $element, $attrs, controller, $transclude) {
+        if (!$modalSuppressWarning) {
+          $log.warn('modal-transclude is now deprecated. Use uib-modal-transclude instead.');
+        }
+        $transclude($scope.$parent, function(clone) {
+          $element.empty();
+          $element.append(clone);
+        });
+      }
+    };
+  }])
+
+  .service('$modalStack', [
+    '$animate', '$timeout', '$document', '$compile', '$rootScope',
+    '$q',
+    '$injector',
+    '$$multiMap',
+    '$$stackedMap',
+    '$uibModalStack',
+    '$log',
+    '$modalSuppressWarning',
+    function($animate ,  $timeout ,  $document ,  $compile ,  $rootScope ,
+             $q,
+             $injector,
+             $$multiMap,
+             $$stackedMap,
+             $uibModalStack,
+             $log,
+             $modalSuppressWarning) {
+      if (!$modalSuppressWarning) {
+        $log.warn('$modalStack is now deprecated. Use $uibModalStack instead.');
+      }
+
+      angular.extend(this, $uibModalStack);
+    }])
+
+  .provider('$modal', ['$uibModalProvider', function($uibModalProvider) {
+    angular.extend(this, $uibModalProvider);
+
+    this.$get = ['$injector', '$log', '$modalSuppressWarning',
+      function ($injector, $log, $modalSuppressWarning) {
+        if (!$modalSuppressWarning) {
+          $log.warn('$modal is now deprecated. Use $uibModal instead.');
+        }
+
+        return $injector.invoke($uibModalProvider.$get);
+      }];
+  }]);
+
+angular.module('ui.bootstrap.pagination', [])
+.controller('UibPaginationController', ['$scope', '$attrs', '$parse', function($scope, $attrs, $parse) {
+  var self = this,
+      ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl
+      setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop;
+
+  this.init = function(ngModelCtrl_, config) {
+    ngModelCtrl = ngModelCtrl_;
+    this.config = config;
+
+    ngModelCtrl.$render = function() {
+      self.render();
+    };
+
+    if ($attrs.itemsPerPage) {
+      $scope.$parent.$watch($parse($attrs.itemsPerPage), function(value) {
+        self.itemsPerPage = parseInt(value, 10);
+        $scope.totalPages = self.calculateTotalPages();
+      });
+    } else {
+      this.itemsPerPage = config.itemsPerPage;
+    }
+
+    $scope.$watch('totalItems', function() {
+      $scope.totalPages = self.calculateTotalPages();
+    });
+
+    $scope.$watch('totalPages', function(value) {
+      setNumPages($scope.$parent, value); // Readonly variable
+
+      if ( $scope.page > value ) {
+        $scope.selectPage(value);
+      } else {
+        ngModelCtrl.$render();
+      }
+    });
+  };
+
+  this.calculateTotalPages = function() {
+    var totalPages = this.itemsPerPage < 1 ? 1 : Math.ceil($scope.totalItems / this.itemsPerPage);
+    return Math.max(totalPages || 0, 1);
+  };
+
+  this.render = function() {
+    $scope.page = parseInt(ngModelCtrl.$viewValue, 10) || 1;
+  };
+
+  $scope.selectPage = function(page, evt) {
+    if (evt) {
+      evt.preventDefault();
+    }
+
+    var clickAllowed = !$scope.ngDisabled || !evt;
+    if (clickAllowed && $scope.page !== page && page > 0 && page <= $scope.totalPages) {
+      if (evt && evt.target) {
+        evt.target.blur();
+      }
+      ngModelCtrl.$setViewValue(page);
+      ngModelCtrl.$render();
+    }
+  };
+
+  $scope.getText = function(key) {
+    return $scope[key + 'Text'] || self.config[key + 'Text'];
+  };
+
+  $scope.noPrevious = function() {
+    return $scope.page === 1;
+  };
+
+  $scope.noNext = function() {
+    return $scope.page === $scope.totalPages;
+  };
+}])
+
+.constant('uibPaginationConfig', {
+  itemsPerPage: 10,
+  boundaryLinks: false,
+  directionLinks: true,
+  firstText: 'First',
+  previousText: 'Previous',
+  nextText: 'Next',
+  lastText: 'Last',
+  rotate: true
+})
+
+.directive('uibPagination', ['$parse', 'uibPaginationConfig', function($parse, paginationConfig) {
+  return {
+    restrict: 'EA',
+    scope: {
+      totalItems: '=',
+      firstText: '@',
+      previousText: '@',
+      nextText: '@',
+      lastText: '@',
+      ngDisabled:'='
+    },
+    require: ['uibPagination', '?ngModel'],
+    controller: 'UibPaginationController',
+    controllerAs: 'pagination',
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/pagination/pagination.html';
+    },
+    replace: true,
+    link: function(scope, element, attrs, ctrls) {
+      var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+      if (!ngModelCtrl) {
+         return; // do nothing if no ng-model
+      }
+
+      // Setup configuration parameters
+      var maxSize = angular.isDefined(attrs.maxSize) ? scope.$parent.$eval(attrs.maxSize) : paginationConfig.maxSize,
+          rotate = angular.isDefined(attrs.rotate) ? scope.$parent.$eval(attrs.rotate) : paginationConfig.rotate;
+      scope.boundaryLinks = angular.isDefined(attrs.boundaryLinks) ? scope.$parent.$eval(attrs.boundaryLinks) : paginationConfig.boundaryLinks;
+      scope.directionLinks = angular.isDefined(attrs.directionLinks) ? scope.$parent.$eval(attrs.directionLinks) : paginationConfig.directionLinks;
+
+      paginationCtrl.init(ngModelCtrl, paginationConfig);
+
+      if (attrs.maxSize) {
+        scope.$parent.$watch($parse(attrs.maxSize), function(value) {
+          maxSize = parseInt(value, 10);
+          paginationCtrl.render();
+        });
+      }
+
+      // Create page object used in template
+      function makePage(number, text, isActive) {
+        return {
+          number: number,
+          text: text,
+          active: isActive
+        };
+      }
+
+      function getPages(currentPage, totalPages) {
+        var pages = [];
+
+        // Default page limits
+        var startPage = 1, endPage = totalPages;
+        var isMaxSized = angular.isDefined(maxSize) && maxSize < totalPages;
+
+        // recompute if maxSize
+        if (isMaxSized) {
+          if (rotate) {
+            // Current page is displayed in the middle of the visible ones
+            startPage = Math.max(currentPage - Math.floor(maxSize/2), 1);
+            endPage   = startPage + maxSize - 1;
+
+            // Adjust if limit is exceeded
+            if (endPage > totalPages) {
+              endPage   = totalPages;
+              startPage = endPage - maxSize + 1;
+            }
+          } else {
+            // Visible pages are paginated with maxSize
+            startPage = ((Math.ceil(currentPage / maxSize) - 1) * maxSize) + 1;
+
+            // Adjust last page if limit is exceeded
+            endPage = Math.min(startPage + maxSize - 1, totalPages);
+          }
+        }
+
+        // Add page number links
+        for (var number = startPage; number <= endPage; number++) {
+          var page = makePage(number, number, number === currentPage);
+          pages.push(page);
+        }
+
+        // Add links to move between page sets
+        if (isMaxSized && ! rotate) {
+          if (startPage > 1) {
+            var previousPageSet = makePage(startPage - 1, '...', false);
+            pages.unshift(previousPageSet);
+          }
+
+          if (endPage < totalPages) {
+            var nextPageSet = makePage(endPage + 1, '...', false);
+            pages.push(nextPageSet);
+          }
+        }
+
+        return pages;
+      }
+
+      var originalRender = paginationCtrl.render;
+      paginationCtrl.render = function() {
+        originalRender();
+        if (scope.page > 0 && scope.page <= scope.totalPages) {
+          scope.pages = getPages(scope.page, scope.totalPages);
+        }
+      };
+    }
+  };
+}])
+
+.constant('uibPagerConfig', {
+  itemsPerPage: 10,
+  previousText: '« Previous',
+  nextText: 'Next »',
+  align: true
+})
+
+.directive('uibPager', ['uibPagerConfig', function(pagerConfig) {
+  return {
+    restrict: 'EA',
+    scope: {
+      totalItems: '=',
+      previousText: '@',
+      nextText: '@',
+      ngDisabled: '='
+    },
+    require: ['uibPager', '?ngModel'],
+    controller: 'UibPaginationController',
+    controllerAs: 'pagination',
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/pagination/pager.html';
+    },
+    replace: true,
+    link: function(scope, element, attrs, ctrls) {
+      var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+      if (!ngModelCtrl) {
+         return; // do nothing if no ng-model
+      }
+
+      scope.align = angular.isDefined(attrs.align) ? scope.$parent.$eval(attrs.align) : pagerConfig.align;
+      paginationCtrl.init(ngModelCtrl, pagerConfig);
+    }
+  };
+}]);
+
+/* Deprecated Pagination Below */
+
+angular.module('ui.bootstrap.pagination')
+.value('$paginationSuppressWarning', false)
+.controller('PaginationController', ['$scope', '$attrs', '$parse', '$log', '$paginationSuppressWarning', function($scope, $attrs, $parse, $log, $paginationSuppressWarning) {
+  if (!$paginationSuppressWarning) {
+    $log.warn('PaginationController is now deprecated. Use UibPaginationController instead.');
+  }
+
+  var self = this,
+    ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl
+    setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop;
+
+  this.init = function(ngModelCtrl_, config) {
+    ngModelCtrl = ngModelCtrl_;
+    this.config = config;
+
+    ngModelCtrl.$render = function() {
+      self.render();
+    };
+
+    if ($attrs.itemsPerPage) {
+      $scope.$parent.$watch($parse($attrs.itemsPerPage), function(value) {
+        self.itemsPerPage = parseInt(value, 10);
+        $scope.totalPages = self.calculateTotalPages();
+      });
+    } else {
+      this.itemsPerPage = config.itemsPerPage;
+    }
+
+    $scope.$watch('totalItems', function() {
+      $scope.totalPages = self.calculateTotalPages();
+    });
+
+    $scope.$watch('totalPages', function(value) {
+      setNumPages($scope.$parent, value); // Readonly variable
+
+      if ( $scope.page > value ) {
+        $scope.selectPage(value);
+      } else {
+        ngModelCtrl.$render();
+      }
+    });
+  };
+
+  this.calculateTotalPages = function() {
+    var totalPages = this.itemsPerPage < 1 ? 1 : Math.ceil($scope.totalItems / this.itemsPerPage);
+    return Math.max(totalPages || 0, 1);
+  };
+
+  this.render = function() {
+    $scope.page = parseInt(ngModelCtrl.$viewValue, 10) || 1;
+  };
+
+  $scope.selectPage = function(page, evt) {
+    if (evt) {
+      evt.preventDefault();
+    }
+
+    var clickAllowed = !$scope.ngDisabled || !evt;
+    if (clickAllowed && $scope.page !== page && page > 0 && page <= $scope.totalPages) {
+      if (evt && evt.target) {
+        evt.target.blur();
+      }
+      ngModelCtrl.$setViewValue(page);
+      ngModelCtrl.$render();
+    }
+  };
+
+  $scope.getText = function(key) {
+    return $scope[key + 'Text'] || self.config[key + 'Text'];
+  };
+
+  $scope.noPrevious = function() {
+    return $scope.page === 1;
+  };
+
+  $scope.noNext = function() {
+    return $scope.page === $scope.totalPages;
+  };
+}])
+.directive('pagination', ['$parse', 'uibPaginationConfig', '$log', '$paginationSuppressWarning', function($parse, paginationConfig, $log, $paginationSuppressWarning) {
+  return {
+    restrict: 'EA',
+    scope: {
+      totalItems: '=',
+      firstText: '@',
+      previousText: '@',
+      nextText: '@',
+      lastText: '@',
+      ngDisabled:'='
+    },
+    require: ['pagination', '?ngModel'],
+    controller: 'PaginationController',
+    controllerAs: 'pagination',
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/pagination/pagination.html';
+    },
+    replace: true,
+    link: function(scope, element, attrs, ctrls) {
+      if (!$paginationSuppressWarning) {
+        $log.warn('pagination is now deprecated. Use uib-pagination instead.');
+      }
+      var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+      if (!ngModelCtrl) {
+         return; // do nothing if no ng-model
+      }
+
+      // Setup configuration parameters
+      var maxSize = angular.isDefined(attrs.maxSize) ? scope.$parent.$eval(attrs.maxSize) : paginationConfig.maxSize,
+          rotate = angular.isDefined(attrs.rotate) ? scope.$parent.$eval(attrs.rotate) : paginationConfig.rotate;
+      scope.boundaryLinks = angular.isDefined(attrs.boundaryLinks) ? scope.$parent.$eval(attrs.boundaryLinks) : paginationConfig.boundaryLinks;
+      scope.directionLinks = angular.isDefined(attrs.directionLinks) ? scope.$parent.$eval(attrs.directionLinks) : paginationConfig.directionLinks;
+
+      paginationCtrl.init(ngModelCtrl, paginationConfig);
+
+      if (attrs.maxSize) {
+        scope.$parent.$watch($parse(attrs.maxSize), function(value) {
+          maxSize = parseInt(value, 10);
+          paginationCtrl.render();
+        });
+      }
+
+      // Create page object used in template
+      function makePage(number, text, isActive) {
+        return {
+          number: number,
+          text: text,
+          active: isActive
+        };
+      }
+
+      function getPages(currentPage, totalPages) {
+        var pages = [];
+
+        // Default page limits
+        var startPage = 1, endPage = totalPages;
+        var isMaxSized = angular.isDefined(maxSize) && maxSize < totalPages;
+
+        // recompute if maxSize
+        if (isMaxSized) {
+          if (rotate) {
+            // Current page is displayed in the middle of the visible ones
+            startPage = Math.max(currentPage - Math.floor(maxSize/2), 1);
+            endPage   = startPage + maxSize - 1;
+
+            // Adjust if limit is exceeded
+            if (endPage > totalPages) {
+              endPage   = totalPages;
+              startPage = endPage - maxSize + 1;
+            }
+          } else {
+            // Visible pages are paginated with maxSize
+            startPage = ((Math.ceil(currentPage / maxSize) - 1) * maxSize) + 1;
+
+            // Adjust last page if limit is exceeded
+            endPage = Math.min(startPage + maxSize - 1, totalPages);
+          }
+        }
+
+        // Add page number links
+        for (var number = startPage; number <= endPage; number++) {
+          var page = makePage(number, number, number === currentPage);
+          pages.push(page);
+        }
+
+        // Add links to move between page sets
+        if (isMaxSized && ! rotate) {
+          if (startPage > 1) {
+            var previousPageSet = makePage(startPage - 1, '...', false);
+            pages.unshift(previousPageSet);
+          }
+
+          if (endPage < totalPages) {
+            var nextPageSet = makePage(endPage + 1, '...', false);
+            pages.push(nextPageSet);
+          }
+        }
+
+        return pages;
+      }
+
+      var originalRender = paginationCtrl.render;
+      paginationCtrl.render = function() {
+        originalRender();
+        if (scope.page > 0 && scope.page <= scope.totalPages) {
+          scope.pages = getPages(scope.page, scope.totalPages);
+        }
+      };
+    }
+  };
+}])
+
+.directive('pager', ['uibPagerConfig', '$log', '$paginationSuppressWarning', function(pagerConfig, $log, $paginationSuppressWarning) {
+  return {
+    restrict: 'EA',
+    scope: {
+      totalItems: '=',
+      previousText: '@',
+      nextText: '@',
+      ngDisabled: '='
+    },
+    require: ['pager', '?ngModel'],
+    controller: 'PaginationController',
+    controllerAs: 'pagination',
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/pagination/pager.html';
+    },
+    replace: true,
+    link: function(scope, element, attrs, ctrls) {
+      if (!$paginationSuppressWarning) {
+        $log.warn('pager is now deprecated. Use uib-pager instead.');
+      }
+      var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+      if (!ngModelCtrl) {
+         return; // do nothing if no ng-model
+      }
+
+      scope.align = angular.isDefined(attrs.align) ? scope.$parent.$eval(attrs.align) : pagerConfig.align;
+      paginationCtrl.init(ngModelCtrl, pagerConfig);
+    }
+  };
+}]);
+
+/**
+ * The following features are still outstanding: animation as a
+ * function, placement as a function, inside, support for more triggers than
+ * just mouse enter/leave, html tooltips, and selector delegation.
+ */
+angular.module('ui.bootstrap.tooltip', ['ui.bootstrap.position', 'ui.bootstrap.stackedMap'])
+
+/**
+ * The $tooltip service creates tooltip- and popover-like directives as well as
+ * houses global options for them.
+ */
+.provider('$uibTooltip', function() {
+  // The default options tooltip and popover.
+  var defaultOptions = {
+    placement: 'top',
+    animation: true,
+    popupDelay: 0,
+    popupCloseDelay: 0,
+    useContentExp: false
+  };
+
+  // Default hide triggers for each show trigger
+  var triggerMap = {
+    'mouseenter': 'mouseleave',
+    'click': 'click',
+    'focus': 'blur',
+    'none': ''
+  };
+
+  // The options specified to the provider globally.
+  var globalOptions = {};
+
+  /**
+   * `options({})` allows global configuration of all tooltips in the
+   * application.
+   *
+   *   var app = angular.module( 'App', ['ui.bootstrap.tooltip'], function( $tooltipProvider ) {
+   *     // place tooltips left instead of top by default
+   *     $tooltipProvider.options( { placement: 'left' } );
+   *   });
+   */
+	this.options = function(value) {
+		angular.extend(globalOptions, value);
+	};
+
+  /**
+   * This allows you to extend the set of trigger mappings available. E.g.:
+   *
+   *   $tooltipProvider.setTriggers( 'openTrigger': 'closeTrigger' );
+   */
+  this.setTriggers = function setTriggers(triggers) {
+    angular.extend(triggerMap, triggers);
+  };
+
+  /**
+   * This is a helper function for translating camel-case to snake-case.
+   */
+  function snake_case(name) {
+    var regexp = /[A-Z]/g;
+    var separator = '-';
+    return name.replace(regexp, function(letter, pos) {
+      return (pos ? separator : '') + letter.toLowerCase();
+    });
+  }
+
+  /**
+   * Returns the actual instance of the $tooltip service.
+   * TODO support multiple triggers
+   */
+  this.$get = ['$window', '$compile', '$timeout', '$document', '$uibPosition', '$interpolate', '$rootScope', '$parse', '$$stackedMap', function($window, $compile, $timeout, $document, $position, $interpolate, $rootScope, $parse, $$stackedMap) {
+    var openedTooltips = $$stackedMap.createNew();
+    $document.on('keypress', function(e) {
+      if (e.which === 27) {
+        var last = openedTooltips.top();
+        if (last) {
+          last.value.close();
+          openedTooltips.removeTop();
+          last = null;
+        }
+      }
+    });
+
+    return function $tooltip(ttType, prefix, defaultTriggerShow, options) {
+      options = angular.extend({}, defaultOptions, globalOptions, options);
+
+      /**
+       * Returns an object of show and hide triggers.
+       *
+       * If a trigger is supplied,
+       * it is used to show the tooltip; otherwise, it will use the `trigger`
+       * option passed to the `$tooltipProvider.options` method; else it will
+       * default to the trigger supplied to this directive factory.
+       *
+       * The hide trigger is based on the show trigger. If the `trigger` option
+       * was passed to the `$tooltipProvider.options` method, it will use the
+       * mapped trigger from `triggerMap` or the passed trigger if the map is
+       * undefined; otherwise, it uses the `triggerMap` value of the show
+       * trigger; else it will just use the show trigger.
+       */
+      function getTriggers(trigger) {
+        var show = (trigger || options.trigger || defaultTriggerShow).split(' ');
+        var hide = show.map(function(trigger) {
+          return triggerMap[trigger] || trigger;
+        });
+        return {
+          show: show,
+          hide: hide
+        };
+      }
+
+      var directiveName = snake_case(ttType);
+
+      var startSym = $interpolate.startSymbol();
+      var endSym = $interpolate.endSymbol();
+      var template =
+        '<div '+ directiveName + '-popup '+
+          'title="' + startSym + 'title' + endSym + '" '+
+          (options.useContentExp ?
+            'content-exp="contentExp()" ' :
+            'content="' + startSym + 'content' + endSym + '" ') +
+          'placement="' + startSym + 'placement' + endSym + '" '+
+          'popup-class="' + startSym + 'popupClass' + endSym + '" '+
+          'animation="animation" ' +
+          'is-open="isOpen"' +
+          'origin-scope="origScope" ' +
+          'style="visibility: hidden; display: block; top: -9999px; left: -9999px;"' +
+          '>' +
+        '</div>';
+
+      return {
+        compile: function(tElem, tAttrs) {
+          var tooltipLinker = $compile(template);
+
+          return function link(scope, element, attrs, tooltipCtrl) {
+            var tooltip;
+            var tooltipLinkedScope;
+            var transitionTimeout;
+            var showTimeout;
+            var hideTimeout;
+            var positionTimeout;
+            var appendToBody = angular.isDefined(options.appendToBody) ? options.appendToBody : false;
+            var triggers = getTriggers(undefined);
+            var hasEnableExp = angular.isDefined(attrs[prefix + 'Enable']);
+            var ttScope = scope.$new(true);
+            var repositionScheduled = false;
+            var isOpenParse = angular.isDefined(attrs[prefix + 'IsOpen']) ? $parse(attrs[prefix + 'IsOpen']) : false;
+            var contentParse = options.useContentExp ? $parse(attrs[ttType]) : false;
+            var observers = [];
+
+            var positionTooltip = function() {
+              // check if tooltip exists and is not empty
+              if (!tooltip || !tooltip.html()) { return; }
+
+              if (!positionTimeout) {
+                positionTimeout = $timeout(function() {
+                  // Reset the positioning.
+                  tooltip.css({ top: 0, left: 0 });
+
+                  // Now set the calculated positioning.
+                  var ttCss = $position.positionElements(element, tooltip, ttScope.placement, appendToBody);
+                  ttCss.top += 'px';
+                  ttCss.left += 'px';
+                  ttCss.visibility = 'visible';
+                  tooltip.css(ttCss);
+
+                  positionTimeout = null;
+                }, 0, false);
+              }
+            };
+
+            // Set up the correct scope to allow transclusion later
+            ttScope.origScope = scope;
+
+            // By default, the tooltip is not open.
+            // TODO add ability to start tooltip opened
+            ttScope.isOpen = false;
+            openedTooltips.add(ttScope, {
+              close: hide
+            });
+
+            function toggleTooltipBind() {
+              if (!ttScope.isOpen) {
+                showTooltipBind();
+              } else {
+                hideTooltipBind();
+              }
+            }
+
+            // Show the tooltip with delay if specified, otherwise show it immediately
+            function showTooltipBind() {
+              if (hasEnableExp && !scope.$eval(attrs[prefix + 'Enable'])) {
+                return;
+              }
+
+              cancelHide();
+              prepareTooltip();
+
+              if (ttScope.popupDelay) {
+                // Do nothing if the tooltip was already scheduled to pop-up.
+                // This happens if show is triggered multiple times before any hide is triggered.
+                if (!showTimeout) {
+                  showTimeout = $timeout(show, ttScope.popupDelay, false);
+                }
+              } else {
+                show();
+              }
+            }
+
+            function hideTooltipBind() {
+              cancelShow();
+
+              if (ttScope.popupCloseDelay) {
+                if (!hideTimeout) {
+                  hideTimeout = $timeout(hide, ttScope.popupCloseDelay, false);
+                }
+              } else {
+                hide();
+              }
+            }
+
+            // Show the tooltip popup element.
+            function show() {
+              cancelShow();
+              cancelHide();
+
+              // Don't show empty tooltips.
+              if (!ttScope.content) {
+                return angular.noop;
+              }
+
+              createTooltip();
+
+              // And show the tooltip.
+              ttScope.$evalAsync(function() {
+                ttScope.isOpen = true;
+                assignIsOpen(true);
+                positionTooltip();
+              });
+            }
+
+            function cancelShow() {
+              if (showTimeout) {
+                $timeout.cancel(showTimeout);
+                showTimeout = null;
+              }
+
+              if (positionTimeout) {
+                $timeout.cancel(positionTimeout);
+                positionTimeout = null;
+              }
+            }
+
+            // Hide the tooltip popup element.
+            function hide() {
+              cancelShow();
+              cancelHide();
+
+              if (!ttScope) {
+                return;
+              }
+
+              // First things first: we don't show it anymore.
+              ttScope.$evalAsync(function() {
+                ttScope.isOpen = false;
+                assignIsOpen(false);
+                // And now we remove it from the DOM. However, if we have animation, we
+                // need to wait for it to expire beforehand.
+                // FIXME: this is a placeholder for a port of the transitions library.
+                // The fade transition in TWBS is 150ms.
+                if (ttScope.animation) {
+                  if (!transitionTimeout) {
+                    transitionTimeout = $timeout(removeTooltip, 150, false);
+                  }
+                } else {
+                  removeTooltip();
+                }
+              });
+            }
+
+            function cancelHide() {
+              if (hideTimeout) {
+                $timeout.cancel(hideTimeout);
+                hideTimeout = null;
+              }
+              if (transitionTimeout) {
+                $timeout.cancel(transitionTimeout);
+                transitionTimeout = null;
+              }
+            }
+
+            function createTooltip() {
+              // There can only be one tooltip element per directive shown at once.
+              if (tooltip) {
+                return;
+              }
+
+              tooltipLinkedScope = ttScope.$new();
+              tooltip = tooltipLinker(tooltipLinkedScope, function(tooltip) {
+                if (appendToBody) {
+                  $document.find('body').append(tooltip);
+                } else {
+                  element.after(tooltip);
+                }
+              });
+
+              prepObservers();
+            }
+
+            function removeTooltip() {
+              unregisterObservers();
+
+              transitionTimeout = null;
+              if (tooltip) {
+                tooltip.remove();
+                tooltip = null;
+              }
+              if (tooltipLinkedScope) {
+                tooltipLinkedScope.$destroy();
+                tooltipLinkedScope = null;
+              }
+            }
+
+            /**
+             * Set the inital scope values. Once
+             * the tooltip is created, the observers
+             * will be added to keep things in synch.
+             */
+            function prepareTooltip() {
+              ttScope.title = attrs[prefix + 'Title'];
+              if (contentParse) {
+                ttScope.content = contentParse(scope);
+              } else {
+                ttScope.content = attrs[ttType];
+              }
+
+              ttScope.popupClass = attrs[prefix + 'Class'];
+              ttScope.placement = angular.isDefined(attrs[prefix + 'Placement']) ? attrs[prefix + 'Placement'] : options.placement;
+
+              var delay = parseInt(attrs[prefix + 'PopupDelay'], 10);
+              var closeDelay = parseInt(attrs[prefix + 'PopupCloseDelay'], 10);
+              ttScope.popupDelay = !isNaN(delay) ? delay : options.popupDelay;
+              ttScope.popupCloseDelay = !isNaN(closeDelay) ? closeDelay : options.popupCloseDelay;
+            }
+
+            function assignIsOpen(isOpen) {
+              if (isOpenParse && angular.isFunction(isOpenParse.assign)) {
+                isOpenParse.assign(scope, isOpen);
+              }
+            }
+
+            ttScope.contentExp = function() {
+              return ttScope.content;
+            };
+
+            /**
+             * Observe the relevant attributes.
+             */
+            attrs.$observe('disabled', function(val) {
+              if (val) {
+                cancelShow();
+              }
+
+              if (val && ttScope.isOpen) {
+                hide();
+              }
+            });
+
+            if (isOpenParse) {
+              scope.$watch(isOpenParse, function(val) {
+                /*jshint -W018 */
+                if (ttScope && !val === ttScope.isOpen) {
+                  toggleTooltipBind();
+                }
+                /*jshint +W018 */
+              });
+            }
+
+            function prepObservers() {
+              observers.length = 0;
+
+              if (contentParse) {
+                observers.push(
+                  scope.$watch(contentParse, function(val) {
+                    ttScope.content = val;
+                    if (!val && ttScope.isOpen) {
+                      hide();
+                    }
+                  })
+                );
+
+                observers.push(
+                  tooltipLinkedScope.$watch(function() {
+                    if (!repositionScheduled) {
+                      repositionScheduled = true;
+                      tooltipLinkedScope.$$postDigest(function() {
+                        repositionScheduled = false;
+                        if (ttScope && ttScope.isOpen) {
+                          positionTooltip();
+                        }
+                      });
+                    }
+                  })
+                );
+              } else {
+                observers.push(
+                  attrs.$observe(ttType, function(val) {
+                    ttScope.content = val;
+                    if (!val && ttScope.isOpen) {
+                      hide();
+                    } else {
+                      positionTooltip();
+                    }
+                  })
+                );
+              }
+
+              observers.push(
+                attrs.$observe(prefix + 'Title', function(val) {
+                  ttScope.title = val;
+                  if (ttScope.isOpen) {
+                    positionTooltip();
+                  }
+                })
+              );
+
+              observers.push(
+                attrs.$observe(prefix + 'Placement', function(val) {
+                  ttScope.placement = val ? val : options.placement;
+                  if (ttScope.isOpen) {
+                    positionTooltip();
+                  }
+                })
+              );
+            }
+
+            function unregisterObservers() {
+              if (observers.length) {
+                angular.forEach(observers, function(observer) {
+                  observer();
+                });
+                observers.length = 0;
+              }
+            }
+
+            var unregisterTriggers = function() {
+              triggers.show.forEach(function(trigger) {
+                element.unbind(trigger, showTooltipBind);
+              });
+              triggers.hide.forEach(function(trigger) {
+                trigger.split(' ').forEach(function(hideTrigger) {
+                  element[0].removeEventListener(hideTrigger, hideTooltipBind);
+                });
+              });
+            };
+
+            function prepTriggers() {
+              var val = attrs[prefix + 'Trigger'];
+              unregisterTriggers();
+
+              triggers = getTriggers(val);
+
+              if (triggers.show !== 'none') {
+                triggers.show.forEach(function(trigger, idx) {
+                  // Using raw addEventListener due to jqLite/jQuery bug - #4060
+                  if (trigger === triggers.hide[idx]) {
+                    element[0].addEventListener(trigger, toggleTooltipBind);
+                  } else if (trigger) {
+                    element[0].addEventListener(trigger, showTooltipBind);
+                    triggers.hide[idx].split(' ').forEach(function(trigger) {
+                      element[0].addEventListener(trigger, hideTooltipBind);
+                    });
+                  }
+
+                  element.on('keypress', function(e) {
+                    if (e.which === 27) {
+                      hideTooltipBind();
+                    }
+                  });
+                });
+              }
+            }
+
+            prepTriggers();
+
+            var animation = scope.$eval(attrs[prefix + 'Animation']);
+            ttScope.animation = angular.isDefined(animation) ? !!animation : options.animation;
+
+            var appendToBodyVal = scope.$eval(attrs[prefix + 'AppendToBody']);
+            appendToBody = angular.isDefined(appendToBodyVal) ? appendToBodyVal : appendToBody;
+
+            // if a tooltip is attached to <body> we need to remove it on
+            // location change as its parent scope will probably not be destroyed
+            // by the change.
+            if (appendToBody) {
+              scope.$on('$locationChangeSuccess', function closeTooltipOnLocationChangeSuccess() {
+                if (ttScope.isOpen) {
+                  hide();
+                }
+              });
+            }
+
+            // Make sure tooltip is destroyed and removed.
+            scope.$on('$destroy', function onDestroyTooltip() {
+              cancelShow();
+              cancelHide();
+              unregisterTriggers();
+              removeTooltip();
+              openedTooltips.remove(ttScope);
+              ttScope = null;
+            });
+          };
+        }
+      };
+    };
+  }];
+})
+
+// This is mostly ngInclude code but with a custom scope
+.directive('uibTooltipTemplateTransclude', [
+         '$animate', '$sce', '$compile', '$templateRequest',
+function ($animate ,  $sce ,  $compile ,  $templateRequest) {
+  return {
+    link: function(scope, elem, attrs) {
+      var origScope = scope.$eval(attrs.tooltipTemplateTranscludeScope);
+
+      var changeCounter = 0,
+        currentScope,
+        previousElement,
+        currentElement;
+
+      var cleanupLastIncludeContent = function() {
+        if (previousElement) {
+          previousElement.remove();
+          previousElement = null;
+        }
+
+        if (currentScope) {
+          currentScope.$destroy();
+          currentScope = null;
+        }
+
+        if (currentElement) {
+          $animate.leave(currentElement).then(function() {
+            previousElement = null;
+          });
+          previousElement = currentElement;
+          currentElement = null;
+        }
+      };
+
+      scope.$watch($sce.parseAsResourceUrl(attrs.uibTooltipTemplateTransclude), function(src) {
+        var thisChangeId = ++changeCounter;
+
+        if (src) {
+          //set the 2nd param to true to ignore the template request error so that the inner
+          //contents and scope can be cleaned up.
+          $templateRequest(src, true).then(function(response) {
+            if (thisChangeId !== changeCounter) { return; }
+            var newScope = origScope.$new();
+            var template = response;
+
+            var clone = $compile(template)(newScope, function(clone) {
+              cleanupLastIncludeContent();
+              $animate.enter(clone, elem);
+            });
+
+            currentScope = newScope;
+            currentElement = clone;
+
+            currentScope.$emit('$includeContentLoaded', src);
+          }, function() {
+            if (thisChangeId === changeCounter) {
+              cleanupLastIncludeContent();
+              scope.$emit('$includeContentError', src);
+            }
+          });
+          scope.$emit('$includeContentRequested', src);
+        } else {
+          cleanupLastIncludeContent();
+        }
+      });
+
+      scope.$on('$destroy', cleanupLastIncludeContent);
+    }
+  };
+}])
+
+/**
+ * Note that it's intentional that these classes are *not* applied through $animate.
+ * They must not be animated as they're expected to be present on the tooltip on
+ * initialization.
+ */
+.directive('uibTooltipClasses', function() {
+  return {
+    restrict: 'A',
+    link: function(scope, element, attrs) {
+      if (scope.placement) {
+        element.addClass(scope.placement);
+      }
+
+      if (scope.popupClass) {
+        element.addClass(scope.popupClass);
+      }
+
+      if (scope.animation()) {
+        element.addClass(attrs.tooltipAnimationClass);
+      }
+    }
+  };
+})
+
+.directive('uibTooltipPopup', function() {
+  return {
+    replace: true,
+    scope: { content: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
+    templateUrl: 'template/tooltip/tooltip-popup.html',
+    link: function(scope, element) {
+      element.addClass('tooltip');
+    }
+  };
+})
+
+.directive('uibTooltip', [ '$uibTooltip', function($uibTooltip) {
+  return $uibTooltip('uibTooltip', 'tooltip', 'mouseenter');
+}])
+
+.directive('uibTooltipTemplatePopup', function() {
+  return {
+    replace: true,
+    scope: { contentExp: '&', placement: '@', popupClass: '@', animation: '&', isOpen: '&',
+      originScope: '&' },
+    templateUrl: 'template/tooltip/tooltip-template-popup.html',
+    link: function(scope, element) {
+      element.addClass('tooltip');
+    }
+  };
+})
+
+.directive('uibTooltipTemplate', ['$uibTooltip', function($uibTooltip) {
+  return $uibTooltip('uibTooltipTemplate', 'tooltip', 'mouseenter', {
+    useContentExp: true
+  });
+}])
+
+.directive('uibTooltipHtmlPopup', function() {
+  return {
+    replace: true,
+    scope: { contentExp: '&', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
+    templateUrl: 'template/tooltip/tooltip-html-popup.html',
+    link: function(scope, element) {
+      element.addClass('tooltip');
+    }
+  };
+})
+
+.directive('uibTooltipHtml', ['$uibTooltip', function($uibTooltip) {
+  return $uibTooltip('uibTooltipHtml', 'tooltip', 'mouseenter', {
+    useContentExp: true
+  });
+}]);
+
+/* Deprecated tooltip below */
+
+angular.module('ui.bootstrap.tooltip')
+
+.value('$tooltipSuppressWarning', false)
+
+.provider('$tooltip', ['$uibTooltipProvider', function($uibTooltipProvider) {
+  angular.extend(this, $uibTooltipProvider);
+
+  this.$get = ['$log', '$tooltipSuppressWarning', '$injector', function($log, $tooltipSuppressWarning, $injector) {
+    if (!$tooltipSuppressWarning) {
+      $log.warn('$tooltip is now deprecated. Use $uibTooltip instead.');
+    }
+
+    return $injector.invoke($uibTooltipProvider.$get);
+  }];
+}])
+
+// This is mostly ngInclude code but with a custom scope
+.directive('tooltipTemplateTransclude', [
+         '$animate', '$sce', '$compile', '$templateRequest', '$log', '$tooltipSuppressWarning',
+function ($animate ,  $sce ,  $compile ,  $templateRequest,   $log,   $tooltipSuppressWarning) {
+  return {
+    link: function(scope, elem, attrs) {
+      if (!$tooltipSuppressWarning) {
+        $log.warn('tooltip-template-transclude is now deprecated. Use uib-tooltip-template-transclude instead.');
+      }
+
+      var origScope = scope.$eval(attrs.tooltipTemplateTranscludeScope);
+
+      var changeCounter = 0,
+        currentScope,
+        previousElement,
+        currentElement;
+
+      var cleanupLastIncludeContent = function() {
+        if (previousElement) {
+          previousElement.remove();
+          previousElement = null;
+        }
+        if (currentScope) {
+          currentScope.$destroy();
+          currentScope = null;
+        }
+        if (currentElement) {
+          $animate.leave(currentElement).then(function() {
+            previousElement = null;
+          });
+          previousElement = currentElement;
+          currentElement = null;
+        }
+      };
+
+      scope.$watch($sce.parseAsResourceUrl(attrs.tooltipTemplateTransclude), function(src) {
+        var thisChangeId = ++changeCounter;
+
+        if (src) {
+          //set the 2nd param to true to ignore the template request error so that the inner
+          //contents and scope can be cleaned up.
+          $templateRequest(src, true).then(function(response) {
+            if (thisChangeId !== changeCounter) { return; }
+            var newScope = origScope.$new();
+            var template = response;
+
+            var clone = $compile(template)(newScope, function(clone) {
+              cleanupLastIncludeContent();
+              $animate.enter(clone, elem);
+            });
+
+            currentScope = newScope;
+            currentElement = clone;
+
+            currentScope.$emit('$includeContentLoaded', src);
+          }, function() {
+            if (thisChangeId === changeCounter) {
+              cleanupLastIncludeContent();
+              scope.$emit('$includeContentError', src);
+            }
+          });
+          scope.$emit('$includeContentRequested', src);
+        } else {
+          cleanupLastIncludeContent();
+        }
+      });
+
+      scope.$on('$destroy', cleanupLastIncludeContent);
+    }
+  };
+}])
+
+.directive('tooltipClasses', ['$log', '$tooltipSuppressWarning', function($log, $tooltipSuppressWarning) {
+  return {
+    restrict: 'A',
+    link: function(scope, element, attrs) {
+      if (!$tooltipSuppressWarning) {
+        $log.warn('tooltip-classes is now deprecated. Use uib-tooltip-classes instead.');
+      }
+
+      if (scope.placement) {
+        element.addClass(scope.placement);
+      }
+      if (scope.popupClass) {
+        element.addClass(scope.popupClass);
+      }
+      if (scope.animation()) {
+        element.addClass(attrs.tooltipAnimationClass);
+      }
+    }
+  };
+}])
+
+.directive('tooltipPopup', ['$log', '$tooltipSuppressWarning', function($log, $tooltipSuppressWarning) {
+  return {
+    replace: true,
+    scope: { content: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
+    templateUrl: 'template/tooltip/tooltip-popup.html',
+    link: function(scope, element) {
+      if (!$tooltipSuppressWarning) {
+        $log.warn('tooltip-popup is now deprecated. Use uib-tooltip-popup instead.');
+      }
+
+      element.addClass('tooltip');
+    }
+  };
+}])
+
+.directive('tooltip', ['$tooltip', function($tooltip) {
+  return $tooltip('tooltip', 'tooltip', 'mouseenter');
+}])
+
+.directive('tooltipTemplatePopup', ['$log', '$tooltipSuppressWarning', function($log, $tooltipSuppressWarning) {
+  return {
+    replace: true,
+    scope: { contentExp: '&', placement: '@', popupClass: '@', animation: '&', isOpen: '&',
+      originScope: '&' },
+    templateUrl: 'template/tooltip/tooltip-template-popup.html',
+    link: function(scope, element) {
+      if (!$tooltipSuppressWarning) {
+        $log.warn('tooltip-template-popup is now deprecated. Use uib-tooltip-template-popup instead.');
+      }
+
+      element.addClass('tooltip');
+    }
+  };
+}])
+
+.directive('tooltipTemplate', ['$tooltip', function($tooltip) {
+  return $tooltip('tooltipTemplate', 'tooltip', 'mouseenter', {
+    useContentExp: true
+  });
+}])
+
+.directive('tooltipHtmlPopup', ['$log', '$tooltipSuppressWarning', function($log, $tooltipSuppressWarning) {
+  return {
+    replace: true,
+    scope: { contentExp: '&', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
+    templateUrl: 'template/tooltip/tooltip-html-popup.html',
+    link: function(scope, element) {
+      if (!$tooltipSuppressWarning) {
+        $log.warn('tooltip-html-popup is now deprecated. Use uib-tooltip-html-popup instead.');
+      }
+
+      element.addClass('tooltip');
+    }
+  };
+}])
+
+.directive('tooltipHtml', ['$tooltip', function($tooltip) {
+  return $tooltip('tooltipHtml', 'tooltip', 'mouseenter', {
+    useContentExp: true
+  });
+}]);
+
+/**
+ * The following features are still outstanding: popup delay, animation as a
+ * function, placement as a function, inside, support for more triggers than
+ * just mouse enter/leave, and selector delegatation.
+ */
+angular.module('ui.bootstrap.popover', ['ui.bootstrap.tooltip'])
+
+.directive('uibPopoverTemplatePopup', function() {
+  return {
+    replace: true,
+    scope: { title: '@', contentExp: '&', placement: '@', popupClass: '@', animation: '&', isOpen: '&',
+      originScope: '&' },
+    templateUrl: 'template/popover/popover-template.html',
+    link: function(scope, element) {
+      element.addClass('popover');
+    }
+  };
+})
+
+.directive('uibPopoverTemplate', ['$uibTooltip', function($uibTooltip) {
+  return $uibTooltip('uibPopoverTemplate', 'popover', 'click', {
+    useContentExp: true
+  });
+}])
+
+.directive('uibPopoverHtmlPopup', function() {
+  return {
+    replace: true,
+    scope: { contentExp: '&', title: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
+    templateUrl: 'template/popover/popover-html.html',
+    link: function(scope, element) {
+      element.addClass('popover');
+    }
+  };
+})
+
+.directive('uibPopoverHtml', ['$uibTooltip', function($uibTooltip) {
+  return $uibTooltip('uibPopoverHtml', 'popover', 'click', {
+    useContentExp: true
+  });
+}])
+
+.directive('uibPopoverPopup', function() {
+  return {
+    replace: true,
+    scope: { title: '@', content: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
+    templateUrl: 'template/popover/popover.html',
+    link: function(scope, element) {
+      element.addClass('popover');
+    }
+  };
+})
+
+.directive('uibPopover', ['$uibTooltip', function($uibTooltip) {
+  return $uibTooltip('uibPopover', 'popover', 'click');
+}]);
+
+/* Deprecated popover below */
+
+angular.module('ui.bootstrap.popover')
+
+.value('$popoverSuppressWarning', false)
+
+.directive('popoverTemplatePopup', ['$log', '$popoverSuppressWarning', function($log, $popoverSuppressWarning) {
+  return {
+    replace: true,
+    scope: { title: '@', contentExp: '&', placement: '@', popupClass: '@', animation: '&', isOpen: '&',
+      originScope: '&' },
+    templateUrl: 'template/popover/popover-template.html',
+    link: function(scope, element) {
+      if (!$popoverSuppressWarning) {
+        $log.warn('popover-template-popup is now deprecated. Use uib-popover-template-popup instead.');
+      }
+
+      element.addClass('popover');
+    }
+  };
+}])
+
+.directive('popoverTemplate', ['$tooltip', function($tooltip) {
+  return $tooltip('popoverTemplate', 'popover', 'click', {
+    useContentExp: true
+  });
+}])
+
+.directive('popoverHtmlPopup', ['$log', '$popoverSuppressWarning', function($log, $popoverSuppressWarning) {
+  return {
+    replace: true,
+    scope: { contentExp: '&', title: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
+    templateUrl: 'template/popover/popover-html.html',
+    link: function(scope, element) {
+      if (!$popoverSuppressWarning) {
+        $log.warn('popover-html-popup is now deprecated. Use uib-popover-html-popup instead.');
+      }
+
+      element.addClass('popover');
+    }
+  };
+}])
+
+.directive('popoverHtml', ['$tooltip', function($tooltip) {
+  return $tooltip('popoverHtml', 'popover', 'click', {
+    useContentExp: true
+  });
+}])
+
+.directive('popoverPopup', ['$log', '$popoverSuppressWarning', function($log, $popoverSuppressWarning) {
+  return {
+    replace: true,
+    scope: { title: '@', content: '@', placement: '@', popupClass: '@', animation: '&', isOpen: '&' },
+    templateUrl: 'template/popover/popover.html',
+    link: function(scope, element) {
+      if (!$popoverSuppressWarning) {
+        $log.warn('popover-popup is now deprecated. Use uib-popover-popup instead.');
+      }
+
+      element.addClass('popover');
+    }
+  };
+}])
+
+.directive('popover', ['$tooltip', function($tooltip) {
+
+  return $tooltip('popover', 'popover', 'click');
+}]);
+
+angular.module('ui.bootstrap.progressbar', [])
+
+.constant('uibProgressConfig', {
+  animate: true,
+  max: 100
+})
+
+.controller('UibProgressController', ['$scope', '$attrs', 'uibProgressConfig', function($scope, $attrs, progressConfig) {
+  var self = this,
+      animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate;
+
+  this.bars = [];
+  $scope.max = angular.isDefined($scope.max) ? $scope.max : progressConfig.max;
+
+  this.addBar = function(bar, element, attrs) {
+    if (!animate) {
+      element.css({'transition': 'none'});
+    }
+
+    this.bars.push(bar);
+
+    bar.max = $scope.max;
+    bar.title = attrs && angular.isDefined(attrs.title) ? attrs.title : 'progressbar';
+
+    bar.$watch('value', function(value) {
+      bar.recalculatePercentage();
+    });
+
+    bar.recalculatePercentage = function() {
+      var totalPercentage = self.bars.reduce(function(total, bar) {
+        bar.percent = +(100 * bar.value / bar.max).toFixed(2);
+        return total + bar.percent;
+      }, 0);
+
+      if (totalPercentage > 100) {
+        bar.percent -= totalPercentage - 100;
+      }
+    };
+
+    bar.$on('$destroy', function() {
+      element = null;
+      self.removeBar(bar);
+    });
+  };
+
+  this.removeBar = function(bar) {
+    this.bars.splice(this.bars.indexOf(bar), 1);
+    this.bars.forEach(function (bar) {
+      bar.recalculatePercentage();
+    });
+  };
+
+  $scope.$watch('max', function(max) {
+    self.bars.forEach(function(bar) {
+      bar.max = $scope.max;
+      bar.recalculatePercentage();
+    });
+  });
+}])
+
+.directive('uibProgress', function() {
+  return {
+    replace: true,
+    transclude: true,
+    controller: 'UibProgressController',
+    require: 'uibProgress',
+    scope: {
+      max: '=?'
+    },
+    templateUrl: 'template/progressbar/progress.html'
+  };
+})
+
+.directive('uibBar', function() {
+  return {
+    replace: true,
+    transclude: true,
+    require: '^uibProgress',
+    scope: {
+      value: '=',
+      type: '@'
+    },
+    templateUrl: 'template/progressbar/bar.html',
+    link: function(scope, element, attrs, progressCtrl) {
+      progressCtrl.addBar(scope, element, attrs);
+    }
+  };
+})
+
+.directive('uibProgressbar', function() {
+  return {
+    replace: true,
+    transclude: true,
+    controller: 'UibProgressController',
+    scope: {
+      value: '=',
+      max: '=?',
+      type: '@'
+    },
+    templateUrl: 'template/progressbar/progressbar.html',
+    link: function(scope, element, attrs, progressCtrl) {
+      progressCtrl.addBar(scope, angular.element(element.children()[0]), {title: attrs.title});
+    }
+  };
+});
+
+/* Deprecated progressbar below */
+
+angular.module('ui.bootstrap.progressbar')
+
+.value('$progressSuppressWarning', false)
+
+.controller('ProgressController', ['$scope', '$attrs', 'uibProgressConfig', '$log', '$progressSuppressWarning', function($scope, $attrs, progressConfig, $log, $progressSuppressWarning) {
+  if (!$progressSuppressWarning) {
+    $log.warn('ProgressController is now deprecated. Use UibProgressController instead.');
+  }
+
+  var self = this,
+    animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate;
+
+  this.bars = [];
+  $scope.max = angular.isDefined($scope.max) ? $scope.max : progressConfig.max;
+
+  this.addBar = function(bar, element, attrs) {
+    if (!animate) {
+      element.css({'transition': 'none'});
+    }
+
+    this.bars.push(bar);
+
+    bar.max = $scope.max;
+    bar.title = attrs && angular.isDefined(attrs.title) ? attrs.title : 'progressbar';
+
+    bar.$watch('value', function(value) {
+      bar.recalculatePercentage();
+    });
+
+    bar.recalculatePercentage = function() {
+      bar.percent = +(100 * bar.value / bar.max).toFixed(2);
+
+      var totalPercentage = self.bars.reduce(function(total, bar) {
+        return total + bar.percent;
+      }, 0);
+
+      if (totalPercentage > 100) {
+        bar.percent -= totalPercentage - 100;
+      }
+    };
+
+    bar.$on('$destroy', function() {
+      element = null;
+      self.removeBar(bar);
+    });
+  };
+
+  this.removeBar = function(bar) {
+    this.bars.splice(this.bars.indexOf(bar), 1);
+  };
+
+  $scope.$watch('max', function(max) {
+    self.bars.forEach(function(bar) {
+      bar.max = $scope.max;
+      bar.recalculatePercentage();
+    });
+  });
+}])
+
+.directive('progress', ['$log', '$progressSuppressWarning', function($log, $progressSuppressWarning) {
+  return {
+    replace: true,
+    transclude: true,
+    controller: 'ProgressController',
+    require: 'progress',
+    scope: {
+      max: '=?',
+      title: '@?'
+    },
+    templateUrl: 'template/progressbar/progress.html',
+    link: function() {
+      if (!$progressSuppressWarning) {
+        $log.warn('progress is now deprecated. Use uib-progress instead.');
+      }
+    }
+  };
+}])
+
+.directive('bar', ['$log', '$progressSuppressWarning', function($log, $progressSuppressWarning) {
+  return {
+    replace: true,
+    transclude: true,
+    require: '^progress',
+    scope: {
+      value: '=',
+      type: '@'
+    },
+    templateUrl: 'template/progressbar/bar.html',
+    link: function(scope, element, attrs, progressCtrl) {
+      if (!$progressSuppressWarning) {
+        $log.warn('bar is now deprecated. Use uib-bar instead.');
+      }
+      progressCtrl.addBar(scope, element);
+    }
+  };
+}])
+
+.directive('progressbar', ['$log', '$progressSuppressWarning', function($log, $progressSuppressWarning) {
+  return {
+    replace: true,
+    transclude: true,
+    controller: 'ProgressController',
+    scope: {
+      value: '=',
+      max: '=?',
+      type: '@'
+    },
+    templateUrl: 'template/progressbar/progressbar.html',
+    link: function(scope, element, attrs, progressCtrl) {
+      if (!$progressSuppressWarning) {
+        $log.warn('progressbar is now deprecated. Use uib-progressbar instead.');
+      }
+      progressCtrl.addBar(scope, angular.element(element.children()[0]), {title: attrs.title});
+    }
+  };
+}]);
+
+angular.module('ui.bootstrap.rating', [])
+
+.constant('uibRatingConfig', {
+  max: 5,
+  stateOn: null,
+  stateOff: null,
+  titles : ['one', 'two', 'three', 'four', 'five']
+})
+
+.controller('UibRatingController', ['$scope', '$attrs', 'uibRatingConfig', function($scope, $attrs, ratingConfig) {
+  var ngModelCtrl  = { $setViewValue: angular.noop };
+
+  this.init = function(ngModelCtrl_) {
+    ngModelCtrl = ngModelCtrl_;
+    ngModelCtrl.$render = this.render;
+
+    ngModelCtrl.$formatters.push(function(value) {
+      if (angular.isNumber(value) && value << 0 !== value) {
+        value = Math.round(value);
+      }
+      return value;
+    });
+
+    this.stateOn = angular.isDefined($attrs.stateOn) ? $scope.$parent.$eval($attrs.stateOn) : ratingConfig.stateOn;
+    this.stateOff = angular.isDefined($attrs.stateOff) ? $scope.$parent.$eval($attrs.stateOff) : ratingConfig.stateOff;
+    var tmpTitles = angular.isDefined($attrs.titles)  ? $scope.$parent.$eval($attrs.titles) : ratingConfig.titles ;
+    this.titles = angular.isArray(tmpTitles) && tmpTitles.length > 0 ?
+      tmpTitles : ratingConfig.titles;
+
+    var ratingStates = angular.isDefined($attrs.ratingStates) ?
+      $scope.$parent.$eval($attrs.ratingStates) :
+      new Array(angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : ratingConfig.max);
+    $scope.range = this.buildTemplateObjects(ratingStates);
+  };
+
+  this.buildTemplateObjects = function(states) {
+    for (var i = 0, n = states.length; i < n; i++) {
+      states[i] = angular.extend({ index: i }, { stateOn: this.stateOn, stateOff: this.stateOff, title: this.getTitle(i) }, states[i]);
+    }
+    return states;
+  };
+
+  this.getTitle = function(index) {
+    if (index >= this.titles.length) {
+      return index + 1;
+    } else {
+      return this.titles[index];
+    }
+  };
+
+  $scope.rate = function(value) {
+    if (!$scope.readonly && value >= 0 && value <= $scope.range.length) {
+      ngModelCtrl.$setViewValue(ngModelCtrl.$viewValue === value ? 0 : value);
+      ngModelCtrl.$render();
+    }
+  };
+
+  $scope.enter = function(value) {
+    if (!$scope.readonly) {
+      $scope.value = value;
+    }
+    $scope.onHover({value: value});
+  };
+
+  $scope.reset = function() {
+    $scope.value = ngModelCtrl.$viewValue;
+    $scope.onLeave();
+  };
+
+  $scope.onKeydown = function(evt) {
+    if (/(37|38|39|40)/.test(evt.which)) {
+      evt.preventDefault();
+      evt.stopPropagation();
+      $scope.rate($scope.value + (evt.which === 38 || evt.which === 39 ? 1 : -1));
+    }
+  };
+
+  this.render = function() {
+    $scope.value = ngModelCtrl.$viewValue;
+  };
+}])
+
+.directive('uibRating', function() {
+  return {
+    require: ['uibRating', 'ngModel'],
+    scope: {
+      readonly: '=?',
+      onHover: '&',
+      onLeave: '&'
+    },
+    controller: 'UibRatingController',
+    templateUrl: 'template/rating/rating.html',
+    replace: true,
+    link: function(scope, element, attrs, ctrls) {
+      var ratingCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+      ratingCtrl.init(ngModelCtrl);
+    }
+  };
+});
+
+/* Deprecated rating below */
+
+angular.module('ui.bootstrap.rating')
+
+.value('$ratingSuppressWarning', false)
+
+.controller('RatingController', ['$scope', '$attrs', '$controller', '$log', '$ratingSuppressWarning', function($scope, $attrs, $controller, $log, $ratingSuppressWarning) {
+  if (!$ratingSuppressWarning) {
+    $log.warn('RatingController is now deprecated. Use UibRatingController instead.');
+  }
+
+  angular.extend(this, $controller('UibRatingController', {
+    $scope: $scope,
+    $attrs: $attrs
+  }));
+}])
+
+.directive('rating', ['$log', '$ratingSuppressWarning', function($log, $ratingSuppressWarning) {
+  return {
+    require: ['rating', 'ngModel'],
+    scope: {
+      readonly: '=?',
+      onHover: '&',
+      onLeave: '&'
+    },
+    controller: 'RatingController',
+    templateUrl: 'template/rating/rating.html',
+    replace: true,
+    link: function(scope, element, attrs, ctrls) {
+      if (!$ratingSuppressWarning) {
+        $log.warn('rating is now deprecated. Use uib-rating instead.');
+      }
+      var ratingCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+      ratingCtrl.init(ngModelCtrl);
+    }
+  };
+}]);
+
+
+/**
+ * @ngdoc overview
+ * @name ui.bootstrap.tabs
+ *
+ * @description
+ * AngularJS version of the tabs directive.
+ */
+
+angular.module('ui.bootstrap.tabs', [])
+
+.controller('UibTabsetController', ['$scope', function ($scope) {
+  var ctrl = this,
+      tabs = ctrl.tabs = $scope.tabs = [];
+
+  ctrl.select = function(selectedTab) {
+    angular.forEach(tabs, function(tab) {
+      if (tab.active && tab !== selectedTab) {
+        tab.active = false;
+        tab.onDeselect();
+        selectedTab.selectCalled = false;
+      }
+    });
+    selectedTab.active = true;
+    // only call select if it has not already been called
+    if (!selectedTab.selectCalled) {
+      selectedTab.onSelect();
+      selectedTab.selectCalled = true;
+    }
+  };
+
+  ctrl.addTab = function addTab(tab) {
+    tabs.push(tab);
+    // we can't run the select function on the first tab
+    // since that would select it twice
+    if (tabs.length === 1 && tab.active !== false) {
+      tab.active = true;
+    } else if (tab.active) {
+      ctrl.select(tab);
+    } else {
+      tab.active = false;
+    }
+  };
+
+  ctrl.removeTab = function removeTab(tab) {
+    var index = tabs.indexOf(tab);
+    //Select a new tab if the tab to be removed is selected and not destroyed
+    if (tab.active && tabs.length > 1 && !destroyed) {
+      //If this is the last tab, select the previous tab. else, the next tab.
+      var newActiveIndex = index == tabs.length - 1 ? index - 1 : index + 1;
+      ctrl.select(tabs[newActiveIndex]);
+    }
+    tabs.splice(index, 1);
+  };
+
+  var destroyed;
+  $scope.$on('$destroy', function() {
+    destroyed = true;
+  });
+}])
+
+/**
+ * @ngdoc directive
+ * @name ui.bootstrap.tabs.directive:tabset
+ * @restrict EA
+ *
+ * @description
+ * Tabset is the outer container for the tabs directive
+ *
+ * @param {boolean=} vertical Whether or not to use vertical styling for the tabs.
+ * @param {boolean=} justified Whether or not to use justified styling for the tabs.
+ *
+ * @example
+<example module="ui.bootstrap">
+  <file name="index.html">
+    <uib-tabset>
+      <uib-tab heading="Tab 1"><b>First</b> Content!</uib-tab>
+      <uib-tab heading="Tab 2"><i>Second</i> Content!</uib-tab>
+    </uib-tabset>
+    <hr />
+    <uib-tabset vertical="true">
+      <uib-tab heading="Vertical Tab 1"><b>First</b> Vertical Content!</uib-tab>
+      <uib-tab heading="Vertical Tab 2"><i>Second</i> Vertical Content!</uib-tab>
+    </uib-tabset>
+    <uib-tabset justified="true">
+      <uib-tab heading="Justified Tab 1"><b>First</b> Justified Content!</uib-tab>
+      <uib-tab heading="Justified Tab 2"><i>Second</i> Justified Content!</uib-tab>
+    </uib-tabset>
+  </file>
+</example>
+ */
+.directive('uibTabset', function() {
+  return {
+    restrict: 'EA',
+    transclude: true,
+    replace: true,
+    scope: {
+      type: '@'
+    },
+    controller: 'UibTabsetController',
+    templateUrl: 'template/tabs/tabset.html',
+    link: function(scope, element, attrs) {
+      scope.vertical = angular.isDefined(attrs.vertical) ? scope.$parent.$eval(attrs.vertical) : false;
+      scope.justified = angular.isDefined(attrs.justified) ? scope.$parent.$eval(attrs.justified) : false;
+    }
+  };
+})
+
+/**
+ * @ngdoc directive
+ * @name ui.bootstrap.tabs.directive:tab
+ * @restrict EA
+ *
+ * @param {string=} heading The visible heading, or title, of the tab. Set HTML headings with {@link ui.bootstrap.tabs.directive:tabHeading tabHeading}.
+ * @param {string=} select An expression to evaluate when the tab is selected.
+ * @param {boolean=} active A binding, telling whether or not this tab is selected.
+ * @param {boolean=} disabled A binding, telling whether or not this tab is disabled.
+ *
+ * @description
+ * Creates a tab with a heading and content. Must be placed within a {@link ui.bootstrap.tabs.directive:tabset tabset}.
+ *
+ * @example
+<example module="ui.bootstrap">
+  <file name="index.html">
+    <div ng-controller="TabsDemoCtrl">
+      <button class="btn btn-small" ng-click="items[0].active = true">
+        Select item 1, using active binding
+      </button>
+      <button class="btn btn-small" ng-click="items[1].disabled = !items[1].disabled">
+        Enable/disable item 2, using disabled binding
+      </button>
+      <br />
+      <uib-tabset>
+        <uib-tab heading="Tab 1">First Tab</uib-tab>
+        <uib-tab select="alertMe()">
+          <uib-tab-heading><i class="icon-bell"></i> Alert me!</tab-heading>
+          Second Tab, with alert callback and html heading!
+        </uib-tab>
+        <uib-tab ng-repeat="item in items"
+          heading="{{item.title}}"
+          disabled="item.disabled"
+          active="item.active">
+          {{item.content}}
+        </uib-tab>
+      </uib-tabset>
+    </div>
+  </file>
+  <file name="script.js">
+    function TabsDemoCtrl($scope) {
+      $scope.items = [
+        { title:"Dynamic Title 1", content:"Dynamic Item 0" },
+        { title:"Dynamic Title 2", content:"Dynamic Item 1", disabled: true }
+      ];
+
+      $scope.alertMe = function() {
+        setTimeout(function() {
+          alert("You've selected the alert tab!");
+        });
+      };
+    };
+  </file>
+</example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ui.bootstrap.tabs.directive:tabHeading
+ * @restrict EA
+ *
+ * @description
+ * Creates an HTML heading for a {@link ui.bootstrap.tabs.directive:tab tab}. Must be placed as a child of a tab element.
+ *
+ * @example
+<example module="ui.bootstrap">
+  <file name="index.html">
+    <uib-tabset>
+      <uib-tab>
+        <uib-tab-heading><b>HTML</b> in my titles?!</tab-heading>
+        And some content, too!
+      </uib-tab>
+      <uib-tab>
+        <uib-tab-heading><i class="icon-heart"></i> Icon heading?!?</tab-heading>
+        That's right.
+      </uib-tab>
+    </uib-tabset>
+  </file>
+</example>
+ */
+.directive('uibTab', ['$parse', function($parse) {
+  return {
+    require: '^uibTabset',
+    restrict: 'EA',
+    replace: true,
+    templateUrl: 'template/tabs/tab.html',
+    transclude: true,
+    scope: {
+      active: '=?',
+      heading: '@',
+      onSelect: '&select', //This callback is called in contentHeadingTransclude
+                          //once it inserts the tab's content into the dom
+      onDeselect: '&deselect'
+    },
+    controller: function() {
+      //Empty controller so other directives can require being 'under' a tab
+    },
+    link: function(scope, elm, attrs, tabsetCtrl, transclude) {
+      scope.$watch('active', function(active) {
+        if (active) {
+          tabsetCtrl.select(scope);
+        }
+      });
+
+      scope.disabled = false;
+      if (attrs.disable) {
+        scope.$parent.$watch($parse(attrs.disable), function(value) {
+          scope.disabled = !! value;
+        });
+      }
+
+      scope.select = function() {
+        if (!scope.disabled) {
+          scope.active = true;
+        }
+      };
+
+      tabsetCtrl.addTab(scope);
+      scope.$on('$destroy', function() {
+        tabsetCtrl.removeTab(scope);
+      });
+
+      //We need to transclude later, once the content container is ready.
+      //when this link happens, we're inside a tab heading.
+      scope.$transcludeFn = transclude;
+    }
+  };
+}])
+
+.directive('uibTabHeadingTransclude', function() {
+  return {
+    restrict: 'A',
+    require: ['?^uibTab', '?^tab'], // TODO: change to '^uibTab' after deprecation removal
+    link: function(scope, elm) {
+      scope.$watch('headingElement', function updateHeadingElement(heading) {
+        if (heading) {
+          elm.html('');
+          elm.append(heading);
+        }
+      });
+    }
+  };
+})
+
+.directive('uibTabContentTransclude', function() {
+  return {
+    restrict: 'A',
+    require: ['?^uibTabset', '?^tabset'], // TODO: change to '^uibTabset' after deprecation removal
+    link: function(scope, elm, attrs) {
+      var tab = scope.$eval(attrs.uibTabContentTransclude);
+
+      //Now our tab is ready to be transcluded: both the tab heading area
+      //and the tab content area are loaded.  Transclude 'em both.
+      tab.$transcludeFn(tab.$parent, function(contents) {
+        angular.forEach(contents, function(node) {
+          if (isTabHeading(node)) {
+            //Let tabHeadingTransclude know.
+            tab.headingElement = node;
+          } else {
+            elm.append(node);
+          }
+        });
+      });
+    }
+  };
+
+  function isTabHeading(node) {
+    return node.tagName && (
+      node.hasAttribute('tab-heading') || // TODO: remove after deprecation removal
+      node.hasAttribute('data-tab-heading') || // TODO: remove after deprecation removal
+      node.hasAttribute('x-tab-heading') || // TODO: remove after deprecation removal
+      node.hasAttribute('uib-tab-heading') ||
+      node.hasAttribute('data-uib-tab-heading') ||
+      node.hasAttribute('x-uib-tab-heading') ||
+      node.tagName.toLowerCase() === 'tab-heading' || // TODO: remove after deprecation removal
+      node.tagName.toLowerCase() === 'data-tab-heading' || // TODO: remove after deprecation removal
+      node.tagName.toLowerCase() === 'x-tab-heading' || // TODO: remove after deprecation removal
+      node.tagName.toLowerCase() === 'uib-tab-heading' ||
+      node.tagName.toLowerCase() === 'data-uib-tab-heading' ||
+      node.tagName.toLowerCase() === 'x-uib-tab-heading'
+    );
+  }
+});
+
+/* deprecated tabs below */
+
+angular.module('ui.bootstrap.tabs')
+
+  .value('$tabsSuppressWarning', false)
+
+  .controller('TabsetController', ['$scope', '$controller', '$log', '$tabsSuppressWarning', function($scope, $controller, $log, $tabsSuppressWarning) {
+    if (!$tabsSuppressWarning) {
+      $log.warn('TabsetController is now deprecated. Use UibTabsetController instead.');
+    }
+
+    angular.extend(this, $controller('UibTabsetController', {
+      $scope: $scope
+    }));
+  }])
+
+  .directive('tabset', ['$log', '$tabsSuppressWarning', function($log, $tabsSuppressWarning) {
+    return {
+      restrict: 'EA',
+      transclude: true,
+      replace: true,
+      scope: {
+        type: '@'
+      },
+      controller: 'TabsetController',
+      templateUrl: 'template/tabs/tabset.html',
+      link: function(scope, element, attrs) {
+
+        if (!$tabsSuppressWarning) {
+          $log.warn('tabset is now deprecated. Use uib-tabset instead.');
+        }
+        scope.vertical = angular.isDefined(attrs.vertical) ? scope.$parent.$eval(attrs.vertical) : false;
+        scope.justified = angular.isDefined(attrs.justified) ? scope.$parent.$eval(attrs.justified) : false;
+      }
+    };
+  }])
+
+  .directive('tab', ['$parse', '$log', '$tabsSuppressWarning', function($parse, $log, $tabsSuppressWarning) {
+    return {
+      require: '^tabset',
+      restrict: 'EA',
+      replace: true,
+      templateUrl: 'template/tabs/tab.html',
+      transclude: true,
+      scope: {
+        active: '=?',
+        heading: '@',
+        onSelect: '&select', //This callback is called in contentHeadingTransclude
+        //once it inserts the tab's content into the dom
+        onDeselect: '&deselect'
+      },
+      controller: function() {
+        //Empty controller so other directives can require being 'under' a tab
+      },
+      link: function(scope, elm, attrs, tabsetCtrl, transclude) {
+        if (!$tabsSuppressWarning) {
+          $log.warn('tab is now deprecated. Use uib-tab instead.');
+        }
+
+        scope.$watch('active', function(active) {
+          if (active) {
+            tabsetCtrl.select(scope);
+          }
+        });
+
+        scope.disabled = false;
+        if (attrs.disable) {
+          scope.$parent.$watch($parse(attrs.disable), function(value) {
+            scope.disabled = !!value;
+          });
+        }
+
+        scope.select = function() {
+          if (!scope.disabled) {
+            scope.active = true;
+          }
+        };
+
+        tabsetCtrl.addTab(scope);
+        scope.$on('$destroy', function() {
+          tabsetCtrl.removeTab(scope);
+        });
+
+        //We need to transclude later, once the content container is ready.
+        //when this link happens, we're inside a tab heading.
+        scope.$transcludeFn = transclude;
+      }
+    };
+  }])
+
+  .directive('tabHeadingTransclude', ['$log', '$tabsSuppressWarning', function($log, $tabsSuppressWarning) {
+    return {
+      restrict: 'A',
+      require: '^tab',
+      link: function(scope, elm) {
+        if (!$tabsSuppressWarning) {
+          $log.warn('tab-heading-transclude is now deprecated. Use uib-tab-heading-transclude instead.');
+        }
+
+        scope.$watch('headingElement', function updateHeadingElement(heading) {
+          if (heading) {
+            elm.html('');
+            elm.append(heading);
+          }
+        });
+      }
+    };
+  }])
+
+  .directive('tabContentTransclude', ['$log', '$tabsSuppressWarning', function($log, $tabsSuppressWarning) {
+    return {
+      restrict: 'A',
+      require: '^tabset',
+      link: function(scope, elm, attrs) {
+        if (!$tabsSuppressWarning) {
+          $log.warn('tab-content-transclude is now deprecated. Use uib-tab-content-transclude instead.');
+        }
+
+        var tab = scope.$eval(attrs.tabContentTransclude);
+
+        //Now our tab is ready to be transcluded: both the tab heading area
+        //and the tab content area are loaded.  Transclude 'em both.
+        tab.$transcludeFn(tab.$parent, function(contents) {
+          angular.forEach(contents, function(node) {
+            if (isTabHeading(node)) {
+              //Let tabHeadingTransclude know.
+              tab.headingElement = node;
+            }
+            else {
+              elm.append(node);
+            }
+          });
+        });
+      }
+    };
+
+    function isTabHeading(node) {
+      return node.tagName && (
+          node.hasAttribute('tab-heading') ||
+          node.hasAttribute('data-tab-heading') ||
+          node.hasAttribute('x-tab-heading') ||
+          node.tagName.toLowerCase() === 'tab-heading' ||
+          node.tagName.toLowerCase() === 'data-tab-heading' ||
+          node.tagName.toLowerCase() === 'x-tab-heading'
+        );
+    }
+  }]);
+
+angular.module('ui.bootstrap.timepicker', [])
+
+.constant('uibTimepickerConfig', {
+  hourStep: 1,
+  minuteStep: 1,
+  showMeridian: true,
+  meridians: null,
+  readonlyInput: false,
+  mousewheel: true,
+  arrowkeys: true,
+  showSpinners: true
+})
+
+.controller('UibTimepickerController', ['$scope', '$element', '$attrs', '$parse', '$log', '$locale', 'uibTimepickerConfig', function($scope, $element, $attrs, $parse, $log, $locale, timepickerConfig) {
+  var selected = new Date(),
+      ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl
+      meridians = angular.isDefined($attrs.meridians) ? $scope.$parent.$eval($attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS;
+
+  $scope.tabindex = angular.isDefined($attrs.tabindex) ? $attrs.tabindex : 0;
+  $element.removeAttr('tabindex');
+
+  this.init = function(ngModelCtrl_, inputs) {
+    ngModelCtrl = ngModelCtrl_;
+    ngModelCtrl.$render = this.render;
+
+    ngModelCtrl.$formatters.unshift(function(modelValue) {
+      return modelValue ? new Date(modelValue) : null;
+    });
+
+    var hoursInputEl = inputs.eq(0),
+        minutesInputEl = inputs.eq(1);
+
+    var mousewheel = angular.isDefined($attrs.mousewheel) ? $scope.$parent.$eval($attrs.mousewheel) : timepickerConfig.mousewheel;
+    if (mousewheel) {
+      this.setupMousewheelEvents(hoursInputEl, minutesInputEl);
+    }
+
+    var arrowkeys = angular.isDefined($attrs.arrowkeys) ? $scope.$parent.$eval($attrs.arrowkeys) : timepickerConfig.arrowkeys;
+    if (arrowkeys) {
+      this.setupArrowkeyEvents(hoursInputEl, minutesInputEl);
+    }
+
+    $scope.readonlyInput = angular.isDefined($attrs.readonlyInput) ? $scope.$parent.$eval($attrs.readonlyInput) : timepickerConfig.readonlyInput;
+    this.setupInputEvents(hoursInputEl, minutesInputEl);
+  };
+
+  var hourStep = timepickerConfig.hourStep;
+  if ($attrs.hourStep) {
+    $scope.$parent.$watch($parse($attrs.hourStep), function(value) {
+      hourStep = parseInt(value, 10);
+    });
+  }
+
+  var minuteStep = timepickerConfig.minuteStep;
+  if ($attrs.minuteStep) {
+    $scope.$parent.$watch($parse($attrs.minuteStep), function(value) {
+      minuteStep = parseInt(value, 10);
+    });
+  }
+
+  var min;
+  $scope.$parent.$watch($parse($attrs.min), function(value) {
+    var dt = new Date(value);
+    min = isNaN(dt) ? undefined : dt;
+  });
+
+  var max;
+  $scope.$parent.$watch($parse($attrs.max), function(value) {
+    var dt = new Date(value);
+    max = isNaN(dt) ? undefined : dt;
+  });
+
+  $scope.noIncrementHours = function() {
+    var incrementedSelected = addMinutes(selected, hourStep * 60);
+    return incrementedSelected > max ||
+      (incrementedSelected < selected && incrementedSelected < min);
+  };
+
+  $scope.noDecrementHours = function() {
+    var decrementedSelected = addMinutes(selected, -hourStep * 60);
+    return decrementedSelected < min ||
+      (decrementedSelected > selected && decrementedSelected > max);
+  };
+
+  $scope.noIncrementMinutes = function() {
+    var incrementedSelected = addMinutes(selected, minuteStep);
+    return incrementedSelected > max ||
+      (incrementedSelected < selected && incrementedSelected < min);
+  };
+
+  $scope.noDecrementMinutes = function() {
+    var decrementedSelected = addMinutes(selected, -minuteStep);
+    return decrementedSelected < min ||
+      (decrementedSelected > selected && decrementedSelected > max);
+  };
+
+  $scope.noToggleMeridian = function() {
+    if (selected.getHours() < 13) {
+      return addMinutes(selected, 12 * 60) > max;
+    } else {
+      return addMinutes(selected, -12 * 60) < min;
+    }
+  };
+
+  // 12H / 24H mode
+  $scope.showMeridian = timepickerConfig.showMeridian;
+  if ($attrs.showMeridian) {
+    $scope.$parent.$watch($parse($attrs.showMeridian), function(value) {
+      $scope.showMeridian = !!value;
+
+      if (ngModelCtrl.$error.time) {
+        // Evaluate from template
+        var hours = getHoursFromTemplate(), minutes = getMinutesFromTemplate();
+        if (angular.isDefined(hours) && angular.isDefined(minutes)) {
+          selected.setHours(hours);
+          refresh();
+        }
+      } else {
+        updateTemplate();
+      }
+    });
+  }
+
+  // Get $scope.hours in 24H mode if valid
+  function getHoursFromTemplate() {
+    var hours = parseInt($scope.hours, 10);
+    var valid = $scope.showMeridian ? (hours > 0 && hours < 13) : (hours >= 0 && hours < 24);
+    if (!valid) {
+      return undefined;
+    }
+
+    if ($scope.showMeridian) {
+      if (hours === 12) {
+        hours = 0;
+      }
+      if ($scope.meridian === meridians[1]) {
+        hours = hours + 12;
+      }
+    }
+    return hours;
+  }
+
+  function getMinutesFromTemplate() {
+    var minutes = parseInt($scope.minutes, 10);
+    return (minutes >= 0 && minutes < 60) ? minutes : undefined;
+  }
+
+  function pad(value) {
+    return (angular.isDefined(value) && value.toString().length < 2) ? '0' + value : value.toString();
+  }
+
+  // Respond on mousewheel spin
+  this.setupMousewheelEvents = function(hoursInputEl, minutesInputEl) {
+    var isScrollingUp = function(e) {
+      if (e.originalEvent) {
+        e = e.originalEvent;
+      }
+      //pick correct delta variable depending on event
+      var delta = (e.wheelDelta) ? e.wheelDelta : -e.deltaY;
+      return (e.detail || delta > 0);
+    };
+
+    hoursInputEl.bind('mousewheel wheel', function(e) {
+      $scope.$apply(isScrollingUp(e) ? $scope.incrementHours() : $scope.decrementHours());
+      e.preventDefault();
+    });
+
+    minutesInputEl.bind('mousewheel wheel', function(e) {
+      $scope.$apply(isScrollingUp(e) ? $scope.incrementMinutes() : $scope.decrementMinutes());
+      e.preventDefault();
+    });
+
+  };
+
+  // Respond on up/down arrowkeys
+  this.setupArrowkeyEvents = function(hoursInputEl, minutesInputEl) {
+    hoursInputEl.bind('keydown', function(e) {
+      if (e.which === 38) { // up
+        e.preventDefault();
+        $scope.incrementHours();
+        $scope.$apply();
+      } else if (e.which === 40) { // down
+        e.preventDefault();
+        $scope.decrementHours();
+        $scope.$apply();
+      }
+    });
+
+    minutesInputEl.bind('keydown', function(e) {
+      if (e.which === 38) { // up
+        e.preventDefault();
+        $scope.incrementMinutes();
+        $scope.$apply();
+      } else if (e.which === 40) { // down
+        e.preventDefault();
+        $scope.decrementMinutes();
+        $scope.$apply();
+      }
+    });
+  };
+
+  this.setupInputEvents = function(hoursInputEl, minutesInputEl) {
+    if ($scope.readonlyInput) {
+      $scope.updateHours = angular.noop;
+      $scope.updateMinutes = angular.noop;
+      return;
+    }
+
+    var invalidate = function(invalidHours, invalidMinutes) {
+      ngModelCtrl.$setViewValue(null);
+      ngModelCtrl.$setValidity('time', false);
+      if (angular.isDefined(invalidHours)) {
+        $scope.invalidHours = invalidHours;
+      }
+      if (angular.isDefined(invalidMinutes)) {
+        $scope.invalidMinutes = invalidMinutes;
+      }
+    };
+
+    $scope.updateHours = function() {
+      var hours = getHoursFromTemplate(),
+        minutes = getMinutesFromTemplate();
+
+      if (angular.isDefined(hours) && angular.isDefined(minutes)) {
+        selected.setHours(hours);
+        if (selected < min || selected > max) {
+          invalidate(true);
+        } else {
+          refresh('h');
+        }
+      } else {
+        invalidate(true);
+      }
+    };
+
+    hoursInputEl.bind('blur', function(e) {
+      if (!$scope.invalidHours && $scope.hours < 10) {
+        $scope.$apply(function() {
+          $scope.hours = pad($scope.hours);
+        });
+      }
+    });
+
+    $scope.updateMinutes = function() {
+      var minutes = getMinutesFromTemplate(),
+        hours = getHoursFromTemplate();
+
+      if (angular.isDefined(minutes) && angular.isDefined(hours)) {
+        selected.setMinutes(minutes);
+        if (selected < min || selected > max) {
+          invalidate(undefined, true);
+        } else {
+          refresh('m');
+        }
+      } else {
+        invalidate(undefined, true);
+      }
+    };
+
+    minutesInputEl.bind('blur', function(e) {
+      if (!$scope.invalidMinutes && $scope.minutes < 10) {
+        $scope.$apply(function() {
+          $scope.minutes = pad($scope.minutes);
+        });
+      }
+    });
+
+  };
+
+  this.render = function() {
+    var date = ngModelCtrl.$viewValue;
+
+    if (isNaN(date)) {
+      ngModelCtrl.$setValidity('time', false);
+      $log.error('Timepicker directive: "ng-model" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');
+    } else {
+      if (date) {
+        selected = date;
+      }
+
+      if (selected < min || selected > max) {
+        ngModelCtrl.$setValidity('time', false);
+        $scope.invalidHours = true;
+        $scope.invalidMinutes = true;
+      } else {
+        makeValid();
+      }
+      updateTemplate();
+    }
+  };
+
+  // Call internally when we know that model is valid.
+  function refresh(keyboardChange) {
+    makeValid();
+    ngModelCtrl.$setViewValue(new Date(selected));
+    updateTemplate(keyboardChange);
+  }
+
+  function makeValid() {
+    ngModelCtrl.$setValidity('time', true);
+    $scope.invalidHours = false;
+    $scope.invalidMinutes = false;
+  }
+
+  function updateTemplate(keyboardChange) {
+    var hours = selected.getHours(), minutes = selected.getMinutes();
+
+    if ($scope.showMeridian) {
+      hours = (hours === 0 || hours === 12) ? 12 : hours % 12; // Convert 24 to 12 hour system
+    }
+
+    $scope.hours = keyboardChange === 'h' ? hours : pad(hours);
+    if (keyboardChange !== 'm') {
+      $scope.minutes = pad(minutes);
+    }
+    $scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1];
+  }
+
+  function addMinutes(date, minutes) {
+    var dt = new Date(date.getTime() + minutes * 60000);
+    var newDate = new Date(date);
+    newDate.setHours(dt.getHours(), dt.getMinutes());
+    return newDate;
+  }
+
+  function addMinutesToSelected(minutes) {
+    selected = addMinutes(selected, minutes);
+    refresh();
+  }
+
+  $scope.showSpinners = angular.isDefined($attrs.showSpinners) ?
+    $scope.$parent.$eval($attrs.showSpinners) : timepickerConfig.showSpinners;
+
+  $scope.incrementHours = function() {
+    if (!$scope.noIncrementHours()) {
+      addMinutesToSelected(hourStep * 60);
+    }
+  };
+
+  $scope.decrementHours = function() {
+    if (!$scope.noDecrementHours()) {
+      addMinutesToSelected(-hourStep * 60);
+    }
+  };
+
+  $scope.incrementMinutes = function() {
+    if (!$scope.noIncrementMinutes()) {
+      addMinutesToSelected(minuteStep);
+    }
+  };
+
+  $scope.decrementMinutes = function() {
+    if (!$scope.noDecrementMinutes()) {
+      addMinutesToSelected(-minuteStep);
+    }
+  };
+
+  $scope.toggleMeridian = function() {
+    if (!$scope.noToggleMeridian()) {
+      addMinutesToSelected(12 * 60 * (selected.getHours() < 12 ? 1 : -1));
+    }
+  };
+}])
+
+.directive('uibTimepicker', function() {
+  return {
+    restrict: 'EA',
+    require: ['uibTimepicker', '?^ngModel'],
+    controller: 'UibTimepickerController',
+    controllerAs: 'timepicker',
+    replace: true,
+    scope: {},
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/timepicker/timepicker.html';
+    },
+    link: function(scope, element, attrs, ctrls) {
+      var timepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+      if (ngModelCtrl) {
+        timepickerCtrl.init(ngModelCtrl, element.find('input'));
+      }
+    }
+  };
+});
+
+/* Deprecated timepicker below */
+
+angular.module('ui.bootstrap.timepicker')
+
+.value('$timepickerSuppressWarning', false)
+
+.controller('TimepickerController', ['$scope', '$element', '$attrs', '$controller', '$log', '$timepickerSuppressWarning', function($scope, $element, $attrs, $controller, $log, $timepickerSuppressWarning) {
+  if (!$timepickerSuppressWarning) {
+    $log.warn('TimepickerController is now deprecated. Use UibTimepickerController instead.');
+  }
+
+  angular.extend(this, $controller('UibTimepickerController', {
+    $scope: $scope,
+    $element: $element,
+    $attrs: $attrs
+  }));
+}])
+
+.directive('timepicker', ['$log', '$timepickerSuppressWarning', function($log, $timepickerSuppressWarning) {
+  return {
+    restrict: 'EA',
+    require: ['timepicker', '?^ngModel'],
+    controller: 'TimepickerController',
+    controllerAs: 'timepicker',
+    replace: true,
+    scope: {},
+    templateUrl: function(element, attrs) {
+      return attrs.templateUrl || 'template/timepicker/timepicker.html';
+    },
+    link: function(scope, element, attrs, ctrls) {
+      if (!$timepickerSuppressWarning) {
+        $log.warn('timepicker is now deprecated. Use uib-timepicker instead.');
+      }
+      var timepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];
+
+      if (ngModelCtrl) {
+        timepickerCtrl.init(ngModelCtrl, element.find('input'));
+      }
+    }
+  };
+}]);
+
+angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position'])
+
+/**
+ * A helper service that can parse typeahead's syntax (string provided by users)
+ * Extracted to a separate service for ease of unit testing
+ */
+  .factory('uibTypeaheadParser', ['$parse', function($parse) {
+    //                      00000111000000000000022200000000000000003333333333333330000000000044000
+    var TYPEAHEAD_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+([\s\S]+?)$/;
+    return {
+      parse: function(input) {
+        var match = input.match(TYPEAHEAD_REGEXP);
+        if (!match) {
+          throw new Error(
+            'Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_"' +
+              ' but got "' + input + '".');
+        }
+
+        return {
+          itemName: match[3],
+          source: $parse(match[4]),
+          viewMapper: $parse(match[2] || match[1]),
+          modelMapper: $parse(match[1])
+        };
+      }
+    };
+  }])
+
+  .controller('UibTypeaheadController', ['$scope', '$element', '$attrs', '$compile', '$parse', '$q', '$timeout', '$document', '$window', '$rootScope', '$uibPosition', 'uibTypeaheadParser',
+    function(originalScope, element, attrs, $compile, $parse, $q, $timeout, $document, $window, $rootScope, $position, typeaheadParser) {
+    var HOT_KEYS = [9, 13, 27, 38, 40];
+    var eventDebounceTime = 200;
+    var modelCtrl, ngModelOptions;
+    //SUPPORTED ATTRIBUTES (OPTIONS)
+
+    //minimal no of characters that needs to be entered before typeahead kicks-in
+    var minLength = originalScope.$eval(attrs.typeaheadMinLength);
+    if (!minLength && minLength !== 0) {
+      minLength = 1;
+    }
+
+    //minimal wait time after last character typed before typeahead kicks-in
+    var waitTime = originalScope.$eval(attrs.typeaheadWaitMs) || 0;
+
+    //should it restrict model values to the ones selected from the popup only?
+    var isEditable = originalScope.$eval(attrs.typeaheadEditable) !== false;
+
+    //binding to a variable that indicates if matches are being retrieved asynchronously
+    var isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop;
+
+    //a callback executed when a match is selected
+    var onSelectCallback = $parse(attrs.typeaheadOnSelect);
+
+    //should it select highlighted popup value when losing focus?
+    var isSelectOnBlur = angular.isDefined(attrs.typeaheadSelectOnBlur) ? originalScope.$eval(attrs.typeaheadSelectOnBlur) : false;
+
+    //binding to a variable that indicates if there were no results after the query is completed
+    var isNoResultsSetter = $parse(attrs.typeaheadNoResults).assign || angular.noop;
+
+    var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined;
+
+    var appendToBody =  attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false;
+
+    var appendToElementId =  attrs.typeaheadAppendToElementId || false;
+
+    var focusFirst = originalScope.$eval(attrs.typeaheadFocusFirst) !== false;
+
+    //If input matches an item of the list exactly, select it automatically
+    var selectOnExact = attrs.typeaheadSelectOnExact ? originalScope.$eval(attrs.typeaheadSelectOnExact) : false;
+
+    //INTERNAL VARIABLES
+
+    //model setter executed upon match selection
+    var parsedModel = $parse(attrs.ngModel);
+    var invokeModelSetter = $parse(attrs.ngModel + '($$$p)');
+    var $setModelValue = function(scope, newValue) {
+      if (angular.isFunction(parsedModel(originalScope)) &&
+        ngModelOptions && ngModelOptions.$options && ngModelOptions.$options.getterSetter) {
+        return invokeModelSetter(scope, {$$$p: newValue});
+      } else {
+        return parsedModel.assign(scope, newValue);
+      }
+    };
+
+    //expressions used by typeahead
+    var parserResult = typeaheadParser.parse(attrs.uibTypeahead);
+
+    var hasFocus;
+
+    //Used to avoid bug in iOS webview where iOS keyboard does not fire
+    //mousedown & mouseup events
+    //Issue #3699
+    var selected;
+
+    //create a child scope for the typeahead directive so we are not polluting original scope
+    //with typeahead-specific data (matches, query etc.)
+    var scope = originalScope.$new();
+    var offDestroy = originalScope.$on('$destroy', function() {
+      scope.$destroy();
+    });
+    scope.$on('$destroy', offDestroy);
+
+    // WAI-ARIA
+    var popupId = 'typeahead-' + scope.$id + '-' + Math.floor(Math.random() * 10000);
+    element.attr({
+      'aria-autocomplete': 'list',
+      'aria-expanded': false,
+      'aria-owns': popupId
+    });
+
+    //pop-up element used to display matches
+    var popUpEl = angular.element('<div uib-typeahead-popup></div>');
+    popUpEl.attr({
+      id: popupId,
+      matches: 'matches',
+      active: 'activeIdx',
+      select: 'select(activeIdx)',
+      'move-in-progress': 'moveInProgress',
+      query: 'query',
+      position: 'position'
+    });
+    //custom item template
+    if (angular.isDefined(attrs.typeaheadTemplateUrl)) {
+      popUpEl.attr('template-url', attrs.typeaheadTemplateUrl);
+    }
+
+    if (angular.isDefined(attrs.typeaheadPopupTemplateUrl)) {
+      popUpEl.attr('popup-template-url', attrs.typeaheadPopupTemplateUrl);
+    }
+
+    var resetMatches = function() {
+      scope.matches = [];
+      scope.activeIdx = -1;
+      element.attr('aria-expanded', false);
+    };
+
+    var getMatchId = function(index) {
+      return popupId + '-option-' + index;
+    };
+
+    // Indicate that the specified match is the active (pre-selected) item in the list owned by this typeahead.
+    // This attribute is added or removed automatically when the `activeIdx` changes.
+    scope.$watch('activeIdx', function(index) {
+      if (index < 0) {
+        element.removeAttr('aria-activedescendant');
+      } else {
+        element.attr('aria-activedescendant', getMatchId(index));
+      }
+    });
+
+    var inputIsExactMatch = function(inputValue, index) {
+      if (scope.matches.length > index && inputValue) {
+        return inputValue.toUpperCase() === scope.matches[index].label.toUpperCase();
+      }
+
+      return false;
+    };
+
+    var getMatchesAsync = function(inputValue) {
+      var locals = {$viewValue: inputValue};
+      isLoadingSetter(originalScope, true);
+      isNoResultsSetter(originalScope, false);
+      $q.when(parserResult.source(originalScope, locals)).then(function(matches) {
+        //it might happen that several async queries were in progress if a user were typing fast
+        //but we are interested only in responses that correspond to the current view value
+        var onCurrentRequest = (inputValue === modelCtrl.$viewValue);
+        if (onCurrentRequest && hasFocus) {
+          if (matches && matches.length > 0) {
+            scope.activeIdx = focusFirst ? 0 : -1;
+            isNoResultsSetter(originalScope, false);
+            scope.matches.length = 0;
+
+            //transform labels
+            for (var i = 0; i < matches.length; i++) {
+              locals[parserResult.itemName] = matches[i];
+              scope.matches.push({
+                id: getMatchId(i),
+                label: parserResult.viewMapper(scope, locals),
+                model: matches[i]
+              });
+            }
+
+            scope.query = inputValue;
+            //position pop-up with matches - we need to re-calculate its position each time we are opening a window
+            //with matches as a pop-up might be absolute-positioned and position of an input might have changed on a page
+            //due to other elements being rendered
+            recalculatePosition();
+
+            element.attr('aria-expanded', true);
+
+            //Select the single remaining option if user input matches
+            if (selectOnExact && scope.matches.length === 1 && inputIsExactMatch(inputValue, 0)) {
+              scope.select(0);
+            }
+          } else {
+            resetMatches();
+            isNoResultsSetter(originalScope, true);
+          }
+        }
+        if (onCurrentRequest) {
+          isLoadingSetter(originalScope, false);
+        }
+      }, function() {
+        resetMatches();
+        isLoadingSetter(originalScope, false);
+        isNoResultsSetter(originalScope, true);
+      });
+    };
+
+    // bind events only if appendToBody params exist - performance feature
+    if (appendToBody) {
+      angular.element($window).bind('resize', fireRecalculating);
+      $document.find('body').bind('scroll', fireRecalculating);
+    }
+
+    // Declare the timeout promise var outside the function scope so that stacked calls can be cancelled later
+    var timeoutEventPromise;
+
+    // Default progress type
+    scope.moveInProgress = false;
+
+    function fireRecalculating() {
+      if (!scope.moveInProgress) {
+        scope.moveInProgress = true;
+        scope.$digest();
+      }
+
+      // Cancel previous timeout
+      if (timeoutEventPromise) {
+        $timeout.cancel(timeoutEventPromise);
+      }
+
+      // Debounced executing recalculate after events fired
+      timeoutEventPromise = $timeout(function() {
+        // if popup is visible
+        if (scope.matches.length) {
+          recalculatePosition();
+        }
+
+        scope.moveInProgress = false;
+      }, eventDebounceTime);
+    }
+
+    // recalculate actual position and set new values to scope
+    // after digest loop is popup in right position
+    function recalculatePosition() {
+      scope.position = appendToBody ? $position.offset(element) : $position.position(element);
+      scope.position.top += element.prop('offsetHeight');
+    }
+
+    //we need to propagate user's query so we can higlight matches
+    scope.query = undefined;
+
+    //Declare the timeout promise var outside the function scope so that stacked calls can be cancelled later
+    var timeoutPromise;
+
+    var scheduleSearchWithTimeout = function(inputValue) {
+      timeoutPromise = $timeout(function() {
+        getMatchesAsync(inputValue);
+      }, waitTime);
+    };
+
+    var cancelPreviousTimeout = function() {
+      if (timeoutPromise) {
+        $timeout.cancel(timeoutPromise);
+      }
+    };
+
+    resetMatches();
+
+    scope.select = function(activeIdx) {
+      //called from within the $digest() cycle
+      var locals = {};
+      var model, item;
+
+      selected = true;
+      locals[parserResult.itemName] = item = scope.matches[activeIdx].model;
+      model = parserResult.modelMapper(originalScope, locals);
+      $setModelValue(originalScope, model);
+      modelCtrl.$setValidity('editable', true);
+      modelCtrl.$setValidity('parse', true);
+
+      onSelectCallback(originalScope, {
+        $item: item,
+        $model: model,
+        $label: parserResult.viewMapper(originalScope, locals)
+      });
+
+      resetMatches();
+
+      //return focus to the input element if a match was selected via a mouse click event
+      // use timeout to avoid $rootScope:inprog error
+      if (scope.$eval(attrs.typeaheadFocusOnSelect) !== false) {
+        $timeout(function() { element[0].focus(); }, 0, false);
+      }
+    };
+
+    //bind keyboard events: arrows up(38) / down(40), enter(13) and tab(9), esc(27)
+    element.bind('keydown', function(evt) {
+      //typeahead is open and an "interesting" key was pressed
+      if (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) {
+        return;
+      }
+
+      // if there's nothing selected (i.e. focusFirst) and enter or tab is hit, clear the results
+      if (scope.activeIdx === -1 && (evt.which === 9 || evt.which === 13)) {
+        resetMatches();
+        scope.$digest();
+        return;
+      }
+
+      evt.preventDefault();
+
+      if (evt.which === 40) {
+        scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;
+        scope.$digest();
+      } else if (evt.which === 38) {
+        scope.activeIdx = (scope.activeIdx > 0 ? scope.activeIdx : scope.matches.length) - 1;
+        scope.$digest();
+      } else if (evt.which === 13 || evt.which === 9) {
+        scope.$apply(function () {
+          scope.select(scope.activeIdx);
+        });
+      } else if (evt.which === 27) {
+        evt.stopPropagation();
+
+        resetMatches();
+        scope.$digest();
+      }
+    });
+
+    element.bind('blur', function() {
+      if (isSelectOnBlur && scope.matches.length && scope.activeIdx !== -1 && !selected) {
+        selected = true;
+        scope.$apply(function() {
+          scope.select(scope.activeIdx);
+        });
+      }
+      hasFocus = false;
+      selected = false;
+    });
+
+    // Keep reference to click handler to unbind it.
+    var dismissClickHandler = function(evt) {
+      // Issue #3973
+      // Firefox treats right click as a click on document
+      if (element[0] !== evt.target && evt.which !== 3 && scope.matches.length !== 0) {
+        resetMatches();
+        if (!$rootScope.$$phase) {
+          scope.$digest();
+        }
+      }
+    };
+
+    $document.bind('click', dismissClickHandler);
+
+    originalScope.$on('$destroy', function() {
+      $document.unbind('click', dismissClickHandler);
+      if (appendToBody || appendToElementId) {
+        $popup.remove();
+      }
+
+      if (appendToBody) {
+        angular.element($window).unbind('resize', fireRecalculating);
+        $document.find('body').unbind('scroll', fireRecalculating);
+      }
+      // Prevent jQuery cache memory leak
+      popUpEl.remove();
+    });
+
+    var $popup = $compile(popUpEl)(scope);
+
+    if (appendToBody) {
+      $document.find('body').append($popup);
+    } else if (appendToElementId !== false) {
+      angular.element($document[0].getElementById(appendToElementId)).append($popup);
+    } else {
+      element.after($popup);
+    }
+
+    this.init = function(_modelCtrl, _ngModelOptions) {
+      modelCtrl = _modelCtrl;
+      ngModelOptions = _ngModelOptions;
+
+      //plug into $parsers pipeline to open a typeahead on view changes initiated from DOM
+      //$parsers kick-in on all the changes coming from the view as well as manually triggered by $setViewValue
+      modelCtrl.$parsers.unshift(function(inputValue) {
+        hasFocus = true;
+
+        if (minLength === 0 || inputValue && inputValue.length >= minLength) {
+          if (waitTime > 0) {
+            cancelPreviousTimeout();
+            scheduleSearchWithTimeout(inputValue);
+          } else {
+            getMatchesAsync(inputValue);
+          }
+        } else {
+          isLoadingSetter(originalScope, false);
+          cancelPreviousTimeout();
+          resetMatches();
+        }
+
+        if (isEditable) {
+          return inputValue;
+        } else {
+          if (!inputValue) {
+            // Reset in case user had typed something previously.
+            modelCtrl.$setValidity('editable', true);
+            return null;
+          } else {
+            modelCtrl.$setValidity('editable', false);
+            return undefined;
+          }
+        }
+      });
+
+      modelCtrl.$formatters.push(function(modelValue) {
+        var candidateViewValue, emptyViewValue;
+        var locals = {};
+
+        // The validity may be set to false via $parsers (see above) if
+        // the model is restricted to selected values. If the model
+        // is set manually it is considered to be valid.
+        if (!isEditable) {
+          modelCtrl.$setValidity('editable', true);
+        }
+
+        if (inputFormatter) {
+          locals.$model = modelValue;
+          return inputFormatter(originalScope, locals);
+        } else {
+          //it might happen that we don't have enough info to properly render input value
+          //we need to check for this situation and simply return model value if we can't apply custom formatting
+          locals[parserResult.itemName] = modelValue;
+          candidateViewValue = parserResult.viewMapper(originalScope, locals);
+          locals[parserResult.itemName] = undefined;
+          emptyViewValue = parserResult.viewMapper(originalScope, locals);
+
+          return candidateViewValue !== emptyViewValue ? candidateViewValue : modelValue;
+        }
+      });
+    };
+  }])
+
+  .directive('uibTypeahead', function() {
+    return {
+      controller: 'UibTypeaheadController',
+      require: ['ngModel', '^?ngModelOptions', 'uibTypeahead'],
+      link: function(originalScope, element, attrs, ctrls) {
+        ctrls[2].init(ctrls[0], ctrls[1]);
+      }
+    };
+  })
+
+  .directive('uibTypeaheadPopup', function() {
+    return {
+      scope: {
+        matches: '=',
+        query: '=',
+        active: '=',
+        position: '&',
+        moveInProgress: '=',
+        select: '&'
+      },
+      replace: true,
+      templateUrl: function(element, attrs) {
+        return attrs.popupTemplateUrl || 'template/typeahead/typeahead-popup.html';
+      },
+      link: function(scope, element, attrs) {
+        scope.templateUrl = attrs.templateUrl;
+
+        scope.isOpen = function() {
+          return scope.matches.length > 0;
+        };
+
+        scope.isActive = function(matchIdx) {
+          return scope.active == matchIdx;
+        };
+
+        scope.selectActive = function(matchIdx) {
+          scope.active = matchIdx;
+        };
+
+        scope.selectMatch = function(activeIdx) {
+          scope.select({activeIdx:activeIdx});
+        };
+      }
+    };
+  })
+
+  .directive('uibTypeaheadMatch', ['$templateRequest', '$compile', '$parse', function($templateRequest, $compile, $parse) {
+    return {
+      scope: {
+        index: '=',
+        match: '=',
+        query: '='
+      },
+      link:function(scope, element, attrs) {
+        var tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'template/typeahead/typeahead-match.html';
+        $templateRequest(tplUrl).then(function(tplContent) {
+          $compile(tplContent.trim())(scope, function(clonedElement) {
+            element.replaceWith(clonedElement);
+          });
+        });
+      }
+    };
+  }])
+
+  .filter('uibTypeaheadHighlight', ['$sce', '$injector', '$log', function($sce, $injector, $log) {
+    var isSanitizePresent;
+    isSanitizePresent = $injector.has('$sanitize');
+
+    function escapeRegexp(queryToEscape) {
+      // Regex: capture the whole query string and replace it with the string that will be used to match
+      // the results, for example if the capture is "a" the result will be \a
+      return queryToEscape.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
+    }
+
+    function containsHtml(matchItem) {
+      return /<.*>/g.test(matchItem);
+    }
+
+    return function(matchItem, query) {
+      if (!isSanitizePresent && containsHtml(matchItem)) {
+        $log.warn('Unsafe use of typeahead please use ngSanitize'); // Warn the user about the danger
+      }
+      matchItem = query? ('' + matchItem).replace(new RegExp(escapeRegexp(query), 'gi'), '<strong>$&</strong>') : matchItem; // Replaces the capture string with a the same string inside of a "strong" tag
+      if (!isSanitizePresent) {
+        matchItem = $sce.trustAsHtml(matchItem); // If $sanitize is not present we pack the string in a $sce object for the ng-bind-html directive
+      }
+      return matchItem;
+    };
+  }]);
+
+/* Deprecated typeahead below */
+  
+angular.module('ui.bootstrap.typeahead')
+  .value('$typeaheadSuppressWarning', false)
+  .service('typeaheadParser', ['$parse', 'uibTypeaheadParser', '$log', '$typeaheadSuppressWarning', function($parse, uibTypeaheadParser, $log, $typeaheadSuppressWarning) {
+    if (!$typeaheadSuppressWarning) {
+      $log.warn('typeaheadParser is now deprecated. Use uibTypeaheadParser instead.');
+    }
+
+    return uibTypeaheadParser;
+  }])
+
+  .directive('typeahead', ['$compile', '$parse', '$q', '$timeout', '$document', '$window', '$rootScope', '$uibPosition', 'typeaheadParser', '$log', '$typeaheadSuppressWarning',
+    function($compile, $parse, $q, $timeout, $document, $window, $rootScope, $position, typeaheadParser, $log, $typeaheadSuppressWarning) {
+    var HOT_KEYS = [9, 13, 27, 38, 40];
+    var eventDebounceTime = 200;
+    return {
+      require: ['ngModel', '^?ngModelOptions'],
+      link: function(originalScope, element, attrs, ctrls) {
+        if (!$typeaheadSuppressWarning) {
+          $log.warn('typeahead is now deprecated. Use uib-typeahead instead.');
+        }
+        var modelCtrl = ctrls[0];
+        var ngModelOptions = ctrls[1];
+        //SUPPORTED ATTRIBUTES (OPTIONS)
+
+        //minimal no of characters that needs to be entered before typeahead kicks-in
+        var minLength = originalScope.$eval(attrs.typeaheadMinLength);
+        if (!minLength && minLength !== 0) {
+          minLength = 1;
+        }
+
+        //minimal wait time after last character typed before typeahead kicks-in
+        var waitTime = originalScope.$eval(attrs.typeaheadWaitMs) || 0;
+
+        //should it restrict model values to the ones selected from the popup only?
+        var isEditable = originalScope.$eval(attrs.typeaheadEditable) !== false;
+
+        //binding to a variable that indicates if matches are being retrieved asynchronously
+        var isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop;
+
+        //a callback executed when a match is selected
+        var onSelectCallback = $parse(attrs.typeaheadOnSelect);
+
+        //should it select highlighted popup value when losing focus?
+        var isSelectOnBlur = angular.isDefined(attrs.typeaheadSelectOnBlur) ? originalScope.$eval(attrs.typeaheadSelectOnBlur) : false;
+
+        //binding to a variable that indicates if there were no results after the query is completed
+        var isNoResultsSetter = $parse(attrs.typeaheadNoResults).assign || angular.noop;
+
+        var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined;
+
+        var appendToBody =  attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false;
+
+        var appendToElementId =  attrs.typeaheadAppendToElementId || false;
+
+        var focusFirst = originalScope.$eval(attrs.typeaheadFocusFirst) !== false;
+
+        //If input matches an item of the list exactly, select it automatically
+        var selectOnExact = attrs.typeaheadSelectOnExact ? originalScope.$eval(attrs.typeaheadSelectOnExact) : false;
+
+        //INTERNAL VARIABLES
+
+        //model setter executed upon match selection
+        var parsedModel = $parse(attrs.ngModel);
+        var invokeModelSetter = $parse(attrs.ngModel + '($$$p)');
+        var $setModelValue = function(scope, newValue) {
+          if (angular.isFunction(parsedModel(originalScope)) &&
+            ngModelOptions && ngModelOptions.$options && ngModelOptions.$options.getterSetter) {
+            return invokeModelSetter(scope, {$$$p: newValue});
+          } else {
+            return parsedModel.assign(scope, newValue);
+          }
+        };
+
+        //expressions used by typeahead
+        var parserResult = typeaheadParser.parse(attrs.typeahead);
+
+        var hasFocus;
+
+        //Used to avoid bug in iOS webview where iOS keyboard does not fire
+        //mousedown & mouseup events
+        //Issue #3699
+        var selected;
+
+        //create a child scope for the typeahead directive so we are not polluting original scope
+        //with typeahead-specific data (matches, query etc.)
+        var scope = originalScope.$new();
+        var offDestroy = originalScope.$on('$destroy', function() {
+			    scope.$destroy();
+        });
+        scope.$on('$destroy', offDestroy);
+
+        // WAI-ARIA
+        var popupId = 'typeahead-' + scope.$id + '-' + Math.floor(Math.random() * 10000);
+        element.attr({
+          'aria-autocomplete': 'list',
+          'aria-expanded': false,
+          'aria-owns': popupId
+        });
+
+        //pop-up element used to display matches
+        var popUpEl = angular.element('<div typeahead-popup></div>');
+        popUpEl.attr({
+          id: popupId,
+          matches: 'matches',
+          active: 'activeIdx',
+          select: 'select(activeIdx)',
+          'move-in-progress': 'moveInProgress',
+          query: 'query',
+          position: 'position'
+        });
+        //custom item template
+        if (angular.isDefined(attrs.typeaheadTemplateUrl)) {
+          popUpEl.attr('template-url', attrs.typeaheadTemplateUrl);
+        }
+
+        if (angular.isDefined(attrs.typeaheadPopupTemplateUrl)) {
+          popUpEl.attr('popup-template-url', attrs.typeaheadPopupTemplateUrl);
+        }
+
+        var resetMatches = function() {
+          scope.matches = [];
+          scope.activeIdx = -1;
+          element.attr('aria-expanded', false);
+        };
+
+        var getMatchId = function(index) {
+          return popupId + '-option-' + index;
+        };
+
+        // Indicate that the specified match is the active (pre-selected) item in the list owned by this typeahead.
+        // This attribute is added or removed automatically when the `activeIdx` changes.
+        scope.$watch('activeIdx', function(index) {
+          if (index < 0) {
+            element.removeAttr('aria-activedescendant');
+          } else {
+            element.attr('aria-activedescendant', getMatchId(index));
+          }
+        });
+
+        var inputIsExactMatch = function(inputValue, index) {
+          if (scope.matches.length > index && inputValue) {
+            return inputValue.toUpperCase() === scope.matches[index].label.toUpperCase();
+          }
+
+          return false;
+        };
+
+        var getMatchesAsync = function(inputValue) {
+          var locals = {$viewValue: inputValue};
+          isLoadingSetter(originalScope, true);
+          isNoResultsSetter(originalScope, false);
+          $q.when(parserResult.source(originalScope, locals)).then(function(matches) {
+            //it might happen that several async queries were in progress if a user were typing fast
+            //but we are interested only in responses that correspond to the current view value
+            var onCurrentRequest = (inputValue === modelCtrl.$viewValue);
+            if (onCurrentRequest && hasFocus) {
+              if (matches && matches.length > 0) {
+                scope.activeIdx = focusFirst ? 0 : -1;
+                isNoResultsSetter(originalScope, false);
+                scope.matches.length = 0;
+
+                //transform labels
+                for (var i = 0; i < matches.length; i++) {
+                  locals[parserResult.itemName] = matches[i];
+                  scope.matches.push({
+                    id: getMatchId(i),
+                    label: parserResult.viewMapper(scope, locals),
+                    model: matches[i]
+                  });
+                }
+
+                scope.query = inputValue;
+                //position pop-up with matches - we need to re-calculate its position each time we are opening a window
+                //with matches as a pop-up might be absolute-positioned and position of an input might have changed on a page
+                //due to other elements being rendered
+                recalculatePosition();
+
+                element.attr('aria-expanded', true);
+
+                //Select the single remaining option if user input matches
+                if (selectOnExact && scope.matches.length === 1 && inputIsExactMatch(inputValue, 0)) {
+                  scope.select(0);
+                }
+              } else {
+                resetMatches();
+                isNoResultsSetter(originalScope, true);
+              }
+            }
+            if (onCurrentRequest) {
+              isLoadingSetter(originalScope, false);
+            }
+          }, function() {
+            resetMatches();
+            isLoadingSetter(originalScope, false);
+            isNoResultsSetter(originalScope, true);
+          });
+        };
+
+        // bind events only if appendToBody params exist - performance feature
+        if (appendToBody) {
+          angular.element($window).bind('resize', fireRecalculating);
+          $document.find('body').bind('scroll', fireRecalculating);
+        }
+
+        // Declare the timeout promise var outside the function scope so that stacked calls can be cancelled later
+        var timeoutEventPromise;
+
+        // Default progress type
+        scope.moveInProgress = false;
+
+        function fireRecalculating() {
+          if (!scope.moveInProgress) {
+            scope.moveInProgress = true;
+            scope.$digest();
+          }
+
+          // Cancel previous timeout
+          if (timeoutEventPromise) {
+            $timeout.cancel(timeoutEventPromise);
+          }
+
+          // Debounced executing recalculate after events fired
+          timeoutEventPromise = $timeout(function() {
+            // if popup is visible
+            if (scope.matches.length) {
+              recalculatePosition();
+            }
+
+            scope.moveInProgress = false;
+          }, eventDebounceTime);
+        }
+
+        // recalculate actual position and set new values to scope
+        // after digest loop is popup in right position
+        function recalculatePosition() {
+          scope.position = appendToBody ? $position.offset(element) : $position.position(element);
+          scope.position.top += element.prop('offsetHeight');
+        }
+
+        resetMatches();
+
+        //we need to propagate user's query so we can higlight matches
+        scope.query = undefined;
+
+        //Declare the timeout promise var outside the function scope so that stacked calls can be cancelled later
+        var timeoutPromise;
+
+        var scheduleSearchWithTimeout = function(inputValue) {
+          timeoutPromise = $timeout(function() {
+            getMatchesAsync(inputValue);
+          }, waitTime);
+        };
+
+        var cancelPreviousTimeout = function() {
+          if (timeoutPromise) {
+            $timeout.cancel(timeoutPromise);
+          }
+        };
+
+        //plug into $parsers pipeline to open a typeahead on view changes initiated from DOM
+        //$parsers kick-in on all the changes coming from the view as well as manually triggered by $setViewValue
+        modelCtrl.$parsers.unshift(function(inputValue) {
+          hasFocus = true;
+
+          if (minLength === 0 || inputValue && inputValue.length >= minLength) {
+            if (waitTime > 0) {
+              cancelPreviousTimeout();
+              scheduleSearchWithTimeout(inputValue);
+            } else {
+              getMatchesAsync(inputValue);
+            }
+          } else {
+            isLoadingSetter(originalScope, false);
+            cancelPreviousTimeout();
+            resetMatches();
+          }
+
+          if (isEditable) {
+            return inputValue;
+          } else {
+            if (!inputValue) {
+              // Reset in case user had typed something previously.
+              modelCtrl.$setValidity('editable', true);
+              return null;
+            } else {
+              modelCtrl.$setValidity('editable', false);
+              return undefined;
+            }
+          }
+        });
+
+        modelCtrl.$formatters.push(function(modelValue) {
+          var candidateViewValue, emptyViewValue;
+          var locals = {};
+
+          // The validity may be set to false via $parsers (see above) if
+          // the model is restricted to selected values. If the model
+          // is set manually it is considered to be valid.
+          if (!isEditable) {
+            modelCtrl.$setValidity('editable', true);
+          }
+
+          if (inputFormatter) {
+            locals.$model = modelValue;
+            return inputFormatter(originalScope, locals);
+          } else {
+            //it might happen that we don't have enough info to properly render input value
+            //we need to check for this situation and simply return model value if we can't apply custom formatting
+            locals[parserResult.itemName] = modelValue;
+            candidateViewValue = parserResult.viewMapper(originalScope, locals);
+            locals[parserResult.itemName] = undefined;
+            emptyViewValue = parserResult.viewMapper(originalScope, locals);
+
+            return candidateViewValue !== emptyViewValue ? candidateViewValue : modelValue;
+          }
+        });
+
+        scope.select = function(activeIdx) {
+          //called from within the $digest() cycle
+          var locals = {};
+          var model, item;
+
+          selected = true;
+          locals[parserResult.itemName] = item = scope.matches[activeIdx].model;
+          model = parserResult.modelMapper(originalScope, locals);
+          $setModelValue(originalScope, model);
+          modelCtrl.$setValidity('editable', true);
+          modelCtrl.$setValidity('parse', true);
+
+          onSelectCallback(originalScope, {
+            $item: item,
+            $model: model,
+            $label: parserResult.viewMapper(originalScope, locals)
+          });
+
+          resetMatches();
+
+          //return focus to the input element if a match was selected via a mouse click event
+          // use timeout to avoid $rootScope:inprog error
+          if (scope.$eval(attrs.typeaheadFocusOnSelect) !== false) {
+            $timeout(function() { element[0].focus(); }, 0, false);
+          }
+        };
+
+        //bind keyboard events: arrows up(38) / down(40), enter(13) and tab(9), esc(27)
+        element.bind('keydown', function(evt) {
+          //typeahead is open and an "interesting" key was pressed
+          if (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) {
+            return;
+          }
+
+          // if there's nothing selected (i.e. focusFirst) and enter or tab is hit, clear the results
+          if (scope.activeIdx === -1 && (evt.which === 9 || evt.which === 13)) {
+            resetMatches();
+            scope.$digest();
+            return;
+          }
+
+          evt.preventDefault();
+
+          if (evt.which === 40) {
+            scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length;
+            scope.$digest();
+          } else if (evt.which === 38) {
+            scope.activeIdx = (scope.activeIdx > 0 ? scope.activeIdx : scope.matches.length) - 1;
+            scope.$digest();
+          } else if (evt.which === 13 || evt.which === 9) {
+            scope.$apply(function () {
+              scope.select(scope.activeIdx);
+            });
+          } else if (evt.which === 27) {
+            evt.stopPropagation();
+
+            resetMatches();
+            scope.$digest();
+          }
+        });
+
+        element.bind('blur', function() {
+          if (isSelectOnBlur && scope.matches.length && scope.activeIdx !== -1 && !selected) {
+            selected = true;
+            scope.$apply(function() {
+              scope.select(scope.activeIdx);
+            });
+          }
+          hasFocus = false;
+          selected = false;
+        });
+
+        // Keep reference to click handler to unbind it.
+        var dismissClickHandler = function(evt) {
+          // Issue #3973
+          // Firefox treats right click as a click on document
+          if (element[0] !== evt.target && evt.which !== 3 && scope.matches.length !== 0) {
+            resetMatches();
+            if (!$rootScope.$$phase) {
+              scope.$digest();
+            }
+          }
+        };
+
+        $document.bind('click', dismissClickHandler);
+
+        originalScope.$on('$destroy', function() {
+          $document.unbind('click', dismissClickHandler);
+          if (appendToBody || appendToElementId) {
+            $popup.remove();
+          }
+
+          if (appendToBody) {
+            angular.element($window).unbind('resize', fireRecalculating);
+            $document.find('body').unbind('scroll', fireRecalculating);
+          }
+          // Prevent jQuery cache memory leak
+          popUpEl.remove();
+        });
+
+        var $popup = $compile(popUpEl)(scope);
+
+        if (appendToBody) {
+          $document.find('body').append($popup);
+        } else if (appendToElementId !== false) {
+          angular.element($document[0].getElementById(appendToElementId)).append($popup);
+        } else {
+          element.after($popup);
+        }
+      }
+    };
+  }])
+  
+  .directive('typeaheadPopup', ['$typeaheadSuppressWarning', '$log', function($typeaheadSuppressWarning, $log) {
+    return {
+      scope: {
+        matches: '=',
+        query: '=',
+        active: '=',
+        position: '&',
+        moveInProgress: '=',
+        select: '&'
+      },
+      replace: true,
+      templateUrl: function(element, attrs) {
+        return attrs.popupTemplateUrl || 'template/typeahead/typeahead-popup.html';
+      },
+      link: function(scope, element, attrs) {
+        
+        if (!$typeaheadSuppressWarning) {
+          $log.warn('typeahead-popup is now deprecated. Use uib-typeahead-popup instead.');
+        }
+        scope.templateUrl = attrs.templateUrl;
+
+        scope.isOpen = function() {
+          return scope.matches.length > 0;
+        };
+
+        scope.isActive = function(matchIdx) {
+          return scope.active == matchIdx;
+        };
+
+        scope.selectActive = function(matchIdx) {
+          scope.active = matchIdx;
+        };
+
+        scope.selectMatch = function(activeIdx) {
+          scope.select({activeIdx:activeIdx});
+        };
+      }
+    };
+  }])
+  
+  .directive('typeaheadMatch', ['$templateRequest', '$compile', '$parse', '$typeaheadSuppressWarning', '$log', function($templateRequest, $compile, $parse, $typeaheadSuppressWarning, $log) {
+    return {
+      restrict: 'EA',
+      scope: {
+        index: '=',
+        match: '=',
+        query: '='
+      },
+      link:function(scope, element, attrs) {
+        if (!$typeaheadSuppressWarning) {
+          $log.warn('typeahead-match is now deprecated. Use uib-typeahead-match instead.');
+        }
+
+        var tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'template/typeahead/typeahead-match.html';
+        $templateRequest(tplUrl).then(function(tplContent) {
+          $compile(tplContent.trim())(scope, function(clonedElement) {
+            element.replaceWith(clonedElement);
+          });
+        });
+      }
+    };
+  }])
+  
+  .filter('typeaheadHighlight', ['$sce', '$injector', '$log', '$typeaheadSuppressWarning', function($sce, $injector, $log, $typeaheadSuppressWarning) {
+    var isSanitizePresent;
+    isSanitizePresent = $injector.has('$sanitize');
+
+    function escapeRegexp(queryToEscape) {
+      // Regex: capture the whole query string and replace it with the string that will be used to match
+      // the results, for example if the capture is "a" the result will be \a
+      return queryToEscape.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
+    }
+
+    function containsHtml(matchItem) {
+      return /<.*>/g.test(matchItem);
+    }
+
+    return function(matchItem, query) {
+      if (!$typeaheadSuppressWarning) {
+        $log.warn('typeaheadHighlight is now deprecated. Use uibTypeaheadHighlight instead.');
+      }
+
+      if (!isSanitizePresent && containsHtml(matchItem)) {
+        $log.warn('Unsafe use of typeahead please use ngSanitize'); // Warn the user about the danger
+      }
+
+      matchItem = query? ('' + matchItem).replace(new RegExp(escapeRegexp(query), 'gi'), '<strong>$&</strong>') : matchItem; // Replaces the capture string with a the same string inside of a "strong" tag
+      if (!isSanitizePresent) {
+        matchItem = $sce.trustAsHtml(matchItem); // If $sanitize is not present we pack the string in a $sce object for the ng-bind-html directive
+      }
+
+      return matchItem;
+    };
+  }]);
+
+angular.module("template/accordion/accordion-group.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/accordion/accordion-group.html",
+    "<div class=\"panel {{panelClass || 'panel-default'}}\">\n" +
+    "  <div class=\"panel-heading\" ng-keypress=\"toggleOpen($event)\">\n" +
+    "    <h4 class=\"panel-title\">\n" +
+    "      <a href tabindex=\"0\" class=\"accordion-toggle\" ng-click=\"toggleOpen()\" uib-accordion-transclude=\"heading\"><span ng-class=\"{'text-muted': isDisabled}\">{{heading}}</span></a>\n" +
+    "    </h4>\n" +
+    "  </div>\n" +
+    "  <div class=\"panel-collapse collapse\" uib-collapse=\"!isOpen\">\n" +
+    "	  <div class=\"panel-body\" ng-transclude></div>\n" +
+    "  </div>\n" +
+    "</div>\n" +
+    "");
+}]);
+
+angular.module("template/accordion/accordion.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/accordion/accordion.html",
+    "<div class=\"panel-group\" ng-transclude></div>");
+}]);
+
+angular.module("template/alert/alert.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/alert/alert.html",
+    "<div class=\"alert\" ng-class=\"['alert-' + (type || 'warning'), closeable ? 'alert-dismissible' : null]\" role=\"alert\">\n" +
+    "    <button ng-show=\"closeable\" type=\"button\" class=\"close\" ng-click=\"close({$event: $event})\">\n" +
+    "        <span aria-hidden=\"true\">&times;</span>\n" +
+    "        <span class=\"sr-only\">Close</span>\n" +
+    "    </button>\n" +
+    "    <div ng-transclude></div>\n" +
+    "</div>\n" +
+    "");
+}]);
+
+angular.module("template/carousel/carousel.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/carousel/carousel.html",
+    "<div ng-mouseenter=\"pause()\" ng-mouseleave=\"play()\" class=\"carousel\" ng-swipe-right=\"prev()\" ng-swipe-left=\"next()\">\n" +
+    "  <div class=\"carousel-inner\" ng-transclude></div>\n" +
+    "  <a role=\"button\" href class=\"left carousel-control\" ng-click=\"prev()\" ng-show=\"slides.length > 1\">\n" +
+    "    <span aria-hidden=\"true\" class=\"glyphicon glyphicon-chevron-left\"></span>\n" +
+    "    <span class=\"sr-only\">previous</span>\n" +
+    "  </a>\n" +
+    "  <a role=\"button\" href class=\"right carousel-control\" ng-click=\"next()\" ng-show=\"slides.length > 1\">\n" +
+    "    <span aria-hidden=\"true\" class=\"glyphicon glyphicon-chevron-right\"></span>\n" +
+    "    <span class=\"sr-only\">next</span>\n" +
+    "  </a>\n" +
+    "  <ol class=\"carousel-indicators\" ng-show=\"slides.length > 1\">\n" +
+    "    <li ng-repeat=\"slide in slides | orderBy:indexOfSlide track by $index\" ng-class=\"{ active: isActive(slide) }\" ng-click=\"select(slide)\">\n" +
+    "      <span class=\"sr-only\">slide {{ $index + 1 }} of {{ slides.length }}<span ng-if=\"isActive(slide)\">, currently active</span></span>\n" +
+    "    </li>\n" +
+    "  </ol>\n" +
+    "</div>");
+}]);
+
+angular.module("template/carousel/slide.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/carousel/slide.html",
+    "<div ng-class=\"{\n" +
+    "    'active': active\n" +
+    "  }\" class=\"item text-center\" ng-transclude></div>\n" +
+    "");
+}]);
+
+angular.module("template/datepicker/datepicker.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/datepicker/datepicker.html",
+    "<div ng-switch=\"datepickerMode\" role=\"application\" ng-keydown=\"keydown($event)\">\n" +
+    "  <uib-daypicker ng-switch-when=\"day\" tabindex=\"0\"></uib-daypicker>\n" +
+    "  <uib-monthpicker ng-switch-when=\"month\" tabindex=\"0\"></uib-monthpicker>\n" +
+    "  <uib-yearpicker ng-switch-when=\"year\" tabindex=\"0\"></uib-yearpicker>\n" +
+    "</div>");
+}]);
+
+angular.module("template/datepicker/day.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/datepicker/day.html",
+    "<table role=\"grid\" aria-labelledby=\"{{::uniqueId}}-title\" aria-activedescendant=\"{{activeDateId}}\">\n" +
+    "  <thead>\n" +
+    "    <tr>\n" +
+    "      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left\" ng-click=\"move(-1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-left\"></i></button></th>\n" +
+    "      <th colspan=\"{{::5 + showWeeks}}\"><button id=\"{{::uniqueId}}-title\" role=\"heading\" aria-live=\"assertive\" aria-atomic=\"true\" type=\"button\" class=\"btn btn-default btn-sm\" ng-click=\"toggleMode()\" ng-disabled=\"datepickerMode === maxMode\" tabindex=\"-1\" style=\"width:100%;\"><strong>{{title}}</strong></button></th>\n" +
+    "      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-right\" ng-click=\"move(1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-right\"></i></button></th>\n" +
+    "    </tr>\n" +
+    "    <tr>\n" +
+    "      <th ng-if=\"showWeeks\" class=\"text-center\"></th>\n" +
+    "      <th ng-repeat=\"label in ::labels track by $index\" class=\"text-center\"><small aria-label=\"{{::label.full}}\">{{::label.abbr}}</small></th>\n" +
+    "    </tr>\n" +
+    "  </thead>\n" +
+    "  <tbody>\n" +
+    "    <tr ng-repeat=\"row in rows track by $index\">\n" +
+    "      <td ng-if=\"showWeeks\" class=\"text-center h6\"><em>{{ weekNumbers[$index] }}</em></td>\n" +
+    "      <td ng-repeat=\"dt in row track by dt.date\" class=\"text-center\" role=\"gridcell\" id=\"{{::dt.uid}}\" ng-class=\"::dt.customClass\">\n" +
+    "        <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default btn-sm\" ng-class=\"{'btn-info': dt.selected, active: isActive(dt)}\" ng-click=\"select(dt.date)\" ng-disabled=\"dt.disabled\" tabindex=\"-1\"><span ng-class=\"::{'text-muted': dt.secondary, 'text-info': dt.current}\">{{::dt.label}}</span></button>\n" +
+    "      </td>\n" +
+    "    </tr>\n" +
+    "  </tbody>\n" +
+    "</table>\n" +
+    "");
+}]);
+
+angular.module("template/datepicker/month.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/datepicker/month.html",
+    "<table role=\"grid\" aria-labelledby=\"{{::uniqueId}}-title\" aria-activedescendant=\"{{activeDateId}}\">\n" +
+    "  <thead>\n" +
+    "    <tr>\n" +
+    "      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left\" ng-click=\"move(-1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-left\"></i></button></th>\n" +
+    "      <th><button id=\"{{::uniqueId}}-title\" role=\"heading\" aria-live=\"assertive\" aria-atomic=\"true\" type=\"button\" class=\"btn btn-default btn-sm\" ng-click=\"toggleMode()\" ng-disabled=\"datepickerMode === maxMode\" tabindex=\"-1\" style=\"width:100%;\"><strong>{{title}}</strong></button></th>\n" +
+    "      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-right\" ng-click=\"move(1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-right\"></i></button></th>\n" +
+    "    </tr>\n" +
+    "  </thead>\n" +
+    "  <tbody>\n" +
+    "    <tr ng-repeat=\"row in rows track by $index\">\n" +
+    "      <td ng-repeat=\"dt in row track by dt.date\" class=\"text-center\" role=\"gridcell\" id=\"{{::dt.uid}}\" ng-class=\"::dt.customClass\">\n" +
+    "        <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default\" ng-class=\"{'btn-info': dt.selected, active: isActive(dt)}\" ng-click=\"select(dt.date)\" ng-disabled=\"dt.disabled\" tabindex=\"-1\"><span ng-class=\"::{'text-info': dt.current}\">{{::dt.label}}</span></button>\n" +
+    "      </td>\n" +
+    "    </tr>\n" +
+    "  </tbody>\n" +
+    "</table>\n" +
+    "");
+}]);
+
+angular.module("template/datepicker/popup.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/datepicker/popup.html",
+    "<ul class=\"dropdown-menu\" dropdown-nested ng-if=\"isOpen\" style=\"display: block\" ng-style=\"{top: position.top+'px', left: position.left+'px'}\" ng-keydown=\"keydown($event)\" ng-click=\"$event.stopPropagation()\">\n" +
+    "	<li ng-transclude></li>\n" +
+    "	<li ng-if=\"showButtonBar\" style=\"padding:10px 9px 2px\">\n" +
+    "		<span class=\"btn-group pull-left\">\n" +
+    "			<button type=\"button\" class=\"btn btn-sm btn-info\" ng-click=\"select('today')\" ng-disabled=\"isDisabled('today')\">{{ getText('current') }}</button>\n" +
+    "			<button type=\"button\" class=\"btn btn-sm btn-danger\" ng-click=\"select(null)\">{{ getText('clear') }}</button>\n" +
+    "		</span>\n" +
+    "		<button type=\"button\" class=\"btn btn-sm btn-success pull-right\" ng-click=\"close()\">{{ getText('close') }}</button>\n" +
+    "	</li>\n" +
+    "</ul>\n" +
+    "");
+}]);
+
+angular.module("template/datepicker/year.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/datepicker/year.html",
+    "<table role=\"grid\" aria-labelledby=\"{{::uniqueId}}-title\" aria-activedescendant=\"{{activeDateId}}\">\n" +
+    "  <thead>\n" +
+    "    <tr>\n" +
+    "      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-left\" ng-click=\"move(-1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-left\"></i></button></th>\n" +
+    "      <th colspan=\"3\"><button id=\"{{::uniqueId}}-title\" role=\"heading\" aria-live=\"assertive\" aria-atomic=\"true\" type=\"button\" class=\"btn btn-default btn-sm\" ng-click=\"toggleMode()\" ng-disabled=\"datepickerMode === maxMode\" tabindex=\"-1\" style=\"width:100%;\"><strong>{{title}}</strong></button></th>\n" +
+    "      <th><button type=\"button\" class=\"btn btn-default btn-sm pull-right\" ng-click=\"move(1)\" tabindex=\"-1\"><i class=\"glyphicon glyphicon-chevron-right\"></i></button></th>\n" +
+    "    </tr>\n" +
+    "  </thead>\n" +
+    "  <tbody>\n" +
+    "    <tr ng-repeat=\"row in rows track by $index\">\n" +
+    "      <td ng-repeat=\"dt in row track by dt.date\" class=\"text-center\" role=\"gridcell\" id=\"{{::dt.uid}}\" ng-class=\"::dt.customClass\">\n" +
+    "        <button type=\"button\" style=\"min-width:100%;\" class=\"btn btn-default\" ng-class=\"{'btn-info': dt.selected, active: isActive(dt)}\" ng-click=\"select(dt.date)\" ng-disabled=\"dt.disabled\" tabindex=\"-1\"><span ng-class=\"::{'text-info': dt.current}\">{{::dt.label}}</span></button>\n" +
+    "      </td>\n" +
+    "    </tr>\n" +
+    "  </tbody>\n" +
+    "</table>\n" +
+    "");
+}]);
+
+angular.module("template/modal/backdrop.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/modal/backdrop.html",
+    "<div uib-modal-animation-class=\"fade\"\n" +
+    "     modal-in-class=\"in\"\n" +
+    "     ng-style=\"{'z-index': 1040 + (index && 1 || 0) + index*10}\"\n" +
+    "></div>\n" +
+    "");
+}]);
+
+angular.module("template/modal/window.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/modal/window.html",
+    "<div modal-render=\"{{$isRendered}}\" tabindex=\"-1\" role=\"dialog\" class=\"modal\"\n" +
+    "    uib-modal-animation-class=\"fade\"\n" +
+    "    modal-in-class=\"in\"\n" +
+    "    ng-style=\"{'z-index': 1050 + index*10, display: 'block'}\">\n" +
+    "    <div class=\"modal-dialog\" ng-class=\"size ? 'modal-' + size : ''\"><div class=\"modal-content\" uib-modal-transclude></div></div>\n" +
+    "</div>\n" +
+    "");
+}]);
+
+angular.module("template/pagination/pager.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/pagination/pager.html",
+    "<ul class=\"pager\">\n" +
+    "  <li ng-class=\"{disabled: noPrevious()||ngDisabled, previous: align}\"><a href ng-click=\"selectPage(page - 1, $event)\">{{::getText('previous')}}</a></li>\n" +
+    "  <li ng-class=\"{disabled: noNext()||ngDisabled, next: align}\"><a href ng-click=\"selectPage(page + 1, $event)\">{{::getText('next')}}</a></li>\n" +
+    "</ul>\n" +
+    "");
+}]);
+
+angular.module("template/pagination/pagination.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/pagination/pagination.html",
+    "<ul class=\"pagination\">\n" +
+    "  <li ng-if=\"::boundaryLinks\" ng-class=\"{disabled: noPrevious()||ngDisabled}\" class=\"pagination-first\"><a href ng-click=\"selectPage(1, $event)\">{{::getText('first')}}</a></li>\n" +
+    "  <li ng-if=\"::directionLinks\" ng-class=\"{disabled: noPrevious()||ngDisabled}\" class=\"pagination-prev\"><a href ng-click=\"selectPage(page - 1, $event)\">{{::getText('previous')}}</a></li>\n" +
+    "  <li ng-repeat=\"page in pages track by $index\" ng-class=\"{active: page.active,disabled: ngDisabled&&!page.active}\" class=\"pagination-page\"><a href ng-click=\"selectPage(page.number, $event)\">{{page.text}}</a></li>\n" +
+    "  <li ng-if=\"::directionLinks\" ng-class=\"{disabled: noNext()||ngDisabled}\" class=\"pagination-next\"><a href ng-click=\"selectPage(page + 1, $event)\">{{::getText('next')}}</a></li>\n" +
+    "  <li ng-if=\"::boundaryLinks\" ng-class=\"{disabled: noNext()||ngDisabled}\" class=\"pagination-last\"><a href ng-click=\"selectPage(totalPages, $event)\">{{::getText('last')}}</a></li>\n" +
+    "</ul>\n" +
+    "");
+}]);
+
+angular.module("template/tooltip/tooltip-html-popup.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/tooltip/tooltip-html-popup.html",
+    "<div\n" +
+    "  tooltip-animation-class=\"fade\"\n" +
+    "  uib-tooltip-classes\n" +
+    "  ng-class=\"{ in: isOpen() }\">\n" +
+    "  <div class=\"tooltip-arrow\"></div>\n" +
+    "  <div class=\"tooltip-inner\" ng-bind-html=\"contentExp()\"></div>\n" +
+    "</div>\n" +
+    "");
+}]);
+
+angular.module("template/tooltip/tooltip-popup.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/tooltip/tooltip-popup.html",
+    "<div\n" +
+    "  tooltip-animation-class=\"fade\"\n" +
+    "  uib-tooltip-classes\n" +
+    "  ng-class=\"{ in: isOpen() }\">\n" +
+    "  <div class=\"tooltip-arrow\"></div>\n" +
+    "  <div class=\"tooltip-inner\" ng-bind=\"content\"></div>\n" +
+    "</div>\n" +
+    "");
+}]);
+
+angular.module("template/tooltip/tooltip-template-popup.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/tooltip/tooltip-template-popup.html",
+    "<div\n" +
+    "  tooltip-animation-class=\"fade\"\n" +
+    "  uib-tooltip-classes\n" +
+    "  ng-class=\"{ in: isOpen() }\">\n" +
+    "  <div class=\"tooltip-arrow\"></div>\n" +
+    "  <div class=\"tooltip-inner\"\n" +
+    "    uib-tooltip-template-transclude=\"contentExp()\"\n" +
+    "    tooltip-template-transclude-scope=\"originScope()\"></div>\n" +
+    "</div>\n" +
+    "");
+}]);
+
+angular.module("template/popover/popover-html.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/popover/popover-html.html",
+    "<div tooltip-animation-class=\"fade\"\n" +
+    "  uib-tooltip-classes\n" +
+    "  ng-class=\"{ in: isOpen() }\">\n" +
+    "  <div class=\"arrow\"></div>\n" +
+    "\n" +
+    "  <div class=\"popover-inner\">\n" +
+    "      <h3 class=\"popover-title\" ng-bind=\"title\" ng-if=\"title\"></h3>\n" +
+    "      <div class=\"popover-content\" ng-bind-html=\"contentExp()\"></div>\n" +
+    "  </div>\n" +
+    "</div>\n" +
+    "");
+}]);
+
+angular.module("template/popover/popover-template.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/popover/popover-template.html",
+    "<div tooltip-animation-class=\"fade\"\n" +
+    "  uib-tooltip-classes\n" +
+    "  ng-class=\"{ in: isOpen() }\">\n" +
+    "  <div class=\"arrow\"></div>\n" +
+    "\n" +
+    "  <div class=\"popover-inner\">\n" +
+    "      <h3 class=\"popover-title\" ng-bind=\"title\" ng-if=\"title\"></h3>\n" +
+    "      <div class=\"popover-content\"\n" +
+    "        uib-tooltip-template-transclude=\"contentExp()\"\n" +
+    "        tooltip-template-transclude-scope=\"originScope()\"></div>\n" +
+    "  </div>\n" +
+    "</div>\n" +
+    "");
+}]);
+
+angular.module("template/popover/popover.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/popover/popover.html",
+    "<div tooltip-animation-class=\"fade\"\n" +
+    "  uib-tooltip-classes\n" +
+    "  ng-class=\"{ in: isOpen() }\">\n" +
+    "  <div class=\"arrow\"></div>\n" +
+    "\n" +
+    "  <div class=\"popover-inner\">\n" +
+    "      <h3 class=\"popover-title\" ng-bind=\"title\" ng-if=\"title\"></h3>\n" +
+    "      <div class=\"popover-content\" ng-bind=\"content\"></div>\n" +
+    "  </div>\n" +
+    "</div>\n" +
+    "");
+}]);
+
+angular.module("template/progressbar/bar.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/progressbar/bar.html",
+    "<div class=\"progress-bar\" ng-class=\"type && 'progress-bar-' + type\" role=\"progressbar\" aria-valuenow=\"{{value}}\" aria-valuemin=\"0\" aria-valuemax=\"{{max}}\" ng-style=\"{width: (percent < 100 ? percent : 100) + '%'}\" aria-valuetext=\"{{percent | number:0}}%\" aria-labelledby=\"{{::title}}\" style=\"min-width: 0;\" ng-transclude></div>\n" +
+    "");
+}]);
+
+angular.module("template/progressbar/progress.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/progressbar/progress.html",
+    "<div class=\"progress\" ng-transclude aria-labelledby=\"{{::title}}\"></div>");
+}]);
+
+angular.module("template/progressbar/progressbar.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/progressbar/progressbar.html",
+    "<div class=\"progress\">\n" +
+    "  <div class=\"progress-bar\" ng-class=\"type && 'progress-bar-' + type\" role=\"progressbar\" aria-valuenow=\"{{value}}\" aria-valuemin=\"0\" aria-valuemax=\"{{max}}\" ng-style=\"{width: (percent < 100 ? percent : 100) + '%'}\" aria-valuetext=\"{{percent | number:0}}%\" aria-labelledby=\"{{::title}}\" style=\"min-width: 0;\" ng-transclude></div>\n" +
+    "</div>\n" +
+    "");
+}]);
+
+angular.module("template/rating/rating.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/rating/rating.html",
+    "<span ng-mouseleave=\"reset()\" ng-keydown=\"onKeydown($event)\" tabindex=\"0\" role=\"slider\" aria-valuemin=\"0\" aria-valuemax=\"{{range.length}}\" aria-valuenow=\"{{value}}\">\n" +
+    "    <span ng-repeat-start=\"r in range track by $index\" class=\"sr-only\">({{ $index < value ? '*' : ' ' }})</span>\n" +
+    "    <i ng-repeat-end ng-mouseenter=\"enter($index + 1)\" ng-click=\"rate($index + 1)\" class=\"glyphicon\" ng-class=\"$index < value && (r.stateOn || 'glyphicon-star') || (r.stateOff || 'glyphicon-star-empty')\" ng-attr-title=\"{{r.title}}\" aria-valuetext=\"{{r.title}}\"></i>\n" +
+    "</span>\n" +
+    "");
+}]);
+
+angular.module("template/tabs/tab.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/tabs/tab.html",
+    "<li ng-class=\"{active: active, disabled: disabled}\">\n" +
+    "  <a href ng-click=\"select()\" uib-tab-heading-transclude>{{heading}}</a>\n" +
+    "</li>\n" +
+    "");
+}]);
+
+angular.module("template/tabs/tabset.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/tabs/tabset.html",
+    "<div>\n" +
+    "  <ul class=\"nav nav-{{type || 'tabs'}}\" ng-class=\"{'nav-stacked': vertical, 'nav-justified': justified}\" ng-transclude></ul>\n" +
+    "  <div class=\"tab-content\">\n" +
+    "    <div class=\"tab-pane\" \n" +
+    "         ng-repeat=\"tab in tabs\" \n" +
+    "         ng-class=\"{active: tab.active}\"\n" +
+    "         uib-tab-content-transclude=\"tab\">\n" +
+    "    </div>\n" +
+    "  </div>\n" +
+    "</div>\n" +
+    "");
+}]);
+
+angular.module("template/timepicker/timepicker.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/timepicker/timepicker.html",
+    "<table>\n" +
+    "  <tbody>\n" +
+    "    <tr class=\"text-center\" ng-show=\"::showSpinners\">\n" +
+    "      <td><a ng-click=\"incrementHours()\" ng-class=\"{disabled: noIncrementHours()}\" class=\"btn btn-link\" ng-disabled=\"noIncrementHours()\" tabindex=\"{{::tabindex}}\"><span class=\"glyphicon glyphicon-chevron-up\"></span></a></td>\n" +
+    "      <td>&nbsp;</td>\n" +
+    "      <td><a ng-click=\"incrementMinutes()\" ng-class=\"{disabled: noIncrementMinutes()}\" class=\"btn btn-link\" ng-disabled=\"noIncrementMinutes()\" tabindex=\"{{::tabindex}}\"><span class=\"glyphicon glyphicon-chevron-up\"></span></a></td>\n" +
+    "      <td ng-show=\"showMeridian\"></td>\n" +
+    "    </tr>\n" +
+    "    <tr>\n" +
+    "      <td class=\"form-group\" ng-class=\"{'has-error': invalidHours}\">\n" +
+    "        <input style=\"width:50px;\" type=\"text\" ng-model=\"hours\" ng-change=\"updateHours()\" class=\"form-control text-center\" ng-readonly=\"::readonlyInput\" maxlength=\"2\" tabindex=\"{{::tabindex}}\">\n" +
+    "      </td>\n" +
+    "      <td>:</td>\n" +
+    "      <td class=\"form-group\" ng-class=\"{'has-error': invalidMinutes}\">\n" +
+    "        <input style=\"width:50px;\" type=\"text\" ng-model=\"minutes\" ng-change=\"updateMinutes()\" class=\"form-control text-center\" ng-readonly=\"::readonlyInput\" maxlength=\"2\" tabindex=\"{{::tabindex}}\">\n" +
+    "      </td>\n" +
+    "      <td ng-show=\"showMeridian\"><button type=\"button\" ng-class=\"{disabled: noToggleMeridian()}\" class=\"btn btn-default text-center\" ng-click=\"toggleMeridian()\" ng-disabled=\"noToggleMeridian()\" tabindex=\"{{::tabindex}}\">{{meridian}}</button></td>\n" +
+    "    </tr>\n" +
+    "    <tr class=\"text-center\" ng-show=\"::showSpinners\">\n" +
+    "      <td><a ng-click=\"decrementHours()\" ng-class=\"{disabled: noDecrementHours()}\" class=\"btn btn-link\" ng-disabled=\"noDecrementHours()\" tabindex=\"{{::tabindex}}\"><span class=\"glyphicon glyphicon-chevron-down\"></span></a></td>\n" +
+    "      <td>&nbsp;</td>\n" +
+    "      <td><a ng-click=\"decrementMinutes()\" ng-class=\"{disabled: noDecrementMinutes()}\" class=\"btn btn-link\" ng-disabled=\"noDecrementMinutes()\" tabindex=\"{{::tabindex}}\"><span class=\"glyphicon glyphicon-chevron-down\"></span></a></td>\n" +
+    "      <td ng-show=\"showMeridian\"></td>\n" +
+    "    </tr>\n" +
+    "  </tbody>\n" +
+    "</table>\n" +
+    "");
+}]);
+
+angular.module("template/typeahead/typeahead-match.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/typeahead/typeahead-match.html",
+    "<a href tabindex=\"-1\" ng-bind-html=\"match.label | uibTypeaheadHighlight:query\"></a>\n" +
+    "");
+}]);
+
+angular.module("template/typeahead/typeahead-popup.html", []).run(["$templateCache", function($templateCache) {
+  $templateCache.put("template/typeahead/typeahead-popup.html",
+    "<ul class=\"dropdown-menu\" ng-show=\"isOpen() && !moveInProgress\" ng-style=\"{top: position().top+'px', left: position().left+'px'}\" style=\"display: block;\" role=\"listbox\" aria-hidden=\"{{!isOpen()}}\">\n" +
+    "    <li ng-repeat=\"match in matches track by $index\" ng-class=\"{active: isActive($index) }\" ng-mouseenter=\"selectActive($index)\" ng-click=\"selectMatch($index)\" role=\"option\" id=\"{{::match.id}}\">\n" +
+    "        <div uib-typeahead-match index=\"$index\" match=\"match\" query=\"query\" template-url=\"templateUrl\"></div>\n" +
+    "    </li>\n" +
+    "</ul>\n" +
+    "");
+}]);
+!angular.$$csp() && angular.element(document).find('head').prepend('<style type="text/css">.ng-animate.item:not(.left):not(.right){-webkit-transition:0s ease-in-out left;transition:0s ease-in-out left}</style>');
\ No newline at end of file
diff --git a/public/bower_components/angular-chart.js/angular-chart.css b/public/bower_components/angular-chart.js/angular-chart.css
new file mode 100644
index 0000000..e6598ee
--- /dev/null
+++ b/public/bower_components/angular-chart.js/angular-chart.css
@@ -0,0 +1,49 @@
+.chart-legend,
+.bar-legend,
+.line-legend,
+.pie-legend,
+.radar-legend,
+.polararea-legend,
+.doughnut-legend {
+  list-style-type: none;
+  margin-top: 5px;
+  text-align: center;
+  /* NOTE: Browsers automatically add 40px of padding-left to all lists, so we should offset that, otherwise the legend is off-center */
+  -webkit-padding-start: 0;
+  /* Webkit */
+  -moz-padding-start: 0;
+  /* Mozilla */
+  padding-left: 0;
+  /* IE (handles all cases, really, but we should also include the vendor-specific properties just to be safe) */
+}
+.chart-legend li,
+.bar-legend li,
+.line-legend li,
+.pie-legend li,
+.radar-legend li,
+.polararea-legend li,
+.doughnut-legend li {
+  display: inline-block;
+  white-space: nowrap;
+  position: relative;
+  margin-bottom: 4px;
+  border-radius: 5px;
+  padding: 2px 8px 2px 28px;
+  font-size: smaller;
+  cursor: default;
+}
+.chart-legend li span,
+.bar-legend li span,
+.line-legend li span,
+.pie-legend li span,
+.radar-legend li span,
+.polararea-legend li span,
+.doughnut-legend li span {
+  display: block;
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 20px;
+  height: 20px;
+  border-radius: 5px;
+}
diff --git a/public/bower_components/angular-chart.js/angular-chart.js b/public/bower_components/angular-chart.js/angular-chart.js
new file mode 100644
index 0000000..8375081
--- /dev/null
+++ b/public/bower_components/angular-chart.js/angular-chart.js
@@ -0,0 +1,360 @@
+(function (factory) {
+  'use strict';
+  if (typeof exports === 'object') {
+    // Node/CommonJS
+    module.exports = factory(typeof angular ? angular : require('angular'), require('chart.js'));
+  }  else if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module.
+    define(['angular', 'chart'], factory);
+  } else {
+    // Browser globals
+    factory(angular, Chart);
+  }
+}(function (angular, Chart) {
+  'use strict';
+
+  Chart.defaults.global.responsive = true;
+  Chart.defaults.global.multiTooltipTemplate = '<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>';
+
+  Chart.defaults.global.colours = [
+    '#97BBCD', // blue
+    '#DCDCDC', // light grey
+    '#F7464A', // red
+    '#46BFBD', // green
+    '#FDB45C', // yellow
+    '#949FB1', // grey
+    '#4D5360'  // dark grey
+  ];
+
+  var usingExcanvas = typeof window.G_vmlCanvasManager === 'object' &&
+    window.G_vmlCanvasManager !== null &&
+    typeof window.G_vmlCanvasManager.initElement === 'function';
+
+  if (usingExcanvas) Chart.defaults.global.animation = false;
+
+  return angular.module('chart.js', [])
+    .provider('ChartJs', ChartJsProvider)
+    .factory('ChartJsFactory', ['ChartJs', '$timeout', ChartJsFactory])
+    .directive('chartBase', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory(); }])
+    .directive('chartLine', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('Line'); }])
+    .directive('chartBar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('Bar'); }])
+    .directive('chartRadar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('Radar'); }])
+    .directive('chartDoughnut', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('Doughnut'); }])
+    .directive('chartPie', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('Pie'); }])
+    .directive('chartPolarArea', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('PolarArea'); }]);
+
+  /**
+   * Wrapper for chart.js
+   * Allows configuring chart js using the provider
+   *
+   * angular.module('myModule', ['chart.js']).config(function(ChartJsProvider) {
+   *   ChartJsProvider.setOptions({ responsive: true });
+   *   ChartJsProvider.setOptions('Line', { responsive: false });
+   * })))
+   */
+  function ChartJsProvider () {
+    var options = {};
+    var ChartJs = {
+      Chart: Chart,
+      getOptions: function (type) {
+        var typeOptions = type && options[type] || {};
+        return angular.extend({}, options, typeOptions);
+      }
+    };
+
+    /**
+     * Allow to set global options during configuration
+     */
+    this.setOptions = function (type, customOptions) {
+      // If no type was specified set option for the global object
+      if (! customOptions) {
+        customOptions = type;
+        options = angular.extend(options, customOptions);
+        return;
+      }
+      // Set options for the specific chart
+      options[type] = angular.extend(options[type] || {}, customOptions);
+    };
+
+    this.$get = function () {
+      return ChartJs;
+    };
+  }
+
+  function ChartJsFactory (ChartJs, $timeout) {
+    return function chart (type) {
+      return {
+        restrict: 'CA',
+        scope: {
+          data: '=?',
+          labels: '=?',
+          options: '=?',
+          series: '=?',
+          colours: '=?',
+          getColour: '=?',
+          chartType: '=',
+          legend: '@',
+          click: '=?',
+          hover: '=?',
+
+          chartData: '=?',
+          chartLabels: '=?',
+          chartOptions: '=?',
+          chartSeries: '=?',
+          chartColours: '=?',
+          chartLegend: '@',
+          chartClick: '=?',
+          chartHover: '=?'
+        },
+        link: function (scope, elem/*, attrs */) {
+          var chart, container = document.createElement('div');
+          container.className = 'chart-container';
+          elem.replaceWith(container);
+          container.appendChild(elem[0]);
+
+          if (usingExcanvas) window.G_vmlCanvasManager.initElement(elem[0]);
+
+          ['data', 'labels', 'options', 'series', 'colours', 'legend', 'click', 'hover'].forEach(deprecated);
+          function aliasVar (fromName, toName) {
+            scope.$watch(fromName, function (newVal) {
+              if (typeof newVal === 'undefined') return;
+              scope[toName] = newVal;
+            });
+          }
+          /* provide backward compatibility to "old" directive names, by
+           * having an alias point from the new names to the old names. */
+          aliasVar('chartData', 'data');
+          aliasVar('chartLabels', 'labels');
+          aliasVar('chartOptions', 'options');
+          aliasVar('chartSeries', 'series');
+          aliasVar('chartColours', 'colours');
+          aliasVar('chartLegend', 'legend');
+          aliasVar('chartClick', 'click');
+          aliasVar('chartHover', 'hover');
+
+          // Order of setting "watch" matter
+
+          scope.$watch('data', function (newVal, oldVal) {
+            if (! newVal || ! newVal.length || (Array.isArray(newVal[0]) && ! newVal[0].length)) return;
+            var chartType = type || scope.chartType;
+            if (! chartType) return;
+
+            if (chart) {
+              if (canUpdateChart(newVal, oldVal)) return updateChart(chart, newVal, scope, elem);
+              chart.destroy();
+            }
+
+            createChart(chartType);
+          }, true);
+
+          scope.$watch('series', resetChart, true);
+          scope.$watch('labels', resetChart, true);
+          scope.$watch('options', resetChart, true);
+          scope.$watch('colours', resetChart, true);
+
+          scope.$watch('chartType', function (newVal, oldVal) {
+            if (isEmpty(newVal)) return;
+            if (angular.equals(newVal, oldVal)) return;
+            if (chart) chart.destroy();
+            createChart(newVal);
+          });
+
+          scope.$on('$destroy', function () {
+            if (chart) chart.destroy();
+          });
+
+          function resetChart (newVal, oldVal) {
+            if (isEmpty(newVal)) return;
+            if (angular.equals(newVal, oldVal)) return;
+            var chartType = type || scope.chartType;
+            if (! chartType) return;
+
+            // chart.update() doesn't work for series and labels
+            // so we have to re-create the chart entirely
+            if (chart) chart.destroy();
+
+            createChart(chartType);
+          }
+
+          function createChart (type) {
+            if (isResponsive(type, scope) && elem[0].clientHeight === 0 && container.clientHeight === 0) {
+              return $timeout(function () {
+                createChart(type);
+              }, 50, false);
+            }
+            if (! scope.data || ! scope.data.length) return;
+            scope.getColour = typeof scope.getColour === 'function' ? scope.getColour : getRandomColour;
+            scope.colours = getColours(type, scope);
+            var cvs = elem[0], ctx = cvs.getContext('2d');
+            var data = Array.isArray(scope.data[0]) ?
+              getDataSets(scope.labels, scope.data, scope.series || [], scope.colours) :
+              getData(scope.labels, scope.data, scope.colours);
+            var options = angular.extend({}, ChartJs.getOptions(type), scope.options);
+            chart = new ChartJs.Chart(ctx)[type](data, options);
+            scope.$emit('create', chart);
+
+            // Bind events
+            cvs.onclick = scope.click ? getEventHandler(scope, chart, 'click', false) : angular.noop;
+            cvs.onmousemove = scope.hover ? getEventHandler(scope, chart, 'hover', true) : angular.noop;
+
+            if (scope.legend && scope.legend !== 'false') setLegend(elem, chart);
+          }
+
+          function deprecated (attr) {
+            if (typeof console !== 'undefined' && ChartJs.getOptions().env !== 'test') {
+              var warn = typeof console.warn === 'function' ? console.warn : console.log;
+              if (!! scope[attr]) {
+                warn.call(console, '"%s" is deprecated and will be removed in a future version. ' +
+                  'Please use "chart-%s" instead.', attr, attr);
+              }
+            }
+          }
+        }
+      };
+    };
+
+    function canUpdateChart (newVal, oldVal) {
+      if (newVal && oldVal && newVal.length && oldVal.length) {
+        return Array.isArray(newVal[0]) ?
+        newVal.length === oldVal.length && newVal.every(function (element, index) {
+          return element.length === oldVal[index].length; }) :
+          oldVal.reduce(sum, 0) > 0 ? newVal.length === oldVal.length : false;
+      }
+      return false;
+    }
+
+    function sum (carry, val) {
+      return carry + val;
+    }
+
+    function getEventHandler (scope, chart, action, triggerOnlyOnChange) {
+      var lastState = null;
+      return function (evt) {
+        var atEvent = chart.getPointsAtEvent || chart.getBarsAtEvent || chart.getSegmentsAtEvent;
+        if (atEvent) {
+          var activePoints = atEvent.call(chart, evt);
+          if (triggerOnlyOnChange === false || angular.equals(lastState, activePoints) === false) {
+            lastState = activePoints;
+            scope[action](activePoints, evt);
+            scope.$apply();
+          }
+        }
+      };
+    }
+
+    function getColours (type, scope) {
+      var colours = angular.copy(scope.colours ||
+        ChartJs.getOptions(type).colours ||
+        Chart.defaults.global.colours
+      );
+      while (colours.length < scope.data.length) {
+        colours.push(scope.getColour());
+      }
+      return colours.map(convertColour);
+    }
+
+    function convertColour (colour) {
+      if (typeof colour === 'object' && colour !== null) return colour;
+      if (typeof colour === 'string' && colour[0] === '#') return getColour(hexToRgb(colour.substr(1)));
+      return getRandomColour();
+    }
+
+    function getRandomColour () {
+      var colour = [getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255)];
+      return getColour(colour);
+    }
+
+    function getColour (colour) {
+      return {
+        fillColor: rgba(colour, 0.2),
+        strokeColor: rgba(colour, 1),
+        pointColor: rgba(colour, 1),
+        pointStrokeColor: '#fff',
+        pointHighlightFill: '#fff',
+        pointHighlightStroke: rgba(colour, 0.8)
+      };
+    }
+
+    function getRandomInt (min, max) {
+      return Math.floor(Math.random() * (max - min + 1)) + min;
+    }
+
+    function rgba (colour, alpha) {
+      if (usingExcanvas) {
+        // rgba not supported by IE8
+        return 'rgb(' + colour.join(',') + ')';
+      } else {
+        return 'rgba(' + colour.concat(alpha).join(',') + ')';
+      }
+    }
+
+    // Credit: http://stackoverflow.com/a/11508164/1190235
+    function hexToRgb (hex) {
+      var bigint = parseInt(hex, 16),
+        r = (bigint >> 16) & 255,
+        g = (bigint >> 8) & 255,
+        b = bigint & 255;
+
+      return [r, g, b];
+    }
+
+    function getDataSets (labels, data, series, colours) {
+      return {
+        labels: labels,
+        datasets: data.map(function (item, i) {
+          return angular.extend({}, colours[i], {
+            label: series[i],
+            data: item
+          });
+        })
+      };
+    }
+
+    function getData (labels, data, colours) {
+      return labels.map(function (label, i) {
+        return angular.extend({}, colours[i], {
+          label: label,
+          value: data[i],
+          color: colours[i].strokeColor,
+          highlight: colours[i].pointHighlightStroke
+        });
+      });
+    }
+
+    function setLegend (elem, chart) {
+      var $parent = elem.parent(),
+          $oldLegend = $parent.find('chart-legend'),
+          legend = '<chart-legend>' + chart.generateLegend() + '</chart-legend>';
+      if ($oldLegend.length) $oldLegend.replaceWith(legend);
+      else $parent.append(legend);
+    }
+
+    function updateChart (chart, values, scope, elem) {
+      if (Array.isArray(scope.data[0])) {
+        chart.datasets.forEach(function (dataset, i) {
+          (dataset.points || dataset.bars).forEach(function (dataItem, j) {
+            dataItem.value = values[i][j];
+          });
+        });
+      } else {
+        chart.segments.forEach(function (segment, i) {
+          segment.value = values[i];
+        });
+      }
+      chart.update();
+      scope.$emit('update', chart);
+      if (scope.legend && scope.legend !== 'false') setLegend(elem, chart);
+    }
+
+    function isEmpty (value) {
+      return ! value ||
+        (Array.isArray(value) && ! value.length) ||
+        (typeof value === 'object' && ! Object.keys(value).length);
+    }
+
+    function isResponsive (type, scope) {
+      var options = angular.extend({}, Chart.defaults.global, ChartJs.getOptions(type), scope.options);
+      return options.responsive;
+    }
+  }
+}));
diff --git a/public/bower_components/angular-cookies/angular-cookies.js b/public/bower_components/angular-cookies/angular-cookies.js
new file mode 100644
index 0000000..8a04e12
--- /dev/null
+++ b/public/bower_components/angular-cookies/angular-cookies.js
@@ -0,0 +1,321 @@
+/**
+ * @license AngularJS v1.4.8
+ * (c) 2010-2015 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/**
+ * @ngdoc module
+ * @name ngCookies
+ * @description
+ *
+ * # ngCookies
+ *
+ * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies.
+ *
+ *
+ * <div doc-module-components="ngCookies"></div>
+ *
+ * See {@link ngCookies.$cookies `$cookies`} for usage.
+ */
+
+
+angular.module('ngCookies', ['ng']).
+  /**
+   * @ngdoc provider
+   * @name $cookiesProvider
+   * @description
+   * Use `$cookiesProvider` to change the default behavior of the {@link ngCookies.$cookies $cookies} service.
+   * */
+   provider('$cookies', [function $CookiesProvider() {
+    /**
+     * @ngdoc property
+     * @name $cookiesProvider#defaults
+     * @description
+     *
+     * Object containing default options to pass when setting cookies.
+     *
+     * The object may have following properties:
+     *
+     * - **path** - `{string}` - The cookie will be available only for this path and its
+     *   sub-paths. By default, this would be the URL that appears in your base tag.
+     * - **domain** - `{string}` - The cookie will be available only for this domain and
+     *   its sub-domains. For obvious security reasons the user agent will not accept the
+     *   cookie if the current domain is not a sub domain or equals to the requested domain.
+     * - **expires** - `{string|Date}` - String of the form "Wdy, DD Mon YYYY HH:MM:SS GMT"
+     *   or a Date object indicating the exact date/time this cookie will expire.
+     * - **secure** - `{boolean}` - The cookie will be available only in secured connection.
+     *
+     * Note: by default the address that appears in your `<base>` tag will be used as path.
+     * This is important so that cookies will be visible for all routes in case html5mode is enabled
+     *
+     **/
+    var defaults = this.defaults = {};
+
+    function calcOptions(options) {
+      return options ? angular.extend({}, defaults, options) : defaults;
+    }
+
+    /**
+     * @ngdoc service
+     * @name $cookies
+     *
+     * @description
+     * Provides read/write access to browser's cookies.
+     *
+     * <div class="alert alert-info">
+     * Up until Angular 1.3, `$cookies` exposed properties that represented the
+     * current browser cookie values. In version 1.4, this behavior has changed, and
+     * `$cookies` now provides a standard api of getters, setters etc.
+     * </div>
+     *
+     * Requires the {@link ngCookies `ngCookies`} module to be installed.
+     *
+     * @example
+     *
+     * ```js
+     * angular.module('cookiesExample', ['ngCookies'])
+     *   .controller('ExampleController', ['$cookies', function($cookies) {
+     *     // Retrieving a cookie
+     *     var favoriteCookie = $cookies.get('myFavorite');
+     *     // Setting a cookie
+     *     $cookies.put('myFavorite', 'oatmeal');
+     *   }]);
+     * ```
+     */
+    this.$get = ['$$cookieReader', '$$cookieWriter', function($$cookieReader, $$cookieWriter) {
+      return {
+        /**
+         * @ngdoc method
+         * @name $cookies#get
+         *
+         * @description
+         * Returns the value of given cookie key
+         *
+         * @param {string} key Id to use for lookup.
+         * @returns {string} Raw cookie value.
+         */
+        get: function(key) {
+          return $$cookieReader()[key];
+        },
+
+        /**
+         * @ngdoc method
+         * @name $cookies#getObject
+         *
+         * @description
+         * Returns the deserialized value of given cookie key
+         *
+         * @param {string} key Id to use for lookup.
+         * @returns {Object} Deserialized cookie value.
+         */
+        getObject: function(key) {
+          var value = this.get(key);
+          return value ? angular.fromJson(value) : value;
+        },
+
+        /**
+         * @ngdoc method
+         * @name $cookies#getAll
+         *
+         * @description
+         * Returns a key value object with all the cookies
+         *
+         * @returns {Object} All cookies
+         */
+        getAll: function() {
+          return $$cookieReader();
+        },
+
+        /**
+         * @ngdoc method
+         * @name $cookies#put
+         *
+         * @description
+         * Sets a value for given cookie key
+         *
+         * @param {string} key Id for the `value`.
+         * @param {string} value Raw value to be stored.
+         * @param {Object=} options Options object.
+         *    See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}
+         */
+        put: function(key, value, options) {
+          $$cookieWriter(key, value, calcOptions(options));
+        },
+
+        /**
+         * @ngdoc method
+         * @name $cookies#putObject
+         *
+         * @description
+         * Serializes and sets a value for given cookie key
+         *
+         * @param {string} key Id for the `value`.
+         * @param {Object} value Value to be stored.
+         * @param {Object=} options Options object.
+         *    See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}
+         */
+        putObject: function(key, value, options) {
+          this.put(key, angular.toJson(value), options);
+        },
+
+        /**
+         * @ngdoc method
+         * @name $cookies#remove
+         *
+         * @description
+         * Remove given cookie
+         *
+         * @param {string} key Id of the key-value pair to delete.
+         * @param {Object=} options Options object.
+         *    See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}
+         */
+        remove: function(key, options) {
+          $$cookieWriter(key, undefined, calcOptions(options));
+        }
+      };
+    }];
+  }]);
+
+angular.module('ngCookies').
+/**
+ * @ngdoc service
+ * @name $cookieStore
+ * @deprecated
+ * @requires $cookies
+ *
+ * @description
+ * Provides a key-value (string-object) storage, that is backed by session cookies.
+ * Objects put or retrieved from this storage are automatically serialized or
+ * deserialized by angular's toJson/fromJson.
+ *
+ * Requires the {@link ngCookies `ngCookies`} module to be installed.
+ *
+ * <div class="alert alert-danger">
+ * **Note:** The $cookieStore service is **deprecated**.
+ * Please use the {@link ngCookies.$cookies `$cookies`} service instead.
+ * </div>
+ *
+ * @example
+ *
+ * ```js
+ * angular.module('cookieStoreExample', ['ngCookies'])
+ *   .controller('ExampleController', ['$cookieStore', function($cookieStore) {
+ *     // Put cookie
+ *     $cookieStore.put('myFavorite','oatmeal');
+ *     // Get cookie
+ *     var favoriteCookie = $cookieStore.get('myFavorite');
+ *     // Removing a cookie
+ *     $cookieStore.remove('myFavorite');
+ *   }]);
+ * ```
+ */
+ factory('$cookieStore', ['$cookies', function($cookies) {
+
+    return {
+      /**
+       * @ngdoc method
+       * @name $cookieStore#get
+       *
+       * @description
+       * Returns the value of given cookie key
+       *
+       * @param {string} key Id to use for lookup.
+       * @returns {Object} Deserialized cookie value, undefined if the cookie does not exist.
+       */
+      get: function(key) {
+        return $cookies.getObject(key);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $cookieStore#put
+       *
+       * @description
+       * Sets a value for given cookie key
+       *
+       * @param {string} key Id for the `value`.
+       * @param {Object} value Value to be stored.
+       */
+      put: function(key, value) {
+        $cookies.putObject(key, value);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $cookieStore#remove
+       *
+       * @description
+       * Remove given cookie
+       *
+       * @param {string} key Id of the key-value pair to delete.
+       */
+      remove: function(key) {
+        $cookies.remove(key);
+      }
+    };
+
+  }]);
+
+/**
+ * @name $$cookieWriter
+ * @requires $document
+ *
+ * @description
+ * This is a private service for writing cookies
+ *
+ * @param {string} name Cookie name
+ * @param {string=} value Cookie value (if undefined, cookie will be deleted)
+ * @param {Object=} options Object with options that need to be stored for the cookie.
+ */
+function $$CookieWriter($document, $log, $browser) {
+  var cookiePath = $browser.baseHref();
+  var rawDocument = $document[0];
+
+  function buildCookieString(name, value, options) {
+    var path, expires;
+    options = options || {};
+    expires = options.expires;
+    path = angular.isDefined(options.path) ? options.path : cookiePath;
+    if (angular.isUndefined(value)) {
+      expires = 'Thu, 01 Jan 1970 00:00:00 GMT';
+      value = '';
+    }
+    if (angular.isString(expires)) {
+      expires = new Date(expires);
+    }
+
+    var str = encodeURIComponent(name) + '=' + encodeURIComponent(value);
+    str += path ? ';path=' + path : '';
+    str += options.domain ? ';domain=' + options.domain : '';
+    str += expires ? ';expires=' + expires.toUTCString() : '';
+    str += options.secure ? ';secure' : '';
+
+    // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:
+    // - 300 cookies
+    // - 20 cookies per unique domain
+    // - 4096 bytes per cookie
+    var cookieLength = str.length + 1;
+    if (cookieLength > 4096) {
+      $log.warn("Cookie '" + name +
+        "' possibly not set or overflowed because it was too large (" +
+        cookieLength + " > 4096 bytes)!");
+    }
+
+    return str;
+  }
+
+  return function(name, value, options) {
+    rawDocument.cookie = buildCookieString(name, value, options);
+  };
+}
+
+$$CookieWriter.$inject = ['$document', '$log', '$browser'];
+
+angular.module('ngCookies').provider('$$cookieWriter', function $$CookieWriterProvider() {
+  this.$get = $$CookieWriter;
+});
+
+
+})(window, window.angular);
diff --git a/public/bower_components/angular-dashboard-framework/angular-dashboard-framework.css b/public/bower_components/angular-dashboard-framework/angular-dashboard-framework.css
new file mode 100644
index 0000000..601bdf0
--- /dev/null
+++ b/public/bower_components/angular-dashboard-framework/angular-dashboard-framework.css
@@ -0,0 +1,83 @@
+/**
+ The MIT License
+
+ Copyright (c) 2015, Sebastian Sdorra
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+*/
+
+
+[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
+  display: none !important;
+}
+
+.adf-move {
+  cursor: move;
+  cursor: -webkit-grabbing;
+}
+
+.edit .column {
+  min-height: 120px;
+  border: 1px #ccc dashed;
+  padding-top: 15px;
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+}
+
+pre.edit {
+  margin-top: 15px;
+}
+
+.column .placeholder {
+  opacity: 0.4;
+  background: #E8E8E8;
+  border: 1px dashed #505050;
+  margin-bottom: 15px;
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+}
+
+.widget h3 a {
+  text-decoration: none;
+}
+
+.dashboard-container h1 a {
+  text-decoration: none;
+}
+
+.padding-bottom {
+  padding-bottom: 5px;
+}
+
+.adf-flip {
+  -moz-transform: scaleX(-1);
+  -o-transform: scaleX(-1);
+  -webkit-transform: scaleX(-1);
+  transform: scaleX(-1);
+  filter: FlipH;
+  -ms-filter: "FlipH";
+}
+/*
+ modal dialog in fullscreen
+*/
+.dashboard-modal.widget-fullscreen .modal-dialog {
+ width: 98%;
+}
diff --git a/public/bower_components/angular-dashboard-framework/angular-dashboard-framework.js b/public/bower_components/angular-dashboard-framework/angular-dashboard-framework.js
new file mode 100644
index 0000000..334f3cc
--- /dev/null
+++ b/public/bower_components/angular-dashboard-framework/angular-dashboard-framework.js
@@ -0,0 +1,1241 @@
+(function(window, undefined) {'use strict';
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015, Sebastian Sdorra
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+
+
+angular.module('adf', ['adf.provider', 'ui.bootstrap'])
+  .value('adfTemplatePath', '../src/templates/')
+  .value('rowTemplate', '<adf-dashboard-row row="row" adf-model="adfModel" options="options" edit-mode="editMode" ng-repeat="row in column.rows" />')
+  .value('columnTemplate', '<adf-dashboard-column column="column" adf-model="adfModel" options="options" edit-mode="editMode" ng-repeat="column in row.columns" />')
+  .value('adfVersion', '0.10.0');
+
+/*
+* The MIT License
+*
+* Copyright (c) 2015, Sebastian Sdorra
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy
+* of this software and associated documentation files (the "Software"), to deal
+* in the Software without restriction, including without limitation the rights
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+* copies of the Software, and to permit persons to whom the Software is
+* furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in
+* all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+* SOFTWARE.
+*/
+
+
+/* global angular */
+angular.module('adf')
+  .directive('adfDashboardColumn', ["$log", "$compile", "adfTemplatePath", "rowTemplate", "dashboard", function ($log, $compile, adfTemplatePath, rowTemplate, dashboard) {
+    
+
+    /**
+     * moves a widget in between a column
+     */
+    function moveWidgetInColumn($scope, column, evt){
+      var widgets = column.widgets;
+      // move widget and apply to scope
+      $scope.$apply(function(){
+        widgets.splice(evt.newIndex, 0, widgets.splice(evt.oldIndex, 1)[0]);
+      });
+    }
+
+    /**
+     * finds a widget by its id in the column
+     */
+    function findWidget(column, index){
+      var widget = null;
+      for (var i=0; i<column.widgets.length; i++){
+        var w = column.widgets[i];
+        if (w.wid === index){
+          widget = w;
+          break;
+        }
+      }
+      return widget;
+    }
+
+    /**
+     * finds a column by its id in the model
+     */
+    function findColumn(model, index){
+      var column = null;
+      for (var i=0; i<model.rows.length; i++){
+        var r = model.rows[i];
+        for (var j=0; j<r.columns.length; j++){
+          var c = r.columns[j];
+          if ( c.cid === index ){
+            column = c;
+            break;
+          } else if (c.rows){
+            column = findColumn(c, index);
+          }
+        }
+        if (column){
+          break;
+        }
+      }
+      return column;
+    }
+
+    /**
+     * get the adf id from an html element
+     */
+    function getId(el){
+      var id = el.getAttribute('adf-id');
+      return id ? parseInt(id) : -1;
+    }
+
+    /**
+     * adds a widget to a column
+     */
+    function addWidgetToColumn($scope, model, targetColumn, evt){
+      // find source column
+      var cid = getId(evt.from);
+      var sourceColumn = findColumn(model, cid);
+
+      if (sourceColumn){
+        // find moved widget
+        var wid = getId(evt.item);
+        var widget = findWidget(sourceColumn, wid);
+
+        if (widget){
+          // add new item and apply to scope
+          $scope.$apply(function(){
+			if (!targetColumn.widgets) {
+				targetColumn.widgets = [];
+			}
+			
+            targetColumn.widgets.splice(evt.newIndex, 0, widget);
+          });
+        } else {
+          $log.warn('could not find widget with id ' + wid);
+        }
+      } else {
+        $log.warn('could not find column with id ' + cid);
+      }
+    }
+
+    /**
+     * removes a widget from a column
+     */
+    function removeWidgetFromColumn($scope, column, evt){
+      // remove old item and apply to scope
+      $scope.$apply(function(){
+        column.widgets.splice(evt.oldIndex, 1);
+      });
+    }
+
+    /**
+     * enable sortable
+     */
+    function applySortable($scope, $element, model, column){
+      // enable drag and drop
+      var el = $element[0];
+      var sortable = Sortable.create(el, {
+        group: 'widgets',
+        handle: '.adf-move',
+        ghostClass: 'placeholder',
+        animation: 150,
+        onAdd: function(evt){
+          addWidgetToColumn($scope, model, column, evt);
+        },
+        onRemove: function(evt){
+          removeWidgetFromColumn($scope, column, evt);
+        },
+        onUpdate: function(evt){
+          moveWidgetInColumn($scope, column, evt);
+        }
+      });
+
+      // destroy sortable on column destroy event
+      $element.on('$destroy', function () {
+        sortable.destroy();
+      });
+    }
+
+    return {
+      restrict: 'E',
+      replace: true,
+      scope: {
+        column: '=',
+        editMode: '=',
+        adfModel: '=',
+        options: '='
+      },
+      templateUrl: adfTemplatePath + 'dashboard-column.html',
+      link: function ($scope, $element) {
+        // set id
+        var col = $scope.column;
+        if (!col.cid){
+          col.cid = dashboard.id();
+        }
+
+        if (angular.isDefined(col.rows) && angular.isArray(col.rows)) {
+          // be sure to tell Angular about the injected directive and push the new row directive to the column
+          $compile(rowTemplate)($scope, function(cloned) {
+            $element.append(cloned);
+          });
+        } else {
+          // enable drag and drop for widget only columns
+          applySortable($scope, $element, $scope.adfModel, col);
+        }
+      }
+    };
+  }]);
+
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015, Sebastian Sdorra
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/**
+ * @ngdoc directive
+ * @name adf.directive:adfDashboard
+ * @element div
+ * @restrict EA
+ * @scope
+ * @description
+ *
+ * `adfDashboard` is a directive which renders the dashboard with all its
+ * components. The directive requires a name attribute. The name of the
+ * dashboard can be used to store the model.
+ *
+ * @param {string} name name of the dashboard. This attribute is required.
+ * @param {boolean=} editable false to disable the editmode of the dashboard.
+ * @param {boolean=} collapsible true to make widgets collapsible on the dashboard.
+ * @param {boolean=} maximizable true to add a button for open widgets in a large modal panel.
+ * @param {boolean=} enableConfirmDelete true to ask before remove an widget from the dashboard.
+ * @param {string=} structure the default structure of the dashboard.
+ * @param {object=} adfModel model object of the dashboard.
+ * @param {function=} adfWidgetFilter function to filter widgets on the add dialog.
+ */
+
+angular.module('adf')
+  .directive('adfDashboard', ["$rootScope", "$log", "$modal", "dashboard", "adfTemplatePath", function ($rootScope, $log, $modal, dashboard, adfTemplatePath) {
+    
+
+    function stringToBoolean(string){
+      switch(angular.isDefined(string) ? string.toLowerCase() : null){
+        case 'true': case 'yes': case '1': return true;
+        case 'false': case 'no': case '0': case null: return false;
+        default: return Boolean(string);
+      }
+    }
+
+    function copyWidgets(source, target) {
+      if ( source.widgets && source.widgets.length > 0 ){
+        var w = source.widgets.shift();
+        while (w){
+          target.widgets.push(w);
+          w = source.widgets.shift();
+        }
+      }
+    }
+
+    /**
+    * Copy widget from old columns to the new model
+    * @param object root the model
+    * @param array of columns
+    * @param counter
+    */
+    function fillStructure(root, columns, counter) {
+      counter = counter || 0;
+
+      if (angular.isDefined(root.rows)) {
+        angular.forEach(root.rows, function (row) {
+          angular.forEach(row.columns, function (column) {
+            // if the widgets prop doesn't exist, create a new array for it.
+            // this allows ui.sortable to do it's thing without error
+            if (!column.widgets) {
+              column.widgets = [];
+            }
+
+            // if a column exist at the counter index, copy over the column
+            if (angular.isDefined(columns[counter])) {
+              // do not add widgets to a column, which uses nested rows
+              if (!angular.isDefined(column.rows)){
+                copyWidgets(columns[counter], column);
+                counter++;
+              }
+            }
+
+            // run fillStructure again for any sub rows/columns
+            counter = fillStructure(column, columns, counter);
+          });
+        });
+      }
+      return counter;
+    }
+
+    /**
+    * Read Columns: recursively searches an object for the 'columns' property
+    * @param object model
+    * @param array  an array of existing columns; used when recursion happens
+    */
+    function readColumns(root, columns) {
+      columns = columns || [];
+
+      if (angular.isDefined(root.rows)) {
+        angular.forEach(root.rows, function (row) {
+          angular.forEach(row.columns, function (col) {
+            columns.push(col);
+            // keep reading columns until we can't any more
+            readColumns(col, columns);
+          });
+        });
+      }
+
+      return columns;
+    }
+
+    function changeStructure(model, structure){
+      var columns = readColumns(model);
+      var counter = 0;
+
+      model.rows = angular.copy(structure.rows);
+
+      while ( counter < columns.length ){
+        counter = fillStructure(model, columns, counter);
+      }
+    }
+
+    function createConfiguration(type){
+      var cfg = {};
+      var config = dashboard.widgets[type].config;
+      if (config){
+        cfg = angular.copy(config);
+      }
+      return cfg;
+    }
+
+    /**
+     * Find first widget column in model.
+     *
+     * @param dashboard model
+     */
+    function findFirstWidgetColumn(model){
+      var column = null;
+      if (!angular.isArray(model.rows)){
+        $log.error('model does not have any rows');
+        return null;
+      }
+      for (var i=0; i<model.rows.length; i++){
+        var row = model.rows[i];
+        if (angular.isArray(row.columns)){
+          for (var j=0; j<row.columns.length; j++){
+            var col = row.columns[j];
+            if (!col.rows){
+              column = col;
+              break;
+            }
+          }
+        }
+        if (column){
+          break;
+        }
+      }
+      return column;
+    }
+
+    /**
+     * Adds the widget to first column of the model.
+     *
+     * @param dashboard model
+     * @param widget to add to model
+     */
+    function addNewWidgetToModel(model, widget){
+      if (model){
+        var column = findFirstWidgetColumn(model);
+        if (column){
+          if (!column.widgets){
+            column.widgets = [];
+          }
+          column.widgets.unshift(widget);
+        } else {
+          $log.error('could not find first widget column');
+        }
+      } else {
+        $log.error('model is undefined');
+      }
+    }
+
+    return {
+      replace: true,
+      restrict: 'EA',
+      transclude : false,
+      scope: {
+        structure: '@',
+        name: '@',
+        collapsible: '@',
+        editable: '@',
+        maximizable: '@',
+        adfModel: '=',
+        adfWidgetFilter: '='
+      },
+      controller: ["$scope", function($scope){
+        var model = {};
+        var structure = {};
+        var widgetFilter = null;
+        var structureName = {};
+        var name = $scope.name;
+
+        // Watching for changes on adfModel
+        $scope.$watch('adfModel', function(oldVal, newVal) {
+          // has model changed or is the model attribute not set
+          if (newVal !== null || (oldVal === null && newVal === null)) {
+            model = $scope.adfModel;
+            widgetFilter = $scope.adfWidgetFilter;
+            if ( ! model || ! model.rows ){
+              structureName = $scope.structure;
+              structure = dashboard.structures[structureName];
+              if (structure){
+                if (model){
+                  model.rows = angular.copy(structure).rows;
+                } else {
+                  model = angular.copy(structure);
+                }
+                model.structure = structureName;
+              } else {
+                $log.error( 'could not find structure ' + structureName);
+              }
+            }
+
+            if (model) {
+              if (!model.title){
+                model.title = 'Dashboard';
+              }
+              if (!model.titleTemplateUrl) {
+                model.titleTemplateUrl = adfTemplatePath + 'dashboard-title.html';
+              }
+              $scope.model = model;
+            } else {
+              $log.error('could not find or create model');
+            }
+          }
+        }, true);
+
+        // edit mode
+        $scope.editMode = false;
+        $scope.editClass = '';
+
+        $scope.toggleEditMode = function(){
+          $scope.editMode = ! $scope.editMode;
+          if ($scope.editMode){
+            $scope.modelCopy = angular.copy($scope.adfModel, {});
+          }
+
+          if (!$scope.editMode){
+            $rootScope.$broadcast('adfDashboardChanged', name, model);
+          }
+        };
+
+        $scope.collapseAll = function(collapseExpandStatus){
+            $rootScope.$broadcast('adfDashboardCollapseExapand',{collapseExpandStatus : collapseExpandStatus});
+        };
+
+        $scope.cancelEditMode = function(){
+          $scope.editMode = false;
+          $scope.modelCopy = angular.copy($scope.modelCopy, $scope.adfModel);
+          $rootScope.$broadcast('adfDashboardEditsCancelled');
+        };
+
+        // edit dashboard settings
+        $scope.editDashboardDialog = function(){
+          var editDashboardScope = $scope.$new();
+          // create a copy of the title, to avoid changing the title to
+          // "dashboard" if the field is empty
+          editDashboardScope.copy = {
+            title: model.title
+          };
+          editDashboardScope.structures = dashboard.structures;
+          var instance = $modal.open({
+            scope: editDashboardScope,
+            templateUrl: adfTemplatePath + 'dashboard-edit.html',
+            backdrop: 'static'
+          });
+          $scope.changeStructure = function(name, structure){
+            $log.info('change structure to ' + name);
+            changeStructure(model, structure);
+          };
+          editDashboardScope.closeDialog = function(){
+            // copy the new title back to the model
+            model.title = editDashboardScope.copy.title;
+            // close modal and destroy the scope
+            instance.close();
+            editDashboardScope.$destroy();
+          };
+        };
+
+        // add widget dialog
+        $scope.addWidgetDialog = function(){
+          var addScope = $scope.$new();
+          var model = $scope.model;
+          var widgets;
+          if (angular.isFunction(widgetFilter)){
+            widgets = {};
+            angular.forEach(dashboard.widgets, function(widget, type){
+              if (widgetFilter(widget, type, model)){
+                widgets[type] = widget;
+              }
+            });
+          } else {
+            widgets = dashboard.widgets;
+          }
+          addScope.widgets = widgets;
+          var opts = {
+            scope: addScope,
+            templateUrl: adfTemplatePath + 'widget-add.html',
+            backdrop: 'static'
+          };
+          var instance = $modal.open(opts);
+          addScope.addWidget = function(widget){
+            var w = {
+              type: widget,
+              config: createConfiguration(widget)
+            };
+            addNewWidgetToModel(model, w);
+            $rootScope.$broadcast('adfWidgetAdded', name, model, w);
+            // close and destroy
+            instance.close();
+            addScope.$destroy();
+          };
+          addScope.closeDialog = function(){
+            // close and destroy
+            instance.close();
+            addScope.$destroy();
+          };
+        };
+      }],
+      link: function ($scope, $element, $attr) {
+        // pass options to scope
+        var options = {
+          name: $attr.name,
+          editable: true,
+          enableConfirmDelete: stringToBoolean($attr.enableconfirmdelete),
+          maximizable: stringToBoolean($attr.maximizable),
+          collapsible: stringToBoolean($attr.collapsible)
+        };
+        if (angular.isDefined($attr.editable)){
+          options.editable = stringToBoolean($attr.editable);
+        }
+        $scope.options = options;
+      },
+      templateUrl: adfTemplatePath + 'dashboard.html'
+    };
+  }]);
+
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015, Sebastian Sdorra
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+
+
+/**
+ * @ngdoc object
+ * @name adf.dashboardProvider
+ * @description
+ *
+ * The dashboardProvider can be used to register structures and widgets.
+ */
+angular.module('adf.provider', [])
+  .provider('dashboard', function(){
+
+    var widgets = {};
+    var widgetsPath = '';
+    var structures = {};
+    var messageTemplate = '<div class="alert alert-danger">{}</div>';
+    var loadingTemplate = '\
+      <div class="progress progress-striped active">\n\
+        <div class="progress-bar" role="progressbar" style="width: 100%">\n\
+          <span class="sr-only">loading ...</span>\n\
+        </div>\n\
+      </div>';
+
+   /**
+    * @ngdoc method
+    * @name adf.dashboardProvider#widget
+    * @methodOf adf.dashboardProvider
+    * @description
+    *
+    * Registers a new widget.
+    *
+    * @param {string} name of the widget
+    * @param {object} widget to be registered.
+    *
+    *   Object properties:
+    *
+    *   - `title` - `{string=}` - The title of the widget.
+    *   - `description` - `{string=}` - Description of the widget.
+    *   - `config` - `{object}` - Predefined widget configuration.
+    *   - `controller` - `{string=|function()=}` - Controller fn that should be
+    *      associated with newly created scope of the widget or the name of a
+    *      {@link http://docs.angularjs.org/api/angular.Module#controller registered controller}
+    *      if passed as a string.
+    *   - `controllerAs` - `{string=}` - A controller alias name. If present the controller will be
+    *      published to scope under the `controllerAs` name.
+    *   - `template` - `{string=|function()=}` - html template as a string.
+    *   - `templateUrl` - `{string=}` - path to an html template.
+    *   - `reload` - `{boolean=}` - true if the widget could be reloaded. The default is false.
+    *   - `resolve` - `{Object.<string, function>=}` - An optional map of dependencies which should
+    *      be injected into the controller. If any of these dependencies are promises, the widget
+    *      will wait for them all to be resolved or one to be rejected before the controller is
+    *      instantiated.
+    *      If all the promises are resolved successfully, the values of the resolved promises are
+    *      injected.
+    *
+    *      The map object is:
+    *      - `key` – `{string}`: a name of a dependency to be injected into the controller.
+    *      - `factory` - `{string|function}`: If `string` then it is an alias for a service.
+    *        Otherwise if function, then it is {@link http://docs.angularjs.org/api/AUTO.$injector#invoke injected}
+    *        and the return value is treated as the dependency. If the result is a promise, it is
+    *        resolved before its value is injected into the controller.
+    *   - `edit` - `{object}` - Edit modus of the widget.
+    *      - `controller` - `{string=|function()=}` - Same as above, but for the edit mode of the widget.
+    *      - `template` - `{string=|function()=}` - Same as above, but for the edit mode of the widget.
+    *      - `templateUrl` - `{string=}` - Same as above, but for the edit mode of the widget.
+    *      - `resolve` - `{Object.<string, function>=}` - Same as above, but for the edit mode of the widget.
+    *      - `reload` - {boolean} - true if the widget should be reloaded, after the edit mode is closed.
+    *        Default is true.
+    *
+    * @returns {Object} self
+    */
+    this.widget = function(name, widget){
+      var w = angular.extend({reload: false}, widget);
+      if ( w.edit ){
+        var edit = {reload: true};
+        angular.extend(edit, w.edit);
+        w.edit = edit;
+      }
+      widgets[name] = w;
+      return this;
+    };
+
+    /**
+     * @ngdoc method
+     * @name adf.dashboardProvider#widgetsPath
+     * @methodOf adf.dashboardProvider
+     * @description
+     *
+     * Sets the path to the directory which contains the widgets. The widgets
+     * path is used for widgets with a templateUrl which contains the
+     * placeholder {widgetsPath}. The placeholder is replaced with the
+     * configured value, before the template is loaded, but the template is
+     * cached with the unmodified templateUrl (e.g.: {widgetPath}/src/widgets).
+     * The default value of widgetPaths is ''.
+     *
+     *
+     * @param {string} path to the directory which contains the widgets
+     *
+     * @returns {Object} self
+     */
+    this.widgetsPath = function(path){
+      widgetsPath = path;
+      return this;
+    };
+
+   /**
+    * @ngdoc method
+    * @name adf.dashboardProvider#structure
+    * @methodOf adf.dashboardProvider
+    * @description
+    *
+    * Registers a new structure.
+    *
+    * @param {string} name of the structure
+    * @param {object} structure to be registered.
+    *
+    *   Object properties:
+    *
+    *   - `rows` - `{Array.<Object>}` - Rows of the dashboard structure.
+    *     - `styleClass` - `{string}` - CSS Class of the row.
+    *     - `columns` - `{Array.<Object>}` - Columns of the row.
+    *       - `styleClass` - `{string}` - CSS Class of the column.
+    *
+    * @returns {Object} self
+    */
+    this.structure = function(name, structure){
+      structures[name] = structure;
+      return this;
+    };
+
+   /**
+    * @ngdoc method
+    * @name adf.dashboardProvider#messageTemplate
+    * @methodOf adf.dashboardProvider
+    * @description
+    *
+    * Changes the template for messages.
+    *
+    * @param {string} template for messages.
+    *
+    * @returns {Object} self
+    */
+    this.messageTemplate = function(template){
+      messageTemplate = template;
+      return this;
+    };
+
+   /**
+    * @ngdoc method
+    * @name adf.dashboardProvider#loadingTemplate
+    * @methodOf adf.dashboardProvider
+    * @description
+    *
+    * Changes the template which is displayed as
+    * long as the widget resources are not resolved.
+    *
+    * @param {string} loading template
+    *
+    * @returns {Object} self
+    */
+    this.loadingTemplate = function(template){
+      loadingTemplate = template;
+      return this;
+    };
+
+   /**
+    * @ngdoc service
+    * @name adf.dashboard
+    * @description
+    *
+    * The dashboard holds all options, structures and widgets.
+    *
+    * @property {Array.<Object>} widgets Array of registered widgets.
+    * @property {string} widgetsPath Default path for widgets.
+    * @property {Array.<Object>} structures Array of registered structures.
+    * @property {string} messageTemplate Template for messages.
+    * @property {string} loadingTemplate Template for widget loading.
+    *
+    * @returns {Object} self
+    */
+    this.$get = function(){
+      var cid = 0;
+
+      return {
+        widgets: widgets,
+        widgetsPath: widgetsPath,
+        structures: structures,
+        messageTemplate: messageTemplate,
+        loadingTemplate: loadingTemplate,
+
+        /**
+         * @ngdoc method
+         * @name adf.dashboard#id
+         * @methodOf adf.dashboard
+         * @description
+         *
+         * Creates an ongoing numeric id. The method is used to create ids for
+         * columns and widgets in the dashboard.
+         */
+        id: function(){
+          return ++cid;
+        }
+      };
+    };
+
+  });
+
+/*
+* The MIT License
+*
+* Copyright (c) 2015, Sebastian Sdorra
+*
+* Permission is hereby granted, free of charge, to any person obtaining a copy
+* of this software and associated documentation files (the "Software"), to deal
+* in the Software without restriction, including without limitation the rights
+* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+* copies of the Software, and to permit persons to whom the Software is
+* furnished to do so, subject to the following conditions:
+*
+* The above copyright notice and this permission notice shall be included in
+* all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+* SOFTWARE.
+*/
+
+
+/* global angular */
+angular.module('adf')
+  .directive('adfDashboardRow', ["$compile", "adfTemplatePath", "columnTemplate", function ($compile, adfTemplatePath, columnTemplate) {
+    
+
+    return {
+      restrict: 'E',
+      replace: true,
+      scope: {
+        row: '=',
+        adfModel: '=',
+        editMode: '=',
+        options: '='
+      },
+      templateUrl: adfTemplatePath + 'dashboard-row.html',
+      link: function ($scope, $element) {
+        if (angular.isDefined($scope.row.columns) && angular.isArray($scope.row.columns)) {
+          $compile(columnTemplate)($scope, function(cloned) {
+            $element.append(cloned);
+          });
+        }
+      }
+    };
+  }]);
+
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015, Sebastian Sdorra
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+
+
+angular.module('adf')
+  .directive('adfWidgetContent', ["$log", "$q", "$sce", "$http", "$templateCache", "$compile", "$controller", "$injector", "dashboard", function($log, $q, $sce, $http, $templateCache,
+    $compile, $controller, $injector, dashboard) {
+
+    function parseUrl(url){
+      var parsedUrl = url;
+      if ( url.indexOf('{widgetsPath}') >= 0 ){
+        parsedUrl = url.replace('{widgetsPath}', dashboard.widgetsPath)
+                       .replace('//', '/');
+        if (parsedUrl.indexOf('/') === 0){
+          parsedUrl = parsedUrl.substring(1);
+        }
+      }
+      return parsedUrl;
+    }
+
+    function getTemplate(widget){
+      var deferred = $q.defer();
+
+      if ( widget.template ){
+        deferred.resolve(widget.template);
+      } else if (widget.templateUrl) {
+        // try to fetch template from cache
+        var tpl = $templateCache.get(widget.templateUrl);
+        if (tpl){
+          deferred.resolve(tpl);
+        } else {
+          var url = $sce.getTrustedResourceUrl(parseUrl(widget.templateUrl));
+          $http.get(url)
+            .success(function(response){
+              // put response to cache, with unmodified url as key
+              $templateCache.put(widget.templateUrl, response);
+              deferred.resolve(response);
+            })
+            .error(function(){
+              deferred.reject('could not load template');
+            });
+        }
+      }
+
+      return deferred.promise;
+    }
+
+    function compileWidget($scope, $element, currentScope) {
+      var model = $scope.model;
+      var content = $scope.content;
+
+      // display loading template
+      $element.html(dashboard.loadingTemplate);
+
+      // create new scope
+      var templateScope = $scope.$new();
+
+      // pass config object to scope
+      if (!model.config) {
+        model.config = {};
+      }
+
+      templateScope.config = model.config;
+
+      // local injections
+      var base = {
+        $scope: templateScope,
+        widget: model,
+        config: model.config
+      };
+
+      // get resolve promises from content object
+      var resolvers = {};
+      resolvers.$tpl = getTemplate(content);
+      if (content.resolve) {
+        angular.forEach(content.resolve, function(promise, key) {
+          if (angular.isString(promise)) {
+            resolvers[key] = $injector.get(promise);
+          } else {
+            resolvers[key] = $injector.invoke(promise, promise, base);
+          }
+        });
+      }
+
+      // resolve all resolvers
+      $q.all(resolvers).then(function(locals) {
+        angular.extend(locals, base);
+
+        // compile & render template
+        var template = locals.$tpl;
+        $element.html(template);
+        if (content.controller) {
+          var templateCtrl = $controller(content.controller, locals);
+          if (content.controllerAs){
+            templateScope[content.controllerAs] = templateCtrl;
+          }
+          $element.children().data('$ngControllerController', templateCtrl);
+        }
+        $compile($element.contents())(templateScope);
+      }, function(reason) {
+        // handle promise rejection
+        var msg = 'Could not resolve all promises';
+        if (reason) {
+          msg += ': ' + reason;
+        }
+        $log.warn(msg);
+        $element.html(dashboard.messageTemplate.replace(/{}/g, msg));
+      });
+
+      // destroy old scope
+      if (currentScope){
+        currentScope.$destroy();
+      }
+
+      return templateScope;
+    }
+
+    return {
+      replace: true,
+      restrict: 'EA',
+      transclude: false,
+      scope: {
+        model: '=',
+        content: '='
+      },
+      link: function($scope, $element) {
+        var currentScope = compileWidget($scope, $element, null);
+        $scope.$on('widgetConfigChanged', function(){
+          currentScope = compileWidget($scope, $element, currentScope);
+        });
+        $scope.$on('widgetReload', function(){
+          currentScope = compileWidget($scope, $element, currentScope);
+        });
+      }
+    };
+
+  }]);
+
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2015, Sebastian Sdorra
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+
+
+angular.module('adf')
+  .directive('adfWidget', ["$log", "$modal", "dashboard", "adfTemplatePath", function($log, $modal, dashboard, adfTemplatePath) {
+
+    function preLink($scope){
+      var definition = $scope.definition;
+      if (definition) {
+        var w = dashboard.widgets[definition.type];
+        if (w) {
+          // pass title
+          if (!definition.title){
+            definition.title = w.title;
+          }
+
+          if (!definition.titleTemplateUrl) {
+            definition.titleTemplateUrl = adfTemplatePath + 'widget-title.html';
+          }
+
+          // set id for sortable
+          if (!definition.wid){
+            definition.wid = dashboard.id();
+          }
+
+          // pass copy of widget to scope
+          $scope.widget = angular.copy(w);
+
+          // create config object
+          var config = definition.config;
+          if (config) {
+            if (angular.isString(config)) {
+              config = angular.fromJson(config);
+            }
+          } else {
+            config = {};
+          }
+
+          // pass config to scope
+          $scope.config = config;
+
+          // collapse exposed $scope.widgetState property
+         if(!$scope.widgetState){
+             $scope.widgetState ={};
+             $scope.widgetState.isCollapsed= false;
+          }
+
+        } else {
+          $log.warn('could not find widget ' + definition.type);
+        }
+      } else {
+        $log.debug('definition not specified, widget was probably removed');
+      }
+    }
+
+    function postLink($scope, $element) {
+      var definition = $scope.definition;
+      if (definition) {
+        // bind close function
+
+      var deleteWidget = function(){
+        var column = $scope.col;
+        if (column) {
+          var index = column.widgets.indexOf(definition);
+          if (index >= 0) {
+            column.widgets.splice(index, 1);
+          }
+        }
+        $element.remove();
+      }
+        $scope.remove = function() {
+          if($scope.options.enableConfirmDelete){
+              var deleteScope= $scope.$new();
+              var adfDeleteTemplatePath = adfTemplatePath + 'widget-delete.html';
+              if (definition.deleteTemplateUrl) {
+                adfEditTemplatePath = definition.deleteTemplateUrl;
+              }
+              var opts = {
+                scope: deleteScope,
+                templateUrl: adfDeleteTemplatePath,
+                backdrop: 'static'
+              };
+              var instance = $modal.open(opts);
+
+              deleteScope.closeDialog = function() {
+                instance.close();
+                deleteScope.$destroy();
+              };
+              deleteScope.deleteDialog = function() {
+                deleteWidget();
+                deleteScope.closeDialog();
+              };
+          }
+          else {
+              deleteWidget();
+          }
+        }
+
+        // bind reload function
+        $scope.reload = function(){
+          $scope.$broadcast('widgetReload');
+        };
+
+        // bind edit function
+        $scope.edit = function() {
+          var editScope = $scope.$new();
+          editScope.definition = angular.copy(definition);
+          var opts = {
+            scope: editScope,
+            templateUrl: adfTemplatePath + 'widget-edit.html',
+            backdrop: 'static'
+          };
+
+          var instance = $modal.open(opts);
+          editScope.closeDialog = function() {
+            instance.close();
+            editScope.$destroy();
+
+            var widget = $scope.widget;
+            if (widget.edit && widget.edit.reload){
+              // reload content after edit dialog is closed
+              $scope.$broadcast('widgetConfigChanged');
+            }
+          };
+          editScope.saveDialog = function() {
+            definition.title = editScope.definition.title;
+            angular.extend(definition.config,editScope.definition.config);      
+            editScope.closeDialog();
+         };
+        };
+      } else {
+        $log.debug('widget not found');
+      }
+    }
+
+    return {
+      replace: true,
+      restrict: 'EA',
+      transclude: false,
+      templateUrl: adfTemplatePath + 'widget.html',
+      scope: {
+        definition: '=',
+        col: '=column',
+        editMode: '=',
+        options: '=',
+        widgetState: '='
+      },
+
+      controller: ["$scope", function ($scope) {
+        
+        $scope.$on("adfDashboardCollapseExapand",function(event,args){
+           $scope.widgetState.isCollapsed = args.collapseExpandStatus;
+         });
+
+        $scope.openFullScreen = function() {
+          var definition = $scope.definition;
+          var fullScreenScope = $scope.$new();
+          var opts = {
+            scope: fullScreenScope,
+            templateUrl: adfTemplatePath + 'widget-fullscreen.html',
+            size: definition.modalSize || 'lg', // 'sm', 'lg'
+            backdrop: 'static',
+            windowClass: (definition.fullScreen) ? 'dashboard-modal widget-fullscreen' : 'dashboard-modal'
+          };
+
+          var instance = $modal.open(opts);
+          fullScreenScope.closeDialog = function () {
+            instance.close();
+            fullScreenScope.$destroy();
+          };
+        };
+      }],
+
+      compile: function compile(){
+
+        /**
+         * use pre link, because link of widget-content
+         * is executed before post link widget
+         */
+        return {
+          pre: preLink,
+          post: postLink
+        };
+      }
+    };
+
+  }]);
+
+angular.module("adf").run(["$templateCache", function($templateCache) {$templateCache.put("../src/templates/dashboard-column.html","<div adf-id={{column.cid}} class=column ng-class=column.styleClass ng-model=column.widgets> <adf-widget ng-repeat=\"definition in column.widgets\" definition=definition column=column edit-mode=editMode options=options widget-state=widgetState>  </adf-widget></div> ");
+$templateCache.put("../src/templates/dashboard-edit.html","<div class=modal-header> <button type=button class=close ng-click=closeDialog() aria-hidden=true>&times;</button> <h4 class=modal-title>Edit Dashboard</h4> </div> <div class=modal-body> <form role=form> <div class=form-group> <label for=dashboardTitle>Title</label> <input type=text class=form-control id=dashboardTitle ng-model=copy.title required> </div> <div class=form-group> <label>Structure</label> <div class=radio ng-repeat=\"(key, structure) in structures\"> <label> <input type=radio value={{key}} ng-model=model.structure ng-change=\"changeStructure(key, structure)\"> {{key}} </label> </div> </div> </form> </div> <div class=modal-footer> <button type=button class=\"btn btn-primary\" ng-click=closeDialog()>Close</button> </div> ");
+$templateCache.put("../src/templates/dashboard-row.html","<div class=row ng-class=row.styleClass>  </div> ");
+$templateCache.put("../src/templates/dashboard-title.html","<h1> {{model.title}} <span style=\"font-size: 16px\" class=pull-right> <a href ng-if=editMode title=\"add new widget\" ng-click=addWidgetDialog()> <i class=\"glyphicon glyphicon-plus-sign\"></i> </a> <a href ng-if=editMode title=\"edit dashboard\" ng-click=editDashboardDialog()> <i class=\"glyphicon glyphicon-cog\"></i> </a> <a href ng-if=options.editable title=\"{{editMode ? \'save changes\' : \'enable edit mode\'}}\" ng-click=toggleEditMode()> <i class=glyphicon x-ng-class=\"{\'glyphicon-edit\' : !editMode, \'glyphicon-save\' : editMode}\"></i> </a> <a href ng-if=editMode title=\"undo changes\" ng-click=cancelEditMode()> <i class=\"glyphicon glyphicon-repeat adf-flip\"></i> </a> </span> </h1> ");
+$templateCache.put("../src/templates/dashboard.html","<div class=dashboard-container> <div ng-include src=model.titleTemplateUrl></div> <div class=dashboard x-ng-class=\"{\'edit\' : editMode}\"> <adf-dashboard-row row=row adf-model=model options=options ng-repeat=\"row in model.rows\" edit-mode=editMode> </adf-dashboard-row></div> </div> ");
+$templateCache.put("../src/templates/widget-add.html","<div class=modal-header> <button type=button class=close ng-click=closeDialog() aria-hidden=true>&times;</button> <h4 class=modal-title>Add new widget</h4> </div> <div class=modal-body> <div style=\"display: inline-block;\"> <dl class=dl-horizontal> <dt ng-repeat-start=\"(key, widget) in widgets\"> <a href ng-click=addWidget(key)> {{widget.title}} </a> </dt> <dd ng-repeat-end ng-if=widget.description> {{widget.description}} </dd> </dl> </div> </div> <div class=modal-footer> <button type=button class=\"btn btn-primary\" ng-click=closeDialog()>Close</button> </div>");
+$templateCache.put("../src/templates/widget-delete.html","<div class=modal-header> <h4 class=modal-title>Delete {{widget.title}}</h4> </div> <div class=modal-body> <form role=form> <div class=form-group> <label for=widgetTitle>Are you sure you want to delete this widget ?</label> </div> </form> </div> <div class=modal-footer> <button type=button class=\"btn btn-default\" ng-click=closeDialog()>Close</button> <button type=button class=\"btn btn-primary\" ng-click=deleteDialog()>Delete</button> </div> ");
+$templateCache.put("../src/templates/widget-edit.html","<div class=modal-header> <button type=button class=close ng-click=closeDialog() aria-hidden=true>&times;</button> <h4 class=modal-title>{{widget.title}}</h4> </div> <div class=modal-body> <form role=form> <div class=form-group> <label for=widgetTitle>Title</label> <input type=text class=form-control id=widgetTitle ng-model=definition.title placeholder=\"Enter title\" required> </div> </form> <div ng-if=widget.edit> <adf-widget-content model=definition content=widget.edit> </adf-widget-content></div> </div> <div class=modal-footer> <button type=button class=\"btn btn-default\" ng-click=closeDialog()>Cancel</button> <button type=button class=\"btn btn-primary\" ng-click=saveDialog()>Apply</button> </div> ");
+$templateCache.put("../src/templates/widget-fullscreen.html","<div class=modal-header> <div class=\"pull-right widget-icons\"> <a href title=\"Reload Widget Content\" ng-if=widget.reload ng-click=reload()> <i class=\"glyphicon glyphicon-refresh\"></i> </a> <a href title=close ng-click=closeDialog()> <i class=\"glyphicon glyphicon-remove\"></i> </a> </div> <h4 class=modal-title>{{definition.title}}</h4> </div> <div class=modal-body> <adf-widget-content model=definition content=widget> </adf-widget-content></div> <div class=modal-footer> <button type=button class=\"btn btn-primary\" ng-click=closeDialog()>Close</button> </div> ");
+$templateCache.put("../src/templates/widget-title.html","<h3 class=panel-title> {{definition.title}} <span class=pull-right> <a href title=\"reload widget content\" ng-if=widget.reload ng-click=reload()> <i class=\"glyphicon glyphicon-refresh\"></i> </a>  <a href title=\"change widget location\" class=adf-move ng-if=editMode> <i class=\"glyphicon glyphicon-move\"></i> </a>  <a href title=\"collapse widget\" ng-show=\"options.collapsible && !widgetState.isCollapsed\" ng-click=\"widgetState.isCollapsed = !widgetState.isCollapsed\"> <i class=\"glyphicon glyphicon-minus\"></i> </a>  <a href title=\"expand widget\" ng-show=\"options.collapsible && widgetState.isCollapsed\" ng-click=\"widgetState.isCollapsed = !widgetState.isCollapsed\"> <i class=\"glyphicon glyphicon-plus\"></i> </a>  <a href title=\"edit widget configuration\" ng-click=edit() ng-if=editMode> <i class=\"glyphicon glyphicon-cog\"></i> </a> <a href title=\"fullscreen widget\" ng-click=openFullScreen() ng-show=options.maximizable> <i class=\"glyphicon glyphicon-fullscreen\"></i> </a>  <a href title=\"remove widget\" ng-click=remove() ng-if=editMode> <i class=\"glyphicon glyphicon-remove\"></i> </a> </span> </h3> ");
+$templateCache.put("../src/templates/widget.html","<div adf-id={{definition.wid}} adf-widget-type={{definition.type}} class=\"widget panel panel-default\"> <div class=\"panel-heading clearfix\"> <div ng-include src=definition.titleTemplateUrl></div> </div> <div class=panel-body collapse=widgetState.isCollapsed> <adf-widget-content model=definition content=widget> </adf-widget-content></div> </div> ");}]);})(window);
\ No newline at end of file
diff --git a/public/bower_components/angular-file-upload/angular-file-upload.min.js b/public/bower_components/angular-file-upload/angular-file-upload.min.js
new file mode 100644
index 0000000..fa745d3
--- /dev/null
+++ b/public/bower_components/angular-file-upload/angular-file-upload.min.js
@@ -0,0 +1,7 @@
+/*
+ angular-file-upload v2.1.4
+ https://github.com/nervgh/angular-file-upload
+*/
+
+!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):"object"==typeof exports?exports["angular-file-upload"]=t():e["angular-file-upload"]=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=r(n(2)),o=r(n(3)),s=r(n(4)),a=r(n(5)),u=r(n(6)),l=r(n(7)),c=r(n(1)),f=r(n(8)),p=r(n(9)),d=r(n(10)),v=r(n(11)),h=r(n(12));angular.module(i.name,[]).value("fileUploaderOptions",o).factory("FileUploader",s).factory("FileLikeObject",a).factory("FileItem",u).factory("FileDirective",l).factory("FileSelect",c).factory("FileDrop",f).factory("FileOver",p).directive("nvFileSelect",d).directive("nvFileDrop",v).directive("nvFileOver",h).run(["FileUploader","FileLikeObject","FileItem","FileDirective","FileSelect","FileDrop","FileOver",function(e,t,n,r,i,o,s){e.FileLikeObject=t,e.FileItem=n,e.FileDirective=r,e.FileSelect=i,e.FileDrop=o,e.FileOver=s}])},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=function(){function e(e,t){for(var n in t){var r=t[n];r.configurable=!0,r.value&&(r.writable=!0)}Object.defineProperties(e,t)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function l(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:l(i,t,n)}if("value"in r&&r.writable)return r.value;var o=r.get;return void 0===o?void 0:o.call(n)},s=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)},a=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},u=(r(n(2)),angular.extend);e.exports=function(e){var t=function(e){function t(e){a(this,t);var n=u(e,{events:{$destroy:"destroy",change:"onChange"},prop:"select"});o(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,n),this.uploader.isHTML5||this.element.removeAttr("multiple"),this.element.prop("value",null)}return s(t,e),i(t,{getOptions:{value:function(){}},getFilters:{value:function(){}},isEmptyAfterSelection:{value:function(){return!!this.element.attr("multiple")}},onChange:{value:function(){var e=this.uploader.isHTML5?this.element[0].files:this.element[0],t=this.getOptions(),n=this.getFilters();this.uploader.isHTML5||this.destroy(),this.uploader.addToQueue(e,t,n),this.isEmptyAfterSelection()&&(this.element.prop("value",null),this.element.replaceWith(this.element=this.element.clone(!0)))}}}),t}(e);return t},e.exports.$inject=["FileDirective"]},function(e,t){e.exports={name:"angularFileUpload"}},function(e,t){"use strict";e.exports={url:"/",alias:"file",headers:{},queue:[],progress:0,autoUpload:!1,removeAfterUpload:!1,method:"POST",filters:[],formData:[],queueLimit:Number.MAX_VALUE,withCredentials:!1}},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=function(){function e(e,t){for(var n in t){var r=t[n];r.configurable=!0,r.value&&(r.writable=!0)}Object.defineProperties(e,t)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},s=(r(n(2)),angular.copy),a=angular.extend,u=angular.forEach,l=angular.isObject,c=angular.isNumber,f=angular.isDefined,p=angular.isArray,d=angular.element;e.exports=function(e,t,n,r,v,h){var m=r.File,g=r.FormData,_=function(){function r(t){o(this,r);var n=s(e);a(this,n,t,{isUploading:!1,_nextIndex:0,_failFilterIndex:-1,_directives:{select:[],drop:[],over:[]}}),this.filters.unshift({name:"queueLimit",fn:this._queueLimitFilter}),this.filters.unshift({name:"folder",fn:this._folderFilter})}return i(r,{addToQueue:{value:function(e,t,n){var r=this,i=this.isArrayLikeObject(e)?e:[e],o=this._getFilters(n),s=this.queue.length,a=[];u(i,function(e){var n=new v(e);if(r._isValidFile(n,o,t)){var i=new h(r,e,t);a.push(i),r.queue.push(i),r._onAfterAddingFile(i)}else{var s=o[r._failFilterIndex];r._onWhenAddingFileFailed(n,s,t)}}),this.queue.length!==s&&(this._onAfterAddingAll(a),this.progress=this._getTotalProgress()),this._render(),this.autoUpload&&this.uploadAll()}},removeFromQueue:{value:function(e){var t=this.getIndexOfItem(e),n=this.queue[t];n.isUploading&&n.cancel(),this.queue.splice(t,1),n._destroy(),this.progress=this._getTotalProgress()}},clearQueue:{value:function(){for(;this.queue.length;)this.queue[0].remove();this.progress=0}},uploadItem:{value:function(e){var t=this.getIndexOfItem(e),n=this.queue[t],r=this.isHTML5?"_xhrTransport":"_iframeTransport";n._prepareToUploading(),this.isUploading||(this.isUploading=!0,this[r](n))}},cancelItem:{value:function(e){var t=this.getIndexOfItem(e),n=this.queue[t],r=this.isHTML5?"_xhr":"_form";n&&n.isUploading&&n[r].abort()}},uploadAll:{value:function(){var e=this.getNotUploadedItems().filter(function(e){return!e.isUploading});e.length&&(u(e,function(e){return e._prepareToUploading()}),e[0].upload())}},cancelAll:{value:function(){var e=this.getNotUploadedItems();u(e,function(e){return e.cancel()})}},isFile:{value:function(e){return this.constructor.isFile(e)}},isFileLikeObject:{value:function(e){return this.constructor.isFileLikeObject(e)}},isArrayLikeObject:{value:function(e){return this.constructor.isArrayLikeObject(e)}},getIndexOfItem:{value:function(e){return c(e)?e:this.queue.indexOf(e)}},getNotUploadedItems:{value:function(){return this.queue.filter(function(e){return!e.isUploaded})}},getReadyItems:{value:function(){return this.queue.filter(function(e){return e.isReady&&!e.isUploading}).sort(function(e,t){return e.index-t.index})}},destroy:{value:function(){var e=this;u(this._directives,function(t){u(e._directives[t],function(e){e.destroy()})})}},onAfterAddingAll:{value:function(e){}},onAfterAddingFile:{value:function(e){}},onWhenAddingFileFailed:{value:function(e,t,n){}},onBeforeUploadItem:{value:function(e){}},onProgressItem:{value:function(e,t){}},onProgressAll:{value:function(e){}},onSuccessItem:{value:function(e,t,n,r){}},onErrorItem:{value:function(e,t,n,r){}},onCancelItem:{value:function(e,t,n,r){}},onCompleteItem:{value:function(e,t,n,r){}},onCompleteAll:{value:function(){}},_getTotalProgress:{value:function(e){if(this.removeAfterUpload)return e||0;var t=this.getNotUploadedItems().length,n=t?this.queue.length-t:this.queue.length,r=100/this.queue.length,i=(e||0)*r/100;return Math.round(n*r+i)}},_getFilters:{value:function(e){if(!e)return this.filters;if(p(e))return e;var t=e.match(/[^\s,]+/g);return this.filters.filter(function(e){return-1!==t.indexOf(e.name)})}},_render:{value:function(){t.$$phase||t.$apply()}},_folderFilter:{value:function(e){return!(!e.size&&!e.type)}},_queueLimitFilter:{value:function(){return this.queue.length<this.queueLimit}},_isValidFile:{value:function(e,t,n){var r=this;return this._failFilterIndex=-1,t.length?t.every(function(t){return r._failFilterIndex++,t.fn.call(r,e,n)}):!0}},_isSuccessCode:{value:function(e){return e>=200&&300>e||304===e}},_transformResponse:{value:function(e,t){var r=this._headersGetter(t);return u(n.defaults.transformResponse,function(t){e=t(e,r)}),e}},_parseHeaders:{value:function(e){var t,n,r,i={};return e?(u(e.split("\n"),function(e){r=e.indexOf(":"),t=e.slice(0,r).trim().toLowerCase(),n=e.slice(r+1).trim(),t&&(i[t]=i[t]?i[t]+", "+n:n)}),i):i}},_headersGetter:{value:function(e){return function(t){return t?e[t.toLowerCase()]||null:e}}},_xhrTransport:{value:function(e){var t=this,n=e._xhr=new XMLHttpRequest,r=new g;if(this._onBeforeUploadItem(e),u(e.formData,function(e){u(e,function(e,t){r.append(t,e)})}),"number"!=typeof e._file.size)throw new TypeError("The file specified is no longer valid");r.append(e.alias,e._file,e.file.name),n.upload.onprogress=function(n){var r=Math.round(n.lengthComputable?100*n.loaded/n.total:0);t._onProgressItem(e,r)},n.onload=function(){var r=t._parseHeaders(n.getAllResponseHeaders()),i=t._transformResponse(n.response,r),o=t._isSuccessCode(n.status)?"Success":"Error",s="_on"+o+"Item";t[s](e,i,n.status,r),t._onCompleteItem(e,i,n.status,r)},n.onerror=function(){var r=t._parseHeaders(n.getAllResponseHeaders()),i=t._transformResponse(n.response,r);t._onErrorItem(e,i,n.status,r),t._onCompleteItem(e,i,n.status,r)},n.onabort=function(){var r=t._parseHeaders(n.getAllResponseHeaders()),i=t._transformResponse(n.response,r);t._onCancelItem(e,i,n.status,r),t._onCompleteItem(e,i,n.status,r)},n.open(e.method,e.url,!0),n.withCredentials=e.withCredentials,u(e.headers,function(e,t){n.setRequestHeader(t,e)}),n.send(r),this._render()}},_iframeTransport:{value:function(e){var t=this,n=d('<form style="display: none;" />'),r=d('<iframe name="iframeTransport'+Date.now()+'">'),i=e._input;e._form&&e._form.replaceWith(i),e._form=n,this._onBeforeUploadItem(e),i.prop("name",e.alias),u(e.formData,function(e){u(e,function(e,t){var r=d('<input type="hidden" name="'+t+'" />');r.val(e),n.append(r)})}),n.prop({action:e.url,method:"POST",target:r.prop("name"),enctype:"multipart/form-data",encoding:"multipart/form-data"}),r.bind("load",function(){var n="",i=200;try{n=r[0].contentDocument.body.innerHTML}catch(o){i=500}var s={response:n,status:i,dummy:!0},a={},u=t._transformResponse(s.response,a);t._onSuccessItem(e,u,s.status,a),t._onCompleteItem(e,u,s.status,a)}),n.abort=function(){var o,s={status:0,dummy:!0},a={};r.unbind("load").prop("src","javascript:false;"),n.replaceWith(i),t._onCancelItem(e,o,s.status,a),t._onCompleteItem(e,o,s.status,a)},i.after(n),n.append(i).append(r),n[0].submit(),this._render()}},_onWhenAddingFileFailed:{value:function(e,t,n){this.onWhenAddingFileFailed(e,t,n)}},_onAfterAddingFile:{value:function(e){this.onAfterAddingFile(e)}},_onAfterAddingAll:{value:function(e){this.onAfterAddingAll(e)}},_onBeforeUploadItem:{value:function(e){e._onBeforeUpload(),this.onBeforeUploadItem(e)}},_onProgressItem:{value:function(e,t){var n=this._getTotalProgress(t);this.progress=n,e._onProgress(t),this.onProgressItem(e,t),this.onProgressAll(n),this._render()}},_onSuccessItem:{value:function(e,t,n,r){e._onSuccess(t,n,r),this.onSuccessItem(e,t,n,r)}},_onErrorItem:{value:function(e,t,n,r){e._onError(t,n,r),this.onErrorItem(e,t,n,r)}},_onCancelItem:{value:function(e,t,n,r){e._onCancel(t,n,r),this.onCancelItem(e,t,n,r)}},_onCompleteItem:{value:function(e,t,n,r){e._onComplete(t,n,r),this.onCompleteItem(e,t,n,r);var i=this.getReadyItems()[0];return this.isUploading=!1,f(i)?void i.upload():(this.onCompleteAll(),this.progress=this._getTotalProgress(),void this._render())}}},{isFile:{value:function(e){return m&&e instanceof m}},isFileLikeObject:{value:function(e){return e instanceof v}},isArrayLikeObject:{value:function(e){return l(e)&&"length"in e}},inherit:{value:function(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.super_=t}}}),r}();return _.prototype.isHTML5=!(!m||!g),_.isHTML5=_.prototype.isHTML5,_},e.exports.$inject=["fileUploaderOptions","$rootScope","$http","$window","FileLikeObject","FileItem"]},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=function(){function e(e,t){for(var n in t){var r=t[n];r.configurable=!0,r.value&&(r.writable=!0)}Object.defineProperties(e,t)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},s=(r(n(2)),angular.copy),a=angular.isElement,u=angular.isString;e.exports=function(){var e=function(){function e(t){o(this,e);var n=a(t),r=n?t.value:t,i=u(r)?"FakePath":"Object",s="_createFrom"+i;this[s](r)}return i(e,{_createFromFakePath:{value:function(e){this.lastModifiedDate=null,this.size=null,this.type="like/"+e.slice(e.lastIndexOf(".")+1).toLowerCase(),this.name=e.slice(e.lastIndexOf("/")+e.lastIndexOf("\\")+2)}},_createFromObject:{value:function(e){this.lastModifiedDate=s(e.lastModifiedDate),this.size=e.size,this.type=e.type,this.name=e.name}}}),e}();return e},e.exports.$inject=[]},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=function(){function e(e,t){for(var n in t){var r=t[n];r.configurable=!0,r.value&&(r.writable=!0)}Object.defineProperties(e,t)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},s=(r(n(2)),angular.copy),a=angular.extend,u=angular.element,l=angular.isElement;e.exports=function(e,t){var n=function(){function n(e,r,i){o(this,n);var c=l(r),f=c?u(r):null,p=c?null:r;a(this,{url:e.url,alias:e.alias,headers:s(e.headers),formData:s(e.formData),removeAfterUpload:e.removeAfterUpload,withCredentials:e.withCredentials,method:e.method},i,{uploader:e,file:new t(r),isReady:!1,isUploading:!1,isUploaded:!1,isSuccess:!1,isCancel:!1,isError:!1,progress:0,index:null,_file:p,_input:f}),f&&this._replaceNode(f)}return i(n,{upload:{value:function(){try{this.uploader.uploadItem(this)}catch(e){this.uploader._onCompleteItem(this,"",0,[]),this.uploader._onErrorItem(this,"",0,[])}}},cancel:{value:function(){this.uploader.cancelItem(this)}},remove:{value:function(){this.uploader.removeFromQueue(this)}},onBeforeUpload:{value:function(){}},onProgress:{value:function(e){}},onSuccess:{value:function(e,t,n){}},onError:{value:function(e,t,n){}},onCancel:{value:function(e,t,n){}},onComplete:{value:function(e,t,n){}},_onBeforeUpload:{value:function(){this.isReady=!0,this.isUploading=!0,this.isUploaded=!1,this.isSuccess=!1,this.isCancel=!1,this.isError=!1,this.progress=0,this.onBeforeUpload()}},_onProgress:{value:function(e){this.progress=e,this.onProgress(e)}},_onSuccess:{value:function(e,t,n){this.isReady=!1,this.isUploading=!1,this.isUploaded=!0,this.isSuccess=!0,this.isCancel=!1,this.isError=!1,this.progress=100,this.index=null,this.onSuccess(e,t,n)}},_onError:{value:function(e,t,n){this.isReady=!1,this.isUploading=!1,this.isUploaded=!0,this.isSuccess=!1,this.isCancel=!1,this.isError=!0,this.progress=0,this.index=null,this.onError(e,t,n)}},_onCancel:{value:function(e,t,n){this.isReady=!1,this.isUploading=!1,this.isUploaded=!1,this.isSuccess=!1,this.isCancel=!0,this.isError=!1,this.progress=0,this.index=null,this.onCancel(e,t,n)}},_onComplete:{value:function(e,t,n){this.onComplete(e,t,n),this.removeAfterUpload&&this.remove()}},_destroy:{value:function(){this._input&&this._input.remove(),this._form&&this._form.remove(),delete this._form,delete this._input}},_prepareToUploading:{value:function(){this.index=this.index||++this.uploader._nextIndex,this.isReady=!0}},_replaceNode:{value:function(t){var n=e(t.clone())(t.scope());n.prop("value",null),t.css("display","none"),t.after(n)}}}),n}();return n},e.exports.$inject=["$compile","FileLikeObject"]},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=function(){function e(e,t){for(var n in t){var r=t[n];r.configurable=!0,r.value&&(r.writable=!0)}Object.defineProperties(e,t)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},s=(r(n(2)),angular.extend);e.exports=function(){var e=function(){function e(t){o(this,e),s(this,t),this.uploader._directives[this.prop].push(this),this._saveLinks(),this.bind()}return i(e,{bind:{value:function(){for(var e in this.events){var t=this.events[e];this.element.bind(e,this[t])}}},unbind:{value:function(){for(var e in this.events)this.element.unbind(e,this.events[e])}},destroy:{value:function(){var e=this.uploader._directives[this.prop].indexOf(this);this.uploader._directives[this.prop].splice(e,1),this.unbind()}},_saveLinks:{value:function(){for(var e in this.events){var t=this.events[e];this[t]=this[t].bind(this)}}}}),e}();return e.prototype.events={},e},e.exports.$inject=[]},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=function(){function e(e,t){for(var n in t){var r=t[n];r.configurable=!0,r.value&&(r.writable=!0)}Object.defineProperties(e,t)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function c(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:c(i,t,n)}if("value"in r&&r.writable)return r.value;var o=r.get;return void 0===o?void 0:o.call(n)},s=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)},a=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},u=(r(n(2)),angular.extend),l=angular.forEach;e.exports=function(e){var t=function(e){function t(e){a(this,t);var n=u(e,{events:{$destroy:"destroy",drop:"onDrop",dragover:"onDragOver",dragleave:"onDragLeave"},prop:"drop"});o(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,n)}return s(t,e),i(t,{getOptions:{value:function(){}},getFilters:{value:function(){}},onDrop:{value:function(e){var t=this._getTransfer(e);if(t){var n=this.getOptions(),r=this.getFilters();this._preventAndStop(e),l(this.uploader._directives.over,this._removeOverClass,this),this.uploader.addToQueue(t.files,n,r)}}},onDragOver:{value:function(e){var t=this._getTransfer(e);this._haveFiles(t.types)&&(t.dropEffect="copy",this._preventAndStop(e),l(this.uploader._directives.over,this._addOverClass,this))}},onDragLeave:{value:function(e){e.currentTarget!==this.element[0]&&(this._preventAndStop(e),l(this.uploader._directives.over,this._removeOverClass,this))}},_getTransfer:{value:function(e){return e.dataTransfer?e.dataTransfer:e.originalEvent.dataTransfer}},_preventAndStop:{value:function(e){e.preventDefault(),e.stopPropagation()}},_haveFiles:{value:function(e){return e?e.indexOf?-1!==e.indexOf("Files"):e.contains?e.contains("Files"):!1:!1}},_addOverClass:{value:function(e){e.addOverClass()}},_removeOverClass:{value:function(e){e.removeOverClass()}}}),t}(e);return t},e.exports.$inject=["FileDirective"]},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e},i=function(){function e(e,t){for(var n in t){var r=t[n];r.configurable=!0,r.value&&(r.writable=!0)}Object.defineProperties(e,t)}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function l(e,t,n){var r=Object.getOwnPropertyDescriptor(e,t);if(void 0===r){var i=Object.getPrototypeOf(e);return null===i?void 0:l(i,t,n)}if("value"in r&&r.writable)return r.value;var o=r.get;return void 0===o?void 0:o.call(n)},s=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(e.__proto__=t)},a=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},u=(r(n(2)),angular.extend);e.exports=function(e){var t=function(e){function t(e){a(this,t);var n=u(e,{events:{$destroy:"destroy"},prop:"over",overClass:"nv-file-over"});o(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,n)}return s(t,e),i(t,{addOverClass:{value:function(){this.element.addClass(this.getOverClass())}},removeOverClass:{value:function(){this.element.removeClass(this.getOverClass())}},getOverClass:{value:function(){return this.overClass}}}),t}(e);return t},e.exports.$inject=["FileDirective"]},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e};r(n(2));e.exports=function(e,t,n){return{link:function(r,i,o){var s=r.$eval(o.uploader);if(!(s instanceof t))throw new TypeError('"Uploader" must be an instance of FileUploader');var a=new n({uploader:s,element:i});a.getOptions=e(o.options).bind(a,r),a.getFilters=function(){return o.filters}}}},e.exports.$inject=["$parse","FileUploader","FileSelect"]},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e};r(n(2));e.exports=function(e,t,n){return{link:function(r,i,o){var s=r.$eval(o.uploader);if(!(s instanceof t))throw new TypeError('"Uploader" must be an instance of FileUploader');if(s.isHTML5){var a=new n({uploader:s,element:i});a.getOptions=e(o.options).bind(a,r),a.getFilters=function(){return o.filters}}}}},e.exports.$inject=["$parse","FileUploader","FileDrop"]},function(e,t,n){"use strict";var r=function(e){return e&&e.__esModule?e["default"]:e};r(n(2));e.exports=function(e,t){return{link:function(n,r,i){var o=n.$eval(i.uploader);if(!(o instanceof e))throw new TypeError('"Uploader" must be an instance of FileUploader');var s=new t({uploader:o,element:r});s.getOverClass=function(){return i.overClass||s.overClass}}}},e.exports.$inject=["FileUploader","FileOver"]}])});
+//# sourceMappingURL=angular-file-upload.min.js.map
\ No newline at end of file
diff --git a/public/bower_components/angular-filter/angular-filter.min.js b/public/bower_components/angular-filter/angular-filter.min.js
new file mode 100644
index 0000000..11714a5
--- /dev/null
+++ b/public/bower_components/angular-filter/angular-filter.min.js
@@ -0,0 +1,6 @@
+/**
+ * Bunch of useful filters for angularJS(with no external dependencies!)
+ * @version v0.5.7 - 2015-10-04 * @link https://github.com/a8m/angular-filter
+ * @author Ariel Mashraki <[email-masked]>
+ * @license MIT License, http://www.opensource.org/licenses/MIT
+ */!function(a,b,c){"use strict";function d(a){return D(a)?a:Object.keys(a).map(function(b){return a[b]})}function e(a){return null===a}function f(a,b){var d=Object.keys(a);return-1==d.map(function(d){return b[d]!==c&&b[d]==a[d]}).indexOf(!1)}function g(a,b){if(""===b)return a;var c=a.indexOf(b.charAt(0));return-1===c?!1:g(a.substr(c+1),b.substr(1))}function h(a,b,c){var d=0;return a.filter(function(a){var e=x(c)?b>d&&c(a):b>d;return d=e?d+1:d,e})}function i(a,b,c){return c.round(a*c.pow(10,b))/c.pow(10,b)}function j(a,b,c){b=b||[];var d=Object.keys(a);return d.forEach(function(d){if(C(a[d])&&!D(a[d])){var e=c?c+"."+d:c;j(a[d],b,e||d)}else{var f=c?c+"."+d:d;b.push(f)}}),b}function k(a){return a&&a.$evalAsync&&a.$watch}function l(){return function(a,b){return a>b}}function m(){return function(a,b){return a>=b}}function n(){return function(a,b){return b>a}}function o(){return function(a,b){return b>=a}}function p(){return function(a,b){return a==b}}function q(){return function(a,b){return a!=b}}function r(){return function(a,b){return a===b}}function s(){return function(a,b){return a!==b}}function t(a){return function(b,c){return b=C(b)?d(b):b,!D(b)||y(c)?!1:b.some(function(b){return C(b)||z(c)?a(c)(b):b===c})}}function u(a,b){return b=b||0,b>=a.length?a:D(a[b])?u(a.slice(0,b).concat(a[b],a.slice(b+1)),b):u(a,b+1)}function v(a){return function(b,c){function e(a,b){return y(b)?!1:a.some(function(a){return H(a,b)})}if(b=C(b)?d(b):b,!D(b))return b;var f=[],g=a(c);return y(c)?b.filter(function(a,b,c){return c.indexOf(a)===b}):b.filter(function(a){var b=g(a);return e(f,b)?!1:(f.push(b),!0)})}}function w(a,b,c){return b?a+c+w(a,--b,c):a}var x=b.isDefined,y=b.isUndefined,z=b.isFunction,A=b.isString,B=b.isNumber,C=b.isObject,D=b.isArray,E=b.forEach,F=b.extend,G=b.copy,H=b.equals;String.prototype.contains||(String.prototype.contains=function(){return-1!==String.prototype.indexOf.apply(this,arguments)}),b.module("a8m.angular",[]).filter("isUndefined",function(){return function(a){return b.isUndefined(a)}}).filter("isDefined",function(){return function(a){return b.isDefined(a)}}).filter("isFunction",function(){return function(a){return b.isFunction(a)}}).filter("isString",function(){return function(a){return b.isString(a)}}).filter("isNumber",function(){return function(a){return b.isNumber(a)}}).filter("isArray",function(){return function(a){return b.isArray(a)}}).filter("isObject",function(){return function(a){return b.isObject(a)}}).filter("isEqual",function(){return function(a,c){return b.equals(a,c)}}),b.module("a8m.conditions",[]).filter({isGreaterThan:l,">":l,isGreaterThanOrEqualTo:m,">=":m,isLessThan:n,"<":n,isLessThanOrEqualTo:o,"<=":o,isEqualTo:p,"==":p,isNotEqualTo:q,"!=":q,isIdenticalTo:r,"===":r,isNotIdenticalTo:s,"!==":s}),b.module("a8m.is-null",[]).filter("isNull",function(){return function(a){return e(a)}}),b.module("a8m.after-where",[]).filter("afterWhere",function(){return function(a,b){if(a=C(a)?d(a):a,!D(a)||y(b))return a;var c=a.map(function(a){return f(b,a)}).indexOf(!0);return a.slice(-1===c?0:c)}}),b.module("a8m.after",[]).filter("after",function(){return function(a,b){return a=C(a)?d(a):a,D(a)?a.slice(b):a}}),b.module("a8m.before-where",[]).filter("beforeWhere",function(){return function(a,b){if(a=C(a)?d(a):a,!D(a)||y(b))return a;var c=a.map(function(a){return f(b,a)}).indexOf(!0);return a.slice(0,-1===c?a.length:++c)}}),b.module("a8m.before",[]).filter("before",function(){return function(a,b){return a=C(a)?d(a):a,D(a)?a.slice(0,b?--b:b):a}}),b.module("a8m.chunk-by",["a8m.filter-watcher"]).filter("chunkBy",["filterWatcher",function(a){return function(b,c,d){function e(a,b){for(var c=[];a--;)c[a]=b;return c}function f(a,b,c){return D(a)?a.map(function(a,d,f){return d*=b,a=f.slice(d,d+b),!y(c)&&a.length<b?a.concat(e(b-a.length,c)):a}).slice(0,Math.ceil(a.length/b)):a}return a.isMemoized("chunkBy",arguments)||a.memoize("chunkBy",arguments,this,f(b,c,d))}}]),b.module("a8m.concat",[]).filter("concat",[function(){return function(a,b){if(y(b))return a;if(D(a))return C(b)?a.concat(d(b)):a.concat(b);if(C(a)){var c=d(a);return C(b)?c.concat(d(b)):c.concat(b)}return a}}]),b.module("a8m.contains",[]).filter({contains:["$parse",t],some:["$parse",t]}),b.module("a8m.count-by",[]).filter("countBy",["$parse",function(a){return function(b,c){var e,f={},g=a(c);return b=C(b)?d(b):b,!D(b)||y(c)?b:(b.forEach(function(a){e=g(a),f[e]||(f[e]=0),f[e]++}),f)}}]),b.module("a8m.defaults",[]).filter("defaults",["$parse",function(a){return function(b,c){if(b=C(b)?d(b):b,!D(b)||!C(c))return b;var e=j(c);return b.forEach(function(b){e.forEach(function(d){var e=a(d),f=e.assign;y(e(b))&&f(b,e(c))})}),b}}]),b.module("a8m.every",[]).filter("every",["$parse",function(a){return function(b,c){return b=C(b)?d(b):b,!D(b)||y(c)?!0:b.every(function(b){return C(b)||z(c)?a(c)(b):b===c})}}]),b.module("a8m.filter-by",[]).filter("filterBy",["$parse",function(a){return function(b,e,f){var g;return f=A(f)||B(f)?String(f).toLowerCase():c,b=C(b)?d(b):b,!D(b)||y(f)?b:b.filter(function(b){return e.some(function(c){if(~c.indexOf("+")){var d=c.replace(new RegExp("\\s","g"),"").split("+");g=d.reduce(function(c,d,e){return 1===e?a(c)(b)+" "+a(d)(b):c+" "+a(d)(b)})}else g=a(c)(b);return A(g)||B(g)?String(g).toLowerCase().contains(f):!1})})}}]),b.module("a8m.first",[]).filter("first",["$parse",function(a){return function(b){var e,f,g;return b=C(b)?d(b):b,D(b)?(g=Array.prototype.slice.call(arguments,1),e=B(g[0])?g[0]:1,f=B(g[0])?B(g[1])?c:g[1]:g[0],g.length?h(b,e,f?a(f):f):b[0]):b}}]),b.module("a8m.flatten",[]).filter("flatten",function(){return function(a,b){return b=b||!1,a=C(a)?d(a):a,D(a)?b?[].concat.apply([],a):u(a,0):a}}),b.module("a8m.fuzzy-by",[]).filter("fuzzyBy",["$parse",function(a){return function(b,c,e,f){var h,i,j=f||!1;return b=C(b)?d(b):b,!D(b)||y(c)||y(e)?b:(i=a(c),b.filter(function(a){return h=i(a),A(h)?(h=j?h:h.toLowerCase(),e=j?e:e.toLowerCase(),g(h,e)!==!1):!1}))}}]),b.module("a8m.fuzzy",[]).filter("fuzzy",function(){return function(a,b,c){function e(a,b){var c,d,e=Object.keys(a);return 0<e.filter(function(e){return c=a[e],d?!0:A(c)?(c=f?c:c.toLowerCase(),d=g(c,b)!==!1):!1}).length}var f=c||!1;return a=C(a)?d(a):a,!D(a)||y(b)?a:(b=f?b:b.toLowerCase(),a.filter(function(a){return A(a)?(a=f?a:a.toLowerCase(),g(a,b)!==!1):C(a)?e(a,b):!1}))}}),b.module("a8m.group-by",["a8m.filter-watcher"]).filter("groupBy",["$parse","filterWatcher",function(a,b){return function(c,d){function e(a,b){var c,d={};return E(a,function(a){c=b(a),d[c]||(d[c]=[]),d[c].push(a)}),d}return!C(c)||y(d)?c:b.isMemoized("groupBy",arguments)||b.memoize("groupBy",arguments,this,e(c,a(d)))}}]),b.module("a8m.is-empty",[]).filter("isEmpty",function(){return function(a){return C(a)?!d(a).length:!a.length}}),b.module("a8m.join",[]).filter("join",function(){return function(a,b){return y(a)||!D(a)?a:(y(b)&&(b=" "),a.join(b))}}),b.module("a8m.last",[]).filter("last",["$parse",function(a){return function(b){var e,f,g,i=G(b);return i=C(i)?d(i):i,D(i)?(g=Array.prototype.slice.call(arguments,1),e=B(g[0])?g[0]:1,f=B(g[0])?B(g[1])?c:g[1]:g[0],g.length?h(i.reverse(),e,f?a(f):f).reverse():i[i.length-1]):i}}]),b.module("a8m.map",[]).filter("map",["$parse",function(a){return function(b,c){return b=C(b)?d(b):b,!D(b)||y(c)?b:b.map(function(b){return a(c)(b)})}}]),b.module("a8m.omit",[]).filter("omit",["$parse",function(a){return function(b,c){return b=C(b)?d(b):b,!D(b)||y(c)?b:b.filter(function(b){return!a(c)(b)})}}]),b.module("a8m.pick",[]).filter("pick",["$parse",function(a){return function(b,c){return b=C(b)?d(b):b,!D(b)||y(c)?b:b.filter(function(b){return a(c)(b)})}}]),b.module("a8m.range",[]).filter("range",function(){return function(a,b){for(var c=0;c<parseInt(b);c++)a.push(c);return a}}),b.module("a8m.remove-with",[]).filter("removeWith",function(){return function(a,b){return y(b)?a:(a=C(a)?d(a):a,a.filter(function(a){return!f(b,a)}))}}),b.module("a8m.remove",[]).filter("remove",function(){return function(a){a=C(a)?d(a):a;var b=Array.prototype.slice.call(arguments,1);return D(a)?a.filter(function(a){return!b.some(function(b){return H(b,a)})}):a}}),b.module("a8m.reverse",[]).filter("reverse",[function(){return function(a){return a=C(a)?d(a):a,A(a)?a.split("").reverse().join(""):D(a)?a.slice().reverse():a}}]),b.module("a8m.search-field",[]).filter("searchField",["$parse",function(a){return function(b){var c,e;b=C(b)?d(b):b;var f=Array.prototype.slice.call(arguments,1);return D(b)&&f.length?b.map(function(b){return e=f.map(function(d){return(c=a(d))(b)}).join(" "),F(b,{searchField:e})}):b}}]),b.module("a8m.to-array",[]).filter("toArray",function(){return function(a,b){return C(a)?b?Object.keys(a).map(function(b){return F(a[b],{$key:b})}):d(a):a}}),b.module("a8m.unique",[]).filter({unique:["$parse",v],uniq:["$parse",v]}),b.module("a8m.where",[]).filter("where",function(){return function(a,b){return y(b)?a:(a=C(a)?d(a):a,a.filter(function(a){return f(b,a)}))}}),b.module("a8m.xor",[]).filter("xor",["$parse",function(a){return function(b,c,e){function f(b,c){var d=a(e);return c.some(function(a){return e?H(d(a),d(b)):H(a,b)})}return e=e||!1,b=C(b)?d(b):b,c=C(c)?d(c):c,D(b)&&D(c)?b.concat(c).filter(function(a){return!(f(a,b)&&f(a,c))}):b}}]),b.module("a8m.math.byteFmt",["a8m.math"]).filter("byteFmt",["$math",function(a){return function(b,c){return B(c)&&isFinite(c)&&c%1===0&&c>=0&&B(b)&&isFinite(b)?1024>b?i(b,c,a)+" B":1048576>b?i(b/1024,c,a)+" KB":1073741824>b?i(b/1048576,c,a)+" MB":i(b/1073741824,c,a)+" GB":"NaN"}}]),b.module("a8m.math.degrees",["a8m.math"]).filter("degrees",["$math",function(a){return function(b,c){if(B(c)&&isFinite(c)&&c%1===0&&c>=0&&B(b)&&isFinite(b)){var d=180*b/a.PI;return a.round(d*a.pow(10,c))/a.pow(10,c)}return"NaN"}}]),b.module("a8m.math.kbFmt",["a8m.math"]).filter("kbFmt",["$math",function(a){return function(b,c){return B(c)&&isFinite(c)&&c%1===0&&c>=0&&B(b)&&isFinite(b)?1024>b?i(b,c,a)+" KB":1048576>b?i(b/1024,c,a)+" MB":i(b/1048576,c,a)+" GB":"NaN"}}]),b.module("a8m.math",[]).factory("$math",["$window",function(a){return a.Math}]),b.module("a8m.math.max",["a8m.math"]).filter("max",["$math","$parse",function(a,b){function c(c,d){var e=c.map(function(a){return b(d)(a)});return e.indexOf(a.max.apply(a,e))}return function(b,d){return D(b)?y(d)?a.max.apply(a,b):b[c(b,d)]:b}}]),b.module("a8m.math.min",["a8m.math"]).filter("min",["$math","$parse",function(a,b){function c(c,d){var e=c.map(function(a){return b(d)(a)});return e.indexOf(a.min.apply(a,e))}return function(b,d){return D(b)?y(d)?a.min.apply(a,b):b[c(b,d)]:b}}]),b.module("a8m.math.percent",["a8m.math"]).filter("percent",["$math","$window",function(a,b){return function(c,d,e){var f=A(c)?b.Number(c):c;return d=d||100,e=e||!1,!B(f)||b.isNaN(f)?c:e?a.round(f/d*100):f/d*100}}]),b.module("a8m.math.radians",["a8m.math"]).filter("radians",["$math",function(a){return function(b,c){if(B(c)&&isFinite(c)&&c%1===0&&c>=0&&B(b)&&isFinite(b)){var d=3.14159265359*b/180;return a.round(d*a.pow(10,c))/a.pow(10,c)}return"NaN"}}]),b.module("a8m.math.radix",[]).filter("radix",function(){return function(a,b){var c=/^[2-9]$|^[1-2]\d$|^3[0-6]$/;return B(a)&&c.test(b)?a.toString(b).toUpperCase():a}}),b.module("a8m.math.shortFmt",["a8m.math"]).filter("shortFmt",["$math",function(a){return function(b,c){return B(c)&&isFinite(c)&&c%1===0&&c>=0&&B(b)&&isFinite(b)?1e3>b?b:1e6>b?i(b/1e3,c,a)+" K":1e9>b?i(b/1e6,c,a)+" M":i(b/1e9,c,a)+" B":"NaN"}}]),b.module("a8m.math.sum",[]).filter("sum",function(){return function(a,b){return D(a)?a.reduce(function(a,b){return a+b},b||0):a}}),b.module("a8m.ends-with",[]).filter("endsWith",function(){return function(a,b,c){var d,e=c||!1;return!A(a)||y(b)?a:(a=e?a:a.toLowerCase(),d=a.length-b.length,-1!==a.indexOf(e?b:b.toLowerCase(),d))}}),b.module("a8m.latinize",[]).filter("latinize",[function(){function a(a){return a.replace(/[^\u0000-\u007E]/g,function(a){return c[a]||a})}for(var b=[{base:"A",letters:"AⒶＡÀÁÂẦẤẪẨÃĀĂẰẮẴẲȦǠÄǞẢÅǺǍȀȂẠẬẶḀĄȺⱯ"},{base:"AA",letters:"Ꜳ"},{base:"AE",letters:"ÆǼǢ"},{base:"AO",letters:"Ꜵ"},{base:"AU",letters:"Ꜷ"},{base:"AV",letters:"ꜸꜺ"},{base:"AY",letters:"Ꜽ"},{base:"B",letters:"BⒷＢḂḄḆɃƂƁ"},{base:"C",letters:"CⒸＣĆĈĊČÇḈƇȻꜾ"},{base:"D",letters:"DⒹＤḊĎḌḐḒḎĐƋƊƉꝹ"},{base:"DZ",letters:"ǱǄ"},{base:"Dz",letters:"ǲǅ"},{base:"E",letters:"EⒺＥÈÉÊỀẾỄỂẼĒḔḖĔĖËẺĚȄȆẸỆȨḜĘḘḚƐƎ"},{base:"F",letters:"FⒻＦḞƑꝻ"},{base:"G",letters:"GⒼＧǴĜḠĞĠǦĢǤƓꞠꝽꝾ"},{base:"H",letters:"HⒽＨĤḢḦȞḤḨḪĦⱧⱵꞍ"},{base:"I",letters:"IⒾＩÌÍÎĨĪĬİÏḮỈǏȈȊỊĮḬƗ"},{base:"J",letters:"JⒿＪĴɈ"},{base:"K",letters:"KⓀＫḰǨḲĶḴƘⱩꝀꝂꝄꞢ"},{base:"L",letters:"LⓁＬĿĹĽḶḸĻḼḺŁȽⱢⱠꝈꝆꞀ"},{base:"LJ",letters:"Ǉ"},{base:"Lj",letters:"ǈ"},{base:"M",letters:"MⓂＭḾṀṂⱮƜ"},{base:"N",letters:"NⓃＮǸŃÑṄŇṆŅṊṈȠƝꞐꞤ"},{base:"NJ",letters:"Ǌ"},{base:"Nj",letters:"ǋ"},{base:"O",letters:"OⓄＯÒÓÔỒỐỖỔÕṌȬṎŌṐṒŎȮȰÖȪỎŐǑȌȎƠỜỚỠỞỢỌỘǪǬØǾƆƟꝊꝌ"},{base:"OI",letters:"Ƣ"},{base:"OO",letters:"Ꝏ"},{base:"OU",letters:"Ȣ"},{base:"OE",letters:"Œ"},{base:"oe",letters:"œ"},{base:"P",letters:"PⓅＰṔṖƤⱣꝐꝒꝔ"},{base:"Q",letters:"QⓆＱꝖꝘɊ"},{base:"R",letters:"RⓇＲŔṘŘȐȒṚṜŖṞɌⱤꝚꞦꞂ"},{base:"S",letters:"SⓈＳẞŚṤŜṠŠṦṢṨȘŞⱾꞨꞄ"},{base:"T",letters:"TⓉＴṪŤṬȚŢṰṮŦƬƮȾꞆ"},{base:"TZ",letters:"Ꜩ"},{base:"U",letters:"UⓊＵÙÚÛŨṸŪṺŬÜǛǗǕǙỦŮŰǓȔȖƯỪỨỮỬỰỤṲŲṶṴɄ"},{base:"V",letters:"VⓋＶṼṾƲꝞɅ"},{base:"VY",letters:"Ꝡ"},{base:"W",letters:"WⓌＷẀẂŴẆẄẈⱲ"},{base:"X",letters:"XⓍＸẊẌ"},{base:"Y",letters:"YⓎＹỲÝŶỸȲẎŸỶỴƳɎỾ"},{base:"Z",letters:"ZⓏＺŹẐŻŽẒẔƵȤⱿⱫꝢ"},{base:"a",letters:"aⓐａẚàáâầấẫẩãāăằắẵẳȧǡäǟảåǻǎȁȃạậặḁąⱥɐ"},{base:"aa",letters:"ꜳ"},{base:"ae",letters:"æǽǣ"},{base:"ao",letters:"ꜵ"},{base:"au",letters:"ꜷ"},{base:"av",letters:"ꜹꜻ"},{base:"ay",letters:"ꜽ"},{base:"b",letters:"bⓑｂḃḅḇƀƃɓ"},{base:"c",letters:"cⓒｃćĉċčçḉƈȼꜿↄ"},{base:"d",letters:"dⓓｄḋďḍḑḓḏđƌɖɗꝺ"},{base:"dz",letters:"ǳǆ"},{base:"e",letters:"eⓔｅèéêềếễểẽēḕḗĕėëẻěȅȇẹệȩḝęḙḛɇɛǝ"},{base:"f",letters:"fⓕｆḟƒꝼ"},{base:"g",letters:"gⓖｇǵĝḡğġǧģǥɠꞡᵹꝿ"},{base:"h",letters:"hⓗｈĥḣḧȟḥḩḫẖħⱨⱶɥ"},{base:"hv",letters:"ƕ"},{base:"i",letters:"iⓘｉìíîĩīĭïḯỉǐȉȋịįḭɨı"},{base:"j",letters:"jⓙｊĵǰɉ"},{base:"k",letters:"kⓚｋḱǩḳķḵƙⱪꝁꝃꝅꞣ"},{base:"l",letters:"lⓛｌŀĺľḷḹļḽḻſłƚɫⱡꝉꞁꝇ"},{base:"lj",letters:"ǉ"},{base:"m",letters:"mⓜｍḿṁṃɱɯ"},{base:"n",letters:"nⓝｎǹńñṅňṇņṋṉƞɲŉꞑꞥ"},{base:"nj",letters:"ǌ"},{base:"o",letters:"oⓞｏòóôồốỗổõṍȭṏōṑṓŏȯȱöȫỏőǒȍȏơờớỡởợọộǫǭøǿɔꝋꝍɵ"},{base:"oi",letters:"ƣ"},{base:"ou",letters:"ȣ"},{base:"oo",letters:"ꝏ"},{base:"p",letters:"pⓟｐṕṗƥᵽꝑꝓꝕ"},{base:"q",letters:"qⓠｑɋꝗꝙ"},{base:"r",letters:"rⓡｒŕṙřȑȓṛṝŗṟɍɽꝛꞧꞃ"},{base:"s",letters:"sⓢｓßśṥŝṡšṧṣṩșşȿꞩꞅẛ"},{base:"t",letters:"tⓣｔṫẗťṭțţṱṯŧƭʈⱦꞇ"},{base:"tz",letters:"ꜩ"},{base:"u",letters:"uⓤｕùúûũṹūṻŭüǜǘǖǚủůűǔȕȗưừứữửựụṳųṷṵʉ"},{base:"v",letters:"vⓥｖṽṿʋꝟʌ"},{base:"vy",letters:"ꝡ"},{base:"w",letters:"wⓦｗẁẃŵẇẅẘẉⱳ"},{base:"x",letters:"xⓧｘẋẍ"},{base:"y",letters:"yⓨｙỳýŷỹȳẏÿỷẙỵƴɏỿ"},{base:"z",letters:"zⓩｚźẑżžẓẕƶȥɀⱬꝣ"}],c={},d=0;d<b.length;d++)for(var e=b[d].letters.split(""),f=0;f<e.length;f++)c[e[f]]=b[d].base;return function(b){return A(b)?a(b):b}}]),b.module("a8m.ltrim",[]).filter("ltrim",function(){return function(a,b){var c=b||"\\s";return A(a)?a.replace(new RegExp("^"+c+"+"),""):a}}),b.module("a8m.match",[]).filter("match",function(){return function(a,b,c){var d=new RegExp(b,c);return A(a)?a.match(d):null}}),b.module("a8m.repeat",[]).filter("repeat",[function(){return function(a,b,c){var d=~~b;return A(a)&&d?w(a,--b,c||""):a}}]),b.module("a8m.rtrim",[]).filter("rtrim",function(){return function(a,b){var c=b||"\\s";return A(a)?a.replace(new RegExp(c+"+$"),""):a}}),b.module("a8m.slugify",[]).filter("slugify",[function(){return function(a,b){var c=y(b)?"-":b;return A(a)?a.toLowerCase().replace(/\s+/g,c):a}}]),b.module("a8m.starts-with",[]).filter("startsWith",function(){return function(a,b,c){var d=c||!1;return!A(a)||y(b)?a:(a=d?a:a.toLowerCase(),!a.indexOf(d?b:b.toLowerCase()))}}),b.module("a8m.stringular",[]).filter("stringular",function(){return function(a){var b=Array.prototype.slice.call(arguments,1);return a.replace(/{(\d+)}/g,function(a,c){return y(b[c])?a:b[c]})}}),b.module("a8m.strip-tags",[]).filter("stripTags",function(){return function(a){return A(a)?a.replace(/<\S[^><]*>/g,""):a}}),b.module("a8m.test",[]).filter("test",function(){return function(a,b,c){var d=new RegExp(b,c);return A(a)?d.test(a):a}}),b.module("a8m.trim",[]).filter("trim",function(){return function(a,b){var c=b||"\\s";return A(a)?a.replace(new RegExp("^"+c+"+|"+c+"+$","g"),""):a}}),b.module("a8m.truncate",[]).filter("truncate",function(){return function(a,b,c,d){return b=y(b)?a.length:b,d=d||!1,c=c||"",!A(a)||a.length<=b?a:a.substring(0,d?-1===a.indexOf(" ",b)?a.length:a.indexOf(" ",b):b)+c}}),b.module("a8m.ucfirst",[]).filter("ucfirst",[function(){return function(a){return A(a)?a.split(" ").map(function(a){return a.charAt(0).toUpperCase()+a.substring(1)}).join(" "):a}}]),b.module("a8m.uri-component-encode",[]).filter("uriComponentEncode",["$window",function(a){return function(b){return A(b)?a.encodeURIComponent(b):b}}]),b.module("a8m.uri-encode",[]).filter("uriEncode",["$window",function(a){return function(b){return A(b)?a.encodeURI(b):b}}]),b.module("a8m.wrap",[]).filter("wrap",function(){return function(a,b,c){return A(a)&&x(b)?[b,a,c||b].join(""):a}}),b.module("a8m.filter-watcher",[]).provider("filterWatcher",function(){this.$get=["$window","$rootScope",function(a,b){function c(b,c){function d(){var b=[];return function(c,d){if(C(d)&&!e(d)){if(~b.indexOf(d))return"[Circular]";b.push(d)}return a==d?"$WINDOW":a.document==d?"$DOCUMENT":k(d)?"$SCOPE":d}}return[b,JSON.stringify(c,d())].join("#").replace(/"/g,"")}function d(a){var b=a.targetScope.$id;E(l[b],function(a){delete j[a]}),delete l[b]}function f(){m(function(){b.$$phase||(j={})},2e3)}function g(a,b){var c=a.$id;return y(l[c])&&(a.$on("$destroy",d),l[c]=[]),l[c].push(b)}function h(a,b){var d=c(a,b);return j[d]}function i(a,b,d,e){var h=c(a,b);return j[h]=e,k(d)?g(d,h):f(),e}var j={},l={},m=a.setTimeout;return{isMemoized:h,memoize:i}}]}),b.module("angular.filter",["a8m.ucfirst","a8m.uri-encode","a8m.uri-component-encode","a8m.slugify","a8m.latinize","a8m.strip-tags","a8m.stringular","a8m.truncate","a8m.starts-with","a8m.ends-with","a8m.wrap","a8m.trim","a8m.ltrim","a8m.rtrim","a8m.repeat","a8m.test","a8m.match","a8m.to-array","a8m.concat","a8m.contains","a8m.unique","a8m.is-empty","a8m.after","a8m.after-where","a8m.before","a8m.before-where","a8m.defaults","a8m.where","a8m.reverse","a8m.remove","a8m.remove-with","a8m.group-by","a8m.count-by","a8m.chunk-by","a8m.search-field","a8m.fuzzy-by","a8m.fuzzy","a8m.omit","a8m.pick","a8m.every","a8m.filter-by","a8m.xor","a8m.map","a8m.first","a8m.last","a8m.flatten","a8m.join","a8m.range","a8m.math","a8m.math.max","a8m.math.min","a8m.math.percent","a8m.math.radix","a8m.math.sum","a8m.math.degrees","a8m.math.radians","a8m.math.byteFmt","a8m.math.kbFmt","a8m.math.shortFmt","a8m.angular","a8m.conditions","a8m.is-null","a8m.filter-watcher"])}(window,window.angular);
\ No newline at end of file
diff --git a/public/bower_components/angular-local-storage/angular-local-storage.js b/public/bower_components/angular-local-storage/angular-local-storage.js
new file mode 100644
index 0000000..e731ad1
--- /dev/null
+++ b/public/bower_components/angular-local-storage/angular-local-storage.js
@@ -0,0 +1,449 @@
+/**
+ * An Angular module that gives you access to the browsers local storage
+ * @version v0.2.3 - 2015-10-11
+ * @link https://github.com/grevory/angular-local-storage
+ * @author grevory <[email-masked]>
+ * @license MIT License, http://www.opensource.org/licenses/MIT
+ */
+(function ( window, angular, undefined ) {
+/*jshint globalstrict:true*/
+'use strict';
+
+var isDefined = angular.isDefined,
+  isUndefined = angular.isUndefined,
+  isNumber = angular.isNumber,
+  isObject = angular.isObject,
+  isArray = angular.isArray,
+  extend = angular.extend,
+  toJson = angular.toJson;
+var angularLocalStorage = angular.module('LocalStorageModule', []);
+
+angularLocalStorage.provider('localStorageService', function() {
+
+  // You should set a prefix to avoid overwriting any local storage variables from the rest of your app
+  // e.g. localStorageServiceProvider.setPrefix('yourAppName');
+  // With provider you can use config as this:
+  // myApp.config(function (localStorageServiceProvider) {
+  //    localStorageServiceProvider.prefix = 'yourAppName';
+  // });
+  this.prefix = 'ls';
+
+  // You could change web storage type localstorage or sessionStorage
+  this.storageType = 'localStorage';
+
+  // Cookie options (usually in case of fallback)
+  // expiry = Number of days before cookies expire // 0 = Does not expire
+  // path = The web path the cookie represents
+  this.cookie = {
+    expiry: 30,
+    path: '/'
+  };
+
+  // Send signals for each of the following actions?
+  this.notify = {
+    setItem: true,
+    removeItem: false
+  };
+
+  // Setter for the prefix
+  this.setPrefix = function(prefix) {
+    this.prefix = prefix;
+    return this;
+  };
+
+   // Setter for the storageType
+   this.setStorageType = function(storageType) {
+     this.storageType = storageType;
+     return this;
+   };
+
+  // Setter for cookie config
+  this.setStorageCookie = function(exp, path) {
+    this.cookie.expiry = exp;
+    this.cookie.path = path;
+    return this;
+  };
+
+  // Setter for cookie domain
+  this.setStorageCookieDomain = function(domain) {
+    this.cookie.domain = domain;
+    return this;
+  };
+
+  // Setter for notification config
+  // itemSet & itemRemove should be booleans
+  this.setNotify = function(itemSet, itemRemove) {
+    this.notify = {
+      setItem: itemSet,
+      removeItem: itemRemove
+    };
+    return this;
+  };
+
+  this.$get = ['$rootScope', '$window', '$document', '$parse', function($rootScope, $window, $document, $parse) {
+    var self = this;
+    var prefix = self.prefix;
+    var cookie = self.cookie;
+    var notify = self.notify;
+    var storageType = self.storageType;
+    var webStorage;
+
+    // When Angular's $document is not available
+    if (!$document) {
+      $document = document;
+    } else if ($document[0]) {
+      $document = $document[0];
+    }
+
+    // If there is a prefix set in the config lets use that with an appended period for readability
+    if (prefix.substr(-1) !== '.') {
+      prefix = !!prefix ? prefix + '.' : '';
+    }
+    var deriveQualifiedKey = function(key) {
+      return prefix + key;
+    };
+    // Checks the browser to see if local storage is supported
+    var browserSupportsLocalStorage = (function () {
+      try {
+        var supported = (storageType in $window && $window[storageType] !== null);
+
+        // When Safari (OS X or iOS) is in private browsing mode, it appears as though localStorage
+        // is available, but trying to call .setItem throws an exception.
+        //
+        // "QUOTA_EXCEEDED_ERR: DOM Exception 22: An attempt was made to add something to storage
+        // that exceeded the quota."
+        var key = deriveQualifiedKey('__' + Math.round(Math.random() * 1e7));
+        if (supported) {
+          webStorage = $window[storageType];
+          webStorage.setItem(key, '');
+          webStorage.removeItem(key);
+        }
+
+        return supported;
+      } catch (e) {
+        storageType = 'cookie';
+        $rootScope.$broadcast('LocalStorageModule.notification.error', e.message);
+        return false;
+      }
+    }());
+
+    // Directly adds a value to local storage
+    // If local storage is not available in the browser use cookies
+    // Example use: localStorageService.add('library','angular');
+    var addToLocalStorage = function (key, value) {
+      // Let's convert undefined values to null to get the value consistent
+      if (isUndefined(value)) {
+        value = null;
+      } else {
+        value = toJson(value);
+      }
+
+      // If this browser does not support local storage use cookies
+      if (!browserSupportsLocalStorage || self.storageType === 'cookie') {
+        if (!browserSupportsLocalStorage) {
+            $rootScope.$broadcast('LocalStorageModule.notification.warning', 'LOCAL_STORAGE_NOT_SUPPORTED');
+        }
+
+        if (notify.setItem) {
+          $rootScope.$broadcast('LocalStorageModule.notification.setitem', {key: key, newvalue: value, storageType: 'cookie'});
+        }
+        return addToCookies(key, value);
+      }
+
+      try {
+        if (webStorage) {
+          webStorage.setItem(deriveQualifiedKey(key), value);
+        }
+        if (notify.setItem) {
+          $rootScope.$broadcast('LocalStorageModule.notification.setitem', {key: key, newvalue: value, storageType: self.storageType});
+        }
+      } catch (e) {
+        $rootScope.$broadcast('LocalStorageModule.notification.error', e.message);
+        return addToCookies(key, value);
+      }
+      return true;
+    };
+
+    // Directly get a value from local storage
+    // Example use: localStorageService.get('library'); // returns 'angular'
+    var getFromLocalStorage = function (key) {
+
+      if (!browserSupportsLocalStorage || self.storageType === 'cookie') {
+        if (!browserSupportsLocalStorage) {
+          $rootScope.$broadcast('LocalStorageModule.notification.warning','LOCAL_STORAGE_NOT_SUPPORTED');
+        }
+
+        return getFromCookies(key);
+      }
+
+      var item = webStorage ? webStorage.getItem(deriveQualifiedKey(key)) : null;
+      // angular.toJson will convert null to 'null', so a proper conversion is needed
+      // FIXME not a perfect solution, since a valid 'null' string can't be stored
+      if (!item || item === 'null') {
+        return null;
+      }
+
+      try {
+        return JSON.parse(item);
+      } catch (e) {
+        return item;
+      }
+    };
+
+    // Remove an item from local storage
+    // Example use: localStorageService.remove('library'); // removes the key/value pair of library='angular'
+    var removeFromLocalStorage = function () {
+      var i, key;
+      for (i=0; i<arguments.length; i++) {
+        key = arguments[i];
+        if (!browserSupportsLocalStorage || self.storageType === 'cookie') {
+          if (!browserSupportsLocalStorage) {
+            $rootScope.$broadcast('LocalStorageModule.notification.warning', 'LOCAL_STORAGE_NOT_SUPPORTED');
+          }
+
+          if (notify.removeItem) {
+            $rootScope.$broadcast('LocalStorageModule.notification.removeitem', {key: key, storageType: 'cookie'});
+          }
+          removeFromCookies(key);
+        }
+        else {
+          try {
+            webStorage.removeItem(deriveQualifiedKey(key));
+            if (notify.removeItem) {
+              $rootScope.$broadcast('LocalStorageModule.notification.removeitem', {
+                key: key,
+                storageType: self.storageType
+              });
+            }
+          } catch (e) {
+            $rootScope.$broadcast('LocalStorageModule.notification.error', e.message);
+            removeFromCookies(key);
+          }
+        }
+      }
+    };
+
+    // Return array of keys for local storage
+    // Example use: var keys = localStorageService.keys()
+    var getKeysForLocalStorage = function () {
+
+      if (!browserSupportsLocalStorage) {
+        $rootScope.$broadcast('LocalStorageModule.notification.warning', 'LOCAL_STORAGE_NOT_SUPPORTED');
+        return false;
+      }
+
+      var prefixLength = prefix.length;
+      var keys = [];
+      for (var key in webStorage) {
+        // Only return keys that are for this app
+        if (key.substr(0,prefixLength) === prefix) {
+          try {
+            keys.push(key.substr(prefixLength));
+          } catch (e) {
+            $rootScope.$broadcast('LocalStorageModule.notification.error', e.Description);
+            return [];
+          }
+        }
+      }
+      return keys;
+    };
+
+    // Remove all data for this app from local storage
+    // Also optionally takes a regular expression string and removes the matching key-value pairs
+    // Example use: localStorageService.clearAll();
+    // Should be used mostly for development purposes
+    var clearAllFromLocalStorage = function (regularExpression) {
+
+      // Setting both regular expressions independently
+      // Empty strings result in catchall RegExp
+      var prefixRegex = !!prefix ? new RegExp('^' + prefix) : new RegExp();
+      var testRegex = !!regularExpression ? new RegExp(regularExpression) : new RegExp();
+
+      if (!browserSupportsLocalStorage || self.storageType === 'cookie') {
+        if (!browserSupportsLocalStorage) {
+          $rootScope.$broadcast('LocalStorageModule.notification.warning', 'LOCAL_STORAGE_NOT_SUPPORTED');
+        }
+        return clearAllFromCookies();
+      }
+
+      var prefixLength = prefix.length;
+
+      for (var key in webStorage) {
+        // Only remove items that are for this app and match the regular expression
+        if (prefixRegex.test(key) && testRegex.test(key.substr(prefixLength))) {
+          try {
+            removeFromLocalStorage(key.substr(prefixLength));
+          } catch (e) {
+            $rootScope.$broadcast('LocalStorageModule.notification.error',e.message);
+            return clearAllFromCookies();
+          }
+        }
+      }
+      return true;
+    };
+
+    // Checks the browser to see if cookies are supported
+    var browserSupportsCookies = (function() {
+      try {
+        return $window.navigator.cookieEnabled ||
+          ("cookie" in $document && ($document.cookie.length > 0 ||
+          ($document.cookie = "test").indexOf.call($document.cookie, "test") > -1));
+      } catch (e) {
+          $rootScope.$broadcast('LocalStorageModule.notification.error', e.message);
+          return false;
+      }
+    }());
+
+    // Directly adds a value to cookies
+    // Typically used as a fallback is local storage is not available in the browser
+    // Example use: localStorageService.cookie.add('library','angular');
+    var addToCookies = function (key, value, daysToExpiry) {
+
+      if (isUndefined(value)) {
+        return false;
+      } else if(isArray(value) || isObject(value)) {
+        value = toJson(value);
+      }
+
+      if (!browserSupportsCookies) {
+        $rootScope.$broadcast('LocalStorageModule.notification.error', 'COOKIES_NOT_SUPPORTED');
+        return false;
+      }
+
+      try {
+        var expiry = '',
+            expiryDate = new Date(),
+            cookieDomain = '';
+
+        if (value === null) {
+          // Mark that the cookie has expired one day ago
+          expiryDate.setTime(expiryDate.getTime() + (-1 * 24 * 60 * 60 * 1000));
+          expiry = "; expires=" + expiryDate.toGMTString();
+          value = '';
+        } else if (isNumber(daysToExpiry) && daysToExpiry !== 0) {
+          expiryDate.setTime(expiryDate.getTime() + (daysToExpiry * 24 * 60 * 60 * 1000));
+          expiry = "; expires=" + expiryDate.toGMTString();
+        } else if (cookie.expiry !== 0) {
+          expiryDate.setTime(expiryDate.getTime() + (cookie.expiry * 24 * 60 * 60 * 1000));
+          expiry = "; expires=" + expiryDate.toGMTString();
+        }
+        if (!!key) {
+          var cookiePath = "; path=" + cookie.path;
+          if(cookie.domain){
+            cookieDomain = "; domain=" + cookie.domain;
+          }
+          $document.cookie = deriveQualifiedKey(key) + "=" + encodeURIComponent(value) + expiry + cookiePath + cookieDomain;
+        }
+      } catch (e) {
+        $rootScope.$broadcast('LocalStorageModule.notification.error',e.message);
+        return false;
+      }
+      return true;
+    };
+
+    // Directly get a value from a cookie
+    // Example use: localStorageService.cookie.get('library'); // returns 'angular'
+    var getFromCookies = function (key) {
+      if (!browserSupportsCookies) {
+        $rootScope.$broadcast('LocalStorageModule.notification.error', 'COOKIES_NOT_SUPPORTED');
+        return false;
+      }
+
+      var cookies = $document.cookie && $document.cookie.split(';') || [];
+      for(var i=0; i < cookies.length; i++) {
+        var thisCookie = cookies[i];
+        while (thisCookie.charAt(0) === ' ') {
+          thisCookie = thisCookie.substring(1,thisCookie.length);
+        }
+        if (thisCookie.indexOf(deriveQualifiedKey(key) + '=') === 0) {
+          var storedValues = decodeURIComponent(thisCookie.substring(prefix.length + key.length + 1, thisCookie.length));
+          try {
+            return JSON.parse(storedValues);
+          } catch(e) {
+            return storedValues;
+          }
+        }
+      }
+      return null;
+    };
+
+    var removeFromCookies = function (key) {
+      addToCookies(key,null);
+    };
+
+    var clearAllFromCookies = function () {
+      var thisCookie = null, thisKey = null;
+      var prefixLength = prefix.length;
+      var cookies = $document.cookie.split(';');
+      for(var i = 0; i < cookies.length; i++) {
+        thisCookie = cookies[i];
+
+        while (thisCookie.charAt(0) === ' ') {
+          thisCookie = thisCookie.substring(1, thisCookie.length);
+        }
+
+        var key = thisCookie.substring(prefixLength, thisCookie.indexOf('='));
+        removeFromCookies(key);
+      }
+    };
+
+    var getStorageType = function() {
+      return storageType;
+    };
+
+    // Add a listener on scope variable to save its changes to local storage
+    // Return a function which when called cancels binding
+    var bindToScope = function(scope, key, def, lsKey) {
+      lsKey = lsKey || key;
+      var value = getFromLocalStorage(lsKey);
+
+      if (value === null && isDefined(def)) {
+        value = def;
+      } else if (isObject(value) && isObject(def)) {
+        value = extend(def, value);
+      }
+
+      $parse(key).assign(scope, value);
+
+      return scope.$watch(key, function(newVal) {
+        addToLocalStorage(lsKey, newVal);
+      }, isObject(scope[key]));
+    };
+
+    // Return localStorageService.length
+    // ignore keys that not owned
+    var lengthOfLocalStorage = function() {
+      var count = 0;
+      var storage = $window[storageType];
+      for(var i = 0; i < storage.length; i++) {
+        if(storage.key(i).indexOf(prefix) === 0 ) {
+          count++;
+        }
+      }
+      return count;
+    };
+
+    return {
+      isSupported: browserSupportsLocalStorage,
+      getStorageType: getStorageType,
+      set: addToLocalStorage,
+      add: addToLocalStorage, //DEPRECATED
+      get: getFromLocalStorage,
+      keys: getKeysForLocalStorage,
+      remove: removeFromLocalStorage,
+      clearAll: clearAllFromLocalStorage,
+      bind: bindToScope,
+      deriveKey: deriveQualifiedKey,
+      length: lengthOfLocalStorage,
+      cookie: {
+        isSupported: browserSupportsCookies,
+        set: addToCookies,
+        add: addToCookies, //DEPRECATED
+        get: getFromCookies,
+        remove: removeFromCookies,
+        clearAll: clearAllFromCookies
+      }
+    };
+  }];
+});
+})( window, window.angular );
\ No newline at end of file
diff --git a/public/bower_components/angular-md5/angular-md5.js b/public/bower_components/angular-md5/angular-md5.js
new file mode 100644
index 0000000..7896bb4
--- /dev/null
+++ b/public/bower_components/angular-md5/angular-md5.js
@@ -0,0 +1,208 @@
+/*
+  angular-md5 - v0.1.8 
+  2015-11-17
+*/
+
+/* commonjs package manager support (eg componentjs) */
+if (typeof module !== "undefined" && typeof exports !== "undefined" && module.exports === exports) {
+  module.exports = "angular-md5";
+}
+(function(angular) {
+  angular.module("angular-md5", [ "gdi2290.md5" ]);
+  angular.module("ngMd5", [ "gdi2290.md5" ]);
+  angular.module("gdi2290.md5", [ "gdi2290.gravatar-filter", "gdi2290.md5-service", "gdi2290.md5-filter" ]);
+  "use strict";
+  angular.module("gdi2290.gravatar-filter", []).filter("gravatar", [ "md5", function(md5) {
+    var cache = {};
+    return function(text, defaultText) {
+      if (!cache[text]) {
+        defaultText = defaultText ? md5.createHash(defaultText.toString().toLowerCase()) : "";
+        cache[text] = text ? md5.createHash(text.toString().toLowerCase()) : defaultText;
+      }
+      return cache[text];
+    };
+  } ]);
+  "use strict";
+  angular.module("gdi2290.md5-filter", []).filter("md5", [ "md5", function(md5) {
+    return function(text) {
+      return text ? md5.createHash(text.toString().toLowerCase()) : text;
+    };
+  } ]);
+  "use strict";
+  angular.module("gdi2290.md5-service", []).factory("md5", [ function() {
+    var md5 = {
+      createHash: function(str) {
+        if (null === str) {
+          return null;
+        }
+        var xl;
+        var rotateLeft = function(lValue, iShiftBits) {
+          return lValue << iShiftBits | lValue >>> 32 - iShiftBits;
+        };
+        var addUnsigned = function(lX, lY) {
+          var lX4, lY4, lX8, lY8, lResult;
+          lX8 = lX & 2147483648;
+          lY8 = lY & 2147483648;
+          lX4 = lX & 1073741824;
+          lY4 = lY & 1073741824;
+          lResult = (lX & 1073741823) + (lY & 1073741823);
+          if (lX4 & lY4) {
+            return lResult ^ 2147483648 ^ lX8 ^ lY8;
+          }
+          if (lX4 | lY4) {
+            if (lResult & 1073741824) {
+              return lResult ^ 3221225472 ^ lX8 ^ lY8;
+            } else {
+              return lResult ^ 1073741824 ^ lX8 ^ lY8;
+            }
+          } else {
+            return lResult ^ lX8 ^ lY8;
+          }
+        };
+        var _F = function(x, y, z) {
+          return x & y | ~x & z;
+        };
+        var _G = function(x, y, z) {
+          return x & z | y & ~z;
+        };
+        var _H = function(x, y, z) {
+          return x ^ y ^ z;
+        };
+        var _I = function(x, y, z) {
+          return y ^ (x | ~z);
+        };
+        var _FF = function(a, b, c, d, x, s, ac) {
+          a = addUnsigned(a, addUnsigned(addUnsigned(_F(b, c, d), x), ac));
+          return addUnsigned(rotateLeft(a, s), b);
+        };
+        var _GG = function(a, b, c, d, x, s, ac) {
+          a = addUnsigned(a, addUnsigned(addUnsigned(_G(b, c, d), x), ac));
+          return addUnsigned(rotateLeft(a, s), b);
+        };
+        var _HH = function(a, b, c, d, x, s, ac) {
+          a = addUnsigned(a, addUnsigned(addUnsigned(_H(b, c, d), x), ac));
+          return addUnsigned(rotateLeft(a, s), b);
+        };
+        var _II = function(a, b, c, d, x, s, ac) {
+          a = addUnsigned(a, addUnsigned(addUnsigned(_I(b, c, d), x), ac));
+          return addUnsigned(rotateLeft(a, s), b);
+        };
+        var convertToWordArray = function(str) {
+          var lWordCount;
+          var lMessageLength = str.length;
+          var lNumberOfWords_temp1 = lMessageLength + 8;
+          var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - lNumberOfWords_temp1 % 64) / 64;
+          var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16;
+          var lWordArray = new Array(lNumberOfWords - 1);
+          var lBytePosition = 0;
+          var lByteCount = 0;
+          while (lByteCount < lMessageLength) {
+            lWordCount = (lByteCount - lByteCount % 4) / 4;
+            lBytePosition = lByteCount % 4 * 8;
+            lWordArray[lWordCount] = lWordArray[lWordCount] | str.charCodeAt(lByteCount) << lBytePosition;
+            lByteCount++;
+          }
+          lWordCount = (lByteCount - lByteCount % 4) / 4;
+          lBytePosition = lByteCount % 4 * 8;
+          lWordArray[lWordCount] = lWordArray[lWordCount] | 128 << lBytePosition;
+          lWordArray[lNumberOfWords - 2] = lMessageLength << 3;
+          lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29;
+          return lWordArray;
+        };
+        var wordToHex = function(lValue) {
+          var wordToHexValue = "", wordToHexValue_temp = "", lByte, lCount;
+          for (lCount = 0; lCount <= 3; lCount++) {
+            lByte = lValue >>> lCount * 8 & 255;
+            wordToHexValue_temp = "0" + lByte.toString(16);
+            wordToHexValue = wordToHexValue + wordToHexValue_temp.substr(wordToHexValue_temp.length - 2, 2);
+          }
+          return wordToHexValue;
+        };
+        var x = [], k, AA, BB, CC, DD, a, b, c, d, S11 = 7, S12 = 12, S13 = 17, S14 = 22, S21 = 5, S22 = 9, S23 = 14, S24 = 20, S31 = 4, S32 = 11, S33 = 16, S34 = 23, S41 = 6, S42 = 10, S43 = 15, S44 = 21;
+        x = convertToWordArray(str);
+        a = 1732584193;
+        b = 4023233417;
+        c = 2562383102;
+        d = 271733878;
+        xl = x.length;
+        for (k = 0; k < xl; k += 16) {
+          AA = a;
+          BB = b;
+          CC = c;
+          DD = d;
+          a = _FF(a, b, c, d, x[k + 0], S11, 3614090360);
+          d = _FF(d, a, b, c, x[k + 1], S12, 3905402710);
+          c = _FF(c, d, a, b, x[k + 2], S13, 606105819);
+          b = _FF(b, c, d, a, x[k + 3], S14, 3250441966);
+          a = _FF(a, b, c, d, x[k + 4], S11, 4118548399);
+          d = _FF(d, a, b, c, x[k + 5], S12, 1200080426);
+          c = _FF(c, d, a, b, x[k + 6], S13, 2821735955);
+          b = _FF(b, c, d, a, x[k + 7], S14, 4249261313);
+          a = _FF(a, b, c, d, x[k + 8], S11, 1770035416);
+          d = _FF(d, a, b, c, x[k + 9], S12, 2336552879);
+          c = _FF(c, d, a, b, x[k + 10], S13, 4294925233);
+          b = _FF(b, c, d, a, x[k + 11], S14, 2304563134);
+          a = _FF(a, b, c, d, x[k + 12], S11, 1804603682);
+          d = _FF(d, a, b, c, x[k + 13], S12, 4254626195);
+          c = _FF(c, d, a, b, x[k + 14], S13, 2792965006);
+          b = _FF(b, c, d, a, x[k + 15], S14, 1236535329);
+          a = _GG(a, b, c, d, x[k + 1], S21, 4129170786);
+          d = _GG(d, a, b, c, x[k + 6], S22, 3225465664);
+          c = _GG(c, d, a, b, x[k + 11], S23, 643717713);
+          b = _GG(b, c, d, a, x[k + 0], S24, 3921069994);
+          a = _GG(a, b, c, d, x[k + 5], S21, 3593408605);
+          d = _GG(d, a, b, c, x[k + 10], S22, 38016083);
+          c = _GG(c, d, a, b, x[k + 15], S23, 3634488961);
+          b = _GG(b, c, d, a, x[k + 4], S24, 3889429448);
+          a = _GG(a, b, c, d, x[k + 9], S21, 568446438);
+          d = _GG(d, a, b, c, x[k + 14], S22, 3275163606);
+          c = _GG(c, d, a, b, x[k + 3], S23, 4107603335);
+          b = _GG(b, c, d, a, x[k + 8], S24, 1163531501);
+          a = _GG(a, b, c, d, x[k + 13], S21, 2850285829);
+          d = _GG(d, a, b, c, x[k + 2], S22, 4243563512);
+          c = _GG(c, d, a, b, x[k + 7], S23, 1735328473);
+          b = _GG(b, c, d, a, x[k + 12], S24, 2368359562);
+          a = _HH(a, b, c, d, x[k + 5], S31, 4294588738);
+          d = _HH(d, a, b, c, x[k + 8], S32, 2272392833);
+          c = _HH(c, d, a, b, x[k + 11], S33, 1839030562);
+          b = _HH(b, c, d, a, x[k + 14], S34, 4259657740);
+          a = _HH(a, b, c, d, x[k + 1], S31, 2763975236);
+          d = _HH(d, a, b, c, x[k + 4], S32, 1272893353);
+          c = _HH(c, d, a, b, x[k + 7], S33, 4139469664);
+          b = _HH(b, c, d, a, x[k + 10], S34, 3200236656);
+          a = _HH(a, b, c, d, x[k + 13], S31, 681279174);
+          d = _HH(d, a, b, c, x[k + 0], S32, 3936430074);
+          c = _HH(c, d, a, b, x[k + 3], S33, 3572445317);
+          b = _HH(b, c, d, a, x[k + 6], S34, 76029189);
+          a = _HH(a, b, c, d, x[k + 9], S31, 3654602809);
+          d = _HH(d, a, b, c, x[k + 12], S32, 3873151461);
+          c = _HH(c, d, a, b, x[k + 15], S33, 530742520);
+          b = _HH(b, c, d, a, x[k + 2], S34, 3299628645);
+          a = _II(a, b, c, d, x[k + 0], S41, 4096336452);
+          d = _II(d, a, b, c, x[k + 7], S42, 1126891415);
+          c = _II(c, d, a, b, x[k + 14], S43, 2878612391);
+          b = _II(b, c, d, a, x[k + 5], S44, 4237533241);
+          a = _II(a, b, c, d, x[k + 12], S41, 1700485571);
+          d = _II(d, a, b, c, x[k + 3], S42, 2399980690);
+          c = _II(c, d, a, b, x[k + 10], S43, 4293915773);
+          b = _II(b, c, d, a, x[k + 1], S44, 2240044497);
+          a = _II(a, b, c, d, x[k + 8], S41, 1873313359);
+          d = _II(d, a, b, c, x[k + 15], S42, 4264355552);
+          c = _II(c, d, a, b, x[k + 6], S43, 2734768916);
+          b = _II(b, c, d, a, x[k + 13], S44, 1309151649);
+          a = _II(a, b, c, d, x[k + 4], S41, 4149444226);
+          d = _II(d, a, b, c, x[k + 11], S42, 3174756917);
+          c = _II(c, d, a, b, x[k + 2], S43, 718787259);
+          b = _II(b, c, d, a, x[k + 9], S44, 3951481745);
+          a = addUnsigned(a, AA);
+          b = addUnsigned(b, BB);
+          c = addUnsigned(c, CC);
+          d = addUnsigned(d, DD);
+        }
+        var temp = wordToHex(a) + wordToHex(b) + wordToHex(c) + wordToHex(d);
+        return temp.toLowerCase();
+      }
+    };
+    return md5;
+  } ]);
+})(angular);
\ No newline at end of file
diff --git a/public/bower_components/angular-mocks/angular-mocks.js b/public/bower_components/angular-mocks/angular-mocks.js
new file mode 100644
index 0000000..917d842
--- /dev/null
+++ b/public/bower_components/angular-mocks/angular-mocks.js
@@ -0,0 +1,2471 @@
+/**
+ * @license AngularJS v1.4.8
+ * (c) 2010-2015 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {
+
+'use strict';
+
+/**
+ * @ngdoc object
+ * @name angular.mock
+ * @description
+ *
+ * Namespace from 'angular-mocks.js' which contains testing related code.
+ */
+angular.mock = {};
+
+/**
+ * ! This is a private undocumented service !
+ *
+ * @name $browser
+ *
+ * @description
+ * This service is a mock implementation of {@link ng.$browser}. It provides fake
+ * implementation for commonly used browser apis that are hard to test, e.g. setTimeout, xhr,
+ * cookies, etc...
+ *
+ * The api of this service is the same as that of the real {@link ng.$browser $browser}, except
+ * that there are several helper methods available which can be used in tests.
+ */
+angular.mock.$BrowserProvider = function() {
+  this.$get = function() {
+    return new angular.mock.$Browser();
+  };
+};
+
+angular.mock.$Browser = function() {
+  var self = this;
+
+  this.isMock = true;
+  self.$$url = "http://server/";
+  self.$$lastUrl = self.$$url; // used by url polling fn
+  self.pollFns = [];
+
+  // TODO(vojta): remove this temporary api
+  self.$$completeOutstandingRequest = angular.noop;
+  self.$$incOutstandingRequestCount = angular.noop;
+
+
+  // register url polling fn
+
+  self.onUrlChange = function(listener) {
+    self.pollFns.push(
+      function() {
+        if (self.$$lastUrl !== self.$$url || self.$$state !== self.$$lastState) {
+          self.$$lastUrl = self.$$url;
+          self.$$lastState = self.$$state;
+          listener(self.$$url, self.$$state);
+        }
+      }
+    );
+
+    return listener;
+  };
+
+  self.$$applicationDestroyed = angular.noop;
+  self.$$checkUrlChange = angular.noop;
+
+  self.deferredFns = [];
+  self.deferredNextId = 0;
+
+  self.defer = function(fn, delay) {
+    delay = delay || 0;
+    self.deferredFns.push({time:(self.defer.now + delay), fn:fn, id: self.deferredNextId});
+    self.deferredFns.sort(function(a, b) { return a.time - b.time;});
+    return self.deferredNextId++;
+  };
+
+
+  /**
+   * @name $browser#defer.now
+   *
+   * @description
+   * Current milliseconds mock time.
+   */
+  self.defer.now = 0;
+
+
+  self.defer.cancel = function(deferId) {
+    var fnIndex;
+
+    angular.forEach(self.deferredFns, function(fn, index) {
+      if (fn.id === deferId) fnIndex = index;
+    });
+
+    if (angular.isDefined(fnIndex)) {
+      self.deferredFns.splice(fnIndex, 1);
+      return true;
+    }
+
+    return false;
+  };
+
+
+  /**
+   * @name $browser#defer.flush
+   *
+   * @description
+   * Flushes all pending requests and executes the defer callbacks.
+   *
+   * @param {number=} number of milliseconds to flush. See {@link #defer.now}
+   */
+  self.defer.flush = function(delay) {
+    if (angular.isDefined(delay)) {
+      self.defer.now += delay;
+    } else {
+      if (self.deferredFns.length) {
+        self.defer.now = self.deferredFns[self.deferredFns.length - 1].time;
+      } else {
+        throw new Error('No deferred tasks to be flushed');
+      }
+    }
+
+    while (self.deferredFns.length && self.deferredFns[0].time <= self.defer.now) {
+      self.deferredFns.shift().fn();
+    }
+  };
+
+  self.$$baseHref = '/';
+  self.baseHref = function() {
+    return this.$$baseHref;
+  };
+};
+angular.mock.$Browser.prototype = {
+
+/**
+  * @name $browser#poll
+  *
+  * @description
+  * run all fns in pollFns
+  */
+  poll: function poll() {
+    angular.forEach(this.pollFns, function(pollFn) {
+      pollFn();
+    });
+  },
+
+  url: function(url, replace, state) {
+    if (angular.isUndefined(state)) {
+      state = null;
+    }
+    if (url) {
+      this.$$url = url;
+      // Native pushState serializes & copies the object; simulate it.
+      this.$$state = angular.copy(state);
+      return this;
+    }
+
+    return this.$$url;
+  },
+
+  state: function() {
+    return this.$$state;
+  },
+
+  notifyWhenNoOutstandingRequests: function(fn) {
+    fn();
+  }
+};
+
+
+/**
+ * @ngdoc provider
+ * @name $exceptionHandlerProvider
+ *
+ * @description
+ * Configures the mock implementation of {@link ng.$exceptionHandler} to rethrow or to log errors
+ * passed to the `$exceptionHandler`.
+ */
+
+/**
+ * @ngdoc service
+ * @name $exceptionHandler
+ *
+ * @description
+ * Mock implementation of {@link ng.$exceptionHandler} that rethrows or logs errors passed
+ * to it. See {@link ngMock.$exceptionHandlerProvider $exceptionHandlerProvider} for configuration
+ * information.
+ *
+ *
+ * ```js
+ *   describe('$exceptionHandlerProvider', function() {
+ *
+ *     it('should capture log messages and exceptions', function() {
+ *
+ *       module(function($exceptionHandlerProvider) {
+ *         $exceptionHandlerProvider.mode('log');
+ *       });
+ *
+ *       inject(function($log, $exceptionHandler, $timeout) {
+ *         $timeout(function() { $log.log(1); });
+ *         $timeout(function() { $log.log(2); throw 'banana peel'; });
+ *         $timeout(function() { $log.log(3); });
+ *         expect($exceptionHandler.errors).toEqual([]);
+ *         expect($log.assertEmpty());
+ *         $timeout.flush();
+ *         expect($exceptionHandler.errors).toEqual(['banana peel']);
+ *         expect($log.log.logs).toEqual([[1], [2], [3]]);
+ *       });
+ *     });
+ *   });
+ * ```
+ */
+
+angular.mock.$ExceptionHandlerProvider = function() {
+  var handler;
+
+  /**
+   * @ngdoc method
+   * @name $exceptionHandlerProvider#mode
+   *
+   * @description
+   * Sets the logging mode.
+   *
+   * @param {string} mode Mode of operation, defaults to `rethrow`.
+   *
+   *   - `log`: Sometimes it is desirable to test that an error is thrown, for this case the `log`
+   *            mode stores an array of errors in `$exceptionHandler.errors`, to allow later
+   *            assertion of them. See {@link ngMock.$log#assertEmpty assertEmpty()} and
+   *            {@link ngMock.$log#reset reset()}
+   *   - `rethrow`: If any errors are passed to the handler in tests, it typically means that there
+   *                is a bug in the application or test, so this mock will make these tests fail.
+   *                For any implementations that expect exceptions to be thrown, the `rethrow` mode
+   *                will also maintain a log of thrown errors.
+   */
+  this.mode = function(mode) {
+
+    switch (mode) {
+      case 'log':
+      case 'rethrow':
+        var errors = [];
+        handler = function(e) {
+          if (arguments.length == 1) {
+            errors.push(e);
+          } else {
+            errors.push([].slice.call(arguments, 0));
+          }
+          if (mode === "rethrow") {
+            throw e;
+          }
+        };
+        handler.errors = errors;
+        break;
+      default:
+        throw new Error("Unknown mode '" + mode + "', only 'log'/'rethrow' modes are allowed!");
+    }
+  };
+
+  this.$get = function() {
+    return handler;
+  };
+
+  this.mode('rethrow');
+};
+
+
+/**
+ * @ngdoc service
+ * @name $log
+ *
+ * @description
+ * Mock implementation of {@link ng.$log} that gathers all logged messages in arrays
+ * (one array per logging level). These arrays are exposed as `logs` property of each of the
+ * level-specific log function, e.g. for level `error` the array is exposed as `$log.error.logs`.
+ *
+ */
+angular.mock.$LogProvider = function() {
+  var debug = true;
+
+  function concat(array1, array2, index) {
+    return array1.concat(Array.prototype.slice.call(array2, index));
+  }
+
+  this.debugEnabled = function(flag) {
+    if (angular.isDefined(flag)) {
+      debug = flag;
+      return this;
+    } else {
+      return debug;
+    }
+  };
+
+  this.$get = function() {
+    var $log = {
+      log: function() { $log.log.logs.push(concat([], arguments, 0)); },
+      warn: function() { $log.warn.logs.push(concat([], arguments, 0)); },
+      info: function() { $log.info.logs.push(concat([], arguments, 0)); },
+      error: function() { $log.error.logs.push(concat([], arguments, 0)); },
+      debug: function() {
+        if (debug) {
+          $log.debug.logs.push(concat([], arguments, 0));
+        }
+      }
+    };
+
+    /**
+     * @ngdoc method
+     * @name $log#reset
+     *
+     * @description
+     * Reset all of the logging arrays to empty.
+     */
+    $log.reset = function() {
+      /**
+       * @ngdoc property
+       * @name $log#log.logs
+       *
+       * @description
+       * Array of messages logged using {@link ng.$log#log `log()`}.
+       *
+       * @example
+       * ```js
+       * $log.log('Some Log');
+       * var first = $log.log.logs.unshift();
+       * ```
+       */
+      $log.log.logs = [];
+      /**
+       * @ngdoc property
+       * @name $log#info.logs
+       *
+       * @description
+       * Array of messages logged using {@link ng.$log#info `info()`}.
+       *
+       * @example
+       * ```js
+       * $log.info('Some Info');
+       * var first = $log.info.logs.unshift();
+       * ```
+       */
+      $log.info.logs = [];
+      /**
+       * @ngdoc property
+       * @name $log#warn.logs
+       *
+       * @description
+       * Array of messages logged using {@link ng.$log#warn `warn()`}.
+       *
+       * @example
+       * ```js
+       * $log.warn('Some Warning');
+       * var first = $log.warn.logs.unshift();
+       * ```
+       */
+      $log.warn.logs = [];
+      /**
+       * @ngdoc property
+       * @name $log#error.logs
+       *
+       * @description
+       * Array of messages logged using {@link ng.$log#error `error()`}.
+       *
+       * @example
+       * ```js
+       * $log.error('Some Error');
+       * var first = $log.error.logs.unshift();
+       * ```
+       */
+      $log.error.logs = [];
+        /**
+       * @ngdoc property
+       * @name $log#debug.logs
+       *
+       * @description
+       * Array of messages logged using {@link ng.$log#debug `debug()`}.
+       *
+       * @example
+       * ```js
+       * $log.debug('Some Error');
+       * var first = $log.debug.logs.unshift();
+       * ```
+       */
+      $log.debug.logs = [];
+    };
+
+    /**
+     * @ngdoc method
+     * @name $log#assertEmpty
+     *
+     * @description
+     * Assert that all of the logging methods have no logged messages. If any messages are present,
+     * an exception is thrown.
+     */
+    $log.assertEmpty = function() {
+      var errors = [];
+      angular.forEach(['error', 'warn', 'info', 'log', 'debug'], function(logLevel) {
+        angular.forEach($log[logLevel].logs, function(log) {
+          angular.forEach(log, function(logItem) {
+            errors.push('MOCK $log (' + logLevel + '): ' + String(logItem) + '\n' +
+                        (logItem.stack || ''));
+          });
+        });
+      });
+      if (errors.length) {
+        errors.unshift("Expected $log to be empty! Either a message was logged unexpectedly, or " +
+          "an expected log message was not checked and removed:");
+        errors.push('');
+        throw new Error(errors.join('\n---------\n'));
+      }
+    };
+
+    $log.reset();
+    return $log;
+  };
+};
+
+
+/**
+ * @ngdoc service
+ * @name $interval
+ *
+ * @description
+ * Mock implementation of the $interval service.
+ *
+ * Use {@link ngMock.$interval#flush `$interval.flush(millis)`} to
+ * move forward by `millis` milliseconds and trigger any functions scheduled to run in that
+ * time.
+ *
+ * @param {function()} fn A function that should be called repeatedly.
+ * @param {number} delay Number of milliseconds between each function call.
+ * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat
+ *   indefinitely.
+ * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
+ *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.
+ * @param {...*=} Pass additional parameters to the executed function.
+ * @returns {promise} A promise which will be notified on each iteration.
+ */
+angular.mock.$IntervalProvider = function() {
+  this.$get = ['$browser', '$rootScope', '$q', '$$q',
+       function($browser,   $rootScope,   $q,   $$q) {
+    var repeatFns = [],
+        nextRepeatId = 0,
+        now = 0;
+
+    var $interval = function(fn, delay, count, invokeApply) {
+      var hasParams = arguments.length > 4,
+          args = hasParams ? Array.prototype.slice.call(arguments, 4) : [],
+          iteration = 0,
+          skipApply = (angular.isDefined(invokeApply) && !invokeApply),
+          deferred = (skipApply ? $$q : $q).defer(),
+          promise = deferred.promise;
+
+      count = (angular.isDefined(count)) ? count : 0;
+      promise.then(null, null, (!hasParams) ? fn : function() {
+        fn.apply(null, args);
+      });
+
+      promise.$$intervalId = nextRepeatId;
+
+      function tick() {
+        deferred.notify(iteration++);
+
+        if (count > 0 && iteration >= count) {
+          var fnIndex;
+          deferred.resolve(iteration);
+
+          angular.forEach(repeatFns, function(fn, index) {
+            if (fn.id === promise.$$intervalId) fnIndex = index;
+          });
+
+          if (angular.isDefined(fnIndex)) {
+            repeatFns.splice(fnIndex, 1);
+          }
+        }
+
+        if (skipApply) {
+          $browser.defer.flush();
+        } else {
+          $rootScope.$apply();
+        }
+      }
+
+      repeatFns.push({
+        nextTime:(now + delay),
+        delay: delay,
+        fn: tick,
+        id: nextRepeatId,
+        deferred: deferred
+      });
+      repeatFns.sort(function(a, b) { return a.nextTime - b.nextTime;});
+
+      nextRepeatId++;
+      return promise;
+    };
+    /**
+     * @ngdoc method
+     * @name $interval#cancel
+     *
+     * @description
+     * Cancels a task associated with the `promise`.
+     *
+     * @param {promise} promise A promise from calling the `$interval` function.
+     * @returns {boolean} Returns `true` if the task was successfully cancelled.
+     */
+    $interval.cancel = function(promise) {
+      if (!promise) return false;
+      var fnIndex;
+
+      angular.forEach(repeatFns, function(fn, index) {
+        if (fn.id === promise.$$intervalId) fnIndex = index;
+      });
+
+      if (angular.isDefined(fnIndex)) {
+        repeatFns[fnIndex].deferred.reject('canceled');
+        repeatFns.splice(fnIndex, 1);
+        return true;
+      }
+
+      return false;
+    };
+
+    /**
+     * @ngdoc method
+     * @name $interval#flush
+     * @description
+     *
+     * Runs interval tasks scheduled to be run in the next `millis` milliseconds.
+     *
+     * @param {number=} millis maximum timeout amount to flush up until.
+     *
+     * @return {number} The amount of time moved forward.
+     */
+    $interval.flush = function(millis) {
+      now += millis;
+      while (repeatFns.length && repeatFns[0].nextTime <= now) {
+        var task = repeatFns[0];
+        task.fn();
+        task.nextTime += task.delay;
+        repeatFns.sort(function(a, b) { return a.nextTime - b.nextTime;});
+      }
+      return millis;
+    };
+
+    return $interval;
+  }];
+};
+
+
+/* jshint -W101 */
+/* The R_ISO8061_STR regex is never going to fit into the 100 char limit!
+ * This directive should go inside the anonymous function but a bug in JSHint means that it would
+ * not be enacted early enough to prevent the warning.
+ */
+var R_ISO8061_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?:\:?(\d\d)(?:\:?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/;
+
+function jsonStringToDate(string) {
+  var match;
+  if (match = string.match(R_ISO8061_STR)) {
+    var date = new Date(0),
+        tzHour = 0,
+        tzMin  = 0;
+    if (match[9]) {
+      tzHour = toInt(match[9] + match[10]);
+      tzMin = toInt(match[9] + match[11]);
+    }
+    date.setUTCFullYear(toInt(match[1]), toInt(match[2]) - 1, toInt(match[3]));
+    date.setUTCHours(toInt(match[4] || 0) - tzHour,
+                     toInt(match[5] || 0) - tzMin,
+                     toInt(match[6] || 0),
+                     toInt(match[7] || 0));
+    return date;
+  }
+  return string;
+}
+
+function toInt(str) {
+  return parseInt(str, 10);
+}
+
+function padNumber(num, digits, trim) {
+  var neg = '';
+  if (num < 0) {
+    neg =  '-';
+    num = -num;
+  }
+  num = '' + num;
+  while (num.length < digits) num = '0' + num;
+  if (trim) {
+    num = num.substr(num.length - digits);
+  }
+  return neg + num;
+}
+
+
+/**
+ * @ngdoc type
+ * @name angular.mock.TzDate
+ * @description
+ *
+ * *NOTE*: this is not an injectable instance, just a globally available mock class of `Date`.
+ *
+ * Mock of the Date type which has its timezone specified via constructor arg.
+ *
+ * The main purpose is to create Date-like instances with timezone fixed to the specified timezone
+ * offset, so that we can test code that depends on local timezone settings without dependency on
+ * the time zone settings of the machine where the code is running.
+ *
+ * @param {number} offset Offset of the *desired* timezone in hours (fractions will be honored)
+ * @param {(number|string)} timestamp Timestamp representing the desired time in *UTC*
+ *
+ * @example
+ * !!!! WARNING !!!!!
+ * This is not a complete Date object so only methods that were implemented can be called safely.
+ * To make matters worse, TzDate instances inherit stuff from Date via a prototype.
+ *
+ * We do our best to intercept calls to "unimplemented" methods, but since the list of methods is
+ * incomplete we might be missing some non-standard methods. This can result in errors like:
+ * "Date.prototype.foo called on incompatible Object".
+ *
+ * ```js
+ * var newYearInBratislava = new TzDate(-1, '2009-12-31T23:00:00Z');
+ * newYearInBratislava.getTimezoneOffset() => -60;
+ * newYearInBratislava.getFullYear() => 2010;
+ * newYearInBratislava.getMonth() => 0;
+ * newYearInBratislava.getDate() => 1;
+ * newYearInBratislava.getHours() => 0;
+ * newYearInBratislava.getMinutes() => 0;
+ * newYearInBratislava.getSeconds() => 0;
+ * ```
+ *
+ */
+angular.mock.TzDate = function(offset, timestamp) {
+  var self = new Date(0);
+  if (angular.isString(timestamp)) {
+    var tsStr = timestamp;
+
+    self.origDate = jsonStringToDate(timestamp);
+
+    timestamp = self.origDate.getTime();
+    if (isNaN(timestamp)) {
+      throw {
+        name: "Illegal Argument",
+        message: "Arg '" + tsStr + "' passed into TzDate constructor is not a valid date string"
+      };
+    }
+  } else {
+    self.origDate = new Date(timestamp);
+  }
+
+  var localOffset = new Date(timestamp).getTimezoneOffset();
+  self.offsetDiff = localOffset * 60 * 1000 - offset * 1000 * 60 * 60;
+  self.date = new Date(timestamp + self.offsetDiff);
+
+  self.getTime = function() {
+    return self.date.getTime() - self.offsetDiff;
+  };
+
+  self.toLocaleDateString = function() {
+    return self.date.toLocaleDateString();
+  };
+
+  self.getFullYear = function() {
+    return self.date.getFullYear();
+  };
+
+  self.getMonth = function() {
+    return self.date.getMonth();
+  };
+
+  self.getDate = function() {
+    return self.date.getDate();
+  };
+
+  self.getHours = function() {
+    return self.date.getHours();
+  };
+
+  self.getMinutes = function() {
+    return self.date.getMinutes();
+  };
+
+  self.getSeconds = function() {
+    return self.date.getSeconds();
+  };
+
+  self.getMilliseconds = function() {
+    return self.date.getMilliseconds();
+  };
+
+  self.getTimezoneOffset = function() {
+    return offset * 60;
+  };
+
+  self.getUTCFullYear = function() {
+    return self.origDate.getUTCFullYear();
+  };
+
+  self.getUTCMonth = function() {
+    return self.origDate.getUTCMonth();
+  };
+
+  self.getUTCDate = function() {
+    return self.origDate.getUTCDate();
+  };
+
+  self.getUTCHours = function() {
+    return self.origDate.getUTCHours();
+  };
+
+  self.getUTCMinutes = function() {
+    return self.origDate.getUTCMinutes();
+  };
+
+  self.getUTCSeconds = function() {
+    return self.origDate.getUTCSeconds();
+  };
+
+  self.getUTCMilliseconds = function() {
+    return self.origDate.getUTCMilliseconds();
+  };
+
+  self.getDay = function() {
+    return self.date.getDay();
+  };
+
+  // provide this method only on browsers that already have it
+  if (self.toISOString) {
+    self.toISOString = function() {
+      return padNumber(self.origDate.getUTCFullYear(), 4) + '-' +
+            padNumber(self.origDate.getUTCMonth() + 1, 2) + '-' +
+            padNumber(self.origDate.getUTCDate(), 2) + 'T' +
+            padNumber(self.origDate.getUTCHours(), 2) + ':' +
+            padNumber(self.origDate.getUTCMinutes(), 2) + ':' +
+            padNumber(self.origDate.getUTCSeconds(), 2) + '.' +
+            padNumber(self.origDate.getUTCMilliseconds(), 3) + 'Z';
+    };
+  }
+
+  //hide all methods not implemented in this mock that the Date prototype exposes
+  var unimplementedMethods = ['getUTCDay',
+      'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds',
+      'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear',
+      'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds',
+      'setYear', 'toDateString', 'toGMTString', 'toJSON', 'toLocaleFormat', 'toLocaleString',
+      'toLocaleTimeString', 'toSource', 'toString', 'toTimeString', 'toUTCString', 'valueOf'];
+
+  angular.forEach(unimplementedMethods, function(methodName) {
+    self[methodName] = function() {
+      throw new Error("Method '" + methodName + "' is not implemented in the TzDate mock");
+    };
+  });
+
+  return self;
+};
+
+//make "tzDateInstance instanceof Date" return true
+angular.mock.TzDate.prototype = Date.prototype;
+/* jshint +W101 */
+
+angular.mock.animate = angular.module('ngAnimateMock', ['ng'])
+
+  .config(['$provide', function($provide) {
+
+    $provide.factory('$$forceReflow', function() {
+      function reflowFn() {
+        reflowFn.totalReflows++;
+      }
+      reflowFn.totalReflows = 0;
+      return reflowFn;
+    });
+
+    $provide.factory('$$animateAsyncRun', function() {
+      var queue = [];
+      var queueFn = function() {
+        return function(fn) {
+          queue.push(fn);
+        };
+      };
+      queueFn.flush = function() {
+        if (queue.length === 0) return false;
+
+        for (var i = 0; i < queue.length; i++) {
+          queue[i]();
+        }
+        queue = [];
+
+        return true;
+      };
+      return queueFn;
+    });
+
+    $provide.decorator('$animate', ['$delegate', '$timeout', '$browser', '$$rAF',
+                                    '$$forceReflow', '$$animateAsyncRun', '$rootScope',
+                            function($delegate,   $timeout,   $browser,   $$rAF,
+                                     $$forceReflow,   $$animateAsyncRun,  $rootScope) {
+      var animate = {
+        queue: [],
+        cancel: $delegate.cancel,
+        on: $delegate.on,
+        off: $delegate.off,
+        pin: $delegate.pin,
+        get reflows() {
+          return $$forceReflow.totalReflows;
+        },
+        enabled: $delegate.enabled,
+        flush: function() {
+          $rootScope.$digest();
+
+          var doNextRun, somethingFlushed = false;
+          do {
+            doNextRun = false;
+
+            if ($$rAF.queue.length) {
+              $$rAF.flush();
+              doNextRun = somethingFlushed = true;
+            }
+
+            if ($$animateAsyncRun.flush()) {
+              doNextRun = somethingFlushed = true;
+            }
+          } while (doNextRun);
+
+          if (!somethingFlushed) {
+            throw new Error('No pending animations ready to be closed or flushed');
+          }
+
+          $rootScope.$digest();
+        }
+      };
+
+      angular.forEach(
+        ['animate','enter','leave','move','addClass','removeClass','setClass'], function(method) {
+        animate[method] = function() {
+          animate.queue.push({
+            event: method,
+            element: arguments[0],
+            options: arguments[arguments.length - 1],
+            args: arguments
+          });
+          return $delegate[method].apply($delegate, arguments);
+        };
+      });
+
+      return animate;
+    }]);
+
+  }]);
+
+
+/**
+ * @ngdoc function
+ * @name angular.mock.dump
+ * @description
+ *
+ * *NOTE*: this is not an injectable instance, just a globally available function.
+ *
+ * Method for serializing common angular objects (scope, elements, etc..) into strings, useful for
+ * debugging.
+ *
+ * This method is also available on window, where it can be used to display objects on debug
+ * console.
+ *
+ * @param {*} object - any object to turn into string.
+ * @return {string} a serialized string of the argument
+ */
+angular.mock.dump = function(object) {
+  return serialize(object);
+
+  function serialize(object) {
+    var out;
+
+    if (angular.isElement(object)) {
+      object = angular.element(object);
+      out = angular.element('<div></div>');
+      angular.forEach(object, function(element) {
+        out.append(angular.element(element).clone());
+      });
+      out = out.html();
+    } else if (angular.isArray(object)) {
+      out = [];
+      angular.forEach(object, function(o) {
+        out.push(serialize(o));
+      });
+      out = '[ ' + out.join(', ') + ' ]';
+    } else if (angular.isObject(object)) {
+      if (angular.isFunction(object.$eval) && angular.isFunction(object.$apply)) {
+        out = serializeScope(object);
+      } else if (object instanceof Error) {
+        out = object.stack || ('' + object.name + ': ' + object.message);
+      } else {
+        // TODO(i): this prevents methods being logged,
+        // we should have a better way to serialize objects
+        out = angular.toJson(object, true);
+      }
+    } else {
+      out = String(object);
+    }
+
+    return out;
+  }
+
+  function serializeScope(scope, offset) {
+    offset = offset ||  '  ';
+    var log = [offset + 'Scope(' + scope.$id + '): {'];
+    for (var key in scope) {
+      if (Object.prototype.hasOwnProperty.call(scope, key) && !key.match(/^(\$|this)/)) {
+        log.push('  ' + key + ': ' + angular.toJson(scope[key]));
+      }
+    }
+    var child = scope.$$childHead;
+    while (child) {
+      log.push(serializeScope(child, offset + '  '));
+      child = child.$$nextSibling;
+    }
+    log.push('}');
+    return log.join('\n' + offset);
+  }
+};
+
+/**
+ * @ngdoc service
+ * @name $httpBackend
+ * @description
+ * Fake HTTP backend implementation suitable for unit testing applications that use the
+ * {@link ng.$http $http service}.
+ *
+ * *Note*: For fake HTTP backend implementation suitable for end-to-end testing or backend-less
+ * development please see {@link ngMockE2E.$httpBackend e2e $httpBackend mock}.
+ *
+ * During unit testing, we want our unit tests to run quickly and have no external dependencies so
+ * we don’t want to send [XHR](https://developer.mozilla.org/en/xmlhttprequest) or
+ * [JSONP](http://en.wikipedia.org/wiki/JSONP) requests to a real server. All we really need is
+ * to verify whether a certain request has been sent or not, or alternatively just let the
+ * application make requests, respond with pre-trained responses and assert that the end result is
+ * what we expect it to be.
+ *
+ * This mock implementation can be used to respond with static or dynamic responses via the
+ * `expect` and `when` apis and their shortcuts (`expectGET`, `whenPOST`, etc).
+ *
+ * When an Angular application needs some data from a server, it calls the $http service, which
+ * sends the request to a real server using $httpBackend service. With dependency injection, it is
+ * easy to inject $httpBackend mock (which has the same API as $httpBackend) and use it to verify
+ * the requests and respond with some testing data without sending a request to a real server.
+ *
+ * There are two ways to specify what test data should be returned as http responses by the mock
+ * backend when the code under test makes http requests:
+ *
+ * - `$httpBackend.expect` - specifies a request expectation
+ * - `$httpBackend.when` - specifies a backend definition
+ *
+ *
+ * # Request Expectations vs Backend Definitions
+ *
+ * Request expectations provide a way to make assertions about requests made by the application and
+ * to define responses for those requests. The test will fail if the expected requests are not made
+ * or they are made in the wrong order.
+ *
+ * Backend definitions allow you to define a fake backend for your application which doesn't assert
+ * if a particular request was made or not, it just returns a trained response if a request is made.
+ * The test will pass whether or not the request gets made during testing.
+ *
+ *
+ * <table class="table">
+ *   <tr><th width="220px"></th><th>Request expectations</th><th>Backend definitions</th></tr>
+ *   <tr>
+ *     <th>Syntax</th>
+ *     <td>.expect(...).respond(...)</td>
+ *     <td>.when(...).respond(...)</td>
+ *   </tr>
+ *   <tr>
+ *     <th>Typical usage</th>
+ *     <td>strict unit tests</td>
+ *     <td>loose (black-box) unit testing</td>
+ *   </tr>
+ *   <tr>
+ *     <th>Fulfills multiple requests</th>
+ *     <td>NO</td>
+ *     <td>YES</td>
+ *   </tr>
+ *   <tr>
+ *     <th>Order of requests matters</th>
+ *     <td>YES</td>
+ *     <td>NO</td>
+ *   </tr>
+ *   <tr>
+ *     <th>Request required</th>
+ *     <td>YES</td>
+ *     <td>NO</td>
+ *   </tr>
+ *   <tr>
+ *     <th>Response required</th>
+ *     <td>optional (see below)</td>
+ *     <td>YES</td>
+ *   </tr>
+ * </table>
+ *
+ * In cases where both backend definitions and request expectations are specified during unit
+ * testing, the request expectations are evaluated first.
+ *
+ * If a request expectation has no response specified, the algorithm will search your backend
+ * definitions for an appropriate response.
+ *
+ * If a request didn't match any expectation or if the expectation doesn't have the response
+ * defined, the backend definitions are evaluated in sequential order to see if any of them match
+ * the request. The response from the first matched definition is returned.
+ *
+ *
+ * # Flushing HTTP requests
+ *
+ * The $httpBackend used in production always responds to requests asynchronously. If we preserved
+ * this behavior in unit testing, we'd have to create async unit tests, which are hard to write,
+ * to follow and to maintain. But neither can the testing mock respond synchronously; that would
+ * change the execution of the code under test. For this reason, the mock $httpBackend has a
+ * `flush()` method, which allows the test to explicitly flush pending requests. This preserves
+ * the async api of the backend, while allowing the test to execute synchronously.
+ *
+ *
+ * # Unit testing with mock $httpBackend
+ * The following code shows how to setup and use the mock backend when unit testing a controller.
+ * First we create the controller under test:
+ *
+  ```js
+  // The module code
+  angular
+    .module('MyApp', [])
+    .controller('MyController', MyController);
+
+  // The controller code
+  function MyController($scope, $http) {
+    var authToken;
+
+    $http.get('/auth.py').success(function(data, status, headers) {
+      authToken = headers('A-Token');
+      $scope.user = data;
+    });
+
+    $scope.saveMessage = function(message) {
+      var headers = { 'Authorization': authToken };
+      $scope.status = 'Saving...';
+
+      $http.post('/add-msg.py', message, { headers: headers } ).success(function(response) {
+        $scope.status = '';
+      }).error(function() {
+        $scope.status = 'Failed...';
+      });
+    };
+  }
+  ```
+ *
+ * Now we setup the mock backend and create the test specs:
+ *
+  ```js
+    // testing controller
+    describe('MyController', function() {
+       var $httpBackend, $rootScope, createController, authRequestHandler;
+
+       // Set up the module
+       beforeEach(module('MyApp'));
+
+       beforeEach(inject(function($injector) {
+         // Set up the mock http service responses
+         $httpBackend = $injector.get('$httpBackend');
+         // backend definition common for all tests
+         authRequestHandler = $httpBackend.when('GET', '/auth.py')
+                                .respond({userId: 'userX'}, {'A-Token': 'xxx'});
+
+         // Get hold of a scope (i.e. the root scope)
+         $rootScope = $injector.get('$rootScope');
+         // The $controller service is used to create instances of controllers
+         var $controller = $injector.get('$controller');
+
+         createController = function() {
+           return $controller('MyController', {'$scope' : $rootScope });
+         };
+       }));
+
+
+       afterEach(function() {
+         $httpBackend.verifyNoOutstandingExpectation();
+         $httpBackend.verifyNoOutstandingRequest();
+       });
+
+
+       it('should fetch authentication token', function() {
+         $httpBackend.expectGET('/auth.py');
+         var controller = createController();
+         $httpBackend.flush();
+       });
+
+
+       it('should fail authentication', function() {
+
+         // Notice how you can change the response even after it was set
+         authRequestHandler.respond(401, '');
+
+         $httpBackend.expectGET('/auth.py');
+         var controller = createController();
+         $httpBackend.flush();
+         expect($rootScope.status).toBe('Failed...');
+       });
+
+
+       it('should send msg to server', function() {
+         var controller = createController();
+         $httpBackend.flush();
+
+         // now you don’t care about the authentication, but
+         // the controller will still send the request and
+         // $httpBackend will respond without you having to
+         // specify the expectation and response for this request
+
+         $httpBackend.expectPOST('/add-msg.py', 'message content').respond(201, '');
+         $rootScope.saveMessage('message content');
+         expect($rootScope.status).toBe('Saving...');
+         $httpBackend.flush();
+         expect($rootScope.status).toBe('');
+       });
+
+
+       it('should send auth header', function() {
+         var controller = createController();
+         $httpBackend.flush();
+
+         $httpBackend.expectPOST('/add-msg.py', undefined, function(headers) {
+           // check if the header was sent, if it wasn't the expectation won't
+           // match the request and the test will fail
+           return headers['Authorization'] == 'xxx';
+         }).respond(201, '');
+
+         $rootScope.saveMessage('whatever');
+         $httpBackend.flush();
+       });
+    });
+   ```
+ */
+angular.mock.$HttpBackendProvider = function() {
+  this.$get = ['$rootScope', '$timeout', createHttpBackendMock];
+};
+
+/**
+ * General factory function for $httpBackend mock.
+ * Returns instance for unit testing (when no arguments specified):
+ *   - passing through is disabled
+ *   - auto flushing is disabled
+ *
+ * Returns instance for e2e testing (when `$delegate` and `$browser` specified):
+ *   - passing through (delegating request to real backend) is enabled
+ *   - auto flushing is enabled
+ *
+ * @param {Object=} $delegate Real $httpBackend instance (allow passing through if specified)
+ * @param {Object=} $browser Auto-flushing enabled if specified
+ * @return {Object} Instance of $httpBackend mock
+ */
+function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) {
+  var definitions = [],
+      expectations = [],
+      responses = [],
+      responsesPush = angular.bind(responses, responses.push),
+      copy = angular.copy;
+
+  function createResponse(status, data, headers, statusText) {
+    if (angular.isFunction(status)) return status;
+
+    return function() {
+      return angular.isNumber(status)
+          ? [status, data, headers, statusText]
+          : [200, status, data, headers];
+    };
+  }
+
+  // TODO(vojta): change params to: method, url, data, headers, callback
+  function $httpBackend(method, url, data, callback, headers, timeout, withCredentials) {
+    var xhr = new MockXhr(),
+        expectation = expectations[0],
+        wasExpected = false;
+
+    function prettyPrint(data) {
+      return (angular.isString(data) || angular.isFunction(data) || data instanceof RegExp)
+          ? data
+          : angular.toJson(data);
+    }
+
+    function wrapResponse(wrapped) {
+      if (!$browser && timeout) {
+        timeout.then ? timeout.then(handleTimeout) : $timeout(handleTimeout, timeout);
+      }
+
+      return handleResponse;
+
+      function handleResponse() {
+        var response = wrapped.response(method, url, data, headers);
+        xhr.$$respHeaders = response[2];
+        callback(copy(response[0]), copy(response[1]), xhr.getAllResponseHeaders(),
+                 copy(response[3] || ''));
+      }
+
+      function handleTimeout() {
+        for (var i = 0, ii = responses.length; i < ii; i++) {
+          if (responses[i] === handleResponse) {
+            responses.splice(i, 1);
+            callback(-1, undefined, '');
+            break;
+          }
+        }
+      }
+    }
+
+    if (expectation && expectation.match(method, url)) {
+      if (!expectation.matchData(data)) {
+        throw new Error('Expected ' + expectation + ' with different data\n' +
+            'EXPECTED: ' + prettyPrint(expectation.data) + '\nGOT:      ' + data);
+      }
+
+      if (!expectation.matchHeaders(headers)) {
+        throw new Error('Expected ' + expectation + ' with different headers\n' +
+                        'EXPECTED: ' + prettyPrint(expectation.headers) + '\nGOT:      ' +
+                        prettyPrint(headers));
+      }
+
+      expectations.shift();
+
+      if (expectation.response) {
+        responses.push(wrapResponse(expectation));
+        return;
+      }
+      wasExpected = true;
+    }
+
+    var i = -1, definition;
+    while ((definition = definitions[++i])) {
+      if (definition.match(method, url, data, headers || {})) {
+        if (definition.response) {
+          // if $browser specified, we do auto flush all requests
+          ($browser ? $browser.defer : responsesPush)(wrapResponse(definition));
+        } else if (definition.passThrough) {
+          $delegate(method, url, data, callback, headers, timeout, withCredentials);
+        } else throw new Error('No response defined !');
+        return;
+      }
+    }
+    throw wasExpected ?
+        new Error('No response defined !') :
+        new Error('Unexpected request: ' + method + ' ' + url + '\n' +
+                  (expectation ? 'Expected ' + expectation : 'No more request expected'));
+  }
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#when
+   * @description
+   * Creates a new backend definition.
+   *
+   * @param {string} method HTTP method.
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
+   *   data string and returns true if the data is as expected.
+   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
+   *   object and returns true if the headers match the current definition.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   *   request is handled. You can save this object for later use and invoke `respond` again in
+   *   order to change how a matched request is handled.
+   *
+   *  - respond –
+   *      `{function([status,] data[, headers, statusText])
+   *      | function(function(method, url, data, headers)}`
+   *    – The respond method takes a set of static data to be returned or a function that can
+   *    return an array containing response status (number), response data (string), response
+   *    headers (Object), and the text for the status (string). The respond method returns the
+   *    `requestHandler` object for possible overrides.
+   */
+  $httpBackend.when = function(method, url, data, headers) {
+    var definition = new MockHttpExpectation(method, url, data, headers),
+        chain = {
+          respond: function(status, data, headers, statusText) {
+            definition.passThrough = undefined;
+            definition.response = createResponse(status, data, headers, statusText);
+            return chain;
+          }
+        };
+
+    if ($browser) {
+      chain.passThrough = function() {
+        definition.response = undefined;
+        definition.passThrough = true;
+        return chain;
+      };
+    }
+
+    definitions.push(definition);
+    return chain;
+  };
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#whenGET
+   * @description
+   * Creates a new backend definition for GET requests. For more info see `when()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(Object|function(Object))=} headers HTTP headers.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   * request is handled. You can save this object for later use and invoke `respond` again in
+   * order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#whenHEAD
+   * @description
+   * Creates a new backend definition for HEAD requests. For more info see `when()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(Object|function(Object))=} headers HTTP headers.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   * request is handled. You can save this object for later use and invoke `respond` again in
+   * order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#whenDELETE
+   * @description
+   * Creates a new backend definition for DELETE requests. For more info see `when()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(Object|function(Object))=} headers HTTP headers.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   * request is handled. You can save this object for later use and invoke `respond` again in
+   * order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#whenPOST
+   * @description
+   * Creates a new backend definition for POST requests. For more info see `when()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
+   *   data string and returns true if the data is as expected.
+   * @param {(Object|function(Object))=} headers HTTP headers.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   * request is handled. You can save this object for later use and invoke `respond` again in
+   * order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#whenPUT
+   * @description
+   * Creates a new backend definition for PUT requests.  For more info see `when()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives
+   *   data string and returns true if the data is as expected.
+   * @param {(Object|function(Object))=} headers HTTP headers.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   * request is handled. You can save this object for later use and invoke `respond` again in
+   * order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#whenJSONP
+   * @description
+   * Creates a new backend definition for JSONP requests. For more info see `when()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   * request is handled. You can save this object for later use and invoke `respond` again in
+   * order to change how a matched request is handled.
+   */
+  createShortMethods('when');
+
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#expect
+   * @description
+   * Creates a new request expectation.
+   *
+   * @param {string} method HTTP method.
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
+   *  receives data string and returns true if the data is as expected, or Object if request body
+   *  is in JSON format.
+   * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
+   *   object and returns true if the headers match the current expectation.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   *  request is handled. You can save this object for later use and invoke `respond` again in
+   *  order to change how a matched request is handled.
+   *
+   *  - respond –
+   *    `{function([status,] data[, headers, statusText])
+   *    | function(function(method, url, data, headers)}`
+   *    – The respond method takes a set of static data to be returned or a function that can
+   *    return an array containing response status (number), response data (string), response
+   *    headers (Object), and the text for the status (string). The respond method returns the
+   *    `requestHandler` object for possible overrides.
+   */
+  $httpBackend.expect = function(method, url, data, headers) {
+    var expectation = new MockHttpExpectation(method, url, data, headers),
+        chain = {
+          respond: function(status, data, headers, statusText) {
+            expectation.response = createResponse(status, data, headers, statusText);
+            return chain;
+          }
+        };
+
+    expectations.push(expectation);
+    return chain;
+  };
+
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#expectGET
+   * @description
+   * Creates a new request expectation for GET requests. For more info see `expect()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {Object=} headers HTTP headers.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   * request is handled. You can save this object for later use and invoke `respond` again in
+   * order to change how a matched request is handled. See #expect for more info.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#expectHEAD
+   * @description
+   * Creates a new request expectation for HEAD requests. For more info see `expect()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {Object=} headers HTTP headers.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   *   request is handled. You can save this object for later use and invoke `respond` again in
+   *   order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#expectDELETE
+   * @description
+   * Creates a new request expectation for DELETE requests. For more info see `expect()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {Object=} headers HTTP headers.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   *   request is handled. You can save this object for later use and invoke `respond` again in
+   *   order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#expectPOST
+   * @description
+   * Creates a new request expectation for POST requests. For more info see `expect()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
+   *  receives data string and returns true if the data is as expected, or Object if request body
+   *  is in JSON format.
+   * @param {Object=} headers HTTP headers.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   *   request is handled. You can save this object for later use and invoke `respond` again in
+   *   order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#expectPUT
+   * @description
+   * Creates a new request expectation for PUT requests. For more info see `expect()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
+   *  receives data string and returns true if the data is as expected, or Object if request body
+   *  is in JSON format.
+   * @param {Object=} headers HTTP headers.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   *   request is handled. You can save this object for later use and invoke `respond` again in
+   *   order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#expectPATCH
+   * @description
+   * Creates a new request expectation for PATCH requests. For more info see `expect()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+   *   and returns true if the url matches the current definition.
+   * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that
+   *  receives data string and returns true if the data is as expected, or Object if request body
+   *  is in JSON format.
+   * @param {Object=} headers HTTP headers.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   *   request is handled. You can save this object for later use and invoke `respond` again in
+   *   order to change how a matched request is handled.
+   */
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#expectJSONP
+   * @description
+   * Creates a new request expectation for JSONP requests. For more info see `expect()`.
+   *
+   * @param {string|RegExp|function(string)} url HTTP url or function that receives an url
+   *   and returns true if the url matches the current definition.
+   * @returns {requestHandler} Returns an object with `respond` method that controls how a matched
+   *   request is handled. You can save this object for later use and invoke `respond` again in
+   *   order to change how a matched request is handled.
+   */
+  createShortMethods('expect');
+
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#flush
+   * @description
+   * Flushes all pending requests using the trained responses.
+   *
+   * @param {number=} count Number of responses to flush (in the order they arrived). If undefined,
+   *   all pending requests will be flushed. If there are no pending requests when the flush method
+   *   is called an exception is thrown (as this typically a sign of programming error).
+   */
+  $httpBackend.flush = function(count, digest) {
+    if (digest !== false) $rootScope.$digest();
+    if (!responses.length) throw new Error('No pending request to flush !');
+
+    if (angular.isDefined(count) && count !== null) {
+      while (count--) {
+        if (!responses.length) throw new Error('No more pending request to flush !');
+        responses.shift()();
+      }
+    } else {
+      while (responses.length) {
+        responses.shift()();
+      }
+    }
+    $httpBackend.verifyNoOutstandingExpectation(digest);
+  };
+
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#verifyNoOutstandingExpectation
+   * @description
+   * Verifies that all of the requests defined via the `expect` api were made. If any of the
+   * requests were not made, verifyNoOutstandingExpectation throws an exception.
+   *
+   * Typically, you would call this method following each test case that asserts requests using an
+   * "afterEach" clause.
+   *
+   * ```js
+   *   afterEach($httpBackend.verifyNoOutstandingExpectation);
+   * ```
+   */
+  $httpBackend.verifyNoOutstandingExpectation = function(digest) {
+    if (digest !== false) $rootScope.$digest();
+    if (expectations.length) {
+      throw new Error('Unsatisfied requests: ' + expectations.join(', '));
+    }
+  };
+
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#verifyNoOutstandingRequest
+   * @description
+   * Verifies that there are no outstanding requests that need to be flushed.
+   *
+   * Typically, you would call this method following each test case that asserts requests using an
+   * "afterEach" clause.
+   *
+   * ```js
+   *   afterEach($httpBackend.verifyNoOutstandingRequest);
+   * ```
+   */
+  $httpBackend.verifyNoOutstandingRequest = function() {
+    if (responses.length) {
+      throw new Error('Unflushed requests: ' + responses.length);
+    }
+  };
+
+
+  /**
+   * @ngdoc method
+   * @name $httpBackend#resetExpectations
+   * @description
+   * Resets all request expectations, but preserves all backend definitions. Typically, you would
+   * call resetExpectations during a multiple-phase test when you want to reuse the same instance of
+   * $httpBackend mock.
+   */
+  $httpBackend.resetExpectations = function() {
+    expectations.length = 0;
+    responses.length = 0;
+  };
+
+  return $httpBackend;
+
+
+  function createShortMethods(prefix) {
+    angular.forEach(['GET', 'DELETE', 'JSONP', 'HEAD'], function(method) {
+     $httpBackend[prefix + method] = function(url, headers) {
+       return $httpBackend[prefix](method, url, undefined, headers);
+     };
+    });
+
+    angular.forEach(['PUT', 'POST', 'PATCH'], function(method) {
+      $httpBackend[prefix + method] = function(url, data, headers) {
+        return $httpBackend[prefix](method, url, data, headers);
+      };
+    });
+  }
+}
+
+function MockHttpExpectation(method, url, data, headers) {
+
+  this.data = data;
+  this.headers = headers;
+
+  this.match = function(m, u, d, h) {
+    if (method != m) return false;
+    if (!this.matchUrl(u)) return false;
+    if (angular.isDefined(d) && !this.matchData(d)) return false;
+    if (angular.isDefined(h) && !this.matchHeaders(h)) return false;
+    return true;
+  };
+
+  this.matchUrl = function(u) {
+    if (!url) return true;
+    if (angular.isFunction(url.test)) return url.test(u);
+    if (angular.isFunction(url)) return url(u);
+    return url == u;
+  };
+
+  this.matchHeaders = function(h) {
+    if (angular.isUndefined(headers)) return true;
+    if (angular.isFunction(headers)) return headers(h);
+    return angular.equals(headers, h);
+  };
+
+  this.matchData = function(d) {
+    if (angular.isUndefined(data)) return true;
+    if (data && angular.isFunction(data.test)) return data.test(d);
+    if (data && angular.isFunction(data)) return data(d);
+    if (data && !angular.isString(data)) {
+      return angular.equals(angular.fromJson(angular.toJson(data)), angular.fromJson(d));
+    }
+    return data == d;
+  };
+
+  this.toString = function() {
+    return method + ' ' + url;
+  };
+}
+
+function createMockXhr() {
+  return new MockXhr();
+}
+
+function MockXhr() {
+
+  // hack for testing $http, $httpBackend
+  MockXhr.$$lastInstance = this;
+
+  this.open = function(method, url, async) {
+    this.$$method = method;
+    this.$$url = url;
+    this.$$async = async;
+    this.$$reqHeaders = {};
+    this.$$respHeaders = {};
+  };
+
+  this.send = function(data) {
+    this.$$data = data;
+  };
+
+  this.setRequestHeader = function(key, value) {
+    this.$$reqHeaders[key] = value;
+  };
+
+  this.getResponseHeader = function(name) {
+    // the lookup must be case insensitive,
+    // that's why we try two quick lookups first and full scan last
+    var header = this.$$respHeaders[name];
+    if (header) return header;
+
+    name = angular.lowercase(name);
+    header = this.$$respHeaders[name];
+    if (header) return header;
+
+    header = undefined;
+    angular.forEach(this.$$respHeaders, function(headerVal, headerName) {
+      if (!header && angular.lowercase(headerName) == name) header = headerVal;
+    });
+    return header;
+  };
+
+  this.getAllResponseHeaders = function() {
+    var lines = [];
+
+    angular.forEach(this.$$respHeaders, function(value, key) {
+      lines.push(key + ': ' + value);
+    });
+    return lines.join('\n');
+  };
+
+  this.abort = angular.noop;
+}
+
+
+/**
+ * @ngdoc service
+ * @name $timeout
+ * @description
+ *
+ * This service is just a simple decorator for {@link ng.$timeout $timeout} service
+ * that adds a "flush" and "verifyNoPendingTasks" methods.
+ */
+
+angular.mock.$TimeoutDecorator = ['$delegate', '$browser', function($delegate, $browser) {
+
+  /**
+   * @ngdoc method
+   * @name $timeout#flush
+   * @description
+   *
+   * Flushes the queue of pending tasks.
+   *
+   * @param {number=} delay maximum timeout amount to flush up until
+   */
+  $delegate.flush = function(delay) {
+    $browser.defer.flush(delay);
+  };
+
+  /**
+   * @ngdoc method
+   * @name $timeout#verifyNoPendingTasks
+   * @description
+   *
+   * Verifies that there are no pending tasks that need to be flushed.
+   */
+  $delegate.verifyNoPendingTasks = function() {
+    if ($browser.deferredFns.length) {
+      throw new Error('Deferred tasks to flush (' + $browser.deferredFns.length + '): ' +
+          formatPendingTasksAsString($browser.deferredFns));
+    }
+  };
+
+  function formatPendingTasksAsString(tasks) {
+    var result = [];
+    angular.forEach(tasks, function(task) {
+      result.push('{id: ' + task.id + ', ' + 'time: ' + task.time + '}');
+    });
+
+    return result.join(', ');
+  }
+
+  return $delegate;
+}];
+
+angular.mock.$RAFDecorator = ['$delegate', function($delegate) {
+  var rafFn = function(fn) {
+    var index = rafFn.queue.length;
+    rafFn.queue.push(fn);
+    return function() {
+      rafFn.queue.splice(index, 1);
+    };
+  };
+
+  rafFn.queue = [];
+  rafFn.supported = $delegate.supported;
+
+  rafFn.flush = function() {
+    if (rafFn.queue.length === 0) {
+      throw new Error('No rAF callbacks present');
+    }
+
+    var length = rafFn.queue.length;
+    for (var i = 0; i < length; i++) {
+      rafFn.queue[i]();
+    }
+
+    rafFn.queue = rafFn.queue.slice(i);
+  };
+
+  return rafFn;
+}];
+
+/**
+ *
+ */
+angular.mock.$RootElementProvider = function() {
+  this.$get = function() {
+    return angular.element('<div ng-app></div>');
+  };
+};
+
+/**
+ * @ngdoc service
+ * @name $controller
+ * @description
+ * A decorator for {@link ng.$controller} with additional `bindings` parameter, useful when testing
+ * controllers of directives that use {@link $compile#-bindtocontroller- `bindToController`}.
+ *
+ *
+ * ## Example
+ *
+ * ```js
+ *
+ * // Directive definition ...
+ *
+ * myMod.directive('myDirective', {
+ *   controller: 'MyDirectiveController',
+ *   bindToController: {
+ *     name: '@'
+ *   }
+ * });
+ *
+ *
+ * // Controller definition ...
+ *
+ * myMod.controller('MyDirectiveController', ['log', function($log) {
+ *   $log.info(this.name);
+ * })];
+ *
+ *
+ * // In a test ...
+ *
+ * describe('myDirectiveController', function() {
+ *   it('should write the bound name to the log', inject(function($controller, $log) {
+ *     var ctrl = $controller('MyDirectiveController', { /* no locals &#42;/ }, { name: 'Clark Kent' });
+ *     expect(ctrl.name).toEqual('Clark Kent');
+ *     expect($log.info.logs).toEqual(['Clark Kent']);
+ *   });
+ * });
+ *
+ * ```
+ *
+ * @param {Function|string} constructor If called with a function then it's considered to be the
+ *    controller constructor function. Otherwise it's considered to be a string which is used
+ *    to retrieve the controller constructor using the following steps:
+ *
+ *    * check if a controller with given name is registered via `$controllerProvider`
+ *    * check if evaluating the string on the current scope returns a constructor
+ *    * if $controllerProvider#allowGlobals, check `window[constructor]` on the global
+ *      `window` object (not recommended)
+ *
+ *    The string can use the `controller as property` syntax, where the controller instance is published
+ *    as the specified property on the `scope`; the `scope` must be injected into `locals` param for this
+ *    to work correctly.
+ *
+ * @param {Object} locals Injection locals for Controller.
+ * @param {Object=} bindings Properties to add to the controller before invoking the constructor. This is used
+ *                           to simulate the `bindToController` feature and simplify certain kinds of tests.
+ * @return {Object} Instance of given controller.
+ */
+angular.mock.$ControllerDecorator = ['$delegate', function($delegate) {
+  return function(expression, locals, later, ident) {
+    if (later && typeof later === 'object') {
+      var create = $delegate(expression, locals, true, ident);
+      angular.extend(create.instance, later);
+      return create();
+    }
+    return $delegate(expression, locals, later, ident);
+  };
+}];
+
+
+/**
+ * @ngdoc module
+ * @name ngMock
+ * @packageName angular-mocks
+ * @description
+ *
+ * # ngMock
+ *
+ * The `ngMock` module provides support to inject and mock Angular services into unit tests.
+ * In addition, ngMock also extends various core ng services such that they can be
+ * inspected and controlled in a synchronous manner within test code.
+ *
+ *
+ * <div doc-module-components="ngMock"></div>
+ *
+ */
+angular.module('ngMock', ['ng']).provider({
+  $browser: angular.mock.$BrowserProvider,
+  $exceptionHandler: angular.mock.$ExceptionHandlerProvider,
+  $log: angular.mock.$LogProvider,
+  $interval: angular.mock.$IntervalProvider,
+  $httpBackend: angular.mock.$HttpBackendProvider,
+  $rootElement: angular.mock.$RootElementProvider
+}).config(['$provide', function($provide) {
+  $provide.decorator('$timeout', angular.mock.$TimeoutDecorator);
+  $provide.decorator('$$rAF', angular.mock.$RAFDecorator);
+  $provide.decorator('$rootScope', angular.mock.$RootScopeDecorator);
+  $provide.decorator('$controller', angular.mock.$ControllerDecorator);
+}]);
+
+/**
+ * @ngdoc module
+ * @name ngMockE2E
+ * @module ngMockE2E
+ * @packageName angular-mocks
+ * @description
+ *
+ * The `ngMockE2E` is an angular module which contains mocks suitable for end-to-end testing.
+ * Currently there is only one mock present in this module -
+ * the {@link ngMockE2E.$httpBackend e2e $httpBackend} mock.
+ */
+angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) {
+  $provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator);
+}]);
+
+/**
+ * @ngdoc service
+ * @name $httpBackend
+ * @module ngMockE2E
+ * @description
+ * Fake HTTP backend implementation suitable for end-to-end testing or backend-less development of
+ * applications that use the {@link ng.$http $http service}.
+ *
+ * *Note*: For fake http backend implementation suitable for unit testing please see
+ * {@link ngMock.$httpBackend unit-testing $httpBackend mock}.
+ *
+ * This implementation can be used to respond with static or dynamic responses via the `when` api
+ * and its shortcuts (`whenGET`, `whenPOST`, etc) and optionally pass through requests to the
+ * real $httpBackend for specific requests (e.g. to interact with certain remote apis or to fetch
+ * templates from a webserver).
+ *
+ * As opposed to unit-testing, in an end-to-end testing scenario or in scenario when an application
+ * is being developed with the real backend api replaced with a mock, it is often desirable for
+ * certain category of requests to bypass the mock and issue a real http request (e.g. to fetch
+ * templates or static files from the webserver). To configure the backend with this behavior
+ * use the `passThrough` request handler of `when` instead of `respond`.
+ *
+ * Additionally, we don't want to manually have to flush mocked out requests like we do during unit
+ * testing. For this reason the e2e $httpBackend flushes mocked out requests
+ * automatically, closely simulating the behavior of the XMLHttpRequest object.
+ *
+ * To setup the application to run with this http backend, you have to create a module that depends
+ * on the `ngMockE2E` and your application modules and defines the fake backend:
+ *
+ * ```js
+ *   myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']);
+ *   myAppDev.run(function($httpBackend) {
+ *     phones = [{name: 'phone1'}, {name: 'phone2'}];
+ *
+ *     // returns the current list of phones
+ *     $httpBackend.whenGET('/phones').respond(phones);
+ *
+ *     // adds a new phone to the phones array
+ *     $httpBackend.whenPOST('/phones').respond(function(method, url, data) {
+ *       var phone = angular.fromJson(data);
+ *       phones.push(phone);
+ *       return [200, phone, {}];
+ *     });
+ *     $httpBackend.whenGET(/^\/templates\//).passThrough();
+ *     //...
+ *   });
+ * ```
+ *
+ * Afterwards, bootstrap your app with this new module.
+ */
+
+/**
+ * @ngdoc method
+ * @name $httpBackend#when
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition.
+ *
+ * @param {string} method HTTP method.
+ * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ *   and returns true if the url matches the current definition.
+ * @param {(string|RegExp)=} data HTTP request body.
+ * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
+ *   object and returns true if the headers match the current definition.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ *   control how a matched request is handled. You can save this object for later use and invoke
+ *   `respond` or `passThrough` again in order to change how a matched request is handled.
+ *
+ *  - respond –
+ *    `{function([status,] data[, headers, statusText])
+ *    | function(function(method, url, data, headers)}`
+ *    – The respond method takes a set of static data to be returned or a function that can return
+ *    an array containing response status (number), response data (string), response headers
+ *    (Object), and the text for the status (string).
+ *  - passThrough – `{function()}` – Any request matching a backend definition with
+ *    `passThrough` handler will be passed through to the real backend (an XHR request will be made
+ *    to the server.)
+ *  - Both methods return the `requestHandler` object for possible overrides.
+ */
+
+/**
+ * @ngdoc method
+ * @name $httpBackend#whenGET
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition for GET requests. For more info see `when()`.
+ *
+ * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ *   and returns true if the url matches the current definition.
+ * @param {(Object|function(Object))=} headers HTTP headers.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ *   control how a matched request is handled. You can save this object for later use and invoke
+ *   `respond` or `passThrough` again in order to change how a matched request is handled.
+ */
+
+/**
+ * @ngdoc method
+ * @name $httpBackend#whenHEAD
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition for HEAD requests. For more info see `when()`.
+ *
+ * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ *   and returns true if the url matches the current definition.
+ * @param {(Object|function(Object))=} headers HTTP headers.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ *   control how a matched request is handled. You can save this object for later use and invoke
+ *   `respond` or `passThrough` again in order to change how a matched request is handled.
+ */
+
+/**
+ * @ngdoc method
+ * @name $httpBackend#whenDELETE
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition for DELETE requests. For more info see `when()`.
+ *
+ * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ *   and returns true if the url matches the current definition.
+ * @param {(Object|function(Object))=} headers HTTP headers.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ *   control how a matched request is handled. You can save this object for later use and invoke
+ *   `respond` or `passThrough` again in order to change how a matched request is handled.
+ */
+
+/**
+ * @ngdoc method
+ * @name $httpBackend#whenPOST
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition for POST requests. For more info see `when()`.
+ *
+ * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ *   and returns true if the url matches the current definition.
+ * @param {(string|RegExp)=} data HTTP request body.
+ * @param {(Object|function(Object))=} headers HTTP headers.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ *   control how a matched request is handled. You can save this object for later use and invoke
+ *   `respond` or `passThrough` again in order to change how a matched request is handled.
+ */
+
+/**
+ * @ngdoc method
+ * @name $httpBackend#whenPUT
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition for PUT requests.  For more info see `when()`.
+ *
+ * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ *   and returns true if the url matches the current definition.
+ * @param {(string|RegExp)=} data HTTP request body.
+ * @param {(Object|function(Object))=} headers HTTP headers.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ *   control how a matched request is handled. You can save this object for later use and invoke
+ *   `respond` or `passThrough` again in order to change how a matched request is handled.
+ */
+
+/**
+ * @ngdoc method
+ * @name $httpBackend#whenPATCH
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition for PATCH requests.  For more info see `when()`.
+ *
+ * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ *   and returns true if the url matches the current definition.
+ * @param {(string|RegExp)=} data HTTP request body.
+ * @param {(Object|function(Object))=} headers HTTP headers.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ *   control how a matched request is handled. You can save this object for later use and invoke
+ *   `respond` or `passThrough` again in order to change how a matched request is handled.
+ */
+
+/**
+ * @ngdoc method
+ * @name $httpBackend#whenJSONP
+ * @module ngMockE2E
+ * @description
+ * Creates a new backend definition for JSONP requests. For more info see `when()`.
+ *
+ * @param {string|RegExp|function(string)} url HTTP url or function that receives a url
+ *   and returns true if the url matches the current definition.
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
+ *   control how a matched request is handled. You can save this object for later use and invoke
+ *   `respond` or `passThrough` again in order to change how a matched request is handled.
+ */
+angular.mock.e2e = {};
+angular.mock.e2e.$httpBackendDecorator =
+  ['$rootScope', '$timeout', '$delegate', '$browser', createHttpBackendMock];
+
+
+/**
+ * @ngdoc type
+ * @name $rootScope.Scope
+ * @module ngMock
+ * @description
+ * {@link ng.$rootScope.Scope Scope} type decorated with helper methods useful for testing. These
+ * methods are automatically available on any {@link ng.$rootScope.Scope Scope} instance when
+ * `ngMock` module is loaded.
+ *
+ * In addition to all the regular `Scope` methods, the following helper methods are available:
+ */
+angular.mock.$RootScopeDecorator = ['$delegate', function($delegate) {
+
+  var $rootScopePrototype = Object.getPrototypeOf($delegate);
+
+  $rootScopePrototype.$countChildScopes = countChildScopes;
+  $rootScopePrototype.$countWatchers = countWatchers;
+
+  return $delegate;
+
+  // ------------------------------------------------------------------------------------------ //
+
+  /**
+   * @ngdoc method
+   * @name $rootScope.Scope#$countChildScopes
+   * @module ngMock
+   * @description
+   * Counts all the direct and indirect child scopes of the current scope.
+   *
+   * The current scope is excluded from the count. The count includes all isolate child scopes.
+   *
+   * @returns {number} Total number of child scopes.
+   */
+  function countChildScopes() {
+    // jshint validthis: true
+    var count = 0; // exclude the current scope
+    var pendingChildHeads = [this.$$childHead];
+    var currentScope;
+
+    while (pendingChildHeads.length) {
+      currentScope = pendingChildHeads.shift();
+
+      while (currentScope) {
+        count += 1;
+        pendingChildHeads.push(currentScope.$$childHead);
+        currentScope = currentScope.$$nextSibling;
+      }
+    }
+
+    return count;
+  }
+
+
+  /**
+   * @ngdoc method
+   * @name $rootScope.Scope#$countWatchers
+   * @module ngMock
+   * @description
+   * Counts all the watchers of direct and indirect child scopes of the current scope.
+   *
+   * The watchers of the current scope are included in the count and so are all the watchers of
+   * isolate child scopes.
+   *
+   * @returns {number} Total number of watchers.
+   */
+  function countWatchers() {
+    // jshint validthis: true
+    var count = this.$$watchers ? this.$$watchers.length : 0; // include the current scope
+    var pendingChildHeads = [this.$$childHead];
+    var currentScope;
+
+    while (pendingChildHeads.length) {
+      currentScope = pendingChildHeads.shift();
+
+      while (currentScope) {
+        count += currentScope.$$watchers ? currentScope.$$watchers.length : 0;
+        pendingChildHeads.push(currentScope.$$childHead);
+        currentScope = currentScope.$$nextSibling;
+      }
+    }
+
+    return count;
+  }
+}];
+
+
+if (window.jasmine || window.mocha) {
+
+  var currentSpec = null,
+      annotatedFunctions = [],
+      isSpecRunning = function() {
+        return !!currentSpec;
+      };
+
+  angular.mock.$$annotate = angular.injector.$$annotate;
+  angular.injector.$$annotate = function(fn) {
+    if (typeof fn === 'function' && !fn.$inject) {
+      annotatedFunctions.push(fn);
+    }
+    return angular.mock.$$annotate.apply(this, arguments);
+  };
+
+
+  (window.beforeEach || window.setup)(function() {
+    annotatedFunctions = [];
+    currentSpec = this;
+  });
+
+  (window.afterEach || window.teardown)(function() {
+    var injector = currentSpec.$injector;
+
+    annotatedFunctions.forEach(function(fn) {
+      delete fn.$inject;
+    });
+
+    angular.forEach(currentSpec.$modules, function(module) {
+      if (module && module.$$hashKey) {
+        module.$$hashKey = undefined;
+      }
+    });
+
+    currentSpec.$injector = null;
+    currentSpec.$modules = null;
+    currentSpec = null;
+
+    if (injector) {
+      injector.get('$rootElement').off();
+    }
+
+    // clean up jquery's fragment cache
+    angular.forEach(angular.element.fragments, function(val, key) {
+      delete angular.element.fragments[key];
+    });
+
+    MockXhr.$$lastInstance = null;
+
+    angular.forEach(angular.callbacks, function(val, key) {
+      delete angular.callbacks[key];
+    });
+    angular.callbacks.counter = 0;
+  });
+
+  /**
+   * @ngdoc function
+   * @name angular.mock.module
+   * @description
+   *
+   * *NOTE*: This function is also published on window for easy access.<br>
+   * *NOTE*: This function is declared ONLY WHEN running tests with jasmine or mocha
+   *
+   * This function registers a module configuration code. It collects the configuration information
+   * which will be used when the injector is created by {@link angular.mock.inject inject}.
+   *
+   * See {@link angular.mock.inject inject} for usage example
+   *
+   * @param {...(string|Function|Object)} fns any number of modules which are represented as string
+   *        aliases or as anonymous module initialization functions. The modules are used to
+   *        configure the injector. The 'ng' and 'ngMock' modules are automatically loaded. If an
+   *        object literal is passed each key-value pair will be registered on the module via
+   *        {@link auto.$provide $provide}.value, the key being the string name (or token) to associate
+   *        with the value on the injector.
+   */
+  window.module = angular.mock.module = function() {
+    var moduleFns = Array.prototype.slice.call(arguments, 0);
+    return isSpecRunning() ? workFn() : workFn;
+    /////////////////////
+    function workFn() {
+      if (currentSpec.$injector) {
+        throw new Error('Injector already created, can not register a module!');
+      } else {
+        var modules = currentSpec.$modules || (currentSpec.$modules = []);
+        angular.forEach(moduleFns, function(module) {
+          if (angular.isObject(module) && !angular.isArray(module)) {
+            modules.push(function($provide) {
+              angular.forEach(module, function(value, key) {
+                $provide.value(key, value);
+              });
+            });
+          } else {
+            modules.push(module);
+          }
+        });
+      }
+    }
+  };
+
+  /**
+   * @ngdoc function
+   * @name angular.mock.inject
+   * @description
+   *
+   * *NOTE*: This function is also published on window for easy access.<br>
+   * *NOTE*: This function is declared ONLY WHEN running tests with jasmine or mocha
+   *
+   * The inject function wraps a function into an injectable function. The inject() creates new
+   * instance of {@link auto.$injector $injector} per test, which is then used for
+   * resolving references.
+   *
+   *
+   * ## Resolving References (Underscore Wrapping)
+   * Often, we would like to inject a reference once, in a `beforeEach()` block and reuse this
+   * in multiple `it()` clauses. To be able to do this we must assign the reference to a variable
+   * that is declared in the scope of the `describe()` block. Since we would, most likely, want
+   * the variable to have the same name of the reference we have a problem, since the parameter
+   * to the `inject()` function would hide the outer variable.
+   *
+   * To help with this, the injected parameters can, optionally, be enclosed with underscores.
+   * These are ignored by the injector when the reference name is resolved.
+   *
+   * For example, the parameter `_myService_` would be resolved as the reference `myService`.
+   * Since it is available in the function body as _myService_, we can then assign it to a variable
+   * defined in an outer scope.
+   *
+   * ```
+   * // Defined out reference variable outside
+   * var myService;
+   *
+   * // Wrap the parameter in underscores
+   * beforeEach( inject( function(_myService_){
+   *   myService = _myService_;
+   * }));
+   *
+   * // Use myService in a series of tests.
+   * it('makes use of myService', function() {
+   *   myService.doStuff();
+   * });
+   *
+   * ```
+   *
+   * See also {@link angular.mock.module angular.mock.module}
+   *
+   * ## Example
+   * Example of what a typical jasmine tests looks like with the inject method.
+   * ```js
+   *
+   *   angular.module('myApplicationModule', [])
+   *       .value('mode', 'app')
+   *       .value('version', 'v1.0.1');
+   *
+   *
+   *   describe('MyApp', function() {
+   *
+   *     // You need to load modules that you want to test,
+   *     // it loads only the "ng" module by default.
+   *     beforeEach(module('myApplicationModule'));
+   *
+   *
+   *     // inject() is used to inject arguments of all given functions
+   *     it('should provide a version', inject(function(mode, version) {
+   *       expect(version).toEqual('v1.0.1');
+   *       expect(mode).toEqual('app');
+   *     }));
+   *
+   *
+   *     // The inject and module method can also be used inside of the it or beforeEach
+   *     it('should override a version and test the new version is injected', function() {
+   *       // module() takes functions or strings (module aliases)
+   *       module(function($provide) {
+   *         $provide.value('version', 'overridden'); // override version here
+   *       });
+   *
+   *       inject(function(version) {
+   *         expect(version).toEqual('overridden');
+   *       });
+   *     });
+   *   });
+   *
+   * ```
+   *
+   * @param {...Function} fns any number of functions which will be injected using the injector.
+   */
+
+
+
+  var ErrorAddingDeclarationLocationStack = function(e, errorForStack) {
+    this.message = e.message;
+    this.name = e.name;
+    if (e.line) this.line = e.line;
+    if (e.sourceId) this.sourceId = e.sourceId;
+    if (e.stack && errorForStack)
+      this.stack = e.stack + '\n' + errorForStack.stack;
+    if (e.stackArray) this.stackArray = e.stackArray;
+  };
+  ErrorAddingDeclarationLocationStack.prototype.toString = Error.prototype.toString;
+
+  window.inject = angular.mock.inject = function() {
+    var blockFns = Array.prototype.slice.call(arguments, 0);
+    var errorForStack = new Error('Declaration Location');
+    return isSpecRunning() ? workFn.call(currentSpec) : workFn;
+    /////////////////////
+    function workFn() {
+      var modules = currentSpec.$modules || [];
+      var strictDi = !!currentSpec.$injectorStrict;
+      modules.unshift('ngMock');
+      modules.unshift('ng');
+      var injector = currentSpec.$injector;
+      if (!injector) {
+        if (strictDi) {
+          // If strictDi is enabled, annotate the providerInjector blocks
+          angular.forEach(modules, function(moduleFn) {
+            if (typeof moduleFn === "function") {
+              angular.injector.$$annotate(moduleFn);
+            }
+          });
+        }
+        injector = currentSpec.$injector = angular.injector(modules, strictDi);
+        currentSpec.$injectorStrict = strictDi;
+      }
+      for (var i = 0, ii = blockFns.length; i < ii; i++) {
+        if (currentSpec.$injectorStrict) {
+          // If the injector is strict / strictDi, and the spec wants to inject using automatic
+          // annotation, then annotate the function here.
+          injector.annotate(blockFns[i]);
+        }
+        try {
+          /* jshint -W040 *//* Jasmine explicitly provides a `this` object when calling functions */
+          injector.invoke(blockFns[i] || angular.noop, this);
+          /* jshint +W040 */
+        } catch (e) {
+          if (e.stack && errorForStack) {
+            throw new ErrorAddingDeclarationLocationStack(e, errorForStack);
+          }
+          throw e;
+        } finally {
+          errorForStack = null;
+        }
+      }
+    }
+  };
+
+
+  angular.mock.inject.strictDi = function(value) {
+    value = arguments.length ? !!value : true;
+    return isSpecRunning() ? workFn() : workFn;
+
+    function workFn() {
+      if (value !== currentSpec.$injectorStrict) {
+        if (currentSpec.$injector) {
+          throw new Error('Injector already created, can not modify strict annotations');
+        } else {
+          currentSpec.$injectorStrict = value;
+        }
+      }
+    }
+  };
+}
+
+
+})(window, window.angular);
diff --git a/public/bower_components/angular-notification/angular-notification.js b/public/bower_components/angular-notification/angular-notification.js
new file mode 100644
index 0000000..c47c7e2
--- /dev/null
+++ b/public/bower_components/angular-notification/angular-notification.js
@@ -0,0 +1,170 @@
+/*! Angular notification v1.1.1 | (c) 2013 Greg Bergé | License MIT */
+
+angular
+.module('notification', [])
+.provider('$notification', $notificationProvider);
+
+/**
+ * Notification provider.
+ * Configure the default notification options.
+ */
+
+function $notificationProvider() {
+  var provider = this;
+
+  /**
+   * Expose Notification service.
+   */
+
+  this.$get = ['$window', '$rootScope', '$q', $notificationFactory];
+
+  /**
+   * Create a new Notification service.
+   */
+
+  function $notificationFactory($window, $rootScope, $q) {
+
+    /**
+     * Create a new Notification.
+     *
+     * @param {String} title
+     * @param {Object} options
+     */
+
+    function NgNotification(title, options) {
+      if (!$window.Notification) return false;
+
+      options = options || {};
+
+      var self = this;
+
+      // Events cache.
+      this._events = [];
+
+      /**
+       * Create the notification.
+       */
+
+      function createNotification() {
+        // Extend options with default provider options.
+        options = angular.extend({
+          focusWindowOnClick: true
+        }, provider.options || {}, options);
+
+        // Create a base notification.
+        try {
+        self.baseNotification = new $window.Notification(title, options);
+        } catch (error) {
+          return;
+        }
+        // Close notification after specified delay.
+        if (options.delay) setTimeout(angular.bind(self, self.close), options.delay);
+
+        // Focus window on click.
+        if (options.focusWindowOnClick)
+          self.$on('click', function () {
+            $window.focus();
+          });
+
+        // Re-bind events.
+        self._events.forEach(function (args) {
+          self.$on.apply(self, args);
+        });
+
+        // Reset events.
+        self._events = [];
+      }
+
+      if ($window.Notification.permission === 'granted') {
+        return createNotification();
+      } else if ($window.Notification.permission !== 'denied') {
+        NgNotification.requestPermission().then(createNotification);
+      }
+    }
+
+    /**
+     * Listen on event of a given type.
+     * Supported events are:
+     * - error
+     * - show
+     * - click
+     * - close
+     *
+     * @param {String} name
+     * @param {Function} listener
+     */
+
+    NgNotification.prototype.$on = function $on(name, listener) {
+      var self = this;
+
+      // If the notification is not ready, we cache the event.
+      if (!this.baseNotification) return this._events.push([name, listener]);
+
+      this.baseNotification.addEventListener(name, applyListener);
+
+      function applyListener() {
+        var args = arguments;
+        $rootScope.$apply(function () {
+          listener.apply(self, args);
+        });
+      }
+
+       // Return the deregistration function.
+      return function $off() {
+        this.baseNotification.removeListener(event, applyListener);
+      };
+    };
+
+    /**
+     * Close the notification.
+     */
+
+    NgNotification.prototype.close = function close() {
+      if (this.baseNotification) this.baseNotification.close();
+    };
+
+    /**
+     * Static method to request permission.
+     * It returns a promise
+     */
+
+    NgNotification.requestPermission = function () {
+      return $q(function (resolve, reject) {
+        if (!$window.Notification)
+          return reject();
+
+        $window.Notification.requestPermission(function (permission) {
+          // Persist permission.
+          $window.Notification.permission = $window.Notification.permission || permission;
+          resolve($window.Notification.permission);
+        });
+      });
+    };
+
+    /**
+     * Create a new notification.
+     *
+     * @param {string} title
+     * @param {options} options
+     */
+
+    function $notification(title, options) {
+      return new NgNotification(title, options);
+    }
+
+    // Expose requestPermission on $notification.
+    $notification.requestPermission = NgNotification.requestPermission;
+
+    return $notification;
+  }
+
+  /**
+   * Define default options.
+   *
+   * @param {Object} options
+   */
+
+  this.setOptions = function setOptions(options) {
+    this.options = options;
+  };
+}
diff --git a/public/bower_components/angular-resource/angular-resource.js b/public/bower_components/angular-resource/angular-resource.js
new file mode 100644
index 0000000..335859f
--- /dev/null
+++ b/public/bower_components/angular-resource/angular-resource.js
@@ -0,0 +1,684 @@
+/**
+ * @license AngularJS v1.4.8
+ * (c) 2010-2015 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+var $resourceMinErr = angular.$$minErr('$resource');
+
+// Helper functions and regex to lookup a dotted path on an object
+// stopping at undefined/null.  The path must be composed of ASCII
+// identifiers (just like $parse)
+var MEMBER_NAME_REGEX = /^(\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;
+
+function isValidDottedPath(path) {
+  return (path != null && path !== '' && path !== 'hasOwnProperty' &&
+      MEMBER_NAME_REGEX.test('.' + path));
+}
+
+function lookupDottedPath(obj, path) {
+  if (!isValidDottedPath(path)) {
+    throw $resourceMinErr('badmember', 'Dotted member path "@{0}" is invalid.', path);
+  }
+  var keys = path.split('.');
+  for (var i = 0, ii = keys.length; i < ii && angular.isDefined(obj); i++) {
+    var key = keys[i];
+    obj = (obj !== null) ? obj[key] : undefined;
+  }
+  return obj;
+}
+
+/**
+ * Create a shallow copy of an object and clear other fields from the destination
+ */
+function shallowClearAndCopy(src, dst) {
+  dst = dst || {};
+
+  angular.forEach(dst, function(value, key) {
+    delete dst[key];
+  });
+
+  for (var key in src) {
+    if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) {
+      dst[key] = src[key];
+    }
+  }
+
+  return dst;
+}
+
+/**
+ * @ngdoc module
+ * @name ngResource
+ * @description
+ *
+ * # ngResource
+ *
+ * The `ngResource` module provides interaction support with RESTful services
+ * via the $resource service.
+ *
+ *
+ * <div doc-module-components="ngResource"></div>
+ *
+ * See {@link ngResource.$resource `$resource`} for usage.
+ */
+
+/**
+ * @ngdoc service
+ * @name $resource
+ * @requires $http
+ *
+ * @description
+ * A factory which creates a resource object that lets you interact with
+ * [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources.
+ *
+ * The returned resource object has action methods which provide high-level behaviors without
+ * the need to interact with the low level {@link ng.$http $http} service.
+ *
+ * Requires the {@link ngResource `ngResource`} module to be installed.
+ *
+ * By default, trailing slashes will be stripped from the calculated URLs,
+ * which can pose problems with server backends that do not expect that
+ * behavior.  This can be disabled by configuring the `$resourceProvider` like
+ * this:
+ *
+ * ```js
+     app.config(['$resourceProvider', function($resourceProvider) {
+       // Don't strip trailing slashes from calculated URLs
+       $resourceProvider.defaults.stripTrailingSlashes = false;
+     }]);
+ * ```
+ *
+ * @param {string} url A parameterized URL template with parameters prefixed by `:` as in
+ *   `/user/:username`. If you are using a URL with a port number (e.g.
+ *   `http://example.com:8080/api`), it will be respected.
+ *
+ *   If you are using a url with a suffix, just add the suffix, like this:
+ *   `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')`
+ *   or even `$resource('http://example.com/resource/:resource_id.:format')`
+ *   If the parameter before the suffix is empty, :resource_id in this case, then the `/.` will be
+ *   collapsed down to a single `.`.  If you need this sequence to appear and not collapse then you
+ *   can escape it with `/\.`.
+ *
+ * @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in
+ *   `actions` methods. If any of the parameter value is a function, it will be executed every time
+ *   when a param value needs to be obtained for a request (unless the param was overridden).
+ *
+ *   Each key value in the parameter object is first bound to url template if present and then any
+ *   excess keys are appended to the url search query after the `?`.
+ *
+ *   Given a template `/path/:verb` and parameter `{verb:'greet', salutation:'Hello'}` results in
+ *   URL `/path/greet?salutation=Hello`.
+ *
+ *   If the parameter value is prefixed with `@` then the value for that parameter will be extracted
+ *   from the corresponding property on the `data` object (provided when calling an action method).  For
+ *   example, if the `defaultParam` object is `{someParam: '@someProp'}` then the value of `someParam`
+ *   will be `data.someProp`.
+ *
+ * @param {Object.<Object>=} actions Hash with declaration of custom actions that should extend
+ *   the default set of resource actions. The declaration should be created in the format of {@link
+ *   ng.$http#usage $http.config}:
+ *
+ *       {action1: {method:?, params:?, isArray:?, headers:?, ...},
+ *        action2: {method:?, params:?, isArray:?, headers:?, ...},
+ *        ...}
+ *
+ *   Where:
+ *
+ *   - **`action`** – {string} – The name of action. This name becomes the name of the method on
+ *     your resource object.
+ *   - **`method`** – {string} – Case insensitive HTTP method (e.g. `GET`, `POST`, `PUT`,
+ *     `DELETE`, `JSONP`, etc).
+ *   - **`params`** – {Object=} – Optional set of pre-bound parameters for this action. If any of
+ *     the parameter value is a function, it will be executed every time when a param value needs to
+ *     be obtained for a request (unless the param was overridden).
+ *   - **`url`** – {string} – action specific `url` override. The url templating is supported just
+ *     like for the resource-level urls.
+ *   - **`isArray`** – {boolean=} – If true then the returned object for this action is an array,
+ *     see `returns` section.
+ *   - **`transformRequest`** –
+ *     `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
+ *     transform function or an array of such functions. The transform function takes the http
+ *     request body and headers and returns its transformed (typically serialized) version.
+ *     By default, transformRequest will contain one function that checks if the request data is
+ *     an object and serializes to using `angular.toJson`. To prevent this behavior, set
+ *     `transformRequest` to an empty array: `transformRequest: []`
+ *   - **`transformResponse`** –
+ *     `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
+ *     transform function or an array of such functions. The transform function takes the http
+ *     response body and headers and returns its transformed (typically deserialized) version.
+ *     By default, transformResponse will contain one function that checks if the response looks like
+ *     a JSON string and deserializes it using `angular.fromJson`. To prevent this behavior, set
+ *     `transformResponse` to an empty array: `transformResponse: []`
+ *   - **`cache`** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the
+ *     GET request, otherwise if a cache instance built with
+ *     {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
+ *     caching.
+ *   - **`timeout`** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} that
+ *     should abort the request when resolved.
+ *   - **`withCredentials`** - `{boolean}` - whether to set the `withCredentials` flag on the
+ *     XHR object. See
+ *     [requests with credentials](https://developer.mozilla.org/en/http_access_control#section_5)
+ *     for more information.
+ *   - **`responseType`** - `{string}` - see
+ *     [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType).
+ *   - **`interceptor`** - `{Object=}` - The interceptor object has two optional methods -
+ *     `response` and `responseError`. Both `response` and `responseError` interceptors get called
+ *     with `http response` object. See {@link ng.$http $http interceptors}.
+ *
+ * @param {Object} options Hash with custom settings that should extend the
+ *   default `$resourceProvider` behavior.  The only supported option is
+ *
+ *   Where:
+ *
+ *   - **`stripTrailingSlashes`** – {boolean} – If true then the trailing
+ *   slashes from any calculated URL will be stripped. (Defaults to true.)
+ *
+ * @returns {Object} A resource "class" object with methods for the default set of resource actions
+ *   optionally extended with custom `actions`. The default set contains these actions:
+ *   ```js
+ *   { 'get':    {method:'GET'},
+ *     'save':   {method:'POST'},
+ *     'query':  {method:'GET', isArray:true},
+ *     'remove': {method:'DELETE'},
+ *     'delete': {method:'DELETE'} };
+ *   ```
+ *
+ *   Calling these methods invoke an {@link ng.$http} with the specified http method,
+ *   destination and parameters. When the data is returned from the server then the object is an
+ *   instance of the resource class. The actions `save`, `remove` and `delete` are available on it
+ *   as  methods with the `$` prefix. This allows you to easily perform CRUD operations (create,
+ *   read, update, delete) on server-side data like this:
+ *   ```js
+ *   var User = $resource('/user/:userId', {userId:'@id'});
+ *   var user = User.get({userId:123}, function() {
+ *     user.abc = true;
+ *     user.$save();
+ *   });
+ *   ```
+ *
+ *   It is important to realize that invoking a $resource object method immediately returns an
+ *   empty reference (object or array depending on `isArray`). Once the data is returned from the
+ *   server the existing reference is populated with the actual data. This is a useful trick since
+ *   usually the resource is assigned to a model which is then rendered by the view. Having an empty
+ *   object results in no rendering, once the data arrives from the server then the object is
+ *   populated with the data and the view automatically re-renders itself showing the new data. This
+ *   means that in most cases one never has to write a callback function for the action methods.
+ *
+ *   The action methods on the class object or instance object can be invoked with the following
+ *   parameters:
+ *
+ *   - HTTP GET "class" actions: `Resource.action([parameters], [success], [error])`
+ *   - non-GET "class" actions: `Resource.action([parameters], postData, [success], [error])`
+ *   - non-GET instance actions:  `instance.$action([parameters], [success], [error])`
+ *
+ *
+ *   Success callback is called with (value, responseHeaders) arguments, where the value is
+ *   the populated resource instance or collection object. The error callback is called
+ *   with (httpResponse) argument.
+ *
+ *   Class actions return empty instance (with additional properties below).
+ *   Instance actions return promise of the action.
+ *
+ *   The Resource instances and collection have these additional properties:
+ *
+ *   - `$promise`: the {@link ng.$q promise} of the original server interaction that created this
+ *     instance or collection.
+ *
+ *     On success, the promise is resolved with the same resource instance or collection object,
+ *     updated with data from server. This makes it easy to use in
+ *     {@link ngRoute.$routeProvider resolve section of $routeProvider.when()} to defer view
+ *     rendering until the resource(s) are loaded.
+ *
+ *     On failure, the promise is resolved with the {@link ng.$http http response} object, without
+ *     the `resource` property.
+ *
+ *     If an interceptor object was provided, the promise will instead be resolved with the value
+ *     returned by the interceptor.
+ *
+ *   - `$resolved`: `true` after first server interaction is completed (either with success or
+ *      rejection), `false` before that. Knowing if the Resource has been resolved is useful in
+ *      data-binding.
+ *
+ * @example
+ *
+ * # Credit card resource
+ *
+ * ```js
+     // Define CreditCard class
+     var CreditCard = $resource('/user/:userId/card/:cardId',
+      {userId:123, cardId:'@id'}, {
+       charge: {method:'POST', params:{charge:true}}
+      });
+
+     // We can retrieve a collection from the server
+     var cards = CreditCard.query(function() {
+       // GET: /user/123/card
+       // server returns: [ {id:456, number:'1234', name:'Smith'} ];
+
+       var card = cards[0];
+       // each item is an instance of CreditCard
+       expect(card instanceof CreditCard).toEqual(true);
+       card.name = "J. Smith";
+       // non GET methods are mapped onto the instances
+       card.$save();
+       // POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'}
+       // server returns: {id:456, number:'1234', name: 'J. Smith'};
+
+       // our custom method is mapped as well.
+       card.$charge({amount:9.99});
+       // POST: /user/123/card/456?amount=9.99&charge=true {id:456, number:'1234', name:'J. Smith'}
+     });
+
+     // we can create an instance as well
+     var newCard = new CreditCard({number:'0123'});
+     newCard.name = "Mike Smith";
+     newCard.$save();
+     // POST: /user/123/card {number:'0123', name:'Mike Smith'}
+     // server returns: {id:789, number:'0123', name: 'Mike Smith'};
+     expect(newCard.id).toEqual(789);
+ * ```
+ *
+ * The object returned from this function execution is a resource "class" which has "static" method
+ * for each action in the definition.
+ *
+ * Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and
+ * `headers`.
+ * When the data is returned from the server then the object is an instance of the resource type and
+ * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD
+ * operations (create, read, update, delete) on server-side data.
+
+   ```js
+     var User = $resource('/user/:userId', {userId:'@id'});
+     User.get({userId:123}, function(user) {
+       user.abc = true;
+       user.$save();
+     });
+   ```
+ *
+ * It's worth noting that the success callback for `get`, `query` and other methods gets passed
+ * in the response that came from the server as well as $http header getter function, so one
+ * could rewrite the above example and get access to http headers as:
+ *
+   ```js
+     var User = $resource('/user/:userId', {userId:'@id'});
+     User.get({userId:123}, function(u, getResponseHeaders){
+       u.abc = true;
+       u.$save(function(u, putResponseHeaders) {
+         //u => saved user object
+         //putResponseHeaders => $http header getter
+       });
+     });
+   ```
+ *
+ * You can also access the raw `$http` promise via the `$promise` property on the object returned
+ *
+   ```
+     var User = $resource('/user/:userId', {userId:'@id'});
+     User.get({userId:123})
+         .$promise.then(function(user) {
+           $scope.user = user;
+         });
+   ```
+
+ * # Creating a custom 'PUT' request
+ * In this example we create a custom method on our resource to make a PUT request
+ * ```js
+ *    var app = angular.module('app', ['ngResource', 'ngRoute']);
+ *
+ *    // Some APIs expect a PUT request in the format URL/object/ID
+ *    // Here we are creating an 'update' method
+ *    app.factory('Notes', ['$resource', function($resource) {
+ *    return $resource('/notes/:id', null,
+ *        {
+ *            'update': { method:'PUT' }
+ *        });
+ *    }]);
+ *
+ *    // In our controller we get the ID from the URL using ngRoute and $routeParams
+ *    // We pass in $routeParams and our Notes factory along with $scope
+ *    app.controller('NotesCtrl', ['$scope', '$routeParams', 'Notes',
+                                      function($scope, $routeParams, Notes) {
+ *    // First get a note object from the factory
+ *    var note = Notes.get({ id:$routeParams.id });
+ *    $id = note.id;
+ *
+ *    // Now call update passing in the ID first then the object you are updating
+ *    Notes.update({ id:$id }, note);
+ *
+ *    // This will PUT /notes/ID with the note object in the request payload
+ *    }]);
+ * ```
+ */
+angular.module('ngResource', ['ng']).
+  provider('$resource', function() {
+    var PROTOCOL_AND_DOMAIN_REGEX = /^https?:\/\/[^\/]*/;
+    var provider = this;
+
+    this.defaults = {
+      // Strip slashes by default
+      stripTrailingSlashes: true,
+
+      // Default actions configuration
+      actions: {
+        'get': {method: 'GET'},
+        'save': {method: 'POST'},
+        'query': {method: 'GET', isArray: true},
+        'remove': {method: 'DELETE'},
+        'delete': {method: 'DELETE'}
+      }
+    };
+
+    this.$get = ['$http', '$q', function($http, $q) {
+
+      var noop = angular.noop,
+        forEach = angular.forEach,
+        extend = angular.extend,
+        copy = angular.copy,
+        isFunction = angular.isFunction;
+
+      /**
+       * We need our custom method because encodeURIComponent is too aggressive and doesn't follow
+       * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set
+       * (pchar) allowed in path segments:
+       *    segment       = *pchar
+       *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+       *    pct-encoded   = "%" HEXDIG HEXDIG
+       *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+       *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+       *                     / "*" / "+" / "," / ";" / "="
+       */
+      function encodeUriSegment(val) {
+        return encodeUriQuery(val, true).
+          replace(/%26/gi, '&').
+          replace(/%3D/gi, '=').
+          replace(/%2B/gi, '+');
+      }
+
+
+      /**
+       * This method is intended for encoding *key* or *value* parts of query component. We need a
+       * custom method because encodeURIComponent is too aggressive and encodes stuff that doesn't
+       * have to be encoded per http://tools.ietf.org/html/rfc3986:
+       *    query       = *( pchar / "/" / "?" )
+       *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+       *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+       *    pct-encoded   = "%" HEXDIG HEXDIG
+       *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+       *                     / "*" / "+" / "," / ";" / "="
+       */
+      function encodeUriQuery(val, pctEncodeSpaces) {
+        return encodeURIComponent(val).
+          replace(/%40/gi, '@').
+          replace(/%3A/gi, ':').
+          replace(/%24/g, '$').
+          replace(/%2C/gi, ',').
+          replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
+      }
+
+      function Route(template, defaults) {
+        this.template = template;
+        this.defaults = extend({}, provider.defaults, defaults);
+        this.urlParams = {};
+      }
+
+      Route.prototype = {
+        setUrlParams: function(config, params, actionUrl) {
+          var self = this,
+            url = actionUrl || self.template,
+            val,
+            encodedVal,
+            protocolAndDomain = '';
+
+          var urlParams = self.urlParams = {};
+          forEach(url.split(/\W/), function(param) {
+            if (param === 'hasOwnProperty') {
+              throw $resourceMinErr('badname', "hasOwnProperty is not a valid parameter name.");
+            }
+            if (!(new RegExp("^\\d+$").test(param)) && param &&
+              (new RegExp("(^|[^\\\\]):" + param + "(\\W|$)").test(url))) {
+              urlParams[param] = true;
+            }
+          });
+          url = url.replace(/\\:/g, ':');
+          url = url.replace(PROTOCOL_AND_DOMAIN_REGEX, function(match) {
+            protocolAndDomain = match;
+            return '';
+          });
+
+          params = params || {};
+          forEach(self.urlParams, function(_, urlParam) {
+            val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam];
+            if (angular.isDefined(val) && val !== null) {
+              encodedVal = encodeUriSegment(val);
+              url = url.replace(new RegExp(":" + urlParam + "(\\W|$)", "g"), function(match, p1) {
+                return encodedVal + p1;
+              });
+            } else {
+              url = url.replace(new RegExp("(\/?):" + urlParam + "(\\W|$)", "g"), function(match,
+                  leadingSlashes, tail) {
+                if (tail.charAt(0) == '/') {
+                  return tail;
+                } else {
+                  return leadingSlashes + tail;
+                }
+              });
+            }
+          });
+
+          // strip trailing slashes and set the url (unless this behavior is specifically disabled)
+          if (self.defaults.stripTrailingSlashes) {
+            url = url.replace(/\/+$/, '') || '/';
+          }
+
+          // then replace collapse `/.` if found in the last URL path segment before the query
+          // E.g. `http://url.com/id./format?q=x` becomes `http://url.com/id.format?q=x`
+          url = url.replace(/\/\.(?=\w+($|\?))/, '.');
+          // replace escaped `/\.` with `/.`
+          config.url = protocolAndDomain + url.replace(/\/\\\./, '/.');
+
+
+          // set params - delegate param encoding to $http
+          forEach(params, function(value, key) {
+            if (!self.urlParams[key]) {
+              config.params = config.params || {};
+              config.params[key] = value;
+            }
+          });
+        }
+      };
+
+
+      function resourceFactory(url, paramDefaults, actions, options) {
+        var route = new Route(url, options);
+
+        actions = extend({}, provider.defaults.actions, actions);
+
+        function extractParams(data, actionParams) {
+          var ids = {};
+          actionParams = extend({}, paramDefaults, actionParams);
+          forEach(actionParams, function(value, key) {
+            if (isFunction(value)) { value = value(); }
+            ids[key] = value && value.charAt && value.charAt(0) == '@' ?
+              lookupDottedPath(data, value.substr(1)) : value;
+          });
+          return ids;
+        }
+
+        function defaultResponseInterceptor(response) {
+          return response.resource;
+        }
+
+        function Resource(value) {
+          shallowClearAndCopy(value || {}, this);
+        }
+
+        Resource.prototype.toJSON = function() {
+          var data = extend({}, this);
+          delete data.$promise;
+          delete data.$resolved;
+          return data;
+        };
+
+        forEach(actions, function(action, name) {
+          var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method);
+
+          Resource[name] = function(a1, a2, a3, a4) {
+            var params = {}, data, success, error;
+
+            /* jshint -W086 */ /* (purposefully fall through case statements) */
+            switch (arguments.length) {
+              case 4:
+                error = a4;
+                success = a3;
+              //fallthrough
+              case 3:
+              case 2:
+                if (isFunction(a2)) {
+                  if (isFunction(a1)) {
+                    success = a1;
+                    error = a2;
+                    break;
+                  }
+
+                  success = a2;
+                  error = a3;
+                  //fallthrough
+                } else {
+                  params = a1;
+                  data = a2;
+                  success = a3;
+                  break;
+                }
+              case 1:
+                if (isFunction(a1)) success = a1;
+                else if (hasBody) data = a1;
+                else params = a1;
+                break;
+              case 0: break;
+              default:
+                throw $resourceMinErr('badargs',
+                  "Expected up to 4 arguments [params, data, success, error], got {0} arguments",
+                  arguments.length);
+            }
+            /* jshint +W086 */ /* (purposefully fall through case statements) */
+
+            var isInstanceCall = this instanceof Resource;
+            var value = isInstanceCall ? data : (action.isArray ? [] : new Resource(data));
+            var httpConfig = {};
+            var responseInterceptor = action.interceptor && action.interceptor.response ||
+              defaultResponseInterceptor;
+            var responseErrorInterceptor = action.interceptor && action.interceptor.responseError ||
+              undefined;
+
+            forEach(action, function(value, key) {
+              switch (key) {
+                default:
+                  httpConfig[key] = copy(value);
+                  break;
+                case 'params':
+                case 'isArray':
+                case 'interceptor':
+                  break;
+                case 'timeout':
+                  httpConfig[key] = value;
+                  break;
+              }
+            });
+
+            if (hasBody) httpConfig.data = data;
+            route.setUrlParams(httpConfig,
+              extend({}, extractParams(data, action.params || {}), params),
+              action.url);
+
+            var promise = $http(httpConfig).then(function(response) {
+              var data = response.data,
+                promise = value.$promise;
+
+              if (data) {
+                // Need to convert action.isArray to boolean in case it is undefined
+                // jshint -W018
+                if (angular.isArray(data) !== (!!action.isArray)) {
+                  throw $resourceMinErr('badcfg',
+                      'Error in resource configuration for action `{0}`. Expected response to ' +
+                      'contain an {1} but got an {2} (Request: {3} {4})', name, action.isArray ? 'array' : 'object',
+                    angular.isArray(data) ? 'array' : 'object', httpConfig.method, httpConfig.url);
+                }
+                // jshint +W018
+                if (action.isArray) {
+                  value.length = 0;
+                  forEach(data, function(item) {
+                    if (typeof item === "object") {
+                      value.push(new Resource(item));
+                    } else {
+                      // Valid JSON values may be string literals, and these should not be converted
+                      // into objects. These items will not have access to the Resource prototype
+                      // methods, but unfortunately there
+                      value.push(item);
+                    }
+                  });
+                } else {
+                  shallowClearAndCopy(data, value);
+                  value.$promise = promise;
+                }
+              }
+
+              value.$resolved = true;
+
+              response.resource = value;
+
+              return response;
+            }, function(response) {
+              value.$resolved = true;
+
+              (error || noop)(response);
+
+              return $q.reject(response);
+            });
+
+            promise = promise.then(
+              function(response) {
+                var value = responseInterceptor(response);
+                (success || noop)(value, response.headers);
+                return value;
+              },
+              responseErrorInterceptor);
+
+            if (!isInstanceCall) {
+              // we are creating instance / collection
+              // - set the initial promise
+              // - return the instance / collection
+              value.$promise = promise;
+              value.$resolved = false;
+
+              return value;
+            }
+
+            // instance call
+            return promise;
+          };
+
+
+          Resource.prototype['$' + name] = function(params, success, error) {
+            if (isFunction(params)) {
+              error = success; success = params; params = {};
+            }
+            var result = Resource[name].call(this, params, this, success, error);
+            return result.$promise || result;
+          };
+        });
+
+        Resource.bind = function(additionalParamDefaults) {
+          return resourceFactory(url, extend({}, paramDefaults, additionalParamDefaults), actions);
+        };
+
+        return Resource;
+      }
+
+      return resourceFactory;
+    }];
+  });
+
+
+})(window, window.angular);
diff --git a/public/bower_components/angular-sanitize/angular-sanitize.js b/public/bower_components/angular-sanitize/angular-sanitize.js
new file mode 100644
index 0000000..5e5c1f2
--- /dev/null
+++ b/public/bower_components/angular-sanitize/angular-sanitize.js
@@ -0,0 +1,683 @@
+/**
+ * @license AngularJS v1.4.8
+ * (c) 2010-2015 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *     Any commits to this file should be reviewed with security in mind.  *
+ *   Changes to this file can potentially create security vulnerabilities. *
+ *          An approval from 2 Core members with history of modifying      *
+ *                         this file is required.                          *
+ *                                                                         *
+ *  Does the change somehow allow for arbitrary javascript to be executed? *
+ *    Or allows for someone to change the prototype of built-in objects?   *
+ *     Or gives undesired access to variables likes document or window?    *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+var $sanitizeMinErr = angular.$$minErr('$sanitize');
+
+/**
+ * @ngdoc module
+ * @name ngSanitize
+ * @description
+ *
+ * # ngSanitize
+ *
+ * The `ngSanitize` module provides functionality to sanitize HTML.
+ *
+ *
+ * <div doc-module-components="ngSanitize"></div>
+ *
+ * See {@link ngSanitize.$sanitize `$sanitize`} for usage.
+ */
+
+/*
+ * HTML Parser By Misko Hevery ([email-masked])
+ * based on:  HTML Parser By John Resig (ejohn.org)
+ * Original code by Erik Arvidsson, Mozilla Public License
+ * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js
+ *
+ * // Use like so:
+ * htmlParser(htmlString, {
+ *     start: function(tag, attrs, unary) {},
+ *     end: function(tag) {},
+ *     chars: function(text) {},
+ *     comment: function(text) {}
+ * });
+ *
+ */
+
+
+/**
+ * @ngdoc service
+ * @name $sanitize
+ * @kind function
+ *
+ * @description
+ *   The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are
+ *   then serialized back to properly escaped html string. This means that no unsafe input can make
+ *   it into the returned string, however, since our parser is more strict than a typical browser
+ *   parser, it's possible that some obscure input, which would be recognized as valid HTML by a
+ *   browser, won't make it through the sanitizer. The input may also contain SVG markup.
+ *   The whitelist is configured using the functions `aHrefSanitizationWhitelist` and
+ *   `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider `$compileProvider`}.
+ *
+ * @param {string} html HTML input.
+ * @returns {string} Sanitized HTML.
+ *
+ * @example
+   <example module="sanitizeExample" deps="angular-sanitize.js">
+   <file name="index.html">
+     <script>
+         angular.module('sanitizeExample', ['ngSanitize'])
+           .controller('ExampleController', ['$scope', '$sce', function($scope, $sce) {
+             $scope.snippet =
+               '<p style="color:blue">an html\n' +
+               '<em onmouseover="this.textContent=\'PWN3D!\'">click here</em>\n' +
+               'snippet</p>';
+             $scope.deliberatelyTrustDangerousSnippet = function() {
+               return $sce.trustAsHtml($scope.snippet);
+             };
+           }]);
+     </script>
+     <div ng-controller="ExampleController">
+        Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>
+       <table>
+         <tr>
+           <td>Directive</td>
+           <td>How</td>
+           <td>Source</td>
+           <td>Rendered</td>
+         </tr>
+         <tr id="bind-html-with-sanitize">
+           <td>ng-bind-html</td>
+           <td>Automatically uses $sanitize</td>
+           <td><pre>&lt;div ng-bind-html="snippet"&gt;<br/>&lt;/div&gt;</pre></td>
+           <td><div ng-bind-html="snippet"></div></td>
+         </tr>
+         <tr id="bind-html-with-trust">
+           <td>ng-bind-html</td>
+           <td>Bypass $sanitize by explicitly trusting the dangerous value</td>
+           <td>
+           <pre>&lt;div ng-bind-html="deliberatelyTrustDangerousSnippet()"&gt;
+&lt;/div&gt;</pre>
+           </td>
+           <td><div ng-bind-html="deliberatelyTrustDangerousSnippet()"></div></td>
+         </tr>
+         <tr id="bind-default">
+           <td>ng-bind</td>
+           <td>Automatically escapes</td>
+           <td><pre>&lt;div ng-bind="snippet"&gt;<br/>&lt;/div&gt;</pre></td>
+           <td><div ng-bind="snippet"></div></td>
+         </tr>
+       </table>
+       </div>
+   </file>
+   <file name="protractor.js" type="protractor">
+     it('should sanitize the html snippet by default', function() {
+       expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).
+         toBe('<p>an html\n<em>click here</em>\nsnippet</p>');
+     });
+
+     it('should inline raw snippet if bound to a trusted value', function() {
+       expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).
+         toBe("<p style=\"color:blue\">an html\n" +
+              "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" +
+              "snippet</p>");
+     });
+
+     it('should escape snippet without any filter', function() {
+       expect(element(by.css('#bind-default div')).getInnerHtml()).
+         toBe("&lt;p style=\"color:blue\"&gt;an html\n" +
+              "&lt;em onmouseover=\"this.textContent='PWN3D!'\"&gt;click here&lt;/em&gt;\n" +
+              "snippet&lt;/p&gt;");
+     });
+
+     it('should update', function() {
+       element(by.model('snippet')).clear();
+       element(by.model('snippet')).sendKeys('new <b onclick="alert(1)">text</b>');
+       expect(element(by.css('#bind-html-with-sanitize div')).getInnerHtml()).
+         toBe('new <b>text</b>');
+       expect(element(by.css('#bind-html-with-trust div')).getInnerHtml()).toBe(
+         'new <b onclick="alert(1)">text</b>');
+       expect(element(by.css('#bind-default div')).getInnerHtml()).toBe(
+         "new &lt;b onclick=\"alert(1)\"&gt;text&lt;/b&gt;");
+     });
+   </file>
+   </example>
+ */
+function $SanitizeProvider() {
+  this.$get = ['$$sanitizeUri', function($$sanitizeUri) {
+    return function(html) {
+      var buf = [];
+      htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {
+        return !/^unsafe/.test($$sanitizeUri(uri, isImage));
+      }));
+      return buf.join('');
+    };
+  }];
+}
+
+function sanitizeText(chars) {
+  var buf = [];
+  var writer = htmlSanitizeWriter(buf, angular.noop);
+  writer.chars(chars);
+  return buf.join('');
+}
+
+
+// Regular Expressions for parsing tags and attributes
+var START_TAG_REGEXP =
+       /^<((?:[a-zA-Z])[\w:-]*)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*(>?)/,
+  END_TAG_REGEXP = /^<\/\s*([\w:-]+)[^>]*>/,
+  ATTR_REGEXP = /([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,
+  BEGIN_TAG_REGEXP = /^</,
+  BEGING_END_TAGE_REGEXP = /^<\//,
+  COMMENT_REGEXP = /<!--(.*?)-->/g,
+  DOCTYPE_REGEXP = /<!DOCTYPE([^>]*?)>/i,
+  CDATA_REGEXP = /<!\[CDATA\[(.*?)]]>/g,
+  SURROGATE_PAIR_REGEXP = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
+  // Match everything outside of normal chars and " (quote character)
+  NON_ALPHANUMERIC_REGEXP = /([^\#-~| |!])/g;
+
+
+// Good source of info about elements and attributes
+// http://dev.w3.org/html5/spec/Overview.html#semantics
+// http://simon.html5.org/html-elements
+
+// Safe Void Elements - HTML5
+// http://dev.w3.org/html5/spec/Overview.html#void-elements
+var voidElements = makeMap("area,br,col,hr,img,wbr");
+
+// Elements that you can, intentionally, leave open (and which close themselves)
+// http://dev.w3.org/html5/spec/Overview.html#optional-tags
+var optionalEndTagBlockElements = makeMap("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),
+    optionalEndTagInlineElements = makeMap("rp,rt"),
+    optionalEndTagElements = angular.extend({},
+                                            optionalEndTagInlineElements,
+                                            optionalEndTagBlockElements);
+
+// Safe Block Elements - HTML5
+var blockElements = angular.extend({}, optionalEndTagBlockElements, makeMap("address,article," +
+        "aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5," +
+        "h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul"));
+
+// Inline Elements - HTML5
+var inlineElements = angular.extend({}, optionalEndTagInlineElements, makeMap("a,abbr,acronym,b," +
+        "bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s," +
+        "samp,small,span,strike,strong,sub,sup,time,tt,u,var"));
+
+// SVG Elements
+// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements
+// Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted.
+// They can potentially allow for arbitrary javascript to be executed. See #11290
+var svgElements = makeMap("circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph," +
+        "hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline," +
+        "radialGradient,rect,stop,svg,switch,text,title,tspan,use");
+
+// Special Elements (can contain anything)
+var specialElements = makeMap("script,style");
+
+var validElements = angular.extend({},
+                                   voidElements,
+                                   blockElements,
+                                   inlineElements,
+                                   optionalEndTagElements,
+                                   svgElements);
+
+//Attributes that have href and hence need to be sanitized
+var uriAttrs = makeMap("background,cite,href,longdesc,src,usemap,xlink:href");
+
+var htmlAttrs = makeMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +
+    'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +
+    'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +
+    'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +
+    'valign,value,vspace,width');
+
+// SVG attributes (without "id" and "name" attributes)
+// https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes
+var svgAttrs = makeMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +
+    'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' +
+    'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' +
+    'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' +
+    'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' +
+    'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' +
+    'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' +
+    'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' +
+    'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' +
+    'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' +
+    'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' +
+    'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' +
+    'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' +
+    'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' +
+    'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true);
+
+var validAttrs = angular.extend({},
+                                uriAttrs,
+                                svgAttrs,
+                                htmlAttrs);
+
+function makeMap(str, lowercaseKeys) {
+  var obj = {}, items = str.split(','), i;
+  for (i = 0; i < items.length; i++) {
+    obj[lowercaseKeys ? angular.lowercase(items[i]) : items[i]] = true;
+  }
+  return obj;
+}
+
+
+/**
+ * @example
+ * htmlParser(htmlString, {
+ *     start: function(tag, attrs, unary) {},
+ *     end: function(tag) {},
+ *     chars: function(text) {},
+ *     comment: function(text) {}
+ * });
+ *
+ * @param {string} html string
+ * @param {object} handler
+ */
+function htmlParser(html, handler) {
+  if (typeof html !== 'string') {
+    if (html === null || typeof html === 'undefined') {
+      html = '';
+    } else {
+      html = '' + html;
+    }
+  }
+  var index, chars, match, stack = [], last = html, text;
+  stack.last = function() { return stack[stack.length - 1]; };
+
+  while (html) {
+    text = '';
+    chars = true;
+
+    // Make sure we're not in a script or style element
+    if (!stack.last() || !specialElements[stack.last()]) {
+
+      // Comment
+      if (html.indexOf("<!--") === 0) {
+        // comments containing -- are not allowed unless they terminate the comment
+        index = html.indexOf("--", 4);
+
+        if (index >= 0 && html.lastIndexOf("-->", index) === index) {
+          if (handler.comment) handler.comment(html.substring(4, index));
+          html = html.substring(index + 3);
+          chars = false;
+        }
+      // DOCTYPE
+      } else if (DOCTYPE_REGEXP.test(html)) {
+        match = html.match(DOCTYPE_REGEXP);
+
+        if (match) {
+          html = html.replace(match[0], '');
+          chars = false;
+        }
+      // end tag
+      } else if (BEGING_END_TAGE_REGEXP.test(html)) {
+        match = html.match(END_TAG_REGEXP);
+
+        if (match) {
+          html = html.substring(match[0].length);
+          match[0].replace(END_TAG_REGEXP, parseEndTag);
+          chars = false;
+        }
+
+      // start tag
+      } else if (BEGIN_TAG_REGEXP.test(html)) {
+        match = html.match(START_TAG_REGEXP);
+
+        if (match) {
+          // We only have a valid start-tag if there is a '>'.
+          if (match[4]) {
+            html = html.substring(match[0].length);
+            match[0].replace(START_TAG_REGEXP, parseStartTag);
+          }
+          chars = false;
+        } else {
+          // no ending tag found --- this piece should be encoded as an entity.
+          text += '<';
+          html = html.substring(1);
+        }
+      }
+
+      if (chars) {
+        index = html.indexOf("<");
+
+        text += index < 0 ? html : html.substring(0, index);
+        html = index < 0 ? "" : html.substring(index);
+
+        if (handler.chars) handler.chars(decodeEntities(text));
+      }
+
+    } else {
+      // IE versions 9 and 10 do not understand the regex '[^]', so using a workaround with [\W\w].
+      html = html.replace(new RegExp("([\\W\\w]*)<\\s*\\/\\s*" + stack.last() + "[^>]*>", 'i'),
+        function(all, text) {
+          text = text.replace(COMMENT_REGEXP, "$1").replace(CDATA_REGEXP, "$1");
+
+          if (handler.chars) handler.chars(decodeEntities(text));
+
+          return "";
+      });
+
+      parseEndTag("", stack.last());
+    }
+
+    if (html == last) {
+      throw $sanitizeMinErr('badparse', "The sanitizer was unable to parse the following block " +
+                                        "of html: {0}", html);
+    }
+    last = html;
+  }
+
+  // Clean up any remaining tags
+  parseEndTag();
+
+  function parseStartTag(tag, tagName, rest, unary) {
+    tagName = angular.lowercase(tagName);
+    if (blockElements[tagName]) {
+      while (stack.last() && inlineElements[stack.last()]) {
+        parseEndTag("", stack.last());
+      }
+    }
+
+    if (optionalEndTagElements[tagName] && stack.last() == tagName) {
+      parseEndTag("", tagName);
+    }
+
+    unary = voidElements[tagName] || !!unary;
+
+    if (!unary) {
+      stack.push(tagName);
+    }
+
+    var attrs = {};
+
+    rest.replace(ATTR_REGEXP,
+      function(match, name, doubleQuotedValue, singleQuotedValue, unquotedValue) {
+        var value = doubleQuotedValue
+          || singleQuotedValue
+          || unquotedValue
+          || '';
+
+        attrs[name] = decodeEntities(value);
+    });
+    if (handler.start) handler.start(tagName, attrs, unary);
+  }
+
+  function parseEndTag(tag, tagName) {
+    var pos = 0, i;
+    tagName = angular.lowercase(tagName);
+    if (tagName) {
+      // Find the closest opened tag of the same type
+      for (pos = stack.length - 1; pos >= 0; pos--) {
+        if (stack[pos] == tagName) break;
+      }
+    }
+
+    if (pos >= 0) {
+      // Close all the open elements, up the stack
+      for (i = stack.length - 1; i >= pos; i--)
+        if (handler.end) handler.end(stack[i]);
+
+      // Remove the open elements from the stack
+      stack.length = pos;
+    }
+  }
+}
+
+var hiddenPre=document.createElement("pre");
+/**
+ * decodes all entities into regular string
+ * @param value
+ * @returns {string} A string with decoded entities.
+ */
+function decodeEntities(value) {
+  if (!value) { return ''; }
+
+  hiddenPre.innerHTML = value.replace(/</g,"&lt;");
+  // innerText depends on styling as it doesn't display hidden elements.
+  // Therefore, it's better to use textContent not to cause unnecessary reflows.
+  return hiddenPre.textContent;
+}
+
+/**
+ * Escapes all potentially dangerous characters, so that the
+ * resulting string can be safely inserted into attribute or
+ * element text.
+ * @param value
+ * @returns {string} escaped text
+ */
+function encodeEntities(value) {
+  return value.
+    replace(/&/g, '&amp;').
+    replace(SURROGATE_PAIR_REGEXP, function(value) {
+      var hi = value.charCodeAt(0);
+      var low = value.charCodeAt(1);
+      return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';
+    }).
+    replace(NON_ALPHANUMERIC_REGEXP, function(value) {
+      return '&#' + value.charCodeAt(0) + ';';
+    }).
+    replace(/</g, '&lt;').
+    replace(/>/g, '&gt;');
+}
+
+/**
+ * create an HTML/XML writer which writes to buffer
+ * @param {Array} buf use buf.jain('') to get out sanitized html string
+ * @returns {object} in the form of {
+ *     start: function(tag, attrs, unary) {},
+ *     end: function(tag) {},
+ *     chars: function(text) {},
+ *     comment: function(text) {}
+ * }
+ */
+function htmlSanitizeWriter(buf, uriValidator) {
+  var ignore = false;
+  var out = angular.bind(buf, buf.push);
+  return {
+    start: function(tag, attrs, unary) {
+      tag = angular.lowercase(tag);
+      if (!ignore && specialElements[tag]) {
+        ignore = tag;
+      }
+      if (!ignore && validElements[tag] === true) {
+        out('<');
+        out(tag);
+        angular.forEach(attrs, function(value, key) {
+          var lkey=angular.lowercase(key);
+          var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');
+          if (validAttrs[lkey] === true &&
+            (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {
+            out(' ');
+            out(key);
+            out('="');
+            out(encodeEntities(value));
+            out('"');
+          }
+        });
+        out(unary ? '/>' : '>');
+      }
+    },
+    end: function(tag) {
+        tag = angular.lowercase(tag);
+        if (!ignore && validElements[tag] === true) {
+          out('</');
+          out(tag);
+          out('>');
+        }
+        if (tag == ignore) {
+          ignore = false;
+        }
+      },
+    chars: function(chars) {
+        if (!ignore) {
+          out(encodeEntities(chars));
+        }
+      }
+  };
+}
+
+
+// define ngSanitize module and register $sanitize service
+angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);
+
+/* global sanitizeText: false */
+
+/**
+ * @ngdoc filter
+ * @name linky
+ * @kind function
+ *
+ * @description
+ * Finds links in text input and turns them into html links. Supports http/https/ftp/mailto and
+ * plain email address links.
+ *
+ * Requires the {@link ngSanitize `ngSanitize`} module to be installed.
+ *
+ * @param {string} text Input text.
+ * @param {string} target Window (_blank|_self|_parent|_top) or named frame to open links in.
+ * @returns {string} Html-linkified text.
+ *
+ * @usage
+   <span ng-bind-html="linky_expression | linky"></span>
+ *
+ * @example
+   <example module="linkyExample" deps="angular-sanitize.js">
+     <file name="index.html">
+       <script>
+         angular.module('linkyExample', ['ngSanitize'])
+           .controller('ExampleController', ['$scope', function($scope) {
+             $scope.snippet =
+               'Pretty text with some links:\n'+
+               'http://angularjs.org/,\n'+
+               'mailto:[email-masked],\n'+
+               [email-masked],\n'+
+               'and one more: ftp://127.0.0.1/.';
+             $scope.snippetWithTarget = 'http://angularjs.org/';
+           }]);
+       </script>
+       <div ng-controller="ExampleController">
+       Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>
+       <table>
+         <tr>
+           <td>Filter</td>
+           <td>Source</td>
+           <td>Rendered</td>
+         </tr>
+         <tr id="linky-filter">
+           <td>linky filter</td>
+           <td>
+             <pre>&lt;div ng-bind-html="snippet | linky"&gt;<br>&lt;/div&gt;</pre>
+           </td>
+           <td>
+             <div ng-bind-html="snippet | linky"></div>
+           </td>
+         </tr>
+         <tr id="linky-target">
+          <td>linky target</td>
+          <td>
+            <pre>&lt;div ng-bind-html="snippetWithTarget | linky:'_blank'"&gt;<br>&lt;/div&gt;</pre>
+          </td>
+          <td>
+            <div ng-bind-html="snippetWithTarget | linky:'_blank'"></div>
+          </td>
+         </tr>
+         <tr id="escaped-html">
+           <td>no filter</td>
+           <td><pre>&lt;div ng-bind="snippet"&gt;<br>&lt;/div&gt;</pre></td>
+           <td><div ng-bind="snippet"></div></td>
+         </tr>
+       </table>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should linkify the snippet with urls', function() {
+         expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).
+             toBe('Pretty text with some links: http://angularjs.org/, [email-masked], ' +
+                  [email-masked], and one more: ftp://127.0.0.1/.');
+         expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);
+       });
+
+       it('should not linkify snippet without the linky filter', function() {
+         expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).
+             toBe('Pretty text with some links: http://angularjs.org/, mailto:[email-masked], ' +
+                  [email-masked], and one more: ftp://127.0.0.1/.');
+         expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);
+       });
+
+       it('should update', function() {
+         element(by.model('snippet')).clear();
+         element(by.model('snippet')).sendKeys('new http://link.');
+         expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).
+             toBe('new http://link.');
+         expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);
+         expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())
+             .toBe('new http://link.');
+       });
+
+       it('should work with the target property', function() {
+        expect(element(by.id('linky-target')).
+            element(by.binding("snippetWithTarget | linky:'_blank'")).getText()).
+            toBe('http://angularjs.org/');
+        expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');
+       });
+     </file>
+   </example>
+ */
+angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {
+  var LINKY_URL_REGEXP =
+        /((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i,
+      MAILTO_REGEXP = /^mailto:/i;
+
+  return function(text, target) {
+    if (!text) return text;
+    var match;
+    var raw = text;
+    var html = [];
+    var url;
+    var i;
+    while ((match = raw.match(LINKY_URL_REGEXP))) {
+      // We can not end in these as they are sometimes found at the end of the sentence
+      url = match[0];
+      // if we did not match ftp/http/www/mailto then assume mailto
+      if (!match[2] && !match[4]) {
+        url = (match[3] ? 'http://' : 'mailto:') + url;
+      }
+      i = match.index;
+      addText(raw.substr(0, i));
+      addLink(url, match[0].replace(MAILTO_REGEXP, ''));
+      raw = raw.substring(i + match[0].length);
+    }
+    addText(raw);
+    return $sanitize(html.join(''));
+
+    function addText(text) {
+      if (!text) {
+        return;
+      }
+      html.push(sanitizeText(text));
+    }
+
+    function addLink(url, text) {
+      html.push('<a ');
+      if (angular.isDefined(target)) {
+        html.push('target="',
+                  target,
+                  '" ');
+      }
+      html.push('href="',
+                url.replace(/"/g, '&quot;'),
+                '">');
+      addText(text);
+      html.push('</a>');
+    }
+  };
+}]);
+
+
+})(window, window.angular);
diff --git a/public/bower_components/angular-scenario/angular-scenario.js b/public/bower_components/angular-scenario/angular-scenario.js
new file mode 100644
index 0000000..78dd37d
--- /dev/null
+++ b/public/bower_components/angular-scenario/angular-scenario.js
@@ -0,0 +1,40439 @@
+/*!
+ * jQuery JavaScript Library v2.1.1
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2014-05-01T17:11Z
+ */
+
+(function( global, factory ) {'use strict';
+
+	if ( typeof module === "object" && typeof module.exports === "object" ) {
+		// For CommonJS and CommonJS-like environments where a proper window is present,
+		// execute the factory and get jQuery
+		// For environments that do not inherently posses a window with a document
+		// (such as Node.js), expose a jQuery-making factory as module.exports
+		// This accentuates the need for the creation of a real window
+		// e.g. var jQuery = require("jquery")(window);
+		// See ticket #14549 for more info
+		module.exports = global.document ?
+			factory( global, true ) :
+			function( w ) {
+				if ( !w.document ) {
+					throw new Error( "jQuery requires a window with a document" );
+				}
+				return factory( w );
+			};
+	} else {
+		factory( global );
+	}
+
+// Pass this if window is not defined yet
+}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Can't do this because several apps including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+// Support: Firefox 18+
+//
+
+var arr = [];
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var support = {};
+
+
+
+var
+	// Use the correct document accordingly with window argument (sandbox)
+	document = window.document,
+
+	version = "2.1.1",
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+		// The jQuery object is actually just the init constructor 'enhanced'
+		// Need init if jQuery is called (just allow error to be thrown if not included)
+		return new jQuery.fn.init( selector, context );
+	},
+
+	// Support: Android<4.1
+	// Make sure we trim BOM and NBSP
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+	// Matches dashed string for camelizing
+	rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([\da-z])/gi,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	};
+
+jQuery.fn = jQuery.prototype = {
+	// The current version of jQuery being used
+	jquery: version,
+
+	constructor: jQuery,
+
+	// Start with an empty selector
+	selector: "",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	toArray: function() {
+		return slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num != null ?
+
+			// Return just the one element from the set
+			( num < 0 ? this[ num + this.length ] : this[ num ] ) :
+
+			// Return all the elements in a clean array
+			slice.call( this );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+		ret.context = this.context;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	// (You can seed the arguments with an array of args, but this is
+	// only used internally.)
+	each: function( callback, args ) {
+		return jQuery.each( this, callback, args );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		}));
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor(null);
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: arr.sort,
+	splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[0] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+
+		// skip the boolean and the target
+		target = arguments[ i ] || {};
+		i++;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+		target = {};
+	}
+
+	// extend jQuery itself if only one argument is passed
+	if ( i === length ) {
+		target = this;
+		i--;
+	}
+
+	for ( ; i < length; i++ ) {
+		// Only deal with non-null/undefined values
+		if ( (options = arguments[ i ]) != null ) {
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray(src) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject(src) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend({
+	// Unique for each copy of jQuery on the page
+	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+	// Assume jQuery is ready without the ready module
+	isReady: true,
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	noop: function() {},
+
+	// See test/unit/core.js for details concerning isFunction.
+	// Since version 1.3, DOM methods and functions like alert
+	// aren't supported. They return false on IE (#2968).
+	isFunction: function( obj ) {
+		return jQuery.type(obj) === "function";
+	},
+
+	isArray: Array.isArray,
+
+	isWindow: function( obj ) {
+		return obj != null && obj === obj.window;
+	},
+
+	isNumeric: function( obj ) {
+		// parseFloat NaNs numeric-cast false positives (null|true|false|"")
+		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+		// subtraction forces infinities to NaN
+		return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
+	},
+
+	isPlainObject: function( obj ) {
+		// Not plain objects:
+		// - Any object or value whose internal [[Class]] property is not "[object Object]"
+		// - DOM nodes
+		// - window
+		if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		if ( obj.constructor &&
+				!hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
+			return false;
+		}
+
+		// If the function hasn't returned already, we're confident that
+		// |obj| is a plain object, created by {} or constructed with new Object
+		return true;
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	type: function( obj ) {
+		if ( obj == null ) {
+			return obj + "";
+		}
+		// Support: Android < 4.0, iOS < 6 (functionish RegExp)
+		return typeof obj === "object" || typeof obj === "function" ?
+			class2type[ toString.call(obj) ] || "object" :
+			typeof obj;
+	},
+
+	// Evaluates a script in a global context
+	globalEval: function( code ) {
+		var script,
+			indirect = eval;
+
+		code = jQuery.trim( code );
+
+		if ( code ) {
+			// If the code includes a valid, prologue position
+			// strict mode pragma, execute code by injecting a
+			// script tag into the document.
+			if ( code.indexOf("use strict") === 1 ) {
+				script = document.createElement("script");
+				script.text = code;
+				document.head.appendChild( script ).parentNode.removeChild( script );
+			} else {
+			// Otherwise, avoid the DOM node creation, insertion
+			// and removal by using an indirect global eval
+				indirect( code );
+			}
+		}
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+	},
+
+	// args is for internal usage only
+	each: function( obj, callback, args ) {
+		var value,
+			i = 0,
+			length = obj.length,
+			isArray = isArraylike( obj );
+
+		if ( args ) {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+
+		// A special, fast, case for the most common use of each
+		} else {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Support: Android<4.1
+	trim: function( text ) {
+		return text == null ?
+			"" :
+			( text + "" ).replace( rtrim, "" );
+	},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArraylike( Object(arr) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		return arr == null ? -1 : indexOf.call( arr, elem, i );
+	},
+
+	merge: function( first, second ) {
+		var len = +second.length,
+			j = 0,
+			i = first.length;
+
+		for ( ; j < len; j++ ) {
+			first[ i++ ] = second[ j ];
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, invert ) {
+		var callbackInverse,
+			matches = [],
+			i = 0,
+			length = elems.length,
+			callbackExpect = !invert;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			callbackInverse = !callback( elems[ i ], i );
+			if ( callbackInverse !== callbackExpect ) {
+				matches.push( elems[ i ] );
+			}
+		}
+
+		return matches;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var value,
+			i = 0,
+			length = elems.length,
+			isArray = isArraylike( elems ),
+			ret = [];
+
+		// Go through the array, translating each of the items to their new values
+		if ( isArray ) {
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		var tmp, args, proxy;
+
+		if ( typeof context === "string" ) {
+			tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		args = slice.call( arguments, 2 );
+		proxy = function() {
+			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+		};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	now: Date.now,
+
+	// jQuery.support is not used in Core but other projects attach their
+	// properties to it so it needs to exist.
+	support: support
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+function isArraylike( obj ) {
+	var length = obj.length,
+		type = jQuery.type( obj );
+
+	if ( type === "function" || jQuery.isWindow( obj ) ) {
+		return false;
+	}
+
+	if ( obj.nodeType === 1 && length ) {
+		return true;
+	}
+
+	return type === "array" || length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v1.10.19
+ * http://sizzlejs.com/
+ *
+ * Copyright 2013 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2014-04-18
+ */
+(function( window ) {
+
+var i,
+	support,
+	Expr,
+	getText,
+	isXML,
+	tokenize,
+	compile,
+	select,
+	outermostContext,
+	sortInput,
+	hasDuplicate,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsHTML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+
+	// Instance-specific data
+	expando = "sizzle" + -(new Date()),
+	preferredDoc = window.document,
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+		}
+		return 0;
+	},
+
+	// General-purpose constants
+	strundefined = typeof undefined,
+	MAX_NEGATIVE = 1 << 31,
+
+	// Instance methods
+	hasOwn = ({}).hasOwnProperty,
+	arr = [],
+	pop = arr.pop,
+	push_native = arr.push,
+	push = arr.push,
+	slice = arr.slice,
+	// Use a stripped-down indexOf if we can't use a native one
+	indexOf = arr.indexOf || function( elem ) {
+		var i = 0,
+			len = this.length;
+		for ( ; i < len; i++ ) {
+			if ( this[i] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+	// Regular expressions
+
+	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+	// http://www.w3.org/TR/css3-syntax/#characters
+	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+	// Loosely modeled on CSS identifier characters
+	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+	identifier = characterEncoding.replace( "w", "w#" ),
+
+	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
+		// Operator (capture 2)
+		"*([*^$|!~]?=)" + whitespace +
+		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+		"*\\]",
+
+	pseudos = ":(" + characterEncoding + ")(?:\\((" +
+		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+		// 1. quoted (capture 3; capture 4 or capture 5)
+		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+		// 2. simple (capture 6)
+		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+		// 3. anything else (capture 2)
+		".*" +
+		")\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
+		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rnative = /^[^{]+\{\s*\[native \w/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rsibling = /[+~]/,
+	rescape = /'|\\/g,
+
+	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+	funescape = function( _, escaped, escapedWhitespace ) {
+		var high = "0x" + escaped - 0x10000;
+		// NaN means non-codepoint
+		// Support: Firefox<24
+		// Workaround erroneous numeric interpretation of +"0x"
+		return high !== high || escapedWhitespace ?
+			escaped :
+			high < 0 ?
+				// BMP codepoint
+				String.fromCharCode( high + 0x10000 ) :
+				// Supplemental Plane codepoint (surrogate pair)
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	};
+
+// Optimize for push.apply( _, NodeList )
+try {
+	push.apply(
+		(arr = slice.call( preferredDoc.childNodes )),
+		preferredDoc.childNodes
+	);
+	// Support: Android<4.0
+	// Detect silently failing push.apply
+	arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+	push = { apply: arr.length ?
+
+		// Leverage slice if possible
+		function( target, els ) {
+			push_native.apply( target, slice.call(els) );
+		} :
+
+		// Support: IE<9
+		// Otherwise append directly
+		function( target, els ) {
+			var j = target.length,
+				i = 0;
+			// Can't trust NodeList.length
+			while ( (target[j++] = els[i++]) ) {}
+			target.length = j - 1;
+		}
+	};
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var match, elem, m, nodeType,
+		// QSA vars
+		i, groups, old, nid, newContext, newSelector;
+
+	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+		setDocument( context );
+	}
+
+	context = context || document;
+	results = results || [];
+
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
+		return [];
+	}
+
+	if ( documentIsHTML && !seed ) {
+
+		// Shortcuts
+		if ( (match = rquickExpr.exec( selector )) ) {
+			// Speed-up: Sizzle("#ID")
+			if ( (m = match[1]) ) {
+				if ( nodeType === 9 ) {
+					elem = context.getElementById( m );
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document (jQuery #6963)
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE, Opera, and Webkit return items
+						// by name instead of ID
+						if ( elem.id === m ) {
+							results.push( elem );
+							return results;
+						}
+					} else {
+						return results;
+					}
+				} else {
+					// Context is not a document
+					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+						contains( context, elem ) && elem.id === m ) {
+						results.push( elem );
+						return results;
+					}
+				}
+
+			// Speed-up: Sizzle("TAG")
+			} else if ( match[2] ) {
+				push.apply( results, context.getElementsByTagName( selector ) );
+				return results;
+
+			// Speed-up: Sizzle(".CLASS")
+			} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
+				push.apply( results, context.getElementsByClassName( m ) );
+				return results;
+			}
+		}
+
+		// QSA path
+		if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+			nid = old = expando;
+			newContext = context;
+			newSelector = nodeType === 9 && selector;
+
+			// qSA works strangely on Element-rooted queries
+			// We can work around this by specifying an extra ID on the root
+			// and working up from there (Thanks to Andrew Dupont for the technique)
+			// IE 8 doesn't work on object elements
+			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+				groups = tokenize( selector );
+
+				if ( (old = context.getAttribute("id")) ) {
+					nid = old.replace( rescape, "\\$&" );
+				} else {
+					context.setAttribute( "id", nid );
+				}
+				nid = "[id='" + nid + "'] ";
+
+				i = groups.length;
+				while ( i-- ) {
+					groups[i] = nid + toSelector( groups[i] );
+				}
+				newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
+				newSelector = groups.join(",");
+			}
+
+			if ( newSelector ) {
+				try {
+					push.apply( results,
+						newContext.querySelectorAll( newSelector )
+					);
+					return results;
+				} catch(qsaError) {
+				} finally {
+					if ( !old ) {
+						context.removeAttribute("id");
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var keys = [];
+
+	function cache( key, value ) {
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key + " " ) > Expr.cacheLength ) {
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return (cache[ key + " " ] = value);
+	}
+	return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+	var div = document.createElement("div");
+
+	try {
+		return !!fn( div );
+	} catch (e) {
+		return false;
+	} finally {
+		// Remove from its parent by default
+		if ( div.parentNode ) {
+			div.parentNode.removeChild( div );
+		}
+		// release memory in IE
+		div = null;
+	}
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+	var arr = attrs.split("|"),
+		i = attrs.length;
+
+	while ( i-- ) {
+		Expr.attrHandle[ arr[i] ] = handler;
+	}
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+			( ~b.sourceIndex || MAX_NEGATIVE ) -
+			( ~a.sourceIndex || MAX_NEGATIVE );
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( (cur = cur.nextSibling) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return (name === "input" || name === "button") && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+	return markFunction(function( argument ) {
+		argument = +argument;
+		return markFunction(function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ (j = matchIndexes[i]) ] ) {
+					seed[j] = !(matches[j] = seed[j]);
+				}
+			}
+		});
+	});
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+	return context && typeof context.getElementsByTagName !== strundefined && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833)
+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var hasCompare,
+		doc = node ? node.ownerDocument || node : preferredDoc,
+		parent = doc.defaultView;
+
+	// If no document and documentElement is available, return
+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Set our document
+	document = doc;
+	docElem = doc.documentElement;
+
+	// Support tests
+	documentIsHTML = !isXML( doc );
+
+	// Support: IE>8
+	// If iframe document is assigned to "document" variable and if iframe has been reloaded,
+	// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
+	// IE6-8 do not support the defaultView property so parent will be undefined
+	if ( parent && parent !== parent.top ) {
+		// IE11 does not have attachEvent, so all must suffer
+		if ( parent.addEventListener ) {
+			parent.addEventListener( "unload", function() {
+				setDocument();
+			}, false );
+		} else if ( parent.attachEvent ) {
+			parent.attachEvent( "onunload", function() {
+				setDocument();
+			});
+		}
+	}
+
+	/* Attributes
+	---------------------------------------------------------------------- */
+
+	// Support: IE<8
+	// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
+	support.attributes = assert(function( div ) {
+		div.className = "i";
+		return !div.getAttribute("className");
+	});
+
+	/* getElement(s)By*
+	---------------------------------------------------------------------- */
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.getElementsByTagName = assert(function( div ) {
+		div.appendChild( doc.createComment("") );
+		return !div.getElementsByTagName("*").length;
+	});
+
+	// Check if getElementsByClassName can be trusted
+	support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
+		div.innerHTML = "<div class='a'></div><div class='a i'></div>";
+
+		// Support: Safari<4
+		// Catch class over-caching
+		div.firstChild.className = "i";
+		// Support: Opera<10
+		// Catch gEBCN failure to find non-leading classes
+		return div.getElementsByClassName("i").length === 2;
+	});
+
+	// Support: IE<10
+	// Check if getElementById returns elements by name
+	// The broken getElementById methods don't pick up programatically-set names,
+	// so use a roundabout getElementsByName test
+	support.getById = assert(function( div ) {
+		docElem.appendChild( div ).id = expando;
+		return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
+	});
+
+	// ID find and filter
+	if ( support.getById ) {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
+				var m = context.getElementById( id );
+				// Check parentNode to catch when Blackberry 4.6 returns
+				// nodes that are no longer in the document #6963
+				return m && m.parentNode ? [ m ] : [];
+			}
+		};
+		Expr.filter["ID"] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute("id") === attrId;
+			};
+		};
+	} else {
+		// Support: IE6/7
+		// getElementById is not reliable as a find shortcut
+		delete Expr.find["ID"];
+
+		Expr.filter["ID"] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+				return node && node.value === attrId;
+			};
+		};
+	}
+
+	// Tag
+	Expr.find["TAG"] = support.getElementsByTagName ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== strundefined ) {
+				return context.getElementsByTagName( tag );
+			}
+		} :
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( (elem = results[i++]) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Class
+	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	/* QSA/matchesSelector
+	---------------------------------------------------------------------- */
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21)
+	// We allow this because of a bug in IE8/9 that throws an error
+	// whenever `document.activeElement` is accessed on an iframe
+	// So, we allow :focus to pass through QSA all the time to avoid the IE error
+	// See http://bugs.jquery.com/ticket/13378
+	rbuggyQSA = [];
+
+	if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert(function( div ) {
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explicitly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// http://bugs.jquery.com/ticket/12359
+			div.innerHTML = "<select msallowclip=''><option selected=''></option></select>";
+
+			// Support: IE8, Opera 11-12.16
+			// Nothing should be selected when empty strings follow ^= or $= or *=
+			// The test attribute must be unknown in Opera but "safe" for WinRT
+			// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+			if ( div.querySelectorAll("[msallowclip^='']").length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+			}
+
+			// Support: IE8
+			// Boolean attributes and "value" are not treated correctly
+			if ( !div.querySelectorAll("[selected]").length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":checked").length ) {
+				rbuggyQSA.push(":checked");
+			}
+		});
+
+		assert(function( div ) {
+			// Support: Windows 8 Native Apps
+			// The type and name attributes are restricted during .innerHTML assignment
+			var input = doc.createElement("input");
+			input.setAttribute( "type", "hidden" );
+			div.appendChild( input ).setAttribute( "name", "D" );
+
+			// Support: IE8
+			// Enforce case-sensitivity of name attribute
+			if ( div.querySelectorAll("[name=d]").length ) {
+				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":enabled").length ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			div.querySelectorAll("*,:x");
+			rbuggyQSA.push(",.*:");
+		});
+	}
+
+	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+		docElem.webkitMatchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector) )) ) {
+
+		assert(function( div ) {
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( div, "div" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( div, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		});
+	}
+
+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+	/* Contains
+	---------------------------------------------------------------------- */
+	hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+	// Element contains another
+	// Purposefully does not implement inclusive descendent
+	// As in, an element does not contain itself
+	contains = hasCompare || rnative.test( docElem.contains ) ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			));
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( (b = b.parentNode) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	/* Sorting
+	---------------------------------------------------------------------- */
+
+	// Document order sorting
+	sortOrder = hasCompare ?
+	function( a, b ) {
+
+		// Flag for duplicate removal
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		// Sort on method existence if only one input has compareDocumentPosition
+		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+		if ( compare ) {
+			return compare;
+		}
+
+		// Calculate position if both inputs belong to the same document
+		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+			a.compareDocumentPosition( b ) :
+
+			// Otherwise we know they are disconnected
+			1;
+
+		// Disconnected nodes
+		if ( compare & 1 ||
+			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+			// Choose the first element that is related to our preferred document
+			if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+				return -1;
+			}
+			if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+				return 1;
+			}
+
+			// Maintain original order
+			return sortInput ?
+				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+				0;
+		}
+
+		return compare & 4 ? -1 : 1;
+	} :
+	function( a, b ) {
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Parentless nodes are either documents or disconnected
+		if ( !aup || !bup ) {
+			return a === doc ? -1 :
+				b === doc ? 1 :
+				aup ? -1 :
+				bup ? 1 :
+				sortInput ?
+				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( (cur = cur.parentNode) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( (cur = cur.parentNode) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[i] === bp[i] ) {
+			i++;
+		}
+
+		return i ?
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[i], bp[i] ) :
+
+			// Otherwise nodes in our document sort first
+			ap[i] === preferredDoc ? -1 :
+			bp[i] === preferredDoc ? 1 :
+			0;
+	};
+
+	return doc;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	// Make sure that attribute selectors are quoted
+	expr = expr.replace( rattributeQuotes, "='$1']" );
+
+	if ( support.matchesSelector && documentIsHTML &&
+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+					// As well, disconnected nodes are said to be in a document
+					// fragment in IE 9
+					elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch(e) {}
+	}
+
+	return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+	// Set document vars if needed
+	if ( ( context.ownerDocument || context ) !== document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	var fn = Expr.attrHandle[ name.toLowerCase() ],
+		// Don't get fooled by Object.prototype properties (jQuery #13807)
+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+			fn( elem, name, !documentIsHTML ) :
+			undefined;
+
+	return val !== undefined ?
+		val :
+		support.attributes || !documentIsHTML ?
+			elem.getAttribute( name ) :
+			(val = elem.getAttributeNode(name)) && val.specified ?
+				val.value :
+				null;
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		j = 0,
+		i = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	sortInput = !support.sortStable && results.slice( 0 );
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		while ( (elem = results[i++]) ) {
+			if ( elem === results[ i ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	// Clear input after sorting to release objects
+	// See https://github.com/jquery/sizzle/pull/225
+	sortInput = null;
+
+	return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+		// If no nodeType, this is expected to be an array
+		while ( (node = elem[i++]) ) {
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (jQuery #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	attrHandle: {},
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[1] = match[1].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+			if ( match[2] === "~=" ) {
+				match[3] = " " + match[3] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[1] = match[1].toLowerCase();
+
+			if ( match[1].slice( 0, 3 ) === "nth" ) {
+				// nth-* requires argument
+				if ( !match[3] ) {
+					Sizzle.error( match[0] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+			// other types prohibit arguments
+			} else if ( match[3] ) {
+				Sizzle.error( match[0] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[6] && match[2];
+
+			if ( matchExpr["CHILD"].test( match[0] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[3] ) {
+				match[2] = match[4] || match[5] || "";
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+				// Get excess from tokenize (recursively)
+				(excess = tokenize( unquoted, true )) &&
+				// advance to the next closing parenthesis
+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+				// excess is a negative index
+				match[0] = match[0].slice( 0, excess );
+				match[2] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeNameSelector ) {
+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+			return nodeNameSelector === "*" ?
+				function() { return true; } :
+				function( elem ) {
+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+				};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+				classCache( className, function( elem ) {
+					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
+				});
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+			};
+		},
+
+		"CHILD": function( type, what, argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, context, xml ) {
+					var cache, outerCache, node, diff, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( (node = node[ dir ]) ) {
+									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
+										return false;
+									}
+								}
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+							// Seek `elem` from a previously-cached index
+							outerCache = parent[ expando ] || (parent[ expando ] = {});
+							cache = outerCache[ type ] || [];
+							nodeIndex = cache[0] === dirruns && cache[1];
+							diff = cache[0] === dirruns && cache[2];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						// Use previously-cached element index if available
+						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+							diff = cache[1];
+
+						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+						} else {
+							// Use the same loop as above to seek `elem` from the start
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
+									// Cache the index of each encountered element
+									if ( useCache ) {
+										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
+									}
+
+									if ( node === elem ) {
+										break;
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction(function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf.call( seed, matched[i] );
+							seed[ idx ] = !( matches[ idx ] = matched[i] );
+						}
+					}) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+		// Potentially complex pseudos
+		"not": markFunction(function( selector ) {
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction(function( seed, matches, context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( (elem = unmatched[i]) ) {
+							seed[i] = !(matches[i] = elem);
+						}
+					}
+				}) :
+				function( elem, context, xml ) {
+					input[0] = elem;
+					matcher( input, null, xml, results );
+					return !results.pop();
+				};
+		}),
+
+		"has": markFunction(function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		}),
+
+		"contains": markFunction(function( text ) {
+			return function( elem ) {
+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+			};
+		}),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+			// lang value must be a valid identifier
+			if ( !ridentifier.test(lang || "") ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( (elemLang = documentIsHTML ?
+						elem.lang :
+						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+				return false;
+			};
+		}),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+		},
+
+		// Boolean properties
+		"enabled": function( elem ) {
+			return elem.disabled === false;
+		},
+
+		"disabled": function( elem ) {
+			return elem.disabled === true;
+		},
+
+		"checked": function( elem ) {
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+		},
+
+		"selected": function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+			//   but not by others (comment: 8; processing instruction: 7; etc.)
+			// nodeType < 6 works because attributes (2) do not appear as children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeType < 6 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos["empty"]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+
+				// Support: IE<8
+				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo(function() {
+			return [ 0 ];
+		}),
+
+		"last": createPositionalPseudo(function( matchIndexes, length ) {
+			return [ length - 1 ];
+		}),
+
+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		}),
+
+		"even": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		})
+	}
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || (match = rcomma.exec( soFar )) ) {
+			if ( match ) {
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[0].length ) || soFar;
+			}
+			groups.push( (tokens = []) );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( (match = rcombinators.exec( soFar )) ) {
+			matched = match.shift();
+			tokens.push({
+				value: matched,
+				// Cast descendant combinators to space
+				type: match[0].replace( rtrim, " " )
+			});
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+				(match = preFilters[ type ]( match ))) ) {
+				matched = match.shift();
+				tokens.push({
+					value: matched,
+					type: type,
+					matches: match
+				});
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[i].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		checkNonElements = base && dir === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( (elem = elem[ dir ]) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var oldCache, outerCache,
+				newCache = [ dirruns, doneName ];
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+			if ( xml ) {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || (elem[ expando ] = {});
+						if ( (oldCache = outerCache[ dir ]) &&
+							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+							// Assign to newCache so results back-propagate to previous elements
+							return (newCache[ 2 ] = oldCache[ 2 ]);
+						} else {
+							// Reuse newcache so results back-propagate to previous elements
+							outerCache[ dir ] = newCache;
+
+							// A match means we're done; a fail means we have to keep checking
+							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[i]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[i], results );
+	}
+	return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( (elem = unmatched[i]) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction(function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( (elem = temp[i]) ) {
+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( (elem = matcherOut[i]) ) {
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( (matcherIn[i] = elem) );
+						}
+					}
+					postFinder( null, (matcherOut = []), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( (elem = matcherOut[i]) &&
+						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+
+						seed[temp] = !(results[temp] = elem);
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	});
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[0].type ],
+		implicitRelative = leadingRelative || Expr.relative[" "],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf.call( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				(checkContext = context).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+		} else {
+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[j].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector(
+						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
+						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+					).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	var bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, outermost ) {
+			var elem, j, matcher,
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				setMatched = [],
+				contextBackup = outermostContext,
+				// We must always have either seed elements or outermost context
+				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+				len = elems.length;
+
+			if ( outermost ) {
+				outermostContext = context !== document && context;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+			// Support: IE<9, Safari
+			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+					while ( (matcher = elementMatchers[j++]) ) {
+						if ( matcher( elem, context, xml ) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+					// They will have gone through all possible matchers
+					if ( (elem = !matcher && elem) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// Apply set filters to unmatched elements
+			matchedCount += i;
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( (matcher = setMatchers[j++]) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !(unmatched[i] || setMatched[i]) ) {
+								setMatched[i] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !match ) {
+			match = tokenize( selector );
+		}
+		i = match.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( match[i] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+		// Save selector and tokenization
+		cached.selector = selector;
+	}
+	return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		compiled = typeof selector === "function" && selector,
+		match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+	results = results || [];
+
+	// Try to minimize operations if there is no seed and only one group
+	if ( match.length === 1 ) {
+
+		// Take a shortcut and set the context if the root selector is an ID
+		tokens = match[0] = match[0].slice( 0 );
+		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+				support.getById && context.nodeType === 9 && documentIsHTML &&
+				Expr.relative[ tokens[1].type ] ) {
+
+			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+			if ( !context ) {
+				return results;
+
+			// Precompiled matchers will still verify ancestry, so step up a level
+			} else if ( compiled ) {
+				context = context.parentNode;
+			}
+
+			selector = selector.slice( tokens.shift().value.length );
+		}
+
+		// Fetch a seed set for right-to-left matching
+		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+		while ( i-- ) {
+			token = tokens[i];
+
+			// Abort if we hit a combinator
+			if ( Expr.relative[ (type = token.type) ] ) {
+				break;
+			}
+			if ( (find = Expr.find[ type ]) ) {
+				// Search, expanding context for leading sibling combinators
+				if ( (seed = find(
+					token.matches[0].replace( runescape, funescape ),
+					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+				)) ) {
+
+					// If seed is empty or no tokens remain, we can return early
+					tokens.splice( i, 1 );
+					selector = seed.length && toSelector( tokens );
+					if ( !selector ) {
+						push.apply( results, seed );
+						return results;
+					}
+
+					break;
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function if one is not provided
+	// Provide `match` to avoid retokenization if we modified the selector above
+	( compiled || compile( selector, match ) )(
+		seed,
+		context,
+		!documentIsHTML,
+		results,
+		rsibling.test( selector ) && testContext( context.parentNode ) || context
+	);
+	return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome<14
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( div1 ) {
+	// Should return 1, but returns 4 (following)
+	return div1.compareDocumentPosition( document.createElement("div") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( div ) {
+	div.innerHTML = "<a href='#'></a>";
+	return div.firstChild.getAttribute("href") === "#" ;
+}) ) {
+	addHandle( "type|href|height|width", function( elem, name, isXML ) {
+		if ( !isXML ) {
+			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+		}
+	});
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( div ) {
+	div.innerHTML = "<input/>";
+	div.firstChild.setAttribute( "value", "" );
+	return div.firstChild.getAttribute( "value" ) === "";
+}) ) {
+	addHandle( "value", function( elem, name, isXML ) {
+		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+			return elem.defaultValue;
+		}
+	});
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( div ) {
+	return div.getAttribute("disabled") == null;
+}) ) {
+	addHandle( booleans, function( elem, name, isXML ) {
+		var val;
+		if ( !isXML ) {
+			return elem[ name ] === true ? name.toLowerCase() :
+					(val = elem.getAttributeNode( name )) && val.specified ?
+					val.value :
+				null;
+		}
+	});
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep( elements, function( elem, i ) {
+			/* jshint -W018 */
+			return !!qualifier.call( elem, i, elem ) !== not;
+		});
+
+	}
+
+	if ( qualifier.nodeType ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( elem === qualifier ) !== not;
+		});
+
+	}
+
+	if ( typeof qualifier === "string" ) {
+		if ( risSimple.test( qualifier ) ) {
+			return jQuery.filter( qualifier, elements, not );
+		}
+
+		qualifier = jQuery.filter( qualifier, elements );
+	}
+
+	return jQuery.grep( elements, function( elem ) {
+		return ( indexOf.call( qualifier, elem ) >= 0 ) !== not;
+	});
+}
+
+jQuery.filter = function( expr, elems, not ) {
+	var elem = elems[ 0 ];
+
+	if ( not ) {
+		expr = ":not(" + expr + ")";
+	}
+
+	return elems.length === 1 && elem.nodeType === 1 ?
+		jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
+		jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+			return elem.nodeType === 1;
+		}));
+};
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var i,
+			len = this.length,
+			ret = [],
+			self = this;
+
+		if ( typeof selector !== "string" ) {
+			return this.pushStack( jQuery( selector ).filter(function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			}) );
+		}
+
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, self[ i ], ret );
+		}
+
+		// Needed because $( selector, context ) becomes $( context ).find( selector )
+		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+		ret.selector = this.selector ? this.selector + " " + selector : selector;
+		return ret;
+	},
+	filter: function( selector ) {
+		return this.pushStack( winnow(this, selector || [], false) );
+	},
+	not: function( selector ) {
+		return this.pushStack( winnow(this, selector || [], true) );
+	},
+	is: function( selector ) {
+		return !!winnow(
+			this,
+
+			// If this is a positional/relative selector, check membership in the returned set
+			// so $("p:first").is("p:last") won't return true for a doc with two "p".
+			typeof selector === "string" && rneedsContext.test( selector ) ?
+				jQuery( selector ) :
+				selector || [],
+			false
+		).length;
+	}
+});
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+	init = jQuery.fn.init = function( selector, context ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) {
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && (match[1] || !context) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[1] ) {
+					context = context instanceof jQuery ? context[0] : context;
+
+					// scripts is true for back-compat
+					// Intentionally let the error be thrown if parseHTML is not present
+					jQuery.merge( this, jQuery.parseHTML(
+						match[1],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+							// Properties of context are called as methods if possible
+							if ( jQuery.isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[2] );
+
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Inject the element directly into the jQuery object
+						this.length = 1;
+						this[0] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || rootjQuery ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this.context = this[0] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return typeof rootjQuery.ready !== "undefined" ?
+				rootjQuery.ready( selector ) :
+				// Execute immediately if ready is not present
+				selector( jQuery );
+		}
+
+		if ( selector.selector !== undefined ) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	};
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+	// methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.extend({
+	dir: function( elem, dir, until ) {
+		var matched = [],
+			truncate = until !== undefined;
+
+		while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {
+			if ( elem.nodeType === 1 ) {
+				if ( truncate && jQuery( elem ).is( until ) ) {
+					break;
+				}
+				matched.push( elem );
+			}
+		}
+		return matched;
+	},
+
+	sibling: function( n, elem ) {
+		var matched = [];
+
+		for ( ; n; n = n.nextSibling ) {
+			if ( n.nodeType === 1 && n !== elem ) {
+				matched.push( n );
+			}
+		}
+
+		return matched;
+	}
+});
+
+jQuery.fn.extend({
+	has: function( target ) {
+		var targets = jQuery( target, this ),
+			l = targets.length;
+
+		return this.filter(function() {
+			var i = 0;
+			for ( ; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[i] ) ) {
+					return true;
+				}
+			}
+		});
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			matched = [],
+			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( ; i < l; i++ ) {
+			for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
+				// Always skip document fragments
+				if ( cur.nodeType < 11 && (pos ?
+					pos.index(cur) > -1 :
+
+					// Don't pass non-elements to Sizzle
+					cur.nodeType === 1 &&
+						jQuery.find.matchesSelector(cur, selectors)) ) {
+
+					matched.push( cur );
+					break;
+				}
+			}
+		}
+
+		return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
+	},
+
+	// Determine the position of an element within
+	// the matched set of elements
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// index in selector
+		if ( typeof elem === "string" ) {
+			return indexOf.call( jQuery( elem ), this[ 0 ] );
+		}
+
+		// Locate the position of the desired element
+		return indexOf.call( this,
+
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[ 0 ] : elem
+		);
+	},
+
+	add: function( selector, context ) {
+		return this.pushStack(
+			jQuery.unique(
+				jQuery.merge( this.get(), jQuery( selector, context ) )
+			)
+		);
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter(selector)
+		);
+	}
+});
+
+function sibling( cur, dir ) {
+	while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}
+	return cur;
+}
+
+jQuery.each({
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return jQuery.dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return jQuery.dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return jQuery.dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return jQuery.sibling( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return elem.contentDocument || jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var matched = jQuery.map( this, fn, until );
+
+		if ( name.slice( -5 ) !== "Until" ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			matched = jQuery.filter( selector, matched );
+		}
+
+		if ( this.length > 1 ) {
+			// Remove duplicates
+			if ( !guaranteedUnique[ name ] ) {
+				jQuery.unique( matched );
+			}
+
+			// Reverse order for parents* and prev-derivatives
+			if ( rparentsprev.test( name ) ) {
+				matched.reverse();
+			}
+		}
+
+		return this.pushStack( matched );
+	};
+});
+var rnotwhite = (/\S+/g);
+
+
+
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+	var object = optionsCache[ options ] = {};
+	jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	});
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		( optionsCache[ options ] || createOptions( options ) ) :
+		jQuery.extend( {}, options );
+
+	var // Last fire value (for non-forgettable lists)
+		memory,
+		// Flag to know if list was already fired
+		fired,
+		// Flag to know if list is currently firing
+		firing,
+		// First callback to fire (used internally by add and fireWith)
+		firingStart,
+		// End of the loop when firing
+		firingLength,
+		// Index of currently firing callback (modified by remove if needed)
+		firingIndex,
+		// Actual callback list
+		list = [],
+		// Stack of fire calls for repeatable lists
+		stack = !options.once && [],
+		// Fire callbacks
+		fire = function( data ) {
+			memory = options.memory && data;
+			fired = true;
+			firingIndex = firingStart || 0;
+			firingStart = 0;
+			firingLength = list.length;
+			firing = true;
+			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+					memory = false; // To prevent further calls using add
+					break;
+				}
+			}
+			firing = false;
+			if ( list ) {
+				if ( stack ) {
+					if ( stack.length ) {
+						fire( stack.shift() );
+					}
+				} else if ( memory ) {
+					list = [];
+				} else {
+					self.disable();
+				}
+			}
+		},
+		// Actual Callbacks object
+		self = {
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+					// First, we save the current length
+					var start = list.length;
+					(function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							var type = jQuery.type( arg );
+							if ( type === "function" ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && type !== "string" ) {
+								// Inspect recursively
+								add( arg );
+							}
+						});
+					})( arguments );
+					// Do we need to add the callbacks to the
+					// current firing batch?
+					if ( firing ) {
+						firingLength = list.length;
+					// With memory, if we're not firing then
+					// we should call right away
+					} else if ( memory ) {
+						firingStart = start;
+						fire( memory );
+					}
+				}
+				return this;
+			},
+			// Remove a callback from the list
+			remove: function() {
+				if ( list ) {
+					jQuery.each( arguments, function( _, arg ) {
+						var index;
+						while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+							list.splice( index, 1 );
+							// Handle firing indexes
+							if ( firing ) {
+								if ( index <= firingLength ) {
+									firingLength--;
+								}
+								if ( index <= firingIndex ) {
+									firingIndex--;
+								}
+							}
+						}
+					});
+				}
+				return this;
+			},
+			// Check if a given callback is in the list.
+			// If no argument is given, return whether or not list has callbacks attached.
+			has: function( fn ) {
+				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
+			},
+			// Remove all callbacks from the list
+			empty: function() {
+				list = [];
+				firingLength = 0;
+				return this;
+			},
+			// Have the list do nothing anymore
+			disable: function() {
+				list = stack = memory = undefined;
+				return this;
+			},
+			// Is it disabled?
+			disabled: function() {
+				return !list;
+			},
+			// Lock the list in its current state
+			lock: function() {
+				stack = undefined;
+				if ( !memory ) {
+					self.disable();
+				}
+				return this;
+			},
+			// Is it locked?
+			locked: function() {
+				return !stack;
+			},
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				if ( list && ( !fired || stack ) ) {
+					args = args || [];
+					args = [ context, args.slice ? args.slice() : args ];
+					if ( firing ) {
+						stack.push( args );
+					} else {
+						fire( args );
+					}
+				}
+				return this;
+			},
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+
+
+jQuery.extend({
+
+	Deferred: function( func ) {
+		var tuples = [
+				// action, add listener, listener list, final state
+				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+				[ "notify", "progress", jQuery.Callbacks("memory") ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				then: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+					return jQuery.Deferred(function( newDefer ) {
+						jQuery.each( tuples, function( i, tuple ) {
+							var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+							// deferred[ done | fail | progress ] for forwarding actions to newDefer
+							deferred[ tuple[1] ](function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && jQuery.isFunction( returned.promise ) ) {
+									returned.promise()
+										.done( newDefer.resolve )
+										.fail( newDefer.reject )
+										.progress( newDefer.notify );
+								} else {
+									newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
+								}
+							});
+						});
+						fns = null;
+					}).promise();
+				},
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Keep pipe for back-compat
+		promise.pipe = promise.then;
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 3 ];
+
+			// promise[ done | fail | progress ] = list.add
+			promise[ tuple[1] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add(function() {
+					// state = [ resolved | rejected ]
+					state = stateString;
+
+				// [ reject_list | resolve_list ].disable; progress_list.lock
+				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+			}
+
+			// deferred[ resolve | reject | notify ]
+			deferred[ tuple[0] ] = function() {
+				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
+				return this;
+			};
+			deferred[ tuple[0] + "With" ] = list.fireWith;
+		});
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( subordinate /* , ..., subordinateN */ ) {
+		var i = 0,
+			resolveValues = slice.call( arguments ),
+			length = resolveValues.length,
+
+			// the count of uncompleted subordinates
+			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+			// Update function for both resolve and progress values
+			updateFunc = function( i, contexts, values ) {
+				return function( value ) {
+					contexts[ i ] = this;
+					values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+					if ( values === progressValues ) {
+						deferred.notifyWith( contexts, values );
+					} else if ( !( --remaining ) ) {
+						deferred.resolveWith( contexts, values );
+					}
+				};
+			},
+
+			progressValues, progressContexts, resolveContexts;
+
+		// add listeners to Deferred subordinates; treat others as resolved
+		if ( length > 1 ) {
+			progressValues = new Array( length );
+			progressContexts = new Array( length );
+			resolveContexts = new Array( length );
+			for ( ; i < length; i++ ) {
+				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+					resolveValues[ i ].promise()
+						.done( updateFunc( i, resolveContexts, resolveValues ) )
+						.fail( deferred.reject )
+						.progress( updateFunc( i, progressContexts, progressValues ) );
+				} else {
+					--remaining;
+				}
+			}
+		}
+
+		// if we're not waiting on anything, resolve the master
+		if ( !remaining ) {
+			deferred.resolveWith( resolveContexts, resolveValues );
+		}
+
+		return deferred.promise();
+	}
+});
+
+
+// The deferred used on DOM ready
+var readyList;
+
+jQuery.fn.ready = function( fn ) {
+	// Add the callback
+	jQuery.ready.promise().done( fn );
+
+	return this;
+};
+
+jQuery.extend({
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+
+		// Trigger any bound ready events
+		if ( jQuery.fn.triggerHandler ) {
+			jQuery( document ).triggerHandler( "ready" );
+			jQuery( document ).off( "ready" );
+		}
+	}
+});
+
+/**
+ * The ready event handler and self cleanup method
+ */
+function completed() {
+	document.removeEventListener( "DOMContentLoaded", completed, false );
+	window.removeEventListener( "load", completed, false );
+	jQuery.ready();
+}
+
+jQuery.ready.promise = function( obj ) {
+	if ( !readyList ) {
+
+		readyList = jQuery.Deferred();
+
+		// Catch cases where $(document).ready() is called after the browser event has already occurred.
+		// we once tried to use readyState "interactive" here, but it caused issues like the one
+		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+		if ( document.readyState === "complete" ) {
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			setTimeout( jQuery.ready );
+
+		} else {
+
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", completed, false );
+
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", completed, false );
+		}
+	}
+	return readyList.promise( obj );
+};
+
+// Kick off the DOM ready check even if the user does not
+jQuery.ready.promise();
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+	var i = 0,
+		len = elems.length,
+		bulk = key == null;
+
+	// Sets many values
+	if ( jQuery.type( key ) === "object" ) {
+		chainable = true;
+		for ( i in key ) {
+			jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
+		}
+
+	// Sets one value
+	} else if ( value !== undefined ) {
+		chainable = true;
+
+		if ( !jQuery.isFunction( value ) ) {
+			raw = true;
+		}
+
+		if ( bulk ) {
+			// Bulk operations run against the entire set
+			if ( raw ) {
+				fn.call( elems, value );
+				fn = null;
+
+			// ...except when executing function values
+			} else {
+				bulk = fn;
+				fn = function( elem, key, value ) {
+					return bulk.call( jQuery( elem ), value );
+				};
+			}
+		}
+
+		if ( fn ) {
+			for ( ; i < len; i++ ) {
+				fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+			}
+		}
+	}
+
+	return chainable ?
+		elems :
+
+		// Gets
+		bulk ?
+			fn.call( elems ) :
+			len ? fn( elems[0], key ) : emptyGet;
+};
+
+
+/**
+ * Determines whether an object can have data
+ */
+jQuery.acceptData = function( owner ) {
+	// Accepts only:
+	//  - Node
+	//    - Node.ELEMENT_NODE
+	//    - Node.DOCUMENT_NODE
+	//  - Object
+	//    - Any
+	/* jshint -W018 */
+	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+function Data() {
+	// Support: Android < 4,
+	// Old WebKit does not have Object.preventExtensions/freeze method,
+	// return new empty object instead with no [[set]] accessor
+	Object.defineProperty( this.cache = {}, 0, {
+		get: function() {
+			return {};
+		}
+	});
+
+	this.expando = jQuery.expando + Math.random();
+}
+
+Data.uid = 1;
+Data.accepts = jQuery.acceptData;
+
+Data.prototype = {
+	key: function( owner ) {
+		// We can accept data for non-element nodes in modern browsers,
+		// but we should not, see #8335.
+		// Always return the key for a frozen object.
+		if ( !Data.accepts( owner ) ) {
+			return 0;
+		}
+
+		var descriptor = {},
+			// Check if the owner object already has a cache key
+			unlock = owner[ this.expando ];
+
+		// If not, create one
+		if ( !unlock ) {
+			unlock = Data.uid++;
+
+			// Secure it in a non-enumerable, non-writable property
+			try {
+				descriptor[ this.expando ] = { value: unlock };
+				Object.defineProperties( owner, descriptor );
+
+			// Support: Android < 4
+			// Fallback to a less secure definition
+			} catch ( e ) {
+				descriptor[ this.expando ] = unlock;
+				jQuery.extend( owner, descriptor );
+			}
+		}
+
+		// Ensure the cache object
+		if ( !this.cache[ unlock ] ) {
+			this.cache[ unlock ] = {};
+		}
+
+		return unlock;
+	},
+	set: function( owner, data, value ) {
+		var prop,
+			// There may be an unlock assigned to this node,
+			// if there is no entry for this "owner", create one inline
+			// and set the unlock as though an owner entry had always existed
+			unlock = this.key( owner ),
+			cache = this.cache[ unlock ];
+
+		// Handle: [ owner, key, value ] args
+		if ( typeof data === "string" ) {
+			cache[ data ] = value;
+
+		// Handle: [ owner, { properties } ] args
+		} else {
+			// Fresh assignments by object are shallow copied
+			if ( jQuery.isEmptyObject( cache ) ) {
+				jQuery.extend( this.cache[ unlock ], data );
+			// Otherwise, copy the properties one-by-one to the cache object
+			} else {
+				for ( prop in data ) {
+					cache[ prop ] = data[ prop ];
+				}
+			}
+		}
+		return cache;
+	},
+	get: function( owner, key ) {
+		// Either a valid cache is found, or will be created.
+		// New caches will be created and the unlock returned,
+		// allowing direct access to the newly created
+		// empty data object. A valid owner object must be provided.
+		var cache = this.cache[ this.key( owner ) ];
+
+		return key === undefined ?
+			cache : cache[ key ];
+	},
+	access: function( owner, key, value ) {
+		var stored;
+		// In cases where either:
+		//
+		//   1. No key was specified
+		//   2. A string key was specified, but no value provided
+		//
+		// Take the "read" path and allow the get method to determine
+		// which value to return, respectively either:
+		//
+		//   1. The entire cache object
+		//   2. The data stored at the key
+		//
+		if ( key === undefined ||
+				((key && typeof key === "string") && value === undefined) ) {
+
+			stored = this.get( owner, key );
+
+			return stored !== undefined ?
+				stored : this.get( owner, jQuery.camelCase(key) );
+		}
+
+		// [*]When the key is not a string, or both a key and value
+		// are specified, set or extend (existing objects) with either:
+		//
+		//   1. An object of properties
+		//   2. A key and value
+		//
+		this.set( owner, key, value );
+
+		// Since the "set" path can have two possible entry points
+		// return the expected data based on which path was taken[*]
+		return value !== undefined ? value : key;
+	},
+	remove: function( owner, key ) {
+		var i, name, camel,
+			unlock = this.key( owner ),
+			cache = this.cache[ unlock ];
+
+		if ( key === undefined ) {
+			this.cache[ unlock ] = {};
+
+		} else {
+			// Support array or space separated string of keys
+			if ( jQuery.isArray( key ) ) {
+				// If "name" is an array of keys...
+				// When data is initially created, via ("key", "val") signature,
+				// keys will be converted to camelCase.
+				// Since there is no way to tell _how_ a key was added, remove
+				// both plain key and camelCase key. #12786
+				// This will only penalize the array argument path.
+				name = key.concat( key.map( jQuery.camelCase ) );
+			} else {
+				camel = jQuery.camelCase( key );
+				// Try the string as a key before any manipulation
+				if ( key in cache ) {
+					name = [ key, camel ];
+				} else {
+					// If a key with the spaces exists, use it.
+					// Otherwise, create an array by matching non-whitespace
+					name = camel;
+					name = name in cache ?
+						[ name ] : ( name.match( rnotwhite ) || [] );
+				}
+			}
+
+			i = name.length;
+			while ( i-- ) {
+				delete cache[ name[ i ] ];
+			}
+		}
+	},
+	hasData: function( owner ) {
+		return !jQuery.isEmptyObject(
+			this.cache[ owner[ this.expando ] ] || {}
+		);
+	},
+	discard: function( owner ) {
+		if ( owner[ this.expando ] ) {
+			delete this.cache[ owner[ this.expando ] ];
+		}
+	}
+};
+var data_priv = new Data();
+
+var data_user = new Data();
+
+
+
+/*
+	Implementation Summary
+
+	1. Enforce API surface and semantic compatibility with 1.9.x branch
+	2. Improve the module's maintainability by reducing the storage
+		paths to a single mechanism.
+	3. Use the same single mechanism to support "private" and "user" data.
+	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+	5. Avoid exposing implementation details on user objects (eg. expando properties)
+	6. Provide a clear path for implementation upgrade to WeakMap in 2014
+*/
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+	rmultiDash = /([A-Z])/g;
+
+function dataAttr( elem, key, data ) {
+	var name;
+
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+		name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+					data === "false" ? false :
+					data === "null" ? null :
+					// Only convert to a number if it doesn't change the string
+					+data + "" === data ? +data :
+					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+					data;
+			} catch( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			data_user.set( elem, key, data );
+		} else {
+			data = undefined;
+		}
+	}
+	return data;
+}
+
+jQuery.extend({
+	hasData: function( elem ) {
+		return data_user.hasData( elem ) || data_priv.hasData( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return data_user.access( elem, name, data );
+	},
+
+	removeData: function( elem, name ) {
+		data_user.remove( elem, name );
+	},
+
+	// TODO: Now that all calls to _data and _removeData have been replaced
+	// with direct calls to data_priv methods, these can be deprecated.
+	_data: function( elem, name, data ) {
+		return data_priv.access( elem, name, data );
+	},
+
+	_removeData: function( elem, name ) {
+		data_priv.remove( elem, name );
+	}
+});
+
+jQuery.fn.extend({
+	data: function( key, value ) {
+		var i, name, data,
+			elem = this[ 0 ],
+			attrs = elem && elem.attributes;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = data_user.get( elem );
+
+				if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) {
+					i = attrs.length;
+					while ( i-- ) {
+
+						// Support: IE11+
+						// The attrs elements can be null (#14894)
+						if ( attrs[ i ] ) {
+							name = attrs[ i ].name;
+							if ( name.indexOf( "data-" ) === 0 ) {
+								name = jQuery.camelCase( name.slice(5) );
+								dataAttr( elem, name, data[ name ] );
+							}
+						}
+					}
+					data_priv.set( elem, "hasDataAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each(function() {
+				data_user.set( this, key );
+			});
+		}
+
+		return access( this, function( value ) {
+			var data,
+				camelKey = jQuery.camelCase( key );
+
+			// The calling jQuery object (element matches) is not empty
+			// (and therefore has an element appears at this[ 0 ]) and the
+			// `value` parameter was not undefined. An empty jQuery object
+			// will result in `undefined` for elem = this[ 0 ] which will
+			// throw an exception if an attempt to read a data cache is made.
+			if ( elem && value === undefined ) {
+				// Attempt to get data from the cache
+				// with the key as-is
+				data = data_user.get( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// Attempt to get data from the cache
+				// with the key camelized
+				data = data_user.get( elem, camelKey );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// Attempt to "discover" the data in
+				// HTML5 custom data-* attrs
+				data = dataAttr( elem, camelKey, undefined );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// We tried really hard, but the data doesn't exist.
+				return;
+			}
+
+			// Set the data...
+			this.each(function() {
+				// First, attempt to store a copy or reference of any
+				// data that might've been store with a camelCased key.
+				var data = data_user.get( this, camelKey );
+
+				// For HTML5 data-* attribute interop, we have to
+				// store property names with dashes in a camelCase form.
+				// This might not apply to all properties...*
+				data_user.set( this, camelKey, value );
+
+				// *... In the case of properties that might _actually_
+				// have dashes, we need to also store a copy of that
+				// unchanged property.
+				if ( key.indexOf("-") !== -1 && data !== undefined ) {
+					data_user.set( this, key, value );
+				}
+			});
+		}, null, value, arguments.length > 1, null, true );
+	},
+
+	removeData: function( key ) {
+		return this.each(function() {
+			data_user.remove( this, key );
+		});
+	}
+});
+
+
+jQuery.extend({
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = data_priv.get( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || jQuery.isArray( data ) ) {
+					queue = data_priv.access( elem, type, jQuery.makeArray(data) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// not intended for public consumption - generates a queueHooks object, or returns the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return data_priv.get( elem, key ) || data_priv.access( elem, key, {
+			empty: jQuery.Callbacks("once memory").add(function() {
+				data_priv.remove( elem, [ type + "queue", key ] );
+			})
+		});
+	}
+});
+
+jQuery.fn.extend({
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[0], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each(function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[0] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			});
+	},
+	dequeue: function( type ) {
+		return this.each(function() {
+			jQuery.dequeue( this, type );
+		});
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while ( i-- ) {
+			tmp = data_priv.get( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+});
+var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var isHidden = function( elem, el ) {
+		// isHidden might be called from jQuery#filter function;
+		// in that case, element will be second argument
+		elem = el || elem;
+		return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+	};
+
+var rcheckableType = (/^(?:checkbox|radio)$/i);
+
+
+
+(function() {
+	var fragment = document.createDocumentFragment(),
+		div = fragment.appendChild( document.createElement( "div" ) ),
+		input = document.createElement( "input" );
+
+	// #11217 - WebKit loses check when the name is after the checked attribute
+	// Support: Windows Web Apps (WWA)
+	// `name` and `type` need .setAttribute for WWA
+	input.setAttribute( "type", "radio" );
+	input.setAttribute( "checked", "checked" );
+	input.setAttribute( "name", "t" );
+
+	div.appendChild( input );
+
+	// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
+	// old WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Make sure textarea (and checkbox) defaultValue is properly cloned
+	// Support: IE9-IE11+
+	div.innerHTML = "<textarea>x</textarea>";
+	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+})();
+var strundefined = typeof undefined;
+
+
+
+support.focusinBubbles = "onfocusin" in window;
+
+
+var
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
+	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+function safeActiveElement() {
+	try {
+		return document.activeElement;
+	} catch ( err ) { }
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+
+		var handleObjIn, eventHandle, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = data_priv.get( elem );
+
+		// Don't attach events to noData or text/comment nodes (but allow plain objects)
+		if ( !elemData ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !(events = elemData.events) ) {
+			events = elemData.events = {};
+		}
+		if ( !(eventHandle = elemData.handle) ) {
+			eventHandle = elemData.handle = function( e ) {
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?
+					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+			};
+		}
+
+		// Handle multiple events separated by a space
+		types = ( types || "" ).match( rnotwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tmp[1];
+			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+			// There *must* be a type, no attaching namespace-only handlers
+			if ( !type ) {
+				continue;
+			}
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend({
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join(".")
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !(handlers = events[ type ]) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener if the special events handler returns false
+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle, false );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+
+		var j, origCount, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = data_priv.hasData( elem ) && data_priv.get( elem );
+
+		if ( !elemData || !(events = elemData.events) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( rnotwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tmp[1];
+			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			delete elemData.handle;
+			data_priv.remove( elem, "events" );
+		}
+	},
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+
+		var i, cur, tmp, bubbleType, ontype, handle, special,
+			eventPath = [ elem || document ],
+			type = hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
+
+		cur = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf(".") >= 0 ) {
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split(".");
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf(":") < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+		event.isTrigger = onlyHandlers ? 2 : 3;
+		event.namespace = namespaces.join(".");
+		event.namespace_re = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === (elem.ownerDocument || document) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
+
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
+				event.result = handle.apply( cur, data );
+				if ( event.result === false ) {
+					event.preventDefault();
+				}
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
+				jQuery.acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name name as the event.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+					elem[ type ]();
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	dispatch: function( event ) {
+
+		// Make a writable jQuery.Event from the native event object
+		event = jQuery.event.fix( event );
+
+		var i, j, ret, matched, handleObj,
+			handlerQueue = [],
+			args = slice.call( arguments ),
+			handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[0] = event;
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
+
+				// Triggered event must either 1) have no namespace, or
+				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+							.apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( (event.result = ret) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var i, matches, sel, handleObj,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Find delegate handlers
+		// Black-hole SVG <use> instance trees (#13180)
+		// Avoid non-left-click bubbling in Firefox (#3861)
+		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
+
+			for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.disabled !== true || event.type !== "click" ) {
+					matches = [];
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matches[ sel ] === undefined ) {
+							matches[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) >= 0 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matches[ sel ] ) {
+							matches.push( handleObj );
+						}
+					}
+					if ( matches.length ) {
+						handlerQueue.push({ elem: cur, handlers: matches });
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
+		}
+
+		return handlerQueue;
+	},
+
+	// Includes some event props shared by KeyEvent and MouseEvent
+	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+	fixHooks: {},
+
+	keyHooks: {
+		props: "char charCode key keyCode".split(" "),
+		filter: function( event, original ) {
+
+			// Add which for key events
+			if ( event.which == null ) {
+				event.which = original.charCode != null ? original.charCode : original.keyCode;
+			}
+
+			return event;
+		}
+	},
+
+	mouseHooks: {
+		props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+		filter: function( event, original ) {
+			var eventDoc, doc, body,
+				button = original.button;
+
+			// Calculate pageX/Y if missing and clientX/Y available
+			if ( event.pageX == null && original.clientX != null ) {
+				eventDoc = event.target.ownerDocument || document;
+				doc = eventDoc.documentElement;
+				body = eventDoc.body;
+
+				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+			}
+
+			// Add which for click: 1 === left; 2 === middle; 3 === right
+			// Note: button is not normalized, so don't use it
+			if ( !event.which && button !== undefined ) {
+				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+			}
+
+			return event;
+		}
+	},
+
+	fix: function( event ) {
+		if ( event[ jQuery.expando ] ) {
+			return event;
+		}
+
+		// Create a writable copy of the event object and normalize some properties
+		var i, prop, copy,
+			type = event.type,
+			originalEvent = event,
+			fixHook = this.fixHooks[ type ];
+
+		if ( !fixHook ) {
+			this.fixHooks[ type ] = fixHook =
+				rmouseEvent.test( type ) ? this.mouseHooks :
+				rkeyEvent.test( type ) ? this.keyHooks :
+				{};
+		}
+		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+		event = new jQuery.Event( originalEvent );
+
+		i = copy.length;
+		while ( i-- ) {
+			prop = copy[ i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Support: Cordova 2.5 (WebKit) (#13255)
+		// All events should have a target; Cordova deviceready doesn't
+		if ( !event.target ) {
+			event.target = document;
+		}
+
+		// Support: Safari 6.0+, Chrome < 28
+		// Target should not be a text node (#504, #13143)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+	},
+
+	special: {
+		load: {
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		focus: {
+			// Fire native event if possible so blur/focus sequence is correct
+			trigger: function() {
+				if ( this !== safeActiveElement() && this.focus ) {
+					this.focus();
+					return false;
+				}
+			},
+			delegateType: "focusin"
+		},
+		blur: {
+			trigger: function() {
+				if ( this === safeActiveElement() && this.blur ) {
+					this.blur();
+					return false;
+				}
+			},
+			delegateType: "focusout"
+		},
+		click: {
+			// For checkbox, fire native event so checked state will be right
+			trigger: function() {
+				if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
+					this.click();
+					return false;
+				}
+			},
+
+			// For cross-browser consistency, don't fire native .click() on links
+			_default: function( event ) {
+				return jQuery.nodeName( event.target, "a" );
+			}
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Support: Firefox 20+
+				// Firefox doesn't alert if the returnValue field is not set.
+				if ( event.result !== undefined && event.originalEvent ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	},
+
+	simulate: function( type, elem, event, bubble ) {
+		// Piggyback on a donor event to simulate a different one.
+		// Fake originalEvent to avoid donor's stopPropagation, but if the
+		// simulated event prevents default then we do the same on the donor.
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{
+				type: type,
+				isSimulated: true,
+				originalEvent: {}
+			}
+		);
+		if ( bubble ) {
+			jQuery.event.trigger( e, null, elem );
+		} else {
+			jQuery.event.dispatch.call( elem, e );
+		}
+		if ( e.isDefaultPrevented() ) {
+			event.preventDefault();
+		}
+	}
+};
+
+jQuery.removeEvent = function( elem, type, handle ) {
+	if ( elem.removeEventListener ) {
+		elem.removeEventListener( type, handle, false );
+	}
+};
+
+jQuery.Event = function( src, props ) {
+	// Allow instantiation without the 'new' keyword
+	if ( !(this instanceof jQuery.Event) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = src.defaultPrevented ||
+				src.defaultPrevented === undefined &&
+				// Support: Android < 4.0
+				src.returnValue === false ?
+			returnTrue :
+			returnFalse;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+
+		if ( e && e.preventDefault ) {
+			e.preventDefault();
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+
+		if ( e && e.stopPropagation ) {
+			e.stopPropagation();
+		}
+	},
+	stopImmediatePropagation: function() {
+		var e = this.originalEvent;
+
+		this.isImmediatePropagationStopped = returnTrue;
+
+		if ( e && e.stopImmediatePropagation ) {
+			e.stopImmediatePropagation();
+		}
+
+		this.stopPropagation();
+	}
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// Support: Chrome 15+
+jQuery.each({
+	mouseenter: "mouseover",
+	mouseleave: "mouseout",
+	pointerenter: "pointerover",
+	pointerleave: "pointerout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mousenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+});
+
+// Create "bubbling" focus and blur events
+// Support: Firefox, Chrome, Safari
+if ( !support.focusinBubbles ) {
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler on the document while someone wants focusin/focusout
+		var handler = function( event ) {
+				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+			};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				var doc = this.ownerDocument || this,
+					attaches = data_priv.access( doc, fix );
+
+				if ( !attaches ) {
+					doc.addEventListener( orig, handler, true );
+				}
+				data_priv.access( doc, fix, ( attaches || 0 ) + 1 );
+			},
+			teardown: function() {
+				var doc = this.ownerDocument || this,
+					attaches = data_priv.access( doc, fix ) - 1;
+
+				if ( !attaches ) {
+					doc.removeEventListener( orig, handler, true );
+					data_priv.remove( doc, fix );
+
+				} else {
+					data_priv.access( doc, fix, attaches );
+				}
+			}
+		};
+	});
+}
+
+jQuery.fn.extend({
+
+	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+		var origFn, type;
+
+		// Types can be a map of types/handlers
+		if ( typeof types === "object" ) {
+			// ( types-Object, selector, data )
+			if ( typeof selector !== "string" ) {
+				// ( types-Object, data )
+				data = data || selector;
+				selector = undefined;
+			}
+			for ( type in types ) {
+				this.on( type, selector, data, types[ type ], one );
+			}
+			return this;
+		}
+
+		if ( data == null && fn == null ) {
+			// ( types, fn )
+			fn = selector;
+			data = selector = undefined;
+		} else if ( fn == null ) {
+			if ( typeof selector === "string" ) {
+				// ( types, selector, fn )
+				fn = data;
+				data = undefined;
+			} else {
+				// ( types, data, fn )
+				fn = data;
+				data = selector;
+				selector = undefined;
+			}
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		} else if ( !fn ) {
+			return this;
+		}
+
+		if ( one === 1 ) {
+			origFn = fn;
+			fn = function( event ) {
+				// Can use an empty set, since event contains the info
+				jQuery().off( event );
+				return origFn.apply( this, arguments );
+			};
+			// Use same guid so caller can remove using origFn
+			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+		}
+		return this.each( function() {
+			jQuery.event.add( this, types, fn, data, selector );
+		});
+	},
+	one: function( types, selector, data, fn ) {
+		return this.on( types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each(function() {
+			jQuery.event.remove( this, types, fn, selector );
+		});
+	},
+
+	trigger: function( type, data ) {
+		return this.each(function() {
+			jQuery.event.trigger( type, data, this );
+		});
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[0];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	}
+});
+
+
+var
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+	rtagName = /<([\w:]+)/,
+	rhtml = /<|&#?\w+;/,
+	rnoInnerhtml = /<(?:script|style|link)/i,
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptType = /^$|\/(?:java|ecma)script/i,
+	rscriptTypeMasked = /^true\/(.*)/,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+
+	// We have to close these tags to support XHTML (#13200)
+	wrapMap = {
+
+		// Support: IE 9
+		option: [ 1, "<select multiple='multiple'>", "</select>" ],
+
+		thead: [ 1, "<table>", "</table>" ],
+		col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+		_default: [ 0, "", "" ]
+	};
+
+// Support: IE 9
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// Support: 1.x compatibility
+// Manipulating tables requires a tbody
+function manipulationTarget( elem, content ) {
+	return jQuery.nodeName( elem, "table" ) &&
+		jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
+
+		elem.getElementsByTagName("tbody")[0] ||
+			elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
+		elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	var match = rscriptTypeMasked.exec( elem.type );
+
+	if ( match ) {
+		elem.type = match[ 1 ];
+	} else {
+		elem.removeAttribute("type");
+	}
+
+	return elem;
+}
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		data_priv.set(
+			elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" )
+		);
+	}
+}
+
+function cloneCopyEvent( src, dest ) {
+	var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// 1. Copy private data: events, handlers, etc.
+	if ( data_priv.hasData( src ) ) {
+		pdataOld = data_priv.access( src );
+		pdataCur = data_priv.set( dest, pdataOld );
+		events = pdataOld.events;
+
+		if ( events ) {
+			delete pdataCur.handle;
+			pdataCur.events = {};
+
+			for ( type in events ) {
+				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+					jQuery.event.add( dest, type, events[ type ][ i ] );
+				}
+			}
+		}
+	}
+
+	// 2. Copy user data
+	if ( data_user.hasData( src ) ) {
+		udataOld = data_user.access( src );
+		udataCur = jQuery.extend( {}, udataOld );
+
+		data_user.set( dest, udataCur );
+	}
+}
+
+function getAll( context, tag ) {
+	var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) :
+			context.querySelectorAll ? context.querySelectorAll( tag || "*" ) :
+			[];
+
+	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+		jQuery.merge( [ context ], ret ) :
+		ret;
+}
+
+// Support: IE >= 9
+function fixInput( src, dest ) {
+	var nodeName = dest.nodeName.toLowerCase();
+
+	// Fails to persist the checked state of a cloned checkbox or radio button.
+	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+		dest.checked = src.checked;
+
+	// Fails to return the selected option to the default selected state when cloning options
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+jQuery.extend({
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var i, l, srcElements, destElements,
+			clone = elem.cloneNode( true ),
+			inPage = jQuery.contains( elem.ownerDocument, elem );
+
+		// Support: IE >= 9
+		// Fix Cloning issues
+		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+				!jQuery.isXMLDoc( elem ) ) {
+
+			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			for ( i = 0, l = srcElements.length; i < l; i++ ) {
+				fixInput( srcElements[ i ], destElements[ i ] );
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0, l = srcElements.length; i < l; i++ ) {
+					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		// Return the cloned set
+		return clone;
+	},
+
+	buildFragment: function( elems, context, scripts, selection ) {
+		var elem, tmp, tag, wrap, contains, j,
+			fragment = context.createDocumentFragment(),
+			nodes = [],
+			i = 0,
+			l = elems.length;
+
+		for ( ; i < l; i++ ) {
+			elem = elems[ i ];
+
+			if ( elem || elem === 0 ) {
+
+				// Add nodes directly
+				if ( jQuery.type( elem ) === "object" ) {
+					// Support: QtWebKit
+					// jQuery.merge because push.apply(_, arraylike) throws
+					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+				// Convert non-html into a text node
+				} else if ( !rhtml.test( elem ) ) {
+					nodes.push( context.createTextNode( elem ) );
+
+				// Convert html into DOM nodes
+				} else {
+					tmp = tmp || fragment.appendChild( context.createElement("div") );
+
+					// Deserialize a standard representation
+					tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+					wrap = wrapMap[ tag ] || wrapMap._default;
+					tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ];
+
+					// Descend through wrappers to the right content
+					j = wrap[ 0 ];
+					while ( j-- ) {
+						tmp = tmp.lastChild;
+					}
+
+					// Support: QtWebKit
+					// jQuery.merge because push.apply(_, arraylike) throws
+					jQuery.merge( nodes, tmp.childNodes );
+
+					// Remember the top-level container
+					tmp = fragment.firstChild;
+
+					// Fixes #12346
+					// Support: Webkit, IE
+					tmp.textContent = "";
+				}
+			}
+		}
+
+		// Remove wrapper from fragment
+		fragment.textContent = "";
+
+		i = 0;
+		while ( (elem = nodes[ i++ ]) ) {
+
+			// #4087 - If origin and destination elements are the same, and this is
+			// that element, do not do anything
+			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
+				continue;
+			}
+
+			contains = jQuery.contains( elem.ownerDocument, elem );
+
+			// Append to fragment
+			tmp = getAll( fragment.appendChild( elem ), "script" );
+
+			// Preserve script evaluation history
+			if ( contains ) {
+				setGlobalEval( tmp );
+			}
+
+			// Capture executables
+			if ( scripts ) {
+				j = 0;
+				while ( (elem = tmp[ j++ ]) ) {
+					if ( rscriptType.test( elem.type || "" ) ) {
+						scripts.push( elem );
+					}
+				}
+			}
+		}
+
+		return fragment;
+	},
+
+	cleanData: function( elems ) {
+		var data, elem, type, key,
+			special = jQuery.event.special,
+			i = 0;
+
+		for ( ; (elem = elems[ i ]) !== undefined; i++ ) {
+			if ( jQuery.acceptData( elem ) ) {
+				key = elem[ data_priv.expando ];
+
+				if ( key && (data = data_priv.cache[ key ]) ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+					if ( data_priv.cache[ key ] ) {
+						// Discard any remaining `private` data
+						delete data_priv.cache[ key ];
+					}
+				}
+			}
+			// Discard any remaining `user` data
+			delete data_user.cache[ elem[ data_user.expando ] ];
+		}
+	}
+});
+
+jQuery.fn.extend({
+	text: function( value ) {
+		return access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().each(function() {
+					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+						this.textContent = value;
+					}
+				});
+		}, null, value, arguments.length );
+	},
+
+	append: function() {
+		return this.domManip( arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.appendChild( elem );
+			}
+		});
+	},
+
+	prepend: function() {
+		return this.domManip( arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.insertBefore( elem, target.firstChild );
+			}
+		});
+	},
+
+	before: function() {
+		return this.domManip( arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		});
+	},
+
+	after: function() {
+		return this.domManip( arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		});
+	},
+
+	remove: function( selector, keepData /* Internal Use Only */ ) {
+		var elem,
+			elems = selector ? jQuery.filter( selector, this ) : this,
+			i = 0;
+
+		for ( ; (elem = elems[i]) != null; i++ ) {
+			if ( !keepData && elem.nodeType === 1 ) {
+				jQuery.cleanData( getAll( elem ) );
+			}
+
+			if ( elem.parentNode ) {
+				if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
+					setGlobalEval( getAll( elem, "script" ) );
+				}
+				elem.parentNode.removeChild( elem );
+			}
+		}
+
+		return this;
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; (elem = this[i]) != null; i++ ) {
+			if ( elem.nodeType === 1 ) {
+
+				// Prevent memory leaks
+				jQuery.cleanData( getAll( elem, false ) );
+
+				// Remove any remaining nodes
+				elem.textContent = "";
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map(function() {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		});
+	},
+
+	html: function( value ) {
+		return access( this, function( value ) {
+			var elem = this[ 0 ] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined && elem.nodeType === 1 ) {
+				return elem.innerHTML;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+				value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+				try {
+					for ( ; i < l; i++ ) {
+						elem = this[ i ] || {};
+
+						// Remove element nodes and prevent memory leaks
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch( e ) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function() {
+		var arg = arguments[ 0 ];
+
+		// Make the changes, replacing each context element with the new content
+		this.domManip( arguments, function( elem ) {
+			arg = this.parentNode;
+
+			jQuery.cleanData( getAll( this ) );
+
+			if ( arg ) {
+				arg.replaceChild( elem, this );
+			}
+		});
+
+		// Force removal if there was no new content (e.g., from empty arguments)
+		return arg && (arg.length || arg.nodeType) ? this : this.remove();
+	},
+
+	detach: function( selector ) {
+		return this.remove( selector, true );
+	},
+
+	domManip: function( args, callback ) {
+
+		// Flatten any nested arrays
+		args = concat.apply( [], args );
+
+		var fragment, first, scripts, hasScripts, node, doc,
+			i = 0,
+			l = this.length,
+			set = this,
+			iNoClone = l - 1,
+			value = args[ 0 ],
+			isFunction = jQuery.isFunction( value );
+
+		// We can't cloneNode fragments that contain checked, in WebKit
+		if ( isFunction ||
+				( l > 1 && typeof value === "string" &&
+					!support.checkClone && rchecked.test( value ) ) ) {
+			return this.each(function( index ) {
+				var self = set.eq( index );
+				if ( isFunction ) {
+					args[ 0 ] = value.call( this, index, self.html() );
+				}
+				self.domManip( args, callback );
+			});
+		}
+
+		if ( l ) {
+			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
+			first = fragment.firstChild;
+
+			if ( fragment.childNodes.length === 1 ) {
+				fragment = first;
+			}
+
+			if ( first ) {
+				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+				hasScripts = scripts.length;
+
+				// Use the original fragment for the last item instead of the first because it can end up
+				// being emptied incorrectly in certain situations (#8070).
+				for ( ; i < l; i++ ) {
+					node = fragment;
+
+					if ( i !== iNoClone ) {
+						node = jQuery.clone( node, true, true );
+
+						// Keep references to cloned scripts for later restoration
+						if ( hasScripts ) {
+							// Support: QtWebKit
+							// jQuery.merge because push.apply(_, arraylike) throws
+							jQuery.merge( scripts, getAll( node, "script" ) );
+						}
+					}
+
+					callback.call( this[ i ], node, i );
+				}
+
+				if ( hasScripts ) {
+					doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+					// Reenable scripts
+					jQuery.map( scripts, restoreScript );
+
+					// Evaluate executable scripts on first document insertion
+					for ( i = 0; i < hasScripts; i++ ) {
+						node = scripts[ i ];
+						if ( rscriptType.test( node.type || "" ) &&
+							!data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
+
+							if ( node.src ) {
+								// Optional AJAX dependency, but won't run scripts if not present
+								if ( jQuery._evalUrl ) {
+									jQuery._evalUrl( node.src );
+								}
+							} else {
+								jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) );
+							}
+						}
+					}
+				}
+			}
+		}
+
+		return this;
+	}
+});
+
+jQuery.each({
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1,
+			i = 0;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone( true );
+			jQuery( insert[ i ] )[ original ]( elems );
+
+			// Support: QtWebKit
+			// .get() because push.apply(_, arraylike) throws
+			push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+});
+
+
+var iframe,
+	elemdisplay = {};
+
+/**
+ * Retrieve the actual display of a element
+ * @param {String} name nodeName of the element
+ * @param {Object} doc Document object
+ */
+// Called only from within defaultDisplay
+function actualDisplay( name, doc ) {
+	var style,
+		elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+
+		// getDefaultComputedStyle might be reliably used only on attached element
+		display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
+
+			// Use of this method is a temporary fix (more like optmization) until something better comes along,
+			// since it was removed from specification and supported only in FF
+			style.display : jQuery.css( elem[ 0 ], "display" );
+
+	// We don't have any data stored on the element,
+	// so use "detach" method as fast way to get rid of the element
+	elem.detach();
+
+	return display;
+}
+
+/**
+ * Try to determine the default display value of an element
+ * @param {String} nodeName
+ */
+function defaultDisplay( nodeName ) {
+	var doc = document,
+		display = elemdisplay[ nodeName ];
+
+	if ( !display ) {
+		display = actualDisplay( nodeName, doc );
+
+		// If the simple way fails, read from inside an iframe
+		if ( display === "none" || !display ) {
+
+			// Use the already-created iframe if possible
+			iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
+
+			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+			doc = iframe[ 0 ].contentDocument;
+
+			// Support: IE
+			doc.write();
+			doc.close();
+
+			display = actualDisplay( nodeName, doc );
+			iframe.detach();
+		}
+
+		// Store the correct default display
+		elemdisplay[ nodeName ] = display;
+	}
+
+	return display;
+}
+var rmargin = (/^margin/);
+
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+		return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
+	};
+
+
+
+function curCSS( elem, name, computed ) {
+	var width, minWidth, maxWidth, ret,
+		style = elem.style;
+
+	computed = computed || getStyles( elem );
+
+	// Support: IE9
+	// getPropertyValue is only needed for .css('filter') in IE9, see #12537
+	if ( computed ) {
+		ret = computed.getPropertyValue( name ) || computed[ name ];
+	}
+
+	if ( computed ) {
+
+		if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+			ret = jQuery.style( elem, name );
+		}
+
+		// Support: iOS < 6
+		// A tribute to the "awesome hack by Dean Edwards"
+		// iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+		// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+		if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+			// Remember the original values
+			width = style.width;
+			minWidth = style.minWidth;
+			maxWidth = style.maxWidth;
+
+			// Put in the new values to get a computed value out
+			style.minWidth = style.maxWidth = style.width = ret;
+			ret = computed.width;
+
+			// Revert the changed values
+			style.width = width;
+			style.minWidth = minWidth;
+			style.maxWidth = maxWidth;
+		}
+	}
+
+	return ret !== undefined ?
+		// Support: IE
+		// IE returns zIndex value as an integer.
+		ret + "" :
+		ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+	// Define the hook, we'll check on the first run if it's really needed.
+	return {
+		get: function() {
+			if ( conditionFn() ) {
+				// Hook not needed (or it's not possible to use it due to missing dependency),
+				// remove it.
+				// Since there are no other hooks for marginRight, remove the whole object.
+				delete this.get;
+				return;
+			}
+
+			// Hook needed; redefine it so that the support test is not executed again.
+
+			return (this.get = hookFn).apply( this, arguments );
+		}
+	};
+}
+
+
+(function() {
+	var pixelPositionVal, boxSizingReliableVal,
+		docElem = document.documentElement,
+		container = document.createElement( "div" ),
+		div = document.createElement( "div" );
+
+	if ( !div.style ) {
+		return;
+	}
+
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" +
+		"position:absolute";
+	container.appendChild( div );
+
+	// Executing both pixelPosition & boxSizingReliable tests require only one layout
+	// so they're executed at the same time to save the second computation.
+	function computePixelPositionAndBoxSizingReliable() {
+		div.style.cssText =
+			// Support: Firefox<29, Android 2.3
+			// Vendor-prefix box-sizing
+			"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
+			"box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
+			"border:1px;padding:1px;width:4px;position:absolute";
+		div.innerHTML = "";
+		docElem.appendChild( container );
+
+		var divStyle = window.getComputedStyle( div, null );
+		pixelPositionVal = divStyle.top !== "1%";
+		boxSizingReliableVal = divStyle.width === "4px";
+
+		docElem.removeChild( container );
+	}
+
+	// Support: node.js jsdom
+	// Don't assume that getComputedStyle is a property of the global object
+	if ( window.getComputedStyle ) {
+		jQuery.extend( support, {
+			pixelPosition: function() {
+				// This test is executed only once but we still do memoizing
+				// since we can use the boxSizingReliable pre-computing.
+				// No need to check if the test was already performed, though.
+				computePixelPositionAndBoxSizingReliable();
+				return pixelPositionVal;
+			},
+			boxSizingReliable: function() {
+				if ( boxSizingReliableVal == null ) {
+					computePixelPositionAndBoxSizingReliable();
+				}
+				return boxSizingReliableVal;
+			},
+			reliableMarginRight: function() {
+				// Support: Android 2.3
+				// Check if div with explicit width and no margin-right incorrectly
+				// gets computed margin-right based on width of container. (#3333)
+				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+				// This support function is only executed once so no memoizing is needed.
+				var ret,
+					marginDiv = div.appendChild( document.createElement( "div" ) );
+
+				// Reset CSS: box-sizing; display; margin; border; padding
+				marginDiv.style.cssText = div.style.cssText =
+					// Support: Firefox<29, Android 2.3
+					// Vendor-prefix box-sizing
+					"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
+					"box-sizing:content-box;display:block;margin:0;border:0;padding:0";
+				marginDiv.style.marginRight = marginDiv.style.width = "0";
+				div.style.width = "1px";
+				docElem.appendChild( container );
+
+				ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );
+
+				docElem.removeChild( container );
+
+				return ret;
+			}
+		});
+	}
+})();
+
+
+// A method for quickly swapping in/out CSS properties to get correct calculations.
+jQuery.swap = function( elem, options, callback, args ) {
+	var ret, name,
+		old = {};
+
+	// Remember the old values, and insert the new ones
+	for ( name in options ) {
+		old[ name ] = elem.style[ name ];
+		elem.style[ name ] = options[ name ];
+	}
+
+	ret = callback.apply( elem, args || [] );
+
+	// Revert the old values
+	for ( name in options ) {
+		elem.style[ name ] = old[ name ];
+	}
+
+	return ret;
+};
+
+
+var
+	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
+	rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: "0",
+		fontWeight: "400"
+	},
+
+	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
+
+// return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( style, name ) {
+
+	// shortcut for names that are not vendor prefixed
+	if ( name in style ) {
+		return name;
+	}
+
+	// check for vendor prefixed names
+	var capName = name[0].toUpperCase() + name.slice(1),
+		origName = name,
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in style ) {
+			return name;
+		}
+	}
+
+	return origName;
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+	var matches = rnumsplit.exec( value );
+	return matches ?
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+		value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+	var i = extra === ( isBorderBox ? "border" : "content" ) ?
+		// If we already have the right measurement, avoid augmentation
+		4 :
+		// Otherwise initialize for horizontal or vertical properties
+		name === "width" ? 1 : 0,
+
+		val = 0;
+
+	for ( ; i < 4; i += 2 ) {
+		// both box models exclude margin, so add it if we want it
+		if ( extra === "margin" ) {
+			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+		}
+
+		if ( isBorderBox ) {
+			// border-box includes padding, so remove it if we want content
+			if ( extra === "content" ) {
+				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// at this point, extra isn't border nor margin, so remove border
+			if ( extra !== "margin" ) {
+				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		} else {
+			// at this point, extra isn't content, so add padding
+			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// at this point, extra isn't content nor padding, so add border
+			if ( extra !== "padding" ) {
+				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+	// Start with offset property, which is equivalent to the border-box value
+	var valueIsBorderBox = true,
+		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+		styles = getStyles( elem ),
+		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+	// some non-html elements return undefined for offsetWidth, so check for null/undefined
+	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+	if ( val <= 0 || val == null ) {
+		// Fall back to computed then uncomputed css if necessary
+		val = curCSS( elem, name, styles );
+		if ( val < 0 || val == null ) {
+			val = elem.style[ name ];
+		}
+
+		// Computed unit is not pixels. Stop here and return.
+		if ( rnumnonpx.test(val) ) {
+			return val;
+		}
+
+		// we need the check for style in case a browser which returns unreliable values
+		// for getComputedStyle silently falls back to the reliable elem.style
+		valueIsBorderBox = isBorderBox &&
+			( support.boxSizingReliable() || val === elem.style[ name ] );
+
+		// Normalize "", auto, and prepare for extra
+		val = parseFloat( val ) || 0;
+	}
+
+	// use the active box-sizing model to add/subtract irrelevant styles
+	return ( val +
+		augmentWidthOrHeight(
+			elem,
+			name,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles
+		)
+	) + "px";
+}
+
+function showHide( elements, show ) {
+	var display, elem, hidden,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+
+		values[ index ] = data_priv.get( elem, "olddisplay" );
+		display = elem.style.display;
+		if ( show ) {
+			// Reset the inline display of this element to learn if it is
+			// being hidden by cascaded rules or not
+			if ( !values[ index ] && display === "none" ) {
+				elem.style.display = "";
+			}
+
+			// Set elements which have been overridden with display: none
+			// in a stylesheet to whatever the default browser style is
+			// for such an element
+			if ( elem.style.display === "" && isHidden( elem ) ) {
+				values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) );
+			}
+		} else {
+			hidden = isHidden( elem );
+
+			if ( display !== "none" || !hidden ) {
+				data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
+			}
+		}
+	}
+
+	// Set the display of most of the elements in a second loop
+	// to avoid the constant reflow
+	for ( index = 0; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+			elem.style.display = show ? values[ index ] || "" : "none";
+		}
+	}
+
+	return elements;
+}
+
+jQuery.extend({
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Don't automatically add "px" to these possibly-unitless properties
+	cssNumber: {
+		"columnCount": true,
+		"fillOpacity": true,
+		"flexGrow": true,
+		"flexShrink": true,
+		"fontWeight": true,
+		"lineHeight": true,
+		"opacity": true,
+		"order": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		// normalize float css property
+		"float": "cssFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = jQuery.camelCase( name ),
+			style = elem.style;
+
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// convert relative number strings (+= or -=) to relative numbers. #7345
+			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that null and NaN values aren't set. See: #7116
+			if ( value == null || value !== value ) {
+				return;
+			}
+
+			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+				value += "px";
+			}
+
+			// Fixes #8908, it can be done more correctly by specifying setters in cssHooks,
+			// but it would mean to define eight (for every problematic property) identical functions
+			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+				style[ name ] = value;
+			}
+
+		} else {
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var val, num, hooks,
+			origName = jQuery.camelCase( name );
+
+		// Make sure that we're working with the right name
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		//convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Return, converting to number if forced or a qualifier was provided and val looks numeric
+		if ( extra === "" || extra ) {
+			num = parseFloat( val );
+			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
+		}
+		return val;
+	}
+});
+
+jQuery.each([ "height", "width" ], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+				// certain elements can have dimension info if we invisibly show them
+				// however, it must have a current display style that would benefit from this
+				return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
+					jQuery.swap( elem, cssShow, function() {
+						return getWidthOrHeight( elem, name, extra );
+					}) :
+					getWidthOrHeight( elem, name, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var styles = extra && getStyles( elem );
+			return setPositiveNumber( elem, value, extra ?
+				augmentWidthOrHeight(
+					elem,
+					name,
+					extra,
+					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+					styles
+				) : 0
+			);
+		}
+	};
+});
+
+// Support: Android 2.3
+jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
+	function( elem, computed ) {
+		if ( computed ) {
+			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+			// Work around by temporarily setting element display to inline-block
+			return jQuery.swap( elem, { "display": "inline-block" },
+				curCSS, [ elem, "marginRight" ] );
+		}
+	}
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each({
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// assumes a single number if not a string
+				parts = typeof value === "string" ? value.split(" ") : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( !rmargin.test( prefix ) ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+});
+
+jQuery.fn.extend({
+	css: function( name, value ) {
+		return access( this, function( elem, name, value ) {
+			var styles, len,
+				map = {},
+				i = 0;
+
+			if ( jQuery.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	},
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		if ( typeof state === "boolean" ) {
+			return state ? this.show() : this.hide();
+		}
+
+		return this.each(function() {
+			if ( isHidden( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		});
+	}
+});
+
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || "swing";
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			if ( tween.elem[ tween.prop ] != null &&
+				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// passing an empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails
+			// so, simple values such as "10px" are parsed to Float.
+			// complex values such as "rotate(1rad)" are returned as is.
+			result = jQuery.css( tween.elem, tween.prop, "" );
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+			// use step hook for back compat - use cssHook if its there - use .style if its
+			// available and use plain properties where available
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Support: IE9
+// Panic based approach to setting things on disconnected nodes
+
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p * Math.PI ) / 2;
+	}
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+	fxNow, timerId,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
+	rrun = /queueHooks$/,
+	animationPrefilters = [ defaultPrefilter ],
+	tweeners = {
+		"*": [ function( prop, value ) {
+			var tween = this.createTween( prop, value ),
+				target = tween.cur(),
+				parts = rfxnum.exec( value ),
+				unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+				// Starting value computation is required for potential unit mismatches
+				start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
+					rfxnum.exec( jQuery.css( tween.elem, prop ) ),
+				scale = 1,
+				maxIterations = 20;
+
+			if ( start && start[ 3 ] !== unit ) {
+				// Trust units reported by jQuery.css
+				unit = unit || start[ 3 ];
+
+				// Make sure we update the tween properties later on
+				parts = parts || [];
+
+				// Iteratively approximate from a nonzero starting point
+				start = +target || 1;
+
+				do {
+					// If previous iteration zeroed out, double until we get *something*
+					// Use a string for doubling factor so we don't accidentally see scale as unchanged below
+					scale = scale || ".5";
+
+					// Adjust and apply
+					start = start / scale;
+					jQuery.style( tween.elem, prop, start + unit );
+
+				// Update scale, tolerating zero or NaN from tween.cur()
+				// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+				} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+			}
+
+			// Update tween properties
+			if ( parts ) {
+				start = tween.start = +start || +target || 0;
+				tween.unit = unit;
+				// If a +=/-= token was provided, we're doing a relative animation
+				tween.end = parts[ 1 ] ?
+					start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
+					+parts[ 2 ];
+			}
+
+			return tween;
+		} ]
+	};
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	setTimeout(function() {
+		fxNow = undefined;
+	});
+	return ( fxNow = jQuery.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		i = 0,
+		attrs = { height: type };
+
+	// if we include width, step value is 1 to do all cssExpand values,
+	// if we don't include width, step value is 2 to skip over Left and Right
+	includeWidth = includeWidth ? 1 : 0;
+	for ( ; i < 4 ; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+function createTween( value, prop, animation ) {
+	var tween,
+		collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+		index = 0,
+		length = collection.length;
+	for ( ; index < length; index++ ) {
+		if ( (tween = collection[ index ].call( animation, prop, value )) ) {
+
+			// we're done with this property
+			return tween;
+		}
+	}
+}
+
+function defaultPrefilter( elem, props, opts ) {
+	/* jshint validthis: true */
+	var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
+		anim = this,
+		orig = {},
+		style = elem.style,
+		hidden = elem.nodeType && isHidden( elem ),
+		dataShow = data_priv.get( elem, "fxshow" );
+
+	// handle queue: false promises
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always(function() {
+			// doing this makes sure that the complete handler will be called
+			// before this completes
+			anim.always(function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			});
+		});
+	}
+
+	// height/width overflow pass
+	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+		// Make sure that nothing sneaks out
+		// Record all 3 overflow attributes because IE9-10 do not
+		// change the overflow attribute when overflowX and
+		// overflowY are set to the same value
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Set display property to inline-block for height/width
+		// animations on inline elements that are having width/height animated
+		display = jQuery.css( elem, "display" );
+
+		// Test default display if display is currently "none"
+		checkDisplay = display === "none" ?
+			data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
+
+		if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
+			style.display = "inline-block";
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		anim.always(function() {
+			style.overflow = opts.overflow[ 0 ];
+			style.overflowX = opts.overflow[ 1 ];
+			style.overflowY = opts.overflow[ 2 ];
+		});
+	}
+
+	// show/hide pass
+	for ( prop in props ) {
+		value = props[ prop ];
+		if ( rfxtypes.exec( value ) ) {
+			delete props[ prop ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+
+				// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
+				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+					hidden = true;
+				} else {
+					continue;
+				}
+			}
+			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+
+		// Any non-fx value stops us from restoring the original display value
+		} else {
+			display = undefined;
+		}
+	}
+
+	if ( !jQuery.isEmptyObject( orig ) ) {
+		if ( dataShow ) {
+			if ( "hidden" in dataShow ) {
+				hidden = dataShow.hidden;
+			}
+		} else {
+			dataShow = data_priv.access( elem, "fxshow", {} );
+		}
+
+		// store state if its toggle - enables .stop().toggle() to "reverse"
+		if ( toggle ) {
+			dataShow.hidden = !hidden;
+		}
+		if ( hidden ) {
+			jQuery( elem ).show();
+		} else {
+			anim.done(function() {
+				jQuery( elem ).hide();
+			});
+		}
+		anim.done(function() {
+			var prop;
+
+			data_priv.remove( elem, "fxshow" );
+			for ( prop in orig ) {
+				jQuery.style( elem, prop, orig[ prop ] );
+			}
+		});
+		for ( prop in orig ) {
+			tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+
+			if ( !( prop in dataShow ) ) {
+				dataShow[ prop ] = tween.start;
+				if ( hidden ) {
+					tween.end = tween.start;
+					tween.start = prop === "width" || prop === "height" ? 1 : 0;
+				}
+			}
+		}
+
+	// If this is a noop like .hide().hide(), restore an overwritten display value
+	} else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
+		style.display = display;
+	}
+}
+
+function propFilter( props, specialEasing ) {
+	var index, name, easing, value, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = jQuery.camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( jQuery.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// not quite $.extend, this wont overwrite keys already present.
+			// also - reusing 'index' from above because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = animationPrefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+			// don't match elem in the :animated selector
+			delete tick.elem;
+		}),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length ; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ]);
+
+			if ( percent < 1 && length ) {
+				return remaining;
+			} else {
+				deferred.resolveWith( elem, [ animation ] );
+				return false;
+			}
+		},
+		animation = deferred.promise({
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, { specialEasing: {} }, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+					// if we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length ; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// resolve when we played the last frame
+				// otherwise, reject
+				if ( gotoEnd ) {
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		}),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length ; index++ ) {
+		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			return result;
+		}
+	}
+
+	jQuery.map( props, createTween, animation );
+
+	if ( jQuery.isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		})
+	);
+
+	// attach callbacks from options
+	return animation.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+	tweener: function( props, callback ) {
+		if ( jQuery.isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.split(" ");
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length ; index++ ) {
+			prop = props[ index ];
+			tweeners[ prop ] = tweeners[ prop ] || [];
+			tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			animationPrefilters.unshift( callback );
+		} else {
+			animationPrefilters.push( callback );
+		}
+	}
+});
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			jQuery.isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+	};
+
+	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+	// normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( jQuery.isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.fn.extend({
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// show any hidden elements after setting opacity to 0
+		return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+			// animate to the value specified
+			.end().animate({ opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+				// Empty animations, or finishing resolves immediately
+				if ( empty || data_priv.get( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each(function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = data_priv.get( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// start the next in the queue if the last step wasn't forced
+			// timers currently will call their complete callbacks, which will dequeue
+			// but only if they were gotoEnd
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		});
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each(function() {
+			var index,
+				data = data_priv.get( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// enable finishing flag on private data
+			data.finish = true;
+
+			// empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.stop ) {
+				hooks.stop.call( this, true );
+			}
+
+			// look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// turn off finishing flag
+			delete data.finish;
+		});
+	}
+});
+
+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+});
+
+// Generate shortcuts for custom animations
+jQuery.each({
+	slideDown: genFx("show"),
+	slideUp: genFx("hide"),
+	slideToggle: genFx("toggle"),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+});
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+	var timer,
+		i = 0,
+		timers = jQuery.timers;
+
+	fxNow = jQuery.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+		// Checks the timer has not already been removed
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	jQuery.timers.push( timer );
+	if ( timer() ) {
+		jQuery.fx.start();
+	} else {
+		jQuery.timers.pop();
+	}
+};
+
+jQuery.fx.interval = 13;
+
+jQuery.fx.start = function() {
+	if ( !timerId ) {
+		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+	}
+};
+
+jQuery.fx.stop = function() {
+	clearInterval( timerId );
+	timerId = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+	// Default speed
+	_default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+	type = type || "fx";
+
+	return this.queue( type, function( next, hooks ) {
+		var timeout = setTimeout( next, time );
+		hooks.stop = function() {
+			clearTimeout( timeout );
+		};
+	});
+};
+
+
+(function() {
+	var input = document.createElement( "input" ),
+		select = document.createElement( "select" ),
+		opt = select.appendChild( document.createElement( "option" ) );
+
+	input.type = "checkbox";
+
+	// Support: iOS 5.1, Android 4.x, Android 2.3
+	// Check the default checkbox/radio value ("" on old WebKit; "on" elsewhere)
+	support.checkOn = input.value !== "";
+
+	// Must access the parent to make an option select properly
+	// Support: IE9, IE10
+	support.optSelected = opt.selected;
+
+	// Make sure that the options inside disabled selects aren't marked as disabled
+	// (WebKit marks them as disabled)
+	select.disabled = true;
+	support.optDisabled = !opt.disabled;
+
+	// Check if an input maintains its value after becoming a radio
+	// Support: IE9, IE10
+	input = document.createElement( "input" );
+	input.value = "t";
+	input.type = "radio";
+	support.radioValue = input.value === "t";
+})();
+
+
+var nodeHook, boolHook,
+	attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend({
+	attr: function( name, value ) {
+		return access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each(function() {
+			jQuery.removeAttr( this, name );
+		});
+	}
+});
+
+jQuery.extend({
+	attr: function( elem, name, value ) {
+		var hooks, ret,
+			nType = elem.nodeType;
+
+		// don't get/set attributes on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === strundefined ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		// All attributes are lowercase
+		// Grab necessary hook if one is defined
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+			name = name.toLowerCase();
+			hooks = jQuery.attrHooks[ name ] ||
+				( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
+		}
+
+		if ( value !== undefined ) {
+
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+
+			} else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				elem.setAttribute( name, value + "" );
+				return value;
+			}
+
+		} else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+			return ret;
+
+		} else {
+			ret = jQuery.find.attr( elem, name );
+
+			// Non-existent attributes return null, we normalize to undefined
+			return ret == null ?
+				undefined :
+				ret;
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name, propName,
+			i = 0,
+			attrNames = value && value.match( rnotwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( (name = attrNames[i++]) ) {
+				propName = jQuery.propFix[ name ] || name;
+
+				// Boolean attributes get special treatment (#10870)
+				if ( jQuery.expr.match.bool.test( name ) ) {
+					// Set corresponding property to false
+					elem[ propName ] = false;
+				}
+
+				elem.removeAttribute( name );
+			}
+		}
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !support.radioValue && value === "radio" &&
+					jQuery.nodeName( elem, "input" ) ) {
+					// Setting the type on a radio button after the value resets the value in IE6-9
+					// Reset value to default in case type is set after value during creation
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	}
+});
+
+// Hooks for boolean attributes
+boolHook = {
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else {
+			elem.setAttribute( name, name );
+		}
+		return name;
+	}
+};
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+	var getter = attrHandle[ name ] || jQuery.find.attr;
+
+	attrHandle[ name ] = function( elem, name, isXML ) {
+		var ret, handle;
+		if ( !isXML ) {
+			// Avoid an infinite loop by temporarily removing this function from the getter
+			handle = attrHandle[ name ];
+			attrHandle[ name ] = ret;
+			ret = getter( elem, name, isXML ) != null ?
+				name.toLowerCase() :
+				null;
+			attrHandle[ name ] = handle;
+		}
+		return ret;
+	};
+});
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i;
+
+jQuery.fn.extend({
+	prop: function( name, value ) {
+		return access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		return this.each(function() {
+			delete this[ jQuery.propFix[ name ] || name ];
+		});
+	}
+});
+
+jQuery.extend({
+	propFix: {
+		"for": "htmlFor",
+		"class": "className"
+	},
+
+	prop: function( elem, name, value ) {
+		var ret, hooks, notxml,
+			nType = elem.nodeType;
+
+		// don't get/set properties on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		if ( notxml ) {
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
+				ret :
+				( elem[ name ] = value );
+
+		} else {
+			return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
+				ret :
+				elem[ name ];
+		}
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+				return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ?
+					elem.tabIndex :
+					-1;
+			}
+		}
+	}
+});
+
+// Support: IE9+
+// Selectedness for an option in an optgroup can be inaccurate
+if ( !support.optSelected ) {
+	jQuery.propHooks.selected = {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+			if ( parent && parent.parentNode ) {
+				parent.parentNode.selectedIndex;
+			}
+			return null;
+		}
+	};
+}
+
+jQuery.each([
+	"tabIndex",
+	"readOnly",
+	"maxLength",
+	"cellSpacing",
+	"cellPadding",
+	"rowSpan",
+	"colSpan",
+	"useMap",
+	"frameBorder",
+	"contentEditable"
+], function() {
+	jQuery.propFix[ this.toLowerCase() ] = this;
+});
+
+
+
+
+var rclass = /[\t\r\n\f]/g;
+
+jQuery.fn.extend({
+	addClass: function( value ) {
+		var classes, elem, cur, clazz, j, finalValue,
+			proceed = typeof value === "string" && value,
+			i = 0,
+			len = this.length;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).addClass( value.call( this, j, this.className ) );
+			});
+		}
+
+		if ( proceed ) {
+			// The disjunction here is for better compressibility (see removeClass)
+			classes = ( value || "" ).match( rnotwhite ) || [];
+
+			for ( ; i < len; i++ ) {
+				elem = this[ i ];
+				cur = elem.nodeType === 1 && ( elem.className ?
+					( " " + elem.className + " " ).replace( rclass, " " ) :
+					" "
+				);
+
+				if ( cur ) {
+					j = 0;
+					while ( (clazz = classes[j++]) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+
+					// only assign if different to avoid unneeded rendering.
+					finalValue = jQuery.trim( cur );
+					if ( elem.className !== finalValue ) {
+						elem.className = finalValue;
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, clazz, j, finalValue,
+			proceed = arguments.length === 0 || typeof value === "string" && value,
+			i = 0,
+			len = this.length;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, this.className ) );
+			});
+		}
+		if ( proceed ) {
+			classes = ( value || "" ).match( rnotwhite ) || [];
+
+			for ( ; i < len; i++ ) {
+				elem = this[ i ];
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 && ( elem.className ?
+					( " " + elem.className + " " ).replace( rclass, " " ) :
+					""
+				);
+
+				if ( cur ) {
+					j = 0;
+					while ( (clazz = classes[j++]) ) {
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+
+					// only assign if different to avoid unneeded rendering.
+					finalValue = value ? jQuery.trim( cur ) : "";
+					if ( elem.className !== finalValue ) {
+						elem.className = finalValue;
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value;
+
+		if ( typeof stateVal === "boolean" && type === "string" ) {
+			return stateVal ? this.addClass( value ) : this.removeClass( value );
+		}
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( i ) {
+				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+			});
+		}
+
+		return this.each(function() {
+			if ( type === "string" ) {
+				// toggle individual class names
+				var className,
+					i = 0,
+					self = jQuery( this ),
+					classNames = value.match( rnotwhite ) || [];
+
+				while ( (className = classNames[ i++ ]) ) {
+					// check each className given, space separated list
+					if ( self.hasClass( className ) ) {
+						self.removeClass( className );
+					} else {
+						self.addClass( className );
+					}
+				}
+
+			// Toggle whole class name
+			} else if ( type === strundefined || type === "boolean" ) {
+				if ( this.className ) {
+					// store className if set
+					data_priv.set( this, "__className__", this.className );
+				}
+
+				// If the element has a class name or if we're passed "false",
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || "";
+			}
+		});
+	},
+
+	hasClass: function( selector ) {
+		var className = " " + selector + " ",
+			i = 0,
+			l = this.length;
+		for ( ; i < l; i++ ) {
+			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+				return true;
+			}
+		}
+
+		return false;
+	}
+});
+
+
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend({
+	val: function( value ) {
+		var hooks, ret, isFunction,
+			elem = this[0];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				return typeof ret === "string" ?
+					// handle most common string cases
+					ret.replace(rreturn, "") :
+					// handle cases where value is null/undef or number
+					ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		isFunction = jQuery.isFunction( value );
+
+		return this.each(function( i ) {
+			var val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, jQuery( this ).val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+
+			} else if ( typeof val === "number" ) {
+				val += "";
+
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map( val, function( value ) {
+					return value == null ? "" : value + "";
+				});
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	valHooks: {
+		option: {
+			get: function( elem ) {
+				var val = jQuery.find.attr( elem, "value" );
+				return val != null ?
+					val :
+					// Support: IE10-11+
+					// option.text throws exceptions (#14686, #14858)
+					jQuery.trim( jQuery.text( elem ) );
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one" || index < 0,
+					values = one ? null : [],
+					max = one ? index + 1 : options.length,
+					i = index < 0 ?
+						max :
+						one ? index : 0;
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// IE6-9 doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+							// Don't return options that are disabled or in a disabled optgroup
+							( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) &&
+							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var optionSet, option,
+					options = elem.options,
+					values = jQuery.makeArray( value ),
+					i = options.length;
+
+				while ( i-- ) {
+					option = options[ i ];
+					if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {
+						optionSet = true;
+					}
+				}
+
+				// force browsers to behave consistently when non-matching value is set
+				if ( !optionSet ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	}
+});
+
+// Radios and checkboxes getter/setter
+jQuery.each([ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+			}
+		}
+	};
+	if ( !support.checkOn ) {
+		jQuery.valHooks[ this ].get = function( elem ) {
+			// Support: Webkit
+			// "" is returned instead of "on" if a value isn't specified
+			return elem.getAttribute("value") === null ? "on" : elem.value;
+		};
+	}
+});
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+});
+
+jQuery.fn.extend({
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	},
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+	}
+});
+
+
+var nonce = jQuery.now();
+
+var rquery = (/\?/);
+
+
+
+// Support: Android 2.3
+// Workaround failure to string-cast null input
+jQuery.parseJSON = function( data ) {
+	return JSON.parse( data + "" );
+};
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+	var xml, tmp;
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+
+	// Support: IE9
+	try {
+		tmp = new DOMParser();
+		xml = tmp.parseFromString( data, "text/xml" );
+	} catch ( e ) {
+		xml = undefined;
+	}
+
+	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+		jQuery.error( "Invalid XML: " + data );
+	}
+	return xml;
+};
+
+
+var
+	// Document location
+	ajaxLocParts,
+	ajaxLocation,
+
+	rhash = /#.*$/,
+	rts = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+	rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat("*");
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+	ajaxLocation = location.href;
+} catch( e ) {
+	// Use the href attribute of an A element
+	// since IE will modify it given document.location
+	ajaxLocation = document.createElement( "a" );
+	ajaxLocation.href = "";
+	ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
+
+		if ( jQuery.isFunction( func ) ) {
+			// For each dataType in the dataTypeExpression
+			while ( (dataType = dataTypes[i++]) ) {
+				// Prepend if requested
+				if ( dataType[0] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
+
+				// Otherwise append
+				} else {
+					(structure[ dataType ] = structure[ dataType ] || []).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		});
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var ct, type, finalDataType, firstDataType,
+		contents = s.contents,
+		dataTypes = s.dataTypes;
+
+	// Remove auto dataType and get content-type in the process
+	while ( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+	var conv2, current, conv, tmp, prev,
+		converters = {},
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice();
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	current = dataTypes.shift();
+
+	// Convert to each sequential dataType
+	while ( current ) {
+
+		if ( s.responseFields[ current ] ) {
+			jqXHR[ s.responseFields[ current ] ] = response;
+		}
+
+		// Apply the dataFilter if provided
+		if ( !prev && isSuccess && s.dataFilter ) {
+			response = s.dataFilter( response, s.dataType );
+		}
+
+		prev = current;
+		current = dataTypes.shift();
+
+		if ( current ) {
+
+		// There's only work to do if current dataType is non-auto
+			if ( current === "*" ) {
+
+				current = prev;
+
+			// Convert response if prev dataType is non-auto and differs from current
+			} else if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split( " " );
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.unshift( tmp[ 1 ] );
+								}
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s[ "throws" ] ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return { state: "success", data: response };
+}
+
+jQuery.extend({
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: ajaxLocation,
+		type: "GET",
+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /xml/,
+			html: /html/,
+			json: /json/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText",
+			json: "responseJSON"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var transport,
+			// URL without anti-cache param
+			cacheURL,
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+			// timeout handle
+			timeoutTimer,
+			// Cross-domain detection vars
+			parts,
+			// To know if global events are to be dispatched
+			fireGlobals,
+			// Loop variable
+			i,
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+			// Callbacks context
+			callbackContext = s.context || s,
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+				jQuery( callbackContext ) :
+				jQuery.event,
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks("once memory"),
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+			// The jqXHR state
+			state = 0,
+			// Default abort message
+			strAbort = "canceled",
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( (match = rheaders.exec( responseHeadersString )) ) {
+								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match == null ? null : match;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					var lname = name.toLowerCase();
+					if ( !state ) {
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( state < 2 ) {
+							for ( code in map ) {
+								// Lazy-add the new callback in a way that preserves old ones
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						} else {
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR ).complete = completeDeferred.add;
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (prefilters might expect it)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" )
+			.replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
+
+		// A cross-domain request is in order when we have a protocol:host:port mismatch
+		if ( s.crossDomain == null ) {
+			parts = rurl.exec( s.url.toLowerCase() );
+			s.crossDomain = !!( parts &&
+				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
+			);
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( state === 2 ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		fireGlobals = s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger("ajaxStart");
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		cacheURL = s.url;
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+				s.url = rts.test( cacheURL ) ?
+
+					// If there is already a '_' parameter, set its value
+					cacheURL.replace( rts, "$1_=" + nonce++ ) :
+
+					// Otherwise add one to the end
+					cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
+			}
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = setTimeout(function() {
+					jqXHR.abort("timeout");
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+				// Propagate exception as error if not done
+				if ( state < 2 ) {
+					done( -1, e );
+				// Simply rethrow otherwise
+				} else {
+					throw e;
+				}
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Determine if successful
+			isSuccess = status >= 200 && status < 300 || status === 304;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// Convert no matter what (that way responseXXX fields are always set)
+			response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+			// If successful, handle type chaining
+			if ( isSuccess ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader("Last-Modified");
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader("etag");
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 || s.type === "HEAD" ) {
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					statusText = response.state;
+					success = response.data;
+					error = response.error;
+					isSuccess = !error;
+				}
+			} else {
+				// We extract error from statusText
+				// then normalize statusText and status for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger("ajaxStop");
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	}
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+		// shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		return jQuery.ajax({
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		});
+	};
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
+	jQuery.fn[ type ] = function( fn ) {
+		return this.on( type, fn );
+	};
+});
+
+
+jQuery._evalUrl = function( url ) {
+	return jQuery.ajax({
+		url: url,
+		type: "GET",
+		dataType: "script",
+		async: false,
+		global: false,
+		"throws": true
+	});
+};
+
+
+jQuery.fn.extend({
+	wrapAll: function( html ) {
+		var wrap;
+
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function( i ) {
+				jQuery( this ).wrapAll( html.call(this, i) );
+			});
+		}
+
+		if ( this[ 0 ] ) {
+
+			// The elements to wrap the target around
+			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+			if ( this[ 0 ].parentNode ) {
+				wrap.insertBefore( this[ 0 ] );
+			}
+
+			wrap.map(function() {
+				var elem = this;
+
+				while ( elem.firstElementChild ) {
+					elem = elem.firstElementChild;
+				}
+
+				return elem;
+			}).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function( i ) {
+				jQuery( this ).wrapInner( html.call(this, i) );
+			});
+		}
+
+		return this.each(function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		});
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each(function( i ) {
+			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+		});
+	},
+
+	unwrap: function() {
+		return this.parent().each(function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		}).end();
+	}
+});
+
+
+jQuery.expr.filters.hidden = function( elem ) {
+	// Support: Opera <= 12.12
+	// Opera reports offsetWidths and offsetHeights less than zero on some elements
+	return elem.offsetWidth <= 0 && elem.offsetHeight <= 0;
+};
+jQuery.expr.filters.visible = function( elem ) {
+	return !jQuery.expr.filters.hidden( elem );
+};
+
+
+
+
+var r20 = /%20/g,
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( jQuery.isArray( obj ) ) {
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+			}
+		});
+
+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, value ) {
+			// If value is a function, invoke it and return its value
+			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+		};
+
+	// Set traditional to true for jQuery <= 1.3.2 behavior.
+	if ( traditional === undefined ) {
+		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+	}
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		});
+
+	} else {
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" ).replace( r20, "+" );
+};
+
+jQuery.fn.extend({
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map(function() {
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		})
+		.filter(function() {
+			var type = this.type;
+
+			// Use .is( ":disabled" ) so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !rcheckableType.test( type ) );
+		})
+		.map(function( i, elem ) {
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val ) {
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					}) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		}).get();
+	}
+});
+
+
+jQuery.ajaxSettings.xhr = function() {
+	try {
+		return new XMLHttpRequest();
+	} catch( e ) {}
+};
+
+var xhrId = 0,
+	xhrCallbacks = {},
+	xhrSuccessStatus = {
+		// file protocol always yields status code 0, assume 200
+		0: 200,
+		// Support: IE9
+		// #1450: sometimes IE returns 1223 when it should be 204
+		1223: 204
+	},
+	xhrSupported = jQuery.ajaxSettings.xhr();
+
+// Support: IE9
+// Open requests must be manually aborted on unload (#5280)
+if ( window.ActiveXObject ) {
+	jQuery( window ).on( "unload", function() {
+		for ( var key in xhrCallbacks ) {
+			xhrCallbacks[ key ]();
+		}
+	});
+}
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport(function( options ) {
+	var callback;
+
+	// Cross domain only allowed if supported through XMLHttpRequest
+	if ( support.cors || xhrSupported && !options.crossDomain ) {
+		return {
+			send: function( headers, complete ) {
+				var i,
+					xhr = options.xhr(),
+					id = ++xhrId;
+
+				xhr.open( options.type, options.url, options.async, options.username, options.password );
+
+				// Apply custom fields if provided
+				if ( options.xhrFields ) {
+					for ( i in options.xhrFields ) {
+						xhr[ i ] = options.xhrFields[ i ];
+					}
+				}
+
+				// Override mime type if needed
+				if ( options.mimeType && xhr.overrideMimeType ) {
+					xhr.overrideMimeType( options.mimeType );
+				}
+
+				// X-Requested-With header
+				// For cross-domain requests, seeing as conditions for a preflight are
+				// akin to a jigsaw puzzle, we simply never set it to be sure.
+				// (it can always be set on a per-request basis or even using ajaxSetup)
+				// For same-domain requests, won't change header if already provided.
+				if ( !options.crossDomain && !headers["X-Requested-With"] ) {
+					headers["X-Requested-With"] = "XMLHttpRequest";
+				}
+
+				// Set headers
+				for ( i in headers ) {
+					xhr.setRequestHeader( i, headers[ i ] );
+				}
+
+				// Callback
+				callback = function( type ) {
+					return function() {
+						if ( callback ) {
+							delete xhrCallbacks[ id ];
+							callback = xhr.onload = xhr.onerror = null;
+
+							if ( type === "abort" ) {
+								xhr.abort();
+							} else if ( type === "error" ) {
+								complete(
+									// file: protocol always yields status 0; see #8605, #14207
+									xhr.status,
+									xhr.statusText
+								);
+							} else {
+								complete(
+									xhrSuccessStatus[ xhr.status ] || xhr.status,
+									xhr.statusText,
+									// Support: IE9
+									// Accessing binary-data responseText throws an exception
+									// (#11426)
+									typeof xhr.responseText === "string" ? {
+										text: xhr.responseText
+									} : undefined,
+									xhr.getAllResponseHeaders()
+								);
+							}
+						}
+					};
+				};
+
+				// Listen to events
+				xhr.onload = callback();
+				xhr.onerror = callback("error");
+
+				// Create the abort callback
+				callback = xhrCallbacks[ id ] = callback("abort");
+
+				try {
+					// Do send the request (this may raise an exception)
+					xhr.send( options.hasContent && options.data || null );
+				} catch ( e ) {
+					// #14683: Only rethrow if this hasn't been notified as an error yet
+					if ( callback ) {
+						throw e;
+					}
+				}
+			},
+
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+});
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup({
+	accepts: {
+		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /(?:java|ecma)script/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+});
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+	}
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+		var script, callback;
+		return {
+			send: function( _, complete ) {
+				script = jQuery("<script>").prop({
+					async: true,
+					charset: s.scriptCharset,
+					src: s.url
+				}).on(
+					"load error",
+					callback = function( evt ) {
+						script.remove();
+						callback = null;
+						if ( evt ) {
+							complete( evt.type === "error" ? 404 : 200, evt.type );
+						}
+					}
+				);
+				document.head.appendChild( script[ 0 ] );
+			},
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+});
+
+
+
+
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters["script json"] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always(function() {
+			// Restore preexisting value
+			window[ callbackName ] = overwritten;
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+				// make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		});
+
+		// Delegate to script
+		return "script";
+	}
+});
+
+
+
+
+// data: string of html
+// context (optional): If specified, the fragment will be created in this context, defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+	if ( typeof context === "boolean" ) {
+		keepScripts = context;
+		context = false;
+	}
+	context = context || document;
+
+	var parsed = rsingleTag.exec( data ),
+		scripts = !keepScripts && [];
+
+	// Single tag
+	if ( parsed ) {
+		return [ context.createElement( parsed[1] ) ];
+	}
+
+	parsed = jQuery.buildFragment( [ data ], context, scripts );
+
+	if ( scripts && scripts.length ) {
+		jQuery( scripts ).remove();
+	}
+
+	return jQuery.merge( [], parsed.childNodes );
+};
+
+
+// Keep a copy of the old load method
+var _load = jQuery.fn.load;
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+	if ( typeof url !== "string" && _load ) {
+		return _load.apply( this, arguments );
+	}
+
+	var selector, type, response,
+		self = this,
+		off = url.indexOf(" ");
+
+	if ( off >= 0 ) {
+		selector = jQuery.trim( url.slice( off ) );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( jQuery.isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax({
+			url: url,
+
+			// if "type" variable is undefined, then "GET" method will be used
+			type: type,
+			dataType: "html",
+			data: params
+		}).done(function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		}).complete( callback && function( jqXHR, status ) {
+			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+		});
+	}
+
+	return this;
+};
+
+
+
+
+jQuery.expr.filters.animated = function( elem ) {
+	return jQuery.grep(jQuery.timers, function( fn ) {
+		return elem === fn.elem;
+	}).length;
+};
+
+
+
+
+var docElem = window.document.documentElement;
+
+/**
+ * Gets a window from an element
+ */
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
+}
+
+jQuery.offset = {
+	setOffset: function( elem, options, i ) {
+		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+			position = jQuery.css( elem, "position" ),
+			curElem = jQuery( elem ),
+			props = {};
+
+		// Set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		curOffset = curElem.offset();
+		curCSSTop = jQuery.css( elem, "top" );
+		curCSSLeft = jQuery.css( elem, "left" );
+		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+			( curCSSTop + curCSSLeft ).indexOf("auto") > -1;
+
+		// Need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+			options = options.call( elem, i, curOffset );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+jQuery.fn.extend({
+	offset: function( options ) {
+		if ( arguments.length ) {
+			return options === undefined ?
+				this :
+				this.each(function( i ) {
+					jQuery.offset.setOffset( this, options, i );
+				});
+		}
+
+		var docElem, win,
+			elem = this[ 0 ],
+			box = { top: 0, left: 0 },
+			doc = elem && elem.ownerDocument;
+
+		if ( !doc ) {
+			return;
+		}
+
+		docElem = doc.documentElement;
+
+		// Make sure it's not a disconnected DOM node
+		if ( !jQuery.contains( docElem, elem ) ) {
+			return box;
+		}
+
+		// If we don't have gBCR, just use 0,0 rather than error
+		// BlackBerry 5, iOS 3 (original iPhone)
+		if ( typeof elem.getBoundingClientRect !== strundefined ) {
+			box = elem.getBoundingClientRect();
+		}
+		win = getWindow( doc );
+		return {
+			top: box.top + win.pageYOffset - docElem.clientTop,
+			left: box.left + win.pageXOffset - docElem.clientLeft
+		};
+	},
+
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset,
+			elem = this[ 0 ],
+			parentOffset = { top: 0, left: 0 };
+
+		// Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+			// We assume that getBoundingClientRect is available when computed position is fixed
+			offset = elem.getBoundingClientRect();
+
+		} else {
+			// Get *real* offsetParent
+			offsetParent = this.offsetParent();
+
+			// Get correct offsets
+			offset = this.offset();
+			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+				parentOffset = offsetParent.offset();
+			}
+
+			// Add offsetParent borders
+			parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+		}
+
+		// Subtract parent offsets and element margins
+		return {
+			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+		};
+	},
+
+	offsetParent: function() {
+		return this.map(function() {
+			var offsetParent = this.offsetParent || docElem;
+
+			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+
+			return offsetParent || docElem;
+		});
+	}
+});
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+	var top = "pageYOffset" === prop;
+
+	jQuery.fn[ method ] = function( val ) {
+		return access( this, function( elem, method, val ) {
+			var win = getWindow( elem );
+
+			if ( val === undefined ) {
+				return win ? win[ prop ] : elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : window.pageXOffset,
+					top ? val : window.pageYOffset
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length, null );
+	};
+});
+
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// getComputedStyle returns percent when specified for top/left/bottom/right
+// rather than make the css module depend on the offset module, we just check for it here
+jQuery.each( [ "top", "left" ], function( i, prop ) {
+	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+		function( elem, computed ) {
+			if ( computed ) {
+				computed = curCSS( elem, prop );
+				// if curCSS returns percentage, fallback to offset
+				return rnumnonpx.test( computed ) ?
+					jQuery( elem ).position()[ prop ] + "px" :
+					computed;
+			}
+		}
+	);
+});
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+		// margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( jQuery.isWindow( elem ) ) {
+					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+					// isn't a whole lot we can do. See pull request at this URL for discussion:
+					// https://github.com/jquery/jquery/pull/764
+					return elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+					// whichever is greatest
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable, null );
+		};
+	});
+});
+
+
+// The number of elements contained in the matched element set
+jQuery.fn.size = function() {
+	return this.length;
+};
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+	define( "jquery", [], function() {
+		return jQuery;
+	});
+}
+
+
+
+
+var
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+	if ( window.$ === jQuery ) {
+		window.$ = _$;
+	}
+
+	if ( deep && window.jQuery === jQuery ) {
+		window.jQuery = _jQuery;
+	}
+
+	return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in
+// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( typeof noGlobal === strundefined ) {
+	window.jQuery = window.$ = jQuery;
+}
+
+
+
+
+return jQuery;
+
+}));
+
+/**
+ * @license AngularJS v1.4.8
+ * (c) 2010-2015 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, document){
+  var _jQuery = window.jQuery.noConflict(true);
+
+/**
+ * @description
+ *
+ * This object provides a utility for producing rich Error messages within
+ * Angular. It can be called as follows:
+ *
+ * var exampleMinErr = minErr('example');
+ * throw exampleMinErr('one', 'This {0} is {1}', foo, bar);
+ *
+ * The above creates an instance of minErr in the example namespace. The
+ * resulting error will have a namespaced error code of example.one.  The
+ * resulting error will replace {0} with the value of foo, and {1} with the
+ * value of bar. The object is not restricted in the number of arguments it can
+ * take.
+ *
+ * If fewer arguments are specified than necessary for interpolation, the extra
+ * interpolation markers will be preserved in the final string.
+ *
+ * Since data will be parsed statically during a build step, some restrictions
+ * are applied with respect to how minErr instances are created and called.
+ * Instances should have names of the form namespaceMinErr for a minErr created
+ * using minErr('namespace') . Error codes, namespaces and template strings
+ * should all be static strings, not variables or general expressions.
+ *
+ * @param {string} module The namespace to use for the new minErr instance.
+ * @param {function} ErrorConstructor Custom error constructor to be instantiated when returning
+ *   error from returned function, for cases when a particular type of error is useful.
+ * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance
+ */
+
+function minErr(module, ErrorConstructor) {
+  ErrorConstructor = ErrorConstructor || Error;
+  return function() {
+    var SKIP_INDEXES = 2;
+
+    var templateArgs = arguments,
+      code = templateArgs[0],
+      message = '[' + (module ? module + ':' : '') + code + '] ',
+      template = templateArgs[1],
+      paramPrefix, i;
+
+    message += template.replace(/\{\d+\}/g, function(match) {
+      var index = +match.slice(1, -1),
+        shiftedIndex = index + SKIP_INDEXES;
+
+      if (shiftedIndex < templateArgs.length) {
+        return toDebugString(templateArgs[shiftedIndex]);
+      }
+
+      return match;
+    });
+
+    message += '\nhttp://errors.angularjs.org/1.4.8/' +
+      (module ? module + '/' : '') + code;
+
+    for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {
+      message += paramPrefix + 'p' + (i - SKIP_INDEXES) + '=' +
+        encodeURIComponent(toDebugString(templateArgs[i]));
+    }
+
+    return new ErrorConstructor(message);
+  };
+}
+
+/* We need to tell jshint what variables are being exported */
+/* global angular: true,
+  msie: true,
+  jqLite: true,
+  jQuery: true,
+  slice: true,
+  splice: true,
+  push: true,
+  toString: true,
+  ngMinErr: true,
+  angularModule: true,
+  uid: true,
+  REGEX_STRING_REGEXP: true,
+  VALIDITY_STATE_PROPERTY: true,
+
+  lowercase: true,
+  uppercase: true,
+  manualLowercase: true,
+  manualUppercase: true,
+  nodeName_: true,
+  isArrayLike: true,
+  forEach: true,
+  forEachSorted: true,
+  reverseParams: true,
+  nextUid: true,
+  setHashKey: true,
+  extend: true,
+  toInt: true,
+  inherit: true,
+  merge: true,
+  noop: true,
+  identity: true,
+  valueFn: true,
+  isUndefined: true,
+  isDefined: true,
+  isObject: true,
+  isBlankObject: true,
+  isString: true,
+  isNumber: true,
+  isDate: true,
+  isArray: true,
+  isFunction: true,
+  isRegExp: true,
+  isWindow: true,
+  isScope: true,
+  isFile: true,
+  isFormData: true,
+  isBlob: true,
+  isBoolean: true,
+  isPromiseLike: true,
+  trim: true,
+  escapeForRegexp: true,
+  isElement: true,
+  makeMap: true,
+  includes: true,
+  arrayRemove: true,
+  copy: true,
+  shallowCopy: true,
+  equals: true,
+  csp: true,
+  jq: true,
+  concat: true,
+  sliceArgs: true,
+  bind: true,
+  toJsonReplacer: true,
+  toJson: true,
+  fromJson: true,
+  convertTimezoneToLocal: true,
+  timezoneToOffset: true,
+  startingTag: true,
+  tryDecodeURIComponent: true,
+  parseKeyValue: true,
+  toKeyValue: true,
+  encodeUriSegment: true,
+  encodeUriQuery: true,
+  angularInit: true,
+  bootstrap: true,
+  getTestability: true,
+  snake_case: true,
+  bindJQuery: true,
+  assertArg: true,
+  assertArgFn: true,
+  assertNotHasOwnProperty: true,
+  getter: true,
+  getBlockNodes: true,
+  hasOwnProperty: true,
+  createMap: true,
+
+  NODE_TYPE_ELEMENT: true,
+  NODE_TYPE_ATTRIBUTE: true,
+  NODE_TYPE_TEXT: true,
+  NODE_TYPE_COMMENT: true,
+  NODE_TYPE_DOCUMENT: true,
+  NODE_TYPE_DOCUMENT_FRAGMENT: true,
+*/
+
+////////////////////////////////////
+
+/**
+ * @ngdoc module
+ * @name ng
+ * @module ng
+ * @description
+ *
+ * # ng (core module)
+ * The ng module is loaded by default when an AngularJS application is started. The module itself
+ * contains the essential components for an AngularJS application to function. The table below
+ * lists a high level breakdown of each of the services/factories, filters, directives and testing
+ * components available within this core module.
+ *
+ * <div doc-module-components="ng"></div>
+ */
+
+var REGEX_STRING_REGEXP = /^\/(.+)\/([a-z]*)$/;
+
+// The name of a form control's ValidityState property.
+// This is used so that it's possible for internal tests to create mock ValidityStates.
+var VALIDITY_STATE_PROPERTY = 'validity';
+
+/**
+ * @ngdoc function
+ * @name angular.lowercase
+ * @module ng
+ * @kind function
+ *
+ * @description Converts the specified string to lowercase.
+ * @param {string} string String to be converted to lowercase.
+ * @returns {string} Lowercased string.
+ */
+var lowercase = function(string) {return isString(string) ? string.toLowerCase() : string;};
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+/**
+ * @ngdoc function
+ * @name angular.uppercase
+ * @module ng
+ * @kind function
+ *
+ * @description Converts the specified string to uppercase.
+ * @param {string} string String to be converted to uppercase.
+ * @returns {string} Uppercased string.
+ */
+var uppercase = function(string) {return isString(string) ? string.toUpperCase() : string;};
+
+
+var manualLowercase = function(s) {
+  /* jshint bitwise: false */
+  return isString(s)
+      ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})
+      : s;
+};
+var manualUppercase = function(s) {
+  /* jshint bitwise: false */
+  return isString(s)
+      ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})
+      : s;
+};
+
+
+// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish
+// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods
+// with correct but slower alternatives.
+if ('i' !== 'I'.toLowerCase()) {
+  lowercase = manualLowercase;
+  uppercase = manualUppercase;
+}
+
+
+var
+    msie,             // holds major version number for IE, or NaN if UA is not IE.
+    jqLite,           // delay binding since jQuery could be loaded after us.
+    jQuery,           // delay binding
+    slice             = [].slice,
+    splice            = [].splice,
+    push              = [].push,
+    toString          = Object.prototype.toString,
+    getPrototypeOf    = Object.getPrototypeOf,
+    ngMinErr          = minErr('ng'),
+
+    /** @name angular */
+    angular           = window.angular || (window.angular = {}),
+    angularModule,
+    uid               = 0;
+
+/**
+ * documentMode is an IE-only property
+ * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
+ */
+msie = document.documentMode;
+
+
+/**
+ * @private
+ * @param {*} obj
+ * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments,
+ *                   String ...)
+ */
+function isArrayLike(obj) {
+
+  // `null`, `undefined` and `window` are not array-like
+  if (obj == null || isWindow(obj)) return false;
+
+  // arrays, strings and jQuery/jqLite objects are array like
+  // * jqLite is either the jQuery or jqLite constructor function
+  // * we have to check the existance of jqLite first as this method is called
+  //   via the forEach method when constructing the jqLite object in the first place
+  if (isArray(obj) || isString(obj) || (jqLite && obj instanceof jqLite)) return true;
+
+  // Support: iOS 8.2 (not reproducible in simulator)
+  // "length" in obj used to prevent JIT error (gh-11508)
+  var length = "length" in Object(obj) && obj.length;
+
+  // NodeList objects (with `item` method) and
+  // other objects with suitable length characteristics are array-like
+  return isNumber(length) &&
+    (length >= 0 && (length - 1) in obj || typeof obj.item == 'function');
+}
+
+/**
+ * @ngdoc function
+ * @name angular.forEach
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Invokes the `iterator` function once for each item in `obj` collection, which can be either an
+ * object or an array. The `iterator` function is invoked with `iterator(value, key, obj)`, where `value`
+ * is the value of an object property or an array element, `key` is the object property key or
+ * array element index and obj is the `obj` itself. Specifying a `context` for the function is optional.
+ *
+ * It is worth noting that `.forEach` does not iterate over inherited properties because it filters
+ * using the `hasOwnProperty` method.
+ *
+ * Unlike ES262's
+ * [Array.prototype.forEach](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.18),
+ * Providing 'undefined' or 'null' values for `obj` will not throw a TypeError, but rather just
+ * return the value provided.
+ *
+   ```js
+     var values = {name: 'misko', gender: 'male'};
+     var log = [];
+     angular.forEach(values, function(value, key) {
+       this.push(key + ': ' + value);
+     }, log);
+     expect(log).toEqual(['name: misko', 'gender: male']);
+   ```
+ *
+ * @param {Object|Array} obj Object to iterate over.
+ * @param {Function} iterator Iterator function.
+ * @param {Object=} context Object to become context (`this`) for the iterator function.
+ * @returns {Object|Array} Reference to `obj`.
+ */
+
+function forEach(obj, iterator, context) {
+  var key, length;
+  if (obj) {
+    if (isFunction(obj)) {
+      for (key in obj) {
+        // Need to check if hasOwnProperty exists,
+        // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function
+        if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {
+          iterator.call(context, obj[key], key, obj);
+        }
+      }
+    } else if (isArray(obj) || isArrayLike(obj)) {
+      var isPrimitive = typeof obj !== 'object';
+      for (key = 0, length = obj.length; key < length; key++) {
+        if (isPrimitive || key in obj) {
+          iterator.call(context, obj[key], key, obj);
+        }
+      }
+    } else if (obj.forEach && obj.forEach !== forEach) {
+        obj.forEach(iterator, context, obj);
+    } else if (isBlankObject(obj)) {
+      // createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty
+      for (key in obj) {
+        iterator.call(context, obj[key], key, obj);
+      }
+    } else if (typeof obj.hasOwnProperty === 'function') {
+      // Slow path for objects inheriting Object.prototype, hasOwnProperty check needed
+      for (key in obj) {
+        if (obj.hasOwnProperty(key)) {
+          iterator.call(context, obj[key], key, obj);
+        }
+      }
+    } else {
+      // Slow path for objects which do not have a method `hasOwnProperty`
+      for (key in obj) {
+        if (hasOwnProperty.call(obj, key)) {
+          iterator.call(context, obj[key], key, obj);
+        }
+      }
+    }
+  }
+  return obj;
+}
+
+function forEachSorted(obj, iterator, context) {
+  var keys = Object.keys(obj).sort();
+  for (var i = 0; i < keys.length; i++) {
+    iterator.call(context, obj[keys[i]], keys[i]);
+  }
+  return keys;
+}
+
+
+/**
+ * when using forEach the params are value, key, but it is often useful to have key, value.
+ * @param {function(string, *)} iteratorFn
+ * @returns {function(*, string)}
+ */
+function reverseParams(iteratorFn) {
+  return function(value, key) { iteratorFn(key, value); };
+}
+
+/**
+ * A consistent way of creating unique IDs in angular.
+ *
+ * Using simple numbers allows us to generate 28.6 million unique ids per second for 10 years before
+ * we hit number precision issues in JavaScript.
+ *
+ * Math.pow(2,53) / 60 / 60 / 24 / 365 / 10 = 28.6M
+ *
+ * @returns {number} an unique alpha-numeric string
+ */
+function nextUid() {
+  return ++uid;
+}
+
+
+/**
+ * Set or clear the hashkey for an object.
+ * @param obj object
+ * @param h the hashkey (!truthy to delete the hashkey)
+ */
+function setHashKey(obj, h) {
+  if (h) {
+    obj.$$hashKey = h;
+  } else {
+    delete obj.$$hashKey;
+  }
+}
+
+
+function baseExtend(dst, objs, deep) {
+  var h = dst.$$hashKey;
+
+  for (var i = 0, ii = objs.length; i < ii; ++i) {
+    var obj = objs[i];
+    if (!isObject(obj) && !isFunction(obj)) continue;
+    var keys = Object.keys(obj);
+    for (var j = 0, jj = keys.length; j < jj; j++) {
+      var key = keys[j];
+      var src = obj[key];
+
+      if (deep && isObject(src)) {
+        if (isDate(src)) {
+          dst[key] = new Date(src.valueOf());
+        } else if (isRegExp(src)) {
+          dst[key] = new RegExp(src);
+        } else if (src.nodeName) {
+          dst[key] = src.cloneNode(true);
+        } else if (isElement(src)) {
+          dst[key] = src.clone();
+        } else {
+          if (!isObject(dst[key])) dst[key] = isArray(src) ? [] : {};
+          baseExtend(dst[key], [src], true);
+        }
+      } else {
+        dst[key] = src;
+      }
+    }
+  }
+
+  setHashKey(dst, h);
+  return dst;
+}
+
+/**
+ * @ngdoc function
+ * @name angular.extend
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Extends the destination object `dst` by copying own enumerable properties from the `src` object(s)
+ * to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so
+ * by passing an empty object as the target: `var object = angular.extend({}, object1, object2)`.
+ *
+ * **Note:** Keep in mind that `angular.extend` does not support recursive merge (deep copy). Use
+ * {@link angular.merge} for this.
+ *
+ * @param {Object} dst Destination object.
+ * @param {...Object} src Source object(s).
+ * @returns {Object} Reference to `dst`.
+ */
+function extend(dst) {
+  return baseExtend(dst, slice.call(arguments, 1), false);
+}
+
+
+/**
+* @ngdoc function
+* @name angular.merge
+* @module ng
+* @kind function
+*
+* @description
+* Deeply extends the destination object `dst` by copying own enumerable properties from the `src` object(s)
+* to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so
+* by passing an empty object as the target: `var object = angular.merge({}, object1, object2)`.
+*
+* Unlike {@link angular.extend extend()}, `merge()` recursively descends into object properties of source
+* objects, performing a deep copy.
+*
+* @param {Object} dst Destination object.
+* @param {...Object} src Source object(s).
+* @returns {Object} Reference to `dst`.
+*/
+function merge(dst) {
+  return baseExtend(dst, slice.call(arguments, 1), true);
+}
+
+
+
+function toInt(str) {
+  return parseInt(str, 10);
+}
+
+
+function inherit(parent, extra) {
+  return extend(Object.create(parent), extra);
+}
+
+/**
+ * @ngdoc function
+ * @name angular.noop
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * A function that performs no operations. This function can be useful when writing code in the
+ * functional style.
+   ```js
+     function foo(callback) {
+       var result = calculateResult();
+       (callback || angular.noop)(result);
+     }
+   ```
+ */
+function noop() {}
+noop.$inject = [];
+
+
+/**
+ * @ngdoc function
+ * @name angular.identity
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * A function that returns its first argument. This function is useful when writing code in the
+ * functional style.
+ *
+   ```js
+     function transformer(transformationFn, value) {
+       return (transformationFn || angular.identity)(value);
+     };
+   ```
+  * @param {*} value to be returned.
+  * @returns {*} the value passed in.
+ */
+function identity($) {return $;}
+identity.$inject = [];
+
+
+function valueFn(value) {return function() {return value;};}
+
+function hasCustomToString(obj) {
+  return isFunction(obj.toString) && obj.toString !== toString;
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isUndefined
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is undefined.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is undefined.
+ */
+function isUndefined(value) {return typeof value === 'undefined';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isDefined
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is defined.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is defined.
+ */
+function isDefined(value) {return typeof value !== 'undefined';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isObject
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not
+ * considered to be objects. Note that JavaScript arrays are objects.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is an `Object` but not `null`.
+ */
+function isObject(value) {
+  // http://jsperf.com/isobject4
+  return value !== null && typeof value === 'object';
+}
+
+
+/**
+ * Determine if a value is an object with a null prototype
+ *
+ * @returns {boolean} True if `value` is an `Object` with a null prototype
+ */
+function isBlankObject(value) {
+  return value !== null && typeof value === 'object' && !getPrototypeOf(value);
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isString
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a `String`.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `String`.
+ */
+function isString(value) {return typeof value === 'string';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isNumber
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a `Number`.
+ *
+ * This includes the "special" numbers `NaN`, `+Infinity` and `-Infinity`.
+ *
+ * If you wish to exclude these then you can use the native
+ * [`isFinite'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite)
+ * method.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `Number`.
+ */
+function isNumber(value) {return typeof value === 'number';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isDate
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a value is a date.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `Date`.
+ */
+function isDate(value) {
+  return toString.call(value) === '[object Date]';
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isArray
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is an `Array`.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is an `Array`.
+ */
+var isArray = Array.isArray;
+
+/**
+ * @ngdoc function
+ * @name angular.isFunction
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a `Function`.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `Function`.
+ */
+function isFunction(value) {return typeof value === 'function';}
+
+
+/**
+ * Determines if a value is a regular expression object.
+ *
+ * @private
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `RegExp`.
+ */
+function isRegExp(value) {
+  return toString.call(value) === '[object RegExp]';
+}
+
+
+/**
+ * Checks if `obj` is a window object.
+ *
+ * @private
+ * @param {*} obj Object to check
+ * @returns {boolean} True if `obj` is a window obj.
+ */
+function isWindow(obj) {
+  return obj && obj.window === obj;
+}
+
+
+function isScope(obj) {
+  return obj && obj.$evalAsync && obj.$watch;
+}
+
+
+function isFile(obj) {
+  return toString.call(obj) === '[object File]';
+}
+
+
+function isFormData(obj) {
+  return toString.call(obj) === '[object FormData]';
+}
+
+
+function isBlob(obj) {
+  return toString.call(obj) === '[object Blob]';
+}
+
+
+function isBoolean(value) {
+  return typeof value === 'boolean';
+}
+
+
+function isPromiseLike(obj) {
+  return obj && isFunction(obj.then);
+}
+
+
+var TYPED_ARRAY_REGEXP = /^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array\]$/;
+function isTypedArray(value) {
+  return value && isNumber(value.length) && TYPED_ARRAY_REGEXP.test(toString.call(value));
+}
+
+
+var trim = function(value) {
+  return isString(value) ? value.trim() : value;
+};
+
+// Copied from:
+// http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1021
+// Prereq: s is a string.
+var escapeForRegexp = function(s) {
+  return s.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').
+           replace(/\x08/g, '\\x08');
+};
+
+
+/**
+ * @ngdoc function
+ * @name angular.isElement
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a DOM element (or wrapped jQuery element).
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element).
+ */
+function isElement(node) {
+  return !!(node &&
+    (node.nodeName  // we are a direct element
+    || (node.prop && node.attr && node.find)));  // we have an on and find method part of jQuery API
+}
+
+/**
+ * @param str 'key1,key2,...'
+ * @returns {object} in the form of {key1:true, key2:true, ...}
+ */
+function makeMap(str) {
+  var obj = {}, items = str.split(","), i;
+  for (i = 0; i < items.length; i++) {
+    obj[items[i]] = true;
+  }
+  return obj;
+}
+
+
+function nodeName_(element) {
+  return lowercase(element.nodeName || (element[0] && element[0].nodeName));
+}
+
+function includes(array, obj) {
+  return Array.prototype.indexOf.call(array, obj) != -1;
+}
+
+function arrayRemove(array, value) {
+  var index = array.indexOf(value);
+  if (index >= 0) {
+    array.splice(index, 1);
+  }
+  return index;
+}
+
+/**
+ * @ngdoc function
+ * @name angular.copy
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Creates a deep copy of `source`, which should be an object or an array.
+ *
+ * * If no destination is supplied, a copy of the object or array is created.
+ * * If a destination is provided, all of its elements (for arrays) or properties (for objects)
+ *   are deleted and then all elements/properties from the source are copied to it.
+ * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned.
+ * * If `source` is identical to 'destination' an exception will be thrown.
+ *
+ * @param {*} source The source that will be used to make a copy.
+ *                   Can be any type, including primitives, `null`, and `undefined`.
+ * @param {(Object|Array)=} destination Destination into which the source is copied. If
+ *     provided, must be of the same type as `source`.
+ * @returns {*} The copy or updated `destination`, if `destination` was specified.
+ *
+ * @example
+ <example module="copyExample">
+ <file name="index.html">
+ <div ng-controller="ExampleController">
+ <form novalidate class="simple-form">
+ Name: <input type="text" ng-model="user.name" /><br />
+ E-mail: <input type="email" ng-model="user.email" /><br />
+ Gender: <input type="radio" ng-model="user.gender" value="male" />male
+ <input type="radio" ng-model="user.gender" value="female" />female<br />
+ <button ng-click="reset()">RESET</button>
+ <button ng-click="update(user)">SAVE</button>
+ </form>
+ <pre>form = {{user | json}}</pre>
+ <pre>master = {{master | json}}</pre>
+ </div>
+
+ <script>
+  angular.module('copyExample', [])
+    .controller('ExampleController', ['$scope', function($scope) {
+      $scope.master= {};
+
+      $scope.update = function(user) {
+        // Example with 1 argument
+        $scope.master= angular.copy(user);
+      };
+
+      $scope.reset = function() {
+        // Example with 2 arguments
+        angular.copy($scope.master, $scope.user);
+      };
+
+      $scope.reset();
+    }]);
+ </script>
+ </file>
+ </example>
+ */
+function copy(source, destination) {
+  var stackSource = [];
+  var stackDest = [];
+
+  if (destination) {
+    if (isTypedArray(destination)) {
+      throw ngMinErr('cpta', "Can't copy! TypedArray destination cannot be mutated.");
+    }
+    if (source === destination) {
+      throw ngMinErr('cpi', "Can't copy! Source and destination are identical.");
+    }
+
+    // Empty the destination object
+    if (isArray(destination)) {
+      destination.length = 0;
+    } else {
+      forEach(destination, function(value, key) {
+        if (key !== '$$hashKey') {
+          delete destination[key];
+        }
+      });
+    }
+
+    stackSource.push(source);
+    stackDest.push(destination);
+    return copyRecurse(source, destination);
+  }
+
+  return copyElement(source);
+
+  function copyRecurse(source, destination) {
+    var h = destination.$$hashKey;
+    var result, key;
+    if (isArray(source)) {
+      for (var i = 0, ii = source.length; i < ii; i++) {
+        destination.push(copyElement(source[i]));
+      }
+    } else if (isBlankObject(source)) {
+      // createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty
+      for (key in source) {
+        destination[key] = copyElement(source[key]);
+      }
+    } else if (source && typeof source.hasOwnProperty === 'function') {
+      // Slow path, which must rely on hasOwnProperty
+      for (key in source) {
+        if (source.hasOwnProperty(key)) {
+          destination[key] = copyElement(source[key]);
+        }
+      }
+    } else {
+      // Slowest path --- hasOwnProperty can't be called as a method
+      for (key in source) {
+        if (hasOwnProperty.call(source, key)) {
+          destination[key] = copyElement(source[key]);
+        }
+      }
+    }
+    setHashKey(destination, h);
+    return destination;
+  }
+
+  function copyElement(source) {
+    // Simple values
+    if (!isObject(source)) {
+      return source;
+    }
+
+    // Already copied values
+    var index = stackSource.indexOf(source);
+    if (index !== -1) {
+      return stackDest[index];
+    }
+
+    if (isWindow(source) || isScope(source)) {
+      throw ngMinErr('cpws',
+        "Can't copy! Making copies of Window or Scope instances is not supported.");
+    }
+
+    var needsRecurse = false;
+    var destination;
+
+    if (isArray(source)) {
+      destination = [];
+      needsRecurse = true;
+    } else if (isTypedArray(source)) {
+      destination = new source.constructor(source);
+    } else if (isDate(source)) {
+      destination = new Date(source.getTime());
+    } else if (isRegExp(source)) {
+      destination = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]);
+      destination.lastIndex = source.lastIndex;
+    } else if (isFunction(source.cloneNode)) {
+        destination = source.cloneNode(true);
+    } else {
+      destination = Object.create(getPrototypeOf(source));
+      needsRecurse = true;
+    }
+
+    stackSource.push(source);
+    stackDest.push(destination);
+
+    return needsRecurse
+      ? copyRecurse(source, destination)
+      : destination;
+  }
+}
+
+/**
+ * Creates a shallow copy of an object, an array or a primitive.
+ *
+ * Assumes that there are no proto properties for objects.
+ */
+function shallowCopy(src, dst) {
+  if (isArray(src)) {
+    dst = dst || [];
+
+    for (var i = 0, ii = src.length; i < ii; i++) {
+      dst[i] = src[i];
+    }
+  } else if (isObject(src)) {
+    dst = dst || {};
+
+    for (var key in src) {
+      if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {
+        dst[key] = src[key];
+      }
+    }
+  }
+
+  return dst || src;
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.equals
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if two objects or two values are equivalent. Supports value types, regular
+ * expressions, arrays and objects.
+ *
+ * Two objects or values are considered equivalent if at least one of the following is true:
+ *
+ * * Both objects or values pass `===` comparison.
+ * * Both objects or values are of the same type and all of their properties are equal by
+ *   comparing them with `angular.equals`.
+ * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal)
+ * * Both values represent the same regular expression (In JavaScript,
+ *   /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual
+ *   representation matches).
+ *
+ * During a property comparison, properties of `function` type and properties with names
+ * that begin with `$` are ignored.
+ *
+ * Scope and DOMWindow objects are being compared only by identify (`===`).
+ *
+ * @param {*} o1 Object or value to compare.
+ * @param {*} o2 Object or value to compare.
+ * @returns {boolean} True if arguments are equal.
+ */
+function equals(o1, o2) {
+  if (o1 === o2) return true;
+  if (o1 === null || o2 === null) return false;
+  if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN
+  var t1 = typeof o1, t2 = typeof o2, length, key, keySet;
+  if (t1 == t2) {
+    if (t1 == 'object') {
+      if (isArray(o1)) {
+        if (!isArray(o2)) return false;
+        if ((length = o1.length) == o2.length) {
+          for (key = 0; key < length; key++) {
+            if (!equals(o1[key], o2[key])) return false;
+          }
+          return true;
+        }
+      } else if (isDate(o1)) {
+        if (!isDate(o2)) return false;
+        return equals(o1.getTime(), o2.getTime());
+      } else if (isRegExp(o1)) {
+        return isRegExp(o2) ? o1.toString() == o2.toString() : false;
+      } else {
+        if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) ||
+          isArray(o2) || isDate(o2) || isRegExp(o2)) return false;
+        keySet = createMap();
+        for (key in o1) {
+          if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
+          if (!equals(o1[key], o2[key])) return false;
+          keySet[key] = true;
+        }
+        for (key in o2) {
+          if (!(key in keySet) &&
+              key.charAt(0) !== '$' &&
+              isDefined(o2[key]) &&
+              !isFunction(o2[key])) return false;
+        }
+        return true;
+      }
+    }
+  }
+  return false;
+}
+
+var csp = function() {
+  if (!isDefined(csp.rules)) {
+
+
+    var ngCspElement = (document.querySelector('[ng-csp]') ||
+                    document.querySelector('[data-ng-csp]'));
+
+    if (ngCspElement) {
+      var ngCspAttribute = ngCspElement.getAttribute('ng-csp') ||
+                    ngCspElement.getAttribute('data-ng-csp');
+      csp.rules = {
+        noUnsafeEval: !ngCspAttribute || (ngCspAttribute.indexOf('no-unsafe-eval') !== -1),
+        noInlineStyle: !ngCspAttribute || (ngCspAttribute.indexOf('no-inline-style') !== -1)
+      };
+    } else {
+      csp.rules = {
+        noUnsafeEval: noUnsafeEval(),
+        noInlineStyle: false
+      };
+    }
+  }
+
+  return csp.rules;
+
+  function noUnsafeEval() {
+    try {
+      /* jshint -W031, -W054 */
+      new Function('');
+      /* jshint +W031, +W054 */
+      return false;
+    } catch (e) {
+      return true;
+    }
+  }
+};
+
+/**
+ * @ngdoc directive
+ * @module ng
+ * @name ngJq
+ *
+ * @element ANY
+ * @param {string=} ngJq the name of the library available under `window`
+ * to be used for angular.element
+ * @description
+ * Use this directive to force the angular.element library.  This should be
+ * used to force either jqLite by leaving ng-jq blank or setting the name of
+ * the jquery variable under window (eg. jQuery).
+ *
+ * Since angular looks for this directive when it is loaded (doesn't wait for the
+ * DOMContentLoaded event), it must be placed on an element that comes before the script
+ * which loads angular. Also, only the first instance of `ng-jq` will be used and all
+ * others ignored.
+ *
+ * @example
+ * This example shows how to force jqLite using the `ngJq` directive to the `html` tag.
+ ```html
+ <!doctype html>
+ <html ng-app ng-jq>
+ ...
+ ...
+ </html>
+ ```
+ * @example
+ * This example shows how to use a jQuery based library of a different name.
+ * The library name must be available at the top most 'window'.
+ ```html
+ <!doctype html>
+ <html ng-app ng-jq="jQueryLib">
+ ...
+ ...
+ </html>
+ ```
+ */
+var jq = function() {
+  if (isDefined(jq.name_)) return jq.name_;
+  var el;
+  var i, ii = ngAttrPrefixes.length, prefix, name;
+  for (i = 0; i < ii; ++i) {
+    prefix = ngAttrPrefixes[i];
+    if (el = document.querySelector('[' + prefix.replace(':', '\\:') + 'jq]')) {
+      name = el.getAttribute(prefix + 'jq');
+      break;
+    }
+  }
+
+  return (jq.name_ = name);
+};
+
+function concat(array1, array2, index) {
+  return array1.concat(slice.call(array2, index));
+}
+
+function sliceArgs(args, startIndex) {
+  return slice.call(args, startIndex || 0);
+}
+
+
+/* jshint -W101 */
+/**
+ * @ngdoc function
+ * @name angular.bind
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for
+ * `fn`). You can supply optional `args` that are prebound to the function. This feature is also
+ * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as
+ * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application).
+ *
+ * @param {Object} self Context which `fn` should be evaluated in.
+ * @param {function()} fn Function to be bound.
+ * @param {...*} args Optional arguments to be prebound to the `fn` function call.
+ * @returns {function()} Function that wraps the `fn` with all the specified bindings.
+ */
+/* jshint +W101 */
+function bind(self, fn) {
+  var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];
+  if (isFunction(fn) && !(fn instanceof RegExp)) {
+    return curryArgs.length
+      ? function() {
+          return arguments.length
+            ? fn.apply(self, concat(curryArgs, arguments, 0))
+            : fn.apply(self, curryArgs);
+        }
+      : function() {
+          return arguments.length
+            ? fn.apply(self, arguments)
+            : fn.call(self);
+        };
+  } else {
+    // in IE, native methods are not functions so they cannot be bound (note: they don't need to be)
+    return fn;
+  }
+}
+
+
+function toJsonReplacer(key, value) {
+  var val = value;
+
+  if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') {
+    val = undefined;
+  } else if (isWindow(value)) {
+    val = '$WINDOW';
+  } else if (value &&  document === value) {
+    val = '$DOCUMENT';
+  } else if (isScope(value)) {
+    val = '$SCOPE';
+  }
+
+  return val;
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.toJson
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Serializes input into a JSON-formatted string. Properties with leading $$ characters will be
+ * stripped since angular uses this notation internally.
+ *
+ * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.
+ * @param {boolean|number} [pretty=2] If set to true, the JSON output will contain newlines and whitespace.
+ *    If set to an integer, the JSON output will contain that many spaces per indentation.
+ * @returns {string|undefined} JSON-ified string representing `obj`.
+ */
+function toJson(obj, pretty) {
+  if (typeof obj === 'undefined') return undefined;
+  if (!isNumber(pretty)) {
+    pretty = pretty ? 2 : null;
+  }
+  return JSON.stringify(obj, toJsonReplacer, pretty);
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.fromJson
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Deserializes a JSON string.
+ *
+ * @param {string} json JSON string to deserialize.
+ * @returns {Object|Array|string|number} Deserialized JSON string.
+ */
+function fromJson(json) {
+  return isString(json)
+      ? JSON.parse(json)
+      : json;
+}
+
+
+function timezoneToOffset(timezone, fallback) {
+  var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;
+  return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;
+}
+
+
+function addDateMinutes(date, minutes) {
+  date = new Date(date.getTime());
+  date.setMinutes(date.getMinutes() + minutes);
+  return date;
+}
+
+
+function convertTimezoneToLocal(date, timezone, reverse) {
+  reverse = reverse ? -1 : 1;
+  var timezoneOffset = timezoneToOffset(timezone, date.getTimezoneOffset());
+  return addDateMinutes(date, reverse * (timezoneOffset - date.getTimezoneOffset()));
+}
+
+
+/**
+ * @returns {string} Returns the string representation of the element.
+ */
+function startingTag(element) {
+  element = jqLite(element).clone();
+  try {
+    // turns out IE does not let you set .html() on elements which
+    // are not allowed to have children. So we just ignore it.
+    element.empty();
+  } catch (e) {}
+  var elemHtml = jqLite('<div>').append(element).html();
+  try {
+    return element[0].nodeType === NODE_TYPE_TEXT ? lowercase(elemHtml) :
+        elemHtml.
+          match(/^(<[^>]+>)/)[1].
+          replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); });
+  } catch (e) {
+    return lowercase(elemHtml);
+  }
+
+}
+
+
+/////////////////////////////////////////////////
+
+/**
+ * Tries to decode the URI component without throwing an exception.
+ *
+ * @private
+ * @param str value potential URI component to check.
+ * @returns {boolean} True if `value` can be decoded
+ * with the decodeURIComponent function.
+ */
+function tryDecodeURIComponent(value) {
+  try {
+    return decodeURIComponent(value);
+  } catch (e) {
+    // Ignore any invalid uri component
+  }
+}
+
+
+/**
+ * Parses an escaped url query string into key-value pairs.
+ * @returns {Object.<string,boolean|Array>}
+ */
+function parseKeyValue(/**string*/keyValue) {
+  var obj = {};
+  forEach((keyValue || "").split('&'), function(keyValue) {
+    var splitPoint, key, val;
+    if (keyValue) {
+      key = keyValue = keyValue.replace(/\+/g,'%20');
+      splitPoint = keyValue.indexOf('=');
+      if (splitPoint !== -1) {
+        key = keyValue.substring(0, splitPoint);
+        val = keyValue.substring(splitPoint + 1);
+      }
+      key = tryDecodeURIComponent(key);
+      if (isDefined(key)) {
+        val = isDefined(val) ? tryDecodeURIComponent(val) : true;
+        if (!hasOwnProperty.call(obj, key)) {
+          obj[key] = val;
+        } else if (isArray(obj[key])) {
+          obj[key].push(val);
+        } else {
+          obj[key] = [obj[key],val];
+        }
+      }
+    }
+  });
+  return obj;
+}
+
+function toKeyValue(obj) {
+  var parts = [];
+  forEach(obj, function(value, key) {
+    if (isArray(value)) {
+      forEach(value, function(arrayValue) {
+        parts.push(encodeUriQuery(key, true) +
+                   (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)));
+      });
+    } else {
+    parts.push(encodeUriQuery(key, true) +
+               (value === true ? '' : '=' + encodeUriQuery(value, true)));
+    }
+  });
+  return parts.length ? parts.join('&') : '';
+}
+
+
+/**
+ * We need our custom method because encodeURIComponent is too aggressive and doesn't follow
+ * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path
+ * segments:
+ *    segment       = *pchar
+ *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+ *    pct-encoded   = "%" HEXDIG HEXDIG
+ *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+ *                     / "*" / "+" / "," / ";" / "="
+ */
+function encodeUriSegment(val) {
+  return encodeUriQuery(val, true).
+             replace(/%26/gi, '&').
+             replace(/%3D/gi, '=').
+             replace(/%2B/gi, '+');
+}
+
+
+/**
+ * This method is intended for encoding *key* or *value* parts of query component. We need a custom
+ * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be
+ * encoded per http://tools.ietf.org/html/rfc3986:
+ *    query       = *( pchar / "/" / "?" )
+ *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+ *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ *    pct-encoded   = "%" HEXDIG HEXDIG
+ *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+ *                     / "*" / "+" / "," / ";" / "="
+ */
+function encodeUriQuery(val, pctEncodeSpaces) {
+  return encodeURIComponent(val).
+             replace(/%40/gi, '@').
+             replace(/%3A/gi, ':').
+             replace(/%24/g, '$').
+             replace(/%2C/gi, ',').
+             replace(/%3B/gi, ';').
+             replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
+}
+
+var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-'];
+
+function getNgAttribute(element, ngAttr) {
+  var attr, i, ii = ngAttrPrefixes.length;
+  for (i = 0; i < ii; ++i) {
+    attr = ngAttrPrefixes[i] + ngAttr;
+    if (isString(attr = element.getAttribute(attr))) {
+      return attr;
+    }
+  }
+  return null;
+}
+
+/**
+ * @ngdoc directive
+ * @name ngApp
+ * @module ng
+ *
+ * @element ANY
+ * @param {angular.Module} ngApp an optional application
+ *   {@link angular.module module} name to load.
+ * @param {boolean=} ngStrictDi if this attribute is present on the app element, the injector will be
+ *   created in "strict-di" mode. This means that the application will fail to invoke functions which
+ *   do not use explicit function annotation (and are thus unsuitable for minification), as described
+ *   in {@link guide/di the Dependency Injection guide}, and useful debugging info will assist in
+ *   tracking down the root of these bugs.
+ *
+ * @description
+ *
+ * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive
+ * designates the **root element** of the application and is typically placed near the root element
+ * of the page - e.g. on the `<body>` or `<html>` tags.
+ *
+ * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp`
+ * found in the document will be used to define the root element to auto-bootstrap as an
+ * application. To run multiple applications in an HTML document you must manually bootstrap them using
+ * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other.
+ *
+ * You can specify an **AngularJS module** to be used as the root module for the application.  This
+ * module will be loaded into the {@link auto.$injector} when the application is bootstrapped. It
+ * should contain the application code needed or have dependencies on other modules that will
+ * contain the code. See {@link angular.module} for more information.
+ *
+ * In the example below if the `ngApp` directive were not placed on the `html` element then the
+ * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}`
+ * would not be resolved to `3`.
+ *
+ * `ngApp` is the easiest, and most common way to bootstrap an application.
+ *
+ <example module="ngAppDemo">
+   <file name="index.html">
+   <div ng-controller="ngAppDemoController">
+     I can add: {{a}} + {{b}} =  {{ a+b }}
+   </div>
+   </file>
+   <file name="script.js">
+   angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) {
+     $scope.a = 1;
+     $scope.b = 2;
+   });
+   </file>
+ </example>
+ *
+ * Using `ngStrictDi`, you would see something like this:
+ *
+ <example ng-app-included="true">
+   <file name="index.html">
+   <div ng-app="ngAppStrictDemo" ng-strict-di>
+       <div ng-controller="GoodController1">
+           I can add: {{a}} + {{b}} =  {{ a+b }}
+
+           <p>This renders because the controller does not fail to
+              instantiate, by using explicit annotation style (see
+              script.js for details)
+           </p>
+       </div>
+
+       <div ng-controller="GoodController2">
+           Name: <input ng-model="name"><br />
+           Hello, {{name}}!
+
+           <p>This renders because the controller does not fail to
+              instantiate, by using explicit annotation style
+              (see script.js for details)
+           </p>
+       </div>
+
+       <div ng-controller="BadController">
+           I can add: {{a}} + {{b}} =  {{ a+b }}
+
+           <p>The controller could not be instantiated, due to relying
+              on automatic function annotations (which are disabled in
+              strict mode). As such, the content of this section is not
+              interpolated, and there should be an error in your web console.
+           </p>
+       </div>
+   </div>
+   </file>
+   <file name="script.js">
+   angular.module('ngAppStrictDemo', [])
+     // BadController will fail to instantiate, due to relying on automatic function annotation,
+     // rather than an explicit annotation
+     .controller('BadController', function($scope) {
+       $scope.a = 1;
+       $scope.b = 2;
+     })
+     // Unlike BadController, GoodController1 and GoodController2 will not fail to be instantiated,
+     // due to using explicit annotations using the array style and $inject property, respectively.
+     .controller('GoodController1', ['$scope', function($scope) {
+       $scope.a = 1;
+       $scope.b = 2;
+     }])
+     .controller('GoodController2', GoodController2);
+     function GoodController2($scope) {
+       $scope.name = "World";
+     }
+     GoodController2.$inject = ['$scope'];
+   </file>
+   <file name="style.css">
+   div[ng-controller] {
+       margin-bottom: 1em;
+       -webkit-border-radius: 4px;
+       border-radius: 4px;
+       border: 1px solid;
+       padding: .5em;
+   }
+   div[ng-controller^=Good] {
+       border-color: #d6e9c6;
+       background-color: #dff0d8;
+       color: #3c763d;
+   }
+   div[ng-controller^=Bad] {
+       border-color: #ebccd1;
+       background-color: #f2dede;
+       color: #a94442;
+       margin-bottom: 0;
+   }
+   </file>
+ </example>
+ */
+function angularInit(element, bootstrap) {
+  var appElement,
+      module,
+      config = {};
+
+  // The element `element` has priority over any other element
+  forEach(ngAttrPrefixes, function(prefix) {
+    var name = prefix + 'app';
+
+    if (!appElement && element.hasAttribute && element.hasAttribute(name)) {
+      appElement = element;
+      module = element.getAttribute(name);
+    }
+  });
+  forEach(ngAttrPrefixes, function(prefix) {
+    var name = prefix + 'app';
+    var candidate;
+
+    if (!appElement && (candidate = element.querySelector('[' + name.replace(':', '\\:') + ']'))) {
+      appElement = candidate;
+      module = candidate.getAttribute(name);
+    }
+  });
+  if (appElement) {
+    config.strictDi = getNgAttribute(appElement, "strict-di") !== null;
+    bootstrap(appElement, module ? [module] : [], config);
+  }
+}
+
+/**
+ * @ngdoc function
+ * @name angular.bootstrap
+ * @module ng
+ * @description
+ * Use this function to manually start up angular application.
+ *
+ * See: {@link guide/bootstrap Bootstrap}
+ *
+ * Note that Protractor based end-to-end tests cannot use this function to bootstrap manually.
+ * They must use {@link ng.directive:ngApp ngApp}.
+ *
+ * Angular will detect if it has been loaded into the browser more than once and only allow the
+ * first loaded script to be bootstrapped and will report a warning to the browser console for
+ * each of the subsequent scripts. This prevents strange results in applications, where otherwise
+ * multiple instances of Angular try to work on the DOM.
+ *
+ * ```html
+ * <!doctype html>
+ * <html>
+ * <body>
+ * <div ng-controller="WelcomeController">
+ *   {{greeting}}
+ * </div>
+ *
+ * <script src="angular.js"></script>
+ * <script>
+ *   var app = angular.module('demo', [])
+ *   .controller('WelcomeController', function($scope) {
+ *       $scope.greeting = 'Welcome!';
+ *   });
+ *   angular.bootstrap(document, ['demo']);
+ * </script>
+ * </body>
+ * </html>
+ * ```
+ *
+ * @param {DOMElement} element DOM element which is the root of angular application.
+ * @param {Array<String|Function|Array>=} modules an array of modules to load into the application.
+ *     Each item in the array should be the name of a predefined module or a (DI annotated)
+ *     function that will be invoked by the injector as a `config` block.
+ *     See: {@link angular.module modules}
+ * @param {Object=} config an object for defining configuration options for the application. The
+ *     following keys are supported:
+ *
+ * * `strictDi` - disable automatic function annotation for the application. This is meant to
+ *   assist in finding bugs which break minified code. Defaults to `false`.
+ *
+ * @returns {auto.$injector} Returns the newly created injector for this app.
+ */
+function bootstrap(element, modules, config) {
+  if (!isObject(config)) config = {};
+  var defaultConfig = {
+    strictDi: false
+  };
+  config = extend(defaultConfig, config);
+  var doBootstrap = function() {
+    element = jqLite(element);
+
+    if (element.injector()) {
+      var tag = (element[0] === document) ? 'document' : startingTag(element);
+      //Encode angle brackets to prevent input from being sanitized to empty string #8683
+      throw ngMinErr(
+          'btstrpd',
+          "App Already Bootstrapped with this Element '{0}'",
+          tag.replace(/</,'&lt;').replace(/>/,'&gt;'));
+    }
+
+    modules = modules || [];
+    modules.unshift(['$provide', function($provide) {
+      $provide.value('$rootElement', element);
+    }]);
+
+    if (config.debugInfoEnabled) {
+      // Pushing so that this overrides `debugInfoEnabled` setting defined in user's `modules`.
+      modules.push(['$compileProvider', function($compileProvider) {
+        $compileProvider.debugInfoEnabled(true);
+      }]);
+    }
+
+    modules.unshift('ng');
+    var injector = createInjector(modules, config.strictDi);
+    injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector',
+       function bootstrapApply(scope, element, compile, injector) {
+        scope.$apply(function() {
+          element.data('$injector', injector);
+          compile(element)(scope);
+        });
+      }]
+    );
+    return injector;
+  };
+
+  var NG_ENABLE_DEBUG_INFO = /^NG_ENABLE_DEBUG_INFO!/;
+  var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;
+
+  if (window && NG_ENABLE_DEBUG_INFO.test(window.name)) {
+    config.debugInfoEnabled = true;
+    window.name = window.name.replace(NG_ENABLE_DEBUG_INFO, '');
+  }
+
+  if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {
+    return doBootstrap();
+  }
+
+  window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');
+  angular.resumeBootstrap = function(extraModules) {
+    forEach(extraModules, function(module) {
+      modules.push(module);
+    });
+    return doBootstrap();
+  };
+
+  if (isFunction(angular.resumeDeferredBootstrap)) {
+    angular.resumeDeferredBootstrap();
+  }
+}
+
+/**
+ * @ngdoc function
+ * @name angular.reloadWithDebugInfo
+ * @module ng
+ * @description
+ * Use this function to reload the current application with debug information turned on.
+ * This takes precedence over a call to `$compileProvider.debugInfoEnabled(false)`.
+ *
+ * See {@link ng.$compileProvider#debugInfoEnabled} for more.
+ */
+function reloadWithDebugInfo() {
+  window.name = 'NG_ENABLE_DEBUG_INFO!' + window.name;
+  window.location.reload();
+}
+
+/**
+ * @name angular.getTestability
+ * @module ng
+ * @description
+ * Get the testability service for the instance of Angular on the given
+ * element.
+ * @param {DOMElement} element DOM element which is the root of angular application.
+ */
+function getTestability(rootElement) {
+  var injector = angular.element(rootElement).injector();
+  if (!injector) {
+    throw ngMinErr('test',
+      'no injector found for element argument to getTestability');
+  }
+  return injector.get('$$testability');
+}
+
+var SNAKE_CASE_REGEXP = /[A-Z]/g;
+function snake_case(name, separator) {
+  separator = separator || '_';
+  return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {
+    return (pos ? separator : '') + letter.toLowerCase();
+  });
+}
+
+var bindJQueryFired = false;
+var skipDestroyOnNextJQueryCleanData;
+function bindJQuery() {
+  var originalCleanData;
+
+  if (bindJQueryFired) {
+    return;
+  }
+
+  // bind to jQuery if present;
+  var jqName = jq();
+  jQuery = isUndefined(jqName) ? window.jQuery :   // use jQuery (if present)
+           !jqName             ? undefined     :   // use jqLite
+                                 window[jqName];   // use jQuery specified by `ngJq`
+
+  // Use jQuery if it exists with proper functionality, otherwise default to us.
+  // Angular 1.2+ requires jQuery 1.7+ for on()/off() support.
+  // Angular 1.3+ technically requires at least jQuery 2.1+ but it may work with older
+  // versions. It will not work for sure with jQuery <1.7, though.
+  if (jQuery && jQuery.fn.on) {
+    jqLite = jQuery;
+    extend(jQuery.fn, {
+      scope: JQLitePrototype.scope,
+      isolateScope: JQLitePrototype.isolateScope,
+      controller: JQLitePrototype.controller,
+      injector: JQLitePrototype.injector,
+      inheritedData: JQLitePrototype.inheritedData
+    });
+
+    // All nodes removed from the DOM via various jQuery APIs like .remove()
+    // are passed through jQuery.cleanData. Monkey-patch this method to fire
+    // the $destroy event on all removed nodes.
+    originalCleanData = jQuery.cleanData;
+    jQuery.cleanData = function(elems) {
+      var events;
+      if (!skipDestroyOnNextJQueryCleanData) {
+        for (var i = 0, elem; (elem = elems[i]) != null; i++) {
+          events = jQuery._data(elem, "events");
+          if (events && events.$destroy) {
+            jQuery(elem).triggerHandler('$destroy');
+          }
+        }
+      } else {
+        skipDestroyOnNextJQueryCleanData = false;
+      }
+      originalCleanData(elems);
+    };
+  } else {
+    jqLite = JQLite;
+  }
+
+  angular.element = jqLite;
+
+  // Prevent double-proxying.
+  bindJQueryFired = true;
+}
+
+/**
+ * throw error if the argument is falsy.
+ */
+function assertArg(arg, name, reason) {
+  if (!arg) {
+    throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required"));
+  }
+  return arg;
+}
+
+function assertArgFn(arg, name, acceptArrayAnnotation) {
+  if (acceptArrayAnnotation && isArray(arg)) {
+      arg = arg[arg.length - 1];
+  }
+
+  assertArg(isFunction(arg), name, 'not a function, got ' +
+      (arg && typeof arg === 'object' ? arg.constructor.name || 'Object' : typeof arg));
+  return arg;
+}
+
+/**
+ * throw error if the name given is hasOwnProperty
+ * @param  {String} name    the name to test
+ * @param  {String} context the context in which the name is used, such as module or directive
+ */
+function assertNotHasOwnProperty(name, context) {
+  if (name === 'hasOwnProperty') {
+    throw ngMinErr('badname', "hasOwnProperty is not a valid {0} name", context);
+  }
+}
+
+/**
+ * Return the value accessible from the object by path. Any undefined traversals are ignored
+ * @param {Object} obj starting object
+ * @param {String} path path to traverse
+ * @param {boolean} [bindFnToScope=true]
+ * @returns {Object} value as accessible by path
+ */
+//TODO(misko): this function needs to be removed
+function getter(obj, path, bindFnToScope) {
+  if (!path) return obj;
+  var keys = path.split('.');
+  var key;
+  var lastInstance = obj;
+  var len = keys.length;
+
+  for (var i = 0; i < len; i++) {
+    key = keys[i];
+    if (obj) {
+      obj = (lastInstance = obj)[key];
+    }
+  }
+  if (!bindFnToScope && isFunction(obj)) {
+    return bind(lastInstance, obj);
+  }
+  return obj;
+}
+
+/**
+ * Return the DOM siblings between the first and last node in the given array.
+ * @param {Array} array like object
+ * @returns {Array} the inputted object or a jqLite collection containing the nodes
+ */
+function getBlockNodes(nodes) {
+  // TODO(perf): update `nodes` instead of creating a new object?
+  var node = nodes[0];
+  var endNode = nodes[nodes.length - 1];
+  var blockNodes;
+
+  for (var i = 1; node !== endNode && (node = node.nextSibling); i++) {
+    if (blockNodes || nodes[i] !== node) {
+      if (!blockNodes) {
+        blockNodes = jqLite(slice.call(nodes, 0, i));
+      }
+      blockNodes.push(node);
+    }
+  }
+
+  return blockNodes || nodes;
+}
+
+
+/**
+ * Creates a new object without a prototype. This object is useful for lookup without having to
+ * guard against prototypically inherited properties via hasOwnProperty.
+ *
+ * Related micro-benchmarks:
+ * - http://jsperf.com/object-create2
+ * - http://jsperf.com/proto-map-lookup/2
+ * - http://jsperf.com/for-in-vs-object-keys2
+ *
+ * @returns {Object}
+ */
+function createMap() {
+  return Object.create(null);
+}
+
+var NODE_TYPE_ELEMENT = 1;
+var NODE_TYPE_ATTRIBUTE = 2;
+var NODE_TYPE_TEXT = 3;
+var NODE_TYPE_COMMENT = 8;
+var NODE_TYPE_DOCUMENT = 9;
+var NODE_TYPE_DOCUMENT_FRAGMENT = 11;
+
+/**
+ * @ngdoc type
+ * @name angular.Module
+ * @module ng
+ * @description
+ *
+ * Interface for configuring angular {@link angular.module modules}.
+ */
+
+function setupModuleLoader(window) {
+
+  var $injectorMinErr = minErr('$injector');
+  var ngMinErr = minErr('ng');
+
+  function ensure(obj, name, factory) {
+    return obj[name] || (obj[name] = factory());
+  }
+
+  var angular = ensure(window, 'angular', Object);
+
+  // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap
+  angular.$$minErr = angular.$$minErr || minErr;
+
+  return ensure(angular, 'module', function() {
+    /** @type {Object.<string, angular.Module>} */
+    var modules = {};
+
+    /**
+     * @ngdoc function
+     * @name angular.module
+     * @module ng
+     * @description
+     *
+     * The `angular.module` is a global place for creating, registering and retrieving Angular
+     * modules.
+     * All modules (angular core or 3rd party) that should be available to an application must be
+     * registered using this mechanism.
+     *
+     * Passing one argument retrieves an existing {@link angular.Module},
+     * whereas passing more than one argument creates a new {@link angular.Module}
+     *
+     *
+     * # Module
+     *
+     * A module is a collection of services, directives, controllers, filters, and configuration information.
+     * `angular.module` is used to configure the {@link auto.$injector $injector}.
+     *
+     * ```js
+     * // Create a new module
+     * var myModule = angular.module('myModule', []);
+     *
+     * // register a new service
+     * myModule.value('appName', 'MyCoolApp');
+     *
+     * // configure existing services inside initialization blocks.
+     * myModule.config(['$locationProvider', function($locationProvider) {
+     *   // Configure existing providers
+     *   $locationProvider.hashPrefix('!');
+     * }]);
+     * ```
+     *
+     * Then you can create an injector and load your modules like this:
+     *
+     * ```js
+     * var injector = angular.injector(['ng', 'myModule'])
+     * ```
+     *
+     * However it's more likely that you'll just use
+     * {@link ng.directive:ngApp ngApp} or
+     * {@link angular.bootstrap} to simplify this process for you.
+     *
+     * @param {!string} name The name of the module to create or retrieve.
+     * @param {!Array.<string>=} requires If specified then new module is being created. If
+     *        unspecified then the module is being retrieved for further configuration.
+     * @param {Function=} configFn Optional configuration function for the module. Same as
+     *        {@link angular.Module#config Module#config()}.
+     * @returns {module} new module with the {@link angular.Module} api.
+     */
+    return function module(name, requires, configFn) {
+      var assertNotHasOwnProperty = function(name, context) {
+        if (name === 'hasOwnProperty') {
+          throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);
+        }
+      };
+
+      assertNotHasOwnProperty(name, 'module');
+      if (requires && modules.hasOwnProperty(name)) {
+        modules[name] = null;
+      }
+      return ensure(modules, name, function() {
+        if (!requires) {
+          throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " +
+             "the module name or forgot to load it. If registering a module ensure that you " +
+             "specify the dependencies as the second argument.", name);
+        }
+
+        /** @type {!Array.<Array.<*>>} */
+        var invokeQueue = [];
+
+        /** @type {!Array.<Function>} */
+        var configBlocks = [];
+
+        /** @type {!Array.<Function>} */
+        var runBlocks = [];
+
+        var config = invokeLater('$injector', 'invoke', 'push', configBlocks);
+
+        /** @type {angular.Module} */
+        var moduleInstance = {
+          // Private state
+          _invokeQueue: invokeQueue,
+          _configBlocks: configBlocks,
+          _runBlocks: runBlocks,
+
+          /**
+           * @ngdoc property
+           * @name angular.Module#requires
+           * @module ng
+           *
+           * @description
+           * Holds the list of modules which the injector will load before the current module is
+           * loaded.
+           */
+          requires: requires,
+
+          /**
+           * @ngdoc property
+           * @name angular.Module#name
+           * @module ng
+           *
+           * @description
+           * Name of the module.
+           */
+          name: name,
+
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#provider
+           * @module ng
+           * @param {string} name service name
+           * @param {Function} providerType Construction function for creating new instance of the
+           *                                service.
+           * @description
+           * See {@link auto.$provide#provider $provide.provider()}.
+           */
+          provider: invokeLaterAndSetModuleName('$provide', 'provider'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#factory
+           * @module ng
+           * @param {string} name service name
+           * @param {Function} providerFunction Function for creating new instance of the service.
+           * @description
+           * See {@link auto.$provide#factory $provide.factory()}.
+           */
+          factory: invokeLaterAndSetModuleName('$provide', 'factory'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#service
+           * @module ng
+           * @param {string} name service name
+           * @param {Function} constructor A constructor function that will be instantiated.
+           * @description
+           * See {@link auto.$provide#service $provide.service()}.
+           */
+          service: invokeLaterAndSetModuleName('$provide', 'service'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#value
+           * @module ng
+           * @param {string} name service name
+           * @param {*} object Service instance object.
+           * @description
+           * See {@link auto.$provide#value $provide.value()}.
+           */
+          value: invokeLater('$provide', 'value'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#constant
+           * @module ng
+           * @param {string} name constant name
+           * @param {*} object Constant value.
+           * @description
+           * Because the constants are fixed, they get applied before other provide methods.
+           * See {@link auto.$provide#constant $provide.constant()}.
+           */
+          constant: invokeLater('$provide', 'constant', 'unshift'),
+
+           /**
+           * @ngdoc method
+           * @name angular.Module#decorator
+           * @module ng
+           * @param {string} The name of the service to decorate.
+           * @param {Function} This function will be invoked when the service needs to be
+           *                                    instantiated and should return the decorated service instance.
+           * @description
+           * See {@link auto.$provide#decorator $provide.decorator()}.
+           */
+          decorator: invokeLaterAndSetModuleName('$provide', 'decorator'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#animation
+           * @module ng
+           * @param {string} name animation name
+           * @param {Function} animationFactory Factory function for creating new instance of an
+           *                                    animation.
+           * @description
+           *
+           * **NOTE**: animations take effect only if the **ngAnimate** module is loaded.
+           *
+           *
+           * Defines an animation hook that can be later used with
+           * {@link $animate $animate} service and directives that use this service.
+           *
+           * ```js
+           * module.animation('.animation-name', function($inject1, $inject2) {
+           *   return {
+           *     eventName : function(element, done) {
+           *       //code to run the animation
+           *       //once complete, then run done()
+           *       return function cancellationFunction(element) {
+           *         //code to cancel the animation
+           *       }
+           *     }
+           *   }
+           * })
+           * ```
+           *
+           * See {@link ng.$animateProvider#register $animateProvider.register()} and
+           * {@link ngAnimate ngAnimate module} for more information.
+           */
+          animation: invokeLaterAndSetModuleName('$animateProvider', 'register'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#filter
+           * @module ng
+           * @param {string} name Filter name - this must be a valid angular expression identifier
+           * @param {Function} filterFactory Factory function for creating new instance of filter.
+           * @description
+           * See {@link ng.$filterProvider#register $filterProvider.register()}.
+           *
+           * <div class="alert alert-warning">
+           * **Note:** Filter names must be valid angular {@link expression} identifiers, such as `uppercase` or `orderBy`.
+           * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace
+           * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores
+           * (`myapp_subsection_filterx`).
+           * </div>
+           */
+          filter: invokeLaterAndSetModuleName('$filterProvider', 'register'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#controller
+           * @module ng
+           * @param {string|Object} name Controller name, or an object map of controllers where the
+           *    keys are the names and the values are the constructors.
+           * @param {Function} constructor Controller constructor function.
+           * @description
+           * See {@link ng.$controllerProvider#register $controllerProvider.register()}.
+           */
+          controller: invokeLaterAndSetModuleName('$controllerProvider', 'register'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#directive
+           * @module ng
+           * @param {string|Object} name Directive name, or an object map of directives where the
+           *    keys are the names and the values are the factories.
+           * @param {Function} directiveFactory Factory function for creating new instance of
+           * directives.
+           * @description
+           * See {@link ng.$compileProvider#directive $compileProvider.directive()}.
+           */
+          directive: invokeLaterAndSetModuleName('$compileProvider', 'directive'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#config
+           * @module ng
+           * @param {Function} configFn Execute this function on module load. Useful for service
+           *    configuration.
+           * @description
+           * Use this method to register work which needs to be performed on module loading.
+           * For more about how to configure services, see
+           * {@link providers#provider-recipe Provider Recipe}.
+           */
+          config: config,
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#run
+           * @module ng
+           * @param {Function} initializationFn Execute this function after injector creation.
+           *    Useful for application initialization.
+           * @description
+           * Use this method to register work which should be performed when the injector is done
+           * loading all modules.
+           */
+          run: function(block) {
+            runBlocks.push(block);
+            return this;
+          }
+        };
+
+        if (configFn) {
+          config(configFn);
+        }
+
+        return moduleInstance;
+
+        /**
+         * @param {string} provider
+         * @param {string} method
+         * @param {String=} insertMethod
+         * @returns {angular.Module}
+         */
+        function invokeLater(provider, method, insertMethod, queue) {
+          if (!queue) queue = invokeQueue;
+          return function() {
+            queue[insertMethod || 'push']([provider, method, arguments]);
+            return moduleInstance;
+          };
+        }
+
+        /**
+         * @param {string} provider
+         * @param {string} method
+         * @returns {angular.Module}
+         */
+        function invokeLaterAndSetModuleName(provider, method) {
+          return function(recipeName, factoryFunction) {
+            if (factoryFunction && isFunction(factoryFunction)) factoryFunction.$$moduleName = name;
+            invokeQueue.push([provider, method, arguments]);
+            return moduleInstance;
+          };
+        }
+      });
+    };
+  });
+
+}
+
+/* global: toDebugString: true */
+
+function serializeObject(obj) {
+  var seen = [];
+
+  return JSON.stringify(obj, function(key, val) {
+    val = toJsonReplacer(key, val);
+    if (isObject(val)) {
+
+      if (seen.indexOf(val) >= 0) return '...';
+
+      seen.push(val);
+    }
+    return val;
+  });
+}
+
+function toDebugString(obj) {
+  if (typeof obj === 'function') {
+    return obj.toString().replace(/ \{[\s\S]*$/, '');
+  } else if (isUndefined(obj)) {
+    return 'undefined';
+  } else if (typeof obj !== 'string') {
+    return serializeObject(obj);
+  }
+  return obj;
+}
+
+/* global angularModule: true,
+  version: true,
+
+  $CompileProvider,
+
+  htmlAnchorDirective,
+  inputDirective,
+  inputDirective,
+  formDirective,
+  scriptDirective,
+  selectDirective,
+  styleDirective,
+  optionDirective,
+  ngBindDirective,
+  ngBindHtmlDirective,
+  ngBindTemplateDirective,
+  ngClassDirective,
+  ngClassEvenDirective,
+  ngClassOddDirective,
+  ngCloakDirective,
+  ngControllerDirective,
+  ngFormDirective,
+  ngHideDirective,
+  ngIfDirective,
+  ngIncludeDirective,
+  ngIncludeFillContentDirective,
+  ngInitDirective,
+  ngNonBindableDirective,
+  ngPluralizeDirective,
+  ngRepeatDirective,
+  ngShowDirective,
+  ngStyleDirective,
+  ngSwitchDirective,
+  ngSwitchWhenDirective,
+  ngSwitchDefaultDirective,
+  ngOptionsDirective,
+  ngTranscludeDirective,
+  ngModelDirective,
+  ngListDirective,
+  ngChangeDirective,
+  patternDirective,
+  patternDirective,
+  requiredDirective,
+  requiredDirective,
+  minlengthDirective,
+  minlengthDirective,
+  maxlengthDirective,
+  maxlengthDirective,
+  ngValueDirective,
+  ngModelOptionsDirective,
+  ngAttributeAliasDirectives,
+  ngEventDirectives,
+
+  $AnchorScrollProvider,
+  $AnimateProvider,
+  $CoreAnimateCssProvider,
+  $$CoreAnimateQueueProvider,
+  $$CoreAnimateRunnerProvider,
+  $BrowserProvider,
+  $CacheFactoryProvider,
+  $ControllerProvider,
+  $DocumentProvider,
+  $ExceptionHandlerProvider,
+  $FilterProvider,
+  $$ForceReflowProvider,
+  $InterpolateProvider,
+  $IntervalProvider,
+  $$HashMapProvider,
+  $HttpProvider,
+  $HttpParamSerializerProvider,
+  $HttpParamSerializerJQLikeProvider,
+  $HttpBackendProvider,
+  $xhrFactoryProvider,
+  $LocationProvider,
+  $LogProvider,
+  $ParseProvider,
+  $RootScopeProvider,
+  $QProvider,
+  $$QProvider,
+  $$SanitizeUriProvider,
+  $SceProvider,
+  $SceDelegateProvider,
+  $SnifferProvider,
+  $TemplateCacheProvider,
+  $TemplateRequestProvider,
+  $$TestabilityProvider,
+  $TimeoutProvider,
+  $$RAFProvider,
+  $WindowProvider,
+  $$jqLiteProvider,
+  $$CookieReaderProvider
+*/
+
+
+/**
+ * @ngdoc object
+ * @name angular.version
+ * @module ng
+ * @description
+ * An object that contains information about the current AngularJS version.
+ *
+ * This object has the following properties:
+ *
+ * - `full` – `{string}` – Full version string, such as "0.9.18".
+ * - `major` – `{number}` – Major version number, such as "0".
+ * - `minor` – `{number}` – Minor version number, such as "9".
+ * - `dot` – `{number}` – Dot version number, such as "18".
+ * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
+ */
+var version = {
+  full: '1.4.8',    // all of these placeholder strings will be replaced by grunt's
+  major: 1,    // package task
+  minor: 4,
+  dot: 8,
+  codeName: 'ice-manipulation'
+};
+
+
+function publishExternalAPI(angular) {
+  extend(angular, {
+    'bootstrap': bootstrap,
+    'copy': copy,
+    'extend': extend,
+    'merge': merge,
+    'equals': equals,
+    'element': jqLite,
+    'forEach': forEach,
+    'injector': createInjector,
+    'noop': noop,
+    'bind': bind,
+    'toJson': toJson,
+    'fromJson': fromJson,
+    'identity': identity,
+    'isUndefined': isUndefined,
+    'isDefined': isDefined,
+    'isString': isString,
+    'isFunction': isFunction,
+    'isObject': isObject,
+    'isNumber': isNumber,
+    'isElement': isElement,
+    'isArray': isArray,
+    'version': version,
+    'isDate': isDate,
+    'lowercase': lowercase,
+    'uppercase': uppercase,
+    'callbacks': {counter: 0},
+    'getTestability': getTestability,
+    '$$minErr': minErr,
+    '$$csp': csp,
+    'reloadWithDebugInfo': reloadWithDebugInfo
+  });
+
+  angularModule = setupModuleLoader(window);
+
+  angularModule('ng', ['ngLocale'], ['$provide',
+    function ngModule($provide) {
+      // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it.
+      $provide.provider({
+        $$sanitizeUri: $$SanitizeUriProvider
+      });
+      $provide.provider('$compile', $CompileProvider).
+        directive({
+            a: htmlAnchorDirective,
+            input: inputDirective,
+            textarea: inputDirective,
+            form: formDirective,
+            script: scriptDirective,
+            select: selectDirective,
+            style: styleDirective,
+            option: optionDirective,
+            ngBind: ngBindDirective,
+            ngBindHtml: ngBindHtmlDirective,
+            ngBindTemplate: ngBindTemplateDirective,
+            ngClass: ngClassDirective,
+            ngClassEven: ngClassEvenDirective,
+            ngClassOdd: ngClassOddDirective,
+            ngCloak: ngCloakDirective,
+            ngController: ngControllerDirective,
+            ngForm: ngFormDirective,
+            ngHide: ngHideDirective,
+            ngIf: ngIfDirective,
+            ngInclude: ngIncludeDirective,
+            ngInit: ngInitDirective,
+            ngNonBindable: ngNonBindableDirective,
+            ngPluralize: ngPluralizeDirective,
+            ngRepeat: ngRepeatDirective,
+            ngShow: ngShowDirective,
+            ngStyle: ngStyleDirective,
+            ngSwitch: ngSwitchDirective,
+            ngSwitchWhen: ngSwitchWhenDirective,
+            ngSwitchDefault: ngSwitchDefaultDirective,
+            ngOptions: ngOptionsDirective,
+            ngTransclude: ngTranscludeDirective,
+            ngModel: ngModelDirective,
+            ngList: ngListDirective,
+            ngChange: ngChangeDirective,
+            pattern: patternDirective,
+            ngPattern: patternDirective,
+            required: requiredDirective,
+            ngRequired: requiredDirective,
+            minlength: minlengthDirective,
+            ngMinlength: minlengthDirective,
+            maxlength: maxlengthDirective,
+            ngMaxlength: maxlengthDirective,
+            ngValue: ngValueDirective,
+            ngModelOptions: ngModelOptionsDirective
+        }).
+        directive({
+          ngInclude: ngIncludeFillContentDirective
+        }).
+        directive(ngAttributeAliasDirectives).
+        directive(ngEventDirectives);
+      $provide.provider({
+        $anchorScroll: $AnchorScrollProvider,
+        $animate: $AnimateProvider,
+        $animateCss: $CoreAnimateCssProvider,
+        $$animateQueue: $$CoreAnimateQueueProvider,
+        $$AnimateRunner: $$CoreAnimateRunnerProvider,
+        $browser: $BrowserProvider,
+        $cacheFactory: $CacheFactoryProvider,
+        $controller: $ControllerProvider,
+        $document: $DocumentProvider,
+        $exceptionHandler: $ExceptionHandlerProvider,
+        $filter: $FilterProvider,
+        $$forceReflow: $$ForceReflowProvider,
+        $interpolate: $InterpolateProvider,
+        $interval: $IntervalProvider,
+        $http: $HttpProvider,
+        $httpParamSerializer: $HttpParamSerializerProvider,
+        $httpParamSerializerJQLike: $HttpParamSerializerJQLikeProvider,
+        $httpBackend: $HttpBackendProvider,
+        $xhrFactory: $xhrFactoryProvider,
+        $location: $LocationProvider,
+        $log: $LogProvider,
+        $parse: $ParseProvider,
+        $rootScope: $RootScopeProvider,
+        $q: $QProvider,
+        $$q: $$QProvider,
+        $sce: $SceProvider,
+        $sceDelegate: $SceDelegateProvider,
+        $sniffer: $SnifferProvider,
+        $templateCache: $TemplateCacheProvider,
+        $templateRequest: $TemplateRequestProvider,
+        $$testability: $$TestabilityProvider,
+        $timeout: $TimeoutProvider,
+        $window: $WindowProvider,
+        $$rAF: $$RAFProvider,
+        $$jqLite: $$jqLiteProvider,
+        $$HashMap: $$HashMapProvider,
+        $$cookieReader: $$CookieReaderProvider
+      });
+    }
+  ]);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *     Any commits to this file should be reviewed with security in mind.  *
+ *   Changes to this file can potentially create security vulnerabilities. *
+ *          An approval from 2 Core members with history of modifying      *
+ *                         this file is required.                          *
+ *                                                                         *
+ *  Does the change somehow allow for arbitrary javascript to be executed? *
+ *    Or allows for someone to change the prototype of built-in objects?   *
+ *     Or gives undesired access to variables likes document or window?    *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* global JQLitePrototype: true,
+  addEventListenerFn: true,
+  removeEventListenerFn: true,
+  BOOLEAN_ATTR: true,
+  ALIASED_ATTR: true,
+*/
+
+//////////////////////////////////
+//JQLite
+//////////////////////////////////
+
+/**
+ * @ngdoc function
+ * @name angular.element
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element.
+ *
+ * If jQuery is available, `angular.element` is an alias for the
+ * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element`
+ * delegates to Angular's built-in subset of jQuery, called "jQuery lite" or "jqLite."
+ *
+ * <div class="alert alert-success">jqLite is a tiny, API-compatible subset of jQuery that allows
+ * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most
+ * commonly needed functionality with the goal of having a very small footprint.</div>
+ *
+ * To use `jQuery`, simply ensure it is loaded before the `angular.js` file.
+ *
+ * <div class="alert">**Note:** all element references in Angular are always wrapped with jQuery or
+ * jqLite; they are never raw DOM references.</div>
+ *
+ * ## Angular's jqLite
+ * jqLite provides only the following jQuery methods:
+ *
+ * - [`addClass()`](http://api.jquery.com/addClass/)
+ * - [`after()`](http://api.jquery.com/after/)
+ * - [`append()`](http://api.jquery.com/append/)
+ * - [`attr()`](http://api.jquery.com/attr/) - Does not support functions as parameters
+ * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData
+ * - [`children()`](http://api.jquery.com/children/) - Does not support selectors
+ * - [`clone()`](http://api.jquery.com/clone/)
+ * - [`contents()`](http://api.jquery.com/contents/)
+ * - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyle()`. As a setter, does not convert numbers to strings or append 'px'.
+ * - [`data()`](http://api.jquery.com/data/)
+ * - [`detach()`](http://api.jquery.com/detach/)
+ * - [`empty()`](http://api.jquery.com/empty/)
+ * - [`eq()`](http://api.jquery.com/eq/)
+ * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name
+ * - [`hasClass()`](http://api.jquery.com/hasClass/)
+ * - [`html()`](http://api.jquery.com/html/)
+ * - [`next()`](http://api.jquery.com/next/) - Does not support selectors
+ * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData
+ * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces, selectors or event object as parameter
+ * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors
+ * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors
+ * - [`prepend()`](http://api.jquery.com/prepend/)
+ * - [`prop()`](http://api.jquery.com/prop/)
+ * - [`ready()`](http://api.jquery.com/ready/)
+ * - [`remove()`](http://api.jquery.com/remove/)
+ * - [`removeAttr()`](http://api.jquery.com/removeAttr/)
+ * - [`removeClass()`](http://api.jquery.com/removeClass/)
+ * - [`removeData()`](http://api.jquery.com/removeData/)
+ * - [`replaceWith()`](http://api.jquery.com/replaceWith/)
+ * - [`text()`](http://api.jquery.com/text/)
+ * - [`toggleClass()`](http://api.jquery.com/toggleClass/)
+ * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.
+ * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces or event object as parameter
+ * - [`val()`](http://api.jquery.com/val/)
+ * - [`wrap()`](http://api.jquery.com/wrap/)
+ *
+ * ## jQuery/jqLite Extras
+ * Angular also provides the following additional methods and events to both jQuery and jqLite:
+ *
+ * ### Events
+ * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event
+ *    on all DOM nodes being removed.  This can be used to clean up any 3rd party bindings to the DOM
+ *    element before it is removed.
+ *
+ * ### Methods
+ * - `controller(name)` - retrieves the controller of the current element or its parent. By default
+ *   retrieves controller associated with the `ngController` directive. If `name` is provided as
+ *   camelCase directive name, then the controller for this directive will be retrieved (e.g.
+ *   `'ngModel'`).
+ * - `injector()` - retrieves the injector of the current element or its parent.
+ * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current
+ *   element or its parent. Requires {@link guide/production#disabling-debug-data Debug Data} to
+ *   be enabled.
+ * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the
+ *   current element. This getter should be used only on elements that contain a directive which starts a new isolate
+ *   scope. Calling `scope()` on this element always returns the original non-isolate scope.
+ *   Requires {@link guide/production#disabling-debug-data Debug Data} to be enabled.
+ * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top
+ *   parent element is reached.
+ *
+ * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery.
+ * @returns {Object} jQuery object.
+ */
+
+JQLite.expando = 'ng339';
+
+var jqCache = JQLite.cache = {},
+    jqId = 1,
+    addEventListenerFn = function(element, type, fn) {
+      element.addEventListener(type, fn, false);
+    },
+    removeEventListenerFn = function(element, type, fn) {
+      element.removeEventListener(type, fn, false);
+    };
+
+/*
+ * !!! This is an undocumented "private" function !!!
+ */
+JQLite._data = function(node) {
+  //jQuery always returns an object on cache miss
+  return this.cache[node[this.expando]] || {};
+};
+
+function jqNextId() { return ++jqId; }
+
+
+var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
+var MOZ_HACK_REGEXP = /^moz([A-Z])/;
+var MOUSE_EVENT_MAP= { mouseleave: "mouseout", mouseenter: "mouseover"};
+var jqLiteMinErr = minErr('jqLite');
+
+/**
+ * Converts snake_case to camelCase.
+ * Also there is special case for Moz prefix starting with upper case letter.
+ * @param name Name to normalize
+ */
+function camelCase(name) {
+  return name.
+    replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
+      return offset ? letter.toUpperCase() : letter;
+    }).
+    replace(MOZ_HACK_REGEXP, 'Moz$1');
+}
+
+var SINGLE_TAG_REGEXP = /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/;
+var HTML_REGEXP = /<|&#?\w+;/;
+var TAG_NAME_REGEXP = /<([\w:-]+)/;
+var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi;
+
+var wrapMap = {
+  'option': [1, '<select multiple="multiple">', '</select>'],
+
+  'thead': [1, '<table>', '</table>'],
+  'col': [2, '<table><colgroup>', '</colgroup></table>'],
+  'tr': [2, '<table><tbody>', '</tbody></table>'],
+  'td': [3, '<table><tbody><tr>', '</tr></tbody></table>'],
+  '_default': [0, "", ""]
+};
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function jqLiteIsTextNode(html) {
+  return !HTML_REGEXP.test(html);
+}
+
+function jqLiteAcceptsData(node) {
+  // The window object can accept data but has no nodeType
+  // Otherwise we are only interested in elements (1) and documents (9)
+  var nodeType = node.nodeType;
+  return nodeType === NODE_TYPE_ELEMENT || !nodeType || nodeType === NODE_TYPE_DOCUMENT;
+}
+
+function jqLiteHasData(node) {
+  for (var key in jqCache[node.ng339]) {
+    return true;
+  }
+  return false;
+}
+
+function jqLiteBuildFragment(html, context) {
+  var tmp, tag, wrap,
+      fragment = context.createDocumentFragment(),
+      nodes = [], i;
+
+  if (jqLiteIsTextNode(html)) {
+    // Convert non-html into a text node
+    nodes.push(context.createTextNode(html));
+  } else {
+    // Convert html into DOM nodes
+    tmp = tmp || fragment.appendChild(context.createElement("div"));
+    tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase();
+    wrap = wrapMap[tag] || wrapMap._default;
+    tmp.innerHTML = wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1></$2>") + wrap[2];
+
+    // Descend through wrappers to the right content
+    i = wrap[0];
+    while (i--) {
+      tmp = tmp.lastChild;
+    }
+
+    nodes = concat(nodes, tmp.childNodes);
+
+    tmp = fragment.firstChild;
+    tmp.textContent = "";
+  }
+
+  // Remove wrapper from fragment
+  fragment.textContent = "";
+  fragment.innerHTML = ""; // Clear inner HTML
+  forEach(nodes, function(node) {
+    fragment.appendChild(node);
+  });
+
+  return fragment;
+}
+
+function jqLiteParseHTML(html, context) {
+  context = context || document;
+  var parsed;
+
+  if ((parsed = SINGLE_TAG_REGEXP.exec(html))) {
+    return [context.createElement(parsed[1])];
+  }
+
+  if ((parsed = jqLiteBuildFragment(html, context))) {
+    return parsed.childNodes;
+  }
+
+  return [];
+}
+
+
+// IE9-11 has no method "contains" in SVG element and in Node.prototype. Bug #10259.
+var jqLiteContains = Node.prototype.contains || function(arg) {
+  // jshint bitwise: false
+  return !!(this.compareDocumentPosition(arg) & 16);
+  // jshint bitwise: true
+};
+
+/////////////////////////////////////////////
+function JQLite(element) {
+  if (element instanceof JQLite) {
+    return element;
+  }
+
+  var argIsString;
+
+  if (isString(element)) {
+    element = trim(element);
+    argIsString = true;
+  }
+  if (!(this instanceof JQLite)) {
+    if (argIsString && element.charAt(0) != '<') {
+      throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element');
+    }
+    return new JQLite(element);
+  }
+
+  if (argIsString) {
+    jqLiteAddNodes(this, jqLiteParseHTML(element));
+  } else {
+    jqLiteAddNodes(this, element);
+  }
+}
+
+function jqLiteClone(element) {
+  return element.cloneNode(true);
+}
+
+function jqLiteDealoc(element, onlyDescendants) {
+  if (!onlyDescendants) jqLiteRemoveData(element);
+
+  if (element.querySelectorAll) {
+    var descendants = element.querySelectorAll('*');
+    for (var i = 0, l = descendants.length; i < l; i++) {
+      jqLiteRemoveData(descendants[i]);
+    }
+  }
+}
+
+function jqLiteOff(element, type, fn, unsupported) {
+  if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument');
+
+  var expandoStore = jqLiteExpandoStore(element);
+  var events = expandoStore && expandoStore.events;
+  var handle = expandoStore && expandoStore.handle;
+
+  if (!handle) return; //no listeners registered
+
+  if (!type) {
+    for (type in events) {
+      if (type !== '$destroy') {
+        removeEventListenerFn(element, type, handle);
+      }
+      delete events[type];
+    }
+  } else {
+
+    var removeHandler = function(type) {
+      var listenerFns = events[type];
+      if (isDefined(fn)) {
+        arrayRemove(listenerFns || [], fn);
+      }
+      if (!(isDefined(fn) && listenerFns && listenerFns.length > 0)) {
+        removeEventListenerFn(element, type, handle);
+        delete events[type];
+      }
+    };
+
+    forEach(type.split(' '), function(type) {
+      removeHandler(type);
+      if (MOUSE_EVENT_MAP[type]) {
+        removeHandler(MOUSE_EVENT_MAP[type]);
+      }
+    });
+  }
+}
+
+function jqLiteRemoveData(element, name) {
+  var expandoId = element.ng339;
+  var expandoStore = expandoId && jqCache[expandoId];
+
+  if (expandoStore) {
+    if (name) {
+      delete expandoStore.data[name];
+      return;
+    }
+
+    if (expandoStore.handle) {
+      if (expandoStore.events.$destroy) {
+        expandoStore.handle({}, '$destroy');
+      }
+      jqLiteOff(element);
+    }
+    delete jqCache[expandoId];
+    element.ng339 = undefined; // don't delete DOM expandos. IE and Chrome don't like it
+  }
+}
+
+
+function jqLiteExpandoStore(element, createIfNecessary) {
+  var expandoId = element.ng339,
+      expandoStore = expandoId && jqCache[expandoId];
+
+  if (createIfNecessary && !expandoStore) {
+    element.ng339 = expandoId = jqNextId();
+    expandoStore = jqCache[expandoId] = {events: {}, data: {}, handle: undefined};
+  }
+
+  return expandoStore;
+}
+
+
+function jqLiteData(element, key, value) {
+  if (jqLiteAcceptsData(element)) {
+
+    var isSimpleSetter = isDefined(value);
+    var isSimpleGetter = !isSimpleSetter && key && !isObject(key);
+    var massGetter = !key;
+    var expandoStore = jqLiteExpandoStore(element, !isSimpleGetter);
+    var data = expandoStore && expandoStore.data;
+
+    if (isSimpleSetter) { // data('key', value)
+      data[key] = value;
+    } else {
+      if (massGetter) {  // data()
+        return data;
+      } else {
+        if (isSimpleGetter) { // data('key')
+          // don't force creation of expandoStore if it doesn't exist yet
+          return data && data[key];
+        } else { // mass-setter: data({key1: val1, key2: val2})
+          extend(data, key);
+        }
+      }
+    }
+  }
+}
+
+function jqLiteHasClass(element, selector) {
+  if (!element.getAttribute) return false;
+  return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " ").
+      indexOf(" " + selector + " ") > -1);
+}
+
+function jqLiteRemoveClass(element, cssClasses) {
+  if (cssClasses && element.setAttribute) {
+    forEach(cssClasses.split(' '), function(cssClass) {
+      element.setAttribute('class', trim(
+          (" " + (element.getAttribute('class') || '') + " ")
+          .replace(/[\n\t]/g, " ")
+          .replace(" " + trim(cssClass) + " ", " "))
+      );
+    });
+  }
+}
+
+function jqLiteAddClass(element, cssClasses) {
+  if (cssClasses && element.setAttribute) {
+    var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ')
+                            .replace(/[\n\t]/g, " ");
+
+    forEach(cssClasses.split(' '), function(cssClass) {
+      cssClass = trim(cssClass);
+      if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) {
+        existingClasses += cssClass + ' ';
+      }
+    });
+
+    element.setAttribute('class', trim(existingClasses));
+  }
+}
+
+
+function jqLiteAddNodes(root, elements) {
+  // THIS CODE IS VERY HOT. Don't make changes without benchmarking.
+
+  if (elements) {
+
+    // if a Node (the most common case)
+    if (elements.nodeType) {
+      root[root.length++] = elements;
+    } else {
+      var length = elements.length;
+
+      // if an Array or NodeList and not a Window
+      if (typeof length === 'number' && elements.window !== elements) {
+        if (length) {
+          for (var i = 0; i < length; i++) {
+            root[root.length++] = elements[i];
+          }
+        }
+      } else {
+        root[root.length++] = elements;
+      }
+    }
+  }
+}
+
+
+function jqLiteController(element, name) {
+  return jqLiteInheritedData(element, '$' + (name || 'ngController') + 'Controller');
+}
+
+function jqLiteInheritedData(element, name, value) {
+  // if element is the document object work with the html element instead
+  // this makes $(document).scope() possible
+  if (element.nodeType == NODE_TYPE_DOCUMENT) {
+    element = element.documentElement;
+  }
+  var names = isArray(name) ? name : [name];
+
+  while (element) {
+    for (var i = 0, ii = names.length; i < ii; i++) {
+      if (isDefined(value = jqLite.data(element, names[i]))) return value;
+    }
+
+    // If dealing with a document fragment node with a host element, and no parent, use the host
+    // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM
+    // to lookup parent controllers.
+    element = element.parentNode || (element.nodeType === NODE_TYPE_DOCUMENT_FRAGMENT && element.host);
+  }
+}
+
+function jqLiteEmpty(element) {
+  jqLiteDealoc(element, true);
+  while (element.firstChild) {
+    element.removeChild(element.firstChild);
+  }
+}
+
+function jqLiteRemove(element, keepData) {
+  if (!keepData) jqLiteDealoc(element);
+  var parent = element.parentNode;
+  if (parent) parent.removeChild(element);
+}
+
+
+function jqLiteDocumentLoaded(action, win) {
+  win = win || window;
+  if (win.document.readyState === 'complete') {
+    // Force the action to be run async for consistent behaviour
+    // from the action's point of view
+    // i.e. it will definitely not be in a $apply
+    win.setTimeout(action);
+  } else {
+    // No need to unbind this handler as load is only ever called once
+    jqLite(win).on('load', action);
+  }
+}
+
+//////////////////////////////////////////
+// Functions which are declared directly.
+//////////////////////////////////////////
+var JQLitePrototype = JQLite.prototype = {
+  ready: function(fn) {
+    var fired = false;
+
+    function trigger() {
+      if (fired) return;
+      fired = true;
+      fn();
+    }
+
+    // check if document is already loaded
+    if (document.readyState === 'complete') {
+      setTimeout(trigger);
+    } else {
+      this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9
+      // we can not use jqLite since we are not done loading and jQuery could be loaded later.
+      // jshint -W064
+      JQLite(window).on('load', trigger); // fallback to window.onload for others
+      // jshint +W064
+    }
+  },
+  toString: function() {
+    var value = [];
+    forEach(this, function(e) { value.push('' + e);});
+    return '[' + value.join(', ') + ']';
+  },
+
+  eq: function(index) {
+      return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]);
+  },
+
+  length: 0,
+  push: push,
+  sort: [].sort,
+  splice: [].splice
+};
+
+//////////////////////////////////////////
+// Functions iterating getter/setters.
+// these functions return self on setter and
+// value on get.
+//////////////////////////////////////////
+var BOOLEAN_ATTR = {};
+forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) {
+  BOOLEAN_ATTR[lowercase(value)] = value;
+});
+var BOOLEAN_ELEMENTS = {};
+forEach('input,select,option,textarea,button,form,details'.split(','), function(value) {
+  BOOLEAN_ELEMENTS[value] = true;
+});
+var ALIASED_ATTR = {
+  'ngMinlength': 'minlength',
+  'ngMaxlength': 'maxlength',
+  'ngMin': 'min',
+  'ngMax': 'max',
+  'ngPattern': 'pattern'
+};
+
+function getBooleanAttrName(element, name) {
+  // check dom last since we will most likely fail on name
+  var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()];
+
+  // booleanAttr is here twice to minimize DOM access
+  return booleanAttr && BOOLEAN_ELEMENTS[nodeName_(element)] && booleanAttr;
+}
+
+function getAliasedAttrName(name) {
+  return ALIASED_ATTR[name];
+}
+
+forEach({
+  data: jqLiteData,
+  removeData: jqLiteRemoveData,
+  hasData: jqLiteHasData
+}, function(fn, name) {
+  JQLite[name] = fn;
+});
+
+forEach({
+  data: jqLiteData,
+  inheritedData: jqLiteInheritedData,
+
+  scope: function(element) {
+    // Can't use jqLiteData here directly so we stay compatible with jQuery!
+    return jqLite.data(element, '$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']);
+  },
+
+  isolateScope: function(element) {
+    // Can't use jqLiteData here directly so we stay compatible with jQuery!
+    return jqLite.data(element, '$isolateScope') || jqLite.data(element, '$isolateScopeNoTemplate');
+  },
+
+  controller: jqLiteController,
+
+  injector: function(element) {
+    return jqLiteInheritedData(element, '$injector');
+  },
+
+  removeAttr: function(element, name) {
+    element.removeAttribute(name);
+  },
+
+  hasClass: jqLiteHasClass,
+
+  css: function(element, name, value) {
+    name = camelCase(name);
+
+    if (isDefined(value)) {
+      element.style[name] = value;
+    } else {
+      return element.style[name];
+    }
+  },
+
+  attr: function(element, name, value) {
+    var nodeType = element.nodeType;
+    if (nodeType === NODE_TYPE_TEXT || nodeType === NODE_TYPE_ATTRIBUTE || nodeType === NODE_TYPE_COMMENT) {
+      return;
+    }
+    var lowercasedName = lowercase(name);
+    if (BOOLEAN_ATTR[lowercasedName]) {
+      if (isDefined(value)) {
+        if (!!value) {
+          element[name] = true;
+          element.setAttribute(name, lowercasedName);
+        } else {
+          element[name] = false;
+          element.removeAttribute(lowercasedName);
+        }
+      } else {
+        return (element[name] ||
+                 (element.attributes.getNamedItem(name) || noop).specified)
+               ? lowercasedName
+               : undefined;
+      }
+    } else if (isDefined(value)) {
+      element.setAttribute(name, value);
+    } else if (element.getAttribute) {
+      // the extra argument "2" is to get the right thing for a.href in IE, see jQuery code
+      // some elements (e.g. Document) don't have get attribute, so return undefined
+      var ret = element.getAttribute(name, 2);
+      // normalize non-existing attributes to undefined (as jQuery)
+      return ret === null ? undefined : ret;
+    }
+  },
+
+  prop: function(element, name, value) {
+    if (isDefined(value)) {
+      element[name] = value;
+    } else {
+      return element[name];
+    }
+  },
+
+  text: (function() {
+    getText.$dv = '';
+    return getText;
+
+    function getText(element, value) {
+      if (isUndefined(value)) {
+        var nodeType = element.nodeType;
+        return (nodeType === NODE_TYPE_ELEMENT || nodeType === NODE_TYPE_TEXT) ? element.textContent : '';
+      }
+      element.textContent = value;
+    }
+  })(),
+
+  val: function(element, value) {
+    if (isUndefined(value)) {
+      if (element.multiple && nodeName_(element) === 'select') {
+        var result = [];
+        forEach(element.options, function(option) {
+          if (option.selected) {
+            result.push(option.value || option.text);
+          }
+        });
+        return result.length === 0 ? null : result;
+      }
+      return element.value;
+    }
+    element.value = value;
+  },
+
+  html: function(element, value) {
+    if (isUndefined(value)) {
+      return element.innerHTML;
+    }
+    jqLiteDealoc(element, true);
+    element.innerHTML = value;
+  },
+
+  empty: jqLiteEmpty
+}, function(fn, name) {
+  /**
+   * Properties: writes return selection, reads return first value
+   */
+  JQLite.prototype[name] = function(arg1, arg2) {
+    var i, key;
+    var nodeCount = this.length;
+
+    // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it
+    // in a way that survives minification.
+    // jqLiteEmpty takes no arguments but is a setter.
+    if (fn !== jqLiteEmpty &&
+        (isUndefined((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2))) {
+      if (isObject(arg1)) {
+
+        // we are a write, but the object properties are the key/values
+        for (i = 0; i < nodeCount; i++) {
+          if (fn === jqLiteData) {
+            // data() takes the whole object in jQuery
+            fn(this[i], arg1);
+          } else {
+            for (key in arg1) {
+              fn(this[i], key, arg1[key]);
+            }
+          }
+        }
+        // return self for chaining
+        return this;
+      } else {
+        // we are a read, so read the first child.
+        // TODO: do we still need this?
+        var value = fn.$dv;
+        // Only if we have $dv do we iterate over all, otherwise it is just the first element.
+        var jj = (isUndefined(value)) ? Math.min(nodeCount, 1) : nodeCount;
+        for (var j = 0; j < jj; j++) {
+          var nodeValue = fn(this[j], arg1, arg2);
+          value = value ? value + nodeValue : nodeValue;
+        }
+        return value;
+      }
+    } else {
+      // we are a write, so apply to all children
+      for (i = 0; i < nodeCount; i++) {
+        fn(this[i], arg1, arg2);
+      }
+      // return self for chaining
+      return this;
+    }
+  };
+});
+
+function createEventHandler(element, events) {
+  var eventHandler = function(event, type) {
+    // jQuery specific api
+    event.isDefaultPrevented = function() {
+      return event.defaultPrevented;
+    };
+
+    var eventFns = events[type || event.type];
+    var eventFnsLength = eventFns ? eventFns.length : 0;
+
+    if (!eventFnsLength) return;
+
+    if (isUndefined(event.immediatePropagationStopped)) {
+      var originalStopImmediatePropagation = event.stopImmediatePropagation;
+      event.stopImmediatePropagation = function() {
+        event.immediatePropagationStopped = true;
+
+        if (event.stopPropagation) {
+          event.stopPropagation();
+        }
+
+        if (originalStopImmediatePropagation) {
+          originalStopImmediatePropagation.call(event);
+        }
+      };
+    }
+
+    event.isImmediatePropagationStopped = function() {
+      return event.immediatePropagationStopped === true;
+    };
+
+    // Some events have special handlers that wrap the real handler
+    var handlerWrapper = eventFns.specialHandlerWrapper || defaultHandlerWrapper;
+
+    // Copy event handlers in case event handlers array is modified during execution.
+    if ((eventFnsLength > 1)) {
+      eventFns = shallowCopy(eventFns);
+    }
+
+    for (var i = 0; i < eventFnsLength; i++) {
+      if (!event.isImmediatePropagationStopped()) {
+        handlerWrapper(element, event, eventFns[i]);
+      }
+    }
+  };
+
+  // TODO: this is a hack for angularMocks/clearDataCache that makes it possible to deregister all
+  //       events on `element`
+  eventHandler.elem = element;
+  return eventHandler;
+}
+
+function defaultHandlerWrapper(element, event, handler) {
+  handler.call(element, event);
+}
+
+function specialMouseHandlerWrapper(target, event, handler) {
+  // Refer to jQuery's implementation of mouseenter & mouseleave
+  // Read about mouseenter and mouseleave:
+  // http://www.quirksmode.org/js/events_mouse.html#link8
+  var related = event.relatedTarget;
+  // For mousenter/leave call the handler if related is outside the target.
+  // NB: No relatedTarget if the mouse left/entered the browser window
+  if (!related || (related !== target && !jqLiteContains.call(target, related))) {
+    handler.call(target, event);
+  }
+}
+
+//////////////////////////////////////////
+// Functions iterating traversal.
+// These functions chain results into a single
+// selector.
+//////////////////////////////////////////
+forEach({
+  removeData: jqLiteRemoveData,
+
+  on: function jqLiteOn(element, type, fn, unsupported) {
+    if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters');
+
+    // Do not add event handlers to non-elements because they will not be cleaned up.
+    if (!jqLiteAcceptsData(element)) {
+      return;
+    }
+
+    var expandoStore = jqLiteExpandoStore(element, true);
+    var events = expandoStore.events;
+    var handle = expandoStore.handle;
+
+    if (!handle) {
+      handle = expandoStore.handle = createEventHandler(element, events);
+    }
+
+    // http://jsperf.com/string-indexof-vs-split
+    var types = type.indexOf(' ') >= 0 ? type.split(' ') : [type];
+    var i = types.length;
+
+    var addHandler = function(type, specialHandlerWrapper, noEventListener) {
+      var eventFns = events[type];
+
+      if (!eventFns) {
+        eventFns = events[type] = [];
+        eventFns.specialHandlerWrapper = specialHandlerWrapper;
+        if (type !== '$destroy' && !noEventListener) {
+          addEventListenerFn(element, type, handle);
+        }
+      }
+
+      eventFns.push(fn);
+    };
+
+    while (i--) {
+      type = types[i];
+      if (MOUSE_EVENT_MAP[type]) {
+        addHandler(MOUSE_EVENT_MAP[type], specialMouseHandlerWrapper);
+        addHandler(type, undefined, true);
+      } else {
+        addHandler(type);
+      }
+    }
+  },
+
+  off: jqLiteOff,
+
+  one: function(element, type, fn) {
+    element = jqLite(element);
+
+    //add the listener twice so that when it is called
+    //you can remove the original function and still be
+    //able to call element.off(ev, fn) normally
+    element.on(type, function onFn() {
+      element.off(type, fn);
+      element.off(type, onFn);
+    });
+    element.on(type, fn);
+  },
+
+  replaceWith: function(element, replaceNode) {
+    var index, parent = element.parentNode;
+    jqLiteDealoc(element);
+    forEach(new JQLite(replaceNode), function(node) {
+      if (index) {
+        parent.insertBefore(node, index.nextSibling);
+      } else {
+        parent.replaceChild(node, element);
+      }
+      index = node;
+    });
+  },
+
+  children: function(element) {
+    var children = [];
+    forEach(element.childNodes, function(element) {
+      if (element.nodeType === NODE_TYPE_ELEMENT) {
+        children.push(element);
+      }
+    });
+    return children;
+  },
+
+  contents: function(element) {
+    return element.contentDocument || element.childNodes || [];
+  },
+
+  append: function(element, node) {
+    var nodeType = element.nodeType;
+    if (nodeType !== NODE_TYPE_ELEMENT && nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT) return;
+
+    node = new JQLite(node);
+
+    for (var i = 0, ii = node.length; i < ii; i++) {
+      var child = node[i];
+      element.appendChild(child);
+    }
+  },
+
+  prepend: function(element, node) {
+    if (element.nodeType === NODE_TYPE_ELEMENT) {
+      var index = element.firstChild;
+      forEach(new JQLite(node), function(child) {
+        element.insertBefore(child, index);
+      });
+    }
+  },
+
+  wrap: function(element, wrapNode) {
+    wrapNode = jqLite(wrapNode).eq(0).clone()[0];
+    var parent = element.parentNode;
+    if (parent) {
+      parent.replaceChild(wrapNode, element);
+    }
+    wrapNode.appendChild(element);
+  },
+
+  remove: jqLiteRemove,
+
+  detach: function(element) {
+    jqLiteRemove(element, true);
+  },
+
+  after: function(element, newElement) {
+    var index = element, parent = element.parentNode;
+    newElement = new JQLite(newElement);
+
+    for (var i = 0, ii = newElement.length; i < ii; i++) {
+      var node = newElement[i];
+      parent.insertBefore(node, index.nextSibling);
+      index = node;
+    }
+  },
+
+  addClass: jqLiteAddClass,
+  removeClass: jqLiteRemoveClass,
+
+  toggleClass: function(element, selector, condition) {
+    if (selector) {
+      forEach(selector.split(' '), function(className) {
+        var classCondition = condition;
+        if (isUndefined(classCondition)) {
+          classCondition = !jqLiteHasClass(element, className);
+        }
+        (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className);
+      });
+    }
+  },
+
+  parent: function(element) {
+    var parent = element.parentNode;
+    return parent && parent.nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT ? parent : null;
+  },
+
+  next: function(element) {
+    return element.nextElementSibling;
+  },
+
+  find: function(element, selector) {
+    if (element.getElementsByTagName) {
+      return element.getElementsByTagName(selector);
+    } else {
+      return [];
+    }
+  },
+
+  clone: jqLiteClone,
+
+  triggerHandler: function(element, event, extraParameters) {
+
+    var dummyEvent, eventFnsCopy, handlerArgs;
+    var eventName = event.type || event;
+    var expandoStore = jqLiteExpandoStore(element);
+    var events = expandoStore && expandoStore.events;
+    var eventFns = events && events[eventName];
+
+    if (eventFns) {
+      // Create a dummy event to pass to the handlers
+      dummyEvent = {
+        preventDefault: function() { this.defaultPrevented = true; },
+        isDefaultPrevented: function() { return this.defaultPrevented === true; },
+        stopImmediatePropagation: function() { this.immediatePropagationStopped = true; },
+        isImmediatePropagationStopped: function() { return this.immediatePropagationStopped === true; },
+        stopPropagation: noop,
+        type: eventName,
+        target: element
+      };
+
+      // If a custom event was provided then extend our dummy event with it
+      if (event.type) {
+        dummyEvent = extend(dummyEvent, event);
+      }
+
+      // Copy event handlers in case event handlers array is modified during execution.
+      eventFnsCopy = shallowCopy(eventFns);
+      handlerArgs = extraParameters ? [dummyEvent].concat(extraParameters) : [dummyEvent];
+
+      forEach(eventFnsCopy, function(fn) {
+        if (!dummyEvent.isImmediatePropagationStopped()) {
+          fn.apply(element, handlerArgs);
+        }
+      });
+    }
+  }
+}, function(fn, name) {
+  /**
+   * chaining functions
+   */
+  JQLite.prototype[name] = function(arg1, arg2, arg3) {
+    var value;
+
+    for (var i = 0, ii = this.length; i < ii; i++) {
+      if (isUndefined(value)) {
+        value = fn(this[i], arg1, arg2, arg3);
+        if (isDefined(value)) {
+          // any function which returns a value needs to be wrapped
+          value = jqLite(value);
+        }
+      } else {
+        jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3));
+      }
+    }
+    return isDefined(value) ? value : this;
+  };
+
+  // bind legacy bind/unbind to on/off
+  JQLite.prototype.bind = JQLite.prototype.on;
+  JQLite.prototype.unbind = JQLite.prototype.off;
+});
+
+
+// Provider for private $$jqLite service
+function $$jqLiteProvider() {
+  this.$get = function $$jqLite() {
+    return extend(JQLite, {
+      hasClass: function(node, classes) {
+        if (node.attr) node = node[0];
+        return jqLiteHasClass(node, classes);
+      },
+      addClass: function(node, classes) {
+        if (node.attr) node = node[0];
+        return jqLiteAddClass(node, classes);
+      },
+      removeClass: function(node, classes) {
+        if (node.attr) node = node[0];
+        return jqLiteRemoveClass(node, classes);
+      }
+    });
+  };
+}
+
+/**
+ * Computes a hash of an 'obj'.
+ * Hash of a:
+ *  string is string
+ *  number is number as string
+ *  object is either result of calling $$hashKey function on the object or uniquely generated id,
+ *         that is also assigned to the $$hashKey property of the object.
+ *
+ * @param obj
+ * @returns {string} hash string such that the same input will have the same hash string.
+ *         The resulting string key is in 'type:hashKey' format.
+ */
+function hashKey(obj, nextUidFn) {
+  var key = obj && obj.$$hashKey;
+
+  if (key) {
+    if (typeof key === 'function') {
+      key = obj.$$hashKey();
+    }
+    return key;
+  }
+
+  var objType = typeof obj;
+  if (objType == 'function' || (objType == 'object' && obj !== null)) {
+    key = obj.$$hashKey = objType + ':' + (nextUidFn || nextUid)();
+  } else {
+    key = objType + ':' + obj;
+  }
+
+  return key;
+}
+
+/**
+ * HashMap which can use objects as keys
+ */
+function HashMap(array, isolatedUid) {
+  if (isolatedUid) {
+    var uid = 0;
+    this.nextUid = function() {
+      return ++uid;
+    };
+  }
+  forEach(array, this.put, this);
+}
+HashMap.prototype = {
+  /**
+   * Store key value pair
+   * @param key key to store can be any type
+   * @param value value to store can be any type
+   */
+  put: function(key, value) {
+    this[hashKey(key, this.nextUid)] = value;
+  },
+
+  /**
+   * @param key
+   * @returns {Object} the value for the key
+   */
+  get: function(key) {
+    return this[hashKey(key, this.nextUid)];
+  },
+
+  /**
+   * Remove the key/value pair
+   * @param key
+   */
+  remove: function(key) {
+    var value = this[key = hashKey(key, this.nextUid)];
+    delete this[key];
+    return value;
+  }
+};
+
+var $$HashMapProvider = [function() {
+  this.$get = [function() {
+    return HashMap;
+  }];
+}];
+
+/**
+ * @ngdoc function
+ * @module ng
+ * @name angular.injector
+ * @kind function
+ *
+ * @description
+ * Creates an injector object that can be used for retrieving services as well as for
+ * dependency injection (see {@link guide/di dependency injection}).
+ *
+ * @param {Array.<string|Function>} modules A list of module functions or their aliases. See
+ *     {@link angular.module}. The `ng` module must be explicitly added.
+ * @param {boolean=} [strictDi=false] Whether the injector should be in strict mode, which
+ *     disallows argument name annotation inference.
+ * @returns {injector} Injector object. See {@link auto.$injector $injector}.
+ *
+ * @example
+ * Typical usage
+ * ```js
+ *   // create an injector
+ *   var $injector = angular.injector(['ng']);
+ *
+ *   // use the injector to kick off your application
+ *   // use the type inference to auto inject arguments, or use implicit injection
+ *   $injector.invoke(function($rootScope, $compile, $document) {
+ *     $compile($document)($rootScope);
+ *     $rootScope.$digest();
+ *   });
+ * ```
+ *
+ * Sometimes you want to get access to the injector of a currently running Angular app
+ * from outside Angular. Perhaps, you want to inject and compile some markup after the
+ * application has been bootstrapped. You can do this using the extra `injector()` added
+ * to JQuery/jqLite elements. See {@link angular.element}.
+ *
+ * *This is fairly rare but could be the case if a third party library is injecting the
+ * markup.*
+ *
+ * In the following example a new block of HTML containing a `ng-controller`
+ * directive is added to the end of the document body by JQuery. We then compile and link
+ * it into the current AngularJS scope.
+ *
+ * ```js
+ * var $div = $('<div ng-controller="MyCtrl">{{content.label}}</div>');
+ * $(document.body).append($div);
+ *
+ * angular.element(document).injector().invoke(function($compile) {
+ *   var scope = angular.element($div).scope();
+ *   $compile($div)(scope);
+ * });
+ * ```
+ */
+
+
+/**
+ * @ngdoc module
+ * @name auto
+ * @description
+ *
+ * Implicit module which gets automatically added to each {@link auto.$injector $injector}.
+ */
+
+var FN_ARGS = /^[^\(]*\(\s*([^\)]*)\)/m;
+var FN_ARG_SPLIT = /,/;
+var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/;
+var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
+var $injectorMinErr = minErr('$injector');
+
+function anonFn(fn) {
+  // For anonymous functions, showing at the very least the function signature can help in
+  // debugging.
+  var fnText = fn.toString().replace(STRIP_COMMENTS, ''),
+      args = fnText.match(FN_ARGS);
+  if (args) {
+    return 'function(' + (args[1] || '').replace(/[\s\r\n]+/, ' ') + ')';
+  }
+  return 'fn';
+}
+
+function annotate(fn, strictDi, name) {
+  var $inject,
+      fnText,
+      argDecl,
+      last;
+
+  if (typeof fn === 'function') {
+    if (!($inject = fn.$inject)) {
+      $inject = [];
+      if (fn.length) {
+        if (strictDi) {
+          if (!isString(name) || !name) {
+            name = fn.name || anonFn(fn);
+          }
+          throw $injectorMinErr('strictdi',
+            '{0} is not using explicit annotation and cannot be invoked in strict mode', name);
+        }
+        fnText = fn.toString().replace(STRIP_COMMENTS, '');
+        argDecl = fnText.match(FN_ARGS);
+        forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) {
+          arg.replace(FN_ARG, function(all, underscore, name) {
+            $inject.push(name);
+          });
+        });
+      }
+      fn.$inject = $inject;
+    }
+  } else if (isArray(fn)) {
+    last = fn.length - 1;
+    assertArgFn(fn[last], 'fn');
+    $inject = fn.slice(0, last);
+  } else {
+    assertArgFn(fn, 'fn', true);
+  }
+  return $inject;
+}
+
+///////////////////////////////////////
+
+/**
+ * @ngdoc service
+ * @name $injector
+ *
+ * @description
+ *
+ * `$injector` is used to retrieve object instances as defined by
+ * {@link auto.$provide provider}, instantiate types, invoke methods,
+ * and load modules.
+ *
+ * The following always holds true:
+ *
+ * ```js
+ *   var $injector = angular.injector();
+ *   expect($injector.get('$injector')).toBe($injector);
+ *   expect($injector.invoke(function($injector) {
+ *     return $injector;
+ *   })).toBe($injector);
+ * ```
+ *
+ * # Injection Function Annotation
+ *
+ * JavaScript does not have annotations, and annotations are needed for dependency injection. The
+ * following are all valid ways of annotating function with injection arguments and are equivalent.
+ *
+ * ```js
+ *   // inferred (only works if code not minified/obfuscated)
+ *   $injector.invoke(function(serviceA){});
+ *
+ *   // annotated
+ *   function explicit(serviceA) {};
+ *   explicit.$inject = ['serviceA'];
+ *   $injector.invoke(explicit);
+ *
+ *   // inline
+ *   $injector.invoke(['serviceA', function(serviceA){}]);
+ * ```
+ *
+ * ## Inference
+ *
+ * In JavaScript calling `toString()` on a function returns the function definition. The definition
+ * can then be parsed and the function arguments can be extracted. This method of discovering
+ * annotations is disallowed when the injector is in strict mode.
+ * *NOTE:* This does not work with minification, and obfuscation tools since these tools change the
+ * argument names.
+ *
+ * ## `$inject` Annotation
+ * By adding an `$inject` property onto a function the injection parameters can be specified.
+ *
+ * ## Inline
+ * As an array of injection names, where the last item in the array is the function to call.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#get
+ *
+ * @description
+ * Return an instance of the service.
+ *
+ * @param {string} name The name of the instance to retrieve.
+ * @param {string=} caller An optional string to provide the origin of the function call for error messages.
+ * @return {*} The instance.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#invoke
+ *
+ * @description
+ * Invoke the method and supply the method arguments from the `$injector`.
+ *
+ * @param {Function|Array.<string|Function>} fn The injectable function to invoke. Function parameters are
+ *   injected according to the {@link guide/di $inject Annotation} rules.
+ * @param {Object=} self The `this` for the invoked method.
+ * @param {Object=} locals Optional object. If preset then any argument names are read from this
+ *                         object first, before the `$injector` is consulted.
+ * @returns {*} the value returned by the invoked `fn` function.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#has
+ *
+ * @description
+ * Allows the user to query if the particular service exists.
+ *
+ * @param {string} name Name of the service to query.
+ * @returns {boolean} `true` if injector has given service.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#instantiate
+ * @description
+ * Create a new instance of JS type. The method takes a constructor function, invokes the new
+ * operator, and supplies all of the arguments to the constructor function as specified by the
+ * constructor annotation.
+ *
+ * @param {Function} Type Annotated constructor function.
+ * @param {Object=} locals Optional object. If preset then any argument names are read from this
+ * object first, before the `$injector` is consulted.
+ * @returns {Object} new instance of `Type`.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#annotate
+ *
+ * @description
+ * Returns an array of service names which the function is requesting for injection. This API is
+ * used by the injector to determine which services need to be injected into the function when the
+ * function is invoked. There are three ways in which the function can be annotated with the needed
+ * dependencies.
+ *
+ * # Argument names
+ *
+ * The simplest form is to extract the dependencies from the arguments of the function. This is done
+ * by converting the function into a string using `toString()` method and extracting the argument
+ * names.
+ * ```js
+ *   // Given
+ *   function MyController($scope, $route) {
+ *     // ...
+ *   }
+ *
+ *   // Then
+ *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
+ * ```
+ *
+ * You can disallow this method by using strict injection mode.
+ *
+ * This method does not work with code minification / obfuscation. For this reason the following
+ * annotation strategies are supported.
+ *
+ * # The `$inject` property
+ *
+ * If a function has an `$inject` property and its value is an array of strings, then the strings
+ * represent names of services to be injected into the function.
+ * ```js
+ *   // Given
+ *   var MyController = function(obfuscatedScope, obfuscatedRoute) {
+ *     // ...
+ *   }
+ *   // Define function dependencies
+ *   MyController['$inject'] = ['$scope', '$route'];
+ *
+ *   // Then
+ *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
+ * ```
+ *
+ * # The array notation
+ *
+ * It is often desirable to inline Injected functions and that's when setting the `$inject` property
+ * is very inconvenient. In these situations using the array notation to specify the dependencies in
+ * a way that survives minification is a better choice:
+ *
+ * ```js
+ *   // We wish to write this (not minification / obfuscation safe)
+ *   injector.invoke(function($compile, $rootScope) {
+ *     // ...
+ *   });
+ *
+ *   // We are forced to write break inlining
+ *   var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) {
+ *     // ...
+ *   };
+ *   tmpFn.$inject = ['$compile', '$rootScope'];
+ *   injector.invoke(tmpFn);
+ *
+ *   // To better support inline function the inline annotation is supported
+ *   injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) {
+ *     // ...
+ *   }]);
+ *
+ *   // Therefore
+ *   expect(injector.annotate(
+ *      ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}])
+ *    ).toEqual(['$compile', '$rootScope']);
+ * ```
+ *
+ * @param {Function|Array.<string|Function>} fn Function for which dependent service names need to
+ * be retrieved as described above.
+ *
+ * @param {boolean=} [strictDi=false] Disallow argument name annotation inference.
+ *
+ * @returns {Array.<string>} The names of the services which the function requires.
+ */
+
+
+
+
+/**
+ * @ngdoc service
+ * @name $provide
+ *
+ * @description
+ *
+ * The {@link auto.$provide $provide} service has a number of methods for registering components
+ * with the {@link auto.$injector $injector}. Many of these functions are also exposed on
+ * {@link angular.Module}.
+ *
+ * An Angular **service** is a singleton object created by a **service factory**.  These **service
+ * factories** are functions which, in turn, are created by a **service provider**.
+ * The **service providers** are constructor functions. When instantiated they must contain a
+ * property called `$get`, which holds the **service factory** function.
+ *
+ * When you request a service, the {@link auto.$injector $injector} is responsible for finding the
+ * correct **service provider**, instantiating it and then calling its `$get` **service factory**
+ * function to get the instance of the **service**.
+ *
+ * Often services have no configuration options and there is no need to add methods to the service
+ * provider.  The provider will be no more than a constructor function with a `$get` property. For
+ * these cases the {@link auto.$provide $provide} service has additional helper methods to register
+ * services without specifying a provider.
+ *
+ * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the
+ *     {@link auto.$injector $injector}
+ * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by
+ *     providers and services.
+ * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by
+ *     services, not providers.
+ * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`,
+ *     that will be wrapped in a **service provider** object, whose `$get` property will contain the
+ *     given factory function.
+ * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class`
+ *     that will be wrapped in a **service provider** object, whose `$get` property will instantiate
+ *      a new object using the given constructor function.
+ *
+ * See the individual methods for more information and examples.
+ */
+
+/**
+ * @ngdoc method
+ * @name $provide#provider
+ * @description
+ *
+ * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions
+ * are constructor functions, whose instances are responsible for "providing" a factory for a
+ * service.
+ *
+ * Service provider names start with the name of the service they provide followed by `Provider`.
+ * For example, the {@link ng.$log $log} service has a provider called
+ * {@link ng.$logProvider $logProvider}.
+ *
+ * Service provider objects can have additional methods which allow configuration of the provider
+ * and its service. Importantly, you can configure what kind of service is created by the `$get`
+ * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a
+ * method {@link ng.$logProvider#debugEnabled debugEnabled}
+ * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the
+ * console or not.
+ *
+ * @param {string} name The name of the instance. NOTE: the provider will be available under `name +
+                        'Provider'` key.
+ * @param {(Object|function())} provider If the provider is:
+ *
+ *   - `Object`: then it should have a `$get` method. The `$get` method will be invoked using
+ *     {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created.
+ *   - `Constructor`: a new instance of the provider will be created using
+ *     {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`.
+ *
+ * @returns {Object} registered provider instance
+
+ * @example
+ *
+ * The following example shows how to create a simple event tracking service and register it using
+ * {@link auto.$provide#provider $provide.provider()}.
+ *
+ * ```js
+ *  // Define the eventTracker provider
+ *  function EventTrackerProvider() {
+ *    var trackingUrl = '/track';
+ *
+ *    // A provider method for configuring where the tracked events should been saved
+ *    this.setTrackingUrl = function(url) {
+ *      trackingUrl = url;
+ *    };
+ *
+ *    // The service factory function
+ *    this.$get = ['$http', function($http) {
+ *      var trackedEvents = {};
+ *      return {
+ *        // Call this to track an event
+ *        event: function(event) {
+ *          var count = trackedEvents[event] || 0;
+ *          count += 1;
+ *          trackedEvents[event] = count;
+ *          return count;
+ *        },
+ *        // Call this to save the tracked events to the trackingUrl
+ *        save: function() {
+ *          $http.post(trackingUrl, trackedEvents);
+ *        }
+ *      };
+ *    }];
+ *  }
+ *
+ *  describe('eventTracker', function() {
+ *    var postSpy;
+ *
+ *    beforeEach(module(function($provide) {
+ *      // Register the eventTracker provider
+ *      $provide.provider('eventTracker', EventTrackerProvider);
+ *    }));
+ *
+ *    beforeEach(module(function(eventTrackerProvider) {
+ *      // Configure eventTracker provider
+ *      eventTrackerProvider.setTrackingUrl('/custom-track');
+ *    }));
+ *
+ *    it('tracks events', inject(function(eventTracker) {
+ *      expect(eventTracker.event('login')).toEqual(1);
+ *      expect(eventTracker.event('login')).toEqual(2);
+ *    }));
+ *
+ *    it('saves to the tracking url', inject(function(eventTracker, $http) {
+ *      postSpy = spyOn($http, 'post');
+ *      eventTracker.event('login');
+ *      eventTracker.save();
+ *      expect(postSpy).toHaveBeenCalled();
+ *      expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track');
+ *      expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track');
+ *      expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 });
+ *    }));
+ *  });
+ * ```
+ */
+
+/**
+ * @ngdoc method
+ * @name $provide#factory
+ * @description
+ *
+ * Register a **service factory**, which will be called to return the service instance.
+ * This is short for registering a service where its provider consists of only a `$get` property,
+ * which is the given service factory function.
+ * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to
+ * configure your service in a provider.
+ *
+ * @param {string} name The name of the instance.
+ * @param {Function|Array.<string|Function>} $getFn The injectable $getFn for the instance creation.
+ *                      Internally this is a short hand for `$provide.provider(name, {$get: $getFn})`.
+ * @returns {Object} registered provider instance
+ *
+ * @example
+ * Here is an example of registering a service
+ * ```js
+ *   $provide.factory('ping', ['$http', function($http) {
+ *     return function ping() {
+ *       return $http.send('/ping');
+ *     };
+ *   }]);
+ * ```
+ * You would then inject and use this service like this:
+ * ```js
+ *   someModule.controller('Ctrl', ['ping', function(ping) {
+ *     ping();
+ *   }]);
+ * ```
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $provide#service
+ * @description
+ *
+ * Register a **service constructor**, which will be invoked with `new` to create the service
+ * instance.
+ * This is short for registering a service where its provider's `$get` property is the service
+ * constructor function that will be used to instantiate the service instance.
+ *
+ * You should use {@link auto.$provide#service $provide.service(class)} if you define your service
+ * as a type/class.
+ *
+ * @param {string} name The name of the instance.
+ * @param {Function|Array.<string|Function>} constructor An injectable class (constructor function)
+ *     that will be instantiated.
+ * @returns {Object} registered provider instance
+ *
+ * @example
+ * Here is an example of registering a service using
+ * {@link auto.$provide#service $provide.service(class)}.
+ * ```js
+ *   var Ping = function($http) {
+ *     this.$http = $http;
+ *   };
+ *
+ *   Ping.$inject = ['$http'];
+ *
+ *   Ping.prototype.send = function() {
+ *     return this.$http.get('/ping');
+ *   };
+ *   $provide.service('ping', Ping);
+ * ```
+ * You would then inject and use this service like this:
+ * ```js
+ *   someModule.controller('Ctrl', ['ping', function(ping) {
+ *     ping.send();
+ *   }]);
+ * ```
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $provide#value
+ * @description
+ *
+ * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a
+ * number, an array, an object or a function.  This is short for registering a service where its
+ * provider's `$get` property is a factory function that takes no arguments and returns the **value
+ * service**.
+ *
+ * Value services are similar to constant services, except that they cannot be injected into a
+ * module configuration function (see {@link angular.Module#config}) but they can be overridden by
+ * an Angular
+ * {@link auto.$provide#decorator decorator}.
+ *
+ * @param {string} name The name of the instance.
+ * @param {*} value The value.
+ * @returns {Object} registered provider instance
+ *
+ * @example
+ * Here are some examples of creating value services.
+ * ```js
+ *   $provide.value('ADMIN_USER', 'admin');
+ *
+ *   $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 });
+ *
+ *   $provide.value('halfOf', function(value) {
+ *     return value / 2;
+ *   });
+ * ```
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $provide#constant
+ * @description
+ *
+ * Register a **constant service**, such as a string, a number, an array, an object or a function,
+ * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be
+ * injected into a module configuration function (see {@link angular.Module#config}) and it cannot
+ * be overridden by an Angular {@link auto.$provide#decorator decorator}.
+ *
+ * @param {string} name The name of the constant.
+ * @param {*} value The constant value.
+ * @returns {Object} registered instance
+ *
+ * @example
+ * Here a some examples of creating constants:
+ * ```js
+ *   $provide.constant('SHARD_HEIGHT', 306);
+ *
+ *   $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']);
+ *
+ *   $provide.constant('double', function(value) {
+ *     return value * 2;
+ *   });
+ * ```
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $provide#decorator
+ * @description
+ *
+ * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator
+ * intercepts the creation of a service, allowing it to override or modify the behaviour of the
+ * service. The object returned by the decorator may be the original service, or a new service
+ * object which replaces or wraps and delegates to the original service.
+ *
+ * @param {string} name The name of the service to decorate.
+ * @param {Function|Array.<string|Function>} decorator This function will be invoked when the service needs to be
+ *    instantiated and should return the decorated service instance. The function is called using
+ *    the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable.
+ *    Local injection arguments:
+ *
+ *    * `$delegate` - The original service instance, which can be monkey patched, configured,
+ *      decorated or delegated to.
+ *
+ * @example
+ * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting
+ * calls to {@link ng.$log#error $log.warn()}.
+ * ```js
+ *   $provide.decorator('$log', ['$delegate', function($delegate) {
+ *     $delegate.warn = $delegate.error;
+ *     return $delegate;
+ *   }]);
+ * ```
+ */
+
+
+function createInjector(modulesToLoad, strictDi) {
+  strictDi = (strictDi === true);
+  var INSTANTIATING = {},
+      providerSuffix = 'Provider',
+      path = [],
+      loadedModules = new HashMap([], true),
+      providerCache = {
+        $provide: {
+            provider: supportObject(provider),
+            factory: supportObject(factory),
+            service: supportObject(service),
+            value: supportObject(value),
+            constant: supportObject(constant),
+            decorator: decorator
+          }
+      },
+      providerInjector = (providerCache.$injector =
+          createInternalInjector(providerCache, function(serviceName, caller) {
+            if (angular.isString(caller)) {
+              path.push(caller);
+            }
+            throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- '));
+          })),
+      instanceCache = {},
+      instanceInjector = (instanceCache.$injector =
+          createInternalInjector(instanceCache, function(serviceName, caller) {
+            var provider = providerInjector.get(serviceName + providerSuffix, caller);
+            return instanceInjector.invoke(provider.$get, provider, undefined, serviceName);
+          }));
+
+
+  forEach(loadModules(modulesToLoad), function(fn) { if (fn) instanceInjector.invoke(fn); });
+
+  return instanceInjector;
+
+  ////////////////////////////////////
+  // $provider
+  ////////////////////////////////////
+
+  function supportObject(delegate) {
+    return function(key, value) {
+      if (isObject(key)) {
+        forEach(key, reverseParams(delegate));
+      } else {
+        return delegate(key, value);
+      }
+    };
+  }
+
+  function provider(name, provider_) {
+    assertNotHasOwnProperty(name, 'service');
+    if (isFunction(provider_) || isArray(provider_)) {
+      provider_ = providerInjector.instantiate(provider_);
+    }
+    if (!provider_.$get) {
+      throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name);
+    }
+    return providerCache[name + providerSuffix] = provider_;
+  }
+
+  function enforceReturnValue(name, factory) {
+    return function enforcedReturnValue() {
+      var result = instanceInjector.invoke(factory, this);
+      if (isUndefined(result)) {
+        throw $injectorMinErr('undef', "Provider '{0}' must return a value from $get factory method.", name);
+      }
+      return result;
+    };
+  }
+
+  function factory(name, factoryFn, enforce) {
+    return provider(name, {
+      $get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn
+    });
+  }
+
+  function service(name, constructor) {
+    return factory(name, ['$injector', function($injector) {
+      return $injector.instantiate(constructor);
+    }]);
+  }
+
+  function value(name, val) { return factory(name, valueFn(val), false); }
+
+  function constant(name, value) {
+    assertNotHasOwnProperty(name, 'constant');
+    providerCache[name] = value;
+    instanceCache[name] = value;
+  }
+
+  function decorator(serviceName, decorFn) {
+    var origProvider = providerInjector.get(serviceName + providerSuffix),
+        orig$get = origProvider.$get;
+
+    origProvider.$get = function() {
+      var origInstance = instanceInjector.invoke(orig$get, origProvider);
+      return instanceInjector.invoke(decorFn, null, {$delegate: origInstance});
+    };
+  }
+
+  ////////////////////////////////////
+  // Module Loading
+  ////////////////////////////////////
+  function loadModules(modulesToLoad) {
+    assertArg(isUndefined(modulesToLoad) || isArray(modulesToLoad), 'modulesToLoad', 'not an array');
+    var runBlocks = [], moduleFn;
+    forEach(modulesToLoad, function(module) {
+      if (loadedModules.get(module)) return;
+      loadedModules.put(module, true);
+
+      function runInvokeQueue(queue) {
+        var i, ii;
+        for (i = 0, ii = queue.length; i < ii; i++) {
+          var invokeArgs = queue[i],
+              provider = providerInjector.get(invokeArgs[0]);
+
+          provider[invokeArgs[1]].apply(provider, invokeArgs[2]);
+        }
+      }
+
+      try {
+        if (isString(module)) {
+          moduleFn = angularModule(module);
+          runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks);
+          runInvokeQueue(moduleFn._invokeQueue);
+          runInvokeQueue(moduleFn._configBlocks);
+        } else if (isFunction(module)) {
+            runBlocks.push(providerInjector.invoke(module));
+        } else if (isArray(module)) {
+            runBlocks.push(providerInjector.invoke(module));
+        } else {
+          assertArgFn(module, 'module');
+        }
+      } catch (e) {
+        if (isArray(module)) {
+          module = module[module.length - 1];
+        }
+        if (e.message && e.stack && e.stack.indexOf(e.message) == -1) {
+          // Safari & FF's stack traces don't contain error.message content
+          // unlike those of Chrome and IE
+          // So if stack doesn't contain message, we create a new string that contains both.
+          // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here.
+          /* jshint -W022 */
+          e = e.message + '\n' + e.stack;
+        }
+        throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}",
+                  module, e.stack || e.message || e);
+      }
+    });
+    return runBlocks;
+  }
+
+  ////////////////////////////////////
+  // internal Injector
+  ////////////////////////////////////
+
+  function createInternalInjector(cache, factory) {
+
+    function getService(serviceName, caller) {
+      if (cache.hasOwnProperty(serviceName)) {
+        if (cache[serviceName] === INSTANTIATING) {
+          throw $injectorMinErr('cdep', 'Circular dependency found: {0}',
+                    serviceName + ' <- ' + path.join(' <- '));
+        }
+        return cache[serviceName];
+      } else {
+        try {
+          path.unshift(serviceName);
+          cache[serviceName] = INSTANTIATING;
+          return cache[serviceName] = factory(serviceName, caller);
+        } catch (err) {
+          if (cache[serviceName] === INSTANTIATING) {
+            delete cache[serviceName];
+          }
+          throw err;
+        } finally {
+          path.shift();
+        }
+      }
+    }
+
+    function invoke(fn, self, locals, serviceName) {
+      if (typeof locals === 'string') {
+        serviceName = locals;
+        locals = null;
+      }
+
+      var args = [],
+          $inject = createInjector.$$annotate(fn, strictDi, serviceName),
+          length, i,
+          key;
+
+      for (i = 0, length = $inject.length; i < length; i++) {
+        key = $inject[i];
+        if (typeof key !== 'string') {
+          throw $injectorMinErr('itkn',
+                  'Incorrect injection token! Expected service name as string, got {0}', key);
+        }
+        args.push(
+          locals && locals.hasOwnProperty(key)
+          ? locals[key]
+          : getService(key, serviceName)
+        );
+      }
+      if (isArray(fn)) {
+        fn = fn[length];
+      }
+
+      // http://jsperf.com/angularjs-invoke-apply-vs-switch
+      // #5388
+      return fn.apply(self, args);
+    }
+
+    function instantiate(Type, locals, serviceName) {
+      // Check if Type is annotated and use just the given function at n-1 as parameter
+      // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);
+      // Object creation: http://jsperf.com/create-constructor/2
+      var instance = Object.create((isArray(Type) ? Type[Type.length - 1] : Type).prototype || null);
+      var returnedValue = invoke(Type, instance, locals, serviceName);
+
+      return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance;
+    }
+
+    return {
+      invoke: invoke,
+      instantiate: instantiate,
+      get: getService,
+      annotate: createInjector.$$annotate,
+      has: function(name) {
+        return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name);
+      }
+    };
+  }
+}
+
+createInjector.$$annotate = annotate;
+
+/**
+ * @ngdoc provider
+ * @name $anchorScrollProvider
+ *
+ * @description
+ * Use `$anchorScrollProvider` to disable automatic scrolling whenever
+ * {@link ng.$location#hash $location.hash()} changes.
+ */
+function $AnchorScrollProvider() {
+
+  var autoScrollingEnabled = true;
+
+  /**
+   * @ngdoc method
+   * @name $anchorScrollProvider#disableAutoScrolling
+   *
+   * @description
+   * By default, {@link ng.$anchorScroll $anchorScroll()} will automatically detect changes to
+   * {@link ng.$location#hash $location.hash()} and scroll to the element matching the new hash.<br />
+   * Use this method to disable automatic scrolling.
+   *
+   * If automatic scrolling is disabled, one must explicitly call
+   * {@link ng.$anchorScroll $anchorScroll()} in order to scroll to the element related to the
+   * current hash.
+   */
+  this.disableAutoScrolling = function() {
+    autoScrollingEnabled = false;
+  };
+
+  /**
+   * @ngdoc service
+   * @name $anchorScroll
+   * @kind function
+   * @requires $window
+   * @requires $location
+   * @requires $rootScope
+   *
+   * @description
+   * When called, it scrolls to the element related to the specified `hash` or (if omitted) to the
+   * current value of {@link ng.$location#hash $location.hash()}, according to the rules specified
+   * in the
+   * [HTML5 spec](http://www.w3.org/html/wg/drafts/html/master/browsers.html#the-indicated-part-of-the-document).
+   *
+   * It also watches the {@link ng.$location#hash $location.hash()} and automatically scrolls to
+   * match any anchor whenever it changes. This can be disabled by calling
+   * {@link ng.$anchorScrollProvider#disableAutoScrolling $anchorScrollProvider.disableAutoScrolling()}.
+   *
+   * Additionally, you can use its {@link ng.$anchorScroll#yOffset yOffset} property to specify a
+   * vertical scroll-offset (either fixed or dynamic).
+   *
+   * @param {string=} hash The hash specifying the element to scroll to. If omitted, the value of
+   *                       {@link ng.$location#hash $location.hash()} will be used.
+   *
+   * @property {(number|function|jqLite)} yOffset
+   * If set, specifies a vertical scroll-offset. This is often useful when there are fixed
+   * positioned elements at the top of the page, such as navbars, headers etc.
+   *
+   * `yOffset` can be specified in various ways:
+   * - **number**: A fixed number of pixels to be used as offset.<br /><br />
+   * - **function**: A getter function called everytime `$anchorScroll()` is executed. Must return
+   *   a number representing the offset (in pixels).<br /><br />
+   * - **jqLite**: A jqLite/jQuery element to be used for specifying the offset. The distance from
+   *   the top of the page to the element's bottom will be used as offset.<br />
+   *   **Note**: The element will be taken into account only as long as its `position` is set to
+   *   `fixed`. This option is useful, when dealing with responsive navbars/headers that adjust
+   *   their height and/or positioning according to the viewport's size.
+   *
+   * <br />
+   * <div class="alert alert-warning">
+   * In order for `yOffset` to work properly, scrolling should take place on the document's root and
+   * not some child element.
+   * </div>
+   *
+   * @example
+     <example module="anchorScrollExample">
+       <file name="index.html">
+         <div id="scrollArea" ng-controller="ScrollController">
+           <a ng-click="gotoBottom()">Go to bottom</a>
+           <a id="bottom"></a> You're at the bottom!
+         </div>
+       </file>
+       <file name="script.js">
+         angular.module('anchorScrollExample', [])
+           .controller('ScrollController', ['$scope', '$location', '$anchorScroll',
+             function ($scope, $location, $anchorScroll) {
+               $scope.gotoBottom = function() {
+                 // set the location.hash to the id of
+                 // the element you wish to scroll to.
+                 $location.hash('bottom');
+
+                 // call $anchorScroll()
+                 $anchorScroll();
+               };
+             }]);
+       </file>
+       <file name="style.css">
+         #scrollArea {
+           height: 280px;
+           overflow: auto;
+         }
+
+         #bottom {
+           display: block;
+           margin-top: 2000px;
+         }
+       </file>
+     </example>
+   *
+   * <hr />
+   * The example below illustrates the use of a vertical scroll-offset (specified as a fixed value).
+   * See {@link ng.$anchorScroll#yOffset $anchorScroll.yOffset} for more details.
+   *
+   * @example
+     <example module="anchorScrollOffsetExample">
+       <file name="index.html">
+         <div class="fixed-header" ng-controller="headerCtrl">
+           <a href="" ng-click="gotoAnchor(x)" ng-repeat="x in [1,2,3,4,5]">
+             Go to anchor {{x}}
+           </a>
+         </div>
+         <div id="anchor{{x}}" class="anchor" ng-repeat="x in [1,2,3,4,5]">
+           Anchor {{x}} of 5
+         </div>
+       </file>
+       <file name="script.js">
+         angular.module('anchorScrollOffsetExample', [])
+           .run(['$anchorScroll', function($anchorScroll) {
+             $anchorScroll.yOffset = 50;   // always scroll by 50 extra pixels
+           }])
+           .controller('headerCtrl', ['$anchorScroll', '$location', '$scope',
+             function ($anchorScroll, $location, $scope) {
+               $scope.gotoAnchor = function(x) {
+                 var newHash = 'anchor' + x;
+                 if ($location.hash() !== newHash) {
+                   // set the $location.hash to `newHash` and
+                   // $anchorScroll will automatically scroll to it
+                   $location.hash('anchor' + x);
+                 } else {
+                   // call $anchorScroll() explicitly,
+                   // since $location.hash hasn't changed
+                   $anchorScroll();
+                 }
+               };
+             }
+           ]);
+       </file>
+       <file name="style.css">
+         body {
+           padding-top: 50px;
+         }
+
+         .anchor {
+           border: 2px dashed DarkOrchid;
+           padding: 10px 10px 200px 10px;
+         }
+
+         .fixed-header {
+           background-color: rgba(0, 0, 0, 0.2);
+           height: 50px;
+           position: fixed;
+           top: 0; left: 0; right: 0;
+         }
+
+         .fixed-header > a {
+           display: inline-block;
+           margin: 5px 15px;
+         }
+       </file>
+     </example>
+   */
+  this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) {
+    var document = $window.document;
+
+    // Helper function to get first anchor from a NodeList
+    // (using `Array#some()` instead of `angular#forEach()` since it's more performant
+    //  and working in all supported browsers.)
+    function getFirstAnchor(list) {
+      var result = null;
+      Array.prototype.some.call(list, function(element) {
+        if (nodeName_(element) === 'a') {
+          result = element;
+          return true;
+        }
+      });
+      return result;
+    }
+
+    function getYOffset() {
+
+      var offset = scroll.yOffset;
+
+      if (isFunction(offset)) {
+        offset = offset();
+      } else if (isElement(offset)) {
+        var elem = offset[0];
+        var style = $window.getComputedStyle(elem);
+        if (style.position !== 'fixed') {
+          offset = 0;
+        } else {
+          offset = elem.getBoundingClientRect().bottom;
+        }
+      } else if (!isNumber(offset)) {
+        offset = 0;
+      }
+
+      return offset;
+    }
+
+    function scrollTo(elem) {
+      if (elem) {
+        elem.scrollIntoView();
+
+        var offset = getYOffset();
+
+        if (offset) {
+          // `offset` is the number of pixels we should scroll UP in order to align `elem` properly.
+          // This is true ONLY if the call to `elem.scrollIntoView()` initially aligns `elem` at the
+          // top of the viewport.
+          //
+          // IF the number of pixels from the top of `elem` to the end of the page's content is less
+          // than the height of the viewport, then `elem.scrollIntoView()` will align the `elem` some
+          // way down the page.
+          //
+          // This is often the case for elements near the bottom of the page.
+          //
+          // In such cases we do not need to scroll the whole `offset` up, just the difference between
+          // the top of the element and the offset, which is enough to align the top of `elem` at the
+          // desired position.
+          var elemTop = elem.getBoundingClientRect().top;
+          $window.scrollBy(0, elemTop - offset);
+        }
+      } else {
+        $window.scrollTo(0, 0);
+      }
+    }
+
+    function scroll(hash) {
+      hash = isString(hash) ? hash : $location.hash();
+      var elm;
+
+      // empty hash, scroll to the top of the page
+      if (!hash) scrollTo(null);
+
+      // element with given id
+      else if ((elm = document.getElementById(hash))) scrollTo(elm);
+
+      // first anchor with given name :-D
+      else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) scrollTo(elm);
+
+      // no element and hash == 'top', scroll to the top of the page
+      else if (hash === 'top') scrollTo(null);
+    }
+
+    // does not scroll when user clicks on anchor link that is currently on
+    // (no url change, no $location.hash() change), browser native does scroll
+    if (autoScrollingEnabled) {
+      $rootScope.$watch(function autoScrollWatch() {return $location.hash();},
+        function autoScrollWatchAction(newVal, oldVal) {
+          // skip the initial scroll if $location.hash is empty
+          if (newVal === oldVal && newVal === '') return;
+
+          jqLiteDocumentLoaded(function() {
+            $rootScope.$evalAsync(scroll);
+          });
+        });
+    }
+
+    return scroll;
+  }];
+}
+
+var $animateMinErr = minErr('$animate');
+var ELEMENT_NODE = 1;
+var NG_ANIMATE_CLASSNAME = 'ng-animate';
+
+function mergeClasses(a,b) {
+  if (!a && !b) return '';
+  if (!a) return b;
+  if (!b) return a;
+  if (isArray(a)) a = a.join(' ');
+  if (isArray(b)) b = b.join(' ');
+  return a + ' ' + b;
+}
+
+function extractElementNode(element) {
+  for (var i = 0; i < element.length; i++) {
+    var elm = element[i];
+    if (elm.nodeType === ELEMENT_NODE) {
+      return elm;
+    }
+  }
+}
+
+function splitClasses(classes) {
+  if (isString(classes)) {
+    classes = classes.split(' ');
+  }
+
+  // Use createMap() to prevent class assumptions involving property names in
+  // Object.prototype
+  var obj = createMap();
+  forEach(classes, function(klass) {
+    // sometimes the split leaves empty string values
+    // incase extra spaces were applied to the options
+    if (klass.length) {
+      obj[klass] = true;
+    }
+  });
+  return obj;
+}
+
+// if any other type of options value besides an Object value is
+// passed into the $animate.method() animation then this helper code
+// will be run which will ignore it. While this patch is not the
+// greatest solution to this, a lot of existing plugins depend on
+// $animate to either call the callback (< 1.2) or return a promise
+// that can be changed. This helper function ensures that the options
+// are wiped clean incase a callback function is provided.
+function prepareAnimateOptions(options) {
+  return isObject(options)
+      ? options
+      : {};
+}
+
+var $$CoreAnimateRunnerProvider = function() {
+  this.$get = ['$q', '$$rAF', function($q, $$rAF) {
+    function AnimateRunner() {}
+    AnimateRunner.all = noop;
+    AnimateRunner.chain = noop;
+    AnimateRunner.prototype = {
+      end: noop,
+      cancel: noop,
+      resume: noop,
+      pause: noop,
+      complete: noop,
+      then: function(pass, fail) {
+        return $q(function(resolve) {
+          $$rAF(function() {
+            resolve();
+          });
+        }).then(pass, fail);
+      }
+    };
+    return AnimateRunner;
+  }];
+};
+
+// this is prefixed with Core since it conflicts with
+// the animateQueueProvider defined in ngAnimate/animateQueue.js
+var $$CoreAnimateQueueProvider = function() {
+  var postDigestQueue = new HashMap();
+  var postDigestElements = [];
+
+  this.$get = ['$$AnimateRunner', '$rootScope',
+       function($$AnimateRunner,   $rootScope) {
+    return {
+      enabled: noop,
+      on: noop,
+      off: noop,
+      pin: noop,
+
+      push: function(element, event, options, domOperation) {
+        domOperation        && domOperation();
+
+        options = options || {};
+        options.from        && element.css(options.from);
+        options.to          && element.css(options.to);
+
+        if (options.addClass || options.removeClass) {
+          addRemoveClassesPostDigest(element, options.addClass, options.removeClass);
+        }
+
+        return new $$AnimateRunner(); // jshint ignore:line
+      }
+    };
+
+
+    function updateData(data, classes, value) {
+      var changed = false;
+      if (classes) {
+        classes = isString(classes) ? classes.split(' ') :
+                  isArray(classes) ? classes : [];
+        forEach(classes, function(className) {
+          if (className) {
+            changed = true;
+            data[className] = value;
+          }
+        });
+      }
+      return changed;
+    }
+
+    function handleCSSClassChanges() {
+      forEach(postDigestElements, function(element) {
+        var data = postDigestQueue.get(element);
+        if (data) {
+          var existing = splitClasses(element.attr('class'));
+          var toAdd = '';
+          var toRemove = '';
+          forEach(data, function(status, className) {
+            var hasClass = !!existing[className];
+            if (status !== hasClass) {
+              if (status) {
+                toAdd += (toAdd.length ? ' ' : '') + className;
+              } else {
+                toRemove += (toRemove.length ? ' ' : '') + className;
+              }
+            }
+          });
+
+          forEach(element, function(elm) {
+            toAdd    && jqLiteAddClass(elm, toAdd);
+            toRemove && jqLiteRemoveClass(elm, toRemove);
+          });
+          postDigestQueue.remove(element);
+        }
+      });
+      postDigestElements.length = 0;
+    }
+
+
+    function addRemoveClassesPostDigest(element, add, remove) {
+      var data = postDigestQueue.get(element) || {};
+
+      var classesAdded = updateData(data, add, true);
+      var classesRemoved = updateData(data, remove, false);
+
+      if (classesAdded || classesRemoved) {
+
+        postDigestQueue.put(element, data);
+        postDigestElements.push(element);
+
+        if (postDigestElements.length === 1) {
+          $rootScope.$$postDigest(handleCSSClassChanges);
+        }
+      }
+    }
+  }];
+};
+
+/**
+ * @ngdoc provider
+ * @name $animateProvider
+ *
+ * @description
+ * Default implementation of $animate that doesn't perform any animations, instead just
+ * synchronously performs DOM updates and resolves the returned runner promise.
+ *
+ * In order to enable animations the `ngAnimate` module has to be loaded.
+ *
+ * To see the functional implementation check out `src/ngAnimate/animate.js`.
+ */
+var $AnimateProvider = ['$provide', function($provide) {
+  var provider = this;
+
+  this.$$registeredAnimations = Object.create(null);
+
+   /**
+   * @ngdoc method
+   * @name $animateProvider#register
+   *
+   * @description
+   * Registers a new injectable animation factory function. The factory function produces the
+   * animation object which contains callback functions for each event that is expected to be
+   * animated.
+   *
+   *   * `eventFn`: `function(element, ... , doneFunction, options)`
+   *   The element to animate, the `doneFunction` and the options fed into the animation. Depending
+   *   on the type of animation additional arguments will be injected into the animation function. The
+   *   list below explains the function signatures for the different animation methods:
+   *
+   *   - setClass: function(element, addedClasses, removedClasses, doneFunction, options)
+   *   - addClass: function(element, addedClasses, doneFunction, options)
+   *   - removeClass: function(element, removedClasses, doneFunction, options)
+   *   - enter, leave, move: function(element, doneFunction, options)
+   *   - animate: function(element, fromStyles, toStyles, doneFunction, options)
+   *
+   *   Make sure to trigger the `doneFunction` once the animation is fully complete.
+   *
+   * ```js
+   *   return {
+   *     //enter, leave, move signature
+   *     eventFn : function(element, done, options) {
+   *       //code to run the animation
+   *       //once complete, then run done()
+   *       return function endFunction(wasCancelled) {
+   *         //code to cancel the animation
+   *       }
+   *     }
+   *   }
+   * ```
+   *
+   * @param {string} name The name of the animation (this is what the class-based CSS value will be compared to).
+   * @param {Function} factory The factory function that will be executed to return the animation
+   *                           object.
+   */
+  this.register = function(name, factory) {
+    if (name && name.charAt(0) !== '.') {
+      throw $animateMinErr('notcsel', "Expecting class selector starting with '.' got '{0}'.", name);
+    }
+
+    var key = name + '-animation';
+    provider.$$registeredAnimations[name.substr(1)] = key;
+    $provide.factory(key, factory);
+  };
+
+  /**
+   * @ngdoc method
+   * @name $animateProvider#classNameFilter
+   *
+   * @description
+   * Sets and/or returns the CSS class regular expression that is checked when performing
+   * an animation. Upon bootstrap the classNameFilter value is not set at all and will
+   * therefore enable $animate to attempt to perform an animation on any element that is triggered.
+   * When setting the `classNameFilter` value, animations will only be performed on elements
+   * that successfully match the filter expression. This in turn can boost performance
+   * for low-powered devices as well as applications containing a lot of structural operations.
+   * @param {RegExp=} expression The className expression which will be checked against all animations
+   * @return {RegExp} The current CSS className expression value. If null then there is no expression value
+   */
+  this.classNameFilter = function(expression) {
+    if (arguments.length === 1) {
+      this.$$classNameFilter = (expression instanceof RegExp) ? expression : null;
+      if (this.$$classNameFilter) {
+        var reservedRegex = new RegExp("(\\s+|\\/)" + NG_ANIMATE_CLASSNAME + "(\\s+|\\/)");
+        if (reservedRegex.test(this.$$classNameFilter.toString())) {
+          throw $animateMinErr('nongcls','$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the "{0}" CSS class.', NG_ANIMATE_CLASSNAME);
+
+        }
+      }
+    }
+    return this.$$classNameFilter;
+  };
+
+  this.$get = ['$$animateQueue', function($$animateQueue) {
+    function domInsert(element, parentElement, afterElement) {
+      // if for some reason the previous element was removed
+      // from the dom sometime before this code runs then let's
+      // just stick to using the parent element as the anchor
+      if (afterElement) {
+        var afterNode = extractElementNode(afterElement);
+        if (afterNode && !afterNode.parentNode && !afterNode.previousElementSibling) {
+          afterElement = null;
+        }
+      }
+      afterElement ? afterElement.after(element) : parentElement.prepend(element);
+    }
+
+    /**
+     * @ngdoc service
+     * @name $animate
+     * @description The $animate service exposes a series of DOM utility methods that provide support
+     * for animation hooks. The default behavior is the application of DOM operations, however,
+     * when an animation is detected (and animations are enabled), $animate will do the heavy lifting
+     * to ensure that animation runs with the triggered DOM operation.
+     *
+     * By default $animate doesn't trigger any animations. This is because the `ngAnimate` module isn't
+     * included and only when it is active then the animation hooks that `$animate` triggers will be
+     * functional. Once active then all structural `ng-` directives will trigger animations as they perform
+     * their DOM-related operations (enter, leave and move). Other directives such as `ngClass`,
+     * `ngShow`, `ngHide` and `ngMessages` also provide support for animations.
+     *
+     * It is recommended that the`$animate` service is always used when executing DOM-related procedures within directives.
+     *
+     * To learn more about enabling animation support, click here to visit the
+     * {@link ngAnimate ngAnimate module page}.
+     */
+    return {
+      // we don't call it directly since non-existant arguments may
+      // be interpreted as null within the sub enabled function
+
+      /**
+       *
+       * @ngdoc method
+       * @name $animate#on
+       * @kind function
+       * @description Sets up an event listener to fire whenever the animation event (enter, leave, move, etc...)
+       *    has fired on the given element or among any of its children. Once the listener is fired, the provided callback
+       *    is fired with the following params:
+       *
+       * ```js
+       * $animate.on('enter', container,
+       *    function callback(element, phase) {
+       *      // cool we detected an enter animation within the container
+       *    }
+       * );
+       * ```
+       *
+       * @param {string} event the animation event that will be captured (e.g. enter, leave, move, addClass, removeClass, etc...)
+       * @param {DOMElement} container the container element that will capture each of the animation events that are fired on itself
+       *     as well as among its children
+       * @param {Function} callback the callback function that will be fired when the listener is triggered
+       *
+       * The arguments present in the callback function are:
+       * * `element` - The captured DOM element that the animation was fired on.
+       * * `phase` - The phase of the animation. The two possible phases are **start** (when the animation starts) and **close** (when it ends).
+       */
+      on: $$animateQueue.on,
+
+      /**
+       *
+       * @ngdoc method
+       * @name $animate#off
+       * @kind function
+       * @description Deregisters an event listener based on the event which has been associated with the provided element. This method
+       * can be used in three different ways depending on the arguments:
+       *
+       * ```js
+       * // remove all the animation event listeners listening for `enter`
+       * $animate.off('enter');
+       *
+       * // remove all the animation event listeners listening for `enter` on the given element and its children
+       * $animate.off('enter', container);
+       *
+       * // remove the event listener function provided by `listenerFn` that is set
+       * // to listen for `enter` on the given `element` as well as its children
+       * $animate.off('enter', container, callback);
+       * ```
+       *
+       * @param {string} event the animation event (e.g. enter, leave, move, addClass, removeClass, etc...)
+       * @param {DOMElement=} container the container element the event listener was placed on
+       * @param {Function=} callback the callback function that was registered as the listener
+       */
+      off: $$animateQueue.off,
+
+      /**
+       * @ngdoc method
+       * @name $animate#pin
+       * @kind function
+       * @description Associates the provided element with a host parent element to allow the element to be animated even if it exists
+       *    outside of the DOM structure of the Angular application. By doing so, any animation triggered via `$animate` can be issued on the
+       *    element despite being outside the realm of the application or within another application. Say for example if the application
+       *    was bootstrapped on an element that is somewhere inside of the `<body>` tag, but we wanted to allow for an element to be situated
+       *    as a direct child of `document.body`, then this can be achieved by pinning the element via `$animate.pin(element)`. Keep in mind
+       *    that calling `$animate.pin(element, parentElement)` will not actually insert into the DOM anywhere; it will just create the association.
+       *
+       *    Note that this feature is only active when the `ngAnimate` module is used.
+       *
+       * @param {DOMElement} element the external element that will be pinned
+       * @param {DOMElement} parentElement the host parent element that will be associated with the external element
+       */
+      pin: $$animateQueue.pin,
+
+      /**
+       *
+       * @ngdoc method
+       * @name $animate#enabled
+       * @kind function
+       * @description Used to get and set whether animations are enabled or not on the entire application or on an element and its children. This
+       * function can be called in four ways:
+       *
+       * ```js
+       * // returns true or false
+       * $animate.enabled();
+       *
+       * // changes the enabled state for all animations
+       * $animate.enabled(false);
+       * $animate.enabled(true);
+       *
+       * // returns true or false if animations are enabled for an element
+       * $animate.enabled(element);
+       *
+       * // changes the enabled state for an element and its children
+       * $animate.enabled(element, true);
+       * $animate.enabled(element, false);
+       * ```
+       *
+       * @param {DOMElement=} element the element that will be considered for checking/setting the enabled state
+       * @param {boolean=} enabled whether or not the animations will be enabled for the element
+       *
+       * @return {boolean} whether or not animations are enabled
+       */
+      enabled: $$animateQueue.enabled,
+
+      /**
+       * @ngdoc method
+       * @name $animate#cancel
+       * @kind function
+       * @description Cancels the provided animation.
+       *
+       * @param {Promise} animationPromise The animation promise that is returned when an animation is started.
+       */
+      cancel: function(runner) {
+        runner.end && runner.end();
+      },
+
+      /**
+       *
+       * @ngdoc method
+       * @name $animate#enter
+       * @kind function
+       * @description Inserts the element into the DOM either after the `after` element (if provided) or
+       *   as the first child within the `parent` element and then triggers an animation.
+       *   A promise is returned that will be resolved during the next digest once the animation
+       *   has completed.
+       *
+       * @param {DOMElement} element the element which will be inserted into the DOM
+       * @param {DOMElement} parent the parent element which will append the element as
+       *   a child (so long as the after element is not present)
+       * @param {DOMElement=} after the sibling element after which the element will be appended
+       * @param {object=} options an optional collection of options/styles that will be applied to the element
+       *
+       * @return {Promise} the animation callback promise
+       */
+      enter: function(element, parent, after, options) {
+        parent = parent && jqLite(parent);
+        after = after && jqLite(after);
+        parent = parent || after.parent();
+        domInsert(element, parent, after);
+        return $$animateQueue.push(element, 'enter', prepareAnimateOptions(options));
+      },
+
+      /**
+       *
+       * @ngdoc method
+       * @name $animate#move
+       * @kind function
+       * @description Inserts (moves) the element into its new position in the DOM either after
+       *   the `after` element (if provided) or as the first child within the `parent` element
+       *   and then triggers an animation. A promise is returned that will be resolved
+       *   during the next digest once the animation has completed.
+       *
+       * @param {DOMElement} element the element which will be moved into the new DOM position
+       * @param {DOMElement} parent the parent element which will append the element as
+       *   a child (so long as the after element is not present)
+       * @param {DOMElement=} after the sibling element after which the element will be appended
+       * @param {object=} options an optional collection of options/styles that will be applied to the element
+       *
+       * @return {Promise} the animation callback promise
+       */
+      move: function(element, parent, after, options) {
+        parent = parent && jqLite(parent);
+        after = after && jqLite(after);
+        parent = parent || after.parent();
+        domInsert(element, parent, after);
+        return $$animateQueue.push(element, 'move', prepareAnimateOptions(options));
+      },
+
+      /**
+       * @ngdoc method
+       * @name $animate#leave
+       * @kind function
+       * @description Triggers an animation and then removes the element from the DOM.
+       * When the function is called a promise is returned that will be resolved during the next
+       * digest once the animation has completed.
+       *
+       * @param {DOMElement} element the element which will be removed from the DOM
+       * @param {object=} options an optional collection of options/styles that will be applied to the element
+       *
+       * @return {Promise} the animation callback promise
+       */
+      leave: function(element, options) {
+        return $$animateQueue.push(element, 'leave', prepareAnimateOptions(options), function() {
+          element.remove();
+        });
+      },
+
+      /**
+       * @ngdoc method
+       * @name $animate#addClass
+       * @kind function
+       *
+       * @description Triggers an addClass animation surrounding the addition of the provided CSS class(es). Upon
+       *   execution, the addClass operation will only be handled after the next digest and it will not trigger an
+       *   animation if element already contains the CSS class or if the class is removed at a later step.
+       *   Note that class-based animations are treated differently compared to structural animations
+       *   (like enter, move and leave) since the CSS classes may be added/removed at different points
+       *   depending if CSS or JavaScript animations are used.
+       *
+       * @param {DOMElement} element the element which the CSS classes will be applied to
+       * @param {string} className the CSS class(es) that will be added (multiple classes are separated via spaces)
+       * @param {object=} options an optional collection of options/styles that will be applied to the element
+       *
+       * @return {Promise} the animation callback promise
+       */
+      addClass: function(element, className, options) {
+        options = prepareAnimateOptions(options);
+        options.addClass = mergeClasses(options.addclass, className);
+        return $$animateQueue.push(element, 'addClass', options);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $animate#removeClass
+       * @kind function
+       *
+       * @description Triggers a removeClass animation surrounding the removal of the provided CSS class(es). Upon
+       *   execution, the removeClass operation will only be handled after the next digest and it will not trigger an
+       *   animation if element does not contain the CSS class or if the class is added at a later step.
+       *   Note that class-based animations are treated differently compared to structural animations
+       *   (like enter, move and leave) since the CSS classes may be added/removed at different points
+       *   depending if CSS or JavaScript animations are used.
+       *
+       * @param {DOMElement} element the element which the CSS classes will be applied to
+       * @param {string} className the CSS class(es) that will be removed (multiple classes are separated via spaces)
+       * @param {object=} options an optional collection of options/styles that will be applied to the element
+       *
+       * @return {Promise} the animation callback promise
+       */
+      removeClass: function(element, className, options) {
+        options = prepareAnimateOptions(options);
+        options.removeClass = mergeClasses(options.removeClass, className);
+        return $$animateQueue.push(element, 'removeClass', options);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $animate#setClass
+       * @kind function
+       *
+       * @description Performs both the addition and removal of a CSS classes on an element and (during the process)
+       *    triggers an animation surrounding the class addition/removal. Much like `$animate.addClass` and
+       *    `$animate.removeClass`, `setClass` will only evaluate the classes being added/removed once a digest has
+       *    passed. Note that class-based animations are treated differently compared to structural animations
+       *    (like enter, move and leave) since the CSS classes may be added/removed at different points
+       *    depending if CSS or JavaScript animations are used.
+       *
+       * @param {DOMElement} element the element which the CSS classes will be applied to
+       * @param {string} add the CSS class(es) that will be added (multiple classes are separated via spaces)
+       * @param {string} remove the CSS class(es) that will be removed (multiple classes are separated via spaces)
+       * @param {object=} options an optional collection of options/styles that will be applied to the element
+       *
+       * @return {Promise} the animation callback promise
+       */
+      setClass: function(element, add, remove, options) {
+        options = prepareAnimateOptions(options);
+        options.addClass = mergeClasses(options.addClass, add);
+        options.removeClass = mergeClasses(options.removeClass, remove);
+        return $$animateQueue.push(element, 'setClass', options);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $animate#animate
+       * @kind function
+       *
+       * @description Performs an inline animation on the element which applies the provided to and from CSS styles to the element.
+       * If any detected CSS transition, keyframe or JavaScript matches the provided className value then the animation will take
+       * on the provided styles. For example, if a transition animation is set for the given className then the provided from and
+       * to styles will be applied alongside the given transition. If a JavaScript animation is detected then the provided styles
+       * will be given in as function paramters into the `animate` method (or as apart of the `options` parameter).
+       *
+       * @param {DOMElement} element the element which the CSS styles will be applied to
+       * @param {object} from the from (starting) CSS styles that will be applied to the element and across the animation.
+       * @param {object} to the to (destination) CSS styles that will be applied to the element and across the animation.
+       * @param {string=} className an optional CSS class that will be applied to the element for the duration of the animation. If
+       *    this value is left as empty then a CSS class of `ng-inline-animate` will be applied to the element.
+       *    (Note that if no animation is detected then this value will not be appplied to the element.)
+       * @param {object=} options an optional collection of options/styles that will be applied to the element
+       *
+       * @return {Promise} the animation callback promise
+       */
+      animate: function(element, from, to, className, options) {
+        options = prepareAnimateOptions(options);
+        options.from = options.from ? extend(options.from, from) : from;
+        options.to   = options.to   ? extend(options.to, to)     : to;
+
+        className = className || 'ng-inline-animate';
+        options.tempClasses = mergeClasses(options.tempClasses, className);
+        return $$animateQueue.push(element, 'animate', options);
+      }
+    };
+  }];
+}];
+
+/**
+ * @ngdoc service
+ * @name $animateCss
+ * @kind object
+ *
+ * @description
+ * This is the core version of `$animateCss`. By default, only when the `ngAnimate` is included,
+ * then the `$animateCss` service will actually perform animations.
+ *
+ * Click here {@link ngAnimate.$animateCss to read the documentation for $animateCss}.
+ */
+var $CoreAnimateCssProvider = function() {
+  this.$get = ['$$rAF', '$q', function($$rAF, $q) {
+
+    var RAFPromise = function() {};
+    RAFPromise.prototype = {
+      done: function(cancel) {
+        this.defer && this.defer[cancel === true ? 'reject' : 'resolve']();
+      },
+      end: function() {
+        this.done();
+      },
+      cancel: function() {
+        this.done(true);
+      },
+      getPromise: function() {
+        if (!this.defer) {
+          this.defer = $q.defer();
+        }
+        return this.defer.promise;
+      },
+      then: function(f1,f2) {
+        return this.getPromise().then(f1,f2);
+      },
+      'catch': function(f1) {
+        return this.getPromise()['catch'](f1);
+      },
+      'finally': function(f1) {
+        return this.getPromise()['finally'](f1);
+      }
+    };
+
+    return function(element, options) {
+      // there is no point in applying the styles since
+      // there is no animation that goes on at all in
+      // this version of $animateCss.
+      if (options.cleanupStyles) {
+        options.from = options.to = null;
+      }
+
+      if (options.from) {
+        element.css(options.from);
+        options.from = null;
+      }
+
+      var closed, runner = new RAFPromise();
+      return {
+        start: run,
+        end: run
+      };
+
+      function run() {
+        $$rAF(function() {
+          close();
+          if (!closed) {
+            runner.done();
+          }
+          closed = true;
+        });
+        return runner;
+      }
+
+      function close() {
+        if (options.addClass) {
+          element.addClass(options.addClass);
+          options.addClass = null;
+        }
+        if (options.removeClass) {
+          element.removeClass(options.removeClass);
+          options.removeClass = null;
+        }
+        if (options.to) {
+          element.css(options.to);
+          options.to = null;
+        }
+      }
+    };
+  }];
+};
+
+/* global stripHash: true */
+
+/**
+ * ! This is a private undocumented service !
+ *
+ * @name $browser
+ * @requires $log
+ * @description
+ * This object has two goals:
+ *
+ * - hide all the global state in the browser caused by the window object
+ * - abstract away all the browser specific features and inconsistencies
+ *
+ * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser`
+ * service, which can be used for convenient testing of the application without the interaction with
+ * the real browser apis.
+ */
+/**
+ * @param {object} window The global window object.
+ * @param {object} document jQuery wrapped document.
+ * @param {object} $log window.console or an object with the same interface.
+ * @param {object} $sniffer $sniffer service
+ */
+function Browser(window, document, $log, $sniffer) {
+  var self = this,
+      rawDocument = document[0],
+      location = window.location,
+      history = window.history,
+      setTimeout = window.setTimeout,
+      clearTimeout = window.clearTimeout,
+      pendingDeferIds = {};
+
+  self.isMock = false;
+
+  var outstandingRequestCount = 0;
+  var outstandingRequestCallbacks = [];
+
+  // TODO(vojta): remove this temporary api
+  self.$$completeOutstandingRequest = completeOutstandingRequest;
+  self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; };
+
+  /**
+   * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks`
+   * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed.
+   */
+  function completeOutstandingRequest(fn) {
+    try {
+      fn.apply(null, sliceArgs(arguments, 1));
+    } finally {
+      outstandingRequestCount--;
+      if (outstandingRequestCount === 0) {
+        while (outstandingRequestCallbacks.length) {
+          try {
+            outstandingRequestCallbacks.pop()();
+          } catch (e) {
+            $log.error(e);
+          }
+        }
+      }
+    }
+  }
+
+  function getHash(url) {
+    var index = url.indexOf('#');
+    return index === -1 ? '' : url.substr(index);
+  }
+
+  /**
+   * @private
+   * Note: this method is used only by scenario runner
+   * TODO(vojta): prefix this method with $$ ?
+   * @param {function()} callback Function that will be called when no outstanding request
+   */
+  self.notifyWhenNoOutstandingRequests = function(callback) {
+    if (outstandingRequestCount === 0) {
+      callback();
+    } else {
+      outstandingRequestCallbacks.push(callback);
+    }
+  };
+
+  //////////////////////////////////////////////////////////////
+  // URL API
+  //////////////////////////////////////////////////////////////
+
+  var cachedState, lastHistoryState,
+      lastBrowserUrl = location.href,
+      baseElement = document.find('base'),
+      pendingLocation = null;
+
+  cacheState();
+  lastHistoryState = cachedState;
+
+  /**
+   * @name $browser#url
+   *
+   * @description
+   * GETTER:
+   * Without any argument, this method just returns current value of location.href.
+   *
+   * SETTER:
+   * With at least one argument, this method sets url to new value.
+   * If html5 history api supported, pushState/replaceState is used, otherwise
+   * location.href/location.replace is used.
+   * Returns its own instance to allow chaining
+   *
+   * NOTE: this api is intended for use only by the $location service. Please use the
+   * {@link ng.$location $location service} to change url.
+   *
+   * @param {string} url New url (when used as setter)
+   * @param {boolean=} replace Should new url replace current history record?
+   * @param {object=} state object to use with pushState/replaceState
+   */
+  self.url = function(url, replace, state) {
+    // In modern browsers `history.state` is `null` by default; treating it separately
+    // from `undefined` would cause `$browser.url('/foo')` to change `history.state`
+    // to undefined via `pushState`. Instead, let's change `undefined` to `null` here.
+    if (isUndefined(state)) {
+      state = null;
+    }
+
+    // Android Browser BFCache causes location, history reference to become stale.
+    if (location !== window.location) location = window.location;
+    if (history !== window.history) history = window.history;
+
+    // setter
+    if (url) {
+      var sameState = lastHistoryState === state;
+
+      // Don't change anything if previous and current URLs and states match. This also prevents
+      // IE<10 from getting into redirect loop when in LocationHashbangInHtml5Url mode.
+      // See https://github.com/angular/angular.js/commit/ffb2701
+      if (lastBrowserUrl === url && (!$sniffer.history || sameState)) {
+        return self;
+      }
+      var sameBase = lastBrowserUrl && stripHash(lastBrowserUrl) === stripHash(url);
+      lastBrowserUrl = url;
+      lastHistoryState = state;
+      // Don't use history API if only the hash changed
+      // due to a bug in IE10/IE11 which leads
+      // to not firing a `hashchange` nor `popstate` event
+      // in some cases (see #9143).
+      if ($sniffer.history && (!sameBase || !sameState)) {
+        history[replace ? 'replaceState' : 'pushState'](state, '', url);
+        cacheState();
+        // Do the assignment again so that those two variables are referentially identical.
+        lastHistoryState = cachedState;
+      } else {
+        if (!sameBase || pendingLocation) {
+          pendingLocation = url;
+        }
+        if (replace) {
+          location.replace(url);
+        } else if (!sameBase) {
+          location.href = url;
+        } else {
+          location.hash = getHash(url);
+        }
+        if (location.href !== url) {
+          pendingLocation = url;
+        }
+      }
+      return self;
+    // getter
+    } else {
+      // - pendingLocation is needed as browsers don't allow to read out
+      //   the new location.href if a reload happened or if there is a bug like in iOS 9 (see
+      //   https://openradar.appspot.com/22186109).
+      // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172
+      return pendingLocation || location.href.replace(/%27/g,"'");
+    }
+  };
+
+  /**
+   * @name $browser#state
+   *
+   * @description
+   * This method is a getter.
+   *
+   * Return history.state or null if history.state is undefined.
+   *
+   * @returns {object} state
+   */
+  self.state = function() {
+    return cachedState;
+  };
+
+  var urlChangeListeners = [],
+      urlChangeInit = false;
+
+  function cacheStateAndFireUrlChange() {
+    pendingLocation = null;
+    cacheState();
+    fireUrlChange();
+  }
+
+  function getCurrentState() {
+    try {
+      return history.state;
+    } catch (e) {
+      // MSIE can reportedly throw when there is no state (UNCONFIRMED).
+    }
+  }
+
+  // This variable should be used *only* inside the cacheState function.
+  var lastCachedState = null;
+  function cacheState() {
+    // This should be the only place in $browser where `history.state` is read.
+    cachedState = getCurrentState();
+    cachedState = isUndefined(cachedState) ? null : cachedState;
+
+    // Prevent callbacks fo fire twice if both hashchange & popstate were fired.
+    if (equals(cachedState, lastCachedState)) {
+      cachedState = lastCachedState;
+    }
+    lastCachedState = cachedState;
+  }
+
+  function fireUrlChange() {
+    if (lastBrowserUrl === self.url() && lastHistoryState === cachedState) {
+      return;
+    }
+
+    lastBrowserUrl = self.url();
+    lastHistoryState = cachedState;
+    forEach(urlChangeListeners, function(listener) {
+      listener(self.url(), cachedState);
+    });
+  }
+
+  /**
+   * @name $browser#onUrlChange
+   *
+   * @description
+   * Register callback function that will be called, when url changes.
+   *
+   * It's only called when the url is changed from outside of angular:
+   * - user types different url into address bar
+   * - user clicks on history (forward/back) button
+   * - user clicks on a link
+   *
+   * It's not called when url is changed by $browser.url() method
+   *
+   * The listener gets called with new url as parameter.
+   *
+   * NOTE: this api is intended for use only by the $location service. Please use the
+   * {@link ng.$location $location service} to monitor url changes in angular apps.
+   *
+   * @param {function(string)} listener Listener function to be called when url changes.
+   * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous.
+   */
+  self.onUrlChange = function(callback) {
+    // TODO(vojta): refactor to use node's syntax for events
+    if (!urlChangeInit) {
+      // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera)
+      // don't fire popstate when user change the address bar and don't fire hashchange when url
+      // changed by push/replaceState
+
+      // html5 history api - popstate event
+      if ($sniffer.history) jqLite(window).on('popstate', cacheStateAndFireUrlChange);
+      // hashchange event
+      jqLite(window).on('hashchange', cacheStateAndFireUrlChange);
+
+      urlChangeInit = true;
+    }
+
+    urlChangeListeners.push(callback);
+    return callback;
+  };
+
+  /**
+   * @private
+   * Remove popstate and hashchange handler from window.
+   *
+   * NOTE: this api is intended for use only by $rootScope.
+   */
+  self.$$applicationDestroyed = function() {
+    jqLite(window).off('hashchange popstate', cacheStateAndFireUrlChange);
+  };
+
+  /**
+   * Checks whether the url has changed outside of Angular.
+   * Needs to be exported to be able to check for changes that have been done in sync,
+   * as hashchange/popstate events fire in async.
+   */
+  self.$$checkUrlChange = fireUrlChange;
+
+  //////////////////////////////////////////////////////////////
+  // Misc API
+  //////////////////////////////////////////////////////////////
+
+  /**
+   * @name $browser#baseHref
+   *
+   * @description
+   * Returns current <base href>
+   * (always relative - without domain)
+   *
+   * @returns {string} The current base href
+   */
+  self.baseHref = function() {
+    var href = baseElement.attr('href');
+    return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : '';
+  };
+
+  /**
+   * @name $browser#defer
+   * @param {function()} fn A function, who's execution should be deferred.
+   * @param {number=} [delay=0] of milliseconds to defer the function execution.
+   * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`.
+   *
+   * @description
+   * Executes a fn asynchronously via `setTimeout(fn, delay)`.
+   *
+   * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using
+   * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed
+   * via `$browser.defer.flush()`.
+   *
+   */
+  self.defer = function(fn, delay) {
+    var timeoutId;
+    outstandingRequestCount++;
+    timeoutId = setTimeout(function() {
+      delete pendingDeferIds[timeoutId];
+      completeOutstandingRequest(fn);
+    }, delay || 0);
+    pendingDeferIds[timeoutId] = true;
+    return timeoutId;
+  };
+
+
+  /**
+   * @name $browser#defer.cancel
+   *
+   * @description
+   * Cancels a deferred task identified with `deferId`.
+   *
+   * @param {*} deferId Token returned by the `$browser.defer` function.
+   * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully
+   *                    canceled.
+   */
+  self.defer.cancel = function(deferId) {
+    if (pendingDeferIds[deferId]) {
+      delete pendingDeferIds[deferId];
+      clearTimeout(deferId);
+      completeOutstandingRequest(noop);
+      return true;
+    }
+    return false;
+  };
+
+}
+
+function $BrowserProvider() {
+  this.$get = ['$window', '$log', '$sniffer', '$document',
+      function($window, $log, $sniffer, $document) {
+        return new Browser($window, $document, $log, $sniffer);
+      }];
+}
+
+/**
+ * @ngdoc service
+ * @name $cacheFactory
+ *
+ * @description
+ * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to
+ * them.
+ *
+ * ```js
+ *
+ *  var cache = $cacheFactory('cacheId');
+ *  expect($cacheFactory.get('cacheId')).toBe(cache);
+ *  expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();
+ *
+ *  cache.put("key", "value");
+ *  cache.put("another key", "another value");
+ *
+ *  // We've specified no options on creation
+ *  expect(cache.info()).toEqual({id: 'cacheId', size: 2});
+ *
+ * ```
+ *
+ *
+ * @param {string} cacheId Name or id of the newly created cache.
+ * @param {object=} options Options object that specifies the cache behavior. Properties:
+ *
+ *   - `{number=}` `capacity` — turns the cache into LRU cache.
+ *
+ * @returns {object} Newly created cache object with the following set of methods:
+ *
+ * - `{object}` `info()` — Returns id, size, and options of cache.
+ * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns
+ *   it.
+ * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss.
+ * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache.
+ * - `{void}` `removeAll()` — Removes all cached values.
+ * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory.
+ *
+ * @example
+   <example module="cacheExampleApp">
+     <file name="index.html">
+       <div ng-controller="CacheController">
+         <input ng-model="newCacheKey" placeholder="Key">
+         <input ng-model="newCacheValue" placeholder="Value">
+         <button ng-click="put(newCacheKey, newCacheValue)">Cache</button>
+
+         <p ng-if="keys.length">Cached Values</p>
+         <div ng-repeat="key in keys">
+           <span ng-bind="key"></span>
+           <span>: </span>
+           <b ng-bind="cache.get(key)"></b>
+         </div>
+
+         <p>Cache Info</p>
+         <div ng-repeat="(key, value) in cache.info()">
+           <span ng-bind="key"></span>
+           <span>: </span>
+           <b ng-bind="value"></b>
+         </div>
+       </div>
+     </file>
+     <file name="script.js">
+       angular.module('cacheExampleApp', []).
+         controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) {
+           $scope.keys = [];
+           $scope.cache = $cacheFactory('cacheId');
+           $scope.put = function(key, value) {
+             if (angular.isUndefined($scope.cache.get(key))) {
+               $scope.keys.push(key);
+             }
+             $scope.cache.put(key, angular.isUndefined(value) ? null : value);
+           };
+         }]);
+     </file>
+     <file name="style.css">
+       p {
+         margin: 10px 0 3px;
+       }
+     </file>
+   </example>
+ */
+function $CacheFactoryProvider() {
+
+  this.$get = function() {
+    var caches = {};
+
+    function cacheFactory(cacheId, options) {
+      if (cacheId in caches) {
+        throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId);
+      }
+
+      var size = 0,
+          stats = extend({}, options, {id: cacheId}),
+          data = createMap(),
+          capacity = (options && options.capacity) || Number.MAX_VALUE,
+          lruHash = createMap(),
+          freshEnd = null,
+          staleEnd = null;
+
+      /**
+       * @ngdoc type
+       * @name $cacheFactory.Cache
+       *
+       * @description
+       * A cache object used to store and retrieve data, primarily used by
+       * {@link $http $http} and the {@link ng.directive:script script} directive to cache
+       * templates and other data.
+       *
+       * ```js
+       *  angular.module('superCache')
+       *    .factory('superCache', ['$cacheFactory', function($cacheFactory) {
+       *      return $cacheFactory('super-cache');
+       *    }]);
+       * ```
+       *
+       * Example test:
+       *
+       * ```js
+       *  it('should behave like a cache', inject(function(superCache) {
+       *    superCache.put('key', 'value');
+       *    superCache.put('another key', 'another value');
+       *
+       *    expect(superCache.info()).toEqual({
+       *      id: 'super-cache',
+       *      size: 2
+       *    });
+       *
+       *    superCache.remove('another key');
+       *    expect(superCache.get('another key')).toBeUndefined();
+       *
+       *    superCache.removeAll();
+       *    expect(superCache.info()).toEqual({
+       *      id: 'super-cache',
+       *      size: 0
+       *    });
+       *  }));
+       * ```
+       */
+      return caches[cacheId] = {
+
+        /**
+         * @ngdoc method
+         * @name $cacheFactory.Cache#put
+         * @kind function
+         *
+         * @description
+         * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be
+         * retrieved later, and incrementing the size of the cache if the key was not already
+         * present in the cache. If behaving like an LRU cache, it will also remove stale
+         * entries from the set.
+         *
+         * It will not insert undefined values into the cache.
+         *
+         * @param {string} key the key under which the cached data is stored.
+         * @param {*} value the value to store alongside the key. If it is undefined, the key
+         *    will not be stored.
+         * @returns {*} the value stored.
+         */
+        put: function(key, value) {
+          if (isUndefined(value)) return;
+          if (capacity < Number.MAX_VALUE) {
+            var lruEntry = lruHash[key] || (lruHash[key] = {key: key});
+
+            refresh(lruEntry);
+          }
+
+          if (!(key in data)) size++;
+          data[key] = value;
+
+          if (size > capacity) {
+            this.remove(staleEnd.key);
+          }
+
+          return value;
+        },
+
+        /**
+         * @ngdoc method
+         * @name $cacheFactory.Cache#get
+         * @kind function
+         *
+         * @description
+         * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object.
+         *
+         * @param {string} key the key of the data to be retrieved
+         * @returns {*} the value stored.
+         */
+        get: function(key) {
+          if (capacity < Number.MAX_VALUE) {
+            var lruEntry = lruHash[key];
+
+            if (!lruEntry) return;
+
+            refresh(lruEntry);
+          }
+
+          return data[key];
+        },
+
+
+        /**
+         * @ngdoc method
+         * @name $cacheFactory.Cache#remove
+         * @kind function
+         *
+         * @description
+         * Removes an entry from the {@link $cacheFactory.Cache Cache} object.
+         *
+         * @param {string} key the key of the entry to be removed
+         */
+        remove: function(key) {
+          if (capacity < Number.MAX_VALUE) {
+            var lruEntry = lruHash[key];
+
+            if (!lruEntry) return;
+
+            if (lruEntry == freshEnd) freshEnd = lruEntry.p;
+            if (lruEntry == staleEnd) staleEnd = lruEntry.n;
+            link(lruEntry.n,lruEntry.p);
+
+            delete lruHash[key];
+          }
+
+          if (!(key in data)) return;
+
+          delete data[key];
+          size--;
+        },
+
+
+        /**
+         * @ngdoc method
+         * @name $cacheFactory.Cache#removeAll
+         * @kind function
+         *
+         * @description
+         * Clears the cache object of any entries.
+         */
+        removeAll: function() {
+          data = createMap();
+          size = 0;
+          lruHash = createMap();
+          freshEnd = staleEnd = null;
+        },
+
+
+        /**
+         * @ngdoc method
+         * @name $cacheFactory.Cache#destroy
+         * @kind function
+         *
+         * @description
+         * Destroys the {@link $cacheFactory.Cache Cache} object entirely,
+         * removing it from the {@link $cacheFactory $cacheFactory} set.
+         */
+        destroy: function() {
+          data = null;
+          stats = null;
+          lruHash = null;
+          delete caches[cacheId];
+        },
+
+
+        /**
+         * @ngdoc method
+         * @name $cacheFactory.Cache#info
+         * @kind function
+         *
+         * @description
+         * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}.
+         *
+         * @returns {object} an object with the following properties:
+         *   <ul>
+         *     <li>**id**: the id of the cache instance</li>
+         *     <li>**size**: the number of entries kept in the cache instance</li>
+         *     <li>**...**: any additional properties from the options object when creating the
+         *       cache.</li>
+         *   </ul>
+         */
+        info: function() {
+          return extend({}, stats, {size: size});
+        }
+      };
+
+
+      /**
+       * makes the `entry` the freshEnd of the LRU linked list
+       */
+      function refresh(entry) {
+        if (entry != freshEnd) {
+          if (!staleEnd) {
+            staleEnd = entry;
+          } else if (staleEnd == entry) {
+            staleEnd = entry.n;
+          }
+
+          link(entry.n, entry.p);
+          link(entry, freshEnd);
+          freshEnd = entry;
+          freshEnd.n = null;
+        }
+      }
+
+
+      /**
+       * bidirectionally links two entries of the LRU linked list
+       */
+      function link(nextEntry, prevEntry) {
+        if (nextEntry != prevEntry) {
+          if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify
+          if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify
+        }
+      }
+    }
+
+
+  /**
+   * @ngdoc method
+   * @name $cacheFactory#info
+   *
+   * @description
+   * Get information about all the caches that have been created
+   *
+   * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info`
+   */
+    cacheFactory.info = function() {
+      var info = {};
+      forEach(caches, function(cache, cacheId) {
+        info[cacheId] = cache.info();
+      });
+      return info;
+    };
+
+
+  /**
+   * @ngdoc method
+   * @name $cacheFactory#get
+   *
+   * @description
+   * Get access to a cache object by the `cacheId` used when it was created.
+   *
+   * @param {string} cacheId Name or id of a cache to access.
+   * @returns {object} Cache object identified by the cacheId or undefined if no such cache.
+   */
+    cacheFactory.get = function(cacheId) {
+      return caches[cacheId];
+    };
+
+
+    return cacheFactory;
+  };
+}
+
+/**
+ * @ngdoc service
+ * @name $templateCache
+ *
+ * @description
+ * The first time a template is used, it is loaded in the template cache for quick retrieval. You
+ * can load templates directly into the cache in a `script` tag, or by consuming the
+ * `$templateCache` service directly.
+ *
+ * Adding via the `script` tag:
+ *
+ * ```html
+ *   <script type="text/ng-template" id="templateId.html">
+ *     <p>This is the content of the template</p>
+ *   </script>
+ * ```
+ *
+ * **Note:** the `script` tag containing the template does not need to be included in the `head` of
+ * the document, but it must be a descendent of the {@link ng.$rootElement $rootElement} (IE,
+ * element with ng-app attribute), otherwise the template will be ignored.
+ *
+ * Adding via the `$templateCache` service:
+ *
+ * ```js
+ * var myApp = angular.module('myApp', []);
+ * myApp.run(function($templateCache) {
+ *   $templateCache.put('templateId.html', 'This is the content of the template');
+ * });
+ * ```
+ *
+ * To retrieve the template later, simply use it in your HTML:
+ * ```html
+ * <div ng-include=" 'templateId.html' "></div>
+ * ```
+ *
+ * or get it via Javascript:
+ * ```js
+ * $templateCache.get('templateId.html')
+ * ```
+ *
+ * See {@link ng.$cacheFactory $cacheFactory}.
+ *
+ */
+function $TemplateCacheProvider() {
+  this.$get = ['$cacheFactory', function($cacheFactory) {
+    return $cacheFactory('templates');
+  }];
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *     Any commits to this file should be reviewed with security in mind.  *
+ *   Changes to this file can potentially create security vulnerabilities. *
+ *          An approval from 2 Core members with history of modifying      *
+ *                         this file is required.                          *
+ *                                                                         *
+ *  Does the change somehow allow for arbitrary javascript to be executed? *
+ *    Or allows for someone to change the prototype of built-in objects?   *
+ *     Or gives undesired access to variables likes document or window?    *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE!
+ *
+ * DOM-related variables:
+ *
+ * - "node" - DOM Node
+ * - "element" - DOM Element or Node
+ * - "$node" or "$element" - jqLite-wrapped node or element
+ *
+ *
+ * Compiler related stuff:
+ *
+ * - "linkFn" - linking fn of a single directive
+ * - "nodeLinkFn" - function that aggregates all linking fns for a particular node
+ * - "childLinkFn" -  function that aggregates all linking fns for child nodes of a particular node
+ * - "compositeLinkFn" - function that aggregates all linking fns for a compilation root (nodeList)
+ */
+
+
+/**
+ * @ngdoc service
+ * @name $compile
+ * @kind function
+ *
+ * @description
+ * Compiles an HTML string or DOM into a template and produces a template function, which
+ * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together.
+ *
+ * The compilation is a process of walking the DOM tree and matching DOM elements to
+ * {@link ng.$compileProvider#directive directives}.
+ *
+ * <div class="alert alert-warning">
+ * **Note:** This document is an in-depth reference of all directive options.
+ * For a gentle introduction to directives with examples of common use cases,
+ * see the {@link guide/directive directive guide}.
+ * </div>
+ *
+ * ## Comprehensive Directive API
+ *
+ * There are many different options for a directive.
+ *
+ * The difference resides in the return value of the factory function.
+ * You can either return a "Directive Definition Object" (see below) that defines the directive properties,
+ * or just the `postLink` function (all other properties will have the default values).
+ *
+ * <div class="alert alert-success">
+ * **Best Practice:** It's recommended to use the "directive definition object" form.
+ * </div>
+ *
+ * Here's an example directive declared with a Directive Definition Object:
+ *
+ * ```js
+ *   var myModule = angular.module(...);
+ *
+ *   myModule.directive('directiveName', function factory(injectables) {
+ *     var directiveDefinitionObject = {
+ *       priority: 0,
+ *       template: '<div></div>', // or // function(tElement, tAttrs) { ... },
+ *       // or
+ *       // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... },
+ *       transclude: false,
+ *       restrict: 'A',
+ *       templateNamespace: 'html',
+ *       scope: false,
+ *       controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },
+ *       controllerAs: 'stringIdentifier',
+ *       bindToController: false,
+ *       require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'],
+ *       compile: function compile(tElement, tAttrs, transclude) {
+ *         return {
+ *           pre: function preLink(scope, iElement, iAttrs, controller) { ... },
+ *           post: function postLink(scope, iElement, iAttrs, controller) { ... }
+ *         }
+ *         // or
+ *         // return function postLink( ... ) { ... }
+ *       },
+ *       // or
+ *       // link: {
+ *       //  pre: function preLink(scope, iElement, iAttrs, controller) { ... },
+ *       //  post: function postLink(scope, iElement, iAttrs, controller) { ... }
+ *       // }
+ *       // or
+ *       // link: function postLink( ... ) { ... }
+ *     };
+ *     return directiveDefinitionObject;
+ *   });
+ * ```
+ *
+ * <div class="alert alert-warning">
+ * **Note:** Any unspecified options will use the default value. You can see the default values below.
+ * </div>
+ *
+ * Therefore the above can be simplified as:
+ *
+ * ```js
+ *   var myModule = angular.module(...);
+ *
+ *   myModule.directive('directiveName', function factory(injectables) {
+ *     var directiveDefinitionObject = {
+ *       link: function postLink(scope, iElement, iAttrs) { ... }
+ *     };
+ *     return directiveDefinitionObject;
+ *     // or
+ *     // return function postLink(scope, iElement, iAttrs) { ... }
+ *   });
+ * ```
+ *
+ *
+ *
+ * ### Directive Definition Object
+ *
+ * The directive definition object provides instructions to the {@link ng.$compile
+ * compiler}. The attributes are:
+ *
+ * #### `multiElement`
+ * When this property is set to true, the HTML compiler will collect DOM nodes between
+ * nodes with the attributes `directive-name-start` and `directive-name-end`, and group them
+ * together as the directive elements. It is recommended that this feature be used on directives
+ * which are not strictly behavioural (such as {@link ngClick}), and which
+ * do not manipulate or replace child nodes (such as {@link ngInclude}).
+ *
+ * #### `priority`
+ * When there are multiple directives defined on a single DOM element, sometimes it
+ * is necessary to specify the order in which the directives are applied. The `priority` is used
+ * to sort the directives before their `compile` functions get called. Priority is defined as a
+ * number. Directives with greater numerical `priority` are compiled first. Pre-link functions
+ * are also run in priority order, but post-link functions are run in reverse order. The order
+ * of directives with the same priority is undefined. The default priority is `0`.
+ *
+ * #### `terminal`
+ * If set to true then the current `priority` will be the last set of directives
+ * which will execute (any directives at the current priority will still execute
+ * as the order of execution on same `priority` is undefined). Note that expressions
+ * and other directives used in the directive's template will also be excluded from execution.
+ *
+ * #### `scope`
+ * The scope property can be `true`, an object or a falsy value:
+ *
+ * * **falsy:** No scope will be created for the directive. The directive will use its parent's scope.
+ *
+ * * **`true`:** A new child scope that prototypically inherits from its parent will be created for
+ * the directive's element. If multiple directives on the same element request a new scope,
+ * only one new scope is created. The new scope rule does not apply for the root of the template
+ * since the root of the template always gets a new scope.
+ *
+ * * **`{...}` (an object hash):** A new "isolate" scope is created for the directive's element. The
+ * 'isolate' scope differs from normal scope in that it does not prototypically inherit from its parent
+ * scope. This is useful when creating reusable components, which should not accidentally read or modify
+ * data in the parent scope.
+ *
+ * The 'isolate' scope object hash defines a set of local scope properties derived from attributes on the
+ * directive's element. These local properties are useful for aliasing values for templates. The keys in
+ * the object hash map to the name of the property on the isolate scope; the values define how the property
+ * is bound to the parent scope, via matching attributes on the directive's element:
+ *
+ * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is
+ *   always a string since DOM attributes are strings. If no `attr` name is specified  then the
+ *   attribute name is assumed to be the same as the local name.
+ *   Given `<widget my-attr="hello {{name}}">` and widget definition
+ *   of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect
+ *   the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the
+ *   `localName` property on the widget scope. The `name` is read from the parent scope (not
+ *   component scope).
+ *
+ * * `=` or `=attr` - set up bi-directional binding between a local scope property and the
+ *   parent scope property of name defined via the value of the `attr` attribute. If no `attr`
+ *   name is specified then the attribute name is assumed to be the same as the local name.
+ *   Given `<widget my-attr="parentModel">` and widget definition of
+ *   `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the
+ *   value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected
+ *   in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent
+ *   scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You
+ *   can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional. If
+ *   you want to shallow watch for changes (i.e. $watchCollection instead of $watch) you can use
+ *   `=*` or `=*attr` (`=*?` or `=*?attr` if the property is optional).
+ *
+ * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope.
+ *   If no `attr` name is specified then the attribute name is assumed to be the same as the
+ *   local name. Given `<widget my-attr="count = count + value">` and widget definition of
+ *   `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to
+ *   a function wrapper for the `count = count + value` expression. Often it's desirable to
+ *   pass data from the isolated scope via an expression to the parent scope, this can be
+ *   done by passing a map of local variable names and values into the expression wrapper fn.
+ *   For example, if the expression is `increment(amount)` then we can specify the amount value
+ *   by calling the `localFn` as `localFn({amount: 22})`.
+ *
+ * In general it's possible to apply more than one directive to one element, but there might be limitations
+ * depending on the type of scope required by the directives. The following points will help explain these limitations.
+ * For simplicity only two directives are taken into account, but it is also applicable for several directives:
+ *
+ * * **no scope** + **no scope** => Two directives which don't require their own scope will use their parent's scope
+ * * **child scope** + **no scope** =>  Both directives will share one single child scope
+ * * **child scope** + **child scope** =>  Both directives will share one single child scope
+ * * **isolated scope** + **no scope** =>  The isolated directive will use it's own created isolated scope. The other directive will use
+ * its parent's scope
+ * * **isolated scope** + **child scope** =>  **Won't work!** Only one scope can be related to one element. Therefore these directives cannot
+ * be applied to the same element.
+ * * **isolated scope** + **isolated scope**  =>  **Won't work!** Only one scope can be related to one element. Therefore these directives
+ * cannot be applied to the same element.
+ *
+ *
+ * #### `bindToController`
+ * When an isolate scope is used for a component (see above), and `controllerAs` is used, `bindToController: true` will
+ * allow a component to have its properties bound to the controller, rather than to scope. When the controller
+ * is instantiated, the initial values of the isolate scope bindings are already available.
+ *
+ * #### `controller`
+ * Controller constructor function. The controller is instantiated before the
+ * pre-linking phase and can be accessed by other directives (see
+ * `require` attribute). This allows the directives to communicate with each other and augment
+ * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals:
+ *
+ * * `$scope` - Current scope associated with the element
+ * * `$element` - Current element
+ * * `$attrs` - Current attributes object for the element
+ * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope:
+ *   `function([scope], cloneLinkingFn, futureParentElement)`.
+ *    * `scope`: optional argument to override the scope.
+ *    * `cloneLinkingFn`: optional argument to create clones of the original transcluded content.
+ *    * `futureParentElement`:
+ *        * defines the parent to which the `cloneLinkingFn` will add the cloned elements.
+ *        * default: `$element.parent()` resp. `$element` for `transclude:'element'` resp. `transclude:true`.
+ *        * only needed for transcludes that are allowed to contain non html elements (e.g. SVG elements)
+ *          and when the `cloneLinkinFn` is passed,
+ *          as those elements need to created and cloned in a special way when they are defined outside their
+ *          usual containers (e.g. like `<svg>`).
+ *        * See also the `directive.templateNamespace` property.
+ *
+ *
+ * #### `require`
+ * Require another directive and inject its controller as the fourth argument to the linking function. The
+ * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the
+ * injected argument will be an array in corresponding order. If no such directive can be
+ * found, or if the directive does not have a controller, then an error is raised (unless no link function
+ * is specified, in which case error checking is skipped). The name can be prefixed with:
+ *
+ * * (no prefix) - Locate the required controller on the current element. Throw an error if not found.
+ * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found.
+ * * `^` - Locate the required controller by searching the element and its parents. Throw an error if not found.
+ * * `^^` - Locate the required controller by searching the element's parents. Throw an error if not found.
+ * * `?^` - Attempt to locate the required controller by searching the element and its parents or pass
+ *   `null` to the `link` fn if not found.
+ * * `?^^` - Attempt to locate the required controller by searching the element's parents, or pass
+ *   `null` to the `link` fn if not found.
+ *
+ *
+ * #### `controllerAs`
+ * Identifier name for a reference to the controller in the directive's scope.
+ * This allows the controller to be referenced from the directive template. This is especially
+ * useful when a directive is used as component, i.e. with an `isolate` scope. It's also possible
+ * to use it in a directive without an `isolate` / `new` scope, but you need to be aware that the
+ * `controllerAs` reference might overwrite a property that already exists on the parent scope.
+ *
+ *
+ * #### `restrict`
+ * String of subset of `EACM` which restricts the directive to a specific directive
+ * declaration style. If omitted, the defaults (elements and attributes) are used.
+ *
+ * * `E` - Element name (default): `<my-directive></my-directive>`
+ * * `A` - Attribute (default): `<div my-directive="exp"></div>`
+ * * `C` - Class: `<div class="my-directive: exp;"></div>`
+ * * `M` - Comment: `<!-- directive: my-directive exp -->`
+ *
+ *
+ * #### `templateNamespace`
+ * String representing the document type used by the markup in the template.
+ * AngularJS needs this information as those elements need to be created and cloned
+ * in a special way when they are defined outside their usual containers like `<svg>` and `<math>`.
+ *
+ * * `html` - All root nodes in the template are HTML. Root nodes may also be
+ *   top-level elements such as `<svg>` or `<math>`.
+ * * `svg` - The root nodes in the template are SVG elements (excluding `<math>`).
+ * * `math` - The root nodes in the template are MathML elements (excluding `<svg>`).
+ *
+ * If no `templateNamespace` is specified, then the namespace is considered to be `html`.
+ *
+ * #### `template`
+ * HTML markup that may:
+ * * Replace the contents of the directive's element (default).
+ * * Replace the directive's element itself (if `replace` is true - DEPRECATED).
+ * * Wrap the contents of the directive's element (if `transclude` is true).
+ *
+ * Value may be:
+ *
+ * * A string. For example `<div red-on-hover>{{delete_str}}</div>`.
+ * * A function which takes two arguments `tElement` and `tAttrs` (described in the `compile`
+ *   function api below) and returns a string value.
+ *
+ *
+ * #### `templateUrl`
+ * This is similar to `template` but the template is loaded from the specified URL, asynchronously.
+ *
+ * Because template loading is asynchronous the compiler will suspend compilation of directives on that element
+ * for later when the template has been resolved.  In the meantime it will continue to compile and link
+ * sibling and parent elements as though this element had not contained any directives.
+ *
+ * The compiler does not suspend the entire compilation to wait for templates to be loaded because this
+ * would result in the whole app "stalling" until all templates are loaded asynchronously - even in the
+ * case when only one deeply nested directive has `templateUrl`.
+ *
+ * Template loading is asynchronous even if the template has been preloaded into the {@link $templateCache}
+ *
+ * You can specify `templateUrl` as a string representing the URL or as a function which takes two
+ * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns
+ * a string value representing the url.  In either case, the template URL is passed through {@link
+ * $sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}.
+ *
+ *
+ * #### `replace` ([*DEPRECATED*!], will be removed in next major release - i.e. v2.0)
+ * specify what the template should replace. Defaults to `false`.
+ *
+ * * `true` - the template will replace the directive's element.
+ * * `false` - the template will replace the contents of the directive's element.
+ *
+ * The replacement process migrates all of the attributes / classes from the old element to the new
+ * one. See the {@link guide/directive#template-expanding-directive
+ * Directives Guide} for an example.
+ *
+ * There are very few scenarios where element replacement is required for the application function,
+ * the main one being reusable custom components that are used within SVG contexts
+ * (because SVG doesn't work with custom elements in the DOM tree).
+ *
+ * #### `transclude`
+ * Extract the contents of the element where the directive appears and make it available to the directive.
+ * The contents are compiled and provided to the directive as a **transclusion function**. See the
+ * {@link $compile#transclusion Transclusion} section below.
+ *
+ * There are two kinds of transclusion depending upon whether you want to transclude just the contents of the
+ * directive's element or the entire element:
+ *
+ * * `true` - transclude the content (i.e. the child nodes) of the directive's element.
+ * * `'element'` - transclude the whole of the directive's element including any directives on this
+ *   element that defined at a lower priority than this directive. When used, the `template`
+ *   property is ignored.
+ *
+ *
+ * #### `compile`
+ *
+ * ```js
+ *   function compile(tElement, tAttrs, transclude) { ... }
+ * ```
+ *
+ * The compile function deals with transforming the template DOM. Since most directives do not do
+ * template transformation, it is not used often. The compile function takes the following arguments:
+ *
+ *   * `tElement` - template element - The element where the directive has been declared. It is
+ *     safe to do template transformation on the element and child elements only.
+ *
+ *   * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared
+ *     between all directive compile functions.
+ *
+ *   * `transclude` -  [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)`
+ *
+ * <div class="alert alert-warning">
+ * **Note:** The template instance and the link instance may be different objects if the template has
+ * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that
+ * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration
+ * should be done in a linking function rather than in a compile function.
+ * </div>
+
+ * <div class="alert alert-warning">
+ * **Note:** The compile function cannot handle directives that recursively use themselves in their
+ * own templates or compile functions. Compiling these directives results in an infinite loop and a
+ * stack overflow errors.
+ *
+ * This can be avoided by manually using $compile in the postLink function to imperatively compile
+ * a directive's template instead of relying on automatic template compilation via `template` or
+ * `templateUrl` declaration or manual compilation inside the compile function.
+ * </div>
+ *
+ * <div class="alert alert-danger">
+ * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it
+ *   e.g. does not know about the right outer scope. Please use the transclude function that is passed
+ *   to the link function instead.
+ * </div>
+
+ * A compile function can have a return value which can be either a function or an object.
+ *
+ * * returning a (post-link) function - is equivalent to registering the linking function via the
+ *   `link` property of the config object when the compile function is empty.
+ *
+ * * returning an object with function(s) registered via `pre` and `post` properties - allows you to
+ *   control when a linking function should be called during the linking phase. See info about
+ *   pre-linking and post-linking functions below.
+ *
+ *
+ * #### `link`
+ * This property is used only if the `compile` property is not defined.
+ *
+ * ```js
+ *   function link(scope, iElement, iAttrs, controller, transcludeFn) { ... }
+ * ```
+ *
+ * The link function is responsible for registering DOM listeners as well as updating the DOM. It is
+ * executed after the template has been cloned. This is where most of the directive logic will be
+ * put.
+ *
+ *   * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the
+ *     directive for registering {@link ng.$rootScope.Scope#$watch watches}.
+ *
+ *   * `iElement` - instance element - The element where the directive is to be used. It is safe to
+ *     manipulate the children of the element only in `postLink` function since the children have
+ *     already been linked.
+ *
+ *   * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared
+ *     between all directive linking functions.
+ *
+ *   * `controller` - the directive's required controller instance(s) - Instances are shared
+ *     among all directives, which allows the directives to use the controllers as a communication
+ *     channel. The exact value depends on the directive's `require` property:
+ *       * no controller(s) required: the directive's own controller, or `undefined` if it doesn't have one
+ *       * `string`: the controller instance
+ *       * `array`: array of controller instances
+ *
+ *     If a required controller cannot be found, and it is optional, the instance is `null`,
+ *     otherwise the {@link error:$compile:ctreq Missing Required Controller} error is thrown.
+ *
+ *     Note that you can also require the directive's own controller - it will be made available like
+ *     any other controller.
+ *
+ *   * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope.
+ *     This is the same as the `$transclude`
+ *     parameter of directive controllers, see there for details.
+ *     `function([scope], cloneLinkingFn, futureParentElement)`.
+ *
+ * #### Pre-linking function
+ *
+ * Executed before the child elements are linked. Not safe to do DOM transformation since the
+ * compiler linking function will fail to locate the correct elements for linking.
+ *
+ * #### Post-linking function
+ *
+ * Executed after the child elements are linked.
+ *
+ * Note that child elements that contain `templateUrl` directives will not have been compiled
+ * and linked since they are waiting for their template to load asynchronously and their own
+ * compilation and linking has been suspended until that occurs.
+ *
+ * It is safe to do DOM transformation in the post-linking function on elements that are not waiting
+ * for their async templates to be resolved.
+ *
+ *
+ * ### Transclusion
+ *
+ * Transclusion is the process of extracting a collection of DOM elements from one part of the DOM and
+ * copying them to another part of the DOM, while maintaining their connection to the original AngularJS
+ * scope from where they were taken.
+ *
+ * Transclusion is used (often with {@link ngTransclude}) to insert the
+ * original contents of a directive's element into a specified place in the template of the directive.
+ * The benefit of transclusion, over simply moving the DOM elements manually, is that the transcluded
+ * content has access to the properties on the scope from which it was taken, even if the directive
+ * has isolated scope.
+ * See the {@link guide/directive#creating-a-directive-that-wraps-other-elements Directives Guide}.
+ *
+ * This makes it possible for the widget to have private state for its template, while the transcluded
+ * content has access to its originating scope.
+ *
+ * <div class="alert alert-warning">
+ * **Note:** When testing an element transclude directive you must not place the directive at the root of the
+ * DOM fragment that is being compiled. See {@link guide/unit-testing#testing-transclusion-directives
+ * Testing Transclusion Directives}.
+ * </div>
+ *
+ * #### Transclusion Functions
+ *
+ * When a directive requests transclusion, the compiler extracts its contents and provides a **transclusion
+ * function** to the directive's `link` function and `controller`. This transclusion function is a special
+ * **linking function** that will return the compiled contents linked to a new transclusion scope.
+ *
+ * <div class="alert alert-info">
+ * If you are just using {@link ngTransclude} then you don't need to worry about this function, since
+ * ngTransclude will deal with it for us.
+ * </div>
+ *
+ * If you want to manually control the insertion and removal of the transcluded content in your directive
+ * then you must use this transclude function. When you call a transclude function it returns a a jqLite/JQuery
+ * object that contains the compiled DOM, which is linked to the correct transclusion scope.
+ *
+ * When you call a transclusion function you can pass in a **clone attach function**. This function accepts
+ * two parameters, `function(clone, scope) { ... }`, where the `clone` is a fresh compiled copy of your transcluded
+ * content and the `scope` is the newly created transclusion scope, to which the clone is bound.
+ *
+ * <div class="alert alert-info">
+ * **Best Practice**: Always provide a `cloneFn` (clone attach function) when you call a translude function
+ * since you then get a fresh clone of the original DOM and also have access to the new transclusion scope.
+ * </div>
+ *
+ * It is normal practice to attach your transcluded content (`clone`) to the DOM inside your **clone
+ * attach function**:
+ *
+ * ```js
+ * var transcludedContent, transclusionScope;
+ *
+ * $transclude(function(clone, scope) {
+ *   element.append(clone);
+ *   transcludedContent = clone;
+ *   transclusionScope = scope;
+ * });
+ * ```
+ *
+ * Later, if you want to remove the transcluded content from your DOM then you should also destroy the
+ * associated transclusion scope:
+ *
+ * ```js
+ * transcludedContent.remove();
+ * transclusionScope.$destroy();
+ * ```
+ *
+ * <div class="alert alert-info">
+ * **Best Practice**: if you intend to add and remove transcluded content manually in your directive
+ * (by calling the transclude function to get the DOM and calling `element.remove()` to remove it),
+ * then you are also responsible for calling `$destroy` on the transclusion scope.
+ * </div>
+ *
+ * The built-in DOM manipulation directives, such as {@link ngIf}, {@link ngSwitch} and {@link ngRepeat}
+ * automatically destroy their transluded clones as necessary so you do not need to worry about this if
+ * you are simply using {@link ngTransclude} to inject the transclusion into your directive.
+ *
+ *
+ * #### Transclusion Scopes
+ *
+ * When you call a transclude function it returns a DOM fragment that is pre-bound to a **transclusion
+ * scope**. This scope is special, in that it is a child of the directive's scope (and so gets destroyed
+ * when the directive's scope gets destroyed) but it inherits the properties of the scope from which it
+ * was taken.
+ *
+ * For example consider a directive that uses transclusion and isolated scope. The DOM hierarchy might look
+ * like this:
+ *
+ * ```html
+ * <div ng-app>
+ *   <div isolate>
+ *     <div transclusion>
+ *     </div>
+ *   </div>
+ * </div>
+ * ```
+ *
+ * The `$parent` scope hierarchy will look like this:
+ *
+ * ```
+ * - $rootScope
+ *   - isolate
+ *     - transclusion
+ * ```
+ *
+ * but the scopes will inherit prototypically from different scopes to their `$parent`.
+ *
+ * ```
+ * - $rootScope
+ *   - transclusion
+ * - isolate
+ * ```
+ *
+ *
+ * ### Attributes
+ *
+ * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the
+ * `link()` or `compile()` functions. It has a variety of uses.
+ *
+ * accessing *Normalized attribute names:*
+ * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'.
+ * the attributes object allows for normalized access to
+ *   the attributes.
+ *
+ * * *Directive inter-communication:* All directives share the same instance of the attributes
+ *   object which allows the directives to use the attributes object as inter directive
+ *   communication.
+ *
+ * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object
+ *   allowing other directives to read the interpolated value.
+ *
+ * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes
+ *   that contain interpolation (e.g. `src="{{bar}}"`). Not only is this very efficient but it's also
+ *   the only way to easily get the actual value because during the linking phase the interpolation
+ *   hasn't been evaluated yet and so the value is at this time set to `undefined`.
+ *
+ * ```js
+ * function linkingFn(scope, elm, attrs, ctrl) {
+ *   // get the attribute value
+ *   console.log(attrs.ngModel);
+ *
+ *   // change the attribute
+ *   attrs.$set('ngModel', 'new value');
+ *
+ *   // observe changes to interpolated attribute
+ *   attrs.$observe('ngModel', function(value) {
+ *     console.log('ngModel has changed value to ' + value);
+ *   });
+ * }
+ * ```
+ *
+ * ## Example
+ *
+ * <div class="alert alert-warning">
+ * **Note**: Typically directives are registered with `module.directive`. The example below is
+ * to illustrate how `$compile` works.
+ * </div>
+ *
+ <example module="compileExample">
+   <file name="index.html">
+    <script>
+      angular.module('compileExample', [], function($compileProvider) {
+        // configure new 'compile' directive by passing a directive
+        // factory function. The factory function injects the '$compile'
+        $compileProvider.directive('compile', function($compile) {
+          // directive factory creates a link function
+          return function(scope, element, attrs) {
+            scope.$watch(
+              function(scope) {
+                 // watch the 'compile' expression for changes
+                return scope.$eval(attrs.compile);
+              },
+              function(value) {
+                // when the 'compile' expression changes
+                // assign it into the current DOM
+                element.html(value);
+
+                // compile the new DOM and link it to the current
+                // scope.
+                // NOTE: we only compile .childNodes so that
+                // we don't get into infinite loop compiling ourselves
+                $compile(element.contents())(scope);
+              }
+            );
+          };
+        });
+      })
+      .controller('GreeterController', ['$scope', function($scope) {
+        $scope.name = 'Angular';
+        $scope.html = 'Hello {{name}}';
+      }]);
+    </script>
+    <div ng-controller="GreeterController">
+      <input ng-model="name"> <br/>
+      <textarea ng-model="html"></textarea> <br/>
+      <div compile="html"></div>
+    </div>
+   </file>
+   <file name="protractor.js" type="protractor">
+     it('should auto compile', function() {
+       var textarea = $('textarea');
+       var output = $('div[compile]');
+       // The initial state reads 'Hello Angular'.
+       expect(output.getText()).toBe('Hello Angular');
+       textarea.clear();
+       textarea.sendKeys('{{name}}!');
+       expect(output.getText()).toBe('Angular!');
+     });
+   </file>
+ </example>
+
+ *
+ *
+ * @param {string|DOMElement} element Element or HTML string to compile into a template function.
+ * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives - DEPRECATED.
+ *
+ * <div class="alert alert-danger">
+ * **Note:** Passing a `transclude` function to the $compile function is deprecated, as it
+ *   e.g. will not use the right outer scope. Please pass the transclude function as a
+ *   `parentBoundTranscludeFn` to the link function instead.
+ * </div>
+ *
+ * @param {number} maxPriority only apply directives lower than given priority (Only effects the
+ *                 root element(s), not their children)
+ * @returns {function(scope, cloneAttachFn=, options=)} a link function which is used to bind template
+ * (a DOM element/tree) to a scope. Where:
+ *
+ *  * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to.
+ *  * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the
+ *  `template` and call the `cloneAttachFn` function allowing the caller to attach the
+ *  cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is
+ *  called as: <br/> `cloneAttachFn(clonedElement, scope)` where:
+ *
+ *      * `clonedElement` - is a clone of the original `element` passed into the compiler.
+ *      * `scope` - is the current scope with which the linking function is working with.
+ *
+ *  * `options` - An optional object hash with linking options. If `options` is provided, then the following
+ *  keys may be used to control linking behavior:
+ *
+ *      * `parentBoundTranscludeFn` - the transclude function made available to
+ *        directives; if given, it will be passed through to the link functions of
+ *        directives found in `element` during compilation.
+ *      * `transcludeControllers` - an object hash with keys that map controller names
+ *        to controller instances; if given, it will make the controllers
+ *        available to directives.
+ *      * `futureParentElement` - defines the parent to which the `cloneAttachFn` will add
+ *        the cloned elements; only needed for transcludes that are allowed to contain non html
+ *        elements (e.g. SVG elements). See also the directive.controller property.
+ *
+ * Calling the linking function returns the element of the template. It is either the original
+ * element passed in, or the clone of the element if the `cloneAttachFn` is provided.
+ *
+ * After linking the view is not updated until after a call to $digest which typically is done by
+ * Angular automatically.
+ *
+ * If you need access to the bound view, there are two ways to do it:
+ *
+ * - If you are not asking the linking function to clone the template, create the DOM element(s)
+ *   before you send them to the compiler and keep this reference around.
+ *   ```js
+ *     var element = $compile('<p>{{total}}</p>')(scope);
+ *   ```
+ *
+ * - if on the other hand, you need the element to be cloned, the view reference from the original
+ *   example would not point to the clone, but rather to the original template that was cloned. In
+ *   this case, you can access the clone via the cloneAttachFn:
+ *   ```js
+ *     var templateElement = angular.element('<p>{{total}}</p>'),
+ *         scope = ....;
+ *
+ *     var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) {
+ *       //attach the clone to DOM document at the right place
+ *     });
+ *
+ *     //now we have reference to the cloned DOM via `clonedElement`
+ *   ```
+ *
+ *
+ * For information on how the compiler works, see the
+ * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide.
+ */
+
+var $compileMinErr = minErr('$compile');
+
+/**
+ * @ngdoc provider
+ * @name $compileProvider
+ *
+ * @description
+ */
+$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider'];
+function $CompileProvider($provide, $$sanitizeUriProvider) {
+  var hasDirectives = {},
+      Suffix = 'Directive',
+      COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\w\-]+)\s+(.*)$/,
+      CLASS_DIRECTIVE_REGEXP = /(([\w\-]+)(?:\:([^;]+))?;?)/,
+      ALL_OR_NOTHING_ATTRS = makeMap('ngSrc,ngSrcset,src,srcset'),
+      REQUIRE_PREFIX_REGEXP = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/;
+
+  // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes
+  // The assumption is that future DOM event attribute names will begin with
+  // 'on' and be composed of only English letters.
+  var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/;
+
+  function parseIsolateBindings(scope, directiveName, isController) {
+    var LOCAL_REGEXP = /^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/;
+
+    var bindings = {};
+
+    forEach(scope, function(definition, scopeName) {
+      var match = definition.match(LOCAL_REGEXP);
+
+      if (!match) {
+        throw $compileMinErr('iscp',
+            "Invalid {3} for directive '{0}'." +
+            " Definition: {... {1}: '{2}' ...}",
+            directiveName, scopeName, definition,
+            (isController ? "controller bindings definition" :
+            "isolate scope definition"));
+      }
+
+      bindings[scopeName] = {
+        mode: match[1][0],
+        collection: match[2] === '*',
+        optional: match[3] === '?',
+        attrName: match[4] || scopeName
+      };
+    });
+
+    return bindings;
+  }
+
+  function parseDirectiveBindings(directive, directiveName) {
+    var bindings = {
+      isolateScope: null,
+      bindToController: null
+    };
+    if (isObject(directive.scope)) {
+      if (directive.bindToController === true) {
+        bindings.bindToController = parseIsolateBindings(directive.scope,
+                                                         directiveName, true);
+        bindings.isolateScope = {};
+      } else {
+        bindings.isolateScope = parseIsolateBindings(directive.scope,
+                                                     directiveName, false);
+      }
+    }
+    if (isObject(directive.bindToController)) {
+      bindings.bindToController =
+          parseIsolateBindings(directive.bindToController, directiveName, true);
+    }
+    if (isObject(bindings.bindToController)) {
+      var controller = directive.controller;
+      var controllerAs = directive.controllerAs;
+      if (!controller) {
+        // There is no controller, there may or may not be a controllerAs property
+        throw $compileMinErr('noctrl',
+              "Cannot bind to controller without directive '{0}'s controller.",
+              directiveName);
+      } else if (!identifierForController(controller, controllerAs)) {
+        // There is a controller, but no identifier or controllerAs property
+        throw $compileMinErr('noident',
+              "Cannot bind to controller without identifier for directive '{0}'.",
+              directiveName);
+      }
+    }
+    return bindings;
+  }
+
+  function assertValidDirectiveName(name) {
+    var letter = name.charAt(0);
+    if (!letter || letter !== lowercase(letter)) {
+      throw $compileMinErr('baddir', "Directive name '{0}' is invalid. The first character must be a lowercase letter", name);
+    }
+    if (name !== name.trim()) {
+      throw $compileMinErr('baddir',
+            "Directive name '{0}' is invalid. The name should not contain leading or trailing whitespaces",
+            name);
+    }
+  }
+
+  /**
+   * @ngdoc method
+   * @name $compileProvider#directive
+   * @kind function
+   *
+   * @description
+   * Register a new directive with the compiler.
+   *
+   * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which
+   *    will match as <code>ng-bind</code>), or an object map of directives where the keys are the
+   *    names and the values are the factories.
+   * @param {Function|Array} directiveFactory An injectable directive factory function. See
+   *    {@link guide/directive} for more info.
+   * @returns {ng.$compileProvider} Self for chaining.
+   */
+   this.directive = function registerDirective(name, directiveFactory) {
+    assertNotHasOwnProperty(name, 'directive');
+    if (isString(name)) {
+      assertValidDirectiveName(name);
+      assertArg(directiveFactory, 'directiveFactory');
+      if (!hasDirectives.hasOwnProperty(name)) {
+        hasDirectives[name] = [];
+        $provide.factory(name + Suffix, ['$injector', '$exceptionHandler',
+          function($injector, $exceptionHandler) {
+            var directives = [];
+            forEach(hasDirectives[name], function(directiveFactory, index) {
+              try {
+                var directive = $injector.invoke(directiveFactory);
+                if (isFunction(directive)) {
+                  directive = { compile: valueFn(directive) };
+                } else if (!directive.compile && directive.link) {
+                  directive.compile = valueFn(directive.link);
+                }
+                directive.priority = directive.priority || 0;
+                directive.index = index;
+                directive.name = directive.name || name;
+                directive.require = directive.require || (directive.controller && directive.name);
+                directive.restrict = directive.restrict || 'EA';
+                var bindings = directive.$$bindings =
+                    parseDirectiveBindings(directive, directive.name);
+                if (isObject(bindings.isolateScope)) {
+                  directive.$$isolateBindings = bindings.isolateScope;
+                }
+                directive.$$moduleName = directiveFactory.$$moduleName;
+                directives.push(directive);
+              } catch (e) {
+                $exceptionHandler(e);
+              }
+            });
+            return directives;
+          }]);
+      }
+      hasDirectives[name].push(directiveFactory);
+    } else {
+      forEach(name, reverseParams(registerDirective));
+    }
+    return this;
+  };
+
+
+  /**
+   * @ngdoc method
+   * @name $compileProvider#aHrefSanitizationWhitelist
+   * @kind function
+   *
+   * @description
+   * Retrieves or overrides the default regular expression that is used for whitelisting of safe
+   * urls during a[href] sanitization.
+   *
+   * The sanitization is a security measure aimed at preventing XSS attacks via html links.
+   *
+   * Any url about to be assigned to a[href] via data-binding is first normalized and turned into
+   * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`
+   * regular expression. If a match is found, the original url is written into the dom. Otherwise,
+   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
+   *
+   * @param {RegExp=} regexp New regexp to whitelist urls with.
+   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
+   *    chaining otherwise.
+   */
+  this.aHrefSanitizationWhitelist = function(regexp) {
+    if (isDefined(regexp)) {
+      $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp);
+      return this;
+    } else {
+      return $$sanitizeUriProvider.aHrefSanitizationWhitelist();
+    }
+  };
+
+
+  /**
+   * @ngdoc method
+   * @name $compileProvider#imgSrcSanitizationWhitelist
+   * @kind function
+   *
+   * @description
+   * Retrieves or overrides the default regular expression that is used for whitelisting of safe
+   * urls during img[src] sanitization.
+   *
+   * The sanitization is a security measure aimed at prevent XSS attacks via html links.
+   *
+   * Any url about to be assigned to img[src] via data-binding is first normalized and turned into
+   * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`
+   * regular expression. If a match is found, the original url is written into the dom. Otherwise,
+   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
+   *
+   * @param {RegExp=} regexp New regexp to whitelist urls with.
+   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
+   *    chaining otherwise.
+   */
+  this.imgSrcSanitizationWhitelist = function(regexp) {
+    if (isDefined(regexp)) {
+      $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp);
+      return this;
+    } else {
+      return $$sanitizeUriProvider.imgSrcSanitizationWhitelist();
+    }
+  };
+
+  /**
+   * @ngdoc method
+   * @name  $compileProvider#debugInfoEnabled
+   *
+   * @param {boolean=} enabled update the debugInfoEnabled state if provided, otherwise just return the
+   * current debugInfoEnabled state
+   * @returns {*} current value if used as getter or itself (chaining) if used as setter
+   *
+   * @kind function
+   *
+   * @description
+   * Call this method to enable/disable various debug runtime information in the compiler such as adding
+   * binding information and a reference to the current scope on to DOM elements.
+   * If enabled, the compiler will add the following to DOM elements that have been bound to the scope
+   * * `ng-binding` CSS class
+   * * `$binding` data property containing an array of the binding expressions
+   *
+   * You may want to disable this in production for a significant performance boost. See
+   * {@link guide/production#disabling-debug-data Disabling Debug Data} for more.
+   *
+   * The default value is true.
+   */
+  var debugInfoEnabled = true;
+  this.debugInfoEnabled = function(enabled) {
+    if (isDefined(enabled)) {
+      debugInfoEnabled = enabled;
+      return this;
+    }
+    return debugInfoEnabled;
+  };
+
+  this.$get = [
+            '$injector', '$interpolate', '$exceptionHandler', '$templateRequest', '$parse',
+            '$controller', '$rootScope', '$document', '$sce', '$animate', '$$sanitizeUri',
+    function($injector,   $interpolate,   $exceptionHandler,   $templateRequest,   $parse,
+             $controller,   $rootScope,   $document,   $sce,   $animate,   $$sanitizeUri) {
+
+    var Attributes = function(element, attributesToCopy) {
+      if (attributesToCopy) {
+        var keys = Object.keys(attributesToCopy);
+        var i, l, key;
+
+        for (i = 0, l = keys.length; i < l; i++) {
+          key = keys[i];
+          this[key] = attributesToCopy[key];
+        }
+      } else {
+        this.$attr = {};
+      }
+
+      this.$$element = element;
+    };
+
+    Attributes.prototype = {
+      /**
+       * @ngdoc method
+       * @name $compile.directive.Attributes#$normalize
+       * @kind function
+       *
+       * @description
+       * Converts an attribute name (e.g. dash/colon/underscore-delimited string, optionally prefixed with `x-` or
+       * `data-`) to its normalized, camelCase form.
+       *
+       * Also there is special case for Moz prefix starting with upper case letter.
+       *
+       * For further information check out the guide on {@link guide/directive#matching-directives Matching Directives}
+       *
+       * @param {string} name Name to normalize
+       */
+      $normalize: directiveNormalize,
+
+
+      /**
+       * @ngdoc method
+       * @name $compile.directive.Attributes#$addClass
+       * @kind function
+       *
+       * @description
+       * Adds the CSS class value specified by the classVal parameter to the element. If animations
+       * are enabled then an animation will be triggered for the class addition.
+       *
+       * @param {string} classVal The className value that will be added to the element
+       */
+      $addClass: function(classVal) {
+        if (classVal && classVal.length > 0) {
+          $animate.addClass(this.$$element, classVal);
+        }
+      },
+
+      /**
+       * @ngdoc method
+       * @name $compile.directive.Attributes#$removeClass
+       * @kind function
+       *
+       * @description
+       * Removes the CSS class value specified by the classVal parameter from the element. If
+       * animations are enabled then an animation will be triggered for the class removal.
+       *
+       * @param {string} classVal The className value that will be removed from the element
+       */
+      $removeClass: function(classVal) {
+        if (classVal && classVal.length > 0) {
+          $animate.removeClass(this.$$element, classVal);
+        }
+      },
+
+      /**
+       * @ngdoc method
+       * @name $compile.directive.Attributes#$updateClass
+       * @kind function
+       *
+       * @description
+       * Adds and removes the appropriate CSS class values to the element based on the difference
+       * between the new and old CSS class values (specified as newClasses and oldClasses).
+       *
+       * @param {string} newClasses The current CSS className value
+       * @param {string} oldClasses The former CSS className value
+       */
+      $updateClass: function(newClasses, oldClasses) {
+        var toAdd = tokenDifference(newClasses, oldClasses);
+        if (toAdd && toAdd.length) {
+          $animate.addClass(this.$$element, toAdd);
+        }
+
+        var toRemove = tokenDifference(oldClasses, newClasses);
+        if (toRemove && toRemove.length) {
+          $animate.removeClass(this.$$element, toRemove);
+        }
+      },
+
+      /**
+       * Set a normalized attribute on the element in a way such that all directives
+       * can share the attribute. This function properly handles boolean attributes.
+       * @param {string} key Normalized key. (ie ngAttribute)
+       * @param {string|boolean} value The value to set. If `null` attribute will be deleted.
+       * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute.
+       *     Defaults to true.
+       * @param {string=} attrName Optional none normalized name. Defaults to key.
+       */
+      $set: function(key, value, writeAttr, attrName) {
+        // TODO: decide whether or not to throw an error if "class"
+        //is set through this function since it may cause $updateClass to
+        //become unstable.
+
+        var node = this.$$element[0],
+            booleanKey = getBooleanAttrName(node, key),
+            aliasedKey = getAliasedAttrName(key),
+            observer = key,
+            nodeName;
+
+        if (booleanKey) {
+          this.$$element.prop(key, value);
+          attrName = booleanKey;
+        } else if (aliasedKey) {
+          this[aliasedKey] = value;
+          observer = aliasedKey;
+        }
+
+        this[key] = value;
+
+        // translate normalized key to actual key
+        if (attrName) {
+          this.$attr[key] = attrName;
+        } else {
+          attrName = this.$attr[key];
+          if (!attrName) {
+            this.$attr[key] = attrName = snake_case(key, '-');
+          }
+        }
+
+        nodeName = nodeName_(this.$$element);
+
+        if ((nodeName === 'a' && key === 'href') ||
+            (nodeName === 'img' && key === 'src')) {
+          // sanitize a[href] and img[src] values
+          this[key] = value = $$sanitizeUri(value, key === 'src');
+        } else if (nodeName === 'img' && key === 'srcset') {
+          // sanitize img[srcset] values
+          var result = "";
+
+          // first check if there are spaces because it's not the same pattern
+          var trimmedSrcset = trim(value);
+          //                (   999x   ,|   999w   ,|   ,|,   )
+          var srcPattern = /(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/;
+          var pattern = /\s/.test(trimmedSrcset) ? srcPattern : /(,)/;
+
+          // split srcset into tuple of uri and descriptor except for the last item
+          var rawUris = trimmedSrcset.split(pattern);
+
+          // for each tuples
+          var nbrUrisWith2parts = Math.floor(rawUris.length / 2);
+          for (var i = 0; i < nbrUrisWith2parts; i++) {
+            var innerIdx = i * 2;
+            // sanitize the uri
+            result += $$sanitizeUri(trim(rawUris[innerIdx]), true);
+            // add the descriptor
+            result += (" " + trim(rawUris[innerIdx + 1]));
+          }
+
+          // split the last item into uri and descriptor
+          var lastTuple = trim(rawUris[i * 2]).split(/\s/);
+
+          // sanitize the last uri
+          result += $$sanitizeUri(trim(lastTuple[0]), true);
+
+          // and add the last descriptor if any
+          if (lastTuple.length === 2) {
+            result += (" " + trim(lastTuple[1]));
+          }
+          this[key] = value = result;
+        }
+
+        if (writeAttr !== false) {
+          if (value === null || isUndefined(value)) {
+            this.$$element.removeAttr(attrName);
+          } else {
+            this.$$element.attr(attrName, value);
+          }
+        }
+
+        // fire observers
+        var $$observers = this.$$observers;
+        $$observers && forEach($$observers[observer], function(fn) {
+          try {
+            fn(value);
+          } catch (e) {
+            $exceptionHandler(e);
+          }
+        });
+      },
+
+
+      /**
+       * @ngdoc method
+       * @name $compile.directive.Attributes#$observe
+       * @kind function
+       *
+       * @description
+       * Observes an interpolated attribute.
+       *
+       * The observer function will be invoked once during the next `$digest` following
+       * compilation. The observer is then invoked whenever the interpolated value
+       * changes.
+       *
+       * @param {string} key Normalized key. (ie ngAttribute) .
+       * @param {function(interpolatedValue)} fn Function that will be called whenever
+                the interpolated value of the attribute changes.
+       *        See the {@link guide/directive#text-and-attribute-bindings Directives} guide for more info.
+       * @returns {function()} Returns a deregistration function for this observer.
+       */
+      $observe: function(key, fn) {
+        var attrs = this,
+            $$observers = (attrs.$$observers || (attrs.$$observers = createMap())),
+            listeners = ($$observers[key] || ($$observers[key] = []));
+
+        listeners.push(fn);
+        $rootScope.$evalAsync(function() {
+          if (!listeners.$$inter && attrs.hasOwnProperty(key) && !isUndefined(attrs[key])) {
+            // no one registered attribute interpolation function, so lets call it manually
+            fn(attrs[key]);
+          }
+        });
+
+        return function() {
+          arrayRemove(listeners, fn);
+        };
+      }
+    };
+
+
+    function safeAddClass($element, className) {
+      try {
+        $element.addClass(className);
+      } catch (e) {
+        // ignore, since it means that we are trying to set class on
+        // SVG element, where class name is read-only.
+      }
+    }
+
+
+    var startSymbol = $interpolate.startSymbol(),
+        endSymbol = $interpolate.endSymbol(),
+        denormalizeTemplate = (startSymbol == '{{' || endSymbol  == '}}')
+            ? identity
+            : function denormalizeTemplate(template) {
+              return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol);
+        },
+        NG_ATTR_BINDING = /^ngAttr[A-Z]/;
+    var MULTI_ELEMENT_DIR_RE = /^(.+)Start$/;
+
+    compile.$$addBindingInfo = debugInfoEnabled ? function $$addBindingInfo($element, binding) {
+      var bindings = $element.data('$binding') || [];
+
+      if (isArray(binding)) {
+        bindings = bindings.concat(binding);
+      } else {
+        bindings.push(binding);
+      }
+
+      $element.data('$binding', bindings);
+    } : noop;
+
+    compile.$$addBindingClass = debugInfoEnabled ? function $$addBindingClass($element) {
+      safeAddClass($element, 'ng-binding');
+    } : noop;
+
+    compile.$$addScopeInfo = debugInfoEnabled ? function $$addScopeInfo($element, scope, isolated, noTemplate) {
+      var dataName = isolated ? (noTemplate ? '$isolateScopeNoTemplate' : '$isolateScope') : '$scope';
+      $element.data(dataName, scope);
+    } : noop;
+
+    compile.$$addScopeClass = debugInfoEnabled ? function $$addScopeClass($element, isolated) {
+      safeAddClass($element, isolated ? 'ng-isolate-scope' : 'ng-scope');
+    } : noop;
+
+    return compile;
+
+    //================================
+
+    function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective,
+                        previousCompileContext) {
+      if (!($compileNodes instanceof jqLite)) {
+        // jquery always rewraps, whereas we need to preserve the original selector so that we can
+        // modify it.
+        $compileNodes = jqLite($compileNodes);
+      }
+      // We can not compile top level text elements since text nodes can be merged and we will
+      // not be able to attach scope data to them, so we will wrap them in <span>
+      forEach($compileNodes, function(node, index) {
+        if (node.nodeType == NODE_TYPE_TEXT && node.nodeValue.match(/\S+/) /* non-empty */ ) {
+          $compileNodes[index] = jqLite(node).wrap('<span></span>').parent()[0];
+        }
+      });
+      var compositeLinkFn =
+              compileNodes($compileNodes, transcludeFn, $compileNodes,
+                           maxPriority, ignoreDirective, previousCompileContext);
+      compile.$$addScopeClass($compileNodes);
+      var namespace = null;
+      return function publicLinkFn(scope, cloneConnectFn, options) {
+        assertArg(scope, 'scope');
+
+        if (previousCompileContext && previousCompileContext.needsNewScope) {
+          // A parent directive did a replace and a directive on this element asked
+          // for transclusion, which caused us to lose a layer of element on which
+          // we could hold the new transclusion scope, so we will create it manually
+          // here.
+          scope = scope.$parent.$new();
+        }
+
+        options = options || {};
+        var parentBoundTranscludeFn = options.parentBoundTranscludeFn,
+          transcludeControllers = options.transcludeControllers,
+          futureParentElement = options.futureParentElement;
+
+        // When `parentBoundTranscludeFn` is passed, it is a
+        // `controllersBoundTransclude` function (it was previously passed
+        // as `transclude` to directive.link) so we must unwrap it to get
+        // its `boundTranscludeFn`
+        if (parentBoundTranscludeFn && parentBoundTranscludeFn.$$boundTransclude) {
+          parentBoundTranscludeFn = parentBoundTranscludeFn.$$boundTransclude;
+        }
+
+        if (!namespace) {
+          namespace = detectNamespaceForChildElements(futureParentElement);
+        }
+        var $linkNode;
+        if (namespace !== 'html') {
+          // When using a directive with replace:true and templateUrl the $compileNodes
+          // (or a child element inside of them)
+          // might change, so we need to recreate the namespace adapted compileNodes
+          // for call to the link function.
+          // Note: This will already clone the nodes...
+          $linkNode = jqLite(
+            wrapTemplate(namespace, jqLite('<div>').append($compileNodes).html())
+          );
+        } else if (cloneConnectFn) {
+          // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart
+          // and sometimes changes the structure of the DOM.
+          $linkNode = JQLitePrototype.clone.call($compileNodes);
+        } else {
+          $linkNode = $compileNodes;
+        }
+
+        if (transcludeControllers) {
+          for (var controllerName in transcludeControllers) {
+            $linkNode.data('$' + controllerName + 'Controller', transcludeControllers[controllerName].instance);
+          }
+        }
+
+        compile.$$addScopeInfo($linkNode, scope);
+
+        if (cloneConnectFn) cloneConnectFn($linkNode, scope);
+        if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode, parentBoundTranscludeFn);
+        return $linkNode;
+      };
+    }
+
+    function detectNamespaceForChildElements(parentElement) {
+      // TODO: Make this detect MathML as well...
+      var node = parentElement && parentElement[0];
+      if (!node) {
+        return 'html';
+      } else {
+        return nodeName_(node) !== 'foreignobject' && node.toString().match(/SVG/) ? 'svg' : 'html';
+      }
+    }
+
+    /**
+     * Compile function matches each node in nodeList against the directives. Once all directives
+     * for a particular node are collected their compile functions are executed. The compile
+     * functions return values - the linking functions - are combined into a composite linking
+     * function, which is the a linking function for the node.
+     *
+     * @param {NodeList} nodeList an array of nodes or NodeList to compile
+     * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the
+     *        scope argument is auto-generated to the new child of the transcluded parent scope.
+     * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then
+     *        the rootElement must be set the jqLite collection of the compile root. This is
+     *        needed so that the jqLite collection items can be replaced with widgets.
+     * @param {number=} maxPriority Max directive priority.
+     * @returns {Function} A composite linking function of all of the matched directives or null.
+     */
+    function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective,
+                            previousCompileContext) {
+      var linkFns = [],
+          attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound, nodeLinkFnFound;
+
+      for (var i = 0; i < nodeList.length; i++) {
+        attrs = new Attributes();
+
+        // we must always refer to nodeList[i] since the nodes can be replaced underneath us.
+        directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined,
+                                        ignoreDirective);
+
+        nodeLinkFn = (directives.length)
+            ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement,
+                                      null, [], [], previousCompileContext)
+            : null;
+
+        if (nodeLinkFn && nodeLinkFn.scope) {
+          compile.$$addScopeClass(attrs.$$element);
+        }
+
+        childLinkFn = (nodeLinkFn && nodeLinkFn.terminal ||
+                      !(childNodes = nodeList[i].childNodes) ||
+                      !childNodes.length)
+            ? null
+            : compileNodes(childNodes,
+                 nodeLinkFn ? (
+                  (nodeLinkFn.transcludeOnThisElement || !nodeLinkFn.templateOnThisElement)
+                     && nodeLinkFn.transclude) : transcludeFn);
+
+        if (nodeLinkFn || childLinkFn) {
+          linkFns.push(i, nodeLinkFn, childLinkFn);
+          linkFnFound = true;
+          nodeLinkFnFound = nodeLinkFnFound || nodeLinkFn;
+        }
+
+        //use the previous context only for the first element in the virtual group
+        previousCompileContext = null;
+      }
+
+      // return a linking function if we have found anything, null otherwise
+      return linkFnFound ? compositeLinkFn : null;
+
+      function compositeLinkFn(scope, nodeList, $rootElement, parentBoundTranscludeFn) {
+        var nodeLinkFn, childLinkFn, node, childScope, i, ii, idx, childBoundTranscludeFn;
+        var stableNodeList;
+
+
+        if (nodeLinkFnFound) {
+          // copy nodeList so that if a nodeLinkFn removes or adds an element at this DOM level our
+          // offsets don't get screwed up
+          var nodeListLength = nodeList.length;
+          stableNodeList = new Array(nodeListLength);
+
+          // create a sparse array by only copying the elements which have a linkFn
+          for (i = 0; i < linkFns.length; i+=3) {
+            idx = linkFns[i];
+            stableNodeList[idx] = nodeList[idx];
+          }
+        } else {
+          stableNodeList = nodeList;
+        }
+
+        for (i = 0, ii = linkFns.length; i < ii;) {
+          node = stableNodeList[linkFns[i++]];
+          nodeLinkFn = linkFns[i++];
+          childLinkFn = linkFns[i++];
+
+          if (nodeLinkFn) {
+            if (nodeLinkFn.scope) {
+              childScope = scope.$new();
+              compile.$$addScopeInfo(jqLite(node), childScope);
+            } else {
+              childScope = scope;
+            }
+
+            if (nodeLinkFn.transcludeOnThisElement) {
+              childBoundTranscludeFn = createBoundTranscludeFn(
+                  scope, nodeLinkFn.transclude, parentBoundTranscludeFn);
+
+            } else if (!nodeLinkFn.templateOnThisElement && parentBoundTranscludeFn) {
+              childBoundTranscludeFn = parentBoundTranscludeFn;
+
+            } else if (!parentBoundTranscludeFn && transcludeFn) {
+              childBoundTranscludeFn = createBoundTranscludeFn(scope, transcludeFn);
+
+            } else {
+              childBoundTranscludeFn = null;
+            }
+
+            nodeLinkFn(childLinkFn, childScope, node, $rootElement, childBoundTranscludeFn);
+
+          } else if (childLinkFn) {
+            childLinkFn(scope, node.childNodes, undefined, parentBoundTranscludeFn);
+          }
+        }
+      }
+    }
+
+    function createBoundTranscludeFn(scope, transcludeFn, previousBoundTranscludeFn) {
+
+      var boundTranscludeFn = function(transcludedScope, cloneFn, controllers, futureParentElement, containingScope) {
+
+        if (!transcludedScope) {
+          transcludedScope = scope.$new(false, containingScope);
+          transcludedScope.$$transcluded = true;
+        }
+
+        return transcludeFn(transcludedScope, cloneFn, {
+          parentBoundTranscludeFn: previousBoundTranscludeFn,
+          transcludeControllers: controllers,
+          futureParentElement: futureParentElement
+        });
+      };
+
+      return boundTranscludeFn;
+    }
+
+    /**
+     * Looks for directives on the given node and adds them to the directive collection which is
+     * sorted.
+     *
+     * @param node Node to search.
+     * @param directives An array to which the directives are added to. This array is sorted before
+     *        the function returns.
+     * @param attrs The shared attrs object which is used to populate the normalized attributes.
+     * @param {number=} maxPriority Max directive priority.
+     */
+    function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) {
+      var nodeType = node.nodeType,
+          attrsMap = attrs.$attr,
+          match,
+          className;
+
+      switch (nodeType) {
+        case NODE_TYPE_ELEMENT: /* Element */
+          // use the node name: <directive>
+          addDirective(directives,
+              directiveNormalize(nodeName_(node)), 'E', maxPriority, ignoreDirective);
+
+          // iterate over the attributes
+          for (var attr, name, nName, ngAttrName, value, isNgAttr, nAttrs = node.attributes,
+                   j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {
+            var attrStartName = false;
+            var attrEndName = false;
+
+            attr = nAttrs[j];
+            name = attr.name;
+            value = trim(attr.value);
+
+            // support ngAttr attribute binding
+            ngAttrName = directiveNormalize(name);
+            if (isNgAttr = NG_ATTR_BINDING.test(ngAttrName)) {
+              name = name.replace(PREFIX_REGEXP, '')
+                .substr(8).replace(/_(.)/g, function(match, letter) {
+                  return letter.toUpperCase();
+                });
+            }
+
+            var multiElementMatch = ngAttrName.match(MULTI_ELEMENT_DIR_RE);
+            if (multiElementMatch && directiveIsMultiElement(multiElementMatch[1])) {
+              attrStartName = name;
+              attrEndName = name.substr(0, name.length - 5) + 'end';
+              name = name.substr(0, name.length - 6);
+            }
+
+            nName = directiveNormalize(name.toLowerCase());
+            attrsMap[nName] = name;
+            if (isNgAttr || !attrs.hasOwnProperty(nName)) {
+                attrs[nName] = value;
+                if (getBooleanAttrName(node, nName)) {
+                  attrs[nName] = true; // presence means true
+                }
+            }
+            addAttrInterpolateDirective(node, directives, value, nName, isNgAttr);
+            addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName,
+                          attrEndName);
+          }
+
+          // use class as directive
+          className = node.className;
+          if (isObject(className)) {
+              // Maybe SVGAnimatedString
+              className = className.animVal;
+          }
+          if (isString(className) && className !== '') {
+            while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) {
+              nName = directiveNormalize(match[2]);
+              if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) {
+                attrs[nName] = trim(match[3]);
+              }
+              className = className.substr(match.index + match[0].length);
+            }
+          }
+          break;
+        case NODE_TYPE_TEXT: /* Text Node */
+          if (msie === 11) {
+            // Workaround for #11781
+            while (node.parentNode && node.nextSibling && node.nextSibling.nodeType === NODE_TYPE_TEXT) {
+              node.nodeValue = node.nodeValue + node.nextSibling.nodeValue;
+              node.parentNode.removeChild(node.nextSibling);
+            }
+          }
+          addTextInterpolateDirective(directives, node.nodeValue);
+          break;
+        case NODE_TYPE_COMMENT: /* Comment */
+          try {
+            match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue);
+            if (match) {
+              nName = directiveNormalize(match[1]);
+              if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) {
+                attrs[nName] = trim(match[2]);
+              }
+            }
+          } catch (e) {
+            // turns out that under some circumstances IE9 throws errors when one attempts to read
+            // comment's node value.
+            // Just ignore it and continue. (Can't seem to reproduce in test case.)
+          }
+          break;
+      }
+
+      directives.sort(byPriority);
+      return directives;
+    }
+
+    /**
+     * Given a node with an directive-start it collects all of the siblings until it finds
+     * directive-end.
+     * @param node
+     * @param attrStart
+     * @param attrEnd
+     * @returns {*}
+     */
+    function groupScan(node, attrStart, attrEnd) {
+      var nodes = [];
+      var depth = 0;
+      if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) {
+        do {
+          if (!node) {
+            throw $compileMinErr('uterdir',
+                      "Unterminated attribute, found '{0}' but no matching '{1}' found.",
+                      attrStart, attrEnd);
+          }
+          if (node.nodeType == NODE_TYPE_ELEMENT) {
+            if (node.hasAttribute(attrStart)) depth++;
+            if (node.hasAttribute(attrEnd)) depth--;
+          }
+          nodes.push(node);
+          node = node.nextSibling;
+        } while (depth > 0);
+      } else {
+        nodes.push(node);
+      }
+
+      return jqLite(nodes);
+    }
+
+    /**
+     * Wrapper for linking function which converts normal linking function into a grouped
+     * linking function.
+     * @param linkFn
+     * @param attrStart
+     * @param attrEnd
+     * @returns {Function}
+     */
+    function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) {
+      return function(scope, element, attrs, controllers, transcludeFn) {
+        element = groupScan(element[0], attrStart, attrEnd);
+        return linkFn(scope, element, attrs, controllers, transcludeFn);
+      };
+    }
+
+    /**
+     * Once the directives have been collected, their compile functions are executed. This method
+     * is responsible for inlining directive templates as well as terminating the application
+     * of the directives if the terminal directive has been reached.
+     *
+     * @param {Array} directives Array of collected directives to execute their compile function.
+     *        this needs to be pre-sorted by priority order.
+     * @param {Node} compileNode The raw DOM node to apply the compile functions to
+     * @param {Object} templateAttrs The shared attribute function
+     * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the
+     *                                                  scope argument is auto-generated to the new
+     *                                                  child of the transcluded parent scope.
+     * @param {JQLite} jqCollection If we are working on the root of the compile tree then this
+     *                              argument has the root jqLite array so that we can replace nodes
+     *                              on it.
+     * @param {Object=} originalReplaceDirective An optional directive that will be ignored when
+     *                                           compiling the transclusion.
+     * @param {Array.<Function>} preLinkFns
+     * @param {Array.<Function>} postLinkFns
+     * @param {Object} previousCompileContext Context used for previous compilation of the current
+     *                                        node
+     * @returns {Function} linkFn
+     */
+    function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn,
+                                   jqCollection, originalReplaceDirective, preLinkFns, postLinkFns,
+                                   previousCompileContext) {
+      previousCompileContext = previousCompileContext || {};
+
+      var terminalPriority = -Number.MAX_VALUE,
+          newScopeDirective = previousCompileContext.newScopeDirective,
+          controllerDirectives = previousCompileContext.controllerDirectives,
+          newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective,
+          templateDirective = previousCompileContext.templateDirective,
+          nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective,
+          hasTranscludeDirective = false,
+          hasTemplate = false,
+          hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective,
+          $compileNode = templateAttrs.$$element = jqLite(compileNode),
+          directive,
+          directiveName,
+          $template,
+          replaceDirective = originalReplaceDirective,
+          childTranscludeFn = transcludeFn,
+          linkFn,
+          directiveValue;
+
+      // executes all directives on the current element
+      for (var i = 0, ii = directives.length; i < ii; i++) {
+        directive = directives[i];
+        var attrStart = directive.$$start;
+        var attrEnd = directive.$$end;
+
+        // collect multiblock sections
+        if (attrStart) {
+          $compileNode = groupScan(compileNode, attrStart, attrEnd);
+        }
+        $template = undefined;
+
+        if (terminalPriority > directive.priority) {
+          break; // prevent further processing of directives
+        }
+
+        if (directiveValue = directive.scope) {
+
+          // skip the check for directives with async templates, we'll check the derived sync
+          // directive when the template arrives
+          if (!directive.templateUrl) {
+            if (isObject(directiveValue)) {
+              // This directive is trying to add an isolated scope.
+              // Check that there is no scope of any kind already
+              assertNoDuplicate('new/isolated scope', newIsolateScopeDirective || newScopeDirective,
+                                directive, $compileNode);
+              newIsolateScopeDirective = directive;
+            } else {
+              // This directive is trying to add a child scope.
+              // Check that there is no isolated scope already
+              assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive,
+                                $compileNode);
+            }
+          }
+
+          newScopeDirective = newScopeDirective || directive;
+        }
+
+        directiveName = directive.name;
+
+        if (!directive.templateUrl && directive.controller) {
+          directiveValue = directive.controller;
+          controllerDirectives = controllerDirectives || createMap();
+          assertNoDuplicate("'" + directiveName + "' controller",
+              controllerDirectives[directiveName], directive, $compileNode);
+          controllerDirectives[directiveName] = directive;
+        }
+
+        if (directiveValue = directive.transclude) {
+          hasTranscludeDirective = true;
+
+          // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion.
+          // This option should only be used by directives that know how to safely handle element transclusion,
+          // where the transcluded nodes are added or replaced after linking.
+          if (!directive.$$tlb) {
+            assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode);
+            nonTlbTranscludeDirective = directive;
+          }
+
+          if (directiveValue == 'element') {
+            hasElementTranscludeDirective = true;
+            terminalPriority = directive.priority;
+            $template = $compileNode;
+            $compileNode = templateAttrs.$$element =
+                jqLite(document.createComment(' ' + directiveName + ': ' +
+                                              templateAttrs[directiveName] + ' '));
+            compileNode = $compileNode[0];
+            replaceWith(jqCollection, sliceArgs($template), compileNode);
+
+            childTranscludeFn = compile($template, transcludeFn, terminalPriority,
+                                        replaceDirective && replaceDirective.name, {
+                                          // Don't pass in:
+                                          // - controllerDirectives - otherwise we'll create duplicates controllers
+                                          // - newIsolateScopeDirective or templateDirective - combining templates with
+                                          //   element transclusion doesn't make sense.
+                                          //
+                                          // We need only nonTlbTranscludeDirective so that we prevent putting transclusion
+                                          // on the same element more than once.
+                                          nonTlbTranscludeDirective: nonTlbTranscludeDirective
+                                        });
+          } else {
+            $template = jqLite(jqLiteClone(compileNode)).contents();
+            $compileNode.empty(); // clear contents
+            childTranscludeFn = compile($template, transcludeFn, undefined,
+                undefined, { needsNewScope: directive.$$isolateScope || directive.$$newScope});
+          }
+        }
+
+        if (directive.template) {
+          hasTemplate = true;
+          assertNoDuplicate('template', templateDirective, directive, $compileNode);
+          templateDirective = directive;
+
+          directiveValue = (isFunction(directive.template))
+              ? directive.template($compileNode, templateAttrs)
+              : directive.template;
+
+          directiveValue = denormalizeTemplate(directiveValue);
+
+          if (directive.replace) {
+            replaceDirective = directive;
+            if (jqLiteIsTextNode(directiveValue)) {
+              $template = [];
+            } else {
+              $template = removeComments(wrapTemplate(directive.templateNamespace, trim(directiveValue)));
+            }
+            compileNode = $template[0];
+
+            if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {
+              throw $compileMinErr('tplrt',
+                  "Template for directive '{0}' must have exactly one root element. {1}",
+                  directiveName, '');
+            }
+
+            replaceWith(jqCollection, $compileNode, compileNode);
+
+            var newTemplateAttrs = {$attr: {}};
+
+            // combine directives from the original node and from the template:
+            // - take the array of directives for this element
+            // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed)
+            // - collect directives from the template and sort them by priority
+            // - combine directives as: processed + template + unprocessed
+            var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs);
+            var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1));
+
+            if (newIsolateScopeDirective || newScopeDirective) {
+              // The original directive caused the current element to be replaced but this element
+              // also needs to have a new scope, so we need to tell the template directives
+              // that they would need to get their scope from further up, if they require transclusion
+              markDirectiveScope(templateDirectives, newIsolateScopeDirective, newScopeDirective);
+            }
+            directives = directives.concat(templateDirectives).concat(unprocessedDirectives);
+            mergeTemplateAttributes(templateAttrs, newTemplateAttrs);
+
+            ii = directives.length;
+          } else {
+            $compileNode.html(directiveValue);
+          }
+        }
+
+        if (directive.templateUrl) {
+          hasTemplate = true;
+          assertNoDuplicate('template', templateDirective, directive, $compileNode);
+          templateDirective = directive;
+
+          if (directive.replace) {
+            replaceDirective = directive;
+          }
+
+          nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode,
+              templateAttrs, jqCollection, hasTranscludeDirective && childTranscludeFn, preLinkFns, postLinkFns, {
+                controllerDirectives: controllerDirectives,
+                newScopeDirective: (newScopeDirective !== directive) && newScopeDirective,
+                newIsolateScopeDirective: newIsolateScopeDirective,
+                templateDirective: templateDirective,
+                nonTlbTranscludeDirective: nonTlbTranscludeDirective
+              });
+          ii = directives.length;
+        } else if (directive.compile) {
+          try {
+            linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn);
+            if (isFunction(linkFn)) {
+              addLinkFns(null, linkFn, attrStart, attrEnd);
+            } else if (linkFn) {
+              addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd);
+            }
+          } catch (e) {
+            $exceptionHandler(e, startingTag($compileNode));
+          }
+        }
+
+        if (directive.terminal) {
+          nodeLinkFn.terminal = true;
+          terminalPriority = Math.max(terminalPriority, directive.priority);
+        }
+
+      }
+
+      nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true;
+      nodeLinkFn.transcludeOnThisElement = hasTranscludeDirective;
+      nodeLinkFn.templateOnThisElement = hasTemplate;
+      nodeLinkFn.transclude = childTranscludeFn;
+
+      previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective;
+
+      // might be normal or delayed nodeLinkFn depending on if templateUrl is present
+      return nodeLinkFn;
+
+      ////////////////////
+
+      function addLinkFns(pre, post, attrStart, attrEnd) {
+        if (pre) {
+          if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd);
+          pre.require = directive.require;
+          pre.directiveName = directiveName;
+          if (newIsolateScopeDirective === directive || directive.$$isolateScope) {
+            pre = cloneAndAnnotateFn(pre, {isolateScope: true});
+          }
+          preLinkFns.push(pre);
+        }
+        if (post) {
+          if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd);
+          post.require = directive.require;
+          post.directiveName = directiveName;
+          if (newIsolateScopeDirective === directive || directive.$$isolateScope) {
+            post = cloneAndAnnotateFn(post, {isolateScope: true});
+          }
+          postLinkFns.push(post);
+        }
+      }
+
+
+      function getControllers(directiveName, require, $element, elementControllers) {
+        var value;
+
+        if (isString(require)) {
+          var match = require.match(REQUIRE_PREFIX_REGEXP);
+          var name = require.substring(match[0].length);
+          var inheritType = match[1] || match[3];
+          var optional = match[2] === '?';
+
+          //If only parents then start at the parent element
+          if (inheritType === '^^') {
+            $element = $element.parent();
+          //Otherwise attempt getting the controller from elementControllers in case
+          //the element is transcluded (and has no data) and to avoid .data if possible
+          } else {
+            value = elementControllers && elementControllers[name];
+            value = value && value.instance;
+          }
+
+          if (!value) {
+            var dataName = '$' + name + 'Controller';
+            value = inheritType ? $element.inheritedData(dataName) : $element.data(dataName);
+          }
+
+          if (!value && !optional) {
+            throw $compileMinErr('ctreq',
+                "Controller '{0}', required by directive '{1}', can't be found!",
+                name, directiveName);
+          }
+        } else if (isArray(require)) {
+          value = [];
+          for (var i = 0, ii = require.length; i < ii; i++) {
+            value[i] = getControllers(directiveName, require[i], $element, elementControllers);
+          }
+        }
+
+        return value || null;
+      }
+
+      function setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope) {
+        var elementControllers = createMap();
+        for (var controllerKey in controllerDirectives) {
+          var directive = controllerDirectives[controllerKey];
+          var locals = {
+            $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope,
+            $element: $element,
+            $attrs: attrs,
+            $transclude: transcludeFn
+          };
+
+          var controller = directive.controller;
+          if (controller == '@') {
+            controller = attrs[directive.name];
+          }
+
+          var controllerInstance = $controller(controller, locals, true, directive.controllerAs);
+
+          // For directives with element transclusion the element is a comment,
+          // but jQuery .data doesn't support attaching data to comment nodes as it's hard to
+          // clean up (http://bugs.jquery.com/ticket/8335).
+          // Instead, we save the controllers for the element in a local hash and attach to .data
+          // later, once we have the actual element.
+          elementControllers[directive.name] = controllerInstance;
+          if (!hasElementTranscludeDirective) {
+            $element.data('$' + directive.name + 'Controller', controllerInstance.instance);
+          }
+        }
+        return elementControllers;
+      }
+
+      function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) {
+        var linkFn, isolateScope, controllerScope, elementControllers, transcludeFn, $element,
+            attrs, removeScopeBindingWatches, removeControllerBindingWatches;
+
+        if (compileNode === linkNode) {
+          attrs = templateAttrs;
+          $element = templateAttrs.$$element;
+        } else {
+          $element = jqLite(linkNode);
+          attrs = new Attributes($element, templateAttrs);
+        }
+
+        controllerScope = scope;
+        if (newIsolateScopeDirective) {
+          isolateScope = scope.$new(true);
+        } else if (newScopeDirective) {
+          controllerScope = scope.$parent;
+        }
+
+        if (boundTranscludeFn) {
+          // track `boundTranscludeFn` so it can be unwrapped if `transcludeFn`
+          // is later passed as `parentBoundTranscludeFn` to `publicLinkFn`
+          transcludeFn = controllersBoundTransclude;
+          transcludeFn.$$boundTransclude = boundTranscludeFn;
+        }
+
+        if (controllerDirectives) {
+          elementControllers = setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope);
+        }
+
+        if (newIsolateScopeDirective) {
+          // Initialize isolate scope bindings for new isolate scope directive.
+          compile.$$addScopeInfo($element, isolateScope, true, !(templateDirective && (templateDirective === newIsolateScopeDirective ||
+              templateDirective === newIsolateScopeDirective.$$originalDirective)));
+          compile.$$addScopeClass($element, true);
+          isolateScope.$$isolateBindings =
+              newIsolateScopeDirective.$$isolateBindings;
+          removeScopeBindingWatches = initializeDirectiveBindings(scope, attrs, isolateScope,
+                                        isolateScope.$$isolateBindings,
+                                        newIsolateScopeDirective);
+          if (removeScopeBindingWatches) {
+            isolateScope.$on('$destroy', removeScopeBindingWatches);
+          }
+        }
+
+        // Initialize bindToController bindings
+        for (var name in elementControllers) {
+          var controllerDirective = controllerDirectives[name];
+          var controller = elementControllers[name];
+          var bindings = controllerDirective.$$bindings.bindToController;
+
+          if (controller.identifier && bindings) {
+            removeControllerBindingWatches =
+              initializeDirectiveBindings(controllerScope, attrs, controller.instance, bindings, controllerDirective);
+          }
+
+          var controllerResult = controller();
+          if (controllerResult !== controller.instance) {
+            // If the controller constructor has a return value, overwrite the instance
+            // from setupControllers
+            controller.instance = controllerResult;
+            $element.data('$' + controllerDirective.name + 'Controller', controllerResult);
+            removeControllerBindingWatches && removeControllerBindingWatches();
+            removeControllerBindingWatches =
+              initializeDirectiveBindings(controllerScope, attrs, controller.instance, bindings, controllerDirective);
+          }
+        }
+
+        // PRELINKING
+        for (i = 0, ii = preLinkFns.length; i < ii; i++) {
+          linkFn = preLinkFns[i];
+          invokeLinkFn(linkFn,
+              linkFn.isolateScope ? isolateScope : scope,
+              $element,
+              attrs,
+              linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),
+              transcludeFn
+          );
+        }
+
+        // RECURSION
+        // We only pass the isolate scope, if the isolate directive has a template,
+        // otherwise the child elements do not belong to the isolate directive.
+        var scopeToChild = scope;
+        if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) {
+          scopeToChild = isolateScope;
+        }
+        childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn);
+
+        // POSTLINKING
+        for (i = postLinkFns.length - 1; i >= 0; i--) {
+          linkFn = postLinkFns[i];
+          invokeLinkFn(linkFn,
+              linkFn.isolateScope ? isolateScope : scope,
+              $element,
+              attrs,
+              linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),
+              transcludeFn
+          );
+        }
+
+        // This is the function that is injected as `$transclude`.
+        // Note: all arguments are optional!
+        function controllersBoundTransclude(scope, cloneAttachFn, futureParentElement) {
+          var transcludeControllers;
+
+          // No scope passed in:
+          if (!isScope(scope)) {
+            futureParentElement = cloneAttachFn;
+            cloneAttachFn = scope;
+            scope = undefined;
+          }
+
+          if (hasElementTranscludeDirective) {
+            transcludeControllers = elementControllers;
+          }
+          if (!futureParentElement) {
+            futureParentElement = hasElementTranscludeDirective ? $element.parent() : $element;
+          }
+          return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild);
+        }
+      }
+    }
+
+    // Depending upon the context in which a directive finds itself it might need to have a new isolated
+    // or child scope created. For instance:
+    // * if the directive has been pulled into a template because another directive with a higher priority
+    // asked for element transclusion
+    // * if the directive itself asks for transclusion but it is at the root of a template and the original
+    // element was replaced. See https://github.com/angular/angular.js/issues/12936
+    function markDirectiveScope(directives, isolateScope, newScope) {
+      for (var j = 0, jj = directives.length; j < jj; j++) {
+        directives[j] = inherit(directives[j], {$$isolateScope: isolateScope, $$newScope: newScope});
+      }
+    }
+
+    /**
+     * looks up the directive and decorates it with exception handling and proper parameters. We
+     * call this the boundDirective.
+     *
+     * @param {string} name name of the directive to look up.
+     * @param {string} location The directive must be found in specific format.
+     *   String containing any of theses characters:
+     *
+     *   * `E`: element name
+     *   * `A': attribute
+     *   * `C`: class
+     *   * `M`: comment
+     * @returns {boolean} true if directive was added.
+     */
+    function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName,
+                          endAttrName) {
+      if (name === ignoreDirective) return null;
+      var match = null;
+      if (hasDirectives.hasOwnProperty(name)) {
+        for (var directive, directives = $injector.get(name + Suffix),
+            i = 0, ii = directives.length; i < ii; i++) {
+          try {
+            directive = directives[i];
+            if ((isUndefined(maxPriority) || maxPriority > directive.priority) &&
+                 directive.restrict.indexOf(location) != -1) {
+              if (startAttrName) {
+                directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName});
+              }
+              tDirectives.push(directive);
+              match = directive;
+            }
+          } catch (e) { $exceptionHandler(e); }
+        }
+      }
+      return match;
+    }
+
+
+    /**
+     * looks up the directive and returns true if it is a multi-element directive,
+     * and therefore requires DOM nodes between -start and -end markers to be grouped
+     * together.
+     *
+     * @param {string} name name of the directive to look up.
+     * @returns true if directive was registered as multi-element.
+     */
+    function directiveIsMultiElement(name) {
+      if (hasDirectives.hasOwnProperty(name)) {
+        for (var directive, directives = $injector.get(name + Suffix),
+            i = 0, ii = directives.length; i < ii; i++) {
+          directive = directives[i];
+          if (directive.multiElement) {
+            return true;
+          }
+        }
+      }
+      return false;
+    }
+
+    /**
+     * When the element is replaced with HTML template then the new attributes
+     * on the template need to be merged with the existing attributes in the DOM.
+     * The desired effect is to have both of the attributes present.
+     *
+     * @param {object} dst destination attributes (original DOM)
+     * @param {object} src source attributes (from the directive template)
+     */
+    function mergeTemplateAttributes(dst, src) {
+      var srcAttr = src.$attr,
+          dstAttr = dst.$attr,
+          $element = dst.$$element;
+
+      // reapply the old attributes to the new element
+      forEach(dst, function(value, key) {
+        if (key.charAt(0) != '$') {
+          if (src[key] && src[key] !== value) {
+            value += (key === 'style' ? ';' : ' ') + src[key];
+          }
+          dst.$set(key, value, true, srcAttr[key]);
+        }
+      });
+
+      // copy the new attributes on the old attrs object
+      forEach(src, function(value, key) {
+        if (key == 'class') {
+          safeAddClass($element, value);
+          dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value;
+        } else if (key == 'style') {
+          $element.attr('style', $element.attr('style') + ';' + value);
+          dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value;
+          // `dst` will never contain hasOwnProperty as DOM parser won't let it.
+          // You will get an "InvalidCharacterError: DOM Exception 5" error if you
+          // have an attribute like "has-own-property" or "data-has-own-property", etc.
+        } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) {
+          dst[key] = value;
+          dstAttr[key] = srcAttr[key];
+        }
+      });
+    }
+
+
+    function compileTemplateUrl(directives, $compileNode, tAttrs,
+        $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) {
+      var linkQueue = [],
+          afterTemplateNodeLinkFn,
+          afterTemplateChildLinkFn,
+          beforeTemplateCompileNode = $compileNode[0],
+          origAsyncDirective = directives.shift(),
+          derivedSyncDirective = inherit(origAsyncDirective, {
+            templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective
+          }),
+          templateUrl = (isFunction(origAsyncDirective.templateUrl))
+              ? origAsyncDirective.templateUrl($compileNode, tAttrs)
+              : origAsyncDirective.templateUrl,
+          templateNamespace = origAsyncDirective.templateNamespace;
+
+      $compileNode.empty();
+
+      $templateRequest(templateUrl)
+        .then(function(content) {
+          var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn;
+
+          content = denormalizeTemplate(content);
+
+          if (origAsyncDirective.replace) {
+            if (jqLiteIsTextNode(content)) {
+              $template = [];
+            } else {
+              $template = removeComments(wrapTemplate(templateNamespace, trim(content)));
+            }
+            compileNode = $template[0];
+
+            if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {
+              throw $compileMinErr('tplrt',
+                  "Template for directive '{0}' must have exactly one root element. {1}",
+                  origAsyncDirective.name, templateUrl);
+            }
+
+            tempTemplateAttrs = {$attr: {}};
+            replaceWith($rootElement, $compileNode, compileNode);
+            var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs);
+
+            if (isObject(origAsyncDirective.scope)) {
+              // the original directive that caused the template to be loaded async required
+              // an isolate scope
+              markDirectiveScope(templateDirectives, true);
+            }
+            directives = templateDirectives.concat(directives);
+            mergeTemplateAttributes(tAttrs, tempTemplateAttrs);
+          } else {
+            compileNode = beforeTemplateCompileNode;
+            $compileNode.html(content);
+          }
+
+          directives.unshift(derivedSyncDirective);
+
+          afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs,
+              childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns,
+              previousCompileContext);
+          forEach($rootElement, function(node, i) {
+            if (node == compileNode) {
+              $rootElement[i] = $compileNode[0];
+            }
+          });
+          afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn);
+
+          while (linkQueue.length) {
+            var scope = linkQueue.shift(),
+                beforeTemplateLinkNode = linkQueue.shift(),
+                linkRootElement = linkQueue.shift(),
+                boundTranscludeFn = linkQueue.shift(),
+                linkNode = $compileNode[0];
+
+            if (scope.$$destroyed) continue;
+
+            if (beforeTemplateLinkNode !== beforeTemplateCompileNode) {
+              var oldClasses = beforeTemplateLinkNode.className;
+
+              if (!(previousCompileContext.hasElementTranscludeDirective &&
+                  origAsyncDirective.replace)) {
+                // it was cloned therefore we have to clone as well.
+                linkNode = jqLiteClone(compileNode);
+              }
+              replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode);
+
+              // Copy in CSS classes from original node
+              safeAddClass(jqLite(linkNode), oldClasses);
+            }
+            if (afterTemplateNodeLinkFn.transcludeOnThisElement) {
+              childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);
+            } else {
+              childBoundTranscludeFn = boundTranscludeFn;
+            }
+            afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement,
+              childBoundTranscludeFn);
+          }
+          linkQueue = null;
+        });
+
+      return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) {
+        var childBoundTranscludeFn = boundTranscludeFn;
+        if (scope.$$destroyed) return;
+        if (linkQueue) {
+          linkQueue.push(scope,
+                         node,
+                         rootElement,
+                         childBoundTranscludeFn);
+        } else {
+          if (afterTemplateNodeLinkFn.transcludeOnThisElement) {
+            childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);
+          }
+          afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, childBoundTranscludeFn);
+        }
+      };
+    }
+
+
+    /**
+     * Sorting function for bound directives.
+     */
+    function byPriority(a, b) {
+      var diff = b.priority - a.priority;
+      if (diff !== 0) return diff;
+      if (a.name !== b.name) return (a.name < b.name) ? -1 : 1;
+      return a.index - b.index;
+    }
+
+    function assertNoDuplicate(what, previousDirective, directive, element) {
+
+      function wrapModuleNameIfDefined(moduleName) {
+        return moduleName ?
+          (' (module: ' + moduleName + ')') :
+          '';
+      }
+
+      if (previousDirective) {
+        throw $compileMinErr('multidir', 'Multiple directives [{0}{1}, {2}{3}] asking for {4} on: {5}',
+            previousDirective.name, wrapModuleNameIfDefined(previousDirective.$$moduleName),
+            directive.name, wrapModuleNameIfDefined(directive.$$moduleName), what, startingTag(element));
+      }
+    }
+
+
+    function addTextInterpolateDirective(directives, text) {
+      var interpolateFn = $interpolate(text, true);
+      if (interpolateFn) {
+        directives.push({
+          priority: 0,
+          compile: function textInterpolateCompileFn(templateNode) {
+            var templateNodeParent = templateNode.parent(),
+                hasCompileParent = !!templateNodeParent.length;
+
+            // When transcluding a template that has bindings in the root
+            // we don't have a parent and thus need to add the class during linking fn.
+            if (hasCompileParent) compile.$$addBindingClass(templateNodeParent);
+
+            return function textInterpolateLinkFn(scope, node) {
+              var parent = node.parent();
+              if (!hasCompileParent) compile.$$addBindingClass(parent);
+              compile.$$addBindingInfo(parent, interpolateFn.expressions);
+              scope.$watch(interpolateFn, function interpolateFnWatchAction(value) {
+                node[0].nodeValue = value;
+              });
+            };
+          }
+        });
+      }
+    }
+
+
+    function wrapTemplate(type, template) {
+      type = lowercase(type || 'html');
+      switch (type) {
+      case 'svg':
+      case 'math':
+        var wrapper = document.createElement('div');
+        wrapper.innerHTML = '<' + type + '>' + template + '</' + type + '>';
+        return wrapper.childNodes[0].childNodes;
+      default:
+        return template;
+      }
+    }
+
+
+    function getTrustedContext(node, attrNormalizedName) {
+      if (attrNormalizedName == "srcdoc") {
+        return $sce.HTML;
+      }
+      var tag = nodeName_(node);
+      // maction[xlink:href] can source SVG.  It's not limited to <maction>.
+      if (attrNormalizedName == "xlinkHref" ||
+          (tag == "form" && attrNormalizedName == "action") ||
+          (tag != "img" && (attrNormalizedName == "src" ||
+                            attrNormalizedName == "ngSrc"))) {
+        return $sce.RESOURCE_URL;
+      }
+    }
+
+
+    function addAttrInterpolateDirective(node, directives, value, name, allOrNothing) {
+      var trustedContext = getTrustedContext(node, name);
+      allOrNothing = ALL_OR_NOTHING_ATTRS[name] || allOrNothing;
+
+      var interpolateFn = $interpolate(value, true, trustedContext, allOrNothing);
+
+      // no interpolation found -> ignore
+      if (!interpolateFn) return;
+
+
+      if (name === "multiple" && nodeName_(node) === "select") {
+        throw $compileMinErr("selmulti",
+            "Binding to the 'multiple' attribute is not supported. Element: {0}",
+            startingTag(node));
+      }
+
+      directives.push({
+        priority: 100,
+        compile: function() {
+            return {
+              pre: function attrInterpolatePreLinkFn(scope, element, attr) {
+                var $$observers = (attr.$$observers || (attr.$$observers = createMap()));
+
+                if (EVENT_HANDLER_ATTR_REGEXP.test(name)) {
+                  throw $compileMinErr('nodomevents',
+                      "Interpolations for HTML DOM event attributes are disallowed.  Please use the " +
+                          "ng- versions (such as ng-click instead of onclick) instead.");
+                }
+
+                // If the attribute has changed since last $interpolate()ed
+                var newValue = attr[name];
+                if (newValue !== value) {
+                  // we need to interpolate again since the attribute value has been updated
+                  // (e.g. by another directive's compile function)
+                  // ensure unset/empty values make interpolateFn falsy
+                  interpolateFn = newValue && $interpolate(newValue, true, trustedContext, allOrNothing);
+                  value = newValue;
+                }
+
+                // if attribute was updated so that there is no interpolation going on we don't want to
+                // register any observers
+                if (!interpolateFn) return;
+
+                // initialize attr object so that it's ready in case we need the value for isolate
+                // scope initialization, otherwise the value would not be available from isolate
+                // directive's linking fn during linking phase
+                attr[name] = interpolateFn(scope);
+
+                ($$observers[name] || ($$observers[name] = [])).$$inter = true;
+                (attr.$$observers && attr.$$observers[name].$$scope || scope).
+                  $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) {
+                    //special case for class attribute addition + removal
+                    //so that class changes can tap into the animation
+                    //hooks provided by the $animate service. Be sure to
+                    //skip animations when the first digest occurs (when
+                    //both the new and the old values are the same) since
+                    //the CSS classes are the non-interpolated values
+                    if (name === 'class' && newValue != oldValue) {
+                      attr.$updateClass(newValue, oldValue);
+                    } else {
+                      attr.$set(name, newValue);
+                    }
+                  });
+              }
+            };
+          }
+      });
+    }
+
+
+    /**
+     * This is a special jqLite.replaceWith, which can replace items which
+     * have no parents, provided that the containing jqLite collection is provided.
+     *
+     * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes
+     *                               in the root of the tree.
+     * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep
+     *                                  the shell, but replace its DOM node reference.
+     * @param {Node} newNode The new DOM node.
+     */
+    function replaceWith($rootElement, elementsToRemove, newNode) {
+      var firstElementToRemove = elementsToRemove[0],
+          removeCount = elementsToRemove.length,
+          parent = firstElementToRemove.parentNode,
+          i, ii;
+
+      if ($rootElement) {
+        for (i = 0, ii = $rootElement.length; i < ii; i++) {
+          if ($rootElement[i] == firstElementToRemove) {
+            $rootElement[i++] = newNode;
+            for (var j = i, j2 = j + removeCount - 1,
+                     jj = $rootElement.length;
+                 j < jj; j++, j2++) {
+              if (j2 < jj) {
+                $rootElement[j] = $rootElement[j2];
+              } else {
+                delete $rootElement[j];
+              }
+            }
+            $rootElement.length -= removeCount - 1;
+
+            // If the replaced element is also the jQuery .context then replace it
+            // .context is a deprecated jQuery api, so we should set it only when jQuery set it
+            // http://api.jquery.com/context/
+            if ($rootElement.context === firstElementToRemove) {
+              $rootElement.context = newNode;
+            }
+            break;
+          }
+        }
+      }
+
+      if (parent) {
+        parent.replaceChild(newNode, firstElementToRemove);
+      }
+
+      // TODO(perf): what's this document fragment for? is it needed? can we at least reuse it?
+      var fragment = document.createDocumentFragment();
+      fragment.appendChild(firstElementToRemove);
+
+      if (jqLite.hasData(firstElementToRemove)) {
+        // Copy over user data (that includes Angular's $scope etc.). Don't copy private
+        // data here because there's no public interface in jQuery to do that and copying over
+        // event listeners (which is the main use of private data) wouldn't work anyway.
+        jqLite.data(newNode, jqLite.data(firstElementToRemove));
+
+        // Remove data of the replaced element. We cannot just call .remove()
+        // on the element it since that would deallocate scope that is needed
+        // for the new node. Instead, remove the data "manually".
+        if (!jQuery) {
+          delete jqLite.cache[firstElementToRemove[jqLite.expando]];
+        } else {
+          // jQuery 2.x doesn't expose the data storage. Use jQuery.cleanData to clean up after
+          // the replaced element. The cleanData version monkey-patched by Angular would cause
+          // the scope to be trashed and we do need the very same scope to work with the new
+          // element. However, we cannot just cache the non-patched version and use it here as
+          // that would break if another library patches the method after Angular does (one
+          // example is jQuery UI). Instead, set a flag indicating scope destroying should be
+          // skipped this one time.
+          skipDestroyOnNextJQueryCleanData = true;
+          jQuery.cleanData([firstElementToRemove]);
+        }
+      }
+
+      for (var k = 1, kk = elementsToRemove.length; k < kk; k++) {
+        var element = elementsToRemove[k];
+        jqLite(element).remove(); // must do this way to clean up expando
+        fragment.appendChild(element);
+        delete elementsToRemove[k];
+      }
+
+      elementsToRemove[0] = newNode;
+      elementsToRemove.length = 1;
+    }
+
+
+    function cloneAndAnnotateFn(fn, annotation) {
+      return extend(function() { return fn.apply(null, arguments); }, fn, annotation);
+    }
+
+
+    function invokeLinkFn(linkFn, scope, $element, attrs, controllers, transcludeFn) {
+      try {
+        linkFn(scope, $element, attrs, controllers, transcludeFn);
+      } catch (e) {
+        $exceptionHandler(e, startingTag($element));
+      }
+    }
+
+
+    // Set up $watches for isolate scope and controller bindings. This process
+    // only occurs for isolate scopes and new scopes with controllerAs.
+    function initializeDirectiveBindings(scope, attrs, destination, bindings, directive) {
+      var removeWatchCollection = [];
+      forEach(bindings, function(definition, scopeName) {
+        var attrName = definition.attrName,
+        optional = definition.optional,
+        mode = definition.mode, // @, =, or &
+        lastValue,
+        parentGet, parentSet, compare;
+
+        switch (mode) {
+
+          case '@':
+            if (!optional && !hasOwnProperty.call(attrs, attrName)) {
+              destination[scopeName] = attrs[attrName] = void 0;
+            }
+            attrs.$observe(attrName, function(value) {
+              if (isString(value)) {
+                destination[scopeName] = value;
+              }
+            });
+            attrs.$$observers[attrName].$$scope = scope;
+            if (isString(attrs[attrName])) {
+              // If the attribute has been provided then we trigger an interpolation to ensure
+              // the value is there for use in the link fn
+              destination[scopeName] = $interpolate(attrs[attrName])(scope);
+            }
+            break;
+
+          case '=':
+            if (!hasOwnProperty.call(attrs, attrName)) {
+              if (optional) break;
+              attrs[attrName] = void 0;
+            }
+            if (optional && !attrs[attrName]) break;
+
+            parentGet = $parse(attrs[attrName]);
+            if (parentGet.literal) {
+              compare = equals;
+            } else {
+              compare = function(a, b) { return a === b || (a !== a && b !== b); };
+            }
+            parentSet = parentGet.assign || function() {
+              // reset the change, or we will throw this exception on every $digest
+              lastValue = destination[scopeName] = parentGet(scope);
+              throw $compileMinErr('nonassign',
+                  "Expression '{0}' used with directive '{1}' is non-assignable!",
+                  attrs[attrName], directive.name);
+            };
+            lastValue = destination[scopeName] = parentGet(scope);
+            var parentValueWatch = function parentValueWatch(parentValue) {
+              if (!compare(parentValue, destination[scopeName])) {
+                // we are out of sync and need to copy
+                if (!compare(parentValue, lastValue)) {
+                  // parent changed and it has precedence
+                  destination[scopeName] = parentValue;
+                } else {
+                  // if the parent can be assigned then do so
+                  parentSet(scope, parentValue = destination[scopeName]);
+                }
+              }
+              return lastValue = parentValue;
+            };
+            parentValueWatch.$stateful = true;
+            var removeWatch;
+            if (definition.collection) {
+              removeWatch = scope.$watchCollection(attrs[attrName], parentValueWatch);
+            } else {
+              removeWatch = scope.$watch($parse(attrs[attrName], parentValueWatch), null, parentGet.literal);
+            }
+            removeWatchCollection.push(removeWatch);
+            break;
+
+          case '&':
+            // Don't assign Object.prototype method to scope
+            parentGet = attrs.hasOwnProperty(attrName) ? $parse(attrs[attrName]) : noop;
+
+            // Don't assign noop to destination if expression is not valid
+            if (parentGet === noop && optional) break;
+
+            destination[scopeName] = function(locals) {
+              return parentGet(scope, locals);
+            };
+            break;
+        }
+      });
+
+      return removeWatchCollection.length && function removeWatches() {
+        for (var i = 0, ii = removeWatchCollection.length; i < ii; ++i) {
+          removeWatchCollection[i]();
+        }
+      };
+    }
+  }];
+}
+
+var PREFIX_REGEXP = /^((?:x|data)[\:\-_])/i;
+/**
+ * Converts all accepted directives format into proper directive name.
+ * @param name Name to normalize
+ */
+function directiveNormalize(name) {
+  return camelCase(name.replace(PREFIX_REGEXP, ''));
+}
+
+/**
+ * @ngdoc type
+ * @name $compile.directive.Attributes
+ *
+ * @description
+ * A shared object between directive compile / linking functions which contains normalized DOM
+ * element attributes. The values reflect current binding state `{{ }}`. The normalization is
+ * needed since all of these are treated as equivalent in Angular:
+ *
+ * ```
+ *    <span ng:bind="a" ng-bind="a" data-ng-bind="a" x-ng-bind="a">
+ * ```
+ */
+
+/**
+ * @ngdoc property
+ * @name $compile.directive.Attributes#$attr
+ *
+ * @description
+ * A map of DOM element attribute names to the normalized name. This is
+ * needed to do reverse lookup from normalized name back to actual name.
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $compile.directive.Attributes#$set
+ * @kind function
+ *
+ * @description
+ * Set DOM element attribute value.
+ *
+ *
+ * @param {string} name Normalized element attribute name of the property to modify. The name is
+ *          reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr}
+ *          property to the original name.
+ * @param {string} value Value to set the attribute to. The value can be an interpolated string.
+ */
+
+
+
+/**
+ * Closure compiler type information
+ */
+
+function nodesetLinkingFn(
+  /* angular.Scope */ scope,
+  /* NodeList */ nodeList,
+  /* Element */ rootElement,
+  /* function(Function) */ boundTranscludeFn
+) {}
+
+function directiveLinkingFn(
+  /* nodesetLinkingFn */ nodesetLinkingFn,
+  /* angular.Scope */ scope,
+  /* Node */ node,
+  /* Element */ rootElement,
+  /* function(Function) */ boundTranscludeFn
+) {}
+
+function tokenDifference(str1, str2) {
+  var values = '',
+      tokens1 = str1.split(/\s+/),
+      tokens2 = str2.split(/\s+/);
+
+  outer:
+  for (var i = 0; i < tokens1.length; i++) {
+    var token = tokens1[i];
+    for (var j = 0; j < tokens2.length; j++) {
+      if (token == tokens2[j]) continue outer;
+    }
+    values += (values.length > 0 ? ' ' : '') + token;
+  }
+  return values;
+}
+
+function removeComments(jqNodes) {
+  jqNodes = jqLite(jqNodes);
+  var i = jqNodes.length;
+
+  if (i <= 1) {
+    return jqNodes;
+  }
+
+  while (i--) {
+    var node = jqNodes[i];
+    if (node.nodeType === NODE_TYPE_COMMENT) {
+      splice.call(jqNodes, i, 1);
+    }
+  }
+  return jqNodes;
+}
+
+var $controllerMinErr = minErr('$controller');
+
+
+var CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/;
+function identifierForController(controller, ident) {
+  if (ident && isString(ident)) return ident;
+  if (isString(controller)) {
+    var match = CNTRL_REG.exec(controller);
+    if (match) return match[3];
+  }
+}
+
+
+/**
+ * @ngdoc provider
+ * @name $controllerProvider
+ * @description
+ * The {@link ng.$controller $controller service} is used by Angular to create new
+ * controllers.
+ *
+ * This provider allows controller registration via the
+ * {@link ng.$controllerProvider#register register} method.
+ */
+function $ControllerProvider() {
+  var controllers = {},
+      globals = false;
+
+  /**
+   * @ngdoc method
+   * @name $controllerProvider#register
+   * @param {string|Object} name Controller name, or an object map of controllers where the keys are
+   *    the names and the values are the constructors.
+   * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI
+   *    annotations in the array notation).
+   */
+  this.register = function(name, constructor) {
+    assertNotHasOwnProperty(name, 'controller');
+    if (isObject(name)) {
+      extend(controllers, name);
+    } else {
+      controllers[name] = constructor;
+    }
+  };
+
+  /**
+   * @ngdoc method
+   * @name $controllerProvider#allowGlobals
+   * @description If called, allows `$controller` to find controller constructors on `window`
+   */
+  this.allowGlobals = function() {
+    globals = true;
+  };
+
+
+  this.$get = ['$injector', '$window', function($injector, $window) {
+
+    /**
+     * @ngdoc service
+     * @name $controller
+     * @requires $injector
+     *
+     * @param {Function|string} constructor If called with a function then it's considered to be the
+     *    controller constructor function. Otherwise it's considered to be a string which is used
+     *    to retrieve the controller constructor using the following steps:
+     *
+     *    * check if a controller with given name is registered via `$controllerProvider`
+     *    * check if evaluating the string on the current scope returns a constructor
+     *    * if $controllerProvider#allowGlobals, check `window[constructor]` on the global
+     *      `window` object (not recommended)
+     *
+     *    The string can use the `controller as property` syntax, where the controller instance is published
+     *    as the specified property on the `scope`; the `scope` must be injected into `locals` param for this
+     *    to work correctly.
+     *
+     * @param {Object} locals Injection locals for Controller.
+     * @return {Object} Instance of given controller.
+     *
+     * @description
+     * `$controller` service is responsible for instantiating controllers.
+     *
+     * It's just a simple call to {@link auto.$injector $injector}, but extracted into
+     * a service, so that one can override this service with [BC version](https://gist.github.com/1649788).
+     */
+    return function(expression, locals, later, ident) {
+      // PRIVATE API:
+      //   param `later` --- indicates that the controller's constructor is invoked at a later time.
+      //                     If true, $controller will allocate the object with the correct
+      //                     prototype chain, but will not invoke the controller until a returned
+      //                     callback is invoked.
+      //   param `ident` --- An optional label which overrides the label parsed from the controller
+      //                     expression, if any.
+      var instance, match, constructor, identifier;
+      later = later === true;
+      if (ident && isString(ident)) {
+        identifier = ident;
+      }
+
+      if (isString(expression)) {
+        match = expression.match(CNTRL_REG);
+        if (!match) {
+          throw $controllerMinErr('ctrlfmt',
+            "Badly formed controller string '{0}'. " +
+            "Must match `__name__ as __id__` or `__name__`.", expression);
+        }
+        constructor = match[1],
+        identifier = identifier || match[3];
+        expression = controllers.hasOwnProperty(constructor)
+            ? controllers[constructor]
+            : getter(locals.$scope, constructor, true) ||
+                (globals ? getter($window, constructor, true) : undefined);
+
+        assertArgFn(expression, constructor, true);
+      }
+
+      if (later) {
+        // Instantiate controller later:
+        // This machinery is used to create an instance of the object before calling the
+        // controller's constructor itself.
+        //
+        // This allows properties to be added to the controller before the constructor is
+        // invoked. Primarily, this is used for isolate scope bindings in $compile.
+        //
+        // This feature is not intended for use by applications, and is thus not documented
+        // publicly.
+        // Object creation: http://jsperf.com/create-constructor/2
+        var controllerPrototype = (isArray(expression) ?
+          expression[expression.length - 1] : expression).prototype;
+        instance = Object.create(controllerPrototype || null);
+
+        if (identifier) {
+          addIdentifier(locals, identifier, instance, constructor || expression.name);
+        }
+
+        var instantiate;
+        return instantiate = extend(function() {
+          var result = $injector.invoke(expression, instance, locals, constructor);
+          if (result !== instance && (isObject(result) || isFunction(result))) {
+            instance = result;
+            if (identifier) {
+              // If result changed, re-assign controllerAs value to scope.
+              addIdentifier(locals, identifier, instance, constructor || expression.name);
+            }
+          }
+          return instance;
+        }, {
+          instance: instance,
+          identifier: identifier
+        });
+      }
+
+      instance = $injector.instantiate(expression, locals, constructor);
+
+      if (identifier) {
+        addIdentifier(locals, identifier, instance, constructor || expression.name);
+      }
+
+      return instance;
+    };
+
+    function addIdentifier(locals, identifier, instance, name) {
+      if (!(locals && isObject(locals.$scope))) {
+        throw minErr('$controller')('noscp',
+          "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.",
+          name, identifier);
+      }
+
+      locals.$scope[identifier] = instance;
+    }
+  }];
+}
+
+/**
+ * @ngdoc service
+ * @name $document
+ * @requires $window
+ *
+ * @description
+ * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object.
+ *
+ * @example
+   <example module="documentExample">
+     <file name="index.html">
+       <div ng-controller="ExampleController">
+         <p>$document title: <b ng-bind="title"></b></p>
+         <p>window.document title: <b ng-bind="windowTitle"></b></p>
+       </div>
+     </file>
+     <file name="script.js">
+       angular.module('documentExample', [])
+         .controller('ExampleController', ['$scope', '$document', function($scope, $document) {
+           $scope.title = $document[0].title;
+           $scope.windowTitle = angular.element(window.document)[0].title;
+         }]);
+     </file>
+   </example>
+ */
+function $DocumentProvider() {
+  this.$get = ['$window', function(window) {
+    return jqLite(window.document);
+  }];
+}
+
+/**
+ * @ngdoc service
+ * @name $exceptionHandler
+ * @requires ng.$log
+ *
+ * @description
+ * Any uncaught exception in angular expressions is delegated to this service.
+ * The default implementation simply delegates to `$log.error` which logs it into
+ * the browser console.
+ *
+ * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by
+ * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing.
+ *
+ * ## Example:
+ *
+ * ```js
+ *   angular.module('exceptionOverride', []).factory('$exceptionHandler', function() {
+ *     return function(exception, cause) {
+ *       exception.message += ' (caused by "' + cause + '")';
+ *       throw exception;
+ *     };
+ *   });
+ * ```
+ *
+ * This example will override the normal action of `$exceptionHandler`, to make angular
+ * exceptions fail hard when they happen, instead of just logging to the console.
+ *
+ * <hr />
+ * Note, that code executed in event-listeners (even those registered using jqLite's `on`/`bind`
+ * methods) does not delegate exceptions to the {@link ng.$exceptionHandler $exceptionHandler}
+ * (unless executed during a digest).
+ *
+ * If you wish, you can manually delegate exceptions, e.g.
+ * `try { ... } catch(e) { $exceptionHandler(e); }`
+ *
+ * @param {Error} exception Exception associated with the error.
+ * @param {string=} cause optional information about the context in which
+ *       the error was thrown.
+ *
+ */
+function $ExceptionHandlerProvider() {
+  this.$get = ['$log', function($log) {
+    return function(exception, cause) {
+      $log.error.apply($log, arguments);
+    };
+  }];
+}
+
+var $$ForceReflowProvider = function() {
+  this.$get = ['$document', function($document) {
+    return function(domNode) {
+      //the line below will force the browser to perform a repaint so
+      //that all the animated elements within the animation frame will
+      //be properly updated and drawn on screen. This is required to
+      //ensure that the preparation animation is properly flushed so that
+      //the active state picks up from there. DO NOT REMOVE THIS LINE.
+      //DO NOT OPTIMIZE THIS LINE. THE MINIFIER WILL REMOVE IT OTHERWISE WHICH
+      //WILL RESULT IN AN UNPREDICTABLE BUG THAT IS VERY HARD TO TRACK DOWN AND
+      //WILL TAKE YEARS AWAY FROM YOUR LIFE.
+      if (domNode) {
+        if (!domNode.nodeType && domNode instanceof jqLite) {
+          domNode = domNode[0];
+        }
+      } else {
+        domNode = $document[0].body;
+      }
+      return domNode.offsetWidth + 1;
+    };
+  }];
+};
+
+var APPLICATION_JSON = 'application/json';
+var CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'};
+var JSON_START = /^\[|^\{(?!\{)/;
+var JSON_ENDS = {
+  '[': /]$/,
+  '{': /}$/
+};
+var JSON_PROTECTION_PREFIX = /^\)\]\}',?\n/;
+var $httpMinErr = minErr('$http');
+var $httpMinErrLegacyFn = function(method) {
+  return function() {
+    throw $httpMinErr('legacy', 'The method `{0}` on the promise returned from `$http` has been disabled.', method);
+  };
+};
+
+function serializeValue(v) {
+  if (isObject(v)) {
+    return isDate(v) ? v.toISOString() : toJson(v);
+  }
+  return v;
+}
+
+
+function $HttpParamSerializerProvider() {
+  /**
+   * @ngdoc service
+   * @name $httpParamSerializer
+   * @description
+   *
+   * Default {@link $http `$http`} params serializer that converts objects to strings
+   * according to the following rules:
+   *
+   * * `{'foo': 'bar'}` results in `foo=bar`
+   * * `{'foo': Date.now()}` results in `foo=2015-04-01T09%3A50%3A49.262Z` (`toISOString()` and encoded representation of a Date object)
+   * * `{'foo': ['bar', 'baz']}` results in `foo=bar&foo=baz` (repeated key for each array element)
+   * * `{'foo': {'bar':'baz'}}` results in `foo=%7B%22bar%22%3A%22baz%22%7D"` (stringified and encoded representation of an object)
+   *
+   * Note that serializer will sort the request parameters alphabetically.
+   * */
+
+  this.$get = function() {
+    return function ngParamSerializer(params) {
+      if (!params) return '';
+      var parts = [];
+      forEachSorted(params, function(value, key) {
+        if (value === null || isUndefined(value)) return;
+        if (isArray(value)) {
+          forEach(value, function(v, k) {
+            parts.push(encodeUriQuery(key)  + '=' + encodeUriQuery(serializeValue(v)));
+          });
+        } else {
+          parts.push(encodeUriQuery(key) + '=' + encodeUriQuery(serializeValue(value)));
+        }
+      });
+
+      return parts.join('&');
+    };
+  };
+}
+
+function $HttpParamSerializerJQLikeProvider() {
+  /**
+   * @ngdoc service
+   * @name $httpParamSerializerJQLike
+   * @description
+   *
+   * Alternative {@link $http `$http`} params serializer that follows
+   * jQuery's [`param()`](http://api.jquery.com/jquery.param/) method logic.
+   * The serializer will also sort the params alphabetically.
+   *
+   * To use it for serializing `$http` request parameters, set it as the `paramSerializer` property:
+   *
+   * ```js
+   * $http({
+   *   url: myUrl,
+   *   method: 'GET',
+   *   params: myParams,
+   *   paramSerializer: '$httpParamSerializerJQLike'
+   * });
+   * ```
+   *
+   * It is also possible to set it as the default `paramSerializer` in the
+   * {@link $httpProvider#defaults `$httpProvider`}.
+   *
+   * Additionally, you can inject the serializer and use it explicitly, for example to serialize
+   * form data for submission:
+   *
+   * ```js
+   * .controller(function($http, $httpParamSerializerJQLike) {
+   *   //...
+   *
+   *   $http({
+   *     url: myUrl,
+   *     method: 'POST',
+   *     data: $httpParamSerializerJQLike(myData),
+   *     headers: {
+   *       'Content-Type': 'application/x-www-form-urlencoded'
+   *     }
+   *   });
+   *
+   * });
+   * ```
+   *
+   * */
+  this.$get = function() {
+    return function jQueryLikeParamSerializer(params) {
+      if (!params) return '';
+      var parts = [];
+      serialize(params, '', true);
+      return parts.join('&');
+
+      function serialize(toSerialize, prefix, topLevel) {
+        if (toSerialize === null || isUndefined(toSerialize)) return;
+        if (isArray(toSerialize)) {
+          forEach(toSerialize, function(value, index) {
+            serialize(value, prefix + '[' + (isObject(value) ? index : '') + ']');
+          });
+        } else if (isObject(toSerialize) && !isDate(toSerialize)) {
+          forEachSorted(toSerialize, function(value, key) {
+            serialize(value, prefix +
+                (topLevel ? '' : '[') +
+                key +
+                (topLevel ? '' : ']'));
+          });
+        } else {
+          parts.push(encodeUriQuery(prefix) + '=' + encodeUriQuery(serializeValue(toSerialize)));
+        }
+      }
+    };
+  };
+}
+
+function defaultHttpResponseTransform(data, headers) {
+  if (isString(data)) {
+    // Strip json vulnerability protection prefix and trim whitespace
+    var tempData = data.replace(JSON_PROTECTION_PREFIX, '').trim();
+
+    if (tempData) {
+      var contentType = headers('Content-Type');
+      if ((contentType && (contentType.indexOf(APPLICATION_JSON) === 0)) || isJsonLike(tempData)) {
+        data = fromJson(tempData);
+      }
+    }
+  }
+
+  return data;
+}
+
+function isJsonLike(str) {
+    var jsonStart = str.match(JSON_START);
+    return jsonStart && JSON_ENDS[jsonStart[0]].test(str);
+}
+
+/**
+ * Parse headers into key value object
+ *
+ * @param {string} headers Raw headers as a string
+ * @returns {Object} Parsed headers as key value object
+ */
+function parseHeaders(headers) {
+  var parsed = createMap(), i;
+
+  function fillInParsed(key, val) {
+    if (key) {
+      parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
+    }
+  }
+
+  if (isString(headers)) {
+    forEach(headers.split('\n'), function(line) {
+      i = line.indexOf(':');
+      fillInParsed(lowercase(trim(line.substr(0, i))), trim(line.substr(i + 1)));
+    });
+  } else if (isObject(headers)) {
+    forEach(headers, function(headerVal, headerKey) {
+      fillInParsed(lowercase(headerKey), trim(headerVal));
+    });
+  }
+
+  return parsed;
+}
+
+
+/**
+ * Returns a function that provides access to parsed headers.
+ *
+ * Headers are lazy parsed when first requested.
+ * @see parseHeaders
+ *
+ * @param {(string|Object)} headers Headers to provide access to.
+ * @returns {function(string=)} Returns a getter function which if called with:
+ *
+ *   - if called with single an argument returns a single header value or null
+ *   - if called with no arguments returns an object containing all headers.
+ */
+function headersGetter(headers) {
+  var headersObj;
+
+  return function(name) {
+    if (!headersObj) headersObj =  parseHeaders(headers);
+
+    if (name) {
+      var value = headersObj[lowercase(name)];
+      if (value === void 0) {
+        value = null;
+      }
+      return value;
+    }
+
+    return headersObj;
+  };
+}
+
+
+/**
+ * Chain all given functions
+ *
+ * This function is used for both request and response transforming
+ *
+ * @param {*} data Data to transform.
+ * @param {function(string=)} headers HTTP headers getter fn.
+ * @param {number} status HTTP status code of the response.
+ * @param {(Function|Array.<Function>)} fns Function or an array of functions.
+ * @returns {*} Transformed data.
+ */
+function transformData(data, headers, status, fns) {
+  if (isFunction(fns)) {
+    return fns(data, headers, status);
+  }
+
+  forEach(fns, function(fn) {
+    data = fn(data, headers, status);
+  });
+
+  return data;
+}
+
+
+function isSuccess(status) {
+  return 200 <= status && status < 300;
+}
+
+
+/**
+ * @ngdoc provider
+ * @name $httpProvider
+ * @description
+ * Use `$httpProvider` to change the default behavior of the {@link ng.$http $http} service.
+ * */
+function $HttpProvider() {
+  /**
+   * @ngdoc property
+   * @name $httpProvider#defaults
+   * @description
+   *
+   * Object containing default values for all {@link ng.$http $http} requests.
+   *
+   * - **`defaults.cache`** - {Object} - an object built with {@link ng.$cacheFactory `$cacheFactory`}
+   * that will provide the cache for all requests who set their `cache` property to `true`.
+   * If you set the `defaults.cache = false` then only requests that specify their own custom
+   * cache object will be cached. See {@link $http#caching $http Caching} for more information.
+   *
+   * - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token.
+   * Defaults value is `'XSRF-TOKEN'`.
+   *
+   * - **`defaults.xsrfHeaderName`** - {string} - Name of HTTP header to populate with the
+   * XSRF token. Defaults value is `'X-XSRF-TOKEN'`.
+   *
+   * - **`defaults.headers`** - {Object} - Default headers for all $http requests.
+   * Refer to {@link ng.$http#setting-http-headers $http} for documentation on
+   * setting default headers.
+   *     - **`defaults.headers.common`**
+   *     - **`defaults.headers.post`**
+   *     - **`defaults.headers.put`**
+   *     - **`defaults.headers.patch`**
+   *
+   *
+   * - **`defaults.paramSerializer`** - `{string|function(Object<string,string>):string}` - A function
+   *  used to the prepare string representation of request parameters (specified as an object).
+   *  If specified as string, it is interpreted as a function registered with the {@link auto.$injector $injector}.
+   *  Defaults to {@link ng.$httpParamSerializer $httpParamSerializer}.
+   *
+   **/
+  var defaults = this.defaults = {
+    // transform incoming response data
+    transformResponse: [defaultHttpResponseTransform],
+
+    // transform outgoing request data
+    transformRequest: [function(d) {
+      return isObject(d) && !isFile(d) && !isBlob(d) && !isFormData(d) ? toJson(d) : d;
+    }],
+
+    // default headers
+    headers: {
+      common: {
+        'Accept': 'application/json, text/plain, */*'
+      },
+      post:   shallowCopy(CONTENT_TYPE_APPLICATION_JSON),
+      put:    shallowCopy(CONTENT_TYPE_APPLICATION_JSON),
+      patch:  shallowCopy(CONTENT_TYPE_APPLICATION_JSON)
+    },
+
+    xsrfCookieName: 'XSRF-TOKEN',
+    xsrfHeaderName: 'X-XSRF-TOKEN',
+
+    paramSerializer: '$httpParamSerializer'
+  };
+
+  var useApplyAsync = false;
+  /**
+   * @ngdoc method
+   * @name $httpProvider#useApplyAsync
+   * @description
+   *
+   * Configure $http service to combine processing of multiple http responses received at around
+   * the same time via {@link ng.$rootScope.Scope#$applyAsync $rootScope.$applyAsync}. This can result in
+   * significant performance improvement for bigger applications that make many HTTP requests
+   * concurrently (common during application bootstrap).
+   *
+   * Defaults to false. If no value is specified, returns the current configured value.
+   *
+   * @param {boolean=} value If true, when requests are loaded, they will schedule a deferred
+   *    "apply" on the next tick, giving time for subsequent requests in a roughly ~10ms window
+   *    to load and share the same digest cycle.
+   *
+   * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining.
+   *    otherwise, returns the current configured value.
+   **/
+  this.useApplyAsync = function(value) {
+    if (isDefined(value)) {
+      useApplyAsync = !!value;
+      return this;
+    }
+    return useApplyAsync;
+  };
+
+  var useLegacyPromise = true;
+  /**
+   * @ngdoc method
+   * @name $httpProvider#useLegacyPromiseExtensions
+   * @description
+   *
+   * Configure `$http` service to return promises without the shorthand methods `success` and `error`.
+   * This should be used to make sure that applications work without these methods.
+   *
+   * Defaults to true. If no value is specified, returns the current configured value.
+   *
+   * @param {boolean=} value If true, `$http` will return a promise with the deprecated legacy `success` and `error` methods.
+   *
+   * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining.
+   *    otherwise, returns the current configured value.
+   **/
+  this.useLegacyPromiseExtensions = function(value) {
+    if (isDefined(value)) {
+      useLegacyPromise = !!value;
+      return this;
+    }
+    return useLegacyPromise;
+  };
+
+  /**
+   * @ngdoc property
+   * @name $httpProvider#interceptors
+   * @description
+   *
+   * Array containing service factories for all synchronous or asynchronous {@link ng.$http $http}
+   * pre-processing of request or postprocessing of responses.
+   *
+   * These service factories are ordered by request, i.e. they are applied in the same order as the
+   * array, on request, but reverse order, on response.
+   *
+   * {@link ng.$http#interceptors Interceptors detailed info}
+   **/
+  var interceptorFactories = this.interceptors = [];
+
+  this.$get = ['$httpBackend', '$$cookieReader', '$cacheFactory', '$rootScope', '$q', '$injector',
+      function($httpBackend, $$cookieReader, $cacheFactory, $rootScope, $q, $injector) {
+
+    var defaultCache = $cacheFactory('$http');
+
+    /**
+     * Make sure that default param serializer is exposed as a function
+     */
+    defaults.paramSerializer = isString(defaults.paramSerializer) ?
+      $injector.get(defaults.paramSerializer) : defaults.paramSerializer;
+
+    /**
+     * Interceptors stored in reverse order. Inner interceptors before outer interceptors.
+     * The reversal is needed so that we can build up the interception chain around the
+     * server request.
+     */
+    var reversedInterceptors = [];
+
+    forEach(interceptorFactories, function(interceptorFactory) {
+      reversedInterceptors.unshift(isString(interceptorFactory)
+          ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory));
+    });
+
+    /**
+     * @ngdoc service
+     * @kind function
+     * @name $http
+     * @requires ng.$httpBackend
+     * @requires $cacheFactory
+     * @requires $rootScope
+     * @requires $q
+     * @requires $injector
+     *
+     * @description
+     * The `$http` service is a core Angular service that facilitates communication with the remote
+     * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest)
+     * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP).
+     *
+     * For unit testing applications that use `$http` service, see
+     * {@link ngMock.$httpBackend $httpBackend mock}.
+     *
+     * For a higher level of abstraction, please check out the {@link ngResource.$resource
+     * $resource} service.
+     *
+     * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by
+     * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage
+     * it is important to familiarize yourself with these APIs and the guarantees they provide.
+     *
+     *
+     * ## General usage
+     * The `$http` service is a function which takes a single argument — a {@link $http#usage configuration object} —
+     * that is used to generate an HTTP request and returns  a {@link ng.$q promise}.
+     *
+     * ```js
+     *   // Simple GET request example:
+     *   $http({
+     *     method: 'GET',
+     *     url: '/someUrl'
+     *   }).then(function successCallback(response) {
+     *       // this callback will be called asynchronously
+     *       // when the response is available
+     *     }, function errorCallback(response) {
+     *       // called asynchronously if an error occurs
+     *       // or server returns response with an error status.
+     *     });
+     * ```
+     *
+     * The response object has these properties:
+     *
+     *   - **data** – `{string|Object}` – The response body transformed with the transform
+     *     functions.
+     *   - **status** – `{number}` – HTTP status code of the response.
+     *   - **headers** – `{function([headerName])}` – Header getter function.
+     *   - **config** – `{Object}` – The configuration object that was used to generate the request.
+     *   - **statusText** – `{string}` – HTTP status text of the response.
+     *
+     * A response status code between 200 and 299 is considered a success status and
+     * will result in the success callback being called. Note that if the response is a redirect,
+     * XMLHttpRequest will transparently follow it, meaning that the error callback will not be
+     * called for such responses.
+     *
+     *
+     * ## Shortcut methods
+     *
+     * Shortcut methods are also available. All shortcut methods require passing in the URL, and
+     * request data must be passed in for POST/PUT requests. An optional config can be passed as the
+     * last argument.
+     *
+     * ```js
+     *   $http.get('/someUrl', config).then(successCallback, errorCallback);
+     *   $http.post('/someUrl', data, config).then(successCallback, errorCallback);
+     * ```
+     *
+     * Complete list of shortcut methods:
+     *
+     * - {@link ng.$http#get $http.get}
+     * - {@link ng.$http#head $http.head}
+     * - {@link ng.$http#post $http.post}
+     * - {@link ng.$http#put $http.put}
+     * - {@link ng.$http#delete $http.delete}
+     * - {@link ng.$http#jsonp $http.jsonp}
+     * - {@link ng.$http#patch $http.patch}
+     *
+     *
+     * ## Writing Unit Tests that use $http
+     * When unit testing (using {@link ngMock ngMock}), it is necessary to call
+     * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending
+     * request using trained responses.
+     *
+     * ```
+     * $httpBackend.expectGET(...);
+     * $http.get(...);
+     * $httpBackend.flush();
+     * ```
+     *
+     * ## Deprecation Notice
+     * <div class="alert alert-danger">
+     *   The `$http` legacy promise methods `success` and `error` have been deprecated.
+     *   Use the standard `then` method instead.
+     *   If {@link $httpProvider#useLegacyPromiseExtensions `$httpProvider.useLegacyPromiseExtensions`} is set to
+     *   `false` then these methods will throw {@link $http:legacy `$http/legacy`} error.
+     * </div>
+     *
+     * ## Setting HTTP Headers
+     *
+     * The $http service will automatically add certain HTTP headers to all requests. These defaults
+     * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration
+     * object, which currently contains this default configuration:
+     *
+     * - `$httpProvider.defaults.headers.common` (headers that are common for all requests):
+     *   - `Accept: application/json, text/plain, * / *`
+     * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests)
+     *   - `Content-Type: application/json`
+     * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests)
+     *   - `Content-Type: application/json`
+     *
+     * To add or overwrite these defaults, simply add or remove a property from these configuration
+     * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object
+     * with the lowercased HTTP method name as the key, e.g.
+     * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }`.
+     *
+     * The defaults can also be set at runtime via the `$http.defaults` object in the same
+     * fashion. For example:
+     *
+     * ```
+     * module.run(function($http) {
+     *   $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w'
+     * });
+     * ```
+     *
+     * In addition, you can supply a `headers` property in the config object passed when
+     * calling `$http(config)`, which overrides the defaults without changing them globally.
+     *
+     * To explicitly remove a header automatically added via $httpProvider.defaults.headers on a per request basis,
+     * Use the `headers` property, setting the desired header to `undefined`. For example:
+     *
+     * ```js
+     * var req = {
+     *  method: 'POST',
+     *  url: 'http://example.com',
+     *  headers: {
+     *    'Content-Type': undefined
+     *  },
+     *  data: { test: 'test' }
+     * }
+     *
+     * $http(req).then(function(){...}, function(){...});
+     * ```
+     *
+     * ## Transforming Requests and Responses
+     *
+     * Both requests and responses can be transformed using transformation functions: `transformRequest`
+     * and `transformResponse`. These properties can be a single function that returns
+     * the transformed value (`function(data, headersGetter, status)`) or an array of such transformation functions,
+     * which allows you to `push` or `unshift` a new transformation function into the transformation chain.
+     *
+     * ### Default Transformations
+     *
+     * The `$httpProvider` provider and `$http` service expose `defaults.transformRequest` and
+     * `defaults.transformResponse` properties. If a request does not provide its own transformations
+     * then these will be applied.
+     *
+     * You can augment or replace the default transformations by modifying these properties by adding to or
+     * replacing the array.
+     *
+     * Angular provides the following default transformations:
+     *
+     * Request transformations (`$httpProvider.defaults.transformRequest` and `$http.defaults.transformRequest`):
+     *
+     * - If the `data` property of the request configuration object contains an object, serialize it
+     *   into JSON format.
+     *
+     * Response transformations (`$httpProvider.defaults.transformResponse` and `$http.defaults.transformResponse`):
+     *
+     *  - If XSRF prefix is detected, strip it (see Security Considerations section below).
+     *  - If JSON response is detected, deserialize it using a JSON parser.
+     *
+     *
+     * ### Overriding the Default Transformations Per Request
+     *
+     * If you wish override the request/response transformations only for a single request then provide
+     * `transformRequest` and/or `transformResponse` properties on the configuration object passed
+     * into `$http`.
+     *
+     * Note that if you provide these properties on the config object the default transformations will be
+     * overwritten. If you wish to augment the default transformations then you must include them in your
+     * local transformation array.
+     *
+     * The following code demonstrates adding a new response transformation to be run after the default response
+     * transformations have been run.
+     *
+     * ```js
+     * function appendTransform(defaults, transform) {
+     *
+     *   // We can't guarantee that the default transformation is an array
+     *   defaults = angular.isArray(defaults) ? defaults : [defaults];
+     *
+     *   // Append the new transformation to the defaults
+     *   return defaults.concat(transform);
+     * }
+     *
+     * $http({
+     *   url: '...',
+     *   method: 'GET',
+     *   transformResponse: appendTransform($http.defaults.transformResponse, function(value) {
+     *     return doTransform(value);
+     *   })
+     * });
+     * ```
+     *
+     *
+     * ## Caching
+     *
+     * To enable caching, set the request configuration `cache` property to `true` (to use default
+     * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}).
+     * When the cache is enabled, `$http` stores the response from the server in the specified
+     * cache. The next time the same request is made, the response is served from the cache without
+     * sending a request to the server.
+     *
+     * Note that even if the response is served from cache, delivery of the data is asynchronous in
+     * the same way that real requests are.
+     *
+     * If there are multiple GET requests for the same URL that should be cached using the same
+     * cache, but the cache is not populated yet, only one request to the server will be made and
+     * the remaining requests will be fulfilled using the response from the first request.
+     *
+     * You can change the default cache to a new object (built with
+     * {@link ng.$cacheFactory `$cacheFactory`}) by updating the
+     * {@link ng.$http#defaults `$http.defaults.cache`} property. All requests who set
+     * their `cache` property to `true` will now use this cache object.
+     *
+     * If you set the default cache to `false` then only requests that specify their own custom
+     * cache object will be cached.
+     *
+     * ## Interceptors
+     *
+     * Before you start creating interceptors, be sure to understand the
+     * {@link ng.$q $q and deferred/promise APIs}.
+     *
+     * For purposes of global error handling, authentication, or any kind of synchronous or
+     * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be
+     * able to intercept requests before they are handed to the server and
+     * responses before they are handed over to the application code that
+     * initiated these requests. The interceptors leverage the {@link ng.$q
+     * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing.
+     *
+     * The interceptors are service factories that are registered with the `$httpProvider` by
+     * adding them to the `$httpProvider.interceptors` array. The factory is called and
+     * injected with dependencies (if specified) and returns the interceptor.
+     *
+     * There are two kinds of interceptors (and two kinds of rejection interceptors):
+     *
+     *   * `request`: interceptors get called with a http {@link $http#usage config} object. The function is free to
+     *     modify the `config` object or create a new one. The function needs to return the `config`
+     *     object directly, or a promise containing the `config` or a new `config` object.
+     *   * `requestError`: interceptor gets called when a previous interceptor threw an error or
+     *     resolved with a rejection.
+     *   * `response`: interceptors get called with http `response` object. The function is free to
+     *     modify the `response` object or create a new one. The function needs to return the `response`
+     *     object directly, or as a promise containing the `response` or a new `response` object.
+     *   * `responseError`: interceptor gets called when a previous interceptor threw an error or
+     *     resolved with a rejection.
+     *
+     *
+     * ```js
+     *   // register the interceptor as a service
+     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
+     *     return {
+     *       // optional method
+     *       'request': function(config) {
+     *         // do something on success
+     *         return config;
+     *       },
+     *
+     *       // optional method
+     *      'requestError': function(rejection) {
+     *         // do something on error
+     *         if (canRecover(rejection)) {
+     *           return responseOrNewPromise
+     *         }
+     *         return $q.reject(rejection);
+     *       },
+     *
+     *
+     *
+     *       // optional method
+     *       'response': function(response) {
+     *         // do something on success
+     *         return response;
+     *       },
+     *
+     *       // optional method
+     *      'responseError': function(rejection) {
+     *         // do something on error
+     *         if (canRecover(rejection)) {
+     *           return responseOrNewPromise
+     *         }
+     *         return $q.reject(rejection);
+     *       }
+     *     };
+     *   });
+     *
+     *   $httpProvider.interceptors.push('myHttpInterceptor');
+     *
+     *
+     *   // alternatively, register the interceptor via an anonymous factory
+     *   $httpProvider.interceptors.push(function($q, dependency1, dependency2) {
+     *     return {
+     *      'request': function(config) {
+     *          // same as above
+     *       },
+     *
+     *       'response': function(response) {
+     *          // same as above
+     *       }
+     *     };
+     *   });
+     * ```
+     *
+     * ## Security Considerations
+     *
+     * When designing web applications, consider security threats from:
+     *
+     * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)
+     * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery)
+     *
+     * Both server and the client must cooperate in order to eliminate these threats. Angular comes
+     * pre-configured with strategies that address these issues, but for this to work backend server
+     * cooperation is required.
+     *
+     * ### JSON Vulnerability Protection
+     *
+     * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)
+     * allows third party website to turn your JSON resource URL into
+     * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To
+     * counter this your server can prefix all JSON requests with following string `")]}',\n"`.
+     * Angular will automatically strip the prefix before processing it as JSON.
+     *
+     * For example if your server needs to return:
+     * ```js
+     * ['one','two']
+     * ```
+     *
+     * which is vulnerable to attack, your server can return:
+     * ```js
+     * )]}',
+     * ['one','two']
+     * ```
+     *
+     * Angular will strip the prefix, before processing the JSON.
+     *
+     *
+     * ### Cross Site Request Forgery (XSRF) Protection
+     *
+     * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is a technique by which
+     * an unauthorized site can gain your user's private data. Angular provides a mechanism
+     * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie
+     * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only
+     * JavaScript that runs on your domain could read the cookie, your server can be assured that
+     * the XHR came from JavaScript running on your domain. The header will not be set for
+     * cross-domain requests.
+     *
+     * To take advantage of this, your server needs to set a token in a JavaScript readable session
+     * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the
+     * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure
+     * that only JavaScript running on your domain could have sent the request. The token must be
+     * unique for each user and must be verifiable by the server (to prevent the JavaScript from
+     * making up its own tokens). We recommend that the token is a digest of your site's
+     * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography&#41;)
+     * for added security.
+     *
+     * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName
+     * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time,
+     * or the per-request config object.
+     *
+     * In order to prevent collisions in environments where multiple Angular apps share the
+     * same domain or subdomain, we recommend that each application uses unique cookie name.
+     *
+     * @param {object} config Object describing the request to be made and how it should be
+     *    processed. The object has following properties:
+     *
+     *    - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc)
+     *    - **url** – `{string}` – Absolute or relative URL of the resource that is being requested.
+     *    - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be serialized
+     *      with the `paramSerializer` and appended as GET parameters.
+     *    - **data** – `{string|Object}` – Data to be sent as the request message data.
+     *    - **headers** – `{Object}` – Map of strings or functions which return strings representing
+     *      HTTP headers to send to the server. If the return value of a function is null, the
+     *      header will not be sent. Functions accept a config object as an argument.
+     *    - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token.
+     *    - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token.
+     *    - **transformRequest** –
+     *      `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
+     *      transform function or an array of such functions. The transform function takes the http
+     *      request body and headers and returns its transformed (typically serialized) version.
+     *      See {@link ng.$http#overriding-the-default-transformations-per-request
+     *      Overriding the Default Transformations}
+     *    - **transformResponse** –
+     *      `{function(data, headersGetter, status)|Array.<function(data, headersGetter, status)>}` –
+     *      transform function or an array of such functions. The transform function takes the http
+     *      response body, headers and status and returns its transformed (typically deserialized) version.
+     *      See {@link ng.$http#overriding-the-default-transformations-per-request
+     *      Overriding the Default TransformationjqLiks}
+     *    - **paramSerializer** - `{string|function(Object<string,string>):string}` - A function used to
+     *      prepare the string representation of request parameters (specified as an object).
+     *      If specified as string, it is interpreted as function registered with the
+     *      {@link $injector $injector}, which means you can create your own serializer
+     *      by registering it as a {@link auto.$provide#service service}.
+     *      The default serializer is the {@link $httpParamSerializer $httpParamSerializer};
+     *      alternatively, you can use the {@link $httpParamSerializerJQLike $httpParamSerializerJQLike}
+     *    - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the
+     *      GET request, otherwise if a cache instance built with
+     *      {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
+     *      caching.
+     *    - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise}
+     *      that should abort the request when resolved.
+     *    - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the
+     *      XHR object. See [requests with credentials](https://developer.mozilla.org/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials)
+     *      for more information.
+     *    - **responseType** - `{string}` - see
+     *      [XMLHttpRequest.responseType](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#xmlhttprequest-responsetype).
+     *
+     * @returns {HttpPromise} Returns a {@link ng.$q `Promise}` that will be resolved to a response object
+     *                        when the request succeeds or fails.
+     *
+     *
+     * @property {Array.<Object>} pendingRequests Array of config objects for currently pending
+     *   requests. This is primarily meant to be used for debugging purposes.
+     *
+     *
+     * @example
+<example module="httpExample">
+<file name="index.html">
+  <div ng-controller="FetchController">
+    <select ng-model="method" aria-label="Request method">
+      <option>GET</option>
+      <option>JSONP</option>
+    </select>
+    <input type="text" ng-model="url" size="80" aria-label="URL" />
+    <button id="fetchbtn" ng-click="fetch()">fetch</button><br>
+    <button id="samplegetbtn" ng-click="updateModel('GET', 'http-hello.html')">Sample GET</button>
+    <button id="samplejsonpbtn"
+      ng-click="updateModel('JSONP',
+                    'https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')">
+      Sample JSONP
+    </button>
+    <button id="invalidjsonpbtn"
+      ng-click="updateModel('JSONP', 'https://angularjs.org/doesntexist&callback=JSON_CALLBACK')">
+        Invalid JSONP
+      </button>
+    <pre>http status code: {{status}}</pre>
+    <pre>http response data: {{data}}</pre>
+  </div>
+</file>
+<file name="script.js">
+  angular.module('httpExample', [])
+    .controller('FetchController', ['$scope', '$http', '$templateCache',
+      function($scope, $http, $templateCache) {
+        $scope.method = 'GET';
+        $scope.url = 'http-hello.html';
+
+        $scope.fetch = function() {
+          $scope.code = null;
+          $scope.response = null;
+
+          $http({method: $scope.method, url: $scope.url, cache: $templateCache}).
+            then(function(response) {
+              $scope.status = response.status;
+              $scope.data = response.data;
+            }, function(response) {
+              $scope.data = response.data || "Request failed";
+              $scope.status = response.status;
+          });
+        };
+
+        $scope.updateModel = function(method, url) {
+          $scope.method = method;
+          $scope.url = url;
+        };
+      }]);
+</file>
+<file name="http-hello.html">
+  Hello, $http!
+</file>
+<file name="protractor.js" type="protractor">
+  var status = element(by.binding('status'));
+  var data = element(by.binding('data'));
+  var fetchBtn = element(by.id('fetchbtn'));
+  var sampleGetBtn = element(by.id('samplegetbtn'));
+  var sampleJsonpBtn = element(by.id('samplejsonpbtn'));
+  var invalidJsonpBtn = element(by.id('invalidjsonpbtn'));
+
+  it('should make an xhr GET request', function() {
+    sampleGetBtn.click();
+    fetchBtn.click();
+    expect(status.getText()).toMatch('200');
+    expect(data.getText()).toMatch(/Hello, \$http!/);
+  });
+
+// Commented out due to flakes. See https://github.com/angular/angular.js/issues/9185
+// it('should make a JSONP request to angularjs.org', function() {
+//   sampleJsonpBtn.click();
+//   fetchBtn.click();
+//   expect(status.getText()).toMatch('200');
+//   expect(data.getText()).toMatch(/Super Hero!/);
+// });
+
+  it('should make JSONP request to invalid URL and invoke the error handler',
+      function() {
+    invalidJsonpBtn.click();
+    fetchBtn.click();
+    expect(status.getText()).toMatch('0');
+    expect(data.getText()).toMatch('Request failed');
+  });
+</file>
+</example>
+     */
+    function $http(requestConfig) {
+
+      if (!angular.isObject(requestConfig)) {
+        throw minErr('$http')('badreq', 'Http request configuration must be an object.  Received: {0}', requestConfig);
+      }
+
+      var config = extend({
+        method: 'get',
+        transformRequest: defaults.transformRequest,
+        transformResponse: defaults.transformResponse,
+        paramSerializer: defaults.paramSerializer
+      }, requestConfig);
+
+      config.headers = mergeHeaders(requestConfig);
+      config.method = uppercase(config.method);
+      config.paramSerializer = isString(config.paramSerializer) ?
+        $injector.get(config.paramSerializer) : config.paramSerializer;
+
+      var serverRequest = function(config) {
+        var headers = config.headers;
+        var reqData = transformData(config.data, headersGetter(headers), undefined, config.transformRequest);
+
+        // strip content-type if data is undefined
+        if (isUndefined(reqData)) {
+          forEach(headers, function(value, header) {
+            if (lowercase(header) === 'content-type') {
+                delete headers[header];
+            }
+          });
+        }
+
+        if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {
+          config.withCredentials = defaults.withCredentials;
+        }
+
+        // send request
+        return sendReq(config, reqData).then(transformResponse, transformResponse);
+      };
+
+      var chain = [serverRequest, undefined];
+      var promise = $q.when(config);
+
+      // apply interceptors
+      forEach(reversedInterceptors, function(interceptor) {
+        if (interceptor.request || interceptor.requestError) {
+          chain.unshift(interceptor.request, interceptor.requestError);
+        }
+        if (interceptor.response || interceptor.responseError) {
+          chain.push(interceptor.response, interceptor.responseError);
+        }
+      });
+
+      while (chain.length) {
+        var thenFn = chain.shift();
+        var rejectFn = chain.shift();
+
+        promise = promise.then(thenFn, rejectFn);
+      }
+
+      if (useLegacyPromise) {
+        promise.success = function(fn) {
+          assertArgFn(fn, 'fn');
+
+          promise.then(function(response) {
+            fn(response.data, response.status, response.headers, config);
+          });
+          return promise;
+        };
+
+        promise.error = function(fn) {
+          assertArgFn(fn, 'fn');
+
+          promise.then(null, function(response) {
+            fn(response.data, response.status, response.headers, config);
+          });
+          return promise;
+        };
+      } else {
+        promise.success = $httpMinErrLegacyFn('success');
+        promise.error = $httpMinErrLegacyFn('error');
+      }
+
+      return promise;
+
+      function transformResponse(response) {
+        // make a copy since the response must be cacheable
+        var resp = extend({}, response);
+        resp.data = transformData(response.data, response.headers, response.status,
+                                  config.transformResponse);
+        return (isSuccess(response.status))
+          ? resp
+          : $q.reject(resp);
+      }
+
+      function executeHeaderFns(headers, config) {
+        var headerContent, processedHeaders = {};
+
+        forEach(headers, function(headerFn, header) {
+          if (isFunction(headerFn)) {
+            headerContent = headerFn(config);
+            if (headerContent != null) {
+              processedHeaders[header] = headerContent;
+            }
+          } else {
+            processedHeaders[header] = headerFn;
+          }
+        });
+
+        return processedHeaders;
+      }
+
+      function mergeHeaders(config) {
+        var defHeaders = defaults.headers,
+            reqHeaders = extend({}, config.headers),
+            defHeaderName, lowercaseDefHeaderName, reqHeaderName;
+
+        defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]);
+
+        // using for-in instead of forEach to avoid unecessary iteration after header has been found
+        defaultHeadersIteration:
+        for (defHeaderName in defHeaders) {
+          lowercaseDefHeaderName = lowercase(defHeaderName);
+
+          for (reqHeaderName in reqHeaders) {
+            if (lowercase(reqHeaderName) === lowercaseDefHeaderName) {
+              continue defaultHeadersIteration;
+            }
+          }
+
+          reqHeaders[defHeaderName] = defHeaders[defHeaderName];
+        }
+
+        // execute if header value is a function for merged headers
+        return executeHeaderFns(reqHeaders, shallowCopy(config));
+      }
+    }
+
+    $http.pendingRequests = [];
+
+    /**
+     * @ngdoc method
+     * @name $http#get
+     *
+     * @description
+     * Shortcut method to perform `GET` request.
+     *
+     * @param {string} url Relative or absolute URL specifying the destination of the request
+     * @param {Object=} config Optional configuration object
+     * @returns {HttpPromise} Future object
+     */
+
+    /**
+     * @ngdoc method
+     * @name $http#delete
+     *
+     * @description
+     * Shortcut method to perform `DELETE` request.
+     *
+     * @param {string} url Relative or absolute URL specifying the destination of the request
+     * @param {Object=} config Optional configuration object
+     * @returns {HttpPromise} Future object
+     */
+
+    /**
+     * @ngdoc method
+     * @name $http#head
+     *
+     * @description
+     * Shortcut method to perform `HEAD` request.
+     *
+     * @param {string} url Relative or absolute URL specifying the destination of the request
+     * @param {Object=} config Optional configuration object
+     * @returns {HttpPromise} Future object
+     */
+
+    /**
+     * @ngdoc method
+     * @name $http#jsonp
+     *
+     * @description
+     * Shortcut method to perform `JSONP` request.
+     *
+     * @param {string} url Relative or absolute URL specifying the destination of the request.
+     *                     The name of the callback should be the string `JSON_CALLBACK`.
+     * @param {Object=} config Optional configuration object
+     * @returns {HttpPromise} Future object
+     */
+    createShortMethods('get', 'delete', 'head', 'jsonp');
+
+    /**
+     * @ngdoc method
+     * @name $http#post
+     *
+     * @description
+     * Shortcut method to perform `POST` request.
+     *
+     * @param {string} url Relative or absolute URL specifying the destination of the request
+     * @param {*} data Request content
+     * @param {Object=} config Optional configuration object
+     * @returns {HttpPromise} Future object
+     */
+
+    /**
+     * @ngdoc method
+     * @name $http#put
+     *
+     * @description
+     * Shortcut method to perform `PUT` request.
+     *
+     * @param {string} url Relative or absolute URL specifying the destination of the request
+     * @param {*} data Request content
+     * @param {Object=} config Optional configuration object
+     * @returns {HttpPromise} Future object
+     */
+
+     /**
+      * @ngdoc method
+      * @name $http#patch
+      *
+      * @description
+      * Shortcut method to perform `PATCH` request.
+      *
+      * @param {string} url Relative or absolute URL specifying the destination of the request
+      * @param {*} data Request content
+      * @param {Object=} config Optional configuration object
+      * @returns {HttpPromise} Future object
+      */
+    createShortMethodsWithData('post', 'put', 'patch');
+
+        /**
+         * @ngdoc property
+         * @name $http#defaults
+         *
+         * @description
+         * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of
+         * default headers, withCredentials as well as request and response transformations.
+         *
+         * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above.
+         */
+    $http.defaults = defaults;
+
+
+    return $http;
+
+
+    function createShortMethods(names) {
+      forEach(arguments, function(name) {
+        $http[name] = function(url, config) {
+          return $http(extend({}, config || {}, {
+            method: name,
+            url: url
+          }));
+        };
+      });
+    }
+
+
+    function createShortMethodsWithData(name) {
+      forEach(arguments, function(name) {
+        $http[name] = function(url, data, config) {
+          return $http(extend({}, config || {}, {
+            method: name,
+            url: url,
+            data: data
+          }));
+        };
+      });
+    }
+
+
+    /**
+     * Makes the request.
+     *
+     * !!! ACCESSES CLOSURE VARS:
+     * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests
+     */
+    function sendReq(config, reqData) {
+      var deferred = $q.defer(),
+          promise = deferred.promise,
+          cache,
+          cachedResp,
+          reqHeaders = config.headers,
+          url = buildUrl(config.url, config.paramSerializer(config.params));
+
+      $http.pendingRequests.push(config);
+      promise.then(removePendingReq, removePendingReq);
+
+
+      if ((config.cache || defaults.cache) && config.cache !== false &&
+          (config.method === 'GET' || config.method === 'JSONP')) {
+        cache = isObject(config.cache) ? config.cache
+              : isObject(defaults.cache) ? defaults.cache
+              : defaultCache;
+      }
+
+      if (cache) {
+        cachedResp = cache.get(url);
+        if (isDefined(cachedResp)) {
+          if (isPromiseLike(cachedResp)) {
+            // cached request has already been sent, but there is no response yet
+            cachedResp.then(resolvePromiseWithResult, resolvePromiseWithResult);
+          } else {
+            // serving from cache
+            if (isArray(cachedResp)) {
+              resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3]);
+            } else {
+              resolvePromise(cachedResp, 200, {}, 'OK');
+            }
+          }
+        } else {
+          // put the promise for the non-transformed response into cache as a placeholder
+          cache.put(url, promise);
+        }
+      }
+
+
+      // if we won't have the response in cache, set the xsrf headers and
+      // send the request to the backend
+      if (isUndefined(cachedResp)) {
+        var xsrfValue = urlIsSameOrigin(config.url)
+            ? $$cookieReader()[config.xsrfCookieName || defaults.xsrfCookieName]
+            : undefined;
+        if (xsrfValue) {
+          reqHeaders[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue;
+        }
+
+        $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,
+            config.withCredentials, config.responseType);
+      }
+
+      return promise;
+
+
+      /**
+       * Callback registered to $httpBackend():
+       *  - caches the response if desired
+       *  - resolves the raw $http promise
+       *  - calls $apply
+       */
+      function done(status, response, headersString, statusText) {
+        if (cache) {
+          if (isSuccess(status)) {
+            cache.put(url, [status, response, parseHeaders(headersString), statusText]);
+          } else {
+            // remove promise from the cache
+            cache.remove(url);
+          }
+        }
+
+        function resolveHttpPromise() {
+          resolvePromise(response, status, headersString, statusText);
+        }
+
+        if (useApplyAsync) {
+          $rootScope.$applyAsync(resolveHttpPromise);
+        } else {
+          resolveHttpPromise();
+          if (!$rootScope.$$phase) $rootScope.$apply();
+        }
+      }
+
+
+      /**
+       * Resolves the raw $http promise.
+       */
+      function resolvePromise(response, status, headers, statusText) {
+        //status: HTTP response status code, 0, -1 (aborted by timeout / promise)
+        status = status >= -1 ? status : 0;
+
+        (isSuccess(status) ? deferred.resolve : deferred.reject)({
+          data: response,
+          status: status,
+          headers: headersGetter(headers),
+          config: config,
+          statusText: statusText
+        });
+      }
+
+      function resolvePromiseWithResult(result) {
+        resolvePromise(result.data, result.status, shallowCopy(result.headers()), result.statusText);
+      }
+
+      function removePendingReq() {
+        var idx = $http.pendingRequests.indexOf(config);
+        if (idx !== -1) $http.pendingRequests.splice(idx, 1);
+      }
+    }
+
+
+    function buildUrl(url, serializedParams) {
+      if (serializedParams.length > 0) {
+        url += ((url.indexOf('?') == -1) ? '?' : '&') + serializedParams;
+      }
+      return url;
+    }
+  }];
+}
+
+/**
+ * @ngdoc service
+ * @name $xhrFactory
+ *
+ * @description
+ * Factory function used to create XMLHttpRequest objects.
+ *
+ * Replace or decorate this service to create your own custom XMLHttpRequest objects.
+ *
+ * ```
+ * angular.module('myApp', [])
+ * .factory('$xhrFactory', function() {
+ *   return function createXhr(method, url) {
+ *     return new window.XMLHttpRequest({mozSystem: true});
+ *   };
+ * });
+ * ```
+ *
+ * @param {string} method HTTP method of the request (GET, POST, PUT, ..)
+ * @param {string} url URL of the request.
+ */
+function $xhrFactoryProvider() {
+  this.$get = function() {
+    return function createXhr() {
+      return new window.XMLHttpRequest();
+    };
+  };
+}
+
+/**
+ * @ngdoc service
+ * @name $httpBackend
+ * @requires $window
+ * @requires $document
+ * @requires $xhrFactory
+ *
+ * @description
+ * HTTP backend used by the {@link ng.$http service} that delegates to
+ * XMLHttpRequest object or JSONP and deals with browser incompatibilities.
+ *
+ * You should never need to use this service directly, instead use the higher-level abstractions:
+ * {@link ng.$http $http} or {@link ngResource.$resource $resource}.
+ *
+ * During testing this implementation is swapped with {@link ngMock.$httpBackend mock
+ * $httpBackend} which can be trained with responses.
+ */
+function $HttpBackendProvider() {
+  this.$get = ['$browser', '$window', '$document', '$xhrFactory', function($browser, $window, $document, $xhrFactory) {
+    return createHttpBackend($browser, $xhrFactory, $browser.defer, $window.angular.callbacks, $document[0]);
+  }];
+}
+
+function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) {
+  // TODO(vojta): fix the signature
+  return function(method, url, post, callback, headers, timeout, withCredentials, responseType) {
+    $browser.$$incOutstandingRequestCount();
+    url = url || $browser.url();
+
+    if (lowercase(method) == 'jsonp') {
+      var callbackId = '_' + (callbacks.counter++).toString(36);
+      callbacks[callbackId] = function(data) {
+        callbacks[callbackId].data = data;
+        callbacks[callbackId].called = true;
+      };
+
+      var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),
+          callbackId, function(status, text) {
+        completeRequest(callback, status, callbacks[callbackId].data, "", text);
+        callbacks[callbackId] = noop;
+      });
+    } else {
+
+      var xhr = createXhr(method, url);
+
+      xhr.open(method, url, true);
+      forEach(headers, function(value, key) {
+        if (isDefined(value)) {
+            xhr.setRequestHeader(key, value);
+        }
+      });
+
+      xhr.onload = function requestLoaded() {
+        var statusText = xhr.statusText || '';
+
+        // responseText is the old-school way of retrieving response (supported by IE9)
+        // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)
+        var response = ('response' in xhr) ? xhr.response : xhr.responseText;
+
+        // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)
+        var status = xhr.status === 1223 ? 204 : xhr.status;
+
+        // fix status code when it is 0 (0 status is undocumented).
+        // Occurs when accessing file resources or on Android 4.1 stock browser
+        // while retrieving files from application cache.
+        if (status === 0) {
+          status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0;
+        }
+
+        completeRequest(callback,
+            status,
+            response,
+            xhr.getAllResponseHeaders(),
+            statusText);
+      };
+
+      var requestError = function() {
+        // The response is always empty
+        // See https://xhr.spec.whatwg.org/#request-error-steps and https://fetch.spec.whatwg.org/#concept-network-error
+        completeRequest(callback, -1, null, null, '');
+      };
+
+      xhr.onerror = requestError;
+      xhr.onabort = requestError;
+
+      if (withCredentials) {
+        xhr.withCredentials = true;
+      }
+
+      if (responseType) {
+        try {
+          xhr.responseType = responseType;
+        } catch (e) {
+          // WebKit added support for the json responseType value on 09/03/2013
+          // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are
+          // known to throw when setting the value "json" as the response type. Other older
+          // browsers implementing the responseType
+          //
+          // The json response type can be ignored if not supported, because JSON payloads are
+          // parsed on the client-side regardless.
+          if (responseType !== 'json') {
+            throw e;
+          }
+        }
+      }
+
+      xhr.send(isUndefined(post) ? null : post);
+    }
+
+    if (timeout > 0) {
+      var timeoutId = $browserDefer(timeoutRequest, timeout);
+    } else if (isPromiseLike(timeout)) {
+      timeout.then(timeoutRequest);
+    }
+
+
+    function timeoutRequest() {
+      jsonpDone && jsonpDone();
+      xhr && xhr.abort();
+    }
+
+    function completeRequest(callback, status, response, headersString, statusText) {
+      // cancel timeout and subsequent timeout promise resolution
+      if (isDefined(timeoutId)) {
+        $browserDefer.cancel(timeoutId);
+      }
+      jsonpDone = xhr = null;
+
+      callback(status, response, headersString, statusText);
+      $browser.$$completeOutstandingRequest(noop);
+    }
+  };
+
+  function jsonpReq(url, callbackId, done) {
+    // we can't use jQuery/jqLite here because jQuery does crazy stuff with script elements, e.g.:
+    // - fetches local scripts via XHR and evals them
+    // - adds and immediately removes script elements from the document
+    var script = rawDocument.createElement('script'), callback = null;
+    script.type = "text/javascript";
+    script.src = url;
+    script.async = true;
+
+    callback = function(event) {
+      removeEventListenerFn(script, "load", callback);
+      removeEventListenerFn(script, "error", callback);
+      rawDocument.body.removeChild(script);
+      script = null;
+      var status = -1;
+      var text = "unknown";
+
+      if (event) {
+        if (event.type === "load" && !callbacks[callbackId].called) {
+          event = { type: "error" };
+        }
+        text = event.type;
+        status = event.type === "error" ? 404 : 200;
+      }
+
+      if (done) {
+        done(status, text);
+      }
+    };
+
+    addEventListenerFn(script, "load", callback);
+    addEventListenerFn(script, "error", callback);
+    rawDocument.body.appendChild(script);
+    return callback;
+  }
+}
+
+var $interpolateMinErr = angular.$interpolateMinErr = minErr('$interpolate');
+$interpolateMinErr.throwNoconcat = function(text) {
+  throw $interpolateMinErr('noconcat',
+      "Error while interpolating: {0}\nStrict Contextual Escaping disallows " +
+      "interpolations that concatenate multiple expressions when a trusted value is " +
+      "required.  See http://docs.angularjs.org/api/ng.$sce", text);
+};
+
+$interpolateMinErr.interr = function(text, err) {
+  return $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text, err.toString());
+};
+
+/**
+ * @ngdoc provider
+ * @name $interpolateProvider
+ *
+ * @description
+ *
+ * Used for configuring the interpolation markup. Defaults to `{{` and `}}`.
+ *
+ * @example
+<example module="customInterpolationApp">
+<file name="index.html">
+<script>
+  var customInterpolationApp = angular.module('customInterpolationApp', []);
+
+  customInterpolationApp.config(function($interpolateProvider) {
+    $interpolateProvider.startSymbol('//');
+    $interpolateProvider.endSymbol('//');
+  });
+
+
+  customInterpolationApp.controller('DemoController', function() {
+      this.label = "This binding is brought you by // interpolation symbols.";
+  });
+</script>
+<div ng-app="App" ng-controller="DemoController as demo">
+    //demo.label//
+</div>
+</file>
+<file name="protractor.js" type="protractor">
+  it('should interpolate binding with custom symbols', function() {
+    expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.');
+  });
+</file>
+</example>
+ */
+function $InterpolateProvider() {
+  var startSymbol = '{{';
+  var endSymbol = '}}';
+
+  /**
+   * @ngdoc method
+   * @name $interpolateProvider#startSymbol
+   * @description
+   * Symbol to denote start of expression in the interpolated string. Defaults to `{{`.
+   *
+   * @param {string=} value new value to set the starting symbol to.
+   * @returns {string|self} Returns the symbol when used as getter and self if used as setter.
+   */
+  this.startSymbol = function(value) {
+    if (value) {
+      startSymbol = value;
+      return this;
+    } else {
+      return startSymbol;
+    }
+  };
+
+  /**
+   * @ngdoc method
+   * @name $interpolateProvider#endSymbol
+   * @description
+   * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.
+   *
+   * @param {string=} value new value to set the ending symbol to.
+   * @returns {string|self} Returns the symbol when used as getter and self if used as setter.
+   */
+  this.endSymbol = function(value) {
+    if (value) {
+      endSymbol = value;
+      return this;
+    } else {
+      return endSymbol;
+    }
+  };
+
+
+  this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) {
+    var startSymbolLength = startSymbol.length,
+        endSymbolLength = endSymbol.length,
+        escapedStartRegexp = new RegExp(startSymbol.replace(/./g, escape), 'g'),
+        escapedEndRegexp = new RegExp(endSymbol.replace(/./g, escape), 'g');
+
+    function escape(ch) {
+      return '\\\\\\' + ch;
+    }
+
+    function unescapeText(text) {
+      return text.replace(escapedStartRegexp, startSymbol).
+        replace(escapedEndRegexp, endSymbol);
+    }
+
+    function stringify(value) {
+      if (value == null) { // null || undefined
+        return '';
+      }
+      switch (typeof value) {
+        case 'string':
+          break;
+        case 'number':
+          value = '' + value;
+          break;
+        default:
+          value = toJson(value);
+      }
+
+      return value;
+    }
+
+    /**
+     * @ngdoc service
+     * @name $interpolate
+     * @kind function
+     *
+     * @requires $parse
+     * @requires $sce
+     *
+     * @description
+     *
+     * Compiles a string with markup into an interpolation function. This service is used by the
+     * HTML {@link ng.$compile $compile} service for data binding. See
+     * {@link ng.$interpolateProvider $interpolateProvider} for configuring the
+     * interpolation markup.
+     *
+     *
+     * ```js
+     *   var $interpolate = ...; // injected
+     *   var exp = $interpolate('Hello {{name | uppercase}}!');
+     *   expect(exp({name:'Angular'})).toEqual('Hello ANGULAR!');
+     * ```
+     *
+     * `$interpolate` takes an optional fourth argument, `allOrNothing`. If `allOrNothing` is
+     * `true`, the interpolation function will return `undefined` unless all embedded expressions
+     * evaluate to a value other than `undefined`.
+     *
+     * ```js
+     *   var $interpolate = ...; // injected
+     *   var context = {greeting: 'Hello', name: undefined };
+     *
+     *   // default "forgiving" mode
+     *   var exp = $interpolate('{{greeting}} {{name}}!');
+     *   expect(exp(context)).toEqual('Hello !');
+     *
+     *   // "allOrNothing" mode
+     *   exp = $interpolate('{{greeting}} {{name}}!', false, null, true);
+     *   expect(exp(context)).toBeUndefined();
+     *   context.name = 'Angular';
+     *   expect(exp(context)).toEqual('Hello Angular!');
+     * ```
+     *
+     * `allOrNothing` is useful for interpolating URLs. `ngSrc` and `ngSrcset` use this behavior.
+     *
+     * ####Escaped Interpolation
+     * $interpolate provides a mechanism for escaping interpolation markers. Start and end markers
+     * can be escaped by preceding each of their characters with a REVERSE SOLIDUS U+005C (backslash).
+     * It will be rendered as a regular start/end marker, and will not be interpreted as an expression
+     * or binding.
+     *
+     * This enables web-servers to prevent script injection attacks and defacing attacks, to some
+     * degree, while also enabling code examples to work without relying on the
+     * {@link ng.directive:ngNonBindable ngNonBindable} directive.
+     *
+     * **For security purposes, it is strongly encouraged that web servers escape user-supplied data,
+     * replacing angle brackets (&lt;, &gt;) with &amp;lt; and &amp;gt; respectively, and replacing all
+     * interpolation start/end markers with their escaped counterparts.**
+     *
+     * Escaped interpolation markers are only replaced with the actual interpolation markers in rendered
+     * output when the $interpolate service processes the text. So, for HTML elements interpolated
+     * by {@link ng.$compile $compile}, or otherwise interpolated with the `mustHaveExpression` parameter
+     * set to `true`, the interpolated text must contain an unescaped interpolation expression. As such,
+     * this is typically useful only when user-data is used in rendering a template from the server, or
+     * when otherwise untrusted data is used by a directive.
+     *
+     * <example>
+     *  <file name="index.html">
+     *    <div ng-init="username='A user'">
+     *      <p ng-init="apptitle='Escaping demo'">{{apptitle}}: \{\{ username = "defaced value"; \}\}
+     *        </p>
+     *      <p><strong>{{username}}</strong> attempts to inject code which will deface the
+     *        application, but fails to accomplish their task, because the server has correctly
+     *        escaped the interpolation start/end markers with REVERSE SOLIDUS U+005C (backslash)
+     *        characters.</p>
+     *      <p>Instead, the result of the attempted script injection is visible, and can be removed
+     *        from the database by an administrator.</p>
+     *    </div>
+     *  </file>
+     * </example>
+     *
+     * @param {string} text The text with markup to interpolate.
+     * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have
+     *    embedded expression in order to return an interpolation function. Strings with no
+     *    embedded expression will return null for the interpolation function.
+     * @param {string=} trustedContext when provided, the returned function passes the interpolated
+     *    result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult,
+     *    trustedContext)} before returning it.  Refer to the {@link ng.$sce $sce} service that
+     *    provides Strict Contextual Escaping for details.
+     * @param {boolean=} allOrNothing if `true`, then the returned function returns undefined
+     *    unless all embedded expressions evaluate to a value other than `undefined`.
+     * @returns {function(context)} an interpolation function which is used to compute the
+     *    interpolated string. The function has these parameters:
+     *
+     * - `context`: evaluation context for all expressions embedded in the interpolated text
+     */
+    function $interpolate(text, mustHaveExpression, trustedContext, allOrNothing) {
+      allOrNothing = !!allOrNothing;
+      var startIndex,
+          endIndex,
+          index = 0,
+          expressions = [],
+          parseFns = [],
+          textLength = text.length,
+          exp,
+          concat = [],
+          expressionPositions = [];
+
+      while (index < textLength) {
+        if (((startIndex = text.indexOf(startSymbol, index)) != -1) &&
+             ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1)) {
+          if (index !== startIndex) {
+            concat.push(unescapeText(text.substring(index, startIndex)));
+          }
+          exp = text.substring(startIndex + startSymbolLength, endIndex);
+          expressions.push(exp);
+          parseFns.push($parse(exp, parseStringifyInterceptor));
+          index = endIndex + endSymbolLength;
+          expressionPositions.push(concat.length);
+          concat.push('');
+        } else {
+          // we did not find an interpolation, so we have to add the remainder to the separators array
+          if (index !== textLength) {
+            concat.push(unescapeText(text.substring(index)));
+          }
+          break;
+        }
+      }
+
+      // Concatenating expressions makes it hard to reason about whether some combination of
+      // concatenated values are unsafe to use and could easily lead to XSS.  By requiring that a
+      // single expression be used for iframe[src], object[src], etc., we ensure that the value
+      // that's used is assigned or constructed by some JS code somewhere that is more testable or
+      // make it obvious that you bound the value to some user controlled value.  This helps reduce
+      // the load when auditing for XSS issues.
+      if (trustedContext && concat.length > 1) {
+          $interpolateMinErr.throwNoconcat(text);
+      }
+
+      if (!mustHaveExpression || expressions.length) {
+        var compute = function(values) {
+          for (var i = 0, ii = expressions.length; i < ii; i++) {
+            if (allOrNothing && isUndefined(values[i])) return;
+            concat[expressionPositions[i]] = values[i];
+          }
+          return concat.join('');
+        };
+
+        var getValue = function(value) {
+          return trustedContext ?
+            $sce.getTrusted(trustedContext, value) :
+            $sce.valueOf(value);
+        };
+
+        return extend(function interpolationFn(context) {
+            var i = 0;
+            var ii = expressions.length;
+            var values = new Array(ii);
+
+            try {
+              for (; i < ii; i++) {
+                values[i] = parseFns[i](context);
+              }
+
+              return compute(values);
+            } catch (err) {
+              $exceptionHandler($interpolateMinErr.interr(text, err));
+            }
+
+          }, {
+          // all of these properties are undocumented for now
+          exp: text, //just for compatibility with regular watchers created via $watch
+          expressions: expressions,
+          $$watchDelegate: function(scope, listener) {
+            var lastValue;
+            return scope.$watchGroup(parseFns, function interpolateFnWatcher(values, oldValues) {
+              var currValue = compute(values);
+              if (isFunction(listener)) {
+                listener.call(this, currValue, values !== oldValues ? lastValue : currValue, scope);
+              }
+              lastValue = currValue;
+            });
+          }
+        });
+      }
+
+      function parseStringifyInterceptor(value) {
+        try {
+          value = getValue(value);
+          return allOrNothing && !isDefined(value) ? value : stringify(value);
+        } catch (err) {
+          $exceptionHandler($interpolateMinErr.interr(text, err));
+        }
+      }
+    }
+
+
+    /**
+     * @ngdoc method
+     * @name $interpolate#startSymbol
+     * @description
+     * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`.
+     *
+     * Use {@link ng.$interpolateProvider#startSymbol `$interpolateProvider.startSymbol`} to change
+     * the symbol.
+     *
+     * @returns {string} start symbol.
+     */
+    $interpolate.startSymbol = function() {
+      return startSymbol;
+    };
+
+
+    /**
+     * @ngdoc method
+     * @name $interpolate#endSymbol
+     * @description
+     * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.
+     *
+     * Use {@link ng.$interpolateProvider#endSymbol `$interpolateProvider.endSymbol`} to change
+     * the symbol.
+     *
+     * @returns {string} end symbol.
+     */
+    $interpolate.endSymbol = function() {
+      return endSymbol;
+    };
+
+    return $interpolate;
+  }];
+}
+
+function $IntervalProvider() {
+  this.$get = ['$rootScope', '$window', '$q', '$$q',
+       function($rootScope,   $window,   $q,   $$q) {
+    var intervals = {};
+
+
+     /**
+      * @ngdoc service
+      * @name $interval
+      *
+      * @description
+      * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay`
+      * milliseconds.
+      *
+      * The return value of registering an interval function is a promise. This promise will be
+      * notified upon each tick of the interval, and will be resolved after `count` iterations, or
+      * run indefinitely if `count` is not defined. The value of the notification will be the
+      * number of iterations that have run.
+      * To cancel an interval, call `$interval.cancel(promise)`.
+      *
+      * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to
+      * move forward by `millis` milliseconds and trigger any functions scheduled to run in that
+      * time.
+      *
+      * <div class="alert alert-warning">
+      * **Note**: Intervals created by this service must be explicitly destroyed when you are finished
+      * with them.  In particular they are not automatically destroyed when a controller's scope or a
+      * directive's element are destroyed.
+      * You should take this into consideration and make sure to always cancel the interval at the
+      * appropriate moment.  See the example below for more details on how and when to do this.
+      * </div>
+      *
+      * @param {function()} fn A function that should be called repeatedly.
+      * @param {number} delay Number of milliseconds between each function call.
+      * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat
+      *   indefinitely.
+      * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
+      *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.
+      * @param {...*=} Pass additional parameters to the executed function.
+      * @returns {promise} A promise which will be notified on each iteration.
+      *
+      * @example
+      * <example module="intervalExample">
+      * <file name="index.html">
+      *   <script>
+      *     angular.module('intervalExample', [])
+      *       .controller('ExampleController', ['$scope', '$interval',
+      *         function($scope, $interval) {
+      *           $scope.format = 'M/d/yy h:mm:ss a';
+      *           $scope.blood_1 = 100;
+      *           $scope.blood_2 = 120;
+      *
+      *           var stop;
+      *           $scope.fight = function() {
+      *             // Don't start a new fight if we are already fighting
+      *             if ( angular.isDefined(stop) ) return;
+      *
+      *             stop = $interval(function() {
+      *               if ($scope.blood_1 > 0 && $scope.blood_2 > 0) {
+      *                 $scope.blood_1 = $scope.blood_1 - 3;
+      *                 $scope.blood_2 = $scope.blood_2 - 4;
+      *               } else {
+      *                 $scope.stopFight();
+      *               }
+      *             }, 100);
+      *           };
+      *
+      *           $scope.stopFight = function() {
+      *             if (angular.isDefined(stop)) {
+      *               $interval.cancel(stop);
+      *               stop = undefined;
+      *             }
+      *           };
+      *
+      *           $scope.resetFight = function() {
+      *             $scope.blood_1 = 100;
+      *             $scope.blood_2 = 120;
+      *           };
+      *
+      *           $scope.$on('$destroy', function() {
+      *             // Make sure that the interval is destroyed too
+      *             $scope.stopFight();
+      *           });
+      *         }])
+      *       // Register the 'myCurrentTime' directive factory method.
+      *       // We inject $interval and dateFilter service since the factory method is DI.
+      *       .directive('myCurrentTime', ['$interval', 'dateFilter',
+      *         function($interval, dateFilter) {
+      *           // return the directive link function. (compile function not needed)
+      *           return function(scope, element, attrs) {
+      *             var format,  // date format
+      *                 stopTime; // so that we can cancel the time updates
+      *
+      *             // used to update the UI
+      *             function updateTime() {
+      *               element.text(dateFilter(new Date(), format));
+      *             }
+      *
+      *             // watch the expression, and update the UI on change.
+      *             scope.$watch(attrs.myCurrentTime, function(value) {
+      *               format = value;
+      *               updateTime();
+      *             });
+      *
+      *             stopTime = $interval(updateTime, 1000);
+      *
+      *             // listen on DOM destroy (removal) event, and cancel the next UI update
+      *             // to prevent updating time after the DOM element was removed.
+      *             element.on('$destroy', function() {
+      *               $interval.cancel(stopTime);
+      *             });
+      *           }
+      *         }]);
+      *   </script>
+      *
+      *   <div>
+      *     <div ng-controller="ExampleController">
+      *       <label>Date format: <input ng-model="format"></label> <hr/>
+      *       Current time is: <span my-current-time="format"></span>
+      *       <hr/>
+      *       Blood 1 : <font color='red'>{{blood_1}}</font>
+      *       Blood 2 : <font color='red'>{{blood_2}}</font>
+      *       <button type="button" data-ng-click="fight()">Fight</button>
+      *       <button type="button" data-ng-click="stopFight()">StopFight</button>
+      *       <button type="button" data-ng-click="resetFight()">resetFight</button>
+      *     </div>
+      *   </div>
+      *
+      * </file>
+      * </example>
+      */
+    function interval(fn, delay, count, invokeApply) {
+      var hasParams = arguments.length > 4,
+          args = hasParams ? sliceArgs(arguments, 4) : [],
+          setInterval = $window.setInterval,
+          clearInterval = $window.clearInterval,
+          iteration = 0,
+          skipApply = (isDefined(invokeApply) && !invokeApply),
+          deferred = (skipApply ? $$q : $q).defer(),
+          promise = deferred.promise;
+
+      count = isDefined(count) ? count : 0;
+
+      promise.then(null, null, (!hasParams) ? fn : function() {
+        fn.apply(null, args);
+      });
+
+      promise.$$intervalId = setInterval(function tick() {
+        deferred.notify(iteration++);
+
+        if (count > 0 && iteration >= count) {
+          deferred.resolve(iteration);
+          clearInterval(promise.$$intervalId);
+          delete intervals[promise.$$intervalId];
+        }
+
+        if (!skipApply) $rootScope.$apply();
+
+      }, delay);
+
+      intervals[promise.$$intervalId] = deferred;
+
+      return promise;
+    }
+
+
+     /**
+      * @ngdoc method
+      * @name $interval#cancel
+      *
+      * @description
+      * Cancels a task associated with the `promise`.
+      *
+      * @param {Promise=} promise returned by the `$interval` function.
+      * @returns {boolean} Returns `true` if the task was successfully canceled.
+      */
+    interval.cancel = function(promise) {
+      if (promise && promise.$$intervalId in intervals) {
+        intervals[promise.$$intervalId].reject('canceled');
+        $window.clearInterval(promise.$$intervalId);
+        delete intervals[promise.$$intervalId];
+        return true;
+      }
+      return false;
+    };
+
+    return interval;
+  }];
+}
+
+/**
+ * @ngdoc service
+ * @name $locale
+ *
+ * @description
+ * $locale service provides localization rules for various Angular components. As of right now the
+ * only public api is:
+ *
+ * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`)
+ */
+
+var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
+    DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};
+var $locationMinErr = minErr('$location');
+
+
+/**
+ * Encode path using encodeUriSegment, ignoring forward slashes
+ *
+ * @param {string} path Path to encode
+ * @returns {string}
+ */
+function encodePath(path) {
+  var segments = path.split('/'),
+      i = segments.length;
+
+  while (i--) {
+    segments[i] = encodeUriSegment(segments[i]);
+  }
+
+  return segments.join('/');
+}
+
+function parseAbsoluteUrl(absoluteUrl, locationObj) {
+  var parsedUrl = urlResolve(absoluteUrl);
+
+  locationObj.$$protocol = parsedUrl.protocol;
+  locationObj.$$host = parsedUrl.hostname;
+  locationObj.$$port = toInt(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null;
+}
+
+
+function parseAppUrl(relativeUrl, locationObj) {
+  var prefixed = (relativeUrl.charAt(0) !== '/');
+  if (prefixed) {
+    relativeUrl = '/' + relativeUrl;
+  }
+  var match = urlResolve(relativeUrl);
+  locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ?
+      match.pathname.substring(1) : match.pathname);
+  locationObj.$$search = parseKeyValue(match.search);
+  locationObj.$$hash = decodeURIComponent(match.hash);
+
+  // make sure path starts with '/';
+  if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') {
+    locationObj.$$path = '/' + locationObj.$$path;
+  }
+}
+
+
+/**
+ *
+ * @param {string} begin
+ * @param {string} whole
+ * @returns {string} returns text from whole after begin or undefined if it does not begin with
+ *                   expected string.
+ */
+function beginsWith(begin, whole) {
+  if (whole.indexOf(begin) === 0) {
+    return whole.substr(begin.length);
+  }
+}
+
+
+function stripHash(url) {
+  var index = url.indexOf('#');
+  return index == -1 ? url : url.substr(0, index);
+}
+
+function trimEmptyHash(url) {
+  return url.replace(/(#.+)|#$/, '$1');
+}
+
+
+function stripFile(url) {
+  return url.substr(0, stripHash(url).lastIndexOf('/') + 1);
+}
+
+/* return the server only (scheme://host:port) */
+function serverBase(url) {
+  return url.substring(0, url.indexOf('/', url.indexOf('//') + 2));
+}
+
+
+/**
+ * LocationHtml5Url represents an url
+ * This object is exposed as $location service when HTML5 mode is enabled and supported
+ *
+ * @constructor
+ * @param {string} appBase application base URL
+ * @param {string} appBaseNoFile application base URL stripped of any filename
+ * @param {string} basePrefix url path prefix
+ */
+function LocationHtml5Url(appBase, appBaseNoFile, basePrefix) {
+  this.$$html5 = true;
+  basePrefix = basePrefix || '';
+  parseAbsoluteUrl(appBase, this);
+
+
+  /**
+   * Parse given html5 (regular) url string into properties
+   * @param {string} url HTML5 url
+   * @private
+   */
+  this.$$parse = function(url) {
+    var pathUrl = beginsWith(appBaseNoFile, url);
+    if (!isString(pathUrl)) {
+      throw $locationMinErr('ipthprfx', 'Invalid url "{0}", missing path prefix "{1}".', url,
+          appBaseNoFile);
+    }
+
+    parseAppUrl(pathUrl, this);
+
+    if (!this.$$path) {
+      this.$$path = '/';
+    }
+
+    this.$$compose();
+  };
+
+  /**
+   * Compose url and update `absUrl` property
+   * @private
+   */
+  this.$$compose = function() {
+    var search = toKeyValue(this.$$search),
+        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
+
+    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
+    this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/'
+  };
+
+  this.$$parseLinkUrl = function(url, relHref) {
+    if (relHref && relHref[0] === '#') {
+      // special case for links to hash fragments:
+      // keep the old url and only replace the hash fragment
+      this.hash(relHref.slice(1));
+      return true;
+    }
+    var appUrl, prevAppUrl;
+    var rewrittenUrl;
+
+    if (isDefined(appUrl = beginsWith(appBase, url))) {
+      prevAppUrl = appUrl;
+      if (isDefined(appUrl = beginsWith(basePrefix, appUrl))) {
+        rewrittenUrl = appBaseNoFile + (beginsWith('/', appUrl) || appUrl);
+      } else {
+        rewrittenUrl = appBase + prevAppUrl;
+      }
+    } else if (isDefined(appUrl = beginsWith(appBaseNoFile, url))) {
+      rewrittenUrl = appBaseNoFile + appUrl;
+    } else if (appBaseNoFile == url + '/') {
+      rewrittenUrl = appBaseNoFile;
+    }
+    if (rewrittenUrl) {
+      this.$$parse(rewrittenUrl);
+    }
+    return !!rewrittenUrl;
+  };
+}
+
+
+/**
+ * LocationHashbangUrl represents url
+ * This object is exposed as $location service when developer doesn't opt into html5 mode.
+ * It also serves as the base class for html5 mode fallback on legacy browsers.
+ *
+ * @constructor
+ * @param {string} appBase application base URL
+ * @param {string} appBaseNoFile application base URL stripped of any filename
+ * @param {string} hashPrefix hashbang prefix
+ */
+function LocationHashbangUrl(appBase, appBaseNoFile, hashPrefix) {
+
+  parseAbsoluteUrl(appBase, this);
+
+
+  /**
+   * Parse given hashbang url into properties
+   * @param {string} url Hashbang url
+   * @private
+   */
+  this.$$parse = function(url) {
+    var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url);
+    var withoutHashUrl;
+
+    if (!isUndefined(withoutBaseUrl) && withoutBaseUrl.charAt(0) === '#') {
+
+      // The rest of the url starts with a hash so we have
+      // got either a hashbang path or a plain hash fragment
+      withoutHashUrl = beginsWith(hashPrefix, withoutBaseUrl);
+      if (isUndefined(withoutHashUrl)) {
+        // There was no hashbang prefix so we just have a hash fragment
+        withoutHashUrl = withoutBaseUrl;
+      }
+
+    } else {
+      // There was no hashbang path nor hash fragment:
+      // If we are in HTML5 mode we use what is left as the path;
+      // Otherwise we ignore what is left
+      if (this.$$html5) {
+        withoutHashUrl = withoutBaseUrl;
+      } else {
+        withoutHashUrl = '';
+        if (isUndefined(withoutBaseUrl)) {
+          appBase = url;
+          this.replace();
+        }
+      }
+    }
+
+    parseAppUrl(withoutHashUrl, this);
+
+    this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase);
+
+    this.$$compose();
+
+    /*
+     * In Windows, on an anchor node on documents loaded from
+     * the filesystem, the browser will return a pathname
+     * prefixed with the drive name ('/C:/path') when a
+     * pathname without a drive is set:
+     *  * a.setAttribute('href', '/foo')
+     *   * a.pathname === '/C:/foo' //true
+     *
+     * Inside of Angular, we're always using pathnames that
+     * do not include drive names for routing.
+     */
+    function removeWindowsDriveName(path, url, base) {
+      /*
+      Matches paths for file protocol on windows,
+      such as /C:/foo/bar, and captures only /foo/bar.
+      */
+      var windowsFilePathExp = /^\/[A-Z]:(\/.*)/;
+
+      var firstPathSegmentMatch;
+
+      //Get the relative path from the input URL.
+      if (url.indexOf(base) === 0) {
+        url = url.replace(base, '');
+      }
+
+      // The input URL intentionally contains a first path segment that ends with a colon.
+      if (windowsFilePathExp.exec(url)) {
+        return path;
+      }
+
+      firstPathSegmentMatch = windowsFilePathExp.exec(path);
+      return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path;
+    }
+  };
+
+  /**
+   * Compose hashbang url and update `absUrl` property
+   * @private
+   */
+  this.$$compose = function() {
+    var search = toKeyValue(this.$$search),
+        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
+
+    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
+    this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : '');
+  };
+
+  this.$$parseLinkUrl = function(url, relHref) {
+    if (stripHash(appBase) == stripHash(url)) {
+      this.$$parse(url);
+      return true;
+    }
+    return false;
+  };
+}
+
+
+/**
+ * LocationHashbangUrl represents url
+ * This object is exposed as $location service when html5 history api is enabled but the browser
+ * does not support it.
+ *
+ * @constructor
+ * @param {string} appBase application base URL
+ * @param {string} appBaseNoFile application base URL stripped of any filename
+ * @param {string} hashPrefix hashbang prefix
+ */
+function LocationHashbangInHtml5Url(appBase, appBaseNoFile, hashPrefix) {
+  this.$$html5 = true;
+  LocationHashbangUrl.apply(this, arguments);
+
+  this.$$parseLinkUrl = function(url, relHref) {
+    if (relHref && relHref[0] === '#') {
+      // special case for links to hash fragments:
+      // keep the old url and only replace the hash fragment
+      this.hash(relHref.slice(1));
+      return true;
+    }
+
+    var rewrittenUrl;
+    var appUrl;
+
+    if (appBase == stripHash(url)) {
+      rewrittenUrl = url;
+    } else if ((appUrl = beginsWith(appBaseNoFile, url))) {
+      rewrittenUrl = appBase + hashPrefix + appUrl;
+    } else if (appBaseNoFile === url + '/') {
+      rewrittenUrl = appBaseNoFile;
+    }
+    if (rewrittenUrl) {
+      this.$$parse(rewrittenUrl);
+    }
+    return !!rewrittenUrl;
+  };
+
+  this.$$compose = function() {
+    var search = toKeyValue(this.$$search),
+        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
+
+    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
+    // include hashPrefix in $$absUrl when $$url is empty so IE9 does not reload page because of removal of '#'
+    this.$$absUrl = appBase + hashPrefix + this.$$url;
+  };
+
+}
+
+
+var locationPrototype = {
+
+  /**
+   * Are we in html5 mode?
+   * @private
+   */
+  $$html5: false,
+
+  /**
+   * Has any change been replacing?
+   * @private
+   */
+  $$replace: false,
+
+  /**
+   * @ngdoc method
+   * @name $location#absUrl
+   *
+   * @description
+   * This method is getter only.
+   *
+   * Return full url representation with all segments encoded according to rules specified in
+   * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt).
+   *
+   *
+   * ```js
+   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+   * var absUrl = $location.absUrl();
+   * // => "http://example.com/#/some/path?foo=bar&baz=xoxo"
+   * ```
+   *
+   * @return {string} full url
+   */
+  absUrl: locationGetter('$$absUrl'),
+
+  /**
+   * @ngdoc method
+   * @name $location#url
+   *
+   * @description
+   * This method is getter / setter.
+   *
+   * Return url (e.g. `/path?a=b#hash`) when called without any parameter.
+   *
+   * Change path, search and hash, when called with parameter and return `$location`.
+   *
+   *
+   * ```js
+   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+   * var url = $location.url();
+   * // => "/some/path?foo=bar&baz=xoxo"
+   * ```
+   *
+   * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`)
+   * @return {string} url
+   */
+  url: function(url) {
+    if (isUndefined(url)) {
+      return this.$$url;
+    }
+
+    var match = PATH_MATCH.exec(url);
+    if (match[1] || url === '') this.path(decodeURIComponent(match[1]));
+    if (match[2] || match[1] || url === '') this.search(match[3] || '');
+    this.hash(match[5] || '');
+
+    return this;
+  },
+
+  /**
+   * @ngdoc method
+   * @name $location#protocol
+   *
+   * @description
+   * This method is getter only.
+   *
+   * Return protocol of current url.
+   *
+   *
+   * ```js
+   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+   * var protocol = $location.protocol();
+   * // => "http"
+   * ```
+   *
+   * @return {string} protocol of current url
+   */
+  protocol: locationGetter('$$protocol'),
+
+  /**
+   * @ngdoc method
+   * @name $location#host
+   *
+   * @description
+   * This method is getter only.
+   *
+   * Return host of current url.
+   *
+   * Note: compared to the non-angular version `location.host` which returns `hostname:port`, this returns the `hostname` portion only.
+   *
+   *
+   * ```js
+   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+   * var host = $location.host();
+   * // => "example.com"
+   *
+   * // given url http://user:[email-masked]:8080/#/some/path?foo=bar&baz=xoxo
+   * host = $location.host();
+   * // => "example.com"
+   * host = location.host;
+   * // => "example.com:8080"
+   * ```
+   *
+   * @return {string} host of current url.
+   */
+  host: locationGetter('$$host'),
+
+  /**
+   * @ngdoc method
+   * @name $location#port
+   *
+   * @description
+   * This method is getter only.
+   *
+   * Return port of current url.
+   *
+   *
+   * ```js
+   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+   * var port = $location.port();
+   * // => 80
+   * ```
+   *
+   * @return {Number} port
+   */
+  port: locationGetter('$$port'),
+
+  /**
+   * @ngdoc method
+   * @name $location#path
+   *
+   * @description
+   * This method is getter / setter.
+   *
+   * Return path of current url when called without any parameter.
+   *
+   * Change path when called with parameter and return `$location`.
+   *
+   * Note: Path should always begin with forward slash (/), this method will add the forward slash
+   * if it is missing.
+   *
+   *
+   * ```js
+   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+   * var path = $location.path();
+   * // => "/some/path"
+   * ```
+   *
+   * @param {(string|number)=} path New path
+   * @return {string} path
+   */
+  path: locationGetterSetter('$$path', function(path) {
+    path = path !== null ? path.toString() : '';
+    return path.charAt(0) == '/' ? path : '/' + path;
+  }),
+
+  /**
+   * @ngdoc method
+   * @name $location#search
+   *
+   * @description
+   * This method is getter / setter.
+   *
+   * Return search part (as object) of current url when called without any parameter.
+   *
+   * Change search part when called with parameter and return `$location`.
+   *
+   *
+   * ```js
+   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+   * var searchObject = $location.search();
+   * // => {foo: 'bar', baz: 'xoxo'}
+   *
+   * // set foo to 'yipee'
+   * $location.search('foo', 'yipee');
+   * // $location.search() => {foo: 'yipee', baz: 'xoxo'}
+   * ```
+   *
+   * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or
+   * hash object.
+   *
+   * When called with a single argument the method acts as a setter, setting the `search` component
+   * of `$location` to the specified value.
+   *
+   * If the argument is a hash object containing an array of values, these values will be encoded
+   * as duplicate search parameters in the url.
+   *
+   * @param {(string|Number|Array<string>|boolean)=} paramValue If `search` is a string or number, then `paramValue`
+   * will override only a single search property.
+   *
+   * If `paramValue` is an array, it will override the property of the `search` component of
+   * `$location` specified via the first argument.
+   *
+   * If `paramValue` is `null`, the property specified via the first argument will be deleted.
+   *
+   * If `paramValue` is `true`, the property specified via the first argument will be added with no
+   * value nor trailing equal sign.
+   *
+   * @return {Object} If called with no arguments returns the parsed `search` object. If called with
+   * one or more arguments returns `$location` object itself.
+   */
+  search: function(search, paramValue) {
+    switch (arguments.length) {
+      case 0:
+        return this.$$search;
+      case 1:
+        if (isString(search) || isNumber(search)) {
+          search = search.toString();
+          this.$$search = parseKeyValue(search);
+        } else if (isObject(search)) {
+          search = copy(search, {});
+          // remove object undefined or null properties
+          forEach(search, function(value, key) {
+            if (value == null) delete search[key];
+          });
+
+          this.$$search = search;
+        } else {
+          throw $locationMinErr('isrcharg',
+              'The first argument of the `$location#search()` call must be a string or an object.');
+        }
+        break;
+      default:
+        if (isUndefined(paramValue) || paramValue === null) {
+          delete this.$$search[search];
+        } else {
+          this.$$search[search] = paramValue;
+        }
+    }
+
+    this.$$compose();
+    return this;
+  },
+
+  /**
+   * @ngdoc method
+   * @name $location#hash
+   *
+   * @description
+   * This method is getter / setter.
+   *
+   * Returns the hash fragment when called without any parameters.
+   *
+   * Changes the hash fragment when called with a parameter and returns `$location`.
+   *
+   *
+   * ```js
+   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo#hashValue
+   * var hash = $location.hash();
+   * // => "hashValue"
+   * ```
+   *
+   * @param {(string|number)=} hash New hash fragment
+   * @return {string} hash
+   */
+  hash: locationGetterSetter('$$hash', function(hash) {
+    return hash !== null ? hash.toString() : '';
+  }),
+
+  /**
+   * @ngdoc method
+   * @name $location#replace
+   *
+   * @description
+   * If called, all changes to $location during the current `$digest` will replace the current history
+   * record, instead of adding a new one.
+   */
+  replace: function() {
+    this.$$replace = true;
+    return this;
+  }
+};
+
+forEach([LocationHashbangInHtml5Url, LocationHashbangUrl, LocationHtml5Url], function(Location) {
+  Location.prototype = Object.create(locationPrototype);
+
+  /**
+   * @ngdoc method
+   * @name $location#state
+   *
+   * @description
+   * This method is getter / setter.
+   *
+   * Return the history state object when called without any parameter.
+   *
+   * Change the history state object when called with one parameter and return `$location`.
+   * The state object is later passed to `pushState` or `replaceState`.
+   *
+   * NOTE: This method is supported only in HTML5 mode and only in browsers supporting
+   * the HTML5 History API (i.e. methods `pushState` and `replaceState`). If you need to support
+   * older browsers (like IE9 or Android < 4.0), don't use this method.
+   *
+   * @param {object=} state State object for pushState or replaceState
+   * @return {object} state
+   */
+  Location.prototype.state = function(state) {
+    if (!arguments.length) {
+      return this.$$state;
+    }
+
+    if (Location !== LocationHtml5Url || !this.$$html5) {
+      throw $locationMinErr('nostate', 'History API state support is available only ' +
+        'in HTML5 mode and only in browsers supporting HTML5 History API');
+    }
+    // The user might modify `stateObject` after invoking `$location.state(stateObject)`
+    // but we're changing the $$state reference to $browser.state() during the $digest
+    // so the modification window is narrow.
+    this.$$state = isUndefined(state) ? null : state;
+
+    return this;
+  };
+});
+
+
+function locationGetter(property) {
+  return function() {
+    return this[property];
+  };
+}
+
+
+function locationGetterSetter(property, preprocess) {
+  return function(value) {
+    if (isUndefined(value)) {
+      return this[property];
+    }
+
+    this[property] = preprocess(value);
+    this.$$compose();
+
+    return this;
+  };
+}
+
+
+/**
+ * @ngdoc service
+ * @name $location
+ *
+ * @requires $rootElement
+ *
+ * @description
+ * The $location service parses the URL in the browser address bar (based on the
+ * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL
+ * available to your application. Changes to the URL in the address bar are reflected into
+ * $location service and changes to $location are reflected into the browser address bar.
+ *
+ * **The $location service:**
+ *
+ * - Exposes the current URL in the browser address bar, so you can
+ *   - Watch and observe the URL.
+ *   - Change the URL.
+ * - Synchronizes the URL with the browser when the user
+ *   - Changes the address bar.
+ *   - Clicks the back or forward button (or clicks a History link).
+ *   - Clicks on a link.
+ * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash).
+ *
+ * For more information see {@link guide/$location Developer Guide: Using $location}
+ */
+
+/**
+ * @ngdoc provider
+ * @name $locationProvider
+ * @description
+ * Use the `$locationProvider` to configure how the application deep linking paths are stored.
+ */
+function $LocationProvider() {
+  var hashPrefix = '',
+      html5Mode = {
+        enabled: false,
+        requireBase: true,
+        rewriteLinks: true
+      };
+
+  /**
+   * @ngdoc method
+   * @name $locationProvider#hashPrefix
+   * @description
+   * @param {string=} prefix Prefix for hash part (containing path and search)
+   * @returns {*} current value if used as getter or itself (chaining) if used as setter
+   */
+  this.hashPrefix = function(prefix) {
+    if (isDefined(prefix)) {
+      hashPrefix = prefix;
+      return this;
+    } else {
+      return hashPrefix;
+    }
+  };
+
+  /**
+   * @ngdoc method
+   * @name $locationProvider#html5Mode
+   * @description
+   * @param {(boolean|Object)=} mode If boolean, sets `html5Mode.enabled` to value.
+   *   If object, sets `enabled`, `requireBase` and `rewriteLinks` to respective values. Supported
+   *   properties:
+   *   - **enabled** – `{boolean}` – (default: false) If true, will rely on `history.pushState` to
+   *     change urls where supported. Will fall back to hash-prefixed paths in browsers that do not
+   *     support `pushState`.
+   *   - **requireBase** - `{boolean}` - (default: `true`) When html5Mode is enabled, specifies
+   *     whether or not a <base> tag is required to be present. If `enabled` and `requireBase` are
+   *     true, and a base tag is not present, an error will be thrown when `$location` is injected.
+   *     See the {@link guide/$location $location guide for more information}
+   *   - **rewriteLinks** - `{boolean}` - (default: `true`) When html5Mode is enabled,
+   *     enables/disables url rewriting for relative links.
+   *
+   * @returns {Object} html5Mode object if used as getter or itself (chaining) if used as setter
+   */
+  this.html5Mode = function(mode) {
+    if (isBoolean(mode)) {
+      html5Mode.enabled = mode;
+      return this;
+    } else if (isObject(mode)) {
+
+      if (isBoolean(mode.enabled)) {
+        html5Mode.enabled = mode.enabled;
+      }
+
+      if (isBoolean(mode.requireBase)) {
+        html5Mode.requireBase = mode.requireBase;
+      }
+
+      if (isBoolean(mode.rewriteLinks)) {
+        html5Mode.rewriteLinks = mode.rewriteLinks;
+      }
+
+      return this;
+    } else {
+      return html5Mode;
+    }
+  };
+
+  /**
+   * @ngdoc event
+   * @name $location#$locationChangeStart
+   * @eventType broadcast on root scope
+   * @description
+   * Broadcasted before a URL will change.
+   *
+   * This change can be prevented by calling
+   * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more
+   * details about event object. Upon successful change
+   * {@link ng.$location#$locationChangeSuccess $locationChangeSuccess} is fired.
+   *
+   * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when
+   * the browser supports the HTML5 History API.
+   *
+   * @param {Object} angularEvent Synthetic event object.
+   * @param {string} newUrl New URL
+   * @param {string=} oldUrl URL that was before it was changed.
+   * @param {string=} newState New history state object
+   * @param {string=} oldState History state object that was before it was changed.
+   */
+
+  /**
+   * @ngdoc event
+   * @name $location#$locationChangeSuccess
+   * @eventType broadcast on root scope
+   * @description
+   * Broadcasted after a URL was changed.
+   *
+   * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when
+   * the browser supports the HTML5 History API.
+   *
+   * @param {Object} angularEvent Synthetic event object.
+   * @param {string} newUrl New URL
+   * @param {string=} oldUrl URL that was before it was changed.
+   * @param {string=} newState New history state object
+   * @param {string=} oldState History state object that was before it was changed.
+   */
+
+  this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement', '$window',
+      function($rootScope, $browser, $sniffer, $rootElement, $window) {
+    var $location,
+        LocationMode,
+        baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to ''
+        initialUrl = $browser.url(),
+        appBase;
+
+    if (html5Mode.enabled) {
+      if (!baseHref && html5Mode.requireBase) {
+        throw $locationMinErr('nobase',
+          "$location in HTML5 mode requires a <base> tag to be present!");
+      }
+      appBase = serverBase(initialUrl) + (baseHref || '/');
+      LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url;
+    } else {
+      appBase = stripHash(initialUrl);
+      LocationMode = LocationHashbangUrl;
+    }
+    var appBaseNoFile = stripFile(appBase);
+
+    $location = new LocationMode(appBase, appBaseNoFile, '#' + hashPrefix);
+    $location.$$parseLinkUrl(initialUrl, initialUrl);
+
+    $location.$$state = $browser.state();
+
+    var IGNORE_URI_REGEXP = /^\s*(javascript|mailto):/i;
+
+    function setBrowserUrlWithFallback(url, replace, state) {
+      var oldUrl = $location.url();
+      var oldState = $location.$$state;
+      try {
+        $browser.url(url, replace, state);
+
+        // Make sure $location.state() returns referentially identical (not just deeply equal)
+        // state object; this makes possible quick checking if the state changed in the digest
+        // loop. Checking deep equality would be too expensive.
+        $location.$$state = $browser.state();
+      } catch (e) {
+        // Restore old values if pushState fails
+        $location.url(oldUrl);
+        $location.$$state = oldState;
+
+        throw e;
+      }
+    }
+
+    $rootElement.on('click', function(event) {
+      // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser)
+      // currently we open nice url link and redirect then
+
+      if (!html5Mode.rewriteLinks || event.ctrlKey || event.metaKey || event.shiftKey || event.which == 2 || event.button == 2) return;
+
+      var elm = jqLite(event.target);
+
+      // traverse the DOM up to find first A tag
+      while (nodeName_(elm[0]) !== 'a') {
+        // ignore rewriting if no A tag (reached root element, or no parent - removed from document)
+        if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return;
+      }
+
+      var absHref = elm.prop('href');
+      // get the actual href attribute - see
+      // http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx
+      var relHref = elm.attr('href') || elm.attr('xlink:href');
+
+      if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') {
+        // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during
+        // an animation.
+        absHref = urlResolve(absHref.animVal).href;
+      }
+
+      // Ignore when url is started with javascript: or mailto:
+      if (IGNORE_URI_REGEXP.test(absHref)) return;
+
+      if (absHref && !elm.attr('target') && !event.isDefaultPrevented()) {
+        if ($location.$$parseLinkUrl(absHref, relHref)) {
+          // We do a preventDefault for all urls that are part of the angular application,
+          // in html5mode and also without, so that we are able to abort navigation without
+          // getting double entries in the location history.
+          event.preventDefault();
+          // update location manually
+          if ($location.absUrl() != $browser.url()) {
+            $rootScope.$apply();
+            // hack to work around FF6 bug 684208 when scenario runner clicks on links
+            $window.angular['ff-684208-preventDefault'] = true;
+          }
+        }
+      }
+    });
+
+
+    // rewrite hashbang url <> html5 url
+    if (trimEmptyHash($location.absUrl()) != trimEmptyHash(initialUrl)) {
+      $browser.url($location.absUrl(), true);
+    }
+
+    var initializing = true;
+
+    // update $location when $browser url changes
+    $browser.onUrlChange(function(newUrl, newState) {
+
+      if (isUndefined(beginsWith(appBaseNoFile, newUrl))) {
+        // If we are navigating outside of the app then force a reload
+        $window.location.href = newUrl;
+        return;
+      }
+
+      $rootScope.$evalAsync(function() {
+        var oldUrl = $location.absUrl();
+        var oldState = $location.$$state;
+        var defaultPrevented;
+        newUrl = trimEmptyHash(newUrl);
+        $location.$$parse(newUrl);
+        $location.$$state = newState;
+
+        defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,
+            newState, oldState).defaultPrevented;
+
+        // if the location was changed by a `$locationChangeStart` handler then stop
+        // processing this location change
+        if ($location.absUrl() !== newUrl) return;
+
+        if (defaultPrevented) {
+          $location.$$parse(oldUrl);
+          $location.$$state = oldState;
+          setBrowserUrlWithFallback(oldUrl, false, oldState);
+        } else {
+          initializing = false;
+          afterLocationChange(oldUrl, oldState);
+        }
+      });
+      if (!$rootScope.$$phase) $rootScope.$digest();
+    });
+
+    // update browser
+    $rootScope.$watch(function $locationWatch() {
+      var oldUrl = trimEmptyHash($browser.url());
+      var newUrl = trimEmptyHash($location.absUrl());
+      var oldState = $browser.state();
+      var currentReplace = $location.$$replace;
+      var urlOrStateChanged = oldUrl !== newUrl ||
+        ($location.$$html5 && $sniffer.history && oldState !== $location.$$state);
+
+      if (initializing || urlOrStateChanged) {
+        initializing = false;
+
+        $rootScope.$evalAsync(function() {
+          var newUrl = $location.absUrl();
+          var defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,
+              $location.$$state, oldState).defaultPrevented;
+
+          // if the location was changed by a `$locationChangeStart` handler then stop
+          // processing this location change
+          if ($location.absUrl() !== newUrl) return;
+
+          if (defaultPrevented) {
+            $location.$$parse(oldUrl);
+            $location.$$state = oldState;
+          } else {
+            if (urlOrStateChanged) {
+              setBrowserUrlWithFallback(newUrl, currentReplace,
+                                        oldState === $location.$$state ? null : $location.$$state);
+            }
+            afterLocationChange(oldUrl, oldState);
+          }
+        });
+      }
+
+      $location.$$replace = false;
+
+      // we don't need to return anything because $evalAsync will make the digest loop dirty when
+      // there is a change
+    });
+
+    return $location;
+
+    function afterLocationChange(oldUrl, oldState) {
+      $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl,
+        $location.$$state, oldState);
+    }
+}];
+}
+
+/**
+ * @ngdoc service
+ * @name $log
+ * @requires $window
+ *
+ * @description
+ * Simple service for logging. Default implementation safely writes the message
+ * into the browser's console (if present).
+ *
+ * The main purpose of this service is to simplify debugging and troubleshooting.
+ *
+ * The default is to log `debug` messages. You can use
+ * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this.
+ *
+ * @example
+   <example module="logExample">
+     <file name="script.js">
+       angular.module('logExample', [])
+         .controller('LogController', ['$scope', '$log', function($scope, $log) {
+           $scope.$log = $log;
+           $scope.message = 'Hello World!';
+         }]);
+     </file>
+     <file name="index.html">
+       <div ng-controller="LogController">
+         <p>Reload this page with open console, enter text and hit the log button...</p>
+         <label>Message:
+         <input type="text" ng-model="message" /></label>
+         <button ng-click="$log.log(message)">log</button>
+         <button ng-click="$log.warn(message)">warn</button>
+         <button ng-click="$log.info(message)">info</button>
+         <button ng-click="$log.error(message)">error</button>
+         <button ng-click="$log.debug(message)">debug</button>
+       </div>
+     </file>
+   </example>
+ */
+
+/**
+ * @ngdoc provider
+ * @name $logProvider
+ * @description
+ * Use the `$logProvider` to configure how the application logs messages
+ */
+function $LogProvider() {
+  var debug = true,
+      self = this;
+
+  /**
+   * @ngdoc method
+   * @name $logProvider#debugEnabled
+   * @description
+   * @param {boolean=} flag enable or disable debug level messages
+   * @returns {*} current value if used as getter or itself (chaining) if used as setter
+   */
+  this.debugEnabled = function(flag) {
+    if (isDefined(flag)) {
+      debug = flag;
+    return this;
+    } else {
+      return debug;
+    }
+  };
+
+  this.$get = ['$window', function($window) {
+    return {
+      /**
+       * @ngdoc method
+       * @name $log#log
+       *
+       * @description
+       * Write a log message
+       */
+      log: consoleLog('log'),
+
+      /**
+       * @ngdoc method
+       * @name $log#info
+       *
+       * @description
+       * Write an information message
+       */
+      info: consoleLog('info'),
+
+      /**
+       * @ngdoc method
+       * @name $log#warn
+       *
+       * @description
+       * Write a warning message
+       */
+      warn: consoleLog('warn'),
+
+      /**
+       * @ngdoc method
+       * @name $log#error
+       *
+       * @description
+       * Write an error message
+       */
+      error: consoleLog('error'),
+
+      /**
+       * @ngdoc method
+       * @name $log#debug
+       *
+       * @description
+       * Write a debug message
+       */
+      debug: (function() {
+        var fn = consoleLog('debug');
+
+        return function() {
+          if (debug) {
+            fn.apply(self, arguments);
+          }
+        };
+      }())
+    };
+
+    function formatError(arg) {
+      if (arg instanceof Error) {
+        if (arg.stack) {
+          arg = (arg.message && arg.stack.indexOf(arg.message) === -1)
+              ? 'Error: ' + arg.message + '\n' + arg.stack
+              : arg.stack;
+        } else if (arg.sourceURL) {
+          arg = arg.message + '\n' + arg.sourceURL + ':' + arg.line;
+        }
+      }
+      return arg;
+    }
+
+    function consoleLog(type) {
+      var console = $window.console || {},
+          logFn = console[type] || console.log || noop,
+          hasApply = false;
+
+      // Note: reading logFn.apply throws an error in IE11 in IE8 document mode.
+      // The reason behind this is that console.log has type "object" in IE8...
+      try {
+        hasApply = !!logFn.apply;
+      } catch (e) {}
+
+      if (hasApply) {
+        return function() {
+          var args = [];
+          forEach(arguments, function(arg) {
+            args.push(formatError(arg));
+          });
+          return logFn.apply(console, args);
+        };
+      }
+
+      // we are IE which either doesn't have window.console => this is noop and we do nothing,
+      // or we are IE where console.log doesn't have apply so we log at least first 2 args
+      return function(arg1, arg2) {
+        logFn(arg1, arg2 == null ? '' : arg2);
+      };
+    }
+  }];
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *     Any commits to this file should be reviewed with security in mind.  *
+ *   Changes to this file can potentially create security vulnerabilities. *
+ *          An approval from 2 Core members with history of modifying      *
+ *                         this file is required.                          *
+ *                                                                         *
+ *  Does the change somehow allow for arbitrary javascript to be executed? *
+ *    Or allows for someone to change the prototype of built-in objects?   *
+ *     Or gives undesired access to variables likes document or window?    *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+var $parseMinErr = minErr('$parse');
+
+// Sandboxing Angular Expressions
+// ------------------------------
+// Angular expressions are generally considered safe because these expressions only have direct
+// access to `$scope` and locals. However, one can obtain the ability to execute arbitrary JS code by
+// obtaining a reference to native JS functions such as the Function constructor.
+//
+// As an example, consider the following Angular expression:
+//
+//   {}.toString.constructor('alert("evil JS code")')
+//
+// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits
+// against the expression language, but not to prevent exploits that were enabled by exposing
+// sensitive JavaScript or browser APIs on Scope. Exposing such objects on a Scope is never a good
+// practice and therefore we are not even trying to protect against interaction with an object
+// explicitly exposed in this way.
+//
+// In general, it is not possible to access a Window object from an angular expression unless a
+// window or some DOM object that has a reference to window is published onto a Scope.
+// Similarly we prevent invocations of function known to be dangerous, as well as assignments to
+// native objects.
+//
+// See https://docs.angularjs.org/guide/security
+
+
+function ensureSafeMemberName(name, fullExpression) {
+  if (name === "__defineGetter__" || name === "__defineSetter__"
+      || name === "__lookupGetter__" || name === "__lookupSetter__"
+      || name === "__proto__") {
+    throw $parseMinErr('isecfld',
+        'Attempting to access a disallowed field in Angular expressions! '
+        + 'Expression: {0}', fullExpression);
+  }
+  return name;
+}
+
+function getStringValue(name, fullExpression) {
+  // From the JavaScript docs:
+  // Property names must be strings. This means that non-string objects cannot be used
+  // as keys in an object. Any non-string object, including a number, is typecasted
+  // into a string via the toString method.
+  //
+  // So, to ensure that we are checking the same `name` that JavaScript would use,
+  // we cast it to a string, if possible.
+  // Doing `name + ''` can cause a repl error if the result to `toString` is not a string,
+  // this is, this will handle objects that misbehave.
+  name = name + '';
+  if (!isString(name)) {
+    throw $parseMinErr('iseccst',
+        'Cannot convert object to primitive value! '
+        + 'Expression: {0}', fullExpression);
+  }
+  return name;
+}
+
+function ensureSafeObject(obj, fullExpression) {
+  // nifty check if obj is Function that is fast and works across iframes and other contexts
+  if (obj) {
+    if (obj.constructor === obj) {
+      throw $parseMinErr('isecfn',
+          'Referencing Function in Angular expressions is disallowed! Expression: {0}',
+          fullExpression);
+    } else if (// isWindow(obj)
+        obj.window === obj) {
+      throw $parseMinErr('isecwindow',
+          'Referencing the Window in Angular expressions is disallowed! Expression: {0}',
+          fullExpression);
+    } else if (// isElement(obj)
+        obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) {
+      throw $parseMinErr('isecdom',
+          'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}',
+          fullExpression);
+    } else if (// block Object so that we can't get hold of dangerous Object.* methods
+        obj === Object) {
+      throw $parseMinErr('isecobj',
+          'Referencing Object in Angular expressions is disallowed! Expression: {0}',
+          fullExpression);
+    }
+  }
+  return obj;
+}
+
+var CALL = Function.prototype.call;
+var APPLY = Function.prototype.apply;
+var BIND = Function.prototype.bind;
+
+function ensureSafeFunction(obj, fullExpression) {
+  if (obj) {
+    if (obj.constructor === obj) {
+      throw $parseMinErr('isecfn',
+        'Referencing Function in Angular expressions is disallowed! Expression: {0}',
+        fullExpression);
+    } else if (obj === CALL || obj === APPLY || obj === BIND) {
+      throw $parseMinErr('isecff',
+        'Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}',
+        fullExpression);
+    }
+  }
+}
+
+function ensureSafeAssignContext(obj, fullExpression) {
+  if (obj) {
+    if (obj === (0).constructor || obj === (false).constructor || obj === ''.constructor ||
+        obj === {}.constructor || obj === [].constructor || obj === Function.constructor) {
+      throw $parseMinErr('isecaf',
+        'Assigning to a constructor is disallowed! Expression: {0}', fullExpression);
+    }
+  }
+}
+
+var OPERATORS = createMap();
+forEach('+ - * / % === !== == != < > <= >= && || ! = |'.split(' '), function(operator) { OPERATORS[operator] = true; });
+var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'};
+
+
+/////////////////////////////////////////
+
+
+/**
+ * @constructor
+ */
+var Lexer = function(options) {
+  this.options = options;
+};
+
+Lexer.prototype = {
+  constructor: Lexer,
+
+  lex: function(text) {
+    this.text = text;
+    this.index = 0;
+    this.tokens = [];
+
+    while (this.index < this.text.length) {
+      var ch = this.text.charAt(this.index);
+      if (ch === '"' || ch === "'") {
+        this.readString(ch);
+      } else if (this.isNumber(ch) || ch === '.' && this.isNumber(this.peek())) {
+        this.readNumber();
+      } else if (this.isIdent(ch)) {
+        this.readIdent();
+      } else if (this.is(ch, '(){}[].,;:?')) {
+        this.tokens.push({index: this.index, text: ch});
+        this.index++;
+      } else if (this.isWhitespace(ch)) {
+        this.index++;
+      } else {
+        var ch2 = ch + this.peek();
+        var ch3 = ch2 + this.peek(2);
+        var op1 = OPERATORS[ch];
+        var op2 = OPERATORS[ch2];
+        var op3 = OPERATORS[ch3];
+        if (op1 || op2 || op3) {
+          var token = op3 ? ch3 : (op2 ? ch2 : ch);
+          this.tokens.push({index: this.index, text: token, operator: true});
+          this.index += token.length;
+        } else {
+          this.throwError('Unexpected next character ', this.index, this.index + 1);
+        }
+      }
+    }
+    return this.tokens;
+  },
+
+  is: function(ch, chars) {
+    return chars.indexOf(ch) !== -1;
+  },
+
+  peek: function(i) {
+    var num = i || 1;
+    return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false;
+  },
+
+  isNumber: function(ch) {
+    return ('0' <= ch && ch <= '9') && typeof ch === "string";
+  },
+
+  isWhitespace: function(ch) {
+    // IE treats non-breaking space as \u00A0
+    return (ch === ' ' || ch === '\r' || ch === '\t' ||
+            ch === '\n' || ch === '\v' || ch === '\u00A0');
+  },
+
+  isIdent: function(ch) {
+    return ('a' <= ch && ch <= 'z' ||
+            'A' <= ch && ch <= 'Z' ||
+            '_' === ch || ch === '$');
+  },
+
+  isExpOperator: function(ch) {
+    return (ch === '-' || ch === '+' || this.isNumber(ch));
+  },
+
+  throwError: function(error, start, end) {
+    end = end || this.index;
+    var colStr = (isDefined(start)
+            ? 's ' + start +  '-' + this.index + ' [' + this.text.substring(start, end) + ']'
+            : ' ' + end);
+    throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].',
+        error, colStr, this.text);
+  },
+
+  readNumber: function() {
+    var number = '';
+    var start = this.index;
+    while (this.index < this.text.length) {
+      var ch = lowercase(this.text.charAt(this.index));
+      if (ch == '.' || this.isNumber(ch)) {
+        number += ch;
+      } else {
+        var peekCh = this.peek();
+        if (ch == 'e' && this.isExpOperator(peekCh)) {
+          number += ch;
+        } else if (this.isExpOperator(ch) &&
+            peekCh && this.isNumber(peekCh) &&
+            number.charAt(number.length - 1) == 'e') {
+          number += ch;
+        } else if (this.isExpOperator(ch) &&
+            (!peekCh || !this.isNumber(peekCh)) &&
+            number.charAt(number.length - 1) == 'e') {
+          this.throwError('Invalid exponent');
+        } else {
+          break;
+        }
+      }
+      this.index++;
+    }
+    this.tokens.push({
+      index: start,
+      text: number,
+      constant: true,
+      value: Number(number)
+    });
+  },
+
+  readIdent: function() {
+    var start = this.index;
+    while (this.index < this.text.length) {
+      var ch = this.text.charAt(this.index);
+      if (!(this.isIdent(ch) || this.isNumber(ch))) {
+        break;
+      }
+      this.index++;
+    }
+    this.tokens.push({
+      index: start,
+      text: this.text.slice(start, this.index),
+      identifier: true
+    });
+  },
+
+  readString: function(quote) {
+    var start = this.index;
+    this.index++;
+    var string = '';
+    var rawString = quote;
+    var escape = false;
+    while (this.index < this.text.length) {
+      var ch = this.text.charAt(this.index);
+      rawString += ch;
+      if (escape) {
+        if (ch === 'u') {
+          var hex = this.text.substring(this.index + 1, this.index + 5);
+          if (!hex.match(/[\da-f]{4}/i)) {
+            this.throwError('Invalid unicode escape [\\u' + hex + ']');
+          }
+          this.index += 4;
+          string += String.fromCharCode(parseInt(hex, 16));
+        } else {
+          var rep = ESCAPE[ch];
+          string = string + (rep || ch);
+        }
+        escape = false;
+      } else if (ch === '\\') {
+        escape = true;
+      } else if (ch === quote) {
+        this.index++;
+        this.tokens.push({
+          index: start,
+          text: rawString,
+          constant: true,
+          value: string
+        });
+        return;
+      } else {
+        string += ch;
+      }
+      this.index++;
+    }
+    this.throwError('Unterminated quote', start);
+  }
+};
+
+var AST = function(lexer, options) {
+  this.lexer = lexer;
+  this.options = options;
+};
+
+AST.Program = 'Program';
+AST.ExpressionStatement = 'ExpressionStatement';
+AST.AssignmentExpression = 'AssignmentExpression';
+AST.ConditionalExpression = 'ConditionalExpression';
+AST.LogicalExpression = 'LogicalExpression';
+AST.BinaryExpression = 'BinaryExpression';
+AST.UnaryExpression = 'UnaryExpression';
+AST.CallExpression = 'CallExpression';
+AST.MemberExpression = 'MemberExpression';
+AST.Identifier = 'Identifier';
+AST.Literal = 'Literal';
+AST.ArrayExpression = 'ArrayExpression';
+AST.Property = 'Property';
+AST.ObjectExpression = 'ObjectExpression';
+AST.ThisExpression = 'ThisExpression';
+
+// Internal use only
+AST.NGValueParameter = 'NGValueParameter';
+
+AST.prototype = {
+  ast: function(text) {
+    this.text = text;
+    this.tokens = this.lexer.lex(text);
+
+    var value = this.program();
+
+    if (this.tokens.length !== 0) {
+      this.throwError('is an unexpected token', this.tokens[0]);
+    }
+
+    return value;
+  },
+
+  program: function() {
+    var body = [];
+    while (true) {
+      if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']'))
+        body.push(this.expressionStatement());
+      if (!this.expect(';')) {
+        return { type: AST.Program, body: body};
+      }
+    }
+  },
+
+  expressionStatement: function() {
+    return { type: AST.ExpressionStatement, expression: this.filterChain() };
+  },
+
+  filterChain: function() {
+    var left = this.expression();
+    var token;
+    while ((token = this.expect('|'))) {
+      left = this.filter(left);
+    }
+    return left;
+  },
+
+  expression: function() {
+    return this.assignment();
+  },
+
+  assignment: function() {
+    var result = this.ternary();
+    if (this.expect('=')) {
+      result = { type: AST.AssignmentExpression, left: result, right: this.assignment(), operator: '='};
+    }
+    return result;
+  },
+
+  ternary: function() {
+    var test = this.logicalOR();
+    var alternate;
+    var consequent;
+    if (this.expect('?')) {
+      alternate = this.expression();
+      if (this.consume(':')) {
+        consequent = this.expression();
+        return { type: AST.ConditionalExpression, test: test, alternate: alternate, consequent: consequent};
+      }
+    }
+    return test;
+  },
+
+  logicalOR: function() {
+    var left = this.logicalAND();
+    while (this.expect('||')) {
+      left = { type: AST.LogicalExpression, operator: '||', left: left, right: this.logicalAND() };
+    }
+    return left;
+  },
+
+  logicalAND: function() {
+    var left = this.equality();
+    while (this.expect('&&')) {
+      left = { type: AST.LogicalExpression, operator: '&&', left: left, right: this.equality()};
+    }
+    return left;
+  },
+
+  equality: function() {
+    var left = this.relational();
+    var token;
+    while ((token = this.expect('==','!=','===','!=='))) {
+      left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.relational() };
+    }
+    return left;
+  },
+
+  relational: function() {
+    var left = this.additive();
+    var token;
+    while ((token = this.expect('<', '>', '<=', '>='))) {
+      left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.additive() };
+    }
+    return left;
+  },
+
+  additive: function() {
+    var left = this.multiplicative();
+    var token;
+    while ((token = this.expect('+','-'))) {
+      left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.multiplicative() };
+    }
+    return left;
+  },
+
+  multiplicative: function() {
+    var left = this.unary();
+    var token;
+    while ((token = this.expect('*','/','%'))) {
+      left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.unary() };
+    }
+    return left;
+  },
+
+  unary: function() {
+    var token;
+    if ((token = this.expect('+', '-', '!'))) {
+      return { type: AST.UnaryExpression, operator: token.text, prefix: true, argument: this.unary() };
+    } else {
+      return this.primary();
+    }
+  },
+
+  primary: function() {
+    var primary;
+    if (this.expect('(')) {
+      primary = this.filterChain();
+      this.consume(')');
+    } else if (this.expect('[')) {
+      primary = this.arrayDeclaration();
+    } else if (this.expect('{')) {
+      primary = this.object();
+    } else if (this.constants.hasOwnProperty(this.peek().text)) {
+      primary = copy(this.constants[this.consume().text]);
+    } else if (this.peek().identifier) {
+      primary = this.identifier();
+    } else if (this.peek().constant) {
+      primary = this.constant();
+    } else {
+      this.throwError('not a primary expression', this.peek());
+    }
+
+    var next;
+    while ((next = this.expect('(', '[', '.'))) {
+      if (next.text === '(') {
+        primary = {type: AST.CallExpression, callee: primary, arguments: this.parseArguments() };
+        this.consume(')');
+      } else if (next.text === '[') {
+        primary = { type: AST.MemberExpression, object: primary, property: this.expression(), computed: true };
+        this.consume(']');
+      } else if (next.text === '.') {
+        primary = { type: AST.MemberExpression, object: primary, property: this.identifier(), computed: false };
+      } else {
+        this.throwError('IMPOSSIBLE');
+      }
+    }
+    return primary;
+  },
+
+  filter: function(baseExpression) {
+    var args = [baseExpression];
+    var result = {type: AST.CallExpression, callee: this.identifier(), arguments: args, filter: true};
+
+    while (this.expect(':')) {
+      args.push(this.expression());
+    }
+
+    return result;
+  },
+
+  parseArguments: function() {
+    var args = [];
+    if (this.peekToken().text !== ')') {
+      do {
+        args.push(this.expression());
+      } while (this.expect(','));
+    }
+    return args;
+  },
+
+  identifier: function() {
+    var token = this.consume();
+    if (!token.identifier) {
+      this.throwError('is not a valid identifier', token);
+    }
+    return { type: AST.Identifier, name: token.text };
+  },
+
+  constant: function() {
+    // TODO check that it is a constant
+    return { type: AST.Literal, value: this.consume().value };
+  },
+
+  arrayDeclaration: function() {
+    var elements = [];
+    if (this.peekToken().text !== ']') {
+      do {
+        if (this.peek(']')) {
+          // Support trailing commas per ES5.1.
+          break;
+        }
+        elements.push(this.expression());
+      } while (this.expect(','));
+    }
+    this.consume(']');
+
+    return { type: AST.ArrayExpression, elements: elements };
+  },
+
+  object: function() {
+    var properties = [], property;
+    if (this.peekToken().text !== '}') {
+      do {
+        if (this.peek('}')) {
+          // Support trailing commas per ES5.1.
+          break;
+        }
+        property = {type: AST.Property, kind: 'init'};
+        if (this.peek().constant) {
+          property.key = this.constant();
+        } else if (this.peek().identifier) {
+          property.key = this.identifier();
+        } else {
+          this.throwError("invalid key", this.peek());
+        }
+        this.consume(':');
+        property.value = this.expression();
+        properties.push(property);
+      } while (this.expect(','));
+    }
+    this.consume('}');
+
+    return {type: AST.ObjectExpression, properties: properties };
+  },
+
+  throwError: function(msg, token) {
+    throw $parseMinErr('syntax',
+        'Syntax Error: Token \'{0}\' {1} at column {2} of the expression [{3}] starting at [{4}].',
+          token.text, msg, (token.index + 1), this.text, this.text.substring(token.index));
+  },
+
+  consume: function(e1) {
+    if (this.tokens.length === 0) {
+      throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);
+    }
+
+    var token = this.expect(e1);
+    if (!token) {
+      this.throwError('is unexpected, expecting [' + e1 + ']', this.peek());
+    }
+    return token;
+  },
+
+  peekToken: function() {
+    if (this.tokens.length === 0) {
+      throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);
+    }
+    return this.tokens[0];
+  },
+
+  peek: function(e1, e2, e3, e4) {
+    return this.peekAhead(0, e1, e2, e3, e4);
+  },
+
+  peekAhead: function(i, e1, e2, e3, e4) {
+    if (this.tokens.length > i) {
+      var token = this.tokens[i];
+      var t = token.text;
+      if (t === e1 || t === e2 || t === e3 || t === e4 ||
+          (!e1 && !e2 && !e3 && !e4)) {
+        return token;
+      }
+    }
+    return false;
+  },
+
+  expect: function(e1, e2, e3, e4) {
+    var token = this.peek(e1, e2, e3, e4);
+    if (token) {
+      this.tokens.shift();
+      return token;
+    }
+    return false;
+  },
+
+
+  /* `undefined` is not a constant, it is an identifier,
+   * but using it as an identifier is not supported
+   */
+  constants: {
+    'true': { type: AST.Literal, value: true },
+    'false': { type: AST.Literal, value: false },
+    'null': { type: AST.Literal, value: null },
+    'undefined': {type: AST.Literal, value: undefined },
+    'this': {type: AST.ThisExpression }
+  }
+};
+
+function ifDefined(v, d) {
+  return typeof v !== 'undefined' ? v : d;
+}
+
+function plusFn(l, r) {
+  if (typeof l === 'undefined') return r;
+  if (typeof r === 'undefined') return l;
+  return l + r;
+}
+
+function isStateless($filter, filterName) {
+  var fn = $filter(filterName);
+  return !fn.$stateful;
+}
+
+function findConstantAndWatchExpressions(ast, $filter) {
+  var allConstants;
+  var argsToWatch;
+  switch (ast.type) {
+  case AST.Program:
+    allConstants = true;
+    forEach(ast.body, function(expr) {
+      findConstantAndWatchExpressions(expr.expression, $filter);
+      allConstants = allConstants && expr.expression.constant;
+    });
+    ast.constant = allConstants;
+    break;
+  case AST.Literal:
+    ast.constant = true;
+    ast.toWatch = [];
+    break;
+  case AST.UnaryExpression:
+    findConstantAndWatchExpressions(ast.argument, $filter);
+    ast.constant = ast.argument.constant;
+    ast.toWatch = ast.argument.toWatch;
+    break;
+  case AST.BinaryExpression:
+    findConstantAndWatchExpressions(ast.left, $filter);
+    findConstantAndWatchExpressions(ast.right, $filter);
+    ast.constant = ast.left.constant && ast.right.constant;
+    ast.toWatch = ast.left.toWatch.concat(ast.right.toWatch);
+    break;
+  case AST.LogicalExpression:
+    findConstantAndWatchExpressions(ast.left, $filter);
+    findConstantAndWatchExpressions(ast.right, $filter);
+    ast.constant = ast.left.constant && ast.right.constant;
+    ast.toWatch = ast.constant ? [] : [ast];
+    break;
+  case AST.ConditionalExpression:
+    findConstantAndWatchExpressions(ast.test, $filter);
+    findConstantAndWatchExpressions(ast.alternate, $filter);
+    findConstantAndWatchExpressions(ast.consequent, $filter);
+    ast.constant = ast.test.constant && ast.alternate.constant && ast.consequent.constant;
+    ast.toWatch = ast.constant ? [] : [ast];
+    break;
+  case AST.Identifier:
+    ast.constant = false;
+    ast.toWatch = [ast];
+    break;
+  case AST.MemberExpression:
+    findConstantAndWatchExpressions(ast.object, $filter);
+    if (ast.computed) {
+      findConstantAndWatchExpressions(ast.property, $filter);
+    }
+    ast.constant = ast.object.constant && (!ast.computed || ast.property.constant);
+    ast.toWatch = [ast];
+    break;
+  case AST.CallExpression:
+    allConstants = ast.filter ? isStateless($filter, ast.callee.name) : false;
+    argsToWatch = [];
+    forEach(ast.arguments, function(expr) {
+      findConstantAndWatchExpressions(expr, $filter);
+      allConstants = allConstants && expr.constant;
+      if (!expr.constant) {
+        argsToWatch.push.apply(argsToWatch, expr.toWatch);
+      }
+    });
+    ast.constant = allConstants;
+    ast.toWatch = ast.filter && isStateless($filter, ast.callee.name) ? argsToWatch : [ast];
+    break;
+  case AST.AssignmentExpression:
+    findConstantAndWatchExpressions(ast.left, $filter);
+    findConstantAndWatchExpressions(ast.right, $filter);
+    ast.constant = ast.left.constant && ast.right.constant;
+    ast.toWatch = [ast];
+    break;
+  case AST.ArrayExpression:
+    allConstants = true;
+    argsToWatch = [];
+    forEach(ast.elements, function(expr) {
+      findConstantAndWatchExpressions(expr, $filter);
+      allConstants = allConstants && expr.constant;
+      if (!expr.constant) {
+        argsToWatch.push.apply(argsToWatch, expr.toWatch);
+      }
+    });
+    ast.constant = allConstants;
+    ast.toWatch = argsToWatch;
+    break;
+  case AST.ObjectExpression:
+    allConstants = true;
+    argsToWatch = [];
+    forEach(ast.properties, function(property) {
+      findConstantAndWatchExpressions(property.value, $filter);
+      allConstants = allConstants && property.value.constant;
+      if (!property.value.constant) {
+        argsToWatch.push.apply(argsToWatch, property.value.toWatch);
+      }
+    });
+    ast.constant = allConstants;
+    ast.toWatch = argsToWatch;
+    break;
+  case AST.ThisExpression:
+    ast.constant = false;
+    ast.toWatch = [];
+    break;
+  }
+}
+
+function getInputs(body) {
+  if (body.length != 1) return;
+  var lastExpression = body[0].expression;
+  var candidate = lastExpression.toWatch;
+  if (candidate.length !== 1) return candidate;
+  return candidate[0] !== lastExpression ? candidate : undefined;
+}
+
+function isAssignable(ast) {
+  return ast.type === AST.Identifier || ast.type === AST.MemberExpression;
+}
+
+function assignableAST(ast) {
+  if (ast.body.length === 1 && isAssignable(ast.body[0].expression)) {
+    return {type: AST.AssignmentExpression, left: ast.body[0].expression, right: {type: AST.NGValueParameter}, operator: '='};
+  }
+}
+
+function isLiteral(ast) {
+  return ast.body.length === 0 ||
+      ast.body.length === 1 && (
+      ast.body[0].expression.type === AST.Literal ||
+      ast.body[0].expression.type === AST.ArrayExpression ||
+      ast.body[0].expression.type === AST.ObjectExpression);
+}
+
+function isConstant(ast) {
+  return ast.constant;
+}
+
+function ASTCompiler(astBuilder, $filter) {
+  this.astBuilder = astBuilder;
+  this.$filter = $filter;
+}
+
+ASTCompiler.prototype = {
+  compile: function(expression, expensiveChecks) {
+    var self = this;
+    var ast = this.astBuilder.ast(expression);
+    this.state = {
+      nextId: 0,
+      filters: {},
+      expensiveChecks: expensiveChecks,
+      fn: {vars: [], body: [], own: {}},
+      assign: {vars: [], body: [], own: {}},
+      inputs: []
+    };
+    findConstantAndWatchExpressions(ast, self.$filter);
+    var extra = '';
+    var assignable;
+    this.stage = 'assign';
+    if ((assignable = assignableAST(ast))) {
+      this.state.computing = 'assign';
+      var result = this.nextId();
+      this.recurse(assignable, result);
+      this.return_(result);
+      extra = 'fn.assign=' + this.generateFunction('assign', 's,v,l');
+    }
+    var toWatch = getInputs(ast.body);
+    self.stage = 'inputs';
+    forEach(toWatch, function(watch, key) {
+      var fnKey = 'fn' + key;
+      self.state[fnKey] = {vars: [], body: [], own: {}};
+      self.state.computing = fnKey;
+      var intoId = self.nextId();
+      self.recurse(watch, intoId);
+      self.return_(intoId);
+      self.state.inputs.push(fnKey);
+      watch.watchId = key;
+    });
+    this.state.computing = 'fn';
+    this.stage = 'main';
+    this.recurse(ast);
+    var fnString =
+      // The build and minification steps remove the string "use strict" from the code, but this is done using a regex.
+      // This is a workaround for this until we do a better job at only removing the prefix only when we should.
+      '"' + this.USE + ' ' + this.STRICT + '";\n' +
+      this.filterPrefix() +
+      'var fn=' + this.generateFunction('fn', 's,l,a,i') +
+      extra +
+      this.watchFns() +
+      'return fn;';
+
+    /* jshint -W054 */
+    var fn = (new Function('$filter',
+        'ensureSafeMemberName',
+        'ensureSafeObject',
+        'ensureSafeFunction',
+        'getStringValue',
+        'ensureSafeAssignContext',
+        'ifDefined',
+        'plus',
+        'text',
+        fnString))(
+          this.$filter,
+          ensureSafeMemberName,
+          ensureSafeObject,
+          ensureSafeFunction,
+          getStringValue,
+          ensureSafeAssignContext,
+          ifDefined,
+          plusFn,
+          expression);
+    /* jshint +W054 */
+    this.state = this.stage = undefined;
+    fn.literal = isLiteral(ast);
+    fn.constant = isConstant(ast);
+    return fn;
+  },
+
+  USE: 'use',
+
+  STRICT: 'strict',
+
+  watchFns: function() {
+    var result = [];
+    var fns = this.state.inputs;
+    var self = this;
+    forEach(fns, function(name) {
+      result.push('var ' + name + '=' + self.generateFunction(name, 's'));
+    });
+    if (fns.length) {
+      result.push('fn.inputs=[' + fns.join(',') + '];');
+    }
+    return result.join('');
+  },
+
+  generateFunction: function(name, params) {
+    return 'function(' + params + '){' +
+        this.varsPrefix(name) +
+        this.body(name) +
+        '};';
+  },
+
+  filterPrefix: function() {
+    var parts = [];
+    var self = this;
+    forEach(this.state.filters, function(id, filter) {
+      parts.push(id + '=$filter(' + self.escape(filter) + ')');
+    });
+    if (parts.length) return 'var ' + parts.join(',') + ';';
+    return '';
+  },
+
+  varsPrefix: function(section) {
+    return this.state[section].vars.length ? 'var ' + this.state[section].vars.join(',') + ';' : '';
+  },
+
+  body: function(section) {
+    return this.state[section].body.join('');
+  },
+
+  recurse: function(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck) {
+    var left, right, self = this, args, expression;
+    recursionFn = recursionFn || noop;
+    if (!skipWatchIdCheck && isDefined(ast.watchId)) {
+      intoId = intoId || this.nextId();
+      this.if_('i',
+        this.lazyAssign(intoId, this.computedMember('i', ast.watchId)),
+        this.lazyRecurse(ast, intoId, nameId, recursionFn, create, true)
+      );
+      return;
+    }
+    switch (ast.type) {
+    case AST.Program:
+      forEach(ast.body, function(expression, pos) {
+        self.recurse(expression.expression, undefined, undefined, function(expr) { right = expr; });
+        if (pos !== ast.body.length - 1) {
+          self.current().body.push(right, ';');
+        } else {
+          self.return_(right);
+        }
+      });
+      break;
+    case AST.Literal:
+      expression = this.escape(ast.value);
+      this.assign(intoId, expression);
+      recursionFn(expression);
+      break;
+    case AST.UnaryExpression:
+      this.recurse(ast.argument, undefined, undefined, function(expr) { right = expr; });
+      expression = ast.operator + '(' + this.ifDefined(right, 0) + ')';
+      this.assign(intoId, expression);
+      recursionFn(expression);
+      break;
+    case AST.BinaryExpression:
+      this.recurse(ast.left, undefined, undefined, function(expr) { left = expr; });
+      this.recurse(ast.right, undefined, undefined, function(expr) { right = expr; });
+      if (ast.operator === '+') {
+        expression = this.plus(left, right);
+      } else if (ast.operator === '-') {
+        expression = this.ifDefined(left, 0) + ast.operator + this.ifDefined(right, 0);
+      } else {
+        expression = '(' + left + ')' + ast.operator + '(' + right + ')';
+      }
+      this.assign(intoId, expression);
+      recursionFn(expression);
+      break;
+    case AST.LogicalExpression:
+      intoId = intoId || this.nextId();
+      self.recurse(ast.left, intoId);
+      self.if_(ast.operator === '&&' ? intoId : self.not(intoId), self.lazyRecurse(ast.right, intoId));
+      recursionFn(intoId);
+      break;
+    case AST.ConditionalExpression:
+      intoId = intoId || this.nextId();
+      self.recurse(ast.test, intoId);
+      self.if_(intoId, self.lazyRecurse(ast.alternate, intoId), self.lazyRecurse(ast.consequent, intoId));
+      recursionFn(intoId);
+      break;
+    case AST.Identifier:
+      intoId = intoId || this.nextId();
+      if (nameId) {
+        nameId.context = self.stage === 'inputs' ? 's' : this.assign(this.nextId(), this.getHasOwnProperty('l', ast.name) + '?l:s');
+        nameId.computed = false;
+        nameId.name = ast.name;
+      }
+      ensureSafeMemberName(ast.name);
+      self.if_(self.stage === 'inputs' || self.not(self.getHasOwnProperty('l', ast.name)),
+        function() {
+          self.if_(self.stage === 'inputs' || 's', function() {
+            if (create && create !== 1) {
+              self.if_(
+                self.not(self.nonComputedMember('s', ast.name)),
+                self.lazyAssign(self.nonComputedMember('s', ast.name), '{}'));
+            }
+            self.assign(intoId, self.nonComputedMember('s', ast.name));
+          });
+        }, intoId && self.lazyAssign(intoId, self.nonComputedMember('l', ast.name))
+        );
+      if (self.state.expensiveChecks || isPossiblyDangerousMemberName(ast.name)) {
+        self.addEnsureSafeObject(intoId);
+      }
+      recursionFn(intoId);
+      break;
+    case AST.MemberExpression:
+      left = nameId && (nameId.context = this.nextId()) || this.nextId();
+      intoId = intoId || this.nextId();
+      self.recurse(ast.object, left, undefined, function() {
+        self.if_(self.notNull(left), function() {
+          if (ast.computed) {
+            right = self.nextId();
+            self.recurse(ast.property, right);
+            self.getStringValue(right);
+            self.addEnsureSafeMemberName(right);
+            if (create && create !== 1) {
+              self.if_(self.not(self.computedMember(left, right)), self.lazyAssign(self.computedMember(left, right), '{}'));
+            }
+            expression = self.ensureSafeObject(self.computedMember(left, right));
+            self.assign(intoId, expression);
+            if (nameId) {
+              nameId.computed = true;
+              nameId.name = right;
+            }
+          } else {
+            ensureSafeMemberName(ast.property.name);
+            if (create && create !== 1) {
+              self.if_(self.not(self.nonComputedMember(left, ast.property.name)), self.lazyAssign(self.nonComputedMember(left, ast.property.name), '{}'));
+            }
+            expression = self.nonComputedMember(left, ast.property.name);
+            if (self.state.expensiveChecks || isPossiblyDangerousMemberName(ast.property.name)) {
+              expression = self.ensureSafeObject(expression);
+            }
+            self.assign(intoId, expression);
+            if (nameId) {
+              nameId.computed = false;
+              nameId.name = ast.property.name;
+            }
+          }
+        }, function() {
+          self.assign(intoId, 'undefined');
+        });
+        recursionFn(intoId);
+      }, !!create);
+      break;
+    case AST.CallExpression:
+      intoId = intoId || this.nextId();
+      if (ast.filter) {
+        right = self.filter(ast.callee.name);
+        args = [];
+        forEach(ast.arguments, function(expr) {
+          var argument = self.nextId();
+          self.recurse(expr, argument);
+          args.push(argument);
+        });
+        expression = right + '(' + args.join(',') + ')';
+        self.assign(intoId, expression);
+        recursionFn(intoId);
+      } else {
+        right = self.nextId();
+        left = {};
+        args = [];
+        self.recurse(ast.callee, right, left, function() {
+          self.if_(self.notNull(right), function() {
+            self.addEnsureSafeFunction(right);
+            forEach(ast.arguments, function(expr) {
+              self.recurse(expr, self.nextId(), undefined, function(argument) {
+                args.push(self.ensureSafeObject(argument));
+              });
+            });
+            if (left.name) {
+              if (!self.state.expensiveChecks) {
+                self.addEnsureSafeObject(left.context);
+              }
+              expression = self.member(left.context, left.name, left.computed) + '(' + args.join(',') + ')';
+            } else {
+              expression = right + '(' + args.join(',') + ')';
+            }
+            expression = self.ensureSafeObject(expression);
+            self.assign(intoId, expression);
+          }, function() {
+            self.assign(intoId, 'undefined');
+          });
+          recursionFn(intoId);
+        });
+      }
+      break;
+    case AST.AssignmentExpression:
+      right = this.nextId();
+      left = {};
+      if (!isAssignable(ast.left)) {
+        throw $parseMinErr('lval', 'Trying to assing a value to a non l-value');
+      }
+      this.recurse(ast.left, undefined, left, function() {
+        self.if_(self.notNull(left.context), function() {
+          self.recurse(ast.right, right);
+          self.addEnsureSafeObject(self.member(left.context, left.name, left.computed));
+          self.addEnsureSafeAssignContext(left.context);
+          expression = self.member(left.context, left.name, left.computed) + ast.operator + right;
+          self.assign(intoId, expression);
+          recursionFn(intoId || expression);
+        });
+      }, 1);
+      break;
+    case AST.ArrayExpression:
+      args = [];
+      forEach(ast.elements, function(expr) {
+        self.recurse(expr, self.nextId(), undefined, function(argument) {
+          args.push(argument);
+        });
+      });
+      expression = '[' + args.join(',') + ']';
+      this.assign(intoId, expression);
+      recursionFn(expression);
+      break;
+    case AST.ObjectExpression:
+      args = [];
+      forEach(ast.properties, function(property) {
+        self.recurse(property.value, self.nextId(), undefined, function(expr) {
+          args.push(self.escape(
+              property.key.type === AST.Identifier ? property.key.name :
+                ('' + property.key.value)) +
+              ':' + expr);
+        });
+      });
+      expression = '{' + args.join(',') + '}';
+      this.assign(intoId, expression);
+      recursionFn(expression);
+      break;
+    case AST.ThisExpression:
+      this.assign(intoId, 's');
+      recursionFn('s');
+      break;
+    case AST.NGValueParameter:
+      this.assign(intoId, 'v');
+      recursionFn('v');
+      break;
+    }
+  },
+
+  getHasOwnProperty: function(element, property) {
+    var key = element + '.' + property;
+    var own = this.current().own;
+    if (!own.hasOwnProperty(key)) {
+      own[key] = this.nextId(false, element + '&&(' + this.escape(property) + ' in ' + element + ')');
+    }
+    return own[key];
+  },
+
+  assign: function(id, value) {
+    if (!id) return;
+    this.current().body.push(id, '=', value, ';');
+    return id;
+  },
+
+  filter: function(filterName) {
+    if (!this.state.filters.hasOwnProperty(filterName)) {
+      this.state.filters[filterName] = this.nextId(true);
+    }
+    return this.state.filters[filterName];
+  },
+
+  ifDefined: function(id, defaultValue) {
+    return 'ifDefined(' + id + ',' + this.escape(defaultValue) + ')';
+  },
+
+  plus: function(left, right) {
+    return 'plus(' + left + ',' + right + ')';
+  },
+
+  return_: function(id) {
+    this.current().body.push('return ', id, ';');
+  },
+
+  if_: function(test, alternate, consequent) {
+    if (test === true) {
+      alternate();
+    } else {
+      var body = this.current().body;
+      body.push('if(', test, '){');
+      alternate();
+      body.push('}');
+      if (consequent) {
+        body.push('else{');
+        consequent();
+        body.push('}');
+      }
+    }
+  },
+
+  not: function(expression) {
+    return '!(' + expression + ')';
+  },
+
+  notNull: function(expression) {
+    return expression + '!=null';
+  },
+
+  nonComputedMember: function(left, right) {
+    return left + '.' + right;
+  },
+
+  computedMember: function(left, right) {
+    return left + '[' + right + ']';
+  },
+
+  member: function(left, right, computed) {
+    if (computed) return this.computedMember(left, right);
+    return this.nonComputedMember(left, right);
+  },
+
+  addEnsureSafeObject: function(item) {
+    this.current().body.push(this.ensureSafeObject(item), ';');
+  },
+
+  addEnsureSafeMemberName: function(item) {
+    this.current().body.push(this.ensureSafeMemberName(item), ';');
+  },
+
+  addEnsureSafeFunction: function(item) {
+    this.current().body.push(this.ensureSafeFunction(item), ';');
+  },
+
+  addEnsureSafeAssignContext: function(item) {
+    this.current().body.push(this.ensureSafeAssignContext(item), ';');
+  },
+
+  ensureSafeObject: function(item) {
+    return 'ensureSafeObject(' + item + ',text)';
+  },
+
+  ensureSafeMemberName: function(item) {
+    return 'ensureSafeMemberName(' + item + ',text)';
+  },
+
+  ensureSafeFunction: function(item) {
+    return 'ensureSafeFunction(' + item + ',text)';
+  },
+
+  getStringValue: function(item) {
+    this.assign(item, 'getStringValue(' + item + ',text)');
+  },
+
+  ensureSafeAssignContext: function(item) {
+    return 'ensureSafeAssignContext(' + item + ',text)';
+  },
+
+  lazyRecurse: function(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck) {
+    var self = this;
+    return function() {
+      self.recurse(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck);
+    };
+  },
+
+  lazyAssign: function(id, value) {
+    var self = this;
+    return function() {
+      self.assign(id, value);
+    };
+  },
+
+  stringEscapeRegex: /[^ a-zA-Z0-9]/g,
+
+  stringEscapeFn: function(c) {
+    return '\\u' + ('0000' + c.charCodeAt(0).toString(16)).slice(-4);
+  },
+
+  escape: function(value) {
+    if (isString(value)) return "'" + value.replace(this.stringEscapeRegex, this.stringEscapeFn) + "'";
+    if (isNumber(value)) return value.toString();
+    if (value === true) return 'true';
+    if (value === false) return 'false';
+    if (value === null) return 'null';
+    if (typeof value === 'undefined') return 'undefined';
+
+    throw $parseMinErr('esc', 'IMPOSSIBLE');
+  },
+
+  nextId: function(skip, init) {
+    var id = 'v' + (this.state.nextId++);
+    if (!skip) {
+      this.current().vars.push(id + (init ? '=' + init : ''));
+    }
+    return id;
+  },
+
+  current: function() {
+    return this.state[this.state.computing];
+  }
+};
+
+
+function ASTInterpreter(astBuilder, $filter) {
+  this.astBuilder = astBuilder;
+  this.$filter = $filter;
+}
+
+ASTInterpreter.prototype = {
+  compile: function(expression, expensiveChecks) {
+    var self = this;
+    var ast = this.astBuilder.ast(expression);
+    this.expression = expression;
+    this.expensiveChecks = expensiveChecks;
+    findConstantAndWatchExpressions(ast, self.$filter);
+    var assignable;
+    var assign;
+    if ((assignable = assignableAST(ast))) {
+      assign = this.recurse(assignable);
+    }
+    var toWatch = getInputs(ast.body);
+    var inputs;
+    if (toWatch) {
+      inputs = [];
+      forEach(toWatch, function(watch, key) {
+        var input = self.recurse(watch);
+        watch.input = input;
+        inputs.push(input);
+        watch.watchId = key;
+      });
+    }
+    var expressions = [];
+    forEach(ast.body, function(expression) {
+      expressions.push(self.recurse(expression.expression));
+    });
+    var fn = ast.body.length === 0 ? function() {} :
+             ast.body.length === 1 ? expressions[0] :
+             function(scope, locals) {
+               var lastValue;
+               forEach(expressions, function(exp) {
+                 lastValue = exp(scope, locals);
+               });
+               return lastValue;
+             };
+    if (assign) {
+      fn.assign = function(scope, value, locals) {
+        return assign(scope, locals, value);
+      };
+    }
+    if (inputs) {
+      fn.inputs = inputs;
+    }
+    fn.literal = isLiteral(ast);
+    fn.constant = isConstant(ast);
+    return fn;
+  },
+
+  recurse: function(ast, context, create) {
+    var left, right, self = this, args, expression;
+    if (ast.input) {
+      return this.inputs(ast.input, ast.watchId);
+    }
+    switch (ast.type) {
+    case AST.Literal:
+      return this.value(ast.value, context);
+    case AST.UnaryExpression:
+      right = this.recurse(ast.argument);
+      return this['unary' + ast.operator](right, context);
+    case AST.BinaryExpression:
+      left = this.recurse(ast.left);
+      right = this.recurse(ast.right);
+      return this['binary' + ast.operator](left, right, context);
+    case AST.LogicalExpression:
+      left = this.recurse(ast.left);
+      right = this.recurse(ast.right);
+      return this['binary' + ast.operator](left, right, context);
+    case AST.ConditionalExpression:
+      return this['ternary?:'](
+        this.recurse(ast.test),
+        this.recurse(ast.alternate),
+        this.recurse(ast.consequent),
+        context
+      );
+    case AST.Identifier:
+      ensureSafeMemberName(ast.name, self.expression);
+      return self.identifier(ast.name,
+                             self.expensiveChecks || isPossiblyDangerousMemberName(ast.name),
+                             context, create, self.expression);
+    case AST.MemberExpression:
+      left = this.recurse(ast.object, false, !!create);
+      if (!ast.computed) {
+        ensureSafeMemberName(ast.property.name, self.expression);
+        right = ast.property.name;
+      }
+      if (ast.computed) right = this.recurse(ast.property);
+      return ast.computed ?
+        this.computedMember(left, right, context, create, self.expression) :
+        this.nonComputedMember(left, right, self.expensiveChecks, context, create, self.expression);
+    case AST.CallExpression:
+      args = [];
+      forEach(ast.arguments, function(expr) {
+        args.push(self.recurse(expr));
+      });
+      if (ast.filter) right = this.$filter(ast.callee.name);
+      if (!ast.filter) right = this.recurse(ast.callee, true);
+      return ast.filter ?
+        function(scope, locals, assign, inputs) {
+          var values = [];
+          for (var i = 0; i < args.length; ++i) {
+            values.push(args[i](scope, locals, assign, inputs));
+          }
+          var value = right.apply(undefined, values, inputs);
+          return context ? {context: undefined, name: undefined, value: value} : value;
+        } :
+        function(scope, locals, assign, inputs) {
+          var rhs = right(scope, locals, assign, inputs);
+          var value;
+          if (rhs.value != null) {
+            ensureSafeObject(rhs.context, self.expression);
+            ensureSafeFunction(rhs.value, self.expression);
+            var values = [];
+            for (var i = 0; i < args.length; ++i) {
+              values.push(ensureSafeObject(args[i](scope, locals, assign, inputs), self.expression));
+            }
+            value = ensureSafeObject(rhs.value.apply(rhs.context, values), self.expression);
+          }
+          return context ? {value: value} : value;
+        };
+    case AST.AssignmentExpression:
+      left = this.recurse(ast.left, true, 1);
+      right = this.recurse(ast.right);
+      return function(scope, locals, assign, inputs) {
+        var lhs = left(scope, locals, assign, inputs);
+        var rhs = right(scope, locals, assign, inputs);
+        ensureSafeObject(lhs.value, self.expression);
+        ensureSafeAssignContext(lhs.context);
+        lhs.context[lhs.name] = rhs;
+        return context ? {value: rhs} : rhs;
+      };
+    case AST.ArrayExpression:
+      args = [];
+      forEach(ast.elements, function(expr) {
+        args.push(self.recurse(expr));
+      });
+      return function(scope, locals, assign, inputs) {
+        var value = [];
+        for (var i = 0; i < args.length; ++i) {
+          value.push(args[i](scope, locals, assign, inputs));
+        }
+        return context ? {value: value} : value;
+      };
+    case AST.ObjectExpression:
+      args = [];
+      forEach(ast.properties, function(property) {
+        args.push({key: property.key.type === AST.Identifier ?
+                        property.key.name :
+                        ('' + property.key.value),
+                   value: self.recurse(property.value)
+        });
+      });
+      return function(scope, locals, assign, inputs) {
+        var value = {};
+        for (var i = 0; i < args.length; ++i) {
+          value[args[i].key] = args[i].value(scope, locals, assign, inputs);
+        }
+        return context ? {value: value} : value;
+      };
+    case AST.ThisExpression:
+      return function(scope) {
+        return context ? {value: scope} : scope;
+      };
+    case AST.NGValueParameter:
+      return function(scope, locals, assign, inputs) {
+        return context ? {value: assign} : assign;
+      };
+    }
+  },
+
+  'unary+': function(argument, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = argument(scope, locals, assign, inputs);
+      if (isDefined(arg)) {
+        arg = +arg;
+      } else {
+        arg = 0;
+      }
+      return context ? {value: arg} : arg;
+    };
+  },
+  'unary-': function(argument, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = argument(scope, locals, assign, inputs);
+      if (isDefined(arg)) {
+        arg = -arg;
+      } else {
+        arg = 0;
+      }
+      return context ? {value: arg} : arg;
+    };
+  },
+  'unary!': function(argument, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = !argument(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary+': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var lhs = left(scope, locals, assign, inputs);
+      var rhs = right(scope, locals, assign, inputs);
+      var arg = plusFn(lhs, rhs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary-': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var lhs = left(scope, locals, assign, inputs);
+      var rhs = right(scope, locals, assign, inputs);
+      var arg = (isDefined(lhs) ? lhs : 0) - (isDefined(rhs) ? rhs : 0);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary*': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) * right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary/': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) / right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary%': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) % right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary===': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) === right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary!==': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) !== right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary==': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) == right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary!=': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) != right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary<': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) < right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary>': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) > right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary<=': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) <= right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary>=': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) >= right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary&&': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) && right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary||': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) || right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'ternary?:': function(test, alternate, consequent, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = test(scope, locals, assign, inputs) ? alternate(scope, locals, assign, inputs) : consequent(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  value: function(value, context) {
+    return function() { return context ? {context: undefined, name: undefined, value: value} : value; };
+  },
+  identifier: function(name, expensiveChecks, context, create, expression) {
+    return function(scope, locals, assign, inputs) {
+      var base = locals && (name in locals) ? locals : scope;
+      if (create && create !== 1 && base && !(base[name])) {
+        base[name] = {};
+      }
+      var value = base ? base[name] : undefined;
+      if (expensiveChecks) {
+        ensureSafeObject(value, expression);
+      }
+      if (context) {
+        return {context: base, name: name, value: value};
+      } else {
+        return value;
+      }
+    };
+  },
+  computedMember: function(left, right, context, create, expression) {
+    return function(scope, locals, assign, inputs) {
+      var lhs = left(scope, locals, assign, inputs);
+      var rhs;
+      var value;
+      if (lhs != null) {
+        rhs = right(scope, locals, assign, inputs);
+        rhs = getStringValue(rhs);
+        ensureSafeMemberName(rhs, expression);
+        if (create && create !== 1 && lhs && !(lhs[rhs])) {
+          lhs[rhs] = {};
+        }
+        value = lhs[rhs];
+        ensureSafeObject(value, expression);
+      }
+      if (context) {
+        return {context: lhs, name: rhs, value: value};
+      } else {
+        return value;
+      }
+    };
+  },
+  nonComputedMember: function(left, right, expensiveChecks, context, create, expression) {
+    return function(scope, locals, assign, inputs) {
+      var lhs = left(scope, locals, assign, inputs);
+      if (create && create !== 1 && lhs && !(lhs[right])) {
+        lhs[right] = {};
+      }
+      var value = lhs != null ? lhs[right] : undefined;
+      if (expensiveChecks || isPossiblyDangerousMemberName(right)) {
+        ensureSafeObject(value, expression);
+      }
+      if (context) {
+        return {context: lhs, name: right, value: value};
+      } else {
+        return value;
+      }
+    };
+  },
+  inputs: function(input, watchId) {
+    return function(scope, value, locals, inputs) {
+      if (inputs) return inputs[watchId];
+      return input(scope, value, locals);
+    };
+  }
+};
+
+/**
+ * @constructor
+ */
+var Parser = function(lexer, $filter, options) {
+  this.lexer = lexer;
+  this.$filter = $filter;
+  this.options = options;
+  this.ast = new AST(this.lexer);
+  this.astCompiler = options.csp ? new ASTInterpreter(this.ast, $filter) :
+                                   new ASTCompiler(this.ast, $filter);
+};
+
+Parser.prototype = {
+  constructor: Parser,
+
+  parse: function(text) {
+    return this.astCompiler.compile(text, this.options.expensiveChecks);
+  }
+};
+
+var getterFnCacheDefault = createMap();
+var getterFnCacheExpensive = createMap();
+
+function isPossiblyDangerousMemberName(name) {
+  return name == 'constructor';
+}
+
+var objectValueOf = Object.prototype.valueOf;
+
+function getValueOf(value) {
+  return isFunction(value.valueOf) ? value.valueOf() : objectValueOf.call(value);
+}
+
+///////////////////////////////////
+
+/**
+ * @ngdoc service
+ * @name $parse
+ * @kind function
+ *
+ * @description
+ *
+ * Converts Angular {@link guide/expression expression} into a function.
+ *
+ * ```js
+ *   var getter = $parse('user.name');
+ *   var setter = getter.assign;
+ *   var context = {user:{name:'angular'}};
+ *   var locals = {user:{name:'local'}};
+ *
+ *   expect(getter(context)).toEqual('angular');
+ *   setter(context, 'newValue');
+ *   expect(context.user.name).toEqual('newValue');
+ *   expect(getter(context, locals)).toEqual('local');
+ * ```
+ *
+ *
+ * @param {string} expression String expression to compile.
+ * @returns {function(context, locals)} a function which represents the compiled expression:
+ *
+ *    * `context` – `{object}` – an object against which any expressions embedded in the strings
+ *      are evaluated against (typically a scope object).
+ *    * `locals` – `{object=}` – local variables context object, useful for overriding values in
+ *      `context`.
+ *
+ *    The returned function also has the following properties:
+ *      * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript
+ *        literal.
+ *      * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript
+ *        constant literals.
+ *      * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be
+ *        set to a function to change its value on the given context.
+ *
+ */
+
+
+/**
+ * @ngdoc provider
+ * @name $parseProvider
+ *
+ * @description
+ * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse}
+ *  service.
+ */
+function $ParseProvider() {
+  var cacheDefault = createMap();
+  var cacheExpensive = createMap();
+
+  this.$get = ['$filter', function($filter) {
+    var noUnsafeEval = csp().noUnsafeEval;
+    var $parseOptions = {
+          csp: noUnsafeEval,
+          expensiveChecks: false
+        },
+        $parseOptionsExpensive = {
+          csp: noUnsafeEval,
+          expensiveChecks: true
+        };
+
+    return function $parse(exp, interceptorFn, expensiveChecks) {
+      var parsedExpression, oneTime, cacheKey;
+
+      switch (typeof exp) {
+        case 'string':
+          exp = exp.trim();
+          cacheKey = exp;
+
+          var cache = (expensiveChecks ? cacheExpensive : cacheDefault);
+          parsedExpression = cache[cacheKey];
+
+          if (!parsedExpression) {
+            if (exp.charAt(0) === ':' && exp.charAt(1) === ':') {
+              oneTime = true;
+              exp = exp.substring(2);
+            }
+            var parseOptions = expensiveChecks ? $parseOptionsExpensive : $parseOptions;
+            var lexer = new Lexer(parseOptions);
+            var parser = new Parser(lexer, $filter, parseOptions);
+            parsedExpression = parser.parse(exp);
+            if (parsedExpression.constant) {
+              parsedExpression.$$watchDelegate = constantWatchDelegate;
+            } else if (oneTime) {
+              parsedExpression.$$watchDelegate = parsedExpression.literal ?
+                  oneTimeLiteralWatchDelegate : oneTimeWatchDelegate;
+            } else if (parsedExpression.inputs) {
+              parsedExpression.$$watchDelegate = inputsWatchDelegate;
+            }
+            cache[cacheKey] = parsedExpression;
+          }
+          return addInterceptor(parsedExpression, interceptorFn);
+
+        case 'function':
+          return addInterceptor(exp, interceptorFn);
+
+        default:
+          return noop;
+      }
+    };
+
+    function expressionInputDirtyCheck(newValue, oldValueOfValue) {
+
+      if (newValue == null || oldValueOfValue == null) { // null/undefined
+        return newValue === oldValueOfValue;
+      }
+
+      if (typeof newValue === 'object') {
+
+        // attempt to convert the value to a primitive type
+        // TODO(docs): add a note to docs that by implementing valueOf even objects and arrays can
+        //             be cheaply dirty-checked
+        newValue = getValueOf(newValue);
+
+        if (typeof newValue === 'object') {
+          // objects/arrays are not supported - deep-watching them would be too expensive
+          return false;
+        }
+
+        // fall-through to the primitive equality check
+      }
+
+      //Primitive or NaN
+      return newValue === oldValueOfValue || (newValue !== newValue && oldValueOfValue !== oldValueOfValue);
+    }
+
+    function inputsWatchDelegate(scope, listener, objectEquality, parsedExpression, prettyPrintExpression) {
+      var inputExpressions = parsedExpression.inputs;
+      var lastResult;
+
+      if (inputExpressions.length === 1) {
+        var oldInputValueOf = expressionInputDirtyCheck; // init to something unique so that equals check fails
+        inputExpressions = inputExpressions[0];
+        return scope.$watch(function expressionInputWatch(scope) {
+          var newInputValue = inputExpressions(scope);
+          if (!expressionInputDirtyCheck(newInputValue, oldInputValueOf)) {
+            lastResult = parsedExpression(scope, undefined, undefined, [newInputValue]);
+            oldInputValueOf = newInputValue && getValueOf(newInputValue);
+          }
+          return lastResult;
+        }, listener, objectEquality, prettyPrintExpression);
+      }
+
+      var oldInputValueOfValues = [];
+      var oldInputValues = [];
+      for (var i = 0, ii = inputExpressions.length; i < ii; i++) {
+        oldInputValueOfValues[i] = expressionInputDirtyCheck; // init to something unique so that equals check fails
+        oldInputValues[i] = null;
+      }
+
+      return scope.$watch(function expressionInputsWatch(scope) {
+        var changed = false;
+
+        for (var i = 0, ii = inputExpressions.length; i < ii; i++) {
+          var newInputValue = inputExpressions[i](scope);
+          if (changed || (changed = !expressionInputDirtyCheck(newInputValue, oldInputValueOfValues[i]))) {
+            oldInputValues[i] = newInputValue;
+            oldInputValueOfValues[i] = newInputValue && getValueOf(newInputValue);
+          }
+        }
+
+        if (changed) {
+          lastResult = parsedExpression(scope, undefined, undefined, oldInputValues);
+        }
+
+        return lastResult;
+      }, listener, objectEquality, prettyPrintExpression);
+    }
+
+    function oneTimeWatchDelegate(scope, listener, objectEquality, parsedExpression) {
+      var unwatch, lastValue;
+      return unwatch = scope.$watch(function oneTimeWatch(scope) {
+        return parsedExpression(scope);
+      }, function oneTimeListener(value, old, scope) {
+        lastValue = value;
+        if (isFunction(listener)) {
+          listener.apply(this, arguments);
+        }
+        if (isDefined(value)) {
+          scope.$$postDigest(function() {
+            if (isDefined(lastValue)) {
+              unwatch();
+            }
+          });
+        }
+      }, objectEquality);
+    }
+
+    function oneTimeLiteralWatchDelegate(scope, listener, objectEquality, parsedExpression) {
+      var unwatch, lastValue;
+      return unwatch = scope.$watch(function oneTimeWatch(scope) {
+        return parsedExpression(scope);
+      }, function oneTimeListener(value, old, scope) {
+        lastValue = value;
+        if (isFunction(listener)) {
+          listener.call(this, value, old, scope);
+        }
+        if (isAllDefined(value)) {
+          scope.$$postDigest(function() {
+            if (isAllDefined(lastValue)) unwatch();
+          });
+        }
+      }, objectEquality);
+
+      function isAllDefined(value) {
+        var allDefined = true;
+        forEach(value, function(val) {
+          if (!isDefined(val)) allDefined = false;
+        });
+        return allDefined;
+      }
+    }
+
+    function constantWatchDelegate(scope, listener, objectEquality, parsedExpression) {
+      var unwatch;
+      return unwatch = scope.$watch(function constantWatch(scope) {
+        return parsedExpression(scope);
+      }, function constantListener(value, old, scope) {
+        if (isFunction(listener)) {
+          listener.apply(this, arguments);
+        }
+        unwatch();
+      }, objectEquality);
+    }
+
+    function addInterceptor(parsedExpression, interceptorFn) {
+      if (!interceptorFn) return parsedExpression;
+      var watchDelegate = parsedExpression.$$watchDelegate;
+      var useInputs = false;
+
+      var regularWatch =
+          watchDelegate !== oneTimeLiteralWatchDelegate &&
+          watchDelegate !== oneTimeWatchDelegate;
+
+      var fn = regularWatch ? function regularInterceptedExpression(scope, locals, assign, inputs) {
+        var value = useInputs && inputs ? inputs[0] : parsedExpression(scope, locals, assign, inputs);
+        return interceptorFn(value, scope, locals);
+      } : function oneTimeInterceptedExpression(scope, locals, assign, inputs) {
+        var value = parsedExpression(scope, locals, assign, inputs);
+        var result = interceptorFn(value, scope, locals);
+        // we only return the interceptor's result if the
+        // initial value is defined (for bind-once)
+        return isDefined(value) ? result : value;
+      };
+
+      // Propagate $$watchDelegates other then inputsWatchDelegate
+      if (parsedExpression.$$watchDelegate &&
+          parsedExpression.$$watchDelegate !== inputsWatchDelegate) {
+        fn.$$watchDelegate = parsedExpression.$$watchDelegate;
+      } else if (!interceptorFn.$stateful) {
+        // If there is an interceptor, but no watchDelegate then treat the interceptor like
+        // we treat filters - it is assumed to be a pure function unless flagged with $stateful
+        fn.$$watchDelegate = inputsWatchDelegate;
+        useInputs = !parsedExpression.inputs;
+        fn.inputs = parsedExpression.inputs ? parsedExpression.inputs : [parsedExpression];
+      }
+
+      return fn;
+    }
+  }];
+}
+
+/**
+ * @ngdoc service
+ * @name $q
+ * @requires $rootScope
+ *
+ * @description
+ * A service that helps you run functions asynchronously, and use their return values (or exceptions)
+ * when they are done processing.
+ *
+ * This is an implementation of promises/deferred objects inspired by
+ * [Kris Kowal's Q](https://github.com/kriskowal/q).
+ *
+ * $q can be used in two fashions --- one which is more similar to Kris Kowal's Q or jQuery's Deferred
+ * implementations, and the other which resembles ES6 promises to some degree.
+ *
+ * # $q constructor
+ *
+ * The streamlined ES6 style promise is essentially just using $q as a constructor which takes a `resolver`
+ * function as the first argument. This is similar to the native Promise implementation from ES6 Harmony,
+ * see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).
+ *
+ * While the constructor-style use is supported, not all of the supporting methods from ES6 Harmony promises are
+ * available yet.
+ *
+ * It can be used like so:
+ *
+ * ```js
+ *   // for the purpose of this example let's assume that variables `$q` and `okToGreet`
+ *   // are available in the current lexical scope (they could have been injected or passed in).
+ *
+ *   function asyncGreet(name) {
+ *     // perform some asynchronous operation, resolve or reject the promise when appropriate.
+ *     return $q(function(resolve, reject) {
+ *       setTimeout(function() {
+ *         if (okToGreet(name)) {
+ *           resolve('Hello, ' + name + '!');
+ *         } else {
+ *           reject('Greeting ' + name + ' is not allowed.');
+ *         }
+ *       }, 1000);
+ *     });
+ *   }
+ *
+ *   var promise = asyncGreet('Robin Hood');
+ *   promise.then(function(greeting) {
+ *     alert('Success: ' + greeting);
+ *   }, function(reason) {
+ *     alert('Failed: ' + reason);
+ *   });
+ * ```
+ *
+ * Note: progress/notify callbacks are not currently supported via the ES6-style interface.
+ *
+ * Note: unlike ES6 behaviour, an exception thrown in the constructor function will NOT implicitly reject the promise.
+ *
+ * However, the more traditional CommonJS-style usage is still available, and documented below.
+ *
+ * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an
+ * interface for interacting with an object that represents the result of an action that is
+ * performed asynchronously, and may or may not be finished at any given point in time.
+ *
+ * From the perspective of dealing with error handling, deferred and promise APIs are to
+ * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming.
+ *
+ * ```js
+ *   // for the purpose of this example let's assume that variables `$q` and `okToGreet`
+ *   // are available in the current lexical scope (they could have been injected or passed in).
+ *
+ *   function asyncGreet(name) {
+ *     var deferred = $q.defer();
+ *
+ *     setTimeout(function() {
+ *       deferred.notify('About to greet ' + name + '.');
+ *
+ *       if (okToGreet(name)) {
+ *         deferred.resolve('Hello, ' + name + '!');
+ *       } else {
+ *         deferred.reject('Greeting ' + name + ' is not allowed.');
+ *       }
+ *     }, 1000);
+ *
+ *     return deferred.promise;
+ *   }
+ *
+ *   var promise = asyncGreet('Robin Hood');
+ *   promise.then(function(greeting) {
+ *     alert('Success: ' + greeting);
+ *   }, function(reason) {
+ *     alert('Failed: ' + reason);
+ *   }, function(update) {
+ *     alert('Got notification: ' + update);
+ *   });
+ * ```
+ *
+ * At first it might not be obvious why this extra complexity is worth the trouble. The payoff
+ * comes in the way of guarantees that promise and deferred APIs make, see
+ * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md.
+ *
+ * Additionally the promise api allows for composition that is very hard to do with the
+ * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach.
+ * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the
+ * section on serial or parallel joining of promises.
+ *
+ * # The Deferred API
+ *
+ * A new instance of deferred is constructed by calling `$q.defer()`.
+ *
+ * The purpose of the deferred object is to expose the associated Promise instance as well as APIs
+ * that can be used for signaling the successful or unsuccessful completion, as well as the status
+ * of the task.
+ *
+ * **Methods**
+ *
+ * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection
+ *   constructed via `$q.reject`, the promise will be rejected instead.
+ * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to
+ *   resolving it with a rejection constructed via `$q.reject`.
+ * - `notify(value)` - provides updates on the status of the promise's execution. This may be called
+ *   multiple times before the promise is either resolved or rejected.
+ *
+ * **Properties**
+ *
+ * - promise – `{Promise}` – promise object associated with this deferred.
+ *
+ *
+ * # The Promise API
+ *
+ * A new promise instance is created when a deferred instance is created and can be retrieved by
+ * calling `deferred.promise`.
+ *
+ * The purpose of the promise object is to allow for interested parties to get access to the result
+ * of the deferred task when it completes.
+ *
+ * **Methods**
+ *
+ * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or
+ *   will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously
+ *   as soon as the result is available. The callbacks are called with a single argument: the result
+ *   or rejection reason. Additionally, the notify callback may be called zero or more times to
+ *   provide a progress indication, before the promise is resolved or rejected.
+ *
+ *   This method *returns a new promise* which is resolved or rejected via the return value of the
+ *   `successCallback`, `errorCallback` (unless that value is a promise, in which case it is resolved
+ *   with the value which is resolved in that promise using
+ *   [promise chaining](http://www.html5rocks.com/en/tutorials/es6/promises/#toc-promises-queues)).
+ *   It also notifies via the return value of the `notifyCallback` method. The promise cannot be
+ *   resolved or rejected from the notifyCallback method.
+ *
+ * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)`
+ *
+ * - `finally(callback, notifyCallback)` – allows you to observe either the fulfillment or rejection of a promise,
+ *   but to do so without modifying the final value. This is useful to release resources or do some
+ *   clean-up that needs to be done whether the promise was rejected or resolved. See the [full
+ *   specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for
+ *   more information.
+ *
+ * # Chaining promises
+ *
+ * Because calling the `then` method of a promise returns a new derived promise, it is easily
+ * possible to create a chain of promises:
+ *
+ * ```js
+ *   promiseB = promiseA.then(function(result) {
+ *     return result + 1;
+ *   });
+ *
+ *   // promiseB will be resolved immediately after promiseA is resolved and its value
+ *   // will be the result of promiseA incremented by 1
+ * ```
+ *
+ * It is possible to create chains of any length and since a promise can be resolved with another
+ * promise (which will defer its resolution further), it is possible to pause/defer resolution of
+ * the promises at any point in the chain. This makes it possible to implement powerful APIs like
+ * $http's response interceptors.
+ *
+ *
+ * # Differences between Kris Kowal's Q and $q
+ *
+ *  There are two main differences:
+ *
+ * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation
+ *   mechanism in angular, which means faster propagation of resolution or rejection into your
+ *   models and avoiding unnecessary browser repaints, which would result in flickering UI.
+ * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains
+ *   all the important functionality needed for common async tasks.
+ *
+ *  # Testing
+ *
+ *  ```js
+ *    it('should simulate promise', inject(function($q, $rootScope) {
+ *      var deferred = $q.defer();
+ *      var promise = deferred.promise;
+ *      var resolvedValue;
+ *
+ *      promise.then(function(value) { resolvedValue = value; });
+ *      expect(resolvedValue).toBeUndefined();
+ *
+ *      // Simulate resolving of promise
+ *      deferred.resolve(123);
+ *      // Note that the 'then' function does not get called synchronously.
+ *      // This is because we want the promise API to always be async, whether or not
+ *      // it got called synchronously or asynchronously.
+ *      expect(resolvedValue).toBeUndefined();
+ *
+ *      // Propagate promise resolution to 'then' functions using $apply().
+ *      $rootScope.$apply();
+ *      expect(resolvedValue).toEqual(123);
+ *    }));
+ *  ```
+ *
+ * @param {function(function, function)} resolver Function which is responsible for resolving or
+ *   rejecting the newly created promise. The first parameter is a function which resolves the
+ *   promise, the second parameter is a function which rejects the promise.
+ *
+ * @returns {Promise} The newly created promise.
+ */
+function $QProvider() {
+
+  this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) {
+    return qFactory(function(callback) {
+      $rootScope.$evalAsync(callback);
+    }, $exceptionHandler);
+  }];
+}
+
+function $$QProvider() {
+  this.$get = ['$browser', '$exceptionHandler', function($browser, $exceptionHandler) {
+    return qFactory(function(callback) {
+      $browser.defer(callback);
+    }, $exceptionHandler);
+  }];
+}
+
+/**
+ * Constructs a promise manager.
+ *
+ * @param {function(function)} nextTick Function for executing functions in the next turn.
+ * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for
+ *     debugging purposes.
+ * @returns {object} Promise manager.
+ */
+function qFactory(nextTick, exceptionHandler) {
+  var $qMinErr = minErr('$q', TypeError);
+  function callOnce(self, resolveFn, rejectFn) {
+    var called = false;
+    function wrap(fn) {
+      return function(value) {
+        if (called) return;
+        called = true;
+        fn.call(self, value);
+      };
+    }
+
+    return [wrap(resolveFn), wrap(rejectFn)];
+  }
+
+  /**
+   * @ngdoc method
+   * @name ng.$q#defer
+   * @kind function
+   *
+   * @description
+   * Creates a `Deferred` object which represents a task which will finish in the future.
+   *
+   * @returns {Deferred} Returns a new instance of deferred.
+   */
+  var defer = function() {
+    return new Deferred();
+  };
+
+  function Promise() {
+    this.$$state = { status: 0 };
+  }
+
+  extend(Promise.prototype, {
+    then: function(onFulfilled, onRejected, progressBack) {
+      if (isUndefined(onFulfilled) && isUndefined(onRejected) && isUndefined(progressBack)) {
+        return this;
+      }
+      var result = new Deferred();
+
+      this.$$state.pending = this.$$state.pending || [];
+      this.$$state.pending.push([result, onFulfilled, onRejected, progressBack]);
+      if (this.$$state.status > 0) scheduleProcessQueue(this.$$state);
+
+      return result.promise;
+    },
+
+    "catch": function(callback) {
+      return this.then(null, callback);
+    },
+
+    "finally": function(callback, progressBack) {
+      return this.then(function(value) {
+        return handleCallback(value, true, callback);
+      }, function(error) {
+        return handleCallback(error, false, callback);
+      }, progressBack);
+    }
+  });
+
+  //Faster, more basic than angular.bind http://jsperf.com/angular-bind-vs-custom-vs-native
+  function simpleBind(context, fn) {
+    return function(value) {
+      fn.call(context, value);
+    };
+  }
+
+  function processQueue(state) {
+    var fn, deferred, pending;
+
+    pending = state.pending;
+    state.processScheduled = false;
+    state.pending = undefined;
+    for (var i = 0, ii = pending.length; i < ii; ++i) {
+      deferred = pending[i][0];
+      fn = pending[i][state.status];
+      try {
+        if (isFunction(fn)) {
+          deferred.resolve(fn(state.value));
+        } else if (state.status === 1) {
+          deferred.resolve(state.value);
+        } else {
+          deferred.reject(state.value);
+        }
+      } catch (e) {
+        deferred.reject(e);
+        exceptionHandler(e);
+      }
+    }
+  }
+
+  function scheduleProcessQueue(state) {
+    if (state.processScheduled || !state.pending) return;
+    state.processScheduled = true;
+    nextTick(function() { processQueue(state); });
+  }
+
+  function Deferred() {
+    this.promise = new Promise();
+    //Necessary to support unbound execution :/
+    this.resolve = simpleBind(this, this.resolve);
+    this.reject = simpleBind(this, this.reject);
+    this.notify = simpleBind(this, this.notify);
+  }
+
+  extend(Deferred.prototype, {
+    resolve: function(val) {
+      if (this.promise.$$state.status) return;
+      if (val === this.promise) {
+        this.$$reject($qMinErr(
+          'qcycle',
+          "Expected promise to be resolved with value other than itself '{0}'",
+          val));
+      } else {
+        this.$$resolve(val);
+      }
+
+    },
+
+    $$resolve: function(val) {
+      var then, fns;
+
+      fns = callOnce(this, this.$$resolve, this.$$reject);
+      try {
+        if ((isObject(val) || isFunction(val))) then = val && val.then;
+        if (isFunction(then)) {
+          this.promise.$$state.status = -1;
+          then.call(val, fns[0], fns[1], this.notify);
+        } else {
+          this.promise.$$state.value = val;
+          this.promise.$$state.status = 1;
+          scheduleProcessQueue(this.promise.$$state);
+        }
+      } catch (e) {
+        fns[1](e);
+        exceptionHandler(e);
+      }
+    },
+
+    reject: function(reason) {
+      if (this.promise.$$state.status) return;
+      this.$$reject(reason);
+    },
+
+    $$reject: function(reason) {
+      this.promise.$$state.value = reason;
+      this.promise.$$state.status = 2;
+      scheduleProcessQueue(this.promise.$$state);
+    },
+
+    notify: function(progress) {
+      var callbacks = this.promise.$$state.pending;
+
+      if ((this.promise.$$state.status <= 0) && callbacks && callbacks.length) {
+        nextTick(function() {
+          var callback, result;
+          for (var i = 0, ii = callbacks.length; i < ii; i++) {
+            result = callbacks[i][0];
+            callback = callbacks[i][3];
+            try {
+              result.notify(isFunction(callback) ? callback(progress) : progress);
+            } catch (e) {
+              exceptionHandler(e);
+            }
+          }
+        });
+      }
+    }
+  });
+
+  /**
+   * @ngdoc method
+   * @name $q#reject
+   * @kind function
+   *
+   * @description
+   * Creates a promise that is resolved as rejected with the specified `reason`. This api should be
+   * used to forward rejection in a chain of promises. If you are dealing with the last promise in
+   * a promise chain, you don't need to worry about it.
+   *
+   * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of
+   * `reject` as the `throw` keyword in JavaScript. This also means that if you "catch" an error via
+   * a promise error callback and you want to forward the error to the promise derived from the
+   * current promise, you have to "rethrow" the error by returning a rejection constructed via
+   * `reject`.
+   *
+   * ```js
+   *   promiseB = promiseA.then(function(result) {
+   *     // success: do something and resolve promiseB
+   *     //          with the old or a new result
+   *     return result;
+   *   }, function(reason) {
+   *     // error: handle the error if possible and
+   *     //        resolve promiseB with newPromiseOrValue,
+   *     //        otherwise forward the rejection to promiseB
+   *     if (canHandle(reason)) {
+   *      // handle the error and recover
+   *      return newPromiseOrValue;
+   *     }
+   *     return $q.reject(reason);
+   *   });
+   * ```
+   *
+   * @param {*} reason Constant, message, exception or an object representing the rejection reason.
+   * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`.
+   */
+  var reject = function(reason) {
+    var result = new Deferred();
+    result.reject(reason);
+    return result.promise;
+  };
+
+  var makePromise = function makePromise(value, resolved) {
+    var result = new Deferred();
+    if (resolved) {
+      result.resolve(value);
+    } else {
+      result.reject(value);
+    }
+    return result.promise;
+  };
+
+  var handleCallback = function handleCallback(value, isResolved, callback) {
+    var callbackOutput = null;
+    try {
+      if (isFunction(callback)) callbackOutput = callback();
+    } catch (e) {
+      return makePromise(e, false);
+    }
+    if (isPromiseLike(callbackOutput)) {
+      return callbackOutput.then(function() {
+        return makePromise(value, isResolved);
+      }, function(error) {
+        return makePromise(error, false);
+      });
+    } else {
+      return makePromise(value, isResolved);
+    }
+  };
+
+  /**
+   * @ngdoc method
+   * @name $q#when
+   * @kind function
+   *
+   * @description
+   * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise.
+   * This is useful when you are dealing with an object that might or might not be a promise, or if
+   * the promise comes from a source that can't be trusted.
+   *
+   * @param {*} value Value or a promise
+   * @param {Function=} successCallback
+   * @param {Function=} errorCallback
+   * @param {Function=} progressCallback
+   * @returns {Promise} Returns a promise of the passed value or promise
+   */
+
+
+  var when = function(value, callback, errback, progressBack) {
+    var result = new Deferred();
+    result.resolve(value);
+    return result.promise.then(callback, errback, progressBack);
+  };
+
+  /**
+   * @ngdoc method
+   * @name $q#resolve
+   * @kind function
+   *
+   * @description
+   * Alias of {@link ng.$q#when when} to maintain naming consistency with ES6.
+   *
+   * @param {*} value Value or a promise
+   * @param {Function=} successCallback
+   * @param {Function=} errorCallback
+   * @param {Function=} progressCallback
+   * @returns {Promise} Returns a promise of the passed value or promise
+   */
+  var resolve = when;
+
+  /**
+   * @ngdoc method
+   * @name $q#all
+   * @kind function
+   *
+   * @description
+   * Combines multiple promises into a single promise that is resolved when all of the input
+   * promises are resolved.
+   *
+   * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises.
+   * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values,
+   *   each value corresponding to the promise at the same index/key in the `promises` array/hash.
+   *   If any of the promises is resolved with a rejection, this resulting promise will be rejected
+   *   with the same rejection value.
+   */
+
+  function all(promises) {
+    var deferred = new Deferred(),
+        counter = 0,
+        results = isArray(promises) ? [] : {};
+
+    forEach(promises, function(promise, key) {
+      counter++;
+      when(promise).then(function(value) {
+        if (results.hasOwnProperty(key)) return;
+        results[key] = value;
+        if (!(--counter)) deferred.resolve(results);
+      }, function(reason) {
+        if (results.hasOwnProperty(key)) return;
+        deferred.reject(reason);
+      });
+    });
+
+    if (counter === 0) {
+      deferred.resolve(results);
+    }
+
+    return deferred.promise;
+  }
+
+  var $Q = function Q(resolver) {
+    if (!isFunction(resolver)) {
+      throw $qMinErr('norslvr', "Expected resolverFn, got '{0}'", resolver);
+    }
+
+    if (!(this instanceof Q)) {
+      // More useful when $Q is the Promise itself.
+      return new Q(resolver);
+    }
+
+    var deferred = new Deferred();
+
+    function resolveFn(value) {
+      deferred.resolve(value);
+    }
+
+    function rejectFn(reason) {
+      deferred.reject(reason);
+    }
+
+    resolver(resolveFn, rejectFn);
+
+    return deferred.promise;
+  };
+
+  $Q.defer = defer;
+  $Q.reject = reject;
+  $Q.when = when;
+  $Q.resolve = resolve;
+  $Q.all = all;
+
+  return $Q;
+}
+
+function $$RAFProvider() { //rAF
+  this.$get = ['$window', '$timeout', function($window, $timeout) {
+    var requestAnimationFrame = $window.requestAnimationFrame ||
+                                $window.webkitRequestAnimationFrame;
+
+    var cancelAnimationFrame = $window.cancelAnimationFrame ||
+                               $window.webkitCancelAnimationFrame ||
+                               $window.webkitCancelRequestAnimationFrame;
+
+    var rafSupported = !!requestAnimationFrame;
+    var raf = rafSupported
+      ? function(fn) {
+          var id = requestAnimationFrame(fn);
+          return function() {
+            cancelAnimationFrame(id);
+          };
+        }
+      : function(fn) {
+          var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666
+          return function() {
+            $timeout.cancel(timer);
+          };
+        };
+
+    raf.supported = rafSupported;
+
+    return raf;
+  }];
+}
+
+/**
+ * DESIGN NOTES
+ *
+ * The design decisions behind the scope are heavily favored for speed and memory consumption.
+ *
+ * The typical use of scope is to watch the expressions, which most of the time return the same
+ * value as last time so we optimize the operation.
+ *
+ * Closures construction is expensive in terms of speed as well as memory:
+ *   - No closures, instead use prototypical inheritance for API
+ *   - Internal state needs to be stored on scope directly, which means that private state is
+ *     exposed as $$____ properties
+ *
+ * Loop operations are optimized by using while(count--) { ... }
+ *   - This means that in order to keep the same order of execution as addition we have to add
+ *     items to the array at the beginning (unshift) instead of at the end (push)
+ *
+ * Child scopes are created and removed often
+ *   - Using an array would be slow since inserts in the middle are expensive; so we use linked lists
+ *
+ * There are fewer watches than observers. This is why you don't want the observer to be implemented
+ * in the same way as watch. Watch requires return of the initialization function which is expensive
+ * to construct.
+ */
+
+
+/**
+ * @ngdoc provider
+ * @name $rootScopeProvider
+ * @description
+ *
+ * Provider for the $rootScope service.
+ */
+
+/**
+ * @ngdoc method
+ * @name $rootScopeProvider#digestTtl
+ * @description
+ *
+ * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and
+ * assuming that the model is unstable.
+ *
+ * The current default is 10 iterations.
+ *
+ * In complex applications it's possible that the dependencies between `$watch`s will result in
+ * several digest iterations. However if an application needs more than the default 10 digest
+ * iterations for its model to stabilize then you should investigate what is causing the model to
+ * continuously change during the digest.
+ *
+ * Increasing the TTL could have performance implications, so you should not change it without
+ * proper justification.
+ *
+ * @param {number} limit The number of digest iterations.
+ */
+
+
+/**
+ * @ngdoc service
+ * @name $rootScope
+ * @description
+ *
+ * Every application has a single root {@link ng.$rootScope.Scope scope}.
+ * All other scopes are descendant scopes of the root scope. Scopes provide separation
+ * between the model and the view, via a mechanism for watching the model for changes.
+ * They also provide event emission/broadcast and subscription facility. See the
+ * {@link guide/scope developer guide on scopes}.
+ */
+function $RootScopeProvider() {
+  var TTL = 10;
+  var $rootScopeMinErr = minErr('$rootScope');
+  var lastDirtyWatch = null;
+  var applyAsyncId = null;
+
+  this.digestTtl = function(value) {
+    if (arguments.length) {
+      TTL = value;
+    }
+    return TTL;
+  };
+
+  function createChildScopeClass(parent) {
+    function ChildScope() {
+      this.$$watchers = this.$$nextSibling =
+          this.$$childHead = this.$$childTail = null;
+      this.$$listeners = {};
+      this.$$listenerCount = {};
+      this.$$watchersCount = 0;
+      this.$id = nextUid();
+      this.$$ChildScope = null;
+    }
+    ChildScope.prototype = parent;
+    return ChildScope;
+  }
+
+  this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser',
+      function($injector, $exceptionHandler, $parse, $browser) {
+
+    function destroyChildScope($event) {
+        $event.currentScope.$$destroyed = true;
+    }
+
+    function cleanUpScope($scope) {
+
+      if (msie === 9) {
+        // There is a memory leak in IE9 if all child scopes are not disconnected
+        // completely when a scope is destroyed. So this code will recurse up through
+        // all this scopes children
+        //
+        // See issue https://github.com/angular/angular.js/issues/10706
+        $scope.$$childHead && cleanUpScope($scope.$$childHead);
+        $scope.$$nextSibling && cleanUpScope($scope.$$nextSibling);
+      }
+
+      // The code below works around IE9 and V8's memory leaks
+      //
+      // See:
+      // - https://code.google.com/p/v8/issues/detail?id=2073#c26
+      // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909
+      // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451
+
+      $scope.$parent = $scope.$$nextSibling = $scope.$$prevSibling = $scope.$$childHead =
+          $scope.$$childTail = $scope.$root = $scope.$$watchers = null;
+    }
+
+    /**
+     * @ngdoc type
+     * @name $rootScope.Scope
+     *
+     * @description
+     * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the
+     * {@link auto.$injector $injector}. Child scopes are created using the
+     * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when
+     * compiled HTML template is executed.) See also the {@link guide/scope Scopes guide} for
+     * an in-depth introduction and usage examples.
+     *
+     *
+     * # Inheritance
+     * A scope can inherit from a parent scope, as in this example:
+     * ```js
+         var parent = $rootScope;
+         var child = parent.$new();
+
+         parent.salutation = "Hello";
+         expect(child.salutation).toEqual('Hello');
+
+         child.salutation = "Welcome";
+         expect(child.salutation).toEqual('Welcome');
+         expect(parent.salutation).toEqual('Hello');
+     * ```
+     *
+     * When interacting with `Scope` in tests, additional helper methods are available on the
+     * instances of `Scope` type. See {@link ngMock.$rootScope.Scope ngMock Scope} for additional
+     * details.
+     *
+     *
+     * @param {Object.<string, function()>=} providers Map of service factory which need to be
+     *                                       provided for the current scope. Defaults to {@link ng}.
+     * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should
+     *                              append/override services provided by `providers`. This is handy
+     *                              when unit-testing and having the need to override a default
+     *                              service.
+     * @returns {Object} Newly created scope.
+     *
+     */
+    function Scope() {
+      this.$id = nextUid();
+      this.$$phase = this.$parent = this.$$watchers =
+                     this.$$nextSibling = this.$$prevSibling =
+                     this.$$childHead = this.$$childTail = null;
+      this.$root = this;
+      this.$$destroyed = false;
+      this.$$listeners = {};
+      this.$$listenerCount = {};
+      this.$$watchersCount = 0;
+      this.$$isolateBindings = null;
+    }
+
+    /**
+     * @ngdoc property
+     * @name $rootScope.Scope#$id
+     *
+     * @description
+     * Unique scope ID (monotonically increasing) useful for debugging.
+     */
+
+     /**
+      * @ngdoc property
+      * @name $rootScope.Scope#$parent
+      *
+      * @description
+      * Reference to the parent scope.
+      */
+
+      /**
+       * @ngdoc property
+       * @name $rootScope.Scope#$root
+       *
+       * @description
+       * Reference to the root scope.
+       */
+
+    Scope.prototype = {
+      constructor: Scope,
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$new
+       * @kind function
+       *
+       * @description
+       * Creates a new child {@link ng.$rootScope.Scope scope}.
+       *
+       * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} event.
+       * The scope can be removed from the scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}.
+       *
+       * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is
+       * desired for the scope and its child scopes to be permanently detached from the parent and
+       * thus stop participating in model change detection and listener notification by invoking.
+       *
+       * @param {boolean} isolate If true, then the scope does not prototypically inherit from the
+       *         parent scope. The scope is isolated, as it can not see parent scope properties.
+       *         When creating widgets, it is useful for the widget to not accidentally read parent
+       *         state.
+       *
+       * @param {Scope} [parent=this] The {@link ng.$rootScope.Scope `Scope`} that will be the `$parent`
+       *                              of the newly created scope. Defaults to `this` scope if not provided.
+       *                              This is used when creating a transclude scope to correctly place it
+       *                              in the scope hierarchy while maintaining the correct prototypical
+       *                              inheritance.
+       *
+       * @returns {Object} The newly created child scope.
+       *
+       */
+      $new: function(isolate, parent) {
+        var child;
+
+        parent = parent || this;
+
+        if (isolate) {
+          child = new Scope();
+          child.$root = this.$root;
+        } else {
+          // Only create a child scope class if somebody asks for one,
+          // but cache it to allow the VM to optimize lookups.
+          if (!this.$$ChildScope) {
+            this.$$ChildScope = createChildScopeClass(this);
+          }
+          child = new this.$$ChildScope();
+        }
+        child.$parent = parent;
+        child.$$prevSibling = parent.$$childTail;
+        if (parent.$$childHead) {
+          parent.$$childTail.$$nextSibling = child;
+          parent.$$childTail = child;
+        } else {
+          parent.$$childHead = parent.$$childTail = child;
+        }
+
+        // When the new scope is not isolated or we inherit from `this`, and
+        // the parent scope is destroyed, the property `$$destroyed` is inherited
+        // prototypically. In all other cases, this property needs to be set
+        // when the parent scope is destroyed.
+        // The listener needs to be added after the parent is set
+        if (isolate || parent != this) child.$on('$destroy', destroyChildScope);
+
+        return child;
+      },
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$watch
+       * @kind function
+       *
+       * @description
+       * Registers a `listener` callback to be executed whenever the `watchExpression` changes.
+       *
+       * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest
+       *   $digest()} and should return the value that will be watched. (`watchExpression` should not change
+       *   its value when executed multiple times with the same input because it may be executed multiple
+       *   times by {@link ng.$rootScope.Scope#$digest $digest()}. That is, `watchExpression` should be
+       *   [idempotent](http://en.wikipedia.org/wiki/Idempotence).
+       * - The `listener` is called only when the value from the current `watchExpression` and the
+       *   previous call to `watchExpression` are not equal (with the exception of the initial run,
+       *   see below). Inequality is determined according to reference inequality,
+       *   [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators)
+       *    via the `!==` Javascript operator, unless `objectEquality == true`
+       *   (see next point)
+       * - When `objectEquality == true`, inequality of the `watchExpression` is determined
+       *   according to the {@link angular.equals} function. To save the value of the object for
+       *   later comparison, the {@link angular.copy} function is used. This therefore means that
+       *   watching complex objects will have adverse memory and performance implications.
+       * - The watch `listener` may change the model, which may trigger other `listener`s to fire.
+       *   This is achieved by rerunning the watchers until no changes are detected. The rerun
+       *   iteration limit is 10 to prevent an infinite loop deadlock.
+       *
+       *
+       * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called,
+       * you can register a `watchExpression` function with no `listener`. (Be prepared for
+       * multiple calls to your `watchExpression` because it will execute multiple times in a
+       * single {@link ng.$rootScope.Scope#$digest $digest} cycle if a change is detected.)
+       *
+       * After a watcher is registered with the scope, the `listener` fn is called asynchronously
+       * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the
+       * watcher. In rare cases, this is undesirable because the listener is called when the result
+       * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you
+       * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the
+       * listener was called due to initialization.
+       *
+       *
+       *
+       * # Example
+       * ```js
+           // let's assume that scope was dependency injected as the $rootScope
+           var scope = $rootScope;
+           scope.name = 'misko';
+           scope.counter = 0;
+
+           expect(scope.counter).toEqual(0);
+           scope.$watch('name', function(newValue, oldValue) {
+             scope.counter = scope.counter + 1;
+           });
+           expect(scope.counter).toEqual(0);
+
+           scope.$digest();
+           // the listener is always called during the first $digest loop after it was registered
+           expect(scope.counter).toEqual(1);
+
+           scope.$digest();
+           // but now it will not be called unless the value changes
+           expect(scope.counter).toEqual(1);
+
+           scope.name = 'adam';
+           scope.$digest();
+           expect(scope.counter).toEqual(2);
+
+
+
+           // Using a function as a watchExpression
+           var food;
+           scope.foodCounter = 0;
+           expect(scope.foodCounter).toEqual(0);
+           scope.$watch(
+             // This function returns the value being watched. It is called for each turn of the $digest loop
+             function() { return food; },
+             // This is the change listener, called when the value returned from the above function changes
+             function(newValue, oldValue) {
+               if ( newValue !== oldValue ) {
+                 // Only increment the counter if the value changed
+                 scope.foodCounter = scope.foodCounter + 1;
+               }
+             }
+           );
+           // No digest has been run so the counter will be zero
+           expect(scope.foodCounter).toEqual(0);
+
+           // Run the digest but since food has not changed count will still be zero
+           scope.$digest();
+           expect(scope.foodCounter).toEqual(0);
+
+           // Update food and run digest.  Now the counter will increment
+           food = 'cheeseburger';
+           scope.$digest();
+           expect(scope.foodCounter).toEqual(1);
+
+       * ```
+       *
+       *
+       *
+       * @param {(function()|string)} watchExpression Expression that is evaluated on each
+       *    {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers
+       *    a call to the `listener`.
+       *
+       *    - `string`: Evaluated as {@link guide/expression expression}
+       *    - `function(scope)`: called with current `scope` as a parameter.
+       * @param {function(newVal, oldVal, scope)} listener Callback called whenever the value
+       *    of `watchExpression` changes.
+       *
+       *    - `newVal` contains the current value of the `watchExpression`
+       *    - `oldVal` contains the previous value of the `watchExpression`
+       *    - `scope` refers to the current scope
+       * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of
+       *     comparing for reference equality.
+       * @returns {function()} Returns a deregistration function for this listener.
+       */
+      $watch: function(watchExp, listener, objectEquality, prettyPrintExpression) {
+        var get = $parse(watchExp);
+
+        if (get.$$watchDelegate) {
+          return get.$$watchDelegate(this, listener, objectEquality, get, watchExp);
+        }
+        var scope = this,
+            array = scope.$$watchers,
+            watcher = {
+              fn: listener,
+              last: initWatchVal,
+              get: get,
+              exp: prettyPrintExpression || watchExp,
+              eq: !!objectEquality
+            };
+
+        lastDirtyWatch = null;
+
+        if (!isFunction(listener)) {
+          watcher.fn = noop;
+        }
+
+        if (!array) {
+          array = scope.$$watchers = [];
+        }
+        // we use unshift since we use a while loop in $digest for speed.
+        // the while loop reads in reverse order.
+        array.unshift(watcher);
+        incrementWatchersCount(this, 1);
+
+        return function deregisterWatch() {
+          if (arrayRemove(array, watcher) >= 0) {
+            incrementWatchersCount(scope, -1);
+          }
+          lastDirtyWatch = null;
+        };
+      },
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$watchGroup
+       * @kind function
+       *
+       * @description
+       * A variant of {@link ng.$rootScope.Scope#$watch $watch()} where it watches an array of `watchExpressions`.
+       * If any one expression in the collection changes the `listener` is executed.
+       *
+       * - The items in the `watchExpressions` array are observed via standard $watch operation and are examined on every
+       *   call to $digest() to see if any items changes.
+       * - The `listener` is called whenever any expression in the `watchExpressions` array changes.
+       *
+       * @param {Array.<string|Function(scope)>} watchExpressions Array of expressions that will be individually
+       * watched using {@link ng.$rootScope.Scope#$watch $watch()}
+       *
+       * @param {function(newValues, oldValues, scope)} listener Callback called whenever the return value of any
+       *    expression in `watchExpressions` changes
+       *    The `newValues` array contains the current values of the `watchExpressions`, with the indexes matching
+       *    those of `watchExpression`
+       *    and the `oldValues` array contains the previous values of the `watchExpressions`, with the indexes matching
+       *    those of `watchExpression`
+       *    The `scope` refers to the current scope.
+       * @returns {function()} Returns a de-registration function for all listeners.
+       */
+      $watchGroup: function(watchExpressions, listener) {
+        var oldValues = new Array(watchExpressions.length);
+        var newValues = new Array(watchExpressions.length);
+        var deregisterFns = [];
+        var self = this;
+        var changeReactionScheduled = false;
+        var firstRun = true;
+
+        if (!watchExpressions.length) {
+          // No expressions means we call the listener ASAP
+          var shouldCall = true;
+          self.$evalAsync(function() {
+            if (shouldCall) listener(newValues, newValues, self);
+          });
+          return function deregisterWatchGroup() {
+            shouldCall = false;
+          };
+        }
+
+        if (watchExpressions.length === 1) {
+          // Special case size of one
+          return this.$watch(watchExpressions[0], function watchGroupAction(value, oldValue, scope) {
+            newValues[0] = value;
+            oldValues[0] = oldValue;
+            listener(newValues, (value === oldValue) ? newValues : oldValues, scope);
+          });
+        }
+
+        forEach(watchExpressions, function(expr, i) {
+          var unwatchFn = self.$watch(expr, function watchGroupSubAction(value, oldValue) {
+            newValues[i] = value;
+            oldValues[i] = oldValue;
+            if (!changeReactionScheduled) {
+              changeReactionScheduled = true;
+              self.$evalAsync(watchGroupAction);
+            }
+          });
+          deregisterFns.push(unwatchFn);
+        });
+
+        function watchGroupAction() {
+          changeReactionScheduled = false;
+
+          if (firstRun) {
+            firstRun = false;
+            listener(newValues, newValues, self);
+          } else {
+            listener(newValues, oldValues, self);
+          }
+        }
+
+        return function deregisterWatchGroup() {
+          while (deregisterFns.length) {
+            deregisterFns.shift()();
+          }
+        };
+      },
+
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$watchCollection
+       * @kind function
+       *
+       * @description
+       * Shallow watches the properties of an object and fires whenever any of the properties change
+       * (for arrays, this implies watching the array items; for object maps, this implies watching
+       * the properties). If a change is detected, the `listener` callback is fired.
+       *
+       * - The `obj` collection is observed via standard $watch operation and is examined on every
+       *   call to $digest() to see if any items have been added, removed, or moved.
+       * - The `listener` is called whenever anything within the `obj` has changed. Examples include
+       *   adding, removing, and moving items belonging to an object or array.
+       *
+       *
+       * # Example
+       * ```js
+          $scope.names = ['igor', 'matias', 'misko', 'james'];
+          $scope.dataCount = 4;
+
+          $scope.$watchCollection('names', function(newNames, oldNames) {
+            $scope.dataCount = newNames.length;
+          });
+
+          expect($scope.dataCount).toEqual(4);
+          $scope.$digest();
+
+          //still at 4 ... no changes
+          expect($scope.dataCount).toEqual(4);
+
+          $scope.names.pop();
+          $scope.$digest();
+
+          //now there's been a change
+          expect($scope.dataCount).toEqual(3);
+       * ```
+       *
+       *
+       * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The
+       *    expression value should evaluate to an object or an array which is observed on each
+       *    {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the
+       *    collection will trigger a call to the `listener`.
+       *
+       * @param {function(newCollection, oldCollection, scope)} listener a callback function called
+       *    when a change is detected.
+       *    - The `newCollection` object is the newly modified data obtained from the `obj` expression
+       *    - The `oldCollection` object is a copy of the former collection data.
+       *      Due to performance considerations, the`oldCollection` value is computed only if the
+       *      `listener` function declares two or more arguments.
+       *    - The `scope` argument refers to the current scope.
+       *
+       * @returns {function()} Returns a de-registration function for this listener. When the
+       *    de-registration function is executed, the internal watch operation is terminated.
+       */
+      $watchCollection: function(obj, listener) {
+        $watchCollectionInterceptor.$stateful = true;
+
+        var self = this;
+        // the current value, updated on each dirty-check run
+        var newValue;
+        // a shallow copy of the newValue from the last dirty-check run,
+        // updated to match newValue during dirty-check run
+        var oldValue;
+        // a shallow copy of the newValue from when the last change happened
+        var veryOldValue;
+        // only track veryOldValue if the listener is asking for it
+        var trackVeryOldValue = (listener.length > 1);
+        var changeDetected = 0;
+        var changeDetector = $parse(obj, $watchCollectionInterceptor);
+        var internalArray = [];
+        var internalObject = {};
+        var initRun = true;
+        var oldLength = 0;
+
+        function $watchCollectionInterceptor(_value) {
+          newValue = _value;
+          var newLength, key, bothNaN, newItem, oldItem;
+
+          // If the new value is undefined, then return undefined as the watch may be a one-time watch
+          if (isUndefined(newValue)) return;
+
+          if (!isObject(newValue)) { // if primitive
+            if (oldValue !== newValue) {
+              oldValue = newValue;
+              changeDetected++;
+            }
+          } else if (isArrayLike(newValue)) {
+            if (oldValue !== internalArray) {
+              // we are transitioning from something which was not an array into array.
+              oldValue = internalArray;
+              oldLength = oldValue.length = 0;
+              changeDetected++;
+            }
+
+            newLength = newValue.length;
+
+            if (oldLength !== newLength) {
+              // if lengths do not match we need to trigger change notification
+              changeDetected++;
+              oldValue.length = oldLength = newLength;
+            }
+            // copy the items to oldValue and look for changes.
+            for (var i = 0; i < newLength; i++) {
+              oldItem = oldValue[i];
+              newItem = newValue[i];
+
+              bothNaN = (oldItem !== oldItem) && (newItem !== newItem);
+              if (!bothNaN && (oldItem !== newItem)) {
+                changeDetected++;
+                oldValue[i] = newItem;
+              }
+            }
+          } else {
+            if (oldValue !== internalObject) {
+              // we are transitioning from something which was not an object into object.
+              oldValue = internalObject = {};
+              oldLength = 0;
+              changeDetected++;
+            }
+            // copy the items to oldValue and look for changes.
+            newLength = 0;
+            for (key in newValue) {
+              if (hasOwnProperty.call(newValue, key)) {
+                newLength++;
+                newItem = newValue[key];
+                oldItem = oldValue[key];
+
+                if (key in oldValue) {
+                  bothNaN = (oldItem !== oldItem) && (newItem !== newItem);
+                  if (!bothNaN && (oldItem !== newItem)) {
+                    changeDetected++;
+                    oldValue[key] = newItem;
+                  }
+                } else {
+                  oldLength++;
+                  oldValue[key] = newItem;
+                  changeDetected++;
+                }
+              }
+            }
+            if (oldLength > newLength) {
+              // we used to have more keys, need to find them and destroy them.
+              changeDetected++;
+              for (key in oldValue) {
+                if (!hasOwnProperty.call(newValue, key)) {
+                  oldLength--;
+                  delete oldValue[key];
+                }
+              }
+            }
+          }
+          return changeDetected;
+        }
+
+        function $watchCollectionAction() {
+          if (initRun) {
+            initRun = false;
+            listener(newValue, newValue, self);
+          } else {
+            listener(newValue, veryOldValue, self);
+          }
+
+          // make a copy for the next time a collection is changed
+          if (trackVeryOldValue) {
+            if (!isObject(newValue)) {
+              //primitive
+              veryOldValue = newValue;
+            } else if (isArrayLike(newValue)) {
+              veryOldValue = new Array(newValue.length);
+              for (var i = 0; i < newValue.length; i++) {
+                veryOldValue[i] = newValue[i];
+              }
+            } else { // if object
+              veryOldValue = {};
+              for (var key in newValue) {
+                if (hasOwnProperty.call(newValue, key)) {
+                  veryOldValue[key] = newValue[key];
+                }
+              }
+            }
+          }
+        }
+
+        return this.$watch(changeDetector, $watchCollectionAction);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$digest
+       * @kind function
+       *
+       * @description
+       * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and
+       * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change
+       * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers}
+       * until no more listeners are firing. This means that it is possible to get into an infinite
+       * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of
+       * iterations exceeds 10.
+       *
+       * Usually, you don't call `$digest()` directly in
+       * {@link ng.directive:ngController controllers} or in
+       * {@link ng.$compileProvider#directive directives}.
+       * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within
+       * a {@link ng.$compileProvider#directive directive}), which will force a `$digest()`.
+       *
+       * If you want to be notified whenever `$digest()` is called,
+       * you can register a `watchExpression` function with
+       * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`.
+       *
+       * In unit tests, you may need to call `$digest()` to simulate the scope life cycle.
+       *
+       * # Example
+       * ```js
+           var scope = ...;
+           scope.name = 'misko';
+           scope.counter = 0;
+
+           expect(scope.counter).toEqual(0);
+           scope.$watch('name', function(newValue, oldValue) {
+             scope.counter = scope.counter + 1;
+           });
+           expect(scope.counter).toEqual(0);
+
+           scope.$digest();
+           // the listener is always called during the first $digest loop after it was registered
+           expect(scope.counter).toEqual(1);
+
+           scope.$digest();
+           // but now it will not be called unless the value changes
+           expect(scope.counter).toEqual(1);
+
+           scope.name = 'adam';
+           scope.$digest();
+           expect(scope.counter).toEqual(2);
+       * ```
+       *
+       */
+      $digest: function() {
+        var watch, value, last,
+            watchers,
+            length,
+            dirty, ttl = TTL,
+            next, current, target = this,
+            watchLog = [],
+            logIdx, logMsg, asyncTask;
+
+        beginPhase('$digest');
+        // Check for changes to browser url that happened in sync before the call to $digest
+        $browser.$$checkUrlChange();
+
+        if (this === $rootScope && applyAsyncId !== null) {
+          // If this is the root scope, and $applyAsync has scheduled a deferred $apply(), then
+          // cancel the scheduled $apply and flush the queue of expressions to be evaluated.
+          $browser.defer.cancel(applyAsyncId);
+          flushApplyAsync();
+        }
+
+        lastDirtyWatch = null;
+
+        do { // "while dirty" loop
+          dirty = false;
+          current = target;
+
+          while (asyncQueue.length) {
+            try {
+              asyncTask = asyncQueue.shift();
+              asyncTask.scope.$eval(asyncTask.expression, asyncTask.locals);
+            } catch (e) {
+              $exceptionHandler(e);
+            }
+            lastDirtyWatch = null;
+          }
+
+          traverseScopesLoop:
+          do { // "traverse the scopes" loop
+            if ((watchers = current.$$watchers)) {
+              // process our watches
+              length = watchers.length;
+              while (length--) {
+                try {
+                  watch = watchers[length];
+                  // Most common watches are on primitives, in which case we can short
+                  // circuit it with === operator, only when === fails do we use .equals
+                  if (watch) {
+                    if ((value = watch.get(current)) !== (last = watch.last) &&
+                        !(watch.eq
+                            ? equals(value, last)
+                            : (typeof value === 'number' && typeof last === 'number'
+                               && isNaN(value) && isNaN(last)))) {
+                      dirty = true;
+                      lastDirtyWatch = watch;
+                      watch.last = watch.eq ? copy(value, null) : value;
+                      watch.fn(value, ((last === initWatchVal) ? value : last), current);
+                      if (ttl < 5) {
+                        logIdx = 4 - ttl;
+                        if (!watchLog[logIdx]) watchLog[logIdx] = [];
+                        watchLog[logIdx].push({
+                          msg: isFunction(watch.exp) ? 'fn: ' + (watch.exp.name || watch.exp.toString()) : watch.exp,
+                          newVal: value,
+                          oldVal: last
+                        });
+                      }
+                    } else if (watch === lastDirtyWatch) {
+                      // If the most recently dirty watcher is now clean, short circuit since the remaining watchers
+                      // have already been tested.
+                      dirty = false;
+                      break traverseScopesLoop;
+                    }
+                  }
+                } catch (e) {
+                  $exceptionHandler(e);
+                }
+              }
+            }
+
+            // Insanity Warning: scope depth-first traversal
+            // yes, this code is a bit crazy, but it works and we have tests to prove it!
+            // this piece should be kept in sync with the traversal in $broadcast
+            if (!(next = ((current.$$watchersCount && current.$$childHead) ||
+                (current !== target && current.$$nextSibling)))) {
+              while (current !== target && !(next = current.$$nextSibling)) {
+                current = current.$parent;
+              }
+            }
+          } while ((current = next));
+
+          // `break traverseScopesLoop;` takes us to here
+
+          if ((dirty || asyncQueue.length) && !(ttl--)) {
+            clearPhase();
+            throw $rootScopeMinErr('infdig',
+                '{0} $digest() iterations reached. Aborting!\n' +
+                'Watchers fired in the last 5 iterations: {1}',
+                TTL, watchLog);
+          }
+
+        } while (dirty || asyncQueue.length);
+
+        clearPhase();
+
+        while (postDigestQueue.length) {
+          try {
+            postDigestQueue.shift()();
+          } catch (e) {
+            $exceptionHandler(e);
+          }
+        }
+      },
+
+
+      /**
+       * @ngdoc event
+       * @name $rootScope.Scope#$destroy
+       * @eventType broadcast on scope being destroyed
+       *
+       * @description
+       * Broadcasted when a scope and its children are being destroyed.
+       *
+       * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to
+       * clean up DOM bindings before an element is removed from the DOM.
+       */
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$destroy
+       * @kind function
+       *
+       * @description
+       * Removes the current scope (and all of its children) from the parent scope. Removal implies
+       * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer
+       * propagate to the current scope and its children. Removal also implies that the current
+       * scope is eligible for garbage collection.
+       *
+       * The `$destroy()` is usually used by directives such as
+       * {@link ng.directive:ngRepeat ngRepeat} for managing the
+       * unrolling of the loop.
+       *
+       * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope.
+       * Application code can register a `$destroy` event handler that will give it a chance to
+       * perform any necessary cleanup.
+       *
+       * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to
+       * clean up DOM bindings before an element is removed from the DOM.
+       */
+      $destroy: function() {
+        // We can't destroy a scope that has been already destroyed.
+        if (this.$$destroyed) return;
+        var parent = this.$parent;
+
+        this.$broadcast('$destroy');
+        this.$$destroyed = true;
+
+        if (this === $rootScope) {
+          //Remove handlers attached to window when $rootScope is removed
+          $browser.$$applicationDestroyed();
+        }
+
+        incrementWatchersCount(this, -this.$$watchersCount);
+        for (var eventName in this.$$listenerCount) {
+          decrementListenerCount(this, this.$$listenerCount[eventName], eventName);
+        }
+
+        // sever all the references to parent scopes (after this cleanup, the current scope should
+        // not be retained by any of our references and should be eligible for garbage collection)
+        if (parent && parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;
+        if (parent && parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;
+        if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling;
+        if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling;
+
+        // Disable listeners, watchers and apply/digest methods
+        this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = noop;
+        this.$on = this.$watch = this.$watchGroup = function() { return noop; };
+        this.$$listeners = {};
+
+        // Disconnect the next sibling to prevent `cleanUpScope` destroying those too
+        this.$$nextSibling = null;
+        cleanUpScope(this);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$eval
+       * @kind function
+       *
+       * @description
+       * Executes the `expression` on the current scope and returns the result. Any exceptions in
+       * the expression are propagated (uncaught). This is useful when evaluating Angular
+       * expressions.
+       *
+       * # Example
+       * ```js
+           var scope = ng.$rootScope.Scope();
+           scope.a = 1;
+           scope.b = 2;
+
+           expect(scope.$eval('a+b')).toEqual(3);
+           expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3);
+       * ```
+       *
+       * @param {(string|function())=} expression An angular expression to be executed.
+       *
+       *    - `string`: execute using the rules as defined in  {@link guide/expression expression}.
+       *    - `function(scope)`: execute the function with the current `scope` parameter.
+       *
+       * @param {(object)=} locals Local variables object, useful for overriding values in scope.
+       * @returns {*} The result of evaluating the expression.
+       */
+      $eval: function(expr, locals) {
+        return $parse(expr)(this, locals);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$evalAsync
+       * @kind function
+       *
+       * @description
+       * Executes the expression on the current scope at a later point in time.
+       *
+       * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only
+       * that:
+       *
+       *   - it will execute after the function that scheduled the evaluation (preferably before DOM
+       *     rendering).
+       *   - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after
+       *     `expression` execution.
+       *
+       * Any exceptions from the execution of the expression are forwarded to the
+       * {@link ng.$exceptionHandler $exceptionHandler} service.
+       *
+       * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle
+       * will be scheduled. However, it is encouraged to always call code that changes the model
+       * from within an `$apply` call. That includes code evaluated via `$evalAsync`.
+       *
+       * @param {(string|function())=} expression An angular expression to be executed.
+       *
+       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.
+       *    - `function(scope)`: execute the function with the current `scope` parameter.
+       *
+       * @param {(object)=} locals Local variables object, useful for overriding values in scope.
+       */
+      $evalAsync: function(expr, locals) {
+        // if we are outside of an $digest loop and this is the first time we are scheduling async
+        // task also schedule async auto-flush
+        if (!$rootScope.$$phase && !asyncQueue.length) {
+          $browser.defer(function() {
+            if (asyncQueue.length) {
+              $rootScope.$digest();
+            }
+          });
+        }
+
+        asyncQueue.push({scope: this, expression: expr, locals: locals});
+      },
+
+      $$postDigest: function(fn) {
+        postDigestQueue.push(fn);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$apply
+       * @kind function
+       *
+       * @description
+       * `$apply()` is used to execute an expression in angular from outside of the angular
+       * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries).
+       * Because we are calling into the angular framework we need to perform proper scope life
+       * cycle of {@link ng.$exceptionHandler exception handling},
+       * {@link ng.$rootScope.Scope#$digest executing watches}.
+       *
+       * ## Life cycle
+       *
+       * # Pseudo-Code of `$apply()`
+       * ```js
+           function $apply(expr) {
+             try {
+               return $eval(expr);
+             } catch (e) {
+               $exceptionHandler(e);
+             } finally {
+               $root.$digest();
+             }
+           }
+       * ```
+       *
+       *
+       * Scope's `$apply()` method transitions through the following stages:
+       *
+       * 1. The {@link guide/expression expression} is executed using the
+       *    {@link ng.$rootScope.Scope#$eval $eval()} method.
+       * 2. Any exceptions from the execution of the expression are forwarded to the
+       *    {@link ng.$exceptionHandler $exceptionHandler} service.
+       * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the
+       *    expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method.
+       *
+       *
+       * @param {(string|function())=} exp An angular expression to be executed.
+       *
+       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.
+       *    - `function(scope)`: execute the function with current `scope` parameter.
+       *
+       * @returns {*} The result of evaluating the expression.
+       */
+      $apply: function(expr) {
+        try {
+          beginPhase('$apply');
+          try {
+            return this.$eval(expr);
+          } finally {
+            clearPhase();
+          }
+        } catch (e) {
+          $exceptionHandler(e);
+        } finally {
+          try {
+            $rootScope.$digest();
+          } catch (e) {
+            $exceptionHandler(e);
+            throw e;
+          }
+        }
+      },
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$applyAsync
+       * @kind function
+       *
+       * @description
+       * Schedule the invocation of $apply to occur at a later time. The actual time difference
+       * varies across browsers, but is typically around ~10 milliseconds.
+       *
+       * This can be used to queue up multiple expressions which need to be evaluated in the same
+       * digest.
+       *
+       * @param {(string|function())=} exp An angular expression to be executed.
+       *
+       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.
+       *    - `function(scope)`: execute the function with current `scope` parameter.
+       */
+      $applyAsync: function(expr) {
+        var scope = this;
+        expr && applyAsyncQueue.push($applyAsyncExpression);
+        scheduleApplyAsync();
+
+        function $applyAsyncExpression() {
+          scope.$eval(expr);
+        }
+      },
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$on
+       * @kind function
+       *
+       * @description
+       * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for
+       * discussion of event life cycle.
+       *
+       * The event listener function format is: `function(event, args...)`. The `event` object
+       * passed into the listener has the following attributes:
+       *
+       *   - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or
+       *     `$broadcast`-ed.
+       *   - `currentScope` - `{Scope}`: the scope that is currently handling the event. Once the
+       *     event propagates through the scope hierarchy, this property is set to null.
+       *   - `name` - `{string}`: name of the event.
+       *   - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel
+       *     further event propagation (available only for events that were `$emit`-ed).
+       *   - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag
+       *     to true.
+       *   - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called.
+       *
+       * @param {string} name Event name to listen on.
+       * @param {function(event, ...args)} listener Function to call when the event is emitted.
+       * @returns {function()} Returns a deregistration function for this listener.
+       */
+      $on: function(name, listener) {
+        var namedListeners = this.$$listeners[name];
+        if (!namedListeners) {
+          this.$$listeners[name] = namedListeners = [];
+        }
+        namedListeners.push(listener);
+
+        var current = this;
+        do {
+          if (!current.$$listenerCount[name]) {
+            current.$$listenerCount[name] = 0;
+          }
+          current.$$listenerCount[name]++;
+        } while ((current = current.$parent));
+
+        var self = this;
+        return function() {
+          var indexOfListener = namedListeners.indexOf(listener);
+          if (indexOfListener !== -1) {
+            namedListeners[indexOfListener] = null;
+            decrementListenerCount(self, 1, name);
+          }
+        };
+      },
+
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$emit
+       * @kind function
+       *
+       * @description
+       * Dispatches an event `name` upwards through the scope hierarchy notifying the
+       * registered {@link ng.$rootScope.Scope#$on} listeners.
+       *
+       * The event life cycle starts at the scope on which `$emit` was called. All
+       * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get
+       * notified. Afterwards, the event traverses upwards toward the root scope and calls all
+       * registered listeners along the way. The event will stop propagating if one of the listeners
+       * cancels it.
+       *
+       * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed
+       * onto the {@link ng.$exceptionHandler $exceptionHandler} service.
+       *
+       * @param {string} name Event name to emit.
+       * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.
+       * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}).
+       */
+      $emit: function(name, args) {
+        var empty = [],
+            namedListeners,
+            scope = this,
+            stopPropagation = false,
+            event = {
+              name: name,
+              targetScope: scope,
+              stopPropagation: function() {stopPropagation = true;},
+              preventDefault: function() {
+                event.defaultPrevented = true;
+              },
+              defaultPrevented: false
+            },
+            listenerArgs = concat([event], arguments, 1),
+            i, length;
+
+        do {
+          namedListeners = scope.$$listeners[name] || empty;
+          event.currentScope = scope;
+          for (i = 0, length = namedListeners.length; i < length; i++) {
+
+            // if listeners were deregistered, defragment the array
+            if (!namedListeners[i]) {
+              namedListeners.splice(i, 1);
+              i--;
+              length--;
+              continue;
+            }
+            try {
+              //allow all listeners attached to the current scope to run
+              namedListeners[i].apply(null, listenerArgs);
+            } catch (e) {
+              $exceptionHandler(e);
+            }
+          }
+          //if any listener on the current scope stops propagation, prevent bubbling
+          if (stopPropagation) {
+            event.currentScope = null;
+            return event;
+          }
+          //traverse upwards
+          scope = scope.$parent;
+        } while (scope);
+
+        event.currentScope = null;
+
+        return event;
+      },
+
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$broadcast
+       * @kind function
+       *
+       * @description
+       * Dispatches an event `name` downwards to all child scopes (and their children) notifying the
+       * registered {@link ng.$rootScope.Scope#$on} listeners.
+       *
+       * The event life cycle starts at the scope on which `$broadcast` was called. All
+       * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get
+       * notified. Afterwards, the event propagates to all direct and indirect scopes of the current
+       * scope and calls all registered listeners along the way. The event cannot be canceled.
+       *
+       * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed
+       * onto the {@link ng.$exceptionHandler $exceptionHandler} service.
+       *
+       * @param {string} name Event name to broadcast.
+       * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.
+       * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on}
+       */
+      $broadcast: function(name, args) {
+        var target = this,
+            current = target,
+            next = target,
+            event = {
+              name: name,
+              targetScope: target,
+              preventDefault: function() {
+                event.defaultPrevented = true;
+              },
+              defaultPrevented: false
+            };
+
+        if (!target.$$listenerCount[name]) return event;
+
+        var listenerArgs = concat([event], arguments, 1),
+            listeners, i, length;
+
+        //down while you can, then up and next sibling or up and next sibling until back at root
+        while ((current = next)) {
+          event.currentScope = current;
+          listeners = current.$$listeners[name] || [];
+          for (i = 0, length = listeners.length; i < length; i++) {
+            // if listeners were deregistered, defragment the array
+            if (!listeners[i]) {
+              listeners.splice(i, 1);
+              i--;
+              length--;
+              continue;
+            }
+
+            try {
+              listeners[i].apply(null, listenerArgs);
+            } catch (e) {
+              $exceptionHandler(e);
+            }
+          }
+
+          // Insanity Warning: scope depth-first traversal
+          // yes, this code is a bit crazy, but it works and we have tests to prove it!
+          // this piece should be kept in sync with the traversal in $digest
+          // (though it differs due to having the extra check for $$listenerCount)
+          if (!(next = ((current.$$listenerCount[name] && current.$$childHead) ||
+              (current !== target && current.$$nextSibling)))) {
+            while (current !== target && !(next = current.$$nextSibling)) {
+              current = current.$parent;
+            }
+          }
+        }
+
+        event.currentScope = null;
+        return event;
+      }
+    };
+
+    var $rootScope = new Scope();
+
+    //The internal queues. Expose them on the $rootScope for debugging/testing purposes.
+    var asyncQueue = $rootScope.$$asyncQueue = [];
+    var postDigestQueue = $rootScope.$$postDigestQueue = [];
+    var applyAsyncQueue = $rootScope.$$applyAsyncQueue = [];
+
+    return $rootScope;
+
+
+    function beginPhase(phase) {
+      if ($rootScope.$$phase) {
+        throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase);
+      }
+
+      $rootScope.$$phase = phase;
+    }
+
+    function clearPhase() {
+      $rootScope.$$phase = null;
+    }
+
+    function incrementWatchersCount(current, count) {
+      do {
+        current.$$watchersCount += count;
+      } while ((current = current.$parent));
+    }
+
+    function decrementListenerCount(current, count, name) {
+      do {
+        current.$$listenerCount[name] -= count;
+
+        if (current.$$listenerCount[name] === 0) {
+          delete current.$$listenerCount[name];
+        }
+      } while ((current = current.$parent));
+    }
+
+    /**
+     * function used as an initial value for watchers.
+     * because it's unique we can easily tell it apart from other values
+     */
+    function initWatchVal() {}
+
+    function flushApplyAsync() {
+      while (applyAsyncQueue.length) {
+        try {
+          applyAsyncQueue.shift()();
+        } catch (e) {
+          $exceptionHandler(e);
+        }
+      }
+      applyAsyncId = null;
+    }
+
+    function scheduleApplyAsync() {
+      if (applyAsyncId === null) {
+        applyAsyncId = $browser.defer(function() {
+          $rootScope.$apply(flushApplyAsync);
+        });
+      }
+    }
+  }];
+}
+
+/**
+ * @description
+ * Private service to sanitize uris for links and images. Used by $compile and $sanitize.
+ */
+function $$SanitizeUriProvider() {
+  var aHrefSanitizationWhitelist = /^\s*(https?|ftp|mailto|tel|file):/,
+    imgSrcSanitizationWhitelist = /^\s*((https?|ftp|file|blob):|data:image\/)/;
+
+  /**
+   * @description
+   * Retrieves or overrides the default regular expression that is used for whitelisting of safe
+   * urls during a[href] sanitization.
+   *
+   * The sanitization is a security measure aimed at prevent XSS attacks via html links.
+   *
+   * Any url about to be assigned to a[href] via data-binding is first normalized and turned into
+   * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`
+   * regular expression. If a match is found, the original url is written into the dom. Otherwise,
+   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
+   *
+   * @param {RegExp=} regexp New regexp to whitelist urls with.
+   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
+   *    chaining otherwise.
+   */
+  this.aHrefSanitizationWhitelist = function(regexp) {
+    if (isDefined(regexp)) {
+      aHrefSanitizationWhitelist = regexp;
+      return this;
+    }
+    return aHrefSanitizationWhitelist;
+  };
+
+
+  /**
+   * @description
+   * Retrieves or overrides the default regular expression that is used for whitelisting of safe
+   * urls during img[src] sanitization.
+   *
+   * The sanitization is a security measure aimed at prevent XSS attacks via html links.
+   *
+   * Any url about to be assigned to img[src] via data-binding is first normalized and turned into
+   * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`
+   * regular expression. If a match is found, the original url is written into the dom. Otherwise,
+   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
+   *
+   * @param {RegExp=} regexp New regexp to whitelist urls with.
+   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
+   *    chaining otherwise.
+   */
+  this.imgSrcSanitizationWhitelist = function(regexp) {
+    if (isDefined(regexp)) {
+      imgSrcSanitizationWhitelist = regexp;
+      return this;
+    }
+    return imgSrcSanitizationWhitelist;
+  };
+
+  this.$get = function() {
+    return function sanitizeUri(uri, isImage) {
+      var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist;
+      var normalizedVal;
+      normalizedVal = urlResolve(uri).href;
+      if (normalizedVal !== '' && !normalizedVal.match(regex)) {
+        return 'unsafe:' + normalizedVal;
+      }
+      return uri;
+    };
+  };
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *     Any commits to this file should be reviewed with security in mind.  *
+ *   Changes to this file can potentially create security vulnerabilities. *
+ *          An approval from 2 Core members with history of modifying      *
+ *                         this file is required.                          *
+ *                                                                         *
+ *  Does the change somehow allow for arbitrary javascript to be executed? *
+ *    Or allows for someone to change the prototype of built-in objects?   *
+ *     Or gives undesired access to variables likes document or window?    *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+var $sceMinErr = minErr('$sce');
+
+var SCE_CONTEXTS = {
+  HTML: 'html',
+  CSS: 'css',
+  URL: 'url',
+  // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a
+  // url.  (e.g. ng-include, script src, templateUrl)
+  RESOURCE_URL: 'resourceUrl',
+  JS: 'js'
+};
+
+// Helper functions follow.
+
+function adjustMatcher(matcher) {
+  if (matcher === 'self') {
+    return matcher;
+  } else if (isString(matcher)) {
+    // Strings match exactly except for 2 wildcards - '*' and '**'.
+    // '*' matches any character except those from the set ':/.?&'.
+    // '**' matches any character (like .* in a RegExp).
+    // More than 2 *'s raises an error as it's ill defined.
+    if (matcher.indexOf('***') > -1) {
+      throw $sceMinErr('iwcard',
+          'Illegal sequence *** in string matcher.  String: {0}', matcher);
+    }
+    matcher = escapeForRegexp(matcher).
+                  replace('\\*\\*', '.*').
+                  replace('\\*', '[^:/.?&;]*');
+    return new RegExp('^' + matcher + '$');
+  } else if (isRegExp(matcher)) {
+    // The only other type of matcher allowed is a Regexp.
+    // Match entire URL / disallow partial matches.
+    // Flags are reset (i.e. no global, ignoreCase or multiline)
+    return new RegExp('^' + matcher.source + '$');
+  } else {
+    throw $sceMinErr('imatcher',
+        'Matchers may only be "self", string patterns or RegExp objects');
+  }
+}
+
+
+function adjustMatchers(matchers) {
+  var adjustedMatchers = [];
+  if (isDefined(matchers)) {
+    forEach(matchers, function(matcher) {
+      adjustedMatchers.push(adjustMatcher(matcher));
+    });
+  }
+  return adjustedMatchers;
+}
+
+
+/**
+ * @ngdoc service
+ * @name $sceDelegate
+ * @kind function
+ *
+ * @description
+ *
+ * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict
+ * Contextual Escaping (SCE)} services to AngularJS.
+ *
+ * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of
+ * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS.  This is
+ * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to
+ * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things
+ * work because `$sce` delegates to `$sceDelegate` for these operations.
+ *
+ * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service.
+ *
+ * The default instance of `$sceDelegate` should work out of the box with little pain.  While you
+ * can override it completely to change the behavior of `$sce`, the common case would
+ * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting
+ * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as
+ * templates.  Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist
+ * $sceDelegateProvider.resourceUrlWhitelist} and {@link
+ * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}
+ */
+
+/**
+ * @ngdoc provider
+ * @name $sceDelegateProvider
+ * @description
+ *
+ * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate
+ * $sceDelegate} service.  This allows one to get/set the whitelists and blacklists used to ensure
+ * that the URLs used for sourcing Angular templates are safe.  Refer {@link
+ * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and
+ * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}
+ *
+ * For the general details about this service in Angular, read the main page for {@link ng.$sce
+ * Strict Contextual Escaping (SCE)}.
+ *
+ * **Example**:  Consider the following case. <a name="example"></a>
+ *
+ * - your app is hosted at url `http://myapp.example.com/`
+ * - but some of your templates are hosted on other domains you control such as
+ *   `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc.
+ * - and you have an open redirect at `http://myapp.example.com/clickThru?...`.
+ *
+ * Here is what a secure configuration for this scenario might look like:
+ *
+ * ```
+ *  angular.module('myApp', []).config(function($sceDelegateProvider) {
+ *    $sceDelegateProvider.resourceUrlWhitelist([
+ *      // Allow same origin resource loads.
+ *      'self',
+ *      // Allow loading from our assets domain.  Notice the difference between * and **.
+ *      'http://srv*.assets.example.com/**'
+ *    ]);
+ *
+ *    // The blacklist overrides the whitelist so the open redirect here is blocked.
+ *    $sceDelegateProvider.resourceUrlBlacklist([
+ *      'http://myapp.example.com/clickThru**'
+ *    ]);
+ *  });
+ * ```
+ */
+
+function $SceDelegateProvider() {
+  this.SCE_CONTEXTS = SCE_CONTEXTS;
+
+  // Resource URLs can also be trusted by policy.
+  var resourceUrlWhitelist = ['self'],
+      resourceUrlBlacklist = [];
+
+  /**
+   * @ngdoc method
+   * @name $sceDelegateProvider#resourceUrlWhitelist
+   * @kind function
+   *
+   * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value
+   *     provided.  This must be an array or null.  A snapshot of this array is used so further
+   *     changes to the array are ignored.
+   *
+   *     Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items
+   *     allowed in this array.
+   *
+   *     Note: **an empty whitelist array will block all URLs**!
+   *
+   * @return {Array} the currently set whitelist array.
+   *
+   * The **default value** when no whitelist has been explicitly set is `['self']` allowing only
+   * same origin resource requests.
+   *
+   * @description
+   * Sets/Gets the whitelist of trusted resource URLs.
+   */
+  this.resourceUrlWhitelist = function(value) {
+    if (arguments.length) {
+      resourceUrlWhitelist = adjustMatchers(value);
+    }
+    return resourceUrlWhitelist;
+  };
+
+  /**
+   * @ngdoc method
+   * @name $sceDelegateProvider#resourceUrlBlacklist
+   * @kind function
+   *
+   * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value
+   *     provided.  This must be an array or null.  A snapshot of this array is used so further
+   *     changes to the array are ignored.
+   *
+   *     Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items
+   *     allowed in this array.
+   *
+   *     The typical usage for the blacklist is to **block
+   *     [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as
+   *     these would otherwise be trusted but actually return content from the redirected domain.
+   *
+   *     Finally, **the blacklist overrides the whitelist** and has the final say.
+   *
+   * @return {Array} the currently set blacklist array.
+   *
+   * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there
+   * is no blacklist.)
+   *
+   * @description
+   * Sets/Gets the blacklist of trusted resource URLs.
+   */
+
+  this.resourceUrlBlacklist = function(value) {
+    if (arguments.length) {
+      resourceUrlBlacklist = adjustMatchers(value);
+    }
+    return resourceUrlBlacklist;
+  };
+
+  this.$get = ['$injector', function($injector) {
+
+    var htmlSanitizer = function htmlSanitizer(html) {
+      throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');
+    };
+
+    if ($injector.has('$sanitize')) {
+      htmlSanitizer = $injector.get('$sanitize');
+    }
+
+
+    function matchUrl(matcher, parsedUrl) {
+      if (matcher === 'self') {
+        return urlIsSameOrigin(parsedUrl);
+      } else {
+        // definitely a regex.  See adjustMatchers()
+        return !!matcher.exec(parsedUrl.href);
+      }
+    }
+
+    function isResourceUrlAllowedByPolicy(url) {
+      var parsedUrl = urlResolve(url.toString());
+      var i, n, allowed = false;
+      // Ensure that at least one item from the whitelist allows this url.
+      for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) {
+        if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) {
+          allowed = true;
+          break;
+        }
+      }
+      if (allowed) {
+        // Ensure that no item from the blacklist blocked this url.
+        for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) {
+          if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) {
+            allowed = false;
+            break;
+          }
+        }
+      }
+      return allowed;
+    }
+
+    function generateHolderType(Base) {
+      var holderType = function TrustedValueHolderType(trustedValue) {
+        this.$$unwrapTrustedValue = function() {
+          return trustedValue;
+        };
+      };
+      if (Base) {
+        holderType.prototype = new Base();
+      }
+      holderType.prototype.valueOf = function sceValueOf() {
+        return this.$$unwrapTrustedValue();
+      };
+      holderType.prototype.toString = function sceToString() {
+        return this.$$unwrapTrustedValue().toString();
+      };
+      return holderType;
+    }
+
+    var trustedValueHolderBase = generateHolderType(),
+        byType = {};
+
+    byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase);
+    byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase);
+    byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase);
+    byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase);
+    byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]);
+
+    /**
+     * @ngdoc method
+     * @name $sceDelegate#trustAs
+     *
+     * @description
+     * Returns an object that is trusted by angular for use in specified strict
+     * contextual escaping contexts (such as ng-bind-html, ng-include, any src
+     * attribute interpolation, any dom event binding attribute interpolation
+     * such as for onclick,  etc.) that uses the provided value.
+     * See {@link ng.$sce $sce} for enabling strict contextual escaping.
+     *
+     * @param {string} type The kind of context in which this value is safe for use.  e.g. url,
+     *   resourceUrl, html, js and css.
+     * @param {*} value The value that that should be considered trusted/safe.
+     * @returns {*} A value that can be used to stand in for the provided `value` in places
+     * where Angular expects a $sce.trustAs() return value.
+     */
+    function trustAs(type, trustedValue) {
+      var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null);
+      if (!Constructor) {
+        throw $sceMinErr('icontext',
+            'Attempted to trust a value in invalid context. Context: {0}; Value: {1}',
+            type, trustedValue);
+      }
+      if (trustedValue === null || isUndefined(trustedValue) || trustedValue === '') {
+        return trustedValue;
+      }
+      // All the current contexts in SCE_CONTEXTS happen to be strings.  In order to avoid trusting
+      // mutable objects, we ensure here that the value passed in is actually a string.
+      if (typeof trustedValue !== 'string') {
+        throw $sceMinErr('itype',
+            'Attempted to trust a non-string value in a content requiring a string: Context: {0}',
+            type);
+      }
+      return new Constructor(trustedValue);
+    }
+
+    /**
+     * @ngdoc method
+     * @name $sceDelegate#valueOf
+     *
+     * @description
+     * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs
+     * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link
+     * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.
+     *
+     * If the passed parameter is not a value that had been returned by {@link
+     * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is.
+     *
+     * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}
+     *      call or anything else.
+     * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs
+     *     `$sceDelegate.trustAs`} if `value` is the result of such a call.  Otherwise, returns
+     *     `value` unchanged.
+     */
+    function valueOf(maybeTrusted) {
+      if (maybeTrusted instanceof trustedValueHolderBase) {
+        return maybeTrusted.$$unwrapTrustedValue();
+      } else {
+        return maybeTrusted;
+      }
+    }
+
+    /**
+     * @ngdoc method
+     * @name $sceDelegate#getTrusted
+     *
+     * @description
+     * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and
+     * returns the originally supplied value if the queried context type is a supertype of the
+     * created type.  If this condition isn't satisfied, throws an exception.
+     *
+     * @param {string} type The kind of context in which this value is to be used.
+     * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs
+     *     `$sceDelegate.trustAs`} call.
+     * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs
+     *     `$sceDelegate.trustAs`} if valid in this context.  Otherwise, throws an exception.
+     */
+    function getTrusted(type, maybeTrusted) {
+      if (maybeTrusted === null || isUndefined(maybeTrusted) || maybeTrusted === '') {
+        return maybeTrusted;
+      }
+      var constructor = (byType.hasOwnProperty(type) ? byType[type] : null);
+      if (constructor && maybeTrusted instanceof constructor) {
+        return maybeTrusted.$$unwrapTrustedValue();
+      }
+      // If we get here, then we may only take one of two actions.
+      // 1. sanitize the value for the requested type, or
+      // 2. throw an exception.
+      if (type === SCE_CONTEXTS.RESOURCE_URL) {
+        if (isResourceUrlAllowedByPolicy(maybeTrusted)) {
+          return maybeTrusted;
+        } else {
+          throw $sceMinErr('insecurl',
+              'Blocked loading resource from url not allowed by $sceDelegate policy.  URL: {0}',
+              maybeTrusted.toString());
+        }
+      } else if (type === SCE_CONTEXTS.HTML) {
+        return htmlSanitizer(maybeTrusted);
+      }
+      throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');
+    }
+
+    return { trustAs: trustAs,
+             getTrusted: getTrusted,
+             valueOf: valueOf };
+  }];
+}
+
+
+/**
+ * @ngdoc provider
+ * @name $sceProvider
+ * @description
+ *
+ * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service.
+ * -   enable/disable Strict Contextual Escaping (SCE) in a module
+ * -   override the default implementation with a custom delegate
+ *
+ * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}.
+ */
+
+/* jshint maxlen: false*/
+
+/**
+ * @ngdoc service
+ * @name $sce
+ * @kind function
+ *
+ * @description
+ *
+ * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS.
+ *
+ * # Strict Contextual Escaping
+ *
+ * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain
+ * contexts to result in a value that is marked as safe to use for that context.  One example of
+ * such a context is binding arbitrary html controlled by the user via `ng-bind-html`.  We refer
+ * to these contexts as privileged or SCE contexts.
+ *
+ * As of version 1.2, Angular ships with SCE enabled by default.
+ *
+ * Note:  When enabled (the default), IE<11 in quirks mode is not supported.  In this mode, IE<11 allow
+ * one to execute arbitrary javascript by the use of the expression() syntax.  Refer
+ * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them.
+ * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>`
+ * to the top of your HTML document.
+ *
+ * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for
+ * security vulnerabilities such as XSS, clickjacking, etc. a lot easier.
+ *
+ * Here's an example of a binding in a privileged context:
+ *
+ * ```
+ * <input ng-model="userHtml" aria-label="User input">
+ * <div ng-bind-html="userHtml"></div>
+ * ```
+ *
+ * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user.  With SCE
+ * disabled, this application allows the user to render arbitrary HTML into the DIV.
+ * In a more realistic example, one may be rendering user comments, blog articles, etc. via
+ * bindings.  (HTML is just one example of a context where rendering user controlled input creates
+ * security vulnerabilities.)
+ *
+ * For the case of HTML, you might use a library, either on the client side, or on the server side,
+ * to sanitize unsafe HTML before binding to the value and rendering it in the document.
+ *
+ * How would you ensure that every place that used these types of bindings was bound to a value that
+ * was sanitized by your library (or returned as safe for rendering by your server?)  How can you
+ * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some
+ * properties/fields and forgot to update the binding to the sanitized value?
+ *
+ * To be secure by default, you want to ensure that any such bindings are disallowed unless you can
+ * determine that something explicitly says it's safe to use a value for binding in that
+ * context.  You can then audit your code (a simple grep would do) to ensure that this is only done
+ * for those values that you can easily tell are safe - because they were received from your server,
+ * sanitized by your library, etc.  You can organize your codebase to help with this - perhaps
+ * allowing only the files in a specific directory to do this.  Ensuring that the internal API
+ * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task.
+ *
+ * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs}
+ * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to
+ * obtain values that will be accepted by SCE / privileged contexts.
+ *
+ *
+ * ## How does it work?
+ *
+ * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted
+ * $sce.getTrusted(context, value)} rather than to the value directly.  Directives use {@link
+ * ng.$sce#parseAs $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the
+ * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals.
+ *
+ * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link
+ * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}.  Here's the actual code (slightly
+ * simplified):
+ *
+ * ```
+ * var ngBindHtmlDirective = ['$sce', function($sce) {
+ *   return function(scope, element, attr) {
+ *     scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {
+ *       element.html(value || '');
+ *     });
+ *   };
+ * }];
+ * ```
+ *
+ * ## Impact on loading templates
+ *
+ * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as
+ * `templateUrl`'s specified by {@link guide/directive directives}.
+ *
+ * By default, Angular only loads templates from the same domain and protocol as the application
+ * document.  This is done by calling {@link ng.$sce#getTrustedResourceUrl
+ * $sce.getTrustedResourceUrl} on the template URL.  To load templates from other domains and/or
+ * protocols, you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist
+ * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value.
+ *
+ * *Please note*:
+ * The browser's
+ * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)
+ * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)
+ * policy apply in addition to this and may further restrict whether the template is successfully
+ * loaded.  This means that without the right CORS policy, loading templates from a different domain
+ * won't work on all browsers.  Also, loading templates from `file://` URL does not work on some
+ * browsers.
+ *
+ * ## This feels like too much overhead
+ *
+ * It's important to remember that SCE only applies to interpolation expressions.
+ *
+ * If your expressions are constant literals, they're automatically trusted and you don't need to
+ * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g.
+ * `<div ng-bind-html="'<b>implicitly trusted</b>'"></div>`) just works.
+ *
+ * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them
+ * through {@link ng.$sce#getTrusted $sce.getTrusted}.  SCE doesn't play a role here.
+ *
+ * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load
+ * templates in `ng-include` from your application's domain without having to even know about SCE.
+ * It blocks loading templates from other domains or loading templates over http from an https
+ * served document.  You can change these by setting your own custom {@link
+ * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link
+ * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs.
+ *
+ * This significantly reduces the overhead.  It is far easier to pay the small overhead and have an
+ * application that's secure and can be audited to verify that with much more ease than bolting
+ * security onto an application later.
+ *
+ * <a name="contexts"></a>
+ * ## What trusted context types are supported?
+ *
+ * | Context             | Notes          |
+ * |---------------------|----------------|
+ * | `$sce.HTML`         | For HTML that's safe to source into the application.  The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. |
+ * | `$sce.CSS`          | For CSS that's safe to source into the application.  Currently unused.  Feel free to use it in your own directives. |
+ * | `$sce.URL`          | For URLs that are safe to follow as links.  Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. |
+ * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application.  Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.)  <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. |
+ * | `$sce.JS`           | For JavaScript that is safe to execute in your application's context.  Currently unused.  Feel free to use it in your own directives. |
+ *
+ * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name="resourceUrlPatternItem"></a>
+ *
+ *  Each element in these arrays must be one of the following:
+ *
+ *  - **'self'**
+ *    - The special **string**, `'self'`, can be used to match against all URLs of the **same
+ *      domain** as the application document using the **same protocol**.
+ *  - **String** (except the special value `'self'`)
+ *    - The string is matched against the full *normalized / absolute URL* of the resource
+ *      being tested (substring matches are not good enough.)
+ *    - There are exactly **two wildcard sequences** - `*` and `**`.  All other characters
+ *      match themselves.
+ *    - `*`: matches zero or more occurrences of any character other than one of the following 6
+ *      characters: '`:`', '`/`', '`.`', '`?`', '`&`' and '`;`'.  It's a useful wildcard for use
+ *      in a whitelist.
+ *    - `**`: matches zero or more occurrences of *any* character.  As such, it's not
+ *      appropriate for use in a scheme, domain, etc. as it would match too much.  (e.g.
+ *      http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might
+ *      not have been the intention.)  Its usage at the very end of the path is ok.  (e.g.
+ *      http://foo.example.com/templates/**).
+ *  - **RegExp** (*see caveat below*)
+ *    - *Caveat*:  While regular expressions are powerful and offer great flexibility,  their syntax
+ *      (and all the inevitable escaping) makes them *harder to maintain*.  It's easy to
+ *      accidentally introduce a bug when one updates a complex expression (imho, all regexes should
+ *      have good test coverage).  For instance, the use of `.` in the regex is correct only in a
+ *      small number of cases.  A `.` character in the regex used when matching the scheme or a
+ *      subdomain could be matched against a `:` or literal `.` that was likely not intended.   It
+ *      is highly recommended to use the string patterns and only fall back to regular expressions
+ *      as a last resort.
+ *    - The regular expression must be an instance of RegExp (i.e. not a string.)  It is
+ *      matched against the **entire** *normalized / absolute URL* of the resource being tested
+ *      (even when the RegExp did not have the `^` and `$` codes.)  In addition, any flags
+ *      present on the RegExp (such as multiline, global, ignoreCase) are ignored.
+ *    - If you are generating your JavaScript from some other templating engine (not
+ *      recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)),
+ *      remember to escape your regular expression (and be aware that you might need more than
+ *      one level of escaping depending on your templating engine and the way you interpolated
+ *      the value.)  Do make use of your platform's escaping mechanism as it might be good
+ *      enough before coding your own.  E.g. Ruby has
+ *      [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape)
+ *      and Python has [re.escape](http://docs.python.org/library/re.html#re.escape).
+ *      Javascript lacks a similar built in function for escaping.  Take a look at Google
+ *      Closure library's [goog.string.regExpEscape(s)](
+ *      http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962).
+ *
+ * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example.
+ *
+ * ## Show me an example using SCE.
+ *
+ * <example module="mySceApp" deps="angular-sanitize.js">
+ * <file name="index.html">
+ *   <div ng-controller="AppController as myCtrl">
+ *     <i ng-bind-html="myCtrl.explicitlyTrustedHtml" id="explicitlyTrustedHtml"></i><br><br>
+ *     <b>User comments</b><br>
+ *     By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when
+ *     $sanitize is available.  If $sanitize isn't available, this results in an error instead of an
+ *     exploit.
+ *     <div class="well">
+ *       <div ng-repeat="userComment in myCtrl.userComments">
+ *         <b>{{userComment.name}}</b>:
+ *         <span ng-bind-html="userComment.htmlComment" class="htmlComment"></span>
+ *         <br>
+ *       </div>
+ *     </div>
+ *   </div>
+ * </file>
+ *
+ * <file name="script.js">
+ *   angular.module('mySceApp', ['ngSanitize'])
+ *     .controller('AppController', ['$http', '$templateCache', '$sce',
+ *       function($http, $templateCache, $sce) {
+ *         var self = this;
+ *         $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) {
+ *           self.userComments = userComments;
+ *         });
+ *         self.explicitlyTrustedHtml = $sce.trustAsHtml(
+ *             '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' +
+ *             'sanitization.&quot;">Hover over this text.</span>');
+ *       }]);
+ * </file>
+ *
+ * <file name="test_data.json">
+ * [
+ *   { "name": "Alice",
+ *     "htmlComment":
+ *         "<span onmouseover='this.textContent=\"PWN3D!\"'>Is <i>anyone</i> reading this?</span>"
+ *   },
+ *   { "name": "Bob",
+ *     "htmlComment": "<i>Yes!</i>  Am I the only other one?"
+ *   }
+ * ]
+ * </file>
+ *
+ * <file name="protractor.js" type="protractor">
+ *   describe('SCE doc demo', function() {
+ *     it('should sanitize untrusted values', function() {
+ *       expect(element.all(by.css('.htmlComment')).first().getInnerHtml())
+ *           .toBe('<span>Is <i>anyone</i> reading this?</span>');
+ *     });
+ *
+ *     it('should NOT sanitize explicitly trusted values', function() {
+ *       expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe(
+ *           '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' +
+ *           'sanitization.&quot;">Hover over this text.</span>');
+ *     });
+ *   });
+ * </file>
+ * </example>
+ *
+ *
+ *
+ * ## Can I disable SCE completely?
+ *
+ * Yes, you can.  However, this is strongly discouraged.  SCE gives you a lot of security benefits
+ * for little coding overhead.  It will be much harder to take an SCE disabled application and
+ * either secure it on your own or enable SCE at a later stage.  It might make sense to disable SCE
+ * for cases where you have a lot of existing code that was written before SCE was introduced and
+ * you're migrating them a module at a time.
+ *
+ * That said, here's how you can completely disable SCE:
+ *
+ * ```
+ * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {
+ *   // Completely disable SCE.  For demonstration purposes only!
+ *   // Do not use in new projects.
+ *   $sceProvider.enabled(false);
+ * });
+ * ```
+ *
+ */
+/* jshint maxlen: 100 */
+
+function $SceProvider() {
+  var enabled = true;
+
+  /**
+   * @ngdoc method
+   * @name $sceProvider#enabled
+   * @kind function
+   *
+   * @param {boolean=} value If provided, then enables/disables SCE.
+   * @return {boolean} true if SCE is enabled, false otherwise.
+   *
+   * @description
+   * Enables/disables SCE and returns the current value.
+   */
+  this.enabled = function(value) {
+    if (arguments.length) {
+      enabled = !!value;
+    }
+    return enabled;
+  };
+
+
+  /* Design notes on the default implementation for SCE.
+   *
+   * The API contract for the SCE delegate
+   * -------------------------------------
+   * The SCE delegate object must provide the following 3 methods:
+   *
+   * - trustAs(contextEnum, value)
+   *     This method is used to tell the SCE service that the provided value is OK to use in the
+   *     contexts specified by contextEnum.  It must return an object that will be accepted by
+   *     getTrusted() for a compatible contextEnum and return this value.
+   *
+   * - valueOf(value)
+   *     For values that were not produced by trustAs(), return them as is.  For values that were
+   *     produced by trustAs(), return the corresponding input value to trustAs.  Basically, if
+   *     trustAs is wrapping the given values into some type, this operation unwraps it when given
+   *     such a value.
+   *
+   * - getTrusted(contextEnum, value)
+   *     This function should return the a value that is safe to use in the context specified by
+   *     contextEnum or throw and exception otherwise.
+   *
+   * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be
+   * opaque or wrapped in some holder object.  That happens to be an implementation detail.  For
+   * instance, an implementation could maintain a registry of all trusted objects by context.  In
+   * such a case, trustAs() would return the same object that was passed in.  getTrusted() would
+   * return the same object passed in if it was found in the registry under a compatible context or
+   * throw an exception otherwise.  An implementation might only wrap values some of the time based
+   * on some criteria.  getTrusted() might return a value and not throw an exception for special
+   * constants or objects even if not wrapped.  All such implementations fulfill this contract.
+   *
+   *
+   * A note on the inheritance model for SCE contexts
+   * ------------------------------------------------
+   * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types.  This
+   * is purely an implementation details.
+   *
+   * The contract is simply this:
+   *
+   *     getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value)
+   *     will also succeed.
+   *
+   * Inheritance happens to capture this in a natural way.  In some future, we
+   * may not use inheritance anymore.  That is OK because no code outside of
+   * sce.js and sceSpecs.js would need to be aware of this detail.
+   */
+
+  this.$get = ['$parse', '$sceDelegate', function(
+                $parse,   $sceDelegate) {
+    // Prereq: Ensure that we're not running in IE<11 quirks mode.  In that mode, IE < 11 allow
+    // the "expression(javascript expression)" syntax which is insecure.
+    if (enabled && msie < 8) {
+      throw $sceMinErr('iequirks',
+        'Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks ' +
+        'mode.  You can fix this by adding the text <!doctype html> to the top of your HTML ' +
+        'document.  See http://docs.angularjs.org/api/ng.$sce for more information.');
+    }
+
+    var sce = shallowCopy(SCE_CONTEXTS);
+
+    /**
+     * @ngdoc method
+     * @name $sce#isEnabled
+     * @kind function
+     *
+     * @return {Boolean} true if SCE is enabled, false otherwise.  If you want to set the value, you
+     * have to do it at module config time on {@link ng.$sceProvider $sceProvider}.
+     *
+     * @description
+     * Returns a boolean indicating if SCE is enabled.
+     */
+    sce.isEnabled = function() {
+      return enabled;
+    };
+    sce.trustAs = $sceDelegate.trustAs;
+    sce.getTrusted = $sceDelegate.getTrusted;
+    sce.valueOf = $sceDelegate.valueOf;
+
+    if (!enabled) {
+      sce.trustAs = sce.getTrusted = function(type, value) { return value; };
+      sce.valueOf = identity;
+    }
+
+    /**
+     * @ngdoc method
+     * @name $sce#parseAs
+     *
+     * @description
+     * Converts Angular {@link guide/expression expression} into a function.  This is like {@link
+     * ng.$parse $parse} and is identical when the expression is a literal constant.  Otherwise, it
+     * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*,
+     * *result*)}
+     *
+     * @param {string} type The kind of SCE context in which this result will be used.
+     * @param {string} expression String expression to compile.
+     * @returns {function(context, locals)} a function which represents the compiled expression:
+     *
+     *    * `context` – `{object}` – an object against which any expressions embedded in the strings
+     *      are evaluated against (typically a scope object).
+     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in
+     *      `context`.
+     */
+    sce.parseAs = function sceParseAs(type, expr) {
+      var parsed = $parse(expr);
+      if (parsed.literal && parsed.constant) {
+        return parsed;
+      } else {
+        return $parse(expr, function(value) {
+          return sce.getTrusted(type, value);
+        });
+      }
+    };
+
+    /**
+     * @ngdoc method
+     * @name $sce#trustAs
+     *
+     * @description
+     * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.  As such,
+     * returns an object that is trusted by angular for use in specified strict contextual
+     * escaping contexts (such as ng-bind-html, ng-include, any src attribute
+     * interpolation, any dom event binding attribute interpolation such as for onclick,  etc.)
+     * that uses the provided value.  See * {@link ng.$sce $sce} for enabling strict contextual
+     * escaping.
+     *
+     * @param {string} type The kind of context in which this value is safe for use.  e.g. url,
+     *   resourceUrl, html, js and css.
+     * @param {*} value The value that that should be considered trusted/safe.
+     * @returns {*} A value that can be used to stand in for the provided `value` in places
+     * where Angular expects a $sce.trustAs() return value.
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#trustAsHtml
+     *
+     * @description
+     * Shorthand method.  `$sce.trustAsHtml(value)` →
+     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`}
+     *
+     * @param {*} value The value to trustAs.
+     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml
+     *     $sce.getTrustedHtml(value)} to obtain the original value.  (privileged directives
+     *     only accept expressions that are either literal constants or are the
+     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#trustAsUrl
+     *
+     * @description
+     * Shorthand method.  `$sce.trustAsUrl(value)` →
+     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`}
+     *
+     * @param {*} value The value to trustAs.
+     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl
+     *     $sce.getTrustedUrl(value)} to obtain the original value.  (privileged directives
+     *     only accept expressions that are either literal constants or are the
+     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#trustAsResourceUrl
+     *
+     * @description
+     * Shorthand method.  `$sce.trustAsResourceUrl(value)` →
+     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`}
+     *
+     * @param {*} value The value to trustAs.
+     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl
+     *     $sce.getTrustedResourceUrl(value)} to obtain the original value.  (privileged directives
+     *     only accept expressions that are either literal constants or are the return
+     *     value of {@link ng.$sce#trustAs $sce.trustAs}.)
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#trustAsJs
+     *
+     * @description
+     * Shorthand method.  `$sce.trustAsJs(value)` →
+     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`}
+     *
+     * @param {*} value The value to trustAs.
+     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs
+     *     $sce.getTrustedJs(value)} to obtain the original value.  (privileged directives
+     *     only accept expressions that are either literal constants or are the
+     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#getTrusted
+     *
+     * @description
+     * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}.  As such,
+     * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the
+     * originally supplied value if the queried context type is a supertype of the created type.
+     * If this condition isn't satisfied, throws an exception.
+     *
+     * @param {string} type The kind of context in which this value is to be used.
+     * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`}
+     *                         call.
+     * @returns {*} The value the was originally provided to
+     *              {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context.
+     *              Otherwise, throws an exception.
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#getTrustedHtml
+     *
+     * @description
+     * Shorthand method.  `$sce.getTrustedHtml(value)` →
+     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`}
+     *
+     * @param {*} value The value to pass to `$sce.getTrusted`.
+     * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)`
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#getTrustedCss
+     *
+     * @description
+     * Shorthand method.  `$sce.getTrustedCss(value)` →
+     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`}
+     *
+     * @param {*} value The value to pass to `$sce.getTrusted`.
+     * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)`
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#getTrustedUrl
+     *
+     * @description
+     * Shorthand method.  `$sce.getTrustedUrl(value)` →
+     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`}
+     *
+     * @param {*} value The value to pass to `$sce.getTrusted`.
+     * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)`
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#getTrustedResourceUrl
+     *
+     * @description
+     * Shorthand method.  `$sce.getTrustedResourceUrl(value)` →
+     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`}
+     *
+     * @param {*} value The value to pass to `$sceDelegate.getTrusted`.
+     * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)`
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#getTrustedJs
+     *
+     * @description
+     * Shorthand method.  `$sce.getTrustedJs(value)` →
+     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`}
+     *
+     * @param {*} value The value to pass to `$sce.getTrusted`.
+     * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)`
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#parseAsHtml
+     *
+     * @description
+     * Shorthand method.  `$sce.parseAsHtml(expression string)` →
+     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.HTML, value)`}
+     *
+     * @param {string} expression String expression to compile.
+     * @returns {function(context, locals)} a function which represents the compiled expression:
+     *
+     *    * `context` – `{object}` – an object against which any expressions embedded in the strings
+     *      are evaluated against (typically a scope object).
+     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in
+     *      `context`.
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#parseAsCss
+     *
+     * @description
+     * Shorthand method.  `$sce.parseAsCss(value)` →
+     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.CSS, value)`}
+     *
+     * @param {string} expression String expression to compile.
+     * @returns {function(context, locals)} a function which represents the compiled expression:
+     *
+     *    * `context` – `{object}` – an object against which any expressions embedded in the strings
+     *      are evaluated against (typically a scope object).
+     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in
+     *      `context`.
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#parseAsUrl
+     *
+     * @description
+     * Shorthand method.  `$sce.parseAsUrl(value)` →
+     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.URL, value)`}
+     *
+     * @param {string} expression String expression to compile.
+     * @returns {function(context, locals)} a function which represents the compiled expression:
+     *
+     *    * `context` – `{object}` – an object against which any expressions embedded in the strings
+     *      are evaluated against (typically a scope object).
+     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in
+     *      `context`.
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#parseAsResourceUrl
+     *
+     * @description
+     * Shorthand method.  `$sce.parseAsResourceUrl(value)` →
+     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.RESOURCE_URL, value)`}
+     *
+     * @param {string} expression String expression to compile.
+     * @returns {function(context, locals)} a function which represents the compiled expression:
+     *
+     *    * `context` – `{object}` – an object against which any expressions embedded in the strings
+     *      are evaluated against (typically a scope object).
+     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in
+     *      `context`.
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#parseAsJs
+     *
+     * @description
+     * Shorthand method.  `$sce.parseAsJs(value)` →
+     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.JS, value)`}
+     *
+     * @param {string} expression String expression to compile.
+     * @returns {function(context, locals)} a function which represents the compiled expression:
+     *
+     *    * `context` – `{object}` – an object against which any expressions embedded in the strings
+     *      are evaluated against (typically a scope object).
+     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in
+     *      `context`.
+     */
+
+    // Shorthand delegations.
+    var parse = sce.parseAs,
+        getTrusted = sce.getTrusted,
+        trustAs = sce.trustAs;
+
+    forEach(SCE_CONTEXTS, function(enumValue, name) {
+      var lName = lowercase(name);
+      sce[camelCase("parse_as_" + lName)] = function(expr) {
+        return parse(enumValue, expr);
+      };
+      sce[camelCase("get_trusted_" + lName)] = function(value) {
+        return getTrusted(enumValue, value);
+      };
+      sce[camelCase("trust_as_" + lName)] = function(value) {
+        return trustAs(enumValue, value);
+      };
+    });
+
+    return sce;
+  }];
+}
+
+/**
+ * !!! This is an undocumented "private" service !!!
+ *
+ * @name $sniffer
+ * @requires $window
+ * @requires $document
+ *
+ * @property {boolean} history Does the browser support html5 history api ?
+ * @property {boolean} transitions Does the browser support CSS transition events ?
+ * @property {boolean} animations Does the browser support CSS animation events ?
+ *
+ * @description
+ * This is very simple implementation of testing browser's features.
+ */
+function $SnifferProvider() {
+  this.$get = ['$window', '$document', function($window, $document) {
+    var eventSupport = {},
+        android =
+          toInt((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),
+        boxee = /Boxee/i.test(($window.navigator || {}).userAgent),
+        document = $document[0] || {},
+        vendorPrefix,
+        vendorRegex = /^(Moz|webkit|ms)(?=[A-Z])/,
+        bodyStyle = document.body && document.body.style,
+        transitions = false,
+        animations = false,
+        match;
+
+    if (bodyStyle) {
+      for (var prop in bodyStyle) {
+        if (match = vendorRegex.exec(prop)) {
+          vendorPrefix = match[0];
+          vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1);
+          break;
+        }
+      }
+
+      if (!vendorPrefix) {
+        vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit';
+      }
+
+      transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle));
+      animations  = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle));
+
+      if (android && (!transitions ||  !animations)) {
+        transitions = isString(bodyStyle.webkitTransition);
+        animations = isString(bodyStyle.webkitAnimation);
+      }
+    }
+
+
+    return {
+      // Android has history.pushState, but it does not update location correctly
+      // so let's not use the history API at all.
+      // http://code.google.com/p/android/issues/detail?id=17471
+      // https://github.com/angular/angular.js/issues/904
+
+      // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has
+      // so let's not use the history API also
+      // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined
+      // jshint -W018
+      history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee),
+      // jshint +W018
+      hasEvent: function(event) {
+        // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have
+        // it. In particular the event is not fired when backspace or delete key are pressed or
+        // when cut operation is performed.
+        // IE10+ implements 'input' event but it erroneously fires under various situations,
+        // e.g. when placeholder changes, or a form is focused.
+        if (event === 'input' && msie <= 11) return false;
+
+        if (isUndefined(eventSupport[event])) {
+          var divElm = document.createElement('div');
+          eventSupport[event] = 'on' + event in divElm;
+        }
+
+        return eventSupport[event];
+      },
+      csp: csp(),
+      vendorPrefix: vendorPrefix,
+      transitions: transitions,
+      animations: animations,
+      android: android
+    };
+  }];
+}
+
+var $compileMinErr = minErr('$compile');
+
+/**
+ * @ngdoc service
+ * @name $templateRequest
+ *
+ * @description
+ * The `$templateRequest` service runs security checks then downloads the provided template using
+ * `$http` and, upon success, stores the contents inside of `$templateCache`. If the HTTP request
+ * fails or the response data of the HTTP request is empty, a `$compile` error will be thrown (the
+ * exception can be thwarted by setting the 2nd parameter of the function to true). Note that the
+ * contents of `$templateCache` are trusted, so the call to `$sce.getTrustedUrl(tpl)` is omitted
+ * when `tpl` is of type string and `$templateCache` has the matching entry.
+ *
+ * @param {string|TrustedResourceUrl} tpl The HTTP request template URL
+ * @param {boolean=} ignoreRequestError Whether or not to ignore the exception when the request fails or the template is empty
+ *
+ * @return {Promise} a promise for the HTTP response data of the given URL.
+ *
+ * @property {number} totalPendingRequests total amount of pending template requests being downloaded.
+ */
+function $TemplateRequestProvider() {
+  this.$get = ['$templateCache', '$http', '$q', '$sce', function($templateCache, $http, $q, $sce) {
+    function handleRequestFn(tpl, ignoreRequestError) {
+      handleRequestFn.totalPendingRequests++;
+
+      // We consider the template cache holds only trusted templates, so
+      // there's no need to go through whitelisting again for keys that already
+      // are included in there. This also makes Angular accept any script
+      // directive, no matter its name. However, we still need to unwrap trusted
+      // types.
+      if (!isString(tpl) || !$templateCache.get(tpl)) {
+        tpl = $sce.getTrustedResourceUrl(tpl);
+      }
+
+      var transformResponse = $http.defaults && $http.defaults.transformResponse;
+
+      if (isArray(transformResponse)) {
+        transformResponse = transformResponse.filter(function(transformer) {
+          return transformer !== defaultHttpResponseTransform;
+        });
+      } else if (transformResponse === defaultHttpResponseTransform) {
+        transformResponse = null;
+      }
+
+      var httpOptions = {
+        cache: $templateCache,
+        transformResponse: transformResponse
+      };
+
+      return $http.get(tpl, httpOptions)
+        ['finally'](function() {
+          handleRequestFn.totalPendingRequests--;
+        })
+        .then(function(response) {
+          $templateCache.put(tpl, response.data);
+          return response.data;
+        }, handleError);
+
+      function handleError(resp) {
+        if (!ignoreRequestError) {
+          throw $compileMinErr('tpload', 'Failed to load template: {0} (HTTP status: {1} {2})',
+            tpl, resp.status, resp.statusText);
+        }
+        return $q.reject(resp);
+      }
+    }
+
+    handleRequestFn.totalPendingRequests = 0;
+
+    return handleRequestFn;
+  }];
+}
+
+function $$TestabilityProvider() {
+  this.$get = ['$rootScope', '$browser', '$location',
+       function($rootScope,   $browser,   $location) {
+
+    /**
+     * @name $testability
+     *
+     * @description
+     * The private $$testability service provides a collection of methods for use when debugging
+     * or by automated test and debugging tools.
+     */
+    var testability = {};
+
+    /**
+     * @name $$testability#findBindings
+     *
+     * @description
+     * Returns an array of elements that are bound (via ng-bind or {{}})
+     * to expressions matching the input.
+     *
+     * @param {Element} element The element root to search from.
+     * @param {string} expression The binding expression to match.
+     * @param {boolean} opt_exactMatch If true, only returns exact matches
+     *     for the expression. Filters and whitespace are ignored.
+     */
+    testability.findBindings = function(element, expression, opt_exactMatch) {
+      var bindings = element.getElementsByClassName('ng-binding');
+      var matches = [];
+      forEach(bindings, function(binding) {
+        var dataBinding = angular.element(binding).data('$binding');
+        if (dataBinding) {
+          forEach(dataBinding, function(bindingName) {
+            if (opt_exactMatch) {
+              var matcher = new RegExp('(^|\\s)' + escapeForRegexp(expression) + '(\\s|\\||$)');
+              if (matcher.test(bindingName)) {
+                matches.push(binding);
+              }
+            } else {
+              if (bindingName.indexOf(expression) != -1) {
+                matches.push(binding);
+              }
+            }
+          });
+        }
+      });
+      return matches;
+    };
+
+    /**
+     * @name $$testability#findModels
+     *
+     * @description
+     * Returns an array of elements that are two-way found via ng-model to
+     * expressions matching the input.
+     *
+     * @param {Element} element The element root to search from.
+     * @param {string} expression The model expression to match.
+     * @param {boolean} opt_exactMatch If true, only returns exact matches
+     *     for the expression.
+     */
+    testability.findModels = function(element, expression, opt_exactMatch) {
+      var prefixes = ['ng-', 'data-ng-', 'ng\\:'];
+      for (var p = 0; p < prefixes.length; ++p) {
+        var attributeEquals = opt_exactMatch ? '=' : '*=';
+        var selector = '[' + prefixes[p] + 'model' + attributeEquals + '"' + expression + '"]';
+        var elements = element.querySelectorAll(selector);
+        if (elements.length) {
+          return elements;
+        }
+      }
+    };
+
+    /**
+     * @name $$testability#getLocation
+     *
+     * @description
+     * Shortcut for getting the location in a browser agnostic way. Returns
+     *     the path, search, and hash. (e.g. /path?a=b#hash)
+     */
+    testability.getLocation = function() {
+      return $location.url();
+    };
+
+    /**
+     * @name $$testability#setLocation
+     *
+     * @description
+     * Shortcut for navigating to a location without doing a full page reload.
+     *
+     * @param {string} url The location url (path, search and hash,
+     *     e.g. /path?a=b#hash) to go to.
+     */
+    testability.setLocation = function(url) {
+      if (url !== $location.url()) {
+        $location.url(url);
+        $rootScope.$digest();
+      }
+    };
+
+    /**
+     * @name $$testability#whenStable
+     *
+     * @description
+     * Calls the callback when $timeout and $http requests are completed.
+     *
+     * @param {function} callback
+     */
+    testability.whenStable = function(callback) {
+      $browser.notifyWhenNoOutstandingRequests(callback);
+    };
+
+    return testability;
+  }];
+}
+
+function $TimeoutProvider() {
+  this.$get = ['$rootScope', '$browser', '$q', '$$q', '$exceptionHandler',
+       function($rootScope,   $browser,   $q,   $$q,   $exceptionHandler) {
+
+    var deferreds = {};
+
+
+     /**
+      * @ngdoc service
+      * @name $timeout
+      *
+      * @description
+      * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch
+      * block and delegates any exceptions to
+      * {@link ng.$exceptionHandler $exceptionHandler} service.
+      *
+      * The return value of calling `$timeout` is a promise, which will be resolved when
+      * the delay has passed and the timeout function, if provided, is executed.
+      *
+      * To cancel a timeout request, call `$timeout.cancel(promise)`.
+      *
+      * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to
+      * synchronously flush the queue of deferred functions.
+      *
+      * If you only want a promise that will be resolved after some specified delay
+      * then you can call `$timeout` without the `fn` function.
+      *
+      * @param {function()=} fn A function, whose execution should be delayed.
+      * @param {number=} [delay=0] Delay in milliseconds.
+      * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
+      *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.
+      * @param {...*=} Pass additional parameters to the executed function.
+      * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this
+      *   promise will be resolved with is the return value of the `fn` function.
+      *
+      */
+    function timeout(fn, delay, invokeApply) {
+      if (!isFunction(fn)) {
+        invokeApply = delay;
+        delay = fn;
+        fn = noop;
+      }
+
+      var args = sliceArgs(arguments, 3),
+          skipApply = (isDefined(invokeApply) && !invokeApply),
+          deferred = (skipApply ? $$q : $q).defer(),
+          promise = deferred.promise,
+          timeoutId;
+
+      timeoutId = $browser.defer(function() {
+        try {
+          deferred.resolve(fn.apply(null, args));
+        } catch (e) {
+          deferred.reject(e);
+          $exceptionHandler(e);
+        }
+        finally {
+          delete deferreds[promise.$$timeoutId];
+        }
+
+        if (!skipApply) $rootScope.$apply();
+      }, delay);
+
+      promise.$$timeoutId = timeoutId;
+      deferreds[timeoutId] = deferred;
+
+      return promise;
+    }
+
+
+     /**
+      * @ngdoc method
+      * @name $timeout#cancel
+      *
+      * @description
+      * Cancels a task associated with the `promise`. As a result of this, the promise will be
+      * resolved with a rejection.
+      *
+      * @param {Promise=} promise Promise returned by the `$timeout` function.
+      * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully
+      *   canceled.
+      */
+    timeout.cancel = function(promise) {
+      if (promise && promise.$$timeoutId in deferreds) {
+        deferreds[promise.$$timeoutId].reject('canceled');
+        delete deferreds[promise.$$timeoutId];
+        return $browser.defer.cancel(promise.$$timeoutId);
+      }
+      return false;
+    };
+
+    return timeout;
+  }];
+}
+
+// NOTE:  The usage of window and document instead of $window and $document here is
+// deliberate.  This service depends on the specific behavior of anchor nodes created by the
+// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and
+// cause us to break tests.  In addition, when the browser resolves a URL for XHR, it
+// doesn't know about mocked locations and resolves URLs to the real document - which is
+// exactly the behavior needed here.  There is little value is mocking these out for this
+// service.
+var urlParsingNode = document.createElement("a");
+var originUrl = urlResolve(window.location.href);
+
+
+/**
+ *
+ * Implementation Notes for non-IE browsers
+ * ----------------------------------------
+ * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM,
+ * results both in the normalizing and parsing of the URL.  Normalizing means that a relative
+ * URL will be resolved into an absolute URL in the context of the application document.
+ * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related
+ * properties are all populated to reflect the normalized URL.  This approach has wide
+ * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc.  See
+ * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html
+ *
+ * Implementation Notes for IE
+ * ---------------------------
+ * IE <= 10 normalizes the URL when assigned to the anchor node similar to the other
+ * browsers.  However, the parsed components will not be set if the URL assigned did not specify
+ * them.  (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.)  We
+ * work around that by performing the parsing in a 2nd step by taking a previously normalized
+ * URL (e.g. by assigning to a.href) and assigning it a.href again.  This correctly populates the
+ * properties such as protocol, hostname, port, etc.
+ *
+ * References:
+ *   http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement
+ *   http://www.aptana.com/reference/html/api/HTMLAnchorElement.html
+ *   http://url.spec.whatwg.org/#urlutils
+ *   https://github.com/angular/angular.js/pull/2902
+ *   http://james.padolsey.com/javascript/parsing-urls-with-the-dom/
+ *
+ * @kind function
+ * @param {string} url The URL to be parsed.
+ * @description Normalizes and parses a URL.
+ * @returns {object} Returns the normalized URL as a dictionary.
+ *
+ *   | member name   | Description    |
+ *   |---------------|----------------|
+ *   | href          | A normalized version of the provided URL if it was not an absolute URL |
+ *   | protocol      | The protocol including the trailing colon                              |
+ *   | host          | The host and port (if the port is non-default) of the normalizedUrl    |
+ *   | search        | The search params, minus the question mark                             |
+ *   | hash          | The hash string, minus the hash symbol
+ *   | hostname      | The hostname
+ *   | port          | The port, without ":"
+ *   | pathname      | The pathname, beginning with "/"
+ *
+ */
+function urlResolve(url) {
+  var href = url;
+
+  if (msie) {
+    // Normalize before parse.  Refer Implementation Notes on why this is
+    // done in two steps on IE.
+    urlParsingNode.setAttribute("href", href);
+    href = urlParsingNode.href;
+  }
+
+  urlParsingNode.setAttribute('href', href);
+
+  // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
+  return {
+    href: urlParsingNode.href,
+    protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
+    host: urlParsingNode.host,
+    search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
+    hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
+    hostname: urlParsingNode.hostname,
+    port: urlParsingNode.port,
+    pathname: (urlParsingNode.pathname.charAt(0) === '/')
+      ? urlParsingNode.pathname
+      : '/' + urlParsingNode.pathname
+  };
+}
+
+/**
+ * Parse a request URL and determine whether this is a same-origin request as the application document.
+ *
+ * @param {string|object} requestUrl The url of the request as a string that will be resolved
+ * or a parsed URL object.
+ * @returns {boolean} Whether the request is for the same origin as the application document.
+ */
+function urlIsSameOrigin(requestUrl) {
+  var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;
+  return (parsed.protocol === originUrl.protocol &&
+          parsed.host === originUrl.host);
+}
+
+/**
+ * @ngdoc service
+ * @name $window
+ *
+ * @description
+ * A reference to the browser's `window` object. While `window`
+ * is globally available in JavaScript, it causes testability problems, because
+ * it is a global variable. In angular we always refer to it through the
+ * `$window` service, so it may be overridden, removed or mocked for testing.
+ *
+ * Expressions, like the one defined for the `ngClick` directive in the example
+ * below, are evaluated with respect to the current scope.  Therefore, there is
+ * no risk of inadvertently coding in a dependency on a global value in such an
+ * expression.
+ *
+ * @example
+   <example module="windowExample">
+     <file name="index.html">
+       <script>
+         angular.module('windowExample', [])
+           .controller('ExampleController', ['$scope', '$window', function($scope, $window) {
+             $scope.greeting = 'Hello, World!';
+             $scope.doGreeting = function(greeting) {
+               $window.alert(greeting);
+             };
+           }]);
+       </script>
+       <div ng-controller="ExampleController">
+         <input type="text" ng-model="greeting" aria-label="greeting" />
+         <button ng-click="doGreeting(greeting)">ALERT</button>
+       </div>
+     </file>
+     <file name="protractor.js" type="protractor">
+      it('should display the greeting in the input box', function() {
+       element(by.model('greeting')).sendKeys('Hello, E2E Tests');
+       // If we click the button it will block the test runner
+       // element(':button').click();
+      });
+     </file>
+   </example>
+ */
+function $WindowProvider() {
+  this.$get = valueFn(window);
+}
+
+/**
+ * @name $$cookieReader
+ * @requires $document
+ *
+ * @description
+ * This is a private service for reading cookies used by $http and ngCookies
+ *
+ * @return {Object} a key/value map of the current cookies
+ */
+function $$CookieReader($document) {
+  var rawDocument = $document[0] || {};
+  var lastCookies = {};
+  var lastCookieString = '';
+
+  function safeDecodeURIComponent(str) {
+    try {
+      return decodeURIComponent(str);
+    } catch (e) {
+      return str;
+    }
+  }
+
+  return function() {
+    var cookieArray, cookie, i, index, name;
+    var currentCookieString = rawDocument.cookie || '';
+
+    if (currentCookieString !== lastCookieString) {
+      lastCookieString = currentCookieString;
+      cookieArray = lastCookieString.split('; ');
+      lastCookies = {};
+
+      for (i = 0; i < cookieArray.length; i++) {
+        cookie = cookieArray[i];
+        index = cookie.indexOf('=');
+        if (index > 0) { //ignore nameless cookies
+          name = safeDecodeURIComponent(cookie.substring(0, index));
+          // the first value that is seen for a cookie is the most
+          // specific one.  values for the same cookie name that
+          // follow are for less specific paths.
+          if (isUndefined(lastCookies[name])) {
+            lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1));
+          }
+        }
+      }
+    }
+    return lastCookies;
+  };
+}
+
+$$CookieReader.$inject = ['$document'];
+
+function $$CookieReaderProvider() {
+  this.$get = $$CookieReader;
+}
+
+/* global currencyFilter: true,
+ dateFilter: true,
+ filterFilter: true,
+ jsonFilter: true,
+ limitToFilter: true,
+ lowercaseFilter: true,
+ numberFilter: true,
+ orderByFilter: true,
+ uppercaseFilter: true,
+ */
+
+/**
+ * @ngdoc provider
+ * @name $filterProvider
+ * @description
+ *
+ * Filters are just functions which transform input to an output. However filters need to be
+ * Dependency Injected. To achieve this a filter definition consists of a factory function which is
+ * annotated with dependencies and is responsible for creating a filter function.
+ *
+ * <div class="alert alert-warning">
+ * **Note:** Filter names must be valid angular {@link expression} identifiers, such as `uppercase` or `orderBy`.
+ * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace
+ * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores
+ * (`myapp_subsection_filterx`).
+ * </div>
+ *
+ * ```js
+ *   // Filter registration
+ *   function MyModule($provide, $filterProvider) {
+ *     // create a service to demonstrate injection (not always needed)
+ *     $provide.value('greet', function(name){
+ *       return 'Hello ' + name + '!';
+ *     });
+ *
+ *     // register a filter factory which uses the
+ *     // greet service to demonstrate DI.
+ *     $filterProvider.register('greet', function(greet){
+ *       // return the filter function which uses the greet service
+ *       // to generate salutation
+ *       return function(text) {
+ *         // filters need to be forgiving so check input validity
+ *         return text && greet(text) || text;
+ *       };
+ *     });
+ *   }
+ * ```
+ *
+ * The filter function is registered with the `$injector` under the filter name suffix with
+ * `Filter`.
+ *
+ * ```js
+ *   it('should be the same instance', inject(
+ *     function($filterProvider) {
+ *       $filterProvider.register('reverse', function(){
+ *         return ...;
+ *       });
+ *     },
+ *     function($filter, reverseFilter) {
+ *       expect($filter('reverse')).toBe(reverseFilter);
+ *     });
+ * ```
+ *
+ *
+ * For more information about how angular filters work, and how to create your own filters, see
+ * {@link guide/filter Filters} in the Angular Developer Guide.
+ */
+
+/**
+ * @ngdoc service
+ * @name $filter
+ * @kind function
+ * @description
+ * Filters are used for formatting data displayed to the user.
+ *
+ * The general syntax in templates is as follows:
+ *
+ *         {{ expression [| filter_name[:parameter_value] ... ] }}
+ *
+ * @param {String} name Name of the filter function to retrieve
+ * @return {Function} the filter function
+ * @example
+   <example name="$filter" module="filterExample">
+     <file name="index.html">
+       <div ng-controller="MainCtrl">
+        <h3>{{ originalText }}</h3>
+        <h3>{{ filteredText }}</h3>
+       </div>
+     </file>
+
+     <file name="script.js">
+      angular.module('filterExample', [])
+      .controller('MainCtrl', function($scope, $filter) {
+        $scope.originalText = 'hello';
+        $scope.filteredText = $filter('uppercase')($scope.originalText);
+      });
+     </file>
+   </example>
+  */
+$FilterProvider.$inject = ['$provide'];
+function $FilterProvider($provide) {
+  var suffix = 'Filter';
+
+  /**
+   * @ngdoc method
+   * @name $filterProvider#register
+   * @param {string|Object} name Name of the filter function, or an object map of filters where
+   *    the keys are the filter names and the values are the filter factories.
+   *
+   *    <div class="alert alert-warning">
+   *    **Note:** Filter names must be valid angular {@link expression} identifiers, such as `uppercase` or `orderBy`.
+   *    Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace
+   *    your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores
+   *    (`myapp_subsection_filterx`).
+   *    </div>
+    * @param {Function} factory If the first argument was a string, a factory function for the filter to be registered.
+   * @returns {Object} Registered filter instance, or if a map of filters was provided then a map
+   *    of the registered filter instances.
+   */
+  function register(name, factory) {
+    if (isObject(name)) {
+      var filters = {};
+      forEach(name, function(filter, key) {
+        filters[key] = register(key, filter);
+      });
+      return filters;
+    } else {
+      return $provide.factory(name + suffix, factory);
+    }
+  }
+  this.register = register;
+
+  this.$get = ['$injector', function($injector) {
+    return function(name) {
+      return $injector.get(name + suffix);
+    };
+  }];
+
+  ////////////////////////////////////////
+
+  /* global
+    currencyFilter: false,
+    dateFilter: false,
+    filterFilter: false,
+    jsonFilter: false,
+    limitToFilter: false,
+    lowercaseFilter: false,
+    numberFilter: false,
+    orderByFilter: false,
+    uppercaseFilter: false,
+  */
+
+  register('currency', currencyFilter);
+  register('date', dateFilter);
+  register('filter', filterFilter);
+  register('json', jsonFilter);
+  register('limitTo', limitToFilter);
+  register('lowercase', lowercaseFilter);
+  register('number', numberFilter);
+  register('orderBy', orderByFilter);
+  register('uppercase', uppercaseFilter);
+}
+
+/**
+ * @ngdoc filter
+ * @name filter
+ * @kind function
+ *
+ * @description
+ * Selects a subset of items from `array` and returns it as a new array.
+ *
+ * @param {Array} array The source array.
+ * @param {string|Object|function()} expression The predicate to be used for selecting items from
+ *   `array`.
+ *
+ *   Can be one of:
+ *
+ *   - `string`: The string is used for matching against the contents of the `array`. All strings or
+ *     objects with string properties in `array` that match this string will be returned. This also
+ *     applies to nested object properties.
+ *     The predicate can be negated by prefixing the string with `!`.
+ *
+ *   - `Object`: A pattern object can be used to filter specific properties on objects contained
+ *     by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items
+ *     which have property `name` containing "M" and property `phone` containing "1". A special
+ *     property name `$` can be used (as in `{$:"text"}`) to accept a match against any
+ *     property of the object or its nested object properties. That's equivalent to the simple
+ *     substring match with a `string` as described above. The predicate can be negated by prefixing
+ *     the string with `!`.
+ *     For example `{name: "!M"}` predicate will return an array of items which have property `name`
+ *     not containing "M".
+ *
+ *     Note that a named property will match properties on the same level only, while the special
+ *     `$` property will match properties on the same level or deeper. E.g. an array item like
+ *     `{name: {first: 'John', last: 'Doe'}}` will **not** be matched by `{name: 'John'}`, but
+ *     **will** be matched by `{$: 'John'}`.
+ *
+ *   - `function(value, index, array)`: A predicate function can be used to write arbitrary filters.
+ *     The function is called for each element of the array, with the element, its index, and
+ *     the entire array itself as arguments.
+ *
+ *     The final result is an array of those elements that the predicate returned true for.
+ *
+ * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in
+ *     determining if the expected value (from the filter expression) and actual value (from
+ *     the object in the array) should be considered a match.
+ *
+ *   Can be one of:
+ *
+ *   - `function(actual, expected)`:
+ *     The function will be given the object value and the predicate value to compare and
+ *     should return true if both values should be considered equal.
+ *
+ *   - `true`: A shorthand for `function(actual, expected) { return angular.equals(actual, expected)}`.
+ *     This is essentially strict comparison of expected and actual.
+ *
+ *   - `false|undefined`: A short hand for a function which will look for a substring match in case
+ *     insensitive way.
+ *
+ *     Primitive values are converted to strings. Objects are not compared against primitives,
+ *     unless they have a custom `toString` method (e.g. `Date` objects).
+ *
+ * @example
+   <example>
+     <file name="index.html">
+       <div ng-init="friends = [{name:'John', phone:'555-1276'},
+                                {name:'Mary', phone:'800-BIG-MARY'},
+                                {name:'Mike', phone:'555-4321'},
+                                {name:'Adam', phone:'555-5678'},
+                                {name:'Julie', phone:'555-8765'},
+                                {name:'Juliette', phone:'555-5678'}]"></div>
+
+       <label>Search: <input ng-model="searchText"></label>
+       <table id="searchTextResults">
+         <tr><th>Name</th><th>Phone</th></tr>
+         <tr ng-repeat="friend in friends | filter:searchText">
+           <td>{{friend.name}}</td>
+           <td>{{friend.phone}}</td>
+         </tr>
+       </table>
+       <hr>
+       <label>Any: <input ng-model="search.$"></label> <br>
+       <label>Name only <input ng-model="search.name"></label><br>
+       <label>Phone only <input ng-model="search.phone"></label><br>
+       <label>Equality <input type="checkbox" ng-model="strict"></label><br>
+       <table id="searchObjResults">
+         <tr><th>Name</th><th>Phone</th></tr>
+         <tr ng-repeat="friendObj in friends | filter:search:strict">
+           <td>{{friendObj.name}}</td>
+           <td>{{friendObj.phone}}</td>
+         </tr>
+       </table>
+     </file>
+     <file name="protractor.js" type="protractor">
+       var expectFriendNames = function(expectedNames, key) {
+         element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) {
+           arr.forEach(function(wd, i) {
+             expect(wd.getText()).toMatch(expectedNames[i]);
+           });
+         });
+       };
+
+       it('should search across all fields when filtering with a string', function() {
+         var searchText = element(by.model('searchText'));
+         searchText.clear();
+         searchText.sendKeys('m');
+         expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend');
+
+         searchText.clear();
+         searchText.sendKeys('76');
+         expectFriendNames(['John', 'Julie'], 'friend');
+       });
+
+       it('should search in specific fields when filtering with a predicate object', function() {
+         var searchAny = element(by.model('search.$'));
+         searchAny.clear();
+         searchAny.sendKeys('i');
+         expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj');
+       });
+       it('should use a equal comparison when comparator is true', function() {
+         var searchName = element(by.model('search.name'));
+         var strict = element(by.model('strict'));
+         searchName.clear();
+         searchName.sendKeys('Julie');
+         strict.click();
+         expectFriendNames(['Julie'], 'friendObj');
+       });
+     </file>
+   </example>
+ */
+function filterFilter() {
+  return function(array, expression, comparator) {
+    if (!isArrayLike(array)) {
+      if (array == null) {
+        return array;
+      } else {
+        throw minErr('filter')('notarray', 'Expected array but received: {0}', array);
+      }
+    }
+
+    var expressionType = getTypeForFilter(expression);
+    var predicateFn;
+    var matchAgainstAnyProp;
+
+    switch (expressionType) {
+      case 'function':
+        predicateFn = expression;
+        break;
+      case 'boolean':
+      case 'null':
+      case 'number':
+      case 'string':
+        matchAgainstAnyProp = true;
+        //jshint -W086
+      case 'object':
+        //jshint +W086
+        predicateFn = createPredicateFn(expression, comparator, matchAgainstAnyProp);
+        break;
+      default:
+        return array;
+    }
+
+    return Array.prototype.filter.call(array, predicateFn);
+  };
+}
+
+// Helper functions for `filterFilter`
+function createPredicateFn(expression, comparator, matchAgainstAnyProp) {
+  var shouldMatchPrimitives = isObject(expression) && ('$' in expression);
+  var predicateFn;
+
+  if (comparator === true) {
+    comparator = equals;
+  } else if (!isFunction(comparator)) {
+    comparator = function(actual, expected) {
+      if (isUndefined(actual)) {
+        // No substring matching against `undefined`
+        return false;
+      }
+      if ((actual === null) || (expected === null)) {
+        // No substring matching against `null`; only match against `null`
+        return actual === expected;
+      }
+      if (isObject(expected) || (isObject(actual) && !hasCustomToString(actual))) {
+        // Should not compare primitives against objects, unless they have custom `toString` method
+        return false;
+      }
+
+      actual = lowercase('' + actual);
+      expected = lowercase('' + expected);
+      return actual.indexOf(expected) !== -1;
+    };
+  }
+
+  predicateFn = function(item) {
+    if (shouldMatchPrimitives && !isObject(item)) {
+      return deepCompare(item, expression.$, comparator, false);
+    }
+    return deepCompare(item, expression, comparator, matchAgainstAnyProp);
+  };
+
+  return predicateFn;
+}
+
+function deepCompare(actual, expected, comparator, matchAgainstAnyProp, dontMatchWholeObject) {
+  var actualType = getTypeForFilter(actual);
+  var expectedType = getTypeForFilter(expected);
+
+  if ((expectedType === 'string') && (expected.charAt(0) === '!')) {
+    return !deepCompare(actual, expected.substring(1), comparator, matchAgainstAnyProp);
+  } else if (isArray(actual)) {
+    // In case `actual` is an array, consider it a match
+    // if ANY of it's items matches `expected`
+    return actual.some(function(item) {
+      return deepCompare(item, expected, comparator, matchAgainstAnyProp);
+    });
+  }
+
+  switch (actualType) {
+    case 'object':
+      var key;
+      if (matchAgainstAnyProp) {
+        for (key in actual) {
+          if ((key.charAt(0) !== '$') && deepCompare(actual[key], expected, comparator, true)) {
+            return true;
+          }
+        }
+        return dontMatchWholeObject ? false : deepCompare(actual, expected, comparator, false);
+      } else if (expectedType === 'object') {
+        for (key in expected) {
+          var expectedVal = expected[key];
+          if (isFunction(expectedVal) || isUndefined(expectedVal)) {
+            continue;
+          }
+
+          var matchAnyProperty = key === '$';
+          var actualVal = matchAnyProperty ? actual : actual[key];
+          if (!deepCompare(actualVal, expectedVal, comparator, matchAnyProperty, matchAnyProperty)) {
+            return false;
+          }
+        }
+        return true;
+      } else {
+        return comparator(actual, expected);
+      }
+      break;
+    case 'function':
+      return false;
+    default:
+      return comparator(actual, expected);
+  }
+}
+
+// Used for easily differentiating between `null` and actual `object`
+function getTypeForFilter(val) {
+  return (val === null) ? 'null' : typeof val;
+}
+
+/**
+ * @ngdoc filter
+ * @name currency
+ * @kind function
+ *
+ * @description
+ * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default
+ * symbol for current locale is used.
+ *
+ * @param {number} amount Input to filter.
+ * @param {string=} symbol Currency symbol or identifier to be displayed.
+ * @param {number=} fractionSize Number of decimal places to round the amount to, defaults to default max fraction size for current locale
+ * @returns {string} Formatted number.
+ *
+ *
+ * @example
+   <example module="currencyExample">
+     <file name="index.html">
+       <script>
+         angular.module('currencyExample', [])
+           .controller('ExampleController', ['$scope', function($scope) {
+             $scope.amount = 1234.56;
+           }]);
+       </script>
+       <div ng-controller="ExampleController">
+         <input type="number" ng-model="amount" aria-label="amount"> <br>
+         default currency symbol ($): <span id="currency-default">{{amount | currency}}</span><br>
+         custom currency identifier (USD$): <span id="currency-custom">{{amount | currency:"USD$"}}</span>
+         no fractions (0): <span id="currency-no-fractions">{{amount | currency:"USD$":0}}</span>
+       </div>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should init with 1234.56', function() {
+         expect(element(by.id('currency-default')).getText()).toBe('$1,234.56');
+         expect(element(by.id('currency-custom')).getText()).toBe('USD$1,234.56');
+         expect(element(by.id('currency-no-fractions')).getText()).toBe('USD$1,235');
+       });
+       it('should update', function() {
+         if (browser.params.browser == 'safari') {
+           // Safari does not understand the minus key. See
+           // https://github.com/angular/protractor/issues/481
+           return;
+         }
+         element(by.model('amount')).clear();
+         element(by.model('amount')).sendKeys('-1234');
+         expect(element(by.id('currency-default')).getText()).toBe('-$1,234.00');
+         expect(element(by.id('currency-custom')).getText()).toBe('-USD$1,234.00');
+         expect(element(by.id('currency-no-fractions')).getText()).toBe('-USD$1,234');
+       });
+     </file>
+   </example>
+ */
+currencyFilter.$inject = ['$locale'];
+function currencyFilter($locale) {
+  var formats = $locale.NUMBER_FORMATS;
+  return function(amount, currencySymbol, fractionSize) {
+    if (isUndefined(currencySymbol)) {
+      currencySymbol = formats.CURRENCY_SYM;
+    }
+
+    if (isUndefined(fractionSize)) {
+      fractionSize = formats.PATTERNS[1].maxFrac;
+    }
+
+    // if null or undefined pass it through
+    return (amount == null)
+        ? amount
+        : formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, fractionSize).
+            replace(/\u00A4/g, currencySymbol);
+  };
+}
+
+/**
+ * @ngdoc filter
+ * @name number
+ * @kind function
+ *
+ * @description
+ * Formats a number as text.
+ *
+ * If the input is null or undefined, it will just be returned.
+ * If the input is infinite (Infinity/-Infinity) the Infinity symbol '∞' is returned.
+ * If the input is not a number an empty string is returned.
+ *
+ *
+ * @param {number|string} number Number to format.
+ * @param {(number|string)=} fractionSize Number of decimal places to round the number to.
+ * If this is not provided then the fraction size is computed from the current locale's number
+ * formatting pattern. In the case of the default locale, it will be 3.
+ * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit.
+ *
+ * @example
+   <example module="numberFilterExample">
+     <file name="index.html">
+       <script>
+         angular.module('numberFilterExample', [])
+           .controller('ExampleController', ['$scope', function($scope) {
+             $scope.val = 1234.56789;
+           }]);
+       </script>
+       <div ng-controller="ExampleController">
+         <label>Enter number: <input ng-model='val'></label><br>
+         Default formatting: <span id='number-default'>{{val | number}}</span><br>
+         No fractions: <span>{{val | number:0}}</span><br>
+         Negative number: <span>{{-val | number:4}}</span>
+       </div>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should format numbers', function() {
+         expect(element(by.id('number-default')).getText()).toBe('1,234.568');
+         expect(element(by.binding('val | number:0')).getText()).toBe('1,235');
+         expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679');
+       });
+
+       it('should update', function() {
+         element(by.model('val')).clear();
+         element(by.model('val')).sendKeys('3374.333');
+         expect(element(by.id('number-default')).getText()).toBe('3,374.333');
+         expect(element(by.binding('val | number:0')).getText()).toBe('3,374');
+         expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330');
+      });
+     </file>
+   </example>
+ */
+
+
+numberFilter.$inject = ['$locale'];
+function numberFilter($locale) {
+  var formats = $locale.NUMBER_FORMATS;
+  return function(number, fractionSize) {
+
+    // if null or undefined pass it through
+    return (number == null)
+        ? number
+        : formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,
+                       fractionSize);
+  };
+}
+
+var DECIMAL_SEP = '.';
+function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
+  if (isObject(number)) return '';
+
+  var isNegative = number < 0;
+  number = Math.abs(number);
+
+  var isInfinity = number === Infinity;
+  if (!isInfinity && !isFinite(number)) return '';
+
+  var numStr = number + '',
+      formatedText = '',
+      hasExponent = false,
+      parts = [];
+
+  if (isInfinity) formatedText = '\u221e';
+
+  if (!isInfinity && numStr.indexOf('e') !== -1) {
+    var match = numStr.match(/([\d\.]+)e(-?)(\d+)/);
+    if (match && match[2] == '-' && match[3] > fractionSize + 1) {
+      number = 0;
+    } else {
+      formatedText = numStr;
+      hasExponent = true;
+    }
+  }
+
+  if (!isInfinity && !hasExponent) {
+    var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length;
+
+    // determine fractionSize if it is not specified
+    if (isUndefined(fractionSize)) {
+      fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac);
+    }
+
+    // safely round numbers in JS without hitting imprecisions of floating-point arithmetics
+    // inspired by:
+    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round
+    number = +(Math.round(+(number.toString() + 'e' + fractionSize)).toString() + 'e' + -fractionSize);
+
+    var fraction = ('' + number).split(DECIMAL_SEP);
+    var whole = fraction[0];
+    fraction = fraction[1] || '';
+
+    var i, pos = 0,
+        lgroup = pattern.lgSize,
+        group = pattern.gSize;
+
+    if (whole.length >= (lgroup + group)) {
+      pos = whole.length - lgroup;
+      for (i = 0; i < pos; i++) {
+        if ((pos - i) % group === 0 && i !== 0) {
+          formatedText += groupSep;
+        }
+        formatedText += whole.charAt(i);
+      }
+    }
+
+    for (i = pos; i < whole.length; i++) {
+      if ((whole.length - i) % lgroup === 0 && i !== 0) {
+        formatedText += groupSep;
+      }
+      formatedText += whole.charAt(i);
+    }
+
+    // format fraction part.
+    while (fraction.length < fractionSize) {
+      fraction += '0';
+    }
+
+    if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize);
+  } else {
+    if (fractionSize > 0 && number < 1) {
+      formatedText = number.toFixed(fractionSize);
+      number = parseFloat(formatedText);
+      formatedText = formatedText.replace(DECIMAL_SEP, decimalSep);
+    }
+  }
+
+  if (number === 0) {
+    isNegative = false;
+  }
+
+  parts.push(isNegative ? pattern.negPre : pattern.posPre,
+             formatedText,
+             isNegative ? pattern.negSuf : pattern.posSuf);
+  return parts.join('');
+}
+
+function padNumber(num, digits, trim) {
+  var neg = '';
+  if (num < 0) {
+    neg =  '-';
+    num = -num;
+  }
+  num = '' + num;
+  while (num.length < digits) num = '0' + num;
+  if (trim) {
+    num = num.substr(num.length - digits);
+  }
+  return neg + num;
+}
+
+
+function dateGetter(name, size, offset, trim) {
+  offset = offset || 0;
+  return function(date) {
+    var value = date['get' + name]();
+    if (offset > 0 || value > -offset) {
+      value += offset;
+    }
+    if (value === 0 && offset == -12) value = 12;
+    return padNumber(value, size, trim);
+  };
+}
+
+function dateStrGetter(name, shortForm) {
+  return function(date, formats) {
+    var value = date['get' + name]();
+    var get = uppercase(shortForm ? ('SHORT' + name) : name);
+
+    return formats[get][value];
+  };
+}
+
+function timeZoneGetter(date, formats, offset) {
+  var zone = -1 * offset;
+  var paddedZone = (zone >= 0) ? "+" : "";
+
+  paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) +
+                padNumber(Math.abs(zone % 60), 2);
+
+  return paddedZone;
+}
+
+function getFirstThursdayOfYear(year) {
+    // 0 = index of January
+    var dayOfWeekOnFirst = (new Date(year, 0, 1)).getDay();
+    // 4 = index of Thursday (+1 to account for 1st = 5)
+    // 11 = index of *next* Thursday (+1 account for 1st = 12)
+    return new Date(year, 0, ((dayOfWeekOnFirst <= 4) ? 5 : 12) - dayOfWeekOnFirst);
+}
+
+function getThursdayThisWeek(datetime) {
+    return new Date(datetime.getFullYear(), datetime.getMonth(),
+      // 4 = index of Thursday
+      datetime.getDate() + (4 - datetime.getDay()));
+}
+
+function weekGetter(size) {
+   return function(date) {
+      var firstThurs = getFirstThursdayOfYear(date.getFullYear()),
+         thisThurs = getThursdayThisWeek(date);
+
+      var diff = +thisThurs - +firstThurs,
+         result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week
+
+      return padNumber(result, size);
+   };
+}
+
+function ampmGetter(date, formats) {
+  return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1];
+}
+
+function eraGetter(date, formats) {
+  return date.getFullYear() <= 0 ? formats.ERAS[0] : formats.ERAS[1];
+}
+
+function longEraGetter(date, formats) {
+  return date.getFullYear() <= 0 ? formats.ERANAMES[0] : formats.ERANAMES[1];
+}
+
+var DATE_FORMATS = {
+  yyyy: dateGetter('FullYear', 4),
+    yy: dateGetter('FullYear', 2, 0, true),
+     y: dateGetter('FullYear', 1),
+  MMMM: dateStrGetter('Month'),
+   MMM: dateStrGetter('Month', true),
+    MM: dateGetter('Month', 2, 1),
+     M: dateGetter('Month', 1, 1),
+    dd: dateGetter('Date', 2),
+     d: dateGetter('Date', 1),
+    HH: dateGetter('Hours', 2),
+     H: dateGetter('Hours', 1),
+    hh: dateGetter('Hours', 2, -12),
+     h: dateGetter('Hours', 1, -12),
+    mm: dateGetter('Minutes', 2),
+     m: dateGetter('Minutes', 1),
+    ss: dateGetter('Seconds', 2),
+     s: dateGetter('Seconds', 1),
+     // while ISO 8601 requires fractions to be prefixed with `.` or `,`
+     // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions
+   sss: dateGetter('Milliseconds', 3),
+  EEEE: dateStrGetter('Day'),
+   EEE: dateStrGetter('Day', true),
+     a: ampmGetter,
+     Z: timeZoneGetter,
+    ww: weekGetter(2),
+     w: weekGetter(1),
+     G: eraGetter,
+     GG: eraGetter,
+     GGG: eraGetter,
+     GGGG: longEraGetter
+};
+
+var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,
+    NUMBER_STRING = /^\-?\d+$/;
+
+/**
+ * @ngdoc filter
+ * @name date
+ * @kind function
+ *
+ * @description
+ *   Formats `date` to a string based on the requested `format`.
+ *
+ *   `format` string can be composed of the following elements:
+ *
+ *   * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)
+ *   * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)
+ *   * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)
+ *   * `'MMMM'`: Month in year (January-December)
+ *   * `'MMM'`: Month in year (Jan-Dec)
+ *   * `'MM'`: Month in year, padded (01-12)
+ *   * `'M'`: Month in year (1-12)
+ *   * `'dd'`: Day in month, padded (01-31)
+ *   * `'d'`: Day in month (1-31)
+ *   * `'EEEE'`: Day in Week,(Sunday-Saturday)
+ *   * `'EEE'`: Day in Week, (Sun-Sat)
+ *   * `'HH'`: Hour in day, padded (00-23)
+ *   * `'H'`: Hour in day (0-23)
+ *   * `'hh'`: Hour in AM/PM, padded (01-12)
+ *   * `'h'`: Hour in AM/PM, (1-12)
+ *   * `'mm'`: Minute in hour, padded (00-59)
+ *   * `'m'`: Minute in hour (0-59)
+ *   * `'ss'`: Second in minute, padded (00-59)
+ *   * `'s'`: Second in minute (0-59)
+ *   * `'sss'`: Millisecond in second, padded (000-999)
+ *   * `'a'`: AM/PM marker
+ *   * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)
+ *   * `'ww'`: Week of year, padded (00-53). Week 01 is the week with the first Thursday of the year
+ *   * `'w'`: Week of year (0-53). Week 1 is the week with the first Thursday of the year
+ *   * `'G'`, `'GG'`, `'GGG'`: The abbreviated form of the era string (e.g. 'AD')
+ *   * `'GGGG'`: The long form of the era string (e.g. 'Anno Domini')
+ *
+ *   `format` string can also be one of the following predefined
+ *   {@link guide/i18n localizable formats}:
+ *
+ *   * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale
+ *     (e.g. Sep 3, 2010 12:05:08 PM)
+ *   * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US  locale (e.g. 9/3/10 12:05 PM)
+ *   * `'fullDate'`: equivalent to `'EEEE, MMMM d, y'` for en_US  locale
+ *     (e.g. Friday, September 3, 2010)
+ *   * `'longDate'`: equivalent to `'MMMM d, y'` for en_US  locale (e.g. September 3, 2010)
+ *   * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US  locale (e.g. Sep 3, 2010)
+ *   * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10)
+ *   * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 PM)
+ *   * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 PM)
+ *
+ *   `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g.
+ *   `"h 'in the morning'"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence
+ *   (e.g. `"h 'o''clock'"`).
+ *
+ * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or
+ *    number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its
+ *    shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is
+ *    specified in the string input, the time is considered to be in the local timezone.
+ * @param {string=} format Formatting rules (see Description). If not specified,
+ *    `mediumDate` is used.
+ * @param {string=} timezone Timezone to be used for formatting. It understands UTC/GMT and the
+ *    continental US time zone abbreviations, but for general use, use a time zone offset, for
+ *    example, `'+0430'` (4 hours, 30 minutes east of the Greenwich meridian)
+ *    If not specified, the timezone of the browser will be used.
+ * @returns {string} Formatted string or the input if input is not recognized as date/millis.
+ *
+ * @example
+   <example>
+     <file name="index.html">
+       <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>:
+           <span>{{1288323623006 | date:'medium'}}</span><br>
+       <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>:
+          <span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br>
+       <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>:
+          <span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br>
+       <span ng-non-bindable>{{1288323623006 | date:"MM/dd/yyyy 'at' h:mma"}}</span>:
+          <span>{{'1288323623006' | date:"MM/dd/yyyy 'at' h:mma"}}</span><br>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should format date', function() {
+         expect(element(by.binding("1288323623006 | date:'medium'")).getText()).
+            toMatch(/Oct 2\d, 2010 \d{1,2}:\d{2}:\d{2} (AM|PM)/);
+         expect(element(by.binding("1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'")).getText()).
+            toMatch(/2010\-10\-2\d \d{2}:\d{2}:\d{2} (\-|\+)?\d{4}/);
+         expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()).
+            toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/);
+         expect(element(by.binding("'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"")).getText()).
+            toMatch(/10\/2\d\/2010 at \d{1,2}:\d{2}(AM|PM)/);
+       });
+     </file>
+   </example>
+ */
+dateFilter.$inject = ['$locale'];
+function dateFilter($locale) {
+
+
+  var R_ISO8601_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
+                     // 1        2       3         4          5          6          7          8  9     10      11
+  function jsonStringToDate(string) {
+    var match;
+    if (match = string.match(R_ISO8601_STR)) {
+      var date = new Date(0),
+          tzHour = 0,
+          tzMin  = 0,
+          dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,
+          timeSetter = match[8] ? date.setUTCHours : date.setHours;
+
+      if (match[9]) {
+        tzHour = toInt(match[9] + match[10]);
+        tzMin = toInt(match[9] + match[11]);
+      }
+      dateSetter.call(date, toInt(match[1]), toInt(match[2]) - 1, toInt(match[3]));
+      var h = toInt(match[4] || 0) - tzHour;
+      var m = toInt(match[5] || 0) - tzMin;
+      var s = toInt(match[6] || 0);
+      var ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000);
+      timeSetter.call(date, h, m, s, ms);
+      return date;
+    }
+    return string;
+  }
+
+
+  return function(date, format, timezone) {
+    var text = '',
+        parts = [],
+        fn, match;
+
+    format = format || 'mediumDate';
+    format = $locale.DATETIME_FORMATS[format] || format;
+    if (isString(date)) {
+      date = NUMBER_STRING.test(date) ? toInt(date) : jsonStringToDate(date);
+    }
+
+    if (isNumber(date)) {
+      date = new Date(date);
+    }
+
+    if (!isDate(date) || !isFinite(date.getTime())) {
+      return date;
+    }
+
+    while (format) {
+      match = DATE_FORMATS_SPLIT.exec(format);
+      if (match) {
+        parts = concat(parts, match, 1);
+        format = parts.pop();
+      } else {
+        parts.push(format);
+        format = null;
+      }
+    }
+
+    var dateTimezoneOffset = date.getTimezoneOffset();
+    if (timezone) {
+      dateTimezoneOffset = timezoneToOffset(timezone, date.getTimezoneOffset());
+      date = convertTimezoneToLocal(date, timezone, true);
+    }
+    forEach(parts, function(value) {
+      fn = DATE_FORMATS[value];
+      text += fn ? fn(date, $locale.DATETIME_FORMATS, dateTimezoneOffset)
+                 : value.replace(/(^'|'$)/g, '').replace(/''/g, "'");
+    });
+
+    return text;
+  };
+}
+
+
+/**
+ * @ngdoc filter
+ * @name json
+ * @kind function
+ *
+ * @description
+ *   Allows you to convert a JavaScript object into JSON string.
+ *
+ *   This filter is mostly useful for debugging. When using the double curly {{value}} notation
+ *   the binding is automatically converted to JSON.
+ *
+ * @param {*} object Any JavaScript object (including arrays and primitive types) to filter.
+ * @param {number=} spacing The number of spaces to use per indentation, defaults to 2.
+ * @returns {string} JSON string.
+ *
+ *
+ * @example
+   <example>
+     <file name="index.html">
+       <pre id="default-spacing">{{ {'name':'value'} | json }}</pre>
+       <pre id="custom-spacing">{{ {'name':'value'} | json:4 }}</pre>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should jsonify filtered objects', function() {
+         expect(element(by.id('default-spacing')).getText()).toMatch(/\{\n  "name": ?"value"\n}/);
+         expect(element(by.id('custom-spacing')).getText()).toMatch(/\{\n    "name": ?"value"\n}/);
+       });
+     </file>
+   </example>
+ *
+ */
+function jsonFilter() {
+  return function(object, spacing) {
+    if (isUndefined(spacing)) {
+        spacing = 2;
+    }
+    return toJson(object, spacing);
+  };
+}
+
+
+/**
+ * @ngdoc filter
+ * @name lowercase
+ * @kind function
+ * @description
+ * Converts string to lowercase.
+ * @see angular.lowercase
+ */
+var lowercaseFilter = valueFn(lowercase);
+
+
+/**
+ * @ngdoc filter
+ * @name uppercase
+ * @kind function
+ * @description
+ * Converts string to uppercase.
+ * @see angular.uppercase
+ */
+var uppercaseFilter = valueFn(uppercase);
+
+/**
+ * @ngdoc filter
+ * @name limitTo
+ * @kind function
+ *
+ * @description
+ * Creates a new array or string containing only a specified number of elements. The elements
+ * are taken from either the beginning or the end of the source array, string or number, as specified by
+ * the value and sign (positive or negative) of `limit`. If a number is used as input, it is
+ * converted to a string.
+ *
+ * @param {Array|string|number} input Source array, string or number to be limited.
+ * @param {string|number} limit The length of the returned array or string. If the `limit` number
+ *     is positive, `limit` number of items from the beginning of the source array/string are copied.
+ *     If the number is negative, `limit` number  of items from the end of the source array/string
+ *     are copied. The `limit` will be trimmed if it exceeds `array.length`. If `limit` is undefined,
+ *     the input will be returned unchanged.
+ * @param {(string|number)=} begin Index at which to begin limitation. As a negative index, `begin`
+ *     indicates an offset from the end of `input`. Defaults to `0`.
+ * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array
+ *     had less than `limit` elements.
+ *
+ * @example
+   <example module="limitToExample">
+     <file name="index.html">
+       <script>
+         angular.module('limitToExample', [])
+           .controller('ExampleController', ['$scope', function($scope) {
+             $scope.numbers = [1,2,3,4,5,6,7,8,9];
+             $scope.letters = "abcdefghi";
+             $scope.longNumber = 2345432342;
+             $scope.numLimit = 3;
+             $scope.letterLimit = 3;
+             $scope.longNumberLimit = 3;
+           }]);
+       </script>
+       <div ng-controller="ExampleController">
+         <label>
+            Limit {{numbers}} to:
+            <input type="number" step="1" ng-model="numLimit">
+         </label>
+         <p>Output numbers: {{ numbers | limitTo:numLimit }}</p>
+         <label>
+            Limit {{letters}} to:
+            <input type="number" step="1" ng-model="letterLimit">
+         </label>
+         <p>Output letters: {{ letters | limitTo:letterLimit }}</p>
+         <label>
+            Limit {{longNumber}} to:
+            <input type="number" step="1" ng-model="longNumberLimit">
+         </label>
+         <p>Output long number: {{ longNumber | limitTo:longNumberLimit }}</p>
+       </div>
+     </file>
+     <file name="protractor.js" type="protractor">
+       var numLimitInput = element(by.model('numLimit'));
+       var letterLimitInput = element(by.model('letterLimit'));
+       var longNumberLimitInput = element(by.model('longNumberLimit'));
+       var limitedNumbers = element(by.binding('numbers | limitTo:numLimit'));
+       var limitedLetters = element(by.binding('letters | limitTo:letterLimit'));
+       var limitedLongNumber = element(by.binding('longNumber | limitTo:longNumberLimit'));
+
+       it('should limit the number array to first three items', function() {
+         expect(numLimitInput.getAttribute('value')).toBe('3');
+         expect(letterLimitInput.getAttribute('value')).toBe('3');
+         expect(longNumberLimitInput.getAttribute('value')).toBe('3');
+         expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]');
+         expect(limitedLetters.getText()).toEqual('Output letters: abc');
+         expect(limitedLongNumber.getText()).toEqual('Output long number: 234');
+       });
+
+       // There is a bug in safari and protractor that doesn't like the minus key
+       // it('should update the output when -3 is entered', function() {
+       //   numLimitInput.clear();
+       //   numLimitInput.sendKeys('-3');
+       //   letterLimitInput.clear();
+       //   letterLimitInput.sendKeys('-3');
+       //   longNumberLimitInput.clear();
+       //   longNumberLimitInput.sendKeys('-3');
+       //   expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]');
+       //   expect(limitedLetters.getText()).toEqual('Output letters: ghi');
+       //   expect(limitedLongNumber.getText()).toEqual('Output long number: 342');
+       // });
+
+       it('should not exceed the maximum size of input array', function() {
+         numLimitInput.clear();
+         numLimitInput.sendKeys('100');
+         letterLimitInput.clear();
+         letterLimitInput.sendKeys('100');
+         longNumberLimitInput.clear();
+         longNumberLimitInput.sendKeys('100');
+         expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]');
+         expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi');
+         expect(limitedLongNumber.getText()).toEqual('Output long number: 2345432342');
+       });
+     </file>
+   </example>
+*/
+function limitToFilter() {
+  return function(input, limit, begin) {
+    if (Math.abs(Number(limit)) === Infinity) {
+      limit = Number(limit);
+    } else {
+      limit = toInt(limit);
+    }
+    if (isNaN(limit)) return input;
+
+    if (isNumber(input)) input = input.toString();
+    if (!isArray(input) && !isString(input)) return input;
+
+    begin = (!begin || isNaN(begin)) ? 0 : toInt(begin);
+    begin = (begin < 0) ? Math.max(0, input.length + begin) : begin;
+
+    if (limit >= 0) {
+      return input.slice(begin, begin + limit);
+    } else {
+      if (begin === 0) {
+        return input.slice(limit, input.length);
+      } else {
+        return input.slice(Math.max(0, begin + limit), begin);
+      }
+    }
+  };
+}
+
+/**
+ * @ngdoc filter
+ * @name orderBy
+ * @kind function
+ *
+ * @description
+ * Orders a specified `array` by the `expression` predicate. It is ordered alphabetically
+ * for strings and numerically for numbers. Note: if you notice numbers are not being sorted
+ * as expected, make sure they are actually being saved as numbers and not strings.
+ *
+ * @param {Array} array The array to sort.
+ * @param {function(*)|string|Array.<(function(*)|string)>=} expression A predicate to be
+ *    used by the comparator to determine the order of elements.
+ *
+ *    Can be one of:
+ *
+ *    - `function`: Getter function. The result of this function will be sorted using the
+ *      `<`, `===`, `>` operator.
+ *    - `string`: An Angular expression. The result of this expression is used to compare elements
+ *      (for example `name` to sort by a property called `name` or `name.substr(0, 3)` to sort by
+ *      3 first characters of a property called `name`). The result of a constant expression
+ *      is interpreted as a property name to be used in comparisons (for example `"special name"`
+ *      to sort object by the value of their `special name` property). An expression can be
+ *      optionally prefixed with `+` or `-` to control ascending or descending sort order
+ *      (for example, `+name` or `-name`). If no property is provided, (e.g. `'+'`) then the array
+ *      element itself is used to compare where sorting.
+ *    - `Array`: An array of function or string predicates. The first predicate in the array
+ *      is used for sorting, but when two items are equivalent, the next predicate is used.
+ *
+ *    If the predicate is missing or empty then it defaults to `'+'`.
+ *
+ * @param {boolean=} reverse Reverse the order of the array.
+ * @returns {Array} Sorted copy of the source array.
+ *
+ *
+ * @example
+ * The example below demonstrates a simple ngRepeat, where the data is sorted
+ * by age in descending order (predicate is set to `'-age'`).
+ * `reverse` is not set, which means it defaults to `false`.
+   <example module="orderByExample">
+     <file name="index.html">
+       <script>
+         angular.module('orderByExample', [])
+           .controller('ExampleController', ['$scope', function($scope) {
+             $scope.friends =
+                 [{name:'John', phone:'555-1212', age:10},
+                  {name:'Mary', phone:'555-9876', age:19},
+                  {name:'Mike', phone:'555-4321', age:21},
+                  {name:'Adam', phone:'555-5678', age:35},
+                  {name:'Julie', phone:'555-8765', age:29}];
+           }]);
+       </script>
+       <div ng-controller="ExampleController">
+         <table class="friend">
+           <tr>
+             <th>Name</th>
+             <th>Phone Number</th>
+             <th>Age</th>
+           </tr>
+           <tr ng-repeat="friend in friends | orderBy:'-age'">
+             <td>{{friend.name}}</td>
+             <td>{{friend.phone}}</td>
+             <td>{{friend.age}}</td>
+           </tr>
+         </table>
+       </div>
+     </file>
+   </example>
+ *
+ * The predicate and reverse parameters can be controlled dynamically through scope properties,
+ * as shown in the next example.
+ * @example
+   <example module="orderByExample">
+     <file name="index.html">
+       <script>
+         angular.module('orderByExample', [])
+           .controller('ExampleController', ['$scope', function($scope) {
+             $scope.friends =
+                 [{name:'John', phone:'555-1212', age:10},
+                  {name:'Mary', phone:'555-9876', age:19},
+                  {name:'Mike', phone:'555-4321', age:21},
+                  {name:'Adam', phone:'555-5678', age:35},
+                  {name:'Julie', phone:'555-8765', age:29}];
+             $scope.predicate = 'age';
+             $scope.reverse = true;
+             $scope.order = function(predicate) {
+               $scope.reverse = ($scope.predicate === predicate) ? !$scope.reverse : false;
+               $scope.predicate = predicate;
+             };
+           }]);
+       </script>
+       <style type="text/css">
+         .sortorder:after {
+           content: '\25b2';
+         }
+         .sortorder.reverse:after {
+           content: '\25bc';
+         }
+       </style>
+       <div ng-controller="ExampleController">
+         <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre>
+         <hr/>
+         [ <a href="" ng-click="predicate=''">unsorted</a> ]
+         <table class="friend">
+           <tr>
+             <th>
+               <a href="" ng-click="order('name')">Name</a>
+               <span class="sortorder" ng-show="predicate === 'name'" ng-class="{reverse:reverse}"></span>
+             </th>
+             <th>
+               <a href="" ng-click="order('phone')">Phone Number</a>
+               <span class="sortorder" ng-show="predicate === 'phone'" ng-class="{reverse:reverse}"></span>
+             </th>
+             <th>
+               <a href="" ng-click="order('age')">Age</a>
+               <span class="sortorder" ng-show="predicate === 'age'" ng-class="{reverse:reverse}"></span>
+             </th>
+           </tr>
+           <tr ng-repeat="friend in friends | orderBy:predicate:reverse">
+             <td>{{friend.name}}</td>
+             <td>{{friend.phone}}</td>
+             <td>{{friend.age}}</td>
+           </tr>
+         </table>
+       </div>
+     </file>
+   </example>
+ *
+ * It's also possible to call the orderBy filter manually, by injecting `$filter`, retrieving the
+ * filter routine with `$filter('orderBy')`, and calling the returned filter routine with the
+ * desired parameters.
+ *
+ * Example:
+ *
+ * @example
+  <example module="orderByExample">
+    <file name="index.html">
+      <div ng-controller="ExampleController">
+        <table class="friend">
+          <tr>
+            <th><a href="" ng-click="reverse=false;order('name', false)">Name</a>
+              (<a href="" ng-click="order('-name',false)">^</a>)</th>
+            <th><a href="" ng-click="reverse=!reverse;order('phone', reverse)">Phone Number</a></th>
+            <th><a href="" ng-click="reverse=!reverse;order('age',reverse)">Age</a></th>
+          </tr>
+          <tr ng-repeat="friend in friends">
+            <td>{{friend.name}}</td>
+            <td>{{friend.phone}}</td>
+            <td>{{friend.age}}</td>
+          </tr>
+        </table>
+      </div>
+    </file>
+
+    <file name="script.js">
+      angular.module('orderByExample', [])
+        .controller('ExampleController', ['$scope', '$filter', function($scope, $filter) {
+          var orderBy = $filter('orderBy');
+          $scope.friends = [
+            { name: 'John',    phone: '555-1212',    age: 10 },
+            { name: 'Mary',    phone: '555-9876',    age: 19 },
+            { name: 'Mike',    phone: '555-4321',    age: 21 },
+            { name: 'Adam',    phone: '555-5678',    age: 35 },
+            { name: 'Julie',   phone: '555-8765',    age: 29 }
+          ];
+          $scope.order = function(predicate, reverse) {
+            $scope.friends = orderBy($scope.friends, predicate, reverse);
+          };
+          $scope.order('-age',false);
+        }]);
+    </file>
+</example>
+ */
+orderByFilter.$inject = ['$parse'];
+function orderByFilter($parse) {
+  return function(array, sortPredicate, reverseOrder) {
+
+    if (!(isArrayLike(array))) return array;
+
+    if (!isArray(sortPredicate)) { sortPredicate = [sortPredicate]; }
+    if (sortPredicate.length === 0) { sortPredicate = ['+']; }
+
+    var predicates = processPredicates(sortPredicate, reverseOrder);
+    // Add a predicate at the end that evaluates to the element index. This makes the
+    // sort stable as it works as a tie-breaker when all the input predicates cannot
+    // distinguish between two elements.
+    predicates.push({ get: function() { return {}; }, descending: reverseOrder ? -1 : 1});
+
+    // The next three lines are a version of a Swartzian Transform idiom from Perl
+    // (sometimes called the Decorate-Sort-Undecorate idiom)
+    // See https://en.wikipedia.org/wiki/Schwartzian_transform
+    var compareValues = Array.prototype.map.call(array, getComparisonObject);
+    compareValues.sort(doComparison);
+    array = compareValues.map(function(item) { return item.value; });
+
+    return array;
+
+    function getComparisonObject(value, index) {
+      return {
+        value: value,
+        predicateValues: predicates.map(function(predicate) {
+          return getPredicateValue(predicate.get(value), index);
+        })
+      };
+    }
+
+    function doComparison(v1, v2) {
+      var result = 0;
+      for (var index=0, length = predicates.length; index < length; ++index) {
+        result = compare(v1.predicateValues[index], v2.predicateValues[index]) * predicates[index].descending;
+        if (result) break;
+      }
+      return result;
+    }
+  };
+
+  function processPredicates(sortPredicate, reverseOrder) {
+    reverseOrder = reverseOrder ? -1 : 1;
+    return sortPredicate.map(function(predicate) {
+      var descending = 1, get = identity;
+
+      if (isFunction(predicate)) {
+        get = predicate;
+      } else if (isString(predicate)) {
+        if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) {
+          descending = predicate.charAt(0) == '-' ? -1 : 1;
+          predicate = predicate.substring(1);
+        }
+        if (predicate !== '') {
+          get = $parse(predicate);
+          if (get.constant) {
+            var key = get();
+            get = function(value) { return value[key]; };
+          }
+        }
+      }
+      return { get: get, descending: descending * reverseOrder };
+    });
+  }
+
+  function isPrimitive(value) {
+    switch (typeof value) {
+      case 'number': /* falls through */
+      case 'boolean': /* falls through */
+      case 'string':
+        return true;
+      default:
+        return false;
+    }
+  }
+
+  function objectValue(value, index) {
+    // If `valueOf` is a valid function use that
+    if (typeof value.valueOf === 'function') {
+      value = value.valueOf();
+      if (isPrimitive(value)) return value;
+    }
+    // If `toString` is a valid function and not the one from `Object.prototype` use that
+    if (hasCustomToString(value)) {
+      value = value.toString();
+      if (isPrimitive(value)) return value;
+    }
+    // We have a basic object so we use the position of the object in the collection
+    return index;
+  }
+
+  function getPredicateValue(value, index) {
+    var type = typeof value;
+    if (value === null) {
+      type = 'string';
+      value = 'null';
+    } else if (type === 'string') {
+      value = value.toLowerCase();
+    } else if (type === 'object') {
+      value = objectValue(value, index);
+    }
+    return { value: value, type: type };
+  }
+
+  function compare(v1, v2) {
+    var result = 0;
+    if (v1.type === v2.type) {
+      if (v1.value !== v2.value) {
+        result = v1.value < v2.value ? -1 : 1;
+      }
+    } else {
+      result = v1.type < v2.type ? -1 : 1;
+    }
+    return result;
+  }
+}
+
+function ngDirective(directive) {
+  if (isFunction(directive)) {
+    directive = {
+      link: directive
+    };
+  }
+  directive.restrict = directive.restrict || 'AC';
+  return valueFn(directive);
+}
+
+/**
+ * @ngdoc directive
+ * @name a
+ * @restrict E
+ *
+ * @description
+ * Modifies the default behavior of the html A tag so that the default action is prevented when
+ * the href attribute is empty.
+ *
+ * This change permits the easy creation of action links with the `ngClick` directive
+ * without changing the location or causing page reloads, e.g.:
+ * `<a href="" ng-click="list.addItem()">Add Item</a>`
+ */
+var htmlAnchorDirective = valueFn({
+  restrict: 'E',
+  compile: function(element, attr) {
+    if (!attr.href && !attr.xlinkHref) {
+      return function(scope, element) {
+        // If the linked element is not an anchor tag anymore, do nothing
+        if (element[0].nodeName.toLowerCase() !== 'a') return;
+
+        // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.
+        var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ?
+                   'xlink:href' : 'href';
+        element.on('click', function(event) {
+          // if we have no href url, then don't navigate anywhere.
+          if (!element.attr(href)) {
+            event.preventDefault();
+          }
+        });
+      };
+    }
+  }
+});
+
+/**
+ * @ngdoc directive
+ * @name ngHref
+ * @restrict A
+ * @priority 99
+ *
+ * @description
+ * Using Angular markup like `{{hash}}` in an href attribute will
+ * make the link go to the wrong URL if the user clicks it before
+ * Angular has a chance to replace the `{{hash}}` markup with its
+ * value. Until Angular replaces the markup the link will be broken
+ * and will most likely return a 404 error. The `ngHref` directive
+ * solves this problem.
+ *
+ * The wrong way to write it:
+ * ```html
+ * <a href="http://www.gravatar.com/avatar/{{hash}}">link1</a>
+ * ```
+ *
+ * The correct way to write it:
+ * ```html
+ * <a ng-href="http://www.gravatar.com/avatar/{{hash}}">link1</a>
+ * ```
+ *
+ * @element A
+ * @param {template} ngHref any string which can contain `{{}}` markup.
+ *
+ * @example
+ * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes
+ * in links and their different behaviors:
+    <example>
+      <file name="index.html">
+        <input ng-model="value" /><br />
+        <a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload)<br />
+        <a id="link-2" href="" ng-click="value = 2">link 2</a> (link, don't reload)<br />
+        <a id="link-3" ng-href="/{{'123'}}">link 3</a> (link, reload!)<br />
+        <a id="link-4" href="" name="xx" ng-click="value = 4">anchor</a> (link, don't reload)<br />
+        <a id="link-5" name="xxx" ng-click="value = 5">anchor</a> (no link)<br />
+        <a id="link-6" ng-href="{{value}}">link</a> (link, change location)
+      </file>
+      <file name="protractor.js" type="protractor">
+        it('should execute ng-click but not reload when href without value', function() {
+          element(by.id('link-1')).click();
+          expect(element(by.model('value')).getAttribute('value')).toEqual('1');
+          expect(element(by.id('link-1')).getAttribute('href')).toBe('');
+        });
+
+        it('should execute ng-click but not reload when href empty string', function() {
+          element(by.id('link-2')).click();
+          expect(element(by.model('value')).getAttribute('value')).toEqual('2');
+          expect(element(by.id('link-2')).getAttribute('href')).toBe('');
+        });
+
+        it('should execute ng-click and change url when ng-href specified', function() {
+          expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\/123$/);
+
+          element(by.id('link-3')).click();
+
+          // At this point, we navigate away from an Angular page, so we need
+          // to use browser.driver to get the base webdriver.
+
+          browser.wait(function() {
+            return browser.driver.getCurrentUrl().then(function(url) {
+              return url.match(/\/123$/);
+            });
+          }, 5000, 'page should navigate to /123');
+        });
+
+        it('should execute ng-click but not reload when href empty string and name specified', function() {
+          element(by.id('link-4')).click();
+          expect(element(by.model('value')).getAttribute('value')).toEqual('4');
+          expect(element(by.id('link-4')).getAttribute('href')).toBe('');
+        });
+
+        it('should execute ng-click but not reload when no href but name specified', function() {
+          element(by.id('link-5')).click();
+          expect(element(by.model('value')).getAttribute('value')).toEqual('5');
+          expect(element(by.id('link-5')).getAttribute('href')).toBe(null);
+        });
+
+        it('should only change url when only ng-href', function() {
+          element(by.model('value')).clear();
+          element(by.model('value')).sendKeys('6');
+          expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\/6$/);
+
+          element(by.id('link-6')).click();
+
+          // At this point, we navigate away from an Angular page, so we need
+          // to use browser.driver to get the base webdriver.
+          browser.wait(function() {
+            return browser.driver.getCurrentUrl().then(function(url) {
+              return url.match(/\/6$/);
+            });
+          }, 5000, 'page should navigate to /6');
+        });
+      </file>
+    </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngSrc
+ * @restrict A
+ * @priority 99
+ *
+ * @description
+ * Using Angular markup like `{{hash}}` in a `src` attribute doesn't
+ * work right: The browser will fetch from the URL with the literal
+ * text `{{hash}}` until Angular replaces the expression inside
+ * `{{hash}}`. The `ngSrc` directive solves this problem.
+ *
+ * The buggy way to write it:
+ * ```html
+ * <img src="http://www.gravatar.com/avatar/{{hash}}" alt="Description"/>
+ * ```
+ *
+ * The correct way to write it:
+ * ```html
+ * <img ng-src="http://www.gravatar.com/avatar/{{hash}}" alt="Description" />
+ * ```
+ *
+ * @element IMG
+ * @param {template} ngSrc any string which can contain `{{}}` markup.
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngSrcset
+ * @restrict A
+ * @priority 99
+ *
+ * @description
+ * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't
+ * work right: The browser will fetch from the URL with the literal
+ * text `{{hash}}` until Angular replaces the expression inside
+ * `{{hash}}`. The `ngSrcset` directive solves this problem.
+ *
+ * The buggy way to write it:
+ * ```html
+ * <img srcset="http://www.gravatar.com/avatar/{{hash}} 2x" alt="Description"/>
+ * ```
+ *
+ * The correct way to write it:
+ * ```html
+ * <img ng-srcset="http://www.gravatar.com/avatar/{{hash}} 2x" alt="Description" />
+ * ```
+ *
+ * @element IMG
+ * @param {template} ngSrcset any string which can contain `{{}}` markup.
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngDisabled
+ * @restrict A
+ * @priority 100
+ *
+ * @description
+ *
+ * This directive sets the `disabled` attribute on the element if the
+ * {@link guide/expression expression} inside `ngDisabled` evaluates to truthy.
+ *
+ * A special directive is necessary because we cannot use interpolation inside the `disabled`
+ * attribute.  The following example would make the button enabled on Chrome/Firefox
+ * but not on older IEs:
+ *
+ * ```html
+ * <!-- See below for an example of ng-disabled being used correctly -->
+ * <div ng-init="isDisabled = false">
+ *  <button disabled="{{isDisabled}}">Disabled</button>
+ * </div>
+ * ```
+ *
+ * This is because the HTML specification does not require browsers to preserve the values of
+ * boolean attributes such as `disabled` (Their presence means true and their absence means false.)
+ * If we put an Angular interpolation expression into such an attribute then the
+ * binding information would be lost when the browser removes the attribute.
+ *
+ * @example
+    <example>
+      <file name="index.html">
+        <label>Click me to toggle: <input type="checkbox" ng-model="checked"></label><br/>
+        <button ng-model="button" ng-disabled="checked">Button</button>
+      </file>
+      <file name="protractor.js" type="protractor">
+        it('should toggle button', function() {
+          expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy();
+          element(by.model('checked')).click();
+          expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy();
+        });
+      </file>
+    </example>
+ *
+ * @element INPUT
+ * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy,
+ *     then the `disabled` attribute will be set on the element
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngChecked
+ * @restrict A
+ * @priority 100
+ *
+ * @description
+ * Sets the `checked` attribute on the element, if the expression inside `ngChecked` is truthy.
+ *
+ * Note that this directive should not be used together with {@link ngModel `ngModel`},
+ * as this can lead to unexpected behavior.
+ *
+ * ### Why do we need `ngChecked`?
+ *
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
+ * such as checked. (Their presence means true and their absence means false.)
+ * If we put an Angular interpolation expression into such an attribute then the
+ * binding information would be lost when the browser removes the attribute.
+ * The `ngChecked` directive solves this problem for the `checked` attribute.
+ * This complementary directive is not removed by the browser and so provides
+ * a permanent reliable place to store the binding information.
+ * @example
+    <example>
+      <file name="index.html">
+        <label>Check me to check both: <input type="checkbox" ng-model="master"></label><br/>
+        <input id="checkSlave" type="checkbox" ng-checked="master" aria-label="Slave input">
+      </file>
+      <file name="protractor.js" type="protractor">
+        it('should check both checkBoxes', function() {
+          expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy();
+          element(by.model('master')).click();
+          expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy();
+        });
+      </file>
+    </example>
+ *
+ * @element INPUT
+ * @param {expression} ngChecked If the {@link guide/expression expression} is truthy,
+ *     then the `checked` attribute will be set on the element
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngReadonly
+ * @restrict A
+ * @priority 100
+ *
+ * @description
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
+ * such as readonly. (Their presence means true and their absence means false.)
+ * If we put an Angular interpolation expression into such an attribute then the
+ * binding information would be lost when the browser removes the attribute.
+ * The `ngReadonly` directive solves this problem for the `readonly` attribute.
+ * This complementary directive is not removed by the browser and so provides
+ * a permanent reliable place to store the binding information.
+ * @example
+    <example>
+      <file name="index.html">
+        <label>Check me to make text readonly: <input type="checkbox" ng-model="checked"></label><br/>
+        <input type="text" ng-readonly="checked" value="I'm Angular" aria-label="Readonly field" />
+      </file>
+      <file name="protractor.js" type="protractor">
+        it('should toggle readonly attr', function() {
+          expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeFalsy();
+          element(by.model('checked')).click();
+          expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeTruthy();
+        });
+      </file>
+    </example>
+ *
+ * @element INPUT
+ * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy,
+ *     then special attribute "readonly" will be set on the element
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngSelected
+ * @restrict A
+ * @priority 100
+ *
+ * @description
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
+ * such as selected. (Their presence means true and their absence means false.)
+ * If we put an Angular interpolation expression into such an attribute then the
+ * binding information would be lost when the browser removes the attribute.
+ * The `ngSelected` directive solves this problem for the `selected` attribute.
+ * This complementary directive is not removed by the browser and so provides
+ * a permanent reliable place to store the binding information.
+ *
+ * @example
+    <example>
+      <file name="index.html">
+        <label>Check me to select: <input type="checkbox" ng-model="selected"></label><br/>
+        <select aria-label="ngSelected demo">
+          <option>Hello!</option>
+          <option id="greet" ng-selected="selected">Greetings!</option>
+        </select>
+      </file>
+      <file name="protractor.js" type="protractor">
+        it('should select Greetings!', function() {
+          expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy();
+          element(by.model('selected')).click();
+          expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy();
+        });
+      </file>
+    </example>
+ *
+ * @element OPTION
+ * @param {expression} ngSelected If the {@link guide/expression expression} is truthy,
+ *     then special attribute "selected" will be set on the element
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngOpen
+ * @restrict A
+ * @priority 100
+ *
+ * @description
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
+ * such as open. (Their presence means true and their absence means false.)
+ * If we put an Angular interpolation expression into such an attribute then the
+ * binding information would be lost when the browser removes the attribute.
+ * The `ngOpen` directive solves this problem for the `open` attribute.
+ * This complementary directive is not removed by the browser and so provides
+ * a permanent reliable place to store the binding information.
+ * @example
+     <example>
+       <file name="index.html">
+         <label>Check me check multiple: <input type="checkbox" ng-model="open"></label><br/>
+         <details id="details" ng-open="open">
+            <summary>Show/Hide me</summary>
+         </details>
+       </file>
+       <file name="protractor.js" type="protractor">
+         it('should toggle open', function() {
+           expect(element(by.id('details')).getAttribute('open')).toBeFalsy();
+           element(by.model('open')).click();
+           expect(element(by.id('details')).getAttribute('open')).toBeTruthy();
+         });
+       </file>
+     </example>
+ *
+ * @element DETAILS
+ * @param {expression} ngOpen If the {@link guide/expression expression} is truthy,
+ *     then special attribute "open" will be set on the element
+ */
+
+var ngAttributeAliasDirectives = {};
+
+// boolean attrs are evaluated
+forEach(BOOLEAN_ATTR, function(propName, attrName) {
+  // binding to multiple is not supported
+  if (propName == "multiple") return;
+
+  function defaultLinkFn(scope, element, attr) {
+    scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) {
+      attr.$set(attrName, !!value);
+    });
+  }
+
+  var normalized = directiveNormalize('ng-' + attrName);
+  var linkFn = defaultLinkFn;
+
+  if (propName === 'checked') {
+    linkFn = function(scope, element, attr) {
+      // ensuring ngChecked doesn't interfere with ngModel when both are set on the same input
+      if (attr.ngModel !== attr[normalized]) {
+        defaultLinkFn(scope, element, attr);
+      }
+    };
+  }
+
+  ngAttributeAliasDirectives[normalized] = function() {
+    return {
+      restrict: 'A',
+      priority: 100,
+      link: linkFn
+    };
+  };
+});
+
+// aliased input attrs are evaluated
+forEach(ALIASED_ATTR, function(htmlAttr, ngAttr) {
+  ngAttributeAliasDirectives[ngAttr] = function() {
+    return {
+      priority: 100,
+      link: function(scope, element, attr) {
+        //special case ngPattern when a literal regular expression value
+        //is used as the expression (this way we don't have to watch anything).
+        if (ngAttr === "ngPattern" && attr.ngPattern.charAt(0) == "/") {
+          var match = attr.ngPattern.match(REGEX_STRING_REGEXP);
+          if (match) {
+            attr.$set("ngPattern", new RegExp(match[1], match[2]));
+            return;
+          }
+        }
+
+        scope.$watch(attr[ngAttr], function ngAttrAliasWatchAction(value) {
+          attr.$set(ngAttr, value);
+        });
+      }
+    };
+  };
+});
+
+// ng-src, ng-srcset, ng-href are interpolated
+forEach(['src', 'srcset', 'href'], function(attrName) {
+  var normalized = directiveNormalize('ng-' + attrName);
+  ngAttributeAliasDirectives[normalized] = function() {
+    return {
+      priority: 99, // it needs to run after the attributes are interpolated
+      link: function(scope, element, attr) {
+        var propName = attrName,
+            name = attrName;
+
+        if (attrName === 'href' &&
+            toString.call(element.prop('href')) === '[object SVGAnimatedString]') {
+          name = 'xlinkHref';
+          attr.$attr[name] = 'xlink:href';
+          propName = null;
+        }
+
+        attr.$observe(normalized, function(value) {
+          if (!value) {
+            if (attrName === 'href') {
+              attr.$set(name, null);
+            }
+            return;
+          }
+
+          attr.$set(name, value);
+
+          // on IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist
+          // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need
+          // to set the property as well to achieve the desired effect.
+          // we use attr[attrName] value since $set can sanitize the url.
+          if (msie && propName) element.prop(propName, attr[name]);
+        });
+      }
+    };
+  };
+});
+
+/* global -nullFormCtrl, -SUBMITTED_CLASS, addSetValidityMethod: true
+ */
+var nullFormCtrl = {
+  $addControl: noop,
+  $$renameControl: nullFormRenameControl,
+  $removeControl: noop,
+  $setValidity: noop,
+  $setDirty: noop,
+  $setPristine: noop,
+  $setSubmitted: noop
+},
+SUBMITTED_CLASS = 'ng-submitted';
+
+function nullFormRenameControl(control, name) {
+  control.$name = name;
+}
+
+/**
+ * @ngdoc type
+ * @name form.FormController
+ *
+ * @property {boolean} $pristine True if user has not interacted with the form yet.
+ * @property {boolean} $dirty True if user has already interacted with the form.
+ * @property {boolean} $valid True if all of the containing forms and controls are valid.
+ * @property {boolean} $invalid True if at least one containing control or form is invalid.
+ * @property {boolean} $pending True if at least one containing control or form is pending.
+ * @property {boolean} $submitted True if user has submitted the form even if its invalid.
+ *
+ * @property {Object} $error Is an object hash, containing references to controls or
+ *  forms with failing validators, where:
+ *
+ *  - keys are validation tokens (error names),
+ *  - values are arrays of controls or forms that have a failing validator for given error name.
+ *
+ *  Built-in validation tokens:
+ *
+ *  - `email`
+ *  - `max`
+ *  - `maxlength`
+ *  - `min`
+ *  - `minlength`
+ *  - `number`
+ *  - `pattern`
+ *  - `required`
+ *  - `url`
+ *  - `date`
+ *  - `datetimelocal`
+ *  - `time`
+ *  - `week`
+ *  - `month`
+ *
+ * @description
+ * `FormController` keeps track of all its controls and nested forms as well as the state of them,
+ * such as being valid/invalid or dirty/pristine.
+ *
+ * Each {@link ng.directive:form form} directive creates an instance
+ * of `FormController`.
+ *
+ */
+//asks for $scope to fool the BC controller module
+FormController.$inject = ['$element', '$attrs', '$scope', '$animate', '$interpolate'];
+function FormController(element, attrs, $scope, $animate, $interpolate) {
+  var form = this,
+      controls = [];
+
+  // init state
+  form.$error = {};
+  form.$$success = {};
+  form.$pending = undefined;
+  form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope);
+  form.$dirty = false;
+  form.$pristine = true;
+  form.$valid = true;
+  form.$invalid = false;
+  form.$submitted = false;
+  form.$$parentForm = nullFormCtrl;
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$rollbackViewValue
+   *
+   * @description
+   * Rollback all form controls pending updates to the `$modelValue`.
+   *
+   * Updates may be pending by a debounced event or because the input is waiting for a some future
+   * event defined in `ng-model-options`. This method is typically needed by the reset button of
+   * a form that uses `ng-model-options` to pend updates.
+   */
+  form.$rollbackViewValue = function() {
+    forEach(controls, function(control) {
+      control.$rollbackViewValue();
+    });
+  };
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$commitViewValue
+   *
+   * @description
+   * Commit all form controls pending updates to the `$modelValue`.
+   *
+   * Updates may be pending by a debounced event or because the input is waiting for a some future
+   * event defined in `ng-model-options`. This method is rarely needed as `NgModelController`
+   * usually handles calling this in response to input events.
+   */
+  form.$commitViewValue = function() {
+    forEach(controls, function(control) {
+      control.$commitViewValue();
+    });
+  };
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$addControl
+   * @param {object} control control object, either a {@link form.FormController} or an
+   * {@link ngModel.NgModelController}
+   *
+   * @description
+   * Register a control with the form. Input elements using ngModelController do this automatically
+   * when they are linked.
+   *
+   * Note that the current state of the control will not be reflected on the new parent form. This
+   * is not an issue with normal use, as freshly compiled and linked controls are in a `$pristine`
+   * state.
+   *
+   * However, if the method is used programmatically, for example by adding dynamically created controls,
+   * or controls that have been previously removed without destroying their corresponding DOM element,
+   * it's the developers responsiblity to make sure the current state propagates to the parent form.
+   *
+   * For example, if an input control is added that is already `$dirty` and has `$error` properties,
+   * calling `$setDirty()` and `$validate()` afterwards will propagate the state to the parent form.
+   */
+  form.$addControl = function(control) {
+    // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored
+    // and not added to the scope.  Now we throw an error.
+    assertNotHasOwnProperty(control.$name, 'input');
+    controls.push(control);
+
+    if (control.$name) {
+      form[control.$name] = control;
+    }
+
+    control.$$parentForm = form;
+  };
+
+  // Private API: rename a form control
+  form.$$renameControl = function(control, newName) {
+    var oldName = control.$name;
+
+    if (form[oldName] === control) {
+      delete form[oldName];
+    }
+    form[newName] = control;
+    control.$name = newName;
+  };
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$removeControl
+   * @param {object} control control object, either a {@link form.FormController} or an
+   * {@link ngModel.NgModelController}
+   *
+   * @description
+   * Deregister a control from the form.
+   *
+   * Input elements using ngModelController do this automatically when they are destroyed.
+   *
+   * Note that only the removed control's validation state (`$errors`etc.) will be removed from the
+   * form. `$dirty`, `$submitted` states will not be changed, because the expected behavior can be
+   * different from case to case. For example, removing the only `$dirty` control from a form may or
+   * may not mean that the form is still `$dirty`.
+   */
+  form.$removeControl = function(control) {
+    if (control.$name && form[control.$name] === control) {
+      delete form[control.$name];
+    }
+    forEach(form.$pending, function(value, name) {
+      form.$setValidity(name, null, control);
+    });
+    forEach(form.$error, function(value, name) {
+      form.$setValidity(name, null, control);
+    });
+    forEach(form.$$success, function(value, name) {
+      form.$setValidity(name, null, control);
+    });
+
+    arrayRemove(controls, control);
+    control.$$parentForm = nullFormCtrl;
+  };
+
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$setValidity
+   *
+   * @description
+   * Sets the validity of a form control.
+   *
+   * This method will also propagate to parent forms.
+   */
+  addSetValidityMethod({
+    ctrl: this,
+    $element: element,
+    set: function(object, property, controller) {
+      var list = object[property];
+      if (!list) {
+        object[property] = [controller];
+      } else {
+        var index = list.indexOf(controller);
+        if (index === -1) {
+          list.push(controller);
+        }
+      }
+    },
+    unset: function(object, property, controller) {
+      var list = object[property];
+      if (!list) {
+        return;
+      }
+      arrayRemove(list, controller);
+      if (list.length === 0) {
+        delete object[property];
+      }
+    },
+    $animate: $animate
+  });
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$setDirty
+   *
+   * @description
+   * Sets the form to a dirty state.
+   *
+   * This method can be called to add the 'ng-dirty' class and set the form to a dirty
+   * state (ng-dirty class). This method will also propagate to parent forms.
+   */
+  form.$setDirty = function() {
+    $animate.removeClass(element, PRISTINE_CLASS);
+    $animate.addClass(element, DIRTY_CLASS);
+    form.$dirty = true;
+    form.$pristine = false;
+    form.$$parentForm.$setDirty();
+  };
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$setPristine
+   *
+   * @description
+   * Sets the form to its pristine state.
+   *
+   * This method can be called to remove the 'ng-dirty' class and set the form to its pristine
+   * state (ng-pristine class). This method will also propagate to all the controls contained
+   * in this form.
+   *
+   * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after
+   * saving or resetting it.
+   */
+  form.$setPristine = function() {
+    $animate.setClass(element, PRISTINE_CLASS, DIRTY_CLASS + ' ' + SUBMITTED_CLASS);
+    form.$dirty = false;
+    form.$pristine = true;
+    form.$submitted = false;
+    forEach(controls, function(control) {
+      control.$setPristine();
+    });
+  };
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$setUntouched
+   *
+   * @description
+   * Sets the form to its untouched state.
+   *
+   * This method can be called to remove the 'ng-touched' class and set the form controls to their
+   * untouched state (ng-untouched class).
+   *
+   * Setting a form controls back to their untouched state is often useful when setting the form
+   * back to its pristine state.
+   */
+  form.$setUntouched = function() {
+    forEach(controls, function(control) {
+      control.$setUntouched();
+    });
+  };
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$setSubmitted
+   *
+   * @description
+   * Sets the form to its submitted state.
+   */
+  form.$setSubmitted = function() {
+    $animate.addClass(element, SUBMITTED_CLASS);
+    form.$submitted = true;
+    form.$$parentForm.$setSubmitted();
+  };
+}
+
+/**
+ * @ngdoc directive
+ * @name ngForm
+ * @restrict EAC
+ *
+ * @description
+ * Nestable alias of {@link ng.directive:form `form`} directive. HTML
+ * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a
+ * sub-group of controls needs to be determined.
+ *
+ * Note: the purpose of `ngForm` is to group controls,
+ * but not to be a replacement for the `<form>` tag with all of its capabilities
+ * (e.g. posting to the server, ...).
+ *
+ * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into
+ *                       related scope, under this name.
+ *
+ */
+
+ /**
+ * @ngdoc directive
+ * @name form
+ * @restrict E
+ *
+ * @description
+ * Directive that instantiates
+ * {@link form.FormController FormController}.
+ *
+ * If the `name` attribute is specified, the form controller is published onto the current scope under
+ * this name.
+ *
+ * # Alias: {@link ng.directive:ngForm `ngForm`}
+ *
+ * In Angular, forms can be nested. This means that the outer form is valid when all of the child
+ * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so
+ * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to
+ * `<form>` but can be nested.  This allows you to have nested forms, which is very useful when
+ * using Angular validation directives in forms that are dynamically generated using the
+ * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name`
+ * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an
+ * `ngForm` directive and nest these in an outer `form` element.
+ *
+ *
+ * # CSS classes
+ *  - `ng-valid` is set if the form is valid.
+ *  - `ng-invalid` is set if the form is invalid.
+ *  - `ng-pending` is set if the form is pending.
+ *  - `ng-pristine` is set if the form is pristine.
+ *  - `ng-dirty` is set if the form is dirty.
+ *  - `ng-submitted` is set if the form was submitted.
+ *
+ * Keep in mind that ngAnimate can detect each of these classes when added and removed.
+ *
+ *
+ * # Submitting a form and preventing the default action
+ *
+ * Since the role of forms in client-side Angular applications is different than in classical
+ * roundtrip apps, it is desirable for the browser not to translate the form submission into a full
+ * page reload that sends the data to the server. Instead some javascript logic should be triggered
+ * to handle the form submission in an application-specific way.
+ *
+ * For this reason, Angular prevents the default action (form submission to the server) unless the
+ * `<form>` element has an `action` attribute specified.
+ *
+ * You can use one of the following two ways to specify what javascript method should be called when
+ * a form is submitted:
+ *
+ * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element
+ * - {@link ng.directive:ngClick ngClick} directive on the first
+  *  button or input field of type submit (input[type=submit])
+ *
+ * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit}
+ * or {@link ng.directive:ngClick ngClick} directives.
+ * This is because of the following form submission rules in the HTML specification:
+ *
+ * - If a form has only one input field then hitting enter in this field triggers form submit
+ * (`ngSubmit`)
+ * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter
+ * doesn't trigger submit
+ * - if a form has one or more input fields and one or more buttons or input[type=submit] then
+ * hitting enter in any of the input fields will trigger the click handler on the *first* button or
+ * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`)
+ *
+ * Any pending `ngModelOptions` changes will take place immediately when an enclosing form is
+ * submitted. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`
+ * to have access to the updated model.
+ *
+ * ## Animation Hooks
+ *
+ * Animations in ngForm are triggered when any of the associated CSS classes are added and removed.
+ * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any
+ * other validations that are performed within the form. Animations in ngForm are similar to how
+ * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well
+ * as JS animations.
+ *
+ * The following example shows a simple way to utilize CSS transitions to style a form element
+ * that has been rendered as invalid after it has been validated:
+ *
+ * <pre>
+ * //be sure to include ngAnimate as a module to hook into more
+ * //advanced animations
+ * .my-form {
+ *   transition:0.5s linear all;
+ *   background: white;
+ * }
+ * .my-form.ng-invalid {
+ *   background: red;
+ *   color:white;
+ * }
+ * </pre>
+ *
+ * @example
+    <example deps="angular-animate.js" animations="true" fixBase="true" module="formExample">
+      <file name="index.html">
+       <script>
+         angular.module('formExample', [])
+           .controller('FormController', ['$scope', function($scope) {
+             $scope.userType = 'guest';
+           }]);
+       </script>
+       <style>
+        .my-form {
+          transition:all linear 0.5s;
+          background: transparent;
+        }
+        .my-form.ng-invalid {
+          background: red;
+        }
+       </style>
+       <form name="myForm" ng-controller="FormController" class="my-form">
+         userType: <input name="input" ng-model="userType" required>
+         <span class="error" ng-show="myForm.input.$error.required">Required!</span><br>
+         <code>userType = {{userType}}</code><br>
+         <code>myForm.input.$valid = {{myForm.input.$valid}}</code><br>
+         <code>myForm.input.$error = {{myForm.input.$error}}</code><br>
+         <code>myForm.$valid = {{myForm.$valid}}</code><br>
+         <code>myForm.$error.required = {{!!myForm.$error.required}}</code><br>
+        </form>
+      </file>
+      <file name="protractor.js" type="protractor">
+        it('should initialize to model', function() {
+          var userType = element(by.binding('userType'));
+          var valid = element(by.binding('myForm.input.$valid'));
+
+          expect(userType.getText()).toContain('guest');
+          expect(valid.getText()).toContain('true');
+        });
+
+        it('should be invalid if empty', function() {
+          var userType = element(by.binding('userType'));
+          var valid = element(by.binding('myForm.input.$valid'));
+          var userInput = element(by.model('userType'));
+
+          userInput.clear();
+          userInput.sendKeys('');
+
+          expect(userType.getText()).toEqual('userType =');
+          expect(valid.getText()).toContain('false');
+        });
+      </file>
+    </example>
+ *
+ * @param {string=} name Name of the form. If specified, the form controller will be published into
+ *                       related scope, under this name.
+ */
+var formDirectiveFactory = function(isNgForm) {
+  return ['$timeout', '$parse', function($timeout, $parse) {
+    var formDirective = {
+      name: 'form',
+      restrict: isNgForm ? 'EAC' : 'E',
+      require: ['form', '^^?form'], //first is the form's own ctrl, second is an optional parent form
+      controller: FormController,
+      compile: function ngFormCompile(formElement, attr) {
+        // Setup initial state of the control
+        formElement.addClass(PRISTINE_CLASS).addClass(VALID_CLASS);
+
+        var nameAttr = attr.name ? 'name' : (isNgForm && attr.ngForm ? 'ngForm' : false);
+
+        return {
+          pre: function ngFormPreLink(scope, formElement, attr, ctrls) {
+            var controller = ctrls[0];
+
+            // if `action` attr is not present on the form, prevent the default action (submission)
+            if (!('action' in attr)) {
+              // we can't use jq events because if a form is destroyed during submission the default
+              // action is not prevented. see #1238
+              //
+              // IE 9 is not affected because it doesn't fire a submit event and try to do a full
+              // page reload if the form was destroyed by submission of the form via a click handler
+              // on a button in the form. Looks like an IE9 specific bug.
+              var handleFormSubmission = function(event) {
+                scope.$apply(function() {
+                  controller.$commitViewValue();
+                  controller.$setSubmitted();
+                });
+
+                event.preventDefault();
+              };
+
+              addEventListenerFn(formElement[0], 'submit', handleFormSubmission);
+
+              // unregister the preventDefault listener so that we don't not leak memory but in a
+              // way that will achieve the prevention of the default action.
+              formElement.on('$destroy', function() {
+                $timeout(function() {
+                  removeEventListenerFn(formElement[0], 'submit', handleFormSubmission);
+                }, 0, false);
+              });
+            }
+
+            var parentFormCtrl = ctrls[1] || controller.$$parentForm;
+            parentFormCtrl.$addControl(controller);
+
+            var setter = nameAttr ? getSetter(controller.$name) : noop;
+
+            if (nameAttr) {
+              setter(scope, controller);
+              attr.$observe(nameAttr, function(newValue) {
+                if (controller.$name === newValue) return;
+                setter(scope, undefined);
+                controller.$$parentForm.$$renameControl(controller, newValue);
+                setter = getSetter(controller.$name);
+                setter(scope, controller);
+              });
+            }
+            formElement.on('$destroy', function() {
+              controller.$$parentForm.$removeControl(controller);
+              setter(scope, undefined);
+              extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards
+            });
+          }
+        };
+      }
+    };
+
+    return formDirective;
+
+    function getSetter(expression) {
+      if (expression === '') {
+        //create an assignable expression, so forms with an empty name can be renamed later
+        return $parse('this[""]').assign;
+      }
+      return $parse(expression).assign || noop;
+    }
+  }];
+};
+
+var formDirective = formDirectiveFactory();
+var ngFormDirective = formDirectiveFactory(true);
+
+/* global VALID_CLASS: false,
+  INVALID_CLASS: false,
+  PRISTINE_CLASS: false,
+  DIRTY_CLASS: false,
+  UNTOUCHED_CLASS: false,
+  TOUCHED_CLASS: false,
+  ngModelMinErr: false,
+*/
+
+// Regex code is obtained from SO: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231
+var ISO_DATE_REGEXP = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/;
+// See valid URLs in RFC3987 (http://tools.ietf.org/html/rfc3987)
+var URL_REGEXP = /^[A-Za-z][A-Za-z\d.+-]*:\/*(?:\w+(?::\w+)?@)?[^\s/]+(?::\d+)?(?:\/[\w#!:.?+=&%@\-/]*)?$/;
+var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;
+var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/;
+var DATE_REGEXP = /^(\d{4})-(\d{2})-(\d{2})$/;
+var DATETIMELOCAL_REGEXP = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/;
+var WEEK_REGEXP = /^(\d{4})-W(\d\d)$/;
+var MONTH_REGEXP = /^(\d{4})-(\d\d)$/;
+var TIME_REGEXP = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/;
+
+var inputType = {
+
+  /**
+   * @ngdoc input
+   * @name input[text]
+   *
+   * @description
+   * Standard HTML text input with angular data binding, inherited by most of the `input` elements.
+   *
+   *
+   * @param {string} ngModel Assignable angular expression to data-bind to.
+   * @param {string=} name Property name of the form under which the control is published.
+   * @param {string=} required Adds `required` validation error key if the value is not entered.
+   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+   *    `required` when you want to data-bind to the `required` attribute.
+   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+   *    minlength.
+   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+   *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
+   *    any length.
+   * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
+   *    that contains the regular expression body that will be converted to a regular expression
+   *    as in the ngPattern directive.
+   * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
+   *    a RegExp found by evaluating the Angular expression given in the attribute value.
+   *    If the expression evaluates to a RegExp object, then this is used directly.
+   *    If the expression evaluates to a string, then it will be converted to a RegExp
+   *    after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
+   *    `new RegExp('^abc$')`.<br />
+   *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to
+   *    start at the index of the last search's match, thus not taking the whole input value into
+   *    account.
+   * @param {string=} ngChange Angular expression to be executed when input changes due to user
+   *    interaction with the input element.
+   * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
+   *    This parameter is ignored for input[type=password] controls, which will never trim the
+   *    input.
+   *
+   * @example
+      <example name="text-input-directive" module="textInputExample">
+        <file name="index.html">
+         <script>
+           angular.module('textInputExample', [])
+             .controller('ExampleController', ['$scope', function($scope) {
+               $scope.example = {
+                 text: 'guest',
+                 word: /^\s*\w*\s*$/
+               };
+             }]);
+         </script>
+         <form name="myForm" ng-controller="ExampleController">
+           <label>Single word:
+             <input type="text" name="input" ng-model="example.text"
+                    ng-pattern="example.word" required ng-trim="false">
+           </label>
+           <div role="alert">
+             <span class="error" ng-show="myForm.input.$error.required">
+               Required!</span>
+             <span class="error" ng-show="myForm.input.$error.pattern">
+               Single word only!</span>
+           </div>
+           <tt>text = {{example.text}}</tt><br/>
+           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+          </form>
+        </file>
+        <file name="protractor.js" type="protractor">
+          var text = element(by.binding('example.text'));
+          var valid = element(by.binding('myForm.input.$valid'));
+          var input = element(by.model('example.text'));
+
+          it('should initialize to model', function() {
+            expect(text.getText()).toContain('guest');
+            expect(valid.getText()).toContain('true');
+          });
+
+          it('should be invalid if empty', function() {
+            input.clear();
+            input.sendKeys('');
+
+            expect(text.getText()).toEqual('text =');
+            expect(valid.getText()).toContain('false');
+          });
+
+          it('should be invalid if multi word', function() {
+            input.clear();
+            input.sendKeys('hello world');
+
+            expect(valid.getText()).toContain('false');
+          });
+        </file>
+      </example>
+   */
+  'text': textInputType,
+
+    /**
+     * @ngdoc input
+     * @name input[date]
+     *
+     * @description
+     * Input with date validation and transformation. In browsers that do not yet support
+     * the HTML5 date input, a text element will be used. In that case, text must be entered in a valid ISO-8601
+     * date format (yyyy-MM-dd), for example: `2009-01-06`. Since many
+     * modern browsers do not yet support this input type, it is important to provide cues to users on the
+     * expected input format via a placeholder or label.
+     *
+     * The model must always be a Date object, otherwise Angular will throw an error.
+     * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
+     *
+     * The timezone to be used to read/write the `Date` instance in the model can be defined using
+     * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
+     *
+     * @param {string} ngModel Assignable angular expression to data-bind to.
+     * @param {string=} name Property name of the form under which the control is published.
+     * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
+     *   valid ISO date string (yyyy-MM-dd). You can also use interpolation inside this attribute
+     *   (e.g. `min="{{minDate | date:'yyyy-MM-dd'}}"`). Note that `min` will also add native HTML5
+     *   constraint validation.
+     * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be
+     *   a valid ISO date string (yyyy-MM-dd). You can also use interpolation inside this attribute
+     *   (e.g. `max="{{maxDate | date:'yyyy-MM-dd'}}"`). Note that `max` will also add native HTML5
+     *   constraint validation.
+     * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO date string
+     *   the `ngMin` expression evaluates to. Note that it does not set the `min` attribute.
+     * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO date string
+     *   the `ngMax` expression evaluates to. Note that it does not set the `max` attribute.
+     * @param {string=} required Sets `required` validation error key if the value is not entered.
+     * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+     *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+     *    `required` when you want to data-bind to the `required` attribute.
+     * @param {string=} ngChange Angular expression to be executed when input changes due to user
+     *    interaction with the input element.
+     *
+     * @example
+     <example name="date-input-directive" module="dateInputExample">
+     <file name="index.html">
+       <script>
+          angular.module('dateInputExample', [])
+            .controller('DateController', ['$scope', function($scope) {
+              $scope.example = {
+                value: new Date(2013, 9, 22)
+              };
+            }]);
+       </script>
+       <form name="myForm" ng-controller="DateController as dateCtrl">
+          <label for="exampleInput">Pick a date in 2013:</label>
+          <input type="date" id="exampleInput" name="input" ng-model="example.value"
+              placeholder="yyyy-MM-dd" min="2013-01-01" max="2013-12-31" required />
+          <div role="alert">
+            <span class="error" ng-show="myForm.input.$error.required">
+                Required!</span>
+            <span class="error" ng-show="myForm.input.$error.date">
+                Not a valid date!</span>
+           </div>
+           <tt>value = {{example.value | date: "yyyy-MM-dd"}}</tt><br/>
+           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+       </form>
+     </file>
+     <file name="protractor.js" type="protractor">
+        var value = element(by.binding('example.value | date: "yyyy-MM-dd"'));
+        var valid = element(by.binding('myForm.input.$valid'));
+        var input = element(by.model('example.value'));
+
+        // currently protractor/webdriver does not support
+        // sending keys to all known HTML5 input controls
+        // for various browsers (see https://github.com/angular/protractor/issues/562).
+        function setInput(val) {
+          // set the value of the element and force validation.
+          var scr = "var ipt = document.getElementById('exampleInput'); " +
+          "ipt.value = '" + val + "';" +
+          "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
+          browser.executeScript(scr);
+        }
+
+        it('should initialize to model', function() {
+          expect(value.getText()).toContain('2013-10-22');
+          expect(valid.getText()).toContain('myForm.input.$valid = true');
+        });
+
+        it('should be invalid if empty', function() {
+          setInput('');
+          expect(value.getText()).toEqual('value =');
+          expect(valid.getText()).toContain('myForm.input.$valid = false');
+        });
+
+        it('should be invalid if over max', function() {
+          setInput('2015-01-01');
+          expect(value.getText()).toContain('');
+          expect(valid.getText()).toContain('myForm.input.$valid = false');
+        });
+     </file>
+     </example>
+     */
+  'date': createDateInputType('date', DATE_REGEXP,
+         createDateParser(DATE_REGEXP, ['yyyy', 'MM', 'dd']),
+         'yyyy-MM-dd'),
+
+   /**
+    * @ngdoc input
+    * @name input[datetime-local]
+    *
+    * @description
+    * Input with datetime validation and transformation. In browsers that do not yet support
+    * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
+    * local datetime format (yyyy-MM-ddTHH:mm:ss), for example: `2010-12-28T14:57:00`.
+    *
+    * The model must always be a Date object, otherwise Angular will throw an error.
+    * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
+    *
+    * The timezone to be used to read/write the `Date` instance in the model can be defined using
+    * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
+    *
+    * @param {string} ngModel Assignable angular expression to data-bind to.
+    * @param {string=} name Property name of the form under which the control is published.
+    * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.
+    *   This must be a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss). You can also use interpolation
+    *   inside this attribute (e.g. `min="{{minDatetimeLocal | date:'yyyy-MM-ddTHH:mm:ss'}}"`).
+    *   Note that `min` will also add native HTML5 constraint validation.
+    * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.
+    *   This must be a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss). You can also use interpolation
+    *   inside this attribute (e.g. `max="{{maxDatetimeLocal | date:'yyyy-MM-ddTHH:mm:ss'}}"`).
+    *   Note that `max` will also add native HTML5 constraint validation.
+    * @param {(date|string)=} ngMin Sets the `min` validation error key to the Date / ISO datetime string
+    *   the `ngMin` expression evaluates to. Note that it does not set the `min` attribute.
+    * @param {(date|string)=} ngMax Sets the `max` validation error key to the Date / ISO datetime string
+    *   the `ngMax` expression evaluates to. Note that it does not set the `max` attribute.
+    * @param {string=} required Sets `required` validation error key if the value is not entered.
+    * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+    *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+    *    `required` when you want to data-bind to the `required` attribute.
+    * @param {string=} ngChange Angular expression to be executed when input changes due to user
+    *    interaction with the input element.
+    *
+    * @example
+    <example name="datetimelocal-input-directive" module="dateExample">
+    <file name="index.html">
+      <script>
+        angular.module('dateExample', [])
+          .controller('DateController', ['$scope', function($scope) {
+            $scope.example = {
+              value: new Date(2010, 11, 28, 14, 57)
+            };
+          }]);
+      </script>
+      <form name="myForm" ng-controller="DateController as dateCtrl">
+        <label for="exampleInput">Pick a date between in 2013:</label>
+        <input type="datetime-local" id="exampleInput" name="input" ng-model="example.value"
+            placeholder="yyyy-MM-ddTHH:mm:ss" min="2001-01-01T00:00:00" max="2013-12-31T00:00:00" required />
+        <div role="alert">
+          <span class="error" ng-show="myForm.input.$error.required">
+              Required!</span>
+          <span class="error" ng-show="myForm.input.$error.datetimelocal">
+              Not a valid date!</span>
+        </div>
+        <tt>value = {{example.value | date: "yyyy-MM-ddTHH:mm:ss"}}</tt><br/>
+        <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+        <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+        <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+        <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+      </form>
+    </file>
+    <file name="protractor.js" type="protractor">
+      var value = element(by.binding('example.value | date: "yyyy-MM-ddTHH:mm:ss"'));
+      var valid = element(by.binding('myForm.input.$valid'));
+      var input = element(by.model('example.value'));
+
+      // currently protractor/webdriver does not support
+      // sending keys to all known HTML5 input controls
+      // for various browsers (https://github.com/angular/protractor/issues/562).
+      function setInput(val) {
+        // set the value of the element and force validation.
+        var scr = "var ipt = document.getElementById('exampleInput'); " +
+        "ipt.value = '" + val + "';" +
+        "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
+        browser.executeScript(scr);
+      }
+
+      it('should initialize to model', function() {
+        expect(value.getText()).toContain('2010-12-28T14:57:00');
+        expect(valid.getText()).toContain('myForm.input.$valid = true');
+      });
+
+      it('should be invalid if empty', function() {
+        setInput('');
+        expect(value.getText()).toEqual('value =');
+        expect(valid.getText()).toContain('myForm.input.$valid = false');
+      });
+
+      it('should be invalid if over max', function() {
+        setInput('2015-01-01T23:59:00');
+        expect(value.getText()).toContain('');
+        expect(valid.getText()).toContain('myForm.input.$valid = false');
+      });
+    </file>
+    </example>
+    */
+  'datetime-local': createDateInputType('datetimelocal', DATETIMELOCAL_REGEXP,
+      createDateParser(DATETIMELOCAL_REGEXP, ['yyyy', 'MM', 'dd', 'HH', 'mm', 'ss', 'sss']),
+      'yyyy-MM-ddTHH:mm:ss.sss'),
+
+  /**
+   * @ngdoc input
+   * @name input[time]
+   *
+   * @description
+   * Input with time validation and transformation. In browsers that do not yet support
+   * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
+   * local time format (HH:mm:ss), for example: `14:57:00`. Model must be a Date object. This binding will always output a
+   * Date object to the model of January 1, 1970, or local date `new Date(1970, 0, 1, HH, mm, ss)`.
+   *
+   * The model must always be a Date object, otherwise Angular will throw an error.
+   * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
+   *
+   * The timezone to be used to read/write the `Date` instance in the model can be defined using
+   * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
+   *
+   * @param {string} ngModel Assignable angular expression to data-bind to.
+   * @param {string=} name Property name of the form under which the control is published.
+   * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.
+   *   This must be a valid ISO time format (HH:mm:ss). You can also use interpolation inside this
+   *   attribute (e.g. `min="{{minTime | date:'HH:mm:ss'}}"`). Note that `min` will also add
+   *   native HTML5 constraint validation.
+   * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.
+   *   This must be a valid ISO time format (HH:mm:ss). You can also use interpolation inside this
+   *   attribute (e.g. `max="{{maxTime | date:'HH:mm:ss'}}"`). Note that `max` will also add
+   *   native HTML5 constraint validation.
+   * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO time string the
+   *   `ngMin` expression evaluates to. Note that it does not set the `min` attribute.
+   * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO time string the
+   *   `ngMax` expression evaluates to. Note that it does not set the `max` attribute.
+   * @param {string=} required Sets `required` validation error key if the value is not entered.
+   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+   *    `required` when you want to data-bind to the `required` attribute.
+   * @param {string=} ngChange Angular expression to be executed when input changes due to user
+   *    interaction with the input element.
+   *
+   * @example
+   <example name="time-input-directive" module="timeExample">
+   <file name="index.html">
+     <script>
+      angular.module('timeExample', [])
+        .controller('DateController', ['$scope', function($scope) {
+          $scope.example = {
+            value: new Date(1970, 0, 1, 14, 57, 0)
+          };
+        }]);
+     </script>
+     <form name="myForm" ng-controller="DateController as dateCtrl">
+        <label for="exampleInput">Pick a between 8am and 5pm:</label>
+        <input type="time" id="exampleInput" name="input" ng-model="example.value"
+            placeholder="HH:mm:ss" min="08:00:00" max="17:00:00" required />
+        <div role="alert">
+          <span class="error" ng-show="myForm.input.$error.required">
+              Required!</span>
+          <span class="error" ng-show="myForm.input.$error.time">
+              Not a valid date!</span>
+        </div>
+        <tt>value = {{example.value | date: "HH:mm:ss"}}</tt><br/>
+        <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+        <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+        <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+        <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+     </form>
+   </file>
+   <file name="protractor.js" type="protractor">
+      var value = element(by.binding('example.value | date: "HH:mm:ss"'));
+      var valid = element(by.binding('myForm.input.$valid'));
+      var input = element(by.model('example.value'));
+
+      // currently protractor/webdriver does not support
+      // sending keys to all known HTML5 input controls
+      // for various browsers (https://github.com/angular/protractor/issues/562).
+      function setInput(val) {
+        // set the value of the element and force validation.
+        var scr = "var ipt = document.getElementById('exampleInput'); " +
+        "ipt.value = '" + val + "';" +
+        "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
+        browser.executeScript(scr);
+      }
+
+      it('should initialize to model', function() {
+        expect(value.getText()).toContain('14:57:00');
+        expect(valid.getText()).toContain('myForm.input.$valid = true');
+      });
+
+      it('should be invalid if empty', function() {
+        setInput('');
+        expect(value.getText()).toEqual('value =');
+        expect(valid.getText()).toContain('myForm.input.$valid = false');
+      });
+
+      it('should be invalid if over max', function() {
+        setInput('23:59:00');
+        expect(value.getText()).toContain('');
+        expect(valid.getText()).toContain('myForm.input.$valid = false');
+      });
+   </file>
+   </example>
+   */
+  'time': createDateInputType('time', TIME_REGEXP,
+      createDateParser(TIME_REGEXP, ['HH', 'mm', 'ss', 'sss']),
+     'HH:mm:ss.sss'),
+
+   /**
+    * @ngdoc input
+    * @name input[week]
+    *
+    * @description
+    * Input with week-of-the-year validation and transformation to Date. In browsers that do not yet support
+    * the HTML5 week input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
+    * week format (yyyy-W##), for example: `2013-W02`.
+    *
+    * The model must always be a Date object, otherwise Angular will throw an error.
+    * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
+    *
+    * The timezone to be used to read/write the `Date` instance in the model can be defined using
+    * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
+    *
+    * @param {string} ngModel Assignable angular expression to data-bind to.
+    * @param {string=} name Property name of the form under which the control is published.
+    * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.
+    *   This must be a valid ISO week format (yyyy-W##). You can also use interpolation inside this
+    *   attribute (e.g. `min="{{minWeek | date:'yyyy-Www'}}"`). Note that `min` will also add
+    *   native HTML5 constraint validation.
+    * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.
+    *   This must be a valid ISO week format (yyyy-W##). You can also use interpolation inside this
+    *   attribute (e.g. `max="{{maxWeek | date:'yyyy-Www'}}"`). Note that `max` will also add
+    *   native HTML5 constraint validation.
+    * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO week string
+    *   the `ngMin` expression evaluates to. Note that it does not set the `min` attribute.
+    * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO week string
+    *   the `ngMax` expression evaluates to. Note that it does not set the `max` attribute.
+    * @param {string=} required Sets `required` validation error key if the value is not entered.
+    * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+    *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+    *    `required` when you want to data-bind to the `required` attribute.
+    * @param {string=} ngChange Angular expression to be executed when input changes due to user
+    *    interaction with the input element.
+    *
+    * @example
+    <example name="week-input-directive" module="weekExample">
+    <file name="index.html">
+      <script>
+      angular.module('weekExample', [])
+        .controller('DateController', ['$scope', function($scope) {
+          $scope.example = {
+            value: new Date(2013, 0, 3)
+          };
+        }]);
+      </script>
+      <form name="myForm" ng-controller="DateController as dateCtrl">
+        <label>Pick a date between in 2013:
+          <input id="exampleInput" type="week" name="input" ng-model="example.value"
+                 placeholder="YYYY-W##" min="2012-W32"
+                 max="2013-W52" required />
+        </label>
+        <div role="alert">
+          <span class="error" ng-show="myForm.input.$error.required">
+              Required!</span>
+          <span class="error" ng-show="myForm.input.$error.week">
+              Not a valid date!</span>
+        </div>
+        <tt>value = {{example.value | date: "yyyy-Www"}}</tt><br/>
+        <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+        <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+        <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+        <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+      </form>
+    </file>
+    <file name="protractor.js" type="protractor">
+      var value = element(by.binding('example.value | date: "yyyy-Www"'));
+      var valid = element(by.binding('myForm.input.$valid'));
+      var input = element(by.model('example.value'));
+
+      // currently protractor/webdriver does not support
+      // sending keys to all known HTML5 input controls
+      // for various browsers (https://github.com/angular/protractor/issues/562).
+      function setInput(val) {
+        // set the value of the element and force validation.
+        var scr = "var ipt = document.getElementById('exampleInput'); " +
+        "ipt.value = '" + val + "';" +
+        "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
+        browser.executeScript(scr);
+      }
+
+      it('should initialize to model', function() {
+        expect(value.getText()).toContain('2013-W01');
+        expect(valid.getText()).toContain('myForm.input.$valid = true');
+      });
+
+      it('should be invalid if empty', function() {
+        setInput('');
+        expect(value.getText()).toEqual('value =');
+        expect(valid.getText()).toContain('myForm.input.$valid = false');
+      });
+
+      it('should be invalid if over max', function() {
+        setInput('2015-W01');
+        expect(value.getText()).toContain('');
+        expect(valid.getText()).toContain('myForm.input.$valid = false');
+      });
+    </file>
+    </example>
+    */
+  'week': createDateInputType('week', WEEK_REGEXP, weekParser, 'yyyy-Www'),
+
+  /**
+   * @ngdoc input
+   * @name input[month]
+   *
+   * @description
+   * Input with month validation and transformation. In browsers that do not yet support
+   * the HTML5 month input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
+   * month format (yyyy-MM), for example: `2009-01`.
+   *
+   * The model must always be a Date object, otherwise Angular will throw an error.
+   * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
+   * If the model is not set to the first of the month, the next view to model update will set it
+   * to the first of the month.
+   *
+   * The timezone to be used to read/write the `Date` instance in the model can be defined using
+   * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
+   *
+   * @param {string} ngModel Assignable angular expression to data-bind to.
+   * @param {string=} name Property name of the form under which the control is published.
+   * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.
+   *   This must be a valid ISO month format (yyyy-MM). You can also use interpolation inside this
+   *   attribute (e.g. `min="{{minMonth | date:'yyyy-MM'}}"`). Note that `min` will also add
+   *   native HTML5 constraint validation.
+   * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.
+   *   This must be a valid ISO month format (yyyy-MM). You can also use interpolation inside this
+   *   attribute (e.g. `max="{{maxMonth | date:'yyyy-MM'}}"`). Note that `max` will also add
+   *   native HTML5 constraint validation.
+   * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO week string
+   *   the `ngMin` expression evaluates to. Note that it does not set the `min` attribute.
+   * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO week string
+   *   the `ngMax` expression evaluates to. Note that it does not set the `max` attribute.
+
+   * @param {string=} required Sets `required` validation error key if the value is not entered.
+   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+   *    `required` when you want to data-bind to the `required` attribute.
+   * @param {string=} ngChange Angular expression to be executed when input changes due to user
+   *    interaction with the input element.
+   *
+   * @example
+   <example name="month-input-directive" module="monthExample">
+   <file name="index.html">
+     <script>
+      angular.module('monthExample', [])
+        .controller('DateController', ['$scope', function($scope) {
+          $scope.example = {
+            value: new Date(2013, 9, 1)
+          };
+        }]);
+     </script>
+     <form name="myForm" ng-controller="DateController as dateCtrl">
+       <label for="exampleInput">Pick a month in 2013:</label>
+       <input id="exampleInput" type="month" name="input" ng-model="example.value"
+          placeholder="yyyy-MM" min="2013-01" max="2013-12" required />
+       <div role="alert">
+         <span class="error" ng-show="myForm.input.$error.required">
+            Required!</span>
+         <span class="error" ng-show="myForm.input.$error.month">
+            Not a valid month!</span>
+       </div>
+       <tt>value = {{example.value | date: "yyyy-MM"}}</tt><br/>
+       <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+       <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+       <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+       <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+     </form>
+   </file>
+   <file name="protractor.js" type="protractor">
+      var value = element(by.binding('example.value | date: "yyyy-MM"'));
+      var valid = element(by.binding('myForm.input.$valid'));
+      var input = element(by.model('example.value'));
+
+      // currently protractor/webdriver does not support
+      // sending keys to all known HTML5 input controls
+      // for various browsers (https://github.com/angular/protractor/issues/562).
+      function setInput(val) {
+        // set the value of the element and force validation.
+        var scr = "var ipt = document.getElementById('exampleInput'); " +
+        "ipt.value = '" + val + "';" +
+        "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
+        browser.executeScript(scr);
+      }
+
+      it('should initialize to model', function() {
+        expect(value.getText()).toContain('2013-10');
+        expect(valid.getText()).toContain('myForm.input.$valid = true');
+      });
+
+      it('should be invalid if empty', function() {
+        setInput('');
+        expect(value.getText()).toEqual('value =');
+        expect(valid.getText()).toContain('myForm.input.$valid = false');
+      });
+
+      it('should be invalid if over max', function() {
+        setInput('2015-01');
+        expect(value.getText()).toContain('');
+        expect(valid.getText()).toContain('myForm.input.$valid = false');
+      });
+   </file>
+   </example>
+   */
+  'month': createDateInputType('month', MONTH_REGEXP,
+     createDateParser(MONTH_REGEXP, ['yyyy', 'MM']),
+     'yyyy-MM'),
+
+  /**
+   * @ngdoc input
+   * @name input[number]
+   *
+   * @description
+   * Text input with number validation and transformation. Sets the `number` validation
+   * error if not a valid number.
+   *
+   * <div class="alert alert-warning">
+   * The model must always be of type `number` otherwise Angular will throw an error.
+   * Be aware that a string containing a number is not enough. See the {@link ngModel:numfmt}
+   * error docs for more information and an example of how to convert your model if necessary.
+   * </div>
+   *
+   * ## Issues with HTML5 constraint validation
+   *
+   * In browsers that follow the
+   * [HTML5 specification](https://html.spec.whatwg.org/multipage/forms.html#number-state-%28type=number%29),
+   * `input[number]` does not work as expected with {@link ngModelOptions `ngModelOptions.allowInvalid`}.
+   * If a non-number is entered in the input, the browser will report the value as an empty string,
+   * which means the view / model values in `ngModel` and subsequently the scope value
+   * will also be an empty string.
+   *
+   *
+   * @param {string} ngModel Assignable angular expression to data-bind to.
+   * @param {string=} name Property name of the form under which the control is published.
+   * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.
+   * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.
+   * @param {string=} required Sets `required` validation error key if the value is not entered.
+   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+   *    `required` when you want to data-bind to the `required` attribute.
+   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+   *    minlength.
+   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+   *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
+   *    any length.
+   * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
+   *    that contains the regular expression body that will be converted to a regular expression
+   *    as in the ngPattern directive.
+   * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
+   *    a RegExp found by evaluating the Angular expression given in the attribute value.
+   *    If the expression evaluates to a RegExp object, then this is used directly.
+   *    If the expression evaluates to a string, then it will be converted to a RegExp
+   *    after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
+   *    `new RegExp('^abc$')`.<br />
+   *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to
+   *    start at the index of the last search's match, thus not taking the whole input value into
+   *    account.
+   * @param {string=} ngChange Angular expression to be executed when input changes due to user
+   *    interaction with the input element.
+   *
+   * @example
+      <example name="number-input-directive" module="numberExample">
+        <file name="index.html">
+         <script>
+           angular.module('numberExample', [])
+             .controller('ExampleController', ['$scope', function($scope) {
+               $scope.example = {
+                 value: 12
+               };
+             }]);
+         </script>
+         <form name="myForm" ng-controller="ExampleController">
+           <label>Number:
+             <input type="number" name="input" ng-model="example.value"
+                    min="0" max="99" required>
+          </label>
+           <div role="alert">
+             <span class="error" ng-show="myForm.input.$error.required">
+               Required!</span>
+             <span class="error" ng-show="myForm.input.$error.number">
+               Not valid number!</span>
+           </div>
+           <tt>value = {{example.value}}</tt><br/>
+           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+          </form>
+        </file>
+        <file name="protractor.js" type="protractor">
+          var value = element(by.binding('example.value'));
+          var valid = element(by.binding('myForm.input.$valid'));
+          var input = element(by.model('example.value'));
+
+          it('should initialize to model', function() {
+            expect(value.getText()).toContain('12');
+            expect(valid.getText()).toContain('true');
+          });
+
+          it('should be invalid if empty', function() {
+            input.clear();
+            input.sendKeys('');
+            expect(value.getText()).toEqual('value =');
+            expect(valid.getText()).toContain('false');
+          });
+
+          it('should be invalid if over max', function() {
+            input.clear();
+            input.sendKeys('123');
+            expect(value.getText()).toEqual('value =');
+            expect(valid.getText()).toContain('false');
+          });
+        </file>
+      </example>
+   */
+  'number': numberInputType,
+
+
+  /**
+   * @ngdoc input
+   * @name input[url]
+   *
+   * @description
+   * Text input with URL validation. Sets the `url` validation error key if the content is not a
+   * valid URL.
+   *
+   * <div class="alert alert-warning">
+   * **Note:** `input[url]` uses a regex to validate urls that is derived from the regex
+   * used in Chromium. If you need stricter validation, you can use `ng-pattern` or modify
+   * the built-in validators (see the {@link guide/forms Forms guide})
+   * </div>
+   *
+   * @param {string} ngModel Assignable angular expression to data-bind to.
+   * @param {string=} name Property name of the form under which the control is published.
+   * @param {string=} required Sets `required` validation error key if the value is not entered.
+   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+   *    `required` when you want to data-bind to the `required` attribute.
+   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+   *    minlength.
+   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+   *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
+   *    any length.
+   * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
+   *    that contains the regular expression body that will be converted to a regular expression
+   *    as in the ngPattern directive.
+   * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
+   *    a RegExp found by evaluating the Angular expression given in the attribute value.
+   *    If the expression evaluates to a RegExp object, then this is used directly.
+   *    If the expression evaluates to a string, then it will be converted to a RegExp
+   *    after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
+   *    `new RegExp('^abc$')`.<br />
+   *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to
+   *    start at the index of the last search's match, thus not taking the whole input value into
+   *    account.
+   * @param {string=} ngChange Angular expression to be executed when input changes due to user
+   *    interaction with the input element.
+   *
+   * @example
+      <example name="url-input-directive" module="urlExample">
+        <file name="index.html">
+         <script>
+           angular.module('urlExample', [])
+             .controller('ExampleController', ['$scope', function($scope) {
+               $scope.url = {
+                 text: 'http://google.com'
+               };
+             }]);
+         </script>
+         <form name="myForm" ng-controller="ExampleController">
+           <label>URL:
+             <input type="url" name="input" ng-model="url.text" required>
+           <label>
+           <div role="alert">
+             <span class="error" ng-show="myForm.input.$error.required">
+               Required!</span>
+             <span class="error" ng-show="myForm.input.$error.url">
+               Not valid url!</span>
+           </div>
+           <tt>text = {{url.text}}</tt><br/>
+           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+           <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/>
+          </form>
+        </file>
+        <file name="protractor.js" type="protractor">
+          var text = element(by.binding('url.text'));
+          var valid = element(by.binding('myForm.input.$valid'));
+          var input = element(by.model('url.text'));
+
+          it('should initialize to model', function() {
+            expect(text.getText()).toContain('http://google.com');
+            expect(valid.getText()).toContain('true');
+          });
+
+          it('should be invalid if empty', function() {
+            input.clear();
+            input.sendKeys('');
+
+            expect(text.getText()).toEqual('text =');
+            expect(valid.getText()).toContain('false');
+          });
+
+          it('should be invalid if not url', function() {
+            input.clear();
+            input.sendKeys('box');
+
+            expect(valid.getText()).toContain('false');
+          });
+        </file>
+      </example>
+   */
+  'url': urlInputType,
+
+
+  /**
+   * @ngdoc input
+   * @name input[email]
+   *
+   * @description
+   * Text input with email validation. Sets the `email` validation error key if not a valid email
+   * address.
+   *
+   * <div class="alert alert-warning">
+   * **Note:** `input[email]` uses a regex to validate email addresses that is derived from the regex
+   * used in Chromium. If you need stricter validation (e.g. requiring a top-level domain), you can
+   * use `ng-pattern` or modify the built-in validators (see the {@link guide/forms Forms guide})
+   * </div>
+   *
+   * @param {string} ngModel Assignable angular expression to data-bind to.
+   * @param {string=} name Property name of the form under which the control is published.
+   * @param {string=} required Sets `required` validation error key if the value is not entered.
+   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+   *    `required` when you want to data-bind to the `required` attribute.
+   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+   *    minlength.
+   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+   *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
+   *    any length.
+   * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
+   *    that contains the regular expression body that will be converted to a regular expression
+   *    as in the ngPattern directive.
+   * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
+   *    a RegExp found by evaluating the Angular expression given in the attribute value.
+   *    If the expression evaluates to a RegExp object, then this is used directly.
+   *    If the expression evaluates to a string, then it will be converted to a RegExp
+   *    after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
+   *    `new RegExp('^abc$')`.<br />
+   *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to
+   *    start at the index of the last search's match, thus not taking the whole input value into
+   *    account.
+   * @param {string=} ngChange Angular expression to be executed when input changes due to user
+   *    interaction with the input element.
+   *
+   * @example
+      <example name="email-input-directive" module="emailExample">
+        <file name="index.html">
+         <script>
+           angular.module('emailExample', [])
+             .controller('ExampleController', ['$scope', function($scope) {
+               $scope.email = {
+                 text: [email-masked]'
+               };
+             }]);
+         </script>
+           <form name="myForm" ng-controller="ExampleController">
+             <label>Email:
+               <input type="email" name="input" ng-model="email.text" required>
+             </label>
+             <div role="alert">
+               <span class="error" ng-show="myForm.input.$error.required">
+                 Required!</span>
+               <span class="error" ng-show="myForm.input.$error.email">
+                 Not valid email!</span>
+             </div>
+             <tt>text = {{email.text}}</tt><br/>
+             <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+             <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+             <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+             <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+             <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/>
+           </form>
+         </file>
+        <file name="protractor.js" type="protractor">
+          var text = element(by.binding('email.text'));
+          var valid = element(by.binding('myForm.input.$valid'));
+          var input = element(by.model('email.text'));
+
+          it('should initialize to model', function() {
+            expect(text.getText()).toContain([email-masked]');
+            expect(valid.getText()).toContain('true');
+          });
+
+          it('should be invalid if empty', function() {
+            input.clear();
+            input.sendKeys('');
+            expect(text.getText()).toEqual('text =');
+            expect(valid.getText()).toContain('false');
+          });
+
+          it('should be invalid if not email', function() {
+            input.clear();
+            input.sendKeys('xxx');
+
+            expect(valid.getText()).toContain('false');
+          });
+        </file>
+      </example>
+   */
+  'email': emailInputType,
+
+
+  /**
+   * @ngdoc input
+   * @name input[radio]
+   *
+   * @description
+   * HTML radio button.
+   *
+   * @param {string} ngModel Assignable angular expression to data-bind to.
+   * @param {string} value The value to which the `ngModel` expression should be set when selected.
+   *    Note that `value` only supports `string` values, i.e. the scope model needs to be a string,
+   *    too. Use `ngValue` if you need complex models (`number`, `object`, ...).
+   * @param {string=} name Property name of the form under which the control is published.
+   * @param {string=} ngChange Angular expression to be executed when input changes due to user
+   *    interaction with the input element.
+   * @param {string} ngValue Angular expression to which `ngModel` will be be set when the radio
+   *    is selected. Should be used instead of the `value` attribute if you need
+   *    a non-string `ngModel` (`boolean`, `array`, ...).
+   *
+   * @example
+      <example name="radio-input-directive" module="radioExample">
+        <file name="index.html">
+         <script>
+           angular.module('radioExample', [])
+             .controller('ExampleController', ['$scope', function($scope) {
+               $scope.color = {
+                 name: 'blue'
+               };
+               $scope.specialValue = {
+                 "id": "12345",
+                 "value": "green"
+               };
+             }]);
+         </script>
+         <form name="myForm" ng-controller="ExampleController">
+           <label>
+             <input type="radio" ng-model="color.name" value="red">
+             Red
+           </label><br/>
+           <label>
+             <input type="radio" ng-model="color.name" ng-value="specialValue">
+             Green
+           </label><br/>
+           <label>
+             <input type="radio" ng-model="color.name" value="blue">
+             Blue
+           </label><br/>
+           <tt>color = {{color.name | json}}</tt><br/>
+          </form>
+          Note that `ng-value="specialValue"` sets radio item's value to be the value of `$scope.specialValue`.
+        </file>
+        <file name="protractor.js" type="protractor">
+          it('should change state', function() {
+            var color = element(by.binding('color.name'));
+
+            expect(color.getText()).toContain('blue');
+
+            element.all(by.model('color.name')).get(0).click();
+
+            expect(color.getText()).toContain('red');
+          });
+        </file>
+      </example>
+   */
+  'radio': radioInputType,
+
+
+  /**
+   * @ngdoc input
+   * @name input[checkbox]
+   *
+   * @description
+   * HTML checkbox.
+   *
+   * @param {string} ngModel Assignable angular expression to data-bind to.
+   * @param {string=} name Property name of the form under which the control is published.
+   * @param {expression=} ngTrueValue The value to which the expression should be set when selected.
+   * @param {expression=} ngFalseValue The value to which the expression should be set when not selected.
+   * @param {string=} ngChange Angular expression to be executed when input changes due to user
+   *    interaction with the input element.
+   *
+   * @example
+      <example name="checkbox-input-directive" module="checkboxExample">
+        <file name="index.html">
+         <script>
+           angular.module('checkboxExample', [])
+             .controller('ExampleController', ['$scope', function($scope) {
+               $scope.checkboxModel = {
+                value1 : true,
+                value2 : 'YES'
+              };
+             }]);
+         </script>
+         <form name="myForm" ng-controller="ExampleController">
+           <label>Value1:
+             <input type="checkbox" ng-model="checkboxModel.value1">
+           </label><br/>
+           <label>Value2:
+             <input type="checkbox" ng-model="checkboxModel.value2"
+                    ng-true-value="'YES'" ng-false-value="'NO'">
+            </label><br/>
+           <tt>value1 = {{checkboxModel.value1}}</tt><br/>
+           <tt>value2 = {{checkboxModel.value2}}</tt><br/>
+          </form>
+        </file>
+        <file name="protractor.js" type="protractor">
+          it('should change state', function() {
+            var value1 = element(by.binding('checkboxModel.value1'));
+            var value2 = element(by.binding('checkboxModel.value2'));
+
+            expect(value1.getText()).toContain('true');
+            expect(value2.getText()).toContain('YES');
+
+            element(by.model('checkboxModel.value1')).click();
+            element(by.model('checkboxModel.value2')).click();
+
+            expect(value1.getText()).toContain('false');
+            expect(value2.getText()).toContain('NO');
+          });
+        </file>
+      </example>
+   */
+  'checkbox': checkboxInputType,
+
+  'hidden': noop,
+  'button': noop,
+  'submit': noop,
+  'reset': noop,
+  'file': noop
+};
+
+function stringBasedInputType(ctrl) {
+  ctrl.$formatters.push(function(value) {
+    return ctrl.$isEmpty(value) ? value : value.toString();
+  });
+}
+
+function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
+  baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
+  stringBasedInputType(ctrl);
+}
+
+function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {
+  var type = lowercase(element[0].type);
+
+  // In composition mode, users are still inputing intermediate text buffer,
+  // hold the listener until composition is done.
+  // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent
+  if (!$sniffer.android) {
+    var composing = false;
+
+    element.on('compositionstart', function(data) {
+      composing = true;
+    });
+
+    element.on('compositionend', function() {
+      composing = false;
+      listener();
+    });
+  }
+
+  var listener = function(ev) {
+    if (timeout) {
+      $browser.defer.cancel(timeout);
+      timeout = null;
+    }
+    if (composing) return;
+    var value = element.val(),
+        event = ev && ev.type;
+
+    // By default we will trim the value
+    // If the attribute ng-trim exists we will avoid trimming
+    // If input type is 'password', the value is never trimmed
+    if (type !== 'password' && (!attr.ngTrim || attr.ngTrim !== 'false')) {
+      value = trim(value);
+    }
+
+    // If a control is suffering from bad input (due to native validators), browsers discard its
+    // value, so it may be necessary to revalidate (by calling $setViewValue again) even if the
+    // control's value is the same empty value twice in a row.
+    if (ctrl.$viewValue !== value || (value === '' && ctrl.$$hasNativeValidators)) {
+      ctrl.$setViewValue(value, event);
+    }
+  };
+
+  // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the
+  // input event on backspace, delete or cut
+  if ($sniffer.hasEvent('input')) {
+    element.on('input', listener);
+  } else {
+    var timeout;
+
+    var deferListener = function(ev, input, origValue) {
+      if (!timeout) {
+        timeout = $browser.defer(function() {
+          timeout = null;
+          if (!input || input.value !== origValue) {
+            listener(ev);
+          }
+        });
+      }
+    };
+
+    element.on('keydown', function(event) {
+      var key = event.keyCode;
+
+      // ignore
+      //    command            modifiers                   arrows
+      if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return;
+
+      deferListener(event, this, this.value);
+    });
+
+    // if user modifies input value using context menu in IE, we need "paste" and "cut" events to catch it
+    if ($sniffer.hasEvent('paste')) {
+      element.on('paste cut', deferListener);
+    }
+  }
+
+  // if user paste into input using mouse on older browser
+  // or form autocomplete on newer browser, we need "change" event to catch it
+  element.on('change', listener);
+
+  ctrl.$render = function() {
+    // Workaround for Firefox validation #12102.
+    var value = ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue;
+    if (element.val() !== value) {
+      element.val(value);
+    }
+  };
+}
+
+function weekParser(isoWeek, existingDate) {
+  if (isDate(isoWeek)) {
+    return isoWeek;
+  }
+
+  if (isString(isoWeek)) {
+    WEEK_REGEXP.lastIndex = 0;
+    var parts = WEEK_REGEXP.exec(isoWeek);
+    if (parts) {
+      var year = +parts[1],
+          week = +parts[2],
+          hours = 0,
+          minutes = 0,
+          seconds = 0,
+          milliseconds = 0,
+          firstThurs = getFirstThursdayOfYear(year),
+          addDays = (week - 1) * 7;
+
+      if (existingDate) {
+        hours = existingDate.getHours();
+        minutes = existingDate.getMinutes();
+        seconds = existingDate.getSeconds();
+        milliseconds = existingDate.getMilliseconds();
+      }
+
+      return new Date(year, 0, firstThurs.getDate() + addDays, hours, minutes, seconds, milliseconds);
+    }
+  }
+
+  return NaN;
+}
+
+function createDateParser(regexp, mapping) {
+  return function(iso, date) {
+    var parts, map;
+
+    if (isDate(iso)) {
+      return iso;
+    }
+
+    if (isString(iso)) {
+      // When a date is JSON'ified to wraps itself inside of an extra
+      // set of double quotes. This makes the date parsing code unable
+      // to match the date string and parse it as a date.
+      if (iso.charAt(0) == '"' && iso.charAt(iso.length - 1) == '"') {
+        iso = iso.substring(1, iso.length - 1);
+      }
+      if (ISO_DATE_REGEXP.test(iso)) {
+        return new Date(iso);
+      }
+      regexp.lastIndex = 0;
+      parts = regexp.exec(iso);
+
+      if (parts) {
+        parts.shift();
+        if (date) {
+          map = {
+            yyyy: date.getFullYear(),
+            MM: date.getMonth() + 1,
+            dd: date.getDate(),
+            HH: date.getHours(),
+            mm: date.getMinutes(),
+            ss: date.getSeconds(),
+            sss: date.getMilliseconds() / 1000
+          };
+        } else {
+          map = { yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0 };
+        }
+
+        forEach(parts, function(part, index) {
+          if (index < mapping.length) {
+            map[mapping[index]] = +part;
+          }
+        });
+        return new Date(map.yyyy, map.MM - 1, map.dd, map.HH, map.mm, map.ss || 0, map.sss * 1000 || 0);
+      }
+    }
+
+    return NaN;
+  };
+}
+
+function createDateInputType(type, regexp, parseDate, format) {
+  return function dynamicDateInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter) {
+    badInputChecker(scope, element, attr, ctrl);
+    baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
+    var timezone = ctrl && ctrl.$options && ctrl.$options.timezone;
+    var previousDate;
+
+    ctrl.$$parserName = type;
+    ctrl.$parsers.push(function(value) {
+      if (ctrl.$isEmpty(value)) return null;
+      if (regexp.test(value)) {
+        // Note: We cannot read ctrl.$modelValue, as there might be a different
+        // parser/formatter in the processing chain so that the model
+        // contains some different data format!
+        var parsedDate = parseDate(value, previousDate);
+        if (timezone) {
+          parsedDate = convertTimezoneToLocal(parsedDate, timezone);
+        }
+        return parsedDate;
+      }
+      return undefined;
+    });
+
+    ctrl.$formatters.push(function(value) {
+      if (value && !isDate(value)) {
+        throw ngModelMinErr('datefmt', 'Expected `{0}` to be a date', value);
+      }
+      if (isValidDate(value)) {
+        previousDate = value;
+        if (previousDate && timezone) {
+          previousDate = convertTimezoneToLocal(previousDate, timezone, true);
+        }
+        return $filter('date')(value, format, timezone);
+      } else {
+        previousDate = null;
+        return '';
+      }
+    });
+
+    if (isDefined(attr.min) || attr.ngMin) {
+      var minVal;
+      ctrl.$validators.min = function(value) {
+        return !isValidDate(value) || isUndefined(minVal) || parseDate(value) >= minVal;
+      };
+      attr.$observe('min', function(val) {
+        minVal = parseObservedDateValue(val);
+        ctrl.$validate();
+      });
+    }
+
+    if (isDefined(attr.max) || attr.ngMax) {
+      var maxVal;
+      ctrl.$validators.max = function(value) {
+        return !isValidDate(value) || isUndefined(maxVal) || parseDate(value) <= maxVal;
+      };
+      attr.$observe('max', function(val) {
+        maxVal = parseObservedDateValue(val);
+        ctrl.$validate();
+      });
+    }
+
+    function isValidDate(value) {
+      // Invalid Date: getTime() returns NaN
+      return value && !(value.getTime && value.getTime() !== value.getTime());
+    }
+
+    function parseObservedDateValue(val) {
+      return isDefined(val) && !isDate(val) ? parseDate(val) || undefined : val;
+    }
+  };
+}
+
+function badInputChecker(scope, element, attr, ctrl) {
+  var node = element[0];
+  var nativeValidation = ctrl.$$hasNativeValidators = isObject(node.validity);
+  if (nativeValidation) {
+    ctrl.$parsers.push(function(value) {
+      var validity = element.prop(VALIDITY_STATE_PROPERTY) || {};
+      // Detect bug in FF35 for input[email] (https://bugzilla.mozilla.org/show_bug.cgi?id=1064430):
+      // - also sets validity.badInput (should only be validity.typeMismatch).
+      // - see http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#e-mail-state-(type=email)
+      // - can ignore this case as we can still read out the erroneous email...
+      return validity.badInput && !validity.typeMismatch ? undefined : value;
+    });
+  }
+}
+
+function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
+  badInputChecker(scope, element, attr, ctrl);
+  baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
+
+  ctrl.$$parserName = 'number';
+  ctrl.$parsers.push(function(value) {
+    if (ctrl.$isEmpty(value))      return null;
+    if (NUMBER_REGEXP.test(value)) return parseFloat(value);
+    return undefined;
+  });
+
+  ctrl.$formatters.push(function(value) {
+    if (!ctrl.$isEmpty(value)) {
+      if (!isNumber(value)) {
+        throw ngModelMinErr('numfmt', 'Expected `{0}` to be a number', value);
+      }
+      value = value.toString();
+    }
+    return value;
+  });
+
+  if (isDefined(attr.min) || attr.ngMin) {
+    var minVal;
+    ctrl.$validators.min = function(value) {
+      return ctrl.$isEmpty(value) || isUndefined(minVal) || value >= minVal;
+    };
+
+    attr.$observe('min', function(val) {
+      if (isDefined(val) && !isNumber(val)) {
+        val = parseFloat(val, 10);
+      }
+      minVal = isNumber(val) && !isNaN(val) ? val : undefined;
+      // TODO(matsko): implement validateLater to reduce number of validations
+      ctrl.$validate();
+    });
+  }
+
+  if (isDefined(attr.max) || attr.ngMax) {
+    var maxVal;
+    ctrl.$validators.max = function(value) {
+      return ctrl.$isEmpty(value) || isUndefined(maxVal) || value <= maxVal;
+    };
+
+    attr.$observe('max', function(val) {
+      if (isDefined(val) && !isNumber(val)) {
+        val = parseFloat(val, 10);
+      }
+      maxVal = isNumber(val) && !isNaN(val) ? val : undefined;
+      // TODO(matsko): implement validateLater to reduce number of validations
+      ctrl.$validate();
+    });
+  }
+}
+
+function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
+  // Note: no badInputChecker here by purpose as `url` is only a validation
+  // in browsers, i.e. we can always read out input.value even if it is not valid!
+  baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
+  stringBasedInputType(ctrl);
+
+  ctrl.$$parserName = 'url';
+  ctrl.$validators.url = function(modelValue, viewValue) {
+    var value = modelValue || viewValue;
+    return ctrl.$isEmpty(value) || URL_REGEXP.test(value);
+  };
+}
+
+function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
+  // Note: no badInputChecker here by purpose as `url` is only a validation
+  // in browsers, i.e. we can always read out input.value even if it is not valid!
+  baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
+  stringBasedInputType(ctrl);
+
+  ctrl.$$parserName = 'email';
+  ctrl.$validators.email = function(modelValue, viewValue) {
+    var value = modelValue || viewValue;
+    return ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value);
+  };
+}
+
+function radioInputType(scope, element, attr, ctrl) {
+  // make the name unique, if not defined
+  if (isUndefined(attr.name)) {
+    element.attr('name', nextUid());
+  }
+
+  var listener = function(ev) {
+    if (element[0].checked) {
+      ctrl.$setViewValue(attr.value, ev && ev.type);
+    }
+  };
+
+  element.on('click', listener);
+
+  ctrl.$render = function() {
+    var value = attr.value;
+    element[0].checked = (value == ctrl.$viewValue);
+  };
+
+  attr.$observe('value', ctrl.$render);
+}
+
+function parseConstantExpr($parse, context, name, expression, fallback) {
+  var parseFn;
+  if (isDefined(expression)) {
+    parseFn = $parse(expression);
+    if (!parseFn.constant) {
+      throw ngModelMinErr('constexpr', 'Expected constant expression for `{0}`, but saw ' +
+                                   '`{1}`.', name, expression);
+    }
+    return parseFn(context);
+  }
+  return fallback;
+}
+
+function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) {
+  var trueValue = parseConstantExpr($parse, scope, 'ngTrueValue', attr.ngTrueValue, true);
+  var falseValue = parseConstantExpr($parse, scope, 'ngFalseValue', attr.ngFalseValue, false);
+
+  var listener = function(ev) {
+    ctrl.$setViewValue(element[0].checked, ev && ev.type);
+  };
+
+  element.on('click', listener);
+
+  ctrl.$render = function() {
+    element[0].checked = ctrl.$viewValue;
+  };
+
+  // Override the standard `$isEmpty` because the $viewValue of an empty checkbox is always set to `false`
+  // This is because of the parser below, which compares the `$modelValue` with `trueValue` to convert
+  // it to a boolean.
+  ctrl.$isEmpty = function(value) {
+    return value === false;
+  };
+
+  ctrl.$formatters.push(function(value) {
+    return equals(value, trueValue);
+  });
+
+  ctrl.$parsers.push(function(value) {
+    return value ? trueValue : falseValue;
+  });
+}
+
+
+/**
+ * @ngdoc directive
+ * @name textarea
+ * @restrict E
+ *
+ * @description
+ * HTML textarea element control with angular data-binding. The data-binding and validation
+ * properties of this element are exactly the same as those of the
+ * {@link ng.directive:input input element}.
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+ *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+ *    `required` when you want to data-bind to the `required` attribute.
+ * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+ *    minlength.
+ * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+ *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any
+ *    length.
+ * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
+ *    a RegExp found by evaluating the Angular expression given in the attribute value.
+ *    If the expression evaluates to a RegExp object, then this is used directly.
+ *    If the expression evaluates to a string, then it will be converted to a RegExp
+ *    after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
+ *    `new RegExp('^abc$')`.<br />
+ *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to
+ *    start at the index of the last search's match, thus not taking the whole input value into
+ *    account.
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
+ *    interaction with the input element.
+ * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name input
+ * @restrict E
+ *
+ * @description
+ * HTML input element control. When used together with {@link ngModel `ngModel`}, it provides data-binding,
+ * input state control, and validation.
+ * Input control follows HTML5 input types and polyfills the HTML5 validation behavior for older browsers.
+ *
+ * <div class="alert alert-warning">
+ * **Note:** Not every feature offered is available for all input types.
+ * Specifically, data binding and event handling via `ng-model` is unsupported for `input[file]`.
+ * </div>
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
+ * @param {boolean=} ngRequired Sets `required` attribute if set to true
+ * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+ *    minlength.
+ * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+ *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any
+ *    length.
+ * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
+ *    a RegExp found by evaluating the Angular expression given in the attribute value.
+ *    If the expression evaluates to a RegExp object, then this is used directly.
+ *    If the expression evaluates to a string, then it will be converted to a RegExp
+ *    after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
+ *    `new RegExp('^abc$')`.<br />
+ *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to
+ *    start at the index of the last search's match, thus not taking the whole input value into
+ *    account.
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
+ *    interaction with the input element.
+ * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
+ *    This parameter is ignored for input[type=password] controls, which will never trim the
+ *    input.
+ *
+ * @example
+    <example name="input-directive" module="inputExample">
+      <file name="index.html">
+       <script>
+          angular.module('inputExample', [])
+            .controller('ExampleController', ['$scope', function($scope) {
+              $scope.user = {name: 'guest', last: 'visitor'};
+            }]);
+       </script>
+       <div ng-controller="ExampleController">
+         <form name="myForm">
+           <label>
+              User name:
+              <input type="text" name="userName" ng-model="user.name" required>
+           </label>
+           <div role="alert">
+             <span class="error" ng-show="myForm.userName.$error.required">
+              Required!</span>
+           </div>
+           <label>
+              Last name:
+              <input type="text" name="lastName" ng-model="user.last"
+              ng-minlength="3" ng-maxlength="10">
+           </label>
+           <div role="alert">
+             <span class="error" ng-show="myForm.lastName.$error.minlength">
+               Too short!</span>
+             <span class="error" ng-show="myForm.lastName.$error.maxlength">
+               Too long!</span>
+           </div>
+         </form>
+         <hr>
+         <tt>user = {{user}}</tt><br/>
+         <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br/>
+         <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br/>
+         <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br/>
+         <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br/>
+         <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+         <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+         <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br/>
+         <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br/>
+       </div>
+      </file>
+      <file name="protractor.js" type="protractor">
+        var user = element(by.exactBinding('user'));
+        var userNameValid = element(by.binding('myForm.userName.$valid'));
+        var lastNameValid = element(by.binding('myForm.lastName.$valid'));
+        var lastNameError = element(by.binding('myForm.lastName.$error'));
+        var formValid = element(by.binding('myForm.$valid'));
+        var userNameInput = element(by.model('user.name'));
+        var userLastInput = element(by.model('user.last'));
+
+        it('should initialize to model', function() {
+          expect(user.getText()).toContain('{"name":"guest","last":"visitor"}');
+          expect(userNameValid.getText()).toContain('true');
+          expect(formValid.getText()).toContain('true');
+        });
+
+        it('should be invalid if empty when required', function() {
+          userNameInput.clear();
+          userNameInput.sendKeys('');
+
+          expect(user.getText()).toContain('{"last":"visitor"}');
+          expect(userNameValid.getText()).toContain('false');
+          expect(formValid.getText()).toContain('false');
+        });
+
+        it('should be valid if empty when min length is set', function() {
+          userLastInput.clear();
+          userLastInput.sendKeys('');
+
+          expect(user.getText()).toContain('{"name":"guest","last":""}');
+          expect(lastNameValid.getText()).toContain('true');
+          expect(formValid.getText()).toContain('true');
+        });
+
+        it('should be invalid if less than required min length', function() {
+          userLastInput.clear();
+          userLastInput.sendKeys('xx');
+
+          expect(user.getText()).toContain('{"name":"guest"}');
+          expect(lastNameValid.getText()).toContain('false');
+          expect(lastNameError.getText()).toContain('minlength');
+          expect(formValid.getText()).toContain('false');
+        });
+
+        it('should be invalid if longer than max length', function() {
+          userLastInput.clear();
+          userLastInput.sendKeys('some ridiculously long name');
+
+          expect(user.getText()).toContain('{"name":"guest"}');
+          expect(lastNameValid.getText()).toContain('false');
+          expect(lastNameError.getText()).toContain('maxlength');
+          expect(formValid.getText()).toContain('false');
+        });
+      </file>
+    </example>
+ */
+var inputDirective = ['$browser', '$sniffer', '$filter', '$parse',
+    function($browser, $sniffer, $filter, $parse) {
+  return {
+    restrict: 'E',
+    require: ['?ngModel'],
+    link: {
+      pre: function(scope, element, attr, ctrls) {
+        if (ctrls[0]) {
+          (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrls[0], $sniffer,
+                                                              $browser, $filter, $parse);
+        }
+      }
+    }
+  };
+}];
+
+
+
+var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/;
+/**
+ * @ngdoc directive
+ * @name ngValue
+ *
+ * @description
+ * Binds the given expression to the value of `<option>` or {@link input[radio] `input[radio]`},
+ * so that when the element is selected, the {@link ngModel `ngModel`} of that element is set to
+ * the bound value.
+ *
+ * `ngValue` is useful when dynamically generating lists of radio buttons using
+ * {@link ngRepeat `ngRepeat`}, as shown below.
+ *
+ * Likewise, `ngValue` can be used to generate `<option>` elements for
+ * the {@link select `select`} element. In that case however, only strings are supported
+ * for the `value `attribute, so the resulting `ngModel` will always be a string.
+ * Support for `select` models with non-string values is available via `ngOptions`.
+ *
+ * @element input
+ * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute
+ *   of the `input` element
+ *
+ * @example
+    <example name="ngValue-directive" module="valueExample">
+      <file name="index.html">
+       <script>
+          angular.module('valueExample', [])
+            .controller('ExampleController', ['$scope', function($scope) {
+              $scope.names = ['pizza', 'unicorns', 'robots'];
+              $scope.my = { favorite: 'unicorns' };
+            }]);
+       </script>
+        <form ng-controller="ExampleController">
+          <h2>Which is your favorite?</h2>
+            <label ng-repeat="name in names" for="{{name}}">
+              {{name}}
+              <input type="radio"
+                     ng-model="my.favorite"
+                     ng-value="name"
+                     id="{{name}}"
+                     name="favorite">
+            </label>
+          <div>You chose {{my.favorite}}</div>
+        </form>
+      </file>
+      <file name="protractor.js" type="protractor">
+        var favorite = element(by.binding('my.favorite'));
+
+        it('should initialize to model', function() {
+          expect(favorite.getText()).toContain('unicorns');
+        });
+        it('should bind the values to the inputs', function() {
+          element.all(by.model('my.favorite')).get(0).click();
+          expect(favorite.getText()).toContain('pizza');
+        });
+      </file>
+    </example>
+ */
+var ngValueDirective = function() {
+  return {
+    restrict: 'A',
+    priority: 100,
+    compile: function(tpl, tplAttr) {
+      if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) {
+        return function ngValueConstantLink(scope, elm, attr) {
+          attr.$set('value', scope.$eval(attr.ngValue));
+        };
+      } else {
+        return function ngValueLink(scope, elm, attr) {
+          scope.$watch(attr.ngValue, function valueWatchAction(value) {
+            attr.$set('value', value);
+          });
+        };
+      }
+    }
+  };
+};
+
+/**
+ * @ngdoc directive
+ * @name ngBind
+ * @restrict AC
+ *
+ * @description
+ * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element
+ * with the value of a given expression, and to update the text content when the value of that
+ * expression changes.
+ *
+ * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like
+ * `{{ expression }}` which is similar but less verbose.
+ *
+ * It is preferable to use `ngBind` instead of `{{ expression }}` if a template is momentarily
+ * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an
+ * element attribute, it makes the bindings invisible to the user while the page is loading.
+ *
+ * An alternative solution to this problem would be using the
+ * {@link ng.directive:ngCloak ngCloak} directive.
+ *
+ *
+ * @element ANY
+ * @param {expression} ngBind {@link guide/expression Expression} to evaluate.
+ *
+ * @example
+ * Enter a name in the Live Preview text box; the greeting below the text box changes instantly.
+   <example module="bindExample">
+     <file name="index.html">
+       <script>
+         angular.module('bindExample', [])
+           .controller('ExampleController', ['$scope', function($scope) {
+             $scope.name = 'Whirled';
+           }]);
+       </script>
+       <div ng-controller="ExampleController">
+         <label>Enter name: <input type="text" ng-model="name"></label><br>
+         Hello <span ng-bind="name"></span>!
+       </div>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should check ng-bind', function() {
+         var nameInput = element(by.model('name'));
+
+         expect(element(by.binding('name')).getText()).toBe('Whirled');
+         nameInput.clear();
+         nameInput.sendKeys('world');
+         expect(element(by.binding('name')).getText()).toBe('world');
+       });
+     </file>
+   </example>
+ */
+var ngBindDirective = ['$compile', function($compile) {
+  return {
+    restrict: 'AC',
+    compile: function ngBindCompile(templateElement) {
+      $compile.$$addBindingClass(templateElement);
+      return function ngBindLink(scope, element, attr) {
+        $compile.$$addBindingInfo(element, attr.ngBind);
+        element = element[0];
+        scope.$watch(attr.ngBind, function ngBindWatchAction(value) {
+          element.textContent = isUndefined(value) ? '' : value;
+        });
+      };
+    }
+  };
+}];
+
+
+/**
+ * @ngdoc directive
+ * @name ngBindTemplate
+ *
+ * @description
+ * The `ngBindTemplate` directive specifies that the element
+ * text content should be replaced with the interpolation of the template
+ * in the `ngBindTemplate` attribute.
+ * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}`
+ * expressions. This directive is needed since some HTML elements
+ * (such as TITLE and OPTION) cannot contain SPAN elements.
+ *
+ * @element ANY
+ * @param {string} ngBindTemplate template of form
+ *   <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval.
+ *
+ * @example
+ * Try it here: enter text in text box and watch the greeting change.
+   <example module="bindExample">
+     <file name="index.html">
+       <script>
+         angular.module('bindExample', [])
+           .controller('ExampleController', ['$scope', function($scope) {
+             $scope.salutation = 'Hello';
+             $scope.name = 'World';
+           }]);
+       </script>
+       <div ng-controller="ExampleController">
+        <label>Salutation: <input type="text" ng-model="salutation"></label><br>
+        <label>Name: <input type="text" ng-model="name"></label><br>
+        <pre ng-bind-template="{{salutation}} {{name}}!"></pre>
+       </div>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should check ng-bind', function() {
+         var salutationElem = element(by.binding('salutation'));
+         var salutationInput = element(by.model('salutation'));
+         var nameInput = element(by.model('name'));
+
+         expect(salutationElem.getText()).toBe('Hello World!');
+
+         salutationInput.clear();
+         salutationInput.sendKeys('Greetings');
+         nameInput.clear();
+         nameInput.sendKeys('user');
+
+         expect(salutationElem.getText()).toBe('Greetings user!');
+       });
+     </file>
+   </example>
+ */
+var ngBindTemplateDirective = ['$interpolate', '$compile', function($interpolate, $compile) {
+  return {
+    compile: function ngBindTemplateCompile(templateElement) {
+      $compile.$$addBindingClass(templateElement);
+      return function ngBindTemplateLink(scope, element, attr) {
+        var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate));
+        $compile.$$addBindingInfo(element, interpolateFn.expressions);
+        element = element[0];
+        attr.$observe('ngBindTemplate', function(value) {
+          element.textContent = isUndefined(value) ? '' : value;
+        });
+      };
+    }
+  };
+}];
+
+
+/**
+ * @ngdoc directive
+ * @name ngBindHtml
+ *
+ * @description
+ * Evaluates the expression and inserts the resulting HTML into the element in a secure way. By default,
+ * the resulting HTML content will be sanitized using the {@link ngSanitize.$sanitize $sanitize} service.
+ * To utilize this functionality, ensure that `$sanitize` is available, for example, by including {@link
+ * ngSanitize} in your module's dependencies (not in core Angular). In order to use {@link ngSanitize}
+ * in your module's dependencies, you need to include "angular-sanitize.js" in your application.
+ *
+ * You may also bypass sanitization for values you know are safe. To do so, bind to
+ * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}.  See the example
+ * under {@link ng.$sce#show-me-an-example-using-sce- Strict Contextual Escaping (SCE)}.
+ *
+ * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you
+ * will have an exception (instead of an exploit.)
+ *
+ * @element ANY
+ * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate.
+ *
+ * @example
+
+   <example module="bindHtmlExample" deps="angular-sanitize.js">
+     <file name="index.html">
+       <div ng-controller="ExampleController">
+        <p ng-bind-html="myHTML"></p>
+       </div>
+     </file>
+
+     <file name="script.js">
+       angular.module('bindHtmlExample', ['ngSanitize'])
+         .controller('ExampleController', ['$scope', function($scope) {
+           $scope.myHTML =
+              'I am an <code>HTML</code>string with ' +
+              '<a href="#">links!</a> and other <em>stuff</em>';
+         }]);
+     </file>
+
+     <file name="protractor.js" type="protractor">
+       it('should check ng-bind-html', function() {
+         expect(element(by.binding('myHTML')).getText()).toBe(
+             'I am an HTMLstring with links! and other stuff');
+       });
+     </file>
+   </example>
+ */
+var ngBindHtmlDirective = ['$sce', '$parse', '$compile', function($sce, $parse, $compile) {
+  return {
+    restrict: 'A',
+    compile: function ngBindHtmlCompile(tElement, tAttrs) {
+      var ngBindHtmlGetter = $parse(tAttrs.ngBindHtml);
+      var ngBindHtmlWatch = $parse(tAttrs.ngBindHtml, function getStringValue(value) {
+        return (value || '').toString();
+      });
+      $compile.$$addBindingClass(tElement);
+
+      return function ngBindHtmlLink(scope, element, attr) {
+        $compile.$$addBindingInfo(element, attr.ngBindHtml);
+
+        scope.$watch(ngBindHtmlWatch, function ngBindHtmlWatchAction() {
+          // we re-evaluate the expr because we want a TrustedValueHolderType
+          // for $sce, not a string
+          element.html($sce.getTrustedHtml(ngBindHtmlGetter(scope)) || '');
+        });
+      };
+    }
+  };
+}];
+
+/**
+ * @ngdoc directive
+ * @name ngChange
+ *
+ * @description
+ * Evaluate the given expression when the user changes the input.
+ * The expression is evaluated immediately, unlike the JavaScript onchange event
+ * which only triggers at the end of a change (usually, when the user leaves the
+ * form element or presses the return key).
+ *
+ * The `ngChange` expression is only evaluated when a change in the input value causes
+ * a new value to be committed to the model.
+ *
+ * It will not be evaluated:
+ * * if the value returned from the `$parsers` transformation pipeline has not changed
+ * * if the input has continued to be invalid since the model will stay `null`
+ * * if the model is changed programmatically and not by a change to the input value
+ *
+ *
+ * Note, this directive requires `ngModel` to be present.
+ *
+ * @element input
+ * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change
+ * in input value.
+ *
+ * @example
+ * <example name="ngChange-directive" module="changeExample">
+ *   <file name="index.html">
+ *     <script>
+ *       angular.module('changeExample', [])
+ *         .controller('ExampleController', ['$scope', function($scope) {
+ *           $scope.counter = 0;
+ *           $scope.change = function() {
+ *             $scope.counter++;
+ *           };
+ *         }]);
+ *     </script>
+ *     <div ng-controller="ExampleController">
+ *       <input type="checkbox" ng-model="confirmed" ng-change="change()" id="ng-change-example1" />
+ *       <input type="checkbox" ng-model="confirmed" id="ng-change-example2" />
+ *       <label for="ng-change-example2">Confirmed</label><br />
+ *       <tt>debug = {{confirmed}}</tt><br/>
+ *       <tt>counter = {{counter}}</tt><br/>
+ *     </div>
+ *   </file>
+ *   <file name="protractor.js" type="protractor">
+ *     var counter = element(by.binding('counter'));
+ *     var debug = element(by.binding('confirmed'));
+ *
+ *     it('should evaluate the expression if changing from view', function() {
+ *       expect(counter.getText()).toContain('0');
+ *
+ *       element(by.id('ng-change-example1')).click();
+ *
+ *       expect(counter.getText()).toContain('1');
+ *       expect(debug.getText()).toContain('true');
+ *     });
+ *
+ *     it('should not evaluate the expression if changing from model', function() {
+ *       element(by.id('ng-change-example2')).click();
+
+ *       expect(counter.getText()).toContain('0');
+ *       expect(debug.getText()).toContain('true');
+ *     });
+ *   </file>
+ * </example>
+ */
+var ngChangeDirective = valueFn({
+  restrict: 'A',
+  require: 'ngModel',
+  link: function(scope, element, attr, ctrl) {
+    ctrl.$viewChangeListeners.push(function() {
+      scope.$eval(attr.ngChange);
+    });
+  }
+});
+
+function classDirective(name, selector) {
+  name = 'ngClass' + name;
+  return ['$animate', function($animate) {
+    return {
+      restrict: 'AC',
+      link: function(scope, element, attr) {
+        var oldVal;
+
+        scope.$watch(attr[name], ngClassWatchAction, true);
+
+        attr.$observe('class', function(value) {
+          ngClassWatchAction(scope.$eval(attr[name]));
+        });
+
+
+        if (name !== 'ngClass') {
+          scope.$watch('$index', function($index, old$index) {
+            // jshint bitwise: false
+            var mod = $index & 1;
+            if (mod !== (old$index & 1)) {
+              var classes = arrayClasses(scope.$eval(attr[name]));
+              mod === selector ?
+                addClasses(classes) :
+                removeClasses(classes);
+            }
+          });
+        }
+
+        function addClasses(classes) {
+          var newClasses = digestClassCounts(classes, 1);
+          attr.$addClass(newClasses);
+        }
+
+        function removeClasses(classes) {
+          var newClasses = digestClassCounts(classes, -1);
+          attr.$removeClass(newClasses);
+        }
+
+        function digestClassCounts(classes, count) {
+          // Use createMap() to prevent class assumptions involving property
+          // names in Object.prototype
+          var classCounts = element.data('$classCounts') || createMap();
+          var classesToUpdate = [];
+          forEach(classes, function(className) {
+            if (count > 0 || classCounts[className]) {
+              classCounts[className] = (classCounts[className] || 0) + count;
+              if (classCounts[className] === +(count > 0)) {
+                classesToUpdate.push(className);
+              }
+            }
+          });
+          element.data('$classCounts', classCounts);
+          return classesToUpdate.join(' ');
+        }
+
+        function updateClasses(oldClasses, newClasses) {
+          var toAdd = arrayDifference(newClasses, oldClasses);
+          var toRemove = arrayDifference(oldClasses, newClasses);
+          toAdd = digestClassCounts(toAdd, 1);
+          toRemove = digestClassCounts(toRemove, -1);
+          if (toAdd && toAdd.length) {
+            $animate.addClass(element, toAdd);
+          }
+          if (toRemove && toRemove.length) {
+            $animate.removeClass(element, toRemove);
+          }
+        }
+
+        function ngClassWatchAction(newVal) {
+          if (selector === true || scope.$index % 2 === selector) {
+            var newClasses = arrayClasses(newVal || []);
+            if (!oldVal) {
+              addClasses(newClasses);
+            } else if (!equals(newVal,oldVal)) {
+              var oldClasses = arrayClasses(oldVal);
+              updateClasses(oldClasses, newClasses);
+            }
+          }
+          oldVal = shallowCopy(newVal);
+        }
+      }
+    };
+
+    function arrayDifference(tokens1, tokens2) {
+      var values = [];
+
+      outer:
+      for (var i = 0; i < tokens1.length; i++) {
+        var token = tokens1[i];
+        for (var j = 0; j < tokens2.length; j++) {
+          if (token == tokens2[j]) continue outer;
+        }
+        values.push(token);
+      }
+      return values;
+    }
+
+    function arrayClasses(classVal) {
+      var classes = [];
+      if (isArray(classVal)) {
+        forEach(classVal, function(v) {
+          classes = classes.concat(arrayClasses(v));
+        });
+        return classes;
+      } else if (isString(classVal)) {
+        return classVal.split(' ');
+      } else if (isObject(classVal)) {
+        forEach(classVal, function(v, k) {
+          if (v) {
+            classes = classes.concat(k.split(' '));
+          }
+        });
+        return classes;
+      }
+      return classVal;
+    }
+  }];
+}
+
+/**
+ * @ngdoc directive
+ * @name ngClass
+ * @restrict AC
+ *
+ * @description
+ * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding
+ * an expression that represents all classes to be added.
+ *
+ * The directive operates in three different ways, depending on which of three types the expression
+ * evaluates to:
+ *
+ * 1. If the expression evaluates to a string, the string should be one or more space-delimited class
+ * names.
+ *
+ * 2. If the expression evaluates to an object, then for each key-value pair of the
+ * object with a truthy value the corresponding key is used as a class name.
+ *
+ * 3. If the expression evaluates to an array, each element of the array should either be a string as in
+ * type 1 or an object as in type 2. This means that you can mix strings and objects together in an array
+ * to give you more control over what CSS classes appear. See the code below for an example of this.
+ *
+ *
+ * The directive won't add duplicate classes if a particular class was already set.
+ *
+ * When the expression changes, the previously added classes are removed and only then are the
+ * new classes added.
+ *
+ * @animations
+ * **add** - happens just before the class is applied to the elements
+ *
+ * **remove** - happens just before the class is removed from the element
+ *
+ * @element ANY
+ * @param {expression} ngClass {@link guide/expression Expression} to eval. The result
+ *   of the evaluation can be a string representing space delimited class
+ *   names, an array, or a map of class names to boolean values. In the case of a map, the
+ *   names of the properties whose values are truthy will be added as css classes to the
+ *   element.
+ *
+ * @example Example that demonstrates basic bindings via ngClass directive.
+   <example>
+     <file name="index.html">
+       <p ng-class="{strike: deleted, bold: important, 'has-error': error}">Map Syntax Example</p>
+       <label>
+          <input type="checkbox" ng-model="deleted">
+          deleted (apply "strike" class)
+       </label><br>
+       <label>
+          <input type="checkbox" ng-model="important">
+          important (apply "bold" class)
+       </label><br>
+       <label>
+          <input type="checkbox" ng-model="error">
+          error (apply "has-error" class)
+       </label>
+       <hr>
+       <p ng-class="style">Using String Syntax</p>
+       <input type="text" ng-model="style"
+              placeholder="Type: bold strike red" aria-label="Type: bold strike red">
+       <hr>
+       <p ng-class="[style1, style2, style3]">Using Array Syntax</p>
+       <input ng-model="style1"
+              placeholder="Type: bold, strike or red" aria-label="Type: bold, strike or red"><br>
+       <input ng-model="style2"
+              placeholder="Type: bold, strike or red" aria-label="Type: bold, strike or red 2"><br>
+       <input ng-model="style3"
+              placeholder="Type: bold, strike or red" aria-label="Type: bold, strike or red 3"><br>
+       <hr>
+       <p ng-class="[style4, {orange: warning}]">Using Array and Map Syntax</p>
+       <input ng-model="style4" placeholder="Type: bold, strike" aria-label="Type: bold, strike"><br>
+       <label><input type="checkbox" ng-model="warning"> warning (apply "orange" class)</label>
+     </file>
+     <file name="style.css">
+       .strike {
+           text-decoration: line-through;
+       }
+       .bold {
+           font-weight: bold;
+       }
+       .red {
+           color: red;
+       }
+       .has-error {
+           color: red;
+           background-color: yellow;
+       }
+       .orange {
+           color: orange;
+       }
+     </file>
+     <file name="protractor.js" type="protractor">
+       var ps = element.all(by.css('p'));
+
+       it('should let you toggle the class', function() {
+
+         expect(ps.first().getAttribute('class')).not.toMatch(/bold/);
+         expect(ps.first().getAttribute('class')).not.toMatch(/has-error/);
+
+         element(by.model('important')).click();
+         expect(ps.first().getAttribute('class')).toMatch(/bold/);
+
+         element(by.model('error')).click();
+         expect(ps.first().getAttribute('class')).toMatch(/has-error/);
+       });
+
+       it('should let you toggle string example', function() {
+         expect(ps.get(1).getAttribute('class')).toBe('');
+         element(by.model('style')).clear();
+         element(by.model('style')).sendKeys('red');
+         expect(ps.get(1).getAttribute('class')).toBe('red');
+       });
+
+       it('array example should have 3 classes', function() {
+         expect(ps.get(2).getAttribute('class')).toBe('');
+         element(by.model('style1')).sendKeys('bold');
+         element(by.model('style2')).sendKeys('strike');
+         element(by.model('style3')).sendKeys('red');
+         expect(ps.get(2).getAttribute('class')).toBe('bold strike red');
+       });
+
+       it('array with map example should have 2 classes', function() {
+         expect(ps.last().getAttribute('class')).toBe('');
+         element(by.model('style4')).sendKeys('bold');
+         element(by.model('warning')).click();
+         expect(ps.last().getAttribute('class')).toBe('bold orange');
+       });
+     </file>
+   </example>
+
+   ## Animations
+
+   The example below demonstrates how to perform animations using ngClass.
+
+   <example module="ngAnimate" deps="angular-animate.js" animations="true">
+     <file name="index.html">
+      <input id="setbtn" type="button" value="set" ng-click="myVar='my-class'">
+      <input id="clearbtn" type="button" value="clear" ng-click="myVar=''">
+      <br>
+      <span class="base-class" ng-class="myVar">Sample Text</span>
+     </file>
+     <file name="style.css">
+       .base-class {
+         transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+       }
+
+       .base-class.my-class {
+         color: red;
+         font-size:3em;
+       }
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should check ng-class', function() {
+         expect(element(by.css('.base-class')).getAttribute('class')).not.
+           toMatch(/my-class/);
+
+         element(by.id('setbtn')).click();
+
+         expect(element(by.css('.base-class')).getAttribute('class')).
+           toMatch(/my-class/);
+
+         element(by.id('clearbtn')).click();
+
+         expect(element(by.css('.base-class')).getAttribute('class')).not.
+           toMatch(/my-class/);
+       });
+     </file>
+   </example>
+
+
+   ## ngClass and pre-existing CSS3 Transitions/Animations
+   The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure.
+   Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder
+   any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure
+   to view the step by step details of {@link $animate#addClass $animate.addClass} and
+   {@link $animate#removeClass $animate.removeClass}.
+ */
+var ngClassDirective = classDirective('', true);
+
+/**
+ * @ngdoc directive
+ * @name ngClassOdd
+ * @restrict AC
+ *
+ * @description
+ * The `ngClassOdd` and `ngClassEven` directives work exactly as
+ * {@link ng.directive:ngClass ngClass}, except they work in
+ * conjunction with `ngRepeat` and take effect only on odd (even) rows.
+ *
+ * This directive can be applied only within the scope of an
+ * {@link ng.directive:ngRepeat ngRepeat}.
+ *
+ * @element ANY
+ * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result
+ *   of the evaluation can be a string representing space delimited class names or an array.
+ *
+ * @example
+   <example>
+     <file name="index.html">
+        <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
+          <li ng-repeat="name in names">
+           <span ng-class-odd="'odd'" ng-class-even="'even'">
+             {{name}}
+           </span>
+          </li>
+        </ol>
+     </file>
+     <file name="style.css">
+       .odd {
+         color: red;
+       }
+       .even {
+         color: blue;
+       }
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should check ng-class-odd and ng-class-even', function() {
+         expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).
+           toMatch(/odd/);
+         expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).
+           toMatch(/even/);
+       });
+     </file>
+   </example>
+ */
+var ngClassOddDirective = classDirective('Odd', 0);
+
+/**
+ * @ngdoc directive
+ * @name ngClassEven
+ * @restrict AC
+ *
+ * @description
+ * The `ngClassOdd` and `ngClassEven` directives work exactly as
+ * {@link ng.directive:ngClass ngClass}, except they work in
+ * conjunction with `ngRepeat` and take effect only on odd (even) rows.
+ *
+ * This directive can be applied only within the scope of an
+ * {@link ng.directive:ngRepeat ngRepeat}.
+ *
+ * @element ANY
+ * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The
+ *   result of the evaluation can be a string representing space delimited class names or an array.
+ *
+ * @example
+   <example>
+     <file name="index.html">
+        <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
+          <li ng-repeat="name in names">
+           <span ng-class-odd="'odd'" ng-class-even="'even'">
+             {{name}} &nbsp; &nbsp; &nbsp;
+           </span>
+          </li>
+        </ol>
+     </file>
+     <file name="style.css">
+       .odd {
+         color: red;
+       }
+       .even {
+         color: blue;
+       }
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should check ng-class-odd and ng-class-even', function() {
+         expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).
+           toMatch(/odd/);
+         expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).
+           toMatch(/even/);
+       });
+     </file>
+   </example>
+ */
+var ngClassEvenDirective = classDirective('Even', 1);
+
+/**
+ * @ngdoc directive
+ * @name ngCloak
+ * @restrict AC
+ *
+ * @description
+ * The `ngCloak` directive is used to prevent the Angular html template from being briefly
+ * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this
+ * directive to avoid the undesirable flicker effect caused by the html template display.
+ *
+ * The directive can be applied to the `<body>` element, but the preferred usage is to apply
+ * multiple `ngCloak` directives to small portions of the page to permit progressive rendering
+ * of the browser view.
+ *
+ * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and
+ * `angular.min.js`.
+ * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
+ *
+ * ```css
+ * [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
+ *   display: none !important;
+ * }
+ * ```
+ *
+ * When this css rule is loaded by the browser, all html elements (including their children) that
+ * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive
+ * during the compilation of the template it deletes the `ngCloak` element attribute, making
+ * the compiled element visible.
+ *
+ * For the best result, the `angular.js` script must be loaded in the head section of the html
+ * document; alternatively, the css rule above must be included in the external stylesheet of the
+ * application.
+ *
+ * @element ANY
+ *
+ * @example
+   <example>
+     <file name="index.html">
+        <div id="template1" ng-cloak>{{ 'hello' }}</div>
+        <div id="template2" class="ng-cloak">{{ 'world' }}</div>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should remove the template directive and css class', function() {
+         expect($('#template1').getAttribute('ng-cloak')).
+           toBeNull();
+         expect($('#template2').getAttribute('ng-cloak')).
+           toBeNull();
+       });
+     </file>
+   </example>
+ *
+ */
+var ngCloakDirective = ngDirective({
+  compile: function(element, attr) {
+    attr.$set('ngCloak', undefined);
+    element.removeClass('ng-cloak');
+  }
+});
+
+/**
+ * @ngdoc directive
+ * @name ngController
+ *
+ * @description
+ * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular
+ * supports the principles behind the Model-View-Controller design pattern.
+ *
+ * MVC components in angular:
+ *
+ * * Model — Models are the properties of a scope; scopes are attached to the DOM where scope properties
+ *   are accessed through bindings.
+ * * View — The template (HTML with data bindings) that is rendered into the View.
+ * * Controller — The `ngController` directive specifies a Controller class; the class contains business
+ *   logic behind the application to decorate the scope with functions and values
+ *
+ * Note that you can also attach controllers to the DOM by declaring it in a route definition
+ * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller
+ * again using `ng-controller` in the template itself.  This will cause the controller to be attached
+ * and executed twice.
+ *
+ * @element ANY
+ * @scope
+ * @priority 500
+ * @param {expression} ngController Name of a constructor function registered with the current
+ * {@link ng.$controllerProvider $controllerProvider} or an {@link guide/expression expression}
+ * that on the current scope evaluates to a constructor function.
+ *
+ * The controller instance can be published into a scope property by specifying
+ * `ng-controller="as propertyName"`.
+ *
+ * If the current `$controllerProvider` is configured to use globals (via
+ * {@link ng.$controllerProvider#allowGlobals `$controllerProvider.allowGlobals()` }), this may
+ * also be the name of a globally accessible constructor function (not recommended).
+ *
+ * @example
+ * Here is a simple form for editing user contact information. Adding, removing, clearing, and
+ * greeting are methods declared on the controller (see source tab). These methods can
+ * easily be called from the angular markup. Any changes to the data are automatically reflected
+ * in the View without the need for a manual update.
+ *
+ * Two different declaration styles are included below:
+ *
+ * * one binds methods and properties directly onto the controller using `this`:
+ * `ng-controller="SettingsController1 as settings"`
+ * * one injects `$scope` into the controller:
+ * `ng-controller="SettingsController2"`
+ *
+ * The second option is more common in the Angular community, and is generally used in boilerplates
+ * and in this guide. However, there are advantages to binding properties directly to the controller
+ * and avoiding scope.
+ *
+ * * Using `controller as` makes it obvious which controller you are accessing in the template when
+ * multiple controllers apply to an element.
+ * * If you are writing your controllers as classes you have easier access to the properties and
+ * methods, which will appear on the scope, from inside the controller code.
+ * * Since there is always a `.` in the bindings, you don't have to worry about prototypal
+ * inheritance masking primitives.
+ *
+ * This example demonstrates the `controller as` syntax.
+ *
+ * <example name="ngControllerAs" module="controllerAsExample">
+ *   <file name="index.html">
+ *    <div id="ctrl-as-exmpl" ng-controller="SettingsController1 as settings">
+ *      <label>Name: <input type="text" ng-model="settings.name"/></label>
+ *      <button ng-click="settings.greet()">greet</button><br/>
+ *      Contact:
+ *      <ul>
+ *        <li ng-repeat="contact in settings.contacts">
+ *          <select ng-model="contact.type" aria-label="Contact method" id="select_{{$index}}">
+ *             <option>phone</option>
+ *             <option>email</option>
+ *          </select>
+ *          <input type="text" ng-model="contact.value" aria-labelledby="select_{{$index}}" />
+ *          <button ng-click="settings.clearContact(contact)">clear</button>
+ *          <button ng-click="settings.removeContact(contact)" aria-label="Remove">X</button>
+ *        </li>
+ *        <li><button ng-click="settings.addContact()">add</button></li>
+ *     </ul>
+ *    </div>
+ *   </file>
+ *   <file name="app.js">
+ *    angular.module('controllerAsExample', [])
+ *      .controller('SettingsController1', SettingsController1);
+ *
+ *    function SettingsController1() {
+ *      this.name = "John Smith";
+ *      this.contacts = [
+ *        {type: 'phone', value: '408 555 1212'},
+ *        {type: 'email', value: [email-masked]'} ];
+ *    }
+ *
+ *    SettingsController1.prototype.greet = function() {
+ *      alert(this.name);
+ *    };
+ *
+ *    SettingsController1.prototype.addContact = function() {
+ *      this.contacts.push({type: 'email', value: [email-masked]'});
+ *    };
+ *
+ *    SettingsController1.prototype.removeContact = function(contactToRemove) {
+ *     var index = this.contacts.indexOf(contactToRemove);
+ *      this.contacts.splice(index, 1);
+ *    };
+ *
+ *    SettingsController1.prototype.clearContact = function(contact) {
+ *      contact.type = 'phone';
+ *      contact.value = '';
+ *    };
+ *   </file>
+ *   <file name="protractor.js" type="protractor">
+ *     it('should check controller as', function() {
+ *       var container = element(by.id('ctrl-as-exmpl'));
+ *         expect(container.element(by.model('settings.name'))
+ *           .getAttribute('value')).toBe('John Smith');
+ *
+ *       var firstRepeat =
+ *           container.element(by.repeater('contact in settings.contacts').row(0));
+ *       var secondRepeat =
+ *           container.element(by.repeater('contact in settings.contacts').row(1));
+ *
+ *       expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
+ *           .toBe('408 555 1212');
+ *
+ *       expect(secondRepeat.element(by.model('contact.value')).getAttribute('value'))
+ *           .toBe([email-masked]');
+ *
+ *       firstRepeat.element(by.buttonText('clear')).click();
+ *
+ *       expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
+ *           .toBe('');
+ *
+ *       container.element(by.buttonText('add')).click();
+ *
+ *       expect(container.element(by.repeater('contact in settings.contacts').row(2))
+ *           .element(by.model('contact.value'))
+ *           .getAttribute('value'))
+ *           .toBe([email-masked]');
+ *     });
+ *   </file>
+ * </example>
+ *
+ * This example demonstrates the "attach to `$scope`" style of controller.
+ *
+ * <example name="ngController" module="controllerExample">
+ *  <file name="index.html">
+ *   <div id="ctrl-exmpl" ng-controller="SettingsController2">
+ *     <label>Name: <input type="text" ng-model="name"/></label>
+ *     <button ng-click="greet()">greet</button><br/>
+ *     Contact:
+ *     <ul>
+ *       <li ng-repeat="contact in contacts">
+ *         <select ng-model="contact.type" id="select_{{$index}}">
+ *            <option>phone</option>
+ *            <option>email</option>
+ *         </select>
+ *         <input type="text" ng-model="contact.value" aria-labelledby="select_{{$index}}" />
+ *         <button ng-click="clearContact(contact)">clear</button>
+ *         <button ng-click="removeContact(contact)">X</button>
+ *       </li>
+ *       <li>[ <button ng-click="addContact()">add</button> ]</li>
+ *    </ul>
+ *   </div>
+ *  </file>
+ *  <file name="app.js">
+ *   angular.module('controllerExample', [])
+ *     .controller('SettingsController2', ['$scope', SettingsController2]);
+ *
+ *   function SettingsController2($scope) {
+ *     $scope.name = "John Smith";
+ *     $scope.contacts = [
+ *       {type:'phone', value:'408 555 1212'},
+ *       {type:'email', value:[email-masked]'} ];
+ *
+ *     $scope.greet = function() {
+ *       alert($scope.name);
+ *     };
+ *
+ *     $scope.addContact = function() {
+ *       $scope.contacts.push({type:'email', value:[email-masked]'});
+ *     };
+ *
+ *     $scope.removeContact = function(contactToRemove) {
+ *       var index = $scope.contacts.indexOf(contactToRemove);
+ *       $scope.contacts.splice(index, 1);
+ *     };
+ *
+ *     $scope.clearContact = function(contact) {
+ *       contact.type = 'phone';
+ *       contact.value = '';
+ *     };
+ *   }
+ *  </file>
+ *  <file name="protractor.js" type="protractor">
+ *    it('should check controller', function() {
+ *      var container = element(by.id('ctrl-exmpl'));
+ *
+ *      expect(container.element(by.model('name'))
+ *          .getAttribute('value')).toBe('John Smith');
+ *
+ *      var firstRepeat =
+ *          container.element(by.repeater('contact in contacts').row(0));
+ *      var secondRepeat =
+ *          container.element(by.repeater('contact in contacts').row(1));
+ *
+ *      expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
+ *          .toBe('408 555 1212');
+ *      expect(secondRepeat.element(by.model('contact.value')).getAttribute('value'))
+ *          .toBe([email-masked]');
+ *
+ *      firstRepeat.element(by.buttonText('clear')).click();
+ *
+ *      expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
+ *          .toBe('');
+ *
+ *      container.element(by.buttonText('add')).click();
+ *
+ *      expect(container.element(by.repeater('contact in contacts').row(2))
+ *          .element(by.model('contact.value'))
+ *          .getAttribute('value'))
+ *          .toBe([email-masked]');
+ *    });
+ *  </file>
+ *</example>
+
+ */
+var ngControllerDirective = [function() {
+  return {
+    restrict: 'A',
+    scope: true,
+    controller: '@',
+    priority: 500
+  };
+}];
+
+/**
+ * @ngdoc directive
+ * @name ngCsp
+ *
+ * @element html
+ * @description
+ *
+ * Angular has some features that can break certain
+ * [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) rules.
+ *
+ * If you intend to implement these rules then you must tell Angular not to use these features.
+ *
+ * This is necessary when developing things like Google Chrome Extensions or Universal Windows Apps.
+ *
+ *
+ * The following rules affect Angular:
+ *
+ * * `unsafe-eval`: this rule forbids apps to use `eval` or `Function(string)` generated functions
+ * (among other things). Angular makes use of this in the {@link $parse} service to provide a 30%
+ * increase in the speed of evaluating Angular expressions.
+ *
+ * * `unsafe-inline`: this rule forbids apps from inject custom styles into the document. Angular
+ * makes use of this to include some CSS rules (e.g. {@link ngCloak} and {@link ngHide}).
+ * To make these directives work when a CSP rule is blocking inline styles, you must link to the
+ * `angular-csp.css` in your HTML manually.
+ *
+ * If you do not provide `ngCsp` then Angular tries to autodetect if CSP is blocking unsafe-eval
+ * and automatically deactivates this feature in the {@link $parse} service. This autodetection,
+ * however, triggers a CSP error to be logged in the console:
+ *
+ * ```
+ * Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of
+ * script in the following Content Security Policy directive: "default-src 'self'". Note that
+ * 'script-src' was not explicitly set, so 'default-src' is used as a fallback.
+ * ```
+ *
+ * This error is harmless but annoying. To prevent the error from showing up, put the `ngCsp`
+ * directive on an element of the HTML document that appears before the `<script>` tag that loads
+ * the `angular.js` file.
+ *
+ * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.*
+ *
+ * You can specify which of the CSP related Angular features should be deactivated by providing
+ * a value for the `ng-csp` attribute. The options are as follows:
+ *
+ * * no-inline-style: this stops Angular from injecting CSS styles into the DOM
+ *
+ * * no-unsafe-eval: this stops Angular from optimising $parse with unsafe eval of strings
+ *
+ * You can use these values in the following combinations:
+ *
+ *
+ * * No declaration means that Angular will assume that you can do inline styles, but it will do
+ * a runtime check for unsafe-eval. E.g. `<body>`. This is backwardly compatible with previous versions
+ * of Angular.
+ *
+ * * A simple `ng-csp` (or `data-ng-csp`) attribute will tell Angular to deactivate both inline
+ * styles and unsafe eval. E.g. `<body ng-csp>`. This is backwardly compatible with previous versions
+ * of Angular.
+ *
+ * * Specifying only `no-unsafe-eval` tells Angular that we must not use eval, but that we can inject
+ * inline styles. E.g. `<body ng-csp="no-unsafe-eval">`.
+ *
+ * * Specifying only `no-inline-style` tells Angular that we must not inject styles, but that we can
+ * run eval - no automcatic check for unsafe eval will occur. E.g. `<body ng-csp="no-inline-style">`
+ *
+ * * Specifying both `no-unsafe-eval` and `no-inline-style` tells Angular that we must not inject
+ * styles nor use eval, which is the same as an empty: ng-csp.
+ * E.g.`<body ng-csp="no-inline-style;no-unsafe-eval">`
+ *
+ * @example
+ * This example shows how to apply the `ngCsp` directive to the `html` tag.
+   ```html
+     <!doctype html>
+     <html ng-app ng-csp>
+     ...
+     ...
+     </html>
+   ```
+  * @example
+      // Note: the suffix `.csp` in the example name triggers
+      // csp mode in our http server!
+      <example name="example.csp" module="cspExample" ng-csp="true">
+        <file name="index.html">
+          <div ng-controller="MainController as ctrl">
+            <div>
+              <button ng-click="ctrl.inc()" id="inc">Increment</button>
+              <span id="counter">
+                {{ctrl.counter}}
+              </span>
+            </div>
+
+            <div>
+              <button ng-click="ctrl.evil()" id="evil">Evil</button>
+              <span id="evilError">
+                {{ctrl.evilError}}
+              </span>
+            </div>
+          </div>
+        </file>
+        <file name="script.js">
+           angular.module('cspExample', [])
+             .controller('MainController', function() {
+                this.counter = 0;
+                this.inc = function() {
+                  this.counter++;
+                };
+                this.evil = function() {
+                  // jshint evil:true
+                  try {
+                    eval('1+2');
+                  } catch (e) {
+                    this.evilError = e.message;
+                  }
+                };
+              });
+        </file>
+        <file name="protractor.js" type="protractor">
+          var util, webdriver;
+
+          var incBtn = element(by.id('inc'));
+          var counter = element(by.id('counter'));
+          var evilBtn = element(by.id('evil'));
+          var evilError = element(by.id('evilError'));
+
+          function getAndClearSevereErrors() {
+            return browser.manage().logs().get('browser').then(function(browserLog) {
+              return browserLog.filter(function(logEntry) {
+                return logEntry.level.value > webdriver.logging.Level.WARNING.value;
+              });
+            });
+          }
+
+          function clearErrors() {
+            getAndClearSevereErrors();
+          }
+
+          function expectNoErrors() {
+            getAndClearSevereErrors().then(function(filteredLog) {
+              expect(filteredLog.length).toEqual(0);
+              if (filteredLog.length) {
+                console.log('browser console errors: ' + util.inspect(filteredLog));
+              }
+            });
+          }
+
+          function expectError(regex) {
+            getAndClearSevereErrors().then(function(filteredLog) {
+              var found = false;
+              filteredLog.forEach(function(log) {
+                if (log.message.match(regex)) {
+                  found = true;
+                }
+              });
+              if (!found) {
+                throw new Error('expected an error that matches ' + regex);
+              }
+            });
+          }
+
+          beforeEach(function() {
+            util = require('util');
+            webdriver = require('protractor/node_modules/selenium-webdriver');
+          });
+
+          // For now, we only test on Chrome,
+          // as Safari does not load the page with Protractor's injected scripts,
+          // and Firefox webdriver always disables content security policy (#6358)
+          if (browser.params.browser !== 'chrome') {
+            return;
+          }
+
+          it('should not report errors when the page is loaded', function() {
+            // clear errors so we are not dependent on previous tests
+            clearErrors();
+            // Need to reload the page as the page is already loaded when
+            // we come here
+            browser.driver.getCurrentUrl().then(function(url) {
+              browser.get(url);
+            });
+            expectNoErrors();
+          });
+
+          it('should evaluate expressions', function() {
+            expect(counter.getText()).toEqual('0');
+            incBtn.click();
+            expect(counter.getText()).toEqual('1');
+            expectNoErrors();
+          });
+
+          it('should throw and report an error when using "eval"', function() {
+            evilBtn.click();
+            expect(evilError.getText()).toMatch(/Content Security Policy/);
+            expectError(/Content Security Policy/);
+          });
+        </file>
+      </example>
+  */
+
+// ngCsp is not implemented as a proper directive any more, because we need it be processed while we
+// bootstrap the system (before $parse is instantiated), for this reason we just have
+// the csp() fn that looks for the `ng-csp` attribute anywhere in the current doc
+
+/**
+ * @ngdoc directive
+ * @name ngClick
+ *
+ * @description
+ * The ngClick directive allows you to specify custom behavior when
+ * an element is clicked.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon
+ * click. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <button ng-click="count = count + 1" ng-init="count=0">
+        Increment
+      </button>
+      <span>
+        count: {{count}}
+      </span>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should check ng-click', function() {
+         expect(element(by.binding('count')).getText()).toMatch('0');
+         element(by.css('button')).click();
+         expect(element(by.binding('count')).getText()).toMatch('1');
+       });
+     </file>
+   </example>
+ */
+/*
+ * A collection of directives that allows creation of custom event handlers that are defined as
+ * angular expressions and are compiled and executed within the current scope.
+ */
+var ngEventDirectives = {};
+
+// For events that might fire synchronously during DOM manipulation
+// we need to execute their event handlers asynchronously using $evalAsync,
+// so that they are not executed in an inconsistent state.
+var forceAsyncEvents = {
+  'blur': true,
+  'focus': true
+};
+forEach(
+  'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '),
+  function(eventName) {
+    var directiveName = directiveNormalize('ng-' + eventName);
+    ngEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse, $rootScope) {
+      return {
+        restrict: 'A',
+        compile: function($element, attr) {
+          // We expose the powerful $event object on the scope that provides access to the Window,
+          // etc. that isn't protected by the fast paths in $parse.  We explicitly request better
+          // checks at the cost of speed since event handler expressions are not executed as
+          // frequently as regular change detection.
+          var fn = $parse(attr[directiveName], /* interceptorFn */ null, /* expensiveChecks */ true);
+          return function ngEventHandler(scope, element) {
+            element.on(eventName, function(event) {
+              var callback = function() {
+                fn(scope, {$event:event});
+              };
+              if (forceAsyncEvents[eventName] && $rootScope.$$phase) {
+                scope.$evalAsync(callback);
+              } else {
+                scope.$apply(callback);
+              }
+            });
+          };
+        }
+      };
+    }];
+  }
+);
+
+/**
+ * @ngdoc directive
+ * @name ngDblclick
+ *
+ * @description
+ * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon
+ * a dblclick. (The Event object is available as `$event`)
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <button ng-dblclick="count = count + 1" ng-init="count=0">
+        Increment (on double click)
+      </button>
+      count: {{count}}
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngMousedown
+ *
+ * @description
+ * The ngMousedown directive allows you to specify custom behavior on mousedown event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon
+ * mousedown. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <button ng-mousedown="count = count + 1" ng-init="count=0">
+        Increment (on mouse down)
+      </button>
+      count: {{count}}
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngMouseup
+ *
+ * @description
+ * Specify custom behavior on mouseup event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon
+ * mouseup. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <button ng-mouseup="count = count + 1" ng-init="count=0">
+        Increment (on mouse up)
+      </button>
+      count: {{count}}
+     </file>
+   </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngMouseover
+ *
+ * @description
+ * Specify custom behavior on mouseover event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon
+ * mouseover. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <button ng-mouseover="count = count + 1" ng-init="count=0">
+        Increment (when mouse is over)
+      </button>
+      count: {{count}}
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngMouseenter
+ *
+ * @description
+ * Specify custom behavior on mouseenter event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon
+ * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <button ng-mouseenter="count = count + 1" ng-init="count=0">
+        Increment (when mouse enters)
+      </button>
+      count: {{count}}
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngMouseleave
+ *
+ * @description
+ * Specify custom behavior on mouseleave event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon
+ * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <button ng-mouseleave="count = count + 1" ng-init="count=0">
+        Increment (when mouse leaves)
+      </button>
+      count: {{count}}
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngMousemove
+ *
+ * @description
+ * Specify custom behavior on mousemove event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon
+ * mousemove. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <button ng-mousemove="count = count + 1" ng-init="count=0">
+        Increment (when mouse moves)
+      </button>
+      count: {{count}}
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngKeydown
+ *
+ * @description
+ * Specify custom behavior on keydown event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon
+ * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <input ng-keydown="count = count + 1" ng-init="count=0">
+      key down count: {{count}}
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngKeyup
+ *
+ * @description
+ * Specify custom behavior on keyup event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon
+ * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
+ *
+ * @example
+   <example>
+     <file name="index.html">
+       <p>Typing in the input box below updates the key count</p>
+       <input ng-keyup="count = count + 1" ng-init="count=0"> key up count: {{count}}
+
+       <p>Typing in the input box below updates the keycode</p>
+       <input ng-keyup="event=$event">
+       <p>event keyCode: {{ event.keyCode }}</p>
+       <p>event altKey: {{ event.altKey }}</p>
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngKeypress
+ *
+ * @description
+ * Specify custom behavior on keypress event.
+ *
+ * @element ANY
+ * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon
+ * keypress. ({@link guide/expression#-event- Event object is available as `$event`}
+ * and can be interrogated for keyCode, altKey, etc.)
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <input ng-keypress="count = count + 1" ng-init="count=0">
+      key press count: {{count}}
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngSubmit
+ *
+ * @description
+ * Enables binding angular expressions to onsubmit events.
+ *
+ * Additionally it prevents the default action (which for form means sending the request to the
+ * server and reloading the current page), but only if the form does not contain `action`,
+ * `data-action`, or `x-action` attributes.
+ *
+ * <div class="alert alert-warning">
+ * **Warning:** Be careful not to cause "double-submission" by using both the `ngClick` and
+ * `ngSubmit` handlers together. See the
+ * {@link form#submitting-a-form-and-preventing-the-default-action `form` directive documentation}
+ * for a detailed discussion of when `ngSubmit` may be triggered.
+ * </div>
+ *
+ * @element form
+ * @priority 0
+ * @param {expression} ngSubmit {@link guide/expression Expression} to eval.
+ * ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example module="submitExample">
+     <file name="index.html">
+      <script>
+        angular.module('submitExample', [])
+          .controller('ExampleController', ['$scope', function($scope) {
+            $scope.list = [];
+            $scope.text = 'hello';
+            $scope.submit = function() {
+              if ($scope.text) {
+                $scope.list.push(this.text);
+                $scope.text = '';
+              }
+            };
+          }]);
+      </script>
+      <form ng-submit="submit()" ng-controller="ExampleController">
+        Enter text and hit enter:
+        <input type="text" ng-model="text" name="text" />
+        <input type="submit" id="submit" value="Submit" />
+        <pre>list={{list}}</pre>
+      </form>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should check ng-submit', function() {
+         expect(element(by.binding('list')).getText()).toBe('list=[]');
+         element(by.css('#submit')).click();
+         expect(element(by.binding('list')).getText()).toContain('hello');
+         expect(element(by.model('text')).getAttribute('value')).toBe('');
+       });
+       it('should ignore empty strings', function() {
+         expect(element(by.binding('list')).getText()).toBe('list=[]');
+         element(by.css('#submit')).click();
+         element(by.css('#submit')).click();
+         expect(element(by.binding('list')).getText()).toContain('hello');
+        });
+     </file>
+   </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngFocus
+ *
+ * @description
+ * Specify custom behavior on focus event.
+ *
+ * Note: As the `focus` event is executed synchronously when calling `input.focus()`
+ * AngularJS executes the expression using `scope.$evalAsync` if the event is fired
+ * during an `$apply` to ensure a consistent state.
+ *
+ * @element window, input, select, textarea, a
+ * @priority 0
+ * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon
+ * focus. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+ * See {@link ng.directive:ngClick ngClick}
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngBlur
+ *
+ * @description
+ * Specify custom behavior on blur event.
+ *
+ * A [blur event](https://developer.mozilla.org/en-US/docs/Web/Events/blur) fires when
+ * an element has lost focus.
+ *
+ * Note: As the `blur` event is executed synchronously also during DOM manipulations
+ * (e.g. removing a focussed input),
+ * AngularJS executes the expression using `scope.$evalAsync` if the event is fired
+ * during an `$apply` to ensure a consistent state.
+ *
+ * @element window, input, select, textarea, a
+ * @priority 0
+ * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon
+ * blur. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+ * See {@link ng.directive:ngClick ngClick}
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngCopy
+ *
+ * @description
+ * Specify custom behavior on copy event.
+ *
+ * @element window, input, select, textarea, a
+ * @priority 0
+ * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon
+ * copy. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <input ng-copy="copied=true" ng-init="copied=false; value='copy me'" ng-model="value">
+      copied: {{copied}}
+     </file>
+   </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngCut
+ *
+ * @description
+ * Specify custom behavior on cut event.
+ *
+ * @element window, input, select, textarea, a
+ * @priority 0
+ * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon
+ * cut. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <input ng-cut="cut=true" ng-init="cut=false; value='cut me'" ng-model="value">
+      cut: {{cut}}
+     </file>
+   </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngPaste
+ *
+ * @description
+ * Specify custom behavior on paste event.
+ *
+ * @element window, input, select, textarea, a
+ * @priority 0
+ * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon
+ * paste. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <input ng-paste="paste=true" ng-init="paste=false" placeholder='paste here'>
+      pasted: {{paste}}
+     </file>
+   </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngIf
+ * @restrict A
+ * @multiElement
+ *
+ * @description
+ * The `ngIf` directive removes or recreates a portion of the DOM tree based on an
+ * {expression}. If the expression assigned to `ngIf` evaluates to a false
+ * value then the element is removed from the DOM, otherwise a clone of the
+ * element is reinserted into the DOM.
+ *
+ * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the
+ * element in the DOM rather than changing its visibility via the `display` css property.  A common
+ * case when this difference is significant is when using css selectors that rely on an element's
+ * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes.
+ *
+ * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope
+ * is created when the element is restored.  The scope created within `ngIf` inherits from
+ * its parent scope using
+ * [prototypal inheritance](https://github.com/angular/angular.js/wiki/Understanding-Scopes#javascript-prototypal-inheritance).
+ * An important implication of this is if `ngModel` is used within `ngIf` to bind to
+ * a javascript primitive defined in the parent scope. In this case any modifications made to the
+ * variable within the child scope will override (hide) the value in the parent scope.
+ *
+ * Also, `ngIf` recreates elements using their compiled state. An example of this behavior
+ * is if an element's class attribute is directly modified after it's compiled, using something like
+ * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element
+ * the added class will be lost because the original compiled state is used to regenerate the element.
+ *
+ * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter`
+ * and `leave` effects.
+ *
+ * @animations
+ * enter - happens just after the `ngIf` contents change and a new DOM element is created and injected into the `ngIf` container
+ * leave - happens just before the `ngIf` contents are removed from the DOM
+ *
+ * @element ANY
+ * @scope
+ * @priority 600
+ * @param {expression} ngIf If the {@link guide/expression expression} is falsy then
+ *     the element is removed from the DOM tree. If it is truthy a copy of the compiled
+ *     element is added to the DOM tree.
+ *
+ * @example
+  <example module="ngAnimate" deps="angular-animate.js" animations="true">
+    <file name="index.html">
+      <label>Click me: <input type="checkbox" ng-model="checked" ng-init="checked=true" /></label><br/>
+      Show when checked:
+      <span ng-if="checked" class="animate-if">
+        This is removed when the checkbox is unchecked.
+      </span>
+    </file>
+    <file name="animations.css">
+      .animate-if {
+        background:white;
+        border:1px solid black;
+        padding:10px;
+      }
+
+      .animate-if.ng-enter, .animate-if.ng-leave {
+        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+      }
+
+      .animate-if.ng-enter,
+      .animate-if.ng-leave.ng-leave-active {
+        opacity:0;
+      }
+
+      .animate-if.ng-leave,
+      .animate-if.ng-enter.ng-enter-active {
+        opacity:1;
+      }
+    </file>
+  </example>
+ */
+var ngIfDirective = ['$animate', function($animate) {
+  return {
+    multiElement: true,
+    transclude: 'element',
+    priority: 600,
+    terminal: true,
+    restrict: 'A',
+    $$tlb: true,
+    link: function($scope, $element, $attr, ctrl, $transclude) {
+        var block, childScope, previousElements;
+        $scope.$watch($attr.ngIf, function ngIfWatchAction(value) {
+
+          if (value) {
+            if (!childScope) {
+              $transclude(function(clone, newScope) {
+                childScope = newScope;
+                clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' ');
+                // Note: We only need the first/last node of the cloned nodes.
+                // However, we need to keep the reference to the jqlite wrapper as it might be changed later
+                // by a directive with templateUrl when its template arrives.
+                block = {
+                  clone: clone
+                };
+                $animate.enter(clone, $element.parent(), $element);
+              });
+            }
+          } else {
+            if (previousElements) {
+              previousElements.remove();
+              previousElements = null;
+            }
+            if (childScope) {
+              childScope.$destroy();
+              childScope = null;
+            }
+            if (block) {
+              previousElements = getBlockNodes(block.clone);
+              $animate.leave(previousElements).then(function() {
+                previousElements = null;
+              });
+              block = null;
+            }
+          }
+        });
+    }
+  };
+}];
+
+/**
+ * @ngdoc directive
+ * @name ngInclude
+ * @restrict ECA
+ *
+ * @description
+ * Fetches, compiles and includes an external HTML fragment.
+ *
+ * By default, the template URL is restricted to the same domain and protocol as the
+ * application document. This is done by calling {@link $sce#getTrustedResourceUrl
+ * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols
+ * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or
+ * {@link $sce#trustAsResourceUrl wrap them} as trusted values. Refer to Angular's {@link
+ * ng.$sce Strict Contextual Escaping}.
+ *
+ * In addition, the browser's
+ * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)
+ * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)
+ * policy may further restrict whether the template is successfully loaded.
+ * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://`
+ * access on some browsers.
+ *
+ * @animations
+ * enter - animation is used to bring new content into the browser.
+ * leave - animation is used to animate existing content away.
+ *
+ * The enter and leave animation occur concurrently.
+ *
+ * @scope
+ * @priority 400
+ *
+ * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant,
+ *                 make sure you wrap it in **single** quotes, e.g. `src="'myPartialTemplate.html'"`.
+ * @param {string=} onload Expression to evaluate when a new partial is loaded.
+ *                  <div class="alert alert-warning">
+ *                  **Note:** When using onload on SVG elements in IE11, the browser will try to call
+ *                  a function with the name on the window element, which will usually throw a
+ *                  "function is undefined" error. To fix this, you can instead use `data-onload` or a
+ *                  different form that {@link guide/directive#normalization matches} `onload`.
+ *                  </div>
+   *
+ * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll
+ *                  $anchorScroll} to scroll the viewport after the content is loaded.
+ *
+ *                  - If the attribute is not set, disable scrolling.
+ *                  - If the attribute is set without value, enable scrolling.
+ *                  - Otherwise enable scrolling only if the expression evaluates to truthy value.
+ *
+ * @example
+  <example module="includeExample" deps="angular-animate.js" animations="true">
+    <file name="index.html">
+     <div ng-controller="ExampleController">
+       <select ng-model="template" ng-options="t.name for t in templates">
+        <option value="">(blank)</option>
+       </select>
+       url of the template: <code>{{template.url}}</code>
+       <hr/>
+       <div class="slide-animate-container">
+         <div class="slide-animate" ng-include="template.url"></div>
+       </div>
+     </div>
+    </file>
+    <file name="script.js">
+      angular.module('includeExample', ['ngAnimate'])
+        .controller('ExampleController', ['$scope', function($scope) {
+          $scope.templates =
+            [ { name: 'template1.html', url: 'template1.html'},
+              { name: 'template2.html', url: 'template2.html'} ];
+          $scope.template = $scope.templates[0];
+        }]);
+     </file>
+    <file name="template1.html">
+      Content of template1.html
+    </file>
+    <file name="template2.html">
+      Content of template2.html
+    </file>
+    <file name="animations.css">
+      .slide-animate-container {
+        position:relative;
+        background:white;
+        border:1px solid black;
+        height:40px;
+        overflow:hidden;
+      }
+
+      .slide-animate {
+        padding:10px;
+      }
+
+      .slide-animate.ng-enter, .slide-animate.ng-leave {
+        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+
+        position:absolute;
+        top:0;
+        left:0;
+        right:0;
+        bottom:0;
+        display:block;
+        padding:10px;
+      }
+
+      .slide-animate.ng-enter {
+        top:-50px;
+      }
+      .slide-animate.ng-enter.ng-enter-active {
+        top:0;
+      }
+
+      .slide-animate.ng-leave {
+        top:0;
+      }
+      .slide-animate.ng-leave.ng-leave-active {
+        top:50px;
+      }
+    </file>
+    <file name="protractor.js" type="protractor">
+      var templateSelect = element(by.model('template'));
+      var includeElem = element(by.css('[ng-include]'));
+
+      it('should load template1.html', function() {
+        expect(includeElem.getText()).toMatch(/Content of template1.html/);
+      });
+
+      it('should load template2.html', function() {
+        if (browser.params.browser == 'firefox') {
+          // Firefox can't handle using selects
+          // See https://github.com/angular/protractor/issues/480
+          return;
+        }
+        templateSelect.click();
+        templateSelect.all(by.css('option')).get(2).click();
+        expect(includeElem.getText()).toMatch(/Content of template2.html/);
+      });
+
+      it('should change to blank', function() {
+        if (browser.params.browser == 'firefox') {
+          // Firefox can't handle using selects
+          return;
+        }
+        templateSelect.click();
+        templateSelect.all(by.css('option')).get(0).click();
+        expect(includeElem.isPresent()).toBe(false);
+      });
+    </file>
+  </example>
+ */
+
+
+/**
+ * @ngdoc event
+ * @name ngInclude#$includeContentRequested
+ * @eventType emit on the scope ngInclude was declared in
+ * @description
+ * Emitted every time the ngInclude content is requested.
+ *
+ * @param {Object} angularEvent Synthetic event object.
+ * @param {String} src URL of content to load.
+ */
+
+
+/**
+ * @ngdoc event
+ * @name ngInclude#$includeContentLoaded
+ * @eventType emit on the current ngInclude scope
+ * @description
+ * Emitted every time the ngInclude content is reloaded.
+ *
+ * @param {Object} angularEvent Synthetic event object.
+ * @param {String} src URL of content to load.
+ */
+
+
+/**
+ * @ngdoc event
+ * @name ngInclude#$includeContentError
+ * @eventType emit on the scope ngInclude was declared in
+ * @description
+ * Emitted when a template HTTP request yields an erroneous response (status < 200 || status > 299)
+ *
+ * @param {Object} angularEvent Synthetic event object.
+ * @param {String} src URL of content to load.
+ */
+var ngIncludeDirective = ['$templateRequest', '$anchorScroll', '$animate',
+                  function($templateRequest,   $anchorScroll,   $animate) {
+  return {
+    restrict: 'ECA',
+    priority: 400,
+    terminal: true,
+    transclude: 'element',
+    controller: angular.noop,
+    compile: function(element, attr) {
+      var srcExp = attr.ngInclude || attr.src,
+          onloadExp = attr.onload || '',
+          autoScrollExp = attr.autoscroll;
+
+      return function(scope, $element, $attr, ctrl, $transclude) {
+        var changeCounter = 0,
+            currentScope,
+            previousElement,
+            currentElement;
+
+        var cleanupLastIncludeContent = function() {
+          if (previousElement) {
+            previousElement.remove();
+            previousElement = null;
+          }
+          if (currentScope) {
+            currentScope.$destroy();
+            currentScope = null;
+          }
+          if (currentElement) {
+            $animate.leave(currentElement).then(function() {
+              previousElement = null;
+            });
+            previousElement = currentElement;
+            currentElement = null;
+          }
+        };
+
+        scope.$watch(srcExp, function ngIncludeWatchAction(src) {
+          var afterAnimation = function() {
+            if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {
+              $anchorScroll();
+            }
+          };
+          var thisChangeId = ++changeCounter;
+
+          if (src) {
+            //set the 2nd param to true to ignore the template request error so that the inner
+            //contents and scope can be cleaned up.
+            $templateRequest(src, true).then(function(response) {
+              if (thisChangeId !== changeCounter) return;
+              var newScope = scope.$new();
+              ctrl.template = response;
+
+              // Note: This will also link all children of ng-include that were contained in the original
+              // html. If that content contains controllers, ... they could pollute/change the scope.
+              // However, using ng-include on an element with additional content does not make sense...
+              // Note: We can't remove them in the cloneAttchFn of $transclude as that
+              // function is called before linking the content, which would apply child
+              // directives to non existing elements.
+              var clone = $transclude(newScope, function(clone) {
+                cleanupLastIncludeContent();
+                $animate.enter(clone, null, $element).then(afterAnimation);
+              });
+
+              currentScope = newScope;
+              currentElement = clone;
+
+              currentScope.$emit('$includeContentLoaded', src);
+              scope.$eval(onloadExp);
+            }, function() {
+              if (thisChangeId === changeCounter) {
+                cleanupLastIncludeContent();
+                scope.$emit('$includeContentError', src);
+              }
+            });
+            scope.$emit('$includeContentRequested', src);
+          } else {
+            cleanupLastIncludeContent();
+            ctrl.template = null;
+          }
+        });
+      };
+    }
+  };
+}];
+
+// This directive is called during the $transclude call of the first `ngInclude` directive.
+// It will replace and compile the content of the element with the loaded template.
+// We need this directive so that the element content is already filled when
+// the link function of another directive on the same element as ngInclude
+// is called.
+var ngIncludeFillContentDirective = ['$compile',
+  function($compile) {
+    return {
+      restrict: 'ECA',
+      priority: -400,
+      require: 'ngInclude',
+      link: function(scope, $element, $attr, ctrl) {
+        if (/SVG/.test($element[0].toString())) {
+          // WebKit: https://bugs.webkit.org/show_bug.cgi?id=135698 --- SVG elements do not
+          // support innerHTML, so detect this here and try to generate the contents
+          // specially.
+          $element.empty();
+          $compile(jqLiteBuildFragment(ctrl.template, document).childNodes)(scope,
+              function namespaceAdaptedClone(clone) {
+            $element.append(clone);
+          }, {futureParentElement: $element});
+          return;
+        }
+
+        $element.html(ctrl.template);
+        $compile($element.contents())(scope);
+      }
+    };
+  }];
+
+/**
+ * @ngdoc directive
+ * @name ngInit
+ * @restrict AC
+ *
+ * @description
+ * The `ngInit` directive allows you to evaluate an expression in the
+ * current scope.
+ *
+ * <div class="alert alert-danger">
+ * This directive can be abused to add unnecessary amounts of logic into your templates.
+ * There are only a few appropriate uses of `ngInit`, such as for aliasing special properties of
+ * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below; and for injecting data via
+ * server side scripting. Besides these few cases, you should use {@link guide/controller controllers}
+ * rather than `ngInit` to initialize values on a scope.
+ * </div>
+ *
+ * <div class="alert alert-warning">
+ * **Note**: If you have assignment in `ngInit` along with a {@link ng.$filter `filter`}, make
+ * sure you have parentheses to ensure correct operator precedence:
+ * <pre class="prettyprint">
+ * `<div ng-init="test1 = ($index | toString)"></div>`
+ * </pre>
+ * </div>
+ *
+ * @priority 450
+ *
+ * @element ANY
+ * @param {expression} ngInit {@link guide/expression Expression} to eval.
+ *
+ * @example
+   <example module="initExample">
+     <file name="index.html">
+   <script>
+     angular.module('initExample', [])
+       .controller('ExampleController', ['$scope', function($scope) {
+         $scope.list = [['a', 'b'], ['c', 'd']];
+       }]);
+   </script>
+   <div ng-controller="ExampleController">
+     <div ng-repeat="innerList in list" ng-init="outerIndex = $index">
+       <div ng-repeat="value in innerList" ng-init="innerIndex = $index">
+          <span class="example-init">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span>
+       </div>
+     </div>
+   </div>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should alias index positions', function() {
+         var elements = element.all(by.css('.example-init'));
+         expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;');
+         expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;');
+         expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;');
+         expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;');
+       });
+     </file>
+   </example>
+ */
+var ngInitDirective = ngDirective({
+  priority: 450,
+  compile: function() {
+    return {
+      pre: function(scope, element, attrs) {
+        scope.$eval(attrs.ngInit);
+      }
+    };
+  }
+});
+
+/**
+ * @ngdoc directive
+ * @name ngList
+ *
+ * @description
+ * Text input that converts between a delimited string and an array of strings. The default
+ * delimiter is a comma followed by a space - equivalent to `ng-list=", "`. You can specify a custom
+ * delimiter as the value of the `ngList` attribute - for example, `ng-list=" | "`.
+ *
+ * The behaviour of the directive is affected by the use of the `ngTrim` attribute.
+ * * If `ngTrim` is set to `"false"` then whitespace around both the separator and each
+ *   list item is respected. This implies that the user of the directive is responsible for
+ *   dealing with whitespace but also allows you to use whitespace as a delimiter, such as a
+ *   tab or newline character.
+ * * Otherwise whitespace around the delimiter is ignored when splitting (although it is respected
+ *   when joining the list items back together) and whitespace around each list item is stripped
+ *   before it is added to the model.
+ *
+ * ### Example with Validation
+ *
+ * <example name="ngList-directive" module="listExample">
+ *   <file name="app.js">
+ *      angular.module('listExample', [])
+ *        .controller('ExampleController', ['$scope', function($scope) {
+ *          $scope.names = ['morpheus', 'neo', 'trinity'];
+ *        }]);
+ *   </file>
+ *   <file name="index.html">
+ *    <form name="myForm" ng-controller="ExampleController">
+ *      <label>List: <input name="namesInput" ng-model="names" ng-list required></label>
+ *      <span role="alert">
+ *        <span class="error" ng-show="myForm.namesInput.$error.required">
+ *        Required!</span>
+ *      </span>
+ *      <br>
+ *      <tt>names = {{names}}</tt><br/>
+ *      <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/>
+ *      <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/>
+ *      <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+ *      <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+ *     </form>
+ *   </file>
+ *   <file name="protractor.js" type="protractor">
+ *     var listInput = element(by.model('names'));
+ *     var names = element(by.exactBinding('names'));
+ *     var valid = element(by.binding('myForm.namesInput.$valid'));
+ *     var error = element(by.css('span.error'));
+ *
+ *     it('should initialize to model', function() {
+ *       expect(names.getText()).toContain('["morpheus","neo","trinity"]');
+ *       expect(valid.getText()).toContain('true');
+ *       expect(error.getCssValue('display')).toBe('none');
+ *     });
+ *
+ *     it('should be invalid if empty', function() {
+ *       listInput.clear();
+ *       listInput.sendKeys('');
+ *
+ *       expect(names.getText()).toContain('');
+ *       expect(valid.getText()).toContain('false');
+ *       expect(error.getCssValue('display')).not.toBe('none');
+ *     });
+ *   </file>
+ * </example>
+ *
+ * ### Example - splitting on newline
+ * <example name="ngList-directive-newlines">
+ *   <file name="index.html">
+ *    <textarea ng-model="list" ng-list="&#10;" ng-trim="false"></textarea>
+ *    <pre>{{ list | json }}</pre>
+ *   </file>
+ *   <file name="protractor.js" type="protractor">
+ *     it("should split the text by newlines", function() {
+ *       var listInput = element(by.model('list'));
+ *       var output = element(by.binding('list | json'));
+ *       listInput.sendKeys('abc\ndef\nghi');
+ *       expect(output.getText()).toContain('[\n  "abc",\n  "def",\n  "ghi"\n]');
+ *     });
+ *   </file>
+ * </example>
+ *
+ * @element input
+ * @param {string=} ngList optional delimiter that should be used to split the value.
+ */
+var ngListDirective = function() {
+  return {
+    restrict: 'A',
+    priority: 100,
+    require: 'ngModel',
+    link: function(scope, element, attr, ctrl) {
+      // We want to control whitespace trimming so we use this convoluted approach
+      // to access the ngList attribute, which doesn't pre-trim the attribute
+      var ngList = element.attr(attr.$attr.ngList) || ', ';
+      var trimValues = attr.ngTrim !== 'false';
+      var separator = trimValues ? trim(ngList) : ngList;
+
+      var parse = function(viewValue) {
+        // If the viewValue is invalid (say required but empty) it will be `undefined`
+        if (isUndefined(viewValue)) return;
+
+        var list = [];
+
+        if (viewValue) {
+          forEach(viewValue.split(separator), function(value) {
+            if (value) list.push(trimValues ? trim(value) : value);
+          });
+        }
+
+        return list;
+      };
+
+      ctrl.$parsers.push(parse);
+      ctrl.$formatters.push(function(value) {
+        if (isArray(value)) {
+          return value.join(ngList);
+        }
+
+        return undefined;
+      });
+
+      // Override the standard $isEmpty because an empty array means the input is empty.
+      ctrl.$isEmpty = function(value) {
+        return !value || !value.length;
+      };
+    }
+  };
+};
+
+/* global VALID_CLASS: true,
+  INVALID_CLASS: true,
+  PRISTINE_CLASS: true,
+  DIRTY_CLASS: true,
+  UNTOUCHED_CLASS: true,
+  TOUCHED_CLASS: true,
+*/
+
+var VALID_CLASS = 'ng-valid',
+    INVALID_CLASS = 'ng-invalid',
+    PRISTINE_CLASS = 'ng-pristine',
+    DIRTY_CLASS = 'ng-dirty',
+    UNTOUCHED_CLASS = 'ng-untouched',
+    TOUCHED_CLASS = 'ng-touched',
+    PENDING_CLASS = 'ng-pending';
+
+var ngModelMinErr = minErr('ngModel');
+
+/**
+ * @ngdoc type
+ * @name ngModel.NgModelController
+ *
+ * @property {*} $viewValue The actual value from the control's view. For `input` elements, this is a
+ * String. See {@link ngModel.NgModelController#$setViewValue} for information about when the $viewValue
+ * is set.
+ * @property {*} $modelValue The value in the model that the control is bound to.
+ * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever
+       the control reads value from the DOM. The functions are called in array order, each passing
+       its return value through to the next. The last return value is forwarded to the
+       {@link ngModel.NgModelController#$validators `$validators`} collection.
+
+Parsers are used to sanitize / convert the {@link ngModel.NgModelController#$viewValue
+`$viewValue`}.
+
+Returning `undefined` from a parser means a parse error occurred. In that case,
+no {@link ngModel.NgModelController#$validators `$validators`} will run and the `ngModel`
+will be set to `undefined` unless {@link ngModelOptions `ngModelOptions.allowInvalid`}
+is set to `true`. The parse error is stored in `ngModel.$error.parse`.
+
+ *
+ * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever
+       the model value changes. The functions are called in reverse array order, each passing the value through to the
+       next. The last return value is used as the actual DOM value.
+       Used to format / convert values for display in the control.
+ * ```js
+ * function formatter(value) {
+ *   if (value) {
+ *     return value.toUpperCase();
+ *   }
+ * }
+ * ngModel.$formatters.push(formatter);
+ * ```
+ *
+ * @property {Object.<string, function>} $validators A collection of validators that are applied
+ *      whenever the model value changes. The key value within the object refers to the name of the
+ *      validator while the function refers to the validation operation. The validation operation is
+ *      provided with the model value as an argument and must return a true or false value depending
+ *      on the response of that validation.
+ *
+ * ```js
+ * ngModel.$validators.validCharacters = function(modelValue, viewValue) {
+ *   var value = modelValue || viewValue;
+ *   return /[0-9]+/.test(value) &&
+ *          /[a-z]+/.test(value) &&
+ *          /[A-Z]+/.test(value) &&
+ *          /\W+/.test(value);
+ * };
+ * ```
+ *
+ * @property {Object.<string, function>} $asyncValidators A collection of validations that are expected to
+ *      perform an asynchronous validation (e.g. a HTTP request). The validation function that is provided
+ *      is expected to return a promise when it is run during the model validation process. Once the promise
+ *      is delivered then the validation status will be set to true when fulfilled and false when rejected.
+ *      When the asynchronous validators are triggered, each of the validators will run in parallel and the model
+ *      value will only be updated once all validators have been fulfilled. As long as an asynchronous validator
+ *      is unfulfilled, its key will be added to the controllers `$pending` property. Also, all asynchronous validators
+ *      will only run once all synchronous validators have passed.
+ *
+ * Please note that if $http is used then it is important that the server returns a success HTTP response code
+ * in order to fulfill the validation and a status level of `4xx` in order to reject the validation.
+ *
+ * ```js
+ * ngModel.$asyncValidators.uniqueUsername = function(modelValue, viewValue) {
+ *   var value = modelValue || viewValue;
+ *
+ *   // Lookup user by username
+ *   return $http.get('/api/users/' + value).
+ *      then(function resolved() {
+ *        //username exists, this means validation fails
+ *        return $q.reject('exists');
+ *      }, function rejected() {
+ *        //username does not exist, therefore this validation passes
+ *        return true;
+ *      });
+ * };
+ * ```
+ *
+ * @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the
+ *     view value has changed. It is called with no arguments, and its return value is ignored.
+ *     This can be used in place of additional $watches against the model value.
+ *
+ * @property {Object} $error An object hash with all failing validator ids as keys.
+ * @property {Object} $pending An object hash with all pending validator ids as keys.
+ *
+ * @property {boolean} $untouched True if control has not lost focus yet.
+ * @property {boolean} $touched True if control has lost focus.
+ * @property {boolean} $pristine True if user has not interacted with the control yet.
+ * @property {boolean} $dirty True if user has already interacted with the control.
+ * @property {boolean} $valid True if there is no error.
+ * @property {boolean} $invalid True if at least one error on the control.
+ * @property {string} $name The name attribute of the control.
+ *
+ * @description
+ *
+ * `NgModelController` provides API for the {@link ngModel `ngModel`} directive.
+ * The controller contains services for data-binding, validation, CSS updates, and value formatting
+ * and parsing. It purposefully does not contain any logic which deals with DOM rendering or
+ * listening to DOM events.
+ * Such DOM related logic should be provided by other directives which make use of
+ * `NgModelController` for data-binding to control elements.
+ * Angular provides this DOM logic for most {@link input `input`} elements.
+ * At the end of this page you can find a {@link ngModel.NgModelController#custom-control-example
+ * custom control example} that uses `ngModelController` to bind to `contenteditable` elements.
+ *
+ * @example
+ * ### Custom Control Example
+ * This example shows how to use `NgModelController` with a custom control to achieve
+ * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`)
+ * collaborate together to achieve the desired result.
+ *
+ * `contenteditable` is an HTML5 attribute, which tells the browser to let the element
+ * contents be edited in place by the user.
+ *
+ * We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize}
+ * module to automatically remove "bad" content like inline event listener (e.g. `<span onclick="...">`).
+ * However, as we are using `$sce` the model can still decide to provide unsafe content if it marks
+ * that content using the `$sce` service.
+ *
+ * <example name="NgModelController" module="customControl" deps="angular-sanitize.js">
+    <file name="style.css">
+      [contenteditable] {
+        border: 1px solid black;
+        background-color: white;
+        min-height: 20px;
+      }
+
+      .ng-invalid {
+        border: 1px solid red;
+      }
+
+    </file>
+    <file name="script.js">
+      angular.module('customControl', ['ngSanitize']).
+        directive('contenteditable', ['$sce', function($sce) {
+          return {
+            restrict: 'A', // only activate on element attribute
+            require: '?ngModel', // get a hold of NgModelController
+            link: function(scope, element, attrs, ngModel) {
+              if (!ngModel) return; // do nothing if no ng-model
+
+              // Specify how UI should be updated
+              ngModel.$render = function() {
+                element.html($sce.getTrustedHtml(ngModel.$viewValue || ''));
+              };
+
+              // Listen for change events to enable binding
+              element.on('blur keyup change', function() {
+                scope.$evalAsync(read);
+              });
+              read(); // initialize
+
+              // Write data to the model
+              function read() {
+                var html = element.html();
+                // When we clear the content editable the browser leaves a <br> behind
+                // If strip-br attribute is provided then we strip this out
+                if ( attrs.stripBr && html == '<br>' ) {
+                  html = '';
+                }
+                ngModel.$setViewValue(html);
+              }
+            }
+          };
+        }]);
+    </file>
+    <file name="index.html">
+      <form name="myForm">
+       <div contenteditable
+            name="myWidget" ng-model="userContent"
+            strip-br="true"
+            required>Change me!</div>
+        <span ng-show="myForm.myWidget.$error.required">Required!</span>
+       <hr>
+       <textarea ng-model="userContent" aria-label="Dynamic textarea"></textarea>
+      </form>
+    </file>
+    <file name="protractor.js" type="protractor">
+    it('should data-bind and become invalid', function() {
+      if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') {
+        // SafariDriver can't handle contenteditable
+        // and Firefox driver can't clear contenteditables very well
+        return;
+      }
+      var contentEditable = element(by.css('[contenteditable]'));
+      var content = 'Change me!';
+
+      expect(contentEditable.getText()).toEqual(content);
+
+      contentEditable.clear();
+      contentEditable.sendKeys(protractor.Key.BACK_SPACE);
+      expect(contentEditable.getText()).toEqual('');
+      expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/);
+    });
+    </file>
+ * </example>
+ *
+ *
+ */
+var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', '$timeout', '$rootScope', '$q', '$interpolate',
+    function($scope, $exceptionHandler, $attr, $element, $parse, $animate, $timeout, $rootScope, $q, $interpolate) {
+  this.$viewValue = Number.NaN;
+  this.$modelValue = Number.NaN;
+  this.$$rawModelValue = undefined; // stores the parsed modelValue / model set from scope regardless of validity.
+  this.$validators = {};
+  this.$asyncValidators = {};
+  this.$parsers = [];
+  this.$formatters = [];
+  this.$viewChangeListeners = [];
+  this.$untouched = true;
+  this.$touched = false;
+  this.$pristine = true;
+  this.$dirty = false;
+  this.$valid = true;
+  this.$invalid = false;
+  this.$error = {}; // keep invalid keys here
+  this.$$success = {}; // keep valid keys here
+  this.$pending = undefined; // keep pending keys here
+  this.$name = $interpolate($attr.name || '', false)($scope);
+  this.$$parentForm = nullFormCtrl;
+
+  var parsedNgModel = $parse($attr.ngModel),
+      parsedNgModelAssign = parsedNgModel.assign,
+      ngModelGet = parsedNgModel,
+      ngModelSet = parsedNgModelAssign,
+      pendingDebounce = null,
+      parserValid,
+      ctrl = this;
+
+  this.$$setOptions = function(options) {
+    ctrl.$options = options;
+    if (options && options.getterSetter) {
+      var invokeModelGetter = $parse($attr.ngModel + '()'),
+          invokeModelSetter = $parse($attr.ngModel + '($$$p)');
+
+      ngModelGet = function($scope) {
+        var modelValue = parsedNgModel($scope);
+        if (isFunction(modelValue)) {
+          modelValue = invokeModelGetter($scope);
+        }
+        return modelValue;
+      };
+      ngModelSet = function($scope, newValue) {
+        if (isFunction(parsedNgModel($scope))) {
+          invokeModelSetter($scope, {$$$p: ctrl.$modelValue});
+        } else {
+          parsedNgModelAssign($scope, ctrl.$modelValue);
+        }
+      };
+    } else if (!parsedNgModel.assign) {
+      throw ngModelMinErr('nonassign', "Expression '{0}' is non-assignable. Element: {1}",
+          $attr.ngModel, startingTag($element));
+    }
+  };
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$render
+   *
+   * @description
+   * Called when the view needs to be updated. It is expected that the user of the ng-model
+   * directive will implement this method.
+   *
+   * The `$render()` method is invoked in the following situations:
+   *
+   * * `$rollbackViewValue()` is called.  If we are rolling back the view value to the last
+   *   committed value then `$render()` is called to update the input control.
+   * * The value referenced by `ng-model` is changed programmatically and both the `$modelValue` and
+   *   the `$viewValue` are different from last time.
+   *
+   * Since `ng-model` does not do a deep watch, `$render()` is only invoked if the values of
+   * `$modelValue` and `$viewValue` are actually different from their previous value. If `$modelValue`
+   * or `$viewValue` are objects (rather than a string or number) then `$render()` will not be
+   * invoked if you only change a property on the objects.
+   */
+  this.$render = noop;
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$isEmpty
+   *
+   * @description
+   * This is called when we need to determine if the value of an input is empty.
+   *
+   * For instance, the required directive does this to work out if the input has data or not.
+   *
+   * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`.
+   *
+   * You can override this for input directives whose concept of being empty is different from the
+   * default. The `checkboxInputType` directive does this because in its case a value of `false`
+   * implies empty.
+   *
+   * @param {*} value The value of the input to check for emptiness.
+   * @returns {boolean} True if `value` is "empty".
+   */
+  this.$isEmpty = function(value) {
+    return isUndefined(value) || value === '' || value === null || value !== value;
+  };
+
+  var currentValidationRunId = 0;
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$setValidity
+   *
+   * @description
+   * Change the validity state, and notify the form.
+   *
+   * This method can be called within $parsers/$formatters or a custom validation implementation.
+   * However, in most cases it should be sufficient to use the `ngModel.$validators` and
+   * `ngModel.$asyncValidators` collections which will call `$setValidity` automatically.
+   *
+   * @param {string} validationErrorKey Name of the validator. The `validationErrorKey` will be assigned
+   *        to either `$error[validationErrorKey]` or `$pending[validationErrorKey]`
+   *        (for unfulfilled `$asyncValidators`), so that it is available for data-binding.
+   *        The `validationErrorKey` should be in camelCase and will get converted into dash-case
+   *        for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error`
+   *        class and can be bound to as  `{{someForm.someControl.$error.myError}}` .
+   * @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending (undefined),
+   *                          or skipped (null). Pending is used for unfulfilled `$asyncValidators`.
+   *                          Skipped is used by Angular when validators do not run because of parse errors and
+   *                          when `$asyncValidators` do not run because any of the `$validators` failed.
+   */
+  addSetValidityMethod({
+    ctrl: this,
+    $element: $element,
+    set: function(object, property) {
+      object[property] = true;
+    },
+    unset: function(object, property) {
+      delete object[property];
+    },
+    $animate: $animate
+  });
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$setPristine
+   *
+   * @description
+   * Sets the control to its pristine state.
+   *
+   * This method can be called to remove the `ng-dirty` class and set the control to its pristine
+   * state (`ng-pristine` class). A model is considered to be pristine when the control
+   * has not been changed from when first compiled.
+   */
+  this.$setPristine = function() {
+    ctrl.$dirty = false;
+    ctrl.$pristine = true;
+    $animate.removeClass($element, DIRTY_CLASS);
+    $animate.addClass($element, PRISTINE_CLASS);
+  };
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$setDirty
+   *
+   * @description
+   * Sets the control to its dirty state.
+   *
+   * This method can be called to remove the `ng-pristine` class and set the control to its dirty
+   * state (`ng-dirty` class). A model is considered to be dirty when the control has been changed
+   * from when first compiled.
+   */
+  this.$setDirty = function() {
+    ctrl.$dirty = true;
+    ctrl.$pristine = false;
+    $animate.removeClass($element, PRISTINE_CLASS);
+    $animate.addClass($element, DIRTY_CLASS);
+    ctrl.$$parentForm.$setDirty();
+  };
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$setUntouched
+   *
+   * @description
+   * Sets the control to its untouched state.
+   *
+   * This method can be called to remove the `ng-touched` class and set the control to its
+   * untouched state (`ng-untouched` class). Upon compilation, a model is set as untouched
+   * by default, however this function can be used to restore that state if the model has
+   * already been touched by the user.
+   */
+  this.$setUntouched = function() {
+    ctrl.$touched = false;
+    ctrl.$untouched = true;
+    $animate.setClass($element, UNTOUCHED_CLASS, TOUCHED_CLASS);
+  };
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$setTouched
+   *
+   * @description
+   * Sets the control to its touched state.
+   *
+   * This method can be called to remove the `ng-untouched` class and set the control to its
+   * touched state (`ng-touched` class). A model is considered to be touched when the user has
+   * first focused the control element and then shifted focus away from the control (blur event).
+   */
+  this.$setTouched = function() {
+    ctrl.$touched = true;
+    ctrl.$untouched = false;
+    $animate.setClass($element, TOUCHED_CLASS, UNTOUCHED_CLASS);
+  };
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$rollbackViewValue
+   *
+   * @description
+   * Cancel an update and reset the input element's value to prevent an update to the `$modelValue`,
+   * which may be caused by a pending debounced event or because the input is waiting for a some
+   * future event.
+   *
+   * If you have an input that uses `ng-model-options` to set up debounced events or events such
+   * as blur you can have a situation where there is a period when the `$viewValue`
+   * is out of synch with the ngModel's `$modelValue`.
+   *
+   * In this case, you can run into difficulties if you try to update the ngModel's `$modelValue`
+   * programmatically before these debounced/future events have resolved/occurred, because Angular's
+   * dirty checking mechanism is not able to tell whether the model has actually changed or not.
+   *
+   * The `$rollbackViewValue()` method should be called before programmatically changing the model of an
+   * input which may have such events pending. This is important in order to make sure that the
+   * input field will be updated with the new model value and any pending operations are cancelled.
+   *
+   * <example name="ng-model-cancel-update" module="cancel-update-example">
+   *   <file name="app.js">
+   *     angular.module('cancel-update-example', [])
+   *
+   *     .controller('CancelUpdateController', ['$scope', function($scope) {
+   *       $scope.resetWithCancel = function(e) {
+   *         if (e.keyCode == 27) {
+   *           $scope.myForm.myInput1.$rollbackViewValue();
+   *           $scope.myValue = '';
+   *         }
+   *       };
+   *       $scope.resetWithoutCancel = function(e) {
+   *         if (e.keyCode == 27) {
+   *           $scope.myValue = '';
+   *         }
+   *       };
+   *     }]);
+   *   </file>
+   *   <file name="index.html">
+   *     <div ng-controller="CancelUpdateController">
+   *       <p>Try typing something in each input.  See that the model only updates when you
+   *          blur off the input.
+   *        </p>
+   *        <p>Now see what happens if you start typing then press the Escape key</p>
+   *
+   *       <form name="myForm" ng-model-options="{ updateOn: 'blur' }">
+   *         <p id="inputDescription1">With $rollbackViewValue()</p>
+   *         <input name="myInput1" aria-describedby="inputDescription1" ng-model="myValue"
+   *                ng-keydown="resetWithCancel($event)"><br/>
+   *         myValue: "{{ myValue }}"
+   *
+   *         <p id="inputDescription2">Without $rollbackViewValue()</p>
+   *         <input name="myInput2" aria-describedby="inputDescription2" ng-model="myValue"
+   *                ng-keydown="resetWithoutCancel($event)"><br/>
+   *         myValue: "{{ myValue }}"
+   *       </form>
+   *     </div>
+   *   </file>
+   * </example>
+   */
+  this.$rollbackViewValue = function() {
+    $timeout.cancel(pendingDebounce);
+    ctrl.$viewValue = ctrl.$$lastCommittedViewValue;
+    ctrl.$render();
+  };
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$validate
+   *
+   * @description
+   * Runs each of the registered validators (first synchronous validators and then
+   * asynchronous validators).
+   * If the validity changes to invalid, the model will be set to `undefined`,
+   * unless {@link ngModelOptions `ngModelOptions.allowInvalid`} is `true`.
+   * If the validity changes to valid, it will set the model to the last available valid
+   * `$modelValue`, i.e. either the last parsed value or the last value set from the scope.
+   */
+  this.$validate = function() {
+    // ignore $validate before model is initialized
+    if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {
+      return;
+    }
+
+    var viewValue = ctrl.$$lastCommittedViewValue;
+    // Note: we use the $$rawModelValue as $modelValue might have been
+    // set to undefined during a view -> model update that found validation
+    // errors. We can't parse the view here, since that could change
+    // the model although neither viewValue nor the model on the scope changed
+    var modelValue = ctrl.$$rawModelValue;
+
+    var prevValid = ctrl.$valid;
+    var prevModelValue = ctrl.$modelValue;
+
+    var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;
+
+    ctrl.$$runValidators(modelValue, viewValue, function(allValid) {
+      // If there was no change in validity, don't update the model
+      // This prevents changing an invalid modelValue to undefined
+      if (!allowInvalid && prevValid !== allValid) {
+        // Note: Don't check ctrl.$valid here, as we could have
+        // external validators (e.g. calculated on the server),
+        // that just call $setValidity and need the model value
+        // to calculate their validity.
+        ctrl.$modelValue = allValid ? modelValue : undefined;
+
+        if (ctrl.$modelValue !== prevModelValue) {
+          ctrl.$$writeModelToScope();
+        }
+      }
+    });
+
+  };
+
+  this.$$runValidators = function(modelValue, viewValue, doneCallback) {
+    currentValidationRunId++;
+    var localValidationRunId = currentValidationRunId;
+
+    // check parser error
+    if (!processParseErrors()) {
+      validationDone(false);
+      return;
+    }
+    if (!processSyncValidators()) {
+      validationDone(false);
+      return;
+    }
+    processAsyncValidators();
+
+    function processParseErrors() {
+      var errorKey = ctrl.$$parserName || 'parse';
+      if (isUndefined(parserValid)) {
+        setValidity(errorKey, null);
+      } else {
+        if (!parserValid) {
+          forEach(ctrl.$validators, function(v, name) {
+            setValidity(name, null);
+          });
+          forEach(ctrl.$asyncValidators, function(v, name) {
+            setValidity(name, null);
+          });
+        }
+        // Set the parse error last, to prevent unsetting it, should a $validators key == parserName
+        setValidity(errorKey, parserValid);
+        return parserValid;
+      }
+      return true;
+    }
+
+    function processSyncValidators() {
+      var syncValidatorsValid = true;
+      forEach(ctrl.$validators, function(validator, name) {
+        var result = validator(modelValue, viewValue);
+        syncValidatorsValid = syncValidatorsValid && result;
+        setValidity(name, result);
+      });
+      if (!syncValidatorsValid) {
+        forEach(ctrl.$asyncValidators, function(v, name) {
+          setValidity(name, null);
+        });
+        return false;
+      }
+      return true;
+    }
+
+    function processAsyncValidators() {
+      var validatorPromises = [];
+      var allValid = true;
+      forEach(ctrl.$asyncValidators, function(validator, name) {
+        var promise = validator(modelValue, viewValue);
+        if (!isPromiseLike(promise)) {
+          throw ngModelMinErr("$asyncValidators",
+            "Expected asynchronous validator to return a promise but got '{0}' instead.", promise);
+        }
+        setValidity(name, undefined);
+        validatorPromises.push(promise.then(function() {
+          setValidity(name, true);
+        }, function(error) {
+          allValid = false;
+          setValidity(name, false);
+        }));
+      });
+      if (!validatorPromises.length) {
+        validationDone(true);
+      } else {
+        $q.all(validatorPromises).then(function() {
+          validationDone(allValid);
+        }, noop);
+      }
+    }
+
+    function setValidity(name, isValid) {
+      if (localValidationRunId === currentValidationRunId) {
+        ctrl.$setValidity(name, isValid);
+      }
+    }
+
+    function validationDone(allValid) {
+      if (localValidationRunId === currentValidationRunId) {
+
+        doneCallback(allValid);
+      }
+    }
+  };
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$commitViewValue
+   *
+   * @description
+   * Commit a pending update to the `$modelValue`.
+   *
+   * Updates may be pending by a debounced event or because the input is waiting for a some future
+   * event defined in `ng-model-options`. this method is rarely needed as `NgModelController`
+   * usually handles calling this in response to input events.
+   */
+  this.$commitViewValue = function() {
+    var viewValue = ctrl.$viewValue;
+
+    $timeout.cancel(pendingDebounce);
+
+    // If the view value has not changed then we should just exit, except in the case where there is
+    // a native validator on the element. In this case the validation state may have changed even though
+    // the viewValue has stayed empty.
+    if (ctrl.$$lastCommittedViewValue === viewValue && (viewValue !== '' || !ctrl.$$hasNativeValidators)) {
+      return;
+    }
+    ctrl.$$lastCommittedViewValue = viewValue;
+
+    // change to dirty
+    if (ctrl.$pristine) {
+      this.$setDirty();
+    }
+    this.$$parseAndValidate();
+  };
+
+  this.$$parseAndValidate = function() {
+    var viewValue = ctrl.$$lastCommittedViewValue;
+    var modelValue = viewValue;
+    parserValid = isUndefined(modelValue) ? undefined : true;
+
+    if (parserValid) {
+      for (var i = 0; i < ctrl.$parsers.length; i++) {
+        modelValue = ctrl.$parsers[i](modelValue);
+        if (isUndefined(modelValue)) {
+          parserValid = false;
+          break;
+        }
+      }
+    }
+    if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {
+      // ctrl.$modelValue has not been touched yet...
+      ctrl.$modelValue = ngModelGet($scope);
+    }
+    var prevModelValue = ctrl.$modelValue;
+    var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;
+    ctrl.$$rawModelValue = modelValue;
+
+    if (allowInvalid) {
+      ctrl.$modelValue = modelValue;
+      writeToModelIfNeeded();
+    }
+
+    // Pass the $$lastCommittedViewValue here, because the cached viewValue might be out of date.
+    // This can happen if e.g. $setViewValue is called from inside a parser
+    ctrl.$$runValidators(modelValue, ctrl.$$lastCommittedViewValue, function(allValid) {
+      if (!allowInvalid) {
+        // Note: Don't check ctrl.$valid here, as we could have
+        // external validators (e.g. calculated on the server),
+        // that just call $setValidity and need the model value
+        // to calculate their validity.
+        ctrl.$modelValue = allValid ? modelValue : undefined;
+        writeToModelIfNeeded();
+      }
+    });
+
+    function writeToModelIfNeeded() {
+      if (ctrl.$modelValue !== prevModelValue) {
+        ctrl.$$writeModelToScope();
+      }
+    }
+  };
+
+  this.$$writeModelToScope = function() {
+    ngModelSet($scope, ctrl.$modelValue);
+    forEach(ctrl.$viewChangeListeners, function(listener) {
+      try {
+        listener();
+      } catch (e) {
+        $exceptionHandler(e);
+      }
+    });
+  };
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$setViewValue
+   *
+   * @description
+   * Update the view value.
+   *
+   * This method should be called when a control wants to change the view value; typically,
+   * this is done from within a DOM event handler. For example, the {@link ng.directive:input input}
+   * directive calls it when the value of the input changes and {@link ng.directive:select select}
+   * calls it when an option is selected.
+   *
+   * When `$setViewValue` is called, the new `value` will be staged for committing through the `$parsers`
+   * and `$validators` pipelines. If there are no special {@link ngModelOptions} specified then the staged
+   * value sent directly for processing, finally to be applied to `$modelValue` and then the
+   * **expression** specified in the `ng-model` attribute. Lastly, all the registered change listeners,
+   * in the `$viewChangeListeners` list, are called.
+   *
+   * In case the {@link ng.directive:ngModelOptions ngModelOptions} directive is used with `updateOn`
+   * and the `default` trigger is not listed, all those actions will remain pending until one of the
+   * `updateOn` events is triggered on the DOM element.
+   * All these actions will be debounced if the {@link ng.directive:ngModelOptions ngModelOptions}
+   * directive is used with a custom debounce for this particular event.
+   * Note that a `$digest` is only triggered once the `updateOn` events are fired, or if `debounce`
+   * is specified, once the timer runs out.
+   *
+   * When used with standard inputs, the view value will always be a string (which is in some cases
+   * parsed into another type, such as a `Date` object for `input[date]`.)
+   * However, custom controls might also pass objects to this method. In this case, we should make
+   * a copy of the object before passing it to `$setViewValue`. This is because `ngModel` does not
+   * perform a deep watch of objects, it only looks for a change of identity. If you only change
+   * the property of the object then ngModel will not realise that the object has changed and
+   * will not invoke the `$parsers` and `$validators` pipelines. For this reason, you should
+   * not change properties of the copy once it has been passed to `$setViewValue`.
+   * Otherwise you may cause the model value on the scope to change incorrectly.
+   *
+   * <div class="alert alert-info">
+   * In any case, the value passed to the method should always reflect the current value
+   * of the control. For example, if you are calling `$setViewValue` for an input element,
+   * you should pass the input DOM value. Otherwise, the control and the scope model become
+   * out of sync. It's also important to note that `$setViewValue` does not call `$render` or change
+   * the control's DOM value in any way. If we want to change the control's DOM value
+   * programmatically, we should update the `ngModel` scope expression. Its new value will be
+   * picked up by the model controller, which will run it through the `$formatters`, `$render` it
+   * to update the DOM, and finally call `$validate` on it.
+   * </div>
+   *
+   * @param {*} value value from the view.
+   * @param {string} trigger Event that triggered the update.
+   */
+  this.$setViewValue = function(value, trigger) {
+    ctrl.$viewValue = value;
+    if (!ctrl.$options || ctrl.$options.updateOnDefault) {
+      ctrl.$$debounceViewValueCommit(trigger);
+    }
+  };
+
+  this.$$debounceViewValueCommit = function(trigger) {
+    var debounceDelay = 0,
+        options = ctrl.$options,
+        debounce;
+
+    if (options && isDefined(options.debounce)) {
+      debounce = options.debounce;
+      if (isNumber(debounce)) {
+        debounceDelay = debounce;
+      } else if (isNumber(debounce[trigger])) {
+        debounceDelay = debounce[trigger];
+      } else if (isNumber(debounce['default'])) {
+        debounceDelay = debounce['default'];
+      }
+    }
+
+    $timeout.cancel(pendingDebounce);
+    if (debounceDelay) {
+      pendingDebounce = $timeout(function() {
+        ctrl.$commitViewValue();
+      }, debounceDelay);
+    } else if ($rootScope.$$phase) {
+      ctrl.$commitViewValue();
+    } else {
+      $scope.$apply(function() {
+        ctrl.$commitViewValue();
+      });
+    }
+  };
+
+  // model -> value
+  // Note: we cannot use a normal scope.$watch as we want to detect the following:
+  // 1. scope value is 'a'
+  // 2. user enters 'b'
+  // 3. ng-change kicks in and reverts scope value to 'a'
+  //    -> scope value did not change since the last digest as
+  //       ng-change executes in apply phase
+  // 4. view should be changed back to 'a'
+  $scope.$watch(function ngModelWatch() {
+    var modelValue = ngModelGet($scope);
+
+    // if scope model value and ngModel value are out of sync
+    // TODO(perf): why not move this to the action fn?
+    if (modelValue !== ctrl.$modelValue &&
+       // checks for NaN is needed to allow setting the model to NaN when there's an asyncValidator
+       (ctrl.$modelValue === ctrl.$modelValue || modelValue === modelValue)
+    ) {
+      ctrl.$modelValue = ctrl.$$rawModelValue = modelValue;
+      parserValid = undefined;
+
+      var formatters = ctrl.$formatters,
+          idx = formatters.length;
+
+      var viewValue = modelValue;
+      while (idx--) {
+        viewValue = formatters[idx](viewValue);
+      }
+      if (ctrl.$viewValue !== viewValue) {
+        ctrl.$viewValue = ctrl.$$lastCommittedViewValue = viewValue;
+        ctrl.$render();
+
+        ctrl.$$runValidators(modelValue, viewValue, noop);
+      }
+    }
+
+    return modelValue;
+  });
+}];
+
+
+/**
+ * @ngdoc directive
+ * @name ngModel
+ *
+ * @element input
+ * @priority 1
+ *
+ * @description
+ * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a
+ * property on the scope using {@link ngModel.NgModelController NgModelController},
+ * which is created and exposed by this directive.
+ *
+ * `ngModel` is responsible for:
+ *
+ * - Binding the view into the model, which other directives such as `input`, `textarea` or `select`
+ *   require.
+ * - Providing validation behavior (i.e. required, number, email, url).
+ * - Keeping the state of the control (valid/invalid, dirty/pristine, touched/untouched, validation errors).
+ * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`, `ng-touched`, `ng-untouched`) including animations.
+ * - Registering the control with its parent {@link ng.directive:form form}.
+ *
+ * Note: `ngModel` will try to bind to the property given by evaluating the expression on the
+ * current scope. If the property doesn't already exist on this scope, it will be created
+ * implicitly and added to the scope.
+ *
+ * For best practices on using `ngModel`, see:
+ *
+ *  - [Understanding Scopes](https://github.com/angular/angular.js/wiki/Understanding-Scopes)
+ *
+ * For basic examples, how to use `ngModel`, see:
+ *
+ *  - {@link ng.directive:input input}
+ *    - {@link input[text] text}
+ *    - {@link input[checkbox] checkbox}
+ *    - {@link input[radio] radio}
+ *    - {@link input[number] number}
+ *    - {@link input[email] email}
+ *    - {@link input[url] url}
+ *    - {@link input[date] date}
+ *    - {@link input[datetime-local] datetime-local}
+ *    - {@link input[time] time}
+ *    - {@link input[month] month}
+ *    - {@link input[week] week}
+ *  - {@link ng.directive:select select}
+ *  - {@link ng.directive:textarea textarea}
+ *
+ * # CSS classes
+ * The following CSS classes are added and removed on the associated input/select/textarea element
+ * depending on the validity of the model.
+ *
+ *  - `ng-valid`: the model is valid
+ *  - `ng-invalid`: the model is invalid
+ *  - `ng-valid-[key]`: for each valid key added by `$setValidity`
+ *  - `ng-invalid-[key]`: for each invalid key added by `$setValidity`
+ *  - `ng-pristine`: the control hasn't been interacted with yet
+ *  - `ng-dirty`: the control has been interacted with
+ *  - `ng-touched`: the control has been blurred
+ *  - `ng-untouched`: the control hasn't been blurred
+ *  - `ng-pending`: any `$asyncValidators` are unfulfilled
+ *
+ * Keep in mind that ngAnimate can detect each of these classes when added and removed.
+ *
+ * ## Animation Hooks
+ *
+ * Animations within models are triggered when any of the associated CSS classes are added and removed
+ * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`,
+ * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself.
+ * The animations that are triggered within ngModel are similar to how they work in ngClass and
+ * animations can be hooked into using CSS transitions, keyframes as well as JS animations.
+ *
+ * The following example shows a simple way to utilize CSS transitions to style an input element
+ * that has been rendered as invalid after it has been validated:
+ *
+ * <pre>
+ * //be sure to include ngAnimate as a module to hook into more
+ * //advanced animations
+ * .my-input {
+ *   transition:0.5s linear all;
+ *   background: white;
+ * }
+ * .my-input.ng-invalid {
+ *   background: red;
+ *   color:white;
+ * }
+ * </pre>
+ *
+ * @example
+ * <example deps="angular-animate.js" animations="true" fixBase="true" module="inputExample">
+     <file name="index.html">
+       <script>
+        angular.module('inputExample', [])
+          .controller('ExampleController', ['$scope', function($scope) {
+            $scope.val = '1';
+          }]);
+       </script>
+       <style>
+         .my-input {
+           transition:all linear 0.5s;
+           background: transparent;
+         }
+         .my-input.ng-invalid {
+           color:white;
+           background: red;
+         }
+       </style>
+       <p id="inputDescription">
+        Update input to see transitions when valid/invalid.
+        Integer is a valid value.
+       </p>
+       <form name="testForm" ng-controller="ExampleController">
+         <input ng-model="val" ng-pattern="/^\d+$/" name="anim" class="my-input"
+                aria-describedby="inputDescription" />
+       </form>
+     </file>
+ * </example>
+ *
+ * ## Binding to a getter/setter
+ *
+ * Sometimes it's helpful to bind `ngModel` to a getter/setter function.  A getter/setter is a
+ * function that returns a representation of the model when called with zero arguments, and sets
+ * the internal state of a model when called with an argument. It's sometimes useful to use this
+ * for models that have an internal representation that's different from what the model exposes
+ * to the view.
+ *
+ * <div class="alert alert-success">
+ * **Best Practice:** It's best to keep getters fast because Angular is likely to call them more
+ * frequently than other parts of your code.
+ * </div>
+ *
+ * You use this behavior by adding `ng-model-options="{ getterSetter: true }"` to an element that
+ * has `ng-model` attached to it. You can also add `ng-model-options="{ getterSetter: true }"` to
+ * a `<form>`, which will enable this behavior for all `<input>`s within it. See
+ * {@link ng.directive:ngModelOptions `ngModelOptions`} for more.
+ *
+ * The following example shows how to use `ngModel` with a getter/setter:
+ *
+ * @example
+ * <example name="ngModel-getter-setter" module="getterSetterExample">
+     <file name="index.html">
+       <div ng-controller="ExampleController">
+         <form name="userForm">
+           <label>Name:
+             <input type="text" name="userName"
+                    ng-model="user.name"
+                    ng-model-options="{ getterSetter: true }" />
+           </label>
+         </form>
+         <pre>user.name = <span ng-bind="user.name()"></span></pre>
+       </div>
+     </file>
+     <file name="app.js">
+       angular.module('getterSetterExample', [])
+         .controller('ExampleController', ['$scope', function($scope) {
+           var _name = 'Brian';
+           $scope.user = {
+             name: function(newName) {
+              // Note that newName can be undefined for two reasons:
+              // 1. Because it is called as a getter and thus called with no arguments
+              // 2. Because the property should actually be set to undefined. This happens e.g. if the
+              //    input is invalid
+              return arguments.length ? (_name = newName) : _name;
+             }
+           };
+         }]);
+     </file>
+ * </example>
+ */
+var ngModelDirective = ['$rootScope', function($rootScope) {
+  return {
+    restrict: 'A',
+    require: ['ngModel', '^?form', '^?ngModelOptions'],
+    controller: NgModelController,
+    // Prelink needs to run before any input directive
+    // so that we can set the NgModelOptions in NgModelController
+    // before anyone else uses it.
+    priority: 1,
+    compile: function ngModelCompile(element) {
+      // Setup initial state of the control
+      element.addClass(PRISTINE_CLASS).addClass(UNTOUCHED_CLASS).addClass(VALID_CLASS);
+
+      return {
+        pre: function ngModelPreLink(scope, element, attr, ctrls) {
+          var modelCtrl = ctrls[0],
+              formCtrl = ctrls[1] || modelCtrl.$$parentForm;
+
+          modelCtrl.$$setOptions(ctrls[2] && ctrls[2].$options);
+
+          // notify others, especially parent forms
+          formCtrl.$addControl(modelCtrl);
+
+          attr.$observe('name', function(newValue) {
+            if (modelCtrl.$name !== newValue) {
+              modelCtrl.$$parentForm.$$renameControl(modelCtrl, newValue);
+            }
+          });
+
+          scope.$on('$destroy', function() {
+            modelCtrl.$$parentForm.$removeControl(modelCtrl);
+          });
+        },
+        post: function ngModelPostLink(scope, element, attr, ctrls) {
+          var modelCtrl = ctrls[0];
+          if (modelCtrl.$options && modelCtrl.$options.updateOn) {
+            element.on(modelCtrl.$options.updateOn, function(ev) {
+              modelCtrl.$$debounceViewValueCommit(ev && ev.type);
+            });
+          }
+
+          element.on('blur', function(ev) {
+            if (modelCtrl.$touched) return;
+
+            if ($rootScope.$$phase) {
+              scope.$evalAsync(modelCtrl.$setTouched);
+            } else {
+              scope.$apply(modelCtrl.$setTouched);
+            }
+          });
+        }
+      };
+    }
+  };
+}];
+
+var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/;
+
+/**
+ * @ngdoc directive
+ * @name ngModelOptions
+ *
+ * @description
+ * Allows tuning how model updates are done. Using `ngModelOptions` you can specify a custom list of
+ * events that will trigger a model update and/or a debouncing delay so that the actual update only
+ * takes place when a timer expires; this timer will be reset after another change takes place.
+ *
+ * Given the nature of `ngModelOptions`, the value displayed inside input fields in the view might
+ * be different from the value in the actual model. This means that if you update the model you
+ * should also invoke {@link ngModel.NgModelController `$rollbackViewValue`} on the relevant input field in
+ * order to make sure it is synchronized with the model and that any debounced action is canceled.
+ *
+ * The easiest way to reference the control's {@link ngModel.NgModelController `$rollbackViewValue`}
+ * method is by making sure the input is placed inside a form that has a `name` attribute. This is
+ * important because `form` controllers are published to the related scope under the name in their
+ * `name` attribute.
+ *
+ * Any pending changes will take place immediately when an enclosing form is submitted via the
+ * `submit` event. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`
+ * to have access to the updated model.
+ *
+ * `ngModelOptions` has an effect on the element it's declared on and its descendants.
+ *
+ * @param {Object} ngModelOptions options to apply to the current model. Valid keys are:
+ *   - `updateOn`: string specifying which event should the input be bound to. You can set several
+ *     events using an space delimited list. There is a special event called `default` that
+ *     matches the default events belonging of the control.
+ *   - `debounce`: integer value which contains the debounce model update value in milliseconds. A
+ *     value of 0 triggers an immediate update. If an object is supplied instead, you can specify a
+ *     custom value for each event. For example:
+ *     `ng-model-options="{ updateOn: 'default blur', debounce: { 'default': 500, 'blur': 0 } }"`
+ *   - `allowInvalid`: boolean value which indicates that the model can be set with values that did
+ *     not validate correctly instead of the default behavior of setting the model to undefined.
+ *   - `getterSetter`: boolean value which determines whether or not to treat functions bound to
+       `ngModel` as getters/setters.
+ *   - `timezone`: Defines the timezone to be used to read/write the `Date` instance in the model for
+ *     `<input type="date">`, `<input type="time">`, ... . It understands UTC/GMT and the
+ *     continental US time zone abbreviations, but for general use, use a time zone offset, for
+ *     example, `'+0430'` (4 hours, 30 minutes east of the Greenwich meridian)
+ *     If not specified, the timezone of the browser will be used.
+ *
+ * @example
+
+  The following example shows how to override immediate updates. Changes on the inputs within the
+  form will update the model only when the control loses focus (blur event). If `escape` key is
+  pressed while the input field is focused, the value is reset to the value in the current model.
+
+  <example name="ngModelOptions-directive-blur" module="optionsExample">
+    <file name="index.html">
+      <div ng-controller="ExampleController">
+        <form name="userForm">
+          <label>Name:
+            <input type="text" name="userName"
+                   ng-model="user.name"
+                   ng-model-options="{ updateOn: 'blur' }"
+                   ng-keyup="cancel($event)" />
+          </label><br />
+          <label>Other data:
+            <input type="text" ng-model="user.data" />
+          </label><br />
+        </form>
+        <pre>user.name = <span ng-bind="user.name"></span></pre>
+        <pre>user.data = <span ng-bind="user.data"></span></pre>
+      </div>
+    </file>
+    <file name="app.js">
+      angular.module('optionsExample', [])
+        .controller('ExampleController', ['$scope', function($scope) {
+          $scope.user = { name: 'John', data: '' };
+
+          $scope.cancel = function(e) {
+            if (e.keyCode == 27) {
+              $scope.userForm.userName.$rollbackViewValue();
+            }
+          };
+        }]);
+    </file>
+    <file name="protractor.js" type="protractor">
+      var model = element(by.binding('user.name'));
+      var input = element(by.model('user.name'));
+      var other = element(by.model('user.data'));
+
+      it('should allow custom events', function() {
+        input.sendKeys(' Doe');
+        input.click();
+        expect(model.getText()).toEqual('John');
+        other.click();
+        expect(model.getText()).toEqual('John Doe');
+      });
+
+      it('should $rollbackViewValue when model changes', function() {
+        input.sendKeys(' Doe');
+        expect(input.getAttribute('value')).toEqual('John Doe');
+        input.sendKeys(protractor.Key.ESCAPE);
+        expect(input.getAttribute('value')).toEqual('John');
+        other.click();
+        expect(model.getText()).toEqual('John');
+      });
+    </file>
+  </example>
+
+  This one shows how to debounce model changes. Model will be updated only 1 sec after last change.
+  If the `Clear` button is pressed, any debounced action is canceled and the value becomes empty.
+
+  <example name="ngModelOptions-directive-debounce" module="optionsExample">
+    <file name="index.html">
+      <div ng-controller="ExampleController">
+        <form name="userForm">
+          <label>Name:
+            <input type="text" name="userName"
+                   ng-model="user.name"
+                   ng-model-options="{ debounce: 1000 }" />
+          </label>
+          <button ng-click="userForm.userName.$rollbackViewValue(); user.name=''">Clear</button>
+          <br />
+        </form>
+        <pre>user.name = <span ng-bind="user.name"></span></pre>
+      </div>
+    </file>
+    <file name="app.js">
+      angular.module('optionsExample', [])
+        .controller('ExampleController', ['$scope', function($scope) {
+          $scope.user = { name: 'Igor' };
+        }]);
+    </file>
+  </example>
+
+  This one shows how to bind to getter/setters:
+
+  <example name="ngModelOptions-directive-getter-setter" module="getterSetterExample">
+    <file name="index.html">
+      <div ng-controller="ExampleController">
+        <form name="userForm">
+          <label>Name:
+            <input type="text" name="userName"
+                   ng-model="user.name"
+                   ng-model-options="{ getterSetter: true }" />
+          </label>
+        </form>
+        <pre>user.name = <span ng-bind="user.name()"></span></pre>
+      </div>
+    </file>
+    <file name="app.js">
+      angular.module('getterSetterExample', [])
+        .controller('ExampleController', ['$scope', function($scope) {
+          var _name = 'Brian';
+          $scope.user = {
+            name: function(newName) {
+              // Note that newName can be undefined for two reasons:
+              // 1. Because it is called as a getter and thus called with no arguments
+              // 2. Because the property should actually be set to undefined. This happens e.g. if the
+              //    input is invalid
+              return arguments.length ? (_name = newName) : _name;
+            }
+          };
+        }]);
+    </file>
+  </example>
+ */
+var ngModelOptionsDirective = function() {
+  return {
+    restrict: 'A',
+    controller: ['$scope', '$attrs', function($scope, $attrs) {
+      var that = this;
+      this.$options = copy($scope.$eval($attrs.ngModelOptions));
+      // Allow adding/overriding bound events
+      if (isDefined(this.$options.updateOn)) {
+        this.$options.updateOnDefault = false;
+        // extract "default" pseudo-event from list of events that can trigger a model update
+        this.$options.updateOn = trim(this.$options.updateOn.replace(DEFAULT_REGEXP, function() {
+          that.$options.updateOnDefault = true;
+          return ' ';
+        }));
+      } else {
+        this.$options.updateOnDefault = true;
+      }
+    }]
+  };
+};
+
+
+
+// helper methods
+function addSetValidityMethod(context) {
+  var ctrl = context.ctrl,
+      $element = context.$element,
+      classCache = {},
+      set = context.set,
+      unset = context.unset,
+      $animate = context.$animate;
+
+  classCache[INVALID_CLASS] = !(classCache[VALID_CLASS] = $element.hasClass(VALID_CLASS));
+
+  ctrl.$setValidity = setValidity;
+
+  function setValidity(validationErrorKey, state, controller) {
+    if (isUndefined(state)) {
+      createAndSet('$pending', validationErrorKey, controller);
+    } else {
+      unsetAndCleanup('$pending', validationErrorKey, controller);
+    }
+    if (!isBoolean(state)) {
+      unset(ctrl.$error, validationErrorKey, controller);
+      unset(ctrl.$$success, validationErrorKey, controller);
+    } else {
+      if (state) {
+        unset(ctrl.$error, validationErrorKey, controller);
+        set(ctrl.$$success, validationErrorKey, controller);
+      } else {
+        set(ctrl.$error, validationErrorKey, controller);
+        unset(ctrl.$$success, validationErrorKey, controller);
+      }
+    }
+    if (ctrl.$pending) {
+      cachedToggleClass(PENDING_CLASS, true);
+      ctrl.$valid = ctrl.$invalid = undefined;
+      toggleValidationCss('', null);
+    } else {
+      cachedToggleClass(PENDING_CLASS, false);
+      ctrl.$valid = isObjectEmpty(ctrl.$error);
+      ctrl.$invalid = !ctrl.$valid;
+      toggleValidationCss('', ctrl.$valid);
+    }
+
+    // re-read the state as the set/unset methods could have
+    // combined state in ctrl.$error[validationError] (used for forms),
+    // where setting/unsetting only increments/decrements the value,
+    // and does not replace it.
+    var combinedState;
+    if (ctrl.$pending && ctrl.$pending[validationErrorKey]) {
+      combinedState = undefined;
+    } else if (ctrl.$error[validationErrorKey]) {
+      combinedState = false;
+    } else if (ctrl.$$success[validationErrorKey]) {
+      combinedState = true;
+    } else {
+      combinedState = null;
+    }
+
+    toggleValidationCss(validationErrorKey, combinedState);
+    ctrl.$$parentForm.$setValidity(validationErrorKey, combinedState, ctrl);
+  }
+
+  function createAndSet(name, value, controller) {
+    if (!ctrl[name]) {
+      ctrl[name] = {};
+    }
+    set(ctrl[name], value, controller);
+  }
+
+  function unsetAndCleanup(name, value, controller) {
+    if (ctrl[name]) {
+      unset(ctrl[name], value, controller);
+    }
+    if (isObjectEmpty(ctrl[name])) {
+      ctrl[name] = undefined;
+    }
+  }
+
+  function cachedToggleClass(className, switchValue) {
+    if (switchValue && !classCache[className]) {
+      $animate.addClass($element, className);
+      classCache[className] = true;
+    } else if (!switchValue && classCache[className]) {
+      $animate.removeClass($element, className);
+      classCache[className] = false;
+    }
+  }
+
+  function toggleValidationCss(validationErrorKey, isValid) {
+    validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';
+
+    cachedToggleClass(VALID_CLASS + validationErrorKey, isValid === true);
+    cachedToggleClass(INVALID_CLASS + validationErrorKey, isValid === false);
+  }
+}
+
+function isObjectEmpty(obj) {
+  if (obj) {
+    for (var prop in obj) {
+      if (obj.hasOwnProperty(prop)) {
+        return false;
+      }
+    }
+  }
+  return true;
+}
+
+/**
+ * @ngdoc directive
+ * @name ngNonBindable
+ * @restrict AC
+ * @priority 1000
+ *
+ * @description
+ * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current
+ * DOM element. This is useful if the element contains what appears to be Angular directives and
+ * bindings but which should be ignored by Angular. This could be the case if you have a site that
+ * displays snippets of code, for instance.
+ *
+ * @element ANY
+ *
+ * @example
+ * In this example there are two locations where a simple interpolation binding (`{{}}`) is present,
+ * but the one wrapped in `ngNonBindable` is left alone.
+ *
+ * @example
+    <example>
+      <file name="index.html">
+        <div>Normal: {{1 + 2}}</div>
+        <div ng-non-bindable>Ignored: {{1 + 2}}</div>
+      </file>
+      <file name="protractor.js" type="protractor">
+       it('should check ng-non-bindable', function() {
+         expect(element(by.binding('1 + 2')).getText()).toContain('3');
+         expect(element.all(by.css('div')).last().getText()).toMatch(/1 \+ 2/);
+       });
+      </file>
+    </example>
+ */
+var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });
+
+/* global jqLiteRemove */
+
+var ngOptionsMinErr = minErr('ngOptions');
+
+/**
+ * @ngdoc directive
+ * @name ngOptions
+ * @restrict A
+ *
+ * @description
+ *
+ * The `ngOptions` attribute can be used to dynamically generate a list of `<option>`
+ * elements for the `<select>` element using the array or object obtained by evaluating the
+ * `ngOptions` comprehension expression.
+ *
+ * In many cases, `ngRepeat` can be used on `<option>` elements instead of `ngOptions` to achieve a
+ * similar result. However, `ngOptions` provides some benefits such as reducing memory and
+ * increasing speed by not creating a new scope for each repeated instance, as well as providing
+ * more flexibility in how the `<select>`'s model is assigned via the `select` **`as`** part of the
+ * comprehension expression. `ngOptions` should be used when the `<select>` model needs to be bound
+ *  to a non-string value. This is because an option element can only be bound to string values at
+ * present.
+ *
+ * When an item in the `<select>` menu is selected, the array element or object property
+ * represented by the selected option will be bound to the model identified by the `ngModel`
+ * directive.
+ *
+ * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can
+ * be nested into the `<select>` element. This element will then represent the `null` or "not selected"
+ * option. See example below for demonstration.
+ *
+ * ## Complex Models (objects or collections)
+ *
+ * By default, `ngModel` watches the model by reference, not value. This is important to know when
+ * binding the select to a model that is an object or a collection.
+ *
+ * One issue occurs if you want to preselect an option. For example, if you set
+ * the model to an object that is equal to an object in your collection, `ngOptions` won't be able to set the selection,
+ * because the objects are not identical. So by default, you should always reference the item in your collection
+ * for preselections, e.g.: `$scope.selected = $scope.collection[3]`.
+ *
+ * Another solution is to use a `track by` clause, because then `ngOptions` will track the identity
+ * of the item not by reference, but by the result of the `track by` expression. For example, if your
+ * collection items have an id property, you would `track by item.id`.
+ *
+ * A different issue with objects or collections is that ngModel won't detect if an object property or
+ * a collection item changes. For that reason, `ngOptions` additionally watches the model using
+ * `$watchCollection`, when the expression contains a `track by` clause or the the select has the `multiple` attribute.
+ * This allows ngOptions to trigger a re-rendering of the options even if the actual object/collection
+ * has not changed identity, but only a property on the object or an item in the collection changes.
+ *
+ * Note that `$watchCollection` does a shallow comparison of the properties of the object (or the items in the collection
+ * if the model is an array). This means that changing a property deeper than the first level inside the
+ * object/collection will not trigger a re-rendering.
+ *
+ * ## `select` **`as`**
+ *
+ * Using `select` **`as`** will bind the result of the `select` expression to the model, but
+ * the value of the `<select>` and `<option>` html elements will be either the index (for array data sources)
+ * or property name (for object data sources) of the value within the collection. If a **`track by`** expression
+ * is used, the result of that expression will be set as the value of the `option` and `select` elements.
+ *
+ *
+ * ### `select` **`as`** and **`track by`**
+ *
+ * <div class="alert alert-warning">
+ * Be careful when using `select` **`as`** and **`track by`** in the same expression.
+ * </div>
+ *
+ * Given this array of items on the $scope:
+ *
+ * ```js
+ * $scope.items = [{
+ *   id: 1,
+ *   label: 'aLabel',
+ *   subItem: { name: 'aSubItem' }
+ * }, {
+ *   id: 2,
+ *   label: 'bLabel',
+ *   subItem: { name: 'bSubItem' }
+ * }];
+ * ```
+ *
+ * This will work:
+ *
+ * ```html
+ * <select ng-options="item as item.label for item in items track by item.id" ng-model="selected"></select>
+ * ```
+ * ```js
+ * $scope.selected = $scope.items[0];
+ * ```
+ *
+ * but this will not work:
+ *
+ * ```html
+ * <select ng-options="item.subItem as item.label for item in items track by item.id" ng-model="selected"></select>
+ * ```
+ * ```js
+ * $scope.selected = $scope.items[0].subItem;
+ * ```
+ *
+ * In both examples, the **`track by`** expression is applied successfully to each `item` in the
+ * `items` array. Because the selected option has been set programmatically in the controller, the
+ * **`track by`** expression is also applied to the `ngModel` value. In the first example, the
+ * `ngModel` value is `items[0]` and the **`track by`** expression evaluates to `items[0].id` with
+ * no issue. In the second example, the `ngModel` value is `items[0].subItem` and the **`track by`**
+ * expression evaluates to `items[0].subItem.id` (which is undefined). As a result, the model value
+ * is not matched against any `<option>` and the `<select>` appears as having no selected value.
+ *
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} required The control is considered valid only if value is entered.
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+ *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+ *    `required` when you want to data-bind to the `required` attribute.
+ * @param {comprehension_expression=} ngOptions in one of the following forms:
+ *
+ *   * for array data sources:
+ *     * `label` **`for`** `value` **`in`** `array`
+ *     * `select` **`as`** `label` **`for`** `value` **`in`** `array`
+ *     * `label` **`group by`** `group` **`for`** `value` **`in`** `array`
+ *     * `label` **`disable when`** `disable` **`for`** `value` **`in`** `array`
+ *     * `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr`
+ *     * `label` **`disable when`** `disable` **`for`** `value` **`in`** `array` **`track by`** `trackexpr`
+ *     * `label` **`for`** `value` **`in`** `array` | orderBy:`orderexpr` **`track by`** `trackexpr`
+ *        (for including a filter with `track by`)
+ *   * for object data sources:
+ *     * `label` **`for (`**`key` **`,`** `value`**`) in`** `object`
+ *     * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object`
+ *     * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object`
+ *     * `label` **`disable when`** `disable` **`for (`**`key`**`,`** `value`**`) in`** `object`
+ *     * `select` **`as`** `label` **`group by`** `group`
+ *         **`for` `(`**`key`**`,`** `value`**`) in`** `object`
+ *     * `select` **`as`** `label` **`disable when`** `disable`
+ *         **`for` `(`**`key`**`,`** `value`**`) in`** `object`
+ *
+ * Where:
+ *
+ *   * `array` / `object`: an expression which evaluates to an array / object to iterate over.
+ *   * `value`: local variable which will refer to each item in the `array` or each property value
+ *      of `object` during iteration.
+ *   * `key`: local variable which will refer to a property name in `object` during iteration.
+ *   * `label`: The result of this expression will be the label for `<option>` element. The
+ *     `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`).
+ *   * `select`: The result of this expression will be bound to the model of the parent `<select>`
+ *      element. If not specified, `select` expression will default to `value`.
+ *   * `group`: The result of this expression will be used to group options using the `<optgroup>`
+ *      DOM element.
+ *   * `disable`: The result of this expression will be used to disable the rendered `<option>`
+ *      element. Return `true` to disable.
+ *   * `trackexpr`: Used when working with an array of objects. The result of this expression will be
+ *      used to identify the objects in the array. The `trackexpr` will most likely refer to the
+ *     `value` variable (e.g. `value.propertyName`). With this the selection is preserved
+ *      even when the options are recreated (e.g. reloaded from the server).
+ *
+ * @example
+    <example module="selectExample">
+      <file name="index.html">
+        <script>
+        angular.module('selectExample', [])
+          .controller('ExampleController', ['$scope', function($scope) {
+            $scope.colors = [
+              {name:'black', shade:'dark'},
+              {name:'white', shade:'light', notAnOption: true},
+              {name:'red', shade:'dark'},
+              {name:'blue', shade:'dark', notAnOption: true},
+              {name:'yellow', shade:'light', notAnOption: false}
+            ];
+            $scope.myColor = $scope.colors[2]; // red
+          }]);
+        </script>
+        <div ng-controller="ExampleController">
+          <ul>
+            <li ng-repeat="color in colors">
+              <label>Name: <input ng-model="color.name"></label>
+              <label><input type="checkbox" ng-model="color.notAnOption"> Disabled?</label>
+              <button ng-click="colors.splice($index, 1)" aria-label="Remove">X</button>
+            </li>
+            <li>
+              <button ng-click="colors.push({})">add</button>
+            </li>
+          </ul>
+          <hr/>
+          <label>Color (null not allowed):
+            <select ng-model="myColor" ng-options="color.name for color in colors"></select>
+          </label><br/>
+          <label>Color (null allowed):
+          <span  class="nullable">
+            <select ng-model="myColor" ng-options="color.name for color in colors">
+              <option value="">-- choose color --</option>
+            </select>
+          </span></label><br/>
+
+          <label>Color grouped by shade:
+            <select ng-model="myColor" ng-options="color.name group by color.shade for color in colors">
+            </select>
+          </label><br/>
+
+          <label>Color grouped by shade, with some disabled:
+            <select ng-model="myColor"
+                  ng-options="color.name group by color.shade disable when color.notAnOption for color in colors">
+            </select>
+          </label><br/>
+
+
+
+          Select <button ng-click="myColor = { name:'not in list', shade: 'other' }">bogus</button>.
+          <br/>
+          <hr/>
+          Currently selected: {{ {selected_color:myColor} }}
+          <div style="border:solid 1px black; height:20px"
+               ng-style="{'background-color':myColor.name}">
+          </div>
+        </div>
+      </file>
+      <file name="protractor.js" type="protractor">
+         it('should check ng-options', function() {
+           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('red');
+           element.all(by.model('myColor')).first().click();
+           element.all(by.css('select[ng-model="myColor"] option')).first().click();
+           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('black');
+           element(by.css('.nullable select[ng-model="myColor"]')).click();
+           element.all(by.css('.nullable select[ng-model="myColor"] option')).first().click();
+           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('null');
+         });
+      </file>
+    </example>
+ */
+
+// jshint maxlen: false
+//                     //00001111111111000000000002222222222000000000000000000000333333333300000000000000000000000004444444444400000000000005555555555555550000000006666666666666660000000777777777777777000000000000000888888888800000000000000000009999999999
+var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/;
+                        // 1: value expression (valueFn)
+                        // 2: label expression (displayFn)
+                        // 3: group by expression (groupByFn)
+                        // 4: disable when expression (disableWhenFn)
+                        // 5: array item variable name
+                        // 6: object item key variable name
+                        // 7: object item value variable name
+                        // 8: collection expression
+                        // 9: track by expression
+// jshint maxlen: 100
+
+
+var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
+
+  function parseOptionsExpression(optionsExp, selectElement, scope) {
+
+    var match = optionsExp.match(NG_OPTIONS_REGEXP);
+    if (!(match)) {
+      throw ngOptionsMinErr('iexp',
+        "Expected expression in form of " +
+        "'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'" +
+        " but got '{0}'. Element: {1}",
+        optionsExp, startingTag(selectElement));
+    }
+
+    // Extract the parts from the ngOptions expression
+
+    // The variable name for the value of the item in the collection
+    var valueName = match[5] || match[7];
+    // The variable name for the key of the item in the collection
+    var keyName = match[6];
+
+    // An expression that generates the viewValue for an option if there is a label expression
+    var selectAs = / as /.test(match[0]) && match[1];
+    // An expression that is used to track the id of each object in the options collection
+    var trackBy = match[9];
+    // An expression that generates the viewValue for an option if there is no label expression
+    var valueFn = $parse(match[2] ? match[1] : valueName);
+    var selectAsFn = selectAs && $parse(selectAs);
+    var viewValueFn = selectAsFn || valueFn;
+    var trackByFn = trackBy && $parse(trackBy);
+
+    // Get the value by which we are going to track the option
+    // if we have a trackFn then use that (passing scope and locals)
+    // otherwise just hash the given viewValue
+    var getTrackByValueFn = trackBy ?
+                              function(value, locals) { return trackByFn(scope, locals); } :
+                              function getHashOfValue(value) { return hashKey(value); };
+    var getTrackByValue = function(value, key) {
+      return getTrackByValueFn(value, getLocals(value, key));
+    };
+
+    var displayFn = $parse(match[2] || match[1]);
+    var groupByFn = $parse(match[3] || '');
+    var disableWhenFn = $parse(match[4] || '');
+    var valuesFn = $parse(match[8]);
+
+    var locals = {};
+    var getLocals = keyName ? function(value, key) {
+      locals[keyName] = key;
+      locals[valueName] = value;
+      return locals;
+    } : function(value) {
+      locals[valueName] = value;
+      return locals;
+    };
+
+
+    function Option(selectValue, viewValue, label, group, disabled) {
+      this.selectValue = selectValue;
+      this.viewValue = viewValue;
+      this.label = label;
+      this.group = group;
+      this.disabled = disabled;
+    }
+
+    function getOptionValuesKeys(optionValues) {
+      var optionValuesKeys;
+
+      if (!keyName && isArrayLike(optionValues)) {
+        optionValuesKeys = optionValues;
+      } else {
+        // if object, extract keys, in enumeration order, unsorted
+        optionValuesKeys = [];
+        for (var itemKey in optionValues) {
+          if (optionValues.hasOwnProperty(itemKey) && itemKey.charAt(0) !== '$') {
+            optionValuesKeys.push(itemKey);
+          }
+        }
+      }
+      return optionValuesKeys;
+    }
+
+    return {
+      trackBy: trackBy,
+      getTrackByValue: getTrackByValue,
+      getWatchables: $parse(valuesFn, function(optionValues) {
+        // Create a collection of things that we would like to watch (watchedArray)
+        // so that they can all be watched using a single $watchCollection
+        // that only runs the handler once if anything changes
+        var watchedArray = [];
+        optionValues = optionValues || [];
+
+        var optionValuesKeys = getOptionValuesKeys(optionValues);
+        var optionValuesLength = optionValuesKeys.length;
+        for (var index = 0; index < optionValuesLength; index++) {
+          var key = (optionValues === optionValuesKeys) ? index : optionValuesKeys[index];
+          var value = optionValues[key];
+
+          var locals = getLocals(optionValues[key], key);
+          var selectValue = getTrackByValueFn(optionValues[key], locals);
+          watchedArray.push(selectValue);
+
+          // Only need to watch the displayFn if there is a specific label expression
+          if (match[2] || match[1]) {
+            var label = displayFn(scope, locals);
+            watchedArray.push(label);
+          }
+
+          // Only need to watch the disableWhenFn if there is a specific disable expression
+          if (match[4]) {
+            var disableWhen = disableWhenFn(scope, locals);
+            watchedArray.push(disableWhen);
+          }
+        }
+        return watchedArray;
+      }),
+
+      getOptions: function() {
+
+        var optionItems = [];
+        var selectValueMap = {};
+
+        // The option values were already computed in the `getWatchables` fn,
+        // which must have been called to trigger `getOptions`
+        var optionValues = valuesFn(scope) || [];
+        var optionValuesKeys = getOptionValuesKeys(optionValues);
+        var optionValuesLength = optionValuesKeys.length;
+
+        for (var index = 0; index < optionValuesLength; index++) {
+          var key = (optionValues === optionValuesKeys) ? index : optionValuesKeys[index];
+          var value = optionValues[key];
+          var locals = getLocals(value, key);
+          var viewValue = viewValueFn(scope, locals);
+          var selectValue = getTrackByValueFn(viewValue, locals);
+          var label = displayFn(scope, locals);
+          var group = groupByFn(scope, locals);
+          var disabled = disableWhenFn(scope, locals);
+          var optionItem = new Option(selectValue, viewValue, label, group, disabled);
+
+          optionItems.push(optionItem);
+          selectValueMap[selectValue] = optionItem;
+        }
+
+        return {
+          items: optionItems,
+          selectValueMap: selectValueMap,
+          getOptionFromViewValue: function(value) {
+            return selectValueMap[getTrackByValue(value)];
+          },
+          getViewValueFromOption: function(option) {
+            // If the viewValue could be an object that may be mutated by the application,
+            // we need to make a copy and not return the reference to the value on the option.
+            return trackBy ? angular.copy(option.viewValue) : option.viewValue;
+          }
+        };
+      }
+    };
+  }
+
+
+  // we can't just jqLite('<option>') since jqLite is not smart enough
+  // to create it in <select> and IE barfs otherwise.
+  var optionTemplate = document.createElement('option'),
+      optGroupTemplate = document.createElement('optgroup');
+
+
+    function ngOptionsPostLink(scope, selectElement, attr, ctrls) {
+
+      // if ngModel is not defined, we don't need to do anything
+      var ngModelCtrl = ctrls[1];
+      if (!ngModelCtrl) return;
+
+      var selectCtrl = ctrls[0];
+      var multiple = attr.multiple;
+
+      // The emptyOption allows the application developer to provide their own custom "empty"
+      // option when the viewValue does not match any of the option values.
+      var emptyOption;
+      for (var i = 0, children = selectElement.children(), ii = children.length; i < ii; i++) {
+        if (children[i].value === '') {
+          emptyOption = children.eq(i);
+          break;
+        }
+      }
+
+      var providedEmptyOption = !!emptyOption;
+
+      var unknownOption = jqLite(optionTemplate.cloneNode(false));
+      unknownOption.val('?');
+
+      var options;
+      var ngOptions = parseOptionsExpression(attr.ngOptions, selectElement, scope);
+
+
+      var renderEmptyOption = function() {
+        if (!providedEmptyOption) {
+          selectElement.prepend(emptyOption);
+        }
+        selectElement.val('');
+        emptyOption.prop('selected', true); // needed for IE
+        emptyOption.attr('selected', true);
+      };
+
+      var removeEmptyOption = function() {
+        if (!providedEmptyOption) {
+          emptyOption.remove();
+        }
+      };
+
+
+      var renderUnknownOption = function() {
+        selectElement.prepend(unknownOption);
+        selectElement.val('?');
+        unknownOption.prop('selected', true); // needed for IE
+        unknownOption.attr('selected', true);
+      };
+
+      var removeUnknownOption = function() {
+        unknownOption.remove();
+      };
+
+      // Update the controller methods for multiple selectable options
+      if (!multiple) {
+
+        selectCtrl.writeValue = function writeNgOptionsValue(value) {
+          var option = options.getOptionFromViewValue(value);
+
+          if (option && !option.disabled) {
+            if (selectElement[0].value !== option.selectValue) {
+              removeUnknownOption();
+              removeEmptyOption();
+
+              selectElement[0].value = option.selectValue;
+              option.element.selected = true;
+              option.element.setAttribute('selected', 'selected');
+            }
+          } else {
+            if (value === null || providedEmptyOption) {
+              removeUnknownOption();
+              renderEmptyOption();
+            } else {
+              removeEmptyOption();
+              renderUnknownOption();
+            }
+          }
+        };
+
+        selectCtrl.readValue = function readNgOptionsValue() {
+
+          var selectedOption = options.selectValueMap[selectElement.val()];
+
+          if (selectedOption && !selectedOption.disabled) {
+            removeEmptyOption();
+            removeUnknownOption();
+            return options.getViewValueFromOption(selectedOption);
+          }
+          return null;
+        };
+
+        // If we are using `track by` then we must watch the tracked value on the model
+        // since ngModel only watches for object identity change
+        if (ngOptions.trackBy) {
+          scope.$watch(
+            function() { return ngOptions.getTrackByValue(ngModelCtrl.$viewValue); },
+            function() { ngModelCtrl.$render(); }
+          );
+        }
+
+      } else {
+
+        ngModelCtrl.$isEmpty = function(value) {
+          return !value || value.length === 0;
+        };
+
+
+        selectCtrl.writeValue = function writeNgOptionsMultiple(value) {
+          options.items.forEach(function(option) {
+            option.element.selected = false;
+          });
+
+          if (value) {
+            value.forEach(function(item) {
+              var option = options.getOptionFromViewValue(item);
+              if (option && !option.disabled) option.element.selected = true;
+            });
+          }
+        };
+
+
+        selectCtrl.readValue = function readNgOptionsMultiple() {
+          var selectedValues = selectElement.val() || [],
+              selections = [];
+
+          forEach(selectedValues, function(value) {
+            var option = options.selectValueMap[value];
+            if (option && !option.disabled) selections.push(options.getViewValueFromOption(option));
+          });
+
+          return selections;
+        };
+
+        // If we are using `track by` then we must watch these tracked values on the model
+        // since ngModel only watches for object identity change
+        if (ngOptions.trackBy) {
+
+          scope.$watchCollection(function() {
+            if (isArray(ngModelCtrl.$viewValue)) {
+              return ngModelCtrl.$viewValue.map(function(value) {
+                return ngOptions.getTrackByValue(value);
+              });
+            }
+          }, function() {
+            ngModelCtrl.$render();
+          });
+
+        }
+      }
+
+
+      if (providedEmptyOption) {
+
+        // we need to remove it before calling selectElement.empty() because otherwise IE will
+        // remove the label from the element. wtf?
+        emptyOption.remove();
+
+        // compile the element since there might be bindings in it
+        $compile(emptyOption)(scope);
+
+        // remove the class, which is added automatically because we recompile the element and it
+        // becomes the compilation root
+        emptyOption.removeClass('ng-scope');
+      } else {
+        emptyOption = jqLite(optionTemplate.cloneNode(false));
+      }
+
+      // We need to do this here to ensure that the options object is defined
+      // when we first hit it in writeNgOptionsValue
+      updateOptions();
+
+      // We will re-render the option elements if the option values or labels change
+      scope.$watchCollection(ngOptions.getWatchables, updateOptions);
+
+      // ------------------------------------------------------------------ //
+
+
+      function updateOptionElement(option, element) {
+        option.element = element;
+        element.disabled = option.disabled;
+        // NOTE: The label must be set before the value, otherwise IE10/11/EDGE create unresponsive
+        // selects in certain circumstances when multiple selects are next to each other and display
+        // the option list in listbox style, i.e. the select is [multiple], or specifies a [size].
+        // See https://github.com/angular/angular.js/issues/11314 for more info.
+        // This is unfortunately untestable with unit / e2e tests
+        if (option.label !== element.label) {
+          element.label = option.label;
+          element.textContent = option.label;
+        }
+        if (option.value !== element.value) element.value = option.selectValue;
+      }
+
+      function addOrReuseElement(parent, current, type, templateElement) {
+        var element;
+        // Check whether we can reuse the next element
+        if (current && lowercase(current.nodeName) === type) {
+          // The next element is the right type so reuse it
+          element = current;
+        } else {
+          // The next element is not the right type so create a new one
+          element = templateElement.cloneNode(false);
+          if (!current) {
+            // There are no more elements so just append it to the select
+            parent.appendChild(element);
+          } else {
+            // The next element is not a group so insert the new one
+            parent.insertBefore(element, current);
+          }
+        }
+        return element;
+      }
+
+
+      function removeExcessElements(current) {
+        var next;
+        while (current) {
+          next = current.nextSibling;
+          jqLiteRemove(current);
+          current = next;
+        }
+      }
+
+
+      function skipEmptyAndUnknownOptions(current) {
+        var emptyOption_ = emptyOption && emptyOption[0];
+        var unknownOption_ = unknownOption && unknownOption[0];
+
+        // We cannot rely on the extracted empty option being the same as the compiled empty option,
+        // because the compiled empty option might have been replaced by a comment because
+        // it had an "element" transclusion directive on it (such as ngIf)
+        if (emptyOption_ || unknownOption_) {
+          while (current &&
+                (current === emptyOption_ ||
+                current === unknownOption_ ||
+                current.nodeType === NODE_TYPE_COMMENT ||
+                current.value === '')) {
+            current = current.nextSibling;
+          }
+        }
+        return current;
+      }
+
+
+      function updateOptions() {
+
+        var previousValue = options && selectCtrl.readValue();
+
+        options = ngOptions.getOptions();
+
+        var groupMap = {};
+        var currentElement = selectElement[0].firstChild;
+
+        // Ensure that the empty option is always there if it was explicitly provided
+        if (providedEmptyOption) {
+          selectElement.prepend(emptyOption);
+        }
+
+        currentElement = skipEmptyAndUnknownOptions(currentElement);
+
+        options.items.forEach(function updateOption(option) {
+          var group;
+          var groupElement;
+          var optionElement;
+
+          if (option.group) {
+
+            // This option is to live in a group
+            // See if we have already created this group
+            group = groupMap[option.group];
+
+            if (!group) {
+
+              // We have not already created this group
+              groupElement = addOrReuseElement(selectElement[0],
+                                               currentElement,
+                                               'optgroup',
+                                               optGroupTemplate);
+              // Move to the next element
+              currentElement = groupElement.nextSibling;
+
+              // Update the label on the group element
+              groupElement.label = option.group;
+
+              // Store it for use later
+              group = groupMap[option.group] = {
+                groupElement: groupElement,
+                currentOptionElement: groupElement.firstChild
+              };
+
+            }
+
+            // So now we have a group for this option we add the option to the group
+            optionElement = addOrReuseElement(group.groupElement,
+                                              group.currentOptionElement,
+                                              'option',
+                                              optionTemplate);
+            updateOptionElement(option, optionElement);
+            // Move to the next element
+            group.currentOptionElement = optionElement.nextSibling;
+
+          } else {
+
+            // This option is not in a group
+            optionElement = addOrReuseElement(selectElement[0],
+                                              currentElement,
+                                              'option',
+                                              optionTemplate);
+            updateOptionElement(option, optionElement);
+            // Move to the next element
+            currentElement = optionElement.nextSibling;
+          }
+        });
+
+
+        // Now remove all excess options and group
+        Object.keys(groupMap).forEach(function(key) {
+          removeExcessElements(groupMap[key].currentOptionElement);
+        });
+        removeExcessElements(currentElement);
+
+        ngModelCtrl.$render();
+
+        // Check to see if the value has changed due to the update to the options
+        if (!ngModelCtrl.$isEmpty(previousValue)) {
+          var nextValue = selectCtrl.readValue();
+          if (ngOptions.trackBy ? !equals(previousValue, nextValue) : previousValue !== nextValue) {
+            ngModelCtrl.$setViewValue(nextValue);
+            ngModelCtrl.$render();
+          }
+        }
+
+      }
+  }
+
+  return {
+    restrict: 'A',
+    terminal: true,
+    require: ['select', '?ngModel'],
+    link: {
+      pre: function ngOptionsPreLink(scope, selectElement, attr, ctrls) {
+        // Deactivate the SelectController.register method to prevent
+        // option directives from accidentally registering themselves
+        // (and unwanted $destroy handlers etc.)
+        ctrls[0].registerOption = noop;
+      },
+      post: ngOptionsPostLink
+    }
+  };
+}];
+
+/**
+ * @ngdoc directive
+ * @name ngPluralize
+ * @restrict EA
+ *
+ * @description
+ * `ngPluralize` is a directive that displays messages according to en-US localization rules.
+ * These rules are bundled with angular.js, but can be overridden
+ * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive
+ * by specifying the mappings between
+ * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)
+ * and the strings to be displayed.
+ *
+ * # Plural categories and explicit number rules
+ * There are two
+ * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)
+ * in Angular's default en-US locale: "one" and "other".
+ *
+ * While a plural category may match many numbers (for example, in en-US locale, "other" can match
+ * any number that is not 1), an explicit number rule can only match one number. For example, the
+ * explicit number rule for "3" matches the number 3. There are examples of plural categories
+ * and explicit number rules throughout the rest of this documentation.
+ *
+ * # Configuring ngPluralize
+ * You configure ngPluralize by providing 2 attributes: `count` and `when`.
+ * You can also provide an optional attribute, `offset`.
+ *
+ * The value of the `count` attribute can be either a string or an {@link guide/expression
+ * Angular expression}; these are evaluated on the current scope for its bound value.
+ *
+ * The `when` attribute specifies the mappings between plural categories and the actual
+ * string to be displayed. The value of the attribute should be a JSON object.
+ *
+ * The following example shows how to configure ngPluralize:
+ *
+ * ```html
+ * <ng-pluralize count="personCount"
+                 when="{'0': 'Nobody is viewing.',
+ *                      'one': '1 person is viewing.',
+ *                      'other': '{} people are viewing.'}">
+ * </ng-pluralize>
+ *```
+ *
+ * In the example, `"0: Nobody is viewing."` is an explicit number rule. If you did not
+ * specify this rule, 0 would be matched to the "other" category and "0 people are viewing"
+ * would be shown instead of "Nobody is viewing". You can specify an explicit number rule for
+ * other numbers, for example 12, so that instead of showing "12 people are viewing", you can
+ * show "a dozen people are viewing".
+ *
+ * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted
+ * into pluralized strings. In the previous example, Angular will replace `{}` with
+ * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder
+ * for <span ng-non-bindable>{{numberExpression}}</span>.
+ *
+ * If no rule is defined for a category, then an empty string is displayed and a warning is generated.
+ * Note that some locales define more categories than `one` and `other`. For example, fr-fr defines `few` and `many`.
+ *
+ * # Configuring ngPluralize with offset
+ * The `offset` attribute allows further customization of pluralized text, which can result in
+ * a better user experience. For example, instead of the message "4 people are viewing this document",
+ * you might display "John, Kate and 2 others are viewing this document".
+ * The offset attribute allows you to offset a number by any desired value.
+ * Let's take a look at an example:
+ *
+ * ```html
+ * <ng-pluralize count="personCount" offset=2
+ *               when="{'0': 'Nobody is viewing.',
+ *                      '1': '{{person1}} is viewing.',
+ *                      '2': '{{person1}} and {{person2}} are viewing.',
+ *                      'one': '{{person1}}, {{person2}} and one other person are viewing.',
+ *                      'other': '{{person1}}, {{person2}} and {} other people are viewing.'}">
+ * </ng-pluralize>
+ * ```
+ *
+ * Notice that we are still using two plural categories(one, other), but we added
+ * three explicit number rules 0, 1 and 2.
+ * When one person, perhaps John, views the document, "John is viewing" will be shown.
+ * When three people view the document, no explicit number rule is found, so
+ * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category.
+ * In this case, plural category 'one' is matched and "John, Mary and one other person are viewing"
+ * is shown.
+ *
+ * Note that when you specify offsets, you must provide explicit number rules for
+ * numbers from 0 up to and including the offset. If you use an offset of 3, for example,
+ * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for
+ * plural categories "one" and "other".
+ *
+ * @param {string|expression} count The variable to be bound to.
+ * @param {string} when The mapping between plural category to its corresponding strings.
+ * @param {number=} offset Offset to deduct from the total number.
+ *
+ * @example
+    <example module="pluralizeExample">
+      <file name="index.html">
+        <script>
+          angular.module('pluralizeExample', [])
+            .controller('ExampleController', ['$scope', function($scope) {
+              $scope.person1 = 'Igor';
+              $scope.person2 = 'Misko';
+              $scope.personCount = 1;
+            }]);
+        </script>
+        <div ng-controller="ExampleController">
+          <label>Person 1:<input type="text" ng-model="person1" value="Igor" /></label><br/>
+          <label>Person 2:<input type="text" ng-model="person2" value="Misko" /></label><br/>
+          <label>Number of People:<input type="text" ng-model="personCount" value="1" /></label><br/>
+
+          <!--- Example with simple pluralization rules for en locale --->
+          Without Offset:
+          <ng-pluralize count="personCount"
+                        when="{'0': 'Nobody is viewing.',
+                               'one': '1 person is viewing.',
+                               'other': '{} people are viewing.'}">
+          </ng-pluralize><br>
+
+          <!--- Example with offset --->
+          With Offset(2):
+          <ng-pluralize count="personCount" offset=2
+                        when="{'0': 'Nobody is viewing.',
+                               '1': '{{person1}} is viewing.',
+                               '2': '{{person1}} and {{person2}} are viewing.',
+                               'one': '{{person1}}, {{person2}} and one other person are viewing.',
+                               'other': '{{person1}}, {{person2}} and {} other people are viewing.'}">
+          </ng-pluralize>
+        </div>
+      </file>
+      <file name="protractor.js" type="protractor">
+        it('should show correct pluralized string', function() {
+          var withoutOffset = element.all(by.css('ng-pluralize')).get(0);
+          var withOffset = element.all(by.css('ng-pluralize')).get(1);
+          var countInput = element(by.model('personCount'));
+
+          expect(withoutOffset.getText()).toEqual('1 person is viewing.');
+          expect(withOffset.getText()).toEqual('Igor is viewing.');
+
+          countInput.clear();
+          countInput.sendKeys('0');
+
+          expect(withoutOffset.getText()).toEqual('Nobody is viewing.');
+          expect(withOffset.getText()).toEqual('Nobody is viewing.');
+
+          countInput.clear();
+          countInput.sendKeys('2');
+
+          expect(withoutOffset.getText()).toEqual('2 people are viewing.');
+          expect(withOffset.getText()).toEqual('Igor and Misko are viewing.');
+
+          countInput.clear();
+          countInput.sendKeys('3');
+
+          expect(withoutOffset.getText()).toEqual('3 people are viewing.');
+          expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.');
+
+          countInput.clear();
+          countInput.sendKeys('4');
+
+          expect(withoutOffset.getText()).toEqual('4 people are viewing.');
+          expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.');
+        });
+        it('should show data-bound names', function() {
+          var withOffset = element.all(by.css('ng-pluralize')).get(1);
+          var personCount = element(by.model('personCount'));
+          var person1 = element(by.model('person1'));
+          var person2 = element(by.model('person2'));
+          personCount.clear();
+          personCount.sendKeys('4');
+          person1.clear();
+          person1.sendKeys('Di');
+          person2.clear();
+          person2.sendKeys('Vojta');
+          expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.');
+        });
+      </file>
+    </example>
+ */
+var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale, $interpolate, $log) {
+  var BRACE = /{}/g,
+      IS_WHEN = /^when(Minus)?(.+)$/;
+
+  return {
+    link: function(scope, element, attr) {
+      var numberExp = attr.count,
+          whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs
+          offset = attr.offset || 0,
+          whens = scope.$eval(whenExp) || {},
+          whensExpFns = {},
+          startSymbol = $interpolate.startSymbol(),
+          endSymbol = $interpolate.endSymbol(),
+          braceReplacement = startSymbol + numberExp + '-' + offset + endSymbol,
+          watchRemover = angular.noop,
+          lastCount;
+
+      forEach(attr, function(expression, attributeName) {
+        var tmpMatch = IS_WHEN.exec(attributeName);
+        if (tmpMatch) {
+          var whenKey = (tmpMatch[1] ? '-' : '') + lowercase(tmpMatch[2]);
+          whens[whenKey] = element.attr(attr.$attr[attributeName]);
+        }
+      });
+      forEach(whens, function(expression, key) {
+        whensExpFns[key] = $interpolate(expression.replace(BRACE, braceReplacement));
+
+      });
+
+      scope.$watch(numberExp, function ngPluralizeWatchAction(newVal) {
+        var count = parseFloat(newVal);
+        var countIsNaN = isNaN(count);
+
+        if (!countIsNaN && !(count in whens)) {
+          // If an explicit number rule such as 1, 2, 3... is defined, just use it.
+          // Otherwise, check it against pluralization rules in $locale service.
+          count = $locale.pluralCat(count - offset);
+        }
+
+        // If both `count` and `lastCount` are NaN, we don't need to re-register a watch.
+        // In JS `NaN !== NaN`, so we have to exlicitly check.
+        if ((count !== lastCount) && !(countIsNaN && isNumber(lastCount) && isNaN(lastCount))) {
+          watchRemover();
+          var whenExpFn = whensExpFns[count];
+          if (isUndefined(whenExpFn)) {
+            if (newVal != null) {
+              $log.debug("ngPluralize: no rule defined for '" + count + "' in " + whenExp);
+            }
+            watchRemover = noop;
+            updateElementText();
+          } else {
+            watchRemover = scope.$watch(whenExpFn, updateElementText);
+          }
+          lastCount = count;
+        }
+      });
+
+      function updateElementText(newText) {
+        element.text(newText || '');
+      }
+    }
+  };
+}];
+
+/**
+ * @ngdoc directive
+ * @name ngRepeat
+ * @multiElement
+ *
+ * @description
+ * The `ngRepeat` directive instantiates a template once per item from a collection. Each template
+ * instance gets its own scope, where the given loop variable is set to the current collection item,
+ * and `$index` is set to the item index or key.
+ *
+ * Special properties are exposed on the local scope of each template instance, including:
+ *
+ * | Variable  | Type            | Details                                                                     |
+ * |-----------|-----------------|-----------------------------------------------------------------------------|
+ * | `$index`  | {@type number}  | iterator offset of the repeated element (0..length-1)                       |
+ * | `$first`  | {@type boolean} | true if the repeated element is first in the iterator.                      |
+ * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. |
+ * | `$last`   | {@type boolean} | true if the repeated element is last in the iterator.                       |
+ * | `$even`   | {@type boolean} | true if the iterator position `$index` is even (otherwise false).           |
+ * | `$odd`    | {@type boolean} | true if the iterator position `$index` is odd (otherwise false).            |
+ *
+ * <div class="alert alert-info">
+ *   Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}.
+ *   This may be useful when, for instance, nesting ngRepeats.
+ * </div>
+ *
+ *
+ * # Iterating over object properties
+ *
+ * It is possible to get `ngRepeat` to iterate over the properties of an object using the following
+ * syntax:
+ *
+ * ```js
+ * <div ng-repeat="(key, value) in myObj"> ... </div>
+ * ```
+ *
+ * You need to be aware that the JavaScript specification does not define the order of keys
+ * returned for an object. (To mitigate this in Angular 1.3 the `ngRepeat` directive
+ * used to sort the keys alphabetically.)
+ *
+ * Version 1.4 removed the alphabetic sorting. We now rely on the order returned by the browser
+ * when running `for key in myObj`. It seems that browsers generally follow the strategy of providing
+ * keys in the order in which they were defined, although there are exceptions when keys are deleted
+ * and reinstated. See the [MDN page on `delete` for more info](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete#Cross-browser_notes).
+ *
+ * If this is not desired, the recommended workaround is to convert your object into an array
+ * that is sorted into the order that you prefer before providing it to `ngRepeat`.  You could
+ * do this with a filter such as [toArrayFilter](http://ngmodules.org/modules/angular-toArrayFilter)
+ * or implement a `$watch` on the object yourself.
+ *
+ *
+ * # Tracking and Duplicates
+ *
+ * `ngRepeat` uses {@link $rootScope.Scope#$watchCollection $watchCollection} to detect changes in
+ * the collection. When a change happens, ngRepeat then makes the corresponding changes to the DOM:
+ *
+ * * When an item is added, a new instance of the template is added to the DOM.
+ * * When an item is removed, its template instance is removed from the DOM.
+ * * When items are reordered, their respective templates are reordered in the DOM.
+ *
+ * To minimize creation of DOM elements, `ngRepeat` uses a function
+ * to "keep track" of all items in the collection and their corresponding DOM elements.
+ * For example, if an item is added to the collection, ngRepeat will know that all other items
+ * already have DOM elements, and will not re-render them.
+ *
+ * The default tracking function (which tracks items by their identity) does not allow
+ * duplicate items in arrays. This is because when there are duplicates, it is not possible
+ * to maintain a one-to-one mapping between collection items and DOM elements.
+ *
+ * If you do need to repeat duplicate items, you can substitute the default tracking behavior
+ * with your own using the `track by` expression.
+ *
+ * For example, you may track items by the index of each item in the collection, using the
+ * special scope property `$index`:
+ * ```html
+ *    <div ng-repeat="n in [42, 42, 43, 43] track by $index">
+ *      {{n}}
+ *    </div>
+ * ```
+ *
+ * You may also use arbitrary expressions in `track by`, including references to custom functions
+ * on the scope:
+ * ```html
+ *    <div ng-repeat="n in [42, 42, 43, 43] track by myTrackingFunction(n)">
+ *      {{n}}
+ *    </div>
+ * ```
+ *
+ * <div class="alert alert-success">
+ * If you are working with objects that have an identifier property, you should track
+ * by the identifier instead of the whole object. Should you reload your data later, `ngRepeat`
+ * will not have to rebuild the DOM elements for items it has already rendered, even if the
+ * JavaScript objects in the collection have been substituted for new ones. For large collections,
+ * this signifincantly improves rendering performance. If you don't have a unique identifier,
+ * `track by $index` can also provide a performance boost.
+ * </div>
+ * ```html
+ *    <div ng-repeat="model in collection track by model.id">
+ *      {{model.name}}
+ *    </div>
+ * ```
+ *
+ * When no `track by` expression is provided, it is equivalent to tracking by the built-in
+ * `$id` function, which tracks items by their identity:
+ * ```html
+ *    <div ng-repeat="obj in collection track by $id(obj)">
+ *      {{obj.prop}}
+ *    </div>
+ * ```
+ *
+ * <div class="alert alert-warning">
+ * **Note:** `track by` must always be the last expression:
+ * </div>
+ * ```
+ * <div ng-repeat="model in collection | orderBy: 'id' as filtered_result track by model.id">
+ *     {{model.name}}
+ * </div>
+ * ```
+ *
+ * # Special repeat start and end points
+ * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending
+ * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively.
+ * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on)
+ * up to and including the ending HTML tag where **ng-repeat-end** is placed.
+ *
+ * The example below makes use of this feature:
+ * ```html
+ *   <header ng-repeat-start="item in items">
+ *     Header {{ item }}
+ *   </header>
+ *   <div class="body">
+ *     Body {{ item }}
+ *   </div>
+ *   <footer ng-repeat-end>
+ *     Footer {{ item }}
+ *   </footer>
+ * ```
+ *
+ * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to:
+ * ```html
+ *   <header>
+ *     Header A
+ *   </header>
+ *   <div class="body">
+ *     Body A
+ *   </div>
+ *   <footer>
+ *     Footer A
+ *   </footer>
+ *   <header>
+ *     Header B
+ *   </header>
+ *   <div class="body">
+ *     Body B
+ *   </div>
+ *   <footer>
+ *     Footer B
+ *   </footer>
+ * ```
+ *
+ * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such
+ * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**).
+ *
+ * @animations
+ * **.enter** - when a new item is added to the list or when an item is revealed after a filter
+ *
+ * **.leave** - when an item is removed from the list or when an item is filtered out
+ *
+ * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered
+ *
+ * @element ANY
+ * @scope
+ * @priority 1000
+ * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These
+ *   formats are currently supported:
+ *
+ *   * `variable in expression` – where variable is the user defined loop variable and `expression`
+ *     is a scope expression giving the collection to enumerate.
+ *
+ *     For example: `album in artist.albums`.
+ *
+ *   * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers,
+ *     and `expression` is the scope expression giving the collection to enumerate.
+ *
+ *     For example: `(name, age) in {'adam':10, 'amalie':12}`.
+ *
+ *   * `variable in expression track by tracking_expression` – You can also provide an optional tracking expression
+ *     which can be used to associate the objects in the collection with the DOM elements. If no tracking expression
+ *     is specified, ng-repeat associates elements by identity. It is an error to have
+ *     more than one tracking expression value resolve to the same key. (This would mean that two distinct objects are
+ *     mapped to the same DOM element, which is not possible.)
+ *
+ *     Note that the tracking expression must come last, after any filters, and the alias expression.
+ *
+ *     For example: `item in items` is equivalent to `item in items track by $id(item)`. This implies that the DOM elements
+ *     will be associated by item identity in the array.
+ *
+ *     For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique
+ *     `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements
+ *     with the corresponding item in the array by identity. Moving the same object in array would move the DOM
+ *     element in the same way in the DOM.
+ *
+ *     For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this
+ *     case the object identity does not matter. Two objects are considered equivalent as long as their `id`
+ *     property is same.
+ *
+ *     For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter
+ *     to items in conjunction with a tracking expression.
+ *
+ *   * `variable in expression as alias_expression` – You can also provide an optional alias expression which will then store the
+ *     intermediate results of the repeater after the filters have been applied. Typically this is used to render a special message
+ *     when a filter is active on the repeater, but the filtered result set is empty.
+ *
+ *     For example: `item in items | filter:x as results` will store the fragment of the repeated items as `results`, but only after
+ *     the items have been processed through the filter.
+ *
+ *     Please note that `as [variable name] is not an operator but rather a part of ngRepeat micro-syntax so it can be used only at the end
+ *     (and not as operator, inside an expression).
+ *
+ *     For example: `item in items | filter : x | orderBy : order | limitTo : limit as results` .
+ *
+ * @example
+ * This example initializes the scope to a list of names and
+ * then uses `ngRepeat` to display every person:
+  <example module="ngAnimate" deps="angular-animate.js" animations="true">
+    <file name="index.html">
+      <div ng-init="friends = [
+        {name:'John', age:25, gender:'boy'},
+        {name:'Jessie', age:30, gender:'girl'},
+        {name:'Johanna', age:28, gender:'girl'},
+        {name:'Joy', age:15, gender:'girl'},
+        {name:'Mary', age:28, gender:'girl'},
+        {name:'Peter', age:95, gender:'boy'},
+        {name:'Sebastian', age:50, gender:'boy'},
+        {name:'Erika', age:27, gender:'girl'},
+        {name:'Patrick', age:40, gender:'boy'},
+        {name:'Samantha', age:60, gender:'girl'}
+      ]">
+        I have {{friends.length}} friends. They are:
+        <input type="search" ng-model="q" placeholder="filter friends..." aria-label="filter friends" />
+        <ul class="example-animate-container">
+          <li class="animate-repeat" ng-repeat="friend in friends | filter:q as results">
+            [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.
+          </li>
+          <li class="animate-repeat" ng-if="results.length == 0">
+            <strong>No results found...</strong>
+          </li>
+        </ul>
+      </div>
+    </file>
+    <file name="animations.css">
+      .example-animate-container {
+        background:white;
+        border:1px solid black;
+        list-style:none;
+        margin:0;
+        padding:0 10px;
+      }
+
+      .animate-repeat {
+        line-height:40px;
+        list-style:none;
+        box-sizing:border-box;
+      }
+
+      .animate-repeat.ng-move,
+      .animate-repeat.ng-enter,
+      .animate-repeat.ng-leave {
+        transition:all linear 0.5s;
+      }
+
+      .animate-repeat.ng-leave.ng-leave-active,
+      .animate-repeat.ng-move,
+      .animate-repeat.ng-enter {
+        opacity:0;
+        max-height:0;
+      }
+
+      .animate-repeat.ng-leave,
+      .animate-repeat.ng-move.ng-move-active,
+      .animate-repeat.ng-enter.ng-enter-active {
+        opacity:1;
+        max-height:40px;
+      }
+    </file>
+    <file name="protractor.js" type="protractor">
+      var friends = element.all(by.repeater('friend in friends'));
+
+      it('should render initial data set', function() {
+        expect(friends.count()).toBe(10);
+        expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.');
+        expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.');
+        expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.');
+        expect(element(by.binding('friends.length')).getText())
+            .toMatch("I have 10 friends. They are:");
+      });
+
+       it('should update repeater when filter predicate changes', function() {
+         expect(friends.count()).toBe(10);
+
+         element(by.model('q')).sendKeys('ma');
+
+         expect(friends.count()).toBe(2);
+         expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.');
+         expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.');
+       });
+      </file>
+    </example>
+ */
+var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
+  var NG_REMOVED = '$$NG_REMOVED';
+  var ngRepeatMinErr = minErr('ngRepeat');
+
+  var updateScope = function(scope, index, valueIdentifier, value, keyIdentifier, key, arrayLength) {
+    // TODO(perf): generate setters to shave off ~40ms or 1-1.5%
+    scope[valueIdentifier] = value;
+    if (keyIdentifier) scope[keyIdentifier] = key;
+    scope.$index = index;
+    scope.$first = (index === 0);
+    scope.$last = (index === (arrayLength - 1));
+    scope.$middle = !(scope.$first || scope.$last);
+    // jshint bitwise: false
+    scope.$odd = !(scope.$even = (index&1) === 0);
+    // jshint bitwise: true
+  };
+
+  var getBlockStart = function(block) {
+    return block.clone[0];
+  };
+
+  var getBlockEnd = function(block) {
+    return block.clone[block.clone.length - 1];
+  };
+
+
+  return {
+    restrict: 'A',
+    multiElement: true,
+    transclude: 'element',
+    priority: 1000,
+    terminal: true,
+    $$tlb: true,
+    compile: function ngRepeatCompile($element, $attr) {
+      var expression = $attr.ngRepeat;
+      var ngRepeatEndComment = document.createComment(' end ngRepeat: ' + expression + ' ');
+
+      var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
+
+      if (!match) {
+        throw ngRepeatMinErr('iexp', "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.",
+            expression);
+      }
+
+      var lhs = match[1];
+      var rhs = match[2];
+      var aliasAs = match[3];
+      var trackByExp = match[4];
+
+      match = lhs.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);
+
+      if (!match) {
+        throw ngRepeatMinErr('iidexp', "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.",
+            lhs);
+      }
+      var valueIdentifier = match[3] || match[1];
+      var keyIdentifier = match[2];
+
+      if (aliasAs && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(aliasAs) ||
+          /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(aliasAs))) {
+        throw ngRepeatMinErr('badident', "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.",
+          aliasAs);
+      }
+
+      var trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn;
+      var hashFnLocals = {$id: hashKey};
+
+      if (trackByExp) {
+        trackByExpGetter = $parse(trackByExp);
+      } else {
+        trackByIdArrayFn = function(key, value) {
+          return hashKey(value);
+        };
+        trackByIdObjFn = function(key) {
+          return key;
+        };
+      }
+
+      return function ngRepeatLink($scope, $element, $attr, ctrl, $transclude) {
+
+        if (trackByExpGetter) {
+          trackByIdExpFn = function(key, value, index) {
+            // assign key, value, and $index to the locals so that they can be used in hash functions
+            if (keyIdentifier) hashFnLocals[keyIdentifier] = key;
+            hashFnLocals[valueIdentifier] = value;
+            hashFnLocals.$index = index;
+            return trackByExpGetter($scope, hashFnLocals);
+          };
+        }
+
+        // Store a list of elements from previous run. This is a hash where key is the item from the
+        // iterator, and the value is objects with following properties.
+        //   - scope: bound scope
+        //   - element: previous element.
+        //   - index: position
+        //
+        // We are using no-proto object so that we don't need to guard against inherited props via
+        // hasOwnProperty.
+        var lastBlockMap = createMap();
+
+        //watch props
+        $scope.$watchCollection(rhs, function ngRepeatAction(collection) {
+          var index, length,
+              previousNode = $element[0],     // node that cloned nodes should be inserted after
+                                              // initialized to the comment node anchor
+              nextNode,
+              // Same as lastBlockMap but it has the current state. It will become the
+              // lastBlockMap on the next iteration.
+              nextBlockMap = createMap(),
+              collectionLength,
+              key, value, // key/value of iteration
+              trackById,
+              trackByIdFn,
+              collectionKeys,
+              block,       // last object information {scope, element, id}
+              nextBlockOrder,
+              elementsToRemove;
+
+          if (aliasAs) {
+            $scope[aliasAs] = collection;
+          }
+
+          if (isArrayLike(collection)) {
+            collectionKeys = collection;
+            trackByIdFn = trackByIdExpFn || trackByIdArrayFn;
+          } else {
+            trackByIdFn = trackByIdExpFn || trackByIdObjFn;
+            // if object, extract keys, in enumeration order, unsorted
+            collectionKeys = [];
+            for (var itemKey in collection) {
+              if (hasOwnProperty.call(collection, itemKey) && itemKey.charAt(0) !== '$') {
+                collectionKeys.push(itemKey);
+              }
+            }
+          }
+
+          collectionLength = collectionKeys.length;
+          nextBlockOrder = new Array(collectionLength);
+
+          // locate existing items
+          for (index = 0; index < collectionLength; index++) {
+            key = (collection === collectionKeys) ? index : collectionKeys[index];
+            value = collection[key];
+            trackById = trackByIdFn(key, value, index);
+            if (lastBlockMap[trackById]) {
+              // found previously seen block
+              block = lastBlockMap[trackById];
+              delete lastBlockMap[trackById];
+              nextBlockMap[trackById] = block;
+              nextBlockOrder[index] = block;
+            } else if (nextBlockMap[trackById]) {
+              // if collision detected. restore lastBlockMap and throw an error
+              forEach(nextBlockOrder, function(block) {
+                if (block && block.scope) lastBlockMap[block.id] = block;
+              });
+              throw ngRepeatMinErr('dupes',
+                  "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}",
+                  expression, trackById, value);
+            } else {
+              // new never before seen block
+              nextBlockOrder[index] = {id: trackById, scope: undefined, clone: undefined};
+              nextBlockMap[trackById] = true;
+            }
+          }
+
+          // remove leftover items
+          for (var blockKey in lastBlockMap) {
+            block = lastBlockMap[blockKey];
+            elementsToRemove = getBlockNodes(block.clone);
+            $animate.leave(elementsToRemove);
+            if (elementsToRemove[0].parentNode) {
+              // if the element was not removed yet because of pending animation, mark it as deleted
+              // so that we can ignore it later
+              for (index = 0, length = elementsToRemove.length; index < length; index++) {
+                elementsToRemove[index][NG_REMOVED] = true;
+              }
+            }
+            block.scope.$destroy();
+          }
+
+          // we are not using forEach for perf reasons (trying to avoid #call)
+          for (index = 0; index < collectionLength; index++) {
+            key = (collection === collectionKeys) ? index : collectionKeys[index];
+            value = collection[key];
+            block = nextBlockOrder[index];
+
+            if (block.scope) {
+              // if we have already seen this object, then we need to reuse the
+              // associated scope/element
+
+              nextNode = previousNode;
+
+              // skip nodes that are already pending removal via leave animation
+              do {
+                nextNode = nextNode.nextSibling;
+              } while (nextNode && nextNode[NG_REMOVED]);
+
+              if (getBlockStart(block) != nextNode) {
+                // existing item which got moved
+                $animate.move(getBlockNodes(block.clone), null, jqLite(previousNode));
+              }
+              previousNode = getBlockEnd(block);
+              updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength);
+            } else {
+              // new item which we don't know about
+              $transclude(function ngRepeatTransclude(clone, scope) {
+                block.scope = scope;
+                // http://jsperf.com/clone-vs-createcomment
+                var endNode = ngRepeatEndComment.cloneNode(false);
+                clone[clone.length++] = endNode;
+
+                // TODO(perf): support naked previousNode in `enter` to avoid creation of jqLite wrapper?
+                $animate.enter(clone, null, jqLite(previousNode));
+                previousNode = endNode;
+                // Note: We only need the first/last node of the cloned nodes.
+                // However, we need to keep the reference to the jqlite wrapper as it might be changed later
+                // by a directive with templateUrl when its template arrives.
+                block.clone = clone;
+                nextBlockMap[block.id] = block;
+                updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength);
+              });
+            }
+          }
+          lastBlockMap = nextBlockMap;
+        });
+      };
+    }
+  };
+}];
+
+var NG_HIDE_CLASS = 'ng-hide';
+var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';
+/**
+ * @ngdoc directive
+ * @name ngShow
+ * @multiElement
+ *
+ * @description
+ * The `ngShow` directive shows or hides the given HTML element based on the expression
+ * provided to the `ngShow` attribute. The element is shown or hidden by removing or adding
+ * the `.ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined
+ * in AngularJS and sets the display style to none (using an !important flag).
+ * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
+ *
+ * ```html
+ * <!-- when $scope.myValue is truthy (element is visible) -->
+ * <div ng-show="myValue"></div>
+ *
+ * <!-- when $scope.myValue is falsy (element is hidden) -->
+ * <div ng-show="myValue" class="ng-hide"></div>
+ * ```
+ *
+ * When the `ngShow` expression evaluates to a falsy value then the `.ng-hide` CSS class is added to the class
+ * attribute on the element causing it to become hidden. When truthy, the `.ng-hide` CSS class is removed
+ * from the element causing the element not to appear hidden.
+ *
+ * ## Why is !important used?
+ *
+ * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector
+ * can be easily overridden by heavier selectors. For example, something as simple
+ * as changing the display style on a HTML list item would make hidden elements appear visible.
+ * This also becomes a bigger issue when dealing with CSS frameworks.
+ *
+ * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector
+ * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the
+ * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.
+ *
+ * ### Overriding `.ng-hide`
+ *
+ * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change
+ * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`
+ * class CSS. Note that the selector that needs to be used is actually `.ng-hide:not(.ng-hide-animate)` to cope
+ * with extra animation classes that can be added.
+ *
+ * ```css
+ * .ng-hide:not(.ng-hide-animate) {
+ *   /&#42; this is just another form of hiding an element &#42;/
+ *   display: block!important;
+ *   position: absolute;
+ *   top: -9999px;
+ *   left: -9999px;
+ * }
+ * ```
+ *
+ * By default you don't need to override in CSS anything and the animations will work around the display style.
+ *
+ * ## A note about animations with `ngShow`
+ *
+ * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression
+ * is true and false. This system works like the animation system present with ngClass except that
+ * you must also include the !important flag to override the display property
+ * so that you can perform an animation when the element is hidden during the time of the animation.
+ *
+ * ```css
+ * //
+ * //a working example can be found at the bottom of this page
+ * //
+ * .my-element.ng-hide-add, .my-element.ng-hide-remove {
+ *   /&#42; this is required as of 1.3x to properly
+ *      apply all styling in a show/hide animation &#42;/
+ *   transition: 0s linear all;
+ * }
+ *
+ * .my-element.ng-hide-add-active,
+ * .my-element.ng-hide-remove-active {
+ *   /&#42; the transition is defined in the active class &#42;/
+ *   transition: 1s linear all;
+ * }
+ *
+ * .my-element.ng-hide-add { ... }
+ * .my-element.ng-hide-add.ng-hide-add-active { ... }
+ * .my-element.ng-hide-remove { ... }
+ * .my-element.ng-hide-remove.ng-hide-remove-active { ... }
+ * ```
+ *
+ * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display
+ * property to block during animation states--ngAnimate will handle the style toggling automatically for you.
+ *
+ * @animations
+ * addClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a truthy value and the just before contents are set to visible
+ * removeClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a non truthy value and just before the contents are set to hidden
+ *
+ * @element ANY
+ * @param {expression} ngShow If the {@link guide/expression expression} is truthy
+ *     then the element is shown or hidden respectively.
+ *
+ * @example
+  <example module="ngAnimate" deps="angular-animate.js" animations="true">
+    <file name="index.html">
+      Click me: <input type="checkbox" ng-model="checked" aria-label="Toggle ngHide"><br/>
+      <div>
+        Show:
+        <div class="check-element animate-show" ng-show="checked">
+          <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked.
+        </div>
+      </div>
+      <div>
+        Hide:
+        <div class="check-element animate-show" ng-hide="checked">
+          <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked.
+        </div>
+      </div>
+    </file>
+    <file name="glyphicons.css">
+      @import url(../../components/bootstrap-3.1.1/css/bootstrap.css);
+    </file>
+    <file name="animations.css">
+      .animate-show {
+        line-height: 20px;
+        opacity: 1;
+        padding: 10px;
+        border: 1px solid black;
+        background: white;
+      }
+
+      .animate-show.ng-hide-add, .animate-show.ng-hide-remove {
+        transition: all linear 0.5s;
+      }
+
+      .animate-show.ng-hide {
+        line-height: 0;
+        opacity: 0;
+        padding: 0 10px;
+      }
+
+      .check-element {
+        padding: 10px;
+        border: 1px solid black;
+        background: white;
+      }
+    </file>
+    <file name="protractor.js" type="protractor">
+      var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));
+      var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));
+
+      it('should check ng-show / ng-hide', function() {
+        expect(thumbsUp.isDisplayed()).toBeFalsy();
+        expect(thumbsDown.isDisplayed()).toBeTruthy();
+
+        element(by.model('checked')).click();
+
+        expect(thumbsUp.isDisplayed()).toBeTruthy();
+        expect(thumbsDown.isDisplayed()).toBeFalsy();
+      });
+    </file>
+  </example>
+ */
+var ngShowDirective = ['$animate', function($animate) {
+  return {
+    restrict: 'A',
+    multiElement: true,
+    link: function(scope, element, attr) {
+      scope.$watch(attr.ngShow, function ngShowWatchAction(value) {
+        // we're adding a temporary, animation-specific class for ng-hide since this way
+        // we can control when the element is actually displayed on screen without having
+        // to have a global/greedy CSS selector that breaks when other animations are run.
+        // Read: https://github.com/angular/angular.js/issues/9103#issuecomment-58335845
+        $animate[value ? 'removeClass' : 'addClass'](element, NG_HIDE_CLASS, {
+          tempClasses: NG_HIDE_IN_PROGRESS_CLASS
+        });
+      });
+    }
+  };
+}];
+
+
+/**
+ * @ngdoc directive
+ * @name ngHide
+ * @multiElement
+ *
+ * @description
+ * The `ngHide` directive shows or hides the given HTML element based on the expression
+ * provided to the `ngHide` attribute. The element is shown or hidden by removing or adding
+ * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined
+ * in AngularJS and sets the display style to none (using an !important flag).
+ * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
+ *
+ * ```html
+ * <!-- when $scope.myValue is truthy (element is hidden) -->
+ * <div ng-hide="myValue" class="ng-hide"></div>
+ *
+ * <!-- when $scope.myValue is falsy (element is visible) -->
+ * <div ng-hide="myValue"></div>
+ * ```
+ *
+ * When the `ngHide` expression evaluates to a truthy value then the `.ng-hide` CSS class is added to the class
+ * attribute on the element causing it to become hidden. When falsy, the `.ng-hide` CSS class is removed
+ * from the element causing the element not to appear hidden.
+ *
+ * ## Why is !important used?
+ *
+ * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector
+ * can be easily overridden by heavier selectors. For example, something as simple
+ * as changing the display style on a HTML list item would make hidden elements appear visible.
+ * This also becomes a bigger issue when dealing with CSS frameworks.
+ *
+ * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector
+ * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the
+ * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.
+ *
+ * ### Overriding `.ng-hide`
+ *
+ * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change
+ * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`
+ * class in CSS:
+ *
+ * ```css
+ * .ng-hide {
+ *   /&#42; this is just another form of hiding an element &#42;/
+ *   display: block!important;
+ *   position: absolute;
+ *   top: -9999px;
+ *   left: -9999px;
+ * }
+ * ```
+ *
+ * By default you don't need to override in CSS anything and the animations will work around the display style.
+ *
+ * ## A note about animations with `ngHide`
+ *
+ * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression
+ * is true and false. This system works like the animation system present with ngClass, except that the `.ng-hide`
+ * CSS class is added and removed for you instead of your own CSS class.
+ *
+ * ```css
+ * //
+ * //a working example can be found at the bottom of this page
+ * //
+ * .my-element.ng-hide-add, .my-element.ng-hide-remove {
+ *   transition: 0.5s linear all;
+ * }
+ *
+ * .my-element.ng-hide-add { ... }
+ * .my-element.ng-hide-add.ng-hide-add-active { ... }
+ * .my-element.ng-hide-remove { ... }
+ * .my-element.ng-hide-remove.ng-hide-remove-active { ... }
+ * ```
+ *
+ * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display
+ * property to block during animation states--ngAnimate will handle the style toggling automatically for you.
+ *
+ * @animations
+ * removeClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a truthy value and just before the contents are set to hidden
+ * addClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a non truthy value and just before the contents are set to visible
+ *
+ * @element ANY
+ * @param {expression} ngHide If the {@link guide/expression expression} is truthy then
+ *     the element is shown or hidden respectively.
+ *
+ * @example
+  <example module="ngAnimate" deps="angular-animate.js" animations="true">
+    <file name="index.html">
+      Click me: <input type="checkbox" ng-model="checked" aria-label="Toggle ngShow"><br/>
+      <div>
+        Show:
+        <div class="check-element animate-hide" ng-show="checked">
+          <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked.
+        </div>
+      </div>
+      <div>
+        Hide:
+        <div class="check-element animate-hide" ng-hide="checked">
+          <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked.
+        </div>
+      </div>
+    </file>
+    <file name="glyphicons.css">
+      @import url(../../components/bootstrap-3.1.1/css/bootstrap.css);
+    </file>
+    <file name="animations.css">
+      .animate-hide {
+        transition: all linear 0.5s;
+        line-height: 20px;
+        opacity: 1;
+        padding: 10px;
+        border: 1px solid black;
+        background: white;
+      }
+
+      .animate-hide.ng-hide {
+        line-height: 0;
+        opacity: 0;
+        padding: 0 10px;
+      }
+
+      .check-element {
+        padding: 10px;
+        border: 1px solid black;
+        background: white;
+      }
+    </file>
+    <file name="protractor.js" type="protractor">
+      var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));
+      var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));
+
+      it('should check ng-show / ng-hide', function() {
+        expect(thumbsUp.isDisplayed()).toBeFalsy();
+        expect(thumbsDown.isDisplayed()).toBeTruthy();
+
+        element(by.model('checked')).click();
+
+        expect(thumbsUp.isDisplayed()).toBeTruthy();
+        expect(thumbsDown.isDisplayed()).toBeFalsy();
+      });
+    </file>
+  </example>
+ */
+var ngHideDirective = ['$animate', function($animate) {
+  return {
+    restrict: 'A',
+    multiElement: true,
+    link: function(scope, element, attr) {
+      scope.$watch(attr.ngHide, function ngHideWatchAction(value) {
+        // The comment inside of the ngShowDirective explains why we add and
+        // remove a temporary class for the show/hide animation
+        $animate[value ? 'addClass' : 'removeClass'](element,NG_HIDE_CLASS, {
+          tempClasses: NG_HIDE_IN_PROGRESS_CLASS
+        });
+      });
+    }
+  };
+}];
+
+/**
+ * @ngdoc directive
+ * @name ngStyle
+ * @restrict AC
+ *
+ * @description
+ * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally.
+ *
+ * @element ANY
+ * @param {expression} ngStyle
+ *
+ * {@link guide/expression Expression} which evals to an
+ * object whose keys are CSS style names and values are corresponding values for those CSS
+ * keys.
+ *
+ * Since some CSS style names are not valid keys for an object, they must be quoted.
+ * See the 'background-color' style in the example below.
+ *
+ * @example
+   <example>
+     <file name="index.html">
+        <input type="button" value="set color" ng-click="myStyle={color:'red'}">
+        <input type="button" value="set background" ng-click="myStyle={'background-color':'blue'}">
+        <input type="button" value="clear" ng-click="myStyle={}">
+        <br/>
+        <span ng-style="myStyle">Sample Text</span>
+        <pre>myStyle={{myStyle}}</pre>
+     </file>
+     <file name="style.css">
+       span {
+         color: black;
+       }
+     </file>
+     <file name="protractor.js" type="protractor">
+       var colorSpan = element(by.css('span'));
+
+       it('should check ng-style', function() {
+         expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');
+         element(by.css('input[value=\'set color\']')).click();
+         expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)');
+         element(by.css('input[value=clear]')).click();
+         expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');
+       });
+     </file>
+   </example>
+ */
+var ngStyleDirective = ngDirective(function(scope, element, attr) {
+  scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) {
+    if (oldStyles && (newStyles !== oldStyles)) {
+      forEach(oldStyles, function(val, style) { element.css(style, '');});
+    }
+    if (newStyles) element.css(newStyles);
+  }, true);
+});
+
+/**
+ * @ngdoc directive
+ * @name ngSwitch
+ * @restrict EA
+ *
+ * @description
+ * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression.
+ * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location
+ * as specified in the template.
+ *
+ * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it
+ * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element
+ * matches the value obtained from the evaluated expression. In other words, you define a container element
+ * (where you place the directive), place an expression on the **`on="..."` attribute**
+ * (or the **`ng-switch="..."` attribute**), define any inner elements inside of the directive and place
+ * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on
+ * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default
+ * attribute is displayed.
+ *
+ * <div class="alert alert-info">
+ * Be aware that the attribute values to match against cannot be expressions. They are interpreted
+ * as literal string values to match against.
+ * For example, **`ng-switch-when="someVal"`** will match against the string `"someVal"` not against the
+ * value of the expression `$scope.someVal`.
+ * </div>
+
+ * @animations
+ * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container
+ * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM
+ *
+ * @usage
+ *
+ * ```
+ * <ANY ng-switch="expression">
+ *   <ANY ng-switch-when="matchValue1">...</ANY>
+ *   <ANY ng-switch-when="matchValue2">...</ANY>
+ *   <ANY ng-switch-default>...</ANY>
+ * </ANY>
+ * ```
+ *
+ *
+ * @scope
+ * @priority 1200
+ * @param {*} ngSwitch|on expression to match against <code>ng-switch-when</code>.
+ * On child elements add:
+ *
+ * * `ngSwitchWhen`: the case statement to match against. If match then this
+ *   case will be displayed. If the same match appears multiple times, all the
+ *   elements will be displayed.
+ * * `ngSwitchDefault`: the default case when no other case match. If there
+ *   are multiple default cases, all of them will be displayed when no other
+ *   case match.
+ *
+ *
+ * @example
+  <example module="switchExample" deps="angular-animate.js" animations="true">
+    <file name="index.html">
+      <div ng-controller="ExampleController">
+        <select ng-model="selection" ng-options="item for item in items">
+        </select>
+        <code>selection={{selection}}</code>
+        <hr/>
+        <div class="animate-switch-container"
+          ng-switch on="selection">
+            <div class="animate-switch" ng-switch-when="settings">Settings Div</div>
+            <div class="animate-switch" ng-switch-when="home">Home Span</div>
+            <div class="animate-switch" ng-switch-default>default</div>
+        </div>
+      </div>
+    </file>
+    <file name="script.js">
+      angular.module('switchExample', ['ngAnimate'])
+        .controller('ExampleController', ['$scope', function($scope) {
+          $scope.items = ['settings', 'home', 'other'];
+          $scope.selection = $scope.items[0];
+        }]);
+    </file>
+    <file name="animations.css">
+      .animate-switch-container {
+        position:relative;
+        background:white;
+        border:1px solid black;
+        height:40px;
+        overflow:hidden;
+      }
+
+      .animate-switch {
+        padding:10px;
+      }
+
+      .animate-switch.ng-animate {
+        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+
+        position:absolute;
+        top:0;
+        left:0;
+        right:0;
+        bottom:0;
+      }
+
+      .animate-switch.ng-leave.ng-leave-active,
+      .animate-switch.ng-enter {
+        top:-50px;
+      }
+      .animate-switch.ng-leave,
+      .animate-switch.ng-enter.ng-enter-active {
+        top:0;
+      }
+    </file>
+    <file name="protractor.js" type="protractor">
+      var switchElem = element(by.css('[ng-switch]'));
+      var select = element(by.model('selection'));
+
+      it('should start in settings', function() {
+        expect(switchElem.getText()).toMatch(/Settings Div/);
+      });
+      it('should change to home', function() {
+        select.all(by.css('option')).get(1).click();
+        expect(switchElem.getText()).toMatch(/Home Span/);
+      });
+      it('should select default', function() {
+        select.all(by.css('option')).get(2).click();
+        expect(switchElem.getText()).toMatch(/default/);
+      });
+    </file>
+  </example>
+ */
+var ngSwitchDirective = ['$animate', function($animate) {
+  return {
+    require: 'ngSwitch',
+
+    // asks for $scope to fool the BC controller module
+    controller: ['$scope', function ngSwitchController() {
+     this.cases = {};
+    }],
+    link: function(scope, element, attr, ngSwitchController) {
+      var watchExpr = attr.ngSwitch || attr.on,
+          selectedTranscludes = [],
+          selectedElements = [],
+          previousLeaveAnimations = [],
+          selectedScopes = [];
+
+      var spliceFactory = function(array, index) {
+          return function() { array.splice(index, 1); };
+      };
+
+      scope.$watch(watchExpr, function ngSwitchWatchAction(value) {
+        var i, ii;
+        for (i = 0, ii = previousLeaveAnimations.length; i < ii; ++i) {
+          $animate.cancel(previousLeaveAnimations[i]);
+        }
+        previousLeaveAnimations.length = 0;
+
+        for (i = 0, ii = selectedScopes.length; i < ii; ++i) {
+          var selected = getBlockNodes(selectedElements[i].clone);
+          selectedScopes[i].$destroy();
+          var promise = previousLeaveAnimations[i] = $animate.leave(selected);
+          promise.then(spliceFactory(previousLeaveAnimations, i));
+        }
+
+        selectedElements.length = 0;
+        selectedScopes.length = 0;
+
+        if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) {
+          forEach(selectedTranscludes, function(selectedTransclude) {
+            selectedTransclude.transclude(function(caseElement, selectedScope) {
+              selectedScopes.push(selectedScope);
+              var anchor = selectedTransclude.element;
+              caseElement[caseElement.length++] = document.createComment(' end ngSwitchWhen: ');
+              var block = { clone: caseElement };
+
+              selectedElements.push(block);
+              $animate.enter(caseElement, anchor.parent(), anchor);
+            });
+          });
+        }
+      });
+    }
+  };
+}];
+
+var ngSwitchWhenDirective = ngDirective({
+  transclude: 'element',
+  priority: 1200,
+  require: '^ngSwitch',
+  multiElement: true,
+  link: function(scope, element, attrs, ctrl, $transclude) {
+    ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []);
+    ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element });
+  }
+});
+
+var ngSwitchDefaultDirective = ngDirective({
+  transclude: 'element',
+  priority: 1200,
+  require: '^ngSwitch',
+  multiElement: true,
+  link: function(scope, element, attr, ctrl, $transclude) {
+    ctrl.cases['?'] = (ctrl.cases['?'] || []);
+    ctrl.cases['?'].push({ transclude: $transclude, element: element });
+   }
+});
+
+/**
+ * @ngdoc directive
+ * @name ngTransclude
+ * @restrict EAC
+ *
+ * @description
+ * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.
+ *
+ * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted.
+ *
+ * @element ANY
+ *
+ * @example
+   <example module="transcludeExample">
+     <file name="index.html">
+       <script>
+         angular.module('transcludeExample', [])
+          .directive('pane', function(){
+             return {
+               restrict: 'E',
+               transclude: true,
+               scope: { title:'@' },
+               template: '<div style="border: 1px solid black;">' +
+                           '<div style="background-color: gray">{{title}}</div>' +
+                           '<ng-transclude></ng-transclude>' +
+                         '</div>'
+             };
+         })
+         .controller('ExampleController', ['$scope', function($scope) {
+           $scope.title = 'Lorem Ipsum';
+           $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';
+         }]);
+       </script>
+       <div ng-controller="ExampleController">
+         <input ng-model="title" aria-label="title"> <br/>
+         <textarea ng-model="text" aria-label="text"></textarea> <br/>
+         <pane title="{{title}}">{{text}}</pane>
+       </div>
+     </file>
+     <file name="protractor.js" type="protractor">
+        it('should have transcluded', function() {
+          var titleElement = element(by.model('title'));
+          titleElement.clear();
+          titleElement.sendKeys('TITLE');
+          var textElement = element(by.model('text'));
+          textElement.clear();
+          textElement.sendKeys('TEXT');
+          expect(element(by.binding('title')).getText()).toEqual('TITLE');
+          expect(element(by.binding('text')).getText()).toEqual('TEXT');
+        });
+     </file>
+   </example>
+ *
+ */
+var ngTranscludeDirective = ngDirective({
+  restrict: 'EAC',
+  link: function($scope, $element, $attrs, controller, $transclude) {
+    if (!$transclude) {
+      throw minErr('ngTransclude')('orphan',
+       'Illegal use of ngTransclude directive in the template! ' +
+       'No parent directive that requires a transclusion found. ' +
+       'Element: {0}',
+       startingTag($element));
+    }
+
+    $transclude(function(clone) {
+      $element.empty();
+      $element.append(clone);
+    });
+  }
+});
+
+/**
+ * @ngdoc directive
+ * @name script
+ * @restrict E
+ *
+ * @description
+ * Load the content of a `<script>` element into {@link ng.$templateCache `$templateCache`}, so that the
+ * template can be used by {@link ng.directive:ngInclude `ngInclude`},
+ * {@link ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the
+ * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be
+ * assigned through the element's `id`, which can then be used as a directive's `templateUrl`.
+ *
+ * @param {string} type Must be set to `'text/ng-template'`.
+ * @param {string} id Cache name of the template.
+ *
+ * @example
+  <example>
+    <file name="index.html">
+      <script type="text/ng-template" id="/tpl.html">
+        Content of the template.
+      </script>
+
+      <a ng-click="currentTpl='/tpl.html'" id="tpl-link">Load inlined template</a>
+      <div id="tpl-content" ng-include src="currentTpl"></div>
+    </file>
+    <file name="protractor.js" type="protractor">
+      it('should load template defined inside script tag', function() {
+        element(by.css('#tpl-link')).click();
+        expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/);
+      });
+    </file>
+  </example>
+ */
+var scriptDirective = ['$templateCache', function($templateCache) {
+  return {
+    restrict: 'E',
+    terminal: true,
+    compile: function(element, attr) {
+      if (attr.type == 'text/ng-template') {
+        var templateUrl = attr.id,
+            text = element[0].text;
+
+        $templateCache.put(templateUrl, text);
+      }
+    }
+  };
+}];
+
+var noopNgModelController = { $setViewValue: noop, $render: noop };
+
+function chromeHack(optionElement) {
+  // Workaround for https://code.google.com/p/chromium/issues/detail?id=381459
+  // Adding an <option selected="selected"> element to a <select required="required"> should
+  // automatically select the new element
+  if (optionElement[0].hasAttribute('selected')) {
+    optionElement[0].selected = true;
+  }
+}
+
+/**
+ * @ngdoc type
+ * @name  select.SelectController
+ * @description
+ * The controller for the `<select>` directive. This provides support for reading
+ * and writing the selected value(s) of the control and also coordinates dynamically
+ * added `<option>` elements, perhaps by an `ngRepeat` directive.
+ */
+var SelectController =
+        ['$element', '$scope', '$attrs', function($element, $scope, $attrs) {
+
+  var self = this,
+      optionsMap = new HashMap();
+
+  // If the ngModel doesn't get provided then provide a dummy noop version to prevent errors
+  self.ngModelCtrl = noopNgModelController;
+
+  // The "unknown" option is one that is prepended to the list if the viewValue
+  // does not match any of the options. When it is rendered the value of the unknown
+  // option is '? XXX ?' where XXX is the hashKey of the value that is not known.
+  //
+  // We can't just jqLite('<option>') since jqLite is not smart enough
+  // to create it in <select> and IE barfs otherwise.
+  self.unknownOption = jqLite(document.createElement('option'));
+  self.renderUnknownOption = function(val) {
+    var unknownVal = '? ' + hashKey(val) + ' ?';
+    self.unknownOption.val(unknownVal);
+    $element.prepend(self.unknownOption);
+    $element.val(unknownVal);
+  };
+
+  $scope.$on('$destroy', function() {
+    // disable unknown option so that we don't do work when the whole select is being destroyed
+    self.renderUnknownOption = noop;
+  });
+
+  self.removeUnknownOption = function() {
+    if (self.unknownOption.parent()) self.unknownOption.remove();
+  };
+
+
+  // Read the value of the select control, the implementation of this changes depending
+  // upon whether the select can have multiple values and whether ngOptions is at work.
+  self.readValue = function readSingleValue() {
+    self.removeUnknownOption();
+    return $element.val();
+  };
+
+
+  // Write the value to the select control, the implementation of this changes depending
+  // upon whether the select can have multiple values and whether ngOptions is at work.
+  self.writeValue = function writeSingleValue(value) {
+    if (self.hasOption(value)) {
+      self.removeUnknownOption();
+      $element.val(value);
+      if (value === '') self.emptyOption.prop('selected', true); // to make IE9 happy
+    } else {
+      if (value == null && self.emptyOption) {
+        self.removeUnknownOption();
+        $element.val('');
+      } else {
+        self.renderUnknownOption(value);
+      }
+    }
+  };
+
+
+  // Tell the select control that an option, with the given value, has been added
+  self.addOption = function(value, element) {
+    assertNotHasOwnProperty(value, '"option value"');
+    if (value === '') {
+      self.emptyOption = element;
+    }
+    var count = optionsMap.get(value) || 0;
+    optionsMap.put(value, count + 1);
+    self.ngModelCtrl.$render();
+    chromeHack(element);
+  };
+
+  // Tell the select control that an option, with the given value, has been removed
+  self.removeOption = function(value) {
+    var count = optionsMap.get(value);
+    if (count) {
+      if (count === 1) {
+        optionsMap.remove(value);
+        if (value === '') {
+          self.emptyOption = undefined;
+        }
+      } else {
+        optionsMap.put(value, count - 1);
+      }
+    }
+  };
+
+  // Check whether the select control has an option matching the given value
+  self.hasOption = function(value) {
+    return !!optionsMap.get(value);
+  };
+
+
+  self.registerOption = function(optionScope, optionElement, optionAttrs, interpolateValueFn, interpolateTextFn) {
+
+    if (interpolateValueFn) {
+      // The value attribute is interpolated
+      var oldVal;
+      optionAttrs.$observe('value', function valueAttributeObserveAction(newVal) {
+        if (isDefined(oldVal)) {
+          self.removeOption(oldVal);
+        }
+        oldVal = newVal;
+        self.addOption(newVal, optionElement);
+      });
+    } else if (interpolateTextFn) {
+      // The text content is interpolated
+      optionScope.$watch(interpolateTextFn, function interpolateWatchAction(newVal, oldVal) {
+        optionAttrs.$set('value', newVal);
+        if (oldVal !== newVal) {
+          self.removeOption(oldVal);
+        }
+        self.addOption(newVal, optionElement);
+      });
+    } else {
+      // The value attribute is static
+      self.addOption(optionAttrs.value, optionElement);
+    }
+
+    optionElement.on('$destroy', function() {
+      self.removeOption(optionAttrs.value);
+      self.ngModelCtrl.$render();
+    });
+  };
+}];
+
+/**
+ * @ngdoc directive
+ * @name select
+ * @restrict E
+ *
+ * @description
+ * HTML `SELECT` element with angular data-binding.
+ *
+ * The `select` directive is used together with {@link ngModel `ngModel`} to provide data-binding
+ * between the scope and the `<select>` control (including setting default values).
+ * Ìt also handles dynamic `<option>` elements, which can be added using the {@link ngRepeat `ngRepeat}` or
+ * {@link ngOptions `ngOptions`} directives.
+ *
+ * When an item in the `<select>` menu is selected, the value of the selected option will be bound
+ * to the model identified by the `ngModel` directive. With static or repeated options, this is
+ * the content of the `value` attribute or the textContent of the `<option>`, if the value attribute is missing.
+ * If you want dynamic value attributes, you can use interpolation inside the value attribute.
+ *
+ * <div class="alert alert-warning">
+ * Note that the value of a `select` directive used without `ngOptions` is always a string.
+ * When the model needs to be bound to a non-string value, you must either explictly convert it
+ * using a directive (see example below) or use `ngOptions` to specify the set of options.
+ * This is because an option element can only be bound to string values at present.
+ * </div>
+ *
+ * If the viewValue of `ngModel` does not match any of the options, then the control
+ * will automatically add an "unknown" option, which it then removes when the mismatch is resolved.
+ *
+ * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can
+ * be nested into the `<select>` element. This element will then represent the `null` or "not selected"
+ * option. See example below for demonstration.
+ *
+ * <div class="alert alert-info">
+ * In many cases, `ngRepeat` can be used on `<option>` elements instead of {@link ng.directive:ngOptions
+ * ngOptions} to achieve a similar result. However, `ngOptions` provides some benefits, such as
+ * more flexibility in how the `<select>`'s model is assigned via the `select` **`as`** part of the
+ * comprehension expression, and additionally in reducing memory and increasing speed by not creating
+ * a new scope for each repeated instance.
+ * </div>
+ *
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} multiple Allows multiple options to be selected. The selected values will be
+ *     bound to the model as an array.
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
+ * @param {string=} ngRequired Adds required attribute and required validation constraint to
+ * the element when the ngRequired expression evaluates to true. Use ngRequired instead of required
+ * when you want to data-bind to the required attribute.
+ * @param {string=} ngChange Angular expression to be executed when selected option(s) changes due to user
+ *    interaction with the select element.
+ * @param {string=} ngOptions sets the options that the select is populated with and defines what is
+ * set on the model on selection. See {@link ngOptions `ngOptions`}.
+ *
+ * @example
+ * ### Simple `select` elements with static options
+ *
+ * <example name="static-select" module="staticSelect">
+ * <file name="index.html">
+ * <div ng-controller="ExampleController">
+ *   <form name="myForm">
+ *     <label for="singleSelect"> Single select: </label><br>
+ *     <select name="singleSelect" ng-model="data.singleSelect">
+ *       <option value="option-1">Option 1</option>
+ *       <option value="option-2">Option 2</option>
+ *     </select><br>
+ *
+ *     <label for="singleSelect"> Single select with "not selected" option and dynamic option values: </label><br>
+ *     <select name="singleSelect" id="singleSelect" ng-model="data.singleSelect">
+ *       <option value="">---Please select---</option> <!-- not selected / blank option -->
+ *       <option value="{{data.option1}}">Option 1</option> <!-- interpolation -->
+ *       <option value="option-2">Option 2</option>
+ *     </select><br>
+ *     <button ng-click="forceUnknownOption()">Force unknown option</button><br>
+ *     <tt>singleSelect = {{data.singleSelect}}</tt>
+ *
+ *     <hr>
+ *     <label for="multipleSelect"> Multiple select: </label><br>
+ *     <select name="multipleSelect" id="multipleSelect" ng-model="data.multipleSelect" multiple>
+ *       <option value="option-1">Option 1</option>
+ *       <option value="option-2">Option 2</option>
+ *       <option value="option-3">Option 3</option>
+ *     </select><br>
+ *     <tt>multipleSelect = {{data.multipleSelect}}</tt><br/>
+ *   </form>
+ * </div>
+ * </file>
+ * <file name="app.js">
+ *  angular.module('staticSelect', [])
+ *    .controller('ExampleController', ['$scope', function($scope) {
+ *      $scope.data = {
+ *       singleSelect: null,
+ *       multipleSelect: [],
+ *       option1: 'option-1',
+ *      };
+ *
+ *      $scope.forceUnknownOption = function() {
+ *        $scope.data.singleSelect = 'nonsense';
+ *      };
+ *   }]);
+ * </file>
+ *</example>
+ *
+ * ### Using `ngRepeat` to generate `select` options
+ * <example name="ngrepeat-select" module="ngrepeatSelect">
+ * <file name="index.html">
+ * <div ng-controller="ExampleController">
+ *   <form name="myForm">
+ *     <label for="repeatSelect"> Repeat select: </label>
+ *     <select name="repeatSelect" id="repeatSelect" ng-model="data.repeatSelect">
+ *       <option ng-repeat="option in data.availableOptions" value="{{option.id}}">{{option.name}}</option>
+ *     </select>
+ *   </form>
+ *   <hr>
+ *   <tt>repeatSelect = {{data.repeatSelect}}</tt><br/>
+ * </div>
+ * </file>
+ * <file name="app.js">
+ *  angular.module('ngrepeatSelect', [])
+ *    .controller('ExampleController', ['$scope', function($scope) {
+ *      $scope.data = {
+ *       repeatSelect: null,
+ *       availableOptions: [
+ *         {id: '1', name: 'Option A'},
+ *         {id: '2', name: 'Option B'},
+ *         {id: '3', name: 'Option C'}
+ *       ],
+ *      };
+ *   }]);
+ * </file>
+ *</example>
+ *
+ *
+ * ### Using `select` with `ngOptions` and setting a default value
+ * See the {@link ngOptions ngOptions documentation} for more `ngOptions` usage examples.
+ *
+ * <example name="select-with-default-values" module="defaultValueSelect">
+ * <file name="index.html">
+ * <div ng-controller="ExampleController">
+ *   <form name="myForm">
+ *     <label for="mySelect">Make a choice:</label>
+ *     <select name="mySelect" id="mySelect"
+ *       ng-options="option.name for option in data.availableOptions track by option.id"
+ *       ng-model="data.selectedOption"></select>
+ *   </form>
+ *   <hr>
+ *   <tt>option = {{data.selectedOption}}</tt><br/>
+ * </div>
+ * </file>
+ * <file name="app.js">
+ *  angular.module('defaultValueSelect', [])
+ *    .controller('ExampleController', ['$scope', function($scope) {
+ *      $scope.data = {
+ *       availableOptions: [
+ *         {id: '1', name: 'Option A'},
+ *         {id: '2', name: 'Option B'},
+ *         {id: '3', name: 'Option C'}
+ *       ],
+ *       selectedOption: {id: '3', name: 'Option C'} //This sets the default value of the select in the ui
+ *       };
+ *   }]);
+ * </file>
+ *</example>
+ *
+ *
+ * ### Binding `select` to a non-string value via `ngModel` parsing / formatting
+ *
+ * <example name="select-with-non-string-options" module="nonStringSelect">
+ *   <file name="index.html">
+ *     <select ng-model="model.id" convert-to-number>
+ *       <option value="0">Zero</option>
+ *       <option value="1">One</option>
+ *       <option value="2">Two</option>
+ *     </select>
+ *     {{ model }}
+ *   </file>
+ *   <file name="app.js">
+ *     angular.module('nonStringSelect', [])
+ *       .run(function($rootScope) {
+ *         $rootScope.model = { id: 2 };
+ *       })
+ *       .directive('convertToNumber', function() {
+ *         return {
+ *           require: 'ngModel',
+ *           link: function(scope, element, attrs, ngModel) {
+ *             ngModel.$parsers.push(function(val) {
+ *               return parseInt(val, 10);
+ *             });
+ *             ngModel.$formatters.push(function(val) {
+ *               return '' + val;
+ *             });
+ *           }
+ *         };
+ *       });
+ *   </file>
+ *   <file name="protractor.js" type="protractor">
+ *     it('should initialize to model', function() {
+ *       var select = element(by.css('select'));
+ *       expect(element(by.model('model.id')).$('option:checked').getText()).toEqual('Two');
+ *     });
+ *   </file>
+ * </example>
+ *
+ */
+var selectDirective = function() {
+
+  return {
+    restrict: 'E',
+    require: ['select', '?ngModel'],
+    controller: SelectController,
+    priority: 1,
+    link: {
+      pre: selectPreLink
+    }
+  };
+
+  function selectPreLink(scope, element, attr, ctrls) {
+
+      // if ngModel is not defined, we don't need to do anything
+      var ngModelCtrl = ctrls[1];
+      if (!ngModelCtrl) return;
+
+      var selectCtrl = ctrls[0];
+
+      selectCtrl.ngModelCtrl = ngModelCtrl;
+
+      // We delegate rendering to the `writeValue` method, which can be changed
+      // if the select can have multiple selected values or if the options are being
+      // generated by `ngOptions`
+      ngModelCtrl.$render = function() {
+        selectCtrl.writeValue(ngModelCtrl.$viewValue);
+      };
+
+      // When the selected item(s) changes we delegate getting the value of the select control
+      // to the `readValue` method, which can be changed if the select can have multiple
+      // selected values or if the options are being generated by `ngOptions`
+      element.on('change', function() {
+        scope.$apply(function() {
+          ngModelCtrl.$setViewValue(selectCtrl.readValue());
+        });
+      });
+
+      // If the select allows multiple values then we need to modify how we read and write
+      // values from and to the control; also what it means for the value to be empty and
+      // we have to add an extra watch since ngModel doesn't work well with arrays - it
+      // doesn't trigger rendering if only an item in the array changes.
+      if (attr.multiple) {
+
+        // Read value now needs to check each option to see if it is selected
+        selectCtrl.readValue = function readMultipleValue() {
+          var array = [];
+          forEach(element.find('option'), function(option) {
+            if (option.selected) {
+              array.push(option.value);
+            }
+          });
+          return array;
+        };
+
+        // Write value now needs to set the selected property of each matching option
+        selectCtrl.writeValue = function writeMultipleValue(value) {
+          var items = new HashMap(value);
+          forEach(element.find('option'), function(option) {
+            option.selected = isDefined(items.get(option.value));
+          });
+        };
+
+        // we have to do it on each watch since ngModel watches reference, but
+        // we need to work of an array, so we need to see if anything was inserted/removed
+        var lastView, lastViewRef = NaN;
+        scope.$watch(function selectMultipleWatch() {
+          if (lastViewRef === ngModelCtrl.$viewValue && !equals(lastView, ngModelCtrl.$viewValue)) {
+            lastView = shallowCopy(ngModelCtrl.$viewValue);
+            ngModelCtrl.$render();
+          }
+          lastViewRef = ngModelCtrl.$viewValue;
+        });
+
+        // If we are a multiple select then value is now a collection
+        // so the meaning of $isEmpty changes
+        ngModelCtrl.$isEmpty = function(value) {
+          return !value || value.length === 0;
+        };
+
+      }
+    }
+};
+
+
+// The option directive is purely designed to communicate the existence (or lack of)
+// of dynamically created (and destroyed) option elements to their containing select
+// directive via its controller.
+var optionDirective = ['$interpolate', function($interpolate) {
+  return {
+    restrict: 'E',
+    priority: 100,
+    compile: function(element, attr) {
+
+      if (isDefined(attr.value)) {
+        // If the value attribute is defined, check if it contains an interpolation
+        var interpolateValueFn = $interpolate(attr.value, true);
+      } else {
+        // If the value attribute is not defined then we fall back to the
+        // text content of the option element, which may be interpolated
+        var interpolateTextFn = $interpolate(element.text(), true);
+        if (!interpolateTextFn) {
+          attr.$set('value', element.text());
+        }
+      }
+
+      return function(scope, element, attr) {
+
+        // This is an optimization over using ^^ since we don't want to have to search
+        // all the way to the root of the DOM for every single option element
+        var selectCtrlName = '$selectController',
+            parent = element.parent(),
+            selectCtrl = parent.data(selectCtrlName) ||
+              parent.parent().data(selectCtrlName); // in case we are in optgroup
+
+        if (selectCtrl) {
+          selectCtrl.registerOption(scope, element, attr, interpolateValueFn, interpolateTextFn);
+        }
+      };
+    }
+  };
+}];
+
+var styleDirective = valueFn({
+  restrict: 'E',
+  terminal: false
+});
+
+var requiredDirective = function() {
+  return {
+    restrict: 'A',
+    require: '?ngModel',
+    link: function(scope, elm, attr, ctrl) {
+      if (!ctrl) return;
+      attr.required = true; // force truthy in case we are on non input element
+
+      ctrl.$validators.required = function(modelValue, viewValue) {
+        return !attr.required || !ctrl.$isEmpty(viewValue);
+      };
+
+      attr.$observe('required', function() {
+        ctrl.$validate();
+      });
+    }
+  };
+};
+
+
+var patternDirective = function() {
+  return {
+    restrict: 'A',
+    require: '?ngModel',
+    link: function(scope, elm, attr, ctrl) {
+      if (!ctrl) return;
+
+      var regexp, patternExp = attr.ngPattern || attr.pattern;
+      attr.$observe('pattern', function(regex) {
+        if (isString(regex) && regex.length > 0) {
+          regex = new RegExp('^' + regex + '$');
+        }
+
+        if (regex && !regex.test) {
+          throw minErr('ngPattern')('noregexp',
+            'Expected {0} to be a RegExp but was {1}. Element: {2}', patternExp,
+            regex, startingTag(elm));
+        }
+
+        regexp = regex || undefined;
+        ctrl.$validate();
+      });
+
+      ctrl.$validators.pattern = function(modelValue, viewValue) {
+        // HTML5 pattern constraint validates the input value, so we validate the viewValue
+        return ctrl.$isEmpty(viewValue) || isUndefined(regexp) || regexp.test(viewValue);
+      };
+    }
+  };
+};
+
+
+var maxlengthDirective = function() {
+  return {
+    restrict: 'A',
+    require: '?ngModel',
+    link: function(scope, elm, attr, ctrl) {
+      if (!ctrl) return;
+
+      var maxlength = -1;
+      attr.$observe('maxlength', function(value) {
+        var intVal = toInt(value);
+        maxlength = isNaN(intVal) ? -1 : intVal;
+        ctrl.$validate();
+      });
+      ctrl.$validators.maxlength = function(modelValue, viewValue) {
+        return (maxlength < 0) || ctrl.$isEmpty(viewValue) || (viewValue.length <= maxlength);
+      };
+    }
+  };
+};
+
+var minlengthDirective = function() {
+  return {
+    restrict: 'A',
+    require: '?ngModel',
+    link: function(scope, elm, attr, ctrl) {
+      if (!ctrl) return;
+
+      var minlength = 0;
+      attr.$observe('minlength', function(value) {
+        minlength = toInt(value) || 0;
+        ctrl.$validate();
+      });
+      ctrl.$validators.minlength = function(modelValue, viewValue) {
+        return ctrl.$isEmpty(viewValue) || viewValue.length >= minlength;
+      };
+    }
+  };
+};
+
+if (window.angular.bootstrap) {
+  //AngularJS is already loaded, so we can return here...
+  console.log('WARNING: Tried to load angular more than once.');
+  return;
+}
+
+//try to bind to jquery now so that one can write jqLite(document).ready()
+//but we will rebind on bootstrap again.
+bindJQuery();
+
+publishExternalAPI(angular);
+
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-us",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);
+
+/**
+ * Setup file for the Scenario.
+ * Must be first in the compilation/bootstrap list.
+ */
+
+// Public namespace
+angular.scenario = angular.scenario || {};
+
+/**
+ * Expose jQuery (e.g. for custom dsl extensions).
+ */
+angular.scenario.jQuery = _jQuery;
+
+/**
+ * Defines a new output format.
+ *
+ * @param {string} name the name of the new output format
+ * @param {function()} fn function(context, runner) that generates the output
+ */
+angular.scenario.output = angular.scenario.output || function(name, fn) {
+  angular.scenario.output[name] = fn;
+};
+
+/**
+ * Defines a new DSL statement. If your factory function returns a Future
+ * it's returned, otherwise the result is assumed to be a map of functions
+ * for chaining. Chained functions are subject to the same rules.
+ *
+ * Note: All functions on the chain are bound to the chain scope so values
+ *   set on "this" in your statement function are available in the chained
+ *   functions.
+ *
+ * @param {string} name The name of the statement
+ * @param {function()} fn Factory function(), return a function for
+ *  the statement.
+ */
+angular.scenario.dsl = angular.scenario.dsl || function(name, fn) {
+  angular.scenario.dsl[name] = function() {
+    /* jshint -W040 *//* The dsl binds `this` for us when calling chained functions */
+    function executeStatement(statement, args) {
+      var result = statement.apply(this, args);
+      if (angular.isFunction(result) || result instanceof angular.scenario.Future) {
+        return result;
+      }
+      var self = this;
+      var chain = angular.extend({}, result);
+      angular.forEach(chain, function(value, name) {
+        if (angular.isFunction(value)) {
+          chain[name] = function() {
+            return executeStatement.call(self, value, arguments);
+          };
+        } else {
+          chain[name] = value;
+        }
+      });
+      return chain;
+    }
+    var statement = fn.apply(this, arguments);
+    return function() {
+      return executeStatement.call(this, statement, arguments);
+    };
+  };
+};
+
+/**
+ * Defines a new matcher for use with the expects() statement. The value
+ * this.actual (like in Jasmine) is available in your matcher to compare
+ * against. Your function should return a boolean. The future is automatically
+ * created for you.
+ *
+ * @param {string} name The name of the matcher
+ * @param {function()} fn The matching function(expected).
+ */
+angular.scenario.matcher = angular.scenario.matcher || function(name, fn) {
+  angular.scenario.matcher[name] = function(expected) {
+    var description = this.future.name +
+                      (this.inverse ? ' not ' : ' ') + name +
+                      ' ' + angular.toJson(expected);
+    var self = this;
+    this.addFuture('expect ' + description,
+      function(done) {
+        var error;
+        self.actual = self.future.value;
+        if ((self.inverse && fn.call(self, expected)) ||
+            (!self.inverse && !fn.call(self, expected))) {
+          error = 'expected ' + description +
+            ' but was ' + angular.toJson(self.actual);
+        }
+        done(error);
+    });
+  };
+};
+
+/**
+ * Initialize the scenario runner and run !
+ *
+ * Access global window and document object
+ * Access $runner through closure
+ *
+ * @param {Object=} config Config options
+ */
+angular.scenario.setUpAndRun = function(config) {
+  var href = window.location.href;
+  var body = _jQuery(document.body);
+  var output = [];
+  var objModel = new angular.scenario.ObjectModel($runner);
+
+  if (config && config.scenario_output) {
+    output = config.scenario_output.split(',');
+  }
+
+  angular.forEach(angular.scenario.output, function(fn, name) {
+    if (!output.length || output.indexOf(name) != -1) {
+      var context = body.append('<div></div>').find('div:last');
+      context.attr('id', name);
+      fn.call({}, context, $runner, objModel);
+    }
+  });
+
+  if (!/^http/.test(href) && !/^https/.test(href)) {
+    body.append('<p id="system-error"></p>');
+    body.find('#system-error').text(
+      'Scenario runner must be run using http or https. The protocol ' +
+      href.split(':')[0] + ':// is not supported.'
+    );
+    return;
+  }
+
+  var appFrame = body.append('<div id="application"></div>').find('#application');
+  var application = new angular.scenario.Application(appFrame);
+
+  $runner.on('RunnerEnd', function() {
+    appFrame.css('display', 'none');
+    appFrame.find('iframe').attr('src', 'about:blank');
+  });
+
+  $runner.on('RunnerError', function(error) {
+    if (window.console) {
+      console.log(formatException(error));
+    } else {
+      // Do something for IE
+      alert(error);
+    }
+  });
+
+  $runner.run(application);
+};
+
+/**
+ * Iterates through list with iterator function that must call the
+ * continueFunction to continue iterating.
+ *
+ * @param {Array} list list to iterate over
+ * @param {function()} iterator Callback function(value, continueFunction)
+ * @param {function()} done Callback function(error, result) called when
+ *   iteration finishes or an error occurs.
+ */
+function asyncForEach(list, iterator, done) {
+  var i = 0;
+  function loop(error, index) {
+    if (index && index > i) {
+      i = index;
+    }
+    if (error || i >= list.length) {
+      done(error);
+    } else {
+      try {
+        iterator(list[i++], loop);
+      } catch (e) {
+        done(e);
+      }
+    }
+  }
+  loop();
+}
+
+/**
+ * Formats an exception into a string with the stack trace, but limits
+ * to a specific line length.
+ *
+ * @param {Object} error The exception to format, can be anything throwable
+ * @param {Number=} [maxStackLines=5] max lines of the stack trace to include
+ *  default is 5.
+ */
+function formatException(error, maxStackLines) {
+  maxStackLines = maxStackLines || 5;
+  var message = error.toString();
+  if (error.stack) {
+    var stack = error.stack.split('\n');
+    if (stack[0].indexOf(message) === -1) {
+      maxStackLines++;
+      stack.unshift(error.message);
+    }
+    message = stack.slice(0, maxStackLines).join('\n');
+  }
+  return message;
+}
+
+/**
+ * Returns a function that gets the file name and line number from a
+ * location in the stack if available based on the call site.
+ *
+ * Note: this returns another function because accessing .stack is very
+ * expensive in Chrome.
+ *
+ * @param {Number} offset Number of stack lines to skip
+ */
+function callerFile(offset) {
+  var error = new Error();
+
+  return function() {
+    var line = (error.stack || '').split('\n')[offset];
+
+    // Clean up the stack trace line
+    if (line) {
+      if (line.indexOf('@') !== -1) {
+        // Firefox
+        line = line.substring(line.indexOf('@') + 1);
+      } else {
+        // Chrome
+        line = line.substring(line.indexOf('(') + 1).replace(')', '');
+      }
+    }
+
+    return line || '';
+  };
+}
+
+
+/**
+ * Don't use the jQuery trigger method since it works incorrectly.
+ *
+ * jQuery notifies listeners and then changes the state of a checkbox and
+ * does not create a real browser event. A real click changes the state of
+ * the checkbox and then notifies listeners.
+ *
+ * To work around this we instead use our own handler that fires a real event.
+ */
+(function(fn) {
+  // We need a handle to the original trigger function for input tests.
+  var parentTrigger = fn._originalTrigger = fn.trigger;
+  fn.trigger = function(type) {
+    if (/(click|change|keydown|blur|input|mousedown|mouseup)/.test(type)) {
+      var processDefaults = [];
+      this.each(function(index, node) {
+        processDefaults.push(browserTrigger(node, type));
+      });
+
+      // this is not compatible with jQuery - we return an array of returned values,
+      // so that scenario runner know whether JS code has preventDefault() of the event or not...
+      return processDefaults;
+    }
+    return parentTrigger.apply(this, arguments);
+  };
+})(_jQuery.fn);
+
+/**
+ * Finds all bindings with the substring match of name and returns an
+ * array of their values.
+ *
+ * @param {string} bindExp The name to match
+ * @return {Array.<string>} String of binding values
+ */
+_jQuery.fn.bindings = function(windowJquery, bindExp) {
+  var result = [], match,
+      bindSelector = '.ng-binding:visible';
+  if (angular.isString(bindExp)) {
+    bindExp = bindExp.replace(/\s/g, '');
+    match = function(actualExp) {
+      if (actualExp) {
+        actualExp = actualExp.replace(/\s/g, '');
+        if (actualExp == bindExp) return true;
+        if (actualExp.indexOf(bindExp) === 0) {
+          return actualExp.charAt(bindExp.length) == '|';
+        }
+      }
+    };
+  } else if (bindExp) {
+    match = function(actualExp) {
+      return actualExp && bindExp.exec(actualExp);
+    };
+  } else {
+    match = function(actualExp) {
+      return !!actualExp;
+    };
+  }
+  var selection = this.find(bindSelector);
+  if (this.is(bindSelector)) {
+    selection = selection.add(this);
+  }
+
+  function push(value) {
+    if (angular.isUndefined(value)) {
+      value = '';
+    } else if (typeof value !== 'string') {
+      value = angular.toJson(value);
+    }
+    result.push('' + value);
+  }
+
+  selection.each(function() {
+    var element = windowJquery(this),
+        bindings;
+    if (bindings = element.data('$binding')) {
+      for (var expressions = [], binding, j=0, jj=bindings.length; j < jj; j++) {
+        binding = bindings[j];
+
+        if (binding.expressions) {
+          expressions = binding.expressions;
+        } else {
+          expressions = [binding];
+        }
+        for (var scope, expression, i = 0, ii = expressions.length; i < ii; i++) {
+          expression = expressions[i];
+          if (match(expression)) {
+            scope = scope || element.scope();
+            push(scope.$eval(expression));
+          }
+        }
+      }
+    }
+  });
+  return result;
+};
+
+(function() {
+  /**
+   * Triggers a browser event. Attempts to choose the right event if one is
+   * not specified.
+   *
+   * @param {Object} element Either a wrapped jQuery/jqLite node or a DOMElement
+   * @param {string} eventType Optional event type
+   * @param {Object=} eventData An optional object which contains additional event data (such as x,y
+   * coordinates, keys, etc...) that are passed into the event when triggered
+   */
+  window.browserTrigger = function browserTrigger(element, eventType, eventData) {
+    if (element && !element.nodeName) element = element[0];
+    if (!element) return;
+
+    eventData = eventData || {};
+    var relatedTarget = eventData.relatedTarget || element;
+    var keys = eventData.keys;
+    var x = eventData.x;
+    var y = eventData.y;
+
+    var inputType = (element.type) ? element.type.toLowerCase() : null,
+        nodeName = element.nodeName.toLowerCase();
+    if (!eventType) {
+      eventType = {
+        'text':            'change',
+        'textarea':        'change',
+        'hidden':          'change',
+        'password':        'change',
+        'button':          'click',
+        'submit':          'click',
+        'reset':           'click',
+        'image':           'click',
+        'checkbox':        'click',
+        'radio':           'click',
+        'select-one':      'change',
+        'select-multiple': 'change',
+        '_default_':       'click'
+      }[inputType || '_default_'];
+    }
+
+    if (nodeName == 'option') {
+      element.parentNode.value = element.value;
+      element = element.parentNode;
+      eventType = 'change';
+    }
+
+    keys = keys || [];
+    function pressed(key) {
+      return keys.indexOf(key) !== -1;
+    }
+
+    var evnt;
+    if (/transitionend/.test(eventType)) {
+      if (window.WebKitTransitionEvent) {
+        evnt = new WebKitTransitionEvent(eventType, eventData);
+        evnt.initEvent(eventType, false, true);
+      } else {
+        try {
+          evnt = new TransitionEvent(eventType, eventData);
+        }
+        catch (e) {
+          evnt = document.createEvent('TransitionEvent');
+          evnt.initTransitionEvent(eventType, null, null, null, eventData.elapsedTime || 0);
+        }
+      }
+    } else if (/animationend/.test(eventType)) {
+      if (window.WebKitAnimationEvent) {
+        evnt = new WebKitAnimationEvent(eventType, eventData);
+        evnt.initEvent(eventType, false, true);
+      } else {
+        try {
+          evnt = new AnimationEvent(eventType, eventData);
+        }
+        catch (e) {
+          evnt = document.createEvent('AnimationEvent');
+          evnt.initAnimationEvent(eventType, null, null, null, eventData.elapsedTime || 0);
+        }
+      }
+    } else if (/touch/.test(eventType) && supportsTouchEvents()) {
+      evnt = createTouchEvent(element, eventType, x, y);
+    } else {
+      evnt = document.createEvent('MouseEvents');
+      x = x || 0;
+      y = y || 0;
+      evnt.initMouseEvent(eventType, true, true, window, 0, x, y, x, y, pressed('ctrl'),
+          pressed('alt'), pressed('shift'), pressed('meta'), 0, relatedTarget);
+    }
+
+    /* we're unable to change the timeStamp value directly so this
+     * is only here to allow for testing where the timeStamp value is
+     * read */
+    evnt.$manualTimeStamp = eventData.timeStamp;
+
+    if (!evnt) return;
+
+    var originalPreventDefault = evnt.preventDefault,
+        appWindow = element.ownerDocument.defaultView,
+        fakeProcessDefault = true,
+        finalProcessDefault,
+        angular = appWindow.angular || {};
+
+    // igor: temporary fix for https://bugzilla.mozilla.org/show_bug.cgi?id=684208
+    angular['ff-684208-preventDefault'] = false;
+    evnt.preventDefault = function() {
+      fakeProcessDefault = false;
+      return originalPreventDefault.apply(evnt, arguments);
+    };
+
+    element.dispatchEvent(evnt);
+    finalProcessDefault = !(angular['ff-684208-preventDefault'] || !fakeProcessDefault);
+
+    delete angular['ff-684208-preventDefault'];
+
+    return finalProcessDefault;
+  };
+
+  function supportsTouchEvents() {
+    if ('_cached' in supportsTouchEvents) {
+      return supportsTouchEvents._cached;
+    }
+    if (!document.createTouch || !document.createTouchList) {
+      supportsTouchEvents._cached = false;
+      return false;
+    }
+    try {
+      document.createEvent('TouchEvent');
+    } catch (e) {
+      supportsTouchEvents._cached = false;
+      return false;
+    }
+    supportsTouchEvents._cached = true;
+    return true;
+  }
+
+  function createTouchEvent(element, eventType, x, y) {
+    var evnt = new Event(eventType);
+    x = x || 0;
+    y = y || 0;
+
+    var touch = document.createTouch(window, element, Date.now(), x, y, x, y);
+    var touches = document.createTouchList(touch);
+
+    evnt.touches = touches;
+
+    return evnt;
+  }
+}());
+
+/**
+ * Represents the application currently being tested and abstracts usage
+ * of iframes or separate windows.
+ *
+ * @param {Object} context jQuery wrapper around HTML context.
+ */
+angular.scenario.Application = function(context) {
+  this.context = context;
+  context.append(
+    '<h2>Current URL: <a href="about:blank">None</a></h2>' +
+    '<div id="test-frames"></div>'
+  );
+};
+
+/**
+ * Gets the jQuery collection of frames. Don't use this directly because
+ * frames may go stale.
+ *
+ * @private
+ * @return {Object} jQuery collection
+ */
+angular.scenario.Application.prototype.getFrame_ = function() {
+  return this.context.find('#test-frames iframe:last');
+};
+
+/**
+ * Gets the window of the test runner frame. Always favor executeAction()
+ * instead of this method since it prevents you from getting a stale window.
+ *
+ * @private
+ * @return {Object} the window of the frame
+ */
+angular.scenario.Application.prototype.getWindow_ = function() {
+  var contentWindow = this.getFrame_().prop('contentWindow');
+  if (!contentWindow) {
+    throw 'Frame window is not accessible.';
+  }
+  return contentWindow;
+};
+
+/**
+ * Changes the location of the frame.
+ *
+ * @param {string} url The URL. If it begins with a # then only the
+ *   hash of the page is changed.
+ * @param {function()} loadFn function($window, $document) Called when frame loads.
+ * @param {function()} errorFn function(error) Called if any error when loading.
+ */
+angular.scenario.Application.prototype.navigateTo = function(url, loadFn, errorFn) {
+  var self = this;
+  var frame = self.getFrame_();
+  //TODO(esprehn): Refactor to use rethrow()
+  errorFn = errorFn || function(e) { throw e; };
+  if (url === 'about:blank') {
+    errorFn('Sandbox Error: Navigating to about:blank is not allowed.');
+  } else if (url.charAt(0) === '#') {
+    url = frame.attr('src').split('#')[0] + url;
+    frame.attr('src', url);
+    self.executeAction(loadFn);
+  } else {
+    frame.remove();
+    self.context.find('#test-frames').append('<iframe>');
+    frame = self.getFrame_();
+
+    frame.load(function() {
+      frame.off();
+      try {
+        var $window = self.getWindow_();
+
+        if (!$window.angular) {
+          self.executeAction(loadFn);
+          return;
+        }
+
+        if (!$window.angular.resumeBootstrap) {
+          $window.angular.resumeDeferredBootstrap = resumeDeferredBootstrap;
+        } else {
+          resumeDeferredBootstrap();
+        }
+
+      } catch (e) {
+        errorFn(e);
+      }
+
+      function resumeDeferredBootstrap() {
+        // Disable animations
+        var $injector = $window.angular.resumeBootstrap([['$provide', function($provide) {
+          return ['$animate', function($animate) {
+            $animate.enabled(false);
+          }];
+        }]]);
+        self.rootElement = $injector.get('$rootElement')[0];
+        self.executeAction(loadFn);
+      }
+    }).attr('src', url);
+
+    // for IE compatibility set the name *after* setting the frame url
+    frame[0].contentWindow.name = "NG_DEFER_BOOTSTRAP!";
+  }
+  self.context.find('> h2 a').attr('href', url).text(url);
+};
+
+/**
+ * Executes a function in the context of the tested application. Will wait
+ * for all pending angular xhr requests before executing.
+ *
+ * @param {function()} action The callback to execute. function($window, $document)
+ *  $document is a jQuery wrapped document.
+ */
+angular.scenario.Application.prototype.executeAction = function(action) {
+  var self = this;
+  var $window = this.getWindow_();
+  if (!$window.document) {
+    throw 'Sandbox Error: Application document not accessible.';
+  }
+  if (!$window.angular) {
+    return action.call(this, $window, _jQuery($window.document));
+  }
+
+  if (!!this.rootElement) {
+    executeWithElement(this.rootElement);
+  } else {
+    angularInit($window.document, angular.bind(this, executeWithElement));
+  }
+
+  function executeWithElement(element) {
+    var $injector = $window.angular.element(element).injector();
+    var $element = _jQuery(element);
+
+    $element.injector = function() {
+      return $injector;
+    };
+
+    $injector.invoke(function($browser) {
+      $browser.notifyWhenNoOutstandingRequests(function() {
+        action.call(self, $window, $element);
+      });
+    });
+  }
+};
+
+/**
+ * The representation of define blocks. Don't used directly, instead use
+ * define() in your tests.
+ *
+ * @param {string} descName Name of the block
+ * @param {Object} parent describe or undefined if the root.
+ */
+angular.scenario.Describe = function(descName, parent) {
+  this.only = parent && parent.only;
+  this.beforeEachFns = [];
+  this.afterEachFns = [];
+  this.its = [];
+  this.children = [];
+  this.name = descName;
+  this.parent = parent;
+  this.id = angular.scenario.Describe.id++;
+
+  /**
+   * Calls all before functions.
+   */
+  var beforeEachFns = this.beforeEachFns;
+  this.setupBefore = function() {
+    if (parent) parent.setupBefore.call(this);
+    angular.forEach(beforeEachFns, function(fn) { fn.call(this); }, this);
+  };
+
+  /**
+   * Calls all after functions.
+   */
+  var afterEachFns = this.afterEachFns;
+  this.setupAfter  = function() {
+    angular.forEach(afterEachFns, function(fn) { fn.call(this); }, this);
+    if (parent) parent.setupAfter.call(this);
+  };
+};
+
+// Shared Unique ID generator for every describe block
+angular.scenario.Describe.id = 0;
+
+// Shared Unique ID generator for every it (spec)
+angular.scenario.Describe.specId = 0;
+
+/**
+ * Defines a block to execute before each it or nested describe.
+ *
+ * @param {function()} body Body of the block.
+ */
+angular.scenario.Describe.prototype.beforeEach = function(body) {
+  this.beforeEachFns.push(body);
+};
+
+/**
+ * Defines a block to execute after each it or nested describe.
+ *
+ * @param {function()} body Body of the block.
+ */
+angular.scenario.Describe.prototype.afterEach = function(body) {
+  this.afterEachFns.push(body);
+};
+
+/**
+ * Creates a new describe block that's a child of this one.
+ *
+ * @param {string} name Name of the block. Appended to the parent block's name.
+ * @param {function()} body Body of the block.
+ */
+angular.scenario.Describe.prototype.describe = function(name, body) {
+  var child = new angular.scenario.Describe(name, this);
+  this.children.push(child);
+  body.call(child);
+};
+
+/**
+ * Same as describe() but makes ddescribe blocks the only to run.
+ *
+ * @param {string} name Name of the test.
+ * @param {function()} body Body of the block.
+ */
+angular.scenario.Describe.prototype.ddescribe = function(name, body) {
+  var child = new angular.scenario.Describe(name, this);
+  child.only = true;
+  this.children.push(child);
+  body.call(child);
+};
+
+/**
+ * Use to disable a describe block.
+ */
+angular.scenario.Describe.prototype.xdescribe = angular.noop;
+
+/**
+ * Defines a test.
+ *
+ * @param {string} name Name of the test.
+ * @param {function()} body Body of the block.
+ */
+angular.scenario.Describe.prototype.it = function(name, body) {
+  this.its.push({
+    id: angular.scenario.Describe.specId++,
+    definition: this,
+    only: this.only,
+    name: name,
+    before: this.setupBefore,
+    body: body,
+    after: this.setupAfter
+  });
+};
+
+/**
+ * Same as it() but makes iit tests the only test to run.
+ *
+ * @param {string} name Name of the test.
+ * @param {function()} body Body of the block.
+ */
+angular.scenario.Describe.prototype.iit = function(name, body) {
+  this.it.apply(this, arguments);
+  this.its[this.its.length - 1].only = true;
+};
+
+/**
+ * Use to disable a test block.
+ */
+angular.scenario.Describe.prototype.xit = angular.noop;
+
+/**
+ * Gets an array of functions representing all the tests (recursively).
+ * that can be executed with SpecRunner's.
+ *
+ * @return {Array<Object>} Array of it blocks {
+ *   definition : Object // parent Describe
+ *   only: boolean
+ *   name: string
+ *   before: Function
+ *   body: Function
+ *   after: Function
+ *  }
+ */
+angular.scenario.Describe.prototype.getSpecs = function() {
+  var specs = arguments[0] || [];
+  angular.forEach(this.children, function(child) {
+    child.getSpecs(specs);
+  });
+  angular.forEach(this.its, function(it) {
+    specs.push(it);
+  });
+  var only = [];
+  angular.forEach(specs, function(it) {
+    if (it.only) {
+      only.push(it);
+    }
+  });
+  return (only.length && only) || specs;
+};
+
+/**
+ * A future action in a spec.
+ *
+ * @param {string} name name of the future action
+ * @param {function()} behavior future callback(error, result)
+ * @param {function()} line Optional. function that returns the file/line number.
+ */
+angular.scenario.Future = function(name, behavior, line) {
+  this.name = name;
+  this.behavior = behavior;
+  this.fulfilled = false;
+  this.value = undefined;
+  this.parser = angular.identity;
+  this.line = line || function() { return ''; };
+};
+
+/**
+ * Executes the behavior of the closure.
+ *
+ * @param {function()} doneFn Callback function(error, result)
+ */
+angular.scenario.Future.prototype.execute = function(doneFn) {
+  var self = this;
+  this.behavior(function(error, result) {
+    self.fulfilled = true;
+    if (result) {
+      try {
+        result = self.parser(result);
+      } catch (e) {
+        error = e;
+      }
+    }
+    self.value = error || result;
+    doneFn(error, result);
+  });
+};
+
+/**
+ * Configures the future to convert its final with a function fn(value)
+ *
+ * @param {function()} fn function(value) that returns the parsed value
+ */
+angular.scenario.Future.prototype.parsedWith = function(fn) {
+  this.parser = fn;
+  return this;
+};
+
+/**
+ * Configures the future to parse its final value from JSON
+ * into objects.
+ */
+angular.scenario.Future.prototype.fromJson = function() {
+  return this.parsedWith(angular.fromJson);
+};
+
+/**
+ * Configures the future to convert its final value from objects
+ * into JSON.
+ */
+angular.scenario.Future.prototype.toJson = function() {
+  return this.parsedWith(angular.toJson);
+};
+
+/**
+ * Maintains an object tree from the runner events.
+ *
+ * @param {Object} runner The scenario Runner instance to connect to.
+ *
+ * TODO(esprehn): Every output type creates one of these, but we probably
+ *  want one global shared instance. Need to handle events better too
+ *  so the HTML output doesn't need to do spec model.getSpec(spec.id)
+ *  silliness.
+ *
+ * TODO(vojta) refactor on, emit methods (from all objects) - use inheritance
+ */
+angular.scenario.ObjectModel = function(runner) {
+  var self = this;
+
+  this.specMap = {};
+  this.listeners = [];
+  this.value = {
+    name: '',
+    children: {}
+  };
+
+  runner.on('SpecBegin', function(spec) {
+    var block = self.value,
+        definitions = [];
+
+    angular.forEach(self.getDefinitionPath(spec), function(def) {
+      if (!block.children[def.name]) {
+        block.children[def.name] = {
+          id: def.id,
+          name: def.name,
+          children: {},
+          specs: {}
+        };
+      }
+      block = block.children[def.name];
+      definitions.push(def.name);
+    });
+
+    var it = self.specMap[spec.id] =
+             block.specs[spec.name] =
+             new angular.scenario.ObjectModel.Spec(spec.id, spec.name, definitions);
+
+    // forward the event
+    self.emit('SpecBegin', it);
+  });
+
+  runner.on('SpecError', function(spec, error) {
+    var it = self.getSpec(spec.id);
+    it.status = 'error';
+    it.error = error;
+
+    // forward the event
+    self.emit('SpecError', it, error);
+  });
+
+  runner.on('SpecEnd', function(spec) {
+    var it = self.getSpec(spec.id);
+    complete(it);
+
+    // forward the event
+    self.emit('SpecEnd', it);
+  });
+
+  runner.on('StepBegin', function(spec, step) {
+    var it = self.getSpec(spec.id);
+    step = new angular.scenario.ObjectModel.Step(step.name);
+    it.steps.push(step);
+
+    // forward the event
+    self.emit('StepBegin', it, step);
+  });
+
+  runner.on('StepEnd', function(spec) {
+    var it = self.getSpec(spec.id);
+    var step = it.getLastStep();
+    if (step.name !== step.name) {
+      throw 'Events fired in the wrong order. Step names don\'t match.';
+    }
+    complete(step);
+
+    // forward the event
+    self.emit('StepEnd', it, step);
+  });
+
+  runner.on('StepFailure', function(spec, step, error) {
+    var it = self.getSpec(spec.id),
+        modelStep = it.getLastStep();
+
+    modelStep.setErrorStatus('failure', error, step.line());
+    it.setStatusFromStep(modelStep);
+
+    // forward the event
+    self.emit('StepFailure', it, modelStep, error);
+  });
+
+  runner.on('StepError', function(spec, step, error) {
+    var it = self.getSpec(spec.id),
+        modelStep = it.getLastStep();
+
+    modelStep.setErrorStatus('error', error, step.line());
+    it.setStatusFromStep(modelStep);
+
+    // forward the event
+    self.emit('StepError', it, modelStep, error);
+  });
+
+  runner.on('RunnerBegin', function() {
+    self.emit('RunnerBegin');
+  });
+  runner.on('RunnerEnd', function() {
+    self.emit('RunnerEnd');
+  });
+
+  function complete(item) {
+    item.endTime = Date.now();
+    item.duration = item.endTime - item.startTime;
+    item.status = item.status || 'success';
+  }
+};
+
+/**
+ * Adds a listener for an event.
+ *
+ * @param {string} eventName Name of the event to add a handler for
+ * @param {function()} listener Function that will be called when event is fired
+ */
+angular.scenario.ObjectModel.prototype.on = function(eventName, listener) {
+  eventName = eventName.toLowerCase();
+  this.listeners[eventName] = this.listeners[eventName] || [];
+  this.listeners[eventName].push(listener);
+};
+
+/**
+ * Emits an event which notifies listeners and passes extra
+ * arguments.
+ *
+ * @param {string} eventName Name of the event to fire.
+ */
+angular.scenario.ObjectModel.prototype.emit = function(eventName) {
+  var self = this,
+      args = Array.prototype.slice.call(arguments, 1);
+
+  eventName = eventName.toLowerCase();
+
+  if (this.listeners[eventName]) {
+    angular.forEach(this.listeners[eventName], function(listener) {
+      listener.apply(self, args);
+    });
+  }
+};
+
+/**
+ * Computes the path of definition describe blocks that wrap around
+ * this spec.
+ *
+ * @param spec Spec to compute the path for.
+ * @return {Array<Describe>} The describe block path
+ */
+angular.scenario.ObjectModel.prototype.getDefinitionPath = function(spec) {
+  var path = [];
+  var currentDefinition = spec.definition;
+  while (currentDefinition && currentDefinition.name) {
+    path.unshift(currentDefinition);
+    currentDefinition = currentDefinition.parent;
+  }
+  return path;
+};
+
+/**
+ * Gets a spec by id.
+ *
+ * @param {string} id The id of the spec to get the object for.
+ * @return {Object} the Spec instance
+ */
+angular.scenario.ObjectModel.prototype.getSpec = function(id) {
+  return this.specMap[id];
+};
+
+/**
+ * A single it block.
+ *
+ * @param {string} id Id of the spec
+ * @param {string} name Name of the spec
+ * @param {Array<string>=} definitionNames List of all describe block names that wrap this spec
+ */
+angular.scenario.ObjectModel.Spec = function(id, name, definitionNames) {
+  this.id = id;
+  this.name = name;
+  this.startTime = Date.now();
+  this.steps = [];
+  this.fullDefinitionName = (definitionNames || []).join(' ');
+};
+
+/**
+ * Adds a new step to the Spec.
+ *
+ * @param {string} name Name of the step (really name of the future)
+ * @return {Object} the added step
+ */
+angular.scenario.ObjectModel.Spec.prototype.addStep = function(name) {
+  var step = new angular.scenario.ObjectModel.Step(name);
+  this.steps.push(step);
+  return step;
+};
+
+/**
+ * Gets the most recent step.
+ *
+ * @return {Object} the step
+ */
+angular.scenario.ObjectModel.Spec.prototype.getLastStep = function() {
+  return this.steps[this.steps.length - 1];
+};
+
+/**
+ * Set status of the Spec from given Step
+ *
+ * @param {angular.scenario.ObjectModel.Step} step
+ */
+angular.scenario.ObjectModel.Spec.prototype.setStatusFromStep = function(step) {
+  if (!this.status || step.status == 'error') {
+    this.status = step.status;
+    this.error = step.error;
+    this.line = step.line;
+  }
+};
+
+/**
+ * A single step inside a Spec.
+ *
+ * @param {string} name Name of the step
+ */
+angular.scenario.ObjectModel.Step = function(name) {
+  this.name = name;
+  this.startTime = Date.now();
+};
+
+/**
+ * Helper method for setting all error status related properties
+ *
+ * @param {string} status
+ * @param {string} error
+ * @param {string} line
+ */
+angular.scenario.ObjectModel.Step.prototype.setErrorStatus = function(status, error, line) {
+  this.status = status;
+  this.error = error;
+  this.line = line;
+};
+
+/**
+ * Runner for scenarios
+ *
+ * Has to be initialized before any test is loaded,
+ * because it publishes the API into window (global space).
+ */
+angular.scenario.Runner = function($window) {
+  this.listeners = [];
+  this.$window = $window;
+  this.rootDescribe = new angular.scenario.Describe();
+  this.currentDescribe = this.rootDescribe;
+  this.api = {
+    it: this.it,
+    iit: this.iit,
+    xit: angular.noop,
+    describe: this.describe,
+    ddescribe: this.ddescribe,
+    xdescribe: angular.noop,
+    beforeEach: this.beforeEach,
+    afterEach: this.afterEach
+  };
+  angular.forEach(this.api, angular.bind(this, function(fn, key) {
+    this.$window[key] = angular.bind(this, fn);
+  }));
+};
+
+/**
+ * Emits an event which notifies listeners and passes extra
+ * arguments.
+ *
+ * @param {string} eventName Name of the event to fire.
+ */
+angular.scenario.Runner.prototype.emit = function(eventName) {
+  var self = this;
+  var args = Array.prototype.slice.call(arguments, 1);
+  eventName = eventName.toLowerCase();
+  if (!this.listeners[eventName]) {
+    return;
+  }
+  angular.forEach(this.listeners[eventName], function(listener) {
+    listener.apply(self, args);
+  });
+};
+
+/**
+ * Adds a listener for an event.
+ *
+ * @param {string} eventName The name of the event to add a handler for
+ * @param {string} listener The fn(...) that takes the extra arguments from emit()
+ */
+angular.scenario.Runner.prototype.on = function(eventName, listener) {
+  eventName = eventName.toLowerCase();
+  this.listeners[eventName] = this.listeners[eventName] || [];
+  this.listeners[eventName].push(listener);
+};
+
+/**
+ * Defines a describe block of a spec.
+ *
+ * @see Describe.js
+ *
+ * @param {string} name Name of the block
+ * @param {function()} body Body of the block
+ */
+angular.scenario.Runner.prototype.describe = function(name, body) {
+  var self = this;
+  this.currentDescribe.describe(name, function() {
+    var parentDescribe = self.currentDescribe;
+    self.currentDescribe = this;
+    try {
+      body.call(this);
+    } finally {
+      self.currentDescribe = parentDescribe;
+    }
+  });
+};
+
+/**
+ * Same as describe, but makes ddescribe the only blocks to run.
+ *
+ * @see Describe.js
+ *
+ * @param {string} name Name of the block
+ * @param {function()} body Body of the block
+ */
+angular.scenario.Runner.prototype.ddescribe = function(name, body) {
+  var self = this;
+  this.currentDescribe.ddescribe(name, function() {
+    var parentDescribe = self.currentDescribe;
+    self.currentDescribe = this;
+    try {
+      body.call(this);
+    } finally {
+      self.currentDescribe = parentDescribe;
+    }
+  });
+};
+
+/**
+ * Defines a test in a describe block of a spec.
+ *
+ * @see Describe.js
+ *
+ * @param {string} name Name of the block
+ * @param {function()} body Body of the block
+ */
+angular.scenario.Runner.prototype.it = function(name, body) {
+  this.currentDescribe.it(name, body);
+};
+
+/**
+ * Same as it, but makes iit tests the only tests to run.
+ *
+ * @see Describe.js
+ *
+ * @param {string} name Name of the block
+ * @param {function()} body Body of the block
+ */
+angular.scenario.Runner.prototype.iit = function(name, body) {
+  this.currentDescribe.iit(name, body);
+};
+
+/**
+ * Defines a function to be called before each it block in the describe
+ * (and before all nested describes).
+ *
+ * @see Describe.js
+ *
+ * @param {function()} Callback to execute
+ */
+angular.scenario.Runner.prototype.beforeEach = function(body) {
+  this.currentDescribe.beforeEach(body);
+};
+
+/**
+ * Defines a function to be called after each it block in the describe
+ * (and before all nested describes).
+ *
+ * @see Describe.js
+ *
+ * @param {function()} Callback to execute
+ */
+angular.scenario.Runner.prototype.afterEach = function(body) {
+  this.currentDescribe.afterEach(body);
+};
+
+/**
+ * Creates a new spec runner.
+ *
+ * @private
+ * @param {Object} scope parent scope
+ */
+angular.scenario.Runner.prototype.createSpecRunner_ = function(scope) {
+  var child = scope.$new();
+  var Cls = angular.scenario.SpecRunner;
+
+  // Export all the methods to child scope manually as now we don't mess controllers with scopes
+  // TODO(vojta): refactor scenario runner so that these objects are not tightly coupled as current
+  for (var name in Cls.prototype) {
+    child[name] = angular.bind(child, Cls.prototype[name]);
+  }
+
+  Cls.call(child);
+  return child;
+};
+
+/**
+ * Runs all the loaded tests with the specified runner class on the
+ * provided application.
+ *
+ * @param {angular.scenario.Application} application App to remote control.
+ */
+angular.scenario.Runner.prototype.run = function(application) {
+  var self = this;
+  var $root = angular.injector(['ng']).get('$rootScope');
+  angular.extend($root, this);
+  angular.forEach(angular.scenario.Runner.prototype, function(fn, name) {
+    $root[name] = angular.bind(self, fn);
+  });
+  $root.application = application;
+  $root.emit('RunnerBegin');
+  asyncForEach(this.rootDescribe.getSpecs(), function(spec, specDone) {
+    var dslCache = {};
+    var runner = self.createSpecRunner_($root);
+    angular.forEach(angular.scenario.dsl, function(fn, key) {
+      dslCache[key] = fn.call($root);
+    });
+    angular.forEach(angular.scenario.dsl, function(fn, key) {
+      self.$window[key] = function() {
+        var line = callerFile(3);
+        var scope = runner.$new();
+
+        // Make the dsl accessible on the current chain
+        scope.dsl = {};
+        angular.forEach(dslCache, function(fn, key) {
+          scope.dsl[key] = function() {
+            return dslCache[key].apply(scope, arguments);
+          };
+        });
+
+        // Make these methods work on the current chain
+        scope.addFuture = function() {
+          Array.prototype.push.call(arguments, line);
+          return angular.scenario.SpecRunner.
+            prototype.addFuture.apply(scope, arguments);
+        };
+        scope.addFutureAction = function() {
+          Array.prototype.push.call(arguments, line);
+          return angular.scenario.SpecRunner.
+            prototype.addFutureAction.apply(scope, arguments);
+        };
+
+        return scope.dsl[key].apply(scope, arguments);
+      };
+    });
+    runner.run(spec, function() {
+      runner.$destroy();
+      specDone.apply(this, arguments);
+    });
+  },
+  function(error) {
+    if (error) {
+      self.emit('RunnerError', error);
+    }
+    self.emit('RunnerEnd');
+  });
+};
+
+/**
+ * This class is the "this" of the it/beforeEach/afterEach method.
+ * Responsibilities:
+ *   - "this" for it/beforeEach/afterEach
+ *   - keep state for single it/beforeEach/afterEach execution
+ *   - keep track of all of the futures to execute
+ *   - run single spec (execute each future)
+ */
+angular.scenario.SpecRunner = function() {
+  this.futures = [];
+  this.afterIndex = 0;
+};
+
+/**
+ * Executes a spec which is an it block with associated before/after functions
+ * based on the describe nesting.
+ *
+ * @param {Object} spec A spec object
+ * @param {function()} specDone function that is called when the spec finishes,
+ *                              of the form `Function(error, index)`
+ */
+angular.scenario.SpecRunner.prototype.run = function(spec, specDone) {
+  var self = this;
+  this.spec = spec;
+
+  this.emit('SpecBegin', spec);
+
+  try {
+    spec.before.call(this);
+    spec.body.call(this);
+    this.afterIndex = this.futures.length;
+    spec.after.call(this);
+  } catch (e) {
+    this.emit('SpecError', spec, e);
+    this.emit('SpecEnd', spec);
+    specDone();
+    return;
+  }
+
+  var handleError = function(error, done) {
+    if (self.error) {
+      return done();
+    }
+    self.error = true;
+    done(null, self.afterIndex);
+  };
+
+  asyncForEach(
+    this.futures,
+    function(future, futureDone) {
+      self.step = future;
+      self.emit('StepBegin', spec, future);
+      try {
+        future.execute(function(error) {
+          if (error) {
+            self.emit('StepFailure', spec, future, error);
+            self.emit('StepEnd', spec, future);
+            return handleError(error, futureDone);
+          }
+          self.emit('StepEnd', spec, future);
+          self.$window.setTimeout(function() { futureDone(); }, 0);
+        });
+      } catch (e) {
+        self.emit('StepError', spec, future, e);
+        self.emit('StepEnd', spec, future);
+        handleError(e, futureDone);
+      }
+    },
+    function(e) {
+      if (e) {
+        self.emit('SpecError', spec, e);
+      }
+      self.emit('SpecEnd', spec);
+      // Call done in a timeout so exceptions don't recursively
+      // call this function
+      self.$window.setTimeout(function() { specDone(); }, 0);
+    }
+  );
+};
+
+/**
+ * Adds a new future action.
+ *
+ * Note: Do not pass line manually. It happens automatically.
+ *
+ * @param {string} name Name of the future
+ * @param {function()} behavior Behavior of the future
+ * @param {function()} line fn() that returns file/line number
+ */
+angular.scenario.SpecRunner.prototype.addFuture = function(name, behavior, line) {
+  var future = new angular.scenario.Future(name, angular.bind(this, behavior), line);
+  this.futures.push(future);
+  return future;
+};
+
+/**
+ * Adds a new future action to be executed on the application window.
+ *
+ * Note: Do not pass line manually. It happens automatically.
+ *
+ * @param {string} name Name of the future
+ * @param {function()} behavior Behavior of the future
+ * @param {function()} line fn() that returns file/line number
+ */
+angular.scenario.SpecRunner.prototype.addFutureAction = function(name, behavior, line) {
+  var self = this;
+  var NG = /\[ng\\\:/;
+  return this.addFuture(name, function(done) {
+    this.application.executeAction(function($window, $document) {
+
+      //TODO(esprehn): Refactor this so it doesn't need to be in here.
+      $document.elements = function(selector) {
+        var args = Array.prototype.slice.call(arguments, 1);
+        selector = (self.selector || '') + ' ' + (selector || '');
+        selector = _jQuery.trim(selector) || '*';
+        angular.forEach(args, function(value, index) {
+          selector = selector.replace('$' + (index + 1), value);
+        });
+        var result = $document.find(selector);
+        if (selector.match(NG)) {
+          angular.forEach(['[ng-','[data-ng-','[x-ng-'], function(value, index) {
+            result = result.add(selector.replace(NG, value), $document);
+          });
+        }
+        if (!result.length) {
+          throw {
+            type: 'selector',
+            message: 'Selector ' + selector + ' did not match any elements.'
+          };
+        }
+
+        return result;
+      };
+
+      try {
+        behavior.call(self, $window, $document, done);
+      } catch (e) {
+        if (e.type && e.type === 'selector') {
+          done(e.message);
+        } else {
+          throw e;
+        }
+      }
+    });
+  }, line);
+};
+
+/**
+ * Shared DSL statements that are useful to all scenarios.
+ */
+
+ /**
+ * Usage:
+ *    pause() pauses until you call resume() in the console
+ */
+angular.scenario.dsl('pause', function() {
+  return function() {
+    return this.addFuture('pausing for you to resume', function(done) {
+      this.emit('InteractivePause', this.spec, this.step);
+      this.$window.resume = function() { done(); };
+    });
+  };
+});
+
+/**
+ * Usage:
+ *    sleep(seconds) pauses the test for specified number of seconds
+ */
+angular.scenario.dsl('sleep', function() {
+  return function(time) {
+    return this.addFuture('sleep for ' + time + ' seconds', function(done) {
+      this.$window.setTimeout(function() { done(null, time * 1000); }, time * 1000);
+    });
+  };
+});
+
+/**
+ * Usage:
+ *    browser().navigateTo(url) Loads the url into the frame
+ *    browser().navigateTo(url, fn) where fn(url) is called and returns the URL to navigate to
+ *    browser().reload() refresh the page (reload the same URL)
+ *    browser().window.href() window.location.href
+ *    browser().window.path() window.location.pathname
+ *    browser().window.search() window.location.search
+ *    browser().window.hash() window.location.hash without # prefix
+ *    browser().location().url() see ng.$location#url
+ *    browser().location().path() see ng.$location#path
+ *    browser().location().search() see ng.$location#search
+ *    browser().location().hash() see ng.$location#hash
+ */
+angular.scenario.dsl('browser', function() {
+  var chain = {};
+
+  chain.navigateTo = function(url, delegate) {
+    var application = this.application;
+    return this.addFuture("browser navigate to '" + url + "'", function(done) {
+      if (delegate) {
+        url = delegate.call(this, url);
+      }
+      application.navigateTo(url, function() {
+        done(null, url);
+      }, done);
+    });
+  };
+
+  chain.reload = function() {
+    var application = this.application;
+    return this.addFutureAction('browser reload', function($window, $document, done) {
+      var href = $window.location.href;
+      application.navigateTo(href, function() {
+        done(null, href);
+      }, done);
+    });
+  };
+
+  chain.window = function() {
+    var api = {};
+
+    api.href = function() {
+      return this.addFutureAction('window.location.href', function($window, $document, done) {
+        done(null, $window.location.href);
+      });
+    };
+
+    api.path = function() {
+      return this.addFutureAction('window.location.path', function($window, $document, done) {
+        done(null, $window.location.pathname);
+      });
+    };
+
+    api.search = function() {
+      return this.addFutureAction('window.location.search', function($window, $document, done) {
+        done(null, $window.location.search);
+      });
+    };
+
+    api.hash = function() {
+      return this.addFutureAction('window.location.hash', function($window, $document, done) {
+        done(null, $window.location.hash.replace('#', ''));
+      });
+    };
+
+    return api;
+  };
+
+  chain.location = function() {
+    var api = {};
+
+    api.url = function() {
+      return this.addFutureAction('$location.url()', function($window, $document, done) {
+        done(null, $document.injector().get('$location').url());
+      });
+    };
+
+    api.path = function() {
+      return this.addFutureAction('$location.path()', function($window, $document, done) {
+        done(null, $document.injector().get('$location').path());
+      });
+    };
+
+    api.search = function() {
+      return this.addFutureAction('$location.search()', function($window, $document, done) {
+        done(null, $document.injector().get('$location').search());
+      });
+    };
+
+    api.hash = function() {
+      return this.addFutureAction('$location.hash()', function($window, $document, done) {
+        done(null, $document.injector().get('$location').hash());
+      });
+    };
+
+    return api;
+  };
+
+  return function() {
+    return chain;
+  };
+});
+
+/**
+ * Usage:
+ *    expect(future).{matcher} where matcher is one of the matchers defined
+ *    with angular.scenario.matcher
+ *
+ * ex. expect(binding("name")).toEqual("Elliott")
+ */
+angular.scenario.dsl('expect', function() {
+  var chain = angular.extend({}, angular.scenario.matcher);
+
+  chain.not = function() {
+    this.inverse = true;
+    return chain;
+  };
+
+  return function(future) {
+    this.future = future;
+    return chain;
+  };
+});
+
+/**
+ * Usage:
+ *    using(selector, label) scopes the next DSL element selection
+ *
+ * ex.
+ *   using('#foo', "'Foo' text field").input('bar')
+ */
+angular.scenario.dsl('using', function() {
+  return function(selector, label) {
+    this.selector = _jQuery.trim((this.selector || '') + ' ' + selector);
+    if (angular.isString(label) && label.length) {
+      this.label = label + ' ( ' + this.selector + ' )';
+    } else {
+      this.label = this.selector;
+    }
+    return this.dsl;
+  };
+});
+
+/**
+ * Usage:
+ *    binding(name) returns the value of the first matching binding
+ */
+angular.scenario.dsl('binding', function() {
+  return function(name) {
+    return this.addFutureAction("select binding '" + name + "'",
+      function($window, $document, done) {
+        var values = $document.elements().bindings($window.angular.element, name);
+        if (!values.length) {
+          return done("Binding selector '" + name + "' did not match.");
+        }
+        done(null, values[0]);
+    });
+  };
+});
+
+/**
+ * Usage:
+ *    input(name).enter(value) enters value in input with specified name
+ *    input(name).check() checks checkbox
+ *    input(name).select(value) selects the radio button with specified name/value
+ *    input(name).val() returns the value of the input.
+ */
+angular.scenario.dsl('input', function() {
+  var chain = {};
+  var supportInputEvent = 'oninput' in document.createElement('div') && !(msie && msie <= 11);
+
+  chain.enter = function(value, event) {
+    return this.addFutureAction("input '" + this.name + "' enter '" + value + "'",
+      function($window, $document, done) {
+        var input = $document.elements('[ng\\:model="$1"]', this.name).filter(':input');
+        input.val(value);
+        input.trigger(event || (supportInputEvent ? 'input' : 'change'));
+        done();
+    });
+  };
+
+  chain.check = function() {
+    return this.addFutureAction("checkbox '" + this.name + "' toggle",
+      function($window, $document, done) {
+        var input = $document.elements('[ng\\:model="$1"]', this.name).filter(':checkbox');
+        input.trigger('click');
+        done();
+    });
+  };
+
+  chain.select = function(value) {
+    return this.addFutureAction("radio button '" + this.name + "' toggle '" + value + "'",
+      function($window, $document, done) {
+        var input = $document.
+          elements('[ng\\:model="$1"][value="$2"]', this.name, value).filter(':radio');
+        input.trigger('click');
+        done();
+    });
+  };
+
+  chain.val = function() {
+    return this.addFutureAction("return input val", function($window, $document, done) {
+      var input = $document.elements('[ng\\:model="$1"]', this.name).filter(':input');
+      done(null,input.val());
+    });
+  };
+
+  return function(name) {
+    this.name = name;
+    return chain;
+  };
+});
+
+
+/**
+ * Usage:
+ *    repeater('#products table', 'Product List').count() number of rows
+ *    repeater('#products table', 'Product List').row(1) all bindings in row as an array
+ *    repeater('#products table', 'Product List').column('product.name') all values across all rows
+ *    in an array
+ */
+angular.scenario.dsl('repeater', function() {
+  var chain = {};
+
+  chain.count = function() {
+    return this.addFutureAction("repeater '" + this.label + "' count",
+      function($window, $document, done) {
+        try {
+          done(null, $document.elements().length);
+        } catch (e) {
+          done(null, 0);
+        }
+    });
+  };
+
+  chain.column = function(binding) {
+    return this.addFutureAction("repeater '" + this.label + "' column '" + binding + "'",
+      function($window, $document, done) {
+        done(null, $document.elements().bindings($window.angular.element, binding));
+    });
+  };
+
+  chain.row = function(index) {
+    return this.addFutureAction("repeater '" + this.label + "' row '" + index + "'",
+      function($window, $document, done) {
+        var matches = $document.elements().slice(index, index + 1);
+        if (!matches.length) {
+          return done('row ' + index + ' out of bounds');
+        }
+        done(null, matches.bindings($window.angular.element));
+    });
+  };
+
+  return function(selector, label) {
+    this.dsl.using(selector, label);
+    return chain;
+  };
+});
+
+/**
+ * Usage:
+ *    select(name).option('value') select one option
+ *    select(name).options('value1', 'value2', ...) select options from a multi select
+ */
+angular.scenario.dsl('select', function() {
+  var chain = {};
+
+  chain.option = function(value) {
+    return this.addFutureAction("select '" + this.name + "' option '" + value + "'",
+      function($window, $document, done) {
+        var select = $document.elements('select[ng\\:model="$1"]', this.name);
+        var option = select.find('option[value="' + value + '"]');
+        if (option.length) {
+          select.val(value);
+        } else {
+          option = select.find('option').filter(function() {
+            return _jQuery(this).text() === value;
+          });
+          if (!option.length) {
+            option = select.find('option:contains("' + value + '")');
+          }
+          if (option.length) {
+            select.val(option.val());
+          } else {
+              return done("option '" + value + "' not found");
+          }
+        }
+        select.trigger('change');
+        done();
+    });
+  };
+
+  chain.options = function() {
+    var values = arguments;
+    return this.addFutureAction("select '" + this.name + "' options '" + values + "'",
+      function($window, $document, done) {
+        var select = $document.elements('select[multiple][ng\\:model="$1"]', this.name);
+        select.val(values);
+        select.trigger('change');
+        done();
+    });
+  };
+
+  return function(name) {
+    this.name = name;
+    return chain;
+  };
+});
+
+/**
+ * Usage:
+ *    element(selector, label).count() get the number of elements that match selector
+ *    element(selector, label).click() clicks an element
+ *    element(selector, label).mouseover() mouseover an element
+ *    element(selector, label).mousedown() mousedown an element
+ *    element(selector, label).mouseup() mouseup an element
+ *    element(selector, label).query(fn) executes fn(selectedElements, done)
+ *    element(selector, label).{method}() gets the value (as defined by jQuery, ex. val)
+ *    element(selector, label).{method}(value) sets the value (as defined by jQuery, ex. val)
+ *    element(selector, label).{method}(key) gets the value (as defined by jQuery, ex. attr)
+ *    element(selector, label).{method}(key, value) sets the value (as defined by jQuery, ex. attr)
+ */
+angular.scenario.dsl('element', function() {
+  var KEY_VALUE_METHODS = ['attr', 'css', 'prop'];
+  var VALUE_METHODS = [
+    'val', 'text', 'html', 'height', 'innerHeight', 'outerHeight', 'width',
+    'innerWidth', 'outerWidth', 'position', 'scrollLeft', 'scrollTop', 'offset'
+  ];
+  var chain = {};
+
+  chain.count = function() {
+    return this.addFutureAction("element '" + this.label + "' count",
+      function($window, $document, done) {
+        try {
+          done(null, $document.elements().length);
+        } catch (e) {
+          done(null, 0);
+        }
+    });
+  };
+
+  chain.click = function() {
+    return this.addFutureAction("element '" + this.label + "' click",
+      function($window, $document, done) {
+        var elements = $document.elements();
+        var href = elements.attr('href');
+        var eventProcessDefault = elements.trigger('click')[0];
+
+        if (href && elements[0].nodeName.toLowerCase() === 'a' && eventProcessDefault) {
+          this.application.navigateTo(href, function() {
+            done();
+          }, done);
+        } else {
+          done();
+        }
+    });
+  };
+
+  chain.dblclick = function() {
+    return this.addFutureAction("element '" + this.label + "' dblclick",
+      function($window, $document, done) {
+        var elements = $document.elements();
+        var href = elements.attr('href');
+        var eventProcessDefault = elements.trigger('dblclick')[0];
+
+        if (href && elements[0].nodeName.toLowerCase() === 'a' && eventProcessDefault) {
+          this.application.navigateTo(href, function() {
+            done();
+          }, done);
+        } else {
+          done();
+        }
+    });
+  };
+
+  chain.mouseover = function() {
+    return this.addFutureAction("element '" + this.label + "' mouseover",
+      function($window, $document, done) {
+        var elements = $document.elements();
+        elements.trigger('mouseover');
+        done();
+    });
+  };
+
+  chain.mousedown = function() {
+      return this.addFutureAction("element '" + this.label + "' mousedown",
+        function($window, $document, done) {
+          var elements = $document.elements();
+          elements.trigger('mousedown');
+          done();
+      });
+    };
+
+  chain.mouseup = function() {
+      return this.addFutureAction("element '" + this.label + "' mouseup",
+        function($window, $document, done) {
+          var elements = $document.elements();
+          elements.trigger('mouseup');
+          done();
+      });
+    };
+
+  chain.query = function(fn) {
+    return this.addFutureAction('element ' + this.label + ' custom query',
+      function($window, $document, done) {
+        fn.call(this, $document.elements(), done);
+    });
+  };
+
+  angular.forEach(KEY_VALUE_METHODS, function(methodName) {
+    chain[methodName] = function(name, value) {
+      var args = arguments,
+          futureName = (args.length == 1)
+              ? "element '" + this.label + "' get " + methodName + " '" + name + "'"
+              : "element '" + this.label + "' set " + methodName + " '" + name + "' to " + "'" +
+                value + "'";
+
+      return this.addFutureAction(futureName, function($window, $document, done) {
+        var element = $document.elements();
+        done(null, element[methodName].apply(element, args));
+      });
+    };
+  });
+
+  angular.forEach(VALUE_METHODS, function(methodName) {
+    chain[methodName] = function(value) {
+      var args = arguments,
+          futureName = (args.length === 0)
+              ? "element '" + this.label + "' " + methodName
+              : "element '" + this.label + "' set " + methodName + " to '" + value + "'";
+
+      return this.addFutureAction(futureName, function($window, $document, done) {
+        var element = $document.elements();
+        done(null, element[methodName].apply(element, args));
+      });
+    };
+  });
+
+  return function(selector, label) {
+    this.dsl.using(selector, label);
+    return chain;
+  };
+});
+
+/**
+ * Matchers for implementing specs. Follows the Jasmine spec conventions.
+ */
+
+angular.scenario.matcher('toEqual', function(expected) {
+  return angular.equals(this.actual, expected);
+});
+
+angular.scenario.matcher('toBe', function(expected) {
+  return this.actual === expected;
+});
+
+angular.scenario.matcher('toBeDefined', function() {
+  return angular.isDefined(this.actual);
+});
+
+angular.scenario.matcher('toBeTruthy', function() {
+  return this.actual;
+});
+
+angular.scenario.matcher('toBeFalsy', function() {
+  return !this.actual;
+});
+
+angular.scenario.matcher('toMatch', function(expected) {
+  return new RegExp(expected).test(this.actual);
+});
+
+angular.scenario.matcher('toBeNull', function() {
+  return this.actual === null;
+});
+
+angular.scenario.matcher('toContain', function(expected) {
+  return includes(this.actual, expected);
+});
+
+angular.scenario.matcher('toBeLessThan', function(expected) {
+  return this.actual < expected;
+});
+
+angular.scenario.matcher('toBeGreaterThan', function(expected) {
+  return this.actual > expected;
+});
+
+/**
+ * User Interface for the Scenario Runner.
+ *
+ * TODO(esprehn): This should be refactored now that ObjectModel exists
+ *  to use angular bindings for the UI.
+ */
+angular.scenario.output('html', function(context, runner, model) {
+  var specUiMap = {},
+      lastStepUiMap = {};
+
+  context.append(
+    '<div id="header">' +
+    '  <h1><span class="angular">AngularJS</span>: Scenario Test Runner</h1>' +
+    '  <ul id="status-legend" class="status-display">' +
+    '    <li class="status-error">0 Errors</li>' +
+    '    <li class="status-failure">0 Failures</li>' +
+    '    <li class="status-success">0 Passed</li>' +
+    '  </ul>' +
+    '</div>' +
+    '<div id="specs">' +
+    '  <div class="test-children"></div>' +
+    '</div>'
+  );
+
+  runner.on('InteractivePause', function(spec) {
+    var ui = lastStepUiMap[spec.id];
+    ui.find('.test-title').
+      html('paused... <a href="javascript:resume()">resume</a> when ready.');
+  });
+
+  runner.on('SpecBegin', function(spec) {
+    var ui = findContext(spec);
+    ui.find('> .tests').append(
+      '<li class="status-pending test-it"></li>'
+    );
+    ui = ui.find('> .tests li:last');
+    ui.append(
+      '<div class="test-info">' +
+      '  <p class="test-title">' +
+      '    <span class="timer-result"></span>' +
+      '    <span class="test-name"></span>' +
+      '  </p>' +
+      '</div>' +
+      '<div class="scrollpane">' +
+      '  <ol class="test-actions"></ol>' +
+      '</div>'
+    );
+    ui.find('> .test-info .test-name').text(spec.name);
+    ui.find('> .test-info').click(function() {
+      var scrollpane = ui.find('> .scrollpane');
+      var actions = scrollpane.find('> .test-actions');
+      var name = context.find('> .test-info .test-name');
+      if (actions.find(':visible').length) {
+        actions.hide();
+        name.removeClass('open').addClass('closed');
+      } else {
+        actions.show();
+        scrollpane.attr('scrollTop', scrollpane.attr('scrollHeight'));
+        name.removeClass('closed').addClass('open');
+      }
+    });
+
+    specUiMap[spec.id] = ui;
+  });
+
+  runner.on('SpecError', function(spec, error) {
+    var ui = specUiMap[spec.id];
+    ui.append('<pre></pre>');
+    ui.find('> pre').text(formatException(error));
+  });
+
+  runner.on('SpecEnd', function(spec) {
+    var ui = specUiMap[spec.id];
+    spec = model.getSpec(spec.id);
+    ui.removeClass('status-pending');
+    ui.addClass('status-' + spec.status);
+    ui.find("> .test-info .timer-result").text(spec.duration + "ms");
+    if (spec.status === 'success') {
+      ui.find('> .test-info .test-name').addClass('closed');
+      ui.find('> .scrollpane .test-actions').hide();
+    }
+    updateTotals(spec.status);
+  });
+
+  runner.on('StepBegin', function(spec, step) {
+    var ui = specUiMap[spec.id];
+    spec = model.getSpec(spec.id);
+    step = spec.getLastStep();
+    ui.find('> .scrollpane .test-actions').append('<li class="status-pending"></li>');
+    var stepUi = lastStepUiMap[spec.id] = ui.find('> .scrollpane .test-actions li:last');
+    stepUi.append(
+      '<div class="timer-result"></div>' +
+      '<div class="test-title"></div>'
+    );
+    stepUi.find('> .test-title').text(step.name);
+    var scrollpane = stepUi.parents('.scrollpane');
+    scrollpane.attr('scrollTop', scrollpane.attr('scrollHeight'));
+  });
+
+  runner.on('StepFailure', function(spec, step, error) {
+    var ui = lastStepUiMap[spec.id];
+    addError(ui, step.line, error);
+  });
+
+  runner.on('StepError', function(spec, step, error) {
+    var ui = lastStepUiMap[spec.id];
+    addError(ui, step.line, error);
+  });
+
+  runner.on('StepEnd', function(spec, step) {
+    var stepUi = lastStepUiMap[spec.id];
+    spec = model.getSpec(spec.id);
+    step = spec.getLastStep();
+    stepUi.find('.timer-result').text(step.duration + 'ms');
+    stepUi.removeClass('status-pending');
+    stepUi.addClass('status-' + step.status);
+    var scrollpane = specUiMap[spec.id].find('> .scrollpane');
+    scrollpane.attr('scrollTop', scrollpane.attr('scrollHeight'));
+  });
+
+  /**
+   * Finds the context of a spec block defined by the passed definition.
+   *
+   * @param {Object} The definition created by the Describe object.
+   */
+  function findContext(spec) {
+    var currentContext = context.find('#specs');
+    angular.forEach(model.getDefinitionPath(spec), function(defn) {
+      var id = 'describe-' + defn.id;
+      if (!context.find('#' + id).length) {
+        currentContext.find('> .test-children').append(
+          '<div class="test-describe" id="' + id + '">' +
+          '  <h2></h2>' +
+          '  <div class="test-children"></div>' +
+          '  <ul class="tests"></ul>' +
+          '</div>'
+        );
+        context.find('#' + id).find('> h2').text('describe: ' + defn.name);
+      }
+      currentContext = context.find('#' + id);
+    });
+    return context.find('#describe-' + spec.definition.id);
+  }
+
+  /**
+   * Updates the test counter for the status.
+   *
+   * @param {string} the status.
+   */
+  function updateTotals(status) {
+    var legend = context.find('#status-legend .status-' + status);
+    var parts = legend.text().split(' ');
+    var value = (parts[0] * 1) + 1;
+    legend.text(value + ' ' + parts[1]);
+  }
+
+  /**
+   * Add an error to a step.
+   *
+   * @param {Object} The JQuery wrapped context
+   * @param {function()} fn() that should return the file/line number of the error
+   * @param {Object} the error.
+   */
+  function addError(context, line, error) {
+    context.find('.test-title').append('<pre></pre>');
+    var message = _jQuery.trim(line() + '\n\n' + formatException(error));
+    context.find('.test-title pre:last').text(message);
+  }
+});
+
+/**
+ * Generates JSON output into a context.
+ */
+angular.scenario.output('json', function(context, runner, model) {
+  model.on('RunnerEnd', function() {
+    context.text(angular.toJson(model.value));
+  });
+});
+
+/**
+ * Generates XML output into a context.
+ */
+angular.scenario.output('xml', function(context, runner, model) {
+  var $ = function(args) {return new context.init(args);};
+  model.on('RunnerEnd', function() {
+    var scenario = $('<scenario></scenario>');
+    context.append(scenario);
+    serializeXml(scenario, model.value);
+  });
+
+  /**
+   * Convert the tree into XML.
+   *
+   * @param {Object} context jQuery context to add the XML to.
+   * @param {Object} tree node to serialize
+   */
+  function serializeXml(context, tree) {
+     angular.forEach(tree.children, function(child) {
+       var describeContext = $('<describe></describe>');
+       describeContext.attr('id', child.id);
+       describeContext.attr('name', child.name);
+       context.append(describeContext);
+       serializeXml(describeContext, child);
+     });
+     var its = $('<its></its>');
+     context.append(its);
+     angular.forEach(tree.specs, function(spec) {
+       var it = $('<it></it>');
+       it.attr('id', spec.id);
+       it.attr('name', spec.name);
+       it.attr('duration', spec.duration);
+       it.attr('status', spec.status);
+       its.append(it);
+       angular.forEach(spec.steps, function(step) {
+         var stepContext = $('<step></step>');
+         stepContext.attr('name', step.name);
+         stepContext.attr('duration', step.duration);
+         stepContext.attr('status', step.status);
+         it.append(stepContext);
+         if (step.error) {
+           var error = $('<error></error>');
+           stepContext.append(error);
+           error.text(formatException(step.error));
+         }
+       });
+     });
+   }
+});
+
+/**
+ * Creates a global value $result with the result of the runner.
+ */
+angular.scenario.output('object', function(context, runner, model) {
+  runner.$window.$result = model.value;
+});
+
+bindJQuery();
+publishExternalAPI(angular);
+
+var $runner = new angular.scenario.Runner(window),
+    scripts = document.getElementsByTagName('script'),
+    script = scripts[scripts.length - 1],
+    config = {};
+
+angular.forEach(script.attributes, function(attr) {
+  var match = attr.name.match(/ng[:\-](.*)/);
+  if (match) {
+    config[match[1]] = attr.value || true;
+  }
+});
+
+if (config.autotest) {
+  JQLite(document).ready(function() {
+    angular.scenario.setUpAndRun(config);
+  });
+}
+})(window, document);
+
+
+!window.angular.$$csp().noInlineStyle && window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";\n\n[ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],\n.ng-cloak, .x-ng-cloak,\n.ng-hide:not(.ng-hide-animate) {\n  display: none !important;\n}\n\nng\\:form {\n  display: block;\n}\n\n.ng-animate-shim {\n  visibility:hidden;\n}\n\n.ng-anchor {\n  position:absolute;\n}\n</style>');
+!window.angular.$$csp().noInlineStyle && window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";\n/* CSS Document */\n\n/** Structure */\nbody {\n  font-family: Arial, sans-serif;\n  margin: 0;\n  font-size: 14px;\n}\n\n#system-error {\n  font-size: 1.5em;\n  text-align: center;\n}\n\n#json, #xml {\n  display: none;\n}\n\n#header {\n  position: fixed;\n  width: 100%;\n}\n\n#specs {\n  padding-top: 50px;\n}\n\n#header .angular {\n  font-family: Courier New, monospace;\n  font-weight: bold;\n}\n\n#header h1 {\n  font-weight: normal;\n  float: left;\n  font-size: 30px;\n  line-height: 30px;\n  margin: 0;\n  padding: 10px 10px;\n  height: 30px;\n}\n\n#application h2,\n#specs h2 {\n  margin: 0;\n  padding: 0.5em;\n  font-size: 1.1em;\n}\n\n#status-legend {\n  margin-top: 10px;\n  margin-right: 10px;\n}\n\n#header,\n#application,\n.test-info,\n.test-actions li {\n  overflow: hidden;\n}\n\n#application {\n  margin: 10px;\n}\n\n#application iframe {\n  width: 100%;\n  height: 758px;\n}\n\n#application .popout {\n  float: right;\n}\n\n#application iframe {\n  border: none;\n}\n\n.tests li,\n.test-actions li,\n.test-it li,\n.test-it ol,\n.status-display {\n  list-style-type: none;\n}\n\n.tests,\n.test-it ol,\n.status-display {\n  margin: 0;\n  padding: 0;\n}\n\n.test-info {\n  margin-left: 1em;\n  margin-top: 0.5em;\n  border-radius: 8px 0 0 8px;\n  -webkit-border-radius: 8px 0 0 8px;\n  -moz-border-radius: 8px 0 0 8px;\n  cursor: pointer;\n}\n\n.test-info:hover .test-name {\n  text-decoration: underline;\n}\n\n.test-info .closed:before {\n  content: \'\\25b8\\00A0\';\n}\n\n.test-info .open:before {\n  content: \'\\25be\\00A0\';\n  font-weight: bold;\n}\n\n.test-it ol {\n  margin-left: 2.5em;\n}\n\n.status-display,\n.status-display li {\n  float: right;\n}\n\n.status-display li {\n  padding: 5px 10px;\n}\n\n.timer-result,\n.test-title {\n  display: inline-block;\n  margin: 0;\n  padding: 4px;\n}\n\n.test-actions .test-title,\n.test-actions .test-result {\n  display: table-cell;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n\n.test-actions {\n  display: table;\n}\n\n.test-actions li {\n  display: table-row;\n}\n\n.timer-result {\n  width: 4em;\n  padding: 0 10px;\n  text-align: right;\n  font-family: monospace;\n}\n\n.test-it pre,\n.test-actions pre {\n  clear: left;\n  color: black;\n  margin-left: 6em;\n}\n\n.test-describe {\n  padding-bottom: 0.5em;\n}\n\n.test-describe .test-describe {\n  margin: 5px 5px 10px 2em;\n}\n\n.test-actions .status-pending .test-title:before {\n  content: \'\\00bb\\00A0\';\n}\n\n.scrollpane {\n   max-height: 20em;\n   overflow: auto;\n}\n\n/** Colors */\n\n#header {\n  background-color: #F2C200;\n}\n\n#specs h2 {\n  border-top: 2px solid #BABAD1;\n}\n\n#specs h2,\n#application h2 {\n  background-color: #efefef;\n}\n\n#application {\n  border: 1px solid #BABAD1;\n}\n\n.test-describe .test-describe {\n  border-left: 1px solid #BABAD1;\n  border-right: 1px solid #BABAD1;\n  border-bottom: 1px solid #BABAD1;\n}\n\n.status-display {\n  border: 1px solid #777;\n}\n\n.status-display .status-pending,\n.status-pending .test-info {\n  background-color: #F9EEBC;\n}\n\n.status-display .status-success,\n.status-success .test-info {\n  background-color: #B1D7A1;\n}\n\n.status-display .status-failure,\n.status-failure .test-info {\n  background-color: #FF8286;\n}\n\n.status-display .status-error,\n.status-error .test-info {\n  background-color: black;\n  color: white;\n}\n\n.test-actions .status-success .test-title {\n  color: #30B30A;\n}\n\n.test-actions .status-failure .test-title {\n  color: #DF0000;\n}\n\n.test-actions .status-error .test-title {\n  color: black;\n}\n\n.test-actions .timer-result {\n  color: #888;\n}\n</style>');
\ No newline at end of file
diff --git a/public/bower_components/angular-smart-table/smart-table.js b/public/bower_components/angular-smart-table/smart-table.js
new file mode 100644
index 0000000..871bb9c
--- /dev/null
+++ b/public/bower_components/angular-smart-table/smart-table.js
@@ -0,0 +1,527 @@
+/** 
+* @version 2.1.5
+* @license MIT
+*/
+(function (ng, undefined){
+    'use strict';
+
+ng.module('smart-table', []).run(['$templateCache', function ($templateCache) {
+    $templateCache.put('template/smart-table/pagination.html',
+        '<nav ng-if="numPages && pages.length >= 2"><ul class="pagination">' +
+        '<li ng-repeat="page in pages" ng-class="{active: page==currentPage}"><a ng-click="selectPage(page)">{{page}}</a></li>' +
+        '</ul></nav>');
+}]);
+
+
+ng.module('smart-table')
+  .constant('stConfig', {
+    pagination: {
+      template: 'template/smart-table/pagination.html',
+      itemsByPage: 10,
+      displayedPages: 5
+    },
+    search: {
+      delay: 400, // ms
+      inputEvent: 'input'
+    },
+    select: {
+      mode: 'single',
+      selectedClass: 'st-selected'
+    },
+    sort: {
+      ascentClass: 'st-sort-ascent',
+      descentClass: 'st-sort-descent',
+      skipNatural: false,
+      delay:300
+    },
+    pipe: {
+      delay: 100 //ms
+    }
+  });
+ng.module('smart-table')
+  .controller('stTableController', ['$scope', '$parse', '$filter', '$attrs', function StTableController ($scope, $parse, $filter, $attrs) {
+    var propertyName = $attrs.stTable;
+    var displayGetter = $parse(propertyName);
+    var displaySetter = displayGetter.assign;
+    var safeGetter;
+    var orderBy = $filter('orderBy');
+    var filter = $filter('filter');
+    var safeCopy = copyRefs(displayGetter($scope));
+    var tableState = {
+      sort: {},
+      search: {},
+      pagination: {
+        start: 0,
+        totalItemCount: 0
+      }
+    };
+    var filtered;
+    var pipeAfterSafeCopy = true;
+    var ctrl = this;
+    var lastSelected;
+
+    function copyRefs (src) {
+      return src ? [].concat(src) : [];
+    }
+
+    function updateSafeCopy () {
+      safeCopy = copyRefs(safeGetter($scope));
+      if (pipeAfterSafeCopy === true) {
+        ctrl.pipe();
+      }
+    }
+
+    function deepDelete (object, path) {
+      if (path.indexOf('.') != -1) {
+        var partials = path.split('.');
+        var key = partials.pop();
+        var parentPath = partials.join('.');
+        var parentObject = $parse(parentPath)(object)
+        delete parentObject[key];
+        if (Object.keys(parentObject).length == 0) {
+          deepDelete(object, parentPath);
+        }
+      } else {
+        delete object[path];
+      }
+    }
+
+    if ($attrs.stSafeSrc) {
+      safeGetter = $parse($attrs.stSafeSrc);
+      $scope.$watch(function () {
+        var safeSrc = safeGetter($scope);
+        return safeSrc && safeSrc.length ? safeSrc[0] : undefined;
+      }, function (newValue, oldValue) {
+        if (newValue !== oldValue) {
+          updateSafeCopy();
+        }
+      });
+      $scope.$watch(function () {
+        var safeSrc = safeGetter($scope);
+        return safeSrc ? safeSrc.length : 0;
+      }, function (newValue, oldValue) {
+        if (newValue !== safeCopy.length) {
+          updateSafeCopy();
+        }
+      });
+      $scope.$watch(function () {
+        return safeGetter($scope);
+      }, function (newValue, oldValue) {
+        if (newValue !== oldValue) {
+          tableState.pagination.start = 0;
+          updateSafeCopy();
+        }
+      });
+    }
+
+    /**
+     * sort the rows
+     * @param {Function | String} predicate - function or string which will be used as predicate for the sorting
+     * @param [reverse] - if you want to reverse the order
+     */
+    this.sortBy = function sortBy (predicate, reverse) {
+      tableState.sort.predicate = predicate;
+      tableState.sort.reverse = reverse === true;
+
+      if (ng.isFunction(predicate)) {
+        tableState.sort.functionName = predicate.name;
+      } else {
+        delete tableState.sort.functionName;
+      }
+
+      tableState.pagination.start = 0;
+      return this.pipe();
+    };
+
+    /**
+     * search matching rows
+     * @param {String} input - the input string
+     * @param {String} [predicate] - the property name against you want to check the match, otherwise it will search on all properties
+     */
+    this.search = function search (input, predicate) {
+      var predicateObject = tableState.search.predicateObject || {};
+      var prop = predicate ? predicate : '$';
+
+      input = ng.isString(input) ? input.trim() : input;
+      $parse(prop).assign(predicateObject, input);
+      // to avoid to filter out null value
+      if (!input) {
+        deepDelete(predicateObject, prop);
+      }
+      tableState.search.predicateObject = predicateObject;
+      tableState.pagination.start = 0;
+      return this.pipe();
+    };
+
+    /**
+     * this will chain the operations of sorting and filtering based on the current table state (sort options, filtering, ect)
+     */
+    this.pipe = function pipe () {
+      var pagination = tableState.pagination;
+      var output;
+      filtered = tableState.search.predicateObject ? filter(safeCopy, tableState.search.predicateObject) : safeCopy;
+      if (tableState.sort.predicate) {
+        filtered = orderBy(filtered, tableState.sort.predicate, tableState.sort.reverse);
+      }
+      pagination.totalItemCount = filtered.length;
+      if (pagination.number !== undefined) {
+        pagination.numberOfPages = filtered.length > 0 ? Math.ceil(filtered.length / pagination.number) : 1;
+        pagination.start = pagination.start >= filtered.length ? (pagination.numberOfPages - 1) * pagination.number : pagination.start;
+        output = filtered.slice(pagination.start, pagination.start + parseInt(pagination.number));
+      }
+      displaySetter($scope, output || filtered);
+    };
+
+    /**
+     * select a dataRow (it will add the attribute isSelected to the row object)
+     * @param {Object} row - the row to select
+     * @param {String} [mode] - "single" or "multiple" (multiple by default)
+     */
+    this.select = function select (row, mode) {
+      var rows = copyRefs(displayGetter($scope));
+      var index = rows.indexOf(row);
+      if (index !== -1) {
+        if (mode === 'single') {
+          row.isSelected = row.isSelected !== true;
+          if (lastSelected) {
+            lastSelected.isSelected = false;
+          }
+          lastSelected = row.isSelected === true ? row : undefined;
+        } else {
+          rows[index].isSelected = !rows[index].isSelected;
+        }
+      }
+    };
+
+    /**
+     * take a slice of the current sorted/filtered collection (pagination)
+     *
+     * @param {Number} start - start index of the slice
+     * @param {Number} number - the number of item in the slice
+     */
+    this.slice = function splice (start, number) {
+      tableState.pagination.start = start;
+      tableState.pagination.number = number;
+      return this.pipe();
+    };
+
+    /**
+     * return the current state of the table
+     * @returns {{sort: {}, search: {}, pagination: {start: number}}}
+     */
+    this.tableState = function getTableState () {
+      return tableState;
+    };
+
+    this.getFilteredCollection = function getFilteredCollection () {
+      return filtered || safeCopy;
+    };
+
+    /**
+     * Use a different filter function than the angular FilterFilter
+     * @param filterName the name under which the custom filter is registered
+     */
+    this.setFilterFunction = function setFilterFunction (filterName) {
+      filter = $filter(filterName);
+    };
+
+    /**
+     * Use a different function than the angular orderBy
+     * @param sortFunctionName the name under which the custom order function is registered
+     */
+    this.setSortFunction = function setSortFunction (sortFunctionName) {
+      orderBy = $filter(sortFunctionName);
+    };
+
+    /**
+     * Usually when the safe copy is updated the pipe function is called.
+     * Calling this method will prevent it, which is something required when using a custom pipe function
+     */
+    this.preventPipeOnWatch = function preventPipe () {
+      pipeAfterSafeCopy = false;
+    };
+  }])
+  .directive('stTable', function () {
+    return {
+      restrict: 'A',
+      controller: 'stTableController',
+      link: function (scope, element, attr, ctrl) {
+
+        if (attr.stSetFilter) {
+          ctrl.setFilterFunction(attr.stSetFilter);
+        }
+
+        if (attr.stSetSort) {
+          ctrl.setSortFunction(attr.stSetSort);
+        }
+      }
+    };
+  });
+
+ng.module('smart-table')
+  .directive('stSearch', ['stConfig', '$timeout','$parse', function (stConfig, $timeout, $parse) {
+    return {
+      require: '^stTable',
+      link: function (scope, element, attr, ctrl) {
+        var tableCtrl = ctrl;
+        var promise = null;
+        var throttle = attr.stDelay || stConfig.search.delay;
+        var event = attr.stInputEvent || stConfig.search.inputEvent;
+
+        attr.$observe('stSearch', function (newValue, oldValue) {
+          var input = element[0].value;
+          if (newValue !== oldValue && input) {
+            ctrl.tableState().search = {};
+            tableCtrl.search(input, newValue);
+          }
+        });
+
+        //table state -> view
+        scope.$watch(function () {
+          return ctrl.tableState().search;
+        }, function (newValue, oldValue) {
+          var predicateExpression = attr.stSearch || '$';
+          if (newValue.predicateObject && $parse(predicateExpression)(newValue.predicateObject) !== element[0].value) {
+            element[0].value = $parse(predicateExpression)(newValue.predicateObject) || '';
+          }
+        }, true);
+
+        // view -> table state
+        element.bind(event, function (evt) {
+          evt = evt.originalEvent || evt;
+          if (promise !== null) {
+            $timeout.cancel(promise);
+          }
+
+          promise = $timeout(function () {
+            tableCtrl.search(evt.target.value, attr.stSearch || '');
+            promise = null;
+          }, throttle);
+        });
+      }
+    };
+  }]);
+
+ng.module('smart-table')
+  .directive('stSelectRow', ['stConfig', function (stConfig) {
+    return {
+      restrict: 'A',
+      require: '^stTable',
+      scope: {
+        row: '=stSelectRow'
+      },
+      link: function (scope, element, attr, ctrl) {
+        var mode = attr.stSelectMode || stConfig.select.mode;
+        element.bind('click', function () {
+          scope.$apply(function () {
+            ctrl.select(scope.row, mode);
+          });
+        });
+
+        scope.$watch('row.isSelected', function (newValue) {
+          if (newValue === true) {
+            element.addClass(stConfig.select.selectedClass);
+          } else {
+            element.removeClass(stConfig.select.selectedClass);
+          }
+        });
+      }
+    };
+  }]);
+
+ng.module('smart-table')
+  .directive('stSort', ['stConfig', '$parse', '$timeout', function (stConfig, $parse, $timeout) {
+    return {
+      restrict: 'A',
+      require: '^stTable',
+      link: function (scope, element, attr, ctrl) {
+
+        var predicate = attr.stSort;
+        var getter = $parse(predicate);
+        var index = 0;
+        var classAscent = attr.stClassAscent || stConfig.sort.ascentClass;
+        var classDescent = attr.stClassDescent || stConfig.sort.descentClass;
+        var stateClasses = [classAscent, classDescent];
+        var sortDefault;
+        var skipNatural = attr.stSkipNatural !== undefined ? attr.stSkipNatural : stConfig.sort.skipNatural;
+        var promise = null;
+        var throttle = attr.stDelay || stConfig.sort.delay;
+
+        if (attr.stSortDefault) {
+          sortDefault = scope.$eval(attr.stSortDefault) !== undefined ? scope.$eval(attr.stSortDefault) : attr.stSortDefault;
+        }
+
+        //view --> table state
+        function sort () {
+          index++;
+          var func;
+          predicate = ng.isFunction(getter(scope)) || ng.isArray(getter(scope)) ? getter(scope) : attr.stSort;
+          if (index % 3 === 0 && !!skipNatural !== true) {
+            //manual reset
+            index = 0;
+            ctrl.tableState().sort = {};
+            ctrl.tableState().pagination.start = 0;
+            func = ctrl.pipe.bind(ctrl);
+          } else {
+            func = ctrl.sortBy.bind(ctrl, predicate, index % 2 === 0);
+          }
+          if (promise !== null) {
+            $timeout.cancel(promise);
+          }
+          if (throttle < 0) {
+            scope.$apply(func);
+          } else {
+            promise = $timeout(func, throttle);
+          }
+        }
+
+        element.bind('click', function sortClick () {
+          if (predicate) {
+            sort();
+          }
+        });
+
+        if (sortDefault) {
+          index = sortDefault === 'reverse' ? 1 : 0;
+          sort();
+        }
+
+        //table state --> view
+        scope.$watch(function () {
+          return ctrl.tableState().sort;
+        }, function (newValue) {
+          if (newValue.predicate !== predicate) {
+            index = 0;
+            element
+              .removeClass(classAscent)
+              .removeClass(classDescent);
+          } else {
+            index = newValue.reverse === true ? 2 : 1;
+            element
+              .removeClass(stateClasses[index % 2])
+              .addClass(stateClasses[index - 1]);
+          }
+        }, true);
+      }
+    };
+  }]);
+
+ng.module('smart-table')
+  .directive('stPagination', ['stConfig', function (stConfig) {
+    return {
+      restrict: 'EA',
+      require: '^stTable',
+      scope: {
+        stItemsByPage: '=?',
+        stDisplayedPages: '=?',
+        stPageChange: '&'
+      },
+      templateUrl: function (element, attrs) {
+        if (attrs.stTemplate) {
+          return attrs.stTemplate;
+        }
+        return stConfig.pagination.template;
+      },
+      link: function (scope, element, attrs, ctrl) {
+
+        scope.stItemsByPage = scope.stItemsByPage ? +(scope.stItemsByPage) : stConfig.pagination.itemsByPage;
+        scope.stDisplayedPages = scope.stDisplayedPages ? +(scope.stDisplayedPages) : stConfig.pagination.displayedPages;
+
+        scope.currentPage = 1;
+        scope.pages = [];
+
+        function redraw () {
+          var paginationState = ctrl.tableState().pagination;
+          var start = 1;
+          var end;
+          var i;
+          var prevPage = scope.currentPage;
+          scope.totalItemCount = paginationState.totalItemCount;
+          scope.currentPage = Math.floor(paginationState.start / paginationState.number) + 1;
+
+          start = Math.max(start, scope.currentPage - Math.abs(Math.floor(scope.stDisplayedPages / 2)));
+          end = start + scope.stDisplayedPages;
+
+          if (end > paginationState.numberOfPages) {
+            end = paginationState.numberOfPages + 1;
+            start = Math.max(1, end - scope.stDisplayedPages);
+          }
+
+          scope.pages = [];
+          scope.numPages = paginationState.numberOfPages;
+
+          for (i = start; i < end; i++) {
+            scope.pages.push(i);
+          }
+
+          if (prevPage !== scope.currentPage) {
+            scope.stPageChange({newPage: scope.currentPage});
+          }
+        }
+
+        //table state --> view
+        scope.$watch(function () {
+          return ctrl.tableState().pagination;
+        }, redraw, true);
+
+        //scope --> table state  (--> view)
+        scope.$watch('stItemsByPage', function (newValue, oldValue) {
+          if (newValue !== oldValue) {
+            scope.selectPage(1);
+          }
+        });
+
+        scope.$watch('stDisplayedPages', redraw);
+
+        //view -> table state
+        scope.selectPage = function (page) {
+          if (page > 0 && page <= scope.numPages) {
+            ctrl.slice((page - 1) * scope.stItemsByPage, scope.stItemsByPage);
+          }
+        };
+
+        if (!ctrl.tableState().pagination.number) {
+          ctrl.slice(0, scope.stItemsByPage);
+        }
+      }
+    };
+  }]);
+
+ng.module('smart-table')
+  .directive('stPipe', ['stConfig', '$timeout', function (config, $timeout) {
+    return {
+      require: 'stTable',
+      scope: {
+        stPipe: '='
+      },
+      link: {
+
+        pre: function (scope, element, attrs, ctrl) {
+
+          var pipePromise = null;
+
+          if (ng.isFunction(scope.stPipe)) {
+            ctrl.preventPipeOnWatch();
+            ctrl.pipe = function () {
+
+              if (pipePromise !== null) {
+                $timeout.cancel(pipePromise)
+              }
+
+              pipePromise = $timeout(function () {
+                scope.stPipe(ctrl.tableState(), ctrl);
+              }, config.pipe.delay);
+
+              return pipePromise;
+            }
+          }
+        },
+
+        post: function (scope, element, attrs, ctrl) {
+          ctrl.pipe();
+        }
+      }
+    };
+  }]);
+
+})(angular);
\ No newline at end of file
diff --git a/public/bower_components/angular-socket-io/socket.js b/public/bower_components/angular-socket-io/socket.js
new file mode 100644
index 0000000..649c416
--- /dev/null
+++ b/public/bower_components/angular-socket-io/socket.js
@@ -0,0 +1,103 @@
+/*
+ * @license
+ * angular-socket-io v0.7.0
+ * (c) 2014 Brian Ford http://briantford.com
+ * License: MIT
+ */
+
+angular.module('btford.socket-io', []).
+  provider('socketFactory', function () {
+
+    'use strict';
+
+    // when forwarding events, prefix the event name
+    var defaultPrefix = 'socket:',
+      ioSocket;
+
+    // expose to provider
+    this.$get = ['$rootScope', '$timeout', function ($rootScope, $timeout) {
+
+      var asyncAngularify = function (socket, callback) {
+        return callback ? function () {
+          var args = arguments;
+          $timeout(function () {
+            callback.apply(socket, args);
+          }, 0);
+        } : angular.noop;
+      };
+
+      return function socketFactory (options) {
+        options = options || {};
+        var socket = options.ioSocket || io.connect();
+        var prefix = options.prefix === undefined ? defaultPrefix : options.prefix ;
+        var defaultScope = options.scope || $rootScope;
+
+        var addListener = function (eventName, callback) {
+          socket.on(eventName, callback.__ng = asyncAngularify(socket, callback));
+        };
+
+        var addOnceListener = function (eventName, callback) {
+          socket.once(eventName, callback.__ng = asyncAngularify(socket, callback));
+        };
+
+        var wrappedSocket = {
+          on: addListener,
+          addListener: addListener,
+          once: addOnceListener,
+
+          emit: function (eventName, data, callback) {
+            var lastIndex = arguments.length - 1;
+            var callback = arguments[lastIndex];
+            if(typeof callback == 'function') {
+              callback = asyncAngularify(socket, callback);
+              arguments[lastIndex] = callback;
+            }
+            return socket.emit.apply(socket, arguments);
+          },
+
+          removeListener: function (ev, fn) {
+            if (fn && fn.__ng) {
+              arguments[1] = fn.__ng;
+            }
+            return socket.removeListener.apply(socket, arguments);
+          },
+
+          removeAllListeners: function() {
+            return socket.removeAllListeners.apply(socket, arguments);
+          },
+
+          disconnect: function (close) {
+            return socket.disconnect(close);
+          },
+
+          connect: function() {
+            return socket.connect();
+          },
+
+          // when socket.on('someEvent', fn (data) { ... }),
+          // call scope.$broadcast('someEvent', data)
+          forward: function (events, scope) {
+            if (events instanceof Array === false) {
+              events = [events];
+            }
+            if (!scope) {
+              scope = defaultScope;
+            }
+            events.forEach(function (eventName) {
+              var prefixedEvent = prefix + eventName;
+              var forwardBroadcast = asyncAngularify(socket, function () {
+                Array.prototype.unshift.call(arguments, prefixedEvent);
+                scope.$broadcast.apply(scope, arguments);
+              });
+              scope.$on('$destroy', function () {
+                socket.removeListener(eventName, forwardBroadcast);
+              });
+              socket.on(eventName, forwardBroadcast);
+            });
+          }
+        };
+
+        return wrappedSocket;
+      };
+    }];
+  });
diff --git a/public/bower_components/angular-toastr/angular-toastr.css b/public/bower_components/angular-toastr/angular-toastr.css
new file mode 100644
index 0000000..5b6f05f
--- /dev/null
+++ b/public/bower_components/angular-toastr/angular-toastr.css
@@ -0,0 +1,203 @@
+.toast-title {
+  font-weight: bold;
+}
+.toast-message {
+  word-wrap: break-word;
+}
+.toast-message a,
+.toast-message label {
+  color: #ffffff;
+}
+.toast-message a:hover {
+  color: #cccccc;
+  text-decoration: none;
+}
+.toast-close-button {
+  position: relative;
+  right: -0.3em;
+  top: -0.3em;
+  float: right;
+  font-size: 20px;
+  font-weight: bold;
+  color: #ffffff;
+  -webkit-text-shadow: 0 1px 0 #ffffff;
+  text-shadow: 0 1px 0 #ffffff;
+  opacity: 0.8;
+}
+.toast-close-button:hover,
+.toast-close-button:focus {
+  color: #000000;
+  text-decoration: none;
+  cursor: pointer;
+  opacity: 0.4;
+}
+/*Additional properties for button version
+ iOS requires the button element instead of an anchor tag.
+ If you want the anchor version, it requires `href="#"`.*/
+button.toast-close-button {
+  padding: 0;
+  cursor: pointer;
+  background: transparent;
+  border: 0;
+  -webkit-appearance: none;
+}
+.toast-top-center {
+  top: 0;
+  right: 0;
+  width: 100%;
+}
+.toast-bottom-center {
+  bottom: 0;
+  right: 0;
+  width: 100%;
+}
+.toast-top-full-width {
+  top: 0;
+  right: 0;
+  width: 100%;
+}
+.toast-bottom-full-width {
+  bottom: 0;
+  right: 0;
+  width: 100%;
+}
+.toast-top-left {
+  top: 12px;
+  left: 12px;
+}
+.toast-top-right {
+  top: 12px;
+  right: 12px;
+}
+.toast-bottom-right {
+  right: 12px;
+  bottom: 12px;
+}
+.toast-bottom-left {
+  bottom: 12px;
+  left: 12px;
+}
+#toast-container {
+  position: fixed;
+  z-index: 999999;
+  /*overrides*/
+}
+#toast-container * {
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+}
+#toast-container > div {
+  position: relative;
+  overflow: hidden;
+  margin: 0 0 6px;
+  padding: 15px 15px 15px 50px;
+  width: 300px;
+  -moz-border-radius: 3px 3px 3px 3px;
+  -webkit-border-radius: 3px 3px 3px 3px;
+  border-radius: 3px 3px 3px 3px;
+  background-position: 15px center;
+  background-repeat: no-repeat;
+  -moz-box-shadow: 0 0 12px #999999;
+  -webkit-box-shadow: 0 0 12px #999999;
+  box-shadow: 0 0 12px #999999;
+  color: #ffffff;
+  opacity: 0.8;
+}
+#toast-container > :hover {
+  -moz-box-shadow: 0 0 12px #000000;
+  -webkit-box-shadow: 0 0 12px #000000;
+  box-shadow: 0 0 12px #000000;
+  opacity: 1;
+  cursor: pointer;
+}
+#toast-container > .toast-info {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=") !important;
+}
+#toast-container > .toast-error {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=") !important;
+}
+#toast-container > .toast-success {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==") !important;
+}
+#toast-container > .toast-warning {
+  background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=") !important;
+}
+#toast-container.toast-top-center > div,
+#toast-container.toast-bottom-center > div {
+  width: 300px;
+  margin: auto;
+}
+#toast-container.toast-top-full-width > div,
+#toast-container.toast-bottom-full-width > div {
+  width: 96%;
+  margin: auto;
+}
+.toast {
+  background-color: #030303;
+}
+.toast-success {
+  background-color: #51a351;
+}
+.toast-error {
+  background-color: #bd362f;
+}
+.toast-info {
+  background-color: #2f96b4;
+}
+.toast-warning {
+  background-color: #f89406;
+}
+.toast-progress {
+  position: absolute;
+  left: 0;
+  bottom: 0;
+  height: 4px;
+  background-color: #000000;
+  opacity: 0.4;
+}
+/*Animations*/
+.toast {
+  opacity: 1 !important;
+}
+.toast.ng-enter {
+  opacity: 0 !important;
+  transition: opacity .3s linear;
+}
+.toast.ng-enter.ng-enter-active {
+  opacity: 1 !important;
+}
+.toast.ng-leave {
+  opacity: 1;
+  transition: opacity .3s linear;
+}
+.toast.ng-leave.ng-leave-active {
+  opacity: 0 !important;
+}
+/*Responsive Design*/
+@media all and (max-width: 240px) {
+  #toast-container > div {
+    padding: 8px 8px 8px 50px;
+    width: 11em;
+  }
+  #toast-container .toast-close-button {
+    right: -0.2em;
+    top: -0.2em;
+  }
+}
+@media all and (min-width: 241px) and (max-width: 480px) {
+  #toast-container > div {
+    padding: 8px 8px 8px 50px;
+    width: 18em;
+  }
+  #toast-container .toast-close-button {
+    right: -0.2em;
+    top: -0.2em;
+  }
+}
+@media all and (min-width: 481px) and (max-width: 768px) {
+  #toast-container > div {
+    padding: 15px 15px 15px 50px;
+    width: 25em;
+  }
+}
diff --git a/public/bower_components/angular-toastr/angular-toastr.tpls.js b/public/bower_components/angular-toastr/angular-toastr.tpls.js
new file mode 100644
index 0000000..640c1f2
--- /dev/null
+++ b/public/bower_components/angular-toastr/angular-toastr.tpls.js
@@ -0,0 +1,485 @@
+(function() {
+  'use strict';
+
+  angular.module('toastr', [])
+    .factory('toastr', toastr);
+
+  toastr.$inject = ['$animate', '$injector', '$document', '$rootScope', '$sce', 'toastrConfig', '$q'];
+
+  function toastr($animate, $injector, $document, $rootScope, $sce, toastrConfig, $q) {
+    var container;
+    var index = 0;
+    var toasts = [];
+
+    var previousToastMessage = '';
+    var openToasts = {};
+
+    var containerDefer = $q.defer();
+
+    var toast = {
+      clear: clear,
+      error: error,
+      info: info,
+      remove: remove,
+      success: success,
+      warning: warning
+    };
+
+    return toast;
+
+    /* Public API */
+    function clear(toast) {
+      // Bit of a hack, I will remove this soon with a BC
+      if (arguments.length === 1 && !toast) { return; }
+
+      if (toast) {
+        remove(toast.toastId);
+      } else {
+        for (var i = 0; i < toasts.length; i++) {
+          remove(toasts[i].toastId);
+        }
+      }
+    }
+
+    function error(message, title, optionsOverride) {
+      var type = _getOptions().iconClasses.error;
+      return _buildNotification(type, message, title, optionsOverride);
+    }
+
+    function info(message, title, optionsOverride) {
+      var type = _getOptions().iconClasses.info;
+      return _buildNotification(type, message, title, optionsOverride);
+    }
+
+    function success(message, title, optionsOverride) {
+      var type = _getOptions().iconClasses.success;
+      return _buildNotification(type, message, title, optionsOverride);
+    }
+
+    function warning(message, title, optionsOverride) {
+      var type = _getOptions().iconClasses.warning;
+      return _buildNotification(type, message, title, optionsOverride);
+    }
+
+    function remove(toastId, wasClicked) {
+      var toast = findToast(toastId);
+
+      if (toast && ! toast.deleting) { // Avoid clicking when fading out
+        toast.deleting = true;
+        toast.isOpened = false;
+        $animate.leave(toast.el).then(function() {
+          if (toast.scope.options.onHidden) {
+            toast.scope.options.onHidden(wasClicked);
+          }
+          toast.scope.$destroy();
+          var index = toasts.indexOf(toast);
+          delete openToasts[toast.scope.message];
+          toasts.splice(index, 1);
+          var maxOpened = toastrConfig.maxOpened;
+          if (maxOpened && toasts.length >= maxOpened) {
+            toasts[maxOpened - 1].open.resolve();
+          }
+          if (lastToast()) {
+            container.remove();
+            container = null;
+            containerDefer = $q.defer();
+          }
+        });
+      }
+
+      function findToast(toastId) {
+        for (var i = 0; i < toasts.length; i++) {
+          if (toasts[i].toastId === toastId) {
+            return toasts[i];
+          }
+        }
+      }
+
+      function lastToast() {
+        return !toasts.length;
+      }
+    }
+
+    /* Internal functions */
+    function _buildNotification(type, message, title, optionsOverride)
+    {
+      if (angular.isObject(title)) {
+        optionsOverride = title;
+        title = null;
+      }
+
+      return _notify({
+        iconClass: type,
+        message: message,
+        optionsOverride: optionsOverride,
+        title: title
+      });
+    }
+
+    function _getOptions() {
+      return angular.extend({}, toastrConfig);
+    }
+
+    function _createOrGetContainer(options) {
+      if(container) { return containerDefer.promise; }
+
+      container = angular.element('<div></div>');
+      container.attr('id', options.containerId);
+      container.addClass(options.positionClass);
+      container.css({'pointer-events': 'auto'});
+
+      var target = angular.element(document.querySelector(options.target));
+
+      if ( ! target || ! target.length) {
+        throw 'Target for toasts doesn\'t exist';
+      }
+
+      $animate.enter(container, target).then(function() {
+        containerDefer.resolve();
+      });
+
+      return containerDefer.promise;
+    }
+
+    function _notify(map) {
+      var options = _getOptions();
+
+      if (shouldExit()) { return; }
+
+      var newToast = createToast();
+
+      toasts.push(newToast);
+
+      if (ifMaxOpenedAndAutoDismiss()) {
+        var oldToasts = toasts.slice(0, (toasts.length - options.maxOpened));
+        for (var i = 0, len = oldToasts.length; i < len; i++) {
+          remove(oldToasts[i].toastId);
+        }
+      }
+
+      if (maxOpenedNotReached()) {
+        newToast.open.resolve();
+      }
+
+      newToast.open.promise.then(function() {
+        _createOrGetContainer(options).then(function() {
+          newToast.isOpened = true;
+          if (options.newestOnTop) {
+            $animate.enter(newToast.el, container).then(function() {
+              newToast.scope.init();
+            });
+          } else {
+            var sibling = container[0].lastChild ? angular.element(container[0].lastChild) : null;
+            $animate.enter(newToast.el, container, sibling).then(function() {
+              newToast.scope.init();
+            });
+          }
+        });
+      });
+
+      return newToast;
+
+      function ifMaxOpenedAndAutoDismiss() {
+        return options.autoDismiss && options.maxOpened && toasts.length > options.maxOpened;
+      }
+
+      function createScope(toast, map, options) {
+        if (options.allowHtml) {
+          toast.scope.allowHtml = true;
+          toast.scope.title = $sce.trustAsHtml(map.title);
+          toast.scope.message = $sce.trustAsHtml(map.message);
+        } else {
+          toast.scope.title = map.title;
+          toast.scope.message = map.message;
+        }
+
+        toast.scope.toastType = toast.iconClass;
+        toast.scope.toastId = toast.toastId;
+        toast.scope.extraData = options.extraData;
+
+        toast.scope.options = {
+          extendedTimeOut: options.extendedTimeOut,
+          messageClass: options.messageClass,
+          onHidden: options.onHidden,
+          onShown: options.onShown,
+          onTap: options.onTap,
+          progressBar: options.progressBar,
+          tapToDismiss: options.tapToDismiss,
+          timeOut: options.timeOut,
+          titleClass: options.titleClass,
+          toastClass: options.toastClass
+        };
+
+        if (options.closeButton) {
+          toast.scope.options.closeHtml = options.closeHtml;
+        }
+      }
+
+      function createToast() {
+        var newToast = {
+          toastId: index++,
+          isOpened: false,
+          scope: $rootScope.$new(),
+          open: $q.defer()
+        };
+        newToast.iconClass = map.iconClass;
+        if (map.optionsOverride) {
+          angular.extend(options, cleanOptionsOverride(map.optionsOverride));
+          newToast.iconClass = map.optionsOverride.iconClass || newToast.iconClass;
+        }
+
+        createScope(newToast, map, options);
+
+        newToast.el = createToastEl(newToast.scope);
+
+        return newToast;
+
+        function cleanOptionsOverride(options) {
+          var badOptions = ['containerId', 'iconClasses', 'maxOpened', 'newestOnTop',
+                            'positionClass', 'preventDuplicates', 'preventOpenDuplicates', 'templates'];
+          for (var i = 0, l = badOptions.length; i < l; i++) {
+            delete options[badOptions[i]];
+          }
+
+          return options;
+        }
+      }
+
+      function createToastEl(scope) {
+        var angularDomEl = angular.element('<div toast></div>'),
+          $compile = $injector.get('$compile');
+        return $compile(angularDomEl)(scope);
+      }
+
+      function maxOpenedNotReached() {
+        return options.maxOpened && toasts.length <= options.maxOpened || !options.maxOpened;
+      }
+
+      function shouldExit() {
+        var isDuplicateOfLast = options.preventDuplicates && map.message === previousToastMessage;
+        var isDuplicateOpen = options.preventOpenDuplicates && openToasts[map.message];
+
+        if (isDuplicateOfLast || isDuplicateOpen) {
+          return true;
+        }
+
+        previousToastMessage = map.message;
+        openToasts[map.message] = true;
+
+        return false;
+      }
+    }
+  }
+}());
+
+(function() {
+  'use strict';
+
+  angular.module('toastr')
+    .constant('toastrConfig', {
+      allowHtml: false,
+      autoDismiss: false,
+      closeButton: false,
+      closeHtml: '<button>&times;</button>',
+      containerId: 'toast-container',
+      extendedTimeOut: 1000,
+      iconClasses: {
+        error: 'toast-error',
+        info: 'toast-info',
+        success: 'toast-success',
+        warning: 'toast-warning'
+      },
+      maxOpened: 0,
+      messageClass: 'toast-message',
+      newestOnTop: true,
+      onHidden: null,
+      onShown: null,
+      onTap: null,
+      positionClass: 'toast-top-right',
+      preventDuplicates: false,
+      preventOpenDuplicates: false,
+      progressBar: false,
+      tapToDismiss: true,
+      target: 'body',
+      templates: {
+        toast: 'directives/toast/toast.html',
+        progressbar: 'directives/progressbar/progressbar.html'
+      },
+      timeOut: 5000,
+      titleClass: 'toast-title',
+      toastClass: 'toast'
+    });
+}());
+
+(function() {
+  'use strict';
+
+  angular.module('toastr')
+    .directive('progressBar', progressBar);
+
+  progressBar.$inject = ['toastrConfig'];
+
+  function progressBar(toastrConfig) {
+    return {
+      replace: true,
+      require: '^toast',
+      templateUrl: function() {
+        return toastrConfig.templates.progressbar;
+      },
+      link: linkFunction
+    };
+
+    function linkFunction(scope, element, attrs, toastCtrl) {
+      var intervalId, currentTimeOut, hideTime;
+
+      toastCtrl.progressBar = scope;
+
+      scope.start = function(duration) {
+        if (intervalId) {
+          clearInterval(intervalId);
+        }
+
+        currentTimeOut = parseFloat(duration);
+        hideTime = new Date().getTime() + currentTimeOut;
+        intervalId = setInterval(updateProgress, 10);
+      };
+
+      scope.stop = function() {
+        if (intervalId) {
+          clearInterval(intervalId);
+        }
+      };
+
+      function updateProgress() {
+        var percentage = ((hideTime - (new Date().getTime())) / currentTimeOut) * 100;
+        element.css('width', percentage + '%');
+      }
+
+      scope.$on('$destroy', function() {
+        // Failsafe stop
+        clearInterval(intervalId);
+      });
+    }
+  }
+}());
+
+(function() {
+  'use strict';
+
+  angular.module('toastr')
+    .controller('ToastController', ToastController);
+
+  function ToastController() {
+    this.progressBar = null;
+
+    this.startProgressBar = function(duration) {
+      if (this.progressBar) {
+        this.progressBar.start(duration);
+      }
+    };
+
+    this.stopProgressBar = function() {
+      if (this.progressBar) {
+        this.progressBar.stop();
+      }
+    };
+  }
+}());
+
+(function() {
+  'use strict';
+
+  angular.module('toastr')
+    .directive('toast', toast);
+
+  toast.$inject = ['$injector', '$interval', 'toastrConfig', 'toastr'];
+
+  function toast($injector, $interval, toastrConfig, toastr) {
+    return {
+      replace: true,
+      templateUrl: function() {
+        return toastrConfig.templates.toast;
+      },
+      controller: 'ToastController',
+      link: toastLinkFunction
+    };
+
+    function toastLinkFunction(scope, element, attrs, toastCtrl) {
+      var timeout;
+
+      scope.toastClass = scope.options.toastClass;
+      scope.titleClass = scope.options.titleClass;
+      scope.messageClass = scope.options.messageClass;
+      scope.progressBar = scope.options.progressBar;
+
+      if (wantsCloseButton()) {
+        var button = angular.element(scope.options.closeHtml),
+          $compile = $injector.get('$compile');
+        button.addClass('toast-close-button');
+        button.attr('ng-click', 'close(true, $event)');
+        $compile(button)(scope);
+        element.prepend(button);
+      }
+
+      scope.init = function() {
+        if (scope.options.timeOut) {
+          timeout = createTimeout(scope.options.timeOut);
+        }
+        if (scope.options.onShown) {
+          scope.options.onShown();
+        }
+      };
+
+      element.on('mouseenter', function() {
+        hideAndStopProgressBar();
+        if (timeout) {
+          $interval.cancel(timeout);
+        }
+      });
+
+      scope.tapToast = function () {
+        if (angular.isFunction(scope.options.onTap)) {
+          scope.options.onTap();
+        }
+        if (scope.options.tapToDismiss) {
+          scope.close(true);
+        }
+      };
+
+      scope.close = function (wasClicked, $event) {
+        if ($event && angular.isFunction($event.stopPropagation)) {
+          $event.stopPropagation();
+        }
+        toastr.remove(scope.toastId, wasClicked);
+      };
+
+      element.on('mouseleave', function() {
+        if (scope.options.timeOut === 0 && scope.options.extendedTimeOut === 0) { return; }
+        scope.$apply(function() {
+          scope.progressBar = scope.options.progressBar;
+        });
+        timeout = createTimeout(scope.options.extendedTimeOut);
+      });
+
+      function createTimeout(time) {
+        toastCtrl.startProgressBar(time);
+        return $interval(function() {
+          toastCtrl.stopProgressBar();
+          toastr.remove(scope.toastId);
+        }, time, 1);
+      }
+
+      function hideAndStopProgressBar() {
+        scope.progressBar = false;
+        toastCtrl.stopProgressBar();
+      }
+
+      function wantsCloseButton() {
+        return scope.options.closeHtml;
+      }
+    }
+  }
+}());
+
+angular.module("toastr").run(["$templateCache", function($templateCache) {$templateCache.put("directives/progressbar/progressbar.html","<div class=\"toast-progress\"></div>\n");
+$templateCache.put("directives/toast/toast.html","<div class=\"{{toastClass}} {{toastType}}\" ng-click=\"tapToast()\">\n  <div ng-switch on=\"allowHtml\">\n    <div ng-switch-default ng-if=\"title\" class=\"{{titleClass}}\" aria-label=\"{{title}}\">{{title}}</div>\n    <div ng-switch-default class=\"{{messageClass}}\" aria-label=\"{{message}}\">{{message}}</div>\n    <div ng-switch-when=\"true\" ng-if=\"title\" class=\"{{titleClass}}\" ng-bind-html=\"title\"></div>\n    <div ng-switch-when=\"true\" class=\"{{messageClass}}\" ng-bind-html=\"message\"></div>\n  </div>\n  <progress-bar ng-if=\"progressBar\"></progress-bar>\n</div>\n");}]);
\ No newline at end of file
diff --git a/public/bower_components/angular-touch/angular-touch.js b/public/bower_components/angular-touch/angular-touch.js
new file mode 100644
index 0000000..f622e94
--- /dev/null
+++ b/public/bower_components/angular-touch/angular-touch.js
@@ -0,0 +1,628 @@
+/**
+ * @license AngularJS v1.4.8
+ * (c) 2010-2015 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, angular, undefined) {'use strict';
+
+/**
+ * @ngdoc module
+ * @name ngTouch
+ * @description
+ *
+ * # ngTouch
+ *
+ * The `ngTouch` module provides touch events and other helpers for touch-enabled devices.
+ * The implementation is based on jQuery Mobile touch event handling
+ * ([jquerymobile.com](http://jquerymobile.com/)).
+ *
+ *
+ * See {@link ngTouch.$swipe `$swipe`} for usage.
+ *
+ * <div doc-module-components="ngTouch"></div>
+ *
+ */
+
+// define ngTouch module
+/* global -ngTouch */
+var ngTouch = angular.module('ngTouch', []);
+
+function nodeName_(element) {
+  return angular.lowercase(element.nodeName || (element[0] && element[0].nodeName));
+}
+
+/* global ngTouch: false */
+
+    /**
+     * @ngdoc service
+     * @name $swipe
+     *
+     * @description
+     * The `$swipe` service is a service that abstracts the messier details of hold-and-drag swipe
+     * behavior, to make implementing swipe-related directives more convenient.
+     *
+     * Requires the {@link ngTouch `ngTouch`} module to be installed.
+     *
+     * `$swipe` is used by the `ngSwipeLeft` and `ngSwipeRight` directives in `ngTouch`, and by
+     * `ngCarousel` in a separate component.
+     *
+     * # Usage
+     * The `$swipe` service is an object with a single method: `bind`. `bind` takes an element
+     * which is to be watched for swipes, and an object with four handler functions. See the
+     * documentation for `bind` below.
+     */
+
+ngTouch.factory('$swipe', [function() {
+  // The total distance in any direction before we make the call on swipe vs. scroll.
+  var MOVE_BUFFER_RADIUS = 10;
+
+  var POINTER_EVENTS = {
+    'mouse': {
+      start: 'mousedown',
+      move: 'mousemove',
+      end: 'mouseup'
+    },
+    'touch': {
+      start: 'touchstart',
+      move: 'touchmove',
+      end: 'touchend',
+      cancel: 'touchcancel'
+    }
+  };
+
+  function getCoordinates(event) {
+    var originalEvent = event.originalEvent || event;
+    var touches = originalEvent.touches && originalEvent.touches.length ? originalEvent.touches : [originalEvent];
+    var e = (originalEvent.changedTouches && originalEvent.changedTouches[0]) || touches[0];
+
+    return {
+      x: e.clientX,
+      y: e.clientY
+    };
+  }
+
+  function getEvents(pointerTypes, eventType) {
+    var res = [];
+    angular.forEach(pointerTypes, function(pointerType) {
+      var eventName = POINTER_EVENTS[pointerType][eventType];
+      if (eventName) {
+        res.push(eventName);
+      }
+    });
+    return res.join(' ');
+  }
+
+  return {
+    /**
+     * @ngdoc method
+     * @name $swipe#bind
+     *
+     * @description
+     * The main method of `$swipe`. It takes an element to be watched for swipe motions, and an
+     * object containing event handlers.
+     * The pointer types that should be used can be specified via the optional
+     * third argument, which is an array of strings `'mouse'` and `'touch'`. By default,
+     * `$swipe` will listen for `mouse` and `touch` events.
+     *
+     * The four events are `start`, `move`, `end`, and `cancel`. `start`, `move`, and `end`
+     * receive as a parameter a coordinates object of the form `{ x: 150, y: 310 }` and the raw
+     * `event`. `cancel` receives the raw `event` as its single parameter.
+     *
+     * `start` is called on either `mousedown` or `touchstart`. After this event, `$swipe` is
+     * watching for `touchmove` or `mousemove` events. These events are ignored until the total
+     * distance moved in either dimension exceeds a small threshold.
+     *
+     * Once this threshold is exceeded, either the horizontal or vertical delta is greater.
+     * - If the horizontal distance is greater, this is a swipe and `move` and `end` events follow.
+     * - If the vertical distance is greater, this is a scroll, and we let the browser take over.
+     *   A `cancel` event is sent.
+     *
+     * `move` is called on `mousemove` and `touchmove` after the above logic has determined that
+     * a swipe is in progress.
+     *
+     * `end` is called when a swipe is successfully completed with a `touchend` or `mouseup`.
+     *
+     * `cancel` is called either on a `touchcancel` from the browser, or when we begin scrolling
+     * as described above.
+     *
+     */
+    bind: function(element, eventHandlers, pointerTypes) {
+      // Absolute total movement, used to control swipe vs. scroll.
+      var totalX, totalY;
+      // Coordinates of the start position.
+      var startCoords;
+      // Last event's position.
+      var lastPos;
+      // Whether a swipe is active.
+      var active = false;
+
+      pointerTypes = pointerTypes || ['mouse', 'touch'];
+      element.on(getEvents(pointerTypes, 'start'), function(event) {
+        startCoords = getCoordinates(event);
+        active = true;
+        totalX = 0;
+        totalY = 0;
+        lastPos = startCoords;
+        eventHandlers['start'] && eventHandlers['start'](startCoords, event);
+      });
+      var events = getEvents(pointerTypes, 'cancel');
+      if (events) {
+        element.on(events, function(event) {
+          active = false;
+          eventHandlers['cancel'] && eventHandlers['cancel'](event);
+        });
+      }
+
+      element.on(getEvents(pointerTypes, 'move'), function(event) {
+        if (!active) return;
+
+        // Android will send a touchcancel if it thinks we're starting to scroll.
+        // So when the total distance (+ or - or both) exceeds 10px in either direction,
+        // we either:
+        // - On totalX > totalY, we send preventDefault() and treat this as a swipe.
+        // - On totalY > totalX, we let the browser handle it as a scroll.
+
+        if (!startCoords) return;
+        var coords = getCoordinates(event);
+
+        totalX += Math.abs(coords.x - lastPos.x);
+        totalY += Math.abs(coords.y - lastPos.y);
+
+        lastPos = coords;
+
+        if (totalX < MOVE_BUFFER_RADIUS && totalY < MOVE_BUFFER_RADIUS) {
+          return;
+        }
+
+        // One of totalX or totalY has exceeded the buffer, so decide on swipe vs. scroll.
+        if (totalY > totalX) {
+          // Allow native scrolling to take over.
+          active = false;
+          eventHandlers['cancel'] && eventHandlers['cancel'](event);
+          return;
+        } else {
+          // Prevent the browser from scrolling.
+          event.preventDefault();
+          eventHandlers['move'] && eventHandlers['move'](coords, event);
+        }
+      });
+
+      element.on(getEvents(pointerTypes, 'end'), function(event) {
+        if (!active) return;
+        active = false;
+        eventHandlers['end'] && eventHandlers['end'](getCoordinates(event), event);
+      });
+    }
+  };
+}]);
+
+/* global ngTouch: false,
+  nodeName_: false
+*/
+
+/**
+ * @ngdoc directive
+ * @name ngClick
+ *
+ * @description
+ * A more powerful replacement for the default ngClick designed to be used on touchscreen
+ * devices. Most mobile browsers wait about 300ms after a tap-and-release before sending
+ * the click event. This version handles them immediately, and then prevents the
+ * following click event from propagating.
+ *
+ * Requires the {@link ngTouch `ngTouch`} module to be installed.
+ *
+ * This directive can fall back to using an ordinary click event, and so works on desktop
+ * browsers as well as mobile.
+ *
+ * This directive also sets the CSS class `ng-click-active` while the element is being held
+ * down (by a mouse click or touch) so you can restyle the depressed element if you wish.
+ *
+ * @element ANY
+ * @param {expression} ngClick {@link guide/expression Expression} to evaluate
+ * upon tap. (Event object is available as `$event`)
+ *
+ * @example
+    <example module="ngClickExample" deps="angular-touch.js">
+      <file name="index.html">
+        <button ng-click="count = count + 1" ng-init="count=0">
+          Increment
+        </button>
+        count: {{ count }}
+      </file>
+      <file name="script.js">
+        angular.module('ngClickExample', ['ngTouch']);
+      </file>
+    </example>
+ */
+
+ngTouch.config(['$provide', function($provide) {
+  $provide.decorator('ngClickDirective', ['$delegate', function($delegate) {
+    // drop the default ngClick directive
+    $delegate.shift();
+    return $delegate;
+  }]);
+}]);
+
+ngTouch.directive('ngClick', ['$parse', '$timeout', '$rootElement',
+    function($parse, $timeout, $rootElement) {
+  var TAP_DURATION = 750; // Shorter than 750ms is a tap, longer is a taphold or drag.
+  var MOVE_TOLERANCE = 12; // 12px seems to work in most mobile browsers.
+  var PREVENT_DURATION = 2500; // 2.5 seconds maximum from preventGhostClick call to click
+  var CLICKBUSTER_THRESHOLD = 25; // 25 pixels in any dimension is the limit for busting clicks.
+
+  var ACTIVE_CLASS_NAME = 'ng-click-active';
+  var lastPreventedTime;
+  var touchCoordinates;
+  var lastLabelClickCoordinates;
+
+
+  // TAP EVENTS AND GHOST CLICKS
+  //
+  // Why tap events?
+  // Mobile browsers detect a tap, then wait a moment (usually ~300ms) to see if you're
+  // double-tapping, and then fire a click event.
+  //
+  // This delay sucks and makes mobile apps feel unresponsive.
+  // So we detect touchstart, touchcancel and touchend ourselves and determine when
+  // the user has tapped on something.
+  //
+  // What happens when the browser then generates a click event?
+  // The browser, of course, also detects the tap and fires a click after a delay. This results in
+  // tapping/clicking twice. We do "clickbusting" to prevent it.
+  //
+  // How does it work?
+  // We attach global touchstart and click handlers, that run during the capture (early) phase.
+  // So the sequence for a tap is:
+  // - global touchstart: Sets an "allowable region" at the point touched.
+  // - element's touchstart: Starts a touch
+  // (- touchcancel ends the touch, no click follows)
+  // - element's touchend: Determines if the tap is valid (didn't move too far away, didn't hold
+  //   too long) and fires the user's tap handler. The touchend also calls preventGhostClick().
+  // - preventGhostClick() removes the allowable region the global touchstart created.
+  // - The browser generates a click event.
+  // - The global click handler catches the click, and checks whether it was in an allowable region.
+  //     - If preventGhostClick was called, the region will have been removed, the click is busted.
+  //     - If the region is still there, the click proceeds normally. Therefore clicks on links and
+  //       other elements without ngTap on them work normally.
+  //
+  // This is an ugly, terrible hack!
+  // Yeah, tell me about it. The alternatives are using the slow click events, or making our users
+  // deal with the ghost clicks, so I consider this the least of evils. Fortunately Angular
+  // encapsulates this ugly logic away from the user.
+  //
+  // Why not just put click handlers on the element?
+  // We do that too, just to be sure. If the tap event caused the DOM to change,
+  // it is possible another element is now in that position. To take account for these possibly
+  // distinct elements, the handlers are global and care only about coordinates.
+
+  // Checks if the coordinates are close enough to be within the region.
+  function hit(x1, y1, x2, y2) {
+    return Math.abs(x1 - x2) < CLICKBUSTER_THRESHOLD && Math.abs(y1 - y2) < CLICKBUSTER_THRESHOLD;
+  }
+
+  // Checks a list of allowable regions against a click location.
+  // Returns true if the click should be allowed.
+  // Splices out the allowable region from the list after it has been used.
+  function checkAllowableRegions(touchCoordinates, x, y) {
+    for (var i = 0; i < touchCoordinates.length; i += 2) {
+      if (hit(touchCoordinates[i], touchCoordinates[i + 1], x, y)) {
+        touchCoordinates.splice(i, i + 2);
+        return true; // allowable region
+      }
+    }
+    return false; // No allowable region; bust it.
+  }
+
+  // Global click handler that prevents the click if it's in a bustable zone and preventGhostClick
+  // was called recently.
+  function onClick(event) {
+    if (Date.now() - lastPreventedTime > PREVENT_DURATION) {
+      return; // Too old.
+    }
+
+    var touches = event.touches && event.touches.length ? event.touches : [event];
+    var x = touches[0].clientX;
+    var y = touches[0].clientY;
+    // Work around desktop Webkit quirk where clicking a label will fire two clicks (on the label
+    // and on the input element). Depending on the exact browser, this second click we don't want
+    // to bust has either (0,0), negative coordinates, or coordinates equal to triggering label
+    // click event
+    if (x < 1 && y < 1) {
+      return; // offscreen
+    }
+    if (lastLabelClickCoordinates &&
+        lastLabelClickCoordinates[0] === x && lastLabelClickCoordinates[1] === y) {
+      return; // input click triggered by label click
+    }
+    // reset label click coordinates on first subsequent click
+    if (lastLabelClickCoordinates) {
+      lastLabelClickCoordinates = null;
+    }
+    // remember label click coordinates to prevent click busting of trigger click event on input
+    if (nodeName_(event.target) === 'label') {
+      lastLabelClickCoordinates = [x, y];
+    }
+
+    // Look for an allowable region containing this click.
+    // If we find one, that means it was created by touchstart and not removed by
+    // preventGhostClick, so we don't bust it.
+    if (checkAllowableRegions(touchCoordinates, x, y)) {
+      return;
+    }
+
+    // If we didn't find an allowable region, bust the click.
+    event.stopPropagation();
+    event.preventDefault();
+
+    // Blur focused form elements
+    event.target && event.target.blur && event.target.blur();
+  }
+
+
+  // Global touchstart handler that creates an allowable region for a click event.
+  // This allowable region can be removed by preventGhostClick if we want to bust it.
+  function onTouchStart(event) {
+    var touches = event.touches && event.touches.length ? event.touches : [event];
+    var x = touches[0].clientX;
+    var y = touches[0].clientY;
+    touchCoordinates.push(x, y);
+
+    $timeout(function() {
+      // Remove the allowable region.
+      for (var i = 0; i < touchCoordinates.length; i += 2) {
+        if (touchCoordinates[i] == x && touchCoordinates[i + 1] == y) {
+          touchCoordinates.splice(i, i + 2);
+          return;
+        }
+      }
+    }, PREVENT_DURATION, false);
+  }
+
+  // On the first call, attaches some event handlers. Then whenever it gets called, it creates a
+  // zone around the touchstart where clicks will get busted.
+  function preventGhostClick(x, y) {
+    if (!touchCoordinates) {
+      $rootElement[0].addEventListener('click', onClick, true);
+      $rootElement[0].addEventListener('touchstart', onTouchStart, true);
+      touchCoordinates = [];
+    }
+
+    lastPreventedTime = Date.now();
+
+    checkAllowableRegions(touchCoordinates, x, y);
+  }
+
+  // Actual linking function.
+  return function(scope, element, attr) {
+    var clickHandler = $parse(attr.ngClick),
+        tapping = false,
+        tapElement,  // Used to blur the element after a tap.
+        startTime,   // Used to check if the tap was held too long.
+        touchStartX,
+        touchStartY;
+
+    function resetState() {
+      tapping = false;
+      element.removeClass(ACTIVE_CLASS_NAME);
+    }
+
+    element.on('touchstart', function(event) {
+      tapping = true;
+      tapElement = event.target ? event.target : event.srcElement; // IE uses srcElement.
+      // Hack for Safari, which can target text nodes instead of containers.
+      if (tapElement.nodeType == 3) {
+        tapElement = tapElement.parentNode;
+      }
+
+      element.addClass(ACTIVE_CLASS_NAME);
+
+      startTime = Date.now();
+
+      // Use jQuery originalEvent
+      var originalEvent = event.originalEvent || event;
+      var touches = originalEvent.touches && originalEvent.touches.length ? originalEvent.touches : [originalEvent];
+      var e = touches[0];
+      touchStartX = e.clientX;
+      touchStartY = e.clientY;
+    });
+
+    element.on('touchcancel', function(event) {
+      resetState();
+    });
+
+    element.on('touchend', function(event) {
+      var diff = Date.now() - startTime;
+
+      // Use jQuery originalEvent
+      var originalEvent = event.originalEvent || event;
+      var touches = (originalEvent.changedTouches && originalEvent.changedTouches.length) ?
+          originalEvent.changedTouches :
+          ((originalEvent.touches && originalEvent.touches.length) ? originalEvent.touches : [originalEvent]);
+      var e = touches[0];
+      var x = e.clientX;
+      var y = e.clientY;
+      var dist = Math.sqrt(Math.pow(x - touchStartX, 2) + Math.pow(y - touchStartY, 2));
+
+      if (tapping && diff < TAP_DURATION && dist < MOVE_TOLERANCE) {
+        // Call preventGhostClick so the clickbuster will catch the corresponding click.
+        preventGhostClick(x, y);
+
+        // Blur the focused element (the button, probably) before firing the callback.
+        // This doesn't work perfectly on Android Chrome, but seems to work elsewhere.
+        // I couldn't get anything to work reliably on Android Chrome.
+        if (tapElement) {
+          tapElement.blur();
+        }
+
+        if (!angular.isDefined(attr.disabled) || attr.disabled === false) {
+          element.triggerHandler('click', [event]);
+        }
+      }
+
+      resetState();
+    });
+
+    // Hack for iOS Safari's benefit. It goes searching for onclick handlers and is liable to click
+    // something else nearby.
+    element.onclick = function(event) { };
+
+    // Actual click handler.
+    // There are three different kinds of clicks, only two of which reach this point.
+    // - On desktop browsers without touch events, their clicks will always come here.
+    // - On mobile browsers, the simulated "fast" click will call this.
+    // - But the browser's follow-up slow click will be "busted" before it reaches this handler.
+    // Therefore it's safe to use this directive on both mobile and desktop.
+    element.on('click', function(event, touchend) {
+      scope.$apply(function() {
+        clickHandler(scope, {$event: (touchend || event)});
+      });
+    });
+
+    element.on('mousedown', function(event) {
+      element.addClass(ACTIVE_CLASS_NAME);
+    });
+
+    element.on('mousemove mouseup', function(event) {
+      element.removeClass(ACTIVE_CLASS_NAME);
+    });
+
+  };
+}]);
+
+/* global ngTouch: false */
+
+/**
+ * @ngdoc directive
+ * @name ngSwipeLeft
+ *
+ * @description
+ * Specify custom behavior when an element is swiped to the left on a touchscreen device.
+ * A leftward swipe is a quick, right-to-left slide of the finger.
+ * Though ngSwipeLeft is designed for touch-based devices, it will work with a mouse click and drag
+ * too.
+ *
+ * To disable the mouse click and drag functionality, add `ng-swipe-disable-mouse` to
+ * the `ng-swipe-left` or `ng-swipe-right` DOM Element.
+ *
+ * Requires the {@link ngTouch `ngTouch`} module to be installed.
+ *
+ * @element ANY
+ * @param {expression} ngSwipeLeft {@link guide/expression Expression} to evaluate
+ * upon left swipe. (Event object is available as `$event`)
+ *
+ * @example
+    <example module="ngSwipeLeftExample" deps="angular-touch.js">
+      <file name="index.html">
+        <div ng-show="!showActions" ng-swipe-left="showActions = true">
+          Some list content, like an email in the inbox
+        </div>
+        <div ng-show="showActions" ng-swipe-right="showActions = false">
+          <button ng-click="reply()">Reply</button>
+          <button ng-click="delete()">Delete</button>
+        </div>
+      </file>
+      <file name="script.js">
+        angular.module('ngSwipeLeftExample', ['ngTouch']);
+      </file>
+    </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngSwipeRight
+ *
+ * @description
+ * Specify custom behavior when an element is swiped to the right on a touchscreen device.
+ * A rightward swipe is a quick, left-to-right slide of the finger.
+ * Though ngSwipeRight is designed for touch-based devices, it will work with a mouse click and drag
+ * too.
+ *
+ * Requires the {@link ngTouch `ngTouch`} module to be installed.
+ *
+ * @element ANY
+ * @param {expression} ngSwipeRight {@link guide/expression Expression} to evaluate
+ * upon right swipe. (Event object is available as `$event`)
+ *
+ * @example
+    <example module="ngSwipeRightExample" deps="angular-touch.js">
+      <file name="index.html">
+        <div ng-show="!showActions" ng-swipe-left="showActions = true">
+          Some list content, like an email in the inbox
+        </div>
+        <div ng-show="showActions" ng-swipe-right="showActions = false">
+          <button ng-click="reply()">Reply</button>
+          <button ng-click="delete()">Delete</button>
+        </div>
+      </file>
+      <file name="script.js">
+        angular.module('ngSwipeRightExample', ['ngTouch']);
+      </file>
+    </example>
+ */
+
+function makeSwipeDirective(directiveName, direction, eventName) {
+  ngTouch.directive(directiveName, ['$parse', '$swipe', function($parse, $swipe) {
+    // The maximum vertical delta for a swipe should be less than 75px.
+    var MAX_VERTICAL_DISTANCE = 75;
+    // Vertical distance should not be more than a fraction of the horizontal distance.
+    var MAX_VERTICAL_RATIO = 0.3;
+    // At least a 30px lateral motion is necessary for a swipe.
+    var MIN_HORIZONTAL_DISTANCE = 30;
+
+    return function(scope, element, attr) {
+      var swipeHandler = $parse(attr[directiveName]);
+
+      var startCoords, valid;
+
+      function validSwipe(coords) {
+        // Check that it's within the coordinates.
+        // Absolute vertical distance must be within tolerances.
+        // Horizontal distance, we take the current X - the starting X.
+        // This is negative for leftward swipes and positive for rightward swipes.
+        // After multiplying by the direction (-1 for left, +1 for right), legal swipes
+        // (ie. same direction as the directive wants) will have a positive delta and
+        // illegal ones a negative delta.
+        // Therefore this delta must be positive, and larger than the minimum.
+        if (!startCoords) return false;
+        var deltaY = Math.abs(coords.y - startCoords.y);
+        var deltaX = (coords.x - startCoords.x) * direction;
+        return valid && // Short circuit for already-invalidated swipes.
+            deltaY < MAX_VERTICAL_DISTANCE &&
+            deltaX > 0 &&
+            deltaX > MIN_HORIZONTAL_DISTANCE &&
+            deltaY / deltaX < MAX_VERTICAL_RATIO;
+      }
+
+      var pointerTypes = ['touch'];
+      if (!angular.isDefined(attr['ngSwipeDisableMouse'])) {
+        pointerTypes.push('mouse');
+      }
+      $swipe.bind(element, {
+        'start': function(coords, event) {
+          startCoords = coords;
+          valid = true;
+        },
+        'cancel': function(event) {
+          valid = false;
+        },
+        'end': function(coords, event) {
+          if (validSwipe(coords)) {
+            scope.$apply(function() {
+              element.triggerHandler(eventName);
+              swipeHandler(scope, {$event: event});
+            });
+          }
+        }
+      }, pointerTypes);
+    };
+  }]);
+}
+
+// Left is negative X-coordinate, right is positive.
+makeSwipeDirective('ngSwipeLeft', -1, 'swipeleft');
+makeSwipeDirective('ngSwipeRight', 1, 'swiperight');
+
+
+
+})(window, window.angular);
diff --git a/public/bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.js b/public/bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.js
new file mode 100644
index 0000000..fa12f69
--- /dev/null
+++ b/public/bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.js
@@ -0,0 +1,114 @@
+/*!
+ * angular-translate - v2.7.2 - 2015-06-01
+ * http://github.com/angular-translate/angular-translate
+ * Copyright (c) 2015 ; Licensed MIT
+ */
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define([], function () {
+      return (factory());
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory();
+  } else {
+    factory();
+  }
+}(this, function () {
+
+angular.module('pascalprecht.translate')
+/**
+ * @ngdoc object
+ * @name pascalprecht.translate.$translateStaticFilesLoader
+ * @requires $q
+ * @requires $http
+ *
+ * @description
+ * Creates a loading function for a typical static file url pattern:
+ * "lang-en_US.json", "lang-de_DE.json", etc. Using this builder,
+ * the response of these urls must be an object of key-value pairs.
+ *
+ * @param {object} options Options object, which gets prefix, suffix and key.
+ */
+.factory('$translateStaticFilesLoader', $translateStaticFilesLoader);
+
+function $translateStaticFilesLoader($q, $http) {
+
+  'use strict';
+
+  return function (options) {
+
+    if (!options || (!angular.isArray(options.files) && (!angular.isString(options.prefix) || !angular.isString(options.suffix)))) {
+      throw new Error('Couldn\'t load static files, no files and prefix or suffix specified!');
+    }
+
+    if (!options.files) {
+      options.files = [{
+        prefix: options.prefix,
+        suffix: options.suffix
+      }];
+    }
+
+    var load = function (file) {
+      if (!file || (!angular.isString(file.prefix) || !angular.isString(file.suffix))) {
+        throw new Error('Couldn\'t load static file, no prefix or suffix specified!');
+      }
+
+      var deferred = $q.defer();
+
+      $http(angular.extend({
+        url: [
+          file.prefix,
+          options.key,
+          file.suffix
+        ].join(''),
+        method: 'GET',
+        params: ''
+      }, options.$http)).success(function (data) {
+        deferred.resolve(data);
+      }).error(function () {
+        deferred.reject(options.key);
+      });
+
+      return deferred.promise;
+    };
+
+    var deferred = $q.defer(),
+        promises = [],
+        length = options.files.length;
+
+    for (var i = 0; i < length; i++) {
+      promises.push(load({
+        prefix: options.files[i].prefix,
+        key: options.key,
+        suffix: options.files[i].suffix
+      }));
+    }
+
+    $q.all(promises).then(function (data) {
+      var length = data.length,
+          mergedData = {};
+
+      for (var i = 0; i < length; i++) {
+        for (var key in data[i]) {
+          mergedData[key] = data[i][key];
+        }
+      }
+
+      deferred.resolve(mergedData);
+    }, function (data) {
+      deferred.reject(data);
+    });
+
+    return deferred.promise;
+  };
+}
+$translateStaticFilesLoader.$inject = ['$q', '$http'];
+
+$translateStaticFilesLoader.displayName = '$translateStaticFilesLoader';
+return 'pascalprecht.translate';
+
+}));
diff --git a/public/bower_components/angular-translate-storage-cookie/angular-translate-storage-cookie.js b/public/bower_components/angular-translate-storage-cookie/angular-translate-storage-cookie.js
new file mode 100644
index 0000000..8101cb5
--- /dev/null
+++ b/public/bower_components/angular-translate-storage-cookie/angular-translate-storage-cookie.js
@@ -0,0 +1,97 @@
+/*!
+ * angular-translate - v2.8.1 - 2015-10-01
+ * 
+ * Copyright (c) 2015 The angular-translate team, Pascal Precht; Licensed MIT
+ */
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define([], function () {
+      return (factory());
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory();
+  } else {
+    factory();
+  }
+}(this, function () {
+
+angular.module('pascalprecht.translate')
+
+/**
+ * @ngdoc object
+ * @name pascalprecht.translate.$translateCookieStorage
+ * @requires $cookieStore
+ *
+ * @description
+ * Abstraction layer for cookieStore. This service is used when telling angular-translate
+ * to use cookieStore as storage.
+ *
+ */
+  .factory('$translateCookieStorage', $translateCookieStorageFactory);
+
+function $translateCookieStorageFactory($cookieStore) {
+
+  'use strict';
+
+  var $translateCookieStorage = {
+
+    /**
+     * @ngdoc function
+     * @name pascalprecht.translate.$translateCookieStorage#get
+     * @methodOf pascalprecht.translate.$translateCookieStorage
+     *
+     * @description
+     * Returns an item from cookieStorage by given name.
+     *
+     * @param {string} name Item name
+     * @return {string} Value of item name
+     */
+    get: function (name) {
+      return $cookieStore.get(name);
+    },
+
+    /**
+     * @ngdoc function
+     * @name pascalprecht.translate.$translateCookieStorage#set
+     * @methodOf pascalprecht.translate.$translateCookieStorage
+     *
+     * @description
+     * Sets an item in cookieStorage by given name.
+     *
+     * @deprecated use #put
+     *
+     * @param {string} name Item name
+     * @param {string} value Item value
+     */
+    set: function (name, value) {
+      $cookieStore.put(name, value);
+    },
+
+    /**
+     * @ngdoc function
+     * @name pascalprecht.translate.$translateCookieStorage#put
+     * @methodOf pascalprecht.translate.$translateCookieStorage
+     *
+     * @description
+     * Sets an item in cookieStorage by given name.
+     *
+     * @param {string} name Item name
+     * @param {string} value Item value
+     */
+    put: function (name, value) {
+      $cookieStore.put(name, value);
+    }
+  };
+
+  return $translateCookieStorage;
+}
+$translateCookieStorageFactory.$inject = ['$cookieStore'];
+
+$translateCookieStorageFactory.displayName = '$translateCookieStorage';
+return 'pascalprecht.translate';
+
+}));
diff --git a/public/bower_components/angular-translate-storage-local/angular-translate-storage-local.js b/public/bower_components/angular-translate-storage-local/angular-translate-storage-local.js
new file mode 100644
index 0000000..1bf6720
--- /dev/null
+++ b/public/bower_components/angular-translate-storage-local/angular-translate-storage-local.js
@@ -0,0 +1,123 @@
+/*!
+ * angular-translate - v2.8.1 - 2015-10-01
+ * 
+ * Copyright (c) 2015 The angular-translate team, Pascal Precht; Licensed MIT
+ */
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define([], function () {
+      return (factory());
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory();
+  } else {
+    factory();
+  }
+}(this, function () {
+
+angular.module('pascalprecht.translate')
+
+/**
+ * @ngdoc object
+ * @name pascalprecht.translate.$translateLocalStorage
+ * @requires $window
+ * @requires $translateCookieStorage
+ *
+ * @description
+ * Abstraction layer for localStorage. This service is used when telling angular-translate
+ * to use localStorage as storage.
+ *
+ */
+.factory('$translateLocalStorage', $translateLocalStorageFactory);
+
+function $translateLocalStorageFactory($window, $translateCookieStorage) {
+
+  'use strict';
+
+  // Setup adapter
+  var localStorageAdapter = (function(){
+    var langKey;
+    return {
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translateLocalStorage#get
+       * @methodOf pascalprecht.translate.$translateLocalStorage
+       *
+       * @description
+       * Returns an item from localStorage by given name.
+       *
+       * @param {string} name Item name
+       * @return {string} Value of item name
+       */
+      get: function (name) {
+        if(!langKey) {
+          langKey = $window.localStorage.getItem(name);
+        }
+
+        return langKey;
+      },
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translateLocalStorage#set
+       * @methodOf pascalprecht.translate.$translateLocalStorage
+       *
+       * @description
+       * Sets an item in localStorage by given name.
+       *
+       * @deprecated use #put
+       *
+       * @param {string} name Item name
+       * @param {string} value Item value
+       */
+      set: function (name, value) {
+        langKey=value;
+        $window.localStorage.setItem(name, value);
+      },
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translateLocalStorage#put
+       * @methodOf pascalprecht.translate.$translateLocalStorage
+       *
+       * @description
+       * Sets an item in localStorage by given name.
+       *
+       * @param {string} name Item name
+       * @param {string} value Item value
+       */
+      put: function (name, value) {
+        langKey=value;
+        $window.localStorage.setItem(name, value);
+      }
+    };
+  }());
+
+  var hasLocalStorageSupport = 'localStorage' in $window;
+  if (hasLocalStorageSupport) {
+    var testKey = 'pascalprecht.translate.storageTest';
+    try {
+      // this check have to be wrapped within a try/catch because on
+      // a SecurityError: Dom Exception 18 on iOS
+      if ($window.localStorage !== null) {
+        $window.localStorage.setItem(testKey, 'foo');
+        $window.localStorage.removeItem(testKey);
+        hasLocalStorageSupport = true;
+      } else {
+        hasLocalStorageSupport = false;
+      }
+    } catch (e){
+      hasLocalStorageSupport = false;
+    }
+  }
+  var $translateLocalStorage = hasLocalStorageSupport ? localStorageAdapter : $translateCookieStorage;
+  return $translateLocalStorage;
+}
+$translateLocalStorageFactory.$inject = ['$window', '$translateCookieStorage'];
+
+$translateLocalStorageFactory.displayName = '$translateLocalStorageFactory';
+return 'pascalprecht.translate';
+
+}));
diff --git a/public/bower_components/angular-translate/angular-translate.js b/public/bower_components/angular-translate/angular-translate.js
new file mode 100644
index 0000000..e7183a0
--- /dev/null
+++ b/public/bower_components/angular-translate/angular-translate.js
@@ -0,0 +1,2904 @@
+/*!
+ * angular-translate - v2.7.2 - 2015-06-01
+ * http://github.com/angular-translate/angular-translate
+ * Copyright (c) 2015 ; Licensed MIT
+ */
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define([], function () {
+      return (factory());
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory();
+  } else {
+    factory();
+  }
+}(this, function () {
+
+/**
+ * @ngdoc overview
+ * @name pascalprecht.translate
+ *
+ * @description
+ * The main module which holds everything together.
+ */
+angular.module('pascalprecht.translate', ['ng'])
+  .run(runTranslate);
+
+function runTranslate($translate) {
+
+  'use strict';
+
+  var key = $translate.storageKey(),
+    storage = $translate.storage();
+
+  var fallbackFromIncorrectStorageValue = function () {
+    var preferred = $translate.preferredLanguage();
+    if (angular.isString(preferred)) {
+      $translate.use(preferred);
+      // $translate.use() will also remember the language.
+      // So, we don't need to call storage.put() here.
+    } else {
+      storage.put(key, $translate.use());
+    }
+  };
+
+  fallbackFromIncorrectStorageValue.displayName = 'fallbackFromIncorrectStorageValue';
+
+  if (storage) {
+    if (!storage.get(key)) {
+      fallbackFromIncorrectStorageValue();
+    } else {
+      $translate.use(storage.get(key))['catch'](fallbackFromIncorrectStorageValue);
+    }
+  } else if (angular.isString($translate.preferredLanguage())) {
+    $translate.use($translate.preferredLanguage());
+  }
+}
+runTranslate.$inject = ['$translate'];
+
+runTranslate.displayName = 'runTranslate';
+
+/**
+ * @ngdoc object
+ * @name pascalprecht.translate.$translateSanitizationProvider
+ *
+ * @description
+ *
+ * Configurations for $translateSanitization
+ */
+angular.module('pascalprecht.translate').provider('$translateSanitization', $translateSanitizationProvider);
+
+function $translateSanitizationProvider () {
+
+  'use strict';
+
+  var $sanitize,
+      currentStrategy = null, // TODO change to either 'sanitize', 'escape' or ['sanitize', 'escapeParameters'] in 3.0.
+      hasConfiguredStrategy = false,
+      hasShownNoStrategyConfiguredWarning = false,
+      strategies;
+
+  /**
+   * Definition of a sanitization strategy function
+   * @callback StrategyFunction
+   * @param {string|object} value - value to be sanitized (either a string or an interpolated value map)
+   * @param {string} mode - either 'text' for a string (translation) or 'params' for the interpolated params
+   * @return {string|object}
+   */
+
+  /**
+   * @ngdoc property
+   * @name strategies
+   * @propertyOf pascalprecht.translate.$translateSanitizationProvider
+   *
+   * @description
+   * Following strategies are built-in:
+   * <dl>
+   *   <dt>sanitize</dt>
+   *   <dd>Sanitizes HTML in the translation text using $sanitize</dd>
+   *   <dt>escape</dt>
+   *   <dd>Escapes HTML in the translation</dd>
+   *   <dt>sanitizeParameters</dt>
+   *   <dd>Sanitizes HTML in the values of the interpolation parameters using $sanitize</dd>
+   *   <dt>escapeParameters</dt>
+   *   <dd>Escapes HTML in the values of the interpolation parameters</dd>
+   *   <dt>escaped</dt>
+   *   <dd>Support legacy strategy name 'escaped' for backwards compatibility (will be removed in 3.0)</dd>
+   * </dl>
+   *
+   */
+
+  strategies = {
+    sanitize: function (value, mode) {
+      if (mode === 'text') {
+        value = htmlSanitizeValue(value);
+      }
+      return value;
+    },
+    escape: function (value, mode) {
+      if (mode === 'text') {
+        value = htmlEscapeValue(value);
+      }
+      return value;
+    },
+    sanitizeParameters: function (value, mode) {
+      if (mode === 'params') {
+        value = mapInterpolationParameters(value, htmlSanitizeValue);
+      }
+      return value;
+    },
+    escapeParameters: function (value, mode) {
+      if (mode === 'params') {
+        value = mapInterpolationParameters(value, htmlEscapeValue);
+      }
+      return value;
+    }
+  };
+  // Support legacy strategy name 'escaped' for backwards compatibility.
+  // TODO should be removed in 3.0
+  strategies.escaped = strategies.escapeParameters;
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateSanitizationProvider#addStrategy
+   * @methodOf pascalprecht.translate.$translateSanitizationProvider
+   *
+   * @description
+   * Adds a sanitization strategy to the list of known strategies.
+   *
+   * @param {string} strategyName - unique key for a strategy
+   * @param {StrategyFunction} strategyFunction - strategy function
+   * @returns {object} this
+   */
+  this.addStrategy = function (strategyName, strategyFunction) {
+    strategies[strategyName] = strategyFunction;
+    return this;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateSanitizationProvider#removeStrategy
+   * @methodOf pascalprecht.translate.$translateSanitizationProvider
+   *
+   * @description
+   * Removes a sanitization strategy from the list of known strategies.
+   *
+   * @param {string} strategyName - unique key for a strategy
+   * @returns {object} this
+   */
+  this.removeStrategy = function (strategyName) {
+    delete strategies[strategyName];
+    return this;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateSanitizationProvider#useStrategy
+   * @methodOf pascalprecht.translate.$translateSanitizationProvider
+   *
+   * @description
+   * Selects a sanitization strategy. When an array is provided the strategies will be executed in order.
+   *
+   * @param {string|StrategyFunction|array} strategy The sanitization strategy / strategies which should be used. Either a name of an existing strategy, a custom strategy function, or an array consisting of multiple names and / or custom functions.
+   * @returns {object} this
+   */
+  this.useStrategy = function (strategy) {
+    hasConfiguredStrategy = true;
+    currentStrategy = strategy;
+    return this;
+  };
+
+  /**
+   * @ngdoc object
+   * @name pascalprecht.translate.$translateSanitization
+   * @requires $injector
+   * @requires $log
+   *
+   * @description
+   * Sanitizes interpolation parameters and translated texts.
+   *
+   */
+  this.$get = ['$injector', '$log', function ($injector, $log) {
+
+    var applyStrategies = function (value, mode, selectedStrategies) {
+      angular.forEach(selectedStrategies, function (selectedStrategy) {
+        if (angular.isFunction(selectedStrategy)) {
+          value = selectedStrategy(value, mode);
+        } else if (angular.isFunction(strategies[selectedStrategy])) {
+          value = strategies[selectedStrategy](value, mode);
+        } else {
+          throw new Error('pascalprecht.translate.$translateSanitization: Unknown sanitization strategy: \'' + selectedStrategy + '\'');
+        }
+      });
+      return value;
+    };
+
+    // TODO: should be removed in 3.0
+    var showNoStrategyConfiguredWarning = function () {
+      if (!hasConfiguredStrategy && !hasShownNoStrategyConfiguredWarning) {
+        $log.warn('pascalprecht.translate.$translateSanitization: No sanitization strategy has been configured. This can have serious security implications. See http://angular-translate.github.io/docs/#/guide/19_security for details.');
+        hasShownNoStrategyConfiguredWarning = true;
+      }
+    };
+
+    if ($injector.has('$sanitize')) {
+      $sanitize = $injector.get('$sanitize');
+    }
+
+    return {
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translateSanitization#useStrategy
+       * @methodOf pascalprecht.translate.$translateSanitization
+       *
+       * @description
+       * Selects a sanitization strategy. When an array is provided the strategies will be executed in order.
+       *
+       * @param {string|StrategyFunction|array} strategy The sanitization strategy / strategies which should be used. Either a name of an existing strategy, a custom strategy function, or an array consisting of multiple names and / or custom functions.
+       */
+      useStrategy: (function (self) {
+        return function (strategy) {
+          self.useStrategy(strategy);
+        };
+      })(this),
+
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translateSanitization#sanitize
+       * @methodOf pascalprecht.translate.$translateSanitization
+       *
+       * @description
+       * Sanitizes a value.
+       *
+       * @param {string|object} value The value which should be sanitized.
+       * @param {string} mode The current sanitization mode, either 'params' or 'text'.
+       * @param {string|StrategyFunction|array} [strategy] Optional custom strategy which should be used instead of the currently selected strategy.
+       * @returns {string|object} sanitized value
+       */
+      sanitize: function (value, mode, strategy) {
+        if (!currentStrategy) {
+          showNoStrategyConfiguredWarning();
+        }
+
+        if (arguments.length < 3) {
+          strategy = currentStrategy;
+        }
+
+        if (!strategy) {
+          return value;
+        }
+
+        var selectedStrategies = angular.isArray(strategy) ? strategy : [strategy];
+        return applyStrategies(value, mode, selectedStrategies);
+      }
+    };
+  }];
+
+  var htmlEscapeValue = function (value) {
+    var element = angular.element('<div></div>');
+    element.text(value); // not chainable, see #1044
+    return element.html();
+  };
+
+  var htmlSanitizeValue = function (value) {
+    if (!$sanitize) {
+      throw new Error('pascalprecht.translate.$translateSanitization: Error cannot find $sanitize service. Either include the ngSanitize module (https://docs.angularjs.org/api/ngSanitize) or use a sanitization strategy which does not depend on $sanitize, such as \'escape\'.');
+    }
+    return $sanitize(value);
+  };
+
+  var mapInterpolationParameters = function (value, iteratee) {
+    if (angular.isObject(value)) {
+      var result = angular.isArray(value) ? [] : {};
+
+      angular.forEach(value, function (propertyValue, propertyKey) {
+        result[propertyKey] = mapInterpolationParameters(propertyValue, iteratee);
+      });
+
+      return result;
+    } else if (angular.isNumber(value)) {
+      return value;
+    } else {
+      return iteratee(value);
+    }
+  };
+}
+
+/**
+ * @ngdoc object
+ * @name pascalprecht.translate.$translateProvider
+ * @description
+ *
+ * $translateProvider allows developers to register translation-tables, asynchronous loaders
+ * and similar to configure translation behavior directly inside of a module.
+ *
+ */
+angular.module('pascalprecht.translate')
+.constant('pascalprechtTranslateOverrider', {})
+.provider('$translate', $translate);
+
+function $translate($STORAGE_KEY, $windowProvider, $translateSanitizationProvider, pascalprechtTranslateOverrider) {
+
+  'use strict';
+
+  var $translationTable = {},
+      $preferredLanguage,
+      $availableLanguageKeys = [],
+      $languageKeyAliases,
+      $fallbackLanguage,
+      $fallbackWasString,
+      $uses,
+      $nextLang,
+      $storageFactory,
+      $storageKey = $STORAGE_KEY,
+      $storagePrefix,
+      $missingTranslationHandlerFactory,
+      $interpolationFactory,
+      $interpolatorFactories = [],
+      $loaderFactory,
+      $cloakClassName = 'translate-cloak',
+      $loaderOptions,
+      $notFoundIndicatorLeft,
+      $notFoundIndicatorRight,
+      $postCompilingEnabled = false,
+      $forceAsyncReloadEnabled = false,
+      NESTED_OBJECT_DELIMITER = '.',
+      loaderCache,
+      directivePriority = 0,
+      statefulFilter = true,
+      uniformLanguageTagResolver = 'default',
+      languageTagResolver = {
+        'default': function (tag) {
+          return (tag || '').split('-').join('_');
+        },
+        java: function (tag) {
+          var temp = (tag || '').split('-').join('_');
+          var parts = temp.split('_');
+          return parts.length > 1 ? (parts[0].toLowerCase() + '_' + parts[1].toUpperCase()) : temp;
+        },
+        bcp47: function (tag) {
+          var temp = (tag || '').split('_').join('-');
+          var parts = temp.split('-');
+          return parts.length > 1 ? (parts[0].toLowerCase() + '-' + parts[1].toUpperCase()) : temp;
+        }
+      };
+
+  var version = '2.7.2';
+
+  // tries to determine the browsers language
+  var getFirstBrowserLanguage = function () {
+
+    // internal purpose only
+    if (angular.isFunction(pascalprechtTranslateOverrider.getLocale)) {
+      return pascalprechtTranslateOverrider.getLocale();
+    }
+
+    var nav = $windowProvider.$get().navigator,
+        browserLanguagePropertyKeys = ['language', 'browserLanguage', 'systemLanguage', 'userLanguage'],
+        i,
+        language;
+
+    // support for HTML 5.1 "navigator.languages"
+    if (angular.isArray(nav.languages)) {
+      for (i = 0; i < nav.languages.length; i++) {
+        language = nav.languages[i];
+        if (language && language.length) {
+          return language;
+        }
+      }
+    }
+
+    // support for other well known properties in browsers
+    for (i = 0; i < browserLanguagePropertyKeys.length; i++) {
+      language = nav[browserLanguagePropertyKeys[i]];
+      if (language && language.length) {
+        return language;
+      }
+    }
+
+    return null;
+  };
+  getFirstBrowserLanguage.displayName = 'angular-translate/service: getFirstBrowserLanguage';
+
+  // tries to determine the browsers locale
+  var getLocale = function () {
+    var locale = getFirstBrowserLanguage() || '';
+    if (languageTagResolver[uniformLanguageTagResolver]) {
+      locale = languageTagResolver[uniformLanguageTagResolver](locale);
+    }
+    return locale;
+  };
+  getLocale.displayName = 'angular-translate/service: getLocale';
+
+  /**
+   * @name indexOf
+   * @private
+   *
+   * @description
+   * indexOf polyfill. Kinda sorta.
+   *
+   * @param {array} array Array to search in.
+   * @param {string} searchElement Element to search for.
+   *
+   * @returns {int} Index of search element.
+   */
+  var indexOf = function(array, searchElement) {
+    for (var i = 0, len = array.length; i < len; i++) {
+      if (array[i] === searchElement) {
+        return i;
+      }
+    }
+    return -1;
+  };
+
+  /**
+   * @name trim
+   * @private
+   *
+   * @description
+   * trim polyfill
+   *
+   * @returns {string} The string stripped of whitespace from both ends
+   */
+  var trim = function() {
+    return this.toString().replace(/^\s+|\s+$/g, '');
+  };
+
+  var negotiateLocale = function (preferred) {
+
+    var avail = [],
+        locale = angular.lowercase(preferred),
+        i = 0,
+        n = $availableLanguageKeys.length;
+
+    for (; i < n; i++) {
+      avail.push(angular.lowercase($availableLanguageKeys[i]));
+    }
+
+    if (indexOf(avail, locale) > -1) {
+      return preferred;
+    }
+
+    if ($languageKeyAliases) {
+      var alias;
+      for (var langKeyAlias in $languageKeyAliases) {
+        var hasWildcardKey = false;
+        var hasExactKey = Object.prototype.hasOwnProperty.call($languageKeyAliases, langKeyAlias) &&
+          angular.lowercase(langKeyAlias) === angular.lowercase(preferred);
+
+        if (langKeyAlias.slice(-1) === '*') {
+          hasWildcardKey = langKeyAlias.slice(0, -1) === preferred.slice(0, langKeyAlias.length-1);
+        }
+        if (hasExactKey || hasWildcardKey) {
+          alias = $languageKeyAliases[langKeyAlias];
+          if (indexOf(avail, angular.lowercase(alias)) > -1) {
+            return alias;
+          }
+        }
+      }
+    }
+
+    if (preferred) {
+      var parts = preferred.split('_');
+
+      if (parts.length > 1 && indexOf(avail, angular.lowercase(parts[0])) > -1) {
+        return parts[0];
+      }
+    }
+
+    // If everything fails, just return the preferred, unchanged.
+    return preferred;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#translations
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Registers a new translation table for specific language key.
+   *
+   * To register a translation table for specific language, pass a defined language
+   * key as first parameter.
+   *
+   * <pre>
+   *  // register translation table for language: 'de_DE'
+   *  $translateProvider.translations('de_DE', {
+   *    'GREETING': 'Hallo Welt!'
+   *  });
+   *
+   *  // register another one
+   *  $translateProvider.translations('en_US', {
+   *    'GREETING': 'Hello world!'
+   *  });
+   * </pre>
+   *
+   * When registering multiple translation tables for for the same language key,
+   * the actual translation table gets extended. This allows you to define module
+   * specific translation which only get added, once a specific module is loaded in
+   * your app.
+   *
+   * Invoking this method with no arguments returns the translation table which was
+   * registered with no language key. Invoking it with a language key returns the
+   * related translation table.
+   *
+   * @param {string} key A language key.
+   * @param {object} translationTable A plain old JavaScript object that represents a translation table.
+   *
+   */
+  var translations = function (langKey, translationTable) {
+
+    if (!langKey && !translationTable) {
+      return $translationTable;
+    }
+
+    if (langKey && !translationTable) {
+      if (angular.isString(langKey)) {
+        return $translationTable[langKey];
+      }
+    } else {
+      if (!angular.isObject($translationTable[langKey])) {
+        $translationTable[langKey] = {};
+      }
+      angular.extend($translationTable[langKey], flatObject(translationTable));
+    }
+    return this;
+  };
+
+  this.translations = translations;
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#cloakClassName
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   *
+   * Let's you change the class name for `translate-cloak` directive.
+   * Default class name is `translate-cloak`.
+   *
+   * @param {string} name translate-cloak class name
+   */
+  this.cloakClassName = function (name) {
+    if (!name) {
+      return $cloakClassName;
+    }
+    $cloakClassName = name;
+    return this;
+  };
+
+  /**
+   * @name flatObject
+   * @private
+   *
+   * @description
+   * Flats an object. This function is used to flatten given translation data with
+   * namespaces, so they are later accessible via dot notation.
+   */
+  var flatObject = function (data, path, result, prevKey) {
+    var key, keyWithPath, keyWithShortPath, val;
+
+    if (!path) {
+      path = [];
+    }
+    if (!result) {
+      result = {};
+    }
+    for (key in data) {
+      if (!Object.prototype.hasOwnProperty.call(data, key)) {
+        continue;
+      }
+      val = data[key];
+      if (angular.isObject(val)) {
+        flatObject(val, path.concat(key), result, key);
+      } else {
+        keyWithPath = path.length ? ('' + path.join(NESTED_OBJECT_DELIMITER) + NESTED_OBJECT_DELIMITER + key) : key;
+        if(path.length && key === prevKey){
+          // Create shortcut path (foo.bar == foo.bar.bar)
+          keyWithShortPath = '' + path.join(NESTED_OBJECT_DELIMITER);
+          // Link it to original path
+          result[keyWithShortPath] = '@:' + keyWithPath;
+        }
+        result[keyWithPath] = val;
+      }
+    }
+    return result;
+  };
+  flatObject.displayName = 'flatObject';
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#addInterpolation
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Adds interpolation services to angular-translate, so it can manage them.
+   *
+   * @param {object} factory Interpolation service factory
+   */
+  this.addInterpolation = function (factory) {
+    $interpolatorFactories.push(factory);
+    return this;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#useMessageFormatInterpolation
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Tells angular-translate to use interpolation functionality of messageformat.js.
+   * This is useful when having high level pluralization and gender selection.
+   */
+  this.useMessageFormatInterpolation = function () {
+    return this.useInterpolation('$translateMessageFormatInterpolation');
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#useInterpolation
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Tells angular-translate which interpolation style to use as default, application-wide.
+   * Simply pass a factory/service name. The interpolation service has to implement
+   * the correct interface.
+   *
+   * @param {string} factory Interpolation service name.
+   */
+  this.useInterpolation = function (factory) {
+    $interpolationFactory = factory;
+    return this;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#useSanitizeStrategy
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Simply sets a sanitation strategy type.
+   *
+   * @param {string} value Strategy type.
+   */
+  this.useSanitizeValueStrategy = function (value) {
+    $translateSanitizationProvider.useStrategy(value);
+    return this;
+  };
+
+ /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#preferredLanguage
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Tells the module which of the registered translation tables to use for translation
+   * at initial startup by passing a language key. Similar to `$translateProvider#use`
+   * only that it says which language to **prefer**.
+   *
+   * @param {string} langKey A language key.
+   *
+   */
+  this.preferredLanguage = function(langKey) {
+    setupPreferredLanguage(langKey);
+    return this;
+
+  };
+  var setupPreferredLanguage = function (langKey) {
+    if (langKey) {
+      $preferredLanguage = langKey;
+    }
+    return $preferredLanguage;
+  };
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#translationNotFoundIndicator
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Sets an indicator which is used when a translation isn't found. E.g. when
+   * setting the indicator as 'X' and one tries to translate a translation id
+   * called `NOT_FOUND`, this will result in `X NOT_FOUND X`.
+   *
+   * Internally this methods sets a left indicator and a right indicator using
+   * `$translateProvider.translationNotFoundIndicatorLeft()` and
+   * `$translateProvider.translationNotFoundIndicatorRight()`.
+   *
+   * **Note**: These methods automatically add a whitespace between the indicators
+   * and the translation id.
+   *
+   * @param {string} indicator An indicator, could be any string.
+   */
+  this.translationNotFoundIndicator = function (indicator) {
+    this.translationNotFoundIndicatorLeft(indicator);
+    this.translationNotFoundIndicatorRight(indicator);
+    return this;
+  };
+
+  /**
+   * ngdoc function
+   * @name pascalprecht.translate.$translateProvider#translationNotFoundIndicatorLeft
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Sets an indicator which is used when a translation isn't found left to the
+   * translation id.
+   *
+   * @param {string} indicator An indicator.
+   */
+  this.translationNotFoundIndicatorLeft = function (indicator) {
+    if (!indicator) {
+      return $notFoundIndicatorLeft;
+    }
+    $notFoundIndicatorLeft = indicator;
+    return this;
+  };
+
+  /**
+   * ngdoc function
+   * @name pascalprecht.translate.$translateProvider#translationNotFoundIndicatorLeft
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Sets an indicator which is used when a translation isn't found right to the
+   * translation id.
+   *
+   * @param {string} indicator An indicator.
+   */
+  this.translationNotFoundIndicatorRight = function (indicator) {
+    if (!indicator) {
+      return $notFoundIndicatorRight;
+    }
+    $notFoundIndicatorRight = indicator;
+    return this;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#fallbackLanguage
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Tells the module which of the registered translation tables to use when missing translations
+   * at initial startup by passing a language key. Similar to `$translateProvider#use`
+   * only that it says which language to **fallback**.
+   *
+   * @param {string||array} langKey A language key.
+   *
+   */
+  this.fallbackLanguage = function (langKey) {
+    fallbackStack(langKey);
+    return this;
+  };
+
+  var fallbackStack = function (langKey) {
+    if (langKey) {
+      if (angular.isString(langKey)) {
+        $fallbackWasString = true;
+        $fallbackLanguage = [ langKey ];
+      } else if (angular.isArray(langKey)) {
+        $fallbackWasString = false;
+        $fallbackLanguage = langKey;
+      }
+      if (angular.isString($preferredLanguage)  && indexOf($fallbackLanguage, $preferredLanguage) < 0) {
+        $fallbackLanguage.push($preferredLanguage);
+      }
+
+      return this;
+    } else {
+      if ($fallbackWasString) {
+        return $fallbackLanguage[0];
+      } else {
+        return $fallbackLanguage;
+      }
+    }
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#use
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Set which translation table to use for translation by given language key. When
+   * trying to 'use' a language which isn't provided, it'll throw an error.
+   *
+   * You actually don't have to use this method since `$translateProvider#preferredLanguage`
+   * does the job too.
+   *
+   * @param {string} langKey A language key.
+   */
+  this.use = function (langKey) {
+    if (langKey) {
+      if (!$translationTable[langKey] && (!$loaderFactory)) {
+        // only throw an error, when not loading translation data asynchronously
+        throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\'');
+      }
+      $uses = langKey;
+      return this;
+    }
+    return $uses;
+  };
+
+ /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#storageKey
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Tells the module which key must represent the choosed language by a user in the storage.
+   *
+   * @param {string} key A key for the storage.
+   */
+  var storageKey = function(key) {
+    if (!key) {
+      if ($storagePrefix) {
+        return $storagePrefix + $storageKey;
+      }
+      return $storageKey;
+    }
+    $storageKey = key;
+    return this;
+  };
+
+  this.storageKey = storageKey;
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#useUrlLoader
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Tells angular-translate to use `$translateUrlLoader` extension service as loader.
+   *
+   * @param {string} url Url
+   * @param {Object=} options Optional configuration object
+   */
+  this.useUrlLoader = function (url, options) {
+    return this.useLoader('$translateUrlLoader', angular.extend({ url: url }, options));
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#useStaticFilesLoader
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Tells angular-translate to use `$translateStaticFilesLoader` extension service as loader.
+   *
+   * @param {Object=} options Optional configuration object
+   */
+  this.useStaticFilesLoader = function (options) {
+    return this.useLoader('$translateStaticFilesLoader', options);
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#useLoader
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Tells angular-translate to use any other service as loader.
+   *
+   * @param {string} loaderFactory Factory name to use
+   * @param {Object=} options Optional configuration object
+   */
+  this.useLoader = function (loaderFactory, options) {
+    $loaderFactory = loaderFactory;
+    $loaderOptions = options || {};
+    return this;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#useLocalStorage
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Tells angular-translate to use `$translateLocalStorage` service as storage layer.
+   *
+   */
+  this.useLocalStorage = function () {
+    return this.useStorage('$translateLocalStorage');
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#useCookieStorage
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Tells angular-translate to use `$translateCookieStorage` service as storage layer.
+   */
+  this.useCookieStorage = function () {
+    return this.useStorage('$translateCookieStorage');
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#useStorage
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Tells angular-translate to use custom service as storage layer.
+   */
+  this.useStorage = function (storageFactory) {
+    $storageFactory = storageFactory;
+    return this;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#storagePrefix
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Sets prefix for storage key.
+   *
+   * @param {string} prefix Storage key prefix
+   */
+  this.storagePrefix = function (prefix) {
+    if (!prefix) {
+      return prefix;
+    }
+    $storagePrefix = prefix;
+    return this;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#useMissingTranslationHandlerLog
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Tells angular-translate to use built-in log handler when trying to translate
+   * a translation Id which doesn't exist.
+   *
+   * This is actually a shortcut method for `useMissingTranslationHandler()`.
+   *
+   */
+  this.useMissingTranslationHandlerLog = function () {
+    return this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog');
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#useMissingTranslationHandler
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Expects a factory name which later gets instantiated with `$injector`.
+   * This method can be used to tell angular-translate to use a custom
+   * missingTranslationHandler. Just build a factory which returns a function
+   * and expects a translation id as argument.
+   *
+   * Example:
+   * <pre>
+   *  app.config(function ($translateProvider) {
+   *    $translateProvider.useMissingTranslationHandler('customHandler');
+   *  });
+   *
+   *  app.factory('customHandler', function (dep1, dep2) {
+   *    return function (translationId) {
+   *      // something with translationId and dep1 and dep2
+   *    };
+   *  });
+   * </pre>
+   *
+   * @param {string} factory Factory name
+   */
+  this.useMissingTranslationHandler = function (factory) {
+    $missingTranslationHandlerFactory = factory;
+    return this;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#usePostCompiling
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * If post compiling is enabled, all translated values will be processed
+   * again with AngularJS' $compile.
+   *
+   * Example:
+   * <pre>
+   *  app.config(function ($translateProvider) {
+   *    $translateProvider.usePostCompiling(true);
+   *  });
+   * </pre>
+   *
+   * @param {string} factory Factory name
+   */
+  this.usePostCompiling = function (value) {
+    $postCompilingEnabled = !(!value);
+    return this;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#forceAsyncReload
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * If force async reload is enabled, async loader will always be called
+   * even if $translationTable already contains the language key, adding
+   * possible new entries to the $translationTable.
+   *
+   * Example:
+   * <pre>
+   *  app.config(function ($translateProvider) {
+   *    $translateProvider.forceAsyncReload(true);
+   *  });
+   * </pre>
+   *
+   * @param {boolean} value - valid values are true or false
+   */
+  this.forceAsyncReload = function (value) {
+    $forceAsyncReloadEnabled = !(!value);
+    return this;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#uniformLanguageTag
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Tells angular-translate which language tag should be used as a result when determining
+   * the current browser language.
+   *
+   * This setting must be set before invoking {@link pascalprecht.translate.$translateProvider#methods_determinePreferredLanguage determinePreferredLanguage()}.
+   *
+   * <pre>
+   * $translateProvider
+   *   .uniformLanguageTag('bcp47')
+   *   .determinePreferredLanguage()
+   * </pre>
+   *
+   * The resolver currently supports:
+   * * default
+   *     (traditionally: hyphens will be converted into underscores, i.e. en-US => en_US)
+   *     en-US => en_US
+   *     en_US => en_US
+   *     en-us => en_us
+   * * java
+   *     like default, but the second part will be always in uppercase
+   *     en-US => en_US
+   *     en_US => en_US
+   *     en-us => en_US
+   * * BCP 47 (RFC 4646 & 4647)
+   *     en-US => en-US
+   *     en_US => en-US
+   *     en-us => en-US
+   *
+   * See also:
+   * * http://en.wikipedia.org/wiki/IETF_language_tag
+   * * http://www.w3.org/International/core/langtags/
+   * * http://tools.ietf.org/html/bcp47
+   *
+   * @param {string|object} options - options (or standard)
+   * @param {string} options.standard - valid values are 'default', 'bcp47', 'java'
+   */
+  this.uniformLanguageTag = function (options) {
+
+    if (!options) {
+      options = {};
+    } else if (angular.isString(options)) {
+      options = {
+        standard: options
+      };
+    }
+
+    uniformLanguageTagResolver = options.standard;
+
+    return this;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#determinePreferredLanguage
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Tells angular-translate to try to determine on its own which language key
+   * to set as preferred language. When `fn` is given, angular-translate uses it
+   * to determine a language key, otherwise it uses the built-in `getLocale()`
+   * method.
+   *
+   * The `getLocale()` returns a language key in the format `[lang]_[country]` or
+   * `[lang]` depending on what the browser provides.
+   *
+   * Use this method at your own risk, since not all browsers return a valid
+   * locale (see {@link pascalprecht.translate.$translateProvider#methods_uniformLanguageTag uniformLanguageTag()}).
+   *
+   * @param {Function=} fn Function to determine a browser's locale
+   */
+  this.determinePreferredLanguage = function (fn) {
+
+    var locale = (fn && angular.isFunction(fn)) ? fn() : getLocale();
+
+    if (!$availableLanguageKeys.length) {
+      $preferredLanguage = locale;
+    } else {
+      $preferredLanguage = negotiateLocale(locale);
+    }
+
+    return this;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#registerAvailableLanguageKeys
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Registers a set of language keys the app will work with. Use this method in
+   * combination with
+   * {@link pascalprecht.translate.$translateProvider#determinePreferredLanguage determinePreferredLanguage}.
+   * When available languages keys are registered, angular-translate
+   * tries to find the best fitting language key depending on the browsers locale,
+   * considering your language key convention.
+   *
+   * @param {object} languageKeys Array of language keys the your app will use
+   * @param {object=} aliases Alias map.
+   */
+  this.registerAvailableLanguageKeys = function (languageKeys, aliases) {
+    if (languageKeys) {
+      $availableLanguageKeys = languageKeys;
+      if (aliases) {
+        $languageKeyAliases = aliases;
+      }
+      return this;
+    }
+    return $availableLanguageKeys;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#useLoaderCache
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Registers a cache for internal $http based loaders.
+   * {@link pascalprecht.translate.$translateProvider#determinePreferredLanguage determinePreferredLanguage}.
+   * When false the cache will be disabled (default). When true or undefined
+   * the cache will be a default (see $cacheFactory). When an object it will
+   * be treat as a cache object itself: the usage is $http({cache: cache})
+   *
+   * @param {object} cache boolean, string or cache-object
+   */
+  this.useLoaderCache = function (cache) {
+    if (cache === false) {
+      // disable cache
+      loaderCache = undefined;
+    } else if (cache === true) {
+      // enable cache using AJS defaults
+      loaderCache = true;
+    } else if (typeof(cache) === 'undefined') {
+      // enable cache using default
+      loaderCache = '$translationCache';
+    } else if (cache) {
+      // enable cache using given one (see $cacheFactory)
+      loaderCache = cache;
+    }
+    return this;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#directivePriority
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Sets the default priority of the translate directive. The standard value is `0`.
+   * Calling this function without an argument will return the current value.
+   *
+   * @param {number} priority for the translate-directive
+   */
+  this.directivePriority = function (priority) {
+    if (priority === undefined) {
+      // getter
+      return directivePriority;
+    } else {
+      // setter with chaining
+      directivePriority = priority;
+      return this;
+    }
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateProvider#statefulFilter
+   * @methodOf pascalprecht.translate.$translateProvider
+   *
+   * @description
+   * Since AngularJS 1.3, filters which are not stateless (depending at the scope)
+   * have to explicit define this behavior.
+   * Sets whether the translate filter should be stateful or stateless. The standard value is `true`
+   * meaning being stateful.
+   * Calling this function without an argument will return the current value.
+   *
+   * @param {boolean} state - defines the state of the filter
+   */
+  this.statefulFilter = function (state) {
+    if (state === undefined) {
+      // getter
+      return statefulFilter;
+    } else {
+      // setter with chaining
+      statefulFilter = state;
+      return this;
+    }
+  };
+
+  /**
+   * @ngdoc object
+   * @name pascalprecht.translate.$translate
+   * @requires $interpolate
+   * @requires $log
+   * @requires $rootScope
+   * @requires $q
+   *
+   * @description
+   * The `$translate` service is the actual core of angular-translate. It expects a translation id
+   * and optional interpolate parameters to translate contents.
+   *
+   * <pre>
+   *  $translate('HEADLINE_TEXT').then(function (translation) {
+   *    $scope.translatedText = translation;
+   *  });
+   * </pre>
+   *
+   * @param {string|array} translationId A token which represents a translation id
+   *                                     This can be optionally an array of translation ids which
+   *                                     results that the function returns an object where each key
+   *                                     is the translation id and the value the translation.
+   * @param {object=} interpolateParams An object hash for dynamic values
+   * @param {string} interpolationId The id of the interpolation to use
+   * @returns {object} promise
+   */
+  this.$get = [
+    '$log',
+    '$injector',
+    '$rootScope',
+    '$q',
+    function ($log, $injector, $rootScope, $q) {
+
+      var Storage,
+          defaultInterpolator = $injector.get($interpolationFactory || '$translateDefaultInterpolation'),
+          pendingLoader = false,
+          interpolatorHashMap = {},
+          langPromises = {},
+          fallbackIndex,
+          startFallbackIteration;
+
+      var $translate = function (translationId, interpolateParams, interpolationId, defaultTranslationText) {
+
+        // Duck detection: If the first argument is an array, a bunch of translations was requested.
+        // The result is an object.
+        if (angular.isArray(translationId)) {
+          // Inspired by Q.allSettled by Kris Kowal
+          // https://github.com/kriskowal/q/blob/b0fa72980717dc202ffc3cbf03b936e10ebbb9d7/q.js#L1553-1563
+          // This transforms all promises regardless resolved or rejected
+          var translateAll = function (translationIds) {
+            var results = {}; // storing the actual results
+            var promises = []; // promises to wait for
+            // Wraps the promise a) being always resolved and b) storing the link id->value
+            var translate = function (translationId) {
+              var deferred = $q.defer();
+              var regardless = function (value) {
+                results[translationId] = value;
+                deferred.resolve([translationId, value]);
+              };
+              // we don't care whether the promise was resolved or rejected; just store the values
+              $translate(translationId, interpolateParams, interpolationId, defaultTranslationText).then(regardless, regardless);
+              return deferred.promise;
+            };
+            for (var i = 0, c = translationIds.length; i < c; i++) {
+              promises.push(translate(translationIds[i]));
+            }
+            // wait for all (including storing to results)
+            return $q.all(promises).then(function () {
+              // return the results
+              return results;
+            });
+          };
+          return translateAll(translationId);
+        }
+
+        var deferred = $q.defer();
+
+        // trim off any whitespace
+        if (translationId) {
+          translationId = trim.apply(translationId);
+        }
+
+        var promiseToWaitFor = (function () {
+          var promise = $preferredLanguage ?
+            langPromises[$preferredLanguage] :
+            langPromises[$uses];
+
+          fallbackIndex = 0;
+
+          if ($storageFactory && !promise) {
+            // looks like there's no pending promise for $preferredLanguage or
+            // $uses. Maybe there's one pending for a language that comes from
+            // storage.
+            var langKey = Storage.get($storageKey);
+            promise = langPromises[langKey];
+
+            if ($fallbackLanguage && $fallbackLanguage.length) {
+                var index = indexOf($fallbackLanguage, langKey);
+                // maybe the language from storage is also defined as fallback language
+                // we increase the fallback language index to not search in that language
+                // as fallback, since it's probably the first used language
+                // in that case the index starts after the first element
+                fallbackIndex = (index === 0) ? 1 : 0;
+
+                // but we can make sure to ALWAYS fallback to preferred language at least
+                if (indexOf($fallbackLanguage, $preferredLanguage) < 0) {
+                  $fallbackLanguage.push($preferredLanguage);
+                }
+            }
+          }
+          return promise;
+        }());
+
+        if (!promiseToWaitFor) {
+          // no promise to wait for? okay. Then there's no loader registered
+          // nor is a one pending for language that comes from storage.
+          // We can just translate.
+          determineTranslation(translationId, interpolateParams, interpolationId, defaultTranslationText).then(deferred.resolve, deferred.reject);
+        } else {
+          var promiseResolved = function () {
+            determineTranslation(translationId, interpolateParams, interpolationId, defaultTranslationText).then(deferred.resolve, deferred.reject);
+          };
+          promiseResolved.displayName = 'promiseResolved';
+
+          promiseToWaitFor['finally'](promiseResolved, deferred.reject);
+        }
+        return deferred.promise;
+      };
+
+      /**
+       * @name applyNotFoundIndicators
+       * @private
+       *
+       * @description
+       * Applies not fount indicators to given translation id, if needed.
+       * This function gets only executed, if a translation id doesn't exist,
+       * which is why a translation id is expected as argument.
+       *
+       * @param {string} translationId Translation id.
+       * @returns {string} Same as given translation id but applied with not found
+       * indicators.
+       */
+      var applyNotFoundIndicators = function (translationId) {
+        // applying notFoundIndicators
+        if ($notFoundIndicatorLeft) {
+          translationId = [$notFoundIndicatorLeft, translationId].join(' ');
+        }
+        if ($notFoundIndicatorRight) {
+          translationId = [translationId, $notFoundIndicatorRight].join(' ');
+        }
+        return translationId;
+      };
+
+      /**
+       * @name useLanguage
+       * @private
+       *
+       * @description
+       * Makes actual use of a language by setting a given language key as used
+       * language and informs registered interpolators to also use the given
+       * key as locale.
+       *
+       * @param {key} Locale key.
+       */
+      var useLanguage = function (key) {
+        $uses = key;
+        $rootScope.$emit('$translateChangeSuccess', {language: key});
+
+        if ($storageFactory) {
+          Storage.put($translate.storageKey(), $uses);
+        }
+        // inform default interpolator
+        defaultInterpolator.setLocale($uses);
+
+        var eachInterpolator = function (interpolator, id) {
+          interpolatorHashMap[id].setLocale($uses);
+        };
+        eachInterpolator.displayName = 'eachInterpolatorLocaleSetter';
+
+        // inform all others too!
+        angular.forEach(interpolatorHashMap, eachInterpolator);
+        $rootScope.$emit('$translateChangeEnd', {language: key});
+      };
+
+      /**
+       * @name loadAsync
+       * @private
+       *
+       * @description
+       * Kicks of registered async loader using `$injector` and applies existing
+       * loader options. When resolved, it updates translation tables accordingly
+       * or rejects with given language key.
+       *
+       * @param {string} key Language key.
+       * @return {Promise} A promise.
+       */
+      var loadAsync = function (key) {
+        if (!key) {
+          throw 'No language key specified for loading.';
+        }
+
+        var deferred = $q.defer();
+
+        $rootScope.$emit('$translateLoadingStart', {language: key});
+        pendingLoader = true;
+
+        var cache = loaderCache;
+        if (typeof(cache) === 'string') {
+          // getting on-demand instance of loader
+          cache = $injector.get(cache);
+        }
+
+        var loaderOptions = angular.extend({}, $loaderOptions, {
+          key: key,
+          $http: angular.extend({}, {
+            cache: cache
+          }, $loaderOptions.$http)
+        });
+
+        var onLoaderSuccess = function (data) {
+          var translationTable = {};
+          $rootScope.$emit('$translateLoadingSuccess', {language: key});
+
+          if (angular.isArray(data)) {
+            angular.forEach(data, function (table) {
+              angular.extend(translationTable, flatObject(table));
+            });
+          } else {
+            angular.extend(translationTable, flatObject(data));
+          }
+          pendingLoader = false;
+          deferred.resolve({
+            key: key,
+            table: translationTable
+          });
+          $rootScope.$emit('$translateLoadingEnd', {language: key});
+        };
+        onLoaderSuccess.displayName = 'onLoaderSuccess';
+
+        var onLoaderError = function (key) {
+          $rootScope.$emit('$translateLoadingError', {language: key});
+          deferred.reject(key);
+          $rootScope.$emit('$translateLoadingEnd', {language: key});
+        };
+        onLoaderError.displayName = 'onLoaderError';
+
+        $injector.get($loaderFactory)(loaderOptions)
+          .then(onLoaderSuccess, onLoaderError);
+
+        return deferred.promise;
+      };
+
+      if ($storageFactory) {
+        Storage = $injector.get($storageFactory);
+
+        if (!Storage.get || !Storage.put) {
+          throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or put() method!');
+        }
+      }
+
+      // if we have additional interpolations that were added via
+      // $translateProvider.addInterpolation(), we have to map'em
+      if ($interpolatorFactories.length) {
+        var eachInterpolationFactory = function (interpolatorFactory) {
+          var interpolator = $injector.get(interpolatorFactory);
+          // setting initial locale for each interpolation service
+          interpolator.setLocale($preferredLanguage || $uses);
+          // make'em recognizable through id
+          interpolatorHashMap[interpolator.getInterpolationIdentifier()] = interpolator;
+        };
+        eachInterpolationFactory.displayName = 'interpolationFactoryAdder';
+
+        angular.forEach($interpolatorFactories, eachInterpolationFactory);
+      }
+
+      /**
+       * @name getTranslationTable
+       * @private
+       *
+       * @description
+       * Returns a promise that resolves to the translation table
+       * or is rejected if an error occurred.
+       *
+       * @param langKey
+       * @returns {Q.promise}
+       */
+      var getTranslationTable = function (langKey) {
+        var deferred = $q.defer();
+        if (Object.prototype.hasOwnProperty.call($translationTable, langKey)) {
+          deferred.resolve($translationTable[langKey]);
+        } else if (langPromises[langKey]) {
+          var onResolve = function (data) {
+            translations(data.key, data.table);
+            deferred.resolve(data.table);
+          };
+          onResolve.displayName = 'translationTableResolver';
+          langPromises[langKey].then(onResolve, deferred.reject);
+        } else {
+          deferred.reject();
+        }
+        return deferred.promise;
+      };
+
+      /**
+       * @name getFallbackTranslation
+       * @private
+       *
+       * @description
+       * Returns a promise that will resolve to the translation
+       * or be rejected if no translation was found for the language.
+       * This function is currently only used for fallback language translation.
+       *
+       * @param langKey The language to translate to.
+       * @param translationId
+       * @param interpolateParams
+       * @param Interpolator
+       * @returns {Q.promise}
+       */
+      var getFallbackTranslation = function (langKey, translationId, interpolateParams, Interpolator) {
+        var deferred = $q.defer();
+
+        var onResolve = function (translationTable) {
+          if (Object.prototype.hasOwnProperty.call(translationTable, translationId)) {
+            Interpolator.setLocale(langKey);
+            var translation = translationTable[translationId];
+            if (translation.substr(0, 2) === '@:') {
+              getFallbackTranslation(langKey, translation.substr(2), interpolateParams, Interpolator)
+                .then(deferred.resolve, deferred.reject);
+            } else {
+              deferred.resolve(Interpolator.interpolate(translationTable[translationId], interpolateParams));
+            }
+            Interpolator.setLocale($uses);
+          } else {
+            deferred.reject();
+          }
+        };
+        onResolve.displayName = 'fallbackTranslationResolver';
+
+        getTranslationTable(langKey).then(onResolve, deferred.reject);
+
+        return deferred.promise;
+      };
+
+      /**
+       * @name getFallbackTranslationInstant
+       * @private
+       *
+       * @description
+       * Returns a translation
+       * This function is currently only used for fallback language translation.
+       *
+       * @param langKey The language to translate to.
+       * @param translationId
+       * @param interpolateParams
+       * @param Interpolator
+       * @returns {string} translation
+       */
+      var getFallbackTranslationInstant = function (langKey, translationId, interpolateParams, Interpolator) {
+        var result, translationTable = $translationTable[langKey];
+
+        if (translationTable && Object.prototype.hasOwnProperty.call(translationTable, translationId)) {
+          Interpolator.setLocale(langKey);
+          result = Interpolator.interpolate(translationTable[translationId], interpolateParams);
+          if (result.substr(0, 2) === '@:') {
+            return getFallbackTranslationInstant(langKey, result.substr(2), interpolateParams, Interpolator);
+          }
+          Interpolator.setLocale($uses);
+        }
+
+        return result;
+      };
+
+
+      /**
+       * @name translateByHandler
+       * @private
+       *
+       * Translate by missing translation handler.
+       *
+       * @param translationId
+       * @returns translation created by $missingTranslationHandler or translationId is $missingTranslationHandler is
+       * absent
+       */
+      var translateByHandler = function (translationId, interpolateParams) {
+        // If we have a handler factory - we might also call it here to determine if it provides
+        // a default text for a translationid that can't be found anywhere in our tables
+        if ($missingTranslationHandlerFactory) {
+          var resultString = $injector.get($missingTranslationHandlerFactory)(translationId, $uses, interpolateParams);
+          if (resultString !== undefined) {
+            return resultString;
+          } else {
+            return translationId;
+          }
+        } else {
+          return translationId;
+        }
+      };
+
+      /**
+       * @name resolveForFallbackLanguage
+       * @private
+       *
+       * Recursive helper function for fallbackTranslation that will sequentially look
+       * for a translation in the fallbackLanguages starting with fallbackLanguageIndex.
+       *
+       * @param fallbackLanguageIndex
+       * @param translationId
+       * @param interpolateParams
+       * @param Interpolator
+       * @returns {Q.promise} Promise that will resolve to the translation.
+       */
+      var resolveForFallbackLanguage = function (fallbackLanguageIndex, translationId, interpolateParams, Interpolator, defaultTranslationText) {
+        var deferred = $q.defer();
+
+        if (fallbackLanguageIndex < $fallbackLanguage.length) {
+          var langKey = $fallbackLanguage[fallbackLanguageIndex];
+          getFallbackTranslation(langKey, translationId, interpolateParams, Interpolator).then(
+            deferred.resolve,
+            function () {
+              // Look in the next fallback language for a translation.
+              // It delays the resolving by passing another promise to resolve.
+              resolveForFallbackLanguage(fallbackLanguageIndex + 1, translationId, interpolateParams, Interpolator, defaultTranslationText).then(deferred.resolve);
+            }
+          );
+        } else {
+          // No translation found in any fallback language
+          // if a default translation text is set in the directive, then return this as a result
+          if (defaultTranslationText) {
+            deferred.resolve(defaultTranslationText);
+          } else {
+            // if no default translation is set and an error handler is defined, send it to the handler
+            // and then return the result
+            deferred.resolve(translateByHandler(translationId, interpolateParams));
+          }
+        }
+        return deferred.promise;
+      };
+
+      /**
+       * @name resolveForFallbackLanguageInstant
+       * @private
+       *
+       * Recursive helper function for fallbackTranslation that will sequentially look
+       * for a translation in the fallbackLanguages starting with fallbackLanguageIndex.
+       *
+       * @param fallbackLanguageIndex
+       * @param translationId
+       * @param interpolateParams
+       * @param Interpolator
+       * @returns {string} translation
+       */
+      var resolveForFallbackLanguageInstant = function (fallbackLanguageIndex, translationId, interpolateParams, Interpolator) {
+        var result;
+
+        if (fallbackLanguageIndex < $fallbackLanguage.length) {
+          var langKey = $fallbackLanguage[fallbackLanguageIndex];
+          result = getFallbackTranslationInstant(langKey, translationId, interpolateParams, Interpolator);
+          if (!result) {
+            result = resolveForFallbackLanguageInstant(fallbackLanguageIndex + 1, translationId, interpolateParams, Interpolator);
+          }
+        }
+        return result;
+      };
+
+      /**
+       * Translates with the usage of the fallback languages.
+       *
+       * @param translationId
+       * @param interpolateParams
+       * @param Interpolator
+       * @returns {Q.promise} Promise, that resolves to the translation.
+       */
+      var fallbackTranslation = function (translationId, interpolateParams, Interpolator, defaultTranslationText) {
+        // Start with the fallbackLanguage with index 0
+        return resolveForFallbackLanguage((startFallbackIteration>0 ? startFallbackIteration : fallbackIndex), translationId, interpolateParams, Interpolator, defaultTranslationText);
+      };
+
+      /**
+       * Translates with the usage of the fallback languages.
+       *
+       * @param translationId
+       * @param interpolateParams
+       * @param Interpolator
+       * @returns {String} translation
+       */
+      var fallbackTranslationInstant = function (translationId, interpolateParams, Interpolator) {
+        // Start with the fallbackLanguage with index 0
+        return resolveForFallbackLanguageInstant((startFallbackIteration>0 ? startFallbackIteration : fallbackIndex), translationId, interpolateParams, Interpolator);
+      };
+
+      var determineTranslation = function (translationId, interpolateParams, interpolationId, defaultTranslationText) {
+
+        var deferred = $q.defer();
+
+        var table = $uses ? $translationTable[$uses] : $translationTable,
+            Interpolator = (interpolationId) ? interpolatorHashMap[interpolationId] : defaultInterpolator;
+
+        // if the translation id exists, we can just interpolate it
+        if (table && Object.prototype.hasOwnProperty.call(table, translationId)) {
+          var translation = table[translationId];
+
+          // If using link, rerun $translate with linked translationId and return it
+          if (translation.substr(0, 2) === '@:') {
+
+            $translate(translation.substr(2), interpolateParams, interpolationId, defaultTranslationText)
+              .then(deferred.resolve, deferred.reject);
+          } else {
+            deferred.resolve(Interpolator.interpolate(translation, interpolateParams));
+          }
+        } else {
+          var missingTranslationHandlerTranslation;
+          // for logging purposes only (as in $translateMissingTranslationHandlerLog), value is not returned to promise
+          if ($missingTranslationHandlerFactory && !pendingLoader) {
+            missingTranslationHandlerTranslation = translateByHandler(translationId, interpolateParams);
+          }
+
+          // since we couldn't translate the inital requested translation id,
+          // we try it now with one or more fallback languages, if fallback language(s) is
+          // configured.
+          if ($uses && $fallbackLanguage && $fallbackLanguage.length) {
+            fallbackTranslation(translationId, interpolateParams, Interpolator, defaultTranslationText)
+                .then(function (translation) {
+                  deferred.resolve(translation);
+                }, function (_translationId) {
+                  deferred.reject(applyNotFoundIndicators(_translationId));
+                });
+          } else if ($missingTranslationHandlerFactory && !pendingLoader && missingTranslationHandlerTranslation) {
+            // looks like the requested translation id doesn't exists.
+            // Now, if there is a registered handler for missing translations and no
+            // asyncLoader is pending, we execute the handler
+            if (defaultTranslationText) {
+              deferred.resolve(defaultTranslationText);
+              } else {
+                deferred.resolve(missingTranslationHandlerTranslation);
+              }
+          } else {
+            if (defaultTranslationText) {
+              deferred.resolve(defaultTranslationText);
+            } else {
+              deferred.reject(applyNotFoundIndicators(translationId));
+            }
+          }
+        }
+        return deferred.promise;
+      };
+
+      var determineTranslationInstant = function (translationId, interpolateParams, interpolationId) {
+
+        var result, table = $uses ? $translationTable[$uses] : $translationTable,
+            Interpolator = defaultInterpolator;
+
+        // if the interpolation id exists use custom interpolator
+        if (interpolatorHashMap && Object.prototype.hasOwnProperty.call(interpolatorHashMap, interpolationId)) {
+          Interpolator = interpolatorHashMap[interpolationId];
+        }
+
+        // if the translation id exists, we can just interpolate it
+        if (table && Object.prototype.hasOwnProperty.call(table, translationId)) {
+          var translation = table[translationId];
+
+          // If using link, rerun $translate with linked translationId and return it
+          if (translation.substr(0, 2) === '@:') {
+            result = determineTranslationInstant(translation.substr(2), interpolateParams, interpolationId);
+          } else {
+            result = Interpolator.interpolate(translation, interpolateParams);
+          }
+        } else {
+          var missingTranslationHandlerTranslation;
+          // for logging purposes only (as in $translateMissingTranslationHandlerLog), value is not returned to promise
+          if ($missingTranslationHandlerFactory && !pendingLoader) {
+            missingTranslationHandlerTranslation = translateByHandler(translationId, interpolateParams);
+          }
+
+          // since we couldn't translate the inital requested translation id,
+          // we try it now with one or more fallback languages, if fallback language(s) is
+          // configured.
+          if ($uses && $fallbackLanguage && $fallbackLanguage.length) {
+            fallbackIndex = 0;
+            result = fallbackTranslationInstant(translationId, interpolateParams, Interpolator);
+          } else if ($missingTranslationHandlerFactory && !pendingLoader && missingTranslationHandlerTranslation) {
+            // looks like the requested translation id doesn't exists.
+            // Now, if there is a registered handler for missing translations and no
+            // asyncLoader is pending, we execute the handler
+            result = missingTranslationHandlerTranslation;
+          } else {
+            result = applyNotFoundIndicators(translationId);
+          }
+        }
+
+        return result;
+      };
+
+      var clearNextLangAndPromise = function(key) {
+        if ($nextLang === key) {
+          $nextLang = undefined;
+        }
+        langPromises[key] = undefined;
+      };
+
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translate#preferredLanguage
+       * @methodOf pascalprecht.translate.$translate
+       *
+       * @description
+       * Returns the language key for the preferred language.
+       *
+       * @param {string} langKey language String or Array to be used as preferredLanguage (changing at runtime)
+       *
+       * @return {string} preferred language key
+       */
+      $translate.preferredLanguage = function (langKey) {
+        if(langKey) {
+          setupPreferredLanguage(langKey);
+        }
+        return $preferredLanguage;
+      };
+
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translate#cloakClassName
+       * @methodOf pascalprecht.translate.$translate
+       *
+       * @description
+       * Returns the configured class name for `translate-cloak` directive.
+       *
+       * @return {string} cloakClassName
+       */
+      $translate.cloakClassName = function () {
+        return $cloakClassName;
+      };
+
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translate#fallbackLanguage
+       * @methodOf pascalprecht.translate.$translate
+       *
+       * @description
+       * Returns the language key for the fallback languages or sets a new fallback stack.
+       *
+       * @param {string=} langKey language String or Array of fallback languages to be used (to change stack at runtime)
+       *
+       * @return {string||array} fallback language key
+       */
+      $translate.fallbackLanguage = function (langKey) {
+        if (langKey !== undefined && langKey !== null) {
+          fallbackStack(langKey);
+
+          // as we might have an async loader initiated and a new translation language might have been defined
+          // we need to add the promise to the stack also. So - iterate.
+          if ($loaderFactory) {
+            if ($fallbackLanguage && $fallbackLanguage.length) {
+              for (var i = 0, len = $fallbackLanguage.length; i < len; i++) {
+                if (!langPromises[$fallbackLanguage[i]]) {
+                  langPromises[$fallbackLanguage[i]] = loadAsync($fallbackLanguage[i]);
+                }
+              }
+            }
+          }
+          $translate.use($translate.use());
+        }
+        if ($fallbackWasString) {
+          return $fallbackLanguage[0];
+        } else {
+          return $fallbackLanguage;
+        }
+
+      };
+
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translate#useFallbackLanguage
+       * @methodOf pascalprecht.translate.$translate
+       *
+       * @description
+       * Sets the first key of the fallback language stack to be used for translation.
+       * Therefore all languages in the fallback array BEFORE this key will be skipped!
+       *
+       * @param {string=} langKey Contains the langKey the iteration shall start with. Set to false if you want to
+       * get back to the whole stack
+       */
+      $translate.useFallbackLanguage = function (langKey) {
+        if (langKey !== undefined && langKey !== null) {
+          if (!langKey) {
+            startFallbackIteration = 0;
+          } else {
+            var langKeyPosition = indexOf($fallbackLanguage, langKey);
+            if (langKeyPosition > -1) {
+              startFallbackIteration = langKeyPosition;
+            }
+          }
+
+        }
+
+      };
+
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translate#proposedLanguage
+       * @methodOf pascalprecht.translate.$translate
+       *
+       * @description
+       * Returns the language key of language that is currently loaded asynchronously.
+       *
+       * @return {string} language key
+       */
+      $translate.proposedLanguage = function () {
+        return $nextLang;
+      };
+
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translate#storage
+       * @methodOf pascalprecht.translate.$translate
+       *
+       * @description
+       * Returns registered storage.
+       *
+       * @return {object} Storage
+       */
+      $translate.storage = function () {
+        return Storage;
+      };
+
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translate#use
+       * @methodOf pascalprecht.translate.$translate
+       *
+       * @description
+       * Tells angular-translate which language to use by given language key. This method is
+       * used to change language at runtime. It also takes care of storing the language
+       * key in a configured store to let your app remember the choosed language.
+       *
+       * When trying to 'use' a language which isn't available it tries to load it
+       * asynchronously with registered loaders.
+       *
+       * Returns promise object with loaded language file data
+       * @example
+       * $translate.use("en_US").then(function(data){
+       *   $scope.text = $translate("HELLO");
+       * });
+       *
+       * @param {string} key Language key
+       * @return {string} Language key
+       */
+      $translate.use = function (key) {
+        if (!key) {
+          return $uses;
+        }
+
+        var deferred = $q.defer();
+
+        $rootScope.$emit('$translateChangeStart', {language: key});
+
+        // Try to get the aliased language key
+        var aliasedKey = negotiateLocale(key);
+        if (aliasedKey) {
+          key = aliasedKey;
+        }
+
+        // if there isn't a translation table for the language we've requested,
+        // we load it asynchronously
+        if (($forceAsyncReloadEnabled || !$translationTable[key]) && $loaderFactory && !langPromises[key]) {
+          $nextLang = key;
+          langPromises[key] = loadAsync(key).then(function (translation) {
+            translations(translation.key, translation.table);
+            deferred.resolve(translation.key);
+            useLanguage(translation.key);
+            return translation;
+          }, function (key) {
+            $rootScope.$emit('$translateChangeError', {language: key});
+            deferred.reject(key);
+            $rootScope.$emit('$translateChangeEnd', {language: key});
+            return $q.reject(key);
+          });
+          langPromises[key]['finally'](function () {
+            clearNextLangAndPromise(key);
+          });
+        } else if ($nextLang === key && langPromises[key]) {
+          // we are already loading this asynchronously
+          // resolve our new deferred when the old langPromise is resolved
+          langPromises[key].then(function (translation) {
+            deferred.resolve(translation.key);
+            return translation;
+          }, function (key) {
+            deferred.reject(key);
+            return $q.reject(key);
+          });
+        } else {
+          deferred.resolve(key);
+          useLanguage(key);
+        }
+
+        return deferred.promise;
+      };
+
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translate#storageKey
+       * @methodOf pascalprecht.translate.$translate
+       *
+       * @description
+       * Returns the key for the storage.
+       *
+       * @return {string} storage key
+       */
+      $translate.storageKey = function () {
+        return storageKey();
+      };
+
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translate#isPostCompilingEnabled
+       * @methodOf pascalprecht.translate.$translate
+       *
+       * @description
+       * Returns whether post compiling is enabled or not
+       *
+       * @return {bool} storage key
+       */
+      $translate.isPostCompilingEnabled = function () {
+        return $postCompilingEnabled;
+      };
+
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translate#isForceAsyncReloadEnabled
+       * @methodOf pascalprecht.translate.$translate
+       *
+       * @description
+       * Returns whether force async reload is enabled or not
+       *
+       * @return {boolean} forceAsyncReload value
+       */
+      $translate.isForceAsyncReloadEnabled = function () {
+        return $forceAsyncReloadEnabled;
+      };
+
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translate#refresh
+       * @methodOf pascalprecht.translate.$translate
+       *
+       * @description
+       * Refreshes a translation table pointed by the given langKey. If langKey is not specified,
+       * the module will drop all existent translation tables and load new version of those which
+       * are currently in use.
+       *
+       * Refresh means that the module will drop target translation table and try to load it again.
+       *
+       * In case there are no loaders registered the refresh() method will throw an Error.
+       *
+       * If the module is able to refresh translation tables refresh() method will broadcast
+       * $translateRefreshStart and $translateRefreshEnd events.
+       *
+       * @example
+       * // this will drop all currently existent translation tables and reload those which are
+       * // currently in use
+       * $translate.refresh();
+       * // this will refresh a translation table for the en_US language
+       * $translate.refresh('en_US');
+       *
+       * @param {string} langKey A language key of the table, which has to be refreshed
+       *
+       * @return {promise} Promise, which will be resolved in case a translation tables refreshing
+       * process is finished successfully, and reject if not.
+       */
+      $translate.refresh = function (langKey) {
+        if (!$loaderFactory) {
+          throw new Error('Couldn\'t refresh translation table, no loader registered!');
+        }
+
+        var deferred = $q.defer();
+
+        function resolve() {
+          deferred.resolve();
+          $rootScope.$emit('$translateRefreshEnd', {language: langKey});
+        }
+
+        function reject() {
+          deferred.reject();
+          $rootScope.$emit('$translateRefreshEnd', {language: langKey});
+        }
+
+        $rootScope.$emit('$translateRefreshStart', {language: langKey});
+
+        if (!langKey) {
+          // if there's no language key specified we refresh ALL THE THINGS!
+          var tables = [], loadingKeys = {};
+
+          // reload registered fallback languages
+          if ($fallbackLanguage && $fallbackLanguage.length) {
+            for (var i = 0, len = $fallbackLanguage.length; i < len; i++) {
+              tables.push(loadAsync($fallbackLanguage[i]));
+              loadingKeys[$fallbackLanguage[i]] = true;
+            }
+          }
+
+          // reload currently used language
+          if ($uses && !loadingKeys[$uses]) {
+            tables.push(loadAsync($uses));
+          }
+
+          var allTranslationsLoaded = function (tableData) {
+            $translationTable = {};
+            angular.forEach(tableData, function (data) {
+              translations(data.key, data.table);
+            });
+            if ($uses) {
+              useLanguage($uses);
+            }
+            resolve();
+          };
+          allTranslationsLoaded.displayName = 'refreshPostProcessor';
+
+          $q.all(tables).then(allTranslationsLoaded, reject);
+
+        } else if ($translationTable[langKey]) {
+
+          var oneTranslationsLoaded = function (data) {
+            translations(data.key, data.table);
+            if (langKey === $uses) {
+              useLanguage($uses);
+            }
+            resolve();
+          };
+          oneTranslationsLoaded.displayName = 'refreshPostProcessor';
+
+          loadAsync(langKey).then(oneTranslationsLoaded, reject);
+
+        } else {
+          reject();
+        }
+        return deferred.promise;
+      };
+
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translate#instant
+       * @methodOf pascalprecht.translate.$translate
+       *
+       * @description
+       * Returns a translation instantly from the internal state of loaded translation. All rules
+       * regarding the current language, the preferred language of even fallback languages will be
+       * used except any promise handling. If a language was not found, an asynchronous loading
+       * will be invoked in the background.
+       *
+       * @param {string|array} translationId A token which represents a translation id
+       *                                     This can be optionally an array of translation ids which
+       *                                     results that the function's promise returns an object where
+       *                                     each key is the translation id and the value the translation.
+       * @param {object} interpolateParams Params
+       * @param {string} interpolationId The id of the interpolation to use
+       *
+       * @return {string|object} translation
+       */
+      $translate.instant = function (translationId, interpolateParams, interpolationId) {
+
+        // Detect undefined and null values to shorten the execution and prevent exceptions
+        if (translationId === null || angular.isUndefined(translationId)) {
+          return translationId;
+        }
+
+        // Duck detection: If the first argument is an array, a bunch of translations was requested.
+        // The result is an object.
+        if (angular.isArray(translationId)) {
+          var results = {};
+          for (var i = 0, c = translationId.length; i < c; i++) {
+            results[translationId[i]] = $translate.instant(translationId[i], interpolateParams, interpolationId);
+          }
+          return results;
+        }
+
+        // We discarded unacceptable values. So we just need to verify if translationId is empty String
+        if (angular.isString(translationId) && translationId.length < 1) {
+          return translationId;
+        }
+
+        // trim off any whitespace
+        if (translationId) {
+          translationId = trim.apply(translationId);
+        }
+
+        var result, possibleLangKeys = [];
+        if ($preferredLanguage) {
+          possibleLangKeys.push($preferredLanguage);
+        }
+        if ($uses) {
+          possibleLangKeys.push($uses);
+        }
+        if ($fallbackLanguage && $fallbackLanguage.length) {
+          possibleLangKeys = possibleLangKeys.concat($fallbackLanguage);
+        }
+        for (var j = 0, d = possibleLangKeys.length; j < d; j++) {
+          var possibleLangKey = possibleLangKeys[j];
+          if ($translationTable[possibleLangKey]) {
+            if (typeof $translationTable[possibleLangKey][translationId] !== 'undefined') {
+              result = determineTranslationInstant(translationId, interpolateParams, interpolationId);
+            } else if ($notFoundIndicatorLeft || $notFoundIndicatorRight) {
+              result = applyNotFoundIndicators(translationId);
+            }
+          }
+          if (typeof result !== 'undefined') {
+            break;
+          }
+        }
+
+        if (!result && result !== '') {
+          // Return translation of default interpolator if not found anything.
+          result = defaultInterpolator.interpolate(translationId, interpolateParams);
+          if ($missingTranslationHandlerFactory && !pendingLoader) {
+            result = translateByHandler(translationId, interpolateParams);
+          }
+        }
+
+        return result;
+      };
+
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translate#versionInfo
+       * @methodOf pascalprecht.translate.$translate
+       *
+       * @description
+       * Returns the current version information for the angular-translate library
+       *
+       * @return {string} angular-translate version
+       */
+      $translate.versionInfo = function () {
+        return version;
+      };
+
+      /**
+       * @ngdoc function
+       * @name pascalprecht.translate.$translate#loaderCache
+       * @methodOf pascalprecht.translate.$translate
+       *
+       * @description
+       * Returns the defined loaderCache.
+       *
+       * @return {boolean|string|object} current value of loaderCache
+       */
+      $translate.loaderCache = function () {
+        return loaderCache;
+      };
+
+      // internal purpose only
+      $translate.directivePriority = function () {
+        return directivePriority;
+      };
+
+      // internal purpose only
+      $translate.statefulFilter = function () {
+        return statefulFilter;
+      };
+
+      if ($loaderFactory) {
+
+        // If at least one async loader is defined and there are no
+        // (default) translations available we should try to load them.
+        if (angular.equals($translationTable, {})) {
+          $translate.use($translate.use());
+        }
+
+        // Also, if there are any fallback language registered, we start
+        // loading them asynchronously as soon as we can.
+        if ($fallbackLanguage && $fallbackLanguage.length) {
+          var processAsyncResult = function (translation) {
+            translations(translation.key, translation.table);
+            $rootScope.$emit('$translateChangeEnd', { language: translation.key });
+            return translation;
+          };
+          for (var i = 0, len = $fallbackLanguage.length; i < len; i++) {
+            var fallbackLanguageId = $fallbackLanguage[i];
+            if ($forceAsyncReloadEnabled || !$translationTable[fallbackLanguageId]) {
+              langPromises[fallbackLanguageId] = loadAsync(fallbackLanguageId).then(processAsyncResult);
+            }
+          }
+        }
+      }
+
+      return $translate;
+    }
+  ];
+}
+$translate.$inject = ['$STORAGE_KEY', '$windowProvider', '$translateSanitizationProvider', 'pascalprechtTranslateOverrider'];
+
+$translate.displayName = 'displayName';
+
+/**
+ * @ngdoc object
+ * @name pascalprecht.translate.$translateDefaultInterpolation
+ * @requires $interpolate
+ *
+ * @description
+ * Uses angular's `$interpolate` services to interpolate strings against some values.
+ *
+ * Be aware to configure a proper sanitization strategy.
+ *
+ * See also:
+ * * {@link pascalprecht.translate.$translateSanitization}
+ *
+ * @return {object} $translateDefaultInterpolation Interpolator service
+ */
+angular.module('pascalprecht.translate').factory('$translateDefaultInterpolation', $translateDefaultInterpolation);
+
+function $translateDefaultInterpolation ($interpolate, $translateSanitization) {
+
+  'use strict';
+
+  var $translateInterpolator = {},
+      $locale,
+      $identifier = 'default';
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateDefaultInterpolation#setLocale
+   * @methodOf pascalprecht.translate.$translateDefaultInterpolation
+   *
+   * @description
+   * Sets current locale (this is currently not use in this interpolation).
+   *
+   * @param {string} locale Language key or locale.
+   */
+  $translateInterpolator.setLocale = function (locale) {
+    $locale = locale;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateDefaultInterpolation#getInterpolationIdentifier
+   * @methodOf pascalprecht.translate.$translateDefaultInterpolation
+   *
+   * @description
+   * Returns an identifier for this interpolation service.
+   *
+   * @returns {string} $identifier
+   */
+  $translateInterpolator.getInterpolationIdentifier = function () {
+    return $identifier;
+  };
+
+  /**
+   * @deprecated will be removed in 3.0
+   * @see {@link pascalprecht.translate.$translateSanitization}
+   */
+  $translateInterpolator.useSanitizeValueStrategy = function (value) {
+    $translateSanitization.useStrategy(value);
+    return this;
+  };
+
+  /**
+   * @ngdoc function
+   * @name pascalprecht.translate.$translateDefaultInterpolation#interpolate
+   * @methodOf pascalprecht.translate.$translateDefaultInterpolation
+   *
+   * @description
+   * Interpolates given string agains given interpolate params using angulars
+   * `$interpolate` service.
+   *
+   * @returns {string} interpolated string.
+   */
+  $translateInterpolator.interpolate = function (string, interpolationParams) {
+    interpolationParams = interpolationParams || {};
+    interpolationParams = $translateSanitization.sanitize(interpolationParams, 'params');
+
+    var interpolatedText = $interpolate(string)(interpolationParams);
+    interpolatedText = $translateSanitization.sanitize(interpolatedText, 'text');
+
+    return interpolatedText;
+  };
+
+  return $translateInterpolator;
+}
+$translateDefaultInterpolation.$inject = ['$interpolate', '$translateSanitization'];
+
+$translateDefaultInterpolation.displayName = '$translateDefaultInterpolation';
+
+angular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY');
+
+angular.module('pascalprecht.translate')
+/**
+ * @ngdoc directive
+ * @name pascalprecht.translate.directive:translate
+ * @requires $compile
+ * @requires $filter
+ * @requires $interpolate
+ * @restrict A
+ *
+ * @description
+ * Translates given translation id either through attribute or DOM content.
+ * Internally it uses `translate` filter to translate translation id. It possible to
+ * pass an optional `translate-values` object literal as string into translation id.
+ *
+ * @param {string=} translate Translation id which could be either string or interpolated string.
+ * @param {string=} translate-values Values to pass into translation id. Can be passed as object literal string or interpolated object.
+ * @param {string=} translate-attr-ATTR translate Translation id and put it into ATTR attribute.
+ * @param {string=} translate-default will be used unless translation was successful
+ * @param {boolean=} translate-compile (default true if present) defines locally activation of {@link pascalprecht.translate.$translateProvider#methods_usePostCompiling}
+ *
+ * @example
+   <example module="ngView">
+    <file name="index.html">
+      <div ng-controller="TranslateCtrl">
+
+        <pre translate="TRANSLATION_ID"></pre>
+        <pre translate>TRANSLATION_ID</pre>
+        <pre translate translate-attr-title="TRANSLATION_ID"></pre>
+        <pre translate="{{translationId}}"></pre>
+        <pre translate>{{translationId}}</pre>
+        <pre translate="WITH_VALUES" translate-values="{value: 5}"></pre>
+        <pre translate translate-values="{value: 5}">WITH_VALUES</pre>
+        <pre translate="WITH_VALUES" translate-values="{{values}}"></pre>
+        <pre translate translate-values="{{values}}">WITH_VALUES</pre>
+        <pre translate translate-attr-title="WITH_VALUES" translate-values="{{values}}"></pre>
+
+      </div>
+    </file>
+    <file name="script.js">
+      angular.module('ngView', ['pascalprecht.translate'])
+
+      .config(function ($translateProvider) {
+
+        $translateProvider.translations('en',{
+          'TRANSLATION_ID': 'Hello there!',
+          'WITH_VALUES': 'The following value is dynamic: {{value}}'
+        }).preferredLanguage('en');
+
+      });
+
+      angular.module('ngView').controller('TranslateCtrl', function ($scope) {
+        $scope.translationId = 'TRANSLATION_ID';
+
+        $scope.values = {
+          value: 78
+        };
+      });
+    </file>
+    <file name="scenario.js">
+      it('should translate', function () {
+        inject(function ($rootScope, $compile) {
+          $rootScope.translationId = 'TRANSLATION_ID';
+
+          element = $compile('<p translate="TRANSLATION_ID"></p>')($rootScope);
+          $rootScope.$digest();
+          expect(element.text()).toBe('Hello there!');
+
+          element = $compile('<p translate="{{translationId}}"></p>')($rootScope);
+          $rootScope.$digest();
+          expect(element.text()).toBe('Hello there!');
+
+          element = $compile('<p translate>TRANSLATION_ID</p>')($rootScope);
+          $rootScope.$digest();
+          expect(element.text()).toBe('Hello there!');
+
+          element = $compile('<p translate>{{translationId}}</p>')($rootScope);
+          $rootScope.$digest();
+          expect(element.text()).toBe('Hello there!');
+
+          element = $compile('<p translate translate-attr-title="TRANSLATION_ID"></p>')($rootScope);
+          $rootScope.$digest();
+          expect(element.attr('title')).toBe('Hello there!');
+        });
+      });
+    </file>
+   </example>
+ */
+.directive('translate', translateDirective);
+function translateDirective($translate, $q, $interpolate, $compile, $parse, $rootScope) {
+
+  'use strict';
+
+  /**
+   * @name trim
+   * @private
+   *
+   * @description
+   * trim polyfill
+   *
+   * @returns {string} The string stripped of whitespace from both ends
+   */
+  var trim = function() {
+    return this.toString().replace(/^\s+|\s+$/g, '');
+  };
+
+  return {
+    restrict: 'AE',
+    scope: true,
+    priority: $translate.directivePriority(),
+    compile: function (tElement, tAttr) {
+
+      var translateValuesExist = (tAttr.translateValues) ?
+        tAttr.translateValues : undefined;
+
+      var translateInterpolation = (tAttr.translateInterpolation) ?
+        tAttr.translateInterpolation : undefined;
+
+      var translateValueExist = tElement[0].outerHTML.match(/translate-value-+/i);
+
+      var interpolateRegExp = '^(.*)(' + $interpolate.startSymbol() + '.*' + $interpolate.endSymbol() + ')(.*)',
+          watcherRegExp = '^(.*)' + $interpolate.startSymbol() + '(.*)' + $interpolate.endSymbol() + '(.*)';
+
+      return function linkFn(scope, iElement, iAttr) {
+
+        scope.interpolateParams = {};
+        scope.preText = '';
+        scope.postText = '';
+        var translationIds = {};
+
+        var initInterpolationParams = function (interpolateParams, iAttr, tAttr) {
+          // initial setup
+          if (iAttr.translateValues) {
+            angular.extend(interpolateParams, $parse(iAttr.translateValues)(scope.$parent));
+          }
+          // initially fetch all attributes if existing and fill the params
+          if (translateValueExist) {
+            for (var attr in tAttr) {
+              if (Object.prototype.hasOwnProperty.call(iAttr, attr) && attr.substr(0, 14) === 'translateValue' && attr !== 'translateValues') {
+                var attributeName = angular.lowercase(attr.substr(14, 1)) + attr.substr(15);
+                interpolateParams[attributeName] = tAttr[attr];
+              }
+            }
+          }
+        };
+
+        // Ensures any change of the attribute "translate" containing the id will
+        // be re-stored to the scope's "translationId".
+        // If the attribute has no content, the element's text value (white spaces trimmed off) will be used.
+        var observeElementTranslation = function (translationId) {
+
+          // Remove any old watcher
+          if (angular.isFunction(observeElementTranslation._unwatchOld)) {
+            observeElementTranslation._unwatchOld();
+            observeElementTranslation._unwatchOld = undefined;
+          }
+
+          if (angular.equals(translationId , '') || !angular.isDefined(translationId)) {
+            // Resolve translation id by inner html if required
+            var interpolateMatches = trim.apply(iElement.text()).match(interpolateRegExp);
+            // Interpolate translation id if required
+            if (angular.isArray(interpolateMatches)) {
+              scope.preText = interpolateMatches[1];
+              scope.postText = interpolateMatches[3];
+              translationIds.translate = $interpolate(interpolateMatches[2])(scope.$parent);
+              var watcherMatches = iElement.text().match(watcherRegExp);
+              if (angular.isArray(watcherMatches) && watcherMatches[2] && watcherMatches[2].length) {
+                observeElementTranslation._unwatchOld = scope.$watch(watcherMatches[2], function (newValue) {
+                  translationIds.translate = newValue;
+                  updateTranslations();
+                });
+              }
+            } else {
+              translationIds.translate = iElement.text().replace(/^\s+|\s+$/g,'');
+            }
+          } else {
+            translationIds.translate = translationId;
+          }
+          updateTranslations();
+        };
+
+        var observeAttributeTranslation = function (translateAttr) {
+          iAttr.$observe(translateAttr, function (translationId) {
+            translationIds[translateAttr] = translationId;
+            updateTranslations();
+          });
+        };
+
+        // initial setup with values
+        initInterpolationParams(scope.interpolateParams, iAttr, tAttr);
+
+        var firstAttributeChangedEvent = true;
+        iAttr.$observe('translate', function (translationId) {
+          if (typeof translationId === 'undefined') {
+            // case of element "<translate>xyz</translate>"
+            observeElementTranslation('');
+          } else {
+            // case of regular attribute
+            if (translationId !== '' || !firstAttributeChangedEvent) {
+              translationIds.translate = translationId;
+              updateTranslations();
+            }
+          }
+          firstAttributeChangedEvent = false;
+        });
+
+        for (var translateAttr in iAttr) {
+          if (iAttr.hasOwnProperty(translateAttr) && translateAttr.substr(0, 13) === 'translateAttr') {
+            observeAttributeTranslation(translateAttr);
+          }
+        }
+
+        iAttr.$observe('translateDefault', function (value) {
+          scope.defaultText = value;
+        });
+
+        if (translateValuesExist) {
+          iAttr.$observe('translateValues', function (interpolateParams) {
+            if (interpolateParams) {
+              scope.$parent.$watch(function () {
+                angular.extend(scope.interpolateParams, $parse(interpolateParams)(scope.$parent));
+              });
+            }
+          });
+        }
+
+        if (translateValueExist) {
+          var observeValueAttribute = function (attrName) {
+            iAttr.$observe(attrName, function (value) {
+              var attributeName = angular.lowercase(attrName.substr(14, 1)) + attrName.substr(15);
+              scope.interpolateParams[attributeName] = value;
+            });
+          };
+          for (var attr in iAttr) {
+            if (Object.prototype.hasOwnProperty.call(iAttr, attr) && attr.substr(0, 14) === 'translateValue' && attr !== 'translateValues') {
+              observeValueAttribute(attr);
+            }
+          }
+        }
+
+        // Master update function
+        var updateTranslations = function () {
+          for (var key in translationIds) {
+
+            if (translationIds.hasOwnProperty(key) && translationIds[key] !== undefined) {
+              updateTranslation(key, translationIds[key], scope, scope.interpolateParams, scope.defaultText);
+            }
+          }
+        };
+
+        // Put translation processing function outside loop
+        var updateTranslation = function(translateAttr, translationId, scope, interpolateParams, defaultTranslationText) {
+          if (translationId) {
+            $translate(translationId, interpolateParams, translateInterpolation, defaultTranslationText)
+              .then(function (translation) {
+                applyTranslation(translation, scope, true, translateAttr);
+              }, function (translationId) {
+                applyTranslation(translationId, scope, false, translateAttr);
+              });
+          } else {
+            // as an empty string cannot be translated, we can solve this using successful=false
+            applyTranslation(translationId, scope, false, translateAttr);
+          }
+        };
+
+        var applyTranslation = function (value, scope, successful, translateAttr) {
+          if (translateAttr === 'translate') {
+            // default translate into innerHTML
+            if (!successful && typeof scope.defaultText !== 'undefined') {
+              value = scope.defaultText;
+            }
+            iElement.html(scope.preText + value + scope.postText);
+            var globallyEnabled = $translate.isPostCompilingEnabled();
+            var locallyDefined = typeof tAttr.translateCompile !== 'undefined';
+            var locallyEnabled = locallyDefined && tAttr.translateCompile !== 'false';
+            if ((globallyEnabled && !locallyDefined) || locallyEnabled) {
+              $compile(iElement.contents())(scope);
+            }
+          } else {
+            // translate attribute
+            if (!successful && typeof scope.defaultText !== 'undefined') {
+              value = scope.defaultText;
+            }
+            var attributeName = iAttr.$attr[translateAttr];
+            if (attributeName.substr(0, 5) === 'data-') {
+              // ensure html5 data prefix is stripped
+              attributeName = attributeName.substr(5);
+            }
+            attributeName = attributeName.substr(15);
+            iElement.attr(attributeName, value);
+          }
+        };
+
+        if (translateValuesExist || translateValueExist || iAttr.translateDefault) {
+          scope.$watch('interpolateParams', updateTranslations, true);
+        }
+
+        // Ensures the text will be refreshed after the current language was changed
+        // w/ $translate.use(...)
+        var unbind = $rootScope.$on('$translateChangeSuccess', updateTranslations);
+
+        // ensure translation will be looked up at least one
+        if (iElement.text().length) {
+          if (iAttr.translate) {
+            observeElementTranslation(iAttr.translate);
+          } else {
+            observeElementTranslation('');
+          }
+        } else if (iAttr.translate) {
+          // ensure attribute will be not skipped
+          observeElementTranslation(iAttr.translate);
+        }
+        updateTranslations();
+        scope.$on('$destroy', unbind);
+      };
+    }
+  };
+}
+translateDirective.$inject = ['$translate', '$q', '$interpolate', '$compile', '$parse', '$rootScope'];
+
+translateDirective.displayName = 'translateDirective';
+
+angular.module('pascalprecht.translate')
+/**
+ * @ngdoc directive
+ * @name pascalprecht.translate.directive:translateCloak
+ * @requires $rootScope
+ * @requires $translate
+ * @restrict A
+ *
+ * $description
+ * Adds a `translate-cloak` class name to the given element where this directive
+ * is applied initially and removes it, once a loader has finished loading.
+ *
+ * This directive can be used to prevent initial flickering when loading translation
+ * data asynchronously.
+ *
+ * The class name is defined in
+ * {@link pascalprecht.translate.$translateProvider#cloakClassName $translate.cloakClassName()}.
+ *
+ * @param {string=} translate-cloak If a translationId is provided, it will be used for showing
+ *                                  or hiding the cloak. Basically it relies on the translation
+ *                                  resolve.
+ */
+.directive('translateCloak', translateCloakDirective);
+
+function translateCloakDirective($rootScope, $translate) {
+
+  'use strict';
+
+  return {
+    compile: function (tElement) {
+      var applyCloak = function () {
+        tElement.addClass($translate.cloakClassName());
+      },
+      removeCloak = function () {
+        tElement.removeClass($translate.cloakClassName());
+      },
+      removeListener = $rootScope.$on('$translateChangeEnd', function () {
+        removeCloak();
+        removeListener();
+        removeListener = null;
+      });
+      applyCloak();
+
+      return function linkFn(scope, iElement, iAttr) {
+        // Register a watcher for the defined translation allowing a fine tuned cloak
+        if (iAttr.translateCloak && iAttr.translateCloak.length) {
+          iAttr.$observe('translateCloak', function (translationId) {
+            $translate(translationId).then(removeCloak, applyCloak);
+          });
+        }
+      };
+    }
+  };
+}
+translateCloakDirective.$inject = ['$rootScope', '$translate'];
+
+translateCloakDirective.displayName = 'translateCloakDirective';
+
+angular.module('pascalprecht.translate')
+/**
+ * @ngdoc filter
+ * @name pascalprecht.translate.filter:translate
+ * @requires $parse
+ * @requires pascalprecht.translate.$translate
+ * @function
+ *
+ * @description
+ * Uses `$translate` service to translate contents. Accepts interpolate parameters
+ * to pass dynamized values though translation.
+ *
+ * @param {string} translationId A translation id to be translated.
+ * @param {*=} interpolateParams Optional object literal (as hash or string) to pass values into translation.
+ *
+ * @returns {string} Translated text.
+ *
+ * @example
+   <example module="ngView">
+    <file name="index.html">
+      <div ng-controller="TranslateCtrl">
+
+        <pre>{{ 'TRANSLATION_ID' | translate }}</pre>
+        <pre>{{ translationId | translate }}</pre>
+        <pre>{{ 'WITH_VALUES' | translate:'{value: 5}' }}</pre>
+        <pre>{{ 'WITH_VALUES' | translate:values }}</pre>
+
+      </div>
+    </file>
+    <file name="script.js">
+      angular.module('ngView', ['pascalprecht.translate'])
+
+      .config(function ($translateProvider) {
+
+        $translateProvider.translations('en', {
+          'TRANSLATION_ID': 'Hello there!',
+          'WITH_VALUES': 'The following value is dynamic: {{value}}'
+        });
+        $translateProvider.preferredLanguage('en');
+
+      });
+
+      angular.module('ngView').controller('TranslateCtrl', function ($scope) {
+        $scope.translationId = 'TRANSLATION_ID';
+
+        $scope.values = {
+          value: 78
+        };
+      });
+    </file>
+   </example>
+ */
+.filter('translate', translateFilterFactory);
+
+function translateFilterFactory($parse, $translate) {
+
+  'use strict';
+
+  var translateFilter = function (translationId, interpolateParams, interpolation) {
+
+    if (!angular.isObject(interpolateParams)) {
+      interpolateParams = $parse(interpolateParams)(this);
+    }
+
+    return $translate.instant(translationId, interpolateParams, interpolation);
+  };
+
+  if ($translate.statefulFilter()) {
+    translateFilter.$stateful = true;
+  }
+
+  return translateFilter;
+}
+translateFilterFactory.$inject = ['$parse', '$translate'];
+
+translateFilterFactory.displayName = 'translateFilterFactory';
+
+angular.module('pascalprecht.translate')
+
+/**
+ * @ngdoc object
+ * @name pascalprecht.translate.$translationCache
+ * @requires $cacheFactory
+ *
+ * @description
+ * The first time a translation table is used, it is loaded in the translation cache for quick retrieval. You
+ * can load translation tables directly into the cache by consuming the
+ * `$translationCache` service directly.
+ *
+ * @return {object} $cacheFactory object.
+ */
+  .factory('$translationCache', $translationCache);
+
+function $translationCache($cacheFactory) {
+
+  'use strict';
+
+  return $cacheFactory('translations');
+}
+$translationCache.$inject = ['$cacheFactory'];
+
+$translationCache.displayName = '$translationCache';
+return 'pascalprecht.translate';
+
+}));
diff --git a/public/bower_components/angular-truncate/truncate.js b/public/bower_components/angular-truncate/truncate.js
new file mode 100644
index 0000000..da77562
--- /dev/null
+++ b/public/bower_components/angular-truncate/truncate.js
@@ -0,0 +1,49 @@
+angular.module('truncate', [])
+    .filter('characters', function () {
+        return function (input, chars, breakOnWord) {
+            if (isNaN(chars)) return input;
+            if (chars <= 0) return '';
+            if (input && input.length > chars) {
+                input = input.substring(0, chars);
+
+                if (!breakOnWord) {
+                    var lastspace = input.lastIndexOf(' ');
+                    //get last space
+                    if (lastspace !== -1) {
+                        input = input.substr(0, lastspace);
+                    }
+                }else{
+                    while(input.charAt(input.length-1) === ' '){
+                        input = input.substr(0, input.length -1);
+                    }
+                }
+                return input + '…';
+            }
+            return input;
+        };
+    })
+    .filter('splitcharacters', function() {
+        return function (input, chars) {
+            if (isNaN(chars)) return input;
+            if (chars <= 0) return '';
+            if (input && input.length > chars) {
+                var prefix = input.substring(0, chars/2);
+                var postfix = input.substring(input.length-chars/2, input.length);
+                return prefix + '...' + postfix;
+            }
+            return input;
+        };
+    })
+    .filter('words', function () {
+        return function (input, words) {
+            if (isNaN(words)) return input;
+            if (words <= 0) return '';
+            if (input) {
+                var inputWords = input.split(/\s+/);
+                if (inputWords.length > words) {
+                    input = inputWords.slice(0, words).join(' ') + '…';
+                }
+            }
+            return input;
+        };
+    });
diff --git a/public/bower_components/angular-ui-notification/angular-ui-notification.min.css b/public/bower_components/angular-ui-notification/angular-ui-notification.min.css
new file mode 100644
index 0000000..491ef93
--- /dev/null
+++ b/public/bower_components/angular-ui-notification/angular-ui-notification.min.css
@@ -0,0 +1,8 @@
+/**
+ * angular-ui-notification - Angular.js service providing simple notifications using Bootstrap 3 styles with css transitions for animating
+ * @author Alex_Crack
+ * @version v0.0.14
+ * @link https://github.com/alexcrack/angular-ui-notification
+ * @license MIT
+ */
+.ui-notification{position:fixed;z-index:9999;width:300px;cursor:pointer;-webkit-transition:all ease .5s;-o-transition:all ease .5s;transition:all ease .5s;color:#fff;background:#337ab7;box-shadow:5px 5px 10px rgba(0,0,0,.3)}.ui-notification.killed{-webkit-transition:opacity ease 1s;-o-transition:opacity ease 1s;transition:opacity ease 1s;opacity:0}.ui-notification>h3{font-size:14px;font-weight:700;display:block;margin:10px 10px 0;padding:0 0 5px;text-align:left;border-bottom:1px solid rgba(255,255,255,.3)}.ui-notification a{color:#fff}.ui-notification a:hover{text-decoration:underline}.ui-notification>.message{margin:10px}.ui-notification.warning{color:#fff;background:#f0ad4e}.ui-notification.error{color:#fff;background:#d9534f}.ui-notification.success{color:#fff;background:#5cb85c}.ui-notification.info{color:#fff;background:#5bc0de}.ui-notification:hover{opacity:.7}
\ No newline at end of file
diff --git a/public/bower_components/angular-ui-notification/angular-ui-notification.min.js b/public/bower_components/angular-ui-notification/angular-ui-notification.min.js
new file mode 100644
index 0000000..e69118a
--- /dev/null
+++ b/public/bower_components/angular-ui-notification/angular-ui-notification.min.js
@@ -0,0 +1,8 @@
+/**
+ * angular-ui-notification - Angular.js service providing simple notifications using Bootstrap 3 styles with css transitions for animating
+ * @author Alex_Crack
+ * @version v0.0.14
+ * @link https://github.com/alexcrack/angular-ui-notification
+ * @license MIT
+ */
+angular.module("ui-notification",[]),angular.module("ui-notification").provider("Notification",function(){this.options={delay:5e3,startTop:10,startRight:10,verticalSpacing:10,horizontalSpacing:10,positionX:"right",positionY:"top",replaceMessage:!1,templateUrl:"angular-ui-notification.html"},this.setOptions=function(t){if(!angular.isObject(t))throw new Error("Options should be an object!");this.options=angular.extend({},this.options,t)},this.$get=["$timeout","$http","$compile","$templateCache","$rootScope","$injector","$sce","$q","$window",function(t,e,i,n,o,s,a,r,l){var p=this.options,c=p.startTop,u=p.startRight,d=p.verticalSpacing,m=p.horizontalSpacing,g=p.delay,f=[],h=!1,v=function(s,v){var y=r.defer();return"object"!=typeof s&&(s={message:s}),s.scope=s.scope?s.scope:o,s.template=s.templateUrl?s.templateUrl:p.templateUrl,s.delay=angular.isUndefined(s.delay)?g:s.delay,s.type=v?v:"",s.positionY=s.positionY?s.positionY:p.positionY,s.positionX=s.positionX?s.positionX:p.positionX,s.replaceMessage=s.replaceMessage?s.replaceMessage:p.replaceMessage,e.get(s.template,{cache:n}).success(function(e){var n=s.scope.$new();n.message=a.trustAsHtml(s.message),n.title=a.trustAsHtml(s.title),n.t=s.type.substr(0,1),n.delay=s.delay;var o=function(){for(var t=0,e=0,i=c,n=u,o=[],a=f.length-1;a>=0;a--){var r=f[a];if(s.replaceMessage&&a<f.length-1)r.addClass("killed");else{var l=parseInt(r[0].offsetHeight),p=parseInt(r[0].offsetWidth),g=o[r._positionY+r._positionX];h+l>window.innerHeight&&(g=c,e++,t=0);var h=i=g?0===t?g:g+d:c,v=n+e*(m+p);r.css(r._positionY,h+"px"),"center"==r._positionX?r.css("left",parseInt(window.innerWidth/2-p/2)+"px"):r.css(r._positionX,v+"px"),o[r._positionY+r._positionX]=h+l,t++}}},r=i(e)(n);r._positionY=s.positionY,r._positionX=s.positionX,r.addClass(s.type),r.bind("webkitTransitionEnd oTransitionEnd otransitionend transitionend msTransitionEnd click",function(t){t=t.originalEvent||t,("click"===t.type||"opacity"===t.propertyName&&t.elapsedTime>=1)&&(r.remove(),f.splice(f.indexOf(r),1),o())}),angular.isNumber(s.delay)&&t(function(){r.addClass("killed")},s.delay),angular.element(document.getElementsByTagName("body")).append(r);var p=-(parseInt(r[0].offsetHeight)+50);r.css(r._positionY,p+"px"),f.push(r),n._templateElement=r,n.kill=function(e){e?(f.splice(f.indexOf(n._templateElement),1),n._templateElement.remove(),t(o)):n._templateElement.addClass("killed")},t(o),h||(angular.element(l).bind("resize",function(){t(o)}),h=!0),y.resolve(n)}).error(function(t){throw new Error("Template ("+s.template+") could not be loaded. "+t)}),y.promise};return v.primary=function(t){return this(t,"primary")},v.error=function(t){return this(t,"error")},v.success=function(t){return this(t,"success")},v.info=function(t){return this(t,"info")},v.warning=function(t){return this(t,"warning")},v.clearAll=function(){angular.forEach(f,function(t){t.addClass("killed")})},v}]}),angular.module("ui-notification").run(["$templateCache",function(t){t.put("angular-ui-notification.html",'<div class="ui-notification"><h3 ng-show="title" ng-bind-html="title"></h3><div class="message" ng-bind-html="message"></div></div>')}]);
\ No newline at end of file
diff --git a/public/bower_components/angular-ui-router/angular-ui-router.js b/public/bower_components/angular-ui-router/angular-ui-router.js
new file mode 100644
index 0000000..57c62cc
--- /dev/null
+++ b/public/bower_components/angular-ui-router/angular-ui-router.js
@@ -0,0 +1,4370 @@
+/**
+ * State-based routing for AngularJS
+ * @version v0.2.15
+ * @link http://angular-ui.github.com/
+ * @license MIT License, http://www.opensource.org/licenses/MIT
+ */
+
+/* commonjs package manager support (eg componentjs) */
+if (typeof module !== "undefined" && typeof exports !== "undefined" && module.exports === exports){
+  module.exports = 'ui.router';
+}
+
+(function (window, angular, undefined) {
+/*jshint globalstrict:true*/
+/*global angular:false*/
+'use strict';
+
+var isDefined = angular.isDefined,
+    isFunction = angular.isFunction,
+    isString = angular.isString,
+    isObject = angular.isObject,
+    isArray = angular.isArray,
+    forEach = angular.forEach,
+    extend = angular.extend,
+    copy = angular.copy;
+
+function inherit(parent, extra) {
+  return extend(new (extend(function() {}, { prototype: parent }))(), extra);
+}
+
+function merge(dst) {
+  forEach(arguments, function(obj) {
+    if (obj !== dst) {
+      forEach(obj, function(value, key) {
+        if (!dst.hasOwnProperty(key)) dst[key] = value;
+      });
+    }
+  });
+  return dst;
+}
+
+/**
+ * Finds the common ancestor path between two states.
+ *
+ * @param {Object} first The first state.
+ * @param {Object} second The second state.
+ * @return {Array} Returns an array of state names in descending order, not including the root.
+ */
+function ancestors(first, second) {
+  var path = [];
+
+  for (var n in first.path) {
+    if (first.path[n] !== second.path[n]) break;
+    path.push(first.path[n]);
+  }
+  return path;
+}
+
+/**
+ * IE8-safe wrapper for `Object.keys()`.
+ *
+ * @param {Object} object A JavaScript object.
+ * @return {Array} Returns the keys of the object as an array.
+ */
+function objectKeys(object) {
+  if (Object.keys) {
+    return Object.keys(object);
+  }
+  var result = [];
+
+  forEach(object, function(val, key) {
+    result.push(key);
+  });
+  return result;
+}
+
+/**
+ * IE8-safe wrapper for `Array.prototype.indexOf()`.
+ *
+ * @param {Array} array A JavaScript array.
+ * @param {*} value A value to search the array for.
+ * @return {Number} Returns the array index value of `value`, or `-1` if not present.
+ */
+function indexOf(array, value) {
+  if (Array.prototype.indexOf) {
+    return array.indexOf(value, Number(arguments[2]) || 0);
+  }
+  var len = array.length >>> 0, from = Number(arguments[2]) || 0;
+  from = (from < 0) ? Math.ceil(from) : Math.floor(from);
+
+  if (from < 0) from += len;
+
+  for (; from < len; from++) {
+    if (from in array && array[from] === value) return from;
+  }
+  return -1;
+}
+
+/**
+ * Merges a set of parameters with all parameters inherited between the common parents of the
+ * current state and a given destination state.
+ *
+ * @param {Object} currentParams The value of the current state parameters ($stateParams).
+ * @param {Object} newParams The set of parameters which will be composited with inherited params.
+ * @param {Object} $current Internal definition of object representing the current state.
+ * @param {Object} $to Internal definition of object representing state to transition to.
+ */
+function inheritParams(currentParams, newParams, $current, $to) {
+  var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = [];
+
+  for (var i in parents) {
+    if (!parents[i].params) continue;
+    parentParams = objectKeys(parents[i].params);
+    if (!parentParams.length) continue;
+
+    for (var j in parentParams) {
+      if (indexOf(inheritList, parentParams[j]) >= 0) continue;
+      inheritList.push(parentParams[j]);
+      inherited[parentParams[j]] = currentParams[parentParams[j]];
+    }
+  }
+  return extend({}, inherited, newParams);
+}
+
+/**
+ * Performs a non-strict comparison of the subset of two objects, defined by a list of keys.
+ *
+ * @param {Object} a The first object.
+ * @param {Object} b The second object.
+ * @param {Array} keys The list of keys within each object to compare. If the list is empty or not specified,
+ *                     it defaults to the list of keys in `a`.
+ * @return {Boolean} Returns `true` if the keys match, otherwise `false`.
+ */
+function equalForKeys(a, b, keys) {
+  if (!keys) {
+    keys = [];
+    for (var n in a) keys.push(n); // Used instead of Object.keys() for IE8 compatibility
+  }
+
+  for (var i=0; i<keys.length; i++) {
+    var k = keys[i];
+    if (a[k] != b[k]) return false; // Not '===', values aren't necessarily normalized
+  }
+  return true;
+}
+
+/**
+ * Returns the subset of an object, based on a list of keys.
+ *
+ * @param {Array} keys
+ * @param {Object} values
+ * @return {Boolean} Returns a subset of `values`.
+ */
+function filterByKeys(keys, values) {
+  var filtered = {};
+
+  forEach(keys, function (name) {
+    filtered[name] = values[name];
+  });
+  return filtered;
+}
+
+// like _.indexBy
+// when you know that your index values will be unique, or you want last-one-in to win
+function indexBy(array, propName) {
+  var result = {};
+  forEach(array, function(item) {
+    result[item[propName]] = item;
+  });
+  return result;
+}
+
+// extracted from underscore.js
+// Return a copy of the object only containing the whitelisted properties.
+function pick(obj) {
+  var copy = {};
+  var keys = Array.prototype.concat.apply(Array.prototype, Array.prototype.slice.call(arguments, 1));
+  forEach(keys, function(key) {
+    if (key in obj) copy[key] = obj[key];
+  });
+  return copy;
+}
+
+// extracted from underscore.js
+// Return a copy of the object omitting the blacklisted properties.
+function omit(obj) {
+  var copy = {};
+  var keys = Array.prototype.concat.apply(Array.prototype, Array.prototype.slice.call(arguments, 1));
+  for (var key in obj) {
+    if (indexOf(keys, key) == -1) copy[key] = obj[key];
+  }
+  return copy;
+}
+
+function pluck(collection, key) {
+  var result = isArray(collection) ? [] : {};
+
+  forEach(collection, function(val, i) {
+    result[i] = isFunction(key) ? key(val) : val[key];
+  });
+  return result;
+}
+
+function filter(collection, callback) {
+  var array = isArray(collection);
+  var result = array ? [] : {};
+  forEach(collection, function(val, i) {
+    if (callback(val, i)) {
+      result[array ? result.length : i] = val;
+    }
+  });
+  return result;
+}
+
+function map(collection, callback) {
+  var result = isArray(collection) ? [] : {};
+
+  forEach(collection, function(val, i) {
+    result[i] = callback(val, i);
+  });
+  return result;
+}
+
+/**
+ * @ngdoc overview
+ * @name ui.router.util
+ *
+ * @description
+ * # ui.router.util sub-module
+ *
+ * This module is a dependency of other sub-modules. Do not include this module as a dependency
+ * in your angular app (use {@link ui.router} module instead).
+ *
+ */
+angular.module('ui.router.util', ['ng']);
+
+/**
+ * @ngdoc overview
+ * @name ui.router.router
+ * 
+ * @requires ui.router.util
+ *
+ * @description
+ * # ui.router.router sub-module
+ *
+ * This module is a dependency of other sub-modules. Do not include this module as a dependency
+ * in your angular app (use {@link ui.router} module instead).
+ */
+angular.module('ui.router.router', ['ui.router.util']);
+
+/**
+ * @ngdoc overview
+ * @name ui.router.state
+ * 
+ * @requires ui.router.router
+ * @requires ui.router.util
+ *
+ * @description
+ * # ui.router.state sub-module
+ *
+ * This module is a dependency of the main ui.router module. Do not include this module as a dependency
+ * in your angular app (use {@link ui.router} module instead).
+ * 
+ */
+angular.module('ui.router.state', ['ui.router.router', 'ui.router.util']);
+
+/**
+ * @ngdoc overview
+ * @name ui.router
+ *
+ * @requires ui.router.state
+ *
+ * @description
+ * # ui.router
+ * 
+ * ## The main module for ui.router 
+ * There are several sub-modules included with the ui.router module, however only this module is needed
+ * as a dependency within your angular app. The other modules are for organization purposes. 
+ *
+ * The modules are:
+ * * ui.router - the main "umbrella" module
+ * * ui.router.router - 
+ * 
+ * *You'll need to include **only** this module as the dependency within your angular app.*
+ * 
+ * <pre>
+ * <!doctype html>
+ * <html ng-app="myApp">
+ * <head>
+ *   <script src="js/angular.js"></script>
+ *   <!-- Include the ui-router script -->
+ *   <script src="js/angular-ui-router.min.js"></script>
+ *   <script>
+ *     // ...and add 'ui.router' as a dependency
+ *     var myApp = angular.module('myApp', ['ui.router']);
+ *   </script>
+ * </head>
+ * <body>
+ * </body>
+ * </html>
+ * </pre>
+ */
+angular.module('ui.router', ['ui.router.state']);
+
+angular.module('ui.router.compat', ['ui.router']);
+
+/**
+ * @ngdoc object
+ * @name ui.router.util.$resolve
+ *
+ * @requires $q
+ * @requires $injector
+ *
+ * @description
+ * Manages resolution of (acyclic) graphs of promises.
+ */
+$Resolve.$inject = ['$q', '$injector'];
+function $Resolve(  $q,    $injector) {
+  
+  var VISIT_IN_PROGRESS = 1,
+      VISIT_DONE = 2,
+      NOTHING = {},
+      NO_DEPENDENCIES = [],
+      NO_LOCALS = NOTHING,
+      NO_PARENT = extend($q.when(NOTHING), { $$promises: NOTHING, $$values: NOTHING });
+  
+
+  /**
+   * @ngdoc function
+   * @name ui.router.util.$resolve#study
+   * @methodOf ui.router.util.$resolve
+   *
+   * @description
+   * Studies a set of invocables that are likely to be used multiple times.
+   * <pre>
+   * $resolve.study(invocables)(locals, parent, self)
+   * </pre>
+   * is equivalent to
+   * <pre>
+   * $resolve.resolve(invocables, locals, parent, self)
+   * </pre>
+   * but the former is more efficient (in fact `resolve` just calls `study` 
+   * internally).
+   *
+   * @param {object} invocables Invocable objects
+   * @return {function} a function to pass in locals, parent and self
+   */
+  this.study = function (invocables) {
+    if (!isObject(invocables)) throw new Error("'invocables' must be an object");
+    var invocableKeys = objectKeys(invocables || {});
+    
+    // Perform a topological sort of invocables to build an ordered plan
+    var plan = [], cycle = [], visited = {};
+    function visit(value, key) {
+      if (visited[key] === VISIT_DONE) return;
+      
+      cycle.push(key);
+      if (visited[key] === VISIT_IN_PROGRESS) {
+        cycle.splice(0, indexOf(cycle, key));
+        throw new Error("Cyclic dependency: " + cycle.join(" -> "));
+      }
+      visited[key] = VISIT_IN_PROGRESS;
+      
+      if (isString(value)) {
+        plan.push(key, [ function() { return $injector.get(value); }], NO_DEPENDENCIES);
+      } else {
+        var params = $injector.annotate(value);
+        forEach(params, function (param) {
+          if (param !== key && invocables.hasOwnProperty(param)) visit(invocables[param], param);
+        });
+        plan.push(key, value, params);
+      }
+      
+      cycle.pop();
+      visited[key] = VISIT_DONE;
+    }
+    forEach(invocables, visit);
+    invocables = cycle = visited = null; // plan is all that's required
+    
+    function isResolve(value) {
+      return isObject(value) && value.then && value.$$promises;
+    }
+    
+    return function (locals, parent, self) {
+      if (isResolve(locals) && self === undefined) {
+        self = parent; parent = locals; locals = null;
+      }
+      if (!locals) locals = NO_LOCALS;
+      else if (!isObject(locals)) {
+        throw new Error("'locals' must be an object");
+      }       
+      if (!parent) parent = NO_PARENT;
+      else if (!isResolve(parent)) {
+        throw new Error("'parent' must be a promise returned by $resolve.resolve()");
+      }
+      
+      // To complete the overall resolution, we have to wait for the parent
+      // promise and for the promise for each invokable in our plan.
+      var resolution = $q.defer(),
+          result = resolution.promise,
+          promises = result.$$promises = {},
+          values = extend({}, locals),
+          wait = 1 + plan.length/3,
+          merged = false;
+          
+      function done() {
+        // Merge parent values we haven't got yet and publish our own $$values
+        if (!--wait) {
+          if (!merged) merge(values, parent.$$values); 
+          result.$$values = values;
+          result.$$promises = result.$$promises || true; // keep for isResolve()
+          delete result.$$inheritedValues;
+          resolution.resolve(values);
+        }
+      }
+      
+      function fail(reason) {
+        result.$$failure = reason;
+        resolution.reject(reason);
+      }
+
+      // Short-circuit if parent has already failed
+      if (isDefined(parent.$$failure)) {
+        fail(parent.$$failure);
+        return result;
+      }
+      
+      if (parent.$$inheritedValues) {
+        merge(values, omit(parent.$$inheritedValues, invocableKeys));
+      }
+
+      // Merge parent values if the parent has already resolved, or merge
+      // parent promises and wait if the parent resolve is still in progress.
+      extend(promises, parent.$$promises);
+      if (parent.$$values) {
+        merged = merge(values, omit(parent.$$values, invocableKeys));
+        result.$$inheritedValues = omit(parent.$$values, invocableKeys);
+        done();
+      } else {
+        if (parent.$$inheritedValues) {
+          result.$$inheritedValues = omit(parent.$$inheritedValues, invocableKeys);
+        }        
+        parent.then(done, fail);
+      }
+      
+      // Process each invocable in the plan, but ignore any where a local of the same name exists.
+      for (var i=0, ii=plan.length; i<ii; i+=3) {
+        if (locals.hasOwnProperty(plan[i])) done();
+        else invoke(plan[i], plan[i+1], plan[i+2]);
+      }
+      
+      function invoke(key, invocable, params) {
+        // Create a deferred for this invocation. Failures will propagate to the resolution as well.
+        var invocation = $q.defer(), waitParams = 0;
+        function onfailure(reason) {
+          invocation.reject(reason);
+          fail(reason);
+        }
+        // Wait for any parameter that we have a promise for (either from parent or from this
+        // resolve; in that case study() will have made sure it's ordered before us in the plan).
+        forEach(params, function (dep) {
+          if (promises.hasOwnProperty(dep) && !locals.hasOwnProperty(dep)) {
+            waitParams++;
+            promises[dep].then(function (result) {
+              values[dep] = result;
+              if (!(--waitParams)) proceed();
+            }, onfailure);
+          }
+        });
+        if (!waitParams) proceed();
+        function proceed() {
+          if (isDefined(result.$$failure)) return;
+          try {
+            invocation.resolve($injector.invoke(invocable, self, values));
+            invocation.promise.then(function (result) {
+              values[key] = result;
+              done();
+            }, onfailure);
+          } catch (e) {
+            onfailure(e);
+          }
+        }
+        // Publish promise synchronously; invocations further down in the plan may depend on it.
+        promises[key] = invocation.promise;
+      }
+      
+      return result;
+    };
+  };
+  
+  /**
+   * @ngdoc function
+   * @name ui.router.util.$resolve#resolve
+   * @methodOf ui.router.util.$resolve
+   *
+   * @description
+   * Resolves a set of invocables. An invocable is a function to be invoked via 
+   * `$injector.invoke()`, and can have an arbitrary number of dependencies. 
+   * An invocable can either return a value directly,
+   * or a `$q` promise. If a promise is returned it will be resolved and the 
+   * resulting value will be used instead. Dependencies of invocables are resolved 
+   * (in this order of precedence)
+   *
+   * - from the specified `locals`
+   * - from another invocable that is part of this `$resolve` call
+   * - from an invocable that is inherited from a `parent` call to `$resolve` 
+   *   (or recursively
+   * - from any ancestor `$resolve` of that parent).
+   *
+   * The return value of `$resolve` is a promise for an object that contains 
+   * (in this order of precedence)
+   *
+   * - any `locals` (if specified)
+   * - the resolved return values of all injectables
+   * - any values inherited from a `parent` call to `$resolve` (if specified)
+   *
+   * The promise will resolve after the `parent` promise (if any) and all promises 
+   * returned by injectables have been resolved. If any invocable 
+   * (or `$injector.invoke`) throws an exception, or if a promise returned by an 
+   * invocable is rejected, the `$resolve` promise is immediately rejected with the 
+   * same error. A rejection of a `parent` promise (if specified) will likewise be 
+   * propagated immediately. Once the `$resolve` promise has been rejected, no 
+   * further invocables will be called.
+   * 
+   * Cyclic dependencies between invocables are not permitted and will caues `$resolve`
+   * to throw an error. As a special case, an injectable can depend on a parameter 
+   * with the same name as the injectable, which will be fulfilled from the `parent` 
+   * injectable of the same name. This allows inherited values to be decorated. 
+   * Note that in this case any other injectable in the same `$resolve` with the same
+   * dependency would see the decorated value, not the inherited value.
+   *
+   * Note that missing dependencies -- unlike cyclic dependencies -- will cause an 
+   * (asynchronous) rejection of the `$resolve` promise rather than a (synchronous) 
+   * exception.
+   *
+   * Invocables are invoked eagerly as soon as all dependencies are available. 
+   * This is true even for dependencies inherited from a `parent` call to `$resolve`.
+   *
+   * As a special case, an invocable can be a string, in which case it is taken to 
+   * be a service name to be passed to `$injector.get()`. This is supported primarily 
+   * for backwards-compatibility with the `resolve` property of `$routeProvider` 
+   * routes.
+   *
+   * @param {object} invocables functions to invoke or 
+   * `$injector` services to fetch.
+   * @param {object} locals  values to make available to the injectables
+   * @param {object} parent  a promise returned by another call to `$resolve`.
+   * @param {object} self  the `this` for the invoked methods
+   * @return {object} Promise for an object that contains the resolved return value
+   * of all invocables, as well as any inherited and local values.
+   */
+  this.resolve = function (invocables, locals, parent, self) {
+    return this.study(invocables)(locals, parent, self);
+  };
+}
+
+angular.module('ui.router.util').service('$resolve', $Resolve);
+
+
+/**
+ * @ngdoc object
+ * @name ui.router.util.$templateFactory
+ *
+ * @requires $http
+ * @requires $templateCache
+ * @requires $injector
+ *
+ * @description
+ * Service. Manages loading of templates.
+ */
+$TemplateFactory.$inject = ['$http', '$templateCache', '$injector'];
+function $TemplateFactory(  $http,   $templateCache,   $injector) {
+
+  /**
+   * @ngdoc function
+   * @name ui.router.util.$templateFactory#fromConfig
+   * @methodOf ui.router.util.$templateFactory
+   *
+   * @description
+   * Creates a template from a configuration object. 
+   *
+   * @param {object} config Configuration object for which to load a template. 
+   * The following properties are search in the specified order, and the first one 
+   * that is defined is used to create the template:
+   *
+   * @param {string|object} config.template html string template or function to 
+   * load via {@link ui.router.util.$templateFactory#fromString fromString}.
+   * @param {string|object} config.templateUrl url to load or a function returning 
+   * the url to load via {@link ui.router.util.$templateFactory#fromUrl fromUrl}.
+   * @param {Function} config.templateProvider function to invoke via 
+   * {@link ui.router.util.$templateFactory#fromProvider fromProvider}.
+   * @param {object} params  Parameters to pass to the template function.
+   * @param {object} locals Locals to pass to `invoke` if the template is loaded 
+   * via a `templateProvider`. Defaults to `{ params: params }`.
+   *
+   * @return {string|object}  The template html as a string, or a promise for 
+   * that string,or `null` if no template is configured.
+   */
+  this.fromConfig = function (config, params, locals) {
+    return (
+      isDefined(config.template) ? this.fromString(config.template, params) :
+      isDefined(config.templateUrl) ? this.fromUrl(config.templateUrl, params) :
+      isDefined(config.templateProvider) ? this.fromProvider(config.templateProvider, params, locals) :
+      null
+    );
+  };
+
+  /**
+   * @ngdoc function
+   * @name ui.router.util.$templateFactory#fromString
+   * @methodOf ui.router.util.$templateFactory
+   *
+   * @description
+   * Creates a template from a string or a function returning a string.
+   *
+   * @param {string|object} template html template as a string or function that 
+   * returns an html template as a string.
+   * @param {object} params Parameters to pass to the template function.
+   *
+   * @return {string|object} The template html as a string, or a promise for that 
+   * string.
+   */
+  this.fromString = function (template, params) {
+    return isFunction(template) ? template(params) : template;
+  };
+
+  /**
+   * @ngdoc function
+   * @name ui.router.util.$templateFactory#fromUrl
+   * @methodOf ui.router.util.$templateFactory
+   * 
+   * @description
+   * Loads a template from the a URL via `$http` and `$templateCache`.
+   *
+   * @param {string|Function} url url of the template to load, or a function 
+   * that returns a url.
+   * @param {Object} params Parameters to pass to the url function.
+   * @return {string|Promise.<string>} The template html as a string, or a promise 
+   * for that string.
+   */
+  this.fromUrl = function (url, params) {
+    if (isFunction(url)) url = url(params);
+    if (url == null) return null;
+    else return $http
+        .get(url, { cache: $templateCache, headers: { Accept: 'text/html' }})
+        .then(function(response) { return response.data; });
+  };
+
+  /**
+   * @ngdoc function
+   * @name ui.router.util.$templateFactory#fromProvider
+   * @methodOf ui.router.util.$templateFactory
+   *
+   * @description
+   * Creates a template by invoking an injectable provider function.
+   *
+   * @param {Function} provider Function to invoke via `$injector.invoke`
+   * @param {Object} params Parameters for the template.
+   * @param {Object} locals Locals to pass to `invoke`. Defaults to 
+   * `{ params: params }`.
+   * @return {string|Promise.<string>} The template html as a string, or a promise 
+   * for that string.
+   */
+  this.fromProvider = function (provider, params, locals) {
+    return $injector.invoke(provider, null, locals || { params: params });
+  };
+}
+
+angular.module('ui.router.util').service('$templateFactory', $TemplateFactory);
+
+var $$UMFP; // reference to $UrlMatcherFactoryProvider
+
+/**
+ * @ngdoc object
+ * @name ui.router.util.type:UrlMatcher
+ *
+ * @description
+ * Matches URLs against patterns and extracts named parameters from the path or the search
+ * part of the URL. A URL pattern consists of a path pattern, optionally followed by '?' and a list
+ * of search parameters. Multiple search parameter names are separated by '&'. Search parameters
+ * do not influence whether or not a URL is matched, but their values are passed through into
+ * the matched parameters returned by {@link ui.router.util.type:UrlMatcher#methods_exec exec}.
+ *
+ * Path parameter placeholders can be specified using simple colon/catch-all syntax or curly brace
+ * syntax, which optionally allows a regular expression for the parameter to be specified:
+ *
+ * * `':'` name - colon placeholder
+ * * `'*'` name - catch-all placeholder
+ * * `'{' name '}'` - curly placeholder
+ * * `'{' name ':' regexp|type '}'` - curly placeholder with regexp or type name. Should the
+ *   regexp itself contain curly braces, they must be in matched pairs or escaped with a backslash.
+ *
+ * Parameter names may contain only word characters (latin letters, digits, and underscore) and
+ * must be unique within the pattern (across both path and search parameters). For colon
+ * placeholders or curly placeholders without an explicit regexp, a path parameter matches any
+ * number of characters other than '/'. For catch-all placeholders the path parameter matches
+ * any number of characters.
+ *
+ * Examples:
+ *
+ * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for
+ *   trailing slashes, and patterns have to match the entire path, not just a prefix.
+ * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or
+ *   '/user/bob/details'. The second path segment will be captured as the parameter 'id'.
+ * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax.
+ * * `'/user/{id:[^/]*}'` - Same as the previous example.
+ * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id
+ *   parameter consists of 1 to 8 hex digits.
+ * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the
+ *   path into the parameter 'path'.
+ * * `'/files/*path'` - ditto.
+ * * `'/calendar/{start:date}'` - Matches "/calendar/2014-11-12" (because the pattern defined
+ *   in the built-in  `date` Type matches `2014-11-12`) and provides a Date object in $stateParams.start
+ *
+ * @param {string} pattern  The pattern to compile into a matcher.
+ * @param {Object} config  A configuration object hash:
+ * @param {Object=} parentMatcher Used to concatenate the pattern/config onto
+ *   an existing UrlMatcher
+ *
+ * * `caseInsensitive` - `true` if URL matching should be case insensitive, otherwise `false`, the default value (for backward compatibility) is `false`.
+ * * `strict` - `false` if matching against a URL with a trailing slash should be treated as equivalent to a URL without a trailing slash, the default value is `true`.
+ *
+ * @property {string} prefix  A static prefix of this pattern. The matcher guarantees that any
+ *   URL matching this matcher (i.e. any string for which {@link ui.router.util.type:UrlMatcher#methods_exec exec()} returns
+ *   non-null) will start with this prefix.
+ *
+ * @property {string} source  The pattern that was passed into the constructor
+ *
+ * @property {string} sourcePath  The path portion of the source property
+ *
+ * @property {string} sourceSearch  The search portion of the source property
+ *
+ * @property {string} regex  The constructed regex that will be used to match against the url when
+ *   it is time to determine which url will match.
+ *
+ * @returns {Object}  New `UrlMatcher` object
+ */
+function UrlMatcher(pattern, config, parentMatcher) {
+  config = extend({ params: {} }, isObject(config) ? config : {});
+
+  // Find all placeholders and create a compiled pattern, using either classic or curly syntax:
+  //   '*' name
+  //   ':' name
+  //   '{' name '}'
+  //   '{' name ':' regexp '}'
+  // The regular expression is somewhat complicated due to the need to allow curly braces
+  // inside the regular expression. The placeholder regexp breaks down as follows:
+  //    ([:*])([\w\[\]]+)              - classic placeholder ($1 / $2) (search version has - for snake-case)
+  //    \{([\w\[\]]+)(?:\:( ... ))?\}  - curly brace placeholder ($3) with optional regexp/type ... ($4) (search version has - for snake-case
+  //    (?: ... | ... | ... )+         - the regexp consists of any number of atoms, an atom being either
+  //    [^{}\\]+                       - anything other than curly braces or backslash
+  //    \\.                            - a backslash escape
+  //    \{(?:[^{}\\]+|\\.)*\}          - a matched set of curly braces containing other atoms
+  var placeholder       = /([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,
+      searchPlaceholder = /([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,
+      compiled = '^', last = 0, m,
+      segments = this.segments = [],
+      parentParams = parentMatcher ? parentMatcher.params : {},
+      params = this.params = parentMatcher ? parentMatcher.params.$$new() : new $$UMFP.ParamSet(),
+      paramNames = [];
+
+  function addParameter(id, type, config, location) {
+    paramNames.push(id);
+    if (parentParams[id]) return parentParams[id];
+    if (!/^\w+(-+\w+)*(?:\[\])?$/.test(id)) throw new Error("Invalid parameter name '" + id + "' in pattern '" + pattern + "'");
+    if (params[id]) throw new Error("Duplicate parameter name '" + id + "' in pattern '" + pattern + "'");
+    params[id] = new $$UMFP.Param(id, type, config, location);
+    return params[id];
+  }
+
+  function quoteRegExp(string, pattern, squash, optional) {
+    var surroundPattern = ['',''], result = string.replace(/[\\\[\]\^$*+?.()|{}]/g, "\\$&");
+    if (!pattern) return result;
+    switch(squash) {
+      case false: surroundPattern = ['(', ')' + (optional ? "?" : "")]; break;
+      case true:  surroundPattern = ['?(', ')?']; break;
+      default:    surroundPattern = ['(' + squash + "|", ')?']; break;
+    }
+    return result + surroundPattern[0] + pattern + surroundPattern[1];
+  }
+
+  this.source = pattern;
+
+  // Split into static segments separated by path parameter placeholders.
+  // The number of segments is always 1 more than the number of parameters.
+  function matchDetails(m, isSearch) {
+    var id, regexp, segment, type, cfg, arrayMode;
+    id          = m[2] || m[3]; // IE[78] returns '' for unmatched groups instead of null
+    cfg         = config.params[id];
+    segment     = pattern.substring(last, m.index);
+    regexp      = isSearch ? m[4] : m[4] || (m[1] == '*' ? '.*' : null);
+    type        = $$UMFP.type(regexp || "string") || inherit($$UMFP.type("string"), { pattern: new RegExp(regexp, config.caseInsensitive ? 'i' : undefined) });
+    return {
+      id: id, regexp: regexp, segment: segment, type: type, cfg: cfg
+    };
+  }
+
+  var p, param, segment;
+  while ((m = placeholder.exec(pattern))) {
+    p = matchDetails(m, false);
+    if (p.segment.indexOf('?') >= 0) break; // we're into the search part
+
+    param = addParameter(p.id, p.type, p.cfg, "path");
+    compiled += quoteRegExp(p.segment, param.type.pattern.source, param.squash, param.isOptional);
+    segments.push(p.segment);
+    last = placeholder.lastIndex;
+  }
+  segment = pattern.substring(last);
+
+  // Find any search parameter names and remove them from the last segment
+  var i = segment.indexOf('?');
+
+  if (i >= 0) {
+    var search = this.sourceSearch = segment.substring(i);
+    segment = segment.substring(0, i);
+    this.sourcePath = pattern.substring(0, last + i);
+
+    if (search.length > 0) {
+      last = 0;
+      while ((m = searchPlaceholder.exec(search))) {
+        p = matchDetails(m, true);
+        param = addParameter(p.id, p.type, p.cfg, "search");
+        last = placeholder.lastIndex;
+        // check if ?&
+      }
+    }
+  } else {
+    this.sourcePath = pattern;
+    this.sourceSearch = '';
+  }
+
+  compiled += quoteRegExp(segment) + (config.strict === false ? '\/?' : '') + '$';
+  segments.push(segment);
+
+  this.regexp = new RegExp(compiled, config.caseInsensitive ? 'i' : undefined);
+  this.prefix = segments[0];
+  this.$$paramNames = paramNames;
+}
+
+/**
+ * @ngdoc function
+ * @name ui.router.util.type:UrlMatcher#concat
+ * @methodOf ui.router.util.type:UrlMatcher
+ *
+ * @description
+ * Returns a new matcher for a pattern constructed by appending the path part and adding the
+ * search parameters of the specified pattern to this pattern. The current pattern is not
+ * modified. This can be understood as creating a pattern for URLs that are relative to (or
+ * suffixes of) the current pattern.
+ *
+ * @example
+ * The following two matchers are equivalent:
+ * <pre>
+ * new UrlMatcher('/user/{id}?q').concat('/details?date');
+ * new UrlMatcher('/user/{id}/details?q&date');
+ * </pre>
+ *
+ * @param {string} pattern  The pattern to append.
+ * @param {Object} config  An object hash of the configuration for the matcher.
+ * @returns {UrlMatcher}  A matcher for the concatenated pattern.
+ */
+UrlMatcher.prototype.concat = function (pattern, config) {
+  // Because order of search parameters is irrelevant, we can add our own search
+  // parameters to the end of the new pattern. Parse the new pattern by itself
+  // and then join the bits together, but it's much easier to do this on a string level.
+  var defaultConfig = {
+    caseInsensitive: $$UMFP.caseInsensitive(),
+    strict: $$UMFP.strictMode(),
+    squash: $$UMFP.defaultSquashPolicy()
+  };
+  return new UrlMatcher(this.sourcePath + pattern + this.sourceSearch, extend(defaultConfig, config), this);
+};
+
+UrlMatcher.prototype.toString = function () {
+  return this.source;
+};
+
+/**
+ * @ngdoc function
+ * @name ui.router.util.type:UrlMatcher#exec
+ * @methodOf ui.router.util.type:UrlMatcher
+ *
+ * @description
+ * Tests the specified path against this matcher, and returns an object containing the captured
+ * parameter values, or null if the path does not match. The returned object contains the values
+ * of any search parameters that are mentioned in the pattern, but their value may be null if
+ * they are not present in `searchParams`. This means that search parameters are always treated
+ * as optional.
+ *
+ * @example
+ * <pre>
+ * new UrlMatcher('/user/{id}?q&r').exec('/user/bob', {
+ *   x: '1', q: 'hello'
+ * });
+ * // returns { id: 'bob', q: 'hello', r: null }
+ * </pre>
+ *
+ * @param {string} path  The URL path to match, e.g. `$location.path()`.
+ * @param {Object} searchParams  URL search parameters, e.g. `$location.search()`.
+ * @returns {Object}  The captured parameter values.
+ */
+UrlMatcher.prototype.exec = function (path, searchParams) {
+  var m = this.regexp.exec(path);
+  if (!m) return null;
+  searchParams = searchParams || {};
+
+  var paramNames = this.parameters(), nTotal = paramNames.length,
+    nPath = this.segments.length - 1,
+    values = {}, i, j, cfg, paramName;
+
+  if (nPath !== m.length - 1) throw new Error("Unbalanced capture group in route '" + this.source + "'");
+
+  function decodePathArray(string) {
+    function reverseString(str) { return str.split("").reverse().join(""); }
+    function unquoteDashes(str) { return str.replace(/\\-/g, "-"); }
+
+    var split = reverseString(string).split(/-(?!\\)/);
+    var allReversed = map(split, reverseString);
+    return map(allReversed, unquoteDashes).reverse();
+  }
+
+  for (i = 0; i < nPath; i++) {
+    paramName = paramNames[i];
+    var param = this.params[paramName];
+    var paramVal = m[i+1];
+    // if the param value matches a pre-replace pair, replace the value before decoding.
+    for (j = 0; j < param.replace; j++) {
+      if (param.replace[j].from === paramVal) paramVal = param.replace[j].to;
+    }
+    if (paramVal && param.array === true) paramVal = decodePathArray(paramVal);
+    values[paramName] = param.value(paramVal);
+  }
+  for (/**/; i < nTotal; i++) {
+    paramName = paramNames[i];
+    values[paramName] = this.params[paramName].value(searchParams[paramName]);
+  }
+
+  return values;
+};
+
+/**
+ * @ngdoc function
+ * @name ui.router.util.type:UrlMatcher#parameters
+ * @methodOf ui.router.util.type:UrlMatcher
+ *
+ * @description
+ * Returns the names of all path and search parameters of this pattern in an unspecified order.
+ *
+ * @returns {Array.<string>}  An array of parameter names. Must be treated as read-only. If the
+ *    pattern has no parameters, an empty array is returned.
+ */
+UrlMatcher.prototype.parameters = function (param) {
+  if (!isDefined(param)) return this.$$paramNames;
+  return this.params[param] || null;
+};
+
+/**
+ * @ngdoc function
+ * @name ui.router.util.type:UrlMatcher#validate
+ * @methodOf ui.router.util.type:UrlMatcher
+ *
+ * @description
+ * Checks an object hash of parameters to validate their correctness according to the parameter
+ * types of this `UrlMatcher`.
+ *
+ * @param {Object} params The object hash of parameters to validate.
+ * @returns {boolean} Returns `true` if `params` validates, otherwise `false`.
+ */
+UrlMatcher.prototype.validates = function (params) {
+  return this.params.$$validates(params);
+};
+
+/**
+ * @ngdoc function
+ * @name ui.router.util.type:UrlMatcher#format
+ * @methodOf ui.router.util.type:UrlMatcher
+ *
+ * @description
+ * Creates a URL that matches this pattern by substituting the specified values
+ * for the path and search parameters. Null values for path parameters are
+ * treated as empty strings.
+ *
+ * @example
+ * <pre>
+ * new UrlMatcher('/user/{id}?q').format({ id:'bob', q:'yes' });
+ * // returns '/user/bob?q=yes'
+ * </pre>
+ *
+ * @param {Object} values  the values to substitute for the parameters in this pattern.
+ * @returns {string}  the formatted URL (path and optionally search part).
+ */
+UrlMatcher.prototype.format = function (values) {
+  values = values || {};
+  var segments = this.segments, params = this.parameters(), paramset = this.params;
+  if (!this.validates(values)) return null;
+
+  var i, search = false, nPath = segments.length - 1, nTotal = params.length, result = segments[0];
+
+  function encodeDashes(str) { // Replace dashes with encoded "\-"
+    return encodeURIComponent(str).replace(/-/g, function(c) { return '%5C%' + c.charCodeAt(0).toString(16).toUpperCase(); });
+  }
+
+  for (i = 0; i < nTotal; i++) {
+    var isPathParam = i < nPath;
+    var name = params[i], param = paramset[name], value = param.value(values[name]);
+    var isDefaultValue = param.isOptional && param.type.equals(param.value(), value);
+    var squash = isDefaultValue ? param.squash : false;
+    var encoded = param.type.encode(value);
+
+    if (isPathParam) {
+      var nextSegment = segments[i + 1];
+      if (squash === false) {
+        if (encoded != null) {
+          if (isArray(encoded)) {
+            result += map(encoded, encodeDashes).join("-");
+          } else {
+            result += encodeURIComponent(encoded);
+          }
+        }
+        result += nextSegment;
+      } else if (squash === true) {
+        var capture = result.match(/\/$/) ? /\/?(.*)/ : /(.*)/;
+        result += nextSegment.match(capture)[1];
+      } else if (isString(squash)) {
+        result += squash + nextSegment;
+      }
+    } else {
+      if (encoded == null || (isDefaultValue && squash !== false)) continue;
+      if (!isArray(encoded)) encoded = [ encoded ];
+      encoded = map(encoded, encodeURIComponent).join('&' + name + '=');
+      result += (search ? '&' : '?') + (name + '=' + encoded);
+      search = true;
+    }
+  }
+
+  return result;
+};
+
+/**
+ * @ngdoc object
+ * @name ui.router.util.type:Type
+ *
+ * @description
+ * Implements an interface to define custom parameter types that can be decoded from and encoded to
+ * string parameters matched in a URL. Used by {@link ui.router.util.type:UrlMatcher `UrlMatcher`}
+ * objects when matching or formatting URLs, or comparing or validating parameter values.
+ *
+ * See {@link ui.router.util.$urlMatcherFactory#methods_type `$urlMatcherFactory#type()`} for more
+ * information on registering custom types.
+ *
+ * @param {Object} config  A configuration object which contains the custom type definition.  The object's
+ *        properties will override the default methods and/or pattern in `Type`'s public interface.
+ * @example
+ * <pre>
+ * {
+ *   decode: function(val) { return parseInt(val, 10); },
+ *   encode: function(val) { return val && val.toString(); },
+ *   equals: function(a, b) { return this.is(a) && a === b; },
+ *   is: function(val) { return angular.isNumber(val) isFinite(val) && val % 1 === 0; },
+ *   pattern: /\d+/
+ * }
+ * </pre>
+ *
+ * @property {RegExp} pattern The regular expression pattern used to match values of this type when
+ *           coming from a substring of a URL.
+ *
+ * @returns {Object}  Returns a new `Type` object.
+ */
+function Type(config) {
+  extend(this, config);
+}
+
+/**
+ * @ngdoc function
+ * @name ui.router.util.type:Type#is
+ * @methodOf ui.router.util.type:Type
+ *
+ * @description
+ * Detects whether a value is of a particular type. Accepts a native (decoded) value
+ * and determines whether it matches the current `Type` object.
+ *
+ * @param {*} val  The value to check.
+ * @param {string} key  Optional. If the type check is happening in the context of a specific
+ *        {@link ui.router.util.type:UrlMatcher `UrlMatcher`} object, this is the name of the
+ *        parameter in which `val` is stored. Can be used for meta-programming of `Type` objects.
+ * @returns {Boolean}  Returns `true` if the value matches the type, otherwise `false`.
+ */
+Type.prototype.is = function(val, key) {
+  return true;
+};
+
+/**
+ * @ngdoc function
+ * @name ui.router.util.type:Type#encode
+ * @methodOf ui.router.util.type:Type
+ *
+ * @description
+ * Encodes a custom/native type value to a string that can be embedded in a URL. Note that the
+ * return value does *not* need to be URL-safe (i.e. passed through `encodeURIComponent()`), it
+ * only needs to be a representation of `val` that has been coerced to a string.
+ *
+ * @param {*} val  The value to encode.
+ * @param {string} key  The name of the parameter in which `val` is stored. Can be used for
+ *        meta-programming of `Type` objects.
+ * @returns {string}  Returns a string representation of `val` that can be encoded in a URL.
+ */
+Type.prototype.encode = function(val, key) {
+  return val;
+};
+
+/**
+ * @ngdoc function
+ * @name ui.router.util.type:Type#decode
+ * @methodOf ui.router.util.type:Type
+ *
+ * @description
+ * Converts a parameter value (from URL string or transition param) to a custom/native value.
+ *
+ * @param {string} val  The URL parameter value to decode.
+ * @param {string} key  The name of the parameter in which `val` is stored. Can be used for
+ *        meta-programming of `Type` objects.
+ * @returns {*}  Returns a custom representation of the URL parameter value.
+ */
+Type.prototype.decode = function(val, key) {
+  return val;
+};
+
+/**
+ * @ngdoc function
+ * @name ui.router.util.type:Type#equals
+ * @methodOf ui.router.util.type:Type
+ *
+ * @description
+ * Determines whether two decoded values are equivalent.
+ *
+ * @param {*} a  A value to compare against.
+ * @param {*} b  A value to compare against.
+ * @returns {Boolean}  Returns `true` if the values are equivalent/equal, otherwise `false`.
+ */
+Type.prototype.equals = function(a, b) {
+  return a == b;
+};
+
+Type.prototype.$subPattern = function() {
+  var sub = this.pattern.toString();
+  return sub.substr(1, sub.length - 2);
+};
+
+Type.prototype.pattern = /.*/;
+
+Type.prototype.toString = function() { return "{Type:" + this.name + "}"; };
+
+/** Given an encoded string, or a decoded object, returns a decoded object */
+Type.prototype.$normalize = function(val) {
+  return this.is(val) ? val : this.decode(val);
+};
+
+/*
+ * Wraps an existing custom Type as an array of Type, depending on 'mode'.
+ * e.g.:
+ * - urlmatcher pattern "/path?{queryParam[]:int}"
+ * - url: "/path?queryParam=1&queryParam=2
+ * - $stateParams.queryParam will be [1, 2]
+ * if `mode` is "auto", then
+ * - url: "/path?queryParam=1 will create $stateParams.queryParam: 1
+ * - url: "/path?queryParam=1&queryParam=2 will create $stateParams.queryParam: [1, 2]
+ */
+Type.prototype.$asArray = function(mode, isSearch) {
+  if (!mode) return this;
+  if (mode === "auto" && !isSearch) throw new Error("'auto' array mode is for query parameters only");
+
+  function ArrayType(type, mode) {
+    function bindTo(type, callbackName) {
+      return function() {
+        return type[callbackName].apply(type, arguments);
+      };
+    }
+
+    // Wrap non-array value as array
+    function arrayWrap(val) { return isArray(val) ? val : (isDefined(val) ? [ val ] : []); }
+    // Unwrap array value for "auto" mode. Return undefined for empty array.
+    function arrayUnwrap(val) {
+      switch(val.length) {
+        case 0: return undefined;
+        case 1: return mode === "auto" ? val[0] : val;
+        default: return val;
+      }
+    }
+    function falsey(val) { return !val; }
+
+    // Wraps type (.is/.encode/.decode) functions to operate on each value of an array
+    function arrayHandler(callback, allTruthyMode) {
+      return function handleArray(val) {
+        val = arrayWrap(val);
+        var result = map(val, callback);
+        if (allTruthyMode === true)
+          return filter(result, falsey).length === 0;
+        return arrayUnwrap(result);
+      };
+    }
+
+    // Wraps type (.equals) functions to operate on each value of an array
+    function arrayEqualsHandler(callback) {
+      return function handleArray(val1, val2) {
+        var left = arrayWrap(val1), right = arrayWrap(val2);
+        if (left.length !== right.length) return false;
+        for (var i = 0; i < left.length; i++) {
+          if (!callback(left[i], right[i])) return false;
+        }
+        return true;
+      };
+    }
+
+    this.encode = arrayHandler(bindTo(type, 'encode'));
+    this.decode = arrayHandler(bindTo(type, 'decode'));
+    this.is     = arrayHandler(bindTo(type, 'is'), true);
+    this.equals = arrayEqualsHandler(bindTo(type, 'equals'));
+    this.pattern = type.pattern;
+    this.$normalize = arrayHandler(bindTo(type, '$normalize'));
+    this.name = type.name;
+    this.$arrayMode = mode;
+  }
+
+  return new ArrayType(this, mode);
+};
+
+
+
+/**
+ * @ngdoc object
+ * @name ui.router.util.$urlMatcherFactory
+ *
+ * @description
+ * Factory for {@link ui.router.util.type:UrlMatcher `UrlMatcher`} instances. The factory
+ * is also available to providers under the name `$urlMatcherFactoryProvider`.
+ */
+function $UrlMatcherFactory() {
+  $$UMFP = this;
+
+  var isCaseInsensitive = false, isStrictMode = true, defaultSquashPolicy = false;
+
+  function valToString(val) { return val != null ? val.toString().replace(/\//g, "%2F") : val; }
+  function valFromString(val) { return val != null ? val.toString().replace(/%2F/g, "/") : val; }
+
+  var $types = {}, enqueue = true, typeQueue = [], injector, defaultTypes = {
+    string: {
+      encode: valToString,
+      decode: valFromString,
+      // TODO: in 1.0, make string .is() return false if value is undefined/null by default.
+      // In 0.2.x, string params are optional by default for backwards compat
+      is: function(val) { return val == null || !isDefined(val) || typeof val === "string"; },
+      pattern: /[^/]*/
+    },
+    int: {
+      encode: valToString,
+      decode: function(val) { return parseInt(val, 10); },
+      is: function(val) { return isDefined(val) && this.decode(val.toString()) === val; },
+      pattern: /\d+/
+    },
+    bool: {
+      encode: function(val) { return val ? 1 : 0; },
+      decode: function(val) { return parseInt(val, 10) !== 0; },
+      is: function(val) { return val === true || val === false; },
+      pattern: /0|1/
+    },
+    date: {
+      encode: function (val) {
+        if (!this.is(val))
+          return undefined;
+        return [ val.getFullYear(),
+          ('0' + (val.getMonth() + 1)).slice(-2),
+          ('0' + val.getDate()).slice(-2)
+        ].join("-");
+      },
+      decode: function (val) {
+        if (this.is(val)) return val;
+        var match = this.capture.exec(val);
+        return match ? new Date(match[1], match[2] - 1, match[3]) : undefined;
+      },
+      is: function(val) { return val instanceof Date && !isNaN(val.valueOf()); },
+      equals: function (a, b) { return this.is(a) && this.is(b) && a.toISOString() === b.toISOString(); },
+      pattern: /[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,
+      capture: /([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/
+    },
+    json: {
+      encode: angular.toJson,
+      decode: angular.fromJson,
+      is: angular.isObject,
+      equals: angular.equals,
+      pattern: /[^/]*/
+    },
+    any: { // does not encode/decode
+      encode: angular.identity,
+      decode: angular.identity,
+      equals: angular.equals,
+      pattern: /.*/
+    }
+  };
+
+  function getDefaultConfig() {
+    return {
+      strict: isStrictMode,
+      caseInsensitive: isCaseInsensitive
+    };
+  }
+
+  function isInjectable(value) {
+    return (isFunction(value) || (isArray(value) && isFunction(value[value.length - 1])));
+  }
+
+  /**
+   * [Internal] Get the default value of a parameter, which may be an injectable function.
+   */
+  $UrlMatcherFactory.$$getDefaultValue = function(config) {
+    if (!isInjectable(config.value)) return config.value;
+    if (!injector) throw new Error("Injectable functions cannot be called at configuration time");
+    return injector.invoke(config.value);
+  };
+
+  /**
+   * @ngdoc function
+   * @name ui.router.util.$urlMatcherFactory#caseInsensitive
+   * @methodOf ui.router.util.$urlMatcherFactory
+   *
+   * @description
+   * Defines whether URL matching should be case sensitive (the default behavior), or not.
+   *
+   * @param {boolean} value `false` to match URL in a case sensitive manner; otherwise `true`;
+   * @returns {boolean} the current value of caseInsensitive
+   */
+  this.caseInsensitive = function(value) {
+    if (isDefined(value))
+      isCaseInsensitive = value;
+    return isCaseInsensitive;
+  };
+
+  /**
+   * @ngdoc function
+   * @name ui.router.util.$urlMatcherFactory#strictMode
+   * @methodOf ui.router.util.$urlMatcherFactory
+   *
+   * @description
+   * Defines whether URLs should match trailing slashes, or not (the default behavior).
+   *
+   * @param {boolean=} value `false` to match trailing slashes in URLs, otherwise `true`.
+   * @returns {boolean} the current value of strictMode
+   */
+  this.strictMode = function(value) {
+    if (isDefined(value))
+      isStrictMode = value;
+    return isStrictMode;
+  };
+
+  /**
+   * @ngdoc function
+   * @name ui.router.util.$urlMatcherFactory#defaultSquashPolicy
+   * @methodOf ui.router.util.$urlMatcherFactory
+   *
+   * @description
+   * Sets the default behavior when generating or matching URLs with default parameter values.
+   *
+   * @param {string} value A string that defines the default parameter URL squashing behavior.
+   *    `nosquash`: When generating an href with a default parameter value, do not squash the parameter value from the URL
+   *    `slash`: When generating an href with a default parameter value, squash (remove) the parameter value, and, if the
+   *             parameter is surrounded by slashes, squash (remove) one slash from the URL
+   *    any other string, e.g. "~": When generating an href with a default parameter value, squash (remove)
+   *             the parameter value from the URL and replace it with this string.
+   */
+  this.defaultSquashPolicy = function(value) {
+    if (!isDefined(value)) return defaultSquashPolicy;
+    if (value !== true && value !== false && !isString(value))
+      throw new Error("Invalid squash policy: " + value + ". Valid policies: false, true, arbitrary-string");
+    defaultSquashPolicy = value;
+    return value;
+  };
+
+  /**
+   * @ngdoc function
+   * @name ui.router.util.$urlMatcherFactory#compile
+   * @methodOf ui.router.util.$urlMatcherFactory
+   *
+   * @description
+   * Creates a {@link ui.router.util.type:UrlMatcher `UrlMatcher`} for the specified pattern.
+   *
+   * @param {string} pattern  The URL pattern.
+   * @param {Object} config  The config object hash.
+   * @returns {UrlMatcher}  The UrlMatcher.
+   */
+  this.compile = function (pattern, config) {
+    return new UrlMatcher(pattern, extend(getDefaultConfig(), config));
+  };
+
+  /**
+   * @ngdoc function
+   * @name ui.router.util.$urlMatcherFactory#isMatcher
+   * @methodOf ui.router.util.$urlMatcherFactory
+   *
+   * @description
+   * Returns true if the specified object is a `UrlMatcher`, or false otherwise.
+   *
+   * @param {Object} object  The object to perform the type check against.
+   * @returns {Boolean}  Returns `true` if the object matches the `UrlMatcher` interface, by
+   *          implementing all the same methods.
+   */
+  this.isMatcher = function (o) {
+    if (!isObject(o)) return false;
+    var result = true;
+
+    forEach(UrlMatcher.prototype, function(val, name) {
+      if (isFunction(val)) {
+        result = result && (isDefined(o[name]) && isFunction(o[name]));
+      }
+    });
+    return result;
+  };
+
+  /**
+   * @ngdoc function
+   * @name ui.router.util.$urlMatcherFactory#type
+   * @methodOf ui.router.util.$urlMatcherFactory
+   *
+   * @description
+   * Registers a custom {@link ui.router.util.type:Type `Type`} object that can be used to
+   * generate URLs with typed parameters.
+   *
+   * @param {string} name  The type name.
+   * @param {Object|Function} definition   The type definition. See
+   *        {@link ui.router.util.type:Type `Type`} for information on the values accepted.
+   * @param {Object|Function} definitionFn (optional) A function that is injected before the app
+   *        runtime starts.  The result of this function is merged into the existing `definition`.
+   *        See {@link ui.router.util.type:Type `Type`} for information on the values accepted.
+   *
+   * @returns {Object}  Returns `$urlMatcherFactoryProvider`.
+   *
+   * @example
+   * This is a simple example of a custom type that encodes and decodes items from an
+   * array, using the array index as the URL-encoded value:
+   *
+   * <pre>
+   * var list = ['John', 'Paul', 'George', 'Ringo'];
+   *
+   * $urlMatcherFactoryProvider.type('listItem', {
+   *   encode: function(item) {
+   *     // Represent the list item in the URL using its corresponding index
+   *     return list.indexOf(item);
+   *   },
+   *   decode: function(item) {
+   *     // Look up the list item by index
+   *     return list[parseInt(item, 10)];
+   *   },
+   *   is: function(item) {
+   *     // Ensure the item is valid by checking to see that it appears
+   *     // in the list
+   *     return list.indexOf(item) > -1;
+   *   }
+   * });
+   *
+   * $stateProvider.state('list', {
+   *   url: "/list/{item:listItem}",
+   *   controller: function($scope, $stateParams) {
+   *     console.log($stateParams.item);
+   *   }
+   * });
+   *
+   * // ...
+   *
+   * // Changes URL to '/list/3', logs "Ringo" to the console
+   * $state.go('list', { item: "Ringo" });
+   * </pre>
+   *
+   * This is a more complex example of a type that relies on dependency injection to
+   * interact with services, and uses the parameter name from the URL to infer how to
+   * handle encoding and decoding parameter values:
+   *
+   * <pre>
+   * // Defines a custom type that gets a value from a service,
+   * // where each service gets different types of values from
+   * // a backend API:
+   * $urlMatcherFactoryProvider.type('dbObject', {}, function(Users, Posts) {
+   *
+   *   // Matches up services to URL parameter names
+   *   var services = {
+   *     user: Users,
+   *     post: Posts
+   *   };
+   *
+   *   return {
+   *     encode: function(object) {
+   *       // Represent the object in the URL using its unique ID
+   *       return object.id;
+   *     },
+   *     decode: function(value, key) {
+   *       // Look up the object by ID, using the parameter
+   *       // name (key) to call the correct service
+   *       return services[key].findById(value);
+   *     },
+   *     is: function(object, key) {
+   *       // Check that object is a valid dbObject
+   *       return angular.isObject(object) && object.id && services[key];
+   *     }
+   *     equals: function(a, b) {
+   *       // Check the equality of decoded objects by comparing
+   *       // their unique IDs
+   *       return a.id === b.id;
+   *     }
+   *   };
+   * });
+   *
+   * // In a config() block, you can then attach URLs with
+   * // type-annotated parameters:
+   * $stateProvider.state('users', {
+   *   url: "/users",
+   *   // ...
+   * }).state('users.item', {
+   *   url: "/{user:dbObject}",
+   *   controller: function($scope, $stateParams) {
+   *     // $stateParams.user will now be an object returned from
+   *     // the Users service
+   *   },
+   *   // ...
+   * });
+   * </pre>
+   */
+  this.type = function (name, definition, definitionFn) {
+    if (!isDefined(definition)) return $types[name];
+    if ($types.hasOwnProperty(name)) throw new Error("A type named '" + name + "' has already been defined.");
+
+    $types[name] = new Type(extend({ name: name }, definition));
+    if (definitionFn) {
+      typeQueue.push({ name: name, def: definitionFn });
+      if (!enqueue) flushTypeQueue();
+    }
+    return this;
+  };
+
+  // `flushTypeQueue()` waits until `$urlMatcherFactory` is injected before invoking the queued `definitionFn`s
+  function flushTypeQueue() {
+    while(typeQueue.length) {
+      var type = typeQueue.shift();
+      if (type.pattern) throw new Error("You cannot override a type's .pattern at runtime.");
+      angular.extend($types[type.name], injector.invoke(type.def));
+    }
+  }
+
+  // Register default types. Store them in the prototype of $types.
+  forEach(defaultTypes, function(type, name) { $types[name] = new Type(extend({name: name}, type)); });
+  $types = inherit($types, {});
+
+  /* No need to document $get, since it returns this */
+  this.$get = ['$injector', function ($injector) {
+    injector = $injector;
+    enqueue = false;
+    flushTypeQueue();
+
+    forEach(defaultTypes, function(type, name) {
+      if (!$types[name]) $types[name] = new Type(type);
+    });
+    return this;
+  }];
+
+  this.Param = function Param(id, type, config, location) {
+    var self = this;
+    config = unwrapShorthand(config);
+    type = getType(config, type, location);
+    var arrayMode = getArrayMode();
+    type = arrayMode ? type.$asArray(arrayMode, location === "search") : type;
+    if (type.name === "string" && !arrayMode && location === "path" && config.value === undefined)
+      config.value = ""; // for 0.2.x; in 0.3.0+ do not automatically default to ""
+    var isOptional = config.value !== undefined;
+    var squash = getSquashPolicy(config, isOptional);
+    var replace = getReplace(config, arrayMode, isOptional, squash);
+
+    function unwrapShorthand(config) {
+      var keys = isObject(config) ? objectKeys(config) : [];
+      var isShorthand = indexOf(keys, "value") === -1 && indexOf(keys, "type") === -1 &&
+                        indexOf(keys, "squash") === -1 && indexOf(keys, "array") === -1;
+      if (isShorthand) config = { value: config };
+      config.$$fn = isInjectable(config.value) ? config.value : function () { return config.value; };
+      return config;
+    }
+
+    function getType(config, urlType, location) {
+      if (config.type && urlType) throw new Error("Param '"+id+"' has two type configurations.");
+      if (urlType) return urlType;
+      if (!config.type) return (location === "config" ? $types.any : $types.string);
+      return config.type instanceof Type ? config.type : new Type(config.type);
+    }
+
+    // array config: param name (param[]) overrides default settings.  explicit config overrides param name.
+    function getArrayMode() {
+      var arrayDefaults = { array: (location === "search" ? "auto" : false) };
+      var arrayParamNomenclature = id.match(/\[\]$/) ? { array: true } : {};
+      return extend(arrayDefaults, arrayParamNomenclature, config).array;
+    }
+
+    /**
+     * returns false, true, or the squash value to indicate the "default parameter url squash policy".
+     */
+    function getSquashPolicy(config, isOptional) {
+      var squash = config.squash;
+      if (!isOptional || squash === false) return false;
+      if (!isDefined(squash) || squash == null) return defaultSquashPolicy;
+      if (squash === true || isString(squash)) return squash;
+      throw new Error("Invalid squash policy: '" + squash + "'. Valid policies: false, true, or arbitrary string");
+    }
+
+    function getReplace(config, arrayMode, isOptional, squash) {
+      var replace, configuredKeys, defaultPolicy = [
+        { from: "",   to: (isOptional || arrayMode ? undefined : "") },
+        { from: null, to: (isOptional || arrayMode ? undefined : "") }
+      ];
+      replace = isArray(config.replace) ? config.replace : [];
+      if (isString(squash))
+        replace.push({ from: squash, to: undefined });
+      configuredKeys = map(replace, function(item) { return item.from; } );
+      return filter(defaultPolicy, function(item) { return indexOf(configuredKeys, item.from) === -1; }).concat(replace);
+    }
+
+    /**
+     * [Internal] Get the default value of a parameter, which may be an injectable function.
+     */
+    function $$getDefaultValue() {
+      if (!injector) throw new Error("Injectable functions cannot be called at configuration time");
+      var defaultValue = injector.invoke(config.$$fn);
+      if (defaultValue !== null && defaultValue !== undefined && !self.type.is(defaultValue))
+        throw new Error("Default value (" + defaultValue + ") for parameter '" + self.id + "' is not an instance of Type (" + self.type.name + ")");
+      return defaultValue;
+    }
+
+    /**
+     * [Internal] Gets the decoded representation of a value if the value is defined, otherwise, returns the
+     * default value, which may be the result of an injectable function.
+     */
+    function $value(value) {
+      function hasReplaceVal(val) { return function(obj) { return obj.from === val; }; }
+      function $replace(value) {
+        var replacement = map(filter(self.replace, hasReplaceVal(value)), function(obj) { return obj.to; });
+        return replacement.length ? replacement[0] : value;
+      }
+      value = $replace(value);
+      return !isDefined(value) ? $$getDefaultValue() : self.type.$normalize(value);
+    }
+
+    function toString() { return "{Param:" + id + " " + type + " squash: '" + squash + "' optional: " + isOptional + "}"; }
+
+    extend(this, {
+      id: id,
+      type: type,
+      location: location,
+      array: arrayMode,
+      squash: squash,
+      replace: replace,
+      isOptional: isOptional,
+      value: $value,
+      dynamic: undefined,
+      config: config,
+      toString: toString
+    });
+  };
+
+  function ParamSet(params) {
+    extend(this, params || {});
+  }
+
+  ParamSet.prototype = {
+    $$new: function() {
+      return inherit(this, extend(new ParamSet(), { $$parent: this}));
+    },
+    $$keys: function () {
+      var keys = [], chain = [], parent = this,
+        ignore = objectKeys(ParamSet.prototype);
+      while (parent) { chain.push(parent); parent = parent.$$parent; }
+      chain.reverse();
+      forEach(chain, function(paramset) {
+        forEach(objectKeys(paramset), function(key) {
+            if (indexOf(keys, key) === -1 && indexOf(ignore, key) === -1) keys.push(key);
+        });
+      });
+      return keys;
+    },
+    $$values: function(paramValues) {
+      var values = {}, self = this;
+      forEach(self.$$keys(), function(key) {
+        values[key] = self[key].value(paramValues && paramValues[key]);
+      });
+      return values;
+    },
+    $$equals: function(paramValues1, paramValues2) {
+      var equal = true, self = this;
+      forEach(self.$$keys(), function(key) {
+        var left = paramValues1 && paramValues1[key], right = paramValues2 && paramValues2[key];
+        if (!self[key].type.equals(left, right)) equal = false;
+      });
+      return equal;
+    },
+    $$validates: function $$validate(paramValues) {
+      var keys = this.$$keys(), i, param, rawVal, normalized, encoded;
+      for (i = 0; i < keys.length; i++) {
+        param = this[keys[i]];
+        rawVal = paramValues[keys[i]];
+        if ((rawVal === undefined || rawVal === null) && param.isOptional)
+          break; // There was no parameter value, but the param is optional
+        normalized = param.type.$normalize(rawVal);
+        if (!param.type.is(normalized))
+          return false; // The value was not of the correct Type, and could not be decoded to the correct Type
+        encoded = param.type.encode(normalized);
+        if (angular.isString(encoded) && !param.type.pattern.exec(encoded))
+          return false; // The value was of the correct type, but when encoded, did not match the Type's regexp
+      }
+      return true;
+    },
+    $$parent: undefined
+  };
+
+  this.ParamSet = ParamSet;
+}
+
+// Register as a provider so it's available to other providers
+angular.module('ui.router.util').provider('$urlMatcherFactory', $UrlMatcherFactory);
+angular.module('ui.router.util').run(['$urlMatcherFactory', function($urlMatcherFactory) { }]);
+
+/**
+ * @ngdoc object
+ * @name ui.router.router.$urlRouterProvider
+ *
+ * @requires ui.router.util.$urlMatcherFactoryProvider
+ * @requires $locationProvider
+ *
+ * @description
+ * `$urlRouterProvider` has the responsibility of watching `$location`. 
+ * When `$location` changes it runs through a list of rules one by one until a 
+ * match is found. `$urlRouterProvider` is used behind the scenes anytime you specify 
+ * a url in a state configuration. All urls are compiled into a UrlMatcher object.
+ *
+ * There are several methods on `$urlRouterProvider` that make it useful to use directly
+ * in your module config.
+ */
+$UrlRouterProvider.$inject = ['$locationProvider', '$urlMatcherFactoryProvider'];
+function $UrlRouterProvider(   $locationProvider,   $urlMatcherFactory) {
+  var rules = [], otherwise = null, interceptDeferred = false, listener;
+
+  // Returns a string that is a prefix of all strings matching the RegExp
+  function regExpPrefix(re) {
+    var prefix = /^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(re.source);
+    return (prefix != null) ? prefix[1].replace(/\\(.)/g, "$1") : '';
+  }
+
+  // Interpolates matched values into a String.replace()-style pattern
+  function interpolate(pattern, match) {
+    return pattern.replace(/\$(\$|\d{1,2})/, function (m, what) {
+      return match[what === '$' ? 0 : Number(what)];
+    });
+  }
+
+  /**
+   * @ngdoc function
+   * @name ui.router.router.$urlRouterProvider#rule
+   * @methodOf ui.router.router.$urlRouterProvider
+   *
+   * @description
+   * Defines rules that are used by `$urlRouterProvider` to find matches for
+   * specific URLs.
+   *
+   * @example
+   * <pre>
+   * var app = angular.module('app', ['ui.router.router']);
+   *
+   * app.config(function ($urlRouterProvider) {
+   *   // Here's an example of how you might allow case insensitive urls
+   *   $urlRouterProvider.rule(function ($injector, $location) {
+   *     var path = $location.path(),
+   *         normalized = path.toLowerCase();
+   *
+   *     if (path !== normalized) {
+   *       return normalized;
+   *     }
+   *   });
+   * });
+   * </pre>
+   *
+   * @param {object} rule Handler function that takes `$injector` and `$location`
+   * services as arguments. You can use them to return a valid path as a string.
+   *
+   * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance
+   */
+  this.rule = function (rule) {
+    if (!isFunction(rule)) throw new Error("'rule' must be a function");
+    rules.push(rule);
+    return this;
+  };
+
+  /**
+   * @ngdoc object
+   * @name ui.router.router.$urlRouterProvider#otherwise
+   * @methodOf ui.router.router.$urlRouterProvider
+   *
+   * @description
+   * Defines a path that is used when an invalid route is requested.
+   *
+   * @example
+   * <pre>
+   * var app = angular.module('app', ['ui.router.router']);
+   *
+   * app.config(function ($urlRouterProvider) {
+   *   // if the path doesn't match any of the urls you configured
+   *   // otherwise will take care of routing the user to the
+   *   // specified url
+   *   $urlRouterProvider.otherwise('/index');
+   *
+   *   // Example of using function rule as param
+   *   $urlRouterProvider.otherwise(function ($injector, $location) {
+   *     return '/a/valid/url';
+   *   });
+   * });
+   * </pre>
+   *
+   * @param {string|object} rule The url path you want to redirect to or a function 
+   * rule that returns the url path. The function version is passed two params: 
+   * `$injector` and `$location` services, and must return a url string.
+   *
+   * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance
+   */
+  this.otherwise = function (rule) {
+    if (isString(rule)) {
+      var redirect = rule;
+      rule = function () { return redirect; };
+    }
+    else if (!isFunction(rule)) throw new Error("'rule' must be a function");
+    otherwise = rule;
+    return this;
+  };
+
+
+  function handleIfMatch($injector, handler, match) {
+    if (!match) return false;
+    var result = $injector.invoke(handler, handler, { $match: match });
+    return isDefined(result) ? result : true;
+  }
+
+  /**
+   * @ngdoc function
+   * @name ui.router.router.$urlRouterProvider#when
+   * @methodOf ui.router.router.$urlRouterProvider
+   *
+   * @description
+   * Registers a handler for a given url matching. if handle is a string, it is
+   * treated as a redirect, and is interpolated according to the syntax of match
+   * (i.e. like `String.replace()` for `RegExp`, or like a `UrlMatcher` pattern otherwise).
+   *
+   * If the handler is a function, it is injectable. It gets invoked if `$location`
+   * matches. You have the option of inject the match object as `$match`.
+   *
+   * The handler can return
+   *
+   * - **falsy** to indicate that the rule didn't match after all, then `$urlRouter`
+   *   will continue trying to find another one that matches.
+   * - **string** which is treated as a redirect and passed to `$location.url()`
+   * - **void** or any **truthy** value tells `$urlRouter` that the url was handled.
+   *
+   * @example
+   * <pre>
+   * var app = angular.module('app', ['ui.router.router']);
+   *
+   * app.config(function ($urlRouterProvider) {
+   *   $urlRouterProvider.when($state.url, function ($match, $stateParams) {
+   *     if ($state.$current.navigable !== state ||
+   *         !equalForKeys($match, $stateParams) {
+   *      $state.transitionTo(state, $match, false);
+   *     }
+   *   });
+   * });
+   * </pre>
+   *
+   * @param {string|object} what The incoming path that you want to redirect.
+   * @param {string|object} handler The path you want to redirect your user to.
+   */
+  this.when = function (what, handler) {
+    var redirect, handlerIsString = isString(handler);
+    if (isString(what)) what = $urlMatcherFactory.compile(what);
+
+    if (!handlerIsString && !isFunction(handler) && !isArray(handler))
+      throw new Error("invalid 'handler' in when()");
+
+    var strategies = {
+      matcher: function (what, handler) {
+        if (handlerIsString) {
+          redirect = $urlMatcherFactory.compile(handler);
+          handler = ['$match', function ($match) { return redirect.format($match); }];
+        }
+        return extend(function ($injector, $location) {
+          return handleIfMatch($injector, handler, what.exec($location.path(), $location.search()));
+        }, {
+          prefix: isString(what.prefix) ? what.prefix : ''
+        });
+      },
+      regex: function (what, handler) {
+        if (what.global || what.sticky) throw new Error("when() RegExp must not be global or sticky");
+
+        if (handlerIsString) {
+          redirect = handler;
+          handler = ['$match', function ($match) { return interpolate(redirect, $match); }];
+        }
+        return extend(function ($injector, $location) {
+          return handleIfMatch($injector, handler, what.exec($location.path()));
+        }, {
+          prefix: regExpPrefix(what)
+        });
+      }
+    };
+
+    var check = { matcher: $urlMatcherFactory.isMatcher(what), regex: what instanceof RegExp };
+
+    for (var n in check) {
+      if (check[n]) return this.rule(strategies[n](what, handler));
+    }
+
+    throw new Error("invalid 'what' in when()");
+  };
+
+  /**
+   * @ngdoc function
+   * @name ui.router.router.$urlRouterProvider#deferIntercept
+   * @methodOf ui.router.router.$urlRouterProvider
+   *
+   * @description
+   * Disables (or enables) deferring location change interception.
+   *
+   * If you wish to customize the behavior of syncing the URL (for example, if you wish to
+   * defer a transition but maintain the current URL), call this method at configuration time.
+   * Then, at run time, call `$urlRouter.listen()` after you have configured your own
+   * `$locationChangeSuccess` event handler.
+   *
+   * @example
+   * <pre>
+   * var app = angular.module('app', ['ui.router.router']);
+   *
+   * app.config(function ($urlRouterProvider) {
+   *
+   *   // Prevent $urlRouter from automatically intercepting URL changes;
+   *   // this allows you to configure custom behavior in between
+   *   // location changes and route synchronization:
+   *   $urlRouterProvider.deferIntercept();
+   *
+   * }).run(function ($rootScope, $urlRouter, UserService) {
+   *
+   *   $rootScope.$on('$locationChangeSuccess', function(e) {
+   *     // UserService is an example service for managing user state
+   *     if (UserService.isLoggedIn()) return;
+   *
+   *     // Prevent $urlRouter's default handler from firing
+   *     e.preventDefault();
+   *
+   *     UserService.handleLogin().then(function() {
+   *       // Once the user has logged in, sync the current URL
+   *       // to the router:
+   *       $urlRouter.sync();
+   *     });
+   *   });
+   *
+   *   // Configures $urlRouter's listener *after* your custom listener
+   *   $urlRouter.listen();
+   * });
+   * </pre>
+   *
+   * @param {boolean} defer Indicates whether to defer location change interception. Passing
+            no parameter is equivalent to `true`.
+   */
+  this.deferIntercept = function (defer) {
+    if (defer === undefined) defer = true;
+    interceptDeferred = defer;
+  };
+
+  /**
+   * @ngdoc object
+   * @name ui.router.router.$urlRouter
+   *
+   * @requires $location
+   * @requires $rootScope
+   * @requires $injector
+   * @requires $browser
+   *
+   * @description
+   *
+   */
+  this.$get = $get;
+  $get.$inject = ['$location', '$rootScope', '$injector', '$browser'];
+  function $get(   $location,   $rootScope,   $injector,   $browser) {
+
+    var baseHref = $browser.baseHref(), location = $location.url(), lastPushedUrl;
+
+    function appendBasePath(url, isHtml5, absolute) {
+      if (baseHref === '/') return url;
+      if (isHtml5) return baseHref.slice(0, -1) + url;
+      if (absolute) return baseHref.slice(1) + url;
+      return url;
+    }
+
+    // TODO: Optimize groups of rules with non-empty prefix into some sort of decision tree
+    function update(evt) {
+      if (evt && evt.defaultPrevented) return;
+      var ignoreUpdate = lastPushedUrl && $location.url() === lastPushedUrl;
+      lastPushedUrl = undefined;
+      // TODO: Re-implement this in 1.0 for https://github.com/angular-ui/ui-router/issues/1573
+      //if (ignoreUpdate) return true;
+
+      function check(rule) {
+        var handled = rule($injector, $location);
+
+        if (!handled) return false;
+        if (isString(handled)) $location.replace().url(handled);
+        return true;
+      }
+      var n = rules.length, i;
+
+      for (i = 0; i < n; i++) {
+        if (check(rules[i])) return;
+      }
+      // always check otherwise last to allow dynamic updates to the set of rules
+      if (otherwise) check(otherwise);
+    }
+
+    function listen() {
+      listener = listener || $rootScope.$on('$locationChangeSuccess', update);
+      return listener;
+    }
+
+    if (!interceptDeferred) listen();
+
+    return {
+      /**
+       * @ngdoc function
+       * @name ui.router.router.$urlRouter#sync
+       * @methodOf ui.router.router.$urlRouter
+       *
+       * @description
+       * Triggers an update; the same update that happens when the address bar url changes, aka `$locationChangeSuccess`.
+       * This method is useful when you need to use `preventDefault()` on the `$locationChangeSuccess` event,
+       * perform some custom logic (route protection, auth, config, redirection, etc) and then finally proceed
+       * with the transition by calling `$urlRouter.sync()`.
+       *
+       * @example
+       * <pre>
+       * angular.module('app', ['ui.router'])
+       *   .run(function($rootScope, $urlRouter) {
+       *     $rootScope.$on('$locationChangeSuccess', function(evt) {
+       *       // Halt state change from even starting
+       *       evt.preventDefault();
+       *       // Perform custom logic
+       *       var meetsRequirement = ...
+       *       // Continue with the update and state transition if logic allows
+       *       if (meetsRequirement) $urlRouter.sync();
+       *     });
+       * });
+       * </pre>
+       */
+      sync: function() {
+        update();
+      },
+
+      listen: function() {
+        return listen();
+      },
+
+      update: function(read) {
+        if (read) {
+          location = $location.url();
+          return;
+        }
+        if ($location.url() === location) return;
+
+        $location.url(location);
+        $location.replace();
+      },
+
+      push: function(urlMatcher, params, options) {
+         var url = urlMatcher.format(params || {});
+
+        // Handle the special hash param, if needed
+        if (url !== null && params && params['#']) {
+            url += '#' + params['#'];
+        }
+
+        $location.url(url);
+        lastPushedUrl = options && options.$$avoidResync ? $location.url() : undefined;
+        if (options && options.replace) $location.replace();
+      },
+
+      /**
+       * @ngdoc function
+       * @name ui.router.router.$urlRouter#href
+       * @methodOf ui.router.router.$urlRouter
+       *
+       * @description
+       * A URL generation method that returns the compiled URL for a given
+       * {@link ui.router.util.type:UrlMatcher `UrlMatcher`}, populated with the provided parameters.
+       *
+       * @example
+       * <pre>
+       * $bob = $urlRouter.href(new UrlMatcher("/about/:person"), {
+       *   person: "bob"
+       * });
+       * // $bob == "/about/bob";
+       * </pre>
+       *
+       * @param {UrlMatcher} urlMatcher The `UrlMatcher` object which is used as the template of the URL to generate.
+       * @param {object=} params An object of parameter values to fill the matcher's required parameters.
+       * @param {object=} options Options object. The options are:
+       *
+       * - **`absolute`** - {boolean=false},  If true will generate an absolute url, e.g. "http://www.example.com/fullurl".
+       *
+       * @returns {string} Returns the fully compiled URL, or `null` if `params` fail validation against `urlMatcher`
+       */
+      href: function(urlMatcher, params, options) {
+        if (!urlMatcher.validates(params)) return null;
+
+        var isHtml5 = $locationProvider.html5Mode();
+        if (angular.isObject(isHtml5)) {
+          isHtml5 = isHtml5.enabled;
+        }
+        
+        var url = urlMatcher.format(params);
+        options = options || {};
+
+        if (!isHtml5 && url !== null) {
+          url = "#" + $locationProvider.hashPrefix() + url;
+        }
+
+        // Handle special hash param, if needed
+        if (url !== null && params && params['#']) {
+          url += '#' + params['#'];
+        }
+
+        url = appendBasePath(url, isHtml5, options.absolute);
+
+        if (!options.absolute || !url) {
+          return url;
+        }
+
+        var slash = (!isHtml5 && url ? '/' : ''), port = $location.port();
+        port = (port === 80 || port === 443 ? '' : ':' + port);
+
+        return [$location.protocol(), '://', $location.host(), port, slash, url].join('');
+      }
+    };
+  }
+}
+
+angular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider);
+
+/**
+ * @ngdoc object
+ * @name ui.router.state.$stateProvider
+ *
+ * @requires ui.router.router.$urlRouterProvider
+ * @requires ui.router.util.$urlMatcherFactoryProvider
+ *
+ * @description
+ * The new `$stateProvider` works similar to Angular's v1 router, but it focuses purely
+ * on state.
+ *
+ * A state corresponds to a "place" in the application in terms of the overall UI and
+ * navigation. A state describes (via the controller / template / view properties) what
+ * the UI looks like and does at that place.
+ *
+ * States often have things in common, and the primary way of factoring out these
+ * commonalities in this model is via the state hierarchy, i.e. parent/child states aka
+ * nested states.
+ *
+ * The `$stateProvider` provides interfaces to declare these states for your app.
+ */
+$StateProvider.$inject = ['$urlRouterProvider', '$urlMatcherFactoryProvider'];
+function $StateProvider(   $urlRouterProvider,   $urlMatcherFactory) {
+
+  var root, states = {}, $state, queue = {}, abstractKey = 'abstract';
+
+  // Builds state properties from definition passed to registerState()
+  var stateBuilder = {
+
+    // Derive parent state from a hierarchical name only if 'parent' is not explicitly defined.
+    // state.children = [];
+    // if (parent) parent.children.push(state);
+    parent: function(state) {
+      if (isDefined(state.parent) && state.parent) return findState(state.parent);
+      // regex matches any valid composite state name
+      // would match "contact.list" but not "contacts"
+      var compositeName = /^(.+)\.[^.]+$/.exec(state.name);
+      return compositeName ? findState(compositeName[1]) : root;
+    },
+
+    // inherit 'data' from parent and override by own values (if any)
+    data: function(state) {
+      if (state.parent && state.parent.data) {
+        state.data = state.self.data = extend({}, state.parent.data, state.data);
+      }
+      return state.data;
+    },
+
+    // Build a URLMatcher if necessary, either via a relative or absolute URL
+    url: function(state) {
+      var url = state.url, config = { params: state.params || {} };
+
+      if (isString(url)) {
+        if (url.charAt(0) == '^') return $urlMatcherFactory.compile(url.substring(1), config);
+        return (state.parent.navigable || root).url.concat(url, config);
+      }
+
+      if (!url || $urlMatcherFactory.isMatcher(url)) return url;
+      throw new Error("Invalid url '" + url + "' in state '" + state + "'");
+    },
+
+    // Keep track of the closest ancestor state that has a URL (i.e. is navigable)
+    navigable: function(state) {
+      return state.url ? state : (state.parent ? state.parent.navigable : null);
+    },
+
+    // Own parameters for this state. state.url.params is already built at this point. Create and add non-url params
+    ownParams: function(state) {
+      var params = state.url && state.url.params || new $$UMFP.ParamSet();
+      forEach(state.params || {}, function(config, id) {
+        if (!params[id]) params[id] = new $$UMFP.Param(id, null, config, "config");
+      });
+      return params;
+    },
+
+    // Derive parameters for this state and ensure they're a super-set of parent's parameters
+    params: function(state) {
+      return state.parent && state.parent.params ? extend(state.parent.params.$$new(), state.ownParams) : new $$UMFP.ParamSet();
+    },
+
+    // If there is no explicit multi-view configuration, make one up so we don't have
+    // to handle both cases in the view directive later. Note that having an explicit
+    // 'views' property will mean the default unnamed view properties are ignored. This
+    // is also a good time to resolve view names to absolute names, so everything is a
+    // straight lookup at link time.
+    views: function(state) {
+      var views = {};
+
+      forEach(isDefined(state.views) ? state.views : { '': state }, function (view, name) {
+        if (name.indexOf('@') < 0) name += '@' + state.parent.name;
+        views[name] = view;
+      });
+      return views;
+    },
+
+    // Keep a full path from the root down to this state as this is needed for state activation.
+    path: function(state) {
+      return state.parent ? state.parent.path.concat(state) : []; // exclude root from path
+    },
+
+    // Speed up $state.contains() as it's used a lot
+    includes: function(state) {
+      var includes = state.parent ? extend({}, state.parent.includes) : {};
+      includes[state.name] = true;
+      return includes;
+    },
+
+    $delegates: {}
+  };
+
+  function isRelative(stateName) {
+    return stateName.indexOf(".") === 0 || stateName.indexOf("^") === 0;
+  }
+
+  function findState(stateOrName, base) {
+    if (!stateOrName) return undefined;
+
+    var isStr = isString(stateOrName),
+        name  = isStr ? stateOrName : stateOrName.name,
+        path  = isRelative(name);
+
+    if (path) {
+      if (!base) throw new Error("No reference point given for path '"  + name + "'");
+      base = findState(base);
+      
+      var rel = name.split("."), i = 0, pathLength = rel.length, current = base;
+
+      for (; i < pathLength; i++) {
+        if (rel[i] === "" && i === 0) {
+          current = base;
+          continue;
+        }
+        if (rel[i] === "^") {
+          if (!current.parent) throw new Error("Path '" + name + "' not valid for state '" + base.name + "'");
+          current = current.parent;
+          continue;
+        }
+        break;
+      }
+      rel = rel.slice(i).join(".");
+      name = current.name + (current.name && rel ? "." : "") + rel;
+    }
+    var state = states[name];
+
+    if (state && (isStr || (!isStr && (state === stateOrName || state.self === stateOrName)))) {
+      return state;
+    }
+    return undefined;
+  }
+
+  function queueState(parentName, state) {
+    if (!queue[parentName]) {
+      queue[parentName] = [];
+    }
+    queue[parentName].push(state);
+  }
+
+  function flushQueuedChildren(parentName) {
+    var queued = queue[parentName] || [];
+    while(queued.length) {
+      registerState(queued.shift());
+    }
+  }
+
+  function registerState(state) {
+    // Wrap a new object around the state so we can store our private details easily.
+    state = inherit(state, {
+      self: state,
+      resolve: state.resolve || {},
+      toString: function() { return this.name; }
+    });
+
+    var name = state.name;
+    if (!isString(name) || name.indexOf('@') >= 0) throw new Error("State must have a valid name");
+    if (states.hasOwnProperty(name)) throw new Error("State '" + name + "'' is already defined");
+
+    // Get parent name
+    var parentName = (name.indexOf('.') !== -1) ? name.substring(0, name.lastIndexOf('.'))
+        : (isString(state.parent)) ? state.parent
+        : (isObject(state.parent) && isString(state.parent.name)) ? state.parent.name
+        : '';
+
+    // If parent is not registered yet, add state to queue and register later
+    if (parentName && !states[parentName]) {
+      return queueState(parentName, state.self);
+    }
+
+    for (var key in stateBuilder) {
+      if (isFunction(stateBuilder[key])) state[key] = stateBuilder[key](state, stateBuilder.$delegates[key]);
+    }
+    states[name] = state;
+
+    // Register the state in the global state list and with $urlRouter if necessary.
+    if (!state[abstractKey] && state.url) {
+      $urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) {
+        if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) {
+          $state.transitionTo(state, $match, { inherit: true, location: false });
+        }
+      }]);
+    }
+
+    // Register any queued children
+    flushQueuedChildren(name);
+
+    return state;
+  }
+
+  // Checks text to see if it looks like a glob.
+  function isGlob (text) {
+    return text.indexOf('*') > -1;
+  }
+
+  // Returns true if glob matches current $state name.
+  function doesStateMatchGlob (glob) {
+    var globSegments = glob.split('.'),
+        segments = $state.$current.name.split('.');
+
+    //match single stars
+    for (var i = 0, l = globSegments.length; i < l; i++) {
+      if (globSegments[i] === '*') {
+        segments[i] = '*';
+      }
+    }
+
+    //match greedy starts
+    if (globSegments[0] === '**') {
+       segments = segments.slice(indexOf(segments, globSegments[1]));
+       segments.unshift('**');
+    }
+    //match greedy ends
+    if (globSegments[globSegments.length - 1] === '**') {
+       segments.splice(indexOf(segments, globSegments[globSegments.length - 2]) + 1, Number.MAX_VALUE);
+       segments.push('**');
+    }
+
+    if (globSegments.length != segments.length) {
+      return false;
+    }
+
+    return segments.join('') === globSegments.join('');
+  }
+
+
+  // Implicit root state that is always active
+  root = registerState({
+    name: '',
+    url: '^',
+    views: null,
+    'abstract': true
+  });
+  root.navigable = null;
+
+
+  /**
+   * @ngdoc function
+   * @name ui.router.state.$stateProvider#decorator
+   * @methodOf ui.router.state.$stateProvider
+   *
+   * @description
+   * Allows you to extend (carefully) or override (at your own peril) the 
+   * `stateBuilder` object used internally by `$stateProvider`. This can be used 
+   * to add custom functionality to ui-router, for example inferring templateUrl 
+   * based on the state name.
+   *
+   * When passing only a name, it returns the current (original or decorated) builder
+   * function that matches `name`.
+   *
+   * The builder functions that can be decorated are listed below. Though not all
+   * necessarily have a good use case for decoration, that is up to you to decide.
+   *
+   * In addition, users can attach custom decorators, which will generate new 
+   * properties within the state's internal definition. There is currently no clear 
+   * use-case for this beyond accessing internal states (i.e. $state.$current), 
+   * however, expect this to become increasingly relevant as we introduce additional 
+   * meta-programming features.
+   *
+   * **Warning**: Decorators should not be interdependent because the order of 
+   * execution of the builder functions in non-deterministic. Builder functions 
+   * should only be dependent on the state definition object and super function.
+   *
+   *
+   * Existing builder functions and current return values:
+   *
+   * - **parent** `{object}` - returns the parent state object.
+   * - **data** `{object}` - returns state data, including any inherited data that is not
+   *   overridden by own values (if any).
+   * - **url** `{object}` - returns a {@link ui.router.util.type:UrlMatcher UrlMatcher}
+   *   or `null`.
+   * - **navigable** `{object}` - returns closest ancestor state that has a URL (aka is 
+   *   navigable).
+   * - **params** `{object}` - returns an array of state params that are ensured to 
+   *   be a super-set of parent's params.
+   * - **views** `{object}` - returns a views object where each key is an absolute view 
+   *   name (i.e. "viewName@stateName") and each value is the config object 
+   *   (template, controller) for the view. Even when you don't use the views object 
+   *   explicitly on a state config, one is still created for you internally.
+   *   So by decorating this builder function you have access to decorating template 
+   *   and controller properties.
+   * - **ownParams** `{object}` - returns an array of params that belong to the state, 
+   *   not including any params defined by ancestor states.
+   * - **path** `{string}` - returns the full path from the root down to this state. 
+   *   Needed for state activation.
+   * - **includes** `{object}` - returns an object that includes every state that 
+   *   would pass a `$state.includes()` test.
+   *
+   * @example
+   * <pre>
+   * // Override the internal 'views' builder with a function that takes the state
+   * // definition, and a reference to the internal function being overridden:
+   * $stateProvider.decorator('views', function (state, parent) {
+   *   var result = {},
+   *       views = parent(state);
+   *
+   *   angular.forEach(views, function (config, name) {
+   *     var autoName = (state.name + '.' + name).replace('.', '/');
+   *     config.templateUrl = config.templateUrl || '/partials/' + autoName + '.html';
+   *     result[name] = config;
+   *   });
+   *   return result;
+   * });
+   *
+   * $stateProvider.state('home', {
+   *   views: {
+   *     'contact.list': { controller: 'ListController' },
+   *     'contact.item': { controller: 'ItemController' }
+   *   }
+   * });
+   *
+   * // ...
+   *
+   * $state.go('home');
+   * // Auto-populates list and item views with /partials/home/contact/list.html,
+   * // and /partials/home/contact/item.html, respectively.
+   * </pre>
+   *
+   * @param {string} name The name of the builder function to decorate. 
+   * @param {object} func A function that is responsible for decorating the original 
+   * builder function. The function receives two parameters:
+   *
+   *   - `{object}` - state - The state config object.
+   *   - `{object}` - super - The original builder function.
+   *
+   * @return {object} $stateProvider - $stateProvider instance
+   */
+  this.decorator = decorator;
+  function decorator(name, func) {
+    /*jshint validthis: true */
+    if (isString(name) && !isDefined(func)) {
+      return stateBuilder[name];
+    }
+    if (!isFunction(func) || !isString(name)) {
+      return this;
+    }
+    if (stateBuilder[name] && !stateBuilder.$delegates[name]) {
+      stateBuilder.$delegates[name] = stateBuilder[name];
+    }
+    stateBuilder[name] = func;
+    return this;
+  }
+
+  /**
+   * @ngdoc function
+   * @name ui.router.state.$stateProvider#state
+   * @methodOf ui.router.state.$stateProvider
+   *
+   * @description
+   * Registers a state configuration under a given state name. The stateConfig object
+   * has the following acceptable properties.
+   *
+   * @param {string} name A unique state name, e.g. "home", "about", "contacts".
+   * To create a parent/child state use a dot, e.g. "about.sales", "home.newest".
+   * @param {object} stateConfig State configuration object.
+   * @param {string|function=} stateConfig.template
+   * <a id='template'></a>
+   *   html template as a string or a function that returns
+   *   an html template as a string which should be used by the uiView directives. This property 
+   *   takes precedence over templateUrl.
+   *   
+   *   If `template` is a function, it will be called with the following parameters:
+   *
+   *   - {array.&lt;object&gt;} - state parameters extracted from the current $location.path() by
+   *     applying the current state
+   *
+   * <pre>template:
+   *   "<h1>inline template definition</h1>" +
+   *   "<div ui-view></div>"</pre>
+   * <pre>template: function(params) {
+   *       return "<h1>generated template</h1>"; }</pre>
+   * </div>
+   *
+   * @param {string|function=} stateConfig.templateUrl
+   * <a id='templateUrl'></a>
+   *
+   *   path or function that returns a path to an html
+   *   template that should be used by uiView.
+   *   
+   *   If `templateUrl` is a function, it will be called with the following parameters:
+   *
+   *   - {array.&lt;object&gt;} - state parameters extracted from the current $location.path() by 
+   *     applying the current state
+   *
+   * <pre>templateUrl: "home.html"</pre>
+   * <pre>templateUrl: function(params) {
+   *     return myTemplates[params.pageId]; }</pre>
+   *
+   * @param {function=} stateConfig.templateProvider
+   * <a id='templateProvider'></a>
+   *    Provider function that returns HTML content string.
+   * <pre> templateProvider:
+   *       function(MyTemplateService, params) {
+   *         return MyTemplateService.getTemplate(params.pageId);
+   *       }</pre>
+   *
+   * @param {string|function=} stateConfig.controller
+   * <a id='controller'></a>
+   *
+   *  Controller fn that should be associated with newly
+   *   related scope or the name of a registered controller if passed as a string.
+   *   Optionally, the ControllerAs may be declared here.
+   * <pre>controller: "MyRegisteredController"</pre>
+   * <pre>controller:
+   *     "MyRegisteredController as fooCtrl"}</pre>
+   * <pre>controller: function($scope, MyService) {
+   *     $scope.data = MyService.getData(); }</pre>
+   *
+   * @param {function=} stateConfig.controllerProvider
+   * <a id='controllerProvider'></a>
+   *
+   * Injectable provider function that returns the actual controller or string.
+   * <pre>controllerProvider:
+   *   function(MyResolveData) {
+   *     if (MyResolveData.foo)
+   *       return "FooCtrl"
+   *     else if (MyResolveData.bar)
+   *       return "BarCtrl";
+   *     else return function($scope) {
+   *       $scope.baz = "Qux";
+   *     }
+   *   }</pre>
+   *
+   * @param {string=} stateConfig.controllerAs
+   * <a id='controllerAs'></a>
+   * 
+   * A controller alias name. If present the controller will be
+   *   published to scope under the controllerAs name.
+   * <pre>controllerAs: "myCtrl"</pre>
+   *
+   * @param {string|object=} stateConfig.parent
+   * <a id='parent'></a>
+   * Optionally specifies the parent state of this state.
+   *
+   * <pre>parent: 'parentState'</pre>
+   * <pre>parent: parentState // JS variable</pre>
+   *
+   * @param {object=} stateConfig.resolve
+   * <a id='resolve'></a>
+   *
+   * An optional map&lt;string, function&gt; of dependencies which
+   *   should be injected into the controller. If any of these dependencies are promises, 
+   *   the router will wait for them all to be resolved before the controller is instantiated.
+   *   If all the promises are resolved successfully, the $stateChangeSuccess event is fired
+   *   and the values of the resolved promises are injected into any controllers that reference them.
+   *   If any  of the promises are rejected the $stateChangeError event is fired.
+   *
+   *   The map object is:
+   *   
+   *   - key - {string}: name of dependency to be injected into controller
+   *   - factory - {string|function}: If string then it is alias for service. Otherwise if function, 
+   *     it is injected and return value it treated as dependency. If result is a promise, it is 
+   *     resolved before its value is injected into controller.
+   *
+   * <pre>resolve: {
+   *     myResolve1:
+   *       function($http, $stateParams) {
+   *         return $http.get("/api/foos/"+stateParams.fooID);
+   *       }
+   *     }</pre>
+   *
+   * @param {string=} stateConfig.url
+   * <a id='url'></a>
+   *
+   *   A url fragment with optional parameters. When a state is navigated or
+   *   transitioned to, the `$stateParams` service will be populated with any 
+   *   parameters that were passed.
+   *
+   *   (See {@link ui.router.util.type:UrlMatcher UrlMatcher} `UrlMatcher`} for
+   *   more details on acceptable patterns )
+   *
+   * examples:
+   * <pre>url: "/home"
+   * url: "/users/:userid"
+   * url: "/books/{bookid:[a-zA-Z_-]}"
+   * url: "/books/{categoryid:int}"
+   * url: "/books/{publishername:string}/{categoryid:int}"
+   * url: "/messages?before&after"
+   * url: "/messages?{before:date}&{after:date}"
+   * url: "/messages/:mailboxid?{before:date}&{after:date}"
+   * </pre>
+   *
+   * @param {object=} stateConfig.views
+   * <a id='views'></a>
+   * an optional map&lt;string, object&gt; which defined multiple views, or targets views
+   * manually/explicitly.
+   *
+   * Examples:
+   *
+   * Targets three named `ui-view`s in the parent state's template
+   * <pre>views: {
+   *     header: {
+   *       controller: "headerCtrl",
+   *       templateUrl: "header.html"
+   *     }, body: {
+   *       controller: "bodyCtrl",
+   *       templateUrl: "body.html"
+   *     }, footer: {
+   *       controller: "footCtrl",
+   *       templateUrl: "footer.html"
+   *     }
+   *   }</pre>
+   *
+   * Targets named `ui-view="header"` from grandparent state 'top''s template, and named `ui-view="body" from parent state's template.
+   * <pre>views: {
+   *     'header@top': {
+   *       controller: "msgHeaderCtrl",
+   *       templateUrl: "msgHeader.html"
+   *     }, 'body': {
+   *       controller: "messagesCtrl",
+   *       templateUrl: "messages.html"
+   *     }
+   *   }</pre>
+   *
+   * @param {boolean=} [stateConfig.abstract=false]
+   * <a id='abstract'></a>
+   * An abstract state will never be directly activated,
+   *   but can provide inherited properties to its common children states.
+   * <pre>abstract: true</pre>
+   *
+   * @param {function=} stateConfig.onEnter
+   * <a id='onEnter'></a>
+   *
+   * Callback function for when a state is entered. Good way
+   *   to trigger an action or dispatch an event, such as opening a dialog.
+   * If minifying your scripts, make sure to explictly annotate this function,
+   * because it won't be automatically annotated by your build tools.
+   *
+   * <pre>onEnter: function(MyService, $stateParams) {
+   *     MyService.foo($stateParams.myParam);
+   * }</pre>
+   *
+   * @param {function=} stateConfig.onExit
+   * <a id='onExit'></a>
+   *
+   * Callback function for when a state is exited. Good way to
+   *   trigger an action or dispatch an event, such as opening a dialog.
+   * If minifying your scripts, make sure to explictly annotate this function,
+   * because it won't be automatically annotated by your build tools.
+   *
+   * <pre>onExit: function(MyService, $stateParams) {
+   *     MyService.cleanup($stateParams.myParam);
+   * }</pre>
+   *
+   * @param {boolean=} [stateConfig.reloadOnSearch=true]
+   * <a id='reloadOnSearch'></a>
+   *
+   * If `false`, will not retrigger the same state
+   *   just because a search/query parameter has changed (via $location.search() or $location.hash()). 
+   *   Useful for when you'd like to modify $location.search() without triggering a reload.
+   * <pre>reloadOnSearch: false</pre>
+   *
+   * @param {object=} stateConfig.data
+   * <a id='data'></a>
+   *
+   * Arbitrary data object, useful for custom configuration.  The parent state's `data` is
+   *   prototypally inherited.  In other words, adding a data property to a state adds it to
+   *   the entire subtree via prototypal inheritance.
+   *
+   * <pre>data: {
+   *     requiredRole: 'foo'
+   * } </pre>
+   *
+   * @param {object=} stateConfig.params
+   * <a id='params'></a>
+   *
+   * A map which optionally configures parameters declared in the `url`, or
+   *   defines additional non-url parameters.  For each parameter being
+   *   configured, add a configuration object keyed to the name of the parameter.
+   *
+   *   Each parameter configuration object may contain the following properties:
+   *
+   *   - ** value ** - {object|function=}: specifies the default value for this
+   *     parameter.  This implicitly sets this parameter as optional.
+   *
+   *     When UI-Router routes to a state and no value is
+   *     specified for this parameter in the URL or transition, the
+   *     default value will be used instead.  If `value` is a function,
+   *     it will be injected and invoked, and the return value used.
+   *
+   *     *Note*: `undefined` is treated as "no default value" while `null`
+   *     is treated as "the default value is `null`".
+   *
+   *     *Shorthand*: If you only need to configure the default value of the
+   *     parameter, you may use a shorthand syntax.   In the **`params`**
+   *     map, instead mapping the param name to a full parameter configuration
+   *     object, simply set map it to the default parameter value, e.g.:
+   *
+   * <pre>// define a parameter's default value
+   * params: {
+   *     param1: { value: "defaultValue" }
+   * }
+   * // shorthand default values
+   * params: {
+   *     param1: "defaultValue",
+   *     param2: "param2Default"
+   * }</pre>
+   *
+   *   - ** array ** - {boolean=}: *(default: false)* If true, the param value will be
+   *     treated as an array of values.  If you specified a Type, the value will be
+   *     treated as an array of the specified Type.  Note: query parameter values
+   *     default to a special `"auto"` mode.
+   *
+   *     For query parameters in `"auto"` mode, if multiple  values for a single parameter
+   *     are present in the URL (e.g.: `/foo?bar=1&bar=2&bar=3`) then the values
+   *     are mapped to an array (e.g.: `{ foo: [ '1', '2', '3' ] }`).  However, if
+   *     only one value is present (e.g.: `/foo?bar=1`) then the value is treated as single
+   *     value (e.g.: `{ foo: '1' }`).
+   *
+   * <pre>params: {
+   *     param1: { array: true }
+   * }</pre>
+   *
+   *   - ** squash ** - {bool|string=}: `squash` configures how a default parameter value is represented in the URL when
+   *     the current parameter value is the same as the default value. If `squash` is not set, it uses the
+   *     configured default squash policy.
+   *     (See {@link ui.router.util.$urlMatcherFactory#methods_defaultSquashPolicy `defaultSquashPolicy()`})
+   *
+   *   There are three squash settings:
+   *
+   *     - false: The parameter's default value is not squashed.  It is encoded and included in the URL
+   *     - true: The parameter's default value is omitted from the URL.  If the parameter is preceeded and followed
+   *       by slashes in the state's `url` declaration, then one of those slashes are omitted.
+   *       This can allow for cleaner looking URLs.
+   *     - `"<arbitrary string>"`: The parameter's default value is replaced with an arbitrary placeholder of  your choice.
+   *
+   * <pre>params: {
+   *     param1: {
+   *       value: "defaultId",
+   *       squash: true
+   * } }
+   * // squash "defaultValue" to "~"
+   * params: {
+   *     param1: {
+   *       value: "defaultValue",
+   *       squash: "~"
+   * } }
+   * </pre>
+   *
+   *
+   * @example
+   * <pre>
+   * // Some state name examples
+   *
+   * // stateName can be a single top-level name (must be unique).
+   * $stateProvider.state("home", {});
+   *
+   * // Or it can be a nested state name. This state is a child of the
+   * // above "home" state.
+   * $stateProvider.state("home.newest", {});
+   *
+   * // Nest states as deeply as needed.
+   * $stateProvider.state("home.newest.abc.xyz.inception", {});
+   *
+   * // state() returns $stateProvider, so you can chain state declarations.
+   * $stateProvider
+   *   .state("home", {})
+   *   .state("about", {})
+   *   .state("contacts", {});
+   * </pre>
+   *
+   */
+  this.state = state;
+  function state(name, definition) {
+    /*jshint validthis: true */
+    if (isObject(name)) definition = name;
+    else definition.name = name;
+    registerState(definition);
+    return this;
+  }
+
+  /**
+   * @ngdoc object
+   * @name ui.router.state.$state
+   *
+   * @requires $rootScope
+   * @requires $q
+   * @requires ui.router.state.$view
+   * @requires $injector
+   * @requires ui.router.util.$resolve
+   * @requires ui.router.state.$stateParams
+   * @requires ui.router.router.$urlRouter
+   *
+   * @property {object} params A param object, e.g. {sectionId: section.id)}, that 
+   * you'd like to test against the current active state.
+   * @property {object} current A reference to the state's config object. However 
+   * you passed it in. Useful for accessing custom data.
+   * @property {object} transition Currently pending transition. A promise that'll 
+   * resolve or reject.
+   *
+   * @description
+   * `$state` service is responsible for representing states as well as transitioning
+   * between them. It also provides interfaces to ask for current state or even states
+   * you're coming from.
+   */
+  this.$get = $get;
+  $get.$inject = ['$rootScope', '$q', '$view', '$injector', '$resolve', '$stateParams', '$urlRouter', '$location', '$urlMatcherFactory'];
+  function $get(   $rootScope,   $q,   $view,   $injector,   $resolve,   $stateParams,   $urlRouter,   $location,   $urlMatcherFactory) {
+
+    var TransitionSuperseded = $q.reject(new Error('transition superseded'));
+    var TransitionPrevented = $q.reject(new Error('transition prevented'));
+    var TransitionAborted = $q.reject(new Error('transition aborted'));
+    var TransitionFailed = $q.reject(new Error('transition failed'));
+
+    // Handles the case where a state which is the target of a transition is not found, and the user
+    // can optionally retry or defer the transition
+    function handleRedirect(redirect, state, params, options) {
+      /**
+       * @ngdoc event
+       * @name ui.router.state.$state#$stateNotFound
+       * @eventOf ui.router.state.$state
+       * @eventType broadcast on root scope
+       * @description
+       * Fired when a requested state **cannot be found** using the provided state name during transition.
+       * The event is broadcast allowing any handlers a single chance to deal with the error (usually by
+       * lazy-loading the unfound state). A special `unfoundState` object is passed to the listener handler,
+       * you can see its three properties in the example. You can use `event.preventDefault()` to abort the
+       * transition and the promise returned from `go` will be rejected with a `'transition aborted'` value.
+       *
+       * @param {Object} event Event object.
+       * @param {Object} unfoundState Unfound State information. Contains: `to, toParams, options` properties.
+       * @param {State} fromState Current state object.
+       * @param {Object} fromParams Current state params.
+       *
+       * @example
+       *
+       * <pre>
+       * // somewhere, assume lazy.state has not been defined
+       * $state.go("lazy.state", {a:1, b:2}, {inherit:false});
+       *
+       * // somewhere else
+       * $scope.$on('$stateNotFound',
+       * function(event, unfoundState, fromState, fromParams){
+       *     console.log(unfoundState.to); // "lazy.state"
+       *     console.log(unfoundState.toParams); // {a:1, b:2}
+       *     console.log(unfoundState.options); // {inherit:false} + default options
+       * })
+       * </pre>
+       */
+      var evt = $rootScope.$broadcast('$stateNotFound', redirect, state, params);
+
+      if (evt.defaultPrevented) {
+        $urlRouter.update();
+        return TransitionAborted;
+      }
+
+      if (!evt.retry) {
+        return null;
+      }
+
+      // Allow the handler to return a promise to defer state lookup retry
+      if (options.$retry) {
+        $urlRouter.update();
+        return TransitionFailed;
+      }
+      var retryTransition = $state.transition = $q.when(evt.retry);
+
+      retryTransition.then(function() {
+        if (retryTransition !== $state.transition) return TransitionSuperseded;
+        redirect.options.$retry = true;
+        return $state.transitionTo(redirect.to, redirect.toParams, redirect.options);
+      }, function() {
+        return TransitionAborted;
+      });
+      $urlRouter.update();
+
+      return retryTransition;
+    }
+
+    root.locals = { resolve: null, globals: { $stateParams: {} } };
+
+    $state = {
+      params: {},
+      current: root.self,
+      $current: root,
+      transition: null
+    };
+
+    /**
+     * @ngdoc function
+     * @name ui.router.state.$state#reload
+     * @methodOf ui.router.state.$state
+     *
+     * @description
+     * A method that force reloads the current state. All resolves are re-resolved,
+     * controllers reinstantiated, and events re-fired.
+     *
+     * @example
+     * <pre>
+     * var app angular.module('app', ['ui.router']);
+     *
+     * app.controller('ctrl', function ($scope, $state) {
+     *   $scope.reload = function(){
+     *     $state.reload();
+     *   }
+     * });
+     * </pre>
+     *
+     * `reload()` is just an alias for:
+     * <pre>
+     * $state.transitionTo($state.current, $stateParams, { 
+     *   reload: true, inherit: false, notify: true
+     * });
+     * </pre>
+     *
+     * @param {string=|object=} state - A state name or a state object, which is the root of the resolves to be re-resolved.
+     * @example
+     * <pre>
+     * //assuming app application consists of 3 states: 'contacts', 'contacts.detail', 'contacts.detail.item' 
+     * //and current state is 'contacts.detail.item'
+     * var app angular.module('app', ['ui.router']);
+     *
+     * app.controller('ctrl', function ($scope, $state) {
+     *   $scope.reload = function(){
+     *     //will reload 'contact.detail' and 'contact.detail.item' states
+     *     $state.reload('contact.detail');
+     *   }
+     * });
+     * </pre>
+     *
+     * `reload()` is just an alias for:
+     * <pre>
+     * $state.transitionTo($state.current, $stateParams, { 
+     *   reload: true, inherit: false, notify: true
+     * });
+     * </pre>
+
+     * @returns {promise} A promise representing the state of the new transition. See
+     * {@link ui.router.state.$state#methods_go $state.go}.
+     */
+    $state.reload = function reload(state) {
+      return $state.transitionTo($state.current, $stateParams, { reload: state || true, inherit: false, notify: true});
+    };
+
+    /**
+     * @ngdoc function
+     * @name ui.router.state.$state#go
+     * @methodOf ui.router.state.$state
+     *
+     * @description
+     * Convenience method for transitioning to a new state. `$state.go` calls 
+     * `$state.transitionTo` internally but automatically sets options to 
+     * `{ location: true, inherit: true, relative: $state.$current, notify: true }`. 
+     * This allows you to easily use an absolute or relative to path and specify 
+     * only the parameters you'd like to update (while letting unspecified parameters 
+     * inherit from the currently active ancestor states).
+     *
+     * @example
+     * <pre>
+     * var app = angular.module('app', ['ui.router']);
+     *
+     * app.controller('ctrl', function ($scope, $state) {
+     *   $scope.changeState = function () {
+     *     $state.go('contact.detail');
+     *   };
+     * });
+     * </pre>
+     * <img src='../ngdoc_assets/StateGoExamples.png'/>
+     *
+     * @param {string} to Absolute state name or relative state path. Some examples:
+     *
+     * - `$state.go('contact.detail')` - will go to the `contact.detail` state
+     * - `$state.go('^')` - will go to a parent state
+     * - `$state.go('^.sibling')` - will go to a sibling state
+     * - `$state.go('.child.grandchild')` - will go to grandchild state
+     *
+     * @param {object=} params A map of the parameters that will be sent to the state, 
+     * will populate $stateParams. Any parameters that are not specified will be inherited from currently 
+     * defined parameters. This allows, for example, going to a sibling state that shares parameters
+     * specified in a parent state. Parameter inheritance only works between common ancestor states, I.e.
+     * transitioning to a sibling will get you the parameters for all parents, transitioning to a child
+     * will get you all current parameters, etc.
+     * @param {object=} options Options object. The options are:
+     *
+     * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`
+     *    will not. If string, must be `"replace"`, which will update url and also replace last history record.
+     * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url.
+     * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), 
+     *    defines which state to be relative from.
+     * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.
+     * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params 
+     *    have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd
+     *    use this when you want to force a reload when *everything* is the same, including search params.
+     *
+     * @returns {promise} A promise representing the state of the new transition.
+     *
+     * Possible success values:
+     *
+     * - $state.current
+     *
+     * <br/>Possible rejection values:
+     *
+     * - 'transition superseded' - when a newer transition has been started after this one
+     * - 'transition prevented' - when `event.preventDefault()` has been called in a `$stateChangeStart` listener
+     * - 'transition aborted' - when `event.preventDefault()` has been called in a `$stateNotFound` listener or
+     *   when a `$stateNotFound` `event.retry` promise errors.
+     * - 'transition failed' - when a state has been unsuccessfully found after 2 tries.
+     * - *resolve error* - when an error has occurred with a `resolve`
+     *
+     */
+    $state.go = function go(to, params, options) {
+      return $state.transitionTo(to, params, extend({ inherit: true, relative: $state.$current }, options));
+    };
+
+    /**
+     * @ngdoc function
+     * @name ui.router.state.$state#transitionTo
+     * @methodOf ui.router.state.$state
+     *
+     * @description
+     * Low-level method for transitioning to a new state. {@link ui.router.state.$state#methods_go $state.go}
+     * uses `transitionTo` internally. `$state.go` is recommended in most situations.
+     *
+     * @example
+     * <pre>
+     * var app = angular.module('app', ['ui.router']);
+     *
+     * app.controller('ctrl', function ($scope, $state) {
+     *   $scope.changeState = function () {
+     *     $state.transitionTo('contact.detail');
+     *   };
+     * });
+     * </pre>
+     *
+     * @param {string} to State name.
+     * @param {object=} toParams A map of the parameters that will be sent to the state,
+     * will populate $stateParams.
+     * @param {object=} options Options object. The options are:
+     *
+     * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`
+     *    will not. If string, must be `"replace"`, which will update url and also replace last history record.
+     * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url.
+     * - **`relative`** - {object=}, When transitioning with relative path (e.g '^'), 
+     *    defines which state to be relative from.
+     * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.
+     * - **`reload`** (v0.2.5) - {boolean=false|string=|object=}, If `true` will force transition even if the state or params 
+     *    have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd
+     *    use this when you want to force a reload when *everything* is the same, including search params.
+     *    if String, then will reload the state with the name given in reload, and any children.
+     *    if Object, then a stateObj is expected, will reload the state found in stateObj, and any children.
+     *
+     * @returns {promise} A promise representing the state of the new transition. See
+     * {@link ui.router.state.$state#methods_go $state.go}.
+     */
+    $state.transitionTo = function transitionTo(to, toParams, options) {
+      toParams = toParams || {};
+      options = extend({
+        location: true, inherit: false, relative: null, notify: true, reload: false, $retry: false
+      }, options || {});
+
+      var from = $state.$current, fromParams = $state.params, fromPath = from.path;
+      var evt, toState = findState(to, options.relative);
+
+      // Store the hash param for later (since it will be stripped out by various methods)
+      var hash = toParams['#'];
+
+      if (!isDefined(toState)) {
+        var redirect = { to: to, toParams: toParams, options: options };
+        var redirectResult = handleRedirect(redirect, from.self, fromParams, options);
+
+        if (redirectResult) {
+          return redirectResult;
+        }
+
+        // Always retry once if the $stateNotFound was not prevented
+        // (handles either redirect changed or state lazy-definition)
+        to = redirect.to;
+        toParams = redirect.toParams;
+        options = redirect.options;
+        toState = findState(to, options.relative);
+
+        if (!isDefined(toState)) {
+          if (!options.relative) throw new Error("No such state '" + to + "'");
+          throw new Error("Could not resolve '" + to + "' from state '" + options.relative + "'");
+        }
+      }
+      if (toState[abstractKey]) throw new Error("Cannot transition to abstract state '" + to + "'");
+      if (options.inherit) toParams = inheritParams($stateParams, toParams || {}, $state.$current, toState);
+      if (!toState.params.$$validates(toParams)) return TransitionFailed;
+
+      toParams = toState.params.$$values(toParams);
+      to = toState;
+
+      var toPath = to.path;
+
+      // Starting from the root of the path, keep all levels that haven't changed
+      var keep = 0, state = toPath[keep], locals = root.locals, toLocals = [];
+
+      if (!options.reload) {
+        while (state && state === fromPath[keep] && state.ownParams.$$equals(toParams, fromParams)) {
+          locals = toLocals[keep] = state.locals;
+          keep++;
+          state = toPath[keep];
+        }
+      } else if (isString(options.reload) || isObject(options.reload)) {
+        if (isObject(options.reload) && !options.reload.name) {
+          throw new Error('Invalid reload state object');
+        }
+        
+        var reloadState = options.reload === true ? fromPath[0] : findState(options.reload);
+        if (options.reload && !reloadState) {
+          throw new Error("No such reload state '" + (isString(options.reload) ? options.reload : options.reload.name) + "'");
+        }
+
+        while (state && state === fromPath[keep] && state !== reloadState) {
+          locals = toLocals[keep] = state.locals;
+          keep++;
+          state = toPath[keep];
+        }
+      }
+
+      // If we're going to the same state and all locals are kept, we've got nothing to do.
+      // But clear 'transition', as we still want to cancel any other pending transitions.
+      // TODO: We may not want to bump 'transition' if we're called from a location change
+      // that we've initiated ourselves, because we might accidentally abort a legitimate
+      // transition initiated from code?
+      if (shouldSkipReload(to, toParams, from, fromParams, locals, options)) {
+        if (hash) toParams['#'] = hash;
+        $state.params = toParams;
+        copy($state.params, $stateParams);
+        if (options.location && to.navigable && to.navigable.url) {
+          $urlRouter.push(to.navigable.url, toParams, {
+            $$avoidResync: true, replace: options.location === 'replace'
+          });
+          $urlRouter.update(true);
+        }
+        $state.transition = null;
+        return $q.when($state.current);
+      }
+
+      // Filter parameters before we pass them to event handlers etc.
+      toParams = filterByKeys(to.params.$$keys(), toParams || {});
+
+      // Broadcast start event and cancel the transition if requested
+      if (options.notify) {
+        /**
+         * @ngdoc event
+         * @name ui.router.state.$state#$stateChangeStart
+         * @eventOf ui.router.state.$state
+         * @eventType broadcast on root scope
+         * @description
+         * Fired when the state transition **begins**. You can use `event.preventDefault()`
+         * to prevent the transition from happening and then the transition promise will be
+         * rejected with a `'transition prevented'` value.
+         *
+         * @param {Object} event Event object.
+         * @param {State} toState The state being transitioned to.
+         * @param {Object} toParams The params supplied to the `toState`.
+         * @param {State} fromState The current state, pre-transition.
+         * @param {Object} fromParams The params supplied to the `fromState`.
+         *
+         * @example
+         *
+         * <pre>
+         * $rootScope.$on('$stateChangeStart',
+         * function(event, toState, toParams, fromState, fromParams){
+         *     event.preventDefault();
+         *     // transitionTo() promise will be rejected with
+         *     // a 'transition prevented' error
+         * })
+         * </pre>
+         */
+        if ($rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams).defaultPrevented) {
+          $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams);
+          $urlRouter.update();
+          return TransitionPrevented;
+        }
+      }
+
+      // Resolve locals for the remaining states, but don't update any global state just
+      // yet -- if anything fails to resolve the current state needs to remain untouched.
+      // We also set up an inheritance chain for the locals here. This allows the view directive
+      // to quickly look up the correct definition for each view in the current state. Even
+      // though we create the locals object itself outside resolveState(), it is initially
+      // empty and gets filled asynchronously. We need to keep track of the promise for the
+      // (fully resolved) current locals, and pass this down the chain.
+      var resolved = $q.when(locals);
+
+      for (var l = keep; l < toPath.length; l++, state = toPath[l]) {
+        locals = toLocals[l] = inherit(locals);
+        resolved = resolveState(state, toParams, state === to, resolved, locals, options);
+      }
+
+      // Once everything is resolved, we are ready to perform the actual transition
+      // and return a promise for the new state. We also keep track of what the
+      // current promise is, so that we can detect overlapping transitions and
+      // keep only the outcome of the last transition.
+      var transition = $state.transition = resolved.then(function () {
+        var l, entering, exiting;
+
+        if ($state.transition !== transition) return TransitionSuperseded;
+
+        // Exit 'from' states not kept
+        for (l = fromPath.length - 1; l >= keep; l--) {
+          exiting = fromPath[l];
+          if (exiting.self.onExit) {
+            $injector.invoke(exiting.self.onExit, exiting.self, exiting.locals.globals);
+          }
+          exiting.locals = null;
+        }
+
+        // Enter 'to' states not kept
+        for (l = keep; l < toPath.length; l++) {
+          entering = toPath[l];
+          entering.locals = toLocals[l];
+          if (entering.self.onEnter) {
+            $injector.invoke(entering.self.onEnter, entering.self, entering.locals.globals);
+          }
+        }
+
+        // Re-add the saved hash before we start returning things
+        if (hash) toParams['#'] = hash;
+
+        // Run it again, to catch any transitions in callbacks
+        if ($state.transition !== transition) return TransitionSuperseded;
+
+        // Update globals in $state
+        $state.$current = to;
+        $state.current = to.self;
+        $state.params = toParams;
+        copy($state.params, $stateParams);
+        $state.transition = null;
+
+        if (options.location && to.navigable) {
+          $urlRouter.push(to.navigable.url, to.navigable.locals.globals.$stateParams, {
+            $$avoidResync: true, replace: options.location === 'replace'
+          });
+        }
+
+        if (options.notify) {
+        /**
+         * @ngdoc event
+         * @name ui.router.state.$state#$stateChangeSuccess
+         * @eventOf ui.router.state.$state
+         * @eventType broadcast on root scope
+         * @description
+         * Fired once the state transition is **complete**.
+         *
+         * @param {Object} event Event object.
+         * @param {State} toState The state being transitioned to.
+         * @param {Object} toParams The params supplied to the `toState`.
+         * @param {State} fromState The current state, pre-transition.
+         * @param {Object} fromParams The params supplied to the `fromState`.
+         */
+          $rootScope.$broadcast('$stateChangeSuccess', to.self, toParams, from.self, fromParams);
+        }
+        $urlRouter.update(true);
+
+        return $state.current;
+      }, function (error) {
+        if ($state.transition !== transition) return TransitionSuperseded;
+
+        $state.transition = null;
+        /**
+         * @ngdoc event
+         * @name ui.router.state.$state#$stateChangeError
+         * @eventOf ui.router.state.$state
+         * @eventType broadcast on root scope
+         * @description
+         * Fired when an **error occurs** during transition. It's important to note that if you
+         * have any errors in your resolve functions (javascript errors, non-existent services, etc)
+         * they will not throw traditionally. You must listen for this $stateChangeError event to
+         * catch **ALL** errors.
+         *
+         * @param {Object} event Event object.
+         * @param {State} toState The state being transitioned to.
+         * @param {Object} toParams The params supplied to the `toState`.
+         * @param {State} fromState The current state, pre-transition.
+         * @param {Object} fromParams The params supplied to the `fromState`.
+         * @param {Error} error The resolve error object.
+         */
+        evt = $rootScope.$broadcast('$stateChangeError', to.self, toParams, from.self, fromParams, error);
+
+        if (!evt.defaultPrevented) {
+            $urlRouter.update();
+        }
+
+        return $q.reject(error);
+      });
+
+      return transition;
+    };
+
+    /**
+     * @ngdoc function
+     * @name ui.router.state.$state#is
+     * @methodOf ui.router.state.$state
+     *
+     * @description
+     * Similar to {@link ui.router.state.$state#methods_includes $state.includes},
+     * but only checks for the full state name. If params is supplied then it will be
+     * tested for strict equality against the current active params object, so all params
+     * must match with none missing and no extras.
+     *
+     * @example
+     * <pre>
+     * $state.$current.name = 'contacts.details.item';
+     *
+     * // absolute name
+     * $state.is('contact.details.item'); // returns true
+     * $state.is(contactDetailItemStateObject); // returns true
+     *
+     * // relative name (. and ^), typically from a template
+     * // E.g. from the 'contacts.details' template
+     * <div ng-class="{highlighted: $state.is('.item')}">Item</div>
+     * </pre>
+     *
+     * @param {string|object} stateOrName The state name (absolute or relative) or state object you'd like to check.
+     * @param {object=} params A param object, e.g. `{sectionId: section.id}`, that you'd like
+     * to test against the current active state.
+     * @param {object=} options An options object.  The options are:
+     *
+     * - **`relative`** - {string|object} -  If `stateOrName` is a relative state name and `options.relative` is set, .is will
+     * test relative to `options.relative` state (or name).
+     *
+     * @returns {boolean} Returns true if it is the state.
+     */
+    $state.is = function is(stateOrName, params, options) {
+      options = extend({ relative: $state.$current }, options || {});
+      var state = findState(stateOrName, options.relative);
+
+      if (!isDefined(state)) { return undefined; }
+      if ($state.$current !== state) { return false; }
+      return params ? equalForKeys(state.params.$$values(params), $stateParams) : true;
+    };
+
+    /**
+     * @ngdoc function
+     * @name ui.router.state.$state#includes
+     * @methodOf ui.router.state.$state
+     *
+     * @description
+     * A method to determine if the current active state is equal to or is the child of the
+     * state stateName. If any params are passed then they will be tested for a match as well.
+     * Not all the parameters need to be passed, just the ones you'd like to test for equality.
+     *
+     * @example
+     * Partial and relative names
+     * <pre>
+     * $state.$current.name = 'contacts.details.item';
+     *
+     * // Using partial names
+     * $state.includes("contacts"); // returns true
+     * $state.includes("contacts.details"); // returns true
+     * $state.includes("contacts.details.item"); // returns true
+     * $state.includes("contacts.list"); // returns false
+     * $state.includes("about"); // returns false
+     *
+     * // Using relative names (. and ^), typically from a template
+     * // E.g. from the 'contacts.details' template
+     * <div ng-class="{highlighted: $state.includes('.item')}">Item</div>
+     * </pre>
+     *
+     * Basic globbing patterns
+     * <pre>
+     * $state.$current.name = 'contacts.details.item.url';
+     *
+     * $state.includes("*.details.*.*"); // returns true
+     * $state.includes("*.details.**"); // returns true
+     * $state.includes("**.item.**"); // returns true
+     * $state.includes("*.details.item.url"); // returns true
+     * $state.includes("*.details.*.url"); // returns true
+     * $state.includes("*.details.*"); // returns false
+     * $state.includes("item.**"); // returns false
+     * </pre>
+     *
+     * @param {string} stateOrName A partial name, relative name, or glob pattern
+     * to be searched for within the current state name.
+     * @param {object=} params A param object, e.g. `{sectionId: section.id}`,
+     * that you'd like to test against the current active state.
+     * @param {object=} options An options object.  The options are:
+     *
+     * - **`relative`** - {string|object=} -  If `stateOrName` is a relative state reference and `options.relative` is set,
+     * .includes will test relative to `options.relative` state (or name).
+     *
+     * @returns {boolean} Returns true if it does include the state
+     */
+    $state.includes = function includes(stateOrName, params, options) {
+      options = extend({ relative: $state.$current }, options || {});
+      if (isString(stateOrName) && isGlob(stateOrName)) {
+        if (!doesStateMatchGlob(stateOrName)) {
+          return false;
+        }
+        stateOrName = $state.$current.name;
+      }
+
+      var state = findState(stateOrName, options.relative);
+      if (!isDefined(state)) { return undefined; }
+      if (!isDefined($state.$current.includes[state.name])) { return false; }
+      return params ? equalForKeys(state.params.$$values(params), $stateParams, objectKeys(params)) : true;
+    };
+
+
+    /**
+     * @ngdoc function
+     * @name ui.router.state.$state#href
+     * @methodOf ui.router.state.$state
+     *
+     * @description
+     * A url generation method that returns the compiled url for the given state populated with the given params.
+     *
+     * @example
+     * <pre>
+     * expect($state.href("about.person", { person: "bob" })).toEqual("/about/bob");
+     * </pre>
+     *
+     * @param {string|object} stateOrName The state name or state object you'd like to generate a url from.
+     * @param {object=} params An object of parameter values to fill the state's required parameters.
+     * @param {object=} options Options object. The options are:
+     *
+     * - **`lossy`** - {boolean=true} -  If true, and if there is no url associated with the state provided in the
+     *    first parameter, then the constructed href url will be built from the first navigable ancestor (aka
+     *    ancestor with a valid url).
+     * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url.
+     * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), 
+     *    defines which state to be relative from.
+     * - **`absolute`** - {boolean=false},  If true will generate an absolute url, e.g. "http://www.example.com/fullurl".
+     * 
+     * @returns {string} compiled state url
+     */
+    $state.href = function href(stateOrName, params, options) {
+      options = extend({
+        lossy:    true,
+        inherit:  true,
+        absolute: false,
+        relative: $state.$current
+      }, options || {});
+
+      var state = findState(stateOrName, options.relative);
+
+      if (!isDefined(state)) return null;
+      if (options.inherit) params = inheritParams($stateParams, params || {}, $state.$current, state);
+      
+      var nav = (state && options.lossy) ? state.navigable : state;
+
+      if (!nav || nav.url === undefined || nav.url === null) {
+        return null;
+      }
+      return $urlRouter.href(nav.url, filterByKeys(state.params.$$keys().concat('#'), params || {}), {
+        absolute: options.absolute
+      });
+    };
+
+    /**
+     * @ngdoc function
+     * @name ui.router.state.$state#get
+     * @methodOf ui.router.state.$state
+     *
+     * @description
+     * Returns the state configuration object for any specific state or all states.
+     *
+     * @param {string|object=} stateOrName (absolute or relative) If provided, will only get the config for
+     * the requested state. If not provided, returns an array of ALL state configs.
+     * @param {string|object=} context When stateOrName is a relative state reference, the state will be retrieved relative to context.
+     * @returns {Object|Array} State configuration object or array of all objects.
+     */
+    $state.get = function (stateOrName, context) {
+      if (arguments.length === 0) return map(objectKeys(states), function(name) { return states[name].self; });
+      var state = findState(stateOrName, context || $state.$current);
+      return (state && state.self) ? state.self : null;
+    };
+
+    function resolveState(state, params, paramsAreFiltered, inherited, dst, options) {
+      // Make a restricted $stateParams with only the parameters that apply to this state if
+      // necessary. In addition to being available to the controller and onEnter/onExit callbacks,
+      // we also need $stateParams to be available for any $injector calls we make during the
+      // dependency resolution process.
+      var $stateParams = (paramsAreFiltered) ? params : filterByKeys(state.params.$$keys(), params);
+      var locals = { $stateParams: $stateParams };
+
+      // Resolve 'global' dependencies for the state, i.e. those not specific to a view.
+      // We're also including $stateParams in this; that way the parameters are restricted
+      // to the set that should be visible to the state, and are independent of when we update
+      // the global $state and $stateParams values.
+      dst.resolve = $resolve.resolve(state.resolve, locals, dst.resolve, state);
+      var promises = [dst.resolve.then(function (globals) {
+        dst.globals = globals;
+      })];
+      if (inherited) promises.push(inherited);
+
+      function resolveViews() {
+        var viewsPromises = [];
+
+        // Resolve template and dependencies for all views.
+        forEach(state.views, function (view, name) {
+          var injectables = (view.resolve && view.resolve !== state.resolve ? view.resolve : {});
+          injectables.$template = [ function () {
+            return $view.load(name, { view: view, locals: dst.globals, params: $stateParams, notify: options.notify }) || '';
+          }];
+
+          viewsPromises.push($resolve.resolve(injectables, dst.globals, dst.resolve, state).then(function (result) {
+            // References to the controller (only instantiated at link time)
+            if (isFunction(view.controllerProvider) || isArray(view.controllerProvider)) {
+              var injectLocals = angular.extend({}, injectables, dst.globals);
+              result.$$controller = $injector.invoke(view.controllerProvider, null, injectLocals);
+            } else {
+              result.$$controller = view.controller;
+            }
+            // Provide access to the state itself for internal use
+            result.$$state = state;
+            result.$$controllerAs = view.controllerAs;
+            dst[name] = result;
+          }));
+        });
+
+        return $q.all(viewsPromises).then(function(){
+          return dst.globals;
+        });
+      }
+
+      // Wait for all the promises and then return the activation object
+      return $q.all(promises).then(resolveViews).then(function (values) {
+        return dst;
+      });
+    }
+
+    return $state;
+  }
+
+  function shouldSkipReload(to, toParams, from, fromParams, locals, options) {
+    // Return true if there are no differences in non-search (path/object) params, false if there are differences
+    function nonSearchParamsEqual(fromAndToState, fromParams, toParams) {
+      // Identify whether all the parameters that differ between `fromParams` and `toParams` were search params.
+      function notSearchParam(key) {
+        return fromAndToState.params[key].location != "search";
+      }
+      var nonQueryParamKeys = fromAndToState.params.$$keys().filter(notSearchParam);
+      var nonQueryParams = pick.apply({}, [fromAndToState.params].concat(nonQueryParamKeys));
+      var nonQueryParamSet = new $$UMFP.ParamSet(nonQueryParams);
+      return nonQueryParamSet.$$equals(fromParams, toParams);
+    }
+
+    // If reload was not explicitly requested
+    // and we're transitioning to the same state we're already in
+    // and    the locals didn't change
+    //     or they changed in a way that doesn't merit reloading
+    //        (reloadOnParams:false, or reloadOnSearch.false and only search params changed)
+    // Then return true.
+    if (!options.reload && to === from &&
+      (locals === from.locals || (to.self.reloadOnSearch === false && nonSearchParamsEqual(from, fromParams, toParams)))) {
+      return true;
+    }
+  }
+}
+
+angular.module('ui.router.state')
+  .value('$stateParams', {})
+  .provider('$state', $StateProvider);
+
+
+$ViewProvider.$inject = [];
+function $ViewProvider() {
+
+  this.$get = $get;
+  /**
+   * @ngdoc object
+   * @name ui.router.state.$view
+   *
+   * @requires ui.router.util.$templateFactory
+   * @requires $rootScope
+   *
+   * @description
+   *
+   */
+  $get.$inject = ['$rootScope', '$templateFactory'];
+  function $get(   $rootScope,   $templateFactory) {
+    return {
+      // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... })
+      /**
+       * @ngdoc function
+       * @name ui.router.state.$view#load
+       * @methodOf ui.router.state.$view
+       *
+       * @description
+       *
+       * @param {string} name name
+       * @param {object} options option object.
+       */
+      load: function load(name, options) {
+        var result, defaults = {
+          template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {}
+        };
+        options = extend(defaults, options);
+
+        if (options.view) {
+          result = $templateFactory.fromConfig(options.view, options.params, options.locals);
+        }
+        if (result && options.notify) {
+        /**
+         * @ngdoc event
+         * @name ui.router.state.$state#$viewContentLoading
+         * @eventOf ui.router.state.$view
+         * @eventType broadcast on root scope
+         * @description
+         *
+         * Fired once the view **begins loading**, *before* the DOM is rendered.
+         *
+         * @param {Object} event Event object.
+         * @param {Object} viewConfig The view config properties (template, controller, etc).
+         *
+         * @example
+         *
+         * <pre>
+         * $scope.$on('$viewContentLoading',
+         * function(event, viewConfig){
+         *     // Access to all the view config properties.
+         *     // and one special property 'targetView'
+         *     // viewConfig.targetView
+         * });
+         * </pre>
+         */
+          $rootScope.$broadcast('$viewContentLoading', options);
+        }
+        return result;
+      }
+    };
+  }
+}
+
+angular.module('ui.router.state').provider('$view', $ViewProvider);
+
+/**
+ * @ngdoc object
+ * @name ui.router.state.$uiViewScrollProvider
+ *
+ * @description
+ * Provider that returns the {@link ui.router.state.$uiViewScroll} service function.
+ */
+function $ViewScrollProvider() {
+
+  var useAnchorScroll = false;
+
+  /**
+   * @ngdoc function
+   * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll
+   * @methodOf ui.router.state.$uiViewScrollProvider
+   *
+   * @description
+   * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for
+   * scrolling based on the url anchor.
+   */
+  this.useAnchorScroll = function () {
+    useAnchorScroll = true;
+  };
+
+  /**
+   * @ngdoc object
+   * @name ui.router.state.$uiViewScroll
+   *
+   * @requires $anchorScroll
+   * @requires $timeout
+   *
+   * @description
+   * When called with a jqLite element, it scrolls the element into view (after a
+   * `$timeout` so the DOM has time to refresh).
+   *
+   * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor,
+   * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}.
+   */
+  this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) {
+    if (useAnchorScroll) {
+      return $anchorScroll;
+    }
+
+    return function ($element) {
+      return $timeout(function () {
+        $element[0].scrollIntoView();
+      }, 0, false);
+    };
+  }];
+}
+
+angular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider);
+
+/**
+ * @ngdoc directive
+ * @name ui.router.state.directive:ui-view
+ *
+ * @requires ui.router.state.$state
+ * @requires $compile
+ * @requires $controller
+ * @requires $injector
+ * @requires ui.router.state.$uiViewScroll
+ * @requires $document
+ *
+ * @restrict ECA
+ *
+ * @description
+ * The ui-view directive tells $state where to place your templates.
+ *
+ * @param {string=} name A view name. The name should be unique amongst the other views in the
+ * same state. You can have views of the same name that live in different states.
+ *
+ * @param {string=} autoscroll It allows you to set the scroll behavior of the browser window
+ * when a view is populated. By default, $anchorScroll is overridden by ui-router's custom scroll
+ * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you
+ * scroll ui-view elements into view when they are populated during a state activation.
+ *
+ * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll)
+ * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.*
+ *
+ * @param {string=} onload Expression to evaluate whenever the view updates.
+ * 
+ * @example
+ * A view can be unnamed or named. 
+ * <pre>
+ * <!-- Unnamed -->
+ * <div ui-view></div> 
+ * 
+ * <!-- Named -->
+ * <div ui-view="viewName"></div>
+ * </pre>
+ *
+ * You can only have one unnamed view within any template (or root html). If you are only using a 
+ * single view and it is unnamed then you can populate it like so:
+ * <pre>
+ * <div ui-view></div> 
+ * $stateProvider.state("home", {
+ *   template: "<h1>HELLO!</h1>"
+ * })
+ * </pre>
+ * 
+ * The above is a convenient shortcut equivalent to specifying your view explicitly with the {@link ui.router.state.$stateProvider#views `views`}
+ * config property, by name, in this case an empty name:
+ * <pre>
+ * $stateProvider.state("home", {
+ *   views: {
+ *     "": {
+ *       template: "<h1>HELLO!</h1>"
+ *     }
+ *   }    
+ * })
+ * </pre>
+ * 
+ * But typically you'll only use the views property if you name your view or have more than one view 
+ * in the same template. There's not really a compelling reason to name a view if its the only one, 
+ * but you could if you wanted, like so:
+ * <pre>
+ * <div ui-view="main"></div>
+ * </pre> 
+ * <pre>
+ * $stateProvider.state("home", {
+ *   views: {
+ *     "main": {
+ *       template: "<h1>HELLO!</h1>"
+ *     }
+ *   }    
+ * })
+ * </pre>
+ * 
+ * Really though, you'll use views to set up multiple views:
+ * <pre>
+ * <div ui-view></div>
+ * <div ui-view="chart"></div> 
+ * <div ui-view="data"></div> 
+ * </pre>
+ * 
+ * <pre>
+ * $stateProvider.state("home", {
+ *   views: {
+ *     "": {
+ *       template: "<h1>HELLO!</h1>"
+ *     },
+ *     "chart": {
+ *       template: "<chart_thing/>"
+ *     },
+ *     "data": {
+ *       template: "<data_thing/>"
+ *     }
+ *   }    
+ * })
+ * </pre>
+ *
+ * Examples for `autoscroll`:
+ *
+ * <pre>
+ * <!-- If autoscroll present with no expression,
+ *      then scroll ui-view into view -->
+ * <ui-view autoscroll/>
+ *
+ * <!-- If autoscroll present with valid expression,
+ *      then scroll ui-view into view if expression evaluates to true -->
+ * <ui-view autoscroll='true'/>
+ * <ui-view autoscroll='false'/>
+ * <ui-view autoscroll='scopeVariable'/>
+ * </pre>
+ */
+$ViewDirective.$inject = ['$state', '$injector', '$uiViewScroll', '$interpolate'];
+function $ViewDirective(   $state,   $injector,   $uiViewScroll,   $interpolate) {
+
+  function getService() {
+    return ($injector.has) ? function(service) {
+      return $injector.has(service) ? $injector.get(service) : null;
+    } : function(service) {
+      try {
+        return $injector.get(service);
+      } catch (e) {
+        return null;
+      }
+    };
+  }
+
+  var service = getService(),
+      $animator = service('$animator'),
+      $animate = service('$animate');
+
+  // Returns a set of DOM manipulation functions based on which Angular version
+  // it should use
+  function getRenderer(attrs, scope) {
+    var statics = function() {
+      return {
+        enter: function (element, target, cb) { target.after(element); cb(); },
+        leave: function (element, cb) { element.remove(); cb(); }
+      };
+    };
+
+    if ($animate) {
+      return {
+        enter: function(element, target, cb) {
+          var promise = $animate.enter(element, null, target, cb);
+          if (promise && promise.then) promise.then(cb);
+        },
+        leave: function(element, cb) {
+          var promise = $animate.leave(element, cb);
+          if (promise && promise.then) promise.then(cb);
+        }
+      };
+    }
+
+    if ($animator) {
+      var animate = $animator && $animator(scope, attrs);
+
+      return {
+        enter: function(element, target, cb) {animate.enter(element, null, target); cb(); },
+        leave: function(element, cb) { animate.leave(element); cb(); }
+      };
+    }
+
+    return statics();
+  }
+
+  var directive = {
+    restrict: 'ECA',
+    terminal: true,
+    priority: 400,
+    transclude: 'element',
+    compile: function (tElement, tAttrs, $transclude) {
+      return function (scope, $element, attrs) {
+        var previousEl, currentEl, currentScope, latestLocals,
+            onloadExp     = attrs.onload || '',
+            autoScrollExp = attrs.autoscroll,
+            renderer      = getRenderer(attrs, scope);
+
+        scope.$on('$stateChangeSuccess', function() {
+          updateView(false);
+        });
+        scope.$on('$viewContentLoading', function() {
+          updateView(false);
+        });
+
+        updateView(true);
+
+        function cleanupLastView() {
+          if (previousEl) {
+            previousEl.remove();
+            previousEl = null;
+          }
+
+          if (currentScope) {
+            currentScope.$destroy();
+            currentScope = null;
+          }
+
+          if (currentEl) {
+            renderer.leave(currentEl, function() {
+              previousEl = null;
+            });
+
+            previousEl = currentEl;
+            currentEl = null;
+          }
+        }
+
+        function updateView(firstTime) {
+          var newScope,
+              name            = getUiViewName(scope, attrs, $element, $interpolate),
+              previousLocals  = name && $state.$current && $state.$current.locals[name];
+
+          if (!firstTime && previousLocals === latestLocals) return; // nothing to do
+          newScope = scope.$new();
+          latestLocals = $state.$current.locals[name];
+
+          var clone = $transclude(newScope, function(clone) {
+            renderer.enter(clone, $element, function onUiViewEnter() {
+              if(currentScope) {
+                currentScope.$emit('$viewContentAnimationEnded');
+              }
+
+              if (angular.isDefined(autoScrollExp) && !autoScrollExp || scope.$eval(autoScrollExp)) {
+                $uiViewScroll(clone);
+              }
+            });
+            cleanupLastView();
+          });
+
+          currentEl = clone;
+          currentScope = newScope;
+          /**
+           * @ngdoc event
+           * @name ui.router.state.directive:ui-view#$viewContentLoaded
+           * @eventOf ui.router.state.directive:ui-view
+           * @eventType emits on ui-view directive scope
+           * @description           *
+           * Fired once the view is **loaded**, *after* the DOM is rendered.
+           *
+           * @param {Object} event Event object.
+           */
+          currentScope.$emit('$viewContentLoaded');
+          currentScope.$eval(onloadExp);
+        }
+      };
+    }
+  };
+
+  return directive;
+}
+
+$ViewDirectiveFill.$inject = ['$compile', '$controller', '$state', '$interpolate'];
+function $ViewDirectiveFill (  $compile,   $controller,   $state,   $interpolate) {
+  return {
+    restrict: 'ECA',
+    priority: -400,
+    compile: function (tElement) {
+      var initial = tElement.html();
+      return function (scope, $element, attrs) {
+        var current = $state.$current,
+            name = getUiViewName(scope, attrs, $element, $interpolate),
+            locals  = current && current.locals[name];
+
+        if (! locals) {
+          return;
+        }
+
+        $element.data('$uiView', { name: name, state: locals.$$state });
+        $element.html(locals.$template ? locals.$template : initial);
+
+        var link = $compile($element.contents());
+
+        if (locals.$$controller) {
+          locals.$scope = scope;
+          locals.$element = $element;
+          var controller = $controller(locals.$$controller, locals);
+          if (locals.$$controllerAs) {
+            scope[locals.$$controllerAs] = controller;
+          }
+          $element.data('$ngControllerController', controller);
+          $element.children().data('$ngControllerController', controller);
+        }
+
+        link(scope);
+      };
+    }
+  };
+}
+
+/**
+ * Shared ui-view code for both directives:
+ * Given scope, element, and its attributes, return the view's name
+ */
+function getUiViewName(scope, attrs, element, $interpolate) {
+  var name = $interpolate(attrs.uiView || attrs.name || '')(scope);
+  var inherited = element.inheritedData('$uiView');
+  return name.indexOf('@') >= 0 ?  name :  (name + '@' + (inherited ? inherited.state.name : ''));
+}
+
+angular.module('ui.router.state').directive('uiView', $ViewDirective);
+angular.module('ui.router.state').directive('uiView', $ViewDirectiveFill);
+
+function parseStateRef(ref, current) {
+  var preparsed = ref.match(/^\s*({[^}]*})\s*$/), parsed;
+  if (preparsed) ref = current + '(' + preparsed[1] + ')';
+  parsed = ref.replace(/\n/g, " ").match(/^([^(]+?)\s*(\((.*)\))?$/);
+  if (!parsed || parsed.length !== 4) throw new Error("Invalid state ref '" + ref + "'");
+  return { state: parsed[1], paramExpr: parsed[3] || null };
+}
+
+function stateContext(el) {
+  var stateData = el.parent().inheritedData('$uiView');
+
+  if (stateData && stateData.state && stateData.state.name) {
+    return stateData.state;
+  }
+}
+
+/**
+ * @ngdoc directive
+ * @name ui.router.state.directive:ui-sref
+ *
+ * @requires ui.router.state.$state
+ * @requires $timeout
+ *
+ * @restrict A
+ *
+ * @description
+ * A directive that binds a link (`<a>` tag) to a state. If the state has an associated 
+ * URL, the directive will automatically generate & update the `href` attribute via 
+ * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking 
+ * the link will trigger a state transition with optional parameters. 
+ *
+ * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be 
+ * handled natively by the browser.
+ *
+ * You can also use relative state paths within ui-sref, just like the relative 
+ * paths passed to `$state.go()`. You just need to be aware that the path is relative
+ * to the state that the link lives in, in other words the state that loaded the 
+ * template containing the link.
+ *
+ * You can specify options to pass to {@link ui.router.state.$state#go $state.go()}
+ * using the `ui-sref-opts` attribute. Options are restricted to `location`, `inherit`,
+ * and `reload`.
+ *
+ * @example
+ * Here's an example of how you'd use ui-sref and how it would compile. If you have the 
+ * following template:
+ * <pre>
+ * <a ui-sref="home">Home</a> | <a ui-sref="about">About</a> | <a ui-sref="{page: 2}">Next page</a>
+ * 
+ * <ul>
+ *     <li ng-repeat="contact in contacts">
+ *         <a ui-sref="contacts.detail({ id: contact.id })">{{ contact.name }}</a>
+ *     </li>
+ * </ul>
+ * </pre>
+ * 
+ * Then the compiled html would be (assuming Html5Mode is off and current state is contacts):
+ * <pre>
+ * <a href="#/home" ui-sref="home">Home</a> | <a href="#/about" ui-sref="about">About</a> | <a href="#/contacts?page=2" ui-sref="{page: 2}">Next page</a>
+ * 
+ * <ul>
+ *     <li ng-repeat="contact in contacts">
+ *         <a href="#/contacts/1" ui-sref="contacts.detail({ id: contact.id })">Joe</a>
+ *     </li>
+ *     <li ng-repeat="contact in contacts">
+ *         <a href="#/contacts/2" ui-sref="contacts.detail({ id: contact.id })">Alice</a>
+ *     </li>
+ *     <li ng-repeat="contact in contacts">
+ *         <a href="#/contacts/3" ui-sref="contacts.detail({ id: contact.id })">Bob</a>
+ *     </li>
+ * </ul>
+ *
+ * <a ui-sref="home" ui-sref-opts="{reload: true}">Home</a>
+ * </pre>
+ *
+ * @param {string} ui-sref 'stateName' can be any valid absolute or relative state
+ * @param {Object} ui-sref-opts options to pass to {@link ui.router.state.$state#go $state.go()}
+ */
+$StateRefDirective.$inject = ['$state', '$timeout'];
+function $StateRefDirective($state, $timeout) {
+  var allowedOptions = ['location', 'inherit', 'reload', 'absolute'];
+
+  return {
+    restrict: 'A',
+    require: ['?^uiSrefActive', '?^uiSrefActiveEq'],
+    link: function(scope, element, attrs, uiSrefActive) {
+      var ref = parseStateRef(attrs.uiSref, $state.current.name);
+      var params = null, url = null, base = stateContext(element) || $state.$current;
+      // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.
+      var hrefKind = Object.prototype.toString.call(element.prop('href')) === '[object SVGAnimatedString]' ?
+                 'xlink:href' : 'href';
+      var newHref = null, isAnchor = element.prop("tagName").toUpperCase() === "A";
+      var isForm = element[0].nodeName === "FORM";
+      var attr = isForm ? "action" : hrefKind, nav = true;
+
+      var options = { relative: base, inherit: true };
+      var optionsOverride = scope.$eval(attrs.uiSrefOpts) || {};
+
+      angular.forEach(allowedOptions, function(option) {
+        if (option in optionsOverride) {
+          options[option] = optionsOverride[option];
+        }
+      });
+
+      var update = function(newVal) {
+        if (newVal) params = angular.copy(newVal);
+        if (!nav) return;
+
+        newHref = $state.href(ref.state, params, options);
+
+        var activeDirective = uiSrefActive[1] || uiSrefActive[0];
+        if (activeDirective) {
+          activeDirective.$$addStateInfo(ref.state, params);
+        }
+        if (newHref === null) {
+          nav = false;
+          return false;
+        }
+        attrs.$set(attr, newHref);
+      };
+
+      if (ref.paramExpr) {
+        scope.$watch(ref.paramExpr, function(newVal, oldVal) {
+          if (newVal !== params) update(newVal);
+        }, true);
+        params = angular.copy(scope.$eval(ref.paramExpr));
+      }
+      update();
+
+      if (isForm) return;
+
+      element.bind("click", function(e) {
+        var button = e.which || e.button;
+        if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) {
+          // HACK: This is to allow ng-clicks to be processed before the transition is initiated:
+          var transition = $timeout(function() {
+            $state.go(ref.state, params, options);
+          });
+          e.preventDefault();
+
+          // if the state has no URL, ignore one preventDefault from the <a> directive.
+          var ignorePreventDefaultCount = isAnchor && !newHref ? 1: 0;
+          e.preventDefault = function() {
+            if (ignorePreventDefaultCount-- <= 0)
+              $timeout.cancel(transition);
+          };
+        }
+      });
+    }
+  };
+}
+
+/**
+ * @ngdoc directive
+ * @name ui.router.state.directive:ui-sref-active
+ *
+ * @requires ui.router.state.$state
+ * @requires ui.router.state.$stateParams
+ * @requires $interpolate
+ *
+ * @restrict A
+ *
+ * @description
+ * A directive working alongside ui-sref to add classes to an element when the
+ * related ui-sref directive's state is active, and removing them when it is inactive.
+ * The primary use-case is to simplify the special appearance of navigation menus
+ * relying on `ui-sref`, by having the "active" state's menu button appear different,
+ * distinguishing it from the inactive menu items.
+ *
+ * ui-sref-active can live on the same element as ui-sref or on a parent element. The first
+ * ui-sref-active found at the same level or above the ui-sref will be used.
+ *
+ * Will activate when the ui-sref's target state or any child state is active. If you
+ * need to activate only when the ui-sref target state is active and *not* any of
+ * it's children, then you will use
+ * {@link ui.router.state.directive:ui-sref-active-eq ui-sref-active-eq}
+ *
+ * @example
+ * Given the following template:
+ * <pre>
+ * <ul>
+ *   <li ui-sref-active="active" class="item">
+ *     <a href ui-sref="app.user({user: 'bilbobaggins'})">@bilbobaggins</a>
+ *   </li>
+ * </ul>
+ * </pre>
+ *
+ *
+ * When the app state is "app.user" (or any children states), and contains the state parameter "user" with value "bilbobaggins",
+ * the resulting HTML will appear as (note the 'active' class):
+ * <pre>
+ * <ul>
+ *   <li ui-sref-active="active" class="item active">
+ *     <a ui-sref="app.user({user: 'bilbobaggins'})" href="/users/bilbobaggins">@bilbobaggins</a>
+ *   </li>
+ * </ul>
+ * </pre>
+ *
+ * The class name is interpolated **once** during the directives link time (any further changes to the
+ * interpolated value are ignored).
+ *
+ * Multiple classes may be specified in a space-separated format:
+ * <pre>
+ * <ul>
+ *   <li ui-sref-active='class1 class2 class3'>
+ *     <a ui-sref="app.user">link</a>
+ *   </li>
+ * </ul>
+ * </pre>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ui.router.state.directive:ui-sref-active-eq
+ *
+ * @requires ui.router.state.$state
+ * @requires ui.router.state.$stateParams
+ * @requires $interpolate
+ *
+ * @restrict A
+ *
+ * @description
+ * The same as {@link ui.router.state.directive:ui-sref-active ui-sref-active} but will only activate
+ * when the exact target state used in the `ui-sref` is active; no child states.
+ *
+ */
+$StateRefActiveDirective.$inject = ['$state', '$stateParams', '$interpolate'];
+function $StateRefActiveDirective($state, $stateParams, $interpolate) {
+  return  {
+    restrict: "A",
+    controller: ['$scope', '$element', '$attrs', function ($scope, $element, $attrs) {
+      var states = [], activeClass;
+
+      // There probably isn't much point in $observing this
+      // uiSrefActive and uiSrefActiveEq share the same directive object with some
+      // slight difference in logic routing
+      activeClass = $interpolate($attrs.uiSrefActiveEq || $attrs.uiSrefActive || '', false)($scope);
+
+      // Allow uiSref to communicate with uiSrefActive[Equals]
+      this.$$addStateInfo = function (newState, newParams) {
+        var state = $state.get(newState, stateContext($element));
+
+        states.push({
+          state: state || { name: newState },
+          params: newParams
+        });
+
+        update();
+      };
+
+      $scope.$on('$stateChangeSuccess', update);
+
+      // Update route state
+      function update() {
+        if (anyMatch()) {
+          $element.addClass(activeClass);
+        } else {
+          $element.removeClass(activeClass);
+        }
+      }
+
+      function anyMatch() {
+        for (var i = 0; i < states.length; i++) {
+          if (isMatch(states[i].state, states[i].params)) {
+            return true;
+          }
+        }
+        return false;
+      }
+
+      function isMatch(state, params) {
+        if (typeof $attrs.uiSrefActiveEq !== 'undefined') {
+          return $state.is(state.name, params);
+        } else {
+          return $state.includes(state.name, params);
+        }
+      }
+    }]
+  };
+}
+
+angular.module('ui.router.state')
+  .directive('uiSref', $StateRefDirective)
+  .directive('uiSrefActive', $StateRefActiveDirective)
+  .directive('uiSrefActiveEq', $StateRefActiveDirective);
+
+/**
+ * @ngdoc filter
+ * @name ui.router.state.filter:isState
+ *
+ * @requires ui.router.state.$state
+ *
+ * @description
+ * Translates to {@link ui.router.state.$state#methods_is $state.is("stateName")}.
+ */
+$IsStateFilter.$inject = ['$state'];
+function $IsStateFilter($state) {
+  var isFilter = function (state) {
+    return $state.is(state);
+  };
+  isFilter.$stateful = true;
+  return isFilter;
+}
+
+/**
+ * @ngdoc filter
+ * @name ui.router.state.filter:includedByState
+ *
+ * @requires ui.router.state.$state
+ *
+ * @description
+ * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}.
+ */
+$IncludedByStateFilter.$inject = ['$state'];
+function $IncludedByStateFilter($state) {
+  var includesFilter = function (state) {
+    return $state.includes(state);
+  };
+  includesFilter.$stateful = true;
+  return  includesFilter;
+}
+
+angular.module('ui.router.state')
+  .filter('isState', $IsStateFilter)
+  .filter('includedByState', $IncludedByStateFilter);
+})(window, window.angular);
\ No newline at end of file
diff --git a/public/bower_components/angular-ui-sortable/sortable.js b/public/bower_components/angular-ui-sortable/sortable.js
new file mode 100644
index 0000000..d00a439
--- /dev/null
+++ b/public/bower_components/angular-ui-sortable/sortable.js
@@ -0,0 +1,361 @@
+/**
+ * angular-ui-sortable - This directive allows you to jQueryUI Sortable.
+ * @version v0.13.4 - 2015-06-07
+ * @link http://angular-ui.github.com
+ * @license MIT
+ */
+
+(function(window, angular, undefined) {
+'use strict';
+/*
+ jQuery UI Sortable plugin wrapper
+
+ @param [ui-sortable] {object} Options to pass to $.fn.sortable() merged onto ui.config
+ */
+angular.module('ui.sortable', [])
+  .value('uiSortableConfig',{})
+  .directive('uiSortable', [
+    'uiSortableConfig', '$timeout', '$log',
+    function(uiSortableConfig, $timeout, $log) {
+      return {
+        require: '?ngModel',
+        scope: {
+          ngModel: '=',
+          uiSortable: '='
+        },
+        link: function(scope, element, attrs, ngModel) {
+          var savedNodes;
+
+          function combineCallbacks(first,second){
+            if(second && (typeof second === 'function')) {
+              return function() {
+                first.apply(this, arguments);
+                second.apply(this, arguments);
+              };
+            }
+            return first;
+          }
+
+          function getSortableWidgetInstance(element) {
+            // this is a fix to support jquery-ui prior to v1.11.x
+            // otherwise we should be using `element.sortable('instance')`
+            var data = element.data('ui-sortable');
+            if (data && typeof data === 'object' && data.widgetFullName === 'ui-sortable') {
+              return data;
+            }
+            return null;
+          }
+
+          function hasSortingHelper (element, ui) {
+            var helperOption = element.sortable('option','helper');
+            return helperOption === 'clone' || (typeof helperOption === 'function' && ui.item.sortable.isCustomHelperUsed());
+          }
+
+          // thanks jquery-ui
+          function isFloating (item) {
+            return (/left|right/).test(item.css('float')) || (/inline|table-cell/).test(item.css('display'));
+          }
+
+          function getElementScope(elementScopes, element) {
+            var result = null;
+            for (var i = 0; i < elementScopes.length; i++) {
+              var x = elementScopes[i];
+              if (x.element[0] === element[0]) {
+                result = x.scope;
+                break;
+              }
+            }
+            return result;
+          }
+
+          function afterStop(e, ui) {
+            ui.item.sortable._destroy();
+          }
+
+          var opts = {};
+
+          // directive specific options
+          var directiveOpts = {
+            'ui-floating': undefined
+          };
+
+          var callbacks = {
+            receive: null,
+            remove:null,
+            start:null,
+            stop:null,
+            update:null
+          };
+
+          var wrappers = {
+            helper: null
+          };
+
+          angular.extend(opts, directiveOpts, uiSortableConfig, scope.uiSortable);
+
+          if (!angular.element.fn || !angular.element.fn.jquery) {
+            $log.error('ui.sortable: jQuery should be included before AngularJS!');
+            return;
+          }
+
+          if (ngModel) {
+
+            // When we add or remove elements, we need the sortable to 'refresh'
+            // so it can find the new/removed elements.
+            scope.$watch('ngModel.length', function() {
+              // Timeout to let ng-repeat modify the DOM
+              $timeout(function() {
+                // ensure that the jquery-ui-sortable widget instance
+                // is still bound to the directive's element
+                if (!!getSortableWidgetInstance(element)) {
+                  element.sortable('refresh');
+                }
+              }, 0, false);
+            });
+
+            callbacks.start = function(e, ui) {
+              if (opts['ui-floating'] === 'auto') {
+                // since the drag has started, the element will be
+                // absolutely positioned, so we check its siblings
+                var siblings = ui.item.siblings();
+                var sortableWidgetInstance = getSortableWidgetInstance(angular.element(e.target));
+                sortableWidgetInstance.floating = isFloating(siblings);
+              }
+
+              // Save the starting position of dragged item
+              ui.item.sortable = {
+                model: ngModel.$modelValue[ui.item.index()],
+                index: ui.item.index(),
+                source: ui.item.parent(),
+                sourceModel: ngModel.$modelValue,
+                cancel: function () {
+                  ui.item.sortable._isCanceled = true;
+                },
+                isCanceled: function () {
+                  return ui.item.sortable._isCanceled;
+                },
+                isCustomHelperUsed: function () {
+                  return !!ui.item.sortable._isCustomHelperUsed;
+                },
+                _isCanceled: false,
+                _isCustomHelperUsed: ui.item.sortable._isCustomHelperUsed,
+                _destroy: function () {
+                  angular.forEach(ui.item.sortable, function(value, key) {
+                    ui.item.sortable[key] = undefined;
+                  });
+                }
+              };
+            };
+
+            callbacks.activate = function(e, ui) {
+              // We need to make a copy of the current element's contents so
+              // we can restore it after sortable has messed it up.
+              // This is inside activate (instead of start) in order to save
+              // both lists when dragging between connected lists.
+              savedNodes = element.contents();
+
+              // If this list has a placeholder (the connected lists won't),
+              // don't inlcude it in saved nodes.
+              var placeholder = element.sortable('option','placeholder');
+
+              // placeholder.element will be a function if the placeholder, has
+              // been created (placeholder will be an object).  If it hasn't
+              // been created, either placeholder will be false if no
+              // placeholder class was given or placeholder.element will be
+              // undefined if a class was given (placeholder will be a string)
+              if (placeholder && placeholder.element && typeof placeholder.element === 'function') {
+                var phElement = placeholder.element();
+                // workaround for jquery ui 1.9.x,
+                // not returning jquery collection
+                phElement = angular.element(phElement);
+
+                // exact match with the placeholder's class attribute to handle
+                // the case that multiple connected sortables exist and
+                // the placehoilder option equals the class of sortable items
+                var excludes = element.find('[class="' + phElement.attr('class') + '"]:not([ng-repeat], [data-ng-repeat])');
+
+                savedNodes = savedNodes.not(excludes);
+              }
+
+              // save the directive's scope so that it is accessible from ui.item.sortable
+              var connectedSortables = ui.item.sortable._connectedSortables || [];
+
+              connectedSortables.push({
+                element: element,
+                scope: scope
+              });
+
+              ui.item.sortable._connectedSortables = connectedSortables;
+            };
+
+            callbacks.update = function(e, ui) {
+              // Save current drop position but only if this is not a second
+              // update that happens when moving between lists because then
+              // the value will be overwritten with the old value
+              if(!ui.item.sortable.received) {
+                ui.item.sortable.dropindex = ui.item.index();
+                var droptarget = ui.item.parent();
+                ui.item.sortable.droptarget = droptarget;
+
+                var droptargetScope = getElementScope(ui.item.sortable._connectedSortables, droptarget);
+                ui.item.sortable.droptargetModel = droptargetScope.ngModel;
+
+                // Cancel the sort (let ng-repeat do the sort for us)
+                // Don't cancel if this is the received list because it has
+                // already been canceled in the other list, and trying to cancel
+                // here will mess up the DOM.
+                element.sortable('cancel');
+              }
+
+              // Put the nodes back exactly the way they started (this is very
+              // important because ng-repeat uses comment elements to delineate
+              // the start and stop of repeat sections and sortable doesn't
+              // respect their order (even if we cancel, the order of the
+              // comments are still messed up).
+              if (hasSortingHelper(element, ui) && !ui.item.sortable.received &&
+                  element.sortable( 'option', 'appendTo' ) === 'parent') {
+                // restore all the savedNodes except .ui-sortable-helper element
+                // (which is placed last). That way it will be garbage collected.
+                savedNodes = savedNodes.not(savedNodes.last());
+              }
+              savedNodes.appendTo(element);
+
+              // If this is the target connected list then
+              // it's safe to clear the restored nodes since:
+              // update is currently running and
+              // stop is not called for the target list.
+              if(ui.item.sortable.received) {
+                savedNodes = null;
+              }
+
+              // If received is true (an item was dropped in from another list)
+              // then we add the new item to this list otherwise wait until the
+              // stop event where we will know if it was a sort or item was
+              // moved here from another list
+              if(ui.item.sortable.received && !ui.item.sortable.isCanceled()) {
+                scope.$apply(function () {
+                  ngModel.$modelValue.splice(ui.item.sortable.dropindex, 0,
+                                             ui.item.sortable.moved);
+                });
+              }
+            };
+
+            callbacks.stop = function(e, ui) {
+              // If the received flag hasn't be set on the item, this is a
+              // normal sort, if dropindex is set, the item was moved, so move
+              // the items in the list.
+              if(!ui.item.sortable.received &&
+                 ('dropindex' in ui.item.sortable) &&
+                 !ui.item.sortable.isCanceled()) {
+
+                scope.$apply(function () {
+                  ngModel.$modelValue.splice(
+                    ui.item.sortable.dropindex, 0,
+                    ngModel.$modelValue.splice(ui.item.sortable.index, 1)[0]);
+                });
+              } else {
+                // if the item was not moved, then restore the elements
+                // so that the ngRepeat's comment are correct.
+                if ((!('dropindex' in ui.item.sortable) || ui.item.sortable.isCanceled()) &&
+                    !hasSortingHelper(element, ui)) {
+                  savedNodes.appendTo(element);
+                }
+              }
+
+              // It's now safe to clear the savedNodes
+              // since stop is the last callback.
+              savedNodes = null;
+            };
+
+            callbacks.receive = function(e, ui) {
+              // An item was dropped here from another list, set a flag on the
+              // item.
+              ui.item.sortable.received = true;
+            };
+
+            callbacks.remove = function(e, ui) {
+              // Workaround for a problem observed in nested connected lists.
+              // There should be an 'update' event before 'remove' when moving
+              // elements. If the event did not fire, cancel sorting.
+              if (!('dropindex' in ui.item.sortable)) {
+                element.sortable('cancel');
+                ui.item.sortable.cancel();
+              }
+
+              // Remove the item from this list's model and copy data into item,
+              // so the next list can retrive it
+              if (!ui.item.sortable.isCanceled()) {
+                scope.$apply(function () {
+                  ui.item.sortable.moved = ngModel.$modelValue.splice(
+                    ui.item.sortable.index, 1)[0];
+                });
+              }
+            };
+
+            wrappers.helper = function (inner) {
+              if (inner && typeof inner === 'function') {
+                return function (e, item) {
+                  var innerResult = inner.apply(this, arguments);
+                  item.sortable._isCustomHelperUsed = item !== innerResult;
+                  return innerResult;
+                };
+              }
+              return inner;
+            };
+
+            scope.$watch('uiSortable', function(newVal /*, oldVal*/) {
+              // ensure that the jquery-ui-sortable widget instance
+              // is still bound to the directive's element
+              var sortableWidgetInstance = getSortableWidgetInstance(element);
+              if (!!sortableWidgetInstance) {
+                angular.forEach(newVal, function(value, key) {
+                  // if it's a custom option of the directive,
+                  // handle it approprietly
+                  if (key in directiveOpts) {
+                    if (key === 'ui-floating' && (value === false || value === true)) {
+                      sortableWidgetInstance.floating = value;
+                    }
+
+                    opts[key] = value;
+                    return;
+                  }
+
+                  if (callbacks[key]) {
+                    if( key === 'stop' ){
+                      // call apply after stop
+                      value = combineCallbacks(
+                        value, function() { scope.$apply(); });
+
+                      value = combineCallbacks(value, afterStop);
+                    }
+                    // wrap the callback
+                    value = combineCallbacks(callbacks[key], value);
+                  } else if (wrappers[key]) {
+                    value = wrappers[key](value);
+                  }
+
+                  opts[key] = value;
+                  element.sortable('option', key, value);
+                });
+              }
+            }, true);
+
+            angular.forEach(callbacks, function(value, key) {
+              opts[key] = combineCallbacks(value, opts[key]);
+              if( key === 'stop' ){
+                opts[key] = combineCallbacks(opts[key], afterStop);
+              }
+            });
+
+          } else {
+            $log.info('ui.sortable: ngModel not provided!', element);
+          }
+
+          // Create sortable
+          element.sortable(opts);
+        }
+      };
+    }
+  ]);
+
+})(window, window.angular);
diff --git a/public/bower_components/angular-wizard/angular-wizard.min.css b/public/bower_components/angular-wizard/angular-wizard.min.css
new file mode 100644
index 0000000..32cbfb4
--- /dev/null
+++ b/public/bower_components/angular-wizard/angular-wizard.min.css
@@ -0,0 +1 @@
+.steps-indicator li a:before,.steps-indicator:before{background-color:#e6e6e6;content:''}.steps-indicator li.current,.steps-indicator li.default,.steps-indicator li.editing{pointer-events:none}.steps-indicator{right:0;bottom:0;left:0;margin:0;padding:20px 0 0;height:30px;list-style:none}.steps-indicator:before{position:absolute;height:1px}.steps-indicator.steps-2:before{left:calc(100% / 2 / 2);right:calc(100% / 2 / 2)}.steps-indicator.steps-3:before{left:calc(100% / 3 / 2);right:calc(100% / 3 / 2)}.steps-indicator.steps-4:before{left:calc(100% / 4 / 2);right:calc(100% / 4 / 2)}.steps-indicator.steps-5:before{left:calc(100% / 5 / 2);right:calc(100% / 5 / 2)}.steps-indicator.steps-6:before{left:calc(100% / 6 / 2);right:calc(100% / 6 / 2)}.steps-indicator.steps-7:before{left:calc(100% / 7 / 2);right:calc(100% / 7 / 2)}.steps-indicator.steps-8:before{left:calc(100% / 8 / 2);right:calc(100% / 8 / 2)}.steps-indicator.steps-9:before{left:calc(100% / 9 / 2);right:calc(100% / 9 / 2)}.steps-indicator.steps-10:before{left:calc(100% / 10 / 2);right:calc(100% / 10 / 2)}.steps-indicator *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.steps-indicator li{position:relative;float:left;margin:0;padding:0;padding-top:10px;text-align:center;line-height:15px}.steps-indicator li a{color:grey;text-decoration:none;text-transform:uppercase;font-weight:700;transition:.25s;cursor:pointer}.steps-indicator li a:before{position:absolute;top:-7px;left:calc(50% - 7px);width:14px;height:14px;border-radius:100%;transition:.25s}.steps-indicator li a:hover{color:#4d4d4d}.steps-indicator.steps-2 li{width:calc(100% / 2)}.steps-indicator.steps-3 li{width:calc(100% / 3)}.steps-indicator.steps-4 li{width:calc(100% / 4)}.steps-indicator.steps-5 li{width:calc(100% / 5)}.steps-indicator.steps-6 li{width:calc(100% / 6)}.steps-indicator.steps-7 li{width:calc(100% / 7)}.steps-indicator.steps-8 li{width:calc(100% / 8)}.steps-indicator.steps-9 li{width:calc(100% / 9)}.steps-indicator.steps-10 li{width:calc(100% / 10)}.steps-indicator.steps-11 li{width:calc(100% / 11)}.steps-indicator li.default a:hover{color:grey}.steps-indicator li.current a:before{background-color:grey}.steps-indicator li.done a:before{background-color:#393}.steps-indicator li.editing a:before{background-color:red}
\ No newline at end of file
diff --git a/public/bower_components/angular-wizard/angular-wizard.min.js b/public/bower_components/angular-wizard/angular-wizard.min.js
new file mode 100644
index 0000000..14b8f22
--- /dev/null
+++ b/public/bower_components/angular-wizard/angular-wizard.min.js
@@ -0,0 +1,7 @@
+/**
+ * Easy to use Wizard library for AngularJS
+ * @version v0.5.5 - 2015-09-21 * @link https://github.com/mgonto/angular-wizard
+ * @author Martin Gontovnikas <[email-masked]>
+ * @license MIT License, http://www.opensource.org/licenses/MIT
+ */
+function wizardButtonDirective(a){angular.module("mgo-angular-wizard").directive(a,function(){return{restrict:"A",replace:!1,require:"^wizard",link:function(b,c,d,e){c.on("click",function(c){c.preventDefault(),b.$apply(function(){b.$eval(d[a]),e[a.replace("wz","").toLowerCase()]()})})}}})}angular.module("templates-angularwizard",["step.html","wizard.html"]),angular.module("step.html",[]).run(["$templateCache",function(a){a.put("step.html",'<section ng-show="selected" ng-class="{current: selected, done: completed}" class="step" ng-transclude>\n</section>')}]),angular.module("wizard.html",[]).run(["$templateCache",function(a){a.put("wizard.html",'<div>\n    <div class="steps" ng-transclude></div>\n    <ul class="steps-indicator steps-{{getEnabledSteps().length}}" ng-if="!hideIndicators">\n      <li ng-class="{default: !step.completed && !step.selected, current: step.selected && !step.completed, done: step.completed && !step.selected, editing: step.selected && step.completed}" ng-repeat="step in getEnabledSteps()">\n        <a ng-click="goTo(step)">{{step.title || step.wzTitle}}</a>\n      </li>\n    </ul>\n</div>\n')}]),angular.module("mgo-angular-wizard",["templates-angularwizard"]),angular.module("mgo-angular-wizard").directive("wzStep",function(){return{restrict:"EA",replace:!0,transclude:!0,scope:{wzTitle:"@",title:"@",canenter:"=",canexit:"=",disabled:"@?wzDisabled"},require:"^wizard",templateUrl:function(a,b){return b.template||"step.html"},link:function(a,b,c,d){a.title=a.title||a.wzTitle,d.addStep(a)}}}),angular.module("mgo-angular-wizard").directive("wizard",function(){return{restrict:"EA",replace:!0,transclude:!0,scope:{currentStep:"=",onFinish:"&",hideIndicators:"=",editMode:"=",name:"@"},templateUrl:function(a,b){return b.template||"wizard.html"},controller:["$scope","$element","$log","WizardHandler","$q",function(a,b,c,d,e){function f(b){var c,d;return void 0===b.canenter?!0:"boolean"==typeof b.canenter?b.canenter:(d=b.canenter(a.context),angular.isFunction(d.then)?(c=e.defer(),d.then(function(a){c.resolve(a)}),c.promise):b.canenter(a.context)===!0)}function g(b,c){var d,f;return"undefined"==typeof b.canexit||a.getStepNumber(c)<a.currentStepNumber()?!0:"boolean"==typeof b.canexit?b.canexit:(f=b.canexit(a.context),angular.isFunction(f.then)?(d=e.defer(),f.then(function(a){d.resolve(a)}),d.promise):b.canexit(a.context)===!0)}function h(){_.each(a.getEnabledSteps(),function(a){a.selected=!1}),a.selectedStep=null}var i=!0;d.addWizard(a.name||d.defaultName,this),a.$on("$destroy",function(){d.removeWizard(a.name||d.defaultName)}),a.steps=[],a.context={},a.$watch("currentStep",function(b){if(b){var c=a.selectedStep.title||a.selectedStep.wzTitle;a.selectedStep&&c!==a.currentStep&&a.goTo(_.findWhere(a.getEnabledSteps(),{title:a.currentStep}))}}),a.$watch("[editMode, steps.length]",function(){var b=a.editMode;_.isUndefined(b)||_.isNull(b)||b&&_.each(a.getEnabledSteps(),function(a){a.completed=!0})},!0),this.addStep=function(b){a.steps.push(b),1===a.getEnabledSteps().length&&a.goTo(a.getEnabledSteps()[0])},this.context=a.context,a.getStepNumber=function(b){return _.indexOf(a.getEnabledSteps(),b)+1},a.goTo=function(b){if(i)h(),a.selectedStep=b,_.isUndefined(a.currentStep)||(a.currentStep=b.title||b.wzTitle),b.selected=!0,a.$emit("wizard:stepChanged",{step:b,index:_.indexOf(a.getEnabledSteps(),b)}),i=!1;else{var c;a.currentStepNumber()>0?c=a.currentStepNumber()-1:0===a.currentStepNumber()&&(c=0),e.all([g(a.getEnabledSteps()[c],b),f(b)]).then(function(c){c[0]&&c[1]&&(h(),a.selectedStep=b,_.isUndefined(a.currentStep)||(a.currentStep=b.title||b.wzTitle),b.selected=!0,a.$emit("wizard:stepChanged",{step:b,index:_.indexOf(a.getEnabledSteps(),b)}))})}},a.currentStepNumber=function(){return _.indexOf(a.getEnabledSteps(),a.selectedStep)+1},a.getEnabledSteps=function(){return _.filter(a.steps,function(a){return"true"!==a.disabled})},this.currentStepTitle=function(){return a.selectedStep.title},this.currentStepNumber=function(){return a.currentStepNumber()},this.next=function(b){var c=a.getEnabledSteps(),d=_.indexOf(c,a.selectedStep);if(angular.isFunction(b)){if(!b())return;d===c.length-1?this.finish():a.goTo(c[d+1])}b||(a.selectedStep.completed=!0),d===c.length-1?this.finish():a.goTo(c[d+1])},this.goTo=function(b){var c,d=a.getEnabledSteps();c=_.isNumber(b)?d[b]:_.findWhere(d,{title:b}),a.goTo(c)},this.finish=function(){a.onFinish&&a.onFinish()},this.previous=function(){var b=_.indexOf(a.getEnabledSteps(),a.selectedStep);if(0===b)throw new Error("Can't go back. It's already in step 0");a.goTo(a.getEnabledSteps()[b-1])},this.cancel=function(){var b=_.indexOf(a.getEnabledSteps(),a.selectedStep);if(0===b)throw new Error("Can't go back. It's already in step 0");a.goTo(a.getEnabledSteps()[0])}}]}}),wizardButtonDirective("wzNext"),wizardButtonDirective("wzPrevious"),wizardButtonDirective("wzFinish"),wizardButtonDirective("wzCancel"),angular.module("mgo-angular-wizard").factory("WizardHandler",function(){var a={},b={};return a.defaultName="defaultWizard",a.addWizard=function(a,c){b[a]=c},a.removeWizard=function(a){delete b[a]},a.wizard=function(c){var d=c;return c||(d=a.defaultName),b[d]},a});
\ No newline at end of file
diff --git a/public/bower_components/angular-xeditable/xeditable.css b/public/bower_components/angular-xeditable/xeditable.css
new file mode 100644
index 0000000..6e9b19f
--- /dev/null
+++ b/public/bower_components/angular-xeditable/xeditable.css
@@ -0,0 +1,7 @@
+/*!
+angular-xeditable - 0.1.9
+Edit-in-place for angular.js
+Build date: 2015-03-26 
+*/
+
+.editable-wrap{display:inline-block;white-space:nowrap;margin:0}.editable-wrap .editable-controls,.editable-wrap .editable-error{margin-bottom:0}.editable-wrap .editable-controls>input,.editable-wrap .editable-controls>select,.editable-wrap .editable-controls>textarea{margin-bottom:0}.editable-wrap .editable-input{display:inline-block}.editable-buttons{display:inline-block;vertical-align:top}.editable-buttons button{margin-left:5px}.editable-input.editable-has-buttons{width:auto}.editable-bstime .editable-input input[type=text]{width:46px}.editable-bstime .well-small{margin-bottom:0;padding:10px}.editable-range output{display:inline-block;min-width:30px;vertical-align:top;text-align:center}.editable-color input[type=color]{width:50px}.editable-checkbox label span,.editable-checklist label span,.editable-radiolist label span{margin-left:7px;margin-right:10px}.editable-hide{display:none!important}.editable-click,a.editable-click{text-decoration:none;color:#428bca;border-bottom:dashed 1px #428bca}.editable-click:hover,a.editable-click:hover{text-decoration:none;color:#2a6496;border-bottom-color:#2a6496}.editable-empty,.editable-empty:hover,.editable-empty:focus,a.editable-empty,a.editable-empty:hover,a.editable-empty:focus{font-style:italic;color:#D14;text-decoration:none}
\ No newline at end of file
diff --git a/public/bower_components/angular-xeditable/xeditable.js b/public/bower_components/angular-xeditable/xeditable.js
new file mode 100644
index 0000000..cde698b
--- /dev/null
+++ b/public/bower_components/angular-xeditable/xeditable.js
@@ -0,0 +1,2227 @@
+/*!
+angular-xeditable - 0.1.9
+Edit-in-place for angular.js
+Build date: 2015-03-26 
+*/
+/**
+ * Angular-xeditable module 
+ *
+ */
+angular.module('xeditable', [])
+
+
+/**
+ * Default options. 
+ *
+ * @namespace editable-options
+ */
+//todo: maybe better have editableDefaults, not options...
+.value('editableOptions', {
+  /**
+   * Theme. Possible values `bs3`, `bs2`, `default`.
+   * 
+   * @var {string} theme
+   * @memberOf editable-options
+   */  
+  theme: 'default',
+  /**
+   * Icon Set. Possible values `font-awesome`, `default`.
+   * 
+   * @var {string} icon set
+   * @memberOf editable-options
+   */  
+  icon_set: 'default',
+  /**
+   * Whether to show buttons for single editalbe element.  
+   * Possible values `right` (default), `no`.
+   * 
+   * @var {string} buttons
+   * @memberOf editable-options
+   */    
+  buttons: 'right',
+  /**
+   * Default value for `blur` attribute of single editable element.  
+   * Can be `cancel|submit|ignore`.
+   * 
+   * @var {string} blurElem
+   * @memberOf editable-options
+   */
+  blurElem: 'cancel',
+  /**
+   * Default value for `blur` attribute of editable form.  
+   * Can be `cancel|submit|ignore`.
+   * 
+   * @var {string} blurForm
+   * @memberOf editable-options
+   */
+  blurForm: 'ignore',
+  /**
+   * How input elements get activated. Possible values: `focus|select|none`.
+   *
+   * @var {string} activate
+   * @memberOf editable-options
+   */
+  activate: 'focus',
+  /**
+   * Whether to disable x-editable. Can be overloaded on each element.
+   *
+   * @var {boolean} isDisabled
+   * @memberOf editable-options
+   */
+   isDisabled: false,
+  
+  /**
+   * Event, on which the edit mode gets activated. 
+   * Can be any event.
+   *
+   * @var {string} activationEvent
+   * @memberOf editable-options
+   */
+  activationEvent: 'click'
+
+});
+
+/*
+Angular-ui bootstrap datepicker
+http://angular-ui.github.io/bootstrap/#/datepicker
+*/
+angular.module('xeditable').directive('editableBsdate', ['editableDirectiveFactory',
+	function(editableDirectiveFactory) {
+		return editableDirectiveFactory({
+			directiveName: 'editableBsdate',
+			inputTpl: '<div></div>',
+			render: function() {
+				/** This basically renders a datepicker as in the example shown in 
+				**  http://angular-ui.github.io/bootstrap/#/datepicker
+				**  The attributes are all the same as in the bootstrap-ui datepicker with e- as prefix
+				**/
+				this.parent.render.call(this);
+
+				var inputDatePicker = angular.element('<input type="text" class="form-control" ng-model="$data"/>');
+				var buttonDatePicker = angular.element('<button type="button" class="btn btn-default"><i class="glyphicon glyphicon-calendar"></i></button>');
+				var buttonWrapper = angular.element('<span class="input-group-btn"></span>');
+
+				inputDatePicker.attr('datepicker-popup', this.attrs.eDatepickerPopupXEditable || 'yyyy/MM/dd' );
+				inputDatePicker.attr('is-open', this.attrs.eIsOpen);
+				inputDatePicker.attr('date-disabled', this.attrs.eDateDisabled);
+				inputDatePicker.attr('datepicker-popup', this.attrs.eDatepickerPopup);
+				inputDatePicker.attr('datepicker-mode', this.attrs.eDatepickerMode || 'day');
+				inputDatePicker.attr('min-date', this.attrs.eMinDate);
+				inputDatePicker.attr('max-date', this.attrs.eMaxDate);
+				inputDatePicker.attr('show-weeks', this.attrs.eShowWeeks || true);
+				inputDatePicker.attr('starting-day', this.attrs.eStartingDay || 0);
+				inputDatePicker.attr('init-date', this.attrs.eInitDate || new Date());
+				inputDatePicker.attr('min-mode', this.attrs.eMinMode || 'day');
+				inputDatePicker.attr('max-mode', this.attrs.eMaxMode || 'year');
+				inputDatePicker.attr('format-day', this.attrs.eFormatDay || 'dd');
+				inputDatePicker.attr('format-month', this.attrs.eFormatMonth || 'MMMM');
+				inputDatePicker.attr('format-year', this.attrs.eFormatYear || 'yyyy');
+				inputDatePicker.attr('format-day-header', this.attrs.eFormatDayHeader || 'EEE');
+				inputDatePicker.attr('format-day-title', this.attrs.eFormatDayTitle || 'MMMM yyyy');
+				inputDatePicker.attr('format-month-title', this.attrs.eFormatMonthTitle || 'yyyy');
+				inputDatePicker.attr('year-range', this.attrs.eYearRange || 20);
+				inputDatePicker.attr('show-button-bar', this.attrs.eShowButtonBar || true);
+				inputDatePicker.attr('current-text', this.attrs.eCurrentText || 'Today');
+				inputDatePicker.attr('clear-text', this.attrs.eClearText || 'Clear');
+				inputDatePicker.attr('close-text', this.attrs.eCloseText || 'Done');
+				inputDatePicker.attr('close-on-date-selection', this.attrs.eCloseOnDateSelection || true);
+				inputDatePicker.attr('date-picker-append-to-body', this.attrs.eDatePickerAppendToBody || false);
+				inputDatePicker.attr('date-disabled', this.attrs.eDateDisabled);
+
+				buttonDatePicker.attr('ng-click',this.attrs.eNgClick);
+
+				buttonWrapper.append(buttonDatePicker);
+				this.inputEl.prepend(inputDatePicker);
+				this.inputEl.append(buttonWrapper);
+
+				this.inputEl.removeAttr('class');
+				this.inputEl.attr('class','input-group');
+
+			}
+    });
+}]);
+/*
+Angular-ui bootstrap editable timepicker
+http://angular-ui.github.io/bootstrap/#/timepicker
+*/
+angular.module('xeditable').directive('editableBstime', ['editableDirectiveFactory',
+  function(editableDirectiveFactory) {
+    return editableDirectiveFactory({
+      directiveName: 'editableBstime',
+      inputTpl: '<timepicker></timepicker>',
+      render: function() {
+        this.parent.render.call(this);
+
+        // timepicker can't update model when ng-model set directly to it
+        // see: https://github.com/angular-ui/bootstrap/issues/1141
+        // so we wrap it into DIV
+        var div = angular.element('<div class="well well-small" style="display:inline-block;"></div>');
+
+        // move ng-model to wrapping div
+        div.attr('ng-model', this.inputEl.attr('ng-model'));
+        this.inputEl.removeAttr('ng-model');
+
+        // move ng-change to wrapping div
+        if(this.attrs.eNgChange) {
+          div.attr('ng-change', this.inputEl.attr('ng-change'));
+          this.inputEl.removeAttr('ng-change');
+        }
+
+        // wrap
+        this.inputEl.wrap(div);
+      }
+    });
+}]);
+//checkbox
+angular.module('xeditable').directive('editableCheckbox', ['editableDirectiveFactory',
+  function(editableDirectiveFactory) {
+    return editableDirectiveFactory({
+      directiveName: 'editableCheckbox',
+      inputTpl: '<input type="checkbox">',
+      render: function() {
+        this.parent.render.call(this);
+        if(this.attrs.eTitle) {
+          this.inputEl.wrap('<label></label>');
+          this.inputEl.parent().append(this.attrs.eTitle);
+        }
+      },
+      autosubmit: function() {
+        var self = this;
+        self.inputEl.bind('change', function() {
+          setTimeout(function() {
+            self.scope.$apply(function() {
+              self.scope.$form.$submit();
+            });
+          }, 500);
+        });
+      }
+    });
+}]);
+
+// checklist
+angular.module('xeditable').directive('editableChecklist', [
+  'editableDirectiveFactory',
+  'editableNgOptionsParser',
+  function(editableDirectiveFactory, editableNgOptionsParser) {
+    return editableDirectiveFactory({
+      directiveName: 'editableChecklist',
+      inputTpl: '<span></span>',
+      useCopy: true,
+      render: function() {
+        this.parent.render.call(this);
+        var parsed = editableNgOptionsParser(this.attrs.eNgOptions);
+        var html = '<label ng-repeat="'+parsed.ngRepeat+'">'+
+          '<input type="checkbox" checklist-model="$parent.$data" checklist-value="'+parsed.locals.valueFn+'">'+
+          '<span ng-bind="'+parsed.locals.displayFn+'"></span></label>';
+
+        this.inputEl.removeAttr('ng-model');
+        this.inputEl.removeAttr('ng-options');
+        this.inputEl.html(html);
+      }
+    });
+}]);
+
+angular.module('xeditable').directive('editableCombodate', ['editableDirectiveFactory', 'editableCombodate',
+  function(editableDirectiveFactory, editableCombodate) {
+    return editableDirectiveFactory({
+      directiveName: 'editableCombodate',
+      inputTpl: '<input type="text">',
+      render: function() {
+        this.parent.render.call(this);
+        var combodate = editableCombodate.getInstance(this.inputEl, {value: new Date(this.scope.$data)});
+
+        var self = this;
+        combodate.$widget.find('select').bind('change', function(e) {
+          self.scope.$data = (new Date(combodate.getValue())).toISOString();
+        });
+      }
+    });
+  }
+]);
+/*
+Input types: text|email|tel|number|url|search|color|date|datetime|time|month|week
+*/
+
+(function() {
+
+  var types = 'text|password|email|tel|number|url|search|color|date|datetime|time|month|week|file'.split('|');
+
+  //todo: datalist
+  
+  // generate directives
+  angular.forEach(types, function(type) {
+    var directiveName = 'editable'+type.charAt(0).toUpperCase() + type.slice(1);
+    angular.module('xeditable').directive(directiveName, ['editableDirectiveFactory',
+      function(editableDirectiveFactory) {
+        return editableDirectiveFactory({
+          directiveName: directiveName,
+          inputTpl: '<input type="'+type+'">'
+        });
+    }]);
+  });
+
+  //`range` is bit specific
+  angular.module('xeditable').directive('editableRange', ['editableDirectiveFactory',
+    function(editableDirectiveFactory) {
+      return editableDirectiveFactory({
+        directiveName: 'editableRange',
+        inputTpl: '<input type="range" id="range" name="range">',
+        render: function() {
+          this.parent.render.call(this);
+          this.inputEl.after('<output>{{$data}}</output>');
+        }        
+      });
+  }]);
+
+}());
+
+
+// radiolist
+angular.module('xeditable').directive('editableRadiolist', [
+  'editableDirectiveFactory',
+  'editableNgOptionsParser',
+  function(editableDirectiveFactory, editableNgOptionsParser) {
+    return editableDirectiveFactory({
+      directiveName: 'editableRadiolist',
+      inputTpl: '<span></span>',
+      render: function() {
+        this.parent.render.call(this);
+        var parsed = editableNgOptionsParser(this.attrs.eNgOptions);
+        var html = '<label ng-repeat="'+parsed.ngRepeat+'">'+
+          '<input type="radio" ng-disabled="' + this.attrs.eNgDisabled + '" ng-model="$parent.$data" value="{{'+parsed.locals.valueFn+'}}">'+
+          '<span ng-bind="'+parsed.locals.displayFn+'"></span></label>';
+
+        this.inputEl.removeAttr('ng-model');
+        this.inputEl.removeAttr('ng-options');
+        this.inputEl.html(html);
+      },
+      autosubmit: function() {
+        var self = this;
+        self.inputEl.bind('change', function() {
+          setTimeout(function() {
+            self.scope.$apply(function() {
+              self.scope.$form.$submit();
+            });
+          }, 500);
+        });
+      }
+    });
+}]);
+
+//select
+angular.module('xeditable').directive('editableSelect', ['editableDirectiveFactory',
+  function(editableDirectiveFactory) {
+    return editableDirectiveFactory({
+      directiveName: 'editableSelect',
+      inputTpl: '<select></select>',
+      autosubmit: function() {
+        var self = this;
+        self.inputEl.bind('change', function() {
+          self.scope.$apply(function() {
+            self.scope.$form.$submit();
+          });
+        });
+      }
+    });
+}]);
+//textarea
+angular.module('xeditable').directive('editableTextarea', ['editableDirectiveFactory',
+  function(editableDirectiveFactory) {
+    return editableDirectiveFactory({
+      directiveName: 'editableTextarea',
+      inputTpl: '<textarea></textarea>',
+      addListeners: function() {
+        var self = this;
+        self.parent.addListeners.call(self);
+        // submit textarea by ctrl+enter even with buttons
+        if (self.single && self.buttons !== 'no') {
+          self.autosubmit();
+        }
+      },
+      autosubmit: function() {
+        var self = this;
+        self.inputEl.bind('keydown', function(e) {
+          if ((e.ctrlKey || e.metaKey) && (e.keyCode === 13)) {
+            self.scope.$apply(function() {
+              self.scope.$form.$submit();
+            });
+          }
+        });
+      }
+    });
+}]);
+
+/**
+ * EditableController class. 
+ * Attached to element with `editable-xxx` directive.
+ *
+ * @namespace editable-element
+ */
+/*
+TODO: this file should be refactored to work more clear without closures!
+*/
+angular.module('xeditable').factory('editableController', 
+  ['$q', 'editableUtils',
+  function($q, editableUtils) {
+
+  //EditableController function
+  EditableController.$inject = ['$scope', '$attrs', '$element', '$parse', 'editableThemes', 'editableIcons', 'editableOptions', '$rootScope', '$compile', '$q'];
+  function EditableController($scope, $attrs, $element, $parse, editableThemes, editableIcons, editableOptions, $rootScope, $compile, $q) {
+    var valueGetter;
+
+    //if control is disabled - it does not participate in waiting process
+    var inWaiting;
+
+    var self = this;
+
+    self.scope = $scope;
+    self.elem = $element;
+    self.attrs = $attrs;
+    self.inputEl = null;
+    self.editorEl = null;
+    self.single = true;
+    self.error = '';
+    self.theme =  editableThemes[editableOptions.theme] || editableThemes['default'];
+    self.parent = {};
+
+    //will be undefined if icon_set is default and theme is default
+    self.icon_set = editableOptions.icon_set === 'default' ? editableIcons.default[editableOptions.theme] : editableIcons.external[editableOptions.icon_set];
+
+    //to be overwritten by directive
+    self.inputTpl = '';
+    self.directiveName = '';
+
+    // with majority of controls copy is not needed, but..
+    // copy MUST NOT be used for `select-multiple` with objects as items
+    // copy MUST be used for `checklist`
+    self.useCopy = false;
+
+    //runtime (defaults)
+    self.single = null;
+
+    /**
+     * Attributes defined with `e-*` prefix automatically transfered from original element to
+     * control.  
+     * For example, if you set `<span editable-text="user.name" e-style="width: 100px"`>
+     * then input will appear as `<input style="width: 100px">`.  
+     * See [demo](#text-customize).
+     * 
+     * @var {any|attribute} e-*
+     * @memberOf editable-element
+     */ 
+
+    /**
+     * Whether to show ok/cancel buttons. Values: `right|no`.
+     * If set to `no` control automatically submitted when value changed.  
+     * If control is part of form buttons will never be shown. 
+     * 
+     * @var {string|attribute} buttons
+     * @memberOf editable-element
+     */    
+    self.buttons = 'right'; 
+    /**
+     * Action when control losses focus. Values: `cancel|submit|ignore`.
+     * Has sense only for single editable element.
+     * Otherwise, if control is part of form - you should set `blur` of form, not of individual element.
+     * 
+     * @var {string|attribute} blur
+     * @memberOf editable-element
+     */     
+    // no real `blur` property as it is transfered to editable form
+
+    //init
+    self.init = function(single) {
+      self.single = single;
+
+      self.name = $attrs.eName || $attrs[self.directiveName];
+      /*
+      if(!$attrs[directiveName] && !$attrs.eNgModel && ($attrs.eValue === undefined)) {
+        throw 'You should provide value for `'+directiveName+'` or `e-value` in editable element!';
+      }
+      */
+      if($attrs[self.directiveName]) {
+        valueGetter = $parse($attrs[self.directiveName]);
+      } else {
+        throw 'You should provide value for `'+self.directiveName+'` in editable element!';
+      }
+
+      // settings for single and non-single
+      if (!self.single) {
+        // hide buttons for non-single
+        self.buttons = 'no';
+      } else {
+        self.buttons = self.attrs.buttons || editableOptions.buttons;
+      }
+
+      //if name defined --> watch changes and update $data in form
+      if($attrs.eName) {
+        self.scope.$watch('$data', function(newVal){
+          self.scope.$form.$data[$attrs.eName] = newVal;
+        });
+      }
+
+      /**
+       * Called when control is shown.  
+       * See [demo](#select-remote).
+       * 
+       * @var {method|attribute} onshow
+       * @memberOf editable-element
+       */
+      if($attrs.onshow) {
+        self.onshow = function() {
+          return self.catchError($parse($attrs.onshow)($scope));
+        };
+      }
+
+      /**
+       * Called when control is hidden after both save or cancel.  
+       * 
+       * @var {method|attribute} onhide
+       * @memberOf editable-element
+       */
+      if($attrs.onhide) {
+        self.onhide = function() {
+          return $parse($attrs.onhide)($scope);
+        };
+      }
+
+      /**
+       * Called when control is cancelled.  
+       * 
+       * @var {method|attribute} oncancel
+       * @memberOf editable-element
+       */
+      if($attrs.oncancel) {
+        self.oncancel = function() {
+          return $parse($attrs.oncancel)($scope);
+        };
+      }          
+
+      /**
+       * Called during submit before value is saved to model.  
+       * See [demo](#onbeforesave).
+       * 
+       * @var {method|attribute} onbeforesave
+       * @memberOf editable-element
+       */
+      if ($attrs.onbeforesave) {
+        self.onbeforesave = function() {
+          return self.catchError($parse($attrs.onbeforesave)($scope));
+        };
+      }
+
+      /**
+       * Called during submit after value is saved to model.  
+       * See [demo](#onaftersave).
+       * 
+       * @var {method|attribute} onaftersave
+       * @memberOf editable-element
+       */
+      if ($attrs.onaftersave) {
+        self.onaftersave = function() {
+          return self.catchError($parse($attrs.onaftersave)($scope));
+        };
+      }
+
+      // watch change of model to update editable element
+      // now only add/remove `editable-empty` class.
+      // Initially this method called with newVal = undefined, oldVal = undefined
+      // so no need initially call handleEmpty() explicitly
+      $scope.$parent.$watch($attrs[self.directiveName], function(newVal, oldVal) {
+        self.setLocalValue();
+        self.handleEmpty();
+      });
+    };
+
+    self.render = function() {
+      var theme = self.theme;
+
+      //build input
+      self.inputEl = angular.element(self.inputTpl);
+
+      //build controls
+      self.controlsEl = angular.element(theme.controlsTpl);
+      self.controlsEl.append(self.inputEl);
+
+      //build buttons
+      if(self.buttons !== 'no') {
+        self.buttonsEl = angular.element(theme.buttonsTpl);
+        self.submitEl = angular.element(theme.submitTpl);
+        self.cancelEl = angular.element(theme.cancelTpl);
+        if(self.icon_set) {
+          self.submitEl.find('span').addClass(self.icon_set.ok);
+          self.cancelEl.find('span').addClass(self.icon_set.cancel);
+        }
+        self.buttonsEl.append(self.submitEl).append(self.cancelEl);
+        self.controlsEl.append(self.buttonsEl);
+        
+        self.inputEl.addClass('editable-has-buttons');
+      }
+
+      //build error
+      self.errorEl = angular.element(theme.errorTpl);
+      self.controlsEl.append(self.errorEl);
+
+      //build editor
+      self.editorEl = angular.element(self.single ? theme.formTpl : theme.noformTpl);
+      self.editorEl.append(self.controlsEl);
+
+      // transfer `e-*|data-e-*|x-e-*` attributes
+      for(var k in $attrs.$attr) {
+        if(k.length <= 1) {
+          continue;
+        }
+        var transferAttr = false;
+        var nextLetter = k.substring(1, 2);
+
+        // if starts with `e` + uppercase letter
+        if(k.substring(0, 1) === 'e' && nextLetter === nextLetter.toUpperCase()) {
+          transferAttr = k.substring(1); // cut `e`
+        } else {
+          continue;
+        }
+        
+        // exclude `form` and `ng-submit`, 
+        if(transferAttr === 'Form' || transferAttr === 'NgSubmit') {
+          continue;
+        }
+
+        // convert back to lowercase style
+        transferAttr = transferAttr.substring(0, 1).toLowerCase() + editableUtils.camelToDash(transferAttr.substring(1));  
+
+        // workaround for attributes without value (e.g. `multiple = "multiple"`)
+        // except for 'e-value'
+        var attrValue = (transferAttr !== 'value' && $attrs[k] === '') ? transferAttr : $attrs[k];
+
+        // set attributes to input
+        self.inputEl.attr(transferAttr, attrValue);
+      }
+
+      self.inputEl.addClass('editable-input');
+      self.inputEl.attr('ng-model', '$data');
+
+      // add directiveName class to editor, e.g. `editable-text`
+      self.editorEl.addClass(editableUtils.camelToDash(self.directiveName));
+
+      if(self.single) {
+        self.editorEl.attr('editable-form', '$form');
+        // transfer `blur` to form
+        self.editorEl.attr('blur', self.attrs.blur || (self.buttons === 'no' ? 'cancel' : editableOptions.blurElem));
+      }
+
+      //apply `postrender` method of theme
+      if(angular.isFunction(theme.postrender)) {
+        theme.postrender.call(self);
+      }
+
+    };
+
+    // with majority of controls copy is not needed, but..
+    // copy MUST NOT be used for `select-multiple` with objects as items
+    // copy MUST be used for `checklist`
+    self.setLocalValue = function() {
+      self.scope.$data = self.useCopy ? 
+        angular.copy(valueGetter($scope.$parent)) : 
+        valueGetter($scope.$parent);
+    };
+
+    //show
+    self.show = function() {
+      // set value of scope.$data
+      self.setLocalValue();
+
+      /*
+      Originally render() was inside init() method, but some directives polluting editorEl,
+      so it is broken on second openning.
+      Cloning is not a solution as jqLite can not clone with event handler's.
+      */
+      self.render();
+
+      // insert into DOM
+      $element.after(self.editorEl);
+
+      // compile (needed to attach ng-* events from markup)
+      $compile(self.editorEl)($scope);
+
+      // attach listeners (`escape`, autosubmit, etc)
+      self.addListeners();
+
+      // hide element
+      $element.addClass('editable-hide');
+
+      // onshow
+      return self.onshow();
+    };
+
+    //hide
+    self.hide = function() {
+      
+      self.editorEl.remove();
+      $element.removeClass('editable-hide');
+
+      // onhide
+      return self.onhide();
+    };
+
+    // cancel
+    self.cancel = function() {
+      // oncancel
+      self.oncancel();
+      // don't call hide() here as it called in form's code
+    };
+
+    /*
+    Called after show to attach listeners
+    */
+    self.addListeners = function() {
+      // bind keyup for `escape`
+      self.inputEl.bind('keyup', function(e) {
+          if(!self.single) {
+            return;
+          }
+
+          // todo: move this to editable-form!
+          switch(e.keyCode) {
+            // hide on `escape` press
+            case 27:
+              self.scope.$apply(function() {
+                self.scope.$form.$cancel();
+              });
+            break;
+          }
+      });
+
+      // autosubmit when `no buttons`
+      if (self.single && self.buttons === 'no') {
+        self.autosubmit();
+      }
+
+      // click - mark element as clicked to exclude in document click handler
+      self.editorEl.bind('click', function(e) {
+        // ignore right/middle button click
+        if (e.which && e.which !== 1) {
+          return;
+        }
+
+        if (self.scope.$form.$visible) {
+          self.scope.$form._clicked = true;
+        }
+      });
+    };
+
+    // setWaiting
+    self.setWaiting = function(value) {
+      if (value) {
+        // participate in waiting only if not disabled
+        inWaiting = !self.inputEl.attr('disabled') &&
+                    !self.inputEl.attr('ng-disabled') &&
+                    !self.inputEl.attr('ng-enabled');
+        if (inWaiting) {
+          self.inputEl.attr('disabled', 'disabled');
+          if(self.buttonsEl) {
+            self.buttonsEl.find('button').attr('disabled', 'disabled');
+          }
+        }
+      } else {
+        if (inWaiting) {
+          self.inputEl.removeAttr('disabled');
+          if (self.buttonsEl) {
+            self.buttonsEl.find('button').removeAttr('disabled');
+          }
+        }
+      }
+    };
+
+    self.activate = function(start, end) {
+      setTimeout(function() {
+        var el = self.inputEl[0];
+        if (editableOptions.activate === 'focus' && el.focus) {
+          if(start){
+            end = end || start;
+            el.onfocus = function(){
+              var that = this;
+              setTimeout(function(){
+                that.setSelectionRange(start,end);
+              });
+            };
+          }
+          el.focus();
+        }
+        if (editableOptions.activate === 'select' && el.select) {
+          el.select();
+        }
+      }, 0);
+    };
+
+    self.setError = function(msg) {
+      if(!angular.isObject(msg)) {
+        $scope.$error = msg;
+        self.error = msg;
+      }
+    };
+
+    /*
+    Checks that result is string or promise returned string and shows it as error message
+    Applied to onshow, onbeforesave, onaftersave
+    */
+    self.catchError = function(result, noPromise) {
+      if (angular.isObject(result) && noPromise !== true) {
+        $q.when(result).then(
+          //success and fail handlers are equal
+          angular.bind(this, function(r) {
+            this.catchError(r, true);
+          }),
+          angular.bind(this, function(r) {
+            this.catchError(r, true);
+          })
+        );
+      //check $http error
+      } else if (noPromise && angular.isObject(result) && result.status &&
+        (result.status !== 200) && result.data && angular.isString(result.data)) {
+        this.setError(result.data);
+        //set result to string: to let form know that there was error
+        result = result.data;
+      } else if (angular.isString(result)) {
+        this.setError(result);
+      }
+      return result;
+    };
+
+    self.save = function() {
+      valueGetter.assign($scope.$parent,
+          self.useCopy ? angular.copy(self.scope.$data) : self.scope.$data);
+
+      // no need to call handleEmpty here as we are watching change of model value
+      // self.handleEmpty();
+    };
+
+    /*
+    attach/detach `editable-empty` class to element
+    */
+    self.handleEmpty = function() {
+      var val = valueGetter($scope.$parent);
+      var isEmpty = val === null || val === undefined || val === "" || (angular.isArray(val) && val.length === 0); 
+      $element.toggleClass('editable-empty', isEmpty);
+    };
+
+    /*
+    Called when `buttons = "no"` to submit automatically
+    */
+    self.autosubmit = angular.noop;
+
+    self.onshow = angular.noop;
+    self.onhide = angular.noop;
+    self.oncancel = angular.noop;
+    self.onbeforesave = angular.noop;
+    self.onaftersave = angular.noop;
+  }
+
+  return EditableController;
+}]);
+
+/*
+editableFactory is used to generate editable directives (see `/directives` folder)
+Inside it does several things:
+- detect form for editable element. Form may be one of three types:
+  1. autogenerated form (for single editable elements)
+  2. wrapper form (element wrapped by <form> tag)
+  3. linked form (element has `e-form` attribute pointing to existing form)
+
+- attach editableController to element
+
+Depends on: editableController, editableFormFactory
+*/
+angular.module('xeditable').factory('editableDirectiveFactory',
+['$parse', '$compile', 'editableThemes', '$rootScope', '$document', 'editableController', 'editableFormController', 'editableOptions',
+function($parse, $compile, editableThemes, $rootScope, $document, editableController, editableFormController, editableOptions) {
+
+  //directive object
+  return function(overwrites) {
+    return {
+      restrict: 'A',
+      scope: true,
+      require: [overwrites.directiveName, '?^form'],
+      controller: editableController,
+      link: function(scope, elem, attrs, ctrl) {
+        // editable controller
+        var eCtrl = ctrl[0];
+
+        // form controller
+        var eFormCtrl;
+
+        // this variable indicates is element is bound to some existing form, 
+        // or it's single element who's form will be generated automatically
+        // By default consider single element without any linked form.ß
+        var hasForm = false;
+     
+        // element wrapped by form
+        if(ctrl[1]) {
+          eFormCtrl = ctrl[1];
+          hasForm = true;
+        } else if(attrs.eForm) { // element not wrapped by <form>, but we hane `e-form` attr
+          var getter = $parse(attrs.eForm)(scope);
+          if(getter) { // form exists in scope (above), e.g. editable column
+            eFormCtrl = getter;
+            hasForm = true;
+          } else { // form exists below or not exist at all: check document.forms
+            for(var i=0; i<$document[0].forms.length;i++){
+              if($document[0].forms[i].name === attrs.eForm) {
+                // form is below and not processed yet
+                eFormCtrl = null;
+                hasForm = true;
+                break;
+              }
+            }
+          }
+        }
+
+        /*
+        if(hasForm && !attrs.eName) {
+          throw 'You should provide `e-name` for editable element inside form!';
+        }
+        */
+
+        //check for `editable-form` attr in form
+        /*
+        if(eFormCtrl && ) {
+          throw 'You should provide `e-name` for editable element inside form!';
+        }
+        */
+
+        // store original props to `parent` before merge
+        angular.forEach(overwrites, function(v, k) {
+          if(eCtrl[k] !== undefined) {
+            eCtrl.parent[k] = eCtrl[k];
+          }
+        });
+
+        // merge overwrites to base editable controller
+        angular.extend(eCtrl, overwrites);
+
+        // x-editable can be disabled using editableOption or edit-disabled attribute
+        var disabled = angular.isDefined(attrs.editDisabled) ?
+          scope.$eval(attrs.editDisabled) :
+          editableOptions.isDisabled;
+
+        if (disabled) {
+          return;
+        }
+        
+        // init editable ctrl
+        eCtrl.init(!hasForm);
+
+        // publich editable controller as `$editable` to be referenced in html
+        scope.$editable = eCtrl;
+
+        // add `editable` class to element
+        elem.addClass('editable');
+
+        // hasForm
+        if(hasForm) {
+          if(eFormCtrl) {
+            scope.$form = eFormCtrl;
+            if(!scope.$form.$addEditable) {
+              throw 'Form with editable elements should have `editable-form` attribute.';
+            }
+            scope.$form.$addEditable(eCtrl);
+          } else {
+            // future form (below): add editable controller to buffer and add to form later
+            $rootScope.$$editableBuffer = $rootScope.$$editableBuffer || {};
+            $rootScope.$$editableBuffer[attrs.eForm] = $rootScope.$$editableBuffer[attrs.eForm] || [];
+            $rootScope.$$editableBuffer[attrs.eForm].push(eCtrl);
+            scope.$form = null; //will be re-assigned later
+          }
+        // !hasForm
+        } else {
+          // create editableform controller
+          scope.$form = editableFormController();
+          // add self to editable controller
+          scope.$form.$addEditable(eCtrl);
+
+          // if `e-form` provided, publish local $form in scope
+          if(attrs.eForm) {
+            scope.$parent[attrs.eForm] = scope.$form;
+          }
+
+          // bind click - if no external form defined
+          if(!attrs.eForm || attrs.eClickable) {
+            elem.addClass('editable-click');
+            elem.bind(editableOptions.activationEvent, function(e) {
+              e.preventDefault();
+              e.editable = eCtrl;
+              scope.$apply(function(){
+                scope.$form.$show();
+              });
+            });
+          }
+        }
+
+      }
+    };
+  };
+}]);
+
+/*
+Returns editableForm controller
+*/
+angular.module('xeditable').factory('editableFormController', 
+  ['$parse', '$document', '$rootScope', 'editablePromiseCollection', 'editableUtils',
+  function($parse, $document, $rootScope, editablePromiseCollection, editableUtils) {
+
+  // array of opened editable forms
+  var shown = [];
+
+  //Check if the child element correspond or is a descendant of the parent element
+  var isSelfOrDescendant = function (parent, child) {
+    if (child == parent) {
+      return true;
+    }
+
+    var node = child.parentNode;
+    while (node !== null) {
+      if (node == parent) {
+        return true;
+      }
+      node = node.parentNode;
+    }
+    return false;
+  };
+  
+  //Check if it is a real blur : if the click event appear on a shown editable elem, this is not a blur.
+  var isBlur = function(shown, event) {
+    var isBlur = true;
+
+    var editables = shown.$editables;
+    angular.forEach(editables, function(v){
+      var element = v.editorEl[0];
+      if (isSelfOrDescendant(element, event.target))
+        isBlur = false;
+      
+    });
+    return isBlur;
+  };
+  
+  // bind click to body: cancel|submit|ignore forms
+  $document.bind('click', function(e) {
+    // ignore right/middle button click
+    if ((e.which && e.which !== 1) || e.isDefaultPrevented()) {
+      return;
+    }
+
+    var toCancel = [];
+    var toSubmit = [];
+    for (var i=0; i<shown.length; i++) {
+
+      // exclude clicked
+      if (shown[i]._clicked) {
+        shown[i]._clicked = false;
+        continue;
+      }
+
+      // exclude waiting
+      if (shown[i].$waiting) {
+        continue;
+      }
+
+      if (shown[i]._blur === 'cancel' && isBlur(shown[i], e)) {
+        toCancel.push(shown[i]);
+      }
+
+      if (shown[i]._blur === 'submit' && isBlur(shown[i], e)) {
+        toSubmit.push(shown[i]);
+      }
+    }
+
+    if (toCancel.length || toSubmit.length) {
+      $rootScope.$apply(function() {
+        angular.forEach(toCancel, function(v){ v.$cancel(); });
+        angular.forEach(toSubmit, function(v){ v.$submit(); });
+      });
+    }
+  });
+ 
+
+  var base = {
+    $addEditable: function(editable) {
+      //console.log('add editable', editable.elem, editable.elem.bind);
+      this.$editables.push(editable);
+
+      //'on' is not supported in angular 1.0.8
+      editable.elem.bind('$destroy', angular.bind(this, this.$removeEditable, editable));
+
+      //bind editable's local $form to self (if not bound yet, below form) 
+      if (!editable.scope.$form) {
+        editable.scope.$form = this;
+      }
+
+      //if form already shown - call show() of new editable
+      if (this.$visible) {
+        editable.catchError(editable.show());
+      }
+    },
+
+    $removeEditable: function(editable) {
+      //arrayRemove
+      for(var i=0; i < this.$editables.length; i++) {
+        if(this.$editables[i] === editable) {
+          this.$editables.splice(i, 1);
+          return;
+        }
+      }
+    },
+
+    /**
+     * Shows form with editable controls.
+     * 
+     * @method $show()
+     * @memberOf editable-form
+     */
+    $show: function() {
+      if (this.$visible) {
+        return;
+      }
+
+      this.$visible = true;
+
+      var pc = editablePromiseCollection();
+
+      //own show
+      pc.when(this.$onshow());
+
+      //clear errors
+      this.$setError(null, '');
+
+      //children show
+      angular.forEach(this.$editables, function(editable) {
+        pc.when(editable.show());
+      });
+
+      //wait promises and activate
+      pc.then({
+        onWait: angular.bind(this, this.$setWaiting), 
+        onTrue: angular.bind(this, this.$activate), 
+        onFalse: angular.bind(this, this.$activate), 
+        onString: angular.bind(this, this.$activate)
+      });
+
+      // add to internal list of shown forms
+      // setTimeout needed to prevent closing right after opening (e.g. when trigger by button)
+      setTimeout(angular.bind(this, function() {
+        // clear `clicked` to get ready for clicks on visible form
+        this._clicked = false;
+        if(editableUtils.indexOf(shown, this) === -1) {
+          shown.push(this);
+        }
+      }), 0);      
+    },
+
+    /**
+     * Sets focus on form field specified by `name`.
+     * 
+     * @method $activate(name)
+     * @param {string} name name of field
+     * @memberOf editable-form
+     */
+    $activate: function(name) {
+      var i;
+      if (this.$editables.length) {
+        //activate by name
+        if (angular.isString(name)) {
+          for(i=0; i<this.$editables.length; i++) {
+            if (this.$editables[i].name === name) {
+              this.$editables[i].activate();
+              return;
+            }
+          }
+        }
+
+        //try activate error field
+        for(i=0; i<this.$editables.length; i++) {
+          if (this.$editables[i].error) {
+            this.$editables[i].activate();
+            return;
+          }
+        }
+
+        //by default activate first field
+        this.$editables[0].activate(this.$editables[0].elem[0].selectionStart, this.$editables[0].elem[0].selectionEnd);
+      }
+    },
+
+    /**
+     * Hides form with editable controls without saving.
+     * 
+     * @method $hide()
+     * @memberOf editable-form
+     */
+    $hide: function() {
+      if (!this.$visible) {
+        return;
+      }      
+      this.$visible = false;
+      // self hide
+      this.$onhide();
+      // children's hide
+      angular.forEach(this.$editables, function(editable) {
+        editable.hide();
+      });
+
+      // remove from internal list of shown forms
+      editableUtils.arrayRemove(shown, this);
+    },
+
+    /**
+     * Triggers `oncancel` event and calls `$hide()`.
+     * 
+     * @method $cancel()
+     * @memberOf editable-form
+     */
+    $cancel: function() {
+      if (!this.$visible) {
+        return;
+      }      
+      // self cancel
+      this.$oncancel();
+      // children's cancel      
+      angular.forEach(this.$editables, function(editable) {
+        editable.cancel();
+      });
+      // self hide
+      this.$hide();
+    },    
+
+    $setWaiting: function(value) {
+      this.$waiting = !!value;
+      // we can't just set $waiting variable and use it via ng-disabled in children
+      // because in editable-row form is not accessible
+      angular.forEach(this.$editables, function(editable) {
+        editable.setWaiting(!!value);
+      });
+    },
+
+    /**
+     * Shows error message for particular field.
+     * 
+     * @method $setError(name, msg)
+     * @param {string} name name of field
+     * @param {string} msg error message
+     * @memberOf editable-form
+     */
+    $setError: function(name, msg) {
+      angular.forEach(this.$editables, function(editable) {
+        if(!name || editable.name === name) {
+          editable.setError(msg);
+        }
+      });
+    },
+
+    $submit: function() {
+      if (this.$waiting) {
+        return;
+      } 
+
+      //clear errors
+      this.$setError(null, '');
+
+      //children onbeforesave
+      var pc = editablePromiseCollection();
+      angular.forEach(this.$editables, function(editable) {
+        pc.when(editable.onbeforesave());
+      });
+
+      /*
+      onbeforesave result:
+      - true/undefined: save data and close form
+      - false: close form without saving
+      - string: keep form open and show error
+      */
+      pc.then({
+        onWait: angular.bind(this, this.$setWaiting), 
+        onTrue: angular.bind(this, checkSelf, true), 
+        onFalse: angular.bind(this, checkSelf, false), 
+        onString: angular.bind(this, this.$activate)
+      });
+
+      //save
+      function checkSelf(childrenTrue){
+        var pc = editablePromiseCollection();
+        pc.when(this.$onbeforesave());
+        pc.then({
+          onWait: angular.bind(this, this.$setWaiting), 
+          onTrue: childrenTrue ? angular.bind(this, this.$save) : angular.bind(this, this.$hide), 
+          onFalse: angular.bind(this, this.$hide), 
+          onString: angular.bind(this, this.$activate)
+        });
+      }
+    },
+
+    $save: function() {
+      // write model for each editable
+      angular.forEach(this.$editables, function(editable) {
+        editable.save();
+      });
+
+      //call onaftersave of self and children
+      var pc = editablePromiseCollection();
+      pc.when(this.$onaftersave());
+      angular.forEach(this.$editables, function(editable) {
+        pc.when(editable.onaftersave());
+      });
+
+      /*
+      onaftersave result:
+      - true/undefined/false: just close form
+      - string: keep form open and show error
+      */
+      pc.then({
+        onWait: angular.bind(this, this.$setWaiting), 
+        onTrue: angular.bind(this, this.$hide), 
+        onFalse: angular.bind(this, this.$hide), 
+        onString: angular.bind(this, this.$activate)
+      });
+    },
+
+    $onshow: angular.noop,
+    $oncancel: angular.noop,
+    $onhide: angular.noop,
+    $onbeforesave: angular.noop,
+    $onaftersave: angular.noop
+  };
+
+  return function() {
+    return angular.extend({
+      $editables: [],
+      /**
+       * Form visibility flag.
+       * 
+       * @var {bool} $visible
+       * @memberOf editable-form
+       */
+      $visible: false,
+      /**
+       * Form waiting flag. It becomes `true` when form is loading or saving data.
+       * 
+       * @var {bool} $waiting
+       * @memberOf editable-form
+       */
+      $waiting: false,
+      $data: {},
+      _clicked: false,
+      _blur: null
+    }, base);
+  };
+}]);
+
+/**
+ * EditableForm directive. Should be defined in <form> containing editable controls.  
+ * It add some usefull methods to form variable exposed to scope by `name="myform"` attribute.
+ *
+ * @namespace editable-form
+ */
+angular.module('xeditable').directive('editableForm',
+  ['$rootScope', '$parse', 'editableFormController', 'editableOptions',
+  function($rootScope, $parse, editableFormController, editableOptions) {
+    return {
+      restrict: 'A',
+      require: ['form'],
+      //require: ['form', 'editableForm'],
+      //controller: EditableFormController,
+      compile: function() {
+        return {
+          pre: function(scope, elem, attrs, ctrl) {
+            var form = ctrl[0];
+            var eForm;
+
+            //if `editableForm` has value - publish smartly under this value
+            //this is required only for single editor form that is created and removed
+            if(attrs.editableForm) {
+              if(scope[attrs.editableForm] && scope[attrs.editableForm].$show) {
+                eForm = scope[attrs.editableForm];
+                angular.extend(form, eForm);
+              } else {
+                eForm = editableFormController();
+                scope[attrs.editableForm] = eForm;
+                angular.extend(eForm, form);
+              }
+            } else { //just merge to form and publish if form has name
+              eForm = editableFormController();
+              angular.extend(form, eForm);
+            }
+
+            //read editables from buffer (that appeared before FORM tag)
+            var buf = $rootScope.$$editableBuffer;
+            var name = form.$name;
+            if(name && buf && buf[name]) {
+              angular.forEach(buf[name], function(editable) {
+                eForm.$addEditable(editable);
+              });
+              delete buf[name];
+            }
+          },
+          post: function(scope, elem, attrs, ctrl) {
+            var eForm;
+
+            if(attrs.editableForm && scope[attrs.editableForm] && scope[attrs.editableForm].$show) {
+              eForm = scope[attrs.editableForm];
+            } else {
+              eForm = ctrl[0];
+            }
+
+            /**
+             * Called when form is shown.
+             * 
+             * @var {method|attribute} onshow 
+             * @memberOf editable-form
+             */
+            if(attrs.onshow) {
+              eForm.$onshow = angular.bind(eForm, $parse(attrs.onshow), scope);
+            }
+
+            /**
+             * Called when form hides after both save or cancel.
+             * 
+             * @var {method|attribute} onhide 
+             * @memberOf editable-form
+             */
+            if(attrs.onhide) {
+              eForm.$onhide = angular.bind(eForm, $parse(attrs.onhide), scope);
+            }
+
+            /**
+             * Called when form is cancelled.
+             * 
+             * @var {method|attribute} oncancel
+             * @memberOf editable-form
+             */
+            if(attrs.oncancel) {
+              eForm.$oncancel = angular.bind(eForm, $parse(attrs.oncancel), scope);
+            }
+
+            /**
+             * Whether form initially rendered in shown state.
+             *
+             * @var {bool|attribute} shown
+             * @memberOf editable-form
+             */
+            if(attrs.shown && $parse(attrs.shown)(scope)) {
+              eForm.$show();
+            }
+
+            /**
+             * Action when form losses focus. Values: `cancel|submit|ignore`.
+             * Default is `ignore`.
+             * 
+             * @var {string|attribute} blur
+             * @memberOf editable-form
+             */
+            eForm._blur = attrs.blur || editableOptions.blurForm;
+
+            // onbeforesave, onaftersave
+            if(!attrs.ngSubmit && !attrs.submit) {
+              /**
+               * Called after all children `onbeforesave` callbacks but before saving form values
+               * to model.  
+               * If at least one children callback returns `non-string` - it will not not be called.  
+               * See [editable-form demo](#editable-form) for details.
+               * 
+               * @var {method|attribute} onbeforesave
+               * @memberOf editable-form
+               * 
+               */
+              if(attrs.onbeforesave) {
+                eForm.$onbeforesave = function() {
+                  return $parse(attrs.onbeforesave)(scope, {$data: eForm.$data});
+                };
+              }
+
+              /**
+               * Called when form values are saved to model.  
+               * See [editable-form demo](#editable-form) for details.
+               * 
+               * @var {method|attribute} onaftersave 
+               * @memberOf editable-form
+               * 
+               */
+              if(attrs.onaftersave) {
+                eForm.$onaftersave = function() {
+                  return $parse(attrs.onaftersave)(scope, {$data: eForm.$data});
+                };
+              }
+
+              elem.bind('submit', function(event) {
+                event.preventDefault();
+                scope.$apply(function() {
+                  eForm.$submit();
+                });
+              });
+            }
+
+
+            // click - mark form as clicked to exclude in document click handler
+            elem.bind('click', function(e) {
+              // ignore right/middle button click
+              if (e.which && e.which !== 1) {
+                return;
+              }
+
+              if (eForm.$visible) {
+                eForm._clicked = true;
+              }
+            });   
+
+          }
+        };
+      }
+    };
+}]);
+/**
+ * editablePromiseCollection
+ *  
+ * Collect results of function calls. Shows waiting if there are promises. 
+ * Finally, applies callbacks if:
+ * - onTrue(): all results are true and all promises resolved to true
+ * - onFalse(): at least one result is false or promise resolved to false
+ * - onString(): at least one result is string or promise rejected or promise resolved to string
+ */
+
+angular.module('xeditable').factory('editablePromiseCollection', ['$q', function($q) { 
+
+  function promiseCollection() {
+    return {
+      promises: [],
+      hasFalse: false,
+      hasString: false,
+      when: function(result, noPromise) {
+        if (result === false) {
+          this.hasFalse = true;
+        } else if (!noPromise && angular.isObject(result)) {
+          this.promises.push($q.when(result));
+        } else if (angular.isString(result)){
+          this.hasString = true;
+        } else { //result === true || result === undefined || result === null
+          return;
+        }
+      },
+      //callbacks: onTrue, onFalse, onString
+      then: function(callbacks) {
+        callbacks = callbacks || {};
+        var onTrue = callbacks.onTrue || angular.noop;
+        var onFalse = callbacks.onFalse || angular.noop;
+        var onString = callbacks.onString || angular.noop;
+        var onWait = callbacks.onWait || angular.noop;
+
+        var self = this;
+
+        if (this.promises.length) {
+          onWait(true);
+          $q.all(this.promises).then(
+            //all resolved       
+            function(results) {
+              onWait(false);
+              //check all results via same `when` method (without checking promises)
+              angular.forEach(results, function(result) {
+                self.when(result, true);  
+              });
+              applyCallback();
+            },
+            //some rejected
+            function(error) { 
+              onWait(false);
+              onString();
+            }
+            );
+        } else {
+          applyCallback();
+        }
+
+        function applyCallback() {
+          if (!self.hasString && !self.hasFalse) {
+            onTrue();
+          } else if (!self.hasString && self.hasFalse) {
+            onFalse();
+          } else {
+            onString();
+          }
+        }
+
+      }
+    };
+  }
+
+  return promiseCollection;
+
+}]);
+
+/**
+ * editableUtils
+ */
+ angular.module('xeditable').factory('editableUtils', [function() {
+  return {
+    indexOf: function (array, obj) {
+      if (array.indexOf) return array.indexOf(obj);
+
+      for ( var i = 0; i < array.length; i++) {
+        if (obj === array[i]) return i;
+      }
+      return -1;
+    },
+
+    arrayRemove: function (array, value) {
+      var index = this.indexOf(array, value);
+      if (index >= 0) {
+        array.splice(index, 1);
+      }
+      return value;
+    },
+
+    // copy from https://github.com/angular/angular.js/blob/master/src/Angular.js
+    camelToDash: function(str) {
+      var SNAKE_CASE_REGEXP = /[A-Z]/g;
+      return str.replace(SNAKE_CASE_REGEXP, function(letter, pos) {
+        return (pos ? '-' : '') + letter.toLowerCase();
+      });
+    },
+
+    dashToCamel: function(str) {
+      var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
+      var MOZ_HACK_REGEXP = /^moz([A-Z])/;
+      return str.
+      replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
+        return offset ? letter.toUpperCase() : letter;
+      }).
+      replace(MOZ_HACK_REGEXP, 'Moz$1');
+    }
+  };
+}]);
+
+/**
+ * editableNgOptionsParser
+ *
+ * see: https://github.com/angular/angular.js/blob/master/src/ng/directive/select.js#L131
+ */
+ angular.module('xeditable').factory('editableNgOptionsParser', [function() {
+  //0000111110000000000022220000000000000000000000333300000000000000444444444444444000000000555555555555555000000066666666666666600000000000000007777000000000000000000088888
+  var NG_OPTIONS_REGEXP = /^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/;
+
+  function parser(optionsExp) {
+    var match;
+
+    if (! (match = optionsExp.match(NG_OPTIONS_REGEXP))) {
+      throw 'ng-options parse error';
+    }
+
+    var 
+    displayFn = match[2] || match[1],
+    valueName = match[4] || match[6],
+    keyName = match[5],
+    groupByFn = match[3] || '',
+    valueFn = match[2] ? match[1] : valueName,
+    valuesFn = match[7],
+    track = match[8],
+    trackFn = track ? match[8] : null;
+
+    var ngRepeat;
+    if (keyName === undefined) { // array
+      ngRepeat = valueName + ' in ' + valuesFn;
+      if (track !== undefined) {
+        ngRepeat += ' track by '+trackFn;
+      }
+    } else { // object
+      ngRepeat = '('+keyName+', '+valueName+') in '+valuesFn;
+    }
+    
+    // group not supported yet
+    return {
+      ngRepeat: ngRepeat,
+      locals: {
+        valueName: valueName,
+        keyName: keyName,
+        valueFn: valueFn,
+        displayFn: displayFn
+      }
+    };
+  }
+
+  return parser;
+}]);
+
+/**
+ * editableCombodate
+ *
+ * angular version of https://github.com/vitalets/combodate
+ */
+angular.module('xeditable').factory('editableCombodate', [function() {
+  function Combodate(element, options) {
+    this.$element = angular.element(element);
+
+    if(this.$element[0].nodeName != 'INPUT') {
+      throw 'Combodate should be applied to INPUT element';
+    }
+
+    this.defaults = {
+      //in this format value stored in original input
+      format: 'YYYY-MM-DD HH:mm',
+      //in this format items in dropdowns are displayed
+      template: 'D / MMM / YYYY   H : mm',
+      //initial value, can be `new Date()`
+      value: null,
+      minYear: 1970,
+      maxYear: 2015,
+      yearDescending: true,
+      minuteStep: 5,
+      secondStep: 1,
+      firstItem: 'empty', //'name', 'empty', 'none'
+      errorClass: null,
+      customClass: '',
+      roundTime: true, // whether to round minutes and seconds if step > 1
+      smartDays: true // whether days in combo depend on selected month: 31, 30, 28
+    };
+
+    this.options = angular.extend({}, this.defaults, options);
+    this.init();
+  }
+
+  Combodate.prototype = {
+    constructor: Combodate,
+    init: function () {
+      this.map = {
+        //key   regexp    moment.method
+        day:    ['D',    'date'], 
+        month:  ['M',    'month'], 
+        year:   ['Y',    'year'], 
+        hour:   ['[Hh]', 'hours'],
+        minute: ['m',    'minutes'], 
+        second: ['s',    'seconds'],
+        ampm:   ['[Aa]', ''] 
+      };
+      
+      this.$widget = angular.element('<span class="combodate"></span>').html(this.getTemplate());
+      
+      this.initCombos();
+      
+      if (this.options.smartDays) {
+        var combo = this;
+        this.$widget.find('select').bind('change', function(e) {
+          // update days count if month or year changes
+          if (angular.element(e.target).hasClass('month') || angular.element(e.target).hasClass('year')) {
+            combo.fillCombo('day');
+          }
+        });        
+      }
+
+      this.$widget.find('select').css('width', 'auto');
+
+      // hide original input and insert widget                                       
+      this.$element.css('display', 'none').after(this.$widget);
+      
+      // set initial value
+      this.setValue(this.$element.val() || this.options.value);
+    },
+    
+    /*
+     Replace tokens in template with <select> elements 
+     */         
+     getTemplate: function() {
+      var tpl = this.options.template;
+      var customClass = this.options.customClass;
+
+      //first pass
+      angular.forEach(this.map, function(v, k) {
+        v = v[0]; 
+        var r = new RegExp(v+'+');
+        var token = v.length > 1 ? v.substring(1, 2) : v;
+        
+        tpl = tpl.replace(r, '{'+token+'}');
+      });
+
+      //replace spaces with &nbsp;
+      tpl = tpl.replace(/ /g, '&nbsp;');
+
+      //second pass
+      angular.forEach(this.map, function(v, k) {
+        v = v[0];
+        var token = v.length > 1 ? v.substring(1, 2) : v;
+
+        tpl = tpl.replace('{'+token+'}', '<select class="'+k+' '+customClass+'"></select>');
+      });   
+
+      return tpl;
+    },
+    
+    /*
+     Initialize combos that presents in template 
+     */        
+     initCombos: function() {
+      for (var k in this.map) {
+        var c = this.$widget[0].querySelectorAll('.'+k);
+        // set properties like this.$day, this.$month etc.
+        this['$'+k] = c.length ? angular.element(c) : null;
+        // fill with items
+        this.fillCombo(k);
+      }
+    },
+
+    /*
+     Fill combo with items 
+     */        
+     fillCombo: function(k) {
+      var $combo = this['$'+k];
+      if (!$combo) {
+        return;
+      }
+
+      // define method name to fill items, e.g `fillDays`
+      var f = 'fill' + k.charAt(0).toUpperCase() + k.slice(1); 
+      var items = this[f]();
+      var value = $combo.val();
+
+      $combo.html('');
+      for(var i=0; i<items.length; i++) {
+        $combo.append('<option value="'+items[i][0]+'">'+items[i][1]+'</option>');
+      }
+
+      $combo.val(value);
+    },
+
+    /*
+     Initialize items of combos. Handles `firstItem` option 
+     */
+     fillCommon: function(key) {
+      var values = [], relTime;
+
+      if(this.options.firstItem === 'name') {
+        //need both to support moment ver < 2 and  >= 2
+        relTime = moment.relativeTime || moment.langData()._relativeTime; 
+        var header = typeof relTime[key] === 'function' ? relTime[key](1, true, key, false) : relTime[key];
+        //take last entry (see momentjs lang files structure) 
+        header = header.split(' ').reverse()[0];                
+        values.push(['', header]);
+      } else if(this.options.firstItem === 'empty') {
+        values.push(['', '']);
+      }
+      return values;
+    },  
+
+
+    /*
+    fill day
+    */
+    fillDay: function() {
+      var items = this.fillCommon('d'), name, i,
+      twoDigit = this.options.template.indexOf('DD') !== -1,
+      daysCount = 31;
+
+      // detect days count (depends on month and year)
+      // originally https://github.com/vitalets/combodate/pull/7
+      if (this.options.smartDays && this.$month && this.$year) {
+        var month = parseInt(this.$month.val(), 10);
+        var year = parseInt(this.$year.val(), 10);
+
+        if (!isNaN(month) && !isNaN(year)) {
+          daysCount = moment([year, month]).daysInMonth();
+        }
+      }
+
+      for (i = 1; i <= daysCount; i++) {
+        name = twoDigit ? this.leadZero(i) : i;
+        items.push([i, name]);
+      }
+      return items;
+    },
+    
+    /*
+    fill month
+    */
+    fillMonth: function() {
+      var items = this.fillCommon('M'), name, i, 
+      longNames = this.options.template.indexOf('MMMM') !== -1,
+      shortNames = this.options.template.indexOf('MMM') !== -1,
+      twoDigit = this.options.template.indexOf('MM') !== -1;
+
+      for(i=0; i<=11; i++) {
+        if(longNames) {
+          //see https://github.com/timrwood/momentjs.com/pull/36
+          name = moment().date(1).month(i).format('MMMM');
+        } else if(shortNames) {
+          name = moment().date(1).month(i).format('MMM');
+        } else if(twoDigit) {
+          name = this.leadZero(i+1);
+        } else {
+          name = i+1;
+        }
+        items.push([i, name]);
+      } 
+      return items;
+    },
+    
+    /*
+    fill year
+    */
+    fillYear: function() {
+      var items = [], name, i, 
+      longNames = this.options.template.indexOf('YYYY') !== -1;
+
+      for(i=this.options.maxYear; i>=this.options.minYear; i--) {
+        name = longNames ? i : (i+'').substring(2);
+        items[this.options.yearDescending ? 'push' : 'unshift']([i, name]);
+      }
+      
+      items = this.fillCommon('y').concat(items);
+      
+      return items;
+    },
+    
+    /*
+    fill hour
+    */
+    fillHour: function() {
+      var items = this.fillCommon('h'), name, i,
+      h12 = this.options.template.indexOf('h') !== -1,
+      h24 = this.options.template.indexOf('H') !== -1,
+      twoDigit = this.options.template.toLowerCase().indexOf('hh') !== -1,
+      min = h12 ? 1 : 0, 
+      max = h12 ? 12 : 23;
+
+      for(i=min; i<=max; i++) {
+        name = twoDigit ? this.leadZero(i) : i;
+        items.push([i, name]);
+      } 
+      return items;
+    },
+
+    /*
+    fill minute
+    */
+    fillMinute: function() {
+      var items = this.fillCommon('m'), name, i,
+      twoDigit = this.options.template.indexOf('mm') !== -1;
+
+      for(i=0; i<=59; i+= this.options.minuteStep) {
+        name = twoDigit ? this.leadZero(i) : i;
+        items.push([i, name]);
+      }
+      return items;
+    },
+    
+    /*
+    fill second
+    */
+    fillSecond: function() {
+      var items = this.fillCommon('s'), name, i,
+      twoDigit = this.options.template.indexOf('ss') !== -1;
+
+      for(i=0; i<=59; i+= this.options.secondStep) {
+        name = twoDigit ? this.leadZero(i) : i;
+        items.push([i, name]);
+      }    
+      return items;
+    },
+    
+    /*
+    fill ampm
+    */
+    fillAmpm: function() {
+      var ampmL = this.options.template.indexOf('a') !== -1,
+      ampmU = this.options.template.indexOf('A') !== -1,            
+      items = [
+      ['am', ampmL ? 'am' : 'AM'],
+      ['pm', ampmL ? 'pm' : 'PM']
+      ];
+      return items;
+    },
+
+    /*
+     Returns current date value from combos. 
+     If format not specified - `options.format` used.
+     If format = `null` - Moment object returned.
+     */
+     getValue: function(format) {
+      var dt, values = {}, 
+      that = this,
+      notSelected = false;
+
+      //getting selected values    
+      angular.forEach(this.map, function(v, k) {
+        if(k === 'ampm') {
+          return;
+        }
+        var def = k === 'day' ? 1 : 0;
+
+        values[k] = that['$'+k] ? parseInt(that['$'+k].val(), 10) : def; 
+        
+        if(isNaN(values[k])) {
+         notSelected = true;
+         return false; 
+       }
+     });
+      
+      //if at least one visible combo not selected - return empty string
+      if(notSelected) {
+       return '';
+     }
+
+      //convert hours 12h --> 24h 
+      if(this.$ampm) {
+        //12:00 pm --> 12:00 (24-h format, midday), 12:00 am --> 00:00 (24-h format, midnight, start of day)
+        if(values.hour === 12) {
+          values.hour = this.$ampm.val() === 'am' ? 0 : 12;                    
+        } else {
+          values.hour = this.$ampm.val() === 'am' ? values.hour : values.hour+12;
+        }
+      }
+      
+      dt = moment([values.year, values.month, values.day, values.hour, values.minute, values.second]);
+      
+      //highlight invalid date
+      this.highlight(dt);
+
+      format = format === undefined ? this.options.format : format;
+      if(format === null) {
+       return dt.isValid() ? dt : null; 
+     } else {
+       return dt.isValid() ? dt.format(format) : ''; 
+     }
+   },
+
+   setValue: function(value) {
+    if(!value) {
+      return;
+    }
+
+      // parse in strict mode (third param `true`)
+      var dt = typeof value === 'string' ? moment(value, this.options.format, true) : moment(value),
+      that = this,
+      values = {};
+      
+      //function to find nearest value in select options
+      function getNearest($select, value) {
+        var delta = {};
+        angular.forEach($select.children('option'), function(opt, i){
+          var optValue = angular.element(opt).attr('value');
+
+          if(optValue === '') return;
+          var distance = Math.abs(optValue - value); 
+          if(typeof delta.distance === 'undefined' || distance < delta.distance) {
+            delta = {value: optValue, distance: distance};
+          } 
+        }); 
+        return delta.value;
+      }
+      
+      if(dt.isValid()) {
+        //read values from date object
+        angular.forEach(this.map, function(v, k) {
+          if(k === 'ampm') {
+            return; 
+          }
+          values[k] = dt[v[1]]();
+        });
+
+        if(this.$ampm) {
+          //12:00 pm --> 12:00 (24-h format, midday), 12:00 am --> 00:00 (24-h format, midnight, start of day)
+          if(values.hour >= 12) {
+            values.ampm = 'pm';
+            if(values.hour > 12) {
+              values.hour -= 12;
+            }
+          } else {
+            values.ampm = 'am';
+            if(values.hour === 0) {
+              values.hour = 12;
+            }
+          }
+        }
+
+        angular.forEach(values, function(v, k) {
+          //call val() for each existing combo, e.g. this.$hour.val()
+          if(that['$'+k]) {
+
+            if(k === 'minute' && that.options.minuteStep > 1 && that.options.roundTime) {
+             v = getNearest(that['$'+k], v);
+           }
+           
+           if(k === 'second' && that.options.secondStep > 1 && that.options.roundTime) {
+             v = getNearest(that['$'+k], v);
+           }                       
+           
+           that['$'+k].val(v);
+         }
+       });
+
+        // update days count
+        if (this.options.smartDays) {
+          this.fillCombo('day');
+        }
+
+        this.$element.val(dt.format(this.options.format)).triggerHandler('change');
+      }
+    },
+    
+    /*
+     highlight combos if date is invalid
+     */
+     highlight: function(dt) {
+      if(!dt.isValid()) {
+        if(this.options.errorClass) {
+          this.$widget.addClass(this.options.errorClass);
+        } else {
+          //store original border color
+          if(!this.borderColor) {
+            this.borderColor = this.$widget.find('select').css('border-color'); 
+          }
+          this.$widget.find('select').css('border-color', 'red');
+        }
+      } else {
+        if(this.options.errorClass) {
+          this.$widget.removeClass(this.options.errorClass);
+        } else {
+          this.$widget.find('select').css('border-color', this.borderColor);
+        }  
+      }
+    },
+    
+    leadZero: function(v) {
+      return v <= 9 ? '0' + v : v; 
+    },
+    
+    destroy: function() {
+      this.$widget.remove();
+      this.$element.removeData('combodate').show();
+    }
+
+  };
+
+  return {
+    getInstance: function(element, options) {
+      return new Combodate(element, options);
+    }
+  };
+}]);
+
+/*
+Editable icons:
+- default
+- font-awesome
+
+*/
+angular.module('xeditable').factory('editableIcons', function() {
+
+  var icons = {
+    //Icon-set to use, defaults to bootstrap icons
+    default: {
+      'bs2': {
+        ok: 'icon-ok icon-white',
+        cancel: 'icon-remove'
+      },
+      'bs3': {
+        ok: 'glyphicon glyphicon-ok',
+        cancel: 'glyphicon glyphicon-remove'
+      }
+    },
+    external: {
+      'font-awesome': {
+        ok: 'fa fa-check',
+        cancel: 'fa fa-times'
+      }
+    }
+  };
+
+  return icons;
+});
+
+/*
+Editable themes:
+- default
+- bootstrap 2
+- bootstrap 3
+
+Note: in postrender() `this` is instance of editableController
+*/
+angular.module('xeditable').factory('editableThemes', function() {
+  var themes = {
+    //default
+    'default': {
+      formTpl:      '<form class="editable-wrap"></form>',
+      noformTpl:    '<span class="editable-wrap"></span>',
+      controlsTpl:  '<span class="editable-controls"></span>',
+      inputTpl:     '',
+      errorTpl:     '<div class="editable-error" ng-show="$error" ng-bind="$error"></div>',
+      buttonsTpl:   '<span class="editable-buttons"></span>',
+      submitTpl:    '<button type="submit">save</button>',
+      cancelTpl:    '<button type="button" ng-click="$form.$cancel()">cancel</button>'
+    },
+
+    //bs2
+    'bs2': {
+      formTpl:     '<form class="form-inline editable-wrap" role="form"></form>',
+      noformTpl:   '<span class="editable-wrap"></span>',
+      controlsTpl: '<div class="editable-controls controls control-group" ng-class="{\'error\': $error}"></div>',
+      inputTpl:    '',
+      errorTpl:    '<div class="editable-error help-block" ng-show="$error" ng-bind="$error"></div>',
+      buttonsTpl:  '<span class="editable-buttons"></span>',
+      submitTpl:   '<button type="submit" class="btn btn-primary"><span></span></button>',
+      cancelTpl:   '<button type="button" class="btn" ng-click="$form.$cancel()">'+
+                      '<span></span>'+
+                   '</button>'
+
+    },
+
+    //bs3
+    'bs3': {
+      formTpl:     '<form class="form-inline editable-wrap" role="form"></form>',
+      noformTpl:   '<span class="editable-wrap"></span>',
+      controlsTpl: '<div class="editable-controls form-group" ng-class="{\'has-error\': $error}"></div>',
+      inputTpl:    '',
+      errorTpl:    '<div class="editable-error help-block" ng-show="$error" ng-bind="$error"></div>',
+      buttonsTpl:  '<span class="editable-buttons"></span>',
+      submitTpl:   '<button type="submit" class="btn btn-primary"><span></span></button>',
+      cancelTpl:   '<button type="button" class="btn btn-default" ng-click="$form.$cancel()">'+
+                     '<span></span>'+
+                   '</button>',
+
+      //bs3 specific prop to change buttons class: btn-sm, btn-lg
+      buttonsClass: '',
+      //bs3 specific prop to change standard inputs class: input-sm, input-lg
+      inputClass: '',
+      postrender: function() {
+        //apply `form-control` class to std inputs
+        switch(this.directiveName) {
+          case 'editableText':
+          case 'editableSelect':
+          case 'editableTextarea':
+          case 'editableEmail':
+          case 'editableTel':
+          case 'editableNumber':
+          case 'editableUrl':
+          case 'editableSearch':
+          case 'editableDate':
+          case 'editableDatetime':
+          case 'editableBsdate':
+          case 'editableTime':
+          case 'editableMonth':
+          case 'editableWeek':
+            this.inputEl.addClass('form-control');
+            if(this.theme.inputClass) {
+              // don`t apply `input-sm` and `input-lg` to select multiple
+              // should be fixed in bs itself!
+              if(this.inputEl.attr('multiple') &&
+                (this.theme.inputClass === 'input-sm' || this.theme.inputClass === 'input-lg')) {
+                  break;
+              }
+              this.inputEl.addClass(this.theme.inputClass);
+            }
+          break;
+          case 'editableCheckbox':
+              this.editorEl.addClass('checkbox');
+        }
+
+        //apply buttonsClass (bs3 specific!)
+        if(this.buttonsEl && this.theme.buttonsClass) {
+          this.buttonsEl.find('button').addClass(this.theme.buttonsClass);
+        }
+      }
+    }
+  };
+
+  return themes;
+});
diff --git a/public/bower_components/angular/angular.js b/public/bower_components/angular/angular.js
new file mode 100644
index 0000000..a3aee7d
--- /dev/null
+++ b/public/bower_components/angular/angular.js
@@ -0,0 +1,29018 @@
+/**
+ * @license AngularJS v1.4.8
+ * (c) 2010-2015 Google, Inc. http://angularjs.org
+ * License: MIT
+ */
+(function(window, document, undefined) {'use strict';
+
+/**
+ * @description
+ *
+ * This object provides a utility for producing rich Error messages within
+ * Angular. It can be called as follows:
+ *
+ * var exampleMinErr = minErr('example');
+ * throw exampleMinErr('one', 'This {0} is {1}', foo, bar);
+ *
+ * The above creates an instance of minErr in the example namespace. The
+ * resulting error will have a namespaced error code of example.one.  The
+ * resulting error will replace {0} with the value of foo, and {1} with the
+ * value of bar. The object is not restricted in the number of arguments it can
+ * take.
+ *
+ * If fewer arguments are specified than necessary for interpolation, the extra
+ * interpolation markers will be preserved in the final string.
+ *
+ * Since data will be parsed statically during a build step, some restrictions
+ * are applied with respect to how minErr instances are created and called.
+ * Instances should have names of the form namespaceMinErr for a minErr created
+ * using minErr('namespace') . Error codes, namespaces and template strings
+ * should all be static strings, not variables or general expressions.
+ *
+ * @param {string} module The namespace to use for the new minErr instance.
+ * @param {function} ErrorConstructor Custom error constructor to be instantiated when returning
+ *   error from returned function, for cases when a particular type of error is useful.
+ * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance
+ */
+
+function minErr(module, ErrorConstructor) {
+  ErrorConstructor = ErrorConstructor || Error;
+  return function() {
+    var SKIP_INDEXES = 2;
+
+    var templateArgs = arguments,
+      code = templateArgs[0],
+      message = '[' + (module ? module + ':' : '') + code + '] ',
+      template = templateArgs[1],
+      paramPrefix, i;
+
+    message += template.replace(/\{\d+\}/g, function(match) {
+      var index = +match.slice(1, -1),
+        shiftedIndex = index + SKIP_INDEXES;
+
+      if (shiftedIndex < templateArgs.length) {
+        return toDebugString(templateArgs[shiftedIndex]);
+      }
+
+      return match;
+    });
+
+    message += '\nhttp://errors.angularjs.org/1.4.8/' +
+      (module ? module + '/' : '') + code;
+
+    for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {
+      message += paramPrefix + 'p' + (i - SKIP_INDEXES) + '=' +
+        encodeURIComponent(toDebugString(templateArgs[i]));
+    }
+
+    return new ErrorConstructor(message);
+  };
+}
+
+/* We need to tell jshint what variables are being exported */
+/* global angular: true,
+  msie: true,
+  jqLite: true,
+  jQuery: true,
+  slice: true,
+  splice: true,
+  push: true,
+  toString: true,
+  ngMinErr: true,
+  angularModule: true,
+  uid: true,
+  REGEX_STRING_REGEXP: true,
+  VALIDITY_STATE_PROPERTY: true,
+
+  lowercase: true,
+  uppercase: true,
+  manualLowercase: true,
+  manualUppercase: true,
+  nodeName_: true,
+  isArrayLike: true,
+  forEach: true,
+  forEachSorted: true,
+  reverseParams: true,
+  nextUid: true,
+  setHashKey: true,
+  extend: true,
+  toInt: true,
+  inherit: true,
+  merge: true,
+  noop: true,
+  identity: true,
+  valueFn: true,
+  isUndefined: true,
+  isDefined: true,
+  isObject: true,
+  isBlankObject: true,
+  isString: true,
+  isNumber: true,
+  isDate: true,
+  isArray: true,
+  isFunction: true,
+  isRegExp: true,
+  isWindow: true,
+  isScope: true,
+  isFile: true,
+  isFormData: true,
+  isBlob: true,
+  isBoolean: true,
+  isPromiseLike: true,
+  trim: true,
+  escapeForRegexp: true,
+  isElement: true,
+  makeMap: true,
+  includes: true,
+  arrayRemove: true,
+  copy: true,
+  shallowCopy: true,
+  equals: true,
+  csp: true,
+  jq: true,
+  concat: true,
+  sliceArgs: true,
+  bind: true,
+  toJsonReplacer: true,
+  toJson: true,
+  fromJson: true,
+  convertTimezoneToLocal: true,
+  timezoneToOffset: true,
+  startingTag: true,
+  tryDecodeURIComponent: true,
+  parseKeyValue: true,
+  toKeyValue: true,
+  encodeUriSegment: true,
+  encodeUriQuery: true,
+  angularInit: true,
+  bootstrap: true,
+  getTestability: true,
+  snake_case: true,
+  bindJQuery: true,
+  assertArg: true,
+  assertArgFn: true,
+  assertNotHasOwnProperty: true,
+  getter: true,
+  getBlockNodes: true,
+  hasOwnProperty: true,
+  createMap: true,
+
+  NODE_TYPE_ELEMENT: true,
+  NODE_TYPE_ATTRIBUTE: true,
+  NODE_TYPE_TEXT: true,
+  NODE_TYPE_COMMENT: true,
+  NODE_TYPE_DOCUMENT: true,
+  NODE_TYPE_DOCUMENT_FRAGMENT: true,
+*/
+
+////////////////////////////////////
+
+/**
+ * @ngdoc module
+ * @name ng
+ * @module ng
+ * @description
+ *
+ * # ng (core module)
+ * The ng module is loaded by default when an AngularJS application is started. The module itself
+ * contains the essential components for an AngularJS application to function. The table below
+ * lists a high level breakdown of each of the services/factories, filters, directives and testing
+ * components available within this core module.
+ *
+ * <div doc-module-components="ng"></div>
+ */
+
+var REGEX_STRING_REGEXP = /^\/(.+)\/([a-z]*)$/;
+
+// The name of a form control's ValidityState property.
+// This is used so that it's possible for internal tests to create mock ValidityStates.
+var VALIDITY_STATE_PROPERTY = 'validity';
+
+/**
+ * @ngdoc function
+ * @name angular.lowercase
+ * @module ng
+ * @kind function
+ *
+ * @description Converts the specified string to lowercase.
+ * @param {string} string String to be converted to lowercase.
+ * @returns {string} Lowercased string.
+ */
+var lowercase = function(string) {return isString(string) ? string.toLowerCase() : string;};
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+/**
+ * @ngdoc function
+ * @name angular.uppercase
+ * @module ng
+ * @kind function
+ *
+ * @description Converts the specified string to uppercase.
+ * @param {string} string String to be converted to uppercase.
+ * @returns {string} Uppercased string.
+ */
+var uppercase = function(string) {return isString(string) ? string.toUpperCase() : string;};
+
+
+var manualLowercase = function(s) {
+  /* jshint bitwise: false */
+  return isString(s)
+      ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})
+      : s;
+};
+var manualUppercase = function(s) {
+  /* jshint bitwise: false */
+  return isString(s)
+      ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})
+      : s;
+};
+
+
+// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish
+// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods
+// with correct but slower alternatives.
+if ('i' !== 'I'.toLowerCase()) {
+  lowercase = manualLowercase;
+  uppercase = manualUppercase;
+}
+
+
+var
+    msie,             // holds major version number for IE, or NaN if UA is not IE.
+    jqLite,           // delay binding since jQuery could be loaded after us.
+    jQuery,           // delay binding
+    slice             = [].slice,
+    splice            = [].splice,
+    push              = [].push,
+    toString          = Object.prototype.toString,
+    getPrototypeOf    = Object.getPrototypeOf,
+    ngMinErr          = minErr('ng'),
+
+    /** @name angular */
+    angular           = window.angular || (window.angular = {}),
+    angularModule,
+    uid               = 0;
+
+/**
+ * documentMode is an IE-only property
+ * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx
+ */
+msie = document.documentMode;
+
+
+/**
+ * @private
+ * @param {*} obj
+ * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments,
+ *                   String ...)
+ */
+function isArrayLike(obj) {
+
+  // `null`, `undefined` and `window` are not array-like
+  if (obj == null || isWindow(obj)) return false;
+
+  // arrays, strings and jQuery/jqLite objects are array like
+  // * jqLite is either the jQuery or jqLite constructor function
+  // * we have to check the existance of jqLite first as this method is called
+  //   via the forEach method when constructing the jqLite object in the first place
+  if (isArray(obj) || isString(obj) || (jqLite && obj instanceof jqLite)) return true;
+
+  // Support: iOS 8.2 (not reproducible in simulator)
+  // "length" in obj used to prevent JIT error (gh-11508)
+  var length = "length" in Object(obj) && obj.length;
+
+  // NodeList objects (with `item` method) and
+  // other objects with suitable length characteristics are array-like
+  return isNumber(length) &&
+    (length >= 0 && (length - 1) in obj || typeof obj.item == 'function');
+}
+
+/**
+ * @ngdoc function
+ * @name angular.forEach
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Invokes the `iterator` function once for each item in `obj` collection, which can be either an
+ * object or an array. The `iterator` function is invoked with `iterator(value, key, obj)`, where `value`
+ * is the value of an object property or an array element, `key` is the object property key or
+ * array element index and obj is the `obj` itself. Specifying a `context` for the function is optional.
+ *
+ * It is worth noting that `.forEach` does not iterate over inherited properties because it filters
+ * using the `hasOwnProperty` method.
+ *
+ * Unlike ES262's
+ * [Array.prototype.forEach](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.18),
+ * Providing 'undefined' or 'null' values for `obj` will not throw a TypeError, but rather just
+ * return the value provided.
+ *
+   ```js
+     var values = {name: 'misko', gender: 'male'};
+     var log = [];
+     angular.forEach(values, function(value, key) {
+       this.push(key + ': ' + value);
+     }, log);
+     expect(log).toEqual(['name: misko', 'gender: male']);
+   ```
+ *
+ * @param {Object|Array} obj Object to iterate over.
+ * @param {Function} iterator Iterator function.
+ * @param {Object=} context Object to become context (`this`) for the iterator function.
+ * @returns {Object|Array} Reference to `obj`.
+ */
+
+function forEach(obj, iterator, context) {
+  var key, length;
+  if (obj) {
+    if (isFunction(obj)) {
+      for (key in obj) {
+        // Need to check if hasOwnProperty exists,
+        // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function
+        if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) {
+          iterator.call(context, obj[key], key, obj);
+        }
+      }
+    } else if (isArray(obj) || isArrayLike(obj)) {
+      var isPrimitive = typeof obj !== 'object';
+      for (key = 0, length = obj.length; key < length; key++) {
+        if (isPrimitive || key in obj) {
+          iterator.call(context, obj[key], key, obj);
+        }
+      }
+    } else if (obj.forEach && obj.forEach !== forEach) {
+        obj.forEach(iterator, context, obj);
+    } else if (isBlankObject(obj)) {
+      // createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty
+      for (key in obj) {
+        iterator.call(context, obj[key], key, obj);
+      }
+    } else if (typeof obj.hasOwnProperty === 'function') {
+      // Slow path for objects inheriting Object.prototype, hasOwnProperty check needed
+      for (key in obj) {
+        if (obj.hasOwnProperty(key)) {
+          iterator.call(context, obj[key], key, obj);
+        }
+      }
+    } else {
+      // Slow path for objects which do not have a method `hasOwnProperty`
+      for (key in obj) {
+        if (hasOwnProperty.call(obj, key)) {
+          iterator.call(context, obj[key], key, obj);
+        }
+      }
+    }
+  }
+  return obj;
+}
+
+function forEachSorted(obj, iterator, context) {
+  var keys = Object.keys(obj).sort();
+  for (var i = 0; i < keys.length; i++) {
+    iterator.call(context, obj[keys[i]], keys[i]);
+  }
+  return keys;
+}
+
+
+/**
+ * when using forEach the params are value, key, but it is often useful to have key, value.
+ * @param {function(string, *)} iteratorFn
+ * @returns {function(*, string)}
+ */
+function reverseParams(iteratorFn) {
+  return function(value, key) { iteratorFn(key, value); };
+}
+
+/**
+ * A consistent way of creating unique IDs in angular.
+ *
+ * Using simple numbers allows us to generate 28.6 million unique ids per second for 10 years before
+ * we hit number precision issues in JavaScript.
+ *
+ * Math.pow(2,53) / 60 / 60 / 24 / 365 / 10 = 28.6M
+ *
+ * @returns {number} an unique alpha-numeric string
+ */
+function nextUid() {
+  return ++uid;
+}
+
+
+/**
+ * Set or clear the hashkey for an object.
+ * @param obj object
+ * @param h the hashkey (!truthy to delete the hashkey)
+ */
+function setHashKey(obj, h) {
+  if (h) {
+    obj.$$hashKey = h;
+  } else {
+    delete obj.$$hashKey;
+  }
+}
+
+
+function baseExtend(dst, objs, deep) {
+  var h = dst.$$hashKey;
+
+  for (var i = 0, ii = objs.length; i < ii; ++i) {
+    var obj = objs[i];
+    if (!isObject(obj) && !isFunction(obj)) continue;
+    var keys = Object.keys(obj);
+    for (var j = 0, jj = keys.length; j < jj; j++) {
+      var key = keys[j];
+      var src = obj[key];
+
+      if (deep && isObject(src)) {
+        if (isDate(src)) {
+          dst[key] = new Date(src.valueOf());
+        } else if (isRegExp(src)) {
+          dst[key] = new RegExp(src);
+        } else if (src.nodeName) {
+          dst[key] = src.cloneNode(true);
+        } else if (isElement(src)) {
+          dst[key] = src.clone();
+        } else {
+          if (!isObject(dst[key])) dst[key] = isArray(src) ? [] : {};
+          baseExtend(dst[key], [src], true);
+        }
+      } else {
+        dst[key] = src;
+      }
+    }
+  }
+
+  setHashKey(dst, h);
+  return dst;
+}
+
+/**
+ * @ngdoc function
+ * @name angular.extend
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Extends the destination object `dst` by copying own enumerable properties from the `src` object(s)
+ * to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so
+ * by passing an empty object as the target: `var object = angular.extend({}, object1, object2)`.
+ *
+ * **Note:** Keep in mind that `angular.extend` does not support recursive merge (deep copy). Use
+ * {@link angular.merge} for this.
+ *
+ * @param {Object} dst Destination object.
+ * @param {...Object} src Source object(s).
+ * @returns {Object} Reference to `dst`.
+ */
+function extend(dst) {
+  return baseExtend(dst, slice.call(arguments, 1), false);
+}
+
+
+/**
+* @ngdoc function
+* @name angular.merge
+* @module ng
+* @kind function
+*
+* @description
+* Deeply extends the destination object `dst` by copying own enumerable properties from the `src` object(s)
+* to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so
+* by passing an empty object as the target: `var object = angular.merge({}, object1, object2)`.
+*
+* Unlike {@link angular.extend extend()}, `merge()` recursively descends into object properties of source
+* objects, performing a deep copy.
+*
+* @param {Object} dst Destination object.
+* @param {...Object} src Source object(s).
+* @returns {Object} Reference to `dst`.
+*/
+function merge(dst) {
+  return baseExtend(dst, slice.call(arguments, 1), true);
+}
+
+
+
+function toInt(str) {
+  return parseInt(str, 10);
+}
+
+
+function inherit(parent, extra) {
+  return extend(Object.create(parent), extra);
+}
+
+/**
+ * @ngdoc function
+ * @name angular.noop
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * A function that performs no operations. This function can be useful when writing code in the
+ * functional style.
+   ```js
+     function foo(callback) {
+       var result = calculateResult();
+       (callback || angular.noop)(result);
+     }
+   ```
+ */
+function noop() {}
+noop.$inject = [];
+
+
+/**
+ * @ngdoc function
+ * @name angular.identity
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * A function that returns its first argument. This function is useful when writing code in the
+ * functional style.
+ *
+   ```js
+     function transformer(transformationFn, value) {
+       return (transformationFn || angular.identity)(value);
+     };
+   ```
+  * @param {*} value to be returned.
+  * @returns {*} the value passed in.
+ */
+function identity($) {return $;}
+identity.$inject = [];
+
+
+function valueFn(value) {return function() {return value;};}
+
+function hasCustomToString(obj) {
+  return isFunction(obj.toString) && obj.toString !== toString;
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isUndefined
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is undefined.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is undefined.
+ */
+function isUndefined(value) {return typeof value === 'undefined';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isDefined
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is defined.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is defined.
+ */
+function isDefined(value) {return typeof value !== 'undefined';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isObject
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not
+ * considered to be objects. Note that JavaScript arrays are objects.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is an `Object` but not `null`.
+ */
+function isObject(value) {
+  // http://jsperf.com/isobject4
+  return value !== null && typeof value === 'object';
+}
+
+
+/**
+ * Determine if a value is an object with a null prototype
+ *
+ * @returns {boolean} True if `value` is an `Object` with a null prototype
+ */
+function isBlankObject(value) {
+  return value !== null && typeof value === 'object' && !getPrototypeOf(value);
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isString
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a `String`.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `String`.
+ */
+function isString(value) {return typeof value === 'string';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isNumber
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a `Number`.
+ *
+ * This includes the "special" numbers `NaN`, `+Infinity` and `-Infinity`.
+ *
+ * If you wish to exclude these then you can use the native
+ * [`isFinite'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite)
+ * method.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `Number`.
+ */
+function isNumber(value) {return typeof value === 'number';}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isDate
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a value is a date.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `Date`.
+ */
+function isDate(value) {
+  return toString.call(value) === '[object Date]';
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.isArray
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is an `Array`.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is an `Array`.
+ */
+var isArray = Array.isArray;
+
+/**
+ * @ngdoc function
+ * @name angular.isFunction
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a `Function`.
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `Function`.
+ */
+function isFunction(value) {return typeof value === 'function';}
+
+
+/**
+ * Determines if a value is a regular expression object.
+ *
+ * @private
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a `RegExp`.
+ */
+function isRegExp(value) {
+  return toString.call(value) === '[object RegExp]';
+}
+
+
+/**
+ * Checks if `obj` is a window object.
+ *
+ * @private
+ * @param {*} obj Object to check
+ * @returns {boolean} True if `obj` is a window obj.
+ */
+function isWindow(obj) {
+  return obj && obj.window === obj;
+}
+
+
+function isScope(obj) {
+  return obj && obj.$evalAsync && obj.$watch;
+}
+
+
+function isFile(obj) {
+  return toString.call(obj) === '[object File]';
+}
+
+
+function isFormData(obj) {
+  return toString.call(obj) === '[object FormData]';
+}
+
+
+function isBlob(obj) {
+  return toString.call(obj) === '[object Blob]';
+}
+
+
+function isBoolean(value) {
+  return typeof value === 'boolean';
+}
+
+
+function isPromiseLike(obj) {
+  return obj && isFunction(obj.then);
+}
+
+
+var TYPED_ARRAY_REGEXP = /^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array\]$/;
+function isTypedArray(value) {
+  return value && isNumber(value.length) && TYPED_ARRAY_REGEXP.test(toString.call(value));
+}
+
+
+var trim = function(value) {
+  return isString(value) ? value.trim() : value;
+};
+
+// Copied from:
+// http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1021
+// Prereq: s is a string.
+var escapeForRegexp = function(s) {
+  return s.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1').
+           replace(/\x08/g, '\\x08');
+};
+
+
+/**
+ * @ngdoc function
+ * @name angular.isElement
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if a reference is a DOM element (or wrapped jQuery element).
+ *
+ * @param {*} value Reference to check.
+ * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element).
+ */
+function isElement(node) {
+  return !!(node &&
+    (node.nodeName  // we are a direct element
+    || (node.prop && node.attr && node.find)));  // we have an on and find method part of jQuery API
+}
+
+/**
+ * @param str 'key1,key2,...'
+ * @returns {object} in the form of {key1:true, key2:true, ...}
+ */
+function makeMap(str) {
+  var obj = {}, items = str.split(","), i;
+  for (i = 0; i < items.length; i++) {
+    obj[items[i]] = true;
+  }
+  return obj;
+}
+
+
+function nodeName_(element) {
+  return lowercase(element.nodeName || (element[0] && element[0].nodeName));
+}
+
+function includes(array, obj) {
+  return Array.prototype.indexOf.call(array, obj) != -1;
+}
+
+function arrayRemove(array, value) {
+  var index = array.indexOf(value);
+  if (index >= 0) {
+    array.splice(index, 1);
+  }
+  return index;
+}
+
+/**
+ * @ngdoc function
+ * @name angular.copy
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Creates a deep copy of `source`, which should be an object or an array.
+ *
+ * * If no destination is supplied, a copy of the object or array is created.
+ * * If a destination is provided, all of its elements (for arrays) or properties (for objects)
+ *   are deleted and then all elements/properties from the source are copied to it.
+ * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned.
+ * * If `source` is identical to 'destination' an exception will be thrown.
+ *
+ * @param {*} source The source that will be used to make a copy.
+ *                   Can be any type, including primitives, `null`, and `undefined`.
+ * @param {(Object|Array)=} destination Destination into which the source is copied. If
+ *     provided, must be of the same type as `source`.
+ * @returns {*} The copy or updated `destination`, if `destination` was specified.
+ *
+ * @example
+ <example module="copyExample">
+ <file name="index.html">
+ <div ng-controller="ExampleController">
+ <form novalidate class="simple-form">
+ Name: <input type="text" ng-model="user.name" /><br />
+ E-mail: <input type="email" ng-model="user.email" /><br />
+ Gender: <input type="radio" ng-model="user.gender" value="male" />male
+ <input type="radio" ng-model="user.gender" value="female" />female<br />
+ <button ng-click="reset()">RESET</button>
+ <button ng-click="update(user)">SAVE</button>
+ </form>
+ <pre>form = {{user | json}}</pre>
+ <pre>master = {{master | json}}</pre>
+ </div>
+
+ <script>
+  angular.module('copyExample', [])
+    .controller('ExampleController', ['$scope', function($scope) {
+      $scope.master= {};
+
+      $scope.update = function(user) {
+        // Example with 1 argument
+        $scope.master= angular.copy(user);
+      };
+
+      $scope.reset = function() {
+        // Example with 2 arguments
+        angular.copy($scope.master, $scope.user);
+      };
+
+      $scope.reset();
+    }]);
+ </script>
+ </file>
+ </example>
+ */
+function copy(source, destination) {
+  var stackSource = [];
+  var stackDest = [];
+
+  if (destination) {
+    if (isTypedArray(destination)) {
+      throw ngMinErr('cpta', "Can't copy! TypedArray destination cannot be mutated.");
+    }
+    if (source === destination) {
+      throw ngMinErr('cpi', "Can't copy! Source and destination are identical.");
+    }
+
+    // Empty the destination object
+    if (isArray(destination)) {
+      destination.length = 0;
+    } else {
+      forEach(destination, function(value, key) {
+        if (key !== '$$hashKey') {
+          delete destination[key];
+        }
+      });
+    }
+
+    stackSource.push(source);
+    stackDest.push(destination);
+    return copyRecurse(source, destination);
+  }
+
+  return copyElement(source);
+
+  function copyRecurse(source, destination) {
+    var h = destination.$$hashKey;
+    var result, key;
+    if (isArray(source)) {
+      for (var i = 0, ii = source.length; i < ii; i++) {
+        destination.push(copyElement(source[i]));
+      }
+    } else if (isBlankObject(source)) {
+      // createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty
+      for (key in source) {
+        destination[key] = copyElement(source[key]);
+      }
+    } else if (source && typeof source.hasOwnProperty === 'function') {
+      // Slow path, which must rely on hasOwnProperty
+      for (key in source) {
+        if (source.hasOwnProperty(key)) {
+          destination[key] = copyElement(source[key]);
+        }
+      }
+    } else {
+      // Slowest path --- hasOwnProperty can't be called as a method
+      for (key in source) {
+        if (hasOwnProperty.call(source, key)) {
+          destination[key] = copyElement(source[key]);
+        }
+      }
+    }
+    setHashKey(destination, h);
+    return destination;
+  }
+
+  function copyElement(source) {
+    // Simple values
+    if (!isObject(source)) {
+      return source;
+    }
+
+    // Already copied values
+    var index = stackSource.indexOf(source);
+    if (index !== -1) {
+      return stackDest[index];
+    }
+
+    if (isWindow(source) || isScope(source)) {
+      throw ngMinErr('cpws',
+        "Can't copy! Making copies of Window or Scope instances is not supported.");
+    }
+
+    var needsRecurse = false;
+    var destination;
+
+    if (isArray(source)) {
+      destination = [];
+      needsRecurse = true;
+    } else if (isTypedArray(source)) {
+      destination = new source.constructor(source);
+    } else if (isDate(source)) {
+      destination = new Date(source.getTime());
+    } else if (isRegExp(source)) {
+      destination = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]);
+      destination.lastIndex = source.lastIndex;
+    } else if (isFunction(source.cloneNode)) {
+        destination = source.cloneNode(true);
+    } else {
+      destination = Object.create(getPrototypeOf(source));
+      needsRecurse = true;
+    }
+
+    stackSource.push(source);
+    stackDest.push(destination);
+
+    return needsRecurse
+      ? copyRecurse(source, destination)
+      : destination;
+  }
+}
+
+/**
+ * Creates a shallow copy of an object, an array or a primitive.
+ *
+ * Assumes that there are no proto properties for objects.
+ */
+function shallowCopy(src, dst) {
+  if (isArray(src)) {
+    dst = dst || [];
+
+    for (var i = 0, ii = src.length; i < ii; i++) {
+      dst[i] = src[i];
+    }
+  } else if (isObject(src)) {
+    dst = dst || {};
+
+    for (var key in src) {
+      if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {
+        dst[key] = src[key];
+      }
+    }
+  }
+
+  return dst || src;
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.equals
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Determines if two objects or two values are equivalent. Supports value types, regular
+ * expressions, arrays and objects.
+ *
+ * Two objects or values are considered equivalent if at least one of the following is true:
+ *
+ * * Both objects or values pass `===` comparison.
+ * * Both objects or values are of the same type and all of their properties are equal by
+ *   comparing them with `angular.equals`.
+ * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal)
+ * * Both values represent the same regular expression (In JavaScript,
+ *   /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual
+ *   representation matches).
+ *
+ * During a property comparison, properties of `function` type and properties with names
+ * that begin with `$` are ignored.
+ *
+ * Scope and DOMWindow objects are being compared only by identify (`===`).
+ *
+ * @param {*} o1 Object or value to compare.
+ * @param {*} o2 Object or value to compare.
+ * @returns {boolean} True if arguments are equal.
+ */
+function equals(o1, o2) {
+  if (o1 === o2) return true;
+  if (o1 === null || o2 === null) return false;
+  if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN
+  var t1 = typeof o1, t2 = typeof o2, length, key, keySet;
+  if (t1 == t2) {
+    if (t1 == 'object') {
+      if (isArray(o1)) {
+        if (!isArray(o2)) return false;
+        if ((length = o1.length) == o2.length) {
+          for (key = 0; key < length; key++) {
+            if (!equals(o1[key], o2[key])) return false;
+          }
+          return true;
+        }
+      } else if (isDate(o1)) {
+        if (!isDate(o2)) return false;
+        return equals(o1.getTime(), o2.getTime());
+      } else if (isRegExp(o1)) {
+        return isRegExp(o2) ? o1.toString() == o2.toString() : false;
+      } else {
+        if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) ||
+          isArray(o2) || isDate(o2) || isRegExp(o2)) return false;
+        keySet = createMap();
+        for (key in o1) {
+          if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
+          if (!equals(o1[key], o2[key])) return false;
+          keySet[key] = true;
+        }
+        for (key in o2) {
+          if (!(key in keySet) &&
+              key.charAt(0) !== '$' &&
+              isDefined(o2[key]) &&
+              !isFunction(o2[key])) return false;
+        }
+        return true;
+      }
+    }
+  }
+  return false;
+}
+
+var csp = function() {
+  if (!isDefined(csp.rules)) {
+
+
+    var ngCspElement = (document.querySelector('[ng-csp]') ||
+                    document.querySelector('[data-ng-csp]'));
+
+    if (ngCspElement) {
+      var ngCspAttribute = ngCspElement.getAttribute('ng-csp') ||
+                    ngCspElement.getAttribute('data-ng-csp');
+      csp.rules = {
+        noUnsafeEval: !ngCspAttribute || (ngCspAttribute.indexOf('no-unsafe-eval') !== -1),
+        noInlineStyle: !ngCspAttribute || (ngCspAttribute.indexOf('no-inline-style') !== -1)
+      };
+    } else {
+      csp.rules = {
+        noUnsafeEval: noUnsafeEval(),
+        noInlineStyle: false
+      };
+    }
+  }
+
+  return csp.rules;
+
+  function noUnsafeEval() {
+    try {
+      /* jshint -W031, -W054 */
+      new Function('');
+      /* jshint +W031, +W054 */
+      return false;
+    } catch (e) {
+      return true;
+    }
+  }
+};
+
+/**
+ * @ngdoc directive
+ * @module ng
+ * @name ngJq
+ *
+ * @element ANY
+ * @param {string=} ngJq the name of the library available under `window`
+ * to be used for angular.element
+ * @description
+ * Use this directive to force the angular.element library.  This should be
+ * used to force either jqLite by leaving ng-jq blank or setting the name of
+ * the jquery variable under window (eg. jQuery).
+ *
+ * Since angular looks for this directive when it is loaded (doesn't wait for the
+ * DOMContentLoaded event), it must be placed on an element that comes before the script
+ * which loads angular. Also, only the first instance of `ng-jq` will be used and all
+ * others ignored.
+ *
+ * @example
+ * This example shows how to force jqLite using the `ngJq` directive to the `html` tag.
+ ```html
+ <!doctype html>
+ <html ng-app ng-jq>
+ ...
+ ...
+ </html>
+ ```
+ * @example
+ * This example shows how to use a jQuery based library of a different name.
+ * The library name must be available at the top most 'window'.
+ ```html
+ <!doctype html>
+ <html ng-app ng-jq="jQueryLib">
+ ...
+ ...
+ </html>
+ ```
+ */
+var jq = function() {
+  if (isDefined(jq.name_)) return jq.name_;
+  var el;
+  var i, ii = ngAttrPrefixes.length, prefix, name;
+  for (i = 0; i < ii; ++i) {
+    prefix = ngAttrPrefixes[i];
+    if (el = document.querySelector('[' + prefix.replace(':', '\\:') + 'jq]')) {
+      name = el.getAttribute(prefix + 'jq');
+      break;
+    }
+  }
+
+  return (jq.name_ = name);
+};
+
+function concat(array1, array2, index) {
+  return array1.concat(slice.call(array2, index));
+}
+
+function sliceArgs(args, startIndex) {
+  return slice.call(args, startIndex || 0);
+}
+
+
+/* jshint -W101 */
+/**
+ * @ngdoc function
+ * @name angular.bind
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for
+ * `fn`). You can supply optional `args` that are prebound to the function. This feature is also
+ * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as
+ * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application).
+ *
+ * @param {Object} self Context which `fn` should be evaluated in.
+ * @param {function()} fn Function to be bound.
+ * @param {...*} args Optional arguments to be prebound to the `fn` function call.
+ * @returns {function()} Function that wraps the `fn` with all the specified bindings.
+ */
+/* jshint +W101 */
+function bind(self, fn) {
+  var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];
+  if (isFunction(fn) && !(fn instanceof RegExp)) {
+    return curryArgs.length
+      ? function() {
+          return arguments.length
+            ? fn.apply(self, concat(curryArgs, arguments, 0))
+            : fn.apply(self, curryArgs);
+        }
+      : function() {
+          return arguments.length
+            ? fn.apply(self, arguments)
+            : fn.call(self);
+        };
+  } else {
+    // in IE, native methods are not functions so they cannot be bound (note: they don't need to be)
+    return fn;
+  }
+}
+
+
+function toJsonReplacer(key, value) {
+  var val = value;
+
+  if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') {
+    val = undefined;
+  } else if (isWindow(value)) {
+    val = '$WINDOW';
+  } else if (value &&  document === value) {
+    val = '$DOCUMENT';
+  } else if (isScope(value)) {
+    val = '$SCOPE';
+  }
+
+  return val;
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.toJson
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Serializes input into a JSON-formatted string. Properties with leading $$ characters will be
+ * stripped since angular uses this notation internally.
+ *
+ * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.
+ * @param {boolean|number} [pretty=2] If set to true, the JSON output will contain newlines and whitespace.
+ *    If set to an integer, the JSON output will contain that many spaces per indentation.
+ * @returns {string|undefined} JSON-ified string representing `obj`.
+ */
+function toJson(obj, pretty) {
+  if (typeof obj === 'undefined') return undefined;
+  if (!isNumber(pretty)) {
+    pretty = pretty ? 2 : null;
+  }
+  return JSON.stringify(obj, toJsonReplacer, pretty);
+}
+
+
+/**
+ * @ngdoc function
+ * @name angular.fromJson
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Deserializes a JSON string.
+ *
+ * @param {string} json JSON string to deserialize.
+ * @returns {Object|Array|string|number} Deserialized JSON string.
+ */
+function fromJson(json) {
+  return isString(json)
+      ? JSON.parse(json)
+      : json;
+}
+
+
+function timezoneToOffset(timezone, fallback) {
+  var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000;
+  return isNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset;
+}
+
+
+function addDateMinutes(date, minutes) {
+  date = new Date(date.getTime());
+  date.setMinutes(date.getMinutes() + minutes);
+  return date;
+}
+
+
+function convertTimezoneToLocal(date, timezone, reverse) {
+  reverse = reverse ? -1 : 1;
+  var timezoneOffset = timezoneToOffset(timezone, date.getTimezoneOffset());
+  return addDateMinutes(date, reverse * (timezoneOffset - date.getTimezoneOffset()));
+}
+
+
+/**
+ * @returns {string} Returns the string representation of the element.
+ */
+function startingTag(element) {
+  element = jqLite(element).clone();
+  try {
+    // turns out IE does not let you set .html() on elements which
+    // are not allowed to have children. So we just ignore it.
+    element.empty();
+  } catch (e) {}
+  var elemHtml = jqLite('<div>').append(element).html();
+  try {
+    return element[0].nodeType === NODE_TYPE_TEXT ? lowercase(elemHtml) :
+        elemHtml.
+          match(/^(<[^>]+>)/)[1].
+          replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); });
+  } catch (e) {
+    return lowercase(elemHtml);
+  }
+
+}
+
+
+/////////////////////////////////////////////////
+
+/**
+ * Tries to decode the URI component without throwing an exception.
+ *
+ * @private
+ * @param str value potential URI component to check.
+ * @returns {boolean} True if `value` can be decoded
+ * with the decodeURIComponent function.
+ */
+function tryDecodeURIComponent(value) {
+  try {
+    return decodeURIComponent(value);
+  } catch (e) {
+    // Ignore any invalid uri component
+  }
+}
+
+
+/**
+ * Parses an escaped url query string into key-value pairs.
+ * @returns {Object.<string,boolean|Array>}
+ */
+function parseKeyValue(/**string*/keyValue) {
+  var obj = {};
+  forEach((keyValue || "").split('&'), function(keyValue) {
+    var splitPoint, key, val;
+    if (keyValue) {
+      key = keyValue = keyValue.replace(/\+/g,'%20');
+      splitPoint = keyValue.indexOf('=');
+      if (splitPoint !== -1) {
+        key = keyValue.substring(0, splitPoint);
+        val = keyValue.substring(splitPoint + 1);
+      }
+      key = tryDecodeURIComponent(key);
+      if (isDefined(key)) {
+        val = isDefined(val) ? tryDecodeURIComponent(val) : true;
+        if (!hasOwnProperty.call(obj, key)) {
+          obj[key] = val;
+        } else if (isArray(obj[key])) {
+          obj[key].push(val);
+        } else {
+          obj[key] = [obj[key],val];
+        }
+      }
+    }
+  });
+  return obj;
+}
+
+function toKeyValue(obj) {
+  var parts = [];
+  forEach(obj, function(value, key) {
+    if (isArray(value)) {
+      forEach(value, function(arrayValue) {
+        parts.push(encodeUriQuery(key, true) +
+                   (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true)));
+      });
+    } else {
+    parts.push(encodeUriQuery(key, true) +
+               (value === true ? '' : '=' + encodeUriQuery(value, true)));
+    }
+  });
+  return parts.length ? parts.join('&') : '';
+}
+
+
+/**
+ * We need our custom method because encodeURIComponent is too aggressive and doesn't follow
+ * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path
+ * segments:
+ *    segment       = *pchar
+ *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+ *    pct-encoded   = "%" HEXDIG HEXDIG
+ *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+ *                     / "*" / "+" / "," / ";" / "="
+ */
+function encodeUriSegment(val) {
+  return encodeUriQuery(val, true).
+             replace(/%26/gi, '&').
+             replace(/%3D/gi, '=').
+             replace(/%2B/gi, '+');
+}
+
+
+/**
+ * This method is intended for encoding *key* or *value* parts of query component. We need a custom
+ * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be
+ * encoded per http://tools.ietf.org/html/rfc3986:
+ *    query       = *( pchar / "/" / "?" )
+ *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
+ *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
+ *    pct-encoded   = "%" HEXDIG HEXDIG
+ *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
+ *                     / "*" / "+" / "," / ";" / "="
+ */
+function encodeUriQuery(val, pctEncodeSpaces) {
+  return encodeURIComponent(val).
+             replace(/%40/gi, '@').
+             replace(/%3A/gi, ':').
+             replace(/%24/g, '$').
+             replace(/%2C/gi, ',').
+             replace(/%3B/gi, ';').
+             replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
+}
+
+var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-'];
+
+function getNgAttribute(element, ngAttr) {
+  var attr, i, ii = ngAttrPrefixes.length;
+  for (i = 0; i < ii; ++i) {
+    attr = ngAttrPrefixes[i] + ngAttr;
+    if (isString(attr = element.getAttribute(attr))) {
+      return attr;
+    }
+  }
+  return null;
+}
+
+/**
+ * @ngdoc directive
+ * @name ngApp
+ * @module ng
+ *
+ * @element ANY
+ * @param {angular.Module} ngApp an optional application
+ *   {@link angular.module module} name to load.
+ * @param {boolean=} ngStrictDi if this attribute is present on the app element, the injector will be
+ *   created in "strict-di" mode. This means that the application will fail to invoke functions which
+ *   do not use explicit function annotation (and are thus unsuitable for minification), as described
+ *   in {@link guide/di the Dependency Injection guide}, and useful debugging info will assist in
+ *   tracking down the root of these bugs.
+ *
+ * @description
+ *
+ * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive
+ * designates the **root element** of the application and is typically placed near the root element
+ * of the page - e.g. on the `<body>` or `<html>` tags.
+ *
+ * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp`
+ * found in the document will be used to define the root element to auto-bootstrap as an
+ * application. To run multiple applications in an HTML document you must manually bootstrap them using
+ * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other.
+ *
+ * You can specify an **AngularJS module** to be used as the root module for the application.  This
+ * module will be loaded into the {@link auto.$injector} when the application is bootstrapped. It
+ * should contain the application code needed or have dependencies on other modules that will
+ * contain the code. See {@link angular.module} for more information.
+ *
+ * In the example below if the `ngApp` directive were not placed on the `html` element then the
+ * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}`
+ * would not be resolved to `3`.
+ *
+ * `ngApp` is the easiest, and most common way to bootstrap an application.
+ *
+ <example module="ngAppDemo">
+   <file name="index.html">
+   <div ng-controller="ngAppDemoController">
+     I can add: {{a}} + {{b}} =  {{ a+b }}
+   </div>
+   </file>
+   <file name="script.js">
+   angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) {
+     $scope.a = 1;
+     $scope.b = 2;
+   });
+   </file>
+ </example>
+ *
+ * Using `ngStrictDi`, you would see something like this:
+ *
+ <example ng-app-included="true">
+   <file name="index.html">
+   <div ng-app="ngAppStrictDemo" ng-strict-di>
+       <div ng-controller="GoodController1">
+           I can add: {{a}} + {{b}} =  {{ a+b }}
+
+           <p>This renders because the controller does not fail to
+              instantiate, by using explicit annotation style (see
+              script.js for details)
+           </p>
+       </div>
+
+       <div ng-controller="GoodController2">
+           Name: <input ng-model="name"><br />
+           Hello, {{name}}!
+
+           <p>This renders because the controller does not fail to
+              instantiate, by using explicit annotation style
+              (see script.js for details)
+           </p>
+       </div>
+
+       <div ng-controller="BadController">
+           I can add: {{a}} + {{b}} =  {{ a+b }}
+
+           <p>The controller could not be instantiated, due to relying
+              on automatic function annotations (which are disabled in
+              strict mode). As such, the content of this section is not
+              interpolated, and there should be an error in your web console.
+           </p>
+       </div>
+   </div>
+   </file>
+   <file name="script.js">
+   angular.module('ngAppStrictDemo', [])
+     // BadController will fail to instantiate, due to relying on automatic function annotation,
+     // rather than an explicit annotation
+     .controller('BadController', function($scope) {
+       $scope.a = 1;
+       $scope.b = 2;
+     })
+     // Unlike BadController, GoodController1 and GoodController2 will not fail to be instantiated,
+     // due to using explicit annotations using the array style and $inject property, respectively.
+     .controller('GoodController1', ['$scope', function($scope) {
+       $scope.a = 1;
+       $scope.b = 2;
+     }])
+     .controller('GoodController2', GoodController2);
+     function GoodController2($scope) {
+       $scope.name = "World";
+     }
+     GoodController2.$inject = ['$scope'];
+   </file>
+   <file name="style.css">
+   div[ng-controller] {
+       margin-bottom: 1em;
+       -webkit-border-radius: 4px;
+       border-radius: 4px;
+       border: 1px solid;
+       padding: .5em;
+   }
+   div[ng-controller^=Good] {
+       border-color: #d6e9c6;
+       background-color: #dff0d8;
+       color: #3c763d;
+   }
+   div[ng-controller^=Bad] {
+       border-color: #ebccd1;
+       background-color: #f2dede;
+       color: #a94442;
+       margin-bottom: 0;
+   }
+   </file>
+ </example>
+ */
+function angularInit(element, bootstrap) {
+  var appElement,
+      module,
+      config = {};
+
+  // The element `element` has priority over any other element
+  forEach(ngAttrPrefixes, function(prefix) {
+    var name = prefix + 'app';
+
+    if (!appElement && element.hasAttribute && element.hasAttribute(name)) {
+      appElement = element;
+      module = element.getAttribute(name);
+    }
+  });
+  forEach(ngAttrPrefixes, function(prefix) {
+    var name = prefix + 'app';
+    var candidate;
+
+    if (!appElement && (candidate = element.querySelector('[' + name.replace(':', '\\:') + ']'))) {
+      appElement = candidate;
+      module = candidate.getAttribute(name);
+    }
+  });
+  if (appElement) {
+    config.strictDi = getNgAttribute(appElement, "strict-di") !== null;
+    bootstrap(appElement, module ? [module] : [], config);
+  }
+}
+
+/**
+ * @ngdoc function
+ * @name angular.bootstrap
+ * @module ng
+ * @description
+ * Use this function to manually start up angular application.
+ *
+ * See: {@link guide/bootstrap Bootstrap}
+ *
+ * Note that Protractor based end-to-end tests cannot use this function to bootstrap manually.
+ * They must use {@link ng.directive:ngApp ngApp}.
+ *
+ * Angular will detect if it has been loaded into the browser more than once and only allow the
+ * first loaded script to be bootstrapped and will report a warning to the browser console for
+ * each of the subsequent scripts. This prevents strange results in applications, where otherwise
+ * multiple instances of Angular try to work on the DOM.
+ *
+ * ```html
+ * <!doctype html>
+ * <html>
+ * <body>
+ * <div ng-controller="WelcomeController">
+ *   {{greeting}}
+ * </div>
+ *
+ * <script src="angular.js"></script>
+ * <script>
+ *   var app = angular.module('demo', [])
+ *   .controller('WelcomeController', function($scope) {
+ *       $scope.greeting = 'Welcome!';
+ *   });
+ *   angular.bootstrap(document, ['demo']);
+ * </script>
+ * </body>
+ * </html>
+ * ```
+ *
+ * @param {DOMElement} element DOM element which is the root of angular application.
+ * @param {Array<String|Function|Array>=} modules an array of modules to load into the application.
+ *     Each item in the array should be the name of a predefined module or a (DI annotated)
+ *     function that will be invoked by the injector as a `config` block.
+ *     See: {@link angular.module modules}
+ * @param {Object=} config an object for defining configuration options for the application. The
+ *     following keys are supported:
+ *
+ * * `strictDi` - disable automatic function annotation for the application. This is meant to
+ *   assist in finding bugs which break minified code. Defaults to `false`.
+ *
+ * @returns {auto.$injector} Returns the newly created injector for this app.
+ */
+function bootstrap(element, modules, config) {
+  if (!isObject(config)) config = {};
+  var defaultConfig = {
+    strictDi: false
+  };
+  config = extend(defaultConfig, config);
+  var doBootstrap = function() {
+    element = jqLite(element);
+
+    if (element.injector()) {
+      var tag = (element[0] === document) ? 'document' : startingTag(element);
+      //Encode angle brackets to prevent input from being sanitized to empty string #8683
+      throw ngMinErr(
+          'btstrpd',
+          "App Already Bootstrapped with this Element '{0}'",
+          tag.replace(/</,'&lt;').replace(/>/,'&gt;'));
+    }
+
+    modules = modules || [];
+    modules.unshift(['$provide', function($provide) {
+      $provide.value('$rootElement', element);
+    }]);
+
+    if (config.debugInfoEnabled) {
+      // Pushing so that this overrides `debugInfoEnabled` setting defined in user's `modules`.
+      modules.push(['$compileProvider', function($compileProvider) {
+        $compileProvider.debugInfoEnabled(true);
+      }]);
+    }
+
+    modules.unshift('ng');
+    var injector = createInjector(modules, config.strictDi);
+    injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector',
+       function bootstrapApply(scope, element, compile, injector) {
+        scope.$apply(function() {
+          element.data('$injector', injector);
+          compile(element)(scope);
+        });
+      }]
+    );
+    return injector;
+  };
+
+  var NG_ENABLE_DEBUG_INFO = /^NG_ENABLE_DEBUG_INFO!/;
+  var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;
+
+  if (window && NG_ENABLE_DEBUG_INFO.test(window.name)) {
+    config.debugInfoEnabled = true;
+    window.name = window.name.replace(NG_ENABLE_DEBUG_INFO, '');
+  }
+
+  if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {
+    return doBootstrap();
+  }
+
+  window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');
+  angular.resumeBootstrap = function(extraModules) {
+    forEach(extraModules, function(module) {
+      modules.push(module);
+    });
+    return doBootstrap();
+  };
+
+  if (isFunction(angular.resumeDeferredBootstrap)) {
+    angular.resumeDeferredBootstrap();
+  }
+}
+
+/**
+ * @ngdoc function
+ * @name angular.reloadWithDebugInfo
+ * @module ng
+ * @description
+ * Use this function to reload the current application with debug information turned on.
+ * This takes precedence over a call to `$compileProvider.debugInfoEnabled(false)`.
+ *
+ * See {@link ng.$compileProvider#debugInfoEnabled} for more.
+ */
+function reloadWithDebugInfo() {
+  window.name = 'NG_ENABLE_DEBUG_INFO!' + window.name;
+  window.location.reload();
+}
+
+/**
+ * @name angular.getTestability
+ * @module ng
+ * @description
+ * Get the testability service for the instance of Angular on the given
+ * element.
+ * @param {DOMElement} element DOM element which is the root of angular application.
+ */
+function getTestability(rootElement) {
+  var injector = angular.element(rootElement).injector();
+  if (!injector) {
+    throw ngMinErr('test',
+      'no injector found for element argument to getTestability');
+  }
+  return injector.get('$$testability');
+}
+
+var SNAKE_CASE_REGEXP = /[A-Z]/g;
+function snake_case(name, separator) {
+  separator = separator || '_';
+  return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {
+    return (pos ? separator : '') + letter.toLowerCase();
+  });
+}
+
+var bindJQueryFired = false;
+var skipDestroyOnNextJQueryCleanData;
+function bindJQuery() {
+  var originalCleanData;
+
+  if (bindJQueryFired) {
+    return;
+  }
+
+  // bind to jQuery if present;
+  var jqName = jq();
+  jQuery = isUndefined(jqName) ? window.jQuery :   // use jQuery (if present)
+           !jqName             ? undefined     :   // use jqLite
+                                 window[jqName];   // use jQuery specified by `ngJq`
+
+  // Use jQuery if it exists with proper functionality, otherwise default to us.
+  // Angular 1.2+ requires jQuery 1.7+ for on()/off() support.
+  // Angular 1.3+ technically requires at least jQuery 2.1+ but it may work with older
+  // versions. It will not work for sure with jQuery <1.7, though.
+  if (jQuery && jQuery.fn.on) {
+    jqLite = jQuery;
+    extend(jQuery.fn, {
+      scope: JQLitePrototype.scope,
+      isolateScope: JQLitePrototype.isolateScope,
+      controller: JQLitePrototype.controller,
+      injector: JQLitePrototype.injector,
+      inheritedData: JQLitePrototype.inheritedData
+    });
+
+    // All nodes removed from the DOM via various jQuery APIs like .remove()
+    // are passed through jQuery.cleanData. Monkey-patch this method to fire
+    // the $destroy event on all removed nodes.
+    originalCleanData = jQuery.cleanData;
+    jQuery.cleanData = function(elems) {
+      var events;
+      if (!skipDestroyOnNextJQueryCleanData) {
+        for (var i = 0, elem; (elem = elems[i]) != null; i++) {
+          events = jQuery._data(elem, "events");
+          if (events && events.$destroy) {
+            jQuery(elem).triggerHandler('$destroy');
+          }
+        }
+      } else {
+        skipDestroyOnNextJQueryCleanData = false;
+      }
+      originalCleanData(elems);
+    };
+  } else {
+    jqLite = JQLite;
+  }
+
+  angular.element = jqLite;
+
+  // Prevent double-proxying.
+  bindJQueryFired = true;
+}
+
+/**
+ * throw error if the argument is falsy.
+ */
+function assertArg(arg, name, reason) {
+  if (!arg) {
+    throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required"));
+  }
+  return arg;
+}
+
+function assertArgFn(arg, name, acceptArrayAnnotation) {
+  if (acceptArrayAnnotation && isArray(arg)) {
+      arg = arg[arg.length - 1];
+  }
+
+  assertArg(isFunction(arg), name, 'not a function, got ' +
+      (arg && typeof arg === 'object' ? arg.constructor.name || 'Object' : typeof arg));
+  return arg;
+}
+
+/**
+ * throw error if the name given is hasOwnProperty
+ * @param  {String} name    the name to test
+ * @param  {String} context the context in which the name is used, such as module or directive
+ */
+function assertNotHasOwnProperty(name, context) {
+  if (name === 'hasOwnProperty') {
+    throw ngMinErr('badname', "hasOwnProperty is not a valid {0} name", context);
+  }
+}
+
+/**
+ * Return the value accessible from the object by path. Any undefined traversals are ignored
+ * @param {Object} obj starting object
+ * @param {String} path path to traverse
+ * @param {boolean} [bindFnToScope=true]
+ * @returns {Object} value as accessible by path
+ */
+//TODO(misko): this function needs to be removed
+function getter(obj, path, bindFnToScope) {
+  if (!path) return obj;
+  var keys = path.split('.');
+  var key;
+  var lastInstance = obj;
+  var len = keys.length;
+
+  for (var i = 0; i < len; i++) {
+    key = keys[i];
+    if (obj) {
+      obj = (lastInstance = obj)[key];
+    }
+  }
+  if (!bindFnToScope && isFunction(obj)) {
+    return bind(lastInstance, obj);
+  }
+  return obj;
+}
+
+/**
+ * Return the DOM siblings between the first and last node in the given array.
+ * @param {Array} array like object
+ * @returns {Array} the inputted object or a jqLite collection containing the nodes
+ */
+function getBlockNodes(nodes) {
+  // TODO(perf): update `nodes` instead of creating a new object?
+  var node = nodes[0];
+  var endNode = nodes[nodes.length - 1];
+  var blockNodes;
+
+  for (var i = 1; node !== endNode && (node = node.nextSibling); i++) {
+    if (blockNodes || nodes[i] !== node) {
+      if (!blockNodes) {
+        blockNodes = jqLite(slice.call(nodes, 0, i));
+      }
+      blockNodes.push(node);
+    }
+  }
+
+  return blockNodes || nodes;
+}
+
+
+/**
+ * Creates a new object without a prototype. This object is useful for lookup without having to
+ * guard against prototypically inherited properties via hasOwnProperty.
+ *
+ * Related micro-benchmarks:
+ * - http://jsperf.com/object-create2
+ * - http://jsperf.com/proto-map-lookup/2
+ * - http://jsperf.com/for-in-vs-object-keys2
+ *
+ * @returns {Object}
+ */
+function createMap() {
+  return Object.create(null);
+}
+
+var NODE_TYPE_ELEMENT = 1;
+var NODE_TYPE_ATTRIBUTE = 2;
+var NODE_TYPE_TEXT = 3;
+var NODE_TYPE_COMMENT = 8;
+var NODE_TYPE_DOCUMENT = 9;
+var NODE_TYPE_DOCUMENT_FRAGMENT = 11;
+
+/**
+ * @ngdoc type
+ * @name angular.Module
+ * @module ng
+ * @description
+ *
+ * Interface for configuring angular {@link angular.module modules}.
+ */
+
+function setupModuleLoader(window) {
+
+  var $injectorMinErr = minErr('$injector');
+  var ngMinErr = minErr('ng');
+
+  function ensure(obj, name, factory) {
+    return obj[name] || (obj[name] = factory());
+  }
+
+  var angular = ensure(window, 'angular', Object);
+
+  // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap
+  angular.$$minErr = angular.$$minErr || minErr;
+
+  return ensure(angular, 'module', function() {
+    /** @type {Object.<string, angular.Module>} */
+    var modules = {};
+
+    /**
+     * @ngdoc function
+     * @name angular.module
+     * @module ng
+     * @description
+     *
+     * The `angular.module` is a global place for creating, registering and retrieving Angular
+     * modules.
+     * All modules (angular core or 3rd party) that should be available to an application must be
+     * registered using this mechanism.
+     *
+     * Passing one argument retrieves an existing {@link angular.Module},
+     * whereas passing more than one argument creates a new {@link angular.Module}
+     *
+     *
+     * # Module
+     *
+     * A module is a collection of services, directives, controllers, filters, and configuration information.
+     * `angular.module` is used to configure the {@link auto.$injector $injector}.
+     *
+     * ```js
+     * // Create a new module
+     * var myModule = angular.module('myModule', []);
+     *
+     * // register a new service
+     * myModule.value('appName', 'MyCoolApp');
+     *
+     * // configure existing services inside initialization blocks.
+     * myModule.config(['$locationProvider', function($locationProvider) {
+     *   // Configure existing providers
+     *   $locationProvider.hashPrefix('!');
+     * }]);
+     * ```
+     *
+     * Then you can create an injector and load your modules like this:
+     *
+     * ```js
+     * var injector = angular.injector(['ng', 'myModule'])
+     * ```
+     *
+     * However it's more likely that you'll just use
+     * {@link ng.directive:ngApp ngApp} or
+     * {@link angular.bootstrap} to simplify this process for you.
+     *
+     * @param {!string} name The name of the module to create or retrieve.
+     * @param {!Array.<string>=} requires If specified then new module is being created. If
+     *        unspecified then the module is being retrieved for further configuration.
+     * @param {Function=} configFn Optional configuration function for the module. Same as
+     *        {@link angular.Module#config Module#config()}.
+     * @returns {module} new module with the {@link angular.Module} api.
+     */
+    return function module(name, requires, configFn) {
+      var assertNotHasOwnProperty = function(name, context) {
+        if (name === 'hasOwnProperty') {
+          throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);
+        }
+      };
+
+      assertNotHasOwnProperty(name, 'module');
+      if (requires && modules.hasOwnProperty(name)) {
+        modules[name] = null;
+      }
+      return ensure(modules, name, function() {
+        if (!requires) {
+          throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " +
+             "the module name or forgot to load it. If registering a module ensure that you " +
+             "specify the dependencies as the second argument.", name);
+        }
+
+        /** @type {!Array.<Array.<*>>} */
+        var invokeQueue = [];
+
+        /** @type {!Array.<Function>} */
+        var configBlocks = [];
+
+        /** @type {!Array.<Function>} */
+        var runBlocks = [];
+
+        var config = invokeLater('$injector', 'invoke', 'push', configBlocks);
+
+        /** @type {angular.Module} */
+        var moduleInstance = {
+          // Private state
+          _invokeQueue: invokeQueue,
+          _configBlocks: configBlocks,
+          _runBlocks: runBlocks,
+
+          /**
+           * @ngdoc property
+           * @name angular.Module#requires
+           * @module ng
+           *
+           * @description
+           * Holds the list of modules which the injector will load before the current module is
+           * loaded.
+           */
+          requires: requires,
+
+          /**
+           * @ngdoc property
+           * @name angular.Module#name
+           * @module ng
+           *
+           * @description
+           * Name of the module.
+           */
+          name: name,
+
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#provider
+           * @module ng
+           * @param {string} name service name
+           * @param {Function} providerType Construction function for creating new instance of the
+           *                                service.
+           * @description
+           * See {@link auto.$provide#provider $provide.provider()}.
+           */
+          provider: invokeLaterAndSetModuleName('$provide', 'provider'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#factory
+           * @module ng
+           * @param {string} name service name
+           * @param {Function} providerFunction Function for creating new instance of the service.
+           * @description
+           * See {@link auto.$provide#factory $provide.factory()}.
+           */
+          factory: invokeLaterAndSetModuleName('$provide', 'factory'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#service
+           * @module ng
+           * @param {string} name service name
+           * @param {Function} constructor A constructor function that will be instantiated.
+           * @description
+           * See {@link auto.$provide#service $provide.service()}.
+           */
+          service: invokeLaterAndSetModuleName('$provide', 'service'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#value
+           * @module ng
+           * @param {string} name service name
+           * @param {*} object Service instance object.
+           * @description
+           * See {@link auto.$provide#value $provide.value()}.
+           */
+          value: invokeLater('$provide', 'value'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#constant
+           * @module ng
+           * @param {string} name constant name
+           * @param {*} object Constant value.
+           * @description
+           * Because the constants are fixed, they get applied before other provide methods.
+           * See {@link auto.$provide#constant $provide.constant()}.
+           */
+          constant: invokeLater('$provide', 'constant', 'unshift'),
+
+           /**
+           * @ngdoc method
+           * @name angular.Module#decorator
+           * @module ng
+           * @param {string} The name of the service to decorate.
+           * @param {Function} This function will be invoked when the service needs to be
+           *                                    instantiated and should return the decorated service instance.
+           * @description
+           * See {@link auto.$provide#decorator $provide.decorator()}.
+           */
+          decorator: invokeLaterAndSetModuleName('$provide', 'decorator'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#animation
+           * @module ng
+           * @param {string} name animation name
+           * @param {Function} animationFactory Factory function for creating new instance of an
+           *                                    animation.
+           * @description
+           *
+           * **NOTE**: animations take effect only if the **ngAnimate** module is loaded.
+           *
+           *
+           * Defines an animation hook that can be later used with
+           * {@link $animate $animate} service and directives that use this service.
+           *
+           * ```js
+           * module.animation('.animation-name', function($inject1, $inject2) {
+           *   return {
+           *     eventName : function(element, done) {
+           *       //code to run the animation
+           *       //once complete, then run done()
+           *       return function cancellationFunction(element) {
+           *         //code to cancel the animation
+           *       }
+           *     }
+           *   }
+           * })
+           * ```
+           *
+           * See {@link ng.$animateProvider#register $animateProvider.register()} and
+           * {@link ngAnimate ngAnimate module} for more information.
+           */
+          animation: invokeLaterAndSetModuleName('$animateProvider', 'register'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#filter
+           * @module ng
+           * @param {string} name Filter name - this must be a valid angular expression identifier
+           * @param {Function} filterFactory Factory function for creating new instance of filter.
+           * @description
+           * See {@link ng.$filterProvider#register $filterProvider.register()}.
+           *
+           * <div class="alert alert-warning">
+           * **Note:** Filter names must be valid angular {@link expression} identifiers, such as `uppercase` or `orderBy`.
+           * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace
+           * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores
+           * (`myapp_subsection_filterx`).
+           * </div>
+           */
+          filter: invokeLaterAndSetModuleName('$filterProvider', 'register'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#controller
+           * @module ng
+           * @param {string|Object} name Controller name, or an object map of controllers where the
+           *    keys are the names and the values are the constructors.
+           * @param {Function} constructor Controller constructor function.
+           * @description
+           * See {@link ng.$controllerProvider#register $controllerProvider.register()}.
+           */
+          controller: invokeLaterAndSetModuleName('$controllerProvider', 'register'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#directive
+           * @module ng
+           * @param {string|Object} name Directive name, or an object map of directives where the
+           *    keys are the names and the values are the factories.
+           * @param {Function} directiveFactory Factory function for creating new instance of
+           * directives.
+           * @description
+           * See {@link ng.$compileProvider#directive $compileProvider.directive()}.
+           */
+          directive: invokeLaterAndSetModuleName('$compileProvider', 'directive'),
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#config
+           * @module ng
+           * @param {Function} configFn Execute this function on module load. Useful for service
+           *    configuration.
+           * @description
+           * Use this method to register work which needs to be performed on module loading.
+           * For more about how to configure services, see
+           * {@link providers#provider-recipe Provider Recipe}.
+           */
+          config: config,
+
+          /**
+           * @ngdoc method
+           * @name angular.Module#run
+           * @module ng
+           * @param {Function} initializationFn Execute this function after injector creation.
+           *    Useful for application initialization.
+           * @description
+           * Use this method to register work which should be performed when the injector is done
+           * loading all modules.
+           */
+          run: function(block) {
+            runBlocks.push(block);
+            return this;
+          }
+        };
+
+        if (configFn) {
+          config(configFn);
+        }
+
+        return moduleInstance;
+
+        /**
+         * @param {string} provider
+         * @param {string} method
+         * @param {String=} insertMethod
+         * @returns {angular.Module}
+         */
+        function invokeLater(provider, method, insertMethod, queue) {
+          if (!queue) queue = invokeQueue;
+          return function() {
+            queue[insertMethod || 'push']([provider, method, arguments]);
+            return moduleInstance;
+          };
+        }
+
+        /**
+         * @param {string} provider
+         * @param {string} method
+         * @returns {angular.Module}
+         */
+        function invokeLaterAndSetModuleName(provider, method) {
+          return function(recipeName, factoryFunction) {
+            if (factoryFunction && isFunction(factoryFunction)) factoryFunction.$$moduleName = name;
+            invokeQueue.push([provider, method, arguments]);
+            return moduleInstance;
+          };
+        }
+      });
+    };
+  });
+
+}
+
+/* global: toDebugString: true */
+
+function serializeObject(obj) {
+  var seen = [];
+
+  return JSON.stringify(obj, function(key, val) {
+    val = toJsonReplacer(key, val);
+    if (isObject(val)) {
+
+      if (seen.indexOf(val) >= 0) return '...';
+
+      seen.push(val);
+    }
+    return val;
+  });
+}
+
+function toDebugString(obj) {
+  if (typeof obj === 'function') {
+    return obj.toString().replace(/ \{[\s\S]*$/, '');
+  } else if (isUndefined(obj)) {
+    return 'undefined';
+  } else if (typeof obj !== 'string') {
+    return serializeObject(obj);
+  }
+  return obj;
+}
+
+/* global angularModule: true,
+  version: true,
+
+  $CompileProvider,
+
+  htmlAnchorDirective,
+  inputDirective,
+  inputDirective,
+  formDirective,
+  scriptDirective,
+  selectDirective,
+  styleDirective,
+  optionDirective,
+  ngBindDirective,
+  ngBindHtmlDirective,
+  ngBindTemplateDirective,
+  ngClassDirective,
+  ngClassEvenDirective,
+  ngClassOddDirective,
+  ngCloakDirective,
+  ngControllerDirective,
+  ngFormDirective,
+  ngHideDirective,
+  ngIfDirective,
+  ngIncludeDirective,
+  ngIncludeFillContentDirective,
+  ngInitDirective,
+  ngNonBindableDirective,
+  ngPluralizeDirective,
+  ngRepeatDirective,
+  ngShowDirective,
+  ngStyleDirective,
+  ngSwitchDirective,
+  ngSwitchWhenDirective,
+  ngSwitchDefaultDirective,
+  ngOptionsDirective,
+  ngTranscludeDirective,
+  ngModelDirective,
+  ngListDirective,
+  ngChangeDirective,
+  patternDirective,
+  patternDirective,
+  requiredDirective,
+  requiredDirective,
+  minlengthDirective,
+  minlengthDirective,
+  maxlengthDirective,
+  maxlengthDirective,
+  ngValueDirective,
+  ngModelOptionsDirective,
+  ngAttributeAliasDirectives,
+  ngEventDirectives,
+
+  $AnchorScrollProvider,
+  $AnimateProvider,
+  $CoreAnimateCssProvider,
+  $$CoreAnimateQueueProvider,
+  $$CoreAnimateRunnerProvider,
+  $BrowserProvider,
+  $CacheFactoryProvider,
+  $ControllerProvider,
+  $DocumentProvider,
+  $ExceptionHandlerProvider,
+  $FilterProvider,
+  $$ForceReflowProvider,
+  $InterpolateProvider,
+  $IntervalProvider,
+  $$HashMapProvider,
+  $HttpProvider,
+  $HttpParamSerializerProvider,
+  $HttpParamSerializerJQLikeProvider,
+  $HttpBackendProvider,
+  $xhrFactoryProvider,
+  $LocationProvider,
+  $LogProvider,
+  $ParseProvider,
+  $RootScopeProvider,
+  $QProvider,
+  $$QProvider,
+  $$SanitizeUriProvider,
+  $SceProvider,
+  $SceDelegateProvider,
+  $SnifferProvider,
+  $TemplateCacheProvider,
+  $TemplateRequestProvider,
+  $$TestabilityProvider,
+  $TimeoutProvider,
+  $$RAFProvider,
+  $WindowProvider,
+  $$jqLiteProvider,
+  $$CookieReaderProvider
+*/
+
+
+/**
+ * @ngdoc object
+ * @name angular.version
+ * @module ng
+ * @description
+ * An object that contains information about the current AngularJS version.
+ *
+ * This object has the following properties:
+ *
+ * - `full` – `{string}` – Full version string, such as "0.9.18".
+ * - `major` – `{number}` – Major version number, such as "0".
+ * - `minor` – `{number}` – Minor version number, such as "9".
+ * - `dot` – `{number}` – Dot version number, such as "18".
+ * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
+ */
+var version = {
+  full: '1.4.8',    // all of these placeholder strings will be replaced by grunt's
+  major: 1,    // package task
+  minor: 4,
+  dot: 8,
+  codeName: 'ice-manipulation'
+};
+
+
+function publishExternalAPI(angular) {
+  extend(angular, {
+    'bootstrap': bootstrap,
+    'copy': copy,
+    'extend': extend,
+    'merge': merge,
+    'equals': equals,
+    'element': jqLite,
+    'forEach': forEach,
+    'injector': createInjector,
+    'noop': noop,
+    'bind': bind,
+    'toJson': toJson,
+    'fromJson': fromJson,
+    'identity': identity,
+    'isUndefined': isUndefined,
+    'isDefined': isDefined,
+    'isString': isString,
+    'isFunction': isFunction,
+    'isObject': isObject,
+    'isNumber': isNumber,
+    'isElement': isElement,
+    'isArray': isArray,
+    'version': version,
+    'isDate': isDate,
+    'lowercase': lowercase,
+    'uppercase': uppercase,
+    'callbacks': {counter: 0},
+    'getTestability': getTestability,
+    '$$minErr': minErr,
+    '$$csp': csp,
+    'reloadWithDebugInfo': reloadWithDebugInfo
+  });
+
+  angularModule = setupModuleLoader(window);
+
+  angularModule('ng', ['ngLocale'], ['$provide',
+    function ngModule($provide) {
+      // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it.
+      $provide.provider({
+        $$sanitizeUri: $$SanitizeUriProvider
+      });
+      $provide.provider('$compile', $CompileProvider).
+        directive({
+            a: htmlAnchorDirective,
+            input: inputDirective,
+            textarea: inputDirective,
+            form: formDirective,
+            script: scriptDirective,
+            select: selectDirective,
+            style: styleDirective,
+            option: optionDirective,
+            ngBind: ngBindDirective,
+            ngBindHtml: ngBindHtmlDirective,
+            ngBindTemplate: ngBindTemplateDirective,
+            ngClass: ngClassDirective,
+            ngClassEven: ngClassEvenDirective,
+            ngClassOdd: ngClassOddDirective,
+            ngCloak: ngCloakDirective,
+            ngController: ngControllerDirective,
+            ngForm: ngFormDirective,
+            ngHide: ngHideDirective,
+            ngIf: ngIfDirective,
+            ngInclude: ngIncludeDirective,
+            ngInit: ngInitDirective,
+            ngNonBindable: ngNonBindableDirective,
+            ngPluralize: ngPluralizeDirective,
+            ngRepeat: ngRepeatDirective,
+            ngShow: ngShowDirective,
+            ngStyle: ngStyleDirective,
+            ngSwitch: ngSwitchDirective,
+            ngSwitchWhen: ngSwitchWhenDirective,
+            ngSwitchDefault: ngSwitchDefaultDirective,
+            ngOptions: ngOptionsDirective,
+            ngTransclude: ngTranscludeDirective,
+            ngModel: ngModelDirective,
+            ngList: ngListDirective,
+            ngChange: ngChangeDirective,
+            pattern: patternDirective,
+            ngPattern: patternDirective,
+            required: requiredDirective,
+            ngRequired: requiredDirective,
+            minlength: minlengthDirective,
+            ngMinlength: minlengthDirective,
+            maxlength: maxlengthDirective,
+            ngMaxlength: maxlengthDirective,
+            ngValue: ngValueDirective,
+            ngModelOptions: ngModelOptionsDirective
+        }).
+        directive({
+          ngInclude: ngIncludeFillContentDirective
+        }).
+        directive(ngAttributeAliasDirectives).
+        directive(ngEventDirectives);
+      $provide.provider({
+        $anchorScroll: $AnchorScrollProvider,
+        $animate: $AnimateProvider,
+        $animateCss: $CoreAnimateCssProvider,
+        $$animateQueue: $$CoreAnimateQueueProvider,
+        $$AnimateRunner: $$CoreAnimateRunnerProvider,
+        $browser: $BrowserProvider,
+        $cacheFactory: $CacheFactoryProvider,
+        $controller: $ControllerProvider,
+        $document: $DocumentProvider,
+        $exceptionHandler: $ExceptionHandlerProvider,
+        $filter: $FilterProvider,
+        $$forceReflow: $$ForceReflowProvider,
+        $interpolate: $InterpolateProvider,
+        $interval: $IntervalProvider,
+        $http: $HttpProvider,
+        $httpParamSerializer: $HttpParamSerializerProvider,
+        $httpParamSerializerJQLike: $HttpParamSerializerJQLikeProvider,
+        $httpBackend: $HttpBackendProvider,
+        $xhrFactory: $xhrFactoryProvider,
+        $location: $LocationProvider,
+        $log: $LogProvider,
+        $parse: $ParseProvider,
+        $rootScope: $RootScopeProvider,
+        $q: $QProvider,
+        $$q: $$QProvider,
+        $sce: $SceProvider,
+        $sceDelegate: $SceDelegateProvider,
+        $sniffer: $SnifferProvider,
+        $templateCache: $TemplateCacheProvider,
+        $templateRequest: $TemplateRequestProvider,
+        $$testability: $$TestabilityProvider,
+        $timeout: $TimeoutProvider,
+        $window: $WindowProvider,
+        $$rAF: $$RAFProvider,
+        $$jqLite: $$jqLiteProvider,
+        $$HashMap: $$HashMapProvider,
+        $$cookieReader: $$CookieReaderProvider
+      });
+    }
+  ]);
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *     Any commits to this file should be reviewed with security in mind.  *
+ *   Changes to this file can potentially create security vulnerabilities. *
+ *          An approval from 2 Core members with history of modifying      *
+ *                         this file is required.                          *
+ *                                                                         *
+ *  Does the change somehow allow for arbitrary javascript to be executed? *
+ *    Or allows for someone to change the prototype of built-in objects?   *
+ *     Or gives undesired access to variables likes document or window?    *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* global JQLitePrototype: true,
+  addEventListenerFn: true,
+  removeEventListenerFn: true,
+  BOOLEAN_ATTR: true,
+  ALIASED_ATTR: true,
+*/
+
+//////////////////////////////////
+//JQLite
+//////////////////////////////////
+
+/**
+ * @ngdoc function
+ * @name angular.element
+ * @module ng
+ * @kind function
+ *
+ * @description
+ * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element.
+ *
+ * If jQuery is available, `angular.element` is an alias for the
+ * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element`
+ * delegates to Angular's built-in subset of jQuery, called "jQuery lite" or "jqLite."
+ *
+ * <div class="alert alert-success">jqLite is a tiny, API-compatible subset of jQuery that allows
+ * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most
+ * commonly needed functionality with the goal of having a very small footprint.</div>
+ *
+ * To use `jQuery`, simply ensure it is loaded before the `angular.js` file.
+ *
+ * <div class="alert">**Note:** all element references in Angular are always wrapped with jQuery or
+ * jqLite; they are never raw DOM references.</div>
+ *
+ * ## Angular's jqLite
+ * jqLite provides only the following jQuery methods:
+ *
+ * - [`addClass()`](http://api.jquery.com/addClass/)
+ * - [`after()`](http://api.jquery.com/after/)
+ * - [`append()`](http://api.jquery.com/append/)
+ * - [`attr()`](http://api.jquery.com/attr/) - Does not support functions as parameters
+ * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData
+ * - [`children()`](http://api.jquery.com/children/) - Does not support selectors
+ * - [`clone()`](http://api.jquery.com/clone/)
+ * - [`contents()`](http://api.jquery.com/contents/)
+ * - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyle()`. As a setter, does not convert numbers to strings or append 'px'.
+ * - [`data()`](http://api.jquery.com/data/)
+ * - [`detach()`](http://api.jquery.com/detach/)
+ * - [`empty()`](http://api.jquery.com/empty/)
+ * - [`eq()`](http://api.jquery.com/eq/)
+ * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name
+ * - [`hasClass()`](http://api.jquery.com/hasClass/)
+ * - [`html()`](http://api.jquery.com/html/)
+ * - [`next()`](http://api.jquery.com/next/) - Does not support selectors
+ * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData
+ * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces, selectors or event object as parameter
+ * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors
+ * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors
+ * - [`prepend()`](http://api.jquery.com/prepend/)
+ * - [`prop()`](http://api.jquery.com/prop/)
+ * - [`ready()`](http://api.jquery.com/ready/)
+ * - [`remove()`](http://api.jquery.com/remove/)
+ * - [`removeAttr()`](http://api.jquery.com/removeAttr/)
+ * - [`removeClass()`](http://api.jquery.com/removeClass/)
+ * - [`removeData()`](http://api.jquery.com/removeData/)
+ * - [`replaceWith()`](http://api.jquery.com/replaceWith/)
+ * - [`text()`](http://api.jquery.com/text/)
+ * - [`toggleClass()`](http://api.jquery.com/toggleClass/)
+ * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers.
+ * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces or event object as parameter
+ * - [`val()`](http://api.jquery.com/val/)
+ * - [`wrap()`](http://api.jquery.com/wrap/)
+ *
+ * ## jQuery/jqLite Extras
+ * Angular also provides the following additional methods and events to both jQuery and jqLite:
+ *
+ * ### Events
+ * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event
+ *    on all DOM nodes being removed.  This can be used to clean up any 3rd party bindings to the DOM
+ *    element before it is removed.
+ *
+ * ### Methods
+ * - `controller(name)` - retrieves the controller of the current element or its parent. By default
+ *   retrieves controller associated with the `ngController` directive. If `name` is provided as
+ *   camelCase directive name, then the controller for this directive will be retrieved (e.g.
+ *   `'ngModel'`).
+ * - `injector()` - retrieves the injector of the current element or its parent.
+ * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current
+ *   element or its parent. Requires {@link guide/production#disabling-debug-data Debug Data} to
+ *   be enabled.
+ * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the
+ *   current element. This getter should be used only on elements that contain a directive which starts a new isolate
+ *   scope. Calling `scope()` on this element always returns the original non-isolate scope.
+ *   Requires {@link guide/production#disabling-debug-data Debug Data} to be enabled.
+ * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top
+ *   parent element is reached.
+ *
+ * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery.
+ * @returns {Object} jQuery object.
+ */
+
+JQLite.expando = 'ng339';
+
+var jqCache = JQLite.cache = {},
+    jqId = 1,
+    addEventListenerFn = function(element, type, fn) {
+      element.addEventListener(type, fn, false);
+    },
+    removeEventListenerFn = function(element, type, fn) {
+      element.removeEventListener(type, fn, false);
+    };
+
+/*
+ * !!! This is an undocumented "private" function !!!
+ */
+JQLite._data = function(node) {
+  //jQuery always returns an object on cache miss
+  return this.cache[node[this.expando]] || {};
+};
+
+function jqNextId() { return ++jqId; }
+
+
+var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
+var MOZ_HACK_REGEXP = /^moz([A-Z])/;
+var MOUSE_EVENT_MAP= { mouseleave: "mouseout", mouseenter: "mouseover"};
+var jqLiteMinErr = minErr('jqLite');
+
+/**
+ * Converts snake_case to camelCase.
+ * Also there is special case for Moz prefix starting with upper case letter.
+ * @param name Name to normalize
+ */
+function camelCase(name) {
+  return name.
+    replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
+      return offset ? letter.toUpperCase() : letter;
+    }).
+    replace(MOZ_HACK_REGEXP, 'Moz$1');
+}
+
+var SINGLE_TAG_REGEXP = /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/;
+var HTML_REGEXP = /<|&#?\w+;/;
+var TAG_NAME_REGEXP = /<([\w:-]+)/;
+var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi;
+
+var wrapMap = {
+  'option': [1, '<select multiple="multiple">', '</select>'],
+
+  'thead': [1, '<table>', '</table>'],
+  'col': [2, '<table><colgroup>', '</colgroup></table>'],
+  'tr': [2, '<table><tbody>', '</tbody></table>'],
+  'td': [3, '<table><tbody><tr>', '</tr></tbody></table>'],
+  '_default': [0, "", ""]
+};
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function jqLiteIsTextNode(html) {
+  return !HTML_REGEXP.test(html);
+}
+
+function jqLiteAcceptsData(node) {
+  // The window object can accept data but has no nodeType
+  // Otherwise we are only interested in elements (1) and documents (9)
+  var nodeType = node.nodeType;
+  return nodeType === NODE_TYPE_ELEMENT || !nodeType || nodeType === NODE_TYPE_DOCUMENT;
+}
+
+function jqLiteHasData(node) {
+  for (var key in jqCache[node.ng339]) {
+    return true;
+  }
+  return false;
+}
+
+function jqLiteBuildFragment(html, context) {
+  var tmp, tag, wrap,
+      fragment = context.createDocumentFragment(),
+      nodes = [], i;
+
+  if (jqLiteIsTextNode(html)) {
+    // Convert non-html into a text node
+    nodes.push(context.createTextNode(html));
+  } else {
+    // Convert html into DOM nodes
+    tmp = tmp || fragment.appendChild(context.createElement("div"));
+    tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase();
+    wrap = wrapMap[tag] || wrapMap._default;
+    tmp.innerHTML = wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1></$2>") + wrap[2];
+
+    // Descend through wrappers to the right content
+    i = wrap[0];
+    while (i--) {
+      tmp = tmp.lastChild;
+    }
+
+    nodes = concat(nodes, tmp.childNodes);
+
+    tmp = fragment.firstChild;
+    tmp.textContent = "";
+  }
+
+  // Remove wrapper from fragment
+  fragment.textContent = "";
+  fragment.innerHTML = ""; // Clear inner HTML
+  forEach(nodes, function(node) {
+    fragment.appendChild(node);
+  });
+
+  return fragment;
+}
+
+function jqLiteParseHTML(html, context) {
+  context = context || document;
+  var parsed;
+
+  if ((parsed = SINGLE_TAG_REGEXP.exec(html))) {
+    return [context.createElement(parsed[1])];
+  }
+
+  if ((parsed = jqLiteBuildFragment(html, context))) {
+    return parsed.childNodes;
+  }
+
+  return [];
+}
+
+
+// IE9-11 has no method "contains" in SVG element and in Node.prototype. Bug #10259.
+var jqLiteContains = Node.prototype.contains || function(arg) {
+  // jshint bitwise: false
+  return !!(this.compareDocumentPosition(arg) & 16);
+  // jshint bitwise: true
+};
+
+/////////////////////////////////////////////
+function JQLite(element) {
+  if (element instanceof JQLite) {
+    return element;
+  }
+
+  var argIsString;
+
+  if (isString(element)) {
+    element = trim(element);
+    argIsString = true;
+  }
+  if (!(this instanceof JQLite)) {
+    if (argIsString && element.charAt(0) != '<') {
+      throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element');
+    }
+    return new JQLite(element);
+  }
+
+  if (argIsString) {
+    jqLiteAddNodes(this, jqLiteParseHTML(element));
+  } else {
+    jqLiteAddNodes(this, element);
+  }
+}
+
+function jqLiteClone(element) {
+  return element.cloneNode(true);
+}
+
+function jqLiteDealoc(element, onlyDescendants) {
+  if (!onlyDescendants) jqLiteRemoveData(element);
+
+  if (element.querySelectorAll) {
+    var descendants = element.querySelectorAll('*');
+    for (var i = 0, l = descendants.length; i < l; i++) {
+      jqLiteRemoveData(descendants[i]);
+    }
+  }
+}
+
+function jqLiteOff(element, type, fn, unsupported) {
+  if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument');
+
+  var expandoStore = jqLiteExpandoStore(element);
+  var events = expandoStore && expandoStore.events;
+  var handle = expandoStore && expandoStore.handle;
+
+  if (!handle) return; //no listeners registered
+
+  if (!type) {
+    for (type in events) {
+      if (type !== '$destroy') {
+        removeEventListenerFn(element, type, handle);
+      }
+      delete events[type];
+    }
+  } else {
+
+    var removeHandler = function(type) {
+      var listenerFns = events[type];
+      if (isDefined(fn)) {
+        arrayRemove(listenerFns || [], fn);
+      }
+      if (!(isDefined(fn) && listenerFns && listenerFns.length > 0)) {
+        removeEventListenerFn(element, type, handle);
+        delete events[type];
+      }
+    };
+
+    forEach(type.split(' '), function(type) {
+      removeHandler(type);
+      if (MOUSE_EVENT_MAP[type]) {
+        removeHandler(MOUSE_EVENT_MAP[type]);
+      }
+    });
+  }
+}
+
+function jqLiteRemoveData(element, name) {
+  var expandoId = element.ng339;
+  var expandoStore = expandoId && jqCache[expandoId];
+
+  if (expandoStore) {
+    if (name) {
+      delete expandoStore.data[name];
+      return;
+    }
+
+    if (expandoStore.handle) {
+      if (expandoStore.events.$destroy) {
+        expandoStore.handle({}, '$destroy');
+      }
+      jqLiteOff(element);
+    }
+    delete jqCache[expandoId];
+    element.ng339 = undefined; // don't delete DOM expandos. IE and Chrome don't like it
+  }
+}
+
+
+function jqLiteExpandoStore(element, createIfNecessary) {
+  var expandoId = element.ng339,
+      expandoStore = expandoId && jqCache[expandoId];
+
+  if (createIfNecessary && !expandoStore) {
+    element.ng339 = expandoId = jqNextId();
+    expandoStore = jqCache[expandoId] = {events: {}, data: {}, handle: undefined};
+  }
+
+  return expandoStore;
+}
+
+
+function jqLiteData(element, key, value) {
+  if (jqLiteAcceptsData(element)) {
+
+    var isSimpleSetter = isDefined(value);
+    var isSimpleGetter = !isSimpleSetter && key && !isObject(key);
+    var massGetter = !key;
+    var expandoStore = jqLiteExpandoStore(element, !isSimpleGetter);
+    var data = expandoStore && expandoStore.data;
+
+    if (isSimpleSetter) { // data('key', value)
+      data[key] = value;
+    } else {
+      if (massGetter) {  // data()
+        return data;
+      } else {
+        if (isSimpleGetter) { // data('key')
+          // don't force creation of expandoStore if it doesn't exist yet
+          return data && data[key];
+        } else { // mass-setter: data({key1: val1, key2: val2})
+          extend(data, key);
+        }
+      }
+    }
+  }
+}
+
+function jqLiteHasClass(element, selector) {
+  if (!element.getAttribute) return false;
+  return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " ").
+      indexOf(" " + selector + " ") > -1);
+}
+
+function jqLiteRemoveClass(element, cssClasses) {
+  if (cssClasses && element.setAttribute) {
+    forEach(cssClasses.split(' '), function(cssClass) {
+      element.setAttribute('class', trim(
+          (" " + (element.getAttribute('class') || '') + " ")
+          .replace(/[\n\t]/g, " ")
+          .replace(" " + trim(cssClass) + " ", " "))
+      );
+    });
+  }
+}
+
+function jqLiteAddClass(element, cssClasses) {
+  if (cssClasses && element.setAttribute) {
+    var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ')
+                            .replace(/[\n\t]/g, " ");
+
+    forEach(cssClasses.split(' '), function(cssClass) {
+      cssClass = trim(cssClass);
+      if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) {
+        existingClasses += cssClass + ' ';
+      }
+    });
+
+    element.setAttribute('class', trim(existingClasses));
+  }
+}
+
+
+function jqLiteAddNodes(root, elements) {
+  // THIS CODE IS VERY HOT. Don't make changes without benchmarking.
+
+  if (elements) {
+
+    // if a Node (the most common case)
+    if (elements.nodeType) {
+      root[root.length++] = elements;
+    } else {
+      var length = elements.length;
+
+      // if an Array or NodeList and not a Window
+      if (typeof length === 'number' && elements.window !== elements) {
+        if (length) {
+          for (var i = 0; i < length; i++) {
+            root[root.length++] = elements[i];
+          }
+        }
+      } else {
+        root[root.length++] = elements;
+      }
+    }
+  }
+}
+
+
+function jqLiteController(element, name) {
+  return jqLiteInheritedData(element, '$' + (name || 'ngController') + 'Controller');
+}
+
+function jqLiteInheritedData(element, name, value) {
+  // if element is the document object work with the html element instead
+  // this makes $(document).scope() possible
+  if (element.nodeType == NODE_TYPE_DOCUMENT) {
+    element = element.documentElement;
+  }
+  var names = isArray(name) ? name : [name];
+
+  while (element) {
+    for (var i = 0, ii = names.length; i < ii; i++) {
+      if (isDefined(value = jqLite.data(element, names[i]))) return value;
+    }
+
+    // If dealing with a document fragment node with a host element, and no parent, use the host
+    // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM
+    // to lookup parent controllers.
+    element = element.parentNode || (element.nodeType === NODE_TYPE_DOCUMENT_FRAGMENT && element.host);
+  }
+}
+
+function jqLiteEmpty(element) {
+  jqLiteDealoc(element, true);
+  while (element.firstChild) {
+    element.removeChild(element.firstChild);
+  }
+}
+
+function jqLiteRemove(element, keepData) {
+  if (!keepData) jqLiteDealoc(element);
+  var parent = element.parentNode;
+  if (parent) parent.removeChild(element);
+}
+
+
+function jqLiteDocumentLoaded(action, win) {
+  win = win || window;
+  if (win.document.readyState === 'complete') {
+    // Force the action to be run async for consistent behaviour
+    // from the action's point of view
+    // i.e. it will definitely not be in a $apply
+    win.setTimeout(action);
+  } else {
+    // No need to unbind this handler as load is only ever called once
+    jqLite(win).on('load', action);
+  }
+}
+
+//////////////////////////////////////////
+// Functions which are declared directly.
+//////////////////////////////////////////
+var JQLitePrototype = JQLite.prototype = {
+  ready: function(fn) {
+    var fired = false;
+
+    function trigger() {
+      if (fired) return;
+      fired = true;
+      fn();
+    }
+
+    // check if document is already loaded
+    if (document.readyState === 'complete') {
+      setTimeout(trigger);
+    } else {
+      this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9
+      // we can not use jqLite since we are not done loading and jQuery could be loaded later.
+      // jshint -W064
+      JQLite(window).on('load', trigger); // fallback to window.onload for others
+      // jshint +W064
+    }
+  },
+  toString: function() {
+    var value = [];
+    forEach(this, function(e) { value.push('' + e);});
+    return '[' + value.join(', ') + ']';
+  },
+
+  eq: function(index) {
+      return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]);
+  },
+
+  length: 0,
+  push: push,
+  sort: [].sort,
+  splice: [].splice
+};
+
+//////////////////////////////////////////
+// Functions iterating getter/setters.
+// these functions return self on setter and
+// value on get.
+//////////////////////////////////////////
+var BOOLEAN_ATTR = {};
+forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) {
+  BOOLEAN_ATTR[lowercase(value)] = value;
+});
+var BOOLEAN_ELEMENTS = {};
+forEach('input,select,option,textarea,button,form,details'.split(','), function(value) {
+  BOOLEAN_ELEMENTS[value] = true;
+});
+var ALIASED_ATTR = {
+  'ngMinlength': 'minlength',
+  'ngMaxlength': 'maxlength',
+  'ngMin': 'min',
+  'ngMax': 'max',
+  'ngPattern': 'pattern'
+};
+
+function getBooleanAttrName(element, name) {
+  // check dom last since we will most likely fail on name
+  var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()];
+
+  // booleanAttr is here twice to minimize DOM access
+  return booleanAttr && BOOLEAN_ELEMENTS[nodeName_(element)] && booleanAttr;
+}
+
+function getAliasedAttrName(name) {
+  return ALIASED_ATTR[name];
+}
+
+forEach({
+  data: jqLiteData,
+  removeData: jqLiteRemoveData,
+  hasData: jqLiteHasData
+}, function(fn, name) {
+  JQLite[name] = fn;
+});
+
+forEach({
+  data: jqLiteData,
+  inheritedData: jqLiteInheritedData,
+
+  scope: function(element) {
+    // Can't use jqLiteData here directly so we stay compatible with jQuery!
+    return jqLite.data(element, '$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']);
+  },
+
+  isolateScope: function(element) {
+    // Can't use jqLiteData here directly so we stay compatible with jQuery!
+    return jqLite.data(element, '$isolateScope') || jqLite.data(element, '$isolateScopeNoTemplate');
+  },
+
+  controller: jqLiteController,
+
+  injector: function(element) {
+    return jqLiteInheritedData(element, '$injector');
+  },
+
+  removeAttr: function(element, name) {
+    element.removeAttribute(name);
+  },
+
+  hasClass: jqLiteHasClass,
+
+  css: function(element, name, value) {
+    name = camelCase(name);
+
+    if (isDefined(value)) {
+      element.style[name] = value;
+    } else {
+      return element.style[name];
+    }
+  },
+
+  attr: function(element, name, value) {
+    var nodeType = element.nodeType;
+    if (nodeType === NODE_TYPE_TEXT || nodeType === NODE_TYPE_ATTRIBUTE || nodeType === NODE_TYPE_COMMENT) {
+      return;
+    }
+    var lowercasedName = lowercase(name);
+    if (BOOLEAN_ATTR[lowercasedName]) {
+      if (isDefined(value)) {
+        if (!!value) {
+          element[name] = true;
+          element.setAttribute(name, lowercasedName);
+        } else {
+          element[name] = false;
+          element.removeAttribute(lowercasedName);
+        }
+      } else {
+        return (element[name] ||
+                 (element.attributes.getNamedItem(name) || noop).specified)
+               ? lowercasedName
+               : undefined;
+      }
+    } else if (isDefined(value)) {
+      element.setAttribute(name, value);
+    } else if (element.getAttribute) {
+      // the extra argument "2" is to get the right thing for a.href in IE, see jQuery code
+      // some elements (e.g. Document) don't have get attribute, so return undefined
+      var ret = element.getAttribute(name, 2);
+      // normalize non-existing attributes to undefined (as jQuery)
+      return ret === null ? undefined : ret;
+    }
+  },
+
+  prop: function(element, name, value) {
+    if (isDefined(value)) {
+      element[name] = value;
+    } else {
+      return element[name];
+    }
+  },
+
+  text: (function() {
+    getText.$dv = '';
+    return getText;
+
+    function getText(element, value) {
+      if (isUndefined(value)) {
+        var nodeType = element.nodeType;
+        return (nodeType === NODE_TYPE_ELEMENT || nodeType === NODE_TYPE_TEXT) ? element.textContent : '';
+      }
+      element.textContent = value;
+    }
+  })(),
+
+  val: function(element, value) {
+    if (isUndefined(value)) {
+      if (element.multiple && nodeName_(element) === 'select') {
+        var result = [];
+        forEach(element.options, function(option) {
+          if (option.selected) {
+            result.push(option.value || option.text);
+          }
+        });
+        return result.length === 0 ? null : result;
+      }
+      return element.value;
+    }
+    element.value = value;
+  },
+
+  html: function(element, value) {
+    if (isUndefined(value)) {
+      return element.innerHTML;
+    }
+    jqLiteDealoc(element, true);
+    element.innerHTML = value;
+  },
+
+  empty: jqLiteEmpty
+}, function(fn, name) {
+  /**
+   * Properties: writes return selection, reads return first value
+   */
+  JQLite.prototype[name] = function(arg1, arg2) {
+    var i, key;
+    var nodeCount = this.length;
+
+    // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it
+    // in a way that survives minification.
+    // jqLiteEmpty takes no arguments but is a setter.
+    if (fn !== jqLiteEmpty &&
+        (isUndefined((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2))) {
+      if (isObject(arg1)) {
+
+        // we are a write, but the object properties are the key/values
+        for (i = 0; i < nodeCount; i++) {
+          if (fn === jqLiteData) {
+            // data() takes the whole object in jQuery
+            fn(this[i], arg1);
+          } else {
+            for (key in arg1) {
+              fn(this[i], key, arg1[key]);
+            }
+          }
+        }
+        // return self for chaining
+        return this;
+      } else {
+        // we are a read, so read the first child.
+        // TODO: do we still need this?
+        var value = fn.$dv;
+        // Only if we have $dv do we iterate over all, otherwise it is just the first element.
+        var jj = (isUndefined(value)) ? Math.min(nodeCount, 1) : nodeCount;
+        for (var j = 0; j < jj; j++) {
+          var nodeValue = fn(this[j], arg1, arg2);
+          value = value ? value + nodeValue : nodeValue;
+        }
+        return value;
+      }
+    } else {
+      // we are a write, so apply to all children
+      for (i = 0; i < nodeCount; i++) {
+        fn(this[i], arg1, arg2);
+      }
+      // return self for chaining
+      return this;
+    }
+  };
+});
+
+function createEventHandler(element, events) {
+  var eventHandler = function(event, type) {
+    // jQuery specific api
+    event.isDefaultPrevented = function() {
+      return event.defaultPrevented;
+    };
+
+    var eventFns = events[type || event.type];
+    var eventFnsLength = eventFns ? eventFns.length : 0;
+
+    if (!eventFnsLength) return;
+
+    if (isUndefined(event.immediatePropagationStopped)) {
+      var originalStopImmediatePropagation = event.stopImmediatePropagation;
+      event.stopImmediatePropagation = function() {
+        event.immediatePropagationStopped = true;
+
+        if (event.stopPropagation) {
+          event.stopPropagation();
+        }
+
+        if (originalStopImmediatePropagation) {
+          originalStopImmediatePropagation.call(event);
+        }
+      };
+    }
+
+    event.isImmediatePropagationStopped = function() {
+      return event.immediatePropagationStopped === true;
+    };
+
+    // Some events have special handlers that wrap the real handler
+    var handlerWrapper = eventFns.specialHandlerWrapper || defaultHandlerWrapper;
+
+    // Copy event handlers in case event handlers array is modified during execution.
+    if ((eventFnsLength > 1)) {
+      eventFns = shallowCopy(eventFns);
+    }
+
+    for (var i = 0; i < eventFnsLength; i++) {
+      if (!event.isImmediatePropagationStopped()) {
+        handlerWrapper(element, event, eventFns[i]);
+      }
+    }
+  };
+
+  // TODO: this is a hack for angularMocks/clearDataCache that makes it possible to deregister all
+  //       events on `element`
+  eventHandler.elem = element;
+  return eventHandler;
+}
+
+function defaultHandlerWrapper(element, event, handler) {
+  handler.call(element, event);
+}
+
+function specialMouseHandlerWrapper(target, event, handler) {
+  // Refer to jQuery's implementation of mouseenter & mouseleave
+  // Read about mouseenter and mouseleave:
+  // http://www.quirksmode.org/js/events_mouse.html#link8
+  var related = event.relatedTarget;
+  // For mousenter/leave call the handler if related is outside the target.
+  // NB: No relatedTarget if the mouse left/entered the browser window
+  if (!related || (related !== target && !jqLiteContains.call(target, related))) {
+    handler.call(target, event);
+  }
+}
+
+//////////////////////////////////////////
+// Functions iterating traversal.
+// These functions chain results into a single
+// selector.
+//////////////////////////////////////////
+forEach({
+  removeData: jqLiteRemoveData,
+
+  on: function jqLiteOn(element, type, fn, unsupported) {
+    if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters');
+
+    // Do not add event handlers to non-elements because they will not be cleaned up.
+    if (!jqLiteAcceptsData(element)) {
+      return;
+    }
+
+    var expandoStore = jqLiteExpandoStore(element, true);
+    var events = expandoStore.events;
+    var handle = expandoStore.handle;
+
+    if (!handle) {
+      handle = expandoStore.handle = createEventHandler(element, events);
+    }
+
+    // http://jsperf.com/string-indexof-vs-split
+    var types = type.indexOf(' ') >= 0 ? type.split(' ') : [type];
+    var i = types.length;
+
+    var addHandler = function(type, specialHandlerWrapper, noEventListener) {
+      var eventFns = events[type];
+
+      if (!eventFns) {
+        eventFns = events[type] = [];
+        eventFns.specialHandlerWrapper = specialHandlerWrapper;
+        if (type !== '$destroy' && !noEventListener) {
+          addEventListenerFn(element, type, handle);
+        }
+      }
+
+      eventFns.push(fn);
+    };
+
+    while (i--) {
+      type = types[i];
+      if (MOUSE_EVENT_MAP[type]) {
+        addHandler(MOUSE_EVENT_MAP[type], specialMouseHandlerWrapper);
+        addHandler(type, undefined, true);
+      } else {
+        addHandler(type);
+      }
+    }
+  },
+
+  off: jqLiteOff,
+
+  one: function(element, type, fn) {
+    element = jqLite(element);
+
+    //add the listener twice so that when it is called
+    //you can remove the original function and still be
+    //able to call element.off(ev, fn) normally
+    element.on(type, function onFn() {
+      element.off(type, fn);
+      element.off(type, onFn);
+    });
+    element.on(type, fn);
+  },
+
+  replaceWith: function(element, replaceNode) {
+    var index, parent = element.parentNode;
+    jqLiteDealoc(element);
+    forEach(new JQLite(replaceNode), function(node) {
+      if (index) {
+        parent.insertBefore(node, index.nextSibling);
+      } else {
+        parent.replaceChild(node, element);
+      }
+      index = node;
+    });
+  },
+
+  children: function(element) {
+    var children = [];
+    forEach(element.childNodes, function(element) {
+      if (element.nodeType === NODE_TYPE_ELEMENT) {
+        children.push(element);
+      }
+    });
+    return children;
+  },
+
+  contents: function(element) {
+    return element.contentDocument || element.childNodes || [];
+  },
+
+  append: function(element, node) {
+    var nodeType = element.nodeType;
+    if (nodeType !== NODE_TYPE_ELEMENT && nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT) return;
+
+    node = new JQLite(node);
+
+    for (var i = 0, ii = node.length; i < ii; i++) {
+      var child = node[i];
+      element.appendChild(child);
+    }
+  },
+
+  prepend: function(element, node) {
+    if (element.nodeType === NODE_TYPE_ELEMENT) {
+      var index = element.firstChild;
+      forEach(new JQLite(node), function(child) {
+        element.insertBefore(child, index);
+      });
+    }
+  },
+
+  wrap: function(element, wrapNode) {
+    wrapNode = jqLite(wrapNode).eq(0).clone()[0];
+    var parent = element.parentNode;
+    if (parent) {
+      parent.replaceChild(wrapNode, element);
+    }
+    wrapNode.appendChild(element);
+  },
+
+  remove: jqLiteRemove,
+
+  detach: function(element) {
+    jqLiteRemove(element, true);
+  },
+
+  after: function(element, newElement) {
+    var index = element, parent = element.parentNode;
+    newElement = new JQLite(newElement);
+
+    for (var i = 0, ii = newElement.length; i < ii; i++) {
+      var node = newElement[i];
+      parent.insertBefore(node, index.nextSibling);
+      index = node;
+    }
+  },
+
+  addClass: jqLiteAddClass,
+  removeClass: jqLiteRemoveClass,
+
+  toggleClass: function(element, selector, condition) {
+    if (selector) {
+      forEach(selector.split(' '), function(className) {
+        var classCondition = condition;
+        if (isUndefined(classCondition)) {
+          classCondition = !jqLiteHasClass(element, className);
+        }
+        (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className);
+      });
+    }
+  },
+
+  parent: function(element) {
+    var parent = element.parentNode;
+    return parent && parent.nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT ? parent : null;
+  },
+
+  next: function(element) {
+    return element.nextElementSibling;
+  },
+
+  find: function(element, selector) {
+    if (element.getElementsByTagName) {
+      return element.getElementsByTagName(selector);
+    } else {
+      return [];
+    }
+  },
+
+  clone: jqLiteClone,
+
+  triggerHandler: function(element, event, extraParameters) {
+
+    var dummyEvent, eventFnsCopy, handlerArgs;
+    var eventName = event.type || event;
+    var expandoStore = jqLiteExpandoStore(element);
+    var events = expandoStore && expandoStore.events;
+    var eventFns = events && events[eventName];
+
+    if (eventFns) {
+      // Create a dummy event to pass to the handlers
+      dummyEvent = {
+        preventDefault: function() { this.defaultPrevented = true; },
+        isDefaultPrevented: function() { return this.defaultPrevented === true; },
+        stopImmediatePropagation: function() { this.immediatePropagationStopped = true; },
+        isImmediatePropagationStopped: function() { return this.immediatePropagationStopped === true; },
+        stopPropagation: noop,
+        type: eventName,
+        target: element
+      };
+
+      // If a custom event was provided then extend our dummy event with it
+      if (event.type) {
+        dummyEvent = extend(dummyEvent, event);
+      }
+
+      // Copy event handlers in case event handlers array is modified during execution.
+      eventFnsCopy = shallowCopy(eventFns);
+      handlerArgs = extraParameters ? [dummyEvent].concat(extraParameters) : [dummyEvent];
+
+      forEach(eventFnsCopy, function(fn) {
+        if (!dummyEvent.isImmediatePropagationStopped()) {
+          fn.apply(element, handlerArgs);
+        }
+      });
+    }
+  }
+}, function(fn, name) {
+  /**
+   * chaining functions
+   */
+  JQLite.prototype[name] = function(arg1, arg2, arg3) {
+    var value;
+
+    for (var i = 0, ii = this.length; i < ii; i++) {
+      if (isUndefined(value)) {
+        value = fn(this[i], arg1, arg2, arg3);
+        if (isDefined(value)) {
+          // any function which returns a value needs to be wrapped
+          value = jqLite(value);
+        }
+      } else {
+        jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3));
+      }
+    }
+    return isDefined(value) ? value : this;
+  };
+
+  // bind legacy bind/unbind to on/off
+  JQLite.prototype.bind = JQLite.prototype.on;
+  JQLite.prototype.unbind = JQLite.prototype.off;
+});
+
+
+// Provider for private $$jqLite service
+function $$jqLiteProvider() {
+  this.$get = function $$jqLite() {
+    return extend(JQLite, {
+      hasClass: function(node, classes) {
+        if (node.attr) node = node[0];
+        return jqLiteHasClass(node, classes);
+      },
+      addClass: function(node, classes) {
+        if (node.attr) node = node[0];
+        return jqLiteAddClass(node, classes);
+      },
+      removeClass: function(node, classes) {
+        if (node.attr) node = node[0];
+        return jqLiteRemoveClass(node, classes);
+      }
+    });
+  };
+}
+
+/**
+ * Computes a hash of an 'obj'.
+ * Hash of a:
+ *  string is string
+ *  number is number as string
+ *  object is either result of calling $$hashKey function on the object or uniquely generated id,
+ *         that is also assigned to the $$hashKey property of the object.
+ *
+ * @param obj
+ * @returns {string} hash string such that the same input will have the same hash string.
+ *         The resulting string key is in 'type:hashKey' format.
+ */
+function hashKey(obj, nextUidFn) {
+  var key = obj && obj.$$hashKey;
+
+  if (key) {
+    if (typeof key === 'function') {
+      key = obj.$$hashKey();
+    }
+    return key;
+  }
+
+  var objType = typeof obj;
+  if (objType == 'function' || (objType == 'object' && obj !== null)) {
+    key = obj.$$hashKey = objType + ':' + (nextUidFn || nextUid)();
+  } else {
+    key = objType + ':' + obj;
+  }
+
+  return key;
+}
+
+/**
+ * HashMap which can use objects as keys
+ */
+function HashMap(array, isolatedUid) {
+  if (isolatedUid) {
+    var uid = 0;
+    this.nextUid = function() {
+      return ++uid;
+    };
+  }
+  forEach(array, this.put, this);
+}
+HashMap.prototype = {
+  /**
+   * Store key value pair
+   * @param key key to store can be any type
+   * @param value value to store can be any type
+   */
+  put: function(key, value) {
+    this[hashKey(key, this.nextUid)] = value;
+  },
+
+  /**
+   * @param key
+   * @returns {Object} the value for the key
+   */
+  get: function(key) {
+    return this[hashKey(key, this.nextUid)];
+  },
+
+  /**
+   * Remove the key/value pair
+   * @param key
+   */
+  remove: function(key) {
+    var value = this[key = hashKey(key, this.nextUid)];
+    delete this[key];
+    return value;
+  }
+};
+
+var $$HashMapProvider = [function() {
+  this.$get = [function() {
+    return HashMap;
+  }];
+}];
+
+/**
+ * @ngdoc function
+ * @module ng
+ * @name angular.injector
+ * @kind function
+ *
+ * @description
+ * Creates an injector object that can be used for retrieving services as well as for
+ * dependency injection (see {@link guide/di dependency injection}).
+ *
+ * @param {Array.<string|Function>} modules A list of module functions or their aliases. See
+ *     {@link angular.module}. The `ng` module must be explicitly added.
+ * @param {boolean=} [strictDi=false] Whether the injector should be in strict mode, which
+ *     disallows argument name annotation inference.
+ * @returns {injector} Injector object. See {@link auto.$injector $injector}.
+ *
+ * @example
+ * Typical usage
+ * ```js
+ *   // create an injector
+ *   var $injector = angular.injector(['ng']);
+ *
+ *   // use the injector to kick off your application
+ *   // use the type inference to auto inject arguments, or use implicit injection
+ *   $injector.invoke(function($rootScope, $compile, $document) {
+ *     $compile($document)($rootScope);
+ *     $rootScope.$digest();
+ *   });
+ * ```
+ *
+ * Sometimes you want to get access to the injector of a currently running Angular app
+ * from outside Angular. Perhaps, you want to inject and compile some markup after the
+ * application has been bootstrapped. You can do this using the extra `injector()` added
+ * to JQuery/jqLite elements. See {@link angular.element}.
+ *
+ * *This is fairly rare but could be the case if a third party library is injecting the
+ * markup.*
+ *
+ * In the following example a new block of HTML containing a `ng-controller`
+ * directive is added to the end of the document body by JQuery. We then compile and link
+ * it into the current AngularJS scope.
+ *
+ * ```js
+ * var $div = $('<div ng-controller="MyCtrl">{{content.label}}</div>');
+ * $(document.body).append($div);
+ *
+ * angular.element(document).injector().invoke(function($compile) {
+ *   var scope = angular.element($div).scope();
+ *   $compile($div)(scope);
+ * });
+ * ```
+ */
+
+
+/**
+ * @ngdoc module
+ * @name auto
+ * @description
+ *
+ * Implicit module which gets automatically added to each {@link auto.$injector $injector}.
+ */
+
+var FN_ARGS = /^[^\(]*\(\s*([^\)]*)\)/m;
+var FN_ARG_SPLIT = /,/;
+var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/;
+var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
+var $injectorMinErr = minErr('$injector');
+
+function anonFn(fn) {
+  // For anonymous functions, showing at the very least the function signature can help in
+  // debugging.
+  var fnText = fn.toString().replace(STRIP_COMMENTS, ''),
+      args = fnText.match(FN_ARGS);
+  if (args) {
+    return 'function(' + (args[1] || '').replace(/[\s\r\n]+/, ' ') + ')';
+  }
+  return 'fn';
+}
+
+function annotate(fn, strictDi, name) {
+  var $inject,
+      fnText,
+      argDecl,
+      last;
+
+  if (typeof fn === 'function') {
+    if (!($inject = fn.$inject)) {
+      $inject = [];
+      if (fn.length) {
+        if (strictDi) {
+          if (!isString(name) || !name) {
+            name = fn.name || anonFn(fn);
+          }
+          throw $injectorMinErr('strictdi',
+            '{0} is not using explicit annotation and cannot be invoked in strict mode', name);
+        }
+        fnText = fn.toString().replace(STRIP_COMMENTS, '');
+        argDecl = fnText.match(FN_ARGS);
+        forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) {
+          arg.replace(FN_ARG, function(all, underscore, name) {
+            $inject.push(name);
+          });
+        });
+      }
+      fn.$inject = $inject;
+    }
+  } else if (isArray(fn)) {
+    last = fn.length - 1;
+    assertArgFn(fn[last], 'fn');
+    $inject = fn.slice(0, last);
+  } else {
+    assertArgFn(fn, 'fn', true);
+  }
+  return $inject;
+}
+
+///////////////////////////////////////
+
+/**
+ * @ngdoc service
+ * @name $injector
+ *
+ * @description
+ *
+ * `$injector` is used to retrieve object instances as defined by
+ * {@link auto.$provide provider}, instantiate types, invoke methods,
+ * and load modules.
+ *
+ * The following always holds true:
+ *
+ * ```js
+ *   var $injector = angular.injector();
+ *   expect($injector.get('$injector')).toBe($injector);
+ *   expect($injector.invoke(function($injector) {
+ *     return $injector;
+ *   })).toBe($injector);
+ * ```
+ *
+ * # Injection Function Annotation
+ *
+ * JavaScript does not have annotations, and annotations are needed for dependency injection. The
+ * following are all valid ways of annotating function with injection arguments and are equivalent.
+ *
+ * ```js
+ *   // inferred (only works if code not minified/obfuscated)
+ *   $injector.invoke(function(serviceA){});
+ *
+ *   // annotated
+ *   function explicit(serviceA) {};
+ *   explicit.$inject = ['serviceA'];
+ *   $injector.invoke(explicit);
+ *
+ *   // inline
+ *   $injector.invoke(['serviceA', function(serviceA){}]);
+ * ```
+ *
+ * ## Inference
+ *
+ * In JavaScript calling `toString()` on a function returns the function definition. The definition
+ * can then be parsed and the function arguments can be extracted. This method of discovering
+ * annotations is disallowed when the injector is in strict mode.
+ * *NOTE:* This does not work with minification, and obfuscation tools since these tools change the
+ * argument names.
+ *
+ * ## `$inject` Annotation
+ * By adding an `$inject` property onto a function the injection parameters can be specified.
+ *
+ * ## Inline
+ * As an array of injection names, where the last item in the array is the function to call.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#get
+ *
+ * @description
+ * Return an instance of the service.
+ *
+ * @param {string} name The name of the instance to retrieve.
+ * @param {string=} caller An optional string to provide the origin of the function call for error messages.
+ * @return {*} The instance.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#invoke
+ *
+ * @description
+ * Invoke the method and supply the method arguments from the `$injector`.
+ *
+ * @param {Function|Array.<string|Function>} fn The injectable function to invoke. Function parameters are
+ *   injected according to the {@link guide/di $inject Annotation} rules.
+ * @param {Object=} self The `this` for the invoked method.
+ * @param {Object=} locals Optional object. If preset then any argument names are read from this
+ *                         object first, before the `$injector` is consulted.
+ * @returns {*} the value returned by the invoked `fn` function.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#has
+ *
+ * @description
+ * Allows the user to query if the particular service exists.
+ *
+ * @param {string} name Name of the service to query.
+ * @returns {boolean} `true` if injector has given service.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#instantiate
+ * @description
+ * Create a new instance of JS type. The method takes a constructor function, invokes the new
+ * operator, and supplies all of the arguments to the constructor function as specified by the
+ * constructor annotation.
+ *
+ * @param {Function} Type Annotated constructor function.
+ * @param {Object=} locals Optional object. If preset then any argument names are read from this
+ * object first, before the `$injector` is consulted.
+ * @returns {Object} new instance of `Type`.
+ */
+
+/**
+ * @ngdoc method
+ * @name $injector#annotate
+ *
+ * @description
+ * Returns an array of service names which the function is requesting for injection. This API is
+ * used by the injector to determine which services need to be injected into the function when the
+ * function is invoked. There are three ways in which the function can be annotated with the needed
+ * dependencies.
+ *
+ * # Argument names
+ *
+ * The simplest form is to extract the dependencies from the arguments of the function. This is done
+ * by converting the function into a string using `toString()` method and extracting the argument
+ * names.
+ * ```js
+ *   // Given
+ *   function MyController($scope, $route) {
+ *     // ...
+ *   }
+ *
+ *   // Then
+ *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
+ * ```
+ *
+ * You can disallow this method by using strict injection mode.
+ *
+ * This method does not work with code minification / obfuscation. For this reason the following
+ * annotation strategies are supported.
+ *
+ * # The `$inject` property
+ *
+ * If a function has an `$inject` property and its value is an array of strings, then the strings
+ * represent names of services to be injected into the function.
+ * ```js
+ *   // Given
+ *   var MyController = function(obfuscatedScope, obfuscatedRoute) {
+ *     // ...
+ *   }
+ *   // Define function dependencies
+ *   MyController['$inject'] = ['$scope', '$route'];
+ *
+ *   // Then
+ *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
+ * ```
+ *
+ * # The array notation
+ *
+ * It is often desirable to inline Injected functions and that's when setting the `$inject` property
+ * is very inconvenient. In these situations using the array notation to specify the dependencies in
+ * a way that survives minification is a better choice:
+ *
+ * ```js
+ *   // We wish to write this (not minification / obfuscation safe)
+ *   injector.invoke(function($compile, $rootScope) {
+ *     // ...
+ *   });
+ *
+ *   // We are forced to write break inlining
+ *   var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) {
+ *     // ...
+ *   };
+ *   tmpFn.$inject = ['$compile', '$rootScope'];
+ *   injector.invoke(tmpFn);
+ *
+ *   // To better support inline function the inline annotation is supported
+ *   injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) {
+ *     // ...
+ *   }]);
+ *
+ *   // Therefore
+ *   expect(injector.annotate(
+ *      ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}])
+ *    ).toEqual(['$compile', '$rootScope']);
+ * ```
+ *
+ * @param {Function|Array.<string|Function>} fn Function for which dependent service names need to
+ * be retrieved as described above.
+ *
+ * @param {boolean=} [strictDi=false] Disallow argument name annotation inference.
+ *
+ * @returns {Array.<string>} The names of the services which the function requires.
+ */
+
+
+
+
+/**
+ * @ngdoc service
+ * @name $provide
+ *
+ * @description
+ *
+ * The {@link auto.$provide $provide} service has a number of methods for registering components
+ * with the {@link auto.$injector $injector}. Many of these functions are also exposed on
+ * {@link angular.Module}.
+ *
+ * An Angular **service** is a singleton object created by a **service factory**.  These **service
+ * factories** are functions which, in turn, are created by a **service provider**.
+ * The **service providers** are constructor functions. When instantiated they must contain a
+ * property called `$get`, which holds the **service factory** function.
+ *
+ * When you request a service, the {@link auto.$injector $injector} is responsible for finding the
+ * correct **service provider**, instantiating it and then calling its `$get` **service factory**
+ * function to get the instance of the **service**.
+ *
+ * Often services have no configuration options and there is no need to add methods to the service
+ * provider.  The provider will be no more than a constructor function with a `$get` property. For
+ * these cases the {@link auto.$provide $provide} service has additional helper methods to register
+ * services without specifying a provider.
+ *
+ * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the
+ *     {@link auto.$injector $injector}
+ * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by
+ *     providers and services.
+ * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by
+ *     services, not providers.
+ * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`,
+ *     that will be wrapped in a **service provider** object, whose `$get` property will contain the
+ *     given factory function.
+ * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class`
+ *     that will be wrapped in a **service provider** object, whose `$get` property will instantiate
+ *      a new object using the given constructor function.
+ *
+ * See the individual methods for more information and examples.
+ */
+
+/**
+ * @ngdoc method
+ * @name $provide#provider
+ * @description
+ *
+ * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions
+ * are constructor functions, whose instances are responsible for "providing" a factory for a
+ * service.
+ *
+ * Service provider names start with the name of the service they provide followed by `Provider`.
+ * For example, the {@link ng.$log $log} service has a provider called
+ * {@link ng.$logProvider $logProvider}.
+ *
+ * Service provider objects can have additional methods which allow configuration of the provider
+ * and its service. Importantly, you can configure what kind of service is created by the `$get`
+ * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a
+ * method {@link ng.$logProvider#debugEnabled debugEnabled}
+ * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the
+ * console or not.
+ *
+ * @param {string} name The name of the instance. NOTE: the provider will be available under `name +
+                        'Provider'` key.
+ * @param {(Object|function())} provider If the provider is:
+ *
+ *   - `Object`: then it should have a `$get` method. The `$get` method will be invoked using
+ *     {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created.
+ *   - `Constructor`: a new instance of the provider will be created using
+ *     {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`.
+ *
+ * @returns {Object} registered provider instance
+
+ * @example
+ *
+ * The following example shows how to create a simple event tracking service and register it using
+ * {@link auto.$provide#provider $provide.provider()}.
+ *
+ * ```js
+ *  // Define the eventTracker provider
+ *  function EventTrackerProvider() {
+ *    var trackingUrl = '/track';
+ *
+ *    // A provider method for configuring where the tracked events should been saved
+ *    this.setTrackingUrl = function(url) {
+ *      trackingUrl = url;
+ *    };
+ *
+ *    // The service factory function
+ *    this.$get = ['$http', function($http) {
+ *      var trackedEvents = {};
+ *      return {
+ *        // Call this to track an event
+ *        event: function(event) {
+ *          var count = trackedEvents[event] || 0;
+ *          count += 1;
+ *          trackedEvents[event] = count;
+ *          return count;
+ *        },
+ *        // Call this to save the tracked events to the trackingUrl
+ *        save: function() {
+ *          $http.post(trackingUrl, trackedEvents);
+ *        }
+ *      };
+ *    }];
+ *  }
+ *
+ *  describe('eventTracker', function() {
+ *    var postSpy;
+ *
+ *    beforeEach(module(function($provide) {
+ *      // Register the eventTracker provider
+ *      $provide.provider('eventTracker', EventTrackerProvider);
+ *    }));
+ *
+ *    beforeEach(module(function(eventTrackerProvider) {
+ *      // Configure eventTracker provider
+ *      eventTrackerProvider.setTrackingUrl('/custom-track');
+ *    }));
+ *
+ *    it('tracks events', inject(function(eventTracker) {
+ *      expect(eventTracker.event('login')).toEqual(1);
+ *      expect(eventTracker.event('login')).toEqual(2);
+ *    }));
+ *
+ *    it('saves to the tracking url', inject(function(eventTracker, $http) {
+ *      postSpy = spyOn($http, 'post');
+ *      eventTracker.event('login');
+ *      eventTracker.save();
+ *      expect(postSpy).toHaveBeenCalled();
+ *      expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track');
+ *      expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track');
+ *      expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 });
+ *    }));
+ *  });
+ * ```
+ */
+
+/**
+ * @ngdoc method
+ * @name $provide#factory
+ * @description
+ *
+ * Register a **service factory**, which will be called to return the service instance.
+ * This is short for registering a service where its provider consists of only a `$get` property,
+ * which is the given service factory function.
+ * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to
+ * configure your service in a provider.
+ *
+ * @param {string} name The name of the instance.
+ * @param {Function|Array.<string|Function>} $getFn The injectable $getFn for the instance creation.
+ *                      Internally this is a short hand for `$provide.provider(name, {$get: $getFn})`.
+ * @returns {Object} registered provider instance
+ *
+ * @example
+ * Here is an example of registering a service
+ * ```js
+ *   $provide.factory('ping', ['$http', function($http) {
+ *     return function ping() {
+ *       return $http.send('/ping');
+ *     };
+ *   }]);
+ * ```
+ * You would then inject and use this service like this:
+ * ```js
+ *   someModule.controller('Ctrl', ['ping', function(ping) {
+ *     ping();
+ *   }]);
+ * ```
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $provide#service
+ * @description
+ *
+ * Register a **service constructor**, which will be invoked with `new` to create the service
+ * instance.
+ * This is short for registering a service where its provider's `$get` property is the service
+ * constructor function that will be used to instantiate the service instance.
+ *
+ * You should use {@link auto.$provide#service $provide.service(class)} if you define your service
+ * as a type/class.
+ *
+ * @param {string} name The name of the instance.
+ * @param {Function|Array.<string|Function>} constructor An injectable class (constructor function)
+ *     that will be instantiated.
+ * @returns {Object} registered provider instance
+ *
+ * @example
+ * Here is an example of registering a service using
+ * {@link auto.$provide#service $provide.service(class)}.
+ * ```js
+ *   var Ping = function($http) {
+ *     this.$http = $http;
+ *   };
+ *
+ *   Ping.$inject = ['$http'];
+ *
+ *   Ping.prototype.send = function() {
+ *     return this.$http.get('/ping');
+ *   };
+ *   $provide.service('ping', Ping);
+ * ```
+ * You would then inject and use this service like this:
+ * ```js
+ *   someModule.controller('Ctrl', ['ping', function(ping) {
+ *     ping.send();
+ *   }]);
+ * ```
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $provide#value
+ * @description
+ *
+ * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a
+ * number, an array, an object or a function.  This is short for registering a service where its
+ * provider's `$get` property is a factory function that takes no arguments and returns the **value
+ * service**.
+ *
+ * Value services are similar to constant services, except that they cannot be injected into a
+ * module configuration function (see {@link angular.Module#config}) but they can be overridden by
+ * an Angular
+ * {@link auto.$provide#decorator decorator}.
+ *
+ * @param {string} name The name of the instance.
+ * @param {*} value The value.
+ * @returns {Object} registered provider instance
+ *
+ * @example
+ * Here are some examples of creating value services.
+ * ```js
+ *   $provide.value('ADMIN_USER', 'admin');
+ *
+ *   $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 });
+ *
+ *   $provide.value('halfOf', function(value) {
+ *     return value / 2;
+ *   });
+ * ```
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $provide#constant
+ * @description
+ *
+ * Register a **constant service**, such as a string, a number, an array, an object or a function,
+ * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be
+ * injected into a module configuration function (see {@link angular.Module#config}) and it cannot
+ * be overridden by an Angular {@link auto.$provide#decorator decorator}.
+ *
+ * @param {string} name The name of the constant.
+ * @param {*} value The constant value.
+ * @returns {Object} registered instance
+ *
+ * @example
+ * Here a some examples of creating constants:
+ * ```js
+ *   $provide.constant('SHARD_HEIGHT', 306);
+ *
+ *   $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']);
+ *
+ *   $provide.constant('double', function(value) {
+ *     return value * 2;
+ *   });
+ * ```
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $provide#decorator
+ * @description
+ *
+ * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator
+ * intercepts the creation of a service, allowing it to override or modify the behaviour of the
+ * service. The object returned by the decorator may be the original service, or a new service
+ * object which replaces or wraps and delegates to the original service.
+ *
+ * @param {string} name The name of the service to decorate.
+ * @param {Function|Array.<string|Function>} decorator This function will be invoked when the service needs to be
+ *    instantiated and should return the decorated service instance. The function is called using
+ *    the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable.
+ *    Local injection arguments:
+ *
+ *    * `$delegate` - The original service instance, which can be monkey patched, configured,
+ *      decorated or delegated to.
+ *
+ * @example
+ * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting
+ * calls to {@link ng.$log#error $log.warn()}.
+ * ```js
+ *   $provide.decorator('$log', ['$delegate', function($delegate) {
+ *     $delegate.warn = $delegate.error;
+ *     return $delegate;
+ *   }]);
+ * ```
+ */
+
+
+function createInjector(modulesToLoad, strictDi) {
+  strictDi = (strictDi === true);
+  var INSTANTIATING = {},
+      providerSuffix = 'Provider',
+      path = [],
+      loadedModules = new HashMap([], true),
+      providerCache = {
+        $provide: {
+            provider: supportObject(provider),
+            factory: supportObject(factory),
+            service: supportObject(service),
+            value: supportObject(value),
+            constant: supportObject(constant),
+            decorator: decorator
+          }
+      },
+      providerInjector = (providerCache.$injector =
+          createInternalInjector(providerCache, function(serviceName, caller) {
+            if (angular.isString(caller)) {
+              path.push(caller);
+            }
+            throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- '));
+          })),
+      instanceCache = {},
+      instanceInjector = (instanceCache.$injector =
+          createInternalInjector(instanceCache, function(serviceName, caller) {
+            var provider = providerInjector.get(serviceName + providerSuffix, caller);
+            return instanceInjector.invoke(provider.$get, provider, undefined, serviceName);
+          }));
+
+
+  forEach(loadModules(modulesToLoad), function(fn) { if (fn) instanceInjector.invoke(fn); });
+
+  return instanceInjector;
+
+  ////////////////////////////////////
+  // $provider
+  ////////////////////////////////////
+
+  function supportObject(delegate) {
+    return function(key, value) {
+      if (isObject(key)) {
+        forEach(key, reverseParams(delegate));
+      } else {
+        return delegate(key, value);
+      }
+    };
+  }
+
+  function provider(name, provider_) {
+    assertNotHasOwnProperty(name, 'service');
+    if (isFunction(provider_) || isArray(provider_)) {
+      provider_ = providerInjector.instantiate(provider_);
+    }
+    if (!provider_.$get) {
+      throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name);
+    }
+    return providerCache[name + providerSuffix] = provider_;
+  }
+
+  function enforceReturnValue(name, factory) {
+    return function enforcedReturnValue() {
+      var result = instanceInjector.invoke(factory, this);
+      if (isUndefined(result)) {
+        throw $injectorMinErr('undef', "Provider '{0}' must return a value from $get factory method.", name);
+      }
+      return result;
+    };
+  }
+
+  function factory(name, factoryFn, enforce) {
+    return provider(name, {
+      $get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn
+    });
+  }
+
+  function service(name, constructor) {
+    return factory(name, ['$injector', function($injector) {
+      return $injector.instantiate(constructor);
+    }]);
+  }
+
+  function value(name, val) { return factory(name, valueFn(val), false); }
+
+  function constant(name, value) {
+    assertNotHasOwnProperty(name, 'constant');
+    providerCache[name] = value;
+    instanceCache[name] = value;
+  }
+
+  function decorator(serviceName, decorFn) {
+    var origProvider = providerInjector.get(serviceName + providerSuffix),
+        orig$get = origProvider.$get;
+
+    origProvider.$get = function() {
+      var origInstance = instanceInjector.invoke(orig$get, origProvider);
+      return instanceInjector.invoke(decorFn, null, {$delegate: origInstance});
+    };
+  }
+
+  ////////////////////////////////////
+  // Module Loading
+  ////////////////////////////////////
+  function loadModules(modulesToLoad) {
+    assertArg(isUndefined(modulesToLoad) || isArray(modulesToLoad), 'modulesToLoad', 'not an array');
+    var runBlocks = [], moduleFn;
+    forEach(modulesToLoad, function(module) {
+      if (loadedModules.get(module)) return;
+      loadedModules.put(module, true);
+
+      function runInvokeQueue(queue) {
+        var i, ii;
+        for (i = 0, ii = queue.length; i < ii; i++) {
+          var invokeArgs = queue[i],
+              provider = providerInjector.get(invokeArgs[0]);
+
+          provider[invokeArgs[1]].apply(provider, invokeArgs[2]);
+        }
+      }
+
+      try {
+        if (isString(module)) {
+          moduleFn = angularModule(module);
+          runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks);
+          runInvokeQueue(moduleFn._invokeQueue);
+          runInvokeQueue(moduleFn._configBlocks);
+        } else if (isFunction(module)) {
+            runBlocks.push(providerInjector.invoke(module));
+        } else if (isArray(module)) {
+            runBlocks.push(providerInjector.invoke(module));
+        } else {
+          assertArgFn(module, 'module');
+        }
+      } catch (e) {
+        if (isArray(module)) {
+          module = module[module.length - 1];
+        }
+        if (e.message && e.stack && e.stack.indexOf(e.message) == -1) {
+          // Safari & FF's stack traces don't contain error.message content
+          // unlike those of Chrome and IE
+          // So if stack doesn't contain message, we create a new string that contains both.
+          // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here.
+          /* jshint -W022 */
+          e = e.message + '\n' + e.stack;
+        }
+        throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}",
+                  module, e.stack || e.message || e);
+      }
+    });
+    return runBlocks;
+  }
+
+  ////////////////////////////////////
+  // internal Injector
+  ////////////////////////////////////
+
+  function createInternalInjector(cache, factory) {
+
+    function getService(serviceName, caller) {
+      if (cache.hasOwnProperty(serviceName)) {
+        if (cache[serviceName] === INSTANTIATING) {
+          throw $injectorMinErr('cdep', 'Circular dependency found: {0}',
+                    serviceName + ' <- ' + path.join(' <- '));
+        }
+        return cache[serviceName];
+      } else {
+        try {
+          path.unshift(serviceName);
+          cache[serviceName] = INSTANTIATING;
+          return cache[serviceName] = factory(serviceName, caller);
+        } catch (err) {
+          if (cache[serviceName] === INSTANTIATING) {
+            delete cache[serviceName];
+          }
+          throw err;
+        } finally {
+          path.shift();
+        }
+      }
+    }
+
+    function invoke(fn, self, locals, serviceName) {
+      if (typeof locals === 'string') {
+        serviceName = locals;
+        locals = null;
+      }
+
+      var args = [],
+          $inject = createInjector.$$annotate(fn, strictDi, serviceName),
+          length, i,
+          key;
+
+      for (i = 0, length = $inject.length; i < length; i++) {
+        key = $inject[i];
+        if (typeof key !== 'string') {
+          throw $injectorMinErr('itkn',
+                  'Incorrect injection token! Expected service name as string, got {0}', key);
+        }
+        args.push(
+          locals && locals.hasOwnProperty(key)
+          ? locals[key]
+          : getService(key, serviceName)
+        );
+      }
+      if (isArray(fn)) {
+        fn = fn[length];
+      }
+
+      // http://jsperf.com/angularjs-invoke-apply-vs-switch
+      // #5388
+      return fn.apply(self, args);
+    }
+
+    function instantiate(Type, locals, serviceName) {
+      // Check if Type is annotated and use just the given function at n-1 as parameter
+      // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]);
+      // Object creation: http://jsperf.com/create-constructor/2
+      var instance = Object.create((isArray(Type) ? Type[Type.length - 1] : Type).prototype || null);
+      var returnedValue = invoke(Type, instance, locals, serviceName);
+
+      return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance;
+    }
+
+    return {
+      invoke: invoke,
+      instantiate: instantiate,
+      get: getService,
+      annotate: createInjector.$$annotate,
+      has: function(name) {
+        return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name);
+      }
+    };
+  }
+}
+
+createInjector.$$annotate = annotate;
+
+/**
+ * @ngdoc provider
+ * @name $anchorScrollProvider
+ *
+ * @description
+ * Use `$anchorScrollProvider` to disable automatic scrolling whenever
+ * {@link ng.$location#hash $location.hash()} changes.
+ */
+function $AnchorScrollProvider() {
+
+  var autoScrollingEnabled = true;
+
+  /**
+   * @ngdoc method
+   * @name $anchorScrollProvider#disableAutoScrolling
+   *
+   * @description
+   * By default, {@link ng.$anchorScroll $anchorScroll()} will automatically detect changes to
+   * {@link ng.$location#hash $location.hash()} and scroll to the element matching the new hash.<br />
+   * Use this method to disable automatic scrolling.
+   *
+   * If automatic scrolling is disabled, one must explicitly call
+   * {@link ng.$anchorScroll $anchorScroll()} in order to scroll to the element related to the
+   * current hash.
+   */
+  this.disableAutoScrolling = function() {
+    autoScrollingEnabled = false;
+  };
+
+  /**
+   * @ngdoc service
+   * @name $anchorScroll
+   * @kind function
+   * @requires $window
+   * @requires $location
+   * @requires $rootScope
+   *
+   * @description
+   * When called, it scrolls to the element related to the specified `hash` or (if omitted) to the
+   * current value of {@link ng.$location#hash $location.hash()}, according to the rules specified
+   * in the
+   * [HTML5 spec](http://www.w3.org/html/wg/drafts/html/master/browsers.html#the-indicated-part-of-the-document).
+   *
+   * It also watches the {@link ng.$location#hash $location.hash()} and automatically scrolls to
+   * match any anchor whenever it changes. This can be disabled by calling
+   * {@link ng.$anchorScrollProvider#disableAutoScrolling $anchorScrollProvider.disableAutoScrolling()}.
+   *
+   * Additionally, you can use its {@link ng.$anchorScroll#yOffset yOffset} property to specify a
+   * vertical scroll-offset (either fixed or dynamic).
+   *
+   * @param {string=} hash The hash specifying the element to scroll to. If omitted, the value of
+   *                       {@link ng.$location#hash $location.hash()} will be used.
+   *
+   * @property {(number|function|jqLite)} yOffset
+   * If set, specifies a vertical scroll-offset. This is often useful when there are fixed
+   * positioned elements at the top of the page, such as navbars, headers etc.
+   *
+   * `yOffset` can be specified in various ways:
+   * - **number**: A fixed number of pixels to be used as offset.<br /><br />
+   * - **function**: A getter function called everytime `$anchorScroll()` is executed. Must return
+   *   a number representing the offset (in pixels).<br /><br />
+   * - **jqLite**: A jqLite/jQuery element to be used for specifying the offset. The distance from
+   *   the top of the page to the element's bottom will be used as offset.<br />
+   *   **Note**: The element will be taken into account only as long as its `position` is set to
+   *   `fixed`. This option is useful, when dealing with responsive navbars/headers that adjust
+   *   their height and/or positioning according to the viewport's size.
+   *
+   * <br />
+   * <div class="alert alert-warning">
+   * In order for `yOffset` to work properly, scrolling should take place on the document's root and
+   * not some child element.
+   * </div>
+   *
+   * @example
+     <example module="anchorScrollExample">
+       <file name="index.html">
+         <div id="scrollArea" ng-controller="ScrollController">
+           <a ng-click="gotoBottom()">Go to bottom</a>
+           <a id="bottom"></a> You're at the bottom!
+         </div>
+       </file>
+       <file name="script.js">
+         angular.module('anchorScrollExample', [])
+           .controller('ScrollController', ['$scope', '$location', '$anchorScroll',
+             function ($scope, $location, $anchorScroll) {
+               $scope.gotoBottom = function() {
+                 // set the location.hash to the id of
+                 // the element you wish to scroll to.
+                 $location.hash('bottom');
+
+                 // call $anchorScroll()
+                 $anchorScroll();
+               };
+             }]);
+       </file>
+       <file name="style.css">
+         #scrollArea {
+           height: 280px;
+           overflow: auto;
+         }
+
+         #bottom {
+           display: block;
+           margin-top: 2000px;
+         }
+       </file>
+     </example>
+   *
+   * <hr />
+   * The example below illustrates the use of a vertical scroll-offset (specified as a fixed value).
+   * See {@link ng.$anchorScroll#yOffset $anchorScroll.yOffset} for more details.
+   *
+   * @example
+     <example module="anchorScrollOffsetExample">
+       <file name="index.html">
+         <div class="fixed-header" ng-controller="headerCtrl">
+           <a href="" ng-click="gotoAnchor(x)" ng-repeat="x in [1,2,3,4,5]">
+             Go to anchor {{x}}
+           </a>
+         </div>
+         <div id="anchor{{x}}" class="anchor" ng-repeat="x in [1,2,3,4,5]">
+           Anchor {{x}} of 5
+         </div>
+       </file>
+       <file name="script.js">
+         angular.module('anchorScrollOffsetExample', [])
+           .run(['$anchorScroll', function($anchorScroll) {
+             $anchorScroll.yOffset = 50;   // always scroll by 50 extra pixels
+           }])
+           .controller('headerCtrl', ['$anchorScroll', '$location', '$scope',
+             function ($anchorScroll, $location, $scope) {
+               $scope.gotoAnchor = function(x) {
+                 var newHash = 'anchor' + x;
+                 if ($location.hash() !== newHash) {
+                   // set the $location.hash to `newHash` and
+                   // $anchorScroll will automatically scroll to it
+                   $location.hash('anchor' + x);
+                 } else {
+                   // call $anchorScroll() explicitly,
+                   // since $location.hash hasn't changed
+                   $anchorScroll();
+                 }
+               };
+             }
+           ]);
+       </file>
+       <file name="style.css">
+         body {
+           padding-top: 50px;
+         }
+
+         .anchor {
+           border: 2px dashed DarkOrchid;
+           padding: 10px 10px 200px 10px;
+         }
+
+         .fixed-header {
+           background-color: rgba(0, 0, 0, 0.2);
+           height: 50px;
+           position: fixed;
+           top: 0; left: 0; right: 0;
+         }
+
+         .fixed-header > a {
+           display: inline-block;
+           margin: 5px 15px;
+         }
+       </file>
+     </example>
+   */
+  this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) {
+    var document = $window.document;
+
+    // Helper function to get first anchor from a NodeList
+    // (using `Array#some()` instead of `angular#forEach()` since it's more performant
+    //  and working in all supported browsers.)
+    function getFirstAnchor(list) {
+      var result = null;
+      Array.prototype.some.call(list, function(element) {
+        if (nodeName_(element) === 'a') {
+          result = element;
+          return true;
+        }
+      });
+      return result;
+    }
+
+    function getYOffset() {
+
+      var offset = scroll.yOffset;
+
+      if (isFunction(offset)) {
+        offset = offset();
+      } else if (isElement(offset)) {
+        var elem = offset[0];
+        var style = $window.getComputedStyle(elem);
+        if (style.position !== 'fixed') {
+          offset = 0;
+        } else {
+          offset = elem.getBoundingClientRect().bottom;
+        }
+      } else if (!isNumber(offset)) {
+        offset = 0;
+      }
+
+      return offset;
+    }
+
+    function scrollTo(elem) {
+      if (elem) {
+        elem.scrollIntoView();
+
+        var offset = getYOffset();
+
+        if (offset) {
+          // `offset` is the number of pixels we should scroll UP in order to align `elem` properly.
+          // This is true ONLY if the call to `elem.scrollIntoView()` initially aligns `elem` at the
+          // top of the viewport.
+          //
+          // IF the number of pixels from the top of `elem` to the end of the page's content is less
+          // than the height of the viewport, then `elem.scrollIntoView()` will align the `elem` some
+          // way down the page.
+          //
+          // This is often the case for elements near the bottom of the page.
+          //
+          // In such cases we do not need to scroll the whole `offset` up, just the difference between
+          // the top of the element and the offset, which is enough to align the top of `elem` at the
+          // desired position.
+          var elemTop = elem.getBoundingClientRect().top;
+          $window.scrollBy(0, elemTop - offset);
+        }
+      } else {
+        $window.scrollTo(0, 0);
+      }
+    }
+
+    function scroll(hash) {
+      hash = isString(hash) ? hash : $location.hash();
+      var elm;
+
+      // empty hash, scroll to the top of the page
+      if (!hash) scrollTo(null);
+
+      // element with given id
+      else if ((elm = document.getElementById(hash))) scrollTo(elm);
+
+      // first anchor with given name :-D
+      else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) scrollTo(elm);
+
+      // no element and hash == 'top', scroll to the top of the page
+      else if (hash === 'top') scrollTo(null);
+    }
+
+    // does not scroll when user clicks on anchor link that is currently on
+    // (no url change, no $location.hash() change), browser native does scroll
+    if (autoScrollingEnabled) {
+      $rootScope.$watch(function autoScrollWatch() {return $location.hash();},
+        function autoScrollWatchAction(newVal, oldVal) {
+          // skip the initial scroll if $location.hash is empty
+          if (newVal === oldVal && newVal === '') return;
+
+          jqLiteDocumentLoaded(function() {
+            $rootScope.$evalAsync(scroll);
+          });
+        });
+    }
+
+    return scroll;
+  }];
+}
+
+var $animateMinErr = minErr('$animate');
+var ELEMENT_NODE = 1;
+var NG_ANIMATE_CLASSNAME = 'ng-animate';
+
+function mergeClasses(a,b) {
+  if (!a && !b) return '';
+  if (!a) return b;
+  if (!b) return a;
+  if (isArray(a)) a = a.join(' ');
+  if (isArray(b)) b = b.join(' ');
+  return a + ' ' + b;
+}
+
+function extractElementNode(element) {
+  for (var i = 0; i < element.length; i++) {
+    var elm = element[i];
+    if (elm.nodeType === ELEMENT_NODE) {
+      return elm;
+    }
+  }
+}
+
+function splitClasses(classes) {
+  if (isString(classes)) {
+    classes = classes.split(' ');
+  }
+
+  // Use createMap() to prevent class assumptions involving property names in
+  // Object.prototype
+  var obj = createMap();
+  forEach(classes, function(klass) {
+    // sometimes the split leaves empty string values
+    // incase extra spaces were applied to the options
+    if (klass.length) {
+      obj[klass] = true;
+    }
+  });
+  return obj;
+}
+
+// if any other type of options value besides an Object value is
+// passed into the $animate.method() animation then this helper code
+// will be run which will ignore it. While this patch is not the
+// greatest solution to this, a lot of existing plugins depend on
+// $animate to either call the callback (< 1.2) or return a promise
+// that can be changed. This helper function ensures that the options
+// are wiped clean incase a callback function is provided.
+function prepareAnimateOptions(options) {
+  return isObject(options)
+      ? options
+      : {};
+}
+
+var $$CoreAnimateRunnerProvider = function() {
+  this.$get = ['$q', '$$rAF', function($q, $$rAF) {
+    function AnimateRunner() {}
+    AnimateRunner.all = noop;
+    AnimateRunner.chain = noop;
+    AnimateRunner.prototype = {
+      end: noop,
+      cancel: noop,
+      resume: noop,
+      pause: noop,
+      complete: noop,
+      then: function(pass, fail) {
+        return $q(function(resolve) {
+          $$rAF(function() {
+            resolve();
+          });
+        }).then(pass, fail);
+      }
+    };
+    return AnimateRunner;
+  }];
+};
+
+// this is prefixed with Core since it conflicts with
+// the animateQueueProvider defined in ngAnimate/animateQueue.js
+var $$CoreAnimateQueueProvider = function() {
+  var postDigestQueue = new HashMap();
+  var postDigestElements = [];
+
+  this.$get = ['$$AnimateRunner', '$rootScope',
+       function($$AnimateRunner,   $rootScope) {
+    return {
+      enabled: noop,
+      on: noop,
+      off: noop,
+      pin: noop,
+
+      push: function(element, event, options, domOperation) {
+        domOperation        && domOperation();
+
+        options = options || {};
+        options.from        && element.css(options.from);
+        options.to          && element.css(options.to);
+
+        if (options.addClass || options.removeClass) {
+          addRemoveClassesPostDigest(element, options.addClass, options.removeClass);
+        }
+
+        return new $$AnimateRunner(); // jshint ignore:line
+      }
+    };
+
+
+    function updateData(data, classes, value) {
+      var changed = false;
+      if (classes) {
+        classes = isString(classes) ? classes.split(' ') :
+                  isArray(classes) ? classes : [];
+        forEach(classes, function(className) {
+          if (className) {
+            changed = true;
+            data[className] = value;
+          }
+        });
+      }
+      return changed;
+    }
+
+    function handleCSSClassChanges() {
+      forEach(postDigestElements, function(element) {
+        var data = postDigestQueue.get(element);
+        if (data) {
+          var existing = splitClasses(element.attr('class'));
+          var toAdd = '';
+          var toRemove = '';
+          forEach(data, function(status, className) {
+            var hasClass = !!existing[className];
+            if (status !== hasClass) {
+              if (status) {
+                toAdd += (toAdd.length ? ' ' : '') + className;
+              } else {
+                toRemove += (toRemove.length ? ' ' : '') + className;
+              }
+            }
+          });
+
+          forEach(element, function(elm) {
+            toAdd    && jqLiteAddClass(elm, toAdd);
+            toRemove && jqLiteRemoveClass(elm, toRemove);
+          });
+          postDigestQueue.remove(element);
+        }
+      });
+      postDigestElements.length = 0;
+    }
+
+
+    function addRemoveClassesPostDigest(element, add, remove) {
+      var data = postDigestQueue.get(element) || {};
+
+      var classesAdded = updateData(data, add, true);
+      var classesRemoved = updateData(data, remove, false);
+
+      if (classesAdded || classesRemoved) {
+
+        postDigestQueue.put(element, data);
+        postDigestElements.push(element);
+
+        if (postDigestElements.length === 1) {
+          $rootScope.$$postDigest(handleCSSClassChanges);
+        }
+      }
+    }
+  }];
+};
+
+/**
+ * @ngdoc provider
+ * @name $animateProvider
+ *
+ * @description
+ * Default implementation of $animate that doesn't perform any animations, instead just
+ * synchronously performs DOM updates and resolves the returned runner promise.
+ *
+ * In order to enable animations the `ngAnimate` module has to be loaded.
+ *
+ * To see the functional implementation check out `src/ngAnimate/animate.js`.
+ */
+var $AnimateProvider = ['$provide', function($provide) {
+  var provider = this;
+
+  this.$$registeredAnimations = Object.create(null);
+
+   /**
+   * @ngdoc method
+   * @name $animateProvider#register
+   *
+   * @description
+   * Registers a new injectable animation factory function. The factory function produces the
+   * animation object which contains callback functions for each event that is expected to be
+   * animated.
+   *
+   *   * `eventFn`: `function(element, ... , doneFunction, options)`
+   *   The element to animate, the `doneFunction` and the options fed into the animation. Depending
+   *   on the type of animation additional arguments will be injected into the animation function. The
+   *   list below explains the function signatures for the different animation methods:
+   *
+   *   - setClass: function(element, addedClasses, removedClasses, doneFunction, options)
+   *   - addClass: function(element, addedClasses, doneFunction, options)
+   *   - removeClass: function(element, removedClasses, doneFunction, options)
+   *   - enter, leave, move: function(element, doneFunction, options)
+   *   - animate: function(element, fromStyles, toStyles, doneFunction, options)
+   *
+   *   Make sure to trigger the `doneFunction` once the animation is fully complete.
+   *
+   * ```js
+   *   return {
+   *     //enter, leave, move signature
+   *     eventFn : function(element, done, options) {
+   *       //code to run the animation
+   *       //once complete, then run done()
+   *       return function endFunction(wasCancelled) {
+   *         //code to cancel the animation
+   *       }
+   *     }
+   *   }
+   * ```
+   *
+   * @param {string} name The name of the animation (this is what the class-based CSS value will be compared to).
+   * @param {Function} factory The factory function that will be executed to return the animation
+   *                           object.
+   */
+  this.register = function(name, factory) {
+    if (name && name.charAt(0) !== '.') {
+      throw $animateMinErr('notcsel', "Expecting class selector starting with '.' got '{0}'.", name);
+    }
+
+    var key = name + '-animation';
+    provider.$$registeredAnimations[name.substr(1)] = key;
+    $provide.factory(key, factory);
+  };
+
+  /**
+   * @ngdoc method
+   * @name $animateProvider#classNameFilter
+   *
+   * @description
+   * Sets and/or returns the CSS class regular expression that is checked when performing
+   * an animation. Upon bootstrap the classNameFilter value is not set at all and will
+   * therefore enable $animate to attempt to perform an animation on any element that is triggered.
+   * When setting the `classNameFilter` value, animations will only be performed on elements
+   * that successfully match the filter expression. This in turn can boost performance
+   * for low-powered devices as well as applications containing a lot of structural operations.
+   * @param {RegExp=} expression The className expression which will be checked against all animations
+   * @return {RegExp} The current CSS className expression value. If null then there is no expression value
+   */
+  this.classNameFilter = function(expression) {
+    if (arguments.length === 1) {
+      this.$$classNameFilter = (expression instanceof RegExp) ? expression : null;
+      if (this.$$classNameFilter) {
+        var reservedRegex = new RegExp("(\\s+|\\/)" + NG_ANIMATE_CLASSNAME + "(\\s+|\\/)");
+        if (reservedRegex.test(this.$$classNameFilter.toString())) {
+          throw $animateMinErr('nongcls','$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the "{0}" CSS class.', NG_ANIMATE_CLASSNAME);
+
+        }
+      }
+    }
+    return this.$$classNameFilter;
+  };
+
+  this.$get = ['$$animateQueue', function($$animateQueue) {
+    function domInsert(element, parentElement, afterElement) {
+      // if for some reason the previous element was removed
+      // from the dom sometime before this code runs then let's
+      // just stick to using the parent element as the anchor
+      if (afterElement) {
+        var afterNode = extractElementNode(afterElement);
+        if (afterNode && !afterNode.parentNode && !afterNode.previousElementSibling) {
+          afterElement = null;
+        }
+      }
+      afterElement ? afterElement.after(element) : parentElement.prepend(element);
+    }
+
+    /**
+     * @ngdoc service
+     * @name $animate
+     * @description The $animate service exposes a series of DOM utility methods that provide support
+     * for animation hooks. The default behavior is the application of DOM operations, however,
+     * when an animation is detected (and animations are enabled), $animate will do the heavy lifting
+     * to ensure that animation runs with the triggered DOM operation.
+     *
+     * By default $animate doesn't trigger any animations. This is because the `ngAnimate` module isn't
+     * included and only when it is active then the animation hooks that `$animate` triggers will be
+     * functional. Once active then all structural `ng-` directives will trigger animations as they perform
+     * their DOM-related operations (enter, leave and move). Other directives such as `ngClass`,
+     * `ngShow`, `ngHide` and `ngMessages` also provide support for animations.
+     *
+     * It is recommended that the`$animate` service is always used when executing DOM-related procedures within directives.
+     *
+     * To learn more about enabling animation support, click here to visit the
+     * {@link ngAnimate ngAnimate module page}.
+     */
+    return {
+      // we don't call it directly since non-existant arguments may
+      // be interpreted as null within the sub enabled function
+
+      /**
+       *
+       * @ngdoc method
+       * @name $animate#on
+       * @kind function
+       * @description Sets up an event listener to fire whenever the animation event (enter, leave, move, etc...)
+       *    has fired on the given element or among any of its children. Once the listener is fired, the provided callback
+       *    is fired with the following params:
+       *
+       * ```js
+       * $animate.on('enter', container,
+       *    function callback(element, phase) {
+       *      // cool we detected an enter animation within the container
+       *    }
+       * );
+       * ```
+       *
+       * @param {string} event the animation event that will be captured (e.g. enter, leave, move, addClass, removeClass, etc...)
+       * @param {DOMElement} container the container element that will capture each of the animation events that are fired on itself
+       *     as well as among its children
+       * @param {Function} callback the callback function that will be fired when the listener is triggered
+       *
+       * The arguments present in the callback function are:
+       * * `element` - The captured DOM element that the animation was fired on.
+       * * `phase` - The phase of the animation. The two possible phases are **start** (when the animation starts) and **close** (when it ends).
+       */
+      on: $$animateQueue.on,
+
+      /**
+       *
+       * @ngdoc method
+       * @name $animate#off
+       * @kind function
+       * @description Deregisters an event listener based on the event which has been associated with the provided element. This method
+       * can be used in three different ways depending on the arguments:
+       *
+       * ```js
+       * // remove all the animation event listeners listening for `enter`
+       * $animate.off('enter');
+       *
+       * // remove all the animation event listeners listening for `enter` on the given element and its children
+       * $animate.off('enter', container);
+       *
+       * // remove the event listener function provided by `listenerFn` that is set
+       * // to listen for `enter` on the given `element` as well as its children
+       * $animate.off('enter', container, callback);
+       * ```
+       *
+       * @param {string} event the animation event (e.g. enter, leave, move, addClass, removeClass, etc...)
+       * @param {DOMElement=} container the container element the event listener was placed on
+       * @param {Function=} callback the callback function that was registered as the listener
+       */
+      off: $$animateQueue.off,
+
+      /**
+       * @ngdoc method
+       * @name $animate#pin
+       * @kind function
+       * @description Associates the provided element with a host parent element to allow the element to be animated even if it exists
+       *    outside of the DOM structure of the Angular application. By doing so, any animation triggered via `$animate` can be issued on the
+       *    element despite being outside the realm of the application or within another application. Say for example if the application
+       *    was bootstrapped on an element that is somewhere inside of the `<body>` tag, but we wanted to allow for an element to be situated
+       *    as a direct child of `document.body`, then this can be achieved by pinning the element via `$animate.pin(element)`. Keep in mind
+       *    that calling `$animate.pin(element, parentElement)` will not actually insert into the DOM anywhere; it will just create the association.
+       *
+       *    Note that this feature is only active when the `ngAnimate` module is used.
+       *
+       * @param {DOMElement} element the external element that will be pinned
+       * @param {DOMElement} parentElement the host parent element that will be associated with the external element
+       */
+      pin: $$animateQueue.pin,
+
+      /**
+       *
+       * @ngdoc method
+       * @name $animate#enabled
+       * @kind function
+       * @description Used to get and set whether animations are enabled or not on the entire application or on an element and its children. This
+       * function can be called in four ways:
+       *
+       * ```js
+       * // returns true or false
+       * $animate.enabled();
+       *
+       * // changes the enabled state for all animations
+       * $animate.enabled(false);
+       * $animate.enabled(true);
+       *
+       * // returns true or false if animations are enabled for an element
+       * $animate.enabled(element);
+       *
+       * // changes the enabled state for an element and its children
+       * $animate.enabled(element, true);
+       * $animate.enabled(element, false);
+       * ```
+       *
+       * @param {DOMElement=} element the element that will be considered for checking/setting the enabled state
+       * @param {boolean=} enabled whether or not the animations will be enabled for the element
+       *
+       * @return {boolean} whether or not animations are enabled
+       */
+      enabled: $$animateQueue.enabled,
+
+      /**
+       * @ngdoc method
+       * @name $animate#cancel
+       * @kind function
+       * @description Cancels the provided animation.
+       *
+       * @param {Promise} animationPromise The animation promise that is returned when an animation is started.
+       */
+      cancel: function(runner) {
+        runner.end && runner.end();
+      },
+
+      /**
+       *
+       * @ngdoc method
+       * @name $animate#enter
+       * @kind function
+       * @description Inserts the element into the DOM either after the `after` element (if provided) or
+       *   as the first child within the `parent` element and then triggers an animation.
+       *   A promise is returned that will be resolved during the next digest once the animation
+       *   has completed.
+       *
+       * @param {DOMElement} element the element which will be inserted into the DOM
+       * @param {DOMElement} parent the parent element which will append the element as
+       *   a child (so long as the after element is not present)
+       * @param {DOMElement=} after the sibling element after which the element will be appended
+       * @param {object=} options an optional collection of options/styles that will be applied to the element
+       *
+       * @return {Promise} the animation callback promise
+       */
+      enter: function(element, parent, after, options) {
+        parent = parent && jqLite(parent);
+        after = after && jqLite(after);
+        parent = parent || after.parent();
+        domInsert(element, parent, after);
+        return $$animateQueue.push(element, 'enter', prepareAnimateOptions(options));
+      },
+
+      /**
+       *
+       * @ngdoc method
+       * @name $animate#move
+       * @kind function
+       * @description Inserts (moves) the element into its new position in the DOM either after
+       *   the `after` element (if provided) or as the first child within the `parent` element
+       *   and then triggers an animation. A promise is returned that will be resolved
+       *   during the next digest once the animation has completed.
+       *
+       * @param {DOMElement} element the element which will be moved into the new DOM position
+       * @param {DOMElement} parent the parent element which will append the element as
+       *   a child (so long as the after element is not present)
+       * @param {DOMElement=} after the sibling element after which the element will be appended
+       * @param {object=} options an optional collection of options/styles that will be applied to the element
+       *
+       * @return {Promise} the animation callback promise
+       */
+      move: function(element, parent, after, options) {
+        parent = parent && jqLite(parent);
+        after = after && jqLite(after);
+        parent = parent || after.parent();
+        domInsert(element, parent, after);
+        return $$animateQueue.push(element, 'move', prepareAnimateOptions(options));
+      },
+
+      /**
+       * @ngdoc method
+       * @name $animate#leave
+       * @kind function
+       * @description Triggers an animation and then removes the element from the DOM.
+       * When the function is called a promise is returned that will be resolved during the next
+       * digest once the animation has completed.
+       *
+       * @param {DOMElement} element the element which will be removed from the DOM
+       * @param {object=} options an optional collection of options/styles that will be applied to the element
+       *
+       * @return {Promise} the animation callback promise
+       */
+      leave: function(element, options) {
+        return $$animateQueue.push(element, 'leave', prepareAnimateOptions(options), function() {
+          element.remove();
+        });
+      },
+
+      /**
+       * @ngdoc method
+       * @name $animate#addClass
+       * @kind function
+       *
+       * @description Triggers an addClass animation surrounding the addition of the provided CSS class(es). Upon
+       *   execution, the addClass operation will only be handled after the next digest and it will not trigger an
+       *   animation if element already contains the CSS class or if the class is removed at a later step.
+       *   Note that class-based animations are treated differently compared to structural animations
+       *   (like enter, move and leave) since the CSS classes may be added/removed at different points
+       *   depending if CSS or JavaScript animations are used.
+       *
+       * @param {DOMElement} element the element which the CSS classes will be applied to
+       * @param {string} className the CSS class(es) that will be added (multiple classes are separated via spaces)
+       * @param {object=} options an optional collection of options/styles that will be applied to the element
+       *
+       * @return {Promise} the animation callback promise
+       */
+      addClass: function(element, className, options) {
+        options = prepareAnimateOptions(options);
+        options.addClass = mergeClasses(options.addclass, className);
+        return $$animateQueue.push(element, 'addClass', options);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $animate#removeClass
+       * @kind function
+       *
+       * @description Triggers a removeClass animation surrounding the removal of the provided CSS class(es). Upon
+       *   execution, the removeClass operation will only be handled after the next digest and it will not trigger an
+       *   animation if element does not contain the CSS class or if the class is added at a later step.
+       *   Note that class-based animations are treated differently compared to structural animations
+       *   (like enter, move and leave) since the CSS classes may be added/removed at different points
+       *   depending if CSS or JavaScript animations are used.
+       *
+       * @param {DOMElement} element the element which the CSS classes will be applied to
+       * @param {string} className the CSS class(es) that will be removed (multiple classes are separated via spaces)
+       * @param {object=} options an optional collection of options/styles that will be applied to the element
+       *
+       * @return {Promise} the animation callback promise
+       */
+      removeClass: function(element, className, options) {
+        options = prepareAnimateOptions(options);
+        options.removeClass = mergeClasses(options.removeClass, className);
+        return $$animateQueue.push(element, 'removeClass', options);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $animate#setClass
+       * @kind function
+       *
+       * @description Performs both the addition and removal of a CSS classes on an element and (during the process)
+       *    triggers an animation surrounding the class addition/removal. Much like `$animate.addClass` and
+       *    `$animate.removeClass`, `setClass` will only evaluate the classes being added/removed once a digest has
+       *    passed. Note that class-based animations are treated differently compared to structural animations
+       *    (like enter, move and leave) since the CSS classes may be added/removed at different points
+       *    depending if CSS or JavaScript animations are used.
+       *
+       * @param {DOMElement} element the element which the CSS classes will be applied to
+       * @param {string} add the CSS class(es) that will be added (multiple classes are separated via spaces)
+       * @param {string} remove the CSS class(es) that will be removed (multiple classes are separated via spaces)
+       * @param {object=} options an optional collection of options/styles that will be applied to the element
+       *
+       * @return {Promise} the animation callback promise
+       */
+      setClass: function(element, add, remove, options) {
+        options = prepareAnimateOptions(options);
+        options.addClass = mergeClasses(options.addClass, add);
+        options.removeClass = mergeClasses(options.removeClass, remove);
+        return $$animateQueue.push(element, 'setClass', options);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $animate#animate
+       * @kind function
+       *
+       * @description Performs an inline animation on the element which applies the provided to and from CSS styles to the element.
+       * If any detected CSS transition, keyframe or JavaScript matches the provided className value then the animation will take
+       * on the provided styles. For example, if a transition animation is set for the given className then the provided from and
+       * to styles will be applied alongside the given transition. If a JavaScript animation is detected then the provided styles
+       * will be given in as function paramters into the `animate` method (or as apart of the `options` parameter).
+       *
+       * @param {DOMElement} element the element which the CSS styles will be applied to
+       * @param {object} from the from (starting) CSS styles that will be applied to the element and across the animation.
+       * @param {object} to the to (destination) CSS styles that will be applied to the element and across the animation.
+       * @param {string=} className an optional CSS class that will be applied to the element for the duration of the animation. If
+       *    this value is left as empty then a CSS class of `ng-inline-animate` will be applied to the element.
+       *    (Note that if no animation is detected then this value will not be appplied to the element.)
+       * @param {object=} options an optional collection of options/styles that will be applied to the element
+       *
+       * @return {Promise} the animation callback promise
+       */
+      animate: function(element, from, to, className, options) {
+        options = prepareAnimateOptions(options);
+        options.from = options.from ? extend(options.from, from) : from;
+        options.to   = options.to   ? extend(options.to, to)     : to;
+
+        className = className || 'ng-inline-animate';
+        options.tempClasses = mergeClasses(options.tempClasses, className);
+        return $$animateQueue.push(element, 'animate', options);
+      }
+    };
+  }];
+}];
+
+/**
+ * @ngdoc service
+ * @name $animateCss
+ * @kind object
+ *
+ * @description
+ * This is the core version of `$animateCss`. By default, only when the `ngAnimate` is included,
+ * then the `$animateCss` service will actually perform animations.
+ *
+ * Click here {@link ngAnimate.$animateCss to read the documentation for $animateCss}.
+ */
+var $CoreAnimateCssProvider = function() {
+  this.$get = ['$$rAF', '$q', function($$rAF, $q) {
+
+    var RAFPromise = function() {};
+    RAFPromise.prototype = {
+      done: function(cancel) {
+        this.defer && this.defer[cancel === true ? 'reject' : 'resolve']();
+      },
+      end: function() {
+        this.done();
+      },
+      cancel: function() {
+        this.done(true);
+      },
+      getPromise: function() {
+        if (!this.defer) {
+          this.defer = $q.defer();
+        }
+        return this.defer.promise;
+      },
+      then: function(f1,f2) {
+        return this.getPromise().then(f1,f2);
+      },
+      'catch': function(f1) {
+        return this.getPromise()['catch'](f1);
+      },
+      'finally': function(f1) {
+        return this.getPromise()['finally'](f1);
+      }
+    };
+
+    return function(element, options) {
+      // there is no point in applying the styles since
+      // there is no animation that goes on at all in
+      // this version of $animateCss.
+      if (options.cleanupStyles) {
+        options.from = options.to = null;
+      }
+
+      if (options.from) {
+        element.css(options.from);
+        options.from = null;
+      }
+
+      var closed, runner = new RAFPromise();
+      return {
+        start: run,
+        end: run
+      };
+
+      function run() {
+        $$rAF(function() {
+          close();
+          if (!closed) {
+            runner.done();
+          }
+          closed = true;
+        });
+        return runner;
+      }
+
+      function close() {
+        if (options.addClass) {
+          element.addClass(options.addClass);
+          options.addClass = null;
+        }
+        if (options.removeClass) {
+          element.removeClass(options.removeClass);
+          options.removeClass = null;
+        }
+        if (options.to) {
+          element.css(options.to);
+          options.to = null;
+        }
+      }
+    };
+  }];
+};
+
+/* global stripHash: true */
+
+/**
+ * ! This is a private undocumented service !
+ *
+ * @name $browser
+ * @requires $log
+ * @description
+ * This object has two goals:
+ *
+ * - hide all the global state in the browser caused by the window object
+ * - abstract away all the browser specific features and inconsistencies
+ *
+ * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser`
+ * service, which can be used for convenient testing of the application without the interaction with
+ * the real browser apis.
+ */
+/**
+ * @param {object} window The global window object.
+ * @param {object} document jQuery wrapped document.
+ * @param {object} $log window.console or an object with the same interface.
+ * @param {object} $sniffer $sniffer service
+ */
+function Browser(window, document, $log, $sniffer) {
+  var self = this,
+      rawDocument = document[0],
+      location = window.location,
+      history = window.history,
+      setTimeout = window.setTimeout,
+      clearTimeout = window.clearTimeout,
+      pendingDeferIds = {};
+
+  self.isMock = false;
+
+  var outstandingRequestCount = 0;
+  var outstandingRequestCallbacks = [];
+
+  // TODO(vojta): remove this temporary api
+  self.$$completeOutstandingRequest = completeOutstandingRequest;
+  self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; };
+
+  /**
+   * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks`
+   * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed.
+   */
+  function completeOutstandingRequest(fn) {
+    try {
+      fn.apply(null, sliceArgs(arguments, 1));
+    } finally {
+      outstandingRequestCount--;
+      if (outstandingRequestCount === 0) {
+        while (outstandingRequestCallbacks.length) {
+          try {
+            outstandingRequestCallbacks.pop()();
+          } catch (e) {
+            $log.error(e);
+          }
+        }
+      }
+    }
+  }
+
+  function getHash(url) {
+    var index = url.indexOf('#');
+    return index === -1 ? '' : url.substr(index);
+  }
+
+  /**
+   * @private
+   * Note: this method is used only by scenario runner
+   * TODO(vojta): prefix this method with $$ ?
+   * @param {function()} callback Function that will be called when no outstanding request
+   */
+  self.notifyWhenNoOutstandingRequests = function(callback) {
+    if (outstandingRequestCount === 0) {
+      callback();
+    } else {
+      outstandingRequestCallbacks.push(callback);
+    }
+  };
+
+  //////////////////////////////////////////////////////////////
+  // URL API
+  //////////////////////////////////////////////////////////////
+
+  var cachedState, lastHistoryState,
+      lastBrowserUrl = location.href,
+      baseElement = document.find('base'),
+      pendingLocation = null;
+
+  cacheState();
+  lastHistoryState = cachedState;
+
+  /**
+   * @name $browser#url
+   *
+   * @description
+   * GETTER:
+   * Without any argument, this method just returns current value of location.href.
+   *
+   * SETTER:
+   * With at least one argument, this method sets url to new value.
+   * If html5 history api supported, pushState/replaceState is used, otherwise
+   * location.href/location.replace is used.
+   * Returns its own instance to allow chaining
+   *
+   * NOTE: this api is intended for use only by the $location service. Please use the
+   * {@link ng.$location $location service} to change url.
+   *
+   * @param {string} url New url (when used as setter)
+   * @param {boolean=} replace Should new url replace current history record?
+   * @param {object=} state object to use with pushState/replaceState
+   */
+  self.url = function(url, replace, state) {
+    // In modern browsers `history.state` is `null` by default; treating it separately
+    // from `undefined` would cause `$browser.url('/foo')` to change `history.state`
+    // to undefined via `pushState`. Instead, let's change `undefined` to `null` here.
+    if (isUndefined(state)) {
+      state = null;
+    }
+
+    // Android Browser BFCache causes location, history reference to become stale.
+    if (location !== window.location) location = window.location;
+    if (history !== window.history) history = window.history;
+
+    // setter
+    if (url) {
+      var sameState = lastHistoryState === state;
+
+      // Don't change anything if previous and current URLs and states match. This also prevents
+      // IE<10 from getting into redirect loop when in LocationHashbangInHtml5Url mode.
+      // See https://github.com/angular/angular.js/commit/ffb2701
+      if (lastBrowserUrl === url && (!$sniffer.history || sameState)) {
+        return self;
+      }
+      var sameBase = lastBrowserUrl && stripHash(lastBrowserUrl) === stripHash(url);
+      lastBrowserUrl = url;
+      lastHistoryState = state;
+      // Don't use history API if only the hash changed
+      // due to a bug in IE10/IE11 which leads
+      // to not firing a `hashchange` nor `popstate` event
+      // in some cases (see #9143).
+      if ($sniffer.history && (!sameBase || !sameState)) {
+        history[replace ? 'replaceState' : 'pushState'](state, '', url);
+        cacheState();
+        // Do the assignment again so that those two variables are referentially identical.
+        lastHistoryState = cachedState;
+      } else {
+        if (!sameBase || pendingLocation) {
+          pendingLocation = url;
+        }
+        if (replace) {
+          location.replace(url);
+        } else if (!sameBase) {
+          location.href = url;
+        } else {
+          location.hash = getHash(url);
+        }
+        if (location.href !== url) {
+          pendingLocation = url;
+        }
+      }
+      return self;
+    // getter
+    } else {
+      // - pendingLocation is needed as browsers don't allow to read out
+      //   the new location.href if a reload happened or if there is a bug like in iOS 9 (see
+      //   https://openradar.appspot.com/22186109).
+      // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172
+      return pendingLocation || location.href.replace(/%27/g,"'");
+    }
+  };
+
+  /**
+   * @name $browser#state
+   *
+   * @description
+   * This method is a getter.
+   *
+   * Return history.state or null if history.state is undefined.
+   *
+   * @returns {object} state
+   */
+  self.state = function() {
+    return cachedState;
+  };
+
+  var urlChangeListeners = [],
+      urlChangeInit = false;
+
+  function cacheStateAndFireUrlChange() {
+    pendingLocation = null;
+    cacheState();
+    fireUrlChange();
+  }
+
+  function getCurrentState() {
+    try {
+      return history.state;
+    } catch (e) {
+      // MSIE can reportedly throw when there is no state (UNCONFIRMED).
+    }
+  }
+
+  // This variable should be used *only* inside the cacheState function.
+  var lastCachedState = null;
+  function cacheState() {
+    // This should be the only place in $browser where `history.state` is read.
+    cachedState = getCurrentState();
+    cachedState = isUndefined(cachedState) ? null : cachedState;
+
+    // Prevent callbacks fo fire twice if both hashchange & popstate were fired.
+    if (equals(cachedState, lastCachedState)) {
+      cachedState = lastCachedState;
+    }
+    lastCachedState = cachedState;
+  }
+
+  function fireUrlChange() {
+    if (lastBrowserUrl === self.url() && lastHistoryState === cachedState) {
+      return;
+    }
+
+    lastBrowserUrl = self.url();
+    lastHistoryState = cachedState;
+    forEach(urlChangeListeners, function(listener) {
+      listener(self.url(), cachedState);
+    });
+  }
+
+  /**
+   * @name $browser#onUrlChange
+   *
+   * @description
+   * Register callback function that will be called, when url changes.
+   *
+   * It's only called when the url is changed from outside of angular:
+   * - user types different url into address bar
+   * - user clicks on history (forward/back) button
+   * - user clicks on a link
+   *
+   * It's not called when url is changed by $browser.url() method
+   *
+   * The listener gets called with new url as parameter.
+   *
+   * NOTE: this api is intended for use only by the $location service. Please use the
+   * {@link ng.$location $location service} to monitor url changes in angular apps.
+   *
+   * @param {function(string)} listener Listener function to be called when url changes.
+   * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous.
+   */
+  self.onUrlChange = function(callback) {
+    // TODO(vojta): refactor to use node's syntax for events
+    if (!urlChangeInit) {
+      // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera)
+      // don't fire popstate when user change the address bar and don't fire hashchange when url
+      // changed by push/replaceState
+
+      // html5 history api - popstate event
+      if ($sniffer.history) jqLite(window).on('popstate', cacheStateAndFireUrlChange);
+      // hashchange event
+      jqLite(window).on('hashchange', cacheStateAndFireUrlChange);
+
+      urlChangeInit = true;
+    }
+
+    urlChangeListeners.push(callback);
+    return callback;
+  };
+
+  /**
+   * @private
+   * Remove popstate and hashchange handler from window.
+   *
+   * NOTE: this api is intended for use only by $rootScope.
+   */
+  self.$$applicationDestroyed = function() {
+    jqLite(window).off('hashchange popstate', cacheStateAndFireUrlChange);
+  };
+
+  /**
+   * Checks whether the url has changed outside of Angular.
+   * Needs to be exported to be able to check for changes that have been done in sync,
+   * as hashchange/popstate events fire in async.
+   */
+  self.$$checkUrlChange = fireUrlChange;
+
+  //////////////////////////////////////////////////////////////
+  // Misc API
+  //////////////////////////////////////////////////////////////
+
+  /**
+   * @name $browser#baseHref
+   *
+   * @description
+   * Returns current <base href>
+   * (always relative - without domain)
+   *
+   * @returns {string} The current base href
+   */
+  self.baseHref = function() {
+    var href = baseElement.attr('href');
+    return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : '';
+  };
+
+  /**
+   * @name $browser#defer
+   * @param {function()} fn A function, who's execution should be deferred.
+   * @param {number=} [delay=0] of milliseconds to defer the function execution.
+   * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`.
+   *
+   * @description
+   * Executes a fn asynchronously via `setTimeout(fn, delay)`.
+   *
+   * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using
+   * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed
+   * via `$browser.defer.flush()`.
+   *
+   */
+  self.defer = function(fn, delay) {
+    var timeoutId;
+    outstandingRequestCount++;
+    timeoutId = setTimeout(function() {
+      delete pendingDeferIds[timeoutId];
+      completeOutstandingRequest(fn);
+    }, delay || 0);
+    pendingDeferIds[timeoutId] = true;
+    return timeoutId;
+  };
+
+
+  /**
+   * @name $browser#defer.cancel
+   *
+   * @description
+   * Cancels a deferred task identified with `deferId`.
+   *
+   * @param {*} deferId Token returned by the `$browser.defer` function.
+   * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully
+   *                    canceled.
+   */
+  self.defer.cancel = function(deferId) {
+    if (pendingDeferIds[deferId]) {
+      delete pendingDeferIds[deferId];
+      clearTimeout(deferId);
+      completeOutstandingRequest(noop);
+      return true;
+    }
+    return false;
+  };
+
+}
+
+function $BrowserProvider() {
+  this.$get = ['$window', '$log', '$sniffer', '$document',
+      function($window, $log, $sniffer, $document) {
+        return new Browser($window, $document, $log, $sniffer);
+      }];
+}
+
+/**
+ * @ngdoc service
+ * @name $cacheFactory
+ *
+ * @description
+ * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to
+ * them.
+ *
+ * ```js
+ *
+ *  var cache = $cacheFactory('cacheId');
+ *  expect($cacheFactory.get('cacheId')).toBe(cache);
+ *  expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined();
+ *
+ *  cache.put("key", "value");
+ *  cache.put("another key", "another value");
+ *
+ *  // We've specified no options on creation
+ *  expect(cache.info()).toEqual({id: 'cacheId', size: 2});
+ *
+ * ```
+ *
+ *
+ * @param {string} cacheId Name or id of the newly created cache.
+ * @param {object=} options Options object that specifies the cache behavior. Properties:
+ *
+ *   - `{number=}` `capacity` — turns the cache into LRU cache.
+ *
+ * @returns {object} Newly created cache object with the following set of methods:
+ *
+ * - `{object}` `info()` — Returns id, size, and options of cache.
+ * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns
+ *   it.
+ * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss.
+ * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache.
+ * - `{void}` `removeAll()` — Removes all cached values.
+ * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory.
+ *
+ * @example
+   <example module="cacheExampleApp">
+     <file name="index.html">
+       <div ng-controller="CacheController">
+         <input ng-model="newCacheKey" placeholder="Key">
+         <input ng-model="newCacheValue" placeholder="Value">
+         <button ng-click="put(newCacheKey, newCacheValue)">Cache</button>
+
+         <p ng-if="keys.length">Cached Values</p>
+         <div ng-repeat="key in keys">
+           <span ng-bind="key"></span>
+           <span>: </span>
+           <b ng-bind="cache.get(key)"></b>
+         </div>
+
+         <p>Cache Info</p>
+         <div ng-repeat="(key, value) in cache.info()">
+           <span ng-bind="key"></span>
+           <span>: </span>
+           <b ng-bind="value"></b>
+         </div>
+       </div>
+     </file>
+     <file name="script.js">
+       angular.module('cacheExampleApp', []).
+         controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) {
+           $scope.keys = [];
+           $scope.cache = $cacheFactory('cacheId');
+           $scope.put = function(key, value) {
+             if (angular.isUndefined($scope.cache.get(key))) {
+               $scope.keys.push(key);
+             }
+             $scope.cache.put(key, angular.isUndefined(value) ? null : value);
+           };
+         }]);
+     </file>
+     <file name="style.css">
+       p {
+         margin: 10px 0 3px;
+       }
+     </file>
+   </example>
+ */
+function $CacheFactoryProvider() {
+
+  this.$get = function() {
+    var caches = {};
+
+    function cacheFactory(cacheId, options) {
+      if (cacheId in caches) {
+        throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId);
+      }
+
+      var size = 0,
+          stats = extend({}, options, {id: cacheId}),
+          data = createMap(),
+          capacity = (options && options.capacity) || Number.MAX_VALUE,
+          lruHash = createMap(),
+          freshEnd = null,
+          staleEnd = null;
+
+      /**
+       * @ngdoc type
+       * @name $cacheFactory.Cache
+       *
+       * @description
+       * A cache object used to store and retrieve data, primarily used by
+       * {@link $http $http} and the {@link ng.directive:script script} directive to cache
+       * templates and other data.
+       *
+       * ```js
+       *  angular.module('superCache')
+       *    .factory('superCache', ['$cacheFactory', function($cacheFactory) {
+       *      return $cacheFactory('super-cache');
+       *    }]);
+       * ```
+       *
+       * Example test:
+       *
+       * ```js
+       *  it('should behave like a cache', inject(function(superCache) {
+       *    superCache.put('key', 'value');
+       *    superCache.put('another key', 'another value');
+       *
+       *    expect(superCache.info()).toEqual({
+       *      id: 'super-cache',
+       *      size: 2
+       *    });
+       *
+       *    superCache.remove('another key');
+       *    expect(superCache.get('another key')).toBeUndefined();
+       *
+       *    superCache.removeAll();
+       *    expect(superCache.info()).toEqual({
+       *      id: 'super-cache',
+       *      size: 0
+       *    });
+       *  }));
+       * ```
+       */
+      return caches[cacheId] = {
+
+        /**
+         * @ngdoc method
+         * @name $cacheFactory.Cache#put
+         * @kind function
+         *
+         * @description
+         * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be
+         * retrieved later, and incrementing the size of the cache if the key was not already
+         * present in the cache. If behaving like an LRU cache, it will also remove stale
+         * entries from the set.
+         *
+         * It will not insert undefined values into the cache.
+         *
+         * @param {string} key the key under which the cached data is stored.
+         * @param {*} value the value to store alongside the key. If it is undefined, the key
+         *    will not be stored.
+         * @returns {*} the value stored.
+         */
+        put: function(key, value) {
+          if (isUndefined(value)) return;
+          if (capacity < Number.MAX_VALUE) {
+            var lruEntry = lruHash[key] || (lruHash[key] = {key: key});
+
+            refresh(lruEntry);
+          }
+
+          if (!(key in data)) size++;
+          data[key] = value;
+
+          if (size > capacity) {
+            this.remove(staleEnd.key);
+          }
+
+          return value;
+        },
+
+        /**
+         * @ngdoc method
+         * @name $cacheFactory.Cache#get
+         * @kind function
+         *
+         * @description
+         * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object.
+         *
+         * @param {string} key the key of the data to be retrieved
+         * @returns {*} the value stored.
+         */
+        get: function(key) {
+          if (capacity < Number.MAX_VALUE) {
+            var lruEntry = lruHash[key];
+
+            if (!lruEntry) return;
+
+            refresh(lruEntry);
+          }
+
+          return data[key];
+        },
+
+
+        /**
+         * @ngdoc method
+         * @name $cacheFactory.Cache#remove
+         * @kind function
+         *
+         * @description
+         * Removes an entry from the {@link $cacheFactory.Cache Cache} object.
+         *
+         * @param {string} key the key of the entry to be removed
+         */
+        remove: function(key) {
+          if (capacity < Number.MAX_VALUE) {
+            var lruEntry = lruHash[key];
+
+            if (!lruEntry) return;
+
+            if (lruEntry == freshEnd) freshEnd = lruEntry.p;
+            if (lruEntry == staleEnd) staleEnd = lruEntry.n;
+            link(lruEntry.n,lruEntry.p);
+
+            delete lruHash[key];
+          }
+
+          if (!(key in data)) return;
+
+          delete data[key];
+          size--;
+        },
+
+
+        /**
+         * @ngdoc method
+         * @name $cacheFactory.Cache#removeAll
+         * @kind function
+         *
+         * @description
+         * Clears the cache object of any entries.
+         */
+        removeAll: function() {
+          data = createMap();
+          size = 0;
+          lruHash = createMap();
+          freshEnd = staleEnd = null;
+        },
+
+
+        /**
+         * @ngdoc method
+         * @name $cacheFactory.Cache#destroy
+         * @kind function
+         *
+         * @description
+         * Destroys the {@link $cacheFactory.Cache Cache} object entirely,
+         * removing it from the {@link $cacheFactory $cacheFactory} set.
+         */
+        destroy: function() {
+          data = null;
+          stats = null;
+          lruHash = null;
+          delete caches[cacheId];
+        },
+
+
+        /**
+         * @ngdoc method
+         * @name $cacheFactory.Cache#info
+         * @kind function
+         *
+         * @description
+         * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}.
+         *
+         * @returns {object} an object with the following properties:
+         *   <ul>
+         *     <li>**id**: the id of the cache instance</li>
+         *     <li>**size**: the number of entries kept in the cache instance</li>
+         *     <li>**...**: any additional properties from the options object when creating the
+         *       cache.</li>
+         *   </ul>
+         */
+        info: function() {
+          return extend({}, stats, {size: size});
+        }
+      };
+
+
+      /**
+       * makes the `entry` the freshEnd of the LRU linked list
+       */
+      function refresh(entry) {
+        if (entry != freshEnd) {
+          if (!staleEnd) {
+            staleEnd = entry;
+          } else if (staleEnd == entry) {
+            staleEnd = entry.n;
+          }
+
+          link(entry.n, entry.p);
+          link(entry, freshEnd);
+          freshEnd = entry;
+          freshEnd.n = null;
+        }
+      }
+
+
+      /**
+       * bidirectionally links two entries of the LRU linked list
+       */
+      function link(nextEntry, prevEntry) {
+        if (nextEntry != prevEntry) {
+          if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify
+          if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify
+        }
+      }
+    }
+
+
+  /**
+   * @ngdoc method
+   * @name $cacheFactory#info
+   *
+   * @description
+   * Get information about all the caches that have been created
+   *
+   * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info`
+   */
+    cacheFactory.info = function() {
+      var info = {};
+      forEach(caches, function(cache, cacheId) {
+        info[cacheId] = cache.info();
+      });
+      return info;
+    };
+
+
+  /**
+   * @ngdoc method
+   * @name $cacheFactory#get
+   *
+   * @description
+   * Get access to a cache object by the `cacheId` used when it was created.
+   *
+   * @param {string} cacheId Name or id of a cache to access.
+   * @returns {object} Cache object identified by the cacheId or undefined if no such cache.
+   */
+    cacheFactory.get = function(cacheId) {
+      return caches[cacheId];
+    };
+
+
+    return cacheFactory;
+  };
+}
+
+/**
+ * @ngdoc service
+ * @name $templateCache
+ *
+ * @description
+ * The first time a template is used, it is loaded in the template cache for quick retrieval. You
+ * can load templates directly into the cache in a `script` tag, or by consuming the
+ * `$templateCache` service directly.
+ *
+ * Adding via the `script` tag:
+ *
+ * ```html
+ *   <script type="text/ng-template" id="templateId.html">
+ *     <p>This is the content of the template</p>
+ *   </script>
+ * ```
+ *
+ * **Note:** the `script` tag containing the template does not need to be included in the `head` of
+ * the document, but it must be a descendent of the {@link ng.$rootElement $rootElement} (IE,
+ * element with ng-app attribute), otherwise the template will be ignored.
+ *
+ * Adding via the `$templateCache` service:
+ *
+ * ```js
+ * var myApp = angular.module('myApp', []);
+ * myApp.run(function($templateCache) {
+ *   $templateCache.put('templateId.html', 'This is the content of the template');
+ * });
+ * ```
+ *
+ * To retrieve the template later, simply use it in your HTML:
+ * ```html
+ * <div ng-include=" 'templateId.html' "></div>
+ * ```
+ *
+ * or get it via Javascript:
+ * ```js
+ * $templateCache.get('templateId.html')
+ * ```
+ *
+ * See {@link ng.$cacheFactory $cacheFactory}.
+ *
+ */
+function $TemplateCacheProvider() {
+  this.$get = ['$cacheFactory', function($cacheFactory) {
+    return $cacheFactory('templates');
+  }];
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *     Any commits to this file should be reviewed with security in mind.  *
+ *   Changes to this file can potentially create security vulnerabilities. *
+ *          An approval from 2 Core members with history of modifying      *
+ *                         this file is required.                          *
+ *                                                                         *
+ *  Does the change somehow allow for arbitrary javascript to be executed? *
+ *    Or allows for someone to change the prototype of built-in objects?   *
+ *     Or gives undesired access to variables likes document or window?    *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE!
+ *
+ * DOM-related variables:
+ *
+ * - "node" - DOM Node
+ * - "element" - DOM Element or Node
+ * - "$node" or "$element" - jqLite-wrapped node or element
+ *
+ *
+ * Compiler related stuff:
+ *
+ * - "linkFn" - linking fn of a single directive
+ * - "nodeLinkFn" - function that aggregates all linking fns for a particular node
+ * - "childLinkFn" -  function that aggregates all linking fns for child nodes of a particular node
+ * - "compositeLinkFn" - function that aggregates all linking fns for a compilation root (nodeList)
+ */
+
+
+/**
+ * @ngdoc service
+ * @name $compile
+ * @kind function
+ *
+ * @description
+ * Compiles an HTML string or DOM into a template and produces a template function, which
+ * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together.
+ *
+ * The compilation is a process of walking the DOM tree and matching DOM elements to
+ * {@link ng.$compileProvider#directive directives}.
+ *
+ * <div class="alert alert-warning">
+ * **Note:** This document is an in-depth reference of all directive options.
+ * For a gentle introduction to directives with examples of common use cases,
+ * see the {@link guide/directive directive guide}.
+ * </div>
+ *
+ * ## Comprehensive Directive API
+ *
+ * There are many different options for a directive.
+ *
+ * The difference resides in the return value of the factory function.
+ * You can either return a "Directive Definition Object" (see below) that defines the directive properties,
+ * or just the `postLink` function (all other properties will have the default values).
+ *
+ * <div class="alert alert-success">
+ * **Best Practice:** It's recommended to use the "directive definition object" form.
+ * </div>
+ *
+ * Here's an example directive declared with a Directive Definition Object:
+ *
+ * ```js
+ *   var myModule = angular.module(...);
+ *
+ *   myModule.directive('directiveName', function factory(injectables) {
+ *     var directiveDefinitionObject = {
+ *       priority: 0,
+ *       template: '<div></div>', // or // function(tElement, tAttrs) { ... },
+ *       // or
+ *       // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... },
+ *       transclude: false,
+ *       restrict: 'A',
+ *       templateNamespace: 'html',
+ *       scope: false,
+ *       controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... },
+ *       controllerAs: 'stringIdentifier',
+ *       bindToController: false,
+ *       require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'],
+ *       compile: function compile(tElement, tAttrs, transclude) {
+ *         return {
+ *           pre: function preLink(scope, iElement, iAttrs, controller) { ... },
+ *           post: function postLink(scope, iElement, iAttrs, controller) { ... }
+ *         }
+ *         // or
+ *         // return function postLink( ... ) { ... }
+ *       },
+ *       // or
+ *       // link: {
+ *       //  pre: function preLink(scope, iElement, iAttrs, controller) { ... },
+ *       //  post: function postLink(scope, iElement, iAttrs, controller) { ... }
+ *       // }
+ *       // or
+ *       // link: function postLink( ... ) { ... }
+ *     };
+ *     return directiveDefinitionObject;
+ *   });
+ * ```
+ *
+ * <div class="alert alert-warning">
+ * **Note:** Any unspecified options will use the default value. You can see the default values below.
+ * </div>
+ *
+ * Therefore the above can be simplified as:
+ *
+ * ```js
+ *   var myModule = angular.module(...);
+ *
+ *   myModule.directive('directiveName', function factory(injectables) {
+ *     var directiveDefinitionObject = {
+ *       link: function postLink(scope, iElement, iAttrs) { ... }
+ *     };
+ *     return directiveDefinitionObject;
+ *     // or
+ *     // return function postLink(scope, iElement, iAttrs) { ... }
+ *   });
+ * ```
+ *
+ *
+ *
+ * ### Directive Definition Object
+ *
+ * The directive definition object provides instructions to the {@link ng.$compile
+ * compiler}. The attributes are:
+ *
+ * #### `multiElement`
+ * When this property is set to true, the HTML compiler will collect DOM nodes between
+ * nodes with the attributes `directive-name-start` and `directive-name-end`, and group them
+ * together as the directive elements. It is recommended that this feature be used on directives
+ * which are not strictly behavioural (such as {@link ngClick}), and which
+ * do not manipulate or replace child nodes (such as {@link ngInclude}).
+ *
+ * #### `priority`
+ * When there are multiple directives defined on a single DOM element, sometimes it
+ * is necessary to specify the order in which the directives are applied. The `priority` is used
+ * to sort the directives before their `compile` functions get called. Priority is defined as a
+ * number. Directives with greater numerical `priority` are compiled first. Pre-link functions
+ * are also run in priority order, but post-link functions are run in reverse order. The order
+ * of directives with the same priority is undefined. The default priority is `0`.
+ *
+ * #### `terminal`
+ * If set to true then the current `priority` will be the last set of directives
+ * which will execute (any directives at the current priority will still execute
+ * as the order of execution on same `priority` is undefined). Note that expressions
+ * and other directives used in the directive's template will also be excluded from execution.
+ *
+ * #### `scope`
+ * The scope property can be `true`, an object or a falsy value:
+ *
+ * * **falsy:** No scope will be created for the directive. The directive will use its parent's scope.
+ *
+ * * **`true`:** A new child scope that prototypically inherits from its parent will be created for
+ * the directive's element. If multiple directives on the same element request a new scope,
+ * only one new scope is created. The new scope rule does not apply for the root of the template
+ * since the root of the template always gets a new scope.
+ *
+ * * **`{...}` (an object hash):** A new "isolate" scope is created for the directive's element. The
+ * 'isolate' scope differs from normal scope in that it does not prototypically inherit from its parent
+ * scope. This is useful when creating reusable components, which should not accidentally read or modify
+ * data in the parent scope.
+ *
+ * The 'isolate' scope object hash defines a set of local scope properties derived from attributes on the
+ * directive's element. These local properties are useful for aliasing values for templates. The keys in
+ * the object hash map to the name of the property on the isolate scope; the values define how the property
+ * is bound to the parent scope, via matching attributes on the directive's element:
+ *
+ * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is
+ *   always a string since DOM attributes are strings. If no `attr` name is specified  then the
+ *   attribute name is assumed to be the same as the local name.
+ *   Given `<widget my-attr="hello {{name}}">` and widget definition
+ *   of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect
+ *   the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the
+ *   `localName` property on the widget scope. The `name` is read from the parent scope (not
+ *   component scope).
+ *
+ * * `=` or `=attr` - set up bi-directional binding between a local scope property and the
+ *   parent scope property of name defined via the value of the `attr` attribute. If no `attr`
+ *   name is specified then the attribute name is assumed to be the same as the local name.
+ *   Given `<widget my-attr="parentModel">` and widget definition of
+ *   `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the
+ *   value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected
+ *   in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent
+ *   scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You
+ *   can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional. If
+ *   you want to shallow watch for changes (i.e. $watchCollection instead of $watch) you can use
+ *   `=*` or `=*attr` (`=*?` or `=*?attr` if the property is optional).
+ *
+ * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope.
+ *   If no `attr` name is specified then the attribute name is assumed to be the same as the
+ *   local name. Given `<widget my-attr="count = count + value">` and widget definition of
+ *   `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to
+ *   a function wrapper for the `count = count + value` expression. Often it's desirable to
+ *   pass data from the isolated scope via an expression to the parent scope, this can be
+ *   done by passing a map of local variable names and values into the expression wrapper fn.
+ *   For example, if the expression is `increment(amount)` then we can specify the amount value
+ *   by calling the `localFn` as `localFn({amount: 22})`.
+ *
+ * In general it's possible to apply more than one directive to one element, but there might be limitations
+ * depending on the type of scope required by the directives. The following points will help explain these limitations.
+ * For simplicity only two directives are taken into account, but it is also applicable for several directives:
+ *
+ * * **no scope** + **no scope** => Two directives which don't require their own scope will use their parent's scope
+ * * **child scope** + **no scope** =>  Both directives will share one single child scope
+ * * **child scope** + **child scope** =>  Both directives will share one single child scope
+ * * **isolated scope** + **no scope** =>  The isolated directive will use it's own created isolated scope. The other directive will use
+ * its parent's scope
+ * * **isolated scope** + **child scope** =>  **Won't work!** Only one scope can be related to one element. Therefore these directives cannot
+ * be applied to the same element.
+ * * **isolated scope** + **isolated scope**  =>  **Won't work!** Only one scope can be related to one element. Therefore these directives
+ * cannot be applied to the same element.
+ *
+ *
+ * #### `bindToController`
+ * When an isolate scope is used for a component (see above), and `controllerAs` is used, `bindToController: true` will
+ * allow a component to have its properties bound to the controller, rather than to scope. When the controller
+ * is instantiated, the initial values of the isolate scope bindings are already available.
+ *
+ * #### `controller`
+ * Controller constructor function. The controller is instantiated before the
+ * pre-linking phase and can be accessed by other directives (see
+ * `require` attribute). This allows the directives to communicate with each other and augment
+ * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals:
+ *
+ * * `$scope` - Current scope associated with the element
+ * * `$element` - Current element
+ * * `$attrs` - Current attributes object for the element
+ * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope:
+ *   `function([scope], cloneLinkingFn, futureParentElement)`.
+ *    * `scope`: optional argument to override the scope.
+ *    * `cloneLinkingFn`: optional argument to create clones of the original transcluded content.
+ *    * `futureParentElement`:
+ *        * defines the parent to which the `cloneLinkingFn` will add the cloned elements.
+ *        * default: `$element.parent()` resp. `$element` for `transclude:'element'` resp. `transclude:true`.
+ *        * only needed for transcludes that are allowed to contain non html elements (e.g. SVG elements)
+ *          and when the `cloneLinkinFn` is passed,
+ *          as those elements need to created and cloned in a special way when they are defined outside their
+ *          usual containers (e.g. like `<svg>`).
+ *        * See also the `directive.templateNamespace` property.
+ *
+ *
+ * #### `require`
+ * Require another directive and inject its controller as the fourth argument to the linking function. The
+ * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the
+ * injected argument will be an array in corresponding order. If no such directive can be
+ * found, or if the directive does not have a controller, then an error is raised (unless no link function
+ * is specified, in which case error checking is skipped). The name can be prefixed with:
+ *
+ * * (no prefix) - Locate the required controller on the current element. Throw an error if not found.
+ * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found.
+ * * `^` - Locate the required controller by searching the element and its parents. Throw an error if not found.
+ * * `^^` - Locate the required controller by searching the element's parents. Throw an error if not found.
+ * * `?^` - Attempt to locate the required controller by searching the element and its parents or pass
+ *   `null` to the `link` fn if not found.
+ * * `?^^` - Attempt to locate the required controller by searching the element's parents, or pass
+ *   `null` to the `link` fn if not found.
+ *
+ *
+ * #### `controllerAs`
+ * Identifier name for a reference to the controller in the directive's scope.
+ * This allows the controller to be referenced from the directive template. This is especially
+ * useful when a directive is used as component, i.e. with an `isolate` scope. It's also possible
+ * to use it in a directive without an `isolate` / `new` scope, but you need to be aware that the
+ * `controllerAs` reference might overwrite a property that already exists on the parent scope.
+ *
+ *
+ * #### `restrict`
+ * String of subset of `EACM` which restricts the directive to a specific directive
+ * declaration style. If omitted, the defaults (elements and attributes) are used.
+ *
+ * * `E` - Element name (default): `<my-directive></my-directive>`
+ * * `A` - Attribute (default): `<div my-directive="exp"></div>`
+ * * `C` - Class: `<div class="my-directive: exp;"></div>`
+ * * `M` - Comment: `<!-- directive: my-directive exp -->`
+ *
+ *
+ * #### `templateNamespace`
+ * String representing the document type used by the markup in the template.
+ * AngularJS needs this information as those elements need to be created and cloned
+ * in a special way when they are defined outside their usual containers like `<svg>` and `<math>`.
+ *
+ * * `html` - All root nodes in the template are HTML. Root nodes may also be
+ *   top-level elements such as `<svg>` or `<math>`.
+ * * `svg` - The root nodes in the template are SVG elements (excluding `<math>`).
+ * * `math` - The root nodes in the template are MathML elements (excluding `<svg>`).
+ *
+ * If no `templateNamespace` is specified, then the namespace is considered to be `html`.
+ *
+ * #### `template`
+ * HTML markup that may:
+ * * Replace the contents of the directive's element (default).
+ * * Replace the directive's element itself (if `replace` is true - DEPRECATED).
+ * * Wrap the contents of the directive's element (if `transclude` is true).
+ *
+ * Value may be:
+ *
+ * * A string. For example `<div red-on-hover>{{delete_str}}</div>`.
+ * * A function which takes two arguments `tElement` and `tAttrs` (described in the `compile`
+ *   function api below) and returns a string value.
+ *
+ *
+ * #### `templateUrl`
+ * This is similar to `template` but the template is loaded from the specified URL, asynchronously.
+ *
+ * Because template loading is asynchronous the compiler will suspend compilation of directives on that element
+ * for later when the template has been resolved.  In the meantime it will continue to compile and link
+ * sibling and parent elements as though this element had not contained any directives.
+ *
+ * The compiler does not suspend the entire compilation to wait for templates to be loaded because this
+ * would result in the whole app "stalling" until all templates are loaded asynchronously - even in the
+ * case when only one deeply nested directive has `templateUrl`.
+ *
+ * Template loading is asynchronous even if the template has been preloaded into the {@link $templateCache}
+ *
+ * You can specify `templateUrl` as a string representing the URL or as a function which takes two
+ * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns
+ * a string value representing the url.  In either case, the template URL is passed through {@link
+ * $sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}.
+ *
+ *
+ * #### `replace` ([*DEPRECATED*!], will be removed in next major release - i.e. v2.0)
+ * specify what the template should replace. Defaults to `false`.
+ *
+ * * `true` - the template will replace the directive's element.
+ * * `false` - the template will replace the contents of the directive's element.
+ *
+ * The replacement process migrates all of the attributes / classes from the old element to the new
+ * one. See the {@link guide/directive#template-expanding-directive
+ * Directives Guide} for an example.
+ *
+ * There are very few scenarios where element replacement is required for the application function,
+ * the main one being reusable custom components that are used within SVG contexts
+ * (because SVG doesn't work with custom elements in the DOM tree).
+ *
+ * #### `transclude`
+ * Extract the contents of the element where the directive appears and make it available to the directive.
+ * The contents are compiled and provided to the directive as a **transclusion function**. See the
+ * {@link $compile#transclusion Transclusion} section below.
+ *
+ * There are two kinds of transclusion depending upon whether you want to transclude just the contents of the
+ * directive's element or the entire element:
+ *
+ * * `true` - transclude the content (i.e. the child nodes) of the directive's element.
+ * * `'element'` - transclude the whole of the directive's element including any directives on this
+ *   element that defined at a lower priority than this directive. When used, the `template`
+ *   property is ignored.
+ *
+ *
+ * #### `compile`
+ *
+ * ```js
+ *   function compile(tElement, tAttrs, transclude) { ... }
+ * ```
+ *
+ * The compile function deals with transforming the template DOM. Since most directives do not do
+ * template transformation, it is not used often. The compile function takes the following arguments:
+ *
+ *   * `tElement` - template element - The element where the directive has been declared. It is
+ *     safe to do template transformation on the element and child elements only.
+ *
+ *   * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared
+ *     between all directive compile functions.
+ *
+ *   * `transclude` -  [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)`
+ *
+ * <div class="alert alert-warning">
+ * **Note:** The template instance and the link instance may be different objects if the template has
+ * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that
+ * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration
+ * should be done in a linking function rather than in a compile function.
+ * </div>
+
+ * <div class="alert alert-warning">
+ * **Note:** The compile function cannot handle directives that recursively use themselves in their
+ * own templates or compile functions. Compiling these directives results in an infinite loop and a
+ * stack overflow errors.
+ *
+ * This can be avoided by manually using $compile in the postLink function to imperatively compile
+ * a directive's template instead of relying on automatic template compilation via `template` or
+ * `templateUrl` declaration or manual compilation inside the compile function.
+ * </div>
+ *
+ * <div class="alert alert-danger">
+ * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it
+ *   e.g. does not know about the right outer scope. Please use the transclude function that is passed
+ *   to the link function instead.
+ * </div>
+
+ * A compile function can have a return value which can be either a function or an object.
+ *
+ * * returning a (post-link) function - is equivalent to registering the linking function via the
+ *   `link` property of the config object when the compile function is empty.
+ *
+ * * returning an object with function(s) registered via `pre` and `post` properties - allows you to
+ *   control when a linking function should be called during the linking phase. See info about
+ *   pre-linking and post-linking functions below.
+ *
+ *
+ * #### `link`
+ * This property is used only if the `compile` property is not defined.
+ *
+ * ```js
+ *   function link(scope, iElement, iAttrs, controller, transcludeFn) { ... }
+ * ```
+ *
+ * The link function is responsible for registering DOM listeners as well as updating the DOM. It is
+ * executed after the template has been cloned. This is where most of the directive logic will be
+ * put.
+ *
+ *   * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the
+ *     directive for registering {@link ng.$rootScope.Scope#$watch watches}.
+ *
+ *   * `iElement` - instance element - The element where the directive is to be used. It is safe to
+ *     manipulate the children of the element only in `postLink` function since the children have
+ *     already been linked.
+ *
+ *   * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared
+ *     between all directive linking functions.
+ *
+ *   * `controller` - the directive's required controller instance(s) - Instances are shared
+ *     among all directives, which allows the directives to use the controllers as a communication
+ *     channel. The exact value depends on the directive's `require` property:
+ *       * no controller(s) required: the directive's own controller, or `undefined` if it doesn't have one
+ *       * `string`: the controller instance
+ *       * `array`: array of controller instances
+ *
+ *     If a required controller cannot be found, and it is optional, the instance is `null`,
+ *     otherwise the {@link error:$compile:ctreq Missing Required Controller} error is thrown.
+ *
+ *     Note that you can also require the directive's own controller - it will be made available like
+ *     any other controller.
+ *
+ *   * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope.
+ *     This is the same as the `$transclude`
+ *     parameter of directive controllers, see there for details.
+ *     `function([scope], cloneLinkingFn, futureParentElement)`.
+ *
+ * #### Pre-linking function
+ *
+ * Executed before the child elements are linked. Not safe to do DOM transformation since the
+ * compiler linking function will fail to locate the correct elements for linking.
+ *
+ * #### Post-linking function
+ *
+ * Executed after the child elements are linked.
+ *
+ * Note that child elements that contain `templateUrl` directives will not have been compiled
+ * and linked since they are waiting for their template to load asynchronously and their own
+ * compilation and linking has been suspended until that occurs.
+ *
+ * It is safe to do DOM transformation in the post-linking function on elements that are not waiting
+ * for their async templates to be resolved.
+ *
+ *
+ * ### Transclusion
+ *
+ * Transclusion is the process of extracting a collection of DOM elements from one part of the DOM and
+ * copying them to another part of the DOM, while maintaining their connection to the original AngularJS
+ * scope from where they were taken.
+ *
+ * Transclusion is used (often with {@link ngTransclude}) to insert the
+ * original contents of a directive's element into a specified place in the template of the directive.
+ * The benefit of transclusion, over simply moving the DOM elements manually, is that the transcluded
+ * content has access to the properties on the scope from which it was taken, even if the directive
+ * has isolated scope.
+ * See the {@link guide/directive#creating-a-directive-that-wraps-other-elements Directives Guide}.
+ *
+ * This makes it possible for the widget to have private state for its template, while the transcluded
+ * content has access to its originating scope.
+ *
+ * <div class="alert alert-warning">
+ * **Note:** When testing an element transclude directive you must not place the directive at the root of the
+ * DOM fragment that is being compiled. See {@link guide/unit-testing#testing-transclusion-directives
+ * Testing Transclusion Directives}.
+ * </div>
+ *
+ * #### Transclusion Functions
+ *
+ * When a directive requests transclusion, the compiler extracts its contents and provides a **transclusion
+ * function** to the directive's `link` function and `controller`. This transclusion function is a special
+ * **linking function** that will return the compiled contents linked to a new transclusion scope.
+ *
+ * <div class="alert alert-info">
+ * If you are just using {@link ngTransclude} then you don't need to worry about this function, since
+ * ngTransclude will deal with it for us.
+ * </div>
+ *
+ * If you want to manually control the insertion and removal of the transcluded content in your directive
+ * then you must use this transclude function. When you call a transclude function it returns a a jqLite/JQuery
+ * object that contains the compiled DOM, which is linked to the correct transclusion scope.
+ *
+ * When you call a transclusion function you can pass in a **clone attach function**. This function accepts
+ * two parameters, `function(clone, scope) { ... }`, where the `clone` is a fresh compiled copy of your transcluded
+ * content and the `scope` is the newly created transclusion scope, to which the clone is bound.
+ *
+ * <div class="alert alert-info">
+ * **Best Practice**: Always provide a `cloneFn` (clone attach function) when you call a translude function
+ * since you then get a fresh clone of the original DOM and also have access to the new transclusion scope.
+ * </div>
+ *
+ * It is normal practice to attach your transcluded content (`clone`) to the DOM inside your **clone
+ * attach function**:
+ *
+ * ```js
+ * var transcludedContent, transclusionScope;
+ *
+ * $transclude(function(clone, scope) {
+ *   element.append(clone);
+ *   transcludedContent = clone;
+ *   transclusionScope = scope;
+ * });
+ * ```
+ *
+ * Later, if you want to remove the transcluded content from your DOM then you should also destroy the
+ * associated transclusion scope:
+ *
+ * ```js
+ * transcludedContent.remove();
+ * transclusionScope.$destroy();
+ * ```
+ *
+ * <div class="alert alert-info">
+ * **Best Practice**: if you intend to add and remove transcluded content manually in your directive
+ * (by calling the transclude function to get the DOM and calling `element.remove()` to remove it),
+ * then you are also responsible for calling `$destroy` on the transclusion scope.
+ * </div>
+ *
+ * The built-in DOM manipulation directives, such as {@link ngIf}, {@link ngSwitch} and {@link ngRepeat}
+ * automatically destroy their transluded clones as necessary so you do not need to worry about this if
+ * you are simply using {@link ngTransclude} to inject the transclusion into your directive.
+ *
+ *
+ * #### Transclusion Scopes
+ *
+ * When you call a transclude function it returns a DOM fragment that is pre-bound to a **transclusion
+ * scope**. This scope is special, in that it is a child of the directive's scope (and so gets destroyed
+ * when the directive's scope gets destroyed) but it inherits the properties of the scope from which it
+ * was taken.
+ *
+ * For example consider a directive that uses transclusion and isolated scope. The DOM hierarchy might look
+ * like this:
+ *
+ * ```html
+ * <div ng-app>
+ *   <div isolate>
+ *     <div transclusion>
+ *     </div>
+ *   </div>
+ * </div>
+ * ```
+ *
+ * The `$parent` scope hierarchy will look like this:
+ *
+ * ```
+ * - $rootScope
+ *   - isolate
+ *     - transclusion
+ * ```
+ *
+ * but the scopes will inherit prototypically from different scopes to their `$parent`.
+ *
+ * ```
+ * - $rootScope
+ *   - transclusion
+ * - isolate
+ * ```
+ *
+ *
+ * ### Attributes
+ *
+ * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the
+ * `link()` or `compile()` functions. It has a variety of uses.
+ *
+ * accessing *Normalized attribute names:*
+ * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'.
+ * the attributes object allows for normalized access to
+ *   the attributes.
+ *
+ * * *Directive inter-communication:* All directives share the same instance of the attributes
+ *   object which allows the directives to use the attributes object as inter directive
+ *   communication.
+ *
+ * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object
+ *   allowing other directives to read the interpolated value.
+ *
+ * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes
+ *   that contain interpolation (e.g. `src="{{bar}}"`). Not only is this very efficient but it's also
+ *   the only way to easily get the actual value because during the linking phase the interpolation
+ *   hasn't been evaluated yet and so the value is at this time set to `undefined`.
+ *
+ * ```js
+ * function linkingFn(scope, elm, attrs, ctrl) {
+ *   // get the attribute value
+ *   console.log(attrs.ngModel);
+ *
+ *   // change the attribute
+ *   attrs.$set('ngModel', 'new value');
+ *
+ *   // observe changes to interpolated attribute
+ *   attrs.$observe('ngModel', function(value) {
+ *     console.log('ngModel has changed value to ' + value);
+ *   });
+ * }
+ * ```
+ *
+ * ## Example
+ *
+ * <div class="alert alert-warning">
+ * **Note**: Typically directives are registered with `module.directive`. The example below is
+ * to illustrate how `$compile` works.
+ * </div>
+ *
+ <example module="compileExample">
+   <file name="index.html">
+    <script>
+      angular.module('compileExample', [], function($compileProvider) {
+        // configure new 'compile' directive by passing a directive
+        // factory function. The factory function injects the '$compile'
+        $compileProvider.directive('compile', function($compile) {
+          // directive factory creates a link function
+          return function(scope, element, attrs) {
+            scope.$watch(
+              function(scope) {
+                 // watch the 'compile' expression for changes
+                return scope.$eval(attrs.compile);
+              },
+              function(value) {
+                // when the 'compile' expression changes
+                // assign it into the current DOM
+                element.html(value);
+
+                // compile the new DOM and link it to the current
+                // scope.
+                // NOTE: we only compile .childNodes so that
+                // we don't get into infinite loop compiling ourselves
+                $compile(element.contents())(scope);
+              }
+            );
+          };
+        });
+      })
+      .controller('GreeterController', ['$scope', function($scope) {
+        $scope.name = 'Angular';
+        $scope.html = 'Hello {{name}}';
+      }]);
+    </script>
+    <div ng-controller="GreeterController">
+      <input ng-model="name"> <br/>
+      <textarea ng-model="html"></textarea> <br/>
+      <div compile="html"></div>
+    </div>
+   </file>
+   <file name="protractor.js" type="protractor">
+     it('should auto compile', function() {
+       var textarea = $('textarea');
+       var output = $('div[compile]');
+       // The initial state reads 'Hello Angular'.
+       expect(output.getText()).toBe('Hello Angular');
+       textarea.clear();
+       textarea.sendKeys('{{name}}!');
+       expect(output.getText()).toBe('Angular!');
+     });
+   </file>
+ </example>
+
+ *
+ *
+ * @param {string|DOMElement} element Element or HTML string to compile into a template function.
+ * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives - DEPRECATED.
+ *
+ * <div class="alert alert-danger">
+ * **Note:** Passing a `transclude` function to the $compile function is deprecated, as it
+ *   e.g. will not use the right outer scope. Please pass the transclude function as a
+ *   `parentBoundTranscludeFn` to the link function instead.
+ * </div>
+ *
+ * @param {number} maxPriority only apply directives lower than given priority (Only effects the
+ *                 root element(s), not their children)
+ * @returns {function(scope, cloneAttachFn=, options=)} a link function which is used to bind template
+ * (a DOM element/tree) to a scope. Where:
+ *
+ *  * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to.
+ *  * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the
+ *  `template` and call the `cloneAttachFn` function allowing the caller to attach the
+ *  cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is
+ *  called as: <br/> `cloneAttachFn(clonedElement, scope)` where:
+ *
+ *      * `clonedElement` - is a clone of the original `element` passed into the compiler.
+ *      * `scope` - is the current scope with which the linking function is working with.
+ *
+ *  * `options` - An optional object hash with linking options. If `options` is provided, then the following
+ *  keys may be used to control linking behavior:
+ *
+ *      * `parentBoundTranscludeFn` - the transclude function made available to
+ *        directives; if given, it will be passed through to the link functions of
+ *        directives found in `element` during compilation.
+ *      * `transcludeControllers` - an object hash with keys that map controller names
+ *        to controller instances; if given, it will make the controllers
+ *        available to directives.
+ *      * `futureParentElement` - defines the parent to which the `cloneAttachFn` will add
+ *        the cloned elements; only needed for transcludes that are allowed to contain non html
+ *        elements (e.g. SVG elements). See also the directive.controller property.
+ *
+ * Calling the linking function returns the element of the template. It is either the original
+ * element passed in, or the clone of the element if the `cloneAttachFn` is provided.
+ *
+ * After linking the view is not updated until after a call to $digest which typically is done by
+ * Angular automatically.
+ *
+ * If you need access to the bound view, there are two ways to do it:
+ *
+ * - If you are not asking the linking function to clone the template, create the DOM element(s)
+ *   before you send them to the compiler and keep this reference around.
+ *   ```js
+ *     var element = $compile('<p>{{total}}</p>')(scope);
+ *   ```
+ *
+ * - if on the other hand, you need the element to be cloned, the view reference from the original
+ *   example would not point to the clone, but rather to the original template that was cloned. In
+ *   this case, you can access the clone via the cloneAttachFn:
+ *   ```js
+ *     var templateElement = angular.element('<p>{{total}}</p>'),
+ *         scope = ....;
+ *
+ *     var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) {
+ *       //attach the clone to DOM document at the right place
+ *     });
+ *
+ *     //now we have reference to the cloned DOM via `clonedElement`
+ *   ```
+ *
+ *
+ * For information on how the compiler works, see the
+ * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide.
+ */
+
+var $compileMinErr = minErr('$compile');
+
+/**
+ * @ngdoc provider
+ * @name $compileProvider
+ *
+ * @description
+ */
+$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider'];
+function $CompileProvider($provide, $$sanitizeUriProvider) {
+  var hasDirectives = {},
+      Suffix = 'Directive',
+      COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\w\-]+)\s+(.*)$/,
+      CLASS_DIRECTIVE_REGEXP = /(([\w\-]+)(?:\:([^;]+))?;?)/,
+      ALL_OR_NOTHING_ATTRS = makeMap('ngSrc,ngSrcset,src,srcset'),
+      REQUIRE_PREFIX_REGEXP = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/;
+
+  // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes
+  // The assumption is that future DOM event attribute names will begin with
+  // 'on' and be composed of only English letters.
+  var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/;
+
+  function parseIsolateBindings(scope, directiveName, isController) {
+    var LOCAL_REGEXP = /^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/;
+
+    var bindings = {};
+
+    forEach(scope, function(definition, scopeName) {
+      var match = definition.match(LOCAL_REGEXP);
+
+      if (!match) {
+        throw $compileMinErr('iscp',
+            "Invalid {3} for directive '{0}'." +
+            " Definition: {... {1}: '{2}' ...}",
+            directiveName, scopeName, definition,
+            (isController ? "controller bindings definition" :
+            "isolate scope definition"));
+      }
+
+      bindings[scopeName] = {
+        mode: match[1][0],
+        collection: match[2] === '*',
+        optional: match[3] === '?',
+        attrName: match[4] || scopeName
+      };
+    });
+
+    return bindings;
+  }
+
+  function parseDirectiveBindings(directive, directiveName) {
+    var bindings = {
+      isolateScope: null,
+      bindToController: null
+    };
+    if (isObject(directive.scope)) {
+      if (directive.bindToController === true) {
+        bindings.bindToController = parseIsolateBindings(directive.scope,
+                                                         directiveName, true);
+        bindings.isolateScope = {};
+      } else {
+        bindings.isolateScope = parseIsolateBindings(directive.scope,
+                                                     directiveName, false);
+      }
+    }
+    if (isObject(directive.bindToController)) {
+      bindings.bindToController =
+          parseIsolateBindings(directive.bindToController, directiveName, true);
+    }
+    if (isObject(bindings.bindToController)) {
+      var controller = directive.controller;
+      var controllerAs = directive.controllerAs;
+      if (!controller) {
+        // There is no controller, there may or may not be a controllerAs property
+        throw $compileMinErr('noctrl',
+              "Cannot bind to controller without directive '{0}'s controller.",
+              directiveName);
+      } else if (!identifierForController(controller, controllerAs)) {
+        // There is a controller, but no identifier or controllerAs property
+        throw $compileMinErr('noident',
+              "Cannot bind to controller without identifier for directive '{0}'.",
+              directiveName);
+      }
+    }
+    return bindings;
+  }
+
+  function assertValidDirectiveName(name) {
+    var letter = name.charAt(0);
+    if (!letter || letter !== lowercase(letter)) {
+      throw $compileMinErr('baddir', "Directive name '{0}' is invalid. The first character must be a lowercase letter", name);
+    }
+    if (name !== name.trim()) {
+      throw $compileMinErr('baddir',
+            "Directive name '{0}' is invalid. The name should not contain leading or trailing whitespaces",
+            name);
+    }
+  }
+
+  /**
+   * @ngdoc method
+   * @name $compileProvider#directive
+   * @kind function
+   *
+   * @description
+   * Register a new directive with the compiler.
+   *
+   * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which
+   *    will match as <code>ng-bind</code>), or an object map of directives where the keys are the
+   *    names and the values are the factories.
+   * @param {Function|Array} directiveFactory An injectable directive factory function. See
+   *    {@link guide/directive} for more info.
+   * @returns {ng.$compileProvider} Self for chaining.
+   */
+   this.directive = function registerDirective(name, directiveFactory) {
+    assertNotHasOwnProperty(name, 'directive');
+    if (isString(name)) {
+      assertValidDirectiveName(name);
+      assertArg(directiveFactory, 'directiveFactory');
+      if (!hasDirectives.hasOwnProperty(name)) {
+        hasDirectives[name] = [];
+        $provide.factory(name + Suffix, ['$injector', '$exceptionHandler',
+          function($injector, $exceptionHandler) {
+            var directives = [];
+            forEach(hasDirectives[name], function(directiveFactory, index) {
+              try {
+                var directive = $injector.invoke(directiveFactory);
+                if (isFunction(directive)) {
+                  directive = { compile: valueFn(directive) };
+                } else if (!directive.compile && directive.link) {
+                  directive.compile = valueFn(directive.link);
+                }
+                directive.priority = directive.priority || 0;
+                directive.index = index;
+                directive.name = directive.name || name;
+                directive.require = directive.require || (directive.controller && directive.name);
+                directive.restrict = directive.restrict || 'EA';
+                var bindings = directive.$$bindings =
+                    parseDirectiveBindings(directive, directive.name);
+                if (isObject(bindings.isolateScope)) {
+                  directive.$$isolateBindings = bindings.isolateScope;
+                }
+                directive.$$moduleName = directiveFactory.$$moduleName;
+                directives.push(directive);
+              } catch (e) {
+                $exceptionHandler(e);
+              }
+            });
+            return directives;
+          }]);
+      }
+      hasDirectives[name].push(directiveFactory);
+    } else {
+      forEach(name, reverseParams(registerDirective));
+    }
+    return this;
+  };
+
+
+  /**
+   * @ngdoc method
+   * @name $compileProvider#aHrefSanitizationWhitelist
+   * @kind function
+   *
+   * @description
+   * Retrieves or overrides the default regular expression that is used for whitelisting of safe
+   * urls during a[href] sanitization.
+   *
+   * The sanitization is a security measure aimed at preventing XSS attacks via html links.
+   *
+   * Any url about to be assigned to a[href] via data-binding is first normalized and turned into
+   * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`
+   * regular expression. If a match is found, the original url is written into the dom. Otherwise,
+   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
+   *
+   * @param {RegExp=} regexp New regexp to whitelist urls with.
+   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
+   *    chaining otherwise.
+   */
+  this.aHrefSanitizationWhitelist = function(regexp) {
+    if (isDefined(regexp)) {
+      $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp);
+      return this;
+    } else {
+      return $$sanitizeUriProvider.aHrefSanitizationWhitelist();
+    }
+  };
+
+
+  /**
+   * @ngdoc method
+   * @name $compileProvider#imgSrcSanitizationWhitelist
+   * @kind function
+   *
+   * @description
+   * Retrieves or overrides the default regular expression that is used for whitelisting of safe
+   * urls during img[src] sanitization.
+   *
+   * The sanitization is a security measure aimed at prevent XSS attacks via html links.
+   *
+   * Any url about to be assigned to img[src] via data-binding is first normalized and turned into
+   * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`
+   * regular expression. If a match is found, the original url is written into the dom. Otherwise,
+   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
+   *
+   * @param {RegExp=} regexp New regexp to whitelist urls with.
+   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
+   *    chaining otherwise.
+   */
+  this.imgSrcSanitizationWhitelist = function(regexp) {
+    if (isDefined(regexp)) {
+      $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp);
+      return this;
+    } else {
+      return $$sanitizeUriProvider.imgSrcSanitizationWhitelist();
+    }
+  };
+
+  /**
+   * @ngdoc method
+   * @name  $compileProvider#debugInfoEnabled
+   *
+   * @param {boolean=} enabled update the debugInfoEnabled state if provided, otherwise just return the
+   * current debugInfoEnabled state
+   * @returns {*} current value if used as getter or itself (chaining) if used as setter
+   *
+   * @kind function
+   *
+   * @description
+   * Call this method to enable/disable various debug runtime information in the compiler such as adding
+   * binding information and a reference to the current scope on to DOM elements.
+   * If enabled, the compiler will add the following to DOM elements that have been bound to the scope
+   * * `ng-binding` CSS class
+   * * `$binding` data property containing an array of the binding expressions
+   *
+   * You may want to disable this in production for a significant performance boost. See
+   * {@link guide/production#disabling-debug-data Disabling Debug Data} for more.
+   *
+   * The default value is true.
+   */
+  var debugInfoEnabled = true;
+  this.debugInfoEnabled = function(enabled) {
+    if (isDefined(enabled)) {
+      debugInfoEnabled = enabled;
+      return this;
+    }
+    return debugInfoEnabled;
+  };
+
+  this.$get = [
+            '$injector', '$interpolate', '$exceptionHandler', '$templateRequest', '$parse',
+            '$controller', '$rootScope', '$document', '$sce', '$animate', '$$sanitizeUri',
+    function($injector,   $interpolate,   $exceptionHandler,   $templateRequest,   $parse,
+             $controller,   $rootScope,   $document,   $sce,   $animate,   $$sanitizeUri) {
+
+    var Attributes = function(element, attributesToCopy) {
+      if (attributesToCopy) {
+        var keys = Object.keys(attributesToCopy);
+        var i, l, key;
+
+        for (i = 0, l = keys.length; i < l; i++) {
+          key = keys[i];
+          this[key] = attributesToCopy[key];
+        }
+      } else {
+        this.$attr = {};
+      }
+
+      this.$$element = element;
+    };
+
+    Attributes.prototype = {
+      /**
+       * @ngdoc method
+       * @name $compile.directive.Attributes#$normalize
+       * @kind function
+       *
+       * @description
+       * Converts an attribute name (e.g. dash/colon/underscore-delimited string, optionally prefixed with `x-` or
+       * `data-`) to its normalized, camelCase form.
+       *
+       * Also there is special case for Moz prefix starting with upper case letter.
+       *
+       * For further information check out the guide on {@link guide/directive#matching-directives Matching Directives}
+       *
+       * @param {string} name Name to normalize
+       */
+      $normalize: directiveNormalize,
+
+
+      /**
+       * @ngdoc method
+       * @name $compile.directive.Attributes#$addClass
+       * @kind function
+       *
+       * @description
+       * Adds the CSS class value specified by the classVal parameter to the element. If animations
+       * are enabled then an animation will be triggered for the class addition.
+       *
+       * @param {string} classVal The className value that will be added to the element
+       */
+      $addClass: function(classVal) {
+        if (classVal && classVal.length > 0) {
+          $animate.addClass(this.$$element, classVal);
+        }
+      },
+
+      /**
+       * @ngdoc method
+       * @name $compile.directive.Attributes#$removeClass
+       * @kind function
+       *
+       * @description
+       * Removes the CSS class value specified by the classVal parameter from the element. If
+       * animations are enabled then an animation will be triggered for the class removal.
+       *
+       * @param {string} classVal The className value that will be removed from the element
+       */
+      $removeClass: function(classVal) {
+        if (classVal && classVal.length > 0) {
+          $animate.removeClass(this.$$element, classVal);
+        }
+      },
+
+      /**
+       * @ngdoc method
+       * @name $compile.directive.Attributes#$updateClass
+       * @kind function
+       *
+       * @description
+       * Adds and removes the appropriate CSS class values to the element based on the difference
+       * between the new and old CSS class values (specified as newClasses and oldClasses).
+       *
+       * @param {string} newClasses The current CSS className value
+       * @param {string} oldClasses The former CSS className value
+       */
+      $updateClass: function(newClasses, oldClasses) {
+        var toAdd = tokenDifference(newClasses, oldClasses);
+        if (toAdd && toAdd.length) {
+          $animate.addClass(this.$$element, toAdd);
+        }
+
+        var toRemove = tokenDifference(oldClasses, newClasses);
+        if (toRemove && toRemove.length) {
+          $animate.removeClass(this.$$element, toRemove);
+        }
+      },
+
+      /**
+       * Set a normalized attribute on the element in a way such that all directives
+       * can share the attribute. This function properly handles boolean attributes.
+       * @param {string} key Normalized key. (ie ngAttribute)
+       * @param {string|boolean} value The value to set. If `null` attribute will be deleted.
+       * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute.
+       *     Defaults to true.
+       * @param {string=} attrName Optional none normalized name. Defaults to key.
+       */
+      $set: function(key, value, writeAttr, attrName) {
+        // TODO: decide whether or not to throw an error if "class"
+        //is set through this function since it may cause $updateClass to
+        //become unstable.
+
+        var node = this.$$element[0],
+            booleanKey = getBooleanAttrName(node, key),
+            aliasedKey = getAliasedAttrName(key),
+            observer = key,
+            nodeName;
+
+        if (booleanKey) {
+          this.$$element.prop(key, value);
+          attrName = booleanKey;
+        } else if (aliasedKey) {
+          this[aliasedKey] = value;
+          observer = aliasedKey;
+        }
+
+        this[key] = value;
+
+        // translate normalized key to actual key
+        if (attrName) {
+          this.$attr[key] = attrName;
+        } else {
+          attrName = this.$attr[key];
+          if (!attrName) {
+            this.$attr[key] = attrName = snake_case(key, '-');
+          }
+        }
+
+        nodeName = nodeName_(this.$$element);
+
+        if ((nodeName === 'a' && key === 'href') ||
+            (nodeName === 'img' && key === 'src')) {
+          // sanitize a[href] and img[src] values
+          this[key] = value = $$sanitizeUri(value, key === 'src');
+        } else if (nodeName === 'img' && key === 'srcset') {
+          // sanitize img[srcset] values
+          var result = "";
+
+          // first check if there are spaces because it's not the same pattern
+          var trimmedSrcset = trim(value);
+          //                (   999x   ,|   999w   ,|   ,|,   )
+          var srcPattern = /(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/;
+          var pattern = /\s/.test(trimmedSrcset) ? srcPattern : /(,)/;
+
+          // split srcset into tuple of uri and descriptor except for the last item
+          var rawUris = trimmedSrcset.split(pattern);
+
+          // for each tuples
+          var nbrUrisWith2parts = Math.floor(rawUris.length / 2);
+          for (var i = 0; i < nbrUrisWith2parts; i++) {
+            var innerIdx = i * 2;
+            // sanitize the uri
+            result += $$sanitizeUri(trim(rawUris[innerIdx]), true);
+            // add the descriptor
+            result += (" " + trim(rawUris[innerIdx + 1]));
+          }
+
+          // split the last item into uri and descriptor
+          var lastTuple = trim(rawUris[i * 2]).split(/\s/);
+
+          // sanitize the last uri
+          result += $$sanitizeUri(trim(lastTuple[0]), true);
+
+          // and add the last descriptor if any
+          if (lastTuple.length === 2) {
+            result += (" " + trim(lastTuple[1]));
+          }
+          this[key] = value = result;
+        }
+
+        if (writeAttr !== false) {
+          if (value === null || isUndefined(value)) {
+            this.$$element.removeAttr(attrName);
+          } else {
+            this.$$element.attr(attrName, value);
+          }
+        }
+
+        // fire observers
+        var $$observers = this.$$observers;
+        $$observers && forEach($$observers[observer], function(fn) {
+          try {
+            fn(value);
+          } catch (e) {
+            $exceptionHandler(e);
+          }
+        });
+      },
+
+
+      /**
+       * @ngdoc method
+       * @name $compile.directive.Attributes#$observe
+       * @kind function
+       *
+       * @description
+       * Observes an interpolated attribute.
+       *
+       * The observer function will be invoked once during the next `$digest` following
+       * compilation. The observer is then invoked whenever the interpolated value
+       * changes.
+       *
+       * @param {string} key Normalized key. (ie ngAttribute) .
+       * @param {function(interpolatedValue)} fn Function that will be called whenever
+                the interpolated value of the attribute changes.
+       *        See the {@link guide/directive#text-and-attribute-bindings Directives} guide for more info.
+       * @returns {function()} Returns a deregistration function for this observer.
+       */
+      $observe: function(key, fn) {
+        var attrs = this,
+            $$observers = (attrs.$$observers || (attrs.$$observers = createMap())),
+            listeners = ($$observers[key] || ($$observers[key] = []));
+
+        listeners.push(fn);
+        $rootScope.$evalAsync(function() {
+          if (!listeners.$$inter && attrs.hasOwnProperty(key) && !isUndefined(attrs[key])) {
+            // no one registered attribute interpolation function, so lets call it manually
+            fn(attrs[key]);
+          }
+        });
+
+        return function() {
+          arrayRemove(listeners, fn);
+        };
+      }
+    };
+
+
+    function safeAddClass($element, className) {
+      try {
+        $element.addClass(className);
+      } catch (e) {
+        // ignore, since it means that we are trying to set class on
+        // SVG element, where class name is read-only.
+      }
+    }
+
+
+    var startSymbol = $interpolate.startSymbol(),
+        endSymbol = $interpolate.endSymbol(),
+        denormalizeTemplate = (startSymbol == '{{' || endSymbol  == '}}')
+            ? identity
+            : function denormalizeTemplate(template) {
+              return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol);
+        },
+        NG_ATTR_BINDING = /^ngAttr[A-Z]/;
+    var MULTI_ELEMENT_DIR_RE = /^(.+)Start$/;
+
+    compile.$$addBindingInfo = debugInfoEnabled ? function $$addBindingInfo($element, binding) {
+      var bindings = $element.data('$binding') || [];
+
+      if (isArray(binding)) {
+        bindings = bindings.concat(binding);
+      } else {
+        bindings.push(binding);
+      }
+
+      $element.data('$binding', bindings);
+    } : noop;
+
+    compile.$$addBindingClass = debugInfoEnabled ? function $$addBindingClass($element) {
+      safeAddClass($element, 'ng-binding');
+    } : noop;
+
+    compile.$$addScopeInfo = debugInfoEnabled ? function $$addScopeInfo($element, scope, isolated, noTemplate) {
+      var dataName = isolated ? (noTemplate ? '$isolateScopeNoTemplate' : '$isolateScope') : '$scope';
+      $element.data(dataName, scope);
+    } : noop;
+
+    compile.$$addScopeClass = debugInfoEnabled ? function $$addScopeClass($element, isolated) {
+      safeAddClass($element, isolated ? 'ng-isolate-scope' : 'ng-scope');
+    } : noop;
+
+    return compile;
+
+    //================================
+
+    function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective,
+                        previousCompileContext) {
+      if (!($compileNodes instanceof jqLite)) {
+        // jquery always rewraps, whereas we need to preserve the original selector so that we can
+        // modify it.
+        $compileNodes = jqLite($compileNodes);
+      }
+      // We can not compile top level text elements since text nodes can be merged and we will
+      // not be able to attach scope data to them, so we will wrap them in <span>
+      forEach($compileNodes, function(node, index) {
+        if (node.nodeType == NODE_TYPE_TEXT && node.nodeValue.match(/\S+/) /* non-empty */ ) {
+          $compileNodes[index] = jqLite(node).wrap('<span></span>').parent()[0];
+        }
+      });
+      var compositeLinkFn =
+              compileNodes($compileNodes, transcludeFn, $compileNodes,
+                           maxPriority, ignoreDirective, previousCompileContext);
+      compile.$$addScopeClass($compileNodes);
+      var namespace = null;
+      return function publicLinkFn(scope, cloneConnectFn, options) {
+        assertArg(scope, 'scope');
+
+        if (previousCompileContext && previousCompileContext.needsNewScope) {
+          // A parent directive did a replace and a directive on this element asked
+          // for transclusion, which caused us to lose a layer of element on which
+          // we could hold the new transclusion scope, so we will create it manually
+          // here.
+          scope = scope.$parent.$new();
+        }
+
+        options = options || {};
+        var parentBoundTranscludeFn = options.parentBoundTranscludeFn,
+          transcludeControllers = options.transcludeControllers,
+          futureParentElement = options.futureParentElement;
+
+        // When `parentBoundTranscludeFn` is passed, it is a
+        // `controllersBoundTransclude` function (it was previously passed
+        // as `transclude` to directive.link) so we must unwrap it to get
+        // its `boundTranscludeFn`
+        if (parentBoundTranscludeFn && parentBoundTranscludeFn.$$boundTransclude) {
+          parentBoundTranscludeFn = parentBoundTranscludeFn.$$boundTransclude;
+        }
+
+        if (!namespace) {
+          namespace = detectNamespaceForChildElements(futureParentElement);
+        }
+        var $linkNode;
+        if (namespace !== 'html') {
+          // When using a directive with replace:true and templateUrl the $compileNodes
+          // (or a child element inside of them)
+          // might change, so we need to recreate the namespace adapted compileNodes
+          // for call to the link function.
+          // Note: This will already clone the nodes...
+          $linkNode = jqLite(
+            wrapTemplate(namespace, jqLite('<div>').append($compileNodes).html())
+          );
+        } else if (cloneConnectFn) {
+          // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart
+          // and sometimes changes the structure of the DOM.
+          $linkNode = JQLitePrototype.clone.call($compileNodes);
+        } else {
+          $linkNode = $compileNodes;
+        }
+
+        if (transcludeControllers) {
+          for (var controllerName in transcludeControllers) {
+            $linkNode.data('$' + controllerName + 'Controller', transcludeControllers[controllerName].instance);
+          }
+        }
+
+        compile.$$addScopeInfo($linkNode, scope);
+
+        if (cloneConnectFn) cloneConnectFn($linkNode, scope);
+        if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode, parentBoundTranscludeFn);
+        return $linkNode;
+      };
+    }
+
+    function detectNamespaceForChildElements(parentElement) {
+      // TODO: Make this detect MathML as well...
+      var node = parentElement && parentElement[0];
+      if (!node) {
+        return 'html';
+      } else {
+        return nodeName_(node) !== 'foreignobject' && node.toString().match(/SVG/) ? 'svg' : 'html';
+      }
+    }
+
+    /**
+     * Compile function matches each node in nodeList against the directives. Once all directives
+     * for a particular node are collected their compile functions are executed. The compile
+     * functions return values - the linking functions - are combined into a composite linking
+     * function, which is the a linking function for the node.
+     *
+     * @param {NodeList} nodeList an array of nodes or NodeList to compile
+     * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the
+     *        scope argument is auto-generated to the new child of the transcluded parent scope.
+     * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then
+     *        the rootElement must be set the jqLite collection of the compile root. This is
+     *        needed so that the jqLite collection items can be replaced with widgets.
+     * @param {number=} maxPriority Max directive priority.
+     * @returns {Function} A composite linking function of all of the matched directives or null.
+     */
+    function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective,
+                            previousCompileContext) {
+      var linkFns = [],
+          attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound, nodeLinkFnFound;
+
+      for (var i = 0; i < nodeList.length; i++) {
+        attrs = new Attributes();
+
+        // we must always refer to nodeList[i] since the nodes can be replaced underneath us.
+        directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined,
+                                        ignoreDirective);
+
+        nodeLinkFn = (directives.length)
+            ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement,
+                                      null, [], [], previousCompileContext)
+            : null;
+
+        if (nodeLinkFn && nodeLinkFn.scope) {
+          compile.$$addScopeClass(attrs.$$element);
+        }
+
+        childLinkFn = (nodeLinkFn && nodeLinkFn.terminal ||
+                      !(childNodes = nodeList[i].childNodes) ||
+                      !childNodes.length)
+            ? null
+            : compileNodes(childNodes,
+                 nodeLinkFn ? (
+                  (nodeLinkFn.transcludeOnThisElement || !nodeLinkFn.templateOnThisElement)
+                     && nodeLinkFn.transclude) : transcludeFn);
+
+        if (nodeLinkFn || childLinkFn) {
+          linkFns.push(i, nodeLinkFn, childLinkFn);
+          linkFnFound = true;
+          nodeLinkFnFound = nodeLinkFnFound || nodeLinkFn;
+        }
+
+        //use the previous context only for the first element in the virtual group
+        previousCompileContext = null;
+      }
+
+      // return a linking function if we have found anything, null otherwise
+      return linkFnFound ? compositeLinkFn : null;
+
+      function compositeLinkFn(scope, nodeList, $rootElement, parentBoundTranscludeFn) {
+        var nodeLinkFn, childLinkFn, node, childScope, i, ii, idx, childBoundTranscludeFn;
+        var stableNodeList;
+
+
+        if (nodeLinkFnFound) {
+          // copy nodeList so that if a nodeLinkFn removes or adds an element at this DOM level our
+          // offsets don't get screwed up
+          var nodeListLength = nodeList.length;
+          stableNodeList = new Array(nodeListLength);
+
+          // create a sparse array by only copying the elements which have a linkFn
+          for (i = 0; i < linkFns.length; i+=3) {
+            idx = linkFns[i];
+            stableNodeList[idx] = nodeList[idx];
+          }
+        } else {
+          stableNodeList = nodeList;
+        }
+
+        for (i = 0, ii = linkFns.length; i < ii;) {
+          node = stableNodeList[linkFns[i++]];
+          nodeLinkFn = linkFns[i++];
+          childLinkFn = linkFns[i++];
+
+          if (nodeLinkFn) {
+            if (nodeLinkFn.scope) {
+              childScope = scope.$new();
+              compile.$$addScopeInfo(jqLite(node), childScope);
+            } else {
+              childScope = scope;
+            }
+
+            if (nodeLinkFn.transcludeOnThisElement) {
+              childBoundTranscludeFn = createBoundTranscludeFn(
+                  scope, nodeLinkFn.transclude, parentBoundTranscludeFn);
+
+            } else if (!nodeLinkFn.templateOnThisElement && parentBoundTranscludeFn) {
+              childBoundTranscludeFn = parentBoundTranscludeFn;
+
+            } else if (!parentBoundTranscludeFn && transcludeFn) {
+              childBoundTranscludeFn = createBoundTranscludeFn(scope, transcludeFn);
+
+            } else {
+              childBoundTranscludeFn = null;
+            }
+
+            nodeLinkFn(childLinkFn, childScope, node, $rootElement, childBoundTranscludeFn);
+
+          } else if (childLinkFn) {
+            childLinkFn(scope, node.childNodes, undefined, parentBoundTranscludeFn);
+          }
+        }
+      }
+    }
+
+    function createBoundTranscludeFn(scope, transcludeFn, previousBoundTranscludeFn) {
+
+      var boundTranscludeFn = function(transcludedScope, cloneFn, controllers, futureParentElement, containingScope) {
+
+        if (!transcludedScope) {
+          transcludedScope = scope.$new(false, containingScope);
+          transcludedScope.$$transcluded = true;
+        }
+
+        return transcludeFn(transcludedScope, cloneFn, {
+          parentBoundTranscludeFn: previousBoundTranscludeFn,
+          transcludeControllers: controllers,
+          futureParentElement: futureParentElement
+        });
+      };
+
+      return boundTranscludeFn;
+    }
+
+    /**
+     * Looks for directives on the given node and adds them to the directive collection which is
+     * sorted.
+     *
+     * @param node Node to search.
+     * @param directives An array to which the directives are added to. This array is sorted before
+     *        the function returns.
+     * @param attrs The shared attrs object which is used to populate the normalized attributes.
+     * @param {number=} maxPriority Max directive priority.
+     */
+    function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) {
+      var nodeType = node.nodeType,
+          attrsMap = attrs.$attr,
+          match,
+          className;
+
+      switch (nodeType) {
+        case NODE_TYPE_ELEMENT: /* Element */
+          // use the node name: <directive>
+          addDirective(directives,
+              directiveNormalize(nodeName_(node)), 'E', maxPriority, ignoreDirective);
+
+          // iterate over the attributes
+          for (var attr, name, nName, ngAttrName, value, isNgAttr, nAttrs = node.attributes,
+                   j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) {
+            var attrStartName = false;
+            var attrEndName = false;
+
+            attr = nAttrs[j];
+            name = attr.name;
+            value = trim(attr.value);
+
+            // support ngAttr attribute binding
+            ngAttrName = directiveNormalize(name);
+            if (isNgAttr = NG_ATTR_BINDING.test(ngAttrName)) {
+              name = name.replace(PREFIX_REGEXP, '')
+                .substr(8).replace(/_(.)/g, function(match, letter) {
+                  return letter.toUpperCase();
+                });
+            }
+
+            var multiElementMatch = ngAttrName.match(MULTI_ELEMENT_DIR_RE);
+            if (multiElementMatch && directiveIsMultiElement(multiElementMatch[1])) {
+              attrStartName = name;
+              attrEndName = name.substr(0, name.length - 5) + 'end';
+              name = name.substr(0, name.length - 6);
+            }
+
+            nName = directiveNormalize(name.toLowerCase());
+            attrsMap[nName] = name;
+            if (isNgAttr || !attrs.hasOwnProperty(nName)) {
+                attrs[nName] = value;
+                if (getBooleanAttrName(node, nName)) {
+                  attrs[nName] = true; // presence means true
+                }
+            }
+            addAttrInterpolateDirective(node, directives, value, nName, isNgAttr);
+            addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName,
+                          attrEndName);
+          }
+
+          // use class as directive
+          className = node.className;
+          if (isObject(className)) {
+              // Maybe SVGAnimatedString
+              className = className.animVal;
+          }
+          if (isString(className) && className !== '') {
+            while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) {
+              nName = directiveNormalize(match[2]);
+              if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) {
+                attrs[nName] = trim(match[3]);
+              }
+              className = className.substr(match.index + match[0].length);
+            }
+          }
+          break;
+        case NODE_TYPE_TEXT: /* Text Node */
+          if (msie === 11) {
+            // Workaround for #11781
+            while (node.parentNode && node.nextSibling && node.nextSibling.nodeType === NODE_TYPE_TEXT) {
+              node.nodeValue = node.nodeValue + node.nextSibling.nodeValue;
+              node.parentNode.removeChild(node.nextSibling);
+            }
+          }
+          addTextInterpolateDirective(directives, node.nodeValue);
+          break;
+        case NODE_TYPE_COMMENT: /* Comment */
+          try {
+            match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue);
+            if (match) {
+              nName = directiveNormalize(match[1]);
+              if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) {
+                attrs[nName] = trim(match[2]);
+              }
+            }
+          } catch (e) {
+            // turns out that under some circumstances IE9 throws errors when one attempts to read
+            // comment's node value.
+            // Just ignore it and continue. (Can't seem to reproduce in test case.)
+          }
+          break;
+      }
+
+      directives.sort(byPriority);
+      return directives;
+    }
+
+    /**
+     * Given a node with an directive-start it collects all of the siblings until it finds
+     * directive-end.
+     * @param node
+     * @param attrStart
+     * @param attrEnd
+     * @returns {*}
+     */
+    function groupScan(node, attrStart, attrEnd) {
+      var nodes = [];
+      var depth = 0;
+      if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) {
+        do {
+          if (!node) {
+            throw $compileMinErr('uterdir',
+                      "Unterminated attribute, found '{0}' but no matching '{1}' found.",
+                      attrStart, attrEnd);
+          }
+          if (node.nodeType == NODE_TYPE_ELEMENT) {
+            if (node.hasAttribute(attrStart)) depth++;
+            if (node.hasAttribute(attrEnd)) depth--;
+          }
+          nodes.push(node);
+          node = node.nextSibling;
+        } while (depth > 0);
+      } else {
+        nodes.push(node);
+      }
+
+      return jqLite(nodes);
+    }
+
+    /**
+     * Wrapper for linking function which converts normal linking function into a grouped
+     * linking function.
+     * @param linkFn
+     * @param attrStart
+     * @param attrEnd
+     * @returns {Function}
+     */
+    function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) {
+      return function(scope, element, attrs, controllers, transcludeFn) {
+        element = groupScan(element[0], attrStart, attrEnd);
+        return linkFn(scope, element, attrs, controllers, transcludeFn);
+      };
+    }
+
+    /**
+     * Once the directives have been collected, their compile functions are executed. This method
+     * is responsible for inlining directive templates as well as terminating the application
+     * of the directives if the terminal directive has been reached.
+     *
+     * @param {Array} directives Array of collected directives to execute their compile function.
+     *        this needs to be pre-sorted by priority order.
+     * @param {Node} compileNode The raw DOM node to apply the compile functions to
+     * @param {Object} templateAttrs The shared attribute function
+     * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the
+     *                                                  scope argument is auto-generated to the new
+     *                                                  child of the transcluded parent scope.
+     * @param {JQLite} jqCollection If we are working on the root of the compile tree then this
+     *                              argument has the root jqLite array so that we can replace nodes
+     *                              on it.
+     * @param {Object=} originalReplaceDirective An optional directive that will be ignored when
+     *                                           compiling the transclusion.
+     * @param {Array.<Function>} preLinkFns
+     * @param {Array.<Function>} postLinkFns
+     * @param {Object} previousCompileContext Context used for previous compilation of the current
+     *                                        node
+     * @returns {Function} linkFn
+     */
+    function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn,
+                                   jqCollection, originalReplaceDirective, preLinkFns, postLinkFns,
+                                   previousCompileContext) {
+      previousCompileContext = previousCompileContext || {};
+
+      var terminalPriority = -Number.MAX_VALUE,
+          newScopeDirective = previousCompileContext.newScopeDirective,
+          controllerDirectives = previousCompileContext.controllerDirectives,
+          newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective,
+          templateDirective = previousCompileContext.templateDirective,
+          nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective,
+          hasTranscludeDirective = false,
+          hasTemplate = false,
+          hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective,
+          $compileNode = templateAttrs.$$element = jqLite(compileNode),
+          directive,
+          directiveName,
+          $template,
+          replaceDirective = originalReplaceDirective,
+          childTranscludeFn = transcludeFn,
+          linkFn,
+          directiveValue;
+
+      // executes all directives on the current element
+      for (var i = 0, ii = directives.length; i < ii; i++) {
+        directive = directives[i];
+        var attrStart = directive.$$start;
+        var attrEnd = directive.$$end;
+
+        // collect multiblock sections
+        if (attrStart) {
+          $compileNode = groupScan(compileNode, attrStart, attrEnd);
+        }
+        $template = undefined;
+
+        if (terminalPriority > directive.priority) {
+          break; // prevent further processing of directives
+        }
+
+        if (directiveValue = directive.scope) {
+
+          // skip the check for directives with async templates, we'll check the derived sync
+          // directive when the template arrives
+          if (!directive.templateUrl) {
+            if (isObject(directiveValue)) {
+              // This directive is trying to add an isolated scope.
+              // Check that there is no scope of any kind already
+              assertNoDuplicate('new/isolated scope', newIsolateScopeDirective || newScopeDirective,
+                                directive, $compileNode);
+              newIsolateScopeDirective = directive;
+            } else {
+              // This directive is trying to add a child scope.
+              // Check that there is no isolated scope already
+              assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive,
+                                $compileNode);
+            }
+          }
+
+          newScopeDirective = newScopeDirective || directive;
+        }
+
+        directiveName = directive.name;
+
+        if (!directive.templateUrl && directive.controller) {
+          directiveValue = directive.controller;
+          controllerDirectives = controllerDirectives || createMap();
+          assertNoDuplicate("'" + directiveName + "' controller",
+              controllerDirectives[directiveName], directive, $compileNode);
+          controllerDirectives[directiveName] = directive;
+        }
+
+        if (directiveValue = directive.transclude) {
+          hasTranscludeDirective = true;
+
+          // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion.
+          // This option should only be used by directives that know how to safely handle element transclusion,
+          // where the transcluded nodes are added or replaced after linking.
+          if (!directive.$$tlb) {
+            assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode);
+            nonTlbTranscludeDirective = directive;
+          }
+
+          if (directiveValue == 'element') {
+            hasElementTranscludeDirective = true;
+            terminalPriority = directive.priority;
+            $template = $compileNode;
+            $compileNode = templateAttrs.$$element =
+                jqLite(document.createComment(' ' + directiveName + ': ' +
+                                              templateAttrs[directiveName] + ' '));
+            compileNode = $compileNode[0];
+            replaceWith(jqCollection, sliceArgs($template), compileNode);
+
+            childTranscludeFn = compile($template, transcludeFn, terminalPriority,
+                                        replaceDirective && replaceDirective.name, {
+                                          // Don't pass in:
+                                          // - controllerDirectives - otherwise we'll create duplicates controllers
+                                          // - newIsolateScopeDirective or templateDirective - combining templates with
+                                          //   element transclusion doesn't make sense.
+                                          //
+                                          // We need only nonTlbTranscludeDirective so that we prevent putting transclusion
+                                          // on the same element more than once.
+                                          nonTlbTranscludeDirective: nonTlbTranscludeDirective
+                                        });
+          } else {
+            $template = jqLite(jqLiteClone(compileNode)).contents();
+            $compileNode.empty(); // clear contents
+            childTranscludeFn = compile($template, transcludeFn, undefined,
+                undefined, { needsNewScope: directive.$$isolateScope || directive.$$newScope});
+          }
+        }
+
+        if (directive.template) {
+          hasTemplate = true;
+          assertNoDuplicate('template', templateDirective, directive, $compileNode);
+          templateDirective = directive;
+
+          directiveValue = (isFunction(directive.template))
+              ? directive.template($compileNode, templateAttrs)
+              : directive.template;
+
+          directiveValue = denormalizeTemplate(directiveValue);
+
+          if (directive.replace) {
+            replaceDirective = directive;
+            if (jqLiteIsTextNode(directiveValue)) {
+              $template = [];
+            } else {
+              $template = removeComments(wrapTemplate(directive.templateNamespace, trim(directiveValue)));
+            }
+            compileNode = $template[0];
+
+            if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {
+              throw $compileMinErr('tplrt',
+                  "Template for directive '{0}' must have exactly one root element. {1}",
+                  directiveName, '');
+            }
+
+            replaceWith(jqCollection, $compileNode, compileNode);
+
+            var newTemplateAttrs = {$attr: {}};
+
+            // combine directives from the original node and from the template:
+            // - take the array of directives for this element
+            // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed)
+            // - collect directives from the template and sort them by priority
+            // - combine directives as: processed + template + unprocessed
+            var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs);
+            var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1));
+
+            if (newIsolateScopeDirective || newScopeDirective) {
+              // The original directive caused the current element to be replaced but this element
+              // also needs to have a new scope, so we need to tell the template directives
+              // that they would need to get their scope from further up, if they require transclusion
+              markDirectiveScope(templateDirectives, newIsolateScopeDirective, newScopeDirective);
+            }
+            directives = directives.concat(templateDirectives).concat(unprocessedDirectives);
+            mergeTemplateAttributes(templateAttrs, newTemplateAttrs);
+
+            ii = directives.length;
+          } else {
+            $compileNode.html(directiveValue);
+          }
+        }
+
+        if (directive.templateUrl) {
+          hasTemplate = true;
+          assertNoDuplicate('template', templateDirective, directive, $compileNode);
+          templateDirective = directive;
+
+          if (directive.replace) {
+            replaceDirective = directive;
+          }
+
+          nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode,
+              templateAttrs, jqCollection, hasTranscludeDirective && childTranscludeFn, preLinkFns, postLinkFns, {
+                controllerDirectives: controllerDirectives,
+                newScopeDirective: (newScopeDirective !== directive) && newScopeDirective,
+                newIsolateScopeDirective: newIsolateScopeDirective,
+                templateDirective: templateDirective,
+                nonTlbTranscludeDirective: nonTlbTranscludeDirective
+              });
+          ii = directives.length;
+        } else if (directive.compile) {
+          try {
+            linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn);
+            if (isFunction(linkFn)) {
+              addLinkFns(null, linkFn, attrStart, attrEnd);
+            } else if (linkFn) {
+              addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd);
+            }
+          } catch (e) {
+            $exceptionHandler(e, startingTag($compileNode));
+          }
+        }
+
+        if (directive.terminal) {
+          nodeLinkFn.terminal = true;
+          terminalPriority = Math.max(terminalPriority, directive.priority);
+        }
+
+      }
+
+      nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true;
+      nodeLinkFn.transcludeOnThisElement = hasTranscludeDirective;
+      nodeLinkFn.templateOnThisElement = hasTemplate;
+      nodeLinkFn.transclude = childTranscludeFn;
+
+      previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective;
+
+      // might be normal or delayed nodeLinkFn depending on if templateUrl is present
+      return nodeLinkFn;
+
+      ////////////////////
+
+      function addLinkFns(pre, post, attrStart, attrEnd) {
+        if (pre) {
+          if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd);
+          pre.require = directive.require;
+          pre.directiveName = directiveName;
+          if (newIsolateScopeDirective === directive || directive.$$isolateScope) {
+            pre = cloneAndAnnotateFn(pre, {isolateScope: true});
+          }
+          preLinkFns.push(pre);
+        }
+        if (post) {
+          if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd);
+          post.require = directive.require;
+          post.directiveName = directiveName;
+          if (newIsolateScopeDirective === directive || directive.$$isolateScope) {
+            post = cloneAndAnnotateFn(post, {isolateScope: true});
+          }
+          postLinkFns.push(post);
+        }
+      }
+
+
+      function getControllers(directiveName, require, $element, elementControllers) {
+        var value;
+
+        if (isString(require)) {
+          var match = require.match(REQUIRE_PREFIX_REGEXP);
+          var name = require.substring(match[0].length);
+          var inheritType = match[1] || match[3];
+          var optional = match[2] === '?';
+
+          //If only parents then start at the parent element
+          if (inheritType === '^^') {
+            $element = $element.parent();
+          //Otherwise attempt getting the controller from elementControllers in case
+          //the element is transcluded (and has no data) and to avoid .data if possible
+          } else {
+            value = elementControllers && elementControllers[name];
+            value = value && value.instance;
+          }
+
+          if (!value) {
+            var dataName = '$' + name + 'Controller';
+            value = inheritType ? $element.inheritedData(dataName) : $element.data(dataName);
+          }
+
+          if (!value && !optional) {
+            throw $compileMinErr('ctreq',
+                "Controller '{0}', required by directive '{1}', can't be found!",
+                name, directiveName);
+          }
+        } else if (isArray(require)) {
+          value = [];
+          for (var i = 0, ii = require.length; i < ii; i++) {
+            value[i] = getControllers(directiveName, require[i], $element, elementControllers);
+          }
+        }
+
+        return value || null;
+      }
+
+      function setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope) {
+        var elementControllers = createMap();
+        for (var controllerKey in controllerDirectives) {
+          var directive = controllerDirectives[controllerKey];
+          var locals = {
+            $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope,
+            $element: $element,
+            $attrs: attrs,
+            $transclude: transcludeFn
+          };
+
+          var controller = directive.controller;
+          if (controller == '@') {
+            controller = attrs[directive.name];
+          }
+
+          var controllerInstance = $controller(controller, locals, true, directive.controllerAs);
+
+          // For directives with element transclusion the element is a comment,
+          // but jQuery .data doesn't support attaching data to comment nodes as it's hard to
+          // clean up (http://bugs.jquery.com/ticket/8335).
+          // Instead, we save the controllers for the element in a local hash and attach to .data
+          // later, once we have the actual element.
+          elementControllers[directive.name] = controllerInstance;
+          if (!hasElementTranscludeDirective) {
+            $element.data('$' + directive.name + 'Controller', controllerInstance.instance);
+          }
+        }
+        return elementControllers;
+      }
+
+      function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) {
+        var linkFn, isolateScope, controllerScope, elementControllers, transcludeFn, $element,
+            attrs, removeScopeBindingWatches, removeControllerBindingWatches;
+
+        if (compileNode === linkNode) {
+          attrs = templateAttrs;
+          $element = templateAttrs.$$element;
+        } else {
+          $element = jqLite(linkNode);
+          attrs = new Attributes($element, templateAttrs);
+        }
+
+        controllerScope = scope;
+        if (newIsolateScopeDirective) {
+          isolateScope = scope.$new(true);
+        } else if (newScopeDirective) {
+          controllerScope = scope.$parent;
+        }
+
+        if (boundTranscludeFn) {
+          // track `boundTranscludeFn` so it can be unwrapped if `transcludeFn`
+          // is later passed as `parentBoundTranscludeFn` to `publicLinkFn`
+          transcludeFn = controllersBoundTransclude;
+          transcludeFn.$$boundTransclude = boundTranscludeFn;
+        }
+
+        if (controllerDirectives) {
+          elementControllers = setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope);
+        }
+
+        if (newIsolateScopeDirective) {
+          // Initialize isolate scope bindings for new isolate scope directive.
+          compile.$$addScopeInfo($element, isolateScope, true, !(templateDirective && (templateDirective === newIsolateScopeDirective ||
+              templateDirective === newIsolateScopeDirective.$$originalDirective)));
+          compile.$$addScopeClass($element, true);
+          isolateScope.$$isolateBindings =
+              newIsolateScopeDirective.$$isolateBindings;
+          removeScopeBindingWatches = initializeDirectiveBindings(scope, attrs, isolateScope,
+                                        isolateScope.$$isolateBindings,
+                                        newIsolateScopeDirective);
+          if (removeScopeBindingWatches) {
+            isolateScope.$on('$destroy', removeScopeBindingWatches);
+          }
+        }
+
+        // Initialize bindToController bindings
+        for (var name in elementControllers) {
+          var controllerDirective = controllerDirectives[name];
+          var controller = elementControllers[name];
+          var bindings = controllerDirective.$$bindings.bindToController;
+
+          if (controller.identifier && bindings) {
+            removeControllerBindingWatches =
+              initializeDirectiveBindings(controllerScope, attrs, controller.instance, bindings, controllerDirective);
+          }
+
+          var controllerResult = controller();
+          if (controllerResult !== controller.instance) {
+            // If the controller constructor has a return value, overwrite the instance
+            // from setupControllers
+            controller.instance = controllerResult;
+            $element.data('$' + controllerDirective.name + 'Controller', controllerResult);
+            removeControllerBindingWatches && removeControllerBindingWatches();
+            removeControllerBindingWatches =
+              initializeDirectiveBindings(controllerScope, attrs, controller.instance, bindings, controllerDirective);
+          }
+        }
+
+        // PRELINKING
+        for (i = 0, ii = preLinkFns.length; i < ii; i++) {
+          linkFn = preLinkFns[i];
+          invokeLinkFn(linkFn,
+              linkFn.isolateScope ? isolateScope : scope,
+              $element,
+              attrs,
+              linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),
+              transcludeFn
+          );
+        }
+
+        // RECURSION
+        // We only pass the isolate scope, if the isolate directive has a template,
+        // otherwise the child elements do not belong to the isolate directive.
+        var scopeToChild = scope;
+        if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) {
+          scopeToChild = isolateScope;
+        }
+        childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn);
+
+        // POSTLINKING
+        for (i = postLinkFns.length - 1; i >= 0; i--) {
+          linkFn = postLinkFns[i];
+          invokeLinkFn(linkFn,
+              linkFn.isolateScope ? isolateScope : scope,
+              $element,
+              attrs,
+              linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers),
+              transcludeFn
+          );
+        }
+
+        // This is the function that is injected as `$transclude`.
+        // Note: all arguments are optional!
+        function controllersBoundTransclude(scope, cloneAttachFn, futureParentElement) {
+          var transcludeControllers;
+
+          // No scope passed in:
+          if (!isScope(scope)) {
+            futureParentElement = cloneAttachFn;
+            cloneAttachFn = scope;
+            scope = undefined;
+          }
+
+          if (hasElementTranscludeDirective) {
+            transcludeControllers = elementControllers;
+          }
+          if (!futureParentElement) {
+            futureParentElement = hasElementTranscludeDirective ? $element.parent() : $element;
+          }
+          return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild);
+        }
+      }
+    }
+
+    // Depending upon the context in which a directive finds itself it might need to have a new isolated
+    // or child scope created. For instance:
+    // * if the directive has been pulled into a template because another directive with a higher priority
+    // asked for element transclusion
+    // * if the directive itself asks for transclusion but it is at the root of a template and the original
+    // element was replaced. See https://github.com/angular/angular.js/issues/12936
+    function markDirectiveScope(directives, isolateScope, newScope) {
+      for (var j = 0, jj = directives.length; j < jj; j++) {
+        directives[j] = inherit(directives[j], {$$isolateScope: isolateScope, $$newScope: newScope});
+      }
+    }
+
+    /**
+     * looks up the directive and decorates it with exception handling and proper parameters. We
+     * call this the boundDirective.
+     *
+     * @param {string} name name of the directive to look up.
+     * @param {string} location The directive must be found in specific format.
+     *   String containing any of theses characters:
+     *
+     *   * `E`: element name
+     *   * `A': attribute
+     *   * `C`: class
+     *   * `M`: comment
+     * @returns {boolean} true if directive was added.
+     */
+    function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName,
+                          endAttrName) {
+      if (name === ignoreDirective) return null;
+      var match = null;
+      if (hasDirectives.hasOwnProperty(name)) {
+        for (var directive, directives = $injector.get(name + Suffix),
+            i = 0, ii = directives.length; i < ii; i++) {
+          try {
+            directive = directives[i];
+            if ((isUndefined(maxPriority) || maxPriority > directive.priority) &&
+                 directive.restrict.indexOf(location) != -1) {
+              if (startAttrName) {
+                directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName});
+              }
+              tDirectives.push(directive);
+              match = directive;
+            }
+          } catch (e) { $exceptionHandler(e); }
+        }
+      }
+      return match;
+    }
+
+
+    /**
+     * looks up the directive and returns true if it is a multi-element directive,
+     * and therefore requires DOM nodes between -start and -end markers to be grouped
+     * together.
+     *
+     * @param {string} name name of the directive to look up.
+     * @returns true if directive was registered as multi-element.
+     */
+    function directiveIsMultiElement(name) {
+      if (hasDirectives.hasOwnProperty(name)) {
+        for (var directive, directives = $injector.get(name + Suffix),
+            i = 0, ii = directives.length; i < ii; i++) {
+          directive = directives[i];
+          if (directive.multiElement) {
+            return true;
+          }
+        }
+      }
+      return false;
+    }
+
+    /**
+     * When the element is replaced with HTML template then the new attributes
+     * on the template need to be merged with the existing attributes in the DOM.
+     * The desired effect is to have both of the attributes present.
+     *
+     * @param {object} dst destination attributes (original DOM)
+     * @param {object} src source attributes (from the directive template)
+     */
+    function mergeTemplateAttributes(dst, src) {
+      var srcAttr = src.$attr,
+          dstAttr = dst.$attr,
+          $element = dst.$$element;
+
+      // reapply the old attributes to the new element
+      forEach(dst, function(value, key) {
+        if (key.charAt(0) != '$') {
+          if (src[key] && src[key] !== value) {
+            value += (key === 'style' ? ';' : ' ') + src[key];
+          }
+          dst.$set(key, value, true, srcAttr[key]);
+        }
+      });
+
+      // copy the new attributes on the old attrs object
+      forEach(src, function(value, key) {
+        if (key == 'class') {
+          safeAddClass($element, value);
+          dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value;
+        } else if (key == 'style') {
+          $element.attr('style', $element.attr('style') + ';' + value);
+          dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value;
+          // `dst` will never contain hasOwnProperty as DOM parser won't let it.
+          // You will get an "InvalidCharacterError: DOM Exception 5" error if you
+          // have an attribute like "has-own-property" or "data-has-own-property", etc.
+        } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) {
+          dst[key] = value;
+          dstAttr[key] = srcAttr[key];
+        }
+      });
+    }
+
+
+    function compileTemplateUrl(directives, $compileNode, tAttrs,
+        $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) {
+      var linkQueue = [],
+          afterTemplateNodeLinkFn,
+          afterTemplateChildLinkFn,
+          beforeTemplateCompileNode = $compileNode[0],
+          origAsyncDirective = directives.shift(),
+          derivedSyncDirective = inherit(origAsyncDirective, {
+            templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective
+          }),
+          templateUrl = (isFunction(origAsyncDirective.templateUrl))
+              ? origAsyncDirective.templateUrl($compileNode, tAttrs)
+              : origAsyncDirective.templateUrl,
+          templateNamespace = origAsyncDirective.templateNamespace;
+
+      $compileNode.empty();
+
+      $templateRequest(templateUrl)
+        .then(function(content) {
+          var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn;
+
+          content = denormalizeTemplate(content);
+
+          if (origAsyncDirective.replace) {
+            if (jqLiteIsTextNode(content)) {
+              $template = [];
+            } else {
+              $template = removeComments(wrapTemplate(templateNamespace, trim(content)));
+            }
+            compileNode = $template[0];
+
+            if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) {
+              throw $compileMinErr('tplrt',
+                  "Template for directive '{0}' must have exactly one root element. {1}",
+                  origAsyncDirective.name, templateUrl);
+            }
+
+            tempTemplateAttrs = {$attr: {}};
+            replaceWith($rootElement, $compileNode, compileNode);
+            var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs);
+
+            if (isObject(origAsyncDirective.scope)) {
+              // the original directive that caused the template to be loaded async required
+              // an isolate scope
+              markDirectiveScope(templateDirectives, true);
+            }
+            directives = templateDirectives.concat(directives);
+            mergeTemplateAttributes(tAttrs, tempTemplateAttrs);
+          } else {
+            compileNode = beforeTemplateCompileNode;
+            $compileNode.html(content);
+          }
+
+          directives.unshift(derivedSyncDirective);
+
+          afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs,
+              childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns,
+              previousCompileContext);
+          forEach($rootElement, function(node, i) {
+            if (node == compileNode) {
+              $rootElement[i] = $compileNode[0];
+            }
+          });
+          afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn);
+
+          while (linkQueue.length) {
+            var scope = linkQueue.shift(),
+                beforeTemplateLinkNode = linkQueue.shift(),
+                linkRootElement = linkQueue.shift(),
+                boundTranscludeFn = linkQueue.shift(),
+                linkNode = $compileNode[0];
+
+            if (scope.$$destroyed) continue;
+
+            if (beforeTemplateLinkNode !== beforeTemplateCompileNode) {
+              var oldClasses = beforeTemplateLinkNode.className;
+
+              if (!(previousCompileContext.hasElementTranscludeDirective &&
+                  origAsyncDirective.replace)) {
+                // it was cloned therefore we have to clone as well.
+                linkNode = jqLiteClone(compileNode);
+              }
+              replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode);
+
+              // Copy in CSS classes from original node
+              safeAddClass(jqLite(linkNode), oldClasses);
+            }
+            if (afterTemplateNodeLinkFn.transcludeOnThisElement) {
+              childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);
+            } else {
+              childBoundTranscludeFn = boundTranscludeFn;
+            }
+            afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement,
+              childBoundTranscludeFn);
+          }
+          linkQueue = null;
+        });
+
+      return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) {
+        var childBoundTranscludeFn = boundTranscludeFn;
+        if (scope.$$destroyed) return;
+        if (linkQueue) {
+          linkQueue.push(scope,
+                         node,
+                         rootElement,
+                         childBoundTranscludeFn);
+        } else {
+          if (afterTemplateNodeLinkFn.transcludeOnThisElement) {
+            childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn);
+          }
+          afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, childBoundTranscludeFn);
+        }
+      };
+    }
+
+
+    /**
+     * Sorting function for bound directives.
+     */
+    function byPriority(a, b) {
+      var diff = b.priority - a.priority;
+      if (diff !== 0) return diff;
+      if (a.name !== b.name) return (a.name < b.name) ? -1 : 1;
+      return a.index - b.index;
+    }
+
+    function assertNoDuplicate(what, previousDirective, directive, element) {
+
+      function wrapModuleNameIfDefined(moduleName) {
+        return moduleName ?
+          (' (module: ' + moduleName + ')') :
+          '';
+      }
+
+      if (previousDirective) {
+        throw $compileMinErr('multidir', 'Multiple directives [{0}{1}, {2}{3}] asking for {4} on: {5}',
+            previousDirective.name, wrapModuleNameIfDefined(previousDirective.$$moduleName),
+            directive.name, wrapModuleNameIfDefined(directive.$$moduleName), what, startingTag(element));
+      }
+    }
+
+
+    function addTextInterpolateDirective(directives, text) {
+      var interpolateFn = $interpolate(text, true);
+      if (interpolateFn) {
+        directives.push({
+          priority: 0,
+          compile: function textInterpolateCompileFn(templateNode) {
+            var templateNodeParent = templateNode.parent(),
+                hasCompileParent = !!templateNodeParent.length;
+
+            // When transcluding a template that has bindings in the root
+            // we don't have a parent and thus need to add the class during linking fn.
+            if (hasCompileParent) compile.$$addBindingClass(templateNodeParent);
+
+            return function textInterpolateLinkFn(scope, node) {
+              var parent = node.parent();
+              if (!hasCompileParent) compile.$$addBindingClass(parent);
+              compile.$$addBindingInfo(parent, interpolateFn.expressions);
+              scope.$watch(interpolateFn, function interpolateFnWatchAction(value) {
+                node[0].nodeValue = value;
+              });
+            };
+          }
+        });
+      }
+    }
+
+
+    function wrapTemplate(type, template) {
+      type = lowercase(type || 'html');
+      switch (type) {
+      case 'svg':
+      case 'math':
+        var wrapper = document.createElement('div');
+        wrapper.innerHTML = '<' + type + '>' + template + '</' + type + '>';
+        return wrapper.childNodes[0].childNodes;
+      default:
+        return template;
+      }
+    }
+
+
+    function getTrustedContext(node, attrNormalizedName) {
+      if (attrNormalizedName == "srcdoc") {
+        return $sce.HTML;
+      }
+      var tag = nodeName_(node);
+      // maction[xlink:href] can source SVG.  It's not limited to <maction>.
+      if (attrNormalizedName == "xlinkHref" ||
+          (tag == "form" && attrNormalizedName == "action") ||
+          (tag != "img" && (attrNormalizedName == "src" ||
+                            attrNormalizedName == "ngSrc"))) {
+        return $sce.RESOURCE_URL;
+      }
+    }
+
+
+    function addAttrInterpolateDirective(node, directives, value, name, allOrNothing) {
+      var trustedContext = getTrustedContext(node, name);
+      allOrNothing = ALL_OR_NOTHING_ATTRS[name] || allOrNothing;
+
+      var interpolateFn = $interpolate(value, true, trustedContext, allOrNothing);
+
+      // no interpolation found -> ignore
+      if (!interpolateFn) return;
+
+
+      if (name === "multiple" && nodeName_(node) === "select") {
+        throw $compileMinErr("selmulti",
+            "Binding to the 'multiple' attribute is not supported. Element: {0}",
+            startingTag(node));
+      }
+
+      directives.push({
+        priority: 100,
+        compile: function() {
+            return {
+              pre: function attrInterpolatePreLinkFn(scope, element, attr) {
+                var $$observers = (attr.$$observers || (attr.$$observers = createMap()));
+
+                if (EVENT_HANDLER_ATTR_REGEXP.test(name)) {
+                  throw $compileMinErr('nodomevents',
+                      "Interpolations for HTML DOM event attributes are disallowed.  Please use the " +
+                          "ng- versions (such as ng-click instead of onclick) instead.");
+                }
+
+                // If the attribute has changed since last $interpolate()ed
+                var newValue = attr[name];
+                if (newValue !== value) {
+                  // we need to interpolate again since the attribute value has been updated
+                  // (e.g. by another directive's compile function)
+                  // ensure unset/empty values make interpolateFn falsy
+                  interpolateFn = newValue && $interpolate(newValue, true, trustedContext, allOrNothing);
+                  value = newValue;
+                }
+
+                // if attribute was updated so that there is no interpolation going on we don't want to
+                // register any observers
+                if (!interpolateFn) return;
+
+                // initialize attr object so that it's ready in case we need the value for isolate
+                // scope initialization, otherwise the value would not be available from isolate
+                // directive's linking fn during linking phase
+                attr[name] = interpolateFn(scope);
+
+                ($$observers[name] || ($$observers[name] = [])).$$inter = true;
+                (attr.$$observers && attr.$$observers[name].$$scope || scope).
+                  $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) {
+                    //special case for class attribute addition + removal
+                    //so that class changes can tap into the animation
+                    //hooks provided by the $animate service. Be sure to
+                    //skip animations when the first digest occurs (when
+                    //both the new and the old values are the same) since
+                    //the CSS classes are the non-interpolated values
+                    if (name === 'class' && newValue != oldValue) {
+                      attr.$updateClass(newValue, oldValue);
+                    } else {
+                      attr.$set(name, newValue);
+                    }
+                  });
+              }
+            };
+          }
+      });
+    }
+
+
+    /**
+     * This is a special jqLite.replaceWith, which can replace items which
+     * have no parents, provided that the containing jqLite collection is provided.
+     *
+     * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes
+     *                               in the root of the tree.
+     * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep
+     *                                  the shell, but replace its DOM node reference.
+     * @param {Node} newNode The new DOM node.
+     */
+    function replaceWith($rootElement, elementsToRemove, newNode) {
+      var firstElementToRemove = elementsToRemove[0],
+          removeCount = elementsToRemove.length,
+          parent = firstElementToRemove.parentNode,
+          i, ii;
+
+      if ($rootElement) {
+        for (i = 0, ii = $rootElement.length; i < ii; i++) {
+          if ($rootElement[i] == firstElementToRemove) {
+            $rootElement[i++] = newNode;
+            for (var j = i, j2 = j + removeCount - 1,
+                     jj = $rootElement.length;
+                 j < jj; j++, j2++) {
+              if (j2 < jj) {
+                $rootElement[j] = $rootElement[j2];
+              } else {
+                delete $rootElement[j];
+              }
+            }
+            $rootElement.length -= removeCount - 1;
+
+            // If the replaced element is also the jQuery .context then replace it
+            // .context is a deprecated jQuery api, so we should set it only when jQuery set it
+            // http://api.jquery.com/context/
+            if ($rootElement.context === firstElementToRemove) {
+              $rootElement.context = newNode;
+            }
+            break;
+          }
+        }
+      }
+
+      if (parent) {
+        parent.replaceChild(newNode, firstElementToRemove);
+      }
+
+      // TODO(perf): what's this document fragment for? is it needed? can we at least reuse it?
+      var fragment = document.createDocumentFragment();
+      fragment.appendChild(firstElementToRemove);
+
+      if (jqLite.hasData(firstElementToRemove)) {
+        // Copy over user data (that includes Angular's $scope etc.). Don't copy private
+        // data here because there's no public interface in jQuery to do that and copying over
+        // event listeners (which is the main use of private data) wouldn't work anyway.
+        jqLite.data(newNode, jqLite.data(firstElementToRemove));
+
+        // Remove data of the replaced element. We cannot just call .remove()
+        // on the element it since that would deallocate scope that is needed
+        // for the new node. Instead, remove the data "manually".
+        if (!jQuery) {
+          delete jqLite.cache[firstElementToRemove[jqLite.expando]];
+        } else {
+          // jQuery 2.x doesn't expose the data storage. Use jQuery.cleanData to clean up after
+          // the replaced element. The cleanData version monkey-patched by Angular would cause
+          // the scope to be trashed and we do need the very same scope to work with the new
+          // element. However, we cannot just cache the non-patched version and use it here as
+          // that would break if another library patches the method after Angular does (one
+          // example is jQuery UI). Instead, set a flag indicating scope destroying should be
+          // skipped this one time.
+          skipDestroyOnNextJQueryCleanData = true;
+          jQuery.cleanData([firstElementToRemove]);
+        }
+      }
+
+      for (var k = 1, kk = elementsToRemove.length; k < kk; k++) {
+        var element = elementsToRemove[k];
+        jqLite(element).remove(); // must do this way to clean up expando
+        fragment.appendChild(element);
+        delete elementsToRemove[k];
+      }
+
+      elementsToRemove[0] = newNode;
+      elementsToRemove.length = 1;
+    }
+
+
+    function cloneAndAnnotateFn(fn, annotation) {
+      return extend(function() { return fn.apply(null, arguments); }, fn, annotation);
+    }
+
+
+    function invokeLinkFn(linkFn, scope, $element, attrs, controllers, transcludeFn) {
+      try {
+        linkFn(scope, $element, attrs, controllers, transcludeFn);
+      } catch (e) {
+        $exceptionHandler(e, startingTag($element));
+      }
+    }
+
+
+    // Set up $watches for isolate scope and controller bindings. This process
+    // only occurs for isolate scopes and new scopes with controllerAs.
+    function initializeDirectiveBindings(scope, attrs, destination, bindings, directive) {
+      var removeWatchCollection = [];
+      forEach(bindings, function(definition, scopeName) {
+        var attrName = definition.attrName,
+        optional = definition.optional,
+        mode = definition.mode, // @, =, or &
+        lastValue,
+        parentGet, parentSet, compare;
+
+        switch (mode) {
+
+          case '@':
+            if (!optional && !hasOwnProperty.call(attrs, attrName)) {
+              destination[scopeName] = attrs[attrName] = void 0;
+            }
+            attrs.$observe(attrName, function(value) {
+              if (isString(value)) {
+                destination[scopeName] = value;
+              }
+            });
+            attrs.$$observers[attrName].$$scope = scope;
+            if (isString(attrs[attrName])) {
+              // If the attribute has been provided then we trigger an interpolation to ensure
+              // the value is there for use in the link fn
+              destination[scopeName] = $interpolate(attrs[attrName])(scope);
+            }
+            break;
+
+          case '=':
+            if (!hasOwnProperty.call(attrs, attrName)) {
+              if (optional) break;
+              attrs[attrName] = void 0;
+            }
+            if (optional && !attrs[attrName]) break;
+
+            parentGet = $parse(attrs[attrName]);
+            if (parentGet.literal) {
+              compare = equals;
+            } else {
+              compare = function(a, b) { return a === b || (a !== a && b !== b); };
+            }
+            parentSet = parentGet.assign || function() {
+              // reset the change, or we will throw this exception on every $digest
+              lastValue = destination[scopeName] = parentGet(scope);
+              throw $compileMinErr('nonassign',
+                  "Expression '{0}' used with directive '{1}' is non-assignable!",
+                  attrs[attrName], directive.name);
+            };
+            lastValue = destination[scopeName] = parentGet(scope);
+            var parentValueWatch = function parentValueWatch(parentValue) {
+              if (!compare(parentValue, destination[scopeName])) {
+                // we are out of sync and need to copy
+                if (!compare(parentValue, lastValue)) {
+                  // parent changed and it has precedence
+                  destination[scopeName] = parentValue;
+                } else {
+                  // if the parent can be assigned then do so
+                  parentSet(scope, parentValue = destination[scopeName]);
+                }
+              }
+              return lastValue = parentValue;
+            };
+            parentValueWatch.$stateful = true;
+            var removeWatch;
+            if (definition.collection) {
+              removeWatch = scope.$watchCollection(attrs[attrName], parentValueWatch);
+            } else {
+              removeWatch = scope.$watch($parse(attrs[attrName], parentValueWatch), null, parentGet.literal);
+            }
+            removeWatchCollection.push(removeWatch);
+            break;
+
+          case '&':
+            // Don't assign Object.prototype method to scope
+            parentGet = attrs.hasOwnProperty(attrName) ? $parse(attrs[attrName]) : noop;
+
+            // Don't assign noop to destination if expression is not valid
+            if (parentGet === noop && optional) break;
+
+            destination[scopeName] = function(locals) {
+              return parentGet(scope, locals);
+            };
+            break;
+        }
+      });
+
+      return removeWatchCollection.length && function removeWatches() {
+        for (var i = 0, ii = removeWatchCollection.length; i < ii; ++i) {
+          removeWatchCollection[i]();
+        }
+      };
+    }
+  }];
+}
+
+var PREFIX_REGEXP = /^((?:x|data)[\:\-_])/i;
+/**
+ * Converts all accepted directives format into proper directive name.
+ * @param name Name to normalize
+ */
+function directiveNormalize(name) {
+  return camelCase(name.replace(PREFIX_REGEXP, ''));
+}
+
+/**
+ * @ngdoc type
+ * @name $compile.directive.Attributes
+ *
+ * @description
+ * A shared object between directive compile / linking functions which contains normalized DOM
+ * element attributes. The values reflect current binding state `{{ }}`. The normalization is
+ * needed since all of these are treated as equivalent in Angular:
+ *
+ * ```
+ *    <span ng:bind="a" ng-bind="a" data-ng-bind="a" x-ng-bind="a">
+ * ```
+ */
+
+/**
+ * @ngdoc property
+ * @name $compile.directive.Attributes#$attr
+ *
+ * @description
+ * A map of DOM element attribute names to the normalized name. This is
+ * needed to do reverse lookup from normalized name back to actual name.
+ */
+
+
+/**
+ * @ngdoc method
+ * @name $compile.directive.Attributes#$set
+ * @kind function
+ *
+ * @description
+ * Set DOM element attribute value.
+ *
+ *
+ * @param {string} name Normalized element attribute name of the property to modify. The name is
+ *          reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr}
+ *          property to the original name.
+ * @param {string} value Value to set the attribute to. The value can be an interpolated string.
+ */
+
+
+
+/**
+ * Closure compiler type information
+ */
+
+function nodesetLinkingFn(
+  /* angular.Scope */ scope,
+  /* NodeList */ nodeList,
+  /* Element */ rootElement,
+  /* function(Function) */ boundTranscludeFn
+) {}
+
+function directiveLinkingFn(
+  /* nodesetLinkingFn */ nodesetLinkingFn,
+  /* angular.Scope */ scope,
+  /* Node */ node,
+  /* Element */ rootElement,
+  /* function(Function) */ boundTranscludeFn
+) {}
+
+function tokenDifference(str1, str2) {
+  var values = '',
+      tokens1 = str1.split(/\s+/),
+      tokens2 = str2.split(/\s+/);
+
+  outer:
+  for (var i = 0; i < tokens1.length; i++) {
+    var token = tokens1[i];
+    for (var j = 0; j < tokens2.length; j++) {
+      if (token == tokens2[j]) continue outer;
+    }
+    values += (values.length > 0 ? ' ' : '') + token;
+  }
+  return values;
+}
+
+function removeComments(jqNodes) {
+  jqNodes = jqLite(jqNodes);
+  var i = jqNodes.length;
+
+  if (i <= 1) {
+    return jqNodes;
+  }
+
+  while (i--) {
+    var node = jqNodes[i];
+    if (node.nodeType === NODE_TYPE_COMMENT) {
+      splice.call(jqNodes, i, 1);
+    }
+  }
+  return jqNodes;
+}
+
+var $controllerMinErr = minErr('$controller');
+
+
+var CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/;
+function identifierForController(controller, ident) {
+  if (ident && isString(ident)) return ident;
+  if (isString(controller)) {
+    var match = CNTRL_REG.exec(controller);
+    if (match) return match[3];
+  }
+}
+
+
+/**
+ * @ngdoc provider
+ * @name $controllerProvider
+ * @description
+ * The {@link ng.$controller $controller service} is used by Angular to create new
+ * controllers.
+ *
+ * This provider allows controller registration via the
+ * {@link ng.$controllerProvider#register register} method.
+ */
+function $ControllerProvider() {
+  var controllers = {},
+      globals = false;
+
+  /**
+   * @ngdoc method
+   * @name $controllerProvider#register
+   * @param {string|Object} name Controller name, or an object map of controllers where the keys are
+   *    the names and the values are the constructors.
+   * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI
+   *    annotations in the array notation).
+   */
+  this.register = function(name, constructor) {
+    assertNotHasOwnProperty(name, 'controller');
+    if (isObject(name)) {
+      extend(controllers, name);
+    } else {
+      controllers[name] = constructor;
+    }
+  };
+
+  /**
+   * @ngdoc method
+   * @name $controllerProvider#allowGlobals
+   * @description If called, allows `$controller` to find controller constructors on `window`
+   */
+  this.allowGlobals = function() {
+    globals = true;
+  };
+
+
+  this.$get = ['$injector', '$window', function($injector, $window) {
+
+    /**
+     * @ngdoc service
+     * @name $controller
+     * @requires $injector
+     *
+     * @param {Function|string} constructor If called with a function then it's considered to be the
+     *    controller constructor function. Otherwise it's considered to be a string which is used
+     *    to retrieve the controller constructor using the following steps:
+     *
+     *    * check if a controller with given name is registered via `$controllerProvider`
+     *    * check if evaluating the string on the current scope returns a constructor
+     *    * if $controllerProvider#allowGlobals, check `window[constructor]` on the global
+     *      `window` object (not recommended)
+     *
+     *    The string can use the `controller as property` syntax, where the controller instance is published
+     *    as the specified property on the `scope`; the `scope` must be injected into `locals` param for this
+     *    to work correctly.
+     *
+     * @param {Object} locals Injection locals for Controller.
+     * @return {Object} Instance of given controller.
+     *
+     * @description
+     * `$controller` service is responsible for instantiating controllers.
+     *
+     * It's just a simple call to {@link auto.$injector $injector}, but extracted into
+     * a service, so that one can override this service with [BC version](https://gist.github.com/1649788).
+     */
+    return function(expression, locals, later, ident) {
+      // PRIVATE API:
+      //   param `later` --- indicates that the controller's constructor is invoked at a later time.
+      //                     If true, $controller will allocate the object with the correct
+      //                     prototype chain, but will not invoke the controller until a returned
+      //                     callback is invoked.
+      //   param `ident` --- An optional label which overrides the label parsed from the controller
+      //                     expression, if any.
+      var instance, match, constructor, identifier;
+      later = later === true;
+      if (ident && isString(ident)) {
+        identifier = ident;
+      }
+
+      if (isString(expression)) {
+        match = expression.match(CNTRL_REG);
+        if (!match) {
+          throw $controllerMinErr('ctrlfmt',
+            "Badly formed controller string '{0}'. " +
+            "Must match `__name__ as __id__` or `__name__`.", expression);
+        }
+        constructor = match[1],
+        identifier = identifier || match[3];
+        expression = controllers.hasOwnProperty(constructor)
+            ? controllers[constructor]
+            : getter(locals.$scope, constructor, true) ||
+                (globals ? getter($window, constructor, true) : undefined);
+
+        assertArgFn(expression, constructor, true);
+      }
+
+      if (later) {
+        // Instantiate controller later:
+        // This machinery is used to create an instance of the object before calling the
+        // controller's constructor itself.
+        //
+        // This allows properties to be added to the controller before the constructor is
+        // invoked. Primarily, this is used for isolate scope bindings in $compile.
+        //
+        // This feature is not intended for use by applications, and is thus not documented
+        // publicly.
+        // Object creation: http://jsperf.com/create-constructor/2
+        var controllerPrototype = (isArray(expression) ?
+          expression[expression.length - 1] : expression).prototype;
+        instance = Object.create(controllerPrototype || null);
+
+        if (identifier) {
+          addIdentifier(locals, identifier, instance, constructor || expression.name);
+        }
+
+        var instantiate;
+        return instantiate = extend(function() {
+          var result = $injector.invoke(expression, instance, locals, constructor);
+          if (result !== instance && (isObject(result) || isFunction(result))) {
+            instance = result;
+            if (identifier) {
+              // If result changed, re-assign controllerAs value to scope.
+              addIdentifier(locals, identifier, instance, constructor || expression.name);
+            }
+          }
+          return instance;
+        }, {
+          instance: instance,
+          identifier: identifier
+        });
+      }
+
+      instance = $injector.instantiate(expression, locals, constructor);
+
+      if (identifier) {
+        addIdentifier(locals, identifier, instance, constructor || expression.name);
+      }
+
+      return instance;
+    };
+
+    function addIdentifier(locals, identifier, instance, name) {
+      if (!(locals && isObject(locals.$scope))) {
+        throw minErr('$controller')('noscp',
+          "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.",
+          name, identifier);
+      }
+
+      locals.$scope[identifier] = instance;
+    }
+  }];
+}
+
+/**
+ * @ngdoc service
+ * @name $document
+ * @requires $window
+ *
+ * @description
+ * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object.
+ *
+ * @example
+   <example module="documentExample">
+     <file name="index.html">
+       <div ng-controller="ExampleController">
+         <p>$document title: <b ng-bind="title"></b></p>
+         <p>window.document title: <b ng-bind="windowTitle"></b></p>
+       </div>
+     </file>
+     <file name="script.js">
+       angular.module('documentExample', [])
+         .controller('ExampleController', ['$scope', '$document', function($scope, $document) {
+           $scope.title = $document[0].title;
+           $scope.windowTitle = angular.element(window.document)[0].title;
+         }]);
+     </file>
+   </example>
+ */
+function $DocumentProvider() {
+  this.$get = ['$window', function(window) {
+    return jqLite(window.document);
+  }];
+}
+
+/**
+ * @ngdoc service
+ * @name $exceptionHandler
+ * @requires ng.$log
+ *
+ * @description
+ * Any uncaught exception in angular expressions is delegated to this service.
+ * The default implementation simply delegates to `$log.error` which logs it into
+ * the browser console.
+ *
+ * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by
+ * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing.
+ *
+ * ## Example:
+ *
+ * ```js
+ *   angular.module('exceptionOverride', []).factory('$exceptionHandler', function() {
+ *     return function(exception, cause) {
+ *       exception.message += ' (caused by "' + cause + '")';
+ *       throw exception;
+ *     };
+ *   });
+ * ```
+ *
+ * This example will override the normal action of `$exceptionHandler`, to make angular
+ * exceptions fail hard when they happen, instead of just logging to the console.
+ *
+ * <hr />
+ * Note, that code executed in event-listeners (even those registered using jqLite's `on`/`bind`
+ * methods) does not delegate exceptions to the {@link ng.$exceptionHandler $exceptionHandler}
+ * (unless executed during a digest).
+ *
+ * If you wish, you can manually delegate exceptions, e.g.
+ * `try { ... } catch(e) { $exceptionHandler(e); }`
+ *
+ * @param {Error} exception Exception associated with the error.
+ * @param {string=} cause optional information about the context in which
+ *       the error was thrown.
+ *
+ */
+function $ExceptionHandlerProvider() {
+  this.$get = ['$log', function($log) {
+    return function(exception, cause) {
+      $log.error.apply($log, arguments);
+    };
+  }];
+}
+
+var $$ForceReflowProvider = function() {
+  this.$get = ['$document', function($document) {
+    return function(domNode) {
+      //the line below will force the browser to perform a repaint so
+      //that all the animated elements within the animation frame will
+      //be properly updated and drawn on screen. This is required to
+      //ensure that the preparation animation is properly flushed so that
+      //the active state picks up from there. DO NOT REMOVE THIS LINE.
+      //DO NOT OPTIMIZE THIS LINE. THE MINIFIER WILL REMOVE IT OTHERWISE WHICH
+      //WILL RESULT IN AN UNPREDICTABLE BUG THAT IS VERY HARD TO TRACK DOWN AND
+      //WILL TAKE YEARS AWAY FROM YOUR LIFE.
+      if (domNode) {
+        if (!domNode.nodeType && domNode instanceof jqLite) {
+          domNode = domNode[0];
+        }
+      } else {
+        domNode = $document[0].body;
+      }
+      return domNode.offsetWidth + 1;
+    };
+  }];
+};
+
+var APPLICATION_JSON = 'application/json';
+var CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'};
+var JSON_START = /^\[|^\{(?!\{)/;
+var JSON_ENDS = {
+  '[': /]$/,
+  '{': /}$/
+};
+var JSON_PROTECTION_PREFIX = /^\)\]\}',?\n/;
+var $httpMinErr = minErr('$http');
+var $httpMinErrLegacyFn = function(method) {
+  return function() {
+    throw $httpMinErr('legacy', 'The method `{0}` on the promise returned from `$http` has been disabled.', method);
+  };
+};
+
+function serializeValue(v) {
+  if (isObject(v)) {
+    return isDate(v) ? v.toISOString() : toJson(v);
+  }
+  return v;
+}
+
+
+function $HttpParamSerializerProvider() {
+  /**
+   * @ngdoc service
+   * @name $httpParamSerializer
+   * @description
+   *
+   * Default {@link $http `$http`} params serializer that converts objects to strings
+   * according to the following rules:
+   *
+   * * `{'foo': 'bar'}` results in `foo=bar`
+   * * `{'foo': Date.now()}` results in `foo=2015-04-01T09%3A50%3A49.262Z` (`toISOString()` and encoded representation of a Date object)
+   * * `{'foo': ['bar', 'baz']}` results in `foo=bar&foo=baz` (repeated key for each array element)
+   * * `{'foo': {'bar':'baz'}}` results in `foo=%7B%22bar%22%3A%22baz%22%7D"` (stringified and encoded representation of an object)
+   *
+   * Note that serializer will sort the request parameters alphabetically.
+   * */
+
+  this.$get = function() {
+    return function ngParamSerializer(params) {
+      if (!params) return '';
+      var parts = [];
+      forEachSorted(params, function(value, key) {
+        if (value === null || isUndefined(value)) return;
+        if (isArray(value)) {
+          forEach(value, function(v, k) {
+            parts.push(encodeUriQuery(key)  + '=' + encodeUriQuery(serializeValue(v)));
+          });
+        } else {
+          parts.push(encodeUriQuery(key) + '=' + encodeUriQuery(serializeValue(value)));
+        }
+      });
+
+      return parts.join('&');
+    };
+  };
+}
+
+function $HttpParamSerializerJQLikeProvider() {
+  /**
+   * @ngdoc service
+   * @name $httpParamSerializerJQLike
+   * @description
+   *
+   * Alternative {@link $http `$http`} params serializer that follows
+   * jQuery's [`param()`](http://api.jquery.com/jquery.param/) method logic.
+   * The serializer will also sort the params alphabetically.
+   *
+   * To use it for serializing `$http` request parameters, set it as the `paramSerializer` property:
+   *
+   * ```js
+   * $http({
+   *   url: myUrl,
+   *   method: 'GET',
+   *   params: myParams,
+   *   paramSerializer: '$httpParamSerializerJQLike'
+   * });
+   * ```
+   *
+   * It is also possible to set it as the default `paramSerializer` in the
+   * {@link $httpProvider#defaults `$httpProvider`}.
+   *
+   * Additionally, you can inject the serializer and use it explicitly, for example to serialize
+   * form data for submission:
+   *
+   * ```js
+   * .controller(function($http, $httpParamSerializerJQLike) {
+   *   //...
+   *
+   *   $http({
+   *     url: myUrl,
+   *     method: 'POST',
+   *     data: $httpParamSerializerJQLike(myData),
+   *     headers: {
+   *       'Content-Type': 'application/x-www-form-urlencoded'
+   *     }
+   *   });
+   *
+   * });
+   * ```
+   *
+   * */
+  this.$get = function() {
+    return function jQueryLikeParamSerializer(params) {
+      if (!params) return '';
+      var parts = [];
+      serialize(params, '', true);
+      return parts.join('&');
+
+      function serialize(toSerialize, prefix, topLevel) {
+        if (toSerialize === null || isUndefined(toSerialize)) return;
+        if (isArray(toSerialize)) {
+          forEach(toSerialize, function(value, index) {
+            serialize(value, prefix + '[' + (isObject(value) ? index : '') + ']');
+          });
+        } else if (isObject(toSerialize) && !isDate(toSerialize)) {
+          forEachSorted(toSerialize, function(value, key) {
+            serialize(value, prefix +
+                (topLevel ? '' : '[') +
+                key +
+                (topLevel ? '' : ']'));
+          });
+        } else {
+          parts.push(encodeUriQuery(prefix) + '=' + encodeUriQuery(serializeValue(toSerialize)));
+        }
+      }
+    };
+  };
+}
+
+function defaultHttpResponseTransform(data, headers) {
+  if (isString(data)) {
+    // Strip json vulnerability protection prefix and trim whitespace
+    var tempData = data.replace(JSON_PROTECTION_PREFIX, '').trim();
+
+    if (tempData) {
+      var contentType = headers('Content-Type');
+      if ((contentType && (contentType.indexOf(APPLICATION_JSON) === 0)) || isJsonLike(tempData)) {
+        data = fromJson(tempData);
+      }
+    }
+  }
+
+  return data;
+}
+
+function isJsonLike(str) {
+    var jsonStart = str.match(JSON_START);
+    return jsonStart && JSON_ENDS[jsonStart[0]].test(str);
+}
+
+/**
+ * Parse headers into key value object
+ *
+ * @param {string} headers Raw headers as a string
+ * @returns {Object} Parsed headers as key value object
+ */
+function parseHeaders(headers) {
+  var parsed = createMap(), i;
+
+  function fillInParsed(key, val) {
+    if (key) {
+      parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
+    }
+  }
+
+  if (isString(headers)) {
+    forEach(headers.split('\n'), function(line) {
+      i = line.indexOf(':');
+      fillInParsed(lowercase(trim(line.substr(0, i))), trim(line.substr(i + 1)));
+    });
+  } else if (isObject(headers)) {
+    forEach(headers, function(headerVal, headerKey) {
+      fillInParsed(lowercase(headerKey), trim(headerVal));
+    });
+  }
+
+  return parsed;
+}
+
+
+/**
+ * Returns a function that provides access to parsed headers.
+ *
+ * Headers are lazy parsed when first requested.
+ * @see parseHeaders
+ *
+ * @param {(string|Object)} headers Headers to provide access to.
+ * @returns {function(string=)} Returns a getter function which if called with:
+ *
+ *   - if called with single an argument returns a single header value or null
+ *   - if called with no arguments returns an object containing all headers.
+ */
+function headersGetter(headers) {
+  var headersObj;
+
+  return function(name) {
+    if (!headersObj) headersObj =  parseHeaders(headers);
+
+    if (name) {
+      var value = headersObj[lowercase(name)];
+      if (value === void 0) {
+        value = null;
+      }
+      return value;
+    }
+
+    return headersObj;
+  };
+}
+
+
+/**
+ * Chain all given functions
+ *
+ * This function is used for both request and response transforming
+ *
+ * @param {*} data Data to transform.
+ * @param {function(string=)} headers HTTP headers getter fn.
+ * @param {number} status HTTP status code of the response.
+ * @param {(Function|Array.<Function>)} fns Function or an array of functions.
+ * @returns {*} Transformed data.
+ */
+function transformData(data, headers, status, fns) {
+  if (isFunction(fns)) {
+    return fns(data, headers, status);
+  }
+
+  forEach(fns, function(fn) {
+    data = fn(data, headers, status);
+  });
+
+  return data;
+}
+
+
+function isSuccess(status) {
+  return 200 <= status && status < 300;
+}
+
+
+/**
+ * @ngdoc provider
+ * @name $httpProvider
+ * @description
+ * Use `$httpProvider` to change the default behavior of the {@link ng.$http $http} service.
+ * */
+function $HttpProvider() {
+  /**
+   * @ngdoc property
+   * @name $httpProvider#defaults
+   * @description
+   *
+   * Object containing default values for all {@link ng.$http $http} requests.
+   *
+   * - **`defaults.cache`** - {Object} - an object built with {@link ng.$cacheFactory `$cacheFactory`}
+   * that will provide the cache for all requests who set their `cache` property to `true`.
+   * If you set the `defaults.cache = false` then only requests that specify their own custom
+   * cache object will be cached. See {@link $http#caching $http Caching} for more information.
+   *
+   * - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token.
+   * Defaults value is `'XSRF-TOKEN'`.
+   *
+   * - **`defaults.xsrfHeaderName`** - {string} - Name of HTTP header to populate with the
+   * XSRF token. Defaults value is `'X-XSRF-TOKEN'`.
+   *
+   * - **`defaults.headers`** - {Object} - Default headers for all $http requests.
+   * Refer to {@link ng.$http#setting-http-headers $http} for documentation on
+   * setting default headers.
+   *     - **`defaults.headers.common`**
+   *     - **`defaults.headers.post`**
+   *     - **`defaults.headers.put`**
+   *     - **`defaults.headers.patch`**
+   *
+   *
+   * - **`defaults.paramSerializer`** - `{string|function(Object<string,string>):string}` - A function
+   *  used to the prepare string representation of request parameters (specified as an object).
+   *  If specified as string, it is interpreted as a function registered with the {@link auto.$injector $injector}.
+   *  Defaults to {@link ng.$httpParamSerializer $httpParamSerializer}.
+   *
+   **/
+  var defaults = this.defaults = {
+    // transform incoming response data
+    transformResponse: [defaultHttpResponseTransform],
+
+    // transform outgoing request data
+    transformRequest: [function(d) {
+      return isObject(d) && !isFile(d) && !isBlob(d) && !isFormData(d) ? toJson(d) : d;
+    }],
+
+    // default headers
+    headers: {
+      common: {
+        'Accept': 'application/json, text/plain, */*'
+      },
+      post:   shallowCopy(CONTENT_TYPE_APPLICATION_JSON),
+      put:    shallowCopy(CONTENT_TYPE_APPLICATION_JSON),
+      patch:  shallowCopy(CONTENT_TYPE_APPLICATION_JSON)
+    },
+
+    xsrfCookieName: 'XSRF-TOKEN',
+    xsrfHeaderName: 'X-XSRF-TOKEN',
+
+    paramSerializer: '$httpParamSerializer'
+  };
+
+  var useApplyAsync = false;
+  /**
+   * @ngdoc method
+   * @name $httpProvider#useApplyAsync
+   * @description
+   *
+   * Configure $http service to combine processing of multiple http responses received at around
+   * the same time via {@link ng.$rootScope.Scope#$applyAsync $rootScope.$applyAsync}. This can result in
+   * significant performance improvement for bigger applications that make many HTTP requests
+   * concurrently (common during application bootstrap).
+   *
+   * Defaults to false. If no value is specified, returns the current configured value.
+   *
+   * @param {boolean=} value If true, when requests are loaded, they will schedule a deferred
+   *    "apply" on the next tick, giving time for subsequent requests in a roughly ~10ms window
+   *    to load and share the same digest cycle.
+   *
+   * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining.
+   *    otherwise, returns the current configured value.
+   **/
+  this.useApplyAsync = function(value) {
+    if (isDefined(value)) {
+      useApplyAsync = !!value;
+      return this;
+    }
+    return useApplyAsync;
+  };
+
+  var useLegacyPromise = true;
+  /**
+   * @ngdoc method
+   * @name $httpProvider#useLegacyPromiseExtensions
+   * @description
+   *
+   * Configure `$http` service to return promises without the shorthand methods `success` and `error`.
+   * This should be used to make sure that applications work without these methods.
+   *
+   * Defaults to true. If no value is specified, returns the current configured value.
+   *
+   * @param {boolean=} value If true, `$http` will return a promise with the deprecated legacy `success` and `error` methods.
+   *
+   * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining.
+   *    otherwise, returns the current configured value.
+   **/
+  this.useLegacyPromiseExtensions = function(value) {
+    if (isDefined(value)) {
+      useLegacyPromise = !!value;
+      return this;
+    }
+    return useLegacyPromise;
+  };
+
+  /**
+   * @ngdoc property
+   * @name $httpProvider#interceptors
+   * @description
+   *
+   * Array containing service factories for all synchronous or asynchronous {@link ng.$http $http}
+   * pre-processing of request or postprocessing of responses.
+   *
+   * These service factories are ordered by request, i.e. they are applied in the same order as the
+   * array, on request, but reverse order, on response.
+   *
+   * {@link ng.$http#interceptors Interceptors detailed info}
+   **/
+  var interceptorFactories = this.interceptors = [];
+
+  this.$get = ['$httpBackend', '$$cookieReader', '$cacheFactory', '$rootScope', '$q', '$injector',
+      function($httpBackend, $$cookieReader, $cacheFactory, $rootScope, $q, $injector) {
+
+    var defaultCache = $cacheFactory('$http');
+
+    /**
+     * Make sure that default param serializer is exposed as a function
+     */
+    defaults.paramSerializer = isString(defaults.paramSerializer) ?
+      $injector.get(defaults.paramSerializer) : defaults.paramSerializer;
+
+    /**
+     * Interceptors stored in reverse order. Inner interceptors before outer interceptors.
+     * The reversal is needed so that we can build up the interception chain around the
+     * server request.
+     */
+    var reversedInterceptors = [];
+
+    forEach(interceptorFactories, function(interceptorFactory) {
+      reversedInterceptors.unshift(isString(interceptorFactory)
+          ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory));
+    });
+
+    /**
+     * @ngdoc service
+     * @kind function
+     * @name $http
+     * @requires ng.$httpBackend
+     * @requires $cacheFactory
+     * @requires $rootScope
+     * @requires $q
+     * @requires $injector
+     *
+     * @description
+     * The `$http` service is a core Angular service that facilitates communication with the remote
+     * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest)
+     * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP).
+     *
+     * For unit testing applications that use `$http` service, see
+     * {@link ngMock.$httpBackend $httpBackend mock}.
+     *
+     * For a higher level of abstraction, please check out the {@link ngResource.$resource
+     * $resource} service.
+     *
+     * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by
+     * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage
+     * it is important to familiarize yourself with these APIs and the guarantees they provide.
+     *
+     *
+     * ## General usage
+     * The `$http` service is a function which takes a single argument — a {@link $http#usage configuration object} —
+     * that is used to generate an HTTP request and returns  a {@link ng.$q promise}.
+     *
+     * ```js
+     *   // Simple GET request example:
+     *   $http({
+     *     method: 'GET',
+     *     url: '/someUrl'
+     *   }).then(function successCallback(response) {
+     *       // this callback will be called asynchronously
+     *       // when the response is available
+     *     }, function errorCallback(response) {
+     *       // called asynchronously if an error occurs
+     *       // or server returns response with an error status.
+     *     });
+     * ```
+     *
+     * The response object has these properties:
+     *
+     *   - **data** – `{string|Object}` – The response body transformed with the transform
+     *     functions.
+     *   - **status** – `{number}` – HTTP status code of the response.
+     *   - **headers** – `{function([headerName])}` – Header getter function.
+     *   - **config** – `{Object}` – The configuration object that was used to generate the request.
+     *   - **statusText** – `{string}` – HTTP status text of the response.
+     *
+     * A response status code between 200 and 299 is considered a success status and
+     * will result in the success callback being called. Note that if the response is a redirect,
+     * XMLHttpRequest will transparently follow it, meaning that the error callback will not be
+     * called for such responses.
+     *
+     *
+     * ## Shortcut methods
+     *
+     * Shortcut methods are also available. All shortcut methods require passing in the URL, and
+     * request data must be passed in for POST/PUT requests. An optional config can be passed as the
+     * last argument.
+     *
+     * ```js
+     *   $http.get('/someUrl', config).then(successCallback, errorCallback);
+     *   $http.post('/someUrl', data, config).then(successCallback, errorCallback);
+     * ```
+     *
+     * Complete list of shortcut methods:
+     *
+     * - {@link ng.$http#get $http.get}
+     * - {@link ng.$http#head $http.head}
+     * - {@link ng.$http#post $http.post}
+     * - {@link ng.$http#put $http.put}
+     * - {@link ng.$http#delete $http.delete}
+     * - {@link ng.$http#jsonp $http.jsonp}
+     * - {@link ng.$http#patch $http.patch}
+     *
+     *
+     * ## Writing Unit Tests that use $http
+     * When unit testing (using {@link ngMock ngMock}), it is necessary to call
+     * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending
+     * request using trained responses.
+     *
+     * ```
+     * $httpBackend.expectGET(...);
+     * $http.get(...);
+     * $httpBackend.flush();
+     * ```
+     *
+     * ## Deprecation Notice
+     * <div class="alert alert-danger">
+     *   The `$http` legacy promise methods `success` and `error` have been deprecated.
+     *   Use the standard `then` method instead.
+     *   If {@link $httpProvider#useLegacyPromiseExtensions `$httpProvider.useLegacyPromiseExtensions`} is set to
+     *   `false` then these methods will throw {@link $http:legacy `$http/legacy`} error.
+     * </div>
+     *
+     * ## Setting HTTP Headers
+     *
+     * The $http service will automatically add certain HTTP headers to all requests. These defaults
+     * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration
+     * object, which currently contains this default configuration:
+     *
+     * - `$httpProvider.defaults.headers.common` (headers that are common for all requests):
+     *   - `Accept: application/json, text/plain, * / *`
+     * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests)
+     *   - `Content-Type: application/json`
+     * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests)
+     *   - `Content-Type: application/json`
+     *
+     * To add or overwrite these defaults, simply add or remove a property from these configuration
+     * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object
+     * with the lowercased HTTP method name as the key, e.g.
+     * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }`.
+     *
+     * The defaults can also be set at runtime via the `$http.defaults` object in the same
+     * fashion. For example:
+     *
+     * ```
+     * module.run(function($http) {
+     *   $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w'
+     * });
+     * ```
+     *
+     * In addition, you can supply a `headers` property in the config object passed when
+     * calling `$http(config)`, which overrides the defaults without changing them globally.
+     *
+     * To explicitly remove a header automatically added via $httpProvider.defaults.headers on a per request basis,
+     * Use the `headers` property, setting the desired header to `undefined`. For example:
+     *
+     * ```js
+     * var req = {
+     *  method: 'POST',
+     *  url: 'http://example.com',
+     *  headers: {
+     *    'Content-Type': undefined
+     *  },
+     *  data: { test: 'test' }
+     * }
+     *
+     * $http(req).then(function(){...}, function(){...});
+     * ```
+     *
+     * ## Transforming Requests and Responses
+     *
+     * Both requests and responses can be transformed using transformation functions: `transformRequest`
+     * and `transformResponse`. These properties can be a single function that returns
+     * the transformed value (`function(data, headersGetter, status)`) or an array of such transformation functions,
+     * which allows you to `push` or `unshift` a new transformation function into the transformation chain.
+     *
+     * ### Default Transformations
+     *
+     * The `$httpProvider` provider and `$http` service expose `defaults.transformRequest` and
+     * `defaults.transformResponse` properties. If a request does not provide its own transformations
+     * then these will be applied.
+     *
+     * You can augment or replace the default transformations by modifying these properties by adding to or
+     * replacing the array.
+     *
+     * Angular provides the following default transformations:
+     *
+     * Request transformations (`$httpProvider.defaults.transformRequest` and `$http.defaults.transformRequest`):
+     *
+     * - If the `data` property of the request configuration object contains an object, serialize it
+     *   into JSON format.
+     *
+     * Response transformations (`$httpProvider.defaults.transformResponse` and `$http.defaults.transformResponse`):
+     *
+     *  - If XSRF prefix is detected, strip it (see Security Considerations section below).
+     *  - If JSON response is detected, deserialize it using a JSON parser.
+     *
+     *
+     * ### Overriding the Default Transformations Per Request
+     *
+     * If you wish override the request/response transformations only for a single request then provide
+     * `transformRequest` and/or `transformResponse` properties on the configuration object passed
+     * into `$http`.
+     *
+     * Note that if you provide these properties on the config object the default transformations will be
+     * overwritten. If you wish to augment the default transformations then you must include them in your
+     * local transformation array.
+     *
+     * The following code demonstrates adding a new response transformation to be run after the default response
+     * transformations have been run.
+     *
+     * ```js
+     * function appendTransform(defaults, transform) {
+     *
+     *   // We can't guarantee that the default transformation is an array
+     *   defaults = angular.isArray(defaults) ? defaults : [defaults];
+     *
+     *   // Append the new transformation to the defaults
+     *   return defaults.concat(transform);
+     * }
+     *
+     * $http({
+     *   url: '...',
+     *   method: 'GET',
+     *   transformResponse: appendTransform($http.defaults.transformResponse, function(value) {
+     *     return doTransform(value);
+     *   })
+     * });
+     * ```
+     *
+     *
+     * ## Caching
+     *
+     * To enable caching, set the request configuration `cache` property to `true` (to use default
+     * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}).
+     * When the cache is enabled, `$http` stores the response from the server in the specified
+     * cache. The next time the same request is made, the response is served from the cache without
+     * sending a request to the server.
+     *
+     * Note that even if the response is served from cache, delivery of the data is asynchronous in
+     * the same way that real requests are.
+     *
+     * If there are multiple GET requests for the same URL that should be cached using the same
+     * cache, but the cache is not populated yet, only one request to the server will be made and
+     * the remaining requests will be fulfilled using the response from the first request.
+     *
+     * You can change the default cache to a new object (built with
+     * {@link ng.$cacheFactory `$cacheFactory`}) by updating the
+     * {@link ng.$http#defaults `$http.defaults.cache`} property. All requests who set
+     * their `cache` property to `true` will now use this cache object.
+     *
+     * If you set the default cache to `false` then only requests that specify their own custom
+     * cache object will be cached.
+     *
+     * ## Interceptors
+     *
+     * Before you start creating interceptors, be sure to understand the
+     * {@link ng.$q $q and deferred/promise APIs}.
+     *
+     * For purposes of global error handling, authentication, or any kind of synchronous or
+     * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be
+     * able to intercept requests before they are handed to the server and
+     * responses before they are handed over to the application code that
+     * initiated these requests. The interceptors leverage the {@link ng.$q
+     * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing.
+     *
+     * The interceptors are service factories that are registered with the `$httpProvider` by
+     * adding them to the `$httpProvider.interceptors` array. The factory is called and
+     * injected with dependencies (if specified) and returns the interceptor.
+     *
+     * There are two kinds of interceptors (and two kinds of rejection interceptors):
+     *
+     *   * `request`: interceptors get called with a http {@link $http#usage config} object. The function is free to
+     *     modify the `config` object or create a new one. The function needs to return the `config`
+     *     object directly, or a promise containing the `config` or a new `config` object.
+     *   * `requestError`: interceptor gets called when a previous interceptor threw an error or
+     *     resolved with a rejection.
+     *   * `response`: interceptors get called with http `response` object. The function is free to
+     *     modify the `response` object or create a new one. The function needs to return the `response`
+     *     object directly, or as a promise containing the `response` or a new `response` object.
+     *   * `responseError`: interceptor gets called when a previous interceptor threw an error or
+     *     resolved with a rejection.
+     *
+     *
+     * ```js
+     *   // register the interceptor as a service
+     *   $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
+     *     return {
+     *       // optional method
+     *       'request': function(config) {
+     *         // do something on success
+     *         return config;
+     *       },
+     *
+     *       // optional method
+     *      'requestError': function(rejection) {
+     *         // do something on error
+     *         if (canRecover(rejection)) {
+     *           return responseOrNewPromise
+     *         }
+     *         return $q.reject(rejection);
+     *       },
+     *
+     *
+     *
+     *       // optional method
+     *       'response': function(response) {
+     *         // do something on success
+     *         return response;
+     *       },
+     *
+     *       // optional method
+     *      'responseError': function(rejection) {
+     *         // do something on error
+     *         if (canRecover(rejection)) {
+     *           return responseOrNewPromise
+     *         }
+     *         return $q.reject(rejection);
+     *       }
+     *     };
+     *   });
+     *
+     *   $httpProvider.interceptors.push('myHttpInterceptor');
+     *
+     *
+     *   // alternatively, register the interceptor via an anonymous factory
+     *   $httpProvider.interceptors.push(function($q, dependency1, dependency2) {
+     *     return {
+     *      'request': function(config) {
+     *          // same as above
+     *       },
+     *
+     *       'response': function(response) {
+     *          // same as above
+     *       }
+     *     };
+     *   });
+     * ```
+     *
+     * ## Security Considerations
+     *
+     * When designing web applications, consider security threats from:
+     *
+     * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)
+     * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery)
+     *
+     * Both server and the client must cooperate in order to eliminate these threats. Angular comes
+     * pre-configured with strategies that address these issues, but for this to work backend server
+     * cooperation is required.
+     *
+     * ### JSON Vulnerability Protection
+     *
+     * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx)
+     * allows third party website to turn your JSON resource URL into
+     * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To
+     * counter this your server can prefix all JSON requests with following string `")]}',\n"`.
+     * Angular will automatically strip the prefix before processing it as JSON.
+     *
+     * For example if your server needs to return:
+     * ```js
+     * ['one','two']
+     * ```
+     *
+     * which is vulnerable to attack, your server can return:
+     * ```js
+     * )]}',
+     * ['one','two']
+     * ```
+     *
+     * Angular will strip the prefix, before processing the JSON.
+     *
+     *
+     * ### Cross Site Request Forgery (XSRF) Protection
+     *
+     * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is a technique by which
+     * an unauthorized site can gain your user's private data. Angular provides a mechanism
+     * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie
+     * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only
+     * JavaScript that runs on your domain could read the cookie, your server can be assured that
+     * the XHR came from JavaScript running on your domain. The header will not be set for
+     * cross-domain requests.
+     *
+     * To take advantage of this, your server needs to set a token in a JavaScript readable session
+     * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the
+     * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure
+     * that only JavaScript running on your domain could have sent the request. The token must be
+     * unique for each user and must be verifiable by the server (to prevent the JavaScript from
+     * making up its own tokens). We recommend that the token is a digest of your site's
+     * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography&#41;)
+     * for added security.
+     *
+     * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName
+     * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time,
+     * or the per-request config object.
+     *
+     * In order to prevent collisions in environments where multiple Angular apps share the
+     * same domain or subdomain, we recommend that each application uses unique cookie name.
+     *
+     * @param {object} config Object describing the request to be made and how it should be
+     *    processed. The object has following properties:
+     *
+     *    - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc)
+     *    - **url** – `{string}` – Absolute or relative URL of the resource that is being requested.
+     *    - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be serialized
+     *      with the `paramSerializer` and appended as GET parameters.
+     *    - **data** – `{string|Object}` – Data to be sent as the request message data.
+     *    - **headers** – `{Object}` – Map of strings or functions which return strings representing
+     *      HTTP headers to send to the server. If the return value of a function is null, the
+     *      header will not be sent. Functions accept a config object as an argument.
+     *    - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token.
+     *    - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token.
+     *    - **transformRequest** –
+     *      `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
+     *      transform function or an array of such functions. The transform function takes the http
+     *      request body and headers and returns its transformed (typically serialized) version.
+     *      See {@link ng.$http#overriding-the-default-transformations-per-request
+     *      Overriding the Default Transformations}
+     *    - **transformResponse** –
+     *      `{function(data, headersGetter, status)|Array.<function(data, headersGetter, status)>}` –
+     *      transform function or an array of such functions. The transform function takes the http
+     *      response body, headers and status and returns its transformed (typically deserialized) version.
+     *      See {@link ng.$http#overriding-the-default-transformations-per-request
+     *      Overriding the Default TransformationjqLiks}
+     *    - **paramSerializer** - `{string|function(Object<string,string>):string}` - A function used to
+     *      prepare the string representation of request parameters (specified as an object).
+     *      If specified as string, it is interpreted as function registered with the
+     *      {@link $injector $injector}, which means you can create your own serializer
+     *      by registering it as a {@link auto.$provide#service service}.
+     *      The default serializer is the {@link $httpParamSerializer $httpParamSerializer};
+     *      alternatively, you can use the {@link $httpParamSerializerJQLike $httpParamSerializerJQLike}
+     *    - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the
+     *      GET request, otherwise if a cache instance built with
+     *      {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
+     *      caching.
+     *    - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise}
+     *      that should abort the request when resolved.
+     *    - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the
+     *      XHR object. See [requests with credentials](https://developer.mozilla.org/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials)
+     *      for more information.
+     *    - **responseType** - `{string}` - see
+     *      [XMLHttpRequest.responseType](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#xmlhttprequest-responsetype).
+     *
+     * @returns {HttpPromise} Returns a {@link ng.$q `Promise}` that will be resolved to a response object
+     *                        when the request succeeds or fails.
+     *
+     *
+     * @property {Array.<Object>} pendingRequests Array of config objects for currently pending
+     *   requests. This is primarily meant to be used for debugging purposes.
+     *
+     *
+     * @example
+<example module="httpExample">
+<file name="index.html">
+  <div ng-controller="FetchController">
+    <select ng-model="method" aria-label="Request method">
+      <option>GET</option>
+      <option>JSONP</option>
+    </select>
+    <input type="text" ng-model="url" size="80" aria-label="URL" />
+    <button id="fetchbtn" ng-click="fetch()">fetch</button><br>
+    <button id="samplegetbtn" ng-click="updateModel('GET', 'http-hello.html')">Sample GET</button>
+    <button id="samplejsonpbtn"
+      ng-click="updateModel('JSONP',
+                    'https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')">
+      Sample JSONP
+    </button>
+    <button id="invalidjsonpbtn"
+      ng-click="updateModel('JSONP', 'https://angularjs.org/doesntexist&callback=JSON_CALLBACK')">
+        Invalid JSONP
+      </button>
+    <pre>http status code: {{status}}</pre>
+    <pre>http response data: {{data}}</pre>
+  </div>
+</file>
+<file name="script.js">
+  angular.module('httpExample', [])
+    .controller('FetchController', ['$scope', '$http', '$templateCache',
+      function($scope, $http, $templateCache) {
+        $scope.method = 'GET';
+        $scope.url = 'http-hello.html';
+
+        $scope.fetch = function() {
+          $scope.code = null;
+          $scope.response = null;
+
+          $http({method: $scope.method, url: $scope.url, cache: $templateCache}).
+            then(function(response) {
+              $scope.status = response.status;
+              $scope.data = response.data;
+            }, function(response) {
+              $scope.data = response.data || "Request failed";
+              $scope.status = response.status;
+          });
+        };
+
+        $scope.updateModel = function(method, url) {
+          $scope.method = method;
+          $scope.url = url;
+        };
+      }]);
+</file>
+<file name="http-hello.html">
+  Hello, $http!
+</file>
+<file name="protractor.js" type="protractor">
+  var status = element(by.binding('status'));
+  var data = element(by.binding('data'));
+  var fetchBtn = element(by.id('fetchbtn'));
+  var sampleGetBtn = element(by.id('samplegetbtn'));
+  var sampleJsonpBtn = element(by.id('samplejsonpbtn'));
+  var invalidJsonpBtn = element(by.id('invalidjsonpbtn'));
+
+  it('should make an xhr GET request', function() {
+    sampleGetBtn.click();
+    fetchBtn.click();
+    expect(status.getText()).toMatch('200');
+    expect(data.getText()).toMatch(/Hello, \$http!/);
+  });
+
+// Commented out due to flakes. See https://github.com/angular/angular.js/issues/9185
+// it('should make a JSONP request to angularjs.org', function() {
+//   sampleJsonpBtn.click();
+//   fetchBtn.click();
+//   expect(status.getText()).toMatch('200');
+//   expect(data.getText()).toMatch(/Super Hero!/);
+// });
+
+  it('should make JSONP request to invalid URL and invoke the error handler',
+      function() {
+    invalidJsonpBtn.click();
+    fetchBtn.click();
+    expect(status.getText()).toMatch('0');
+    expect(data.getText()).toMatch('Request failed');
+  });
+</file>
+</example>
+     */
+    function $http(requestConfig) {
+
+      if (!angular.isObject(requestConfig)) {
+        throw minErr('$http')('badreq', 'Http request configuration must be an object.  Received: {0}', requestConfig);
+      }
+
+      var config = extend({
+        method: 'get',
+        transformRequest: defaults.transformRequest,
+        transformResponse: defaults.transformResponse,
+        paramSerializer: defaults.paramSerializer
+      }, requestConfig);
+
+      config.headers = mergeHeaders(requestConfig);
+      config.method = uppercase(config.method);
+      config.paramSerializer = isString(config.paramSerializer) ?
+        $injector.get(config.paramSerializer) : config.paramSerializer;
+
+      var serverRequest = function(config) {
+        var headers = config.headers;
+        var reqData = transformData(config.data, headersGetter(headers), undefined, config.transformRequest);
+
+        // strip content-type if data is undefined
+        if (isUndefined(reqData)) {
+          forEach(headers, function(value, header) {
+            if (lowercase(header) === 'content-type') {
+                delete headers[header];
+            }
+          });
+        }
+
+        if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) {
+          config.withCredentials = defaults.withCredentials;
+        }
+
+        // send request
+        return sendReq(config, reqData).then(transformResponse, transformResponse);
+      };
+
+      var chain = [serverRequest, undefined];
+      var promise = $q.when(config);
+
+      // apply interceptors
+      forEach(reversedInterceptors, function(interceptor) {
+        if (interceptor.request || interceptor.requestError) {
+          chain.unshift(interceptor.request, interceptor.requestError);
+        }
+        if (interceptor.response || interceptor.responseError) {
+          chain.push(interceptor.response, interceptor.responseError);
+        }
+      });
+
+      while (chain.length) {
+        var thenFn = chain.shift();
+        var rejectFn = chain.shift();
+
+        promise = promise.then(thenFn, rejectFn);
+      }
+
+      if (useLegacyPromise) {
+        promise.success = function(fn) {
+          assertArgFn(fn, 'fn');
+
+          promise.then(function(response) {
+            fn(response.data, response.status, response.headers, config);
+          });
+          return promise;
+        };
+
+        promise.error = function(fn) {
+          assertArgFn(fn, 'fn');
+
+          promise.then(null, function(response) {
+            fn(response.data, response.status, response.headers, config);
+          });
+          return promise;
+        };
+      } else {
+        promise.success = $httpMinErrLegacyFn('success');
+        promise.error = $httpMinErrLegacyFn('error');
+      }
+
+      return promise;
+
+      function transformResponse(response) {
+        // make a copy since the response must be cacheable
+        var resp = extend({}, response);
+        resp.data = transformData(response.data, response.headers, response.status,
+                                  config.transformResponse);
+        return (isSuccess(response.status))
+          ? resp
+          : $q.reject(resp);
+      }
+
+      function executeHeaderFns(headers, config) {
+        var headerContent, processedHeaders = {};
+
+        forEach(headers, function(headerFn, header) {
+          if (isFunction(headerFn)) {
+            headerContent = headerFn(config);
+            if (headerContent != null) {
+              processedHeaders[header] = headerContent;
+            }
+          } else {
+            processedHeaders[header] = headerFn;
+          }
+        });
+
+        return processedHeaders;
+      }
+
+      function mergeHeaders(config) {
+        var defHeaders = defaults.headers,
+            reqHeaders = extend({}, config.headers),
+            defHeaderName, lowercaseDefHeaderName, reqHeaderName;
+
+        defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]);
+
+        // using for-in instead of forEach to avoid unecessary iteration after header has been found
+        defaultHeadersIteration:
+        for (defHeaderName in defHeaders) {
+          lowercaseDefHeaderName = lowercase(defHeaderName);
+
+          for (reqHeaderName in reqHeaders) {
+            if (lowercase(reqHeaderName) === lowercaseDefHeaderName) {
+              continue defaultHeadersIteration;
+            }
+          }
+
+          reqHeaders[defHeaderName] = defHeaders[defHeaderName];
+        }
+
+        // execute if header value is a function for merged headers
+        return executeHeaderFns(reqHeaders, shallowCopy(config));
+      }
+    }
+
+    $http.pendingRequests = [];
+
+    /**
+     * @ngdoc method
+     * @name $http#get
+     *
+     * @description
+     * Shortcut method to perform `GET` request.
+     *
+     * @param {string} url Relative or absolute URL specifying the destination of the request
+     * @param {Object=} config Optional configuration object
+     * @returns {HttpPromise} Future object
+     */
+
+    /**
+     * @ngdoc method
+     * @name $http#delete
+     *
+     * @description
+     * Shortcut method to perform `DELETE` request.
+     *
+     * @param {string} url Relative or absolute URL specifying the destination of the request
+     * @param {Object=} config Optional configuration object
+     * @returns {HttpPromise} Future object
+     */
+
+    /**
+     * @ngdoc method
+     * @name $http#head
+     *
+     * @description
+     * Shortcut method to perform `HEAD` request.
+     *
+     * @param {string} url Relative or absolute URL specifying the destination of the request
+     * @param {Object=} config Optional configuration object
+     * @returns {HttpPromise} Future object
+     */
+
+    /**
+     * @ngdoc method
+     * @name $http#jsonp
+     *
+     * @description
+     * Shortcut method to perform `JSONP` request.
+     *
+     * @param {string} url Relative or absolute URL specifying the destination of the request.
+     *                     The name of the callback should be the string `JSON_CALLBACK`.
+     * @param {Object=} config Optional configuration object
+     * @returns {HttpPromise} Future object
+     */
+    createShortMethods('get', 'delete', 'head', 'jsonp');
+
+    /**
+     * @ngdoc method
+     * @name $http#post
+     *
+     * @description
+     * Shortcut method to perform `POST` request.
+     *
+     * @param {string} url Relative or absolute URL specifying the destination of the request
+     * @param {*} data Request content
+     * @param {Object=} config Optional configuration object
+     * @returns {HttpPromise} Future object
+     */
+
+    /**
+     * @ngdoc method
+     * @name $http#put
+     *
+     * @description
+     * Shortcut method to perform `PUT` request.
+     *
+     * @param {string} url Relative or absolute URL specifying the destination of the request
+     * @param {*} data Request content
+     * @param {Object=} config Optional configuration object
+     * @returns {HttpPromise} Future object
+     */
+
+     /**
+      * @ngdoc method
+      * @name $http#patch
+      *
+      * @description
+      * Shortcut method to perform `PATCH` request.
+      *
+      * @param {string} url Relative or absolute URL specifying the destination of the request
+      * @param {*} data Request content
+      * @param {Object=} config Optional configuration object
+      * @returns {HttpPromise} Future object
+      */
+    createShortMethodsWithData('post', 'put', 'patch');
+
+        /**
+         * @ngdoc property
+         * @name $http#defaults
+         *
+         * @description
+         * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of
+         * default headers, withCredentials as well as request and response transformations.
+         *
+         * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above.
+         */
+    $http.defaults = defaults;
+
+
+    return $http;
+
+
+    function createShortMethods(names) {
+      forEach(arguments, function(name) {
+        $http[name] = function(url, config) {
+          return $http(extend({}, config || {}, {
+            method: name,
+            url: url
+          }));
+        };
+      });
+    }
+
+
+    function createShortMethodsWithData(name) {
+      forEach(arguments, function(name) {
+        $http[name] = function(url, data, config) {
+          return $http(extend({}, config || {}, {
+            method: name,
+            url: url,
+            data: data
+          }));
+        };
+      });
+    }
+
+
+    /**
+     * Makes the request.
+     *
+     * !!! ACCESSES CLOSURE VARS:
+     * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests
+     */
+    function sendReq(config, reqData) {
+      var deferred = $q.defer(),
+          promise = deferred.promise,
+          cache,
+          cachedResp,
+          reqHeaders = config.headers,
+          url = buildUrl(config.url, config.paramSerializer(config.params));
+
+      $http.pendingRequests.push(config);
+      promise.then(removePendingReq, removePendingReq);
+
+
+      if ((config.cache || defaults.cache) && config.cache !== false &&
+          (config.method === 'GET' || config.method === 'JSONP')) {
+        cache = isObject(config.cache) ? config.cache
+              : isObject(defaults.cache) ? defaults.cache
+              : defaultCache;
+      }
+
+      if (cache) {
+        cachedResp = cache.get(url);
+        if (isDefined(cachedResp)) {
+          if (isPromiseLike(cachedResp)) {
+            // cached request has already been sent, but there is no response yet
+            cachedResp.then(resolvePromiseWithResult, resolvePromiseWithResult);
+          } else {
+            // serving from cache
+            if (isArray(cachedResp)) {
+              resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3]);
+            } else {
+              resolvePromise(cachedResp, 200, {}, 'OK');
+            }
+          }
+        } else {
+          // put the promise for the non-transformed response into cache as a placeholder
+          cache.put(url, promise);
+        }
+      }
+
+
+      // if we won't have the response in cache, set the xsrf headers and
+      // send the request to the backend
+      if (isUndefined(cachedResp)) {
+        var xsrfValue = urlIsSameOrigin(config.url)
+            ? $$cookieReader()[config.xsrfCookieName || defaults.xsrfCookieName]
+            : undefined;
+        if (xsrfValue) {
+          reqHeaders[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue;
+        }
+
+        $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout,
+            config.withCredentials, config.responseType);
+      }
+
+      return promise;
+
+
+      /**
+       * Callback registered to $httpBackend():
+       *  - caches the response if desired
+       *  - resolves the raw $http promise
+       *  - calls $apply
+       */
+      function done(status, response, headersString, statusText) {
+        if (cache) {
+          if (isSuccess(status)) {
+            cache.put(url, [status, response, parseHeaders(headersString), statusText]);
+          } else {
+            // remove promise from the cache
+            cache.remove(url);
+          }
+        }
+
+        function resolveHttpPromise() {
+          resolvePromise(response, status, headersString, statusText);
+        }
+
+        if (useApplyAsync) {
+          $rootScope.$applyAsync(resolveHttpPromise);
+        } else {
+          resolveHttpPromise();
+          if (!$rootScope.$$phase) $rootScope.$apply();
+        }
+      }
+
+
+      /**
+       * Resolves the raw $http promise.
+       */
+      function resolvePromise(response, status, headers, statusText) {
+        //status: HTTP response status code, 0, -1 (aborted by timeout / promise)
+        status = status >= -1 ? status : 0;
+
+        (isSuccess(status) ? deferred.resolve : deferred.reject)({
+          data: response,
+          status: status,
+          headers: headersGetter(headers),
+          config: config,
+          statusText: statusText
+        });
+      }
+
+      function resolvePromiseWithResult(result) {
+        resolvePromise(result.data, result.status, shallowCopy(result.headers()), result.statusText);
+      }
+
+      function removePendingReq() {
+        var idx = $http.pendingRequests.indexOf(config);
+        if (idx !== -1) $http.pendingRequests.splice(idx, 1);
+      }
+    }
+
+
+    function buildUrl(url, serializedParams) {
+      if (serializedParams.length > 0) {
+        url += ((url.indexOf('?') == -1) ? '?' : '&') + serializedParams;
+      }
+      return url;
+    }
+  }];
+}
+
+/**
+ * @ngdoc service
+ * @name $xhrFactory
+ *
+ * @description
+ * Factory function used to create XMLHttpRequest objects.
+ *
+ * Replace or decorate this service to create your own custom XMLHttpRequest objects.
+ *
+ * ```
+ * angular.module('myApp', [])
+ * .factory('$xhrFactory', function() {
+ *   return function createXhr(method, url) {
+ *     return new window.XMLHttpRequest({mozSystem: true});
+ *   };
+ * });
+ * ```
+ *
+ * @param {string} method HTTP method of the request (GET, POST, PUT, ..)
+ * @param {string} url URL of the request.
+ */
+function $xhrFactoryProvider() {
+  this.$get = function() {
+    return function createXhr() {
+      return new window.XMLHttpRequest();
+    };
+  };
+}
+
+/**
+ * @ngdoc service
+ * @name $httpBackend
+ * @requires $window
+ * @requires $document
+ * @requires $xhrFactory
+ *
+ * @description
+ * HTTP backend used by the {@link ng.$http service} that delegates to
+ * XMLHttpRequest object or JSONP and deals with browser incompatibilities.
+ *
+ * You should never need to use this service directly, instead use the higher-level abstractions:
+ * {@link ng.$http $http} or {@link ngResource.$resource $resource}.
+ *
+ * During testing this implementation is swapped with {@link ngMock.$httpBackend mock
+ * $httpBackend} which can be trained with responses.
+ */
+function $HttpBackendProvider() {
+  this.$get = ['$browser', '$window', '$document', '$xhrFactory', function($browser, $window, $document, $xhrFactory) {
+    return createHttpBackend($browser, $xhrFactory, $browser.defer, $window.angular.callbacks, $document[0]);
+  }];
+}
+
+function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) {
+  // TODO(vojta): fix the signature
+  return function(method, url, post, callback, headers, timeout, withCredentials, responseType) {
+    $browser.$$incOutstandingRequestCount();
+    url = url || $browser.url();
+
+    if (lowercase(method) == 'jsonp') {
+      var callbackId = '_' + (callbacks.counter++).toString(36);
+      callbacks[callbackId] = function(data) {
+        callbacks[callbackId].data = data;
+        callbacks[callbackId].called = true;
+      };
+
+      var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId),
+          callbackId, function(status, text) {
+        completeRequest(callback, status, callbacks[callbackId].data, "", text);
+        callbacks[callbackId] = noop;
+      });
+    } else {
+
+      var xhr = createXhr(method, url);
+
+      xhr.open(method, url, true);
+      forEach(headers, function(value, key) {
+        if (isDefined(value)) {
+            xhr.setRequestHeader(key, value);
+        }
+      });
+
+      xhr.onload = function requestLoaded() {
+        var statusText = xhr.statusText || '';
+
+        // responseText is the old-school way of retrieving response (supported by IE9)
+        // response/responseType properties were introduced in XHR Level2 spec (supported by IE10)
+        var response = ('response' in xhr) ? xhr.response : xhr.responseText;
+
+        // normalize IE9 bug (http://bugs.jquery.com/ticket/1450)
+        var status = xhr.status === 1223 ? 204 : xhr.status;
+
+        // fix status code when it is 0 (0 status is undocumented).
+        // Occurs when accessing file resources or on Android 4.1 stock browser
+        // while retrieving files from application cache.
+        if (status === 0) {
+          status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0;
+        }
+
+        completeRequest(callback,
+            status,
+            response,
+            xhr.getAllResponseHeaders(),
+            statusText);
+      };
+
+      var requestError = function() {
+        // The response is always empty
+        // See https://xhr.spec.whatwg.org/#request-error-steps and https://fetch.spec.whatwg.org/#concept-network-error
+        completeRequest(callback, -1, null, null, '');
+      };
+
+      xhr.onerror = requestError;
+      xhr.onabort = requestError;
+
+      if (withCredentials) {
+        xhr.withCredentials = true;
+      }
+
+      if (responseType) {
+        try {
+          xhr.responseType = responseType;
+        } catch (e) {
+          // WebKit added support for the json responseType value on 09/03/2013
+          // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are
+          // known to throw when setting the value "json" as the response type. Other older
+          // browsers implementing the responseType
+          //
+          // The json response type can be ignored if not supported, because JSON payloads are
+          // parsed on the client-side regardless.
+          if (responseType !== 'json') {
+            throw e;
+          }
+        }
+      }
+
+      xhr.send(isUndefined(post) ? null : post);
+    }
+
+    if (timeout > 0) {
+      var timeoutId = $browserDefer(timeoutRequest, timeout);
+    } else if (isPromiseLike(timeout)) {
+      timeout.then(timeoutRequest);
+    }
+
+
+    function timeoutRequest() {
+      jsonpDone && jsonpDone();
+      xhr && xhr.abort();
+    }
+
+    function completeRequest(callback, status, response, headersString, statusText) {
+      // cancel timeout and subsequent timeout promise resolution
+      if (isDefined(timeoutId)) {
+        $browserDefer.cancel(timeoutId);
+      }
+      jsonpDone = xhr = null;
+
+      callback(status, response, headersString, statusText);
+      $browser.$$completeOutstandingRequest(noop);
+    }
+  };
+
+  function jsonpReq(url, callbackId, done) {
+    // we can't use jQuery/jqLite here because jQuery does crazy stuff with script elements, e.g.:
+    // - fetches local scripts via XHR and evals them
+    // - adds and immediately removes script elements from the document
+    var script = rawDocument.createElement('script'), callback = null;
+    script.type = "text/javascript";
+    script.src = url;
+    script.async = true;
+
+    callback = function(event) {
+      removeEventListenerFn(script, "load", callback);
+      removeEventListenerFn(script, "error", callback);
+      rawDocument.body.removeChild(script);
+      script = null;
+      var status = -1;
+      var text = "unknown";
+
+      if (event) {
+        if (event.type === "load" && !callbacks[callbackId].called) {
+          event = { type: "error" };
+        }
+        text = event.type;
+        status = event.type === "error" ? 404 : 200;
+      }
+
+      if (done) {
+        done(status, text);
+      }
+    };
+
+    addEventListenerFn(script, "load", callback);
+    addEventListenerFn(script, "error", callback);
+    rawDocument.body.appendChild(script);
+    return callback;
+  }
+}
+
+var $interpolateMinErr = angular.$interpolateMinErr = minErr('$interpolate');
+$interpolateMinErr.throwNoconcat = function(text) {
+  throw $interpolateMinErr('noconcat',
+      "Error while interpolating: {0}\nStrict Contextual Escaping disallows " +
+      "interpolations that concatenate multiple expressions when a trusted value is " +
+      "required.  See http://docs.angularjs.org/api/ng.$sce", text);
+};
+
+$interpolateMinErr.interr = function(text, err) {
+  return $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text, err.toString());
+};
+
+/**
+ * @ngdoc provider
+ * @name $interpolateProvider
+ *
+ * @description
+ *
+ * Used for configuring the interpolation markup. Defaults to `{{` and `}}`.
+ *
+ * @example
+<example module="customInterpolationApp">
+<file name="index.html">
+<script>
+  var customInterpolationApp = angular.module('customInterpolationApp', []);
+
+  customInterpolationApp.config(function($interpolateProvider) {
+    $interpolateProvider.startSymbol('//');
+    $interpolateProvider.endSymbol('//');
+  });
+
+
+  customInterpolationApp.controller('DemoController', function() {
+      this.label = "This binding is brought you by // interpolation symbols.";
+  });
+</script>
+<div ng-app="App" ng-controller="DemoController as demo">
+    //demo.label//
+</div>
+</file>
+<file name="protractor.js" type="protractor">
+  it('should interpolate binding with custom symbols', function() {
+    expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.');
+  });
+</file>
+</example>
+ */
+function $InterpolateProvider() {
+  var startSymbol = '{{';
+  var endSymbol = '}}';
+
+  /**
+   * @ngdoc method
+   * @name $interpolateProvider#startSymbol
+   * @description
+   * Symbol to denote start of expression in the interpolated string. Defaults to `{{`.
+   *
+   * @param {string=} value new value to set the starting symbol to.
+   * @returns {string|self} Returns the symbol when used as getter and self if used as setter.
+   */
+  this.startSymbol = function(value) {
+    if (value) {
+      startSymbol = value;
+      return this;
+    } else {
+      return startSymbol;
+    }
+  };
+
+  /**
+   * @ngdoc method
+   * @name $interpolateProvider#endSymbol
+   * @description
+   * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.
+   *
+   * @param {string=} value new value to set the ending symbol to.
+   * @returns {string|self} Returns the symbol when used as getter and self if used as setter.
+   */
+  this.endSymbol = function(value) {
+    if (value) {
+      endSymbol = value;
+      return this;
+    } else {
+      return endSymbol;
+    }
+  };
+
+
+  this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) {
+    var startSymbolLength = startSymbol.length,
+        endSymbolLength = endSymbol.length,
+        escapedStartRegexp = new RegExp(startSymbol.replace(/./g, escape), 'g'),
+        escapedEndRegexp = new RegExp(endSymbol.replace(/./g, escape), 'g');
+
+    function escape(ch) {
+      return '\\\\\\' + ch;
+    }
+
+    function unescapeText(text) {
+      return text.replace(escapedStartRegexp, startSymbol).
+        replace(escapedEndRegexp, endSymbol);
+    }
+
+    function stringify(value) {
+      if (value == null) { // null || undefined
+        return '';
+      }
+      switch (typeof value) {
+        case 'string':
+          break;
+        case 'number':
+          value = '' + value;
+          break;
+        default:
+          value = toJson(value);
+      }
+
+      return value;
+    }
+
+    /**
+     * @ngdoc service
+     * @name $interpolate
+     * @kind function
+     *
+     * @requires $parse
+     * @requires $sce
+     *
+     * @description
+     *
+     * Compiles a string with markup into an interpolation function. This service is used by the
+     * HTML {@link ng.$compile $compile} service for data binding. See
+     * {@link ng.$interpolateProvider $interpolateProvider} for configuring the
+     * interpolation markup.
+     *
+     *
+     * ```js
+     *   var $interpolate = ...; // injected
+     *   var exp = $interpolate('Hello {{name | uppercase}}!');
+     *   expect(exp({name:'Angular'})).toEqual('Hello ANGULAR!');
+     * ```
+     *
+     * `$interpolate` takes an optional fourth argument, `allOrNothing`. If `allOrNothing` is
+     * `true`, the interpolation function will return `undefined` unless all embedded expressions
+     * evaluate to a value other than `undefined`.
+     *
+     * ```js
+     *   var $interpolate = ...; // injected
+     *   var context = {greeting: 'Hello', name: undefined };
+     *
+     *   // default "forgiving" mode
+     *   var exp = $interpolate('{{greeting}} {{name}}!');
+     *   expect(exp(context)).toEqual('Hello !');
+     *
+     *   // "allOrNothing" mode
+     *   exp = $interpolate('{{greeting}} {{name}}!', false, null, true);
+     *   expect(exp(context)).toBeUndefined();
+     *   context.name = 'Angular';
+     *   expect(exp(context)).toEqual('Hello Angular!');
+     * ```
+     *
+     * `allOrNothing` is useful for interpolating URLs. `ngSrc` and `ngSrcset` use this behavior.
+     *
+     * ####Escaped Interpolation
+     * $interpolate provides a mechanism for escaping interpolation markers. Start and end markers
+     * can be escaped by preceding each of their characters with a REVERSE SOLIDUS U+005C (backslash).
+     * It will be rendered as a regular start/end marker, and will not be interpreted as an expression
+     * or binding.
+     *
+     * This enables web-servers to prevent script injection attacks and defacing attacks, to some
+     * degree, while also enabling code examples to work without relying on the
+     * {@link ng.directive:ngNonBindable ngNonBindable} directive.
+     *
+     * **For security purposes, it is strongly encouraged that web servers escape user-supplied data,
+     * replacing angle brackets (&lt;, &gt;) with &amp;lt; and &amp;gt; respectively, and replacing all
+     * interpolation start/end markers with their escaped counterparts.**
+     *
+     * Escaped interpolation markers are only replaced with the actual interpolation markers in rendered
+     * output when the $interpolate service processes the text. So, for HTML elements interpolated
+     * by {@link ng.$compile $compile}, or otherwise interpolated with the `mustHaveExpression` parameter
+     * set to `true`, the interpolated text must contain an unescaped interpolation expression. As such,
+     * this is typically useful only when user-data is used in rendering a template from the server, or
+     * when otherwise untrusted data is used by a directive.
+     *
+     * <example>
+     *  <file name="index.html">
+     *    <div ng-init="username='A user'">
+     *      <p ng-init="apptitle='Escaping demo'">{{apptitle}}: \{\{ username = "defaced value"; \}\}
+     *        </p>
+     *      <p><strong>{{username}}</strong> attempts to inject code which will deface the
+     *        application, but fails to accomplish their task, because the server has correctly
+     *        escaped the interpolation start/end markers with REVERSE SOLIDUS U+005C (backslash)
+     *        characters.</p>
+     *      <p>Instead, the result of the attempted script injection is visible, and can be removed
+     *        from the database by an administrator.</p>
+     *    </div>
+     *  </file>
+     * </example>
+     *
+     * @param {string} text The text with markup to interpolate.
+     * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have
+     *    embedded expression in order to return an interpolation function. Strings with no
+     *    embedded expression will return null for the interpolation function.
+     * @param {string=} trustedContext when provided, the returned function passes the interpolated
+     *    result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult,
+     *    trustedContext)} before returning it.  Refer to the {@link ng.$sce $sce} service that
+     *    provides Strict Contextual Escaping for details.
+     * @param {boolean=} allOrNothing if `true`, then the returned function returns undefined
+     *    unless all embedded expressions evaluate to a value other than `undefined`.
+     * @returns {function(context)} an interpolation function which is used to compute the
+     *    interpolated string. The function has these parameters:
+     *
+     * - `context`: evaluation context for all expressions embedded in the interpolated text
+     */
+    function $interpolate(text, mustHaveExpression, trustedContext, allOrNothing) {
+      allOrNothing = !!allOrNothing;
+      var startIndex,
+          endIndex,
+          index = 0,
+          expressions = [],
+          parseFns = [],
+          textLength = text.length,
+          exp,
+          concat = [],
+          expressionPositions = [];
+
+      while (index < textLength) {
+        if (((startIndex = text.indexOf(startSymbol, index)) != -1) &&
+             ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1)) {
+          if (index !== startIndex) {
+            concat.push(unescapeText(text.substring(index, startIndex)));
+          }
+          exp = text.substring(startIndex + startSymbolLength, endIndex);
+          expressions.push(exp);
+          parseFns.push($parse(exp, parseStringifyInterceptor));
+          index = endIndex + endSymbolLength;
+          expressionPositions.push(concat.length);
+          concat.push('');
+        } else {
+          // we did not find an interpolation, so we have to add the remainder to the separators array
+          if (index !== textLength) {
+            concat.push(unescapeText(text.substring(index)));
+          }
+          break;
+        }
+      }
+
+      // Concatenating expressions makes it hard to reason about whether some combination of
+      // concatenated values are unsafe to use and could easily lead to XSS.  By requiring that a
+      // single expression be used for iframe[src], object[src], etc., we ensure that the value
+      // that's used is assigned or constructed by some JS code somewhere that is more testable or
+      // make it obvious that you bound the value to some user controlled value.  This helps reduce
+      // the load when auditing for XSS issues.
+      if (trustedContext && concat.length > 1) {
+          $interpolateMinErr.throwNoconcat(text);
+      }
+
+      if (!mustHaveExpression || expressions.length) {
+        var compute = function(values) {
+          for (var i = 0, ii = expressions.length; i < ii; i++) {
+            if (allOrNothing && isUndefined(values[i])) return;
+            concat[expressionPositions[i]] = values[i];
+          }
+          return concat.join('');
+        };
+
+        var getValue = function(value) {
+          return trustedContext ?
+            $sce.getTrusted(trustedContext, value) :
+            $sce.valueOf(value);
+        };
+
+        return extend(function interpolationFn(context) {
+            var i = 0;
+            var ii = expressions.length;
+            var values = new Array(ii);
+
+            try {
+              for (; i < ii; i++) {
+                values[i] = parseFns[i](context);
+              }
+
+              return compute(values);
+            } catch (err) {
+              $exceptionHandler($interpolateMinErr.interr(text, err));
+            }
+
+          }, {
+          // all of these properties are undocumented for now
+          exp: text, //just for compatibility with regular watchers created via $watch
+          expressions: expressions,
+          $$watchDelegate: function(scope, listener) {
+            var lastValue;
+            return scope.$watchGroup(parseFns, function interpolateFnWatcher(values, oldValues) {
+              var currValue = compute(values);
+              if (isFunction(listener)) {
+                listener.call(this, currValue, values !== oldValues ? lastValue : currValue, scope);
+              }
+              lastValue = currValue;
+            });
+          }
+        });
+      }
+
+      function parseStringifyInterceptor(value) {
+        try {
+          value = getValue(value);
+          return allOrNothing && !isDefined(value) ? value : stringify(value);
+        } catch (err) {
+          $exceptionHandler($interpolateMinErr.interr(text, err));
+        }
+      }
+    }
+
+
+    /**
+     * @ngdoc method
+     * @name $interpolate#startSymbol
+     * @description
+     * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`.
+     *
+     * Use {@link ng.$interpolateProvider#startSymbol `$interpolateProvider.startSymbol`} to change
+     * the symbol.
+     *
+     * @returns {string} start symbol.
+     */
+    $interpolate.startSymbol = function() {
+      return startSymbol;
+    };
+
+
+    /**
+     * @ngdoc method
+     * @name $interpolate#endSymbol
+     * @description
+     * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`.
+     *
+     * Use {@link ng.$interpolateProvider#endSymbol `$interpolateProvider.endSymbol`} to change
+     * the symbol.
+     *
+     * @returns {string} end symbol.
+     */
+    $interpolate.endSymbol = function() {
+      return endSymbol;
+    };
+
+    return $interpolate;
+  }];
+}
+
+function $IntervalProvider() {
+  this.$get = ['$rootScope', '$window', '$q', '$$q',
+       function($rootScope,   $window,   $q,   $$q) {
+    var intervals = {};
+
+
+     /**
+      * @ngdoc service
+      * @name $interval
+      *
+      * @description
+      * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay`
+      * milliseconds.
+      *
+      * The return value of registering an interval function is a promise. This promise will be
+      * notified upon each tick of the interval, and will be resolved after `count` iterations, or
+      * run indefinitely if `count` is not defined. The value of the notification will be the
+      * number of iterations that have run.
+      * To cancel an interval, call `$interval.cancel(promise)`.
+      *
+      * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to
+      * move forward by `millis` milliseconds and trigger any functions scheduled to run in that
+      * time.
+      *
+      * <div class="alert alert-warning">
+      * **Note**: Intervals created by this service must be explicitly destroyed when you are finished
+      * with them.  In particular they are not automatically destroyed when a controller's scope or a
+      * directive's element are destroyed.
+      * You should take this into consideration and make sure to always cancel the interval at the
+      * appropriate moment.  See the example below for more details on how and when to do this.
+      * </div>
+      *
+      * @param {function()} fn A function that should be called repeatedly.
+      * @param {number} delay Number of milliseconds between each function call.
+      * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat
+      *   indefinitely.
+      * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
+      *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.
+      * @param {...*=} Pass additional parameters to the executed function.
+      * @returns {promise} A promise which will be notified on each iteration.
+      *
+      * @example
+      * <example module="intervalExample">
+      * <file name="index.html">
+      *   <script>
+      *     angular.module('intervalExample', [])
+      *       .controller('ExampleController', ['$scope', '$interval',
+      *         function($scope, $interval) {
+      *           $scope.format = 'M/d/yy h:mm:ss a';
+      *           $scope.blood_1 = 100;
+      *           $scope.blood_2 = 120;
+      *
+      *           var stop;
+      *           $scope.fight = function() {
+      *             // Don't start a new fight if we are already fighting
+      *             if ( angular.isDefined(stop) ) return;
+      *
+      *             stop = $interval(function() {
+      *               if ($scope.blood_1 > 0 && $scope.blood_2 > 0) {
+      *                 $scope.blood_1 = $scope.blood_1 - 3;
+      *                 $scope.blood_2 = $scope.blood_2 - 4;
+      *               } else {
+      *                 $scope.stopFight();
+      *               }
+      *             }, 100);
+      *           };
+      *
+      *           $scope.stopFight = function() {
+      *             if (angular.isDefined(stop)) {
+      *               $interval.cancel(stop);
+      *               stop = undefined;
+      *             }
+      *           };
+      *
+      *           $scope.resetFight = function() {
+      *             $scope.blood_1 = 100;
+      *             $scope.blood_2 = 120;
+      *           };
+      *
+      *           $scope.$on('$destroy', function() {
+      *             // Make sure that the interval is destroyed too
+      *             $scope.stopFight();
+      *           });
+      *         }])
+      *       // Register the 'myCurrentTime' directive factory method.
+      *       // We inject $interval and dateFilter service since the factory method is DI.
+      *       .directive('myCurrentTime', ['$interval', 'dateFilter',
+      *         function($interval, dateFilter) {
+      *           // return the directive link function. (compile function not needed)
+      *           return function(scope, element, attrs) {
+      *             var format,  // date format
+      *                 stopTime; // so that we can cancel the time updates
+      *
+      *             // used to update the UI
+      *             function updateTime() {
+      *               element.text(dateFilter(new Date(), format));
+      *             }
+      *
+      *             // watch the expression, and update the UI on change.
+      *             scope.$watch(attrs.myCurrentTime, function(value) {
+      *               format = value;
+      *               updateTime();
+      *             });
+      *
+      *             stopTime = $interval(updateTime, 1000);
+      *
+      *             // listen on DOM destroy (removal) event, and cancel the next UI update
+      *             // to prevent updating time after the DOM element was removed.
+      *             element.on('$destroy', function() {
+      *               $interval.cancel(stopTime);
+      *             });
+      *           }
+      *         }]);
+      *   </script>
+      *
+      *   <div>
+      *     <div ng-controller="ExampleController">
+      *       <label>Date format: <input ng-model="format"></label> <hr/>
+      *       Current time is: <span my-current-time="format"></span>
+      *       <hr/>
+      *       Blood 1 : <font color='red'>{{blood_1}}</font>
+      *       Blood 2 : <font color='red'>{{blood_2}}</font>
+      *       <button type="button" data-ng-click="fight()">Fight</button>
+      *       <button type="button" data-ng-click="stopFight()">StopFight</button>
+      *       <button type="button" data-ng-click="resetFight()">resetFight</button>
+      *     </div>
+      *   </div>
+      *
+      * </file>
+      * </example>
+      */
+    function interval(fn, delay, count, invokeApply) {
+      var hasParams = arguments.length > 4,
+          args = hasParams ? sliceArgs(arguments, 4) : [],
+          setInterval = $window.setInterval,
+          clearInterval = $window.clearInterval,
+          iteration = 0,
+          skipApply = (isDefined(invokeApply) && !invokeApply),
+          deferred = (skipApply ? $$q : $q).defer(),
+          promise = deferred.promise;
+
+      count = isDefined(count) ? count : 0;
+
+      promise.then(null, null, (!hasParams) ? fn : function() {
+        fn.apply(null, args);
+      });
+
+      promise.$$intervalId = setInterval(function tick() {
+        deferred.notify(iteration++);
+
+        if (count > 0 && iteration >= count) {
+          deferred.resolve(iteration);
+          clearInterval(promise.$$intervalId);
+          delete intervals[promise.$$intervalId];
+        }
+
+        if (!skipApply) $rootScope.$apply();
+
+      }, delay);
+
+      intervals[promise.$$intervalId] = deferred;
+
+      return promise;
+    }
+
+
+     /**
+      * @ngdoc method
+      * @name $interval#cancel
+      *
+      * @description
+      * Cancels a task associated with the `promise`.
+      *
+      * @param {Promise=} promise returned by the `$interval` function.
+      * @returns {boolean} Returns `true` if the task was successfully canceled.
+      */
+    interval.cancel = function(promise) {
+      if (promise && promise.$$intervalId in intervals) {
+        intervals[promise.$$intervalId].reject('canceled');
+        $window.clearInterval(promise.$$intervalId);
+        delete intervals[promise.$$intervalId];
+        return true;
+      }
+      return false;
+    };
+
+    return interval;
+  }];
+}
+
+/**
+ * @ngdoc service
+ * @name $locale
+ *
+ * @description
+ * $locale service provides localization rules for various Angular components. As of right now the
+ * only public api is:
+ *
+ * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`)
+ */
+
+var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
+    DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21};
+var $locationMinErr = minErr('$location');
+
+
+/**
+ * Encode path using encodeUriSegment, ignoring forward slashes
+ *
+ * @param {string} path Path to encode
+ * @returns {string}
+ */
+function encodePath(path) {
+  var segments = path.split('/'),
+      i = segments.length;
+
+  while (i--) {
+    segments[i] = encodeUriSegment(segments[i]);
+  }
+
+  return segments.join('/');
+}
+
+function parseAbsoluteUrl(absoluteUrl, locationObj) {
+  var parsedUrl = urlResolve(absoluteUrl);
+
+  locationObj.$$protocol = parsedUrl.protocol;
+  locationObj.$$host = parsedUrl.hostname;
+  locationObj.$$port = toInt(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null;
+}
+
+
+function parseAppUrl(relativeUrl, locationObj) {
+  var prefixed = (relativeUrl.charAt(0) !== '/');
+  if (prefixed) {
+    relativeUrl = '/' + relativeUrl;
+  }
+  var match = urlResolve(relativeUrl);
+  locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ?
+      match.pathname.substring(1) : match.pathname);
+  locationObj.$$search = parseKeyValue(match.search);
+  locationObj.$$hash = decodeURIComponent(match.hash);
+
+  // make sure path starts with '/';
+  if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') {
+    locationObj.$$path = '/' + locationObj.$$path;
+  }
+}
+
+
+/**
+ *
+ * @param {string} begin
+ * @param {string} whole
+ * @returns {string} returns text from whole after begin or undefined if it does not begin with
+ *                   expected string.
+ */
+function beginsWith(begin, whole) {
+  if (whole.indexOf(begin) === 0) {
+    return whole.substr(begin.length);
+  }
+}
+
+
+function stripHash(url) {
+  var index = url.indexOf('#');
+  return index == -1 ? url : url.substr(0, index);
+}
+
+function trimEmptyHash(url) {
+  return url.replace(/(#.+)|#$/, '$1');
+}
+
+
+function stripFile(url) {
+  return url.substr(0, stripHash(url).lastIndexOf('/') + 1);
+}
+
+/* return the server only (scheme://host:port) */
+function serverBase(url) {
+  return url.substring(0, url.indexOf('/', url.indexOf('//') + 2));
+}
+
+
+/**
+ * LocationHtml5Url represents an url
+ * This object is exposed as $location service when HTML5 mode is enabled and supported
+ *
+ * @constructor
+ * @param {string} appBase application base URL
+ * @param {string} appBaseNoFile application base URL stripped of any filename
+ * @param {string} basePrefix url path prefix
+ */
+function LocationHtml5Url(appBase, appBaseNoFile, basePrefix) {
+  this.$$html5 = true;
+  basePrefix = basePrefix || '';
+  parseAbsoluteUrl(appBase, this);
+
+
+  /**
+   * Parse given html5 (regular) url string into properties
+   * @param {string} url HTML5 url
+   * @private
+   */
+  this.$$parse = function(url) {
+    var pathUrl = beginsWith(appBaseNoFile, url);
+    if (!isString(pathUrl)) {
+      throw $locationMinErr('ipthprfx', 'Invalid url "{0}", missing path prefix "{1}".', url,
+          appBaseNoFile);
+    }
+
+    parseAppUrl(pathUrl, this);
+
+    if (!this.$$path) {
+      this.$$path = '/';
+    }
+
+    this.$$compose();
+  };
+
+  /**
+   * Compose url and update `absUrl` property
+   * @private
+   */
+  this.$$compose = function() {
+    var search = toKeyValue(this.$$search),
+        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
+
+    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
+    this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/'
+  };
+
+  this.$$parseLinkUrl = function(url, relHref) {
+    if (relHref && relHref[0] === '#') {
+      // special case for links to hash fragments:
+      // keep the old url and only replace the hash fragment
+      this.hash(relHref.slice(1));
+      return true;
+    }
+    var appUrl, prevAppUrl;
+    var rewrittenUrl;
+
+    if (isDefined(appUrl = beginsWith(appBase, url))) {
+      prevAppUrl = appUrl;
+      if (isDefined(appUrl = beginsWith(basePrefix, appUrl))) {
+        rewrittenUrl = appBaseNoFile + (beginsWith('/', appUrl) || appUrl);
+      } else {
+        rewrittenUrl = appBase + prevAppUrl;
+      }
+    } else if (isDefined(appUrl = beginsWith(appBaseNoFile, url))) {
+      rewrittenUrl = appBaseNoFile + appUrl;
+    } else if (appBaseNoFile == url + '/') {
+      rewrittenUrl = appBaseNoFile;
+    }
+    if (rewrittenUrl) {
+      this.$$parse(rewrittenUrl);
+    }
+    return !!rewrittenUrl;
+  };
+}
+
+
+/**
+ * LocationHashbangUrl represents url
+ * This object is exposed as $location service when developer doesn't opt into html5 mode.
+ * It also serves as the base class for html5 mode fallback on legacy browsers.
+ *
+ * @constructor
+ * @param {string} appBase application base URL
+ * @param {string} appBaseNoFile application base URL stripped of any filename
+ * @param {string} hashPrefix hashbang prefix
+ */
+function LocationHashbangUrl(appBase, appBaseNoFile, hashPrefix) {
+
+  parseAbsoluteUrl(appBase, this);
+
+
+  /**
+   * Parse given hashbang url into properties
+   * @param {string} url Hashbang url
+   * @private
+   */
+  this.$$parse = function(url) {
+    var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url);
+    var withoutHashUrl;
+
+    if (!isUndefined(withoutBaseUrl) && withoutBaseUrl.charAt(0) === '#') {
+
+      // The rest of the url starts with a hash so we have
+      // got either a hashbang path or a plain hash fragment
+      withoutHashUrl = beginsWith(hashPrefix, withoutBaseUrl);
+      if (isUndefined(withoutHashUrl)) {
+        // There was no hashbang prefix so we just have a hash fragment
+        withoutHashUrl = withoutBaseUrl;
+      }
+
+    } else {
+      // There was no hashbang path nor hash fragment:
+      // If we are in HTML5 mode we use what is left as the path;
+      // Otherwise we ignore what is left
+      if (this.$$html5) {
+        withoutHashUrl = withoutBaseUrl;
+      } else {
+        withoutHashUrl = '';
+        if (isUndefined(withoutBaseUrl)) {
+          appBase = url;
+          this.replace();
+        }
+      }
+    }
+
+    parseAppUrl(withoutHashUrl, this);
+
+    this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase);
+
+    this.$$compose();
+
+    /*
+     * In Windows, on an anchor node on documents loaded from
+     * the filesystem, the browser will return a pathname
+     * prefixed with the drive name ('/C:/path') when a
+     * pathname without a drive is set:
+     *  * a.setAttribute('href', '/foo')
+     *   * a.pathname === '/C:/foo' //true
+     *
+     * Inside of Angular, we're always using pathnames that
+     * do not include drive names for routing.
+     */
+    function removeWindowsDriveName(path, url, base) {
+      /*
+      Matches paths for file protocol on windows,
+      such as /C:/foo/bar, and captures only /foo/bar.
+      */
+      var windowsFilePathExp = /^\/[A-Z]:(\/.*)/;
+
+      var firstPathSegmentMatch;
+
+      //Get the relative path from the input URL.
+      if (url.indexOf(base) === 0) {
+        url = url.replace(base, '');
+      }
+
+      // The input URL intentionally contains a first path segment that ends with a colon.
+      if (windowsFilePathExp.exec(url)) {
+        return path;
+      }
+
+      firstPathSegmentMatch = windowsFilePathExp.exec(path);
+      return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path;
+    }
+  };
+
+  /**
+   * Compose hashbang url and update `absUrl` property
+   * @private
+   */
+  this.$$compose = function() {
+    var search = toKeyValue(this.$$search),
+        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
+
+    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
+    this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : '');
+  };
+
+  this.$$parseLinkUrl = function(url, relHref) {
+    if (stripHash(appBase) == stripHash(url)) {
+      this.$$parse(url);
+      return true;
+    }
+    return false;
+  };
+}
+
+
+/**
+ * LocationHashbangUrl represents url
+ * This object is exposed as $location service when html5 history api is enabled but the browser
+ * does not support it.
+ *
+ * @constructor
+ * @param {string} appBase application base URL
+ * @param {string} appBaseNoFile application base URL stripped of any filename
+ * @param {string} hashPrefix hashbang prefix
+ */
+function LocationHashbangInHtml5Url(appBase, appBaseNoFile, hashPrefix) {
+  this.$$html5 = true;
+  LocationHashbangUrl.apply(this, arguments);
+
+  this.$$parseLinkUrl = function(url, relHref) {
+    if (relHref && relHref[0] === '#') {
+      // special case for links to hash fragments:
+      // keep the old url and only replace the hash fragment
+      this.hash(relHref.slice(1));
+      return true;
+    }
+
+    var rewrittenUrl;
+    var appUrl;
+
+    if (appBase == stripHash(url)) {
+      rewrittenUrl = url;
+    } else if ((appUrl = beginsWith(appBaseNoFile, url))) {
+      rewrittenUrl = appBase + hashPrefix + appUrl;
+    } else if (appBaseNoFile === url + '/') {
+      rewrittenUrl = appBaseNoFile;
+    }
+    if (rewrittenUrl) {
+      this.$$parse(rewrittenUrl);
+    }
+    return !!rewrittenUrl;
+  };
+
+  this.$$compose = function() {
+    var search = toKeyValue(this.$$search),
+        hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : '';
+
+    this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash;
+    // include hashPrefix in $$absUrl when $$url is empty so IE9 does not reload page because of removal of '#'
+    this.$$absUrl = appBase + hashPrefix + this.$$url;
+  };
+
+}
+
+
+var locationPrototype = {
+
+  /**
+   * Are we in html5 mode?
+   * @private
+   */
+  $$html5: false,
+
+  /**
+   * Has any change been replacing?
+   * @private
+   */
+  $$replace: false,
+
+  /**
+   * @ngdoc method
+   * @name $location#absUrl
+   *
+   * @description
+   * This method is getter only.
+   *
+   * Return full url representation with all segments encoded according to rules specified in
+   * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt).
+   *
+   *
+   * ```js
+   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+   * var absUrl = $location.absUrl();
+   * // => "http://example.com/#/some/path?foo=bar&baz=xoxo"
+   * ```
+   *
+   * @return {string} full url
+   */
+  absUrl: locationGetter('$$absUrl'),
+
+  /**
+   * @ngdoc method
+   * @name $location#url
+   *
+   * @description
+   * This method is getter / setter.
+   *
+   * Return url (e.g. `/path?a=b#hash`) when called without any parameter.
+   *
+   * Change path, search and hash, when called with parameter and return `$location`.
+   *
+   *
+   * ```js
+   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+   * var url = $location.url();
+   * // => "/some/path?foo=bar&baz=xoxo"
+   * ```
+   *
+   * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`)
+   * @return {string} url
+   */
+  url: function(url) {
+    if (isUndefined(url)) {
+      return this.$$url;
+    }
+
+    var match = PATH_MATCH.exec(url);
+    if (match[1] || url === '') this.path(decodeURIComponent(match[1]));
+    if (match[2] || match[1] || url === '') this.search(match[3] || '');
+    this.hash(match[5] || '');
+
+    return this;
+  },
+
+  /**
+   * @ngdoc method
+   * @name $location#protocol
+   *
+   * @description
+   * This method is getter only.
+   *
+   * Return protocol of current url.
+   *
+   *
+   * ```js
+   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+   * var protocol = $location.protocol();
+   * // => "http"
+   * ```
+   *
+   * @return {string} protocol of current url
+   */
+  protocol: locationGetter('$$protocol'),
+
+  /**
+   * @ngdoc method
+   * @name $location#host
+   *
+   * @description
+   * This method is getter only.
+   *
+   * Return host of current url.
+   *
+   * Note: compared to the non-angular version `location.host` which returns `hostname:port`, this returns the `hostname` portion only.
+   *
+   *
+   * ```js
+   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+   * var host = $location.host();
+   * // => "example.com"
+   *
+   * // given url http://user:[email-masked]:8080/#/some/path?foo=bar&baz=xoxo
+   * host = $location.host();
+   * // => "example.com"
+   * host = location.host;
+   * // => "example.com:8080"
+   * ```
+   *
+   * @return {string} host of current url.
+   */
+  host: locationGetter('$$host'),
+
+  /**
+   * @ngdoc method
+   * @name $location#port
+   *
+   * @description
+   * This method is getter only.
+   *
+   * Return port of current url.
+   *
+   *
+   * ```js
+   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+   * var port = $location.port();
+   * // => 80
+   * ```
+   *
+   * @return {Number} port
+   */
+  port: locationGetter('$$port'),
+
+  /**
+   * @ngdoc method
+   * @name $location#path
+   *
+   * @description
+   * This method is getter / setter.
+   *
+   * Return path of current url when called without any parameter.
+   *
+   * Change path when called with parameter and return `$location`.
+   *
+   * Note: Path should always begin with forward slash (/), this method will add the forward slash
+   * if it is missing.
+   *
+   *
+   * ```js
+   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+   * var path = $location.path();
+   * // => "/some/path"
+   * ```
+   *
+   * @param {(string|number)=} path New path
+   * @return {string} path
+   */
+  path: locationGetterSetter('$$path', function(path) {
+    path = path !== null ? path.toString() : '';
+    return path.charAt(0) == '/' ? path : '/' + path;
+  }),
+
+  /**
+   * @ngdoc method
+   * @name $location#search
+   *
+   * @description
+   * This method is getter / setter.
+   *
+   * Return search part (as object) of current url when called without any parameter.
+   *
+   * Change search part when called with parameter and return `$location`.
+   *
+   *
+   * ```js
+   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo
+   * var searchObject = $location.search();
+   * // => {foo: 'bar', baz: 'xoxo'}
+   *
+   * // set foo to 'yipee'
+   * $location.search('foo', 'yipee');
+   * // $location.search() => {foo: 'yipee', baz: 'xoxo'}
+   * ```
+   *
+   * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or
+   * hash object.
+   *
+   * When called with a single argument the method acts as a setter, setting the `search` component
+   * of `$location` to the specified value.
+   *
+   * If the argument is a hash object containing an array of values, these values will be encoded
+   * as duplicate search parameters in the url.
+   *
+   * @param {(string|Number|Array<string>|boolean)=} paramValue If `search` is a string or number, then `paramValue`
+   * will override only a single search property.
+   *
+   * If `paramValue` is an array, it will override the property of the `search` component of
+   * `$location` specified via the first argument.
+   *
+   * If `paramValue` is `null`, the property specified via the first argument will be deleted.
+   *
+   * If `paramValue` is `true`, the property specified via the first argument will be added with no
+   * value nor trailing equal sign.
+   *
+   * @return {Object} If called with no arguments returns the parsed `search` object. If called with
+   * one or more arguments returns `$location` object itself.
+   */
+  search: function(search, paramValue) {
+    switch (arguments.length) {
+      case 0:
+        return this.$$search;
+      case 1:
+        if (isString(search) || isNumber(search)) {
+          search = search.toString();
+          this.$$search = parseKeyValue(search);
+        } else if (isObject(search)) {
+          search = copy(search, {});
+          // remove object undefined or null properties
+          forEach(search, function(value, key) {
+            if (value == null) delete search[key];
+          });
+
+          this.$$search = search;
+        } else {
+          throw $locationMinErr('isrcharg',
+              'The first argument of the `$location#search()` call must be a string or an object.');
+        }
+        break;
+      default:
+        if (isUndefined(paramValue) || paramValue === null) {
+          delete this.$$search[search];
+        } else {
+          this.$$search[search] = paramValue;
+        }
+    }
+
+    this.$$compose();
+    return this;
+  },
+
+  /**
+   * @ngdoc method
+   * @name $location#hash
+   *
+   * @description
+   * This method is getter / setter.
+   *
+   * Returns the hash fragment when called without any parameters.
+   *
+   * Changes the hash fragment when called with a parameter and returns `$location`.
+   *
+   *
+   * ```js
+   * // given url http://example.com/#/some/path?foo=bar&baz=xoxo#hashValue
+   * var hash = $location.hash();
+   * // => "hashValue"
+   * ```
+   *
+   * @param {(string|number)=} hash New hash fragment
+   * @return {string} hash
+   */
+  hash: locationGetterSetter('$$hash', function(hash) {
+    return hash !== null ? hash.toString() : '';
+  }),
+
+  /**
+   * @ngdoc method
+   * @name $location#replace
+   *
+   * @description
+   * If called, all changes to $location during the current `$digest` will replace the current history
+   * record, instead of adding a new one.
+   */
+  replace: function() {
+    this.$$replace = true;
+    return this;
+  }
+};
+
+forEach([LocationHashbangInHtml5Url, LocationHashbangUrl, LocationHtml5Url], function(Location) {
+  Location.prototype = Object.create(locationPrototype);
+
+  /**
+   * @ngdoc method
+   * @name $location#state
+   *
+   * @description
+   * This method is getter / setter.
+   *
+   * Return the history state object when called without any parameter.
+   *
+   * Change the history state object when called with one parameter and return `$location`.
+   * The state object is later passed to `pushState` or `replaceState`.
+   *
+   * NOTE: This method is supported only in HTML5 mode and only in browsers supporting
+   * the HTML5 History API (i.e. methods `pushState` and `replaceState`). If you need to support
+   * older browsers (like IE9 or Android < 4.0), don't use this method.
+   *
+   * @param {object=} state State object for pushState or replaceState
+   * @return {object} state
+   */
+  Location.prototype.state = function(state) {
+    if (!arguments.length) {
+      return this.$$state;
+    }
+
+    if (Location !== LocationHtml5Url || !this.$$html5) {
+      throw $locationMinErr('nostate', 'History API state support is available only ' +
+        'in HTML5 mode and only in browsers supporting HTML5 History API');
+    }
+    // The user might modify `stateObject` after invoking `$location.state(stateObject)`
+    // but we're changing the $$state reference to $browser.state() during the $digest
+    // so the modification window is narrow.
+    this.$$state = isUndefined(state) ? null : state;
+
+    return this;
+  };
+});
+
+
+function locationGetter(property) {
+  return function() {
+    return this[property];
+  };
+}
+
+
+function locationGetterSetter(property, preprocess) {
+  return function(value) {
+    if (isUndefined(value)) {
+      return this[property];
+    }
+
+    this[property] = preprocess(value);
+    this.$$compose();
+
+    return this;
+  };
+}
+
+
+/**
+ * @ngdoc service
+ * @name $location
+ *
+ * @requires $rootElement
+ *
+ * @description
+ * The $location service parses the URL in the browser address bar (based on the
+ * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL
+ * available to your application. Changes to the URL in the address bar are reflected into
+ * $location service and changes to $location are reflected into the browser address bar.
+ *
+ * **The $location service:**
+ *
+ * - Exposes the current URL in the browser address bar, so you can
+ *   - Watch and observe the URL.
+ *   - Change the URL.
+ * - Synchronizes the URL with the browser when the user
+ *   - Changes the address bar.
+ *   - Clicks the back or forward button (or clicks a History link).
+ *   - Clicks on a link.
+ * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash).
+ *
+ * For more information see {@link guide/$location Developer Guide: Using $location}
+ */
+
+/**
+ * @ngdoc provider
+ * @name $locationProvider
+ * @description
+ * Use the `$locationProvider` to configure how the application deep linking paths are stored.
+ */
+function $LocationProvider() {
+  var hashPrefix = '',
+      html5Mode = {
+        enabled: false,
+        requireBase: true,
+        rewriteLinks: true
+      };
+
+  /**
+   * @ngdoc method
+   * @name $locationProvider#hashPrefix
+   * @description
+   * @param {string=} prefix Prefix for hash part (containing path and search)
+   * @returns {*} current value if used as getter or itself (chaining) if used as setter
+   */
+  this.hashPrefix = function(prefix) {
+    if (isDefined(prefix)) {
+      hashPrefix = prefix;
+      return this;
+    } else {
+      return hashPrefix;
+    }
+  };
+
+  /**
+   * @ngdoc method
+   * @name $locationProvider#html5Mode
+   * @description
+   * @param {(boolean|Object)=} mode If boolean, sets `html5Mode.enabled` to value.
+   *   If object, sets `enabled`, `requireBase` and `rewriteLinks` to respective values. Supported
+   *   properties:
+   *   - **enabled** – `{boolean}` – (default: false) If true, will rely on `history.pushState` to
+   *     change urls where supported. Will fall back to hash-prefixed paths in browsers that do not
+   *     support `pushState`.
+   *   - **requireBase** - `{boolean}` - (default: `true`) When html5Mode is enabled, specifies
+   *     whether or not a <base> tag is required to be present. If `enabled` and `requireBase` are
+   *     true, and a base tag is not present, an error will be thrown when `$location` is injected.
+   *     See the {@link guide/$location $location guide for more information}
+   *   - **rewriteLinks** - `{boolean}` - (default: `true`) When html5Mode is enabled,
+   *     enables/disables url rewriting for relative links.
+   *
+   * @returns {Object} html5Mode object if used as getter or itself (chaining) if used as setter
+   */
+  this.html5Mode = function(mode) {
+    if (isBoolean(mode)) {
+      html5Mode.enabled = mode;
+      return this;
+    } else if (isObject(mode)) {
+
+      if (isBoolean(mode.enabled)) {
+        html5Mode.enabled = mode.enabled;
+      }
+
+      if (isBoolean(mode.requireBase)) {
+        html5Mode.requireBase = mode.requireBase;
+      }
+
+      if (isBoolean(mode.rewriteLinks)) {
+        html5Mode.rewriteLinks = mode.rewriteLinks;
+      }
+
+      return this;
+    } else {
+      return html5Mode;
+    }
+  };
+
+  /**
+   * @ngdoc event
+   * @name $location#$locationChangeStart
+   * @eventType broadcast on root scope
+   * @description
+   * Broadcasted before a URL will change.
+   *
+   * This change can be prevented by calling
+   * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more
+   * details about event object. Upon successful change
+   * {@link ng.$location#$locationChangeSuccess $locationChangeSuccess} is fired.
+   *
+   * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when
+   * the browser supports the HTML5 History API.
+   *
+   * @param {Object} angularEvent Synthetic event object.
+   * @param {string} newUrl New URL
+   * @param {string=} oldUrl URL that was before it was changed.
+   * @param {string=} newState New history state object
+   * @param {string=} oldState History state object that was before it was changed.
+   */
+
+  /**
+   * @ngdoc event
+   * @name $location#$locationChangeSuccess
+   * @eventType broadcast on root scope
+   * @description
+   * Broadcasted after a URL was changed.
+   *
+   * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when
+   * the browser supports the HTML5 History API.
+   *
+   * @param {Object} angularEvent Synthetic event object.
+   * @param {string} newUrl New URL
+   * @param {string=} oldUrl URL that was before it was changed.
+   * @param {string=} newState New history state object
+   * @param {string=} oldState History state object that was before it was changed.
+   */
+
+  this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement', '$window',
+      function($rootScope, $browser, $sniffer, $rootElement, $window) {
+    var $location,
+        LocationMode,
+        baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to ''
+        initialUrl = $browser.url(),
+        appBase;
+
+    if (html5Mode.enabled) {
+      if (!baseHref && html5Mode.requireBase) {
+        throw $locationMinErr('nobase',
+          "$location in HTML5 mode requires a <base> tag to be present!");
+      }
+      appBase = serverBase(initialUrl) + (baseHref || '/');
+      LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url;
+    } else {
+      appBase = stripHash(initialUrl);
+      LocationMode = LocationHashbangUrl;
+    }
+    var appBaseNoFile = stripFile(appBase);
+
+    $location = new LocationMode(appBase, appBaseNoFile, '#' + hashPrefix);
+    $location.$$parseLinkUrl(initialUrl, initialUrl);
+
+    $location.$$state = $browser.state();
+
+    var IGNORE_URI_REGEXP = /^\s*(javascript|mailto):/i;
+
+    function setBrowserUrlWithFallback(url, replace, state) {
+      var oldUrl = $location.url();
+      var oldState = $location.$$state;
+      try {
+        $browser.url(url, replace, state);
+
+        // Make sure $location.state() returns referentially identical (not just deeply equal)
+        // state object; this makes possible quick checking if the state changed in the digest
+        // loop. Checking deep equality would be too expensive.
+        $location.$$state = $browser.state();
+      } catch (e) {
+        // Restore old values if pushState fails
+        $location.url(oldUrl);
+        $location.$$state = oldState;
+
+        throw e;
+      }
+    }
+
+    $rootElement.on('click', function(event) {
+      // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser)
+      // currently we open nice url link and redirect then
+
+      if (!html5Mode.rewriteLinks || event.ctrlKey || event.metaKey || event.shiftKey || event.which == 2 || event.button == 2) return;
+
+      var elm = jqLite(event.target);
+
+      // traverse the DOM up to find first A tag
+      while (nodeName_(elm[0]) !== 'a') {
+        // ignore rewriting if no A tag (reached root element, or no parent - removed from document)
+        if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return;
+      }
+
+      var absHref = elm.prop('href');
+      // get the actual href attribute - see
+      // http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx
+      var relHref = elm.attr('href') || elm.attr('xlink:href');
+
+      if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') {
+        // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during
+        // an animation.
+        absHref = urlResolve(absHref.animVal).href;
+      }
+
+      // Ignore when url is started with javascript: or mailto:
+      if (IGNORE_URI_REGEXP.test(absHref)) return;
+
+      if (absHref && !elm.attr('target') && !event.isDefaultPrevented()) {
+        if ($location.$$parseLinkUrl(absHref, relHref)) {
+          // We do a preventDefault for all urls that are part of the angular application,
+          // in html5mode and also without, so that we are able to abort navigation without
+          // getting double entries in the location history.
+          event.preventDefault();
+          // update location manually
+          if ($location.absUrl() != $browser.url()) {
+            $rootScope.$apply();
+            // hack to work around FF6 bug 684208 when scenario runner clicks on links
+            $window.angular['ff-684208-preventDefault'] = true;
+          }
+        }
+      }
+    });
+
+
+    // rewrite hashbang url <> html5 url
+    if (trimEmptyHash($location.absUrl()) != trimEmptyHash(initialUrl)) {
+      $browser.url($location.absUrl(), true);
+    }
+
+    var initializing = true;
+
+    // update $location when $browser url changes
+    $browser.onUrlChange(function(newUrl, newState) {
+
+      if (isUndefined(beginsWith(appBaseNoFile, newUrl))) {
+        // If we are navigating outside of the app then force a reload
+        $window.location.href = newUrl;
+        return;
+      }
+
+      $rootScope.$evalAsync(function() {
+        var oldUrl = $location.absUrl();
+        var oldState = $location.$$state;
+        var defaultPrevented;
+        newUrl = trimEmptyHash(newUrl);
+        $location.$$parse(newUrl);
+        $location.$$state = newState;
+
+        defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,
+            newState, oldState).defaultPrevented;
+
+        // if the location was changed by a `$locationChangeStart` handler then stop
+        // processing this location change
+        if ($location.absUrl() !== newUrl) return;
+
+        if (defaultPrevented) {
+          $location.$$parse(oldUrl);
+          $location.$$state = oldState;
+          setBrowserUrlWithFallback(oldUrl, false, oldState);
+        } else {
+          initializing = false;
+          afterLocationChange(oldUrl, oldState);
+        }
+      });
+      if (!$rootScope.$$phase) $rootScope.$digest();
+    });
+
+    // update browser
+    $rootScope.$watch(function $locationWatch() {
+      var oldUrl = trimEmptyHash($browser.url());
+      var newUrl = trimEmptyHash($location.absUrl());
+      var oldState = $browser.state();
+      var currentReplace = $location.$$replace;
+      var urlOrStateChanged = oldUrl !== newUrl ||
+        ($location.$$html5 && $sniffer.history && oldState !== $location.$$state);
+
+      if (initializing || urlOrStateChanged) {
+        initializing = false;
+
+        $rootScope.$evalAsync(function() {
+          var newUrl = $location.absUrl();
+          var defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,
+              $location.$$state, oldState).defaultPrevented;
+
+          // if the location was changed by a `$locationChangeStart` handler then stop
+          // processing this location change
+          if ($location.absUrl() !== newUrl) return;
+
+          if (defaultPrevented) {
+            $location.$$parse(oldUrl);
+            $location.$$state = oldState;
+          } else {
+            if (urlOrStateChanged) {
+              setBrowserUrlWithFallback(newUrl, currentReplace,
+                                        oldState === $location.$$state ? null : $location.$$state);
+            }
+            afterLocationChange(oldUrl, oldState);
+          }
+        });
+      }
+
+      $location.$$replace = false;
+
+      // we don't need to return anything because $evalAsync will make the digest loop dirty when
+      // there is a change
+    });
+
+    return $location;
+
+    function afterLocationChange(oldUrl, oldState) {
+      $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl,
+        $location.$$state, oldState);
+    }
+}];
+}
+
+/**
+ * @ngdoc service
+ * @name $log
+ * @requires $window
+ *
+ * @description
+ * Simple service for logging. Default implementation safely writes the message
+ * into the browser's console (if present).
+ *
+ * The main purpose of this service is to simplify debugging and troubleshooting.
+ *
+ * The default is to log `debug` messages. You can use
+ * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this.
+ *
+ * @example
+   <example module="logExample">
+     <file name="script.js">
+       angular.module('logExample', [])
+         .controller('LogController', ['$scope', '$log', function($scope, $log) {
+           $scope.$log = $log;
+           $scope.message = 'Hello World!';
+         }]);
+     </file>
+     <file name="index.html">
+       <div ng-controller="LogController">
+         <p>Reload this page with open console, enter text and hit the log button...</p>
+         <label>Message:
+         <input type="text" ng-model="message" /></label>
+         <button ng-click="$log.log(message)">log</button>
+         <button ng-click="$log.warn(message)">warn</button>
+         <button ng-click="$log.info(message)">info</button>
+         <button ng-click="$log.error(message)">error</button>
+         <button ng-click="$log.debug(message)">debug</button>
+       </div>
+     </file>
+   </example>
+ */
+
+/**
+ * @ngdoc provider
+ * @name $logProvider
+ * @description
+ * Use the `$logProvider` to configure how the application logs messages
+ */
+function $LogProvider() {
+  var debug = true,
+      self = this;
+
+  /**
+   * @ngdoc method
+   * @name $logProvider#debugEnabled
+   * @description
+   * @param {boolean=} flag enable or disable debug level messages
+   * @returns {*} current value if used as getter or itself (chaining) if used as setter
+   */
+  this.debugEnabled = function(flag) {
+    if (isDefined(flag)) {
+      debug = flag;
+    return this;
+    } else {
+      return debug;
+    }
+  };
+
+  this.$get = ['$window', function($window) {
+    return {
+      /**
+       * @ngdoc method
+       * @name $log#log
+       *
+       * @description
+       * Write a log message
+       */
+      log: consoleLog('log'),
+
+      /**
+       * @ngdoc method
+       * @name $log#info
+       *
+       * @description
+       * Write an information message
+       */
+      info: consoleLog('info'),
+
+      /**
+       * @ngdoc method
+       * @name $log#warn
+       *
+       * @description
+       * Write a warning message
+       */
+      warn: consoleLog('warn'),
+
+      /**
+       * @ngdoc method
+       * @name $log#error
+       *
+       * @description
+       * Write an error message
+       */
+      error: consoleLog('error'),
+
+      /**
+       * @ngdoc method
+       * @name $log#debug
+       *
+       * @description
+       * Write a debug message
+       */
+      debug: (function() {
+        var fn = consoleLog('debug');
+
+        return function() {
+          if (debug) {
+            fn.apply(self, arguments);
+          }
+        };
+      }())
+    };
+
+    function formatError(arg) {
+      if (arg instanceof Error) {
+        if (arg.stack) {
+          arg = (arg.message && arg.stack.indexOf(arg.message) === -1)
+              ? 'Error: ' + arg.message + '\n' + arg.stack
+              : arg.stack;
+        } else if (arg.sourceURL) {
+          arg = arg.message + '\n' + arg.sourceURL + ':' + arg.line;
+        }
+      }
+      return arg;
+    }
+
+    function consoleLog(type) {
+      var console = $window.console || {},
+          logFn = console[type] || console.log || noop,
+          hasApply = false;
+
+      // Note: reading logFn.apply throws an error in IE11 in IE8 document mode.
+      // The reason behind this is that console.log has type "object" in IE8...
+      try {
+        hasApply = !!logFn.apply;
+      } catch (e) {}
+
+      if (hasApply) {
+        return function() {
+          var args = [];
+          forEach(arguments, function(arg) {
+            args.push(formatError(arg));
+          });
+          return logFn.apply(console, args);
+        };
+      }
+
+      // we are IE which either doesn't have window.console => this is noop and we do nothing,
+      // or we are IE where console.log doesn't have apply so we log at least first 2 args
+      return function(arg1, arg2) {
+        logFn(arg1, arg2 == null ? '' : arg2);
+      };
+    }
+  }];
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *     Any commits to this file should be reviewed with security in mind.  *
+ *   Changes to this file can potentially create security vulnerabilities. *
+ *          An approval from 2 Core members with history of modifying      *
+ *                         this file is required.                          *
+ *                                                                         *
+ *  Does the change somehow allow for arbitrary javascript to be executed? *
+ *    Or allows for someone to change the prototype of built-in objects?   *
+ *     Or gives undesired access to variables likes document or window?    *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+var $parseMinErr = minErr('$parse');
+
+// Sandboxing Angular Expressions
+// ------------------------------
+// Angular expressions are generally considered safe because these expressions only have direct
+// access to `$scope` and locals. However, one can obtain the ability to execute arbitrary JS code by
+// obtaining a reference to native JS functions such as the Function constructor.
+//
+// As an example, consider the following Angular expression:
+//
+//   {}.toString.constructor('alert("evil JS code")')
+//
+// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits
+// against the expression language, but not to prevent exploits that were enabled by exposing
+// sensitive JavaScript or browser APIs on Scope. Exposing such objects on a Scope is never a good
+// practice and therefore we are not even trying to protect against interaction with an object
+// explicitly exposed in this way.
+//
+// In general, it is not possible to access a Window object from an angular expression unless a
+// window or some DOM object that has a reference to window is published onto a Scope.
+// Similarly we prevent invocations of function known to be dangerous, as well as assignments to
+// native objects.
+//
+// See https://docs.angularjs.org/guide/security
+
+
+function ensureSafeMemberName(name, fullExpression) {
+  if (name === "__defineGetter__" || name === "__defineSetter__"
+      || name === "__lookupGetter__" || name === "__lookupSetter__"
+      || name === "__proto__") {
+    throw $parseMinErr('isecfld',
+        'Attempting to access a disallowed field in Angular expressions! '
+        + 'Expression: {0}', fullExpression);
+  }
+  return name;
+}
+
+function getStringValue(name, fullExpression) {
+  // From the JavaScript docs:
+  // Property names must be strings. This means that non-string objects cannot be used
+  // as keys in an object. Any non-string object, including a number, is typecasted
+  // into a string via the toString method.
+  //
+  // So, to ensure that we are checking the same `name` that JavaScript would use,
+  // we cast it to a string, if possible.
+  // Doing `name + ''` can cause a repl error if the result to `toString` is not a string,
+  // this is, this will handle objects that misbehave.
+  name = name + '';
+  if (!isString(name)) {
+    throw $parseMinErr('iseccst',
+        'Cannot convert object to primitive value! '
+        + 'Expression: {0}', fullExpression);
+  }
+  return name;
+}
+
+function ensureSafeObject(obj, fullExpression) {
+  // nifty check if obj is Function that is fast and works across iframes and other contexts
+  if (obj) {
+    if (obj.constructor === obj) {
+      throw $parseMinErr('isecfn',
+          'Referencing Function in Angular expressions is disallowed! Expression: {0}',
+          fullExpression);
+    } else if (// isWindow(obj)
+        obj.window === obj) {
+      throw $parseMinErr('isecwindow',
+          'Referencing the Window in Angular expressions is disallowed! Expression: {0}',
+          fullExpression);
+    } else if (// isElement(obj)
+        obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) {
+      throw $parseMinErr('isecdom',
+          'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}',
+          fullExpression);
+    } else if (// block Object so that we can't get hold of dangerous Object.* methods
+        obj === Object) {
+      throw $parseMinErr('isecobj',
+          'Referencing Object in Angular expressions is disallowed! Expression: {0}',
+          fullExpression);
+    }
+  }
+  return obj;
+}
+
+var CALL = Function.prototype.call;
+var APPLY = Function.prototype.apply;
+var BIND = Function.prototype.bind;
+
+function ensureSafeFunction(obj, fullExpression) {
+  if (obj) {
+    if (obj.constructor === obj) {
+      throw $parseMinErr('isecfn',
+        'Referencing Function in Angular expressions is disallowed! Expression: {0}',
+        fullExpression);
+    } else if (obj === CALL || obj === APPLY || obj === BIND) {
+      throw $parseMinErr('isecff',
+        'Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}',
+        fullExpression);
+    }
+  }
+}
+
+function ensureSafeAssignContext(obj, fullExpression) {
+  if (obj) {
+    if (obj === (0).constructor || obj === (false).constructor || obj === ''.constructor ||
+        obj === {}.constructor || obj === [].constructor || obj === Function.constructor) {
+      throw $parseMinErr('isecaf',
+        'Assigning to a constructor is disallowed! Expression: {0}', fullExpression);
+    }
+  }
+}
+
+var OPERATORS = createMap();
+forEach('+ - * / % === !== == != < > <= >= && || ! = |'.split(' '), function(operator) { OPERATORS[operator] = true; });
+var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'};
+
+
+/////////////////////////////////////////
+
+
+/**
+ * @constructor
+ */
+var Lexer = function(options) {
+  this.options = options;
+};
+
+Lexer.prototype = {
+  constructor: Lexer,
+
+  lex: function(text) {
+    this.text = text;
+    this.index = 0;
+    this.tokens = [];
+
+    while (this.index < this.text.length) {
+      var ch = this.text.charAt(this.index);
+      if (ch === '"' || ch === "'") {
+        this.readString(ch);
+      } else if (this.isNumber(ch) || ch === '.' && this.isNumber(this.peek())) {
+        this.readNumber();
+      } else if (this.isIdent(ch)) {
+        this.readIdent();
+      } else if (this.is(ch, '(){}[].,;:?')) {
+        this.tokens.push({index: this.index, text: ch});
+        this.index++;
+      } else if (this.isWhitespace(ch)) {
+        this.index++;
+      } else {
+        var ch2 = ch + this.peek();
+        var ch3 = ch2 + this.peek(2);
+        var op1 = OPERATORS[ch];
+        var op2 = OPERATORS[ch2];
+        var op3 = OPERATORS[ch3];
+        if (op1 || op2 || op3) {
+          var token = op3 ? ch3 : (op2 ? ch2 : ch);
+          this.tokens.push({index: this.index, text: token, operator: true});
+          this.index += token.length;
+        } else {
+          this.throwError('Unexpected next character ', this.index, this.index + 1);
+        }
+      }
+    }
+    return this.tokens;
+  },
+
+  is: function(ch, chars) {
+    return chars.indexOf(ch) !== -1;
+  },
+
+  peek: function(i) {
+    var num = i || 1;
+    return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false;
+  },
+
+  isNumber: function(ch) {
+    return ('0' <= ch && ch <= '9') && typeof ch === "string";
+  },
+
+  isWhitespace: function(ch) {
+    // IE treats non-breaking space as \u00A0
+    return (ch === ' ' || ch === '\r' || ch === '\t' ||
+            ch === '\n' || ch === '\v' || ch === '\u00A0');
+  },
+
+  isIdent: function(ch) {
+    return ('a' <= ch && ch <= 'z' ||
+            'A' <= ch && ch <= 'Z' ||
+            '_' === ch || ch === '$');
+  },
+
+  isExpOperator: function(ch) {
+    return (ch === '-' || ch === '+' || this.isNumber(ch));
+  },
+
+  throwError: function(error, start, end) {
+    end = end || this.index;
+    var colStr = (isDefined(start)
+            ? 's ' + start +  '-' + this.index + ' [' + this.text.substring(start, end) + ']'
+            : ' ' + end);
+    throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].',
+        error, colStr, this.text);
+  },
+
+  readNumber: function() {
+    var number = '';
+    var start = this.index;
+    while (this.index < this.text.length) {
+      var ch = lowercase(this.text.charAt(this.index));
+      if (ch == '.' || this.isNumber(ch)) {
+        number += ch;
+      } else {
+        var peekCh = this.peek();
+        if (ch == 'e' && this.isExpOperator(peekCh)) {
+          number += ch;
+        } else if (this.isExpOperator(ch) &&
+            peekCh && this.isNumber(peekCh) &&
+            number.charAt(number.length - 1) == 'e') {
+          number += ch;
+        } else if (this.isExpOperator(ch) &&
+            (!peekCh || !this.isNumber(peekCh)) &&
+            number.charAt(number.length - 1) == 'e') {
+          this.throwError('Invalid exponent');
+        } else {
+          break;
+        }
+      }
+      this.index++;
+    }
+    this.tokens.push({
+      index: start,
+      text: number,
+      constant: true,
+      value: Number(number)
+    });
+  },
+
+  readIdent: function() {
+    var start = this.index;
+    while (this.index < this.text.length) {
+      var ch = this.text.charAt(this.index);
+      if (!(this.isIdent(ch) || this.isNumber(ch))) {
+        break;
+      }
+      this.index++;
+    }
+    this.tokens.push({
+      index: start,
+      text: this.text.slice(start, this.index),
+      identifier: true
+    });
+  },
+
+  readString: function(quote) {
+    var start = this.index;
+    this.index++;
+    var string = '';
+    var rawString = quote;
+    var escape = false;
+    while (this.index < this.text.length) {
+      var ch = this.text.charAt(this.index);
+      rawString += ch;
+      if (escape) {
+        if (ch === 'u') {
+          var hex = this.text.substring(this.index + 1, this.index + 5);
+          if (!hex.match(/[\da-f]{4}/i)) {
+            this.throwError('Invalid unicode escape [\\u' + hex + ']');
+          }
+          this.index += 4;
+          string += String.fromCharCode(parseInt(hex, 16));
+        } else {
+          var rep = ESCAPE[ch];
+          string = string + (rep || ch);
+        }
+        escape = false;
+      } else if (ch === '\\') {
+        escape = true;
+      } else if (ch === quote) {
+        this.index++;
+        this.tokens.push({
+          index: start,
+          text: rawString,
+          constant: true,
+          value: string
+        });
+        return;
+      } else {
+        string += ch;
+      }
+      this.index++;
+    }
+    this.throwError('Unterminated quote', start);
+  }
+};
+
+var AST = function(lexer, options) {
+  this.lexer = lexer;
+  this.options = options;
+};
+
+AST.Program = 'Program';
+AST.ExpressionStatement = 'ExpressionStatement';
+AST.AssignmentExpression = 'AssignmentExpression';
+AST.ConditionalExpression = 'ConditionalExpression';
+AST.LogicalExpression = 'LogicalExpression';
+AST.BinaryExpression = 'BinaryExpression';
+AST.UnaryExpression = 'UnaryExpression';
+AST.CallExpression = 'CallExpression';
+AST.MemberExpression = 'MemberExpression';
+AST.Identifier = 'Identifier';
+AST.Literal = 'Literal';
+AST.ArrayExpression = 'ArrayExpression';
+AST.Property = 'Property';
+AST.ObjectExpression = 'ObjectExpression';
+AST.ThisExpression = 'ThisExpression';
+
+// Internal use only
+AST.NGValueParameter = 'NGValueParameter';
+
+AST.prototype = {
+  ast: function(text) {
+    this.text = text;
+    this.tokens = this.lexer.lex(text);
+
+    var value = this.program();
+
+    if (this.tokens.length !== 0) {
+      this.throwError('is an unexpected token', this.tokens[0]);
+    }
+
+    return value;
+  },
+
+  program: function() {
+    var body = [];
+    while (true) {
+      if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']'))
+        body.push(this.expressionStatement());
+      if (!this.expect(';')) {
+        return { type: AST.Program, body: body};
+      }
+    }
+  },
+
+  expressionStatement: function() {
+    return { type: AST.ExpressionStatement, expression: this.filterChain() };
+  },
+
+  filterChain: function() {
+    var left = this.expression();
+    var token;
+    while ((token = this.expect('|'))) {
+      left = this.filter(left);
+    }
+    return left;
+  },
+
+  expression: function() {
+    return this.assignment();
+  },
+
+  assignment: function() {
+    var result = this.ternary();
+    if (this.expect('=')) {
+      result = { type: AST.AssignmentExpression, left: result, right: this.assignment(), operator: '='};
+    }
+    return result;
+  },
+
+  ternary: function() {
+    var test = this.logicalOR();
+    var alternate;
+    var consequent;
+    if (this.expect('?')) {
+      alternate = this.expression();
+      if (this.consume(':')) {
+        consequent = this.expression();
+        return { type: AST.ConditionalExpression, test: test, alternate: alternate, consequent: consequent};
+      }
+    }
+    return test;
+  },
+
+  logicalOR: function() {
+    var left = this.logicalAND();
+    while (this.expect('||')) {
+      left = { type: AST.LogicalExpression, operator: '||', left: left, right: this.logicalAND() };
+    }
+    return left;
+  },
+
+  logicalAND: function() {
+    var left = this.equality();
+    while (this.expect('&&')) {
+      left = { type: AST.LogicalExpression, operator: '&&', left: left, right: this.equality()};
+    }
+    return left;
+  },
+
+  equality: function() {
+    var left = this.relational();
+    var token;
+    while ((token = this.expect('==','!=','===','!=='))) {
+      left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.relational() };
+    }
+    return left;
+  },
+
+  relational: function() {
+    var left = this.additive();
+    var token;
+    while ((token = this.expect('<', '>', '<=', '>='))) {
+      left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.additive() };
+    }
+    return left;
+  },
+
+  additive: function() {
+    var left = this.multiplicative();
+    var token;
+    while ((token = this.expect('+','-'))) {
+      left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.multiplicative() };
+    }
+    return left;
+  },
+
+  multiplicative: function() {
+    var left = this.unary();
+    var token;
+    while ((token = this.expect('*','/','%'))) {
+      left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.unary() };
+    }
+    return left;
+  },
+
+  unary: function() {
+    var token;
+    if ((token = this.expect('+', '-', '!'))) {
+      return { type: AST.UnaryExpression, operator: token.text, prefix: true, argument: this.unary() };
+    } else {
+      return this.primary();
+    }
+  },
+
+  primary: function() {
+    var primary;
+    if (this.expect('(')) {
+      primary = this.filterChain();
+      this.consume(')');
+    } else if (this.expect('[')) {
+      primary = this.arrayDeclaration();
+    } else if (this.expect('{')) {
+      primary = this.object();
+    } else if (this.constants.hasOwnProperty(this.peek().text)) {
+      primary = copy(this.constants[this.consume().text]);
+    } else if (this.peek().identifier) {
+      primary = this.identifier();
+    } else if (this.peek().constant) {
+      primary = this.constant();
+    } else {
+      this.throwError('not a primary expression', this.peek());
+    }
+
+    var next;
+    while ((next = this.expect('(', '[', '.'))) {
+      if (next.text === '(') {
+        primary = {type: AST.CallExpression, callee: primary, arguments: this.parseArguments() };
+        this.consume(')');
+      } else if (next.text === '[') {
+        primary = { type: AST.MemberExpression, object: primary, property: this.expression(), computed: true };
+        this.consume(']');
+      } else if (next.text === '.') {
+        primary = { type: AST.MemberExpression, object: primary, property: this.identifier(), computed: false };
+      } else {
+        this.throwError('IMPOSSIBLE');
+      }
+    }
+    return primary;
+  },
+
+  filter: function(baseExpression) {
+    var args = [baseExpression];
+    var result = {type: AST.CallExpression, callee: this.identifier(), arguments: args, filter: true};
+
+    while (this.expect(':')) {
+      args.push(this.expression());
+    }
+
+    return result;
+  },
+
+  parseArguments: function() {
+    var args = [];
+    if (this.peekToken().text !== ')') {
+      do {
+        args.push(this.expression());
+      } while (this.expect(','));
+    }
+    return args;
+  },
+
+  identifier: function() {
+    var token = this.consume();
+    if (!token.identifier) {
+      this.throwError('is not a valid identifier', token);
+    }
+    return { type: AST.Identifier, name: token.text };
+  },
+
+  constant: function() {
+    // TODO check that it is a constant
+    return { type: AST.Literal, value: this.consume().value };
+  },
+
+  arrayDeclaration: function() {
+    var elements = [];
+    if (this.peekToken().text !== ']') {
+      do {
+        if (this.peek(']')) {
+          // Support trailing commas per ES5.1.
+          break;
+        }
+        elements.push(this.expression());
+      } while (this.expect(','));
+    }
+    this.consume(']');
+
+    return { type: AST.ArrayExpression, elements: elements };
+  },
+
+  object: function() {
+    var properties = [], property;
+    if (this.peekToken().text !== '}') {
+      do {
+        if (this.peek('}')) {
+          // Support trailing commas per ES5.1.
+          break;
+        }
+        property = {type: AST.Property, kind: 'init'};
+        if (this.peek().constant) {
+          property.key = this.constant();
+        } else if (this.peek().identifier) {
+          property.key = this.identifier();
+        } else {
+          this.throwError("invalid key", this.peek());
+        }
+        this.consume(':');
+        property.value = this.expression();
+        properties.push(property);
+      } while (this.expect(','));
+    }
+    this.consume('}');
+
+    return {type: AST.ObjectExpression, properties: properties };
+  },
+
+  throwError: function(msg, token) {
+    throw $parseMinErr('syntax',
+        'Syntax Error: Token \'{0}\' {1} at column {2} of the expression [{3}] starting at [{4}].',
+          token.text, msg, (token.index + 1), this.text, this.text.substring(token.index));
+  },
+
+  consume: function(e1) {
+    if (this.tokens.length === 0) {
+      throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);
+    }
+
+    var token = this.expect(e1);
+    if (!token) {
+      this.throwError('is unexpected, expecting [' + e1 + ']', this.peek());
+    }
+    return token;
+  },
+
+  peekToken: function() {
+    if (this.tokens.length === 0) {
+      throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text);
+    }
+    return this.tokens[0];
+  },
+
+  peek: function(e1, e2, e3, e4) {
+    return this.peekAhead(0, e1, e2, e3, e4);
+  },
+
+  peekAhead: function(i, e1, e2, e3, e4) {
+    if (this.tokens.length > i) {
+      var token = this.tokens[i];
+      var t = token.text;
+      if (t === e1 || t === e2 || t === e3 || t === e4 ||
+          (!e1 && !e2 && !e3 && !e4)) {
+        return token;
+      }
+    }
+    return false;
+  },
+
+  expect: function(e1, e2, e3, e4) {
+    var token = this.peek(e1, e2, e3, e4);
+    if (token) {
+      this.tokens.shift();
+      return token;
+    }
+    return false;
+  },
+
+
+  /* `undefined` is not a constant, it is an identifier,
+   * but using it as an identifier is not supported
+   */
+  constants: {
+    'true': { type: AST.Literal, value: true },
+    'false': { type: AST.Literal, value: false },
+    'null': { type: AST.Literal, value: null },
+    'undefined': {type: AST.Literal, value: undefined },
+    'this': {type: AST.ThisExpression }
+  }
+};
+
+function ifDefined(v, d) {
+  return typeof v !== 'undefined' ? v : d;
+}
+
+function plusFn(l, r) {
+  if (typeof l === 'undefined') return r;
+  if (typeof r === 'undefined') return l;
+  return l + r;
+}
+
+function isStateless($filter, filterName) {
+  var fn = $filter(filterName);
+  return !fn.$stateful;
+}
+
+function findConstantAndWatchExpressions(ast, $filter) {
+  var allConstants;
+  var argsToWatch;
+  switch (ast.type) {
+  case AST.Program:
+    allConstants = true;
+    forEach(ast.body, function(expr) {
+      findConstantAndWatchExpressions(expr.expression, $filter);
+      allConstants = allConstants && expr.expression.constant;
+    });
+    ast.constant = allConstants;
+    break;
+  case AST.Literal:
+    ast.constant = true;
+    ast.toWatch = [];
+    break;
+  case AST.UnaryExpression:
+    findConstantAndWatchExpressions(ast.argument, $filter);
+    ast.constant = ast.argument.constant;
+    ast.toWatch = ast.argument.toWatch;
+    break;
+  case AST.BinaryExpression:
+    findConstantAndWatchExpressions(ast.left, $filter);
+    findConstantAndWatchExpressions(ast.right, $filter);
+    ast.constant = ast.left.constant && ast.right.constant;
+    ast.toWatch = ast.left.toWatch.concat(ast.right.toWatch);
+    break;
+  case AST.LogicalExpression:
+    findConstantAndWatchExpressions(ast.left, $filter);
+    findConstantAndWatchExpressions(ast.right, $filter);
+    ast.constant = ast.left.constant && ast.right.constant;
+    ast.toWatch = ast.constant ? [] : [ast];
+    break;
+  case AST.ConditionalExpression:
+    findConstantAndWatchExpressions(ast.test, $filter);
+    findConstantAndWatchExpressions(ast.alternate, $filter);
+    findConstantAndWatchExpressions(ast.consequent, $filter);
+    ast.constant = ast.test.constant && ast.alternate.constant && ast.consequent.constant;
+    ast.toWatch = ast.constant ? [] : [ast];
+    break;
+  case AST.Identifier:
+    ast.constant = false;
+    ast.toWatch = [ast];
+    break;
+  case AST.MemberExpression:
+    findConstantAndWatchExpressions(ast.object, $filter);
+    if (ast.computed) {
+      findConstantAndWatchExpressions(ast.property, $filter);
+    }
+    ast.constant = ast.object.constant && (!ast.computed || ast.property.constant);
+    ast.toWatch = [ast];
+    break;
+  case AST.CallExpression:
+    allConstants = ast.filter ? isStateless($filter, ast.callee.name) : false;
+    argsToWatch = [];
+    forEach(ast.arguments, function(expr) {
+      findConstantAndWatchExpressions(expr, $filter);
+      allConstants = allConstants && expr.constant;
+      if (!expr.constant) {
+        argsToWatch.push.apply(argsToWatch, expr.toWatch);
+      }
+    });
+    ast.constant = allConstants;
+    ast.toWatch = ast.filter && isStateless($filter, ast.callee.name) ? argsToWatch : [ast];
+    break;
+  case AST.AssignmentExpression:
+    findConstantAndWatchExpressions(ast.left, $filter);
+    findConstantAndWatchExpressions(ast.right, $filter);
+    ast.constant = ast.left.constant && ast.right.constant;
+    ast.toWatch = [ast];
+    break;
+  case AST.ArrayExpression:
+    allConstants = true;
+    argsToWatch = [];
+    forEach(ast.elements, function(expr) {
+      findConstantAndWatchExpressions(expr, $filter);
+      allConstants = allConstants && expr.constant;
+      if (!expr.constant) {
+        argsToWatch.push.apply(argsToWatch, expr.toWatch);
+      }
+    });
+    ast.constant = allConstants;
+    ast.toWatch = argsToWatch;
+    break;
+  case AST.ObjectExpression:
+    allConstants = true;
+    argsToWatch = [];
+    forEach(ast.properties, function(property) {
+      findConstantAndWatchExpressions(property.value, $filter);
+      allConstants = allConstants && property.value.constant;
+      if (!property.value.constant) {
+        argsToWatch.push.apply(argsToWatch, property.value.toWatch);
+      }
+    });
+    ast.constant = allConstants;
+    ast.toWatch = argsToWatch;
+    break;
+  case AST.ThisExpression:
+    ast.constant = false;
+    ast.toWatch = [];
+    break;
+  }
+}
+
+function getInputs(body) {
+  if (body.length != 1) return;
+  var lastExpression = body[0].expression;
+  var candidate = lastExpression.toWatch;
+  if (candidate.length !== 1) return candidate;
+  return candidate[0] !== lastExpression ? candidate : undefined;
+}
+
+function isAssignable(ast) {
+  return ast.type === AST.Identifier || ast.type === AST.MemberExpression;
+}
+
+function assignableAST(ast) {
+  if (ast.body.length === 1 && isAssignable(ast.body[0].expression)) {
+    return {type: AST.AssignmentExpression, left: ast.body[0].expression, right: {type: AST.NGValueParameter}, operator: '='};
+  }
+}
+
+function isLiteral(ast) {
+  return ast.body.length === 0 ||
+      ast.body.length === 1 && (
+      ast.body[0].expression.type === AST.Literal ||
+      ast.body[0].expression.type === AST.ArrayExpression ||
+      ast.body[0].expression.type === AST.ObjectExpression);
+}
+
+function isConstant(ast) {
+  return ast.constant;
+}
+
+function ASTCompiler(astBuilder, $filter) {
+  this.astBuilder = astBuilder;
+  this.$filter = $filter;
+}
+
+ASTCompiler.prototype = {
+  compile: function(expression, expensiveChecks) {
+    var self = this;
+    var ast = this.astBuilder.ast(expression);
+    this.state = {
+      nextId: 0,
+      filters: {},
+      expensiveChecks: expensiveChecks,
+      fn: {vars: [], body: [], own: {}},
+      assign: {vars: [], body: [], own: {}},
+      inputs: []
+    };
+    findConstantAndWatchExpressions(ast, self.$filter);
+    var extra = '';
+    var assignable;
+    this.stage = 'assign';
+    if ((assignable = assignableAST(ast))) {
+      this.state.computing = 'assign';
+      var result = this.nextId();
+      this.recurse(assignable, result);
+      this.return_(result);
+      extra = 'fn.assign=' + this.generateFunction('assign', 's,v,l');
+    }
+    var toWatch = getInputs(ast.body);
+    self.stage = 'inputs';
+    forEach(toWatch, function(watch, key) {
+      var fnKey = 'fn' + key;
+      self.state[fnKey] = {vars: [], body: [], own: {}};
+      self.state.computing = fnKey;
+      var intoId = self.nextId();
+      self.recurse(watch, intoId);
+      self.return_(intoId);
+      self.state.inputs.push(fnKey);
+      watch.watchId = key;
+    });
+    this.state.computing = 'fn';
+    this.stage = 'main';
+    this.recurse(ast);
+    var fnString =
+      // The build and minification steps remove the string "use strict" from the code, but this is done using a regex.
+      // This is a workaround for this until we do a better job at only removing the prefix only when we should.
+      '"' + this.USE + ' ' + this.STRICT + '";\n' +
+      this.filterPrefix() +
+      'var fn=' + this.generateFunction('fn', 's,l,a,i') +
+      extra +
+      this.watchFns() +
+      'return fn;';
+
+    /* jshint -W054 */
+    var fn = (new Function('$filter',
+        'ensureSafeMemberName',
+        'ensureSafeObject',
+        'ensureSafeFunction',
+        'getStringValue',
+        'ensureSafeAssignContext',
+        'ifDefined',
+        'plus',
+        'text',
+        fnString))(
+          this.$filter,
+          ensureSafeMemberName,
+          ensureSafeObject,
+          ensureSafeFunction,
+          getStringValue,
+          ensureSafeAssignContext,
+          ifDefined,
+          plusFn,
+          expression);
+    /* jshint +W054 */
+    this.state = this.stage = undefined;
+    fn.literal = isLiteral(ast);
+    fn.constant = isConstant(ast);
+    return fn;
+  },
+
+  USE: 'use',
+
+  STRICT: 'strict',
+
+  watchFns: function() {
+    var result = [];
+    var fns = this.state.inputs;
+    var self = this;
+    forEach(fns, function(name) {
+      result.push('var ' + name + '=' + self.generateFunction(name, 's'));
+    });
+    if (fns.length) {
+      result.push('fn.inputs=[' + fns.join(',') + '];');
+    }
+    return result.join('');
+  },
+
+  generateFunction: function(name, params) {
+    return 'function(' + params + '){' +
+        this.varsPrefix(name) +
+        this.body(name) +
+        '};';
+  },
+
+  filterPrefix: function() {
+    var parts = [];
+    var self = this;
+    forEach(this.state.filters, function(id, filter) {
+      parts.push(id + '=$filter(' + self.escape(filter) + ')');
+    });
+    if (parts.length) return 'var ' + parts.join(',') + ';';
+    return '';
+  },
+
+  varsPrefix: function(section) {
+    return this.state[section].vars.length ? 'var ' + this.state[section].vars.join(',') + ';' : '';
+  },
+
+  body: function(section) {
+    return this.state[section].body.join('');
+  },
+
+  recurse: function(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck) {
+    var left, right, self = this, args, expression;
+    recursionFn = recursionFn || noop;
+    if (!skipWatchIdCheck && isDefined(ast.watchId)) {
+      intoId = intoId || this.nextId();
+      this.if_('i',
+        this.lazyAssign(intoId, this.computedMember('i', ast.watchId)),
+        this.lazyRecurse(ast, intoId, nameId, recursionFn, create, true)
+      );
+      return;
+    }
+    switch (ast.type) {
+    case AST.Program:
+      forEach(ast.body, function(expression, pos) {
+        self.recurse(expression.expression, undefined, undefined, function(expr) { right = expr; });
+        if (pos !== ast.body.length - 1) {
+          self.current().body.push(right, ';');
+        } else {
+          self.return_(right);
+        }
+      });
+      break;
+    case AST.Literal:
+      expression = this.escape(ast.value);
+      this.assign(intoId, expression);
+      recursionFn(expression);
+      break;
+    case AST.UnaryExpression:
+      this.recurse(ast.argument, undefined, undefined, function(expr) { right = expr; });
+      expression = ast.operator + '(' + this.ifDefined(right, 0) + ')';
+      this.assign(intoId, expression);
+      recursionFn(expression);
+      break;
+    case AST.BinaryExpression:
+      this.recurse(ast.left, undefined, undefined, function(expr) { left = expr; });
+      this.recurse(ast.right, undefined, undefined, function(expr) { right = expr; });
+      if (ast.operator === '+') {
+        expression = this.plus(left, right);
+      } else if (ast.operator === '-') {
+        expression = this.ifDefined(left, 0) + ast.operator + this.ifDefined(right, 0);
+      } else {
+        expression = '(' + left + ')' + ast.operator + '(' + right + ')';
+      }
+      this.assign(intoId, expression);
+      recursionFn(expression);
+      break;
+    case AST.LogicalExpression:
+      intoId = intoId || this.nextId();
+      self.recurse(ast.left, intoId);
+      self.if_(ast.operator === '&&' ? intoId : self.not(intoId), self.lazyRecurse(ast.right, intoId));
+      recursionFn(intoId);
+      break;
+    case AST.ConditionalExpression:
+      intoId = intoId || this.nextId();
+      self.recurse(ast.test, intoId);
+      self.if_(intoId, self.lazyRecurse(ast.alternate, intoId), self.lazyRecurse(ast.consequent, intoId));
+      recursionFn(intoId);
+      break;
+    case AST.Identifier:
+      intoId = intoId || this.nextId();
+      if (nameId) {
+        nameId.context = self.stage === 'inputs' ? 's' : this.assign(this.nextId(), this.getHasOwnProperty('l', ast.name) + '?l:s');
+        nameId.computed = false;
+        nameId.name = ast.name;
+      }
+      ensureSafeMemberName(ast.name);
+      self.if_(self.stage === 'inputs' || self.not(self.getHasOwnProperty('l', ast.name)),
+        function() {
+          self.if_(self.stage === 'inputs' || 's', function() {
+            if (create && create !== 1) {
+              self.if_(
+                self.not(self.nonComputedMember('s', ast.name)),
+                self.lazyAssign(self.nonComputedMember('s', ast.name), '{}'));
+            }
+            self.assign(intoId, self.nonComputedMember('s', ast.name));
+          });
+        }, intoId && self.lazyAssign(intoId, self.nonComputedMember('l', ast.name))
+        );
+      if (self.state.expensiveChecks || isPossiblyDangerousMemberName(ast.name)) {
+        self.addEnsureSafeObject(intoId);
+      }
+      recursionFn(intoId);
+      break;
+    case AST.MemberExpression:
+      left = nameId && (nameId.context = this.nextId()) || this.nextId();
+      intoId = intoId || this.nextId();
+      self.recurse(ast.object, left, undefined, function() {
+        self.if_(self.notNull(left), function() {
+          if (ast.computed) {
+            right = self.nextId();
+            self.recurse(ast.property, right);
+            self.getStringValue(right);
+            self.addEnsureSafeMemberName(right);
+            if (create && create !== 1) {
+              self.if_(self.not(self.computedMember(left, right)), self.lazyAssign(self.computedMember(left, right), '{}'));
+            }
+            expression = self.ensureSafeObject(self.computedMember(left, right));
+            self.assign(intoId, expression);
+            if (nameId) {
+              nameId.computed = true;
+              nameId.name = right;
+            }
+          } else {
+            ensureSafeMemberName(ast.property.name);
+            if (create && create !== 1) {
+              self.if_(self.not(self.nonComputedMember(left, ast.property.name)), self.lazyAssign(self.nonComputedMember(left, ast.property.name), '{}'));
+            }
+            expression = self.nonComputedMember(left, ast.property.name);
+            if (self.state.expensiveChecks || isPossiblyDangerousMemberName(ast.property.name)) {
+              expression = self.ensureSafeObject(expression);
+            }
+            self.assign(intoId, expression);
+            if (nameId) {
+              nameId.computed = false;
+              nameId.name = ast.property.name;
+            }
+          }
+        }, function() {
+          self.assign(intoId, 'undefined');
+        });
+        recursionFn(intoId);
+      }, !!create);
+      break;
+    case AST.CallExpression:
+      intoId = intoId || this.nextId();
+      if (ast.filter) {
+        right = self.filter(ast.callee.name);
+        args = [];
+        forEach(ast.arguments, function(expr) {
+          var argument = self.nextId();
+          self.recurse(expr, argument);
+          args.push(argument);
+        });
+        expression = right + '(' + args.join(',') + ')';
+        self.assign(intoId, expression);
+        recursionFn(intoId);
+      } else {
+        right = self.nextId();
+        left = {};
+        args = [];
+        self.recurse(ast.callee, right, left, function() {
+          self.if_(self.notNull(right), function() {
+            self.addEnsureSafeFunction(right);
+            forEach(ast.arguments, function(expr) {
+              self.recurse(expr, self.nextId(), undefined, function(argument) {
+                args.push(self.ensureSafeObject(argument));
+              });
+            });
+            if (left.name) {
+              if (!self.state.expensiveChecks) {
+                self.addEnsureSafeObject(left.context);
+              }
+              expression = self.member(left.context, left.name, left.computed) + '(' + args.join(',') + ')';
+            } else {
+              expression = right + '(' + args.join(',') + ')';
+            }
+            expression = self.ensureSafeObject(expression);
+            self.assign(intoId, expression);
+          }, function() {
+            self.assign(intoId, 'undefined');
+          });
+          recursionFn(intoId);
+        });
+      }
+      break;
+    case AST.AssignmentExpression:
+      right = this.nextId();
+      left = {};
+      if (!isAssignable(ast.left)) {
+        throw $parseMinErr('lval', 'Trying to assing a value to a non l-value');
+      }
+      this.recurse(ast.left, undefined, left, function() {
+        self.if_(self.notNull(left.context), function() {
+          self.recurse(ast.right, right);
+          self.addEnsureSafeObject(self.member(left.context, left.name, left.computed));
+          self.addEnsureSafeAssignContext(left.context);
+          expression = self.member(left.context, left.name, left.computed) + ast.operator + right;
+          self.assign(intoId, expression);
+          recursionFn(intoId || expression);
+        });
+      }, 1);
+      break;
+    case AST.ArrayExpression:
+      args = [];
+      forEach(ast.elements, function(expr) {
+        self.recurse(expr, self.nextId(), undefined, function(argument) {
+          args.push(argument);
+        });
+      });
+      expression = '[' + args.join(',') + ']';
+      this.assign(intoId, expression);
+      recursionFn(expression);
+      break;
+    case AST.ObjectExpression:
+      args = [];
+      forEach(ast.properties, function(property) {
+        self.recurse(property.value, self.nextId(), undefined, function(expr) {
+          args.push(self.escape(
+              property.key.type === AST.Identifier ? property.key.name :
+                ('' + property.key.value)) +
+              ':' + expr);
+        });
+      });
+      expression = '{' + args.join(',') + '}';
+      this.assign(intoId, expression);
+      recursionFn(expression);
+      break;
+    case AST.ThisExpression:
+      this.assign(intoId, 's');
+      recursionFn('s');
+      break;
+    case AST.NGValueParameter:
+      this.assign(intoId, 'v');
+      recursionFn('v');
+      break;
+    }
+  },
+
+  getHasOwnProperty: function(element, property) {
+    var key = element + '.' + property;
+    var own = this.current().own;
+    if (!own.hasOwnProperty(key)) {
+      own[key] = this.nextId(false, element + '&&(' + this.escape(property) + ' in ' + element + ')');
+    }
+    return own[key];
+  },
+
+  assign: function(id, value) {
+    if (!id) return;
+    this.current().body.push(id, '=', value, ';');
+    return id;
+  },
+
+  filter: function(filterName) {
+    if (!this.state.filters.hasOwnProperty(filterName)) {
+      this.state.filters[filterName] = this.nextId(true);
+    }
+    return this.state.filters[filterName];
+  },
+
+  ifDefined: function(id, defaultValue) {
+    return 'ifDefined(' + id + ',' + this.escape(defaultValue) + ')';
+  },
+
+  plus: function(left, right) {
+    return 'plus(' + left + ',' + right + ')';
+  },
+
+  return_: function(id) {
+    this.current().body.push('return ', id, ';');
+  },
+
+  if_: function(test, alternate, consequent) {
+    if (test === true) {
+      alternate();
+    } else {
+      var body = this.current().body;
+      body.push('if(', test, '){');
+      alternate();
+      body.push('}');
+      if (consequent) {
+        body.push('else{');
+        consequent();
+        body.push('}');
+      }
+    }
+  },
+
+  not: function(expression) {
+    return '!(' + expression + ')';
+  },
+
+  notNull: function(expression) {
+    return expression + '!=null';
+  },
+
+  nonComputedMember: function(left, right) {
+    return left + '.' + right;
+  },
+
+  computedMember: function(left, right) {
+    return left + '[' + right + ']';
+  },
+
+  member: function(left, right, computed) {
+    if (computed) return this.computedMember(left, right);
+    return this.nonComputedMember(left, right);
+  },
+
+  addEnsureSafeObject: function(item) {
+    this.current().body.push(this.ensureSafeObject(item), ';');
+  },
+
+  addEnsureSafeMemberName: function(item) {
+    this.current().body.push(this.ensureSafeMemberName(item), ';');
+  },
+
+  addEnsureSafeFunction: function(item) {
+    this.current().body.push(this.ensureSafeFunction(item), ';');
+  },
+
+  addEnsureSafeAssignContext: function(item) {
+    this.current().body.push(this.ensureSafeAssignContext(item), ';');
+  },
+
+  ensureSafeObject: function(item) {
+    return 'ensureSafeObject(' + item + ',text)';
+  },
+
+  ensureSafeMemberName: function(item) {
+    return 'ensureSafeMemberName(' + item + ',text)';
+  },
+
+  ensureSafeFunction: function(item) {
+    return 'ensureSafeFunction(' + item + ',text)';
+  },
+
+  getStringValue: function(item) {
+    this.assign(item, 'getStringValue(' + item + ',text)');
+  },
+
+  ensureSafeAssignContext: function(item) {
+    return 'ensureSafeAssignContext(' + item + ',text)';
+  },
+
+  lazyRecurse: function(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck) {
+    var self = this;
+    return function() {
+      self.recurse(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck);
+    };
+  },
+
+  lazyAssign: function(id, value) {
+    var self = this;
+    return function() {
+      self.assign(id, value);
+    };
+  },
+
+  stringEscapeRegex: /[^ a-zA-Z0-9]/g,
+
+  stringEscapeFn: function(c) {
+    return '\\u' + ('0000' + c.charCodeAt(0).toString(16)).slice(-4);
+  },
+
+  escape: function(value) {
+    if (isString(value)) return "'" + value.replace(this.stringEscapeRegex, this.stringEscapeFn) + "'";
+    if (isNumber(value)) return value.toString();
+    if (value === true) return 'true';
+    if (value === false) return 'false';
+    if (value === null) return 'null';
+    if (typeof value === 'undefined') return 'undefined';
+
+    throw $parseMinErr('esc', 'IMPOSSIBLE');
+  },
+
+  nextId: function(skip, init) {
+    var id = 'v' + (this.state.nextId++);
+    if (!skip) {
+      this.current().vars.push(id + (init ? '=' + init : ''));
+    }
+    return id;
+  },
+
+  current: function() {
+    return this.state[this.state.computing];
+  }
+};
+
+
+function ASTInterpreter(astBuilder, $filter) {
+  this.astBuilder = astBuilder;
+  this.$filter = $filter;
+}
+
+ASTInterpreter.prototype = {
+  compile: function(expression, expensiveChecks) {
+    var self = this;
+    var ast = this.astBuilder.ast(expression);
+    this.expression = expression;
+    this.expensiveChecks = expensiveChecks;
+    findConstantAndWatchExpressions(ast, self.$filter);
+    var assignable;
+    var assign;
+    if ((assignable = assignableAST(ast))) {
+      assign = this.recurse(assignable);
+    }
+    var toWatch = getInputs(ast.body);
+    var inputs;
+    if (toWatch) {
+      inputs = [];
+      forEach(toWatch, function(watch, key) {
+        var input = self.recurse(watch);
+        watch.input = input;
+        inputs.push(input);
+        watch.watchId = key;
+      });
+    }
+    var expressions = [];
+    forEach(ast.body, function(expression) {
+      expressions.push(self.recurse(expression.expression));
+    });
+    var fn = ast.body.length === 0 ? function() {} :
+             ast.body.length === 1 ? expressions[0] :
+             function(scope, locals) {
+               var lastValue;
+               forEach(expressions, function(exp) {
+                 lastValue = exp(scope, locals);
+               });
+               return lastValue;
+             };
+    if (assign) {
+      fn.assign = function(scope, value, locals) {
+        return assign(scope, locals, value);
+      };
+    }
+    if (inputs) {
+      fn.inputs = inputs;
+    }
+    fn.literal = isLiteral(ast);
+    fn.constant = isConstant(ast);
+    return fn;
+  },
+
+  recurse: function(ast, context, create) {
+    var left, right, self = this, args, expression;
+    if (ast.input) {
+      return this.inputs(ast.input, ast.watchId);
+    }
+    switch (ast.type) {
+    case AST.Literal:
+      return this.value(ast.value, context);
+    case AST.UnaryExpression:
+      right = this.recurse(ast.argument);
+      return this['unary' + ast.operator](right, context);
+    case AST.BinaryExpression:
+      left = this.recurse(ast.left);
+      right = this.recurse(ast.right);
+      return this['binary' + ast.operator](left, right, context);
+    case AST.LogicalExpression:
+      left = this.recurse(ast.left);
+      right = this.recurse(ast.right);
+      return this['binary' + ast.operator](left, right, context);
+    case AST.ConditionalExpression:
+      return this['ternary?:'](
+        this.recurse(ast.test),
+        this.recurse(ast.alternate),
+        this.recurse(ast.consequent),
+        context
+      );
+    case AST.Identifier:
+      ensureSafeMemberName(ast.name, self.expression);
+      return self.identifier(ast.name,
+                             self.expensiveChecks || isPossiblyDangerousMemberName(ast.name),
+                             context, create, self.expression);
+    case AST.MemberExpression:
+      left = this.recurse(ast.object, false, !!create);
+      if (!ast.computed) {
+        ensureSafeMemberName(ast.property.name, self.expression);
+        right = ast.property.name;
+      }
+      if (ast.computed) right = this.recurse(ast.property);
+      return ast.computed ?
+        this.computedMember(left, right, context, create, self.expression) :
+        this.nonComputedMember(left, right, self.expensiveChecks, context, create, self.expression);
+    case AST.CallExpression:
+      args = [];
+      forEach(ast.arguments, function(expr) {
+        args.push(self.recurse(expr));
+      });
+      if (ast.filter) right = this.$filter(ast.callee.name);
+      if (!ast.filter) right = this.recurse(ast.callee, true);
+      return ast.filter ?
+        function(scope, locals, assign, inputs) {
+          var values = [];
+          for (var i = 0; i < args.length; ++i) {
+            values.push(args[i](scope, locals, assign, inputs));
+          }
+          var value = right.apply(undefined, values, inputs);
+          return context ? {context: undefined, name: undefined, value: value} : value;
+        } :
+        function(scope, locals, assign, inputs) {
+          var rhs = right(scope, locals, assign, inputs);
+          var value;
+          if (rhs.value != null) {
+            ensureSafeObject(rhs.context, self.expression);
+            ensureSafeFunction(rhs.value, self.expression);
+            var values = [];
+            for (var i = 0; i < args.length; ++i) {
+              values.push(ensureSafeObject(args[i](scope, locals, assign, inputs), self.expression));
+            }
+            value = ensureSafeObject(rhs.value.apply(rhs.context, values), self.expression);
+          }
+          return context ? {value: value} : value;
+        };
+    case AST.AssignmentExpression:
+      left = this.recurse(ast.left, true, 1);
+      right = this.recurse(ast.right);
+      return function(scope, locals, assign, inputs) {
+        var lhs = left(scope, locals, assign, inputs);
+        var rhs = right(scope, locals, assign, inputs);
+        ensureSafeObject(lhs.value, self.expression);
+        ensureSafeAssignContext(lhs.context);
+        lhs.context[lhs.name] = rhs;
+        return context ? {value: rhs} : rhs;
+      };
+    case AST.ArrayExpression:
+      args = [];
+      forEach(ast.elements, function(expr) {
+        args.push(self.recurse(expr));
+      });
+      return function(scope, locals, assign, inputs) {
+        var value = [];
+        for (var i = 0; i < args.length; ++i) {
+          value.push(args[i](scope, locals, assign, inputs));
+        }
+        return context ? {value: value} : value;
+      };
+    case AST.ObjectExpression:
+      args = [];
+      forEach(ast.properties, function(property) {
+        args.push({key: property.key.type === AST.Identifier ?
+                        property.key.name :
+                        ('' + property.key.value),
+                   value: self.recurse(property.value)
+        });
+      });
+      return function(scope, locals, assign, inputs) {
+        var value = {};
+        for (var i = 0; i < args.length; ++i) {
+          value[args[i].key] = args[i].value(scope, locals, assign, inputs);
+        }
+        return context ? {value: value} : value;
+      };
+    case AST.ThisExpression:
+      return function(scope) {
+        return context ? {value: scope} : scope;
+      };
+    case AST.NGValueParameter:
+      return function(scope, locals, assign, inputs) {
+        return context ? {value: assign} : assign;
+      };
+    }
+  },
+
+  'unary+': function(argument, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = argument(scope, locals, assign, inputs);
+      if (isDefined(arg)) {
+        arg = +arg;
+      } else {
+        arg = 0;
+      }
+      return context ? {value: arg} : arg;
+    };
+  },
+  'unary-': function(argument, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = argument(scope, locals, assign, inputs);
+      if (isDefined(arg)) {
+        arg = -arg;
+      } else {
+        arg = 0;
+      }
+      return context ? {value: arg} : arg;
+    };
+  },
+  'unary!': function(argument, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = !argument(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary+': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var lhs = left(scope, locals, assign, inputs);
+      var rhs = right(scope, locals, assign, inputs);
+      var arg = plusFn(lhs, rhs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary-': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var lhs = left(scope, locals, assign, inputs);
+      var rhs = right(scope, locals, assign, inputs);
+      var arg = (isDefined(lhs) ? lhs : 0) - (isDefined(rhs) ? rhs : 0);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary*': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) * right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary/': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) / right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary%': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) % right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary===': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) === right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary!==': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) !== right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary==': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) == right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary!=': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) != right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary<': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) < right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary>': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) > right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary<=': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) <= right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary>=': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) >= right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary&&': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) && right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'binary||': function(left, right, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = left(scope, locals, assign, inputs) || right(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  'ternary?:': function(test, alternate, consequent, context) {
+    return function(scope, locals, assign, inputs) {
+      var arg = test(scope, locals, assign, inputs) ? alternate(scope, locals, assign, inputs) : consequent(scope, locals, assign, inputs);
+      return context ? {value: arg} : arg;
+    };
+  },
+  value: function(value, context) {
+    return function() { return context ? {context: undefined, name: undefined, value: value} : value; };
+  },
+  identifier: function(name, expensiveChecks, context, create, expression) {
+    return function(scope, locals, assign, inputs) {
+      var base = locals && (name in locals) ? locals : scope;
+      if (create && create !== 1 && base && !(base[name])) {
+        base[name] = {};
+      }
+      var value = base ? base[name] : undefined;
+      if (expensiveChecks) {
+        ensureSafeObject(value, expression);
+      }
+      if (context) {
+        return {context: base, name: name, value: value};
+      } else {
+        return value;
+      }
+    };
+  },
+  computedMember: function(left, right, context, create, expression) {
+    return function(scope, locals, assign, inputs) {
+      var lhs = left(scope, locals, assign, inputs);
+      var rhs;
+      var value;
+      if (lhs != null) {
+        rhs = right(scope, locals, assign, inputs);
+        rhs = getStringValue(rhs);
+        ensureSafeMemberName(rhs, expression);
+        if (create && create !== 1 && lhs && !(lhs[rhs])) {
+          lhs[rhs] = {};
+        }
+        value = lhs[rhs];
+        ensureSafeObject(value, expression);
+      }
+      if (context) {
+        return {context: lhs, name: rhs, value: value};
+      } else {
+        return value;
+      }
+    };
+  },
+  nonComputedMember: function(left, right, expensiveChecks, context, create, expression) {
+    return function(scope, locals, assign, inputs) {
+      var lhs = left(scope, locals, assign, inputs);
+      if (create && create !== 1 && lhs && !(lhs[right])) {
+        lhs[right] = {};
+      }
+      var value = lhs != null ? lhs[right] : undefined;
+      if (expensiveChecks || isPossiblyDangerousMemberName(right)) {
+        ensureSafeObject(value, expression);
+      }
+      if (context) {
+        return {context: lhs, name: right, value: value};
+      } else {
+        return value;
+      }
+    };
+  },
+  inputs: function(input, watchId) {
+    return function(scope, value, locals, inputs) {
+      if (inputs) return inputs[watchId];
+      return input(scope, value, locals);
+    };
+  }
+};
+
+/**
+ * @constructor
+ */
+var Parser = function(lexer, $filter, options) {
+  this.lexer = lexer;
+  this.$filter = $filter;
+  this.options = options;
+  this.ast = new AST(this.lexer);
+  this.astCompiler = options.csp ? new ASTInterpreter(this.ast, $filter) :
+                                   new ASTCompiler(this.ast, $filter);
+};
+
+Parser.prototype = {
+  constructor: Parser,
+
+  parse: function(text) {
+    return this.astCompiler.compile(text, this.options.expensiveChecks);
+  }
+};
+
+var getterFnCacheDefault = createMap();
+var getterFnCacheExpensive = createMap();
+
+function isPossiblyDangerousMemberName(name) {
+  return name == 'constructor';
+}
+
+var objectValueOf = Object.prototype.valueOf;
+
+function getValueOf(value) {
+  return isFunction(value.valueOf) ? value.valueOf() : objectValueOf.call(value);
+}
+
+///////////////////////////////////
+
+/**
+ * @ngdoc service
+ * @name $parse
+ * @kind function
+ *
+ * @description
+ *
+ * Converts Angular {@link guide/expression expression} into a function.
+ *
+ * ```js
+ *   var getter = $parse('user.name');
+ *   var setter = getter.assign;
+ *   var context = {user:{name:'angular'}};
+ *   var locals = {user:{name:'local'}};
+ *
+ *   expect(getter(context)).toEqual('angular');
+ *   setter(context, 'newValue');
+ *   expect(context.user.name).toEqual('newValue');
+ *   expect(getter(context, locals)).toEqual('local');
+ * ```
+ *
+ *
+ * @param {string} expression String expression to compile.
+ * @returns {function(context, locals)} a function which represents the compiled expression:
+ *
+ *    * `context` – `{object}` – an object against which any expressions embedded in the strings
+ *      are evaluated against (typically a scope object).
+ *    * `locals` – `{object=}` – local variables context object, useful for overriding values in
+ *      `context`.
+ *
+ *    The returned function also has the following properties:
+ *      * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript
+ *        literal.
+ *      * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript
+ *        constant literals.
+ *      * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be
+ *        set to a function to change its value on the given context.
+ *
+ */
+
+
+/**
+ * @ngdoc provider
+ * @name $parseProvider
+ *
+ * @description
+ * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse}
+ *  service.
+ */
+function $ParseProvider() {
+  var cacheDefault = createMap();
+  var cacheExpensive = createMap();
+
+  this.$get = ['$filter', function($filter) {
+    var noUnsafeEval = csp().noUnsafeEval;
+    var $parseOptions = {
+          csp: noUnsafeEval,
+          expensiveChecks: false
+        },
+        $parseOptionsExpensive = {
+          csp: noUnsafeEval,
+          expensiveChecks: true
+        };
+
+    return function $parse(exp, interceptorFn, expensiveChecks) {
+      var parsedExpression, oneTime, cacheKey;
+
+      switch (typeof exp) {
+        case 'string':
+          exp = exp.trim();
+          cacheKey = exp;
+
+          var cache = (expensiveChecks ? cacheExpensive : cacheDefault);
+          parsedExpression = cache[cacheKey];
+
+          if (!parsedExpression) {
+            if (exp.charAt(0) === ':' && exp.charAt(1) === ':') {
+              oneTime = true;
+              exp = exp.substring(2);
+            }
+            var parseOptions = expensiveChecks ? $parseOptionsExpensive : $parseOptions;
+            var lexer = new Lexer(parseOptions);
+            var parser = new Parser(lexer, $filter, parseOptions);
+            parsedExpression = parser.parse(exp);
+            if (parsedExpression.constant) {
+              parsedExpression.$$watchDelegate = constantWatchDelegate;
+            } else if (oneTime) {
+              parsedExpression.$$watchDelegate = parsedExpression.literal ?
+                  oneTimeLiteralWatchDelegate : oneTimeWatchDelegate;
+            } else if (parsedExpression.inputs) {
+              parsedExpression.$$watchDelegate = inputsWatchDelegate;
+            }
+            cache[cacheKey] = parsedExpression;
+          }
+          return addInterceptor(parsedExpression, interceptorFn);
+
+        case 'function':
+          return addInterceptor(exp, interceptorFn);
+
+        default:
+          return noop;
+      }
+    };
+
+    function expressionInputDirtyCheck(newValue, oldValueOfValue) {
+
+      if (newValue == null || oldValueOfValue == null) { // null/undefined
+        return newValue === oldValueOfValue;
+      }
+
+      if (typeof newValue === 'object') {
+
+        // attempt to convert the value to a primitive type
+        // TODO(docs): add a note to docs that by implementing valueOf even objects and arrays can
+        //             be cheaply dirty-checked
+        newValue = getValueOf(newValue);
+
+        if (typeof newValue === 'object') {
+          // objects/arrays are not supported - deep-watching them would be too expensive
+          return false;
+        }
+
+        // fall-through to the primitive equality check
+      }
+
+      //Primitive or NaN
+      return newValue === oldValueOfValue || (newValue !== newValue && oldValueOfValue !== oldValueOfValue);
+    }
+
+    function inputsWatchDelegate(scope, listener, objectEquality, parsedExpression, prettyPrintExpression) {
+      var inputExpressions = parsedExpression.inputs;
+      var lastResult;
+
+      if (inputExpressions.length === 1) {
+        var oldInputValueOf = expressionInputDirtyCheck; // init to something unique so that equals check fails
+        inputExpressions = inputExpressions[0];
+        return scope.$watch(function expressionInputWatch(scope) {
+          var newInputValue = inputExpressions(scope);
+          if (!expressionInputDirtyCheck(newInputValue, oldInputValueOf)) {
+            lastResult = parsedExpression(scope, undefined, undefined, [newInputValue]);
+            oldInputValueOf = newInputValue && getValueOf(newInputValue);
+          }
+          return lastResult;
+        }, listener, objectEquality, prettyPrintExpression);
+      }
+
+      var oldInputValueOfValues = [];
+      var oldInputValues = [];
+      for (var i = 0, ii = inputExpressions.length; i < ii; i++) {
+        oldInputValueOfValues[i] = expressionInputDirtyCheck; // init to something unique so that equals check fails
+        oldInputValues[i] = null;
+      }
+
+      return scope.$watch(function expressionInputsWatch(scope) {
+        var changed = false;
+
+        for (var i = 0, ii = inputExpressions.length; i < ii; i++) {
+          var newInputValue = inputExpressions[i](scope);
+          if (changed || (changed = !expressionInputDirtyCheck(newInputValue, oldInputValueOfValues[i]))) {
+            oldInputValues[i] = newInputValue;
+            oldInputValueOfValues[i] = newInputValue && getValueOf(newInputValue);
+          }
+        }
+
+        if (changed) {
+          lastResult = parsedExpression(scope, undefined, undefined, oldInputValues);
+        }
+
+        return lastResult;
+      }, listener, objectEquality, prettyPrintExpression);
+    }
+
+    function oneTimeWatchDelegate(scope, listener, objectEquality, parsedExpression) {
+      var unwatch, lastValue;
+      return unwatch = scope.$watch(function oneTimeWatch(scope) {
+        return parsedExpression(scope);
+      }, function oneTimeListener(value, old, scope) {
+        lastValue = value;
+        if (isFunction(listener)) {
+          listener.apply(this, arguments);
+        }
+        if (isDefined(value)) {
+          scope.$$postDigest(function() {
+            if (isDefined(lastValue)) {
+              unwatch();
+            }
+          });
+        }
+      }, objectEquality);
+    }
+
+    function oneTimeLiteralWatchDelegate(scope, listener, objectEquality, parsedExpression) {
+      var unwatch, lastValue;
+      return unwatch = scope.$watch(function oneTimeWatch(scope) {
+        return parsedExpression(scope);
+      }, function oneTimeListener(value, old, scope) {
+        lastValue = value;
+        if (isFunction(listener)) {
+          listener.call(this, value, old, scope);
+        }
+        if (isAllDefined(value)) {
+          scope.$$postDigest(function() {
+            if (isAllDefined(lastValue)) unwatch();
+          });
+        }
+      }, objectEquality);
+
+      function isAllDefined(value) {
+        var allDefined = true;
+        forEach(value, function(val) {
+          if (!isDefined(val)) allDefined = false;
+        });
+        return allDefined;
+      }
+    }
+
+    function constantWatchDelegate(scope, listener, objectEquality, parsedExpression) {
+      var unwatch;
+      return unwatch = scope.$watch(function constantWatch(scope) {
+        return parsedExpression(scope);
+      }, function constantListener(value, old, scope) {
+        if (isFunction(listener)) {
+          listener.apply(this, arguments);
+        }
+        unwatch();
+      }, objectEquality);
+    }
+
+    function addInterceptor(parsedExpression, interceptorFn) {
+      if (!interceptorFn) return parsedExpression;
+      var watchDelegate = parsedExpression.$$watchDelegate;
+      var useInputs = false;
+
+      var regularWatch =
+          watchDelegate !== oneTimeLiteralWatchDelegate &&
+          watchDelegate !== oneTimeWatchDelegate;
+
+      var fn = regularWatch ? function regularInterceptedExpression(scope, locals, assign, inputs) {
+        var value = useInputs && inputs ? inputs[0] : parsedExpression(scope, locals, assign, inputs);
+        return interceptorFn(value, scope, locals);
+      } : function oneTimeInterceptedExpression(scope, locals, assign, inputs) {
+        var value = parsedExpression(scope, locals, assign, inputs);
+        var result = interceptorFn(value, scope, locals);
+        // we only return the interceptor's result if the
+        // initial value is defined (for bind-once)
+        return isDefined(value) ? result : value;
+      };
+
+      // Propagate $$watchDelegates other then inputsWatchDelegate
+      if (parsedExpression.$$watchDelegate &&
+          parsedExpression.$$watchDelegate !== inputsWatchDelegate) {
+        fn.$$watchDelegate = parsedExpression.$$watchDelegate;
+      } else if (!interceptorFn.$stateful) {
+        // If there is an interceptor, but no watchDelegate then treat the interceptor like
+        // we treat filters - it is assumed to be a pure function unless flagged with $stateful
+        fn.$$watchDelegate = inputsWatchDelegate;
+        useInputs = !parsedExpression.inputs;
+        fn.inputs = parsedExpression.inputs ? parsedExpression.inputs : [parsedExpression];
+      }
+
+      return fn;
+    }
+  }];
+}
+
+/**
+ * @ngdoc service
+ * @name $q
+ * @requires $rootScope
+ *
+ * @description
+ * A service that helps you run functions asynchronously, and use their return values (or exceptions)
+ * when they are done processing.
+ *
+ * This is an implementation of promises/deferred objects inspired by
+ * [Kris Kowal's Q](https://github.com/kriskowal/q).
+ *
+ * $q can be used in two fashions --- one which is more similar to Kris Kowal's Q or jQuery's Deferred
+ * implementations, and the other which resembles ES6 promises to some degree.
+ *
+ * # $q constructor
+ *
+ * The streamlined ES6 style promise is essentially just using $q as a constructor which takes a `resolver`
+ * function as the first argument. This is similar to the native Promise implementation from ES6 Harmony,
+ * see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).
+ *
+ * While the constructor-style use is supported, not all of the supporting methods from ES6 Harmony promises are
+ * available yet.
+ *
+ * It can be used like so:
+ *
+ * ```js
+ *   // for the purpose of this example let's assume that variables `$q` and `okToGreet`
+ *   // are available in the current lexical scope (they could have been injected or passed in).
+ *
+ *   function asyncGreet(name) {
+ *     // perform some asynchronous operation, resolve or reject the promise when appropriate.
+ *     return $q(function(resolve, reject) {
+ *       setTimeout(function() {
+ *         if (okToGreet(name)) {
+ *           resolve('Hello, ' + name + '!');
+ *         } else {
+ *           reject('Greeting ' + name + ' is not allowed.');
+ *         }
+ *       }, 1000);
+ *     });
+ *   }
+ *
+ *   var promise = asyncGreet('Robin Hood');
+ *   promise.then(function(greeting) {
+ *     alert('Success: ' + greeting);
+ *   }, function(reason) {
+ *     alert('Failed: ' + reason);
+ *   });
+ * ```
+ *
+ * Note: progress/notify callbacks are not currently supported via the ES6-style interface.
+ *
+ * Note: unlike ES6 behaviour, an exception thrown in the constructor function will NOT implicitly reject the promise.
+ *
+ * However, the more traditional CommonJS-style usage is still available, and documented below.
+ *
+ * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an
+ * interface for interacting with an object that represents the result of an action that is
+ * performed asynchronously, and may or may not be finished at any given point in time.
+ *
+ * From the perspective of dealing with error handling, deferred and promise APIs are to
+ * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming.
+ *
+ * ```js
+ *   // for the purpose of this example let's assume that variables `$q` and `okToGreet`
+ *   // are available in the current lexical scope (they could have been injected or passed in).
+ *
+ *   function asyncGreet(name) {
+ *     var deferred = $q.defer();
+ *
+ *     setTimeout(function() {
+ *       deferred.notify('About to greet ' + name + '.');
+ *
+ *       if (okToGreet(name)) {
+ *         deferred.resolve('Hello, ' + name + '!');
+ *       } else {
+ *         deferred.reject('Greeting ' + name + ' is not allowed.');
+ *       }
+ *     }, 1000);
+ *
+ *     return deferred.promise;
+ *   }
+ *
+ *   var promise = asyncGreet('Robin Hood');
+ *   promise.then(function(greeting) {
+ *     alert('Success: ' + greeting);
+ *   }, function(reason) {
+ *     alert('Failed: ' + reason);
+ *   }, function(update) {
+ *     alert('Got notification: ' + update);
+ *   });
+ * ```
+ *
+ * At first it might not be obvious why this extra complexity is worth the trouble. The payoff
+ * comes in the way of guarantees that promise and deferred APIs make, see
+ * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md.
+ *
+ * Additionally the promise api allows for composition that is very hard to do with the
+ * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach.
+ * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the
+ * section on serial or parallel joining of promises.
+ *
+ * # The Deferred API
+ *
+ * A new instance of deferred is constructed by calling `$q.defer()`.
+ *
+ * The purpose of the deferred object is to expose the associated Promise instance as well as APIs
+ * that can be used for signaling the successful or unsuccessful completion, as well as the status
+ * of the task.
+ *
+ * **Methods**
+ *
+ * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection
+ *   constructed via `$q.reject`, the promise will be rejected instead.
+ * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to
+ *   resolving it with a rejection constructed via `$q.reject`.
+ * - `notify(value)` - provides updates on the status of the promise's execution. This may be called
+ *   multiple times before the promise is either resolved or rejected.
+ *
+ * **Properties**
+ *
+ * - promise – `{Promise}` – promise object associated with this deferred.
+ *
+ *
+ * # The Promise API
+ *
+ * A new promise instance is created when a deferred instance is created and can be retrieved by
+ * calling `deferred.promise`.
+ *
+ * The purpose of the promise object is to allow for interested parties to get access to the result
+ * of the deferred task when it completes.
+ *
+ * **Methods**
+ *
+ * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or
+ *   will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously
+ *   as soon as the result is available. The callbacks are called with a single argument: the result
+ *   or rejection reason. Additionally, the notify callback may be called zero or more times to
+ *   provide a progress indication, before the promise is resolved or rejected.
+ *
+ *   This method *returns a new promise* which is resolved or rejected via the return value of the
+ *   `successCallback`, `errorCallback` (unless that value is a promise, in which case it is resolved
+ *   with the value which is resolved in that promise using
+ *   [promise chaining](http://www.html5rocks.com/en/tutorials/es6/promises/#toc-promises-queues)).
+ *   It also notifies via the return value of the `notifyCallback` method. The promise cannot be
+ *   resolved or rejected from the notifyCallback method.
+ *
+ * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)`
+ *
+ * - `finally(callback, notifyCallback)` – allows you to observe either the fulfillment or rejection of a promise,
+ *   but to do so without modifying the final value. This is useful to release resources or do some
+ *   clean-up that needs to be done whether the promise was rejected or resolved. See the [full
+ *   specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for
+ *   more information.
+ *
+ * # Chaining promises
+ *
+ * Because calling the `then` method of a promise returns a new derived promise, it is easily
+ * possible to create a chain of promises:
+ *
+ * ```js
+ *   promiseB = promiseA.then(function(result) {
+ *     return result + 1;
+ *   });
+ *
+ *   // promiseB will be resolved immediately after promiseA is resolved and its value
+ *   // will be the result of promiseA incremented by 1
+ * ```
+ *
+ * It is possible to create chains of any length and since a promise can be resolved with another
+ * promise (which will defer its resolution further), it is possible to pause/defer resolution of
+ * the promises at any point in the chain. This makes it possible to implement powerful APIs like
+ * $http's response interceptors.
+ *
+ *
+ * # Differences between Kris Kowal's Q and $q
+ *
+ *  There are two main differences:
+ *
+ * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation
+ *   mechanism in angular, which means faster propagation of resolution or rejection into your
+ *   models and avoiding unnecessary browser repaints, which would result in flickering UI.
+ * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains
+ *   all the important functionality needed for common async tasks.
+ *
+ *  # Testing
+ *
+ *  ```js
+ *    it('should simulate promise', inject(function($q, $rootScope) {
+ *      var deferred = $q.defer();
+ *      var promise = deferred.promise;
+ *      var resolvedValue;
+ *
+ *      promise.then(function(value) { resolvedValue = value; });
+ *      expect(resolvedValue).toBeUndefined();
+ *
+ *      // Simulate resolving of promise
+ *      deferred.resolve(123);
+ *      // Note that the 'then' function does not get called synchronously.
+ *      // This is because we want the promise API to always be async, whether or not
+ *      // it got called synchronously or asynchronously.
+ *      expect(resolvedValue).toBeUndefined();
+ *
+ *      // Propagate promise resolution to 'then' functions using $apply().
+ *      $rootScope.$apply();
+ *      expect(resolvedValue).toEqual(123);
+ *    }));
+ *  ```
+ *
+ * @param {function(function, function)} resolver Function which is responsible for resolving or
+ *   rejecting the newly created promise. The first parameter is a function which resolves the
+ *   promise, the second parameter is a function which rejects the promise.
+ *
+ * @returns {Promise} The newly created promise.
+ */
+function $QProvider() {
+
+  this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) {
+    return qFactory(function(callback) {
+      $rootScope.$evalAsync(callback);
+    }, $exceptionHandler);
+  }];
+}
+
+function $$QProvider() {
+  this.$get = ['$browser', '$exceptionHandler', function($browser, $exceptionHandler) {
+    return qFactory(function(callback) {
+      $browser.defer(callback);
+    }, $exceptionHandler);
+  }];
+}
+
+/**
+ * Constructs a promise manager.
+ *
+ * @param {function(function)} nextTick Function for executing functions in the next turn.
+ * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for
+ *     debugging purposes.
+ * @returns {object} Promise manager.
+ */
+function qFactory(nextTick, exceptionHandler) {
+  var $qMinErr = minErr('$q', TypeError);
+  function callOnce(self, resolveFn, rejectFn) {
+    var called = false;
+    function wrap(fn) {
+      return function(value) {
+        if (called) return;
+        called = true;
+        fn.call(self, value);
+      };
+    }
+
+    return [wrap(resolveFn), wrap(rejectFn)];
+  }
+
+  /**
+   * @ngdoc method
+   * @name ng.$q#defer
+   * @kind function
+   *
+   * @description
+   * Creates a `Deferred` object which represents a task which will finish in the future.
+   *
+   * @returns {Deferred} Returns a new instance of deferred.
+   */
+  var defer = function() {
+    return new Deferred();
+  };
+
+  function Promise() {
+    this.$$state = { status: 0 };
+  }
+
+  extend(Promise.prototype, {
+    then: function(onFulfilled, onRejected, progressBack) {
+      if (isUndefined(onFulfilled) && isUndefined(onRejected) && isUndefined(progressBack)) {
+        return this;
+      }
+      var result = new Deferred();
+
+      this.$$state.pending = this.$$state.pending || [];
+      this.$$state.pending.push([result, onFulfilled, onRejected, progressBack]);
+      if (this.$$state.status > 0) scheduleProcessQueue(this.$$state);
+
+      return result.promise;
+    },
+
+    "catch": function(callback) {
+      return this.then(null, callback);
+    },
+
+    "finally": function(callback, progressBack) {
+      return this.then(function(value) {
+        return handleCallback(value, true, callback);
+      }, function(error) {
+        return handleCallback(error, false, callback);
+      }, progressBack);
+    }
+  });
+
+  //Faster, more basic than angular.bind http://jsperf.com/angular-bind-vs-custom-vs-native
+  function simpleBind(context, fn) {
+    return function(value) {
+      fn.call(context, value);
+    };
+  }
+
+  function processQueue(state) {
+    var fn, deferred, pending;
+
+    pending = state.pending;
+    state.processScheduled = false;
+    state.pending = undefined;
+    for (var i = 0, ii = pending.length; i < ii; ++i) {
+      deferred = pending[i][0];
+      fn = pending[i][state.status];
+      try {
+        if (isFunction(fn)) {
+          deferred.resolve(fn(state.value));
+        } else if (state.status === 1) {
+          deferred.resolve(state.value);
+        } else {
+          deferred.reject(state.value);
+        }
+      } catch (e) {
+        deferred.reject(e);
+        exceptionHandler(e);
+      }
+    }
+  }
+
+  function scheduleProcessQueue(state) {
+    if (state.processScheduled || !state.pending) return;
+    state.processScheduled = true;
+    nextTick(function() { processQueue(state); });
+  }
+
+  function Deferred() {
+    this.promise = new Promise();
+    //Necessary to support unbound execution :/
+    this.resolve = simpleBind(this, this.resolve);
+    this.reject = simpleBind(this, this.reject);
+    this.notify = simpleBind(this, this.notify);
+  }
+
+  extend(Deferred.prototype, {
+    resolve: function(val) {
+      if (this.promise.$$state.status) return;
+      if (val === this.promise) {
+        this.$$reject($qMinErr(
+          'qcycle',
+          "Expected promise to be resolved with value other than itself '{0}'",
+          val));
+      } else {
+        this.$$resolve(val);
+      }
+
+    },
+
+    $$resolve: function(val) {
+      var then, fns;
+
+      fns = callOnce(this, this.$$resolve, this.$$reject);
+      try {
+        if ((isObject(val) || isFunction(val))) then = val && val.then;
+        if (isFunction(then)) {
+          this.promise.$$state.status = -1;
+          then.call(val, fns[0], fns[1], this.notify);
+        } else {
+          this.promise.$$state.value = val;
+          this.promise.$$state.status = 1;
+          scheduleProcessQueue(this.promise.$$state);
+        }
+      } catch (e) {
+        fns[1](e);
+        exceptionHandler(e);
+      }
+    },
+
+    reject: function(reason) {
+      if (this.promise.$$state.status) return;
+      this.$$reject(reason);
+    },
+
+    $$reject: function(reason) {
+      this.promise.$$state.value = reason;
+      this.promise.$$state.status = 2;
+      scheduleProcessQueue(this.promise.$$state);
+    },
+
+    notify: function(progress) {
+      var callbacks = this.promise.$$state.pending;
+
+      if ((this.promise.$$state.status <= 0) && callbacks && callbacks.length) {
+        nextTick(function() {
+          var callback, result;
+          for (var i = 0, ii = callbacks.length; i < ii; i++) {
+            result = callbacks[i][0];
+            callback = callbacks[i][3];
+            try {
+              result.notify(isFunction(callback) ? callback(progress) : progress);
+            } catch (e) {
+              exceptionHandler(e);
+            }
+          }
+        });
+      }
+    }
+  });
+
+  /**
+   * @ngdoc method
+   * @name $q#reject
+   * @kind function
+   *
+   * @description
+   * Creates a promise that is resolved as rejected with the specified `reason`. This api should be
+   * used to forward rejection in a chain of promises. If you are dealing with the last promise in
+   * a promise chain, you don't need to worry about it.
+   *
+   * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of
+   * `reject` as the `throw` keyword in JavaScript. This also means that if you "catch" an error via
+   * a promise error callback and you want to forward the error to the promise derived from the
+   * current promise, you have to "rethrow" the error by returning a rejection constructed via
+   * `reject`.
+   *
+   * ```js
+   *   promiseB = promiseA.then(function(result) {
+   *     // success: do something and resolve promiseB
+   *     //          with the old or a new result
+   *     return result;
+   *   }, function(reason) {
+   *     // error: handle the error if possible and
+   *     //        resolve promiseB with newPromiseOrValue,
+   *     //        otherwise forward the rejection to promiseB
+   *     if (canHandle(reason)) {
+   *      // handle the error and recover
+   *      return newPromiseOrValue;
+   *     }
+   *     return $q.reject(reason);
+   *   });
+   * ```
+   *
+   * @param {*} reason Constant, message, exception or an object representing the rejection reason.
+   * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`.
+   */
+  var reject = function(reason) {
+    var result = new Deferred();
+    result.reject(reason);
+    return result.promise;
+  };
+
+  var makePromise = function makePromise(value, resolved) {
+    var result = new Deferred();
+    if (resolved) {
+      result.resolve(value);
+    } else {
+      result.reject(value);
+    }
+    return result.promise;
+  };
+
+  var handleCallback = function handleCallback(value, isResolved, callback) {
+    var callbackOutput = null;
+    try {
+      if (isFunction(callback)) callbackOutput = callback();
+    } catch (e) {
+      return makePromise(e, false);
+    }
+    if (isPromiseLike(callbackOutput)) {
+      return callbackOutput.then(function() {
+        return makePromise(value, isResolved);
+      }, function(error) {
+        return makePromise(error, false);
+      });
+    } else {
+      return makePromise(value, isResolved);
+    }
+  };
+
+  /**
+   * @ngdoc method
+   * @name $q#when
+   * @kind function
+   *
+   * @description
+   * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise.
+   * This is useful when you are dealing with an object that might or might not be a promise, or if
+   * the promise comes from a source that can't be trusted.
+   *
+   * @param {*} value Value or a promise
+   * @param {Function=} successCallback
+   * @param {Function=} errorCallback
+   * @param {Function=} progressCallback
+   * @returns {Promise} Returns a promise of the passed value or promise
+   */
+
+
+  var when = function(value, callback, errback, progressBack) {
+    var result = new Deferred();
+    result.resolve(value);
+    return result.promise.then(callback, errback, progressBack);
+  };
+
+  /**
+   * @ngdoc method
+   * @name $q#resolve
+   * @kind function
+   *
+   * @description
+   * Alias of {@link ng.$q#when when} to maintain naming consistency with ES6.
+   *
+   * @param {*} value Value or a promise
+   * @param {Function=} successCallback
+   * @param {Function=} errorCallback
+   * @param {Function=} progressCallback
+   * @returns {Promise} Returns a promise of the passed value or promise
+   */
+  var resolve = when;
+
+  /**
+   * @ngdoc method
+   * @name $q#all
+   * @kind function
+   *
+   * @description
+   * Combines multiple promises into a single promise that is resolved when all of the input
+   * promises are resolved.
+   *
+   * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises.
+   * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values,
+   *   each value corresponding to the promise at the same index/key in the `promises` array/hash.
+   *   If any of the promises is resolved with a rejection, this resulting promise will be rejected
+   *   with the same rejection value.
+   */
+
+  function all(promises) {
+    var deferred = new Deferred(),
+        counter = 0,
+        results = isArray(promises) ? [] : {};
+
+    forEach(promises, function(promise, key) {
+      counter++;
+      when(promise).then(function(value) {
+        if (results.hasOwnProperty(key)) return;
+        results[key] = value;
+        if (!(--counter)) deferred.resolve(results);
+      }, function(reason) {
+        if (results.hasOwnProperty(key)) return;
+        deferred.reject(reason);
+      });
+    });
+
+    if (counter === 0) {
+      deferred.resolve(results);
+    }
+
+    return deferred.promise;
+  }
+
+  var $Q = function Q(resolver) {
+    if (!isFunction(resolver)) {
+      throw $qMinErr('norslvr', "Expected resolverFn, got '{0}'", resolver);
+    }
+
+    if (!(this instanceof Q)) {
+      // More useful when $Q is the Promise itself.
+      return new Q(resolver);
+    }
+
+    var deferred = new Deferred();
+
+    function resolveFn(value) {
+      deferred.resolve(value);
+    }
+
+    function rejectFn(reason) {
+      deferred.reject(reason);
+    }
+
+    resolver(resolveFn, rejectFn);
+
+    return deferred.promise;
+  };
+
+  $Q.defer = defer;
+  $Q.reject = reject;
+  $Q.when = when;
+  $Q.resolve = resolve;
+  $Q.all = all;
+
+  return $Q;
+}
+
+function $$RAFProvider() { //rAF
+  this.$get = ['$window', '$timeout', function($window, $timeout) {
+    var requestAnimationFrame = $window.requestAnimationFrame ||
+                                $window.webkitRequestAnimationFrame;
+
+    var cancelAnimationFrame = $window.cancelAnimationFrame ||
+                               $window.webkitCancelAnimationFrame ||
+                               $window.webkitCancelRequestAnimationFrame;
+
+    var rafSupported = !!requestAnimationFrame;
+    var raf = rafSupported
+      ? function(fn) {
+          var id = requestAnimationFrame(fn);
+          return function() {
+            cancelAnimationFrame(id);
+          };
+        }
+      : function(fn) {
+          var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666
+          return function() {
+            $timeout.cancel(timer);
+          };
+        };
+
+    raf.supported = rafSupported;
+
+    return raf;
+  }];
+}
+
+/**
+ * DESIGN NOTES
+ *
+ * The design decisions behind the scope are heavily favored for speed and memory consumption.
+ *
+ * The typical use of scope is to watch the expressions, which most of the time return the same
+ * value as last time so we optimize the operation.
+ *
+ * Closures construction is expensive in terms of speed as well as memory:
+ *   - No closures, instead use prototypical inheritance for API
+ *   - Internal state needs to be stored on scope directly, which means that private state is
+ *     exposed as $$____ properties
+ *
+ * Loop operations are optimized by using while(count--) { ... }
+ *   - This means that in order to keep the same order of execution as addition we have to add
+ *     items to the array at the beginning (unshift) instead of at the end (push)
+ *
+ * Child scopes are created and removed often
+ *   - Using an array would be slow since inserts in the middle are expensive; so we use linked lists
+ *
+ * There are fewer watches than observers. This is why you don't want the observer to be implemented
+ * in the same way as watch. Watch requires return of the initialization function which is expensive
+ * to construct.
+ */
+
+
+/**
+ * @ngdoc provider
+ * @name $rootScopeProvider
+ * @description
+ *
+ * Provider for the $rootScope service.
+ */
+
+/**
+ * @ngdoc method
+ * @name $rootScopeProvider#digestTtl
+ * @description
+ *
+ * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and
+ * assuming that the model is unstable.
+ *
+ * The current default is 10 iterations.
+ *
+ * In complex applications it's possible that the dependencies between `$watch`s will result in
+ * several digest iterations. However if an application needs more than the default 10 digest
+ * iterations for its model to stabilize then you should investigate what is causing the model to
+ * continuously change during the digest.
+ *
+ * Increasing the TTL could have performance implications, so you should not change it without
+ * proper justification.
+ *
+ * @param {number} limit The number of digest iterations.
+ */
+
+
+/**
+ * @ngdoc service
+ * @name $rootScope
+ * @description
+ *
+ * Every application has a single root {@link ng.$rootScope.Scope scope}.
+ * All other scopes are descendant scopes of the root scope. Scopes provide separation
+ * between the model and the view, via a mechanism for watching the model for changes.
+ * They also provide event emission/broadcast and subscription facility. See the
+ * {@link guide/scope developer guide on scopes}.
+ */
+function $RootScopeProvider() {
+  var TTL = 10;
+  var $rootScopeMinErr = minErr('$rootScope');
+  var lastDirtyWatch = null;
+  var applyAsyncId = null;
+
+  this.digestTtl = function(value) {
+    if (arguments.length) {
+      TTL = value;
+    }
+    return TTL;
+  };
+
+  function createChildScopeClass(parent) {
+    function ChildScope() {
+      this.$$watchers = this.$$nextSibling =
+          this.$$childHead = this.$$childTail = null;
+      this.$$listeners = {};
+      this.$$listenerCount = {};
+      this.$$watchersCount = 0;
+      this.$id = nextUid();
+      this.$$ChildScope = null;
+    }
+    ChildScope.prototype = parent;
+    return ChildScope;
+  }
+
+  this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser',
+      function($injector, $exceptionHandler, $parse, $browser) {
+
+    function destroyChildScope($event) {
+        $event.currentScope.$$destroyed = true;
+    }
+
+    function cleanUpScope($scope) {
+
+      if (msie === 9) {
+        // There is a memory leak in IE9 if all child scopes are not disconnected
+        // completely when a scope is destroyed. So this code will recurse up through
+        // all this scopes children
+        //
+        // See issue https://github.com/angular/angular.js/issues/10706
+        $scope.$$childHead && cleanUpScope($scope.$$childHead);
+        $scope.$$nextSibling && cleanUpScope($scope.$$nextSibling);
+      }
+
+      // The code below works around IE9 and V8's memory leaks
+      //
+      // See:
+      // - https://code.google.com/p/v8/issues/detail?id=2073#c26
+      // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909
+      // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451
+
+      $scope.$parent = $scope.$$nextSibling = $scope.$$prevSibling = $scope.$$childHead =
+          $scope.$$childTail = $scope.$root = $scope.$$watchers = null;
+    }
+
+    /**
+     * @ngdoc type
+     * @name $rootScope.Scope
+     *
+     * @description
+     * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the
+     * {@link auto.$injector $injector}. Child scopes are created using the
+     * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when
+     * compiled HTML template is executed.) See also the {@link guide/scope Scopes guide} for
+     * an in-depth introduction and usage examples.
+     *
+     *
+     * # Inheritance
+     * A scope can inherit from a parent scope, as in this example:
+     * ```js
+         var parent = $rootScope;
+         var child = parent.$new();
+
+         parent.salutation = "Hello";
+         expect(child.salutation).toEqual('Hello');
+
+         child.salutation = "Welcome";
+         expect(child.salutation).toEqual('Welcome');
+         expect(parent.salutation).toEqual('Hello');
+     * ```
+     *
+     * When interacting with `Scope` in tests, additional helper methods are available on the
+     * instances of `Scope` type. See {@link ngMock.$rootScope.Scope ngMock Scope} for additional
+     * details.
+     *
+     *
+     * @param {Object.<string, function()>=} providers Map of service factory which need to be
+     *                                       provided for the current scope. Defaults to {@link ng}.
+     * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should
+     *                              append/override services provided by `providers`. This is handy
+     *                              when unit-testing and having the need to override a default
+     *                              service.
+     * @returns {Object} Newly created scope.
+     *
+     */
+    function Scope() {
+      this.$id = nextUid();
+      this.$$phase = this.$parent = this.$$watchers =
+                     this.$$nextSibling = this.$$prevSibling =
+                     this.$$childHead = this.$$childTail = null;
+      this.$root = this;
+      this.$$destroyed = false;
+      this.$$listeners = {};
+      this.$$listenerCount = {};
+      this.$$watchersCount = 0;
+      this.$$isolateBindings = null;
+    }
+
+    /**
+     * @ngdoc property
+     * @name $rootScope.Scope#$id
+     *
+     * @description
+     * Unique scope ID (monotonically increasing) useful for debugging.
+     */
+
+     /**
+      * @ngdoc property
+      * @name $rootScope.Scope#$parent
+      *
+      * @description
+      * Reference to the parent scope.
+      */
+
+      /**
+       * @ngdoc property
+       * @name $rootScope.Scope#$root
+       *
+       * @description
+       * Reference to the root scope.
+       */
+
+    Scope.prototype = {
+      constructor: Scope,
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$new
+       * @kind function
+       *
+       * @description
+       * Creates a new child {@link ng.$rootScope.Scope scope}.
+       *
+       * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} event.
+       * The scope can be removed from the scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}.
+       *
+       * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is
+       * desired for the scope and its child scopes to be permanently detached from the parent and
+       * thus stop participating in model change detection and listener notification by invoking.
+       *
+       * @param {boolean} isolate If true, then the scope does not prototypically inherit from the
+       *         parent scope. The scope is isolated, as it can not see parent scope properties.
+       *         When creating widgets, it is useful for the widget to not accidentally read parent
+       *         state.
+       *
+       * @param {Scope} [parent=this] The {@link ng.$rootScope.Scope `Scope`} that will be the `$parent`
+       *                              of the newly created scope. Defaults to `this` scope if not provided.
+       *                              This is used when creating a transclude scope to correctly place it
+       *                              in the scope hierarchy while maintaining the correct prototypical
+       *                              inheritance.
+       *
+       * @returns {Object} The newly created child scope.
+       *
+       */
+      $new: function(isolate, parent) {
+        var child;
+
+        parent = parent || this;
+
+        if (isolate) {
+          child = new Scope();
+          child.$root = this.$root;
+        } else {
+          // Only create a child scope class if somebody asks for one,
+          // but cache it to allow the VM to optimize lookups.
+          if (!this.$$ChildScope) {
+            this.$$ChildScope = createChildScopeClass(this);
+          }
+          child = new this.$$ChildScope();
+        }
+        child.$parent = parent;
+        child.$$prevSibling = parent.$$childTail;
+        if (parent.$$childHead) {
+          parent.$$childTail.$$nextSibling = child;
+          parent.$$childTail = child;
+        } else {
+          parent.$$childHead = parent.$$childTail = child;
+        }
+
+        // When the new scope is not isolated or we inherit from `this`, and
+        // the parent scope is destroyed, the property `$$destroyed` is inherited
+        // prototypically. In all other cases, this property needs to be set
+        // when the parent scope is destroyed.
+        // The listener needs to be added after the parent is set
+        if (isolate || parent != this) child.$on('$destroy', destroyChildScope);
+
+        return child;
+      },
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$watch
+       * @kind function
+       *
+       * @description
+       * Registers a `listener` callback to be executed whenever the `watchExpression` changes.
+       *
+       * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest
+       *   $digest()} and should return the value that will be watched. (`watchExpression` should not change
+       *   its value when executed multiple times with the same input because it may be executed multiple
+       *   times by {@link ng.$rootScope.Scope#$digest $digest()}. That is, `watchExpression` should be
+       *   [idempotent](http://en.wikipedia.org/wiki/Idempotence).
+       * - The `listener` is called only when the value from the current `watchExpression` and the
+       *   previous call to `watchExpression` are not equal (with the exception of the initial run,
+       *   see below). Inequality is determined according to reference inequality,
+       *   [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators)
+       *    via the `!==` Javascript operator, unless `objectEquality == true`
+       *   (see next point)
+       * - When `objectEquality == true`, inequality of the `watchExpression` is determined
+       *   according to the {@link angular.equals} function. To save the value of the object for
+       *   later comparison, the {@link angular.copy} function is used. This therefore means that
+       *   watching complex objects will have adverse memory and performance implications.
+       * - The watch `listener` may change the model, which may trigger other `listener`s to fire.
+       *   This is achieved by rerunning the watchers until no changes are detected. The rerun
+       *   iteration limit is 10 to prevent an infinite loop deadlock.
+       *
+       *
+       * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called,
+       * you can register a `watchExpression` function with no `listener`. (Be prepared for
+       * multiple calls to your `watchExpression` because it will execute multiple times in a
+       * single {@link ng.$rootScope.Scope#$digest $digest} cycle if a change is detected.)
+       *
+       * After a watcher is registered with the scope, the `listener` fn is called asynchronously
+       * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the
+       * watcher. In rare cases, this is undesirable because the listener is called when the result
+       * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you
+       * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the
+       * listener was called due to initialization.
+       *
+       *
+       *
+       * # Example
+       * ```js
+           // let's assume that scope was dependency injected as the $rootScope
+           var scope = $rootScope;
+           scope.name = 'misko';
+           scope.counter = 0;
+
+           expect(scope.counter).toEqual(0);
+           scope.$watch('name', function(newValue, oldValue) {
+             scope.counter = scope.counter + 1;
+           });
+           expect(scope.counter).toEqual(0);
+
+           scope.$digest();
+           // the listener is always called during the first $digest loop after it was registered
+           expect(scope.counter).toEqual(1);
+
+           scope.$digest();
+           // but now it will not be called unless the value changes
+           expect(scope.counter).toEqual(1);
+
+           scope.name = 'adam';
+           scope.$digest();
+           expect(scope.counter).toEqual(2);
+
+
+
+           // Using a function as a watchExpression
+           var food;
+           scope.foodCounter = 0;
+           expect(scope.foodCounter).toEqual(0);
+           scope.$watch(
+             // This function returns the value being watched. It is called for each turn of the $digest loop
+             function() { return food; },
+             // This is the change listener, called when the value returned from the above function changes
+             function(newValue, oldValue) {
+               if ( newValue !== oldValue ) {
+                 // Only increment the counter if the value changed
+                 scope.foodCounter = scope.foodCounter + 1;
+               }
+             }
+           );
+           // No digest has been run so the counter will be zero
+           expect(scope.foodCounter).toEqual(0);
+
+           // Run the digest but since food has not changed count will still be zero
+           scope.$digest();
+           expect(scope.foodCounter).toEqual(0);
+
+           // Update food and run digest.  Now the counter will increment
+           food = 'cheeseburger';
+           scope.$digest();
+           expect(scope.foodCounter).toEqual(1);
+
+       * ```
+       *
+       *
+       *
+       * @param {(function()|string)} watchExpression Expression that is evaluated on each
+       *    {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers
+       *    a call to the `listener`.
+       *
+       *    - `string`: Evaluated as {@link guide/expression expression}
+       *    - `function(scope)`: called with current `scope` as a parameter.
+       * @param {function(newVal, oldVal, scope)} listener Callback called whenever the value
+       *    of `watchExpression` changes.
+       *
+       *    - `newVal` contains the current value of the `watchExpression`
+       *    - `oldVal` contains the previous value of the `watchExpression`
+       *    - `scope` refers to the current scope
+       * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of
+       *     comparing for reference equality.
+       * @returns {function()} Returns a deregistration function for this listener.
+       */
+      $watch: function(watchExp, listener, objectEquality, prettyPrintExpression) {
+        var get = $parse(watchExp);
+
+        if (get.$$watchDelegate) {
+          return get.$$watchDelegate(this, listener, objectEquality, get, watchExp);
+        }
+        var scope = this,
+            array = scope.$$watchers,
+            watcher = {
+              fn: listener,
+              last: initWatchVal,
+              get: get,
+              exp: prettyPrintExpression || watchExp,
+              eq: !!objectEquality
+            };
+
+        lastDirtyWatch = null;
+
+        if (!isFunction(listener)) {
+          watcher.fn = noop;
+        }
+
+        if (!array) {
+          array = scope.$$watchers = [];
+        }
+        // we use unshift since we use a while loop in $digest for speed.
+        // the while loop reads in reverse order.
+        array.unshift(watcher);
+        incrementWatchersCount(this, 1);
+
+        return function deregisterWatch() {
+          if (arrayRemove(array, watcher) >= 0) {
+            incrementWatchersCount(scope, -1);
+          }
+          lastDirtyWatch = null;
+        };
+      },
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$watchGroup
+       * @kind function
+       *
+       * @description
+       * A variant of {@link ng.$rootScope.Scope#$watch $watch()} where it watches an array of `watchExpressions`.
+       * If any one expression in the collection changes the `listener` is executed.
+       *
+       * - The items in the `watchExpressions` array are observed via standard $watch operation and are examined on every
+       *   call to $digest() to see if any items changes.
+       * - The `listener` is called whenever any expression in the `watchExpressions` array changes.
+       *
+       * @param {Array.<string|Function(scope)>} watchExpressions Array of expressions that will be individually
+       * watched using {@link ng.$rootScope.Scope#$watch $watch()}
+       *
+       * @param {function(newValues, oldValues, scope)} listener Callback called whenever the return value of any
+       *    expression in `watchExpressions` changes
+       *    The `newValues` array contains the current values of the `watchExpressions`, with the indexes matching
+       *    those of `watchExpression`
+       *    and the `oldValues` array contains the previous values of the `watchExpressions`, with the indexes matching
+       *    those of `watchExpression`
+       *    The `scope` refers to the current scope.
+       * @returns {function()} Returns a de-registration function for all listeners.
+       */
+      $watchGroup: function(watchExpressions, listener) {
+        var oldValues = new Array(watchExpressions.length);
+        var newValues = new Array(watchExpressions.length);
+        var deregisterFns = [];
+        var self = this;
+        var changeReactionScheduled = false;
+        var firstRun = true;
+
+        if (!watchExpressions.length) {
+          // No expressions means we call the listener ASAP
+          var shouldCall = true;
+          self.$evalAsync(function() {
+            if (shouldCall) listener(newValues, newValues, self);
+          });
+          return function deregisterWatchGroup() {
+            shouldCall = false;
+          };
+        }
+
+        if (watchExpressions.length === 1) {
+          // Special case size of one
+          return this.$watch(watchExpressions[0], function watchGroupAction(value, oldValue, scope) {
+            newValues[0] = value;
+            oldValues[0] = oldValue;
+            listener(newValues, (value === oldValue) ? newValues : oldValues, scope);
+          });
+        }
+
+        forEach(watchExpressions, function(expr, i) {
+          var unwatchFn = self.$watch(expr, function watchGroupSubAction(value, oldValue) {
+            newValues[i] = value;
+            oldValues[i] = oldValue;
+            if (!changeReactionScheduled) {
+              changeReactionScheduled = true;
+              self.$evalAsync(watchGroupAction);
+            }
+          });
+          deregisterFns.push(unwatchFn);
+        });
+
+        function watchGroupAction() {
+          changeReactionScheduled = false;
+
+          if (firstRun) {
+            firstRun = false;
+            listener(newValues, newValues, self);
+          } else {
+            listener(newValues, oldValues, self);
+          }
+        }
+
+        return function deregisterWatchGroup() {
+          while (deregisterFns.length) {
+            deregisterFns.shift()();
+          }
+        };
+      },
+
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$watchCollection
+       * @kind function
+       *
+       * @description
+       * Shallow watches the properties of an object and fires whenever any of the properties change
+       * (for arrays, this implies watching the array items; for object maps, this implies watching
+       * the properties). If a change is detected, the `listener` callback is fired.
+       *
+       * - The `obj` collection is observed via standard $watch operation and is examined on every
+       *   call to $digest() to see if any items have been added, removed, or moved.
+       * - The `listener` is called whenever anything within the `obj` has changed. Examples include
+       *   adding, removing, and moving items belonging to an object or array.
+       *
+       *
+       * # Example
+       * ```js
+          $scope.names = ['igor', 'matias', 'misko', 'james'];
+          $scope.dataCount = 4;
+
+          $scope.$watchCollection('names', function(newNames, oldNames) {
+            $scope.dataCount = newNames.length;
+          });
+
+          expect($scope.dataCount).toEqual(4);
+          $scope.$digest();
+
+          //still at 4 ... no changes
+          expect($scope.dataCount).toEqual(4);
+
+          $scope.names.pop();
+          $scope.$digest();
+
+          //now there's been a change
+          expect($scope.dataCount).toEqual(3);
+       * ```
+       *
+       *
+       * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The
+       *    expression value should evaluate to an object or an array which is observed on each
+       *    {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the
+       *    collection will trigger a call to the `listener`.
+       *
+       * @param {function(newCollection, oldCollection, scope)} listener a callback function called
+       *    when a change is detected.
+       *    - The `newCollection` object is the newly modified data obtained from the `obj` expression
+       *    - The `oldCollection` object is a copy of the former collection data.
+       *      Due to performance considerations, the`oldCollection` value is computed only if the
+       *      `listener` function declares two or more arguments.
+       *    - The `scope` argument refers to the current scope.
+       *
+       * @returns {function()} Returns a de-registration function for this listener. When the
+       *    de-registration function is executed, the internal watch operation is terminated.
+       */
+      $watchCollection: function(obj, listener) {
+        $watchCollectionInterceptor.$stateful = true;
+
+        var self = this;
+        // the current value, updated on each dirty-check run
+        var newValue;
+        // a shallow copy of the newValue from the last dirty-check run,
+        // updated to match newValue during dirty-check run
+        var oldValue;
+        // a shallow copy of the newValue from when the last change happened
+        var veryOldValue;
+        // only track veryOldValue if the listener is asking for it
+        var trackVeryOldValue = (listener.length > 1);
+        var changeDetected = 0;
+        var changeDetector = $parse(obj, $watchCollectionInterceptor);
+        var internalArray = [];
+        var internalObject = {};
+        var initRun = true;
+        var oldLength = 0;
+
+        function $watchCollectionInterceptor(_value) {
+          newValue = _value;
+          var newLength, key, bothNaN, newItem, oldItem;
+
+          // If the new value is undefined, then return undefined as the watch may be a one-time watch
+          if (isUndefined(newValue)) return;
+
+          if (!isObject(newValue)) { // if primitive
+            if (oldValue !== newValue) {
+              oldValue = newValue;
+              changeDetected++;
+            }
+          } else if (isArrayLike(newValue)) {
+            if (oldValue !== internalArray) {
+              // we are transitioning from something which was not an array into array.
+              oldValue = internalArray;
+              oldLength = oldValue.length = 0;
+              changeDetected++;
+            }
+
+            newLength = newValue.length;
+
+            if (oldLength !== newLength) {
+              // if lengths do not match we need to trigger change notification
+              changeDetected++;
+              oldValue.length = oldLength = newLength;
+            }
+            // copy the items to oldValue and look for changes.
+            for (var i = 0; i < newLength; i++) {
+              oldItem = oldValue[i];
+              newItem = newValue[i];
+
+              bothNaN = (oldItem !== oldItem) && (newItem !== newItem);
+              if (!bothNaN && (oldItem !== newItem)) {
+                changeDetected++;
+                oldValue[i] = newItem;
+              }
+            }
+          } else {
+            if (oldValue !== internalObject) {
+              // we are transitioning from something which was not an object into object.
+              oldValue = internalObject = {};
+              oldLength = 0;
+              changeDetected++;
+            }
+            // copy the items to oldValue and look for changes.
+            newLength = 0;
+            for (key in newValue) {
+              if (hasOwnProperty.call(newValue, key)) {
+                newLength++;
+                newItem = newValue[key];
+                oldItem = oldValue[key];
+
+                if (key in oldValue) {
+                  bothNaN = (oldItem !== oldItem) && (newItem !== newItem);
+                  if (!bothNaN && (oldItem !== newItem)) {
+                    changeDetected++;
+                    oldValue[key] = newItem;
+                  }
+                } else {
+                  oldLength++;
+                  oldValue[key] = newItem;
+                  changeDetected++;
+                }
+              }
+            }
+            if (oldLength > newLength) {
+              // we used to have more keys, need to find them and destroy them.
+              changeDetected++;
+              for (key in oldValue) {
+                if (!hasOwnProperty.call(newValue, key)) {
+                  oldLength--;
+                  delete oldValue[key];
+                }
+              }
+            }
+          }
+          return changeDetected;
+        }
+
+        function $watchCollectionAction() {
+          if (initRun) {
+            initRun = false;
+            listener(newValue, newValue, self);
+          } else {
+            listener(newValue, veryOldValue, self);
+          }
+
+          // make a copy for the next time a collection is changed
+          if (trackVeryOldValue) {
+            if (!isObject(newValue)) {
+              //primitive
+              veryOldValue = newValue;
+            } else if (isArrayLike(newValue)) {
+              veryOldValue = new Array(newValue.length);
+              for (var i = 0; i < newValue.length; i++) {
+                veryOldValue[i] = newValue[i];
+              }
+            } else { // if object
+              veryOldValue = {};
+              for (var key in newValue) {
+                if (hasOwnProperty.call(newValue, key)) {
+                  veryOldValue[key] = newValue[key];
+                }
+              }
+            }
+          }
+        }
+
+        return this.$watch(changeDetector, $watchCollectionAction);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$digest
+       * @kind function
+       *
+       * @description
+       * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and
+       * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change
+       * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers}
+       * until no more listeners are firing. This means that it is possible to get into an infinite
+       * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of
+       * iterations exceeds 10.
+       *
+       * Usually, you don't call `$digest()` directly in
+       * {@link ng.directive:ngController controllers} or in
+       * {@link ng.$compileProvider#directive directives}.
+       * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within
+       * a {@link ng.$compileProvider#directive directive}), which will force a `$digest()`.
+       *
+       * If you want to be notified whenever `$digest()` is called,
+       * you can register a `watchExpression` function with
+       * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`.
+       *
+       * In unit tests, you may need to call `$digest()` to simulate the scope life cycle.
+       *
+       * # Example
+       * ```js
+           var scope = ...;
+           scope.name = 'misko';
+           scope.counter = 0;
+
+           expect(scope.counter).toEqual(0);
+           scope.$watch('name', function(newValue, oldValue) {
+             scope.counter = scope.counter + 1;
+           });
+           expect(scope.counter).toEqual(0);
+
+           scope.$digest();
+           // the listener is always called during the first $digest loop after it was registered
+           expect(scope.counter).toEqual(1);
+
+           scope.$digest();
+           // but now it will not be called unless the value changes
+           expect(scope.counter).toEqual(1);
+
+           scope.name = 'adam';
+           scope.$digest();
+           expect(scope.counter).toEqual(2);
+       * ```
+       *
+       */
+      $digest: function() {
+        var watch, value, last,
+            watchers,
+            length,
+            dirty, ttl = TTL,
+            next, current, target = this,
+            watchLog = [],
+            logIdx, logMsg, asyncTask;
+
+        beginPhase('$digest');
+        // Check for changes to browser url that happened in sync before the call to $digest
+        $browser.$$checkUrlChange();
+
+        if (this === $rootScope && applyAsyncId !== null) {
+          // If this is the root scope, and $applyAsync has scheduled a deferred $apply(), then
+          // cancel the scheduled $apply and flush the queue of expressions to be evaluated.
+          $browser.defer.cancel(applyAsyncId);
+          flushApplyAsync();
+        }
+
+        lastDirtyWatch = null;
+
+        do { // "while dirty" loop
+          dirty = false;
+          current = target;
+
+          while (asyncQueue.length) {
+            try {
+              asyncTask = asyncQueue.shift();
+              asyncTask.scope.$eval(asyncTask.expression, asyncTask.locals);
+            } catch (e) {
+              $exceptionHandler(e);
+            }
+            lastDirtyWatch = null;
+          }
+
+          traverseScopesLoop:
+          do { // "traverse the scopes" loop
+            if ((watchers = current.$$watchers)) {
+              // process our watches
+              length = watchers.length;
+              while (length--) {
+                try {
+                  watch = watchers[length];
+                  // Most common watches are on primitives, in which case we can short
+                  // circuit it with === operator, only when === fails do we use .equals
+                  if (watch) {
+                    if ((value = watch.get(current)) !== (last = watch.last) &&
+                        !(watch.eq
+                            ? equals(value, last)
+                            : (typeof value === 'number' && typeof last === 'number'
+                               && isNaN(value) && isNaN(last)))) {
+                      dirty = true;
+                      lastDirtyWatch = watch;
+                      watch.last = watch.eq ? copy(value, null) : value;
+                      watch.fn(value, ((last === initWatchVal) ? value : last), current);
+                      if (ttl < 5) {
+                        logIdx = 4 - ttl;
+                        if (!watchLog[logIdx]) watchLog[logIdx] = [];
+                        watchLog[logIdx].push({
+                          msg: isFunction(watch.exp) ? 'fn: ' + (watch.exp.name || watch.exp.toString()) : watch.exp,
+                          newVal: value,
+                          oldVal: last
+                        });
+                      }
+                    } else if (watch === lastDirtyWatch) {
+                      // If the most recently dirty watcher is now clean, short circuit since the remaining watchers
+                      // have already been tested.
+                      dirty = false;
+                      break traverseScopesLoop;
+                    }
+                  }
+                } catch (e) {
+                  $exceptionHandler(e);
+                }
+              }
+            }
+
+            // Insanity Warning: scope depth-first traversal
+            // yes, this code is a bit crazy, but it works and we have tests to prove it!
+            // this piece should be kept in sync with the traversal in $broadcast
+            if (!(next = ((current.$$watchersCount && current.$$childHead) ||
+                (current !== target && current.$$nextSibling)))) {
+              while (current !== target && !(next = current.$$nextSibling)) {
+                current = current.$parent;
+              }
+            }
+          } while ((current = next));
+
+          // `break traverseScopesLoop;` takes us to here
+
+          if ((dirty || asyncQueue.length) && !(ttl--)) {
+            clearPhase();
+            throw $rootScopeMinErr('infdig',
+                '{0} $digest() iterations reached. Aborting!\n' +
+                'Watchers fired in the last 5 iterations: {1}',
+                TTL, watchLog);
+          }
+
+        } while (dirty || asyncQueue.length);
+
+        clearPhase();
+
+        while (postDigestQueue.length) {
+          try {
+            postDigestQueue.shift()();
+          } catch (e) {
+            $exceptionHandler(e);
+          }
+        }
+      },
+
+
+      /**
+       * @ngdoc event
+       * @name $rootScope.Scope#$destroy
+       * @eventType broadcast on scope being destroyed
+       *
+       * @description
+       * Broadcasted when a scope and its children are being destroyed.
+       *
+       * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to
+       * clean up DOM bindings before an element is removed from the DOM.
+       */
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$destroy
+       * @kind function
+       *
+       * @description
+       * Removes the current scope (and all of its children) from the parent scope. Removal implies
+       * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer
+       * propagate to the current scope and its children. Removal also implies that the current
+       * scope is eligible for garbage collection.
+       *
+       * The `$destroy()` is usually used by directives such as
+       * {@link ng.directive:ngRepeat ngRepeat} for managing the
+       * unrolling of the loop.
+       *
+       * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope.
+       * Application code can register a `$destroy` event handler that will give it a chance to
+       * perform any necessary cleanup.
+       *
+       * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to
+       * clean up DOM bindings before an element is removed from the DOM.
+       */
+      $destroy: function() {
+        // We can't destroy a scope that has been already destroyed.
+        if (this.$$destroyed) return;
+        var parent = this.$parent;
+
+        this.$broadcast('$destroy');
+        this.$$destroyed = true;
+
+        if (this === $rootScope) {
+          //Remove handlers attached to window when $rootScope is removed
+          $browser.$$applicationDestroyed();
+        }
+
+        incrementWatchersCount(this, -this.$$watchersCount);
+        for (var eventName in this.$$listenerCount) {
+          decrementListenerCount(this, this.$$listenerCount[eventName], eventName);
+        }
+
+        // sever all the references to parent scopes (after this cleanup, the current scope should
+        // not be retained by any of our references and should be eligible for garbage collection)
+        if (parent && parent.$$childHead == this) parent.$$childHead = this.$$nextSibling;
+        if (parent && parent.$$childTail == this) parent.$$childTail = this.$$prevSibling;
+        if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling;
+        if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling;
+
+        // Disable listeners, watchers and apply/digest methods
+        this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = noop;
+        this.$on = this.$watch = this.$watchGroup = function() { return noop; };
+        this.$$listeners = {};
+
+        // Disconnect the next sibling to prevent `cleanUpScope` destroying those too
+        this.$$nextSibling = null;
+        cleanUpScope(this);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$eval
+       * @kind function
+       *
+       * @description
+       * Executes the `expression` on the current scope and returns the result. Any exceptions in
+       * the expression are propagated (uncaught). This is useful when evaluating Angular
+       * expressions.
+       *
+       * # Example
+       * ```js
+           var scope = ng.$rootScope.Scope();
+           scope.a = 1;
+           scope.b = 2;
+
+           expect(scope.$eval('a+b')).toEqual(3);
+           expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3);
+       * ```
+       *
+       * @param {(string|function())=} expression An angular expression to be executed.
+       *
+       *    - `string`: execute using the rules as defined in  {@link guide/expression expression}.
+       *    - `function(scope)`: execute the function with the current `scope` parameter.
+       *
+       * @param {(object)=} locals Local variables object, useful for overriding values in scope.
+       * @returns {*} The result of evaluating the expression.
+       */
+      $eval: function(expr, locals) {
+        return $parse(expr)(this, locals);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$evalAsync
+       * @kind function
+       *
+       * @description
+       * Executes the expression on the current scope at a later point in time.
+       *
+       * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only
+       * that:
+       *
+       *   - it will execute after the function that scheduled the evaluation (preferably before DOM
+       *     rendering).
+       *   - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after
+       *     `expression` execution.
+       *
+       * Any exceptions from the execution of the expression are forwarded to the
+       * {@link ng.$exceptionHandler $exceptionHandler} service.
+       *
+       * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle
+       * will be scheduled. However, it is encouraged to always call code that changes the model
+       * from within an `$apply` call. That includes code evaluated via `$evalAsync`.
+       *
+       * @param {(string|function())=} expression An angular expression to be executed.
+       *
+       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.
+       *    - `function(scope)`: execute the function with the current `scope` parameter.
+       *
+       * @param {(object)=} locals Local variables object, useful for overriding values in scope.
+       */
+      $evalAsync: function(expr, locals) {
+        // if we are outside of an $digest loop and this is the first time we are scheduling async
+        // task also schedule async auto-flush
+        if (!$rootScope.$$phase && !asyncQueue.length) {
+          $browser.defer(function() {
+            if (asyncQueue.length) {
+              $rootScope.$digest();
+            }
+          });
+        }
+
+        asyncQueue.push({scope: this, expression: expr, locals: locals});
+      },
+
+      $$postDigest: function(fn) {
+        postDigestQueue.push(fn);
+      },
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$apply
+       * @kind function
+       *
+       * @description
+       * `$apply()` is used to execute an expression in angular from outside of the angular
+       * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries).
+       * Because we are calling into the angular framework we need to perform proper scope life
+       * cycle of {@link ng.$exceptionHandler exception handling},
+       * {@link ng.$rootScope.Scope#$digest executing watches}.
+       *
+       * ## Life cycle
+       *
+       * # Pseudo-Code of `$apply()`
+       * ```js
+           function $apply(expr) {
+             try {
+               return $eval(expr);
+             } catch (e) {
+               $exceptionHandler(e);
+             } finally {
+               $root.$digest();
+             }
+           }
+       * ```
+       *
+       *
+       * Scope's `$apply()` method transitions through the following stages:
+       *
+       * 1. The {@link guide/expression expression} is executed using the
+       *    {@link ng.$rootScope.Scope#$eval $eval()} method.
+       * 2. Any exceptions from the execution of the expression are forwarded to the
+       *    {@link ng.$exceptionHandler $exceptionHandler} service.
+       * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the
+       *    expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method.
+       *
+       *
+       * @param {(string|function())=} exp An angular expression to be executed.
+       *
+       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.
+       *    - `function(scope)`: execute the function with current `scope` parameter.
+       *
+       * @returns {*} The result of evaluating the expression.
+       */
+      $apply: function(expr) {
+        try {
+          beginPhase('$apply');
+          try {
+            return this.$eval(expr);
+          } finally {
+            clearPhase();
+          }
+        } catch (e) {
+          $exceptionHandler(e);
+        } finally {
+          try {
+            $rootScope.$digest();
+          } catch (e) {
+            $exceptionHandler(e);
+            throw e;
+          }
+        }
+      },
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$applyAsync
+       * @kind function
+       *
+       * @description
+       * Schedule the invocation of $apply to occur at a later time. The actual time difference
+       * varies across browsers, but is typically around ~10 milliseconds.
+       *
+       * This can be used to queue up multiple expressions which need to be evaluated in the same
+       * digest.
+       *
+       * @param {(string|function())=} exp An angular expression to be executed.
+       *
+       *    - `string`: execute using the rules as defined in {@link guide/expression expression}.
+       *    - `function(scope)`: execute the function with current `scope` parameter.
+       */
+      $applyAsync: function(expr) {
+        var scope = this;
+        expr && applyAsyncQueue.push($applyAsyncExpression);
+        scheduleApplyAsync();
+
+        function $applyAsyncExpression() {
+          scope.$eval(expr);
+        }
+      },
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$on
+       * @kind function
+       *
+       * @description
+       * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for
+       * discussion of event life cycle.
+       *
+       * The event listener function format is: `function(event, args...)`. The `event` object
+       * passed into the listener has the following attributes:
+       *
+       *   - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or
+       *     `$broadcast`-ed.
+       *   - `currentScope` - `{Scope}`: the scope that is currently handling the event. Once the
+       *     event propagates through the scope hierarchy, this property is set to null.
+       *   - `name` - `{string}`: name of the event.
+       *   - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel
+       *     further event propagation (available only for events that were `$emit`-ed).
+       *   - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag
+       *     to true.
+       *   - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called.
+       *
+       * @param {string} name Event name to listen on.
+       * @param {function(event, ...args)} listener Function to call when the event is emitted.
+       * @returns {function()} Returns a deregistration function for this listener.
+       */
+      $on: function(name, listener) {
+        var namedListeners = this.$$listeners[name];
+        if (!namedListeners) {
+          this.$$listeners[name] = namedListeners = [];
+        }
+        namedListeners.push(listener);
+
+        var current = this;
+        do {
+          if (!current.$$listenerCount[name]) {
+            current.$$listenerCount[name] = 0;
+          }
+          current.$$listenerCount[name]++;
+        } while ((current = current.$parent));
+
+        var self = this;
+        return function() {
+          var indexOfListener = namedListeners.indexOf(listener);
+          if (indexOfListener !== -1) {
+            namedListeners[indexOfListener] = null;
+            decrementListenerCount(self, 1, name);
+          }
+        };
+      },
+
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$emit
+       * @kind function
+       *
+       * @description
+       * Dispatches an event `name` upwards through the scope hierarchy notifying the
+       * registered {@link ng.$rootScope.Scope#$on} listeners.
+       *
+       * The event life cycle starts at the scope on which `$emit` was called. All
+       * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get
+       * notified. Afterwards, the event traverses upwards toward the root scope and calls all
+       * registered listeners along the way. The event will stop propagating if one of the listeners
+       * cancels it.
+       *
+       * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed
+       * onto the {@link ng.$exceptionHandler $exceptionHandler} service.
+       *
+       * @param {string} name Event name to emit.
+       * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.
+       * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}).
+       */
+      $emit: function(name, args) {
+        var empty = [],
+            namedListeners,
+            scope = this,
+            stopPropagation = false,
+            event = {
+              name: name,
+              targetScope: scope,
+              stopPropagation: function() {stopPropagation = true;},
+              preventDefault: function() {
+                event.defaultPrevented = true;
+              },
+              defaultPrevented: false
+            },
+            listenerArgs = concat([event], arguments, 1),
+            i, length;
+
+        do {
+          namedListeners = scope.$$listeners[name] || empty;
+          event.currentScope = scope;
+          for (i = 0, length = namedListeners.length; i < length; i++) {
+
+            // if listeners were deregistered, defragment the array
+            if (!namedListeners[i]) {
+              namedListeners.splice(i, 1);
+              i--;
+              length--;
+              continue;
+            }
+            try {
+              //allow all listeners attached to the current scope to run
+              namedListeners[i].apply(null, listenerArgs);
+            } catch (e) {
+              $exceptionHandler(e);
+            }
+          }
+          //if any listener on the current scope stops propagation, prevent bubbling
+          if (stopPropagation) {
+            event.currentScope = null;
+            return event;
+          }
+          //traverse upwards
+          scope = scope.$parent;
+        } while (scope);
+
+        event.currentScope = null;
+
+        return event;
+      },
+
+
+      /**
+       * @ngdoc method
+       * @name $rootScope.Scope#$broadcast
+       * @kind function
+       *
+       * @description
+       * Dispatches an event `name` downwards to all child scopes (and their children) notifying the
+       * registered {@link ng.$rootScope.Scope#$on} listeners.
+       *
+       * The event life cycle starts at the scope on which `$broadcast` was called. All
+       * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get
+       * notified. Afterwards, the event propagates to all direct and indirect scopes of the current
+       * scope and calls all registered listeners along the way. The event cannot be canceled.
+       *
+       * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed
+       * onto the {@link ng.$exceptionHandler $exceptionHandler} service.
+       *
+       * @param {string} name Event name to broadcast.
+       * @param {...*} args Optional one or more arguments which will be passed onto the event listeners.
+       * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on}
+       */
+      $broadcast: function(name, args) {
+        var target = this,
+            current = target,
+            next = target,
+            event = {
+              name: name,
+              targetScope: target,
+              preventDefault: function() {
+                event.defaultPrevented = true;
+              },
+              defaultPrevented: false
+            };
+
+        if (!target.$$listenerCount[name]) return event;
+
+        var listenerArgs = concat([event], arguments, 1),
+            listeners, i, length;
+
+        //down while you can, then up and next sibling or up and next sibling until back at root
+        while ((current = next)) {
+          event.currentScope = current;
+          listeners = current.$$listeners[name] || [];
+          for (i = 0, length = listeners.length; i < length; i++) {
+            // if listeners were deregistered, defragment the array
+            if (!listeners[i]) {
+              listeners.splice(i, 1);
+              i--;
+              length--;
+              continue;
+            }
+
+            try {
+              listeners[i].apply(null, listenerArgs);
+            } catch (e) {
+              $exceptionHandler(e);
+            }
+          }
+
+          // Insanity Warning: scope depth-first traversal
+          // yes, this code is a bit crazy, but it works and we have tests to prove it!
+          // this piece should be kept in sync with the traversal in $digest
+          // (though it differs due to having the extra check for $$listenerCount)
+          if (!(next = ((current.$$listenerCount[name] && current.$$childHead) ||
+              (current !== target && current.$$nextSibling)))) {
+            while (current !== target && !(next = current.$$nextSibling)) {
+              current = current.$parent;
+            }
+          }
+        }
+
+        event.currentScope = null;
+        return event;
+      }
+    };
+
+    var $rootScope = new Scope();
+
+    //The internal queues. Expose them on the $rootScope for debugging/testing purposes.
+    var asyncQueue = $rootScope.$$asyncQueue = [];
+    var postDigestQueue = $rootScope.$$postDigestQueue = [];
+    var applyAsyncQueue = $rootScope.$$applyAsyncQueue = [];
+
+    return $rootScope;
+
+
+    function beginPhase(phase) {
+      if ($rootScope.$$phase) {
+        throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase);
+      }
+
+      $rootScope.$$phase = phase;
+    }
+
+    function clearPhase() {
+      $rootScope.$$phase = null;
+    }
+
+    function incrementWatchersCount(current, count) {
+      do {
+        current.$$watchersCount += count;
+      } while ((current = current.$parent));
+    }
+
+    function decrementListenerCount(current, count, name) {
+      do {
+        current.$$listenerCount[name] -= count;
+
+        if (current.$$listenerCount[name] === 0) {
+          delete current.$$listenerCount[name];
+        }
+      } while ((current = current.$parent));
+    }
+
+    /**
+     * function used as an initial value for watchers.
+     * because it's unique we can easily tell it apart from other values
+     */
+    function initWatchVal() {}
+
+    function flushApplyAsync() {
+      while (applyAsyncQueue.length) {
+        try {
+          applyAsyncQueue.shift()();
+        } catch (e) {
+          $exceptionHandler(e);
+        }
+      }
+      applyAsyncId = null;
+    }
+
+    function scheduleApplyAsync() {
+      if (applyAsyncId === null) {
+        applyAsyncId = $browser.defer(function() {
+          $rootScope.$apply(flushApplyAsync);
+        });
+      }
+    }
+  }];
+}
+
+/**
+ * @description
+ * Private service to sanitize uris for links and images. Used by $compile and $sanitize.
+ */
+function $$SanitizeUriProvider() {
+  var aHrefSanitizationWhitelist = /^\s*(https?|ftp|mailto|tel|file):/,
+    imgSrcSanitizationWhitelist = /^\s*((https?|ftp|file|blob):|data:image\/)/;
+
+  /**
+   * @description
+   * Retrieves or overrides the default regular expression that is used for whitelisting of safe
+   * urls during a[href] sanitization.
+   *
+   * The sanitization is a security measure aimed at prevent XSS attacks via html links.
+   *
+   * Any url about to be assigned to a[href] via data-binding is first normalized and turned into
+   * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist`
+   * regular expression. If a match is found, the original url is written into the dom. Otherwise,
+   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
+   *
+   * @param {RegExp=} regexp New regexp to whitelist urls with.
+   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
+   *    chaining otherwise.
+   */
+  this.aHrefSanitizationWhitelist = function(regexp) {
+    if (isDefined(regexp)) {
+      aHrefSanitizationWhitelist = regexp;
+      return this;
+    }
+    return aHrefSanitizationWhitelist;
+  };
+
+
+  /**
+   * @description
+   * Retrieves or overrides the default regular expression that is used for whitelisting of safe
+   * urls during img[src] sanitization.
+   *
+   * The sanitization is a security measure aimed at prevent XSS attacks via html links.
+   *
+   * Any url about to be assigned to img[src] via data-binding is first normalized and turned into
+   * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist`
+   * regular expression. If a match is found, the original url is written into the dom. Otherwise,
+   * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM.
+   *
+   * @param {RegExp=} regexp New regexp to whitelist urls with.
+   * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for
+   *    chaining otherwise.
+   */
+  this.imgSrcSanitizationWhitelist = function(regexp) {
+    if (isDefined(regexp)) {
+      imgSrcSanitizationWhitelist = regexp;
+      return this;
+    }
+    return imgSrcSanitizationWhitelist;
+  };
+
+  this.$get = function() {
+    return function sanitizeUri(uri, isImage) {
+      var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist;
+      var normalizedVal;
+      normalizedVal = urlResolve(uri).href;
+      if (normalizedVal !== '' && !normalizedVal.match(regex)) {
+        return 'unsafe:' + normalizedVal;
+      }
+      return uri;
+    };
+  };
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *     Any commits to this file should be reviewed with security in mind.  *
+ *   Changes to this file can potentially create security vulnerabilities. *
+ *          An approval from 2 Core members with history of modifying      *
+ *                         this file is required.                          *
+ *                                                                         *
+ *  Does the change somehow allow for arbitrary javascript to be executed? *
+ *    Or allows for someone to change the prototype of built-in objects?   *
+ *     Or gives undesired access to variables likes document or window?    *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+var $sceMinErr = minErr('$sce');
+
+var SCE_CONTEXTS = {
+  HTML: 'html',
+  CSS: 'css',
+  URL: 'url',
+  // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a
+  // url.  (e.g. ng-include, script src, templateUrl)
+  RESOURCE_URL: 'resourceUrl',
+  JS: 'js'
+};
+
+// Helper functions follow.
+
+function adjustMatcher(matcher) {
+  if (matcher === 'self') {
+    return matcher;
+  } else if (isString(matcher)) {
+    // Strings match exactly except for 2 wildcards - '*' and '**'.
+    // '*' matches any character except those from the set ':/.?&'.
+    // '**' matches any character (like .* in a RegExp).
+    // More than 2 *'s raises an error as it's ill defined.
+    if (matcher.indexOf('***') > -1) {
+      throw $sceMinErr('iwcard',
+          'Illegal sequence *** in string matcher.  String: {0}', matcher);
+    }
+    matcher = escapeForRegexp(matcher).
+                  replace('\\*\\*', '.*').
+                  replace('\\*', '[^:/.?&;]*');
+    return new RegExp('^' + matcher + '$');
+  } else if (isRegExp(matcher)) {
+    // The only other type of matcher allowed is a Regexp.
+    // Match entire URL / disallow partial matches.
+    // Flags are reset (i.e. no global, ignoreCase or multiline)
+    return new RegExp('^' + matcher.source + '$');
+  } else {
+    throw $sceMinErr('imatcher',
+        'Matchers may only be "self", string patterns or RegExp objects');
+  }
+}
+
+
+function adjustMatchers(matchers) {
+  var adjustedMatchers = [];
+  if (isDefined(matchers)) {
+    forEach(matchers, function(matcher) {
+      adjustedMatchers.push(adjustMatcher(matcher));
+    });
+  }
+  return adjustedMatchers;
+}
+
+
+/**
+ * @ngdoc service
+ * @name $sceDelegate
+ * @kind function
+ *
+ * @description
+ *
+ * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict
+ * Contextual Escaping (SCE)} services to AngularJS.
+ *
+ * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of
+ * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS.  This is
+ * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to
+ * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things
+ * work because `$sce` delegates to `$sceDelegate` for these operations.
+ *
+ * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service.
+ *
+ * The default instance of `$sceDelegate` should work out of the box with little pain.  While you
+ * can override it completely to change the behavior of `$sce`, the common case would
+ * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting
+ * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as
+ * templates.  Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist
+ * $sceDelegateProvider.resourceUrlWhitelist} and {@link
+ * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}
+ */
+
+/**
+ * @ngdoc provider
+ * @name $sceDelegateProvider
+ * @description
+ *
+ * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate
+ * $sceDelegate} service.  This allows one to get/set the whitelists and blacklists used to ensure
+ * that the URLs used for sourcing Angular templates are safe.  Refer {@link
+ * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and
+ * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}
+ *
+ * For the general details about this service in Angular, read the main page for {@link ng.$sce
+ * Strict Contextual Escaping (SCE)}.
+ *
+ * **Example**:  Consider the following case. <a name="example"></a>
+ *
+ * - your app is hosted at url `http://myapp.example.com/`
+ * - but some of your templates are hosted on other domains you control such as
+ *   `http://srv01.assets.example.com/`,  `http://srv02.assets.example.com/`, etc.
+ * - and you have an open redirect at `http://myapp.example.com/clickThru?...`.
+ *
+ * Here is what a secure configuration for this scenario might look like:
+ *
+ * ```
+ *  angular.module('myApp', []).config(function($sceDelegateProvider) {
+ *    $sceDelegateProvider.resourceUrlWhitelist([
+ *      // Allow same origin resource loads.
+ *      'self',
+ *      // Allow loading from our assets domain.  Notice the difference between * and **.
+ *      'http://srv*.assets.example.com/**'
+ *    ]);
+ *
+ *    // The blacklist overrides the whitelist so the open redirect here is blocked.
+ *    $sceDelegateProvider.resourceUrlBlacklist([
+ *      'http://myapp.example.com/clickThru**'
+ *    ]);
+ *  });
+ * ```
+ */
+
+function $SceDelegateProvider() {
+  this.SCE_CONTEXTS = SCE_CONTEXTS;
+
+  // Resource URLs can also be trusted by policy.
+  var resourceUrlWhitelist = ['self'],
+      resourceUrlBlacklist = [];
+
+  /**
+   * @ngdoc method
+   * @name $sceDelegateProvider#resourceUrlWhitelist
+   * @kind function
+   *
+   * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value
+   *     provided.  This must be an array or null.  A snapshot of this array is used so further
+   *     changes to the array are ignored.
+   *
+   *     Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items
+   *     allowed in this array.
+   *
+   *     Note: **an empty whitelist array will block all URLs**!
+   *
+   * @return {Array} the currently set whitelist array.
+   *
+   * The **default value** when no whitelist has been explicitly set is `['self']` allowing only
+   * same origin resource requests.
+   *
+   * @description
+   * Sets/Gets the whitelist of trusted resource URLs.
+   */
+  this.resourceUrlWhitelist = function(value) {
+    if (arguments.length) {
+      resourceUrlWhitelist = adjustMatchers(value);
+    }
+    return resourceUrlWhitelist;
+  };
+
+  /**
+   * @ngdoc method
+   * @name $sceDelegateProvider#resourceUrlBlacklist
+   * @kind function
+   *
+   * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value
+   *     provided.  This must be an array or null.  A snapshot of this array is used so further
+   *     changes to the array are ignored.
+   *
+   *     Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items
+   *     allowed in this array.
+   *
+   *     The typical usage for the blacklist is to **block
+   *     [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as
+   *     these would otherwise be trusted but actually return content from the redirected domain.
+   *
+   *     Finally, **the blacklist overrides the whitelist** and has the final say.
+   *
+   * @return {Array} the currently set blacklist array.
+   *
+   * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there
+   * is no blacklist.)
+   *
+   * @description
+   * Sets/Gets the blacklist of trusted resource URLs.
+   */
+
+  this.resourceUrlBlacklist = function(value) {
+    if (arguments.length) {
+      resourceUrlBlacklist = adjustMatchers(value);
+    }
+    return resourceUrlBlacklist;
+  };
+
+  this.$get = ['$injector', function($injector) {
+
+    var htmlSanitizer = function htmlSanitizer(html) {
+      throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');
+    };
+
+    if ($injector.has('$sanitize')) {
+      htmlSanitizer = $injector.get('$sanitize');
+    }
+
+
+    function matchUrl(matcher, parsedUrl) {
+      if (matcher === 'self') {
+        return urlIsSameOrigin(parsedUrl);
+      } else {
+        // definitely a regex.  See adjustMatchers()
+        return !!matcher.exec(parsedUrl.href);
+      }
+    }
+
+    function isResourceUrlAllowedByPolicy(url) {
+      var parsedUrl = urlResolve(url.toString());
+      var i, n, allowed = false;
+      // Ensure that at least one item from the whitelist allows this url.
+      for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) {
+        if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) {
+          allowed = true;
+          break;
+        }
+      }
+      if (allowed) {
+        // Ensure that no item from the blacklist blocked this url.
+        for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) {
+          if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) {
+            allowed = false;
+            break;
+          }
+        }
+      }
+      return allowed;
+    }
+
+    function generateHolderType(Base) {
+      var holderType = function TrustedValueHolderType(trustedValue) {
+        this.$$unwrapTrustedValue = function() {
+          return trustedValue;
+        };
+      };
+      if (Base) {
+        holderType.prototype = new Base();
+      }
+      holderType.prototype.valueOf = function sceValueOf() {
+        return this.$$unwrapTrustedValue();
+      };
+      holderType.prototype.toString = function sceToString() {
+        return this.$$unwrapTrustedValue().toString();
+      };
+      return holderType;
+    }
+
+    var trustedValueHolderBase = generateHolderType(),
+        byType = {};
+
+    byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase);
+    byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase);
+    byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase);
+    byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase);
+    byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]);
+
+    /**
+     * @ngdoc method
+     * @name $sceDelegate#trustAs
+     *
+     * @description
+     * Returns an object that is trusted by angular for use in specified strict
+     * contextual escaping contexts (such as ng-bind-html, ng-include, any src
+     * attribute interpolation, any dom event binding attribute interpolation
+     * such as for onclick,  etc.) that uses the provided value.
+     * See {@link ng.$sce $sce} for enabling strict contextual escaping.
+     *
+     * @param {string} type The kind of context in which this value is safe for use.  e.g. url,
+     *   resourceUrl, html, js and css.
+     * @param {*} value The value that that should be considered trusted/safe.
+     * @returns {*} A value that can be used to stand in for the provided `value` in places
+     * where Angular expects a $sce.trustAs() return value.
+     */
+    function trustAs(type, trustedValue) {
+      var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null);
+      if (!Constructor) {
+        throw $sceMinErr('icontext',
+            'Attempted to trust a value in invalid context. Context: {0}; Value: {1}',
+            type, trustedValue);
+      }
+      if (trustedValue === null || isUndefined(trustedValue) || trustedValue === '') {
+        return trustedValue;
+      }
+      // All the current contexts in SCE_CONTEXTS happen to be strings.  In order to avoid trusting
+      // mutable objects, we ensure here that the value passed in is actually a string.
+      if (typeof trustedValue !== 'string') {
+        throw $sceMinErr('itype',
+            'Attempted to trust a non-string value in a content requiring a string: Context: {0}',
+            type);
+      }
+      return new Constructor(trustedValue);
+    }
+
+    /**
+     * @ngdoc method
+     * @name $sceDelegate#valueOf
+     *
+     * @description
+     * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs
+     * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link
+     * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.
+     *
+     * If the passed parameter is not a value that had been returned by {@link
+     * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is.
+     *
+     * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}
+     *      call or anything else.
+     * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs
+     *     `$sceDelegate.trustAs`} if `value` is the result of such a call.  Otherwise, returns
+     *     `value` unchanged.
+     */
+    function valueOf(maybeTrusted) {
+      if (maybeTrusted instanceof trustedValueHolderBase) {
+        return maybeTrusted.$$unwrapTrustedValue();
+      } else {
+        return maybeTrusted;
+      }
+    }
+
+    /**
+     * @ngdoc method
+     * @name $sceDelegate#getTrusted
+     *
+     * @description
+     * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and
+     * returns the originally supplied value if the queried context type is a supertype of the
+     * created type.  If this condition isn't satisfied, throws an exception.
+     *
+     * @param {string} type The kind of context in which this value is to be used.
+     * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs
+     *     `$sceDelegate.trustAs`} call.
+     * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs
+     *     `$sceDelegate.trustAs`} if valid in this context.  Otherwise, throws an exception.
+     */
+    function getTrusted(type, maybeTrusted) {
+      if (maybeTrusted === null || isUndefined(maybeTrusted) || maybeTrusted === '') {
+        return maybeTrusted;
+      }
+      var constructor = (byType.hasOwnProperty(type) ? byType[type] : null);
+      if (constructor && maybeTrusted instanceof constructor) {
+        return maybeTrusted.$$unwrapTrustedValue();
+      }
+      // If we get here, then we may only take one of two actions.
+      // 1. sanitize the value for the requested type, or
+      // 2. throw an exception.
+      if (type === SCE_CONTEXTS.RESOURCE_URL) {
+        if (isResourceUrlAllowedByPolicy(maybeTrusted)) {
+          return maybeTrusted;
+        } else {
+          throw $sceMinErr('insecurl',
+              'Blocked loading resource from url not allowed by $sceDelegate policy.  URL: {0}',
+              maybeTrusted.toString());
+        }
+      } else if (type === SCE_CONTEXTS.HTML) {
+        return htmlSanitizer(maybeTrusted);
+      }
+      throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.');
+    }
+
+    return { trustAs: trustAs,
+             getTrusted: getTrusted,
+             valueOf: valueOf };
+  }];
+}
+
+
+/**
+ * @ngdoc provider
+ * @name $sceProvider
+ * @description
+ *
+ * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service.
+ * -   enable/disable Strict Contextual Escaping (SCE) in a module
+ * -   override the default implementation with a custom delegate
+ *
+ * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}.
+ */
+
+/* jshint maxlen: false*/
+
+/**
+ * @ngdoc service
+ * @name $sce
+ * @kind function
+ *
+ * @description
+ *
+ * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS.
+ *
+ * # Strict Contextual Escaping
+ *
+ * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain
+ * contexts to result in a value that is marked as safe to use for that context.  One example of
+ * such a context is binding arbitrary html controlled by the user via `ng-bind-html`.  We refer
+ * to these contexts as privileged or SCE contexts.
+ *
+ * As of version 1.2, Angular ships with SCE enabled by default.
+ *
+ * Note:  When enabled (the default), IE<11 in quirks mode is not supported.  In this mode, IE<11 allow
+ * one to execute arbitrary javascript by the use of the expression() syntax.  Refer
+ * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them.
+ * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>`
+ * to the top of your HTML document.
+ *
+ * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for
+ * security vulnerabilities such as XSS, clickjacking, etc. a lot easier.
+ *
+ * Here's an example of a binding in a privileged context:
+ *
+ * ```
+ * <input ng-model="userHtml" aria-label="User input">
+ * <div ng-bind-html="userHtml"></div>
+ * ```
+ *
+ * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user.  With SCE
+ * disabled, this application allows the user to render arbitrary HTML into the DIV.
+ * In a more realistic example, one may be rendering user comments, blog articles, etc. via
+ * bindings.  (HTML is just one example of a context where rendering user controlled input creates
+ * security vulnerabilities.)
+ *
+ * For the case of HTML, you might use a library, either on the client side, or on the server side,
+ * to sanitize unsafe HTML before binding to the value and rendering it in the document.
+ *
+ * How would you ensure that every place that used these types of bindings was bound to a value that
+ * was sanitized by your library (or returned as safe for rendering by your server?)  How can you
+ * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some
+ * properties/fields and forgot to update the binding to the sanitized value?
+ *
+ * To be secure by default, you want to ensure that any such bindings are disallowed unless you can
+ * determine that something explicitly says it's safe to use a value for binding in that
+ * context.  You can then audit your code (a simple grep would do) to ensure that this is only done
+ * for those values that you can easily tell are safe - because they were received from your server,
+ * sanitized by your library, etc.  You can organize your codebase to help with this - perhaps
+ * allowing only the files in a specific directory to do this.  Ensuring that the internal API
+ * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task.
+ *
+ * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs}
+ * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to
+ * obtain values that will be accepted by SCE / privileged contexts.
+ *
+ *
+ * ## How does it work?
+ *
+ * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted
+ * $sce.getTrusted(context, value)} rather than to the value directly.  Directives use {@link
+ * ng.$sce#parseAs $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the
+ * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals.
+ *
+ * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link
+ * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}.  Here's the actual code (slightly
+ * simplified):
+ *
+ * ```
+ * var ngBindHtmlDirective = ['$sce', function($sce) {
+ *   return function(scope, element, attr) {
+ *     scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) {
+ *       element.html(value || '');
+ *     });
+ *   };
+ * }];
+ * ```
+ *
+ * ## Impact on loading templates
+ *
+ * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as
+ * `templateUrl`'s specified by {@link guide/directive directives}.
+ *
+ * By default, Angular only loads templates from the same domain and protocol as the application
+ * document.  This is done by calling {@link ng.$sce#getTrustedResourceUrl
+ * $sce.getTrustedResourceUrl} on the template URL.  To load templates from other domains and/or
+ * protocols, you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist
+ * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value.
+ *
+ * *Please note*:
+ * The browser's
+ * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)
+ * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)
+ * policy apply in addition to this and may further restrict whether the template is successfully
+ * loaded.  This means that without the right CORS policy, loading templates from a different domain
+ * won't work on all browsers.  Also, loading templates from `file://` URL does not work on some
+ * browsers.
+ *
+ * ## This feels like too much overhead
+ *
+ * It's important to remember that SCE only applies to interpolation expressions.
+ *
+ * If your expressions are constant literals, they're automatically trusted and you don't need to
+ * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g.
+ * `<div ng-bind-html="'<b>implicitly trusted</b>'"></div>`) just works.
+ *
+ * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them
+ * through {@link ng.$sce#getTrusted $sce.getTrusted}.  SCE doesn't play a role here.
+ *
+ * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load
+ * templates in `ng-include` from your application's domain without having to even know about SCE.
+ * It blocks loading templates from other domains or loading templates over http from an https
+ * served document.  You can change these by setting your own custom {@link
+ * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link
+ * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs.
+ *
+ * This significantly reduces the overhead.  It is far easier to pay the small overhead and have an
+ * application that's secure and can be audited to verify that with much more ease than bolting
+ * security onto an application later.
+ *
+ * <a name="contexts"></a>
+ * ## What trusted context types are supported?
+ *
+ * | Context             | Notes          |
+ * |---------------------|----------------|
+ * | `$sce.HTML`         | For HTML that's safe to source into the application.  The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. |
+ * | `$sce.CSS`          | For CSS that's safe to source into the application.  Currently unused.  Feel free to use it in your own directives. |
+ * | `$sce.URL`          | For URLs that are safe to follow as links.  Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. |
+ * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application.  Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.)  <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. |
+ * | `$sce.JS`           | For JavaScript that is safe to execute in your application's context.  Currently unused.  Feel free to use it in your own directives. |
+ *
+ * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name="resourceUrlPatternItem"></a>
+ *
+ *  Each element in these arrays must be one of the following:
+ *
+ *  - **'self'**
+ *    - The special **string**, `'self'`, can be used to match against all URLs of the **same
+ *      domain** as the application document using the **same protocol**.
+ *  - **String** (except the special value `'self'`)
+ *    - The string is matched against the full *normalized / absolute URL* of the resource
+ *      being tested (substring matches are not good enough.)
+ *    - There are exactly **two wildcard sequences** - `*` and `**`.  All other characters
+ *      match themselves.
+ *    - `*`: matches zero or more occurrences of any character other than one of the following 6
+ *      characters: '`:`', '`/`', '`.`', '`?`', '`&`' and '`;`'.  It's a useful wildcard for use
+ *      in a whitelist.
+ *    - `**`: matches zero or more occurrences of *any* character.  As such, it's not
+ *      appropriate for use in a scheme, domain, etc. as it would match too much.  (e.g.
+ *      http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might
+ *      not have been the intention.)  Its usage at the very end of the path is ok.  (e.g.
+ *      http://foo.example.com/templates/**).
+ *  - **RegExp** (*see caveat below*)
+ *    - *Caveat*:  While regular expressions are powerful and offer great flexibility,  their syntax
+ *      (and all the inevitable escaping) makes them *harder to maintain*.  It's easy to
+ *      accidentally introduce a bug when one updates a complex expression (imho, all regexes should
+ *      have good test coverage).  For instance, the use of `.` in the regex is correct only in a
+ *      small number of cases.  A `.` character in the regex used when matching the scheme or a
+ *      subdomain could be matched against a `:` or literal `.` that was likely not intended.   It
+ *      is highly recommended to use the string patterns and only fall back to regular expressions
+ *      as a last resort.
+ *    - The regular expression must be an instance of RegExp (i.e. not a string.)  It is
+ *      matched against the **entire** *normalized / absolute URL* of the resource being tested
+ *      (even when the RegExp did not have the `^` and `$` codes.)  In addition, any flags
+ *      present on the RegExp (such as multiline, global, ignoreCase) are ignored.
+ *    - If you are generating your JavaScript from some other templating engine (not
+ *      recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)),
+ *      remember to escape your regular expression (and be aware that you might need more than
+ *      one level of escaping depending on your templating engine and the way you interpolated
+ *      the value.)  Do make use of your platform's escaping mechanism as it might be good
+ *      enough before coding your own.  E.g. Ruby has
+ *      [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape)
+ *      and Python has [re.escape](http://docs.python.org/library/re.html#re.escape).
+ *      Javascript lacks a similar built in function for escaping.  Take a look at Google
+ *      Closure library's [goog.string.regExpEscape(s)](
+ *      http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962).
+ *
+ * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example.
+ *
+ * ## Show me an example using SCE.
+ *
+ * <example module="mySceApp" deps="angular-sanitize.js">
+ * <file name="index.html">
+ *   <div ng-controller="AppController as myCtrl">
+ *     <i ng-bind-html="myCtrl.explicitlyTrustedHtml" id="explicitlyTrustedHtml"></i><br><br>
+ *     <b>User comments</b><br>
+ *     By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when
+ *     $sanitize is available.  If $sanitize isn't available, this results in an error instead of an
+ *     exploit.
+ *     <div class="well">
+ *       <div ng-repeat="userComment in myCtrl.userComments">
+ *         <b>{{userComment.name}}</b>:
+ *         <span ng-bind-html="userComment.htmlComment" class="htmlComment"></span>
+ *         <br>
+ *       </div>
+ *     </div>
+ *   </div>
+ * </file>
+ *
+ * <file name="script.js">
+ *   angular.module('mySceApp', ['ngSanitize'])
+ *     .controller('AppController', ['$http', '$templateCache', '$sce',
+ *       function($http, $templateCache, $sce) {
+ *         var self = this;
+ *         $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) {
+ *           self.userComments = userComments;
+ *         });
+ *         self.explicitlyTrustedHtml = $sce.trustAsHtml(
+ *             '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' +
+ *             'sanitization.&quot;">Hover over this text.</span>');
+ *       }]);
+ * </file>
+ *
+ * <file name="test_data.json">
+ * [
+ *   { "name": "Alice",
+ *     "htmlComment":
+ *         "<span onmouseover='this.textContent=\"PWN3D!\"'>Is <i>anyone</i> reading this?</span>"
+ *   },
+ *   { "name": "Bob",
+ *     "htmlComment": "<i>Yes!</i>  Am I the only other one?"
+ *   }
+ * ]
+ * </file>
+ *
+ * <file name="protractor.js" type="protractor">
+ *   describe('SCE doc demo', function() {
+ *     it('should sanitize untrusted values', function() {
+ *       expect(element.all(by.css('.htmlComment')).first().getInnerHtml())
+ *           .toBe('<span>Is <i>anyone</i> reading this?</span>');
+ *     });
+ *
+ *     it('should NOT sanitize explicitly trusted values', function() {
+ *       expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe(
+ *           '<span onmouseover="this.textContent=&quot;Explicitly trusted HTML bypasses ' +
+ *           'sanitization.&quot;">Hover over this text.</span>');
+ *     });
+ *   });
+ * </file>
+ * </example>
+ *
+ *
+ *
+ * ## Can I disable SCE completely?
+ *
+ * Yes, you can.  However, this is strongly discouraged.  SCE gives you a lot of security benefits
+ * for little coding overhead.  It will be much harder to take an SCE disabled application and
+ * either secure it on your own or enable SCE at a later stage.  It might make sense to disable SCE
+ * for cases where you have a lot of existing code that was written before SCE was introduced and
+ * you're migrating them a module at a time.
+ *
+ * That said, here's how you can completely disable SCE:
+ *
+ * ```
+ * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) {
+ *   // Completely disable SCE.  For demonstration purposes only!
+ *   // Do not use in new projects.
+ *   $sceProvider.enabled(false);
+ * });
+ * ```
+ *
+ */
+/* jshint maxlen: 100 */
+
+function $SceProvider() {
+  var enabled = true;
+
+  /**
+   * @ngdoc method
+   * @name $sceProvider#enabled
+   * @kind function
+   *
+   * @param {boolean=} value If provided, then enables/disables SCE.
+   * @return {boolean} true if SCE is enabled, false otherwise.
+   *
+   * @description
+   * Enables/disables SCE and returns the current value.
+   */
+  this.enabled = function(value) {
+    if (arguments.length) {
+      enabled = !!value;
+    }
+    return enabled;
+  };
+
+
+  /* Design notes on the default implementation for SCE.
+   *
+   * The API contract for the SCE delegate
+   * -------------------------------------
+   * The SCE delegate object must provide the following 3 methods:
+   *
+   * - trustAs(contextEnum, value)
+   *     This method is used to tell the SCE service that the provided value is OK to use in the
+   *     contexts specified by contextEnum.  It must return an object that will be accepted by
+   *     getTrusted() for a compatible contextEnum and return this value.
+   *
+   * - valueOf(value)
+   *     For values that were not produced by trustAs(), return them as is.  For values that were
+   *     produced by trustAs(), return the corresponding input value to trustAs.  Basically, if
+   *     trustAs is wrapping the given values into some type, this operation unwraps it when given
+   *     such a value.
+   *
+   * - getTrusted(contextEnum, value)
+   *     This function should return the a value that is safe to use in the context specified by
+   *     contextEnum or throw and exception otherwise.
+   *
+   * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be
+   * opaque or wrapped in some holder object.  That happens to be an implementation detail.  For
+   * instance, an implementation could maintain a registry of all trusted objects by context.  In
+   * such a case, trustAs() would return the same object that was passed in.  getTrusted() would
+   * return the same object passed in if it was found in the registry under a compatible context or
+   * throw an exception otherwise.  An implementation might only wrap values some of the time based
+   * on some criteria.  getTrusted() might return a value and not throw an exception for special
+   * constants or objects even if not wrapped.  All such implementations fulfill this contract.
+   *
+   *
+   * A note on the inheritance model for SCE contexts
+   * ------------------------------------------------
+   * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types.  This
+   * is purely an implementation details.
+   *
+   * The contract is simply this:
+   *
+   *     getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value)
+   *     will also succeed.
+   *
+   * Inheritance happens to capture this in a natural way.  In some future, we
+   * may not use inheritance anymore.  That is OK because no code outside of
+   * sce.js and sceSpecs.js would need to be aware of this detail.
+   */
+
+  this.$get = ['$parse', '$sceDelegate', function(
+                $parse,   $sceDelegate) {
+    // Prereq: Ensure that we're not running in IE<11 quirks mode.  In that mode, IE < 11 allow
+    // the "expression(javascript expression)" syntax which is insecure.
+    if (enabled && msie < 8) {
+      throw $sceMinErr('iequirks',
+        'Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks ' +
+        'mode.  You can fix this by adding the text <!doctype html> to the top of your HTML ' +
+        'document.  See http://docs.angularjs.org/api/ng.$sce for more information.');
+    }
+
+    var sce = shallowCopy(SCE_CONTEXTS);
+
+    /**
+     * @ngdoc method
+     * @name $sce#isEnabled
+     * @kind function
+     *
+     * @return {Boolean} true if SCE is enabled, false otherwise.  If you want to set the value, you
+     * have to do it at module config time on {@link ng.$sceProvider $sceProvider}.
+     *
+     * @description
+     * Returns a boolean indicating if SCE is enabled.
+     */
+    sce.isEnabled = function() {
+      return enabled;
+    };
+    sce.trustAs = $sceDelegate.trustAs;
+    sce.getTrusted = $sceDelegate.getTrusted;
+    sce.valueOf = $sceDelegate.valueOf;
+
+    if (!enabled) {
+      sce.trustAs = sce.getTrusted = function(type, value) { return value; };
+      sce.valueOf = identity;
+    }
+
+    /**
+     * @ngdoc method
+     * @name $sce#parseAs
+     *
+     * @description
+     * Converts Angular {@link guide/expression expression} into a function.  This is like {@link
+     * ng.$parse $parse} and is identical when the expression is a literal constant.  Otherwise, it
+     * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*,
+     * *result*)}
+     *
+     * @param {string} type The kind of SCE context in which this result will be used.
+     * @param {string} expression String expression to compile.
+     * @returns {function(context, locals)} a function which represents the compiled expression:
+     *
+     *    * `context` – `{object}` – an object against which any expressions embedded in the strings
+     *      are evaluated against (typically a scope object).
+     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in
+     *      `context`.
+     */
+    sce.parseAs = function sceParseAs(type, expr) {
+      var parsed = $parse(expr);
+      if (parsed.literal && parsed.constant) {
+        return parsed;
+      } else {
+        return $parse(expr, function(value) {
+          return sce.getTrusted(type, value);
+        });
+      }
+    };
+
+    /**
+     * @ngdoc method
+     * @name $sce#trustAs
+     *
+     * @description
+     * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}.  As such,
+     * returns an object that is trusted by angular for use in specified strict contextual
+     * escaping contexts (such as ng-bind-html, ng-include, any src attribute
+     * interpolation, any dom event binding attribute interpolation such as for onclick,  etc.)
+     * that uses the provided value.  See * {@link ng.$sce $sce} for enabling strict contextual
+     * escaping.
+     *
+     * @param {string} type The kind of context in which this value is safe for use.  e.g. url,
+     *   resourceUrl, html, js and css.
+     * @param {*} value The value that that should be considered trusted/safe.
+     * @returns {*} A value that can be used to stand in for the provided `value` in places
+     * where Angular expects a $sce.trustAs() return value.
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#trustAsHtml
+     *
+     * @description
+     * Shorthand method.  `$sce.trustAsHtml(value)` →
+     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`}
+     *
+     * @param {*} value The value to trustAs.
+     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml
+     *     $sce.getTrustedHtml(value)} to obtain the original value.  (privileged directives
+     *     only accept expressions that are either literal constants or are the
+     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#trustAsUrl
+     *
+     * @description
+     * Shorthand method.  `$sce.trustAsUrl(value)` →
+     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`}
+     *
+     * @param {*} value The value to trustAs.
+     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl
+     *     $sce.getTrustedUrl(value)} to obtain the original value.  (privileged directives
+     *     only accept expressions that are either literal constants or are the
+     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#trustAsResourceUrl
+     *
+     * @description
+     * Shorthand method.  `$sce.trustAsResourceUrl(value)` →
+     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`}
+     *
+     * @param {*} value The value to trustAs.
+     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl
+     *     $sce.getTrustedResourceUrl(value)} to obtain the original value.  (privileged directives
+     *     only accept expressions that are either literal constants or are the return
+     *     value of {@link ng.$sce#trustAs $sce.trustAs}.)
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#trustAsJs
+     *
+     * @description
+     * Shorthand method.  `$sce.trustAsJs(value)` →
+     *     {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`}
+     *
+     * @param {*} value The value to trustAs.
+     * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs
+     *     $sce.getTrustedJs(value)} to obtain the original value.  (privileged directives
+     *     only accept expressions that are either literal constants or are the
+     *     return value of {@link ng.$sce#trustAs $sce.trustAs}.)
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#getTrusted
+     *
+     * @description
+     * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}.  As such,
+     * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the
+     * originally supplied value if the queried context type is a supertype of the created type.
+     * If this condition isn't satisfied, throws an exception.
+     *
+     * @param {string} type The kind of context in which this value is to be used.
+     * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`}
+     *                         call.
+     * @returns {*} The value the was originally provided to
+     *              {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context.
+     *              Otherwise, throws an exception.
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#getTrustedHtml
+     *
+     * @description
+     * Shorthand method.  `$sce.getTrustedHtml(value)` →
+     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`}
+     *
+     * @param {*} value The value to pass to `$sce.getTrusted`.
+     * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)`
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#getTrustedCss
+     *
+     * @description
+     * Shorthand method.  `$sce.getTrustedCss(value)` →
+     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`}
+     *
+     * @param {*} value The value to pass to `$sce.getTrusted`.
+     * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)`
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#getTrustedUrl
+     *
+     * @description
+     * Shorthand method.  `$sce.getTrustedUrl(value)` →
+     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`}
+     *
+     * @param {*} value The value to pass to `$sce.getTrusted`.
+     * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)`
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#getTrustedResourceUrl
+     *
+     * @description
+     * Shorthand method.  `$sce.getTrustedResourceUrl(value)` →
+     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`}
+     *
+     * @param {*} value The value to pass to `$sceDelegate.getTrusted`.
+     * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)`
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#getTrustedJs
+     *
+     * @description
+     * Shorthand method.  `$sce.getTrustedJs(value)` →
+     *     {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`}
+     *
+     * @param {*} value The value to pass to `$sce.getTrusted`.
+     * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)`
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#parseAsHtml
+     *
+     * @description
+     * Shorthand method.  `$sce.parseAsHtml(expression string)` →
+     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.HTML, value)`}
+     *
+     * @param {string} expression String expression to compile.
+     * @returns {function(context, locals)} a function which represents the compiled expression:
+     *
+     *    * `context` – `{object}` – an object against which any expressions embedded in the strings
+     *      are evaluated against (typically a scope object).
+     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in
+     *      `context`.
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#parseAsCss
+     *
+     * @description
+     * Shorthand method.  `$sce.parseAsCss(value)` →
+     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.CSS, value)`}
+     *
+     * @param {string} expression String expression to compile.
+     * @returns {function(context, locals)} a function which represents the compiled expression:
+     *
+     *    * `context` – `{object}` – an object against which any expressions embedded in the strings
+     *      are evaluated against (typically a scope object).
+     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in
+     *      `context`.
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#parseAsUrl
+     *
+     * @description
+     * Shorthand method.  `$sce.parseAsUrl(value)` →
+     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.URL, value)`}
+     *
+     * @param {string} expression String expression to compile.
+     * @returns {function(context, locals)} a function which represents the compiled expression:
+     *
+     *    * `context` – `{object}` – an object against which any expressions embedded in the strings
+     *      are evaluated against (typically a scope object).
+     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in
+     *      `context`.
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#parseAsResourceUrl
+     *
+     * @description
+     * Shorthand method.  `$sce.parseAsResourceUrl(value)` →
+     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.RESOURCE_URL, value)`}
+     *
+     * @param {string} expression String expression to compile.
+     * @returns {function(context, locals)} a function which represents the compiled expression:
+     *
+     *    * `context` – `{object}` – an object against which any expressions embedded in the strings
+     *      are evaluated against (typically a scope object).
+     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in
+     *      `context`.
+     */
+
+    /**
+     * @ngdoc method
+     * @name $sce#parseAsJs
+     *
+     * @description
+     * Shorthand method.  `$sce.parseAsJs(value)` →
+     *     {@link ng.$sce#parseAs `$sce.parseAs($sce.JS, value)`}
+     *
+     * @param {string} expression String expression to compile.
+     * @returns {function(context, locals)} a function which represents the compiled expression:
+     *
+     *    * `context` – `{object}` – an object against which any expressions embedded in the strings
+     *      are evaluated against (typically a scope object).
+     *    * `locals` – `{object=}` – local variables context object, useful for overriding values in
+     *      `context`.
+     */
+
+    // Shorthand delegations.
+    var parse = sce.parseAs,
+        getTrusted = sce.getTrusted,
+        trustAs = sce.trustAs;
+
+    forEach(SCE_CONTEXTS, function(enumValue, name) {
+      var lName = lowercase(name);
+      sce[camelCase("parse_as_" + lName)] = function(expr) {
+        return parse(enumValue, expr);
+      };
+      sce[camelCase("get_trusted_" + lName)] = function(value) {
+        return getTrusted(enumValue, value);
+      };
+      sce[camelCase("trust_as_" + lName)] = function(value) {
+        return trustAs(enumValue, value);
+      };
+    });
+
+    return sce;
+  }];
+}
+
+/**
+ * !!! This is an undocumented "private" service !!!
+ *
+ * @name $sniffer
+ * @requires $window
+ * @requires $document
+ *
+ * @property {boolean} history Does the browser support html5 history api ?
+ * @property {boolean} transitions Does the browser support CSS transition events ?
+ * @property {boolean} animations Does the browser support CSS animation events ?
+ *
+ * @description
+ * This is very simple implementation of testing browser's features.
+ */
+function $SnifferProvider() {
+  this.$get = ['$window', '$document', function($window, $document) {
+    var eventSupport = {},
+        android =
+          toInt((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]),
+        boxee = /Boxee/i.test(($window.navigator || {}).userAgent),
+        document = $document[0] || {},
+        vendorPrefix,
+        vendorRegex = /^(Moz|webkit|ms)(?=[A-Z])/,
+        bodyStyle = document.body && document.body.style,
+        transitions = false,
+        animations = false,
+        match;
+
+    if (bodyStyle) {
+      for (var prop in bodyStyle) {
+        if (match = vendorRegex.exec(prop)) {
+          vendorPrefix = match[0];
+          vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1);
+          break;
+        }
+      }
+
+      if (!vendorPrefix) {
+        vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit';
+      }
+
+      transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle));
+      animations  = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle));
+
+      if (android && (!transitions ||  !animations)) {
+        transitions = isString(bodyStyle.webkitTransition);
+        animations = isString(bodyStyle.webkitAnimation);
+      }
+    }
+
+
+    return {
+      // Android has history.pushState, but it does not update location correctly
+      // so let's not use the history API at all.
+      // http://code.google.com/p/android/issues/detail?id=17471
+      // https://github.com/angular/angular.js/issues/904
+
+      // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has
+      // so let's not use the history API also
+      // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined
+      // jshint -W018
+      history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee),
+      // jshint +W018
+      hasEvent: function(event) {
+        // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have
+        // it. In particular the event is not fired when backspace or delete key are pressed or
+        // when cut operation is performed.
+        // IE10+ implements 'input' event but it erroneously fires under various situations,
+        // e.g. when placeholder changes, or a form is focused.
+        if (event === 'input' && msie <= 11) return false;
+
+        if (isUndefined(eventSupport[event])) {
+          var divElm = document.createElement('div');
+          eventSupport[event] = 'on' + event in divElm;
+        }
+
+        return eventSupport[event];
+      },
+      csp: csp(),
+      vendorPrefix: vendorPrefix,
+      transitions: transitions,
+      animations: animations,
+      android: android
+    };
+  }];
+}
+
+var $compileMinErr = minErr('$compile');
+
+/**
+ * @ngdoc service
+ * @name $templateRequest
+ *
+ * @description
+ * The `$templateRequest` service runs security checks then downloads the provided template using
+ * `$http` and, upon success, stores the contents inside of `$templateCache`. If the HTTP request
+ * fails or the response data of the HTTP request is empty, a `$compile` error will be thrown (the
+ * exception can be thwarted by setting the 2nd parameter of the function to true). Note that the
+ * contents of `$templateCache` are trusted, so the call to `$sce.getTrustedUrl(tpl)` is omitted
+ * when `tpl` is of type string and `$templateCache` has the matching entry.
+ *
+ * @param {string|TrustedResourceUrl} tpl The HTTP request template URL
+ * @param {boolean=} ignoreRequestError Whether or not to ignore the exception when the request fails or the template is empty
+ *
+ * @return {Promise} a promise for the HTTP response data of the given URL.
+ *
+ * @property {number} totalPendingRequests total amount of pending template requests being downloaded.
+ */
+function $TemplateRequestProvider() {
+  this.$get = ['$templateCache', '$http', '$q', '$sce', function($templateCache, $http, $q, $sce) {
+    function handleRequestFn(tpl, ignoreRequestError) {
+      handleRequestFn.totalPendingRequests++;
+
+      // We consider the template cache holds only trusted templates, so
+      // there's no need to go through whitelisting again for keys that already
+      // are included in there. This also makes Angular accept any script
+      // directive, no matter its name. However, we still need to unwrap trusted
+      // types.
+      if (!isString(tpl) || !$templateCache.get(tpl)) {
+        tpl = $sce.getTrustedResourceUrl(tpl);
+      }
+
+      var transformResponse = $http.defaults && $http.defaults.transformResponse;
+
+      if (isArray(transformResponse)) {
+        transformResponse = transformResponse.filter(function(transformer) {
+          return transformer !== defaultHttpResponseTransform;
+        });
+      } else if (transformResponse === defaultHttpResponseTransform) {
+        transformResponse = null;
+      }
+
+      var httpOptions = {
+        cache: $templateCache,
+        transformResponse: transformResponse
+      };
+
+      return $http.get(tpl, httpOptions)
+        ['finally'](function() {
+          handleRequestFn.totalPendingRequests--;
+        })
+        .then(function(response) {
+          $templateCache.put(tpl, response.data);
+          return response.data;
+        }, handleError);
+
+      function handleError(resp) {
+        if (!ignoreRequestError) {
+          throw $compileMinErr('tpload', 'Failed to load template: {0} (HTTP status: {1} {2})',
+            tpl, resp.status, resp.statusText);
+        }
+        return $q.reject(resp);
+      }
+    }
+
+    handleRequestFn.totalPendingRequests = 0;
+
+    return handleRequestFn;
+  }];
+}
+
+function $$TestabilityProvider() {
+  this.$get = ['$rootScope', '$browser', '$location',
+       function($rootScope,   $browser,   $location) {
+
+    /**
+     * @name $testability
+     *
+     * @description
+     * The private $$testability service provides a collection of methods for use when debugging
+     * or by automated test and debugging tools.
+     */
+    var testability = {};
+
+    /**
+     * @name $$testability#findBindings
+     *
+     * @description
+     * Returns an array of elements that are bound (via ng-bind or {{}})
+     * to expressions matching the input.
+     *
+     * @param {Element} element The element root to search from.
+     * @param {string} expression The binding expression to match.
+     * @param {boolean} opt_exactMatch If true, only returns exact matches
+     *     for the expression. Filters and whitespace are ignored.
+     */
+    testability.findBindings = function(element, expression, opt_exactMatch) {
+      var bindings = element.getElementsByClassName('ng-binding');
+      var matches = [];
+      forEach(bindings, function(binding) {
+        var dataBinding = angular.element(binding).data('$binding');
+        if (dataBinding) {
+          forEach(dataBinding, function(bindingName) {
+            if (opt_exactMatch) {
+              var matcher = new RegExp('(^|\\s)' + escapeForRegexp(expression) + '(\\s|\\||$)');
+              if (matcher.test(bindingName)) {
+                matches.push(binding);
+              }
+            } else {
+              if (bindingName.indexOf(expression) != -1) {
+                matches.push(binding);
+              }
+            }
+          });
+        }
+      });
+      return matches;
+    };
+
+    /**
+     * @name $$testability#findModels
+     *
+     * @description
+     * Returns an array of elements that are two-way found via ng-model to
+     * expressions matching the input.
+     *
+     * @param {Element} element The element root to search from.
+     * @param {string} expression The model expression to match.
+     * @param {boolean} opt_exactMatch If true, only returns exact matches
+     *     for the expression.
+     */
+    testability.findModels = function(element, expression, opt_exactMatch) {
+      var prefixes = ['ng-', 'data-ng-', 'ng\\:'];
+      for (var p = 0; p < prefixes.length; ++p) {
+        var attributeEquals = opt_exactMatch ? '=' : '*=';
+        var selector = '[' + prefixes[p] + 'model' + attributeEquals + '"' + expression + '"]';
+        var elements = element.querySelectorAll(selector);
+        if (elements.length) {
+          return elements;
+        }
+      }
+    };
+
+    /**
+     * @name $$testability#getLocation
+     *
+     * @description
+     * Shortcut for getting the location in a browser agnostic way. Returns
+     *     the path, search, and hash. (e.g. /path?a=b#hash)
+     */
+    testability.getLocation = function() {
+      return $location.url();
+    };
+
+    /**
+     * @name $$testability#setLocation
+     *
+     * @description
+     * Shortcut for navigating to a location without doing a full page reload.
+     *
+     * @param {string} url The location url (path, search and hash,
+     *     e.g. /path?a=b#hash) to go to.
+     */
+    testability.setLocation = function(url) {
+      if (url !== $location.url()) {
+        $location.url(url);
+        $rootScope.$digest();
+      }
+    };
+
+    /**
+     * @name $$testability#whenStable
+     *
+     * @description
+     * Calls the callback when $timeout and $http requests are completed.
+     *
+     * @param {function} callback
+     */
+    testability.whenStable = function(callback) {
+      $browser.notifyWhenNoOutstandingRequests(callback);
+    };
+
+    return testability;
+  }];
+}
+
+function $TimeoutProvider() {
+  this.$get = ['$rootScope', '$browser', '$q', '$$q', '$exceptionHandler',
+       function($rootScope,   $browser,   $q,   $$q,   $exceptionHandler) {
+
+    var deferreds = {};
+
+
+     /**
+      * @ngdoc service
+      * @name $timeout
+      *
+      * @description
+      * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch
+      * block and delegates any exceptions to
+      * {@link ng.$exceptionHandler $exceptionHandler} service.
+      *
+      * The return value of calling `$timeout` is a promise, which will be resolved when
+      * the delay has passed and the timeout function, if provided, is executed.
+      *
+      * To cancel a timeout request, call `$timeout.cancel(promise)`.
+      *
+      * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to
+      * synchronously flush the queue of deferred functions.
+      *
+      * If you only want a promise that will be resolved after some specified delay
+      * then you can call `$timeout` without the `fn` function.
+      *
+      * @param {function()=} fn A function, whose execution should be delayed.
+      * @param {number=} [delay=0] Delay in milliseconds.
+      * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise
+      *   will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block.
+      * @param {...*=} Pass additional parameters to the executed function.
+      * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this
+      *   promise will be resolved with is the return value of the `fn` function.
+      *
+      */
+    function timeout(fn, delay, invokeApply) {
+      if (!isFunction(fn)) {
+        invokeApply = delay;
+        delay = fn;
+        fn = noop;
+      }
+
+      var args = sliceArgs(arguments, 3),
+          skipApply = (isDefined(invokeApply) && !invokeApply),
+          deferred = (skipApply ? $$q : $q).defer(),
+          promise = deferred.promise,
+          timeoutId;
+
+      timeoutId = $browser.defer(function() {
+        try {
+          deferred.resolve(fn.apply(null, args));
+        } catch (e) {
+          deferred.reject(e);
+          $exceptionHandler(e);
+        }
+        finally {
+          delete deferreds[promise.$$timeoutId];
+        }
+
+        if (!skipApply) $rootScope.$apply();
+      }, delay);
+
+      promise.$$timeoutId = timeoutId;
+      deferreds[timeoutId] = deferred;
+
+      return promise;
+    }
+
+
+     /**
+      * @ngdoc method
+      * @name $timeout#cancel
+      *
+      * @description
+      * Cancels a task associated with the `promise`. As a result of this, the promise will be
+      * resolved with a rejection.
+      *
+      * @param {Promise=} promise Promise returned by the `$timeout` function.
+      * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully
+      *   canceled.
+      */
+    timeout.cancel = function(promise) {
+      if (promise && promise.$$timeoutId in deferreds) {
+        deferreds[promise.$$timeoutId].reject('canceled');
+        delete deferreds[promise.$$timeoutId];
+        return $browser.defer.cancel(promise.$$timeoutId);
+      }
+      return false;
+    };
+
+    return timeout;
+  }];
+}
+
+// NOTE:  The usage of window and document instead of $window and $document here is
+// deliberate.  This service depends on the specific behavior of anchor nodes created by the
+// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and
+// cause us to break tests.  In addition, when the browser resolves a URL for XHR, it
+// doesn't know about mocked locations and resolves URLs to the real document - which is
+// exactly the behavior needed here.  There is little value is mocking these out for this
+// service.
+var urlParsingNode = document.createElement("a");
+var originUrl = urlResolve(window.location.href);
+
+
+/**
+ *
+ * Implementation Notes for non-IE browsers
+ * ----------------------------------------
+ * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM,
+ * results both in the normalizing and parsing of the URL.  Normalizing means that a relative
+ * URL will be resolved into an absolute URL in the context of the application document.
+ * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related
+ * properties are all populated to reflect the normalized URL.  This approach has wide
+ * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc.  See
+ * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html
+ *
+ * Implementation Notes for IE
+ * ---------------------------
+ * IE <= 10 normalizes the URL when assigned to the anchor node similar to the other
+ * browsers.  However, the parsed components will not be set if the URL assigned did not specify
+ * them.  (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.)  We
+ * work around that by performing the parsing in a 2nd step by taking a previously normalized
+ * URL (e.g. by assigning to a.href) and assigning it a.href again.  This correctly populates the
+ * properties such as protocol, hostname, port, etc.
+ *
+ * References:
+ *   http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement
+ *   http://www.aptana.com/reference/html/api/HTMLAnchorElement.html
+ *   http://url.spec.whatwg.org/#urlutils
+ *   https://github.com/angular/angular.js/pull/2902
+ *   http://james.padolsey.com/javascript/parsing-urls-with-the-dom/
+ *
+ * @kind function
+ * @param {string} url The URL to be parsed.
+ * @description Normalizes and parses a URL.
+ * @returns {object} Returns the normalized URL as a dictionary.
+ *
+ *   | member name   | Description    |
+ *   |---------------|----------------|
+ *   | href          | A normalized version of the provided URL if it was not an absolute URL |
+ *   | protocol      | The protocol including the trailing colon                              |
+ *   | host          | The host and port (if the port is non-default) of the normalizedUrl    |
+ *   | search        | The search params, minus the question mark                             |
+ *   | hash          | The hash string, minus the hash symbol
+ *   | hostname      | The hostname
+ *   | port          | The port, without ":"
+ *   | pathname      | The pathname, beginning with "/"
+ *
+ */
+function urlResolve(url) {
+  var href = url;
+
+  if (msie) {
+    // Normalize before parse.  Refer Implementation Notes on why this is
+    // done in two steps on IE.
+    urlParsingNode.setAttribute("href", href);
+    href = urlParsingNode.href;
+  }
+
+  urlParsingNode.setAttribute('href', href);
+
+  // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
+  return {
+    href: urlParsingNode.href,
+    protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
+    host: urlParsingNode.host,
+    search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
+    hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
+    hostname: urlParsingNode.hostname,
+    port: urlParsingNode.port,
+    pathname: (urlParsingNode.pathname.charAt(0) === '/')
+      ? urlParsingNode.pathname
+      : '/' + urlParsingNode.pathname
+  };
+}
+
+/**
+ * Parse a request URL and determine whether this is a same-origin request as the application document.
+ *
+ * @param {string|object} requestUrl The url of the request as a string that will be resolved
+ * or a parsed URL object.
+ * @returns {boolean} Whether the request is for the same origin as the application document.
+ */
+function urlIsSameOrigin(requestUrl) {
+  var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl;
+  return (parsed.protocol === originUrl.protocol &&
+          parsed.host === originUrl.host);
+}
+
+/**
+ * @ngdoc service
+ * @name $window
+ *
+ * @description
+ * A reference to the browser's `window` object. While `window`
+ * is globally available in JavaScript, it causes testability problems, because
+ * it is a global variable. In angular we always refer to it through the
+ * `$window` service, so it may be overridden, removed or mocked for testing.
+ *
+ * Expressions, like the one defined for the `ngClick` directive in the example
+ * below, are evaluated with respect to the current scope.  Therefore, there is
+ * no risk of inadvertently coding in a dependency on a global value in such an
+ * expression.
+ *
+ * @example
+   <example module="windowExample">
+     <file name="index.html">
+       <script>
+         angular.module('windowExample', [])
+           .controller('ExampleController', ['$scope', '$window', function($scope, $window) {
+             $scope.greeting = 'Hello, World!';
+             $scope.doGreeting = function(greeting) {
+               $window.alert(greeting);
+             };
+           }]);
+       </script>
+       <div ng-controller="ExampleController">
+         <input type="text" ng-model="greeting" aria-label="greeting" />
+         <button ng-click="doGreeting(greeting)">ALERT</button>
+       </div>
+     </file>
+     <file name="protractor.js" type="protractor">
+      it('should display the greeting in the input box', function() {
+       element(by.model('greeting')).sendKeys('Hello, E2E Tests');
+       // If we click the button it will block the test runner
+       // element(':button').click();
+      });
+     </file>
+   </example>
+ */
+function $WindowProvider() {
+  this.$get = valueFn(window);
+}
+
+/**
+ * @name $$cookieReader
+ * @requires $document
+ *
+ * @description
+ * This is a private service for reading cookies used by $http and ngCookies
+ *
+ * @return {Object} a key/value map of the current cookies
+ */
+function $$CookieReader($document) {
+  var rawDocument = $document[0] || {};
+  var lastCookies = {};
+  var lastCookieString = '';
+
+  function safeDecodeURIComponent(str) {
+    try {
+      return decodeURIComponent(str);
+    } catch (e) {
+      return str;
+    }
+  }
+
+  return function() {
+    var cookieArray, cookie, i, index, name;
+    var currentCookieString = rawDocument.cookie || '';
+
+    if (currentCookieString !== lastCookieString) {
+      lastCookieString = currentCookieString;
+      cookieArray = lastCookieString.split('; ');
+      lastCookies = {};
+
+      for (i = 0; i < cookieArray.length; i++) {
+        cookie = cookieArray[i];
+        index = cookie.indexOf('=');
+        if (index > 0) { //ignore nameless cookies
+          name = safeDecodeURIComponent(cookie.substring(0, index));
+          // the first value that is seen for a cookie is the most
+          // specific one.  values for the same cookie name that
+          // follow are for less specific paths.
+          if (isUndefined(lastCookies[name])) {
+            lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1));
+          }
+        }
+      }
+    }
+    return lastCookies;
+  };
+}
+
+$$CookieReader.$inject = ['$document'];
+
+function $$CookieReaderProvider() {
+  this.$get = $$CookieReader;
+}
+
+/* global currencyFilter: true,
+ dateFilter: true,
+ filterFilter: true,
+ jsonFilter: true,
+ limitToFilter: true,
+ lowercaseFilter: true,
+ numberFilter: true,
+ orderByFilter: true,
+ uppercaseFilter: true,
+ */
+
+/**
+ * @ngdoc provider
+ * @name $filterProvider
+ * @description
+ *
+ * Filters are just functions which transform input to an output. However filters need to be
+ * Dependency Injected. To achieve this a filter definition consists of a factory function which is
+ * annotated with dependencies and is responsible for creating a filter function.
+ *
+ * <div class="alert alert-warning">
+ * **Note:** Filter names must be valid angular {@link expression} identifiers, such as `uppercase` or `orderBy`.
+ * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace
+ * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores
+ * (`myapp_subsection_filterx`).
+ * </div>
+ *
+ * ```js
+ *   // Filter registration
+ *   function MyModule($provide, $filterProvider) {
+ *     // create a service to demonstrate injection (not always needed)
+ *     $provide.value('greet', function(name){
+ *       return 'Hello ' + name + '!';
+ *     });
+ *
+ *     // register a filter factory which uses the
+ *     // greet service to demonstrate DI.
+ *     $filterProvider.register('greet', function(greet){
+ *       // return the filter function which uses the greet service
+ *       // to generate salutation
+ *       return function(text) {
+ *         // filters need to be forgiving so check input validity
+ *         return text && greet(text) || text;
+ *       };
+ *     });
+ *   }
+ * ```
+ *
+ * The filter function is registered with the `$injector` under the filter name suffix with
+ * `Filter`.
+ *
+ * ```js
+ *   it('should be the same instance', inject(
+ *     function($filterProvider) {
+ *       $filterProvider.register('reverse', function(){
+ *         return ...;
+ *       });
+ *     },
+ *     function($filter, reverseFilter) {
+ *       expect($filter('reverse')).toBe(reverseFilter);
+ *     });
+ * ```
+ *
+ *
+ * For more information about how angular filters work, and how to create your own filters, see
+ * {@link guide/filter Filters} in the Angular Developer Guide.
+ */
+
+/**
+ * @ngdoc service
+ * @name $filter
+ * @kind function
+ * @description
+ * Filters are used for formatting data displayed to the user.
+ *
+ * The general syntax in templates is as follows:
+ *
+ *         {{ expression [| filter_name[:parameter_value] ... ] }}
+ *
+ * @param {String} name Name of the filter function to retrieve
+ * @return {Function} the filter function
+ * @example
+   <example name="$filter" module="filterExample">
+     <file name="index.html">
+       <div ng-controller="MainCtrl">
+        <h3>{{ originalText }}</h3>
+        <h3>{{ filteredText }}</h3>
+       </div>
+     </file>
+
+     <file name="script.js">
+      angular.module('filterExample', [])
+      .controller('MainCtrl', function($scope, $filter) {
+        $scope.originalText = 'hello';
+        $scope.filteredText = $filter('uppercase')($scope.originalText);
+      });
+     </file>
+   </example>
+  */
+$FilterProvider.$inject = ['$provide'];
+function $FilterProvider($provide) {
+  var suffix = 'Filter';
+
+  /**
+   * @ngdoc method
+   * @name $filterProvider#register
+   * @param {string|Object} name Name of the filter function, or an object map of filters where
+   *    the keys are the filter names and the values are the filter factories.
+   *
+   *    <div class="alert alert-warning">
+   *    **Note:** Filter names must be valid angular {@link expression} identifiers, such as `uppercase` or `orderBy`.
+   *    Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace
+   *    your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores
+   *    (`myapp_subsection_filterx`).
+   *    </div>
+    * @param {Function} factory If the first argument was a string, a factory function for the filter to be registered.
+   * @returns {Object} Registered filter instance, or if a map of filters was provided then a map
+   *    of the registered filter instances.
+   */
+  function register(name, factory) {
+    if (isObject(name)) {
+      var filters = {};
+      forEach(name, function(filter, key) {
+        filters[key] = register(key, filter);
+      });
+      return filters;
+    } else {
+      return $provide.factory(name + suffix, factory);
+    }
+  }
+  this.register = register;
+
+  this.$get = ['$injector', function($injector) {
+    return function(name) {
+      return $injector.get(name + suffix);
+    };
+  }];
+
+  ////////////////////////////////////////
+
+  /* global
+    currencyFilter: false,
+    dateFilter: false,
+    filterFilter: false,
+    jsonFilter: false,
+    limitToFilter: false,
+    lowercaseFilter: false,
+    numberFilter: false,
+    orderByFilter: false,
+    uppercaseFilter: false,
+  */
+
+  register('currency', currencyFilter);
+  register('date', dateFilter);
+  register('filter', filterFilter);
+  register('json', jsonFilter);
+  register('limitTo', limitToFilter);
+  register('lowercase', lowercaseFilter);
+  register('number', numberFilter);
+  register('orderBy', orderByFilter);
+  register('uppercase', uppercaseFilter);
+}
+
+/**
+ * @ngdoc filter
+ * @name filter
+ * @kind function
+ *
+ * @description
+ * Selects a subset of items from `array` and returns it as a new array.
+ *
+ * @param {Array} array The source array.
+ * @param {string|Object|function()} expression The predicate to be used for selecting items from
+ *   `array`.
+ *
+ *   Can be one of:
+ *
+ *   - `string`: The string is used for matching against the contents of the `array`. All strings or
+ *     objects with string properties in `array` that match this string will be returned. This also
+ *     applies to nested object properties.
+ *     The predicate can be negated by prefixing the string with `!`.
+ *
+ *   - `Object`: A pattern object can be used to filter specific properties on objects contained
+ *     by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items
+ *     which have property `name` containing "M" and property `phone` containing "1". A special
+ *     property name `$` can be used (as in `{$:"text"}`) to accept a match against any
+ *     property of the object or its nested object properties. That's equivalent to the simple
+ *     substring match with a `string` as described above. The predicate can be negated by prefixing
+ *     the string with `!`.
+ *     For example `{name: "!M"}` predicate will return an array of items which have property `name`
+ *     not containing "M".
+ *
+ *     Note that a named property will match properties on the same level only, while the special
+ *     `$` property will match properties on the same level or deeper. E.g. an array item like
+ *     `{name: {first: 'John', last: 'Doe'}}` will **not** be matched by `{name: 'John'}`, but
+ *     **will** be matched by `{$: 'John'}`.
+ *
+ *   - `function(value, index, array)`: A predicate function can be used to write arbitrary filters.
+ *     The function is called for each element of the array, with the element, its index, and
+ *     the entire array itself as arguments.
+ *
+ *     The final result is an array of those elements that the predicate returned true for.
+ *
+ * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in
+ *     determining if the expected value (from the filter expression) and actual value (from
+ *     the object in the array) should be considered a match.
+ *
+ *   Can be one of:
+ *
+ *   - `function(actual, expected)`:
+ *     The function will be given the object value and the predicate value to compare and
+ *     should return true if both values should be considered equal.
+ *
+ *   - `true`: A shorthand for `function(actual, expected) { return angular.equals(actual, expected)}`.
+ *     This is essentially strict comparison of expected and actual.
+ *
+ *   - `false|undefined`: A short hand for a function which will look for a substring match in case
+ *     insensitive way.
+ *
+ *     Primitive values are converted to strings. Objects are not compared against primitives,
+ *     unless they have a custom `toString` method (e.g. `Date` objects).
+ *
+ * @example
+   <example>
+     <file name="index.html">
+       <div ng-init="friends = [{name:'John', phone:'555-1276'},
+                                {name:'Mary', phone:'800-BIG-MARY'},
+                                {name:'Mike', phone:'555-4321'},
+                                {name:'Adam', phone:'555-5678'},
+                                {name:'Julie', phone:'555-8765'},
+                                {name:'Juliette', phone:'555-5678'}]"></div>
+
+       <label>Search: <input ng-model="searchText"></label>
+       <table id="searchTextResults">
+         <tr><th>Name</th><th>Phone</th></tr>
+         <tr ng-repeat="friend in friends | filter:searchText">
+           <td>{{friend.name}}</td>
+           <td>{{friend.phone}}</td>
+         </tr>
+       </table>
+       <hr>
+       <label>Any: <input ng-model="search.$"></label> <br>
+       <label>Name only <input ng-model="search.name"></label><br>
+       <label>Phone only <input ng-model="search.phone"></label><br>
+       <label>Equality <input type="checkbox" ng-model="strict"></label><br>
+       <table id="searchObjResults">
+         <tr><th>Name</th><th>Phone</th></tr>
+         <tr ng-repeat="friendObj in friends | filter:search:strict">
+           <td>{{friendObj.name}}</td>
+           <td>{{friendObj.phone}}</td>
+         </tr>
+       </table>
+     </file>
+     <file name="protractor.js" type="protractor">
+       var expectFriendNames = function(expectedNames, key) {
+         element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) {
+           arr.forEach(function(wd, i) {
+             expect(wd.getText()).toMatch(expectedNames[i]);
+           });
+         });
+       };
+
+       it('should search across all fields when filtering with a string', function() {
+         var searchText = element(by.model('searchText'));
+         searchText.clear();
+         searchText.sendKeys('m');
+         expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend');
+
+         searchText.clear();
+         searchText.sendKeys('76');
+         expectFriendNames(['John', 'Julie'], 'friend');
+       });
+
+       it('should search in specific fields when filtering with a predicate object', function() {
+         var searchAny = element(by.model('search.$'));
+         searchAny.clear();
+         searchAny.sendKeys('i');
+         expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj');
+       });
+       it('should use a equal comparison when comparator is true', function() {
+         var searchName = element(by.model('search.name'));
+         var strict = element(by.model('strict'));
+         searchName.clear();
+         searchName.sendKeys('Julie');
+         strict.click();
+         expectFriendNames(['Julie'], 'friendObj');
+       });
+     </file>
+   </example>
+ */
+function filterFilter() {
+  return function(array, expression, comparator) {
+    if (!isArrayLike(array)) {
+      if (array == null) {
+        return array;
+      } else {
+        throw minErr('filter')('notarray', 'Expected array but received: {0}', array);
+      }
+    }
+
+    var expressionType = getTypeForFilter(expression);
+    var predicateFn;
+    var matchAgainstAnyProp;
+
+    switch (expressionType) {
+      case 'function':
+        predicateFn = expression;
+        break;
+      case 'boolean':
+      case 'null':
+      case 'number':
+      case 'string':
+        matchAgainstAnyProp = true;
+        //jshint -W086
+      case 'object':
+        //jshint +W086
+        predicateFn = createPredicateFn(expression, comparator, matchAgainstAnyProp);
+        break;
+      default:
+        return array;
+    }
+
+    return Array.prototype.filter.call(array, predicateFn);
+  };
+}
+
+// Helper functions for `filterFilter`
+function createPredicateFn(expression, comparator, matchAgainstAnyProp) {
+  var shouldMatchPrimitives = isObject(expression) && ('$' in expression);
+  var predicateFn;
+
+  if (comparator === true) {
+    comparator = equals;
+  } else if (!isFunction(comparator)) {
+    comparator = function(actual, expected) {
+      if (isUndefined(actual)) {
+        // No substring matching against `undefined`
+        return false;
+      }
+      if ((actual === null) || (expected === null)) {
+        // No substring matching against `null`; only match against `null`
+        return actual === expected;
+      }
+      if (isObject(expected) || (isObject(actual) && !hasCustomToString(actual))) {
+        // Should not compare primitives against objects, unless they have custom `toString` method
+        return false;
+      }
+
+      actual = lowercase('' + actual);
+      expected = lowercase('' + expected);
+      return actual.indexOf(expected) !== -1;
+    };
+  }
+
+  predicateFn = function(item) {
+    if (shouldMatchPrimitives && !isObject(item)) {
+      return deepCompare(item, expression.$, comparator, false);
+    }
+    return deepCompare(item, expression, comparator, matchAgainstAnyProp);
+  };
+
+  return predicateFn;
+}
+
+function deepCompare(actual, expected, comparator, matchAgainstAnyProp, dontMatchWholeObject) {
+  var actualType = getTypeForFilter(actual);
+  var expectedType = getTypeForFilter(expected);
+
+  if ((expectedType === 'string') && (expected.charAt(0) === '!')) {
+    return !deepCompare(actual, expected.substring(1), comparator, matchAgainstAnyProp);
+  } else if (isArray(actual)) {
+    // In case `actual` is an array, consider it a match
+    // if ANY of it's items matches `expected`
+    return actual.some(function(item) {
+      return deepCompare(item, expected, comparator, matchAgainstAnyProp);
+    });
+  }
+
+  switch (actualType) {
+    case 'object':
+      var key;
+      if (matchAgainstAnyProp) {
+        for (key in actual) {
+          if ((key.charAt(0) !== '$') && deepCompare(actual[key], expected, comparator, true)) {
+            return true;
+          }
+        }
+        return dontMatchWholeObject ? false : deepCompare(actual, expected, comparator, false);
+      } else if (expectedType === 'object') {
+        for (key in expected) {
+          var expectedVal = expected[key];
+          if (isFunction(expectedVal) || isUndefined(expectedVal)) {
+            continue;
+          }
+
+          var matchAnyProperty = key === '$';
+          var actualVal = matchAnyProperty ? actual : actual[key];
+          if (!deepCompare(actualVal, expectedVal, comparator, matchAnyProperty, matchAnyProperty)) {
+            return false;
+          }
+        }
+        return true;
+      } else {
+        return comparator(actual, expected);
+      }
+      break;
+    case 'function':
+      return false;
+    default:
+      return comparator(actual, expected);
+  }
+}
+
+// Used for easily differentiating between `null` and actual `object`
+function getTypeForFilter(val) {
+  return (val === null) ? 'null' : typeof val;
+}
+
+/**
+ * @ngdoc filter
+ * @name currency
+ * @kind function
+ *
+ * @description
+ * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default
+ * symbol for current locale is used.
+ *
+ * @param {number} amount Input to filter.
+ * @param {string=} symbol Currency symbol or identifier to be displayed.
+ * @param {number=} fractionSize Number of decimal places to round the amount to, defaults to default max fraction size for current locale
+ * @returns {string} Formatted number.
+ *
+ *
+ * @example
+   <example module="currencyExample">
+     <file name="index.html">
+       <script>
+         angular.module('currencyExample', [])
+           .controller('ExampleController', ['$scope', function($scope) {
+             $scope.amount = 1234.56;
+           }]);
+       </script>
+       <div ng-controller="ExampleController">
+         <input type="number" ng-model="amount" aria-label="amount"> <br>
+         default currency symbol ($): <span id="currency-default">{{amount | currency}}</span><br>
+         custom currency identifier (USD$): <span id="currency-custom">{{amount | currency:"USD$"}}</span>
+         no fractions (0): <span id="currency-no-fractions">{{amount | currency:"USD$":0}}</span>
+       </div>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should init with 1234.56', function() {
+         expect(element(by.id('currency-default')).getText()).toBe('$1,234.56');
+         expect(element(by.id('currency-custom')).getText()).toBe('USD$1,234.56');
+         expect(element(by.id('currency-no-fractions')).getText()).toBe('USD$1,235');
+       });
+       it('should update', function() {
+         if (browser.params.browser == 'safari') {
+           // Safari does not understand the minus key. See
+           // https://github.com/angular/protractor/issues/481
+           return;
+         }
+         element(by.model('amount')).clear();
+         element(by.model('amount')).sendKeys('-1234');
+         expect(element(by.id('currency-default')).getText()).toBe('-$1,234.00');
+         expect(element(by.id('currency-custom')).getText()).toBe('-USD$1,234.00');
+         expect(element(by.id('currency-no-fractions')).getText()).toBe('-USD$1,234');
+       });
+     </file>
+   </example>
+ */
+currencyFilter.$inject = ['$locale'];
+function currencyFilter($locale) {
+  var formats = $locale.NUMBER_FORMATS;
+  return function(amount, currencySymbol, fractionSize) {
+    if (isUndefined(currencySymbol)) {
+      currencySymbol = formats.CURRENCY_SYM;
+    }
+
+    if (isUndefined(fractionSize)) {
+      fractionSize = formats.PATTERNS[1].maxFrac;
+    }
+
+    // if null or undefined pass it through
+    return (amount == null)
+        ? amount
+        : formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, fractionSize).
+            replace(/\u00A4/g, currencySymbol);
+  };
+}
+
+/**
+ * @ngdoc filter
+ * @name number
+ * @kind function
+ *
+ * @description
+ * Formats a number as text.
+ *
+ * If the input is null or undefined, it will just be returned.
+ * If the input is infinite (Infinity/-Infinity) the Infinity symbol '∞' is returned.
+ * If the input is not a number an empty string is returned.
+ *
+ *
+ * @param {number|string} number Number to format.
+ * @param {(number|string)=} fractionSize Number of decimal places to round the number to.
+ * If this is not provided then the fraction size is computed from the current locale's number
+ * formatting pattern. In the case of the default locale, it will be 3.
+ * @returns {string} Number rounded to decimalPlaces and places a “,” after each third digit.
+ *
+ * @example
+   <example module="numberFilterExample">
+     <file name="index.html">
+       <script>
+         angular.module('numberFilterExample', [])
+           .controller('ExampleController', ['$scope', function($scope) {
+             $scope.val = 1234.56789;
+           }]);
+       </script>
+       <div ng-controller="ExampleController">
+         <label>Enter number: <input ng-model='val'></label><br>
+         Default formatting: <span id='number-default'>{{val | number}}</span><br>
+         No fractions: <span>{{val | number:0}}</span><br>
+         Negative number: <span>{{-val | number:4}}</span>
+       </div>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should format numbers', function() {
+         expect(element(by.id('number-default')).getText()).toBe('1,234.568');
+         expect(element(by.binding('val | number:0')).getText()).toBe('1,235');
+         expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679');
+       });
+
+       it('should update', function() {
+         element(by.model('val')).clear();
+         element(by.model('val')).sendKeys('3374.333');
+         expect(element(by.id('number-default')).getText()).toBe('3,374.333');
+         expect(element(by.binding('val | number:0')).getText()).toBe('3,374');
+         expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330');
+      });
+     </file>
+   </example>
+ */
+
+
+numberFilter.$inject = ['$locale'];
+function numberFilter($locale) {
+  var formats = $locale.NUMBER_FORMATS;
+  return function(number, fractionSize) {
+
+    // if null or undefined pass it through
+    return (number == null)
+        ? number
+        : formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP,
+                       fractionSize);
+  };
+}
+
+var DECIMAL_SEP = '.';
+function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) {
+  if (isObject(number)) return '';
+
+  var isNegative = number < 0;
+  number = Math.abs(number);
+
+  var isInfinity = number === Infinity;
+  if (!isInfinity && !isFinite(number)) return '';
+
+  var numStr = number + '',
+      formatedText = '',
+      hasExponent = false,
+      parts = [];
+
+  if (isInfinity) formatedText = '\u221e';
+
+  if (!isInfinity && numStr.indexOf('e') !== -1) {
+    var match = numStr.match(/([\d\.]+)e(-?)(\d+)/);
+    if (match && match[2] == '-' && match[3] > fractionSize + 1) {
+      number = 0;
+    } else {
+      formatedText = numStr;
+      hasExponent = true;
+    }
+  }
+
+  if (!isInfinity && !hasExponent) {
+    var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length;
+
+    // determine fractionSize if it is not specified
+    if (isUndefined(fractionSize)) {
+      fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac);
+    }
+
+    // safely round numbers in JS without hitting imprecisions of floating-point arithmetics
+    // inspired by:
+    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round
+    number = +(Math.round(+(number.toString() + 'e' + fractionSize)).toString() + 'e' + -fractionSize);
+
+    var fraction = ('' + number).split(DECIMAL_SEP);
+    var whole = fraction[0];
+    fraction = fraction[1] || '';
+
+    var i, pos = 0,
+        lgroup = pattern.lgSize,
+        group = pattern.gSize;
+
+    if (whole.length >= (lgroup + group)) {
+      pos = whole.length - lgroup;
+      for (i = 0; i < pos; i++) {
+        if ((pos - i) % group === 0 && i !== 0) {
+          formatedText += groupSep;
+        }
+        formatedText += whole.charAt(i);
+      }
+    }
+
+    for (i = pos; i < whole.length; i++) {
+      if ((whole.length - i) % lgroup === 0 && i !== 0) {
+        formatedText += groupSep;
+      }
+      formatedText += whole.charAt(i);
+    }
+
+    // format fraction part.
+    while (fraction.length < fractionSize) {
+      fraction += '0';
+    }
+
+    if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize);
+  } else {
+    if (fractionSize > 0 && number < 1) {
+      formatedText = number.toFixed(fractionSize);
+      number = parseFloat(formatedText);
+      formatedText = formatedText.replace(DECIMAL_SEP, decimalSep);
+    }
+  }
+
+  if (number === 0) {
+    isNegative = false;
+  }
+
+  parts.push(isNegative ? pattern.negPre : pattern.posPre,
+             formatedText,
+             isNegative ? pattern.negSuf : pattern.posSuf);
+  return parts.join('');
+}
+
+function padNumber(num, digits, trim) {
+  var neg = '';
+  if (num < 0) {
+    neg =  '-';
+    num = -num;
+  }
+  num = '' + num;
+  while (num.length < digits) num = '0' + num;
+  if (trim) {
+    num = num.substr(num.length - digits);
+  }
+  return neg + num;
+}
+
+
+function dateGetter(name, size, offset, trim) {
+  offset = offset || 0;
+  return function(date) {
+    var value = date['get' + name]();
+    if (offset > 0 || value > -offset) {
+      value += offset;
+    }
+    if (value === 0 && offset == -12) value = 12;
+    return padNumber(value, size, trim);
+  };
+}
+
+function dateStrGetter(name, shortForm) {
+  return function(date, formats) {
+    var value = date['get' + name]();
+    var get = uppercase(shortForm ? ('SHORT' + name) : name);
+
+    return formats[get][value];
+  };
+}
+
+function timeZoneGetter(date, formats, offset) {
+  var zone = -1 * offset;
+  var paddedZone = (zone >= 0) ? "+" : "";
+
+  paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) +
+                padNumber(Math.abs(zone % 60), 2);
+
+  return paddedZone;
+}
+
+function getFirstThursdayOfYear(year) {
+    // 0 = index of January
+    var dayOfWeekOnFirst = (new Date(year, 0, 1)).getDay();
+    // 4 = index of Thursday (+1 to account for 1st = 5)
+    // 11 = index of *next* Thursday (+1 account for 1st = 12)
+    return new Date(year, 0, ((dayOfWeekOnFirst <= 4) ? 5 : 12) - dayOfWeekOnFirst);
+}
+
+function getThursdayThisWeek(datetime) {
+    return new Date(datetime.getFullYear(), datetime.getMonth(),
+      // 4 = index of Thursday
+      datetime.getDate() + (4 - datetime.getDay()));
+}
+
+function weekGetter(size) {
+   return function(date) {
+      var firstThurs = getFirstThursdayOfYear(date.getFullYear()),
+         thisThurs = getThursdayThisWeek(date);
+
+      var diff = +thisThurs - +firstThurs,
+         result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week
+
+      return padNumber(result, size);
+   };
+}
+
+function ampmGetter(date, formats) {
+  return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1];
+}
+
+function eraGetter(date, formats) {
+  return date.getFullYear() <= 0 ? formats.ERAS[0] : formats.ERAS[1];
+}
+
+function longEraGetter(date, formats) {
+  return date.getFullYear() <= 0 ? formats.ERANAMES[0] : formats.ERANAMES[1];
+}
+
+var DATE_FORMATS = {
+  yyyy: dateGetter('FullYear', 4),
+    yy: dateGetter('FullYear', 2, 0, true),
+     y: dateGetter('FullYear', 1),
+  MMMM: dateStrGetter('Month'),
+   MMM: dateStrGetter('Month', true),
+    MM: dateGetter('Month', 2, 1),
+     M: dateGetter('Month', 1, 1),
+    dd: dateGetter('Date', 2),
+     d: dateGetter('Date', 1),
+    HH: dateGetter('Hours', 2),
+     H: dateGetter('Hours', 1),
+    hh: dateGetter('Hours', 2, -12),
+     h: dateGetter('Hours', 1, -12),
+    mm: dateGetter('Minutes', 2),
+     m: dateGetter('Minutes', 1),
+    ss: dateGetter('Seconds', 2),
+     s: dateGetter('Seconds', 1),
+     // while ISO 8601 requires fractions to be prefixed with `.` or `,`
+     // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions
+   sss: dateGetter('Milliseconds', 3),
+  EEEE: dateStrGetter('Day'),
+   EEE: dateStrGetter('Day', true),
+     a: ampmGetter,
+     Z: timeZoneGetter,
+    ww: weekGetter(2),
+     w: weekGetter(1),
+     G: eraGetter,
+     GG: eraGetter,
+     GGG: eraGetter,
+     GGGG: longEraGetter
+};
+
+var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,
+    NUMBER_STRING = /^\-?\d+$/;
+
+/**
+ * @ngdoc filter
+ * @name date
+ * @kind function
+ *
+ * @description
+ *   Formats `date` to a string based on the requested `format`.
+ *
+ *   `format` string can be composed of the following elements:
+ *
+ *   * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010)
+ *   * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10)
+ *   * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199)
+ *   * `'MMMM'`: Month in year (January-December)
+ *   * `'MMM'`: Month in year (Jan-Dec)
+ *   * `'MM'`: Month in year, padded (01-12)
+ *   * `'M'`: Month in year (1-12)
+ *   * `'dd'`: Day in month, padded (01-31)
+ *   * `'d'`: Day in month (1-31)
+ *   * `'EEEE'`: Day in Week,(Sunday-Saturday)
+ *   * `'EEE'`: Day in Week, (Sun-Sat)
+ *   * `'HH'`: Hour in day, padded (00-23)
+ *   * `'H'`: Hour in day (0-23)
+ *   * `'hh'`: Hour in AM/PM, padded (01-12)
+ *   * `'h'`: Hour in AM/PM, (1-12)
+ *   * `'mm'`: Minute in hour, padded (00-59)
+ *   * `'m'`: Minute in hour (0-59)
+ *   * `'ss'`: Second in minute, padded (00-59)
+ *   * `'s'`: Second in minute (0-59)
+ *   * `'sss'`: Millisecond in second, padded (000-999)
+ *   * `'a'`: AM/PM marker
+ *   * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200)
+ *   * `'ww'`: Week of year, padded (00-53). Week 01 is the week with the first Thursday of the year
+ *   * `'w'`: Week of year (0-53). Week 1 is the week with the first Thursday of the year
+ *   * `'G'`, `'GG'`, `'GGG'`: The abbreviated form of the era string (e.g. 'AD')
+ *   * `'GGGG'`: The long form of the era string (e.g. 'Anno Domini')
+ *
+ *   `format` string can also be one of the following predefined
+ *   {@link guide/i18n localizable formats}:
+ *
+ *   * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale
+ *     (e.g. Sep 3, 2010 12:05:08 PM)
+ *   * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US  locale (e.g. 9/3/10 12:05 PM)
+ *   * `'fullDate'`: equivalent to `'EEEE, MMMM d, y'` for en_US  locale
+ *     (e.g. Friday, September 3, 2010)
+ *   * `'longDate'`: equivalent to `'MMMM d, y'` for en_US  locale (e.g. September 3, 2010)
+ *   * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US  locale (e.g. Sep 3, 2010)
+ *   * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10)
+ *   * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 PM)
+ *   * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 PM)
+ *
+ *   `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g.
+ *   `"h 'in the morning'"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence
+ *   (e.g. `"h 'o''clock'"`).
+ *
+ * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or
+ *    number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its
+ *    shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is
+ *    specified in the string input, the time is considered to be in the local timezone.
+ * @param {string=} format Formatting rules (see Description). If not specified,
+ *    `mediumDate` is used.
+ * @param {string=} timezone Timezone to be used for formatting. It understands UTC/GMT and the
+ *    continental US time zone abbreviations, but for general use, use a time zone offset, for
+ *    example, `'+0430'` (4 hours, 30 minutes east of the Greenwich meridian)
+ *    If not specified, the timezone of the browser will be used.
+ * @returns {string} Formatted string or the input if input is not recognized as date/millis.
+ *
+ * @example
+   <example>
+     <file name="index.html">
+       <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>:
+           <span>{{1288323623006 | date:'medium'}}</span><br>
+       <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>:
+          <span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br>
+       <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>:
+          <span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br>
+       <span ng-non-bindable>{{1288323623006 | date:"MM/dd/yyyy 'at' h:mma"}}</span>:
+          <span>{{'1288323623006' | date:"MM/dd/yyyy 'at' h:mma"}}</span><br>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should format date', function() {
+         expect(element(by.binding("1288323623006 | date:'medium'")).getText()).
+            toMatch(/Oct 2\d, 2010 \d{1,2}:\d{2}:\d{2} (AM|PM)/);
+         expect(element(by.binding("1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'")).getText()).
+            toMatch(/2010\-10\-2\d \d{2}:\d{2}:\d{2} (\-|\+)?\d{4}/);
+         expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()).
+            toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/);
+         expect(element(by.binding("'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"")).getText()).
+            toMatch(/10\/2\d\/2010 at \d{1,2}:\d{2}(AM|PM)/);
+       });
+     </file>
+   </example>
+ */
+dateFilter.$inject = ['$locale'];
+function dateFilter($locale) {
+
+
+  var R_ISO8601_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
+                     // 1        2       3         4          5          6          7          8  9     10      11
+  function jsonStringToDate(string) {
+    var match;
+    if (match = string.match(R_ISO8601_STR)) {
+      var date = new Date(0),
+          tzHour = 0,
+          tzMin  = 0,
+          dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear,
+          timeSetter = match[8] ? date.setUTCHours : date.setHours;
+
+      if (match[9]) {
+        tzHour = toInt(match[9] + match[10]);
+        tzMin = toInt(match[9] + match[11]);
+      }
+      dateSetter.call(date, toInt(match[1]), toInt(match[2]) - 1, toInt(match[3]));
+      var h = toInt(match[4] || 0) - tzHour;
+      var m = toInt(match[5] || 0) - tzMin;
+      var s = toInt(match[6] || 0);
+      var ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000);
+      timeSetter.call(date, h, m, s, ms);
+      return date;
+    }
+    return string;
+  }
+
+
+  return function(date, format, timezone) {
+    var text = '',
+        parts = [],
+        fn, match;
+
+    format = format || 'mediumDate';
+    format = $locale.DATETIME_FORMATS[format] || format;
+    if (isString(date)) {
+      date = NUMBER_STRING.test(date) ? toInt(date) : jsonStringToDate(date);
+    }
+
+    if (isNumber(date)) {
+      date = new Date(date);
+    }
+
+    if (!isDate(date) || !isFinite(date.getTime())) {
+      return date;
+    }
+
+    while (format) {
+      match = DATE_FORMATS_SPLIT.exec(format);
+      if (match) {
+        parts = concat(parts, match, 1);
+        format = parts.pop();
+      } else {
+        parts.push(format);
+        format = null;
+      }
+    }
+
+    var dateTimezoneOffset = date.getTimezoneOffset();
+    if (timezone) {
+      dateTimezoneOffset = timezoneToOffset(timezone, date.getTimezoneOffset());
+      date = convertTimezoneToLocal(date, timezone, true);
+    }
+    forEach(parts, function(value) {
+      fn = DATE_FORMATS[value];
+      text += fn ? fn(date, $locale.DATETIME_FORMATS, dateTimezoneOffset)
+                 : value.replace(/(^'|'$)/g, '').replace(/''/g, "'");
+    });
+
+    return text;
+  };
+}
+
+
+/**
+ * @ngdoc filter
+ * @name json
+ * @kind function
+ *
+ * @description
+ *   Allows you to convert a JavaScript object into JSON string.
+ *
+ *   This filter is mostly useful for debugging. When using the double curly {{value}} notation
+ *   the binding is automatically converted to JSON.
+ *
+ * @param {*} object Any JavaScript object (including arrays and primitive types) to filter.
+ * @param {number=} spacing The number of spaces to use per indentation, defaults to 2.
+ * @returns {string} JSON string.
+ *
+ *
+ * @example
+   <example>
+     <file name="index.html">
+       <pre id="default-spacing">{{ {'name':'value'} | json }}</pre>
+       <pre id="custom-spacing">{{ {'name':'value'} | json:4 }}</pre>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should jsonify filtered objects', function() {
+         expect(element(by.id('default-spacing')).getText()).toMatch(/\{\n  "name": ?"value"\n}/);
+         expect(element(by.id('custom-spacing')).getText()).toMatch(/\{\n    "name": ?"value"\n}/);
+       });
+     </file>
+   </example>
+ *
+ */
+function jsonFilter() {
+  return function(object, spacing) {
+    if (isUndefined(spacing)) {
+        spacing = 2;
+    }
+    return toJson(object, spacing);
+  };
+}
+
+
+/**
+ * @ngdoc filter
+ * @name lowercase
+ * @kind function
+ * @description
+ * Converts string to lowercase.
+ * @see angular.lowercase
+ */
+var lowercaseFilter = valueFn(lowercase);
+
+
+/**
+ * @ngdoc filter
+ * @name uppercase
+ * @kind function
+ * @description
+ * Converts string to uppercase.
+ * @see angular.uppercase
+ */
+var uppercaseFilter = valueFn(uppercase);
+
+/**
+ * @ngdoc filter
+ * @name limitTo
+ * @kind function
+ *
+ * @description
+ * Creates a new array or string containing only a specified number of elements. The elements
+ * are taken from either the beginning or the end of the source array, string or number, as specified by
+ * the value and sign (positive or negative) of `limit`. If a number is used as input, it is
+ * converted to a string.
+ *
+ * @param {Array|string|number} input Source array, string or number to be limited.
+ * @param {string|number} limit The length of the returned array or string. If the `limit` number
+ *     is positive, `limit` number of items from the beginning of the source array/string are copied.
+ *     If the number is negative, `limit` number  of items from the end of the source array/string
+ *     are copied. The `limit` will be trimmed if it exceeds `array.length`. If `limit` is undefined,
+ *     the input will be returned unchanged.
+ * @param {(string|number)=} begin Index at which to begin limitation. As a negative index, `begin`
+ *     indicates an offset from the end of `input`. Defaults to `0`.
+ * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array
+ *     had less than `limit` elements.
+ *
+ * @example
+   <example module="limitToExample">
+     <file name="index.html">
+       <script>
+         angular.module('limitToExample', [])
+           .controller('ExampleController', ['$scope', function($scope) {
+             $scope.numbers = [1,2,3,4,5,6,7,8,9];
+             $scope.letters = "abcdefghi";
+             $scope.longNumber = 2345432342;
+             $scope.numLimit = 3;
+             $scope.letterLimit = 3;
+             $scope.longNumberLimit = 3;
+           }]);
+       </script>
+       <div ng-controller="ExampleController">
+         <label>
+            Limit {{numbers}} to:
+            <input type="number" step="1" ng-model="numLimit">
+         </label>
+         <p>Output numbers: {{ numbers | limitTo:numLimit }}</p>
+         <label>
+            Limit {{letters}} to:
+            <input type="number" step="1" ng-model="letterLimit">
+         </label>
+         <p>Output letters: {{ letters | limitTo:letterLimit }}</p>
+         <label>
+            Limit {{longNumber}} to:
+            <input type="number" step="1" ng-model="longNumberLimit">
+         </label>
+         <p>Output long number: {{ longNumber | limitTo:longNumberLimit }}</p>
+       </div>
+     </file>
+     <file name="protractor.js" type="protractor">
+       var numLimitInput = element(by.model('numLimit'));
+       var letterLimitInput = element(by.model('letterLimit'));
+       var longNumberLimitInput = element(by.model('longNumberLimit'));
+       var limitedNumbers = element(by.binding('numbers | limitTo:numLimit'));
+       var limitedLetters = element(by.binding('letters | limitTo:letterLimit'));
+       var limitedLongNumber = element(by.binding('longNumber | limitTo:longNumberLimit'));
+
+       it('should limit the number array to first three items', function() {
+         expect(numLimitInput.getAttribute('value')).toBe('3');
+         expect(letterLimitInput.getAttribute('value')).toBe('3');
+         expect(longNumberLimitInput.getAttribute('value')).toBe('3');
+         expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]');
+         expect(limitedLetters.getText()).toEqual('Output letters: abc');
+         expect(limitedLongNumber.getText()).toEqual('Output long number: 234');
+       });
+
+       // There is a bug in safari and protractor that doesn't like the minus key
+       // it('should update the output when -3 is entered', function() {
+       //   numLimitInput.clear();
+       //   numLimitInput.sendKeys('-3');
+       //   letterLimitInput.clear();
+       //   letterLimitInput.sendKeys('-3');
+       //   longNumberLimitInput.clear();
+       //   longNumberLimitInput.sendKeys('-3');
+       //   expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]');
+       //   expect(limitedLetters.getText()).toEqual('Output letters: ghi');
+       //   expect(limitedLongNumber.getText()).toEqual('Output long number: 342');
+       // });
+
+       it('should not exceed the maximum size of input array', function() {
+         numLimitInput.clear();
+         numLimitInput.sendKeys('100');
+         letterLimitInput.clear();
+         letterLimitInput.sendKeys('100');
+         longNumberLimitInput.clear();
+         longNumberLimitInput.sendKeys('100');
+         expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]');
+         expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi');
+         expect(limitedLongNumber.getText()).toEqual('Output long number: 2345432342');
+       });
+     </file>
+   </example>
+*/
+function limitToFilter() {
+  return function(input, limit, begin) {
+    if (Math.abs(Number(limit)) === Infinity) {
+      limit = Number(limit);
+    } else {
+      limit = toInt(limit);
+    }
+    if (isNaN(limit)) return input;
+
+    if (isNumber(input)) input = input.toString();
+    if (!isArray(input) && !isString(input)) return input;
+
+    begin = (!begin || isNaN(begin)) ? 0 : toInt(begin);
+    begin = (begin < 0) ? Math.max(0, input.length + begin) : begin;
+
+    if (limit >= 0) {
+      return input.slice(begin, begin + limit);
+    } else {
+      if (begin === 0) {
+        return input.slice(limit, input.length);
+      } else {
+        return input.slice(Math.max(0, begin + limit), begin);
+      }
+    }
+  };
+}
+
+/**
+ * @ngdoc filter
+ * @name orderBy
+ * @kind function
+ *
+ * @description
+ * Orders a specified `array` by the `expression` predicate. It is ordered alphabetically
+ * for strings and numerically for numbers. Note: if you notice numbers are not being sorted
+ * as expected, make sure they are actually being saved as numbers and not strings.
+ *
+ * @param {Array} array The array to sort.
+ * @param {function(*)|string|Array.<(function(*)|string)>=} expression A predicate to be
+ *    used by the comparator to determine the order of elements.
+ *
+ *    Can be one of:
+ *
+ *    - `function`: Getter function. The result of this function will be sorted using the
+ *      `<`, `===`, `>` operator.
+ *    - `string`: An Angular expression. The result of this expression is used to compare elements
+ *      (for example `name` to sort by a property called `name` or `name.substr(0, 3)` to sort by
+ *      3 first characters of a property called `name`). The result of a constant expression
+ *      is interpreted as a property name to be used in comparisons (for example `"special name"`
+ *      to sort object by the value of their `special name` property). An expression can be
+ *      optionally prefixed with `+` or `-` to control ascending or descending sort order
+ *      (for example, `+name` or `-name`). If no property is provided, (e.g. `'+'`) then the array
+ *      element itself is used to compare where sorting.
+ *    - `Array`: An array of function or string predicates. The first predicate in the array
+ *      is used for sorting, but when two items are equivalent, the next predicate is used.
+ *
+ *    If the predicate is missing or empty then it defaults to `'+'`.
+ *
+ * @param {boolean=} reverse Reverse the order of the array.
+ * @returns {Array} Sorted copy of the source array.
+ *
+ *
+ * @example
+ * The example below demonstrates a simple ngRepeat, where the data is sorted
+ * by age in descending order (predicate is set to `'-age'`).
+ * `reverse` is not set, which means it defaults to `false`.
+   <example module="orderByExample">
+     <file name="index.html">
+       <script>
+         angular.module('orderByExample', [])
+           .controller('ExampleController', ['$scope', function($scope) {
+             $scope.friends =
+                 [{name:'John', phone:'555-1212', age:10},
+                  {name:'Mary', phone:'555-9876', age:19},
+                  {name:'Mike', phone:'555-4321', age:21},
+                  {name:'Adam', phone:'555-5678', age:35},
+                  {name:'Julie', phone:'555-8765', age:29}];
+           }]);
+       </script>
+       <div ng-controller="ExampleController">
+         <table class="friend">
+           <tr>
+             <th>Name</th>
+             <th>Phone Number</th>
+             <th>Age</th>
+           </tr>
+           <tr ng-repeat="friend in friends | orderBy:'-age'">
+             <td>{{friend.name}}</td>
+             <td>{{friend.phone}}</td>
+             <td>{{friend.age}}</td>
+           </tr>
+         </table>
+       </div>
+     </file>
+   </example>
+ *
+ * The predicate and reverse parameters can be controlled dynamically through scope properties,
+ * as shown in the next example.
+ * @example
+   <example module="orderByExample">
+     <file name="index.html">
+       <script>
+         angular.module('orderByExample', [])
+           .controller('ExampleController', ['$scope', function($scope) {
+             $scope.friends =
+                 [{name:'John', phone:'555-1212', age:10},
+                  {name:'Mary', phone:'555-9876', age:19},
+                  {name:'Mike', phone:'555-4321', age:21},
+                  {name:'Adam', phone:'555-5678', age:35},
+                  {name:'Julie', phone:'555-8765', age:29}];
+             $scope.predicate = 'age';
+             $scope.reverse = true;
+             $scope.order = function(predicate) {
+               $scope.reverse = ($scope.predicate === predicate) ? !$scope.reverse : false;
+               $scope.predicate = predicate;
+             };
+           }]);
+       </script>
+       <style type="text/css">
+         .sortorder:after {
+           content: '\25b2';
+         }
+         .sortorder.reverse:after {
+           content: '\25bc';
+         }
+       </style>
+       <div ng-controller="ExampleController">
+         <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre>
+         <hr/>
+         [ <a href="" ng-click="predicate=''">unsorted</a> ]
+         <table class="friend">
+           <tr>
+             <th>
+               <a href="" ng-click="order('name')">Name</a>
+               <span class="sortorder" ng-show="predicate === 'name'" ng-class="{reverse:reverse}"></span>
+             </th>
+             <th>
+               <a href="" ng-click="order('phone')">Phone Number</a>
+               <span class="sortorder" ng-show="predicate === 'phone'" ng-class="{reverse:reverse}"></span>
+             </th>
+             <th>
+               <a href="" ng-click="order('age')">Age</a>
+               <span class="sortorder" ng-show="predicate === 'age'" ng-class="{reverse:reverse}"></span>
+             </th>
+           </tr>
+           <tr ng-repeat="friend in friends | orderBy:predicate:reverse">
+             <td>{{friend.name}}</td>
+             <td>{{friend.phone}}</td>
+             <td>{{friend.age}}</td>
+           </tr>
+         </table>
+       </div>
+     </file>
+   </example>
+ *
+ * It's also possible to call the orderBy filter manually, by injecting `$filter`, retrieving the
+ * filter routine with `$filter('orderBy')`, and calling the returned filter routine with the
+ * desired parameters.
+ *
+ * Example:
+ *
+ * @example
+  <example module="orderByExample">
+    <file name="index.html">
+      <div ng-controller="ExampleController">
+        <table class="friend">
+          <tr>
+            <th><a href="" ng-click="reverse=false;order('name', false)">Name</a>
+              (<a href="" ng-click="order('-name',false)">^</a>)</th>
+            <th><a href="" ng-click="reverse=!reverse;order('phone', reverse)">Phone Number</a></th>
+            <th><a href="" ng-click="reverse=!reverse;order('age',reverse)">Age</a></th>
+          </tr>
+          <tr ng-repeat="friend in friends">
+            <td>{{friend.name}}</td>
+            <td>{{friend.phone}}</td>
+            <td>{{friend.age}}</td>
+          </tr>
+        </table>
+      </div>
+    </file>
+
+    <file name="script.js">
+      angular.module('orderByExample', [])
+        .controller('ExampleController', ['$scope', '$filter', function($scope, $filter) {
+          var orderBy = $filter('orderBy');
+          $scope.friends = [
+            { name: 'John',    phone: '555-1212',    age: 10 },
+            { name: 'Mary',    phone: '555-9876',    age: 19 },
+            { name: 'Mike',    phone: '555-4321',    age: 21 },
+            { name: 'Adam',    phone: '555-5678',    age: 35 },
+            { name: 'Julie',   phone: '555-8765',    age: 29 }
+          ];
+          $scope.order = function(predicate, reverse) {
+            $scope.friends = orderBy($scope.friends, predicate, reverse);
+          };
+          $scope.order('-age',false);
+        }]);
+    </file>
+</example>
+ */
+orderByFilter.$inject = ['$parse'];
+function orderByFilter($parse) {
+  return function(array, sortPredicate, reverseOrder) {
+
+    if (!(isArrayLike(array))) return array;
+
+    if (!isArray(sortPredicate)) { sortPredicate = [sortPredicate]; }
+    if (sortPredicate.length === 0) { sortPredicate = ['+']; }
+
+    var predicates = processPredicates(sortPredicate, reverseOrder);
+    // Add a predicate at the end that evaluates to the element index. This makes the
+    // sort stable as it works as a tie-breaker when all the input predicates cannot
+    // distinguish between two elements.
+    predicates.push({ get: function() { return {}; }, descending: reverseOrder ? -1 : 1});
+
+    // The next three lines are a version of a Swartzian Transform idiom from Perl
+    // (sometimes called the Decorate-Sort-Undecorate idiom)
+    // See https://en.wikipedia.org/wiki/Schwartzian_transform
+    var compareValues = Array.prototype.map.call(array, getComparisonObject);
+    compareValues.sort(doComparison);
+    array = compareValues.map(function(item) { return item.value; });
+
+    return array;
+
+    function getComparisonObject(value, index) {
+      return {
+        value: value,
+        predicateValues: predicates.map(function(predicate) {
+          return getPredicateValue(predicate.get(value), index);
+        })
+      };
+    }
+
+    function doComparison(v1, v2) {
+      var result = 0;
+      for (var index=0, length = predicates.length; index < length; ++index) {
+        result = compare(v1.predicateValues[index], v2.predicateValues[index]) * predicates[index].descending;
+        if (result) break;
+      }
+      return result;
+    }
+  };
+
+  function processPredicates(sortPredicate, reverseOrder) {
+    reverseOrder = reverseOrder ? -1 : 1;
+    return sortPredicate.map(function(predicate) {
+      var descending = 1, get = identity;
+
+      if (isFunction(predicate)) {
+        get = predicate;
+      } else if (isString(predicate)) {
+        if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) {
+          descending = predicate.charAt(0) == '-' ? -1 : 1;
+          predicate = predicate.substring(1);
+        }
+        if (predicate !== '') {
+          get = $parse(predicate);
+          if (get.constant) {
+            var key = get();
+            get = function(value) { return value[key]; };
+          }
+        }
+      }
+      return { get: get, descending: descending * reverseOrder };
+    });
+  }
+
+  function isPrimitive(value) {
+    switch (typeof value) {
+      case 'number': /* falls through */
+      case 'boolean': /* falls through */
+      case 'string':
+        return true;
+      default:
+        return false;
+    }
+  }
+
+  function objectValue(value, index) {
+    // If `valueOf` is a valid function use that
+    if (typeof value.valueOf === 'function') {
+      value = value.valueOf();
+      if (isPrimitive(value)) return value;
+    }
+    // If `toString` is a valid function and not the one from `Object.prototype` use that
+    if (hasCustomToString(value)) {
+      value = value.toString();
+      if (isPrimitive(value)) return value;
+    }
+    // We have a basic object so we use the position of the object in the collection
+    return index;
+  }
+
+  function getPredicateValue(value, index) {
+    var type = typeof value;
+    if (value === null) {
+      type = 'string';
+      value = 'null';
+    } else if (type === 'string') {
+      value = value.toLowerCase();
+    } else if (type === 'object') {
+      value = objectValue(value, index);
+    }
+    return { value: value, type: type };
+  }
+
+  function compare(v1, v2) {
+    var result = 0;
+    if (v1.type === v2.type) {
+      if (v1.value !== v2.value) {
+        result = v1.value < v2.value ? -1 : 1;
+      }
+    } else {
+      result = v1.type < v2.type ? -1 : 1;
+    }
+    return result;
+  }
+}
+
+function ngDirective(directive) {
+  if (isFunction(directive)) {
+    directive = {
+      link: directive
+    };
+  }
+  directive.restrict = directive.restrict || 'AC';
+  return valueFn(directive);
+}
+
+/**
+ * @ngdoc directive
+ * @name a
+ * @restrict E
+ *
+ * @description
+ * Modifies the default behavior of the html A tag so that the default action is prevented when
+ * the href attribute is empty.
+ *
+ * This change permits the easy creation of action links with the `ngClick` directive
+ * without changing the location or causing page reloads, e.g.:
+ * `<a href="" ng-click="list.addItem()">Add Item</a>`
+ */
+var htmlAnchorDirective = valueFn({
+  restrict: 'E',
+  compile: function(element, attr) {
+    if (!attr.href && !attr.xlinkHref) {
+      return function(scope, element) {
+        // If the linked element is not an anchor tag anymore, do nothing
+        if (element[0].nodeName.toLowerCase() !== 'a') return;
+
+        // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.
+        var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ?
+                   'xlink:href' : 'href';
+        element.on('click', function(event) {
+          // if we have no href url, then don't navigate anywhere.
+          if (!element.attr(href)) {
+            event.preventDefault();
+          }
+        });
+      };
+    }
+  }
+});
+
+/**
+ * @ngdoc directive
+ * @name ngHref
+ * @restrict A
+ * @priority 99
+ *
+ * @description
+ * Using Angular markup like `{{hash}}` in an href attribute will
+ * make the link go to the wrong URL if the user clicks it before
+ * Angular has a chance to replace the `{{hash}}` markup with its
+ * value. Until Angular replaces the markup the link will be broken
+ * and will most likely return a 404 error. The `ngHref` directive
+ * solves this problem.
+ *
+ * The wrong way to write it:
+ * ```html
+ * <a href="http://www.gravatar.com/avatar/{{hash}}">link1</a>
+ * ```
+ *
+ * The correct way to write it:
+ * ```html
+ * <a ng-href="http://www.gravatar.com/avatar/{{hash}}">link1</a>
+ * ```
+ *
+ * @element A
+ * @param {template} ngHref any string which can contain `{{}}` markup.
+ *
+ * @example
+ * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes
+ * in links and their different behaviors:
+    <example>
+      <file name="index.html">
+        <input ng-model="value" /><br />
+        <a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload)<br />
+        <a id="link-2" href="" ng-click="value = 2">link 2</a> (link, don't reload)<br />
+        <a id="link-3" ng-href="/{{'123'}}">link 3</a> (link, reload!)<br />
+        <a id="link-4" href="" name="xx" ng-click="value = 4">anchor</a> (link, don't reload)<br />
+        <a id="link-5" name="xxx" ng-click="value = 5">anchor</a> (no link)<br />
+        <a id="link-6" ng-href="{{value}}">link</a> (link, change location)
+      </file>
+      <file name="protractor.js" type="protractor">
+        it('should execute ng-click but not reload when href without value', function() {
+          element(by.id('link-1')).click();
+          expect(element(by.model('value')).getAttribute('value')).toEqual('1');
+          expect(element(by.id('link-1')).getAttribute('href')).toBe('');
+        });
+
+        it('should execute ng-click but not reload when href empty string', function() {
+          element(by.id('link-2')).click();
+          expect(element(by.model('value')).getAttribute('value')).toEqual('2');
+          expect(element(by.id('link-2')).getAttribute('href')).toBe('');
+        });
+
+        it('should execute ng-click and change url when ng-href specified', function() {
+          expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\/123$/);
+
+          element(by.id('link-3')).click();
+
+          // At this point, we navigate away from an Angular page, so we need
+          // to use browser.driver to get the base webdriver.
+
+          browser.wait(function() {
+            return browser.driver.getCurrentUrl().then(function(url) {
+              return url.match(/\/123$/);
+            });
+          }, 5000, 'page should navigate to /123');
+        });
+
+        it('should execute ng-click but not reload when href empty string and name specified', function() {
+          element(by.id('link-4')).click();
+          expect(element(by.model('value')).getAttribute('value')).toEqual('4');
+          expect(element(by.id('link-4')).getAttribute('href')).toBe('');
+        });
+
+        it('should execute ng-click but not reload when no href but name specified', function() {
+          element(by.id('link-5')).click();
+          expect(element(by.model('value')).getAttribute('value')).toEqual('5');
+          expect(element(by.id('link-5')).getAttribute('href')).toBe(null);
+        });
+
+        it('should only change url when only ng-href', function() {
+          element(by.model('value')).clear();
+          element(by.model('value')).sendKeys('6');
+          expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\/6$/);
+
+          element(by.id('link-6')).click();
+
+          // At this point, we navigate away from an Angular page, so we need
+          // to use browser.driver to get the base webdriver.
+          browser.wait(function() {
+            return browser.driver.getCurrentUrl().then(function(url) {
+              return url.match(/\/6$/);
+            });
+          }, 5000, 'page should navigate to /6');
+        });
+      </file>
+    </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngSrc
+ * @restrict A
+ * @priority 99
+ *
+ * @description
+ * Using Angular markup like `{{hash}}` in a `src` attribute doesn't
+ * work right: The browser will fetch from the URL with the literal
+ * text `{{hash}}` until Angular replaces the expression inside
+ * `{{hash}}`. The `ngSrc` directive solves this problem.
+ *
+ * The buggy way to write it:
+ * ```html
+ * <img src="http://www.gravatar.com/avatar/{{hash}}" alt="Description"/>
+ * ```
+ *
+ * The correct way to write it:
+ * ```html
+ * <img ng-src="http://www.gravatar.com/avatar/{{hash}}" alt="Description" />
+ * ```
+ *
+ * @element IMG
+ * @param {template} ngSrc any string which can contain `{{}}` markup.
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngSrcset
+ * @restrict A
+ * @priority 99
+ *
+ * @description
+ * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't
+ * work right: The browser will fetch from the URL with the literal
+ * text `{{hash}}` until Angular replaces the expression inside
+ * `{{hash}}`. The `ngSrcset` directive solves this problem.
+ *
+ * The buggy way to write it:
+ * ```html
+ * <img srcset="http://www.gravatar.com/avatar/{{hash}} 2x" alt="Description"/>
+ * ```
+ *
+ * The correct way to write it:
+ * ```html
+ * <img ng-srcset="http://www.gravatar.com/avatar/{{hash}} 2x" alt="Description" />
+ * ```
+ *
+ * @element IMG
+ * @param {template} ngSrcset any string which can contain `{{}}` markup.
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngDisabled
+ * @restrict A
+ * @priority 100
+ *
+ * @description
+ *
+ * This directive sets the `disabled` attribute on the element if the
+ * {@link guide/expression expression} inside `ngDisabled` evaluates to truthy.
+ *
+ * A special directive is necessary because we cannot use interpolation inside the `disabled`
+ * attribute.  The following example would make the button enabled on Chrome/Firefox
+ * but not on older IEs:
+ *
+ * ```html
+ * <!-- See below for an example of ng-disabled being used correctly -->
+ * <div ng-init="isDisabled = false">
+ *  <button disabled="{{isDisabled}}">Disabled</button>
+ * </div>
+ * ```
+ *
+ * This is because the HTML specification does not require browsers to preserve the values of
+ * boolean attributes such as `disabled` (Their presence means true and their absence means false.)
+ * If we put an Angular interpolation expression into such an attribute then the
+ * binding information would be lost when the browser removes the attribute.
+ *
+ * @example
+    <example>
+      <file name="index.html">
+        <label>Click me to toggle: <input type="checkbox" ng-model="checked"></label><br/>
+        <button ng-model="button" ng-disabled="checked">Button</button>
+      </file>
+      <file name="protractor.js" type="protractor">
+        it('should toggle button', function() {
+          expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy();
+          element(by.model('checked')).click();
+          expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy();
+        });
+      </file>
+    </example>
+ *
+ * @element INPUT
+ * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy,
+ *     then the `disabled` attribute will be set on the element
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngChecked
+ * @restrict A
+ * @priority 100
+ *
+ * @description
+ * Sets the `checked` attribute on the element, if the expression inside `ngChecked` is truthy.
+ *
+ * Note that this directive should not be used together with {@link ngModel `ngModel`},
+ * as this can lead to unexpected behavior.
+ *
+ * ### Why do we need `ngChecked`?
+ *
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
+ * such as checked. (Their presence means true and their absence means false.)
+ * If we put an Angular interpolation expression into such an attribute then the
+ * binding information would be lost when the browser removes the attribute.
+ * The `ngChecked` directive solves this problem for the `checked` attribute.
+ * This complementary directive is not removed by the browser and so provides
+ * a permanent reliable place to store the binding information.
+ * @example
+    <example>
+      <file name="index.html">
+        <label>Check me to check both: <input type="checkbox" ng-model="master"></label><br/>
+        <input id="checkSlave" type="checkbox" ng-checked="master" aria-label="Slave input">
+      </file>
+      <file name="protractor.js" type="protractor">
+        it('should check both checkBoxes', function() {
+          expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy();
+          element(by.model('master')).click();
+          expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy();
+        });
+      </file>
+    </example>
+ *
+ * @element INPUT
+ * @param {expression} ngChecked If the {@link guide/expression expression} is truthy,
+ *     then the `checked` attribute will be set on the element
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngReadonly
+ * @restrict A
+ * @priority 100
+ *
+ * @description
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
+ * such as readonly. (Their presence means true and their absence means false.)
+ * If we put an Angular interpolation expression into such an attribute then the
+ * binding information would be lost when the browser removes the attribute.
+ * The `ngReadonly` directive solves this problem for the `readonly` attribute.
+ * This complementary directive is not removed by the browser and so provides
+ * a permanent reliable place to store the binding information.
+ * @example
+    <example>
+      <file name="index.html">
+        <label>Check me to make text readonly: <input type="checkbox" ng-model="checked"></label><br/>
+        <input type="text" ng-readonly="checked" value="I'm Angular" aria-label="Readonly field" />
+      </file>
+      <file name="protractor.js" type="protractor">
+        it('should toggle readonly attr', function() {
+          expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeFalsy();
+          element(by.model('checked')).click();
+          expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeTruthy();
+        });
+      </file>
+    </example>
+ *
+ * @element INPUT
+ * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy,
+ *     then special attribute "readonly" will be set on the element
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngSelected
+ * @restrict A
+ * @priority 100
+ *
+ * @description
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
+ * such as selected. (Their presence means true and their absence means false.)
+ * If we put an Angular interpolation expression into such an attribute then the
+ * binding information would be lost when the browser removes the attribute.
+ * The `ngSelected` directive solves this problem for the `selected` attribute.
+ * This complementary directive is not removed by the browser and so provides
+ * a permanent reliable place to store the binding information.
+ *
+ * @example
+    <example>
+      <file name="index.html">
+        <label>Check me to select: <input type="checkbox" ng-model="selected"></label><br/>
+        <select aria-label="ngSelected demo">
+          <option>Hello!</option>
+          <option id="greet" ng-selected="selected">Greetings!</option>
+        </select>
+      </file>
+      <file name="protractor.js" type="protractor">
+        it('should select Greetings!', function() {
+          expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy();
+          element(by.model('selected')).click();
+          expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy();
+        });
+      </file>
+    </example>
+ *
+ * @element OPTION
+ * @param {expression} ngSelected If the {@link guide/expression expression} is truthy,
+ *     then special attribute "selected" will be set on the element
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngOpen
+ * @restrict A
+ * @priority 100
+ *
+ * @description
+ * The HTML specification does not require browsers to preserve the values of boolean attributes
+ * such as open. (Their presence means true and their absence means false.)
+ * If we put an Angular interpolation expression into such an attribute then the
+ * binding information would be lost when the browser removes the attribute.
+ * The `ngOpen` directive solves this problem for the `open` attribute.
+ * This complementary directive is not removed by the browser and so provides
+ * a permanent reliable place to store the binding information.
+ * @example
+     <example>
+       <file name="index.html">
+         <label>Check me check multiple: <input type="checkbox" ng-model="open"></label><br/>
+         <details id="details" ng-open="open">
+            <summary>Show/Hide me</summary>
+         </details>
+       </file>
+       <file name="protractor.js" type="protractor">
+         it('should toggle open', function() {
+           expect(element(by.id('details')).getAttribute('open')).toBeFalsy();
+           element(by.model('open')).click();
+           expect(element(by.id('details')).getAttribute('open')).toBeTruthy();
+         });
+       </file>
+     </example>
+ *
+ * @element DETAILS
+ * @param {expression} ngOpen If the {@link guide/expression expression} is truthy,
+ *     then special attribute "open" will be set on the element
+ */
+
+var ngAttributeAliasDirectives = {};
+
+// boolean attrs are evaluated
+forEach(BOOLEAN_ATTR, function(propName, attrName) {
+  // binding to multiple is not supported
+  if (propName == "multiple") return;
+
+  function defaultLinkFn(scope, element, attr) {
+    scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) {
+      attr.$set(attrName, !!value);
+    });
+  }
+
+  var normalized = directiveNormalize('ng-' + attrName);
+  var linkFn = defaultLinkFn;
+
+  if (propName === 'checked') {
+    linkFn = function(scope, element, attr) {
+      // ensuring ngChecked doesn't interfere with ngModel when both are set on the same input
+      if (attr.ngModel !== attr[normalized]) {
+        defaultLinkFn(scope, element, attr);
+      }
+    };
+  }
+
+  ngAttributeAliasDirectives[normalized] = function() {
+    return {
+      restrict: 'A',
+      priority: 100,
+      link: linkFn
+    };
+  };
+});
+
+// aliased input attrs are evaluated
+forEach(ALIASED_ATTR, function(htmlAttr, ngAttr) {
+  ngAttributeAliasDirectives[ngAttr] = function() {
+    return {
+      priority: 100,
+      link: function(scope, element, attr) {
+        //special case ngPattern when a literal regular expression value
+        //is used as the expression (this way we don't have to watch anything).
+        if (ngAttr === "ngPattern" && attr.ngPattern.charAt(0) == "/") {
+          var match = attr.ngPattern.match(REGEX_STRING_REGEXP);
+          if (match) {
+            attr.$set("ngPattern", new RegExp(match[1], match[2]));
+            return;
+          }
+        }
+
+        scope.$watch(attr[ngAttr], function ngAttrAliasWatchAction(value) {
+          attr.$set(ngAttr, value);
+        });
+      }
+    };
+  };
+});
+
+// ng-src, ng-srcset, ng-href are interpolated
+forEach(['src', 'srcset', 'href'], function(attrName) {
+  var normalized = directiveNormalize('ng-' + attrName);
+  ngAttributeAliasDirectives[normalized] = function() {
+    return {
+      priority: 99, // it needs to run after the attributes are interpolated
+      link: function(scope, element, attr) {
+        var propName = attrName,
+            name = attrName;
+
+        if (attrName === 'href' &&
+            toString.call(element.prop('href')) === '[object SVGAnimatedString]') {
+          name = 'xlinkHref';
+          attr.$attr[name] = 'xlink:href';
+          propName = null;
+        }
+
+        attr.$observe(normalized, function(value) {
+          if (!value) {
+            if (attrName === 'href') {
+              attr.$set(name, null);
+            }
+            return;
+          }
+
+          attr.$set(name, value);
+
+          // on IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist
+          // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need
+          // to set the property as well to achieve the desired effect.
+          // we use attr[attrName] value since $set can sanitize the url.
+          if (msie && propName) element.prop(propName, attr[name]);
+        });
+      }
+    };
+  };
+});
+
+/* global -nullFormCtrl, -SUBMITTED_CLASS, addSetValidityMethod: true
+ */
+var nullFormCtrl = {
+  $addControl: noop,
+  $$renameControl: nullFormRenameControl,
+  $removeControl: noop,
+  $setValidity: noop,
+  $setDirty: noop,
+  $setPristine: noop,
+  $setSubmitted: noop
+},
+SUBMITTED_CLASS = 'ng-submitted';
+
+function nullFormRenameControl(control, name) {
+  control.$name = name;
+}
+
+/**
+ * @ngdoc type
+ * @name form.FormController
+ *
+ * @property {boolean} $pristine True if user has not interacted with the form yet.
+ * @property {boolean} $dirty True if user has already interacted with the form.
+ * @property {boolean} $valid True if all of the containing forms and controls are valid.
+ * @property {boolean} $invalid True if at least one containing control or form is invalid.
+ * @property {boolean} $pending True if at least one containing control or form is pending.
+ * @property {boolean} $submitted True if user has submitted the form even if its invalid.
+ *
+ * @property {Object} $error Is an object hash, containing references to controls or
+ *  forms with failing validators, where:
+ *
+ *  - keys are validation tokens (error names),
+ *  - values are arrays of controls or forms that have a failing validator for given error name.
+ *
+ *  Built-in validation tokens:
+ *
+ *  - `email`
+ *  - `max`
+ *  - `maxlength`
+ *  - `min`
+ *  - `minlength`
+ *  - `number`
+ *  - `pattern`
+ *  - `required`
+ *  - `url`
+ *  - `date`
+ *  - `datetimelocal`
+ *  - `time`
+ *  - `week`
+ *  - `month`
+ *
+ * @description
+ * `FormController` keeps track of all its controls and nested forms as well as the state of them,
+ * such as being valid/invalid or dirty/pristine.
+ *
+ * Each {@link ng.directive:form form} directive creates an instance
+ * of `FormController`.
+ *
+ */
+//asks for $scope to fool the BC controller module
+FormController.$inject = ['$element', '$attrs', '$scope', '$animate', '$interpolate'];
+function FormController(element, attrs, $scope, $animate, $interpolate) {
+  var form = this,
+      controls = [];
+
+  // init state
+  form.$error = {};
+  form.$$success = {};
+  form.$pending = undefined;
+  form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope);
+  form.$dirty = false;
+  form.$pristine = true;
+  form.$valid = true;
+  form.$invalid = false;
+  form.$submitted = false;
+  form.$$parentForm = nullFormCtrl;
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$rollbackViewValue
+   *
+   * @description
+   * Rollback all form controls pending updates to the `$modelValue`.
+   *
+   * Updates may be pending by a debounced event or because the input is waiting for a some future
+   * event defined in `ng-model-options`. This method is typically needed by the reset button of
+   * a form that uses `ng-model-options` to pend updates.
+   */
+  form.$rollbackViewValue = function() {
+    forEach(controls, function(control) {
+      control.$rollbackViewValue();
+    });
+  };
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$commitViewValue
+   *
+   * @description
+   * Commit all form controls pending updates to the `$modelValue`.
+   *
+   * Updates may be pending by a debounced event or because the input is waiting for a some future
+   * event defined in `ng-model-options`. This method is rarely needed as `NgModelController`
+   * usually handles calling this in response to input events.
+   */
+  form.$commitViewValue = function() {
+    forEach(controls, function(control) {
+      control.$commitViewValue();
+    });
+  };
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$addControl
+   * @param {object} control control object, either a {@link form.FormController} or an
+   * {@link ngModel.NgModelController}
+   *
+   * @description
+   * Register a control with the form. Input elements using ngModelController do this automatically
+   * when they are linked.
+   *
+   * Note that the current state of the control will not be reflected on the new parent form. This
+   * is not an issue with normal use, as freshly compiled and linked controls are in a `$pristine`
+   * state.
+   *
+   * However, if the method is used programmatically, for example by adding dynamically created controls,
+   * or controls that have been previously removed without destroying their corresponding DOM element,
+   * it's the developers responsiblity to make sure the current state propagates to the parent form.
+   *
+   * For example, if an input control is added that is already `$dirty` and has `$error` properties,
+   * calling `$setDirty()` and `$validate()` afterwards will propagate the state to the parent form.
+   */
+  form.$addControl = function(control) {
+    // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored
+    // and not added to the scope.  Now we throw an error.
+    assertNotHasOwnProperty(control.$name, 'input');
+    controls.push(control);
+
+    if (control.$name) {
+      form[control.$name] = control;
+    }
+
+    control.$$parentForm = form;
+  };
+
+  // Private API: rename a form control
+  form.$$renameControl = function(control, newName) {
+    var oldName = control.$name;
+
+    if (form[oldName] === control) {
+      delete form[oldName];
+    }
+    form[newName] = control;
+    control.$name = newName;
+  };
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$removeControl
+   * @param {object} control control object, either a {@link form.FormController} or an
+   * {@link ngModel.NgModelController}
+   *
+   * @description
+   * Deregister a control from the form.
+   *
+   * Input elements using ngModelController do this automatically when they are destroyed.
+   *
+   * Note that only the removed control's validation state (`$errors`etc.) will be removed from the
+   * form. `$dirty`, `$submitted` states will not be changed, because the expected behavior can be
+   * different from case to case. For example, removing the only `$dirty` control from a form may or
+   * may not mean that the form is still `$dirty`.
+   */
+  form.$removeControl = function(control) {
+    if (control.$name && form[control.$name] === control) {
+      delete form[control.$name];
+    }
+    forEach(form.$pending, function(value, name) {
+      form.$setValidity(name, null, control);
+    });
+    forEach(form.$error, function(value, name) {
+      form.$setValidity(name, null, control);
+    });
+    forEach(form.$$success, function(value, name) {
+      form.$setValidity(name, null, control);
+    });
+
+    arrayRemove(controls, control);
+    control.$$parentForm = nullFormCtrl;
+  };
+
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$setValidity
+   *
+   * @description
+   * Sets the validity of a form control.
+   *
+   * This method will also propagate to parent forms.
+   */
+  addSetValidityMethod({
+    ctrl: this,
+    $element: element,
+    set: function(object, property, controller) {
+      var list = object[property];
+      if (!list) {
+        object[property] = [controller];
+      } else {
+        var index = list.indexOf(controller);
+        if (index === -1) {
+          list.push(controller);
+        }
+      }
+    },
+    unset: function(object, property, controller) {
+      var list = object[property];
+      if (!list) {
+        return;
+      }
+      arrayRemove(list, controller);
+      if (list.length === 0) {
+        delete object[property];
+      }
+    },
+    $animate: $animate
+  });
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$setDirty
+   *
+   * @description
+   * Sets the form to a dirty state.
+   *
+   * This method can be called to add the 'ng-dirty' class and set the form to a dirty
+   * state (ng-dirty class). This method will also propagate to parent forms.
+   */
+  form.$setDirty = function() {
+    $animate.removeClass(element, PRISTINE_CLASS);
+    $animate.addClass(element, DIRTY_CLASS);
+    form.$dirty = true;
+    form.$pristine = false;
+    form.$$parentForm.$setDirty();
+  };
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$setPristine
+   *
+   * @description
+   * Sets the form to its pristine state.
+   *
+   * This method can be called to remove the 'ng-dirty' class and set the form to its pristine
+   * state (ng-pristine class). This method will also propagate to all the controls contained
+   * in this form.
+   *
+   * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after
+   * saving or resetting it.
+   */
+  form.$setPristine = function() {
+    $animate.setClass(element, PRISTINE_CLASS, DIRTY_CLASS + ' ' + SUBMITTED_CLASS);
+    form.$dirty = false;
+    form.$pristine = true;
+    form.$submitted = false;
+    forEach(controls, function(control) {
+      control.$setPristine();
+    });
+  };
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$setUntouched
+   *
+   * @description
+   * Sets the form to its untouched state.
+   *
+   * This method can be called to remove the 'ng-touched' class and set the form controls to their
+   * untouched state (ng-untouched class).
+   *
+   * Setting a form controls back to their untouched state is often useful when setting the form
+   * back to its pristine state.
+   */
+  form.$setUntouched = function() {
+    forEach(controls, function(control) {
+      control.$setUntouched();
+    });
+  };
+
+  /**
+   * @ngdoc method
+   * @name form.FormController#$setSubmitted
+   *
+   * @description
+   * Sets the form to its submitted state.
+   */
+  form.$setSubmitted = function() {
+    $animate.addClass(element, SUBMITTED_CLASS);
+    form.$submitted = true;
+    form.$$parentForm.$setSubmitted();
+  };
+}
+
+/**
+ * @ngdoc directive
+ * @name ngForm
+ * @restrict EAC
+ *
+ * @description
+ * Nestable alias of {@link ng.directive:form `form`} directive. HTML
+ * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a
+ * sub-group of controls needs to be determined.
+ *
+ * Note: the purpose of `ngForm` is to group controls,
+ * but not to be a replacement for the `<form>` tag with all of its capabilities
+ * (e.g. posting to the server, ...).
+ *
+ * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into
+ *                       related scope, under this name.
+ *
+ */
+
+ /**
+ * @ngdoc directive
+ * @name form
+ * @restrict E
+ *
+ * @description
+ * Directive that instantiates
+ * {@link form.FormController FormController}.
+ *
+ * If the `name` attribute is specified, the form controller is published onto the current scope under
+ * this name.
+ *
+ * # Alias: {@link ng.directive:ngForm `ngForm`}
+ *
+ * In Angular, forms can be nested. This means that the outer form is valid when all of the child
+ * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so
+ * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to
+ * `<form>` but can be nested.  This allows you to have nested forms, which is very useful when
+ * using Angular validation directives in forms that are dynamically generated using the
+ * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name`
+ * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an
+ * `ngForm` directive and nest these in an outer `form` element.
+ *
+ *
+ * # CSS classes
+ *  - `ng-valid` is set if the form is valid.
+ *  - `ng-invalid` is set if the form is invalid.
+ *  - `ng-pending` is set if the form is pending.
+ *  - `ng-pristine` is set if the form is pristine.
+ *  - `ng-dirty` is set if the form is dirty.
+ *  - `ng-submitted` is set if the form was submitted.
+ *
+ * Keep in mind that ngAnimate can detect each of these classes when added and removed.
+ *
+ *
+ * # Submitting a form and preventing the default action
+ *
+ * Since the role of forms in client-side Angular applications is different than in classical
+ * roundtrip apps, it is desirable for the browser not to translate the form submission into a full
+ * page reload that sends the data to the server. Instead some javascript logic should be triggered
+ * to handle the form submission in an application-specific way.
+ *
+ * For this reason, Angular prevents the default action (form submission to the server) unless the
+ * `<form>` element has an `action` attribute specified.
+ *
+ * You can use one of the following two ways to specify what javascript method should be called when
+ * a form is submitted:
+ *
+ * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element
+ * - {@link ng.directive:ngClick ngClick} directive on the first
+  *  button or input field of type submit (input[type=submit])
+ *
+ * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit}
+ * or {@link ng.directive:ngClick ngClick} directives.
+ * This is because of the following form submission rules in the HTML specification:
+ *
+ * - If a form has only one input field then hitting enter in this field triggers form submit
+ * (`ngSubmit`)
+ * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter
+ * doesn't trigger submit
+ * - if a form has one or more input fields and one or more buttons or input[type=submit] then
+ * hitting enter in any of the input fields will trigger the click handler on the *first* button or
+ * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`)
+ *
+ * Any pending `ngModelOptions` changes will take place immediately when an enclosing form is
+ * submitted. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`
+ * to have access to the updated model.
+ *
+ * ## Animation Hooks
+ *
+ * Animations in ngForm are triggered when any of the associated CSS classes are added and removed.
+ * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any
+ * other validations that are performed within the form. Animations in ngForm are similar to how
+ * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well
+ * as JS animations.
+ *
+ * The following example shows a simple way to utilize CSS transitions to style a form element
+ * that has been rendered as invalid after it has been validated:
+ *
+ * <pre>
+ * //be sure to include ngAnimate as a module to hook into more
+ * //advanced animations
+ * .my-form {
+ *   transition:0.5s linear all;
+ *   background: white;
+ * }
+ * .my-form.ng-invalid {
+ *   background: red;
+ *   color:white;
+ * }
+ * </pre>
+ *
+ * @example
+    <example deps="angular-animate.js" animations="true" fixBase="true" module="formExample">
+      <file name="index.html">
+       <script>
+         angular.module('formExample', [])
+           .controller('FormController', ['$scope', function($scope) {
+             $scope.userType = 'guest';
+           }]);
+       </script>
+       <style>
+        .my-form {
+          transition:all linear 0.5s;
+          background: transparent;
+        }
+        .my-form.ng-invalid {
+          background: red;
+        }
+       </style>
+       <form name="myForm" ng-controller="FormController" class="my-form">
+         userType: <input name="input" ng-model="userType" required>
+         <span class="error" ng-show="myForm.input.$error.required">Required!</span><br>
+         <code>userType = {{userType}}</code><br>
+         <code>myForm.input.$valid = {{myForm.input.$valid}}</code><br>
+         <code>myForm.input.$error = {{myForm.input.$error}}</code><br>
+         <code>myForm.$valid = {{myForm.$valid}}</code><br>
+         <code>myForm.$error.required = {{!!myForm.$error.required}}</code><br>
+        </form>
+      </file>
+      <file name="protractor.js" type="protractor">
+        it('should initialize to model', function() {
+          var userType = element(by.binding('userType'));
+          var valid = element(by.binding('myForm.input.$valid'));
+
+          expect(userType.getText()).toContain('guest');
+          expect(valid.getText()).toContain('true');
+        });
+
+        it('should be invalid if empty', function() {
+          var userType = element(by.binding('userType'));
+          var valid = element(by.binding('myForm.input.$valid'));
+          var userInput = element(by.model('userType'));
+
+          userInput.clear();
+          userInput.sendKeys('');
+
+          expect(userType.getText()).toEqual('userType =');
+          expect(valid.getText()).toContain('false');
+        });
+      </file>
+    </example>
+ *
+ * @param {string=} name Name of the form. If specified, the form controller will be published into
+ *                       related scope, under this name.
+ */
+var formDirectiveFactory = function(isNgForm) {
+  return ['$timeout', '$parse', function($timeout, $parse) {
+    var formDirective = {
+      name: 'form',
+      restrict: isNgForm ? 'EAC' : 'E',
+      require: ['form', '^^?form'], //first is the form's own ctrl, second is an optional parent form
+      controller: FormController,
+      compile: function ngFormCompile(formElement, attr) {
+        // Setup initial state of the control
+        formElement.addClass(PRISTINE_CLASS).addClass(VALID_CLASS);
+
+        var nameAttr = attr.name ? 'name' : (isNgForm && attr.ngForm ? 'ngForm' : false);
+
+        return {
+          pre: function ngFormPreLink(scope, formElement, attr, ctrls) {
+            var controller = ctrls[0];
+
+            // if `action` attr is not present on the form, prevent the default action (submission)
+            if (!('action' in attr)) {
+              // we can't use jq events because if a form is destroyed during submission the default
+              // action is not prevented. see #1238
+              //
+              // IE 9 is not affected because it doesn't fire a submit event and try to do a full
+              // page reload if the form was destroyed by submission of the form via a click handler
+              // on a button in the form. Looks like an IE9 specific bug.
+              var handleFormSubmission = function(event) {
+                scope.$apply(function() {
+                  controller.$commitViewValue();
+                  controller.$setSubmitted();
+                });
+
+                event.preventDefault();
+              };
+
+              addEventListenerFn(formElement[0], 'submit', handleFormSubmission);
+
+              // unregister the preventDefault listener so that we don't not leak memory but in a
+              // way that will achieve the prevention of the default action.
+              formElement.on('$destroy', function() {
+                $timeout(function() {
+                  removeEventListenerFn(formElement[0], 'submit', handleFormSubmission);
+                }, 0, false);
+              });
+            }
+
+            var parentFormCtrl = ctrls[1] || controller.$$parentForm;
+            parentFormCtrl.$addControl(controller);
+
+            var setter = nameAttr ? getSetter(controller.$name) : noop;
+
+            if (nameAttr) {
+              setter(scope, controller);
+              attr.$observe(nameAttr, function(newValue) {
+                if (controller.$name === newValue) return;
+                setter(scope, undefined);
+                controller.$$parentForm.$$renameControl(controller, newValue);
+                setter = getSetter(controller.$name);
+                setter(scope, controller);
+              });
+            }
+            formElement.on('$destroy', function() {
+              controller.$$parentForm.$removeControl(controller);
+              setter(scope, undefined);
+              extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards
+            });
+          }
+        };
+      }
+    };
+
+    return formDirective;
+
+    function getSetter(expression) {
+      if (expression === '') {
+        //create an assignable expression, so forms with an empty name can be renamed later
+        return $parse('this[""]').assign;
+      }
+      return $parse(expression).assign || noop;
+    }
+  }];
+};
+
+var formDirective = formDirectiveFactory();
+var ngFormDirective = formDirectiveFactory(true);
+
+/* global VALID_CLASS: false,
+  INVALID_CLASS: false,
+  PRISTINE_CLASS: false,
+  DIRTY_CLASS: false,
+  UNTOUCHED_CLASS: false,
+  TOUCHED_CLASS: false,
+  ngModelMinErr: false,
+*/
+
+// Regex code is obtained from SO: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231
+var ISO_DATE_REGEXP = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/;
+// See valid URLs in RFC3987 (http://tools.ietf.org/html/rfc3987)
+var URL_REGEXP = /^[A-Za-z][A-Za-z\d.+-]*:\/*(?:\w+(?::\w+)?@)?[^\s/]+(?::\d+)?(?:\/[\w#!:.?+=&%@\-/]*)?$/;
+var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;
+var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/;
+var DATE_REGEXP = /^(\d{4})-(\d{2})-(\d{2})$/;
+var DATETIMELOCAL_REGEXP = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/;
+var WEEK_REGEXP = /^(\d{4})-W(\d\d)$/;
+var MONTH_REGEXP = /^(\d{4})-(\d\d)$/;
+var TIME_REGEXP = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/;
+
+var inputType = {
+
+  /**
+   * @ngdoc input
+   * @name input[text]
+   *
+   * @description
+   * Standard HTML text input with angular data binding, inherited by most of the `input` elements.
+   *
+   *
+   * @param {string} ngModel Assignable angular expression to data-bind to.
+   * @param {string=} name Property name of the form under which the control is published.
+   * @param {string=} required Adds `required` validation error key if the value is not entered.
+   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+   *    `required` when you want to data-bind to the `required` attribute.
+   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+   *    minlength.
+   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+   *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
+   *    any length.
+   * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
+   *    that contains the regular expression body that will be converted to a regular expression
+   *    as in the ngPattern directive.
+   * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
+   *    a RegExp found by evaluating the Angular expression given in the attribute value.
+   *    If the expression evaluates to a RegExp object, then this is used directly.
+   *    If the expression evaluates to a string, then it will be converted to a RegExp
+   *    after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
+   *    `new RegExp('^abc$')`.<br />
+   *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to
+   *    start at the index of the last search's match, thus not taking the whole input value into
+   *    account.
+   * @param {string=} ngChange Angular expression to be executed when input changes due to user
+   *    interaction with the input element.
+   * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
+   *    This parameter is ignored for input[type=password] controls, which will never trim the
+   *    input.
+   *
+   * @example
+      <example name="text-input-directive" module="textInputExample">
+        <file name="index.html">
+         <script>
+           angular.module('textInputExample', [])
+             .controller('ExampleController', ['$scope', function($scope) {
+               $scope.example = {
+                 text: 'guest',
+                 word: /^\s*\w*\s*$/
+               };
+             }]);
+         </script>
+         <form name="myForm" ng-controller="ExampleController">
+           <label>Single word:
+             <input type="text" name="input" ng-model="example.text"
+                    ng-pattern="example.word" required ng-trim="false">
+           </label>
+           <div role="alert">
+             <span class="error" ng-show="myForm.input.$error.required">
+               Required!</span>
+             <span class="error" ng-show="myForm.input.$error.pattern">
+               Single word only!</span>
+           </div>
+           <tt>text = {{example.text}}</tt><br/>
+           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+          </form>
+        </file>
+        <file name="protractor.js" type="protractor">
+          var text = element(by.binding('example.text'));
+          var valid = element(by.binding('myForm.input.$valid'));
+          var input = element(by.model('example.text'));
+
+          it('should initialize to model', function() {
+            expect(text.getText()).toContain('guest');
+            expect(valid.getText()).toContain('true');
+          });
+
+          it('should be invalid if empty', function() {
+            input.clear();
+            input.sendKeys('');
+
+            expect(text.getText()).toEqual('text =');
+            expect(valid.getText()).toContain('false');
+          });
+
+          it('should be invalid if multi word', function() {
+            input.clear();
+            input.sendKeys('hello world');
+
+            expect(valid.getText()).toContain('false');
+          });
+        </file>
+      </example>
+   */
+  'text': textInputType,
+
+    /**
+     * @ngdoc input
+     * @name input[date]
+     *
+     * @description
+     * Input with date validation and transformation. In browsers that do not yet support
+     * the HTML5 date input, a text element will be used. In that case, text must be entered in a valid ISO-8601
+     * date format (yyyy-MM-dd), for example: `2009-01-06`. Since many
+     * modern browsers do not yet support this input type, it is important to provide cues to users on the
+     * expected input format via a placeholder or label.
+     *
+     * The model must always be a Date object, otherwise Angular will throw an error.
+     * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
+     *
+     * The timezone to be used to read/write the `Date` instance in the model can be defined using
+     * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
+     *
+     * @param {string} ngModel Assignable angular expression to data-bind to.
+     * @param {string=} name Property name of the form under which the control is published.
+     * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a
+     *   valid ISO date string (yyyy-MM-dd). You can also use interpolation inside this attribute
+     *   (e.g. `min="{{minDate | date:'yyyy-MM-dd'}}"`). Note that `min` will also add native HTML5
+     *   constraint validation.
+     * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be
+     *   a valid ISO date string (yyyy-MM-dd). You can also use interpolation inside this attribute
+     *   (e.g. `max="{{maxDate | date:'yyyy-MM-dd'}}"`). Note that `max` will also add native HTML5
+     *   constraint validation.
+     * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO date string
+     *   the `ngMin` expression evaluates to. Note that it does not set the `min` attribute.
+     * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO date string
+     *   the `ngMax` expression evaluates to. Note that it does not set the `max` attribute.
+     * @param {string=} required Sets `required` validation error key if the value is not entered.
+     * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+     *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+     *    `required` when you want to data-bind to the `required` attribute.
+     * @param {string=} ngChange Angular expression to be executed when input changes due to user
+     *    interaction with the input element.
+     *
+     * @example
+     <example name="date-input-directive" module="dateInputExample">
+     <file name="index.html">
+       <script>
+          angular.module('dateInputExample', [])
+            .controller('DateController', ['$scope', function($scope) {
+              $scope.example = {
+                value: new Date(2013, 9, 22)
+              };
+            }]);
+       </script>
+       <form name="myForm" ng-controller="DateController as dateCtrl">
+          <label for="exampleInput">Pick a date in 2013:</label>
+          <input type="date" id="exampleInput" name="input" ng-model="example.value"
+              placeholder="yyyy-MM-dd" min="2013-01-01" max="2013-12-31" required />
+          <div role="alert">
+            <span class="error" ng-show="myForm.input.$error.required">
+                Required!</span>
+            <span class="error" ng-show="myForm.input.$error.date">
+                Not a valid date!</span>
+           </div>
+           <tt>value = {{example.value | date: "yyyy-MM-dd"}}</tt><br/>
+           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+       </form>
+     </file>
+     <file name="protractor.js" type="protractor">
+        var value = element(by.binding('example.value | date: "yyyy-MM-dd"'));
+        var valid = element(by.binding('myForm.input.$valid'));
+        var input = element(by.model('example.value'));
+
+        // currently protractor/webdriver does not support
+        // sending keys to all known HTML5 input controls
+        // for various browsers (see https://github.com/angular/protractor/issues/562).
+        function setInput(val) {
+          // set the value of the element and force validation.
+          var scr = "var ipt = document.getElementById('exampleInput'); " +
+          "ipt.value = '" + val + "';" +
+          "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
+          browser.executeScript(scr);
+        }
+
+        it('should initialize to model', function() {
+          expect(value.getText()).toContain('2013-10-22');
+          expect(valid.getText()).toContain('myForm.input.$valid = true');
+        });
+
+        it('should be invalid if empty', function() {
+          setInput('');
+          expect(value.getText()).toEqual('value =');
+          expect(valid.getText()).toContain('myForm.input.$valid = false');
+        });
+
+        it('should be invalid if over max', function() {
+          setInput('2015-01-01');
+          expect(value.getText()).toContain('');
+          expect(valid.getText()).toContain('myForm.input.$valid = false');
+        });
+     </file>
+     </example>
+     */
+  'date': createDateInputType('date', DATE_REGEXP,
+         createDateParser(DATE_REGEXP, ['yyyy', 'MM', 'dd']),
+         'yyyy-MM-dd'),
+
+   /**
+    * @ngdoc input
+    * @name input[datetime-local]
+    *
+    * @description
+    * Input with datetime validation and transformation. In browsers that do not yet support
+    * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
+    * local datetime format (yyyy-MM-ddTHH:mm:ss), for example: `2010-12-28T14:57:00`.
+    *
+    * The model must always be a Date object, otherwise Angular will throw an error.
+    * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
+    *
+    * The timezone to be used to read/write the `Date` instance in the model can be defined using
+    * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
+    *
+    * @param {string} ngModel Assignable angular expression to data-bind to.
+    * @param {string=} name Property name of the form under which the control is published.
+    * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.
+    *   This must be a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss). You can also use interpolation
+    *   inside this attribute (e.g. `min="{{minDatetimeLocal | date:'yyyy-MM-ddTHH:mm:ss'}}"`).
+    *   Note that `min` will also add native HTML5 constraint validation.
+    * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.
+    *   This must be a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss). You can also use interpolation
+    *   inside this attribute (e.g. `max="{{maxDatetimeLocal | date:'yyyy-MM-ddTHH:mm:ss'}}"`).
+    *   Note that `max` will also add native HTML5 constraint validation.
+    * @param {(date|string)=} ngMin Sets the `min` validation error key to the Date / ISO datetime string
+    *   the `ngMin` expression evaluates to. Note that it does not set the `min` attribute.
+    * @param {(date|string)=} ngMax Sets the `max` validation error key to the Date / ISO datetime string
+    *   the `ngMax` expression evaluates to. Note that it does not set the `max` attribute.
+    * @param {string=} required Sets `required` validation error key if the value is not entered.
+    * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+    *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+    *    `required` when you want to data-bind to the `required` attribute.
+    * @param {string=} ngChange Angular expression to be executed when input changes due to user
+    *    interaction with the input element.
+    *
+    * @example
+    <example name="datetimelocal-input-directive" module="dateExample">
+    <file name="index.html">
+      <script>
+        angular.module('dateExample', [])
+          .controller('DateController', ['$scope', function($scope) {
+            $scope.example = {
+              value: new Date(2010, 11, 28, 14, 57)
+            };
+          }]);
+      </script>
+      <form name="myForm" ng-controller="DateController as dateCtrl">
+        <label for="exampleInput">Pick a date between in 2013:</label>
+        <input type="datetime-local" id="exampleInput" name="input" ng-model="example.value"
+            placeholder="yyyy-MM-ddTHH:mm:ss" min="2001-01-01T00:00:00" max="2013-12-31T00:00:00" required />
+        <div role="alert">
+          <span class="error" ng-show="myForm.input.$error.required">
+              Required!</span>
+          <span class="error" ng-show="myForm.input.$error.datetimelocal">
+              Not a valid date!</span>
+        </div>
+        <tt>value = {{example.value | date: "yyyy-MM-ddTHH:mm:ss"}}</tt><br/>
+        <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+        <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+        <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+        <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+      </form>
+    </file>
+    <file name="protractor.js" type="protractor">
+      var value = element(by.binding('example.value | date: "yyyy-MM-ddTHH:mm:ss"'));
+      var valid = element(by.binding('myForm.input.$valid'));
+      var input = element(by.model('example.value'));
+
+      // currently protractor/webdriver does not support
+      // sending keys to all known HTML5 input controls
+      // for various browsers (https://github.com/angular/protractor/issues/562).
+      function setInput(val) {
+        // set the value of the element and force validation.
+        var scr = "var ipt = document.getElementById('exampleInput'); " +
+        "ipt.value = '" + val + "';" +
+        "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
+        browser.executeScript(scr);
+      }
+
+      it('should initialize to model', function() {
+        expect(value.getText()).toContain('2010-12-28T14:57:00');
+        expect(valid.getText()).toContain('myForm.input.$valid = true');
+      });
+
+      it('should be invalid if empty', function() {
+        setInput('');
+        expect(value.getText()).toEqual('value =');
+        expect(valid.getText()).toContain('myForm.input.$valid = false');
+      });
+
+      it('should be invalid if over max', function() {
+        setInput('2015-01-01T23:59:00');
+        expect(value.getText()).toContain('');
+        expect(valid.getText()).toContain('myForm.input.$valid = false');
+      });
+    </file>
+    </example>
+    */
+  'datetime-local': createDateInputType('datetimelocal', DATETIMELOCAL_REGEXP,
+      createDateParser(DATETIMELOCAL_REGEXP, ['yyyy', 'MM', 'dd', 'HH', 'mm', 'ss', 'sss']),
+      'yyyy-MM-ddTHH:mm:ss.sss'),
+
+  /**
+   * @ngdoc input
+   * @name input[time]
+   *
+   * @description
+   * Input with time validation and transformation. In browsers that do not yet support
+   * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
+   * local time format (HH:mm:ss), for example: `14:57:00`. Model must be a Date object. This binding will always output a
+   * Date object to the model of January 1, 1970, or local date `new Date(1970, 0, 1, HH, mm, ss)`.
+   *
+   * The model must always be a Date object, otherwise Angular will throw an error.
+   * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
+   *
+   * The timezone to be used to read/write the `Date` instance in the model can be defined using
+   * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
+   *
+   * @param {string} ngModel Assignable angular expression to data-bind to.
+   * @param {string=} name Property name of the form under which the control is published.
+   * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.
+   *   This must be a valid ISO time format (HH:mm:ss). You can also use interpolation inside this
+   *   attribute (e.g. `min="{{minTime | date:'HH:mm:ss'}}"`). Note that `min` will also add
+   *   native HTML5 constraint validation.
+   * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.
+   *   This must be a valid ISO time format (HH:mm:ss). You can also use interpolation inside this
+   *   attribute (e.g. `max="{{maxTime | date:'HH:mm:ss'}}"`). Note that `max` will also add
+   *   native HTML5 constraint validation.
+   * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO time string the
+   *   `ngMin` expression evaluates to. Note that it does not set the `min` attribute.
+   * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO time string the
+   *   `ngMax` expression evaluates to. Note that it does not set the `max` attribute.
+   * @param {string=} required Sets `required` validation error key if the value is not entered.
+   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+   *    `required` when you want to data-bind to the `required` attribute.
+   * @param {string=} ngChange Angular expression to be executed when input changes due to user
+   *    interaction with the input element.
+   *
+   * @example
+   <example name="time-input-directive" module="timeExample">
+   <file name="index.html">
+     <script>
+      angular.module('timeExample', [])
+        .controller('DateController', ['$scope', function($scope) {
+          $scope.example = {
+            value: new Date(1970, 0, 1, 14, 57, 0)
+          };
+        }]);
+     </script>
+     <form name="myForm" ng-controller="DateController as dateCtrl">
+        <label for="exampleInput">Pick a between 8am and 5pm:</label>
+        <input type="time" id="exampleInput" name="input" ng-model="example.value"
+            placeholder="HH:mm:ss" min="08:00:00" max="17:00:00" required />
+        <div role="alert">
+          <span class="error" ng-show="myForm.input.$error.required">
+              Required!</span>
+          <span class="error" ng-show="myForm.input.$error.time">
+              Not a valid date!</span>
+        </div>
+        <tt>value = {{example.value | date: "HH:mm:ss"}}</tt><br/>
+        <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+        <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+        <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+        <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+     </form>
+   </file>
+   <file name="protractor.js" type="protractor">
+      var value = element(by.binding('example.value | date: "HH:mm:ss"'));
+      var valid = element(by.binding('myForm.input.$valid'));
+      var input = element(by.model('example.value'));
+
+      // currently protractor/webdriver does not support
+      // sending keys to all known HTML5 input controls
+      // for various browsers (https://github.com/angular/protractor/issues/562).
+      function setInput(val) {
+        // set the value of the element and force validation.
+        var scr = "var ipt = document.getElementById('exampleInput'); " +
+        "ipt.value = '" + val + "';" +
+        "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
+        browser.executeScript(scr);
+      }
+
+      it('should initialize to model', function() {
+        expect(value.getText()).toContain('14:57:00');
+        expect(valid.getText()).toContain('myForm.input.$valid = true');
+      });
+
+      it('should be invalid if empty', function() {
+        setInput('');
+        expect(value.getText()).toEqual('value =');
+        expect(valid.getText()).toContain('myForm.input.$valid = false');
+      });
+
+      it('should be invalid if over max', function() {
+        setInput('23:59:00');
+        expect(value.getText()).toContain('');
+        expect(valid.getText()).toContain('myForm.input.$valid = false');
+      });
+   </file>
+   </example>
+   */
+  'time': createDateInputType('time', TIME_REGEXP,
+      createDateParser(TIME_REGEXP, ['HH', 'mm', 'ss', 'sss']),
+     'HH:mm:ss.sss'),
+
+   /**
+    * @ngdoc input
+    * @name input[week]
+    *
+    * @description
+    * Input with week-of-the-year validation and transformation to Date. In browsers that do not yet support
+    * the HTML5 week input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
+    * week format (yyyy-W##), for example: `2013-W02`.
+    *
+    * The model must always be a Date object, otherwise Angular will throw an error.
+    * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
+    *
+    * The timezone to be used to read/write the `Date` instance in the model can be defined using
+    * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
+    *
+    * @param {string} ngModel Assignable angular expression to data-bind to.
+    * @param {string=} name Property name of the form under which the control is published.
+    * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.
+    *   This must be a valid ISO week format (yyyy-W##). You can also use interpolation inside this
+    *   attribute (e.g. `min="{{minWeek | date:'yyyy-Www'}}"`). Note that `min` will also add
+    *   native HTML5 constraint validation.
+    * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.
+    *   This must be a valid ISO week format (yyyy-W##). You can also use interpolation inside this
+    *   attribute (e.g. `max="{{maxWeek | date:'yyyy-Www'}}"`). Note that `max` will also add
+    *   native HTML5 constraint validation.
+    * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO week string
+    *   the `ngMin` expression evaluates to. Note that it does not set the `min` attribute.
+    * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO week string
+    *   the `ngMax` expression evaluates to. Note that it does not set the `max` attribute.
+    * @param {string=} required Sets `required` validation error key if the value is not entered.
+    * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+    *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+    *    `required` when you want to data-bind to the `required` attribute.
+    * @param {string=} ngChange Angular expression to be executed when input changes due to user
+    *    interaction with the input element.
+    *
+    * @example
+    <example name="week-input-directive" module="weekExample">
+    <file name="index.html">
+      <script>
+      angular.module('weekExample', [])
+        .controller('DateController', ['$scope', function($scope) {
+          $scope.example = {
+            value: new Date(2013, 0, 3)
+          };
+        }]);
+      </script>
+      <form name="myForm" ng-controller="DateController as dateCtrl">
+        <label>Pick a date between in 2013:
+          <input id="exampleInput" type="week" name="input" ng-model="example.value"
+                 placeholder="YYYY-W##" min="2012-W32"
+                 max="2013-W52" required />
+        </label>
+        <div role="alert">
+          <span class="error" ng-show="myForm.input.$error.required">
+              Required!</span>
+          <span class="error" ng-show="myForm.input.$error.week">
+              Not a valid date!</span>
+        </div>
+        <tt>value = {{example.value | date: "yyyy-Www"}}</tt><br/>
+        <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+        <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+        <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+        <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+      </form>
+    </file>
+    <file name="protractor.js" type="protractor">
+      var value = element(by.binding('example.value | date: "yyyy-Www"'));
+      var valid = element(by.binding('myForm.input.$valid'));
+      var input = element(by.model('example.value'));
+
+      // currently protractor/webdriver does not support
+      // sending keys to all known HTML5 input controls
+      // for various browsers (https://github.com/angular/protractor/issues/562).
+      function setInput(val) {
+        // set the value of the element and force validation.
+        var scr = "var ipt = document.getElementById('exampleInput'); " +
+        "ipt.value = '" + val + "';" +
+        "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
+        browser.executeScript(scr);
+      }
+
+      it('should initialize to model', function() {
+        expect(value.getText()).toContain('2013-W01');
+        expect(valid.getText()).toContain('myForm.input.$valid = true');
+      });
+
+      it('should be invalid if empty', function() {
+        setInput('');
+        expect(value.getText()).toEqual('value =');
+        expect(valid.getText()).toContain('myForm.input.$valid = false');
+      });
+
+      it('should be invalid if over max', function() {
+        setInput('2015-W01');
+        expect(value.getText()).toContain('');
+        expect(valid.getText()).toContain('myForm.input.$valid = false');
+      });
+    </file>
+    </example>
+    */
+  'week': createDateInputType('week', WEEK_REGEXP, weekParser, 'yyyy-Www'),
+
+  /**
+   * @ngdoc input
+   * @name input[month]
+   *
+   * @description
+   * Input with month validation and transformation. In browsers that do not yet support
+   * the HTML5 month input, a text element will be used. In that case, the text must be entered in a valid ISO-8601
+   * month format (yyyy-MM), for example: `2009-01`.
+   *
+   * The model must always be a Date object, otherwise Angular will throw an error.
+   * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string.
+   * If the model is not set to the first of the month, the next view to model update will set it
+   * to the first of the month.
+   *
+   * The timezone to be used to read/write the `Date` instance in the model can be defined using
+   * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser.
+   *
+   * @param {string} ngModel Assignable angular expression to data-bind to.
+   * @param {string=} name Property name of the form under which the control is published.
+   * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.
+   *   This must be a valid ISO month format (yyyy-MM). You can also use interpolation inside this
+   *   attribute (e.g. `min="{{minMonth | date:'yyyy-MM'}}"`). Note that `min` will also add
+   *   native HTML5 constraint validation.
+   * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.
+   *   This must be a valid ISO month format (yyyy-MM). You can also use interpolation inside this
+   *   attribute (e.g. `max="{{maxMonth | date:'yyyy-MM'}}"`). Note that `max` will also add
+   *   native HTML5 constraint validation.
+   * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO week string
+   *   the `ngMin` expression evaluates to. Note that it does not set the `min` attribute.
+   * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO week string
+   *   the `ngMax` expression evaluates to. Note that it does not set the `max` attribute.
+
+   * @param {string=} required Sets `required` validation error key if the value is not entered.
+   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+   *    `required` when you want to data-bind to the `required` attribute.
+   * @param {string=} ngChange Angular expression to be executed when input changes due to user
+   *    interaction with the input element.
+   *
+   * @example
+   <example name="month-input-directive" module="monthExample">
+   <file name="index.html">
+     <script>
+      angular.module('monthExample', [])
+        .controller('DateController', ['$scope', function($scope) {
+          $scope.example = {
+            value: new Date(2013, 9, 1)
+          };
+        }]);
+     </script>
+     <form name="myForm" ng-controller="DateController as dateCtrl">
+       <label for="exampleInput">Pick a month in 2013:</label>
+       <input id="exampleInput" type="month" name="input" ng-model="example.value"
+          placeholder="yyyy-MM" min="2013-01" max="2013-12" required />
+       <div role="alert">
+         <span class="error" ng-show="myForm.input.$error.required">
+            Required!</span>
+         <span class="error" ng-show="myForm.input.$error.month">
+            Not a valid month!</span>
+       </div>
+       <tt>value = {{example.value | date: "yyyy-MM"}}</tt><br/>
+       <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+       <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+       <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+       <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+     </form>
+   </file>
+   <file name="protractor.js" type="protractor">
+      var value = element(by.binding('example.value | date: "yyyy-MM"'));
+      var valid = element(by.binding('myForm.input.$valid'));
+      var input = element(by.model('example.value'));
+
+      // currently protractor/webdriver does not support
+      // sending keys to all known HTML5 input controls
+      // for various browsers (https://github.com/angular/protractor/issues/562).
+      function setInput(val) {
+        // set the value of the element and force validation.
+        var scr = "var ipt = document.getElementById('exampleInput'); " +
+        "ipt.value = '" + val + "';" +
+        "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });";
+        browser.executeScript(scr);
+      }
+
+      it('should initialize to model', function() {
+        expect(value.getText()).toContain('2013-10');
+        expect(valid.getText()).toContain('myForm.input.$valid = true');
+      });
+
+      it('should be invalid if empty', function() {
+        setInput('');
+        expect(value.getText()).toEqual('value =');
+        expect(valid.getText()).toContain('myForm.input.$valid = false');
+      });
+
+      it('should be invalid if over max', function() {
+        setInput('2015-01');
+        expect(value.getText()).toContain('');
+        expect(valid.getText()).toContain('myForm.input.$valid = false');
+      });
+   </file>
+   </example>
+   */
+  'month': createDateInputType('month', MONTH_REGEXP,
+     createDateParser(MONTH_REGEXP, ['yyyy', 'MM']),
+     'yyyy-MM'),
+
+  /**
+   * @ngdoc input
+   * @name input[number]
+   *
+   * @description
+   * Text input with number validation and transformation. Sets the `number` validation
+   * error if not a valid number.
+   *
+   * <div class="alert alert-warning">
+   * The model must always be of type `number` otherwise Angular will throw an error.
+   * Be aware that a string containing a number is not enough. See the {@link ngModel:numfmt}
+   * error docs for more information and an example of how to convert your model if necessary.
+   * </div>
+   *
+   * ## Issues with HTML5 constraint validation
+   *
+   * In browsers that follow the
+   * [HTML5 specification](https://html.spec.whatwg.org/multipage/forms.html#number-state-%28type=number%29),
+   * `input[number]` does not work as expected with {@link ngModelOptions `ngModelOptions.allowInvalid`}.
+   * If a non-number is entered in the input, the browser will report the value as an empty string,
+   * which means the view / model values in `ngModel` and subsequently the scope value
+   * will also be an empty string.
+   *
+   *
+   * @param {string} ngModel Assignable angular expression to data-bind to.
+   * @param {string=} name Property name of the form under which the control is published.
+   * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`.
+   * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`.
+   * @param {string=} required Sets `required` validation error key if the value is not entered.
+   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+   *    `required` when you want to data-bind to the `required` attribute.
+   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+   *    minlength.
+   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+   *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
+   *    any length.
+   * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
+   *    that contains the regular expression body that will be converted to a regular expression
+   *    as in the ngPattern directive.
+   * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
+   *    a RegExp found by evaluating the Angular expression given in the attribute value.
+   *    If the expression evaluates to a RegExp object, then this is used directly.
+   *    If the expression evaluates to a string, then it will be converted to a RegExp
+   *    after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
+   *    `new RegExp('^abc$')`.<br />
+   *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to
+   *    start at the index of the last search's match, thus not taking the whole input value into
+   *    account.
+   * @param {string=} ngChange Angular expression to be executed when input changes due to user
+   *    interaction with the input element.
+   *
+   * @example
+      <example name="number-input-directive" module="numberExample">
+        <file name="index.html">
+         <script>
+           angular.module('numberExample', [])
+             .controller('ExampleController', ['$scope', function($scope) {
+               $scope.example = {
+                 value: 12
+               };
+             }]);
+         </script>
+         <form name="myForm" ng-controller="ExampleController">
+           <label>Number:
+             <input type="number" name="input" ng-model="example.value"
+                    min="0" max="99" required>
+          </label>
+           <div role="alert">
+             <span class="error" ng-show="myForm.input.$error.required">
+               Required!</span>
+             <span class="error" ng-show="myForm.input.$error.number">
+               Not valid number!</span>
+           </div>
+           <tt>value = {{example.value}}</tt><br/>
+           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+          </form>
+        </file>
+        <file name="protractor.js" type="protractor">
+          var value = element(by.binding('example.value'));
+          var valid = element(by.binding('myForm.input.$valid'));
+          var input = element(by.model('example.value'));
+
+          it('should initialize to model', function() {
+            expect(value.getText()).toContain('12');
+            expect(valid.getText()).toContain('true');
+          });
+
+          it('should be invalid if empty', function() {
+            input.clear();
+            input.sendKeys('');
+            expect(value.getText()).toEqual('value =');
+            expect(valid.getText()).toContain('false');
+          });
+
+          it('should be invalid if over max', function() {
+            input.clear();
+            input.sendKeys('123');
+            expect(value.getText()).toEqual('value =');
+            expect(valid.getText()).toContain('false');
+          });
+        </file>
+      </example>
+   */
+  'number': numberInputType,
+
+
+  /**
+   * @ngdoc input
+   * @name input[url]
+   *
+   * @description
+   * Text input with URL validation. Sets the `url` validation error key if the content is not a
+   * valid URL.
+   *
+   * <div class="alert alert-warning">
+   * **Note:** `input[url]` uses a regex to validate urls that is derived from the regex
+   * used in Chromium. If you need stricter validation, you can use `ng-pattern` or modify
+   * the built-in validators (see the {@link guide/forms Forms guide})
+   * </div>
+   *
+   * @param {string} ngModel Assignable angular expression to data-bind to.
+   * @param {string=} name Property name of the form under which the control is published.
+   * @param {string=} required Sets `required` validation error key if the value is not entered.
+   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+   *    `required` when you want to data-bind to the `required` attribute.
+   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+   *    minlength.
+   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+   *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
+   *    any length.
+   * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
+   *    that contains the regular expression body that will be converted to a regular expression
+   *    as in the ngPattern directive.
+   * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
+   *    a RegExp found by evaluating the Angular expression given in the attribute value.
+   *    If the expression evaluates to a RegExp object, then this is used directly.
+   *    If the expression evaluates to a string, then it will be converted to a RegExp
+   *    after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
+   *    `new RegExp('^abc$')`.<br />
+   *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to
+   *    start at the index of the last search's match, thus not taking the whole input value into
+   *    account.
+   * @param {string=} ngChange Angular expression to be executed when input changes due to user
+   *    interaction with the input element.
+   *
+   * @example
+      <example name="url-input-directive" module="urlExample">
+        <file name="index.html">
+         <script>
+           angular.module('urlExample', [])
+             .controller('ExampleController', ['$scope', function($scope) {
+               $scope.url = {
+                 text: 'http://google.com'
+               };
+             }]);
+         </script>
+         <form name="myForm" ng-controller="ExampleController">
+           <label>URL:
+             <input type="url" name="input" ng-model="url.text" required>
+           <label>
+           <div role="alert">
+             <span class="error" ng-show="myForm.input.$error.required">
+               Required!</span>
+             <span class="error" ng-show="myForm.input.$error.url">
+               Not valid url!</span>
+           </div>
+           <tt>text = {{url.text}}</tt><br/>
+           <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+           <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+           <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+           <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+           <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/>
+          </form>
+        </file>
+        <file name="protractor.js" type="protractor">
+          var text = element(by.binding('url.text'));
+          var valid = element(by.binding('myForm.input.$valid'));
+          var input = element(by.model('url.text'));
+
+          it('should initialize to model', function() {
+            expect(text.getText()).toContain('http://google.com');
+            expect(valid.getText()).toContain('true');
+          });
+
+          it('should be invalid if empty', function() {
+            input.clear();
+            input.sendKeys('');
+
+            expect(text.getText()).toEqual('text =');
+            expect(valid.getText()).toContain('false');
+          });
+
+          it('should be invalid if not url', function() {
+            input.clear();
+            input.sendKeys('box');
+
+            expect(valid.getText()).toContain('false');
+          });
+        </file>
+      </example>
+   */
+  'url': urlInputType,
+
+
+  /**
+   * @ngdoc input
+   * @name input[email]
+   *
+   * @description
+   * Text input with email validation. Sets the `email` validation error key if not a valid email
+   * address.
+   *
+   * <div class="alert alert-warning">
+   * **Note:** `input[email]` uses a regex to validate email addresses that is derived from the regex
+   * used in Chromium. If you need stricter validation (e.g. requiring a top-level domain), you can
+   * use `ng-pattern` or modify the built-in validators (see the {@link guide/forms Forms guide})
+   * </div>
+   *
+   * @param {string} ngModel Assignable angular expression to data-bind to.
+   * @param {string=} name Property name of the form under which the control is published.
+   * @param {string=} required Sets `required` validation error key if the value is not entered.
+   * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+   *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+   *    `required` when you want to data-bind to the `required` attribute.
+   * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+   *    minlength.
+   * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+   *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of
+   *    any length.
+   * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string
+   *    that contains the regular expression body that will be converted to a regular expression
+   *    as in the ngPattern directive.
+   * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
+   *    a RegExp found by evaluating the Angular expression given in the attribute value.
+   *    If the expression evaluates to a RegExp object, then this is used directly.
+   *    If the expression evaluates to a string, then it will be converted to a RegExp
+   *    after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
+   *    `new RegExp('^abc$')`.<br />
+   *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to
+   *    start at the index of the last search's match, thus not taking the whole input value into
+   *    account.
+   * @param {string=} ngChange Angular expression to be executed when input changes due to user
+   *    interaction with the input element.
+   *
+   * @example
+      <example name="email-input-directive" module="emailExample">
+        <file name="index.html">
+         <script>
+           angular.module('emailExample', [])
+             .controller('ExampleController', ['$scope', function($scope) {
+               $scope.email = {
+                 text: [email-masked]'
+               };
+             }]);
+         </script>
+           <form name="myForm" ng-controller="ExampleController">
+             <label>Email:
+               <input type="email" name="input" ng-model="email.text" required>
+             </label>
+             <div role="alert">
+               <span class="error" ng-show="myForm.input.$error.required">
+                 Required!</span>
+               <span class="error" ng-show="myForm.input.$error.email">
+                 Not valid email!</span>
+             </div>
+             <tt>text = {{email.text}}</tt><br/>
+             <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/>
+             <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/>
+             <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+             <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+             <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/>
+           </form>
+         </file>
+        <file name="protractor.js" type="protractor">
+          var text = element(by.binding('email.text'));
+          var valid = element(by.binding('myForm.input.$valid'));
+          var input = element(by.model('email.text'));
+
+          it('should initialize to model', function() {
+            expect(text.getText()).toContain([email-masked]');
+            expect(valid.getText()).toContain('true');
+          });
+
+          it('should be invalid if empty', function() {
+            input.clear();
+            input.sendKeys('');
+            expect(text.getText()).toEqual('text =');
+            expect(valid.getText()).toContain('false');
+          });
+
+          it('should be invalid if not email', function() {
+            input.clear();
+            input.sendKeys('xxx');
+
+            expect(valid.getText()).toContain('false');
+          });
+        </file>
+      </example>
+   */
+  'email': emailInputType,
+
+
+  /**
+   * @ngdoc input
+   * @name input[radio]
+   *
+   * @description
+   * HTML radio button.
+   *
+   * @param {string} ngModel Assignable angular expression to data-bind to.
+   * @param {string} value The value to which the `ngModel` expression should be set when selected.
+   *    Note that `value` only supports `string` values, i.e. the scope model needs to be a string,
+   *    too. Use `ngValue` if you need complex models (`number`, `object`, ...).
+   * @param {string=} name Property name of the form under which the control is published.
+   * @param {string=} ngChange Angular expression to be executed when input changes due to user
+   *    interaction with the input element.
+   * @param {string} ngValue Angular expression to which `ngModel` will be be set when the radio
+   *    is selected. Should be used instead of the `value` attribute if you need
+   *    a non-string `ngModel` (`boolean`, `array`, ...).
+   *
+   * @example
+      <example name="radio-input-directive" module="radioExample">
+        <file name="index.html">
+         <script>
+           angular.module('radioExample', [])
+             .controller('ExampleController', ['$scope', function($scope) {
+               $scope.color = {
+                 name: 'blue'
+               };
+               $scope.specialValue = {
+                 "id": "12345",
+                 "value": "green"
+               };
+             }]);
+         </script>
+         <form name="myForm" ng-controller="ExampleController">
+           <label>
+             <input type="radio" ng-model="color.name" value="red">
+             Red
+           </label><br/>
+           <label>
+             <input type="radio" ng-model="color.name" ng-value="specialValue">
+             Green
+           </label><br/>
+           <label>
+             <input type="radio" ng-model="color.name" value="blue">
+             Blue
+           </label><br/>
+           <tt>color = {{color.name | json}}</tt><br/>
+          </form>
+          Note that `ng-value="specialValue"` sets radio item's value to be the value of `$scope.specialValue`.
+        </file>
+        <file name="protractor.js" type="protractor">
+          it('should change state', function() {
+            var color = element(by.binding('color.name'));
+
+            expect(color.getText()).toContain('blue');
+
+            element.all(by.model('color.name')).get(0).click();
+
+            expect(color.getText()).toContain('red');
+          });
+        </file>
+      </example>
+   */
+  'radio': radioInputType,
+
+
+  /**
+   * @ngdoc input
+   * @name input[checkbox]
+   *
+   * @description
+   * HTML checkbox.
+   *
+   * @param {string} ngModel Assignable angular expression to data-bind to.
+   * @param {string=} name Property name of the form under which the control is published.
+   * @param {expression=} ngTrueValue The value to which the expression should be set when selected.
+   * @param {expression=} ngFalseValue The value to which the expression should be set when not selected.
+   * @param {string=} ngChange Angular expression to be executed when input changes due to user
+   *    interaction with the input element.
+   *
+   * @example
+      <example name="checkbox-input-directive" module="checkboxExample">
+        <file name="index.html">
+         <script>
+           angular.module('checkboxExample', [])
+             .controller('ExampleController', ['$scope', function($scope) {
+               $scope.checkboxModel = {
+                value1 : true,
+                value2 : 'YES'
+              };
+             }]);
+         </script>
+         <form name="myForm" ng-controller="ExampleController">
+           <label>Value1:
+             <input type="checkbox" ng-model="checkboxModel.value1">
+           </label><br/>
+           <label>Value2:
+             <input type="checkbox" ng-model="checkboxModel.value2"
+                    ng-true-value="'YES'" ng-false-value="'NO'">
+            </label><br/>
+           <tt>value1 = {{checkboxModel.value1}}</tt><br/>
+           <tt>value2 = {{checkboxModel.value2}}</tt><br/>
+          </form>
+        </file>
+        <file name="protractor.js" type="protractor">
+          it('should change state', function() {
+            var value1 = element(by.binding('checkboxModel.value1'));
+            var value2 = element(by.binding('checkboxModel.value2'));
+
+            expect(value1.getText()).toContain('true');
+            expect(value2.getText()).toContain('YES');
+
+            element(by.model('checkboxModel.value1')).click();
+            element(by.model('checkboxModel.value2')).click();
+
+            expect(value1.getText()).toContain('false');
+            expect(value2.getText()).toContain('NO');
+          });
+        </file>
+      </example>
+   */
+  'checkbox': checkboxInputType,
+
+  'hidden': noop,
+  'button': noop,
+  'submit': noop,
+  'reset': noop,
+  'file': noop
+};
+
+function stringBasedInputType(ctrl) {
+  ctrl.$formatters.push(function(value) {
+    return ctrl.$isEmpty(value) ? value : value.toString();
+  });
+}
+
+function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
+  baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
+  stringBasedInputType(ctrl);
+}
+
+function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) {
+  var type = lowercase(element[0].type);
+
+  // In composition mode, users are still inputing intermediate text buffer,
+  // hold the listener until composition is done.
+  // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent
+  if (!$sniffer.android) {
+    var composing = false;
+
+    element.on('compositionstart', function(data) {
+      composing = true;
+    });
+
+    element.on('compositionend', function() {
+      composing = false;
+      listener();
+    });
+  }
+
+  var listener = function(ev) {
+    if (timeout) {
+      $browser.defer.cancel(timeout);
+      timeout = null;
+    }
+    if (composing) return;
+    var value = element.val(),
+        event = ev && ev.type;
+
+    // By default we will trim the value
+    // If the attribute ng-trim exists we will avoid trimming
+    // If input type is 'password', the value is never trimmed
+    if (type !== 'password' && (!attr.ngTrim || attr.ngTrim !== 'false')) {
+      value = trim(value);
+    }
+
+    // If a control is suffering from bad input (due to native validators), browsers discard its
+    // value, so it may be necessary to revalidate (by calling $setViewValue again) even if the
+    // control's value is the same empty value twice in a row.
+    if (ctrl.$viewValue !== value || (value === '' && ctrl.$$hasNativeValidators)) {
+      ctrl.$setViewValue(value, event);
+    }
+  };
+
+  // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the
+  // input event on backspace, delete or cut
+  if ($sniffer.hasEvent('input')) {
+    element.on('input', listener);
+  } else {
+    var timeout;
+
+    var deferListener = function(ev, input, origValue) {
+      if (!timeout) {
+        timeout = $browser.defer(function() {
+          timeout = null;
+          if (!input || input.value !== origValue) {
+            listener(ev);
+          }
+        });
+      }
+    };
+
+    element.on('keydown', function(event) {
+      var key = event.keyCode;
+
+      // ignore
+      //    command            modifiers                   arrows
+      if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return;
+
+      deferListener(event, this, this.value);
+    });
+
+    // if user modifies input value using context menu in IE, we need "paste" and "cut" events to catch it
+    if ($sniffer.hasEvent('paste')) {
+      element.on('paste cut', deferListener);
+    }
+  }
+
+  // if user paste into input using mouse on older browser
+  // or form autocomplete on newer browser, we need "change" event to catch it
+  element.on('change', listener);
+
+  ctrl.$render = function() {
+    // Workaround for Firefox validation #12102.
+    var value = ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue;
+    if (element.val() !== value) {
+      element.val(value);
+    }
+  };
+}
+
+function weekParser(isoWeek, existingDate) {
+  if (isDate(isoWeek)) {
+    return isoWeek;
+  }
+
+  if (isString(isoWeek)) {
+    WEEK_REGEXP.lastIndex = 0;
+    var parts = WEEK_REGEXP.exec(isoWeek);
+    if (parts) {
+      var year = +parts[1],
+          week = +parts[2],
+          hours = 0,
+          minutes = 0,
+          seconds = 0,
+          milliseconds = 0,
+          firstThurs = getFirstThursdayOfYear(year),
+          addDays = (week - 1) * 7;
+
+      if (existingDate) {
+        hours = existingDate.getHours();
+        minutes = existingDate.getMinutes();
+        seconds = existingDate.getSeconds();
+        milliseconds = existingDate.getMilliseconds();
+      }
+
+      return new Date(year, 0, firstThurs.getDate() + addDays, hours, minutes, seconds, milliseconds);
+    }
+  }
+
+  return NaN;
+}
+
+function createDateParser(regexp, mapping) {
+  return function(iso, date) {
+    var parts, map;
+
+    if (isDate(iso)) {
+      return iso;
+    }
+
+    if (isString(iso)) {
+      // When a date is JSON'ified to wraps itself inside of an extra
+      // set of double quotes. This makes the date parsing code unable
+      // to match the date string and parse it as a date.
+      if (iso.charAt(0) == '"' && iso.charAt(iso.length - 1) == '"') {
+        iso = iso.substring(1, iso.length - 1);
+      }
+      if (ISO_DATE_REGEXP.test(iso)) {
+        return new Date(iso);
+      }
+      regexp.lastIndex = 0;
+      parts = regexp.exec(iso);
+
+      if (parts) {
+        parts.shift();
+        if (date) {
+          map = {
+            yyyy: date.getFullYear(),
+            MM: date.getMonth() + 1,
+            dd: date.getDate(),
+            HH: date.getHours(),
+            mm: date.getMinutes(),
+            ss: date.getSeconds(),
+            sss: date.getMilliseconds() / 1000
+          };
+        } else {
+          map = { yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0 };
+        }
+
+        forEach(parts, function(part, index) {
+          if (index < mapping.length) {
+            map[mapping[index]] = +part;
+          }
+        });
+        return new Date(map.yyyy, map.MM - 1, map.dd, map.HH, map.mm, map.ss || 0, map.sss * 1000 || 0);
+      }
+    }
+
+    return NaN;
+  };
+}
+
+function createDateInputType(type, regexp, parseDate, format) {
+  return function dynamicDateInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter) {
+    badInputChecker(scope, element, attr, ctrl);
+    baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
+    var timezone = ctrl && ctrl.$options && ctrl.$options.timezone;
+    var previousDate;
+
+    ctrl.$$parserName = type;
+    ctrl.$parsers.push(function(value) {
+      if (ctrl.$isEmpty(value)) return null;
+      if (regexp.test(value)) {
+        // Note: We cannot read ctrl.$modelValue, as there might be a different
+        // parser/formatter in the processing chain so that the model
+        // contains some different data format!
+        var parsedDate = parseDate(value, previousDate);
+        if (timezone) {
+          parsedDate = convertTimezoneToLocal(parsedDate, timezone);
+        }
+        return parsedDate;
+      }
+      return undefined;
+    });
+
+    ctrl.$formatters.push(function(value) {
+      if (value && !isDate(value)) {
+        throw ngModelMinErr('datefmt', 'Expected `{0}` to be a date', value);
+      }
+      if (isValidDate(value)) {
+        previousDate = value;
+        if (previousDate && timezone) {
+          previousDate = convertTimezoneToLocal(previousDate, timezone, true);
+        }
+        return $filter('date')(value, format, timezone);
+      } else {
+        previousDate = null;
+        return '';
+      }
+    });
+
+    if (isDefined(attr.min) || attr.ngMin) {
+      var minVal;
+      ctrl.$validators.min = function(value) {
+        return !isValidDate(value) || isUndefined(minVal) || parseDate(value) >= minVal;
+      };
+      attr.$observe('min', function(val) {
+        minVal = parseObservedDateValue(val);
+        ctrl.$validate();
+      });
+    }
+
+    if (isDefined(attr.max) || attr.ngMax) {
+      var maxVal;
+      ctrl.$validators.max = function(value) {
+        return !isValidDate(value) || isUndefined(maxVal) || parseDate(value) <= maxVal;
+      };
+      attr.$observe('max', function(val) {
+        maxVal = parseObservedDateValue(val);
+        ctrl.$validate();
+      });
+    }
+
+    function isValidDate(value) {
+      // Invalid Date: getTime() returns NaN
+      return value && !(value.getTime && value.getTime() !== value.getTime());
+    }
+
+    function parseObservedDateValue(val) {
+      return isDefined(val) && !isDate(val) ? parseDate(val) || undefined : val;
+    }
+  };
+}
+
+function badInputChecker(scope, element, attr, ctrl) {
+  var node = element[0];
+  var nativeValidation = ctrl.$$hasNativeValidators = isObject(node.validity);
+  if (nativeValidation) {
+    ctrl.$parsers.push(function(value) {
+      var validity = element.prop(VALIDITY_STATE_PROPERTY) || {};
+      // Detect bug in FF35 for input[email] (https://bugzilla.mozilla.org/show_bug.cgi?id=1064430):
+      // - also sets validity.badInput (should only be validity.typeMismatch).
+      // - see http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#e-mail-state-(type=email)
+      // - can ignore this case as we can still read out the erroneous email...
+      return validity.badInput && !validity.typeMismatch ? undefined : value;
+    });
+  }
+}
+
+function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
+  badInputChecker(scope, element, attr, ctrl);
+  baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
+
+  ctrl.$$parserName = 'number';
+  ctrl.$parsers.push(function(value) {
+    if (ctrl.$isEmpty(value))      return null;
+    if (NUMBER_REGEXP.test(value)) return parseFloat(value);
+    return undefined;
+  });
+
+  ctrl.$formatters.push(function(value) {
+    if (!ctrl.$isEmpty(value)) {
+      if (!isNumber(value)) {
+        throw ngModelMinErr('numfmt', 'Expected `{0}` to be a number', value);
+      }
+      value = value.toString();
+    }
+    return value;
+  });
+
+  if (isDefined(attr.min) || attr.ngMin) {
+    var minVal;
+    ctrl.$validators.min = function(value) {
+      return ctrl.$isEmpty(value) || isUndefined(minVal) || value >= minVal;
+    };
+
+    attr.$observe('min', function(val) {
+      if (isDefined(val) && !isNumber(val)) {
+        val = parseFloat(val, 10);
+      }
+      minVal = isNumber(val) && !isNaN(val) ? val : undefined;
+      // TODO(matsko): implement validateLater to reduce number of validations
+      ctrl.$validate();
+    });
+  }
+
+  if (isDefined(attr.max) || attr.ngMax) {
+    var maxVal;
+    ctrl.$validators.max = function(value) {
+      return ctrl.$isEmpty(value) || isUndefined(maxVal) || value <= maxVal;
+    };
+
+    attr.$observe('max', function(val) {
+      if (isDefined(val) && !isNumber(val)) {
+        val = parseFloat(val, 10);
+      }
+      maxVal = isNumber(val) && !isNaN(val) ? val : undefined;
+      // TODO(matsko): implement validateLater to reduce number of validations
+      ctrl.$validate();
+    });
+  }
+}
+
+function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
+  // Note: no badInputChecker here by purpose as `url` is only a validation
+  // in browsers, i.e. we can always read out input.value even if it is not valid!
+  baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
+  stringBasedInputType(ctrl);
+
+  ctrl.$$parserName = 'url';
+  ctrl.$validators.url = function(modelValue, viewValue) {
+    var value = modelValue || viewValue;
+    return ctrl.$isEmpty(value) || URL_REGEXP.test(value);
+  };
+}
+
+function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
+  // Note: no badInputChecker here by purpose as `url` is only a validation
+  // in browsers, i.e. we can always read out input.value even if it is not valid!
+  baseInputType(scope, element, attr, ctrl, $sniffer, $browser);
+  stringBasedInputType(ctrl);
+
+  ctrl.$$parserName = 'email';
+  ctrl.$validators.email = function(modelValue, viewValue) {
+    var value = modelValue || viewValue;
+    return ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value);
+  };
+}
+
+function radioInputType(scope, element, attr, ctrl) {
+  // make the name unique, if not defined
+  if (isUndefined(attr.name)) {
+    element.attr('name', nextUid());
+  }
+
+  var listener = function(ev) {
+    if (element[0].checked) {
+      ctrl.$setViewValue(attr.value, ev && ev.type);
+    }
+  };
+
+  element.on('click', listener);
+
+  ctrl.$render = function() {
+    var value = attr.value;
+    element[0].checked = (value == ctrl.$viewValue);
+  };
+
+  attr.$observe('value', ctrl.$render);
+}
+
+function parseConstantExpr($parse, context, name, expression, fallback) {
+  var parseFn;
+  if (isDefined(expression)) {
+    parseFn = $parse(expression);
+    if (!parseFn.constant) {
+      throw ngModelMinErr('constexpr', 'Expected constant expression for `{0}`, but saw ' +
+                                   '`{1}`.', name, expression);
+    }
+    return parseFn(context);
+  }
+  return fallback;
+}
+
+function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) {
+  var trueValue = parseConstantExpr($parse, scope, 'ngTrueValue', attr.ngTrueValue, true);
+  var falseValue = parseConstantExpr($parse, scope, 'ngFalseValue', attr.ngFalseValue, false);
+
+  var listener = function(ev) {
+    ctrl.$setViewValue(element[0].checked, ev && ev.type);
+  };
+
+  element.on('click', listener);
+
+  ctrl.$render = function() {
+    element[0].checked = ctrl.$viewValue;
+  };
+
+  // Override the standard `$isEmpty` because the $viewValue of an empty checkbox is always set to `false`
+  // This is because of the parser below, which compares the `$modelValue` with `trueValue` to convert
+  // it to a boolean.
+  ctrl.$isEmpty = function(value) {
+    return value === false;
+  };
+
+  ctrl.$formatters.push(function(value) {
+    return equals(value, trueValue);
+  });
+
+  ctrl.$parsers.push(function(value) {
+    return value ? trueValue : falseValue;
+  });
+}
+
+
+/**
+ * @ngdoc directive
+ * @name textarea
+ * @restrict E
+ *
+ * @description
+ * HTML textarea element control with angular data-binding. The data-binding and validation
+ * properties of this element are exactly the same as those of the
+ * {@link ng.directive:input input element}.
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+ *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+ *    `required` when you want to data-bind to the `required` attribute.
+ * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+ *    minlength.
+ * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+ *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any
+ *    length.
+ * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
+ *    a RegExp found by evaluating the Angular expression given in the attribute value.
+ *    If the expression evaluates to a RegExp object, then this is used directly.
+ *    If the expression evaluates to a string, then it will be converted to a RegExp
+ *    after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
+ *    `new RegExp('^abc$')`.<br />
+ *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to
+ *    start at the index of the last search's match, thus not taking the whole input value into
+ *    account.
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
+ *    interaction with the input element.
+ * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name input
+ * @restrict E
+ *
+ * @description
+ * HTML input element control. When used together with {@link ngModel `ngModel`}, it provides data-binding,
+ * input state control, and validation.
+ * Input control follows HTML5 input types and polyfills the HTML5 validation behavior for older browsers.
+ *
+ * <div class="alert alert-warning">
+ * **Note:** Not every feature offered is available for all input types.
+ * Specifically, data binding and event handling via `ng-model` is unsupported for `input[file]`.
+ * </div>
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
+ * @param {boolean=} ngRequired Sets `required` attribute if set to true
+ * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than
+ *    minlength.
+ * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than
+ *    maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any
+ *    length.
+ * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match
+ *    a RegExp found by evaluating the Angular expression given in the attribute value.
+ *    If the expression evaluates to a RegExp object, then this is used directly.
+ *    If the expression evaluates to a string, then it will be converted to a RegExp
+ *    after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to
+ *    `new RegExp('^abc$')`.<br />
+ *    **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to
+ *    start at the index of the last search's match, thus not taking the whole input value into
+ *    account.
+ * @param {string=} ngChange Angular expression to be executed when input changes due to user
+ *    interaction with the input element.
+ * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input.
+ *    This parameter is ignored for input[type=password] controls, which will never trim the
+ *    input.
+ *
+ * @example
+    <example name="input-directive" module="inputExample">
+      <file name="index.html">
+       <script>
+          angular.module('inputExample', [])
+            .controller('ExampleController', ['$scope', function($scope) {
+              $scope.user = {name: 'guest', last: 'visitor'};
+            }]);
+       </script>
+       <div ng-controller="ExampleController">
+         <form name="myForm">
+           <label>
+              User name:
+              <input type="text" name="userName" ng-model="user.name" required>
+           </label>
+           <div role="alert">
+             <span class="error" ng-show="myForm.userName.$error.required">
+              Required!</span>
+           </div>
+           <label>
+              Last name:
+              <input type="text" name="lastName" ng-model="user.last"
+              ng-minlength="3" ng-maxlength="10">
+           </label>
+           <div role="alert">
+             <span class="error" ng-show="myForm.lastName.$error.minlength">
+               Too short!</span>
+             <span class="error" ng-show="myForm.lastName.$error.maxlength">
+               Too long!</span>
+           </div>
+         </form>
+         <hr>
+         <tt>user = {{user}}</tt><br/>
+         <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br/>
+         <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br/>
+         <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br/>
+         <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br/>
+         <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+         <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+         <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br/>
+         <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br/>
+       </div>
+      </file>
+      <file name="protractor.js" type="protractor">
+        var user = element(by.exactBinding('user'));
+        var userNameValid = element(by.binding('myForm.userName.$valid'));
+        var lastNameValid = element(by.binding('myForm.lastName.$valid'));
+        var lastNameError = element(by.binding('myForm.lastName.$error'));
+        var formValid = element(by.binding('myForm.$valid'));
+        var userNameInput = element(by.model('user.name'));
+        var userLastInput = element(by.model('user.last'));
+
+        it('should initialize to model', function() {
+          expect(user.getText()).toContain('{"name":"guest","last":"visitor"}');
+          expect(userNameValid.getText()).toContain('true');
+          expect(formValid.getText()).toContain('true');
+        });
+
+        it('should be invalid if empty when required', function() {
+          userNameInput.clear();
+          userNameInput.sendKeys('');
+
+          expect(user.getText()).toContain('{"last":"visitor"}');
+          expect(userNameValid.getText()).toContain('false');
+          expect(formValid.getText()).toContain('false');
+        });
+
+        it('should be valid if empty when min length is set', function() {
+          userLastInput.clear();
+          userLastInput.sendKeys('');
+
+          expect(user.getText()).toContain('{"name":"guest","last":""}');
+          expect(lastNameValid.getText()).toContain('true');
+          expect(formValid.getText()).toContain('true');
+        });
+
+        it('should be invalid if less than required min length', function() {
+          userLastInput.clear();
+          userLastInput.sendKeys('xx');
+
+          expect(user.getText()).toContain('{"name":"guest"}');
+          expect(lastNameValid.getText()).toContain('false');
+          expect(lastNameError.getText()).toContain('minlength');
+          expect(formValid.getText()).toContain('false');
+        });
+
+        it('should be invalid if longer than max length', function() {
+          userLastInput.clear();
+          userLastInput.sendKeys('some ridiculously long name');
+
+          expect(user.getText()).toContain('{"name":"guest"}');
+          expect(lastNameValid.getText()).toContain('false');
+          expect(lastNameError.getText()).toContain('maxlength');
+          expect(formValid.getText()).toContain('false');
+        });
+      </file>
+    </example>
+ */
+var inputDirective = ['$browser', '$sniffer', '$filter', '$parse',
+    function($browser, $sniffer, $filter, $parse) {
+  return {
+    restrict: 'E',
+    require: ['?ngModel'],
+    link: {
+      pre: function(scope, element, attr, ctrls) {
+        if (ctrls[0]) {
+          (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrls[0], $sniffer,
+                                                              $browser, $filter, $parse);
+        }
+      }
+    }
+  };
+}];
+
+
+
+var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/;
+/**
+ * @ngdoc directive
+ * @name ngValue
+ *
+ * @description
+ * Binds the given expression to the value of `<option>` or {@link input[radio] `input[radio]`},
+ * so that when the element is selected, the {@link ngModel `ngModel`} of that element is set to
+ * the bound value.
+ *
+ * `ngValue` is useful when dynamically generating lists of radio buttons using
+ * {@link ngRepeat `ngRepeat`}, as shown below.
+ *
+ * Likewise, `ngValue` can be used to generate `<option>` elements for
+ * the {@link select `select`} element. In that case however, only strings are supported
+ * for the `value `attribute, so the resulting `ngModel` will always be a string.
+ * Support for `select` models with non-string values is available via `ngOptions`.
+ *
+ * @element input
+ * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute
+ *   of the `input` element
+ *
+ * @example
+    <example name="ngValue-directive" module="valueExample">
+      <file name="index.html">
+       <script>
+          angular.module('valueExample', [])
+            .controller('ExampleController', ['$scope', function($scope) {
+              $scope.names = ['pizza', 'unicorns', 'robots'];
+              $scope.my = { favorite: 'unicorns' };
+            }]);
+       </script>
+        <form ng-controller="ExampleController">
+          <h2>Which is your favorite?</h2>
+            <label ng-repeat="name in names" for="{{name}}">
+              {{name}}
+              <input type="radio"
+                     ng-model="my.favorite"
+                     ng-value="name"
+                     id="{{name}}"
+                     name="favorite">
+            </label>
+          <div>You chose {{my.favorite}}</div>
+        </form>
+      </file>
+      <file name="protractor.js" type="protractor">
+        var favorite = element(by.binding('my.favorite'));
+
+        it('should initialize to model', function() {
+          expect(favorite.getText()).toContain('unicorns');
+        });
+        it('should bind the values to the inputs', function() {
+          element.all(by.model('my.favorite')).get(0).click();
+          expect(favorite.getText()).toContain('pizza');
+        });
+      </file>
+    </example>
+ */
+var ngValueDirective = function() {
+  return {
+    restrict: 'A',
+    priority: 100,
+    compile: function(tpl, tplAttr) {
+      if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) {
+        return function ngValueConstantLink(scope, elm, attr) {
+          attr.$set('value', scope.$eval(attr.ngValue));
+        };
+      } else {
+        return function ngValueLink(scope, elm, attr) {
+          scope.$watch(attr.ngValue, function valueWatchAction(value) {
+            attr.$set('value', value);
+          });
+        };
+      }
+    }
+  };
+};
+
+/**
+ * @ngdoc directive
+ * @name ngBind
+ * @restrict AC
+ *
+ * @description
+ * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element
+ * with the value of a given expression, and to update the text content when the value of that
+ * expression changes.
+ *
+ * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like
+ * `{{ expression }}` which is similar but less verbose.
+ *
+ * It is preferable to use `ngBind` instead of `{{ expression }}` if a template is momentarily
+ * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an
+ * element attribute, it makes the bindings invisible to the user while the page is loading.
+ *
+ * An alternative solution to this problem would be using the
+ * {@link ng.directive:ngCloak ngCloak} directive.
+ *
+ *
+ * @element ANY
+ * @param {expression} ngBind {@link guide/expression Expression} to evaluate.
+ *
+ * @example
+ * Enter a name in the Live Preview text box; the greeting below the text box changes instantly.
+   <example module="bindExample">
+     <file name="index.html">
+       <script>
+         angular.module('bindExample', [])
+           .controller('ExampleController', ['$scope', function($scope) {
+             $scope.name = 'Whirled';
+           }]);
+       </script>
+       <div ng-controller="ExampleController">
+         <label>Enter name: <input type="text" ng-model="name"></label><br>
+         Hello <span ng-bind="name"></span>!
+       </div>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should check ng-bind', function() {
+         var nameInput = element(by.model('name'));
+
+         expect(element(by.binding('name')).getText()).toBe('Whirled');
+         nameInput.clear();
+         nameInput.sendKeys('world');
+         expect(element(by.binding('name')).getText()).toBe('world');
+       });
+     </file>
+   </example>
+ */
+var ngBindDirective = ['$compile', function($compile) {
+  return {
+    restrict: 'AC',
+    compile: function ngBindCompile(templateElement) {
+      $compile.$$addBindingClass(templateElement);
+      return function ngBindLink(scope, element, attr) {
+        $compile.$$addBindingInfo(element, attr.ngBind);
+        element = element[0];
+        scope.$watch(attr.ngBind, function ngBindWatchAction(value) {
+          element.textContent = isUndefined(value) ? '' : value;
+        });
+      };
+    }
+  };
+}];
+
+
+/**
+ * @ngdoc directive
+ * @name ngBindTemplate
+ *
+ * @description
+ * The `ngBindTemplate` directive specifies that the element
+ * text content should be replaced with the interpolation of the template
+ * in the `ngBindTemplate` attribute.
+ * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}`
+ * expressions. This directive is needed since some HTML elements
+ * (such as TITLE and OPTION) cannot contain SPAN elements.
+ *
+ * @element ANY
+ * @param {string} ngBindTemplate template of form
+ *   <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval.
+ *
+ * @example
+ * Try it here: enter text in text box and watch the greeting change.
+   <example module="bindExample">
+     <file name="index.html">
+       <script>
+         angular.module('bindExample', [])
+           .controller('ExampleController', ['$scope', function($scope) {
+             $scope.salutation = 'Hello';
+             $scope.name = 'World';
+           }]);
+       </script>
+       <div ng-controller="ExampleController">
+        <label>Salutation: <input type="text" ng-model="salutation"></label><br>
+        <label>Name: <input type="text" ng-model="name"></label><br>
+        <pre ng-bind-template="{{salutation}} {{name}}!"></pre>
+       </div>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should check ng-bind', function() {
+         var salutationElem = element(by.binding('salutation'));
+         var salutationInput = element(by.model('salutation'));
+         var nameInput = element(by.model('name'));
+
+         expect(salutationElem.getText()).toBe('Hello World!');
+
+         salutationInput.clear();
+         salutationInput.sendKeys('Greetings');
+         nameInput.clear();
+         nameInput.sendKeys('user');
+
+         expect(salutationElem.getText()).toBe('Greetings user!');
+       });
+     </file>
+   </example>
+ */
+var ngBindTemplateDirective = ['$interpolate', '$compile', function($interpolate, $compile) {
+  return {
+    compile: function ngBindTemplateCompile(templateElement) {
+      $compile.$$addBindingClass(templateElement);
+      return function ngBindTemplateLink(scope, element, attr) {
+        var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate));
+        $compile.$$addBindingInfo(element, interpolateFn.expressions);
+        element = element[0];
+        attr.$observe('ngBindTemplate', function(value) {
+          element.textContent = isUndefined(value) ? '' : value;
+        });
+      };
+    }
+  };
+}];
+
+
+/**
+ * @ngdoc directive
+ * @name ngBindHtml
+ *
+ * @description
+ * Evaluates the expression and inserts the resulting HTML into the element in a secure way. By default,
+ * the resulting HTML content will be sanitized using the {@link ngSanitize.$sanitize $sanitize} service.
+ * To utilize this functionality, ensure that `$sanitize` is available, for example, by including {@link
+ * ngSanitize} in your module's dependencies (not in core Angular). In order to use {@link ngSanitize}
+ * in your module's dependencies, you need to include "angular-sanitize.js" in your application.
+ *
+ * You may also bypass sanitization for values you know are safe. To do so, bind to
+ * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}.  See the example
+ * under {@link ng.$sce#show-me-an-example-using-sce- Strict Contextual Escaping (SCE)}.
+ *
+ * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you
+ * will have an exception (instead of an exploit.)
+ *
+ * @element ANY
+ * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate.
+ *
+ * @example
+
+   <example module="bindHtmlExample" deps="angular-sanitize.js">
+     <file name="index.html">
+       <div ng-controller="ExampleController">
+        <p ng-bind-html="myHTML"></p>
+       </div>
+     </file>
+
+     <file name="script.js">
+       angular.module('bindHtmlExample', ['ngSanitize'])
+         .controller('ExampleController', ['$scope', function($scope) {
+           $scope.myHTML =
+              'I am an <code>HTML</code>string with ' +
+              '<a href="#">links!</a> and other <em>stuff</em>';
+         }]);
+     </file>
+
+     <file name="protractor.js" type="protractor">
+       it('should check ng-bind-html', function() {
+         expect(element(by.binding('myHTML')).getText()).toBe(
+             'I am an HTMLstring with links! and other stuff');
+       });
+     </file>
+   </example>
+ */
+var ngBindHtmlDirective = ['$sce', '$parse', '$compile', function($sce, $parse, $compile) {
+  return {
+    restrict: 'A',
+    compile: function ngBindHtmlCompile(tElement, tAttrs) {
+      var ngBindHtmlGetter = $parse(tAttrs.ngBindHtml);
+      var ngBindHtmlWatch = $parse(tAttrs.ngBindHtml, function getStringValue(value) {
+        return (value || '').toString();
+      });
+      $compile.$$addBindingClass(tElement);
+
+      return function ngBindHtmlLink(scope, element, attr) {
+        $compile.$$addBindingInfo(element, attr.ngBindHtml);
+
+        scope.$watch(ngBindHtmlWatch, function ngBindHtmlWatchAction() {
+          // we re-evaluate the expr because we want a TrustedValueHolderType
+          // for $sce, not a string
+          element.html($sce.getTrustedHtml(ngBindHtmlGetter(scope)) || '');
+        });
+      };
+    }
+  };
+}];
+
+/**
+ * @ngdoc directive
+ * @name ngChange
+ *
+ * @description
+ * Evaluate the given expression when the user changes the input.
+ * The expression is evaluated immediately, unlike the JavaScript onchange event
+ * which only triggers at the end of a change (usually, when the user leaves the
+ * form element or presses the return key).
+ *
+ * The `ngChange` expression is only evaluated when a change in the input value causes
+ * a new value to be committed to the model.
+ *
+ * It will not be evaluated:
+ * * if the value returned from the `$parsers` transformation pipeline has not changed
+ * * if the input has continued to be invalid since the model will stay `null`
+ * * if the model is changed programmatically and not by a change to the input value
+ *
+ *
+ * Note, this directive requires `ngModel` to be present.
+ *
+ * @element input
+ * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change
+ * in input value.
+ *
+ * @example
+ * <example name="ngChange-directive" module="changeExample">
+ *   <file name="index.html">
+ *     <script>
+ *       angular.module('changeExample', [])
+ *         .controller('ExampleController', ['$scope', function($scope) {
+ *           $scope.counter = 0;
+ *           $scope.change = function() {
+ *             $scope.counter++;
+ *           };
+ *         }]);
+ *     </script>
+ *     <div ng-controller="ExampleController">
+ *       <input type="checkbox" ng-model="confirmed" ng-change="change()" id="ng-change-example1" />
+ *       <input type="checkbox" ng-model="confirmed" id="ng-change-example2" />
+ *       <label for="ng-change-example2">Confirmed</label><br />
+ *       <tt>debug = {{confirmed}}</tt><br/>
+ *       <tt>counter = {{counter}}</tt><br/>
+ *     </div>
+ *   </file>
+ *   <file name="protractor.js" type="protractor">
+ *     var counter = element(by.binding('counter'));
+ *     var debug = element(by.binding('confirmed'));
+ *
+ *     it('should evaluate the expression if changing from view', function() {
+ *       expect(counter.getText()).toContain('0');
+ *
+ *       element(by.id('ng-change-example1')).click();
+ *
+ *       expect(counter.getText()).toContain('1');
+ *       expect(debug.getText()).toContain('true');
+ *     });
+ *
+ *     it('should not evaluate the expression if changing from model', function() {
+ *       element(by.id('ng-change-example2')).click();
+
+ *       expect(counter.getText()).toContain('0');
+ *       expect(debug.getText()).toContain('true');
+ *     });
+ *   </file>
+ * </example>
+ */
+var ngChangeDirective = valueFn({
+  restrict: 'A',
+  require: 'ngModel',
+  link: function(scope, element, attr, ctrl) {
+    ctrl.$viewChangeListeners.push(function() {
+      scope.$eval(attr.ngChange);
+    });
+  }
+});
+
+function classDirective(name, selector) {
+  name = 'ngClass' + name;
+  return ['$animate', function($animate) {
+    return {
+      restrict: 'AC',
+      link: function(scope, element, attr) {
+        var oldVal;
+
+        scope.$watch(attr[name], ngClassWatchAction, true);
+
+        attr.$observe('class', function(value) {
+          ngClassWatchAction(scope.$eval(attr[name]));
+        });
+
+
+        if (name !== 'ngClass') {
+          scope.$watch('$index', function($index, old$index) {
+            // jshint bitwise: false
+            var mod = $index & 1;
+            if (mod !== (old$index & 1)) {
+              var classes = arrayClasses(scope.$eval(attr[name]));
+              mod === selector ?
+                addClasses(classes) :
+                removeClasses(classes);
+            }
+          });
+        }
+
+        function addClasses(classes) {
+          var newClasses = digestClassCounts(classes, 1);
+          attr.$addClass(newClasses);
+        }
+
+        function removeClasses(classes) {
+          var newClasses = digestClassCounts(classes, -1);
+          attr.$removeClass(newClasses);
+        }
+
+        function digestClassCounts(classes, count) {
+          // Use createMap() to prevent class assumptions involving property
+          // names in Object.prototype
+          var classCounts = element.data('$classCounts') || createMap();
+          var classesToUpdate = [];
+          forEach(classes, function(className) {
+            if (count > 0 || classCounts[className]) {
+              classCounts[className] = (classCounts[className] || 0) + count;
+              if (classCounts[className] === +(count > 0)) {
+                classesToUpdate.push(className);
+              }
+            }
+          });
+          element.data('$classCounts', classCounts);
+          return classesToUpdate.join(' ');
+        }
+
+        function updateClasses(oldClasses, newClasses) {
+          var toAdd = arrayDifference(newClasses, oldClasses);
+          var toRemove = arrayDifference(oldClasses, newClasses);
+          toAdd = digestClassCounts(toAdd, 1);
+          toRemove = digestClassCounts(toRemove, -1);
+          if (toAdd && toAdd.length) {
+            $animate.addClass(element, toAdd);
+          }
+          if (toRemove && toRemove.length) {
+            $animate.removeClass(element, toRemove);
+          }
+        }
+
+        function ngClassWatchAction(newVal) {
+          if (selector === true || scope.$index % 2 === selector) {
+            var newClasses = arrayClasses(newVal || []);
+            if (!oldVal) {
+              addClasses(newClasses);
+            } else if (!equals(newVal,oldVal)) {
+              var oldClasses = arrayClasses(oldVal);
+              updateClasses(oldClasses, newClasses);
+            }
+          }
+          oldVal = shallowCopy(newVal);
+        }
+      }
+    };
+
+    function arrayDifference(tokens1, tokens2) {
+      var values = [];
+
+      outer:
+      for (var i = 0; i < tokens1.length; i++) {
+        var token = tokens1[i];
+        for (var j = 0; j < tokens2.length; j++) {
+          if (token == tokens2[j]) continue outer;
+        }
+        values.push(token);
+      }
+      return values;
+    }
+
+    function arrayClasses(classVal) {
+      var classes = [];
+      if (isArray(classVal)) {
+        forEach(classVal, function(v) {
+          classes = classes.concat(arrayClasses(v));
+        });
+        return classes;
+      } else if (isString(classVal)) {
+        return classVal.split(' ');
+      } else if (isObject(classVal)) {
+        forEach(classVal, function(v, k) {
+          if (v) {
+            classes = classes.concat(k.split(' '));
+          }
+        });
+        return classes;
+      }
+      return classVal;
+    }
+  }];
+}
+
+/**
+ * @ngdoc directive
+ * @name ngClass
+ * @restrict AC
+ *
+ * @description
+ * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding
+ * an expression that represents all classes to be added.
+ *
+ * The directive operates in three different ways, depending on which of three types the expression
+ * evaluates to:
+ *
+ * 1. If the expression evaluates to a string, the string should be one or more space-delimited class
+ * names.
+ *
+ * 2. If the expression evaluates to an object, then for each key-value pair of the
+ * object with a truthy value the corresponding key is used as a class name.
+ *
+ * 3. If the expression evaluates to an array, each element of the array should either be a string as in
+ * type 1 or an object as in type 2. This means that you can mix strings and objects together in an array
+ * to give you more control over what CSS classes appear. See the code below for an example of this.
+ *
+ *
+ * The directive won't add duplicate classes if a particular class was already set.
+ *
+ * When the expression changes, the previously added classes are removed and only then are the
+ * new classes added.
+ *
+ * @animations
+ * **add** - happens just before the class is applied to the elements
+ *
+ * **remove** - happens just before the class is removed from the element
+ *
+ * @element ANY
+ * @param {expression} ngClass {@link guide/expression Expression} to eval. The result
+ *   of the evaluation can be a string representing space delimited class
+ *   names, an array, or a map of class names to boolean values. In the case of a map, the
+ *   names of the properties whose values are truthy will be added as css classes to the
+ *   element.
+ *
+ * @example Example that demonstrates basic bindings via ngClass directive.
+   <example>
+     <file name="index.html">
+       <p ng-class="{strike: deleted, bold: important, 'has-error': error}">Map Syntax Example</p>
+       <label>
+          <input type="checkbox" ng-model="deleted">
+          deleted (apply "strike" class)
+       </label><br>
+       <label>
+          <input type="checkbox" ng-model="important">
+          important (apply "bold" class)
+       </label><br>
+       <label>
+          <input type="checkbox" ng-model="error">
+          error (apply "has-error" class)
+       </label>
+       <hr>
+       <p ng-class="style">Using String Syntax</p>
+       <input type="text" ng-model="style"
+              placeholder="Type: bold strike red" aria-label="Type: bold strike red">
+       <hr>
+       <p ng-class="[style1, style2, style3]">Using Array Syntax</p>
+       <input ng-model="style1"
+              placeholder="Type: bold, strike or red" aria-label="Type: bold, strike or red"><br>
+       <input ng-model="style2"
+              placeholder="Type: bold, strike or red" aria-label="Type: bold, strike or red 2"><br>
+       <input ng-model="style3"
+              placeholder="Type: bold, strike or red" aria-label="Type: bold, strike or red 3"><br>
+       <hr>
+       <p ng-class="[style4, {orange: warning}]">Using Array and Map Syntax</p>
+       <input ng-model="style4" placeholder="Type: bold, strike" aria-label="Type: bold, strike"><br>
+       <label><input type="checkbox" ng-model="warning"> warning (apply "orange" class)</label>
+     </file>
+     <file name="style.css">
+       .strike {
+           text-decoration: line-through;
+       }
+       .bold {
+           font-weight: bold;
+       }
+       .red {
+           color: red;
+       }
+       .has-error {
+           color: red;
+           background-color: yellow;
+       }
+       .orange {
+           color: orange;
+       }
+     </file>
+     <file name="protractor.js" type="protractor">
+       var ps = element.all(by.css('p'));
+
+       it('should let you toggle the class', function() {
+
+         expect(ps.first().getAttribute('class')).not.toMatch(/bold/);
+         expect(ps.first().getAttribute('class')).not.toMatch(/has-error/);
+
+         element(by.model('important')).click();
+         expect(ps.first().getAttribute('class')).toMatch(/bold/);
+
+         element(by.model('error')).click();
+         expect(ps.first().getAttribute('class')).toMatch(/has-error/);
+       });
+
+       it('should let you toggle string example', function() {
+         expect(ps.get(1).getAttribute('class')).toBe('');
+         element(by.model('style')).clear();
+         element(by.model('style')).sendKeys('red');
+         expect(ps.get(1).getAttribute('class')).toBe('red');
+       });
+
+       it('array example should have 3 classes', function() {
+         expect(ps.get(2).getAttribute('class')).toBe('');
+         element(by.model('style1')).sendKeys('bold');
+         element(by.model('style2')).sendKeys('strike');
+         element(by.model('style3')).sendKeys('red');
+         expect(ps.get(2).getAttribute('class')).toBe('bold strike red');
+       });
+
+       it('array with map example should have 2 classes', function() {
+         expect(ps.last().getAttribute('class')).toBe('');
+         element(by.model('style4')).sendKeys('bold');
+         element(by.model('warning')).click();
+         expect(ps.last().getAttribute('class')).toBe('bold orange');
+       });
+     </file>
+   </example>
+
+   ## Animations
+
+   The example below demonstrates how to perform animations using ngClass.
+
+   <example module="ngAnimate" deps="angular-animate.js" animations="true">
+     <file name="index.html">
+      <input id="setbtn" type="button" value="set" ng-click="myVar='my-class'">
+      <input id="clearbtn" type="button" value="clear" ng-click="myVar=''">
+      <br>
+      <span class="base-class" ng-class="myVar">Sample Text</span>
+     </file>
+     <file name="style.css">
+       .base-class {
+         transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+       }
+
+       .base-class.my-class {
+         color: red;
+         font-size:3em;
+       }
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should check ng-class', function() {
+         expect(element(by.css('.base-class')).getAttribute('class')).not.
+           toMatch(/my-class/);
+
+         element(by.id('setbtn')).click();
+
+         expect(element(by.css('.base-class')).getAttribute('class')).
+           toMatch(/my-class/);
+
+         element(by.id('clearbtn')).click();
+
+         expect(element(by.css('.base-class')).getAttribute('class')).not.
+           toMatch(/my-class/);
+       });
+     </file>
+   </example>
+
+
+   ## ngClass and pre-existing CSS3 Transitions/Animations
+   The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure.
+   Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder
+   any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure
+   to view the step by step details of {@link $animate#addClass $animate.addClass} and
+   {@link $animate#removeClass $animate.removeClass}.
+ */
+var ngClassDirective = classDirective('', true);
+
+/**
+ * @ngdoc directive
+ * @name ngClassOdd
+ * @restrict AC
+ *
+ * @description
+ * The `ngClassOdd` and `ngClassEven` directives work exactly as
+ * {@link ng.directive:ngClass ngClass}, except they work in
+ * conjunction with `ngRepeat` and take effect only on odd (even) rows.
+ *
+ * This directive can be applied only within the scope of an
+ * {@link ng.directive:ngRepeat ngRepeat}.
+ *
+ * @element ANY
+ * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result
+ *   of the evaluation can be a string representing space delimited class names or an array.
+ *
+ * @example
+   <example>
+     <file name="index.html">
+        <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
+          <li ng-repeat="name in names">
+           <span ng-class-odd="'odd'" ng-class-even="'even'">
+             {{name}}
+           </span>
+          </li>
+        </ol>
+     </file>
+     <file name="style.css">
+       .odd {
+         color: red;
+       }
+       .even {
+         color: blue;
+       }
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should check ng-class-odd and ng-class-even', function() {
+         expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).
+           toMatch(/odd/);
+         expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).
+           toMatch(/even/);
+       });
+     </file>
+   </example>
+ */
+var ngClassOddDirective = classDirective('Odd', 0);
+
+/**
+ * @ngdoc directive
+ * @name ngClassEven
+ * @restrict AC
+ *
+ * @description
+ * The `ngClassOdd` and `ngClassEven` directives work exactly as
+ * {@link ng.directive:ngClass ngClass}, except they work in
+ * conjunction with `ngRepeat` and take effect only on odd (even) rows.
+ *
+ * This directive can be applied only within the scope of an
+ * {@link ng.directive:ngRepeat ngRepeat}.
+ *
+ * @element ANY
+ * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The
+ *   result of the evaluation can be a string representing space delimited class names or an array.
+ *
+ * @example
+   <example>
+     <file name="index.html">
+        <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
+          <li ng-repeat="name in names">
+           <span ng-class-odd="'odd'" ng-class-even="'even'">
+             {{name}} &nbsp; &nbsp; &nbsp;
+           </span>
+          </li>
+        </ol>
+     </file>
+     <file name="style.css">
+       .odd {
+         color: red;
+       }
+       .even {
+         color: blue;
+       }
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should check ng-class-odd and ng-class-even', function() {
+         expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')).
+           toMatch(/odd/);
+         expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')).
+           toMatch(/even/);
+       });
+     </file>
+   </example>
+ */
+var ngClassEvenDirective = classDirective('Even', 1);
+
+/**
+ * @ngdoc directive
+ * @name ngCloak
+ * @restrict AC
+ *
+ * @description
+ * The `ngCloak` directive is used to prevent the Angular html template from being briefly
+ * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this
+ * directive to avoid the undesirable flicker effect caused by the html template display.
+ *
+ * The directive can be applied to the `<body>` element, but the preferred usage is to apply
+ * multiple `ngCloak` directives to small portions of the page to permit progressive rendering
+ * of the browser view.
+ *
+ * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and
+ * `angular.min.js`.
+ * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
+ *
+ * ```css
+ * [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
+ *   display: none !important;
+ * }
+ * ```
+ *
+ * When this css rule is loaded by the browser, all html elements (including their children) that
+ * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive
+ * during the compilation of the template it deletes the `ngCloak` element attribute, making
+ * the compiled element visible.
+ *
+ * For the best result, the `angular.js` script must be loaded in the head section of the html
+ * document; alternatively, the css rule above must be included in the external stylesheet of the
+ * application.
+ *
+ * @element ANY
+ *
+ * @example
+   <example>
+     <file name="index.html">
+        <div id="template1" ng-cloak>{{ 'hello' }}</div>
+        <div id="template2" class="ng-cloak">{{ 'world' }}</div>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should remove the template directive and css class', function() {
+         expect($('#template1').getAttribute('ng-cloak')).
+           toBeNull();
+         expect($('#template2').getAttribute('ng-cloak')).
+           toBeNull();
+       });
+     </file>
+   </example>
+ *
+ */
+var ngCloakDirective = ngDirective({
+  compile: function(element, attr) {
+    attr.$set('ngCloak', undefined);
+    element.removeClass('ng-cloak');
+  }
+});
+
+/**
+ * @ngdoc directive
+ * @name ngController
+ *
+ * @description
+ * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular
+ * supports the principles behind the Model-View-Controller design pattern.
+ *
+ * MVC components in angular:
+ *
+ * * Model — Models are the properties of a scope; scopes are attached to the DOM where scope properties
+ *   are accessed through bindings.
+ * * View — The template (HTML with data bindings) that is rendered into the View.
+ * * Controller — The `ngController` directive specifies a Controller class; the class contains business
+ *   logic behind the application to decorate the scope with functions and values
+ *
+ * Note that you can also attach controllers to the DOM by declaring it in a route definition
+ * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller
+ * again using `ng-controller` in the template itself.  This will cause the controller to be attached
+ * and executed twice.
+ *
+ * @element ANY
+ * @scope
+ * @priority 500
+ * @param {expression} ngController Name of a constructor function registered with the current
+ * {@link ng.$controllerProvider $controllerProvider} or an {@link guide/expression expression}
+ * that on the current scope evaluates to a constructor function.
+ *
+ * The controller instance can be published into a scope property by specifying
+ * `ng-controller="as propertyName"`.
+ *
+ * If the current `$controllerProvider` is configured to use globals (via
+ * {@link ng.$controllerProvider#allowGlobals `$controllerProvider.allowGlobals()` }), this may
+ * also be the name of a globally accessible constructor function (not recommended).
+ *
+ * @example
+ * Here is a simple form for editing user contact information. Adding, removing, clearing, and
+ * greeting are methods declared on the controller (see source tab). These methods can
+ * easily be called from the angular markup. Any changes to the data are automatically reflected
+ * in the View without the need for a manual update.
+ *
+ * Two different declaration styles are included below:
+ *
+ * * one binds methods and properties directly onto the controller using `this`:
+ * `ng-controller="SettingsController1 as settings"`
+ * * one injects `$scope` into the controller:
+ * `ng-controller="SettingsController2"`
+ *
+ * The second option is more common in the Angular community, and is generally used in boilerplates
+ * and in this guide. However, there are advantages to binding properties directly to the controller
+ * and avoiding scope.
+ *
+ * * Using `controller as` makes it obvious which controller you are accessing in the template when
+ * multiple controllers apply to an element.
+ * * If you are writing your controllers as classes you have easier access to the properties and
+ * methods, which will appear on the scope, from inside the controller code.
+ * * Since there is always a `.` in the bindings, you don't have to worry about prototypal
+ * inheritance masking primitives.
+ *
+ * This example demonstrates the `controller as` syntax.
+ *
+ * <example name="ngControllerAs" module="controllerAsExample">
+ *   <file name="index.html">
+ *    <div id="ctrl-as-exmpl" ng-controller="SettingsController1 as settings">
+ *      <label>Name: <input type="text" ng-model="settings.name"/></label>
+ *      <button ng-click="settings.greet()">greet</button><br/>
+ *      Contact:
+ *      <ul>
+ *        <li ng-repeat="contact in settings.contacts">
+ *          <select ng-model="contact.type" aria-label="Contact method" id="select_{{$index}}">
+ *             <option>phone</option>
+ *             <option>email</option>
+ *          </select>
+ *          <input type="text" ng-model="contact.value" aria-labelledby="select_{{$index}}" />
+ *          <button ng-click="settings.clearContact(contact)">clear</button>
+ *          <button ng-click="settings.removeContact(contact)" aria-label="Remove">X</button>
+ *        </li>
+ *        <li><button ng-click="settings.addContact()">add</button></li>
+ *     </ul>
+ *    </div>
+ *   </file>
+ *   <file name="app.js">
+ *    angular.module('controllerAsExample', [])
+ *      .controller('SettingsController1', SettingsController1);
+ *
+ *    function SettingsController1() {
+ *      this.name = "John Smith";
+ *      this.contacts = [
+ *        {type: 'phone', value: '408 555 1212'},
+ *        {type: 'email', value: [email-masked]'} ];
+ *    }
+ *
+ *    SettingsController1.prototype.greet = function() {
+ *      alert(this.name);
+ *    };
+ *
+ *    SettingsController1.prototype.addContact = function() {
+ *      this.contacts.push({type: 'email', value: [email-masked]'});
+ *    };
+ *
+ *    SettingsController1.prototype.removeContact = function(contactToRemove) {
+ *     var index = this.contacts.indexOf(contactToRemove);
+ *      this.contacts.splice(index, 1);
+ *    };
+ *
+ *    SettingsController1.prototype.clearContact = function(contact) {
+ *      contact.type = 'phone';
+ *      contact.value = '';
+ *    };
+ *   </file>
+ *   <file name="protractor.js" type="protractor">
+ *     it('should check controller as', function() {
+ *       var container = element(by.id('ctrl-as-exmpl'));
+ *         expect(container.element(by.model('settings.name'))
+ *           .getAttribute('value')).toBe('John Smith');
+ *
+ *       var firstRepeat =
+ *           container.element(by.repeater('contact in settings.contacts').row(0));
+ *       var secondRepeat =
+ *           container.element(by.repeater('contact in settings.contacts').row(1));
+ *
+ *       expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
+ *           .toBe('408 555 1212');
+ *
+ *       expect(secondRepeat.element(by.model('contact.value')).getAttribute('value'))
+ *           .toBe([email-masked]');
+ *
+ *       firstRepeat.element(by.buttonText('clear')).click();
+ *
+ *       expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
+ *           .toBe('');
+ *
+ *       container.element(by.buttonText('add')).click();
+ *
+ *       expect(container.element(by.repeater('contact in settings.contacts').row(2))
+ *           .element(by.model('contact.value'))
+ *           .getAttribute('value'))
+ *           .toBe([email-masked]');
+ *     });
+ *   </file>
+ * </example>
+ *
+ * This example demonstrates the "attach to `$scope`" style of controller.
+ *
+ * <example name="ngController" module="controllerExample">
+ *  <file name="index.html">
+ *   <div id="ctrl-exmpl" ng-controller="SettingsController2">
+ *     <label>Name: <input type="text" ng-model="name"/></label>
+ *     <button ng-click="greet()">greet</button><br/>
+ *     Contact:
+ *     <ul>
+ *       <li ng-repeat="contact in contacts">
+ *         <select ng-model="contact.type" id="select_{{$index}}">
+ *            <option>phone</option>
+ *            <option>email</option>
+ *         </select>
+ *         <input type="text" ng-model="contact.value" aria-labelledby="select_{{$index}}" />
+ *         <button ng-click="clearContact(contact)">clear</button>
+ *         <button ng-click="removeContact(contact)">X</button>
+ *       </li>
+ *       <li>[ <button ng-click="addContact()">add</button> ]</li>
+ *    </ul>
+ *   </div>
+ *  </file>
+ *  <file name="app.js">
+ *   angular.module('controllerExample', [])
+ *     .controller('SettingsController2', ['$scope', SettingsController2]);
+ *
+ *   function SettingsController2($scope) {
+ *     $scope.name = "John Smith";
+ *     $scope.contacts = [
+ *       {type:'phone', value:'408 555 1212'},
+ *       {type:'email', value:[email-masked]'} ];
+ *
+ *     $scope.greet = function() {
+ *       alert($scope.name);
+ *     };
+ *
+ *     $scope.addContact = function() {
+ *       $scope.contacts.push({type:'email', value:[email-masked]'});
+ *     };
+ *
+ *     $scope.removeContact = function(contactToRemove) {
+ *       var index = $scope.contacts.indexOf(contactToRemove);
+ *       $scope.contacts.splice(index, 1);
+ *     };
+ *
+ *     $scope.clearContact = function(contact) {
+ *       contact.type = 'phone';
+ *       contact.value = '';
+ *     };
+ *   }
+ *  </file>
+ *  <file name="protractor.js" type="protractor">
+ *    it('should check controller', function() {
+ *      var container = element(by.id('ctrl-exmpl'));
+ *
+ *      expect(container.element(by.model('name'))
+ *          .getAttribute('value')).toBe('John Smith');
+ *
+ *      var firstRepeat =
+ *          container.element(by.repeater('contact in contacts').row(0));
+ *      var secondRepeat =
+ *          container.element(by.repeater('contact in contacts').row(1));
+ *
+ *      expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
+ *          .toBe('408 555 1212');
+ *      expect(secondRepeat.element(by.model('contact.value')).getAttribute('value'))
+ *          .toBe([email-masked]');
+ *
+ *      firstRepeat.element(by.buttonText('clear')).click();
+ *
+ *      expect(firstRepeat.element(by.model('contact.value')).getAttribute('value'))
+ *          .toBe('');
+ *
+ *      container.element(by.buttonText('add')).click();
+ *
+ *      expect(container.element(by.repeater('contact in contacts').row(2))
+ *          .element(by.model('contact.value'))
+ *          .getAttribute('value'))
+ *          .toBe([email-masked]');
+ *    });
+ *  </file>
+ *</example>
+
+ */
+var ngControllerDirective = [function() {
+  return {
+    restrict: 'A',
+    scope: true,
+    controller: '@',
+    priority: 500
+  };
+}];
+
+/**
+ * @ngdoc directive
+ * @name ngCsp
+ *
+ * @element html
+ * @description
+ *
+ * Angular has some features that can break certain
+ * [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) rules.
+ *
+ * If you intend to implement these rules then you must tell Angular not to use these features.
+ *
+ * This is necessary when developing things like Google Chrome Extensions or Universal Windows Apps.
+ *
+ *
+ * The following rules affect Angular:
+ *
+ * * `unsafe-eval`: this rule forbids apps to use `eval` or `Function(string)` generated functions
+ * (among other things). Angular makes use of this in the {@link $parse} service to provide a 30%
+ * increase in the speed of evaluating Angular expressions.
+ *
+ * * `unsafe-inline`: this rule forbids apps from inject custom styles into the document. Angular
+ * makes use of this to include some CSS rules (e.g. {@link ngCloak} and {@link ngHide}).
+ * To make these directives work when a CSP rule is blocking inline styles, you must link to the
+ * `angular-csp.css` in your HTML manually.
+ *
+ * If you do not provide `ngCsp` then Angular tries to autodetect if CSP is blocking unsafe-eval
+ * and automatically deactivates this feature in the {@link $parse} service. This autodetection,
+ * however, triggers a CSP error to be logged in the console:
+ *
+ * ```
+ * Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of
+ * script in the following Content Security Policy directive: "default-src 'self'". Note that
+ * 'script-src' was not explicitly set, so 'default-src' is used as a fallback.
+ * ```
+ *
+ * This error is harmless but annoying. To prevent the error from showing up, put the `ngCsp`
+ * directive on an element of the HTML document that appears before the `<script>` tag that loads
+ * the `angular.js` file.
+ *
+ * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.*
+ *
+ * You can specify which of the CSP related Angular features should be deactivated by providing
+ * a value for the `ng-csp` attribute. The options are as follows:
+ *
+ * * no-inline-style: this stops Angular from injecting CSS styles into the DOM
+ *
+ * * no-unsafe-eval: this stops Angular from optimising $parse with unsafe eval of strings
+ *
+ * You can use these values in the following combinations:
+ *
+ *
+ * * No declaration means that Angular will assume that you can do inline styles, but it will do
+ * a runtime check for unsafe-eval. E.g. `<body>`. This is backwardly compatible with previous versions
+ * of Angular.
+ *
+ * * A simple `ng-csp` (or `data-ng-csp`) attribute will tell Angular to deactivate both inline
+ * styles and unsafe eval. E.g. `<body ng-csp>`. This is backwardly compatible with previous versions
+ * of Angular.
+ *
+ * * Specifying only `no-unsafe-eval` tells Angular that we must not use eval, but that we can inject
+ * inline styles. E.g. `<body ng-csp="no-unsafe-eval">`.
+ *
+ * * Specifying only `no-inline-style` tells Angular that we must not inject styles, but that we can
+ * run eval - no automcatic check for unsafe eval will occur. E.g. `<body ng-csp="no-inline-style">`
+ *
+ * * Specifying both `no-unsafe-eval` and `no-inline-style` tells Angular that we must not inject
+ * styles nor use eval, which is the same as an empty: ng-csp.
+ * E.g.`<body ng-csp="no-inline-style;no-unsafe-eval">`
+ *
+ * @example
+ * This example shows how to apply the `ngCsp` directive to the `html` tag.
+   ```html
+     <!doctype html>
+     <html ng-app ng-csp>
+     ...
+     ...
+     </html>
+   ```
+  * @example
+      // Note: the suffix `.csp` in the example name triggers
+      // csp mode in our http server!
+      <example name="example.csp" module="cspExample" ng-csp="true">
+        <file name="index.html">
+          <div ng-controller="MainController as ctrl">
+            <div>
+              <button ng-click="ctrl.inc()" id="inc">Increment</button>
+              <span id="counter">
+                {{ctrl.counter}}
+              </span>
+            </div>
+
+            <div>
+              <button ng-click="ctrl.evil()" id="evil">Evil</button>
+              <span id="evilError">
+                {{ctrl.evilError}}
+              </span>
+            </div>
+          </div>
+        </file>
+        <file name="script.js">
+           angular.module('cspExample', [])
+             .controller('MainController', function() {
+                this.counter = 0;
+                this.inc = function() {
+                  this.counter++;
+                };
+                this.evil = function() {
+                  // jshint evil:true
+                  try {
+                    eval('1+2');
+                  } catch (e) {
+                    this.evilError = e.message;
+                  }
+                };
+              });
+        </file>
+        <file name="protractor.js" type="protractor">
+          var util, webdriver;
+
+          var incBtn = element(by.id('inc'));
+          var counter = element(by.id('counter'));
+          var evilBtn = element(by.id('evil'));
+          var evilError = element(by.id('evilError'));
+
+          function getAndClearSevereErrors() {
+            return browser.manage().logs().get('browser').then(function(browserLog) {
+              return browserLog.filter(function(logEntry) {
+                return logEntry.level.value > webdriver.logging.Level.WARNING.value;
+              });
+            });
+          }
+
+          function clearErrors() {
+            getAndClearSevereErrors();
+          }
+
+          function expectNoErrors() {
+            getAndClearSevereErrors().then(function(filteredLog) {
+              expect(filteredLog.length).toEqual(0);
+              if (filteredLog.length) {
+                console.log('browser console errors: ' + util.inspect(filteredLog));
+              }
+            });
+          }
+
+          function expectError(regex) {
+            getAndClearSevereErrors().then(function(filteredLog) {
+              var found = false;
+              filteredLog.forEach(function(log) {
+                if (log.message.match(regex)) {
+                  found = true;
+                }
+              });
+              if (!found) {
+                throw new Error('expected an error that matches ' + regex);
+              }
+            });
+          }
+
+          beforeEach(function() {
+            util = require('util');
+            webdriver = require('protractor/node_modules/selenium-webdriver');
+          });
+
+          // For now, we only test on Chrome,
+          // as Safari does not load the page with Protractor's injected scripts,
+          // and Firefox webdriver always disables content security policy (#6358)
+          if (browser.params.browser !== 'chrome') {
+            return;
+          }
+
+          it('should not report errors when the page is loaded', function() {
+            // clear errors so we are not dependent on previous tests
+            clearErrors();
+            // Need to reload the page as the page is already loaded when
+            // we come here
+            browser.driver.getCurrentUrl().then(function(url) {
+              browser.get(url);
+            });
+            expectNoErrors();
+          });
+
+          it('should evaluate expressions', function() {
+            expect(counter.getText()).toEqual('0');
+            incBtn.click();
+            expect(counter.getText()).toEqual('1');
+            expectNoErrors();
+          });
+
+          it('should throw and report an error when using "eval"', function() {
+            evilBtn.click();
+            expect(evilError.getText()).toMatch(/Content Security Policy/);
+            expectError(/Content Security Policy/);
+          });
+        </file>
+      </example>
+  */
+
+// ngCsp is not implemented as a proper directive any more, because we need it be processed while we
+// bootstrap the system (before $parse is instantiated), for this reason we just have
+// the csp() fn that looks for the `ng-csp` attribute anywhere in the current doc
+
+/**
+ * @ngdoc directive
+ * @name ngClick
+ *
+ * @description
+ * The ngClick directive allows you to specify custom behavior when
+ * an element is clicked.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon
+ * click. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <button ng-click="count = count + 1" ng-init="count=0">
+        Increment
+      </button>
+      <span>
+        count: {{count}}
+      </span>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should check ng-click', function() {
+         expect(element(by.binding('count')).getText()).toMatch('0');
+         element(by.css('button')).click();
+         expect(element(by.binding('count')).getText()).toMatch('1');
+       });
+     </file>
+   </example>
+ */
+/*
+ * A collection of directives that allows creation of custom event handlers that are defined as
+ * angular expressions and are compiled and executed within the current scope.
+ */
+var ngEventDirectives = {};
+
+// For events that might fire synchronously during DOM manipulation
+// we need to execute their event handlers asynchronously using $evalAsync,
+// so that they are not executed in an inconsistent state.
+var forceAsyncEvents = {
+  'blur': true,
+  'focus': true
+};
+forEach(
+  'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '),
+  function(eventName) {
+    var directiveName = directiveNormalize('ng-' + eventName);
+    ngEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse, $rootScope) {
+      return {
+        restrict: 'A',
+        compile: function($element, attr) {
+          // We expose the powerful $event object on the scope that provides access to the Window,
+          // etc. that isn't protected by the fast paths in $parse.  We explicitly request better
+          // checks at the cost of speed since event handler expressions are not executed as
+          // frequently as regular change detection.
+          var fn = $parse(attr[directiveName], /* interceptorFn */ null, /* expensiveChecks */ true);
+          return function ngEventHandler(scope, element) {
+            element.on(eventName, function(event) {
+              var callback = function() {
+                fn(scope, {$event:event});
+              };
+              if (forceAsyncEvents[eventName] && $rootScope.$$phase) {
+                scope.$evalAsync(callback);
+              } else {
+                scope.$apply(callback);
+              }
+            });
+          };
+        }
+      };
+    }];
+  }
+);
+
+/**
+ * @ngdoc directive
+ * @name ngDblclick
+ *
+ * @description
+ * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon
+ * a dblclick. (The Event object is available as `$event`)
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <button ng-dblclick="count = count + 1" ng-init="count=0">
+        Increment (on double click)
+      </button>
+      count: {{count}}
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngMousedown
+ *
+ * @description
+ * The ngMousedown directive allows you to specify custom behavior on mousedown event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon
+ * mousedown. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <button ng-mousedown="count = count + 1" ng-init="count=0">
+        Increment (on mouse down)
+      </button>
+      count: {{count}}
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngMouseup
+ *
+ * @description
+ * Specify custom behavior on mouseup event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon
+ * mouseup. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <button ng-mouseup="count = count + 1" ng-init="count=0">
+        Increment (on mouse up)
+      </button>
+      count: {{count}}
+     </file>
+   </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngMouseover
+ *
+ * @description
+ * Specify custom behavior on mouseover event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon
+ * mouseover. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <button ng-mouseover="count = count + 1" ng-init="count=0">
+        Increment (when mouse is over)
+      </button>
+      count: {{count}}
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngMouseenter
+ *
+ * @description
+ * Specify custom behavior on mouseenter event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon
+ * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <button ng-mouseenter="count = count + 1" ng-init="count=0">
+        Increment (when mouse enters)
+      </button>
+      count: {{count}}
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngMouseleave
+ *
+ * @description
+ * Specify custom behavior on mouseleave event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon
+ * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <button ng-mouseleave="count = count + 1" ng-init="count=0">
+        Increment (when mouse leaves)
+      </button>
+      count: {{count}}
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngMousemove
+ *
+ * @description
+ * Specify custom behavior on mousemove event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon
+ * mousemove. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <button ng-mousemove="count = count + 1" ng-init="count=0">
+        Increment (when mouse moves)
+      </button>
+      count: {{count}}
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngKeydown
+ *
+ * @description
+ * Specify custom behavior on keydown event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon
+ * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <input ng-keydown="count = count + 1" ng-init="count=0">
+      key down count: {{count}}
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngKeyup
+ *
+ * @description
+ * Specify custom behavior on keyup event.
+ *
+ * @element ANY
+ * @priority 0
+ * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon
+ * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.)
+ *
+ * @example
+   <example>
+     <file name="index.html">
+       <p>Typing in the input box below updates the key count</p>
+       <input ng-keyup="count = count + 1" ng-init="count=0"> key up count: {{count}}
+
+       <p>Typing in the input box below updates the keycode</p>
+       <input ng-keyup="event=$event">
+       <p>event keyCode: {{ event.keyCode }}</p>
+       <p>event altKey: {{ event.altKey }}</p>
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngKeypress
+ *
+ * @description
+ * Specify custom behavior on keypress event.
+ *
+ * @element ANY
+ * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon
+ * keypress. ({@link guide/expression#-event- Event object is available as `$event`}
+ * and can be interrogated for keyCode, altKey, etc.)
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <input ng-keypress="count = count + 1" ng-init="count=0">
+      key press count: {{count}}
+     </file>
+   </example>
+ */
+
+
+/**
+ * @ngdoc directive
+ * @name ngSubmit
+ *
+ * @description
+ * Enables binding angular expressions to onsubmit events.
+ *
+ * Additionally it prevents the default action (which for form means sending the request to the
+ * server and reloading the current page), but only if the form does not contain `action`,
+ * `data-action`, or `x-action` attributes.
+ *
+ * <div class="alert alert-warning">
+ * **Warning:** Be careful not to cause "double-submission" by using both the `ngClick` and
+ * `ngSubmit` handlers together. See the
+ * {@link form#submitting-a-form-and-preventing-the-default-action `form` directive documentation}
+ * for a detailed discussion of when `ngSubmit` may be triggered.
+ * </div>
+ *
+ * @element form
+ * @priority 0
+ * @param {expression} ngSubmit {@link guide/expression Expression} to eval.
+ * ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example module="submitExample">
+     <file name="index.html">
+      <script>
+        angular.module('submitExample', [])
+          .controller('ExampleController', ['$scope', function($scope) {
+            $scope.list = [];
+            $scope.text = 'hello';
+            $scope.submit = function() {
+              if ($scope.text) {
+                $scope.list.push(this.text);
+                $scope.text = '';
+              }
+            };
+          }]);
+      </script>
+      <form ng-submit="submit()" ng-controller="ExampleController">
+        Enter text and hit enter:
+        <input type="text" ng-model="text" name="text" />
+        <input type="submit" id="submit" value="Submit" />
+        <pre>list={{list}}</pre>
+      </form>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should check ng-submit', function() {
+         expect(element(by.binding('list')).getText()).toBe('list=[]');
+         element(by.css('#submit')).click();
+         expect(element(by.binding('list')).getText()).toContain('hello');
+         expect(element(by.model('text')).getAttribute('value')).toBe('');
+       });
+       it('should ignore empty strings', function() {
+         expect(element(by.binding('list')).getText()).toBe('list=[]');
+         element(by.css('#submit')).click();
+         element(by.css('#submit')).click();
+         expect(element(by.binding('list')).getText()).toContain('hello');
+        });
+     </file>
+   </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngFocus
+ *
+ * @description
+ * Specify custom behavior on focus event.
+ *
+ * Note: As the `focus` event is executed synchronously when calling `input.focus()`
+ * AngularJS executes the expression using `scope.$evalAsync` if the event is fired
+ * during an `$apply` to ensure a consistent state.
+ *
+ * @element window, input, select, textarea, a
+ * @priority 0
+ * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon
+ * focus. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+ * See {@link ng.directive:ngClick ngClick}
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngBlur
+ *
+ * @description
+ * Specify custom behavior on blur event.
+ *
+ * A [blur event](https://developer.mozilla.org/en-US/docs/Web/Events/blur) fires when
+ * an element has lost focus.
+ *
+ * Note: As the `blur` event is executed synchronously also during DOM manipulations
+ * (e.g. removing a focussed input),
+ * AngularJS executes the expression using `scope.$evalAsync` if the event is fired
+ * during an `$apply` to ensure a consistent state.
+ *
+ * @element window, input, select, textarea, a
+ * @priority 0
+ * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon
+ * blur. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+ * See {@link ng.directive:ngClick ngClick}
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngCopy
+ *
+ * @description
+ * Specify custom behavior on copy event.
+ *
+ * @element window, input, select, textarea, a
+ * @priority 0
+ * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon
+ * copy. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <input ng-copy="copied=true" ng-init="copied=false; value='copy me'" ng-model="value">
+      copied: {{copied}}
+     </file>
+   </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngCut
+ *
+ * @description
+ * Specify custom behavior on cut event.
+ *
+ * @element window, input, select, textarea, a
+ * @priority 0
+ * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon
+ * cut. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <input ng-cut="cut=true" ng-init="cut=false; value='cut me'" ng-model="value">
+      cut: {{cut}}
+     </file>
+   </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngPaste
+ *
+ * @description
+ * Specify custom behavior on paste event.
+ *
+ * @element window, input, select, textarea, a
+ * @priority 0
+ * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon
+ * paste. ({@link guide/expression#-event- Event object is available as `$event`})
+ *
+ * @example
+   <example>
+     <file name="index.html">
+      <input ng-paste="paste=true" ng-init="paste=false" placeholder='paste here'>
+      pasted: {{paste}}
+     </file>
+   </example>
+ */
+
+/**
+ * @ngdoc directive
+ * @name ngIf
+ * @restrict A
+ * @multiElement
+ *
+ * @description
+ * The `ngIf` directive removes or recreates a portion of the DOM tree based on an
+ * {expression}. If the expression assigned to `ngIf` evaluates to a false
+ * value then the element is removed from the DOM, otherwise a clone of the
+ * element is reinserted into the DOM.
+ *
+ * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the
+ * element in the DOM rather than changing its visibility via the `display` css property.  A common
+ * case when this difference is significant is when using css selectors that rely on an element's
+ * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes.
+ *
+ * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope
+ * is created when the element is restored.  The scope created within `ngIf` inherits from
+ * its parent scope using
+ * [prototypal inheritance](https://github.com/angular/angular.js/wiki/Understanding-Scopes#javascript-prototypal-inheritance).
+ * An important implication of this is if `ngModel` is used within `ngIf` to bind to
+ * a javascript primitive defined in the parent scope. In this case any modifications made to the
+ * variable within the child scope will override (hide) the value in the parent scope.
+ *
+ * Also, `ngIf` recreates elements using their compiled state. An example of this behavior
+ * is if an element's class attribute is directly modified after it's compiled, using something like
+ * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element
+ * the added class will be lost because the original compiled state is used to regenerate the element.
+ *
+ * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter`
+ * and `leave` effects.
+ *
+ * @animations
+ * enter - happens just after the `ngIf` contents change and a new DOM element is created and injected into the `ngIf` container
+ * leave - happens just before the `ngIf` contents are removed from the DOM
+ *
+ * @element ANY
+ * @scope
+ * @priority 600
+ * @param {expression} ngIf If the {@link guide/expression expression} is falsy then
+ *     the element is removed from the DOM tree. If it is truthy a copy of the compiled
+ *     element is added to the DOM tree.
+ *
+ * @example
+  <example module="ngAnimate" deps="angular-animate.js" animations="true">
+    <file name="index.html">
+      <label>Click me: <input type="checkbox" ng-model="checked" ng-init="checked=true" /></label><br/>
+      Show when checked:
+      <span ng-if="checked" class="animate-if">
+        This is removed when the checkbox is unchecked.
+      </span>
+    </file>
+    <file name="animations.css">
+      .animate-if {
+        background:white;
+        border:1px solid black;
+        padding:10px;
+      }
+
+      .animate-if.ng-enter, .animate-if.ng-leave {
+        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+      }
+
+      .animate-if.ng-enter,
+      .animate-if.ng-leave.ng-leave-active {
+        opacity:0;
+      }
+
+      .animate-if.ng-leave,
+      .animate-if.ng-enter.ng-enter-active {
+        opacity:1;
+      }
+    </file>
+  </example>
+ */
+var ngIfDirective = ['$animate', function($animate) {
+  return {
+    multiElement: true,
+    transclude: 'element',
+    priority: 600,
+    terminal: true,
+    restrict: 'A',
+    $$tlb: true,
+    link: function($scope, $element, $attr, ctrl, $transclude) {
+        var block, childScope, previousElements;
+        $scope.$watch($attr.ngIf, function ngIfWatchAction(value) {
+
+          if (value) {
+            if (!childScope) {
+              $transclude(function(clone, newScope) {
+                childScope = newScope;
+                clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' ');
+                // Note: We only need the first/last node of the cloned nodes.
+                // However, we need to keep the reference to the jqlite wrapper as it might be changed later
+                // by a directive with templateUrl when its template arrives.
+                block = {
+                  clone: clone
+                };
+                $animate.enter(clone, $element.parent(), $element);
+              });
+            }
+          } else {
+            if (previousElements) {
+              previousElements.remove();
+              previousElements = null;
+            }
+            if (childScope) {
+              childScope.$destroy();
+              childScope = null;
+            }
+            if (block) {
+              previousElements = getBlockNodes(block.clone);
+              $animate.leave(previousElements).then(function() {
+                previousElements = null;
+              });
+              block = null;
+            }
+          }
+        });
+    }
+  };
+}];
+
+/**
+ * @ngdoc directive
+ * @name ngInclude
+ * @restrict ECA
+ *
+ * @description
+ * Fetches, compiles and includes an external HTML fragment.
+ *
+ * By default, the template URL is restricted to the same domain and protocol as the
+ * application document. This is done by calling {@link $sce#getTrustedResourceUrl
+ * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols
+ * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or
+ * {@link $sce#trustAsResourceUrl wrap them} as trusted values. Refer to Angular's {@link
+ * ng.$sce Strict Contextual Escaping}.
+ *
+ * In addition, the browser's
+ * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest)
+ * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/)
+ * policy may further restrict whether the template is successfully loaded.
+ * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://`
+ * access on some browsers.
+ *
+ * @animations
+ * enter - animation is used to bring new content into the browser.
+ * leave - animation is used to animate existing content away.
+ *
+ * The enter and leave animation occur concurrently.
+ *
+ * @scope
+ * @priority 400
+ *
+ * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant,
+ *                 make sure you wrap it in **single** quotes, e.g. `src="'myPartialTemplate.html'"`.
+ * @param {string=} onload Expression to evaluate when a new partial is loaded.
+ *                  <div class="alert alert-warning">
+ *                  **Note:** When using onload on SVG elements in IE11, the browser will try to call
+ *                  a function with the name on the window element, which will usually throw a
+ *                  "function is undefined" error. To fix this, you can instead use `data-onload` or a
+ *                  different form that {@link guide/directive#normalization matches} `onload`.
+ *                  </div>
+   *
+ * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll
+ *                  $anchorScroll} to scroll the viewport after the content is loaded.
+ *
+ *                  - If the attribute is not set, disable scrolling.
+ *                  - If the attribute is set without value, enable scrolling.
+ *                  - Otherwise enable scrolling only if the expression evaluates to truthy value.
+ *
+ * @example
+  <example module="includeExample" deps="angular-animate.js" animations="true">
+    <file name="index.html">
+     <div ng-controller="ExampleController">
+       <select ng-model="template" ng-options="t.name for t in templates">
+        <option value="">(blank)</option>
+       </select>
+       url of the template: <code>{{template.url}}</code>
+       <hr/>
+       <div class="slide-animate-container">
+         <div class="slide-animate" ng-include="template.url"></div>
+       </div>
+     </div>
+    </file>
+    <file name="script.js">
+      angular.module('includeExample', ['ngAnimate'])
+        .controller('ExampleController', ['$scope', function($scope) {
+          $scope.templates =
+            [ { name: 'template1.html', url: 'template1.html'},
+              { name: 'template2.html', url: 'template2.html'} ];
+          $scope.template = $scope.templates[0];
+        }]);
+     </file>
+    <file name="template1.html">
+      Content of template1.html
+    </file>
+    <file name="template2.html">
+      Content of template2.html
+    </file>
+    <file name="animations.css">
+      .slide-animate-container {
+        position:relative;
+        background:white;
+        border:1px solid black;
+        height:40px;
+        overflow:hidden;
+      }
+
+      .slide-animate {
+        padding:10px;
+      }
+
+      .slide-animate.ng-enter, .slide-animate.ng-leave {
+        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+
+        position:absolute;
+        top:0;
+        left:0;
+        right:0;
+        bottom:0;
+        display:block;
+        padding:10px;
+      }
+
+      .slide-animate.ng-enter {
+        top:-50px;
+      }
+      .slide-animate.ng-enter.ng-enter-active {
+        top:0;
+      }
+
+      .slide-animate.ng-leave {
+        top:0;
+      }
+      .slide-animate.ng-leave.ng-leave-active {
+        top:50px;
+      }
+    </file>
+    <file name="protractor.js" type="protractor">
+      var templateSelect = element(by.model('template'));
+      var includeElem = element(by.css('[ng-include]'));
+
+      it('should load template1.html', function() {
+        expect(includeElem.getText()).toMatch(/Content of template1.html/);
+      });
+
+      it('should load template2.html', function() {
+        if (browser.params.browser == 'firefox') {
+          // Firefox can't handle using selects
+          // See https://github.com/angular/protractor/issues/480
+          return;
+        }
+        templateSelect.click();
+        templateSelect.all(by.css('option')).get(2).click();
+        expect(includeElem.getText()).toMatch(/Content of template2.html/);
+      });
+
+      it('should change to blank', function() {
+        if (browser.params.browser == 'firefox') {
+          // Firefox can't handle using selects
+          return;
+        }
+        templateSelect.click();
+        templateSelect.all(by.css('option')).get(0).click();
+        expect(includeElem.isPresent()).toBe(false);
+      });
+    </file>
+  </example>
+ */
+
+
+/**
+ * @ngdoc event
+ * @name ngInclude#$includeContentRequested
+ * @eventType emit on the scope ngInclude was declared in
+ * @description
+ * Emitted every time the ngInclude content is requested.
+ *
+ * @param {Object} angularEvent Synthetic event object.
+ * @param {String} src URL of content to load.
+ */
+
+
+/**
+ * @ngdoc event
+ * @name ngInclude#$includeContentLoaded
+ * @eventType emit on the current ngInclude scope
+ * @description
+ * Emitted every time the ngInclude content is reloaded.
+ *
+ * @param {Object} angularEvent Synthetic event object.
+ * @param {String} src URL of content to load.
+ */
+
+
+/**
+ * @ngdoc event
+ * @name ngInclude#$includeContentError
+ * @eventType emit on the scope ngInclude was declared in
+ * @description
+ * Emitted when a template HTTP request yields an erroneous response (status < 200 || status > 299)
+ *
+ * @param {Object} angularEvent Synthetic event object.
+ * @param {String} src URL of content to load.
+ */
+var ngIncludeDirective = ['$templateRequest', '$anchorScroll', '$animate',
+                  function($templateRequest,   $anchorScroll,   $animate) {
+  return {
+    restrict: 'ECA',
+    priority: 400,
+    terminal: true,
+    transclude: 'element',
+    controller: angular.noop,
+    compile: function(element, attr) {
+      var srcExp = attr.ngInclude || attr.src,
+          onloadExp = attr.onload || '',
+          autoScrollExp = attr.autoscroll;
+
+      return function(scope, $element, $attr, ctrl, $transclude) {
+        var changeCounter = 0,
+            currentScope,
+            previousElement,
+            currentElement;
+
+        var cleanupLastIncludeContent = function() {
+          if (previousElement) {
+            previousElement.remove();
+            previousElement = null;
+          }
+          if (currentScope) {
+            currentScope.$destroy();
+            currentScope = null;
+          }
+          if (currentElement) {
+            $animate.leave(currentElement).then(function() {
+              previousElement = null;
+            });
+            previousElement = currentElement;
+            currentElement = null;
+          }
+        };
+
+        scope.$watch(srcExp, function ngIncludeWatchAction(src) {
+          var afterAnimation = function() {
+            if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) {
+              $anchorScroll();
+            }
+          };
+          var thisChangeId = ++changeCounter;
+
+          if (src) {
+            //set the 2nd param to true to ignore the template request error so that the inner
+            //contents and scope can be cleaned up.
+            $templateRequest(src, true).then(function(response) {
+              if (thisChangeId !== changeCounter) return;
+              var newScope = scope.$new();
+              ctrl.template = response;
+
+              // Note: This will also link all children of ng-include that were contained in the original
+              // html. If that content contains controllers, ... they could pollute/change the scope.
+              // However, using ng-include on an element with additional content does not make sense...
+              // Note: We can't remove them in the cloneAttchFn of $transclude as that
+              // function is called before linking the content, which would apply child
+              // directives to non existing elements.
+              var clone = $transclude(newScope, function(clone) {
+                cleanupLastIncludeContent();
+                $animate.enter(clone, null, $element).then(afterAnimation);
+              });
+
+              currentScope = newScope;
+              currentElement = clone;
+
+              currentScope.$emit('$includeContentLoaded', src);
+              scope.$eval(onloadExp);
+            }, function() {
+              if (thisChangeId === changeCounter) {
+                cleanupLastIncludeContent();
+                scope.$emit('$includeContentError', src);
+              }
+            });
+            scope.$emit('$includeContentRequested', src);
+          } else {
+            cleanupLastIncludeContent();
+            ctrl.template = null;
+          }
+        });
+      };
+    }
+  };
+}];
+
+// This directive is called during the $transclude call of the first `ngInclude` directive.
+// It will replace and compile the content of the element with the loaded template.
+// We need this directive so that the element content is already filled when
+// the link function of another directive on the same element as ngInclude
+// is called.
+var ngIncludeFillContentDirective = ['$compile',
+  function($compile) {
+    return {
+      restrict: 'ECA',
+      priority: -400,
+      require: 'ngInclude',
+      link: function(scope, $element, $attr, ctrl) {
+        if (/SVG/.test($element[0].toString())) {
+          // WebKit: https://bugs.webkit.org/show_bug.cgi?id=135698 --- SVG elements do not
+          // support innerHTML, so detect this here and try to generate the contents
+          // specially.
+          $element.empty();
+          $compile(jqLiteBuildFragment(ctrl.template, document).childNodes)(scope,
+              function namespaceAdaptedClone(clone) {
+            $element.append(clone);
+          }, {futureParentElement: $element});
+          return;
+        }
+
+        $element.html(ctrl.template);
+        $compile($element.contents())(scope);
+      }
+    };
+  }];
+
+/**
+ * @ngdoc directive
+ * @name ngInit
+ * @restrict AC
+ *
+ * @description
+ * The `ngInit` directive allows you to evaluate an expression in the
+ * current scope.
+ *
+ * <div class="alert alert-danger">
+ * This directive can be abused to add unnecessary amounts of logic into your templates.
+ * There are only a few appropriate uses of `ngInit`, such as for aliasing special properties of
+ * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below; and for injecting data via
+ * server side scripting. Besides these few cases, you should use {@link guide/controller controllers}
+ * rather than `ngInit` to initialize values on a scope.
+ * </div>
+ *
+ * <div class="alert alert-warning">
+ * **Note**: If you have assignment in `ngInit` along with a {@link ng.$filter `filter`}, make
+ * sure you have parentheses to ensure correct operator precedence:
+ * <pre class="prettyprint">
+ * `<div ng-init="test1 = ($index | toString)"></div>`
+ * </pre>
+ * </div>
+ *
+ * @priority 450
+ *
+ * @element ANY
+ * @param {expression} ngInit {@link guide/expression Expression} to eval.
+ *
+ * @example
+   <example module="initExample">
+     <file name="index.html">
+   <script>
+     angular.module('initExample', [])
+       .controller('ExampleController', ['$scope', function($scope) {
+         $scope.list = [['a', 'b'], ['c', 'd']];
+       }]);
+   </script>
+   <div ng-controller="ExampleController">
+     <div ng-repeat="innerList in list" ng-init="outerIndex = $index">
+       <div ng-repeat="value in innerList" ng-init="innerIndex = $index">
+          <span class="example-init">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span>
+       </div>
+     </div>
+   </div>
+     </file>
+     <file name="protractor.js" type="protractor">
+       it('should alias index positions', function() {
+         var elements = element.all(by.css('.example-init'));
+         expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;');
+         expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;');
+         expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;');
+         expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;');
+       });
+     </file>
+   </example>
+ */
+var ngInitDirective = ngDirective({
+  priority: 450,
+  compile: function() {
+    return {
+      pre: function(scope, element, attrs) {
+        scope.$eval(attrs.ngInit);
+      }
+    };
+  }
+});
+
+/**
+ * @ngdoc directive
+ * @name ngList
+ *
+ * @description
+ * Text input that converts between a delimited string and an array of strings. The default
+ * delimiter is a comma followed by a space - equivalent to `ng-list=", "`. You can specify a custom
+ * delimiter as the value of the `ngList` attribute - for example, `ng-list=" | "`.
+ *
+ * The behaviour of the directive is affected by the use of the `ngTrim` attribute.
+ * * If `ngTrim` is set to `"false"` then whitespace around both the separator and each
+ *   list item is respected. This implies that the user of the directive is responsible for
+ *   dealing with whitespace but also allows you to use whitespace as a delimiter, such as a
+ *   tab or newline character.
+ * * Otherwise whitespace around the delimiter is ignored when splitting (although it is respected
+ *   when joining the list items back together) and whitespace around each list item is stripped
+ *   before it is added to the model.
+ *
+ * ### Example with Validation
+ *
+ * <example name="ngList-directive" module="listExample">
+ *   <file name="app.js">
+ *      angular.module('listExample', [])
+ *        .controller('ExampleController', ['$scope', function($scope) {
+ *          $scope.names = ['morpheus', 'neo', 'trinity'];
+ *        }]);
+ *   </file>
+ *   <file name="index.html">
+ *    <form name="myForm" ng-controller="ExampleController">
+ *      <label>List: <input name="namesInput" ng-model="names" ng-list required></label>
+ *      <span role="alert">
+ *        <span class="error" ng-show="myForm.namesInput.$error.required">
+ *        Required!</span>
+ *      </span>
+ *      <br>
+ *      <tt>names = {{names}}</tt><br/>
+ *      <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/>
+ *      <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/>
+ *      <tt>myForm.$valid = {{myForm.$valid}}</tt><br/>
+ *      <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/>
+ *     </form>
+ *   </file>
+ *   <file name="protractor.js" type="protractor">
+ *     var listInput = element(by.model('names'));
+ *     var names = element(by.exactBinding('names'));
+ *     var valid = element(by.binding('myForm.namesInput.$valid'));
+ *     var error = element(by.css('span.error'));
+ *
+ *     it('should initialize to model', function() {
+ *       expect(names.getText()).toContain('["morpheus","neo","trinity"]');
+ *       expect(valid.getText()).toContain('true');
+ *       expect(error.getCssValue('display')).toBe('none');
+ *     });
+ *
+ *     it('should be invalid if empty', function() {
+ *       listInput.clear();
+ *       listInput.sendKeys('');
+ *
+ *       expect(names.getText()).toContain('');
+ *       expect(valid.getText()).toContain('false');
+ *       expect(error.getCssValue('display')).not.toBe('none');
+ *     });
+ *   </file>
+ * </example>
+ *
+ * ### Example - splitting on newline
+ * <example name="ngList-directive-newlines">
+ *   <file name="index.html">
+ *    <textarea ng-model="list" ng-list="&#10;" ng-trim="false"></textarea>
+ *    <pre>{{ list | json }}</pre>
+ *   </file>
+ *   <file name="protractor.js" type="protractor">
+ *     it("should split the text by newlines", function() {
+ *       var listInput = element(by.model('list'));
+ *       var output = element(by.binding('list | json'));
+ *       listInput.sendKeys('abc\ndef\nghi');
+ *       expect(output.getText()).toContain('[\n  "abc",\n  "def",\n  "ghi"\n]');
+ *     });
+ *   </file>
+ * </example>
+ *
+ * @element input
+ * @param {string=} ngList optional delimiter that should be used to split the value.
+ */
+var ngListDirective = function() {
+  return {
+    restrict: 'A',
+    priority: 100,
+    require: 'ngModel',
+    link: function(scope, element, attr, ctrl) {
+      // We want to control whitespace trimming so we use this convoluted approach
+      // to access the ngList attribute, which doesn't pre-trim the attribute
+      var ngList = element.attr(attr.$attr.ngList) || ', ';
+      var trimValues = attr.ngTrim !== 'false';
+      var separator = trimValues ? trim(ngList) : ngList;
+
+      var parse = function(viewValue) {
+        // If the viewValue is invalid (say required but empty) it will be `undefined`
+        if (isUndefined(viewValue)) return;
+
+        var list = [];
+
+        if (viewValue) {
+          forEach(viewValue.split(separator), function(value) {
+            if (value) list.push(trimValues ? trim(value) : value);
+          });
+        }
+
+        return list;
+      };
+
+      ctrl.$parsers.push(parse);
+      ctrl.$formatters.push(function(value) {
+        if (isArray(value)) {
+          return value.join(ngList);
+        }
+
+        return undefined;
+      });
+
+      // Override the standard $isEmpty because an empty array means the input is empty.
+      ctrl.$isEmpty = function(value) {
+        return !value || !value.length;
+      };
+    }
+  };
+};
+
+/* global VALID_CLASS: true,
+  INVALID_CLASS: true,
+  PRISTINE_CLASS: true,
+  DIRTY_CLASS: true,
+  UNTOUCHED_CLASS: true,
+  TOUCHED_CLASS: true,
+*/
+
+var VALID_CLASS = 'ng-valid',
+    INVALID_CLASS = 'ng-invalid',
+    PRISTINE_CLASS = 'ng-pristine',
+    DIRTY_CLASS = 'ng-dirty',
+    UNTOUCHED_CLASS = 'ng-untouched',
+    TOUCHED_CLASS = 'ng-touched',
+    PENDING_CLASS = 'ng-pending';
+
+var ngModelMinErr = minErr('ngModel');
+
+/**
+ * @ngdoc type
+ * @name ngModel.NgModelController
+ *
+ * @property {*} $viewValue The actual value from the control's view. For `input` elements, this is a
+ * String. See {@link ngModel.NgModelController#$setViewValue} for information about when the $viewValue
+ * is set.
+ * @property {*} $modelValue The value in the model that the control is bound to.
+ * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever
+       the control reads value from the DOM. The functions are called in array order, each passing
+       its return value through to the next. The last return value is forwarded to the
+       {@link ngModel.NgModelController#$validators `$validators`} collection.
+
+Parsers are used to sanitize / convert the {@link ngModel.NgModelController#$viewValue
+`$viewValue`}.
+
+Returning `undefined` from a parser means a parse error occurred. In that case,
+no {@link ngModel.NgModelController#$validators `$validators`} will run and the `ngModel`
+will be set to `undefined` unless {@link ngModelOptions `ngModelOptions.allowInvalid`}
+is set to `true`. The parse error is stored in `ngModel.$error.parse`.
+
+ *
+ * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever
+       the model value changes. The functions are called in reverse array order, each passing the value through to the
+       next. The last return value is used as the actual DOM value.
+       Used to format / convert values for display in the control.
+ * ```js
+ * function formatter(value) {
+ *   if (value) {
+ *     return value.toUpperCase();
+ *   }
+ * }
+ * ngModel.$formatters.push(formatter);
+ * ```
+ *
+ * @property {Object.<string, function>} $validators A collection of validators that are applied
+ *      whenever the model value changes. The key value within the object refers to the name of the
+ *      validator while the function refers to the validation operation. The validation operation is
+ *      provided with the model value as an argument and must return a true or false value depending
+ *      on the response of that validation.
+ *
+ * ```js
+ * ngModel.$validators.validCharacters = function(modelValue, viewValue) {
+ *   var value = modelValue || viewValue;
+ *   return /[0-9]+/.test(value) &&
+ *          /[a-z]+/.test(value) &&
+ *          /[A-Z]+/.test(value) &&
+ *          /\W+/.test(value);
+ * };
+ * ```
+ *
+ * @property {Object.<string, function>} $asyncValidators A collection of validations that are expected to
+ *      perform an asynchronous validation (e.g. a HTTP request). The validation function that is provided
+ *      is expected to return a promise when it is run during the model validation process. Once the promise
+ *      is delivered then the validation status will be set to true when fulfilled and false when rejected.
+ *      When the asynchronous validators are triggered, each of the validators will run in parallel and the model
+ *      value will only be updated once all validators have been fulfilled. As long as an asynchronous validator
+ *      is unfulfilled, its key will be added to the controllers `$pending` property. Also, all asynchronous validators
+ *      will only run once all synchronous validators have passed.
+ *
+ * Please note that if $http is used then it is important that the server returns a success HTTP response code
+ * in order to fulfill the validation and a status level of `4xx` in order to reject the validation.
+ *
+ * ```js
+ * ngModel.$asyncValidators.uniqueUsername = function(modelValue, viewValue) {
+ *   var value = modelValue || viewValue;
+ *
+ *   // Lookup user by username
+ *   return $http.get('/api/users/' + value).
+ *      then(function resolved() {
+ *        //username exists, this means validation fails
+ *        return $q.reject('exists');
+ *      }, function rejected() {
+ *        //username does not exist, therefore this validation passes
+ *        return true;
+ *      });
+ * };
+ * ```
+ *
+ * @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the
+ *     view value has changed. It is called with no arguments, and its return value is ignored.
+ *     This can be used in place of additional $watches against the model value.
+ *
+ * @property {Object} $error An object hash with all failing validator ids as keys.
+ * @property {Object} $pending An object hash with all pending validator ids as keys.
+ *
+ * @property {boolean} $untouched True if control has not lost focus yet.
+ * @property {boolean} $touched True if control has lost focus.
+ * @property {boolean} $pristine True if user has not interacted with the control yet.
+ * @property {boolean} $dirty True if user has already interacted with the control.
+ * @property {boolean} $valid True if there is no error.
+ * @property {boolean} $invalid True if at least one error on the control.
+ * @property {string} $name The name attribute of the control.
+ *
+ * @description
+ *
+ * `NgModelController` provides API for the {@link ngModel `ngModel`} directive.
+ * The controller contains services for data-binding, validation, CSS updates, and value formatting
+ * and parsing. It purposefully does not contain any logic which deals with DOM rendering or
+ * listening to DOM events.
+ * Such DOM related logic should be provided by other directives which make use of
+ * `NgModelController` for data-binding to control elements.
+ * Angular provides this DOM logic for most {@link input `input`} elements.
+ * At the end of this page you can find a {@link ngModel.NgModelController#custom-control-example
+ * custom control example} that uses `ngModelController` to bind to `contenteditable` elements.
+ *
+ * @example
+ * ### Custom Control Example
+ * This example shows how to use `NgModelController` with a custom control to achieve
+ * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`)
+ * collaborate together to achieve the desired result.
+ *
+ * `contenteditable` is an HTML5 attribute, which tells the browser to let the element
+ * contents be edited in place by the user.
+ *
+ * We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize}
+ * module to automatically remove "bad" content like inline event listener (e.g. `<span onclick="...">`).
+ * However, as we are using `$sce` the model can still decide to provide unsafe content if it marks
+ * that content using the `$sce` service.
+ *
+ * <example name="NgModelController" module="customControl" deps="angular-sanitize.js">
+    <file name="style.css">
+      [contenteditable] {
+        border: 1px solid black;
+        background-color: white;
+        min-height: 20px;
+      }
+
+      .ng-invalid {
+        border: 1px solid red;
+      }
+
+    </file>
+    <file name="script.js">
+      angular.module('customControl', ['ngSanitize']).
+        directive('contenteditable', ['$sce', function($sce) {
+          return {
+            restrict: 'A', // only activate on element attribute
+            require: '?ngModel', // get a hold of NgModelController
+            link: function(scope, element, attrs, ngModel) {
+              if (!ngModel) return; // do nothing if no ng-model
+
+              // Specify how UI should be updated
+              ngModel.$render = function() {
+                element.html($sce.getTrustedHtml(ngModel.$viewValue || ''));
+              };
+
+              // Listen for change events to enable binding
+              element.on('blur keyup change', function() {
+                scope.$evalAsync(read);
+              });
+              read(); // initialize
+
+              // Write data to the model
+              function read() {
+                var html = element.html();
+                // When we clear the content editable the browser leaves a <br> behind
+                // If strip-br attribute is provided then we strip this out
+                if ( attrs.stripBr && html == '<br>' ) {
+                  html = '';
+                }
+                ngModel.$setViewValue(html);
+              }
+            }
+          };
+        }]);
+    </file>
+    <file name="index.html">
+      <form name="myForm">
+       <div contenteditable
+            name="myWidget" ng-model="userContent"
+            strip-br="true"
+            required>Change me!</div>
+        <span ng-show="myForm.myWidget.$error.required">Required!</span>
+       <hr>
+       <textarea ng-model="userContent" aria-label="Dynamic textarea"></textarea>
+      </form>
+    </file>
+    <file name="protractor.js" type="protractor">
+    it('should data-bind and become invalid', function() {
+      if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') {
+        // SafariDriver can't handle contenteditable
+        // and Firefox driver can't clear contenteditables very well
+        return;
+      }
+      var contentEditable = element(by.css('[contenteditable]'));
+      var content = 'Change me!';
+
+      expect(contentEditable.getText()).toEqual(content);
+
+      contentEditable.clear();
+      contentEditable.sendKeys(protractor.Key.BACK_SPACE);
+      expect(contentEditable.getText()).toEqual('');
+      expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/);
+    });
+    </file>
+ * </example>
+ *
+ *
+ */
+var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', '$timeout', '$rootScope', '$q', '$interpolate',
+    function($scope, $exceptionHandler, $attr, $element, $parse, $animate, $timeout, $rootScope, $q, $interpolate) {
+  this.$viewValue = Number.NaN;
+  this.$modelValue = Number.NaN;
+  this.$$rawModelValue = undefined; // stores the parsed modelValue / model set from scope regardless of validity.
+  this.$validators = {};
+  this.$asyncValidators = {};
+  this.$parsers = [];
+  this.$formatters = [];
+  this.$viewChangeListeners = [];
+  this.$untouched = true;
+  this.$touched = false;
+  this.$pristine = true;
+  this.$dirty = false;
+  this.$valid = true;
+  this.$invalid = false;
+  this.$error = {}; // keep invalid keys here
+  this.$$success = {}; // keep valid keys here
+  this.$pending = undefined; // keep pending keys here
+  this.$name = $interpolate($attr.name || '', false)($scope);
+  this.$$parentForm = nullFormCtrl;
+
+  var parsedNgModel = $parse($attr.ngModel),
+      parsedNgModelAssign = parsedNgModel.assign,
+      ngModelGet = parsedNgModel,
+      ngModelSet = parsedNgModelAssign,
+      pendingDebounce = null,
+      parserValid,
+      ctrl = this;
+
+  this.$$setOptions = function(options) {
+    ctrl.$options = options;
+    if (options && options.getterSetter) {
+      var invokeModelGetter = $parse($attr.ngModel + '()'),
+          invokeModelSetter = $parse($attr.ngModel + '($$$p)');
+
+      ngModelGet = function($scope) {
+        var modelValue = parsedNgModel($scope);
+        if (isFunction(modelValue)) {
+          modelValue = invokeModelGetter($scope);
+        }
+        return modelValue;
+      };
+      ngModelSet = function($scope, newValue) {
+        if (isFunction(parsedNgModel($scope))) {
+          invokeModelSetter($scope, {$$$p: ctrl.$modelValue});
+        } else {
+          parsedNgModelAssign($scope, ctrl.$modelValue);
+        }
+      };
+    } else if (!parsedNgModel.assign) {
+      throw ngModelMinErr('nonassign', "Expression '{0}' is non-assignable. Element: {1}",
+          $attr.ngModel, startingTag($element));
+    }
+  };
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$render
+   *
+   * @description
+   * Called when the view needs to be updated. It is expected that the user of the ng-model
+   * directive will implement this method.
+   *
+   * The `$render()` method is invoked in the following situations:
+   *
+   * * `$rollbackViewValue()` is called.  If we are rolling back the view value to the last
+   *   committed value then `$render()` is called to update the input control.
+   * * The value referenced by `ng-model` is changed programmatically and both the `$modelValue` and
+   *   the `$viewValue` are different from last time.
+   *
+   * Since `ng-model` does not do a deep watch, `$render()` is only invoked if the values of
+   * `$modelValue` and `$viewValue` are actually different from their previous value. If `$modelValue`
+   * or `$viewValue` are objects (rather than a string or number) then `$render()` will not be
+   * invoked if you only change a property on the objects.
+   */
+  this.$render = noop;
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$isEmpty
+   *
+   * @description
+   * This is called when we need to determine if the value of an input is empty.
+   *
+   * For instance, the required directive does this to work out if the input has data or not.
+   *
+   * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`.
+   *
+   * You can override this for input directives whose concept of being empty is different from the
+   * default. The `checkboxInputType` directive does this because in its case a value of `false`
+   * implies empty.
+   *
+   * @param {*} value The value of the input to check for emptiness.
+   * @returns {boolean} True if `value` is "empty".
+   */
+  this.$isEmpty = function(value) {
+    return isUndefined(value) || value === '' || value === null || value !== value;
+  };
+
+  var currentValidationRunId = 0;
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$setValidity
+   *
+   * @description
+   * Change the validity state, and notify the form.
+   *
+   * This method can be called within $parsers/$formatters or a custom validation implementation.
+   * However, in most cases it should be sufficient to use the `ngModel.$validators` and
+   * `ngModel.$asyncValidators` collections which will call `$setValidity` automatically.
+   *
+   * @param {string} validationErrorKey Name of the validator. The `validationErrorKey` will be assigned
+   *        to either `$error[validationErrorKey]` or `$pending[validationErrorKey]`
+   *        (for unfulfilled `$asyncValidators`), so that it is available for data-binding.
+   *        The `validationErrorKey` should be in camelCase and will get converted into dash-case
+   *        for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error`
+   *        class and can be bound to as  `{{someForm.someControl.$error.myError}}` .
+   * @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending (undefined),
+   *                          or skipped (null). Pending is used for unfulfilled `$asyncValidators`.
+   *                          Skipped is used by Angular when validators do not run because of parse errors and
+   *                          when `$asyncValidators` do not run because any of the `$validators` failed.
+   */
+  addSetValidityMethod({
+    ctrl: this,
+    $element: $element,
+    set: function(object, property) {
+      object[property] = true;
+    },
+    unset: function(object, property) {
+      delete object[property];
+    },
+    $animate: $animate
+  });
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$setPristine
+   *
+   * @description
+   * Sets the control to its pristine state.
+   *
+   * This method can be called to remove the `ng-dirty` class and set the control to its pristine
+   * state (`ng-pristine` class). A model is considered to be pristine when the control
+   * has not been changed from when first compiled.
+   */
+  this.$setPristine = function() {
+    ctrl.$dirty = false;
+    ctrl.$pristine = true;
+    $animate.removeClass($element, DIRTY_CLASS);
+    $animate.addClass($element, PRISTINE_CLASS);
+  };
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$setDirty
+   *
+   * @description
+   * Sets the control to its dirty state.
+   *
+   * This method can be called to remove the `ng-pristine` class and set the control to its dirty
+   * state (`ng-dirty` class). A model is considered to be dirty when the control has been changed
+   * from when first compiled.
+   */
+  this.$setDirty = function() {
+    ctrl.$dirty = true;
+    ctrl.$pristine = false;
+    $animate.removeClass($element, PRISTINE_CLASS);
+    $animate.addClass($element, DIRTY_CLASS);
+    ctrl.$$parentForm.$setDirty();
+  };
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$setUntouched
+   *
+   * @description
+   * Sets the control to its untouched state.
+   *
+   * This method can be called to remove the `ng-touched` class and set the control to its
+   * untouched state (`ng-untouched` class). Upon compilation, a model is set as untouched
+   * by default, however this function can be used to restore that state if the model has
+   * already been touched by the user.
+   */
+  this.$setUntouched = function() {
+    ctrl.$touched = false;
+    ctrl.$untouched = true;
+    $animate.setClass($element, UNTOUCHED_CLASS, TOUCHED_CLASS);
+  };
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$setTouched
+   *
+   * @description
+   * Sets the control to its touched state.
+   *
+   * This method can be called to remove the `ng-untouched` class and set the control to its
+   * touched state (`ng-touched` class). A model is considered to be touched when the user has
+   * first focused the control element and then shifted focus away from the control (blur event).
+   */
+  this.$setTouched = function() {
+    ctrl.$touched = true;
+    ctrl.$untouched = false;
+    $animate.setClass($element, TOUCHED_CLASS, UNTOUCHED_CLASS);
+  };
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$rollbackViewValue
+   *
+   * @description
+   * Cancel an update and reset the input element's value to prevent an update to the `$modelValue`,
+   * which may be caused by a pending debounced event or because the input is waiting for a some
+   * future event.
+   *
+   * If you have an input that uses `ng-model-options` to set up debounced events or events such
+   * as blur you can have a situation where there is a period when the `$viewValue`
+   * is out of synch with the ngModel's `$modelValue`.
+   *
+   * In this case, you can run into difficulties if you try to update the ngModel's `$modelValue`
+   * programmatically before these debounced/future events have resolved/occurred, because Angular's
+   * dirty checking mechanism is not able to tell whether the model has actually changed or not.
+   *
+   * The `$rollbackViewValue()` method should be called before programmatically changing the model of an
+   * input which may have such events pending. This is important in order to make sure that the
+   * input field will be updated with the new model value and any pending operations are cancelled.
+   *
+   * <example name="ng-model-cancel-update" module="cancel-update-example">
+   *   <file name="app.js">
+   *     angular.module('cancel-update-example', [])
+   *
+   *     .controller('CancelUpdateController', ['$scope', function($scope) {
+   *       $scope.resetWithCancel = function(e) {
+   *         if (e.keyCode == 27) {
+   *           $scope.myForm.myInput1.$rollbackViewValue();
+   *           $scope.myValue = '';
+   *         }
+   *       };
+   *       $scope.resetWithoutCancel = function(e) {
+   *         if (e.keyCode == 27) {
+   *           $scope.myValue = '';
+   *         }
+   *       };
+   *     }]);
+   *   </file>
+   *   <file name="index.html">
+   *     <div ng-controller="CancelUpdateController">
+   *       <p>Try typing something in each input.  See that the model only updates when you
+   *          blur off the input.
+   *        </p>
+   *        <p>Now see what happens if you start typing then press the Escape key</p>
+   *
+   *       <form name="myForm" ng-model-options="{ updateOn: 'blur' }">
+   *         <p id="inputDescription1">With $rollbackViewValue()</p>
+   *         <input name="myInput1" aria-describedby="inputDescription1" ng-model="myValue"
+   *                ng-keydown="resetWithCancel($event)"><br/>
+   *         myValue: "{{ myValue }}"
+   *
+   *         <p id="inputDescription2">Without $rollbackViewValue()</p>
+   *         <input name="myInput2" aria-describedby="inputDescription2" ng-model="myValue"
+   *                ng-keydown="resetWithoutCancel($event)"><br/>
+   *         myValue: "{{ myValue }}"
+   *       </form>
+   *     </div>
+   *   </file>
+   * </example>
+   */
+  this.$rollbackViewValue = function() {
+    $timeout.cancel(pendingDebounce);
+    ctrl.$viewValue = ctrl.$$lastCommittedViewValue;
+    ctrl.$render();
+  };
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$validate
+   *
+   * @description
+   * Runs each of the registered validators (first synchronous validators and then
+   * asynchronous validators).
+   * If the validity changes to invalid, the model will be set to `undefined`,
+   * unless {@link ngModelOptions `ngModelOptions.allowInvalid`} is `true`.
+   * If the validity changes to valid, it will set the model to the last available valid
+   * `$modelValue`, i.e. either the last parsed value or the last value set from the scope.
+   */
+  this.$validate = function() {
+    // ignore $validate before model is initialized
+    if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {
+      return;
+    }
+
+    var viewValue = ctrl.$$lastCommittedViewValue;
+    // Note: we use the $$rawModelValue as $modelValue might have been
+    // set to undefined during a view -> model update that found validation
+    // errors. We can't parse the view here, since that could change
+    // the model although neither viewValue nor the model on the scope changed
+    var modelValue = ctrl.$$rawModelValue;
+
+    var prevValid = ctrl.$valid;
+    var prevModelValue = ctrl.$modelValue;
+
+    var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;
+
+    ctrl.$$runValidators(modelValue, viewValue, function(allValid) {
+      // If there was no change in validity, don't update the model
+      // This prevents changing an invalid modelValue to undefined
+      if (!allowInvalid && prevValid !== allValid) {
+        // Note: Don't check ctrl.$valid here, as we could have
+        // external validators (e.g. calculated on the server),
+        // that just call $setValidity and need the model value
+        // to calculate their validity.
+        ctrl.$modelValue = allValid ? modelValue : undefined;
+
+        if (ctrl.$modelValue !== prevModelValue) {
+          ctrl.$$writeModelToScope();
+        }
+      }
+    });
+
+  };
+
+  this.$$runValidators = function(modelValue, viewValue, doneCallback) {
+    currentValidationRunId++;
+    var localValidationRunId = currentValidationRunId;
+
+    // check parser error
+    if (!processParseErrors()) {
+      validationDone(false);
+      return;
+    }
+    if (!processSyncValidators()) {
+      validationDone(false);
+      return;
+    }
+    processAsyncValidators();
+
+    function processParseErrors() {
+      var errorKey = ctrl.$$parserName || 'parse';
+      if (isUndefined(parserValid)) {
+        setValidity(errorKey, null);
+      } else {
+        if (!parserValid) {
+          forEach(ctrl.$validators, function(v, name) {
+            setValidity(name, null);
+          });
+          forEach(ctrl.$asyncValidators, function(v, name) {
+            setValidity(name, null);
+          });
+        }
+        // Set the parse error last, to prevent unsetting it, should a $validators key == parserName
+        setValidity(errorKey, parserValid);
+        return parserValid;
+      }
+      return true;
+    }
+
+    function processSyncValidators() {
+      var syncValidatorsValid = true;
+      forEach(ctrl.$validators, function(validator, name) {
+        var result = validator(modelValue, viewValue);
+        syncValidatorsValid = syncValidatorsValid && result;
+        setValidity(name, result);
+      });
+      if (!syncValidatorsValid) {
+        forEach(ctrl.$asyncValidators, function(v, name) {
+          setValidity(name, null);
+        });
+        return false;
+      }
+      return true;
+    }
+
+    function processAsyncValidators() {
+      var validatorPromises = [];
+      var allValid = true;
+      forEach(ctrl.$asyncValidators, function(validator, name) {
+        var promise = validator(modelValue, viewValue);
+        if (!isPromiseLike(promise)) {
+          throw ngModelMinErr("$asyncValidators",
+            "Expected asynchronous validator to return a promise but got '{0}' instead.", promise);
+        }
+        setValidity(name, undefined);
+        validatorPromises.push(promise.then(function() {
+          setValidity(name, true);
+        }, function(error) {
+          allValid = false;
+          setValidity(name, false);
+        }));
+      });
+      if (!validatorPromises.length) {
+        validationDone(true);
+      } else {
+        $q.all(validatorPromises).then(function() {
+          validationDone(allValid);
+        }, noop);
+      }
+    }
+
+    function setValidity(name, isValid) {
+      if (localValidationRunId === currentValidationRunId) {
+        ctrl.$setValidity(name, isValid);
+      }
+    }
+
+    function validationDone(allValid) {
+      if (localValidationRunId === currentValidationRunId) {
+
+        doneCallback(allValid);
+      }
+    }
+  };
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$commitViewValue
+   *
+   * @description
+   * Commit a pending update to the `$modelValue`.
+   *
+   * Updates may be pending by a debounced event or because the input is waiting for a some future
+   * event defined in `ng-model-options`. this method is rarely needed as `NgModelController`
+   * usually handles calling this in response to input events.
+   */
+  this.$commitViewValue = function() {
+    var viewValue = ctrl.$viewValue;
+
+    $timeout.cancel(pendingDebounce);
+
+    // If the view value has not changed then we should just exit, except in the case where there is
+    // a native validator on the element. In this case the validation state may have changed even though
+    // the viewValue has stayed empty.
+    if (ctrl.$$lastCommittedViewValue === viewValue && (viewValue !== '' || !ctrl.$$hasNativeValidators)) {
+      return;
+    }
+    ctrl.$$lastCommittedViewValue = viewValue;
+
+    // change to dirty
+    if (ctrl.$pristine) {
+      this.$setDirty();
+    }
+    this.$$parseAndValidate();
+  };
+
+  this.$$parseAndValidate = function() {
+    var viewValue = ctrl.$$lastCommittedViewValue;
+    var modelValue = viewValue;
+    parserValid = isUndefined(modelValue) ? undefined : true;
+
+    if (parserValid) {
+      for (var i = 0; i < ctrl.$parsers.length; i++) {
+        modelValue = ctrl.$parsers[i](modelValue);
+        if (isUndefined(modelValue)) {
+          parserValid = false;
+          break;
+        }
+      }
+    }
+    if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) {
+      // ctrl.$modelValue has not been touched yet...
+      ctrl.$modelValue = ngModelGet($scope);
+    }
+    var prevModelValue = ctrl.$modelValue;
+    var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid;
+    ctrl.$$rawModelValue = modelValue;
+
+    if (allowInvalid) {
+      ctrl.$modelValue = modelValue;
+      writeToModelIfNeeded();
+    }
+
+    // Pass the $$lastCommittedViewValue here, because the cached viewValue might be out of date.
+    // This can happen if e.g. $setViewValue is called from inside a parser
+    ctrl.$$runValidators(modelValue, ctrl.$$lastCommittedViewValue, function(allValid) {
+      if (!allowInvalid) {
+        // Note: Don't check ctrl.$valid here, as we could have
+        // external validators (e.g. calculated on the server),
+        // that just call $setValidity and need the model value
+        // to calculate their validity.
+        ctrl.$modelValue = allValid ? modelValue : undefined;
+        writeToModelIfNeeded();
+      }
+    });
+
+    function writeToModelIfNeeded() {
+      if (ctrl.$modelValue !== prevModelValue) {
+        ctrl.$$writeModelToScope();
+      }
+    }
+  };
+
+  this.$$writeModelToScope = function() {
+    ngModelSet($scope, ctrl.$modelValue);
+    forEach(ctrl.$viewChangeListeners, function(listener) {
+      try {
+        listener();
+      } catch (e) {
+        $exceptionHandler(e);
+      }
+    });
+  };
+
+  /**
+   * @ngdoc method
+   * @name ngModel.NgModelController#$setViewValue
+   *
+   * @description
+   * Update the view value.
+   *
+   * This method should be called when a control wants to change the view value; typically,
+   * this is done from within a DOM event handler. For example, the {@link ng.directive:input input}
+   * directive calls it when the value of the input changes and {@link ng.directive:select select}
+   * calls it when an option is selected.
+   *
+   * When `$setViewValue` is called, the new `value` will be staged for committing through the `$parsers`
+   * and `$validators` pipelines. If there are no special {@link ngModelOptions} specified then the staged
+   * value sent directly for processing, finally to be applied to `$modelValue` and then the
+   * **expression** specified in the `ng-model` attribute. Lastly, all the registered change listeners,
+   * in the `$viewChangeListeners` list, are called.
+   *
+   * In case the {@link ng.directive:ngModelOptions ngModelOptions} directive is used with `updateOn`
+   * and the `default` trigger is not listed, all those actions will remain pending until one of the
+   * `updateOn` events is triggered on the DOM element.
+   * All these actions will be debounced if the {@link ng.directive:ngModelOptions ngModelOptions}
+   * directive is used with a custom debounce for this particular event.
+   * Note that a `$digest` is only triggered once the `updateOn` events are fired, or if `debounce`
+   * is specified, once the timer runs out.
+   *
+   * When used with standard inputs, the view value will always be a string (which is in some cases
+   * parsed into another type, such as a `Date` object for `input[date]`.)
+   * However, custom controls might also pass objects to this method. In this case, we should make
+   * a copy of the object before passing it to `$setViewValue`. This is because `ngModel` does not
+   * perform a deep watch of objects, it only looks for a change of identity. If you only change
+   * the property of the object then ngModel will not realise that the object has changed and
+   * will not invoke the `$parsers` and `$validators` pipelines. For this reason, you should
+   * not change properties of the copy once it has been passed to `$setViewValue`.
+   * Otherwise you may cause the model value on the scope to change incorrectly.
+   *
+   * <div class="alert alert-info">
+   * In any case, the value passed to the method should always reflect the current value
+   * of the control. For example, if you are calling `$setViewValue` for an input element,
+   * you should pass the input DOM value. Otherwise, the control and the scope model become
+   * out of sync. It's also important to note that `$setViewValue` does not call `$render` or change
+   * the control's DOM value in any way. If we want to change the control's DOM value
+   * programmatically, we should update the `ngModel` scope expression. Its new value will be
+   * picked up by the model controller, which will run it through the `$formatters`, `$render` it
+   * to update the DOM, and finally call `$validate` on it.
+   * </div>
+   *
+   * @param {*} value value from the view.
+   * @param {string} trigger Event that triggered the update.
+   */
+  this.$setViewValue = function(value, trigger) {
+    ctrl.$viewValue = value;
+    if (!ctrl.$options || ctrl.$options.updateOnDefault) {
+      ctrl.$$debounceViewValueCommit(trigger);
+    }
+  };
+
+  this.$$debounceViewValueCommit = function(trigger) {
+    var debounceDelay = 0,
+        options = ctrl.$options,
+        debounce;
+
+    if (options && isDefined(options.debounce)) {
+      debounce = options.debounce;
+      if (isNumber(debounce)) {
+        debounceDelay = debounce;
+      } else if (isNumber(debounce[trigger])) {
+        debounceDelay = debounce[trigger];
+      } else if (isNumber(debounce['default'])) {
+        debounceDelay = debounce['default'];
+      }
+    }
+
+    $timeout.cancel(pendingDebounce);
+    if (debounceDelay) {
+      pendingDebounce = $timeout(function() {
+        ctrl.$commitViewValue();
+      }, debounceDelay);
+    } else if ($rootScope.$$phase) {
+      ctrl.$commitViewValue();
+    } else {
+      $scope.$apply(function() {
+        ctrl.$commitViewValue();
+      });
+    }
+  };
+
+  // model -> value
+  // Note: we cannot use a normal scope.$watch as we want to detect the following:
+  // 1. scope value is 'a'
+  // 2. user enters 'b'
+  // 3. ng-change kicks in and reverts scope value to 'a'
+  //    -> scope value did not change since the last digest as
+  //       ng-change executes in apply phase
+  // 4. view should be changed back to 'a'
+  $scope.$watch(function ngModelWatch() {
+    var modelValue = ngModelGet($scope);
+
+    // if scope model value and ngModel value are out of sync
+    // TODO(perf): why not move this to the action fn?
+    if (modelValue !== ctrl.$modelValue &&
+       // checks for NaN is needed to allow setting the model to NaN when there's an asyncValidator
+       (ctrl.$modelValue === ctrl.$modelValue || modelValue === modelValue)
+    ) {
+      ctrl.$modelValue = ctrl.$$rawModelValue = modelValue;
+      parserValid = undefined;
+
+      var formatters = ctrl.$formatters,
+          idx = formatters.length;
+
+      var viewValue = modelValue;
+      while (idx--) {
+        viewValue = formatters[idx](viewValue);
+      }
+      if (ctrl.$viewValue !== viewValue) {
+        ctrl.$viewValue = ctrl.$$lastCommittedViewValue = viewValue;
+        ctrl.$render();
+
+        ctrl.$$runValidators(modelValue, viewValue, noop);
+      }
+    }
+
+    return modelValue;
+  });
+}];
+
+
+/**
+ * @ngdoc directive
+ * @name ngModel
+ *
+ * @element input
+ * @priority 1
+ *
+ * @description
+ * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a
+ * property on the scope using {@link ngModel.NgModelController NgModelController},
+ * which is created and exposed by this directive.
+ *
+ * `ngModel` is responsible for:
+ *
+ * - Binding the view into the model, which other directives such as `input`, `textarea` or `select`
+ *   require.
+ * - Providing validation behavior (i.e. required, number, email, url).
+ * - Keeping the state of the control (valid/invalid, dirty/pristine, touched/untouched, validation errors).
+ * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`, `ng-touched`, `ng-untouched`) including animations.
+ * - Registering the control with its parent {@link ng.directive:form form}.
+ *
+ * Note: `ngModel` will try to bind to the property given by evaluating the expression on the
+ * current scope. If the property doesn't already exist on this scope, it will be created
+ * implicitly and added to the scope.
+ *
+ * For best practices on using `ngModel`, see:
+ *
+ *  - [Understanding Scopes](https://github.com/angular/angular.js/wiki/Understanding-Scopes)
+ *
+ * For basic examples, how to use `ngModel`, see:
+ *
+ *  - {@link ng.directive:input input}
+ *    - {@link input[text] text}
+ *    - {@link input[checkbox] checkbox}
+ *    - {@link input[radio] radio}
+ *    - {@link input[number] number}
+ *    - {@link input[email] email}
+ *    - {@link input[url] url}
+ *    - {@link input[date] date}
+ *    - {@link input[datetime-local] datetime-local}
+ *    - {@link input[time] time}
+ *    - {@link input[month] month}
+ *    - {@link input[week] week}
+ *  - {@link ng.directive:select select}
+ *  - {@link ng.directive:textarea textarea}
+ *
+ * # CSS classes
+ * The following CSS classes are added and removed on the associated input/select/textarea element
+ * depending on the validity of the model.
+ *
+ *  - `ng-valid`: the model is valid
+ *  - `ng-invalid`: the model is invalid
+ *  - `ng-valid-[key]`: for each valid key added by `$setValidity`
+ *  - `ng-invalid-[key]`: for each invalid key added by `$setValidity`
+ *  - `ng-pristine`: the control hasn't been interacted with yet
+ *  - `ng-dirty`: the control has been interacted with
+ *  - `ng-touched`: the control has been blurred
+ *  - `ng-untouched`: the control hasn't been blurred
+ *  - `ng-pending`: any `$asyncValidators` are unfulfilled
+ *
+ * Keep in mind that ngAnimate can detect each of these classes when added and removed.
+ *
+ * ## Animation Hooks
+ *
+ * Animations within models are triggered when any of the associated CSS classes are added and removed
+ * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`,
+ * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself.
+ * The animations that are triggered within ngModel are similar to how they work in ngClass and
+ * animations can be hooked into using CSS transitions, keyframes as well as JS animations.
+ *
+ * The following example shows a simple way to utilize CSS transitions to style an input element
+ * that has been rendered as invalid after it has been validated:
+ *
+ * <pre>
+ * //be sure to include ngAnimate as a module to hook into more
+ * //advanced animations
+ * .my-input {
+ *   transition:0.5s linear all;
+ *   background: white;
+ * }
+ * .my-input.ng-invalid {
+ *   background: red;
+ *   color:white;
+ * }
+ * </pre>
+ *
+ * @example
+ * <example deps="angular-animate.js" animations="true" fixBase="true" module="inputExample">
+     <file name="index.html">
+       <script>
+        angular.module('inputExample', [])
+          .controller('ExampleController', ['$scope', function($scope) {
+            $scope.val = '1';
+          }]);
+       </script>
+       <style>
+         .my-input {
+           transition:all linear 0.5s;
+           background: transparent;
+         }
+         .my-input.ng-invalid {
+           color:white;
+           background: red;
+         }
+       </style>
+       <p id="inputDescription">
+        Update input to see transitions when valid/invalid.
+        Integer is a valid value.
+       </p>
+       <form name="testForm" ng-controller="ExampleController">
+         <input ng-model="val" ng-pattern="/^\d+$/" name="anim" class="my-input"
+                aria-describedby="inputDescription" />
+       </form>
+     </file>
+ * </example>
+ *
+ * ## Binding to a getter/setter
+ *
+ * Sometimes it's helpful to bind `ngModel` to a getter/setter function.  A getter/setter is a
+ * function that returns a representation of the model when called with zero arguments, and sets
+ * the internal state of a model when called with an argument. It's sometimes useful to use this
+ * for models that have an internal representation that's different from what the model exposes
+ * to the view.
+ *
+ * <div class="alert alert-success">
+ * **Best Practice:** It's best to keep getters fast because Angular is likely to call them more
+ * frequently than other parts of your code.
+ * </div>
+ *
+ * You use this behavior by adding `ng-model-options="{ getterSetter: true }"` to an element that
+ * has `ng-model` attached to it. You can also add `ng-model-options="{ getterSetter: true }"` to
+ * a `<form>`, which will enable this behavior for all `<input>`s within it. See
+ * {@link ng.directive:ngModelOptions `ngModelOptions`} for more.
+ *
+ * The following example shows how to use `ngModel` with a getter/setter:
+ *
+ * @example
+ * <example name="ngModel-getter-setter" module="getterSetterExample">
+     <file name="index.html">
+       <div ng-controller="ExampleController">
+         <form name="userForm">
+           <label>Name:
+             <input type="text" name="userName"
+                    ng-model="user.name"
+                    ng-model-options="{ getterSetter: true }" />
+           </label>
+         </form>
+         <pre>user.name = <span ng-bind="user.name()"></span></pre>
+       </div>
+     </file>
+     <file name="app.js">
+       angular.module('getterSetterExample', [])
+         .controller('ExampleController', ['$scope', function($scope) {
+           var _name = 'Brian';
+           $scope.user = {
+             name: function(newName) {
+              // Note that newName can be undefined for two reasons:
+              // 1. Because it is called as a getter and thus called with no arguments
+              // 2. Because the property should actually be set to undefined. This happens e.g. if the
+              //    input is invalid
+              return arguments.length ? (_name = newName) : _name;
+             }
+           };
+         }]);
+     </file>
+ * </example>
+ */
+var ngModelDirective = ['$rootScope', function($rootScope) {
+  return {
+    restrict: 'A',
+    require: ['ngModel', '^?form', '^?ngModelOptions'],
+    controller: NgModelController,
+    // Prelink needs to run before any input directive
+    // so that we can set the NgModelOptions in NgModelController
+    // before anyone else uses it.
+    priority: 1,
+    compile: function ngModelCompile(element) {
+      // Setup initial state of the control
+      element.addClass(PRISTINE_CLASS).addClass(UNTOUCHED_CLASS).addClass(VALID_CLASS);
+
+      return {
+        pre: function ngModelPreLink(scope, element, attr, ctrls) {
+          var modelCtrl = ctrls[0],
+              formCtrl = ctrls[1] || modelCtrl.$$parentForm;
+
+          modelCtrl.$$setOptions(ctrls[2] && ctrls[2].$options);
+
+          // notify others, especially parent forms
+          formCtrl.$addControl(modelCtrl);
+
+          attr.$observe('name', function(newValue) {
+            if (modelCtrl.$name !== newValue) {
+              modelCtrl.$$parentForm.$$renameControl(modelCtrl, newValue);
+            }
+          });
+
+          scope.$on('$destroy', function() {
+            modelCtrl.$$parentForm.$removeControl(modelCtrl);
+          });
+        },
+        post: function ngModelPostLink(scope, element, attr, ctrls) {
+          var modelCtrl = ctrls[0];
+          if (modelCtrl.$options && modelCtrl.$options.updateOn) {
+            element.on(modelCtrl.$options.updateOn, function(ev) {
+              modelCtrl.$$debounceViewValueCommit(ev && ev.type);
+            });
+          }
+
+          element.on('blur', function(ev) {
+            if (modelCtrl.$touched) return;
+
+            if ($rootScope.$$phase) {
+              scope.$evalAsync(modelCtrl.$setTouched);
+            } else {
+              scope.$apply(modelCtrl.$setTouched);
+            }
+          });
+        }
+      };
+    }
+  };
+}];
+
+var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/;
+
+/**
+ * @ngdoc directive
+ * @name ngModelOptions
+ *
+ * @description
+ * Allows tuning how model updates are done. Using `ngModelOptions` you can specify a custom list of
+ * events that will trigger a model update and/or a debouncing delay so that the actual update only
+ * takes place when a timer expires; this timer will be reset after another change takes place.
+ *
+ * Given the nature of `ngModelOptions`, the value displayed inside input fields in the view might
+ * be different from the value in the actual model. This means that if you update the model you
+ * should also invoke {@link ngModel.NgModelController `$rollbackViewValue`} on the relevant input field in
+ * order to make sure it is synchronized with the model and that any debounced action is canceled.
+ *
+ * The easiest way to reference the control's {@link ngModel.NgModelController `$rollbackViewValue`}
+ * method is by making sure the input is placed inside a form that has a `name` attribute. This is
+ * important because `form` controllers are published to the related scope under the name in their
+ * `name` attribute.
+ *
+ * Any pending changes will take place immediately when an enclosing form is submitted via the
+ * `submit` event. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit`
+ * to have access to the updated model.
+ *
+ * `ngModelOptions` has an effect on the element it's declared on and its descendants.
+ *
+ * @param {Object} ngModelOptions options to apply to the current model. Valid keys are:
+ *   - `updateOn`: string specifying which event should the input be bound to. You can set several
+ *     events using an space delimited list. There is a special event called `default` that
+ *     matches the default events belonging of the control.
+ *   - `debounce`: integer value which contains the debounce model update value in milliseconds. A
+ *     value of 0 triggers an immediate update. If an object is supplied instead, you can specify a
+ *     custom value for each event. For example:
+ *     `ng-model-options="{ updateOn: 'default blur', debounce: { 'default': 500, 'blur': 0 } }"`
+ *   - `allowInvalid`: boolean value which indicates that the model can be set with values that did
+ *     not validate correctly instead of the default behavior of setting the model to undefined.
+ *   - `getterSetter`: boolean value which determines whether or not to treat functions bound to
+       `ngModel` as getters/setters.
+ *   - `timezone`: Defines the timezone to be used to read/write the `Date` instance in the model for
+ *     `<input type="date">`, `<input type="time">`, ... . It understands UTC/GMT and the
+ *     continental US time zone abbreviations, but for general use, use a time zone offset, for
+ *     example, `'+0430'` (4 hours, 30 minutes east of the Greenwich meridian)
+ *     If not specified, the timezone of the browser will be used.
+ *
+ * @example
+
+  The following example shows how to override immediate updates. Changes on the inputs within the
+  form will update the model only when the control loses focus (blur event). If `escape` key is
+  pressed while the input field is focused, the value is reset to the value in the current model.
+
+  <example name="ngModelOptions-directive-blur" module="optionsExample">
+    <file name="index.html">
+      <div ng-controller="ExampleController">
+        <form name="userForm">
+          <label>Name:
+            <input type="text" name="userName"
+                   ng-model="user.name"
+                   ng-model-options="{ updateOn: 'blur' }"
+                   ng-keyup="cancel($event)" />
+          </label><br />
+          <label>Other data:
+            <input type="text" ng-model="user.data" />
+          </label><br />
+        </form>
+        <pre>user.name = <span ng-bind="user.name"></span></pre>
+        <pre>user.data = <span ng-bind="user.data"></span></pre>
+      </div>
+    </file>
+    <file name="app.js">
+      angular.module('optionsExample', [])
+        .controller('ExampleController', ['$scope', function($scope) {
+          $scope.user = { name: 'John', data: '' };
+
+          $scope.cancel = function(e) {
+            if (e.keyCode == 27) {
+              $scope.userForm.userName.$rollbackViewValue();
+            }
+          };
+        }]);
+    </file>
+    <file name="protractor.js" type="protractor">
+      var model = element(by.binding('user.name'));
+      var input = element(by.model('user.name'));
+      var other = element(by.model('user.data'));
+
+      it('should allow custom events', function() {
+        input.sendKeys(' Doe');
+        input.click();
+        expect(model.getText()).toEqual('John');
+        other.click();
+        expect(model.getText()).toEqual('John Doe');
+      });
+
+      it('should $rollbackViewValue when model changes', function() {
+        input.sendKeys(' Doe');
+        expect(input.getAttribute('value')).toEqual('John Doe');
+        input.sendKeys(protractor.Key.ESCAPE);
+        expect(input.getAttribute('value')).toEqual('John');
+        other.click();
+        expect(model.getText()).toEqual('John');
+      });
+    </file>
+  </example>
+
+  This one shows how to debounce model changes. Model will be updated only 1 sec after last change.
+  If the `Clear` button is pressed, any debounced action is canceled and the value becomes empty.
+
+  <example name="ngModelOptions-directive-debounce" module="optionsExample">
+    <file name="index.html">
+      <div ng-controller="ExampleController">
+        <form name="userForm">
+          <label>Name:
+            <input type="text" name="userName"
+                   ng-model="user.name"
+                   ng-model-options="{ debounce: 1000 }" />
+          </label>
+          <button ng-click="userForm.userName.$rollbackViewValue(); user.name=''">Clear</button>
+          <br />
+        </form>
+        <pre>user.name = <span ng-bind="user.name"></span></pre>
+      </div>
+    </file>
+    <file name="app.js">
+      angular.module('optionsExample', [])
+        .controller('ExampleController', ['$scope', function($scope) {
+          $scope.user = { name: 'Igor' };
+        }]);
+    </file>
+  </example>
+
+  This one shows how to bind to getter/setters:
+
+  <example name="ngModelOptions-directive-getter-setter" module="getterSetterExample">
+    <file name="index.html">
+      <div ng-controller="ExampleController">
+        <form name="userForm">
+          <label>Name:
+            <input type="text" name="userName"
+                   ng-model="user.name"
+                   ng-model-options="{ getterSetter: true }" />
+          </label>
+        </form>
+        <pre>user.name = <span ng-bind="user.name()"></span></pre>
+      </div>
+    </file>
+    <file name="app.js">
+      angular.module('getterSetterExample', [])
+        .controller('ExampleController', ['$scope', function($scope) {
+          var _name = 'Brian';
+          $scope.user = {
+            name: function(newName) {
+              // Note that newName can be undefined for two reasons:
+              // 1. Because it is called as a getter and thus called with no arguments
+              // 2. Because the property should actually be set to undefined. This happens e.g. if the
+              //    input is invalid
+              return arguments.length ? (_name = newName) : _name;
+            }
+          };
+        }]);
+    </file>
+  </example>
+ */
+var ngModelOptionsDirective = function() {
+  return {
+    restrict: 'A',
+    controller: ['$scope', '$attrs', function($scope, $attrs) {
+      var that = this;
+      this.$options = copy($scope.$eval($attrs.ngModelOptions));
+      // Allow adding/overriding bound events
+      if (isDefined(this.$options.updateOn)) {
+        this.$options.updateOnDefault = false;
+        // extract "default" pseudo-event from list of events that can trigger a model update
+        this.$options.updateOn = trim(this.$options.updateOn.replace(DEFAULT_REGEXP, function() {
+          that.$options.updateOnDefault = true;
+          return ' ';
+        }));
+      } else {
+        this.$options.updateOnDefault = true;
+      }
+    }]
+  };
+};
+
+
+
+// helper methods
+function addSetValidityMethod(context) {
+  var ctrl = context.ctrl,
+      $element = context.$element,
+      classCache = {},
+      set = context.set,
+      unset = context.unset,
+      $animate = context.$animate;
+
+  classCache[INVALID_CLASS] = !(classCache[VALID_CLASS] = $element.hasClass(VALID_CLASS));
+
+  ctrl.$setValidity = setValidity;
+
+  function setValidity(validationErrorKey, state, controller) {
+    if (isUndefined(state)) {
+      createAndSet('$pending', validationErrorKey, controller);
+    } else {
+      unsetAndCleanup('$pending', validationErrorKey, controller);
+    }
+    if (!isBoolean(state)) {
+      unset(ctrl.$error, validationErrorKey, controller);
+      unset(ctrl.$$success, validationErrorKey, controller);
+    } else {
+      if (state) {
+        unset(ctrl.$error, validationErrorKey, controller);
+        set(ctrl.$$success, validationErrorKey, controller);
+      } else {
+        set(ctrl.$error, validationErrorKey, controller);
+        unset(ctrl.$$success, validationErrorKey, controller);
+      }
+    }
+    if (ctrl.$pending) {
+      cachedToggleClass(PENDING_CLASS, true);
+      ctrl.$valid = ctrl.$invalid = undefined;
+      toggleValidationCss('', null);
+    } else {
+      cachedToggleClass(PENDING_CLASS, false);
+      ctrl.$valid = isObjectEmpty(ctrl.$error);
+      ctrl.$invalid = !ctrl.$valid;
+      toggleValidationCss('', ctrl.$valid);
+    }
+
+    // re-read the state as the set/unset methods could have
+    // combined state in ctrl.$error[validationError] (used for forms),
+    // where setting/unsetting only increments/decrements the value,
+    // and does not replace it.
+    var combinedState;
+    if (ctrl.$pending && ctrl.$pending[validationErrorKey]) {
+      combinedState = undefined;
+    } else if (ctrl.$error[validationErrorKey]) {
+      combinedState = false;
+    } else if (ctrl.$$success[validationErrorKey]) {
+      combinedState = true;
+    } else {
+      combinedState = null;
+    }
+
+    toggleValidationCss(validationErrorKey, combinedState);
+    ctrl.$$parentForm.$setValidity(validationErrorKey, combinedState, ctrl);
+  }
+
+  function createAndSet(name, value, controller) {
+    if (!ctrl[name]) {
+      ctrl[name] = {};
+    }
+    set(ctrl[name], value, controller);
+  }
+
+  function unsetAndCleanup(name, value, controller) {
+    if (ctrl[name]) {
+      unset(ctrl[name], value, controller);
+    }
+    if (isObjectEmpty(ctrl[name])) {
+      ctrl[name] = undefined;
+    }
+  }
+
+  function cachedToggleClass(className, switchValue) {
+    if (switchValue && !classCache[className]) {
+      $animate.addClass($element, className);
+      classCache[className] = true;
+    } else if (!switchValue && classCache[className]) {
+      $animate.removeClass($element, className);
+      classCache[className] = false;
+    }
+  }
+
+  function toggleValidationCss(validationErrorKey, isValid) {
+    validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : '';
+
+    cachedToggleClass(VALID_CLASS + validationErrorKey, isValid === true);
+    cachedToggleClass(INVALID_CLASS + validationErrorKey, isValid === false);
+  }
+}
+
+function isObjectEmpty(obj) {
+  if (obj) {
+    for (var prop in obj) {
+      if (obj.hasOwnProperty(prop)) {
+        return false;
+      }
+    }
+  }
+  return true;
+}
+
+/**
+ * @ngdoc directive
+ * @name ngNonBindable
+ * @restrict AC
+ * @priority 1000
+ *
+ * @description
+ * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current
+ * DOM element. This is useful if the element contains what appears to be Angular directives and
+ * bindings but which should be ignored by Angular. This could be the case if you have a site that
+ * displays snippets of code, for instance.
+ *
+ * @element ANY
+ *
+ * @example
+ * In this example there are two locations where a simple interpolation binding (`{{}}`) is present,
+ * but the one wrapped in `ngNonBindable` is left alone.
+ *
+ * @example
+    <example>
+      <file name="index.html">
+        <div>Normal: {{1 + 2}}</div>
+        <div ng-non-bindable>Ignored: {{1 + 2}}</div>
+      </file>
+      <file name="protractor.js" type="protractor">
+       it('should check ng-non-bindable', function() {
+         expect(element(by.binding('1 + 2')).getText()).toContain('3');
+         expect(element.all(by.css('div')).last().getText()).toMatch(/1 \+ 2/);
+       });
+      </file>
+    </example>
+ */
+var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 });
+
+/* global jqLiteRemove */
+
+var ngOptionsMinErr = minErr('ngOptions');
+
+/**
+ * @ngdoc directive
+ * @name ngOptions
+ * @restrict A
+ *
+ * @description
+ *
+ * The `ngOptions` attribute can be used to dynamically generate a list of `<option>`
+ * elements for the `<select>` element using the array or object obtained by evaluating the
+ * `ngOptions` comprehension expression.
+ *
+ * In many cases, `ngRepeat` can be used on `<option>` elements instead of `ngOptions` to achieve a
+ * similar result. However, `ngOptions` provides some benefits such as reducing memory and
+ * increasing speed by not creating a new scope for each repeated instance, as well as providing
+ * more flexibility in how the `<select>`'s model is assigned via the `select` **`as`** part of the
+ * comprehension expression. `ngOptions` should be used when the `<select>` model needs to be bound
+ *  to a non-string value. This is because an option element can only be bound to string values at
+ * present.
+ *
+ * When an item in the `<select>` menu is selected, the array element or object property
+ * represented by the selected option will be bound to the model identified by the `ngModel`
+ * directive.
+ *
+ * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can
+ * be nested into the `<select>` element. This element will then represent the `null` or "not selected"
+ * option. See example below for demonstration.
+ *
+ * ## Complex Models (objects or collections)
+ *
+ * By default, `ngModel` watches the model by reference, not value. This is important to know when
+ * binding the select to a model that is an object or a collection.
+ *
+ * One issue occurs if you want to preselect an option. For example, if you set
+ * the model to an object that is equal to an object in your collection, `ngOptions` won't be able to set the selection,
+ * because the objects are not identical. So by default, you should always reference the item in your collection
+ * for preselections, e.g.: `$scope.selected = $scope.collection[3]`.
+ *
+ * Another solution is to use a `track by` clause, because then `ngOptions` will track the identity
+ * of the item not by reference, but by the result of the `track by` expression. For example, if your
+ * collection items have an id property, you would `track by item.id`.
+ *
+ * A different issue with objects or collections is that ngModel won't detect if an object property or
+ * a collection item changes. For that reason, `ngOptions` additionally watches the model using
+ * `$watchCollection`, when the expression contains a `track by` clause or the the select has the `multiple` attribute.
+ * This allows ngOptions to trigger a re-rendering of the options even if the actual object/collection
+ * has not changed identity, but only a property on the object or an item in the collection changes.
+ *
+ * Note that `$watchCollection` does a shallow comparison of the properties of the object (or the items in the collection
+ * if the model is an array). This means that changing a property deeper than the first level inside the
+ * object/collection will not trigger a re-rendering.
+ *
+ * ## `select` **`as`**
+ *
+ * Using `select` **`as`** will bind the result of the `select` expression to the model, but
+ * the value of the `<select>` and `<option>` html elements will be either the index (for array data sources)
+ * or property name (for object data sources) of the value within the collection. If a **`track by`** expression
+ * is used, the result of that expression will be set as the value of the `option` and `select` elements.
+ *
+ *
+ * ### `select` **`as`** and **`track by`**
+ *
+ * <div class="alert alert-warning">
+ * Be careful when using `select` **`as`** and **`track by`** in the same expression.
+ * </div>
+ *
+ * Given this array of items on the $scope:
+ *
+ * ```js
+ * $scope.items = [{
+ *   id: 1,
+ *   label: 'aLabel',
+ *   subItem: { name: 'aSubItem' }
+ * }, {
+ *   id: 2,
+ *   label: 'bLabel',
+ *   subItem: { name: 'bSubItem' }
+ * }];
+ * ```
+ *
+ * This will work:
+ *
+ * ```html
+ * <select ng-options="item as item.label for item in items track by item.id" ng-model="selected"></select>
+ * ```
+ * ```js
+ * $scope.selected = $scope.items[0];
+ * ```
+ *
+ * but this will not work:
+ *
+ * ```html
+ * <select ng-options="item.subItem as item.label for item in items track by item.id" ng-model="selected"></select>
+ * ```
+ * ```js
+ * $scope.selected = $scope.items[0].subItem;
+ * ```
+ *
+ * In both examples, the **`track by`** expression is applied successfully to each `item` in the
+ * `items` array. Because the selected option has been set programmatically in the controller, the
+ * **`track by`** expression is also applied to the `ngModel` value. In the first example, the
+ * `ngModel` value is `items[0]` and the **`track by`** expression evaluates to `items[0].id` with
+ * no issue. In the second example, the `ngModel` value is `items[0].subItem` and the **`track by`**
+ * expression evaluates to `items[0].subItem.id` (which is undefined). As a result, the model value
+ * is not matched against any `<option>` and the `<select>` appears as having no selected value.
+ *
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} required The control is considered valid only if value is entered.
+ * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to
+ *    the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of
+ *    `required` when you want to data-bind to the `required` attribute.
+ * @param {comprehension_expression=} ngOptions in one of the following forms:
+ *
+ *   * for array data sources:
+ *     * `label` **`for`** `value` **`in`** `array`
+ *     * `select` **`as`** `label` **`for`** `value` **`in`** `array`
+ *     * `label` **`group by`** `group` **`for`** `value` **`in`** `array`
+ *     * `label` **`disable when`** `disable` **`for`** `value` **`in`** `array`
+ *     * `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr`
+ *     * `label` **`disable when`** `disable` **`for`** `value` **`in`** `array` **`track by`** `trackexpr`
+ *     * `label` **`for`** `value` **`in`** `array` | orderBy:`orderexpr` **`track by`** `trackexpr`
+ *        (for including a filter with `track by`)
+ *   * for object data sources:
+ *     * `label` **`for (`**`key` **`,`** `value`**`) in`** `object`
+ *     * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object`
+ *     * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object`
+ *     * `label` **`disable when`** `disable` **`for (`**`key`**`,`** `value`**`) in`** `object`
+ *     * `select` **`as`** `label` **`group by`** `group`
+ *         **`for` `(`**`key`**`,`** `value`**`) in`** `object`
+ *     * `select` **`as`** `label` **`disable when`** `disable`
+ *         **`for` `(`**`key`**`,`** `value`**`) in`** `object`
+ *
+ * Where:
+ *
+ *   * `array` / `object`: an expression which evaluates to an array / object to iterate over.
+ *   * `value`: local variable which will refer to each item in the `array` or each property value
+ *      of `object` during iteration.
+ *   * `key`: local variable which will refer to a property name in `object` during iteration.
+ *   * `label`: The result of this expression will be the label for `<option>` element. The
+ *     `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`).
+ *   * `select`: The result of this expression will be bound to the model of the parent `<select>`
+ *      element. If not specified, `select` expression will default to `value`.
+ *   * `group`: The result of this expression will be used to group options using the `<optgroup>`
+ *      DOM element.
+ *   * `disable`: The result of this expression will be used to disable the rendered `<option>`
+ *      element. Return `true` to disable.
+ *   * `trackexpr`: Used when working with an array of objects. The result of this expression will be
+ *      used to identify the objects in the array. The `trackexpr` will most likely refer to the
+ *     `value` variable (e.g. `value.propertyName`). With this the selection is preserved
+ *      even when the options are recreated (e.g. reloaded from the server).
+ *
+ * @example
+    <example module="selectExample">
+      <file name="index.html">
+        <script>
+        angular.module('selectExample', [])
+          .controller('ExampleController', ['$scope', function($scope) {
+            $scope.colors = [
+              {name:'black', shade:'dark'},
+              {name:'white', shade:'light', notAnOption: true},
+              {name:'red', shade:'dark'},
+              {name:'blue', shade:'dark', notAnOption: true},
+              {name:'yellow', shade:'light', notAnOption: false}
+            ];
+            $scope.myColor = $scope.colors[2]; // red
+          }]);
+        </script>
+        <div ng-controller="ExampleController">
+          <ul>
+            <li ng-repeat="color in colors">
+              <label>Name: <input ng-model="color.name"></label>
+              <label><input type="checkbox" ng-model="color.notAnOption"> Disabled?</label>
+              <button ng-click="colors.splice($index, 1)" aria-label="Remove">X</button>
+            </li>
+            <li>
+              <button ng-click="colors.push({})">add</button>
+            </li>
+          </ul>
+          <hr/>
+          <label>Color (null not allowed):
+            <select ng-model="myColor" ng-options="color.name for color in colors"></select>
+          </label><br/>
+          <label>Color (null allowed):
+          <span  class="nullable">
+            <select ng-model="myColor" ng-options="color.name for color in colors">
+              <option value="">-- choose color --</option>
+            </select>
+          </span></label><br/>
+
+          <label>Color grouped by shade:
+            <select ng-model="myColor" ng-options="color.name group by color.shade for color in colors">
+            </select>
+          </label><br/>
+
+          <label>Color grouped by shade, with some disabled:
+            <select ng-model="myColor"
+                  ng-options="color.name group by color.shade disable when color.notAnOption for color in colors">
+            </select>
+          </label><br/>
+
+
+
+          Select <button ng-click="myColor = { name:'not in list', shade: 'other' }">bogus</button>.
+          <br/>
+          <hr/>
+          Currently selected: {{ {selected_color:myColor} }}
+          <div style="border:solid 1px black; height:20px"
+               ng-style="{'background-color':myColor.name}">
+          </div>
+        </div>
+      </file>
+      <file name="protractor.js" type="protractor">
+         it('should check ng-options', function() {
+           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('red');
+           element.all(by.model('myColor')).first().click();
+           element.all(by.css('select[ng-model="myColor"] option')).first().click();
+           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('black');
+           element(by.css('.nullable select[ng-model="myColor"]')).click();
+           element.all(by.css('.nullable select[ng-model="myColor"] option')).first().click();
+           expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('null');
+         });
+      </file>
+    </example>
+ */
+
+// jshint maxlen: false
+//                     //00001111111111000000000002222222222000000000000000000000333333333300000000000000000000000004444444444400000000000005555555555555550000000006666666666666660000000777777777777777000000000000000888888888800000000000000000009999999999
+var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/;
+                        // 1: value expression (valueFn)
+                        // 2: label expression (displayFn)
+                        // 3: group by expression (groupByFn)
+                        // 4: disable when expression (disableWhenFn)
+                        // 5: array item variable name
+                        // 6: object item key variable name
+                        // 7: object item value variable name
+                        // 8: collection expression
+                        // 9: track by expression
+// jshint maxlen: 100
+
+
+var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
+
+  function parseOptionsExpression(optionsExp, selectElement, scope) {
+
+    var match = optionsExp.match(NG_OPTIONS_REGEXP);
+    if (!(match)) {
+      throw ngOptionsMinErr('iexp',
+        "Expected expression in form of " +
+        "'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'" +
+        " but got '{0}'. Element: {1}",
+        optionsExp, startingTag(selectElement));
+    }
+
+    // Extract the parts from the ngOptions expression
+
+    // The variable name for the value of the item in the collection
+    var valueName = match[5] || match[7];
+    // The variable name for the key of the item in the collection
+    var keyName = match[6];
+
+    // An expression that generates the viewValue for an option if there is a label expression
+    var selectAs = / as /.test(match[0]) && match[1];
+    // An expression that is used to track the id of each object in the options collection
+    var trackBy = match[9];
+    // An expression that generates the viewValue for an option if there is no label expression
+    var valueFn = $parse(match[2] ? match[1] : valueName);
+    var selectAsFn = selectAs && $parse(selectAs);
+    var viewValueFn = selectAsFn || valueFn;
+    var trackByFn = trackBy && $parse(trackBy);
+
+    // Get the value by which we are going to track the option
+    // if we have a trackFn then use that (passing scope and locals)
+    // otherwise just hash the given viewValue
+    var getTrackByValueFn = trackBy ?
+                              function(value, locals) { return trackByFn(scope, locals); } :
+                              function getHashOfValue(value) { return hashKey(value); };
+    var getTrackByValue = function(value, key) {
+      return getTrackByValueFn(value, getLocals(value, key));
+    };
+
+    var displayFn = $parse(match[2] || match[1]);
+    var groupByFn = $parse(match[3] || '');
+    var disableWhenFn = $parse(match[4] || '');
+    var valuesFn = $parse(match[8]);
+
+    var locals = {};
+    var getLocals = keyName ? function(value, key) {
+      locals[keyName] = key;
+      locals[valueName] = value;
+      return locals;
+    } : function(value) {
+      locals[valueName] = value;
+      return locals;
+    };
+
+
+    function Option(selectValue, viewValue, label, group, disabled) {
+      this.selectValue = selectValue;
+      this.viewValue = viewValue;
+      this.label = label;
+      this.group = group;
+      this.disabled = disabled;
+    }
+
+    function getOptionValuesKeys(optionValues) {
+      var optionValuesKeys;
+
+      if (!keyName && isArrayLike(optionValues)) {
+        optionValuesKeys = optionValues;
+      } else {
+        // if object, extract keys, in enumeration order, unsorted
+        optionValuesKeys = [];
+        for (var itemKey in optionValues) {
+          if (optionValues.hasOwnProperty(itemKey) && itemKey.charAt(0) !== '$') {
+            optionValuesKeys.push(itemKey);
+          }
+        }
+      }
+      return optionValuesKeys;
+    }
+
+    return {
+      trackBy: trackBy,
+      getTrackByValue: getTrackByValue,
+      getWatchables: $parse(valuesFn, function(optionValues) {
+        // Create a collection of things that we would like to watch (watchedArray)
+        // so that they can all be watched using a single $watchCollection
+        // that only runs the handler once if anything changes
+        var watchedArray = [];
+        optionValues = optionValues || [];
+
+        var optionValuesKeys = getOptionValuesKeys(optionValues);
+        var optionValuesLength = optionValuesKeys.length;
+        for (var index = 0; index < optionValuesLength; index++) {
+          var key = (optionValues === optionValuesKeys) ? index : optionValuesKeys[index];
+          var value = optionValues[key];
+
+          var locals = getLocals(optionValues[key], key);
+          var selectValue = getTrackByValueFn(optionValues[key], locals);
+          watchedArray.push(selectValue);
+
+          // Only need to watch the displayFn if there is a specific label expression
+          if (match[2] || match[1]) {
+            var label = displayFn(scope, locals);
+            watchedArray.push(label);
+          }
+
+          // Only need to watch the disableWhenFn if there is a specific disable expression
+          if (match[4]) {
+            var disableWhen = disableWhenFn(scope, locals);
+            watchedArray.push(disableWhen);
+          }
+        }
+        return watchedArray;
+      }),
+
+      getOptions: function() {
+
+        var optionItems = [];
+        var selectValueMap = {};
+
+        // The option values were already computed in the `getWatchables` fn,
+        // which must have been called to trigger `getOptions`
+        var optionValues = valuesFn(scope) || [];
+        var optionValuesKeys = getOptionValuesKeys(optionValues);
+        var optionValuesLength = optionValuesKeys.length;
+
+        for (var index = 0; index < optionValuesLength; index++) {
+          var key = (optionValues === optionValuesKeys) ? index : optionValuesKeys[index];
+          var value = optionValues[key];
+          var locals = getLocals(value, key);
+          var viewValue = viewValueFn(scope, locals);
+          var selectValue = getTrackByValueFn(viewValue, locals);
+          var label = displayFn(scope, locals);
+          var group = groupByFn(scope, locals);
+          var disabled = disableWhenFn(scope, locals);
+          var optionItem = new Option(selectValue, viewValue, label, group, disabled);
+
+          optionItems.push(optionItem);
+          selectValueMap[selectValue] = optionItem;
+        }
+
+        return {
+          items: optionItems,
+          selectValueMap: selectValueMap,
+          getOptionFromViewValue: function(value) {
+            return selectValueMap[getTrackByValue(value)];
+          },
+          getViewValueFromOption: function(option) {
+            // If the viewValue could be an object that may be mutated by the application,
+            // we need to make a copy and not return the reference to the value on the option.
+            return trackBy ? angular.copy(option.viewValue) : option.viewValue;
+          }
+        };
+      }
+    };
+  }
+
+
+  // we can't just jqLite('<option>') since jqLite is not smart enough
+  // to create it in <select> and IE barfs otherwise.
+  var optionTemplate = document.createElement('option'),
+      optGroupTemplate = document.createElement('optgroup');
+
+
+    function ngOptionsPostLink(scope, selectElement, attr, ctrls) {
+
+      // if ngModel is not defined, we don't need to do anything
+      var ngModelCtrl = ctrls[1];
+      if (!ngModelCtrl) return;
+
+      var selectCtrl = ctrls[0];
+      var multiple = attr.multiple;
+
+      // The emptyOption allows the application developer to provide their own custom "empty"
+      // option when the viewValue does not match any of the option values.
+      var emptyOption;
+      for (var i = 0, children = selectElement.children(), ii = children.length; i < ii; i++) {
+        if (children[i].value === '') {
+          emptyOption = children.eq(i);
+          break;
+        }
+      }
+
+      var providedEmptyOption = !!emptyOption;
+
+      var unknownOption = jqLite(optionTemplate.cloneNode(false));
+      unknownOption.val('?');
+
+      var options;
+      var ngOptions = parseOptionsExpression(attr.ngOptions, selectElement, scope);
+
+
+      var renderEmptyOption = function() {
+        if (!providedEmptyOption) {
+          selectElement.prepend(emptyOption);
+        }
+        selectElement.val('');
+        emptyOption.prop('selected', true); // needed for IE
+        emptyOption.attr('selected', true);
+      };
+
+      var removeEmptyOption = function() {
+        if (!providedEmptyOption) {
+          emptyOption.remove();
+        }
+      };
+
+
+      var renderUnknownOption = function() {
+        selectElement.prepend(unknownOption);
+        selectElement.val('?');
+        unknownOption.prop('selected', true); // needed for IE
+        unknownOption.attr('selected', true);
+      };
+
+      var removeUnknownOption = function() {
+        unknownOption.remove();
+      };
+
+      // Update the controller methods for multiple selectable options
+      if (!multiple) {
+
+        selectCtrl.writeValue = function writeNgOptionsValue(value) {
+          var option = options.getOptionFromViewValue(value);
+
+          if (option && !option.disabled) {
+            if (selectElement[0].value !== option.selectValue) {
+              removeUnknownOption();
+              removeEmptyOption();
+
+              selectElement[0].value = option.selectValue;
+              option.element.selected = true;
+              option.element.setAttribute('selected', 'selected');
+            }
+          } else {
+            if (value === null || providedEmptyOption) {
+              removeUnknownOption();
+              renderEmptyOption();
+            } else {
+              removeEmptyOption();
+              renderUnknownOption();
+            }
+          }
+        };
+
+        selectCtrl.readValue = function readNgOptionsValue() {
+
+          var selectedOption = options.selectValueMap[selectElement.val()];
+
+          if (selectedOption && !selectedOption.disabled) {
+            removeEmptyOption();
+            removeUnknownOption();
+            return options.getViewValueFromOption(selectedOption);
+          }
+          return null;
+        };
+
+        // If we are using `track by` then we must watch the tracked value on the model
+        // since ngModel only watches for object identity change
+        if (ngOptions.trackBy) {
+          scope.$watch(
+            function() { return ngOptions.getTrackByValue(ngModelCtrl.$viewValue); },
+            function() { ngModelCtrl.$render(); }
+          );
+        }
+
+      } else {
+
+        ngModelCtrl.$isEmpty = function(value) {
+          return !value || value.length === 0;
+        };
+
+
+        selectCtrl.writeValue = function writeNgOptionsMultiple(value) {
+          options.items.forEach(function(option) {
+            option.element.selected = false;
+          });
+
+          if (value) {
+            value.forEach(function(item) {
+              var option = options.getOptionFromViewValue(item);
+              if (option && !option.disabled) option.element.selected = true;
+            });
+          }
+        };
+
+
+        selectCtrl.readValue = function readNgOptionsMultiple() {
+          var selectedValues = selectElement.val() || [],
+              selections = [];
+
+          forEach(selectedValues, function(value) {
+            var option = options.selectValueMap[value];
+            if (option && !option.disabled) selections.push(options.getViewValueFromOption(option));
+          });
+
+          return selections;
+        };
+
+        // If we are using `track by` then we must watch these tracked values on the model
+        // since ngModel only watches for object identity change
+        if (ngOptions.trackBy) {
+
+          scope.$watchCollection(function() {
+            if (isArray(ngModelCtrl.$viewValue)) {
+              return ngModelCtrl.$viewValue.map(function(value) {
+                return ngOptions.getTrackByValue(value);
+              });
+            }
+          }, function() {
+            ngModelCtrl.$render();
+          });
+
+        }
+      }
+
+
+      if (providedEmptyOption) {
+
+        // we need to remove it before calling selectElement.empty() because otherwise IE will
+        // remove the label from the element. wtf?
+        emptyOption.remove();
+
+        // compile the element since there might be bindings in it
+        $compile(emptyOption)(scope);
+
+        // remove the class, which is added automatically because we recompile the element and it
+        // becomes the compilation root
+        emptyOption.removeClass('ng-scope');
+      } else {
+        emptyOption = jqLite(optionTemplate.cloneNode(false));
+      }
+
+      // We need to do this here to ensure that the options object is defined
+      // when we first hit it in writeNgOptionsValue
+      updateOptions();
+
+      // We will re-render the option elements if the option values or labels change
+      scope.$watchCollection(ngOptions.getWatchables, updateOptions);
+
+      // ------------------------------------------------------------------ //
+
+
+      function updateOptionElement(option, element) {
+        option.element = element;
+        element.disabled = option.disabled;
+        // NOTE: The label must be set before the value, otherwise IE10/11/EDGE create unresponsive
+        // selects in certain circumstances when multiple selects are next to each other and display
+        // the option list in listbox style, i.e. the select is [multiple], or specifies a [size].
+        // See https://github.com/angular/angular.js/issues/11314 for more info.
+        // This is unfortunately untestable with unit / e2e tests
+        if (option.label !== element.label) {
+          element.label = option.label;
+          element.textContent = option.label;
+        }
+        if (option.value !== element.value) element.value = option.selectValue;
+      }
+
+      function addOrReuseElement(parent, current, type, templateElement) {
+        var element;
+        // Check whether we can reuse the next element
+        if (current && lowercase(current.nodeName) === type) {
+          // The next element is the right type so reuse it
+          element = current;
+        } else {
+          // The next element is not the right type so create a new one
+          element = templateElement.cloneNode(false);
+          if (!current) {
+            // There are no more elements so just append it to the select
+            parent.appendChild(element);
+          } else {
+            // The next element is not a group so insert the new one
+            parent.insertBefore(element, current);
+          }
+        }
+        return element;
+      }
+
+
+      function removeExcessElements(current) {
+        var next;
+        while (current) {
+          next = current.nextSibling;
+          jqLiteRemove(current);
+          current = next;
+        }
+      }
+
+
+      function skipEmptyAndUnknownOptions(current) {
+        var emptyOption_ = emptyOption && emptyOption[0];
+        var unknownOption_ = unknownOption && unknownOption[0];
+
+        // We cannot rely on the extracted empty option being the same as the compiled empty option,
+        // because the compiled empty option might have been replaced by a comment because
+        // it had an "element" transclusion directive on it (such as ngIf)
+        if (emptyOption_ || unknownOption_) {
+          while (current &&
+                (current === emptyOption_ ||
+                current === unknownOption_ ||
+                current.nodeType === NODE_TYPE_COMMENT ||
+                current.value === '')) {
+            current = current.nextSibling;
+          }
+        }
+        return current;
+      }
+
+
+      function updateOptions() {
+
+        var previousValue = options && selectCtrl.readValue();
+
+        options = ngOptions.getOptions();
+
+        var groupMap = {};
+        var currentElement = selectElement[0].firstChild;
+
+        // Ensure that the empty option is always there if it was explicitly provided
+        if (providedEmptyOption) {
+          selectElement.prepend(emptyOption);
+        }
+
+        currentElement = skipEmptyAndUnknownOptions(currentElement);
+
+        options.items.forEach(function updateOption(option) {
+          var group;
+          var groupElement;
+          var optionElement;
+
+          if (option.group) {
+
+            // This option is to live in a group
+            // See if we have already created this group
+            group = groupMap[option.group];
+
+            if (!group) {
+
+              // We have not already created this group
+              groupElement = addOrReuseElement(selectElement[0],
+                                               currentElement,
+                                               'optgroup',
+                                               optGroupTemplate);
+              // Move to the next element
+              currentElement = groupElement.nextSibling;
+
+              // Update the label on the group element
+              groupElement.label = option.group;
+
+              // Store it for use later
+              group = groupMap[option.group] = {
+                groupElement: groupElement,
+                currentOptionElement: groupElement.firstChild
+              };
+
+            }
+
+            // So now we have a group for this option we add the option to the group
+            optionElement = addOrReuseElement(group.groupElement,
+                                              group.currentOptionElement,
+                                              'option',
+                                              optionTemplate);
+            updateOptionElement(option, optionElement);
+            // Move to the next element
+            group.currentOptionElement = optionElement.nextSibling;
+
+          } else {
+
+            // This option is not in a group
+            optionElement = addOrReuseElement(selectElement[0],
+                                              currentElement,
+                                              'option',
+                                              optionTemplate);
+            updateOptionElement(option, optionElement);
+            // Move to the next element
+            currentElement = optionElement.nextSibling;
+          }
+        });
+
+
+        // Now remove all excess options and group
+        Object.keys(groupMap).forEach(function(key) {
+          removeExcessElements(groupMap[key].currentOptionElement);
+        });
+        removeExcessElements(currentElement);
+
+        ngModelCtrl.$render();
+
+        // Check to see if the value has changed due to the update to the options
+        if (!ngModelCtrl.$isEmpty(previousValue)) {
+          var nextValue = selectCtrl.readValue();
+          if (ngOptions.trackBy ? !equals(previousValue, nextValue) : previousValue !== nextValue) {
+            ngModelCtrl.$setViewValue(nextValue);
+            ngModelCtrl.$render();
+          }
+        }
+
+      }
+  }
+
+  return {
+    restrict: 'A',
+    terminal: true,
+    require: ['select', '?ngModel'],
+    link: {
+      pre: function ngOptionsPreLink(scope, selectElement, attr, ctrls) {
+        // Deactivate the SelectController.register method to prevent
+        // option directives from accidentally registering themselves
+        // (and unwanted $destroy handlers etc.)
+        ctrls[0].registerOption = noop;
+      },
+      post: ngOptionsPostLink
+    }
+  };
+}];
+
+/**
+ * @ngdoc directive
+ * @name ngPluralize
+ * @restrict EA
+ *
+ * @description
+ * `ngPluralize` is a directive that displays messages according to en-US localization rules.
+ * These rules are bundled with angular.js, but can be overridden
+ * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive
+ * by specifying the mappings between
+ * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)
+ * and the strings to be displayed.
+ *
+ * # Plural categories and explicit number rules
+ * There are two
+ * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html)
+ * in Angular's default en-US locale: "one" and "other".
+ *
+ * While a plural category may match many numbers (for example, in en-US locale, "other" can match
+ * any number that is not 1), an explicit number rule can only match one number. For example, the
+ * explicit number rule for "3" matches the number 3. There are examples of plural categories
+ * and explicit number rules throughout the rest of this documentation.
+ *
+ * # Configuring ngPluralize
+ * You configure ngPluralize by providing 2 attributes: `count` and `when`.
+ * You can also provide an optional attribute, `offset`.
+ *
+ * The value of the `count` attribute can be either a string or an {@link guide/expression
+ * Angular expression}; these are evaluated on the current scope for its bound value.
+ *
+ * The `when` attribute specifies the mappings between plural categories and the actual
+ * string to be displayed. The value of the attribute should be a JSON object.
+ *
+ * The following example shows how to configure ngPluralize:
+ *
+ * ```html
+ * <ng-pluralize count="personCount"
+                 when="{'0': 'Nobody is viewing.',
+ *                      'one': '1 person is viewing.',
+ *                      'other': '{} people are viewing.'}">
+ * </ng-pluralize>
+ *```
+ *
+ * In the example, `"0: Nobody is viewing."` is an explicit number rule. If you did not
+ * specify this rule, 0 would be matched to the "other" category and "0 people are viewing"
+ * would be shown instead of "Nobody is viewing". You can specify an explicit number rule for
+ * other numbers, for example 12, so that instead of showing "12 people are viewing", you can
+ * show "a dozen people are viewing".
+ *
+ * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted
+ * into pluralized strings. In the previous example, Angular will replace `{}` with
+ * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder
+ * for <span ng-non-bindable>{{numberExpression}}</span>.
+ *
+ * If no rule is defined for a category, then an empty string is displayed and a warning is generated.
+ * Note that some locales define more categories than `one` and `other`. For example, fr-fr defines `few` and `many`.
+ *
+ * # Configuring ngPluralize with offset
+ * The `offset` attribute allows further customization of pluralized text, which can result in
+ * a better user experience. For example, instead of the message "4 people are viewing this document",
+ * you might display "John, Kate and 2 others are viewing this document".
+ * The offset attribute allows you to offset a number by any desired value.
+ * Let's take a look at an example:
+ *
+ * ```html
+ * <ng-pluralize count="personCount" offset=2
+ *               when="{'0': 'Nobody is viewing.',
+ *                      '1': '{{person1}} is viewing.',
+ *                      '2': '{{person1}} and {{person2}} are viewing.',
+ *                      'one': '{{person1}}, {{person2}} and one other person are viewing.',
+ *                      'other': '{{person1}}, {{person2}} and {} other people are viewing.'}">
+ * </ng-pluralize>
+ * ```
+ *
+ * Notice that we are still using two plural categories(one, other), but we added
+ * three explicit number rules 0, 1 and 2.
+ * When one person, perhaps John, views the document, "John is viewing" will be shown.
+ * When three people view the document, no explicit number rule is found, so
+ * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category.
+ * In this case, plural category 'one' is matched and "John, Mary and one other person are viewing"
+ * is shown.
+ *
+ * Note that when you specify offsets, you must provide explicit number rules for
+ * numbers from 0 up to and including the offset. If you use an offset of 3, for example,
+ * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for
+ * plural categories "one" and "other".
+ *
+ * @param {string|expression} count The variable to be bound to.
+ * @param {string} when The mapping between plural category to its corresponding strings.
+ * @param {number=} offset Offset to deduct from the total number.
+ *
+ * @example
+    <example module="pluralizeExample">
+      <file name="index.html">
+        <script>
+          angular.module('pluralizeExample', [])
+            .controller('ExampleController', ['$scope', function($scope) {
+              $scope.person1 = 'Igor';
+              $scope.person2 = 'Misko';
+              $scope.personCount = 1;
+            }]);
+        </script>
+        <div ng-controller="ExampleController">
+          <label>Person 1:<input type="text" ng-model="person1" value="Igor" /></label><br/>
+          <label>Person 2:<input type="text" ng-model="person2" value="Misko" /></label><br/>
+          <label>Number of People:<input type="text" ng-model="personCount" value="1" /></label><br/>
+
+          <!--- Example with simple pluralization rules for en locale --->
+          Without Offset:
+          <ng-pluralize count="personCount"
+                        when="{'0': 'Nobody is viewing.',
+                               'one': '1 person is viewing.',
+                               'other': '{} people are viewing.'}">
+          </ng-pluralize><br>
+
+          <!--- Example with offset --->
+          With Offset(2):
+          <ng-pluralize count="personCount" offset=2
+                        when="{'0': 'Nobody is viewing.',
+                               '1': '{{person1}} is viewing.',
+                               '2': '{{person1}} and {{person2}} are viewing.',
+                               'one': '{{person1}}, {{person2}} and one other person are viewing.',
+                               'other': '{{person1}}, {{person2}} and {} other people are viewing.'}">
+          </ng-pluralize>
+        </div>
+      </file>
+      <file name="protractor.js" type="protractor">
+        it('should show correct pluralized string', function() {
+          var withoutOffset = element.all(by.css('ng-pluralize')).get(0);
+          var withOffset = element.all(by.css('ng-pluralize')).get(1);
+          var countInput = element(by.model('personCount'));
+
+          expect(withoutOffset.getText()).toEqual('1 person is viewing.');
+          expect(withOffset.getText()).toEqual('Igor is viewing.');
+
+          countInput.clear();
+          countInput.sendKeys('0');
+
+          expect(withoutOffset.getText()).toEqual('Nobody is viewing.');
+          expect(withOffset.getText()).toEqual('Nobody is viewing.');
+
+          countInput.clear();
+          countInput.sendKeys('2');
+
+          expect(withoutOffset.getText()).toEqual('2 people are viewing.');
+          expect(withOffset.getText()).toEqual('Igor and Misko are viewing.');
+
+          countInput.clear();
+          countInput.sendKeys('3');
+
+          expect(withoutOffset.getText()).toEqual('3 people are viewing.');
+          expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.');
+
+          countInput.clear();
+          countInput.sendKeys('4');
+
+          expect(withoutOffset.getText()).toEqual('4 people are viewing.');
+          expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.');
+        });
+        it('should show data-bound names', function() {
+          var withOffset = element.all(by.css('ng-pluralize')).get(1);
+          var personCount = element(by.model('personCount'));
+          var person1 = element(by.model('person1'));
+          var person2 = element(by.model('person2'));
+          personCount.clear();
+          personCount.sendKeys('4');
+          person1.clear();
+          person1.sendKeys('Di');
+          person2.clear();
+          person2.sendKeys('Vojta');
+          expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.');
+        });
+      </file>
+    </example>
+ */
+var ngPluralizeDirective = ['$locale', '$interpolate', '$log', function($locale, $interpolate, $log) {
+  var BRACE = /{}/g,
+      IS_WHEN = /^when(Minus)?(.+)$/;
+
+  return {
+    link: function(scope, element, attr) {
+      var numberExp = attr.count,
+          whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs
+          offset = attr.offset || 0,
+          whens = scope.$eval(whenExp) || {},
+          whensExpFns = {},
+          startSymbol = $interpolate.startSymbol(),
+          endSymbol = $interpolate.endSymbol(),
+          braceReplacement = startSymbol + numberExp + '-' + offset + endSymbol,
+          watchRemover = angular.noop,
+          lastCount;
+
+      forEach(attr, function(expression, attributeName) {
+        var tmpMatch = IS_WHEN.exec(attributeName);
+        if (tmpMatch) {
+          var whenKey = (tmpMatch[1] ? '-' : '') + lowercase(tmpMatch[2]);
+          whens[whenKey] = element.attr(attr.$attr[attributeName]);
+        }
+      });
+      forEach(whens, function(expression, key) {
+        whensExpFns[key] = $interpolate(expression.replace(BRACE, braceReplacement));
+
+      });
+
+      scope.$watch(numberExp, function ngPluralizeWatchAction(newVal) {
+        var count = parseFloat(newVal);
+        var countIsNaN = isNaN(count);
+
+        if (!countIsNaN && !(count in whens)) {
+          // If an explicit number rule such as 1, 2, 3... is defined, just use it.
+          // Otherwise, check it against pluralization rules in $locale service.
+          count = $locale.pluralCat(count - offset);
+        }
+
+        // If both `count` and `lastCount` are NaN, we don't need to re-register a watch.
+        // In JS `NaN !== NaN`, so we have to exlicitly check.
+        if ((count !== lastCount) && !(countIsNaN && isNumber(lastCount) && isNaN(lastCount))) {
+          watchRemover();
+          var whenExpFn = whensExpFns[count];
+          if (isUndefined(whenExpFn)) {
+            if (newVal != null) {
+              $log.debug("ngPluralize: no rule defined for '" + count + "' in " + whenExp);
+            }
+            watchRemover = noop;
+            updateElementText();
+          } else {
+            watchRemover = scope.$watch(whenExpFn, updateElementText);
+          }
+          lastCount = count;
+        }
+      });
+
+      function updateElementText(newText) {
+        element.text(newText || '');
+      }
+    }
+  };
+}];
+
+/**
+ * @ngdoc directive
+ * @name ngRepeat
+ * @multiElement
+ *
+ * @description
+ * The `ngRepeat` directive instantiates a template once per item from a collection. Each template
+ * instance gets its own scope, where the given loop variable is set to the current collection item,
+ * and `$index` is set to the item index or key.
+ *
+ * Special properties are exposed on the local scope of each template instance, including:
+ *
+ * | Variable  | Type            | Details                                                                     |
+ * |-----------|-----------------|-----------------------------------------------------------------------------|
+ * | `$index`  | {@type number}  | iterator offset of the repeated element (0..length-1)                       |
+ * | `$first`  | {@type boolean} | true if the repeated element is first in the iterator.                      |
+ * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. |
+ * | `$last`   | {@type boolean} | true if the repeated element is last in the iterator.                       |
+ * | `$even`   | {@type boolean} | true if the iterator position `$index` is even (otherwise false).           |
+ * | `$odd`    | {@type boolean} | true if the iterator position `$index` is odd (otherwise false).            |
+ *
+ * <div class="alert alert-info">
+ *   Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}.
+ *   This may be useful when, for instance, nesting ngRepeats.
+ * </div>
+ *
+ *
+ * # Iterating over object properties
+ *
+ * It is possible to get `ngRepeat` to iterate over the properties of an object using the following
+ * syntax:
+ *
+ * ```js
+ * <div ng-repeat="(key, value) in myObj"> ... </div>
+ * ```
+ *
+ * You need to be aware that the JavaScript specification does not define the order of keys
+ * returned for an object. (To mitigate this in Angular 1.3 the `ngRepeat` directive
+ * used to sort the keys alphabetically.)
+ *
+ * Version 1.4 removed the alphabetic sorting. We now rely on the order returned by the browser
+ * when running `for key in myObj`. It seems that browsers generally follow the strategy of providing
+ * keys in the order in which they were defined, although there are exceptions when keys are deleted
+ * and reinstated. See the [MDN page on `delete` for more info](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete#Cross-browser_notes).
+ *
+ * If this is not desired, the recommended workaround is to convert your object into an array
+ * that is sorted into the order that you prefer before providing it to `ngRepeat`.  You could
+ * do this with a filter such as [toArrayFilter](http://ngmodules.org/modules/angular-toArrayFilter)
+ * or implement a `$watch` on the object yourself.
+ *
+ *
+ * # Tracking and Duplicates
+ *
+ * `ngRepeat` uses {@link $rootScope.Scope#$watchCollection $watchCollection} to detect changes in
+ * the collection. When a change happens, ngRepeat then makes the corresponding changes to the DOM:
+ *
+ * * When an item is added, a new instance of the template is added to the DOM.
+ * * When an item is removed, its template instance is removed from the DOM.
+ * * When items are reordered, their respective templates are reordered in the DOM.
+ *
+ * To minimize creation of DOM elements, `ngRepeat` uses a function
+ * to "keep track" of all items in the collection and their corresponding DOM elements.
+ * For example, if an item is added to the collection, ngRepeat will know that all other items
+ * already have DOM elements, and will not re-render them.
+ *
+ * The default tracking function (which tracks items by their identity) does not allow
+ * duplicate items in arrays. This is because when there are duplicates, it is not possible
+ * to maintain a one-to-one mapping between collection items and DOM elements.
+ *
+ * If you do need to repeat duplicate items, you can substitute the default tracking behavior
+ * with your own using the `track by` expression.
+ *
+ * For example, you may track items by the index of each item in the collection, using the
+ * special scope property `$index`:
+ * ```html
+ *    <div ng-repeat="n in [42, 42, 43, 43] track by $index">
+ *      {{n}}
+ *    </div>
+ * ```
+ *
+ * You may also use arbitrary expressions in `track by`, including references to custom functions
+ * on the scope:
+ * ```html
+ *    <div ng-repeat="n in [42, 42, 43, 43] track by myTrackingFunction(n)">
+ *      {{n}}
+ *    </div>
+ * ```
+ *
+ * <div class="alert alert-success">
+ * If you are working with objects that have an identifier property, you should track
+ * by the identifier instead of the whole object. Should you reload your data later, `ngRepeat`
+ * will not have to rebuild the DOM elements for items it has already rendered, even if the
+ * JavaScript objects in the collection have been substituted for new ones. For large collections,
+ * this signifincantly improves rendering performance. If you don't have a unique identifier,
+ * `track by $index` can also provide a performance boost.
+ * </div>
+ * ```html
+ *    <div ng-repeat="model in collection track by model.id">
+ *      {{model.name}}
+ *    </div>
+ * ```
+ *
+ * When no `track by` expression is provided, it is equivalent to tracking by the built-in
+ * `$id` function, which tracks items by their identity:
+ * ```html
+ *    <div ng-repeat="obj in collection track by $id(obj)">
+ *      {{obj.prop}}
+ *    </div>
+ * ```
+ *
+ * <div class="alert alert-warning">
+ * **Note:** `track by` must always be the last expression:
+ * </div>
+ * ```
+ * <div ng-repeat="model in collection | orderBy: 'id' as filtered_result track by model.id">
+ *     {{model.name}}
+ * </div>
+ * ```
+ *
+ * # Special repeat start and end points
+ * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending
+ * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively.
+ * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on)
+ * up to and including the ending HTML tag where **ng-repeat-end** is placed.
+ *
+ * The example below makes use of this feature:
+ * ```html
+ *   <header ng-repeat-start="item in items">
+ *     Header {{ item }}
+ *   </header>
+ *   <div class="body">
+ *     Body {{ item }}
+ *   </div>
+ *   <footer ng-repeat-end>
+ *     Footer {{ item }}
+ *   </footer>
+ * ```
+ *
+ * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to:
+ * ```html
+ *   <header>
+ *     Header A
+ *   </header>
+ *   <div class="body">
+ *     Body A
+ *   </div>
+ *   <footer>
+ *     Footer A
+ *   </footer>
+ *   <header>
+ *     Header B
+ *   </header>
+ *   <div class="body">
+ *     Body B
+ *   </div>
+ *   <footer>
+ *     Footer B
+ *   </footer>
+ * ```
+ *
+ * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such
+ * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**).
+ *
+ * @animations
+ * **.enter** - when a new item is added to the list or when an item is revealed after a filter
+ *
+ * **.leave** - when an item is removed from the list or when an item is filtered out
+ *
+ * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered
+ *
+ * @element ANY
+ * @scope
+ * @priority 1000
+ * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These
+ *   formats are currently supported:
+ *
+ *   * `variable in expression` – where variable is the user defined loop variable and `expression`
+ *     is a scope expression giving the collection to enumerate.
+ *
+ *     For example: `album in artist.albums`.
+ *
+ *   * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers,
+ *     and `expression` is the scope expression giving the collection to enumerate.
+ *
+ *     For example: `(name, age) in {'adam':10, 'amalie':12}`.
+ *
+ *   * `variable in expression track by tracking_expression` – You can also provide an optional tracking expression
+ *     which can be used to associate the objects in the collection with the DOM elements. If no tracking expression
+ *     is specified, ng-repeat associates elements by identity. It is an error to have
+ *     more than one tracking expression value resolve to the same key. (This would mean that two distinct objects are
+ *     mapped to the same DOM element, which is not possible.)
+ *
+ *     Note that the tracking expression must come last, after any filters, and the alias expression.
+ *
+ *     For example: `item in items` is equivalent to `item in items track by $id(item)`. This implies that the DOM elements
+ *     will be associated by item identity in the array.
+ *
+ *     For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique
+ *     `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements
+ *     with the corresponding item in the array by identity. Moving the same object in array would move the DOM
+ *     element in the same way in the DOM.
+ *
+ *     For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this
+ *     case the object identity does not matter. Two objects are considered equivalent as long as their `id`
+ *     property is same.
+ *
+ *     For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter
+ *     to items in conjunction with a tracking expression.
+ *
+ *   * `variable in expression as alias_expression` – You can also provide an optional alias expression which will then store the
+ *     intermediate results of the repeater after the filters have been applied. Typically this is used to render a special message
+ *     when a filter is active on the repeater, but the filtered result set is empty.
+ *
+ *     For example: `item in items | filter:x as results` will store the fragment of the repeated items as `results`, but only after
+ *     the items have been processed through the filter.
+ *
+ *     Please note that `as [variable name] is not an operator but rather a part of ngRepeat micro-syntax so it can be used only at the end
+ *     (and not as operator, inside an expression).
+ *
+ *     For example: `item in items | filter : x | orderBy : order | limitTo : limit as results` .
+ *
+ * @example
+ * This example initializes the scope to a list of names and
+ * then uses `ngRepeat` to display every person:
+  <example module="ngAnimate" deps="angular-animate.js" animations="true">
+    <file name="index.html">
+      <div ng-init="friends = [
+        {name:'John', age:25, gender:'boy'},
+        {name:'Jessie', age:30, gender:'girl'},
+        {name:'Johanna', age:28, gender:'girl'},
+        {name:'Joy', age:15, gender:'girl'},
+        {name:'Mary', age:28, gender:'girl'},
+        {name:'Peter', age:95, gender:'boy'},
+        {name:'Sebastian', age:50, gender:'boy'},
+        {name:'Erika', age:27, gender:'girl'},
+        {name:'Patrick', age:40, gender:'boy'},
+        {name:'Samantha', age:60, gender:'girl'}
+      ]">
+        I have {{friends.length}} friends. They are:
+        <input type="search" ng-model="q" placeholder="filter friends..." aria-label="filter friends" />
+        <ul class="example-animate-container">
+          <li class="animate-repeat" ng-repeat="friend in friends | filter:q as results">
+            [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.
+          </li>
+          <li class="animate-repeat" ng-if="results.length == 0">
+            <strong>No results found...</strong>
+          </li>
+        </ul>
+      </div>
+    </file>
+    <file name="animations.css">
+      .example-animate-container {
+        background:white;
+        border:1px solid black;
+        list-style:none;
+        margin:0;
+        padding:0 10px;
+      }
+
+      .animate-repeat {
+        line-height:40px;
+        list-style:none;
+        box-sizing:border-box;
+      }
+
+      .animate-repeat.ng-move,
+      .animate-repeat.ng-enter,
+      .animate-repeat.ng-leave {
+        transition:all linear 0.5s;
+      }
+
+      .animate-repeat.ng-leave.ng-leave-active,
+      .animate-repeat.ng-move,
+      .animate-repeat.ng-enter {
+        opacity:0;
+        max-height:0;
+      }
+
+      .animate-repeat.ng-leave,
+      .animate-repeat.ng-move.ng-move-active,
+      .animate-repeat.ng-enter.ng-enter-active {
+        opacity:1;
+        max-height:40px;
+      }
+    </file>
+    <file name="protractor.js" type="protractor">
+      var friends = element.all(by.repeater('friend in friends'));
+
+      it('should render initial data set', function() {
+        expect(friends.count()).toBe(10);
+        expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.');
+        expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.');
+        expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.');
+        expect(element(by.binding('friends.length')).getText())
+            .toMatch("I have 10 friends. They are:");
+      });
+
+       it('should update repeater when filter predicate changes', function() {
+         expect(friends.count()).toBe(10);
+
+         element(by.model('q')).sendKeys('ma');
+
+         expect(friends.count()).toBe(2);
+         expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.');
+         expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.');
+       });
+      </file>
+    </example>
+ */
+var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
+  var NG_REMOVED = '$$NG_REMOVED';
+  var ngRepeatMinErr = minErr('ngRepeat');
+
+  var updateScope = function(scope, index, valueIdentifier, value, keyIdentifier, key, arrayLength) {
+    // TODO(perf): generate setters to shave off ~40ms or 1-1.5%
+    scope[valueIdentifier] = value;
+    if (keyIdentifier) scope[keyIdentifier] = key;
+    scope.$index = index;
+    scope.$first = (index === 0);
+    scope.$last = (index === (arrayLength - 1));
+    scope.$middle = !(scope.$first || scope.$last);
+    // jshint bitwise: false
+    scope.$odd = !(scope.$even = (index&1) === 0);
+    // jshint bitwise: true
+  };
+
+  var getBlockStart = function(block) {
+    return block.clone[0];
+  };
+
+  var getBlockEnd = function(block) {
+    return block.clone[block.clone.length - 1];
+  };
+
+
+  return {
+    restrict: 'A',
+    multiElement: true,
+    transclude: 'element',
+    priority: 1000,
+    terminal: true,
+    $$tlb: true,
+    compile: function ngRepeatCompile($element, $attr) {
+      var expression = $attr.ngRepeat;
+      var ngRepeatEndComment = document.createComment(' end ngRepeat: ' + expression + ' ');
+
+      var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
+
+      if (!match) {
+        throw ngRepeatMinErr('iexp', "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.",
+            expression);
+      }
+
+      var lhs = match[1];
+      var rhs = match[2];
+      var aliasAs = match[3];
+      var trackByExp = match[4];
+
+      match = lhs.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);
+
+      if (!match) {
+        throw ngRepeatMinErr('iidexp', "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.",
+            lhs);
+      }
+      var valueIdentifier = match[3] || match[1];
+      var keyIdentifier = match[2];
+
+      if (aliasAs && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(aliasAs) ||
+          /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(aliasAs))) {
+        throw ngRepeatMinErr('badident', "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.",
+          aliasAs);
+      }
+
+      var trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn;
+      var hashFnLocals = {$id: hashKey};
+
+      if (trackByExp) {
+        trackByExpGetter = $parse(trackByExp);
+      } else {
+        trackByIdArrayFn = function(key, value) {
+          return hashKey(value);
+        };
+        trackByIdObjFn = function(key) {
+          return key;
+        };
+      }
+
+      return function ngRepeatLink($scope, $element, $attr, ctrl, $transclude) {
+
+        if (trackByExpGetter) {
+          trackByIdExpFn = function(key, value, index) {
+            // assign key, value, and $index to the locals so that they can be used in hash functions
+            if (keyIdentifier) hashFnLocals[keyIdentifier] = key;
+            hashFnLocals[valueIdentifier] = value;
+            hashFnLocals.$index = index;
+            return trackByExpGetter($scope, hashFnLocals);
+          };
+        }
+
+        // Store a list of elements from previous run. This is a hash where key is the item from the
+        // iterator, and the value is objects with following properties.
+        //   - scope: bound scope
+        //   - element: previous element.
+        //   - index: position
+        //
+        // We are using no-proto object so that we don't need to guard against inherited props via
+        // hasOwnProperty.
+        var lastBlockMap = createMap();
+
+        //watch props
+        $scope.$watchCollection(rhs, function ngRepeatAction(collection) {
+          var index, length,
+              previousNode = $element[0],     // node that cloned nodes should be inserted after
+                                              // initialized to the comment node anchor
+              nextNode,
+              // Same as lastBlockMap but it has the current state. It will become the
+              // lastBlockMap on the next iteration.
+              nextBlockMap = createMap(),
+              collectionLength,
+              key, value, // key/value of iteration
+              trackById,
+              trackByIdFn,
+              collectionKeys,
+              block,       // last object information {scope, element, id}
+              nextBlockOrder,
+              elementsToRemove;
+
+          if (aliasAs) {
+            $scope[aliasAs] = collection;
+          }
+
+          if (isArrayLike(collection)) {
+            collectionKeys = collection;
+            trackByIdFn = trackByIdExpFn || trackByIdArrayFn;
+          } else {
+            trackByIdFn = trackByIdExpFn || trackByIdObjFn;
+            // if object, extract keys, in enumeration order, unsorted
+            collectionKeys = [];
+            for (var itemKey in collection) {
+              if (hasOwnProperty.call(collection, itemKey) && itemKey.charAt(0) !== '$') {
+                collectionKeys.push(itemKey);
+              }
+            }
+          }
+
+          collectionLength = collectionKeys.length;
+          nextBlockOrder = new Array(collectionLength);
+
+          // locate existing items
+          for (index = 0; index < collectionLength; index++) {
+            key = (collection === collectionKeys) ? index : collectionKeys[index];
+            value = collection[key];
+            trackById = trackByIdFn(key, value, index);
+            if (lastBlockMap[trackById]) {
+              // found previously seen block
+              block = lastBlockMap[trackById];
+              delete lastBlockMap[trackById];
+              nextBlockMap[trackById] = block;
+              nextBlockOrder[index] = block;
+            } else if (nextBlockMap[trackById]) {
+              // if collision detected. restore lastBlockMap and throw an error
+              forEach(nextBlockOrder, function(block) {
+                if (block && block.scope) lastBlockMap[block.id] = block;
+              });
+              throw ngRepeatMinErr('dupes',
+                  "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}",
+                  expression, trackById, value);
+            } else {
+              // new never before seen block
+              nextBlockOrder[index] = {id: trackById, scope: undefined, clone: undefined};
+              nextBlockMap[trackById] = true;
+            }
+          }
+
+          // remove leftover items
+          for (var blockKey in lastBlockMap) {
+            block = lastBlockMap[blockKey];
+            elementsToRemove = getBlockNodes(block.clone);
+            $animate.leave(elementsToRemove);
+            if (elementsToRemove[0].parentNode) {
+              // if the element was not removed yet because of pending animation, mark it as deleted
+              // so that we can ignore it later
+              for (index = 0, length = elementsToRemove.length; index < length; index++) {
+                elementsToRemove[index][NG_REMOVED] = true;
+              }
+            }
+            block.scope.$destroy();
+          }
+
+          // we are not using forEach for perf reasons (trying to avoid #call)
+          for (index = 0; index < collectionLength; index++) {
+            key = (collection === collectionKeys) ? index : collectionKeys[index];
+            value = collection[key];
+            block = nextBlockOrder[index];
+
+            if (block.scope) {
+              // if we have already seen this object, then we need to reuse the
+              // associated scope/element
+
+              nextNode = previousNode;
+
+              // skip nodes that are already pending removal via leave animation
+              do {
+                nextNode = nextNode.nextSibling;
+              } while (nextNode && nextNode[NG_REMOVED]);
+
+              if (getBlockStart(block) != nextNode) {
+                // existing item which got moved
+                $animate.move(getBlockNodes(block.clone), null, jqLite(previousNode));
+              }
+              previousNode = getBlockEnd(block);
+              updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength);
+            } else {
+              // new item which we don't know about
+              $transclude(function ngRepeatTransclude(clone, scope) {
+                block.scope = scope;
+                // http://jsperf.com/clone-vs-createcomment
+                var endNode = ngRepeatEndComment.cloneNode(false);
+                clone[clone.length++] = endNode;
+
+                // TODO(perf): support naked previousNode in `enter` to avoid creation of jqLite wrapper?
+                $animate.enter(clone, null, jqLite(previousNode));
+                previousNode = endNode;
+                // Note: We only need the first/last node of the cloned nodes.
+                // However, we need to keep the reference to the jqlite wrapper as it might be changed later
+                // by a directive with templateUrl when its template arrives.
+                block.clone = clone;
+                nextBlockMap[block.id] = block;
+                updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength);
+              });
+            }
+          }
+          lastBlockMap = nextBlockMap;
+        });
+      };
+    }
+  };
+}];
+
+var NG_HIDE_CLASS = 'ng-hide';
+var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate';
+/**
+ * @ngdoc directive
+ * @name ngShow
+ * @multiElement
+ *
+ * @description
+ * The `ngShow` directive shows or hides the given HTML element based on the expression
+ * provided to the `ngShow` attribute. The element is shown or hidden by removing or adding
+ * the `.ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined
+ * in AngularJS and sets the display style to none (using an !important flag).
+ * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
+ *
+ * ```html
+ * <!-- when $scope.myValue is truthy (element is visible) -->
+ * <div ng-show="myValue"></div>
+ *
+ * <!-- when $scope.myValue is falsy (element is hidden) -->
+ * <div ng-show="myValue" class="ng-hide"></div>
+ * ```
+ *
+ * When the `ngShow` expression evaluates to a falsy value then the `.ng-hide` CSS class is added to the class
+ * attribute on the element causing it to become hidden. When truthy, the `.ng-hide` CSS class is removed
+ * from the element causing the element not to appear hidden.
+ *
+ * ## Why is !important used?
+ *
+ * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector
+ * can be easily overridden by heavier selectors. For example, something as simple
+ * as changing the display style on a HTML list item would make hidden elements appear visible.
+ * This also becomes a bigger issue when dealing with CSS frameworks.
+ *
+ * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector
+ * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the
+ * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.
+ *
+ * ### Overriding `.ng-hide`
+ *
+ * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change
+ * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`
+ * class CSS. Note that the selector that needs to be used is actually `.ng-hide:not(.ng-hide-animate)` to cope
+ * with extra animation classes that can be added.
+ *
+ * ```css
+ * .ng-hide:not(.ng-hide-animate) {
+ *   /&#42; this is just another form of hiding an element &#42;/
+ *   display: block!important;
+ *   position: absolute;
+ *   top: -9999px;
+ *   left: -9999px;
+ * }
+ * ```
+ *
+ * By default you don't need to override in CSS anything and the animations will work around the display style.
+ *
+ * ## A note about animations with `ngShow`
+ *
+ * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression
+ * is true and false. This system works like the animation system present with ngClass except that
+ * you must also include the !important flag to override the display property
+ * so that you can perform an animation when the element is hidden during the time of the animation.
+ *
+ * ```css
+ * //
+ * //a working example can be found at the bottom of this page
+ * //
+ * .my-element.ng-hide-add, .my-element.ng-hide-remove {
+ *   /&#42; this is required as of 1.3x to properly
+ *      apply all styling in a show/hide animation &#42;/
+ *   transition: 0s linear all;
+ * }
+ *
+ * .my-element.ng-hide-add-active,
+ * .my-element.ng-hide-remove-active {
+ *   /&#42; the transition is defined in the active class &#42;/
+ *   transition: 1s linear all;
+ * }
+ *
+ * .my-element.ng-hide-add { ... }
+ * .my-element.ng-hide-add.ng-hide-add-active { ... }
+ * .my-element.ng-hide-remove { ... }
+ * .my-element.ng-hide-remove.ng-hide-remove-active { ... }
+ * ```
+ *
+ * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display
+ * property to block during animation states--ngAnimate will handle the style toggling automatically for you.
+ *
+ * @animations
+ * addClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a truthy value and the just before contents are set to visible
+ * removeClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a non truthy value and just before the contents are set to hidden
+ *
+ * @element ANY
+ * @param {expression} ngShow If the {@link guide/expression expression} is truthy
+ *     then the element is shown or hidden respectively.
+ *
+ * @example
+  <example module="ngAnimate" deps="angular-animate.js" animations="true">
+    <file name="index.html">
+      Click me: <input type="checkbox" ng-model="checked" aria-label="Toggle ngHide"><br/>
+      <div>
+        Show:
+        <div class="check-element animate-show" ng-show="checked">
+          <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked.
+        </div>
+      </div>
+      <div>
+        Hide:
+        <div class="check-element animate-show" ng-hide="checked">
+          <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked.
+        </div>
+      </div>
+    </file>
+    <file name="glyphicons.css">
+      @import url(../../components/bootstrap-3.1.1/css/bootstrap.css);
+    </file>
+    <file name="animations.css">
+      .animate-show {
+        line-height: 20px;
+        opacity: 1;
+        padding: 10px;
+        border: 1px solid black;
+        background: white;
+      }
+
+      .animate-show.ng-hide-add, .animate-show.ng-hide-remove {
+        transition: all linear 0.5s;
+      }
+
+      .animate-show.ng-hide {
+        line-height: 0;
+        opacity: 0;
+        padding: 0 10px;
+      }
+
+      .check-element {
+        padding: 10px;
+        border: 1px solid black;
+        background: white;
+      }
+    </file>
+    <file name="protractor.js" type="protractor">
+      var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));
+      var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));
+
+      it('should check ng-show / ng-hide', function() {
+        expect(thumbsUp.isDisplayed()).toBeFalsy();
+        expect(thumbsDown.isDisplayed()).toBeTruthy();
+
+        element(by.model('checked')).click();
+
+        expect(thumbsUp.isDisplayed()).toBeTruthy();
+        expect(thumbsDown.isDisplayed()).toBeFalsy();
+      });
+    </file>
+  </example>
+ */
+var ngShowDirective = ['$animate', function($animate) {
+  return {
+    restrict: 'A',
+    multiElement: true,
+    link: function(scope, element, attr) {
+      scope.$watch(attr.ngShow, function ngShowWatchAction(value) {
+        // we're adding a temporary, animation-specific class for ng-hide since this way
+        // we can control when the element is actually displayed on screen without having
+        // to have a global/greedy CSS selector that breaks when other animations are run.
+        // Read: https://github.com/angular/angular.js/issues/9103#issuecomment-58335845
+        $animate[value ? 'removeClass' : 'addClass'](element, NG_HIDE_CLASS, {
+          tempClasses: NG_HIDE_IN_PROGRESS_CLASS
+        });
+      });
+    }
+  };
+}];
+
+
+/**
+ * @ngdoc directive
+ * @name ngHide
+ * @multiElement
+ *
+ * @description
+ * The `ngHide` directive shows or hides the given HTML element based on the expression
+ * provided to the `ngHide` attribute. The element is shown or hidden by removing or adding
+ * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined
+ * in AngularJS and sets the display style to none (using an !important flag).
+ * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
+ *
+ * ```html
+ * <!-- when $scope.myValue is truthy (element is hidden) -->
+ * <div ng-hide="myValue" class="ng-hide"></div>
+ *
+ * <!-- when $scope.myValue is falsy (element is visible) -->
+ * <div ng-hide="myValue"></div>
+ * ```
+ *
+ * When the `ngHide` expression evaluates to a truthy value then the `.ng-hide` CSS class is added to the class
+ * attribute on the element causing it to become hidden. When falsy, the `.ng-hide` CSS class is removed
+ * from the element causing the element not to appear hidden.
+ *
+ * ## Why is !important used?
+ *
+ * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector
+ * can be easily overridden by heavier selectors. For example, something as simple
+ * as changing the display style on a HTML list item would make hidden elements appear visible.
+ * This also becomes a bigger issue when dealing with CSS frameworks.
+ *
+ * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector
+ * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the
+ * styling to change how to hide an element then it is just a matter of using !important in their own CSS code.
+ *
+ * ### Overriding `.ng-hide`
+ *
+ * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change
+ * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide`
+ * class in CSS:
+ *
+ * ```css
+ * .ng-hide {
+ *   /&#42; this is just another form of hiding an element &#42;/
+ *   display: block!important;
+ *   position: absolute;
+ *   top: -9999px;
+ *   left: -9999px;
+ * }
+ * ```
+ *
+ * By default you don't need to override in CSS anything and the animations will work around the display style.
+ *
+ * ## A note about animations with `ngHide`
+ *
+ * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression
+ * is true and false. This system works like the animation system present with ngClass, except that the `.ng-hide`
+ * CSS class is added and removed for you instead of your own CSS class.
+ *
+ * ```css
+ * //
+ * //a working example can be found at the bottom of this page
+ * //
+ * .my-element.ng-hide-add, .my-element.ng-hide-remove {
+ *   transition: 0.5s linear all;
+ * }
+ *
+ * .my-element.ng-hide-add { ... }
+ * .my-element.ng-hide-add.ng-hide-add-active { ... }
+ * .my-element.ng-hide-remove { ... }
+ * .my-element.ng-hide-remove.ng-hide-remove-active { ... }
+ * ```
+ *
+ * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display
+ * property to block during animation states--ngAnimate will handle the style toggling automatically for you.
+ *
+ * @animations
+ * removeClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a truthy value and just before the contents are set to hidden
+ * addClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a non truthy value and just before the contents are set to visible
+ *
+ * @element ANY
+ * @param {expression} ngHide If the {@link guide/expression expression} is truthy then
+ *     the element is shown or hidden respectively.
+ *
+ * @example
+  <example module="ngAnimate" deps="angular-animate.js" animations="true">
+    <file name="index.html">
+      Click me: <input type="checkbox" ng-model="checked" aria-label="Toggle ngShow"><br/>
+      <div>
+        Show:
+        <div class="check-element animate-hide" ng-show="checked">
+          <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked.
+        </div>
+      </div>
+      <div>
+        Hide:
+        <div class="check-element animate-hide" ng-hide="checked">
+          <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked.
+        </div>
+      </div>
+    </file>
+    <file name="glyphicons.css">
+      @import url(../../components/bootstrap-3.1.1/css/bootstrap.css);
+    </file>
+    <file name="animations.css">
+      .animate-hide {
+        transition: all linear 0.5s;
+        line-height: 20px;
+        opacity: 1;
+        padding: 10px;
+        border: 1px solid black;
+        background: white;
+      }
+
+      .animate-hide.ng-hide {
+        line-height: 0;
+        opacity: 0;
+        padding: 0 10px;
+      }
+
+      .check-element {
+        padding: 10px;
+        border: 1px solid black;
+        background: white;
+      }
+    </file>
+    <file name="protractor.js" type="protractor">
+      var thumbsUp = element(by.css('span.glyphicon-thumbs-up'));
+      var thumbsDown = element(by.css('span.glyphicon-thumbs-down'));
+
+      it('should check ng-show / ng-hide', function() {
+        expect(thumbsUp.isDisplayed()).toBeFalsy();
+        expect(thumbsDown.isDisplayed()).toBeTruthy();
+
+        element(by.model('checked')).click();
+
+        expect(thumbsUp.isDisplayed()).toBeTruthy();
+        expect(thumbsDown.isDisplayed()).toBeFalsy();
+      });
+    </file>
+  </example>
+ */
+var ngHideDirective = ['$animate', function($animate) {
+  return {
+    restrict: 'A',
+    multiElement: true,
+    link: function(scope, element, attr) {
+      scope.$watch(attr.ngHide, function ngHideWatchAction(value) {
+        // The comment inside of the ngShowDirective explains why we add and
+        // remove a temporary class for the show/hide animation
+        $animate[value ? 'addClass' : 'removeClass'](element,NG_HIDE_CLASS, {
+          tempClasses: NG_HIDE_IN_PROGRESS_CLASS
+        });
+      });
+    }
+  };
+}];
+
+/**
+ * @ngdoc directive
+ * @name ngStyle
+ * @restrict AC
+ *
+ * @description
+ * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally.
+ *
+ * @element ANY
+ * @param {expression} ngStyle
+ *
+ * {@link guide/expression Expression} which evals to an
+ * object whose keys are CSS style names and values are corresponding values for those CSS
+ * keys.
+ *
+ * Since some CSS style names are not valid keys for an object, they must be quoted.
+ * See the 'background-color' style in the example below.
+ *
+ * @example
+   <example>
+     <file name="index.html">
+        <input type="button" value="set color" ng-click="myStyle={color:'red'}">
+        <input type="button" value="set background" ng-click="myStyle={'background-color':'blue'}">
+        <input type="button" value="clear" ng-click="myStyle={}">
+        <br/>
+        <span ng-style="myStyle">Sample Text</span>
+        <pre>myStyle={{myStyle}}</pre>
+     </file>
+     <file name="style.css">
+       span {
+         color: black;
+       }
+     </file>
+     <file name="protractor.js" type="protractor">
+       var colorSpan = element(by.css('span'));
+
+       it('should check ng-style', function() {
+         expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');
+         element(by.css('input[value=\'set color\']')).click();
+         expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)');
+         element(by.css('input[value=clear]')).click();
+         expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)');
+       });
+     </file>
+   </example>
+ */
+var ngStyleDirective = ngDirective(function(scope, element, attr) {
+  scope.$watch(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) {
+    if (oldStyles && (newStyles !== oldStyles)) {
+      forEach(oldStyles, function(val, style) { element.css(style, '');});
+    }
+    if (newStyles) element.css(newStyles);
+  }, true);
+});
+
+/**
+ * @ngdoc directive
+ * @name ngSwitch
+ * @restrict EA
+ *
+ * @description
+ * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression.
+ * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location
+ * as specified in the template.
+ *
+ * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it
+ * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element
+ * matches the value obtained from the evaluated expression. In other words, you define a container element
+ * (where you place the directive), place an expression on the **`on="..."` attribute**
+ * (or the **`ng-switch="..."` attribute**), define any inner elements inside of the directive and place
+ * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on
+ * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default
+ * attribute is displayed.
+ *
+ * <div class="alert alert-info">
+ * Be aware that the attribute values to match against cannot be expressions. They are interpreted
+ * as literal string values to match against.
+ * For example, **`ng-switch-when="someVal"`** will match against the string `"someVal"` not against the
+ * value of the expression `$scope.someVal`.
+ * </div>
+
+ * @animations
+ * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container
+ * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM
+ *
+ * @usage
+ *
+ * ```
+ * <ANY ng-switch="expression">
+ *   <ANY ng-switch-when="matchValue1">...</ANY>
+ *   <ANY ng-switch-when="matchValue2">...</ANY>
+ *   <ANY ng-switch-default>...</ANY>
+ * </ANY>
+ * ```
+ *
+ *
+ * @scope
+ * @priority 1200
+ * @param {*} ngSwitch|on expression to match against <code>ng-switch-when</code>.
+ * On child elements add:
+ *
+ * * `ngSwitchWhen`: the case statement to match against. If match then this
+ *   case will be displayed. If the same match appears multiple times, all the
+ *   elements will be displayed.
+ * * `ngSwitchDefault`: the default case when no other case match. If there
+ *   are multiple default cases, all of them will be displayed when no other
+ *   case match.
+ *
+ *
+ * @example
+  <example module="switchExample" deps="angular-animate.js" animations="true">
+    <file name="index.html">
+      <div ng-controller="ExampleController">
+        <select ng-model="selection" ng-options="item for item in items">
+        </select>
+        <code>selection={{selection}}</code>
+        <hr/>
+        <div class="animate-switch-container"
+          ng-switch on="selection">
+            <div class="animate-switch" ng-switch-when="settings">Settings Div</div>
+            <div class="animate-switch" ng-switch-when="home">Home Span</div>
+            <div class="animate-switch" ng-switch-default>default</div>
+        </div>
+      </div>
+    </file>
+    <file name="script.js">
+      angular.module('switchExample', ['ngAnimate'])
+        .controller('ExampleController', ['$scope', function($scope) {
+          $scope.items = ['settings', 'home', 'other'];
+          $scope.selection = $scope.items[0];
+        }]);
+    </file>
+    <file name="animations.css">
+      .animate-switch-container {
+        position:relative;
+        background:white;
+        border:1px solid black;
+        height:40px;
+        overflow:hidden;
+      }
+
+      .animate-switch {
+        padding:10px;
+      }
+
+      .animate-switch.ng-animate {
+        transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
+
+        position:absolute;
+        top:0;
+        left:0;
+        right:0;
+        bottom:0;
+      }
+
+      .animate-switch.ng-leave.ng-leave-active,
+      .animate-switch.ng-enter {
+        top:-50px;
+      }
+      .animate-switch.ng-leave,
+      .animate-switch.ng-enter.ng-enter-active {
+        top:0;
+      }
+    </file>
+    <file name="protractor.js" type="protractor">
+      var switchElem = element(by.css('[ng-switch]'));
+      var select = element(by.model('selection'));
+
+      it('should start in settings', function() {
+        expect(switchElem.getText()).toMatch(/Settings Div/);
+      });
+      it('should change to home', function() {
+        select.all(by.css('option')).get(1).click();
+        expect(switchElem.getText()).toMatch(/Home Span/);
+      });
+      it('should select default', function() {
+        select.all(by.css('option')).get(2).click();
+        expect(switchElem.getText()).toMatch(/default/);
+      });
+    </file>
+  </example>
+ */
+var ngSwitchDirective = ['$animate', function($animate) {
+  return {
+    require: 'ngSwitch',
+
+    // asks for $scope to fool the BC controller module
+    controller: ['$scope', function ngSwitchController() {
+     this.cases = {};
+    }],
+    link: function(scope, element, attr, ngSwitchController) {
+      var watchExpr = attr.ngSwitch || attr.on,
+          selectedTranscludes = [],
+          selectedElements = [],
+          previousLeaveAnimations = [],
+          selectedScopes = [];
+
+      var spliceFactory = function(array, index) {
+          return function() { array.splice(index, 1); };
+      };
+
+      scope.$watch(watchExpr, function ngSwitchWatchAction(value) {
+        var i, ii;
+        for (i = 0, ii = previousLeaveAnimations.length; i < ii; ++i) {
+          $animate.cancel(previousLeaveAnimations[i]);
+        }
+        previousLeaveAnimations.length = 0;
+
+        for (i = 0, ii = selectedScopes.length; i < ii; ++i) {
+          var selected = getBlockNodes(selectedElements[i].clone);
+          selectedScopes[i].$destroy();
+          var promise = previousLeaveAnimations[i] = $animate.leave(selected);
+          promise.then(spliceFactory(previousLeaveAnimations, i));
+        }
+
+        selectedElements.length = 0;
+        selectedScopes.length = 0;
+
+        if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) {
+          forEach(selectedTranscludes, function(selectedTransclude) {
+            selectedTransclude.transclude(function(caseElement, selectedScope) {
+              selectedScopes.push(selectedScope);
+              var anchor = selectedTransclude.element;
+              caseElement[caseElement.length++] = document.createComment(' end ngSwitchWhen: ');
+              var block = { clone: caseElement };
+
+              selectedElements.push(block);
+              $animate.enter(caseElement, anchor.parent(), anchor);
+            });
+          });
+        }
+      });
+    }
+  };
+}];
+
+var ngSwitchWhenDirective = ngDirective({
+  transclude: 'element',
+  priority: 1200,
+  require: '^ngSwitch',
+  multiElement: true,
+  link: function(scope, element, attrs, ctrl, $transclude) {
+    ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []);
+    ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element });
+  }
+});
+
+var ngSwitchDefaultDirective = ngDirective({
+  transclude: 'element',
+  priority: 1200,
+  require: '^ngSwitch',
+  multiElement: true,
+  link: function(scope, element, attr, ctrl, $transclude) {
+    ctrl.cases['?'] = (ctrl.cases['?'] || []);
+    ctrl.cases['?'].push({ transclude: $transclude, element: element });
+   }
+});
+
+/**
+ * @ngdoc directive
+ * @name ngTransclude
+ * @restrict EAC
+ *
+ * @description
+ * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion.
+ *
+ * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted.
+ *
+ * @element ANY
+ *
+ * @example
+   <example module="transcludeExample">
+     <file name="index.html">
+       <script>
+         angular.module('transcludeExample', [])
+          .directive('pane', function(){
+             return {
+               restrict: 'E',
+               transclude: true,
+               scope: { title:'@' },
+               template: '<div style="border: 1px solid black;">' +
+                           '<div style="background-color: gray">{{title}}</div>' +
+                           '<ng-transclude></ng-transclude>' +
+                         '</div>'
+             };
+         })
+         .controller('ExampleController', ['$scope', function($scope) {
+           $scope.title = 'Lorem Ipsum';
+           $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';
+         }]);
+       </script>
+       <div ng-controller="ExampleController">
+         <input ng-model="title" aria-label="title"> <br/>
+         <textarea ng-model="text" aria-label="text"></textarea> <br/>
+         <pane title="{{title}}">{{text}}</pane>
+       </div>
+     </file>
+     <file name="protractor.js" type="protractor">
+        it('should have transcluded', function() {
+          var titleElement = element(by.model('title'));
+          titleElement.clear();
+          titleElement.sendKeys('TITLE');
+          var textElement = element(by.model('text'));
+          textElement.clear();
+          textElement.sendKeys('TEXT');
+          expect(element(by.binding('title')).getText()).toEqual('TITLE');
+          expect(element(by.binding('text')).getText()).toEqual('TEXT');
+        });
+     </file>
+   </example>
+ *
+ */
+var ngTranscludeDirective = ngDirective({
+  restrict: 'EAC',
+  link: function($scope, $element, $attrs, controller, $transclude) {
+    if (!$transclude) {
+      throw minErr('ngTransclude')('orphan',
+       'Illegal use of ngTransclude directive in the template! ' +
+       'No parent directive that requires a transclusion found. ' +
+       'Element: {0}',
+       startingTag($element));
+    }
+
+    $transclude(function(clone) {
+      $element.empty();
+      $element.append(clone);
+    });
+  }
+});
+
+/**
+ * @ngdoc directive
+ * @name script
+ * @restrict E
+ *
+ * @description
+ * Load the content of a `<script>` element into {@link ng.$templateCache `$templateCache`}, so that the
+ * template can be used by {@link ng.directive:ngInclude `ngInclude`},
+ * {@link ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the
+ * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be
+ * assigned through the element's `id`, which can then be used as a directive's `templateUrl`.
+ *
+ * @param {string} type Must be set to `'text/ng-template'`.
+ * @param {string} id Cache name of the template.
+ *
+ * @example
+  <example>
+    <file name="index.html">
+      <script type="text/ng-template" id="/tpl.html">
+        Content of the template.
+      </script>
+
+      <a ng-click="currentTpl='/tpl.html'" id="tpl-link">Load inlined template</a>
+      <div id="tpl-content" ng-include src="currentTpl"></div>
+    </file>
+    <file name="protractor.js" type="protractor">
+      it('should load template defined inside script tag', function() {
+        element(by.css('#tpl-link')).click();
+        expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/);
+      });
+    </file>
+  </example>
+ */
+var scriptDirective = ['$templateCache', function($templateCache) {
+  return {
+    restrict: 'E',
+    terminal: true,
+    compile: function(element, attr) {
+      if (attr.type == 'text/ng-template') {
+        var templateUrl = attr.id,
+            text = element[0].text;
+
+        $templateCache.put(templateUrl, text);
+      }
+    }
+  };
+}];
+
+var noopNgModelController = { $setViewValue: noop, $render: noop };
+
+function chromeHack(optionElement) {
+  // Workaround for https://code.google.com/p/chromium/issues/detail?id=381459
+  // Adding an <option selected="selected"> element to a <select required="required"> should
+  // automatically select the new element
+  if (optionElement[0].hasAttribute('selected')) {
+    optionElement[0].selected = true;
+  }
+}
+
+/**
+ * @ngdoc type
+ * @name  select.SelectController
+ * @description
+ * The controller for the `<select>` directive. This provides support for reading
+ * and writing the selected value(s) of the control and also coordinates dynamically
+ * added `<option>` elements, perhaps by an `ngRepeat` directive.
+ */
+var SelectController =
+        ['$element', '$scope', '$attrs', function($element, $scope, $attrs) {
+
+  var self = this,
+      optionsMap = new HashMap();
+
+  // If the ngModel doesn't get provided then provide a dummy noop version to prevent errors
+  self.ngModelCtrl = noopNgModelController;
+
+  // The "unknown" option is one that is prepended to the list if the viewValue
+  // does not match any of the options. When it is rendered the value of the unknown
+  // option is '? XXX ?' where XXX is the hashKey of the value that is not known.
+  //
+  // We can't just jqLite('<option>') since jqLite is not smart enough
+  // to create it in <select> and IE barfs otherwise.
+  self.unknownOption = jqLite(document.createElement('option'));
+  self.renderUnknownOption = function(val) {
+    var unknownVal = '? ' + hashKey(val) + ' ?';
+    self.unknownOption.val(unknownVal);
+    $element.prepend(self.unknownOption);
+    $element.val(unknownVal);
+  };
+
+  $scope.$on('$destroy', function() {
+    // disable unknown option so that we don't do work when the whole select is being destroyed
+    self.renderUnknownOption = noop;
+  });
+
+  self.removeUnknownOption = function() {
+    if (self.unknownOption.parent()) self.unknownOption.remove();
+  };
+
+
+  // Read the value of the select control, the implementation of this changes depending
+  // upon whether the select can have multiple values and whether ngOptions is at work.
+  self.readValue = function readSingleValue() {
+    self.removeUnknownOption();
+    return $element.val();
+  };
+
+
+  // Write the value to the select control, the implementation of this changes depending
+  // upon whether the select can have multiple values and whether ngOptions is at work.
+  self.writeValue = function writeSingleValue(value) {
+    if (self.hasOption(value)) {
+      self.removeUnknownOption();
+      $element.val(value);
+      if (value === '') self.emptyOption.prop('selected', true); // to make IE9 happy
+    } else {
+      if (value == null && self.emptyOption) {
+        self.removeUnknownOption();
+        $element.val('');
+      } else {
+        self.renderUnknownOption(value);
+      }
+    }
+  };
+
+
+  // Tell the select control that an option, with the given value, has been added
+  self.addOption = function(value, element) {
+    assertNotHasOwnProperty(value, '"option value"');
+    if (value === '') {
+      self.emptyOption = element;
+    }
+    var count = optionsMap.get(value) || 0;
+    optionsMap.put(value, count + 1);
+    self.ngModelCtrl.$render();
+    chromeHack(element);
+  };
+
+  // Tell the select control that an option, with the given value, has been removed
+  self.removeOption = function(value) {
+    var count = optionsMap.get(value);
+    if (count) {
+      if (count === 1) {
+        optionsMap.remove(value);
+        if (value === '') {
+          self.emptyOption = undefined;
+        }
+      } else {
+        optionsMap.put(value, count - 1);
+      }
+    }
+  };
+
+  // Check whether the select control has an option matching the given value
+  self.hasOption = function(value) {
+    return !!optionsMap.get(value);
+  };
+
+
+  self.registerOption = function(optionScope, optionElement, optionAttrs, interpolateValueFn, interpolateTextFn) {
+
+    if (interpolateValueFn) {
+      // The value attribute is interpolated
+      var oldVal;
+      optionAttrs.$observe('value', function valueAttributeObserveAction(newVal) {
+        if (isDefined(oldVal)) {
+          self.removeOption(oldVal);
+        }
+        oldVal = newVal;
+        self.addOption(newVal, optionElement);
+      });
+    } else if (interpolateTextFn) {
+      // The text content is interpolated
+      optionScope.$watch(interpolateTextFn, function interpolateWatchAction(newVal, oldVal) {
+        optionAttrs.$set('value', newVal);
+        if (oldVal !== newVal) {
+          self.removeOption(oldVal);
+        }
+        self.addOption(newVal, optionElement);
+      });
+    } else {
+      // The value attribute is static
+      self.addOption(optionAttrs.value, optionElement);
+    }
+
+    optionElement.on('$destroy', function() {
+      self.removeOption(optionAttrs.value);
+      self.ngModelCtrl.$render();
+    });
+  };
+}];
+
+/**
+ * @ngdoc directive
+ * @name select
+ * @restrict E
+ *
+ * @description
+ * HTML `SELECT` element with angular data-binding.
+ *
+ * The `select` directive is used together with {@link ngModel `ngModel`} to provide data-binding
+ * between the scope and the `<select>` control (including setting default values).
+ * Ìt also handles dynamic `<option>` elements, which can be added using the {@link ngRepeat `ngRepeat}` or
+ * {@link ngOptions `ngOptions`} directives.
+ *
+ * When an item in the `<select>` menu is selected, the value of the selected option will be bound
+ * to the model identified by the `ngModel` directive. With static or repeated options, this is
+ * the content of the `value` attribute or the textContent of the `<option>`, if the value attribute is missing.
+ * If you want dynamic value attributes, you can use interpolation inside the value attribute.
+ *
+ * <div class="alert alert-warning">
+ * Note that the value of a `select` directive used without `ngOptions` is always a string.
+ * When the model needs to be bound to a non-string value, you must either explictly convert it
+ * using a directive (see example below) or use `ngOptions` to specify the set of options.
+ * This is because an option element can only be bound to string values at present.
+ * </div>
+ *
+ * If the viewValue of `ngModel` does not match any of the options, then the control
+ * will automatically add an "unknown" option, which it then removes when the mismatch is resolved.
+ *
+ * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can
+ * be nested into the `<select>` element. This element will then represent the `null` or "not selected"
+ * option. See example below for demonstration.
+ *
+ * <div class="alert alert-info">
+ * In many cases, `ngRepeat` can be used on `<option>` elements instead of {@link ng.directive:ngOptions
+ * ngOptions} to achieve a similar result. However, `ngOptions` provides some benefits, such as
+ * more flexibility in how the `<select>`'s model is assigned via the `select` **`as`** part of the
+ * comprehension expression, and additionally in reducing memory and increasing speed by not creating
+ * a new scope for each repeated instance.
+ * </div>
+ *
+ *
+ * @param {string} ngModel Assignable angular expression to data-bind to.
+ * @param {string=} name Property name of the form under which the control is published.
+ * @param {string=} multiple Allows multiple options to be selected. The selected values will be
+ *     bound to the model as an array.
+ * @param {string=} required Sets `required` validation error key if the value is not entered.
+ * @param {string=} ngRequired Adds required attribute and required validation constraint to
+ * the element when the ngRequired expression evaluates to true. Use ngRequired instead of required
+ * when you want to data-bind to the required attribute.
+ * @param {string=} ngChange Angular expression to be executed when selected option(s) changes due to user
+ *    interaction with the select element.
+ * @param {string=} ngOptions sets the options that the select is populated with and defines what is
+ * set on the model on selection. See {@link ngOptions `ngOptions`}.
+ *
+ * @example
+ * ### Simple `select` elements with static options
+ *
+ * <example name="static-select" module="staticSelect">
+ * <file name="index.html">
+ * <div ng-controller="ExampleController">
+ *   <form name="myForm">
+ *     <label for="singleSelect"> Single select: </label><br>
+ *     <select name="singleSelect" ng-model="data.singleSelect">
+ *       <option value="option-1">Option 1</option>
+ *       <option value="option-2">Option 2</option>
+ *     </select><br>
+ *
+ *     <label for="singleSelect"> Single select with "not selected" option and dynamic option values: </label><br>
+ *     <select name="singleSelect" id="singleSelect" ng-model="data.singleSelect">
+ *       <option value="">---Please select---</option> <!-- not selected / blank option -->
+ *       <option value="{{data.option1}}">Option 1</option> <!-- interpolation -->
+ *       <option value="option-2">Option 2</option>
+ *     </select><br>
+ *     <button ng-click="forceUnknownOption()">Force unknown option</button><br>
+ *     <tt>singleSelect = {{data.singleSelect}}</tt>
+ *
+ *     <hr>
+ *     <label for="multipleSelect"> Multiple select: </label><br>
+ *     <select name="multipleSelect" id="multipleSelect" ng-model="data.multipleSelect" multiple>
+ *       <option value="option-1">Option 1</option>
+ *       <option value="option-2">Option 2</option>
+ *       <option value="option-3">Option 3</option>
+ *     </select><br>
+ *     <tt>multipleSelect = {{data.multipleSelect}}</tt><br/>
+ *   </form>
+ * </div>
+ * </file>
+ * <file name="app.js">
+ *  angular.module('staticSelect', [])
+ *    .controller('ExampleController', ['$scope', function($scope) {
+ *      $scope.data = {
+ *       singleSelect: null,
+ *       multipleSelect: [],
+ *       option1: 'option-1',
+ *      };
+ *
+ *      $scope.forceUnknownOption = function() {
+ *        $scope.data.singleSelect = 'nonsense';
+ *      };
+ *   }]);
+ * </file>
+ *</example>
+ *
+ * ### Using `ngRepeat` to generate `select` options
+ * <example name="ngrepeat-select" module="ngrepeatSelect">
+ * <file name="index.html">
+ * <div ng-controller="ExampleController">
+ *   <form name="myForm">
+ *     <label for="repeatSelect"> Repeat select: </label>
+ *     <select name="repeatSelect" id="repeatSelect" ng-model="data.repeatSelect">
+ *       <option ng-repeat="option in data.availableOptions" value="{{option.id}}">{{option.name}}</option>
+ *     </select>
+ *   </form>
+ *   <hr>
+ *   <tt>repeatSelect = {{data.repeatSelect}}</tt><br/>
+ * </div>
+ * </file>
+ * <file name="app.js">
+ *  angular.module('ngrepeatSelect', [])
+ *    .controller('ExampleController', ['$scope', function($scope) {
+ *      $scope.data = {
+ *       repeatSelect: null,
+ *       availableOptions: [
+ *         {id: '1', name: 'Option A'},
+ *         {id: '2', name: 'Option B'},
+ *         {id: '3', name: 'Option C'}
+ *       ],
+ *      };
+ *   }]);
+ * </file>
+ *</example>
+ *
+ *
+ * ### Using `select` with `ngOptions` and setting a default value
+ * See the {@link ngOptions ngOptions documentation} for more `ngOptions` usage examples.
+ *
+ * <example name="select-with-default-values" module="defaultValueSelect">
+ * <file name="index.html">
+ * <div ng-controller="ExampleController">
+ *   <form name="myForm">
+ *     <label for="mySelect">Make a choice:</label>
+ *     <select name="mySelect" id="mySelect"
+ *       ng-options="option.name for option in data.availableOptions track by option.id"
+ *       ng-model="data.selectedOption"></select>
+ *   </form>
+ *   <hr>
+ *   <tt>option = {{data.selectedOption}}</tt><br/>
+ * </div>
+ * </file>
+ * <file name="app.js">
+ *  angular.module('defaultValueSelect', [])
+ *    .controller('ExampleController', ['$scope', function($scope) {
+ *      $scope.data = {
+ *       availableOptions: [
+ *         {id: '1', name: 'Option A'},
+ *         {id: '2', name: 'Option B'},
+ *         {id: '3', name: 'Option C'}
+ *       ],
+ *       selectedOption: {id: '3', name: 'Option C'} //This sets the default value of the select in the ui
+ *       };
+ *   }]);
+ * </file>
+ *</example>
+ *
+ *
+ * ### Binding `select` to a non-string value via `ngModel` parsing / formatting
+ *
+ * <example name="select-with-non-string-options" module="nonStringSelect">
+ *   <file name="index.html">
+ *     <select ng-model="model.id" convert-to-number>
+ *       <option value="0">Zero</option>
+ *       <option value="1">One</option>
+ *       <option value="2">Two</option>
+ *     </select>
+ *     {{ model }}
+ *   </file>
+ *   <file name="app.js">
+ *     angular.module('nonStringSelect', [])
+ *       .run(function($rootScope) {
+ *         $rootScope.model = { id: 2 };
+ *       })
+ *       .directive('convertToNumber', function() {
+ *         return {
+ *           require: 'ngModel',
+ *           link: function(scope, element, attrs, ngModel) {
+ *             ngModel.$parsers.push(function(val) {
+ *               return parseInt(val, 10);
+ *             });
+ *             ngModel.$formatters.push(function(val) {
+ *               return '' + val;
+ *             });
+ *           }
+ *         };
+ *       });
+ *   </file>
+ *   <file name="protractor.js" type="protractor">
+ *     it('should initialize to model', function() {
+ *       var select = element(by.css('select'));
+ *       expect(element(by.model('model.id')).$('option:checked').getText()).toEqual('Two');
+ *     });
+ *   </file>
+ * </example>
+ *
+ */
+var selectDirective = function() {
+
+  return {
+    restrict: 'E',
+    require: ['select', '?ngModel'],
+    controller: SelectController,
+    priority: 1,
+    link: {
+      pre: selectPreLink
+    }
+  };
+
+  function selectPreLink(scope, element, attr, ctrls) {
+
+      // if ngModel is not defined, we don't need to do anything
+      var ngModelCtrl = ctrls[1];
+      if (!ngModelCtrl) return;
+
+      var selectCtrl = ctrls[0];
+
+      selectCtrl.ngModelCtrl = ngModelCtrl;
+
+      // We delegate rendering to the `writeValue` method, which can be changed
+      // if the select can have multiple selected values or if the options are being
+      // generated by `ngOptions`
+      ngModelCtrl.$render = function() {
+        selectCtrl.writeValue(ngModelCtrl.$viewValue);
+      };
+
+      // When the selected item(s) changes we delegate getting the value of the select control
+      // to the `readValue` method, which can be changed if the select can have multiple
+      // selected values or if the options are being generated by `ngOptions`
+      element.on('change', function() {
+        scope.$apply(function() {
+          ngModelCtrl.$setViewValue(selectCtrl.readValue());
+        });
+      });
+
+      // If the select allows multiple values then we need to modify how we read and write
+      // values from and to the control; also what it means for the value to be empty and
+      // we have to add an extra watch since ngModel doesn't work well with arrays - it
+      // doesn't trigger rendering if only an item in the array changes.
+      if (attr.multiple) {
+
+        // Read value now needs to check each option to see if it is selected
+        selectCtrl.readValue = function readMultipleValue() {
+          var array = [];
+          forEach(element.find('option'), function(option) {
+            if (option.selected) {
+              array.push(option.value);
+            }
+          });
+          return array;
+        };
+
+        // Write value now needs to set the selected property of each matching option
+        selectCtrl.writeValue = function writeMultipleValue(value) {
+          var items = new HashMap(value);
+          forEach(element.find('option'), function(option) {
+            option.selected = isDefined(items.get(option.value));
+          });
+        };
+
+        // we have to do it on each watch since ngModel watches reference, but
+        // we need to work of an array, so we need to see if anything was inserted/removed
+        var lastView, lastViewRef = NaN;
+        scope.$watch(function selectMultipleWatch() {
+          if (lastViewRef === ngModelCtrl.$viewValue && !equals(lastView, ngModelCtrl.$viewValue)) {
+            lastView = shallowCopy(ngModelCtrl.$viewValue);
+            ngModelCtrl.$render();
+          }
+          lastViewRef = ngModelCtrl.$viewValue;
+        });
+
+        // If we are a multiple select then value is now a collection
+        // so the meaning of $isEmpty changes
+        ngModelCtrl.$isEmpty = function(value) {
+          return !value || value.length === 0;
+        };
+
+      }
+    }
+};
+
+
+// The option directive is purely designed to communicate the existence (or lack of)
+// of dynamically created (and destroyed) option elements to their containing select
+// directive via its controller.
+var optionDirective = ['$interpolate', function($interpolate) {
+  return {
+    restrict: 'E',
+    priority: 100,
+    compile: function(element, attr) {
+
+      if (isDefined(attr.value)) {
+        // If the value attribute is defined, check if it contains an interpolation
+        var interpolateValueFn = $interpolate(attr.value, true);
+      } else {
+        // If the value attribute is not defined then we fall back to the
+        // text content of the option element, which may be interpolated
+        var interpolateTextFn = $interpolate(element.text(), true);
+        if (!interpolateTextFn) {
+          attr.$set('value', element.text());
+        }
+      }
+
+      return function(scope, element, attr) {
+
+        // This is an optimization over using ^^ since we don't want to have to search
+        // all the way to the root of the DOM for every single option element
+        var selectCtrlName = '$selectController',
+            parent = element.parent(),
+            selectCtrl = parent.data(selectCtrlName) ||
+              parent.parent().data(selectCtrlName); // in case we are in optgroup
+
+        if (selectCtrl) {
+          selectCtrl.registerOption(scope, element, attr, interpolateValueFn, interpolateTextFn);
+        }
+      };
+    }
+  };
+}];
+
+var styleDirective = valueFn({
+  restrict: 'E',
+  terminal: false
+});
+
+var requiredDirective = function() {
+  return {
+    restrict: 'A',
+    require: '?ngModel',
+    link: function(scope, elm, attr, ctrl) {
+      if (!ctrl) return;
+      attr.required = true; // force truthy in case we are on non input element
+
+      ctrl.$validators.required = function(modelValue, viewValue) {
+        return !attr.required || !ctrl.$isEmpty(viewValue);
+      };
+
+      attr.$observe('required', function() {
+        ctrl.$validate();
+      });
+    }
+  };
+};
+
+
+var patternDirective = function() {
+  return {
+    restrict: 'A',
+    require: '?ngModel',
+    link: function(scope, elm, attr, ctrl) {
+      if (!ctrl) return;
+
+      var regexp, patternExp = attr.ngPattern || attr.pattern;
+      attr.$observe('pattern', function(regex) {
+        if (isString(regex) && regex.length > 0) {
+          regex = new RegExp('^' + regex + '$');
+        }
+
+        if (regex && !regex.test) {
+          throw minErr('ngPattern')('noregexp',
+            'Expected {0} to be a RegExp but was {1}. Element: {2}', patternExp,
+            regex, startingTag(elm));
+        }
+
+        regexp = regex || undefined;
+        ctrl.$validate();
+      });
+
+      ctrl.$validators.pattern = function(modelValue, viewValue) {
+        // HTML5 pattern constraint validates the input value, so we validate the viewValue
+        return ctrl.$isEmpty(viewValue) || isUndefined(regexp) || regexp.test(viewValue);
+      };
+    }
+  };
+};
+
+
+var maxlengthDirective = function() {
+  return {
+    restrict: 'A',
+    require: '?ngModel',
+    link: function(scope, elm, attr, ctrl) {
+      if (!ctrl) return;
+
+      var maxlength = -1;
+      attr.$observe('maxlength', function(value) {
+        var intVal = toInt(value);
+        maxlength = isNaN(intVal) ? -1 : intVal;
+        ctrl.$validate();
+      });
+      ctrl.$validators.maxlength = function(modelValue, viewValue) {
+        return (maxlength < 0) || ctrl.$isEmpty(viewValue) || (viewValue.length <= maxlength);
+      };
+    }
+  };
+};
+
+var minlengthDirective = function() {
+  return {
+    restrict: 'A',
+    require: '?ngModel',
+    link: function(scope, elm, attr, ctrl) {
+      if (!ctrl) return;
+
+      var minlength = 0;
+      attr.$observe('minlength', function(value) {
+        minlength = toInt(value) || 0;
+        ctrl.$validate();
+      });
+      ctrl.$validators.minlength = function(modelValue, viewValue) {
+        return ctrl.$isEmpty(viewValue) || viewValue.length >= minlength;
+      };
+    }
+  };
+};
+
+if (window.angular.bootstrap) {
+  //AngularJS is already loaded, so we can return here...
+  console.log('WARNING: Tried to load angular more than once.');
+  return;
+}
+
+//try to bind to jquery now so that one can write jqLite(document).ready()
+//but we will rebind on bootstrap again.
+bindJQuery();
+
+publishExternalAPI(angular);
+
+angular.module("ngLocale", [], ["$provide", function($provide) {
+var PLURAL_CATEGORY = {ZERO: "zero", ONE: "one", TWO: "two", FEW: "few", MANY: "many", OTHER: "other"};
+function getDecimals(n) {
+  n = n + '';
+  var i = n.indexOf('.');
+  return (i == -1) ? 0 : n.length - i - 1;
+}
+
+function getVF(n, opt_precision) {
+  var v = opt_precision;
+
+  if (undefined === v) {
+    v = Math.min(getDecimals(n), 3);
+  }
+
+  var base = Math.pow(10, v);
+  var f = ((n * base) | 0) % base;
+  return {v: v, f: f};
+}
+
+$provide.value("$locale", {
+  "DATETIME_FORMATS": {
+    "AMPMS": [
+      "AM",
+      "PM"
+    ],
+    "DAY": [
+      "Sunday",
+      "Monday",
+      "Tuesday",
+      "Wednesday",
+      "Thursday",
+      "Friday",
+      "Saturday"
+    ],
+    "ERANAMES": [
+      "Before Christ",
+      "Anno Domini"
+    ],
+    "ERAS": [
+      "BC",
+      "AD"
+    ],
+    "FIRSTDAYOFWEEK": 6,
+    "MONTH": [
+      "January",
+      "February",
+      "March",
+      "April",
+      "May",
+      "June",
+      "July",
+      "August",
+      "September",
+      "October",
+      "November",
+      "December"
+    ],
+    "SHORTDAY": [
+      "Sun",
+      "Mon",
+      "Tue",
+      "Wed",
+      "Thu",
+      "Fri",
+      "Sat"
+    ],
+    "SHORTMONTH": [
+      "Jan",
+      "Feb",
+      "Mar",
+      "Apr",
+      "May",
+      "Jun",
+      "Jul",
+      "Aug",
+      "Sep",
+      "Oct",
+      "Nov",
+      "Dec"
+    ],
+    "WEEKENDRANGE": [
+      5,
+      6
+    ],
+    "fullDate": "EEEE, MMMM d, y",
+    "longDate": "MMMM d, y",
+    "medium": "MMM d, y h:mm:ss a",
+    "mediumDate": "MMM d, y",
+    "mediumTime": "h:mm:ss a",
+    "short": "M/d/yy h:mm a",
+    "shortDate": "M/d/yy",
+    "shortTime": "h:mm a"
+  },
+  "NUMBER_FORMATS": {
+    "CURRENCY_SYM": "$",
+    "DECIMAL_SEP": ".",
+    "GROUP_SEP": ",",
+    "PATTERNS": [
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 3,
+        "minFrac": 0,
+        "minInt": 1,
+        "negPre": "-",
+        "negSuf": "",
+        "posPre": "",
+        "posSuf": ""
+      },
+      {
+        "gSize": 3,
+        "lgSize": 3,
+        "maxFrac": 2,
+        "minFrac": 2,
+        "minInt": 1,
+        "negPre": "-\u00a4",
+        "negSuf": "",
+        "posPre": "\u00a4",
+        "posSuf": ""
+      }
+    ]
+  },
+  "id": "en-us",
+  "pluralCat": function(n, opt_precision) {  var i = n | 0;  var vf = getVF(n, opt_precision);  if (i == 1 && vf.v == 0) {    return PLURAL_CATEGORY.ONE;  }  return PLURAL_CATEGORY.OTHER;}
+});
+}]);
+
+  jqLite(document).ready(function() {
+    angularInit(document, bootstrap);
+  });
+
+})(window, document);
+
+!window.angular.$$csp().noInlineStyle && window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>');
\ No newline at end of file
diff --git a/public/bower_components/animate.css/animate.css b/public/bower_components/animate.css/animate.css
new file mode 100644
index 0000000..54fa40e
--- /dev/null
+++ b/public/bower_components/animate.css/animate.css
@@ -0,0 +1,3272 @@
+@charset "UTF-8";
+
+/*!
+Animate.css - http://daneden.me/animate
+Licensed under the MIT license - http://opensource.org/licenses/MIT
+
+Copyright (c) 2015 Daniel Eden
+*/
+
+.animated {
+  -webkit-animation-duration: 1s;
+  animation-duration: 1s;
+  -webkit-animation-fill-mode: both;
+  animation-fill-mode: both;
+}
+
+.animated.infinite {
+  -webkit-animation-iteration-count: infinite;
+  animation-iteration-count: infinite;
+}
+
+.animated.hinge {
+  -webkit-animation-duration: 2s;
+  animation-duration: 2s;
+}
+
+.animated.bounceIn,
+.animated.bounceOut {
+  -webkit-animation-duration: .75s;
+  animation-duration: .75s;
+}
+
+.animated.flipOutX,
+.animated.flipOutY {
+  -webkit-animation-duration: .75s;
+  animation-duration: .75s;
+}
+
+@-webkit-keyframes bounce {
+  from, 20%, 53%, 80%, 100% {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    -webkit-transform: translate3d(0,0,0);
+    transform: translate3d(0,0,0);
+  }
+
+  40%, 43% {
+    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    -webkit-transform: translate3d(0, -30px, 0);
+    transform: translate3d(0, -30px, 0);
+  }
+
+  70% {
+    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    -webkit-transform: translate3d(0, -15px, 0);
+    transform: translate3d(0, -15px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0,-4px,0);
+    transform: translate3d(0,-4px,0);
+  }
+}
+
+@keyframes bounce {
+  from, 20%, 53%, 80%, 100% {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    -webkit-transform: translate3d(0,0,0);
+    transform: translate3d(0,0,0);
+  }
+
+  40%, 43% {
+    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    -webkit-transform: translate3d(0, -30px, 0);
+    transform: translate3d(0, -30px, 0);
+  }
+
+  70% {
+    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    -webkit-transform: translate3d(0, -15px, 0);
+    transform: translate3d(0, -15px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0,-4px,0);
+    transform: translate3d(0,-4px,0);
+  }
+}
+
+.bounce {
+  -webkit-animation-name: bounce;
+  animation-name: bounce;
+  -webkit-transform-origin: center bottom;
+  transform-origin: center bottom;
+}
+
+@-webkit-keyframes flash {
+  from, 50%, 100% {
+    opacity: 1;
+  }
+
+  25%, 75% {
+    opacity: 0;
+  }
+}
+
+@keyframes flash {
+  from, 50%, 100% {
+    opacity: 1;
+  }
+
+  25%, 75% {
+    opacity: 0;
+  }
+}
+
+.flash {
+  -webkit-animation-name: flash;
+  animation-name: flash;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes pulse {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  50% {
+    -webkit-transform: scale3d(1.05, 1.05, 1.05);
+    transform: scale3d(1.05, 1.05, 1.05);
+  }
+
+  100% {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+@keyframes pulse {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  50% {
+    -webkit-transform: scale3d(1.05, 1.05, 1.05);
+    transform: scale3d(1.05, 1.05, 1.05);
+  }
+
+  100% {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+.pulse {
+  -webkit-animation-name: pulse;
+  animation-name: pulse;
+}
+
+@-webkit-keyframes rubberBand {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  30% {
+    -webkit-transform: scale3d(1.25, 0.75, 1);
+    transform: scale3d(1.25, 0.75, 1);
+  }
+
+  40% {
+    -webkit-transform: scale3d(0.75, 1.25, 1);
+    transform: scale3d(0.75, 1.25, 1);
+  }
+
+  50% {
+    -webkit-transform: scale3d(1.15, 0.85, 1);
+    transform: scale3d(1.15, 0.85, 1);
+  }
+
+  65% {
+    -webkit-transform: scale3d(.95, 1.05, 1);
+    transform: scale3d(.95, 1.05, 1);
+  }
+
+  75% {
+    -webkit-transform: scale3d(1.05, .95, 1);
+    transform: scale3d(1.05, .95, 1);
+  }
+
+  100% {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+@keyframes rubberBand {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  30% {
+    -webkit-transform: scale3d(1.25, 0.75, 1);
+    transform: scale3d(1.25, 0.75, 1);
+  }
+
+  40% {
+    -webkit-transform: scale3d(0.75, 1.25, 1);
+    transform: scale3d(0.75, 1.25, 1);
+  }
+
+  50% {
+    -webkit-transform: scale3d(1.15, 0.85, 1);
+    transform: scale3d(1.15, 0.85, 1);
+  }
+
+  65% {
+    -webkit-transform: scale3d(.95, 1.05, 1);
+    transform: scale3d(.95, 1.05, 1);
+  }
+
+  75% {
+    -webkit-transform: scale3d(1.05, .95, 1);
+    transform: scale3d(1.05, .95, 1);
+  }
+
+  100% {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+.rubberBand {
+  -webkit-animation-name: rubberBand;
+  animation-name: rubberBand;
+}
+
+@-webkit-keyframes shake {
+  from, 100% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  10%, 30%, 50%, 70%, 90% {
+    -webkit-transform: translate3d(-10px, 0, 0);
+    transform: translate3d(-10px, 0, 0);
+  }
+
+  20%, 40%, 60%, 80% {
+    -webkit-transform: translate3d(10px, 0, 0);
+    transform: translate3d(10px, 0, 0);
+  }
+}
+
+@keyframes shake {
+  from, 100% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  10%, 30%, 50%, 70%, 90% {
+    -webkit-transform: translate3d(-10px, 0, 0);
+    transform: translate3d(-10px, 0, 0);
+  }
+
+  20%, 40%, 60%, 80% {
+    -webkit-transform: translate3d(10px, 0, 0);
+    transform: translate3d(10px, 0, 0);
+  }
+}
+
+.shake {
+  -webkit-animation-name: shake;
+  animation-name: shake;
+}
+
+@-webkit-keyframes swing {
+  20% {
+    -webkit-transform: rotate3d(0, 0, 1, 15deg);
+    transform: rotate3d(0, 0, 1, 15deg);
+  }
+
+  40% {
+    -webkit-transform: rotate3d(0, 0, 1, -10deg);
+    transform: rotate3d(0, 0, 1, -10deg);
+  }
+
+  60% {
+    -webkit-transform: rotate3d(0, 0, 1, 5deg);
+    transform: rotate3d(0, 0, 1, 5deg);
+  }
+
+  80% {
+    -webkit-transform: rotate3d(0, 0, 1, -5deg);
+    transform: rotate3d(0, 0, 1, -5deg);
+  }
+
+  100% {
+    -webkit-transform: rotate3d(0, 0, 1, 0deg);
+    transform: rotate3d(0, 0, 1, 0deg);
+  }
+}
+
+@keyframes swing {
+  20% {
+    -webkit-transform: rotate3d(0, 0, 1, 15deg);
+    transform: rotate3d(0, 0, 1, 15deg);
+  }
+
+  40% {
+    -webkit-transform: rotate3d(0, 0, 1, -10deg);
+    transform: rotate3d(0, 0, 1, -10deg);
+  }
+
+  60% {
+    -webkit-transform: rotate3d(0, 0, 1, 5deg);
+    transform: rotate3d(0, 0, 1, 5deg);
+  }
+
+  80% {
+    -webkit-transform: rotate3d(0, 0, 1, -5deg);
+    transform: rotate3d(0, 0, 1, -5deg);
+  }
+
+  100% {
+    -webkit-transform: rotate3d(0, 0, 1, 0deg);
+    transform: rotate3d(0, 0, 1, 0deg);
+  }
+}
+
+.swing {
+  -webkit-transform-origin: top center;
+  transform-origin: top center;
+  -webkit-animation-name: swing;
+  animation-name: swing;
+}
+
+@-webkit-keyframes tada {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  10%, 20% {
+    -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
+    transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
+  }
+
+  30%, 50%, 70%, 90% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+  }
+
+  40%, 60%, 80% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+  }
+
+  100% {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+@keyframes tada {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  10%, 20% {
+    -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
+    transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
+  }
+
+  30%, 50%, 70%, 90% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+  }
+
+  40%, 60%, 80% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+  }
+
+  100% {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+.tada {
+  -webkit-animation-name: tada;
+  animation-name: tada;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes wobble {
+  from {
+    -webkit-transform: none;
+    transform: none;
+  }
+
+  15% {
+    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+  }
+
+  30% {
+    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+  }
+
+  45% {
+    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+  }
+
+  60% {
+    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+  }
+
+  75% {
+    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+  }
+
+  100% {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes wobble {
+  from {
+    -webkit-transform: none;
+    transform: none;
+  }
+
+  15% {
+    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+  }
+
+  30% {
+    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+  }
+
+  45% {
+    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+  }
+
+  60% {
+    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+  }
+
+  75% {
+    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+  }
+
+  100% {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.wobble {
+  -webkit-animation-name: wobble;
+  animation-name: wobble;
+}
+
+@-webkit-keyframes jello {
+  from, 11.1%, 100% {
+    -webkit-transform: none;
+    transform: none;
+  }
+
+  22.2% {
+    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
+    transform: skewX(-12.5deg) skewY(-12.5deg);
+  }
+
+  33.3% {
+    -webkit-transform: skewX(6.25deg) skewY(6.25deg);
+    transform: skewX(6.25deg) skewY(6.25deg);
+  }
+
+  44.4% {
+    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
+    transform: skewX(-3.125deg) skewY(-3.125deg);
+  }
+
+  55.5% {
+    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
+    transform: skewX(1.5625deg) skewY(1.5625deg);
+  }
+
+  66.6% {
+    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
+    transform: skewX(-0.78125deg) skewY(-0.78125deg);
+  }
+
+  77.7% {
+    -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
+    transform: skewX(0.390625deg) skewY(0.390625deg);
+  }
+
+  88.8% {
+    -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+  }
+}
+
+@keyframes jello {
+  from, 11.1%, 100% {
+    -webkit-transform: none;
+    transform: none;
+  }
+
+  22.2% {
+    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
+    transform: skewX(-12.5deg) skewY(-12.5deg);
+  }
+
+  33.3% {
+    -webkit-transform: skewX(6.25deg) skewY(6.25deg);
+    transform: skewX(6.25deg) skewY(6.25deg);
+  }
+
+  44.4% {
+    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
+    transform: skewX(-3.125deg) skewY(-3.125deg);
+  }
+
+  55.5% {
+    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
+    transform: skewX(1.5625deg) skewY(1.5625deg);
+  }
+
+  66.6% {
+    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
+    transform: skewX(-0.78125deg) skewY(-0.78125deg);
+  }
+
+  77.7% {
+    -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
+    transform: skewX(0.390625deg) skewY(0.390625deg);
+  }
+
+  88.8% {
+    -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+  }
+}
+
+.jello {
+  -webkit-animation-name: jello;
+  animation-name: jello;
+  -webkit-transform-origin: center;
+  transform-origin: center;
+}
+
+@-webkit-keyframes bounceIn {
+  from, 20%, 40%, 60%, 80%, 100% {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  20% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1);
+    transform: scale3d(1.1, 1.1, 1.1);
+  }
+
+  40% {
+    -webkit-transform: scale3d(.9, .9, .9);
+    transform: scale3d(.9, .9, .9);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(1.03, 1.03, 1.03);
+    transform: scale3d(1.03, 1.03, 1.03);
+  }
+
+  80% {
+    -webkit-transform: scale3d(.97, .97, .97);
+    transform: scale3d(.97, .97, .97);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+@keyframes bounceIn {
+  from, 20%, 40%, 60%, 80%, 100% {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  20% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1);
+    transform: scale3d(1.1, 1.1, 1.1);
+  }
+
+  40% {
+    -webkit-transform: scale3d(.9, .9, .9);
+    transform: scale3d(.9, .9, .9);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(1.03, 1.03, 1.03);
+    transform: scale3d(1.03, 1.03, 1.03);
+  }
+
+  80% {
+    -webkit-transform: scale3d(.97, .97, .97);
+    transform: scale3d(.97, .97, .97);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+.bounceIn {
+  -webkit-animation-name: bounceIn;
+  animation-name: bounceIn;
+}
+
+@-webkit-keyframes bounceInDown {
+  from, 60%, 75%, 90%, 100% {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -3000px, 0);
+    transform: translate3d(0, -3000px, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 25px, 0);
+    transform: translate3d(0, 25px, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(0, -10px, 0);
+    transform: translate3d(0, -10px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0, 5px, 0);
+    transform: translate3d(0, 5px, 0);
+  }
+
+  100% {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes bounceInDown {
+  from, 60%, 75%, 90%, 100% {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -3000px, 0);
+    transform: translate3d(0, -3000px, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 25px, 0);
+    transform: translate3d(0, 25px, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(0, -10px, 0);
+    transform: translate3d(0, -10px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0, 5px, 0);
+    transform: translate3d(0, 5px, 0);
+  }
+
+  100% {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.bounceInDown {
+  -webkit-animation-name: bounceInDown;
+  animation-name: bounceInDown;
+}
+
+@-webkit-keyframes bounceInLeft {
+  from, 60%, 75%, 90%, 100% {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: translate3d(-3000px, 0, 0);
+    transform: translate3d(-3000px, 0, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(25px, 0, 0);
+    transform: translate3d(25px, 0, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(-10px, 0, 0);
+    transform: translate3d(-10px, 0, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(5px, 0, 0);
+    transform: translate3d(5px, 0, 0);
+  }
+
+  100% {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes bounceInLeft {
+  from, 60%, 75%, 90%, 100% {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: translate3d(-3000px, 0, 0);
+    transform: translate3d(-3000px, 0, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(25px, 0, 0);
+    transform: translate3d(25px, 0, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(-10px, 0, 0);
+    transform: translate3d(-10px, 0, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(5px, 0, 0);
+    transform: translate3d(5px, 0, 0);
+  }
+
+  100% {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.bounceInLeft {
+  -webkit-animation-name: bounceInLeft;
+  animation-name: bounceInLeft;
+}
+
+@-webkit-keyframes bounceInRight {
+  from, 60%, 75%, 90%, 100% {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(3000px, 0, 0);
+    transform: translate3d(3000px, 0, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(-25px, 0, 0);
+    transform: translate3d(-25px, 0, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(10px, 0, 0);
+    transform: translate3d(10px, 0, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(-5px, 0, 0);
+    transform: translate3d(-5px, 0, 0);
+  }
+
+  100% {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes bounceInRight {
+  from, 60%, 75%, 90%, 100% {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(3000px, 0, 0);
+    transform: translate3d(3000px, 0, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(-25px, 0, 0);
+    transform: translate3d(-25px, 0, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(10px, 0, 0);
+    transform: translate3d(10px, 0, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(-5px, 0, 0);
+    transform: translate3d(-5px, 0, 0);
+  }
+
+  100% {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.bounceInRight {
+  -webkit-animation-name: bounceInRight;
+  animation-name: bounceInRight;
+}
+
+@-webkit-keyframes bounceInUp {
+  from, 60%, 75%, 90%, 100% {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 3000px, 0);
+    transform: translate3d(0, 3000px, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(0, 10px, 0);
+    transform: translate3d(0, 10px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0, -5px, 0);
+    transform: translate3d(0, -5px, 0);
+  }
+
+  100% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+@keyframes bounceInUp {
+  from, 60%, 75%, 90%, 100% {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 3000px, 0);
+    transform: translate3d(0, 3000px, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(0, 10px, 0);
+    transform: translate3d(0, 10px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0, -5px, 0);
+    transform: translate3d(0, -5px, 0);
+  }
+
+  100% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+.bounceInUp {
+  -webkit-animation-name: bounceInUp;
+  animation-name: bounceInUp;
+}
+
+@-webkit-keyframes bounceOut {
+  20% {
+    -webkit-transform: scale3d(.9, .9, .9);
+    transform: scale3d(.9, .9, .9);
+  }
+
+  50%, 55% {
+    opacity: 1;
+    -webkit-transform: scale3d(1.1, 1.1, 1.1);
+    transform: scale3d(1.1, 1.1, 1.1);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+}
+
+@keyframes bounceOut {
+  20% {
+    -webkit-transform: scale3d(.9, .9, .9);
+    transform: scale3d(.9, .9, .9);
+  }
+
+  50%, 55% {
+    opacity: 1;
+    -webkit-transform: scale3d(1.1, 1.1, 1.1);
+    transform: scale3d(1.1, 1.1, 1.1);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+}
+
+.bounceOut {
+  -webkit-animation-name: bounceOut;
+  animation-name: bounceOut;
+}
+
+@-webkit-keyframes bounceOutDown {
+  20% {
+    -webkit-transform: translate3d(0, 10px, 0);
+    transform: translate3d(0, 10px, 0);
+  }
+
+  40%, 45% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+}
+
+@keyframes bounceOutDown {
+  20% {
+    -webkit-transform: translate3d(0, 10px, 0);
+    transform: translate3d(0, 10px, 0);
+  }
+
+  40%, 45% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+}
+
+.bounceOutDown {
+  -webkit-animation-name: bounceOutDown;
+  animation-name: bounceOutDown;
+}
+
+@-webkit-keyframes bounceOutLeft {
+  20% {
+    opacity: 1;
+    -webkit-transform: translate3d(20px, 0, 0);
+    transform: translate3d(20px, 0, 0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+}
+
+@keyframes bounceOutLeft {
+  20% {
+    opacity: 1;
+    -webkit-transform: translate3d(20px, 0, 0);
+    transform: translate3d(20px, 0, 0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+}
+
+.bounceOutLeft {
+  -webkit-animation-name: bounceOutLeft;
+  animation-name: bounceOutLeft;
+}
+
+@-webkit-keyframes bounceOutRight {
+  20% {
+    opacity: 1;
+    -webkit-transform: translate3d(-20px, 0, 0);
+    transform: translate3d(-20px, 0, 0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+}
+
+@keyframes bounceOutRight {
+  20% {
+    opacity: 1;
+    -webkit-transform: translate3d(-20px, 0, 0);
+    transform: translate3d(-20px, 0, 0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+}
+
+.bounceOutRight {
+  -webkit-animation-name: bounceOutRight;
+  animation-name: bounceOutRight;
+}
+
+@-webkit-keyframes bounceOutUp {
+  20% {
+    -webkit-transform: translate3d(0, -10px, 0);
+    transform: translate3d(0, -10px, 0);
+  }
+
+  40%, 45% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 20px, 0);
+    transform: translate3d(0, 20px, 0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+}
+
+@keyframes bounceOutUp {
+  20% {
+    -webkit-transform: translate3d(0, -10px, 0);
+    transform: translate3d(0, -10px, 0);
+  }
+
+  40%, 45% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 20px, 0);
+    transform: translate3d(0, 20px, 0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+}
+
+.bounceOutUp {
+  -webkit-animation-name: bounceOutUp;
+  animation-name: bounceOutUp;
+}
+
+@-webkit-keyframes fadeIn {
+  from {
+    opacity: 0;
+  }
+
+  100% {
+    opacity: 1;
+  }
+}
+
+@keyframes fadeIn {
+  from {
+    opacity: 0;
+  }
+
+  100% {
+    opacity: 1;
+  }
+}
+
+.fadeIn {
+  -webkit-animation-name: fadeIn;
+  animation-name: fadeIn;
+}
+
+@-webkit-keyframes fadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.fadeInDown {
+  -webkit-animation-name: fadeInDown;
+  animation-name: fadeInDown;
+}
+
+@-webkit-keyframes fadeInDownBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInDownBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.fadeInDownBig {
+  -webkit-animation-name: fadeInDownBig;
+  animation-name: fadeInDownBig;
+}
+
+@-webkit-keyframes fadeInLeft {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInLeft {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.fadeInLeft {
+  -webkit-animation-name: fadeInLeft;
+  animation-name: fadeInLeft;
+}
+
+@-webkit-keyframes fadeInLeftBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInLeftBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.fadeInLeftBig {
+  -webkit-animation-name: fadeInLeftBig;
+  animation-name: fadeInLeftBig;
+}
+
+@-webkit-keyframes fadeInRight {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInRight {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.fadeInRight {
+  -webkit-animation-name: fadeInRight;
+  animation-name: fadeInRight;
+}
+
+@-webkit-keyframes fadeInRightBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInRightBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.fadeInRightBig {
+  -webkit-animation-name: fadeInRightBig;
+  animation-name: fadeInRightBig;
+}
+
+@-webkit-keyframes fadeInUp {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInUp {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.fadeInUp {
+  -webkit-animation-name: fadeInUp;
+  animation-name: fadeInUp;
+}
+
+@-webkit-keyframes fadeInUpBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInUpBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.fadeInUpBig {
+  -webkit-animation-name: fadeInUpBig;
+  animation-name: fadeInUpBig;
+}
+
+@-webkit-keyframes fadeOut {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+  }
+}
+
+@keyframes fadeOut {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+  }
+}
+
+.fadeOut {
+  -webkit-animation-name: fadeOut;
+  animation-name: fadeOut;
+}
+
+@-webkit-keyframes fadeOutDown {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+
+@keyframes fadeOutDown {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+
+.fadeOutDown {
+  -webkit-animation-name: fadeOutDown;
+  animation-name: fadeOutDown;
+}
+
+@-webkit-keyframes fadeOutDownBig {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+}
+
+@keyframes fadeOutDownBig {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+}
+
+.fadeOutDownBig {
+  -webkit-animation-name: fadeOutDownBig;
+  animation-name: fadeOutDownBig;
+}
+
+@-webkit-keyframes fadeOutLeft {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+}
+
+@keyframes fadeOutLeft {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+}
+
+.fadeOutLeft {
+  -webkit-animation-name: fadeOutLeft;
+  animation-name: fadeOutLeft;
+}
+
+@-webkit-keyframes fadeOutLeftBig {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+}
+
+@keyframes fadeOutLeftBig {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+}
+
+.fadeOutLeftBig {
+  -webkit-animation-name: fadeOutLeftBig;
+  animation-name: fadeOutLeftBig;
+}
+
+@-webkit-keyframes fadeOutRight {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+}
+
+@keyframes fadeOutRight {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+}
+
+.fadeOutRight {
+  -webkit-animation-name: fadeOutRight;
+  animation-name: fadeOutRight;
+}
+
+@-webkit-keyframes fadeOutRightBig {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+}
+
+@keyframes fadeOutRightBig {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+}
+
+.fadeOutRightBig {
+  -webkit-animation-name: fadeOutRightBig;
+  animation-name: fadeOutRightBig;
+}
+
+@-webkit-keyframes fadeOutUp {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+
+@keyframes fadeOutUp {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+
+.fadeOutUp {
+  -webkit-animation-name: fadeOutUp;
+  animation-name: fadeOutUp;
+}
+
+@-webkit-keyframes fadeOutUpBig {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+}
+
+@keyframes fadeOutUpBig {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+}
+
+.fadeOutUpBig {
+  -webkit-animation-name: fadeOutUpBig;
+  animation-name: fadeOutUpBig;
+}
+
+@-webkit-keyframes flip {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+
+  50% {
+    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) scale3d(.95, .95, .95);
+    transform: perspective(400px) scale3d(.95, .95, .95);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  100% {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+
+@keyframes flip {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+
+  50% {
+    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) scale3d(.95, .95, .95);
+    transform: perspective(400px) scale3d(.95, .95, .95);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  100% {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+
+.animated.flip {
+  -webkit-backface-visibility: visible;
+  backface-visibility: visible;
+  -webkit-animation-name: flip;
+  animation-name: flip;
+}
+
+@-webkit-keyframes flipInX {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+    opacity: 0;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  60% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+  }
+
+  100% {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+}
+
+@keyframes flipInX {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+    opacity: 0;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  60% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+  }
+
+  100% {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+}
+
+.flipInX {
+  -webkit-backface-visibility: visible !important;
+  backface-visibility: visible !important;
+  -webkit-animation-name: flipInX;
+  animation-name: flipInX;
+}
+
+@-webkit-keyframes flipInY {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+    opacity: 0;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  60% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+  }
+
+  100% {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+}
+
+@keyframes flipInY {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+    opacity: 0;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  60% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+  }
+
+  100% {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+}
+
+.flipInY {
+  -webkit-backface-visibility: visible !important;
+  backface-visibility: visible !important;
+  -webkit-animation-name: flipInY;
+  animation-name: flipInY;
+}
+
+@-webkit-keyframes flipOutX {
+  from {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+
+  30% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    opacity: 0;
+  }
+}
+
+@keyframes flipOutX {
+  from {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+
+  30% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    opacity: 0;
+  }
+}
+
+.flipOutX {
+  -webkit-animation-name: flipOutX;
+  animation-name: flipOutX;
+  -webkit-backface-visibility: visible !important;
+  backface-visibility: visible !important;
+}
+
+@-webkit-keyframes flipOutY {
+  from {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+
+  30% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    opacity: 0;
+  }
+}
+
+@keyframes flipOutY {
+  from {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+
+  30% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    opacity: 0;
+  }
+}
+
+.flipOutY {
+  -webkit-backface-visibility: visible !important;
+  backface-visibility: visible !important;
+  -webkit-animation-name: flipOutY;
+  animation-name: flipOutY;
+}
+
+@-webkit-keyframes lightSpeedIn {
+  from {
+    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
+    transform: translate3d(100%, 0, 0) skewX(-30deg);
+    opacity: 0;
+  }
+
+  60% {
+    -webkit-transform: skewX(20deg);
+    transform: skewX(20deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: skewX(-5deg);
+    transform: skewX(-5deg);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes lightSpeedIn {
+  from {
+    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
+    transform: translate3d(100%, 0, 0) skewX(-30deg);
+    opacity: 0;
+  }
+
+  60% {
+    -webkit-transform: skewX(20deg);
+    transform: skewX(20deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: skewX(-5deg);
+    transform: skewX(-5deg);
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+.lightSpeedIn {
+  -webkit-animation-name: lightSpeedIn;
+  animation-name: lightSpeedIn;
+  -webkit-animation-timing-function: ease-out;
+  animation-timing-function: ease-out;
+}
+
+@-webkit-keyframes lightSpeedOut {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
+    transform: translate3d(100%, 0, 0) skewX(30deg);
+    opacity: 0;
+  }
+}
+
+@keyframes lightSpeedOut {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
+    transform: translate3d(100%, 0, 0) skewX(30deg);
+    opacity: 0;
+  }
+}
+
+.lightSpeedOut {
+  -webkit-animation-name: lightSpeedOut;
+  animation-name: lightSpeedOut;
+  -webkit-animation-timing-function: ease-in;
+  animation-timing-function: ease-in;
+}
+
+@-webkit-keyframes rotateIn {
+  from {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: rotate3d(0, 0, 1, -200deg);
+    transform: rotate3d(0, 0, 1, -200deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes rotateIn {
+  from {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: rotate3d(0, 0, 1, -200deg);
+    transform: rotate3d(0, 0, 1, -200deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+.rotateIn {
+  -webkit-animation-name: rotateIn;
+  animation-name: rotateIn;
+}
+
+@-webkit-keyframes rotateInDownLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes rotateInDownLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+.rotateInDownLeft {
+  -webkit-animation-name: rotateInDownLeft;
+  animation-name: rotateInDownLeft;
+}
+
+@-webkit-keyframes rotateInDownRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes rotateInDownRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+.rotateInDownRight {
+  -webkit-animation-name: rotateInDownRight;
+  animation-name: rotateInDownRight;
+}
+
+@-webkit-keyframes rotateInUpLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes rotateInUpLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+.rotateInUpLeft {
+  -webkit-animation-name: rotateInUpLeft;
+  animation-name: rotateInUpLeft;
+}
+
+@-webkit-keyframes rotateInUpRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -90deg);
+    transform: rotate3d(0, 0, 1, -90deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes rotateInUpRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -90deg);
+    transform: rotate3d(0, 0, 1, -90deg);
+    opacity: 0;
+  }
+
+  100% {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+.rotateInUpRight {
+  -webkit-animation-name: rotateInUpRight;
+  animation-name: rotateInUpRight;
+}
+
+@-webkit-keyframes rotateOut {
+  from {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: rotate3d(0, 0, 1, 200deg);
+    transform: rotate3d(0, 0, 1, 200deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOut {
+  from {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: rotate3d(0, 0, 1, 200deg);
+    transform: rotate3d(0, 0, 1, 200deg);
+    opacity: 0;
+  }
+}
+
+.rotateOut {
+  -webkit-animation-name: rotateOut;
+  animation-name: rotateOut;
+}
+
+@-webkit-keyframes rotateOutDownLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOutDownLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+}
+
+.rotateOutDownLeft {
+  -webkit-animation-name: rotateOutDownLeft;
+  animation-name: rotateOutDownLeft;
+}
+
+@-webkit-keyframes rotateOutDownRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOutDownRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+}
+
+.rotateOutDownRight {
+  -webkit-animation-name: rotateOutDownRight;
+  animation-name: rotateOutDownRight;
+}
+
+@-webkit-keyframes rotateOutUpLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOutUpLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+}
+
+.rotateOutUpLeft {
+  -webkit-animation-name: rotateOutUpLeft;
+  animation-name: rotateOutUpLeft;
+}
+
+@-webkit-keyframes rotateOutUpRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 90deg);
+    transform: rotate3d(0, 0, 1, 90deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOutUpRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 90deg);
+    transform: rotate3d(0, 0, 1, 90deg);
+    opacity: 0;
+  }
+}
+
+.rotateOutUpRight {
+  -webkit-animation-name: rotateOutUpRight;
+  animation-name: rotateOutUpRight;
+}
+
+@-webkit-keyframes hinge {
+  0% {
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  20%, 60% {
+    -webkit-transform: rotate3d(0, 0, 1, 80deg);
+    transform: rotate3d(0, 0, 1, 80deg);
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  40%, 80% {
+    -webkit-transform: rotate3d(0, 0, 1, 60deg);
+    transform: rotate3d(0, 0, 1, 60deg);
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: translate3d(0, 700px, 0);
+    transform: translate3d(0, 700px, 0);
+    opacity: 0;
+  }
+}
+
+@keyframes hinge {
+  0% {
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  20%, 60% {
+    -webkit-transform: rotate3d(0, 0, 1, 80deg);
+    transform: rotate3d(0, 0, 1, 80deg);
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  40%, 80% {
+    -webkit-transform: rotate3d(0, 0, 1, 60deg);
+    transform: rotate3d(0, 0, 1, 60deg);
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+    opacity: 1;
+  }
+
+  100% {
+    -webkit-transform: translate3d(0, 700px, 0);
+    transform: translate3d(0, 700px, 0);
+    opacity: 0;
+  }
+}
+
+.hinge {
+  -webkit-animation-name: hinge;
+  animation-name: hinge;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes rollIn {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes rollIn {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+  }
+
+  100% {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.rollIn {
+  -webkit-animation-name: rollIn;
+  animation-name: rollIn;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes rollOut {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+  }
+}
+
+@keyframes rollOut {
+  from {
+    opacity: 1;
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+  }
+}
+
+.rollOut {
+  -webkit-animation-name: rollOut;
+  animation-name: rollOut;
+}
+
+@-webkit-keyframes zoomIn {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  50% {
+    opacity: 1;
+  }
+}
+
+@keyframes zoomIn {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  50% {
+    opacity: 1;
+  }
+}
+
+.zoomIn {
+  -webkit-animation-name: zoomIn;
+  animation-name: zoomIn;
+}
+
+@-webkit-keyframes zoomInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+.zoomInDown {
+  -webkit-animation-name: zoomInDown;
+  animation-name: zoomInDown;
+}
+
+@-webkit-keyframes zoomInLeft {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+    transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomInLeft {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+    transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+.zoomInLeft {
+  -webkit-animation-name: zoomInLeft;
+  animation-name: zoomInLeft;
+}
+
+@-webkit-keyframes zoomInRight {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+    transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomInRight {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+    transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+.zoomInRight {
+  -webkit-animation-name: zoomInRight;
+  animation-name: zoomInRight;
+}
+
+@-webkit-keyframes zoomInUp {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomInUp {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+.zoomInUp {
+  -webkit-animation-name: zoomInUp;
+  animation-name: zoomInUp;
+}
+
+@-webkit-keyframes zoomOut {
+  from {
+    opacity: 1;
+  }
+
+  50% {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  100% {
+    opacity: 0;
+  }
+}
+
+@keyframes zoomOut {
+  from {
+    opacity: 1;
+  }
+
+  50% {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  100% {
+    opacity: 0;
+  }
+}
+
+.zoomOut {
+  -webkit-animation-name: zoomOut;
+  animation-name: zoomOut;
+}
+
+@-webkit-keyframes zoomOutDown {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+    -webkit-transform-origin: center bottom;
+    transform-origin: center bottom;
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomOutDown {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+    -webkit-transform-origin: center bottom;
+    transform-origin: center bottom;
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+.zoomOutDown {
+  -webkit-animation-name: zoomOutDown;
+  animation-name: zoomOutDown;
+}
+
+@-webkit-keyframes zoomOutLeft {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: scale(.1) translate3d(-2000px, 0, 0);
+    transform: scale(.1) translate3d(-2000px, 0, 0);
+    -webkit-transform-origin: left center;
+    transform-origin: left center;
+  }
+}
+
+@keyframes zoomOutLeft {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: scale(.1) translate3d(-2000px, 0, 0);
+    transform: scale(.1) translate3d(-2000px, 0, 0);
+    -webkit-transform-origin: left center;
+    transform-origin: left center;
+  }
+}
+
+.zoomOutLeft {
+  -webkit-animation-name: zoomOutLeft;
+  animation-name: zoomOutLeft;
+}
+
+@-webkit-keyframes zoomOutRight {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: scale(.1) translate3d(2000px, 0, 0);
+    transform: scale(.1) translate3d(2000px, 0, 0);
+    -webkit-transform-origin: right center;
+    transform-origin: right center;
+  }
+}
+
+@keyframes zoomOutRight {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: scale(.1) translate3d(2000px, 0, 0);
+    transform: scale(.1) translate3d(2000px, 0, 0);
+    -webkit-transform-origin: right center;
+    transform-origin: right center;
+  }
+}
+
+.zoomOutRight {
+  -webkit-animation-name: zoomOutRight;
+  animation-name: zoomOutRight;
+}
+
+@-webkit-keyframes zoomOutUp {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+    -webkit-transform-origin: center bottom;
+    transform-origin: center bottom;
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomOutUp {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  100% {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+    -webkit-transform-origin: center bottom;
+    transform-origin: center bottom;
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+.zoomOutUp {
+  -webkit-animation-name: zoomOutUp;
+  animation-name: zoomOutUp;
+}
+
+@-webkit-keyframes slideInDown {
+  from {
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+    visibility: visible;
+  }
+
+  100% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+@keyframes slideInDown {
+  from {
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+    visibility: visible;
+  }
+
+  100% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+.slideInDown {
+  -webkit-animation-name: slideInDown;
+  animation-name: slideInDown;
+}
+
+@-webkit-keyframes slideInLeft {
+  from {
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+    visibility: visible;
+  }
+
+  100% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+@keyframes slideInLeft {
+  from {
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+    visibility: visible;
+  }
+
+  100% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+.slideInLeft {
+  -webkit-animation-name: slideInLeft;
+  animation-name: slideInLeft;
+}
+
+@-webkit-keyframes slideInRight {
+  from {
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+    visibility: visible;
+  }
+
+  100% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+@keyframes slideInRight {
+  from {
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+    visibility: visible;
+  }
+
+  100% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+.slideInRight {
+  -webkit-animation-name: slideInRight;
+  animation-name: slideInRight;
+}
+
+@-webkit-keyframes slideInUp {
+  from {
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+    visibility: visible;
+  }
+
+  100% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+@keyframes slideInUp {
+  from {
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+    visibility: visible;
+  }
+
+  100% {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+.slideInUp {
+  -webkit-animation-name: slideInUp;
+  animation-name: slideInUp;
+}
+
+@-webkit-keyframes slideOutDown {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  100% {
+    visibility: hidden;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+
+@keyframes slideOutDown {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  100% {
+    visibility: hidden;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+
+.slideOutDown {
+  -webkit-animation-name: slideOutDown;
+  animation-name: slideOutDown;
+}
+
+@-webkit-keyframes slideOutLeft {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  100% {
+    visibility: hidden;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+}
+
+@keyframes slideOutLeft {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  100% {
+    visibility: hidden;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+}
+
+.slideOutLeft {
+  -webkit-animation-name: slideOutLeft;
+  animation-name: slideOutLeft;
+}
+
+@-webkit-keyframes slideOutRight {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  100% {
+    visibility: hidden;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+}
+
+@keyframes slideOutRight {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  100% {
+    visibility: hidden;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+}
+
+.slideOutRight {
+  -webkit-animation-name: slideOutRight;
+  animation-name: slideOutRight;
+}
+
+@-webkit-keyframes slideOutUp {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  100% {
+    visibility: hidden;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+
+@keyframes slideOutUp {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  100% {
+    visibility: hidden;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+
+.slideOutUp {
+  -webkit-animation-name: slideOutUp;
+  animation-name: slideOutUp;
+}
\ No newline at end of file
diff --git a/public/bower_components/blockUI/jquery.blockUI.js b/public/bower_components/blockUI/jquery.blockUI.js
new file mode 100644
index 0000000..90ce5d6
--- /dev/null
+++ b/public/bower_components/blockUI/jquery.blockUI.js
@@ -0,0 +1,620 @@
+/*!
+ * jQuery blockUI plugin
+ * Version 2.70.0-2014.11.23
+ * Requires jQuery v1.7 or later
+ *
+ * Examples at: http://malsup.com/jquery/block/
+ * Copyright (c) 2007-2013 M. Alsup
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * Thanks to Amir-Hossein Sobhi for some excellent contributions!
+ */
+
+;(function() {
+/*jshint eqeqeq:false curly:false latedef:false */
+"use strict";
+
+	function setup($) {
+		$.fn._fadeIn = $.fn.fadeIn;
+
+		var noOp = $.noop || function() {};
+
+		// this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle
+		// confusing userAgent strings on Vista)
+		var msie = /MSIE/.test(navigator.userAgent);
+		var ie6  = /MSIE 6.0/.test(navigator.userAgent) && ! /MSIE 8.0/.test(navigator.userAgent);
+		var mode = document.documentMode || 0;
+		var setExpr = $.isFunction( document.createElement('div').style.setExpression );
+
+		// global $ methods for blocking/unblocking the entire page
+		$.blockUI   = function(opts) { install(window, opts); };
+		$.unblockUI = function(opts) { remove(window, opts); };
+
+		// convenience method for quick growl-like notifications  (http://www.google.com/search?q=growl)
+		$.growlUI = function(title, message, timeout, onClose) {
+			var $m = $('<div class="growlUI"></div>');
+			if (title) $m.append('<h1>'+title+'</h1>');
+			if (message) $m.append('<h2>'+message+'</h2>');
+			if (timeout === undefined) timeout = 3000;
+
+			// Added by konapun: Set timeout to 30 seconds if this growl is moused over, like normal toast notifications
+			var callBlock = function(opts) {
+				opts = opts || {};
+
+				$.blockUI({
+					message: $m,
+					fadeIn : typeof opts.fadeIn  !== 'undefined' ? opts.fadeIn  : 700,
+					fadeOut: typeof opts.fadeOut !== 'undefined' ? opts.fadeOut : 1000,
+					timeout: typeof opts.timeout !== 'undefined' ? opts.timeout : timeout,
+					centerY: false,
+					showOverlay: false,
+					onUnblock: onClose,
+					css: $.blockUI.defaults.growlCSS
+				});
+			};
+
+			callBlock();
+			var nonmousedOpacity = $m.css('opacity');
+			$m.mouseover(function() {
+				callBlock({
+					fadeIn: 0,
+					timeout: 30000
+				});
+
+				var displayBlock = $('.blockMsg');
+				displayBlock.stop(); // cancel fadeout if it has started
+				displayBlock.fadeTo(300, 1); // make it easier to read the message by removing transparency
+			}).mouseout(function() {
+				$('.blockMsg').fadeOut(1000);
+			});
+			// End konapun additions
+		};
+
+		// plugin method for blocking element content
+		$.fn.block = function(opts) {
+			if ( this[0] === window ) {
+				$.blockUI( opts );
+				return this;
+			}
+			var fullOpts = $.extend({}, $.blockUI.defaults, opts || {});
+			this.each(function() {
+				var $el = $(this);
+				if (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked'))
+					return;
+				$el.unblock({ fadeOut: 0 });
+			});
+
+			return this.each(function() {
+				if ($.css(this,'position') == 'static') {
+					this.style.position = 'relative';
+					$(this).data('blockUI.static', true);
+				}
+				this.style.zoom = 1; // force 'hasLayout' in ie
+				install(this, opts);
+			});
+		};
+
+		// plugin method for unblocking element content
+		$.fn.unblock = function(opts) {
+			if ( this[0] === window ) {
+				$.unblockUI( opts );
+				return this;
+			}
+			return this.each(function() {
+				remove(this, opts);
+			});
+		};
+
+		$.blockUI.version = 2.70; // 2nd generation blocking at no extra cost!
+
+		// override these in your code to change the default behavior and style
+		$.blockUI.defaults = {
+			// message displayed when blocking (use null for no message)
+			message:  '<h1>Please wait...</h1>',
+
+			title: null,		// title string; only used when theme == true
+			draggable: true,	// only used when theme == true (requires jquery-ui.js to be loaded)
+
+			theme: false, // set to true to use with jQuery UI themes
+
+			// styles for the message when blocking; if you wish to disable
+			// these and use an external stylesheet then do this in your code:
+			// $.blockUI.defaults.css = {};
+			css: {
+				padding:	0,
+				margin:		0,
+				width:		'30%',
+				top:		'40%',
+				left:		'35%',
+				textAlign:	'center',
+				color:		'#000',
+				border:		'3px solid #aaa',
+				backgroundColor:'#fff',
+				cursor:		'wait'
+			},
+
+			// minimal style set used when themes are used
+			themedCSS: {
+				width:	'30%',
+				top:	'40%',
+				left:	'35%'
+			},
+
+			// styles for the overlay
+			overlayCSS:  {
+				backgroundColor:	'#000',
+				opacity:			0.6,
+				cursor:				'wait'
+			},
+
+			// style to replace wait cursor before unblocking to correct issue
+			// of lingering wait cursor
+			cursorReset: 'default',
+
+			// styles applied when using $.growlUI
+			growlCSS: {
+				width:		'350px',
+				top:		'10px',
+				left:		'',
+				right:		'10px',
+				border:		'none',
+				padding:	'5px',
+				opacity:	0.6,
+				cursor:		'default',
+				color:		'#fff',
+				backgroundColor: '#000',
+				'-webkit-border-radius':'10px',
+				'-moz-border-radius':	'10px',
+				'border-radius':		'10px'
+			},
+
+			// IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w
+			// (hat tip to Jorge H. N. de Vasconcelos)
+			/*jshint scripturl:true */
+			iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',
+
+			// force usage of iframe in non-IE browsers (handy for blocking applets)
+			forceIframe: false,
+
+			// z-index for the blocking overlay
+			baseZ: 1000,
+
+			// set these to true to have the message automatically centered
+			centerX: true, // <-- only effects element blocking (page block controlled via css above)
+			centerY: true,
+
+			// allow body element to be stetched in ie6; this makes blocking look better
+			// on "short" pages.  disable if you wish to prevent changes to the body height
+			allowBodyStretch: true,
+
+			// enable if you want key and mouse events to be disabled for content that is blocked
+			bindEvents: true,
+
+			// be default blockUI will supress tab navigation from leaving blocking content
+			// (if bindEvents is true)
+			constrainTabKey: true,
+
+			// fadeIn time in millis; set to 0 to disable fadeIn on block
+			fadeIn:  200,
+
+			// fadeOut time in millis; set to 0 to disable fadeOut on unblock
+			fadeOut:  400,
+
+			// time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock
+			timeout: 0,
+
+			// disable if you don't want to show the overlay
+			showOverlay: true,
+
+			// if true, focus will be placed in the first available input field when
+			// page blocking
+			focusInput: true,
+
+            // elements that can receive focus
+            focusableElements: ':input:enabled:visible',
+
+			// suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)
+			// no longer needed in 2012
+			// applyPlatformOpacityRules: true,
+
+			// callback method invoked when fadeIn has completed and blocking message is visible
+			onBlock: null,
+
+			// callback method invoked when unblocking has completed; the callback is
+			// passed the element that has been unblocked (which is the window object for page
+			// blocks) and the options that were passed to the unblock call:
+			//	onUnblock(element, options)
+			onUnblock: null,
+
+			// callback method invoked when the overlay area is clicked.
+			// setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.
+			onOverlayClick: null,
+
+			// don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493
+			quirksmodeOffsetHack: 4,
+
+			// class name of the message block
+			blockMsgClass: 'blockMsg',
+
+			// if it is already blocked, then ignore it (don't unblock and reblock)
+			ignoreIfBlocked: false
+		};
+
+		// private data and functions follow...
+
+		var pageBlock = null;
+		var pageBlockEls = [];
+
+		function install(el, opts) {
+			var css, themedCSS;
+			var full = (el == window);
+			var msg = (opts && opts.message !== undefined ? opts.message : undefined);
+			opts = $.extend({}, $.blockUI.defaults, opts || {});
+
+			if (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked'))
+				return;
+
+			opts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});
+			css = $.extend({}, $.blockUI.defaults.css, opts.css || {});
+			if (opts.onOverlayClick)
+				opts.overlayCSS.cursor = 'pointer';
+
+			themedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});
+			msg = msg === undefined ? opts.message : msg;
+
+			// remove the current block (if there is one)
+			if (full && pageBlock)
+				remove(window, {fadeOut:0});
+
+			// if an existing element is being used as the blocking content then we capture
+			// its current place in the DOM (and current display style) so we can restore
+			// it when we unblock
+			if (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {
+				var node = msg.jquery ? msg[0] : msg;
+				var data = {};
+				$(el).data('blockUI.history', data);
+				data.el = node;
+				data.parent = node.parentNode;
+				data.display = node.style.display;
+				data.position = node.style.position;
+				if (data.parent)
+					data.parent.removeChild(node);
+			}
+
+			$(el).data('blockUI.onUnblock', opts.onUnblock);
+			var z = opts.baseZ;
+
+			// blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;
+			// layer1 is the iframe layer which is used to supress bleed through of underlying content
+			// layer2 is the overlay layer which has opacity and a wait cursor (by default)
+			// layer3 is the message content that is displayed while blocking
+			var lyr1, lyr2, lyr3, s;
+			if (msie || opts.forceIframe)
+				lyr1 = $('<iframe class="blockUI" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="'+opts.iframeSrc+'"></iframe>');
+			else
+				lyr1 = $('<div class="blockUI" style="display:none"></div>');
+
+			if (opts.theme)
+				lyr2 = $('<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:'+ (z++) +';display:none"></div>');
+			else
+				lyr2 = $('<div class="blockUI blockOverlay" style="z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>');
+
+			if (opts.theme && full) {
+				s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:fixed">';
+				if ( opts.title ) {
+					s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || '&nbsp;')+'</div>';
+				}
+				s += '<div class="ui-widget-content ui-dialog-content"></div>';
+				s += '</div>';
+			}
+			else if (opts.theme) {
+				s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement ui-dialog ui-widget ui-corner-all" style="z-index:'+(z+10)+';display:none;position:absolute">';
+				if ( opts.title ) {
+					s += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">'+(opts.title || '&nbsp;')+'</div>';
+				}
+				s += '<div class="ui-widget-content ui-dialog-content"></div>';
+				s += '</div>';
+			}
+			else if (full) {
+				s = '<div class="blockUI ' + opts.blockMsgClass + ' blockPage" style="z-index:'+(z+10)+';display:none;position:fixed"></div>';
+			}
+			else {
+				s = '<div class="blockUI ' + opts.blockMsgClass + ' blockElement" style="z-index:'+(z+10)+';display:none;position:absolute"></div>';
+			}
+			lyr3 = $(s);
+
+			// if we have a message, style it
+			if (msg) {
+				if (opts.theme) {
+					lyr3.css(themedCSS);
+					lyr3.addClass('ui-widget-content');
+				}
+				else
+					lyr3.css(css);
+			}
+
+			// style the overlay
+			if (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)
+				lyr2.css(opts.overlayCSS);
+			lyr2.css('position', full ? 'fixed' : 'absolute');
+
+			// make iframe layer transparent in IE
+			if (msie || opts.forceIframe)
+				lyr1.css('opacity',0.0);
+
+			//$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);
+			var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);
+			$.each(layers, function() {
+				this.appendTo($par);
+			});
+
+			if (opts.theme && opts.draggable && $.fn.draggable) {
+				lyr3.draggable({
+					handle: '.ui-dialog-titlebar',
+					cancel: 'li'
+				});
+			}
+
+			// ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)
+			var expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);
+			if (ie6 || expr) {
+				// give body 100% height
+				if (full && opts.allowBodyStretch && $.support.boxModel)
+					$('html,body').css('height','100%');
+
+				// fix ie6 issue when blocked element has a border width
+				if ((ie6 || !$.support.boxModel) && !full) {
+					var t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');
+					var fixT = t ? '(0 - '+t+')' : 0;
+					var fixL = l ? '(0 - '+l+')' : 0;
+				}
+
+				// simulate fixed position
+				$.each(layers, function(i,o) {
+					var s = o[0].style;
+					s.position = 'absolute';
+					if (i < 2) {
+						if (full)
+							s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"');
+						else
+							s.setExpression('height','this.parentNode.offsetHeight + "px"');
+						if (full)
+							s.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"');
+						else
+							s.setExpression('width','this.parentNode.offsetWidth + "px"');
+						if (fixL) s.setExpression('left', fixL);
+						if (fixT) s.setExpression('top', fixT);
+					}
+					else if (opts.centerY) {
+						if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');
+						s.marginTop = 0;
+					}
+					else if (!opts.centerY && full) {
+						var top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;
+						var expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"';
+						s.setExpression('top',expression);
+					}
+				});
+			}
+
+			// show the message
+			if (msg) {
+				if (opts.theme)
+					lyr3.find('.ui-widget-content').append(msg);
+				else
+					lyr3.append(msg);
+				if (msg.jquery || msg.nodeType)
+					$(msg).show();
+			}
+
+			if ((msie || opts.forceIframe) && opts.showOverlay)
+				lyr1.show(); // opacity is zero
+			if (opts.fadeIn) {
+				var cb = opts.onBlock ? opts.onBlock : noOp;
+				var cb1 = (opts.showOverlay && !msg) ? cb : noOp;
+				var cb2 = msg ? cb : noOp;
+				if (opts.showOverlay)
+					lyr2._fadeIn(opts.fadeIn, cb1);
+				if (msg)
+					lyr3._fadeIn(opts.fadeIn, cb2);
+			}
+			else {
+				if (opts.showOverlay)
+					lyr2.show();
+				if (msg)
+					lyr3.show();
+				if (opts.onBlock)
+					opts.onBlock.bind(lyr3)();
+			}
+
+			// bind key and mouse events
+			bind(1, el, opts);
+
+			if (full) {
+				pageBlock = lyr3[0];
+				pageBlockEls = $(opts.focusableElements,pageBlock);
+				if (opts.focusInput)
+					setTimeout(focus, 20);
+			}
+			else
+				center(lyr3[0], opts.centerX, opts.centerY);
+
+			if (opts.timeout) {
+				// auto-unblock
+				var to = setTimeout(function() {
+					if (full)
+						$.unblockUI(opts);
+					else
+						$(el).unblock(opts);
+				}, opts.timeout);
+				$(el).data('blockUI.timeout', to);
+			}
+		}
+
+		// remove the block
+		function remove(el, opts) {
+			var count;
+			var full = (el == window);
+			var $el = $(el);
+			var data = $el.data('blockUI.history');
+			var to = $el.data('blockUI.timeout');
+			if (to) {
+				clearTimeout(to);
+				$el.removeData('blockUI.timeout');
+			}
+			opts = $.extend({}, $.blockUI.defaults, opts || {});
+			bind(0, el, opts); // unbind events
+
+			if (opts.onUnblock === null) {
+				opts.onUnblock = $el.data('blockUI.onUnblock');
+				$el.removeData('blockUI.onUnblock');
+			}
+
+			var els;
+			if (full) // crazy selector to handle odd field errors in ie6/7
+				els = $('body').children().filter('.blockUI').add('body > .blockUI');
+			else
+				els = $el.find('>.blockUI');
+
+			// fix cursor issue
+			if ( opts.cursorReset ) {
+				if ( els.length > 1 )
+					els[1].style.cursor = opts.cursorReset;
+				if ( els.length > 2 )
+					els[2].style.cursor = opts.cursorReset;
+			}
+
+			if (full)
+				pageBlock = pageBlockEls = null;
+
+			if (opts.fadeOut) {
+				count = els.length;
+				els.stop().fadeOut(opts.fadeOut, function() {
+					if ( --count === 0)
+						reset(els,data,opts,el);
+				});
+			}
+			else
+				reset(els, data, opts, el);
+		}
+
+		// move blocking element back into the DOM where it started
+		function reset(els,data,opts,el) {
+			var $el = $(el);
+			if ( $el.data('blockUI.isBlocked') )
+				return;
+
+			els.each(function(i,o) {
+				// remove via DOM calls so we don't lose event handlers
+				if (this.parentNode)
+					this.parentNode.removeChild(this);
+			});
+
+			if (data && data.el) {
+				data.el.style.display = data.display;
+				data.el.style.position = data.position;
+				data.el.style.cursor = 'default'; // #59
+				if (data.parent)
+					data.parent.appendChild(data.el);
+				$el.removeData('blockUI.history');
+			}
+
+			if ($el.data('blockUI.static')) {
+				$el.css('position', 'static'); // #22
+			}
+
+			if (typeof opts.onUnblock == 'function')
+				opts.onUnblock(el,opts);
+
+			// fix issue in Safari 6 where block artifacts remain until reflow
+			var body = $(document.body), w = body.width(), cssW = body[0].style.width;
+			body.width(w-1).width(w);
+			body[0].style.width = cssW;
+		}
+
+		// bind/unbind the handler
+		function bind(b, el, opts) {
+			var full = el == window, $el = $(el);
+
+			// don't bother unbinding if there is nothing to unbind
+			if (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))
+				return;
+
+			$el.data('blockUI.isBlocked', b);
+
+			// don't bind events when overlay is not in use or if bindEvents is false
+			if (!full || !opts.bindEvents || (b && !opts.showOverlay))
+				return;
+
+			// bind anchors and inputs for mouse and key events
+			var events = 'mousedown mouseup keydown keypress keyup touchstart touchend touchmove';
+			if (b)
+				$(document).bind(events, opts, handler);
+			else
+				$(document).unbind(events, handler);
+
+		// former impl...
+		//		var $e = $('a,:input');
+		//		b ? $e.bind(events, opts, handler) : $e.unbind(events, handler);
+		}
+
+		// event handler to suppress keyboard/mouse events when blocking
+		function handler(e) {
+			// allow tab navigation (conditionally)
+			if (e.type === 'keydown' && e.keyCode && e.keyCode == 9) {
+				if (pageBlock && e.data.constrainTabKey) {
+					var els = pageBlockEls;
+					var fwd = !e.shiftKey && e.target === els[els.length-1];
+					var back = e.shiftKey && e.target === els[0];
+					if (fwd || back) {
+						setTimeout(function(){focus(back);},10);
+						return false;
+					}
+				}
+			}
+			var opts = e.data;
+			var target = $(e.target);
+			if (target.hasClass('blockOverlay') && opts.onOverlayClick)
+				opts.onOverlayClick(e);
+
+			// allow events within the message content
+			if (target.parents('div.' + opts.blockMsgClass).length > 0)
+				return true;
+
+			// allow events for content that is not being blocked
+			return target.parents().children().filter('div.blockUI').length === 0;
+		}
+
+		function focus(back) {
+			if (!pageBlockEls)
+				return;
+			var e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];
+			if (e)
+				e.focus();
+		}
+
+		function center(el, x, y) {
+			var p = el.parentNode, s = el.style;
+			var l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');
+			var t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');
+			if (x) s.left = l > 0 ? (l+'px') : '0';
+			if (y) s.top  = t > 0 ? (t+'px') : '0';
+		}
+
+		function sz(el, p) {
+			return parseInt($.css(el,p),10)||0;
+		}
+
+	}
+
+
+	/*global define:true */
+	if (typeof define === 'function' && define.amd && define.amd.jQuery) {
+		define(['jquery'], setup);
+	} else {
+		setup(jQuery);
+	}
+
+})();
diff --git a/public/bower_components/bootstrap-hover-dropdown/bootstrap-hover-dropdown.js b/public/bower_components/bootstrap-hover-dropdown/bootstrap-hover-dropdown.js
new file mode 100644
index 0000000..28b38b5
--- /dev/null
+++ b/public/bower_components/bootstrap-hover-dropdown/bootstrap-hover-dropdown.js
@@ -0,0 +1,124 @@
+/**
+ * @preserve
+ * Project: Bootstrap Hover Dropdown
+ * Author: Cameron Spear
+ * Version: v2.1.3
+ * Contributors: Mattia Larentis
+ * Dependencies: Bootstrap's Dropdown plugin, jQuery
+ * Description: A simple plugin to enable Bootstrap dropdowns to active on hover and provide a nice user experience.
+ * License: MIT
+ * Homepage: http://cameronspear.com/blog/bootstrap-dropdown-on-hover-plugin/
+ */
+;(function ($, window, undefined) {
+    // outside the scope of the jQuery plugin to
+    // keep track of all dropdowns
+    var $allDropdowns = $();
+
+    // if instantlyCloseOthers is true, then it will instantly
+    // shut other nav items when a new one is hovered over
+    $.fn.dropdownHover = function (options) {
+        // don't do anything if touch is supported
+        // (plugin causes some issues on mobile)
+        if('ontouchstart' in document) return this; // don't want to affect chaining
+
+        // the element we really care about
+        // is the dropdown-toggle's parent
+        $allDropdowns = $allDropdowns.add(this.parent());
+
+        return this.each(function () {
+            var $this = $(this),
+                $parent = $this.parent(),
+                defaults = {
+                    delay: 500,
+                    hoverDelay: 0,
+                    instantlyCloseOthers: true
+                },
+                data = {
+                    delay: $(this).data('delay'),
+                    hoverDelay: $(this).data('hover-delay'),
+                    instantlyCloseOthers: $(this).data('close-others')
+                },
+                showEvent   = 'show.bs.dropdown',
+                hideEvent   = 'hide.bs.dropdown',
+                // shownEvent  = 'shown.bs.dropdown',
+                // hiddenEvent = 'hidden.bs.dropdown',
+                settings = $.extend(true, {}, defaults, options, data),
+                timeout, timeoutHover;
+
+            $parent.hover(function (event) {
+                // so a neighbor can't open the dropdown
+                if(!$parent.hasClass('open') && !$this.is(event.target)) {
+                    // stop this event, stop executing any code
+                    // in this callback but continue to propagate
+                    return true;
+                }
+
+                openDropdown(event);
+            }, function () {
+                // clear timer for hover event
+                window.clearTimeout(timeoutHover)
+                timeout = window.setTimeout(function () {
+                    $this.attr('aria-expanded', 'false');
+                    $parent.removeClass('open');
+                    $this.trigger(hideEvent);
+                }, settings.delay);
+            });
+
+            // this helps with button groups!
+            $this.hover(function (event) {
+                // this helps prevent a double event from firing.
+                // see https://github.com/CWSpear/bootstrap-hover-dropdown/issues/55
+                if(!$parent.hasClass('open') && !$parent.is(event.target)) {
+                    // stop this event, stop executing any code
+                    // in this callback but continue to propagate
+                    return true;
+                }
+
+                openDropdown(event);
+            });
+
+            // handle submenus
+            $parent.find('.dropdown-submenu').each(function (){
+                var $this = $(this);
+                var subTimeout;
+                $this.hover(function () {
+                    window.clearTimeout(subTimeout);
+                    $this.children('.dropdown-menu').show();
+                    // always close submenu siblings instantly
+                    $this.siblings().children('.dropdown-menu').hide();
+                }, function () {
+                    var $submenu = $this.children('.dropdown-menu');
+                    subTimeout = window.setTimeout(function () {
+                        $submenu.hide();
+                    }, settings.delay);
+                });
+            });
+
+            function openDropdown(event) {
+                // clear dropdown timeout here so it doesnt close before it should
+                window.clearTimeout(timeout);
+                // restart hover timer
+                window.clearTimeout(timeoutHover);
+                
+                // delay for hover event.  
+                timeoutHover = window.setTimeout(function () {
+                    $allDropdowns.find(':focus').blur();
+
+                    if(settings.instantlyCloseOthers === true)
+                        $allDropdowns.removeClass('open');
+                    
+                    // clear timer for hover event
+                    window.clearTimeout(timeoutHover);
+                    $this.attr('aria-expanded', 'true');
+                    $parent.addClass('open');
+                    $this.trigger(showEvent);
+                }, settings.hoverDelay);
+            }
+        });
+    };
+
+    $(document).ready(function () {
+        // apply dropdownHover to all elements with the data-hover="dropdown" attribute
+        $('[data-hover="dropdown"]').dropdownHover();
+    });
+})(jQuery, window);
diff --git a/public/bower_components/bootstrap-select/bootstrap-select.css b/public/bower_components/bootstrap-select/bootstrap-select.css
new file mode 100644
index 0000000..c8a1a45
--- /dev/null
+++ b/public/bower_components/bootstrap-select/bootstrap-select.css
@@ -0,0 +1,272 @@
+/*!
+ * Bootstrap-select v1.7.5 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+.bootstrap-select {
+  width: 220px \0;
+  /*IE9 and below*/
+}
+.bootstrap-select > .dropdown-toggle {
+  width: 100%;
+  padding-right: 25px;
+}
+.has-error .bootstrap-select .dropdown-toggle,
+.error .bootstrap-select .dropdown-toggle {
+  border-color: #b94a48;
+}
+.bootstrap-select.fit-width {
+  width: auto !important;
+}
+.bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) {
+  width: 220px;
+}
+.bootstrap-select .dropdown-toggle:focus {
+  outline: thin dotted #333333 !important;
+  outline: 5px auto -webkit-focus-ring-color !important;
+  outline-offset: -2px;
+}
+.bootstrap-select.form-control {
+  margin-bottom: 0;
+  padding: 0;
+  border: none;
+}
+.bootstrap-select.form-control:not([class*="col-"]) {
+  width: 100%;
+}
+.bootstrap-select.form-control.input-group-btn {
+  z-index: auto;
+}
+.bootstrap-select.btn-group:not(.input-group-btn),
+.bootstrap-select.btn-group[class*="col-"] {
+  float: none;
+  display: inline-block;
+  margin-left: 0;
+}
+.bootstrap-select.btn-group.dropdown-menu-right,
+.bootstrap-select.btn-group[class*="col-"].dropdown-menu-right,
+.row .bootstrap-select.btn-group[class*="col-"].dropdown-menu-right {
+  float: right;
+}
+.form-inline .bootstrap-select.btn-group,
+.form-horizontal .bootstrap-select.btn-group,
+.form-group .bootstrap-select.btn-group {
+  margin-bottom: 0;
+}
+.form-group-lg .bootstrap-select.btn-group.form-control,
+.form-group-sm .bootstrap-select.btn-group.form-control {
+  padding: 0;
+}
+.form-inline .bootstrap-select.btn-group .form-control {
+  width: 100%;
+}
+.bootstrap-select.btn-group.disabled,
+.bootstrap-select.btn-group > .disabled {
+  cursor: not-allowed;
+}
+.bootstrap-select.btn-group.disabled:focus,
+.bootstrap-select.btn-group > .disabled:focus {
+  outline: none !important;
+}
+.bootstrap-select.btn-group.bs-container {
+  position: absolute;
+}
+.bootstrap-select.btn-group.bs-container .dropdown-menu {
+  z-index: 1060;
+}
+.bootstrap-select.btn-group .dropdown-toggle .filter-option {
+  display: inline-block;
+  overflow: hidden;
+  width: 100%;
+  text-align: left;
+}
+.bootstrap-select.btn-group .dropdown-toggle .caret {
+  position: absolute;
+  top: 50%;
+  right: 12px;
+  margin-top: -2px;
+  vertical-align: middle;
+}
+.bootstrap-select.btn-group[class*="col-"] .dropdown-toggle {
+  width: 100%;
+}
+.bootstrap-select.btn-group .dropdown-menu {
+  min-width: 100%;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.bootstrap-select.btn-group .dropdown-menu.inner {
+  position: static;
+  float: none;
+  border: 0;
+  padding: 0;
+  margin: 0;
+  border-radius: 0;
+  -webkit-box-shadow: none;
+          box-shadow: none;
+}
+.bootstrap-select.btn-group .dropdown-menu li {
+  position: relative;
+}
+.bootstrap-select.btn-group .dropdown-menu li.active small {
+  color: #fff;
+}
+.bootstrap-select.btn-group .dropdown-menu li.disabled a {
+  cursor: not-allowed;
+}
+.bootstrap-select.btn-group .dropdown-menu li a {
+  cursor: pointer;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.bootstrap-select.btn-group .dropdown-menu li a.opt {
+  position: relative;
+  padding-left: 2.25em;
+}
+.bootstrap-select.btn-group .dropdown-menu li a span.check-mark {
+  display: none;
+}
+.bootstrap-select.btn-group .dropdown-menu li a span.text {
+  display: inline-block;
+}
+.bootstrap-select.btn-group .dropdown-menu li small {
+  padding-left: 0.5em;
+}
+.bootstrap-select.btn-group .dropdown-menu .notify {
+  position: absolute;
+  bottom: 5px;
+  width: 96%;
+  margin: 0 2%;
+  min-height: 26px;
+  padding: 3px 5px;
+  background: #f5f5f5;
+  border: 1px solid #e3e3e3;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+  pointer-events: none;
+  opacity: 0.9;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.bootstrap-select.btn-group .no-results {
+  padding: 3px;
+  background: #f5f5f5;
+  margin: 0 5px;
+  white-space: nowrap;
+}
+.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option {
+  position: static;
+}
+.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret {
+  position: static;
+  top: auto;
+  margin-top: -1px;
+}
+.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark {
+  position: absolute;
+  display: inline-block;
+  right: 15px;
+  margin-top: 5px;
+}
+.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text {
+  margin-right: 34px;
+}
+.bootstrap-select.show-menu-arrow.open > .dropdown-toggle {
+  z-index: 1061;
+}
+.bootstrap-select.show-menu-arrow .dropdown-toggle:before {
+  content: '';
+  border-left: 7px solid transparent;
+  border-right: 7px solid transparent;
+  border-bottom: 7px solid rgba(204, 204, 204, 0.2);
+  position: absolute;
+  bottom: -4px;
+  left: 9px;
+  display: none;
+}
+.bootstrap-select.show-menu-arrow .dropdown-toggle:after {
+  content: '';
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid white;
+  position: absolute;
+  bottom: -4px;
+  left: 10px;
+  display: none;
+}
+.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before {
+  bottom: auto;
+  top: -3px;
+  border-top: 7px solid rgba(204, 204, 204, 0.2);
+  border-bottom: 0;
+}
+.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after {
+  bottom: auto;
+  top: -3px;
+  border-top: 6px solid white;
+  border-bottom: 0;
+}
+.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before {
+  right: 12px;
+  left: auto;
+}
+.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after {
+  right: 13px;
+  left: auto;
+}
+.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:before,
+.bootstrap-select.show-menu-arrow.open > .dropdown-toggle:after {
+  display: block;
+}
+.bs-searchbox,
+.bs-actionsbox,
+.bs-donebutton {
+  padding: 4px 8px;
+}
+.bs-actionsbox {
+  width: 100%;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.bs-actionsbox .btn-group button {
+  width: 50%;
+}
+.bs-donebutton {
+  float: left;
+  width: 100%;
+  -webkit-box-sizing: border-box;
+     -moz-box-sizing: border-box;
+          box-sizing: border-box;
+}
+.bs-donebutton .btn-group button {
+  width: 100%;
+}
+.bs-searchbox + .bs-actionsbox {
+  padding: 0 8px 4px;
+}
+.bs-searchbox .form-control {
+  margin-bottom: 0;
+  width: 100%;
+  float: none;
+}
+select.bs-select-hidden,
+select.selectpicker {
+  display: none !important;
+}
+select.mobile-device {
+  position: absolute !important;
+  top: 0;
+  left: 0;
+  display: block !important;
+  width: 100%;
+  height: 100% !important;
+  opacity: 0;
+}
+/*# sourceMappingURL=bootstrap-select.css.map */
\ No newline at end of file
diff --git a/public/bower_components/bootstrap-select/bootstrap-select.js b/public/bower_components/bootstrap-select/bootstrap-select.js
new file mode 100644
index 0000000..7d4b79f
--- /dev/null
+++ b/public/bower_components/bootstrap-select/bootstrap-select.js
@@ -0,0 +1,1660 @@
+/*!
+ * Bootstrap-select v1.7.5 (http://silviomoreto.github.io/bootstrap-select)
+ *
+ * Copyright 2013-2015 bootstrap-select
+ * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE)
+ */
+
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    // AMD. Register as an anonymous module unless amdModuleId is set
+    define(["jquery"], function (a0) {
+      return (factory(a0));
+    });
+  } else if (typeof exports === 'object') {
+    // Node. Does not work with strict CommonJS, but
+    // only CommonJS-like environments that support module.exports,
+    // like Node.
+    module.exports = factory(require("jquery"));
+  } else {
+    factory(jQuery);
+  }
+}(this, function (jQuery) {
+
+(function ($) {
+  'use strict';
+
+  //<editor-fold desc="Shims">
+  if (!String.prototype.includes) {
+    (function () {
+      'use strict'; // needed to support `apply`/`call` with `undefined`/`null`
+      var toString = {}.toString;
+      var defineProperty = (function () {
+        // IE 8 only supports `Object.defineProperty` on DOM elements
+        try {
+          var object = {};
+          var $defineProperty = Object.defineProperty;
+          var result = $defineProperty(object, object, object) && $defineProperty;
+        } catch (error) {
+        }
+        return result;
+      }());
+      var indexOf = ''.indexOf;
+      var includes = function (search) {
+        if (this == null) {
+          throw new TypeError();
+        }
+        var string = String(this);
+        if (search && toString.call(search) == '[object RegExp]') {
+          throw new TypeError();
+        }
+        var stringLength = string.length;
+        var searchString = String(search);
+        var searchLength = searchString.length;
+        var position = arguments.length > 1 ? arguments[1] : undefined;
+        // `ToInteger`
+        var pos = position ? Number(position) : 0;
+        if (pos != pos) { // better `isNaN`
+          pos = 0;
+        }
+        var start = Math.min(Math.max(pos, 0), stringLength);
+        // Avoid the `indexOf` call if no match is possible
+        if (searchLength + start > stringLength) {
+          return false;
+        }
+        return indexOf.call(string, searchString, pos) != -1;
+      };
+      if (defineProperty) {
+        defineProperty(String.prototype, 'includes', {
+          'value': includes,
+          'configurable': true,
+          'writable': true
+        });
+      } else {
+        String.prototype.includes = includes;
+      }
+    }());
+  }
+
+  if (!String.prototype.startsWith) {
+    (function () {
+      'use strict'; // needed to support `apply`/`call` with `undefined`/`null`
+      var defineProperty = (function () {
+        // IE 8 only supports `Object.defineProperty` on DOM elements
+        try {
+          var object = {};
+          var $defineProperty = Object.defineProperty;
+          var result = $defineProperty(object, object, object) && $defineProperty;
+        } catch (error) {
+        }
+        return result;
+      }());
+      var toString = {}.toString;
+      var startsWith = function (search) {
+        if (this == null) {
+          throw new TypeError();
+        }
+        var string = String(this);
+        if (search && toString.call(search) == '[object RegExp]') {
+          throw new TypeError();
+        }
+        var stringLength = string.length;
+        var searchString = String(search);
+        var searchLength = searchString.length;
+        var position = arguments.length > 1 ? arguments[1] : undefined;
+        // `ToInteger`
+        var pos = position ? Number(position) : 0;
+        if (pos != pos) { // better `isNaN`
+          pos = 0;
+        }
+        var start = Math.min(Math.max(pos, 0), stringLength);
+        // Avoid the `indexOf` call if no match is possible
+        if (searchLength + start > stringLength) {
+          return false;
+        }
+        var index = -1;
+        while (++index < searchLength) {
+          if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {
+            return false;
+          }
+        }
+        return true;
+      };
+      if (defineProperty) {
+        defineProperty(String.prototype, 'startsWith', {
+          'value': startsWith,
+          'configurable': true,
+          'writable': true
+        });
+      } else {
+        String.prototype.startsWith = startsWith;
+      }
+    }());
+  }
+
+  if (!Object.keys) {
+    Object.keys = function (
+      o, // object
+      k, // key
+      r  // result array
+      ){
+      // initialize object and result
+      r=[];
+      // iterate over object keys
+      for (k in o)
+          // fill result array with non-prototypical keys
+        r.hasOwnProperty.call(o, k) && r.push(k);
+      // return result
+      return r;
+    };
+  }
+
+  $.fn.triggerNative = function (eventName) {
+    var el = this[0],
+        event;
+
+    if (el.dispatchEvent) {
+      if (typeof Event === 'function') {
+        // For modern browsers
+        event = new Event(eventName, {
+          bubbles: true
+        });
+      } else {
+        // For IE since it doesn't support Event constructor
+        event = document.createEvent('Event');
+        event.initEvent(eventName, true, false);
+      }
+
+      el.dispatchEvent(event);
+    } else {
+      if (el.fireEvent) {
+        event = document.createEventObject();
+        event.eventType = eventName;
+        el.fireEvent('on' + eventName, event);
+      }
+
+      this.trigger(eventName);
+    }
+  };
+  //</editor-fold>
+
+  // Case insensitive contains search
+  $.expr[':'].icontains = function (obj, index, meta) {
+    var $obj = $(obj);
+    var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase();
+    return haystack.includes(meta[3].toUpperCase());
+  };
+
+  // Case insensitive begins search
+  $.expr[':'].ibegins = function (obj, index, meta) {
+    var $obj = $(obj);
+    var haystack = ($obj.data('tokens') || $obj.text()).toUpperCase();
+    return haystack.startsWith(meta[3].toUpperCase());
+  };
+
+  // Case and accent insensitive contains search
+  $.expr[':'].aicontains = function (obj, index, meta) {
+    var $obj = $(obj);
+    var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toUpperCase();
+    return haystack.includes(meta[3].toUpperCase());
+  };
+
+  // Case and accent insensitive begins search
+  $.expr[':'].aibegins = function (obj, index, meta) {
+    var $obj = $(obj);
+    var haystack = ($obj.data('tokens') || $obj.data('normalizedText') || $obj.text()).toUpperCase();
+    return haystack.startsWith(meta[3].toUpperCase());
+  };
+
+  /**
+   * Remove all diatrics from the given text.
+   * @access private
+   * @param {String} text
+   * @returns {String}
+   */
+  function normalizeToBase(text) {
+    var rExps = [
+      {re: /[\xC0-\xC6]/g, ch: "A"},
+      {re: /[\xE0-\xE6]/g, ch: "a"},
+      {re: /[\xC8-\xCB]/g, ch: "E"},
+      {re: /[\xE8-\xEB]/g, ch: "e"},
+      {re: /[\xCC-\xCF]/g, ch: "I"},
+      {re: /[\xEC-\xEF]/g, ch: "i"},
+      {re: /[\xD2-\xD6]/g, ch: "O"},
+      {re: /[\xF2-\xF6]/g, ch: "o"},
+      {re: /[\xD9-\xDC]/g, ch: "U"},
+      {re: /[\xF9-\xFC]/g, ch: "u"},
+      {re: /[\xC7-\xE7]/g, ch: "c"},
+      {re: /[\xD1]/g, ch: "N"},
+      {re: /[\xF1]/g, ch: "n"}
+    ];
+    $.each(rExps, function () {
+      text = text.replace(this.re, this.ch);
+    });
+    return text;
+  }
+
+
+  function htmlEscape(html) {
+    var escapeMap = {
+      '&': '&amp;',
+      '<': '&lt;',
+      '>': '&gt;',
+      '"': '&quot;',
+      "'": '&#x27;',
+      '`': '&#x60;'
+    };
+    var source = '(?:' + Object.keys(escapeMap).join('|') + ')',
+        testRegexp = new RegExp(source),
+        replaceRegexp = new RegExp(source, 'g'),
+        string = html == null ? '' : '' + html;
+    return testRegexp.test(string) ? string.replace(replaceRegexp, function (match) {
+      return escapeMap[match];
+    }) : string;
+  }
+
+  var Selectpicker = function (element, options, e) {
+    if (e) {
+      e.stopPropagation();
+      e.preventDefault();
+    }
+
+    this.$element = $(element);
+    this.$newElement = null;
+    this.$button = null;
+    this.$menu = null;
+    this.$lis = null;
+    this.options = options;
+
+    // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a
+    // data-attribute)
+    if (this.options.title === null) {
+      this.options.title = this.$element.attr('title');
+    }
+
+    //Expose public methods
+    this.val = Selectpicker.prototype.val;
+    this.render = Selectpicker.prototype.render;
+    this.refresh = Selectpicker.prototype.refresh;
+    this.setStyle = Selectpicker.prototype.setStyle;
+    this.selectAll = Selectpicker.prototype.selectAll;
+    this.deselectAll = Selectpicker.prototype.deselectAll;
+    this.destroy = Selectpicker.prototype.remove;
+    this.remove = Selectpicker.prototype.remove;
+    this.show = Selectpicker.prototype.show;
+    this.hide = Selectpicker.prototype.hide;
+
+    this.init();
+  };
+
+  Selectpicker.VERSION = '1.7.5';
+
+  // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both.
+  Selectpicker.DEFAULTS = {
+    noneSelectedText: 'Nothing selected',
+    noneResultsText: 'No results matched {0}',
+    countSelectedText: function (numSelected, numTotal) {
+      return (numSelected == 1) ? "{0} item selected" : "{0} items selected";
+    },
+    maxOptionsText: function (numAll, numGroup) {
+      return [
+        (numAll == 1) ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)',
+        (numGroup == 1) ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'
+      ];
+    },
+    selectAllText: 'Select All',
+    deselectAllText: 'Deselect All',
+    doneButton: false,
+    doneButtonText: 'Close',
+    multipleSeparator: ', ',
+    styleBase: 'btn',
+    style: 'btn-default',
+    size: 'auto',
+    title: null,
+    selectedTextFormat: 'values',
+    width: false,
+    container: false,
+    hideDisabled: false,
+    showSubtext: false,
+    showIcon: true,
+    showContent: true,
+    dropupAuto: true,
+    header: false,
+    liveSearch: false,
+    liveSearchPlaceholder: null,
+    liveSearchNormalize: false,
+    liveSearchStyle: 'contains',
+    actionsBox: false,
+    iconBase: 'glyphicon',
+    tickIcon: 'glyphicon-ok',
+    template: {
+      caret: '<span class="caret"></span>'
+    },
+    maxOptions: false,
+    mobile: false,
+    selectOnTab: false,
+    dropdownAlignRight: false
+  };
+
+  Selectpicker.prototype = {
+
+    constructor: Selectpicker,
+
+    init: function () {
+      var that = this,
+          id = this.$element.attr('id');
+
+      this.$element.addClass('bs-select-hidden');
+      // store originalIndex (key) and newIndex (value) in this.liObj for fast accessibility
+      // allows us to do this.$lis.eq(that.liObj[index]) instead of this.$lis.filter('[data-original-index="' + index + '"]')
+      this.liObj = {};
+      this.multiple = this.$element.prop('multiple');
+      this.autofocus = this.$element.prop('autofocus');
+      this.$newElement = this.createView();
+      this.$element.after(this.$newElement);
+      this.$button = this.$newElement.children('button');
+      this.$menu = this.$newElement.children('.dropdown-menu');
+      this.$menuInner = this.$menu.children('.inner');
+      this.$searchbox = this.$menu.find('input');
+
+      if (this.options.dropdownAlignRight)
+        this.$menu.addClass('dropdown-menu-right');
+
+      if (typeof id !== 'undefined') {
+        this.$button.attr('data-id', id);
+        $('label[for="' + id + '"]').click(function (e) {
+          e.preventDefault();
+          that.$button.focus();
+        });
+      }
+
+      this.checkDisabled();
+      this.clickListener();
+      if (this.options.liveSearch) this.liveSearchListener();
+      this.render();
+      this.setStyle();
+      this.setWidth();
+      if (this.options.container) this.selectPosition();
+      this.$menu.data('this', this);
+      this.$newElement.data('this', this);
+      if (this.options.mobile) this.mobile();
+
+      this.$newElement.on({
+        'hide.bs.dropdown': function (e) {
+          that.$element.trigger('hide.bs.select', e);
+        },
+        'hidden.bs.dropdown': function (e) {
+          that.$element.trigger('hidden.bs.select', e);
+        },
+        'show.bs.dropdown': function (e) {
+          that.$element.trigger('show.bs.select', e);
+        },
+        'shown.bs.dropdown': function (e) {
+          that.$element.trigger('shown.bs.select', e);
+        }
+      });
+
+      setTimeout(function () {
+        that.$element.trigger('loaded.bs.select');
+      });
+    },
+
+    createDropdown: function () {
+      // Options
+      // If we are multiple, then add the show-tick class by default
+      var multiple = this.multiple ? ' show-tick' : '',
+          inputGroup = this.$element.parent().hasClass('input-group') ? ' input-group-btn' : '',
+          autofocus = this.autofocus ? ' autofocus' : '';
+      // Elements
+      var header = this.options.header ? '<div class="popover-title"><button type="button" class="close" aria-hidden="true">&times;</button>' + this.options.header + '</div>' : '';
+      var searchbox = this.options.liveSearch ?
+      '<div class="bs-searchbox">' +
+      '<input type="text" class="form-control" autocomplete="off"' +
+      (null === this.options.liveSearchPlaceholder ? '' : ' placeholder="' + htmlEscape(this.options.liveSearchPlaceholder) + '"') + '>' +
+      '</div>'
+          : '';
+      var actionsbox = this.multiple && this.options.actionsBox ?
+      '<div class="bs-actionsbox">' +
+      '<div class="btn-group btn-group-sm btn-block">' +
+      '<button type="button" class="actions-btn bs-select-all btn btn-default">' +
+      this.options.selectAllText +
+      '</button>' +
+      '<button type="button" class="actions-btn bs-deselect-all btn btn-default">' +
+      this.options.deselectAllText +
+      '</button>' +
+      '</div>' +
+      '</div>'
+          : '';
+      var donebutton = this.multiple && this.options.doneButton ?
+      '<div class="bs-donebutton">' +
+      '<div class="btn-group btn-block">' +
+      '<button type="button" class="btn btn-sm btn-default">' +
+      this.options.doneButtonText +
+      '</button>' +
+      '</div>' +
+      '</div>'
+          : '';
+      var drop =
+          '<div class="btn-group bootstrap-select' + multiple + inputGroup + '">' +
+          '<button type="button" class="' + this.options.styleBase + ' dropdown-toggle" data-toggle="dropdown"' + autofocus + '>' +
+          '<span class="filter-option pull-left"></span>&nbsp;' +
+          '<span class="bs-caret">' +
+          this.options.template.caret +
+          '</span>' +
+          '</button>' +
+          '<div class="dropdown-menu open">' +
+          header +
+          searchbox +
+          actionsbox +
+          '<ul class="dropdown-menu inner" role="menu">' +
+          '</ul>' +
+          donebutton +
+          '</div>' +
+          '</div>';
+
+      return $(drop);
+    },
+
+    createView: function () {
+      var $drop = this.createDropdown(),
+          li = this.createLi();
+
+      $drop.find('ul')[0].innerHTML = li;
+      return $drop;
+    },
+
+    reloadLi: function () {
+      //Remove all children.
+      this.destroyLi();
+      //Re build
+      var li = this.createLi();
+      this.$menuInner[0].innerHTML = li;
+    },
+
+    destroyLi: function () {
+      this.$menu.find('li').remove();
+    },
+
+    createLi: function () {
+      var that = this,
+          _li = [],
+          optID = 0,
+          titleOption = document.createElement('option'),
+          liIndex = -1; // increment liIndex whenever a new <li> element is created to ensure liObj is correct
+
+      // Helper functions
+      /**
+       * @param content
+       * @param [index]
+       * @param [classes]
+       * @param [optgroup]
+       * @returns {string}
+       */
+      var generateLI = function (content, index, classes, optgroup) {
+        return '<li' +
+            ((typeof classes !== 'undefined' & '' !== classes) ? ' class="' + classes + '"' : '') +
+            ((typeof index !== 'undefined' & null !== index) ? ' data-original-index="' + index + '"' : '') +
+            ((typeof optgroup !== 'undefined' & null !== optgroup) ? 'data-optgroup="' + optgroup + '"' : '') +
+            '>' + content + '</li>';
+      };
+
+      /**
+       * @param text
+       * @param [classes]
+       * @param [inline]
+       * @param [tokens]
+       * @returns {string}
+       */
+      var generateA = function (text, classes, inline, tokens) {
+        return '<a tabindex="0"' +
+            (typeof classes !== 'undefined' ? ' class="' + classes + '"' : '') +
+            (typeof inline !== 'undefined' ? ' style="' + inline + '"' : '') +
+            (that.options.liveSearchNormalize ? ' data-normalized-text="' + normalizeToBase(htmlEscape(text)) + '"' : '') +
+            (typeof tokens !== 'undefined' || tokens !== null ? ' data-tokens="' + tokens + '"' : '') +
+            '>' + text +
+            '<span class="' + that.options.iconBase + ' ' + that.options.tickIcon + ' check-mark"></span>' +
+            '</a>';
+      };
+
+      if (this.options.title && !this.multiple) {
+        // this option doesn't create a new <li> element, but does add a new option, so liIndex is decreased
+        // since liObj is recalculated on every refresh, liIndex needs to be decreased even if the titleOption is already appended
+        liIndex--;
+
+        if (!this.$element.find('.bs-title-option').length) {
+          // Use native JS to prepend option (faster)
+          var element = this.$element[0];
+          titleOption.className = 'bs-title-option';
+          titleOption.appendChild(document.createTextNode(this.options.title));
+          titleOption.value = '';
+          element.insertBefore(titleOption, element.firstChild);
+          // Check if selected attribute is already set on an option. If not, select the titleOption option.
+          if ($(element.options[element.selectedIndex]).attr('selected') === undefined) titleOption.selected = true;
+        }
+      }
+
+      this.$element.find('option').each(function (index) {
+        var $this = $(this);
+
+        liIndex++;
+
+        if ($this.hasClass('bs-title-option')) return;
+
+        // Get the class and text for the option
+        var optionClass = this.className || '',
+            inline = this.style.cssText,
+            text = $this.data('content') ? $this.data('content') : $this.html(),
+            tokens = $this.data('tokens') ? $this.data('tokens') : null,
+            subtext = typeof $this.data('subtext') !== 'undefined' ? '<small class="text-muted">' + $this.data('subtext') + '</small>' : '',
+            icon = typeof $this.data('icon') !== 'undefined' ? '<span class="' + that.options.iconBase + ' ' + $this.data('icon') + '"></span> ' : '',
+            isDisabled = this.disabled || (this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled);
+
+        if (icon !== '' && isDisabled) {
+          icon = '<span>' + icon + '</span>';
+        }
+
+        if (that.options.hideDisabled && isDisabled) {
+          liIndex--;
+          return;
+        }
+
+        if (!$this.data('content')) {
+          // Prepend any icon and append any subtext to the main text.
+          text = icon + '<span class="text">' + text + subtext + '</span>';
+        }
+
+        if (this.parentNode.tagName === 'OPTGROUP' && $this.data('divider') !== true) {
+          var optGroupClass = ' ' + this.parentNode.className || '';
+
+          if ($this.index() === 0) { // Is it the first option of the optgroup?
+            optID += 1;
+
+            // Get the opt group label
+            var label = this.parentNode.label,
+                labelSubtext = typeof $this.parent().data('subtext') !== 'undefined' ? '<small class="text-muted">' + $this.parent().data('subtext') + '</small>' : '',
+                labelIcon = $this.parent().data('icon') ? '<span class="' + that.options.iconBase + ' ' + $this.parent().data('icon') + '"></span> ' : '';
+
+            label = labelIcon + '<span class="text">' + label + labelSubtext + '</span>';
+
+            if (index !== 0 && _li.length > 0) { // Is it NOT the first option of the select && are there elements in the dropdown?
+              liIndex++;
+              _li.push(generateLI('', null, 'divider', optID + 'div'));
+            }
+            liIndex++;
+            _li.push(generateLI(label, null, 'dropdown-header' + optGroupClass, optID));
+          }
+          _li.push(generateLI(generateA(text, 'opt ' + optionClass + optGroupClass, inline, tokens), index, '', optID));
+        } else if ($this.data('divider') === true) {
+          _li.push(generateLI('', index, 'divider'));
+        } else if ($this.data('hidden') === true) {
+          _li.push(generateLI(generateA(text, optionClass, inline, tokens), index, 'hidden is-hidden'));
+        } else {
+          if (this.previousElementSibling && this.previousElementSibling.tagName === 'OPTGROUP') {
+            liIndex++;
+            _li.push(generateLI('', null, 'divider', optID + 'div'));
+          }
+          _li.push(generateLI(generateA(text, optionClass, inline, tokens), index));
+        }
+
+        that.liObj[index] = liIndex;
+      });
+
+      //If we are not multiple, we don't have a selected item, and we don't have a title, select the first element so something is set in the button
+      if (!this.multiple && this.$element.find('option:selected').length === 0 && !this.options.title) {
+        this.$element.find('option').eq(0).prop('selected', true).attr('selected', 'selected');
+      }
+
+      return _li.join('');
+    },
+
+    findLis: function () {
+      if (this.$lis == null) this.$lis = this.$menu.find('li');
+      return this.$lis;
+    },
+
+    /**
+     * @param [updateLi] defaults to true
+     */
+    render: function (updateLi) {
+      var that = this,
+          notDisabled;
+
+      //Update the LI to match the SELECT
+      if (updateLi !== false) {
+        this.$element.find('option').each(function (index) {
+          var $lis = that.findLis().eq(that.liObj[index]);
+
+          that.setDisabled(index, this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled, $lis);
+          that.setSelected(index, this.selected, $lis);
+        });
+      }
+
+      this.tabIndex();
+
+      var selectedItems = this.$element.find('option').map(function () {
+        if (this.selected) {
+          if (that.options.hideDisabled && (this.disabled || this.parentNode.tagName === 'OPTGROUP' && this.parentNode.disabled)) return;
+
+          var $this = $(this),
+              icon = $this.data('icon') && that.options.showIcon ? '<i class="' + that.options.iconBase + ' ' + $this.data('icon') + '"></i> ' : '',
+              subtext;
+
+          if (that.options.showSubtext && $this.data('subtext') && !that.multiple) {
+            subtext = ' <small class="text-muted">' + $this.data('subtext') + '</small>';
+          } else {
+            subtext = '';
+          }
+          if (typeof $this.attr('title') !== 'undefined') {
+            return $this.attr('title');
+          } else if ($this.data('content') && that.options.showContent) {
+            return $this.data('content');
+          } else {
+            return icon + $this.html() + subtext;
+          }
+        }
+      }).toArray();
+
+      //Fixes issue in IE10 occurring when no default option is selected and at least one option is disabled
+      //Convert all the values into a comma delimited string
+      var title = !this.multiple ? selectedItems[0] : selectedItems.join(this.options.multipleSeparator);
+
+      //If this is multi select, and the selectText type is count, the show 1 of 2 selected etc..
+      if (this.multiple && this.options.selectedTextFormat.indexOf('count') > -1) {
+        var max = this.options.selectedTextFormat.split('>');
+        if ((max.length > 1 && selectedItems.length > max[1]) || (max.length == 1 && selectedItems.length >= 2)) {
+          notDisabled = this.options.hideDisabled ? ', [disabled]' : '';
+          var totalCount = this.$element.find('option').not('[data-divider="true"], [data-hidden="true"]' + notDisabled).length,
+              tr8nText = (typeof this.options.countSelectedText === 'function') ? this.options.countSelectedText(selectedItems.length, totalCount) : this.options.countSelectedText;
+          title = tr8nText.replace('{0}', selectedItems.length.toString()).replace('{1}', totalCount.toString());
+        }
+      }
+
+      if (this.options.title == undefined) {
+        this.options.title = this.$element.attr('title');
+      }
+
+      if (this.options.selectedTextFormat == 'static') {
+        title = this.options.title;
+      }
+
+      //If we dont have a title, then use the default, or if nothing is set at all, use the not selected text
+      if (!title) {
+        title = typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText;
+      }
+
+      //strip all html-tags and trim the result
+      this.$button.attr('title', $.trim(title.replace(/<[^>]*>?/g, '')));
+      this.$button.children('.filter-option').html(title);
+
+      this.$element.trigger('rendered.bs.select');
+    },
+
+    /**
+     * @param [style]
+     * @param [status]
+     */
+    setStyle: function (style, status) {
+      if (this.$element.attr('class')) {
+        this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\[.*\]/gi, ''));
+      }
+
+      var buttonClass = style ? style : this.options.style;
+
+      if (status == 'add') {
+        this.$button.addClass(buttonClass);
+      } else if (status == 'remove') {
+        this.$button.removeClass(buttonClass);
+      } else {
+        this.$button.removeClass(this.options.style);
+        this.$button.addClass(buttonClass);
+      }
+    },
+
+    liHeight: function (refresh) {
+      if (!refresh && (this.options.size === false || this.sizeInfo)) return;
+
+      var newElement = document.createElement('div'),
+          menu = document.createElement('div'),
+          menuInner = document.createElement('ul'),
+          divider = document.createElement('li'),
+          li = document.createElement('li'),
+          a = document.createElement('a'),
+          text = document.createElement('span'),
+          header = this.options.header ? this.$menu.find('.popover-title')[0].cloneNode(true) : null,
+          search = this.options.liveSearch ? document.createElement('div') : null,
+          actions = this.options.actionsBox && this.multiple ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null,
+          doneButton = this.options.doneButton && this.multiple ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null;
+
+      text.className = 'text';
+      newElement.className = this.$menu[0].parentNode.className + ' open';
+      menu.className = 'dropdown-menu open';
+      menuInner.className = 'dropdown-menu inner';
+      divider.className = 'divider';
+
+      text.appendChild(document.createTextNode('Inner text'));
+      a.appendChild(text);
+      li.appendChild(a);
+      menuInner.appendChild(li);
+      menuInner.appendChild(divider);
+      if (header) menu.appendChild(header);
+      if (search) {
+        // create a span instead of input as creating an input element is slower
+        var input = document.createElement('span');
+        search.className = 'bs-searchbox';
+        input.className = 'form-control';
+        search.appendChild(input);
+        menu.appendChild(search);
+      }
+      if (actions) menu.appendChild(actions);
+      menu.appendChild(menuInner);
+      if (doneButton) menu.appendChild(doneButton);
+      newElement.appendChild(menu);
+
+      document.body.appendChild(newElement);
+
+      var liHeight = a.offsetHeight,
+          headerHeight = header ? header.offsetHeight : 0,
+          searchHeight = search ? search.offsetHeight : 0,
+          actionsHeight = actions ? actions.offsetHeight : 0,
+          doneButtonHeight = doneButton ? doneButton.offsetHeight : 0,
+          dividerHeight = $(divider).outerHeight(true),
+          // fall back to jQuery if getComputedStyle is not supported
+          menuStyle = typeof getComputedStyle === 'function' ? getComputedStyle(menu) : false,
+          $menu = menuStyle ? null : $(menu),
+          menuPadding = parseInt(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) +
+                        parseInt(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) +
+                        parseInt(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) +
+                        parseInt(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth')),
+          menuExtras =  menuPadding +
+                        parseInt(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) +
+                        parseInt(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2;
+
+      document.body.removeChild(newElement);
+
+      this.sizeInfo = {
+        liHeight: liHeight,
+        headerHeight: headerHeight,
+        searchHeight: searchHeight,
+        actionsHeight: actionsHeight,
+        doneButtonHeight: doneButtonHeight,
+        dividerHeight: dividerHeight,
+        menuPadding: menuPadding,
+        menuExtras: menuExtras
+      };
+    },
+
+    setSize: function () {
+      this.findLis();
+      this.liHeight();
+
+      if (this.options.header) this.$menu.css('padding-top', 0);
+      if (this.options.size === false) return;
+
+      var that = this,
+          $menu = this.$menu,
+          $menuInner = this.$menuInner,
+          $window = $(window),
+          selectHeight = this.$newElement[0].offsetHeight,
+          liHeight = this.sizeInfo['liHeight'],
+          headerHeight = this.sizeInfo['headerHeight'],
+          searchHeight = this.sizeInfo['searchHeight'],
+          actionsHeight = this.sizeInfo['actionsHeight'],
+          doneButtonHeight = this.sizeInfo['doneButtonHeight'],
+          divHeight = this.sizeInfo['dividerHeight'],
+          menuPadding = this.sizeInfo['menuPadding'],
+          menuExtras = this.sizeInfo['menuExtras'],
+          notDisabled = this.options.hideDisabled ? '.disabled' : '',
+          menuHeight,
+          getHeight,
+          selectOffsetTop,
+          selectOffsetBot,
+          posVert = function () {
+            selectOffsetTop = that.$newElement.offset().top - $window.scrollTop();
+            selectOffsetBot = $window.height() - selectOffsetTop - selectHeight;
+          };
+
+      posVert();
+
+      if (this.options.size === 'auto') {
+        var getSize = function () {
+          var minHeight,
+              hasClass = function (className, include) {
+                return function (element) {
+                    if (include) {
+                        return (element.classList ? element.classList.contains(className) : $(element).hasClass(className));
+                    } else {
+                        return !(element.classList ? element.classList.contains(className) : $(element).hasClass(className));
+                    }
+                };
+              },
+              lis = that.$menuInner[0].getElementsByTagName('li'),
+              lisVisible = Array.prototype.filter ? Array.prototype.filter.call(lis, hasClass('hidden', false)) : that.$lis.not('.hidden'),
+              optGroup = Array.prototype.filter ? Array.prototype.filter.call(lisVisible, hasClass('dropdown-header', true)) : lisVisible.filter('.dropdown-header');
+
+          posVert();
+          menuHeight = selectOffsetBot - menuExtras;
+
+          if (that.options.container) {
+            if (!$menu.data('height')) $menu.data('height', $menu.height());
+            getHeight = $menu.data('height');
+          } else {
+            getHeight = $menu.height();
+          }
+
+          if (that.options.dropupAuto) {
+            that.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras) < getHeight);
+          }
+          if (that.$newElement.hasClass('dropup')) {
+            menuHeight = selectOffsetTop - menuExtras;
+          }
+
+          if ((lisVisible.length + optGroup.length) > 3) {
+            minHeight = liHeight * 3 + menuExtras - 2;
+          } else {
+            minHeight = 0;
+          }
+
+          $menu.css({
+            'max-height': menuHeight + 'px',
+            'overflow': 'hidden',
+            'min-height': minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px'
+          });
+          $menuInner.css({
+            'max-height': menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding + 'px',
+            'overflow-y': 'auto',
+            'min-height': Math.max(minHeight - menuPadding, 0) + 'px'
+          });
+        };
+        getSize();
+        this.$searchbox.off('input.getSize propertychange.getSize').on('input.getSize propertychange.getSize', getSize);
+        $window.off('resize.getSize scroll.getSize').on('resize.getSize scroll.getSize', getSize);
+      } else if (this.options.size && this.options.size != 'auto' && this.$lis.not(notDisabled).length > this.options.size) {
+        var optIndex = this.$lis.not('.divider').not(notDisabled).children().slice(0, this.options.size).last().parent().index(),
+            divLength = this.$lis.slice(0, optIndex + 1).filter('.divider').length;
+        menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding;
+
+        if (that.options.container) {
+          if (!$menu.data('height')) $menu.data('height', $menu.height());
+          getHeight = $menu.data('height');
+        } else {
+          getHeight = $menu.height();
+        }
+
+        if (that.options.dropupAuto) {
+          //noinspection JSUnusedAssignment
+          this.$newElement.toggleClass('dropup', selectOffsetTop > selectOffsetBot && (menuHeight - menuExtras) < getHeight);
+        }
+        $menu.css({
+          'max-height': menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight + 'px',
+          'overflow': 'hidden',
+          'min-height': ''
+        });
+        $menuInner.css({
+          'max-height': menuHeight - menuPadding + 'px',
+          'overflow-y': 'auto',
+          'min-height': ''
+        });
+      }
+    },
+
+    setWidth: function () {
+      if (this.options.width === 'auto') {
+        this.$menu.css('min-width', '0');
+
+        // Get correct width if element is hidden
+        var $selectClone = this.$menu.parent().clone().appendTo('body'),
+            $selectClone2 = this.options.container ? this.$newElement.clone().appendTo('body') : $selectClone,
+            ulWidth = $selectClone.children('.dropdown-menu').outerWidth(),
+            btnWidth = $selectClone2.css('width', 'auto').children('button').outerWidth();
+
+        $selectClone.remove();
+        $selectClone2.remove();
+
+        // Set width to whatever's larger, button title or longest option
+        this.$newElement.css('width', Math.max(ulWidth, btnWidth) + 'px');
+      } else if (this.options.width === 'fit') {
+        // Remove inline min-width so width can be changed from 'auto'
+        this.$menu.css('min-width', '');
+        this.$newElement.css('width', '').addClass('fit-width');
+      } else if (this.options.width) {
+        // Remove inline min-width so width can be changed from 'auto'
+        this.$menu.css('min-width', '');
+        this.$newElement.css('width', this.options.width);
+      } else {
+        // Remove inline min-width/width so width can be changed
+        this.$menu.css('min-width', '');
+        this.$newElement.css('width', '');
+      }
+      // Remove fit-width class if width is changed programmatically
+      if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') {
+        this.$newElement.removeClass('fit-width');
+      }
+    },
+
+    selectPosition: function () {
+      var that = this,
+          $drop = $('<div class="bs-container" />'),
+          pos,
+          actualHeight,
+          getPlacement = function ($element) {
+            $drop.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass('dropup', $element.hasClass('dropup'));
+            pos = $element.offset();
+            actualHeight = $element.hasClass('dropup') ? 0 : $element[0].offsetHeight;
+            $drop.css({
+              'top': pos.top + actualHeight,
+              'left': pos.left,
+              'width': $element[0].offsetWidth
+            });
+          };
+
+      this.$newElement.on('click', function () {
+        if (that.isDisabled()) {
+          return;
+        }
+        getPlacement($(this));
+        $drop.appendTo(that.options.container);
+        $drop.toggleClass('open', !$(this).hasClass('open'));
+        $drop.append(that.$menu);
+      });
+
+      $(window).on('resize scroll', function () {
+        getPlacement(that.$newElement);
+      });
+
+      this.$element.on('hide.bs.select', function () {
+        that.$menu.data('height', that.$menu.height());
+        $drop.detach();
+      });
+    },
+
+    setSelected: function (index, selected, $lis) {
+      if (!$lis) {
+        $lis = this.findLis().eq(this.liObj[index]);
+      }
+
+      $lis.toggleClass('selected', selected);
+    },
+
+    setDisabled: function (index, disabled, $lis) {
+      if (!$lis) {
+        $lis = this.findLis().eq(this.liObj[index]);
+      }
+
+      if (disabled) {
+        $lis.addClass('disabled').children('a').attr('href', '#').attr('tabindex', -1);
+      } else {
+        $lis.removeClass('disabled').children('a').removeAttr('href').attr('tabindex', 0);
+      }
+    },
+
+    isDisabled: function () {
+      return this.$element[0].disabled;
+    },
+
+    checkDisabled: function () {
+      var that = this;
+
+      if (this.isDisabled()) {
+        this.$newElement.addClass('disabled');
+        this.$button.addClass('disabled').attr('tabindex', -1);
+      } else {
+        if (this.$button.hasClass('disabled')) {
+          this.$newElement.removeClass('disabled');
+          this.$button.removeClass('disabled');
+        }
+
+        if (this.$button.attr('tabindex') == -1 && !this.$element.data('tabindex')) {
+          this.$button.removeAttr('tabindex');
+        }
+      }
+
+      this.$button.click(function () {
+        return !that.isDisabled();
+      });
+    },
+
+    tabIndex: function () {
+      if (this.$element.is('[tabindex]')) {
+        this.$element.data('tabindex', this.$element.attr('tabindex'));
+        this.$button.attr('tabindex', this.$element.data('tabindex'));
+      }
+    },
+
+    clickListener: function () {
+      var that = this,
+          $document = $(document);
+
+      this.$newElement.on('touchstart.dropdown', '.dropdown-menu', function (e) {
+        e.stopPropagation();
+      });
+
+      $document.data('spaceSelect', false);
+
+      this.$button.on('keyup', function (e) {
+        if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) {
+            e.preventDefault();
+            $document.data('spaceSelect', false);
+        }
+      });
+
+      this.$newElement.on('click', function () {
+        that.setSize();
+        that.$element.on('shown.bs.select', function () {
+          if (!that.options.liveSearch && !that.multiple) {
+            that.$menuInner.find('.selected a').focus();
+          } else if (!that.multiple) {
+            var selectedIndex = that.liObj[that.$element[0].selectedIndex];
+
+            if (typeof selectedIndex !== 'number' || that.options.size === false) return;
+
+            // scroll to selected option
+            var offset = that.$lis.eq(selectedIndex)[0].offsetTop - that.$menuInner[0].offsetTop;
+            offset = offset - that.$menuInner[0].offsetHeight/2 + that.sizeInfo.liHeight/2;
+            that.$menuInner[0].scrollTop = offset;
+          }
+        });
+      });
+
+      this.$menuInner.on('click', 'li a', function (e) {
+        var $this = $(this),
+            clickedIndex = $this.parent().data('originalIndex'),
+            prevValue = that.$element.val(),
+            prevIndex = that.$element.prop('selectedIndex');
+
+        // Don't close on multi choice menu
+        if (that.multiple) {
+          e.stopPropagation();
+        }
+
+        e.preventDefault();
+
+        //Don't run if we have been disabled
+        if (!that.isDisabled() && !$this.parent().hasClass('disabled')) {
+          var $options = that.$element.find('option'),
+              $option = $options.eq(clickedIndex),
+              state = $option.prop('selected'),
+              $optgroup = $option.parent('optgroup'),
+              maxOptions = that.options.maxOptions,
+              maxOptionsGrp = $optgroup.data('maxOptions') || false;
+
+          if (!that.multiple) { // Deselect all others if not multi select box
+            $options.prop('selected', false);
+            $option.prop('selected', true);
+            that.$menuInner.find('.selected').removeClass('selected');
+            that.setSelected(clickedIndex, true);
+          } else { // Toggle the one we have chosen if we are multi select.
+            $option.prop('selected', !state);
+            that.setSelected(clickedIndex, !state);
+            $this.blur();
+
+            if (maxOptions !== false || maxOptionsGrp !== false) {
+              var maxReached = maxOptions < $options.filter(':selected').length,
+                  maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length;
+
+              if ((maxOptions && maxReached) || (maxOptionsGrp && maxReachedGrp)) {
+                if (maxOptions && maxOptions == 1) {
+                  $options.prop('selected', false);
+                  $option.prop('selected', true);
+                  that.$menuInner.find('.selected').removeClass('selected');
+                  that.setSelected(clickedIndex, true);
+                } else if (maxOptionsGrp && maxOptionsGrp == 1) {
+                  $optgroup.find('option:selected').prop('selected', false);
+                  $option.prop('selected', true);
+                  var optgroupID = $this.parent().data('optgroup');
+                  that.$menuInner.find('[data-optgroup="' + optgroupID + '"]').removeClass('selected');
+                  that.setSelected(clickedIndex, true);
+                } else {
+                  var maxOptionsArr = (typeof that.options.maxOptionsText === 'function') ?
+                          that.options.maxOptionsText(maxOptions, maxOptionsGrp) : that.options.maxOptionsText,
+                      maxTxt = maxOptionsArr[0].replace('{n}', maxOptions),
+                      maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp),
+                      $notify = $('<div class="notify"></div>');
+                  // If {var} is set in array, replace it
+                  /** @deprecated */
+                  if (maxOptionsArr[2]) {
+                    maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]);
+                    maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]);
+                  }
+
+                  $option.prop('selected', false);
+
+                  that.$menu.append($notify);
+
+                  if (maxOptions && maxReached) {
+                    $notify.append($('<div>' + maxTxt + '</div>'));
+                    that.$element.trigger('maxReached.bs.select');
+                  }
+
+                  if (maxOptionsGrp && maxReachedGrp) {
+                    $notify.append($('<div>' + maxTxtGrp + '</div>'));
+                    that.$element.trigger('maxReachedGrp.bs.select');
+                  }
+
+                  setTimeout(function () {
+                    that.setSelected(clickedIndex, false);
+                  }, 10);
+
+                  $notify.delay(750).fadeOut(300, function () {
+                    $(this).remove();
+                  });
+                }
+              }
+            }
+          }
+
+          if (!that.multiple) {
+            that.$button.focus();
+          } else if (that.options.liveSearch) {
+            that.$searchbox.focus();
+          }
+
+          // Trigger select 'change'
+          if ((prevValue != that.$element.val() && that.multiple) || (prevIndex != that.$element.prop('selectedIndex') && !that.multiple)) {
+            that.$element.triggerNative('change');
+            // $option.prop('selected') is current option state (selected/unselected). state is previous option state.
+            that.$element.trigger('changed.bs.select', [clickedIndex, $option.prop('selected'), state]);
+          }
+        }
+      });
+
+      this.$menu.on('click', 'li.disabled a, .popover-title, .popover-title :not(.close)', function (e) {
+        if (e.currentTarget == this) {
+          e.preventDefault();
+          e.stopPropagation();
+          if (that.options.liveSearch && !$(e.target).hasClass('close')) {
+            that.$searchbox.focus();
+          } else {
+            that.$button.focus();
+          }
+        }
+      });
+
+      this.$menuInner.on('click', '.divider, .dropdown-header', function (e) {
+        e.preventDefault();
+        e.stopPropagation();
+        if (that.options.liveSearch) {
+          that.$searchbox.focus();
+        } else {
+          that.$button.focus();
+        }
+      });
+
+      this.$menu.on('click', '.popover-title .close', function () {
+        that.$button.click();
+      });
+
+      this.$searchbox.on('click', function (e) {
+        e.stopPropagation();
+      });
+
+      this.$menu.on('click', '.actions-btn', function (e) {
+        if (that.options.liveSearch) {
+          that.$searchbox.focus();
+        } else {
+          that.$button.focus();
+        }
+
+        e.preventDefault();
+        e.stopPropagation();
+
+        if ($(this).hasClass('bs-select-all')) {
+          that.selectAll();
+        } else {
+          that.deselectAll();
+        }
+        that.$element.triggerNative('change');
+      });
+
+      this.$element.change(function () {
+        that.render(false);
+      });
+    },
+
+    liveSearchListener: function () {
+      var that = this,
+          $no_results = $('<li class="no-results"></li>');
+
+      this.$newElement.on('click.dropdown.data-api touchstart.dropdown.data-api', function () {
+        that.$menuInner.find('.active').removeClass('active');
+        if (!!that.$searchbox.val()) {
+          that.$searchbox.val('');
+          that.$lis.not('.is-hidden').removeClass('hidden');
+          if (!!$no_results.parent().length) $no_results.remove();
+        }
+        if (!that.multiple) that.$menuInner.find('.selected').addClass('active');
+        setTimeout(function () {
+          that.$searchbox.focus();
+        }, 10);
+      });
+
+      this.$searchbox.on('click.dropdown.data-api focus.dropdown.data-api touchend.dropdown.data-api', function (e) {
+        e.stopPropagation();
+      });
+
+      this.$searchbox.on('input propertychange', function () {
+        if (that.$searchbox.val()) {
+          var $searchBase = that.$lis.not('.is-hidden').removeClass('hidden').children('a');
+          if (that.options.liveSearchNormalize) {
+            $searchBase = $searchBase.not(':a' + that._searchStyle() + '("' + normalizeToBase(that.$searchbox.val()) + '")');
+          } else {
+            $searchBase = $searchBase.not(':' + that._searchStyle() + '("' + that.$searchbox.val() + '")');
+          }
+          $searchBase.parent().addClass('hidden');
+
+          that.$lis.filter('.dropdown-header').each(function () {
+            var $this = $(this),
+                optgroup = $this.data('optgroup');
+
+            if (that.$lis.filter('[data-optgroup=' + optgroup + ']').not($this).not('.hidden').length === 0) {
+              $this.addClass('hidden');
+              that.$lis.filter('[data-optgroup=' + optgroup + 'div]').addClass('hidden');
+            }
+          });
+
+          var $lisVisible = that.$lis.not('.hidden');
+
+          // hide divider if first or last visible, or if followed by another divider
+          $lisVisible.each(function (index) {
+            var $this = $(this);
+
+            if ($this.hasClass('divider') && (
+              $this.index() === $lisVisible.first().index() ||
+              $this.index() === $lisVisible.last().index() ||
+              $lisVisible.eq(index + 1).hasClass('divider'))) {
+              $this.addClass('hidden');
+            }
+          });
+
+          if (!that.$lis.not('.hidden, .no-results').length) {
+            if (!!$no_results.parent().length) {
+              $no_results.remove();
+            }
+            $no_results.html(that.options.noneResultsText.replace('{0}', '"' + htmlEscape(that.$searchbox.val()) + '"')).show();
+            that.$menuInner.append($no_results);
+          } else if (!!$no_results.parent().length) {
+            $no_results.remove();
+          }
+        } else {
+          that.$lis.not('.is-hidden').removeClass('hidden');
+          if (!!$no_results.parent().length) {
+            $no_results.remove();
+          }
+        }
+
+        that.$lis.filter('.active').removeClass('active');
+        if (that.$searchbox.val()) that.$lis.not('.hidden, .divider, .dropdown-header').eq(0).addClass('active').children('a').focus();
+        $(this).focus();
+      });
+    },
+
+    _searchStyle: function () {
+      var styles = {
+        begins: 'ibegins',
+        startsWith: 'ibegins'
+      };
+
+      return styles[this.options.liveSearchStyle] || 'icontains';
+    },
+
+    val: function (value) {
+      if (typeof value !== 'undefined') {
+        this.$element.val(value);
+        this.render();
+
+        return this.$element;
+      } else {
+        return this.$element.val();
+      }
+    },
+
+    changeAll: function (status) {
+      if (typeof status === 'undefined') status = true;
+
+      this.findLis();
+
+      var $options = this.$element.find('option'),
+          $lisVisible = this.$lis.not('.divider, .dropdown-header, .disabled, .hidden').toggleClass('selected', status),
+          lisVisLen = $lisVisible.length,
+          selectedOptions = [];
+
+      for (var i = 0; i < lisVisLen; i++) {
+        var origIndex = $lisVisible[i].getAttribute('data-original-index');
+        selectedOptions[selectedOptions.length] = $options.eq(origIndex)[0];
+      }
+
+      $(selectedOptions).prop('selected', status);
+
+      this.render(false);
+    },
+
+    selectAll: function () {
+      return this.changeAll(true);
+    },
+
+    deselectAll: function () {
+      return this.changeAll(false);
+    },
+
+    keydown: function (e) {
+      var $this = $(this),
+          $parent = $this.is('input') ? $this.parent().parent() : $this.parent(),
+          $items,
+          that = $parent.data('this'),
+          index,
+          next,
+          first,
+          last,
+          prev,
+          nextPrev,
+          prevIndex,
+          isActive,
+          selector = ':not(.disabled, .hidden, .dropdown-header, .divider)',
+          keyCodeMap = {
+            32: ' ',
+            48: '0',
+            49: '1',
+            50: '2',
+            51: '3',
+            52: '4',
+            53: '5',
+            54: '6',
+            55: '7',
+            56: '8',
+            57: '9',
+            59: ';',
+            65: 'a',
+            66: 'b',
+            67: 'c',
+            68: 'd',
+            69: 'e',
+            70: 'f',
+            71: 'g',
+            72: 'h',
+            73: 'i',
+            74: 'j',
+            75: 'k',
+            76: 'l',
+            77: 'm',
+            78: 'n',
+            79: 'o',
+            80: 'p',
+            81: 'q',
+            82: 'r',
+            83: 's',
+            84: 't',
+            85: 'u',
+            86: 'v',
+            87: 'w',
+            88: 'x',
+            89: 'y',
+            90: 'z',
+            96: '0',
+            97: '1',
+            98: '2',
+            99: '3',
+            100: '4',
+            101: '5',
+            102: '6',
+            103: '7',
+            104: '8',
+            105: '9'
+          };
+
+      if (that.options.liveSearch) $parent = $this.parent().parent();
+
+      if (that.options.container) $parent = that.$menu;
+
+      $items = $('[role=menu] li', $parent);
+
+      isActive = that.$menu.parent().hasClass('open');
+
+      if (!isActive && (e.keyCode >= 48 && e.keyCode <= 57 || e.keyCode >= 96 && e.keyCode <= 105 || e.keyCode >= 65 && e.keyCode <= 90)) {
+        if (!that.options.container) {
+          that.setSize();
+          that.$menu.parent().addClass('open');
+          isActive = true;
+        } else {
+          that.$newElement.trigger('click');
+        }
+        that.$searchbox.focus();
+      }
+
+      if (that.options.liveSearch) {
+        if (/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && that.$menu.find('.active').length === 0) {
+          e.preventDefault();
+          that.$menu.parent().removeClass('open');
+          if (that.options.container) that.$newElement.removeClass('open');
+          that.$button.focus();
+        }
+        // $items contains li elements when liveSearch is enabled
+        $items = $('[role=menu] li' + selector, $parent);
+        if (!$this.val() && !/(38|40)/.test(e.keyCode.toString(10))) {
+          if ($items.filter('.active').length === 0) {
+            $items = that.$menuInner.find('li');
+            if (that.options.liveSearchNormalize) {
+              $items = $items.filter(':a' + that._searchStyle() + '(' + normalizeToBase(keyCodeMap[e.keyCode]) + ')');
+            } else {
+              $items = $items.filter(':' + that._searchStyle() + '(' + keyCodeMap[e.keyCode] + ')');
+            }
+          }
+        }
+      }
+
+      if (!$items.length) return;
+
+      if (/(38|40)/.test(e.keyCode.toString(10))) {
+        index = $items.index($items.find('a').filter(':focus').parent());
+        first = $items.filter(selector).first().index();
+        last = $items.filter(selector).last().index();
+        next = $items.eq(index).nextAll(selector).eq(0).index();
+        prev = $items.eq(index).prevAll(selector).eq(0).index();
+        nextPrev = $items.eq(next).prevAll(selector).eq(0).index();
+
+        if (that.options.liveSearch) {
+          $items.each(function (i) {
+            if (!$(this).hasClass('disabled')) {
+              $(this).data('index', i);
+            }
+          });
+          index = $items.index($items.filter('.active'));
+          first = $items.first().data('index');
+          last = $items.last().data('index');
+          next = $items.eq(index).nextAll().eq(0).data('index');
+          prev = $items.eq(index).prevAll().eq(0).data('index');
+          nextPrev = $items.eq(next).prevAll().eq(0).data('index');
+        }
+
+        prevIndex = $this.data('prevIndex');
+
+        if (e.keyCode == 38) {
+          if (that.options.liveSearch) index--;
+          if (index != nextPrev && index > prev) index = prev;
+          if (index < first) index = first;
+          if (index == prevIndex) index = last;
+        } else if (e.keyCode == 40) {
+          if (that.options.liveSearch) index++;
+          if (index == -1) index = 0;
+          if (index != nextPrev && index < next) index = next;
+          if (index > last) index = last;
+          if (index == prevIndex) index = first;
+        }
+
+        $this.data('prevIndex', index);
+
+        if (!that.options.liveSearch) {
+          $items.eq(index).children('a').focus();
+        } else {
+          e.preventDefault();
+          if (!$this.hasClass('dropdown-toggle')) {
+            $items.removeClass('active').eq(index).addClass('active').children('a').focus();
+            $this.focus();
+          }
+        }
+
+      } else if (!$this.is('input')) {
+        var keyIndex = [],
+            count,
+            prevKey;
+
+        $items.each(function () {
+          if (!$(this).hasClass('disabled')) {
+            if ($.trim($(this).children('a').text().toLowerCase()).substring(0, 1) == keyCodeMap[e.keyCode]) {
+              keyIndex.push($(this).index());
+            }
+          }
+        });
+
+        count = $(document).data('keycount');
+        count++;
+        $(document).data('keycount', count);
+
+        prevKey = $.trim($(':focus').text().toLowerCase()).substring(0, 1);
+
+        if (prevKey != keyCodeMap[e.keyCode]) {
+          count = 1;
+          $(document).data('keycount', count);
+        } else if (count >= keyIndex.length) {
+          $(document).data('keycount', 0);
+          if (count > keyIndex.length) count = 1;
+        }
+
+        $items.eq(keyIndex[count - 1]).children('a').focus();
+      }
+
+      // Select focused option if "Enter", "Spacebar" or "Tab" (when selectOnTab is true) are pressed inside the menu.
+      if ((/(13|32)/.test(e.keyCode.toString(10)) || (/(^9$)/.test(e.keyCode.toString(10)) && that.options.selectOnTab)) && isActive) {
+        if (!/(32)/.test(e.keyCode.toString(10))) e.preventDefault();
+        if (!that.options.liveSearch) {
+          var elem = $(':focus');
+          elem.click();
+          // Bring back focus for multiselects
+          elem.focus();
+          // Prevent screen from scrolling if the user hit the spacebar
+          e.preventDefault();
+          // Fixes spacebar selection of dropdown items in FF & IE
+          $(document).data('spaceSelect', true);
+        } else if (!/(32)/.test(e.keyCode.toString(10))) {
+          that.$menuInner.find('.active a').click();
+          $this.focus();
+        }
+        $(document).data('keycount', 0);
+      }
+
+      if ((/(^9$|27)/.test(e.keyCode.toString(10)) && isActive && (that.multiple || that.options.liveSearch)) || (/(27)/.test(e.keyCode.toString(10)) && !isActive)) {
+        that.$menu.parent().removeClass('open');
+        if (that.options.container) that.$newElement.removeClass('open');
+        that.$button.focus();
+      }
+    },
+
+    mobile: function () {
+      this.$element.addClass('mobile-device').appendTo(this.$newElement);
+      if (this.options.container) this.$menu.hide();
+    },
+
+    refresh: function () {
+      this.$lis = null;
+      this.liObj = {};
+      this.reloadLi();
+      this.render();
+      this.checkDisabled();
+      this.liHeight(true);
+      this.setStyle();
+      this.setWidth();
+      if (this.$lis) this.$searchbox.trigger('propertychange');
+
+      this.$element.trigger('refreshed.bs.select');
+    },
+
+    hide: function () {
+      this.$newElement.hide();
+    },
+
+    show: function () {
+      this.$newElement.show();
+    },
+
+    remove: function () {
+      this.$newElement.remove();
+      this.$element.remove();
+    }
+  };
+
+  // SELECTPICKER PLUGIN DEFINITION
+  // ==============================
+  function Plugin(option, event) {
+    // get the args of the outer function..
+    var args = arguments;
+    // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them
+    // to get lost/corrupted in android 2.3 and IE9 #715 #775
+    var _option = option,
+        _event = event;
+    [].shift.apply(args);
+
+    var value;
+    var chain = this.each(function () {
+      var $this = $(this);
+      if ($this.is('select')) {
+        var data = $this.data('selectpicker'),
+            options = typeof _option == 'object' && _option;
+
+        if (!data) {
+          var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, $this.data(), options);
+          config.template = $.extend({}, Selectpicker.DEFAULTS.template, ($.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}), $this.data().template, options.template);
+          $this.data('selectpicker', (data = new Selectpicker(this, config, _event)));
+        } else if (options) {
+          for (var i in options) {
+            if (options.hasOwnProperty(i)) {
+              data.options[i] = options[i];
+            }
+          }
+        }
+
+        if (typeof _option == 'string') {
+          if (data[_option] instanceof Function) {
+            value = data[_option].apply(data, args);
+          } else {
+            value = data.options[_option];
+          }
+        }
+      }
+    });
+
+    if (typeof value !== 'undefined') {
+      //noinspection JSUnusedAssignment
+      return value;
+    } else {
+      return chain;
+    }
+  }
+
+  var old = $.fn.selectpicker;
+  $.fn.selectpicker = Plugin;
+  $.fn.selectpicker.Constructor = Selectpicker;
+
+  // SELECTPICKER NO CONFLICT
+  // ========================
+  $.fn.selectpicker.noConflict = function () {
+    $.fn.selectpicker = old;
+    return this;
+  };
+
+  $(document)
+      .data('keycount', 0)
+      .on('keydown', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input', Selectpicker.prototype.keydown)
+      .on('focusin.modal', '.bootstrap-select [data-toggle=dropdown], .bootstrap-select [role="menu"], .bs-searchbox input', function (e) {
+        e.stopPropagation();
+      });
+
+  // SELECTPICKER DATA-API
+  // =====================
+  $(window).on('load.bs.select.data-api', function () {
+    $('.selectpicker').each(function () {
+      var $selectpicker = $(this);
+      Plugin.call($selectpicker, $selectpicker.data());
+    })
+  });
+})(jQuery);
+
+
+}));
diff --git a/public/bower_components/bootstrap-select/bootstrap-select.less b/public/bower_components/bootstrap-select/bootstrap-select.less
new file mode 100644
index 0000000..dd0b1e6
--- /dev/null
+++ b/public/bower_components/bootstrap-select/bootstrap-select.less
@@ -0,0 +1,343 @@
+@import "variables";
+
+// Mixins
+.cursor-disabled() {
+  cursor: not-allowed;
+}
+
+// Rules
+.bootstrap-select {
+  width: 220px \0; /*IE9 and below*/
+
+  // The selectpicker button
+  > .dropdown-toggle {
+    width: 100%;
+    padding-right: 25px;
+  }
+
+  // Error display
+  .has-error & .dropdown-toggle,
+  .error & .dropdown-toggle {
+    border-color: @color-red-error;
+  }
+
+  &.fit-width {
+    width: auto !important;
+  }
+
+  &:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) {
+    width: @width-default;
+  }
+
+  .dropdown-toggle:focus {
+    outline: thin dotted #333333 !important;
+    outline: 5px auto -webkit-focus-ring-color !important;
+    outline-offset: -2px;
+  }
+}
+
+.bootstrap-select.form-control {
+  margin-bottom: 0;
+  padding: 0;
+  border: none;
+
+  &:not([class*="col-"]) {
+    width: 100%;
+  }
+
+  &.input-group-btn {
+    z-index: auto;
+  }
+}
+
+// The selectpicker components
+.bootstrap-select.btn-group {
+  &:not(.input-group-btn),
+  &[class*="col-"] {
+    float: none;
+    display: inline-block;
+    margin-left: 0;
+  }
+
+  // Forces the pull to the right, if necessary
+  &,
+  &[class*="col-"],
+  .row &[class*="col-"] {
+    &.dropdown-menu-right {
+      float: right;
+    }
+  }
+
+  .form-inline &,
+  .form-horizontal &,
+  .form-group & {
+    margin-bottom: 0;
+  }
+
+  .form-group-lg &.form-control,
+  .form-group-sm &.form-control {
+    padding: 0;
+  }
+
+  // Set the width of the live search (and any other form control within an inline form)
+  // see https://github.com/silviomoreto/bootstrap-select/issues/685
+  .form-inline & .form-control {
+    width: 100%;
+  }
+
+  &.disabled,
+  > .disabled {
+    .cursor-disabled();
+
+    &:focus {
+      outline: none !important;
+    }
+  }
+
+  &.bs-container {
+    position: absolute;
+    
+    .dropdown-menu {
+      z-index: @zindex-select-dropdown;
+    }
+  }
+
+  // The selectpicker button
+  .dropdown-toggle {
+    .filter-option {
+      display: inline-block;
+      overflow: hidden;
+      width: 100%;
+      text-align: left;
+    }
+
+    .caret {
+      position: absolute;
+      top: 50%;
+      right: 12px;
+      margin-top: -2px;
+      vertical-align: middle;
+    }
+  }
+
+  &[class*="col-"] .dropdown-toggle {
+    width: 100%;
+  }
+
+  // The selectpicker dropdown
+  .dropdown-menu {
+    min-width: 100%;
+    box-sizing: border-box;
+
+    &.inner {
+      position: static;
+      float: none;
+      border: 0;
+      padding: 0;
+      margin: 0;
+      border-radius: 0;
+      box-shadow: none;
+    }
+
+    li {
+      position: relative;
+
+      &.active small {
+        color: #fff;
+      }
+
+      &.disabled a {
+        .cursor-disabled();
+      }
+
+      a {
+        cursor: pointer;
+        -webkit-user-select: none;
+           -moz-user-select: none;
+            -ms-user-select: none;
+                user-select: none;
+
+        &.opt {
+          position: relative;
+          padding-left: 2.25em;
+        }
+
+        span.check-mark {
+          display: none;
+        }
+
+        span.text {
+          display: inline-block;
+        }
+      }
+
+      small {
+        padding-left: 0.5em;
+      }
+    }
+
+    .notify {
+      position: absolute;
+      bottom: 5px;
+      width: 96%;
+      margin: 0 2%;
+      min-height: 26px;
+      padding: 3px 5px;
+      background: rgb(245, 245, 245);
+      border: 1px solid rgb(227, 227, 227);
+      box-shadow: inset 0 1px 1px fade(rgb(0, 0, 0), 5%);
+      pointer-events: none;
+      opacity: 0.9;
+      box-sizing: border-box;
+    }
+  }
+
+  .no-results {
+    padding: 3px;
+    background: #f5f5f5;
+    margin: 0 5px;
+    white-space: nowrap;
+  }
+
+  &.fit-width .dropdown-toggle {
+    .filter-option {
+      position: static;
+    }
+
+    .caret {
+      position: static;
+      top: auto;
+      margin-top: -1px;
+    }
+  }
+
+  &.show-tick .dropdown-menu li {
+    &.selected a span.check-mark {
+      position: absolute;
+      display: inline-block;
+      right: 15px;
+      margin-top: 5px;
+    }
+
+    a span.text {
+      margin-right: 34px;
+    }
+  }
+}
+
+.bootstrap-select.show-menu-arrow {
+  &.open > .dropdown-toggle {
+    z-index: (@zindex-select-dropdown + 1);
+  }
+
+  .dropdown-toggle {
+    &:before {
+      content: '';
+      border-left: 7px solid transparent;
+      border-right: 7px solid transparent;
+      border-bottom: 7px solid @color-grey-arrow;
+      position: absolute;
+      bottom: -4px;
+      left: 9px;
+      display: none;
+    }
+
+    &:after {
+      content: '';
+      border-left: 6px solid transparent;
+      border-right: 6px solid transparent;
+      border-bottom: 6px solid white;
+      position: absolute;
+      bottom: -4px;
+      left: 10px;
+      display: none;
+    }
+  }
+
+  &.dropup .dropdown-toggle {
+    &:before {
+      bottom: auto;
+      top: -3px;
+      border-top: 7px solid @color-grey-arrow;
+      border-bottom: 0;
+    }
+
+    &:after {
+      bottom: auto;
+      top: -3px;
+      border-top: 6px solid white;
+      border-bottom: 0;
+    }
+  }
+
+  &.pull-right .dropdown-toggle {
+    &:before {
+      right: 12px;
+      left: auto;
+    }
+
+    &:after {
+      right: 13px;
+      left: auto;
+    }
+  }
+
+  &.open > .dropdown-toggle {
+    &:before,
+    &:after {
+      display: block;
+    }
+  }
+}
+
+.bs-searchbox,
+.bs-actionsbox,
+.bs-donebutton {
+  padding: 4px 8px;
+}
+
+.bs-actionsbox {
+  width: 100%;
+  box-sizing: border-box;
+
+  & .btn-group button {
+    width: 50%;
+  }
+}
+
+.bs-donebutton {
+  float: left;
+  width: 100%;
+  box-sizing: border-box;
+
+  & .btn-group button {
+    width: 100%;
+  }
+}
+
+.bs-searchbox {
+  & + .bs-actionsbox {
+    padding: 0 8px 4px;
+  }
+
+  & .form-control {
+    margin-bottom: 0;
+    width: 100%;
+    float: none;
+  }
+}
+
+select.bs-select-hidden,
+select.selectpicker {
+  display: none !important;
+}
+
+select.mobile-device {
+  position: absolute !important;
+  top: 0;
+  left: 0;
+  display: block !important;
+  width: 100%;
+  height: 100% !important;
+  opacity: 0;
+}
diff --git a/public/bower_components/bootstrap-switch/bootstrap-switch.css b/public/bower_components/bootstrap-switch/bootstrap-switch.css
new file mode 100644
index 0000000..cea4acb
--- /dev/null
+++ b/public/bower_components/bootstrap-switch/bootstrap-switch.css
@@ -0,0 +1,196 @@
+/* ========================================================================
+ * bootstrap-switch - v3.3.2
+ * http://www.bootstrap-switch.org
+ * ========================================================================
+ * Copyright 2012-2013 Mattia Larentis
+ *
+ * ========================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================================
+ */
+
+.bootstrap-switch {
+  display: inline-block;
+  direction: ltr;
+  cursor: pointer;
+  border-radius: 4px;
+  border: 1px solid;
+  border-color: #cccccc;
+  position: relative;
+  text-align: left;
+  overflow: hidden;
+  line-height: 8px;
+  z-index: 0;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  vertical-align: middle;
+  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+.bootstrap-switch .bootstrap-switch-container {
+  display: inline-block;
+  top: 0;
+  border-radius: 4px;
+  -webkit-transform: translate3d(0, 0, 0);
+  transform: translate3d(0, 0, 0);
+}
+.bootstrap-switch .bootstrap-switch-handle-on,
+.bootstrap-switch .bootstrap-switch-handle-off,
+.bootstrap-switch .bootstrap-switch-label {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  cursor: pointer;
+  display: inline-block !important;
+  height: 100%;
+  padding: 6px 12px;
+  font-size: 14px;
+  line-height: 20px;
+}
+.bootstrap-switch .bootstrap-switch-handle-on,
+.bootstrap-switch .bootstrap-switch-handle-off {
+  text-align: center;
+  z-index: 1;
+}
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary {
+  color: #fff;
+  background: #428bca;
+}
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info {
+  color: #fff;
+  background: #5bc0de;
+}
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success {
+  color: #fff;
+  background: #5cb85c;
+}
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning {
+  background: #f0ad4e;
+  color: #fff;
+}
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger {
+  color: #fff;
+  background: #d9534f;
+}
+.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default,
+.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default {
+  color: #000;
+  background: #eeeeee;
+}
+.bootstrap-switch .bootstrap-switch-label {
+  text-align: center;
+  margin-top: -1px;
+  margin-bottom: -1px;
+  z-index: 100;
+  color: #333333;
+  background: #ffffff;
+}
+.bootstrap-switch .bootstrap-switch-handle-on {
+  border-bottom-left-radius: 3px;
+  border-top-left-radius: 3px;
+}
+.bootstrap-switch .bootstrap-switch-handle-off {
+  border-bottom-right-radius: 3px;
+  border-top-right-radius: 3px;
+}
+.bootstrap-switch input[type='radio'],
+.bootstrap-switch input[type='checkbox'] {
+  position: absolute !important;
+  top: 0;
+  left: 0;
+  opacity: 0;
+  filter: alpha(opacity=0);
+  z-index: -1;
+}
+.bootstrap-switch input[type='radio'].form-control,
+.bootstrap-switch input[type='checkbox'].form-control {
+  height: auto;
+}
+.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label {
+  padding: 1px 5px;
+  font-size: 12px;
+  line-height: 1.5;
+}
+.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label {
+  padding: 5px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+}
+.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label {
+  padding: 6px 16px;
+  font-size: 18px;
+  line-height: 1.33;
+}
+.bootstrap-switch.bootstrap-switch-disabled,
+.bootstrap-switch.bootstrap-switch-readonly,
+.bootstrap-switch.bootstrap-switch-indeterminate {
+  cursor: default !important;
+}
+.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on,
+.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off,
+.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label,
+.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label,
+.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label {
+  opacity: 0.5;
+  filter: alpha(opacity=50);
+  cursor: default !important;
+}
+.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container {
+  -webkit-transition: margin-left 0.5s;
+  transition: margin-left 0.5s;
+}
+.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on {
+  border-bottom-left-radius: 0;
+  border-top-left-radius: 0;
+  border-bottom-right-radius: 3px;
+  border-top-right-radius: 3px;
+}
+.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off {
+  border-bottom-right-radius: 0;
+  border-top-right-radius: 0;
+  border-bottom-left-radius: 3px;
+  border-top-left-radius: 3px;
+}
+.bootstrap-switch.bootstrap-switch-focused {
+  border-color: #66afe9;
+  outline: 0;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
+  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
+}
+.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label,
+.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off .bootstrap-switch-label {
+  border-bottom-right-radius: 3px;
+  border-top-right-radius: 3px;
+}
+.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label,
+.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on .bootstrap-switch-label {
+  border-bottom-left-radius: 3px;
+  border-top-left-radius: 3px;
+}
diff --git a/public/bower_components/bootstrap-switch/bootstrap-switch.js b/public/bower_components/bootstrap-switch/bootstrap-switch.js
new file mode 100644
index 0000000..4967048
--- /dev/null
+++ b/public/bower_components/bootstrap-switch/bootstrap-switch.js
@@ -0,0 +1,710 @@
+/* ========================================================================
+ * bootstrap-switch - v3.3.2
+ * http://www.bootstrap-switch.org
+ * ========================================================================
+ * Copyright 2012-2013 Mattia Larentis
+ *
+ * ========================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================================
+ */
+
+(function() {
+  var __slice = [].slice;
+
+  (function($, window) {
+    "use strict";
+    var BootstrapSwitch;
+    BootstrapSwitch = (function() {
+      function BootstrapSwitch(element, options) {
+        if (options == null) {
+          options = {};
+        }
+        this.$element = $(element);
+        this.options = $.extend({}, $.fn.bootstrapSwitch.defaults, {
+          state: this.$element.is(":checked"),
+          size: this.$element.data("size"),
+          animate: this.$element.data("animate"),
+          disabled: this.$element.is(":disabled"),
+          readonly: this.$element.is("[readonly]"),
+          indeterminate: this.$element.data("indeterminate"),
+          inverse: this.$element.data("inverse"),
+          radioAllOff: this.$element.data("radio-all-off"),
+          onColor: this.$element.data("on-color"),
+          offColor: this.$element.data("off-color"),
+          onText: this.$element.data("on-text"),
+          offText: this.$element.data("off-text"),
+          labelText: this.$element.data("label-text"),
+          handleWidth: this.$element.data("handle-width"),
+          labelWidth: this.$element.data("label-width"),
+          baseClass: this.$element.data("base-class"),
+          wrapperClass: this.$element.data("wrapper-class")
+        }, options);
+        this.$wrapper = $("<div>", {
+          "class": (function(_this) {
+            return function() {
+              var classes;
+              classes = ["" + _this.options.baseClass].concat(_this._getClasses(_this.options.wrapperClass));
+              classes.push(_this.options.state ? "" + _this.options.baseClass + "-on" : "" + _this.options.baseClass + "-off");
+              if (_this.options.size != null) {
+                classes.push("" + _this.options.baseClass + "-" + _this.options.size);
+              }
+              if (_this.options.disabled) {
+                classes.push("" + _this.options.baseClass + "-disabled");
+              }
+              if (_this.options.readonly) {
+                classes.push("" + _this.options.baseClass + "-readonly");
+              }
+              if (_this.options.indeterminate) {
+                classes.push("" + _this.options.baseClass + "-indeterminate");
+              }
+              if (_this.options.inverse) {
+                classes.push("" + _this.options.baseClass + "-inverse");
+              }
+              if (_this.$element.attr("id")) {
+                classes.push("" + _this.options.baseClass + "-id-" + (_this.$element.attr("id")));
+              }
+              return classes.join(" ");
+            };
+          })(this)()
+        });
+        this.$container = $("<div>", {
+          "class": "" + this.options.baseClass + "-container"
+        });
+        this.$on = $("<span>", {
+          html: this.options.onText,
+          "class": "" + this.options.baseClass + "-handle-on " + this.options.baseClass + "-" + this.options.onColor
+        });
+        this.$off = $("<span>", {
+          html: this.options.offText,
+          "class": "" + this.options.baseClass + "-handle-off " + this.options.baseClass + "-" + this.options.offColor
+        });
+        this.$label = $("<span>", {
+          html: this.options.labelText,
+          "class": "" + this.options.baseClass + "-label"
+        });
+        this.$element.on("init.bootstrapSwitch", (function(_this) {
+          return function() {
+            return _this.options.onInit.apply(element, arguments);
+          };
+        })(this));
+        this.$element.on("switchChange.bootstrapSwitch", (function(_this) {
+          return function() {
+            return _this.options.onSwitchChange.apply(element, arguments);
+          };
+        })(this));
+        this.$container = this.$element.wrap(this.$container).parent();
+        this.$wrapper = this.$container.wrap(this.$wrapper).parent();
+        this.$element.before(this.options.inverse ? this.$off : this.$on).before(this.$label).before(this.options.inverse ? this.$on : this.$off);
+        if (this.options.indeterminate) {
+          this.$element.prop("indeterminate", true);
+        }
+        this._init();
+        this._elementHandlers();
+        this._handleHandlers();
+        this._labelHandlers();
+        this._formHandler();
+        this._externalLabelHandler();
+        this.$element.trigger("init.bootstrapSwitch");
+      }
+
+      BootstrapSwitch.prototype._constructor = BootstrapSwitch;
+
+      BootstrapSwitch.prototype.state = function(value, skip) {
+        if (typeof value === "undefined") {
+          return this.options.state;
+        }
+        if (this.options.disabled || this.options.readonly) {
+          return this.$element;
+        }
+        if (this.options.state && !this.options.radioAllOff && this.$element.is(":radio")) {
+          return this.$element;
+        }
+        if (this.options.indeterminate) {
+          this.indeterminate(false);
+        }
+        value = !!value;
+        this.$element.prop("checked", value).trigger("change.bootstrapSwitch", skip);
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.toggleState = function(skip) {
+        if (this.options.disabled || this.options.readonly) {
+          return this.$element;
+        }
+        if (this.options.indeterminate) {
+          this.indeterminate(false);
+          return this.state(true);
+        } else {
+          return this.$element.prop("checked", !this.options.state).trigger("change.bootstrapSwitch", skip);
+        }
+      };
+
+      BootstrapSwitch.prototype.size = function(value) {
+        if (typeof value === "undefined") {
+          return this.options.size;
+        }
+        if (this.options.size != null) {
+          this.$wrapper.removeClass("" + this.options.baseClass + "-" + this.options.size);
+        }
+        if (value) {
+          this.$wrapper.addClass("" + this.options.baseClass + "-" + value);
+        }
+        this._width();
+        this._containerPosition();
+        this.options.size = value;
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.animate = function(value) {
+        if (typeof value === "undefined") {
+          return this.options.animate;
+        }
+        value = !!value;
+        if (value === this.options.animate) {
+          return this.$element;
+        }
+        return this.toggleAnimate();
+      };
+
+      BootstrapSwitch.prototype.toggleAnimate = function() {
+        this.options.animate = !this.options.animate;
+        this.$wrapper.toggleClass("" + this.options.baseClass + "-animate");
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.disabled = function(value) {
+        if (typeof value === "undefined") {
+          return this.options.disabled;
+        }
+        value = !!value;
+        if (value === this.options.disabled) {
+          return this.$element;
+        }
+        return this.toggleDisabled();
+      };
+
+      BootstrapSwitch.prototype.toggleDisabled = function() {
+        this.options.disabled = !this.options.disabled;
+        this.$element.prop("disabled", this.options.disabled);
+        this.$wrapper.toggleClass("" + this.options.baseClass + "-disabled");
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.readonly = function(value) {
+        if (typeof value === "undefined") {
+          return this.options.readonly;
+        }
+        value = !!value;
+        if (value === this.options.readonly) {
+          return this.$element;
+        }
+        return this.toggleReadonly();
+      };
+
+      BootstrapSwitch.prototype.toggleReadonly = function() {
+        this.options.readonly = !this.options.readonly;
+        this.$element.prop("readonly", this.options.readonly);
+        this.$wrapper.toggleClass("" + this.options.baseClass + "-readonly");
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.indeterminate = function(value) {
+        if (typeof value === "undefined") {
+          return this.options.indeterminate;
+        }
+        value = !!value;
+        if (value === this.options.indeterminate) {
+          return this.$element;
+        }
+        return this.toggleIndeterminate();
+      };
+
+      BootstrapSwitch.prototype.toggleIndeterminate = function() {
+        this.options.indeterminate = !this.options.indeterminate;
+        this.$element.prop("indeterminate", this.options.indeterminate);
+        this.$wrapper.toggleClass("" + this.options.baseClass + "-indeterminate");
+        this._containerPosition();
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.inverse = function(value) {
+        if (typeof value === "undefined") {
+          return this.options.inverse;
+        }
+        value = !!value;
+        if (value === this.options.inverse) {
+          return this.$element;
+        }
+        return this.toggleInverse();
+      };
+
+      BootstrapSwitch.prototype.toggleInverse = function() {
+        var $off, $on;
+        this.$wrapper.toggleClass("" + this.options.baseClass + "-inverse");
+        $on = this.$on.clone(true);
+        $off = this.$off.clone(true);
+        this.$on.replaceWith($off);
+        this.$off.replaceWith($on);
+        this.$on = $off;
+        this.$off = $on;
+        this.options.inverse = !this.options.inverse;
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.onColor = function(value) {
+        var color;
+        color = this.options.onColor;
+        if (typeof value === "undefined") {
+          return color;
+        }
+        if (color != null) {
+          this.$on.removeClass("" + this.options.baseClass + "-" + color);
+        }
+        this.$on.addClass("" + this.options.baseClass + "-" + value);
+        this.options.onColor = value;
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.offColor = function(value) {
+        var color;
+        color = this.options.offColor;
+        if (typeof value === "undefined") {
+          return color;
+        }
+        if (color != null) {
+          this.$off.removeClass("" + this.options.baseClass + "-" + color);
+        }
+        this.$off.addClass("" + this.options.baseClass + "-" + value);
+        this.options.offColor = value;
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.onText = function(value) {
+        if (typeof value === "undefined") {
+          return this.options.onText;
+        }
+        this.$on.html(value);
+        this._width();
+        this._containerPosition();
+        this.options.onText = value;
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.offText = function(value) {
+        if (typeof value === "undefined") {
+          return this.options.offText;
+        }
+        this.$off.html(value);
+        this._width();
+        this._containerPosition();
+        this.options.offText = value;
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.labelText = function(value) {
+        if (typeof value === "undefined") {
+          return this.options.labelText;
+        }
+        this.$label.html(value);
+        this._width();
+        this.options.labelText = value;
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.handleWidth = function(value) {
+        if (typeof value === "undefined") {
+          return this.options.handleWidth;
+        }
+        this.options.handleWidth = value;
+        this._width();
+        this._containerPosition();
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.labelWidth = function(value) {
+        if (typeof value === "undefined") {
+          return this.options.labelWidth;
+        }
+        this.options.labelWidth = value;
+        this._width();
+        this._containerPosition();
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.baseClass = function(value) {
+        return this.options.baseClass;
+      };
+
+      BootstrapSwitch.prototype.wrapperClass = function(value) {
+        if (typeof value === "undefined") {
+          return this.options.wrapperClass;
+        }
+        if (!value) {
+          value = $.fn.bootstrapSwitch.defaults.wrapperClass;
+        }
+        this.$wrapper.removeClass(this._getClasses(this.options.wrapperClass).join(" "));
+        this.$wrapper.addClass(this._getClasses(value).join(" "));
+        this.options.wrapperClass = value;
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.radioAllOff = function(value) {
+        if (typeof value === "undefined") {
+          return this.options.radioAllOff;
+        }
+        value = !!value;
+        if (value === this.options.radioAllOff) {
+          return this.$element;
+        }
+        this.options.radioAllOff = value;
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.onInit = function(value) {
+        if (typeof value === "undefined") {
+          return this.options.onInit;
+        }
+        if (!value) {
+          value = $.fn.bootstrapSwitch.defaults.onInit;
+        }
+        this.options.onInit = value;
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.onSwitchChange = function(value) {
+        if (typeof value === "undefined") {
+          return this.options.onSwitchChange;
+        }
+        if (!value) {
+          value = $.fn.bootstrapSwitch.defaults.onSwitchChange;
+        }
+        this.options.onSwitchChange = value;
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype.destroy = function() {
+        var $form;
+        $form = this.$element.closest("form");
+        if ($form.length) {
+          $form.off("reset.bootstrapSwitch").removeData("bootstrap-switch");
+        }
+        this.$container.children().not(this.$element).remove();
+        this.$element.unwrap().unwrap().off(".bootstrapSwitch").removeData("bootstrap-switch");
+        return this.$element;
+      };
+
+      BootstrapSwitch.prototype._width = function() {
+        var $handles, handleWidth;
+        $handles = this.$on.add(this.$off);
+        $handles.add(this.$label).css("width", "");
+        handleWidth = this.options.handleWidth === "auto" ? Math.max(this.$on.width(), this.$off.width()) : this.options.handleWidth;
+        $handles.width(handleWidth);
+        this.$label.width((function(_this) {
+          return function(index, width) {
+            if (_this.options.labelWidth !== "auto") {
+              return _this.options.labelWidth;
+            }
+            if (width < handleWidth) {
+              return handleWidth;
+            } else {
+              return width;
+            }
+          };
+        })(this));
+        this._handleWidth = this.$on.outerWidth();
+        this._labelWidth = this.$label.outerWidth();
+        this.$container.width((this._handleWidth * 2) + this._labelWidth);
+        return this.$wrapper.width(this._handleWidth + this._labelWidth);
+      };
+
+      BootstrapSwitch.prototype._containerPosition = function(state, callback) {
+        if (state == null) {
+          state = this.options.state;
+        }
+        this.$container.css("margin-left", (function(_this) {
+          return function() {
+            var values;
+            values = [0, "-" + _this._handleWidth + "px"];
+            if (_this.options.indeterminate) {
+              return "-" + (_this._handleWidth / 2) + "px";
+            }
+            if (state) {
+              if (_this.options.inverse) {
+                return values[1];
+              } else {
+                return values[0];
+              }
+            } else {
+              if (_this.options.inverse) {
+                return values[0];
+              } else {
+                return values[1];
+              }
+            }
+          };
+        })(this));
+        if (!callback) {
+          return;
+        }
+        return setTimeout(function() {
+          return callback();
+        }, 50);
+      };
+
+      BootstrapSwitch.prototype._init = function() {
+        var init, initInterval;
+        init = (function(_this) {
+          return function() {
+            _this._width();
+            return _this._containerPosition(null, function() {
+              if (_this.options.animate) {
+                return _this.$wrapper.addClass("" + _this.options.baseClass + "-animate");
+              }
+            });
+          };
+        })(this);
+        if (this.$wrapper.is(":visible")) {
+          return init();
+        }
+        return initInterval = window.setInterval((function(_this) {
+          return function() {
+            if (_this.$wrapper.is(":visible")) {
+              init();
+              return window.clearInterval(initInterval);
+            }
+          };
+        })(this), 50);
+      };
+
+      BootstrapSwitch.prototype._elementHandlers = function() {
+        return this.$element.on({
+          "change.bootstrapSwitch": (function(_this) {
+            return function(e, skip) {
+              var state;
+              e.preventDefault();
+              e.stopImmediatePropagation();
+              state = _this.$element.is(":checked");
+              _this._containerPosition(state);
+              if (state === _this.options.state) {
+                return;
+              }
+              _this.options.state = state;
+              _this.$wrapper.toggleClass("" + _this.options.baseClass + "-off").toggleClass("" + _this.options.baseClass + "-on");
+              if (!skip) {
+                if (_this.$element.is(":radio")) {
+                  $("[name='" + (_this.$element.attr('name')) + "']").not(_this.$element).prop("checked", false).trigger("change.bootstrapSwitch", true);
+                }
+                return _this.$element.trigger("switchChange.bootstrapSwitch", [state]);
+              }
+            };
+          })(this),
+          "focus.bootstrapSwitch": (function(_this) {
+            return function(e) {
+              e.preventDefault();
+              return _this.$wrapper.addClass("" + _this.options.baseClass + "-focused");
+            };
+          })(this),
+          "blur.bootstrapSwitch": (function(_this) {
+            return function(e) {
+              e.preventDefault();
+              return _this.$wrapper.removeClass("" + _this.options.baseClass + "-focused");
+            };
+          })(this),
+          "keydown.bootstrapSwitch": (function(_this) {
+            return function(e) {
+              if (!e.which || _this.options.disabled || _this.options.readonly) {
+                return;
+              }
+              switch (e.which) {
+                case 37:
+                  e.preventDefault();
+                  e.stopImmediatePropagation();
+                  return _this.state(false);
+                case 39:
+                  e.preventDefault();
+                  e.stopImmediatePropagation();
+                  return _this.state(true);
+              }
+            };
+          })(this)
+        });
+      };
+
+      BootstrapSwitch.prototype._handleHandlers = function() {
+        this.$on.on("click.bootstrapSwitch", (function(_this) {
+          return function(event) {
+            event.preventDefault();
+            event.stopPropagation();
+            _this.state(false);
+            return _this.$element.trigger("focus.bootstrapSwitch");
+          };
+        })(this));
+        return this.$off.on("click.bootstrapSwitch", (function(_this) {
+          return function(event) {
+            event.preventDefault();
+            event.stopPropagation();
+            _this.state(true);
+            return _this.$element.trigger("focus.bootstrapSwitch");
+          };
+        })(this));
+      };
+
+      BootstrapSwitch.prototype._labelHandlers = function() {
+        return this.$label.on({
+          "mousedown.bootstrapSwitch touchstart.bootstrapSwitch": (function(_this) {
+            return function(e) {
+              if (_this._dragStart || _this.options.disabled || _this.options.readonly) {
+                return;
+              }
+              e.preventDefault();
+              e.stopPropagation();
+              _this._dragStart = (e.pageX || e.originalEvent.touches[0].pageX) - parseInt(_this.$container.css("margin-left"), 10);
+              if (_this.options.animate) {
+                _this.$wrapper.removeClass("" + _this.options.baseClass + "-animate");
+              }
+              return _this.$element.trigger("focus.bootstrapSwitch");
+            };
+          })(this),
+          "mousemove.bootstrapSwitch touchmove.bootstrapSwitch": (function(_this) {
+            return function(e) {
+              var difference;
+              if (_this._dragStart == null) {
+                return;
+              }
+              e.preventDefault();
+              difference = (e.pageX || e.originalEvent.touches[0].pageX) - _this._dragStart;
+              if (difference < -_this._handleWidth || difference > 0) {
+                return;
+              }
+              _this._dragEnd = difference;
+              return _this.$container.css("margin-left", "" + _this._dragEnd + "px");
+            };
+          })(this),
+          "mouseup.bootstrapSwitch touchend.bootstrapSwitch": (function(_this) {
+            return function(e) {
+              var state;
+              if (!_this._dragStart) {
+                return;
+              }
+              e.preventDefault();
+              if (_this.options.animate) {
+                _this.$wrapper.addClass("" + _this.options.baseClass + "-animate");
+              }
+              if (_this._dragEnd) {
+                state = _this._dragEnd > -(_this._handleWidth / 2);
+                _this._dragEnd = false;
+                _this.state(_this.options.inverse ? !state : state);
+              } else {
+                _this.state(!_this.options.state);
+              }
+              return _this._dragStart = false;
+            };
+          })(this),
+          "mouseleave.bootstrapSwitch": (function(_this) {
+            return function(e) {
+              return _this.$label.trigger("mouseup.bootstrapSwitch");
+            };
+          })(this)
+        });
+      };
+
+      BootstrapSwitch.prototype._externalLabelHandler = function() {
+        var $externalLabel;
+        $externalLabel = this.$element.closest("label");
+        return $externalLabel.on("click", (function(_this) {
+          return function(event) {
+            event.preventDefault();
+            event.stopImmediatePropagation();
+            if (event.target === $externalLabel[0]) {
+              return _this.toggleState();
+            }
+          };
+        })(this));
+      };
+
+      BootstrapSwitch.prototype._formHandler = function() {
+        var $form;
+        $form = this.$element.closest("form");
+        if ($form.data("bootstrap-switch")) {
+          return;
+        }
+        return $form.on("reset.bootstrapSwitch", function() {
+          return window.setTimeout(function() {
+            return $form.find("input").filter(function() {
+              return $(this).data("bootstrap-switch");
+            }).each(function() {
+              return $(this).bootstrapSwitch("state", this.checked);
+            });
+          }, 1);
+        }).data("bootstrap-switch", true);
+      };
+
+      BootstrapSwitch.prototype._getClasses = function(classes) {
+        var c, cls, _i, _len;
+        if (!$.isArray(classes)) {
+          return ["" + this.options.baseClass + "-" + classes];
+        }
+        cls = [];
+        for (_i = 0, _len = classes.length; _i < _len; _i++) {
+          c = classes[_i];
+          cls.push("" + this.options.baseClass + "-" + c);
+        }
+        return cls;
+      };
+
+      return BootstrapSwitch;
+
+    })();
+    $.fn.bootstrapSwitch = function() {
+      var args, option, ret;
+      option = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
+      ret = this;
+      this.each(function() {
+        var $this, data;
+        $this = $(this);
+        data = $this.data("bootstrap-switch");
+        if (!data) {
+          $this.data("bootstrap-switch", data = new BootstrapSwitch(this, option));
+        }
+        if (typeof option === "string") {
+          return ret = data[option].apply(data, args);
+        }
+      });
+      return ret;
+    };
+    $.fn.bootstrapSwitch.Constructor = BootstrapSwitch;
+    return $.fn.bootstrapSwitch.defaults = {
+      state: true,
+      size: null,
+      animate: true,
+      disabled: false,
+      readonly: false,
+      indeterminate: false,
+      inverse: false,
+      radioAllOff: false,
+      onColor: "primary",
+      offColor: "default",
+      onText: "ON",
+      offText: "OFF",
+      labelText: "&nbsp;",
+      handleWidth: "auto",
+      labelWidth: "auto",
+      baseClass: "bootstrap-switch",
+      wrapperClass: "wrapper",
+      onInit: function() {},
+      onSwitchChange: function() {}
+    };
+  })(window.jQuery, window);
+
+}).call(this);
diff --git a/public/bower_components/bootstrap/bootstrap.js b/public/bower_components/bootstrap/bootstrap.js
new file mode 100644
index 0000000..5debfd7
--- /dev/null
+++ b/public/bower_components/bootstrap/bootstrap.js
@@ -0,0 +1,2363 @@
+/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under the MIT license
+ */
+
+if (typeof jQuery === 'undefined') {
+  throw new Error('Bootstrap\'s JavaScript requires jQuery')
+}
+
++function ($) {
+  'use strict';
+  var version = $.fn.jquery.split(' ')[0].split('.')
+  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) {
+    throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher')
+  }
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: transition.js v3.3.5
+ * http://getbootstrap.com/javascript/#transitions
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
+  // ============================================================
+
+  function transitionEnd() {
+    var el = document.createElement('bootstrap')
+
+    var transEndEventNames = {
+      WebkitTransition : 'webkitTransitionEnd',
+      MozTransition    : 'transitionend',
+      OTransition      : 'oTransitionEnd otransitionend',
+      transition       : 'transitionend'
+    }
+
+    for (var name in transEndEventNames) {
+      if (el.style[name] !== undefined) {
+        return { end: transEndEventNames[name] }
+      }
+    }
+
+    return false // explicit for ie8 (  ._.)
+  }
+
+  // http://blog.alexmaccaw.com/css-transitions
+  $.fn.emulateTransitionEnd = function (duration) {
+    var called = false
+    var $el = this
+    $(this).one('bsTransitionEnd', function () { called = true })
+    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
+    setTimeout(callback, duration)
+    return this
+  }
+
+  $(function () {
+    $.support.transition = transitionEnd()
+
+    if (!$.support.transition) return
+
+    $.event.special.bsTransitionEnd = {
+      bindType: $.support.transition.end,
+      delegateType: $.support.transition.end,
+      handle: function (e) {
+        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
+      }
+    }
+  })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: alert.js v3.3.5
+ * http://getbootstrap.com/javascript/#alerts
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // ALERT CLASS DEFINITION
+  // ======================
+
+  var dismiss = '[data-dismiss="alert"]'
+  var Alert   = function (el) {
+    $(el).on('click', dismiss, this.close)
+  }
+
+  Alert.VERSION = '3.3.5'
+
+  Alert.TRANSITION_DURATION = 150
+
+  Alert.prototype.close = function (e) {
+    var $this    = $(this)
+    var selector = $this.attr('data-target')
+
+    if (!selector) {
+      selector = $this.attr('href')
+      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+    }
+
+    var $parent = $(selector)
+
+    if (e) e.preventDefault()
+
+    if (!$parent.length) {
+      $parent = $this.closest('.alert')
+    }
+
+    $parent.trigger(e = $.Event('close.bs.alert'))
+
+    if (e.isDefaultPrevented()) return
+
+    $parent.removeClass('in')
+
+    function removeElement() {
+      // detach from parent, fire event then clean up data
+      $parent.detach().trigger('closed.bs.alert').remove()
+    }
+
+    $.support.transition && $parent.hasClass('fade') ?
+      $parent
+        .one('bsTransitionEnd', removeElement)
+        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
+      removeElement()
+  }
+
+
+  // ALERT PLUGIN DEFINITION
+  // =======================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this = $(this)
+      var data  = $this.data('bs.alert')
+
+      if (!data) $this.data('bs.alert', (data = new Alert(this)))
+      if (typeof option == 'string') data[option].call($this)
+    })
+  }
+
+  var old = $.fn.alert
+
+  $.fn.alert             = Plugin
+  $.fn.alert.Constructor = Alert
+
+
+  // ALERT NO CONFLICT
+  // =================
+
+  $.fn.alert.noConflict = function () {
+    $.fn.alert = old
+    return this
+  }
+
+
+  // ALERT DATA-API
+  // ==============
+
+  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: button.js v3.3.5
+ * http://getbootstrap.com/javascript/#buttons
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // BUTTON PUBLIC CLASS DEFINITION
+  // ==============================
+
+  var Button = function (element, options) {
+    this.$element  = $(element)
+    this.options   = $.extend({}, Button.DEFAULTS, options)
+    this.isLoading = false
+  }
+
+  Button.VERSION  = '3.3.5'
+
+  Button.DEFAULTS = {
+    loadingText: 'loading...'
+  }
+
+  Button.prototype.setState = function (state) {
+    var d    = 'disabled'
+    var $el  = this.$element
+    var val  = $el.is('input') ? 'val' : 'html'
+    var data = $el.data()
+
+    state += 'Text'
+
+    if (data.resetText == null) $el.data('resetText', $el[val]())
+
+    // push to event loop to allow forms to submit
+    setTimeout($.proxy(function () {
+      $el[val](data[state] == null ? this.options[state] : data[state])
+
+      if (state == 'loadingText') {
+        this.isLoading = true
+        $el.addClass(d).attr(d, d)
+      } else if (this.isLoading) {
+        this.isLoading = false
+        $el.removeClass(d).removeAttr(d)
+      }
+    }, this), 0)
+  }
+
+  Button.prototype.toggle = function () {
+    var changed = true
+    var $parent = this.$element.closest('[data-toggle="buttons"]')
+
+    if ($parent.length) {
+      var $input = this.$element.find('input')
+      if ($input.prop('type') == 'radio') {
+        if ($input.prop('checked')) changed = false
+        $parent.find('.active').removeClass('active')
+        this.$element.addClass('active')
+      } else if ($input.prop('type') == 'checkbox') {
+        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
+        this.$element.toggleClass('active')
+      }
+      $input.prop('checked', this.$element.hasClass('active'))
+      if (changed) $input.trigger('change')
+    } else {
+      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
+      this.$element.toggleClass('active')
+    }
+  }
+
+
+  // BUTTON PLUGIN DEFINITION
+  // ========================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this   = $(this)
+      var data    = $this.data('bs.button')
+      var options = typeof option == 'object' && option
+
+      if (!data) $this.data('bs.button', (data = new Button(this, options)))
+
+      if (option == 'toggle') data.toggle()
+      else if (option) data.setState(option)
+    })
+  }
+
+  var old = $.fn.button
+
+  $.fn.button             = Plugin
+  $.fn.button.Constructor = Button
+
+
+  // BUTTON NO CONFLICT
+  // ==================
+
+  $.fn.button.noConflict = function () {
+    $.fn.button = old
+    return this
+  }
+
+
+  // BUTTON DATA-API
+  // ===============
+
+  $(document)
+    .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+      var $btn = $(e.target)
+      if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn')
+      Plugin.call($btn, 'toggle')
+      if (!($(e.target).is('input[type="radio"]') || $(e.target).is('input[type="checkbox"]'))) e.preventDefault()
+    })
+    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
+      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
+    })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: carousel.js v3.3.5
+ * http://getbootstrap.com/javascript/#carousel
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // CAROUSEL CLASS DEFINITION
+  // =========================
+
+  var Carousel = function (element, options) {
+    this.$element    = $(element)
+    this.$indicators = this.$element.find('.carousel-indicators')
+    this.options     = options
+    this.paused      = null
+    this.sliding     = null
+    this.interval    = null
+    this.$active     = null
+    this.$items      = null
+
+    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
+
+    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
+      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
+      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
+  }
+
+  Carousel.VERSION  = '3.3.5'
+
+  Carousel.TRANSITION_DURATION = 600
+
+  Carousel.DEFAULTS = {
+    interval: 5000,
+    pause: 'hover',
+    wrap: true,
+    keyboard: true
+  }
+
+  Carousel.prototype.keydown = function (e) {
+    if (/input|textarea/i.test(e.target.tagName)) return
+    switch (e.which) {
+      case 37: this.prev(); break
+      case 39: this.next(); break
+      default: return
+    }
+
+    e.preventDefault()
+  }
+
+  Carousel.prototype.cycle = function (e) {
+    e || (this.paused = false)
+
+    this.interval && clearInterval(this.interval)
+
+    this.options.interval
+      && !this.paused
+      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
+
+    return this
+  }
+
+  Carousel.prototype.getItemIndex = function (item) {
+    this.$items = item.parent().children('.item')
+    return this.$items.index(item || this.$active)
+  }
+
+  Carousel.prototype.getItemForDirection = function (direction, active) {
+    var activeIndex = this.getItemIndex(active)
+    var willWrap = (direction == 'prev' && activeIndex === 0)
+                || (direction == 'next' && activeIndex == (this.$items.length - 1))
+    if (willWrap && !this.options.wrap) return active
+    var delta = direction == 'prev' ? -1 : 1
+    var itemIndex = (activeIndex + delta) % this.$items.length
+    return this.$items.eq(itemIndex)
+  }
+
+  Carousel.prototype.to = function (pos) {
+    var that        = this
+    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
+
+    if (pos > (this.$items.length - 1) || pos < 0) return
+
+    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
+    if (activeIndex == pos) return this.pause().cycle()
+
+    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
+  }
+
+  Carousel.prototype.pause = function (e) {
+    e || (this.paused = true)
+
+    if (this.$element.find('.next, .prev').length && $.support.transition) {
+      this.$element.trigger($.support.transition.end)
+      this.cycle(true)
+    }
+
+    this.interval = clearInterval(this.interval)
+
+    return this
+  }
+
+  Carousel.prototype.next = function () {
+    if (this.sliding) return
+    return this.slide('next')
+  }
+
+  Carousel.prototype.prev = function () {
+    if (this.sliding) return
+    return this.slide('prev')
+  }
+
+  Carousel.prototype.slide = function (type, next) {
+    var $active   = this.$element.find('.item.active')
+    var $next     = next || this.getItemForDirection(type, $active)
+    var isCycling = this.interval
+    var direction = type == 'next' ? 'left' : 'right'
+    var that      = this
+
+    if ($next.hasClass('active')) return (this.sliding = false)
+
+    var relatedTarget = $next[0]
+    var slideEvent = $.Event('slide.bs.carousel', {
+      relatedTarget: relatedTarget,
+      direction: direction
+    })
+    this.$element.trigger(slideEvent)
+    if (slideEvent.isDefaultPrevented()) return
+
+    this.sliding = true
+
+    isCycling && this.pause()
+
+    if (this.$indicators.length) {
+      this.$indicators.find('.active').removeClass('active')
+      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
+      $nextIndicator && $nextIndicator.addClass('active')
+    }
+
+    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
+    if ($.support.transition && this.$element.hasClass('slide')) {
+      $next.addClass(type)
+      $next[0].offsetWidth // force reflow
+      $active.addClass(direction)
+      $next.addClass(direction)
+      $active
+        .one('bsTransitionEnd', function () {
+          $next.removeClass([type, direction].join(' ')).addClass('active')
+          $active.removeClass(['active', direction].join(' '))
+          that.sliding = false
+          setTimeout(function () {
+            that.$element.trigger(slidEvent)
+          }, 0)
+        })
+        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
+    } else {
+      $active.removeClass('active')
+      $next.addClass('active')
+      this.sliding = false
+      this.$element.trigger(slidEvent)
+    }
+
+    isCycling && this.cycle()
+
+    return this
+  }
+
+
+  // CAROUSEL PLUGIN DEFINITION
+  // ==========================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this   = $(this)
+      var data    = $this.data('bs.carousel')
+      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
+      var action  = typeof option == 'string' ? option : options.slide
+
+      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
+      if (typeof option == 'number') data.to(option)
+      else if (action) data[action]()
+      else if (options.interval) data.pause().cycle()
+    })
+  }
+
+  var old = $.fn.carousel
+
+  $.fn.carousel             = Plugin
+  $.fn.carousel.Constructor = Carousel
+
+
+  // CAROUSEL NO CONFLICT
+  // ====================
+
+  $.fn.carousel.noConflict = function () {
+    $.fn.carousel = old
+    return this
+  }
+
+
+  // CAROUSEL DATA-API
+  // =================
+
+  var clickHandler = function (e) {
+    var href
+    var $this   = $(this)
+    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
+    if (!$target.hasClass('carousel')) return
+    var options = $.extend({}, $target.data(), $this.data())
+    var slideIndex = $this.attr('data-slide-to')
+    if (slideIndex) options.interval = false
+
+    Plugin.call($target, options)
+
+    if (slideIndex) {
+      $target.data('bs.carousel').to(slideIndex)
+    }
+
+    e.preventDefault()
+  }
+
+  $(document)
+    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
+    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
+
+  $(window).on('load', function () {
+    $('[data-ride="carousel"]').each(function () {
+      var $carousel = $(this)
+      Plugin.call($carousel, $carousel.data())
+    })
+  })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: collapse.js v3.3.5
+ * http://getbootstrap.com/javascript/#collapse
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // COLLAPSE PUBLIC CLASS DEFINITION
+  // ================================
+
+  var Collapse = function (element, options) {
+    this.$element      = $(element)
+    this.options       = $.extend({}, Collapse.DEFAULTS, options)
+    this.$trigger      = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
+                           '[data-toggle="collapse"][data-target="#' + element.id + '"]')
+    this.transitioning = null
+
+    if (this.options.parent) {
+      this.$parent = this.getParent()
+    } else {
+      this.addAriaAndCollapsedClass(this.$element, this.$trigger)
+    }
+
+    if (this.options.toggle) this.toggle()
+  }
+
+  Collapse.VERSION  = '3.3.5'
+
+  Collapse.TRANSITION_DURATION = 350
+
+  Collapse.DEFAULTS = {
+    toggle: true
+  }
+
+  Collapse.prototype.dimension = function () {
+    var hasWidth = this.$element.hasClass('width')
+    return hasWidth ? 'width' : 'height'
+  }
+
+  Collapse.prototype.show = function () {
+    if (this.transitioning || this.$element.hasClass('in')) return
+
+    var activesData
+    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
+
+    if (actives && actives.length) {
+      activesData = actives.data('bs.collapse')
+      if (activesData && activesData.transitioning) return
+    }
+
+    var startEvent = $.Event('show.bs.collapse')
+    this.$element.trigger(startEvent)
+    if (startEvent.isDefaultPrevented()) return
+
+    if (actives && actives.length) {
+      Plugin.call(actives, 'hide')
+      activesData || actives.data('bs.collapse', null)
+    }
+
+    var dimension = this.dimension()
+
+    this.$element
+      .removeClass('collapse')
+      .addClass('collapsing')[dimension](0)
+      .attr('aria-expanded', true)
+
+    this.$trigger
+      .removeClass('collapsed')
+      .attr('aria-expanded', true)
+
+    this.transitioning = 1
+
+    var complete = function () {
+      this.$element
+        .removeClass('collapsing')
+        .addClass('collapse in')[dimension]('')
+      this.transitioning = 0
+      this.$element
+        .trigger('shown.bs.collapse')
+    }
+
+    if (!$.support.transition) return complete.call(this)
+
+    var scrollSize = $.camelCase(['scroll', dimension].join('-'))
+
+    this.$element
+      .one('bsTransitionEnd', $.proxy(complete, this))
+      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
+  }
+
+  Collapse.prototype.hide = function () {
+    if (this.transitioning || !this.$element.hasClass('in')) return
+
+    var startEvent = $.Event('hide.bs.collapse')
+    this.$element.trigger(startEvent)
+    if (startEvent.isDefaultPrevented()) return
+
+    var dimension = this.dimension()
+
+    this.$element[dimension](this.$element[dimension]())[0].offsetHeight
+
+    this.$element
+      .addClass('collapsing')
+      .removeClass('collapse in')
+      .attr('aria-expanded', false)
+
+    this.$trigger
+      .addClass('collapsed')
+      .attr('aria-expanded', false)
+
+    this.transitioning = 1
+
+    var complete = function () {
+      this.transitioning = 0
+      this.$element
+        .removeClass('collapsing')
+        .addClass('collapse')
+        .trigger('hidden.bs.collapse')
+    }
+
+    if (!$.support.transition) return complete.call(this)
+
+    this.$element
+      [dimension](0)
+      .one('bsTransitionEnd', $.proxy(complete, this))
+      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
+  }
+
+  Collapse.prototype.toggle = function () {
+    this[this.$element.hasClass('in') ? 'hide' : 'show']()
+  }
+
+  Collapse.prototype.getParent = function () {
+    return $(this.options.parent)
+      .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
+      .each($.proxy(function (i, element) {
+        var $element = $(element)
+        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
+      }, this))
+      .end()
+  }
+
+  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
+    var isOpen = $element.hasClass('in')
+
+    $element.attr('aria-expanded', isOpen)
+    $trigger
+      .toggleClass('collapsed', !isOpen)
+      .attr('aria-expanded', isOpen)
+  }
+
+  function getTargetFromTrigger($trigger) {
+    var href
+    var target = $trigger.attr('data-target')
+      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
+
+    return $(target)
+  }
+
+
+  // COLLAPSE PLUGIN DEFINITION
+  // ==========================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this   = $(this)
+      var data    = $this.data('bs.collapse')
+      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
+      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  var old = $.fn.collapse
+
+  $.fn.collapse             = Plugin
+  $.fn.collapse.Constructor = Collapse
+
+
+  // COLLAPSE NO CONFLICT
+  // ====================
+
+  $.fn.collapse.noConflict = function () {
+    $.fn.collapse = old
+    return this
+  }
+
+
+  // COLLAPSE DATA-API
+  // =================
+
+  $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
+    var $this   = $(this)
+
+    if (!$this.attr('data-target')) e.preventDefault()
+
+    var $target = getTargetFromTrigger($this)
+    var data    = $target.data('bs.collapse')
+    var option  = data ? 'toggle' : $this.data()
+
+    Plugin.call($target, option)
+  })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: dropdown.js v3.3.5
+ * http://getbootstrap.com/javascript/#dropdowns
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // DROPDOWN CLASS DEFINITION
+  // =========================
+
+  var backdrop = '.dropdown-backdrop'
+  var toggle   = '[data-toggle="dropdown"]'
+  var Dropdown = function (element) {
+    $(element).on('click.bs.dropdown', this.toggle)
+  }
+
+  Dropdown.VERSION = '3.3.5'
+
+  function getParent($this) {
+    var selector = $this.attr('data-target')
+
+    if (!selector) {
+      selector = $this.attr('href')
+      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+    }
+
+    var $parent = selector && $(selector)
+
+    return $parent && $parent.length ? $parent : $this.parent()
+  }
+
+  function clearMenus(e) {
+    if (e && e.which === 3) return
+    $(backdrop).remove()
+    $(toggle).each(function () {
+      var $this         = $(this)
+      var $parent       = getParent($this)
+      var relatedTarget = { relatedTarget: this }
+
+      if (!$parent.hasClass('open')) return
+
+      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
+
+      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
+
+      if (e.isDefaultPrevented()) return
+
+      $this.attr('aria-expanded', 'false')
+      $parent.removeClass('open').trigger('hidden.bs.dropdown', relatedTarget)
+    })
+  }
+
+  Dropdown.prototype.toggle = function (e) {
+    var $this = $(this)
+
+    if ($this.is('.disabled, :disabled')) return
+
+    var $parent  = getParent($this)
+    var isActive = $parent.hasClass('open')
+
+    clearMenus()
+
+    if (!isActive) {
+      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
+        // if mobile we use a backdrop because click events don't delegate
+        $(document.createElement('div'))
+          .addClass('dropdown-backdrop')
+          .insertAfter($(this))
+          .on('click', clearMenus)
+      }
+
+      var relatedTarget = { relatedTarget: this }
+      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
+
+      if (e.isDefaultPrevented()) return
+
+      $this
+        .trigger('focus')
+        .attr('aria-expanded', 'true')
+
+      $parent
+        .toggleClass('open')
+        .trigger('shown.bs.dropdown', relatedTarget)
+    }
+
+    return false
+  }
+
+  Dropdown.prototype.keydown = function (e) {
+    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
+
+    var $this = $(this)
+
+    e.preventDefault()
+    e.stopPropagation()
+
+    if ($this.is('.disabled, :disabled')) return
+
+    var $parent  = getParent($this)
+    var isActive = $parent.hasClass('open')
+
+    if (!isActive && e.which != 27 || isActive && e.which == 27) {
+      if (e.which == 27) $parent.find(toggle).trigger('focus')
+      return $this.trigger('click')
+    }
+
+    var desc = ' li:not(.disabled):visible a'
+    var $items = $parent.find('.dropdown-menu' + desc)
+
+    if (!$items.length) return
+
+    var index = $items.index(e.target)
+
+    if (e.which == 38 && index > 0)                 index--         // up
+    if (e.which == 40 && index < $items.length - 1) index++         // down
+    if (!~index)                                    index = 0
+
+    $items.eq(index).trigger('focus')
+  }
+
+
+  // DROPDOWN PLUGIN DEFINITION
+  // ==========================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this = $(this)
+      var data  = $this.data('bs.dropdown')
+
+      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
+      if (typeof option == 'string') data[option].call($this)
+    })
+  }
+
+  var old = $.fn.dropdown
+
+  $.fn.dropdown             = Plugin
+  $.fn.dropdown.Constructor = Dropdown
+
+
+  // DROPDOWN NO CONFLICT
+  // ====================
+
+  $.fn.dropdown.noConflict = function () {
+    $.fn.dropdown = old
+    return this
+  }
+
+
+  // APPLY TO STANDARD DROPDOWN ELEMENTS
+  // ===================================
+
+  $(document)
+    .on('click.bs.dropdown.data-api', clearMenus)
+    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
+    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
+    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: modal.js v3.3.5
+ * http://getbootstrap.com/javascript/#modals
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // MODAL CLASS DEFINITION
+  // ======================
+
+  var Modal = function (element, options) {
+    this.options             = options
+    this.$body               = $(document.body)
+    this.$element            = $(element)
+    this.$dialog             = this.$element.find('.modal-dialog')
+    this.$backdrop           = null
+    this.isShown             = null
+    this.originalBodyPad     = null
+    this.scrollbarWidth      = 0
+    this.ignoreBackdropClick = false
+
+    if (this.options.remote) {
+      this.$element
+        .find('.modal-content')
+        .load(this.options.remote, $.proxy(function () {
+          this.$element.trigger('loaded.bs.modal')
+        }, this))
+    }
+  }
+
+  Modal.VERSION  = '3.3.5'
+
+  Modal.TRANSITION_DURATION = 300
+  Modal.BACKDROP_TRANSITION_DURATION = 150
+
+  Modal.DEFAULTS = {
+    backdrop: true,
+    keyboard: true,
+    show: true
+  }
+
+  Modal.prototype.toggle = function (_relatedTarget) {
+    return this.isShown ? this.hide() : this.show(_relatedTarget)
+  }
+
+  Modal.prototype.show = function (_relatedTarget) {
+    var that = this
+    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
+
+    this.$element.trigger(e)
+
+    if (this.isShown || e.isDefaultPrevented()) return
+
+    this.isShown = true
+
+    this.checkScrollbar()
+    this.setScrollbar()
+    this.$body.addClass('modal-open')
+
+    this.escape()
+    this.resize()
+
+    this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
+
+    this.$dialog.on('mousedown.dismiss.bs.modal', function () {
+      that.$element.one('mouseup.dismiss.bs.modal', function (e) {
+        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
+      })
+    })
+
+    this.backdrop(function () {
+      var transition = $.support.transition && that.$element.hasClass('fade')
+
+      if (!that.$element.parent().length) {
+        that.$element.appendTo(that.$body) // don't move modals dom position
+      }
+
+      that.$element
+        .show()
+        .scrollTop(0)
+
+      that.adjustDialog()
+
+      if (transition) {
+        that.$element[0].offsetWidth // force reflow
+      }
+
+      that.$element.addClass('in')
+
+      that.enforceFocus()
+
+      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
+
+      transition ?
+        that.$dialog // wait for modal to slide in
+          .one('bsTransitionEnd', function () {
+            that.$element.trigger('focus').trigger(e)
+          })
+          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+        that.$element.trigger('focus').trigger(e)
+    })
+  }
+
+  Modal.prototype.hide = function (e) {
+    if (e) e.preventDefault()
+
+    e = $.Event('hide.bs.modal')
+
+    this.$element.trigger(e)
+
+    if (!this.isShown || e.isDefaultPrevented()) return
+
+    this.isShown = false
+
+    this.escape()
+    this.resize()
+
+    $(document).off('focusin.bs.modal')
+
+    this.$element
+      .removeClass('in')
+      .off('click.dismiss.bs.modal')
+      .off('mouseup.dismiss.bs.modal')
+
+    this.$dialog.off('mousedown.dismiss.bs.modal')
+
+    $.support.transition && this.$element.hasClass('fade') ?
+      this.$element
+        .one('bsTransitionEnd', $.proxy(this.hideModal, this))
+        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
+      this.hideModal()
+  }
+
+  Modal.prototype.enforceFocus = function () {
+    $(document)
+      .off('focusin.bs.modal') // guard against infinite focus loop
+      .on('focusin.bs.modal', $.proxy(function (e) {
+        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
+          this.$element.trigger('focus')
+        }
+      }, this))
+  }
+
+  Modal.prototype.escape = function () {
+    if (this.isShown && this.options.keyboard) {
+      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
+        e.which == 27 && this.hide()
+      }, this))
+    } else if (!this.isShown) {
+      this.$element.off('keydown.dismiss.bs.modal')
+    }
+  }
+
+  Modal.prototype.resize = function () {
+    if (this.isShown) {
+      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
+    } else {
+      $(window).off('resize.bs.modal')
+    }
+  }
+
+  Modal.prototype.hideModal = function () {
+    var that = this
+    this.$element.hide()
+    this.backdrop(function () {
+      that.$body.removeClass('modal-open')
+      that.resetAdjustments()
+      that.resetScrollbar()
+      that.$element.trigger('hidden.bs.modal')
+    })
+  }
+
+  Modal.prototype.removeBackdrop = function () {
+    this.$backdrop && this.$backdrop.remove()
+    this.$backdrop = null
+  }
+
+  Modal.prototype.backdrop = function (callback) {
+    var that = this
+    var animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+    if (this.isShown && this.options.backdrop) {
+      var doAnimate = $.support.transition && animate
+
+      this.$backdrop = $(document.createElement('div'))
+        .addClass('modal-backdrop ' + animate)
+        .appendTo(this.$body)
+
+      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
+        if (this.ignoreBackdropClick) {
+          this.ignoreBackdropClick = false
+          return
+        }
+        if (e.target !== e.currentTarget) return
+        this.options.backdrop == 'static'
+          ? this.$element[0].focus()
+          : this.hide()
+      }, this))
+
+      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+      this.$backdrop.addClass('in')
+
+      if (!callback) return
+
+      doAnimate ?
+        this.$backdrop
+          .one('bsTransitionEnd', callback)
+          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+        callback()
+
+    } else if (!this.isShown && this.$backdrop) {
+      this.$backdrop.removeClass('in')
+
+      var callbackRemove = function () {
+        that.removeBackdrop()
+        callback && callback()
+      }
+      $.support.transition && this.$element.hasClass('fade') ?
+        this.$backdrop
+          .one('bsTransitionEnd', callbackRemove)
+          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
+        callbackRemove()
+
+    } else if (callback) {
+      callback()
+    }
+  }
+
+  // these following methods are used to handle overflowing modals
+
+  Modal.prototype.handleUpdate = function () {
+    this.adjustDialog()
+  }
+
+  Modal.prototype.adjustDialog = function () {
+    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
+
+    this.$element.css({
+      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
+      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
+    })
+  }
+
+  Modal.prototype.resetAdjustments = function () {
+    this.$element.css({
+      paddingLeft: '',
+      paddingRight: ''
+    })
+  }
+
+  Modal.prototype.checkScrollbar = function () {
+    var fullWindowWidth = window.innerWidth
+    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
+      var documentElementRect = document.documentElement.getBoundingClientRect()
+      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
+    }
+    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
+    this.scrollbarWidth = this.measureScrollbar()
+  }
+
+  Modal.prototype.setScrollbar = function () {
+    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
+    this.originalBodyPad = document.body.style.paddingRight || ''
+    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
+  }
+
+  Modal.prototype.resetScrollbar = function () {
+    this.$body.css('padding-right', this.originalBodyPad)
+  }
+
+  Modal.prototype.measureScrollbar = function () { // thx walsh
+    var scrollDiv = document.createElement('div')
+    scrollDiv.className = 'modal-scrollbar-measure'
+    this.$body.append(scrollDiv)
+    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
+    this.$body[0].removeChild(scrollDiv)
+    return scrollbarWidth
+  }
+
+
+  // MODAL PLUGIN DEFINITION
+  // =======================
+
+  function Plugin(option, _relatedTarget) {
+    return this.each(function () {
+      var $this   = $(this)
+      var data    = $this.data('bs.modal')
+      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
+
+      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
+      if (typeof option == 'string') data[option](_relatedTarget)
+      else if (options.show) data.show(_relatedTarget)
+    })
+  }
+
+  var old = $.fn.modal
+
+  $.fn.modal             = Plugin
+  $.fn.modal.Constructor = Modal
+
+
+  // MODAL NO CONFLICT
+  // =================
+
+  $.fn.modal.noConflict = function () {
+    $.fn.modal = old
+    return this
+  }
+
+
+  // MODAL DATA-API
+  // ==============
+
+  $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
+    var $this   = $(this)
+    var href    = $this.attr('href')
+    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
+    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
+
+    if ($this.is('a')) e.preventDefault()
+
+    $target.one('show.bs.modal', function (showEvent) {
+      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
+      $target.one('hidden.bs.modal', function () {
+        $this.is(':visible') && $this.trigger('focus')
+      })
+    })
+    Plugin.call($target, option, this)
+  })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tooltip.js v3.3.5
+ * http://getbootstrap.com/javascript/#tooltip
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // TOOLTIP PUBLIC CLASS DEFINITION
+  // ===============================
+
+  var Tooltip = function (element, options) {
+    this.type       = null
+    this.options    = null
+    this.enabled    = null
+    this.timeout    = null
+    this.hoverState = null
+    this.$element   = null
+    this.inState    = null
+
+    this.init('tooltip', element, options)
+  }
+
+  Tooltip.VERSION  = '3.3.5'
+
+  Tooltip.TRANSITION_DURATION = 150
+
+  Tooltip.DEFAULTS = {
+    animation: true,
+    placement: 'top',
+    selector: false,
+    template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
+    trigger: 'hover focus',
+    title: '',
+    delay: 0,
+    html: false,
+    container: false,
+    viewport: {
+      selector: 'body',
+      padding: 0
+    }
+  }
+
+  Tooltip.prototype.init = function (type, element, options) {
+    this.enabled   = true
+    this.type      = type
+    this.$element  = $(element)
+    this.options   = this.getOptions(options)
+    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
+    this.inState   = { click: false, hover: false, focus: false }
+
+    if (this.$element[0] instanceof document.constructor && !this.options.selector) {
+      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
+    }
+
+    var triggers = this.options.trigger.split(' ')
+
+    for (var i = triggers.length; i--;) {
+      var trigger = triggers[i]
+
+      if (trigger == 'click') {
+        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
+      } else if (trigger != 'manual') {
+        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'
+        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
+
+        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
+        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
+      }
+    }
+
+    this.options.selector ?
+      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
+      this.fixTitle()
+  }
+
+  Tooltip.prototype.getDefaults = function () {
+    return Tooltip.DEFAULTS
+  }
+
+  Tooltip.prototype.getOptions = function (options) {
+    options = $.extend({}, this.getDefaults(), this.$element.data(), options)
+
+    if (options.delay && typeof options.delay == 'number') {
+      options.delay = {
+        show: options.delay,
+        hide: options.delay
+      }
+    }
+
+    return options
+  }
+
+  Tooltip.prototype.getDelegateOptions = function () {
+    var options  = {}
+    var defaults = this.getDefaults()
+
+    this._options && $.each(this._options, function (key, value) {
+      if (defaults[key] != value) options[key] = value
+    })
+
+    return options
+  }
+
+  Tooltip.prototype.enter = function (obj) {
+    var self = obj instanceof this.constructor ?
+      obj : $(obj.currentTarget).data('bs.' + this.type)
+
+    if (!self) {
+      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+      $(obj.currentTarget).data('bs.' + this.type, self)
+    }
+
+    if (obj instanceof $.Event) {
+      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
+    }
+
+    if (self.tip().hasClass('in') || self.hoverState == 'in') {
+      self.hoverState = 'in'
+      return
+    }
+
+    clearTimeout(self.timeout)
+
+    self.hoverState = 'in'
+
+    if (!self.options.delay || !self.options.delay.show) return self.show()
+
+    self.timeout = setTimeout(function () {
+      if (self.hoverState == 'in') self.show()
+    }, self.options.delay.show)
+  }
+
+  Tooltip.prototype.isInStateTrue = function () {
+    for (var key in this.inState) {
+      if (this.inState[key]) return true
+    }
+
+    return false
+  }
+
+  Tooltip.prototype.leave = function (obj) {
+    var self = obj instanceof this.constructor ?
+      obj : $(obj.currentTarget).data('bs.' + this.type)
+
+    if (!self) {
+      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
+      $(obj.currentTarget).data('bs.' + this.type, self)
+    }
+
+    if (obj instanceof $.Event) {
+      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
+    }
+
+    if (self.isInStateTrue()) return
+
+    clearTimeout(self.timeout)
+
+    self.hoverState = 'out'
+
+    if (!self.options.delay || !self.options.delay.hide) return self.hide()
+
+    self.timeout = setTimeout(function () {
+      if (self.hoverState == 'out') self.hide()
+    }, self.options.delay.hide)
+  }
+
+  Tooltip.prototype.show = function () {
+    var e = $.Event('show.bs.' + this.type)
+
+    if (this.hasContent() && this.enabled) {
+      this.$element.trigger(e)
+
+      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
+      if (e.isDefaultPrevented() || !inDom) return
+      var that = this
+
+      var $tip = this.tip()
+
+      var tipId = this.getUID(this.type)
+
+      this.setContent()
+      $tip.attr('id', tipId)
+      this.$element.attr('aria-describedby', tipId)
+
+      if (this.options.animation) $tip.addClass('fade')
+
+      var placement = typeof this.options.placement == 'function' ?
+        this.options.placement.call(this, $tip[0], this.$element[0]) :
+        this.options.placement
+
+      var autoToken = /\s?auto?\s?/i
+      var autoPlace = autoToken.test(placement)
+      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
+
+      $tip
+        .detach()
+        .css({ top: 0, left: 0, display: 'block' })
+        .addClass(placement)
+        .data('bs.' + this.type, this)
+
+      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
+      this.$element.trigger('inserted.bs.' + this.type)
+
+      var pos          = this.getPosition()
+      var actualWidth  = $tip[0].offsetWidth
+      var actualHeight = $tip[0].offsetHeight
+
+      if (autoPlace) {
+        var orgPlacement = placement
+        var viewportDim = this.getPosition(this.$viewport)
+
+        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :
+                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :
+                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :
+                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :
+                    placement
+
+        $tip
+          .removeClass(orgPlacement)
+          .addClass(placement)
+      }
+
+      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
+
+      this.applyPlacement(calculatedOffset, placement)
+
+      var complete = function () {
+        var prevHoverState = that.hoverState
+        that.$element.trigger('shown.bs.' + that.type)
+        that.hoverState = null
+
+        if (prevHoverState == 'out') that.leave(that)
+      }
+
+      $.support.transition && this.$tip.hasClass('fade') ?
+        $tip
+          .one('bsTransitionEnd', complete)
+          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+        complete()
+    }
+  }
+
+  Tooltip.prototype.applyPlacement = function (offset, placement) {
+    var $tip   = this.tip()
+    var width  = $tip[0].offsetWidth
+    var height = $tip[0].offsetHeight
+
+    // manually read margins because getBoundingClientRect includes difference
+    var marginTop = parseInt($tip.css('margin-top'), 10)
+    var marginLeft = parseInt($tip.css('margin-left'), 10)
+
+    // we must check for NaN for ie 8/9
+    if (isNaN(marginTop))  marginTop  = 0
+    if (isNaN(marginLeft)) marginLeft = 0
+
+    offset.top  += marginTop
+    offset.left += marginLeft
+
+    // $.fn.offset doesn't round pixel values
+    // so we use setOffset directly with our own function B-0
+    $.offset.setOffset($tip[0], $.extend({
+      using: function (props) {
+        $tip.css({
+          top: Math.round(props.top),
+          left: Math.round(props.left)
+        })
+      }
+    }, offset), 0)
+
+    $tip.addClass('in')
+
+    // check to see if placing tip in new offset caused the tip to resize itself
+    var actualWidth  = $tip[0].offsetWidth
+    var actualHeight = $tip[0].offsetHeight
+
+    if (placement == 'top' && actualHeight != height) {
+      offset.top = offset.top + height - actualHeight
+    }
+
+    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
+
+    if (delta.left) offset.left += delta.left
+    else offset.top += delta.top
+
+    var isVertical          = /top|bottom/.test(placement)
+    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
+    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
+
+    $tip.offset(offset)
+    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
+  }
+
+  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
+    this.arrow()
+      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
+      .css(isVertical ? 'top' : 'left', '')
+  }
+
+  Tooltip.prototype.setContent = function () {
+    var $tip  = this.tip()
+    var title = this.getTitle()
+
+    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
+    $tip.removeClass('fade in top bottom left right')
+  }
+
+  Tooltip.prototype.hide = function (callback) {
+    var that = this
+    var $tip = $(this.$tip)
+    var e    = $.Event('hide.bs.' + this.type)
+
+    function complete() {
+      if (that.hoverState != 'in') $tip.detach()
+      that.$element
+        .removeAttr('aria-describedby')
+        .trigger('hidden.bs.' + that.type)
+      callback && callback()
+    }
+
+    this.$element.trigger(e)
+
+    if (e.isDefaultPrevented()) return
+
+    $tip.removeClass('in')
+
+    $.support.transition && $tip.hasClass('fade') ?
+      $tip
+        .one('bsTransitionEnd', complete)
+        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
+      complete()
+
+    this.hoverState = null
+
+    return this
+  }
+
+  Tooltip.prototype.fixTitle = function () {
+    var $e = this.$element
+    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
+      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
+    }
+  }
+
+  Tooltip.prototype.hasContent = function () {
+    return this.getTitle()
+  }
+
+  Tooltip.prototype.getPosition = function ($element) {
+    $element   = $element || this.$element
+
+    var el     = $element[0]
+    var isBody = el.tagName == 'BODY'
+
+    var elRect    = el.getBoundingClientRect()
+    if (elRect.width == null) {
+      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
+      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
+    }
+    var elOffset  = isBody ? { top: 0, left: 0 } : $element.offset()
+    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
+    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
+
+    return $.extend({}, elRect, scroll, outerDims, elOffset)
+  }
+
+  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
+    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :
+           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
+           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
+        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
+
+  }
+
+  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
+    var delta = { top: 0, left: 0 }
+    if (!this.$viewport) return delta
+
+    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
+    var viewportDimensions = this.getPosition(this.$viewport)
+
+    if (/right|left/.test(placement)) {
+      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll
+      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
+      if (topEdgeOffset < viewportDimensions.top) { // top overflow
+        delta.top = viewportDimensions.top - topEdgeOffset
+      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
+        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
+      }
+    } else {
+      var leftEdgeOffset  = pos.left - viewportPadding
+      var rightEdgeOffset = pos.left + viewportPadding + actualWidth
+      if (leftEdgeOffset < viewportDimensions.left) { // left overflow
+        delta.left = viewportDimensions.left - leftEdgeOffset
+      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
+        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
+      }
+    }
+
+    return delta
+  }
+
+  Tooltip.prototype.getTitle = function () {
+    var title
+    var $e = this.$element
+    var o  = this.options
+
+    title = $e.attr('data-original-title')
+      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
+
+    return title
+  }
+
+  Tooltip.prototype.getUID = function (prefix) {
+    do prefix += ~~(Math.random() * 1000000)
+    while (document.getElementById(prefix))
+    return prefix
+  }
+
+  Tooltip.prototype.tip = function () {
+    if (!this.$tip) {
+      this.$tip = $(this.options.template)
+      if (this.$tip.length != 1) {
+        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
+      }
+    }
+    return this.$tip
+  }
+
+  Tooltip.prototype.arrow = function () {
+    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
+  }
+
+  Tooltip.prototype.enable = function () {
+    this.enabled = true
+  }
+
+  Tooltip.prototype.disable = function () {
+    this.enabled = false
+  }
+
+  Tooltip.prototype.toggleEnabled = function () {
+    this.enabled = !this.enabled
+  }
+
+  Tooltip.prototype.toggle = function (e) {
+    var self = this
+    if (e) {
+      self = $(e.currentTarget).data('bs.' + this.type)
+      if (!self) {
+        self = new this.constructor(e.currentTarget, this.getDelegateOptions())
+        $(e.currentTarget).data('bs.' + this.type, self)
+      }
+    }
+
+    if (e) {
+      self.inState.click = !self.inState.click
+      if (self.isInStateTrue()) self.enter(self)
+      else self.leave(self)
+    } else {
+      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
+    }
+  }
+
+  Tooltip.prototype.destroy = function () {
+    var that = this
+    clearTimeout(this.timeout)
+    this.hide(function () {
+      that.$element.off('.' + that.type).removeData('bs.' + that.type)
+      if (that.$tip) {
+        that.$tip.detach()
+      }
+      that.$tip = null
+      that.$arrow = null
+      that.$viewport = null
+    })
+  }
+
+
+  // TOOLTIP PLUGIN DEFINITION
+  // =========================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this   = $(this)
+      var data    = $this.data('bs.tooltip')
+      var options = typeof option == 'object' && option
+
+      if (!data && /destroy|hide/.test(option)) return
+      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  var old = $.fn.tooltip
+
+  $.fn.tooltip             = Plugin
+  $.fn.tooltip.Constructor = Tooltip
+
+
+  // TOOLTIP NO CONFLICT
+  // ===================
+
+  $.fn.tooltip.noConflict = function () {
+    $.fn.tooltip = old
+    return this
+  }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: popover.js v3.3.5
+ * http://getbootstrap.com/javascript/#popovers
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // POPOVER PUBLIC CLASS DEFINITION
+  // ===============================
+
+  var Popover = function (element, options) {
+    this.init('popover', element, options)
+  }
+
+  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
+
+  Popover.VERSION  = '3.3.5'
+
+  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
+    placement: 'right',
+    trigger: 'click',
+    content: '',
+    template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
+  })
+
+
+  // NOTE: POPOVER EXTENDS tooltip.js
+  // ================================
+
+  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
+
+  Popover.prototype.constructor = Popover
+
+  Popover.prototype.getDefaults = function () {
+    return Popover.DEFAULTS
+  }
+
+  Popover.prototype.setContent = function () {
+    var $tip    = this.tip()
+    var title   = this.getTitle()
+    var content = this.getContent()
+
+    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
+    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
+      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
+    ](content)
+
+    $tip.removeClass('fade top bottom left right in')
+
+    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
+    // this manually by checking the contents.
+    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
+  }
+
+  Popover.prototype.hasContent = function () {
+    return this.getTitle() || this.getContent()
+  }
+
+  Popover.prototype.getContent = function () {
+    var $e = this.$element
+    var o  = this.options
+
+    return $e.attr('data-content')
+      || (typeof o.content == 'function' ?
+            o.content.call($e[0]) :
+            o.content)
+  }
+
+  Popover.prototype.arrow = function () {
+    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
+  }
+
+
+  // POPOVER PLUGIN DEFINITION
+  // =========================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this   = $(this)
+      var data    = $this.data('bs.popover')
+      var options = typeof option == 'object' && option
+
+      if (!data && /destroy|hide/.test(option)) return
+      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  var old = $.fn.popover
+
+  $.fn.popover             = Plugin
+  $.fn.popover.Constructor = Popover
+
+
+  // POPOVER NO CONFLICT
+  // ===================
+
+  $.fn.popover.noConflict = function () {
+    $.fn.popover = old
+    return this
+  }
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: scrollspy.js v3.3.5
+ * http://getbootstrap.com/javascript/#scrollspy
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // SCROLLSPY CLASS DEFINITION
+  // ==========================
+
+  function ScrollSpy(element, options) {
+    this.$body          = $(document.body)
+    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
+    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)
+    this.selector       = (this.options.target || '') + ' .nav li > a'
+    this.offsets        = []
+    this.targets        = []
+    this.activeTarget   = null
+    this.scrollHeight   = 0
+
+    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
+    this.refresh()
+    this.process()
+  }
+
+  ScrollSpy.VERSION  = '3.3.5'
+
+  ScrollSpy.DEFAULTS = {
+    offset: 10
+  }
+
+  ScrollSpy.prototype.getScrollHeight = function () {
+    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
+  }
+
+  ScrollSpy.prototype.refresh = function () {
+    var that          = this
+    var offsetMethod  = 'offset'
+    var offsetBase    = 0
+
+    this.offsets      = []
+    this.targets      = []
+    this.scrollHeight = this.getScrollHeight()
+
+    if (!$.isWindow(this.$scrollElement[0])) {
+      offsetMethod = 'position'
+      offsetBase   = this.$scrollElement.scrollTop()
+    }
+
+    this.$body
+      .find(this.selector)
+      .map(function () {
+        var $el   = $(this)
+        var href  = $el.data('target') || $el.attr('href')
+        var $href = /^#./.test(href) && $(href)
+
+        return ($href
+          && $href.length
+          && $href.is(':visible')
+          && [[$href[offsetMethod]().top + offsetBase, href]]) || null
+      })
+      .sort(function (a, b) { return a[0] - b[0] })
+      .each(function () {
+        that.offsets.push(this[0])
+        that.targets.push(this[1])
+      })
+  }
+
+  ScrollSpy.prototype.process = function () {
+    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset
+    var scrollHeight = this.getScrollHeight()
+    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()
+    var offsets      = this.offsets
+    var targets      = this.targets
+    var activeTarget = this.activeTarget
+    var i
+
+    if (this.scrollHeight != scrollHeight) {
+      this.refresh()
+    }
+
+    if (scrollTop >= maxScroll) {
+      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
+    }
+
+    if (activeTarget && scrollTop < offsets[0]) {
+      this.activeTarget = null
+      return this.clear()
+    }
+
+    for (i = offsets.length; i--;) {
+      activeTarget != targets[i]
+        && scrollTop >= offsets[i]
+        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
+        && this.activate(targets[i])
+    }
+  }
+
+  ScrollSpy.prototype.activate = function (target) {
+    this.activeTarget = target
+
+    this.clear()
+
+    var selector = this.selector +
+      '[data-target="' + target + '"],' +
+      this.selector + '[href="' + target + '"]'
+
+    var active = $(selector)
+      .parents('li')
+      .addClass('active')
+
+    if (active.parent('.dropdown-menu').length) {
+      active = active
+        .closest('li.dropdown')
+        .addClass('active')
+    }
+
+    active.trigger('activate.bs.scrollspy')
+  }
+
+  ScrollSpy.prototype.clear = function () {
+    $(this.selector)
+      .parentsUntil(this.options.target, '.active')
+      .removeClass('active')
+  }
+
+
+  // SCROLLSPY PLUGIN DEFINITION
+  // ===========================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this   = $(this)
+      var data    = $this.data('bs.scrollspy')
+      var options = typeof option == 'object' && option
+
+      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  var old = $.fn.scrollspy
+
+  $.fn.scrollspy             = Plugin
+  $.fn.scrollspy.Constructor = ScrollSpy
+
+
+  // SCROLLSPY NO CONFLICT
+  // =====================
+
+  $.fn.scrollspy.noConflict = function () {
+    $.fn.scrollspy = old
+    return this
+  }
+
+
+  // SCROLLSPY DATA-API
+  // ==================
+
+  $(window).on('load.bs.scrollspy.data-api', function () {
+    $('[data-spy="scroll"]').each(function () {
+      var $spy = $(this)
+      Plugin.call($spy, $spy.data())
+    })
+  })
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: tab.js v3.3.5
+ * http://getbootstrap.com/javascript/#tabs
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // TAB CLASS DEFINITION
+  // ====================
+
+  var Tab = function (element) {
+    // jscs:disable requireDollarBeforejQueryAssignment
+    this.element = $(element)
+    // jscs:enable requireDollarBeforejQueryAssignment
+  }
+
+  Tab.VERSION = '3.3.5'
+
+  Tab.TRANSITION_DURATION = 150
+
+  Tab.prototype.show = function () {
+    var $this    = this.element
+    var $ul      = $this.closest('ul:not(.dropdown-menu)')
+    var selector = $this.data('target')
+
+    if (!selector) {
+      selector = $this.attr('href')
+      selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
+    }
+
+    if ($this.parent('li').hasClass('active')) return
+
+    var $previous = $ul.find('.active:last a')
+    var hideEvent = $.Event('hide.bs.tab', {
+      relatedTarget: $this[0]
+    })
+    var showEvent = $.Event('show.bs.tab', {
+      relatedTarget: $previous[0]
+    })
+
+    $previous.trigger(hideEvent)
+    $this.trigger(showEvent)
+
+    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
+
+    var $target = $(selector)
+
+    this.activate($this.closest('li'), $ul)
+    this.activate($target, $target.parent(), function () {
+      $previous.trigger({
+        type: 'hidden.bs.tab',
+        relatedTarget: $this[0]
+      })
+      $this.trigger({
+        type: 'shown.bs.tab',
+        relatedTarget: $previous[0]
+      })
+    })
+  }
+
+  Tab.prototype.activate = function (element, container, callback) {
+    var $active    = container.find('> .active')
+    var transition = callback
+      && $.support.transition
+      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
+
+    function next() {
+      $active
+        .removeClass('active')
+        .find('> .dropdown-menu > .active')
+          .removeClass('active')
+        .end()
+        .find('[data-toggle="tab"]')
+          .attr('aria-expanded', false)
+
+      element
+        .addClass('active')
+        .find('[data-toggle="tab"]')
+          .attr('aria-expanded', true)
+
+      if (transition) {
+        element[0].offsetWidth // reflow for transition
+        element.addClass('in')
+      } else {
+        element.removeClass('fade')
+      }
+
+      if (element.parent('.dropdown-menu').length) {
+        element
+          .closest('li.dropdown')
+            .addClass('active')
+          .end()
+          .find('[data-toggle="tab"]')
+            .attr('aria-expanded', true)
+      }
+
+      callback && callback()
+    }
+
+    $active.length && transition ?
+      $active
+        .one('bsTransitionEnd', next)
+        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
+      next()
+
+    $active.removeClass('in')
+  }
+
+
+  // TAB PLUGIN DEFINITION
+  // =====================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this = $(this)
+      var data  = $this.data('bs.tab')
+
+      if (!data) $this.data('bs.tab', (data = new Tab(this)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  var old = $.fn.tab
+
+  $.fn.tab             = Plugin
+  $.fn.tab.Constructor = Tab
+
+
+  // TAB NO CONFLICT
+  // ===============
+
+  $.fn.tab.noConflict = function () {
+    $.fn.tab = old
+    return this
+  }
+
+
+  // TAB DATA-API
+  // ============
+
+  var clickHandler = function (e) {
+    e.preventDefault()
+    Plugin.call($(this), 'show')
+  }
+
+  $(document)
+    .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
+    .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
+
+}(jQuery);
+
+/* ========================================================================
+ * Bootstrap: affix.js v3.3.5
+ * http://getbootstrap.com/javascript/#affix
+ * ========================================================================
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * ======================================================================== */
+
+
++function ($) {
+  'use strict';
+
+  // AFFIX CLASS DEFINITION
+  // ======================
+
+  var Affix = function (element, options) {
+    this.options = $.extend({}, Affix.DEFAULTS, options)
+
+    this.$target = $(this.options.target)
+      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
+      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))
+
+    this.$element     = $(element)
+    this.affixed      = null
+    this.unpin        = null
+    this.pinnedOffset = null
+
+    this.checkPosition()
+  }
+
+  Affix.VERSION  = '3.3.5'
+
+  Affix.RESET    = 'affix affix-top affix-bottom'
+
+  Affix.DEFAULTS = {
+    offset: 0,
+    target: window
+  }
+
+  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
+    var scrollTop    = this.$target.scrollTop()
+    var position     = this.$element.offset()
+    var targetHeight = this.$target.height()
+
+    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
+
+    if (this.affixed == 'bottom') {
+      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
+      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
+    }
+
+    var initializing   = this.affixed == null
+    var colliderTop    = initializing ? scrollTop : position.top
+    var colliderHeight = initializing ? targetHeight : height
+
+    if (offsetTop != null && scrollTop <= offsetTop) return 'top'
+    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
+
+    return false
+  }
+
+  Affix.prototype.getPinnedOffset = function () {
+    if (this.pinnedOffset) return this.pinnedOffset
+    this.$element.removeClass(Affix.RESET).addClass('affix')
+    var scrollTop = this.$target.scrollTop()
+    var position  = this.$element.offset()
+    return (this.pinnedOffset = position.top - scrollTop)
+  }
+
+  Affix.prototype.checkPositionWithEventLoop = function () {
+    setTimeout($.proxy(this.checkPosition, this), 1)
+  }
+
+  Affix.prototype.checkPosition = function () {
+    if (!this.$element.is(':visible')) return
+
+    var height       = this.$element.height()
+    var offset       = this.options.offset
+    var offsetTop    = offset.top
+    var offsetBottom = offset.bottom
+    var scrollHeight = Math.max($(document).height(), $(document.body).height())
+
+    if (typeof offset != 'object')         offsetBottom = offsetTop = offset
+    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)
+    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
+
+    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
+
+    if (this.affixed != affix) {
+      if (this.unpin != null) this.$element.css('top', '')
+
+      var affixType = 'affix' + (affix ? '-' + affix : '')
+      var e         = $.Event(affixType + '.bs.affix')
+
+      this.$element.trigger(e)
+
+      if (e.isDefaultPrevented()) return
+
+      this.affixed = affix
+      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
+
+      this.$element
+        .removeClass(Affix.RESET)
+        .addClass(affixType)
+        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
+    }
+
+    if (affix == 'bottom') {
+      this.$element.offset({
+        top: scrollHeight - height - offsetBottom
+      })
+    }
+  }
+
+
+  // AFFIX PLUGIN DEFINITION
+  // =======================
+
+  function Plugin(option) {
+    return this.each(function () {
+      var $this   = $(this)
+      var data    = $this.data('bs.affix')
+      var options = typeof option == 'object' && option
+
+      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  var old = $.fn.affix
+
+  $.fn.affix             = Plugin
+  $.fn.affix.Constructor = Affix
+
+
+  // AFFIX NO CONFLICT
+  // =================
+
+  $.fn.affix.noConflict = function () {
+    $.fn.affix = old
+    return this
+  }
+
+
+  // AFFIX DATA-API
+  // ==============
+
+  $(window).on('load', function () {
+    $('[data-spy="affix"]').each(function () {
+      var $spy = $(this)
+      var data = $spy.data()
+
+      data.offset = data.offset || {}
+
+      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
+      if (data.offsetTop    != null) data.offset.top    = data.offsetTop
+
+      Plugin.call($spy, data)
+    })
+  })
+
+}(jQuery);
diff --git a/public/bower_components/bootstrap/bootstrap.less b/public/bower_components/bootstrap/bootstrap.less
new file mode 100644
index 0000000..4b9916e
--- /dev/null
+++ b/public/bower_components/bootstrap/bootstrap.less
@@ -0,0 +1,56 @@
+/*!
+ * Bootstrap v3.3.5 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+// Core variables and mixins
+@import "variables.less";
+@import "mixins.less";
+
+// Reset and dependencies
+@import "normalize.less";
+@import "print.less";
+@import "glyphicons.less";
+
+// Core CSS
+@import "scaffolding.less";
+@import "type.less";
+@import "code.less";
+@import "grid.less";
+@import "tables.less";
+@import "forms.less";
+@import "buttons.less";
+
+// Components
+@import "component-animations.less";
+@import "dropdowns.less";
+@import "button-groups.less";
+@import "input-groups.less";
+@import "navs.less";
+@import "navbar.less";
+@import "breadcrumbs.less";
+@import "pagination.less";
+@import "pager.less";
+@import "labels.less";
+@import "badges.less";
+@import "jumbotron.less";
+@import "thumbnails.less";
+@import "alerts.less";
+@import "progress-bars.less";
+@import "media.less";
+@import "list-group.less";
+@import "panels.less";
+@import "responsive-embed.less";
+@import "wells.less";
+@import "close.less";
+
+// Components w/ JavaScript
+@import "modals.less";
+@import "tooltip.less";
+@import "popovers.less";
+@import "carousel.less";
+
+// Utility classes
+@import "utilities.less";
+@import "responsive-utilities.less";
diff --git a/public/bower_components/checklist-model/checklist-model.js b/public/bower_components/checklist-model/checklist-model.js
new file mode 100644
index 0000000..735ead8
--- /dev/null
+++ b/public/bower_components/checklist-model/checklist-model.js
@@ -0,0 +1,134 @@
+/**
+ * Checklist-model
+ * AngularJS directive for list of checkboxes
+ * https://github.com/vitalets/checklist-model
+ * License: MIT http://opensource.org/licenses/MIT
+ */
+
+angular.module('checklist-model', [])
+.directive('checklistModel', ['$parse', '$compile', function($parse, $compile) {
+  // contains
+  function contains(arr, item, comparator) {
+    if (angular.isArray(arr)) {
+      for (var i = arr.length; i--;) {
+        if (comparator(arr[i], item)) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
+  // add
+  function add(arr, item, comparator) {
+    arr = angular.isArray(arr) ? arr : [];
+      if(!contains(arr, item, comparator)) {
+          arr.push(item);
+      }
+    return arr;
+  }  
+
+  // remove
+  function remove(arr, item, comparator) {
+    if (angular.isArray(arr)) {
+      for (var i = arr.length; i--;) {
+        if (comparator(arr[i], item)) {
+          arr.splice(i, 1);
+          break;
+        }
+      }
+    }
+    return arr;
+  }
+
+  // http://stackoverflow.com/a/19228302/1458162
+  function postLinkFn(scope, elem, attrs) {
+     // exclude recursion, but still keep the model
+    var checklistModel = attrs.checklistModel;
+    attrs.$set("checklistModel", null);
+    // compile with `ng-model` pointing to `checked`
+    $compile(elem)(scope);
+    attrs.$set("checklistModel", checklistModel);
+
+    // getter / setter for original model
+    var getter = $parse(checklistModel);
+    var setter = getter.assign;
+    var checklistChange = $parse(attrs.checklistChange);
+
+    // value added to list
+    var value = attrs.checklistValue ? $parse(attrs.checklistValue)(scope.$parent) : attrs.value;
+
+
+    var comparator = angular.equals;
+
+    if (attrs.hasOwnProperty('checklistComparator')){
+      if (attrs.checklistComparator[0] == '.') {
+        var comparatorExpression = attrs.checklistComparator.substring(1);
+        comparator = function (a, b) {
+          return a[comparatorExpression] === b[comparatorExpression];
+        }
+        
+      } else {
+        comparator = $parse(attrs.checklistComparator)(scope.$parent);
+      }
+    }
+
+    // watch UI checked change
+    scope.$watch(attrs.ngModel, function(newValue, oldValue) {
+      if (newValue === oldValue) { 
+        return;
+      } 
+      var current = getter(scope.$parent);
+      if (angular.isFunction(setter)) {
+        if (newValue === true) {
+          setter(scope.$parent, add(current, value, comparator));
+        } else {
+          setter(scope.$parent, remove(current, value, comparator));
+        }
+      }
+
+      if (checklistChange) {
+        checklistChange(scope);
+      }
+    });
+    
+    // declare one function to be used for both $watch functions
+    function setChecked(newArr, oldArr) {
+        scope[attrs.ngModel] = contains(newArr, value, comparator);
+    }
+
+    // watch original model change
+    // use the faster $watchCollection method if it's available
+    if (angular.isFunction(scope.$parent.$watchCollection)) {
+        scope.$parent.$watchCollection(checklistModel, setChecked);
+    } else {
+        scope.$parent.$watch(checklistModel, setChecked, true);
+    }
+  }
+
+  return {
+    restrict: 'A',
+    priority: 1000,
+    terminal: true,
+    scope: true,
+    compile: function(tElement, tAttrs) {
+      if ((tElement[0].tagName !== 'INPUT' || tAttrs.type !== 'checkbox')
+          && (tElement[0].tagName !== 'MD-CHECKBOX')
+          && (!tAttrs.btnCheckbox)) {
+        throw 'checklist-model should be applied to `input[type="checkbox"]` or `md-checkbox`.';
+      }
+
+      if (!tAttrs.checklistValue && !tAttrs.value) {
+        throw 'You should provide `value` or `checklist-value`.';
+      }
+
+      // by default ngModel is 'checked', so we set it if not specified
+      if (!tAttrs.ngModel) {
+        // local scope var storing individual checkbox model
+        tAttrs.$set("ngModel", "checked");
+      }
+
+      return postLinkFn;
+    }
+  };
+}]);
diff --git a/public/bower_components/css-spinners/atebits.css b/public/bower_components/css-spinners/atebits.css
new file mode 100644
index 0000000..a378bfa
--- /dev/null
+++ b/public/bower_components/css-spinners/atebits.css
@@ -0,0 +1,306 @@
+@-moz-keyframes atebits-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  3% {
+    -moz-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  10% {
+    -moz-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  13% {
+    -moz-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  20% {
+    -moz-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  23% {
+    -moz-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  30% {
+    -moz-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  33% {
+    -moz-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  40% {
+    -moz-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  43% {
+    -moz-transform: rotate(270deg);
+    transform: rotate(270deg);
+  }
+  50% {
+    -moz-transform: rotate(270deg);
+    transform: rotate(270deg);
+  }
+  53% {
+    -moz-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  60% {
+    -moz-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  63% {
+    -moz-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  70% {
+    -moz-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  73% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  80% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  83% {
+    -moz-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+  }
+  90% {
+    -moz-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+  }
+  93% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+}
+@-webkit-keyframes atebits-loader {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  3% {
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  10% {
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  13% {
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  20% {
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  23% {
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  30% {
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  33% {
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  40% {
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  43% {
+    -webkit-transform: rotate(270deg);
+    transform: rotate(270deg);
+  }
+  50% {
+    -webkit-transform: rotate(270deg);
+    transform: rotate(270deg);
+  }
+  53% {
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  60% {
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  63% {
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  70% {
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  73% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  80% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  83% {
+    -webkit-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+  }
+  90% {
+    -webkit-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+  }
+  93% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+}
+@keyframes atebits-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  3% {
+    -moz-transform: rotate(90deg);
+    -ms-transform: rotate(90deg);
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  10% {
+    -moz-transform: rotate(90deg);
+    -ms-transform: rotate(90deg);
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  13% {
+    -moz-transform: rotate(180deg);
+    -ms-transform: rotate(180deg);
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  20% {
+    -moz-transform: rotate(180deg);
+    -ms-transform: rotate(180deg);
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  23% {
+    -moz-transform: rotate(90deg);
+    -ms-transform: rotate(90deg);
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  30% {
+    -moz-transform: rotate(90deg);
+    -ms-transform: rotate(90deg);
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  33% {
+    -moz-transform: rotate(180deg);
+    -ms-transform: rotate(180deg);
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  40% {
+    -moz-transform: rotate(180deg);
+    -ms-transform: rotate(180deg);
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  43% {
+    -moz-transform: rotate(270deg);
+    -ms-transform: rotate(270deg);
+    -webkit-transform: rotate(270deg);
+    transform: rotate(270deg);
+  }
+  50% {
+    -moz-transform: rotate(270deg);
+    -ms-transform: rotate(270deg);
+    -webkit-transform: rotate(270deg);
+    transform: rotate(270deg);
+  }
+  53% {
+    -moz-transform: rotate(180deg);
+    -ms-transform: rotate(180deg);
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  60% {
+    -moz-transform: rotate(180deg);
+    -ms-transform: rotate(180deg);
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  63% {
+    -moz-transform: rotate(90deg);
+    -ms-transform: rotate(90deg);
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  70% {
+    -moz-transform: rotate(90deg);
+    -ms-transform: rotate(90deg);
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  73% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  80% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  83% {
+    -moz-transform: rotate(-90deg);
+    -ms-transform: rotate(-90deg);
+    -webkit-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+  }
+  90% {
+    -moz-transform: rotate(-90deg);
+    -ms-transform: rotate(-90deg);
+    -webkit-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+  }
+  93% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.atebits-loader:not(:required) {
+  background: rgba(0, 0, 0, 0.5);
+  display: inline-block;
+  width: 9px;
+  height: 9px;
+  overflow: hidden;
+  position: relative;
+  text-indent: -9999px;
+  -moz-box-shadow: rgba(0, 0, 0, 0.5) -12px -12px 0 0, rgba(0, 0, 0, 0.5) 12px -12px 0 0, rgba(0, 0, 0, 0.5) -12px 0 0 0, rgba(0, 0, 0, 0.5) 12px 0 0 0, rgba(0, 0, 0, 0.5) -12px 12px 0 0, rgba(0, 0, 0, 0.5) 0 12px 0 0, rgba(0, 0, 0, 0.5) 12px 12px 0 0;
+  -webkit-box-shadow: rgba(0, 0, 0, 0.5) -12px -12px 0 0, rgba(0, 0, 0, 0.5) 12px -12px 0 0, rgba(0, 0, 0, 0.5) -12px 0 0 0, rgba(0, 0, 0, 0.5) 12px 0 0 0, rgba(0, 0, 0, 0.5) -12px 12px 0 0, rgba(0, 0, 0, 0.5) 0 12px 0 0, rgba(0, 0, 0, 0.5) 12px 12px 0 0;
+  box-shadow: rgba(0, 0, 0, 0.5) -12px -12px 0 0, rgba(0, 0, 0, 0.5) 12px -12px 0 0, rgba(0, 0, 0, 0.5) -12px 0 0 0, rgba(0, 0, 0, 0.5) 12px 0 0 0, rgba(0, 0, 0, 0.5) -12px 12px 0 0, rgba(0, 0, 0, 0.5) 0 12px 0 0, rgba(0, 0, 0, 0.5) 12px 12px 0 0;
+  -moz-animation: atebits-loader 8s infinite ease-in-out;
+  -webkit-animation: atebits-loader 8s infinite ease-in-out;
+  animation: atebits-loader 8s infinite ease-in-out;
+  -moz-transform-origin: 50% 50%;
+  -ms-transform-origin: 50% 50%;
+  -webkit-transform-origin: 50% 50%;
+  transform-origin: 50% 50%;
+}
diff --git a/public/bower_components/css-spinners/ball.css b/public/bower_components/css-spinners/ball.css
new file mode 100644
index 0000000..bf59e60
--- /dev/null
+++ b/public/bower_components/css-spinners/ball.css
@@ -0,0 +1,373 @@
+@-moz-keyframes ball-loader {
+  0% {
+    -moz-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+    transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
+    -moz-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
+    -moz-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+}
+@-webkit-keyframes ball-loader {
+  0% {
+    -webkit-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+    transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
+    -webkit-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+}
+@keyframes ball-loader {
+  0% {
+    -moz-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+    -ms-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+    -webkit-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+    transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
+    -ms-transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
+    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
+    -ms-transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
+    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
+    -moz-animation-timing-function: linear;
+    -webkit-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
+    -ms-transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
+    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
+    -moz-animation-timing-function: ease-out;
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+}
+@-moz-keyframes ball-loader-highlight {
+  0% {
+    -moz-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -moz-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -moz-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  100% {
+    -moz-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+@-webkit-keyframes ball-loader-highlight {
+  0% {
+    -webkit-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -webkit-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  100% {
+    -webkit-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+@keyframes ball-loader-highlight {
+  0% {
+    -moz-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -ms-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -webkit-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -ms-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -ms-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -moz-animation-timing-function: linear;
+    -webkit-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -ms-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -moz-animation-timing-function: ease-out;
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  100% {
+    -moz-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -ms-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -webkit-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+@-moz-keyframes ball-loader-shadow {
+  0% {
+    -moz-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -moz-transform: translate3d(12.5px, -15px, -1px);
+    transform: translate3d(12.5px, -15px, -1px);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -moz-transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
+    transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
+    -moz-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -moz-transform: translate3d(12.5px, -15px, -1px);
+    transform: translate3d(12.5px, -15px, -1px);
+    -moz-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  100% {
+    -moz-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+@-webkit-keyframes ball-loader-shadow {
+  0% {
+    -webkit-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -webkit-transform: translate3d(12.5px, -15px, -1px);
+    transform: translate3d(12.5px, -15px, -1px);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -webkit-transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
+    transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
+    -webkit-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -webkit-transform: translate3d(12.5px, -15px, -1px);
+    transform: translate3d(12.5px, -15px, -1px);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  100% {
+    -webkit-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+@keyframes ball-loader-shadow {
+  0% {
+    -moz-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -ms-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -webkit-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -moz-transform: translate3d(12.5px, -15px, -1px);
+    -ms-transform: translate3d(12.5px, -15px, -1px);
+    -webkit-transform: translate3d(12.5px, -15px, -1px);
+    transform: translate3d(12.5px, -15px, -1px);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -moz-transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
+    -ms-transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
+    -webkit-transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
+    transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
+    -moz-animation-timing-function: linear;
+    -webkit-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -moz-transform: translate3d(12.5px, -15px, -1px);
+    -ms-transform: translate3d(12.5px, -15px, -1px);
+    -webkit-transform: translate3d(12.5px, -15px, -1px);
+    transform: translate3d(12.5px, -15px, -1px);
+    -moz-animation-timing-function: ease-out;
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  100% {
+    -moz-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -ms-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -webkit-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.ball-loader:not(:required) {
+  position: relative;
+  display: inline-block;
+  font-size: 0;
+  letter-spacing: -1px;
+  border-radius: 100%;
+  background: #f86;
+  width: 50px;
+  height: 50px;
+  -moz-transform-style: preserve-3d;
+  -webkit-transform-style: preserve-3d;
+  transform-style: preserve-3d;
+  -moz-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+  -ms-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+  -webkit-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+  transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+  -moz-transform-origin: 0 100%;
+  -ms-transform-origin: 0 100%;
+  -webkit-transform-origin: 0 100%;
+  transform-origin: 0 100%;
+  -moz-animation: ball-loader 1500ms infinite linear;
+  -webkit-animation: ball-loader 1500ms infinite linear;
+  animation: ball-loader 1500ms infinite linear;
+}
+.ball-loader:not(:required)::after {
+  content: '';
+  position: absolute;
+  top: 4.5px;
+  left: 5.5px;
+  width: 15px;
+  height: 15px;
+  background: #ffb099;
+  border-radius: 100%;
+  -moz-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+  -ms-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+  -webkit-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+  transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+  -moz-animation: ball-loader-highlight 1500ms infinite linear;
+  -webkit-animation: ball-loader-highlight 1500ms infinite linear;
+  animation: ball-loader-highlight 1500ms infinite linear;
+}
+.ball-loader:not(:required)::before {
+  content: '';
+  position: absolute;
+  top: 50px;
+  left: 5.5px;
+  width: 50px;
+  height: 15px;
+  background: rgba(0, 0, 0, 0.2);
+  border-radius: 100%;
+  -moz-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+  -ms-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+  -webkit-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+  transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+  -moz-animation: ball-loader-shadow 1500ms infinite linear;
+  -webkit-animation: ball-loader-shadow 1500ms infinite linear;
+  animation: ball-loader-shadow 1500ms infinite linear;
+  -webkit-filter: blur(1px);
+  filter: blur(1px);
+}
diff --git a/public/bower_components/css-spinners/circles.css b/public/bower_components/css-spinners/circles.css
new file mode 100644
index 0000000..f292d19
--- /dev/null
+++ b/public/bower_components/css-spinners/circles.css
@@ -0,0 +1,71 @@
+@-moz-keyframes circles-loader {
+  0% {
+    -moz-transform: rotate(-720deg);
+    transform: rotate(-720deg);
+  }
+  50% {
+    -moz-transform: rotate(720deg);
+    transform: rotate(720deg);
+  }
+}
+@-webkit-keyframes circles-loader {
+  0% {
+    -webkit-transform: rotate(-720deg);
+    transform: rotate(-720deg);
+  }
+  50% {
+    -webkit-transform: rotate(720deg);
+    transform: rotate(720deg);
+  }
+}
+@keyframes circles-loader {
+  0% {
+    -moz-transform: rotate(-720deg);
+    -ms-transform: rotate(-720deg);
+    -webkit-transform: rotate(-720deg);
+    transform: rotate(-720deg);
+  }
+  50% {
+    -moz-transform: rotate(720deg);
+    -ms-transform: rotate(720deg);
+    -webkit-transform: rotate(720deg);
+    transform: rotate(720deg);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.circles-loader:not(:required) {
+  position: relative;
+  text-indent: -9999px;
+  display: inline-block;
+  width: 25px;
+  height: 25px;
+  background: rgba(255, 204, 51, 0.9);
+  border-radius: 100%;
+  -moz-animation: circles-loader 3s infinite ease-in-out;
+  -webkit-animation: circles-loader 3s infinite ease-in-out;
+  animation: circles-loader 3s infinite ease-in-out;
+  -moz-transform-origin: 50% 100%;
+  -ms-transform-origin: 50% 100%;
+  -webkit-transform-origin: 50% 100%;
+  transform-origin: 50% 100%;
+}
+.circles-loader:not(:required)::before {
+  background: rgba(255, 102, 0, 0.6);
+  border-radius: 100%;
+  content: '';
+  position: absolute;
+  width: 25px;
+  height: 25px;
+  top: 18.75px;
+  left: -10.82532px;
+}
+.circles-loader:not(:required)::after {
+  background: rgba(255, 51, 0, 0.4);
+  border-radius: 100%;
+  content: '';
+  position: absolute;
+  width: 25px;
+  height: 25px;
+  top: 18.75px;
+  left: 10.82532px;
+}
diff --git a/public/bower_components/css-spinners/dots.css b/public/bower_components/css-spinners/dots.css
new file mode 100644
index 0000000..fcf10e4
--- /dev/null
+++ b/public/bower_components/css-spinners/dots.css
@@ -0,0 +1,196 @@
+@-moz-keyframes dots-loader {
+  0% {
+    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  8.33% {
+    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  16.67% {
+    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  25% {
+    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  33.33% {
+    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
+  }
+  41.67% {
+    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  50% {
+    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  58.33% {
+    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  66.67% {
+    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  75% {
+    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  83.33% {
+    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
+  }
+  91.67% {
+    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  100% {
+    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+}
+@-webkit-keyframes dots-loader {
+  0% {
+    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  8.33% {
+    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  16.67% {
+    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  25% {
+    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  33.33% {
+    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
+  }
+  41.67% {
+    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  50% {
+    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  58.33% {
+    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  66.67% {
+    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  75% {
+    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  83.33% {
+    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
+  }
+  91.67% {
+    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  100% {
+    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+}
+@keyframes dots-loader {
+  0% {
+    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  8.33% {
+    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  16.67% {
+    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  25% {
+    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  33.33% {
+    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
+    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
+  }
+  41.67% {
+    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  50% {
+    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  58.33% {
+    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  66.67% {
+    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  75% {
+    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  83.33% {
+    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
+    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
+  }
+  91.67% {
+    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  100% {
+    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.dots-loader:not(:required) {
+  overflow: hidden;
+  position: relative;
+  text-indent: -9999px;
+  display: inline-block;
+  width: 7px;
+  height: 7px;
+  background: transparent;
+  border-radius: 100%;
+  -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  -moz-animation: dots-loader 5s infinite ease-in-out;
+  -webkit-animation: dots-loader 5s infinite ease-in-out;
+  animation: dots-loader 5s infinite ease-in-out;
+  -moz-transform-origin: 50% 50%;
+  -ms-transform-origin: 50% 50%;
+  -webkit-transform-origin: 50% 50%;
+  transform-origin: 50% 50%;
+}
diff --git a/public/bower_components/css-spinners/flower.css b/public/bower_components/css-spinners/flower.css
new file mode 100644
index 0000000..433849e
--- /dev/null
+++ b/public/bower_components/css-spinners/flower.css
@@ -0,0 +1,69 @@
+@-moz-keyframes flower-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+    -moz-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+    box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+  }
+  50% {
+    -moz-transform: rotate(1080deg);
+    transform: rotate(1080deg);
+    -moz-box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
+    box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
+  }
+}
+@-webkit-keyframes flower-loader {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+    -webkit-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+    box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+  }
+  50% {
+    -webkit-transform: rotate(1080deg);
+    transform: rotate(1080deg);
+    -webkit-box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
+    box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
+  }
+}
+@keyframes flower-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+    -moz-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+    -webkit-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+    box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+  }
+  50% {
+    -moz-transform: rotate(1080deg);
+    -ms-transform: rotate(1080deg);
+    -webkit-transform: rotate(1080deg);
+    transform: rotate(1080deg);
+    -moz-box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
+    -webkit-box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
+    box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.flower-loader:not(:required) {
+  overflow: hidden;
+  position: relative;
+  text-indent: -9999px;
+  display: inline-block;
+  width: 16px;
+  height: 16px;
+  background: #e96;
+  border-radius: 100%;
+  -moz-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+  -webkit-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+  box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+  -moz-animation: flower-loader 5s infinite ease-in-out;
+  -webkit-animation: flower-loader 5s infinite ease-in-out;
+  animation: flower-loader 5s infinite ease-in-out;
+  -moz-transform-origin: 50% 50%;
+  -ms-transform-origin: 50% 50%;
+  -webkit-transform-origin: 50% 50%;
+  transform-origin: 50% 50%;
+}
diff --git a/public/bower_components/css-spinners/gauge.css b/public/bower_components/css-spinners/gauge.css
new file mode 100644
index 0000000..0dad69f
--- /dev/null
+++ b/public/bower_components/css-spinners/gauge.css
@@ -0,0 +1,277 @@
+@-moz-keyframes gauge-loader {
+  0% {
+    -moz-transform: rotate(-50deg);
+    transform: rotate(-50deg);
+  }
+  10% {
+    -moz-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  20% {
+    -moz-transform: rotate(60deg);
+    transform: rotate(60deg);
+  }
+  24% {
+    -moz-transform: rotate(60deg);
+    transform: rotate(60deg);
+  }
+  40% {
+    -moz-transform: rotate(-20deg);
+    transform: rotate(-20deg);
+  }
+  54% {
+    -moz-transform: rotate(70deg);
+    transform: rotate(70deg);
+  }
+  56% {
+    -moz-transform: rotate(78deg);
+    transform: rotate(78deg);
+  }
+  58% {
+    -moz-transform: rotate(73deg);
+    transform: rotate(73deg);
+  }
+  60% {
+    -moz-transform: rotate(75deg);
+    transform: rotate(75deg);
+  }
+  62% {
+    -moz-transform: rotate(70deg);
+    transform: rotate(70deg);
+  }
+  70% {
+    -moz-transform: rotate(-20deg);
+    transform: rotate(-20deg);
+  }
+  80% {
+    -moz-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  83% {
+    -moz-transform: rotate(25deg);
+    transform: rotate(25deg);
+  }
+  86% {
+    -moz-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  89% {
+    -moz-transform: rotate(25deg);
+    transform: rotate(25deg);
+  }
+  100% {
+    -moz-transform: rotate(-50deg);
+    transform: rotate(-50deg);
+  }
+}
+@-webkit-keyframes gauge-loader {
+  0% {
+    -webkit-transform: rotate(-50deg);
+    transform: rotate(-50deg);
+  }
+  10% {
+    -webkit-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  20% {
+    -webkit-transform: rotate(60deg);
+    transform: rotate(60deg);
+  }
+  24% {
+    -webkit-transform: rotate(60deg);
+    transform: rotate(60deg);
+  }
+  40% {
+    -webkit-transform: rotate(-20deg);
+    transform: rotate(-20deg);
+  }
+  54% {
+    -webkit-transform: rotate(70deg);
+    transform: rotate(70deg);
+  }
+  56% {
+    -webkit-transform: rotate(78deg);
+    transform: rotate(78deg);
+  }
+  58% {
+    -webkit-transform: rotate(73deg);
+    transform: rotate(73deg);
+  }
+  60% {
+    -webkit-transform: rotate(75deg);
+    transform: rotate(75deg);
+  }
+  62% {
+    -webkit-transform: rotate(70deg);
+    transform: rotate(70deg);
+  }
+  70% {
+    -webkit-transform: rotate(-20deg);
+    transform: rotate(-20deg);
+  }
+  80% {
+    -webkit-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  83% {
+    -webkit-transform: rotate(25deg);
+    transform: rotate(25deg);
+  }
+  86% {
+    -webkit-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  89% {
+    -webkit-transform: rotate(25deg);
+    transform: rotate(25deg);
+  }
+  100% {
+    -webkit-transform: rotate(-50deg);
+    transform: rotate(-50deg);
+  }
+}
+@keyframes gauge-loader {
+  0% {
+    -moz-transform: rotate(-50deg);
+    -ms-transform: rotate(-50deg);
+    -webkit-transform: rotate(-50deg);
+    transform: rotate(-50deg);
+  }
+  10% {
+    -moz-transform: rotate(20deg);
+    -ms-transform: rotate(20deg);
+    -webkit-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  20% {
+    -moz-transform: rotate(60deg);
+    -ms-transform: rotate(60deg);
+    -webkit-transform: rotate(60deg);
+    transform: rotate(60deg);
+  }
+  24% {
+    -moz-transform: rotate(60deg);
+    -ms-transform: rotate(60deg);
+    -webkit-transform: rotate(60deg);
+    transform: rotate(60deg);
+  }
+  40% {
+    -moz-transform: rotate(-20deg);
+    -ms-transform: rotate(-20deg);
+    -webkit-transform: rotate(-20deg);
+    transform: rotate(-20deg);
+  }
+  54% {
+    -moz-transform: rotate(70deg);
+    -ms-transform: rotate(70deg);
+    -webkit-transform: rotate(70deg);
+    transform: rotate(70deg);
+  }
+  56% {
+    -moz-transform: rotate(78deg);
+    -ms-transform: rotate(78deg);
+    -webkit-transform: rotate(78deg);
+    transform: rotate(78deg);
+  }
+  58% {
+    -moz-transform: rotate(73deg);
+    -ms-transform: rotate(73deg);
+    -webkit-transform: rotate(73deg);
+    transform: rotate(73deg);
+  }
+  60% {
+    -moz-transform: rotate(75deg);
+    -ms-transform: rotate(75deg);
+    -webkit-transform: rotate(75deg);
+    transform: rotate(75deg);
+  }
+  62% {
+    -moz-transform: rotate(70deg);
+    -ms-transform: rotate(70deg);
+    -webkit-transform: rotate(70deg);
+    transform: rotate(70deg);
+  }
+  70% {
+    -moz-transform: rotate(-20deg);
+    -ms-transform: rotate(-20deg);
+    -webkit-transform: rotate(-20deg);
+    transform: rotate(-20deg);
+  }
+  80% {
+    -moz-transform: rotate(20deg);
+    -ms-transform: rotate(20deg);
+    -webkit-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  83% {
+    -moz-transform: rotate(25deg);
+    -ms-transform: rotate(25deg);
+    -webkit-transform: rotate(25deg);
+    transform: rotate(25deg);
+  }
+  86% {
+    -moz-transform: rotate(20deg);
+    -ms-transform: rotate(20deg);
+    -webkit-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  89% {
+    -moz-transform: rotate(25deg);
+    -ms-transform: rotate(25deg);
+    -webkit-transform: rotate(25deg);
+    transform: rotate(25deg);
+  }
+  100% {
+    -moz-transform: rotate(-50deg);
+    -ms-transform: rotate(-50deg);
+    -webkit-transform: rotate(-50deg);
+    transform: rotate(-50deg);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.gauge-loader:not(:required) {
+  background: #6ca;
+  -moz-border-radius-topleft: 32px;
+  -webkit-border-top-left-radius: 32px;
+  border-top-left-radius: 32px;
+  -moz-border-radius-topright: 32px;
+  -webkit-border-top-right-radius: 32px;
+  border-top-right-radius: 32px;
+  display: inline-block;
+  width: 64px;
+  height: 32px;
+  overflow: hidden;
+  position: relative;
+  text-indent: -9999px;
+}
+.gauge-loader:not(:required)::before {
+  -moz-animation: gauge-loader 4000ms infinite ease;
+  -webkit-animation: gauge-loader 4000ms infinite ease;
+  animation: gauge-loader 4000ms infinite ease;
+  background: white;
+  -moz-border-radius: 2px;
+  -webkit-border-radius: 2px;
+  border-radius: 2px;
+  content: '';
+  position: absolute;
+  left: 30px;
+  top: 5.33333px;
+  width: 4px;
+  height: 26.66667px;
+  -moz-transform-origin: 50% 100%;
+  -ms-transform-origin: 50% 100%;
+  -webkit-transform-origin: 50% 100%;
+  transform-origin: 50% 100%;
+}
+.gauge-loader:not(:required)::after {
+  content: '';
+  background: white;
+  -moz-border-radius: 8px;
+  -webkit-border-radius: 8px;
+  border-radius: 8px;
+  position: absolute;
+  left: 25.6px;
+  top: 25.6px;
+  width: 12.8px;
+  height: 12.8px;
+}
diff --git a/public/bower_components/css-spinners/heartbeat.css b/public/bower_components/css-spinners/heartbeat.css
new file mode 100644
index 0000000..5a24069
--- /dev/null
+++ b/public/bower_components/css-spinners/heartbeat.css
@@ -0,0 +1,125 @@
+@-moz-keyframes heartbeat-loader {
+  0% {
+    -moz-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+  14% {
+    -moz-transform: rotate(45deg) scale(1.3);
+    transform: rotate(45deg) scale(1.3);
+  }
+  28% {
+    -moz-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+  42% {
+    -moz-transform: rotate(45deg) scale(1.3);
+    transform: rotate(45deg) scale(1.3);
+  }
+  70% {
+    -moz-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+}
+@-webkit-keyframes heartbeat-loader {
+  0% {
+    -webkit-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+  14% {
+    -webkit-transform: rotate(45deg) scale(1.3);
+    transform: rotate(45deg) scale(1.3);
+  }
+  28% {
+    -webkit-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+  42% {
+    -webkit-transform: rotate(45deg) scale(1.3);
+    transform: rotate(45deg) scale(1.3);
+  }
+  70% {
+    -webkit-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+}
+@keyframes heartbeat-loader {
+  0% {
+    -moz-transform: rotate(45deg) scale(1);
+    -ms-transform: rotate(45deg) scale(1);
+    -webkit-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+  14% {
+    -moz-transform: rotate(45deg) scale(1.3);
+    -ms-transform: rotate(45deg) scale(1.3);
+    -webkit-transform: rotate(45deg) scale(1.3);
+    transform: rotate(45deg) scale(1.3);
+  }
+  28% {
+    -moz-transform: rotate(45deg) scale(1);
+    -ms-transform: rotate(45deg) scale(1);
+    -webkit-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+  42% {
+    -moz-transform: rotate(45deg) scale(1.3);
+    -ms-transform: rotate(45deg) scale(1.3);
+    -webkit-transform: rotate(45deg) scale(1.3);
+    transform: rotate(45deg) scale(1.3);
+  }
+  70% {
+    -moz-transform: rotate(45deg) scale(1);
+    -ms-transform: rotate(45deg) scale(1);
+    -webkit-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.heartbeat-loader:not(:required) {
+  -moz-animation: heartbeat-loader 1300ms ease 0s infinite normal;
+  -webkit-animation: heartbeat-loader 1300ms ease 0s infinite normal;
+  animation: heartbeat-loader 1300ms ease 0s infinite normal;
+  display: inline-block;
+  position: relative;
+  overflow: hidden;
+  text-indent: -9999px;
+  width: 36px;
+  height: 36px;
+  -moz-transform: rotate(45deg) scale(1);
+  -ms-transform: rotate(45deg) scale(1);
+  -webkit-transform: rotate(45deg) scale(1);
+  transform: rotate(45deg) scale(1);
+  -moz-transform-origin: 50% 50%;
+  -ms-transform-origin: 50% 50%;
+  -webkit-transform-origin: 50% 50%;
+  transform-origin: 50% 50%;
+}
+.heartbeat-loader:not(:required):after, .heartbeat-loader:not(:required):before {
+  position: absolute;
+  content: "";
+  background: #e87;
+}
+.heartbeat-loader:not(:required):before {
+  -moz-border-radius-topleft: 12px;
+  -webkit-border-top-left-radius: 12px;
+  border-top-left-radius: 12px;
+  -moz-border-radius-bottomleft: 12px;
+  -webkit-border-bottom-left-radius: 12px;
+  border-bottom-left-radius: 12px;
+  top: 12px;
+  left: 0;
+  width: 36px;
+  height: 24px;
+}
+.heartbeat-loader:not(:required):after {
+  -moz-border-radius-topleft: 12px;
+  -webkit-border-top-left-radius: 12px;
+  border-top-left-radius: 12px;
+  -moz-border-radius-topright: 12px;
+  -webkit-border-top-right-radius: 12px;
+  border-top-right-radius: 12px;
+  top: 0;
+  left: 12px;
+  width: 24px;
+  height: 12px;
+}
diff --git a/public/bower_components/css-spinners/hexdots.css b/public/bower_components/css-spinners/hexdots.css
new file mode 100644
index 0000000..2166486
--- /dev/null
+++ b/public/bower_components/css-spinners/hexdots.css
@@ -0,0 +1,196 @@
+@-moz-keyframes hexdots-loader {
+  0% {
+    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  8.33% {
+    -moz-box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  16.67% {
+    -moz-box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  25% {
+    -moz-box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  33.33% {
+    -moz-box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  41.67% {
+    -moz-box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  50% {
+    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
+  }
+  58.33% {
+    -moz-box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
+    box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
+  }
+  66.67% {
+    -moz-box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
+    box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
+  }
+  75% {
+    -moz-box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+    box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+  }
+  83.33% {
+    -moz-box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
+    box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
+  }
+  91.67% {
+    -moz-box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  100% {
+    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+}
+@-webkit-keyframes hexdots-loader {
+  0% {
+    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  8.33% {
+    -webkit-box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  16.67% {
+    -webkit-box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  25% {
+    -webkit-box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  33.33% {
+    -webkit-box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  41.67% {
+    -webkit-box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  50% {
+    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
+  }
+  58.33% {
+    -webkit-box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
+    box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
+  }
+  66.67% {
+    -webkit-box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
+    box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
+  }
+  75% {
+    -webkit-box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+    box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+  }
+  83.33% {
+    -webkit-box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
+    box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
+  }
+  91.67% {
+    -webkit-box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  100% {
+    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+}
+@keyframes hexdots-loader {
+  0% {
+    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  8.33% {
+    -moz-box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    -webkit-box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  16.67% {
+    -moz-box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    -webkit-box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  25% {
+    -moz-box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    -webkit-box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  33.33% {
+    -moz-box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    -webkit-box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  41.67% {
+    -moz-box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
+    -webkit-box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  50% {
+    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
+    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
+  }
+  58.33% {
+    -moz-box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
+    -webkit-box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
+    box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
+  }
+  66.67% {
+    -moz-box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
+    -webkit-box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
+    box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
+  }
+  75% {
+    -moz-box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+    -webkit-box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+    box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+  }
+  83.33% {
+    -moz-box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
+    -webkit-box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
+    box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
+  }
+  91.67% {
+    -moz-box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    -webkit-box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  100% {
+    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.hexdots-loader:not(:required) {
+  overflow: hidden;
+  position: relative;
+  text-indent: -9999px;
+  display: inline-block;
+  width: 7px;
+  height: 7px;
+  background: transparent;
+  border-radius: 100%;
+  -moz-box-shadow: #666666 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+  -webkit-box-shadow: #666666 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+  box-shadow: #666666 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+  -moz-animation: hexdots-loader 5s infinite ease-in-out;
+  -webkit-animation: hexdots-loader 5s infinite ease-in-out;
+  animation: hexdots-loader 5s infinite ease-in-out;
+  -moz-transform-origin: 50% 50%;
+  -ms-transform-origin: 50% 50%;
+  -webkit-transform-origin: 50% 50%;
+  transform-origin: 50% 50%;
+}
diff --git a/public/bower_components/css-spinners/hole-pulse.css b/public/bower_components/css-spinners/hole-pulse.css
new file mode 100644
index 0000000..9657b3a
--- /dev/null
+++ b/public/bower_components/css-spinners/hole-pulse.css
@@ -0,0 +1,60 @@
+.hole-pulse-loader:not(:required) {
+  display: inline-block;
+  width: 50px;
+  height: 50px;
+  -moz-animation: pulse-loader 0.7s infinite alternate;
+  -webkit-animation: pulse-loader 0.7s infinite alternate;
+  animation: pulse-loader 0.7s infinite alternate;
+  border: 2px solid #e67e22;
+  -moz-border-radius: 50%;
+  -webkit-border-radius: 50%;
+  border-radius: 50%;
+  overflow: hidden;
+  text-indent: 50px;
+}
+
+@-moz-keyframes pulse-loader {
+  0% {
+    -moz-box-shadow: #e67e22 0 0 0px 20px;
+    box-shadow: #e67e22 0 0 0px 20px;
+  }
+  40% {
+    -moz-box-shadow: none;
+    box-shadow: none;
+  }
+  100% {
+    -moz-box-shadow: #e67e22 0 0 0px 25px inset;
+    box-shadow: #e67e22 0 0 0px 25px inset;
+  }
+}
+@-webkit-keyframes pulse-loader {
+  0% {
+    -webkit-box-shadow: #e67e22 0 0 0px 20px;
+    box-shadow: #e67e22 0 0 0px 20px;
+  }
+  40% {
+    -webkit-box-shadow: none;
+    box-shadow: none;
+  }
+  100% {
+    -webkit-box-shadow: #e67e22 0 0 0px 25px inset;
+    box-shadow: #e67e22 0 0 0px 25px inset;
+  }
+}
+@keyframes pulse-loader {
+  0% {
+    -moz-box-shadow: #e67e22 0 0 0px 20px;
+    -webkit-box-shadow: #e67e22 0 0 0px 20px;
+    box-shadow: #e67e22 0 0 0px 20px;
+  }
+  40% {
+    -moz-box-shadow: none;
+    -webkit-box-shadow: none;
+    box-shadow: none;
+  }
+  100% {
+    -moz-box-shadow: #e67e22 0 0 0px 25px inset;
+    -webkit-box-shadow: #e67e22 0 0 0px 25px inset;
+    box-shadow: #e67e22 0 0 0px 25px inset;
+  }
+}
diff --git a/public/bower_components/css-spinners/inner-circles.css b/public/bower_components/css-spinners/inner-circles.css
new file mode 100644
index 0000000..5d01c4f
--- /dev/null
+++ b/public/bower_components/css-spinners/inner-circles.css
@@ -0,0 +1,97 @@
+/* :not(:required) hides this rule from IE9 and below */
+.inner-circles-loader:not(:required) {
+  -moz-transform: translate3d(0, 0, 0);
+  -ms-transform: translate3d(0, 0, 0);
+  -webkit-transform: translate3d(0, 0, 0);
+  transform: translate3d(0, 0, 0);
+  position: relative;
+  display: inline-block;
+  width: 50px;
+  height: 50px;
+  background: rgba(25, 165, 152, 0.5);
+  border-radius: 50%;
+  overflow: hidden;
+  text-indent: -9999px;
+  /* Hides inner circles outside base circle at safari */
+  -webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC);
+}
+.inner-circles-loader:not(:required):before, .inner-circles-loader:not(:required):after {
+  content: '';
+  position: absolute;
+  top: 0;
+  display: inline-block;
+  width: 50px;
+  height: 50px;
+  border-radius: 50%;
+}
+.inner-circles-loader:not(:required):before {
+  -moz-animation: inner-circles-loader 3s infinite;
+  -webkit-animation: inner-circles-loader 3s infinite;
+  animation: inner-circles-loader 3s infinite;
+  -moz-transform-origin: 0 50%;
+  -ms-transform-origin: 0 50%;
+  -webkit-transform-origin: 0 50%;
+  transform-origin: 0 50%;
+  left: 0;
+  background: #c7efcf;
+}
+.inner-circles-loader:not(:required):after {
+  -moz-animation: inner-circles-loader 3s 0.2s reverse infinite;
+  -webkit-animation: inner-circles-loader 3s 0.2s reverse infinite;
+  animation: inner-circles-loader 3s 0.2s reverse infinite;
+  -moz-transform-origin: 100% 50%;
+  -ms-transform-origin: 100% 50%;
+  -webkit-transform-origin: 100% 50%;
+  transform-origin: 100% 50%;
+  right: 0;
+  background: #eef5db;
+}
+
+@-moz-keyframes inner-circles-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  50% {
+    -moz-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+  100% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+}
+@-webkit-keyframes inner-circles-loader {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  50% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+  100% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+}
+@keyframes inner-circles-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  50% {
+    -moz-transform: rotate(360deg);
+    -ms-transform: rotate(360deg);
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+  100% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+}
diff --git a/public/bower_components/css-spinners/plus-loader.css b/public/bower_components/css-spinners/plus-loader.css
new file mode 100644
index 0000000..262a6ca
--- /dev/null
+++ b/public/bower_components/css-spinners/plus-loader.css
@@ -0,0 +1,69 @@
+/*
+Syntax error: Undefined mixin 'keyframes'.
+        on line 11 of /Users/jlong/Workspaces/spinners/sass/spinner/plus-loader.scss, in `keyframes'
+        from line 11 of /Users/jlong/Workspaces/spinners/sass/spinner/plus-loader.scss
+
+Backtrace:
+/Users/jlong/Workspaces/spinners/sass/spinner/plus-loader.scss:11:in `keyframes'
+/Users/jlong/Workspaces/spinners/sass/spinner/plus-loader.scss:11
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/sass-3.2.8/lib/sass/tree/visitors/perform.rb:253:in `visit_mixin'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/sass-3.2.8/lib/sass/tree/visitors/base.rb:37:in `visit'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/sass-3.2.8/lib/sass/tree/visitors/perform.rb:100:in `visit'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/sass-3.2.8/lib/sass/tree/visitors/base.rb:53:in `block in visit_children'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/sass-3.2.8/lib/sass/tree/visitors/base.rb:53:in `map'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/sass-3.2.8/lib/sass/tree/visitors/base.rb:53:in `visit_children'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/sass-3.2.8/lib/sass/tree/visitors/perform.rb:109:in `block in visit_children'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/sass-3.2.8/lib/sass/tree/visitors/perform.rb:121:in `with_environment'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/sass-3.2.8/lib/sass/tree/visitors/perform.rb:108:in `visit_children'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/sass-3.2.8/lib/sass/tree/visitors/base.rb:37:in `block in visit'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/sass-3.2.8/lib/sass/tree/visitors/perform.rb:128:in `visit_root'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/sass-3.2.8/lib/sass/tree/visitors/base.rb:37:in `visit'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/sass-3.2.8/lib/sass/tree/visitors/perform.rb:100:in `visit'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/sass-3.2.8/lib/sass/tree/visitors/perform.rb:7:in `visit'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/sass-3.2.8/lib/sass/tree/root_node.rb:20:in `render'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/sass-3.2.8/lib/sass/engine.rb:315:in `_render'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/sass-3.2.8/lib/sass/engine.rb:262:in `render'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/lib/compass/compiler.rb:140:in `block (2 levels) in compile'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/lib/compass/compiler.rb:126:in `timed'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/lib/compass/compiler.rb:139:in `block in compile'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/lib/compass/logger.rb:45:in `red'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/lib/compass/compiler.rb:138:in `compile'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/lib/compass/compiler.rb:118:in `compile_if_required'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/lib/compass/compiler.rb:103:in `block (2 levels) in run'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/lib/compass/compiler.rb:101:in `each'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/lib/compass/compiler.rb:101:in `block in run'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/lib/compass/compiler.rb:126:in `timed'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/lib/compass/compiler.rb:100:in `run'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/lib/compass/commands/watch_project.rb:147:in `recompile'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/fssm-0.2.10/lib/fssm/path.rb:73:in `call'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/fssm-0.2.10/lib/fssm/path.rb:73:in `run_callback'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/fssm-0.2.10/lib/fssm/path.rb:55:in `callback_action'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/fssm-0.2.10/lib/fssm/path.rb:35:in `update'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/fssm-0.2.10/lib/fssm/state/directory.rb:39:in `block in modified'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/fssm-0.2.10/lib/fssm/state/directory.rb:37:in `each'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/fssm-0.2.10/lib/fssm/state/directory.rb:37:in `modified'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/fssm-0.2.10/lib/fssm/state/directory.rb:18:in `refresh'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/fssm-0.2.10/lib/fssm/backends/polling.rb:17:in `block (2 levels) in run'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/fssm-0.2.10/lib/fssm/backends/polling.rb:17:in `each'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/fssm-0.2.10/lib/fssm/backends/polling.rb:17:in `block in run'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/fssm-0.2.10/lib/fssm/backends/polling.rb:15:in `loop'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/fssm-0.2.10/lib/fssm/backends/polling.rb:15:in `run'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/fssm-0.2.10/lib/fssm/monitor.rb:26:in `run'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/fssm-0.2.10/lib/fssm.rb:70:in `monitor'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/lib/compass/commands/watch_project.rb:87:in `perform'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/lib/compass/commands/base.rb:18:in `execute'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/lib/compass/commands/project_base.rb:19:in `execute'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/lib/compass/exec/sub_command_ui.rb:43:in `perform!'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/lib/compass/exec/sub_command_ui.rb:15:in `run!'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/bin/compass:30:in `block in <top (required)>'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/bin/compass:44:in `call'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/gems/compass-0.12.2/bin/compass:44:in `<top (required)>'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/bin/compass:23:in `load'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/bin/compass:23:in `<main>'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/bin/ruby_noexec_wrapper:14:in `eval'
+/Users/jlong/.rvm/gems/ruby-2.0.0-p0/bin/ruby_noexec_wrapper:14:in `<main>'
+*/
+body:before {
+  white-space: pre;
+  font-family: monospace;
+  content: "Syntax error: Undefined mixin 'keyframes'.\A         on line 11 of /Users/jlong/Workspaces/spinners/sass/spinner/plus-loader.scss, in `keyframes'\A         from line 11 of /Users/jlong/Workspaces/spinners/sass/spinner/plus-loader.scss"; }
diff --git a/public/bower_components/css-spinners/plus.css b/public/bower_components/css-spinners/plus.css
new file mode 100644
index 0000000..31d36a6
--- /dev/null
+++ b/public/bower_components/css-spinners/plus.css
@@ -0,0 +1,671 @@
+@-moz-keyframes plus-loader-top {
+  2.5% {
+    background: #f86;
+    -moz-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  13.75% {
+    background: #ff430d;
+    -moz-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  13.76% {
+    background: #ffae0d;
+    -moz-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  25% {
+    background: #fc6;
+    -moz-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+  }
+  27.5% {
+    background: #fc6;
+    -moz-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  41.25% {
+    background: #ffae0d;
+    -moz-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  41.26% {
+    background: #2cc642;
+    -moz-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  50% {
+    background: #6d7;
+    -moz-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+  }
+  52.5% {
+    background: #6d7;
+    -moz-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  63.75% {
+    background: #2cc642;
+    -moz-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  63.76% {
+    background: #1386d2;
+    -moz-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  75% {
+    background: #4ae;
+    -moz-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+  }
+  77.5% {
+    background: #4ae;
+    -moz-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  91.25% {
+    background: #1386d2;
+    -moz-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  91.26% {
+    background: #ff430d;
+    -moz-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  100% {
+    background: #f86;
+    -moz-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+@-webkit-keyframes plus-loader-top {
+  2.5% {
+    background: #f86;
+    -webkit-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  13.75% {
+    background: #ff430d;
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  13.76% {
+    background: #ffae0d;
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  25% {
+    background: #fc6;
+    -webkit-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+  }
+  27.5% {
+    background: #fc6;
+    -webkit-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  41.25% {
+    background: #ffae0d;
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  41.26% {
+    background: #2cc642;
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  50% {
+    background: #6d7;
+    -webkit-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+  }
+  52.5% {
+    background: #6d7;
+    -webkit-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  63.75% {
+    background: #2cc642;
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  63.76% {
+    background: #1386d2;
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  75% {
+    background: #4ae;
+    -webkit-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+  }
+  77.5% {
+    background: #4ae;
+    -webkit-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  91.25% {
+    background: #1386d2;
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  91.26% {
+    background: #ff430d;
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  100% {
+    background: #f86;
+    -webkit-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+@keyframes plus-loader-top {
+  2.5% {
+    background: #f86;
+    -moz-transform: rotateY(0deg);
+    -ms-transform: rotateY(0deg);
+    -webkit-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  13.75% {
+    background: #ff430d;
+    -moz-transform: rotateY(90deg);
+    -ms-transform: rotateY(90deg);
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  13.76% {
+    background: #ffae0d;
+    -moz-transform: rotateY(90deg);
+    -ms-transform: rotateY(90deg);
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: ease-out;
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  25% {
+    background: #fc6;
+    -moz-transform: rotateY(180deg);
+    -ms-transform: rotateY(180deg);
+    -webkit-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+  }
+  27.5% {
+    background: #fc6;
+    -moz-transform: rotateY(180deg);
+    -ms-transform: rotateY(180deg);
+    -webkit-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  41.25% {
+    background: #ffae0d;
+    -moz-transform: rotateY(90deg);
+    -ms-transform: rotateY(90deg);
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  41.26% {
+    background: #2cc642;
+    -moz-transform: rotateY(90deg);
+    -ms-transform: rotateY(90deg);
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: ease-out;
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  50% {
+    background: #6d7;
+    -moz-transform: rotateY(0deg);
+    -ms-transform: rotateY(0deg);
+    -webkit-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+  }
+  52.5% {
+    background: #6d7;
+    -moz-transform: rotateY(0deg);
+    -ms-transform: rotateY(0deg);
+    -webkit-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  63.75% {
+    background: #2cc642;
+    -moz-transform: rotateY(90deg);
+    -ms-transform: rotateY(90deg);
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  63.76% {
+    background: #1386d2;
+    -moz-transform: rotateY(90deg);
+    -ms-transform: rotateY(90deg);
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: ease-out;
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  75% {
+    background: #4ae;
+    -moz-transform: rotateY(180deg);
+    -ms-transform: rotateY(180deg);
+    -webkit-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+  }
+  77.5% {
+    background: #4ae;
+    -moz-transform: rotateY(180deg);
+    -ms-transform: rotateY(180deg);
+    -webkit-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  91.25% {
+    background: #1386d2;
+    -moz-transform: rotateY(90deg);
+    -ms-transform: rotateY(90deg);
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  91.26% {
+    background: #ff430d;
+    -moz-transform: rotateY(90deg);
+    -ms-transform: rotateY(90deg);
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  100% {
+    background: #f86;
+    -moz-transform: rotateY(0deg);
+    -ms-transform: rotateY(0deg);
+    -webkit-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+@-moz-keyframes plus-loader-bottom {
+  0% {
+    background: #fc6;
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  50% {
+    background: #fc6;
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  75% {
+    background: #4ae;
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  100% {
+    background: #4ae;
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+@-webkit-keyframes plus-loader-bottom {
+  0% {
+    background: #fc6;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  50% {
+    background: #fc6;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  75% {
+    background: #4ae;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  100% {
+    background: #4ae;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+@keyframes plus-loader-bottom {
+  0% {
+    background: #fc6;
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  50% {
+    background: #fc6;
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  75% {
+    background: #4ae;
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  100% {
+    background: #4ae;
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+@-moz-keyframes plus-loader-background {
+  0% {
+    background: #f86;
+    -moz-transform: rotateZ(180deg);
+    transform: rotateZ(180deg);
+  }
+  25% {
+    background: #f86;
+    -moz-transform: rotateZ(180deg);
+    transform: rotateZ(180deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  27.5% {
+    background: #6d7;
+    -moz-transform: rotateZ(90deg);
+    transform: rotateZ(90deg);
+  }
+  50% {
+    background: #6d7;
+    -moz-transform: rotateZ(90deg);
+    transform: rotateZ(90deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  52.5% {
+    background: #6d7;
+    -moz-transform: rotateZ(0deg);
+    transform: rotateZ(0deg);
+  }
+  75% {
+    background: #6d7;
+    -moz-transform: rotateZ(0deg);
+    transform: rotateZ(0deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  77.5% {
+    background: #f86;
+    -moz-transform: rotateZ(270deg);
+    transform: rotateZ(270deg);
+  }
+  100% {
+    background: #f86;
+    -moz-transform: rotateZ(270deg);
+    transform: rotateZ(270deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+@-webkit-keyframes plus-loader-background {
+  0% {
+    background: #f86;
+    -webkit-transform: rotateZ(180deg);
+    transform: rotateZ(180deg);
+  }
+  25% {
+    background: #f86;
+    -webkit-transform: rotateZ(180deg);
+    transform: rotateZ(180deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  27.5% {
+    background: #6d7;
+    -webkit-transform: rotateZ(90deg);
+    transform: rotateZ(90deg);
+  }
+  50% {
+    background: #6d7;
+    -webkit-transform: rotateZ(90deg);
+    transform: rotateZ(90deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  52.5% {
+    background: #6d7;
+    -webkit-transform: rotateZ(0deg);
+    transform: rotateZ(0deg);
+  }
+  75% {
+    background: #6d7;
+    -webkit-transform: rotateZ(0deg);
+    transform: rotateZ(0deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  77.5% {
+    background: #f86;
+    -webkit-transform: rotateZ(270deg);
+    transform: rotateZ(270deg);
+  }
+  100% {
+    background: #f86;
+    -webkit-transform: rotateZ(270deg);
+    transform: rotateZ(270deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+@keyframes plus-loader-background {
+  0% {
+    background: #f86;
+    -moz-transform: rotateZ(180deg);
+    -ms-transform: rotateZ(180deg);
+    -webkit-transform: rotateZ(180deg);
+    transform: rotateZ(180deg);
+  }
+  25% {
+    background: #f86;
+    -moz-transform: rotateZ(180deg);
+    -ms-transform: rotateZ(180deg);
+    -webkit-transform: rotateZ(180deg);
+    transform: rotateZ(180deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  27.5% {
+    background: #6d7;
+    -moz-transform: rotateZ(90deg);
+    -ms-transform: rotateZ(90deg);
+    -webkit-transform: rotateZ(90deg);
+    transform: rotateZ(90deg);
+  }
+  50% {
+    background: #6d7;
+    -moz-transform: rotateZ(90deg);
+    -ms-transform: rotateZ(90deg);
+    -webkit-transform: rotateZ(90deg);
+    transform: rotateZ(90deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  52.5% {
+    background: #6d7;
+    -moz-transform: rotateZ(0deg);
+    -ms-transform: rotateZ(0deg);
+    -webkit-transform: rotateZ(0deg);
+    transform: rotateZ(0deg);
+  }
+  75% {
+    background: #6d7;
+    -moz-transform: rotateZ(0deg);
+    -ms-transform: rotateZ(0deg);
+    -webkit-transform: rotateZ(0deg);
+    transform: rotateZ(0deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  77.5% {
+    background: #f86;
+    -moz-transform: rotateZ(270deg);
+    -ms-transform: rotateZ(270deg);
+    -webkit-transform: rotateZ(270deg);
+    transform: rotateZ(270deg);
+  }
+  100% {
+    background: #f86;
+    -moz-transform: rotateZ(270deg);
+    -ms-transform: rotateZ(270deg);
+    -webkit-transform: rotateZ(270deg);
+    transform: rotateZ(270deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.plus-loader:not(:required) {
+  overflow: hidden;
+  position: relative;
+  text-indent: -9999px;
+  display: inline-block;
+  width: 48px;
+  height: 48px;
+  background: #f86;
+  -moz-border-radius: 24px;
+  -webkit-border-radius: 24px;
+  border-radius: 24px;
+  -moz-transform: rotateZ(90deg);
+  -ms-transform: rotateZ(90deg);
+  -webkit-transform: rotateZ(90deg);
+  transform: rotateZ(90deg);
+  -moz-transform-origin: 50% 50%;
+  -ms-transform-origin: 50% 50%;
+  -webkit-transform-origin: 50% 50%;
+  transform-origin: 50% 50%;
+  -moz-animation: plus-loader-background 3s infinite ease-in-out;
+  -webkit-animation: plus-loader-background 3s infinite ease-in-out;
+  animation: plus-loader-background 3s infinite ease-in-out;
+}
+.plus-loader:not(:required)::after {
+  background: #f86;
+  -moz-border-radius: 24px 0 0 24px;
+  -webkit-border-radius: 24px;
+  border-radius: 24px 0 0 24px;
+  content: '';
+  position: absolute;
+  right: 50%;
+  top: 0;
+  width: 50%;
+  height: 100%;
+  -moz-transform-origin: 100% 50%;
+  -ms-transform-origin: 100% 50%;
+  -webkit-transform-origin: 100% 50%;
+  transform-origin: 100% 50%;
+  -moz-animation: plus-loader-top 3s infinite linear;
+  -webkit-animation: plus-loader-top 3s infinite linear;
+  animation: plus-loader-top 3s infinite linear;
+}
+.plus-loader:not(:required)::before {
+  background: #fc6;
+  -moz-border-radius: 24px 0 0 24px;
+  -webkit-border-radius: 24px;
+  border-radius: 24px 0 0 24px;
+  content: '';
+  position: absolute;
+  right: 50%;
+  top: 0;
+  width: 50%;
+  height: 100%;
+  -moz-transform-origin: 100% 50%;
+  -ms-transform-origin: 100% 50%;
+  -webkit-transform-origin: 100% 50%;
+  transform-origin: 100% 50%;
+  -moz-animation: plus-loader-bottom 3s infinite linear;
+  -webkit-animation: plus-loader-bottom 3s infinite linear;
+  animation: plus-loader-bottom 3s infinite linear;
+}
diff --git a/public/bower_components/css-spinners/pong.css b/public/bower_components/css-spinners/pong.css
new file mode 100644
index 0000000..e329ab4
--- /dev/null
+++ b/public/bower_components/css-spinners/pong.css
@@ -0,0 +1,274 @@
+@-moz-keyframes pong-loader {
+  0% {
+    left: 5px;
+    top: 0;
+  }
+  25% {
+    left: 65px;
+    top: 20px;
+  }
+  50% {
+    left: 5px;
+  }
+  62.5% {
+    top: 50px;
+  }
+  75% {
+    left: 65px;
+    top: 70%;
+  }
+  100% {
+    left: 5px;
+    top: 0%;
+  }
+}
+@-webkit-keyframes pong-loader {
+  0% {
+    left: 5px;
+    top: 0;
+  }
+  25% {
+    left: 65px;
+    top: 20px;
+  }
+  50% {
+    left: 5px;
+  }
+  62.5% {
+    top: 50px;
+  }
+  75% {
+    left: 65px;
+    top: 70%;
+  }
+  100% {
+    left: 5px;
+    top: 0%;
+  }
+}
+@keyframes pong-loader {
+  0% {
+    left: 5px;
+    top: 0;
+  }
+  25% {
+    left: 65px;
+    top: 20px;
+  }
+  50% {
+    left: 5px;
+  }
+  62.5% {
+    top: 50px;
+  }
+  75% {
+    left: 65px;
+    top: 70%;
+  }
+  100% {
+    left: 5px;
+    top: 0%;
+  }
+}
+@-moz-keyframes pong-loader-paddle-1 {
+  0% {
+    -moz-box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  25% {
+    -moz-box-shadow: inset #353c39 0 15px 0 0, inset #353c39 0 -25px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 15px 0 0, inset #353c39 0 -25px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  50% {
+    -moz-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  62.5% {
+    -moz-box-shadow: inset #353c39 0 10px 0 0, inset #353c39 0 -30px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 10px 0 0, inset #353c39 0 -30px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  75% {
+    -moz-box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  100% {
+    -moz-box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+}
+@-webkit-keyframes pong-loader-paddle-1 {
+  0% {
+    -webkit-box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  25% {
+    -webkit-box-shadow: inset #353c39 0 15px 0 0, inset #353c39 0 -25px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 15px 0 0, inset #353c39 0 -25px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  50% {
+    -webkit-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  62.5% {
+    -webkit-box-shadow: inset #353c39 0 10px 0 0, inset #353c39 0 -30px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 10px 0 0, inset #353c39 0 -30px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  75% {
+    -webkit-box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  100% {
+    -webkit-box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+}
+@keyframes pong-loader-paddle-1 {
+  0% {
+    -moz-box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  25% {
+    -moz-box-shadow: inset #353c39 0 15px 0 0, inset #353c39 0 -25px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 15px 0 0, inset #353c39 0 -25px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 15px 0 0, inset #353c39 0 -25px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  50% {
+    -moz-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  62.5% {
+    -moz-box-shadow: inset #353c39 0 10px 0 0, inset #353c39 0 -30px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 10px 0 0, inset #353c39 0 -30px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 10px 0 0, inset #353c39 0 -30px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  75% {
+    -moz-box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  100% {
+    -moz-box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+}
+@-moz-keyframes pong-loader-paddle-2 {
+  0% {
+    -moz-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  50% {
+    -moz-box-shadow: inset #353c39 0 30px 0 0, inset #353c39 0 -10px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 30px 0 0, inset #353c39 0 -10px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  62.5% {
+    -moz-box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  75% {
+    -moz-box-shadow: inset #353c39 0 20px 0 0, inset #353c39 0 -20px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 20px 0 0, inset #353c39 0 -20px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  100% {
+    -moz-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+}
+@-webkit-keyframes pong-loader-paddle-2 {
+  0% {
+    -webkit-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  50% {
+    -webkit-box-shadow: inset #353c39 0 30px 0 0, inset #353c39 0 -10px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 30px 0 0, inset #353c39 0 -10px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  62.5% {
+    -webkit-box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  75% {
+    -webkit-box-shadow: inset #353c39 0 20px 0 0, inset #353c39 0 -20px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 20px 0 0, inset #353c39 0 -20px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  100% {
+    -webkit-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+}
+@keyframes pong-loader-paddle-2 {
+  0% {
+    -moz-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  50% {
+    -moz-box-shadow: inset #353c39 0 30px 0 0, inset #353c39 0 -10px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 30px 0 0, inset #353c39 0 -10px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 30px 0 0, inset #353c39 0 -10px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  62.5% {
+    -moz-box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  75% {
+    -moz-box-shadow: inset #353c39 0 20px 0 0, inset #353c39 0 -20px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 20px 0 0, inset #353c39 0 -20px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 20px 0 0, inset #353c39 0 -20px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  100% {
+    -moz-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.pong-loader:not(:required) {
+  width: 80px;
+  height: 60px;
+  background: #353c39;
+  position: relative;
+  display: inline-block;
+  overflow: hidden;
+  text-indent: 100%;
+  -moz-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  -webkit-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  -moz-animation: pong-loader-paddle-1 1500ms infinite linear;
+  -webkit-animation: pong-loader-paddle-1 1500ms infinite linear;
+  animation: pong-loader-paddle-1 1500ms infinite linear;
+}
+.pong-loader:not(:required):before {
+  -moz-animation: pong-loader-paddle-2 1500ms infinite linear;
+  -webkit-animation: pong-loader-paddle-2 1500ms infinite linear;
+  animation: pong-loader-paddle-2 1500ms infinite linear;
+  position: absolute;
+  top: 0;
+  left: 0;
+  display: block;
+  content: "";
+  width: 10px;
+  height: 100%;
+  -moz-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  -webkit-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+}
+.pong-loader:not(:required):after {
+  content: "";
+  display: block;
+  -moz-animation: pong-loader 1500ms infinite linear;
+  -webkit-animation: pong-loader 1500ms infinite linear;
+  animation: pong-loader 1500ms infinite linear;
+  -moz-border-radius: 50%;
+  -webkit-border-radius: 50%;
+  border-radius: 50%;
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 10px;
+  height: 10px;
+  background: #8cdb8b;
+}
diff --git a/public/bower_components/css-spinners/pulse.css b/public/bower_components/css-spinners/pulse.css
new file mode 100644
index 0000000..59f19db
--- /dev/null
+++ b/public/bower_components/css-spinners/pulse.css
@@ -0,0 +1,60 @@
+.pulse-loader:not(:required) {
+  display: inline-block;
+  width: 50px;
+  height: 50px;
+  -moz-animation: pulse-loader 0.7s linear infinite alternate;
+  -webkit-animation: pulse-loader 0.7s linear infinite alternate;
+  animation: pulse-loader 0.7s linear infinite alternate;
+  border: 2px solid #e67e22;
+  -moz-border-radius: 50%;
+  -webkit-border-radius: 50%;
+  border-radius: 50%;
+  overflow: hidden;
+  text-indent: 50px;
+}
+
+@-moz-keyframes pulse-loader {
+  0% {
+    -moz-box-shadow: #e67e22 0 0 0px 20px;
+    box-shadow: #e67e22 0 0 0px 20px;
+  }
+  40% {
+    -moz-box-shadow: none;
+    box-shadow: none;
+  }
+  100% {
+    -moz-box-shadow: #e67e22 0 0 0px 25px inset;
+    box-shadow: #e67e22 0 0 0px 25px inset;
+  }
+}
+@-webkit-keyframes pulse-loader {
+  0% {
+    -webkit-box-shadow: #e67e22 0 0 0px 20px;
+    box-shadow: #e67e22 0 0 0px 20px;
+  }
+  40% {
+    -webkit-box-shadow: none;
+    box-shadow: none;
+  }
+  100% {
+    -webkit-box-shadow: #e67e22 0 0 0px 25px inset;
+    box-shadow: #e67e22 0 0 0px 25px inset;
+  }
+}
+@keyframes pulse-loader {
+  0% {
+    -moz-box-shadow: #e67e22 0 0 0px 20px;
+    -webkit-box-shadow: #e67e22 0 0 0px 20px;
+    box-shadow: #e67e22 0 0 0px 20px;
+  }
+  40% {
+    -moz-box-shadow: none;
+    -webkit-box-shadow: none;
+    box-shadow: none;
+  }
+  100% {
+    -moz-box-shadow: #e67e22 0 0 0px 25px inset;
+    -webkit-box-shadow: #e67e22 0 0 0px 25px inset;
+    box-shadow: #e67e22 0 0 0px 25px inset;
+  }
+}
diff --git a/public/bower_components/css-spinners/refreshing.css b/public/bower_components/css-spinners/refreshing.css
new file mode 100644
index 0000000..8d1d7b2
--- /dev/null
+++ b/public/bower_components/css-spinners/refreshing.css
@@ -0,0 +1,64 @@
+@-moz-keyframes refreshing-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@-webkit-keyframes refreshing-loader {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@keyframes refreshing-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    -ms-transform: rotate(360deg);
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.refreshing-loader:not(:required) {
+  -moz-animation: refreshing-loader 1000ms infinite linear;
+  -webkit-animation: refreshing-loader 1000ms infinite linear;
+  animation: refreshing-loader 1000ms infinite linear;
+  -moz-border-radius: 2.4em;
+  -webkit-border-radius: 2.4em;
+  border-radius: 2.4em;
+  border: 0.4em solid #9ac;
+  border-left-color: transparent;
+  color: transparent;
+  display: inline-block;
+  font-size: 10px;
+  line-height: 1.2;
+  width: 3em;
+  height: 3em;
+  text-indent: 100%;
+}
+.refreshing-loader:not(:required):after {
+  display: block;
+  border: 0.5em solid transparent;
+  border-top-color: #9ac;
+  border-left-color: #9ac;
+  content: '';
+  width: 0;
+  height: 0;
+  overflow: hidden;
+  margin-left: -0.2em;
+  margin-top: 1em;
+}
diff --git a/public/bower_components/css-spinners/spinner.css b/public/bower_components/css-spinners/spinner.css
new file mode 100644
index 0000000..b38912b
--- /dev/null
+++ b/public/bower_components/css-spinners/spinner.css
@@ -0,0 +1,53 @@
+@-moz-keyframes spinner-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@-webkit-keyframes spinner-loader {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@keyframes spinner-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    -ms-transform: rotate(360deg);
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.spinner-loader:not(:required) {
+  -moz-animation: spinner-loader 1500ms infinite linear;
+  -webkit-animation: spinner-loader 1500ms infinite linear;
+  animation: spinner-loader 1500ms infinite linear;
+  -moz-border-radius: 0.5em;
+  -webkit-border-radius: 0.5em;
+  border-radius: 0.5em;
+  -moz-box-shadow: rgba(0, 0, 51, 0.3) 1.5em 0 0 0, rgba(0, 0, 51, 0.3) 1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) 0 1.5em 0 0, rgba(0, 0, 51, 0.3) -1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) -1.5em 0 0 0, rgba(0, 0, 51, 0.3) -1.1em -1.1em 0 0, rgba(0, 0, 51, 0.3) 0 -1.5em 0 0, rgba(0, 0, 51, 0.3) 1.1em -1.1em 0 0;
+  -webkit-box-shadow: rgba(0, 0, 51, 0.3) 1.5em 0 0 0, rgba(0, 0, 51, 0.3) 1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) 0 1.5em 0 0, rgba(0, 0, 51, 0.3) -1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) -1.5em 0 0 0, rgba(0, 0, 51, 0.3) -1.1em -1.1em 0 0, rgba(0, 0, 51, 0.3) 0 -1.5em 0 0, rgba(0, 0, 51, 0.3) 1.1em -1.1em 0 0;
+  box-shadow: rgba(0, 0, 51, 0.3) 1.5em 0 0 0, rgba(0, 0, 51, 0.3) 1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) 0 1.5em 0 0, rgba(0, 0, 51, 0.3) -1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) -1.5em 0 0 0, rgba(0, 0, 51, 0.3) -1.1em -1.1em 0 0, rgba(0, 0, 51, 0.3) 0 -1.5em 0 0, rgba(0, 0, 51, 0.3) 1.1em -1.1em 0 0;
+  display: inline-block;
+  font-size: 10px;
+  width: 1em;
+  height: 1em;
+  margin: 1.5em;
+  overflow: hidden;
+  text-indent: 100%;
+}
diff --git a/public/bower_components/css-spinners/spinners.css b/public/bower_components/css-spinners/spinners.css
new file mode 100644
index 0000000..64307ee
--- /dev/null
+++ b/public/bower_components/css-spinners/spinners.css
@@ -0,0 +1,3382 @@
+@-moz-keyframes spinner-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@-webkit-keyframes spinner-loader {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@keyframes spinner-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    -ms-transform: rotate(360deg);
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.spinner-loader:not(:required) {
+  -moz-animation: spinner-loader 1500ms infinite linear;
+  -webkit-animation: spinner-loader 1500ms infinite linear;
+  animation: spinner-loader 1500ms infinite linear;
+  -moz-border-radius: 0.5em;
+  -webkit-border-radius: 0.5em;
+  border-radius: 0.5em;
+  -moz-box-shadow: rgba(0, 0, 51, 0.3) 1.5em 0 0 0, rgba(0, 0, 51, 0.3) 1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) 0 1.5em 0 0, rgba(0, 0, 51, 0.3) -1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) -1.5em 0 0 0, rgba(0, 0, 51, 0.3) -1.1em -1.1em 0 0, rgba(0, 0, 51, 0.3) 0 -1.5em 0 0, rgba(0, 0, 51, 0.3) 1.1em -1.1em 0 0;
+  -webkit-box-shadow: rgba(0, 0, 51, 0.3) 1.5em 0 0 0, rgba(0, 0, 51, 0.3) 1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) 0 1.5em 0 0, rgba(0, 0, 51, 0.3) -1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) -1.5em 0 0 0, rgba(0, 0, 51, 0.3) -1.1em -1.1em 0 0, rgba(0, 0, 51, 0.3) 0 -1.5em 0 0, rgba(0, 0, 51, 0.3) 1.1em -1.1em 0 0;
+  box-shadow: rgba(0, 0, 51, 0.3) 1.5em 0 0 0, rgba(0, 0, 51, 0.3) 1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) 0 1.5em 0 0, rgba(0, 0, 51, 0.3) -1.1em 1.1em 0 0, rgba(0, 0, 51, 0.3) -1.5em 0 0 0, rgba(0, 0, 51, 0.3) -1.1em -1.1em 0 0, rgba(0, 0, 51, 0.3) 0 -1.5em 0 0, rgba(0, 0, 51, 0.3) 1.1em -1.1em 0 0;
+  display: inline-block;
+  font-size: 10px;
+  width: 1em;
+  height: 1em;
+  margin: 1.5em;
+  overflow: hidden;
+  text-indent: 100%;
+}
+
+@-moz-keyframes refreshing-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@-webkit-keyframes refreshing-loader {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@keyframes refreshing-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    -ms-transform: rotate(360deg);
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.refreshing-loader:not(:required) {
+  -moz-animation: refreshing-loader 1000ms infinite linear;
+  -webkit-animation: refreshing-loader 1000ms infinite linear;
+  animation: refreshing-loader 1000ms infinite linear;
+  -moz-border-radius: 2.4em;
+  -webkit-border-radius: 2.4em;
+  border-radius: 2.4em;
+  border: 0.4em solid #9ac;
+  border-left-color: transparent;
+  color: transparent;
+  display: inline-block;
+  font-size: 10px;
+  line-height: 1.2;
+  width: 3em;
+  height: 3em;
+  text-indent: 100%;
+}
+.refreshing-loader:not(:required):after {
+  display: block;
+  border: 0.5em solid transparent;
+  border-top-color: #9ac;
+  border-left-color: #9ac;
+  content: '';
+  width: 0;
+  height: 0;
+  overflow: hidden;
+  margin-left: -0.2em;
+  margin-top: 1em;
+}
+
+@-moz-keyframes throbber-loader {
+  0% {
+    background: #dde2e7;
+  }
+  10% {
+    background: #6b9dc8;
+  }
+  40% {
+    background: #dde2e7;
+  }
+}
+@-webkit-keyframes throbber-loader {
+  0% {
+    background: #dde2e7;
+  }
+  10% {
+    background: #6b9dc8;
+  }
+  40% {
+    background: #dde2e7;
+  }
+}
+@keyframes throbber-loader {
+  0% {
+    background: #dde2e7;
+  }
+  10% {
+    background: #6b9dc8;
+  }
+  40% {
+    background: #dde2e7;
+  }
+}
+/* :not(:required) hides these rules from IE9 and below */
+.throbber-loader:not(:required) {
+  -moz-animation: throbber-loader 2000ms 300ms infinite ease-out;
+  -webkit-animation: throbber-loader 2000ms 300ms infinite ease-out;
+  animation: throbber-loader 2000ms 300ms infinite ease-out;
+  background: #dde2e7;
+  display: inline-block;
+  position: relative;
+  text-indent: -9999px;
+  width: 0.9em;
+  height: 1.5em;
+  margin: 0 1.6em;
+}
+.throbber-loader:not(:required):before, .throbber-loader:not(:required):after {
+  background: #dde2e7;
+  content: '\x200B';
+  display: inline-block;
+  width: 0.9em;
+  height: 1.5em;
+  position: absolute;
+  top: 0;
+}
+.throbber-loader:not(:required):before {
+  -moz-animation: throbber-loader 2000ms 150ms infinite ease-out;
+  -webkit-animation: throbber-loader 2000ms 150ms infinite ease-out;
+  animation: throbber-loader 2000ms 150ms infinite ease-out;
+  left: -1.6em;
+}
+.throbber-loader:not(:required):after {
+  -moz-animation: throbber-loader 2000ms 450ms infinite ease-out;
+  -webkit-animation: throbber-loader 2000ms 450ms infinite ease-out;
+  animation: throbber-loader 2000ms 450ms infinite ease-out;
+  right: -1.6em;
+}
+
+@-moz-keyframes heartbeat-loader {
+  0% {
+    -moz-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+  14% {
+    -moz-transform: rotate(45deg) scale(1.3);
+    transform: rotate(45deg) scale(1.3);
+  }
+  28% {
+    -moz-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+  42% {
+    -moz-transform: rotate(45deg) scale(1.3);
+    transform: rotate(45deg) scale(1.3);
+  }
+  70% {
+    -moz-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+}
+@-webkit-keyframes heartbeat-loader {
+  0% {
+    -webkit-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+  14% {
+    -webkit-transform: rotate(45deg) scale(1.3);
+    transform: rotate(45deg) scale(1.3);
+  }
+  28% {
+    -webkit-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+  42% {
+    -webkit-transform: rotate(45deg) scale(1.3);
+    transform: rotate(45deg) scale(1.3);
+  }
+  70% {
+    -webkit-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+}
+@keyframes heartbeat-loader {
+  0% {
+    -moz-transform: rotate(45deg) scale(1);
+    -ms-transform: rotate(45deg) scale(1);
+    -webkit-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+  14% {
+    -moz-transform: rotate(45deg) scale(1.3);
+    -ms-transform: rotate(45deg) scale(1.3);
+    -webkit-transform: rotate(45deg) scale(1.3);
+    transform: rotate(45deg) scale(1.3);
+  }
+  28% {
+    -moz-transform: rotate(45deg) scale(1);
+    -ms-transform: rotate(45deg) scale(1);
+    -webkit-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+  42% {
+    -moz-transform: rotate(45deg) scale(1.3);
+    -ms-transform: rotate(45deg) scale(1.3);
+    -webkit-transform: rotate(45deg) scale(1.3);
+    transform: rotate(45deg) scale(1.3);
+  }
+  70% {
+    -moz-transform: rotate(45deg) scale(1);
+    -ms-transform: rotate(45deg) scale(1);
+    -webkit-transform: rotate(45deg) scale(1);
+    transform: rotate(45deg) scale(1);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.heartbeat-loader:not(:required) {
+  -moz-animation: heartbeat-loader 1300ms ease 0s infinite normal;
+  -webkit-animation: heartbeat-loader 1300ms ease 0s infinite normal;
+  animation: heartbeat-loader 1300ms ease 0s infinite normal;
+  display: inline-block;
+  position: relative;
+  overflow: hidden;
+  text-indent: -9999px;
+  width: 36px;
+  height: 36px;
+  -moz-transform: rotate(45deg) scale(1);
+  -ms-transform: rotate(45deg) scale(1);
+  -webkit-transform: rotate(45deg) scale(1);
+  transform: rotate(45deg) scale(1);
+  -moz-transform-origin: 50% 50%;
+  -ms-transform-origin: 50% 50%;
+  -webkit-transform-origin: 50% 50%;
+  transform-origin: 50% 50%;
+}
+.heartbeat-loader:not(:required):after, .heartbeat-loader:not(:required):before {
+  position: absolute;
+  content: "";
+  background: #e87;
+}
+.heartbeat-loader:not(:required):before {
+  -moz-border-radius-topleft: 12px;
+  -webkit-border-top-left-radius: 12px;
+  border-top-left-radius: 12px;
+  -moz-border-radius-bottomleft: 12px;
+  -webkit-border-bottom-left-radius: 12px;
+  border-bottom-left-radius: 12px;
+  top: 12px;
+  left: 0;
+  width: 36px;
+  height: 24px;
+}
+.heartbeat-loader:not(:required):after {
+  -moz-border-radius-topleft: 12px;
+  -webkit-border-top-left-radius: 12px;
+  border-top-left-radius: 12px;
+  -moz-border-radius-topright: 12px;
+  -webkit-border-top-right-radius: 12px;
+  border-top-right-radius: 12px;
+  top: 0;
+  left: 12px;
+  width: 24px;
+  height: 12px;
+}
+
+@-moz-keyframes gauge-loader {
+  0% {
+    -moz-transform: rotate(-50deg);
+    transform: rotate(-50deg);
+  }
+  10% {
+    -moz-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  20% {
+    -moz-transform: rotate(60deg);
+    transform: rotate(60deg);
+  }
+  24% {
+    -moz-transform: rotate(60deg);
+    transform: rotate(60deg);
+  }
+  40% {
+    -moz-transform: rotate(-20deg);
+    transform: rotate(-20deg);
+  }
+  54% {
+    -moz-transform: rotate(70deg);
+    transform: rotate(70deg);
+  }
+  56% {
+    -moz-transform: rotate(78deg);
+    transform: rotate(78deg);
+  }
+  58% {
+    -moz-transform: rotate(73deg);
+    transform: rotate(73deg);
+  }
+  60% {
+    -moz-transform: rotate(75deg);
+    transform: rotate(75deg);
+  }
+  62% {
+    -moz-transform: rotate(70deg);
+    transform: rotate(70deg);
+  }
+  70% {
+    -moz-transform: rotate(-20deg);
+    transform: rotate(-20deg);
+  }
+  80% {
+    -moz-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  83% {
+    -moz-transform: rotate(25deg);
+    transform: rotate(25deg);
+  }
+  86% {
+    -moz-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  89% {
+    -moz-transform: rotate(25deg);
+    transform: rotate(25deg);
+  }
+  100% {
+    -moz-transform: rotate(-50deg);
+    transform: rotate(-50deg);
+  }
+}
+@-webkit-keyframes gauge-loader {
+  0% {
+    -webkit-transform: rotate(-50deg);
+    transform: rotate(-50deg);
+  }
+  10% {
+    -webkit-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  20% {
+    -webkit-transform: rotate(60deg);
+    transform: rotate(60deg);
+  }
+  24% {
+    -webkit-transform: rotate(60deg);
+    transform: rotate(60deg);
+  }
+  40% {
+    -webkit-transform: rotate(-20deg);
+    transform: rotate(-20deg);
+  }
+  54% {
+    -webkit-transform: rotate(70deg);
+    transform: rotate(70deg);
+  }
+  56% {
+    -webkit-transform: rotate(78deg);
+    transform: rotate(78deg);
+  }
+  58% {
+    -webkit-transform: rotate(73deg);
+    transform: rotate(73deg);
+  }
+  60% {
+    -webkit-transform: rotate(75deg);
+    transform: rotate(75deg);
+  }
+  62% {
+    -webkit-transform: rotate(70deg);
+    transform: rotate(70deg);
+  }
+  70% {
+    -webkit-transform: rotate(-20deg);
+    transform: rotate(-20deg);
+  }
+  80% {
+    -webkit-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  83% {
+    -webkit-transform: rotate(25deg);
+    transform: rotate(25deg);
+  }
+  86% {
+    -webkit-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  89% {
+    -webkit-transform: rotate(25deg);
+    transform: rotate(25deg);
+  }
+  100% {
+    -webkit-transform: rotate(-50deg);
+    transform: rotate(-50deg);
+  }
+}
+@keyframes gauge-loader {
+  0% {
+    -moz-transform: rotate(-50deg);
+    -ms-transform: rotate(-50deg);
+    -webkit-transform: rotate(-50deg);
+    transform: rotate(-50deg);
+  }
+  10% {
+    -moz-transform: rotate(20deg);
+    -ms-transform: rotate(20deg);
+    -webkit-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  20% {
+    -moz-transform: rotate(60deg);
+    -ms-transform: rotate(60deg);
+    -webkit-transform: rotate(60deg);
+    transform: rotate(60deg);
+  }
+  24% {
+    -moz-transform: rotate(60deg);
+    -ms-transform: rotate(60deg);
+    -webkit-transform: rotate(60deg);
+    transform: rotate(60deg);
+  }
+  40% {
+    -moz-transform: rotate(-20deg);
+    -ms-transform: rotate(-20deg);
+    -webkit-transform: rotate(-20deg);
+    transform: rotate(-20deg);
+  }
+  54% {
+    -moz-transform: rotate(70deg);
+    -ms-transform: rotate(70deg);
+    -webkit-transform: rotate(70deg);
+    transform: rotate(70deg);
+  }
+  56% {
+    -moz-transform: rotate(78deg);
+    -ms-transform: rotate(78deg);
+    -webkit-transform: rotate(78deg);
+    transform: rotate(78deg);
+  }
+  58% {
+    -moz-transform: rotate(73deg);
+    -ms-transform: rotate(73deg);
+    -webkit-transform: rotate(73deg);
+    transform: rotate(73deg);
+  }
+  60% {
+    -moz-transform: rotate(75deg);
+    -ms-transform: rotate(75deg);
+    -webkit-transform: rotate(75deg);
+    transform: rotate(75deg);
+  }
+  62% {
+    -moz-transform: rotate(70deg);
+    -ms-transform: rotate(70deg);
+    -webkit-transform: rotate(70deg);
+    transform: rotate(70deg);
+  }
+  70% {
+    -moz-transform: rotate(-20deg);
+    -ms-transform: rotate(-20deg);
+    -webkit-transform: rotate(-20deg);
+    transform: rotate(-20deg);
+  }
+  80% {
+    -moz-transform: rotate(20deg);
+    -ms-transform: rotate(20deg);
+    -webkit-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  83% {
+    -moz-transform: rotate(25deg);
+    -ms-transform: rotate(25deg);
+    -webkit-transform: rotate(25deg);
+    transform: rotate(25deg);
+  }
+  86% {
+    -moz-transform: rotate(20deg);
+    -ms-transform: rotate(20deg);
+    -webkit-transform: rotate(20deg);
+    transform: rotate(20deg);
+  }
+  89% {
+    -moz-transform: rotate(25deg);
+    -ms-transform: rotate(25deg);
+    -webkit-transform: rotate(25deg);
+    transform: rotate(25deg);
+  }
+  100% {
+    -moz-transform: rotate(-50deg);
+    -ms-transform: rotate(-50deg);
+    -webkit-transform: rotate(-50deg);
+    transform: rotate(-50deg);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.gauge-loader:not(:required) {
+  background: #6ca;
+  -moz-border-radius-topleft: 32px;
+  -webkit-border-top-left-radius: 32px;
+  border-top-left-radius: 32px;
+  -moz-border-radius-topright: 32px;
+  -webkit-border-top-right-radius: 32px;
+  border-top-right-radius: 32px;
+  display: inline-block;
+  width: 64px;
+  height: 32px;
+  overflow: hidden;
+  position: relative;
+  text-indent: -9999px;
+}
+.gauge-loader:not(:required)::before {
+  -moz-animation: gauge-loader 4000ms infinite ease;
+  -webkit-animation: gauge-loader 4000ms infinite ease;
+  animation: gauge-loader 4000ms infinite ease;
+  background: white;
+  -moz-border-radius: 2px;
+  -webkit-border-radius: 2px;
+  border-radius: 2px;
+  content: '';
+  position: absolute;
+  left: 30px;
+  top: 5.33333px;
+  width: 4px;
+  height: 26.66667px;
+  -moz-transform-origin: 50% 100%;
+  -ms-transform-origin: 50% 100%;
+  -webkit-transform-origin: 50% 100%;
+  transform-origin: 50% 100%;
+}
+.gauge-loader:not(:required)::after {
+  content: '';
+  background: white;
+  -moz-border-radius: 8px;
+  -webkit-border-radius: 8px;
+  border-radius: 8px;
+  position: absolute;
+  left: 25.6px;
+  top: 25.6px;
+  width: 12.8px;
+  height: 12.8px;
+}
+
+@-moz-keyframes timer-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@-webkit-keyframes timer-loader {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@keyframes timer-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    -ms-transform: rotate(360deg);
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.timer-loader:not(:required) {
+  border: 6px solid #c8d;
+  -moz-border-radius: 24px;
+  -webkit-border-radius: 24px;
+  border-radius: 24px;
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  display: inline-block;
+  overflow: hidden;
+  position: relative;
+  text-indent: -9999px;
+  width: 48px;
+  height: 48px;
+}
+.timer-loader:not(:required)::before {
+  -moz-animation: timer-loader 1250ms infinite linear;
+  -webkit-animation: timer-loader 1250ms infinite linear;
+  animation: timer-loader 1250ms infinite linear;
+  -moz-transform-origin: 3px 3px;
+  -ms-transform-origin: 3px 3px;
+  -webkit-transform-origin: 3px 3px;
+  transform-origin: 3px 3px;
+  background: #c8d;
+  -moz-border-radius: 3px;
+  -webkit-border-radius: 3px;
+  border-radius: 3px;
+  content: '';
+  display: block;
+  position: absolute;
+  width: 6px;
+  height: 19.2px;
+  left: 15px;
+  top: 15px;
+}
+.timer-loader:not(:required)::after {
+  -moz-animation: timer-loader 15000ms infinite linear;
+  -webkit-animation: timer-loader 15000ms infinite linear;
+  animation: timer-loader 15000ms infinite linear;
+  -moz-transform-origin: 3px 3px;
+  -ms-transform-origin: 3px 3px;
+  -webkit-transform-origin: 3px 3px;
+  transform-origin: 3px 3px;
+  background: #c8d;
+  -moz-border-radius: 3px;
+  -webkit-border-radius: 3px;
+  border-radius: 3px;
+  content: '';
+  display: block;
+  position: absolute;
+  width: 6px;
+  height: 16px;
+  left: 15px;
+  top: 15px;
+}
+
+@-moz-keyframes three-quarters-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@-webkit-keyframes three-quarters-loader {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@keyframes three-quarters-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    -ms-transform: rotate(360deg);
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.three-quarters-loader:not(:required) {
+  -moz-animation: three-quarters-loader 1250ms infinite linear;
+  -webkit-animation: three-quarters-loader 1250ms infinite linear;
+  animation: three-quarters-loader 1250ms infinite linear;
+  border: 8px solid #38e;
+  border-right-color: transparent;
+  border-radius: 16px;
+  box-sizing: border-box;
+  display: inline-block;
+  position: relative;
+  overflow: hidden;
+  text-indent: -9999px;
+  width: 32px;
+  height: 32px;
+}
+
+@-moz-keyframes wobblebar-loader {
+  0% {
+    left: 4px;
+  }
+  3% {
+    left: 104px;
+  }
+  6% {
+    left: 4px;
+  }
+  9% {
+    left: 104px;
+  }
+  12% {
+    left: 4px;
+  }
+  15% {
+    left: 104px;
+  }
+  18% {
+    left: 32px;
+  }
+  27% {
+    left: 32px;
+  }
+  30% {
+    left: 104px;
+  }
+  33% {
+    left: 4px;
+  }
+  36% {
+    left: 104px;
+  }
+  39% {
+    left: 4px;
+  }
+  42% {
+    left: 104px;
+  }
+  45% {
+    left: 4px;
+  }
+  48% {
+    left: 104px;
+  }
+  51% {
+    left: 52px;
+  }
+  63% {
+    left: 52px;
+  }
+  66% {
+    left: 4px;
+  }
+  69% {
+    left: 104px;
+  }
+  72% {
+    left: 4px;
+  }
+  75% {
+    left: 104px;
+  }
+  78% {
+    left: 4px;
+  }
+  81% {
+    left: 104px;
+  }
+  84% {
+    left: 72px;
+  }
+  94% {
+    left: 72px;
+  }
+  97% {
+    left: 104px;
+  }
+}
+@-webkit-keyframes wobblebar-loader {
+  0% {
+    left: 4px;
+  }
+  3% {
+    left: 104px;
+  }
+  6% {
+    left: 4px;
+  }
+  9% {
+    left: 104px;
+  }
+  12% {
+    left: 4px;
+  }
+  15% {
+    left: 104px;
+  }
+  18% {
+    left: 32px;
+  }
+  27% {
+    left: 32px;
+  }
+  30% {
+    left: 104px;
+  }
+  33% {
+    left: 4px;
+  }
+  36% {
+    left: 104px;
+  }
+  39% {
+    left: 4px;
+  }
+  42% {
+    left: 104px;
+  }
+  45% {
+    left: 4px;
+  }
+  48% {
+    left: 104px;
+  }
+  51% {
+    left: 52px;
+  }
+  63% {
+    left: 52px;
+  }
+  66% {
+    left: 4px;
+  }
+  69% {
+    left: 104px;
+  }
+  72% {
+    left: 4px;
+  }
+  75% {
+    left: 104px;
+  }
+  78% {
+    left: 4px;
+  }
+  81% {
+    left: 104px;
+  }
+  84% {
+    left: 72px;
+  }
+  94% {
+    left: 72px;
+  }
+  97% {
+    left: 104px;
+  }
+}
+@keyframes wobblebar-loader {
+  0% {
+    left: 4px;
+  }
+  3% {
+    left: 104px;
+  }
+  6% {
+    left: 4px;
+  }
+  9% {
+    left: 104px;
+  }
+  12% {
+    left: 4px;
+  }
+  15% {
+    left: 104px;
+  }
+  18% {
+    left: 32px;
+  }
+  27% {
+    left: 32px;
+  }
+  30% {
+    left: 104px;
+  }
+  33% {
+    left: 4px;
+  }
+  36% {
+    left: 104px;
+  }
+  39% {
+    left: 4px;
+  }
+  42% {
+    left: 104px;
+  }
+  45% {
+    left: 4px;
+  }
+  48% {
+    left: 104px;
+  }
+  51% {
+    left: 52px;
+  }
+  63% {
+    left: 52px;
+  }
+  66% {
+    left: 4px;
+  }
+  69% {
+    left: 104px;
+  }
+  72% {
+    left: 4px;
+  }
+  75% {
+    left: 104px;
+  }
+  78% {
+    left: 4px;
+  }
+  81% {
+    left: 104px;
+  }
+  84% {
+    left: 72px;
+  }
+  94% {
+    left: 72px;
+  }
+  97% {
+    left: 104px;
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.wobblebar-loader:not(:required) {
+  background: #a9d;
+  -moz-border-radius: 10.66667px;
+  -webkit-border-radius: 10.66667px;
+  border-radius: 10.66667px;
+  display: inline-block;
+  overflow: hidden;
+  text-indent: -9999px;
+  width: 128px;
+  height: 21.33333px;
+  position: relative;
+}
+.wobblebar-loader:not(:required)::after {
+  -moz-animation: wobblebar-loader 15000ms infinite ease;
+  -webkit-animation: wobblebar-loader 15000ms infinite ease;
+  animation: wobblebar-loader 15000ms infinite ease;
+  background: white;
+  display: block;
+  -moz-border-radius: 7.11111px;
+  -webkit-border-radius: 7.11111px;
+  border-radius: 7.11111px;
+  content: '';
+  position: absolute;
+  top: 3.55556px;
+  left: 4px;
+  width: 21.33333px;
+  height: 14.22222px;
+}
+
+@-moz-keyframes atebits-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  3% {
+    -moz-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  10% {
+    -moz-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  13% {
+    -moz-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  20% {
+    -moz-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  23% {
+    -moz-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  30% {
+    -moz-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  33% {
+    -moz-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  40% {
+    -moz-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  43% {
+    -moz-transform: rotate(270deg);
+    transform: rotate(270deg);
+  }
+  50% {
+    -moz-transform: rotate(270deg);
+    transform: rotate(270deg);
+  }
+  53% {
+    -moz-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  60% {
+    -moz-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  63% {
+    -moz-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  70% {
+    -moz-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  73% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  80% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  83% {
+    -moz-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+  }
+  90% {
+    -moz-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+  }
+  93% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+}
+@-webkit-keyframes atebits-loader {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  3% {
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  10% {
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  13% {
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  20% {
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  23% {
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  30% {
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  33% {
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  40% {
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  43% {
+    -webkit-transform: rotate(270deg);
+    transform: rotate(270deg);
+  }
+  50% {
+    -webkit-transform: rotate(270deg);
+    transform: rotate(270deg);
+  }
+  53% {
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  60% {
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  63% {
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  70% {
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  73% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  80% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  83% {
+    -webkit-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+  }
+  90% {
+    -webkit-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+  }
+  93% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+}
+@keyframes atebits-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  3% {
+    -moz-transform: rotate(90deg);
+    -ms-transform: rotate(90deg);
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  10% {
+    -moz-transform: rotate(90deg);
+    -ms-transform: rotate(90deg);
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  13% {
+    -moz-transform: rotate(180deg);
+    -ms-transform: rotate(180deg);
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  20% {
+    -moz-transform: rotate(180deg);
+    -ms-transform: rotate(180deg);
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  23% {
+    -moz-transform: rotate(90deg);
+    -ms-transform: rotate(90deg);
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  30% {
+    -moz-transform: rotate(90deg);
+    -ms-transform: rotate(90deg);
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  33% {
+    -moz-transform: rotate(180deg);
+    -ms-transform: rotate(180deg);
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  40% {
+    -moz-transform: rotate(180deg);
+    -ms-transform: rotate(180deg);
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  43% {
+    -moz-transform: rotate(270deg);
+    -ms-transform: rotate(270deg);
+    -webkit-transform: rotate(270deg);
+    transform: rotate(270deg);
+  }
+  50% {
+    -moz-transform: rotate(270deg);
+    -ms-transform: rotate(270deg);
+    -webkit-transform: rotate(270deg);
+    transform: rotate(270deg);
+  }
+  53% {
+    -moz-transform: rotate(180deg);
+    -ms-transform: rotate(180deg);
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  60% {
+    -moz-transform: rotate(180deg);
+    -ms-transform: rotate(180deg);
+    -webkit-transform: rotate(180deg);
+    transform: rotate(180deg);
+  }
+  63% {
+    -moz-transform: rotate(90deg);
+    -ms-transform: rotate(90deg);
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  70% {
+    -moz-transform: rotate(90deg);
+    -ms-transform: rotate(90deg);
+    -webkit-transform: rotate(90deg);
+    transform: rotate(90deg);
+  }
+  73% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  80% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  83% {
+    -moz-transform: rotate(-90deg);
+    -ms-transform: rotate(-90deg);
+    -webkit-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+  }
+  90% {
+    -moz-transform: rotate(-90deg);
+    -ms-transform: rotate(-90deg);
+    -webkit-transform: rotate(-90deg);
+    transform: rotate(-90deg);
+  }
+  93% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.atebits-loader:not(:required) {
+  background: rgba(0, 0, 0, 0.5);
+  display: inline-block;
+  width: 9px;
+  height: 9px;
+  overflow: hidden;
+  position: relative;
+  text-indent: -9999px;
+  -moz-box-shadow: rgba(0, 0, 0, 0.5) -12px -12px 0 0, rgba(0, 0, 0, 0.5) 12px -12px 0 0, rgba(0, 0, 0, 0.5) -12px 0 0 0, rgba(0, 0, 0, 0.5) 12px 0 0 0, rgba(0, 0, 0, 0.5) -12px 12px 0 0, rgba(0, 0, 0, 0.5) 0 12px 0 0, rgba(0, 0, 0, 0.5) 12px 12px 0 0;
+  -webkit-box-shadow: rgba(0, 0, 0, 0.5) -12px -12px 0 0, rgba(0, 0, 0, 0.5) 12px -12px 0 0, rgba(0, 0, 0, 0.5) -12px 0 0 0, rgba(0, 0, 0, 0.5) 12px 0 0 0, rgba(0, 0, 0, 0.5) -12px 12px 0 0, rgba(0, 0, 0, 0.5) 0 12px 0 0, rgba(0, 0, 0, 0.5) 12px 12px 0 0;
+  box-shadow: rgba(0, 0, 0, 0.5) -12px -12px 0 0, rgba(0, 0, 0, 0.5) 12px -12px 0 0, rgba(0, 0, 0, 0.5) -12px 0 0 0, rgba(0, 0, 0, 0.5) 12px 0 0 0, rgba(0, 0, 0, 0.5) -12px 12px 0 0, rgba(0, 0, 0, 0.5) 0 12px 0 0, rgba(0, 0, 0, 0.5) 12px 12px 0 0;
+  -moz-animation: atebits-loader 8s infinite ease-in-out;
+  -webkit-animation: atebits-loader 8s infinite ease-in-out;
+  animation: atebits-loader 8s infinite ease-in-out;
+  -moz-transform-origin: 50% 50%;
+  -ms-transform-origin: 50% 50%;
+  -webkit-transform-origin: 50% 50%;
+  transform-origin: 50% 50%;
+}
+
+@-moz-keyframes whirly-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@-webkit-keyframes whirly-loader {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@keyframes whirly-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    -ms-transform: rotate(360deg);
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.whirly-loader:not(:required) {
+  overflow: hidden;
+  position: relative;
+  text-indent: -9999px;
+  display: inline-block;
+  width: 8px;
+  height: 8px;
+  background: transparent;
+  -moz-border-radius: 100%;
+  -webkit-border-radius: 100%;
+  border-radius: 100%;
+  -moz-box-shadow: #e66 0px 26px 0 6px, #e66 0.90971px 26.05079px 0 5.93333px, #e66 1.82297px 26.06967px 0 5.86667px, #e66 2.73865px 26.05647px 0 5.8px, #e66 3.65561px 26.01104px 0 5.73333px, #e66 4.57274px 25.93327px 0 5.66667px, #e66 5.48887px 25.8231px 0 5.6px, #e66 6.40287px 25.68049px 0 5.53333px, #e66 7.31358px 25.50548px 0 5.46667px, #e66 8.21985px 25.2981px 0 5.4px, #e66 9.12054px 25.05847px 0 5.33333px, #e66 10.01448px 24.78672px 0 5.26667px, #e66 10.90054px 24.48302px 0 5.2px, #e66 11.77757px 24.1476px 0 5.13333px, #e66 12.64443px 23.78072px 0 5.06667px, #e66 13.5px 23.38269px 0 5px, #e66 14.34315px 22.95384px 0 4.93333px, #e66 15.17277px 22.49455px 0 4.86667px, #e66 15.98776px 22.00526px 0 4.8px, #e66 16.78704px 21.48643px 0 4.73333px, #e66 17.56953px 20.93855px 0 4.66667px, #e66 18.33418px 20.36217px 0 4.6px, #e66 19.07995px 19.75787px 0 4.53333px, #e66 19.80582px 19.12626px 0 4.46667px, #e66 20.5108px 18.468px 0 4.4px, #e66 21.1939px 17.78379px 0 4.33333px, #e66 21.85416px 17.07434px 0 4.26667px, #e66 22.49067px 16.34043px 0 4.2px, #e66 23.10251px 15.58284px 0 4.13333px, #e66 23.68881px 14.80241px 0 4.06667px, #e66 24.24871px 14.0px 0 4px, #e66 24.7814px 13.1765px 0 3.93333px, #e66 25.28607px 12.33284px 0 3.86667px, #e66 25.76198px 11.46997px 0 3.8px, #e66 26.2084px 10.58888px 0 3.73333px, #e66 26.62462px 9.69057px 0 3.66667px, #e66 27.01001px 8.77608px 0 3.6px, #e66 27.36392px 7.84648px 0 3.53333px, #e66 27.68577px 6.90284px 0 3.46667px, #e66 27.97502px 5.94627px 0 3.4px, #e66 28.23116px 4.97791px 0 3.33333px, #e66 28.4537px 3.99891px 0 3.26667px, #e66 28.64223px 3.01042px 0 3.2px, #e66 28.79635px 2.01364px 0 3.13333px, #e66 28.91571px 1.00976px 0 3.06667px, #e66 29px 0.0px 0 3px, #e66 29.04896px -1.01441px 0 2.93333px, #e66 29.06237px -2.03224px 0 2.86667px, #e66 29.04004px -3.05223px 0 2.8px, #e66 28.98185px -4.07313px 0 2.73333px, #e66 28.88769px -5.09368px 0 2.66667px, #e66 28.75754px -6.1126px 0 2.6px, #e66 28.59138px -7.12863px 0 2.53333px, #e66 28.38926px -8.14049px 0 2.46667px, #e66 28.15127px -9.1469px 0 2.4px, #e66 27.87755px -10.1466px 0 2.33333px, #e66 27.56827px -11.1383px 0 2.26667px, #e66 27.22365px -12.12075px 0 2.2px, #e66 26.84398px -13.09268px 0 2.13333px, #e66 26.42956px -14.05285px 0 2.06667px, #e66 25.98076px -15.0px 0 2px, #e66 25.49798px -15.93291px 0 1.93333px, #e66 24.98167px -16.85035px 0 1.86667px, #e66 24.43231px -17.75111px 0 1.8px, #e66 23.85046px -18.63402px 0 1.73333px, #e66 23.23668px -19.49789px 0 1.66667px, #e66 22.5916px -20.34157px 0 1.6px, #e66 21.91589px -21.16393px 0 1.53333px, #e66 21.21024px -21.96384px 0 1.46667px, #e66 20.4754px -22.74023px 0 1.4px, #e66 19.71215px -23.49203px 0 1.33333px, #e66 18.92133px -24.2182px 0 1.26667px, #e66 18.10379px -24.91772px 0 1.2px, #e66 17.26042px -25.58963px 0 1.13333px, #e66 16.39217px -26.23295px 0 1.06667px, #e66 15.5px -26.84679px 0 1px, #e66 14.58492px -27.43024px 0 0.93333px, #e66 13.64796px -27.98245px 0 0.86667px, #e66 12.69018px -28.50262px 0 0.8px, #e66 11.7127px -28.98995px 0 0.73333px, #e66 10.71663px -29.4437px 0 0.66667px, #e66 9.70313px -29.86317px 0 0.6px, #e66 8.67339px -30.2477px 0 0.53333px, #e66 7.6286px -30.59666px 0 0.46667px, #e66 6.57001px -30.90946px 0 0.4px, #e66 5.49886px -31.18558px 0 0.33333px, #e66 4.41643px -31.42451px 0 0.26667px, #e66 3.32401px -31.6258px 0 0.2px, #e66 2.22291px -31.78904px 0 0.13333px, #e66 1.11446px -31.91388px 0 0.06667px, #e66 0.0px -32px 0 0px, #e66 -1.11911px -32.04713px 0 -0.06667px, #e66 -2.24151px -32.05506px 0 -0.13333px, #e66 -3.36582px -32.02361px 0 -0.2px, #e66 -4.49065px -31.95265px 0 -0.26667px, #e66 -5.61462px -31.84212px 0 -0.33333px, #e66 -6.73634px -31.69198px 0 -0.4px, #e66 -7.8544px -31.50227px 0 -0.46667px, #e66 -8.9674px -31.27305px 0 -0.53333px, #e66 -10.07395px -31.00444px 0 -0.6px, #e66 -11.17266px -30.69663px 0 -0.66667px, #e66 -12.26212px -30.34982px 0 -0.73333px, #e66 -13.34096px -29.96429px 0 -0.8px, #e66 -14.4078px -29.54036px 0 -0.86667px, #e66 -15.46126px -29.07841px 0 -0.93333px, #e66 -16.5px -28.57884px 0 -1px, #e66 -17.52266px -28.04212px 0 -1.06667px, #e66 -18.52792px -27.46878px 0 -1.13333px, #e66 -19.51447px -26.85936px 0 -1.2px, #e66 -20.48101px -26.21449px 0 -1.26667px, #e66 -21.42625px -25.53481px 0 -1.33333px, #e66 -22.34896px -24.82104px 0 -1.4px, #e66 -23.2479px -24.07391px 0 -1.46667px, #e66 -24.12186px -23.29421px 0 -1.53333px, #e66 -24.96967px -22.48279px 0 -1.6px, #e66 -25.79016px -21.64052px 0 -1.66667px, #e66 -26.58223px -20.76831px 0 -1.73333px, #e66 -27.34477px -19.86714px 0 -1.8px, #e66 -28.07674px -18.938px 0 -1.86667px, #e66 -28.7771px -17.98193px 0 -1.93333px, #e66 -29.44486px -17.0px 0 -2px, #e66 -30.07908px -15.99333px 0 -2.06667px, #e66 -30.67884px -14.96307px 0 -2.13333px, #e66 -31.24325px -13.91039px 0 -2.2px, #e66 -31.7715px -12.83652px 0 -2.26667px, #e66 -32.26278px -11.74269px 0 -2.33333px, #e66 -32.71634px -10.63018px 0 -2.4px, #e66 -33.13149px -9.5003px 0 -2.46667px, #e66 -33.50755px -8.35437px 0 -2.53333px, #e66 -33.84391px -7.19374px 0 -2.6px, #e66 -34.14px -6.0198px 0 -2.66667px, #e66 -34.39531px -4.83395px 0 -2.73333px, #e66 -34.60936px -3.63759px 0 -2.8px, #e66 -34.78173px -2.43218px 0 -2.86667px, #e66 -34.91205px -1.21916px 0 -2.93333px, #e66 -35px 0.0px 0 -3px, #e66 -35.04531px 1.22381px 0 -3.06667px, #e66 -35.04775px 2.45078px 0 -3.13333px, #e66 -35.00717px 3.6794px 0 -3.2px, #e66 -34.92345px 4.90817px 0 -3.26667px, #e66 -34.79654px 6.13557px 0 -3.33333px, #e66 -34.62643px 7.36007px 0 -3.4px, #e66 -34.41316px 8.58016px 0 -3.46667px, #e66 -34.15683px 9.79431px 0 -3.53333px, #e66 -33.85761px 11.001px 0 -3.6px, #e66 -33.5157px 12.19872px 0 -3.66667px, #e66 -33.13137px 13.38594px 0 -3.73333px, #e66 -32.70493px 14.56117px 0 -3.8px, #e66 -32.23675px 15.72291px 0 -3.86667px, #e66 -31.72725px 16.86968px 0 -3.93333px, #e66 -31.17691px 18px 0 -4px, #e66 -30.58627px 19.11242px 0 -4.06667px, #e66 -29.95589px 20.2055px 0 -4.13333px, #e66 -29.28642px 21.27783px 0 -4.2px, #e66 -28.57852px 22.32799px 0 -4.26667px, #e66 -27.83295px 23.35462px 0 -4.33333px, #e66 -27.05047px 24.35635px 0 -4.4px, #e66 -26.23192px 25.33188px 0 -4.46667px, #e66 -25.37819px 26.27988px 0 -4.53333px, #e66 -24.49018px 27.1991px 0 -4.6px, #e66 -23.56888px 28.0883px 0 -4.66667px, #e66 -22.6153px 28.94626px 0 -4.73333px, #e66 -21.6305px 29.77183px 0 -4.8px, #e66 -20.61558px 30.56385px 0 -4.86667px, #e66 -19.57168px 31.32124px 0 -4.93333px, #e66 -18.5px 32.04294px 0 -5px, #e66 -17.40175px 32.72792px 0 -5.06667px, #e66 -16.27818px 33.37522px 0 -5.13333px, #e66 -15.1306px 33.98389px 0 -5.2px, #e66 -13.96034px 34.55305px 0 -5.26667px, #e66 -12.76875px 35.08186px 0 -5.33333px, #e66 -11.55724px 35.56951px 0 -5.4px, #e66 -10.32721px 36.01527px 0 -5.46667px, #e66 -9.08014px 36.41843px 0 -5.53333px, #e66 -7.81748px 36.77835px 0 -5.6px, #e66 -6.54075px 37.09443px 0 -5.66667px, #e66 -5.25147px 37.36612px 0 -5.73333px, #e66 -3.95118px 37.59293px 0 -5.8px, #e66 -2.64145px 37.77443px 0 -5.86667px, #e66 -1.32385px 37.91023px 0 -5.93333px;
+  -webkit-box-shadow: #e66 0px 26px 0 6px, #e66 0.90971px 26.05079px 0 5.93333px, #e66 1.82297px 26.06967px 0 5.86667px, #e66 2.73865px 26.05647px 0 5.8px, #e66 3.65561px 26.01104px 0 5.73333px, #e66 4.57274px 25.93327px 0 5.66667px, #e66 5.48887px 25.8231px 0 5.6px, #e66 6.40287px 25.68049px 0 5.53333px, #e66 7.31358px 25.50548px 0 5.46667px, #e66 8.21985px 25.2981px 0 5.4px, #e66 9.12054px 25.05847px 0 5.33333px, #e66 10.01448px 24.78672px 0 5.26667px, #e66 10.90054px 24.48302px 0 5.2px, #e66 11.77757px 24.1476px 0 5.13333px, #e66 12.64443px 23.78072px 0 5.06667px, #e66 13.5px 23.38269px 0 5px, #e66 14.34315px 22.95384px 0 4.93333px, #e66 15.17277px 22.49455px 0 4.86667px, #e66 15.98776px 22.00526px 0 4.8px, #e66 16.78704px 21.48643px 0 4.73333px, #e66 17.56953px 20.93855px 0 4.66667px, #e66 18.33418px 20.36217px 0 4.6px, #e66 19.07995px 19.75787px 0 4.53333px, #e66 19.80582px 19.12626px 0 4.46667px, #e66 20.5108px 18.468px 0 4.4px, #e66 21.1939px 17.78379px 0 4.33333px, #e66 21.85416px 17.07434px 0 4.26667px, #e66 22.49067px 16.34043px 0 4.2px, #e66 23.10251px 15.58284px 0 4.13333px, #e66 23.68881px 14.80241px 0 4.06667px, #e66 24.24871px 14.0px 0 4px, #e66 24.7814px 13.1765px 0 3.93333px, #e66 25.28607px 12.33284px 0 3.86667px, #e66 25.76198px 11.46997px 0 3.8px, #e66 26.2084px 10.58888px 0 3.73333px, #e66 26.62462px 9.69057px 0 3.66667px, #e66 27.01001px 8.77608px 0 3.6px, #e66 27.36392px 7.84648px 0 3.53333px, #e66 27.68577px 6.90284px 0 3.46667px, #e66 27.97502px 5.94627px 0 3.4px, #e66 28.23116px 4.97791px 0 3.33333px, #e66 28.4537px 3.99891px 0 3.26667px, #e66 28.64223px 3.01042px 0 3.2px, #e66 28.79635px 2.01364px 0 3.13333px, #e66 28.91571px 1.00976px 0 3.06667px, #e66 29px 0.0px 0 3px, #e66 29.04896px -1.01441px 0 2.93333px, #e66 29.06237px -2.03224px 0 2.86667px, #e66 29.04004px -3.05223px 0 2.8px, #e66 28.98185px -4.07313px 0 2.73333px, #e66 28.88769px -5.09368px 0 2.66667px, #e66 28.75754px -6.1126px 0 2.6px, #e66 28.59138px -7.12863px 0 2.53333px, #e66 28.38926px -8.14049px 0 2.46667px, #e66 28.15127px -9.1469px 0 2.4px, #e66 27.87755px -10.1466px 0 2.33333px, #e66 27.56827px -11.1383px 0 2.26667px, #e66 27.22365px -12.12075px 0 2.2px, #e66 26.84398px -13.09268px 0 2.13333px, #e66 26.42956px -14.05285px 0 2.06667px, #e66 25.98076px -15.0px 0 2px, #e66 25.49798px -15.93291px 0 1.93333px, #e66 24.98167px -16.85035px 0 1.86667px, #e66 24.43231px -17.75111px 0 1.8px, #e66 23.85046px -18.63402px 0 1.73333px, #e66 23.23668px -19.49789px 0 1.66667px, #e66 22.5916px -20.34157px 0 1.6px, #e66 21.91589px -21.16393px 0 1.53333px, #e66 21.21024px -21.96384px 0 1.46667px, #e66 20.4754px -22.74023px 0 1.4px, #e66 19.71215px -23.49203px 0 1.33333px, #e66 18.92133px -24.2182px 0 1.26667px, #e66 18.10379px -24.91772px 0 1.2px, #e66 17.26042px -25.58963px 0 1.13333px, #e66 16.39217px -26.23295px 0 1.06667px, #e66 15.5px -26.84679px 0 1px, #e66 14.58492px -27.43024px 0 0.93333px, #e66 13.64796px -27.98245px 0 0.86667px, #e66 12.69018px -28.50262px 0 0.8px, #e66 11.7127px -28.98995px 0 0.73333px, #e66 10.71663px -29.4437px 0 0.66667px, #e66 9.70313px -29.86317px 0 0.6px, #e66 8.67339px -30.2477px 0 0.53333px, #e66 7.6286px -30.59666px 0 0.46667px, #e66 6.57001px -30.90946px 0 0.4px, #e66 5.49886px -31.18558px 0 0.33333px, #e66 4.41643px -31.42451px 0 0.26667px, #e66 3.32401px -31.6258px 0 0.2px, #e66 2.22291px -31.78904px 0 0.13333px, #e66 1.11446px -31.91388px 0 0.06667px, #e66 0.0px -32px 0 0px, #e66 -1.11911px -32.04713px 0 -0.06667px, #e66 -2.24151px -32.05506px 0 -0.13333px, #e66 -3.36582px -32.02361px 0 -0.2px, #e66 -4.49065px -31.95265px 0 -0.26667px, #e66 -5.61462px -31.84212px 0 -0.33333px, #e66 -6.73634px -31.69198px 0 -0.4px, #e66 -7.8544px -31.50227px 0 -0.46667px, #e66 -8.9674px -31.27305px 0 -0.53333px, #e66 -10.07395px -31.00444px 0 -0.6px, #e66 -11.17266px -30.69663px 0 -0.66667px, #e66 -12.26212px -30.34982px 0 -0.73333px, #e66 -13.34096px -29.96429px 0 -0.8px, #e66 -14.4078px -29.54036px 0 -0.86667px, #e66 -15.46126px -29.07841px 0 -0.93333px, #e66 -16.5px -28.57884px 0 -1px, #e66 -17.52266px -28.04212px 0 -1.06667px, #e66 -18.52792px -27.46878px 0 -1.13333px, #e66 -19.51447px -26.85936px 0 -1.2px, #e66 -20.48101px -26.21449px 0 -1.26667px, #e66 -21.42625px -25.53481px 0 -1.33333px, #e66 -22.34896px -24.82104px 0 -1.4px, #e66 -23.2479px -24.07391px 0 -1.46667px, #e66 -24.12186px -23.29421px 0 -1.53333px, #e66 -24.96967px -22.48279px 0 -1.6px, #e66 -25.79016px -21.64052px 0 -1.66667px, #e66 -26.58223px -20.76831px 0 -1.73333px, #e66 -27.34477px -19.86714px 0 -1.8px, #e66 -28.07674px -18.938px 0 -1.86667px, #e66 -28.7771px -17.98193px 0 -1.93333px, #e66 -29.44486px -17.0px 0 -2px, #e66 -30.07908px -15.99333px 0 -2.06667px, #e66 -30.67884px -14.96307px 0 -2.13333px, #e66 -31.24325px -13.91039px 0 -2.2px, #e66 -31.7715px -12.83652px 0 -2.26667px, #e66 -32.26278px -11.74269px 0 -2.33333px, #e66 -32.71634px -10.63018px 0 -2.4px, #e66 -33.13149px -9.5003px 0 -2.46667px, #e66 -33.50755px -8.35437px 0 -2.53333px, #e66 -33.84391px -7.19374px 0 -2.6px, #e66 -34.14px -6.0198px 0 -2.66667px, #e66 -34.39531px -4.83395px 0 -2.73333px, #e66 -34.60936px -3.63759px 0 -2.8px, #e66 -34.78173px -2.43218px 0 -2.86667px, #e66 -34.91205px -1.21916px 0 -2.93333px, #e66 -35px 0.0px 0 -3px, #e66 -35.04531px 1.22381px 0 -3.06667px, #e66 -35.04775px 2.45078px 0 -3.13333px, #e66 -35.00717px 3.6794px 0 -3.2px, #e66 -34.92345px 4.90817px 0 -3.26667px, #e66 -34.79654px 6.13557px 0 -3.33333px, #e66 -34.62643px 7.36007px 0 -3.4px, #e66 -34.41316px 8.58016px 0 -3.46667px, #e66 -34.15683px 9.79431px 0 -3.53333px, #e66 -33.85761px 11.001px 0 -3.6px, #e66 -33.5157px 12.19872px 0 -3.66667px, #e66 -33.13137px 13.38594px 0 -3.73333px, #e66 -32.70493px 14.56117px 0 -3.8px, #e66 -32.23675px 15.72291px 0 -3.86667px, #e66 -31.72725px 16.86968px 0 -3.93333px, #e66 -31.17691px 18px 0 -4px, #e66 -30.58627px 19.11242px 0 -4.06667px, #e66 -29.95589px 20.2055px 0 -4.13333px, #e66 -29.28642px 21.27783px 0 -4.2px, #e66 -28.57852px 22.32799px 0 -4.26667px, #e66 -27.83295px 23.35462px 0 -4.33333px, #e66 -27.05047px 24.35635px 0 -4.4px, #e66 -26.23192px 25.33188px 0 -4.46667px, #e66 -25.37819px 26.27988px 0 -4.53333px, #e66 -24.49018px 27.1991px 0 -4.6px, #e66 -23.56888px 28.0883px 0 -4.66667px, #e66 -22.6153px 28.94626px 0 -4.73333px, #e66 -21.6305px 29.77183px 0 -4.8px, #e66 -20.61558px 30.56385px 0 -4.86667px, #e66 -19.57168px 31.32124px 0 -4.93333px, #e66 -18.5px 32.04294px 0 -5px, #e66 -17.40175px 32.72792px 0 -5.06667px, #e66 -16.27818px 33.37522px 0 -5.13333px, #e66 -15.1306px 33.98389px 0 -5.2px, #e66 -13.96034px 34.55305px 0 -5.26667px, #e66 -12.76875px 35.08186px 0 -5.33333px, #e66 -11.55724px 35.56951px 0 -5.4px, #e66 -10.32721px 36.01527px 0 -5.46667px, #e66 -9.08014px 36.41843px 0 -5.53333px, #e66 -7.81748px 36.77835px 0 -5.6px, #e66 -6.54075px 37.09443px 0 -5.66667px, #e66 -5.25147px 37.36612px 0 -5.73333px, #e66 -3.95118px 37.59293px 0 -5.8px, #e66 -2.64145px 37.77443px 0 -5.86667px, #e66 -1.32385px 37.91023px 0 -5.93333px;
+  box-shadow: #e66 0px 26px 0 6px, #e66 0.90971px 26.05079px 0 5.93333px, #e66 1.82297px 26.06967px 0 5.86667px, #e66 2.73865px 26.05647px 0 5.8px, #e66 3.65561px 26.01104px 0 5.73333px, #e66 4.57274px 25.93327px 0 5.66667px, #e66 5.48887px 25.8231px 0 5.6px, #e66 6.40287px 25.68049px 0 5.53333px, #e66 7.31358px 25.50548px 0 5.46667px, #e66 8.21985px 25.2981px 0 5.4px, #e66 9.12054px 25.05847px 0 5.33333px, #e66 10.01448px 24.78672px 0 5.26667px, #e66 10.90054px 24.48302px 0 5.2px, #e66 11.77757px 24.1476px 0 5.13333px, #e66 12.64443px 23.78072px 0 5.06667px, #e66 13.5px 23.38269px 0 5px, #e66 14.34315px 22.95384px 0 4.93333px, #e66 15.17277px 22.49455px 0 4.86667px, #e66 15.98776px 22.00526px 0 4.8px, #e66 16.78704px 21.48643px 0 4.73333px, #e66 17.56953px 20.93855px 0 4.66667px, #e66 18.33418px 20.36217px 0 4.6px, #e66 19.07995px 19.75787px 0 4.53333px, #e66 19.80582px 19.12626px 0 4.46667px, #e66 20.5108px 18.468px 0 4.4px, #e66 21.1939px 17.78379px 0 4.33333px, #e66 21.85416px 17.07434px 0 4.26667px, #e66 22.49067px 16.34043px 0 4.2px, #e66 23.10251px 15.58284px 0 4.13333px, #e66 23.68881px 14.80241px 0 4.06667px, #e66 24.24871px 14.0px 0 4px, #e66 24.7814px 13.1765px 0 3.93333px, #e66 25.28607px 12.33284px 0 3.86667px, #e66 25.76198px 11.46997px 0 3.8px, #e66 26.2084px 10.58888px 0 3.73333px, #e66 26.62462px 9.69057px 0 3.66667px, #e66 27.01001px 8.77608px 0 3.6px, #e66 27.36392px 7.84648px 0 3.53333px, #e66 27.68577px 6.90284px 0 3.46667px, #e66 27.97502px 5.94627px 0 3.4px, #e66 28.23116px 4.97791px 0 3.33333px, #e66 28.4537px 3.99891px 0 3.26667px, #e66 28.64223px 3.01042px 0 3.2px, #e66 28.79635px 2.01364px 0 3.13333px, #e66 28.91571px 1.00976px 0 3.06667px, #e66 29px 0.0px 0 3px, #e66 29.04896px -1.01441px 0 2.93333px, #e66 29.06237px -2.03224px 0 2.86667px, #e66 29.04004px -3.05223px 0 2.8px, #e66 28.98185px -4.07313px 0 2.73333px, #e66 28.88769px -5.09368px 0 2.66667px, #e66 28.75754px -6.1126px 0 2.6px, #e66 28.59138px -7.12863px 0 2.53333px, #e66 28.38926px -8.14049px 0 2.46667px, #e66 28.15127px -9.1469px 0 2.4px, #e66 27.87755px -10.1466px 0 2.33333px, #e66 27.56827px -11.1383px 0 2.26667px, #e66 27.22365px -12.12075px 0 2.2px, #e66 26.84398px -13.09268px 0 2.13333px, #e66 26.42956px -14.05285px 0 2.06667px, #e66 25.98076px -15.0px 0 2px, #e66 25.49798px -15.93291px 0 1.93333px, #e66 24.98167px -16.85035px 0 1.86667px, #e66 24.43231px -17.75111px 0 1.8px, #e66 23.85046px -18.63402px 0 1.73333px, #e66 23.23668px -19.49789px 0 1.66667px, #e66 22.5916px -20.34157px 0 1.6px, #e66 21.91589px -21.16393px 0 1.53333px, #e66 21.21024px -21.96384px 0 1.46667px, #e66 20.4754px -22.74023px 0 1.4px, #e66 19.71215px -23.49203px 0 1.33333px, #e66 18.92133px -24.2182px 0 1.26667px, #e66 18.10379px -24.91772px 0 1.2px, #e66 17.26042px -25.58963px 0 1.13333px, #e66 16.39217px -26.23295px 0 1.06667px, #e66 15.5px -26.84679px 0 1px, #e66 14.58492px -27.43024px 0 0.93333px, #e66 13.64796px -27.98245px 0 0.86667px, #e66 12.69018px -28.50262px 0 0.8px, #e66 11.7127px -28.98995px 0 0.73333px, #e66 10.71663px -29.4437px 0 0.66667px, #e66 9.70313px -29.86317px 0 0.6px, #e66 8.67339px -30.2477px 0 0.53333px, #e66 7.6286px -30.59666px 0 0.46667px, #e66 6.57001px -30.90946px 0 0.4px, #e66 5.49886px -31.18558px 0 0.33333px, #e66 4.41643px -31.42451px 0 0.26667px, #e66 3.32401px -31.6258px 0 0.2px, #e66 2.22291px -31.78904px 0 0.13333px, #e66 1.11446px -31.91388px 0 0.06667px, #e66 0.0px -32px 0 0px, #e66 -1.11911px -32.04713px 0 -0.06667px, #e66 -2.24151px -32.05506px 0 -0.13333px, #e66 -3.36582px -32.02361px 0 -0.2px, #e66 -4.49065px -31.95265px 0 -0.26667px, #e66 -5.61462px -31.84212px 0 -0.33333px, #e66 -6.73634px -31.69198px 0 -0.4px, #e66 -7.8544px -31.50227px 0 -0.46667px, #e66 -8.9674px -31.27305px 0 -0.53333px, #e66 -10.07395px -31.00444px 0 -0.6px, #e66 -11.17266px -30.69663px 0 -0.66667px, #e66 -12.26212px -30.34982px 0 -0.73333px, #e66 -13.34096px -29.96429px 0 -0.8px, #e66 -14.4078px -29.54036px 0 -0.86667px, #e66 -15.46126px -29.07841px 0 -0.93333px, #e66 -16.5px -28.57884px 0 -1px, #e66 -17.52266px -28.04212px 0 -1.06667px, #e66 -18.52792px -27.46878px 0 -1.13333px, #e66 -19.51447px -26.85936px 0 -1.2px, #e66 -20.48101px -26.21449px 0 -1.26667px, #e66 -21.42625px -25.53481px 0 -1.33333px, #e66 -22.34896px -24.82104px 0 -1.4px, #e66 -23.2479px -24.07391px 0 -1.46667px, #e66 -24.12186px -23.29421px 0 -1.53333px, #e66 -24.96967px -22.48279px 0 -1.6px, #e66 -25.79016px -21.64052px 0 -1.66667px, #e66 -26.58223px -20.76831px 0 -1.73333px, #e66 -27.34477px -19.86714px 0 -1.8px, #e66 -28.07674px -18.938px 0 -1.86667px, #e66 -28.7771px -17.98193px 0 -1.93333px, #e66 -29.44486px -17.0px 0 -2px, #e66 -30.07908px -15.99333px 0 -2.06667px, #e66 -30.67884px -14.96307px 0 -2.13333px, #e66 -31.24325px -13.91039px 0 -2.2px, #e66 -31.7715px -12.83652px 0 -2.26667px, #e66 -32.26278px -11.74269px 0 -2.33333px, #e66 -32.71634px -10.63018px 0 -2.4px, #e66 -33.13149px -9.5003px 0 -2.46667px, #e66 -33.50755px -8.35437px 0 -2.53333px, #e66 -33.84391px -7.19374px 0 -2.6px, #e66 -34.14px -6.0198px 0 -2.66667px, #e66 -34.39531px -4.83395px 0 -2.73333px, #e66 -34.60936px -3.63759px 0 -2.8px, #e66 -34.78173px -2.43218px 0 -2.86667px, #e66 -34.91205px -1.21916px 0 -2.93333px, #e66 -35px 0.0px 0 -3px, #e66 -35.04531px 1.22381px 0 -3.06667px, #e66 -35.04775px 2.45078px 0 -3.13333px, #e66 -35.00717px 3.6794px 0 -3.2px, #e66 -34.92345px 4.90817px 0 -3.26667px, #e66 -34.79654px 6.13557px 0 -3.33333px, #e66 -34.62643px 7.36007px 0 -3.4px, #e66 -34.41316px 8.58016px 0 -3.46667px, #e66 -34.15683px 9.79431px 0 -3.53333px, #e66 -33.85761px 11.001px 0 -3.6px, #e66 -33.5157px 12.19872px 0 -3.66667px, #e66 -33.13137px 13.38594px 0 -3.73333px, #e66 -32.70493px 14.56117px 0 -3.8px, #e66 -32.23675px 15.72291px 0 -3.86667px, #e66 -31.72725px 16.86968px 0 -3.93333px, #e66 -31.17691px 18px 0 -4px, #e66 -30.58627px 19.11242px 0 -4.06667px, #e66 -29.95589px 20.2055px 0 -4.13333px, #e66 -29.28642px 21.27783px 0 -4.2px, #e66 -28.57852px 22.32799px 0 -4.26667px, #e66 -27.83295px 23.35462px 0 -4.33333px, #e66 -27.05047px 24.35635px 0 -4.4px, #e66 -26.23192px 25.33188px 0 -4.46667px, #e66 -25.37819px 26.27988px 0 -4.53333px, #e66 -24.49018px 27.1991px 0 -4.6px, #e66 -23.56888px 28.0883px 0 -4.66667px, #e66 -22.6153px 28.94626px 0 -4.73333px, #e66 -21.6305px 29.77183px 0 -4.8px, #e66 -20.61558px 30.56385px 0 -4.86667px, #e66 -19.57168px 31.32124px 0 -4.93333px, #e66 -18.5px 32.04294px 0 -5px, #e66 -17.40175px 32.72792px 0 -5.06667px, #e66 -16.27818px 33.37522px 0 -5.13333px, #e66 -15.1306px 33.98389px 0 -5.2px, #e66 -13.96034px 34.55305px 0 -5.26667px, #e66 -12.76875px 35.08186px 0 -5.33333px, #e66 -11.55724px 35.56951px 0 -5.4px, #e66 -10.32721px 36.01527px 0 -5.46667px, #e66 -9.08014px 36.41843px 0 -5.53333px, #e66 -7.81748px 36.77835px 0 -5.6px, #e66 -6.54075px 37.09443px 0 -5.66667px, #e66 -5.25147px 37.36612px 0 -5.73333px, #e66 -3.95118px 37.59293px 0 -5.8px, #e66 -2.64145px 37.77443px 0 -5.86667px, #e66 -1.32385px 37.91023px 0 -5.93333px;
+  -moz-animation: whirly-loader 1.25s infinite linear;
+  -webkit-animation: whirly-loader 1.25s infinite linear;
+  animation: whirly-loader 1.25s infinite linear;
+  -moz-transform-origin: 50% 50%;
+  -ms-transform-origin: 50% 50%;
+  -webkit-transform-origin: 50% 50%;
+  transform-origin: 50% 50%;
+}
+
+@-moz-keyframes flower-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+    -moz-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+    box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+  }
+  50% {
+    -moz-transform: rotate(1080deg);
+    transform: rotate(1080deg);
+    -moz-box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
+    box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
+  }
+}
+@-webkit-keyframes flower-loader {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+    -webkit-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+    box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+  }
+  50% {
+    -webkit-transform: rotate(1080deg);
+    transform: rotate(1080deg);
+    -webkit-box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
+    box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
+  }
+}
+@keyframes flower-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+    -moz-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+    -webkit-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+    box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+  }
+  50% {
+    -moz-transform: rotate(1080deg);
+    -ms-transform: rotate(1080deg);
+    -webkit-transform: rotate(1080deg);
+    transform: rotate(1080deg);
+    -moz-box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
+    -webkit-box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
+    box-shadow: white 0 0 15px 0, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px;
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.flower-loader:not(:required) {
+  overflow: hidden;
+  position: relative;
+  text-indent: -9999px;
+  display: inline-block;
+  width: 16px;
+  height: 16px;
+  background: #e96;
+  border-radius: 100%;
+  -moz-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+  -webkit-box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+  box-shadow: white 0 0 15px 0, #fd8 -12px -12px 0 4px, #fd8 12px -12px 0 4px, #fd8 12px 12px 0 4px, #fd8 -12px 12px 0 4px;
+  -moz-animation: flower-loader 5s infinite ease-in-out;
+  -webkit-animation: flower-loader 5s infinite ease-in-out;
+  animation: flower-loader 5s infinite ease-in-out;
+  -moz-transform-origin: 50% 50%;
+  -ms-transform-origin: 50% 50%;
+  -webkit-transform-origin: 50% 50%;
+  transform-origin: 50% 50%;
+}
+
+@-moz-keyframes dots-loader {
+  0% {
+    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  8.33% {
+    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  16.67% {
+    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  25% {
+    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  33.33% {
+    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
+  }
+  41.67% {
+    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  50% {
+    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  58.33% {
+    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  66.67% {
+    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  75% {
+    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  83.33% {
+    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
+  }
+  91.67% {
+    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  100% {
+    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+}
+@-webkit-keyframes dots-loader {
+  0% {
+    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  8.33% {
+    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  16.67% {
+    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  25% {
+    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  33.33% {
+    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
+  }
+  41.67% {
+    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  50% {
+    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  58.33% {
+    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  66.67% {
+    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  75% {
+    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  83.33% {
+    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
+  }
+  91.67% {
+    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  100% {
+    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+}
+@keyframes dots-loader {
+  0% {
+    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  8.33% {
+    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  16.67% {
+    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 14px 14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  25% {
+    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  33.33% {
+    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
+    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae -14px -14px 0 7px;
+  }
+  41.67% {
+    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  50% {
+    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  58.33% {
+    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 -14px 14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  66.67% {
+    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 -14px -14px 0 7px, #6d7 -14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  75% {
+    -moz-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    -webkit-box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
+    box-shadow: #f86 14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px -14px 0 7px, #4ae 14px -14px 0 7px;
+  }
+  83.33% {
+    -moz-box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
+    -webkit-box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
+    box-shadow: #f86 14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae 14px 14px 0 7px;
+  }
+  91.67% {
+    -moz-box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    -webkit-box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px 14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+  100% {
+    -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+    box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.dots-loader:not(:required) {
+  overflow: hidden;
+  position: relative;
+  text-indent: -9999px;
+  display: inline-block;
+  width: 7px;
+  height: 7px;
+  background: transparent;
+  border-radius: 100%;
+  -moz-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  -webkit-box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  box-shadow: #f86 -14px -14px 0 7px, #fc6 14px -14px 0 7px, #6d7 14px 14px 0 7px, #4ae -14px 14px 0 7px;
+  -moz-animation: dots-loader 5s infinite ease-in-out;
+  -webkit-animation: dots-loader 5s infinite ease-in-out;
+  animation: dots-loader 5s infinite ease-in-out;
+  -moz-transform-origin: 50% 50%;
+  -ms-transform-origin: 50% 50%;
+  -webkit-transform-origin: 50% 50%;
+  transform-origin: 50% 50%;
+}
+
+@-moz-keyframes circles-loader {
+  0% {
+    -moz-transform: rotate(-720deg);
+    transform: rotate(-720deg);
+  }
+  50% {
+    -moz-transform: rotate(720deg);
+    transform: rotate(720deg);
+  }
+}
+@-webkit-keyframes circles-loader {
+  0% {
+    -webkit-transform: rotate(-720deg);
+    transform: rotate(-720deg);
+  }
+  50% {
+    -webkit-transform: rotate(720deg);
+    transform: rotate(720deg);
+  }
+}
+@keyframes circles-loader {
+  0% {
+    -moz-transform: rotate(-720deg);
+    -ms-transform: rotate(-720deg);
+    -webkit-transform: rotate(-720deg);
+    transform: rotate(-720deg);
+  }
+  50% {
+    -moz-transform: rotate(720deg);
+    -ms-transform: rotate(720deg);
+    -webkit-transform: rotate(720deg);
+    transform: rotate(720deg);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.circles-loader:not(:required) {
+  position: relative;
+  text-indent: -9999px;
+  display: inline-block;
+  width: 25px;
+  height: 25px;
+  background: rgba(255, 204, 51, 0.9);
+  border-radius: 100%;
+  -moz-animation: circles-loader 3s infinite ease-in-out;
+  -webkit-animation: circles-loader 3s infinite ease-in-out;
+  animation: circles-loader 3s infinite ease-in-out;
+  -moz-transform-origin: 50% 100%;
+  -ms-transform-origin: 50% 100%;
+  -webkit-transform-origin: 50% 100%;
+  transform-origin: 50% 100%;
+}
+.circles-loader:not(:required)::before {
+  background: rgba(255, 102, 0, 0.6);
+  border-radius: 100%;
+  content: '';
+  position: absolute;
+  width: 25px;
+  height: 25px;
+  top: 18.75px;
+  left: -10.82532px;
+}
+.circles-loader:not(:required)::after {
+  background: rgba(255, 51, 0, 0.4);
+  border-radius: 100%;
+  content: '';
+  position: absolute;
+  width: 25px;
+  height: 25px;
+  top: 18.75px;
+  left: 10.82532px;
+}
+
+@-moz-keyframes plus-loader-top {
+  2.5% {
+    background: #f86;
+    -moz-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  13.75% {
+    background: #ff430d;
+    -moz-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  13.76% {
+    background: #ffae0d;
+    -moz-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  25% {
+    background: #fc6;
+    -moz-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+  }
+  27.5% {
+    background: #fc6;
+    -moz-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  41.25% {
+    background: #ffae0d;
+    -moz-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  41.26% {
+    background: #2cc642;
+    -moz-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  50% {
+    background: #6d7;
+    -moz-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+  }
+  52.5% {
+    background: #6d7;
+    -moz-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  63.75% {
+    background: #2cc642;
+    -moz-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  63.76% {
+    background: #1386d2;
+    -moz-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  75% {
+    background: #4ae;
+    -moz-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+  }
+  77.5% {
+    background: #4ae;
+    -moz-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  91.25% {
+    background: #1386d2;
+    -moz-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  91.26% {
+    background: #ff430d;
+    -moz-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  100% {
+    background: #f86;
+    -moz-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+@-webkit-keyframes plus-loader-top {
+  2.5% {
+    background: #f86;
+    -webkit-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  13.75% {
+    background: #ff430d;
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  13.76% {
+    background: #ffae0d;
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  25% {
+    background: #fc6;
+    -webkit-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+  }
+  27.5% {
+    background: #fc6;
+    -webkit-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  41.25% {
+    background: #ffae0d;
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  41.26% {
+    background: #2cc642;
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  50% {
+    background: #6d7;
+    -webkit-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+  }
+  52.5% {
+    background: #6d7;
+    -webkit-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  63.75% {
+    background: #2cc642;
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  63.76% {
+    background: #1386d2;
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  75% {
+    background: #4ae;
+    -webkit-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+  }
+  77.5% {
+    background: #4ae;
+    -webkit-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  91.25% {
+    background: #1386d2;
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  91.26% {
+    background: #ff430d;
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  100% {
+    background: #f86;
+    -webkit-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+@keyframes plus-loader-top {
+  2.5% {
+    background: #f86;
+    -moz-transform: rotateY(0deg);
+    -ms-transform: rotateY(0deg);
+    -webkit-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  13.75% {
+    background: #ff430d;
+    -moz-transform: rotateY(90deg);
+    -ms-transform: rotateY(90deg);
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  13.76% {
+    background: #ffae0d;
+    -moz-transform: rotateY(90deg);
+    -ms-transform: rotateY(90deg);
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: ease-out;
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  25% {
+    background: #fc6;
+    -moz-transform: rotateY(180deg);
+    -ms-transform: rotateY(180deg);
+    -webkit-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+  }
+  27.5% {
+    background: #fc6;
+    -moz-transform: rotateY(180deg);
+    -ms-transform: rotateY(180deg);
+    -webkit-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  41.25% {
+    background: #ffae0d;
+    -moz-transform: rotateY(90deg);
+    -ms-transform: rotateY(90deg);
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  41.26% {
+    background: #2cc642;
+    -moz-transform: rotateY(90deg);
+    -ms-transform: rotateY(90deg);
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: ease-out;
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  50% {
+    background: #6d7;
+    -moz-transform: rotateY(0deg);
+    -ms-transform: rotateY(0deg);
+    -webkit-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+  }
+  52.5% {
+    background: #6d7;
+    -moz-transform: rotateY(0deg);
+    -ms-transform: rotateY(0deg);
+    -webkit-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  63.75% {
+    background: #2cc642;
+    -moz-transform: rotateY(90deg);
+    -ms-transform: rotateY(90deg);
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  63.76% {
+    background: #1386d2;
+    -moz-transform: rotateY(90deg);
+    -ms-transform: rotateY(90deg);
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: ease-out;
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  75% {
+    background: #4ae;
+    -moz-transform: rotateY(180deg);
+    -ms-transform: rotateY(180deg);
+    -webkit-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+  }
+  77.5% {
+    background: #4ae;
+    -moz-transform: rotateY(180deg);
+    -ms-transform: rotateY(180deg);
+    -webkit-transform: rotateY(180deg);
+    transform: rotateY(180deg);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  91.25% {
+    background: #1386d2;
+    -moz-transform: rotateY(90deg);
+    -ms-transform: rotateY(90deg);
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  91.26% {
+    background: #ff430d;
+    -moz-transform: rotateY(90deg);
+    -ms-transform: rotateY(90deg);
+    -webkit-transform: rotateY(90deg);
+    transform: rotateY(90deg);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  100% {
+    background: #f86;
+    -moz-transform: rotateY(0deg);
+    -ms-transform: rotateY(0deg);
+    -webkit-transform: rotateY(0deg);
+    transform: rotateY(0deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+@-moz-keyframes plus-loader-bottom {
+  0% {
+    background: #fc6;
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  50% {
+    background: #fc6;
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  75% {
+    background: #4ae;
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  100% {
+    background: #4ae;
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+@-webkit-keyframes plus-loader-bottom {
+  0% {
+    background: #fc6;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  50% {
+    background: #fc6;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  75% {
+    background: #4ae;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  100% {
+    background: #4ae;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+@keyframes plus-loader-bottom {
+  0% {
+    background: #fc6;
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  50% {
+    background: #fc6;
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  75% {
+    background: #4ae;
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  100% {
+    background: #4ae;
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+@-moz-keyframes plus-loader-background {
+  0% {
+    background: #f86;
+    -moz-transform: rotateZ(180deg);
+    transform: rotateZ(180deg);
+  }
+  25% {
+    background: #f86;
+    -moz-transform: rotateZ(180deg);
+    transform: rotateZ(180deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  27.5% {
+    background: #6d7;
+    -moz-transform: rotateZ(90deg);
+    transform: rotateZ(90deg);
+  }
+  50% {
+    background: #6d7;
+    -moz-transform: rotateZ(90deg);
+    transform: rotateZ(90deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  52.5% {
+    background: #6d7;
+    -moz-transform: rotateZ(0deg);
+    transform: rotateZ(0deg);
+  }
+  75% {
+    background: #6d7;
+    -moz-transform: rotateZ(0deg);
+    transform: rotateZ(0deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  77.5% {
+    background: #f86;
+    -moz-transform: rotateZ(270deg);
+    transform: rotateZ(270deg);
+  }
+  100% {
+    background: #f86;
+    -moz-transform: rotateZ(270deg);
+    transform: rotateZ(270deg);
+    -moz-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+@-webkit-keyframes plus-loader-background {
+  0% {
+    background: #f86;
+    -webkit-transform: rotateZ(180deg);
+    transform: rotateZ(180deg);
+  }
+  25% {
+    background: #f86;
+    -webkit-transform: rotateZ(180deg);
+    transform: rotateZ(180deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  27.5% {
+    background: #6d7;
+    -webkit-transform: rotateZ(90deg);
+    transform: rotateZ(90deg);
+  }
+  50% {
+    background: #6d7;
+    -webkit-transform: rotateZ(90deg);
+    transform: rotateZ(90deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  52.5% {
+    background: #6d7;
+    -webkit-transform: rotateZ(0deg);
+    transform: rotateZ(0deg);
+  }
+  75% {
+    background: #6d7;
+    -webkit-transform: rotateZ(0deg);
+    transform: rotateZ(0deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  77.5% {
+    background: #f86;
+    -webkit-transform: rotateZ(270deg);
+    transform: rotateZ(270deg);
+  }
+  100% {
+    background: #f86;
+    -webkit-transform: rotateZ(270deg);
+    transform: rotateZ(270deg);
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+@keyframes plus-loader-background {
+  0% {
+    background: #f86;
+    -moz-transform: rotateZ(180deg);
+    -ms-transform: rotateZ(180deg);
+    -webkit-transform: rotateZ(180deg);
+    transform: rotateZ(180deg);
+  }
+  25% {
+    background: #f86;
+    -moz-transform: rotateZ(180deg);
+    -ms-transform: rotateZ(180deg);
+    -webkit-transform: rotateZ(180deg);
+    transform: rotateZ(180deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  27.5% {
+    background: #6d7;
+    -moz-transform: rotateZ(90deg);
+    -ms-transform: rotateZ(90deg);
+    -webkit-transform: rotateZ(90deg);
+    transform: rotateZ(90deg);
+  }
+  50% {
+    background: #6d7;
+    -moz-transform: rotateZ(90deg);
+    -ms-transform: rotateZ(90deg);
+    -webkit-transform: rotateZ(90deg);
+    transform: rotateZ(90deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  52.5% {
+    background: #6d7;
+    -moz-transform: rotateZ(0deg);
+    -ms-transform: rotateZ(0deg);
+    -webkit-transform: rotateZ(0deg);
+    transform: rotateZ(0deg);
+  }
+  75% {
+    background: #6d7;
+    -moz-transform: rotateZ(0deg);
+    -ms-transform: rotateZ(0deg);
+    -webkit-transform: rotateZ(0deg);
+    transform: rotateZ(0deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+  77.5% {
+    background: #f86;
+    -moz-transform: rotateZ(270deg);
+    -ms-transform: rotateZ(270deg);
+    -webkit-transform: rotateZ(270deg);
+    transform: rotateZ(270deg);
+  }
+  100% {
+    background: #f86;
+    -moz-transform: rotateZ(270deg);
+    -ms-transform: rotateZ(270deg);
+    -webkit-transform: rotateZ(270deg);
+    transform: rotateZ(270deg);
+    -moz-animation-timing-function: step-start;
+    -webkit-animation-timing-function: step-start;
+    animation-timing-function: step-start;
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.plus-loader:not(:required) {
+  overflow: hidden;
+  position: relative;
+  text-indent: -9999px;
+  display: inline-block;
+  width: 48px;
+  height: 48px;
+  background: #f86;
+  -moz-border-radius: 24px;
+  -webkit-border-radius: 24px;
+  border-radius: 24px;
+  -moz-transform: rotateZ(90deg);
+  -ms-transform: rotateZ(90deg);
+  -webkit-transform: rotateZ(90deg);
+  transform: rotateZ(90deg);
+  -moz-transform-origin: 50% 50%;
+  -ms-transform-origin: 50% 50%;
+  -webkit-transform-origin: 50% 50%;
+  transform-origin: 50% 50%;
+  -moz-animation: plus-loader-background 3s infinite ease-in-out;
+  -webkit-animation: plus-loader-background 3s infinite ease-in-out;
+  animation: plus-loader-background 3s infinite ease-in-out;
+}
+.plus-loader:not(:required)::after {
+  background: #f86;
+  -moz-border-radius: 24px 0 0 24px;
+  -webkit-border-radius: 24px;
+  border-radius: 24px 0 0 24px;
+  content: '';
+  position: absolute;
+  right: 50%;
+  top: 0;
+  width: 50%;
+  height: 100%;
+  -moz-transform-origin: 100% 50%;
+  -ms-transform-origin: 100% 50%;
+  -webkit-transform-origin: 100% 50%;
+  transform-origin: 100% 50%;
+  -moz-animation: plus-loader-top 3s infinite linear;
+  -webkit-animation: plus-loader-top 3s infinite linear;
+  animation: plus-loader-top 3s infinite linear;
+}
+.plus-loader:not(:required)::before {
+  background: #fc6;
+  -moz-border-radius: 24px 0 0 24px;
+  -webkit-border-radius: 24px;
+  border-radius: 24px 0 0 24px;
+  content: '';
+  position: absolute;
+  right: 50%;
+  top: 0;
+  width: 50%;
+  height: 100%;
+  -moz-transform-origin: 100% 50%;
+  -ms-transform-origin: 100% 50%;
+  -webkit-transform-origin: 100% 50%;
+  transform-origin: 100% 50%;
+  -moz-animation: plus-loader-bottom 3s infinite linear;
+  -webkit-animation: plus-loader-bottom 3s infinite linear;
+  animation: plus-loader-bottom 3s infinite linear;
+}
+
+@-moz-keyframes ball-loader {
+  0% {
+    -moz-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+    transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
+    -moz-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
+    -moz-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+}
+@-webkit-keyframes ball-loader {
+  0% {
+    -webkit-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+    transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
+    -webkit-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+}
+@keyframes ball-loader {
+  0% {
+    -moz-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+    -ms-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+    -webkit-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+    transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
+    -ms-transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
+    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 0.95, 1);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
+    -ms-transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
+    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 0.5, 1);
+    -moz-animation-timing-function: linear;
+    -webkit-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -moz-transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
+    -ms-transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
+    -webkit-transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
+    transform: translate3d(0, 150px, -10px) scale3d(1, 1.25, 1);
+    -moz-animation-timing-function: ease-out;
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+}
+@-moz-keyframes ball-loader-highlight {
+  0% {
+    -moz-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -moz-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -moz-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  100% {
+    -moz-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+@-webkit-keyframes ball-loader-highlight {
+  0% {
+    -webkit-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -webkit-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  100% {
+    -webkit-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+@keyframes ball-loader-highlight {
+  0% {
+    -moz-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -ms-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -webkit-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -ms-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -ms-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -moz-animation-timing-function: linear;
+    -webkit-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -moz-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -ms-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -webkit-transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    transform: skew(-30deg, 0) translate3d(0, 0, 1px);
+    -moz-animation-timing-function: ease-out;
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  100% {
+    -moz-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -ms-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -webkit-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+@-moz-keyframes ball-loader-shadow {
+  0% {
+    -moz-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -moz-transform: translate3d(12.5px, -15px, -1px);
+    transform: translate3d(12.5px, -15px, -1px);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -moz-transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
+    transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
+    -moz-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -moz-transform: translate3d(12.5px, -15px, -1px);
+    transform: translate3d(12.5px, -15px, -1px);
+    -moz-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  100% {
+    -moz-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -moz-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+@-webkit-keyframes ball-loader-shadow {
+  0% {
+    -webkit-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -webkit-transform: translate3d(12.5px, -15px, -1px);
+    transform: translate3d(12.5px, -15px, -1px);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -webkit-transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
+    transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
+    -webkit-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -webkit-transform: translate3d(12.5px, -15px, -1px);
+    transform: translate3d(12.5px, -15px, -1px);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  100% {
+    -webkit-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+@keyframes ball-loader-shadow {
+  0% {
+    -moz-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -ms-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -webkit-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  45% {
+    -moz-transform: translate3d(12.5px, -15px, -1px);
+    -ms-transform: translate3d(12.5px, -15px, -1px);
+    -webkit-transform: translate3d(12.5px, -15px, -1px);
+    transform: translate3d(12.5px, -15px, -1px);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+  50% {
+    -moz-transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
+    -ms-transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
+    -webkit-transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
+    transform: translate3d(12.5px, -15px, -1px) scale3d(1, 1, 1);
+    -moz-animation-timing-function: linear;
+    -webkit-animation-timing-function: linear;
+    animation-timing-function: linear;
+  }
+  55% {
+    -moz-transform: translate3d(12.5px, -15px, -1px);
+    -ms-transform: translate3d(12.5px, -15px, -1px);
+    -webkit-transform: translate3d(12.5px, -15px, -1px);
+    transform: translate3d(12.5px, -15px, -1px);
+    -moz-animation-timing-function: ease-out;
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+  100% {
+    -moz-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -ms-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -webkit-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+    -moz-animation-timing-function: ease-in;
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.ball-loader:not(:required) {
+  position: relative;
+  display: inline-block;
+  font-size: 0;
+  letter-spacing: -1px;
+  border-radius: 100%;
+  background: #f86;
+  width: 50px;
+  height: 50px;
+  -moz-transform-style: preserve-3d;
+  -webkit-transform-style: preserve-3d;
+  transform-style: preserve-3d;
+  -moz-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+  -ms-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+  -webkit-transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+  transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
+  -moz-transform-origin: 0 100%;
+  -ms-transform-origin: 0 100%;
+  -webkit-transform-origin: 0 100%;
+  transform-origin: 0 100%;
+  -moz-animation: ball-loader 1500ms infinite linear;
+  -webkit-animation: ball-loader 1500ms infinite linear;
+  animation: ball-loader 1500ms infinite linear;
+}
+.ball-loader:not(:required)::after {
+  content: '';
+  position: absolute;
+  top: 4.5px;
+  left: 5.5px;
+  width: 15px;
+  height: 15px;
+  background: #ffb099;
+  border-radius: 100%;
+  -moz-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+  -ms-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+  -webkit-transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+  transform: skew(-20deg, 0) translate3d(0, 2.5px, 1px);
+  -moz-animation: ball-loader-highlight 1500ms infinite linear;
+  -webkit-animation: ball-loader-highlight 1500ms infinite linear;
+  animation: ball-loader-highlight 1500ms infinite linear;
+}
+.ball-loader:not(:required)::before {
+  content: '';
+  position: absolute;
+  top: 50px;
+  left: 5.5px;
+  width: 50px;
+  height: 15px;
+  background: rgba(0, 0, 0, 0.2);
+  border-radius: 100%;
+  -moz-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+  -ms-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+  -webkit-transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+  transform: translate3d(66.66667px, 66.66667px, -1px) scale3d(1.25, 1.25, 1);
+  -moz-animation: ball-loader-shadow 1500ms infinite linear;
+  -webkit-animation: ball-loader-shadow 1500ms infinite linear;
+  animation: ball-loader-shadow 1500ms infinite linear;
+  -webkit-filter: blur(1px);
+  filter: blur(1px);
+}
+
+@-moz-keyframes hexdots-loader {
+  0% {
+    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  8.33% {
+    -moz-box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  16.67% {
+    -moz-box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  25% {
+    -moz-box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  33.33% {
+    -moz-box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  41.67% {
+    -moz-box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  50% {
+    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
+  }
+  58.33% {
+    -moz-box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
+    box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
+  }
+  66.67% {
+    -moz-box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
+    box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
+  }
+  75% {
+    -moz-box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+    box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+  }
+  83.33% {
+    -moz-box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
+    box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
+  }
+  91.67% {
+    -moz-box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  100% {
+    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+}
+@-webkit-keyframes hexdots-loader {
+  0% {
+    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  8.33% {
+    -webkit-box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  16.67% {
+    -webkit-box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  25% {
+    -webkit-box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  33.33% {
+    -webkit-box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  41.67% {
+    -webkit-box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  50% {
+    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
+  }
+  58.33% {
+    -webkit-box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
+    box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
+  }
+  66.67% {
+    -webkit-box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
+    box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
+  }
+  75% {
+    -webkit-box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+    box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+  }
+  83.33% {
+    -webkit-box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
+    box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
+  }
+  91.67% {
+    -webkit-box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  100% {
+    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+}
+@keyframes hexdots-loader {
+  0% {
+    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  8.33% {
+    -moz-box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    -webkit-box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  16.67% {
+    -moz-box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    -webkit-box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  25% {
+    -moz-box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    -webkit-box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  33.33% {
+    -moz-box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    -webkit-box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  41.67% {
+    -moz-box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
+    -webkit-box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  50% {
+    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
+    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px, #999 0 -30px 0 7px;
+  }
+  58.33% {
+    -moz-box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
+    -webkit-box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
+    box-shadow: #666666 26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px, #999 26px -15px 0 7px;
+  }
+  66.67% {
+    -moz-box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
+    -webkit-box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
+    box-shadow: #666666 26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px, #999 26px 15px 0 7px;
+  }
+  75% {
+    -moz-box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+    -webkit-box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+    box-shadow: #666666 0 30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+  }
+  83.33% {
+    -moz-box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
+    -webkit-box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
+    box-shadow: #666666 -26px 15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px 15px 0 7px;
+  }
+  91.67% {
+    -moz-box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    -webkit-box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 -26px -15px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+  100% {
+    -moz-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    -webkit-box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+    box-shadow: #666666 0 -30px 0 7px, #999 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 -26px 15px 0 7px, #999 -26px -15px 0 7px;
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.hexdots-loader:not(:required) {
+  overflow: hidden;
+  position: relative;
+  text-indent: -9999px;
+  display: inline-block;
+  width: 7px;
+  height: 7px;
+  background: transparent;
+  border-radius: 100%;
+  -moz-box-shadow: #666666 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+  -webkit-box-shadow: #666666 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+  box-shadow: #666666 0 -30px 0 7px, #999 26px -15px 0 7px, #999 26px 15px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px, #999 0 30px 0 7px;
+  -moz-animation: hexdots-loader 5s infinite ease-in-out;
+  -webkit-animation: hexdots-loader 5s infinite ease-in-out;
+  animation: hexdots-loader 5s infinite ease-in-out;
+  -moz-transform-origin: 50% 50%;
+  -ms-transform-origin: 50% 50%;
+  -webkit-transform-origin: 50% 50%;
+  transform-origin: 50% 50%;
+}
+
+/* :not(:required) hides this rule from IE9 and below */
+.inner-circles-loader:not(:required) {
+  -moz-transform: translate3d(0, 0, 0);
+  -ms-transform: translate3d(0, 0, 0);
+  -webkit-transform: translate3d(0, 0, 0);
+  transform: translate3d(0, 0, 0);
+  position: relative;
+  display: inline-block;
+  width: 50px;
+  height: 50px;
+  background: rgba(25, 165, 152, 0.5);
+  border-radius: 50%;
+  overflow: hidden;
+  text-indent: -9999px;
+  /* Hides inner circles outside base circle at safari */
+  -webkit-mask-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA5JREFUeNpiYGBgAAgwAAAEAAGbA+oJAAAAAElFTkSuQmCC);
+}
+.inner-circles-loader:not(:required):before, .inner-circles-loader:not(:required):after {
+  content: '';
+  position: absolute;
+  top: 0;
+  display: inline-block;
+  width: 50px;
+  height: 50px;
+  border-radius: 50%;
+}
+.inner-circles-loader:not(:required):before {
+  -moz-animation: inner-circles-loader 3s infinite;
+  -webkit-animation: inner-circles-loader 3s infinite;
+  animation: inner-circles-loader 3s infinite;
+  -moz-transform-origin: 0 50%;
+  -ms-transform-origin: 0 50%;
+  -webkit-transform-origin: 0 50%;
+  transform-origin: 0 50%;
+  left: 0;
+  background: #c7efcf;
+}
+.inner-circles-loader:not(:required):after {
+  -moz-animation: inner-circles-loader 3s 0.2s reverse infinite;
+  -webkit-animation: inner-circles-loader 3s 0.2s reverse infinite;
+  animation: inner-circles-loader 3s 0.2s reverse infinite;
+  -moz-transform-origin: 100% 50%;
+  -ms-transform-origin: 100% 50%;
+  -webkit-transform-origin: 100% 50%;
+  transform-origin: 100% 50%;
+  right: 0;
+  background: #eef5db;
+}
+
+@-moz-keyframes inner-circles-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  50% {
+    -moz-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+  100% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+}
+@-webkit-keyframes inner-circles-loader {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  50% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+  100% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+}
+@keyframes inner-circles-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  50% {
+    -moz-transform: rotate(360deg);
+    -ms-transform: rotate(360deg);
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+  100% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+}
+@-moz-keyframes pong-loader {
+  0% {
+    left: 5px;
+    top: 0;
+  }
+  25% {
+    left: 65px;
+    top: 20px;
+  }
+  50% {
+    left: 5px;
+  }
+  62.5% {
+    top: 50px;
+  }
+  75% {
+    left: 65px;
+    top: 70%;
+  }
+  100% {
+    left: 5px;
+    top: 0%;
+  }
+}
+@-webkit-keyframes pong-loader {
+  0% {
+    left: 5px;
+    top: 0;
+  }
+  25% {
+    left: 65px;
+    top: 20px;
+  }
+  50% {
+    left: 5px;
+  }
+  62.5% {
+    top: 50px;
+  }
+  75% {
+    left: 65px;
+    top: 70%;
+  }
+  100% {
+    left: 5px;
+    top: 0%;
+  }
+}
+@keyframes pong-loader {
+  0% {
+    left: 5px;
+    top: 0;
+  }
+  25% {
+    left: 65px;
+    top: 20px;
+  }
+  50% {
+    left: 5px;
+  }
+  62.5% {
+    top: 50px;
+  }
+  75% {
+    left: 65px;
+    top: 70%;
+  }
+  100% {
+    left: 5px;
+    top: 0%;
+  }
+}
+@-moz-keyframes pong-loader-paddle-1 {
+  0% {
+    -moz-box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  25% {
+    -moz-box-shadow: inset #353c39 0 15px 0 0, inset #353c39 0 -25px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 15px 0 0, inset #353c39 0 -25px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  50% {
+    -moz-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  62.5% {
+    -moz-box-shadow: inset #353c39 0 10px 0 0, inset #353c39 0 -30px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 10px 0 0, inset #353c39 0 -30px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  75% {
+    -moz-box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  100% {
+    -moz-box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+}
+@-webkit-keyframes pong-loader-paddle-1 {
+  0% {
+    -webkit-box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  25% {
+    -webkit-box-shadow: inset #353c39 0 15px 0 0, inset #353c39 0 -25px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 15px 0 0, inset #353c39 0 -25px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  50% {
+    -webkit-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  62.5% {
+    -webkit-box-shadow: inset #353c39 0 10px 0 0, inset #353c39 0 -30px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 10px 0 0, inset #353c39 0 -30px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  75% {
+    -webkit-box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  100% {
+    -webkit-box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+}
+@keyframes pong-loader-paddle-1 {
+  0% {
+    -moz-box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  25% {
+    -moz-box-shadow: inset #353c39 0 15px 0 0, inset #353c39 0 -25px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 15px 0 0, inset #353c39 0 -25px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 15px 0 0, inset #353c39 0 -25px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  50% {
+    -moz-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  62.5% {
+    -moz-box-shadow: inset #353c39 0 10px 0 0, inset #353c39 0 -30px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 10px 0 0, inset #353c39 0 -30px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 10px 0 0, inset #353c39 0 -30px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  75% {
+    -moz-box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  100% {
+    -moz-box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 5px 0 0, inset #353c39 0 -35px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+}
+@-moz-keyframes pong-loader-paddle-2 {
+  0% {
+    -moz-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  50% {
+    -moz-box-shadow: inset #353c39 0 30px 0 0, inset #353c39 0 -10px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 30px 0 0, inset #353c39 0 -10px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  62.5% {
+    -moz-box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  75% {
+    -moz-box-shadow: inset #353c39 0 20px 0 0, inset #353c39 0 -20px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 20px 0 0, inset #353c39 0 -20px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  100% {
+    -moz-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+}
+@-webkit-keyframes pong-loader-paddle-2 {
+  0% {
+    -webkit-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  50% {
+    -webkit-box-shadow: inset #353c39 0 30px 0 0, inset #353c39 0 -10px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 30px 0 0, inset #353c39 0 -10px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  62.5% {
+    -webkit-box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  75% {
+    -webkit-box-shadow: inset #353c39 0 20px 0 0, inset #353c39 0 -20px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 20px 0 0, inset #353c39 0 -20px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  100% {
+    -webkit-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+}
+@keyframes pong-loader-paddle-2 {
+  0% {
+    -moz-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  50% {
+    -moz-box-shadow: inset #353c39 0 30px 0 0, inset #353c39 0 -10px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 30px 0 0, inset #353c39 0 -10px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 30px 0 0, inset #353c39 0 -10px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  62.5% {
+    -moz-box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 40px 0 0, inset #353c39 0 0 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  75% {
+    -moz-box-shadow: inset #353c39 0 20px 0 0, inset #353c39 0 -20px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 20px 0 0, inset #353c39 0 -20px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 20px 0 0, inset #353c39 0 -20px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+  100% {
+    -moz-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    -webkit-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+    box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.pong-loader:not(:required) {
+  width: 80px;
+  height: 60px;
+  background: #353c39;
+  position: relative;
+  display: inline-block;
+  overflow: hidden;
+  text-indent: 100%;
+  -moz-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  -webkit-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  -moz-animation: pong-loader-paddle-1 1500ms infinite linear;
+  -webkit-animation: pong-loader-paddle-1 1500ms infinite linear;
+  animation: pong-loader-paddle-1 1500ms infinite linear;
+}
+.pong-loader:not(:required):before {
+  -moz-animation: pong-loader-paddle-2 1500ms infinite linear;
+  -webkit-animation: pong-loader-paddle-2 1500ms infinite linear;
+  animation: pong-loader-paddle-2 1500ms infinite linear;
+  position: absolute;
+  top: 0;
+  left: 0;
+  display: block;
+  content: "";
+  width: 10px;
+  height: 100%;
+  -moz-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  -webkit-box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+  box-shadow: inset #353c39 0 0 0 0, inset #353c39 0 -40px 0 0, inset #353c39 -3px 0 0 0, inset #8cdb8b -10px 0 0 0;
+}
+.pong-loader:not(:required):after {
+  content: "";
+  display: block;
+  -moz-animation: pong-loader 1500ms infinite linear;
+  -webkit-animation: pong-loader 1500ms infinite linear;
+  animation: pong-loader 1500ms infinite linear;
+  -moz-border-radius: 50%;
+  -webkit-border-radius: 50%;
+  border-radius: 50%;
+  position: absolute;
+  left: 0;
+  top: 0;
+  width: 10px;
+  height: 10px;
+  background: #8cdb8b;
+}
+
+.pulse-loader:not(:required) {
+  display: inline-block;
+  width: 50px;
+  height: 50px;
+  -moz-animation: pulse-loader 0.7s linear infinite alternate;
+  -webkit-animation: pulse-loader 0.7s linear infinite alternate;
+  animation: pulse-loader 0.7s linear infinite alternate;
+  border: 2px solid #e67e22;
+  -moz-border-radius: 50%;
+  -webkit-border-radius: 50%;
+  border-radius: 50%;
+  overflow: hidden;
+  text-indent: 50px;
+}
+
+@-moz-keyframes pulse-loader {
+  0% {
+    -moz-box-shadow: #e67e22 0 0 0px 20px;
+    box-shadow: #e67e22 0 0 0px 20px;
+  }
+  40% {
+    -moz-box-shadow: none;
+    box-shadow: none;
+  }
+  100% {
+    -moz-box-shadow: #e67e22 0 0 0px 25px inset;
+    box-shadow: #e67e22 0 0 0px 25px inset;
+  }
+}
+@-webkit-keyframes pulse-loader {
+  0% {
+    -webkit-box-shadow: #e67e22 0 0 0px 20px;
+    box-shadow: #e67e22 0 0 0px 20px;
+  }
+  40% {
+    -webkit-box-shadow: none;
+    box-shadow: none;
+  }
+  100% {
+    -webkit-box-shadow: #e67e22 0 0 0px 25px inset;
+    box-shadow: #e67e22 0 0 0px 25px inset;
+  }
+}
+@keyframes pulse-loader {
+  0% {
+    -moz-box-shadow: #e67e22 0 0 0px 20px;
+    -webkit-box-shadow: #e67e22 0 0 0px 20px;
+    box-shadow: #e67e22 0 0 0px 20px;
+  }
+  40% {
+    -moz-box-shadow: none;
+    -webkit-box-shadow: none;
+    box-shadow: none;
+  }
+  100% {
+    -moz-box-shadow: #e67e22 0 0 0px 25px inset;
+    -webkit-box-shadow: #e67e22 0 0 0px 25px inset;
+    box-shadow: #e67e22 0 0 0px 25px inset;
+  }
+}
diff --git a/public/bower_components/css-spinners/spinners.scss b/public/bower_components/css-spinners/spinners.scss
new file mode 100644
index 0000000..4ae85db
--- /dev/null
+++ b/public/bower_components/css-spinners/spinners.scss
@@ -0,0 +1,19 @@
+@import "spinner/spinner";
+@import "spinner/refreshing";
+@import "spinner/throbber";
+@import "spinner/heartbeat";
+@import "spinner/gauge";
+@import "spinner/timer";
+@import "spinner/three-quarters";
+@import "spinner/wobblebar";
+@import "spinner/atebits";
+@import "spinner/whirly";
+@import "spinner/flower";
+@import "spinner/dots";
+@import "spinner/circles";
+@import "spinner/plus";
+@import "spinner/ball";
+@import "spinner/hexdots";
+@import "spinner/inner-circles";
+@import "spinner/pong";
+@import "spinner/pulse";
diff --git a/public/bower_components/css-spinners/three-quarters.css b/public/bower_components/css-spinners/three-quarters.css
new file mode 100644
index 0000000..5e11a1a
--- /dev/null
+++ b/public/bower_components/css-spinners/three-quarters.css
@@ -0,0 +1,50 @@
+@-moz-keyframes three-quarters-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@-webkit-keyframes three-quarters-loader {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@keyframes three-quarters-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    -ms-transform: rotate(360deg);
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.three-quarters-loader:not(:required) {
+  -moz-animation: three-quarters-loader 1250ms infinite linear;
+  -webkit-animation: three-quarters-loader 1250ms infinite linear;
+  animation: three-quarters-loader 1250ms infinite linear;
+  border: 8px solid #38e;
+  border-right-color: transparent;
+  border-radius: 16px;
+  box-sizing: border-box;
+  display: inline-block;
+  position: relative;
+  overflow: hidden;
+  text-indent: -9999px;
+  width: 32px;
+  height: 32px;
+}
diff --git a/public/bower_components/css-spinners/throbber.css b/public/bower_components/css-spinners/throbber.css
new file mode 100644
index 0000000..3eaded7
--- /dev/null
+++ b/public/bower_components/css-spinners/throbber.css
@@ -0,0 +1,67 @@
+@-moz-keyframes throbber-loader {
+  0% {
+    background: #dde2e7;
+  }
+  10% {
+    background: #6b9dc8;
+  }
+  40% {
+    background: #dde2e7;
+  }
+}
+@-webkit-keyframes throbber-loader {
+  0% {
+    background: #dde2e7;
+  }
+  10% {
+    background: #6b9dc8;
+  }
+  40% {
+    background: #dde2e7;
+  }
+}
+@keyframes throbber-loader {
+  0% {
+    background: #dde2e7;
+  }
+  10% {
+    background: #6b9dc8;
+  }
+  40% {
+    background: #dde2e7;
+  }
+}
+/* :not(:required) hides these rules from IE9 and below */
+.throbber-loader:not(:required) {
+  -moz-animation: throbber-loader 2000ms 300ms infinite ease-out;
+  -webkit-animation: throbber-loader 2000ms 300ms infinite ease-out;
+  animation: throbber-loader 2000ms 300ms infinite ease-out;
+  background: #dde2e7;
+  display: inline-block;
+  position: relative;
+  text-indent: -9999px;
+  width: 0.9em;
+  height: 1.5em;
+  margin: 0 1.6em;
+}
+.throbber-loader:not(:required):before, .throbber-loader:not(:required):after {
+  background: #dde2e7;
+  content: '\x200B';
+  display: inline-block;
+  width: 0.9em;
+  height: 1.5em;
+  position: absolute;
+  top: 0;
+}
+.throbber-loader:not(:required):before {
+  -moz-animation: throbber-loader 2000ms 150ms infinite ease-out;
+  -webkit-animation: throbber-loader 2000ms 150ms infinite ease-out;
+  animation: throbber-loader 2000ms 150ms infinite ease-out;
+  left: -1.6em;
+}
+.throbber-loader:not(:required):after {
+  -moz-animation: throbber-loader 2000ms 450ms infinite ease-out;
+  -webkit-animation: throbber-loader 2000ms 450ms infinite ease-out;
+  animation: throbber-loader 2000ms 450ms infinite ease-out;
+  right: -1.6em;
+}
diff --git a/public/bower_components/css-spinners/timer.css b/public/bower_components/css-spinners/timer.css
new file mode 100644
index 0000000..b806956
--- /dev/null
+++ b/public/bower_components/css-spinners/timer.css
@@ -0,0 +1,90 @@
+@-moz-keyframes timer-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@-webkit-keyframes timer-loader {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@keyframes timer-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    -ms-transform: rotate(360deg);
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.timer-loader:not(:required) {
+  border: 6px solid #c8d;
+  -moz-border-radius: 24px;
+  -webkit-border-radius: 24px;
+  border-radius: 24px;
+  -moz-box-sizing: border-box;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  display: inline-block;
+  overflow: hidden;
+  position: relative;
+  text-indent: -9999px;
+  width: 48px;
+  height: 48px;
+}
+.timer-loader:not(:required)::before {
+  -moz-animation: timer-loader 1250ms infinite linear;
+  -webkit-animation: timer-loader 1250ms infinite linear;
+  animation: timer-loader 1250ms infinite linear;
+  -moz-transform-origin: 3px 3px;
+  -ms-transform-origin: 3px 3px;
+  -webkit-transform-origin: 3px 3px;
+  transform-origin: 3px 3px;
+  background: #c8d;
+  -moz-border-radius: 3px;
+  -webkit-border-radius: 3px;
+  border-radius: 3px;
+  content: '';
+  display: block;
+  position: absolute;
+  width: 6px;
+  height: 19.2px;
+  left: 15px;
+  top: 15px;
+}
+.timer-loader:not(:required)::after {
+  -moz-animation: timer-loader 15000ms infinite linear;
+  -webkit-animation: timer-loader 15000ms infinite linear;
+  animation: timer-loader 15000ms infinite linear;
+  -moz-transform-origin: 3px 3px;
+  -ms-transform-origin: 3px 3px;
+  -webkit-transform-origin: 3px 3px;
+  transform-origin: 3px 3px;
+  background: #c8d;
+  -moz-border-radius: 3px;
+  -webkit-border-radius: 3px;
+  border-radius: 3px;
+  content: '';
+  display: block;
+  position: absolute;
+  width: 6px;
+  height: 16px;
+  left: 15px;
+  top: 15px;
+}
diff --git a/public/bower_components/css-spinners/whirly.css b/public/bower_components/css-spinners/whirly.css
new file mode 100644
index 0000000..0e1d14e
--- /dev/null
+++ b/public/bower_components/css-spinners/whirly.css
@@ -0,0 +1,57 @@
+@-moz-keyframes whirly-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@-webkit-keyframes whirly-loader {
+  0% {
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@keyframes whirly-loader {
+  0% {
+    -moz-transform: rotate(0deg);
+    -ms-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+  100% {
+    -moz-transform: rotate(360deg);
+    -ms-transform: rotate(360deg);
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.whirly-loader:not(:required) {
+  overflow: hidden;
+  position: relative;
+  text-indent: -9999px;
+  display: inline-block;
+  width: 8px;
+  height: 8px;
+  background: transparent;
+  -moz-border-radius: 100%;
+  -webkit-border-radius: 100%;
+  border-radius: 100%;
+  -moz-box-shadow: #e66 0px 26px 0 6px, #e66 0.90971px 26.05079px 0 5.93333px, #e66 1.82297px 26.06967px 0 5.86667px, #e66 2.73865px 26.05647px 0 5.8px, #e66 3.65561px 26.01104px 0 5.73333px, #e66 4.57274px 25.93327px 0 5.66667px, #e66 5.48887px 25.8231px 0 5.6px, #e66 6.40287px 25.68049px 0 5.53333px, #e66 7.31358px 25.50548px 0 5.46667px, #e66 8.21985px 25.2981px 0 5.4px, #e66 9.12054px 25.05847px 0 5.33333px, #e66 10.01448px 24.78672px 0 5.26667px, #e66 10.90054px 24.48302px 0 5.2px, #e66 11.77757px 24.1476px 0 5.13333px, #e66 12.64443px 23.78072px 0 5.06667px, #e66 13.5px 23.38269px 0 5px, #e66 14.34315px 22.95384px 0 4.93333px, #e66 15.17277px 22.49455px 0 4.86667px, #e66 15.98776px 22.00526px 0 4.8px, #e66 16.78704px 21.48643px 0 4.73333px, #e66 17.56953px 20.93855px 0 4.66667px, #e66 18.33418px 20.36217px 0 4.6px, #e66 19.07995px 19.75787px 0 4.53333px, #e66 19.80582px 19.12626px 0 4.46667px, #e66 20.5108px 18.468px 0 4.4px, #e66 21.1939px 17.78379px 0 4.33333px, #e66 21.85416px 17.07434px 0 4.26667px, #e66 22.49067px 16.34043px 0 4.2px, #e66 23.10251px 15.58284px 0 4.13333px, #e66 23.68881px 14.80241px 0 4.06667px, #e66 24.24871px 14.0px 0 4px, #e66 24.7814px 13.1765px 0 3.93333px, #e66 25.28607px 12.33284px 0 3.86667px, #e66 25.76198px 11.46997px 0 3.8px, #e66 26.2084px 10.58888px 0 3.73333px, #e66 26.62462px 9.69057px 0 3.66667px, #e66 27.01001px 8.77608px 0 3.6px, #e66 27.36392px 7.84648px 0 3.53333px, #e66 27.68577px 6.90284px 0 3.46667px, #e66 27.97502px 5.94627px 0 3.4px, #e66 28.23116px 4.97791px 0 3.33333px, #e66 28.4537px 3.99891px 0 3.26667px, #e66 28.64223px 3.01042px 0 3.2px, #e66 28.79635px 2.01364px 0 3.13333px, #e66 28.91571px 1.00976px 0 3.06667px, #e66 29px 0.0px 0 3px, #e66 29.04896px -1.01441px 0 2.93333px, #e66 29.06237px -2.03224px 0 2.86667px, #e66 29.04004px -3.05223px 0 2.8px, #e66 28.98185px -4.07313px 0 2.73333px, #e66 28.88769px -5.09368px 0 2.66667px, #e66 28.75754px -6.1126px 0 2.6px, #e66 28.59138px -7.12863px 0 2.53333px, #e66 28.38926px -8.14049px 0 2.46667px, #e66 28.15127px -9.1469px 0 2.4px, #e66 27.87755px -10.1466px 0 2.33333px, #e66 27.56827px -11.1383px 0 2.26667px, #e66 27.22365px -12.12075px 0 2.2px, #e66 26.84398px -13.09268px 0 2.13333px, #e66 26.42956px -14.05285px 0 2.06667px, #e66 25.98076px -15.0px 0 2px, #e66 25.49798px -15.93291px 0 1.93333px, #e66 24.98167px -16.85035px 0 1.86667px, #e66 24.43231px -17.75111px 0 1.8px, #e66 23.85046px -18.63402px 0 1.73333px, #e66 23.23668px -19.49789px 0 1.66667px, #e66 22.5916px -20.34157px 0 1.6px, #e66 21.91589px -21.16393px 0 1.53333px, #e66 21.21024px -21.96384px 0 1.46667px, #e66 20.4754px -22.74023px 0 1.4px, #e66 19.71215px -23.49203px 0 1.33333px, #e66 18.92133px -24.2182px 0 1.26667px, #e66 18.10379px -24.91772px 0 1.2px, #e66 17.26042px -25.58963px 0 1.13333px, #e66 16.39217px -26.23295px 0 1.06667px, #e66 15.5px -26.84679px 0 1px, #e66 14.58492px -27.43024px 0 0.93333px, #e66 13.64796px -27.98245px 0 0.86667px, #e66 12.69018px -28.50262px 0 0.8px, #e66 11.7127px -28.98995px 0 0.73333px, #e66 10.71663px -29.4437px 0 0.66667px, #e66 9.70313px -29.86317px 0 0.6px, #e66 8.67339px -30.2477px 0 0.53333px, #e66 7.6286px -30.59666px 0 0.46667px, #e66 6.57001px -30.90946px 0 0.4px, #e66 5.49886px -31.18558px 0 0.33333px, #e66 4.41643px -31.42451px 0 0.26667px, #e66 3.32401px -31.6258px 0 0.2px, #e66 2.22291px -31.78904px 0 0.13333px, #e66 1.11446px -31.91388px 0 0.06667px, #e66 0.0px -32px 0 0px, #e66 -1.11911px -32.04713px 0 -0.06667px, #e66 -2.24151px -32.05506px 0 -0.13333px, #e66 -3.36582px -32.02361px 0 -0.2px, #e66 -4.49065px -31.95265px 0 -0.26667px, #e66 -5.61462px -31.84212px 0 -0.33333px, #e66 -6.73634px -31.69198px 0 -0.4px, #e66 -7.8544px -31.50227px 0 -0.46667px, #e66 -8.9674px -31.27305px 0 -0.53333px, #e66 -10.07395px -31.00444px 0 -0.6px, #e66 -11.17266px -30.69663px 0 -0.66667px, #e66 -12.26212px -30.34982px 0 -0.73333px, #e66 -13.34096px -29.96429px 0 -0.8px, #e66 -14.4078px -29.54036px 0 -0.86667px, #e66 -15.46126px -29.07841px 0 -0.93333px, #e66 -16.5px -28.57884px 0 -1px, #e66 -17.52266px -28.04212px 0 -1.06667px, #e66 -18.52792px -27.46878px 0 -1.13333px, #e66 -19.51447px -26.85936px 0 -1.2px, #e66 -20.48101px -26.21449px 0 -1.26667px, #e66 -21.42625px -25.53481px 0 -1.33333px, #e66 -22.34896px -24.82104px 0 -1.4px, #e66 -23.2479px -24.07391px 0 -1.46667px, #e66 -24.12186px -23.29421px 0 -1.53333px, #e66 -24.96967px -22.48279px 0 -1.6px, #e66 -25.79016px -21.64052px 0 -1.66667px, #e66 -26.58223px -20.76831px 0 -1.73333px, #e66 -27.34477px -19.86714px 0 -1.8px, #e66 -28.07674px -18.938px 0 -1.86667px, #e66 -28.7771px -17.98193px 0 -1.93333px, #e66 -29.44486px -17.0px 0 -2px, #e66 -30.07908px -15.99333px 0 -2.06667px, #e66 -30.67884px -14.96307px 0 -2.13333px, #e66 -31.24325px -13.91039px 0 -2.2px, #e66 -31.7715px -12.83652px 0 -2.26667px, #e66 -32.26278px -11.74269px 0 -2.33333px, #e66 -32.71634px -10.63018px 0 -2.4px, #e66 -33.13149px -9.5003px 0 -2.46667px, #e66 -33.50755px -8.35437px 0 -2.53333px, #e66 -33.84391px -7.19374px 0 -2.6px, #e66 -34.14px -6.0198px 0 -2.66667px, #e66 -34.39531px -4.83395px 0 -2.73333px, #e66 -34.60936px -3.63759px 0 -2.8px, #e66 -34.78173px -2.43218px 0 -2.86667px, #e66 -34.91205px -1.21916px 0 -2.93333px, #e66 -35px 0.0px 0 -3px, #e66 -35.04531px 1.22381px 0 -3.06667px, #e66 -35.04775px 2.45078px 0 -3.13333px, #e66 -35.00717px 3.6794px 0 -3.2px, #e66 -34.92345px 4.90817px 0 -3.26667px, #e66 -34.79654px 6.13557px 0 -3.33333px, #e66 -34.62643px 7.36007px 0 -3.4px, #e66 -34.41316px 8.58016px 0 -3.46667px, #e66 -34.15683px 9.79431px 0 -3.53333px, #e66 -33.85761px 11.001px 0 -3.6px, #e66 -33.5157px 12.19872px 0 -3.66667px, #e66 -33.13137px 13.38594px 0 -3.73333px, #e66 -32.70493px 14.56117px 0 -3.8px, #e66 -32.23675px 15.72291px 0 -3.86667px, #e66 -31.72725px 16.86968px 0 -3.93333px, #e66 -31.17691px 18px 0 -4px, #e66 -30.58627px 19.11242px 0 -4.06667px, #e66 -29.95589px 20.2055px 0 -4.13333px, #e66 -29.28642px 21.27783px 0 -4.2px, #e66 -28.57852px 22.32799px 0 -4.26667px, #e66 -27.83295px 23.35462px 0 -4.33333px, #e66 -27.05047px 24.35635px 0 -4.4px, #e66 -26.23192px 25.33188px 0 -4.46667px, #e66 -25.37819px 26.27988px 0 -4.53333px, #e66 -24.49018px 27.1991px 0 -4.6px, #e66 -23.56888px 28.0883px 0 -4.66667px, #e66 -22.6153px 28.94626px 0 -4.73333px, #e66 -21.6305px 29.77183px 0 -4.8px, #e66 -20.61558px 30.56385px 0 -4.86667px, #e66 -19.57168px 31.32124px 0 -4.93333px, #e66 -18.5px 32.04294px 0 -5px, #e66 -17.40175px 32.72792px 0 -5.06667px, #e66 -16.27818px 33.37522px 0 -5.13333px, #e66 -15.1306px 33.98389px 0 -5.2px, #e66 -13.96034px 34.55305px 0 -5.26667px, #e66 -12.76875px 35.08186px 0 -5.33333px, #e66 -11.55724px 35.56951px 0 -5.4px, #e66 -10.32721px 36.01527px 0 -5.46667px, #e66 -9.08014px 36.41843px 0 -5.53333px, #e66 -7.81748px 36.77835px 0 -5.6px, #e66 -6.54075px 37.09443px 0 -5.66667px, #e66 -5.25147px 37.36612px 0 -5.73333px, #e66 -3.95118px 37.59293px 0 -5.8px, #e66 -2.64145px 37.77443px 0 -5.86667px, #e66 -1.32385px 37.91023px 0 -5.93333px;
+  -webkit-box-shadow: #e66 0px 26px 0 6px, #e66 0.90971px 26.05079px 0 5.93333px, #e66 1.82297px 26.06967px 0 5.86667px, #e66 2.73865px 26.05647px 0 5.8px, #e66 3.65561px 26.01104px 0 5.73333px, #e66 4.57274px 25.93327px 0 5.66667px, #e66 5.48887px 25.8231px 0 5.6px, #e66 6.40287px 25.68049px 0 5.53333px, #e66 7.31358px 25.50548px 0 5.46667px, #e66 8.21985px 25.2981px 0 5.4px, #e66 9.12054px 25.05847px 0 5.33333px, #e66 10.01448px 24.78672px 0 5.26667px, #e66 10.90054px 24.48302px 0 5.2px, #e66 11.77757px 24.1476px 0 5.13333px, #e66 12.64443px 23.78072px 0 5.06667px, #e66 13.5px 23.38269px 0 5px, #e66 14.34315px 22.95384px 0 4.93333px, #e66 15.17277px 22.49455px 0 4.86667px, #e66 15.98776px 22.00526px 0 4.8px, #e66 16.78704px 21.48643px 0 4.73333px, #e66 17.56953px 20.93855px 0 4.66667px, #e66 18.33418px 20.36217px 0 4.6px, #e66 19.07995px 19.75787px 0 4.53333px, #e66 19.80582px 19.12626px 0 4.46667px, #e66 20.5108px 18.468px 0 4.4px, #e66 21.1939px 17.78379px 0 4.33333px, #e66 21.85416px 17.07434px 0 4.26667px, #e66 22.49067px 16.34043px 0 4.2px, #e66 23.10251px 15.58284px 0 4.13333px, #e66 23.68881px 14.80241px 0 4.06667px, #e66 24.24871px 14.0px 0 4px, #e66 24.7814px 13.1765px 0 3.93333px, #e66 25.28607px 12.33284px 0 3.86667px, #e66 25.76198px 11.46997px 0 3.8px, #e66 26.2084px 10.58888px 0 3.73333px, #e66 26.62462px 9.69057px 0 3.66667px, #e66 27.01001px 8.77608px 0 3.6px, #e66 27.36392px 7.84648px 0 3.53333px, #e66 27.68577px 6.90284px 0 3.46667px, #e66 27.97502px 5.94627px 0 3.4px, #e66 28.23116px 4.97791px 0 3.33333px, #e66 28.4537px 3.99891px 0 3.26667px, #e66 28.64223px 3.01042px 0 3.2px, #e66 28.79635px 2.01364px 0 3.13333px, #e66 28.91571px 1.00976px 0 3.06667px, #e66 29px 0.0px 0 3px, #e66 29.04896px -1.01441px 0 2.93333px, #e66 29.06237px -2.03224px 0 2.86667px, #e66 29.04004px -3.05223px 0 2.8px, #e66 28.98185px -4.07313px 0 2.73333px, #e66 28.88769px -5.09368px 0 2.66667px, #e66 28.75754px -6.1126px 0 2.6px, #e66 28.59138px -7.12863px 0 2.53333px, #e66 28.38926px -8.14049px 0 2.46667px, #e66 28.15127px -9.1469px 0 2.4px, #e66 27.87755px -10.1466px 0 2.33333px, #e66 27.56827px -11.1383px 0 2.26667px, #e66 27.22365px -12.12075px 0 2.2px, #e66 26.84398px -13.09268px 0 2.13333px, #e66 26.42956px -14.05285px 0 2.06667px, #e66 25.98076px -15.0px 0 2px, #e66 25.49798px -15.93291px 0 1.93333px, #e66 24.98167px -16.85035px 0 1.86667px, #e66 24.43231px -17.75111px 0 1.8px, #e66 23.85046px -18.63402px 0 1.73333px, #e66 23.23668px -19.49789px 0 1.66667px, #e66 22.5916px -20.34157px 0 1.6px, #e66 21.91589px -21.16393px 0 1.53333px, #e66 21.21024px -21.96384px 0 1.46667px, #e66 20.4754px -22.74023px 0 1.4px, #e66 19.71215px -23.49203px 0 1.33333px, #e66 18.92133px -24.2182px 0 1.26667px, #e66 18.10379px -24.91772px 0 1.2px, #e66 17.26042px -25.58963px 0 1.13333px, #e66 16.39217px -26.23295px 0 1.06667px, #e66 15.5px -26.84679px 0 1px, #e66 14.58492px -27.43024px 0 0.93333px, #e66 13.64796px -27.98245px 0 0.86667px, #e66 12.69018px -28.50262px 0 0.8px, #e66 11.7127px -28.98995px 0 0.73333px, #e66 10.71663px -29.4437px 0 0.66667px, #e66 9.70313px -29.86317px 0 0.6px, #e66 8.67339px -30.2477px 0 0.53333px, #e66 7.6286px -30.59666px 0 0.46667px, #e66 6.57001px -30.90946px 0 0.4px, #e66 5.49886px -31.18558px 0 0.33333px, #e66 4.41643px -31.42451px 0 0.26667px, #e66 3.32401px -31.6258px 0 0.2px, #e66 2.22291px -31.78904px 0 0.13333px, #e66 1.11446px -31.91388px 0 0.06667px, #e66 0.0px -32px 0 0px, #e66 -1.11911px -32.04713px 0 -0.06667px, #e66 -2.24151px -32.05506px 0 -0.13333px, #e66 -3.36582px -32.02361px 0 -0.2px, #e66 -4.49065px -31.95265px 0 -0.26667px, #e66 -5.61462px -31.84212px 0 -0.33333px, #e66 -6.73634px -31.69198px 0 -0.4px, #e66 -7.8544px -31.50227px 0 -0.46667px, #e66 -8.9674px -31.27305px 0 -0.53333px, #e66 -10.07395px -31.00444px 0 -0.6px, #e66 -11.17266px -30.69663px 0 -0.66667px, #e66 -12.26212px -30.34982px 0 -0.73333px, #e66 -13.34096px -29.96429px 0 -0.8px, #e66 -14.4078px -29.54036px 0 -0.86667px, #e66 -15.46126px -29.07841px 0 -0.93333px, #e66 -16.5px -28.57884px 0 -1px, #e66 -17.52266px -28.04212px 0 -1.06667px, #e66 -18.52792px -27.46878px 0 -1.13333px, #e66 -19.51447px -26.85936px 0 -1.2px, #e66 -20.48101px -26.21449px 0 -1.26667px, #e66 -21.42625px -25.53481px 0 -1.33333px, #e66 -22.34896px -24.82104px 0 -1.4px, #e66 -23.2479px -24.07391px 0 -1.46667px, #e66 -24.12186px -23.29421px 0 -1.53333px, #e66 -24.96967px -22.48279px 0 -1.6px, #e66 -25.79016px -21.64052px 0 -1.66667px, #e66 -26.58223px -20.76831px 0 -1.73333px, #e66 -27.34477px -19.86714px 0 -1.8px, #e66 -28.07674px -18.938px 0 -1.86667px, #e66 -28.7771px -17.98193px 0 -1.93333px, #e66 -29.44486px -17.0px 0 -2px, #e66 -30.07908px -15.99333px 0 -2.06667px, #e66 -30.67884px -14.96307px 0 -2.13333px, #e66 -31.24325px -13.91039px 0 -2.2px, #e66 -31.7715px -12.83652px 0 -2.26667px, #e66 -32.26278px -11.74269px 0 -2.33333px, #e66 -32.71634px -10.63018px 0 -2.4px, #e66 -33.13149px -9.5003px 0 -2.46667px, #e66 -33.50755px -8.35437px 0 -2.53333px, #e66 -33.84391px -7.19374px 0 -2.6px, #e66 -34.14px -6.0198px 0 -2.66667px, #e66 -34.39531px -4.83395px 0 -2.73333px, #e66 -34.60936px -3.63759px 0 -2.8px, #e66 -34.78173px -2.43218px 0 -2.86667px, #e66 -34.91205px -1.21916px 0 -2.93333px, #e66 -35px 0.0px 0 -3px, #e66 -35.04531px 1.22381px 0 -3.06667px, #e66 -35.04775px 2.45078px 0 -3.13333px, #e66 -35.00717px 3.6794px 0 -3.2px, #e66 -34.92345px 4.90817px 0 -3.26667px, #e66 -34.79654px 6.13557px 0 -3.33333px, #e66 -34.62643px 7.36007px 0 -3.4px, #e66 -34.41316px 8.58016px 0 -3.46667px, #e66 -34.15683px 9.79431px 0 -3.53333px, #e66 -33.85761px 11.001px 0 -3.6px, #e66 -33.5157px 12.19872px 0 -3.66667px, #e66 -33.13137px 13.38594px 0 -3.73333px, #e66 -32.70493px 14.56117px 0 -3.8px, #e66 -32.23675px 15.72291px 0 -3.86667px, #e66 -31.72725px 16.86968px 0 -3.93333px, #e66 -31.17691px 18px 0 -4px, #e66 -30.58627px 19.11242px 0 -4.06667px, #e66 -29.95589px 20.2055px 0 -4.13333px, #e66 -29.28642px 21.27783px 0 -4.2px, #e66 -28.57852px 22.32799px 0 -4.26667px, #e66 -27.83295px 23.35462px 0 -4.33333px, #e66 -27.05047px 24.35635px 0 -4.4px, #e66 -26.23192px 25.33188px 0 -4.46667px, #e66 -25.37819px 26.27988px 0 -4.53333px, #e66 -24.49018px 27.1991px 0 -4.6px, #e66 -23.56888px 28.0883px 0 -4.66667px, #e66 -22.6153px 28.94626px 0 -4.73333px, #e66 -21.6305px 29.77183px 0 -4.8px, #e66 -20.61558px 30.56385px 0 -4.86667px, #e66 -19.57168px 31.32124px 0 -4.93333px, #e66 -18.5px 32.04294px 0 -5px, #e66 -17.40175px 32.72792px 0 -5.06667px, #e66 -16.27818px 33.37522px 0 -5.13333px, #e66 -15.1306px 33.98389px 0 -5.2px, #e66 -13.96034px 34.55305px 0 -5.26667px, #e66 -12.76875px 35.08186px 0 -5.33333px, #e66 -11.55724px 35.56951px 0 -5.4px, #e66 -10.32721px 36.01527px 0 -5.46667px, #e66 -9.08014px 36.41843px 0 -5.53333px, #e66 -7.81748px 36.77835px 0 -5.6px, #e66 -6.54075px 37.09443px 0 -5.66667px, #e66 -5.25147px 37.36612px 0 -5.73333px, #e66 -3.95118px 37.59293px 0 -5.8px, #e66 -2.64145px 37.77443px 0 -5.86667px, #e66 -1.32385px 37.91023px 0 -5.93333px;
+  box-shadow: #e66 0px 26px 0 6px, #e66 0.90971px 26.05079px 0 5.93333px, #e66 1.82297px 26.06967px 0 5.86667px, #e66 2.73865px 26.05647px 0 5.8px, #e66 3.65561px 26.01104px 0 5.73333px, #e66 4.57274px 25.93327px 0 5.66667px, #e66 5.48887px 25.8231px 0 5.6px, #e66 6.40287px 25.68049px 0 5.53333px, #e66 7.31358px 25.50548px 0 5.46667px, #e66 8.21985px 25.2981px 0 5.4px, #e66 9.12054px 25.05847px 0 5.33333px, #e66 10.01448px 24.78672px 0 5.26667px, #e66 10.90054px 24.48302px 0 5.2px, #e66 11.77757px 24.1476px 0 5.13333px, #e66 12.64443px 23.78072px 0 5.06667px, #e66 13.5px 23.38269px 0 5px, #e66 14.34315px 22.95384px 0 4.93333px, #e66 15.17277px 22.49455px 0 4.86667px, #e66 15.98776px 22.00526px 0 4.8px, #e66 16.78704px 21.48643px 0 4.73333px, #e66 17.56953px 20.93855px 0 4.66667px, #e66 18.33418px 20.36217px 0 4.6px, #e66 19.07995px 19.75787px 0 4.53333px, #e66 19.80582px 19.12626px 0 4.46667px, #e66 20.5108px 18.468px 0 4.4px, #e66 21.1939px 17.78379px 0 4.33333px, #e66 21.85416px 17.07434px 0 4.26667px, #e66 22.49067px 16.34043px 0 4.2px, #e66 23.10251px 15.58284px 0 4.13333px, #e66 23.68881px 14.80241px 0 4.06667px, #e66 24.24871px 14.0px 0 4px, #e66 24.7814px 13.1765px 0 3.93333px, #e66 25.28607px 12.33284px 0 3.86667px, #e66 25.76198px 11.46997px 0 3.8px, #e66 26.2084px 10.58888px 0 3.73333px, #e66 26.62462px 9.69057px 0 3.66667px, #e66 27.01001px 8.77608px 0 3.6px, #e66 27.36392px 7.84648px 0 3.53333px, #e66 27.68577px 6.90284px 0 3.46667px, #e66 27.97502px 5.94627px 0 3.4px, #e66 28.23116px 4.97791px 0 3.33333px, #e66 28.4537px 3.99891px 0 3.26667px, #e66 28.64223px 3.01042px 0 3.2px, #e66 28.79635px 2.01364px 0 3.13333px, #e66 28.91571px 1.00976px 0 3.06667px, #e66 29px 0.0px 0 3px, #e66 29.04896px -1.01441px 0 2.93333px, #e66 29.06237px -2.03224px 0 2.86667px, #e66 29.04004px -3.05223px 0 2.8px, #e66 28.98185px -4.07313px 0 2.73333px, #e66 28.88769px -5.09368px 0 2.66667px, #e66 28.75754px -6.1126px 0 2.6px, #e66 28.59138px -7.12863px 0 2.53333px, #e66 28.38926px -8.14049px 0 2.46667px, #e66 28.15127px -9.1469px 0 2.4px, #e66 27.87755px -10.1466px 0 2.33333px, #e66 27.56827px -11.1383px 0 2.26667px, #e66 27.22365px -12.12075px 0 2.2px, #e66 26.84398px -13.09268px 0 2.13333px, #e66 26.42956px -14.05285px 0 2.06667px, #e66 25.98076px -15.0px 0 2px, #e66 25.49798px -15.93291px 0 1.93333px, #e66 24.98167px -16.85035px 0 1.86667px, #e66 24.43231px -17.75111px 0 1.8px, #e66 23.85046px -18.63402px 0 1.73333px, #e66 23.23668px -19.49789px 0 1.66667px, #e66 22.5916px -20.34157px 0 1.6px, #e66 21.91589px -21.16393px 0 1.53333px, #e66 21.21024px -21.96384px 0 1.46667px, #e66 20.4754px -22.74023px 0 1.4px, #e66 19.71215px -23.49203px 0 1.33333px, #e66 18.92133px -24.2182px 0 1.26667px, #e66 18.10379px -24.91772px 0 1.2px, #e66 17.26042px -25.58963px 0 1.13333px, #e66 16.39217px -26.23295px 0 1.06667px, #e66 15.5px -26.84679px 0 1px, #e66 14.58492px -27.43024px 0 0.93333px, #e66 13.64796px -27.98245px 0 0.86667px, #e66 12.69018px -28.50262px 0 0.8px, #e66 11.7127px -28.98995px 0 0.73333px, #e66 10.71663px -29.4437px 0 0.66667px, #e66 9.70313px -29.86317px 0 0.6px, #e66 8.67339px -30.2477px 0 0.53333px, #e66 7.6286px -30.59666px 0 0.46667px, #e66 6.57001px -30.90946px 0 0.4px, #e66 5.49886px -31.18558px 0 0.33333px, #e66 4.41643px -31.42451px 0 0.26667px, #e66 3.32401px -31.6258px 0 0.2px, #e66 2.22291px -31.78904px 0 0.13333px, #e66 1.11446px -31.91388px 0 0.06667px, #e66 0.0px -32px 0 0px, #e66 -1.11911px -32.04713px 0 -0.06667px, #e66 -2.24151px -32.05506px 0 -0.13333px, #e66 -3.36582px -32.02361px 0 -0.2px, #e66 -4.49065px -31.95265px 0 -0.26667px, #e66 -5.61462px -31.84212px 0 -0.33333px, #e66 -6.73634px -31.69198px 0 -0.4px, #e66 -7.8544px -31.50227px 0 -0.46667px, #e66 -8.9674px -31.27305px 0 -0.53333px, #e66 -10.07395px -31.00444px 0 -0.6px, #e66 -11.17266px -30.69663px 0 -0.66667px, #e66 -12.26212px -30.34982px 0 -0.73333px, #e66 -13.34096px -29.96429px 0 -0.8px, #e66 -14.4078px -29.54036px 0 -0.86667px, #e66 -15.46126px -29.07841px 0 -0.93333px, #e66 -16.5px -28.57884px 0 -1px, #e66 -17.52266px -28.04212px 0 -1.06667px, #e66 -18.52792px -27.46878px 0 -1.13333px, #e66 -19.51447px -26.85936px 0 -1.2px, #e66 -20.48101px -26.21449px 0 -1.26667px, #e66 -21.42625px -25.53481px 0 -1.33333px, #e66 -22.34896px -24.82104px 0 -1.4px, #e66 -23.2479px -24.07391px 0 -1.46667px, #e66 -24.12186px -23.29421px 0 -1.53333px, #e66 -24.96967px -22.48279px 0 -1.6px, #e66 -25.79016px -21.64052px 0 -1.66667px, #e66 -26.58223px -20.76831px 0 -1.73333px, #e66 -27.34477px -19.86714px 0 -1.8px, #e66 -28.07674px -18.938px 0 -1.86667px, #e66 -28.7771px -17.98193px 0 -1.93333px, #e66 -29.44486px -17.0px 0 -2px, #e66 -30.07908px -15.99333px 0 -2.06667px, #e66 -30.67884px -14.96307px 0 -2.13333px, #e66 -31.24325px -13.91039px 0 -2.2px, #e66 -31.7715px -12.83652px 0 -2.26667px, #e66 -32.26278px -11.74269px 0 -2.33333px, #e66 -32.71634px -10.63018px 0 -2.4px, #e66 -33.13149px -9.5003px 0 -2.46667px, #e66 -33.50755px -8.35437px 0 -2.53333px, #e66 -33.84391px -7.19374px 0 -2.6px, #e66 -34.14px -6.0198px 0 -2.66667px, #e66 -34.39531px -4.83395px 0 -2.73333px, #e66 -34.60936px -3.63759px 0 -2.8px, #e66 -34.78173px -2.43218px 0 -2.86667px, #e66 -34.91205px -1.21916px 0 -2.93333px, #e66 -35px 0.0px 0 -3px, #e66 -35.04531px 1.22381px 0 -3.06667px, #e66 -35.04775px 2.45078px 0 -3.13333px, #e66 -35.00717px 3.6794px 0 -3.2px, #e66 -34.92345px 4.90817px 0 -3.26667px, #e66 -34.79654px 6.13557px 0 -3.33333px, #e66 -34.62643px 7.36007px 0 -3.4px, #e66 -34.41316px 8.58016px 0 -3.46667px, #e66 -34.15683px 9.79431px 0 -3.53333px, #e66 -33.85761px 11.001px 0 -3.6px, #e66 -33.5157px 12.19872px 0 -3.66667px, #e66 -33.13137px 13.38594px 0 -3.73333px, #e66 -32.70493px 14.56117px 0 -3.8px, #e66 -32.23675px 15.72291px 0 -3.86667px, #e66 -31.72725px 16.86968px 0 -3.93333px, #e66 -31.17691px 18px 0 -4px, #e66 -30.58627px 19.11242px 0 -4.06667px, #e66 -29.95589px 20.2055px 0 -4.13333px, #e66 -29.28642px 21.27783px 0 -4.2px, #e66 -28.57852px 22.32799px 0 -4.26667px, #e66 -27.83295px 23.35462px 0 -4.33333px, #e66 -27.05047px 24.35635px 0 -4.4px, #e66 -26.23192px 25.33188px 0 -4.46667px, #e66 -25.37819px 26.27988px 0 -4.53333px, #e66 -24.49018px 27.1991px 0 -4.6px, #e66 -23.56888px 28.0883px 0 -4.66667px, #e66 -22.6153px 28.94626px 0 -4.73333px, #e66 -21.6305px 29.77183px 0 -4.8px, #e66 -20.61558px 30.56385px 0 -4.86667px, #e66 -19.57168px 31.32124px 0 -4.93333px, #e66 -18.5px 32.04294px 0 -5px, #e66 -17.40175px 32.72792px 0 -5.06667px, #e66 -16.27818px 33.37522px 0 -5.13333px, #e66 -15.1306px 33.98389px 0 -5.2px, #e66 -13.96034px 34.55305px 0 -5.26667px, #e66 -12.76875px 35.08186px 0 -5.33333px, #e66 -11.55724px 35.56951px 0 -5.4px, #e66 -10.32721px 36.01527px 0 -5.46667px, #e66 -9.08014px 36.41843px 0 -5.53333px, #e66 -7.81748px 36.77835px 0 -5.6px, #e66 -6.54075px 37.09443px 0 -5.66667px, #e66 -5.25147px 37.36612px 0 -5.73333px, #e66 -3.95118px 37.59293px 0 -5.8px, #e66 -2.64145px 37.77443px 0 -5.86667px, #e66 -1.32385px 37.91023px 0 -5.93333px;
+  -moz-animation: whirly-loader 1.25s infinite linear;
+  -webkit-animation: whirly-loader 1.25s infinite linear;
+  animation: whirly-loader 1.25s infinite linear;
+  -moz-transform-origin: 50% 50%;
+  -ms-transform-origin: 50% 50%;
+  -webkit-transform-origin: 50% 50%;
+  transform-origin: 50% 50%;
+}
diff --git a/public/bower_components/css-spinners/wobblebar.css b/public/bower_components/css-spinners/wobblebar.css
new file mode 100644
index 0000000..658f30f
--- /dev/null
+++ b/public/bower_components/css-spinners/wobblebar.css
@@ -0,0 +1,269 @@
+@-moz-keyframes wobblebar-loader {
+  0% {
+    left: 4px;
+  }
+  3% {
+    left: 104px;
+  }
+  6% {
+    left: 4px;
+  }
+  9% {
+    left: 104px;
+  }
+  12% {
+    left: 4px;
+  }
+  15% {
+    left: 104px;
+  }
+  18% {
+    left: 32px;
+  }
+  27% {
+    left: 32px;
+  }
+  30% {
+    left: 104px;
+  }
+  33% {
+    left: 4px;
+  }
+  36% {
+    left: 104px;
+  }
+  39% {
+    left: 4px;
+  }
+  42% {
+    left: 104px;
+  }
+  45% {
+    left: 4px;
+  }
+  48% {
+    left: 104px;
+  }
+  51% {
+    left: 52px;
+  }
+  63% {
+    left: 52px;
+  }
+  66% {
+    left: 4px;
+  }
+  69% {
+    left: 104px;
+  }
+  72% {
+    left: 4px;
+  }
+  75% {
+    left: 104px;
+  }
+  78% {
+    left: 4px;
+  }
+  81% {
+    left: 104px;
+  }
+  84% {
+    left: 72px;
+  }
+  94% {
+    left: 72px;
+  }
+  97% {
+    left: 104px;
+  }
+}
+@-webkit-keyframes wobblebar-loader {
+  0% {
+    left: 4px;
+  }
+  3% {
+    left: 104px;
+  }
+  6% {
+    left: 4px;
+  }
+  9% {
+    left: 104px;
+  }
+  12% {
+    left: 4px;
+  }
+  15% {
+    left: 104px;
+  }
+  18% {
+    left: 32px;
+  }
+  27% {
+    left: 32px;
+  }
+  30% {
+    left: 104px;
+  }
+  33% {
+    left: 4px;
+  }
+  36% {
+    left: 104px;
+  }
+  39% {
+    left: 4px;
+  }
+  42% {
+    left: 104px;
+  }
+  45% {
+    left: 4px;
+  }
+  48% {
+    left: 104px;
+  }
+  51% {
+    left: 52px;
+  }
+  63% {
+    left: 52px;
+  }
+  66% {
+    left: 4px;
+  }
+  69% {
+    left: 104px;
+  }
+  72% {
+    left: 4px;
+  }
+  75% {
+    left: 104px;
+  }
+  78% {
+    left: 4px;
+  }
+  81% {
+    left: 104px;
+  }
+  84% {
+    left: 72px;
+  }
+  94% {
+    left: 72px;
+  }
+  97% {
+    left: 104px;
+  }
+}
+@keyframes wobblebar-loader {
+  0% {
+    left: 4px;
+  }
+  3% {
+    left: 104px;
+  }
+  6% {
+    left: 4px;
+  }
+  9% {
+    left: 104px;
+  }
+  12% {
+    left: 4px;
+  }
+  15% {
+    left: 104px;
+  }
+  18% {
+    left: 32px;
+  }
+  27% {
+    left: 32px;
+  }
+  30% {
+    left: 104px;
+  }
+  33% {
+    left: 4px;
+  }
+  36% {
+    left: 104px;
+  }
+  39% {
+    left: 4px;
+  }
+  42% {
+    left: 104px;
+  }
+  45% {
+    left: 4px;
+  }
+  48% {
+    left: 104px;
+  }
+  51% {
+    left: 52px;
+  }
+  63% {
+    left: 52px;
+  }
+  66% {
+    left: 4px;
+  }
+  69% {
+    left: 104px;
+  }
+  72% {
+    left: 4px;
+  }
+  75% {
+    left: 104px;
+  }
+  78% {
+    left: 4px;
+  }
+  81% {
+    left: 104px;
+  }
+  84% {
+    left: 72px;
+  }
+  94% {
+    left: 72px;
+  }
+  97% {
+    left: 104px;
+  }
+}
+/* :not(:required) hides this rule from IE9 and below */
+.wobblebar-loader:not(:required) {
+  background: #a9d;
+  -moz-border-radius: 10.66667px;
+  -webkit-border-radius: 10.66667px;
+  border-radius: 10.66667px;
+  display: inline-block;
+  overflow: hidden;
+  text-indent: -9999px;
+  width: 128px;
+  height: 21.33333px;
+  position: relative;
+}
+.wobblebar-loader:not(:required)::after {
+  -moz-animation: wobblebar-loader 15000ms infinite ease;
+  -webkit-animation: wobblebar-loader 15000ms infinite ease;
+  animation: wobblebar-loader 15000ms infinite ease;
+  background: white;
+  display: block;
+  -moz-border-radius: 7.11111px;
+  -webkit-border-radius: 7.11111px;
+  border-radius: 7.11111px;
+  content: '';
+  position: absolute;
+  top: 3.55556px;
+  left: 4px;
+  width: 21.33333px;
+  height: 14.22222px;
+}
diff --git a/public/bower_components/es5-shim/es5-shim.js b/public/bower_components/es5-shim/es5-shim.js
new file mode 100644
index 0000000..d2c0ad0
--- /dev/null
+++ b/public/bower_components/es5-shim/es5-shim.js
@@ -0,0 +1,1613 @@
+/*!
+ * https://github.com/es-shims/es5-shim
+ * @license es5-shim Copyright 2009-2015 by contributors, MIT License
+ * see https://github.com/es-shims/es5-shim/blob/master/LICENSE
+ */
+
+// vim: ts=4 sts=4 sw=4 expandtab
+
+// Add semicolon to prevent IIFE from being passed as argument to concatenated code.
+;
+
+// UMD (Universal Module Definition)
+// see https://github.com/umdjs/umd/blob/master/returnExports.js
+(function (root, factory) {
+    'use strict';
+
+    /* global define, exports, module */
+    if (typeof define === 'function' && define.amd) {
+        // AMD. Register as an anonymous module.
+        define(factory);
+    } else if (typeof exports === 'object') {
+        // Node. Does not work with strict CommonJS, but
+        // only CommonJS-like enviroments that support module.exports,
+        // like Node.
+        module.exports = factory();
+    } else {
+        // Browser globals (root is window)
+        root.returnExports = factory();
+    }
+}(this, function () {
+
+/**
+ * Brings an environment as close to ECMAScript 5 compliance
+ * as is possible with the facilities of erstwhile engines.
+ *
+ * Annotated ES5: http://es5.github.com/ (specific links below)
+ * ES5 Spec: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
+ * Required reading: http://javascriptweblog.wordpress.com/2011/12/05/extending-javascript-natives/
+ */
+
+// Shortcut to an often accessed properties, in order to avoid multiple
+// dereference that costs universally. This also holds a reference to known-good
+// functions.
+var $Array = Array;
+var ArrayPrototype = $Array.prototype;
+var $Object = Object;
+var ObjectPrototype = $Object.prototype;
+var FunctionPrototype = Function.prototype;
+var $String = String;
+var StringPrototype = $String.prototype;
+var $Number = Number;
+var NumberPrototype = $Number.prototype;
+var array_slice = ArrayPrototype.slice;
+var array_splice = ArrayPrototype.splice;
+var array_push = ArrayPrototype.push;
+var array_unshift = ArrayPrototype.unshift;
+var array_concat = ArrayPrototype.concat;
+var call = FunctionPrototype.call;
+var max = Math.max;
+var min = Math.min;
+
+// Having a toString local variable name breaks in Opera so use to_string.
+var to_string = ObjectPrototype.toString;
+
+var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
+var isCallable; /* inlined from https://npmjs.com/is-callable */ var fnToStr = Function.prototype.toString, tryFunctionObject = function tryFunctionObject(value) { try { fnToStr.call(value); return true; } catch (e) { return false; } }, fnClass = '[object Function]', genClass = '[object GeneratorFunction]'; isCallable = function isCallable(value) { if (typeof value !== 'function') { return false; } if (hasToStringTag) { return tryFunctionObject(value); } var strClass = to_string.call(value); return strClass === fnClass || strClass === genClass; };
+var isRegex; /* inlined from https://npmjs.com/is-regex */ var regexExec = RegExp.prototype.exec, tryRegexExec = function tryRegexExec(value) { try { regexExec.call(value); return true; } catch (e) { return false; } }, regexClass = '[object RegExp]'; isRegex = function isRegex(value) { if (typeof value !== 'object') { return false; } return hasToStringTag ? tryRegexExec(value) : to_string.call(value) === regexClass; };
+var isString; /* inlined from https://npmjs.com/is-string */ var strValue = String.prototype.valueOf, tryStringObject = function tryStringObject(value) { try { strValue.call(value); return true; } catch (e) { return false; } }, stringClass = '[object String]'; isString = function isString(value) { if (typeof value === 'string') { return true; } if (typeof value !== 'object') { return false; } return hasToStringTag ? tryStringObject(value) : to_string.call(value) === stringClass; };
+
+/* inlined from http://npmjs.com/define-properties */
+var defineProperties = (function (has) {
+  var supportsDescriptors = $Object.defineProperty && (function () {
+      try {
+          var obj = {};
+          $Object.defineProperty(obj, 'x', { enumerable: false, value: obj });
+          for (var _ in obj) { return false; }
+          return obj.x === obj;
+      } catch (e) { /* this is ES3 */
+          return false;
+      }
+  }());
+
+  // Define configurable, writable and non-enumerable props
+  // if they don't exist.
+  var defineProperty;
+  if (supportsDescriptors) {
+      defineProperty = function (object, name, method, forceAssign) {
+          if (!forceAssign && (name in object)) { return; }
+          $Object.defineProperty(object, name, {
+              configurable: true,
+              enumerable: false,
+              writable: true,
+              value: method
+          });
+      };
+  } else {
+      defineProperty = function (object, name, method, forceAssign) {
+          if (!forceAssign && (name in object)) { return; }
+          object[name] = method;
+      };
+  }
+  return function defineProperties(object, map, forceAssign) {
+      for (var name in map) {
+          if (has.call(map, name)) {
+            defineProperty(object, name, map[name], forceAssign);
+          }
+      }
+  };
+}(ObjectPrototype.hasOwnProperty));
+
+//
+// Util
+// ======
+//
+
+/* replaceable with https://npmjs.com/package/es-abstract /helpers/isPrimitive */
+var isPrimitive = function isPrimitive(input) {
+    var type = typeof input;
+    return input === null || (type !== 'object' && type !== 'function');
+};
+
+var isActualNaN = $Number.isNaN || function (x) { return x !== x; };
+
+var ES = {
+    // ES5 9.4
+    // http://es5.github.com/#x9.4
+    // http://jsperf.com/to-integer
+    /* replaceable with https://npmjs.com/package/es-abstract ES5.ToInteger */
+    ToInteger: function ToInteger(num) {
+        var n = +num;
+        if (isActualNaN(n)) {
+            n = 0;
+        } else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) {
+            n = (n > 0 || -1) * Math.floor(Math.abs(n));
+        }
+        return n;
+    },
+
+    /* replaceable with https://npmjs.com/package/es-abstract ES5.ToPrimitive */
+    ToPrimitive: function ToPrimitive(input) {
+        var val, valueOf, toStr;
+        if (isPrimitive(input)) {
+            return input;
+        }
+        valueOf = input.valueOf;
+        if (isCallable(valueOf)) {
+            val = valueOf.call(input);
+            if (isPrimitive(val)) {
+                return val;
+            }
+        }
+        toStr = input.toString;
+        if (isCallable(toStr)) {
+            val = toStr.call(input);
+            if (isPrimitive(val)) {
+                return val;
+            }
+        }
+        throw new TypeError();
+    },
+
+    // ES5 9.9
+    // http://es5.github.com/#x9.9
+    /* replaceable with https://npmjs.com/package/es-abstract ES5.ToObject */
+    ToObject: function (o) {
+        /* jshint eqnull: true */
+        if (o == null) { // this matches both null and undefined
+            throw new TypeError("can't convert " + o + ' to object');
+        }
+        return $Object(o);
+    },
+
+    /* replaceable with https://npmjs.com/package/es-abstract ES5.ToUint32 */
+    ToUint32: function ToUint32(x) {
+        return x >>> 0;
+    }
+};
+
+//
+// Function
+// ========
+//
+
+// ES-5 15.3.4.5
+// http://es5.github.com/#x15.3.4.5
+
+var Empty = function Empty() {};
+
+defineProperties(FunctionPrototype, {
+    bind: function bind(that) { // .length is 1
+        // 1. Let Target be the this value.
+        var target = this;
+        // 2. If IsCallable(Target) is false, throw a TypeError exception.
+        if (!isCallable(target)) {
+            throw new TypeError('Function.prototype.bind called on incompatible ' + target);
+        }
+        // 3. Let A be a new (possibly empty) internal list of all of the
+        //   argument values provided after thisArg (arg1, arg2 etc), in order.
+        // XXX slicedArgs will stand in for "A" if used
+        var args = array_slice.call(arguments, 1); // for normal call
+        // 4. Let F be a new native ECMAScript object.
+        // 11. Set the [[Prototype]] internal property of F to the standard
+        //   built-in Function prototype object as specified in 15.3.3.1.
+        // 12. Set the [[Call]] internal property of F as described in
+        //   15.3.4.5.1.
+        // 13. Set the [[Construct]] internal property of F as described in
+        //   15.3.4.5.2.
+        // 14. Set the [[HasInstance]] internal property of F as described in
+        //   15.3.4.5.3.
+        var bound;
+        var binder = function () {
+
+            if (this instanceof bound) {
+                // 15.3.4.5.2 [[Construct]]
+                // When the [[Construct]] internal method of a function object,
+                // F that was created using the bind function is called with a
+                // list of arguments ExtraArgs, the following steps are taken:
+                // 1. Let target be the value of F's [[TargetFunction]]
+                //   internal property.
+                // 2. If target has no [[Construct]] internal method, a
+                //   TypeError exception is thrown.
+                // 3. Let boundArgs be the value of F's [[BoundArgs]] internal
+                //   property.
+                // 4. Let args be a new list containing the same values as the
+                //   list boundArgs in the same order followed by the same
+                //   values as the list ExtraArgs in the same order.
+                // 5. Return the result of calling the [[Construct]] internal
+                //   method of target providing args as the arguments.
+
+                var result = target.apply(
+                    this,
+                    array_concat.call(args, array_slice.call(arguments))
+                );
+                if ($Object(result) === result) {
+                    return result;
+                }
+                return this;
+
+            } else {
+                // 15.3.4.5.1 [[Call]]
+                // When the [[Call]] internal method of a function object, F,
+                // which was created using the bind function is called with a
+                // this value and a list of arguments ExtraArgs, the following
+                // steps are taken:
+                // 1. Let boundArgs be the value of F's [[BoundArgs]] internal
+                //   property.
+                // 2. Let boundThis be the value of F's [[BoundThis]] internal
+                //   property.
+                // 3. Let target be the value of F's [[TargetFunction]] internal
+                //   property.
+                // 4. Let args be a new list containing the same values as the
+                //   list boundArgs in the same order followed by the same
+                //   values as the list ExtraArgs in the same order.
+                // 5. Return the result of calling the [[Call]] internal method
+                //   of target providing boundThis as the this value and
+                //   providing args as the arguments.
+
+                // equiv: target.call(this, ...boundArgs, ...args)
+                return target.apply(
+                    that,
+                    array_concat.call(args, array_slice.call(arguments))
+                );
+
+            }
+
+        };
+
+        // 15. If the [[Class]] internal property of Target is "Function", then
+        //     a. Let L be the length property of Target minus the length of A.
+        //     b. Set the length own property of F to either 0 or L, whichever is
+        //       larger.
+        // 16. Else set the length own property of F to 0.
+
+        var boundLength = max(0, target.length - args.length);
+
+        // 17. Set the attributes of the length own property of F to the values
+        //   specified in 15.3.5.1.
+        var boundArgs = [];
+        for (var i = 0; i < boundLength; i++) {
+            array_push.call(boundArgs, '$' + i);
+        }
+
+        // XXX Build a dynamic function with desired amount of arguments is the only
+        // way to set the length property of a function.
+        // In environments where Content Security Policies enabled (Chrome extensions,
+        // for ex.) all use of eval or Function costructor throws an exception.
+        // However in all of these environments Function.prototype.bind exists
+        // and so this code will never be executed.
+        bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this, arguments); }')(binder);
+
+        if (target.prototype) {
+            Empty.prototype = target.prototype;
+            bound.prototype = new Empty();
+            // Clean up dangling references.
+            Empty.prototype = null;
+        }
+
+        // TODO
+        // 18. Set the [[Extensible]] internal property of F to true.
+
+        // TODO
+        // 19. Let thrower be the [[ThrowTypeError]] function Object (13.2.3).
+        // 20. Call the [[DefineOwnProperty]] internal method of F with
+        //   arguments "caller", PropertyDescriptor {[[Get]]: thrower, [[Set]]:
+        //   thrower, [[Enumerable]]: false, [[Configurable]]: false}, and
+        //   false.
+        // 21. Call the [[DefineOwnProperty]] internal method of F with
+        //   arguments "arguments", PropertyDescriptor {[[Get]]: thrower,
+        //   [[Set]]: thrower, [[Enumerable]]: false, [[Configurable]]: false},
+        //   and false.
+
+        // TODO
+        // NOTE Function objects created using Function.prototype.bind do not
+        // have a prototype property or the [[Code]], [[FormalParameters]], and
+        // [[Scope]] internal properties.
+        // XXX can't delete prototype in pure-js.
+
+        // 22. Return F.
+        return bound;
+    }
+});
+
+// _Please note: Shortcuts are defined after `Function.prototype.bind` as we
+// us it in defining shortcuts.
+var owns = call.bind(ObjectPrototype.hasOwnProperty);
+var toStr = call.bind(ObjectPrototype.toString);
+var strSlice = call.bind(StringPrototype.slice);
+var strSplit = call.bind(StringPrototype.split);
+
+//
+// Array
+// =====
+//
+
+var isArray = $Array.isArray || function isArray(obj) {
+    return toStr(obj) === '[object Array]';
+};
+
+// ES5 15.4.4.12
+// http://es5.github.com/#x15.4.4.13
+// Return len+argCount.
+// [bugfix, ielt8]
+// IE < 8 bug: [].unshift(0) === undefined but should be "1"
+var hasUnshiftReturnValueBug = [].unshift(0) !== 1;
+defineProperties(ArrayPrototype, {
+    unshift: function () {
+        array_unshift.apply(this, arguments);
+        return this.length;
+    }
+}, hasUnshiftReturnValueBug);
+
+// ES5 15.4.3.2
+// http://es5.github.com/#x15.4.3.2
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray
+defineProperties($Array, { isArray: isArray });
+
+// The IsCallable() check in the Array functions
+// has been replaced with a strict check on the
+// internal class of the object to trap cases where
+// the provided function was actually a regular
+// expression literal, which in V8 and
+// JavaScriptCore is a typeof "function".  Only in
+// V8 are regular expression literals permitted as
+// reduce parameters, so it is desirable in the
+// general case for the shim to match the more
+// strict and common behavior of rejecting regular
+// expressions.
+
+// ES5 15.4.4.18
+// http://es5.github.com/#x15.4.4.18
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/forEach
+
+// Check failure of by-index access of string characters (IE < 9)
+// and failure of `0 in boxedString` (Rhino)
+var boxedString = $Object('a');
+var splitString = boxedString[0] !== 'a' || !(0 in boxedString);
+
+var properlyBoxesContext = function properlyBoxed(method) {
+    // Check node 0.6.21 bug where third parameter is not boxed
+    var properlyBoxesNonStrict = true;
+    var properlyBoxesStrict = true;
+    if (method) {
+        method.call('foo', function (_, __, context) {
+            if (typeof context !== 'object') { properlyBoxesNonStrict = false; }
+        });
+
+        method.call([1], function () {
+            'use strict';
+
+            properlyBoxesStrict = typeof this === 'string';
+        }, 'x');
+    }
+    return !!method && properlyBoxesNonStrict && properlyBoxesStrict;
+};
+
+defineProperties(ArrayPrototype, {
+    forEach: function forEach(callbackfn /*, thisArg*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? strSplit(this, '') : object;
+        var i = -1;
+        var length = ES.ToUint32(self.length);
+        var T;
+        if (arguments.length > 1) {
+          T = arguments[1];
+        }
+
+        // If no callback function or if callback is not a callable function
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.forEach callback must be a function');
+        }
+
+        while (++i < length) {
+            if (i in self) {
+                // Invoke the callback function with call, passing arguments:
+                // context, property value, property key, thisArg object
+                if (typeof T === 'undefined') {
+                    callbackfn(self[i], i, object);
+                } else {
+                    callbackfn.call(T, self[i], i, object);
+                }
+            }
+        }
+    }
+}, !properlyBoxesContext(ArrayPrototype.forEach));
+
+// ES5 15.4.4.19
+// http://es5.github.com/#x15.4.4.19
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/map
+defineProperties(ArrayPrototype, {
+    map: function map(callbackfn/*, thisArg*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? strSplit(this, '') : object;
+        var length = ES.ToUint32(self.length);
+        var result = $Array(length);
+        var T;
+        if (arguments.length > 1) {
+            T = arguments[1];
+        }
+
+        // If no callback function or if callback is not a callable function
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.map callback must be a function');
+        }
+
+        for (var i = 0; i < length; i++) {
+            if (i in self) {
+                if (typeof T === 'undefined') {
+                    result[i] = callbackfn(self[i], i, object);
+                } else {
+                    result[i] = callbackfn.call(T, self[i], i, object);
+                }
+            }
+        }
+        return result;
+    }
+}, !properlyBoxesContext(ArrayPrototype.map));
+
+// ES5 15.4.4.20
+// http://es5.github.com/#x15.4.4.20
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter
+defineProperties(ArrayPrototype, {
+    filter: function filter(callbackfn /*, thisArg*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? strSplit(this, '') : object;
+        var length = ES.ToUint32(self.length);
+        var result = [];
+        var value;
+        var T;
+        if (arguments.length > 1) {
+            T = arguments[1];
+        }
+
+        // If no callback function or if callback is not a callable function
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.filter callback must be a function');
+        }
+
+        for (var i = 0; i < length; i++) {
+            if (i in self) {
+                value = self[i];
+                if (typeof T === 'undefined' ? callbackfn(value, i, object) : callbackfn.call(T, value, i, object)) {
+                    array_push.call(result, value);
+                }
+            }
+        }
+        return result;
+    }
+}, !properlyBoxesContext(ArrayPrototype.filter));
+
+// ES5 15.4.4.16
+// http://es5.github.com/#x15.4.4.16
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every
+defineProperties(ArrayPrototype, {
+    every: function every(callbackfn /*, thisArg*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? strSplit(this, '') : object;
+        var length = ES.ToUint32(self.length);
+        var T;
+        if (arguments.length > 1) {
+            T = arguments[1];
+        }
+
+        // If no callback function or if callback is not a callable function
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.every callback must be a function');
+        }
+
+        for (var i = 0; i < length; i++) {
+            if (i in self && !(typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {
+                return false;
+            }
+        }
+        return true;
+    }
+}, !properlyBoxesContext(ArrayPrototype.every));
+
+// ES5 15.4.4.17
+// http://es5.github.com/#x15.4.4.17
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/some
+defineProperties(ArrayPrototype, {
+    some: function some(callbackfn/*, thisArg */) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? strSplit(this, '') : object;
+        var length = ES.ToUint32(self.length);
+        var T;
+        if (arguments.length > 1) {
+            T = arguments[1];
+        }
+
+        // If no callback function or if callback is not a callable function
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.some callback must be a function');
+        }
+
+        for (var i = 0; i < length; i++) {
+            if (i in self && (typeof T === 'undefined' ? callbackfn(self[i], i, object) : callbackfn.call(T, self[i], i, object))) {
+                return true;
+            }
+        }
+        return false;
+    }
+}, !properlyBoxesContext(ArrayPrototype.some));
+
+// ES5 15.4.4.21
+// http://es5.github.com/#x15.4.4.21
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce
+var reduceCoercesToObject = false;
+if (ArrayPrototype.reduce) {
+    reduceCoercesToObject = typeof ArrayPrototype.reduce.call('es5', function (_, __, ___, list) { return list; }) === 'object';
+}
+defineProperties(ArrayPrototype, {
+    reduce: function reduce(callbackfn /*, initialValue*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? strSplit(this, '') : object;
+        var length = ES.ToUint32(self.length);
+
+        // If no callback function or if callback is not a callable function
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.reduce callback must be a function');
+        }
+
+        // no value to return if no initial value and an empty array
+        if (length === 0 && arguments.length === 1) {
+            throw new TypeError('reduce of empty array with no initial value');
+        }
+
+        var i = 0;
+        var result;
+        if (arguments.length >= 2) {
+            result = arguments[1];
+        } else {
+            do {
+                if (i in self) {
+                    result = self[i++];
+                    break;
+                }
+
+                // if array contains no values, no initial value to return
+                if (++i >= length) {
+                    throw new TypeError('reduce of empty array with no initial value');
+                }
+            } while (true);
+        }
+
+        for (; i < length; i++) {
+            if (i in self) {
+                result = callbackfn(result, self[i], i, object);
+            }
+        }
+
+        return result;
+    }
+}, !reduceCoercesToObject);
+
+// ES5 15.4.4.22
+// http://es5.github.com/#x15.4.4.22
+// https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduceRight
+var reduceRightCoercesToObject = false;
+if (ArrayPrototype.reduceRight) {
+    reduceRightCoercesToObject = typeof ArrayPrototype.reduceRight.call('es5', function (_, __, ___, list) { return list; }) === 'object';
+}
+defineProperties(ArrayPrototype, {
+    reduceRight: function reduceRight(callbackfn/*, initial*/) {
+        var object = ES.ToObject(this);
+        var self = splitString && isString(this) ? strSplit(this, '') : object;
+        var length = ES.ToUint32(self.length);
+
+        // If no callback function or if callback is not a callable function
+        if (!isCallable(callbackfn)) {
+            throw new TypeError('Array.prototype.reduceRight callback must be a function');
+        }
+
+        // no value to return if no initial value, empty array
+        if (length === 0 && arguments.length === 1) {
+            throw new TypeError('reduceRight of empty array with no initial value');
+        }
+
+        var result;
+        var i = length - 1;
+        if (arguments.length >= 2) {
+            result = arguments[1];
+        } else {
+            do {
+                if (i in self) {
+                    result = self[i--];
+                    break;
+                }
+
+                // if array contains no values, no initial value to return
+                if (--i < 0) {
+                    throw new TypeError('reduceRight of empty array with no initial value');
+                }
+            } while (true);
+        }
+
+        if (i < 0) {
+            return result;
+        }
+
+        do {
+            if (i in self) {
+                result = callbackfn(result, self[i], i, object);
+            }
+        } while (i--);
+
+        return result;
+    }
+}, !reduceRightCoercesToObject);
+
+// ES5 15.4.4.14
+// http://es5.github.com/#x15.4.4.14
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf
+var hasFirefox2IndexOfBug = ArrayPrototype.indexOf && [0, 1].indexOf(1, 2) !== -1;
+defineProperties(ArrayPrototype, {
+    indexOf: function indexOf(searchElement /*, fromIndex */) {
+        var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);
+        var length = ES.ToUint32(self.length);
+
+        if (length === 0) {
+            return -1;
+        }
+
+        var i = 0;
+        if (arguments.length > 1) {
+            i = ES.ToInteger(arguments[1]);
+        }
+
+        // handle negative indices
+        i = i >= 0 ? i : max(0, length + i);
+        for (; i < length; i++) {
+            if (i in self && self[i] === searchElement) {
+                return i;
+            }
+        }
+        return -1;
+    }
+}, hasFirefox2IndexOfBug);
+
+// ES5 15.4.4.15
+// http://es5.github.com/#x15.4.4.15
+// https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/lastIndexOf
+var hasFirefox2LastIndexOfBug = ArrayPrototype.lastIndexOf && [0, 1].lastIndexOf(0, -3) !== -1;
+defineProperties(ArrayPrototype, {
+    lastIndexOf: function lastIndexOf(searchElement /*, fromIndex */) {
+        var self = splitString && isString(this) ? strSplit(this, '') : ES.ToObject(this);
+        var length = ES.ToUint32(self.length);
+
+        if (length === 0) {
+            return -1;
+        }
+        var i = length - 1;
+        if (arguments.length > 1) {
+            i = min(i, ES.ToInteger(arguments[1]));
+        }
+        // handle negative indices
+        i = i >= 0 ? i : length - Math.abs(i);
+        for (; i >= 0; i--) {
+            if (i in self && searchElement === self[i]) {
+                return i;
+            }
+        }
+        return -1;
+    }
+}, hasFirefox2LastIndexOfBug);
+
+// ES5 15.4.4.12
+// http://es5.github.com/#x15.4.4.12
+var spliceNoopReturnsEmptyArray = (function () {
+    var a = [1, 2];
+    var result = a.splice();
+    return a.length === 2 && isArray(result) && result.length === 0;
+}());
+defineProperties(ArrayPrototype, {
+    // Safari 5.0 bug where .splice() returns undefined
+    splice: function splice(start, deleteCount) {
+        if (arguments.length === 0) {
+            return [];
+        } else {
+            return array_splice.apply(this, arguments);
+        }
+    }
+}, !spliceNoopReturnsEmptyArray);
+
+var spliceWorksWithEmptyObject = (function () {
+    var obj = {};
+    ArrayPrototype.splice.call(obj, 0, 0, 1);
+    return obj.length === 1;
+}());
+defineProperties(ArrayPrototype, {
+    splice: function splice(start, deleteCount) {
+        if (arguments.length === 0) { return []; }
+        var args = arguments;
+        this.length = max(ES.ToInteger(this.length), 0);
+        if (arguments.length > 0 && typeof deleteCount !== 'number') {
+            args = array_slice.call(arguments);
+            if (args.length < 2) {
+                array_push.call(args, this.length - start);
+            } else {
+                args[1] = ES.ToInteger(deleteCount);
+            }
+        }
+        return array_splice.apply(this, args);
+    }
+}, !spliceWorksWithEmptyObject);
+var spliceWorksWithLargeSparseArrays = (function () {
+    // Per https://github.com/es-shims/es5-shim/issues/295
+    // Safari 7/8 breaks with sparse arrays of size 1e5 or greater
+    var arr = new $Array(1e5);
+    // note: the index MUST be 8 or larger or the test will false pass
+    arr[8] = 'x';
+    arr.splice(1, 1);
+    // note: this test must be defined *after* the indexOf shim
+    // per https://github.com/es-shims/es5-shim/issues/313
+    return arr.indexOf('x') === 7;
+}());
+var spliceWorksWithSmallSparseArrays = (function () {
+    // Per https://github.com/es-shims/es5-shim/issues/295
+    // Opera 12.15 breaks on this, no idea why.
+    var n = 256;
+    var arr = [];
+    arr[n] = 'a';
+    arr.splice(n + 1, 0, 'b');
+    return arr[n] === 'a';
+}());
+defineProperties(ArrayPrototype, {
+    splice: function splice(start, deleteCount) {
+        var O = ES.ToObject(this);
+        var A = [];
+        var len = ES.ToUint32(O.length);
+        var relativeStart = ES.ToInteger(start);
+        var actualStart = relativeStart < 0 ? max((len + relativeStart), 0) : min(relativeStart, len);
+        var actualDeleteCount = min(max(ES.ToInteger(deleteCount), 0), len - actualStart);
+
+        var k = 0;
+        var from;
+        while (k < actualDeleteCount) {
+            from = $String(actualStart + k);
+            if (owns(O, from)) {
+                A[k] = O[from];
+            }
+            k += 1;
+        }
+
+        var items = array_slice.call(arguments, 2);
+        var itemCount = items.length;
+        var to;
+        if (itemCount < actualDeleteCount) {
+            k = actualStart;
+            while (k < (len - actualDeleteCount)) {
+                from = $String(k + actualDeleteCount);
+                to = $String(k + itemCount);
+                if (owns(O, from)) {
+                    O[to] = O[from];
+                } else {
+                    delete O[to];
+                }
+                k += 1;
+            }
+            k = len;
+            while (k > (len - actualDeleteCount + itemCount)) {
+                delete O[k - 1];
+                k -= 1;
+            }
+        } else if (itemCount > actualDeleteCount) {
+            k = len - actualDeleteCount;
+            while (k > actualStart) {
+                from = $String(k + actualDeleteCount - 1);
+                to = $String(k + itemCount - 1);
+                if (owns(O, from)) {
+                    O[to] = O[from];
+                } else {
+                    delete O[to];
+                }
+                k -= 1;
+            }
+        }
+        k = actualStart;
+        for (var i = 0; i < items.length; ++i) {
+            O[k] = items[i];
+            k += 1;
+        }
+        O.length = len - actualDeleteCount + itemCount;
+
+        return A;
+    }
+}, !spliceWorksWithLargeSparseArrays || !spliceWorksWithSmallSparseArrays);
+
+//
+// Object
+// ======
+//
+
+// ES5 15.2.3.14
+// http://es5.github.com/#x15.2.3.14
+
+// http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
+var hasDontEnumBug = !({ 'toString': null }).propertyIsEnumerable('toString');
+var hasProtoEnumBug = function () {}.propertyIsEnumerable('prototype');
+var hasStringEnumBug = !owns('x', '0');
+var equalsConstructorPrototype = function (o) {
+    var ctor = o.constructor;
+    return ctor && ctor.prototype === o;
+};
+var blacklistedKeys = {
+    $window: true,
+    $console: true,
+    $parent: true,
+    $self: true,
+    $frame: true,
+    $frames: true,
+    $frameElement: true,
+    $webkitIndexedDB: true,
+    $webkitStorageInfo: true
+};
+var hasAutomationEqualityBug = (function () {
+    /* globals window */
+    if (typeof window === 'undefined') { return false; }
+    for (var k in window) {
+        try {
+            if (!blacklistedKeys['$' + k] && owns(window, k) && window[k] !== null && typeof window[k] === 'object') {
+                equalsConstructorPrototype(window[k]);
+            }
+        } catch (e) {
+            return true;
+        }
+    }
+    return false;
+}());
+var equalsConstructorPrototypeIfNotBuggy = function (object) {
+    if (typeof window === 'undefined' || !hasAutomationEqualityBug) { return equalsConstructorPrototype(object); }
+    try {
+        return equalsConstructorPrototype(object);
+    } catch (e) {
+        return false;
+    }
+};
+var dontEnums = [
+    'toString',
+    'toLocaleString',
+    'valueOf',
+    'hasOwnProperty',
+    'isPrototypeOf',
+    'propertyIsEnumerable',
+    'constructor'
+];
+var dontEnumsLength = dontEnums.length;
+
+// taken directly from https://github.com/ljharb/is-arguments/blob/master/index.js
+// can be replaced with require('is-arguments') if we ever use a build process instead
+var isStandardArguments = function isArguments(value) {
+    return toStr(value) === '[object Arguments]';
+};
+var isLegacyArguments = function isArguments(value) {
+    return value !== null &&
+        typeof value === 'object' &&
+        typeof value.length === 'number' &&
+        value.length >= 0 &&
+        !isArray(value) &&
+        isCallable(value.callee);
+};
+var isArguments = isStandardArguments(arguments) ? isStandardArguments : isLegacyArguments;
+
+defineProperties($Object, {
+    keys: function keys(object) {
+        var isFn = isCallable(object);
+        var isArgs = isArguments(object);
+        var isObject = object !== null && typeof object === 'object';
+        var isStr = isObject && isString(object);
+
+        if (!isObject && !isFn && !isArgs) {
+            throw new TypeError('Object.keys called on a non-object');
+        }
+
+        var theKeys = [];
+        var skipProto = hasProtoEnumBug && isFn;
+        if ((isStr && hasStringEnumBug) || isArgs) {
+            for (var i = 0; i < object.length; ++i) {
+                array_push.call(theKeys, $String(i));
+            }
+        }
+
+        if (!isArgs) {
+            for (var name in object) {
+                if (!(skipProto && name === 'prototype') && owns(object, name)) {
+                    array_push.call(theKeys, $String(name));
+                }
+            }
+        }
+
+        if (hasDontEnumBug) {
+            var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
+            for (var j = 0; j < dontEnumsLength; j++) {
+                var dontEnum = dontEnums[j];
+                if (!(skipConstructor && dontEnum === 'constructor') && owns(object, dontEnum)) {
+                    array_push.call(theKeys, dontEnum);
+                }
+            }
+        }
+        return theKeys;
+    }
+});
+
+var keysWorksWithArguments = $Object.keys && (function () {
+    // Safari 5.0 bug
+    return $Object.keys(arguments).length === 2;
+}(1, 2));
+var keysHasArgumentsLengthBug = $Object.keys && (function () {
+    var argKeys = $Object.keys(arguments);
+    return arguments.length !== 1 || argKeys.length !== 1 || argKeys[0] !== 1;
+}(1));
+var originalKeys = $Object.keys;
+defineProperties($Object, {
+    keys: function keys(object) {
+        if (isArguments(object)) {
+            return originalKeys(array_slice.call(object));
+        } else {
+            return originalKeys(object);
+        }
+    }
+}, !keysWorksWithArguments || keysHasArgumentsLengthBug);
+
+//
+// Date
+// ====
+//
+
+// ES5 15.9.5.43
+// http://es5.github.com/#x15.9.5.43
+// This function returns a String value represent the instance in time
+// represented by this Date object. The format of the String is the Date Time
+// string format defined in 15.9.1.15. All fields are present in the String.
+// The time zone is always UTC, denoted by the suffix Z. If the time value of
+// this object is not a finite Number a RangeError exception is thrown.
+var negativeDate = -62198755200000;
+var negativeYearString = '-000001';
+var hasNegativeDateBug = Date.prototype.toISOString && new Date(negativeDate).toISOString().indexOf(negativeYearString) === -1;
+var hasSafari51DateBug = Date.prototype.toISOString && new Date(-1).toISOString() !== '1969-12-31T23:59:59.999Z';
+
+defineProperties(Date.prototype, {
+    toISOString: function toISOString() {
+        var result, length, value, year, month;
+        if (!isFinite(this)) {
+            throw new RangeError('Date.prototype.toISOString called on non-finite value.');
+        }
+
+        year = this.getUTCFullYear();
+
+        month = this.getUTCMonth();
+        // see https://github.com/es-shims/es5-shim/issues/111
+        year += Math.floor(month / 12);
+        month = (month % 12 + 12) % 12;
+
+        // the date time string format is specified in 15.9.1.15.
+        result = [month + 1, this.getUTCDate(), this.getUTCHours(), this.getUTCMinutes(), this.getUTCSeconds()];
+        year = (
+            (year < 0 ? '-' : (year > 9999 ? '+' : '')) +
+            strSlice('00000' + Math.abs(year), (0 <= year && year <= 9999) ? -4 : -6)
+        );
+
+        length = result.length;
+        while (length--) {
+            value = result[length];
+            // pad months, days, hours, minutes, and seconds to have two
+            // digits.
+            if (value < 10) {
+                result[length] = '0' + value;
+            }
+        }
+        // pad milliseconds to have three digits.
+        return (
+            year + '-' + array_slice.call(result, 0, 2).join('-') +
+            'T' + array_slice.call(result, 2).join(':') + '.' +
+            strSlice('000' + this.getUTCMilliseconds(), -3) + 'Z'
+        );
+    }
+}, hasNegativeDateBug || hasSafari51DateBug);
+
+// ES5 15.9.5.44
+// http://es5.github.com/#x15.9.5.44
+// This function provides a String representation of a Date object for use by
+// JSON.stringify (15.12.3).
+var dateToJSONIsSupported = (function () {
+    try {
+        return Date.prototype.toJSON &&
+            new Date(NaN).toJSON() === null &&
+            new Date(negativeDate).toJSON().indexOf(negativeYearString) !== -1 &&
+            Date.prototype.toJSON.call({ // generic
+                toISOString: function () { return true; }
+            });
+    } catch (e) {
+        return false;
+    }
+}());
+if (!dateToJSONIsSupported) {
+    Date.prototype.toJSON = function toJSON(key) {
+        // When the toJSON method is called with argument key, the following
+        // steps are taken:
+
+        // 1.  Let O be the result of calling ToObject, giving it the this
+        // value as its argument.
+        // 2. Let tv be ES.ToPrimitive(O, hint Number).
+        var O = $Object(this);
+        var tv = ES.ToPrimitive(O);
+        // 3. If tv is a Number and is not finite, return null.
+        if (typeof tv === 'number' && !isFinite(tv)) {
+            return null;
+        }
+        // 4. Let toISO be the result of calling the [[Get]] internal method of
+        // O with argument "toISOString".
+        var toISO = O.toISOString;
+        // 5. If IsCallable(toISO) is false, throw a TypeError exception.
+        if (!isCallable(toISO)) {
+            throw new TypeError('toISOString property is not callable');
+        }
+        // 6. Return the result of calling the [[Call]] internal method of
+        //  toISO with O as the this value and an empty argument list.
+        return toISO.call(O);
+
+        // NOTE 1 The argument is ignored.
+
+        // NOTE 2 The toJSON function is intentionally generic; it does not
+        // require that its this value be a Date object. Therefore, it can be
+        // transferred to other kinds of objects for use as a method. However,
+        // it does require that any such object have a toISOString method. An
+        // object is free to use the argument key to filter its
+        // stringification.
+    };
+}
+
+// ES5 15.9.4.2
+// http://es5.github.com/#x15.9.4.2
+// based on work shared by Daniel Friesen (dantman)
+// http://gist.github.com/303249
+var supportsExtendedYears = Date.parse('+033658-09-27T01:46:40.000Z') === 1e15;
+var acceptsInvalidDates = !isNaN(Date.parse('2012-04-04T24:00:00.500Z')) || !isNaN(Date.parse('2012-11-31T23:59:59.000Z')) || !isNaN(Date.parse('2012-12-31T23:59:60.000Z'));
+var doesNotParseY2KNewYear = isNaN(Date.parse('2000-01-01T00:00:00.000Z'));
+if (doesNotParseY2KNewYear || acceptsInvalidDates || !supportsExtendedYears) {
+    // XXX global assignment won't work in embeddings that use
+    // an alternate object for the context.
+    /* global Date: true */
+    /* eslint-disable no-undef */
+    var maxSafeUnsigned32Bit = Math.pow(2, 31) - 1;
+    var secondsWithinMaxSafeUnsigned32Bit = Math.floor(maxSafeUnsigned32Bit / 1e3);
+    var hasSafariSignedIntBug = isActualNaN(new Date(1970, 0, 1, 0, 0, 0, maxSafeUnsigned32Bit + 1).getTime());
+    Date = (function (NativeDate) {
+    /* eslint-enable no-undef */
+        // Date.length === 7
+        var DateShim = function Date(Y, M, D, h, m, s, ms) {
+            var length = arguments.length;
+            var date;
+            if (this instanceof NativeDate) {
+                var seconds = s;
+                var millis = ms;
+                if (hasSafariSignedIntBug && length >= 7 && ms > maxSafeUnsigned32Bit) {
+                    // work around a Safari 8/9 bug where it treats the seconds as signed
+                    var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;
+                    var sToShift = Math.floor(msToShift / 1e3);
+                    seconds += sToShift;
+                    millis -= sToShift * 1e3;
+                }
+                date = length === 1 && $String(Y) === Y ? // isString(Y)
+                    // We explicitly pass it through parse:
+                    new NativeDate(DateShim.parse(Y)) :
+                    // We have to manually make calls depending on argument
+                    // length here
+                    length >= 7 ? new NativeDate(Y, M, D, h, m, seconds, millis) :
+                    length >= 6 ? new NativeDate(Y, M, D, h, m, seconds) :
+                    length >= 5 ? new NativeDate(Y, M, D, h, m) :
+                    length >= 4 ? new NativeDate(Y, M, D, h) :
+                    length >= 3 ? new NativeDate(Y, M, D) :
+                    length >= 2 ? new NativeDate(Y, M) :
+                    length >= 1 ? new NativeDate(Y) :
+                                  new NativeDate();
+            } else {
+                date = NativeDate.apply(this, arguments);
+            }
+            if (!isPrimitive(date)) {
+              // Prevent mixups with unfixed Date object
+              defineProperties(date, { constructor: DateShim }, true);
+            }
+            return date;
+        };
+
+        // 15.9.1.15 Date Time String Format.
+        var isoDateExpression = new RegExp('^' +
+            '(\\d{4}|[+-]\\d{6})' + // four-digit year capture or sign +
+                                      // 6-digit extended year
+            '(?:-(\\d{2})' + // optional month capture
+            '(?:-(\\d{2})' + // optional day capture
+            '(?:' + // capture hours:minutes:seconds.milliseconds
+                'T(\\d{2})' + // hours capture
+                ':(\\d{2})' + // minutes capture
+                '(?:' + // optional :seconds.milliseconds
+                    ':(\\d{2})' + // seconds capture
+                    '(?:(\\.\\d{1,}))?' + // milliseconds capture
+                ')?' +
+            '(' + // capture UTC offset component
+                'Z|' + // UTC capture
+                '(?:' + // offset specifier +/-hours:minutes
+                    '([-+])' + // sign capture
+                    '(\\d{2})' + // hours offset capture
+                    ':(\\d{2})' + // minutes offset capture
+                ')' +
+            ')?)?)?)?' +
+        '$');
+
+        var months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];
+
+        var dayFromMonth = function dayFromMonth(year, month) {
+            var t = month > 1 ? 1 : 0;
+            return (
+                months[month] +
+                Math.floor((year - 1969 + t) / 4) -
+                Math.floor((year - 1901 + t) / 100) +
+                Math.floor((year - 1601 + t) / 400) +
+                365 * (year - 1970)
+            );
+        };
+
+        var toUTC = function toUTC(t) {
+            var s = 0;
+            var ms = t;
+            if (hasSafariSignedIntBug && ms > maxSafeUnsigned32Bit) {
+                // work around a Safari 8/9 bug where it treats the seconds as signed
+                var msToShift = Math.floor(ms / maxSafeUnsigned32Bit) * maxSafeUnsigned32Bit;
+                var sToShift = Math.floor(msToShift / 1e3);
+                s += sToShift;
+                ms -= sToShift * 1e3;
+            }
+            return $Number(new NativeDate(1970, 0, 1, 0, 0, s, ms));
+        };
+
+        // Copy any custom methods a 3rd party library may have added
+        for (var key in NativeDate) {
+            if (owns(NativeDate, key)) {
+                DateShim[key] = NativeDate[key];
+            }
+        }
+
+        // Copy "native" methods explicitly; they may be non-enumerable
+        defineProperties(DateShim, {
+            now: NativeDate.now,
+            UTC: NativeDate.UTC
+        }, true);
+        DateShim.prototype = NativeDate.prototype;
+        defineProperties(DateShim.prototype, {
+            constructor: DateShim
+        }, true);
+
+        // Upgrade Date.parse to handle simplified ISO 8601 strings
+        var parseShim = function parse(string) {
+            var match = isoDateExpression.exec(string);
+            if (match) {
+                // parse months, days, hours, minutes, seconds, and milliseconds
+                // provide default values if necessary
+                // parse the UTC offset component
+                var year = $Number(match[1]),
+                    month = $Number(match[2] || 1) - 1,
+                    day = $Number(match[3] || 1) - 1,
+                    hour = $Number(match[4] || 0),
+                    minute = $Number(match[5] || 0),
+                    second = $Number(match[6] || 0),
+                    millisecond = Math.floor($Number(match[7] || 0) * 1000),
+                    // When time zone is missed, local offset should be used
+                    // (ES 5.1 bug)
+                    // see https://bugs.ecmascript.org/show_bug.cgi?id=112
+                    isLocalTime = Boolean(match[4] && !match[8]),
+                    signOffset = match[9] === '-' ? 1 : -1,
+                    hourOffset = $Number(match[10] || 0),
+                    minuteOffset = $Number(match[11] || 0),
+                    result;
+                var hasMinutesOrSecondsOrMilliseconds = minute > 0 || second > 0 || millisecond > 0;
+                if (
+                    hour < (hasMinutesOrSecondsOrMilliseconds ? 24 : 25) &&
+                    minute < 60 && second < 60 && millisecond < 1000 &&
+                    month > -1 && month < 12 && hourOffset < 24 &&
+                    minuteOffset < 60 && // detect invalid offsets
+                    day > -1 &&
+                    day < (dayFromMonth(year, month + 1) - dayFromMonth(year, month))
+                ) {
+                    result = (
+                        (dayFromMonth(year, month) + day) * 24 +
+                        hour +
+                        hourOffset * signOffset
+                    ) * 60;
+                    result = (
+                        (result + minute + minuteOffset * signOffset) * 60 +
+                        second
+                    ) * 1000 + millisecond;
+                    if (isLocalTime) {
+                        result = toUTC(result);
+                    }
+                    if (-8.64e15 <= result && result <= 8.64e15) {
+                        return result;
+                    }
+                }
+                return NaN;
+            }
+            return NativeDate.parse.apply(this, arguments);
+        };
+        defineProperties(DateShim, { parse: parseShim });
+
+        return DateShim;
+    }(Date));
+    /* global Date: false */
+}
+
+// ES5 15.9.4.4
+// http://es5.github.com/#x15.9.4.4
+if (!Date.now) {
+    Date.now = function now() {
+        return new Date().getTime();
+    };
+}
+
+//
+// Number
+// ======
+//
+
+// ES5.1 15.7.4.5
+// http://es5.github.com/#x15.7.4.5
+var hasToFixedBugs = NumberPrototype.toFixed && (
+  (0.00008).toFixed(3) !== '0.000' ||
+  (0.9).toFixed(0) !== '1' ||
+  (1.255).toFixed(2) !== '1.25' ||
+  (1000000000000000128).toFixed(0) !== '1000000000000000128'
+);
+
+var toFixedHelpers = {
+  base: 1e7,
+  size: 6,
+  data: [0, 0, 0, 0, 0, 0],
+  multiply: function multiply(n, c) {
+      var i = -1;
+      var c2 = c;
+      while (++i < toFixedHelpers.size) {
+          c2 += n * toFixedHelpers.data[i];
+          toFixedHelpers.data[i] = c2 % toFixedHelpers.base;
+          c2 = Math.floor(c2 / toFixedHelpers.base);
+      }
+  },
+  divide: function divide(n) {
+      var i = toFixedHelpers.size, c = 0;
+      while (--i >= 0) {
+          c += toFixedHelpers.data[i];
+          toFixedHelpers.data[i] = Math.floor(c / n);
+          c = (c % n) * toFixedHelpers.base;
+      }
+  },
+  numToString: function numToString() {
+      var i = toFixedHelpers.size;
+      var s = '';
+      while (--i >= 0) {
+          if (s !== '' || i === 0 || toFixedHelpers.data[i] !== 0) {
+              var t = $String(toFixedHelpers.data[i]);
+              if (s === '') {
+                  s = t;
+              } else {
+                  s += strSlice('0000000', 0, 7 - t.length) + t;
+              }
+          }
+      }
+      return s;
+  },
+  pow: function pow(x, n, acc) {
+      return (n === 0 ? acc : (n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc)));
+  },
+  log: function log(x) {
+      var n = 0;
+      var x2 = x;
+      while (x2 >= 4096) {
+          n += 12;
+          x2 /= 4096;
+      }
+      while (x2 >= 2) {
+          n += 1;
+          x2 /= 2;
+      }
+      return n;
+  }
+};
+
+defineProperties(NumberPrototype, {
+    toFixed: function toFixed(fractionDigits) {
+        var f, x, s, m, e, z, j, k;
+
+        // Test for NaN and round fractionDigits down
+        f = $Number(fractionDigits);
+        f = isActualNaN(f) ? 0 : Math.floor(f);
+
+        if (f < 0 || f > 20) {
+            throw new RangeError('Number.toFixed called with invalid number of decimals');
+        }
+
+        x = $Number(this);
+
+        if (isActualNaN(x)) {
+            return 'NaN';
+        }
+
+        // If it is too big or small, return the string value of the number
+        if (x <= -1e21 || x >= 1e21) {
+            return $String(x);
+        }
+
+        s = '';
+
+        if (x < 0) {
+            s = '-';
+            x = -x;
+        }
+
+        m = '0';
+
+        if (x > 1e-21) {
+            // 1e-21 < x < 1e21
+            // -70 < log2(x) < 70
+            e = toFixedHelpers.log(x * toFixedHelpers.pow(2, 69, 1)) - 69;
+            z = (e < 0 ? x * toFixedHelpers.pow(2, -e, 1) : x / toFixedHelpers.pow(2, e, 1));
+            z *= 0x10000000000000; // Math.pow(2, 52);
+            e = 52 - e;
+
+            // -18 < e < 122
+            // x = z / 2 ^ e
+            if (e > 0) {
+                toFixedHelpers.multiply(0, z);
+                j = f;
+
+                while (j >= 7) {
+                    toFixedHelpers.multiply(1e7, 0);
+                    j -= 7;
+                }
+
+                toFixedHelpers.multiply(toFixedHelpers.pow(10, j, 1), 0);
+                j = e - 1;
+
+                while (j >= 23) {
+                    toFixedHelpers.divide(1 << 23);
+                    j -= 23;
+                }
+
+                toFixedHelpers.divide(1 << j);
+                toFixedHelpers.multiply(1, 1);
+                toFixedHelpers.divide(2);
+                m = toFixedHelpers.numToString();
+            } else {
+                toFixedHelpers.multiply(0, z);
+                toFixedHelpers.multiply(1 << (-e), 0);
+                m = toFixedHelpers.numToString() + strSlice('0.00000000000000000000', 2, 2 + f);
+            }
+        }
+
+        if (f > 0) {
+            k = m.length;
+
+            if (k <= f) {
+                m = s + strSlice('0.0000000000000000000', 0, f - k + 2) + m;
+            } else {
+                m = s + strSlice(m, 0, k - f) + '.' + strSlice(m, k - f);
+            }
+        } else {
+            m = s + m;
+        }
+
+        return m;
+    }
+}, hasToFixedBugs);
+
+//
+// String
+// ======
+//
+
+// ES5 15.5.4.14
+// http://es5.github.com/#x15.5.4.14
+
+// [bugfix, IE lt 9, firefox 4, Konqueror, Opera, obscure browsers]
+// Many browsers do not split properly with regular expressions or they
+// do not perform the split correctly under obscure conditions.
+// See http://blog.stevenlevithan.com/archives/cross-browser-split
+// I've tested in many browsers and this seems to cover the deviant ones:
+//    'ab'.split(/(?:ab)*/) should be ["", ""], not [""]
+//    '.'.split(/(.?)(.?)/) should be ["", ".", "", ""], not ["", ""]
+//    'tesst'.split(/(s)*/) should be ["t", undefined, "e", "s", "t"], not
+//       [undefined, "t", undefined, "e", ...]
+//    ''.split(/.?/) should be [], not [""]
+//    '.'.split(/()()/) should be ["."], not ["", "", "."]
+
+if (
+    'ab'.split(/(?:ab)*/).length !== 2 ||
+    '.'.split(/(.?)(.?)/).length !== 4 ||
+    'tesst'.split(/(s)*/)[1] === 't' ||
+    'test'.split(/(?:)/, -1).length !== 4 ||
+    ''.split(/.?/).length ||
+    '.'.split(/()()/).length > 1
+) {
+    (function () {
+        var compliantExecNpcg = typeof (/()??/).exec('')[1] === 'undefined'; // NPCG: nonparticipating capturing group
+        var maxSafe32BitInt = Math.pow(2, 32) - 1;
+
+        StringPrototype.split = function (separator, limit) {
+            var string = this;
+            if (typeof separator === 'undefined' && limit === 0) {
+                return [];
+            }
+
+            // If `separator` is not a regex, use native split
+            if (!isRegex(separator)) {
+                return strSplit(this, separator, limit);
+            }
+
+            var output = [];
+            var flags = (separator.ignoreCase ? 'i' : '') +
+                        (separator.multiline ? 'm' : '') +
+                        (separator.unicode ? 'u' : '') + // in ES6
+                        (separator.sticky ? 'y' : ''), // Firefox 3+ and ES6
+                lastLastIndex = 0,
+                // Make `global` and avoid `lastIndex` issues by working with a copy
+                separator2, match, lastIndex, lastLength;
+            var separatorCopy = new RegExp(separator.source, flags + 'g');
+            string += ''; // Type-convert
+            if (!compliantExecNpcg) {
+                // Doesn't need flags gy, but they don't hurt
+                separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\s)', flags);
+            }
+            /* Values for `limit`, per the spec:
+             * If undefined: 4294967295 // maxSafe32BitInt
+             * If 0, Infinity, or NaN: 0
+             * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;
+             * If negative number: 4294967296 - Math.floor(Math.abs(limit))
+             * If other: Type-convert, then use the above rules
+             */
+            var splitLimit = typeof limit === 'undefined' ? maxSafe32BitInt : ES.ToUint32(limit);
+            match = separatorCopy.exec(string);
+            while (match) {
+                // `separatorCopy.lastIndex` is not reliable cross-browser
+                lastIndex = match.index + match[0].length;
+                if (lastIndex > lastLastIndex) {
+                    array_push.call(output, strSlice(string, lastLastIndex, match.index));
+                    // Fix browsers whose `exec` methods don't consistently return `undefined` for
+                    // nonparticipating capturing groups
+                    if (!compliantExecNpcg && match.length > 1) {
+                        /* eslint-disable no-loop-func */
+                        match[0].replace(separator2, function () {
+                            for (var i = 1; i < arguments.length - 2; i++) {
+                                if (typeof arguments[i] === 'undefined') {
+                                    match[i] = void 0;
+                                }
+                            }
+                        });
+                        /* eslint-enable no-loop-func */
+                    }
+                    if (match.length > 1 && match.index < string.length) {
+                        array_push.apply(output, array_slice.call(match, 1));
+                    }
+                    lastLength = match[0].length;
+                    lastLastIndex = lastIndex;
+                    if (output.length >= splitLimit) {
+                        break;
+                    }
+                }
+                if (separatorCopy.lastIndex === match.index) {
+                    separatorCopy.lastIndex++; // Avoid an infinite loop
+                }
+                match = separatorCopy.exec(string);
+            }
+            if (lastLastIndex === string.length) {
+                if (lastLength || !separatorCopy.test('')) {
+                    array_push.call(output, '');
+                }
+            } else {
+                array_push.call(output, strSlice(string, lastLastIndex));
+            }
+            return output.length > splitLimit ? strSlice(output, 0, splitLimit) : output;
+        };
+    }());
+
+// [bugfix, chrome]
+// If separator is undefined, then the result array contains just one String,
+// which is the this value (converted to a String). If limit is not undefined,
+// then the output array is truncated so that it contains no more than limit
+// elements.
+// "0".split(undefined, 0) -> []
+} else if ('0'.split(void 0, 0).length) {
+    StringPrototype.split = function split(separator, limit) {
+        if (typeof separator === 'undefined' && limit === 0) { return []; }
+        return strSplit(this, separator, limit);
+    };
+}
+
+var str_replace = StringPrototype.replace;
+var replaceReportsGroupsCorrectly = (function () {
+    var groups = [];
+    'x'.replace(/x(.)?/g, function (match, group) {
+        array_push.call(groups, group);
+    });
+    return groups.length === 1 && typeof groups[0] === 'undefined';
+}());
+
+if (!replaceReportsGroupsCorrectly) {
+    StringPrototype.replace = function replace(searchValue, replaceValue) {
+        var isFn = isCallable(replaceValue);
+        var hasCapturingGroups = isRegex(searchValue) && (/\)[*?]/).test(searchValue.source);
+        if (!isFn || !hasCapturingGroups) {
+            return str_replace.call(this, searchValue, replaceValue);
+        } else {
+            var wrappedReplaceValue = function (match) {
+                var length = arguments.length;
+                var originalLastIndex = searchValue.lastIndex;
+                searchValue.lastIndex = 0;
+                var args = searchValue.exec(match) || [];
+                searchValue.lastIndex = originalLastIndex;
+                array_push.call(args, arguments[length - 2], arguments[length - 1]);
+                return replaceValue.apply(this, args);
+            };
+            return str_replace.call(this, searchValue, wrappedReplaceValue);
+        }
+    };
+}
+
+// ECMA-262, 3rd B.2.3
+// Not an ECMAScript standard, although ECMAScript 3rd Edition has a
+// non-normative section suggesting uniform semantics and it should be
+// normalized across all browsers
+// [bugfix, IE lt 9] IE < 9 substr() with negative value not working in IE
+var string_substr = StringPrototype.substr;
+var hasNegativeSubstrBug = ''.substr && '0b'.substr(-1) !== 'b';
+defineProperties(StringPrototype, {
+    substr: function substr(start, length) {
+        var normalizedStart = start;
+        if (start < 0) {
+            normalizedStart = max(this.length + start, 0);
+        }
+        return string_substr.call(this, normalizedStart, length);
+    }
+}, hasNegativeSubstrBug);
+
+// ES5 15.5.4.20
+// whitespace from: http://es5.github.io/#x15.5.4.20
+var ws = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
+    '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028' +
+    '\u2029\uFEFF';
+var zeroWidth = '\u200b';
+var wsRegexChars = '[' + ws + ']';
+var trimBeginRegexp = new RegExp('^' + wsRegexChars + wsRegexChars + '*');
+var trimEndRegexp = new RegExp(wsRegexChars + wsRegexChars + '*$');
+var hasTrimWhitespaceBug = StringPrototype.trim && (ws.trim() || !zeroWidth.trim());
+defineProperties(StringPrototype, {
+    // http://blog.stevenlevithan.com/archives/faster-trim-javascript
+    // http://perfectionkills.com/whitespace-deviations/
+    trim: function trim() {
+        if (typeof this === 'undefined' || this === null) {
+            throw new TypeError("can't convert " + this + ' to object');
+        }
+        return $String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, '');
+    }
+}, hasTrimWhitespaceBug);
+
+// ES-5 15.1.2.2
+if (parseInt(ws + '08') !== 8 || parseInt(ws + '0x16') !== 22) {
+    /* global parseInt: true */
+    parseInt = (function (origParseInt) {
+        var hexRegex = /^0[xX]/;
+        return function parseInt(str, radix) {
+            var string = $String(str).trim();
+            var defaultedRadix = $Number(radix) || (hexRegex.test(string) ? 16 : 10);
+            return origParseInt(string, defaultedRadix);
+        };
+    }(parseInt));
+}
+
+}));
diff --git a/public/bower_components/font-awesome/font-awesome.less b/public/bower_components/font-awesome/font-awesome.less
new file mode 100644
index 0000000..e3f89c8
--- /dev/null
+++ b/public/bower_components/font-awesome/font-awesome.less
@@ -0,0 +1,17 @@
+/*!
+ *  Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+
+@import "variables.less";
+@import "mixins.less";
+@import "path.less";
+@import "core.less";
+@import "larger.less";
+@import "fixed-width.less";
+@import "list.less";
+@import "bordered-pulled.less";
+@import "animated.less";
+@import "rotated-flipped.less";
+@import "stacked.less";
+@import "icons.less";
diff --git a/public/bower_components/font-awesome/font-awesome.scss b/public/bower_components/font-awesome/font-awesome.scss
new file mode 100644
index 0000000..ebd9646
--- /dev/null
+++ b/public/bower_components/font-awesome/font-awesome.scss
@@ -0,0 +1,17 @@
+/*!
+ *  Font Awesome 4.4.0 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */
+
+@import "variables";
+@import "mixins";
+@import "path";
+@import "core";
+@import "larger";
+@import "fixed-width";
+@import "list";
+@import "bordered-pulled";
+@import "animated";
+@import "rotated-flipped";
+@import "stacked";
+@import "icons";
diff --git a/public/bower_components/highlightjs/default.css b/public/bower_components/highlightjs/default.css
new file mode 100644
index 0000000..b0ac8b8
--- /dev/null
+++ b/public/bower_components/highlightjs/default.css
@@ -0,0 +1,155 @@
+/*
+
+Original style from softwaremaniacs.org (c) Ivan Sagalaev <[email-masked]>
+
+*/
+
+.hljs {
+  display: block;
+  overflow-x: auto;
+  padding: 0.5em;
+  background: #f0f0f0;
+  -webkit-text-size-adjust: none;
+}
+
+.hljs,
+.hljs-subst,
+.hljs-tag .hljs-title,
+.nginx .hljs-title {
+  color: black;
+}
+
+.hljs-string,
+.hljs-title,
+.hljs-constant,
+.hljs-parent,
+.hljs-tag .hljs-value,
+.hljs-rule .hljs-value,
+.hljs-preprocessor,
+.hljs-pragma,
+.hljs-name,
+.haml .hljs-symbol,
+.ruby .hljs-symbol,
+.ruby .hljs-symbol .hljs-string,
+.hljs-template_tag,
+.django .hljs-variable,
+.smalltalk .hljs-class,
+.hljs-addition,
+.hljs-flow,
+.hljs-stream,
+.bash .hljs-variable,
+.pf .hljs-variable,
+.apache .hljs-tag,
+.apache .hljs-cbracket,
+.tex .hljs-command,
+.tex .hljs-special,
+.erlang_repl .hljs-function_or_atom,
+.asciidoc .hljs-header,
+.markdown .hljs-header,
+.coffeescript .hljs-attribute,
+.tp .hljs-variable {
+  color: #800;
+}
+
+.smartquote,
+.hljs-comment,
+.hljs-annotation,
+.diff .hljs-header,
+.hljs-chunk,
+.asciidoc .hljs-blockquote,
+.markdown .hljs-blockquote {
+  color: #888;
+}
+
+.hljs-number,
+.hljs-date,
+.hljs-regexp,
+.hljs-literal,
+.hljs-hexcolor,
+.smalltalk .hljs-symbol,
+.smalltalk .hljs-char,
+.go .hljs-constant,
+.hljs-change,
+.lasso .hljs-variable,
+.makefile .hljs-variable,
+.asciidoc .hljs-bullet,
+.markdown .hljs-bullet,
+.asciidoc .hljs-link_url,
+.markdown .hljs-link_url {
+  color: #080;
+}
+
+.hljs-label,
+.ruby .hljs-string,
+.hljs-decorator,
+.hljs-filter .hljs-argument,
+.hljs-localvars,
+.hljs-array,
+.hljs-attr_selector,
+.hljs-important,
+.hljs-pseudo,
+.hljs-pi,
+.haml .hljs-bullet,
+.hljs-doctype,
+.hljs-deletion,
+.hljs-envvar,
+.hljs-shebang,
+.apache .hljs-sqbracket,
+.nginx .hljs-built_in,
+.tex .hljs-formula,
+.erlang_repl .hljs-reserved,
+.hljs-prompt,
+.asciidoc .hljs-link_label,
+.markdown .hljs-link_label,
+.vhdl .hljs-attribute,
+.clojure .hljs-attribute,
+.asciidoc .hljs-attribute,
+.lasso .hljs-attribute,
+.coffeescript .hljs-property,
+.hljs-phony {
+  color: #88f;
+}
+
+.hljs-keyword,
+.hljs-id,
+.hljs-title,
+.hljs-built_in,
+.css .hljs-tag,
+.hljs-doctag,
+.smalltalk .hljs-class,
+.hljs-winutils,
+.bash .hljs-variable,
+.pf .hljs-variable,
+.apache .hljs-tag,
+.hljs-type,
+.hljs-typename,
+.tex .hljs-command,
+.asciidoc .hljs-strong,
+.markdown .hljs-strong,
+.hljs-request,
+.hljs-status,
+.tp .hljs-data,
+.tp .hljs-io {
+  font-weight: bold;
+}
+
+.asciidoc .hljs-emphasis,
+.markdown .hljs-emphasis,
+.tp .hljs-units {
+  font-style: italic;
+}
+
+.nginx .hljs-built_in {
+  font-weight: normal;
+}
+
+.coffeescript .javascript,
+.javascript .xml,
+.lasso .markup,
+.tex .hljs-formula,
+.xml .javascript,
+.xml .vbscript,
+.xml .css,
+.xml .hljs-cdata {
+  opacity: 0.5;
+}
diff --git a/public/bower_components/highlightjs/highlight.pack.js b/public/bower_components/highlightjs/highlight.pack.js
new file mode 100644
index 0000000..fe3a944
--- /dev/null
+++ b/public/bower_components/highlightjs/highlight.pack.js
@@ -0,0 +1,13562 @@
+(function(factory) {
+
+  // Setup highlight.js for different environments. First is Node.js or
+  // CommonJS.
+  if(typeof exports !== 'undefined') {
+    factory(exports);
+  } else {
+    // Export hljs globally even when using AMD for cases when this script
+    // is loaded with others that may still expect a global hljs.
+    window.hljs = factory({});
+
+    // Finally register the global hljs with AMD.
+    if(typeof define === 'function' && define.amd) {
+      define('hljs', [], function() {
+        return window.hljs;
+      });
+    }
+  }
+
+}(function(hljs) {
+
+  /* Utility functions */
+
+  function escape(value) {
+    return value.replace(/&/gm, '&amp;').replace(/</gm, '&lt;').replace(/>/gm, '&gt;');
+  }
+
+  function tag(node) {
+    return node.nodeName.toLowerCase();
+  }
+
+  function testRe(re, lexeme) {
+    var match = re && re.exec(lexeme);
+    return match && match.index == 0;
+  }
+
+  function isNotHighlighted(language) {
+    return (/^(no-?highlight|plain|text)$/i).test(language);
+  }
+
+  function blockLanguage(block) {
+    var i, match, length,
+        classes = block.className + ' ';
+
+    classes += block.parentNode ? block.parentNode.className : '';
+
+    // language-* takes precedence over non-prefixed class names
+    match = (/\blang(?:uage)?-([\w-]+)\b/i).exec(classes);
+    if (match) {
+      return getLanguage(match[1]) ? match[1] : 'no-highlight';
+    }
+
+    classes = classes.split(/\s+/);
+    for (i = 0, length = classes.length; i < length; i++) {
+      if (getLanguage(classes[i]) || isNotHighlighted(classes[i])) {
+        return classes[i];
+      }
+    }
+  }
+
+  function inherit(parent, obj) {
+    var result = {}, key;
+    for (key in parent)
+      result[key] = parent[key];
+    if (obj)
+      for (key in obj)
+        result[key] = obj[key];
+    return result;
+  }
+
+  /* Stream merging */
+
+  function nodeStream(node) {
+    var result = [];
+    (function _nodeStream(node, offset) {
+      for (var child = node.firstChild; child; child = child.nextSibling) {
+        if (child.nodeType == 3)
+          offset += child.nodeValue.length;
+        else if (child.nodeType == 1) {
+          result.push({
+            event: 'start',
+            offset: offset,
+            node: child
+          });
+          offset = _nodeStream(child, offset);
+          // Prevent void elements from having an end tag that would actually
+          // double them in the output. There are more void elements in HTML
+          // but we list only those realistically expected in code display.
+          if (!tag(child).match(/br|hr|img|input/)) {
+            result.push({
+              event: 'stop',
+              offset: offset,
+              node: child
+            });
+          }
+        }
+      }
+      return offset;
+    })(node, 0);
+    return result;
+  }
+
+  function mergeStreams(original, highlighted, value) {
+    var processed = 0;
+    var result = '';
+    var nodeStack = [];
+
+    function selectStream() {
+      if (!original.length || !highlighted.length) {
+        return original.length ? original : highlighted;
+      }
+      if (original[0].offset != highlighted[0].offset) {
+        return (original[0].offset < highlighted[0].offset) ? original : highlighted;
+      }
+
+      /*
+      To avoid starting the stream just before it should stop the order is
+      ensured that original always starts first and closes last:
+
+      if (event1 == 'start' && event2 == 'start')
+        return original;
+      if (event1 == 'start' && event2 == 'stop')
+        return highlighted;
+      if (event1 == 'stop' && event2 == 'start')
+        return original;
+      if (event1 == 'stop' && event2 == 'stop')
+        return highlighted;
+
+      ... which is collapsed to:
+      */
+      return highlighted[0].event == 'start' ? original : highlighted;
+    }
+
+    function open(node) {
+      function attr_str(a) {return ' ' + a.nodeName + '="' + escape(a.value) + '"';}
+      result += '<' + tag(node) + Array.prototype.map.call(node.attributes, attr_str).join('') + '>';
+    }
+
+    function close(node) {
+      result += '</' + tag(node) + '>';
+    }
+
+    function render(event) {
+      (event.event == 'start' ? open : close)(event.node);
+    }
+
+    while (original.length || highlighted.length) {
+      var stream = selectStream();
+      result += escape(value.substr(processed, stream[0].offset - processed));
+      processed = stream[0].offset;
+      if (stream == original) {
+        /*
+        On any opening or closing tag of the original markup we first close
+        the entire highlighted node stack, then render the original tag along
+        with all the following original tags at the same offset and then
+        reopen all the tags on the highlighted stack.
+        */
+        nodeStack.reverse().forEach(close);
+        do {
+          render(stream.splice(0, 1)[0]);
+          stream = selectStream();
+        } while (stream == original && stream.length && stream[0].offset == processed);
+        nodeStack.reverse().forEach(open);
+      } else {
+        if (stream[0].event == 'start') {
+          nodeStack.push(stream[0].node);
+        } else {
+          nodeStack.pop();
+        }
+        render(stream.splice(0, 1)[0]);
+      }
+    }
+    return result + escape(value.substr(processed));
+  }
+
+  /* Initialization */
+
+  function compileLanguage(language) {
+
+    function reStr(re) {
+        return (re && re.source) || re;
+    }
+
+    function langRe(value, global) {
+      return new RegExp(
+        reStr(value),
+        'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '')
+      );
+    }
+
+    function compileMode(mode, parent) {
+      if (mode.compiled)
+        return;
+      mode.compiled = true;
+
+      mode.keywords = mode.keywords || mode.beginKeywords;
+      if (mode.keywords) {
+        var compiled_keywords = {};
+
+        var flatten = function(className, str) {
+          if (language.case_insensitive) {
+            str = str.toLowerCase();
+          }
+          str.split(' ').forEach(function(kw) {
+            var pair = kw.split('|');
+            compiled_keywords[pair[0]] = [className, pair[1] ? Number(pair[1]) : 1];
+          });
+        };
+
+        if (typeof mode.keywords == 'string') { // string
+          flatten('keyword', mode.keywords);
+        } else {
+          Object.keys(mode.keywords).forEach(function (className) {
+            flatten(className, mode.keywords[className]);
+          });
+        }
+        mode.keywords = compiled_keywords;
+      }
+      mode.lexemesRe = langRe(mode.lexemes || /\b\w+\b/, true);
+
+      if (parent) {
+        if (mode.beginKeywords) {
+          mode.begin = '\\b(' + mode.beginKeywords.split(' ').join('|') + ')\\b';
+        }
+        if (!mode.begin)
+          mode.begin = /\B|\b/;
+        mode.beginRe = langRe(mode.begin);
+        if (!mode.end && !mode.endsWithParent)
+          mode.end = /\B|\b/;
+        if (mode.end)
+          mode.endRe = langRe(mode.end);
+        mode.terminator_end = reStr(mode.end) || '';
+        if (mode.endsWithParent && parent.terminator_end)
+          mode.terminator_end += (mode.end ? '|' : '') + parent.terminator_end;
+      }
+      if (mode.illegal)
+        mode.illegalRe = langRe(mode.illegal);
+      if (mode.relevance === undefined)
+        mode.relevance = 1;
+      if (!mode.contains) {
+        mode.contains = [];
+      }
+      var expanded_contains = [];
+      mode.contains.forEach(function(c) {
+        if (c.variants) {
+          c.variants.forEach(function(v) {expanded_contains.push(inherit(c, v));});
+        } else {
+          expanded_contains.push(c == 'self' ? mode : c);
+        }
+      });
+      mode.contains = expanded_contains;
+      mode.contains.forEach(function(c) {compileMode(c, mode);});
+
+      if (mode.starts) {
+        compileMode(mode.starts, parent);
+      }
+
+      var terminators =
+        mode.contains.map(function(c) {
+          return c.beginKeywords ? '\\.?(' + c.begin + ')\\.?' : c.begin;
+        })
+        .concat([mode.terminator_end, mode.illegal])
+        .map(reStr)
+        .filter(Boolean);
+      mode.terminators = terminators.length ? langRe(terminators.join('|'), true) : {exec: function(/*s*/) {return null;}};
+    }
+
+    compileMode(language);
+  }
+
+  /*
+  Core highlighting function. Accepts a language name, or an alias, and a
+  string with the code to highlight. Returns an object with the following
+  properties:
+
+  - relevance (int)
+  - value (an HTML string with highlighting markup)
+
+  */
+  function highlight(name, value, ignore_illegals, continuation) {
+
+    function subMode(lexeme, mode) {
+      for (var i = 0; i < mode.contains.length; i++) {
+        if (testRe(mode.contains[i].beginRe, lexeme)) {
+          return mode.contains[i];
+        }
+      }
+    }
+
+    function endOfMode(mode, lexeme) {
+      if (testRe(mode.endRe, lexeme)) {
+        while (mode.endsParent && mode.parent) {
+          mode = mode.parent;
+        }
+        return mode;
+      }
+      if (mode.endsWithParent) {
+        return endOfMode(mode.parent, lexeme);
+      }
+    }
+
+    function isIllegal(lexeme, mode) {
+      return !ignore_illegals && testRe(mode.illegalRe, lexeme);
+    }
+
+    function keywordMatch(mode, match) {
+      var match_str = language.case_insensitive ? match[0].toLowerCase() : match[0];
+      return mode.keywords.hasOwnProperty(match_str) && mode.keywords[match_str];
+    }
+
+    function buildSpan(classname, insideSpan, leaveOpen, noPrefix) {
+      var classPrefix = noPrefix ? '' : options.classPrefix,
+          openSpan    = '<span class="' + classPrefix,
+          closeSpan   = leaveOpen ? '' : '</span>';
+
+      openSpan += classname + '">';
+
+      return openSpan + insideSpan + closeSpan;
+    }
+
+    function processKeywords() {
+      if (!top.keywords)
+        return escape(mode_buffer);
+      var result = '';
+      var last_index = 0;
+      top.lexemesRe.lastIndex = 0;
+      var match = top.lexemesRe.exec(mode_buffer);
+      while (match) {
+        result += escape(mode_buffer.substr(last_index, match.index - last_index));
+        var keyword_match = keywordMatch(top, match);
+        if (keyword_match) {
+          relevance += keyword_match[1];
+          result += buildSpan(keyword_match[0], escape(match[0]));
+        } else {
+          result += escape(match[0]);
+        }
+        last_index = top.lexemesRe.lastIndex;
+        match = top.lexemesRe.exec(mode_buffer);
+      }
+      return result + escape(mode_buffer.substr(last_index));
+    }
+
+    function processSubLanguage() {
+      var explicit = typeof top.subLanguage == 'string';
+      if (explicit && !languages[top.subLanguage]) {
+        return escape(mode_buffer);
+      }
+
+      var result = explicit ?
+                   highlight(top.subLanguage, mode_buffer, true, continuations[top.subLanguage]) :
+                   highlightAuto(mode_buffer, top.subLanguage.length ? top.subLanguage : undefined);
+
+      // Counting embedded language score towards the host language may be disabled
+      // with zeroing the containing mode relevance. Usecase in point is Markdown that
+      // allows XML everywhere and makes every XML snippet to have a much larger Markdown
+      // score.
+      if (top.relevance > 0) {
+        relevance += result.relevance;
+      }
+      if (explicit) {
+        continuations[top.subLanguage] = result.top;
+      }
+      return buildSpan(result.language, result.value, false, true);
+    }
+
+    function processBuffer() {
+      return top.subLanguage !== undefined ? processSubLanguage() : processKeywords();
+    }
+
+    function startNewMode(mode, lexeme) {
+      var markup = mode.className? buildSpan(mode.className, '', true): '';
+      if (mode.returnBegin) {
+        result += markup;
+        mode_buffer = '';
+      } else if (mode.excludeBegin) {
+        result += escape(lexeme) + markup;
+        mode_buffer = '';
+      } else {
+        result += markup;
+        mode_buffer = lexeme;
+      }
+      top = Object.create(mode, {parent: {value: top}});
+    }
+
+    function processLexeme(buffer, lexeme) {
+
+      mode_buffer += buffer;
+      if (lexeme === undefined) {
+        result += processBuffer();
+        return 0;
+      }
+
+      var new_mode = subMode(lexeme, top);
+      if (new_mode) {
+        result += processBuffer();
+        startNewMode(new_mode, lexeme);
+        return new_mode.returnBegin ? 0 : lexeme.length;
+      }
+
+      var end_mode = endOfMode(top, lexeme);
+      if (end_mode) {
+        var origin = top;
+        if (!(origin.returnEnd || origin.excludeEnd)) {
+          mode_buffer += lexeme;
+        }
+        result += processBuffer();
+        do {
+          if (top.className) {
+            result += '</span>';
+          }
+          relevance += top.relevance;
+          top = top.parent;
+        } while (top != end_mode.parent);
+        if (origin.excludeEnd) {
+          result += escape(lexeme);
+        }
+        mode_buffer = '';
+        if (end_mode.starts) {
+          startNewMode(end_mode.starts, '');
+        }
+        return origin.returnEnd ? 0 : lexeme.length;
+      }
+
+      if (isIllegal(lexeme, top))
+        throw new Error('Illegal lexeme "' + lexeme + '" for mode "' + (top.className || '<unnamed>') + '"');
+
+      /*
+      Parser should not reach this point as all types of lexemes should be caught
+      earlier, but if it does due to some bug make sure it advances at least one
+      character forward to prevent infinite looping.
+      */
+      mode_buffer += lexeme;
+      return lexeme.length || 1;
+    }
+
+    var language = getLanguage(name);
+    if (!language) {
+      throw new Error('Unknown language: "' + name + '"');
+    }
+
+    compileLanguage(language);
+    var top = continuation || language;
+    var continuations = {}; // keep continuations for sub-languages
+    var result = '', current;
+    for(current = top; current != language; current = current.parent) {
+      if (current.className) {
+        result = buildSpan(current.className, '', true) + result;
+      }
+    }
+    var mode_buffer = '';
+    var relevance = 0;
+    try {
+      var match, count, index = 0;
+      while (true) {
+        top.terminators.lastIndex = index;
+        match = top.terminators.exec(value);
+        if (!match)
+          break;
+        count = processLexeme(value.substr(index, match.index - index), match[0]);
+        index = match.index + count;
+      }
+      processLexeme(value.substr(index));
+      for(current = top; current.parent; current = current.parent) { // close dangling modes
+        if (current.className) {
+          result += '</span>';
+        }
+      }
+      return {
+        relevance: relevance,
+        value: result,
+        language: name,
+        top: top
+      };
+    } catch (e) {
+      if (e.message.indexOf('Illegal') != -1) {
+        return {
+          relevance: 0,
+          value: escape(value)
+        };
+      } else {
+        throw e;
+      }
+    }
+  }
+
+  /*
+  Highlighting with language detection. Accepts a string with the code to
+  highlight. Returns an object with the following properties:
+
+  - language (detected language)
+  - relevance (int)
+  - value (an HTML string with highlighting markup)
+  - second_best (object with the same structure for second-best heuristically
+    detected language, may be absent)
+
+  */
+  function highlightAuto(text, languageSubset) {
+    languageSubset = languageSubset || options.languages || Object.keys(languages);
+    var result = {
+      relevance: 0,
+      value: escape(text)
+    };
+    var second_best = result;
+    languageSubset.forEach(function(name) {
+      if (!getLanguage(name)) {
+        return;
+      }
+      var current = highlight(name, text, false);
+      current.language = name;
+      if (current.relevance > second_best.relevance) {
+        second_best = current;
+      }
+      if (current.relevance > result.relevance) {
+        second_best = result;
+        result = current;
+      }
+    });
+    if (second_best.language) {
+      result.second_best = second_best;
+    }
+    return result;
+  }
+
+  /*
+  Post-processing of the highlighted markup:
+
+  - replace TABs with something more useful
+  - replace real line-breaks with '<br>' for non-pre containers
+
+  */
+  function fixMarkup(value) {
+    if (options.tabReplace) {
+      value = value.replace(/^((<[^>]+>|\t)+)/gm, function(match, p1 /*..., offset, s*/) {
+        return p1.replace(/\t/g, options.tabReplace);
+      });
+    }
+    if (options.useBR) {
+      value = value.replace(/\n/g, '<br>');
+    }
+    return value;
+  }
+
+  function buildClassName(prevClassName, currentLang, resultLang) {
+    var language = currentLang ? aliases[currentLang] : resultLang,
+        result   = [prevClassName.trim()];
+
+    if (!prevClassName.match(/\bhljs\b/)) {
+      result.push('hljs');
+    }
+
+    if (prevClassName.indexOf(language) === -1) {
+      result.push(language);
+    }
+
+    return result.join(' ').trim();
+  }
+
+  /*
+  Applies highlighting to a DOM node containing code. Accepts a DOM node and
+  two optional parameters for fixMarkup.
+  */
+  function highlightBlock(block) {
+    var language = blockLanguage(block);
+    if (isNotHighlighted(language))
+        return;
+
+    var node;
+    if (options.useBR) {
+      node = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
+      node.innerHTML = block.innerHTML.replace(/\n/g, '').replace(/<br[ \/]*>/g, '\n');
+    } else {
+      node = block;
+    }
+    var text = node.textContent;
+    var result = language ? highlight(language, text, true) : highlightAuto(text);
+
+    var originalStream = nodeStream(node);
+    if (originalStream.length) {
+      var resultNode = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
+      resultNode.innerHTML = result.value;
+      result.value = mergeStreams(originalStream, nodeStream(resultNode), text);
+    }
+    result.value = fixMarkup(result.value);
+
+    block.innerHTML = result.value;
+    block.className = buildClassName(block.className, language, result.language);
+    block.result = {
+      language: result.language,
+      re: result.relevance
+    };
+    if (result.second_best) {
+      block.second_best = {
+        language: result.second_best.language,
+        re: result.second_best.relevance
+      };
+    }
+  }
+
+  var options = {
+    classPrefix: 'hljs-',
+    tabReplace: null,
+    useBR: false,
+    languages: undefined
+  };
+
+  /*
+  Updates highlight.js global options with values passed in the form of an object
+  */
+  function configure(user_options) {
+    options = inherit(options, user_options);
+  }
+
+  /*
+  Applies highlighting to all <pre><code>..</code></pre> blocks on a page.
+  */
+  function initHighlighting() {
+    if (initHighlighting.called)
+      return;
+    initHighlighting.called = true;
+
+    var blocks = document.querySelectorAll('pre code');
+    Array.prototype.forEach.call(blocks, highlightBlock);
+  }
+
+  /*
+  Attaches highlighting to the page load event.
+  */
+  function initHighlightingOnLoad() {
+    addEventListener('DOMContentLoaded', initHighlighting, false);
+    addEventListener('load', initHighlighting, false);
+  }
+
+  var languages = {};
+  var aliases = {};
+
+  function registerLanguage(name, language) {
+    var lang = languages[name] = language(hljs);
+    if (lang.aliases) {
+      lang.aliases.forEach(function(alias) {aliases[alias] = name;});
+    }
+  }
+
+  function listLanguages() {
+    return Object.keys(languages);
+  }
+
+  function getLanguage(name) {
+    name = (name || '').toLowerCase();
+    return languages[name] || languages[aliases[name]];
+  }
+
+  /* Interface definition */
+
+  hljs.highlight = highlight;
+  hljs.highlightAuto = highlightAuto;
+  hljs.fixMarkup = fixMarkup;
+  hljs.highlightBlock = highlightBlock;
+  hljs.configure = configure;
+  hljs.initHighlighting = initHighlighting;
+  hljs.initHighlightingOnLoad = initHighlightingOnLoad;
+  hljs.registerLanguage = registerLanguage;
+  hljs.listLanguages = listLanguages;
+  hljs.getLanguage = getLanguage;
+  hljs.inherit = inherit;
+
+  // Common regexps
+  hljs.IDENT_RE = '[a-zA-Z]\\w*';
+  hljs.UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\w*';
+  hljs.NUMBER_RE = '\\b\\d+(\\.\\d+)?';
+  hljs.C_NUMBER_RE = '(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)'; // 0x..., 0..., decimal, float
+  hljs.BINARY_NUMBER_RE = '\\b(0b[01]+)'; // 0b...
+  hljs.RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~';
+
+  // Common modes
+  hljs.BACKSLASH_ESCAPE = {
+    begin: '\\\\[\\s\\S]', relevance: 0
+  };
+  hljs.APOS_STRING_MODE = {
+    className: 'string',
+    begin: '\'', end: '\'',
+    illegal: '\\n',
+    contains: [hljs.BACKSLASH_ESCAPE]
+  };
+  hljs.QUOTE_STRING_MODE = {
+    className: 'string',
+    begin: '"', end: '"',
+    illegal: '\\n',
+    contains: [hljs.BACKSLASH_ESCAPE]
+  };
+  hljs.PHRASAL_WORDS_MODE = {
+    begin: /\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/
+  };
+  hljs.COMMENT = function (begin, end, inherits) {
+    var mode = hljs.inherit(
+      {
+        className: 'comment',
+        begin: begin, end: end,
+        contains: []
+      },
+      inherits || {}
+    );
+    mode.contains.push(hljs.PHRASAL_WORDS_MODE);
+    mode.contains.push({
+      className: 'doctag',
+      begin: "(?:TODO|FIXME|NOTE|BUG|XXX):",
+      relevance: 0
+    });
+    return mode;
+  };
+  hljs.C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$');
+  hljs.C_BLOCK_COMMENT_MODE = hljs.COMMENT('/\\*', '\\*/');
+  hljs.HASH_COMMENT_MODE = hljs.COMMENT('#', '$');
+  hljs.NUMBER_MODE = {
+    className: 'number',
+    begin: hljs.NUMBER_RE,
+    relevance: 0
+  };
+  hljs.C_NUMBER_MODE = {
+    className: 'number',
+    begin: hljs.C_NUMBER_RE,
+    relevance: 0
+  };
+  hljs.BINARY_NUMBER_MODE = {
+    className: 'number',
+    begin: hljs.BINARY_NUMBER_RE,
+    relevance: 0
+  };
+  hljs.CSS_NUMBER_MODE = {
+    className: 'number',
+    begin: hljs.NUMBER_RE + '(' +
+      '%|em|ex|ch|rem'  +
+      '|vw|vh|vmin|vmax' +
+      '|cm|mm|in|pt|pc|px' +
+      '|deg|grad|rad|turn' +
+      '|s|ms' +
+      '|Hz|kHz' +
+      '|dpi|dpcm|dppx' +
+      ')?',
+    relevance: 0
+  };
+  hljs.REGEXP_MODE = {
+    className: 'regexp',
+    begin: /\//, end: /\/[gimuy]*/,
+    illegal: /\n/,
+    contains: [
+      hljs.BACKSLASH_ESCAPE,
+      {
+        begin: /\[/, end: /\]/,
+        relevance: 0,
+        contains: [hljs.BACKSLASH_ESCAPE]
+      }
+    ]
+  };
+  hljs.TITLE_MODE = {
+    className: 'title',
+    begin: hljs.IDENT_RE,
+    relevance: 0
+  };
+  hljs.UNDERSCORE_TITLE_MODE = {
+    className: 'title',
+    begin: hljs.UNDERSCORE_IDENT_RE,
+    relevance: 0
+  };
+
+hljs.registerLanguage('1c', function(hljs){
+  var IDENT_RE_RU = '[a-zA-Zа-яА-Я][a-zA-Z0-9_а-яА-Я]*';
+  var OneS_KEYWORDS = 'возврат дата для если и или иначе иначеесли исключение конецесли ' +
+    'конецпопытки конецпроцедуры конецфункции конеццикла константа не перейти перем ' +
+    'перечисление по пока попытка прервать продолжить процедура строка тогда фс функция цикл ' +
+    'число экспорт';
+  var OneS_BUILT_IN = 'ansitooem oemtoansi ввестивидсубконто ввестидату ввестизначение ' +
+    'ввестиперечисление ввестипериод ввестиплансчетов ввестистроку ввестичисло вопрос ' +
+    'восстановитьзначение врег выбранныйплансчетов вызватьисключение датагод датамесяц ' +
+    'датачисло добавитьмесяц завершитьработусистемы заголовоксистемы записьжурналарегистрации ' +
+    'запуститьприложение зафиксироватьтранзакцию значениевстроку значениевстрокувнутр ' +
+    'значениевфайл значениеизстроки значениеизстрокивнутр значениеизфайла имякомпьютера ' +
+    'имяпользователя каталогвременныхфайлов каталогиб каталогпользователя каталогпрограммы ' +
+    'кодсимв командасистемы конгода конецпериодаби конецрассчитанногопериодаби ' +
+    'конецстандартногоинтервала конквартала конмесяца коннедели лев лог лог10 макс ' +
+    'максимальноеколичествосубконто мин монопольныйрежим названиеинтерфейса названиенабораправ ' +
+    'назначитьвид назначитьсчет найти найтипомеченныенаудаление найтиссылки началопериодаби ' +
+    'началостандартногоинтервала начатьтранзакцию начгода начквартала начмесяца начнедели ' +
+    'номерднягода номерднянедели номернеделигода нрег обработкаожидания окр описаниеошибки ' +
+    'основнойжурналрасчетов основнойплансчетов основнойязык открытьформу открытьформумодально ' +
+    'отменитьтранзакцию очиститьокносообщений периодстр полноеимяпользователя получитьвремята ' +
+    'получитьдатута получитьдокументта получитьзначенияотбора получитьпозициюта ' +
+    'получитьпустоезначение получитьта прав праводоступа предупреждение префиксавтонумерации ' +
+    'пустаястрока пустоезначение рабочаядаттьпустоезначение рабочаядата разделительстраниц ' +
+    'разделительстрок разм разобратьпозициюдокумента рассчитатьрегистрына ' +
+    'рассчитатьрегистрыпо сигнал симв символтабуляции создатьобъект сокрл сокрлп сокрп ' +
+    'сообщить состояние сохранитьзначение сред статусвозврата стрдлина стрзаменить ' +
+    'стрколичествострок стрполучитьстроку  стрчисловхождений сформироватьпозициюдокумента ' +
+    'счетпокоду текущаядата текущеевремя типзначения типзначениястр удалитьобъекты ' +
+    'установитьтана установитьтапо фиксшаблон формат цел шаблон';
+  var DQUOTE =  {className: 'dquote',  begin: '""'};
+  var STR_START = {
+      className: 'string',
+      begin: '"', end: '"|$',
+      contains: [DQUOTE]
+    };
+  var STR_CONT = {
+    className: 'string',
+    begin: '\\|', end: '"|$',
+    contains: [DQUOTE]
+  };
+
+  return {
+    case_insensitive: true,
+    lexemes: IDENT_RE_RU,
+    keywords: {keyword: OneS_KEYWORDS, built_in: OneS_BUILT_IN},
+    contains: [
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.NUMBER_MODE,
+      STR_START, STR_CONT,
+      {
+        className: 'function',
+        begin: '(процедура|функция)', end: '$',
+        lexemes: IDENT_RE_RU,
+        keywords: 'процедура функция',
+        contains: [
+          hljs.inherit(hljs.TITLE_MODE, {begin: IDENT_RE_RU}),
+          {
+            className: 'tail',
+            endsWithParent: true,
+            contains: [
+              {
+                className: 'params',
+                begin: '\\(', end: '\\)',
+                lexemes: IDENT_RE_RU,
+                keywords: 'знач',
+                contains: [STR_START, STR_CONT]
+              },
+              {
+                className: 'export',
+                begin: 'экспорт', endsWithParent: true,
+                lexemes: IDENT_RE_RU,
+                keywords: 'экспорт',
+                contains: [hljs.C_LINE_COMMENT_MODE]
+              }
+            ]
+          },
+          hljs.C_LINE_COMMENT_MODE
+        ]
+      },
+      {className: 'preprocessor', begin: '#', end: '$'},
+      {className: 'date', begin: '\'\\d{2}\\.\\d{2}\\.(\\d{2}|\\d{4})\''}
+    ]
+  };
+});
+
+hljs.registerLanguage('accesslog', function(hljs) {
+  return {
+    contains: [
+      // IP
+      {
+        className: 'number',
+        begin: '\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b'
+      },
+      // Other numbers
+      {
+        className: 'number',
+        begin: '\\b\\d+\\b',
+        relevance: 0
+      },
+      // Requests
+      {
+        className: 'string',
+        begin: '"(GET|POST|HEAD|PUT|DELETE|CONNECT|OPTIONS|PATCH|TRACE)', end: '"',
+        keywords: 'GET POST HEAD PUT DELETE CONNECT OPTIONS PATCH TRACE',
+        illegal: '\\n',
+        relevance: 10
+      },
+      // Dates
+      {
+        className: 'string',
+        begin: /\[/, end: /\]/,
+        illegal: '\\n'
+      },
+      // Strings
+      {
+        className: 'string',
+        begin: '"', end: '"',
+        illegal: '\\n'
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('actionscript', function(hljs) {
+  var IDENT_RE = '[a-zA-Z_$][a-zA-Z0-9_$]*';
+  var IDENT_FUNC_RETURN_TYPE_RE = '([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)';
+
+  var AS3_REST_ARG_MODE = {
+    className: 'rest_arg',
+    begin: '[.]{3}', end: IDENT_RE,
+    relevance: 10
+  };
+
+  return {
+    aliases: ['as'],
+    keywords: {
+      keyword: 'as break case catch class const continue default delete do dynamic each ' +
+        'else extends final finally for function get if implements import in include ' +
+        'instanceof interface internal is namespace native new override package private ' +
+        'protected public return set static super switch this throw try typeof use var void ' +
+        'while with',
+      literal: 'true false null undefined'
+    },
+    contains: [
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      hljs.C_NUMBER_MODE,
+      {
+        className: 'package',
+        beginKeywords: 'package', end: '{',
+        contains: [hljs.TITLE_MODE]
+      },
+      {
+        className: 'class',
+        beginKeywords: 'class interface', end: '{', excludeEnd: true,
+        contains: [
+          {
+            beginKeywords: 'extends implements'
+          },
+          hljs.TITLE_MODE
+        ]
+      },
+      {
+        className: 'preprocessor',
+        beginKeywords: 'import include', end: ';'
+      },
+      {
+        className: 'function',
+        beginKeywords: 'function', end: '[{;]', excludeEnd: true,
+        illegal: '\\S',
+        contains: [
+          hljs.TITLE_MODE,
+          {
+            className: 'params',
+            begin: '\\(', end: '\\)',
+            contains: [
+              hljs.APOS_STRING_MODE,
+              hljs.QUOTE_STRING_MODE,
+              hljs.C_LINE_COMMENT_MODE,
+              hljs.C_BLOCK_COMMENT_MODE,
+              AS3_REST_ARG_MODE
+            ]
+          },
+          {
+            className: 'type',
+            begin: ':',
+            end: IDENT_FUNC_RETURN_TYPE_RE,
+            relevance: 10
+          }
+        ]
+      }
+    ],
+    illegal: /#/
+  };
+});
+
+hljs.registerLanguage('apache', function(hljs) {
+  var NUMBER = {className: 'number', begin: '[\\$%]\\d+'};
+  return {
+    aliases: ['apacheconf'],
+    case_insensitive: true,
+    contains: [
+      hljs.HASH_COMMENT_MODE,
+      {className: 'tag', begin: '</?', end: '>'},
+      {
+        className: 'keyword',
+        begin: /\w+/,
+        relevance: 0,
+        // keywords aren’t needed for highlighting per se, they only boost relevance
+        // for a very generally defined mode (starts with a word, ends with line-end
+        keywords: {
+          common:
+            'order deny allow setenv rewriterule rewriteengine rewritecond documentroot ' +
+            'sethandler errordocument loadmodule options header listen serverroot ' +
+            'servername'
+        },
+        starts: {
+          end: /$/,
+          relevance: 0,
+          keywords: {
+            literal: 'on off all'
+          },
+          contains: [
+            {
+              className: 'sqbracket',
+              begin: '\\s\\[', end: '\\]$'
+            },
+            {
+              className: 'cbracket',
+              begin: '[\\$%]\\{', end: '\\}',
+              contains: ['self', NUMBER]
+            },
+            NUMBER,
+            hljs.QUOTE_STRING_MODE
+          ]
+        }
+      }
+    ],
+    illegal: /\S/
+  };
+});
+
+hljs.registerLanguage('applescript', function(hljs) {
+  var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: ''});
+  var PARAMS = {
+    className: 'params',
+    begin: '\\(', end: '\\)',
+    contains: ['self', hljs.C_NUMBER_MODE, STRING]
+  };
+  var COMMENT_MODE_1 = hljs.COMMENT('--', '$');
+  var COMMENT_MODE_2 = hljs.COMMENT(
+    '\\(\\*',
+    '\\*\\)',
+    {
+      contains: ['self', COMMENT_MODE_1] //allow nesting
+    }
+  );
+  var COMMENTS = [
+    COMMENT_MODE_1,
+    COMMENT_MODE_2,
+    hljs.HASH_COMMENT_MODE
+  ];
+
+  return {
+    aliases: ['osascript'],
+    keywords: {
+      keyword:
+        'about above after against and around as at back before beginning ' +
+        'behind below beneath beside between but by considering ' +
+        'contain contains continue copy div does eighth else end equal ' +
+        'equals error every exit fifth first for fourth from front ' +
+        'get given global if ignoring in into is it its last local me ' +
+        'middle mod my ninth not of on onto or over prop property put ref ' +
+        'reference repeat returning script second set seventh since ' +
+        'sixth some tell tenth that the|0 then third through thru ' +
+        'timeout times to transaction try until where while whose with ' +
+        'without',
+      constant:
+        'AppleScript false linefeed return pi quote result space tab true',
+      type:
+        'alias application boolean class constant date file integer list ' +
+        'number real record string text',
+      command:
+        'activate beep count delay launch log offset read round ' +
+        'run say summarize write',
+      property:
+        'character characters contents day frontmost id item length ' +
+        'month name paragraph paragraphs rest reverse running time version ' +
+        'weekday word words year'
+    },
+    contains: [
+      STRING,
+      hljs.C_NUMBER_MODE,
+      {
+        className: 'type',
+        begin: '\\bPOSIX file\\b'
+      },
+      {
+        className: 'command',
+        begin:
+          '\\b(clipboard info|the clipboard|info for|list (disks|folder)|' +
+          'mount volume|path to|(close|open for) access|(get|set) eof|' +
+          'current date|do shell script|get volume settings|random number|' +
+          'set volume|system attribute|system info|time to GMT|' +
+          '(load|run|store) script|scripting components|' +
+          'ASCII (character|number)|localized string|' +
+          'choose (application|color|file|file name|' +
+          'folder|from list|remote application|URL)|' +
+          'display (alert|dialog))\\b|^\\s*return\\b'
+      },
+      {
+        className: 'constant',
+        begin:
+          '\\b(text item delimiters|current application|missing value)\\b'
+      },
+      {
+        className: 'keyword',
+        begin:
+          '\\b(apart from|aside from|instead of|out of|greater than|' +
+          "isn't|(doesn't|does not) (equal|come before|come after|contain)|" +
+          '(greater|less) than( or equal)?|(starts?|ends|begins?) with|' +
+          'contained by|comes (before|after)|a (ref|reference))\\b'
+      },
+      {
+        className: 'property',
+        begin:
+          '\\b(POSIX path|(date|time) string|quoted form)\\b'
+      },
+      {
+        className: 'function_start',
+        beginKeywords: 'on',
+        illegal: '[${=;\\n]',
+        contains: [hljs.UNDERSCORE_TITLE_MODE, PARAMS]
+      }
+    ].concat(COMMENTS),
+    illegal: '//|->|=>|\\[\\['
+  };
+});
+
+hljs.registerLanguage('armasm', function(hljs) {
+    //local labels: %?[FB]?[AT]?\d{1,2}\w+
+  return {
+    case_insensitive: true,
+    aliases: ['arm'],
+    lexemes: '\\.?' + hljs.IDENT_RE,
+    keywords: {
+      literal:
+        'r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 '+ //standard registers
+        'pc lr sp ip sl sb fp '+ //typical regs plus backward compatibility
+        'a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 '+ //more regs and fp
+        'p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 '+ //coprocessor regs
+        'c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 '+ //more coproc
+        'q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 '+ //advanced SIMD NEON regs
+
+        //program status registers
+        'cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf '+
+        'spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf '+
+
+        //NEON and VFP registers
+        's0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 '+
+        's16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 '+
+        'd0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 '+
+        'd16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 ',
+    preprocessor:
+        //GNU preprocs
+        '.2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg '+
+        //ARM directives
+        'ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ',
+    built_in:
+        '{PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @ '
+    },
+    contains: [
+      {
+        className: 'keyword',
+        begin: '\\b('+     //mnemonics
+            'adc|'+
+            '(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|'+
+            'and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|'+
+            'bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|'+
+            'setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|'+
+            'ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|'+
+            'mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|'+
+            'mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|'+
+            'mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|'+
+            'rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|'+
+            'stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|'+
+            '[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|'+
+            'wfe|wfi|yield'+
+        ')'+
+        '(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?'+ //condition codes
+        '[sptrx]?' ,                                             //legal postfixes
+        end: '\\s'
+      },
+      hljs.COMMENT('[;@]', '$', {relevance: 0}),
+      hljs.C_BLOCK_COMMENT_MODE,
+      hljs.QUOTE_STRING_MODE,
+      {
+        className: 'string',
+        begin: '\'',
+        end: '[^\\\\]\'',
+        relevance: 0
+      },
+      {
+        className: 'title',
+        begin: '\\|', end: '\\|',
+        illegal: '\\n',
+        relevance: 0
+      },
+      {
+        className: 'number',
+        variants: [
+            {begin: '[#$=]?0x[0-9a-f]+'}, //hex
+            {begin: '[#$=]?0b[01]+'},     //bin
+            {begin: '[#$=]\\d+'},        //literal
+            {begin: '\\b\\d+'}           //bare number
+        ],
+        relevance: 0
+      },
+      {
+        className: 'label',
+        variants: [
+            {begin: '^[a-z_\\.\\$][a-z0-9_\\.\\$]+'}, //ARM syntax
+            {begin: '^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:'}, //GNU ARM syntax
+            {begin: '[=#]\\w+' }  //label reference
+        ],
+        relevance: 0
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('xml', function(hljs) {
+  var XML_IDENT_RE = '[A-Za-z0-9\\._:-]+';
+  var PHP = {
+    begin: /<\?(php)?(?!\w)/, end: /\?>/,
+    subLanguage: 'php'
+  };
+  var TAG_INTERNALS = {
+    endsWithParent: true,
+    illegal: /</,
+    relevance: 0,
+    contains: [
+      PHP,
+      {
+        className: 'attribute',
+        begin: XML_IDENT_RE,
+        relevance: 0
+      },
+      {
+        begin: '=',
+        relevance: 0,
+        contains: [
+          {
+            className: 'value',
+            contains: [PHP],
+            variants: [
+              {begin: /"/, end: /"/},
+              {begin: /'/, end: /'/},
+              {begin: /[^\s\/>]+/}
+            ]
+          }
+        ]
+      }
+    ]
+  };
+  return {
+    aliases: ['html', 'xhtml', 'rss', 'atom', 'xsl', 'plist'],
+    case_insensitive: true,
+    contains: [
+      {
+        className: 'doctype',
+        begin: '<!DOCTYPE', end: '>',
+        relevance: 10,
+        contains: [{begin: '\\[', end: '\\]'}]
+      },
+      hljs.COMMENT(
+        '<!--',
+        '-->',
+        {
+          relevance: 10
+        }
+      ),
+      {
+        className: 'cdata',
+        begin: '<\\!\\[CDATA\\[', end: '\\]\\]>',
+        relevance: 10
+      },
+      {
+        className: 'tag',
+        /*
+        The lookahead pattern (?=...) ensures that 'begin' only matches
+        '<style' as a single word, followed by a whitespace or an
+        ending braket. The '$' is needed for the lexeme to be recognized
+        by hljs.subMode() that tests lexemes outside the stream.
+        */
+        begin: '<style(?=\\s|>|$)', end: '>',
+        keywords: {title: 'style'},
+        contains: [TAG_INTERNALS],
+        starts: {
+          end: '</style>', returnEnd: true,
+          subLanguage: 'css'
+        }
+      },
+      {
+        className: 'tag',
+        // See the comment in the <style tag about the lookahead pattern
+        begin: '<script(?=\\s|>|$)', end: '>',
+        keywords: {title: 'script'},
+        contains: [TAG_INTERNALS],
+        starts: {
+          end: '\<\/script\>', returnEnd: true,
+          subLanguage: ['actionscript', 'javascript', 'handlebars']
+        }
+      },
+      PHP,
+      {
+        className: 'pi',
+        begin: /<\?\w+/, end: /\?>/,
+        relevance: 10
+      },
+      {
+        className: 'tag',
+        begin: '</?', end: '/?>',
+        contains: [
+          {
+            className: 'title', begin: /[^ \/><\n\t]+/, relevance: 0
+          },
+          TAG_INTERNALS
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('asciidoc', function(hljs) {
+  return {
+    aliases: ['adoc'],
+    contains: [
+      // block comment
+      hljs.COMMENT(
+        '^/{4,}\\n',
+        '\\n/{4,}$',
+        // can also be done as...
+        //'^/{4,}$',
+        //'^/{4,}$',
+        {
+          relevance: 10
+        }
+      ),
+      // line comment
+      hljs.COMMENT(
+        '^//',
+        '$',
+        {
+          relevance: 0
+        }
+      ),
+      // title
+      {
+        className: 'title',
+        begin: '^\\.\\w.*$'
+      },
+      // example, admonition & sidebar blocks
+      {
+        begin: '^[=\\*]{4,}\\n',
+        end: '\\n^[=\\*]{4,}$',
+        relevance: 10
+      },
+      // headings
+      {
+        className: 'header',
+        begin: '^(={1,5}) .+?( \\1)?$',
+        relevance: 10
+      },
+      {
+        className: 'header',
+        begin: '^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$',
+        relevance: 10
+      },
+      // document attributes
+      {
+        className: 'attribute',
+        begin: '^:.+?:',
+        end: '\\s',
+        excludeEnd: true,
+        relevance: 10
+      },
+      // block attributes
+      {
+        className: 'attribute',
+        begin: '^\\[.+?\\]$',
+        relevance: 0
+      },
+      // quoteblocks
+      {
+        className: 'blockquote',
+        begin: '^_{4,}\\n',
+        end: '\\n_{4,}$',
+        relevance: 10
+      },
+      // listing and literal blocks
+      {
+        className: 'code',
+        begin: '^[\\-\\.]{4,}\\n',
+        end: '\\n[\\-\\.]{4,}$',
+        relevance: 10
+      },
+      // passthrough blocks
+      {
+        begin: '^\\+{4,}\\n',
+        end: '\\n\\+{4,}$',
+        contains: [
+          {
+            begin: '<', end: '>',
+            subLanguage: 'xml',
+            relevance: 0
+          }
+        ],
+        relevance: 10
+      },
+      // lists (can only capture indicators)
+      {
+        className: 'bullet',
+        begin: '^(\\*+|\\-+|\\.+|[^\\n]+?::)\\s+'
+      },
+      // admonition
+      {
+        className: 'label',
+        begin: '^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+',
+        relevance: 10
+      },
+      // inline strong
+      {
+        className: 'strong',
+        // must not follow a word character or be followed by an asterisk or space
+        begin: '\\B\\*(?![\\*\\s])',
+        end: '(\\n{2}|\\*)',
+        // allow escaped asterisk followed by word char
+        contains: [
+          {
+            begin: '\\\\*\\w',
+            relevance: 0
+          }
+        ]
+      },
+      // inline emphasis
+      {
+        className: 'emphasis',
+        // must not follow a word character or be followed by a single quote or space
+        begin: '\\B\'(?![\'\\s])',
+        end: '(\\n{2}|\')',
+        // allow escaped single quote followed by word char
+        contains: [
+          {
+            begin: '\\\\\'\\w',
+            relevance: 0
+          }
+        ],
+        relevance: 0
+      },
+      // inline emphasis (alt)
+      {
+        className: 'emphasis',
+        // must not follow a word character or be followed by an underline or space
+        begin: '_(?![_\\s])',
+        end: '(\\n{2}|_)',
+        relevance: 0
+      },
+      // inline smart quotes
+      {
+        className: 'smartquote',
+        variants: [
+          {begin: "``.+?''"},
+          {begin: "`.+?'"}
+        ]
+      },
+      // inline code snippets (TODO should get same treatment as strong and emphasis)
+      {
+        className: 'code',
+        begin: '(`.+?`|\\+.+?\\+)',
+        relevance: 0
+      },
+      // indented literal block
+      {
+        className: 'code',
+        begin: '^[ \\t]',
+        end: '$',
+        relevance: 0
+      },
+      // horizontal rules
+      {
+        className: 'horizontal_rule',
+        begin: '^\'{3,}[ \\t]*$',
+        relevance: 10
+      },
+      // images and links
+      {
+        begin: '(link:)?(http|https|ftp|file|irc|image:?):\\S+\\[.*?\\]',
+        returnBegin: true,
+        contains: [
+          {
+            //className: 'macro',
+            begin: '(link|image:?):',
+            relevance: 0
+          },
+          {
+            className: 'link_url',
+            begin: '\\w',
+            end: '[^\\[]+',
+            relevance: 0
+          },
+          {
+            className: 'link_label',
+            begin: '\\[',
+            end: '\\]',
+            excludeBegin: true,
+            excludeEnd: true,
+            relevance: 0
+          }
+        ],
+        relevance: 10
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('aspectj', function (hljs) {
+  var KEYWORDS =
+    'false synchronized int abstract float private char boolean static null if const ' +
+    'for true while long throw strictfp finally protected import native final return void ' +
+    'enum else extends implements break transient new catch instanceof byte super volatile case ' +
+    'assert short package default double public try this switch continue throws privileged ' +
+    'aspectOf adviceexecution proceed cflowbelow cflow initialization preinitialization ' +
+    'staticinitialization withincode target within execution getWithinTypeName handler ' +
+    'thisJoinPoint thisJoinPointStaticPart thisEnclosingJoinPointStaticPart declare parents '+
+    'warning error soft precedence thisAspectInstance';
+  var SHORTKEYS = 'get set args call';
+  return {
+    keywords : KEYWORDS,
+    illegal : /<\/|#/,
+    contains : [
+      hljs.COMMENT(
+        '/\\*\\*',
+        '\\*/',
+        {
+          relevance : 0,
+          contains : [{
+            className : 'doctag',
+            begin : '@[A-Za-z]+'
+          }]
+        }
+      ),
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      {
+        className : 'aspect',
+        beginKeywords : 'aspect',
+        end : /[{;=]/,
+        excludeEnd : true,
+        illegal : /[:;"\[\]]/,
+        contains : [
+          {
+            beginKeywords : 'extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton'
+          },
+          hljs.UNDERSCORE_TITLE_MODE,
+          {
+            begin : /\([^\)]*/,
+            end : /[)]+/,
+            keywords : KEYWORDS + ' ' + SHORTKEYS,
+            excludeEnd : false
+          }
+        ]
+      },
+      {
+        className : 'class',
+        beginKeywords : 'class interface',
+        end : /[{;=]/,
+        excludeEnd : true,
+        relevance: 0,
+        keywords : 'class interface',
+        illegal : /[:"\[\]]/,
+        contains : [
+          {beginKeywords : 'extends implements'},
+          hljs.UNDERSCORE_TITLE_MODE
+        ]
+      },
+      {
+        // AspectJ Constructs
+        beginKeywords : 'pointcut after before around throwing returning',
+        end : /[)]/,
+        excludeEnd : false,
+        illegal : /["\[\]]/,
+        contains : [
+          {
+            begin : hljs.UNDERSCORE_IDENT_RE + '\\s*\\(',
+            returnBegin : true,
+            contains : [hljs.UNDERSCORE_TITLE_MODE]
+          }
+        ]
+      },
+      {
+        begin : /[:]/,
+        returnBegin : true,
+        end : /[{;]/,
+        relevance: 0,
+        excludeEnd : false,
+        keywords : KEYWORDS,
+        illegal : /["\[\]]/,
+        contains : [
+          {
+            begin : hljs.UNDERSCORE_IDENT_RE + '\\s*\\(',
+            keywords : KEYWORDS + ' ' + SHORTKEYS
+          },
+          hljs.QUOTE_STRING_MODE
+        ]
+      },
+      {
+        // this prevents 'new Name(...), or throw ...' from being recognized as a function definition
+        beginKeywords : 'new throw',
+        relevance : 0
+      },
+      {
+        // the function class is a bit different for AspectJ compared to the Java language
+        className : 'function',
+        begin : /\w+ +\w+(\.)?\w+\s*\([^\)]*\)\s*((throws)[\w\s,]+)?[\{;]/,
+        returnBegin : true,
+        end : /[{;=]/,
+        keywords : KEYWORDS,
+        excludeEnd : true,
+        contains : [
+          {
+            begin : hljs.UNDERSCORE_IDENT_RE + '\\s*\\(',
+            returnBegin : true,
+            relevance: 0,
+            contains : [hljs.UNDERSCORE_TITLE_MODE]
+          },
+          {
+            className : 'params',
+            begin : /\(/, end : /\)/,
+            relevance: 0,
+            keywords : KEYWORDS,
+            contains : [
+              hljs.APOS_STRING_MODE,
+              hljs.QUOTE_STRING_MODE,
+              hljs.C_NUMBER_MODE,
+              hljs.C_BLOCK_COMMENT_MODE
+            ]
+          },
+          hljs.C_LINE_COMMENT_MODE,
+          hljs.C_BLOCK_COMMENT_MODE
+        ]
+      },
+      hljs.C_NUMBER_MODE,
+      {
+        // annotation is also used in this language
+        className : 'annotation',
+        begin : '@[A-Za-z]+'
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('autohotkey', function(hljs) {
+  var BACKTICK_ESCAPE = {
+    className: 'escape',
+    begin: '`[\\s\\S]'
+  };
+  var COMMENTS = hljs.COMMENT(
+    ';',
+    '$',
+    {
+      relevance: 0
+    }
+  );
+  var BUILT_IN = [
+    {
+      className: 'built_in',
+      begin: 'A_[a-zA-Z0-9]+'
+    },
+    {
+      className: 'built_in',
+      beginKeywords: 'ComSpec Clipboard ClipboardAll ErrorLevel'
+    }
+  ];
+
+  return {
+    case_insensitive: true,
+    keywords: {
+      keyword: 'Break Continue Else Gosub If Loop Return While',
+      literal: 'A true false NOT AND OR'
+    },
+    contains: BUILT_IN.concat([
+      BACKTICK_ESCAPE,
+      hljs.inherit(hljs.QUOTE_STRING_MODE, {contains: [BACKTICK_ESCAPE]}),
+      COMMENTS,
+      {
+        className: 'number',
+        begin: hljs.NUMBER_RE,
+        relevance: 0
+      },
+      {
+        className: 'var_expand', // FIXME
+        begin: '%', end: '%',
+        illegal: '\\n',
+        contains: [BACKTICK_ESCAPE]
+      },
+      {
+        className: 'label',
+        contains: [BACKTICK_ESCAPE],
+        variants: [
+          {begin: '^[^\\n";]+::(?!=)'},
+          {begin: '^[^\\n";]+:(?!=)', relevance: 0} // zero relevance as it catches a lot of things
+                                                    // followed by a single ':' in many languages
+        ]
+      },
+      {
+        // consecutive commas, not for highlighting but just for relevance
+        begin: ',\\s*,',
+        relevance: 10
+      }
+    ])
+  }
+});
+
+hljs.registerLanguage('autoit', function(hljs) {
+    var KEYWORDS = 'ByRef Case Const ContinueCase ContinueLoop ' +
+        'Default Dim Do Else ElseIf EndFunc EndIf EndSelect ' +
+        'EndSwitch EndWith Enum Exit ExitLoop For Func ' +
+        'Global If In Local Next ReDim Return Select Static ' +
+        'Step Switch Then To Until Volatile WEnd While With',
+
+        LITERAL = 'True False And Null Not Or',
+
+        BUILT_IN = 'Abs ACos AdlibRegister AdlibUnRegister Asc AscW ASin ' +
+        'Assign ATan AutoItSetOption AutoItWinGetTitle ' +
+        'AutoItWinSetTitle Beep Binary BinaryLen BinaryMid ' +
+        'BinaryToString BitAND BitNOT BitOR BitRotate BitShift ' +
+        'BitXOR BlockInput Break Call CDTray Ceiling Chr ' +
+        'ChrW ClipGet ClipPut ConsoleRead ConsoleWrite ' +
+        'ConsoleWriteError ControlClick ControlCommand ' +
+        'ControlDisable ControlEnable ControlFocus ControlGetFocus ' +
+        'ControlGetHandle ControlGetPos ControlGetText ControlHide ' +
+        'ControlListView ControlMove ControlSend ControlSetText ' +
+        'ControlShow ControlTreeView Cos Dec DirCopy DirCreate ' +
+        'DirGetSize DirMove DirRemove DllCall DllCallAddress ' +
+        'DllCallbackFree DllCallbackGetPtr DllCallbackRegister ' +
+        'DllClose DllOpen DllStructCreate DllStructGetData ' +
+        'DllStructGetPtr DllStructGetSize DllStructSetData ' +
+        'DriveGetDrive DriveGetFileSystem DriveGetLabel ' +
+        'DriveGetSerial DriveGetType DriveMapAdd DriveMapDel ' +
+        'DriveMapGet DriveSetLabel DriveSpaceFree DriveSpaceTotal ' +
+        'DriveStatus EnvGet EnvSet EnvUpdate Eval Execute Exp ' +
+        'FileChangeDir FileClose FileCopy FileCreateNTFSLink ' +
+        'FileCreateShortcut FileDelete FileExists FileFindFirstFile ' +
+        'FileFindNextFile FileFlush FileGetAttrib FileGetEncoding ' +
+        'FileGetLongName FileGetPos FileGetShortcut FileGetShortName ' +
+        'FileGetSize FileGetTime FileGetVersion FileInstall ' +
+        'FileMove FileOpen FileOpenDialog FileRead FileReadLine ' +
+        'FileReadToArray FileRecycle FileRecycleEmpty FileSaveDialog ' +
+        'FileSelectFolder FileSetAttrib FileSetEnd FileSetPos ' +
+        'FileSetTime FileWrite FileWriteLine Floor FtpSetProxy ' +
+        'FuncName GUICreate GUICtrlCreateAvi GUICtrlCreateButton ' +
+        'GUICtrlCreateCheckbox GUICtrlCreateCombo ' +
+        'GUICtrlCreateContextMenu GUICtrlCreateDate GUICtrlCreateDummy ' +
+        'GUICtrlCreateEdit GUICtrlCreateGraphic GUICtrlCreateGroup ' +
+        'GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel ' +
+        'GUICtrlCreateList GUICtrlCreateListView ' +
+        'GUICtrlCreateListViewItem GUICtrlCreateMenu ' +
+        'GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj ' +
+        'GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio ' +
+        'GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem ' +
+        'GUICtrlCreateTreeView GUICtrlCreateTreeViewItem ' +
+        'GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetHandle ' +
+        'GUICtrlGetState GUICtrlRead GUICtrlRecvMsg ' +
+        'GUICtrlRegisterListViewSort GUICtrlSendMsg GUICtrlSendToDummy ' +
+        'GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor ' +
+        'GUICtrlSetData GUICtrlSetDefBkColor GUICtrlSetDefColor ' +
+        'GUICtrlSetFont GUICtrlSetGraphic GUICtrlSetImage ' +
+        'GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos ' +
+        'GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle ' +
+        'GUICtrlSetTip GUIDelete GUIGetCursorInfo GUIGetMsg ' +
+        'GUIGetStyle GUIRegisterMsg GUISetAccelerators GUISetBkColor ' +
+        'GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon ' +
+        'GUISetOnEvent GUISetState GUISetStyle GUIStartGroup ' +
+        'GUISwitch Hex HotKeySet HttpSetProxy HttpSetUserAgent ' +
+        'HWnd InetClose InetGet InetGetInfo InetGetSize InetRead ' +
+        'IniDelete IniRead IniReadSection IniReadSectionNames ' +
+        'IniRenameSection IniWrite IniWriteSection InputBox Int ' +
+        'IsAdmin IsArray IsBinary IsBool IsDeclared IsDllStruct ' +
+        'IsFloat IsFunc IsHWnd IsInt IsKeyword IsNumber IsObj ' +
+        'IsPtr IsString Log MemGetStats Mod MouseClick ' +
+        'MouseClickDrag MouseDown MouseGetCursor MouseGetPos ' +
+        'MouseMove MouseUp MouseWheel MsgBox Number ObjCreate ' +
+        'ObjCreateInterface ObjEvent ObjGet ObjName ' +
+        'OnAutoItExitRegister OnAutoItExitUnRegister Opt Ping ' +
+        'PixelChecksum PixelGetColor PixelSearch ProcessClose ' +
+        'ProcessExists ProcessGetStats ProcessList ' +
+        'ProcessSetPriority ProcessWait ProcessWaitClose ProgressOff ' +
+        'ProgressOn ProgressSet Ptr Random RegDelete RegEnumKey ' +
+        'RegEnumVal RegRead RegWrite Round Run RunAs RunAsWait ' +
+        'RunWait Send SendKeepActive SetError SetExtended ' +
+        'ShellExecute ShellExecuteWait Shutdown Sin Sleep ' +
+        'SoundPlay SoundSetWaveVolume SplashImageOn SplashOff ' +
+        'SplashTextOn Sqrt SRandom StatusbarGetText StderrRead ' +
+        'StdinWrite StdioClose StdoutRead String StringAddCR ' +
+        'StringCompare StringFormat StringFromASCIIArray StringInStr ' +
+        'StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit ' +
+        'StringIsFloat StringIsInt StringIsLower StringIsSpace ' +
+        'StringIsUpper StringIsXDigit StringLeft StringLen ' +
+        'StringLower StringMid StringRegExp StringRegExpReplace ' +
+        'StringReplace StringReverse StringRight StringSplit ' +
+        'StringStripCR StringStripWS StringToASCIIArray ' +
+        'StringToBinary StringTrimLeft StringTrimRight StringUpper ' +
+        'Tan TCPAccept TCPCloseSocket TCPConnect TCPListen ' +
+        'TCPNameToIP TCPRecv TCPSend TCPShutdown TCPStartup ' +
+        'TimerDiff TimerInit ToolTip TrayCreateItem TrayCreateMenu ' +
+        'TrayGetMsg TrayItemDelete TrayItemGetHandle ' +
+        'TrayItemGetState TrayItemGetText TrayItemSetOnEvent ' +
+        'TrayItemSetState TrayItemSetText TraySetClick TraySetIcon ' +
+        'TraySetOnEvent TraySetPauseIcon TraySetState TraySetToolTip ' +
+        'TrayTip UBound UDPBind UDPCloseSocket UDPOpen UDPRecv ' +
+        'UDPSend UDPShutdown UDPStartup VarGetType WinActivate ' +
+        'WinActive WinClose WinExists WinFlash WinGetCaretPos ' +
+        'WinGetClassList WinGetClientSize WinGetHandle WinGetPos ' +
+        'WinGetProcess WinGetState WinGetText WinGetTitle WinKill ' +
+        'WinList WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo ' +
+        'WinMove WinSetOnTop WinSetState WinSetTitle WinSetTrans ' +
+        'WinWait WinWaitActive WinWaitClose WinWaitNotActive ' +
+        'Array1DToHistogram ArrayAdd ArrayBinarySearch ' +
+        'ArrayColDelete ArrayColInsert ArrayCombinations ' +
+        'ArrayConcatenate ArrayDelete ArrayDisplay ArrayExtract ' +
+        'ArrayFindAll ArrayInsert ArrayMax ArrayMaxIndex ArrayMin ' +
+        'ArrayMinIndex ArrayPermute ArrayPop ArrayPush ' +
+        'ArrayReverse ArraySearch ArrayShuffle ArraySort ArraySwap ' +
+        'ArrayToClip ArrayToString ArrayTranspose ArrayTrim ' +
+        'ArrayUnique Assert ChooseColor ChooseFont ' +
+        'ClipBoard_ChangeChain ClipBoard_Close ClipBoard_CountFormats ' +
+        'ClipBoard_Empty ClipBoard_EnumFormats ClipBoard_FormatStr ' +
+        'ClipBoard_GetData ClipBoard_GetDataEx ClipBoard_GetFormatName ' +
+        'ClipBoard_GetOpenWindow ClipBoard_GetOwner ' +
+        'ClipBoard_GetPriorityFormat ClipBoard_GetSequenceNumber ' +
+        'ClipBoard_GetViewer ClipBoard_IsFormatAvailable ' +
+        'ClipBoard_Open ClipBoard_RegisterFormat ClipBoard_SetData ' +
+        'ClipBoard_SetDataEx ClipBoard_SetViewer ClipPutFile ' +
+        'ColorConvertHSLtoRGB ColorConvertRGBtoHSL ColorGetBlue ' +
+        'ColorGetCOLORREF ColorGetGreen ColorGetRed ColorGetRGB ' +
+        'ColorSetCOLORREF ColorSetRGB Crypt_DecryptData ' +
+        'Crypt_DecryptFile Crypt_DeriveKey Crypt_DestroyKey ' +
+        'Crypt_EncryptData Crypt_EncryptFile Crypt_GenRandom ' +
+        'Crypt_HashData Crypt_HashFile Crypt_Shutdown Crypt_Startup ' +
+        'DateAdd DateDayOfWeek DateDaysInMonth DateDiff ' +
+        'DateIsLeapYear DateIsValid DateTimeFormat DateTimeSplit ' +
+        'DateToDayOfWeek DateToDayOfWeekISO DateToDayValue ' +
+        'DateToMonth Date_Time_CompareFileTime ' +
+        'Date_Time_DOSDateTimeToArray Date_Time_DOSDateTimeToFileTime ' +
+        'Date_Time_DOSDateTimeToStr Date_Time_DOSDateToArray ' +
+        'Date_Time_DOSDateToStr Date_Time_DOSTimeToArray ' +
+        'Date_Time_DOSTimeToStr Date_Time_EncodeFileTime ' +
+        'Date_Time_EncodeSystemTime Date_Time_FileTimeToArray ' +
+        'Date_Time_FileTimeToDOSDateTime ' +
+        'Date_Time_FileTimeToLocalFileTime Date_Time_FileTimeToStr ' +
+        'Date_Time_FileTimeToSystemTime Date_Time_GetFileTime ' +
+        'Date_Time_GetLocalTime Date_Time_GetSystemTime ' +
+        'Date_Time_GetSystemTimeAdjustment ' +
+        'Date_Time_GetSystemTimeAsFileTime Date_Time_GetSystemTimes ' +
+        'Date_Time_GetTickCount Date_Time_GetTimeZoneInformation ' +
+        'Date_Time_LocalFileTimeToFileTime Date_Time_SetFileTime ' +
+        'Date_Time_SetLocalTime Date_Time_SetSystemTime ' +
+        'Date_Time_SetSystemTimeAdjustment ' +
+        'Date_Time_SetTimeZoneInformation Date_Time_SystemTimeToArray ' +
+        'Date_Time_SystemTimeToDateStr Date_Time_SystemTimeToDateTimeStr ' +
+        'Date_Time_SystemTimeToFileTime Date_Time_SystemTimeToTimeStr ' +
+        'Date_Time_SystemTimeToTzSpecificLocalTime ' +
+        'Date_Time_TzSpecificLocalTimeToSystemTime DayValueToDate ' +
+        'DebugBugReportEnv DebugCOMError DebugOut DebugReport ' +
+        'DebugReportEx DebugReportVar DebugSetup Degree ' +
+        'EventLog__Backup EventLog__Clear EventLog__Close ' +
+        'EventLog__Count EventLog__DeregisterSource EventLog__Full ' +
+        'EventLog__Notify EventLog__Oldest EventLog__Open ' +
+        'EventLog__OpenBackup EventLog__Read EventLog__RegisterSource ' +
+        'EventLog__Report Excel_BookAttach Excel_BookClose ' +
+        'Excel_BookList Excel_BookNew Excel_BookOpen ' +
+        'Excel_BookOpenText Excel_BookSave Excel_BookSaveAs ' +
+        'Excel_Close Excel_ColumnToLetter Excel_ColumnToNumber ' +
+        'Excel_ConvertFormula Excel_Export Excel_FilterGet ' +
+        'Excel_FilterSet Excel_Open Excel_PictureAdd Excel_Print ' +
+        'Excel_RangeCopyPaste Excel_RangeDelete Excel_RangeFind ' +
+        'Excel_RangeInsert Excel_RangeLinkAddRemove Excel_RangeRead ' +
+        'Excel_RangeReplace Excel_RangeSort Excel_RangeValidate ' +
+        'Excel_RangeWrite Excel_SheetAdd Excel_SheetCopyMove ' +
+        'Excel_SheetDelete Excel_SheetList FileCountLines FileCreate ' +
+        'FileListToArray FileListToArrayRec FilePrint ' +
+        'FileReadToArray FileWriteFromArray FileWriteLog ' +
+        'FileWriteToLine FTP_Close FTP_Command FTP_Connect ' +
+        'FTP_DecodeInternetStatus FTP_DirCreate FTP_DirDelete ' +
+        'FTP_DirGetCurrent FTP_DirPutContents FTP_DirSetCurrent ' +
+        'FTP_FileClose FTP_FileDelete FTP_FileGet FTP_FileGetSize ' +
+        'FTP_FileOpen FTP_FilePut FTP_FileRead FTP_FileRename ' +
+        'FTP_FileTimeLoHiToStr FTP_FindFileClose FTP_FindFileFirst ' +
+        'FTP_FindFileNext FTP_GetLastResponseInfo FTP_ListToArray ' +
+        'FTP_ListToArray2D FTP_ListToArrayEx FTP_Open ' +
+        'FTP_ProgressDownload FTP_ProgressUpload FTP_SetStatusCallback ' +
+        'GDIPlus_ArrowCapCreate GDIPlus_ArrowCapDispose ' +
+        'GDIPlus_ArrowCapGetFillState GDIPlus_ArrowCapGetHeight ' +
+        'GDIPlus_ArrowCapGetMiddleInset GDIPlus_ArrowCapGetWidth ' +
+        'GDIPlus_ArrowCapSetFillState GDIPlus_ArrowCapSetHeight ' +
+        'GDIPlus_ArrowCapSetMiddleInset GDIPlus_ArrowCapSetWidth ' +
+        'GDIPlus_BitmapApplyEffect GDIPlus_BitmapApplyEffectEx ' +
+        'GDIPlus_BitmapCloneArea GDIPlus_BitmapConvertFormat ' +
+        'GDIPlus_BitmapCreateApplyEffect ' +
+        'GDIPlus_BitmapCreateApplyEffectEx ' +
+        'GDIPlus_BitmapCreateDIBFromBitmap GDIPlus_BitmapCreateFromFile ' +
+        'GDIPlus_BitmapCreateFromGraphics ' +
+        'GDIPlus_BitmapCreateFromHBITMAP GDIPlus_BitmapCreateFromHICON ' +
+        'GDIPlus_BitmapCreateFromHICON32 GDIPlus_BitmapCreateFromMemory ' +
+        'GDIPlus_BitmapCreateFromResource GDIPlus_BitmapCreateFromScan0 ' +
+        'GDIPlus_BitmapCreateFromStream ' +
+        'GDIPlus_BitmapCreateHBITMAPFromBitmap GDIPlus_BitmapDispose ' +
+        'GDIPlus_BitmapGetHistogram GDIPlus_BitmapGetHistogramEx ' +
+        'GDIPlus_BitmapGetHistogramSize GDIPlus_BitmapGetPixel ' +
+        'GDIPlus_BitmapLockBits GDIPlus_BitmapSetPixel ' +
+        'GDIPlus_BitmapUnlockBits GDIPlus_BrushClone ' +
+        'GDIPlus_BrushCreateSolid GDIPlus_BrushDispose ' +
+        'GDIPlus_BrushGetSolidColor GDIPlus_BrushGetType ' +
+        'GDIPlus_BrushSetSolidColor GDIPlus_ColorMatrixCreate ' +
+        'GDIPlus_ColorMatrixCreateGrayScale ' +
+        'GDIPlus_ColorMatrixCreateNegative ' +
+        'GDIPlus_ColorMatrixCreateSaturation ' +
+        'GDIPlus_ColorMatrixCreateScale ' +
+        'GDIPlus_ColorMatrixCreateTranslate GDIPlus_CustomLineCapClone ' +
+        'GDIPlus_CustomLineCapCreate GDIPlus_CustomLineCapDispose ' +
+        'GDIPlus_CustomLineCapGetStrokeCaps ' +
+        'GDIPlus_CustomLineCapSetStrokeCaps GDIPlus_Decoders ' +
+        'GDIPlus_DecodersGetCount GDIPlus_DecodersGetSize ' +
+        'GDIPlus_DrawImageFX GDIPlus_DrawImageFXEx ' +
+        'GDIPlus_DrawImagePoints GDIPlus_EffectCreate ' +
+        'GDIPlus_EffectCreateBlur GDIPlus_EffectCreateBrightnessContrast ' +
+        'GDIPlus_EffectCreateColorBalance GDIPlus_EffectCreateColorCurve ' +
+        'GDIPlus_EffectCreateColorLUT GDIPlus_EffectCreateColorMatrix ' +
+        'GDIPlus_EffectCreateHueSaturationLightness ' +
+        'GDIPlus_EffectCreateLevels GDIPlus_EffectCreateRedEyeCorrection ' +
+        'GDIPlus_EffectCreateSharpen GDIPlus_EffectCreateTint ' +
+        'GDIPlus_EffectDispose GDIPlus_EffectGetParameters ' +
+        'GDIPlus_EffectSetParameters GDIPlus_Encoders ' +
+        'GDIPlus_EncodersGetCLSID GDIPlus_EncodersGetCount ' +
+        'GDIPlus_EncodersGetParamList GDIPlus_EncodersGetParamListSize ' +
+        'GDIPlus_EncodersGetSize GDIPlus_FontCreate ' +
+        'GDIPlus_FontDispose GDIPlus_FontFamilyCreate ' +
+        'GDIPlus_FontFamilyCreateFromCollection ' +
+        'GDIPlus_FontFamilyDispose GDIPlus_FontFamilyGetCellAscent ' +
+        'GDIPlus_FontFamilyGetCellDescent GDIPlus_FontFamilyGetEmHeight ' +
+        'GDIPlus_FontFamilyGetLineSpacing GDIPlus_FontGetHeight ' +
+        'GDIPlus_FontPrivateAddFont GDIPlus_FontPrivateAddMemoryFont ' +
+        'GDIPlus_FontPrivateCollectionDispose ' +
+        'GDIPlus_FontPrivateCreateCollection GDIPlus_GraphicsClear ' +
+        'GDIPlus_GraphicsCreateFromHDC GDIPlus_GraphicsCreateFromHWND ' +
+        'GDIPlus_GraphicsDispose GDIPlus_GraphicsDrawArc ' +
+        'GDIPlus_GraphicsDrawBezier GDIPlus_GraphicsDrawClosedCurve ' +
+        'GDIPlus_GraphicsDrawClosedCurve2 GDIPlus_GraphicsDrawCurve ' +
+        'GDIPlus_GraphicsDrawCurve2 GDIPlus_GraphicsDrawEllipse ' +
+        'GDIPlus_GraphicsDrawImage GDIPlus_GraphicsDrawImagePointsRect ' +
+        'GDIPlus_GraphicsDrawImageRect GDIPlus_GraphicsDrawImageRectRect ' +
+        'GDIPlus_GraphicsDrawLine GDIPlus_GraphicsDrawPath ' +
+        'GDIPlus_GraphicsDrawPie GDIPlus_GraphicsDrawPolygon ' +
+        'GDIPlus_GraphicsDrawRect GDIPlus_GraphicsDrawString ' +
+        'GDIPlus_GraphicsDrawStringEx GDIPlus_GraphicsFillClosedCurve ' +
+        'GDIPlus_GraphicsFillClosedCurve2 GDIPlus_GraphicsFillEllipse ' +
+        'GDIPlus_GraphicsFillPath GDIPlus_GraphicsFillPie ' +
+        'GDIPlus_GraphicsFillPolygon GDIPlus_GraphicsFillRect ' +
+        'GDIPlus_GraphicsFillRegion GDIPlus_GraphicsGetCompositingMode ' +
+        'GDIPlus_GraphicsGetCompositingQuality GDIPlus_GraphicsGetDC ' +
+        'GDIPlus_GraphicsGetInterpolationMode ' +
+        'GDIPlus_GraphicsGetSmoothingMode GDIPlus_GraphicsGetTransform ' +
+        'GDIPlus_GraphicsMeasureCharacterRanges ' +
+        'GDIPlus_GraphicsMeasureString GDIPlus_GraphicsReleaseDC ' +
+        'GDIPlus_GraphicsResetClip GDIPlus_GraphicsResetTransform ' +
+        'GDIPlus_GraphicsRestore GDIPlus_GraphicsRotateTransform ' +
+        'GDIPlus_GraphicsSave GDIPlus_GraphicsScaleTransform ' +
+        'GDIPlus_GraphicsSetClipPath GDIPlus_GraphicsSetClipRect ' +
+        'GDIPlus_GraphicsSetClipRegion ' +
+        'GDIPlus_GraphicsSetCompositingMode ' +
+        'GDIPlus_GraphicsSetCompositingQuality ' +
+        'GDIPlus_GraphicsSetInterpolationMode ' +
+        'GDIPlus_GraphicsSetPixelOffsetMode ' +
+        'GDIPlus_GraphicsSetSmoothingMode ' +
+        'GDIPlus_GraphicsSetTextRenderingHint ' +
+        'GDIPlus_GraphicsSetTransform GDIPlus_GraphicsTransformPoints ' +
+        'GDIPlus_GraphicsTranslateTransform GDIPlus_HatchBrushCreate ' +
+        'GDIPlus_HICONCreateFromBitmap GDIPlus_ImageAttributesCreate ' +
+        'GDIPlus_ImageAttributesDispose ' +
+        'GDIPlus_ImageAttributesSetColorKeys ' +
+        'GDIPlus_ImageAttributesSetColorMatrix GDIPlus_ImageDispose ' +
+        'GDIPlus_ImageGetDimension GDIPlus_ImageGetFlags ' +
+        'GDIPlus_ImageGetGraphicsContext GDIPlus_ImageGetHeight ' +
+        'GDIPlus_ImageGetHorizontalResolution ' +
+        'GDIPlus_ImageGetPixelFormat GDIPlus_ImageGetRawFormat ' +
+        'GDIPlus_ImageGetThumbnail GDIPlus_ImageGetType ' +
+        'GDIPlus_ImageGetVerticalResolution GDIPlus_ImageGetWidth ' +
+        'GDIPlus_ImageLoadFromFile GDIPlus_ImageLoadFromStream ' +
+        'GDIPlus_ImageResize GDIPlus_ImageRotateFlip ' +
+        'GDIPlus_ImageSaveToFile GDIPlus_ImageSaveToFileEx ' +
+        'GDIPlus_ImageSaveToStream GDIPlus_ImageScale ' +
+        'GDIPlus_LineBrushCreate GDIPlus_LineBrushCreateFromRect ' +
+        'GDIPlus_LineBrushCreateFromRectWithAngle ' +
+        'GDIPlus_LineBrushGetColors GDIPlus_LineBrushGetRect ' +
+        'GDIPlus_LineBrushMultiplyTransform ' +
+        'GDIPlus_LineBrushResetTransform GDIPlus_LineBrushSetBlend ' +
+        'GDIPlus_LineBrushSetColors GDIPlus_LineBrushSetGammaCorrection ' +
+        'GDIPlus_LineBrushSetLinearBlend GDIPlus_LineBrushSetPresetBlend ' +
+        'GDIPlus_LineBrushSetSigmaBlend GDIPlus_LineBrushSetTransform ' +
+        'GDIPlus_MatrixClone GDIPlus_MatrixCreate ' +
+        'GDIPlus_MatrixDispose GDIPlus_MatrixGetElements ' +
+        'GDIPlus_MatrixInvert GDIPlus_MatrixMultiply ' +
+        'GDIPlus_MatrixRotate GDIPlus_MatrixScale ' +
+        'GDIPlus_MatrixSetElements GDIPlus_MatrixShear ' +
+        'GDIPlus_MatrixTransformPoints GDIPlus_MatrixTranslate ' +
+        'GDIPlus_PaletteInitialize GDIPlus_ParamAdd GDIPlus_ParamInit ' +
+        'GDIPlus_ParamSize GDIPlus_PathAddArc GDIPlus_PathAddBezier ' +
+        'GDIPlus_PathAddClosedCurve GDIPlus_PathAddClosedCurve2 ' +
+        'GDIPlus_PathAddCurve GDIPlus_PathAddCurve2 ' +
+        'GDIPlus_PathAddCurve3 GDIPlus_PathAddEllipse ' +
+        'GDIPlus_PathAddLine GDIPlus_PathAddLine2 GDIPlus_PathAddPath ' +
+        'GDIPlus_PathAddPie GDIPlus_PathAddPolygon ' +
+        'GDIPlus_PathAddRectangle GDIPlus_PathAddString ' +
+        'GDIPlus_PathBrushCreate GDIPlus_PathBrushCreateFromPath ' +
+        'GDIPlus_PathBrushGetCenterPoint GDIPlus_PathBrushGetFocusScales ' +
+        'GDIPlus_PathBrushGetPointCount GDIPlus_PathBrushGetRect ' +
+        'GDIPlus_PathBrushGetWrapMode GDIPlus_PathBrushMultiplyTransform ' +
+        'GDIPlus_PathBrushResetTransform GDIPlus_PathBrushSetBlend ' +
+        'GDIPlus_PathBrushSetCenterColor GDIPlus_PathBrushSetCenterPoint ' +
+        'GDIPlus_PathBrushSetFocusScales ' +
+        'GDIPlus_PathBrushSetGammaCorrection ' +
+        'GDIPlus_PathBrushSetLinearBlend GDIPlus_PathBrushSetPresetBlend ' +
+        'GDIPlus_PathBrushSetSigmaBlend ' +
+        'GDIPlus_PathBrushSetSurroundColor ' +
+        'GDIPlus_PathBrushSetSurroundColorsWithCount ' +
+        'GDIPlus_PathBrushSetTransform GDIPlus_PathBrushSetWrapMode ' +
+        'GDIPlus_PathClone GDIPlus_PathCloseFigure GDIPlus_PathCreate ' +
+        'GDIPlus_PathCreate2 GDIPlus_PathDispose GDIPlus_PathFlatten ' +
+        'GDIPlus_PathGetData GDIPlus_PathGetFillMode ' +
+        'GDIPlus_PathGetLastPoint GDIPlus_PathGetPointCount ' +
+        'GDIPlus_PathGetPoints GDIPlus_PathGetWorldBounds ' +
+        'GDIPlus_PathIsOutlineVisiblePoint GDIPlus_PathIsVisiblePoint ' +
+        'GDIPlus_PathIterCreate GDIPlus_PathIterDispose ' +
+        'GDIPlus_PathIterGetSubpathCount GDIPlus_PathIterNextMarkerPath ' +
+        'GDIPlus_PathIterNextSubpathPath GDIPlus_PathIterRewind ' +
+        'GDIPlus_PathReset GDIPlus_PathReverse GDIPlus_PathSetFillMode ' +
+        'GDIPlus_PathSetMarker GDIPlus_PathStartFigure ' +
+        'GDIPlus_PathTransform GDIPlus_PathWarp GDIPlus_PathWiden ' +
+        'GDIPlus_PathWindingModeOutline GDIPlus_PenCreate ' +
+        'GDIPlus_PenCreate2 GDIPlus_PenDispose GDIPlus_PenGetAlignment ' +
+        'GDIPlus_PenGetColor GDIPlus_PenGetCustomEndCap ' +
+        'GDIPlus_PenGetDashCap GDIPlus_PenGetDashStyle ' +
+        'GDIPlus_PenGetEndCap GDIPlus_PenGetMiterLimit ' +
+        'GDIPlus_PenGetWidth GDIPlus_PenSetAlignment ' +
+        'GDIPlus_PenSetColor GDIPlus_PenSetCustomEndCap ' +
+        'GDIPlus_PenSetDashCap GDIPlus_PenSetDashStyle ' +
+        'GDIPlus_PenSetEndCap GDIPlus_PenSetLineCap ' +
+        'GDIPlus_PenSetLineJoin GDIPlus_PenSetMiterLimit ' +
+        'GDIPlus_PenSetStartCap GDIPlus_PenSetWidth ' +
+        'GDIPlus_RectFCreate GDIPlus_RegionClone ' +
+        'GDIPlus_RegionCombinePath GDIPlus_RegionCombineRect ' +
+        'GDIPlus_RegionCombineRegion GDIPlus_RegionCreate ' +
+        'GDIPlus_RegionCreateFromPath GDIPlus_RegionCreateFromRect ' +
+        'GDIPlus_RegionDispose GDIPlus_RegionGetBounds ' +
+        'GDIPlus_RegionGetHRgn GDIPlus_RegionTransform ' +
+        'GDIPlus_RegionTranslate GDIPlus_Shutdown GDIPlus_Startup ' +
+        'GDIPlus_StringFormatCreate GDIPlus_StringFormatDispose ' +
+        'GDIPlus_StringFormatGetMeasurableCharacterRangeCount ' +
+        'GDIPlus_StringFormatSetAlign GDIPlus_StringFormatSetLineAlign ' +
+        'GDIPlus_StringFormatSetMeasurableCharacterRanges ' +
+        'GDIPlus_TextureCreate GDIPlus_TextureCreate2 ' +
+        'GDIPlus_TextureCreateIA GetIP GUICtrlAVI_Close ' +
+        'GUICtrlAVI_Create GUICtrlAVI_Destroy GUICtrlAVI_IsPlaying ' +
+        'GUICtrlAVI_Open GUICtrlAVI_OpenEx GUICtrlAVI_Play ' +
+        'GUICtrlAVI_Seek GUICtrlAVI_Show GUICtrlAVI_Stop ' +
+        'GUICtrlButton_Click GUICtrlButton_Create ' +
+        'GUICtrlButton_Destroy GUICtrlButton_Enable ' +
+        'GUICtrlButton_GetCheck GUICtrlButton_GetFocus ' +
+        'GUICtrlButton_GetIdealSize GUICtrlButton_GetImage ' +
+        'GUICtrlButton_GetImageList GUICtrlButton_GetNote ' +
+        'GUICtrlButton_GetNoteLength GUICtrlButton_GetSplitInfo ' +
+        'GUICtrlButton_GetState GUICtrlButton_GetText ' +
+        'GUICtrlButton_GetTextMargin GUICtrlButton_SetCheck ' +
+        'GUICtrlButton_SetDontClick GUICtrlButton_SetFocus ' +
+        'GUICtrlButton_SetImage GUICtrlButton_SetImageList ' +
+        'GUICtrlButton_SetNote GUICtrlButton_SetShield ' +
+        'GUICtrlButton_SetSize GUICtrlButton_SetSplitInfo ' +
+        'GUICtrlButton_SetState GUICtrlButton_SetStyle ' +
+        'GUICtrlButton_SetText GUICtrlButton_SetTextMargin ' +
+        'GUICtrlButton_Show GUICtrlComboBoxEx_AddDir ' +
+        'GUICtrlComboBoxEx_AddString GUICtrlComboBoxEx_BeginUpdate ' +
+        'GUICtrlComboBoxEx_Create GUICtrlComboBoxEx_CreateSolidBitMap ' +
+        'GUICtrlComboBoxEx_DeleteString GUICtrlComboBoxEx_Destroy ' +
+        'GUICtrlComboBoxEx_EndUpdate GUICtrlComboBoxEx_FindStringExact ' +
+        'GUICtrlComboBoxEx_GetComboBoxInfo ' +
+        'GUICtrlComboBoxEx_GetComboControl GUICtrlComboBoxEx_GetCount ' +
+        'GUICtrlComboBoxEx_GetCurSel ' +
+        'GUICtrlComboBoxEx_GetDroppedControlRect ' +
+        'GUICtrlComboBoxEx_GetDroppedControlRectEx ' +
+        'GUICtrlComboBoxEx_GetDroppedState ' +
+        'GUICtrlComboBoxEx_GetDroppedWidth ' +
+        'GUICtrlComboBoxEx_GetEditControl GUICtrlComboBoxEx_GetEditSel ' +
+        'GUICtrlComboBoxEx_GetEditText ' +
+        'GUICtrlComboBoxEx_GetExtendedStyle ' +
+        'GUICtrlComboBoxEx_GetExtendedUI GUICtrlComboBoxEx_GetImageList ' +
+        'GUICtrlComboBoxEx_GetItem GUICtrlComboBoxEx_GetItemEx ' +
+        'GUICtrlComboBoxEx_GetItemHeight GUICtrlComboBoxEx_GetItemImage ' +
+        'GUICtrlComboBoxEx_GetItemIndent ' +
+        'GUICtrlComboBoxEx_GetItemOverlayImage ' +
+        'GUICtrlComboBoxEx_GetItemParam ' +
+        'GUICtrlComboBoxEx_GetItemSelectedImage ' +
+        'GUICtrlComboBoxEx_GetItemText GUICtrlComboBoxEx_GetItemTextLen ' +
+        'GUICtrlComboBoxEx_GetList GUICtrlComboBoxEx_GetListArray ' +
+        'GUICtrlComboBoxEx_GetLocale GUICtrlComboBoxEx_GetLocaleCountry ' +
+        'GUICtrlComboBoxEx_GetLocaleLang ' +
+        'GUICtrlComboBoxEx_GetLocalePrimLang ' +
+        'GUICtrlComboBoxEx_GetLocaleSubLang ' +
+        'GUICtrlComboBoxEx_GetMinVisible GUICtrlComboBoxEx_GetTopIndex ' +
+        'GUICtrlComboBoxEx_GetUnicode GUICtrlComboBoxEx_InitStorage ' +
+        'GUICtrlComboBoxEx_InsertString GUICtrlComboBoxEx_LimitText ' +
+        'GUICtrlComboBoxEx_ReplaceEditSel GUICtrlComboBoxEx_ResetContent ' +
+        'GUICtrlComboBoxEx_SetCurSel GUICtrlComboBoxEx_SetDroppedWidth ' +
+        'GUICtrlComboBoxEx_SetEditSel GUICtrlComboBoxEx_SetEditText ' +
+        'GUICtrlComboBoxEx_SetExtendedStyle ' +
+        'GUICtrlComboBoxEx_SetExtendedUI GUICtrlComboBoxEx_SetImageList ' +
+        'GUICtrlComboBoxEx_SetItem GUICtrlComboBoxEx_SetItemEx ' +
+        'GUICtrlComboBoxEx_SetItemHeight GUICtrlComboBoxEx_SetItemImage ' +
+        'GUICtrlComboBoxEx_SetItemIndent ' +
+        'GUICtrlComboBoxEx_SetItemOverlayImage ' +
+        'GUICtrlComboBoxEx_SetItemParam ' +
+        'GUICtrlComboBoxEx_SetItemSelectedImage ' +
+        'GUICtrlComboBoxEx_SetMinVisible GUICtrlComboBoxEx_SetTopIndex ' +
+        'GUICtrlComboBoxEx_SetUnicode GUICtrlComboBoxEx_ShowDropDown ' +
+        'GUICtrlComboBox_AddDir GUICtrlComboBox_AddString ' +
+        'GUICtrlComboBox_AutoComplete GUICtrlComboBox_BeginUpdate ' +
+        'GUICtrlComboBox_Create GUICtrlComboBox_DeleteString ' +
+        'GUICtrlComboBox_Destroy GUICtrlComboBox_EndUpdate ' +
+        'GUICtrlComboBox_FindString GUICtrlComboBox_FindStringExact ' +
+        'GUICtrlComboBox_GetComboBoxInfo GUICtrlComboBox_GetCount ' +
+        'GUICtrlComboBox_GetCueBanner GUICtrlComboBox_GetCurSel ' +
+        'GUICtrlComboBox_GetDroppedControlRect ' +
+        'GUICtrlComboBox_GetDroppedControlRectEx ' +
+        'GUICtrlComboBox_GetDroppedState GUICtrlComboBox_GetDroppedWidth ' +
+        'GUICtrlComboBox_GetEditSel GUICtrlComboBox_GetEditText ' +
+        'GUICtrlComboBox_GetExtendedUI ' +
+        'GUICtrlComboBox_GetHorizontalExtent ' +
+        'GUICtrlComboBox_GetItemHeight GUICtrlComboBox_GetLBText ' +
+        'GUICtrlComboBox_GetLBTextLen GUICtrlComboBox_GetList ' +
+        'GUICtrlComboBox_GetListArray GUICtrlComboBox_GetLocale ' +
+        'GUICtrlComboBox_GetLocaleCountry GUICtrlComboBox_GetLocaleLang ' +
+        'GUICtrlComboBox_GetLocalePrimLang ' +
+        'GUICtrlComboBox_GetLocaleSubLang GUICtrlComboBox_GetMinVisible ' +
+        'GUICtrlComboBox_GetTopIndex GUICtrlComboBox_InitStorage ' +
+        'GUICtrlComboBox_InsertString GUICtrlComboBox_LimitText ' +
+        'GUICtrlComboBox_ReplaceEditSel GUICtrlComboBox_ResetContent ' +
+        'GUICtrlComboBox_SelectString GUICtrlComboBox_SetCueBanner ' +
+        'GUICtrlComboBox_SetCurSel GUICtrlComboBox_SetDroppedWidth ' +
+        'GUICtrlComboBox_SetEditSel GUICtrlComboBox_SetEditText ' +
+        'GUICtrlComboBox_SetExtendedUI ' +
+        'GUICtrlComboBox_SetHorizontalExtent ' +
+        'GUICtrlComboBox_SetItemHeight GUICtrlComboBox_SetMinVisible ' +
+        'GUICtrlComboBox_SetTopIndex GUICtrlComboBox_ShowDropDown ' +
+        'GUICtrlDTP_Create GUICtrlDTP_Destroy GUICtrlDTP_GetMCColor ' +
+        'GUICtrlDTP_GetMCFont GUICtrlDTP_GetMonthCal ' +
+        'GUICtrlDTP_GetRange GUICtrlDTP_GetRangeEx ' +
+        'GUICtrlDTP_GetSystemTime GUICtrlDTP_GetSystemTimeEx ' +
+        'GUICtrlDTP_SetFormat GUICtrlDTP_SetMCColor ' +
+        'GUICtrlDTP_SetMCFont GUICtrlDTP_SetRange ' +
+        'GUICtrlDTP_SetRangeEx GUICtrlDTP_SetSystemTime ' +
+        'GUICtrlDTP_SetSystemTimeEx GUICtrlEdit_AppendText ' +
+        'GUICtrlEdit_BeginUpdate GUICtrlEdit_CanUndo ' +
+        'GUICtrlEdit_CharFromPos GUICtrlEdit_Create ' +
+        'GUICtrlEdit_Destroy GUICtrlEdit_EmptyUndoBuffer ' +
+        'GUICtrlEdit_EndUpdate GUICtrlEdit_Find GUICtrlEdit_FmtLines ' +
+        'GUICtrlEdit_GetCueBanner GUICtrlEdit_GetFirstVisibleLine ' +
+        'GUICtrlEdit_GetLimitText GUICtrlEdit_GetLine ' +
+        'GUICtrlEdit_GetLineCount GUICtrlEdit_GetMargins ' +
+        'GUICtrlEdit_GetModify GUICtrlEdit_GetPasswordChar ' +
+        'GUICtrlEdit_GetRECT GUICtrlEdit_GetRECTEx GUICtrlEdit_GetSel ' +
+        'GUICtrlEdit_GetText GUICtrlEdit_GetTextLen ' +
+        'GUICtrlEdit_HideBalloonTip GUICtrlEdit_InsertText ' +
+        'GUICtrlEdit_LineFromChar GUICtrlEdit_LineIndex ' +
+        'GUICtrlEdit_LineLength GUICtrlEdit_LineScroll ' +
+        'GUICtrlEdit_PosFromChar GUICtrlEdit_ReplaceSel ' +
+        'GUICtrlEdit_Scroll GUICtrlEdit_SetCueBanner ' +
+        'GUICtrlEdit_SetLimitText GUICtrlEdit_SetMargins ' +
+        'GUICtrlEdit_SetModify GUICtrlEdit_SetPasswordChar ' +
+        'GUICtrlEdit_SetReadOnly GUICtrlEdit_SetRECT ' +
+        'GUICtrlEdit_SetRECTEx GUICtrlEdit_SetRECTNP ' +
+        'GUICtrlEdit_SetRectNPEx GUICtrlEdit_SetSel ' +
+        'GUICtrlEdit_SetTabStops GUICtrlEdit_SetText ' +
+        'GUICtrlEdit_ShowBalloonTip GUICtrlEdit_Undo ' +
+        'GUICtrlHeader_AddItem GUICtrlHeader_ClearFilter ' +
+        'GUICtrlHeader_ClearFilterAll GUICtrlHeader_Create ' +
+        'GUICtrlHeader_CreateDragImage GUICtrlHeader_DeleteItem ' +
+        'GUICtrlHeader_Destroy GUICtrlHeader_EditFilter ' +
+        'GUICtrlHeader_GetBitmapMargin GUICtrlHeader_GetImageList ' +
+        'GUICtrlHeader_GetItem GUICtrlHeader_GetItemAlign ' +
+        'GUICtrlHeader_GetItemBitmap GUICtrlHeader_GetItemCount ' +
+        'GUICtrlHeader_GetItemDisplay GUICtrlHeader_GetItemFlags ' +
+        'GUICtrlHeader_GetItemFormat GUICtrlHeader_GetItemImage ' +
+        'GUICtrlHeader_GetItemOrder GUICtrlHeader_GetItemParam ' +
+        'GUICtrlHeader_GetItemRect GUICtrlHeader_GetItemRectEx ' +
+        'GUICtrlHeader_GetItemText GUICtrlHeader_GetItemWidth ' +
+        'GUICtrlHeader_GetOrderArray GUICtrlHeader_GetUnicodeFormat ' +
+        'GUICtrlHeader_HitTest GUICtrlHeader_InsertItem ' +
+        'GUICtrlHeader_Layout GUICtrlHeader_OrderToIndex ' +
+        'GUICtrlHeader_SetBitmapMargin ' +
+        'GUICtrlHeader_SetFilterChangeTimeout ' +
+        'GUICtrlHeader_SetHotDivider GUICtrlHeader_SetImageList ' +
+        'GUICtrlHeader_SetItem GUICtrlHeader_SetItemAlign ' +
+        'GUICtrlHeader_SetItemBitmap GUICtrlHeader_SetItemDisplay ' +
+        'GUICtrlHeader_SetItemFlags GUICtrlHeader_SetItemFormat ' +
+        'GUICtrlHeader_SetItemImage GUICtrlHeader_SetItemOrder ' +
+        'GUICtrlHeader_SetItemParam GUICtrlHeader_SetItemText ' +
+        'GUICtrlHeader_SetItemWidth GUICtrlHeader_SetOrderArray ' +
+        'GUICtrlHeader_SetUnicodeFormat GUICtrlIpAddress_ClearAddress ' +
+        'GUICtrlIpAddress_Create GUICtrlIpAddress_Destroy ' +
+        'GUICtrlIpAddress_Get GUICtrlIpAddress_GetArray ' +
+        'GUICtrlIpAddress_GetEx GUICtrlIpAddress_IsBlank ' +
+        'GUICtrlIpAddress_Set GUICtrlIpAddress_SetArray ' +
+        'GUICtrlIpAddress_SetEx GUICtrlIpAddress_SetFocus ' +
+        'GUICtrlIpAddress_SetFont GUICtrlIpAddress_SetRange ' +
+        'GUICtrlIpAddress_ShowHide GUICtrlListBox_AddFile ' +
+        'GUICtrlListBox_AddString GUICtrlListBox_BeginUpdate ' +
+        'GUICtrlListBox_ClickItem GUICtrlListBox_Create ' +
+        'GUICtrlListBox_DeleteString GUICtrlListBox_Destroy ' +
+        'GUICtrlListBox_Dir GUICtrlListBox_EndUpdate ' +
+        'GUICtrlListBox_FindInText GUICtrlListBox_FindString ' +
+        'GUICtrlListBox_GetAnchorIndex GUICtrlListBox_GetCaretIndex ' +
+        'GUICtrlListBox_GetCount GUICtrlListBox_GetCurSel ' +
+        'GUICtrlListBox_GetHorizontalExtent GUICtrlListBox_GetItemData ' +
+        'GUICtrlListBox_GetItemHeight GUICtrlListBox_GetItemRect ' +
+        'GUICtrlListBox_GetItemRectEx GUICtrlListBox_GetListBoxInfo ' +
+        'GUICtrlListBox_GetLocale GUICtrlListBox_GetLocaleCountry ' +
+        'GUICtrlListBox_GetLocaleLang GUICtrlListBox_GetLocalePrimLang ' +
+        'GUICtrlListBox_GetLocaleSubLang GUICtrlListBox_GetSel ' +
+        'GUICtrlListBox_GetSelCount GUICtrlListBox_GetSelItems ' +
+        'GUICtrlListBox_GetSelItemsText GUICtrlListBox_GetText ' +
+        'GUICtrlListBox_GetTextLen GUICtrlListBox_GetTopIndex ' +
+        'GUICtrlListBox_InitStorage GUICtrlListBox_InsertString ' +
+        'GUICtrlListBox_ItemFromPoint GUICtrlListBox_ReplaceString ' +
+        'GUICtrlListBox_ResetContent GUICtrlListBox_SelectString ' +
+        'GUICtrlListBox_SelItemRange GUICtrlListBox_SelItemRangeEx ' +
+        'GUICtrlListBox_SetAnchorIndex GUICtrlListBox_SetCaretIndex ' +
+        'GUICtrlListBox_SetColumnWidth GUICtrlListBox_SetCurSel ' +
+        'GUICtrlListBox_SetHorizontalExtent GUICtrlListBox_SetItemData ' +
+        'GUICtrlListBox_SetItemHeight GUICtrlListBox_SetLocale ' +
+        'GUICtrlListBox_SetSel GUICtrlListBox_SetTabStops ' +
+        'GUICtrlListBox_SetTopIndex GUICtrlListBox_Sort ' +
+        'GUICtrlListBox_SwapString GUICtrlListBox_UpdateHScroll ' +
+        'GUICtrlListView_AddArray GUICtrlListView_AddColumn ' +
+        'GUICtrlListView_AddItem GUICtrlListView_AddSubItem ' +
+        'GUICtrlListView_ApproximateViewHeight ' +
+        'GUICtrlListView_ApproximateViewRect ' +
+        'GUICtrlListView_ApproximateViewWidth GUICtrlListView_Arrange ' +
+        'GUICtrlListView_BeginUpdate GUICtrlListView_CancelEditLabel ' +
+        'GUICtrlListView_ClickItem GUICtrlListView_CopyItems ' +
+        'GUICtrlListView_Create GUICtrlListView_CreateDragImage ' +
+        'GUICtrlListView_CreateSolidBitMap ' +
+        'GUICtrlListView_DeleteAllItems GUICtrlListView_DeleteColumn ' +
+        'GUICtrlListView_DeleteItem GUICtrlListView_DeleteItemsSelected ' +
+        'GUICtrlListView_Destroy GUICtrlListView_DrawDragImage ' +
+        'GUICtrlListView_EditLabel GUICtrlListView_EnableGroupView ' +
+        'GUICtrlListView_EndUpdate GUICtrlListView_EnsureVisible ' +
+        'GUICtrlListView_FindInText GUICtrlListView_FindItem ' +
+        'GUICtrlListView_FindNearest GUICtrlListView_FindParam ' +
+        'GUICtrlListView_FindText GUICtrlListView_GetBkColor ' +
+        'GUICtrlListView_GetBkImage GUICtrlListView_GetCallbackMask ' +
+        'GUICtrlListView_GetColumn GUICtrlListView_GetColumnCount ' +
+        'GUICtrlListView_GetColumnOrder ' +
+        'GUICtrlListView_GetColumnOrderArray ' +
+        'GUICtrlListView_GetColumnWidth GUICtrlListView_GetCounterPage ' +
+        'GUICtrlListView_GetEditControl ' +
+        'GUICtrlListView_GetExtendedListViewStyle ' +
+        'GUICtrlListView_GetFocusedGroup GUICtrlListView_GetGroupCount ' +
+        'GUICtrlListView_GetGroupInfo ' +
+        'GUICtrlListView_GetGroupInfoByIndex ' +
+        'GUICtrlListView_GetGroupRect ' +
+        'GUICtrlListView_GetGroupViewEnabled GUICtrlListView_GetHeader ' +
+        'GUICtrlListView_GetHotCursor GUICtrlListView_GetHotItem ' +
+        'GUICtrlListView_GetHoverTime GUICtrlListView_GetImageList ' +
+        'GUICtrlListView_GetISearchString GUICtrlListView_GetItem ' +
+        'GUICtrlListView_GetItemChecked GUICtrlListView_GetItemCount ' +
+        'GUICtrlListView_GetItemCut GUICtrlListView_GetItemDropHilited ' +
+        'GUICtrlListView_GetItemEx GUICtrlListView_GetItemFocused ' +
+        'GUICtrlListView_GetItemGroupID GUICtrlListView_GetItemImage ' +
+        'GUICtrlListView_GetItemIndent GUICtrlListView_GetItemParam ' +
+        'GUICtrlListView_GetItemPosition ' +
+        'GUICtrlListView_GetItemPositionX ' +
+        'GUICtrlListView_GetItemPositionY GUICtrlListView_GetItemRect ' +
+        'GUICtrlListView_GetItemRectEx GUICtrlListView_GetItemSelected ' +
+        'GUICtrlListView_GetItemSpacing GUICtrlListView_GetItemSpacingX ' +
+        'GUICtrlListView_GetItemSpacingY GUICtrlListView_GetItemState ' +
+        'GUICtrlListView_GetItemStateImage GUICtrlListView_GetItemText ' +
+        'GUICtrlListView_GetItemTextArray ' +
+        'GUICtrlListView_GetItemTextString GUICtrlListView_GetNextItem ' +
+        'GUICtrlListView_GetNumberOfWorkAreas GUICtrlListView_GetOrigin ' +
+        'GUICtrlListView_GetOriginX GUICtrlListView_GetOriginY ' +
+        'GUICtrlListView_GetOutlineColor ' +
+        'GUICtrlListView_GetSelectedColumn ' +
+        'GUICtrlListView_GetSelectedCount ' +
+        'GUICtrlListView_GetSelectedIndices ' +
+        'GUICtrlListView_GetSelectionMark GUICtrlListView_GetStringWidth ' +
+        'GUICtrlListView_GetSubItemRect GUICtrlListView_GetTextBkColor ' +
+        'GUICtrlListView_GetTextColor GUICtrlListView_GetToolTips ' +
+        'GUICtrlListView_GetTopIndex GUICtrlListView_GetUnicodeFormat ' +
+        'GUICtrlListView_GetView GUICtrlListView_GetViewDetails ' +
+        'GUICtrlListView_GetViewLarge GUICtrlListView_GetViewList ' +
+        'GUICtrlListView_GetViewRect GUICtrlListView_GetViewSmall ' +
+        'GUICtrlListView_GetViewTile GUICtrlListView_HideColumn ' +
+        'GUICtrlListView_HitTest GUICtrlListView_InsertColumn ' +
+        'GUICtrlListView_InsertGroup GUICtrlListView_InsertItem ' +
+        'GUICtrlListView_JustifyColumn GUICtrlListView_MapIDToIndex ' +
+        'GUICtrlListView_MapIndexToID GUICtrlListView_RedrawItems ' +
+        'GUICtrlListView_RegisterSortCallBack ' +
+        'GUICtrlListView_RemoveAllGroups GUICtrlListView_RemoveGroup ' +
+        'GUICtrlListView_Scroll GUICtrlListView_SetBkColor ' +
+        'GUICtrlListView_SetBkImage GUICtrlListView_SetCallBackMask ' +
+        'GUICtrlListView_SetColumn GUICtrlListView_SetColumnOrder ' +
+        'GUICtrlListView_SetColumnOrderArray ' +
+        'GUICtrlListView_SetColumnWidth ' +
+        'GUICtrlListView_SetExtendedListViewStyle ' +
+        'GUICtrlListView_SetGroupInfo GUICtrlListView_SetHotItem ' +
+        'GUICtrlListView_SetHoverTime GUICtrlListView_SetIconSpacing ' +
+        'GUICtrlListView_SetImageList GUICtrlListView_SetItem ' +
+        'GUICtrlListView_SetItemChecked GUICtrlListView_SetItemCount ' +
+        'GUICtrlListView_SetItemCut GUICtrlListView_SetItemDropHilited ' +
+        'GUICtrlListView_SetItemEx GUICtrlListView_SetItemFocused ' +
+        'GUICtrlListView_SetItemGroupID GUICtrlListView_SetItemImage ' +
+        'GUICtrlListView_SetItemIndent GUICtrlListView_SetItemParam ' +
+        'GUICtrlListView_SetItemPosition ' +
+        'GUICtrlListView_SetItemPosition32 ' +
+        'GUICtrlListView_SetItemSelected GUICtrlListView_SetItemState ' +
+        'GUICtrlListView_SetItemStateImage GUICtrlListView_SetItemText ' +
+        'GUICtrlListView_SetOutlineColor ' +
+        'GUICtrlListView_SetSelectedColumn ' +
+        'GUICtrlListView_SetSelectionMark GUICtrlListView_SetTextBkColor ' +
+        'GUICtrlListView_SetTextColor GUICtrlListView_SetToolTips ' +
+        'GUICtrlListView_SetUnicodeFormat GUICtrlListView_SetView ' +
+        'GUICtrlListView_SetWorkAreas GUICtrlListView_SimpleSort ' +
+        'GUICtrlListView_SortItems GUICtrlListView_SubItemHitTest ' +
+        'GUICtrlListView_UnRegisterSortCallBack GUICtrlMenu_AddMenuItem ' +
+        'GUICtrlMenu_AppendMenu GUICtrlMenu_CalculatePopupWindowPosition ' +
+        'GUICtrlMenu_CheckMenuItem GUICtrlMenu_CheckRadioItem ' +
+        'GUICtrlMenu_CreateMenu GUICtrlMenu_CreatePopup ' +
+        'GUICtrlMenu_DeleteMenu GUICtrlMenu_DestroyMenu ' +
+        'GUICtrlMenu_DrawMenuBar GUICtrlMenu_EnableMenuItem ' +
+        'GUICtrlMenu_FindItem GUICtrlMenu_FindParent ' +
+        'GUICtrlMenu_GetItemBmp GUICtrlMenu_GetItemBmpChecked ' +
+        'GUICtrlMenu_GetItemBmpUnchecked GUICtrlMenu_GetItemChecked ' +
+        'GUICtrlMenu_GetItemCount GUICtrlMenu_GetItemData ' +
+        'GUICtrlMenu_GetItemDefault GUICtrlMenu_GetItemDisabled ' +
+        'GUICtrlMenu_GetItemEnabled GUICtrlMenu_GetItemGrayed ' +
+        'GUICtrlMenu_GetItemHighlighted GUICtrlMenu_GetItemID ' +
+        'GUICtrlMenu_GetItemInfo GUICtrlMenu_GetItemRect ' +
+        'GUICtrlMenu_GetItemRectEx GUICtrlMenu_GetItemState ' +
+        'GUICtrlMenu_GetItemStateEx GUICtrlMenu_GetItemSubMenu ' +
+        'GUICtrlMenu_GetItemText GUICtrlMenu_GetItemType ' +
+        'GUICtrlMenu_GetMenu GUICtrlMenu_GetMenuBackground ' +
+        'GUICtrlMenu_GetMenuBarInfo GUICtrlMenu_GetMenuContextHelpID ' +
+        'GUICtrlMenu_GetMenuData GUICtrlMenu_GetMenuDefaultItem ' +
+        'GUICtrlMenu_GetMenuHeight GUICtrlMenu_GetMenuInfo ' +
+        'GUICtrlMenu_GetMenuStyle GUICtrlMenu_GetSystemMenu ' +
+        'GUICtrlMenu_InsertMenuItem GUICtrlMenu_InsertMenuItemEx ' +
+        'GUICtrlMenu_IsMenu GUICtrlMenu_LoadMenu ' +
+        'GUICtrlMenu_MapAccelerator GUICtrlMenu_MenuItemFromPoint ' +
+        'GUICtrlMenu_RemoveMenu GUICtrlMenu_SetItemBitmaps ' +
+        'GUICtrlMenu_SetItemBmp GUICtrlMenu_SetItemBmpChecked ' +
+        'GUICtrlMenu_SetItemBmpUnchecked GUICtrlMenu_SetItemChecked ' +
+        'GUICtrlMenu_SetItemData GUICtrlMenu_SetItemDefault ' +
+        'GUICtrlMenu_SetItemDisabled GUICtrlMenu_SetItemEnabled ' +
+        'GUICtrlMenu_SetItemGrayed GUICtrlMenu_SetItemHighlighted ' +
+        'GUICtrlMenu_SetItemID GUICtrlMenu_SetItemInfo ' +
+        'GUICtrlMenu_SetItemState GUICtrlMenu_SetItemSubMenu ' +
+        'GUICtrlMenu_SetItemText GUICtrlMenu_SetItemType ' +
+        'GUICtrlMenu_SetMenu GUICtrlMenu_SetMenuBackground ' +
+        'GUICtrlMenu_SetMenuContextHelpID GUICtrlMenu_SetMenuData ' +
+        'GUICtrlMenu_SetMenuDefaultItem GUICtrlMenu_SetMenuHeight ' +
+        'GUICtrlMenu_SetMenuInfo GUICtrlMenu_SetMenuStyle ' +
+        'GUICtrlMenu_TrackPopupMenu GUICtrlMonthCal_Create ' +
+        'GUICtrlMonthCal_Destroy GUICtrlMonthCal_GetCalendarBorder ' +
+        'GUICtrlMonthCal_GetCalendarCount GUICtrlMonthCal_GetColor ' +
+        'GUICtrlMonthCal_GetColorArray GUICtrlMonthCal_GetCurSel ' +
+        'GUICtrlMonthCal_GetCurSelStr GUICtrlMonthCal_GetFirstDOW ' +
+        'GUICtrlMonthCal_GetFirstDOWStr GUICtrlMonthCal_GetMaxSelCount ' +
+        'GUICtrlMonthCal_GetMaxTodayWidth ' +
+        'GUICtrlMonthCal_GetMinReqHeight GUICtrlMonthCal_GetMinReqRect ' +
+        'GUICtrlMonthCal_GetMinReqRectArray ' +
+        'GUICtrlMonthCal_GetMinReqWidth GUICtrlMonthCal_GetMonthDelta ' +
+        'GUICtrlMonthCal_GetMonthRange GUICtrlMonthCal_GetMonthRangeMax ' +
+        'GUICtrlMonthCal_GetMonthRangeMaxStr ' +
+        'GUICtrlMonthCal_GetMonthRangeMin ' +
+        'GUICtrlMonthCal_GetMonthRangeMinStr ' +
+        'GUICtrlMonthCal_GetMonthRangeSpan GUICtrlMonthCal_GetRange ' +
+        'GUICtrlMonthCal_GetRangeMax GUICtrlMonthCal_GetRangeMaxStr ' +
+        'GUICtrlMonthCal_GetRangeMin GUICtrlMonthCal_GetRangeMinStr ' +
+        'GUICtrlMonthCal_GetSelRange GUICtrlMonthCal_GetSelRangeMax ' +
+        'GUICtrlMonthCal_GetSelRangeMaxStr ' +
+        'GUICtrlMonthCal_GetSelRangeMin ' +
+        'GUICtrlMonthCal_GetSelRangeMinStr GUICtrlMonthCal_GetToday ' +
+        'GUICtrlMonthCal_GetTodayStr GUICtrlMonthCal_GetUnicodeFormat ' +
+        'GUICtrlMonthCal_HitTest GUICtrlMonthCal_SetCalendarBorder ' +
+        'GUICtrlMonthCal_SetColor GUICtrlMonthCal_SetCurSel ' +
+        'GUICtrlMonthCal_SetDayState GUICtrlMonthCal_SetFirstDOW ' +
+        'GUICtrlMonthCal_SetMaxSelCount GUICtrlMonthCal_SetMonthDelta ' +
+        'GUICtrlMonthCal_SetRange GUICtrlMonthCal_SetSelRange ' +
+        'GUICtrlMonthCal_SetToday GUICtrlMonthCal_SetUnicodeFormat ' +
+        'GUICtrlRebar_AddBand GUICtrlRebar_AddToolBarBand ' +
+        'GUICtrlRebar_BeginDrag GUICtrlRebar_Create ' +
+        'GUICtrlRebar_DeleteBand GUICtrlRebar_Destroy ' +
+        'GUICtrlRebar_DragMove GUICtrlRebar_EndDrag ' +
+        'GUICtrlRebar_GetBandBackColor GUICtrlRebar_GetBandBorders ' +
+        'GUICtrlRebar_GetBandBordersEx GUICtrlRebar_GetBandChildHandle ' +
+        'GUICtrlRebar_GetBandChildSize GUICtrlRebar_GetBandCount ' +
+        'GUICtrlRebar_GetBandForeColor GUICtrlRebar_GetBandHeaderSize ' +
+        'GUICtrlRebar_GetBandID GUICtrlRebar_GetBandIdealSize ' +
+        'GUICtrlRebar_GetBandLength GUICtrlRebar_GetBandLParam ' +
+        'GUICtrlRebar_GetBandMargins GUICtrlRebar_GetBandMarginsEx ' +
+        'GUICtrlRebar_GetBandRect GUICtrlRebar_GetBandRectEx ' +
+        'GUICtrlRebar_GetBandStyle GUICtrlRebar_GetBandStyleBreak ' +
+        'GUICtrlRebar_GetBandStyleChildEdge ' +
+        'GUICtrlRebar_GetBandStyleFixedBMP ' +
+        'GUICtrlRebar_GetBandStyleFixedSize ' +
+        'GUICtrlRebar_GetBandStyleGripperAlways ' +
+        'GUICtrlRebar_GetBandStyleHidden ' +
+        'GUICtrlRebar_GetBandStyleHideTitle ' +
+        'GUICtrlRebar_GetBandStyleNoGripper ' +
+        'GUICtrlRebar_GetBandStyleTopAlign ' +
+        'GUICtrlRebar_GetBandStyleUseChevron ' +
+        'GUICtrlRebar_GetBandStyleVariableHeight ' +
+        'GUICtrlRebar_GetBandText GUICtrlRebar_GetBarHeight ' +
+        'GUICtrlRebar_GetBarInfo GUICtrlRebar_GetBKColor ' +
+        'GUICtrlRebar_GetColorScheme GUICtrlRebar_GetRowCount ' +
+        'GUICtrlRebar_GetRowHeight GUICtrlRebar_GetTextColor ' +
+        'GUICtrlRebar_GetToolTips GUICtrlRebar_GetUnicodeFormat ' +
+        'GUICtrlRebar_HitTest GUICtrlRebar_IDToIndex ' +
+        'GUICtrlRebar_MaximizeBand GUICtrlRebar_MinimizeBand ' +
+        'GUICtrlRebar_MoveBand GUICtrlRebar_SetBandBackColor ' +
+        'GUICtrlRebar_SetBandForeColor GUICtrlRebar_SetBandHeaderSize ' +
+        'GUICtrlRebar_SetBandID GUICtrlRebar_SetBandIdealSize ' +
+        'GUICtrlRebar_SetBandLength GUICtrlRebar_SetBandLParam ' +
+        'GUICtrlRebar_SetBandStyle GUICtrlRebar_SetBandStyleBreak ' +
+        'GUICtrlRebar_SetBandStyleChildEdge ' +
+        'GUICtrlRebar_SetBandStyleFixedBMP ' +
+        'GUICtrlRebar_SetBandStyleFixedSize ' +
+        'GUICtrlRebar_SetBandStyleGripperAlways ' +
+        'GUICtrlRebar_SetBandStyleHidden ' +
+        'GUICtrlRebar_SetBandStyleHideTitle ' +
+        'GUICtrlRebar_SetBandStyleNoGripper ' +
+        'GUICtrlRebar_SetBandStyleTopAlign ' +
+        'GUICtrlRebar_SetBandStyleUseChevron ' +
+        'GUICtrlRebar_SetBandStyleVariableHeight ' +
+        'GUICtrlRebar_SetBandText GUICtrlRebar_SetBarInfo ' +
+        'GUICtrlRebar_SetBKColor GUICtrlRebar_SetColorScheme ' +
+        'GUICtrlRebar_SetTextColor GUICtrlRebar_SetToolTips ' +
+        'GUICtrlRebar_SetUnicodeFormat GUICtrlRebar_ShowBand ' +
+        'GUICtrlRichEdit_AppendText GUICtrlRichEdit_AutoDetectURL ' +
+        'GUICtrlRichEdit_CanPaste GUICtrlRichEdit_CanPasteSpecial ' +
+        'GUICtrlRichEdit_CanRedo GUICtrlRichEdit_CanUndo ' +
+        'GUICtrlRichEdit_ChangeFontSize GUICtrlRichEdit_Copy ' +
+        'GUICtrlRichEdit_Create GUICtrlRichEdit_Cut ' +
+        'GUICtrlRichEdit_Deselect GUICtrlRichEdit_Destroy ' +
+        'GUICtrlRichEdit_EmptyUndoBuffer GUICtrlRichEdit_FindText ' +
+        'GUICtrlRichEdit_FindTextInRange GUICtrlRichEdit_GetBkColor ' +
+        'GUICtrlRichEdit_GetCharAttributes ' +
+        'GUICtrlRichEdit_GetCharBkColor GUICtrlRichEdit_GetCharColor ' +
+        'GUICtrlRichEdit_GetCharPosFromXY ' +
+        'GUICtrlRichEdit_GetCharPosOfNextWord ' +
+        'GUICtrlRichEdit_GetCharPosOfPreviousWord ' +
+        'GUICtrlRichEdit_GetCharWordBreakInfo ' +
+        'GUICtrlRichEdit_GetFirstCharPosOnLine GUICtrlRichEdit_GetFont ' +
+        'GUICtrlRichEdit_GetLineCount GUICtrlRichEdit_GetLineLength ' +
+        'GUICtrlRichEdit_GetLineNumberFromCharPos ' +
+        'GUICtrlRichEdit_GetNextRedo GUICtrlRichEdit_GetNextUndo ' +
+        'GUICtrlRichEdit_GetNumberOfFirstVisibleLine ' +
+        'GUICtrlRichEdit_GetParaAlignment ' +
+        'GUICtrlRichEdit_GetParaAttributes GUICtrlRichEdit_GetParaBorder ' +
+        'GUICtrlRichEdit_GetParaIndents GUICtrlRichEdit_GetParaNumbering ' +
+        'GUICtrlRichEdit_GetParaShading GUICtrlRichEdit_GetParaSpacing ' +
+        'GUICtrlRichEdit_GetParaTabStops GUICtrlRichEdit_GetPasswordChar ' +
+        'GUICtrlRichEdit_GetRECT GUICtrlRichEdit_GetScrollPos ' +
+        'GUICtrlRichEdit_GetSel GUICtrlRichEdit_GetSelAA ' +
+        'GUICtrlRichEdit_GetSelText GUICtrlRichEdit_GetSpaceUnit ' +
+        'GUICtrlRichEdit_GetText GUICtrlRichEdit_GetTextInLine ' +
+        'GUICtrlRichEdit_GetTextInRange GUICtrlRichEdit_GetTextLength ' +
+        'GUICtrlRichEdit_GetVersion GUICtrlRichEdit_GetXYFromCharPos ' +
+        'GUICtrlRichEdit_GetZoom GUICtrlRichEdit_GotoCharPos ' +
+        'GUICtrlRichEdit_HideSelection GUICtrlRichEdit_InsertText ' +
+        'GUICtrlRichEdit_IsModified GUICtrlRichEdit_IsTextSelected ' +
+        'GUICtrlRichEdit_Paste GUICtrlRichEdit_PasteSpecial ' +
+        'GUICtrlRichEdit_PauseRedraw GUICtrlRichEdit_Redo ' +
+        'GUICtrlRichEdit_ReplaceText GUICtrlRichEdit_ResumeRedraw ' +
+        'GUICtrlRichEdit_ScrollLineOrPage GUICtrlRichEdit_ScrollLines ' +
+        'GUICtrlRichEdit_ScrollToCaret GUICtrlRichEdit_SetBkColor ' +
+        'GUICtrlRichEdit_SetCharAttributes ' +
+        'GUICtrlRichEdit_SetCharBkColor GUICtrlRichEdit_SetCharColor ' +
+        'GUICtrlRichEdit_SetEventMask GUICtrlRichEdit_SetFont ' +
+        'GUICtrlRichEdit_SetLimitOnText GUICtrlRichEdit_SetModified ' +
+        'GUICtrlRichEdit_SetParaAlignment ' +
+        'GUICtrlRichEdit_SetParaAttributes GUICtrlRichEdit_SetParaBorder ' +
+        'GUICtrlRichEdit_SetParaIndents GUICtrlRichEdit_SetParaNumbering ' +
+        'GUICtrlRichEdit_SetParaShading GUICtrlRichEdit_SetParaSpacing ' +
+        'GUICtrlRichEdit_SetParaTabStops GUICtrlRichEdit_SetPasswordChar ' +
+        'GUICtrlRichEdit_SetReadOnly GUICtrlRichEdit_SetRECT ' +
+        'GUICtrlRichEdit_SetScrollPos GUICtrlRichEdit_SetSel ' +
+        'GUICtrlRichEdit_SetSpaceUnit GUICtrlRichEdit_SetTabStops ' +
+        'GUICtrlRichEdit_SetText GUICtrlRichEdit_SetUndoLimit ' +
+        'GUICtrlRichEdit_SetZoom GUICtrlRichEdit_StreamFromFile ' +
+        'GUICtrlRichEdit_StreamFromVar GUICtrlRichEdit_StreamToFile ' +
+        'GUICtrlRichEdit_StreamToVar GUICtrlRichEdit_Undo ' +
+        'GUICtrlSlider_ClearSel GUICtrlSlider_ClearTics ' +
+        'GUICtrlSlider_Create GUICtrlSlider_Destroy ' +
+        'GUICtrlSlider_GetBuddy GUICtrlSlider_GetChannelRect ' +
+        'GUICtrlSlider_GetChannelRectEx GUICtrlSlider_GetLineSize ' +
+        'GUICtrlSlider_GetLogicalTics GUICtrlSlider_GetNumTics ' +
+        'GUICtrlSlider_GetPageSize GUICtrlSlider_GetPos ' +
+        'GUICtrlSlider_GetRange GUICtrlSlider_GetRangeMax ' +
+        'GUICtrlSlider_GetRangeMin GUICtrlSlider_GetSel ' +
+        'GUICtrlSlider_GetSelEnd GUICtrlSlider_GetSelStart ' +
+        'GUICtrlSlider_GetThumbLength GUICtrlSlider_GetThumbRect ' +
+        'GUICtrlSlider_GetThumbRectEx GUICtrlSlider_GetTic ' +
+        'GUICtrlSlider_GetTicPos GUICtrlSlider_GetToolTips ' +
+        'GUICtrlSlider_GetUnicodeFormat GUICtrlSlider_SetBuddy ' +
+        'GUICtrlSlider_SetLineSize GUICtrlSlider_SetPageSize ' +
+        'GUICtrlSlider_SetPos GUICtrlSlider_SetRange ' +
+        'GUICtrlSlider_SetRangeMax GUICtrlSlider_SetRangeMin ' +
+        'GUICtrlSlider_SetSel GUICtrlSlider_SetSelEnd ' +
+        'GUICtrlSlider_SetSelStart GUICtrlSlider_SetThumbLength ' +
+        'GUICtrlSlider_SetTic GUICtrlSlider_SetTicFreq ' +
+        'GUICtrlSlider_SetTipSide GUICtrlSlider_SetToolTips ' +
+        'GUICtrlSlider_SetUnicodeFormat GUICtrlStatusBar_Create ' +
+        'GUICtrlStatusBar_Destroy GUICtrlStatusBar_EmbedControl ' +
+        'GUICtrlStatusBar_GetBorders GUICtrlStatusBar_GetBordersHorz ' +
+        'GUICtrlStatusBar_GetBordersRect GUICtrlStatusBar_GetBordersVert ' +
+        'GUICtrlStatusBar_GetCount GUICtrlStatusBar_GetHeight ' +
+        'GUICtrlStatusBar_GetIcon GUICtrlStatusBar_GetParts ' +
+        'GUICtrlStatusBar_GetRect GUICtrlStatusBar_GetRectEx ' +
+        'GUICtrlStatusBar_GetText GUICtrlStatusBar_GetTextFlags ' +
+        'GUICtrlStatusBar_GetTextLength GUICtrlStatusBar_GetTextLengthEx ' +
+        'GUICtrlStatusBar_GetTipText GUICtrlStatusBar_GetUnicodeFormat ' +
+        'GUICtrlStatusBar_GetWidth GUICtrlStatusBar_IsSimple ' +
+        'GUICtrlStatusBar_Resize GUICtrlStatusBar_SetBkColor ' +
+        'GUICtrlStatusBar_SetIcon GUICtrlStatusBar_SetMinHeight ' +
+        'GUICtrlStatusBar_SetParts GUICtrlStatusBar_SetSimple ' +
+        'GUICtrlStatusBar_SetText GUICtrlStatusBar_SetTipText ' +
+        'GUICtrlStatusBar_SetUnicodeFormat GUICtrlStatusBar_ShowHide ' +
+        'GUICtrlTab_ActivateTab GUICtrlTab_ClickTab GUICtrlTab_Create ' +
+        'GUICtrlTab_DeleteAllItems GUICtrlTab_DeleteItem ' +
+        'GUICtrlTab_DeselectAll GUICtrlTab_Destroy GUICtrlTab_FindTab ' +
+        'GUICtrlTab_GetCurFocus GUICtrlTab_GetCurSel ' +
+        'GUICtrlTab_GetDisplayRect GUICtrlTab_GetDisplayRectEx ' +
+        'GUICtrlTab_GetExtendedStyle GUICtrlTab_GetImageList ' +
+        'GUICtrlTab_GetItem GUICtrlTab_GetItemCount ' +
+        'GUICtrlTab_GetItemImage GUICtrlTab_GetItemParam ' +
+        'GUICtrlTab_GetItemRect GUICtrlTab_GetItemRectEx ' +
+        'GUICtrlTab_GetItemState GUICtrlTab_GetItemText ' +
+        'GUICtrlTab_GetRowCount GUICtrlTab_GetToolTips ' +
+        'GUICtrlTab_GetUnicodeFormat GUICtrlTab_HighlightItem ' +
+        'GUICtrlTab_HitTest GUICtrlTab_InsertItem ' +
+        'GUICtrlTab_RemoveImage GUICtrlTab_SetCurFocus ' +
+        'GUICtrlTab_SetCurSel GUICtrlTab_SetExtendedStyle ' +
+        'GUICtrlTab_SetImageList GUICtrlTab_SetItem ' +
+        'GUICtrlTab_SetItemImage GUICtrlTab_SetItemParam ' +
+        'GUICtrlTab_SetItemSize GUICtrlTab_SetItemState ' +
+        'GUICtrlTab_SetItemText GUICtrlTab_SetMinTabWidth ' +
+        'GUICtrlTab_SetPadding GUICtrlTab_SetToolTips ' +
+        'GUICtrlTab_SetUnicodeFormat GUICtrlToolbar_AddBitmap ' +
+        'GUICtrlToolbar_AddButton GUICtrlToolbar_AddButtonSep ' +
+        'GUICtrlToolbar_AddString GUICtrlToolbar_ButtonCount ' +
+        'GUICtrlToolbar_CheckButton GUICtrlToolbar_ClickAccel ' +
+        'GUICtrlToolbar_ClickButton GUICtrlToolbar_ClickIndex ' +
+        'GUICtrlToolbar_CommandToIndex GUICtrlToolbar_Create ' +
+        'GUICtrlToolbar_Customize GUICtrlToolbar_DeleteButton ' +
+        'GUICtrlToolbar_Destroy GUICtrlToolbar_EnableButton ' +
+        'GUICtrlToolbar_FindToolbar GUICtrlToolbar_GetAnchorHighlight ' +
+        'GUICtrlToolbar_GetBitmapFlags GUICtrlToolbar_GetButtonBitmap ' +
+        'GUICtrlToolbar_GetButtonInfo GUICtrlToolbar_GetButtonInfoEx ' +
+        'GUICtrlToolbar_GetButtonParam GUICtrlToolbar_GetButtonRect ' +
+        'GUICtrlToolbar_GetButtonRectEx GUICtrlToolbar_GetButtonSize ' +
+        'GUICtrlToolbar_GetButtonState GUICtrlToolbar_GetButtonStyle ' +
+        'GUICtrlToolbar_GetButtonText GUICtrlToolbar_GetColorScheme ' +
+        'GUICtrlToolbar_GetDisabledImageList ' +
+        'GUICtrlToolbar_GetExtendedStyle GUICtrlToolbar_GetHotImageList ' +
+        'GUICtrlToolbar_GetHotItem GUICtrlToolbar_GetImageList ' +
+        'GUICtrlToolbar_GetInsertMark GUICtrlToolbar_GetInsertMarkColor ' +
+        'GUICtrlToolbar_GetMaxSize GUICtrlToolbar_GetMetrics ' +
+        'GUICtrlToolbar_GetPadding GUICtrlToolbar_GetRows ' +
+        'GUICtrlToolbar_GetString GUICtrlToolbar_GetStyle ' +
+        'GUICtrlToolbar_GetStyleAltDrag ' +
+        'GUICtrlToolbar_GetStyleCustomErase GUICtrlToolbar_GetStyleFlat ' +
+        'GUICtrlToolbar_GetStyleList GUICtrlToolbar_GetStyleRegisterDrop ' +
+        'GUICtrlToolbar_GetStyleToolTips ' +
+        'GUICtrlToolbar_GetStyleTransparent ' +
+        'GUICtrlToolbar_GetStyleWrapable GUICtrlToolbar_GetTextRows ' +
+        'GUICtrlToolbar_GetToolTips GUICtrlToolbar_GetUnicodeFormat ' +
+        'GUICtrlToolbar_HideButton GUICtrlToolbar_HighlightButton ' +
+        'GUICtrlToolbar_HitTest GUICtrlToolbar_IndexToCommand ' +
+        'GUICtrlToolbar_InsertButton GUICtrlToolbar_InsertMarkHitTest ' +
+        'GUICtrlToolbar_IsButtonChecked GUICtrlToolbar_IsButtonEnabled ' +
+        'GUICtrlToolbar_IsButtonHidden ' +
+        'GUICtrlToolbar_IsButtonHighlighted ' +
+        'GUICtrlToolbar_IsButtonIndeterminate ' +
+        'GUICtrlToolbar_IsButtonPressed GUICtrlToolbar_LoadBitmap ' +
+        'GUICtrlToolbar_LoadImages GUICtrlToolbar_MapAccelerator ' +
+        'GUICtrlToolbar_MoveButton GUICtrlToolbar_PressButton ' +
+        'GUICtrlToolbar_SetAnchorHighlight GUICtrlToolbar_SetBitmapSize ' +
+        'GUICtrlToolbar_SetButtonBitMap GUICtrlToolbar_SetButtonInfo ' +
+        'GUICtrlToolbar_SetButtonInfoEx GUICtrlToolbar_SetButtonParam ' +
+        'GUICtrlToolbar_SetButtonSize GUICtrlToolbar_SetButtonState ' +
+        'GUICtrlToolbar_SetButtonStyle GUICtrlToolbar_SetButtonText ' +
+        'GUICtrlToolbar_SetButtonWidth GUICtrlToolbar_SetCmdID ' +
+        'GUICtrlToolbar_SetColorScheme ' +
+        'GUICtrlToolbar_SetDisabledImageList ' +
+        'GUICtrlToolbar_SetDrawTextFlags GUICtrlToolbar_SetExtendedStyle ' +
+        'GUICtrlToolbar_SetHotImageList GUICtrlToolbar_SetHotItem ' +
+        'GUICtrlToolbar_SetImageList GUICtrlToolbar_SetIndent ' +
+        'GUICtrlToolbar_SetIndeterminate GUICtrlToolbar_SetInsertMark ' +
+        'GUICtrlToolbar_SetInsertMarkColor GUICtrlToolbar_SetMaxTextRows ' +
+        'GUICtrlToolbar_SetMetrics GUICtrlToolbar_SetPadding ' +
+        'GUICtrlToolbar_SetParent GUICtrlToolbar_SetRows ' +
+        'GUICtrlToolbar_SetStyle GUICtrlToolbar_SetStyleAltDrag ' +
+        'GUICtrlToolbar_SetStyleCustomErase GUICtrlToolbar_SetStyleFlat ' +
+        'GUICtrlToolbar_SetStyleList GUICtrlToolbar_SetStyleRegisterDrop ' +
+        'GUICtrlToolbar_SetStyleToolTips ' +
+        'GUICtrlToolbar_SetStyleTransparent ' +
+        'GUICtrlToolbar_SetStyleWrapable GUICtrlToolbar_SetToolTips ' +
+        'GUICtrlToolbar_SetUnicodeFormat GUICtrlToolbar_SetWindowTheme ' +
+        'GUICtrlTreeView_Add GUICtrlTreeView_AddChild ' +
+        'GUICtrlTreeView_AddChildFirst GUICtrlTreeView_AddFirst ' +
+        'GUICtrlTreeView_BeginUpdate GUICtrlTreeView_ClickItem ' +
+        'GUICtrlTreeView_Create GUICtrlTreeView_CreateDragImage ' +
+        'GUICtrlTreeView_CreateSolidBitMap GUICtrlTreeView_Delete ' +
+        'GUICtrlTreeView_DeleteAll GUICtrlTreeView_DeleteChildren ' +
+        'GUICtrlTreeView_Destroy GUICtrlTreeView_DisplayRect ' +
+        'GUICtrlTreeView_DisplayRectEx GUICtrlTreeView_EditText ' +
+        'GUICtrlTreeView_EndEdit GUICtrlTreeView_EndUpdate ' +
+        'GUICtrlTreeView_EnsureVisible GUICtrlTreeView_Expand ' +
+        'GUICtrlTreeView_ExpandedOnce GUICtrlTreeView_FindItem ' +
+        'GUICtrlTreeView_FindItemEx GUICtrlTreeView_GetBkColor ' +
+        'GUICtrlTreeView_GetBold GUICtrlTreeView_GetChecked ' +
+        'GUICtrlTreeView_GetChildCount GUICtrlTreeView_GetChildren ' +
+        'GUICtrlTreeView_GetCount GUICtrlTreeView_GetCut ' +
+        'GUICtrlTreeView_GetDropTarget GUICtrlTreeView_GetEditControl ' +
+        'GUICtrlTreeView_GetExpanded GUICtrlTreeView_GetFirstChild ' +
+        'GUICtrlTreeView_GetFirstItem GUICtrlTreeView_GetFirstVisible ' +
+        'GUICtrlTreeView_GetFocused GUICtrlTreeView_GetHeight ' +
+        'GUICtrlTreeView_GetImageIndex ' +
+        'GUICtrlTreeView_GetImageListIconHandle ' +
+        'GUICtrlTreeView_GetIndent GUICtrlTreeView_GetInsertMarkColor ' +
+        'GUICtrlTreeView_GetISearchString GUICtrlTreeView_GetItemByIndex ' +
+        'GUICtrlTreeView_GetItemHandle GUICtrlTreeView_GetItemParam ' +
+        'GUICtrlTreeView_GetLastChild GUICtrlTreeView_GetLineColor ' +
+        'GUICtrlTreeView_GetNext GUICtrlTreeView_GetNextChild ' +
+        'GUICtrlTreeView_GetNextSibling GUICtrlTreeView_GetNextVisible ' +
+        'GUICtrlTreeView_GetNormalImageList ' +
+        'GUICtrlTreeView_GetParentHandle GUICtrlTreeView_GetParentParam ' +
+        'GUICtrlTreeView_GetPrev GUICtrlTreeView_GetPrevChild ' +
+        'GUICtrlTreeView_GetPrevSibling GUICtrlTreeView_GetPrevVisible ' +
+        'GUICtrlTreeView_GetScrollTime GUICtrlTreeView_GetSelected ' +
+        'GUICtrlTreeView_GetSelectedImageIndex ' +
+        'GUICtrlTreeView_GetSelection GUICtrlTreeView_GetSiblingCount ' +
+        'GUICtrlTreeView_GetState GUICtrlTreeView_GetStateImageIndex ' +
+        'GUICtrlTreeView_GetStateImageList GUICtrlTreeView_GetText ' +
+        'GUICtrlTreeView_GetTextColor GUICtrlTreeView_GetToolTips ' +
+        'GUICtrlTreeView_GetTree GUICtrlTreeView_GetUnicodeFormat ' +
+        'GUICtrlTreeView_GetVisible GUICtrlTreeView_GetVisibleCount ' +
+        'GUICtrlTreeView_HitTest GUICtrlTreeView_HitTestEx ' +
+        'GUICtrlTreeView_HitTestItem GUICtrlTreeView_Index ' +
+        'GUICtrlTreeView_InsertItem GUICtrlTreeView_IsFirstItem ' +
+        'GUICtrlTreeView_IsParent GUICtrlTreeView_Level ' +
+        'GUICtrlTreeView_SelectItem GUICtrlTreeView_SelectItemByIndex ' +
+        'GUICtrlTreeView_SetBkColor GUICtrlTreeView_SetBold ' +
+        'GUICtrlTreeView_SetChecked GUICtrlTreeView_SetCheckedByIndex ' +
+        'GUICtrlTreeView_SetChildren GUICtrlTreeView_SetCut ' +
+        'GUICtrlTreeView_SetDropTarget GUICtrlTreeView_SetFocused ' +
+        'GUICtrlTreeView_SetHeight GUICtrlTreeView_SetIcon ' +
+        'GUICtrlTreeView_SetImageIndex GUICtrlTreeView_SetIndent ' +
+        'GUICtrlTreeView_SetInsertMark ' +
+        'GUICtrlTreeView_SetInsertMarkColor ' +
+        'GUICtrlTreeView_SetItemHeight GUICtrlTreeView_SetItemParam ' +
+        'GUICtrlTreeView_SetLineColor GUICtrlTreeView_SetNormalImageList ' +
+        'GUICtrlTreeView_SetScrollTime GUICtrlTreeView_SetSelected ' +
+        'GUICtrlTreeView_SetSelectedImageIndex GUICtrlTreeView_SetState ' +
+        'GUICtrlTreeView_SetStateImageIndex ' +
+        'GUICtrlTreeView_SetStateImageList GUICtrlTreeView_SetText ' +
+        'GUICtrlTreeView_SetTextColor GUICtrlTreeView_SetToolTips ' +
+        'GUICtrlTreeView_SetUnicodeFormat GUICtrlTreeView_Sort ' +
+        'GUIImageList_Add GUIImageList_AddBitmap GUIImageList_AddIcon ' +
+        'GUIImageList_AddMasked GUIImageList_BeginDrag ' +
+        'GUIImageList_Copy GUIImageList_Create GUIImageList_Destroy ' +
+        'GUIImageList_DestroyIcon GUIImageList_DragEnter ' +
+        'GUIImageList_DragLeave GUIImageList_DragMove ' +
+        'GUIImageList_Draw GUIImageList_DrawEx GUIImageList_Duplicate ' +
+        'GUIImageList_EndDrag GUIImageList_GetBkColor ' +
+        'GUIImageList_GetIcon GUIImageList_GetIconHeight ' +
+        'GUIImageList_GetIconSize GUIImageList_GetIconSizeEx ' +
+        'GUIImageList_GetIconWidth GUIImageList_GetImageCount ' +
+        'GUIImageList_GetImageInfoEx GUIImageList_Remove ' +
+        'GUIImageList_ReplaceIcon GUIImageList_SetBkColor ' +
+        'GUIImageList_SetIconSize GUIImageList_SetImageCount ' +
+        'GUIImageList_Swap GUIScrollBars_EnableScrollBar ' +
+        'GUIScrollBars_GetScrollBarInfoEx GUIScrollBars_GetScrollBarRect ' +
+        'GUIScrollBars_GetScrollBarRGState ' +
+        'GUIScrollBars_GetScrollBarXYLineButton ' +
+        'GUIScrollBars_GetScrollBarXYThumbBottom ' +
+        'GUIScrollBars_GetScrollBarXYThumbTop ' +
+        'GUIScrollBars_GetScrollInfo GUIScrollBars_GetScrollInfoEx ' +
+        'GUIScrollBars_GetScrollInfoMax GUIScrollBars_GetScrollInfoMin ' +
+        'GUIScrollBars_GetScrollInfoPage GUIScrollBars_GetScrollInfoPos ' +
+        'GUIScrollBars_GetScrollInfoTrackPos GUIScrollBars_GetScrollPos ' +
+        'GUIScrollBars_GetScrollRange GUIScrollBars_Init ' +
+        'GUIScrollBars_ScrollWindow GUIScrollBars_SetScrollInfo ' +
+        'GUIScrollBars_SetScrollInfoMax GUIScrollBars_SetScrollInfoMin ' +
+        'GUIScrollBars_SetScrollInfoPage GUIScrollBars_SetScrollInfoPos ' +
+        'GUIScrollBars_SetScrollRange GUIScrollBars_ShowScrollBar ' +
+        'GUIToolTip_Activate GUIToolTip_AddTool GUIToolTip_AdjustRect ' +
+        'GUIToolTip_BitsToTTF GUIToolTip_Create GUIToolTip_Deactivate ' +
+        'GUIToolTip_DelTool GUIToolTip_Destroy GUIToolTip_EnumTools ' +
+        'GUIToolTip_GetBubbleHeight GUIToolTip_GetBubbleSize ' +
+        'GUIToolTip_GetBubbleWidth GUIToolTip_GetCurrentTool ' +
+        'GUIToolTip_GetDelayTime GUIToolTip_GetMargin ' +
+        'GUIToolTip_GetMarginEx GUIToolTip_GetMaxTipWidth ' +
+        'GUIToolTip_GetText GUIToolTip_GetTipBkColor ' +
+        'GUIToolTip_GetTipTextColor GUIToolTip_GetTitleBitMap ' +
+        'GUIToolTip_GetTitleText GUIToolTip_GetToolCount ' +
+        'GUIToolTip_GetToolInfo GUIToolTip_HitTest ' +
+        'GUIToolTip_NewToolRect GUIToolTip_Pop GUIToolTip_PopUp ' +
+        'GUIToolTip_SetDelayTime GUIToolTip_SetMargin ' +
+        'GUIToolTip_SetMaxTipWidth GUIToolTip_SetTipBkColor ' +
+        'GUIToolTip_SetTipTextColor GUIToolTip_SetTitle ' +
+        'GUIToolTip_SetToolInfo GUIToolTip_SetWindowTheme ' +
+        'GUIToolTip_ToolExists GUIToolTip_ToolToArray ' +
+        'GUIToolTip_TrackActivate GUIToolTip_TrackPosition ' +
+        'GUIToolTip_Update GUIToolTip_UpdateTipText HexToString ' +
+        'IEAction IEAttach IEBodyReadHTML IEBodyReadText ' +
+        'IEBodyWriteHTML IECreate IECreateEmbedded IEDocGetObj ' +
+        'IEDocInsertHTML IEDocInsertText IEDocReadHTML ' +
+        'IEDocWriteHTML IEErrorNotify IEFormElementCheckBoxSelect ' +
+        'IEFormElementGetCollection IEFormElementGetObjByName ' +
+        'IEFormElementGetValue IEFormElementOptionSelect ' +
+        'IEFormElementRadioSelect IEFormElementSetValue ' +
+        'IEFormGetCollection IEFormGetObjByName IEFormImageClick ' +
+        'IEFormReset IEFormSubmit IEFrameGetCollection ' +
+        'IEFrameGetObjByName IEGetObjById IEGetObjByName ' +
+        'IEHeadInsertEventScript IEImgClick IEImgGetCollection ' +
+        'IEIsFrameSet IELinkClickByIndex IELinkClickByText ' +
+        'IELinkGetCollection IELoadWait IELoadWaitTimeout IENavigate ' +
+        'IEPropertyGet IEPropertySet IEQuit IETableGetCollection ' +
+        'IETableWriteToArray IETagNameAllGetCollection ' +
+        'IETagNameGetCollection IE_Example IE_Introduction ' +
+        'IE_VersionInfo INetExplorerCapable INetGetSource INetMail ' +
+        'INetSmtpMail IsPressed MathCheckDiv Max MemGlobalAlloc ' +
+        'MemGlobalFree MemGlobalLock MemGlobalSize MemGlobalUnlock ' +
+        'MemMoveMemory MemVirtualAlloc MemVirtualAllocEx ' +
+        'MemVirtualFree MemVirtualFreeEx Min MouseTrap ' +
+        'NamedPipes_CallNamedPipe NamedPipes_ConnectNamedPipe ' +
+        'NamedPipes_CreateNamedPipe NamedPipes_CreatePipe ' +
+        'NamedPipes_DisconnectNamedPipe ' +
+        'NamedPipes_GetNamedPipeHandleState NamedPipes_GetNamedPipeInfo ' +
+        'NamedPipes_PeekNamedPipe NamedPipes_SetNamedPipeHandleState ' +
+        'NamedPipes_TransactNamedPipe NamedPipes_WaitNamedPipe ' +
+        'Net_Share_ConnectionEnum Net_Share_FileClose ' +
+        'Net_Share_FileEnum Net_Share_FileGetInfo Net_Share_PermStr ' +
+        'Net_Share_ResourceStr Net_Share_SessionDel ' +
+        'Net_Share_SessionEnum Net_Share_SessionGetInfo ' +
+        'Net_Share_ShareAdd Net_Share_ShareCheck Net_Share_ShareDel ' +
+        'Net_Share_ShareEnum Net_Share_ShareGetInfo ' +
+        'Net_Share_ShareSetInfo Net_Share_StatisticsGetSvr ' +
+        'Net_Share_StatisticsGetWrk Now NowCalc NowCalcDate ' +
+        'NowDate NowTime PathFull PathGetRelative PathMake ' +
+        'PathSplit ProcessGetName ProcessGetPriority Radian ' +
+        'ReplaceStringInFile RunDos ScreenCapture_Capture ' +
+        'ScreenCapture_CaptureWnd ScreenCapture_SaveImage ' +
+        'ScreenCapture_SetBMPFormat ScreenCapture_SetJPGQuality ' +
+        'ScreenCapture_SetTIFColorDepth ScreenCapture_SetTIFCompression ' +
+        'Security__AdjustTokenPrivileges ' +
+        'Security__CreateProcessWithToken Security__DuplicateTokenEx ' +
+        'Security__GetAccountSid Security__GetLengthSid ' +
+        'Security__GetTokenInformation Security__ImpersonateSelf ' +
+        'Security__IsValidSid Security__LookupAccountName ' +
+        'Security__LookupAccountSid Security__LookupPrivilegeValue ' +
+        'Security__OpenProcessToken Security__OpenThreadToken ' +
+        'Security__OpenThreadTokenEx Security__SetPrivilege ' +
+        'Security__SetTokenInformation Security__SidToStringSid ' +
+        'Security__SidTypeStr Security__StringSidToSid SendMessage ' +
+        'SendMessageA SetDate SetTime Singleton SoundClose ' +
+        'SoundLength SoundOpen SoundPause SoundPlay SoundPos ' +
+        'SoundResume SoundSeek SoundStatus SoundStop ' +
+        'SQLite_Changes SQLite_Close SQLite_Display2DResult ' +
+        'SQLite_Encode SQLite_ErrCode SQLite_ErrMsg SQLite_Escape ' +
+        'SQLite_Exec SQLite_FastEncode SQLite_FastEscape ' +
+        'SQLite_FetchData SQLite_FetchNames SQLite_GetTable ' +
+        'SQLite_GetTable2d SQLite_LastInsertRowID SQLite_LibVersion ' +
+        'SQLite_Open SQLite_Query SQLite_QueryFinalize ' +
+        'SQLite_QueryReset SQLite_QuerySingleRow SQLite_SafeMode ' +
+        'SQLite_SetTimeout SQLite_Shutdown SQLite_SQLiteExe ' +
+        'SQLite_Startup SQLite_TotalChanges StringBetween ' +
+        'StringExplode StringInsert StringProper StringRepeat ' +
+        'StringTitleCase StringToHex TCPIpToName TempFile ' +
+        'TicksToTime Timer_Diff Timer_GetIdleTime Timer_GetTimerID ' +
+        'Timer_Init Timer_KillAllTimers Timer_KillTimer ' +
+        'Timer_SetTimer TimeToTicks VersionCompare viClose ' +
+        'viExecCommand viFindGpib viGpibBusReset viGTL ' +
+        'viInteractiveControl viOpen viSetAttribute viSetTimeout ' +
+        'WeekNumberISO WinAPI_AbortPath WinAPI_ActivateKeyboardLayout ' +
+        'WinAPI_AddClipboardFormatListener WinAPI_AddFontMemResourceEx ' +
+        'WinAPI_AddFontResourceEx WinAPI_AddIconOverlay ' +
+        'WinAPI_AddIconTransparency WinAPI_AddMRUString ' +
+        'WinAPI_AdjustBitmap WinAPI_AdjustTokenPrivileges ' +
+        'WinAPI_AdjustWindowRectEx WinAPI_AlphaBlend WinAPI_AngleArc ' +
+        'WinAPI_AnimateWindow WinAPI_Arc WinAPI_ArcTo ' +
+        'WinAPI_ArrayToStruct WinAPI_AssignProcessToJobObject ' +
+        'WinAPI_AssocGetPerceivedType WinAPI_AssocQueryString ' +
+        'WinAPI_AttachConsole WinAPI_AttachThreadInput ' +
+        'WinAPI_BackupRead WinAPI_BackupReadAbort WinAPI_BackupSeek ' +
+        'WinAPI_BackupWrite WinAPI_BackupWriteAbort WinAPI_Beep ' +
+        'WinAPI_BeginBufferedPaint WinAPI_BeginDeferWindowPos ' +
+        'WinAPI_BeginPaint WinAPI_BeginPath WinAPI_BeginUpdateResource ' +
+        'WinAPI_BitBlt WinAPI_BringWindowToTop ' +
+        'WinAPI_BroadcastSystemMessage WinAPI_BrowseForFolderDlg ' +
+        'WinAPI_BufferedPaintClear WinAPI_BufferedPaintInit ' +
+        'WinAPI_BufferedPaintSetAlpha WinAPI_BufferedPaintUnInit ' +
+        'WinAPI_CallNextHookEx WinAPI_CallWindowProc ' +
+        'WinAPI_CallWindowProcW WinAPI_CascadeWindows ' +
+        'WinAPI_ChangeWindowMessageFilterEx WinAPI_CharToOem ' +
+        'WinAPI_ChildWindowFromPointEx WinAPI_ClientToScreen ' +
+        'WinAPI_ClipCursor WinAPI_CloseDesktop WinAPI_CloseEnhMetaFile ' +
+        'WinAPI_CloseFigure WinAPI_CloseHandle WinAPI_CloseThemeData ' +
+        'WinAPI_CloseWindow WinAPI_CloseWindowStation ' +
+        'WinAPI_CLSIDFromProgID WinAPI_CoInitialize ' +
+        'WinAPI_ColorAdjustLuma WinAPI_ColorHLSToRGB ' +
+        'WinAPI_ColorRGBToHLS WinAPI_CombineRgn ' +
+        'WinAPI_CombineTransform WinAPI_CommandLineToArgv ' +
+        'WinAPI_CommDlgExtendedError WinAPI_CommDlgExtendedErrorEx ' +
+        'WinAPI_CompareString WinAPI_CompressBitmapBits ' +
+        'WinAPI_CompressBuffer WinAPI_ComputeCrc32 ' +
+        'WinAPI_ConfirmCredentials WinAPI_CopyBitmap WinAPI_CopyCursor ' +
+        'WinAPI_CopyEnhMetaFile WinAPI_CopyFileEx WinAPI_CopyIcon ' +
+        'WinAPI_CopyImage WinAPI_CopyRect WinAPI_CopyStruct ' +
+        'WinAPI_CoTaskMemAlloc WinAPI_CoTaskMemFree ' +
+        'WinAPI_CoTaskMemRealloc WinAPI_CoUninitialize ' +
+        'WinAPI_Create32BitHBITMAP WinAPI_Create32BitHICON ' +
+        'WinAPI_CreateANDBitmap WinAPI_CreateBitmap ' +
+        'WinAPI_CreateBitmapIndirect WinAPI_CreateBrushIndirect ' +
+        'WinAPI_CreateBuffer WinAPI_CreateBufferFromStruct ' +
+        'WinAPI_CreateCaret WinAPI_CreateColorAdjustment ' +
+        'WinAPI_CreateCompatibleBitmap WinAPI_CreateCompatibleBitmapEx ' +
+        'WinAPI_CreateCompatibleDC WinAPI_CreateDesktop ' +
+        'WinAPI_CreateDIB WinAPI_CreateDIBColorTable ' +
+        'WinAPI_CreateDIBitmap WinAPI_CreateDIBSection ' +
+        'WinAPI_CreateDirectory WinAPI_CreateDirectoryEx ' +
+        'WinAPI_CreateEllipticRgn WinAPI_CreateEmptyIcon ' +
+        'WinAPI_CreateEnhMetaFile WinAPI_CreateEvent WinAPI_CreateFile ' +
+        'WinAPI_CreateFileEx WinAPI_CreateFileMapping ' +
+        'WinAPI_CreateFont WinAPI_CreateFontEx ' +
+        'WinAPI_CreateFontIndirect WinAPI_CreateGUID ' +
+        'WinAPI_CreateHardLink WinAPI_CreateIcon ' +
+        'WinAPI_CreateIconFromResourceEx WinAPI_CreateIconIndirect ' +
+        'WinAPI_CreateJobObject WinAPI_CreateMargins ' +
+        'WinAPI_CreateMRUList WinAPI_CreateMutex WinAPI_CreateNullRgn ' +
+        'WinAPI_CreateNumberFormatInfo WinAPI_CreateObjectID ' +
+        'WinAPI_CreatePen WinAPI_CreatePoint WinAPI_CreatePolygonRgn ' +
+        'WinAPI_CreateProcess WinAPI_CreateProcessWithToken ' +
+        'WinAPI_CreateRect WinAPI_CreateRectEx WinAPI_CreateRectRgn ' +
+        'WinAPI_CreateRectRgnIndirect WinAPI_CreateRoundRectRgn ' +
+        'WinAPI_CreateSemaphore WinAPI_CreateSize ' +
+        'WinAPI_CreateSolidBitmap WinAPI_CreateSolidBrush ' +
+        'WinAPI_CreateStreamOnHGlobal WinAPI_CreateString ' +
+        'WinAPI_CreateSymbolicLink WinAPI_CreateTransform ' +
+        'WinAPI_CreateWindowEx WinAPI_CreateWindowStation ' +
+        'WinAPI_DecompressBuffer WinAPI_DecryptFile ' +
+        'WinAPI_DeferWindowPos WinAPI_DefineDosDevice ' +
+        'WinAPI_DefRawInputProc WinAPI_DefSubclassProc ' +
+        'WinAPI_DefWindowProc WinAPI_DefWindowProcW WinAPI_DeleteDC ' +
+        'WinAPI_DeleteEnhMetaFile WinAPI_DeleteFile ' +
+        'WinAPI_DeleteObject WinAPI_DeleteObjectID ' +
+        'WinAPI_DeleteVolumeMountPoint WinAPI_DeregisterShellHookWindow ' +
+        'WinAPI_DestroyCaret WinAPI_DestroyCursor WinAPI_DestroyIcon ' +
+        'WinAPI_DestroyWindow WinAPI_DeviceIoControl ' +
+        'WinAPI_DisplayStruct WinAPI_DllGetVersion WinAPI_DllInstall ' +
+        'WinAPI_DllUninstall WinAPI_DPtoLP WinAPI_DragAcceptFiles ' +
+        'WinAPI_DragFinish WinAPI_DragQueryFileEx ' +
+        'WinAPI_DragQueryPoint WinAPI_DrawAnimatedRects ' +
+        'WinAPI_DrawBitmap WinAPI_DrawEdge WinAPI_DrawFocusRect ' +
+        'WinAPI_DrawFrameControl WinAPI_DrawIcon WinAPI_DrawIconEx ' +
+        'WinAPI_DrawLine WinAPI_DrawShadowText WinAPI_DrawText ' +
+        'WinAPI_DrawThemeBackground WinAPI_DrawThemeEdge ' +
+        'WinAPI_DrawThemeIcon WinAPI_DrawThemeParentBackground ' +
+        'WinAPI_DrawThemeText WinAPI_DrawThemeTextEx ' +
+        'WinAPI_DuplicateEncryptionInfoFile WinAPI_DuplicateHandle ' +
+        'WinAPI_DuplicateTokenEx WinAPI_DwmDefWindowProc ' +
+        'WinAPI_DwmEnableBlurBehindWindow WinAPI_DwmEnableComposition ' +
+        'WinAPI_DwmExtendFrameIntoClientArea ' +
+        'WinAPI_DwmGetColorizationColor ' +
+        'WinAPI_DwmGetColorizationParameters ' +
+        'WinAPI_DwmGetWindowAttribute WinAPI_DwmInvalidateIconicBitmaps ' +
+        'WinAPI_DwmIsCompositionEnabled ' +
+        'WinAPI_DwmQueryThumbnailSourceSize WinAPI_DwmRegisterThumbnail ' +
+        'WinAPI_DwmSetColorizationParameters ' +
+        'WinAPI_DwmSetIconicLivePreviewBitmap ' +
+        'WinAPI_DwmSetIconicThumbnail WinAPI_DwmSetWindowAttribute ' +
+        'WinAPI_DwmUnregisterThumbnail ' +
+        'WinAPI_DwmUpdateThumbnailProperties WinAPI_DWordToFloat ' +
+        'WinAPI_DWordToInt WinAPI_EjectMedia WinAPI_Ellipse ' +
+        'WinAPI_EmptyWorkingSet WinAPI_EnableWindow WinAPI_EncryptFile ' +
+        'WinAPI_EncryptionDisable WinAPI_EndBufferedPaint ' +
+        'WinAPI_EndDeferWindowPos WinAPI_EndPaint WinAPI_EndPath ' +
+        'WinAPI_EndUpdateResource WinAPI_EnumChildProcess ' +
+        'WinAPI_EnumChildWindows WinAPI_EnumDesktops ' +
+        'WinAPI_EnumDesktopWindows WinAPI_EnumDeviceDrivers ' +
+        'WinAPI_EnumDisplayDevices WinAPI_EnumDisplayMonitors ' +
+        'WinAPI_EnumDisplaySettings WinAPI_EnumDllProc ' +
+        'WinAPI_EnumFiles WinAPI_EnumFileStreams ' +
+        'WinAPI_EnumFontFamilies WinAPI_EnumHardLinks ' +
+        'WinAPI_EnumMRUList WinAPI_EnumPageFiles ' +
+        'WinAPI_EnumProcessHandles WinAPI_EnumProcessModules ' +
+        'WinAPI_EnumProcessThreads WinAPI_EnumProcessWindows ' +
+        'WinAPI_EnumRawInputDevices WinAPI_EnumResourceLanguages ' +
+        'WinAPI_EnumResourceNames WinAPI_EnumResourceTypes ' +
+        'WinAPI_EnumSystemGeoID WinAPI_EnumSystemLocales ' +
+        'WinAPI_EnumUILanguages WinAPI_EnumWindows ' +
+        'WinAPI_EnumWindowsPopup WinAPI_EnumWindowStations ' +
+        'WinAPI_EnumWindowsTop WinAPI_EqualMemory WinAPI_EqualRect ' +
+        'WinAPI_EqualRgn WinAPI_ExcludeClipRect ' +
+        'WinAPI_ExpandEnvironmentStrings WinAPI_ExtCreatePen ' +
+        'WinAPI_ExtCreateRegion WinAPI_ExtFloodFill WinAPI_ExtractIcon ' +
+        'WinAPI_ExtractIconEx WinAPI_ExtSelectClipRgn ' +
+        'WinAPI_FatalAppExit WinAPI_FatalExit ' +
+        'WinAPI_FileEncryptionStatus WinAPI_FileExists ' +
+        'WinAPI_FileIconInit WinAPI_FileInUse WinAPI_FillMemory ' +
+        'WinAPI_FillPath WinAPI_FillRect WinAPI_FillRgn ' +
+        'WinAPI_FindClose WinAPI_FindCloseChangeNotification ' +
+        'WinAPI_FindExecutable WinAPI_FindFirstChangeNotification ' +
+        'WinAPI_FindFirstFile WinAPI_FindFirstFileName ' +
+        'WinAPI_FindFirstStream WinAPI_FindNextChangeNotification ' +
+        'WinAPI_FindNextFile WinAPI_FindNextFileName ' +
+        'WinAPI_FindNextStream WinAPI_FindResource ' +
+        'WinAPI_FindResourceEx WinAPI_FindTextDlg WinAPI_FindWindow ' +
+        'WinAPI_FlashWindow WinAPI_FlashWindowEx WinAPI_FlattenPath ' +
+        'WinAPI_FloatToDWord WinAPI_FloatToInt WinAPI_FlushFileBuffers ' +
+        'WinAPI_FlushFRBuffer WinAPI_FlushViewOfFile ' +
+        'WinAPI_FormatDriveDlg WinAPI_FormatMessage WinAPI_FrameRect ' +
+        'WinAPI_FrameRgn WinAPI_FreeLibrary WinAPI_FreeMemory ' +
+        'WinAPI_FreeMRUList WinAPI_FreeResource WinAPI_GdiComment ' +
+        'WinAPI_GetActiveWindow WinAPI_GetAllUsersProfileDirectory ' +
+        'WinAPI_GetAncestor WinAPI_GetApplicationRestartSettings ' +
+        'WinAPI_GetArcDirection WinAPI_GetAsyncKeyState ' +
+        'WinAPI_GetBinaryType WinAPI_GetBitmapBits ' +
+        'WinAPI_GetBitmapDimension WinAPI_GetBitmapDimensionEx ' +
+        'WinAPI_GetBkColor WinAPI_GetBkMode WinAPI_GetBoundsRect ' +
+        'WinAPI_GetBrushOrg WinAPI_GetBufferedPaintBits ' +
+        'WinAPI_GetBufferedPaintDC WinAPI_GetBufferedPaintTargetDC ' +
+        'WinAPI_GetBufferedPaintTargetRect WinAPI_GetBValue ' +
+        'WinAPI_GetCaretBlinkTime WinAPI_GetCaretPos WinAPI_GetCDType ' +
+        'WinAPI_GetClassInfoEx WinAPI_GetClassLongEx ' +
+        'WinAPI_GetClassName WinAPI_GetClientHeight ' +
+        'WinAPI_GetClientRect WinAPI_GetClientWidth ' +
+        'WinAPI_GetClipboardSequenceNumber WinAPI_GetClipBox ' +
+        'WinAPI_GetClipCursor WinAPI_GetClipRgn ' +
+        'WinAPI_GetColorAdjustment WinAPI_GetCompressedFileSize ' +
+        'WinAPI_GetCompression WinAPI_GetConnectedDlg ' +
+        'WinAPI_GetCurrentDirectory WinAPI_GetCurrentHwProfile ' +
+        'WinAPI_GetCurrentObject WinAPI_GetCurrentPosition ' +
+        'WinAPI_GetCurrentProcess ' +
+        'WinAPI_GetCurrentProcessExplicitAppUserModelID ' +
+        'WinAPI_GetCurrentProcessID WinAPI_GetCurrentThemeName ' +
+        'WinAPI_GetCurrentThread WinAPI_GetCurrentThreadId ' +
+        'WinAPI_GetCursor WinAPI_GetCursorInfo WinAPI_GetDateFormat ' +
+        'WinAPI_GetDC WinAPI_GetDCEx WinAPI_GetDefaultPrinter ' +
+        'WinAPI_GetDefaultUserProfileDirectory WinAPI_GetDesktopWindow ' +
+        'WinAPI_GetDeviceCaps WinAPI_GetDeviceDriverBaseName ' +
+        'WinAPI_GetDeviceDriverFileName WinAPI_GetDeviceGammaRamp ' +
+        'WinAPI_GetDIBColorTable WinAPI_GetDIBits ' +
+        'WinAPI_GetDiskFreeSpaceEx WinAPI_GetDlgCtrlID ' +
+        'WinAPI_GetDlgItem WinAPI_GetDllDirectory ' +
+        'WinAPI_GetDriveBusType WinAPI_GetDriveGeometryEx ' +
+        'WinAPI_GetDriveNumber WinAPI_GetDriveType ' +
+        'WinAPI_GetDurationFormat WinAPI_GetEffectiveClientRect ' +
+        'WinAPI_GetEnhMetaFile WinAPI_GetEnhMetaFileBits ' +
+        'WinAPI_GetEnhMetaFileDescription WinAPI_GetEnhMetaFileDimension ' +
+        'WinAPI_GetEnhMetaFileHeader WinAPI_GetErrorMessage ' +
+        'WinAPI_GetErrorMode WinAPI_GetExitCodeProcess ' +
+        'WinAPI_GetExtended WinAPI_GetFileAttributes WinAPI_GetFileID ' +
+        'WinAPI_GetFileInformationByHandle ' +
+        'WinAPI_GetFileInformationByHandleEx WinAPI_GetFilePointerEx ' +
+        'WinAPI_GetFileSizeEx WinAPI_GetFileSizeOnDisk ' +
+        'WinAPI_GetFileTitle WinAPI_GetFileType ' +
+        'WinAPI_GetFileVersionInfo WinAPI_GetFinalPathNameByHandle ' +
+        'WinAPI_GetFinalPathNameByHandleEx WinAPI_GetFocus ' +
+        'WinAPI_GetFontMemoryResourceInfo WinAPI_GetFontName ' +
+        'WinAPI_GetFontResourceInfo WinAPI_GetForegroundWindow ' +
+        'WinAPI_GetFRBuffer WinAPI_GetFullPathName WinAPI_GetGeoInfo ' +
+        'WinAPI_GetGlyphOutline WinAPI_GetGraphicsMode ' +
+        'WinAPI_GetGuiResources WinAPI_GetGUIThreadInfo ' +
+        'WinAPI_GetGValue WinAPI_GetHandleInformation ' +
+        'WinAPI_GetHGlobalFromStream WinAPI_GetIconDimension ' +
+        'WinAPI_GetIconInfo WinAPI_GetIconInfoEx WinAPI_GetIdleTime ' +
+        'WinAPI_GetKeyboardLayout WinAPI_GetKeyboardLayoutList ' +
+        'WinAPI_GetKeyboardState WinAPI_GetKeyboardType ' +
+        'WinAPI_GetKeyNameText WinAPI_GetKeyState ' +
+        'WinAPI_GetLastActivePopup WinAPI_GetLastError ' +
+        'WinAPI_GetLastErrorMessage WinAPI_GetLayeredWindowAttributes ' +
+        'WinAPI_GetLocaleInfo WinAPI_GetLogicalDrives ' +
+        'WinAPI_GetMapMode WinAPI_GetMemorySize ' +
+        'WinAPI_GetMessageExtraInfo WinAPI_GetModuleFileNameEx ' +
+        'WinAPI_GetModuleHandle WinAPI_GetModuleHandleEx ' +
+        'WinAPI_GetModuleInformation WinAPI_GetMonitorInfo ' +
+        'WinAPI_GetMousePos WinAPI_GetMousePosX WinAPI_GetMousePosY ' +
+        'WinAPI_GetMUILanguage WinAPI_GetNumberFormat WinAPI_GetObject ' +
+        'WinAPI_GetObjectID WinAPI_GetObjectInfoByHandle ' +
+        'WinAPI_GetObjectNameByHandle WinAPI_GetObjectType ' +
+        'WinAPI_GetOpenFileName WinAPI_GetOutlineTextMetrics ' +
+        'WinAPI_GetOverlappedResult WinAPI_GetParent ' +
+        'WinAPI_GetParentProcess WinAPI_GetPerformanceInfo ' +
+        'WinAPI_GetPEType WinAPI_GetPhysicallyInstalledSystemMemory ' +
+        'WinAPI_GetPixel WinAPI_GetPolyFillMode WinAPI_GetPosFromRect ' +
+        'WinAPI_GetPriorityClass WinAPI_GetProcAddress ' +
+        'WinAPI_GetProcessAffinityMask WinAPI_GetProcessCommandLine ' +
+        'WinAPI_GetProcessFileName WinAPI_GetProcessHandleCount ' +
+        'WinAPI_GetProcessID WinAPI_GetProcessIoCounters ' +
+        'WinAPI_GetProcessMemoryInfo WinAPI_GetProcessName ' +
+        'WinAPI_GetProcessShutdownParameters WinAPI_GetProcessTimes ' +
+        'WinAPI_GetProcessUser WinAPI_GetProcessWindowStation ' +
+        'WinAPI_GetProcessWorkingDirectory WinAPI_GetProfilesDirectory ' +
+        'WinAPI_GetPwrCapabilities WinAPI_GetRawInputBuffer ' +
+        'WinAPI_GetRawInputBufferLength WinAPI_GetRawInputData ' +
+        'WinAPI_GetRawInputDeviceInfo WinAPI_GetRegionData ' +
+        'WinAPI_GetRegisteredRawInputDevices ' +
+        'WinAPI_GetRegKeyNameByHandle WinAPI_GetRgnBox WinAPI_GetROP2 ' +
+        'WinAPI_GetRValue WinAPI_GetSaveFileName WinAPI_GetShellWindow ' +
+        'WinAPI_GetStartupInfo WinAPI_GetStdHandle ' +
+        'WinAPI_GetStockObject WinAPI_GetStretchBltMode ' +
+        'WinAPI_GetString WinAPI_GetSysColor WinAPI_GetSysColorBrush ' +
+        'WinAPI_GetSystemDefaultLangID WinAPI_GetSystemDefaultLCID ' +
+        'WinAPI_GetSystemDefaultUILanguage WinAPI_GetSystemDEPPolicy ' +
+        'WinAPI_GetSystemInfo WinAPI_GetSystemMetrics ' +
+        'WinAPI_GetSystemPowerStatus WinAPI_GetSystemTimes ' +
+        'WinAPI_GetSystemWow64Directory WinAPI_GetTabbedTextExtent ' +
+        'WinAPI_GetTempFileName WinAPI_GetTextAlign ' +
+        'WinAPI_GetTextCharacterExtra WinAPI_GetTextColor ' +
+        'WinAPI_GetTextExtentPoint32 WinAPI_GetTextFace ' +
+        'WinAPI_GetTextMetrics WinAPI_GetThemeAppProperties ' +
+        'WinAPI_GetThemeBackgroundContentRect ' +
+        'WinAPI_GetThemeBackgroundExtent WinAPI_GetThemeBackgroundRegion ' +
+        'WinAPI_GetThemeBitmap WinAPI_GetThemeBool ' +
+        'WinAPI_GetThemeColor WinAPI_GetThemeDocumentationProperty ' +
+        'WinAPI_GetThemeEnumValue WinAPI_GetThemeFilename ' +
+        'WinAPI_GetThemeFont WinAPI_GetThemeInt WinAPI_GetThemeMargins ' +
+        'WinAPI_GetThemeMetric WinAPI_GetThemePartSize ' +
+        'WinAPI_GetThemePosition WinAPI_GetThemePropertyOrigin ' +
+        'WinAPI_GetThemeRect WinAPI_GetThemeString ' +
+        'WinAPI_GetThemeSysBool WinAPI_GetThemeSysColor ' +
+        'WinAPI_GetThemeSysColorBrush WinAPI_GetThemeSysFont ' +
+        'WinAPI_GetThemeSysInt WinAPI_GetThemeSysSize ' +
+        'WinAPI_GetThemeSysString WinAPI_GetThemeTextExtent ' +
+        'WinAPI_GetThemeTextMetrics WinAPI_GetThemeTransitionDuration ' +
+        'WinAPI_GetThreadDesktop WinAPI_GetThreadErrorMode ' +
+        'WinAPI_GetThreadLocale WinAPI_GetThreadUILanguage ' +
+        'WinAPI_GetTickCount WinAPI_GetTickCount64 ' +
+        'WinAPI_GetTimeFormat WinAPI_GetTopWindow ' +
+        'WinAPI_GetUDFColorMode WinAPI_GetUpdateRect ' +
+        'WinAPI_GetUpdateRgn WinAPI_GetUserDefaultLangID ' +
+        'WinAPI_GetUserDefaultLCID WinAPI_GetUserDefaultUILanguage ' +
+        'WinAPI_GetUserGeoID WinAPI_GetUserObjectInformation ' +
+        'WinAPI_GetVersion WinAPI_GetVersionEx ' +
+        'WinAPI_GetVolumeInformation WinAPI_GetVolumeInformationByHandle ' +
+        'WinAPI_GetVolumeNameForVolumeMountPoint WinAPI_GetWindow ' +
+        'WinAPI_GetWindowDC WinAPI_GetWindowDisplayAffinity ' +
+        'WinAPI_GetWindowExt WinAPI_GetWindowFileName ' +
+        'WinAPI_GetWindowHeight WinAPI_GetWindowInfo ' +
+        'WinAPI_GetWindowLong WinAPI_GetWindowOrg ' +
+        'WinAPI_GetWindowPlacement WinAPI_GetWindowRect ' +
+        'WinAPI_GetWindowRgn WinAPI_GetWindowRgnBox ' +
+        'WinAPI_GetWindowSubclass WinAPI_GetWindowText ' +
+        'WinAPI_GetWindowTheme WinAPI_GetWindowThreadProcessId ' +
+        'WinAPI_GetWindowWidth WinAPI_GetWorkArea ' +
+        'WinAPI_GetWorldTransform WinAPI_GetXYFromPoint ' +
+        'WinAPI_GlobalMemoryStatus WinAPI_GradientFill ' +
+        'WinAPI_GUIDFromString WinAPI_GUIDFromStringEx WinAPI_HashData ' +
+        'WinAPI_HashString WinAPI_HiByte WinAPI_HideCaret ' +
+        'WinAPI_HiDWord WinAPI_HiWord WinAPI_InflateRect ' +
+        'WinAPI_InitMUILanguage WinAPI_InProcess ' +
+        'WinAPI_IntersectClipRect WinAPI_IntersectRect ' +
+        'WinAPI_IntToDWord WinAPI_IntToFloat WinAPI_InvalidateRect ' +
+        'WinAPI_InvalidateRgn WinAPI_InvertANDBitmap ' +
+        'WinAPI_InvertColor WinAPI_InvertRect WinAPI_InvertRgn ' +
+        'WinAPI_IOCTL WinAPI_IsAlphaBitmap WinAPI_IsBadCodePtr ' +
+        'WinAPI_IsBadReadPtr WinAPI_IsBadStringPtr ' +
+        'WinAPI_IsBadWritePtr WinAPI_IsChild WinAPI_IsClassName ' +
+        'WinAPI_IsDoorOpen WinAPI_IsElevated WinAPI_IsHungAppWindow ' +
+        'WinAPI_IsIconic WinAPI_IsInternetConnected ' +
+        'WinAPI_IsLoadKBLayout WinAPI_IsMemory ' +
+        'WinAPI_IsNameInExpression WinAPI_IsNetworkAlive ' +
+        'WinAPI_IsPathShared WinAPI_IsProcessInJob ' +
+        'WinAPI_IsProcessorFeaturePresent WinAPI_IsRectEmpty ' +
+        'WinAPI_IsThemeActive ' +
+        'WinAPI_IsThemeBackgroundPartiallyTransparent ' +
+        'WinAPI_IsThemePartDefined WinAPI_IsValidLocale ' +
+        'WinAPI_IsWindow WinAPI_IsWindowEnabled WinAPI_IsWindowUnicode ' +
+        'WinAPI_IsWindowVisible WinAPI_IsWow64Process ' +
+        'WinAPI_IsWritable WinAPI_IsZoomed WinAPI_Keybd_Event ' +
+        'WinAPI_KillTimer WinAPI_LineDDA WinAPI_LineTo ' +
+        'WinAPI_LoadBitmap WinAPI_LoadCursor WinAPI_LoadCursorFromFile ' +
+        'WinAPI_LoadIcon WinAPI_LoadIconMetric ' +
+        'WinAPI_LoadIconWithScaleDown WinAPI_LoadImage ' +
+        'WinAPI_LoadIndirectString WinAPI_LoadKeyboardLayout ' +
+        'WinAPI_LoadLibrary WinAPI_LoadLibraryEx WinAPI_LoadMedia ' +
+        'WinAPI_LoadResource WinAPI_LoadShell32Icon WinAPI_LoadString ' +
+        'WinAPI_LoadStringEx WinAPI_LoByte WinAPI_LocalFree ' +
+        'WinAPI_LockDevice WinAPI_LockFile WinAPI_LockResource ' +
+        'WinAPI_LockWindowUpdate WinAPI_LockWorkStation WinAPI_LoDWord ' +
+        'WinAPI_LongMid WinAPI_LookupIconIdFromDirectoryEx ' +
+        'WinAPI_LoWord WinAPI_LPtoDP WinAPI_MAKELANGID ' +
+        'WinAPI_MAKELCID WinAPI_MakeLong WinAPI_MakeQWord ' +
+        'WinAPI_MakeWord WinAPI_MapViewOfFile WinAPI_MapVirtualKey ' +
+        'WinAPI_MaskBlt WinAPI_MessageBeep WinAPI_MessageBoxCheck ' +
+        'WinAPI_MessageBoxIndirect WinAPI_MirrorIcon ' +
+        'WinAPI_ModifyWorldTransform WinAPI_MonitorFromPoint ' +
+        'WinAPI_MonitorFromRect WinAPI_MonitorFromWindow ' +
+        'WinAPI_Mouse_Event WinAPI_MoveFileEx WinAPI_MoveMemory ' +
+        'WinAPI_MoveTo WinAPI_MoveToEx WinAPI_MoveWindow ' +
+        'WinAPI_MsgBox WinAPI_MulDiv WinAPI_MultiByteToWideChar ' +
+        'WinAPI_MultiByteToWideCharEx WinAPI_NtStatusToDosError ' +
+        'WinAPI_OemToChar WinAPI_OffsetClipRgn WinAPI_OffsetPoints ' +
+        'WinAPI_OffsetRect WinAPI_OffsetRgn WinAPI_OffsetWindowOrg ' +
+        'WinAPI_OpenDesktop WinAPI_OpenFileById WinAPI_OpenFileDlg ' +
+        'WinAPI_OpenFileMapping WinAPI_OpenIcon ' +
+        'WinAPI_OpenInputDesktop WinAPI_OpenJobObject WinAPI_OpenMutex ' +
+        'WinAPI_OpenProcess WinAPI_OpenProcessToken ' +
+        'WinAPI_OpenSemaphore WinAPI_OpenThemeData ' +
+        'WinAPI_OpenWindowStation WinAPI_PageSetupDlg ' +
+        'WinAPI_PaintDesktop WinAPI_PaintRgn WinAPI_ParseURL ' +
+        'WinAPI_ParseUserName WinAPI_PatBlt WinAPI_PathAddBackslash ' +
+        'WinAPI_PathAddExtension WinAPI_PathAppend ' +
+        'WinAPI_PathBuildRoot WinAPI_PathCanonicalize ' +
+        'WinAPI_PathCommonPrefix WinAPI_PathCompactPath ' +
+        'WinAPI_PathCompactPathEx WinAPI_PathCreateFromUrl ' +
+        'WinAPI_PathFindExtension WinAPI_PathFindFileName ' +
+        'WinAPI_PathFindNextComponent WinAPI_PathFindOnPath ' +
+        'WinAPI_PathGetArgs WinAPI_PathGetCharType ' +
+        'WinAPI_PathGetDriveNumber WinAPI_PathIsContentType ' +
+        'WinAPI_PathIsDirectory WinAPI_PathIsDirectoryEmpty ' +
+        'WinAPI_PathIsExe WinAPI_PathIsFileSpec ' +
+        'WinAPI_PathIsLFNFileSpec WinAPI_PathIsRelative ' +
+        'WinAPI_PathIsRoot WinAPI_PathIsSameRoot ' +
+        'WinAPI_PathIsSystemFolder WinAPI_PathIsUNC ' +
+        'WinAPI_PathIsUNCServer WinAPI_PathIsUNCServerShare ' +
+        'WinAPI_PathMakeSystemFolder WinAPI_PathMatchSpec ' +
+        'WinAPI_PathParseIconLocation WinAPI_PathRelativePathTo ' +
+        'WinAPI_PathRemoveArgs WinAPI_PathRemoveBackslash ' +
+        'WinAPI_PathRemoveExtension WinAPI_PathRemoveFileSpec ' +
+        'WinAPI_PathRenameExtension WinAPI_PathSearchAndQualify ' +
+        'WinAPI_PathSkipRoot WinAPI_PathStripPath ' +
+        'WinAPI_PathStripToRoot WinAPI_PathToRegion ' +
+        'WinAPI_PathUndecorate WinAPI_PathUnExpandEnvStrings ' +
+        'WinAPI_PathUnmakeSystemFolder WinAPI_PathUnquoteSpaces ' +
+        'WinAPI_PathYetAnotherMakeUniqueName WinAPI_PickIconDlg ' +
+        'WinAPI_PlayEnhMetaFile WinAPI_PlaySound WinAPI_PlgBlt ' +
+        'WinAPI_PointFromRect WinAPI_PolyBezier WinAPI_PolyBezierTo ' +
+        'WinAPI_PolyDraw WinAPI_Polygon WinAPI_PostMessage ' +
+        'WinAPI_PrimaryLangId WinAPI_PrintDlg WinAPI_PrintDlgEx ' +
+        'WinAPI_PrintWindow WinAPI_ProgIDFromCLSID WinAPI_PtInRect ' +
+        'WinAPI_PtInRectEx WinAPI_PtInRegion WinAPI_PtVisible ' +
+        'WinAPI_QueryDosDevice WinAPI_QueryInformationJobObject ' +
+        'WinAPI_QueryPerformanceCounter WinAPI_QueryPerformanceFrequency ' +
+        'WinAPI_RadialGradientFill WinAPI_ReadDirectoryChanges ' +
+        'WinAPI_ReadFile WinAPI_ReadProcessMemory WinAPI_Rectangle ' +
+        'WinAPI_RectInRegion WinAPI_RectIsEmpty WinAPI_RectVisible ' +
+        'WinAPI_RedrawWindow WinAPI_RegCloseKey ' +
+        'WinAPI_RegConnectRegistry WinAPI_RegCopyTree ' +
+        'WinAPI_RegCopyTreeEx WinAPI_RegCreateKey ' +
+        'WinAPI_RegDeleteEmptyKey WinAPI_RegDeleteKey ' +
+        'WinAPI_RegDeleteKeyValue WinAPI_RegDeleteTree ' +
+        'WinAPI_RegDeleteTreeEx WinAPI_RegDeleteValue ' +
+        'WinAPI_RegDisableReflectionKey WinAPI_RegDuplicateHKey ' +
+        'WinAPI_RegEnableReflectionKey WinAPI_RegEnumKey ' +
+        'WinAPI_RegEnumValue WinAPI_RegFlushKey ' +
+        'WinAPI_RegisterApplicationRestart WinAPI_RegisterClass ' +
+        'WinAPI_RegisterClassEx WinAPI_RegisterHotKey ' +
+        'WinAPI_RegisterPowerSettingNotification ' +
+        'WinAPI_RegisterRawInputDevices WinAPI_RegisterShellHookWindow ' +
+        'WinAPI_RegisterWindowMessage WinAPI_RegLoadMUIString ' +
+        'WinAPI_RegNotifyChangeKeyValue WinAPI_RegOpenKey ' +
+        'WinAPI_RegQueryInfoKey WinAPI_RegQueryLastWriteTime ' +
+        'WinAPI_RegQueryMultipleValues WinAPI_RegQueryReflectionKey ' +
+        'WinAPI_RegQueryValue WinAPI_RegRestoreKey WinAPI_RegSaveKey ' +
+        'WinAPI_RegSetValue WinAPI_ReleaseCapture WinAPI_ReleaseDC ' +
+        'WinAPI_ReleaseMutex WinAPI_ReleaseSemaphore ' +
+        'WinAPI_ReleaseStream WinAPI_RemoveClipboardFormatListener ' +
+        'WinAPI_RemoveDirectory WinAPI_RemoveFontMemResourceEx ' +
+        'WinAPI_RemoveFontResourceEx WinAPI_RemoveWindowSubclass ' +
+        'WinAPI_ReOpenFile WinAPI_ReplaceFile WinAPI_ReplaceTextDlg ' +
+        'WinAPI_ResetEvent WinAPI_RestartDlg WinAPI_RestoreDC ' +
+        'WinAPI_RGB WinAPI_RotatePoints WinAPI_RoundRect ' +
+        'WinAPI_SaveDC WinAPI_SaveFileDlg WinAPI_SaveHBITMAPToFile ' +
+        'WinAPI_SaveHICONToFile WinAPI_ScaleWindowExt ' +
+        'WinAPI_ScreenToClient WinAPI_SearchPath WinAPI_SelectClipPath ' +
+        'WinAPI_SelectClipRgn WinAPI_SelectObject ' +
+        'WinAPI_SendMessageTimeout WinAPI_SetActiveWindow ' +
+        'WinAPI_SetArcDirection WinAPI_SetBitmapBits ' +
+        'WinAPI_SetBitmapDimensionEx WinAPI_SetBkColor ' +
+        'WinAPI_SetBkMode WinAPI_SetBoundsRect WinAPI_SetBrushOrg ' +
+        'WinAPI_SetCapture WinAPI_SetCaretBlinkTime WinAPI_SetCaretPos ' +
+        'WinAPI_SetClassLongEx WinAPI_SetColorAdjustment ' +
+        'WinAPI_SetCompression WinAPI_SetCurrentDirectory ' +
+        'WinAPI_SetCurrentProcessExplicitAppUserModelID WinAPI_SetCursor ' +
+        'WinAPI_SetDCBrushColor WinAPI_SetDCPenColor ' +
+        'WinAPI_SetDefaultPrinter WinAPI_SetDeviceGammaRamp ' +
+        'WinAPI_SetDIBColorTable WinAPI_SetDIBits ' +
+        'WinAPI_SetDIBitsToDevice WinAPI_SetDllDirectory ' +
+        'WinAPI_SetEndOfFile WinAPI_SetEnhMetaFileBits ' +
+        'WinAPI_SetErrorMode WinAPI_SetEvent WinAPI_SetFileAttributes ' +
+        'WinAPI_SetFileInformationByHandleEx WinAPI_SetFilePointer ' +
+        'WinAPI_SetFilePointerEx WinAPI_SetFileShortName ' +
+        'WinAPI_SetFileValidData WinAPI_SetFocus WinAPI_SetFont ' +
+        'WinAPI_SetForegroundWindow WinAPI_SetFRBuffer ' +
+        'WinAPI_SetGraphicsMode WinAPI_SetHandleInformation ' +
+        'WinAPI_SetInformationJobObject WinAPI_SetKeyboardLayout ' +
+        'WinAPI_SetKeyboardState WinAPI_SetLastError ' +
+        'WinAPI_SetLayeredWindowAttributes WinAPI_SetLocaleInfo ' +
+        'WinAPI_SetMapMode WinAPI_SetMessageExtraInfo WinAPI_SetParent ' +
+        'WinAPI_SetPixel WinAPI_SetPolyFillMode ' +
+        'WinAPI_SetPriorityClass WinAPI_SetProcessAffinityMask ' +
+        'WinAPI_SetProcessShutdownParameters ' +
+        'WinAPI_SetProcessWindowStation WinAPI_SetRectRgn ' +
+        'WinAPI_SetROP2 WinAPI_SetSearchPathMode ' +
+        'WinAPI_SetStretchBltMode WinAPI_SetSysColors ' +
+        'WinAPI_SetSystemCursor WinAPI_SetTextAlign ' +
+        'WinAPI_SetTextCharacterExtra WinAPI_SetTextColor ' +
+        'WinAPI_SetTextJustification WinAPI_SetThemeAppProperties ' +
+        'WinAPI_SetThreadDesktop WinAPI_SetThreadErrorMode ' +
+        'WinAPI_SetThreadExecutionState WinAPI_SetThreadLocale ' +
+        'WinAPI_SetThreadUILanguage WinAPI_SetTimer ' +
+        'WinAPI_SetUDFColorMode WinAPI_SetUserGeoID ' +
+        'WinAPI_SetUserObjectInformation WinAPI_SetVolumeMountPoint ' +
+        'WinAPI_SetWindowDisplayAffinity WinAPI_SetWindowExt ' +
+        'WinAPI_SetWindowLong WinAPI_SetWindowOrg ' +
+        'WinAPI_SetWindowPlacement WinAPI_SetWindowPos ' +
+        'WinAPI_SetWindowRgn WinAPI_SetWindowsHookEx ' +
+        'WinAPI_SetWindowSubclass WinAPI_SetWindowText ' +
+        'WinAPI_SetWindowTheme WinAPI_SetWinEventHook ' +
+        'WinAPI_SetWorldTransform WinAPI_SfcIsFileProtected ' +
+        'WinAPI_SfcIsKeyProtected WinAPI_ShellAboutDlg ' +
+        'WinAPI_ShellAddToRecentDocs WinAPI_ShellChangeNotify ' +
+        'WinAPI_ShellChangeNotifyDeregister ' +
+        'WinAPI_ShellChangeNotifyRegister WinAPI_ShellCreateDirectory ' +
+        'WinAPI_ShellEmptyRecycleBin WinAPI_ShellExecute ' +
+        'WinAPI_ShellExecuteEx WinAPI_ShellExtractAssociatedIcon ' +
+        'WinAPI_ShellExtractIcon WinAPI_ShellFileOperation ' +
+        'WinAPI_ShellFlushSFCache WinAPI_ShellGetFileInfo ' +
+        'WinAPI_ShellGetIconOverlayIndex WinAPI_ShellGetImageList ' +
+        'WinAPI_ShellGetKnownFolderIDList WinAPI_ShellGetKnownFolderPath ' +
+        'WinAPI_ShellGetLocalizedName WinAPI_ShellGetPathFromIDList ' +
+        'WinAPI_ShellGetSetFolderCustomSettings WinAPI_ShellGetSettings ' +
+        'WinAPI_ShellGetSpecialFolderLocation ' +
+        'WinAPI_ShellGetSpecialFolderPath WinAPI_ShellGetStockIconInfo ' +
+        'WinAPI_ShellILCreateFromPath WinAPI_ShellNotifyIcon ' +
+        'WinAPI_ShellNotifyIconGetRect WinAPI_ShellObjectProperties ' +
+        'WinAPI_ShellOpenFolderAndSelectItems WinAPI_ShellOpenWithDlg ' +
+        'WinAPI_ShellQueryRecycleBin ' +
+        'WinAPI_ShellQueryUserNotificationState ' +
+        'WinAPI_ShellRemoveLocalizedName WinAPI_ShellRestricted ' +
+        'WinAPI_ShellSetKnownFolderPath WinAPI_ShellSetLocalizedName ' +
+        'WinAPI_ShellSetSettings WinAPI_ShellStartNetConnectionDlg ' +
+        'WinAPI_ShellUpdateImage WinAPI_ShellUserAuthenticationDlg ' +
+        'WinAPI_ShellUserAuthenticationDlgEx WinAPI_ShortToWord ' +
+        'WinAPI_ShowCaret WinAPI_ShowCursor WinAPI_ShowError ' +
+        'WinAPI_ShowLastError WinAPI_ShowMsg WinAPI_ShowOwnedPopups ' +
+        'WinAPI_ShowWindow WinAPI_ShutdownBlockReasonCreate ' +
+        'WinAPI_ShutdownBlockReasonDestroy ' +
+        'WinAPI_ShutdownBlockReasonQuery WinAPI_SizeOfResource ' +
+        'WinAPI_StretchBlt WinAPI_StretchDIBits ' +
+        'WinAPI_StrFormatByteSize WinAPI_StrFormatByteSizeEx ' +
+        'WinAPI_StrFormatKBSize WinAPI_StrFromTimeInterval ' +
+        'WinAPI_StringFromGUID WinAPI_StringLenA WinAPI_StringLenW ' +
+        'WinAPI_StrLen WinAPI_StrokeAndFillPath WinAPI_StrokePath ' +
+        'WinAPI_StructToArray WinAPI_SubLangId WinAPI_SubtractRect ' +
+        'WinAPI_SwapDWord WinAPI_SwapQWord WinAPI_SwapWord ' +
+        'WinAPI_SwitchColor WinAPI_SwitchDesktop ' +
+        'WinAPI_SwitchToThisWindow WinAPI_SystemParametersInfo ' +
+        'WinAPI_TabbedTextOut WinAPI_TerminateJobObject ' +
+        'WinAPI_TerminateProcess WinAPI_TextOut WinAPI_TileWindows ' +
+        'WinAPI_TrackMouseEvent WinAPI_TransparentBlt ' +
+        'WinAPI_TwipsPerPixelX WinAPI_TwipsPerPixelY ' +
+        'WinAPI_UnhookWindowsHookEx WinAPI_UnhookWinEvent ' +
+        'WinAPI_UnionRect WinAPI_UnionStruct WinAPI_UniqueHardwareID ' +
+        'WinAPI_UnloadKeyboardLayout WinAPI_UnlockFile ' +
+        'WinAPI_UnmapViewOfFile WinAPI_UnregisterApplicationRestart ' +
+        'WinAPI_UnregisterClass WinAPI_UnregisterHotKey ' +
+        'WinAPI_UnregisterPowerSettingNotification ' +
+        'WinAPI_UpdateLayeredWindow WinAPI_UpdateLayeredWindowEx ' +
+        'WinAPI_UpdateLayeredWindowIndirect WinAPI_UpdateResource ' +
+        'WinAPI_UpdateWindow WinAPI_UrlApplyScheme ' +
+        'WinAPI_UrlCanonicalize WinAPI_UrlCombine WinAPI_UrlCompare ' +
+        'WinAPI_UrlCreateFromPath WinAPI_UrlFixup WinAPI_UrlGetPart ' +
+        'WinAPI_UrlHash WinAPI_UrlIs WinAPI_UserHandleGrantAccess ' +
+        'WinAPI_ValidateRect WinAPI_ValidateRgn WinAPI_VerQueryRoot ' +
+        'WinAPI_VerQueryValue WinAPI_VerQueryValueEx ' +
+        'WinAPI_WaitForInputIdle WinAPI_WaitForMultipleObjects ' +
+        'WinAPI_WaitForSingleObject WinAPI_WideCharToMultiByte ' +
+        'WinAPI_WidenPath WinAPI_WindowFromDC WinAPI_WindowFromPoint ' +
+        'WinAPI_WordToShort WinAPI_Wow64EnableWow64FsRedirection ' +
+        'WinAPI_WriteConsole WinAPI_WriteFile ' +
+        'WinAPI_WriteProcessMemory WinAPI_ZeroMemory ' +
+        'WinNet_AddConnection WinNet_AddConnection2 ' +
+        'WinNet_AddConnection3 WinNet_CancelConnection ' +
+        'WinNet_CancelConnection2 WinNet_CloseEnum ' +
+        'WinNet_ConnectionDialog WinNet_ConnectionDialog1 ' +
+        'WinNet_DisconnectDialog WinNet_DisconnectDialog1 ' +
+        'WinNet_EnumResource WinNet_GetConnection ' +
+        'WinNet_GetConnectionPerformance WinNet_GetLastError ' +
+        'WinNet_GetNetworkInformation WinNet_GetProviderName ' +
+        'WinNet_GetResourceInformation WinNet_GetResourceParent ' +
+        'WinNet_GetUniversalName WinNet_GetUser WinNet_OpenEnum ' +
+        'WinNet_RestoreConnection WinNet_UseConnection Word_Create ' +
+        'Word_DocAdd Word_DocAttach Word_DocClose Word_DocExport ' +
+        'Word_DocFind Word_DocFindReplace Word_DocGet ' +
+        'Word_DocLinkAdd Word_DocLinkGet Word_DocOpen ' +
+        'Word_DocPictureAdd Word_DocPrint Word_DocRangeSet ' +
+        'Word_DocSave Word_DocSaveAs Word_DocTableRead ' +
+        'Word_DocTableWrite Word_Quit',
+
+        COMMENT = {
+            variants: [
+              hljs.COMMENT(';', '$', {relevance: 0}),
+              hljs.COMMENT('#cs', '#ce'),
+              hljs.COMMENT('#comments-start', '#comments-end')
+            ]
+        },
+
+        VARIABLE = {
+            className: 'variable',
+            begin: '\\$[A-z0-9_]+'
+        },
+
+        STRING = {
+            className: 'string',
+            variants: [{
+                begin: /"/,
+                end: /"/,
+                contains: [{
+                    begin: /""/,
+                    relevance: 0
+                }]
+            }, {
+                begin: /'/,
+                end: /'/,
+                contains: [{
+                    begin: /''/,
+                    relevance: 0
+                }]
+            }]
+        },
+
+        NUMBER = {
+            variants: [hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE]
+        },
+
+        PREPROCESSOR = {
+            className: 'preprocessor',
+            begin: '#',
+            end: '$',
+            keywords: 'include include-once NoTrayIcon OnAutoItStartRegister RequireAdmin pragma ' +
+                'Au3Stripper_Ignore_Funcs Au3Stripper_Ignore_Variables ' +
+                'Au3Stripper_Off Au3Stripper_On Au3Stripper_Parameters ' +
+                'AutoIt3Wrapper_Add_Constants AutoIt3Wrapper_Au3Check_Parameters ' +
+                'AutoIt3Wrapper_Au3Check_Stop_OnWarning AutoIt3Wrapper_Aut2Exe ' +
+                'AutoIt3Wrapper_AutoIt3 AutoIt3Wrapper_AutoIt3Dir ' +
+                'AutoIt3Wrapper_Change2CUI AutoIt3Wrapper_Compile_Both ' +
+                'AutoIt3Wrapper_Compression AutoIt3Wrapper_EndIf ' +
+                'AutoIt3Wrapper_Icon AutoIt3Wrapper_If_Compile ' +
+                'AutoIt3Wrapper_If_Run AutoIt3Wrapper_Jump_To_First_Error ' +
+                'AutoIt3Wrapper_OutFile AutoIt3Wrapper_OutFile_Type ' +
+                'AutoIt3Wrapper_OutFile_X64 AutoIt3Wrapper_PlugIn_Funcs ' +
+                'AutoIt3Wrapper_Res_Comment Autoit3Wrapper_Res_Compatibility ' +
+                'AutoIt3Wrapper_Res_Description AutoIt3Wrapper_Res_Field ' +
+                'AutoIt3Wrapper_Res_File_Add AutoIt3Wrapper_Res_FileVersion ' +
+                'AutoIt3Wrapper_Res_FileVersion_AutoIncrement ' +
+                'AutoIt3Wrapper_Res_Icon_Add AutoIt3Wrapper_Res_Language ' +
+                'AutoIt3Wrapper_Res_LegalCopyright ' +
+                'AutoIt3Wrapper_Res_ProductVersion ' +
+                'AutoIt3Wrapper_Res_requestedExecutionLevel ' +
+                'AutoIt3Wrapper_Res_SaveSource AutoIt3Wrapper_Run_After ' +
+                'AutoIt3Wrapper_Run_Au3Check AutoIt3Wrapper_Run_Au3Stripper ' +
+                'AutoIt3Wrapper_Run_Before AutoIt3Wrapper_Run_Debug_Mode ' +
+                'AutoIt3Wrapper_Run_SciTE_Minimized ' +
+                'AutoIt3Wrapper_Run_SciTE_OutputPane_Minimized ' +
+                'AutoIt3Wrapper_Run_Tidy AutoIt3Wrapper_ShowProgress ' +
+                'AutoIt3Wrapper_Testing AutoIt3Wrapper_Tidy_Stop_OnError ' +
+                'AutoIt3Wrapper_UPX_Parameters AutoIt3Wrapper_UseUPX ' +
+                'AutoIt3Wrapper_UseX64 AutoIt3Wrapper_Version ' +
+                'AutoIt3Wrapper_Versioning AutoIt3Wrapper_Versioning_Parameters ' +
+                'Tidy_Off Tidy_On Tidy_Parameters EndRegion Region',
+            contains: [{
+                    begin: /\\\n/,
+                    relevance: 0
+                }, {
+                    beginKeywords: 'include',
+                    end: '$',
+                    contains: [
+                        STRING, {
+                            className: 'string',
+                            variants: [{
+                                begin: '<',
+                                end: '>'
+                            }, {
+                                begin: /"/,
+                                end: /"/,
+                                contains: [{
+                                    begin: /""/,
+                                    relevance: 0
+                                }]
+                            }, {
+                                begin: /'/,
+                                end: /'/,
+                                contains: [{
+                                    begin: /''/,
+                                    relevance: 0
+                                }]
+                            }]
+                        }
+                    ]
+                },
+                STRING,
+                COMMENT
+            ]
+        },
+
+        CONSTANT = {
+            className: 'constant',
+            // begin: '@',
+            // end: '$',
+            // keywords: 'AppDataCommonDir AppDataDir AutoItExe AutoItPID AutoItVersion AutoItX64 COM_EventObj CommonFilesDir Compiled ComputerName ComSpec CPUArch CR CRLF DesktopCommonDir DesktopDepth DesktopDir DesktopHeight DesktopRefresh DesktopWidth DocumentsCommonDir error exitCode exitMethod extended FavoritesCommonDir FavoritesDir GUI_CtrlHandle GUI_CtrlId GUI_DragFile GUI_DragId GUI_DropId GUI_WinHandle HomeDrive HomePath HomeShare HotKeyPressed HOUR IPAddress1 IPAddress2 IPAddress3 IPAddress4 KBLayout LF LocalAppDataDir LogonDNSDomain LogonDomain LogonServer MDAY MIN MON MSEC MUILang MyDocumentsDir NumParams OSArch OSBuild OSLang OSServicePack OSType OSVersion ProgramFilesDir ProgramsCommonDir ProgramsDir ScriptDir ScriptFullPath ScriptLineNumber ScriptName SEC StartMenuCommonDir StartMenuDir StartupCommonDir StartupDir SW_DISABLE SW_ENABLE SW_HIDE SW_LOCK SW_MAXIMIZE SW_MINIMIZE SW_RESTORE SW_SHOW SW_SHOWDEFAULT SW_SHOWMAXIMIZED SW_SHOWMINIMIZED SW_SHOWMINNOACTIVE SW_SHOWNA SW_SHOWNOACTIVATE SW_SHOWNORMAL SW_UNLOCK SystemDir TAB TempDir TRAY_ID TrayIconFlashing TrayIconVisible UserName UserProfileDir WDAY WindowsDir WorkingDir YDAY YEAR',
+            // relevance: 5
+            begin: '@[A-z0-9_]+'
+        },
+
+        FUNCTION = {
+            className: 'function',
+            beginKeywords: 'Func',
+            end: '$',
+            excludeEnd: true,
+            illegal: '\\$|\\[|%',
+            contains: [
+                hljs.UNDERSCORE_TITLE_MODE, {
+                    className: 'params',
+                    begin: '\\(',
+                    end: '\\)',
+                    contains: [
+                        VARIABLE,
+                        STRING,
+                        NUMBER
+                    ]
+                }
+            ]
+        };
+
+    return {
+        case_insensitive: true,
+        illegal: /\/\*/,
+        keywords: {
+            keyword: KEYWORDS,
+            built_in: BUILT_IN,
+            literal: LITERAL
+        },
+        contains: [
+            COMMENT,
+            VARIABLE,
+            STRING,
+            NUMBER,
+            PREPROCESSOR,
+            CONSTANT,
+            FUNCTION
+        ]
+    }
+});
+
+hljs.registerLanguage('avrasm', function(hljs) {
+  return {
+    case_insensitive: true,
+    lexemes: '\\.?' + hljs.IDENT_RE,
+    keywords: {
+      keyword:
+        /* mnemonic */
+        'adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs ' +
+        'brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr ' +
+        'clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor ' +
+        'fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul ' +
+        'muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs ' +
+        'sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub ' +
+        'subi swap tst wdr',
+      built_in:
+        /* general purpose registers */
+        'r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 ' +
+        'r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl ' +
+        /* IO Registers (ATMega128) */
+        'ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h ' +
+        'tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c ' +
+        'ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg ' +
+        'ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk ' +
+        'tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al ' +
+        'ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr ' +
+        'porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 ' +
+        'ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf',
+      preprocessor:
+        '.byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list ' +
+        '.listmac .macro .nolist .org .set'
+    },
+    contains: [
+      hljs.C_BLOCK_COMMENT_MODE,
+      hljs.COMMENT(
+        ';',
+        '$',
+        {
+          relevance: 0
+        }
+      ),
+      hljs.C_NUMBER_MODE, // 0x..., decimal, float
+      hljs.BINARY_NUMBER_MODE, // 0b...
+      {
+        className: 'number',
+        begin: '\\b(\\$[a-zA-Z0-9]+|0o[0-7]+)' // $..., 0o...
+      },
+      hljs.QUOTE_STRING_MODE,
+      {
+        className: 'string',
+        begin: '\'', end: '[^\\\\]\'',
+        illegal: '[^\\\\][^\']'
+      },
+      {className: 'label',  begin: '^[A-Za-z0-9_.$]+:'},
+      {className: 'preprocessor', begin: '#', end: '$'},
+      {  // подстановка в «.macro»
+        className: 'localvars',
+        begin: '@[0-9]+'
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('axapta', function(hljs) {
+  return {
+    keywords: 'false int abstract private char boolean static null if for true ' +
+      'while long throw finally protected final return void enum else ' +
+      'break new catch byte super case short default double public try this switch ' +
+      'continue reverse firstfast firstonly forupdate nofetch sum avg minof maxof count ' +
+      'order group by asc desc index hint like dispaly edit client server ttsbegin ' +
+      'ttscommit str real date container anytype common div mod',
+    contains: [
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      hljs.C_NUMBER_MODE,
+      {
+        className: 'preprocessor',
+        begin: '#', end: '$'
+      },
+      {
+        className: 'class',
+        beginKeywords: 'class interface', end: '{', excludeEnd: true,
+        illegal: ':',
+        contains: [
+          {beginKeywords: 'extends implements'},
+          hljs.UNDERSCORE_TITLE_MODE
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('bash', function(hljs) {
+  var VAR = {
+    className: 'variable',
+    variants: [
+      {begin: /\$[\w\d#@][\w\d_]*/},
+      {begin: /\$\{(.*?)}/}
+    ]
+  };
+  var QUOTE_STRING = {
+    className: 'string',
+    begin: /"/, end: /"/,
+    contains: [
+      hljs.BACKSLASH_ESCAPE,
+      VAR,
+      {
+        className: 'variable',
+        begin: /\$\(/, end: /\)/,
+        contains: [hljs.BACKSLASH_ESCAPE]
+      }
+    ]
+  };
+  var APOS_STRING = {
+    className: 'string',
+    begin: /'/, end: /'/
+  };
+
+  return {
+    aliases: ['sh', 'zsh'],
+    lexemes: /-?[a-z\.]+/,
+    keywords: {
+      keyword:
+        'if then else elif fi for while in do done case esac function',
+      literal:
+        'true false',
+      built_in:
+        // Shell built-ins
+        // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html
+        'break cd continue eval exec exit export getopts hash pwd readonly return shift test times ' +
+        'trap umask unset ' +
+        // Bash built-ins
+        'alias bind builtin caller command declare echo enable help let local logout mapfile printf ' +
+        'read readarray source type typeset ulimit unalias ' +
+        // Shell modifiers
+        'set shopt ' +
+        // Zsh built-ins
+        'autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles ' +
+        'compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate ' +
+        'fc fg float functions getcap getln history integer jobs kill limit log noglob popd print ' +
+        'pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit ' +
+        'unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof ' +
+        'zpty zregexparse zsocket zstyle ztcp',
+      operator:
+        '-ne -eq -lt -gt -f -d -e -s -l -a' // relevance booster
+    },
+    contains: [
+      {
+        className: 'shebang',
+        begin: /^#![^\n]+sh\s*$/,
+        relevance: 10
+      },
+      {
+        className: 'function',
+        begin: /\w[\w\d_]*\s*\(\s*\)\s*\{/,
+        returnBegin: true,
+        contains: [hljs.inherit(hljs.TITLE_MODE, {begin: /\w[\w\d_]*/})],
+        relevance: 0
+      },
+      hljs.HASH_COMMENT_MODE,
+      hljs.NUMBER_MODE,
+      QUOTE_STRING,
+      APOS_STRING,
+      VAR
+    ]
+  };
+});
+
+hljs.registerLanguage('brainfuck', function(hljs){
+  var LITERAL = {
+    className: 'literal',
+    begin: '[\\+\\-]',
+    relevance: 0
+  };
+  return {
+    aliases: ['bf'],
+    contains: [
+      hljs.COMMENT(
+        '[^\\[\\]\\.,\\+\\-<> \r\n]',
+        '[\\[\\]\\.,\\+\\-<> \r\n]',
+        {
+          returnEnd: true,
+          relevance: 0
+        }
+      ),
+      {
+        className: 'title',
+        begin: '[\\[\\]]',
+        relevance: 0
+      },
+      {
+        className: 'string',
+        begin: '[\\.,]',
+        relevance: 0
+      },
+      {
+        // this mode works as the only relevance counter
+        begin: /\+\+|\-\-/, returnBegin: true,
+        contains: [LITERAL]
+      },
+      LITERAL
+    ]
+  };
+});
+
+hljs.registerLanguage('cal', function(hljs) {
+  var KEYWORDS =
+    'div mod in and or not xor asserterror begin case do downto else end exit for if of repeat then to ' +
+    'until while with var';
+  var LITERALS = 'false true';
+  var COMMENT_MODES = [
+    hljs.C_LINE_COMMENT_MODE,
+    hljs.COMMENT(
+      /\{/,
+      /\}/,
+      {
+        relevance: 0
+      }
+    ),
+    hljs.COMMENT(
+      /\(\*/,
+      /\*\)/,
+      {
+        relevance: 10
+      }
+    )
+  ];
+  var STRING = {
+    className: 'string',
+    begin: /'/, end: /'/,
+    contains: [{begin: /''/}]
+  };
+  var CHAR_STRING = {
+    className: 'string', begin: /(#\d+)+/
+  };
+  var DATE = {
+      className: 'date',
+      begin: '\\b\\d+(\\.\\d+)?(DT|D|T)',
+      relevance: 0
+  };
+  var DBL_QUOTED_VARIABLE = {
+      className: 'variable',
+      begin: '"',
+      end: '"'
+  };
+
+  var PROCEDURE = {
+    className: 'function',
+    beginKeywords: 'procedure', end: /[:;]/,
+    keywords: 'procedure|10',
+    contains: [
+      hljs.TITLE_MODE,
+      {
+        className: 'params',
+        begin: /\(/, end: /\)/,
+        keywords: KEYWORDS,
+        contains: [STRING, CHAR_STRING]
+      }
+    ].concat(COMMENT_MODES)
+  };
+
+  var OBJECT = {
+    className: 'class',
+    begin: 'OBJECT (Table|Form|Report|Dataport|Codeunit|XMLport|MenuSuite|Page|Query) (\\d+) ([^\\r\\n]+)',
+    returnBegin: true,
+    contains: [
+      hljs.TITLE_MODE,
+        PROCEDURE
+    ]
+  };
+
+  return {
+    case_insensitive: true,
+    keywords: { keyword: KEYWORDS, literal: LITERALS },
+    illegal: /\/\*/,
+    contains: [
+      STRING, CHAR_STRING,
+      DATE, DBL_QUOTED_VARIABLE,
+      hljs.NUMBER_MODE,
+      OBJECT,
+      PROCEDURE
+    ]
+  };
+});
+
+hljs.registerLanguage('capnproto', function(hljs) {
+  return {
+    aliases: ['capnp'],
+    keywords: {
+      keyword:
+        'struct enum interface union group import using const annotation extends in of on as with from fixed',
+      built_in:
+        'Void Bool Int8 Int16 Int32 Int64 UInt8 UInt16 UInt32 UInt64 Float32 Float64 ' +
+        'Text Data AnyPointer AnyStruct Capability List',
+      literal:
+        'true false'
+    },
+    contains: [
+      hljs.QUOTE_STRING_MODE,
+      hljs.NUMBER_MODE,
+      hljs.HASH_COMMENT_MODE,
+      {
+        className: 'shebang',
+        begin: /@0x[\w\d]{16};/,
+        illegal: /\n/
+      },
+      {
+        className: 'number',
+        begin: /@\d+\b/
+      },
+      {
+        className: 'class',
+        beginKeywords: 'struct enum', end: /\{/,
+        illegal: /\n/,
+        contains: [
+          hljs.inherit(hljs.TITLE_MODE, {
+            starts: {endsWithParent: true, excludeEnd: true} // hack: eating everything after the first title
+          })
+        ]
+      },
+      {
+        className: 'class',
+        beginKeywords: 'interface', end: /\{/,
+        illegal: /\n/,
+        contains: [
+          hljs.inherit(hljs.TITLE_MODE, {
+            starts: {endsWithParent: true, excludeEnd: true} // hack: eating everything after the first title
+          })
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('ceylon', function(hljs) {
+  // 2.3. Identifiers and keywords
+  var KEYWORDS =
+    'assembly module package import alias class interface object given value ' +
+    'assign void function new of extends satisfies abstracts in out return ' +
+    'break continue throw assert dynamic if else switch case for while try ' +
+    'catch finally then let this outer super is exists nonempty';
+  // 7.4.1 Declaration Modifiers
+  var DECLARATION_MODIFIERS =
+    'shared abstract formal default actual variable late native deprecated' +
+    'final sealed annotation suppressWarnings small';
+  // 7.4.2 Documentation
+  var DOCUMENTATION =
+    'doc by license see throws tagged';
+  var LANGUAGE_ANNOTATIONS = DECLARATION_MODIFIERS + ' ' + DOCUMENTATION;
+  var SUBST = {
+    className: 'subst', excludeBegin: true, excludeEnd: true,
+    begin: /``/, end: /``/,
+    keywords: KEYWORDS,
+    relevance: 10
+  };
+  var EXPRESSIONS = [
+    {
+      // verbatim string
+      className: 'string',
+      begin: '"""',
+      end: '"""',
+      relevance: 10
+    },
+    {
+      // string literal or template
+      className: 'string',
+      begin: '"', end: '"',
+      contains: [SUBST]
+    },
+    {
+      // character literal
+      className: 'string',
+      begin: "'",
+      end: "'"
+    },
+    {
+      // numeric literal
+      className: 'number',
+      begin: '#[0-9a-fA-F_]+|\\$[01_]+|[0-9_]+(?:\\.[0-9_](?:[eE][+-]?\\d+)?)?[kMGTPmunpf]?',
+      relevance: 0
+    }
+  ];
+  SUBST.contains = EXPRESSIONS;
+
+  return {
+    keywords: {
+      keyword: KEYWORDS,
+      annotation: LANGUAGE_ANNOTATIONS
+    },
+    illegal: '\\$[^01]|#[^0-9a-fA-F]',
+    contains: [
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.COMMENT('/\\*', '\\*/', {contains: ['self']}),
+      {
+        // compiler annotation
+        className: 'annotation',
+        begin: '@[a-z]\\w*(?:\\:\"[^\"]*\")?'
+      }
+    ].concat(EXPRESSIONS)
+  };
+});
+
+hljs.registerLanguage('clojure', function(hljs) {
+  var keywords = {
+    built_in:
+      // Clojure keywords
+      'def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem '+
+      'quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? '+
+      'set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? '+
+      'class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? '+
+      'string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . '+
+      'inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last '+
+      'drop-while while intern condp case reduced cycle split-at split-with repeat replicate '+
+      'iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext '+
+      'nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends '+
+      'add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler '+
+      'set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter '+
+      'monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or '+
+      'when when-not when-let comp juxt partial sequence memoize constantly complement identity assert '+
+      'peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast '+
+      'sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import '+
+      'refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! '+
+      'assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger '+
+      'bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline '+
+      'flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking '+
+      'assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! '+
+      'reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! '+
+      'new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty '+
+      'hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list '+
+      'disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer '+
+      'chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate '+
+      'unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta '+
+      'lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize'
+   };
+
+  var SYMBOLSTART = 'a-zA-Z_\\-!.?+*=<>&#\'';
+  var SYMBOL_RE = '[' + SYMBOLSTART + '][' + SYMBOLSTART + '0-9/;:]*';
+  var SIMPLE_NUMBER_RE = '[-+]?\\d+(\\.\\d+)?';
+
+  var SYMBOL = {
+    begin: SYMBOL_RE,
+    relevance: 0
+  };
+  var NUMBER = {
+    className: 'number', begin: SIMPLE_NUMBER_RE,
+    relevance: 0
+  };
+  var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null});
+  var COMMENT = hljs.COMMENT(
+    ';',
+    '$',
+    {
+      relevance: 0
+    }
+  );
+  var LITERAL = {
+    className: 'literal',
+    begin: /\b(true|false|nil)\b/
+  };
+  var COLLECTION = {
+    className: 'collection',
+    begin: '[\\[\\{]', end: '[\\]\\}]'
+  };
+  var HINT = {
+    className: 'comment',
+    begin: '\\^' + SYMBOL_RE
+  };
+  var HINT_COL = hljs.COMMENT('\\^\\{', '\\}');
+  var KEY = {
+    className: 'attribute',
+    begin: '[:]' + SYMBOL_RE
+  };
+  var LIST = {
+    className: 'list',
+    begin: '\\(', end: '\\)'
+  };
+  var BODY = {
+    endsWithParent: true,
+    relevance: 0
+  };
+  var NAME = {
+    keywords: keywords,
+    lexemes: SYMBOL_RE,
+    className: 'keyword', begin: SYMBOL_RE,
+    starts: BODY
+  };
+  var DEFAULT_CONTAINS = [LIST, STRING, HINT, HINT_COL, COMMENT, KEY, COLLECTION, NUMBER, LITERAL, SYMBOL];
+
+  LIST.contains = [hljs.COMMENT('comment', ''), NAME, BODY];
+  BODY.contains = DEFAULT_CONTAINS;
+  COLLECTION.contains = DEFAULT_CONTAINS;
+
+  return {
+    aliases: ['clj'],
+    illegal: /\S/,
+    contains: [LIST, STRING, HINT, HINT_COL, COMMENT, KEY, COLLECTION, NUMBER, LITERAL]
+  }
+});
+
+hljs.registerLanguage('clojure-repl', function(hljs) {
+  return {
+    contains: [
+      {
+        className: 'prompt',
+        begin: /^([\w.-]+|\s*#_)=>/,
+        starts: {
+          end: /$/,
+          subLanguage: 'clojure'
+        }
+      }
+    ]
+  }
+});
+
+hljs.registerLanguage('cmake', function(hljs) {
+  return {
+    aliases: ['cmake.in'],
+    case_insensitive: true,
+    keywords: {
+      keyword:
+        'add_custom_command add_custom_target add_definitions add_dependencies ' +
+        'add_executable add_library add_subdirectory add_test aux_source_directory ' +
+        'break build_command cmake_minimum_required cmake_policy configure_file ' +
+        'create_test_sourcelist define_property else elseif enable_language enable_testing ' +
+        'endforeach endfunction endif endmacro endwhile execute_process export find_file ' +
+        'find_library find_package find_path find_program fltk_wrap_ui foreach function ' +
+        'get_cmake_property get_directory_property get_filename_component get_property ' +
+        'get_source_file_property get_target_property get_test_property if include ' +
+        'include_directories include_external_msproject include_regular_expression install ' +
+        'link_directories load_cache load_command macro mark_as_advanced message option ' +
+        'output_required_files project qt_wrap_cpp qt_wrap_ui remove_definitions return ' +
+        'separate_arguments set set_directory_properties set_property ' +
+        'set_source_files_properties set_target_properties set_tests_properties site_name ' +
+        'source_group string target_link_libraries try_compile try_run unset variable_watch ' +
+        'while build_name exec_program export_library_dependencies install_files ' +
+        'install_programs install_targets link_libraries make_directory remove subdir_depends ' +
+        'subdirs use_mangled_mesa utility_source variable_requires write_file ' +
+        'qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or',
+      operator:
+        'equal less greater strless strgreater strequal matches'
+    },
+    contains: [
+      {
+        className: 'envvar',
+        begin: '\\${', end: '}'
+      },
+      hljs.HASH_COMMENT_MODE,
+      hljs.QUOTE_STRING_MODE,
+      hljs.NUMBER_MODE
+    ]
+  };
+});
+
+hljs.registerLanguage('coffeescript', function(hljs) {
+  var KEYWORDS = {
+    keyword:
+      // JS keywords
+      'in if for while finally new do return else break catch instanceof throw try this ' +
+      'switch continue typeof delete debugger super ' +
+      // Coffee keywords
+      'then unless until loop of by when and or is isnt not',
+    literal:
+      // JS literals
+      'true false null undefined ' +
+      // Coffee literals
+      'yes no on off',
+    built_in:
+      'npm require console print module global window document'
+  };
+  var JS_IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';
+  var SUBST = {
+    className: 'subst',
+    begin: /#\{/, end: /}/,
+    keywords: KEYWORDS
+  };
+  var EXPRESSIONS = [
+    hljs.BINARY_NUMBER_MODE,
+    hljs.inherit(hljs.C_NUMBER_MODE, {starts: {end: '(\\s*/)?', relevance: 0}}), // a number tries to eat the following slash to prevent treating it as a regexp
+    {
+      className: 'string',
+      variants: [
+        {
+          begin: /'''/, end: /'''/,
+          contains: [hljs.BACKSLASH_ESCAPE]
+        },
+        {
+          begin: /'/, end: /'/,
+          contains: [hljs.BACKSLASH_ESCAPE]
+        },
+        {
+          begin: /"""/, end: /"""/,
+          contains: [hljs.BACKSLASH_ESCAPE, SUBST]
+        },
+        {
+          begin: /"/, end: /"/,
+          contains: [hljs.BACKSLASH_ESCAPE, SUBST]
+        }
+      ]
+    },
+    {
+      className: 'regexp',
+      variants: [
+        {
+          begin: '///', end: '///',
+          contains: [SUBST, hljs.HASH_COMMENT_MODE]
+        },
+        {
+          begin: '//[gim]*',
+          relevance: 0
+        },
+        {
+          // regex can't start with space to parse x / 2 / 3 as two divisions
+          // regex can't start with *, and it supports an "illegal" in the main mode
+          begin: /\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/
+        }
+      ]
+    },
+    {
+      className: 'property',
+      begin: '@' + JS_IDENT_RE
+    },
+    {
+      begin: '`', end: '`',
+      excludeBegin: true, excludeEnd: true,
+      subLanguage: 'javascript'
+    }
+  ];
+  SUBST.contains = EXPRESSIONS;
+
+  var TITLE = hljs.inherit(hljs.TITLE_MODE, {begin: JS_IDENT_RE});
+  var PARAMS_RE = '(\\(.*\\))?\\s*\\B[-=]>';
+  var PARAMS = {
+    className: 'params',
+    begin: '\\([^\\(]', returnBegin: true,
+    /* We need another contained nameless mode to not have every nested
+    pair of parens to be called "params" */
+    contains: [{
+      begin: /\(/, end: /\)/,
+      keywords: KEYWORDS,
+      contains: ['self'].concat(EXPRESSIONS)
+    }]
+  };
+
+  return {
+    aliases: ['coffee', 'cson', 'iced'],
+    keywords: KEYWORDS,
+    illegal: /\/\*/,
+    contains: EXPRESSIONS.concat([
+      hljs.COMMENT('###', '###'),
+      hljs.HASH_COMMENT_MODE,
+      {
+        className: 'function',
+        begin: '^\\s*' + JS_IDENT_RE + '\\s*=\\s*' + PARAMS_RE, end: '[-=]>',
+        returnBegin: true,
+        contains: [TITLE, PARAMS]
+      },
+      {
+        // anonymous function start
+        begin: /[:\(,=]\s*/,
+        relevance: 0,
+        contains: [
+          {
+            className: 'function',
+            begin: PARAMS_RE, end: '[-=]>',
+            returnBegin: true,
+            contains: [PARAMS]
+          }
+        ]
+      },
+      {
+        className: 'class',
+        beginKeywords: 'class',
+        end: '$',
+        illegal: /[:="\[\]]/,
+        contains: [
+          {
+            beginKeywords: 'extends',
+            endsWithParent: true,
+            illegal: /[:="\[\]]/,
+            contains: [TITLE]
+          },
+          TITLE
+        ]
+      },
+      {
+        className: 'attribute',
+        begin: JS_IDENT_RE + ':', end: ':',
+        returnBegin: true, returnEnd: true,
+        relevance: 0
+      }
+    ])
+  };
+});
+
+hljs.registerLanguage('cpp', function(hljs) {
+  var CPP_PRIMATIVE_TYPES = {
+    className: 'keyword',
+    begin: '\\b[a-z\\d_]*_t\\b'
+  };
+
+  var STRINGS = {
+    className: 'string',
+    variants: [
+      hljs.inherit(hljs.QUOTE_STRING_MODE, { begin: '((u8?|U)|L)?"' }),
+      {
+        begin: '(u8?|U)?R"', end: '"',
+        contains: [hljs.BACKSLASH_ESCAPE]
+      },
+      {
+        begin: '\'\\\\?.', end: '\'',
+        illegal: '.'
+      }
+    ]
+  };
+
+  var NUMBERS = {
+    className: 'number',
+    variants: [
+      { begin: '\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)' },
+      { begin: hljs.C_NUMBER_RE }
+    ]
+  };
+
+  var PREPROCESSOR =       {
+    className: 'preprocessor',
+    begin: '#', end: '$',
+    keywords: 'if else elif endif define undef warning error line ' +
+              'pragma ifdef ifndef',
+    contains: [
+      {
+        begin: /\\\n/, relevance: 0
+      },
+      {
+        beginKeywords: 'include', end: '$',
+        contains: [
+          STRINGS,
+          {
+            className: 'string',
+            begin: '<', end: '>',
+            illegal: '\\n',
+          }
+        ]
+      },
+      STRINGS,
+      NUMBERS,
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE
+    ]
+  };
+
+  var FUNCTION_TITLE = hljs.IDENT_RE + '\\s*\\(';
+
+  var CPP_KEYWORDS = {
+    keyword: 'int float while private char catch export virtual operator sizeof ' +
+      'dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace ' +
+      'unsigned long volatile static protected bool template mutable if public friend ' +
+      'do goto auto void enum else break extern using class asm case typeid ' +
+      'short reinterpret_cast|10 default double register explicit signed typename try this ' +
+      'switch continue inline delete alignof constexpr decltype ' +
+      'noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary ' +
+      'atomic_bool atomic_char atomic_schar ' +
+      'atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong ' +
+      'atomic_ullong',
+    built_in: 'std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream ' +
+      'auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set ' +
+      'unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos ' +
+      'asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp ' +
+      'fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper ' +
+      'isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow ' +
+      'printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp ' +
+      'strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan ' +
+      'vfprintf vprintf vsprintf',
+    literal: 'true false nullptr NULL'
+  };
+
+  return {
+    aliases: ['c', 'cc', 'h', 'c++', 'h++', 'hpp'],
+    keywords: CPP_KEYWORDS,
+    illegal: '</',
+    contains: [
+      CPP_PRIMATIVE_TYPES,
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      NUMBERS,
+      STRINGS,
+      PREPROCESSOR,
+      {
+        begin: '\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<', end: '>',
+        keywords: CPP_KEYWORDS,
+        contains: ['self', CPP_PRIMATIVE_TYPES]
+      },
+      {
+        begin: hljs.IDENT_RE + '::',
+        keywords: CPP_KEYWORDS
+      },
+      {
+        // Expression keywords prevent 'keyword Name(...) or else if(...)' from
+        // being recognized as a function definition
+        beginKeywords: 'new throw return else',
+        relevance: 0
+      },
+      {
+        className: 'function',
+        begin: '(' + hljs.IDENT_RE + '[\\*&\\s]+)+' + FUNCTION_TITLE,
+        returnBegin: true, end: /[{;=]/,
+        excludeEnd: true,
+        keywords: CPP_KEYWORDS,
+        illegal: /[^\w\s\*&]/,
+        contains: [
+          {
+            begin: FUNCTION_TITLE, returnBegin: true,
+            contains: [hljs.TITLE_MODE],
+            relevance: 0
+          },
+          {
+            className: 'params',
+            begin: /\(/, end: /\)/,
+            keywords: CPP_KEYWORDS,
+            relevance: 0,
+            contains: [
+              hljs.C_LINE_COMMENT_MODE,
+              hljs.C_BLOCK_COMMENT_MODE,
+              STRINGS,
+              NUMBERS
+            ]
+          },
+          hljs.C_LINE_COMMENT_MODE,
+          hljs.C_BLOCK_COMMENT_MODE,
+          PREPROCESSOR
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('crmsh', function(hljs) {
+  var RESOURCES = 'primitive rsc_template';
+
+  var COMMANDS = 'group clone ms master location colocation order fencing_topology ' +
+      'rsc_ticket acl_target acl_group user role ' +
+      'tag xml';
+
+  var PROPERTY_SETS = 'property rsc_defaults op_defaults';
+
+  var KEYWORDS = 'params meta operations op rule attributes utilization';
+
+  var OPERATORS = 'read write deny defined not_defined in_range date spec in ' +
+      'ref reference attribute type xpath version and or lt gt tag ' +
+      'lte gte eq ne \\';
+
+  var TYPES = 'number string';
+
+  var LITERALS = 'Master Started Slave Stopped start promote demote stop monitor true false';
+
+  return {
+    aliases: ['crm', 'pcmk'],
+    case_insensitive: true,
+    keywords: {
+      keyword: KEYWORDS,
+      operator: OPERATORS,
+      type: TYPES,
+      literal: LITERALS
+    },
+    contains: [
+      hljs.HASH_COMMENT_MODE,
+      {
+        beginKeywords: 'node',
+        starts: {
+          className: 'identifier',
+          end: '\\s*([\\w_-]+:)?',
+          starts: {
+            className: 'title',
+            end: '\\s*[\\$\\w_][\\w_-]*'
+          }
+        }
+      },
+      {
+        beginKeywords: RESOURCES,
+        starts: {
+          className: 'title',
+          end: '\\s*[\\$\\w_][\\w_-]*',
+          starts: {
+            className: 'pragma',
+            end: '\\s*@?[\\w_][\\w_\\.:-]*',
+          }
+        }
+      },
+      {
+        begin: '\\b(' + COMMANDS.split(' ').join('|') + ')\\s+',
+        keywords: COMMANDS,
+        starts: {
+          className: 'title',
+          end: '[\\$\\w_][\\w_-]*',
+        }
+      },
+      {
+        beginKeywords: PROPERTY_SETS,
+        starts: {
+          className: 'title',
+          end: '\\s*([\\w_-]+:)?'
+        }
+      },
+      hljs.QUOTE_STRING_MODE,
+      {
+        className: 'pragma',
+        begin: '(ocf|systemd|service|lsb):[\\w_:-]+',
+        relevance: 0
+      },
+      {
+        className: 'number',
+        begin: '\\b\\d+(\\.\\d+)?(ms|s|h|m)?',
+        relevance: 0
+      },
+      {
+        className: 'number',
+        begin: '[-]?(infinity|inf)',
+        relevance: 0
+      },
+      {
+        className: 'variable',
+        begin: /([A-Za-z\$_\#][\w_-]+)=/,
+        relevance: 0
+      },
+      {
+        className: 'tag',
+        begin: '</?',
+        end: '/?>',
+        relevance: 0
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('crystal', function(hljs) {
+  var NUM_SUFFIX = '(_[uif](8|16|32|64))?';
+  var CRYSTAL_IDENT_RE = '[a-zA-Z_]\\w*[!?=]?';
+  var RE_STARTER = '!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|' +
+    '>>|>|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~';
+  var CRYSTAL_METHOD_RE = '[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\][=?]?';
+  var CRYSTAL_KEYWORDS = {
+    keyword:
+      'abstract alias as asm begin break case class def do else elsif end ensure enum extend for fun if ifdef ' +
+      'include instance_sizeof is_a? lib macro module next of out pointerof private protected rescue responds_to? ' +
+      'return require self sizeof struct super then type typeof union unless until when while with yield ' +
+      '__DIR__ __FILE__ __LINE__',
+    literal: 'false nil true'
+  };
+  var SUBST = {
+    className: 'subst',
+    begin: '#{', end: '}',
+    keywords: CRYSTAL_KEYWORDS
+  };
+  var EXPANSION = {
+    className: 'expansion',
+    variants: [
+      {begin: '\\{\\{', end: '\\}\\}'},
+      {begin: '\\{%', end: '%\\}'}
+    ],
+    keywords: CRYSTAL_KEYWORDS,
+    relevance: 10
+  };
+
+  function recursiveParen(begin, end) {
+    var
+    contains = [{begin: begin, end: end}];
+    contains[0].contains = contains;
+    return contains;
+  }
+  var STRING = {
+    className: 'string',
+    contains: [hljs.BACKSLASH_ESCAPE, SUBST],
+    variants: [
+      {begin: /'/, end: /'/},
+      {begin: /"/, end: /"/},
+      {begin: /`/, end: /`/},
+      {begin: '%w?\\(', end: '\\)', contains: recursiveParen('\\(', '\\)')},
+      {begin: '%w?\\[', end: '\\]', contains: recursiveParen('\\[', '\\]')},
+      {begin: '%w?{', end: '}', contains: recursiveParen('{', '}')},
+      {begin: '%w?<', end: '>', contains: recursiveParen('<', '>')},
+      {begin: '%w?/', end: '/'},
+      {begin: '%w?%', end: '%'},
+      {begin: '%w?-', end: '-'},
+      {begin: '%w?\\|', end: '\\|'},
+    ],
+    relevance: 0,
+  };
+  var REGEXP = {
+    begin: '(' + RE_STARTER + ')\\s*',
+    contains: [
+      {
+        className: 'regexp',
+        contains: [hljs.BACKSLASH_ESCAPE, SUBST],
+        variants: [
+          {begin: '/', end: '/[a-z]*'},
+          {begin: '%r\\(', end: '\\)', contains: recursiveParen('\\(', '\\)')},
+          {begin: '%r\\[', end: '\\]', contains: recursiveParen('\\[', '\\]')},
+          {begin: '%r{', end: '}', contains: recursiveParen('{', '}')},
+          {begin: '%r<', end: '>', contains: recursiveParen('<', '>')},
+          {begin: '%r/', end: '/'},
+          {begin: '%r%', end: '%'},
+          {begin: '%r-', end: '-'},
+          {begin: '%r\\|', end: '\\|'},
+        ]
+      }
+    ],
+    relevance: 0
+  };
+  var REGEXP2 = {
+    className: 'regexp',
+    contains: [hljs.BACKSLASH_ESCAPE, SUBST],
+    variants: [
+      {begin: '%r\\(', end: '\\)', contains: recursiveParen('\\(', '\\)')},
+      {begin: '%r\\[', end: '\\]', contains: recursiveParen('\\[', '\\]')},
+      {begin: '%r{', end: '}', contains: recursiveParen('{', '}')},
+      {begin: '%r<', end: '>', contains: recursiveParen('<', '>')},
+      {begin: '%r/', end: '/'},
+      {begin: '%r%', end: '%'},
+      {begin: '%r-', end: '-'},
+      {begin: '%r\\|', end: '\\|'},
+    ],
+    relevance: 0
+  };
+  var ATTRIBUTE = {
+    className: 'annotation',
+    begin: '@\\[', end: '\\]',
+    relevance: 5
+  };
+  var CRYSTAL_DEFAULT_CONTAINS = [
+    EXPANSION,
+    STRING,
+    REGEXP,
+    REGEXP2,
+    ATTRIBUTE,
+    hljs.HASH_COMMENT_MODE,
+    {
+      className: 'class',
+      beginKeywords: 'class module struct', end: '$|;',
+      illegal: /=/,
+      contains: [
+        hljs.HASH_COMMENT_MODE,
+        hljs.inherit(hljs.TITLE_MODE, {begin: '[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?'}),
+        {
+          className: 'inheritance',
+          begin: '<\\s*',
+          contains: [{
+            className: 'parent',
+            begin: '(' + hljs.IDENT_RE + '::)?' + hljs.IDENT_RE
+          }]
+        }
+      ]
+    },
+    {
+      className: 'class',
+      beginKeywords: 'lib enum union', end: '$|;',
+      illegal: /=/,
+      contains: [
+        hljs.HASH_COMMENT_MODE,
+        hljs.inherit(hljs.TITLE_MODE, {begin: '[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?'}),
+      ],
+      relevance: 10
+    },
+    {
+      className: 'function',
+      beginKeywords: 'def', end: /\B\b/,
+      contains: [
+        hljs.inherit(hljs.TITLE_MODE, {
+          begin: CRYSTAL_METHOD_RE,
+          endsParent: true
+        })
+      ]
+    },
+    {
+      className: 'function',
+      beginKeywords: 'fun macro', end: /\B\b/,
+      contains: [
+        hljs.inherit(hljs.TITLE_MODE, {
+          begin: CRYSTAL_METHOD_RE,
+          endsParent: true
+        })
+      ],
+      relevance: 5
+    },
+    {
+      className: 'constant',
+      begin: '(::)?(\\b[A-Z]\\w*(::)?)+',
+      relevance: 0
+    },
+    {
+      className: 'symbol',
+      begin: hljs.UNDERSCORE_IDENT_RE + '(\\!|\\?)?:',
+      relevance: 0
+    },
+    {
+      className: 'symbol',
+      begin: ':',
+      contains: [STRING, {begin: CRYSTAL_METHOD_RE}],
+      relevance: 0
+    },
+    {
+      className: 'number',
+      variants: [
+        { begin: '\\b0b([01_]*[01])' + NUM_SUFFIX },
+        { begin: '\\b0o([0-7_]*[0-7])' + NUM_SUFFIX },
+        { begin: '\\b0x([A-Fa-f0-9_]*[A-Fa-f0-9])' + NUM_SUFFIX },
+        { begin: '\\b(([0-9][0-9_]*[0-9]|[0-9])(\\.[0-9_]*[0-9])?([eE][+-]?[0-9_]*[0-9])?)' + NUM_SUFFIX}
+      ],
+      relevance: 0
+    },
+    {
+      className: 'variable',
+      begin: '(\\$\\W)|((\\$|\\@\\@?|%)(\\w+))'
+    }
+  ];
+  SUBST.contains = CRYSTAL_DEFAULT_CONTAINS;
+  ATTRIBUTE.contains = CRYSTAL_DEFAULT_CONTAINS;
+  EXPANSION.contains = CRYSTAL_DEFAULT_CONTAINS.slice(1); // without EXPANSION
+
+  return {
+    aliases: ['cr'],
+    lexemes: CRYSTAL_IDENT_RE,
+    keywords: CRYSTAL_KEYWORDS,
+    contains: CRYSTAL_DEFAULT_CONTAINS
+  };
+});
+
+hljs.registerLanguage('cs', function(hljs) {
+  var KEYWORDS =
+    // Normal keywords.
+    'abstract as base bool break byte case catch char checked const continue decimal dynamic ' +
+    'default delegate do double else enum event explicit extern false finally fixed float ' +
+    'for foreach goto if implicit in int interface internal is lock long null when ' +
+    'object operator out override params private protected public readonly ref sbyte ' +
+    'sealed short sizeof stackalloc static string struct switch this true try typeof ' +
+    'uint ulong unchecked unsafe ushort using virtual volatile void while async ' +
+    'protected public private internal ' +
+    // Contextual keywords.
+    'ascending descending from get group into join let orderby partial select set value var ' +
+    'where yield';
+  var GENERIC_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '>)?';
+  return {
+    aliases: ['csharp'],
+    keywords: KEYWORDS,
+    illegal: /::/,
+    contains: [
+      hljs.COMMENT(
+        '///',
+        '$',
+        {
+          returnBegin: true,
+          contains: [
+            {
+              className: 'xmlDocTag',
+              variants: [
+                {
+                  begin: '///', relevance: 0
+                },
+                {
+                  begin: '<!--|-->'
+                },
+                {
+                  begin: '</?', end: '>'
+                }
+              ]
+            }
+          ]
+        }
+      ),
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      {
+        className: 'preprocessor',
+        begin: '#', end: '$',
+        keywords: 'if else elif endif define undef warning error line region endregion pragma checksum'
+      },
+      {
+        className: 'string',
+        begin: '@"', end: '"',
+        contains: [{begin: '""'}]
+      },
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      hljs.C_NUMBER_MODE,
+      {
+        beginKeywords: 'class interface', end: /[{;=]/,
+        illegal: /[^\s:]/,
+        contains: [
+          hljs.TITLE_MODE,
+          hljs.C_LINE_COMMENT_MODE,
+          hljs.C_BLOCK_COMMENT_MODE
+        ]
+      },
+      {
+        beginKeywords: 'namespace', end: /[{;=]/,
+        illegal: /[^\s:]/,
+        contains: [
+          {
+            // Customization of hljs.TITLE_MODE that allows '.'
+            className: 'title',
+            begin: '[a-zA-Z](\\.?\\w)*',
+            relevance: 0
+          },
+          hljs.C_LINE_COMMENT_MODE,
+          hljs.C_BLOCK_COMMENT_MODE
+        ]
+      },
+      {
+        // Expression keywords prevent 'keyword Name(...)' from being
+        // recognized as a function definition
+        beginKeywords: 'new return throw await',
+        relevance: 0
+      },
+      {
+        className: 'function',
+        begin: '(' + GENERIC_IDENT_RE + '\\s+)+' + hljs.IDENT_RE + '\\s*\\(', returnBegin: true, end: /[{;=]/,
+        excludeEnd: true,
+        keywords: KEYWORDS,
+        contains: [
+          {
+            begin: hljs.IDENT_RE + '\\s*\\(', returnBegin: true,
+            contains: [hljs.TITLE_MODE],
+            relevance: 0
+          },
+          {
+            className: 'params',
+            begin: /\(/, end: /\)/,
+            excludeBegin: true,
+            excludeEnd: true,
+            keywords: KEYWORDS,
+            relevance: 0,
+            contains: [
+              hljs.APOS_STRING_MODE,
+              hljs.QUOTE_STRING_MODE,
+              hljs.C_NUMBER_MODE,
+              hljs.C_BLOCK_COMMENT_MODE
+            ]
+          },
+          hljs.C_LINE_COMMENT_MODE,
+          hljs.C_BLOCK_COMMENT_MODE
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('css', function(hljs) {
+  var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';
+  var FUNCTION = {
+    className: 'function',
+    begin: IDENT_RE + '\\(',
+    returnBegin: true,
+    excludeEnd: true,
+    end: '\\('
+  };
+  var RULE = {
+    className: 'rule',
+    begin: /[A-Z\_\.\-]+\s*:/, returnBegin: true, end: ';', endsWithParent: true,
+    contains: [
+      {
+        className: 'attribute',
+        begin: /\S/, end: ':', excludeEnd: true,
+        starts: {
+          className: 'value',
+          endsWithParent: true, excludeEnd: true,
+          contains: [
+            FUNCTION,
+            hljs.CSS_NUMBER_MODE,
+            hljs.QUOTE_STRING_MODE,
+            hljs.APOS_STRING_MODE,
+            hljs.C_BLOCK_COMMENT_MODE,
+            {
+              className: 'hexcolor', begin: '#[0-9A-Fa-f]+'
+            },
+            {
+              className: 'important', begin: '!important'
+            }
+          ]
+        }
+      }
+    ]
+  };
+
+  return {
+    case_insensitive: true,
+    illegal: /[=\/|'\$]/,
+    contains: [
+      hljs.C_BLOCK_COMMENT_MODE,
+      {
+        className: 'id', begin: /\#[A-Za-z0-9_-]+/
+      },
+      {
+        className: 'class', begin: /\.[A-Za-z0-9_-]+/
+      },
+      {
+        className: 'attr_selector',
+        begin: /\[/, end: /\]/,
+        illegal: '$'
+      },
+      {
+        className: 'pseudo',
+        begin: /:(:)?[a-zA-Z0-9\_\-\+\(\)"']+/
+      },
+      {
+        className: 'at_rule',
+        begin: '@(font-face|page)',
+        lexemes: '[a-z-]+',
+        keywords: 'font-face page'
+      },
+      {
+        className: 'at_rule',
+        begin: '@', end: '[{;]', // at_rule eating first "{" is a good thing
+                                 // because it doesn’t let it to be parsed as
+                                 // a rule set but instead drops parser into
+                                 // the default mode which is how it should be.
+        contains: [
+          {
+            className: 'keyword',
+            begin: /\S+/
+          },
+          {
+            begin: /\s/, endsWithParent: true, excludeEnd: true,
+            relevance: 0,
+            contains: [
+              FUNCTION,
+              hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE,
+              hljs.CSS_NUMBER_MODE
+            ]
+          }
+        ]
+      },
+      {
+        className: 'tag', begin: IDENT_RE,
+        relevance: 0
+      },
+      {
+        className: 'rules',
+        begin: '{', end: '}',
+        illegal: /\S/,
+        contains: [
+          hljs.C_BLOCK_COMMENT_MODE,
+          RULE,
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('d', /**
+ * Known issues:
+ *
+ * - invalid hex string literals will be recognized as a double quoted strings
+ *   but 'x' at the beginning of string will not be matched
+ *
+ * - delimited string literals are not checked for matching end delimiter
+ *   (not possible to do with js regexp)
+ *
+ * - content of token string is colored as a string (i.e. no keyword coloring inside a token string)
+ *   also, content of token string is not validated to contain only valid D tokens
+ *
+ * - special token sequence rule is not strictly following D grammar (anything following #line
+ *   up to the end of line is matched as special token sequence)
+ */
+
+function(hljs) {
+  /**
+   * Language keywords
+   *
+   * @type {Object}
+   */
+  var D_KEYWORDS = {
+    keyword:
+      'abstract alias align asm assert auto body break byte case cast catch class ' +
+      'const continue debug default delete deprecated do else enum export extern final ' +
+      'finally for foreach foreach_reverse|10 goto if immutable import in inout int ' +
+      'interface invariant is lazy macro mixin module new nothrow out override package ' +
+      'pragma private protected public pure ref return scope shared static struct ' +
+      'super switch synchronized template this throw try typedef typeid typeof union ' +
+      'unittest version void volatile while with __FILE__ __LINE__ __gshared|10 ' +
+      '__thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__',
+    built_in:
+      'bool cdouble cent cfloat char creal dchar delegate double dstring float function ' +
+      'idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar ' +
+      'wstring',
+    literal:
+      'false null true'
+  };
+
+  /**
+   * Number literal regexps
+   *
+   * @type {String}
+   */
+  var decimal_integer_re = '(0|[1-9][\\d_]*)',
+    decimal_integer_nosus_re = '(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)',
+    binary_integer_re = '0[bB][01_]+',
+    hexadecimal_digits_re = '([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)',
+    hexadecimal_integer_re = '0[xX]' + hexadecimal_digits_re,
+
+    decimal_exponent_re = '([eE][+-]?' + decimal_integer_nosus_re + ')',
+    decimal_float_re = '(' + decimal_integer_nosus_re + '(\\.\\d*|' + decimal_exponent_re + ')|' +
+                '\\d+\\.' + decimal_integer_nosus_re + decimal_integer_nosus_re + '|' +
+                '\\.' + decimal_integer_re + decimal_exponent_re + '?' +
+              ')',
+    hexadecimal_float_re = '(0[xX](' +
+                  hexadecimal_digits_re + '\\.' + hexadecimal_digits_re + '|'+
+                  '\\.?' + hexadecimal_digits_re +
+                 ')[pP][+-]?' + decimal_integer_nosus_re + ')',
+
+    integer_re = '(' +
+      decimal_integer_re + '|' +
+      binary_integer_re  + '|' +
+       hexadecimal_integer_re   +
+    ')',
+
+    float_re = '(' +
+      hexadecimal_float_re + '|' +
+      decimal_float_re  +
+    ')';
+
+  /**
+   * Escape sequence supported in D string and character literals
+   *
+   * @type {String}
+   */
+  var escape_sequence_re = '\\\\(' +
+              '[\'"\\?\\\\abfnrtv]|' +  // common escapes
+              'u[\\dA-Fa-f]{4}|' +     // four hex digit unicode codepoint
+              '[0-7]{1,3}|' +       // one to three octal digit ascii char code
+              'x[\\dA-Fa-f]{2}|' +    // two hex digit ascii char code
+              'U[\\dA-Fa-f]{8}' +      // eight hex digit unicode codepoint
+              ')|' +
+              '&[a-zA-Z\\d]{2,};';      // named character entity
+
+  /**
+   * D integer number literals
+   *
+   * @type {Object}
+   */
+  var D_INTEGER_MODE = {
+    className: 'number',
+      begin: '\\b' + integer_re + '(L|u|U|Lu|LU|uL|UL)?',
+      relevance: 0
+  };
+
+  /**
+   * [D_FLOAT_MODE description]
+   * @type {Object}
+   */
+  var D_FLOAT_MODE = {
+    className: 'number',
+    begin: '\\b(' +
+        float_re + '([fF]|L|i|[fF]i|Li)?|' +
+        integer_re + '(i|[fF]i|Li)' +
+      ')',
+    relevance: 0
+  };
+
+  /**
+   * D character literal
+   *
+   * @type {Object}
+   */
+  var D_CHARACTER_MODE = {
+    className: 'string',
+    begin: '\'(' + escape_sequence_re + '|.)', end: '\'',
+    illegal: '.'
+  };
+
+  /**
+   * D string escape sequence
+   *
+   * @type {Object}
+   */
+  var D_ESCAPE_SEQUENCE = {
+    begin: escape_sequence_re,
+    relevance: 0
+  };
+
+  /**
+   * D double quoted string literal
+   *
+   * @type {Object}
+   */
+  var D_STRING_MODE = {
+    className: 'string',
+    begin: '"',
+    contains: [D_ESCAPE_SEQUENCE],
+    end: '"[cwd]?'
+  };
+
+  /**
+   * D wysiwyg and delimited string literals
+   *
+   * @type {Object}
+   */
+  var D_WYSIWYG_DELIMITED_STRING_MODE = {
+    className: 'string',
+    begin: '[rq]"',
+    end: '"[cwd]?',
+    relevance: 5
+  };
+
+  /**
+   * D alternate wysiwyg string literal
+   *
+   * @type {Object}
+   */
+  var D_ALTERNATE_WYSIWYG_STRING_MODE = {
+    className: 'string',
+    begin: '`',
+    end: '`[cwd]?'
+  };
+
+  /**
+   * D hexadecimal string literal
+   *
+   * @type {Object}
+   */
+  var D_HEX_STRING_MODE = {
+    className: 'string',
+    begin: 'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',
+    relevance: 10
+  };
+
+  /**
+   * D delimited string literal
+   *
+   * @type {Object}
+   */
+  var D_TOKEN_STRING_MODE = {
+    className: 'string',
+    begin: 'q"\\{',
+    end: '\\}"'
+  };
+
+  /**
+   * Hashbang support
+   *
+   * @type {Object}
+   */
+  var D_HASHBANG_MODE = {
+    className: 'shebang',
+    begin: '^#!',
+    end: '$',
+    relevance: 5
+  };
+
+  /**
+   * D special token sequence
+   *
+   * @type {Object}
+   */
+  var D_SPECIAL_TOKEN_SEQUENCE_MODE = {
+    className: 'preprocessor',
+    begin: '#(line)',
+    end: '$',
+    relevance: 5
+  };
+
+  /**
+   * D attributes
+   *
+   * @type {Object}
+   */
+  var D_ATTRIBUTE_MODE = {
+    className: 'keyword',
+    begin: '@[a-zA-Z_][a-zA-Z_\\d]*'
+  };
+
+  /**
+   * D nesting comment
+   *
+   * @type {Object}
+   */
+  var D_NESTING_COMMENT_MODE = hljs.COMMENT(
+    '\\/\\+',
+    '\\+\\/',
+    {
+      contains: ['self'],
+      relevance: 10
+    }
+  );
+
+  return {
+    lexemes: hljs.UNDERSCORE_IDENT_RE,
+    keywords: D_KEYWORDS,
+    contains: [
+      hljs.C_LINE_COMMENT_MODE,
+        hljs.C_BLOCK_COMMENT_MODE,
+        D_NESTING_COMMENT_MODE,
+        D_HEX_STRING_MODE,
+        D_STRING_MODE,
+        D_WYSIWYG_DELIMITED_STRING_MODE,
+        D_ALTERNATE_WYSIWYG_STRING_MODE,
+        D_TOKEN_STRING_MODE,
+        D_FLOAT_MODE,
+        D_INTEGER_MODE,
+        D_CHARACTER_MODE,
+        D_HASHBANG_MODE,
+        D_SPECIAL_TOKEN_SEQUENCE_MODE,
+        D_ATTRIBUTE_MODE
+    ]
+  };
+});
+
+hljs.registerLanguage('markdown', function(hljs) {
+  return {
+    aliases: ['md', 'mkdown', 'mkd'],
+    contains: [
+      // highlight headers
+      {
+        className: 'header',
+        variants: [
+          { begin: '^#{1,6}', end: '$' },
+          { begin: '^.+?\\n[=-]{2,}$' }
+        ]
+      },
+      // inline html
+      {
+        begin: '<', end: '>',
+        subLanguage: 'xml',
+        relevance: 0
+      },
+      // lists (indicators only)
+      {
+        className: 'bullet',
+        begin: '^([*+-]|(\\d+\\.))\\s+'
+      },
+      // strong segments
+      {
+        className: 'strong',
+        begin: '[*_]{2}.+?[*_]{2}'
+      },
+      // emphasis segments
+      {
+        className: 'emphasis',
+        variants: [
+          { begin: '\\*.+?\\*' },
+          { begin: '_.+?_'
+          , relevance: 0
+          }
+        ]
+      },
+      // blockquotes
+      {
+        className: 'blockquote',
+        begin: '^>\\s+', end: '$'
+      },
+      // code snippets
+      {
+        className: 'code',
+        variants: [
+          { begin: '`.+?`' },
+          { begin: '^( {4}|\t)', end: '$'
+          , relevance: 0
+          }
+        ]
+      },
+      // horizontal rules
+      {
+        className: 'horizontal_rule',
+        begin: '^[-\\*]{3,}', end: '$'
+      },
+      // using links - title and link
+      {
+        begin: '\\[.+?\\][\\(\\[].*?[\\)\\]]',
+        returnBegin: true,
+        contains: [
+          {
+            className: 'link_label',
+            begin: '\\[', end: '\\]',
+            excludeBegin: true,
+            returnEnd: true,
+            relevance: 0
+          },
+          {
+            className: 'link_url',
+            begin: '\\]\\(', end: '\\)',
+            excludeBegin: true, excludeEnd: true
+          },
+          {
+            className: 'link_reference',
+            begin: '\\]\\[', end: '\\]',
+            excludeBegin: true, excludeEnd: true
+          }
+        ],
+        relevance: 10
+      },
+      {
+        begin: '^\\[\.+\\]:',
+        returnBegin: true,
+        contains: [
+          {
+            className: 'link_reference',
+            begin: '\\[', end: '\\]:',
+            excludeBegin: true, excludeEnd: true,
+            starts: {
+              className: 'link_url',
+              end: '$'
+            }
+          }
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('dart', function (hljs) {
+  var SUBST = {
+    className: 'subst',
+    begin: '\\$\\{', end: '}',
+    keywords: 'true false null this is new super'
+  };
+
+  var STRING = {
+    className: 'string',
+    variants: [
+      {
+        begin: 'r\'\'\'', end: '\'\'\''
+      },
+      {
+        begin: 'r"""', end: '"""'
+      },
+      {
+        begin: 'r\'', end: '\'',
+        illegal: '\\n'
+      },
+      {
+        begin: 'r"', end: '"',
+        illegal: '\\n'
+      },
+      {
+        begin: '\'\'\'', end: '\'\'\'',
+        contains: [hljs.BACKSLASH_ESCAPE, SUBST]
+      },
+      {
+        begin: '"""', end: '"""',
+        contains: [hljs.BACKSLASH_ESCAPE, SUBST]
+      },
+      {
+        begin: '\'', end: '\'',
+        illegal: '\\n',
+        contains: [hljs.BACKSLASH_ESCAPE, SUBST]
+      },
+      {
+        begin: '"', end: '"',
+        illegal: '\\n',
+        contains: [hljs.BACKSLASH_ESCAPE, SUBST]
+      }
+    ]
+  };
+  SUBST.contains = [
+    hljs.C_NUMBER_MODE, STRING
+  ];
+
+  var KEYWORDS = {
+    keyword: 'assert break case catch class const continue default do else enum extends false final finally for if ' +
+      'in is new null rethrow return super switch this throw true try var void while with',
+    literal: 'abstract as dynamic export external factory get implements import library operator part set static typedef',
+    built_in:
+      // dart:core
+      'print Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set ' +
+      'Stopwatch String StringBuffer StringSink Symbol Type Uri bool double int num ' +
+      // dart:html
+      'document window querySelector querySelectorAll Element ElementList'
+  };
+
+  return {
+    keywords: KEYWORDS,
+    contains: [
+      STRING,
+      hljs.COMMENT(
+        '/\\*\\*',
+        '\\*/',
+        {
+          subLanguage: 'markdown'
+        }
+      ),
+      hljs.COMMENT(
+        '///',
+        '$',
+        {
+          subLanguage: 'markdown'
+        }
+      ),
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      {
+        className: 'class',
+        beginKeywords: 'class interface', end: '{', excludeEnd: true,
+        contains: [
+          {
+            beginKeywords: 'extends implements'
+          },
+          hljs.UNDERSCORE_TITLE_MODE
+        ]
+      },
+      hljs.C_NUMBER_MODE,
+      {
+        className: 'annotation', begin: '@[A-Za-z]+'
+      },
+      {
+        begin: '=>' // No markup, just a relevance booster
+      }
+    ]
+  }
+});
+
+hljs.registerLanguage('delphi', function(hljs) {
+  var KEYWORDS =
+    'exports register file shl array record property for mod while set ally label uses raise not ' +
+    'stored class safecall var interface or private static exit index inherited to else stdcall ' +
+    'override shr asm far resourcestring finalization packed virtual out and protected library do ' +
+    'xorwrite goto near function end div overload object unit begin string on inline repeat until ' +
+    'destructor write message program with read initialization except default nil if case cdecl in ' +
+    'downto threadvar of try pascal const external constructor type public then implementation ' +
+    'finally published procedure';
+  var COMMENT_MODES = [
+    hljs.C_LINE_COMMENT_MODE,
+    hljs.COMMENT(
+      /\{/,
+      /\}/,
+      {
+        relevance: 0
+      }
+    ),
+    hljs.COMMENT(
+      /\(\*/,
+      /\*\)/,
+      {
+        relevance: 10
+      }
+    )
+  ];
+  var STRING = {
+    className: 'string',
+    begin: /'/, end: /'/,
+    contains: [{begin: /''/}]
+  };
+  var CHAR_STRING = {
+    className: 'string', begin: /(#\d+)+/
+  };
+  var CLASS = {
+    begin: hljs.IDENT_RE + '\\s*=\\s*class\\s*\\(', returnBegin: true,
+    contains: [
+      hljs.TITLE_MODE
+    ]
+  };
+  var FUNCTION = {
+    className: 'function',
+    beginKeywords: 'function constructor destructor procedure', end: /[:;]/,
+    keywords: 'function constructor|10 destructor|10 procedure|10',
+    contains: [
+      hljs.TITLE_MODE,
+      {
+        className: 'params',
+        begin: /\(/, end: /\)/,
+        keywords: KEYWORDS,
+        contains: [STRING, CHAR_STRING]
+      }
+    ].concat(COMMENT_MODES)
+  };
+  return {
+    case_insensitive: true,
+    keywords: KEYWORDS,
+    illegal: /"|\$[G-Zg-z]|\/\*|<\/|\|/,
+    contains: [
+      STRING, CHAR_STRING,
+      hljs.NUMBER_MODE,
+      CLASS,
+      FUNCTION
+    ].concat(COMMENT_MODES)
+  };
+});
+
+hljs.registerLanguage('diff', function(hljs) {
+  return {
+    aliases: ['patch'],
+    contains: [
+      {
+        className: 'chunk',
+        relevance: 10,
+        variants: [
+          {begin: /^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},
+          {begin: /^\*\*\* +\d+,\d+ +\*\*\*\*$/},
+          {begin: /^\-\-\- +\d+,\d+ +\-\-\-\-$/}
+        ]
+      },
+      {
+        className: 'header',
+        variants: [
+          {begin: /Index: /, end: /$/},
+          {begin: /=====/, end: /=====$/},
+          {begin: /^\-\-\-/, end: /$/},
+          {begin: /^\*{3} /, end: /$/},
+          {begin: /^\+\+\+/, end: /$/},
+          {begin: /\*{5}/, end: /\*{5}$/}
+        ]
+      },
+      {
+        className: 'addition',
+        begin: '^\\+', end: '$'
+      },
+      {
+        className: 'deletion',
+        begin: '^\\-', end: '$'
+      },
+      {
+        className: 'change',
+        begin: '^\\!', end: '$'
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('django', function(hljs) {
+  var FILTER = {
+    className: 'filter',
+    begin: /\|[A-Za-z]+:?/,
+    keywords:
+      'truncatewords removetags linebreaksbr yesno get_digit timesince random striptags ' +
+      'filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands ' +
+      'title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode ' +
+      'timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort ' +
+      'dictsortreversed default_if_none pluralize lower join center default ' +
+      'truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first ' +
+      'escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize ' +
+      'localtime utc timezone',
+    contains: [
+      {className: 'argument', begin: /"/, end: /"/},
+      {className: 'argument', begin: /'/, end: /'/}
+    ]
+  };
+
+  return {
+    aliases: ['jinja'],
+    case_insensitive: true,
+    subLanguage: 'xml',
+    contains: [
+      hljs.COMMENT(/\{%\s*comment\s*%}/, /\{%\s*endcomment\s*%}/),
+      hljs.COMMENT(/\{#/, /#}/),
+      {
+        className: 'template_tag',
+        begin: /\{%/, end: /%}/,
+        keywords:
+          'comment endcomment load templatetag ifchanged endifchanged if endif firstof for ' +
+          'endfor in ifnotequal endifnotequal widthratio extends include spaceless ' +
+          'endspaceless regroup by as ifequal endifequal ssi now with cycle url filter ' +
+          'endfilter debug block endblock else autoescape endautoescape csrf_token empty elif ' +
+          'endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix ' +
+          'plural get_current_language language get_available_languages ' +
+          'get_current_language_bidi get_language_info get_language_info_list localize ' +
+          'endlocalize localtime endlocaltime timezone endtimezone get_current_timezone ' +
+          'verbatim',
+        contains: [FILTER]
+      },
+      {
+        className: 'variable',
+        begin: /\{\{/, end: /}}/,
+        contains: [FILTER]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('dns', function(hljs) {
+  return {
+    aliases: ['bind', 'zone'],
+    keywords: {
+      keyword:
+        'IN A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME DHCID DLV DNAME DNSKEY DS HIP IPSECKEY KEY KX ' +
+        'LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RRSIG RP SIG SOA SRV SSHFP TA TKEY TLSA TSIG TXT'
+    },
+    contains: [
+      hljs.COMMENT(';', '$'),
+      {
+        className: 'operator',
+        beginKeywords: '$TTL $GENERATE $INCLUDE $ORIGIN'
+      },
+      // IPv6
+      {
+        className: 'number',
+        begin: '((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))'
+      },
+      // IPv4
+      {
+        className: 'number',
+        begin: '((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])'
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('dockerfile', function(hljs) {
+  return {
+    aliases: ['docker'],
+    case_insensitive: true,
+    keywords: {
+      built_ins: 'from maintainer cmd expose add copy entrypoint volume user workdir onbuild run env label'
+    },
+    contains: [
+      hljs.HASH_COMMENT_MODE,
+      {
+        keywords : {
+          built_in: 'run cmd entrypoint volume add copy workdir onbuild label'
+        },
+        begin: /^ *(onbuild +)?(run|cmd|entrypoint|volume|add|copy|workdir|label) +/,
+        starts: {
+          end: /[^\\]\n/,
+          subLanguage: 'bash'
+        }
+      },
+      {
+        keywords: {
+          built_in: 'from maintainer expose env user onbuild'
+        },
+        begin: /^ *(onbuild +)?(from|maintainer|expose|env|user|onbuild) +/, end: /[^\\]\n/,
+        contains: [
+          hljs.APOS_STRING_MODE,
+          hljs.QUOTE_STRING_MODE,
+          hljs.NUMBER_MODE,
+          hljs.HASH_COMMENT_MODE
+        ]
+      }
+    ]
+  }
+});
+
+hljs.registerLanguage('dos', function(hljs) {
+  var COMMENT = hljs.COMMENT(
+    /@?rem\b/, /$/,
+    {
+      relevance: 10
+    }
+  );
+  var LABEL = {
+    className: 'label',
+    begin: '^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)',
+    relevance: 0
+  };
+  return {
+    aliases: ['bat', 'cmd'],
+    case_insensitive: true,
+    illegal: /\/\*/,
+    keywords: {
+      flow: 'if else goto for in do call exit not exist errorlevel defined',
+      operator: 'equ neq lss leq gtr geq',
+      keyword: 'shift cd dir echo setlocal endlocal set pause copy',
+      stream: 'prn nul lpt3 lpt2 lpt1 con com4 com3 com2 com1 aux',
+      winutils: 'ping net ipconfig taskkill xcopy ren del',
+      built_in: 'append assoc at attrib break cacls cd chcp chdir chkdsk chkntfs cls cmd color ' +
+        'comp compact convert date dir diskcomp diskcopy doskey erase fs ' +
+        'find findstr format ftype graftabl help keyb label md mkdir mode more move path ' +
+        'pause print popd pushd promt rd recover rem rename replace restore rmdir shift' +
+        'sort start subst time title tree type ver verify vol'
+    },
+    contains: [
+      {
+        className: 'envvar', begin: /%%[^ ]|%[^ ]+?%|![^ ]+?!/
+      },
+      {
+        className: 'function',
+        begin: LABEL.begin, end: 'goto:eof',
+        contains: [
+          hljs.inherit(hljs.TITLE_MODE, {begin: '([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*'}),
+          COMMENT
+        ]
+      },
+      {
+        className: 'number', begin: '\\b\\d+',
+        relevance: 0
+      },
+      COMMENT
+    ]
+  };
+});
+
+hljs.registerLanguage('dust', function(hljs) {
+  var EXPRESSION_KEYWORDS = 'if eq ne lt lte gt gte select default math sep';
+  return {
+    aliases: ['dst'],
+    case_insensitive: true,
+    subLanguage: 'xml',
+    contains: [
+      {
+        className: 'expression',
+        begin: '{', end: '}',
+        relevance: 0,
+        contains: [
+          {
+            className: 'begin-block', begin: '\#[a-zA-Z\-\ \.]+',
+            keywords: EXPRESSION_KEYWORDS
+          },
+          {
+            className: 'string',
+            begin: '"', end: '"'
+          },
+          {
+            className: 'end-block', begin: '\\\/[a-zA-Z\-\ \.]+',
+            keywords: EXPRESSION_KEYWORDS
+          },
+          {
+            className: 'variable', begin: '[a-zA-Z\-\.]+',
+            keywords: EXPRESSION_KEYWORDS,
+            relevance: 0
+          }
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('elixir', function(hljs) {
+  var ELIXIR_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?';
+  var ELIXIR_METHOD_RE = '[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?';
+  var ELIXIR_KEYWORDS =
+    'and false then defined module in return redo retry end for true self when ' +
+    'next until do begin unless nil break not case cond alias while ensure or ' +
+    'include use alias fn quote';
+  var SUBST = {
+    className: 'subst',
+    begin: '#\\{', end: '}',
+    lexemes: ELIXIR_IDENT_RE,
+    keywords: ELIXIR_KEYWORDS
+  };
+  var STRING = {
+    className: 'string',
+    contains: [hljs.BACKSLASH_ESCAPE, SUBST],
+    variants: [
+      {
+        begin: /'/, end: /'/
+      },
+      {
+        begin: /"/, end: /"/
+      }
+    ]
+  };
+  var FUNCTION = {
+    className: 'function',
+    beginKeywords: 'def defp defmacro', end: /\B\b/, // the mode is ended by the title
+    contains: [
+      hljs.inherit(hljs.TITLE_MODE, {
+        begin: ELIXIR_IDENT_RE,
+        endsParent: true
+      })
+    ]
+  };
+  var CLASS = hljs.inherit(FUNCTION, {
+    className: 'class',
+    beginKeywords: 'defmodule defrecord', end: /\bdo\b|$|;/
+  });
+  var ELIXIR_DEFAULT_CONTAINS = [
+    STRING,
+    hljs.HASH_COMMENT_MODE,
+    CLASS,
+    FUNCTION,
+    {
+      className: 'constant',
+      begin: '(\\b[A-Z_]\\w*(.)?)+',
+      relevance: 0
+    },
+    {
+      className: 'symbol',
+      begin: ':',
+      contains: [STRING, {begin: ELIXIR_METHOD_RE}],
+      relevance: 0
+    },
+    {
+      className: 'symbol',
+      begin: ELIXIR_IDENT_RE + ':',
+      relevance: 0
+    },
+    {
+      className: 'number',
+      begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
+      relevance: 0
+    },
+    {
+      className: 'variable',
+      begin: '(\\$\\W)|((\\$|\\@\\@?)(\\w+))'
+    },
+    {
+      begin: '->'
+    },
+    { // regexp container
+      begin: '(' + hljs.RE_STARTERS_RE + ')\\s*',
+      contains: [
+        hljs.HASH_COMMENT_MODE,
+        {
+          className: 'regexp',
+          illegal: '\\n',
+          contains: [hljs.BACKSLASH_ESCAPE, SUBST],
+          variants: [
+            {
+              begin: '/', end: '/[a-z]*'
+            },
+            {
+              begin: '%r\\[', end: '\\][a-z]*'
+            }
+          ]
+        }
+      ],
+      relevance: 0
+    }
+  ];
+  SUBST.contains = ELIXIR_DEFAULT_CONTAINS;
+
+  return {
+    lexemes: ELIXIR_IDENT_RE,
+    keywords: ELIXIR_KEYWORDS,
+    contains: ELIXIR_DEFAULT_CONTAINS
+  };
+});
+
+hljs.registerLanguage('elm', function(hljs) {
+  var COMMENT_MODES = [
+    hljs.COMMENT('--', '$'),
+    hljs.COMMENT(
+      '{-',
+      '-}',
+      {
+        contains: ['self']
+      }
+    )
+  ];
+
+  var CONSTRUCTOR = {
+    className: 'type',
+    begin: '\\b[A-Z][\\w\']*', // TODO: other constructors (build-in, infix).
+    relevance: 0
+  };
+
+  var LIST = {
+    className: 'container',
+    begin: '\\(', end: '\\)',
+    illegal: '"',
+    contains: [
+      {className: 'type', begin: '\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?'}
+    ].concat(COMMENT_MODES)
+  };
+
+  var RECORD = {
+    className: 'container',
+    begin: '{', end: '}',
+    contains: LIST.contains
+  };
+
+  return {
+    keywords:
+      'let in if then else case of where module import exposing ' +
+      'type alias as infix infixl infixr port',
+    contains: [
+
+      // Top-level constructions.
+
+      {
+        className: 'module',
+        begin: '\\bmodule\\b', end: 'where',
+        keywords: 'module where',
+        contains: [LIST].concat(COMMENT_MODES),
+        illegal: '\\W\\.|;'
+      },
+      {
+        className: 'import',
+        begin: '\\bimport\\b', end: '$',
+        keywords: 'import|0 as exposing',
+        contains: [LIST].concat(COMMENT_MODES),
+        illegal: '\\W\\.|;'
+      },
+      {
+        className: 'typedef',
+        begin: '\\btype\\b', end: '$',
+        keywords: 'type alias',
+        contains: [CONSTRUCTOR, LIST, RECORD].concat(COMMENT_MODES)
+      },
+      {
+        className: 'infix',
+        beginKeywords: 'infix infixl infixr', end: '$',
+        contains: [hljs.C_NUMBER_MODE].concat(COMMENT_MODES)
+      },
+      {
+        className: 'foreign',
+        begin: '\\bport\\b', end: '$',
+        keywords: 'port',
+        contains: COMMENT_MODES
+      },
+
+      // Literals and names.
+
+      // TODO: characters.
+      hljs.QUOTE_STRING_MODE,
+      hljs.C_NUMBER_MODE,
+      CONSTRUCTOR,
+      hljs.inherit(hljs.TITLE_MODE, {begin: '^[_a-z][\\w\']*'}),
+
+      {begin: '->|<-'} // No markup, relevance booster
+    ].concat(COMMENT_MODES)
+  };
+});
+
+hljs.registerLanguage('ruby', function(hljs) {
+  var RUBY_METHOD_RE = '[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?';
+  var RUBY_KEYWORDS =
+    'and false then defined module in return redo if BEGIN retry end for true self when ' +
+    'next until do begin unless END rescue nil else break undef not super class case ' +
+    'require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor';
+  var YARDOCTAG = {
+    className: 'doctag',
+    begin: '@[A-Za-z]+'
+  };
+  var IRB_OBJECT = {
+    className: 'value',
+    begin: '#<', end: '>'
+  };
+  var COMMENT_MODES = [
+    hljs.COMMENT(
+      '#',
+      '$',
+      {
+        contains: [YARDOCTAG]
+      }
+    ),
+    hljs.COMMENT(
+      '^\\=begin',
+      '^\\=end',
+      {
+        contains: [YARDOCTAG],
+        relevance: 10
+      }
+    ),
+    hljs.COMMENT('^__END__', '\\n$')
+  ];
+  var SUBST = {
+    className: 'subst',
+    begin: '#\\{', end: '}',
+    keywords: RUBY_KEYWORDS
+  };
+  var STRING = {
+    className: 'string',
+    contains: [hljs.BACKSLASH_ESCAPE, SUBST],
+    variants: [
+      {begin: /'/, end: /'/},
+      {begin: /"/, end: /"/},
+      {begin: /`/, end: /`/},
+      {begin: '%[qQwWx]?\\(', end: '\\)'},
+      {begin: '%[qQwWx]?\\[', end: '\\]'},
+      {begin: '%[qQwWx]?{', end: '}'},
+      {begin: '%[qQwWx]?<', end: '>'},
+      {begin: '%[qQwWx]?/', end: '/'},
+      {begin: '%[qQwWx]?%', end: '%'},
+      {begin: '%[qQwWx]?-', end: '-'},
+      {begin: '%[qQwWx]?\\|', end: '\\|'},
+      {
+        // \B in the beginning suppresses recognition of ?-sequences where ?
+        // is the last character of a preceding identifier, as in: `func?4`
+        begin: /\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/
+      }
+    ]
+  };
+  var PARAMS = {
+    className: 'params',
+    begin: '\\(', end: '\\)',
+    keywords: RUBY_KEYWORDS
+  };
+
+  var RUBY_DEFAULT_CONTAINS = [
+    STRING,
+    IRB_OBJECT,
+    {
+      className: 'class',
+      beginKeywords: 'class module', end: '$|;',
+      illegal: /=/,
+      contains: [
+        hljs.inherit(hljs.TITLE_MODE, {begin: '[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?'}),
+        {
+          className: 'inheritance',
+          begin: '<\\s*',
+          contains: [{
+            className: 'parent',
+            begin: '(' + hljs.IDENT_RE + '::)?' + hljs.IDENT_RE
+          }]
+        }
+      ].concat(COMMENT_MODES)
+    },
+    {
+      className: 'function',
+      beginKeywords: 'def', end: '$|;',
+      contains: [
+        hljs.inherit(hljs.TITLE_MODE, {begin: RUBY_METHOD_RE}),
+        PARAMS
+      ].concat(COMMENT_MODES)
+    },
+    {
+      className: 'constant',
+      begin: '(::)?(\\b[A-Z]\\w*(::)?)+',
+      relevance: 0
+    },
+    {
+      className: 'symbol',
+      begin: hljs.UNDERSCORE_IDENT_RE + '(\\!|\\?)?:',
+      relevance: 0
+    },
+    {
+      className: 'symbol',
+      begin: ':',
+      contains: [STRING, {begin: RUBY_METHOD_RE}],
+      relevance: 0
+    },
+    {
+      className: 'number',
+      begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
+      relevance: 0
+    },
+    {
+      className: 'variable',
+      begin: '(\\$\\W)|((\\$|\\@\\@?)(\\w+))'
+    },
+    { // regexp container
+      begin: '(' + hljs.RE_STARTERS_RE + ')\\s*',
+      contains: [
+        IRB_OBJECT,
+        {
+          className: 'regexp',
+          contains: [hljs.BACKSLASH_ESCAPE, SUBST],
+          illegal: /\n/,
+          variants: [
+            {begin: '/', end: '/[a-z]*'},
+            {begin: '%r{', end: '}[a-z]*'},
+            {begin: '%r\\(', end: '\\)[a-z]*'},
+            {begin: '%r!', end: '![a-z]*'},
+            {begin: '%r\\[', end: '\\][a-z]*'}
+          ]
+        }
+      ].concat(COMMENT_MODES),
+      relevance: 0
+    }
+  ].concat(COMMENT_MODES);
+
+  SUBST.contains = RUBY_DEFAULT_CONTAINS;
+  PARAMS.contains = RUBY_DEFAULT_CONTAINS;
+
+  var SIMPLE_PROMPT = "[>?]>";
+  var DEFAULT_PROMPT = "[\\w#]+\\(\\w+\\):\\d+:\\d+>";
+  var RVM_PROMPT = "(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>";
+
+  var IRB_DEFAULT = [
+    {
+      begin: /^\s*=>/,
+      className: 'status',
+      starts: {
+        end: '$', contains: RUBY_DEFAULT_CONTAINS
+      }
+    },
+    {
+      className: 'prompt',
+      begin: '^('+SIMPLE_PROMPT+"|"+DEFAULT_PROMPT+'|'+RVM_PROMPT+')',
+      starts: {
+        end: '$', contains: RUBY_DEFAULT_CONTAINS
+      }
+    }
+  ];
+
+  return {
+    aliases: ['rb', 'gemspec', 'podspec', 'thor', 'irb'],
+    keywords: RUBY_KEYWORDS,
+    illegal: /\/\*/,
+    contains: COMMENT_MODES.concat(IRB_DEFAULT).concat(RUBY_DEFAULT_CONTAINS)
+  };
+});
+
+hljs.registerLanguage('erb', function(hljs) {
+  return {
+    subLanguage: 'xml',
+    contains: [
+      hljs.COMMENT('<%#', '%>'),
+      {
+        begin: '<%[%=-]?', end: '[%-]?%>',
+        subLanguage: 'ruby',
+        excludeBegin: true,
+        excludeEnd: true
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('erlang-repl', function(hljs) {
+  return {
+    keywords: {
+      special_functions:
+        'spawn spawn_link self',
+      reserved:
+        'after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if ' +
+        'let not of or orelse|10 query receive rem try when xor'
+    },
+    contains: [
+      {
+        className: 'prompt', begin: '^[0-9]+> ',
+        relevance: 10
+      },
+      hljs.COMMENT('%', '$'),
+      {
+        className: 'number',
+        begin: '\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)',
+        relevance: 0
+      },
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      {
+        className: 'constant', begin: '\\?(::)?([A-Z]\\w*(::)?)+'
+      },
+      {
+        className: 'arrow', begin: '->'
+      },
+      {
+        className: 'ok', begin: 'ok'
+      },
+      {
+        className: 'exclamation_mark', begin: '!'
+      },
+      {
+        className: 'function_or_atom',
+        begin: '(\\b[a-z\'][a-zA-Z0-9_\']*:[a-z\'][a-zA-Z0-9_\']*)|(\\b[a-z\'][a-zA-Z0-9_\']*)',
+        relevance: 0
+      },
+      {
+        className: 'variable',
+        begin: '[A-Z][a-zA-Z0-9_\']*',
+        relevance: 0
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('erlang', function(hljs) {
+  var BASIC_ATOM_RE = '[a-z\'][a-zA-Z0-9_\']*';
+  var FUNCTION_NAME_RE = '(' + BASIC_ATOM_RE + ':' + BASIC_ATOM_RE + '|' + BASIC_ATOM_RE + ')';
+  var ERLANG_RESERVED = {
+    keyword:
+      'after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if ' +
+      'let not of orelse|10 query receive rem try when xor',
+    literal:
+      'false true'
+  };
+
+  var COMMENT = hljs.COMMENT('%', '$');
+  var NUMBER = {
+    className: 'number',
+    begin: '\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)',
+    relevance: 0
+  };
+  var NAMED_FUN = {
+    begin: 'fun\\s+' + BASIC_ATOM_RE + '/\\d+'
+  };
+  var FUNCTION_CALL = {
+    begin: FUNCTION_NAME_RE + '\\(', end: '\\)',
+    returnBegin: true,
+    relevance: 0,
+    contains: [
+      {
+        className: 'function_name', begin: FUNCTION_NAME_RE,
+        relevance: 0
+      },
+      {
+        begin: '\\(', end: '\\)', endsWithParent: true,
+        returnEnd: true,
+        relevance: 0
+        // "contains" defined later
+      }
+    ]
+  };
+  var TUPLE = {
+    className: 'tuple',
+    begin: '{', end: '}',
+    relevance: 0
+    // "contains" defined later
+  };
+  var VAR1 = {
+    className: 'variable',
+    begin: '\\b_([A-Z][A-Za-z0-9_]*)?',
+    relevance: 0
+  };
+  var VAR2 = {
+    className: 'variable',
+    begin: '[A-Z][a-zA-Z0-9_]*',
+    relevance: 0
+  };
+  var RECORD_ACCESS = {
+    begin: '#' + hljs.UNDERSCORE_IDENT_RE,
+    relevance: 0,
+    returnBegin: true,
+    contains: [
+      {
+        className: 'record_name',
+        begin: '#' + hljs.UNDERSCORE_IDENT_RE,
+        relevance: 0
+      },
+      {
+        begin: '{', end: '}',
+        relevance: 0
+        // "contains" defined later
+      }
+    ]
+  };
+
+  var BLOCK_STATEMENTS = {
+    beginKeywords: 'fun receive if try case', end: 'end',
+    keywords: ERLANG_RESERVED
+  };
+  BLOCK_STATEMENTS.contains = [
+    COMMENT,
+    NAMED_FUN,
+    hljs.inherit(hljs.APOS_STRING_MODE, {className: ''}),
+    BLOCK_STATEMENTS,
+    FUNCTION_CALL,
+    hljs.QUOTE_STRING_MODE,
+    NUMBER,
+    TUPLE,
+    VAR1, VAR2,
+    RECORD_ACCESS
+  ];
+
+  var BASIC_MODES = [
+    COMMENT,
+    NAMED_FUN,
+    BLOCK_STATEMENTS,
+    FUNCTION_CALL,
+    hljs.QUOTE_STRING_MODE,
+    NUMBER,
+    TUPLE,
+    VAR1, VAR2,
+    RECORD_ACCESS
+  ];
+  FUNCTION_CALL.contains[1].contains = BASIC_MODES;
+  TUPLE.contains = BASIC_MODES;
+  RECORD_ACCESS.contains[1].contains = BASIC_MODES;
+
+  var PARAMS = {
+    className: 'params',
+    begin: '\\(', end: '\\)',
+    contains: BASIC_MODES
+  };
+  return {
+    aliases: ['erl'],
+    keywords: ERLANG_RESERVED,
+    illegal: '(</|\\*=|\\+=|-=|/\\*|\\*/|\\(\\*|\\*\\))',
+    contains: [
+      {
+        className: 'function',
+        begin: '^' + BASIC_ATOM_RE + '\\s*\\(', end: '->',
+        returnBegin: true,
+        illegal: '\\(|#|//|/\\*|\\\\|:|;',
+        contains: [
+          PARAMS,
+          hljs.inherit(hljs.TITLE_MODE, {begin: BASIC_ATOM_RE})
+        ],
+        starts: {
+          end: ';|\\.',
+          keywords: ERLANG_RESERVED,
+          contains: BASIC_MODES
+        }
+      },
+      COMMENT,
+      {
+        className: 'pp',
+        begin: '^-', end: '\\.',
+        relevance: 0,
+        excludeEnd: true,
+        returnBegin: true,
+        lexemes: '-' + hljs.IDENT_RE,
+        keywords:
+          '-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn ' +
+          '-import -include -include_lib -compile -define -else -endif -file -behaviour ' +
+          '-behavior -spec',
+        contains: [PARAMS]
+      },
+      NUMBER,
+      hljs.QUOTE_STRING_MODE,
+      RECORD_ACCESS,
+      VAR1, VAR2,
+      TUPLE,
+      {begin: /\.$/} // relevance booster
+    ]
+  };
+});
+
+hljs.registerLanguage('fix', function(hljs) {
+  return {
+    contains: [
+    {
+      begin: /[^\u2401\u0001]+/,
+      end: /[\u2401\u0001]/,
+      excludeEnd: true,
+      returnBegin: true,
+      returnEnd: false,
+      contains: [
+      {
+        begin: /([^\u2401\u0001=]+)/,
+        end: /=([^\u2401\u0001=]+)/,
+        returnEnd: true,
+        returnBegin: false,
+        className: 'attribute'
+      },
+      {
+        begin: /=/,
+        end: /([\u2401\u0001])/,
+        excludeEnd: true,
+        excludeBegin: true,
+        className: 'string'
+      }]
+    }],
+    case_insensitive: true
+  };
+});
+
+hljs.registerLanguage('fortran', function(hljs) {
+  var PARAMS = {
+    className: 'params',
+    begin: '\\(', end: '\\)'
+  };
+
+  var F_KEYWORDS = {
+    constant: '.False. .True.',
+    type: 'integer real character complex logical dimension allocatable|10 parameter ' +
+      'external implicit|10 none double precision assign intent optional pointer ' +
+      'target in out common equivalence data',
+    keyword: 'kind do while private call intrinsic where elsewhere ' +
+      'type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then ' +
+      'public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. ' +
+      'goto save else use module select case ' +
+      'access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit ' +
+      'continue format pause cycle exit ' +
+      'c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg ' +
+      'synchronous nopass non_overridable pass protected volatile abstract extends import ' +
+      'non_intrinsic value deferred generic final enumerator class associate bind enum ' +
+      'c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t ' +
+      'c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double ' +
+      'c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr ' +
+      'c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated  c_f_pointer ' +
+      'c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor ' +
+      'numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ' +
+      'ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive ' +
+      'pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure',
+    built_in: 'alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint ' +
+      'dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl ' +
+      'algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama ' +
+      'iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod ' +
+      'qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log ' +
+      'log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate ' +
+      'adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product ' +
+      'eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul ' +
+      'maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product ' +
+      'radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind ' +
+      'set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer ' +
+      'dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ' +
+      'ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode ' +
+      'is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of'  +
+      'acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 ' +
+      'atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits ' +
+      'bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr ' +
+      'num_images parity popcnt poppar shifta shiftl shiftr this_image'
+  };
+  return {
+    case_insensitive: true,
+    aliases: ['f90', 'f95'],
+    keywords: F_KEYWORDS,
+    illegal: /\/\*/,
+    contains: [
+      hljs.inherit(hljs.APOS_STRING_MODE, {className: 'string', relevance: 0}),
+      hljs.inherit(hljs.QUOTE_STRING_MODE, {className: 'string', relevance: 0}),
+      {
+        className: 'function',
+        beginKeywords: 'subroutine function program',
+        illegal: '[${=\\n]',
+        contains: [hljs.UNDERSCORE_TITLE_MODE, PARAMS]
+      },
+      hljs.COMMENT('!', '$', {relevance: 0}),
+      {
+        className: 'number',
+        begin: '(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?',
+        relevance: 0
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('fsharp', function(hljs) {
+  var TYPEPARAM = {
+    begin: '<', end: '>',
+    contains: [
+      hljs.inherit(hljs.TITLE_MODE, {begin: /'[a-zA-Z0-9_]+/})
+    ]
+  };
+
+  return {
+    aliases: ['fs'],
+    keywords:
+      'abstract and as assert base begin class default delegate do done ' +
+      'downcast downto elif else end exception extern false finally for ' +
+      'fun function global if in inherit inline interface internal lazy let ' +
+      'match member module mutable namespace new null of open or ' +
+      'override private public rec return sig static struct then to ' +
+      'true try type upcast use val void when while with yield',
+    illegal: /\/\*/,
+    contains: [
+      {
+        // monad builder keywords (matches before non-bang kws)
+        className: 'keyword',
+        begin: /\b(yield|return|let|do)!/
+      },
+      {
+        className: 'string',
+        begin: '@"', end: '"',
+        contains: [{begin: '""'}]
+      },
+      {
+        className: 'string',
+        begin: '"""', end: '"""'
+      },
+      hljs.COMMENT('\\(\\*', '\\*\\)'),
+      {
+        className: 'class',
+        beginKeywords: 'type', end: '\\(|=|$', excludeEnd: true,
+        contains: [
+          hljs.UNDERSCORE_TITLE_MODE,
+          TYPEPARAM
+        ]
+      },
+      {
+        className: 'annotation',
+        begin: '\\[<', end: '>\\]',
+        relevance: 10
+      },
+      {
+        className: 'attribute',
+        begin: '\\B(\'[A-Za-z])\\b',
+        contains: [hljs.BACKSLASH_ESCAPE]
+      },
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),
+      hljs.C_NUMBER_MODE
+    ]
+  };
+});
+
+hljs.registerLanguage('gams', function (hljs) {
+  var KEYWORDS =
+    'abort acronym acronyms alias all and assign binary card diag display else1 eps eq equation equations file files ' +
+    'for1 free ge gt if inf integer le loop lt maximizing minimizing model models na ne negative no not option ' +
+    'options or ord parameter parameters positive prod putpage puttl repeat sameas scalar scalars semicont semiint ' +
+    'set1 sets smax smin solve sos1 sos2 sum system table then until using variable variables while1 xor yes';
+
+  return {
+    aliases: ['gms'],
+    case_insensitive: true,
+    keywords: KEYWORDS,
+    contains: [
+      {
+        className: 'section',
+        beginKeywords: 'sets parameters variables equations',
+        end: ';',
+        contains: [
+          {
+            begin: '/',
+            end: '/',
+            contains: [hljs.NUMBER_MODE]
+          }
+        ]
+      },
+      {
+        className: 'string',
+        begin: '\\*{3}', end: '\\*{3}'
+      },
+      hljs.NUMBER_MODE,
+      {
+        className: 'number',
+        begin: '\\$[a-zA-Z0-9]+'
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('gcode', function(hljs) {
+    var GCODE_IDENT_RE = '[A-Z_][A-Z0-9_.]*';
+    var GCODE_CLOSE_RE = '\\%';
+    var GCODE_KEYWORDS = {
+        literal:
+            '',
+        built_in:
+            '',
+        keyword:
+            'IF DO WHILE ENDWHILE CALL ENDIF SUB ENDSUB GOTO REPEAT ENDREPEAT ' +
+            'EQ LT GT NE GE LE OR XOR'
+    };
+    var GCODE_START = {
+        className: 'preprocessor',
+        begin: '([O])([0-9]+)'
+    };
+    var GCODE_CODE = [
+        hljs.C_LINE_COMMENT_MODE,
+        hljs.C_BLOCK_COMMENT_MODE,
+        hljs.COMMENT(/\(/, /\)/),
+        hljs.inherit(hljs.C_NUMBER_MODE, {begin: '([-+]?([0-9]*\\.?[0-9]+\\.?))|' + hljs.C_NUMBER_RE}),
+        hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null}),
+        hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),
+        {
+            className: 'keyword',
+            begin: '([G])([0-9]+\\.?[0-9]?)'
+        },
+        {
+            className: 'title',
+            begin: '([M])([0-9]+\\.?[0-9]?)'
+        },
+        {
+            className: 'title',
+            begin: '(VC|VS|#)',
+            end: '(\\d+)'
+        },
+        {
+            className: 'title',
+            begin: '(VZOFX|VZOFY|VZOFZ)'
+        },
+        {
+            className: 'built_in',
+            begin: '(ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN)(\\[)',
+            end: '([-+]?([0-9]*\\.?[0-9]+\\.?))(\\])'
+        },
+        {
+            className: 'label',
+            variants: [
+                {
+                    begin: 'N', end: '\\d+',
+                    illegal: '\\W'
+                }
+            ]
+        }
+    ];
+
+    return {
+        aliases: ['nc'],
+        // Some implementations (CNC controls) of G-code are interoperable with uppercase and lowercase letters seamlessly.
+        // However, most prefer all uppercase and uppercase is customary.
+        case_insensitive: true,
+        lexemes: GCODE_IDENT_RE,
+        keywords: GCODE_KEYWORDS,
+        contains: [
+            {
+                className: 'preprocessor',
+                begin: GCODE_CLOSE_RE
+            },
+            GCODE_START
+        ].concat(GCODE_CODE)
+    };
+});
+
+hljs.registerLanguage('gherkin', function (hljs) {
+  return {
+    aliases: ['feature'],
+    keywords: 'Feature Background Ability Business\ Need Scenario Scenarios Scenario\ Outline Scenario\ Template Examples Given And Then But When',
+    contains: [
+      {
+        className: 'keyword',
+        begin: '\\*'
+      },
+      hljs.COMMENT('@[^@\r\n\t ]+', '$'),
+      {
+        begin: '\\|', end: '\\|\\w*$',
+        contains: [
+          {
+            className: 'string',
+            begin: '[^|]+'
+          }
+        ]
+      },
+      {
+        className: 'variable',
+        begin: '<', end: '>'
+      },
+      hljs.HASH_COMMENT_MODE,
+      {
+        className: 'string',
+        begin: '"""', end: '"""'
+      },
+      hljs.QUOTE_STRING_MODE
+    ]
+  };
+});
+
+hljs.registerLanguage('glsl', function(hljs) {
+  return {
+    keywords: {
+      keyword:
+        'atomic_uint attribute bool break bvec2 bvec3 bvec4 case centroid coherent const continue default ' +
+        'discard dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 dmat3x4 dmat4 dmat4x2 dmat4x3 ' +
+        'dmat4x4 do double dvec2 dvec3 dvec4 else flat float for highp if iimage1D iimage1DArray ' +
+        'iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBuffer iimageCube ' +
+        'iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray image2DRect ' +
+        'image3D imageBuffer imageCube imageCubeArray in inout int invariant isampler1D isampler1DArray ' +
+        'isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D isamplerBuffer ' +
+        'isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 layout lowp mat2 mat2x2 mat2x3 mat2x4 mat3 mat3x2 ' +
+        'mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 mediump noperspective out patch precision readonly restrict ' +
+        'return sample sampler1D sampler1DArray sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray ' +
+        'sampler2DArrayShadow sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow ' +
+        'sampler3D samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow smooth ' +
+        'struct subroutine switch uimage1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray ' +
+        'uimage2DRect uimage3D uimageBuffer uimageCube uimageCubeArray uint uniform usampler1D usampler1DArray ' +
+        'usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D usamplerBuffer ' +
+        'usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 varying vec2 vec3 vec4 void volatile while writeonly',
+      built_in:
+        'gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial ' +
+        'gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color ' +
+        'gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord ' +
+        'gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor ' +
+        'gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial ' +
+        'gl_FrontSecondaryColor gl_InstanceID gl_InvocationID gl_Layer gl_LightModel ' +
+        'gl_LightSource gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize ' +
+        'gl_MaxClipDistances gl_MaxClipPlanes gl_MaxCombinedAtomicCounterBuffers ' +
+        'gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms gl_MaxCombinedImageUnitsAndFragmentOutputs ' +
+        'gl_MaxCombinedTextureImageUnits gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers ' +
+        'gl_MaxFragmentAtomicCounters gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents ' +
+        'gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers ' +
+        'gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents ' +
+        'gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits ' +
+        'gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents ' +
+        'gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset ' +
+        'gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms ' +
+        'gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits ' +
+        'gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents ' +
+        'gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters ' +
+        'gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents ' +
+        'gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents ' +
+        'gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits ' +
+        'gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors ' +
+        'gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs ' +
+        'gl_MaxVertexImageUniforms gl_MaxVertexOutputComponents gl_MaxVertexTextureImageUnits ' +
+        'gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffset'+
+        'gl_ModelViewMatrix gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose ' +
+        'gl_ModelViewMatrixTranspose gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse ' +
+        'gl_ModelViewProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixTranspose ' +
+        'gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 ' +
+        'gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_Normal gl_NormalMatrix ' +
+        'gl_NormalScale gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn ' +
+        'gl_PerVertex gl_Point gl_PointCoord gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn ' +
+        'gl_ProjectionMatrix gl_ProjectionMatrixInverse gl_ProjectionMatrixInverseTranspose ' +
+        'gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask gl_SampleMaskIn gl_SamplePosition ' +
+        'gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_TexCoord gl_TextureEnvColor ' +
+        'gl_TextureMatrixInverseTranspose gl_TextureMatrixTranspose gl_Vertex gl_VertexID ' +
+        'gl_ViewportIndex gl_in gl_out EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive ' +
+        'abs acos acosh all any asin asinh atan atanh atomicCounter atomicCounterDecrement ' +
+        'atomicCounterIncrement barrier bitCount bitfieldExtract bitfieldInsert bitfieldReverse ' +
+        'ceil clamp cos cosh cross dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward ' +
+        'findLSB findMSB floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan ' +
+        'greaterThanEqual imageAtomicAdd imageAtomicAnd imageAtomicCompSwap imageAtomicExchange ' +
+        'imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad imageStore imulExtended ' +
+        'intBitsToFloat interpolateAtCentroid interpolateAtOffset interpolateAtSample inverse inversesqrt ' +
+        'isinf isnan ldexp length lessThan lessThanEqual log log2 matrixCompMult max memoryBarrier ' +
+        'min mix mod modf noise1 noise2 noise3 noise4 normalize not notEqual outerProduct packDouble2x32 ' +
+        'packHalf2x16 packSnorm2x16 packSnorm4x8 packUnorm2x16 packUnorm4x8 pow radians reflect refract ' +
+        'round roundEven shadow1D shadow1DLod shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj ' +
+        'shadow2DProjLod sign sin sinh smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture ' +
+        'texture1D texture1DLod texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj ' +
+        'texture2DProjLod texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod ' +
+        'textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset textureLod ' +
+        'textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset textureProjLod ' +
+        'textureProjLodOffset textureProjOffset textureQueryLod textureSize transpose trunc uaddCarry ' +
+        'uintBitsToFloat umulExtended unpackDouble2x32 unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 ' +
+        'unpackUnorm2x16 unpackUnorm4x8 usubBorrow gl_TextureMatrix gl_TextureMatrixInverse',
+      literal: 'true false'
+    },
+    illegal: '"',
+    contains: [
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      hljs.C_NUMBER_MODE,
+      {
+        className: 'preprocessor',
+        begin: '#', end: '$'
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('go', function(hljs) {
+  var GO_KEYWORDS = {
+    keyword:
+      'break default func interface select case map struct chan else goto package switch ' +
+      'const fallthrough if range type continue for import return var go defer',
+    constant:
+       'true false iota nil',
+    typename:
+      'bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 ' +
+      'uint16 uint32 uint64 int uint uintptr rune',
+    built_in:
+      'append cap close complex copy imag len make new panic print println real recover delete'
+  };
+  return {
+    aliases: ["golang"],
+    keywords: GO_KEYWORDS,
+    illegal: '</',
+    contains: [
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      hljs.QUOTE_STRING_MODE,
+      {
+        className: 'string',
+        begin: '\'', end: '[^\\\\]\''
+      },
+      {
+        className: 'string',
+        begin: '`', end: '`'
+      },
+      {
+        className: 'number',
+        begin: hljs.C_NUMBER_RE + '[dflsi]?',
+        relevance: 0
+      },
+      hljs.C_NUMBER_MODE
+    ]
+  };
+});
+
+hljs.registerLanguage('golo', function(hljs) {
+    return {
+      keywords: {
+        keyword:
+          'println readln print import module function local return let var ' +
+          'while for foreach times in case when match with break continue ' +
+          'augment augmentation each find filter reduce ' +
+          'if then else otherwise try catch finally raise throw orIfNull',
+        typename:
+          'DynamicObject|10 DynamicVariable struct Observable map set vector list array',
+        literal:
+          'true false null'
+      },
+      contains: [
+        hljs.HASH_COMMENT_MODE,
+        hljs.QUOTE_STRING_MODE,
+        hljs.C_NUMBER_MODE,
+        {
+          className: 'annotation', begin: '@[A-Za-z]+'
+        }
+      ]
+    }
+});
+
+hljs.registerLanguage('gradle', function(hljs) {
+  return {
+    case_insensitive: true,
+    keywords: {
+      keyword:
+        'task project allprojects subprojects artifacts buildscript configurations ' +
+        'dependencies repositories sourceSets description delete from into include ' +
+        'exclude source classpath destinationDir includes options sourceCompatibility ' +
+        'targetCompatibility group flatDir doLast doFirst flatten todir fromdir ant ' +
+        'def abstract break case catch continue default do else extends final finally ' +
+        'for if implements instanceof native new private protected public return static ' +
+        'switch synchronized throw throws transient try volatile while strictfp package ' +
+        'import false null super this true antlrtask checkstyle codenarc copy boolean ' +
+        'byte char class double float int interface long short void compile runTime ' +
+        'file fileTree abs any append asList asWritable call collect compareTo count ' +
+        'div dump each eachByte eachFile eachLine every find findAll flatten getAt ' +
+        'getErr getIn getOut getText grep immutable inject inspect intersect invokeMethods ' +
+        'isCase join leftShift minus multiply newInputStream newOutputStream newPrintWriter ' +
+        'newReader newWriter next plus pop power previous print println push putAt read ' +
+        'readBytes readLines reverse reverseEach round size sort splitEachLine step subMap ' +
+        'times toInteger toList tokenize upto waitForOrKill withPrintWriter withReader ' +
+        'withStream withWriter withWriterAppend write writeLine'
+    },
+    contains: [
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      hljs.NUMBER_MODE,
+      hljs.REGEXP_MODE
+
+    ]
+  }
+});
+
+hljs.registerLanguage('groovy', function(hljs) {
+    return {
+        keywords: {
+            typename: 'byte short char int long boolean float double void',
+            literal : 'true false null',
+            keyword:
+            // groovy specific keywords
+            'def as in assert trait ' +
+            // common keywords with Java
+            'super this abstract static volatile transient public private protected synchronized final ' +
+            'class interface enum if else for while switch case break default continue ' +
+            'throw throws try catch finally implements extends new import package return instanceof'
+        },
+
+        contains: [
+            hljs.COMMENT(
+                '/\\*\\*',
+                '\\*/',
+                {
+                    relevance : 0,
+                    contains : [{
+                        className : 'doctag',
+                        begin : '@[A-Za-z]+'
+                    }]
+                }
+            ),
+            hljs.C_LINE_COMMENT_MODE,
+            hljs.C_BLOCK_COMMENT_MODE,
+            {
+                className: 'string',
+                begin: '"""', end: '"""'
+            },
+            {
+                className: 'string',
+                begin: "'''", end: "'''"
+            },
+            {
+                className: 'string',
+                begin: "\\$/", end: "/\\$",
+                relevance: 10
+            },
+            hljs.APOS_STRING_MODE,
+            {
+                className: 'regexp',
+                begin: /~?\/[^\/\n]+\//,
+                contains: [
+                    hljs.BACKSLASH_ESCAPE
+                ]
+            },
+            hljs.QUOTE_STRING_MODE,
+            {
+                className: 'shebang',
+                begin: "^#!/usr/bin/env", end: '$',
+                illegal: '\n'
+            },
+            hljs.BINARY_NUMBER_MODE,
+            {
+                className: 'class',
+                beginKeywords: 'class interface trait enum', end: '{',
+                illegal: ':',
+                contains: [
+                    {beginKeywords: 'extends implements'},
+                    hljs.UNDERSCORE_TITLE_MODE,
+                ]
+            },
+            hljs.C_NUMBER_MODE,
+            {
+                className: 'annotation', begin: '@[A-Za-z]+'
+            },
+            {
+                // highlight map keys and named parameters as strings
+                className: 'string', begin: /[^\?]{0}[A-Za-z0-9_$]+ *:/
+            },
+            {
+                // catch middle element of the ternary operator
+                // to avoid highlight it as a label, named parameter, or map key
+                begin: /\?/, end: /\:/
+            },
+            {
+                // highlight labeled statements
+                className: 'label', begin: '^\\s*[A-Za-z0-9_$]+:',
+                relevance: 0
+            },
+        ],
+        illegal: /#/
+    }
+});
+
+hljs.registerLanguage('haml', // TODO support filter tags like :javascript, support inline HTML
+function(hljs) {
+  return {
+    case_insensitive: true,
+    contains: [
+      {
+        className: 'doctype',
+        begin: '^!!!( (5|1\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\b.*))?$',
+        relevance: 10
+      },
+      // FIXME these comments should be allowed to span indented lines
+      hljs.COMMENT(
+        '^\\s*(!=#|=#|-#|/).*$',
+        false,
+        {
+          relevance: 0
+        }
+      ),
+      {
+        begin: '^\\s*(-|=|!=)(?!#)',
+        starts: {
+          end: '\\n',
+          subLanguage: 'ruby'
+        }
+      },
+      {
+        className: 'tag',
+        begin: '^\\s*%',
+        contains: [
+          {
+            className: 'title',
+            begin: '\\w+'
+          },
+          {
+            className: 'value',
+            begin: '[#\\.][\\w-]+'
+          },
+          {
+            begin: '{\\s*',
+            end: '\\s*}',
+            excludeEnd: true,
+            contains: [
+              {
+                //className: 'attribute',
+                begin: ':\\w+\\s*=>',
+                end: ',\\s+',
+                returnBegin: true,
+                endsWithParent: true,
+                contains: [
+                  {
+                    className: 'symbol',
+                    begin: ':\\w+'
+                  },
+                  hljs.APOS_STRING_MODE,
+                  hljs.QUOTE_STRING_MODE,
+                  {
+                    begin: '\\w+',
+                    relevance: 0
+                  }
+                ]
+              }
+            ]
+          },
+          {
+            begin: '\\(\\s*',
+            end: '\\s*\\)',
+            excludeEnd: true,
+            contains: [
+              {
+                //className: 'attribute',
+                begin: '\\w+\\s*=',
+                end: '\\s+',
+                returnBegin: true,
+                endsWithParent: true,
+                contains: [
+                  {
+                    className: 'attribute',
+                    begin: '\\w+',
+                    relevance: 0
+                  },
+                  hljs.APOS_STRING_MODE,
+                  hljs.QUOTE_STRING_MODE,
+                  {
+                    begin: '\\w+',
+                    relevance: 0
+                  }
+                ]
+              }
+            ]
+          }
+        ]
+      },
+      {
+        className: 'bullet',
+        begin: '^\\s*[=~]\\s*',
+        relevance: 0
+      },
+      {
+        begin: '#{',
+        starts: {
+          end: '}',
+          subLanguage: 'ruby'
+        }
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('handlebars', function(hljs) {
+  var EXPRESSION_KEYWORDS = 'each in with if else unless bindattr action collection debugger log outlet template unbound view yield';
+  return {
+    aliases: ['hbs', 'html.hbs', 'html.handlebars'],
+    case_insensitive: true,
+    subLanguage: 'xml',
+    contains: [
+      {
+        className: 'expression',
+        begin: '{{', end: '}}',
+        contains: [
+          {
+            className: 'begin-block', begin: '\#[a-zA-Z\-\ \.]+',
+            keywords: EXPRESSION_KEYWORDS
+          },
+          {
+            className: 'string',
+            begin: '"', end: '"'
+          },
+          {
+            className: 'end-block', begin: '\\\/[a-zA-Z\-\ \.]+',
+            keywords: EXPRESSION_KEYWORDS
+          },
+          {
+            className: 'variable', begin: '[a-zA-Z\-\.]+',
+            keywords: EXPRESSION_KEYWORDS
+          }
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('haskell', function(hljs) {
+  var COMMENT_MODES = [
+    hljs.COMMENT('--', '$'),
+    hljs.COMMENT(
+      '{-',
+      '-}',
+      {
+        contains: ['self']
+      }
+    )
+  ];
+
+  var PRAGMA = {
+    className: 'pragma',
+    begin: '{-#', end: '#-}'
+  };
+
+  var PREPROCESSOR = {
+    className: 'preprocessor',
+    begin: '^#', end: '$'
+  };
+
+  var CONSTRUCTOR = {
+    className: 'type',
+    begin: '\\b[A-Z][\\w\']*', // TODO: other constructors (build-in, infix).
+    relevance: 0
+  };
+
+  var LIST = {
+    className: 'container',
+    begin: '\\(', end: '\\)',
+    illegal: '"',
+    contains: [
+      PRAGMA,
+      PREPROCESSOR,
+      {className: 'type', begin: '\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?'},
+      hljs.inherit(hljs.TITLE_MODE, {begin: '[_a-z][\\w\']*'})
+    ].concat(COMMENT_MODES)
+  };
+
+  var RECORD = {
+    className: 'container',
+    begin: '{', end: '}',
+    contains: LIST.contains
+  };
+
+  return {
+    aliases: ['hs'],
+    keywords:
+      'let in if then else case of where do module import hiding ' +
+      'qualified type data newtype deriving class instance as default ' +
+      'infix infixl infixr foreign export ccall stdcall cplusplus ' +
+      'jvm dotnet safe unsafe family forall mdo proc rec',
+    contains: [
+
+      // Top-level constructions.
+
+      {
+        className: 'module',
+        begin: '\\bmodule\\b', end: 'where',
+        keywords: 'module where',
+        contains: [LIST].concat(COMMENT_MODES),
+        illegal: '\\W\\.|;'
+      },
+      {
+        className: 'import',
+        begin: '\\bimport\\b', end: '$',
+        keywords: 'import|0 qualified as hiding',
+        contains: [LIST].concat(COMMENT_MODES),
+        illegal: '\\W\\.|;'
+      },
+
+      {
+        className: 'class',
+        begin: '^(\\s*)?(class|instance)\\b', end: 'where',
+        keywords: 'class family instance where',
+        contains: [CONSTRUCTOR, LIST].concat(COMMENT_MODES)
+      },
+      {
+        className: 'typedef',
+        begin: '\\b(data|(new)?type)\\b', end: '$',
+        keywords: 'data family type newtype deriving',
+        contains: [PRAGMA, CONSTRUCTOR, LIST, RECORD].concat(COMMENT_MODES)
+      },
+      {
+        className: 'default',
+        beginKeywords: 'default', end: '$',
+        contains: [CONSTRUCTOR, LIST].concat(COMMENT_MODES)
+      },
+      {
+        className: 'infix',
+        beginKeywords: 'infix infixl infixr', end: '$',
+        contains: [hljs.C_NUMBER_MODE].concat(COMMENT_MODES)
+      },
+      {
+        className: 'foreign',
+        begin: '\\bforeign\\b', end: '$',
+        keywords: 'foreign import export ccall stdcall cplusplus jvm ' +
+                  'dotnet safe unsafe',
+        contains: [CONSTRUCTOR, hljs.QUOTE_STRING_MODE].concat(COMMENT_MODES)
+      },
+      {
+        className: 'shebang',
+        begin: '#!\\/usr\\/bin\\/env\ runhaskell', end: '$'
+      },
+
+      // "Whitespaces".
+
+      PRAGMA,
+      PREPROCESSOR,
+
+      // Literals and names.
+
+      // TODO: characters.
+      hljs.QUOTE_STRING_MODE,
+      hljs.C_NUMBER_MODE,
+      CONSTRUCTOR,
+      hljs.inherit(hljs.TITLE_MODE, {begin: '^[_a-z][\\w\']*'}),
+
+      {begin: '->|<-'} // No markup, relevance booster
+    ].concat(COMMENT_MODES)
+  };
+});
+
+hljs.registerLanguage('haxe', function(hljs) {
+  var IDENT_RE = '[a-zA-Z_$][a-zA-Z0-9_$]*';
+  var IDENT_FUNC_RETURN_TYPE_RE = '([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)';
+
+  return {
+    aliases: ['hx'],
+    keywords: {
+      keyword: 'break callback case cast catch class continue default do dynamic else enum extends extern ' +
+    'for function here if implements import in inline interface never new override package private ' +
+    'public return static super switch this throw trace try typedef untyped using var while',
+      literal: 'true false null'
+    },
+    contains: [
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      hljs.C_NUMBER_MODE,
+      {
+        className: 'class',
+        beginKeywords: 'class interface', end: '{', excludeEnd: true,
+        contains: [
+          {
+            beginKeywords: 'extends implements'
+          },
+          hljs.TITLE_MODE
+        ]
+      },
+      {
+        className: 'preprocessor',
+        begin: '#', end: '$',
+        keywords: 'if else elseif end error'
+      },
+      {
+        className: 'function',
+        beginKeywords: 'function', end: '[{;]', excludeEnd: true,
+        illegal: '\\S',
+        contains: [
+          hljs.TITLE_MODE,
+          {
+            className: 'params',
+            begin: '\\(', end: '\\)',
+            contains: [
+              hljs.APOS_STRING_MODE,
+              hljs.QUOTE_STRING_MODE,
+              hljs.C_LINE_COMMENT_MODE,
+              hljs.C_BLOCK_COMMENT_MODE
+            ]
+          },
+          {
+            className: 'type',
+            begin: ':',
+            end: IDENT_FUNC_RETURN_TYPE_RE,
+            relevance: 10
+          }
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('http', function(hljs) {
+  return {
+    aliases: ['https'],
+    illegal: '\\S',
+    contains: [
+      {
+        className: 'status',
+        begin: '^HTTP/[0-9\\.]+', end: '$',
+        contains: [{className: 'number', begin: '\\b\\d{3}\\b'}]
+      },
+      {
+        className: 'request',
+        begin: '^[A-Z]+ (.*?) HTTP/[0-9\\.]+$', returnBegin: true, end: '$',
+        contains: [
+          {
+            className: 'string',
+            begin: ' ', end: ' ',
+            excludeBegin: true, excludeEnd: true
+          }
+        ]
+      },
+      {
+        className: 'attribute',
+        begin: '^\\w', end: ': ', excludeEnd: true,
+        illegal: '\\n|\\s|=',
+        starts: {className: 'string', end: '$'}
+      },
+      {
+        begin: '\\n\\n',
+        starts: {subLanguage: [], endsWithParent: true}
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('inform7', function(hljs) {
+  var START_BRACKET = '\\[';
+  var END_BRACKET = '\\]';
+  return {
+    aliases: ['i7'],
+    case_insensitive: true,
+    keywords: {
+      // Some keywords more or less unique to I7, for relevance.
+      keyword:
+        // kind:
+        'thing room person man woman animal container ' +
+        'supporter backdrop door ' +
+        // characteristic:
+        'scenery open closed locked inside gender ' +
+        // verb:
+        'is are say understand ' +
+        // misc keyword:
+        'kind of rule'
+    },
+    contains: [
+      {
+        className: 'string',
+        begin: '"', end: '"',
+        relevance: 0,
+        contains: [
+          {
+            className: 'subst',
+            begin: START_BRACKET, end: END_BRACKET
+          }
+        ]
+      },
+      {
+        className: 'title',
+        begin: /^(Volume|Book|Part|Chapter|Section|Table)\b/,
+        end: '$'
+      },
+      {
+        // Rule definition
+        // This is here for relevance.
+        begin: /^(Check|Carry out|Report|Instead of|To|Rule|When|Before|After)\b/,
+        end: ':',
+        contains: [
+          {
+            //Rule name
+            begin: '\\b\\(This',
+            end: '\\)'
+          }
+        ]
+      },
+      {
+        className: 'comment',
+        begin: START_BRACKET, end: END_BRACKET,
+        contains: ['self']
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('ini', function(hljs) {
+  var STRING = {
+    className: "string",
+    contains: [hljs.BACKSLASH_ESCAPE],
+    variants: [
+      {
+        begin: "'''", end: "'''",
+        relevance: 10
+      }, {
+        begin: '"""', end: '"""',
+        relevance: 10
+      }, {
+        begin: '"', end: '"'
+      }, {
+        begin: "'", end: "'"
+      }
+    ]
+  };
+  return {
+    aliases: ['toml'],
+    case_insensitive: true,
+    illegal: /\S/,
+    contains: [
+      hljs.COMMENT(';', '$'),
+      hljs.HASH_COMMENT_MODE,
+      {
+        className: 'title',
+        begin: /^\s*\[+/, end: /\]+/
+      },
+      {
+        className: 'setting',
+        begin: /^[a-z0-9\[\]_-]+\s*=\s*/, end: '$',
+        contains: [
+          {
+            className: 'value',
+            endsWithParent: true,
+            keywords: 'on off true false yes no',
+            contains: [
+              {
+                className: 'variable',
+                variants: [
+                  {begin: /\$[\w\d"][\w\d_]*/},
+                  {begin: /\$\{(.*?)}/}
+                ]
+              },
+              STRING,
+              {
+                className: 'number',
+                begin: /([\+\-]+)?[\d]+_[\d_]+/
+              },
+              hljs.NUMBER_MODE
+            ],
+            relevance: 0
+          }
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('irpf90', function(hljs) {
+  var PARAMS = {
+    className: 'params',
+    begin: '\\(', end: '\\)'
+  };
+
+  var F_KEYWORDS = {
+    constant: '.False. .True.',
+    type: 'integer real character complex logical dimension allocatable|10 parameter ' +
+      'external implicit|10 none double precision assign intent optional pointer ' +
+      'target in out common equivalence data',
+    keyword: 'kind do while private call intrinsic where elsewhere ' +
+      'type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then ' +
+      'public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. ' +
+      'goto save else use module select case ' +
+      'access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit ' +
+      'continue format pause cycle exit ' +
+      'c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg ' +
+      'synchronous nopass non_overridable pass protected volatile abstract extends import ' +
+      'non_intrinsic value deferred generic final enumerator class associate bind enum ' +
+      'c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t ' +
+      'c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double ' +
+      'c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr ' +
+      'c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated  c_f_pointer ' +
+      'c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor ' +
+      'numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ' +
+      'ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive ' +
+      'pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure ' +
+      // IRPF90 special keywords
+      'begin_provider &begin_provider end_provider begin_shell end_shell begin_template end_template subst assert touch ' +
+      'soft_touch provide no_dep free irp_if irp_else irp_endif irp_write irp_read',
+    built_in: 'alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint ' +
+      'dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl ' +
+      'algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama ' +
+      'iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod ' +
+      'qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log ' +
+      'log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate ' +
+      'adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product ' +
+      'eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul ' +
+      'maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product ' +
+      'radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind ' +
+      'set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer ' +
+      'dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ' +
+      'ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode ' +
+      'is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of'  +
+      'acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 ' +
+      'atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits ' +
+      'bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr ' +
+      'num_images parity popcnt poppar shifta shiftl shiftr this_image ' +
+      // IRPF90 special built_ins
+      'IRP_ALIGN irp_here'
+  };
+  return {
+    case_insensitive: true,
+    keywords: F_KEYWORDS,
+    illegal: /\/\*/,
+    contains: [
+      hljs.inherit(hljs.APOS_STRING_MODE, {className: 'string', relevance: 0}),
+      hljs.inherit(hljs.QUOTE_STRING_MODE, {className: 'string', relevance: 0}),
+      {
+        className: 'function',
+        beginKeywords: 'subroutine function program',
+        illegal: '[${=\\n]',
+        contains: [hljs.UNDERSCORE_TITLE_MODE, PARAMS]
+      },
+      hljs.COMMENT('!', '$', {relevance: 0}),
+      hljs.COMMENT('begin_doc', 'end_doc', {relevance: 10}),
+      {
+        className: 'number',
+        begin: '(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?',
+        relevance: 0
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('java', function(hljs) {
+  var GENERIC_IDENT_RE = hljs.UNDERSCORE_IDENT_RE + '(<' + hljs.UNDERSCORE_IDENT_RE + '>)?';
+  var KEYWORDS =
+    'false synchronized int abstract float private char boolean static null if const ' +
+    'for true while long strictfp finally protected import native final void ' +
+    'enum else break transient catch instanceof byte super volatile case assert short ' +
+    'package default double public try this switch continue throws protected public private';
+
+  // https://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html
+  var JAVA_NUMBER_RE = '\\b' +
+    '(' +
+      '0[bB]([01]+[01_]+[01]+|[01]+)' + // 0b...
+      '|' +
+      '0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)' + // 0x...
+      '|' +
+      '(' +
+        '([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?' +
+        '|' +
+        '\\.([\\d]+[\\d_]+[\\d]+|[\\d]+)' +
+      ')' +
+      '([eE][-+]?\\d+)?' + // octal, decimal, float
+    ')' +
+    '[lLfF]?';
+  var JAVA_NUMBER_MODE = {
+    className: 'number',
+    begin: JAVA_NUMBER_RE,
+    relevance: 0
+  };
+
+  return {
+    aliases: ['jsp'],
+    keywords: KEYWORDS,
+    illegal: /<\/|#/,
+    contains: [
+      hljs.COMMENT(
+        '/\\*\\*',
+        '\\*/',
+        {
+          relevance : 0,
+          contains : [{
+            className : 'doctag',
+            begin : '@[A-Za-z]+'
+          }]
+        }
+      ),
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      {
+        className: 'class',
+        beginKeywords: 'class interface', end: /[{;=]/, excludeEnd: true,
+        keywords: 'class interface',
+        illegal: /[:"\[\]]/,
+        contains: [
+          {beginKeywords: 'extends implements'},
+          hljs.UNDERSCORE_TITLE_MODE
+        ]
+      },
+      {
+        // Expression keywords prevent 'keyword Name(...)' from being
+        // recognized as a function definition
+        beginKeywords: 'new throw return else',
+        relevance: 0
+      },
+      {
+        className: 'function',
+        begin: '(' + GENERIC_IDENT_RE + '\\s+)+' + hljs.UNDERSCORE_IDENT_RE + '\\s*\\(', returnBegin: true, end: /[{;=]/,
+        excludeEnd: true,
+        keywords: KEYWORDS,
+        contains: [
+          {
+            begin: hljs.UNDERSCORE_IDENT_RE + '\\s*\\(', returnBegin: true,
+            relevance: 0,
+            contains: [hljs.UNDERSCORE_TITLE_MODE]
+          },
+          {
+            className: 'params',
+            begin: /\(/, end: /\)/,
+            keywords: KEYWORDS,
+            relevance: 0,
+            contains: [
+              hljs.APOS_STRING_MODE,
+              hljs.QUOTE_STRING_MODE,
+              hljs.C_NUMBER_MODE,
+              hljs.C_BLOCK_COMMENT_MODE
+            ]
+          },
+          hljs.C_LINE_COMMENT_MODE,
+          hljs.C_BLOCK_COMMENT_MODE
+        ]
+      },
+      JAVA_NUMBER_MODE,
+      {
+        className: 'annotation', begin: '@[A-Za-z]+'
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('javascript', function(hljs) {
+  return {
+    aliases: ['js'],
+    keywords: {
+      keyword:
+        'in of if for while finally var new function do return void else break catch ' +
+        'instanceof with throw case default try this switch continue typeof delete ' +
+        'let yield const export super debugger as async await',
+      literal:
+        'true false null undefined NaN Infinity',
+      built_in:
+        'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +
+        'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +
+        'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +
+        'TypeError URIError Number Math Date String RegExp Array Float32Array ' +
+        'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +
+        'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +
+        'module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect ' +
+        'Promise'
+    },
+    contains: [
+      {
+        className: 'pi',
+        relevance: 10,
+        begin: /^\s*['"]use (strict|asm)['"]/
+      },
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      { // template string
+        className: 'string',
+        begin: '`', end: '`',
+        contains: [
+          hljs.BACKSLASH_ESCAPE,
+          {
+            className: 'subst',
+            begin: '\\$\\{', end: '\\}'
+          }
+        ]
+      },
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      {
+        className: 'number',
+        variants: [
+          { begin: '\\b(0[bB][01]+)' },
+          { begin: '\\b(0[oO][0-7]+)' },
+          { begin: hljs.C_NUMBER_RE }
+        ],
+        relevance: 0
+      },
+      { // "value" container
+        begin: '(' + hljs.RE_STARTERS_RE + '|\\b(case|return|throw)\\b)\\s*',
+        keywords: 'return throw case',
+        contains: [
+          hljs.C_LINE_COMMENT_MODE,
+          hljs.C_BLOCK_COMMENT_MODE,
+          hljs.REGEXP_MODE,
+          { // E4X / JSX
+            begin: /</, end: />\s*[);\]]/,
+            relevance: 0,
+            subLanguage: 'xml'
+          }
+        ],
+        relevance: 0
+      },
+      {
+        className: 'function',
+        beginKeywords: 'function', end: /\{/, excludeEnd: true,
+        contains: [
+          hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/}),
+          {
+            className: 'params',
+            begin: /\(/, end: /\)/,
+            excludeBegin: true,
+            excludeEnd: true,
+            contains: [
+              hljs.C_LINE_COMMENT_MODE,
+              hljs.C_BLOCK_COMMENT_MODE
+            ]
+          }
+        ],
+        illegal: /\[|%/
+      },
+      {
+        begin: /\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`
+      },
+      {
+        begin: '\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots
+      },
+      // ECMAScript 6 modules import
+      {
+        beginKeywords: 'import', end: '[;$]',
+        keywords: 'import from as',
+        contains: [
+          hljs.APOS_STRING_MODE,
+          hljs.QUOTE_STRING_MODE
+        ]
+      },
+      { // ES6 class
+        className: 'class',
+        beginKeywords: 'class', end: /[{;=]/, excludeEnd: true,
+        illegal: /[:"\[\]]/,
+        contains: [
+          {beginKeywords: 'extends'},
+          hljs.UNDERSCORE_TITLE_MODE
+        ]
+      }
+    ],
+    illegal: /#/
+  };
+});
+
+hljs.registerLanguage('json', function(hljs) {
+  var LITERALS = {literal: 'true false null'};
+  var TYPES = [
+    hljs.QUOTE_STRING_MODE,
+    hljs.C_NUMBER_MODE
+  ];
+  var VALUE_CONTAINER = {
+    className: 'value',
+    end: ',', endsWithParent: true, excludeEnd: true,
+    contains: TYPES,
+    keywords: LITERALS
+  };
+  var OBJECT = {
+    begin: '{', end: '}',
+    contains: [
+      {
+        className: 'attribute',
+        begin: '\\s*"', end: '"\\s*:\\s*', excludeBegin: true, excludeEnd: true,
+        contains: [hljs.BACKSLASH_ESCAPE],
+        illegal: '\\n',
+        starts: VALUE_CONTAINER
+      }
+    ],
+    illegal: '\\S'
+  };
+  var ARRAY = {
+    begin: '\\[', end: '\\]',
+    contains: [hljs.inherit(VALUE_CONTAINER, {className: null})], // inherit is also a workaround for a bug that makes shared modes with endsWithParent compile only the ending of one of the parents
+    illegal: '\\S'
+  };
+  TYPES.splice(TYPES.length, 0, OBJECT, ARRAY);
+  return {
+    contains: TYPES,
+    keywords: LITERALS,
+    illegal: '\\S'
+  };
+});
+
+hljs.registerLanguage('julia', function(hljs) {
+  // Since there are numerous special names in Julia, it is too much trouble
+  // to maintain them by hand. Hence these names (i.e. keywords, literals and
+  // built-ins) are automatically generated from Julia (v0.3.0) itself through
+  // following scripts for each.
+
+  var KEYWORDS = {
+    // # keyword generator
+    // println("\"in\",")
+    // for kw in Base.REPLCompletions.complete_keyword("")
+    //     println("\"$kw\",")
+    // end
+    keyword:
+      'in abstract baremodule begin bitstype break catch ccall const continue do else elseif end export ' +
+      'finally for function global if immutable import importall let local macro module quote return try type ' +
+      'typealias using while',
+
+    // # literal generator
+    // println("\"true\",\n\"false\"")
+    // for name in Base.REPLCompletions.completions("", 0)[1]
+    //     try
+    //         s = symbol(name)
+    //         v = eval(s)
+    //         if !isa(v, Function) &&
+    //            !isa(v, DataType) &&
+    //            !issubtype(typeof(v), Tuple) &&
+    //            !isa(v, UnionType) &&
+    //            !isa(v, Module) &&
+    //            !isa(v, TypeConstructor) &&
+    //            !isa(v, Colon)
+    //             println("\"$name\",")
+    //         end
+    //     end
+    // end
+    literal:
+      'true false ANY ARGS CPU_CORES C_NULL DL_LOAD_PATH DevNull ENDIAN_BOM ENV I|0 Inf Inf16 Inf32 ' +
+      'InsertionSort JULIA_HOME LOAD_PATH MS_ASYNC MS_INVALIDATE MS_SYNC MergeSort NaN NaN16 NaN32 OS_NAME QuickSort ' +
+      'RTLD_DEEPBIND RTLD_FIRST RTLD_GLOBAL RTLD_LAZY RTLD_LOCAL RTLD_NODELETE RTLD_NOLOAD RTLD_NOW RoundDown ' +
+      'RoundFromZero RoundNearest RoundToZero RoundUp STDERR STDIN STDOUT VERSION WORD_SIZE catalan cglobal e|0 eu|0 ' +
+      'eulergamma golden im nothing pi γ π φ',
+
+    // # built_in generator:
+    // for name in Base.REPLCompletions.completions("", 0)[1]
+    //     try
+    //         v = eval(symbol(name))
+    //         if isa(v, DataType)
+    //             println("\"$name\",")
+    //         end
+    //     end
+    // end
+    built_in:
+      'ASCIIString AbstractArray AbstractRNG AbstractSparseArray Any ArgumentError Array Associative Base64Pipe ' +
+      'Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError Box CFILE Cchar Cdouble Cfloat Char ' +
+      'CharString Cint Clong Clonglong ClusterManager Cmd Coff_t Colon Complex Complex128 Complex32 Complex64 ' +
+      'Condition Cptrdiff_t Cshort Csize_t Cssize_t Cuchar Cuint Culong Culonglong Cushort Cwchar_t DArray DataType ' +
+      'DenseArray Diagonal Dict DimensionMismatch DirectIndexString Display DivideError DomainError EOFError ' +
+      'EachLine Enumerate ErrorException Exception Expr Factorization FileMonitor FileOffset Filter Float16 Float32 ' +
+      'Float64 FloatRange FloatingPoint Function GetfieldNode GotoNode Hermitian IO IOBuffer IOStream IPv4 IPv6 ' +
+      'InexactError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException IntrinsicFunction KeyError ' +
+      'LabelNode LambdaStaticData LineNumberNode LoadError LocalProcess MIME MathConst MemoryError MersenneTwister ' +
+      'Method MethodError MethodTable Module NTuple NewvarNode Nothing Number ObjectIdDict OrdinalRange ' +
+      'OverflowError ParseError PollingFileWatcher ProcessExitedException ProcessGroup Ptr QuoteNode Range Range1 ' +
+      'Ranges Rational RawFD Real Regex RegexMatch RemoteRef RepString RevString RopeString RoundingMode Set ' +
+      'SharedArray Signed SparseMatrixCSC StackOverflowError Stat StatStruct StepRange String SubArray SubString ' +
+      'SymTridiagonal Symbol SymbolNode Symmetric SystemError Task TextDisplay Timer TmStruct TopNode Triangular ' +
+      'Tridiagonal Type TypeConstructor TypeError TypeName TypeVar UTF16String UTF32String UTF8String UdpSocket ' +
+      'Uint Uint128 Uint16 Uint32 Uint64 Uint8 UndefRefError UndefVarError UniformScaling UnionType UnitRange ' +
+      'Unsigned Vararg VersionNumber WString WeakKeyDict WeakRef Woodbury Zip'
+  };
+
+  // ref: http://julia.readthedocs.org/en/latest/manual/variables/#allowed-variable-names
+  var VARIABLE_NAME_RE = "[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*";
+
+  // placeholder for recursive self-reference
+  var DEFAULT = { lexemes: VARIABLE_NAME_RE, keywords: KEYWORDS };
+
+  var TYPE_ANNOTATION = {
+    className: "type-annotation",
+    begin: /::/
+  };
+
+  var SUBTYPE = {
+    className: "subtype",
+    begin: /<:/
+  };
+
+  // ref: http://julia.readthedocs.org/en/latest/manual/integers-and-floating-point-numbers/
+  var NUMBER = {
+    className: "number",
+    // supported numeric literals:
+    //  * binary literal (e.g. 0x10)
+    //  * octal literal (e.g. 0o76543210)
+    //  * hexadecimal literal (e.g. 0xfedcba876543210)
+    //  * hexadecimal floating point literal (e.g. 0x1p0, 0x1.2p2)
+    //  * decimal literal (e.g. 9876543210, 100_000_000)
+    //  * floating pointe literal (e.g. 1.2, 1.2f, .2, 1., 1.2e10, 1.2e-10)
+    begin: /(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,
+    relevance: 0
+  };
+
+  var CHAR = {
+    className: "char",
+    begin: /'(.|\\[xXuU][a-zA-Z0-9]+)'/
+  };
+
+  var INTERPOLATION = {
+    className: 'subst',
+    begin: /\$\(/, end: /\)/,
+    keywords: KEYWORDS
+  };
+
+  var INTERPOLATED_VARIABLE = {
+    className: 'variable',
+    begin: "\\$" + VARIABLE_NAME_RE
+  };
+
+  // TODO: neatly escape normal code in string literal
+  var STRING = {
+    className: "string",
+    contains: [hljs.BACKSLASH_ESCAPE, INTERPOLATION, INTERPOLATED_VARIABLE],
+    variants: [
+      { begin: /\w*"/, end: /"\w*/ },
+      { begin: /\w*"""/, end: /"""\w*/ }
+    ]
+  };
+
+  var COMMAND = {
+    className: "string",
+    contains: [hljs.BACKSLASH_ESCAPE, INTERPOLATION, INTERPOLATED_VARIABLE],
+    begin: '`', end: '`'
+  };
+
+  var MACROCALL = {
+    className: "macrocall",
+    begin: "@" + VARIABLE_NAME_RE
+  };
+
+  var COMMENT = {
+    className: "comment",
+    variants: [
+      { begin: "#=", end: "=#", relevance: 10 },
+      { begin: '#', end: '$' }
+    ]
+  };
+
+  DEFAULT.contains = [
+    NUMBER,
+    CHAR,
+    TYPE_ANNOTATION,
+    SUBTYPE,
+    STRING,
+    COMMAND,
+    MACROCALL,
+    COMMENT,
+    hljs.HASH_COMMENT_MODE
+  ];
+  INTERPOLATION.contains = DEFAULT.contains;
+
+  return DEFAULT;
+});
+
+hljs.registerLanguage('kotlin', function (hljs) {
+  var KEYWORDS = 'val var get set class trait object public open private protected ' +
+    'final enum if else do while for when break continue throw try catch finally ' +
+    'import package is as in return fun override default companion reified inline volatile transient native';
+
+  return {
+    keywords: {
+      typename: 'Byte Short Char Int Long Boolean Float Double Void Unit Nothing',
+      literal: 'true false null',
+      keyword: KEYWORDS
+    },
+    contains : [
+      hljs.COMMENT(
+        '/\\*\\*',
+        '\\*/',
+        {
+          relevance : 0,
+          contains : [{
+            className : 'doctag',
+            begin : '@[A-Za-z]+'
+          }]
+        }
+      ),
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      {
+        className: 'type',
+        begin: /</, end: />/,
+        returnBegin: true,
+        excludeEnd: false,
+        relevance: 0
+      },
+      {
+        className: 'function',
+        beginKeywords: 'fun', end: '[(]|$',
+        returnBegin: true,
+        excludeEnd: true,
+        keywords: KEYWORDS,
+        illegal: /fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,
+        relevance: 5,
+        contains: [
+          {
+            begin: hljs.UNDERSCORE_IDENT_RE + '\\s*\\(', returnBegin: true,
+            relevance: 0,
+            contains: [hljs.UNDERSCORE_TITLE_MODE]
+          },
+          {
+            className: 'type',
+            begin: /</, end: />/, keywords: 'reified',
+            relevance: 0
+          },
+          {
+            className: 'params',
+            begin: /\(/, end: /\)/,
+            keywords: KEYWORDS,
+            relevance: 0,
+            illegal: /\([^\(,\s:]+,/,
+            contains: [
+              {
+                className: 'typename',
+                begin: /:\s*/, end: /\s*[=\)]/, excludeBegin: true, returnEnd: true,
+                relevance: 0
+              }
+            ]
+          },
+          hljs.C_LINE_COMMENT_MODE,
+          hljs.C_BLOCK_COMMENT_MODE
+        ]
+      },
+      {
+        className: 'class',
+        beginKeywords: 'class trait', end: /[:\{(]|$/,
+        excludeEnd: true,
+        illegal: 'extends implements',
+        contains: [
+          hljs.UNDERSCORE_TITLE_MODE,
+          {
+            className: 'type',
+            begin: /</, end: />/, excludeBegin: true, excludeEnd: true,
+            relevance: 0
+          },
+          {
+            className: 'typename',
+            begin: /[,:]\s*/, end: /[<\(,]|$/, excludeBegin: true, returnEnd: true
+          }
+        ]
+      },
+      {
+        className: 'variable', beginKeywords: 'var val', end: /\s*[=:$]/, excludeEnd: true
+      },
+      hljs.QUOTE_STRING_MODE,
+      {
+        className: 'shebang',
+        begin: "^#!/usr/bin/env", end: '$',
+        illegal: '\n'
+      },
+      hljs.C_NUMBER_MODE
+    ]
+  };
+});
+
+hljs.registerLanguage('lasso', function(hljs) {
+  var LASSO_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9_.]*';
+  var LASSO_ANGLE_RE = '<\\?(lasso(script)?|=)';
+  var LASSO_CLOSE_RE = '\\]|\\?>';
+  var LASSO_KEYWORDS = {
+    literal:
+      'true false none minimal full all void ' +
+      'bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft',
+    built_in:
+      'array date decimal duration integer map pair string tag xml null ' +
+      'boolean bytes keyword list locale queue set stack staticarray ' +
+      'local var variable global data self inherited currentcapture givenblock',
+    keyword:
+      'error_code error_msg error_pop error_push error_reset cache ' +
+      'database_names database_schemanames database_tablenames define_tag ' +
+      'define_type email_batch encode_set html_comment handle handle_error ' +
+      'header if inline iterate ljax_target link link_currentaction ' +
+      'link_currentgroup link_currentrecord link_detail link_firstgroup ' +
+      'link_firstrecord link_lastgroup link_lastrecord link_nextgroup ' +
+      'link_nextrecord link_prevgroup link_prevrecord log loop ' +
+      'namespace_using output_none portal private protect records referer ' +
+      'referrer repeating resultset rows search_args search_arguments ' +
+      'select sort_args sort_arguments thread_atomic value_list while ' +
+      'abort case else if_empty if_false if_null if_true loop_abort ' +
+      'loop_continue loop_count params params_up return return_value ' +
+      'run_children soap_definetag soap_lastrequest soap_lastresponse ' +
+      'tag_name ascending average by define descending do equals ' +
+      'frozen group handle_failure import in into join let match max ' +
+      'min on order parent protected provide public require returnhome ' +
+      'skip split_thread sum take thread to trait type where with ' +
+      'yield yieldhome'
+  };
+  var HTML_COMMENT = hljs.COMMENT(
+    '<!--',
+    '-->',
+    {
+      relevance: 0
+    }
+  );
+  var LASSO_NOPROCESS = {
+    className: 'preprocessor',
+    begin: '\\[noprocess\\]',
+    starts: {
+      className: 'markup',
+      end: '\\[/noprocess\\]',
+      returnEnd: true,
+      contains: [HTML_COMMENT]
+    }
+  };
+  var LASSO_START = {
+    className: 'preprocessor',
+    begin: '\\[/noprocess|' + LASSO_ANGLE_RE
+  };
+  var LASSO_DATAMEMBER = {
+    className: 'variable',
+    begin: '\'' + LASSO_IDENT_RE + '\''
+  };
+  var LASSO_CODE = [
+    hljs.COMMENT(
+      '/\\*\\*!',
+      '\\*/'
+    ),
+    hljs.C_LINE_COMMENT_MODE,
+    hljs.C_BLOCK_COMMENT_MODE,
+    hljs.inherit(hljs.C_NUMBER_MODE, {begin: hljs.C_NUMBER_RE + '|(infinity|nan)\\b'}),
+    hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null}),
+    hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),
+    {
+      className: 'string',
+      begin: '`', end: '`'
+    },
+    {
+      className: 'variable',
+      variants: [
+        {
+          begin: '[#$]' + LASSO_IDENT_RE
+        },
+        {
+          begin: '#', end: '\\d+',
+          illegal: '\\W'
+        }
+      ]
+    },
+    {
+      className: 'tag',
+      begin: '::\\s*', end: LASSO_IDENT_RE,
+      illegal: '\\W'
+    },
+    {
+      className: 'attribute',
+      variants: [
+        {
+          begin: '-(?!infinity)' + hljs.UNDERSCORE_IDENT_RE,
+          relevance: 0
+        },
+        {
+          begin: '(\\.\\.\\.)'
+        }
+      ]
+    },
+    {
+      className: 'subst',
+      variants: [
+        {
+          begin: '->\\s*',
+          contains: [LASSO_DATAMEMBER]
+        },
+        {
+          begin: '->|\\\\|&&?|\\|\\||!(?!=|>)|(and|or|not)\\b',
+          relevance: 0
+        }
+      ]
+    },
+    {
+      className: 'built_in',
+      begin: '\\.\\.?\\s*',
+      relevance: 0,
+      contains: [LASSO_DATAMEMBER]
+    },
+    {
+      className: 'class',
+      beginKeywords: 'define',
+      returnEnd: true, end: '\\(|=>',
+      contains: [
+        hljs.inherit(hljs.TITLE_MODE, {begin: hljs.UNDERSCORE_IDENT_RE + '(=(?!>))?'})
+      ]
+    }
+  ];
+  return {
+    aliases: ['ls', 'lassoscript'],
+    case_insensitive: true,
+    lexemes: LASSO_IDENT_RE + '|&[lg]t;',
+    keywords: LASSO_KEYWORDS,
+    contains: [
+      {
+        className: 'preprocessor',
+        begin: LASSO_CLOSE_RE,
+        relevance: 0,
+        starts: {
+          className: 'markup',
+          end: '\\[|' + LASSO_ANGLE_RE,
+          returnEnd: true,
+          relevance: 0,
+          contains: [HTML_COMMENT]
+        }
+      },
+      LASSO_NOPROCESS,
+      LASSO_START,
+      {
+        className: 'preprocessor',
+        begin: '\\[no_square_brackets',
+        starts: {
+          end: '\\[/no_square_brackets\\]', // not implemented in the language
+          lexemes: LASSO_IDENT_RE + '|&[lg]t;',
+          keywords: LASSO_KEYWORDS,
+          contains: [
+            {
+              className: 'preprocessor',
+              begin: LASSO_CLOSE_RE,
+              relevance: 0,
+              starts: {
+                className: 'markup',
+                end: '\\[noprocess\\]|' + LASSO_ANGLE_RE,
+                returnEnd: true,
+                contains: [HTML_COMMENT]
+              }
+            },
+            LASSO_NOPROCESS,
+            LASSO_START
+          ].concat(LASSO_CODE)
+        }
+      },
+      {
+        className: 'preprocessor',
+        begin: '\\[',
+        relevance: 0
+      },
+      {
+        className: 'shebang',
+        begin: '^#!.+lasso9\\b',
+        relevance: 10
+      }
+    ].concat(LASSO_CODE)
+  };
+});
+
+hljs.registerLanguage('less', function(hljs) {
+  var IDENT_RE        = '[\\w-]+'; // yes, Less identifiers may begin with a digit
+  var INTERP_IDENT_RE = '(' + IDENT_RE + '|@{' + IDENT_RE + '})';
+
+  /* Generic Modes */
+
+  var RULES = [], VALUE = []; // forward def. for recursive modes
+
+  var STRING_MODE = function(c) { return {
+    // Less strings are not multiline (also include '~' for more consistent coloring of "escaped" strings)
+    className: 'string', begin: '~?' + c + '.*?' + c
+  };};
+
+  var IDENT_MODE = function(name, begin, relevance) { return {
+    className: name, begin: begin, relevance: relevance
+  };};
+
+  var FUNCT_MODE = function(name, ident, obj) {
+    return hljs.inherit({
+        className: name, begin: ident + '\\(', end: '\\(',
+        returnBegin: true, excludeEnd: true, relevance: 0
+    }, obj);
+  };
+
+  var PARENS_MODE = {
+    // used only to properly balance nested parens inside mixin call, def. arg list
+    begin: '\\(', end: '\\)', contains: VALUE, relevance: 0
+  };
+
+  // generic Less highlighter (used almost everywhere except selectors):
+  VALUE.push(
+    hljs.C_LINE_COMMENT_MODE,
+    hljs.C_BLOCK_COMMENT_MODE,
+    STRING_MODE("'"),
+    STRING_MODE('"'),
+    hljs.CSS_NUMBER_MODE, // fixme: it does not include dot for numbers like .5em :(
+    IDENT_MODE('hexcolor', '#[0-9A-Fa-f]+\\b'),
+    FUNCT_MODE('function', '(url|data-uri)', {
+      starts: {className: 'string', end: '[\\)\\n]', excludeEnd: true}
+    }),
+    FUNCT_MODE('function', IDENT_RE),
+    PARENS_MODE,
+    IDENT_MODE('variable', '@@?' + IDENT_RE, 10),
+    IDENT_MODE('variable', '@{'  + IDENT_RE + '}'),
+    IDENT_MODE('built_in', '~?`[^`]*?`'), // inline javascript (or whatever host language) *multiline* string
+    { // @media features (it’s here to not duplicate things in AT_RULE_MODE with extra PARENS_MODE overriding):
+      className: 'attribute', begin: IDENT_RE + '\\s*:', end: ':', returnBegin: true, excludeEnd: true
+    }
+  );
+
+  var VALUE_WITH_RULESETS = VALUE.concat({
+    begin: '{', end: '}', contains: RULES
+  });
+
+  var MIXIN_GUARD_MODE = {
+    beginKeywords: 'when', endsWithParent: true,
+    contains: [{beginKeywords: 'and not'}].concat(VALUE) // using this form to override VALUE’s 'function' match
+  };
+
+  /* Rule-Level Modes */
+
+  var RULE_MODE = {
+    className: 'attribute',
+    begin: INTERP_IDENT_RE, end: ':', excludeEnd: true,
+    contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE],
+    illegal: /\S/,
+    starts: {end: '[;}]', returnEnd: true, contains: VALUE, illegal: '[<=$]'}
+  };
+
+  var AT_RULE_MODE = {
+    className: 'at_rule', // highlight only at-rule keyword
+    begin: '@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b',
+    starts: {end: '[;{}]', returnEnd: true, contains: VALUE, relevance: 0}
+  };
+
+  // variable definitions and calls
+  var VAR_RULE_MODE = {
+    className: 'variable',
+    variants: [
+      // using more strict pattern for higher relevance to increase chances of Less detection.
+      // this is *the only* Less specific statement used in most of the sources, so...
+      // (we’ll still often loose to the css-parser unless there's '//' comment,
+      // simply because 1 variable just can't beat 99 properties :)
+      {begin: '@' + IDENT_RE + '\\s*:', relevance: 15},
+      {begin: '@' + IDENT_RE}
+    ],
+    starts: {end: '[;}]', returnEnd: true, contains: VALUE_WITH_RULESETS}
+  };
+
+  var SELECTOR_MODE = {
+    // first parse unambiguous selectors (i.e. those not starting with tag)
+    // then fall into the scary lookahead-discriminator variant.
+    // this mode also handles mixin definitions and calls
+    variants: [{
+      begin: '[\\.#:&\\[]', end: '[;{}]'  // mixin calls end with ';'
+      }, {
+      begin: INTERP_IDENT_RE + '[^;]*{',
+      end: '{'
+    }],
+    returnBegin: true,
+    returnEnd:   true,
+    illegal: '[<=\'$"]',
+    contains: [
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      MIXIN_GUARD_MODE,
+      IDENT_MODE('keyword',  'all\\b'),
+      IDENT_MODE('variable', '@{'  + IDENT_RE + '}'),     // otherwise it’s identified as tag
+      IDENT_MODE('tag',       INTERP_IDENT_RE + '%?', 0), // '%' for more consistent coloring of @keyframes "tags"
+      IDENT_MODE('id',       '#'   + INTERP_IDENT_RE),
+      IDENT_MODE('class',    '\\.' + INTERP_IDENT_RE, 0),
+      IDENT_MODE('keyword',  '&', 0),
+      FUNCT_MODE('pseudo',   ':not'),
+      FUNCT_MODE('keyword',  ':extend'),
+      IDENT_MODE('pseudo',   '::?' + INTERP_IDENT_RE),
+      {className: 'attr_selector', begin: '\\[', end: '\\]'},
+      {begin: '\\(', end: '\\)', contains: VALUE_WITH_RULESETS}, // argument list of parametric mixins
+      {begin: '!important'} // eat !important after mixin call or it will be colored as tag
+    ]
+  };
+
+  RULES.push(
+    hljs.C_LINE_COMMENT_MODE,
+    hljs.C_BLOCK_COMMENT_MODE,
+    AT_RULE_MODE,
+    VAR_RULE_MODE,
+    SELECTOR_MODE,
+    RULE_MODE
+  );
+
+  return {
+    case_insensitive: true,
+    illegal: '[=>\'/<($"]',
+    contains: RULES
+  };
+});
+
+hljs.registerLanguage('lisp', function(hljs) {
+  var LISP_IDENT_RE = '[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*';
+  var MEC_RE = '\\|[^]*?\\|';
+  var LISP_SIMPLE_NUMBER_RE = '(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?';
+  var SHEBANG = {
+    className: 'shebang',
+    begin: '^#!', end: '$'
+  };
+  var LITERAL = {
+    className: 'literal',
+    begin: '\\b(t{1}|nil)\\b'
+  };
+  var NUMBER = {
+    className: 'number',
+    variants: [
+      {begin: LISP_SIMPLE_NUMBER_RE, relevance: 0},
+      {begin: '#(b|B)[0-1]+(/[0-1]+)?'},
+      {begin: '#(o|O)[0-7]+(/[0-7]+)?'},
+      {begin: '#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?'},
+      {begin: '#(c|C)\\(' + LISP_SIMPLE_NUMBER_RE + ' +' + LISP_SIMPLE_NUMBER_RE, end: '\\)'}
+    ]
+  };
+  var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null});
+  var COMMENT = hljs.COMMENT(
+    ';', '$',
+    {
+      relevance: 0
+    }
+  );
+  var VARIABLE = {
+    className: 'variable',
+    begin: '\\*', end: '\\*'
+  };
+  var KEYWORD = {
+    className: 'keyword',
+    begin: '[:&]' + LISP_IDENT_RE
+  };
+  var IDENT = {
+    begin: LISP_IDENT_RE,
+    relevance: 0
+  };
+  var MEC = {
+    begin: MEC_RE
+  };
+  var QUOTED_LIST = {
+    begin: '\\(', end: '\\)',
+    contains: ['self', LITERAL, STRING, NUMBER, IDENT]
+  };
+  var QUOTED = {
+    className: 'quoted',
+    contains: [NUMBER, STRING, VARIABLE, KEYWORD, QUOTED_LIST, IDENT],
+    variants: [
+      {
+        begin: '[\'`]\\(', end: '\\)'
+      },
+      {
+        begin: '\\(quote ', end: '\\)',
+        keywords: 'quote'
+      },
+      {
+        begin: '\'' + MEC_RE
+      }
+    ]
+  };
+  var QUOTED_ATOM = {
+    className: 'quoted',
+    variants: [
+      {begin: '\'' + LISP_IDENT_RE},
+      {begin: '#\'' + LISP_IDENT_RE + '(::' + LISP_IDENT_RE + ')*'}
+    ]
+  };
+  var LIST = {
+    className: 'list',
+    begin: '\\(\\s*', end: '\\)'
+  };
+  var BODY = {
+    endsWithParent: true,
+    relevance: 0
+  };
+  LIST.contains = [
+    {
+      className: 'keyword',
+      variants: [
+        {begin: LISP_IDENT_RE},
+        {begin: MEC_RE}
+      ]
+    },
+    BODY
+  ];
+  BODY.contains = [QUOTED, QUOTED_ATOM, LIST, LITERAL, NUMBER, STRING, COMMENT, VARIABLE, KEYWORD, MEC, IDENT];
+
+  return {
+    illegal: /\S/,
+    contains: [
+      NUMBER,
+      SHEBANG,
+      LITERAL,
+      STRING,
+      COMMENT,
+      QUOTED,
+      QUOTED_ATOM,
+      LIST,
+      IDENT
+    ]
+  };
+});
+
+hljs.registerLanguage('livecodeserver', function(hljs) {
+  var VARIABLE = {
+    className: 'variable', begin: '\\b[gtps][A-Z]+[A-Za-z0-9_\\-]*\\b|\\$_[A-Z]+',
+    relevance: 0
+  };
+  var COMMENT_MODES = [
+    hljs.C_BLOCK_COMMENT_MODE,
+    hljs.HASH_COMMENT_MODE,
+    hljs.COMMENT('--', '$'),
+    hljs.COMMENT('[^:]//', '$')
+  ];
+  var TITLE1 = hljs.inherit(hljs.TITLE_MODE, {
+    variants: [
+      {begin: '\\b_*rig[A-Z]+[A-Za-z0-9_\\-]*'},
+      {begin: '\\b_[a-z0-9\\-]+'}
+    ]
+  });
+  var TITLE2 = hljs.inherit(hljs.TITLE_MODE, {begin: '\\b([A-Za-z0-9_\\-]+)\\b'});
+  return {
+    case_insensitive: false,
+    keywords: {
+      keyword:
+        '$_COOKIE $_FILES $_GET $_GET_BINARY $_GET_RAW $_POST $_POST_BINARY $_POST_RAW $_SESSION $_SERVER ' +
+        'codepoint codepoints segment segments codeunit codeunits sentence sentences trueWord trueWords paragraph ' +
+        'after byte bytes english the until http forever descending using line real8 with seventh ' +
+        'for stdout finally element word words fourth before black ninth sixth characters chars stderr ' +
+        'uInt1 uInt1s uInt2 uInt2s stdin string lines relative rel any fifth items from middle mid ' +
+        'at else of catch then third it file milliseconds seconds second secs sec int1 int1s int4 ' +
+        'int4s internet int2 int2s normal text item last long detailed effective uInt4 uInt4s repeat ' +
+        'end repeat URL in try into switch to words https token binfile each tenth as ticks tick ' +
+        'system real4 by dateItems without char character ascending eighth whole dateTime numeric short ' +
+        'first ftp integer abbreviated abbr abbrev private case while if',
+      constant:
+        'SIX TEN FORMFEED NINE ZERO NONE SPACE FOUR FALSE COLON CRLF PI COMMA ENDOFFILE EOF EIGHT FIVE ' +
+        'QUOTE EMPTY ONE TRUE RETURN CR LINEFEED RIGHT BACKSLASH NULL SEVEN TAB THREE TWO ' +
+        'six ten formfeed nine zero none space four false colon crlf pi comma endoffile eof eight five ' +
+        'quote empty one true return cr linefeed right backslash null seven tab three two ' +
+        'RIVERSION RISTATE FILE_READ_MODE FILE_WRITE_MODE FILE_WRITE_MODE DIR_WRITE_MODE FILE_READ_UMASK ' +
+        'FILE_WRITE_UMASK DIR_READ_UMASK DIR_WRITE_UMASK',
+      operator:
+        'div mod wrap and or bitAnd bitNot bitOr bitXor among not in a an within ' +
+        'contains ends with begins the keys of keys',
+      built_in:
+        'put abs acos aliasReference annuity arrayDecode arrayEncode asin atan atan2 average avg avgDev base64Decode ' +
+        'base64Encode baseConvert binaryDecode binaryEncode byteOffset byteToNum cachedURL cachedURLs charToNum ' +
+        'cipherNames codepointOffset codepointProperty codepointToNum codeunitOffset commandNames compound compress ' +
+        'constantNames cos date dateFormat decompress directories ' +
+        'diskSpace DNSServers exp exp1 exp2 exp10 extents files flushEvents folders format functionNames geometricMean global ' +
+        'globals hasMemory harmonicMean hostAddress hostAddressToName hostName hostNameToAddress isNumber ISOToMac itemOffset ' +
+        'keys len length libURLErrorData libUrlFormData libURLftpCommand libURLLastHTTPHeaders libURLLastRHHeaders ' +
+        'libUrlMultipartFormAddPart libUrlMultipartFormData libURLVersion lineOffset ln ln1 localNames log log2 log10 ' +
+        'longFilePath lower macToISO matchChunk matchText matrixMultiply max md5Digest median merge millisec ' +
+        'millisecs millisecond milliseconds min monthNames nativeCharToNum normalizeText num number numToByte numToChar ' +
+        'numToCodepoint numToNativeChar offset open openfiles openProcesses openProcessIDs openSockets ' +
+        'paragraphOffset paramCount param params peerAddress pendingMessages platform popStdDev populationStandardDeviation ' +
+        'populationVariance popVariance processID random randomBytes replaceText result revCreateXMLTree revCreateXMLTreeFromFile ' +
+        'revCurrentRecord revCurrentRecordIsFirst revCurrentRecordIsLast revDatabaseColumnCount revDatabaseColumnIsNull ' +
+        'revDatabaseColumnLengths revDatabaseColumnNames revDatabaseColumnNamed revDatabaseColumnNumbered ' +
+        'revDatabaseColumnTypes revDatabaseConnectResult revDatabaseCursors revDatabaseID revDatabaseTableNames ' +
+        'revDatabaseType revDataFromQuery revdb_closeCursor revdb_columnbynumber revdb_columncount revdb_columnisnull ' +
+        'revdb_columnlengths revdb_columnnames revdb_columntypes revdb_commit revdb_connect revdb_connections ' +
+        'revdb_connectionerr revdb_currentrecord revdb_cursorconnection revdb_cursorerr revdb_cursors revdb_dbtype ' +
+        'revdb_disconnect revdb_execute revdb_iseof revdb_isbof revdb_movefirst revdb_movelast revdb_movenext ' +
+        'revdb_moveprev revdb_query revdb_querylist revdb_recordcount revdb_rollback revdb_tablenames ' +
+        'revGetDatabaseDriverPath revNumberOfRecords revOpenDatabase revOpenDatabases revQueryDatabase ' +
+        'revQueryDatabaseBlob revQueryResult revQueryIsAtStart revQueryIsAtEnd revUnixFromMacPath revXMLAttribute ' +
+        'revXMLAttributes revXMLAttributeValues revXMLChildContents revXMLChildNames revXMLCreateTreeFromFileWithNamespaces ' +
+        'revXMLCreateTreeWithNamespaces revXMLDataFromXPathQuery revXMLEvaluateXPath revXMLFirstChild revXMLMatchingNode ' +
+        'revXMLNextSibling revXMLNodeContents revXMLNumberOfChildren revXMLParent revXMLPreviousSibling ' +
+        'revXMLRootNode revXMLRPC_CreateRequest revXMLRPC_Documents revXMLRPC_Error ' +
+        'revXMLRPC_GetHost revXMLRPC_GetMethod revXMLRPC_GetParam revXMLText revXMLRPC_Execute ' +
+        'revXMLRPC_GetParamCount revXMLRPC_GetParamNode revXMLRPC_GetParamType revXMLRPC_GetPath revXMLRPC_GetPort ' +
+        'revXMLRPC_GetProtocol revXMLRPC_GetRequest revXMLRPC_GetResponse revXMLRPC_GetSocket revXMLTree ' +
+        'revXMLTrees revXMLValidateDTD revZipDescribeItem revZipEnumerateItems revZipOpenArchives round sampVariance ' +
+        'sec secs seconds sentenceOffset sha1Digest shell shortFilePath sin specialFolderPath sqrt standardDeviation statRound ' +
+        'stdDev sum sysError systemVersion tan tempName textDecode textEncode tick ticks time to tokenOffset toLower toUpper ' +
+        'transpose truewordOffset trunc uniDecode uniEncode upper URLDecode URLEncode URLStatus uuid value variableNames ' +
+        'variance version waitDepth weekdayNames wordOffset xsltApplyStylesheet xsltApplyStylesheetFromFile xsltLoadStylesheet ' +
+        'xsltLoadStylesheetFromFile add breakpoint cancel clear local variable file word line folder directory URL close socket process ' +
+        'combine constant convert create new alias folder directory decrypt delete variable word line folder ' +
+        'directory URL dispatch divide do encrypt filter get include intersect kill libURLDownloadToFile ' +
+        'libURLFollowHttpRedirects libURLftpUpload libURLftpUploadFile libURLresetAll libUrlSetAuthCallback ' +
+        'libURLSetCustomHTTPHeaders libUrlSetExpect100 libURLSetFTPListCommand libURLSetFTPMode libURLSetFTPStopTime ' +
+        'libURLSetStatusCallback load multiply socket prepare process post seek rel relative read from process rename ' +
+        'replace require resetAll resolve revAddXMLNode revAppendXML revCloseCursor revCloseDatabase revCommitDatabase ' +
+        'revCopyFile revCopyFolder revCopyXMLNode revDeleteFolder revDeleteXMLNode revDeleteAllXMLTrees ' +
+        'revDeleteXMLTree revExecuteSQL revGoURL revInsertXMLNode revMoveFolder revMoveToFirstRecord revMoveToLastRecord ' +
+        'revMoveToNextRecord revMoveToPreviousRecord revMoveToRecord revMoveXMLNode revPutIntoXMLNode revRollBackDatabase ' +
+        'revSetDatabaseDriverPath revSetXMLAttribute revXMLRPC_AddParam revXMLRPC_DeleteAllDocuments revXMLAddDTD ' +
+        'revXMLRPC_Free revXMLRPC_FreeAll revXMLRPC_DeleteDocument revXMLRPC_DeleteParam revXMLRPC_SetHost ' +
+        'revXMLRPC_SetMethod revXMLRPC_SetPort revXMLRPC_SetProtocol revXMLRPC_SetSocket revZipAddItemWithData ' +
+        'revZipAddItemWithFile revZipAddUncompressedItemWithData revZipAddUncompressedItemWithFile revZipCancel ' +
+        'revZipCloseArchive revZipDeleteItem revZipExtractItemToFile revZipExtractItemToVariable revZipSetProgressCallback ' +
+        'revZipRenameItem revZipReplaceItemWithData revZipReplaceItemWithFile revZipOpenArchive send set sort split start stop ' +
+        'subtract union unload wait write'
+    },
+    contains: [
+      VARIABLE,
+      {
+        className: 'keyword',
+        begin: '\\bend\\sif\\b'
+      },
+      {
+        className: 'function',
+        beginKeywords: 'function', end: '$',
+        contains: [
+          VARIABLE,
+          TITLE2,
+          hljs.APOS_STRING_MODE,
+          hljs.QUOTE_STRING_MODE,
+          hljs.BINARY_NUMBER_MODE,
+          hljs.C_NUMBER_MODE,
+          TITLE1
+        ]
+      },
+      {
+        className: 'function',
+        begin: '\\bend\\s+', end: '$',
+        keywords: 'end',
+        contains: [
+          TITLE2,
+          TITLE1
+        ]
+      },
+      {
+        className: 'command',
+        beginKeywords: 'command on', end: '$',
+        contains: [
+          VARIABLE,
+          TITLE2,
+          hljs.APOS_STRING_MODE,
+          hljs.QUOTE_STRING_MODE,
+          hljs.BINARY_NUMBER_MODE,
+          hljs.C_NUMBER_MODE,
+          TITLE1
+        ]
+      },
+      {
+        className: 'preprocessor',
+        variants: [
+          {
+            begin: '<\\?(rev|lc|livecode)',
+            relevance: 10
+          },
+          { begin: '<\\?' },
+          { begin: '\\?>' }
+        ]
+      },
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      hljs.BINARY_NUMBER_MODE,
+      hljs.C_NUMBER_MODE,
+      TITLE1
+    ].concat(COMMENT_MODES),
+    illegal: ';$|^\\[|^='
+  };
+});
+
+hljs.registerLanguage('livescript', function(hljs) {
+  var KEYWORDS = {
+    keyword:
+      // JS keywords
+      'in if for while finally new do return else break catch instanceof throw try this ' +
+      'switch continue typeof delete debugger case default function var with ' +
+      // LiveScript keywords
+      'then unless until loop of by when and or is isnt not it that otherwise from to til fallthrough super ' +
+      'case default function var void const let enum export import native ' +
+      '__hasProp __extends __slice __bind __indexOf',
+    literal:
+      // JS literals
+      'true false null undefined ' +
+      // LiveScript literals
+      'yes no on off it that void',
+    built_in:
+      'npm require console print module global window document'
+  };
+  var JS_IDENT_RE = '[A-Za-z$_](?:\-[0-9A-Za-z$_]|[0-9A-Za-z$_])*';
+  var TITLE = hljs.inherit(hljs.TITLE_MODE, {begin: JS_IDENT_RE});
+  var SUBST = {
+    className: 'subst',
+    begin: /#\{/, end: /}/,
+    keywords: KEYWORDS
+  };
+  var SUBST_SIMPLE = {
+    className: 'subst',
+    begin: /#[A-Za-z$_]/, end: /(?:\-[0-9A-Za-z$_]|[0-9A-Za-z$_])*/,
+    keywords: KEYWORDS
+  };
+  var EXPRESSIONS = [
+    hljs.BINARY_NUMBER_MODE,
+    {
+      className: 'number',
+      begin: '(\\b0[xX][a-fA-F0-9_]+)|(\\b\\d(\\d|_\\d)*(\\.(\\d(\\d|_\\d)*)?)?(_*[eE]([-+]\\d(_\\d|\\d)*)?)?[_a-z]*)',
+      relevance: 0,
+      starts: {end: '(\\s*/)?', relevance: 0} // a number tries to eat the following slash to prevent treating it as a regexp
+    },
+    {
+      className: 'string',
+      variants: [
+        {
+          begin: /'''/, end: /'''/,
+          contains: [hljs.BACKSLASH_ESCAPE]
+        },
+        {
+          begin: /'/, end: /'/,
+          contains: [hljs.BACKSLASH_ESCAPE]
+        },
+        {
+          begin: /"""/, end: /"""/,
+          contains: [hljs.BACKSLASH_ESCAPE, SUBST, SUBST_SIMPLE]
+        },
+        {
+          begin: /"/, end: /"/,
+          contains: [hljs.BACKSLASH_ESCAPE, SUBST, SUBST_SIMPLE]
+        },
+        {
+          begin: /\\/, end: /(\s|$)/,
+          excludeEnd: true
+        }
+      ]
+    },
+    {
+      className: 'pi',
+      variants: [
+        {
+          begin: '//', end: '//[gim]*',
+          contains: [SUBST, hljs.HASH_COMMENT_MODE]
+        },
+        {
+          // regex can't start with space to parse x / 2 / 3 as two divisions
+          // regex can't start with *, and it supports an "illegal" in the main mode
+          begin: /\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/
+        }
+      ]
+    },
+    {
+      className: 'property',
+      begin: '@' + JS_IDENT_RE
+    },
+    {
+      begin: '``', end: '``',
+      excludeBegin: true, excludeEnd: true,
+      subLanguage: 'javascript'
+    }
+  ];
+  SUBST.contains = EXPRESSIONS;
+
+  var PARAMS = {
+    className: 'params',
+    begin: '\\(', returnBegin: true,
+    /* We need another contained nameless mode to not have every nested
+    pair of parens to be called "params" */
+    contains: [
+      {
+        begin: /\(/, end: /\)/,
+        keywords: KEYWORDS,
+        contains: ['self'].concat(EXPRESSIONS)
+      }
+    ]
+  };
+
+  return {
+    aliases: ['ls'],
+    keywords: KEYWORDS,
+    illegal: /\/\*/,
+    contains: EXPRESSIONS.concat([
+      hljs.COMMENT('\\/\\*', '\\*\\/'),
+      hljs.HASH_COMMENT_MODE,
+      {
+        className: 'function',
+        contains: [TITLE, PARAMS],
+        returnBegin: true,
+        variants: [
+          {
+            begin: '(' + JS_IDENT_RE + '\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B\\->\\*?', end: '\\->\\*?'
+          },
+          {
+            begin: '(' + JS_IDENT_RE + '\\s*(?:=|:=)\\s*)?!?(\\(.*\\))?\\s*\\B[-~]{1,2}>\\*?', end: '[-~]{1,2}>\\*?'
+          },
+          {
+            begin: '(' + JS_IDENT_RE + '\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B!?[-~]{1,2}>\\*?', end: '!?[-~]{1,2}>\\*?'
+          }
+        ]
+      },
+      {
+        className: 'class',
+        beginKeywords: 'class',
+        end: '$',
+        illegal: /[:="\[\]]/,
+        contains: [
+          {
+            beginKeywords: 'extends',
+            endsWithParent: true,
+            illegal: /[:="\[\]]/,
+            contains: [TITLE]
+          },
+          TITLE
+        ]
+      },
+      {
+        className: 'attribute',
+        begin: JS_IDENT_RE + ':', end: ':',
+        returnBegin: true, returnEnd: true,
+        relevance: 0
+      }
+    ])
+  };
+});
+
+hljs.registerLanguage('lua', function(hljs) {
+  var OPENING_LONG_BRACKET = '\\[=*\\[';
+  var CLOSING_LONG_BRACKET = '\\]=*\\]';
+  var LONG_BRACKETS = {
+    begin: OPENING_LONG_BRACKET, end: CLOSING_LONG_BRACKET,
+    contains: ['self']
+  };
+  var COMMENTS = [
+    hljs.COMMENT('--(?!' + OPENING_LONG_BRACKET + ')', '$'),
+    hljs.COMMENT(
+      '--' + OPENING_LONG_BRACKET,
+      CLOSING_LONG_BRACKET,
+      {
+        contains: [LONG_BRACKETS],
+        relevance: 10
+      }
+    )
+  ];
+  return {
+    lexemes: hljs.UNDERSCORE_IDENT_RE,
+    keywords: {
+      keyword:
+        'and break do else elseif end false for if in local nil not or repeat return then ' +
+        'true until while',
+      built_in:
+        '_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load ' +
+        'loadfile loadstring module next pairs pcall print rawequal rawget rawset require ' +
+        'select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug ' +
+        'io math os package string table'
+    },
+    contains: COMMENTS.concat([
+      {
+        className: 'function',
+        beginKeywords: 'function', end: '\\)',
+        contains: [
+          hljs.inherit(hljs.TITLE_MODE, {begin: '([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*'}),
+          {
+            className: 'params',
+            begin: '\\(', endsWithParent: true,
+            contains: COMMENTS
+          }
+        ].concat(COMMENTS)
+      },
+      hljs.C_NUMBER_MODE,
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      {
+        className: 'string',
+        begin: OPENING_LONG_BRACKET, end: CLOSING_LONG_BRACKET,
+        contains: [LONG_BRACKETS],
+        relevance: 5
+      }
+    ])
+  };
+});
+
+hljs.registerLanguage('makefile', function(hljs) {
+  var VARIABLE = {
+    className: 'variable',
+    begin: /\$\(/, end: /\)/,
+    contains: [hljs.BACKSLASH_ESCAPE]
+  };
+  return {
+    aliases: ['mk', 'mak'],
+    contains: [
+      hljs.HASH_COMMENT_MODE,
+      {
+        begin: /^\w+\s*\W*=/, returnBegin: true,
+        relevance: 0,
+        starts: {
+          className: 'constant',
+          end: /\s*\W*=/, excludeEnd: true,
+          starts: {
+            end: /$/,
+            relevance: 0,
+            contains: [
+              VARIABLE
+            ]
+          }
+        }
+      },
+      {
+        className: 'title',
+        begin: /^[\w]+:\s*$/
+      },
+      {
+        className: 'phony',
+        begin: /^\.PHONY:/, end: /$/,
+        keywords: '.PHONY', lexemes: /[\.\w]+/
+      },
+      {
+        begin: /^\t+/, end: /$/,
+        relevance: 0,
+        contains: [
+          hljs.QUOTE_STRING_MODE,
+          VARIABLE
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('mathematica', function(hljs) {
+  return {
+    aliases: ['mma'],
+    lexemes: '(\\$|\\b)' + hljs.IDENT_RE + '\\b',
+    keywords: 'AbelianGroup Abort AbortKernels AbortProtect Above Abs Absolute AbsoluteCorrelation AbsoluteCorrelationFunction AbsoluteCurrentValue AbsoluteDashing AbsoluteFileName AbsoluteOptions AbsolutePointSize AbsoluteThickness AbsoluteTime AbsoluteTiming AccountingForm Accumulate Accuracy AccuracyGoal ActionDelay ActionMenu ActionMenuBox ActionMenuBoxOptions Active ActiveItem ActiveStyle AcyclicGraphQ AddOnHelpPath AddTo AdjacencyGraph AdjacencyList AdjacencyMatrix AdjustmentBox AdjustmentBoxOptions AdjustTimeSeriesForecast AffineTransform After AiryAi AiryAiPrime AiryAiZero AiryBi AiryBiPrime AiryBiZero AlgebraicIntegerQ AlgebraicNumber AlgebraicNumberDenominator AlgebraicNumberNorm AlgebraicNumberPolynomial AlgebraicNumberTrace AlgebraicRules AlgebraicRulesData Algebraics AlgebraicUnitQ Alignment AlignmentMarker AlignmentPoint All AllowedDimensions AllowGroupClose AllowInlineCells AllowKernelInitialization AllowReverseGroupClose AllowScriptLevelChange AlphaChannel AlternatingGroup AlternativeHypothesis Alternatives AmbientLight Analytic AnchoredSearch And AndersonDarlingTest AngerJ AngleBracket AngularGauge Animate AnimationCycleOffset AnimationCycleRepetitions AnimationDirection AnimationDisplayTime AnimationRate AnimationRepetitions AnimationRunning Animator AnimatorBox AnimatorBoxOptions AnimatorElements Annotation Annuity AnnuityDue Antialiasing Antisymmetric Apart ApartSquareFree Appearance AppearanceElements AppellF1 Append AppendTo Apply ArcCos ArcCosh ArcCot ArcCoth ArcCsc ArcCsch ArcSec ArcSech ArcSin ArcSinDistribution ArcSinh ArcTan ArcTanh Arg ArgMax ArgMin ArgumentCountQ ARIMAProcess ArithmeticGeometricMean ARMAProcess ARProcess Array ArrayComponents ArrayDepth ArrayFlatten ArrayPad ArrayPlot ArrayQ ArrayReshape ArrayRules Arrays Arrow Arrow3DBox ArrowBox Arrowheads AspectRatio AspectRatioFixed Assert Assuming Assumptions AstronomicalData Asynchronous AsynchronousTaskObject AsynchronousTasks AtomQ Attributes AugmentedSymmetricPolynomial AutoAction AutoDelete AutoEvaluateEvents AutoGeneratedPackage AutoIndent AutoIndentSpacings AutoItalicWords AutoloadPath AutoMatch Automatic AutomaticImageSize AutoMultiplicationSymbol AutoNumberFormatting AutoOpenNotebooks AutoOpenPalettes AutorunSequencing AutoScaling AutoScroll AutoSpacing AutoStyleOptions AutoStyleWords Axes AxesEdge AxesLabel AxesOrigin AxesStyle Axis ' +
+      'BabyMonsterGroupB Back Background BackgroundTasksSettings Backslash Backsubstitution Backward Band BandpassFilter BandstopFilter BarabasiAlbertGraphDistribution BarChart BarChart3D BarLegend BarlowProschanImportance BarnesG BarOrigin BarSpacing BartlettHannWindow BartlettWindow BaseForm Baseline BaselinePosition BaseStyle BatesDistribution BattleLemarieWavelet Because BeckmannDistribution Beep Before Begin BeginDialogPacket BeginFrontEndInteractionPacket BeginPackage BellB BellY Below BenfordDistribution BeniniDistribution BenktanderGibratDistribution BenktanderWeibullDistribution BernoulliB BernoulliDistribution BernoulliGraphDistribution BernoulliProcess BernsteinBasis BesselFilterModel BesselI BesselJ BesselJZero BesselK BesselY BesselYZero Beta BetaBinomialDistribution BetaDistribution BetaNegativeBinomialDistribution BetaPrimeDistribution BetaRegularized BetweennessCentrality BezierCurve BezierCurve3DBox BezierCurve3DBoxOptions BezierCurveBox BezierCurveBoxOptions BezierFunction BilateralFilter Binarize BinaryFormat BinaryImageQ BinaryRead BinaryReadList BinaryWrite BinCounts BinLists Binomial BinomialDistribution BinomialProcess BinormalDistribution BiorthogonalSplineWavelet BipartiteGraphQ BirnbaumImportance BirnbaumSaundersDistribution BitAnd BitClear BitGet BitLength BitNot BitOr BitSet BitShiftLeft BitShiftRight BitXor Black BlackmanHarrisWindow BlackmanNuttallWindow BlackmanWindow Blank BlankForm BlankNullSequence BlankSequence Blend Block BlockRandom BlomqvistBeta BlomqvistBetaTest Blue Blur BodePlot BohmanWindow Bold Bookmarks Boole BooleanConsecutiveFunction BooleanConvert BooleanCountingFunction BooleanFunction BooleanGraph BooleanMaxterms BooleanMinimize BooleanMinterms Booleans BooleanTable BooleanVariables BorderDimensions BorelTannerDistribution Bottom BottomHatTransform BoundaryStyle Bounds Box BoxBaselineShift BoxData BoxDimensions Boxed Boxes BoxForm BoxFormFormatTypes BoxFrame BoxID BoxMargins BoxMatrix BoxRatios BoxRotation BoxRotationPoint BoxStyle BoxWhiskerChart Bra BracketingBar BraKet BrayCurtisDistance BreadthFirstScan Break Brown BrownForsytheTest BrownianBridgeProcess BrowserCategory BSplineBasis BSplineCurve BSplineCurve3DBox BSplineCurveBox BSplineCurveBoxOptions BSplineFunction BSplineSurface BSplineSurface3DBox BubbleChart BubbleChart3D BubbleScale BubbleSizes BulletGauge BusinessDayQ ButterflyGraph ButterworthFilterModel Button ButtonBar ButtonBox ButtonBoxOptions ButtonCell ButtonContents ButtonData ButtonEvaluator ButtonExpandable ButtonFrame ButtonFunction ButtonMargins ButtonMinHeight ButtonNote ButtonNotebook ButtonSource ButtonStyle ButtonStyleMenuListing Byte ByteCount ByteOrdering ' +
+      'C CachedValue CacheGraphics CalendarData CalendarType CallPacket CanberraDistance Cancel CancelButton CandlestickChart Cap CapForm CapitalDifferentialD CardinalBSplineBasis CarmichaelLambda Cases Cashflow Casoratian Catalan CatalanNumber Catch CauchyDistribution CauchyWindow CayleyGraph CDF CDFDeploy CDFInformation CDFWavelet Ceiling Cell CellAutoOverwrite CellBaseline CellBoundingBox CellBracketOptions CellChangeTimes CellContents CellContext CellDingbat CellDynamicExpression CellEditDuplicate CellElementsBoundingBox CellElementSpacings CellEpilog CellEvaluationDuplicate CellEvaluationFunction CellEventActions CellFrame CellFrameColor CellFrameLabelMargins CellFrameLabels CellFrameMargins CellGroup CellGroupData CellGrouping CellGroupingRules CellHorizontalScrolling CellID CellLabel CellLabelAutoDelete CellLabelMargins CellLabelPositioning CellMargins CellObject CellOpen CellPrint CellProlog Cells CellSize CellStyle CellTags CellularAutomaton CensoredDistribution Censoring Center CenterDot CentralMoment CentralMomentGeneratingFunction CForm ChampernowneNumber ChanVeseBinarize Character CharacterEncoding CharacterEncodingsPath CharacteristicFunction CharacteristicPolynomial CharacterRange Characters ChartBaseStyle ChartElementData ChartElementDataFunction ChartElementFunction ChartElements ChartLabels ChartLayout ChartLegends ChartStyle Chebyshev1FilterModel Chebyshev2FilterModel ChebyshevDistance ChebyshevT ChebyshevU Check CheckAbort CheckAll Checkbox CheckboxBar CheckboxBox CheckboxBoxOptions ChemicalData ChessboardDistance ChiDistribution ChineseRemainder ChiSquareDistribution ChoiceButtons ChoiceDialog CholeskyDecomposition Chop Circle CircleBox CircleDot CircleMinus CirclePlus CircleTimes CirculantGraph CityData Clear ClearAll ClearAttributes ClearSystemCache ClebschGordan ClickPane Clip ClipboardNotebook ClipFill ClippingStyle ClipPlanes ClipRange Clock ClockGauge ClockwiseContourIntegral Close Closed CloseKernels ClosenessCentrality Closing ClosingAutoSave ClosingEvent ClusteringComponents CMYKColor Coarse Coefficient CoefficientArrays CoefficientDomain CoefficientList CoefficientRules CoifletWavelet Collect Colon ColonForm ColorCombine ColorConvert ColorData ColorDataFunction ColorFunction ColorFunctionScaling Colorize ColorNegate ColorOutput ColorProfileData ColorQuantize ColorReplace ColorRules ColorSelectorSettings ColorSeparate ColorSetter ColorSetterBox ColorSetterBoxOptions ColorSlider ColorSpace Column ColumnAlignments ColumnBackgrounds ColumnForm ColumnLines ColumnsEqual ColumnSpacings ColumnWidths CommonDefaultFormatTypes Commonest CommonestFilter CommonUnits CommunityBoundaryStyle CommunityGraphPlot CommunityLabels CommunityRegionStyle CompatibleUnitQ CompilationOptions CompilationTarget Compile Compiled CompiledFunction Complement CompleteGraph CompleteGraphQ CompleteKaryTree CompletionsListPacket Complex Complexes ComplexExpand ComplexInfinity ComplexityFunction ComponentMeasurements ' +
+      'ComponentwiseContextMenu Compose ComposeList ComposeSeries Composition CompoundExpression CompoundPoissonDistribution CompoundPoissonProcess CompoundRenewalProcess Compress CompressedData Condition ConditionalExpression Conditioned Cone ConeBox ConfidenceLevel ConfidenceRange ConfidenceTransform ConfigurationPath Congruent Conjugate ConjugateTranspose Conjunction Connect ConnectedComponents ConnectedGraphQ ConnesWindow ConoverTest ConsoleMessage ConsoleMessagePacket ConsolePrint Constant ConstantArray Constants ConstrainedMax ConstrainedMin ContentPadding ContentsBoundingBox ContentSelectable ContentSize Context ContextMenu Contexts ContextToFilename ContextToFileName Continuation Continue ContinuedFraction ContinuedFractionK ContinuousAction ContinuousMarkovProcess ContinuousTimeModelQ ContinuousWaveletData ContinuousWaveletTransform ContourDetect ContourGraphics ContourIntegral ContourLabels ContourLines ContourPlot ContourPlot3D Contours ContourShading ContourSmoothing ContourStyle ContraharmonicMean Control ControlActive ControlAlignment ControllabilityGramian ControllabilityMatrix ControllableDecomposition ControllableModelQ ControllerDuration ControllerInformation ControllerInformationData ControllerLinking ControllerManipulate ControllerMethod ControllerPath ControllerState ControlPlacement ControlsRendering ControlType Convergents ConversionOptions ConversionRules ConvertToBitmapPacket ConvertToPostScript ConvertToPostScriptPacket Convolve ConwayGroupCo1 ConwayGroupCo2 ConwayGroupCo3 CoordinateChartData CoordinatesToolOptions CoordinateTransform CoordinateTransformData CoprimeQ Coproduct CopulaDistribution Copyable CopyDirectory CopyFile CopyTag CopyToClipboard CornerFilter CornerNeighbors Correlation CorrelationDistance CorrelationFunction CorrelationTest Cos Cosh CoshIntegral CosineDistance CosineWindow CosIntegral Cot Coth Count CounterAssignments CounterBox CounterBoxOptions CounterClockwiseContourIntegral CounterEvaluator CounterFunction CounterIncrements CounterStyle CounterStyleMenuListing CountRoots CountryData Covariance CovarianceEstimatorFunction CovarianceFunction CoxianDistribution CoxIngersollRossProcess CoxModel CoxModelFit CramerVonMisesTest CreateArchive CreateDialog CreateDirectory CreateDocument CreateIntermediateDirectories CreatePalette CreatePalettePacket CreateScheduledTask CreateTemporary CreateWindow CriticalityFailureImportance CriticalitySuccessImportance CriticalSection Cross CrossingDetect CrossMatrix Csc Csch CubeRoot Cubics Cuboid CuboidBox Cumulant CumulantGeneratingFunction Cup CupCap Curl CurlyDoubleQuote CurlyQuote CurrentImage CurrentlySpeakingPacket CurrentValue CurvatureFlowFilter CurveClosed Cyan CycleGraph CycleIndexPolynomial Cycles CyclicGroup Cyclotomic Cylinder CylinderBox CylindricalDecomposition ' +
+      'D DagumDistribution DamerauLevenshteinDistance DampingFactor Darker Dashed Dashing DataCompression DataDistribution DataRange DataReversed Date DateDelimiters DateDifference DateFunction DateList DateListLogPlot DateListPlot DatePattern DatePlus DateRange DateString DateTicksFormat DaubechiesWavelet DavisDistribution DawsonF DayCount DayCountConvention DayMatchQ DayName DayPlus DayRange DayRound DeBruijnGraph Debug DebugTag Decimal DeclareKnownSymbols DeclarePackage Decompose Decrement DedekindEta Default DefaultAxesStyle DefaultBaseStyle DefaultBoxStyle DefaultButton DefaultColor DefaultControlPlacement DefaultDuplicateCellStyle DefaultDuration DefaultElement DefaultFaceGridsStyle DefaultFieldHintStyle DefaultFont DefaultFontProperties DefaultFormatType DefaultFormatTypeForStyle DefaultFrameStyle DefaultFrameTicksStyle DefaultGridLinesStyle DefaultInlineFormatType DefaultInputFormatType DefaultLabelStyle DefaultMenuStyle DefaultNaturalLanguage DefaultNewCellStyle DefaultNewInlineCellStyle DefaultNotebook DefaultOptions DefaultOutputFormatType DefaultStyle DefaultStyleDefinitions DefaultTextFormatType DefaultTextInlineFormatType DefaultTicksStyle DefaultTooltipStyle DefaultValues Defer DefineExternal DefineInputStreamMethod DefineOutputStreamMethod Definition Degree DegreeCentrality DegreeGraphDistribution DegreeLexicographic DegreeReverseLexicographic Deinitialization Del Deletable Delete DeleteBorderComponents DeleteCases DeleteContents DeleteDirectory DeleteDuplicates DeleteFile DeleteSmallComponents DeleteWithContents DeletionWarning Delimiter DelimiterFlashTime DelimiterMatching Delimiters Denominator DensityGraphics DensityHistogram DensityPlot DependentVariables Deploy Deployed Depth DepthFirstScan Derivative DerivativeFilter DescriptorStateSpace DesignMatrix Det DGaussianWavelet DiacriticalPositioning Diagonal DiagonalMatrix Dialog DialogIndent DialogInput DialogLevel DialogNotebook DialogProlog DialogReturn DialogSymbols Diamond DiamondMatrix DiceDissimilarity DictionaryLookup DifferenceDelta DifferenceOrder DifferenceRoot DifferenceRootReduce Differences DifferentialD DifferentialRoot DifferentialRootReduce DifferentiatorFilter DigitBlock DigitBlockMinimum DigitCharacter DigitCount DigitQ DihedralGroup Dilation Dimensions DiracComb DiracDelta DirectedEdge DirectedEdges DirectedGraph DirectedGraphQ DirectedInfinity Direction Directive Directory DirectoryName DirectoryQ DirectoryStack DirichletCharacter DirichletConvolve DirichletDistribution DirichletL DirichletTransform DirichletWindow DisableConsolePrintPacket DiscreteChirpZTransform DiscreteConvolve DiscreteDelta DiscreteHadamardTransform DiscreteIndicator DiscreteLQEstimatorGains DiscreteLQRegulatorGains DiscreteLyapunovSolve DiscreteMarkovProcess DiscretePlot DiscretePlot3D DiscreteRatio DiscreteRiccatiSolve DiscreteShift DiscreteTimeModelQ DiscreteUniformDistribution DiscreteVariables DiscreteWaveletData DiscreteWaveletPacketTransform ' +
+      'DiscreteWaveletTransform Discriminant Disjunction Disk DiskBox DiskMatrix Dispatch DispersionEstimatorFunction Display DisplayAllSteps DisplayEndPacket DisplayFlushImagePacket DisplayForm DisplayFunction DisplayPacket DisplayRules DisplaySetSizePacket DisplayString DisplayTemporary DisplayWith DisplayWithRef DisplayWithVariable DistanceFunction DistanceTransform Distribute Distributed DistributedContexts DistributeDefinitions DistributionChart DistributionDomain DistributionFitTest DistributionParameterAssumptions DistributionParameterQ Dithering Div Divergence Divide DivideBy Dividers Divisible Divisors DivisorSigma DivisorSum DMSList DMSString Do DockedCells DocumentNotebook DominantColors DOSTextFormat Dot DotDashed DotEqual Dotted DoubleBracketingBar DoubleContourIntegral DoubleDownArrow DoubleLeftArrow DoubleLeftRightArrow DoubleLeftTee DoubleLongLeftArrow DoubleLongLeftRightArrow DoubleLongRightArrow DoubleRightArrow DoubleRightTee DoubleUpArrow DoubleUpDownArrow DoubleVerticalBar DoublyInfinite Down DownArrow DownArrowBar DownArrowUpArrow DownLeftRightVector DownLeftTeeVector DownLeftVector DownLeftVectorBar DownRightTeeVector DownRightVector DownRightVectorBar Downsample DownTee DownTeeArrow DownValues DragAndDrop DrawEdges DrawFrontFaces DrawHighlighted Drop DSolve Dt DualLinearProgramming DualSystemsModel DumpGet DumpSave DuplicateFreeQ Dynamic DynamicBox DynamicBoxOptions DynamicEvaluationTimeout DynamicLocation DynamicModule DynamicModuleBox DynamicModuleBoxOptions DynamicModuleParent DynamicModuleValues DynamicName DynamicNamespace DynamicReference DynamicSetting DynamicUpdating DynamicWrapper DynamicWrapperBox DynamicWrapperBoxOptions ' +
+      'E EccentricityCentrality EdgeAdd EdgeBetweennessCentrality EdgeCapacity EdgeCapForm EdgeColor EdgeConnectivity EdgeCost EdgeCount EdgeCoverQ EdgeDashing EdgeDelete EdgeDetect EdgeForm EdgeIndex EdgeJoinForm EdgeLabeling EdgeLabels EdgeLabelStyle EdgeList EdgeOpacity EdgeQ EdgeRenderingFunction EdgeRules EdgeShapeFunction EdgeStyle EdgeThickness EdgeWeight Editable EditButtonSettings EditCellTagsSettings EditDistance EffectiveInterest Eigensystem Eigenvalues EigenvectorCentrality Eigenvectors Element ElementData Eliminate EliminationOrder EllipticE EllipticExp EllipticExpPrime EllipticF EllipticFilterModel EllipticK EllipticLog EllipticNomeQ EllipticPi EllipticReducedHalfPeriods EllipticTheta EllipticThetaPrime EmitSound EmphasizeSyntaxErrors EmpiricalDistribution Empty EmptyGraphQ EnableConsolePrintPacket Enabled Encode End EndAdd EndDialogPacket EndFrontEndInteractionPacket EndOfFile EndOfLine EndOfString EndPackage EngineeringForm Enter EnterExpressionPacket EnterTextPacket Entropy EntropyFilter Environment Epilog Equal EqualColumns EqualRows EqualTilde EquatedTo Equilibrium EquirippleFilterKernel Equivalent Erf Erfc Erfi ErlangB ErlangC ErlangDistribution Erosion ErrorBox ErrorBoxOptions ErrorNorm ErrorPacket ErrorsDialogSettings EstimatedDistribution EstimatedProcess EstimatorGains EstimatorRegulator EuclideanDistance EulerE EulerGamma EulerianGraphQ EulerPhi Evaluatable Evaluate Evaluated EvaluatePacket EvaluationCell EvaluationCompletionAction EvaluationElements EvaluationMode EvaluationMonitor EvaluationNotebook EvaluationObject EvaluationOrder Evaluator EvaluatorNames EvenQ EventData EventEvaluator EventHandler EventHandlerTag EventLabels ExactBlackmanWindow ExactNumberQ ExactRootIsolation ExampleData Except ExcludedForms ExcludePods Exclusions ExclusionsStyle Exists Exit ExitDialog Exp Expand ExpandAll ExpandDenominator ExpandFileName ExpandNumerator Expectation ExpectationE ExpectedValue ExpGammaDistribution ExpIntegralE ExpIntegralEi Exponent ExponentFunction ExponentialDistribution ExponentialFamily ExponentialGeneratingFunction ExponentialMovingAverage ExponentialPowerDistribution ExponentPosition ExponentStep Export ExportAutoReplacements ExportPacket ExportString Expression ExpressionCell ExpressionPacket ExpToTrig ExtendedGCD Extension ExtentElementFunction ExtentMarkers ExtentSize ExternalCall ExternalDataCharacterEncoding Extract ExtractArchive ExtremeValueDistribution ' +
+      'FaceForm FaceGrids FaceGridsStyle Factor FactorComplete Factorial Factorial2 FactorialMoment FactorialMomentGeneratingFunction FactorialPower FactorInteger FactorList FactorSquareFree FactorSquareFreeList FactorTerms FactorTermsList Fail FailureDistribution False FARIMAProcess FEDisableConsolePrintPacket FeedbackSector FeedbackSectorStyle FeedbackType FEEnableConsolePrintPacket Fibonacci FieldHint FieldHintStyle FieldMasked FieldSize File FileBaseName FileByteCount FileDate FileExistsQ FileExtension FileFormat FileHash FileInformation FileName FileNameDepth FileNameDialogSettings FileNameDrop FileNameJoin FileNames FileNameSetter FileNameSplit FileNameTake FilePrint FileType FilledCurve FilledCurveBox Filling FillingStyle FillingTransform FilterRules FinancialBond FinancialData FinancialDerivative FinancialIndicator Find FindArgMax FindArgMin FindClique FindClusters FindCurvePath FindDistributionParameters FindDivisions FindEdgeCover FindEdgeCut FindEulerianCycle FindFaces FindFile FindFit FindGeneratingFunction FindGeoLocation FindGeometricTransform FindGraphCommunities FindGraphIsomorphism FindGraphPartition FindHamiltonianCycle FindIndependentEdgeSet FindIndependentVertexSet FindInstance FindIntegerNullVector FindKClan FindKClique FindKClub FindKPlex FindLibrary FindLinearRecurrence FindList FindMaximum FindMaximumFlow FindMaxValue FindMinimum FindMinimumCostFlow FindMinimumCut FindMinValue FindPermutation FindPostmanTour FindProcessParameters FindRoot FindSequenceFunction FindSettings FindShortestPath FindShortestTour FindThreshold FindVertexCover FindVertexCut Fine FinishDynamic FiniteAbelianGroupCount FiniteGroupCount FiniteGroupData First FirstPassageTimeDistribution FischerGroupFi22 FischerGroupFi23 FischerGroupFi24Prime FisherHypergeometricDistribution FisherRatioTest FisherZDistribution Fit FitAll FittedModel FixedPoint FixedPointList FlashSelection Flat Flatten FlattenAt FlatTopWindow FlipView Floor FlushPrintOutputPacket Fold FoldList Font FontColor FontFamily FontForm FontName FontOpacity FontPostScriptName FontProperties FontReencoding FontSize FontSlant FontSubstitutions FontTracking FontVariations FontWeight For ForAll Format FormatRules FormatType FormatTypeAutoConvert FormatValues FormBox FormBoxOptions FortranForm Forward ForwardBackward Fourier FourierCoefficient FourierCosCoefficient FourierCosSeries FourierCosTransform FourierDCT FourierDCTFilter FourierDCTMatrix FourierDST FourierDSTMatrix FourierMatrix FourierParameters FourierSequenceTransform FourierSeries FourierSinCoefficient FourierSinSeries FourierSinTransform FourierTransform FourierTrigSeries FractionalBrownianMotionProcess FractionalPart FractionBox FractionBoxOptions FractionLine Frame FrameBox FrameBoxOptions Framed FrameInset FrameLabel Frameless FrameMargins FrameStyle FrameTicks FrameTicksStyle FRatioDistribution FrechetDistribution FreeQ FrequencySamplingFilterKernel FresnelC FresnelS Friday FrobeniusNumber FrobeniusSolve ' +
+      'FromCharacterCode FromCoefficientRules FromContinuedFraction FromDate FromDigits FromDMS Front FrontEndDynamicExpression FrontEndEventActions FrontEndExecute FrontEndObject FrontEndResource FrontEndResourceString FrontEndStackSize FrontEndToken FrontEndTokenExecute FrontEndValueCache FrontEndVersion FrontFaceColor FrontFaceOpacity Full FullAxes FullDefinition FullForm FullGraphics FullOptions FullSimplify Function FunctionExpand FunctionInterpolation FunctionSpace FussellVeselyImportance ' +
+      'GaborFilter GaborMatrix GaborWavelet GainMargins GainPhaseMargins Gamma GammaDistribution GammaRegularized GapPenalty Gather GatherBy GaugeFaceElementFunction GaugeFaceStyle GaugeFrameElementFunction GaugeFrameSize GaugeFrameStyle GaugeLabels GaugeMarkers GaugeStyle GaussianFilter GaussianIntegers GaussianMatrix GaussianWindow GCD GegenbauerC General GeneralizedLinearModelFit GenerateConditions GeneratedCell GeneratedParameters GeneratingFunction Generic GenericCylindricalDecomposition GenomeData GenomeLookup GeodesicClosing GeodesicDilation GeodesicErosion GeodesicOpening GeoDestination GeodesyData GeoDirection GeoDistance GeoGridPosition GeometricBrownianMotionProcess GeometricDistribution GeometricMean GeometricMeanFilter GeometricTransformation GeometricTransformation3DBox GeometricTransformation3DBoxOptions GeometricTransformationBox GeometricTransformationBoxOptions GeoPosition GeoPositionENU GeoPositionXYZ GeoProjectionData GestureHandler GestureHandlerTag Get GetBoundingBoxSizePacket GetContext GetEnvironment GetFileName GetFrontEndOptionsDataPacket GetLinebreakInformationPacket GetMenusPacket GetPageBreakInformationPacket Glaisher GlobalClusteringCoefficient GlobalPreferences GlobalSession Glow GoldenRatio GompertzMakehamDistribution GoodmanKruskalGamma GoodmanKruskalGammaTest Goto Grad Gradient GradientFilter GradientOrientationFilter Graph GraphAssortativity GraphCenter GraphComplement GraphData GraphDensity GraphDiameter GraphDifference GraphDisjointUnion ' +
+      'GraphDistance GraphDistanceMatrix GraphElementData GraphEmbedding GraphHighlight GraphHighlightStyle GraphHub Graphics Graphics3D Graphics3DBox Graphics3DBoxOptions GraphicsArray GraphicsBaseline GraphicsBox GraphicsBoxOptions GraphicsColor GraphicsColumn GraphicsComplex GraphicsComplex3DBox GraphicsComplex3DBoxOptions GraphicsComplexBox GraphicsComplexBoxOptions GraphicsContents GraphicsData GraphicsGrid GraphicsGridBox GraphicsGroup GraphicsGroup3DBox GraphicsGroup3DBoxOptions GraphicsGroupBox GraphicsGroupBoxOptions GraphicsGrouping GraphicsHighlightColor GraphicsRow GraphicsSpacing GraphicsStyle GraphIntersection GraphLayout GraphLinkEfficiency GraphPeriphery GraphPlot GraphPlot3D GraphPower GraphPropertyDistribution GraphQ GraphRadius GraphReciprocity GraphRoot GraphStyle GraphUnion Gray GrayLevel GreatCircleDistance Greater GreaterEqual GreaterEqualLess GreaterFullEqual GreaterGreater GreaterLess GreaterSlantEqual GreaterTilde Green Grid GridBaseline GridBox GridBoxAlignment GridBoxBackground GridBoxDividers GridBoxFrame GridBoxItemSize GridBoxItemStyle GridBoxOptions GridBoxSpacings GridCreationSettings GridDefaultElement GridElementStyleOptions GridFrame GridFrameMargins GridGraph GridLines GridLinesStyle GroebnerBasis GroupActionBase GroupCentralizer GroupElementFromWord GroupElementPosition GroupElementQ GroupElements GroupElementToWord GroupGenerators GroupMultiplicationTable GroupOrbits GroupOrder GroupPageBreakWithin GroupSetwiseStabilizer GroupStabilizer GroupStabilizerChain Gudermannian GumbelDistribution ' +
+      'HaarWavelet HadamardMatrix HalfNormalDistribution HamiltonianGraphQ HammingDistance HammingWindow HankelH1 HankelH2 HankelMatrix HannPoissonWindow HannWindow HaradaNortonGroupHN HararyGraph HarmonicMean HarmonicMeanFilter HarmonicNumber Hash HashTable Haversine HazardFunction Head HeadCompose Heads HeavisideLambda HeavisidePi HeavisideTheta HeldGroupHe HeldPart HelpBrowserLookup HelpBrowserNotebook HelpBrowserSettings HermiteDecomposition HermiteH HermitianMatrixQ HessenbergDecomposition Hessian HexadecimalCharacter Hexahedron HexahedronBox HexahedronBoxOptions HiddenSurface HighlightGraph HighlightImage HighpassFilter HigmanSimsGroupHS HilbertFilter HilbertMatrix Histogram Histogram3D HistogramDistribution HistogramList HistogramTransform HistogramTransformInterpolation HitMissTransform HITSCentrality HodgeDual HoeffdingD HoeffdingDTest Hold HoldAll HoldAllComplete HoldComplete HoldFirst HoldForm HoldPattern HoldRest HolidayCalendar HomeDirectory HomePage Horizontal HorizontalForm HorizontalGauge HorizontalScrollPosition HornerForm HotellingTSquareDistribution HoytDistribution HTMLSave Hue HumpDownHump HumpEqual HurwitzLerchPhi HurwitzZeta HyperbolicDistribution HypercubeGraph HyperexponentialDistribution Hyperfactorial Hypergeometric0F1 Hypergeometric0F1Regularized Hypergeometric1F1 Hypergeometric1F1Regularized Hypergeometric2F1 Hypergeometric2F1Regularized HypergeometricDistribution HypergeometricPFQ HypergeometricPFQRegularized HypergeometricU Hyperlink HyperlinkCreationSettings Hyphenation HyphenationOptions HypoexponentialDistribution HypothesisTestData ' +
+      'I Identity IdentityMatrix If IgnoreCase Im Image Image3D Image3DSlices ImageAccumulate ImageAdd ImageAdjust ImageAlign ImageApply ImageAspectRatio ImageAssemble ImageCache ImageCacheValid ImageCapture ImageChannels ImageClip ImageColorSpace ImageCompose ImageConvolve ImageCooccurrence ImageCorners ImageCorrelate ImageCorrespondingPoints ImageCrop ImageData ImageDataPacket ImageDeconvolve ImageDemosaic ImageDifference ImageDimensions ImageDistance ImageEffect ImageFeatureTrack ImageFileApply ImageFileFilter ImageFileScan ImageFilter ImageForestingComponents ImageForwardTransformation ImageHistogram ImageKeypoints ImageLevels ImageLines ImageMargins ImageMarkers ImageMeasurements ImageMultiply ImageOffset ImagePad ImagePadding ImagePartition ImagePeriodogram ImagePerspectiveTransformation ImageQ ImageRangeCache ImageReflect ImageRegion ImageResize ImageResolution ImageRotate ImageRotated ImageScaled ImageScan ImageSize ImageSizeAction ImageSizeCache ImageSizeMultipliers ImageSizeRaw ImageSubtract ImageTake ImageTransformation ImageTrim ImageType ImageValue ImageValuePositions Implies Import ImportAutoReplacements ImportString ImprovementImportance In IncidenceGraph IncidenceList IncidenceMatrix IncludeConstantBasis IncludeFileExtension IncludePods IncludeSingularTerm Increment Indent IndentingNewlineSpacings IndentMaxFraction IndependenceTest IndependentEdgeSetQ IndependentUnit IndependentVertexSetQ Indeterminate IndexCreationOptions Indexed IndexGraph IndexTag Inequality InexactNumberQ InexactNumbers Infinity Infix Information Inherited InheritScope Initialization InitializationCell InitializationCellEvaluation InitializationCellWarning InlineCounterAssignments InlineCounterIncrements InlineRules Inner Inpaint Input InputAliases InputAssumptions InputAutoReplacements InputField InputFieldBox InputFieldBoxOptions InputForm InputGrouping InputNamePacket InputNotebook InputPacket InputSettings InputStream InputString InputStringPacket InputToBoxFormPacket Insert InsertionPointObject InsertResults Inset Inset3DBox Inset3DBoxOptions InsetBox InsetBoxOptions Install InstallService InString Integer IntegerDigits IntegerExponent IntegerLength IntegerPart IntegerPartitions IntegerQ Integers IntegerString Integral Integrate Interactive InteractiveTradingChart Interlaced Interleaving InternallyBalancedDecomposition InterpolatingFunction InterpolatingPolynomial Interpolation InterpolationOrder InterpolationPoints InterpolationPrecision Interpretation InterpretationBox InterpretationBoxOptions InterpretationFunction ' +
+      'InterpretTemplate InterquartileRange Interrupt InterruptSettings Intersection Interval IntervalIntersection IntervalMemberQ IntervalUnion Inverse InverseBetaRegularized InverseCDF InverseChiSquareDistribution InverseContinuousWaveletTransform InverseDistanceTransform InverseEllipticNomeQ InverseErf InverseErfc InverseFourier InverseFourierCosTransform InverseFourierSequenceTransform InverseFourierSinTransform InverseFourierTransform InverseFunction InverseFunctions InverseGammaDistribution InverseGammaRegularized InverseGaussianDistribution InverseGudermannian InverseHaversine InverseJacobiCD InverseJacobiCN InverseJacobiCS InverseJacobiDC InverseJacobiDN InverseJacobiDS InverseJacobiNC InverseJacobiND InverseJacobiNS InverseJacobiSC InverseJacobiSD InverseJacobiSN InverseLaplaceTransform InversePermutation InverseRadon InverseSeries InverseSurvivalFunction InverseWaveletTransform InverseWeierstrassP InverseZTransform Invisible InvisibleApplication InvisibleTimes IrreduciblePolynomialQ IsolatingInterval IsomorphicGraphQ IsotopeData Italic Item ItemBox ItemBoxOptions ItemSize ItemStyle ItoProcess ' +
+      'JaccardDissimilarity JacobiAmplitude Jacobian JacobiCD JacobiCN JacobiCS JacobiDC JacobiDN JacobiDS JacobiNC JacobiND JacobiNS JacobiP JacobiSC JacobiSD JacobiSN JacobiSymbol JacobiZeta JankoGroupJ1 JankoGroupJ2 JankoGroupJ3 JankoGroupJ4 JarqueBeraALMTest JohnsonDistribution Join Joined JoinedCurve JoinedCurveBox JoinForm JordanDecomposition JordanModelDecomposition ' +
+      'K KagiChart KaiserBesselWindow KaiserWindow KalmanEstimator KalmanFilter KarhunenLoeveDecomposition KaryTree KatzCentrality KCoreComponents KDistribution KelvinBei KelvinBer KelvinKei KelvinKer KendallTau KendallTauTest KernelExecute KernelMixtureDistribution KernelObject Kernels Ket Khinchin KirchhoffGraph KirchhoffMatrix KleinInvariantJ KnightTourGraph KnotData KnownUnitQ KolmogorovSmirnovTest KroneckerDelta KroneckerModelDecomposition KroneckerProduct KroneckerSymbol KuiperTest KumaraswamyDistribution Kurtosis KuwaharaFilter ' +
+      'Label Labeled LabeledSlider LabelingFunction LabelStyle LaguerreL LambdaComponents LambertW LanczosWindow LandauDistribution Language LanguageCategory LaplaceDistribution LaplaceTransform Laplacian LaplacianFilter LaplacianGaussianFilter Large Larger Last Latitude LatitudeLongitude LatticeData LatticeReduce Launch LaunchKernels LayeredGraphPlot LayerSizeFunction LayoutInformation LCM LeafCount LeapYearQ LeastSquares LeastSquaresFilterKernel Left LeftArrow LeftArrowBar LeftArrowRightArrow LeftDownTeeVector LeftDownVector LeftDownVectorBar LeftRightArrow LeftRightVector LeftTee LeftTeeArrow LeftTeeVector LeftTriangle LeftTriangleBar LeftTriangleEqual LeftUpDownVector LeftUpTeeVector LeftUpVector LeftUpVectorBar LeftVector LeftVectorBar LegendAppearance Legended LegendFunction LegendLabel LegendLayout LegendMargins LegendMarkers LegendMarkerSize LegendreP LegendreQ LegendreType Length LengthWhile LerchPhi Less LessEqual LessEqualGreater LessFullEqual LessGreater LessLess LessSlantEqual LessTilde LetterCharacter LetterQ Level LeveneTest LeviCivitaTensor LevyDistribution Lexicographic LibraryFunction LibraryFunctionError LibraryFunctionInformation LibraryFunctionLoad LibraryFunctionUnload LibraryLoad LibraryUnload LicenseID LiftingFilterData LiftingWaveletTransform LightBlue LightBrown LightCyan Lighter LightGray LightGreen Lighting LightingAngle LightMagenta LightOrange LightPink LightPurple LightRed LightSources LightYellow Likelihood Limit LimitsPositioning LimitsPositioningTokens LindleyDistribution Line Line3DBox LinearFilter LinearFractionalTransform LinearModelFit LinearOffsetFunction LinearProgramming LinearRecurrence LinearSolve LinearSolveFunction LineBox LineBreak LinebreakAdjustments LineBreakChart LineBreakWithin LineColor LineForm LineGraph LineIndent LineIndentMaxFraction LineIntegralConvolutionPlot LineIntegralConvolutionScale LineLegend LineOpacity LineSpacing LineWrapParts LinkActivate LinkClose LinkConnect LinkConnectedQ LinkCreate LinkError LinkFlush LinkFunction LinkHost LinkInterrupt LinkLaunch LinkMode LinkObject LinkOpen LinkOptions LinkPatterns LinkProtocol LinkRead LinkReadHeld LinkReadyQ Links LinkWrite LinkWriteHeld LiouvilleLambda List Listable ListAnimate ListContourPlot ListContourPlot3D ListConvolve ListCorrelate ListCurvePathPlot ListDeconvolve ListDensityPlot Listen ListFourierSequenceTransform ListInterpolation ListLineIntegralConvolutionPlot ListLinePlot ListLogLinearPlot ListLogLogPlot ListLogPlot ListPicker ListPickerBox ListPickerBoxBackground ListPickerBoxOptions ListPlay ListPlot ListPlot3D ListPointPlot3D ListPolarPlot ListQ ListStreamDensityPlot ListStreamPlot ListSurfacePlot3D ListVectorDensityPlot ListVectorPlot ListVectorPlot3D ListZTransform Literal LiteralSearch LocalClusteringCoefficient LocalizeVariables LocationEquivalenceTest LocationTest Locator LocatorAutoCreate LocatorBox LocatorBoxOptions LocatorCentering LocatorPane LocatorPaneBox LocatorPaneBoxOptions ' +
+      'LocatorRegion Locked Log Log10 Log2 LogBarnesG LogGamma LogGammaDistribution LogicalExpand LogIntegral LogisticDistribution LogitModelFit LogLikelihood LogLinearPlot LogLogisticDistribution LogLogPlot LogMultinormalDistribution LogNormalDistribution LogPlot LogRankTest LogSeriesDistribution LongEqual Longest LongestAscendingSequence LongestCommonSequence LongestCommonSequencePositions LongestCommonSubsequence LongestCommonSubsequencePositions LongestMatch LongForm Longitude LongLeftArrow LongLeftRightArrow LongRightArrow Loopback LoopFreeGraphQ LowerCaseQ LowerLeftArrow LowerRightArrow LowerTriangularize LowpassFilter LQEstimatorGains LQGRegulator LQOutputRegulatorGains LQRegulatorGains LUBackSubstitution LucasL LuccioSamiComponents LUDecomposition LyapunovSolve LyonsGroupLy ' +
+      'MachineID MachineName MachineNumberQ MachinePrecision MacintoshSystemPageSetup Magenta Magnification Magnify MainSolve MaintainDynamicCaches Majority MakeBoxes MakeExpression MakeRules MangoldtLambda ManhattanDistance Manipulate Manipulator MannWhitneyTest MantissaExponent Manual Map MapAll MapAt MapIndexed MAProcess MapThread MarcumQ MardiaCombinedTest MardiaKurtosisTest MardiaSkewnessTest MarginalDistribution MarkovProcessProperties Masking MatchingDissimilarity MatchLocalNameQ MatchLocalNames MatchQ Material MathematicaNotation MathieuC MathieuCharacteristicA MathieuCharacteristicB MathieuCharacteristicExponent MathieuCPrime MathieuGroupM11 MathieuGroupM12 MathieuGroupM22 MathieuGroupM23 MathieuGroupM24 MathieuS MathieuSPrime MathMLForm MathMLText Matrices MatrixExp MatrixForm MatrixFunction MatrixLog MatrixPlot MatrixPower MatrixQ MatrixRank Max MaxBend MaxDetect MaxExtraBandwidths MaxExtraConditions MaxFeatures MaxFilter Maximize MaxIterations MaxMemoryUsed MaxMixtureKernels MaxPlotPoints MaxPoints MaxRecursion MaxStableDistribution MaxStepFraction MaxSteps MaxStepSize MaxValue MaxwellDistribution McLaughlinGroupMcL Mean MeanClusteringCoefficient MeanDegreeConnectivity MeanDeviation MeanFilter MeanGraphDistance MeanNeighborDegree MeanShift MeanShiftFilter Median MedianDeviation MedianFilter Medium MeijerG MeixnerDistribution MemberQ MemoryConstrained MemoryInUse Menu MenuAppearance MenuCommandKey MenuEvaluator MenuItem MenuPacket MenuSortingValue MenuStyle MenuView MergeDifferences Mesh MeshFunctions MeshRange MeshShading MeshStyle Message MessageDialog MessageList MessageName MessageOptions MessagePacket Messages MessagesNotebook MetaCharacters MetaInformation Method MethodOptions MexicanHatWavelet MeyerWavelet Min MinDetect MinFilter MinimalPolynomial MinimalStateSpaceModel Minimize Minors MinRecursion MinSize MinStableDistribution Minus MinusPlus MinValue Missing MissingDataMethod MittagLefflerE MixedRadix MixedRadixQuantity MixtureDistribution Mod Modal Mode Modular ModularLambda Module Modulus MoebiusMu Moment Momentary MomentConvert MomentEvaluate MomentGeneratingFunction Monday Monitor MonomialList MonomialOrder MonsterGroupM MorletWavelet MorphologicalBinarize MorphologicalBranchPoints MorphologicalComponents MorphologicalEulerNumber MorphologicalGraph MorphologicalPerimeter MorphologicalTransform Most MouseAnnotation MouseAppearance MouseAppearanceTag MouseButtons Mouseover MousePointerNote MousePosition MovingAverage MovingMedian MoyalDistribution MultiedgeStyle MultilaunchWarning MultiLetterItalics MultiLetterStyle MultilineFunction Multinomial MultinomialDistribution MultinormalDistribution MultiplicativeOrder Multiplicity Multiselection MultivariateHypergeometricDistribution MultivariatePoissonDistribution MultivariateTDistribution ' +
+      'N NakagamiDistribution NameQ Names NamespaceBox Nand NArgMax NArgMin NBernoulliB NCache NDSolve NDSolveValue Nearest NearestFunction NeedCurrentFrontEndPackagePacket NeedCurrentFrontEndSymbolsPacket NeedlemanWunschSimilarity Needs Negative NegativeBinomialDistribution NegativeMultinomialDistribution NeighborhoodGraph Nest NestedGreaterGreater NestedLessLess NestedScriptRules NestList NestWhile NestWhileList NevilleThetaC NevilleThetaD NevilleThetaN NevilleThetaS NewPrimitiveStyle NExpectation Next NextPrime NHoldAll NHoldFirst NHoldRest NicholsGridLines NicholsPlot NIntegrate NMaximize NMaxValue NMinimize NMinValue NominalVariables NonAssociative NoncentralBetaDistribution NoncentralChiSquareDistribution NoncentralFRatioDistribution NoncentralStudentTDistribution NonCommutativeMultiply NonConstants None NonlinearModelFit NonlocalMeansFilter NonNegative NonPositive Nor NorlundB Norm Normal NormalDistribution NormalGrouping Normalize NormalizedSquaredEuclideanDistance NormalsFunction NormFunction Not NotCongruent NotCupCap NotDoubleVerticalBar Notebook NotebookApply NotebookAutoSave NotebookClose NotebookConvertSettings NotebookCreate NotebookCreateReturnObject NotebookDefault NotebookDelete NotebookDirectory NotebookDynamicExpression NotebookEvaluate NotebookEventActions NotebookFileName NotebookFind NotebookFindReturnObject NotebookGet NotebookGetLayoutInformationPacket NotebookGetMisspellingsPacket NotebookInformation NotebookInterfaceObject NotebookLocate NotebookObject NotebookOpen NotebookOpenReturnObject NotebookPath NotebookPrint NotebookPut NotebookPutReturnObject NotebookRead NotebookResetGeneratedCells Notebooks NotebookSave NotebookSaveAs NotebookSelection NotebookSetupLayoutInformationPacket NotebooksMenu NotebookWrite NotElement NotEqualTilde NotExists NotGreater NotGreaterEqual NotGreaterFullEqual NotGreaterGreater NotGreaterLess NotGreaterSlantEqual NotGreaterTilde NotHumpDownHump NotHumpEqual NotLeftTriangle NotLeftTriangleBar NotLeftTriangleEqual NotLess NotLessEqual NotLessFullEqual NotLessGreater NotLessLess NotLessSlantEqual NotLessTilde NotNestedGreaterGreater NotNestedLessLess NotPrecedes NotPrecedesEqual NotPrecedesSlantEqual NotPrecedesTilde NotReverseElement NotRightTriangle NotRightTriangleBar NotRightTriangleEqual NotSquareSubset NotSquareSubsetEqual NotSquareSuperset NotSquareSupersetEqual NotSubset NotSubsetEqual NotSucceeds NotSucceedsEqual NotSucceedsSlantEqual NotSucceedsTilde NotSuperset NotSupersetEqual NotTilde NotTildeEqual NotTildeFullEqual NotTildeTilde NotVerticalBar NProbability NProduct NProductFactors NRoots NSolve NSum NSumTerms Null NullRecords NullSpace NullWords Number NumberFieldClassNumber NumberFieldDiscriminant NumberFieldFundamentalUnits NumberFieldIntegralBasis NumberFieldNormRepresentatives NumberFieldRegulator NumberFieldRootsOfUnity NumberFieldSignature NumberForm NumberFormat NumberMarks NumberMultiplier NumberPadding NumberPoint NumberQ NumberSeparator ' +
+      'NumberSigns NumberString Numerator NumericFunction NumericQ NuttallWindow NValues NyquistGridLines NyquistPlot ' +
+      'O ObservabilityGramian ObservabilityMatrix ObservableDecomposition ObservableModelQ OddQ Off Offset OLEData On ONanGroupON OneIdentity Opacity Open OpenAppend Opener OpenerBox OpenerBoxOptions OpenerView OpenFunctionInspectorPacket Opening OpenRead OpenSpecialOptions OpenTemporary OpenWrite Operate OperatingSystem OptimumFlowData Optional OptionInspectorSettings OptionQ Options OptionsPacket OptionsPattern OptionValue OptionValueBox OptionValueBoxOptions Or Orange Order OrderDistribution OrderedQ Ordering Orderless OrnsteinUhlenbeckProcess Orthogonalize Out Outer OutputAutoOverwrite OutputControllabilityMatrix OutputControllableModelQ OutputForm OutputFormData OutputGrouping OutputMathEditExpression OutputNamePacket OutputResponse OutputSizeLimit OutputStream Over OverBar OverDot Overflow OverHat Overlaps Overlay OverlayBox OverlayBoxOptions Overscript OverscriptBox OverscriptBoxOptions OverTilde OverVector OwenT OwnValues ' +
+      'PackingMethod PaddedForm Padding PadeApproximant PadLeft PadRight PageBreakAbove PageBreakBelow PageBreakWithin PageFooterLines PageFooters PageHeaderLines PageHeaders PageHeight PageRankCentrality PageWidth PairedBarChart PairedHistogram PairedSmoothHistogram PairedTTest PairedZTest PaletteNotebook PalettePath Pane PaneBox PaneBoxOptions Panel PanelBox PanelBoxOptions Paneled PaneSelector PaneSelectorBox PaneSelectorBoxOptions PaperWidth ParabolicCylinderD ParagraphIndent ParagraphSpacing ParallelArray ParallelCombine ParallelDo ParallelEvaluate Parallelization Parallelize ParallelMap ParallelNeeds ParallelProduct ParallelSubmit ParallelSum ParallelTable ParallelTry Parameter ParameterEstimator ParameterMixtureDistribution ParameterVariables ParametricFunction ParametricNDSolve ParametricNDSolveValue ParametricPlot ParametricPlot3D ParentConnect ParentDirectory ParentForm Parenthesize ParentList ParetoDistribution Part PartialCorrelationFunction PartialD ParticleData Partition PartitionsP PartitionsQ ParzenWindow PascalDistribution PassEventsDown PassEventsUp Paste PasteBoxFormInlineCells PasteButton Path PathGraph PathGraphQ Pattern PatternSequence PatternTest PauliMatrix PaulWavelet Pause PausedTime PDF PearsonChiSquareTest PearsonCorrelationTest PearsonDistribution PerformanceGoal PeriodicInterpolation Periodogram PeriodogramArray PermutationCycles PermutationCyclesQ PermutationGroup PermutationLength PermutationList PermutationListQ PermutationMax PermutationMin PermutationOrder PermutationPower PermutationProduct PermutationReplace Permutations PermutationSupport Permute PeronaMalikFilter Perpendicular PERTDistribution PetersenGraph PhaseMargins Pi Pick PIDData PIDDerivativeFilter PIDFeedforward PIDTune Piecewise PiecewiseExpand PieChart PieChart3D PillaiTrace PillaiTraceTest Pink Pivoting PixelConstrained PixelValue PixelValuePositions Placed Placeholder PlaceholderReplace Plain PlanarGraphQ Play PlayRange Plot Plot3D Plot3Matrix PlotDivision PlotJoined PlotLabel PlotLayout PlotLegends PlotMarkers PlotPoints PlotRange PlotRangeClipping PlotRangePadding PlotRegion PlotStyle Plus PlusMinus Pochhammer PodStates PodWidth Point Point3DBox PointBox PointFigureChart PointForm PointLegend PointSize PoissonConsulDistribution PoissonDistribution PoissonProcess PoissonWindow PolarAxes PolarAxesOrigin PolarGridLines PolarPlot PolarTicks PoleZeroMarkers PolyaAeppliDistribution PolyGamma Polygon Polygon3DBox Polygon3DBoxOptions PolygonBox PolygonBoxOptions PolygonHoleScale PolygonIntersections PolygonScale PolyhedronData PolyLog PolynomialExtendedGCD PolynomialForm PolynomialGCD PolynomialLCM PolynomialMod PolynomialQ PolynomialQuotient PolynomialQuotientRemainder PolynomialReduce PolynomialRemainder Polynomials PopupMenu PopupMenuBox PopupMenuBoxOptions PopupView PopupWindow Position Positive PositiveDefiniteMatrixQ PossibleZeroQ Postfix PostScript Power PowerDistribution PowerExpand PowerMod PowerModList ' +
+      'PowerSpectralDensity PowersRepresentations PowerSymmetricPolynomial Precedence PrecedenceForm Precedes PrecedesEqual PrecedesSlantEqual PrecedesTilde Precision PrecisionGoal PreDecrement PredictionRoot PreemptProtect PreferencesPath Prefix PreIncrement Prepend PrependTo PreserveImageOptions Previous PriceGraphDistribution PrimaryPlaceholder Prime PrimeNu PrimeOmega PrimePi PrimePowerQ PrimeQ Primes PrimeZetaP PrimitiveRoot PrincipalComponents PrincipalValue Print PrintAction PrintForm PrintingCopies PrintingOptions PrintingPageRange PrintingStartingPageNumber PrintingStyleEnvironment PrintPrecision PrintTemporary Prism PrismBox PrismBoxOptions PrivateCellOptions PrivateEvaluationOptions PrivateFontOptions PrivateFrontEndOptions PrivateNotebookOptions PrivatePaths Probability ProbabilityDistribution ProbabilityPlot ProbabilityPr ProbabilityScalePlot ProbitModelFit ProcessEstimator ProcessParameterAssumptions ProcessParameterQ ProcessStateDomain ProcessTimeDomain Product ProductDistribution ProductLog ProgressIndicator ProgressIndicatorBox ProgressIndicatorBoxOptions Projection Prolog PromptForm Properties Property PropertyList PropertyValue Proportion Proportional Protect Protected ProteinData Pruning PseudoInverse Purple Put PutAppend Pyramid PyramidBox PyramidBoxOptions ' +
+      'QBinomial QFactorial QGamma QHypergeometricPFQ QPochhammer QPolyGamma QRDecomposition QuadraticIrrationalQ Quantile QuantilePlot Quantity QuantityForm QuantityMagnitude QuantityQ QuantityUnit Quartics QuartileDeviation Quartiles QuartileSkewness QueueingNetworkProcess QueueingProcess QueueProperties Quiet Quit Quotient QuotientRemainder ' +
+      'RadialityCentrality RadicalBox RadicalBoxOptions RadioButton RadioButtonBar RadioButtonBox RadioButtonBoxOptions Radon RamanujanTau RamanujanTauL RamanujanTauTheta RamanujanTauZ Random RandomChoice RandomComplex RandomFunction RandomGraph RandomImage RandomInteger RandomPermutation RandomPrime RandomReal RandomSample RandomSeed RandomVariate RandomWalkProcess Range RangeFilter RangeSpecification RankedMax RankedMin Raster Raster3D Raster3DBox Raster3DBoxOptions RasterArray RasterBox RasterBoxOptions Rasterize RasterSize Rational RationalFunctions Rationalize Rationals Ratios Raw RawArray RawBoxes RawData RawMedium RayleighDistribution Re Read ReadList ReadProtected Real RealBlockDiagonalForm RealDigits RealExponent Reals Reap Record RecordLists RecordSeparators Rectangle RectangleBox RectangleBoxOptions RectangleChart RectangleChart3D RecurrenceFilter RecurrenceTable RecurringDigitsForm Red Reduce RefBox ReferenceLineStyle ReferenceMarkers ReferenceMarkerStyle Refine ReflectionMatrix ReflectionTransform Refresh RefreshRate RegionBinarize RegionFunction RegionPlot RegionPlot3D RegularExpression Regularization Reinstall Release ReleaseHold ReliabilityDistribution ReliefImage ReliefPlot Remove RemoveAlphaChannel RemoveAsynchronousTask Removed RemoveInputStreamMethod RemoveOutputStreamMethod RemoveProperty RemoveScheduledTask RenameDirectory RenameFile RenderAll RenderingOptions RenewalProcess RenkoChart Repeated RepeatedNull RepeatedString Replace ReplaceAll ReplaceHeldPart ReplaceImageValue ReplaceList ReplacePart ReplacePixelValue ReplaceRepeated Resampling Rescale RescalingTransform ResetDirectory ResetMenusPacket ResetScheduledTask Residue Resolve Rest Resultant ResumePacket Return ReturnExpressionPacket ReturnInputFormPacket ReturnPacket ReturnTextPacket Reverse ReverseBiorthogonalSplineWavelet ReverseElement ReverseEquilibrium ReverseGraph ReverseUpEquilibrium RevolutionAxis RevolutionPlot3D RGBColor RiccatiSolve RiceDistribution RidgeFilter RiemannR RiemannSiegelTheta RiemannSiegelZ Riffle Right RightArrow RightArrowBar RightArrowLeftArrow RightCosetRepresentative RightDownTeeVector RightDownVector RightDownVectorBar RightTee RightTeeArrow RightTeeVector RightTriangle RightTriangleBar RightTriangleEqual RightUpDownVector RightUpTeeVector RightUpVector RightUpVectorBar RightVector RightVectorBar RiskAchievementImportance RiskReductionImportance RogersTanimotoDissimilarity Root RootApproximant RootIntervals RootLocusPlot RootMeanSquare RootOfUnityQ RootReduce Roots RootSum Rotate RotateLabel RotateLeft RotateRight RotationAction RotationBox RotationBoxOptions RotationMatrix RotationTransform Round RoundImplies RoundingRadius Row RowAlignments RowBackgrounds RowBox RowHeights RowLines RowMinHeight RowReduce RowsEqual RowSpacings RSolve RudvalisGroupRu Rule RuleCondition RuleDelayed RuleForm RulerUnits Run RunScheduledTask RunThrough RuntimeAttributes RuntimeOptions RussellRaoDissimilarity ' +
+      'SameQ SameTest SampleDepth SampledSoundFunction SampledSoundList SampleRate SamplingPeriod SARIMAProcess SARMAProcess SatisfiabilityCount SatisfiabilityInstances SatisfiableQ Saturday Save Saveable SaveAutoDelete SaveDefinitions SawtoothWave Scale Scaled ScaleDivisions ScaledMousePosition ScaleOrigin ScalePadding ScaleRanges ScaleRangeStyle ScalingFunctions ScalingMatrix ScalingTransform Scan ScheduledTaskActiveQ ScheduledTaskData ScheduledTaskObject ScheduledTasks SchurDecomposition ScientificForm ScreenRectangle ScreenStyleEnvironment ScriptBaselineShifts ScriptLevel ScriptMinSize ScriptRules ScriptSizeMultipliers Scrollbars ScrollingOptions ScrollPosition Sec Sech SechDistribution SectionGrouping SectorChart SectorChart3D SectorOrigin SectorSpacing SeedRandom Select Selectable SelectComponents SelectedCells SelectedNotebook Selection SelectionAnimate SelectionCell SelectionCellCreateCell SelectionCellDefaultStyle SelectionCellParentStyle SelectionCreateCell SelectionDebuggerTag SelectionDuplicateCell SelectionEvaluate SelectionEvaluateCreateCell SelectionMove SelectionPlaceholder SelectionSetStyle SelectWithContents SelfLoops SelfLoopStyle SemialgebraicComponentInstances SendMail Sequence SequenceAlignment SequenceForm SequenceHold SequenceLimit Series SeriesCoefficient SeriesData SessionTime Set SetAccuracy SetAlphaChannel SetAttributes Setbacks SetBoxFormNamesPacket SetDelayed SetDirectory SetEnvironment SetEvaluationNotebook SetFileDate SetFileLoadingContext SetNotebookStatusLine SetOptions SetOptionsPacket SetPrecision SetProperty SetSelectedNotebook SetSharedFunction SetSharedVariable SetSpeechParametersPacket SetStreamPosition SetSystemOptions Setter SetterBar SetterBox SetterBoxOptions Setting SetValue Shading Shallow ShannonWavelet ShapiroWilkTest Share Sharpen ShearingMatrix ShearingTransform ShenCastanMatrix Short ShortDownArrow Shortest ShortestMatch ShortestPathFunction ShortLeftArrow ShortRightArrow ShortUpArrow Show ShowAutoStyles ShowCellBracket ShowCellLabel ShowCellTags ShowClosedCellArea ShowContents ShowControls ShowCursorTracker ShowGroupOpenCloseIcon ShowGroupOpener ShowInvisibleCharacters ShowPageBreaks ShowPredictiveInterface ShowSelection ShowShortBoxForm ShowSpecialCharacters ShowStringCharacters ShowSyntaxStyles ShrinkingDelay ShrinkWrapBoundingBox SiegelTheta SiegelTukeyTest Sign Signature SignedRankTest SignificanceLevel SignPadding SignTest SimilarityRules SimpleGraph SimpleGraphQ Simplify Sin Sinc SinghMaddalaDistribution SingleEvaluation SingleLetterItalics SingleLetterStyle SingularValueDecomposition SingularValueList SingularValuePlot SingularValues Sinh SinhIntegral SinIntegral SixJSymbol Skeleton SkeletonTransform SkellamDistribution Skewness SkewNormalDistribution Skip SliceDistribution Slider Slider2D Slider2DBox Slider2DBoxOptions SliderBox SliderBoxOptions SlideView Slot SlotSequence Small SmallCircle Smaller SmithDelayCompensator SmithWatermanSimilarity ' +
+      'SmoothDensityHistogram SmoothHistogram SmoothHistogram3D SmoothKernelDistribution SocialMediaData Socket SokalSneathDissimilarity Solve SolveAlways SolveDelayed Sort SortBy Sound SoundAndGraphics SoundNote SoundVolume Sow Space SpaceForm Spacer Spacings Span SpanAdjustments SpanCharacterRounding SpanFromAbove SpanFromBoth SpanFromLeft SpanLineThickness SpanMaxSize SpanMinSize SpanningCharacters SpanSymmetric SparseArray SpatialGraphDistribution Speak SpeakTextPacket SpearmanRankTest SpearmanRho Spectrogram SpectrogramArray Specularity SpellingCorrection SpellingDictionaries SpellingDictionariesPath SpellingOptions SpellingSuggestionsPacket Sphere SphereBox SphericalBesselJ SphericalBesselY SphericalHankelH1 SphericalHankelH2 SphericalHarmonicY SphericalPlot3D SphericalRegion SpheroidalEigenvalue SpheroidalJoiningFactor SpheroidalPS SpheroidalPSPrime SpheroidalQS SpheroidalQSPrime SpheroidalRadialFactor SpheroidalS1 SpheroidalS1Prime SpheroidalS2 SpheroidalS2Prime Splice SplicedDistribution SplineClosed SplineDegree SplineKnots SplineWeights Split SplitBy SpokenString Sqrt SqrtBox SqrtBoxOptions Square SquaredEuclideanDistance SquareFreeQ SquareIntersection SquaresR SquareSubset SquareSubsetEqual SquareSuperset SquareSupersetEqual SquareUnion SquareWave StabilityMargins StabilityMarginsStyle StableDistribution Stack StackBegin StackComplete StackInhibit StandardDeviation StandardDeviationFilter StandardForm Standardize StandbyDistribution Star StarGraph StartAsynchronousTask StartingStepSize StartOfLine StartOfString StartScheduledTask StartupSound StateDimensions StateFeedbackGains StateOutputEstimator StateResponse StateSpaceModel StateSpaceRealization StateSpaceTransform StationaryDistribution StationaryWaveletPacketTransform StationaryWaveletTransform StatusArea StatusCentrality StepMonitor StieltjesGamma StirlingS1 StirlingS2 StopAsynchronousTask StopScheduledTask StrataVariables StratonovichProcess StreamColorFunction StreamColorFunctionScaling StreamDensityPlot StreamPlot StreamPoints StreamPosition Streams StreamScale StreamStyle String StringBreak StringByteCount StringCases StringCount StringDrop StringExpression StringForm StringFormat StringFreeQ StringInsert StringJoin StringLength StringMatchQ StringPosition StringQ StringReplace StringReplaceList StringReplacePart StringReverse StringRotateLeft StringRotateRight StringSkeleton StringSplit StringTake StringToStream StringTrim StripBoxes StripOnInput StripWrapperBoxes StrokeForm StructuralImportance StructuredArray StructuredSelection StruveH StruveL Stub StudentTDistribution Style StyleBox StyleBoxAutoDelete StyleBoxOptions StyleData StyleDefinitions StyleForm StyleKeyMapping StyleMenuListing StyleNameDialogSettings StyleNames StylePrint StyleSheetPath Subfactorial Subgraph SubMinus SubPlus SubresultantPolynomialRemainders ' +
+      'SubresultantPolynomials Subresultants Subscript SubscriptBox SubscriptBoxOptions Subscripted Subset SubsetEqual Subsets SubStar Subsuperscript SubsuperscriptBox SubsuperscriptBoxOptions Subtract SubtractFrom SubValues Succeeds SucceedsEqual SucceedsSlantEqual SucceedsTilde SuchThat Sum SumConvergence Sunday SuperDagger SuperMinus SuperPlus Superscript SuperscriptBox SuperscriptBoxOptions Superset SupersetEqual SuperStar Surd SurdForm SurfaceColor SurfaceGraphics SurvivalDistribution SurvivalFunction SurvivalModel SurvivalModelFit SuspendPacket SuzukiDistribution SuzukiGroupSuz SwatchLegend Switch Symbol SymbolName SymletWavelet Symmetric SymmetricGroup SymmetricMatrixQ SymmetricPolynomial SymmetricReduction Symmetrize SymmetrizedArray SymmetrizedArrayRules SymmetrizedDependentComponents SymmetrizedIndependentComponents SymmetrizedReplacePart SynchronousInitialization SynchronousUpdating Syntax SyntaxForm SyntaxInformation SyntaxLength SyntaxPacket SyntaxQ SystemDialogInput SystemException SystemHelpPath SystemInformation SystemInformationData SystemOpen SystemOptions SystemsModelDelay SystemsModelDelayApproximate SystemsModelDelete SystemsModelDimensions SystemsModelExtract SystemsModelFeedbackConnect SystemsModelLabels SystemsModelOrder SystemsModelParallelConnect SystemsModelSeriesConnect SystemsModelStateFeedbackConnect SystemStub ' +
+      'Tab TabFilling Table TableAlignments TableDepth TableDirections TableForm TableHeadings TableSpacing TableView TableViewBox TabSpacings TabView TabViewBox TabViewBoxOptions TagBox TagBoxNote TagBoxOptions TaggingRules TagSet TagSetDelayed TagStyle TagUnset Take TakeWhile Tally Tan Tanh TargetFunctions TargetUnits TautologyQ TelegraphProcess TemplateBox TemplateBoxOptions TemplateSlotSequence TemporalData Temporary TemporaryVariable TensorContract TensorDimensions TensorExpand TensorProduct TensorQ TensorRank TensorReduce TensorSymmetry TensorTranspose TensorWedge Tetrahedron TetrahedronBox TetrahedronBoxOptions TeXForm TeXSave Text Text3DBox Text3DBoxOptions TextAlignment TextBand TextBoundingBox TextBox TextCell TextClipboardType TextData TextForm TextJustification TextLine TextPacket TextParagraph TextRecognize TextRendering TextStyle Texture TextureCoordinateFunction TextureCoordinateScaling Therefore ThermometerGauge Thick Thickness Thin Thinning ThisLink ThompsonGroupTh Thread ThreeJSymbol Threshold Through Throw Thumbnail Thursday Ticks TicksStyle Tilde TildeEqual TildeFullEqual TildeTilde TimeConstrained TimeConstraint Times TimesBy TimeSeriesForecast TimeSeriesInvertibility TimeUsed TimeValue TimeZone Timing Tiny TitleGrouping TitsGroupT ToBoxes ToCharacterCode ToColor ToContinuousTimeModel ToDate ToDiscreteTimeModel ToeplitzMatrix ToExpression ToFileName Together Toggle ToggleFalse Toggler TogglerBar TogglerBox TogglerBoxOptions ToHeldExpression ToInvertibleTimeSeries TokenWords Tolerance ToLowerCase ToNumberField TooBig Tooltip TooltipBox TooltipBoxOptions TooltipDelay TooltipStyle Top TopHatTransform TopologicalSort ToRadicals ToRules ToString Total TotalHeight TotalVariationFilter TotalWidth TouchscreenAutoZoom TouchscreenControlPlacement ToUpperCase Tr Trace TraceAbove TraceAction TraceBackward TraceDepth TraceDialog TraceForward TraceInternal TraceLevel TraceOff TraceOn TraceOriginal TracePrint TraceScan TrackedSymbols TradingChart TraditionalForm TraditionalFunctionNotation TraditionalNotation TraditionalOrder TransferFunctionCancel TransferFunctionExpand TransferFunctionFactor TransferFunctionModel TransferFunctionPoles TransferFunctionTransform TransferFunctionZeros TransformationFunction TransformationFunctions TransformationMatrix TransformedDistribution TransformedField Translate TranslationTransform TransparentColor Transpose TreeForm TreeGraph TreeGraphQ TreePlot TrendStyle TriangleWave TriangularDistribution Trig TrigExpand TrigFactor TrigFactorList Trigger TrigReduce TrigToExp TrimmedMean True TrueQ TruncatedDistribution TsallisQExponentialDistribution TsallisQGaussianDistribution TTest Tube TubeBezierCurveBox TubeBezierCurveBoxOptions TubeBox TubeBSplineCurveBox TubeBSplineCurveBoxOptions Tuesday TukeyLambdaDistribution TukeyWindow Tuples TuranGraph TuringMachine ' +
+      'Transparent ' +
+      'UnateQ Uncompress Undefined UnderBar Underflow Underlined Underoverscript UnderoverscriptBox UnderoverscriptBoxOptions Underscript UnderscriptBox UnderscriptBoxOptions UndirectedEdge UndirectedGraph UndirectedGraphQ UndocumentedTestFEParserPacket UndocumentedTestGetSelectionPacket Unequal Unevaluated UniformDistribution UniformGraphDistribution UniformSumDistribution Uninstall Union UnionPlus Unique UnitBox UnitConvert UnitDimensions Unitize UnitRootTest UnitSimplify UnitStep UnitTriangle UnitVector Unprotect UnsameQ UnsavedVariables Unset UnsetShared UntrackedVariables Up UpArrow UpArrowBar UpArrowDownArrow Update UpdateDynamicObjects UpdateDynamicObjectsSynchronous UpdateInterval UpDownArrow UpEquilibrium UpperCaseQ UpperLeftArrow UpperRightArrow UpperTriangularize Upsample UpSet UpSetDelayed UpTee UpTeeArrow UpValues URL URLFetch URLFetchAsynchronous URLSave URLSaveAsynchronous UseGraphicsRange Using UsingFrontEnd ' +
+      'V2Get ValidationLength Value ValueBox ValueBoxOptions ValueForm ValueQ ValuesData Variables Variance VarianceEquivalenceTest VarianceEstimatorFunction VarianceGammaDistribution VarianceTest VectorAngle VectorColorFunction VectorColorFunctionScaling VectorDensityPlot VectorGlyphData VectorPlot VectorPlot3D VectorPoints VectorQ Vectors VectorScale VectorStyle Vee Verbatim Verbose VerboseConvertToPostScriptPacket VerifyConvergence VerifySolutions VerifyTestAssumptions Version VersionNumber VertexAdd VertexCapacity VertexColors VertexComponent VertexConnectivity VertexCoordinateRules VertexCoordinates VertexCorrelationSimilarity VertexCosineSimilarity VertexCount VertexCoverQ VertexDataCoordinates VertexDegree VertexDelete VertexDiceSimilarity VertexEccentricity VertexInComponent VertexInDegree VertexIndex VertexJaccardSimilarity VertexLabeling VertexLabels VertexLabelStyle VertexList VertexNormals VertexOutComponent VertexOutDegree VertexQ VertexRenderingFunction VertexReplace VertexShape VertexShapeFunction VertexSize VertexStyle VertexTextureCoordinates VertexWeight Vertical VerticalBar VerticalForm VerticalGauge VerticalSeparator VerticalSlider VerticalTilde ViewAngle ViewCenter ViewMatrix ViewPoint ViewPointSelectorSettings ViewPort ViewRange ViewVector ViewVertical VirtualGroupData Visible VisibleCell VoigtDistribution VonMisesDistribution ' +
+      'WaitAll WaitAsynchronousTask WaitNext WaitUntil WakebyDistribution WalleniusHypergeometricDistribution WaringYuleDistribution WatershedComponents WatsonUSquareTest WattsStrogatzGraphDistribution WaveletBestBasis WaveletFilterCoefficients WaveletImagePlot WaveletListPlot WaveletMapIndexed WaveletMatrixPlot WaveletPhi WaveletPsi WaveletScale WaveletScalogram WaveletThreshold WeaklyConnectedComponents WeaklyConnectedGraphQ WeakStationarity WeatherData WeberE Wedge Wednesday WeibullDistribution WeierstrassHalfPeriods WeierstrassInvariants WeierstrassP WeierstrassPPrime WeierstrassSigma WeierstrassZeta WeightedAdjacencyGraph WeightedAdjacencyMatrix WeightedData WeightedGraphQ Weights WelchWindow WheelGraph WhenEvent Which While White Whitespace WhitespaceCharacter WhittakerM WhittakerW WienerFilter WienerProcess WignerD WignerSemicircleDistribution WilksW WilksWTest WindowClickSelect WindowElements WindowFloating WindowFrame WindowFrameElements WindowMargins WindowMovable WindowOpacity WindowSelected WindowSize WindowStatusArea WindowTitle WindowToolbars WindowWidth With WolframAlpha WolframAlphaDate WolframAlphaQuantity WolframAlphaResult Word WordBoundary WordCharacter WordData WordSearch WordSeparators WorkingPrecision Write WriteString Wronskian ' +
+      'XMLElement XMLObject Xnor Xor ' +
+      'Yellow YuleDissimilarity ' +
+      'ZernikeR ZeroSymmetric ZeroTest ZeroWidthTimes Zeta ZetaZero ZipfDistribution ZTest ZTransform ' +
+      '$Aborted $ActivationGroupID $ActivationKey $ActivationUserRegistered $AddOnsDirectory $AssertFunction $Assumptions $AsynchronousTask $BaseDirectory $BatchInput $BatchOutput $BoxForms $ByteOrdering $Canceled $CharacterEncoding $CharacterEncodings $CommandLine $CompilationTarget $ConditionHold $ConfiguredKernels $Context $ContextPath $ControlActiveSetting $CreationDate $CurrentLink $DateStringFormat $DefaultFont $DefaultFrontEnd $DefaultImagingDevice $DefaultPath $Display $DisplayFunction $DistributedContexts $DynamicEvaluation $Echo $Epilog $ExportFormats $Failed $FinancialDataSource $FormatType $FrontEnd $FrontEndSession $GeoLocation $HistoryLength $HomeDirectory $HTTPCookies $IgnoreEOF $ImagingDevices $ImportFormats $InitialDirectory $Input $InputFileName $InputStreamMethods $Inspector $InstallationDate $InstallationDirectory $InterfaceEnvironment $IterationLimit $KernelCount $KernelID $Language $LaunchDirectory $LibraryPath $LicenseExpirationDate $LicenseID $LicenseProcesses $LicenseServer $LicenseSubprocesses $LicenseType $Line $Linked $LinkSupported $LoadedFiles $MachineAddresses $MachineDomain $MachineDomains $MachineEpsilon $MachineID $MachineName $MachinePrecision $MachineType $MaxExtraPrecision $MaxLicenseProcesses $MaxLicenseSubprocesses $MaxMachineNumber $MaxNumber $MaxPiecewiseCases $MaxPrecision $MaxRootDegree $MessageGroups $MessageList $MessagePrePrint $Messages $MinMachineNumber $MinNumber $MinorReleaseNumber $MinPrecision $ModuleNumber $NetworkLicense $NewMessage $NewSymbol $Notebooks $NumberMarks $Off $OperatingSystem $Output $OutputForms $OutputSizeLimit $OutputStreamMethods $Packages $ParentLink $ParentProcessID $PasswordFile $PatchLevelID $Path $PathnameSeparator $PerformanceGoal $PipeSupported $Post $Pre $PreferencesDirectory $PrePrint $PreRead $PrintForms $PrintLiteral $ProcessID $ProcessorCount $ProcessorType $ProductInformation $ProgramName $RandomState $RecursionLimit $ReleaseNumber $RootDirectory $ScheduledTask $ScriptCommandLine $SessionID $SetParentLink $SharedFunctions $SharedVariables $SoundDisplay $SoundDisplayFunction $SuppressInputFormHeads $SynchronousEvaluation $SyntaxHandler $System $SystemCharacterEncoding $SystemID $SystemWordLength $TemporaryDirectory $TemporaryPrefix $TextStyle $TimedOut $TimeUnit $TimeZone $TopDirectory $TraceOff $TraceOn $TracePattern $TracePostAction $TracePreAction $Urgent $UserAddOnsDirectory $UserBaseDirectory $UserDocumentsDirectory $UserName $Version $VersionNumber',
+    contains: [
+      {
+        className: "comment",
+        begin: /\(\*/, end: /\*\)/
+      },
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      hljs.C_NUMBER_MODE,
+      {
+        className: 'list',
+        begin: /\{/, end: /\}/,
+        illegal: /:/
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('matlab', function(hljs) {
+  var COMMON_CONTAINS = [
+    hljs.C_NUMBER_MODE,
+    {
+      className: 'string',
+      begin: '\'', end: '\'',
+      contains: [hljs.BACKSLASH_ESCAPE, {begin: '\'\''}]
+    }
+  ];
+  var TRANSPOSE = {
+    relevance: 0,
+    contains: [
+      {
+        className: 'operator', begin: /'['\.]*/
+      }
+    ]
+  };
+
+  return {
+    keywords: {
+      keyword:
+        'break case catch classdef continue else elseif end enumerated events for function ' +
+        'global if methods otherwise parfor persistent properties return spmd switch try while',
+      built_in:
+        'sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan ' +
+        'atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot ' +
+        'cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog ' +
+        'realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal ' +
+        'cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli ' +
+        'besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma ' +
+        'gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms ' +
+        'nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones ' +
+        'eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ' +
+        'ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril ' +
+        'triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute ' +
+        'shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan ' +
+        'isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal ' +
+        'rosser toeplitz vander wilkinson'
+    },
+    illegal: '(//|"|#|/\\*|\\s+/\\w+)',
+    contains: [
+      {
+        className: 'function',
+        beginKeywords: 'function', end: '$',
+        contains: [
+          hljs.UNDERSCORE_TITLE_MODE,
+          {
+              className: 'params',
+              begin: '\\(', end: '\\)'
+          },
+          {
+              className: 'params',
+              begin: '\\[', end: '\\]'
+          }
+        ]
+      },
+      {
+        begin: /[a-zA-Z_][a-zA-Z_0-9]*'['\.]*/,
+        returnBegin: true,
+        relevance: 0,
+        contains: [
+          {begin: /[a-zA-Z_][a-zA-Z_0-9]*/, relevance: 0},
+          TRANSPOSE.contains[0]
+        ]
+      },
+      {
+        className: 'matrix',
+        begin: '\\[', end: '\\]',
+        contains: COMMON_CONTAINS,
+        relevance: 0,
+        starts: TRANSPOSE
+      },
+      {
+        className: 'cell',
+        begin: '\\{', end: /}/,
+        contains: COMMON_CONTAINS,
+        relevance: 0,
+        starts: TRANSPOSE
+      },
+      {
+        // transpose operators at the end of a function call
+        begin: /\)/,
+        relevance: 0,
+        starts: TRANSPOSE
+      },
+      hljs.COMMENT('^\\s*\\%\\{\\s*$', '^\\s*\\%\\}\\s*$'),
+      hljs.COMMENT('\\%', '$')
+    ].concat(COMMON_CONTAINS)
+  };
+});
+
+hljs.registerLanguage('mel', function(hljs) {
+  return {
+    keywords:
+      'int float string vector matrix if else switch case default while do for in break ' +
+      'continue global proc return about abs addAttr addAttributeEditorNodeHelp addDynamic ' +
+      'addNewShelfTab addPP addPanelCategory addPrefixToName advanceToNextDrivenKey ' +
+      'affectedNet affects aimConstraint air alias aliasAttr align alignCtx alignCurve ' +
+      'alignSurface allViewFit ambientLight angle angleBetween animCone animCurveEditor ' +
+      'animDisplay animView annotate appendStringArray applicationName applyAttrPreset ' +
+      'applyTake arcLenDimContext arcLengthDimension arclen arrayMapper art3dPaintCtx ' +
+      'artAttrCtx artAttrPaintVertexCtx artAttrSkinPaintCtx artAttrTool artBuildPaintMenu ' +
+      'artFluidAttrCtx artPuttyCtx artSelectCtx artSetPaintCtx artUserPaintCtx assignCommand ' +
+      'assignInputDevice assignViewportFactories attachCurve attachDeviceAttr attachSurface ' +
+      'attrColorSliderGrp attrCompatibility attrControlGrp attrEnumOptionMenu ' +
+      'attrEnumOptionMenuGrp attrFieldGrp attrFieldSliderGrp attrNavigationControlGrp ' +
+      'attrPresetEditWin attributeExists attributeInfo attributeMenu attributeQuery ' +
+      'autoKeyframe autoPlace bakeClip bakeFluidShading bakePartialHistory bakeResults ' +
+      'bakeSimulation basename basenameEx batchRender bessel bevel bevelPlus binMembership ' +
+      'bindSkin blend2 blendShape blendShapeEditor blendShapePanel blendTwoAttr blindDataType ' +
+      'boneLattice boundary boxDollyCtx boxZoomCtx bufferCurve buildBookmarkMenu ' +
+      'buildKeyframeMenu button buttonManip CBG cacheFile cacheFileCombine cacheFileMerge ' +
+      'cacheFileTrack camera cameraView canCreateManip canvas capitalizeString catch ' +
+      'catchQuiet ceil changeSubdivComponentDisplayLevel changeSubdivRegion channelBox ' +
+      'character characterMap characterOutlineEditor characterize chdir checkBox checkBoxGrp ' +
+      'checkDefaultRenderGlobals choice circle circularFillet clamp clear clearCache clip ' +
+      'clipEditor clipEditorCurrentTimeCtx clipSchedule clipSchedulerOutliner clipTrimBefore ' +
+      'closeCurve closeSurface cluster cmdFileOutput cmdScrollFieldExecuter ' +
+      'cmdScrollFieldReporter cmdShell coarsenSubdivSelectionList collision color ' +
+      'colorAtPoint colorEditor colorIndex colorIndexSliderGrp colorSliderButtonGrp ' +
+      'colorSliderGrp columnLayout commandEcho commandLine commandPort compactHairSystem ' +
+      'componentEditor compositingInterop computePolysetVolume condition cone confirmDialog ' +
+      'connectAttr connectControl connectDynamic connectJoint connectionInfo constrain ' +
+      'constrainValue constructionHistory container containsMultibyte contextInfo control ' +
+      'convertFromOldLayers convertIffToPsd convertLightmap convertSolidTx convertTessellation ' +
+      'convertUnit copyArray copyFlexor copyKey copySkinWeights cos cpButton cpCache ' +
+      'cpClothSet cpCollision cpConstraint cpConvClothToMesh cpForces cpGetSolverAttr cpPanel ' +
+      'cpProperty cpRigidCollisionFilter cpSeam cpSetEdit cpSetSolverAttr cpSolver ' +
+      'cpSolverTypes cpTool cpUpdateClothUVs createDisplayLayer createDrawCtx createEditor ' +
+      'createLayeredPsdFile createMotionField createNewShelf createNode createRenderLayer ' +
+      'createSubdivRegion cross crossProduct ctxAbort ctxCompletion ctxEditMode ctxTraverse ' +
+      'currentCtx currentTime currentTimeCtx currentUnit curve curveAddPtCtx ' +
+      'curveCVCtx curveEPCtx curveEditorCtx curveIntersect curveMoveEPCtx curveOnSurface ' +
+      'curveSketchCtx cutKey cycleCheck cylinder dagPose date defaultLightListCheckBox ' +
+      'defaultNavigation defineDataServer defineVirtualDevice deformer deg_to_rad delete ' +
+      'deleteAttr deleteShadingGroupsAndMaterials deleteShelfTab deleteUI deleteUnusedBrushes ' +
+      'delrandstr detachCurve detachDeviceAttr detachSurface deviceEditor devicePanel dgInfo ' +
+      'dgdirty dgeval dgtimer dimWhen directKeyCtx directionalLight dirmap dirname disable ' +
+      'disconnectAttr disconnectJoint diskCache displacementToPoly displayAffected ' +
+      'displayColor displayCull displayLevelOfDetail displayPref displayRGBColor ' +
+      'displaySmoothness displayStats displayString displaySurface distanceDimContext ' +
+      'distanceDimension doBlur dolly dollyCtx dopeSheetEditor dot dotProduct ' +
+      'doubleProfileBirailSurface drag dragAttrContext draggerContext dropoffLocator ' +
+      'duplicate duplicateCurve duplicateSurface dynCache dynControl dynExport dynExpression ' +
+      'dynGlobals dynPaintEditor dynParticleCtx dynPref dynRelEdPanel dynRelEditor ' +
+      'dynamicLoad editAttrLimits editDisplayLayerGlobals editDisplayLayerMembers ' +
+      'editRenderLayerAdjustment editRenderLayerGlobals editRenderLayerMembers editor ' +
+      'editorTemplate effector emit emitter enableDevice encodeString endString endsWith env ' +
+      'equivalent equivalentTol erf error eval evalDeferred evalEcho event ' +
+      'exactWorldBoundingBox exclusiveLightCheckBox exec executeForEachObject exists exp ' +
+      'expression expressionEditorListen extendCurve extendSurface extrude fcheck fclose feof ' +
+      'fflush fgetline fgetword file fileBrowserDialog fileDialog fileExtension fileInfo ' +
+      'filetest filletCurve filter filterCurve filterExpand filterStudioImport ' +
+      'findAllIntersections findAnimCurves findKeyframe findMenuItem findRelatedSkinCluster ' +
+      'finder firstParentOf fitBspline flexor floatEq floatField floatFieldGrp floatScrollBar ' +
+      'floatSlider floatSlider2 floatSliderButtonGrp floatSliderGrp floor flow fluidCacheInfo ' +
+      'fluidEmitter fluidVoxelInfo flushUndo fmod fontDialog fopen formLayout format fprint ' +
+      'frameLayout fread freeFormFillet frewind fromNativePath fwrite gamma gauss ' +
+      'geometryConstraint getApplicationVersionAsFloat getAttr getClassification ' +
+      'getDefaultBrush getFileList getFluidAttr getInputDeviceRange getMayaPanelTypes ' +
+      'getModifiers getPanel getParticleAttr getPluginResource getenv getpid glRender ' +
+      'glRenderEditor globalStitch gmatch goal gotoBindPose grabColor gradientControl ' +
+      'gradientControlNoAttr graphDollyCtx graphSelectContext graphTrackCtx gravity grid ' +
+      'gridLayout group groupObjectsByName HfAddAttractorToAS HfAssignAS HfBuildEqualMap ' +
+      'HfBuildFurFiles HfBuildFurImages HfCancelAFR HfConnectASToHF HfCreateAttractor ' +
+      'HfDeleteAS HfEditAS HfPerformCreateAS HfRemoveAttractorFromAS HfSelectAttached ' +
+      'HfSelectAttractors HfUnAssignAS hardenPointCurve hardware hardwareRenderPanel ' +
+      'headsUpDisplay headsUpMessage help helpLine hermite hide hilite hitTest hotBox hotkey ' +
+      'hotkeyCheck hsv_to_rgb hudButton hudSlider hudSliderButton hwReflectionMap hwRender ' +
+      'hwRenderLoad hyperGraph hyperPanel hyperShade hypot iconTextButton iconTextCheckBox ' +
+      'iconTextRadioButton iconTextRadioCollection iconTextScrollList iconTextStaticLabel ' +
+      'ikHandle ikHandleCtx ikHandleDisplayScale ikSolver ikSplineHandleCtx ikSystem ' +
+      'ikSystemInfo ikfkDisplayMethod illustratorCurves image imfPlugins inheritTransform ' +
+      'insertJoint insertJointCtx insertKeyCtx insertKnotCurve insertKnotSurface instance ' +
+      'instanceable instancer intField intFieldGrp intScrollBar intSlider intSliderGrp ' +
+      'interToUI internalVar intersect iprEngine isAnimCurve isConnected isDirty isParentOf ' +
+      'isSameObject isTrue isValidObjectName isValidString isValidUiName isolateSelect ' +
+      'itemFilter itemFilterAttr itemFilterRender itemFilterType joint jointCluster jointCtx ' +
+      'jointDisplayScale jointLattice keyTangent keyframe keyframeOutliner ' +
+      'keyframeRegionCurrentTimeCtx keyframeRegionDirectKeyCtx keyframeRegionDollyCtx ' +
+      'keyframeRegionInsertKeyCtx keyframeRegionMoveKeyCtx keyframeRegionScaleKeyCtx ' +
+      'keyframeRegionSelectKeyCtx keyframeRegionSetKeyCtx keyframeRegionTrackCtx ' +
+      'keyframeStats lassoContext lattice latticeDeformKeyCtx launch launchImageEditor ' +
+      'layerButton layeredShaderPort layeredTexturePort layout layoutDialog lightList ' +
+      'lightListEditor lightListPanel lightlink lineIntersection linearPrecision linstep ' +
+      'listAnimatable listAttr listCameras listConnections listDeviceAttachments listHistory ' +
+      'listInputDeviceAxes listInputDeviceButtons listInputDevices listMenuAnnotation ' +
+      'listNodeTypes listPanelCategories listRelatives listSets listTransforms ' +
+      'listUnselected listerEditor loadFluid loadNewShelf loadPlugin ' +
+      'loadPluginLanguageResources loadPrefObjects localizedPanelLabel lockNode loft log ' +
+      'longNameOf lookThru ls lsThroughFilter lsType lsUI Mayatomr mag makeIdentity makeLive ' +
+      'makePaintable makeRoll makeSingleSurface makeTubeOn makebot manipMoveContext ' +
+      'manipMoveLimitsCtx manipOptions manipRotateContext manipRotateLimitsCtx ' +
+      'manipScaleContext manipScaleLimitsCtx marker match max memory menu menuBarLayout ' +
+      'menuEditor menuItem menuItemToShelf menuSet menuSetPref messageLine min minimizeApp ' +
+      'mirrorJoint modelCurrentTimeCtx modelEditor modelPanel mouse movIn movOut move ' +
+      'moveIKtoFK moveKeyCtx moveVertexAlongDirection multiProfileBirailSurface mute ' +
+      'nParticle nameCommand nameField namespace namespaceInfo newPanelItems newton nodeCast ' +
+      'nodeIconButton nodeOutliner nodePreset nodeType noise nonLinear normalConstraint ' +
+      'normalize nurbsBoolean nurbsCopyUVSet nurbsCube nurbsEditUV nurbsPlane nurbsSelect ' +
+      'nurbsSquare nurbsToPoly nurbsToPolygonsPref nurbsToSubdiv nurbsToSubdivPref ' +
+      'nurbsUVSet nurbsViewDirectionVector objExists objectCenter objectLayer objectType ' +
+      'objectTypeUI obsoleteProc oceanNurbsPreviewPlane offsetCurve offsetCurveOnSurface ' +
+      'offsetSurface openGLExtension openMayaPref optionMenu optionMenuGrp optionVar orbit ' +
+      'orbitCtx orientConstraint outlinerEditor outlinerPanel overrideModifier ' +
+      'paintEffectsDisplay pairBlend palettePort paneLayout panel panelConfiguration ' +
+      'panelHistory paramDimContext paramDimension paramLocator parent parentConstraint ' +
+      'particle particleExists particleInstancer particleRenderInfo partition pasteKey ' +
+      'pathAnimation pause pclose percent performanceOptions pfxstrokes pickWalk picture ' +
+      'pixelMove planarSrf plane play playbackOptions playblast plugAttr plugNode pluginInfo ' +
+      'pluginResourceUtil pointConstraint pointCurveConstraint pointLight pointMatrixMult ' +
+      'pointOnCurve pointOnSurface pointPosition poleVectorConstraint polyAppend ' +
+      'polyAppendFacetCtx polyAppendVertex polyAutoProjection polyAverageNormal ' +
+      'polyAverageVertex polyBevel polyBlendColor polyBlindData polyBoolOp polyBridgeEdge ' +
+      'polyCacheMonitor polyCheck polyChipOff polyClipboard polyCloseBorder polyCollapseEdge ' +
+      'polyCollapseFacet polyColorBlindData polyColorDel polyColorPerVertex polyColorSet ' +
+      'polyCompare polyCone polyCopyUV polyCrease polyCreaseCtx polyCreateFacet ' +
+      'polyCreateFacetCtx polyCube polyCut polyCutCtx polyCylinder polyCylindricalProjection ' +
+      'polyDelEdge polyDelFacet polyDelVertex polyDuplicateAndConnect polyDuplicateEdge ' +
+      'polyEditUV polyEditUVShell polyEvaluate polyExtrudeEdge polyExtrudeFacet ' +
+      'polyExtrudeVertex polyFlipEdge polyFlipUV polyForceUV polyGeoSampler polyHelix ' +
+      'polyInfo polyInstallAction polyLayoutUV polyListComponentConversion polyMapCut ' +
+      'polyMapDel polyMapSew polyMapSewMove polyMergeEdge polyMergeEdgeCtx polyMergeFacet ' +
+      'polyMergeFacetCtx polyMergeUV polyMergeVertex polyMirrorFace polyMoveEdge ' +
+      'polyMoveFacet polyMoveFacetUV polyMoveUV polyMoveVertex polyNormal polyNormalPerVertex ' +
+      'polyNormalizeUV polyOptUvs polyOptions polyOutput polyPipe polyPlanarProjection ' +
+      'polyPlane polyPlatonicSolid polyPoke polyPrimitive polyPrism polyProjection ' +
+      'polyPyramid polyQuad polyQueryBlindData polyReduce polySelect polySelectConstraint ' +
+      'polySelectConstraintMonitor polySelectCtx polySelectEditCtx polySeparate ' +
+      'polySetToFaceNormal polySewEdge polyShortestPathCtx polySmooth polySoftEdge ' +
+      'polySphere polySphericalProjection polySplit polySplitCtx polySplitEdge polySplitRing ' +
+      'polySplitVertex polyStraightenUVBorder polySubdivideEdge polySubdivideFacet ' +
+      'polyToSubdiv polyTorus polyTransfer polyTriangulate polyUVSet polyUnite polyWedgeFace ' +
+      'popen popupMenu pose pow preloadRefEd print progressBar progressWindow projFileViewer ' +
+      'projectCurve projectTangent projectionContext projectionManip promptDialog propModCtx ' +
+      'propMove psdChannelOutliner psdEditTextureFile psdExport psdTextureFile putenv pwd ' +
+      'python querySubdiv quit rad_to_deg radial radioButton radioButtonGrp radioCollection ' +
+      'radioMenuItemCollection rampColorPort rand randomizeFollicles randstate rangeControl ' +
+      'readTake rebuildCurve rebuildSurface recordAttr recordDevice redo reference ' +
+      'referenceEdit referenceQuery refineSubdivSelectionList refresh refreshAE ' +
+      'registerPluginResource rehash reloadImage removeJoint removeMultiInstance ' +
+      'removePanelCategory rename renameAttr renameSelectionList renameUI render ' +
+      'renderGlobalsNode renderInfo renderLayerButton renderLayerParent ' +
+      'renderLayerPostProcess renderLayerUnparent renderManip renderPartition ' +
+      'renderQualityNode renderSettings renderThumbnailUpdate renderWindowEditor ' +
+      'renderWindowSelectContext renderer reorder reorderDeformers requires reroot ' +
+      'resampleFluid resetAE resetPfxToPolyCamera resetTool resolutionNode retarget ' +
+      'reverseCurve reverseSurface revolve rgb_to_hsv rigidBody rigidSolver roll rollCtx ' +
+      'rootOf rot rotate rotationInterpolation roundConstantRadius rowColumnLayout rowLayout ' +
+      'runTimeCommand runup sampleImage saveAllShelves saveAttrPreset saveFluid saveImage ' +
+      'saveInitialState saveMenu savePrefObjects savePrefs saveShelf saveToolSettings scale ' +
+      'scaleBrushBrightness scaleComponents scaleConstraint scaleKey scaleKeyCtx sceneEditor ' +
+      'sceneUIReplacement scmh scriptCtx scriptEditorInfo scriptJob scriptNode scriptTable ' +
+      'scriptToShelf scriptedPanel scriptedPanelType scrollField scrollLayout sculpt ' +
+      'searchPathArray seed selLoadSettings select selectContext selectCurveCV selectKey ' +
+      'selectKeyCtx selectKeyframeRegionCtx selectMode selectPref selectPriority selectType ' +
+      'selectedNodes selectionConnection separator setAttr setAttrEnumResource ' +
+      'setAttrMapping setAttrNiceNameResource setConstraintRestPosition ' +
+      'setDefaultShadingGroup setDrivenKeyframe setDynamic setEditCtx setEditor setFluidAttr ' +
+      'setFocus setInfinity setInputDeviceMapping setKeyCtx setKeyPath setKeyframe ' +
+      'setKeyframeBlendshapeTargetWts setMenuMode setNodeNiceNameResource setNodeTypeFlag ' +
+      'setParent setParticleAttr setPfxToPolyCamera setPluginResource setProject ' +
+      'setStampDensity setStartupMessage setState setToolTo setUITemplate setXformManip sets ' +
+      'shadingConnection shadingGeometryRelCtx shadingLightRelCtx shadingNetworkCompare ' +
+      'shadingNode shapeCompare shelfButton shelfLayout shelfTabLayout shellField ' +
+      'shortNameOf showHelp showHidden showManipCtx showSelectionInTitle ' +
+      'showShadingGroupAttrEditor showWindow sign simplify sin singleProfileBirailSurface ' +
+      'size sizeBytes skinCluster skinPercent smoothCurve smoothTangentSurface smoothstep ' +
+      'snap2to2 snapKey snapMode snapTogetherCtx snapshot soft softMod softModCtx sort sound ' +
+      'soundControl source spaceLocator sphere sphrand spotLight spotLightPreviewPort ' +
+      'spreadSheetEditor spring sqrt squareSurface srtContext stackTrace startString ' +
+      'startsWith stitchAndExplodeShell stitchSurface stitchSurfacePoints strcmp ' +
+      'stringArrayCatenate stringArrayContains stringArrayCount stringArrayInsertAtIndex ' +
+      'stringArrayIntersector stringArrayRemove stringArrayRemoveAtIndex ' +
+      'stringArrayRemoveDuplicates stringArrayRemoveExact stringArrayToString ' +
+      'stringToStringArray strip stripPrefixFromName stroke subdAutoProjection ' +
+      'subdCleanTopology subdCollapse subdDuplicateAndConnect subdEditUV ' +
+      'subdListComponentConversion subdMapCut subdMapSewMove subdMatchTopology subdMirror ' +
+      'subdToBlind subdToPoly subdTransferUVsToCache subdiv subdivCrease ' +
+      'subdivDisplaySmoothness substitute substituteAllString substituteGeometry substring ' +
+      'surface surfaceSampler surfaceShaderList swatchDisplayPort switchTable symbolButton ' +
+      'symbolCheckBox sysFile system tabLayout tan tangentConstraint texLatticeDeformContext ' +
+      'texManipContext texMoveContext texMoveUVShellContext texRotateContext texScaleContext ' +
+      'texSelectContext texSelectShortestPathCtx texSmudgeUVContext texWinToolCtx text ' +
+      'textCurves textField textFieldButtonGrp textFieldGrp textManip textScrollList ' +
+      'textToShelf textureDisplacePlane textureHairColor texturePlacementContext ' +
+      'textureWindow threadCount threePointArcCtx timeControl timePort timerX toNativePath ' +
+      'toggle toggleAxis toggleWindowVisibility tokenize tokenizeList tolerance tolower ' +
+      'toolButton toolCollection toolDropped toolHasOptions toolPropertyWindow torus toupper ' +
+      'trace track trackCtx transferAttributes transformCompare transformLimits translator ' +
+      'trim trunc truncateFluidCache truncateHairCache tumble tumbleCtx turbulence ' +
+      'twoPointArcCtx uiRes uiTemplate unassignInputDevice undo undoInfo ungroup uniform unit ' +
+      'unloadPlugin untangleUV untitledFileName untrim upAxis updateAE userCtx uvLink ' +
+      'uvSnapshot validateShelfName vectorize view2dToolCtx viewCamera viewClipPlane ' +
+      'viewFit viewHeadOn viewLookAt viewManip viewPlace viewSet visor volumeAxis vortex ' +
+      'waitCursor warning webBrowser webBrowserPrefs whatIs window windowPref wire ' +
+      'wireContext workspace wrinkle wrinkleContext writeTake xbmLangPathList xform',
+    illegal: '</',
+    contains: [
+      hljs.C_NUMBER_MODE,
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      {
+        className: 'string',
+        begin: '`', end: '`',
+        contains: [hljs.BACKSLASH_ESCAPE]
+      },
+      {
+        className: 'variable',
+        variants: [
+          {begin: '\\$\\d'},
+          {begin: '[\\$\\%\\@](\\^\\w\\b|#\\w+|[^\\s\\w{]|{\\w+}|\\w+)'},
+          {begin: '\\*(\\^\\w\\b|#\\w+|[^\\s\\w{]|{\\w+}|\\w+)', relevance: 0}
+        ]
+      },
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE
+    ]
+  };
+});
+
+hljs.registerLanguage('mercury', function(hljs) {
+  var KEYWORDS = {
+    keyword:
+      'module use_module import_module include_module end_module initialise ' +
+      'mutable initialize finalize finalise interface implementation pred ' +
+      'mode func type inst solver any_pred any_func is semidet det nondet ' +
+      'multi erroneous failure cc_nondet cc_multi typeclass instance where ' +
+      'pragma promise external trace atomic or_else require_complete_switch ' +
+      'require_det require_semidet require_multi require_nondet ' +
+      'require_cc_multi require_cc_nondet require_erroneous require_failure',
+    pragma:
+      'inline no_inline type_spec source_file fact_table obsolete memo ' +
+      'loop_check minimal_model terminates does_not_terminate ' +
+      'check_termination promise_equivalent_clauses',
+    preprocessor:
+      'foreign_proc foreign_decl foreign_code foreign_type ' +
+      'foreign_import_module foreign_export_enum foreign_export ' +
+      'foreign_enum may_call_mercury will_not_call_mercury thread_safe ' +
+      'not_thread_safe maybe_thread_safe promise_pure promise_semipure ' +
+      'tabled_for_io local untrailed trailed attach_to_io_state ' +
+      'can_pass_as_mercury_type stable will_not_throw_exception ' +
+      'may_modify_trail will_not_modify_trail may_duplicate ' +
+      'may_not_duplicate affects_liveness does_not_affect_liveness ' +
+      'doesnt_affect_liveness no_sharing unknown_sharing sharing',
+    built_in:
+      'some all not if then else true fail false try catch catch_any ' +
+      'semidet_true semidet_false semidet_fail impure_true impure semipure'
+  };
+
+  var TODO = {
+    className: 'label',
+    begin: 'XXX', end: '$', endsWithParent: true,
+    relevance: 0
+  };
+  var COMMENT = hljs.inherit(hljs.C_LINE_COMMENT_MODE, {begin: '%'});
+  var CCOMMENT = hljs.inherit(hljs.C_BLOCK_COMMENT_MODE, {relevance: 0});
+  COMMENT.contains.push(TODO);
+  CCOMMENT.contains.push(TODO);
+
+  var NUMCODE = {
+    className: 'number',
+    begin: "0'.\\|0[box][0-9a-fA-F]*"
+  };
+
+  var ATOM = hljs.inherit(hljs.APOS_STRING_MODE, {relevance: 0});
+  var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, {relevance: 0});
+  var STRING_FMT = {
+    className: 'constant',
+    begin: '\\\\[abfnrtv]\\|\\\\x[0-9a-fA-F]*\\\\\\|%[-+# *.0-9]*[dioxXucsfeEgGp]',
+    relevance: 0
+  };
+  STRING.contains.push(STRING_FMT);
+
+  var IMPLICATION = {
+    className: 'built_in',
+    variants: [
+      {begin: '<=>'},
+      {begin: '<=', relevance: 0},
+      {begin: '=>', relevance: 0},
+      {begin: '/\\\\'},
+      {begin: '\\\\/'}
+    ]
+  };
+
+  var HEAD_BODY_CONJUNCTION = {
+    className: 'built_in',
+    variants: [
+      {begin: ':-\\|-->'},
+      {begin: '=', relevance: 0}
+    ]
+  };
+
+  return {
+    aliases: ['m', 'moo'],
+    keywords: KEYWORDS,
+    contains: [
+      IMPLICATION,
+      HEAD_BODY_CONJUNCTION,
+      COMMENT,
+      CCOMMENT,
+      NUMCODE,
+      hljs.NUMBER_MODE,
+      ATOM,
+      STRING,
+      {begin: /:-/} // relevance booster
+    ]
+  };
+});
+
+hljs.registerLanguage('mizar', function(hljs) {
+  return {
+    keywords:
+      'environ vocabularies notations constructors definitions ' +
+      'registrations theorems schemes requirements begin end definition ' +
+      'registration cluster existence pred func defpred deffunc theorem ' +
+      'proof let take assume then thus hence ex for st holds consider ' +
+      'reconsider such that and in provided of as from be being by means ' +
+      'equals implies iff redefine define now not or attr is mode ' +
+      'suppose per cases set thesis contradiction scheme reserve struct ' +
+      'correctness compatibility coherence symmetry assymetry ' +
+      'reflexivity irreflexivity connectedness uniqueness commutativity ' +
+      'idempotence involutiveness projectivity',
+    contains: [
+      hljs.COMMENT('::', '$')
+    ]
+  };
+});
+
+hljs.registerLanguage('perl', function(hljs) {
+  var PERL_KEYWORDS = 'getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ' +
+    'ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime ' +
+    'readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qq' +
+    'fileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent ' +
+    'shutdown dump chomp connect getsockname die socketpair close flock exists index shmget' +
+    'sub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr ' +
+    'unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 ' +
+    'getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline ' +
+    'endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand ' +
+    'mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink ' +
+    'getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr ' +
+    'untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link ' +
+    'getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller ' +
+    'lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and ' +
+    'sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 ' +
+    'chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach ' +
+    'tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedir' +
+    'ioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe ' +
+    'atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when';
+  var SUBST = {
+    className: 'subst',
+    begin: '[$@]\\{', end: '\\}',
+    keywords: PERL_KEYWORDS
+  };
+  var METHOD = {
+    begin: '->{', end: '}'
+    // contains defined later
+  };
+  var VAR = {
+    className: 'variable',
+    variants: [
+      {begin: /\$\d/},
+      {begin: /[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},
+      {begin: /[\$%@][^\s\w{]/, relevance: 0}
+    ]
+  };
+  var STRING_CONTAINS = [hljs.BACKSLASH_ESCAPE, SUBST, VAR];
+  var PERL_DEFAULT_CONTAINS = [
+    VAR,
+    hljs.HASH_COMMENT_MODE,
+    hljs.COMMENT(
+      '^\\=\\w',
+      '\\=cut',
+      {
+        endsWithParent: true
+      }
+    ),
+    METHOD,
+    {
+      className: 'string',
+      contains: STRING_CONTAINS,
+      variants: [
+        {
+          begin: 'q[qwxr]?\\s*\\(', end: '\\)',
+          relevance: 5
+        },
+        {
+          begin: 'q[qwxr]?\\s*\\[', end: '\\]',
+          relevance: 5
+        },
+        {
+          begin: 'q[qwxr]?\\s*\\{', end: '\\}',
+          relevance: 5
+        },
+        {
+          begin: 'q[qwxr]?\\s*\\|', end: '\\|',
+          relevance: 5
+        },
+        {
+          begin: 'q[qwxr]?\\s*\\<', end: '\\>',
+          relevance: 5
+        },
+        {
+          begin: 'qw\\s+q', end: 'q',
+          relevance: 5
+        },
+        {
+          begin: '\'', end: '\'',
+          contains: [hljs.BACKSLASH_ESCAPE]
+        },
+        {
+          begin: '"', end: '"'
+        },
+        {
+          begin: '`', end: '`',
+          contains: [hljs.BACKSLASH_ESCAPE]
+        },
+        {
+          begin: '{\\w+}',
+          contains: [],
+          relevance: 0
+        },
+        {
+          begin: '\-?\\w+\\s*\\=\\>',
+          contains: [],
+          relevance: 0
+        }
+      ]
+    },
+    {
+      className: 'number',
+      begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
+      relevance: 0
+    },
+    { // regexp container
+      begin: '(\\/\\/|' + hljs.RE_STARTERS_RE + '|\\b(split|return|print|reverse|grep)\\b)\\s*',
+      keywords: 'split return print reverse grep',
+      relevance: 0,
+      contains: [
+        hljs.HASH_COMMENT_MODE,
+        {
+          className: 'regexp',
+          begin: '(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*',
+          relevance: 10
+        },
+        {
+          className: 'regexp',
+          begin: '(m|qr)?/', end: '/[a-z]*',
+          contains: [hljs.BACKSLASH_ESCAPE],
+          relevance: 0 // allows empty "//" which is a common comment delimiter in other languages
+        }
+      ]
+    },
+    {
+      className: 'sub',
+      beginKeywords: 'sub', end: '(\\s*\\(.*?\\))?[;{]',
+      relevance: 5
+    },
+    {
+      className: 'operator',
+      begin: '-\\w\\b',
+      relevance: 0
+    },
+    {
+      begin: "^__DATA__$",
+      end: "^__END__$",
+      subLanguage: 'mojolicious',
+      contains: [
+        {
+            begin: "^@@.*",
+            end: "$",
+            className: "comment"
+        }
+      ]
+    }
+  ];
+  SUBST.contains = PERL_DEFAULT_CONTAINS;
+  METHOD.contains = PERL_DEFAULT_CONTAINS;
+
+  return {
+    aliases: ['pl'],
+    keywords: PERL_KEYWORDS,
+    contains: PERL_DEFAULT_CONTAINS
+  };
+});
+
+hljs.registerLanguage('mojolicious', function(hljs) {
+  return {
+    subLanguage: 'xml',
+    contains: [
+      {
+        className: 'preprocessor',
+        begin: '^__(END|DATA)__$'
+      },
+    // mojolicious line
+      {
+        begin: "^\\s*%{1,2}={0,2}", end: '$',
+        subLanguage: 'perl'
+      },
+    // mojolicious block
+      {
+        begin: "<%{1,2}={0,2}",
+        end: "={0,1}%>",
+        subLanguage: 'perl',
+        excludeBegin: true,
+        excludeEnd: true
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('monkey', function(hljs) {
+  var NUMBER = {
+    className: 'number', relevance: 0,
+    variants: [
+      {
+        begin: '[$][a-fA-F0-9]+'
+      },
+      hljs.NUMBER_MODE
+    ]
+  };
+
+  return {
+    case_insensitive: true,
+    keywords: {
+      keyword: 'public private property continue exit extern new try catch ' +
+        'eachin not abstract final select case default const local global field ' +
+        'end if then else elseif endif while wend repeat until forever for to step next return module inline throw',
+
+      built_in: 'DebugLog DebugStop Error Print ACos ACosr ASin ASinr ATan ATan2 ATan2r ATanr Abs Abs Ceil ' +
+        'Clamp Clamp Cos Cosr Exp Floor Log Max Max Min Min Pow Sgn Sgn Sin Sinr Sqrt Tan Tanr Seed PI HALFPI TWOPI',
+
+      literal: 'true false null and or shl shr mod'
+    },
+    illegal: /\/\*/,
+    contains: [
+      hljs.COMMENT('#rem', '#end'),
+      hljs.COMMENT(
+        "'",
+        '$',
+        {
+          relevance: 0
+        }
+      ),
+      {
+        className: 'function',
+        beginKeywords: 'function method', end: '[(=:]|$',
+        illegal: /\n/,
+        contains: [
+          hljs.UNDERSCORE_TITLE_MODE
+        ]
+      },
+      {
+        className: 'class',
+        beginKeywords: 'class interface', end: '$',
+        contains: [
+          {
+            beginKeywords: 'extends implements'
+          },
+          hljs.UNDERSCORE_TITLE_MODE
+        ]
+      },
+      {
+        className: 'variable',
+        begin: '\\b(self|super)\\b'
+      },
+      {
+        className: 'preprocessor',
+        beginKeywords: 'import',
+        end: '$'
+      },
+      {
+        className: 'preprocessor',
+        begin: '\\s*#', end: '$',
+        keywords: 'if else elseif endif end then'
+      },
+      {
+        className: 'pi',
+        begin: '^\\s*strict\\b'
+      },
+      {
+        beginKeywords: 'alias', end: '=',
+        contains: [hljs.UNDERSCORE_TITLE_MODE]
+      },
+      hljs.QUOTE_STRING_MODE,
+      NUMBER
+    ]
+  }
+});
+
+hljs.registerLanguage('nginx', function(hljs) {
+  var VAR = {
+    className: 'variable',
+    variants: [
+      {begin: /\$\d+/},
+      {begin: /\$\{/, end: /}/},
+      {begin: '[\\$\\@]' + hljs.UNDERSCORE_IDENT_RE}
+    ]
+  };
+  var DEFAULT = {
+    endsWithParent: true,
+    lexemes: '[a-z/_]+',
+    keywords: {
+      built_in:
+        'on off yes no true false none blocked debug info notice warn error crit ' +
+        'select break last permanent redirect kqueue rtsig epoll poll /dev/poll'
+    },
+    relevance: 0,
+    illegal: '=>',
+    contains: [
+      hljs.HASH_COMMENT_MODE,
+      {
+        className: 'string',
+        contains: [hljs.BACKSLASH_ESCAPE, VAR],
+        variants: [
+          {begin: /"/, end: /"/},
+          {begin: /'/, end: /'/}
+        ]
+      },
+      {
+        className: 'url',
+        begin: '([a-z]+):/', end: '\\s', endsWithParent: true, excludeEnd: true,
+        contains: [VAR]
+      },
+      {
+        className: 'regexp',
+        contains: [hljs.BACKSLASH_ESCAPE, VAR],
+        variants: [
+          {begin: "\\s\\^", end: "\\s|{|;", returnEnd: true},
+          // regexp locations (~, ~*)
+          {begin: "~\\*?\\s+", end: "\\s|{|;", returnEnd: true},
+          // *.example.com
+          {begin: "\\*(\\.[a-z\\-]+)+"},
+          // sub.example.*
+          {begin: "([a-z\\-]+\\.)+\\*"}
+        ]
+      },
+      // IP
+      {
+        className: 'number',
+        begin: '\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b'
+      },
+      // units
+      {
+        className: 'number',
+        begin: '\\b\\d+[kKmMgGdshdwy]*\\b',
+        relevance: 0
+      },
+      VAR
+    ]
+  };
+
+  return {
+    aliases: ['nginxconf'],
+    contains: [
+      hljs.HASH_COMMENT_MODE,
+      {
+        begin: hljs.UNDERSCORE_IDENT_RE + '\\s', end: ';|{', returnBegin: true,
+        contains: [
+          {
+            className: 'title',
+            begin: hljs.UNDERSCORE_IDENT_RE,
+            starts: DEFAULT
+          }
+        ],
+        relevance: 0
+      }
+    ],
+    illegal: '[^\\s\\}]'
+  };
+});
+
+hljs.registerLanguage('nimrod', function(hljs) {
+  return {
+    aliases: ['nim'],
+    keywords: {
+      keyword: 'addr and as asm bind block break|0 case|0 cast const|0 continue|0 converter discard distinct|10 div do elif else|0 end|0 enum|0 except export finally for from generic if|0 import|0 in include|0 interface is isnot|10 iterator|10 let|0 macro method|10 mixin mod nil not notin|10 object|0 of or out proc|10 ptr raise ref|10 return shl shr static template try|0 tuple type|0 using|0 var|0 when while|0 with without xor yield',
+      literal: 'shared guarded stdin stdout stderr result|10 true false'
+    },
+    contains: [ {
+        className: 'decorator', // Actually pragma
+        begin: /{\./,
+        end: /\.}/,
+        relevance: 10
+      }, {
+        className: 'string',
+        begin: /[a-zA-Z]\w*"/,
+        end: /"/,
+        contains: [{begin: /""/}]
+      }, {
+        className: 'string',
+        begin: /([a-zA-Z]\w*)?"""/,
+        end: /"""/
+      },
+      hljs.QUOTE_STRING_MODE,
+      {
+        className: 'type',
+        begin: /\b[A-Z]\w+\b/,
+        relevance: 0
+      }, {
+        className: 'type',
+        begin: /\b(int|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|float|float32|float64|bool|char|string|cstring|pointer|expr|stmt|void|auto|any|range|array|openarray|varargs|seq|set|clong|culong|cchar|cschar|cshort|cint|csize|clonglong|cfloat|cdouble|clongdouble|cuchar|cushort|cuint|culonglong|cstringarray|semistatic)\b/
+      }, {
+        className: 'number',
+        begin: /\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/,
+        relevance: 0
+      }, {
+        className: 'number',
+        begin: /\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/,
+        relevance: 0
+      }, {
+        className: 'number',
+        begin: /\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/,
+        relevance: 0
+      }, {
+        className: 'number',
+        begin: /\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/,
+        relevance: 0
+      },
+      hljs.HASH_COMMENT_MODE
+    ]
+  }
+});
+
+hljs.registerLanguage('nix', function(hljs) {
+  var NIX_KEYWORDS = {
+    keyword: 'rec with let in inherit assert if else then',
+    constant: 'true false or and null',
+    built_in:
+      'import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation'
+  };
+  var ANTIQUOTE = {
+    className: 'subst',
+    begin: /\$\{/,
+    end: /}/,
+    keywords: NIX_KEYWORDS
+  };
+  var ATTRS = {
+    className: 'variable',
+    // TODO: we have to figure out a way how to exclude \s*=
+    begin: /[a-zA-Z0-9-_]+(\s*=)/,
+    relevance: 0
+  };
+  var SINGLE_QUOTE = {
+    className: 'string',
+    begin: "''",
+    end: "''",
+    contains: [
+      ANTIQUOTE
+    ]
+  };
+  var DOUBLE_QUOTE = {
+    className: 'string',
+    begin: '"',
+    end: '"',
+    contains: [
+      ANTIQUOTE
+    ]
+  };
+  var EXPRESSIONS = [
+    hljs.NUMBER_MODE,
+    hljs.HASH_COMMENT_MODE,
+    hljs.C_BLOCK_COMMENT_MODE,
+    SINGLE_QUOTE,
+    DOUBLE_QUOTE,
+    ATTRS
+  ];
+  ANTIQUOTE.contains = EXPRESSIONS;
+  return {
+    aliases: ["nixos"],
+    keywords: NIX_KEYWORDS,
+    contains: EXPRESSIONS
+  };
+});
+
+hljs.registerLanguage('nsis', function(hljs) {
+  var CONSTANTS = {
+    className: 'symbol',
+    begin: '\\$(ADMINTOOLS|APPDATA|CDBURN_AREA|CMDLINE|COMMONFILES32|COMMONFILES64|COMMONFILES|COOKIES|DESKTOP|DOCUMENTS|EXEDIR|EXEFILE|EXEPATH|FAVORITES|FONTS|HISTORY|HWNDPARENT|INSTDIR|INTERNET_CACHE|LANGUAGE|LOCALAPPDATA|MUSIC|NETHOOD|OUTDIR|PICTURES|PLUGINSDIR|PRINTHOOD|PROFILE|PROGRAMFILES32|PROGRAMFILES64|PROGRAMFILES|QUICKLAUNCH|RECENT|RESOURCES_LOCALIZED|RESOURCES|SENDTO|SMPROGRAMS|SMSTARTUP|STARTMENU|SYSDIR|TEMP|TEMPLATES|VIDEOS|WINDIR)'
+  };
+
+  var DEFINES = {
+    // ${defines}
+    className: 'constant',
+    begin: '\\$+{[a-zA-Z0-9_]+}'
+  };
+
+  var VARIABLES = {
+    // $variables
+    className: 'variable',
+    begin: '\\$+[a-zA-Z0-9_]+',
+    illegal: '\\(\\){}'
+  };
+
+  var LANGUAGES = {
+    // $(language_strings)
+    className: 'constant',
+    begin: '\\$+\\([a-zA-Z0-9_]+\\)'
+  };
+
+  var PARAMETERS = {
+    // command parameters
+    className: 'params',
+    begin: '(ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HKCR|HKCU|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM|HKPD|HKU|IDABORT|IDCANCEL|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY)'
+  };
+
+  var COMPILER ={
+    // !compiler_flags
+    className: 'constant',
+    begin: '\\!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversionsystem|ifdef|ifmacrodef|ifmacrondef|ifndef|if|include|insertmacro|macroend|macro|makensis|packhdr|searchparse|searchreplace|tempfile|undef|verbose|warning)'
+  };
+
+  return {
+    case_insensitive: false,
+    keywords: {
+      keyword:
+      'Abort AddBrandingImage AddSize AllowRootDirInstall AllowSkipFiles AutoCloseWindow BGFont BGGradient BrandingText BringToFront Call CallInstDLL Caption ChangeUI CheckBitmap ClearErrors CompletedText ComponentText CopyFiles CRCCheck CreateDirectory CreateFont CreateShortCut Delete DeleteINISec DeleteINIStr DeleteRegKey DeleteRegValue DetailPrint DetailsButtonText DirText DirVar DirVerify EnableWindow EnumRegKey EnumRegValue Exch Exec ExecShell ExecWait ExpandEnvStrings File FileBufSize FileClose FileErrorText FileOpen FileRead FileReadByte FileReadUTF16LE FileReadWord FileSeek FileWrite FileWriteByte FileWriteUTF16LE FileWriteWord FindClose FindFirst FindNext FindWindow FlushINI FunctionEnd GetCurInstType GetCurrentAddress GetDlgItem GetDLLVersion GetDLLVersionLocal GetErrorLevel GetFileTime GetFileTimeLocal GetFullPathName GetFunctionAddress GetInstDirError GetLabelAddress GetTempFileName Goto HideWindow Icon IfAbort IfErrors IfFileExists IfRebootFlag IfSilent InitPluginsDir InstallButtonText InstallColors InstallDir InstallDirRegKey InstProgressFlags InstType InstTypeGetText InstTypeSetText IntCmp IntCmpU IntFmt IntOp IsWindow LangString LicenseBkColor LicenseData LicenseForceSelection LicenseLangString LicenseText LoadLanguageFile LockWindow LogSet LogText ManifestDPIAware ManifestSupportedOS MessageBox MiscButtonText Name Nop OutFile Page PageCallbacks PageExEnd Pop Push Quit ReadEnvStr ReadINIStr ReadRegDWORD ReadRegStr Reboot RegDLL Rename RequestExecutionLevel ReserveFile Return RMDir SearchPath SectionEnd SectionGetFlags SectionGetInstTypes SectionGetSize SectionGetText SectionGroupEnd SectionIn SectionSetFlags SectionSetInstTypes SectionSetSize SectionSetText SendMessage SetAutoClose SetBrandingImage SetCompress SetCompressor SetCompressorDictSize SetCtlColors SetCurInstType SetDatablockOptimize SetDateSave SetDetailsPrint SetDetailsView SetErrorLevel SetErrors SetFileAttributes SetFont SetOutPath SetOverwrite SetPluginUnload SetRebootFlag SetRegView SetShellVarContext SetSilent ShowInstDetails ShowUninstDetails ShowWindow SilentInstall SilentUnInstall Sleep SpaceTexts StrCmp StrCmpS StrCpy StrLen SubCaption SubSectionEnd Unicode UninstallButtonText UninstallCaption UninstallIcon UninstallSubCaption UninstallText UninstPage UnRegDLL Var VIAddVersionKey VIFileVersion VIProductVersion WindowIcon WriteINIStr WriteRegBin WriteRegDWORD WriteRegExpandStr WriteRegStr WriteUninstaller XPStyle',
+      literal:
+      'admin all auto both colored current false force hide highest lastused leave listonly none normal notset off on open print show silent silentlog smooth textonly true user '
+    },
+    contains: [
+      hljs.HASH_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      {
+        className: 'string',
+        begin: '"', end: '"',
+        illegal: '\\n',
+        contains: [
+          { // $\n, $\r, $\t, $$
+            className: 'symbol',
+            begin: '\\$(\\\\(n|r|t)|\\$)'
+          },
+          CONSTANTS,
+          DEFINES,
+          VARIABLES,
+          LANGUAGES
+        ]
+      },
+      hljs.COMMENT(
+        ';',
+        '$',
+        {
+          relevance: 0
+        }
+      ),
+      {
+        className: 'function',
+        beginKeywords: 'Function PageEx Section SectionGroup SubSection', end: '$'
+      },
+      COMPILER,
+      DEFINES,
+      VARIABLES,
+      LANGUAGES,
+      PARAMETERS,
+      hljs.NUMBER_MODE,
+      { // plug::ins
+        className: 'literal',
+        begin: hljs.IDENT_RE + '::' + hljs.IDENT_RE
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('objectivec', function(hljs) {
+  var API_CLASS = {
+    className: 'built_in',
+    begin: '(AV|CA|CF|CG|CI|MK|MP|NS|UI)\\w+',
+  };
+  var OBJC_KEYWORDS = {
+    keyword:
+      'int float while char export sizeof typedef const struct for union ' +
+      'unsigned long volatile static bool mutable if do return goto void ' +
+      'enum else break extern asm case short default double register explicit ' +
+      'signed typename this switch continue wchar_t inline readonly assign ' +
+      'readwrite self @synchronized id typeof ' +
+      'nonatomic super unichar IBOutlet IBAction strong weak copy ' +
+      'in out inout bycopy byref oneway __strong __weak __block __autoreleasing ' +
+      '@private @protected @public @try @property @end @throw @catch @finally ' +
+      '@autoreleasepool @synthesize @dynamic @selector @optional @required',
+    literal:
+      'false true FALSE TRUE nil YES NO NULL',
+    built_in:
+      'BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once'
+  };
+  var LEXEMES = /[a-zA-Z@][a-zA-Z0-9_]*/;
+  var CLASS_KEYWORDS = '@interface @class @protocol @implementation';
+  return {
+    aliases: ['mm', 'objc', 'obj-c'],
+    keywords: OBJC_KEYWORDS,
+    lexemes: LEXEMES,
+    illegal: '</',
+    contains: [
+      API_CLASS,
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      hljs.C_NUMBER_MODE,
+      hljs.QUOTE_STRING_MODE,
+      {
+        className: 'string',
+        variants: [
+          {
+            begin: '@"', end: '"',
+            illegal: '\\n',
+            contains: [hljs.BACKSLASH_ESCAPE]
+          },
+          {
+            begin: '\'', end: '[^\\\\]\'',
+            illegal: '[^\\\\][^\']'
+          }
+        ]
+      },
+      {
+        className: 'preprocessor',
+        begin: '#',
+        end: '$',
+        contains: [
+          {
+            className: 'title',
+            variants: [
+              { begin: '\"', end: '\"' },
+              { begin: '<', end: '>' }
+            ]
+          }
+        ]
+      },
+      {
+        className: 'class',
+        begin: '(' + CLASS_KEYWORDS.split(' ').join('|') + ')\\b', end: '({|$)', excludeEnd: true,
+        keywords: CLASS_KEYWORDS, lexemes: LEXEMES,
+        contains: [
+          hljs.UNDERSCORE_TITLE_MODE
+        ]
+      },
+      {
+        className: 'variable',
+        begin: '\\.'+hljs.UNDERSCORE_IDENT_RE,
+        relevance: 0
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('ocaml', function(hljs) {
+  /* missing support for heredoc-like string (OCaml 4.0.2+) */
+  return {
+    aliases: ['ml'],
+    keywords: {
+      keyword:
+        'and as assert asr begin class constraint do done downto else end ' +
+        'exception external for fun function functor if in include ' +
+        'inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method ' +
+        'mod module mutable new object of open! open or private rec sig struct ' +
+        'then to try type val! val virtual when while with ' +
+        /* camlp4 */
+        'parser value',
+      built_in:
+        /* built-in types */
+        'array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit ' +
+        /* (some) types in Pervasives */
+        'in_channel out_channel ref',
+      literal:
+        'true false'
+    },
+    illegal: /\/\/|>>/,
+    lexemes: '[a-z_]\\w*!?',
+    contains: [
+      {
+        className: 'literal',
+        begin: '\\[(\\|\\|)?\\]|\\(\\)',
+        relevance: 0
+      },
+      hljs.COMMENT(
+        '\\(\\*',
+        '\\*\\)',
+        {
+          contains: ['self']
+        }
+      ),
+      { /* type variable */
+        className: 'symbol',
+        begin: '\'[A-Za-z_](?!\')[\\w\']*'
+        /* the grammar is ambiguous on how 'a'b should be interpreted but not the compiler */
+      },
+      { /* polymorphic variant */
+        className: 'tag',
+        begin: '`[A-Z][\\w\']*'
+      },
+      { /* module or constructor */
+        className: 'type',
+        begin: '\\b[A-Z][\\w\']*',
+        relevance: 0
+      },
+      { /* don't color identifiers, but safely catch all identifiers with '*/
+        begin: '[a-z_]\\w*\'[\\w\']*'
+      },
+      hljs.inherit(hljs.APOS_STRING_MODE, {className: 'char', relevance: 0}),
+      hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),
+      {
+        className: 'number',
+        begin:
+          '\\b(0[xX][a-fA-F0-9_]+[Lln]?|' +
+          '0[oO][0-7_]+[Lln]?|' +
+          '0[bB][01_]+[Lln]?|' +
+          '[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)',
+        relevance: 0
+      },
+      {
+        begin: /[-=]>/ // relevance booster
+      }
+    ]
+  }
+});
+
+hljs.registerLanguage('openscad', function(hljs) {
+	var SPECIAL_VARS = {
+		className: 'keyword',
+		begin: '\\$(f[asn]|t|vp[rtd]|children)'
+	},
+	LITERALS = {
+		className: 'literal',
+		begin: 'false|true|PI|undef'
+	},
+	NUMBERS = {
+		className: 'number',
+		begin: '\\b\\d+(\\.\\d+)?(e-?\\d+)?', //adds 1e5, 1e-10
+		relevance: 0
+	},
+	STRING = hljs.inherit(hljs.QUOTE_STRING_MODE,{illegal: null}),
+	PREPRO = {
+		className: 'preprocessor',
+		keywords: 'include use',
+		begin: 'include|use <',
+		end: '>'
+	},
+	PARAMS = {
+		className: 'params',
+		begin: '\\(', end: '\\)',
+		contains: ['self', NUMBERS, STRING, SPECIAL_VARS, LITERALS]
+	},
+	MODIFIERS = {
+		className: 'built_in',
+		begin: '[*!#%]',
+		relevance: 0
+	},
+	FUNCTIONS = {
+		className: 'function',
+		beginKeywords: 'module function',
+		end: '\\=|\\{',
+		contains: [PARAMS, hljs.UNDERSCORE_TITLE_MODE]
+	};
+
+	return {
+		aliases: ['scad'],
+		keywords: {
+			keyword: 'function module include use for intersection_for if else \\%',
+			literal: 'false true PI undef',
+			built_in: 'circle square polygon text sphere cube cylinder polyhedron translate rotate scale resize mirror multmatrix color offset hull minkowski union difference intersection abs sign sin cos tan acos asin atan atan2 floor round ceil ln log pow sqrt exp rands min max concat lookup str chr search version version_num norm cross parent_module echo import import_dxf dxf_linear_extrude linear_extrude rotate_extrude surface projection render children dxf_cross dxf_dim let assign'
+		},
+		contains: [
+			hljs.C_LINE_COMMENT_MODE,
+			hljs.C_BLOCK_COMMENT_MODE,
+			NUMBERS,
+			PREPRO,
+			STRING,
+			SPECIAL_VARS,
+			MODIFIERS,
+			FUNCTIONS
+		]
+	}
+});
+
+hljs.registerLanguage('oxygene', function(hljs) {
+  var OXYGENE_KEYWORDS = 'abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue '+
+    'create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false '+
+    'final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited '+
+    'inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of '+
+    'old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly '+
+    'record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple '+
+    'type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal '+
+    'register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained';
+  var CURLY_COMMENT =  hljs.COMMENT(
+    '{',
+    '}',
+    {
+      relevance: 0
+    }
+  );
+  var PAREN_COMMENT = hljs.COMMENT(
+    '\\(\\*',
+    '\\*\\)',
+    {
+      relevance: 10
+    }
+  );
+  var STRING = {
+    className: 'string',
+    begin: '\'', end: '\'',
+    contains: [{begin: '\'\''}]
+  };
+  var CHAR_STRING = {
+    className: 'string', begin: '(#\\d+)+'
+  };
+  var FUNCTION = {
+    className: 'function',
+    beginKeywords: 'function constructor destructor procedure method', end: '[:;]',
+    keywords: 'function constructor|10 destructor|10 procedure|10 method|10',
+    contains: [
+      hljs.TITLE_MODE,
+      {
+        className: 'params',
+        begin: '\\(', end: '\\)',
+        keywords: OXYGENE_KEYWORDS,
+        contains: [STRING, CHAR_STRING]
+      },
+      CURLY_COMMENT, PAREN_COMMENT
+    ]
+  };
+  return {
+    case_insensitive: true,
+    keywords: OXYGENE_KEYWORDS,
+    illegal: '("|\\$[G-Zg-z]|\\/\\*|</|=>|->)',
+    contains: [
+      CURLY_COMMENT, PAREN_COMMENT, hljs.C_LINE_COMMENT_MODE,
+      STRING, CHAR_STRING,
+      hljs.NUMBER_MODE,
+      FUNCTION,
+      {
+        className: 'class',
+        begin: '=\\bclass\\b', end: 'end;',
+        keywords: OXYGENE_KEYWORDS,
+        contains: [
+          STRING, CHAR_STRING,
+          CURLY_COMMENT, PAREN_COMMENT, hljs.C_LINE_COMMENT_MODE,
+          FUNCTION
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('parser3', function(hljs) {
+  var CURLY_SUBCOMMENT = hljs.COMMENT(
+    '{',
+    '}',
+    {
+      contains: ['self']
+    }
+  );
+  return {
+    subLanguage: 'xml', relevance: 0,
+    contains: [
+      hljs.COMMENT('^#', '$'),
+      hljs.COMMENT(
+        '\\^rem{',
+        '}',
+        {
+          relevance: 10,
+          contains: [
+            CURLY_SUBCOMMENT
+          ]
+        }
+      ),
+      {
+        className: 'preprocessor',
+        begin: '^@(?:BASE|USE|CLASS|OPTIONS)$',
+        relevance: 10
+      },
+      {
+        className: 'title',
+        begin: '@[\\w\\-]+\\[[\\w^;\\-]*\\](?:\\[[\\w^;\\-]*\\])?(?:.*)$'
+      },
+      {
+        className: 'variable',
+        begin: '\\$\\{?[\\w\\-\\.\\:]+\\}?'
+      },
+      {
+        className: 'keyword',
+        begin: '\\^[\\w\\-\\.\\:]+'
+      },
+      {
+        className: 'number',
+        begin: '\\^#[0-9a-fA-F]+'
+      },
+      hljs.C_NUMBER_MODE
+    ]
+  };
+});
+
+hljs.registerLanguage('pf', function(hljs) {
+  var MACRO = {
+    className: 'variable',
+    begin: /\$[\w\d#@][\w\d_]*/
+  };
+  var TABLE = {
+    className: 'variable',
+    begin: /</, end: />/
+  };
+  var QUOTE_STRING = {
+    className: 'string',
+    begin: /"/, end: /"/
+  };
+
+  return {
+    aliases: ['pf.conf'],
+    lexemes: /[a-z0-9_<>-]+/,
+    keywords: {
+      built_in: /* block match pass are "actions" in pf.conf(5), the rest are
+                 * lexically similar top-level commands.
+                 */
+        'block match pass load anchor|5 antispoof|10 set table',
+      keyword:
+        'in out log quick on rdomain inet inet6 proto from port os to route' +
+        'allow-opts divert-packet divert-reply divert-to flags group icmp-type' +
+        'icmp6-type label once probability recieved-on rtable prio queue' +
+        'tos tag tagged user keep fragment for os drop' +
+        'af-to|10 binat-to|10 nat-to|10 rdr-to|10 bitmask least-stats random round-robin' +
+        'source-hash static-port' +
+        'dup-to reply-to route-to' +
+        'parent bandwidth default min max qlimit' +
+        'block-policy debug fingerprints hostid limit loginterface optimization' +
+        'reassemble ruleset-optimization basic none profile skip state-defaults' +
+        'state-policy timeout' +
+        'const counters persist' +
+        'no modulate synproxy state|5 floating if-bound no-sync pflow|10 sloppy' +
+        'source-track global rule max-src-nodes max-src-states max-src-conn' +
+        'max-src-conn-rate overload flush' +
+        'scrub|5 max-mss min-ttl no-df|10 random-id',
+      literal:
+        'all any no-route self urpf-failed egress|5 unknown'
+    },
+    contains: [
+      hljs.HASH_COMMENT_MODE,
+      hljs.NUMBER_MODE,
+      hljs.QUOTE_STRING_MODE,
+      MACRO,
+      TABLE
+    ]
+  };
+});
+
+hljs.registerLanguage('php', function(hljs) {
+  var VARIABLE = {
+    className: 'variable', begin: '\\$+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
+  };
+  var PREPROCESSOR = {
+    className: 'preprocessor', begin: /<\?(php)?|\?>/
+  };
+  var STRING = {
+    className: 'string',
+    contains: [hljs.BACKSLASH_ESCAPE, PREPROCESSOR],
+    variants: [
+      {
+        begin: 'b"', end: '"'
+      },
+      {
+        begin: 'b\'', end: '\''
+      },
+      hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null}),
+      hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null})
+    ]
+  };
+  var NUMBER = {variants: [hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE]};
+  return {
+    aliases: ['php3', 'php4', 'php5', 'php6'],
+    case_insensitive: true,
+    keywords:
+      'and include_once list abstract global private echo interface as static endswitch ' +
+      'array null if endwhile or const for endforeach self var while isset public ' +
+      'protected exit foreach throw elseif include __FILE__ empty require_once do xor ' +
+      'return parent clone use __CLASS__ __LINE__ else break print eval new ' +
+      'catch __METHOD__ case exception default die require __FUNCTION__ ' +
+      'enddeclare final try switch continue endfor endif declare unset true false ' +
+      'trait goto instanceof insteadof __DIR__ __NAMESPACE__ ' +
+      'yield finally',
+    contains: [
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.HASH_COMMENT_MODE,
+      hljs.COMMENT(
+        '/\\*',
+        '\\*/',
+        {
+          contains: [
+            {
+              className: 'doctag',
+              begin: '@[A-Za-z]+'
+            },
+            PREPROCESSOR
+          ]
+        }
+      ),
+      hljs.COMMENT(
+        '__halt_compiler.+?;',
+        false,
+        {
+          endsWithParent: true,
+          keywords: '__halt_compiler',
+          lexemes: hljs.UNDERSCORE_IDENT_RE
+        }
+      ),
+      {
+        className: 'string',
+        begin: /<<<['"]?\w+['"]?$/, end: /^\w+;?$/,
+        contains: [
+          hljs.BACKSLASH_ESCAPE,
+          {
+            className: 'subst',
+            variants: [
+              {begin: /\$\w+/},
+              {begin: /\{\$/, end: /\}/}
+            ]
+          }
+        ]
+      },
+      PREPROCESSOR,
+      VARIABLE,
+      {
+        // swallow composed identifiers to avoid parsing them as keywords
+        begin: /(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/
+      },
+      {
+        className: 'function',
+        beginKeywords: 'function', end: /[;{]/, excludeEnd: true,
+        illegal: '\\$|\\[|%',
+        contains: [
+          hljs.UNDERSCORE_TITLE_MODE,
+          {
+            className: 'params',
+            begin: '\\(', end: '\\)',
+            contains: [
+              'self',
+              VARIABLE,
+              hljs.C_BLOCK_COMMENT_MODE,
+              STRING,
+              NUMBER
+            ]
+          }
+        ]
+      },
+      {
+        className: 'class',
+        beginKeywords: 'class interface', end: '{', excludeEnd: true,
+        illegal: /[:\(\$"]/,
+        contains: [
+          {beginKeywords: 'extends implements'},
+          hljs.UNDERSCORE_TITLE_MODE
+        ]
+      },
+      {
+        beginKeywords: 'namespace', end: ';',
+        illegal: /[\.']/,
+        contains: [hljs.UNDERSCORE_TITLE_MODE]
+      },
+      {
+        beginKeywords: 'use', end: ';',
+        contains: [hljs.UNDERSCORE_TITLE_MODE]
+      },
+      {
+        begin: '=>' // No markup, just a relevance booster
+      },
+      STRING,
+      NUMBER
+    ]
+  };
+});
+
+hljs.registerLanguage('powershell', function(hljs) {
+  var backtickEscape = {
+    begin: '`[\\s\\S]',
+    relevance: 0
+  };
+  var VAR = {
+    className: 'variable',
+    variants: [
+      {begin: /\$[\w\d][\w\d_:]*/}
+    ]
+  };
+  var QUOTE_STRING = {
+    className: 'string',
+    begin: /"/, end: /"/,
+    contains: [
+      backtickEscape,
+      VAR,
+      {
+        className: 'variable',
+        begin: /\$[A-z]/, end: /[^A-z]/
+      }
+    ]
+  };
+  var APOS_STRING = {
+    className: 'string',
+    begin: /'/, end: /'/
+  };
+
+  return {
+    aliases: ['ps'],
+    lexemes: /-?[A-z\.\-]+/,
+    case_insensitive: true,
+    keywords: {
+      keyword: 'if else foreach return function do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch',
+      literal: '$null $true $false',
+      built_in: 'Add-Content Add-History Add-Member Add-PSSnapin Clear-Content Clear-Item Clear-Item Property Clear-Variable Compare-Object ConvertFrom-SecureString Convert-Path ConvertTo-Html ConvertTo-SecureString Copy-Item Copy-ItemProperty Export-Alias Export-Clixml Export-Console Export-Csv ForEach-Object Format-Custom Format-List Format-Table Format-Wide Get-Acl Get-Alias Get-AuthenticodeSignature Get-ChildItem Get-Command Get-Content Get-Credential Get-Culture Get-Date Get-EventLog Get-ExecutionPolicy Get-Help Get-History Get-Host Get-Item Get-ItemProperty Get-Location Get-Member Get-PfxCertificate Get-Process Get-PSDrive Get-PSProvider Get-PSSnapin Get-Service Get-TraceSource Get-UICulture Get-Unique Get-Variable Get-WmiObject Group-Object Import-Alias Import-Clixml Import-Csv Invoke-Expression Invoke-History Invoke-Item Join-Path Measure-Command Measure-Object Move-Item Move-ItemProperty New-Alias New-Item New-ItemProperty New-Object New-PSDrive New-Service New-TimeSpan New-Variable Out-Default Out-File Out-Host Out-Null Out-Printer Out-String Pop-Location Push-Location Read-Host Remove-Item Remove-ItemProperty Remove-PSDrive Remove-PSSnapin Remove-Variable Rename-Item Rename-ItemProperty Resolve-Path Restart-Service Resume-Service Select-Object Select-String Set-Acl Set-Alias Set-AuthenticodeSignature Set-Content Set-Date Set-ExecutionPolicy Set-Item Set-ItemProperty Set-Location Set-PSDebug Set-Service Set-TraceSource Set-Variable Sort-Object Split-Path Start-Service Start-Sleep Start-Transcript Stop-Process Stop-Service Stop-Transcript Suspend-Service Tee-Object Test-Path Trace-Command Update-FormatData Update-TypeData Where-Object Write-Debug Write-Error Write-Host Write-Output Write-Progress Write-Verbose Write-Warning',
+      operator: '-ne -eq -lt -gt -ge -le -not -like -notlike -match -notmatch -contains -notcontains -in -notin -replace'
+    },
+    contains: [
+      hljs.HASH_COMMENT_MODE,
+      hljs.NUMBER_MODE,
+      QUOTE_STRING,
+      APOS_STRING,
+      VAR
+    ]
+  };
+});
+
+hljs.registerLanguage('processing', function(hljs) {
+  return {
+    keywords: {
+      keyword: 'BufferedReader PVector PFont PImage PGraphics HashMap boolean byte char color ' +
+        'double float int long String Array FloatDict FloatList IntDict IntList JSONArray JSONObject ' +
+        'Object StringDict StringList Table TableRow XML ' +
+        // Java keywords
+        'false synchronized int abstract float private char boolean static null if const ' +
+        'for true while long throw strictfp finally protected import native final return void ' +
+        'enum else break transient new catch instanceof byte super volatile case assert short ' +
+        'package default double public try this switch continue throws protected public private',
+      constant: 'P2D P3D HALF_PI PI QUARTER_PI TAU TWO_PI',
+      variable: 'displayHeight displayWidth mouseY mouseX mousePressed pmouseX pmouseY key ' +
+        'keyCode pixels focused frameCount frameRate height width',
+      title: 'setup draw',
+      built_in: 'size createGraphics beginDraw createShape loadShape PShape arc ellipse line point ' +
+        'quad rect triangle bezier bezierDetail bezierPoint bezierTangent curve curveDetail curvePoint ' +
+        'curveTangent curveTightness shape shapeMode beginContour beginShape bezierVertex curveVertex ' +
+        'endContour endShape quadraticVertex vertex ellipseMode noSmooth rectMode smooth strokeCap ' +
+        'strokeJoin strokeWeight mouseClicked mouseDragged mouseMoved mousePressed mouseReleased ' +
+        'mouseWheel keyPressed keyPressedkeyReleased keyTyped print println save saveFrame day hour ' +
+        'millis minute month second year background clear colorMode fill noFill noStroke stroke alpha ' +
+        'blue brightness color green hue lerpColor red saturation modelX modelY modelZ screenX screenY ' +
+        'screenZ ambient emissive shininess specular add createImage beginCamera camera endCamera frustum ' +
+        'ortho perspective printCamera printProjection cursor frameRate noCursor exit loop noLoop popStyle ' +
+        'pushStyle redraw binary boolean byte char float hex int str unbinary unhex join match matchAll nf ' +
+        'nfc nfp nfs split splitTokens trim append arrayCopy concat expand reverse shorten sort splice subset ' +
+        'box sphere sphereDetail createInput createReader loadBytes loadJSONArray loadJSONObject loadStrings ' +
+        'loadTable loadXML open parseXML saveTable selectFolder selectInput beginRaw beginRecord createOutput ' +
+        'createWriter endRaw endRecord PrintWritersaveBytes saveJSONArray saveJSONObject saveStream saveStrings ' +
+        'saveXML selectOutput popMatrix printMatrix pushMatrix resetMatrix rotate rotateX rotateY rotateZ scale ' +
+        'shearX shearY translate ambientLight directionalLight lightFalloff lights lightSpecular noLights normal ' +
+        'pointLight spotLight image imageMode loadImage noTint requestImage tint texture textureMode textureWrap ' +
+        'blend copy filter get loadPixels set updatePixels blendMode loadShader PShaderresetShader shader createFont ' +
+        'loadFont text textFont textAlign textLeading textMode textSize textWidth textAscent textDescent abs ceil ' +
+        'constrain dist exp floor lerp log mag map max min norm pow round sq sqrt acos asin atan atan2 cos degrees ' +
+        'radians sin tan noise noiseDetail noiseSeed random randomGaussian randomSeed'
+    },
+    contains: [
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      hljs.C_NUMBER_MODE
+    ]
+  };
+});
+
+hljs.registerLanguage('profile', function(hljs) {
+  return {
+    contains: [
+      hljs.C_NUMBER_MODE,
+      {
+        className: 'built_in',
+        begin: '{', end: '}$',
+        excludeBegin: true, excludeEnd: true,
+        contains: [hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE],
+        relevance: 0
+      },
+      {
+        className: 'filename',
+        begin: '[a-zA-Z_][\\da-zA-Z_]+\\.[\\da-zA-Z_]{1,3}', end: ':',
+        excludeEnd: true
+      },
+      {
+        className: 'header',
+        begin: '(ncalls|tottime|cumtime)', end: '$',
+        keywords: 'ncalls tottime|10 cumtime|10 filename',
+        relevance: 10
+      },
+      {
+        className: 'summary',
+        begin: 'function calls', end: '$',
+        contains: [hljs.C_NUMBER_MODE],
+        relevance: 10
+      },
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      {
+        className: 'function',
+        begin: '\\(', end: '\\)$',
+        contains: [
+          hljs.UNDERSCORE_TITLE_MODE
+        ],
+        relevance: 0
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('prolog', function(hljs) {
+
+  var ATOM = {
+
+    className: 'atom',
+    begin: /[a-z][A-Za-z0-9_]*/,
+    relevance: 0
+  };
+
+  var VAR = {
+
+    className: 'name',
+    variants: [
+      {begin: /[A-Z][a-zA-Z0-9_]*/},
+      {begin: /_[A-Za-z0-9_]*/},
+    ],
+    relevance: 0
+  };
+
+  var PARENTED = {
+
+    begin: /\(/,
+    end: /\)/,
+    relevance: 0
+  };
+
+  var LIST = {
+
+    begin: /\[/,
+    end: /\]/
+  };
+
+  var LINE_COMMENT = {
+
+    className: 'comment',
+    begin: /%/, end: /$/,
+    contains: [hljs.PHRASAL_WORDS_MODE]
+  };
+
+  var BACKTICK_STRING = {
+
+    className: 'string',
+    begin: /`/, end: /`/,
+    contains: [hljs.BACKSLASH_ESCAPE]
+  };
+
+  var CHAR_CODE = {
+
+    className: 'string', // 0'a etc.
+    begin: /0\'(\\\'|.)/
+  };
+
+  var SPACE_CODE = {
+
+    className: 'string',
+    begin: /0\'\\s/ // 0'\s
+  };
+
+  var PRED_OP = { // relevance booster
+    begin: /:-/
+  };
+
+  var inner = [
+
+    ATOM,
+    VAR,
+    PARENTED,
+    PRED_OP,
+    LIST,
+    LINE_COMMENT,
+    hljs.C_BLOCK_COMMENT_MODE,
+    hljs.QUOTE_STRING_MODE,
+    hljs.APOS_STRING_MODE,
+    BACKTICK_STRING,
+    CHAR_CODE,
+    SPACE_CODE,
+    hljs.C_NUMBER_MODE
+  ];
+
+  PARENTED.contains = inner;
+  LIST.contains = inner;
+
+  return {
+    contains: inner.concat([
+      {begin: /\.$/} // relevance booster
+    ])
+  };
+});
+
+hljs.registerLanguage('protobuf', function(hljs) {
+  return {
+    keywords: {
+      keyword: 'package import option optional required repeated group',
+      built_in: 'double float int32 int64 uint32 uint64 sint32 sint64 ' +
+        'fixed32 fixed64 sfixed32 sfixed64 bool string bytes',
+      literal: 'true false'
+    },
+    contains: [
+      hljs.QUOTE_STRING_MODE,
+      hljs.NUMBER_MODE,
+      hljs.C_LINE_COMMENT_MODE,
+      {
+        className: 'class',
+        beginKeywords: 'message enum service', end: /\{/,
+        illegal: /\n/,
+        contains: [
+          hljs.inherit(hljs.TITLE_MODE, {
+            starts: {endsWithParent: true, excludeEnd: true} // hack: eating everything after the first title
+          })
+        ]
+      },
+      {
+        className: 'function',
+        beginKeywords: 'rpc',
+        end: /;/, excludeEnd: true,
+        keywords: 'rpc returns'
+      },
+      {
+        className: 'constant',
+        begin: /^\s*[A-Z_]+/,
+        end: /\s*=/, excludeEnd: true
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('puppet', function(hljs) {
+
+  var PUPPET_KEYWORDS = {
+    keyword:
+    /* language keywords */
+      'and case default else elsif false if in import enherits node or true undef unless main settings $string ',
+    literal:
+    /* metaparameters */
+      'alias audit before loglevel noop require subscribe tag ' +
+    /* normal attributes */
+      'owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check ' +
+      'en_address ip_address realname command environment hour monute month monthday special target weekday '+
+      'creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore ' +
+      'links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source ' +
+      'souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid '+
+      'ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel ' +
+      'native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options ' +
+      'device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use ' +
+      'message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform ' +
+      'responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running ' +
+      'start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age ' +
+      'password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled ' +
+      'enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist ' +
+      'priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey ' +
+      'sslverify mounted',
+    built_in:
+    /* core facts */
+      'architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers ' +
+      'domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces '+
+      'ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion ' +
+      'kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease ' +
+      'lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major ' +
+      'macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease '+
+      'operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion '+
+      'rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced '+
+      'selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime '+
+      'uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version'
+  };
+
+  var COMMENT = hljs.COMMENT('#', '$');
+
+  var IDENT_RE = '([A-Za-z_]|::)(\\w|::)*';
+
+  var TITLE = hljs.inherit(hljs.TITLE_MODE, {begin: IDENT_RE});
+
+  var VARIABLE = {className: 'variable', begin: '\\$' + IDENT_RE};
+
+  var STRING = {
+    className: 'string',
+    contains: [hljs.BACKSLASH_ESCAPE, VARIABLE],
+    variants: [
+      {begin: /'/, end: /'/},
+      {begin: /"/, end: /"/}
+    ]
+  };
+
+  return {
+    aliases: ['pp'],
+    contains: [
+      COMMENT,
+      VARIABLE,
+      STRING,
+      {
+        beginKeywords: 'class', end: '\\{|;',
+        illegal: /=/,
+        contains: [TITLE, COMMENT]
+      },
+      {
+        beginKeywords: 'define', end: /\{/,
+        contains: [
+          {
+            className: 'title', begin: hljs.IDENT_RE, endsParent: true
+          }
+        ]
+      },
+      {
+        begin: hljs.IDENT_RE + '\\s+\\{', returnBegin: true,
+        end: /\S/,
+        contains: [
+          {
+            className: 'name',
+            begin: hljs.IDENT_RE
+          },
+          {
+            begin: /\{/, end: /\}/,
+            keywords: PUPPET_KEYWORDS,
+            relevance: 0,
+            contains: [
+              STRING,
+              COMMENT,
+              {
+                begin:'[a-zA-Z_]+\\s*=>'
+              },
+              {
+                className: 'number',
+                begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
+                relevance: 0
+              },
+              VARIABLE
+            ]
+          }
+        ],
+        relevance: 0
+      }
+    ]
+  }
+});
+
+hljs.registerLanguage('python', function(hljs) {
+  var PROMPT = {
+    className: 'prompt',  begin: /^(>>>|\.\.\.) /
+  };
+  var STRING = {
+    className: 'string',
+    contains: [hljs.BACKSLASH_ESCAPE],
+    variants: [
+      {
+        begin: /(u|b)?r?'''/, end: /'''/,
+        contains: [PROMPT],
+        relevance: 10
+      },
+      {
+        begin: /(u|b)?r?"""/, end: /"""/,
+        contains: [PROMPT],
+        relevance: 10
+      },
+      {
+        begin: /(u|r|ur)'/, end: /'/,
+        relevance: 10
+      },
+      {
+        begin: /(u|r|ur)"/, end: /"/,
+        relevance: 10
+      },
+      {
+        begin: /(b|br)'/, end: /'/
+      },
+      {
+        begin: /(b|br)"/, end: /"/
+      },
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE
+    ]
+  };
+  var NUMBER = {
+    className: 'number', relevance: 0,
+    variants: [
+      {begin: hljs.BINARY_NUMBER_RE + '[lLjJ]?'},
+      {begin: '\\b(0o[0-7]+)[lLjJ]?'},
+      {begin: hljs.C_NUMBER_RE + '[lLjJ]?'}
+    ]
+  };
+  var PARAMS = {
+    className: 'params',
+    begin: /\(/, end: /\)/,
+    contains: ['self', PROMPT, NUMBER, STRING]
+  };
+  return {
+    aliases: ['py', 'gyp'],
+    keywords: {
+      keyword:
+        'and elif is global as in if from raise for except finally print import pass return ' +
+        'exec else break not with class assert yield try while continue del or def lambda ' +
+        'async await nonlocal|10 None True False',
+      built_in:
+        'Ellipsis NotImplemented'
+    },
+    illegal: /(<\/|->|\?)/,
+    contains: [
+      PROMPT,
+      NUMBER,
+      STRING,
+      hljs.HASH_COMMENT_MODE,
+      {
+        variants: [
+          {className: 'function', beginKeywords: 'def', relevance: 10},
+          {className: 'class', beginKeywords: 'class'}
+        ],
+        end: /:/,
+        illegal: /[${=;\n,]/,
+        contains: [hljs.UNDERSCORE_TITLE_MODE, PARAMS]
+      },
+      {
+        className: 'decorator',
+        begin: /^[\t ]*@/, end: /$/
+      },
+      {
+        begin: /\b(print|exec)\(/ // don’t highlight keywords-turned-functions in Python 3
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('q', function(hljs) {
+  var Q_KEYWORDS = {
+  keyword:
+    'do while select delete by update from',
+  constant:
+    '0b 1b',
+  built_in:
+    'neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum',
+  typename:
+    '`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid'
+  };
+  return {
+  aliases:['k', 'kdb'],
+  keywords: Q_KEYWORDS,
+  lexemes: /\b(`?)[A-Za-z0-9_]+\b/,
+  contains: [
+  hljs.C_LINE_COMMENT_MODE,
+    hljs.QUOTE_STRING_MODE,
+    hljs.C_NUMBER_MODE
+     ]
+  };
+});
+
+hljs.registerLanguage('r', function(hljs) {
+  var IDENT_RE = '([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*';
+
+  return {
+    contains: [
+      hljs.HASH_COMMENT_MODE,
+      {
+        begin: IDENT_RE,
+        lexemes: IDENT_RE,
+        keywords: {
+          keyword:
+            'function if in break next repeat else for return switch while try tryCatch ' +
+            'stop warning require library attach detach source setMethod setGeneric ' +
+            'setGroupGeneric setClass ...',
+          literal:
+            'NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 ' +
+            'NA_complex_|10'
+        },
+        relevance: 0
+      },
+      {
+        // hex value
+        className: 'number',
+        begin: "0[xX][0-9a-fA-F]+[Li]?\\b",
+        relevance: 0
+      },
+      {
+        // explicit integer
+        className: 'number',
+        begin: "\\d+(?:[eE][+\\-]?\\d*)?L\\b",
+        relevance: 0
+      },
+      {
+        // number with trailing decimal
+        className: 'number',
+        begin: "\\d+\\.(?!\\d)(?:i\\b)?",
+        relevance: 0
+      },
+      {
+        // number
+        className: 'number',
+        begin: "\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",
+        relevance: 0
+      },
+      {
+        // number with leading decimal
+        className: 'number',
+        begin: "\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",
+        relevance: 0
+      },
+
+      {
+        // escaped identifier
+        begin: '`',
+        end: '`',
+        relevance: 0
+      },
+
+      {
+        className: 'string',
+        contains: [hljs.BACKSLASH_ESCAPE],
+        variants: [
+          {begin: '"', end: '"'},
+          {begin: "'", end: "'"}
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('rib', function(hljs) {
+  return {
+    keywords:
+      'ArchiveRecord AreaLightSource Atmosphere Attribute AttributeBegin AttributeEnd Basis ' +
+      'Begin Blobby Bound Clipping ClippingPlane Color ColorSamples ConcatTransform Cone ' +
+      'CoordinateSystem CoordSysTransform CropWindow Curves Cylinder DepthOfField Detail ' +
+      'DetailRange Disk Displacement Display End ErrorHandler Exposure Exterior Format ' +
+      'FrameAspectRatio FrameBegin FrameEnd GeneralPolygon GeometricApproximation Geometry ' +
+      'Hider Hyperboloid Identity Illuminate Imager Interior LightSource ' +
+      'MakeCubeFaceEnvironment MakeLatLongEnvironment MakeShadow MakeTexture Matte ' +
+      'MotionBegin MotionEnd NuPatch ObjectBegin ObjectEnd ObjectInstance Opacity Option ' +
+      'Orientation Paraboloid Patch PatchMesh Perspective PixelFilter PixelSamples ' +
+      'PixelVariance Points PointsGeneralPolygons PointsPolygons Polygon Procedural Projection ' +
+      'Quantize ReadArchive RelativeDetail ReverseOrientation Rotate Scale ScreenWindow ' +
+      'ShadingInterpolation ShadingRate Shutter Sides Skew SolidBegin SolidEnd Sphere ' +
+      'SubdivisionMesh Surface TextureCoordinates Torus Transform TransformBegin TransformEnd ' +
+      'TransformPoints Translate TrimCurve WorldBegin WorldEnd',
+    illegal: '</',
+    contains: [
+      hljs.HASH_COMMENT_MODE,
+      hljs.C_NUMBER_MODE,
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE
+    ]
+  };
+});
+
+hljs.registerLanguage('roboconf', function(hljs) {
+  var IDENTIFIER = '[a-zA-Z-_][^\n{\r\n]+\\{';
+
+  return {
+    aliases: ['graph', 'instances'],
+    case_insensitive: true,
+    keywords: 'import',
+    contains: [
+      // Facet sections
+      {
+        className: 'facet',
+        begin: '^facet ' + IDENTIFIER,
+        end: '}',
+        keywords: 'facet installer exports children extends',
+        contains: [
+          hljs.HASH_COMMENT_MODE
+        ]
+      },
+
+      // Instance sections
+      {
+        className: 'instance-of',
+        begin: '^instance of ' + IDENTIFIER,
+        end: '}',
+        keywords: 'name count channels instance-data instance-state instance of',
+        contains: [
+          // Instance overridden properties
+          {
+            className: 'keyword',
+            begin: '[a-zA-Z-_]+( |\t)*:'
+          },
+          hljs.HASH_COMMENT_MODE
+        ]
+      },
+
+      // Component sections
+      {
+        className: 'component',
+        begin: '^' + IDENTIFIER,
+        end: '}',
+        lexemes: '\\(?[a-zA-Z]+\\)?',
+        keywords: 'installer exports children extends imports facets alias (optional)',
+        contains: [
+          // Imported component variables
+          {
+            className: 'string',
+            begin: '\\.[a-zA-Z-_]+',
+            end: '\\s|,|;',
+            excludeEnd: true
+          },
+          hljs.HASH_COMMENT_MODE
+        ]
+      },
+
+      // Comments
+      hljs.HASH_COMMENT_MODE
+    ]
+  };
+});
+
+hljs.registerLanguage('rsl', function(hljs) {
+  return {
+    keywords: {
+      keyword:
+        'float color point normal vector matrix while for if do return else break extern continue',
+      built_in:
+        'abs acos ambient area asin atan atmosphere attribute calculatenormal ceil cellnoise ' +
+        'clamp comp concat cos degrees depth Deriv diffuse distance Du Dv environment exp ' +
+        'faceforward filterstep floor format fresnel incident length lightsource log match ' +
+        'max min mod noise normalize ntransform opposite option phong pnoise pow printf ' +
+        'ptlined radians random reflect refract renderinfo round setcomp setxcomp setycomp ' +
+        'setzcomp shadow sign sin smoothstep specular specularbrdf spline sqrt step tan ' +
+        'texture textureinfo trace transform vtransform xcomp ycomp zcomp'
+    },
+    illegal: '</',
+    contains: [
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      hljs.QUOTE_STRING_MODE,
+      hljs.APOS_STRING_MODE,
+      hljs.C_NUMBER_MODE,
+      {
+        className: 'preprocessor',
+        begin: '#', end: '$'
+      },
+      {
+        className: 'shader',
+        beginKeywords: 'surface displacement light volume imager', end: '\\('
+      },
+      {
+        className: 'shading',
+        beginKeywords: 'illuminate illuminance gather', end: '\\('
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('ruleslanguage', function(hljs) {
+  return {
+    keywords: {
+       keyword: 'BILL_PERIOD BILL_START BILL_STOP RS_EFFECTIVE_START RS_EFFECTIVE_STOP RS_JURIS_CODE RS_OPCO_CODE ' +
+         'INTDADDATTRIBUTE|5 INTDADDVMSG|5 INTDBLOCKOP|5 INTDBLOCKOPNA|5 INTDCLOSE|5 INTDCOUNT|5 ' +
+         'INTDCOUNTSTATUSCODE|5 INTDCREATEMASK|5 INTDCREATEDAYMASK|5 INTDCREATEFACTORMASK|5 ' +
+         'INTDCREATEHANDLE|5 INTDCREATEOVERRIDEDAYMASK|5 INTDCREATEOVERRIDEMASK|5 ' +
+         'INTDCREATESTATUSCODEMASK|5 INTDCREATETOUPERIOD|5 INTDDELETE|5 INTDDIPTEST|5 INTDEXPORT|5 ' +
+         'INTDGETERRORCODE|5 INTDGETERRORMESSAGE|5 INTDISEQUAL|5 INTDJOIN|5 INTDLOAD|5 INTDLOADACTUALCUT|5 ' +
+         'INTDLOADDATES|5 INTDLOADHIST|5 INTDLOADLIST|5 INTDLOADLISTDATES|5 INTDLOADLISTENERGY|5 ' +
+         'INTDLOADLISTHIST|5 INTDLOADRELATEDCHANNEL|5 INTDLOADSP|5 INTDLOADSTAGING|5 INTDLOADUOM|5 ' +
+         'INTDLOADUOMDATES|5 INTDLOADUOMHIST|5 INTDLOADVERSION|5 INTDOPEN|5 INTDREADFIRST|5 INTDREADNEXT|5 ' +
+         'INTDRECCOUNT|5 INTDRELEASE|5 INTDREPLACE|5 INTDROLLAVG|5 INTDROLLPEAK|5 INTDSCALAROP|5 INTDSCALE|5 ' +
+         'INTDSETATTRIBUTE|5 INTDSETDSTPARTICIPANT|5 INTDSETSTRING|5 INTDSETVALUE|5 INTDSETVALUESTATUS|5 ' +
+         'INTDSHIFTSTARTTIME|5 INTDSMOOTH|5 INTDSORT|5 INTDSPIKETEST|5 INTDSUBSET|5 INTDTOU|5 ' +
+         'INTDTOURELEASE|5 INTDTOUVALUE|5 INTDUPDATESTATS|5 INTDVALUE|5 STDEV INTDDELETEEX|5 ' +
+         'INTDLOADEXACTUAL|5 INTDLOADEXCUT|5 INTDLOADEXDATES|5 INTDLOADEX|5 INTDLOADEXRELATEDCHANNEL|5 ' +
+         'INTDSAVEEX|5 MVLOAD|5 MVLOADACCT|5 MVLOADACCTDATES|5 MVLOADACCTHIST|5 MVLOADDATES|5 MVLOADHIST|5 ' +
+         'MVLOADLIST|5 MVLOADLISTDATES|5 MVLOADLISTHIST|5 IF FOR NEXT DONE SELECT END CALL ABORT CLEAR CHANNEL FACTOR LIST NUMBER ' +
+         'OVERRIDE SET WEEK DISTRIBUTIONNODE ELSE WHEN THEN OTHERWISE IENUM CSV INCLUDE LEAVE RIDER SAVE DELETE ' +
+         'NOVALUE SECTION WARN SAVE_UPDATE DETERMINANT LABEL REPORT REVENUE EACH ' +
+         'IN FROM TOTAL CHARGE BLOCK AND OR CSV_FILE RATE_CODE AUXILIARY_DEMAND ' +
+         'UIDACCOUNT RS BILL_PERIOD_SELECT HOURS_PER_MONTH INTD_ERROR_STOP SEASON_SCHEDULE_NAME ' +
+         'ACCOUNTFACTOR ARRAYUPPERBOUND CALLSTOREDPROC GETADOCONNECTION GETCONNECT GETDATASOURCE ' +
+         'GETQUALIFIER GETUSERID HASVALUE LISTCOUNT LISTOP LISTUPDATE LISTVALUE PRORATEFACTOR RSPRORATE ' +
+         'SETBINPATH SETDBMONITOR WQ_OPEN BILLINGHOURS DATE DATEFROMFLOAT DATETIMEFROMSTRING ' +
+         'DATETIMETOSTRING DATETOFLOAT DAY DAYDIFF DAYNAME DBDATETIME HOUR MINUTE MONTH MONTHDIFF ' +
+         'MONTHHOURS MONTHNAME ROUNDDATE SAMEWEEKDAYLASTYEAR SECOND WEEKDAY WEEKDIFF YEAR YEARDAY ' +
+         'YEARSTR COMPSUM HISTCOUNT HISTMAX HISTMIN HISTMINNZ HISTVALUE MAXNRANGE MAXRANGE MINRANGE ' +
+         'COMPIKVA COMPKVA COMPKVARFROMKQKW COMPLF IDATTR FLAG LF2KW LF2KWH MAXKW POWERFACTOR ' +
+         'READING2USAGE AVGSEASON MAXSEASON MONTHLYMERGE SEASONVALUE SUMSEASON ACCTREADDATES ' +
+         'ACCTTABLELOAD CONFIGADD CONFIGGET CREATEOBJECT CREATEREPORT EMAILCLIENT EXPBLKMDMUSAGE ' +
+         'EXPMDMUSAGE EXPORT_USAGE FACTORINEFFECT GETUSERSPECIFIEDSTOP INEFFECT ISHOLIDAY RUNRATE ' +
+         'SAVE_PROFILE SETREPORTTITLE USEREXIT WATFORRUNRATE TO TABLE ACOS ASIN ATAN ATAN2 BITAND CEIL ' +
+         'COS COSECANT COSH COTANGENT DIVQUOT DIVREM EXP FABS FLOOR FMOD FREPM FREXPN LOG LOG10 MAX MAXN ' +
+         'MIN MINNZ MODF POW ROUND ROUND2VALUE ROUNDINT SECANT SIN SINH SQROOT TAN TANH FLOAT2STRING ' +
+         'FLOAT2STRINGNC INSTR LEFT LEN LTRIM MID RIGHT RTRIM STRING STRINGNC TOLOWER TOUPPER TRIM ' +
+         'NUMDAYS READ_DATE STAGING',
+       built_in: 'IDENTIFIER OPTIONS XML_ELEMENT XML_OP XML_ELEMENT_OF DOMDOCCREATE DOMDOCLOADFILE DOMDOCLOADXML ' +
+         'DOMDOCSAVEFILE DOMDOCGETROOT DOMDOCADDPI DOMNODEGETNAME DOMNODEGETTYPE DOMNODEGETVALUE DOMNODEGETCHILDCT ' +
+         'DOMNODEGETFIRSTCHILD DOMNODEGETSIBLING DOMNODECREATECHILDELEMENT DOMNODESETATTRIBUTE ' +
+         'DOMNODEGETCHILDELEMENTCT DOMNODEGETFIRSTCHILDELEMENT DOMNODEGETSIBLINGELEMENT DOMNODEGETATTRIBUTECT ' +
+         'DOMNODEGETATTRIBUTEI DOMNODEGETATTRIBUTEBYNAME DOMNODEGETBYNAME'
+    },
+    contains: [
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      hljs.C_NUMBER_MODE,
+      {
+        className: 'array',
+        variants: [
+          {begin: '#\\s+[a-zA-Z\\ \\.]*', relevance: 0}, // looks like #-comment
+          {begin: '#[a-zA-Z\\ \\.]+'}
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('rust', function(hljs) {
+  var NUM_SUFFIX = '([uif](8|16|32|64|size))\?';
+  var BLOCK_COMMENT = hljs.inherit(hljs.C_BLOCK_COMMENT_MODE);
+  BLOCK_COMMENT.contains.push('self');
+  return {
+    aliases: ['rs'],
+    keywords: {
+      keyword:
+        'alignof as be box break const continue crate do else enum extern ' +
+        'false fn for if impl in let loop match mod mut offsetof once priv ' +
+        'proc pub pure ref return self Self sizeof static struct super trait true ' +
+        'type typeof unsafe unsized use virtual while where yield ' +
+        'int i8 i16 i32 i64 ' +
+        'uint u8 u32 u64 ' +
+        'float f32 f64 ' +
+        'str char bool',
+      built_in:
+        // prelude
+        'Copy Send Sized Sync Drop Fn FnMut FnOnce drop Box ToOwned Clone ' +
+        'PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator ' +
+        'Extend IntoIterator DoubleEndedIterator ExactSizeIterator Option ' +
+        'Some None Result Ok Err SliceConcatExt String ToString Vec ' +
+        // macros
+        'assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! ' +
+        'debug_assert! debug_assert_eq! env! panic! file! format! format_args! ' +
+        'include_bin! include_str! line! local_data_key! module_path! ' +
+        'option_env! print! println! select! stringify! try! unimplemented! ' +
+        'unreachable! vec! write! writeln!'
+    },
+    lexemes: hljs.IDENT_RE + '!?',
+    illegal: '</',
+    contains: [
+      hljs.C_LINE_COMMENT_MODE,
+      BLOCK_COMMENT,
+      hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),
+      {
+        className: 'string',
+        variants: [
+           { begin: /r(#*)".*?"\1(?!#)/ },
+           { begin: /'\\?(x\w{2}|u\w{4}|U\w{8}|.)'/ },
+           { begin: /'[a-zA-Z_][a-zA-Z0-9_]*/ }
+        ]
+      },
+      {
+        className: 'number',
+        variants: [
+          { begin: '\\b0b([01_]+)' + NUM_SUFFIX },
+          { begin: '\\b0o([0-7_]+)' + NUM_SUFFIX },
+          { begin: '\\b0x([A-Fa-f0-9_]+)' + NUM_SUFFIX },
+          { begin: '\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)' +
+                   NUM_SUFFIX
+          }
+        ],
+        relevance: 0
+      },
+      {
+        className: 'function',
+        beginKeywords: 'fn', end: '(\\(|<)', excludeEnd: true,
+        contains: [hljs.UNDERSCORE_TITLE_MODE]
+      },
+      {
+        className: 'preprocessor',
+        begin: '#\\!?\\[', end: '\\]'
+      },
+      {
+        beginKeywords: 'type', end: '(=|<)',
+        contains: [hljs.UNDERSCORE_TITLE_MODE],
+        illegal: '\\S'
+      },
+      {
+        beginKeywords: 'trait enum', end: '{',
+        contains: [
+          hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, {endsParent: true})
+        ],
+        illegal: '[\\w\\d]'
+      },
+      {
+        begin: hljs.IDENT_RE + '::'
+      },
+      {
+        begin: '->'
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('scala', function(hljs) {
+
+  var ANNOTATION = {
+    className: 'annotation', begin: '@[A-Za-z]+'
+  };
+
+  var STRING = {
+    className: 'string',
+    begin: 'u?r?"""', end: '"""',
+    relevance: 10
+  };
+
+  var SYMBOL = {
+    className: 'symbol',
+    begin: '\'\\w[\\w\\d_]*(?!\')'
+  };
+
+  var TYPE = {
+    className: 'type',
+    begin: '\\b[A-Z][A-Za-z0-9_]*',
+    relevance: 0
+  };
+
+  var NAME = {
+    className: 'title',
+    begin: /[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,
+    relevance: 0
+  };
+
+  var CLASS = {
+    className: 'class',
+    beginKeywords: 'class object trait type',
+    end: /[:={\[(\n;]/,
+    contains: [{className: 'keyword', beginKeywords: 'extends with', relevance: 10}, NAME]
+  };
+
+  var METHOD = {
+    className: 'function',
+    beginKeywords: 'def',
+    end: /[:={\[(\n;]/,
+    contains: [NAME]
+  };
+
+  return {
+    keywords: {
+      literal: 'true false null',
+      keyword: 'type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit'
+    },
+    contains: [
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      STRING,
+      hljs.QUOTE_STRING_MODE,
+      SYMBOL,
+      TYPE,
+      METHOD,
+      CLASS,
+      hljs.C_NUMBER_MODE,
+      ANNOTATION
+    ]
+  };
+});
+
+hljs.registerLanguage('scheme', function(hljs) {
+  var SCHEME_IDENT_RE = '[^\\(\\)\\[\\]\\{\\}",\'`;#|\\\\\\s]+';
+  var SCHEME_SIMPLE_NUMBER_RE = '(\\-|\\+)?\\d+([./]\\d+)?';
+  var SCHEME_COMPLEX_NUMBER_RE = SCHEME_SIMPLE_NUMBER_RE + '[+\\-]' + SCHEME_SIMPLE_NUMBER_RE + 'i';
+  var BUILTINS = {
+    built_in:
+      'case-lambda call/cc class define-class exit-handler field import ' +
+      'inherit init-field interface let*-values let-values let/ec mixin ' +
+      'opt-lambda override protect provide public rename require ' +
+      'require-for-syntax syntax syntax-case syntax-error unit/sig unless ' +
+      'when with-syntax and begin call-with-current-continuation ' +
+      'call-with-input-file call-with-output-file case cond define ' +
+      'define-syntax delay do dynamic-wind else for-each if lambda let let* ' +
+      'let-syntax letrec letrec-syntax map or syntax-rules \' * + , ,@ - ... / ' +
+      '; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan ' +
+      'boolean? caar cadr call-with-input-file call-with-output-file ' +
+      'call-with-values car cdddar cddddr cdr ceiling char->integer ' +
+      'char-alphabetic? char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? ' +
+      'char-downcase char-lower-case? char-numeric? char-ready? char-upcase ' +
+      'char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? ' +
+      'char? close-input-port close-output-port complex? cons cos ' +
+      'current-input-port current-output-port denominator display eof-object? ' +
+      'eq? equal? eqv? eval even? exact->inexact exact? exp expt floor ' +
+      'force gcd imag-part inexact->exact inexact? input-port? integer->char ' +
+      'integer? interaction-environment lcm length list list->string ' +
+      'list->vector list-ref list-tail list? load log magnitude make-polar ' +
+      'make-rectangular make-string make-vector max member memq memv min ' +
+      'modulo negative? newline not null-environment null? number->string ' +
+      'number? numerator odd? open-input-file open-output-file output-port? ' +
+      'pair? peek-char port? positive? procedure? quasiquote quote quotient ' +
+      'rational? rationalize read read-char real-part real? remainder reverse ' +
+      'round scheme-report-environment set! set-car! set-cdr! sin sqrt string ' +
+      'string->list string->number string->symbol string-append string-ci<=? ' +
+      'string-ci<? string-ci=? string-ci>=? string-ci>? string-copy ' +
+      'string-fill! string-length string-ref string-set! string<=? string<? ' +
+      'string=? string>=? string>? string? substring symbol->string symbol? ' +
+      'tan transcript-off transcript-on truncate values vector ' +
+      'vector->list vector-fill! vector-length vector-ref vector-set! ' +
+      'with-input-from-file with-output-to-file write write-char zero?'
+  };
+
+  var SHEBANG = {
+    className: 'shebang',
+    begin: '^#!',
+    end: '$'
+  };
+
+  var LITERAL = {
+    className: 'literal',
+    begin: '(#t|#f|#\\\\' + SCHEME_IDENT_RE + '|#\\\\.)'
+  };
+
+  var NUMBER = {
+    className: 'number',
+    variants: [
+      { begin: SCHEME_SIMPLE_NUMBER_RE, relevance: 0 },
+      { begin: SCHEME_COMPLEX_NUMBER_RE, relevance: 0 },
+      { begin: '#b[0-1]+(/[0-1]+)?' },
+      { begin: '#o[0-7]+(/[0-7]+)?' },
+      { begin: '#x[0-9a-f]+(/[0-9a-f]+)?' }
+    ]
+  };
+
+  var STRING = hljs.QUOTE_STRING_MODE;
+
+  var REGULAR_EXPRESSION = {
+    className: 'regexp',
+    begin: '#[pr]x"',
+    end: '[^\\\\]"'
+  };
+
+  var COMMENT_MODES = [
+    hljs.COMMENT(
+      ';',
+      '$',
+      {
+        relevance: 0
+      }
+    ),
+    hljs.COMMENT('#\\|', '\\|#')
+  ];
+
+  var IDENT = {
+    begin: SCHEME_IDENT_RE,
+    relevance: 0
+  };
+
+  var QUOTED_IDENT = {
+    className: 'variable',
+    begin: '\'' + SCHEME_IDENT_RE
+  };
+
+  var BODY = {
+    endsWithParent: true,
+    relevance: 0
+  };
+
+  var LIST = {
+    className: 'list',
+    variants: [
+      { begin: '\\(', end: '\\)' },
+      { begin: '\\[', end: '\\]' }
+    ],
+    contains: [
+      {
+        className: 'keyword',
+        begin: SCHEME_IDENT_RE,
+        lexemes: SCHEME_IDENT_RE,
+        keywords: BUILTINS
+      },
+      BODY
+    ]
+  };
+
+  BODY.contains = [LITERAL, NUMBER, STRING, IDENT, QUOTED_IDENT, LIST].concat(COMMENT_MODES);
+
+  return {
+    illegal: /\S/,
+    contains: [SHEBANG, NUMBER, STRING, QUOTED_IDENT, LIST].concat(COMMENT_MODES)
+  };
+});
+
+hljs.registerLanguage('scilab', function(hljs) {
+
+  var COMMON_CONTAINS = [
+    hljs.C_NUMBER_MODE,
+    {
+      className: 'string',
+      begin: '\'|\"', end: '\'|\"',
+      contains: [hljs.BACKSLASH_ESCAPE, {begin: '\'\''}]
+    }
+  ];
+
+  return {
+    aliases: ['sci'],
+    keywords: {
+      keyword: 'abort break case clear catch continue do elseif else endfunction end for function'+
+        'global if pause return resume select try then while'+
+        '%f %F %t %T %pi %eps %inf %nan %e %i %z %s',
+      built_in: // Scilab has more than 2000 functions. Just list the most commons
+       'abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp error'+
+       'exec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isempty'+
+       'isinfisnan isvector lasterror length load linspace list listfiles log10 log2 log'+
+       'max min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand real'+
+       'round sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tan'+
+       'type typename warning zeros matrix'
+    },
+    illegal: '("|#|/\\*|\\s+/\\w+)',
+    contains: [
+      {
+        className: 'function',
+        beginKeywords: 'function endfunction', end: '$',
+        keywords: 'function endfunction|10',
+        contains: [
+          hljs.UNDERSCORE_TITLE_MODE,
+          {
+            className: 'params',
+            begin: '\\(', end: '\\)'
+          }
+        ]
+      },
+      {
+        className: 'transposed_variable',
+        begin: '[a-zA-Z_][a-zA-Z_0-9]*(\'+[\\.\']*|[\\.\']+)', end: '',
+        relevance: 0
+      },
+      {
+        className: 'matrix',
+        begin: '\\[', end: '\\]\'*[\\.\']*',
+        relevance: 0,
+        contains: COMMON_CONTAINS
+      },
+      hljs.COMMENT('//', '$')
+    ].concat(COMMON_CONTAINS)
+  };
+});
+
+hljs.registerLanguage('scss', function(hljs) {
+  var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';
+  var VARIABLE = {
+    className: 'variable',
+    begin: '(\\$' + IDENT_RE + ')\\b'
+  };
+  var FUNCTION = {
+    className: 'function',
+    begin: IDENT_RE + '\\(',
+    returnBegin: true,
+    excludeEnd: true,
+    end: '\\('
+  };
+  var HEXCOLOR = {
+    className: 'hexcolor', begin: '#[0-9A-Fa-f]+'
+  };
+  var DEF_INTERNALS = {
+    className: 'attribute',
+    begin: '[A-Z\\_\\.\\-]+', end: ':',
+    excludeEnd: true,
+    illegal: '[^\\s]',
+    starts: {
+      className: 'value',
+      endsWithParent: true, excludeEnd: true,
+      contains: [
+        FUNCTION,
+        HEXCOLOR,
+        hljs.CSS_NUMBER_MODE,
+        hljs.QUOTE_STRING_MODE,
+        hljs.APOS_STRING_MODE,
+        hljs.C_BLOCK_COMMENT_MODE,
+        {
+          className: 'important', begin: '!important'
+        }
+      ]
+    }
+  };
+  return {
+    case_insensitive: true,
+    illegal: '[=/|\']',
+    contains: [
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      FUNCTION,
+      {
+        className: 'id', begin: '\\#[A-Za-z0-9_-]+',
+        relevance: 0
+      },
+      {
+        className: 'class', begin: '\\.[A-Za-z0-9_-]+',
+        relevance: 0
+      },
+      {
+        className: 'attr_selector',
+        begin: '\\[', end: '\\]',
+        illegal: '$'
+      },
+      {
+        className: 'tag', // begin: IDENT_RE, end: '[,|\\s]'
+        begin: '\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b',
+        relevance: 0
+      },
+      {
+        className: 'pseudo',
+        begin: ':(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)'
+      },
+      {
+        className: 'pseudo',
+        begin: '::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)'
+      },
+      VARIABLE,
+      {
+        className: 'attribute',
+        begin: '\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b',
+        illegal: '[^\\s]'
+      },
+      {
+        className: 'value',
+        begin: '\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b'
+      },
+      {
+        className: 'value',
+        begin: ':', end: ';',
+        contains: [
+          FUNCTION,
+          VARIABLE,
+          HEXCOLOR,
+          hljs.CSS_NUMBER_MODE,
+          hljs.QUOTE_STRING_MODE,
+          hljs.APOS_STRING_MODE,
+          {
+            className: 'important', begin: '!important'
+          }
+        ]
+      },
+      {
+        className: 'at_rule',
+        begin: '@', end: '[{;]',
+        keywords: 'mixin include extend for if else each while charset import debug media page content font-face namespace warn',
+        contains: [
+          FUNCTION,
+          VARIABLE,
+          hljs.QUOTE_STRING_MODE,
+          hljs.APOS_STRING_MODE,
+          HEXCOLOR,
+          hljs.CSS_NUMBER_MODE,
+          {
+            className: 'preprocessor',
+            begin: '\\s[A-Za-z0-9_.-]+',
+            relevance: 0
+          }
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('smali', function(hljs) {
+  var smali_instr_low_prio = ['add', 'and', 'cmp', 'cmpg', 'cmpl', 'const', 'div', 'double', 'float', 'goto', 'if', 'int', 'long', 'move', 'mul', 'neg', 'new', 'nop', 'not', 'or', 'rem', 'return', 'shl', 'shr', 'sput', 'sub', 'throw', 'ushr', 'xor'];
+  var smali_instr_high_prio = ['aget', 'aput', 'array', 'check', 'execute', 'fill', 'filled', 'goto/16', 'goto/32', 'iget', 'instance', 'invoke', 'iput', 'monitor', 'packed', 'sget', 'sparse'];
+  var smali_keywords = ['transient', 'constructor', 'abstract', 'final', 'synthetic', 'public', 'private', 'protected', 'static', 'bridge', 'system'];
+  return {
+    aliases: ['smali'],
+    contains: [
+      {
+        className: 'string',
+        begin: '"', end: '"',
+        relevance: 0
+      },
+      hljs.COMMENT(
+        '#',
+        '$',
+        {
+          relevance: 0
+        }
+      ),
+      {
+        className: 'keyword',
+        begin: '\\s*\\.end\\s[a-zA-Z0-9]*',
+        relevance: 1
+      },
+      {
+        className: 'keyword',
+        begin: '^[ ]*\\.[a-zA-Z]*',
+        relevance: 0
+      },
+      {
+        className: 'keyword',
+        begin: '\\s:[a-zA-Z_0-9]*',
+        relevance: 0
+      },
+      {
+        className: 'keyword',
+        begin: '\\s('+smali_keywords.join('|')+')',
+        relevance: 1
+      },
+      {
+        className: 'keyword',
+        begin: '\\[',
+        relevance: 0
+      },
+      {
+        className: 'instruction',
+        begin: '\\s('+smali_instr_low_prio.join('|')+')\\s',
+        relevance: 1
+      },
+      {
+        className: 'instruction',
+        begin: '\\s('+smali_instr_low_prio.join('|')+')((\\-|/)[a-zA-Z0-9]+)+\\s',
+        relevance: 10
+      },
+      {
+        className: 'instruction',
+        begin: '\\s('+smali_instr_high_prio.join('|')+')((\\-|/)[a-zA-Z0-9]+)*\\s',
+        relevance: 10
+      },
+      {
+        className: 'class',
+        begin: 'L[^\(;:\n]*;',
+        relevance: 0
+      },
+      {
+        className: 'function',
+        begin: '( |->)[^(\n ;"]*\\(',
+        relevance: 0
+      },
+      {
+        className: 'function',
+        begin: '\\)',
+        relevance: 0
+      },
+      {
+        className: 'variable',
+        begin: '[vp][0-9]+',
+        relevance: 0
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('smalltalk', function(hljs) {
+  var VAR_IDENT_RE = '[a-z][a-zA-Z0-9_]*';
+  var CHAR = {
+    className: 'char',
+    begin: '\\$.{1}'
+  };
+  var SYMBOL = {
+    className: 'symbol',
+    begin: '#' + hljs.UNDERSCORE_IDENT_RE
+  };
+  return {
+    aliases: ['st'],
+    keywords: 'self super nil true false thisContext', // only 6
+    contains: [
+      hljs.COMMENT('"', '"'),
+      hljs.APOS_STRING_MODE,
+      {
+        className: 'class',
+        begin: '\\b[A-Z][A-Za-z0-9_]*',
+        relevance: 0
+      },
+      {
+        className: 'method',
+        begin: VAR_IDENT_RE + ':',
+        relevance: 0
+      },
+      hljs.C_NUMBER_MODE,
+      SYMBOL,
+      CHAR,
+      {
+        className: 'localvars',
+        // This looks more complicated than needed to avoid combinatorial
+        // explosion under V8. It effectively means `| var1 var2 ... |` with
+        // whitespace adjacent to `|` being optional.
+        begin: '\\|[ ]*' + VAR_IDENT_RE + '([ ]+' + VAR_IDENT_RE + ')*[ ]*\\|',
+        returnBegin: true, end: /\|/,
+        illegal: /\S/,
+        contains: [{begin: '(\\|[ ]*)?' + VAR_IDENT_RE}]
+      },
+      {
+        className: 'array',
+        begin: '\\#\\(', end: '\\)',
+        contains: [
+          hljs.APOS_STRING_MODE,
+          CHAR,
+          hljs.C_NUMBER_MODE,
+          SYMBOL
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('sml', function(hljs) {
+  return {
+    aliases: ['ml'],
+    keywords: {
+      keyword:
+        /* according to Definition of Standard ML 97  */
+        'abstype and andalso as case datatype do else end eqtype ' +
+        'exception fn fun functor handle if in include infix infixr ' +
+        'let local nonfix of op open orelse raise rec sharing sig ' +
+        'signature struct structure then type val with withtype where while',
+      built_in:
+        /* built-in types according to basis library */
+        'array bool char exn int list option order real ref string substring vector unit word',
+      literal:
+        'true false NONE SOME LESS EQUAL GREATER nil'
+    },
+    illegal: /\/\/|>>/,
+    lexemes: '[a-z_]\\w*!?',
+    contains: [
+      {
+        className: 'literal',
+        begin: '\\[(\\|\\|)?\\]|\\(\\)'
+      },
+      hljs.COMMENT(
+        '\\(\\*',
+        '\\*\\)',
+        {
+          contains: ['self']
+        }
+      ),
+      { /* type variable */
+        className: 'symbol',
+        begin: '\'[A-Za-z_](?!\')[\\w\']*'
+        /* the grammar is ambiguous on how 'a'b should be interpreted but not the compiler */
+      },
+      { /* polymorphic variant */
+        className: 'tag',
+        begin: '`[A-Z][\\w\']*'
+      },
+      { /* module or constructor */
+        className: 'type',
+        begin: '\\b[A-Z][\\w\']*',
+        relevance: 0
+      },
+      { /* don't color identifiers, but safely catch all identifiers with '*/
+        begin: '[a-z_]\\w*\'[\\w\']*'
+      },
+      hljs.inherit(hljs.APOS_STRING_MODE, {className: 'char', relevance: 0}),
+      hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),
+      {
+        className: 'number',
+        begin:
+          '\\b(0[xX][a-fA-F0-9_]+[Lln]?|' +
+          '0[oO][0-7_]+[Lln]?|' +
+          '0[bB][01_]+[Lln]?|' +
+          '[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)',
+        relevance: 0
+      },
+      {
+        begin: /[-=]>/ // relevance booster
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('sqf', function(hljs) {
+  var allCommands = ['!', '-', '+', '!=', '%', '&&', '*', '/', '=', '==', '>', '>=', '<', '<=', 'or', 'plus', '^', ':', '>>', 'abs', 'accTime', 'acos', 'action', 'actionKeys', 'actionKeysImages', 'actionKeysNames', 'actionKeysNamesArray', 'actionName', 'activateAddons', 'activatedAddons', 'activateKey', 'addAction', 'addBackpack', 'addBackpackCargo', 'addBackpackCargoGlobal', 'addBackpackGlobal', 'addCamShake', 'addCuratorAddons', 'addCuratorCameraArea', 'addCuratorEditableObjects', 'addCuratorEditingArea', 'addCuratorPoints', 'addEditorObject', 'addEventHandler', 'addGoggles', 'addGroupIcon', 'addHandgunItem', 'addHeadgear', 'addItem', 'addItemCargo', 'addItemCargoGlobal', 'addItemPool', 'addItemToBackpack', 'addItemToUniform', 'addItemToVest', 'addLiveStats', 'addMagazine', 'addMagazine array', 'addMagazineAmmoCargo', 'addMagazineCargo', 'addMagazineCargoGlobal', 'addMagazineGlobal', 'addMagazinePool', 'addMagazines', 'addMagazineTurret', 'addMenu', 'addMenuItem', 'addMissionEventHandler', 'addMPEventHandler', 'addMusicEventHandler', 'addPrimaryWeaponItem', 'addPublicVariableEventHandler', 'addRating', 'addResources', 'addScore', 'addScoreSide', 'addSecondaryWeaponItem', 'addSwitchableUnit', 'addTeamMember', 'addToRemainsCollector', 'addUniform', 'addVehicle', 'addVest', 'addWaypoint', 'addWeapon', 'addWeaponCargo', 'addWeaponCargoGlobal', 'addWeaponGlobal', 'addWeaponPool', 'addWeaponTurret', 'agent', 'agents', 'AGLToASL', 'aimedAtTarget', 'aimPos', 'airDensityRTD', 'airportSide', 'AISFinishHeal', 'alive', 'allControls', 'allCurators', 'allDead', 'allDeadMen', 'allDisplays', 'allGroups', 'allMapMarkers', 'allMines', 'allMissionObjects', 'allow3DMode', 'allowCrewInImmobile', 'allowCuratorLogicIgnoreAreas', 'allowDamage', 'allowDammage', 'allowFileOperations', 'allowFleeing', 'allowGetIn', 'allPlayers', 'allSites', 'allTurrets', 'allUnits', 'allUnitsUAV', 'allVariables', 'ammo', 'and', 'animate', 'animateDoor', 'animationPhase', 'animationState', 'append', 'armoryPoints', 'arrayIntersect', 'asin', 'ASLToAGL', 'ASLToATL', 'assert', 'assignAsCargo', 'assignAsCargoIndex', 'assignAsCommander', 'assignAsDriver', 'assignAsGunner', 'assignAsTurret', 'assignCurator', 'assignedCargo', 'assignedCommander', 'assignedDriver', 'assignedGunner', 'assignedItems', 'assignedTarget', 'assignedTeam', 'assignedVehicle', 'assignedVehicleRole', 'assignItem', 'assignTeam', 'assignToAirport', 'atan', 'atan2', 'atg', 'ATLToASL', 'attachedObject', 'attachedObjects', 'attachedTo', 'attachObject', 'attachTo', 'attackEnabled', 'backpack', 'backpackCargo', 'backpackContainer', 'backpackItems', 'backpackMagazines', 'backpackSpaceFor', 'behaviour', 'benchmark', 'binocular', 'blufor', 'boundingBox', 'boundingBoxReal', 'boundingCenter', 'breakOut', 'breakTo', 'briefingName', 'buildingExit', 'buildingPos', 'buttonAction', 'buttonSetAction', 'cadetMode', 'call', 'callExtension', 'camCommand', 'camCommit', 'camCommitPrepared', 'camCommitted', 'camConstuctionSetParams', 'camCreate', 'camDestroy', 'cameraEffect', 'cameraEffectEnableHUD', 'cameraInterest', 'cameraOn', 'cameraView', 'campaignConfigFile', 'camPreload', 'camPreloaded', 'camPrepareBank', 'camPrepareDir', 'camPrepareDive', 'camPrepareFocus', 'camPrepareFov', 'camPrepareFovRange', 'camPreparePos', 'camPrepareRelPos', 'camPrepareTarget', 'camSetBank', 'camSetDir', 'camSetDive', 'camSetFocus', 'camSetFov', 'camSetFovRange', 'camSetPos', 'camSetRelPos', 'camSetTarget', 'camTarget', 'camUseNVG', 'canAdd', 'canAddItemToBackpack', 'canAddItemToUniform', 'canAddItemToVest', 'cancelSimpleTaskDestination', 'canFire', 'canMove', 'canSlingLoad', 'canStand', 'canUnloadInCombat', 'captive', 'captiveNum', 'case', 'catch', 'cbChecked', 'cbSetChecked', 'ceil', 'cheatsEnabled', 'checkAIFeature', 'civilian', 'className', 'clearAllItemsFromBackpack', 'clearBackpackCargo', 'clearBackpackCargoGlobal', 'clearGroupIcons', 'clearItemCargo', 'clearItemCargoGlobal', 'clearItemPool', 'clearMagazineCargo', 'clearMagazineCargoGlobal', 'clearMagazinePool', 'clearOverlay', 'clearRadio', 'clearWeaponCargo', 'clearWeaponCargoGlobal', 'clearWeaponPool', 'closeDialog', 'closeDisplay', 'closeOverlay', 'collapseObjectTree', 'combatMode', 'commandArtilleryFire', 'commandChat', 'commander', 'commandFire', 'commandFollow', 'commandFSM', 'commandGetOut', 'commandingMenu', 'commandMove', 'commandRadio', 'commandStop', 'commandTarget', 'commandWatch', 'comment', 'commitOverlay', 'compile', 'compileFinal', 'completedFSM', 'composeText', 'configClasses', 'configFile', 'configHierarchy', 'configName', 'configProperties', 'configSourceMod', 'configSourceModList', 'connectTerminalToUAV', 'controlNull', 'controlsGroupCtrl', 'copyFromClipboard', 'copyToClipboard', 'copyWaypoints', 'cos', 'count', 'countEnemy', 'countFriendly', 'countSide', 'countType', 'countUnknown', 'createAgent', 'createCenter', 'createDialog', 'createDiaryLink', 'createDiaryRecord', 'createDiarySubject', 'createDisplay', 'createGearDialog', 'createGroup', 'createGuardedPoint', 'createLocation', 'createMarker', 'createMarkerLocal', 'createMenu', 'createMine', 'createMissionDisplay', 'createSimpleTask', 'createSite', 'createSoundSource', 'createTask', 'createTeam', 'createTrigger', 'createUnit', 'createUnit array', 'createVehicle', 'createVehicle array', 'createVehicleCrew', 'createVehicleLocal', 'crew', 'ctrlActivate', 'ctrlAddEventHandler', 'ctrlAutoScrollDelay', 'ctrlAutoScrollRewind', 'ctrlAutoScrollSpeed', 'ctrlChecked', 'ctrlClassName', 'ctrlCommit', 'ctrlCommitted', 'ctrlCreate', 'ctrlDelete', 'ctrlEnable', 'ctrlEnabled', 'ctrlFade', 'ctrlHTMLLoaded', 'ctrlIDC', 'ctrlIDD', 'ctrlMapAnimAdd', 'ctrlMapAnimClear', 'ctrlMapAnimCommit', 'ctrlMapAnimDone', 'ctrlMapCursor', 'ctrlMapMouseOver', 'ctrlMapScale', 'ctrlMapScreenToWorld', 'ctrlMapWorldToScreen', 'ctrlModel', 'ctrlModelDirAndUp', 'ctrlModelScale', 'ctrlParent', 'ctrlPosition', 'ctrlRemoveAllEventHandlers', 'ctrlRemoveEventHandler', 'ctrlScale', 'ctrlSetActiveColor', 'ctrlSetAutoScrollDelay', 'ctrlSetAutoScrollRewind', 'ctrlSetAutoScrollSpeed', 'ctrlSetBackgroundColor', 'ctrlSetChecked', 'ctrlSetEventHandler', 'ctrlSetFade', 'ctrlSetFocus', 'ctrlSetFont', 'ctrlSetFontH1', 'ctrlSetFontH1B', 'ctrlSetFontH2', 'ctrlSetFontH2B', 'ctrlSetFontH3', 'ctrlSetFontH3B', 'ctrlSetFontH4', 'ctrlSetFontH4B', 'ctrlSetFontH5', 'ctrlSetFontH5B', 'ctrlSetFontH6', 'ctrlSetFontH6B', 'ctrlSetFontHeight', 'ctrlSetFontHeightH1', 'ctrlSetFontHeightH2', 'ctrlSetFontHeightH3', 'ctrlSetFontHeightH4', 'ctrlSetFontHeightH5', 'ctrlSetFontHeightH6', 'ctrlSetFontP', 'ctrlSetFontPB', 'ctrlSetForegroundColor', 'ctrlSetModel', 'ctrlSetModelDirAndUp', 'ctrlSetModelScale', 'ctrlSetPosition', 'ctrlSetScale', 'ctrlSetStructuredText', 'ctrlSetText', 'ctrlSetTextColor', 'ctrlSetTooltip', 'ctrlSetTooltipColorBox', 'ctrlSetTooltipColorShade', 'ctrlSetTooltipColorText', 'ctrlShow', 'ctrlShown', 'ctrlText', 'ctrlTextHeight', 'ctrlType', 'ctrlVisible', 'curatorAddons', 'curatorCamera', 'curatorCameraArea', 'curatorCameraAreaCeiling', 'curatorCoef', 'curatorEditableObjects', 'curatorEditingArea', 'curatorEditingAreaType', 'curatorMouseOver', 'curatorPoints', 'curatorRegisteredObjects', 'curatorSelected', 'curatorWaypointCost', 'currentChannel', 'currentCommand', 'currentMagazine', 'currentMagazineDetail', 'currentMagazineDetailTurret', 'currentMagazineTurret', 'currentMuzzle', 'currentNamespace', 'currentTask', 'currentTasks', 'currentThrowable', 'currentVisionMode', 'currentWaypoint', 'currentWeapon', 'currentWeaponMode', 'currentWeaponTurret', 'currentZeroing', 'cursorTarget', 'customChat', 'customRadio', 'cutFadeOut', 'cutObj', 'cutRsc', 'cutText', 'damage', 'date', 'dateToNumber', 'daytime', 'deActivateKey', 'debriefingText', 'debugFSM', 'debugLog', 'default', 'deg', 'deleteAt', 'deleteCenter', 'deleteCollection', 'deleteEditorObject', 'deleteGroup', 'deleteIdentity', 'deleteLocation', 'deleteMarker', 'deleteMarkerLocal', 'deleteRange', 'deleteResources', 'deleteSite', 'deleteStatus', 'deleteTeam', 'deleteVehicle', 'deleteVehicleCrew', 'deleteWaypoint', 'detach', 'detectedMines', 'diag activeMissionFSMs', 'diag activeSQFScripts', 'diag activeSQSScripts', 'diag captureFrame', 'diag captureSlowFrame', 'diag fps', 'diag fpsMin', 'diag frameNo', 'diag log', 'diag logSlowFrame', 'diag tickTime', 'dialog', 'diarySubjectExists', 'didJIP', 'didJIPOwner', 'difficulty', 'difficultyEnabled', 'difficultyEnabledRTD', 'direction', 'directSay', 'disableAI', 'disableCollisionWith', 'disableConversation', 'disableDebriefingStats', 'disableSerialization', 'disableTIEquipment', 'disableUAVConnectability', 'disableUserInput', 'displayAddEventHandler', 'displayCtrl', 'displayNull', 'displayRemoveAllEventHandlers', 'displayRemoveEventHandler', 'displaySetEventHandler', 'dissolveTeam', 'distance', 'distance2D', 'distanceSqr', 'distributionRegion', 'do', 'doArtilleryFire', 'doFire', 'doFollow', 'doFSM', 'doGetOut', 'doMove', 'doorPhase', 'doStop', 'doTarget', 'doWatch', 'drawArrow', 'drawEllipse', 'drawIcon', 'drawIcon3D', 'drawLine', 'drawLine3D', 'drawLink', 'drawLocation', 'drawRectangle', 'driver', 'drop', 'east', 'echo', 'editObject', 'editorSetEventHandler', 'effectiveCommander', 'else', 'emptyPositions', 'enableAI', 'enableAIFeature', 'enableAttack', 'enableCamShake', 'enableCaustics', 'enableCollisionWith', 'enableCopilot', 'enableDebriefingStats', 'enableDiagLegend', 'enableEndDialog', 'enableEngineArtillery', 'enableEnvironment', 'enableFatigue', 'enableGunLights', 'enableIRLasers', 'enableMimics', 'enablePersonTurret', 'enableRadio', 'enableReload', 'enableRopeAttach', 'enableSatNormalOnDetail', 'enableSaving', 'enableSentences', 'enableSimulation', 'enableSimulationGlobal', 'enableTeamSwitch', 'enableUAVConnectability', 'enableUAVWaypoints', 'endLoadingScreen', 'endMission', 'engineOn', 'enginesIsOnRTD', 'enginesRpmRTD', 'enginesTorqueRTD', 'entities', 'estimatedEndServerTime', 'estimatedTimeLeft', 'evalObjectArgument', 'everyBackpack', 'everyContainer', 'exec', 'execEditorScript', 'execFSM', 'execVM', 'exit', 'exitWith', 'exp', 'expectedDestination', 'eyeDirection', 'eyePos', 'face', 'faction', 'fadeMusic', 'fadeRadio', 'fadeSound', 'fadeSpeech', 'failMission', 'false', 'fillWeaponsFromPool', 'find', 'findCover', 'findDisplay', 'findEditorObject', 'findEmptyPosition', 'findEmptyPositionReady', 'findNearestEnemy', 'finishMissionInit', 'finite', 'fire', 'fireAtTarget', 'firstBackpack', 'flag', 'flagOwner', 'fleeing', 'floor', 'flyInHeight', 'fog', 'fogForecast', 'fogParams', 'for', 'forceAddUniform', 'forceEnd', 'forceMap', 'forceRespawn', 'forceSpeed', 'forceWalk', 'forceWeaponFire', 'forceWeatherChange', 'forEach', 'forEachMember', 'forEachMemberAgent', 'forEachMemberTeam', 'format', 'formation', 'formationDirection', 'formationLeader', 'formationMembers', 'formationPosition', 'formationTask', 'formatText', 'formLeader', 'freeLook', 'from', 'fromEditor', 'fuel', 'fullCrew', 'gearSlotAmmoCount', 'gearSlotData', 'getAllHitPointsDamage', 'getAmmoCargo', 'getArray', 'getArtilleryAmmo', 'getArtilleryComputerSettings', 'getArtilleryETA', 'getAssignedCuratorLogic', 'getAssignedCuratorUnit', 'getBackpackCargo', 'getBleedingRemaining', 'getBurningValue', 'getCargoIndex', 'getCenterOfMass', 'getClientState', 'getConnectedUAV', 'getDammage', 'getDescription', 'getDir', 'getDirVisual', 'getDLCs', 'getEditorCamera', 'getEditorMode', 'getEditorObjectScope', 'getElevationOffset', 'getFatigue', 'getFriend', 'getFSMVariable', 'getFuelCargo', 'getGroupIcon', 'getGroupIconParams', 'getGroupIcons', 'getHideFrom', 'getHit', 'getHitIndex', 'getHitPointDamage', 'getItemCargo', 'getMagazineCargo', 'getMarkerColor', 'getMarkerPos', 'getMarkerSize', 'getMarkerType', 'getMass', 'getModelInfo', 'getNumber', 'getObjectArgument', 'getObjectChildren', 'getObjectDLC', 'getObjectMaterials', 'getObjectProxy', 'getObjectTextures', 'getObjectType', 'getObjectViewDistance', 'getOxygenRemaining', 'getPersonUsedDLCs', 'getPlayerChannel', 'getPlayerUID', 'getPos', 'getPosASL', 'getPosASLVisual', 'getPosASLW', 'getPosATL', 'getPosATLVisual', 'getPosVisual', 'getPosWorld', 'getRepairCargo', 'getResolution', 'getShadowDistance', 'getSlingLoad', 'getSpeed', 'getSuppression', 'getTerrainHeightASL', 'getText', 'getVariable', 'getWeaponCargo', 'getWPPos', 'glanceAt', 'globalChat', 'globalRadio', 'goggles', 'goto', 'group', 'groupChat', 'groupFromNetId', 'groupIconSelectable', 'groupIconsVisible', 'groupId', 'groupOwner', 'groupRadio', 'groupSelectedUnits', 'groupSelectUnit', 'grpNull', 'gunner', 'gusts', 'halt', 'handgunItems', 'handgunMagazine', 'handgunWeapon', 'handsHit', 'hasInterface', 'hasWeapon', 'hcAllGroups', 'hcGroupParams', 'hcLeader', 'hcRemoveAllGroups', 'hcRemoveGroup', 'hcSelected', 'hcSelectGroup', 'hcSetGroup', 'hcShowBar', 'hcShownBar', 'headgear', 'hideBody', 'hideObject', 'hideObjectGlobal', 'hint', 'hintC', 'hintCadet', 'hintSilent', 'hmd', 'hostMission', 'htmlLoad', 'HUDMovementLevels', 'humidity', 'if', 'image', 'importAllGroups', 'importance', 'in', 'incapacitatedState', 'independent', 'inflame', 'inflamed', 'inGameUISetEventHandler', 'inheritsFrom', 'initAmbientLife', 'inputAction', 'inRangeOfArtillery', 'insertEditorObject', 'intersect', 'isAbleToBreathe', 'isAgent', 'isArray', 'isAutoHoverOn', 'isAutonomous', 'isAutotest', 'isBleeding', 'isBurning', 'isClass', 'isCollisionLightOn', 'isCopilotEnabled', 'isDedicated', 'isDLCAvailable', 'isEngineOn', 'isEqualTo', 'isFlashlightOn', 'isFlatEmpty', 'isForcedWalk', 'isFormationLeader', 'isHidden', 'isInRemainsCollector', 'isInstructorFigureEnabled', 'isIRLaserOn', 'isKeyActive', 'isKindOf', 'isLightOn', 'isLocalized', 'isManualFire', 'isMarkedForCollection', 'isMultiplayer', 'isNil', 'isNull', 'isNumber', 'isObjectHidden', 'isObjectRTD', 'isOnRoad', 'isPipEnabled', 'isPlayer', 'isRealTime', 'isServer', 'isShowing3DIcons', 'isSteamMission', 'isStreamFriendlyUIEnabled', 'isText', 'isTouchingGround', 'isTurnedOut', 'isTutHintsEnabled', 'isUAVConnectable', 'isUAVConnected', 'isUniformAllowed', 'isWalking', 'isWeaponDeployed', 'isWeaponRested', 'itemCargo', 'items', 'itemsWithMagazines', 'join', 'joinAs', 'joinAsSilent', 'joinSilent', 'joinString', 'kbAddDatabase', 'kbAddDatabaseTargets', 'kbAddTopic', 'kbHasTopic', 'kbReact', 'kbRemoveTopic', 'kbTell', 'kbWasSaid', 'keyImage', 'keyName', 'knowsAbout', 'land', 'landAt', 'landResult', 'language', 'laserTarget', 'lbAdd', 'lbClear', 'lbColor', 'lbCurSel', 'lbData', 'lbDelete', 'lbIsSelected', 'lbPicture', 'lbSelection', 'lbSetColor', 'lbSetCurSel', 'lbSetData', 'lbSetPicture', 'lbSetPictureColor', 'lbSetPictureColorDisabled', 'lbSetPictureColorSelected', 'lbSetSelectColor', 'lbSetSelectColorRight', 'lbSetSelected', 'lbSetTooltip', 'lbSetValue', 'lbSize', 'lbSort', 'lbSortByValue', 'lbText', 'lbValue', 'leader', 'leaderboardDeInit', 'leaderboardGetRows', 'leaderboardInit', 'leaveVehicle', 'libraryCredits', 'libraryDisclaimers', 'lifeState', 'lightAttachObject', 'lightDetachObject', 'lightIsOn', 'lightnings', 'limitSpeed', 'linearConversion', 'lineBreak', 'lineIntersects', 'lineIntersectsObjs', 'lineIntersectsSurfaces', 'lineIntersectsWith', 'linkItem', 'list', 'listObjects', 'ln', 'lnbAddArray', 'lnbAddColumn', 'lnbAddRow', 'lnbClear', 'lnbColor', 'lnbCurSelRow', 'lnbData', 'lnbDeleteColumn', 'lnbDeleteRow', 'lnbGetColumnsPosition', 'lnbPicture', 'lnbSetColor', 'lnbSetColumnsPos', 'lnbSetCurSelRow', 'lnbSetData', 'lnbSetPicture', 'lnbSetText', 'lnbSetValue', 'lnbSize', 'lnbText', 'lnbValue', 'load', 'loadAbs', 'loadBackpack', 'loadFile', 'loadGame', 'loadIdentity', 'loadMagazine', 'loadOverlay', 'loadStatus', 'loadUniform', 'loadVest', 'local', 'localize', 'locationNull', 'locationPosition', 'lock', 'lockCameraTo', 'lockCargo', 'lockDriver', 'locked', 'lockedCargo', 'lockedDriver', 'lockedTurret', 'lockTurret', 'lockWP', 'log', 'logEntities', 'lookAt', 'lookAtPos', 'magazineCargo', 'magazines', 'magazinesAllTurrets', 'magazinesAmmo', 'magazinesAmmoCargo', 'magazinesAmmoFull', 'magazinesDetail', 'magazinesDetailBackpack', 'magazinesDetailUniform', 'magazinesDetailVest', 'magazinesTurret', 'magazineTurretAmmo', 'mapAnimAdd', 'mapAnimClear', 'mapAnimCommit', 'mapAnimDone', 'mapCenterOnCamera', 'mapGridPosition', 'markAsFinishedOnSteam', 'markerAlpha', 'markerBrush', 'markerColor', 'markerDir', 'markerPos', 'markerShape', 'markerSize', 'markerText', 'markerType', 'max', 'members', 'min', 'mineActive', 'mineDetectedBy', 'missionConfigFile', 'missionName', 'missionNamespace', 'missionStart', 'mod', 'modelToWorld', 'modelToWorldVisual', 'moonIntensity', 'morale', 'move', 'moveInAny', 'moveInCargo', 'moveInCommander', 'moveInDriver', 'moveInGunner', 'moveInTurret', 'moveObjectToEnd', 'moveOut', 'moveTime', 'moveTo', 'moveToCompleted', 'moveToFailed', 'musicVolume', 'name', 'name location', 'nameSound', 'nearEntities', 'nearestBuilding', 'nearestLocation', 'nearestLocations', 'nearestLocationWithDubbing', 'nearestObject', 'nearestObjects', 'nearObjects', 'nearObjectsReady', 'nearRoads', 'nearSupplies', 'nearTargets', 'needReload', 'netId', 'netObjNull', 'newOverlay', 'nextMenuItemIndex', 'nextWeatherChange', 'nil', 'nMenuItems', 'not', 'numberToDate', 'objectCurators', 'objectFromNetId', 'objectParent', 'objNull', 'objStatus', 'onBriefingGroup', 'onBriefingNotes', 'onBriefingPlan', 'onBriefingTeamSwitch', 'onCommandModeChanged', 'onDoubleClick', 'onEachFrame', 'onGroupIconClick', 'onGroupIconOverEnter', 'onGroupIconOverLeave', 'onHCGroupSelectionChanged', 'onMapSingleClick', 'onPlayerConnected', 'onPlayerDisconnected', 'onPreloadFinished', 'onPreloadStarted', 'onShowNewObject', 'onTeamSwitch', 'openCuratorInterface', 'openMap', 'openYoutubeVideo', 'opfor', 'or', 'orderGetIn', 'overcast', 'overcastForecast', 'owner', 'param', 'params', 'parseNumber', 'parseText', 'parsingNamespace', 'particlesQuality', 'pi', 'pickWeaponPool', 'pitch', 'playableSlotsNumber', 'playableUnits', 'playAction', 'playActionNow', 'player', 'playerRespawnTime', 'playerSide', 'playersNumber', 'playGesture', 'playMission', 'playMove', 'playMoveNow', 'playMusic', 'playScriptedMission', 'playSound', 'playSound3D', 'position', 'positionCameraToWorld', 'posScreenToWorld', 'posWorldToScreen', 'ppEffectAdjust', 'ppEffectCommit', 'ppEffectCommitted', 'ppEffectCreate', 'ppEffectDestroy', 'ppEffectEnable', 'ppEffectForceInNVG', 'precision', 'preloadCamera', 'preloadObject', 'preloadSound', 'preloadTitleObj', 'preloadTitleRsc', 'preprocessFile', 'preprocessFileLineNumbers', 'primaryWeapon', 'primaryWeaponItems', 'primaryWeaponMagazine', 'priority', 'private', 'processDiaryLink', 'productVersion', 'profileName', 'profileNamespace', 'profileNameSteam', 'progressLoadingScreen', 'progressPosition', 'progressSetPosition', 'publicVariable', 'publicVariableClient', 'publicVariableServer', 'pushBack', 'putWeaponPool', 'queryItemsPool', 'queryMagazinePool', 'queryWeaponPool', 'rad', 'radioChannelAdd', 'radioChannelCreate', 'radioChannelRemove', 'radioChannelSetCallSign', 'radioChannelSetLabel', 'radioVolume', 'rain', 'rainbow', 'random', 'rank', 'rankId', 'rating', 'rectangular', 'registeredTasks', 'registerTask', 'reload', 'reloadEnabled', 'remoteControl', 'remoteExec', 'remoteExecCall', 'removeAction', 'removeAllActions', 'removeAllAssignedItems', 'removeAllContainers', 'removeAllCuratorAddons', 'removeAllCuratorCameraAreas', 'removeAllCuratorEditingAreas', 'removeAllEventHandlers', 'removeAllHandgunItems', 'removeAllItems', 'removeAllItemsWithMagazines', 'removeAllMissionEventHandlers', 'removeAllMPEventHandlers', 'removeAllMusicEventHandlers', 'removeAllPrimaryWeaponItems', 'removeAllWeapons', 'removeBackpack', 'removeBackpackGlobal', 'removeCuratorAddons', 'removeCuratorCameraArea', 'removeCuratorEditableObjects', 'removeCuratorEditingArea', 'removeDrawIcon', 'removeDrawLinks', 'removeEventHandler', 'removeFromRemainsCollector', 'removeGoggles', 'removeGroupIcon', 'removeHandgunItem', 'removeHeadgear', 'removeItem', 'removeItemFromBackpack', 'removeItemFromUniform', 'removeItemFromVest', 'removeItems', 'removeMagazine', 'removeMagazineGlobal', 'removeMagazines', 'removeMagazinesTurret', 'removeMagazineTurret', 'removeMenuItem', 'removeMissionEventHandler', 'removeMPEventHandler', 'removeMusicEventHandler', 'removePrimaryWeaponItem', 'removeSecondaryWeaponItem', 'removeSimpleTask', 'removeSwitchableUnit', 'removeTeamMember', 'removeUniform', 'removeVest', 'removeWeapon', 'removeWeaponGlobal', 'removeWeaponTurret', 'requiredVersion', 'resetCamShake', 'resetSubgroupDirection', 'resistance', 'resize', 'resources', 'respawnVehicle', 'restartEditorCamera', 'reveal', 'revealMine', 'reverse', 'reversedMouseY', 'roadsConnectedTo', 'roleDescription', 'ropeAttachedObjects', 'ropeAttachedTo', 'ropeAttachEnabled', 'ropeAttachTo', 'ropeCreate', 'ropeCut', 'ropeEndPosition', 'ropeLength', 'ropes', 'ropeUnwind', 'ropeUnwound', 'rotorsForcesRTD', 'rotorsRpmRTD', 'round', 'runInitScript', 'safeZoneH', 'safeZoneW', 'safeZoneWAbs', 'safeZoneX', 'safeZoneXAbs', 'safeZoneY', 'saveGame', 'saveIdentity', 'saveJoysticks', 'saveOverlay', 'saveProfileNamespace', 'saveStatus', 'saveVar', 'savingEnabled', 'say', 'say2D', 'say3D', 'scopeName', 'score', 'scoreSide', 'screenToWorld', 'scriptDone', 'scriptName', 'scriptNull', 'scudState', 'secondaryWeapon', 'secondaryWeaponItems', 'secondaryWeaponMagazine', 'select', 'selectBestPlaces', 'selectDiarySubject', 'selectedEditorObjects', 'selectEditorObject', 'selectionPosition', 'selectLeader', 'selectNoPlayer', 'selectPlayer', 'selectWeapon', 'selectWeaponTurret', 'sendAUMessage', 'sendSimpleCommand', 'sendTask', 'sendTaskResult', 'sendUDPMessage', 'serverCommand', 'serverCommandAvailable', 'serverCommandExecutable', 'serverName', 'serverTime', 'set', 'setAccTime', 'setAirportSide', 'setAmmo', 'setAmmoCargo', 'setAperture', 'setApertureNew', 'setArmoryPoints', 'setAttributes', 'setAutonomous', 'setBehaviour', 'setBleedingRemaining', 'setCameraInterest', 'setCamShakeDefParams', 'setCamShakeParams', 'setCamUseTi', 'setCaptive', 'setCenterOfMass', 'setCollisionLight', 'setCombatMode', 'setCompassOscillation', 'setCuratorCameraAreaCeiling', 'setCuratorCoef', 'setCuratorEditingAreaType', 'setCuratorWaypointCost', 'setCurrentChannel', 'setCurrentTask', 'setCurrentWaypoint', 'setDamage', 'setDammage', 'setDate', 'setDebriefingText', 'setDefaultCamera', 'setDestination', 'setDetailMapBlendPars', 'setDir', 'setDirection', 'setDrawIcon', 'setDropInterval', 'setEditorMode', 'setEditorObjectScope', 'setEffectCondition', 'setFace', 'setFaceAnimation', 'setFatigue', 'setFlagOwner', 'setFlagSide', 'setFlagTexture', 'setFog', 'setFog array', 'setFormation', 'setFormationTask', 'setFormDir', 'setFriend', 'setFromEditor', 'setFSMVariable', 'setFuel', 'setFuelCargo', 'setGroupIcon', 'setGroupIconParams', 'setGroupIconsSelectable', 'setGroupIconsVisible', 'setGroupId', 'setGroupIdGlobal', 'setGroupOwner', 'setGusts', 'setHideBehind', 'setHit', 'setHitIndex', 'setHitPointDamage', 'setHorizonParallaxCoef', 'setHUDMovementLevels', 'setIdentity', 'setImportance', 'setLeader', 'setLightAmbient', 'setLightAttenuation', 'setLightBrightness', 'setLightColor', 'setLightDayLight', 'setLightFlareMaxDistance', 'setLightFlareSize', 'setLightIntensity', 'setLightnings', 'setLightUseFlare', 'setLocalWindParams', 'setMagazineTurretAmmo', 'setMarkerAlpha', 'setMarkerAlphaLocal', 'setMarkerBrush', 'setMarkerBrushLocal', 'setMarkerColor', 'setMarkerColorLocal', 'setMarkerDir', 'setMarkerDirLocal', 'setMarkerPos', 'setMarkerPosLocal', 'setMarkerShape', 'setMarkerShapeLocal', 'setMarkerSize', 'setMarkerSizeLocal', 'setMarkerText', 'setMarkerTextLocal', 'setMarkerType', 'setMarkerTypeLocal', 'setMass', 'setMimic', 'setMousePosition', 'setMusicEffect', 'setMusicEventHandler', 'setName', 'setNameSound', 'setObjectArguments', 'setObjectMaterial', 'setObjectProxy', 'setObjectTexture', 'setObjectTextureGlobal', 'setObjectViewDistance', 'setOvercast', 'setOwner', 'setOxygenRemaining', 'setParticleCircle', 'setParticleClass', 'setParticleFire', 'setParticleParams', 'setParticleRandom', 'setPilotLight', 'setPiPEffect', 'setPitch', 'setPlayable', 'setPlayerRespawnTime', 'setPos', 'setPosASL', 'setPosASL2', 'setPosASLW', 'setPosATL', 'setPosition', 'setPosWorld', 'setRadioMsg', 'setRain', 'setRainbow', 'setRandomLip', 'setRank', 'setRectangular', 'setRepairCargo', 'setShadowDistance', 'setSide', 'setSimpleTaskDescription', 'setSimpleTaskDestination', 'setSimpleTaskTarget', 'setSimulWeatherLayers', 'setSize', 'setSkill', 'setSkill array', 'setSlingLoad', 'setSoundEffect', 'setSpeaker', 'setSpeech', 'setSpeedMode', 'setStatValue', 'setSuppression', 'setSystemOfUnits', 'setTargetAge', 'setTaskResult', 'setTaskState', 'setTerrainGrid', 'setText', 'setTimeMultiplier', 'setTitleEffect', 'setTriggerActivation', 'setTriggerArea', 'setTriggerStatements', 'setTriggerText', 'setTriggerTimeout', 'setTriggerType', 'setType', 'setUnconscious', 'setUnitAbility', 'setUnitPos', 'setUnitPosWeak', 'setUnitRank', 'setUnitRecoilCoefficient', 'setUnloadInCombat', 'setUserActionText', 'setVariable', 'setVectorDir', 'setVectorDirAndUp', 'setVectorUp', 'setVehicleAmmo', 'setVehicleAmmoDef', 'setVehicleArmor', 'setVehicleId', 'setVehicleLock', 'setVehiclePosition', 'setVehicleTiPars', 'setVehicleVarName', 'setVelocity', 'setVelocityTransformation', 'setViewDistance', 'setVisibleIfTreeCollapsed', 'setWaves', 'setWaypointBehaviour', 'setWaypointCombatMode', 'setWaypointCompletionRadius', 'setWaypointDescription', 'setWaypointFormation', 'setWaypointHousePosition', 'setWaypointLoiterRadius', 'setWaypointLoiterType', 'setWaypointName', 'setWaypointPosition', 'setWaypointScript', 'setWaypointSpeed', 'setWaypointStatements', 'setWaypointTimeout', 'setWaypointType', 'setWaypointVisible', 'setWeaponReloadingTime', 'setWind', 'setWindDir', 'setWindForce', 'setWindStr', 'setWPPos', 'show3DIcons', 'showChat', 'showCinemaBorder', 'showCommandingMenu', 'showCompass', 'showCuratorCompass', 'showGPS', 'showHUD', 'showLegend', 'showMap', 'shownArtilleryComputer', 'shownChat', 'shownCompass', 'shownCuratorCompass', 'showNewEditorObject', 'shownGPS', 'shownHUD', 'shownMap', 'shownPad', 'shownRadio', 'shownUAVFeed', 'shownWarrant', 'shownWatch', 'showPad', 'showRadio', 'showSubtitles', 'showUAVFeed', 'showWarrant', 'showWatch', 'showWaypoint', 'side', 'sideChat', 'sideEnemy', 'sideFriendly', 'sideLogic', 'sideRadio', 'sideUnknown', 'simpleTasks', 'simulationEnabled', 'simulCloudDensity', 'simulCloudOcclusion', 'simulInClouds', 'simulWeatherSync', 'sin', 'size', 'sizeOf', 'skill', 'skillFinal', 'skipTime', 'sleep', 'sliderPosition', 'sliderRange', 'sliderSetPosition', 'sliderSetRange', 'sliderSetSpeed', 'sliderSpeed', 'slingLoadAssistantShown', 'soldierMagazines', 'someAmmo', 'sort', 'soundVolume', 'spawn', 'speaker', 'speed', 'speedMode', 'splitString', 'sqrt', 'squadParams', 'stance', 'startLoadingScreen', 'step', 'stop', 'stopped', 'str', 'sunOrMoon', 'supportInfo', 'suppressFor', 'surfaceIsWater', 'surfaceNormal', 'surfaceType', 'swimInDepth', 'switch', 'switchableUnits', 'switchAction', 'switchCamera', 'switchGesture', 'switchLight', 'switchMove', 'synchronizedObjects', 'synchronizedTriggers', 'synchronizedWaypoints', 'synchronizeObjectsAdd', 'synchronizeObjectsRemove', 'synchronizeTrigger', 'synchronizeWaypoint', 'synchronizeWaypoint trigger', 'systemChat', 'systemOfUnits', 'tan', 'targetKnowledge', 'targetsAggregate', 'targetsQuery', 'taskChildren', 'taskCompleted', 'taskDescription', 'taskDestination', 'taskHint', 'taskNull', 'taskParent', 'taskResult', 'taskState', 'teamMember', 'teamMemberNull', 'teamName', 'teams', 'teamSwitch', 'teamSwitchEnabled', 'teamType', 'terminate', 'terrainIntersect', 'terrainIntersectASL', 'text', 'text location', 'textLog', 'textLogFormat', 'tg', 'then', 'throw', 'time', 'timeMultiplier', 'titleCut', 'titleFadeOut', 'titleObj', 'titleRsc', 'titleText', 'to', 'toArray', 'toLower', 'toString', 'toUpper', 'triggerActivated', 'triggerActivation', 'triggerArea', 'triggerAttachedVehicle', 'triggerAttachObject', 'triggerAttachVehicle', 'triggerStatements', 'triggerText', 'triggerTimeout', 'triggerTimeoutCurrent', 'triggerType', 'true', 'try', 'turretLocal', 'turretOwner', 'turretUnit', 'tvAdd', 'tvClear', 'tvCollapse', 'tvCount', 'tvCurSel', 'tvData', 'tvDelete', 'tvExpand', 'tvPicture', 'tvSetCurSel', 'tvSetData', 'tvSetPicture', 'tvSetPictureColor', 'tvSetTooltip', 'tvSetValue', 'tvSort', 'tvSortByValue', 'tvText', 'tvValue', 'type', 'typeName', 'typeOf', 'UAVControl', 'uiNamespace', 'uiSleep', 'unassignCurator', 'unassignItem', 'unassignTeam', 'unassignVehicle', 'underwater', 'uniform', 'uniformContainer', 'uniformItems', 'uniformMagazines', 'unitAddons', 'unitBackpack', 'unitPos', 'unitReady', 'unitRecoilCoefficient', 'units', 'unitsBelowHeight', 'unlinkItem', 'unlockAchievement', 'unregisterTask', 'updateDrawIcon', 'updateMenuItem', 'updateObjectTree', 'useAudioTimeForMoves', 'vectorAdd', 'vectorCos', 'vectorCrossProduct', 'vectorDiff', 'vectorDir', 'vectorDirVisual', 'vectorDistance', 'vectorDistanceSqr', 'vectorDotProduct', 'vectorFromTo', 'vectorMagnitude', 'vectorMagnitudeSqr', 'vectorMultiply', 'vectorNormalized', 'vectorUp', 'vectorUpVisual', 'vehicle', 'vehicleChat', 'vehicleRadio', 'vehicles', 'vehicleVarName', 'velocity', 'velocityModelSpace', 'verifySignature', 'vest', 'vestContainer', 'vestItems', 'vestMagazines', 'viewDistance', 'visibleCompass', 'visibleGPS', 'visibleMap', 'visiblePosition', 'visiblePositionASL', 'visibleWatch', 'waitUntil', 'waves', 'waypointAttachedObject', 'waypointAttachedVehicle', 'waypointAttachObject', 'waypointAttachVehicle', 'waypointBehaviour', 'waypointCombatMode', 'waypointCompletionRadius', 'waypointDescription', 'waypointFormation', 'waypointHousePosition', 'waypointLoiterRadius', 'waypointLoiterType', 'waypointName', 'waypointPosition', 'waypoints', 'waypointScript', 'waypointsEnabledUAV', 'waypointShow', 'waypointSpeed', 'waypointStatements', 'waypointTimeout', 'waypointTimeoutCurrent', 'waypointType', 'waypointVisible', 'weaponAccessories', 'weaponCargo', 'weaponDirection', 'weaponLowered', 'weapons', 'weaponsItems', 'weaponsItemsCargo', 'weaponState', 'weaponsTurret', 'weightRTD', 'west', 'WFSideText', 'while', 'wind', 'windDir', 'windStr', 'wingsForcesRTD', 'with', 'worldName', 'worldSize', 'worldToModel', 'worldToModelVisual', 'worldToScreen'];
+  var control = ['case', 'catch', 'default', 'do', 'else', 'exit', 'exitWith|5', 'for', 'forEach', 'from', 'if', 'switch', 'then', 'throw', 'to', 'try', 'while', 'with'];
+  var operators = ['!', '-', '+', '!=', '%', '&&', '*', '/', '=', '==', '>', '>=', '<', '<=', '^', ':', '>>'];
+  var specials = ['_forEachIndex|10', '_this|10', '_x|10'];
+  var literals = ['true', 'false', 'nil'];
+  var builtins = allCommands.filter(function (command) {
+    return control.indexOf(command) == -1 &&
+        literals.indexOf(command) == -1 &&
+        operators.indexOf(command) == -1;
+  });
+  //Note: operators will not be treated as builtins due to the lexeme rules
+  builtins = builtins.concat(specials);
+
+  // In SQF strings, quotes matching the start are escaped by adding a consecutive.
+  // Example of single escaped quotes: " "" " and  ' '' '.
+  var STRINGS = {
+    className: 'string',
+    relevance: 0,
+    variants: [
+      {
+        begin: '"',
+        end: '"',
+        contains: [{begin: '""'}]
+      },
+      {
+        begin: '\'',
+        end: '\'',
+        contains: [{begin: '\'\''}]
+      }
+    ]
+  };
+
+  var NUMBERS = {
+    className: 'number',
+    begin: hljs.NUMBER_RE,
+    relevance: 0
+  };
+
+  // Preprocessor definitions borrowed from C++
+  var PREPROCESSOR_STRINGS = {
+    className: 'string',
+    variants: [
+      hljs.QUOTE_STRING_MODE,
+      {
+        begin: '\'\\\\?.', end: '\'',
+        illegal: '.'
+      }
+    ]
+  };
+
+  var PREPROCESSOR =       {
+    className: 'preprocessor',
+    begin: '#', end: '$',
+    keywords: 'if else elif endif define undef warning error line ' +
+              'pragma ifdef ifndef',
+    contains: [
+      {
+        begin: /\\\n/, relevance: 0
+      },
+      {
+        beginKeywords: 'include', end: '$',
+        contains: [
+          PREPROCESSOR_STRINGS,
+          {
+            className: 'string',
+            begin: '<', end: '>',
+            illegal: '\\n',
+          }
+        ]
+      },
+      PREPROCESSOR_STRINGS,
+      NUMBERS,
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE
+    ]
+  };
+
+  return {
+    aliases: ['sqf'],
+    case_insensitive: true,
+    keywords: {
+      keyword: control.join(' '),
+      built_in: builtins.join(' '),
+      literal: literals.join(' ')
+    },
+    contains: [
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      NUMBERS,
+      STRINGS,
+      PREPROCESSOR
+    ]
+  };
+});
+
+hljs.registerLanguage('sql', function(hljs) {
+  var COMMENT_MODE = hljs.COMMENT('--', '$');
+  return {
+    case_insensitive: true,
+    illegal: /[<>{}*]/,
+    contains: [
+      {
+        className: 'operator',
+        beginKeywords:
+          'begin end start commit rollback savepoint lock alter create drop rename call ' +
+          'delete do handler insert load replace select truncate update set show pragma grant ' +
+          'merge describe use explain help declare prepare execute deallocate release ' +
+          'unlock purge reset change stop analyze cache flush optimize repair kill ' +
+          'install uninstall checksum restore check backup revoke',
+        end: /;/, endsWithParent: true,
+        keywords: {
+          keyword:
+            'abort abs absolute acc acce accep accept access accessed accessible account acos action activate add ' +
+            'addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias ' +
+            'allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply ' +
+            'archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan ' +
+            'atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid ' +
+            'authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile ' +
+            'before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float ' +
+            'binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound ' +
+            'buffer_cache buffer_pool build bulk by byte byteordermark bytes c cache caching call calling cancel ' +
+            'capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base ' +
+            'char_length character_length characters characterset charindex charset charsetform charsetid check ' +
+            'checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close ' +
+            'cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation ' +
+            'collect colu colum column column_value columns columns_updated comment commit compact compatibility ' +
+            'compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn ' +
+            'connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection ' +
+            'consider consistent constant constraint constraints constructor container content contents context ' +
+            'contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost ' +
+            'count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation ' +
+            'critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user ' +
+            'cursor curtime customdatum cycle d data database databases datafile datafiles datalength date_add ' +
+            'date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts ' +
+            'day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate ' +
+            'declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults ' +
+            'deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank ' +
+            'depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor ' +
+            'deterministic diagnostics difference dimension direct_load directory disable disable_all ' +
+            'disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div ' +
+            'do document domain dotnet double downgrade drop dumpfile duplicate duration e each edition editionable ' +
+            'editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt ' +
+            'end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors ' +
+            'escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding ' +
+            'execu execut execute exempt exists exit exp expire explain export export_set extended extent external ' +
+            'external_1 external_2 externally extract f failed failed_login_attempts failover failure far fast ' +
+            'feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final ' +
+            'finish first first_value fixed flash_cache flashback floor flush following follows for forall force ' +
+            'form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ' +
+            'ftp full function g general generated get get_format get_lock getdate getutcdate global global_name ' +
+            'globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups ' +
+            'gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex ' +
+            'hierarchy high high_priority hosts hour http i id ident_current ident_incr ident_seed identified ' +
+            'identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment ' +
+            'index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile ' +
+            'initial initialized initially initrans inmemory inner innodb input insert install instance instantiable ' +
+            'instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat ' +
+            'is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists ' +
+            'k keep keep_duplicates key keys kill l language large last last_day last_insert_id last_value lax lcase ' +
+            'lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit ' +
+            'lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate ' +
+            'locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call ' +
+            'logoff logon logs long loop low low_priority lower lpad lrtrim ltrim m main make_set makedate maketime ' +
+            'managed management manual map mapping mask master master_pos_wait match matched materialized max ' +
+            'maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans ' +
+            'md5 measures median medium member memcompress memory merge microsecond mid migration min minextents ' +
+            'minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month ' +
+            'months mount move movement multiset mutex n name name_const names nan national native natural nav nchar ' +
+            'nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile ' +
+            'nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile ' +
+            'nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder ' +
+            'nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck ' +
+            'noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe ' +
+            'nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ' +
+            'ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old ' +
+            'on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date ' +
+            'oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary ' +
+            'out outer outfile outline output over overflow overriding p package pad parallel parallel_enable ' +
+            'parameters parent parse partial partition partitions pascal passing password password_grace_time ' +
+            'password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex ' +
+            'pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc ' +
+            'performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin ' +
+            'policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction ' +
+            'prediction_cost prediction_details prediction_probability prediction_set prepare present preserve ' +
+            'prior priority private private_sga privileges procedural procedure procedure_analyze processlist ' +
+            'profiles project prompt protection public publishingservername purge quarter query quick quiesce quota ' +
+            'quotename radians raise rand range rank raw read reads readsize rebuild record records ' +
+            'recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh ' +
+            'regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy ' +
+            'reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename ' +
+            'repair repeat replace replicate replication required reset resetlogs resize resource respect restore ' +
+            'restricted result result_cache resumable resume retention return returning returns reuse reverse revoke ' +
+            'right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows ' +
+            'rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll ' +
+            'sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select ' +
+            'self sequence sequential serializable server servererror session session_user sessions_per_user set ' +
+            'sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor ' +
+            'si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin ' +
+            'size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex ' +
+            'source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows ' +
+            'sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone ' +
+            'standby start starting startup statement static statistics stats_binomial_test stats_crosstab ' +
+            'stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep ' +
+            'stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev ' +
+            'stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate ' +
+            'subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum ' +
+            'suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate ' +
+            'sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime t table tables tablespace tan tdo ' +
+            'template temporary terminated tertiary_weights test than then thread through tier ties time time_format ' +
+            'time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr ' +
+            'timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking ' +
+            'transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate ' +
+            'try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress ' +
+            'under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot ' +
+            'unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert ' +
+            'url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date ' +
+            'utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var ' +
+            'var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray ' +
+            'verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear ' +
+            'wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped ' +
+            'xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces ' +
+            'xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek',
+          literal:
+            'true false null',
+          built_in:
+            'array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number ' +
+            'numeric real record serial serial8 smallint text varchar varying void'
+        },
+        contains: [
+          {
+            className: 'string',
+            begin: '\'', end: '\'',
+            contains: [hljs.BACKSLASH_ESCAPE, {begin: '\'\''}]
+          },
+          {
+            className: 'string',
+            begin: '"', end: '"',
+            contains: [hljs.BACKSLASH_ESCAPE, {begin: '""'}]
+          },
+          {
+            className: 'string',
+            begin: '`', end: '`',
+            contains: [hljs.BACKSLASH_ESCAPE]
+          },
+          hljs.C_NUMBER_MODE,
+          hljs.C_BLOCK_COMMENT_MODE,
+          COMMENT_MODE
+        ]
+      },
+      hljs.C_BLOCK_COMMENT_MODE,
+      COMMENT_MODE
+    ]
+  };
+});
+
+hljs.registerLanguage('stata', function(hljs) {
+  return {
+    aliases: ['do', 'ado'],
+    case_insensitive: true,
+    keywords: 'if else in foreach for forv forva forval forvalu forvalue forvalues by bys bysort xi quietly qui capture about ac ac_7 acprplot acprplot_7 adjust ado adopath adoupdate alpha ameans an ano anov anova anova_estat anova_terms anovadef aorder ap app appe appen append arch arch_dr arch_estat arch_p archlm areg areg_p args arima arima_dr arima_estat arima_p as asmprobit asmprobit_estat asmprobit_lf asmprobit_mfx__dlg asmprobit_p ass asse asser assert avplot avplot_7 avplots avplots_7 bcskew0 bgodfrey binreg bip0_lf biplot bipp_lf bipr_lf bipr_p biprobit bitest bitesti bitowt blogit bmemsize boot bootsamp bootstrap bootstrap_8 boxco_l boxco_p boxcox boxcox_6 boxcox_p bprobit br break brier bro brow brows browse brr brrstat bs bs_7 bsampl_w bsample bsample_7 bsqreg bstat bstat_7 bstat_8 bstrap bstrap_7 ca ca_estat ca_p cabiplot camat canon canon_8 canon_8_p canon_estat canon_p cap caprojection capt captu captur capture cat cc cchart cchart_7 cci cd censobs_table centile cf char chdir checkdlgfiles checkestimationsample checkhlpfiles checksum chelp ci cii cl class classutil clear cli clis clist clo clog clog_lf clog_p clogi clogi_sw clogit clogit_lf clogit_p clogitp clogl_sw cloglog clonevar clslistarray cluster cluster_measures cluster_stop cluster_tree cluster_tree_8 clustermat cmdlog cnr cnre cnreg cnreg_p cnreg_sw cnsreg codebook collaps4 collapse colormult_nb colormult_nw compare compress conf confi confir confirm conren cons const constr constra constrai constrain constraint continue contract copy copyright copysource cor corc corr corr2data corr_anti corr_kmo corr_smc corre correl correla correlat correlate corrgram cou coun count cox cox_p cox_sw coxbase coxhaz coxvar cprplot cprplot_7 crc cret cretu cretur creturn cross cs cscript cscript_log csi ct ct_is ctset ctst_5 ctst_st cttost cumsp cumsp_7 cumul cusum cusum_7 cutil d datasig datasign datasigna datasignat datasignatu datasignatur datasignature datetof db dbeta de dec deco decod decode deff des desc descr descri describ describe destring dfbeta dfgls dfuller di di_g dir dirstats dis discard disp disp_res disp_s displ displa display distinct do doe doed doedi doedit dotplot dotplot_7 dprobit drawnorm drop ds ds_util dstdize duplicates durbina dwstat dydx e ed edi edit egen eivreg emdef en enc enco encod encode eq erase ereg ereg_lf ereg_p ereg_sw ereghet ereghet_glf ereghet_glf_sh ereghet_gp ereghet_ilf ereghet_ilf_sh ereghet_ip eret eretu eretur ereturn err erro error est est_cfexist est_cfname est_clickable est_expand est_hold est_table est_unhold est_unholdok estat estat_default estat_summ estat_vce_only esti estimates etodow etof etomdy ex exi exit expand expandcl fac fact facto factor factor_estat factor_p factor_pca_rotated factor_rotate factormat fcast fcast_compute fcast_graph fdades fdadesc fdadescr fdadescri fdadescrib fdadescribe fdasav fdasave fdause fh_st file open file read file close file filefilter fillin find_hlp_file findfile findit findit_7 fit fl fli flis flist for5_0 form forma format fpredict frac_154 frac_adj frac_chk frac_cox frac_ddp frac_dis frac_dv frac_in frac_mun frac_pp frac_pq frac_pv frac_wgt frac_xo fracgen fracplot fracplot_7 fracpoly fracpred fron_ex fron_hn fron_p fron_tn fron_tn2 frontier ftodate ftoe ftomdy ftowdate g gamhet_glf gamhet_gp gamhet_ilf gamhet_ip gamma gamma_d2 gamma_p gamma_sw gammahet gdi_hexagon gdi_spokes ge gen gene gener genera generat generate genrank genstd genvmean gettoken gl gladder gladder_7 glim_l01 glim_l02 glim_l03 glim_l04 glim_l05 glim_l06 glim_l07 glim_l08 glim_l09 glim_l10 glim_l11 glim_l12 glim_lf glim_mu glim_nw1 glim_nw2 glim_nw3 glim_p glim_v1 glim_v2 glim_v3 glim_v4 glim_v5 glim_v6 glim_v7 glm glm_6 glm_p glm_sw glmpred glo glob globa global glogit glogit_8 glogit_p gmeans gnbre_lf gnbreg gnbreg_5 gnbreg_p gomp_lf gompe_sw gomper_p gompertz gompertzhet gomphet_glf gomphet_glf_sh gomphet_gp gomphet_ilf gomphet_ilf_sh gomphet_ip gphdot gphpen gphprint gprefs gprobi_p gprobit gprobit_8 gr gr7 gr_copy gr_current gr_db gr_describe gr_dir gr_draw gr_draw_replay gr_drop gr_edit gr_editviewopts gr_example gr_example2 gr_export gr_print gr_qscheme gr_query gr_read gr_rename gr_replay gr_save gr_set gr_setscheme gr_table gr_undo gr_use graph graph7 grebar greigen greigen_7 greigen_8 grmeanby grmeanby_7 gs_fileinfo gs_filetype gs_graphinfo gs_stat gsort gwood h hadimvo hareg hausman haver he heck_d2 heckma_p heckman heckp_lf heckpr_p heckprob hel help hereg hetpr_lf hetpr_p hetprob hettest hexdump hilite hist hist_7 histogram hlogit hlu hmeans hotel hotelling hprobit hreg hsearch icd9 icd9_ff icd9p iis impute imtest inbase include inf infi infil infile infix inp inpu input ins insheet insp inspe inspec inspect integ inten intreg intreg_7 intreg_p intrg2_ll intrg_ll intrg_ll2 ipolate iqreg ir irf irf_create irfm iri is_svy is_svysum isid istdize ivprob_1_lf ivprob_lf ivprobit ivprobit_p ivreg ivreg_footnote ivtob_1_lf ivtob_lf ivtobit ivtobit_p jackknife jacknife jknife jknife_6 jknife_8 jkstat joinby kalarma1 kap kap_3 kapmeier kappa kapwgt kdensity kdensity_7 keep ksm ksmirnov ktau kwallis l la lab labe label labelbook ladder levels levelsof leverage lfit lfit_p li lincom line linktest lis list lloghet_glf lloghet_glf_sh lloghet_gp lloghet_ilf lloghet_ilf_sh lloghet_ip llogi_sw llogis_p llogist llogistic llogistichet lnorm_lf lnorm_sw lnorma_p lnormal lnormalhet lnormhet_glf lnormhet_glf_sh lnormhet_gp lnormhet_ilf lnormhet_ilf_sh lnormhet_ip lnskew0 loadingplot loc loca local log logi logis_lf logistic logistic_p logit logit_estat logit_p loglogs logrank loneway lookfor lookup lowess lowess_7 lpredict lrecomp lroc lroc_7 lrtest ls lsens lsens_7 lsens_x lstat ltable ltable_7 ltriang lv lvr2plot lvr2plot_7 m ma mac macr macro makecns man manova manova_estat manova_p manovatest mantel mark markin markout marksample mat mat_capp mat_order mat_put_rr mat_rapp mata mata_clear mata_describe mata_drop mata_matdescribe mata_matsave mata_matuse mata_memory mata_mlib mata_mosave mata_rename mata_which matalabel matcproc matlist matname matr matri matrix matrix_input__dlg matstrik mcc mcci md0_ md1_ md1debug_ md2_ md2debug_ mds mds_estat mds_p mdsconfig mdslong mdsmat mdsshepard mdytoe mdytof me_derd mean means median memory memsize meqparse mer merg merge mfp mfx mhelp mhodds minbound mixed_ll mixed_ll_reparm mkassert mkdir mkmat mkspline ml ml_5 ml_adjs ml_bhhhs ml_c_d ml_check ml_clear ml_cnt ml_debug ml_defd ml_e0 ml_e0_bfgs ml_e0_cycle ml_e0_dfp ml_e0i ml_e1 ml_e1_bfgs ml_e1_bhhh ml_e1_cycle ml_e1_dfp ml_e2 ml_e2_cycle ml_ebfg0 ml_ebfr0 ml_ebfr1 ml_ebh0q ml_ebhh0 ml_ebhr0 ml_ebr0i ml_ecr0i ml_edfp0 ml_edfr0 ml_edfr1 ml_edr0i ml_eds ml_eer0i ml_egr0i ml_elf ml_elf_bfgs ml_elf_bhhh ml_elf_cycle ml_elf_dfp ml_elfi ml_elfs ml_enr0i ml_enrr0 ml_erdu0 ml_erdu0_bfgs ml_erdu0_bhhh ml_erdu0_bhhhq ml_erdu0_cycle ml_erdu0_dfp ml_erdu0_nrbfgs ml_exde ml_footnote ml_geqnr ml_grad0 ml_graph ml_hbhhh ml_hd0 ml_hold ml_init ml_inv ml_log ml_max ml_mlout ml_mlout_8 ml_model ml_nb0 ml_opt ml_p ml_plot ml_query ml_rdgrd ml_repor ml_s_e ml_score ml_searc ml_technique ml_unhold mleval mlf_ mlmatbysum mlmatsum mlog mlogi mlogit mlogit_footnote mlogit_p mlopts mlsum mlvecsum mnl0_ mor more mov move mprobit mprobit_lf mprobit_p mrdu0_ mrdu1_ mvdecode mvencode mvreg mvreg_estat n nbreg nbreg_al nbreg_lf nbreg_p nbreg_sw nestreg net newey newey_7 newey_p news nl nl_7 nl_9 nl_9_p nl_p nl_p_7 nlcom nlcom_p nlexp2 nlexp2_7 nlexp2a nlexp2a_7 nlexp3 nlexp3_7 nlgom3 nlgom3_7 nlgom4 nlgom4_7 nlinit nllog3 nllog3_7 nllog4 nllog4_7 nlog_rd nlogit nlogit_p nlogitgen nlogittree nlpred no nobreak noi nois noisi noisil noisily note notes notes_dlg nptrend numlabel numlist odbc old_ver olo olog ologi ologi_sw ologit ologit_p ologitp on one onew onewa oneway op_colnm op_comp op_diff op_inv op_str opr opro oprob oprob_sw oprobi oprobi_p oprobit oprobitp opts_exclusive order orthog orthpoly ou out outf outfi outfil outfile outs outsh outshe outshee outsheet ovtest pac pac_7 palette parse parse_dissim pause pca pca_8 pca_display pca_estat pca_p pca_rotate pcamat pchart pchart_7 pchi pchi_7 pcorr pctile pentium pergram pergram_7 permute permute_8 personal peto_st pkcollapse pkcross pkequiv pkexamine pkexamine_7 pkshape pksumm pksumm_7 pl plo plot plugin pnorm pnorm_7 poisgof poiss_lf poiss_sw poisso_p poisson poisson_estat post postclose postfile postutil pperron pr prais prais_e prais_e2 prais_p predict predictnl preserve print pro prob probi probit probit_estat probit_p proc_time procoverlay procrustes procrustes_estat procrustes_p profiler prog progr progra program prop proportion prtest prtesti pwcorr pwd q\\s qby qbys qchi qchi_7 qladder qladder_7 qnorm qnorm_7 qqplot qqplot_7 qreg qreg_c qreg_p qreg_sw qu quadchk quantile quantile_7 que quer query range ranksum ratio rchart rchart_7 rcof recast reclink recode reg reg3 reg3_p regdw regr regre regre_p2 regres regres_p regress regress_estat regriv_p remap ren rena renam rename renpfix repeat replace report reshape restore ret retu retur return rm rmdir robvar roccomp roccomp_7 roccomp_8 rocf_lf rocfit rocfit_8 rocgold rocplot rocplot_7 roctab roctab_7 rolling rologit rologit_p rot rota rotat rotate rotatemat rreg rreg_p ru run runtest rvfplot rvfplot_7 rvpplot rvpplot_7 sa safesum sample sampsi sav save savedresults saveold sc sca scal scala scalar scatter scm_mine sco scob_lf scob_p scobi_sw scobit scor score scoreplot scoreplot_help scree screeplot screeplot_help sdtest sdtesti se search separate seperate serrbar serrbar_7 serset set set_defaults sfrancia sh she shel shell shewhart shewhart_7 signestimationsample signrank signtest simul simul_7 simulate simulate_8 sktest sleep slogit slogit_d2 slogit_p smooth snapspan so sor sort spearman spikeplot spikeplot_7 spikeplt spline_x split sqreg sqreg_p sret sretu sretur sreturn ssc st st_ct st_hc st_hcd st_hcd_sh st_is st_issys st_note st_promo st_set st_show st_smpl st_subid stack statsby statsby_8 stbase stci stci_7 stcox stcox_estat stcox_fr stcox_fr_ll stcox_p stcox_sw stcoxkm stcoxkm_7 stcstat stcurv stcurve stcurve_7 stdes stem stepwise stereg stfill stgen stir stjoin stmc stmh stphplot stphplot_7 stphtest stphtest_7 stptime strate strate_7 streg streg_sw streset sts sts_7 stset stsplit stsum sttocc sttoct stvary stweib su suest suest_8 sum summ summa summar summari summariz summarize sunflower sureg survcurv survsum svar svar_p svmat svy svy_disp svy_dreg svy_est svy_est_7 svy_estat svy_get svy_gnbreg_p svy_head svy_header svy_heckman_p svy_heckprob_p svy_intreg_p svy_ivreg_p svy_logistic_p svy_logit_p svy_mlogit_p svy_nbreg_p svy_ologit_p svy_oprobit_p svy_poisson_p svy_probit_p svy_regress_p svy_sub svy_sub_7 svy_x svy_x_7 svy_x_p svydes svydes_8 svygen svygnbreg svyheckman svyheckprob svyintreg svyintreg_7 svyintrg svyivreg svylc svylog_p svylogit svymarkout svymarkout_8 svymean svymlog svymlogit svynbreg svyolog svyologit svyoprob svyoprobit svyopts svypois svypois_7 svypoisson svyprobit svyprobt svyprop svyprop_7 svyratio svyreg svyreg_p svyregress svyset svyset_7 svyset_8 svytab svytab_7 svytest svytotal sw sw_8 swcnreg swcox swereg swilk swlogis swlogit swologit swoprbt swpois swprobit swqreg swtobit swweib symmetry symmi symplot symplot_7 syntax sysdescribe sysdir sysuse szroeter ta tab tab1 tab2 tab_or tabd tabdi tabdis tabdisp tabi table tabodds tabodds_7 tabstat tabu tabul tabula tabulat tabulate te tempfile tempname tempvar tes test testnl testparm teststd tetrachoric time_it timer tis tob tobi tobit tobit_p tobit_sw token tokeni tokeniz tokenize tostring total translate translator transmap treat_ll treatr_p treatreg trim trnb_cons trnb_mean trpoiss_d2 trunc_ll truncr_p truncreg tsappend tset tsfill tsline tsline_ex tsreport tsrevar tsrline tsset tssmooth tsunab ttest ttesti tut_chk tut_wait tutorial tw tware_st two twoway twoway__fpfit_serset twoway__function_gen twoway__histogram_gen twoway__ipoint_serset twoway__ipoints_serset twoway__kdensity_gen twoway__lfit_serset twoway__normgen_gen twoway__pci_serset twoway__qfit_serset twoway__scatteri_serset twoway__sunflower_gen twoway_ksm_serset ty typ type typeof u unab unabbrev unabcmd update us use uselabel var var_mkcompanion var_p varbasic varfcast vargranger varirf varirf_add varirf_cgraph varirf_create varirf_ctable varirf_describe varirf_dir varirf_drop varirf_erase varirf_graph varirf_ograph varirf_rename varirf_set varirf_table varlist varlmar varnorm varsoc varstable varstable_w varstable_w2 varwle vce vec vec_fevd vec_mkphi vec_p vec_p_w vecirf_create veclmar veclmar_w vecnorm vecnorm_w vecrank vecstable verinst vers versi versio version view viewsource vif vwls wdatetof webdescribe webseek webuse weib1_lf weib2_lf weib_lf weib_lf0 weibhet_glf weibhet_glf_sh weibhet_glfa weibhet_glfa_sh weibhet_gp weibhet_ilf weibhet_ilf_sh weibhet_ilfa weibhet_ilfa_sh weibhet_ip weibu_sw weibul_p weibull weibull_c weibull_s weibullhet wh whelp whi which whil while wilc_st wilcoxon win wind windo window winexec wntestb wntestb_7 wntestq xchart xchart_7 xcorr xcorr_7 xi xi_6 xmlsav xmlsave xmluse xpose xsh xshe xshel xshell xt_iis xt_tis xtab_p xtabond xtbin_p xtclog xtcloglog xtcloglog_8 xtcloglog_d2 xtcloglog_pa_p xtcloglog_re_p xtcnt_p xtcorr xtdata xtdes xtfront_p xtfrontier xtgee xtgee_elink xtgee_estat xtgee_makeivar xtgee_p xtgee_plink xtgls xtgls_p xthaus xthausman xtht_p xthtaylor xtile xtint_p xtintreg xtintreg_8 xtintreg_d2 xtintreg_p xtivp_1 xtivp_2 xtivreg xtline xtline_ex xtlogit xtlogit_8 xtlogit_d2 xtlogit_fe_p xtlogit_pa_p xtlogit_re_p xtmixed xtmixed_estat xtmixed_p xtnb_fe xtnb_lf xtnbreg xtnbreg_pa_p xtnbreg_refe_p xtpcse xtpcse_p xtpois xtpoisson xtpoisson_d2 xtpoisson_pa_p xtpoisson_refe_p xtpred xtprobit xtprobit_8 xtprobit_d2 xtprobit_re_p xtps_fe xtps_lf xtps_ren xtps_ren_8 xtrar_p xtrc xtrc_p xtrchh xtrefe_p xtreg xtreg_be xtreg_fe xtreg_ml xtreg_pa_p xtreg_re xtregar xtrere_p xtset xtsf_ll xtsf_llti xtsum xttab xttest0 xttobit xttobit_8 xttobit_p xttrans yx yxview__barlike_draw yxview_area_draw yxview_bar_draw yxview_dot_draw yxview_dropline_draw yxview_function_draw yxview_iarrow_draw yxview_ilabels_draw yxview_normal_draw yxview_pcarrow_draw yxview_pcbarrow_draw yxview_pccapsym_draw yxview_pcscatter_draw yxview_pcspike_draw yxview_rarea_draw yxview_rbar_draw yxview_rbarm_draw yxview_rcap_draw yxview_rcapsym_draw yxview_rconnected_draw yxview_rline_draw yxview_rscatter_draw yxview_rspike_draw yxview_spike_draw yxview_sunflower_draw zap_s zinb zinb_llf zinb_plf zip zip_llf zip_p zip_plf zt_ct_5 zt_hc_5 zt_hcd_5 zt_is_5 zt_iss_5 zt_sho_5 zt_smp_5 ztbase_5 ztcox_5 ztdes_5 ztereg_5 ztfill_5 ztgen_5 ztir_5 ztjoin_5 ztnb ztnb_p ztp ztp_p zts_5 ztset_5 ztspli_5 ztsum_5 zttoct_5 ztvary_5 ztweib_5',
+        contains: [
+      {
+        className: 'label',
+        variants: [
+          {begin: "\\$\\{?[a-zA-Z0-9_]+\\}?"},
+          {begin: "`[a-zA-Z0-9_]+'"}
+
+        ]
+      },
+      {
+        className: 'string',
+        variants: [
+          {begin: '`"[^\r\n]*?"\''},
+          {begin: '"[^\r\n"]*"'}
+        ]
+      },
+
+      {
+        className: 'literal',
+        variants: [
+          {
+            begin: '\\b(abs|acos|asin|atan|atan2|atanh|ceil|cloglog|comb|cos|digamma|exp|floor|invcloglog|invlogit|ln|lnfact|lnfactorial|lngamma|log|log10|max|min|mod|reldif|round|sign|sin|sqrt|sum|tan|tanh|trigamma|trunc|betaden|Binomial|binorm|binormal|chi2|chi2tail|dgammapda|dgammapdada|dgammapdadx|dgammapdx|dgammapdxdx|F|Fden|Ftail|gammaden|gammap|ibeta|invbinomial|invchi2|invchi2tail|invF|invFtail|invgammap|invibeta|invnchi2|invnFtail|invnibeta|invnorm|invnormal|invttail|nbetaden|nchi2|nFden|nFtail|nibeta|norm|normal|normalden|normd|npnchi2|tden|ttail|uniform|abbrev|char|index|indexnot|length|lower|ltrim|match|plural|proper|real|regexm|regexr|regexs|reverse|rtrim|string|strlen|strlower|strltrim|strmatch|strofreal|strpos|strproper|strreverse|strrtrim|strtrim|strupper|subinstr|subinword|substr|trim|upper|word|wordcount|_caller|autocode|byteorder|chop|clip|cond|e|epsdouble|epsfloat|group|inlist|inrange|irecode|matrix|maxbyte|maxdouble|maxfloat|maxint|maxlong|mi|minbyte|mindouble|minfloat|minint|minlong|missing|r|recode|replay|return|s|scalar|d|date|day|dow|doy|halfyear|mdy|month|quarter|week|year|d|daily|dofd|dofh|dofm|dofq|dofw|dofy|h|halfyearly|hofd|m|mofd|monthly|q|qofd|quarterly|tin|twithin|w|weekly|wofd|y|yearly|yh|ym|yofd|yq|yw|cholesky|colnumb|colsof|corr|det|diag|diag0cnt|el|get|hadamard|I|inv|invsym|issym|issymmetric|J|matmissing|matuniform|mreldif|nullmat|rownumb|rowsof|sweep|syminv|trace|vec|vecdiag)(?=\\(|$)'
+          }
+        ]
+      },
+
+      hljs.COMMENT('^[ \t]*\\*.*$', false),
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE
+    ]
+  };
+});
+
+hljs.registerLanguage('step21', function(hljs) {
+  var STEP21_IDENT_RE = '[A-Z_][A-Z0-9_.]*';
+  var STEP21_CLOSE_RE = 'END-ISO-10303-21;';
+  var STEP21_KEYWORDS = {
+    literal: '',
+    built_in: '',
+    keyword:
+    'HEADER ENDSEC DATA'
+  };
+  var STEP21_START = {
+    className: 'preprocessor',
+    begin: 'ISO-10303-21;',
+    relevance: 10
+  };
+  var STEP21_CODE = [
+    hljs.C_LINE_COMMENT_MODE,
+    hljs.C_BLOCK_COMMENT_MODE,
+    hljs.COMMENT('/\\*\\*!', '\\*/'),
+    hljs.C_NUMBER_MODE,
+    hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null}),
+    hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null}),
+    {
+      className: 'string',
+      begin: "'", end: "'"
+    },
+    {
+      className: 'label',
+      variants: [
+        {
+          begin: '#', end: '\\d+',
+          illegal: '\\W'
+        }
+      ]
+    }
+  ];
+
+  return {
+    aliases: ['p21', 'step', 'stp'],
+    case_insensitive: true, // STEP 21 is case insensitive in theory, in practice all non-comments are capitalized.
+    lexemes: STEP21_IDENT_RE,
+    keywords: STEP21_KEYWORDS,
+    contains: [
+      {
+        className: 'preprocessor',
+        begin: STEP21_CLOSE_RE,
+        relevance: 10
+      },
+      STEP21_START
+    ].concat(STEP21_CODE)
+  };
+});
+
+hljs.registerLanguage('stylus', function(hljs) {
+
+  var VARIABLE = {
+    className: 'variable',
+    begin: '\\$' + hljs.IDENT_RE
+  };
+
+  var HEX_COLOR = {
+    className: 'hexcolor',
+    begin: '#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})',
+    relevance: 10
+  };
+
+  var AT_KEYWORDS = [
+    'charset',
+    'css',
+    'debug',
+    'extend',
+    'font-face',
+    'for',
+    'import',
+    'include',
+    'media',
+    'mixin',
+    'page',
+    'warn',
+    'while'
+  ];
+
+  var PSEUDO_SELECTORS = [
+    'after',
+    'before',
+    'first-letter',
+    'first-line',
+    'active',
+    'first-child',
+    'focus',
+    'hover',
+    'lang',
+    'link',
+    'visited'
+  ];
+
+  var TAGS = [
+    'a',
+    'abbr',
+    'address',
+    'article',
+    'aside',
+    'audio',
+    'b',
+    'blockquote',
+    'body',
+    'button',
+    'canvas',
+    'caption',
+    'cite',
+    'code',
+    'dd',
+    'del',
+    'details',
+    'dfn',
+    'div',
+    'dl',
+    'dt',
+    'em',
+    'fieldset',
+    'figcaption',
+    'figure',
+    'footer',
+    'form',
+    'h1',
+    'h2',
+    'h3',
+    'h4',
+    'h5',
+    'h6',
+    'header',
+    'hgroup',
+    'html',
+    'i',
+    'iframe',
+    'img',
+    'input',
+    'ins',
+    'kbd',
+    'label',
+    'legend',
+    'li',
+    'mark',
+    'menu',
+    'nav',
+    'object',
+    'ol',
+    'p',
+    'q',
+    'quote',
+    'samp',
+    'section',
+    'span',
+    'strong',
+    'summary',
+    'sup',
+    'table',
+    'tbody',
+    'td',
+    'textarea',
+    'tfoot',
+    'th',
+    'thead',
+    'time',
+    'tr',
+    'ul',
+    'var',
+    'video'
+  ];
+
+  var TAG_END = '[\\.\\s\\n\\[\\:,]';
+
+  var ATTRIBUTES = [
+    'align-content',
+    'align-items',
+    'align-self',
+    'animation',
+    'animation-delay',
+    'animation-direction',
+    'animation-duration',
+    'animation-fill-mode',
+    'animation-iteration-count',
+    'animation-name',
+    'animation-play-state',
+    'animation-timing-function',
+    'auto',
+    'backface-visibility',
+    'background',
+    'background-attachment',
+    'background-clip',
+    'background-color',
+    'background-image',
+    'background-origin',
+    'background-position',
+    'background-repeat',
+    'background-size',
+    'border',
+    'border-bottom',
+    'border-bottom-color',
+    'border-bottom-left-radius',
+    'border-bottom-right-radius',
+    'border-bottom-style',
+    'border-bottom-width',
+    'border-collapse',
+    'border-color',
+    'border-image',
+    'border-image-outset',
+    'border-image-repeat',
+    'border-image-slice',
+    'border-image-source',
+    'border-image-width',
+    'border-left',
+    'border-left-color',
+    'border-left-style',
+    'border-left-width',
+    'border-radius',
+    'border-right',
+    'border-right-color',
+    'border-right-style',
+    'border-right-width',
+    'border-spacing',
+    'border-style',
+    'border-top',
+    'border-top-color',
+    'border-top-left-radius',
+    'border-top-right-radius',
+    'border-top-style',
+    'border-top-width',
+    'border-width',
+    'bottom',
+    'box-decoration-break',
+    'box-shadow',
+    'box-sizing',
+    'break-after',
+    'break-before',
+    'break-inside',
+    'caption-side',
+    'clear',
+    'clip',
+    'clip-path',
+    'color',
+    'column-count',
+    'column-fill',
+    'column-gap',
+    'column-rule',
+    'column-rule-color',
+    'column-rule-style',
+    'column-rule-width',
+    'column-span',
+    'column-width',
+    'columns',
+    'content',
+    'counter-increment',
+    'counter-reset',
+    'cursor',
+    'direction',
+    'display',
+    'empty-cells',
+    'filter',
+    'flex',
+    'flex-basis',
+    'flex-direction',
+    'flex-flow',
+    'flex-grow',
+    'flex-shrink',
+    'flex-wrap',
+    'float',
+    'font',
+    'font-family',
+    'font-feature-settings',
+    'font-kerning',
+    'font-language-override',
+    'font-size',
+    'font-size-adjust',
+    'font-stretch',
+    'font-style',
+    'font-variant',
+    'font-variant-ligatures',
+    'font-weight',
+    'height',
+    'hyphens',
+    'icon',
+    'image-orientation',
+    'image-rendering',
+    'image-resolution',
+    'ime-mode',
+    'inherit',
+    'initial',
+    'justify-content',
+    'left',
+    'letter-spacing',
+    'line-height',
+    'list-style',
+    'list-style-image',
+    'list-style-position',
+    'list-style-type',
+    'margin',
+    'margin-bottom',
+    'margin-left',
+    'margin-right',
+    'margin-top',
+    'marks',
+    'mask',
+    'max-height',
+    'max-width',
+    'min-height',
+    'min-width',
+    'nav-down',
+    'nav-index',
+    'nav-left',
+    'nav-right',
+    'nav-up',
+    'none',
+    'normal',
+    'object-fit',
+    'object-position',
+    'opacity',
+    'order',
+    'orphans',
+    'outline',
+    'outline-color',
+    'outline-offset',
+    'outline-style',
+    'outline-width',
+    'overflow',
+    'overflow-wrap',
+    'overflow-x',
+    'overflow-y',
+    'padding',
+    'padding-bottom',
+    'padding-left',
+    'padding-right',
+    'padding-top',
+    'page-break-after',
+    'page-break-before',
+    'page-break-inside',
+    'perspective',
+    'perspective-origin',
+    'pointer-events',
+    'position',
+    'quotes',
+    'resize',
+    'right',
+    'tab-size',
+    'table-layout',
+    'text-align',
+    'text-align-last',
+    'text-decoration',
+    'text-decoration-color',
+    'text-decoration-line',
+    'text-decoration-style',
+    'text-indent',
+    'text-overflow',
+    'text-rendering',
+    'text-shadow',
+    'text-transform',
+    'text-underline-position',
+    'top',
+    'transform',
+    'transform-origin',
+    'transform-style',
+    'transition',
+    'transition-delay',
+    'transition-duration',
+    'transition-property',
+    'transition-timing-function',
+    'unicode-bidi',
+    'vertical-align',
+    'visibility',
+    'white-space',
+    'widows',
+    'width',
+    'word-break',
+    'word-spacing',
+    'word-wrap',
+    'z-index'
+  ];
+
+  // illegals
+  var ILLEGAL = [
+    '\\{',
+    '\\}',
+    '\\?',
+    '(\\bReturn\\b)', // monkey
+    '(\\bEnd\\b)', // monkey
+    '(\\bend\\b)', // vbscript
+    ';', // sql
+    '#\\s', // markdown
+    '\\*\\s', // markdown
+    '===\\s', // markdown
+    '\\|',
+    '%', // prolog
+  ];
+
+  return {
+    aliases: ['styl'],
+    case_insensitive: false,
+    illegal: '(' + ILLEGAL.join('|') + ')',
+    keywords: 'if else for in',
+    contains: [
+
+      // strings
+      hljs.QUOTE_STRING_MODE,
+      hljs.APOS_STRING_MODE,
+
+      // comments
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+
+      // hex colors
+      HEX_COLOR,
+
+      // class tag
+      {
+        begin: '\\.[a-zA-Z][a-zA-Z0-9_-]*' + TAG_END,
+        returnBegin: true,
+        contains: [
+          {className: 'class', begin: '\\.[a-zA-Z][a-zA-Z0-9_-]*'}
+        ]
+      },
+
+      // id tag
+      {
+        begin: '\\#[a-zA-Z][a-zA-Z0-9_-]*' + TAG_END,
+        returnBegin: true,
+        contains: [
+          {className: 'id', begin: '\\#[a-zA-Z][a-zA-Z0-9_-]*'}
+        ]
+      },
+
+      // tags
+      {
+        begin: '\\b(' + TAGS.join('|') + ')' + TAG_END,
+        returnBegin: true,
+        contains: [
+          {className: 'tag', begin: '\\b[a-zA-Z][a-zA-Z0-9_-]*'}
+        ]
+      },
+
+      // psuedo selectors
+      {
+        className: 'pseudo',
+        begin: '&?:?:\\b(' + PSEUDO_SELECTORS.join('|') + ')' + TAG_END
+      },
+
+      // @ keywords
+      {
+        className: 'at_rule',
+        begin: '\@(' + AT_KEYWORDS.join('|') + ')\\b'
+      },
+
+      // variables
+      VARIABLE,
+
+      // dimension
+      hljs.CSS_NUMBER_MODE,
+
+      // number
+      hljs.NUMBER_MODE,
+
+      // functions
+      //  - only from beginning of line + whitespace
+      {
+        className: 'function',
+        begin: '\\b[a-zA-Z][a-zA-Z0-9_\-]*\\(.*\\)',
+        illegal: '[\\n]',
+        returnBegin: true,
+        contains: [
+          {className: 'title', begin: '\\b[a-zA-Z][a-zA-Z0-9_\-]*'},
+          {
+            className: 'params',
+            begin: /\(/,
+            end: /\)/,
+            contains: [
+              HEX_COLOR,
+              VARIABLE,
+              hljs.APOS_STRING_MODE,
+              hljs.CSS_NUMBER_MODE,
+              hljs.NUMBER_MODE,
+              hljs.QUOTE_STRING_MODE
+            ]
+          }
+        ]
+      },
+
+      // attributes
+      //  - only from beginning of line + whitespace
+      //  - must have whitespace after it
+      {
+        className: 'attribute',
+        begin: '\\b(' + ATTRIBUTES.reverse().join('|') + ')\\b'
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('swift', function(hljs) {
+  var SWIFT_KEYWORDS = {
+      keyword: '__COLUMN__ __FILE__ __FUNCTION__ __LINE__ as as! as? associativity ' +
+        'break case catch class continue convenience default defer deinit didSet do ' +
+        'dynamic dynamicType else enum extension fallthrough false final for func ' +
+        'get guard if import in indirect infix init inout internal is lazy left let ' +
+        'mutating nil none nonmutating operator optional override postfix precedence ' +
+        'prefix private protocol Protocol public repeat required rethrows return ' +
+        'right self Self set static struct subscript super switch throw throws true ' +
+        'try try! try? Type typealias unowned var weak where while willSet',
+      literal: 'true false nil',
+      built_in: 'abs advance alignof alignofValue anyGenerator assert assertionFailure ' +
+        'bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC ' +
+        'bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros ' +
+        'debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords ' +
+        'enumerate equal fatalError filter find getBridgedObjectiveCType getVaList ' +
+        'indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC ' +
+        'isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare ' +
+        'map max maxElement min minElement numericCast overlaps partition posix ' +
+        'precondition preconditionFailure print println quickSort readLine reduce reflect ' +
+        'reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split ' +
+        'startsWith stride strideof strideofValue swap toString transcode ' +
+        'underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap ' +
+        'unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer ' +
+        'withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers ' +
+        'withUnsafePointer withUnsafePointers withVaList zip'
+    };
+
+  var TYPE = {
+    className: 'type',
+    begin: '\\b[A-Z][\\w\']*',
+    relevance: 0
+  };
+  var BLOCK_COMMENT = hljs.COMMENT(
+    '/\\*',
+    '\\*/',
+    {
+      contains: ['self']
+    }
+  );
+  var SUBST = {
+    className: 'subst',
+    begin: /\\\(/, end: '\\)',
+    keywords: SWIFT_KEYWORDS,
+    contains: [] // assigned later
+  };
+  var NUMBERS = {
+      className: 'number',
+      begin: '\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b',
+      relevance: 0
+  };
+  var QUOTE_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, {
+    contains: [SUBST, hljs.BACKSLASH_ESCAPE]
+  });
+  SUBST.contains = [NUMBERS];
+
+  return {
+    keywords: SWIFT_KEYWORDS,
+    contains: [
+      QUOTE_STRING_MODE,
+      hljs.C_LINE_COMMENT_MODE,
+      BLOCK_COMMENT,
+      TYPE,
+      NUMBERS,
+      {
+        className: 'func',
+        beginKeywords: 'func', end: '{', excludeEnd: true,
+        contains: [
+          hljs.inherit(hljs.TITLE_MODE, {
+            begin: /[A-Za-z$_][0-9A-Za-z$_]*/,
+            illegal: /\(/
+          }),
+          {
+            className: 'generics',
+            begin: /</, end: />/,
+            illegal: />/
+          },
+          {
+            className: 'params',
+            begin: /\(/, end: /\)/, endsParent: true,
+            keywords: SWIFT_KEYWORDS,
+            contains: [
+              'self',
+              NUMBERS,
+              QUOTE_STRING_MODE,
+              hljs.C_BLOCK_COMMENT_MODE,
+              {begin: ':'} // relevance booster
+            ],
+            illegal: /["']/
+          }
+        ],
+        illegal: /\[|%/
+      },
+      {
+        className: 'class',
+        beginKeywords: 'struct protocol class extension enum',
+        keywords: SWIFT_KEYWORDS,
+        end: '\\{',
+        excludeEnd: true,
+        contains: [
+          hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/})
+        ]
+      },
+      {
+        className: 'preprocessor', // @attributes
+        begin: '(@warn_unused_result|@exported|@lazy|@noescape|' +
+                  '@NSCopying|@NSManaged|@objc|@convention|@required|' +
+                  '@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|' +
+                  '@infix|@prefix|@postfix|@autoclosure|@testable|@available|' +
+                  '@nonobjc|@NSApplicationMain|@UIApplicationMain)'
+
+      },
+      {
+        beginKeywords: 'import', end: /$/,
+        contains: [hljs.C_LINE_COMMENT_MODE, BLOCK_COMMENT]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('tcl', function(hljs) {
+  return {
+    aliases: ['tk'],
+    keywords: 'after append apply array auto_execok auto_import auto_load auto_mkindex ' +
+      'auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock ' +
+      'close concat continue dde dict encoding eof error eval exec exit expr fblocked ' +
+      'fconfigure fcopy file fileevent filename flush for foreach format gets glob global ' +
+      'history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list ' +
+      'llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 '+
+      'mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex '+
+      'platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename '+
+      'return safe scan seek set socket source split string subst switch tcl_endOfWord '+
+      'tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter '+
+      'tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update '+
+      'uplevel upvar variable vwait while',
+    contains: [
+      hljs.COMMENT(';[ \\t]*#', '$'),
+      hljs.COMMENT('^[ \\t]*#', '$'),
+      {
+        beginKeywords: 'proc',
+        end: '[\\{]',
+        excludeEnd: true,
+        contains: [
+          {
+            className: 'symbol',
+            begin: '[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*',
+            end: '[ \\t\\n\\r]',
+            endsWithParent: true,
+            excludeEnd: true
+          }
+        ]
+      },
+      {
+        className: 'variable',
+        excludeEnd: true,
+        variants: [
+          {
+            begin: '\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*\\(([a-zA-Z0-9_])*\\)',
+            end: '[^a-zA-Z0-9_\\}\\$]'
+          },
+          {
+            begin: '\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*',
+            end: '(\\))?[^a-zA-Z0-9_\\}\\$]'
+          }
+        ]
+      },
+      {
+        className: 'string',
+        contains: [hljs.BACKSLASH_ESCAPE],
+        variants: [
+          hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null}),
+          hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null})
+        ]
+      },
+      {
+        className: 'number',
+        variants: [hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE]
+      }
+    ]
+  }
+});
+
+hljs.registerLanguage('tex', function(hljs) {
+  var COMMAND1 = {
+    className: 'command',
+    begin: '\\\\[a-zA-Zа-яА-я]+[\\*]?'
+  };
+  var COMMAND2 = {
+    className: 'command',
+    begin: '\\\\[^a-zA-Zа-яА-я0-9]'
+  };
+  var SPECIAL = {
+    className: 'special',
+    begin: '[{}\\[\\]\\&#~]',
+    relevance: 0
+  };
+
+  return {
+    contains: [
+      { // parameter
+        begin: '\\\\[a-zA-Zа-яА-я]+[\\*]? *= *-?\\d*\\.?\\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?',
+        returnBegin: true,
+        contains: [
+          COMMAND1, COMMAND2,
+          {
+            className: 'number',
+            begin: ' *=', end: '-?\\d*\\.?\\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?',
+            excludeBegin: true
+          }
+        ],
+        relevance: 10
+      },
+      COMMAND1, COMMAND2,
+      SPECIAL,
+      {
+        className: 'formula',
+        begin: '\\$\\$', end: '\\$\\$',
+        contains: [COMMAND1, COMMAND2, SPECIAL],
+        relevance: 0
+      },
+      {
+        className: 'formula',
+        begin: '\\$', end: '\\$',
+        contains: [COMMAND1, COMMAND2, SPECIAL],
+        relevance: 0
+      },
+      hljs.COMMENT(
+        '%',
+        '$',
+        {
+          relevance: 0
+        }
+      )
+    ]
+  };
+});
+
+hljs.registerLanguage('thrift', function(hljs) {
+  var BUILT_IN_TYPES = 'bool byte i16 i32 i64 double string binary';
+  return {
+    keywords: {
+      keyword:
+        'namespace const typedef struct enum service exception void oneway set list map required optional',
+      built_in:
+        BUILT_IN_TYPES,
+      literal:
+        'true false'
+    },
+    contains: [
+      hljs.QUOTE_STRING_MODE,
+      hljs.NUMBER_MODE,
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      {
+        className: 'class',
+        beginKeywords: 'struct enum service exception', end: /\{/,
+        illegal: /\n/,
+        contains: [
+          hljs.inherit(hljs.TITLE_MODE, {
+            starts: {endsWithParent: true, excludeEnd: true} // hack: eating everything after the first title
+          })
+        ]
+      },
+      {
+        begin: '\\b(set|list|map)\\s*<', end: '>',
+        keywords: BUILT_IN_TYPES,
+        contains: ['self']
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('tp', function(hljs) {
+  var TPID = {
+    className: 'number',
+    begin: '[1-9][0-9]*', /* no leading zeros */
+    relevance: 0
+  };
+  var TPLABEL = {
+    className: 'comment',
+    begin: ':[^\\]]+'
+  };
+  var TPDATA = {
+    className: 'built_in',
+    begin: '(AR|P|PAYLOAD|PR|R|SR|RSR|LBL|VR|UALM|MESSAGE|UTOOL|UFRAME|TIMER|\
+    TIMER_OVERFLOW|JOINT_MAX_SPEED|RESUME_PROG|DIAG_REC)\\[', end: '\\]',
+    contains: [
+      'self',
+      TPID,
+      TPLABEL
+    ]
+  };
+  var TPIO = {
+    className: 'built_in',
+    begin: '(AI|AO|DI|DO|F|RI|RO|UI|UO|GI|GO|SI|SO)\\[', end: '\\]',
+    contains: [
+      'self',
+      TPID,
+      hljs.QUOTE_STRING_MODE, /* for pos section at bottom */
+      TPLABEL
+    ]
+  };
+
+  return {
+    keywords: {
+      keyword:
+        'ABORT ACC ADJUST AND AP_LD BREAK CALL CNT COL CONDITION CONFIG DA DB ' +
+        'DIV DETECT ELSE END ENDFOR ERR_NUM ERROR_PROG FINE FOR GP GUARD INC ' +
+        'IF JMP LINEAR_MAX_SPEED LOCK MOD MONITOR OFFSET Offset OR OVERRIDE ' +
+        'PAUSE PREG PTH RT_LD RUN SELECT SKIP Skip TA TB TO TOOL_OFFSET ' +
+        'Tool_Offset UF UT UFRAME_NUM UTOOL_NUM UNLOCK WAIT X Y Z W P R STRLEN ' +
+        'SUBSTR FINDSTR VOFFSET',
+      constant:
+        'ON OFF max_speed LPOS JPOS ENABLE DISABLE START STOP RESET'
+    },
+    contains: [
+      TPDATA,
+      TPIO,
+      {
+        className: 'keyword',
+        begin: '/(PROG|ATTR|MN|POS|END)\\b'
+      },
+      {
+        /* this is for cases like ,CALL */
+        className: 'keyword',
+        begin: '(CALL|RUN|POINT_LOGIC|LBL)\\b'
+      },
+      {
+        /* this is for cases like CNT100 where the default lexemes do not
+         * separate the keyword and the number */
+        className: 'keyword',
+        begin: '\\b(ACC|CNT|Skip|Offset|PSPD|RT_LD|AP_LD|Tool_Offset)'
+      },
+      {
+        /* to catch numbers that do not have a word boundary on the left */
+        className: 'number',
+        begin: '\\d+(sec|msec|mm/sec|cm/min|inch/min|deg/sec|mm|in|cm)?\\b',
+        relevance: 0
+      },
+      hljs.COMMENT('//', '[;$]'),
+      hljs.COMMENT('!', '[;$]'),
+      hljs.COMMENT('--eg:', '$'),
+      hljs.QUOTE_STRING_MODE,
+      {
+        className: 'string',
+        begin: '\'', end: '\''
+      },
+      hljs.C_NUMBER_MODE,
+      {
+        className: 'variable',
+        begin: '\\$[A-Za-z0-9_]+'
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('twig', function(hljs) {
+  var PARAMS = {
+    className: 'params',
+    begin: '\\(', end: '\\)'
+  };
+
+  var FUNCTION_NAMES = 'attribute block constant cycle date dump include ' +
+                  'max min parent random range source template_from_string';
+
+  var FUNCTIONS = {
+    className: 'function',
+    beginKeywords: FUNCTION_NAMES,
+    relevance: 0,
+    contains: [
+      PARAMS
+    ]
+  };
+
+  var FILTER = {
+    className: 'filter',
+    begin: /\|[A-Za-z_]+:?/,
+    keywords:
+      'abs batch capitalize convert_encoding date date_modify default ' +
+      'escape first format join json_encode keys last length lower ' +
+      'merge nl2br number_format raw replace reverse round slice sort split ' +
+      'striptags title trim upper url_encode',
+    contains: [
+      FUNCTIONS
+    ]
+  };
+
+  var TAGS = 'autoescape block do embed extends filter flush for ' +
+    'if import include macro sandbox set spaceless use verbatim';
+
+  TAGS = TAGS + ' ' + TAGS.split(' ').map(function(t){return 'end' + t}).join(' ');
+
+  return {
+    aliases: ['craftcms'],
+    case_insensitive: true,
+    subLanguage: 'xml',
+    contains: [
+      hljs.COMMENT(/\{#/, /#}/),
+      {
+        className: 'template_tag',
+        begin: /\{%/, end: /%}/,
+        keywords: TAGS,
+        contains: [FILTER, FUNCTIONS]
+      },
+      {
+        className: 'variable',
+        begin: /\{\{/, end: /}}/,
+        contains: [FILTER, FUNCTIONS]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('typescript', function(hljs) {
+  var KEYWORDS = {
+    keyword:
+      'in if for while finally var new function|0 do return void else break catch ' +
+      'instanceof with throw case default try this switch continue typeof delete ' +
+      'let yield const class public private protected get set super ' +
+      'static implements enum export import declare type namespace abstract',
+    literal:
+      'true false null undefined NaN Infinity',
+    built_in:
+      'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' +
+      'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' +
+      'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' +
+      'TypeError URIError Number Math Date String RegExp Array Float32Array ' +
+      'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' +
+      'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' +
+      'module console window document any number boolean string void'
+  };
+
+  return {
+    aliases: ['ts'],
+    keywords: KEYWORDS,
+    contains: [
+      {
+        className: 'pi',
+        begin: /^\s*['"]use strict['"]/,
+        relevance: 0
+      },
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      {
+        className: 'number',
+        variants: [
+          { begin: '\\b(0[bB][01]+)' },
+          { begin: '\\b(0[oO][0-7]+)' },
+          { begin: hljs.C_NUMBER_RE }
+        ],
+        relevance: 0
+      },
+      { // "value" container
+        begin: '(' + hljs.RE_STARTERS_RE + '|\\b(case|return|throw)\\b)\\s*',
+        keywords: 'return throw case',
+        contains: [
+          hljs.C_LINE_COMMENT_MODE,
+          hljs.C_BLOCK_COMMENT_MODE,
+          hljs.REGEXP_MODE
+        ],
+        relevance: 0
+      },
+      {
+        className: 'function',
+        begin: 'function', end: /[\{;]/, excludeEnd: true,
+        keywords: KEYWORDS,
+        contains: [
+          'self',
+          hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/}),
+          {
+            className: 'params',
+            begin: /\(/, end: /\)/,
+            excludeBegin: true,
+            excludeEnd: true,
+            keywords: KEYWORDS,
+            contains: [
+              hljs.C_LINE_COMMENT_MODE,
+              hljs.C_BLOCK_COMMENT_MODE
+            ],
+            illegal: /["'\(]/
+          }
+        ],
+        illegal: /\[|%/,
+        relevance: 0 // () => {} is more typical in TypeScript
+      },
+      {
+        className: 'constructor',
+        beginKeywords: 'constructor', end: /\{/, excludeEnd: true,
+        relevance: 10
+      },
+      {
+        className: 'module',
+        beginKeywords: 'module', end: /\{/, excludeEnd: true
+      },
+      {
+        className: 'interface',
+        beginKeywords: 'interface', end: /\{/, excludeEnd: true,
+        keywords: 'interface extends'
+      },
+      {
+        begin: /\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`
+      },
+      {
+        begin: '\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('vala', function(hljs) {
+  return {
+    keywords: {
+      keyword:
+        // Value types
+        'char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 ' +
+        'uint16 uint32 uint64 float double bool struct enum string void ' +
+        // Reference types
+        'weak unowned owned ' +
+        // Modifiers
+        'async signal static abstract interface override ' +
+        // Control Structures
+        'while do for foreach else switch case break default return try catch ' +
+        // Visibility
+        'public private protected internal ' +
+        // Other
+        'using new this get set const stdout stdin stderr var',
+      built_in:
+        'DBus GLib CCode Gee Object',
+      literal:
+        'false true null'
+    },
+    contains: [
+      {
+        className: 'class',
+        beginKeywords: 'class interface delegate namespace', end: '{', excludeEnd: true,
+        illegal: '[^,:\\n\\s\\.]',
+        contains: [
+          hljs.UNDERSCORE_TITLE_MODE
+        ]
+      },
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.C_BLOCK_COMMENT_MODE,
+      {
+        className: 'string',
+        begin: '"""', end: '"""',
+        relevance: 5
+      },
+      hljs.APOS_STRING_MODE,
+      hljs.QUOTE_STRING_MODE,
+      hljs.C_NUMBER_MODE,
+      {
+        className: 'preprocessor',
+        begin: '^#', end: '$',
+        relevance: 2
+      },
+      {
+        className: 'constant',
+        begin: ' [A-Z_]+ ',
+        relevance: 0
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('vbnet', function(hljs) {
+  return {
+    aliases: ['vb'],
+    case_insensitive: true,
+    keywords: {
+      keyword:
+        'addhandler addressof alias and andalso aggregate ansi as assembly auto binary by byref byval ' + /* a-b */
+        'call case catch class compare const continue custom declare default delegate dim distinct do ' + /* c-d */
+        'each equals else elseif end enum erase error event exit explicit finally for friend from function ' + /* e-f */
+        'get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue ' + /* g-i */
+        'join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass ' + /* j-m */
+        'namespace narrowing new next not notinheritable notoverridable ' + /* n */
+        'of off on operator option optional or order orelse overloads overridable overrides ' + /* o */
+        'paramarray partial preserve private property protected public ' + /* p */
+        'raiseevent readonly redim rem removehandler resume return ' + /* r */
+        'select set shadows shared skip static step stop structure strict sub synclock ' + /* s */
+        'take text then throw to try unicode until using when where while widening with withevents writeonly xor', /* t-x */
+      built_in:
+        'boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype ' +  /* b-c */
+        'date decimal directcast double gettype getxmlnamespace iif integer long object ' + /* d-o */
+        'sbyte short single string trycast typeof uinteger ulong ushort', /* s-u */
+      literal:
+        'true false nothing'
+    },
+    illegal: '//|{|}|endif|gosub|variant|wend', /* reserved deprecated keywords */
+    contains: [
+      hljs.inherit(hljs.QUOTE_STRING_MODE, {contains: [{begin: '""'}]}),
+      hljs.COMMENT(
+        '\'',
+        '$',
+        {
+          returnBegin: true,
+          contains: [
+            {
+              className: 'xmlDocTag',
+              begin: '\'\'\'|<!--|-->',
+              contains: [hljs.PHRASAL_WORDS_MODE]
+            },
+            {
+              className: 'xmlDocTag',
+              begin: '</?', end: '>',
+              contains: [hljs.PHRASAL_WORDS_MODE]
+            }
+          ]
+        }
+      ),
+      hljs.C_NUMBER_MODE,
+      {
+        className: 'preprocessor',
+        begin: '#', end: '$',
+        keywords: 'if else elseif end region externalsource'
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('vbscript', function(hljs) {
+  return {
+    aliases: ['vbs'],
+    case_insensitive: true,
+    keywords: {
+      keyword:
+        'call class const dim do loop erase execute executeglobal exit for each next function ' +
+        'if then else on error option explicit new private property let get public randomize ' +
+        'redim rem select case set stop sub while wend with end to elseif is or xor and not ' +
+        'class_initialize class_terminate default preserve in me byval byref step resume goto',
+      built_in:
+        'lcase month vartype instrrev ubound setlocale getobject rgb getref string ' +
+        'weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency ' +
+        'conversions csng timevalue second year space abs clng timeserial fixs len asc ' +
+        'isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate ' +
+        'instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex ' +
+        'chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim ' +
+        'strcomp int createobject loadpicture tan formatnumber mid scriptenginebuildversion ' +
+        'scriptengine split scriptengineminorversion cint sin datepart ltrim sqr ' +
+        'scriptenginemajorversion time derived eval date formatpercent exp inputbox left ascw ' +
+        'chrw regexp server response request cstr err',
+      literal:
+        'true false null nothing empty'
+    },
+    illegal: '//',
+    contains: [
+      hljs.inherit(hljs.QUOTE_STRING_MODE, {contains: [{begin: '""'}]}),
+      hljs.COMMENT(
+        /'/,
+        /$/,
+        {
+          relevance: 0
+        }
+      ),
+      hljs.C_NUMBER_MODE
+    ]
+  };
+});
+
+hljs.registerLanguage('vbscript-html', function(hljs) {
+  return {
+    subLanguage: 'xml',
+    contains: [
+      {
+        begin: '<%', end: '%>',
+        subLanguage: 'vbscript'
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('verilog', function(hljs) {
+  return {
+    aliases: ['v'],
+    case_insensitive: true,
+    keywords: {
+      keyword:
+        'always and assign begin buf bufif0 bufif1 case casex casez cmos deassign ' +
+        'default defparam disable edge else end endcase endfunction endmodule ' +
+        'endprimitive endspecify endtable endtask event for force forever fork ' +
+        'function if ifnone initial inout input join macromodule module nand ' +
+        'negedge nmos nor not notif0 notif1 or output parameter pmos posedge ' +
+        'primitive pulldown pullup rcmos release repeat rnmos rpmos rtran ' +
+        'rtranif0 rtranif1 specify specparam table task timescale tran ' +
+        'tranif0 tranif1 wait while xnor xor',
+      typename:
+        'highz0 highz1 integer large medium pull0 pull1 real realtime reg ' +
+        'scalared signed small strong0 strong1 supply0 supply0 supply1 supply1 ' +
+        'time tri tri0 tri1 triand trior trireg vectored wand weak0 weak1 wire wor'
+    },
+    contains: [
+      hljs.C_BLOCK_COMMENT_MODE,
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.QUOTE_STRING_MODE,
+      {
+        className: 'number',
+        begin: '\\b(\\d+\'(b|h|o|d|B|H|O|D))?[0-9xzXZ]+',
+        contains: [hljs.BACKSLASH_ESCAPE],
+        relevance: 0
+      },
+      /* ports in instances */
+      {
+        className: 'typename',
+        begin: '\\.\\w+',
+        relevance: 0
+      },
+      /* parameters to instances */
+      {
+        className: 'value',
+        begin: '#\\((?!parameter).+\\)'
+      },
+      /* operators */
+      {
+        className: 'keyword',
+        begin: '\\+|-|\\*|/|%|<|>|=|#|`|\\!|&|\\||@|:|\\^|~|\\{|\\}',
+        relevance: 0
+      }
+    ]
+  }; // return
+});
+
+hljs.registerLanguage('vhdl', function(hljs) {
+  // Regular expression for VHDL numeric literals.
+
+  // Decimal literal:
+  var INTEGER_RE = '\\d(_|\\d)*';
+  var EXPONENT_RE = '[eE][-+]?' + INTEGER_RE;
+  var DECIMAL_LITERAL_RE = INTEGER_RE + '(\\.' + INTEGER_RE + ')?' + '(' + EXPONENT_RE + ')?';
+  // Based literal:
+  var BASED_INTEGER_RE = '\\w+';
+  var BASED_LITERAL_RE = INTEGER_RE + '#' + BASED_INTEGER_RE + '(\\.' + BASED_INTEGER_RE + ')?' + '#' + '(' + EXPONENT_RE + ')?';
+
+  var NUMBER_RE = '\\b(' + BASED_LITERAL_RE + '|' + DECIMAL_LITERAL_RE + ')';
+
+  return {
+    case_insensitive: true,
+    keywords: {
+      keyword:
+        'abs access after alias all and architecture array assert attribute begin block ' +
+        'body buffer bus case component configuration constant context cover disconnect ' +
+        'downto default else elsif end entity exit fairness file for force function generate ' +
+        'generic group guarded if impure in inertial inout is label library linkage literal ' +
+        'loop map mod nand new next nor not null of on open or others out package port ' +
+        'postponed procedure process property protected pure range record register reject ' +
+        'release rem report restrict restrict_guarantee return rol ror select sequence ' +
+        'severity shared signal sla sll sra srl strong subtype then to transport type ' +
+        'unaffected units until use variable vmode vprop vunit wait when while with xnor xor',
+      typename:
+        'boolean bit character severity_level integer time delay_length natural positive ' +
+        'string bit_vector file_open_kind file_open_status std_ulogic std_ulogic_vector ' +
+        'std_logic std_logic_vector unsigned signed boolean_vector integer_vector ' +
+        'real_vector time_vector'
+    },
+    illegal: '{',
+    contains: [
+      hljs.C_BLOCK_COMMENT_MODE,        // VHDL-2008 block commenting.
+      hljs.COMMENT('--', '$'),
+      hljs.QUOTE_STRING_MODE,
+      {
+        className: 'number',
+        begin: NUMBER_RE,
+        relevance: 0
+      },
+      {
+        className: 'literal',
+        begin: '\'(U|X|0|1|Z|W|L|H|-)\'',
+        contains: [hljs.BACKSLASH_ESCAPE]
+      },
+      {
+        className: 'attribute',
+        begin: '\'[A-Za-z](_?[A-Za-z0-9])*',
+        contains: [hljs.BACKSLASH_ESCAPE]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('vim', function(hljs) {
+  return {
+    lexemes: /[!#@\w]+/,
+    keywords: {
+      keyword: //ex command
+        // express version except: ! & * < = > !! # @ @@
+        'N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope '+
+        'cp cpf cq cr cs cst cu cuna cunme cw d|0 delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu g|0 go gr grepa gu gv ha h|0 helpf helpg helpt hi hid his i|0 ia iabc if ij il im imapc '+
+        'ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs n|0 new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 '+
+        'profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf q|0 quita qa r|0 rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv s|0 sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor '+
+        'so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync t|0 tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew '+
+        'tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up v|0 ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ '+
+        // full version
+        'Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload '+
+        'bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap '+
+        'cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor '+
+        'endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap '+
+        'imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview '+
+        'lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap '+
+        'nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext '+
+        'ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding '+
+        'scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace '+
+        'startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious '+'trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew '+
+        'vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank',
+      built_in: //built in func
+        'abs acos add and append argc argidx argv asin atan atan2 browse browsedir bufexists buflisted bufloaded bufname bufnr bufwinnr byte2line byteidx call ceil changenr char2nr cindent clearmatches col complete complete_add complete_check confirm copy cos cosh count cscope_connection cursor '+
+        'deepcopy delete did_filetype diff_filler diff_hlID empty escape eval eventhandler executable exists exp expand extend feedkeys filereadable filewritable filter finddir findfile float2nr floor fmod fnameescape fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreground function '+
+        'garbagecollect get getbufline getbufvar getchar getcharmod getcmdline getcmdpos getcmdtype getcwd getfontname getfperm getfsize getftime getftype getline getloclist getmatches getpid getpos getqflist getreg getregtype gettabvar gettabwinvar getwinposx getwinposy getwinvar glob globpath has has_key '+
+        'haslocaldir hasmapto histadd histdel histget histnr hlexists hlID hostname iconv indent index input inputdialog inputlist inputrestore inputsave inputsecret insert invert isdirectory islocked items join keys len libcall libcallnr line line2byte lispindent localtime log log10 luaeval map maparg mapcheck '+
+        'match matchadd matcharg matchdelete matchend matchlist matchstr max min mkdir mode mzeval nextnonblank nr2char or pathshorten pow prevnonblank printf pumvisible py3eval pyeval range readfile reltime reltimestr remote_expr remote_foreground remote_peek remote_read remote_send remove rename repeat '+
+        'resolve reverse round screenattr screenchar screencol screenrow search searchdecl searchpair searchpairpos searchpos server2client serverlist setbufvar setcmdpos setline setloclist setmatches setpos setqflist setreg settabvar settabwinvar setwinvar sha256 shellescape shiftwidth simplify sin '+
+        'sinh sort soundfold spellbadword spellsuggest split sqrt str2float str2nr strchars strdisplaywidth strftime stridx string strlen strpart strridx strtrans strwidth submatch substitute synconcealed synID synIDattr '+
+        'synIDtrans synstack system tabpagebuflist tabpagenr tabpagewinnr tagfiles taglist tan tanh tempname tolower toupper tr trunc type undofile undotree values virtcol visualmode wildmenumode winbufnr wincol winheight winline winnr winrestcmd winrestview winsaveview winwidth writefile xor'
+    },
+    illegal: /[{:]/,
+    contains: [
+      hljs.NUMBER_MODE,
+      hljs.APOS_STRING_MODE,
+      {
+        className: 'string',
+        // quote with escape, comment as quote
+        begin: /"((\\")|[^"\n])*("|\n)/
+      },
+      {
+        className: 'variable',
+        begin: /[bwtglsav]:[\w\d_]*/
+      },
+      {
+        className: 'function',
+        beginKeywords: 'function function!', end: '$',
+        relevance: 0,
+        contains: [
+          hljs.TITLE_MODE,
+          {
+            className: 'params',
+            begin: '\\(', end: '\\)'
+          }
+        ]
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('x86asm', function(hljs) {
+  return {
+    case_insensitive: true,
+    lexemes: '\\.?' + hljs.IDENT_RE,
+    keywords: {
+      keyword:
+        'lock rep repe repz repne repnz xaquire xrelease bnd nobnd ' +
+        'aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63',
+      literal:
+        // Instruction pointer
+        'ip eip rip ' +
+        // 8-bit registers
+        'al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ' +
+        // 16-bit registers
+        'ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w ' +
+        // 32-bit registers
+        'eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d ' +
+        // 64-bit registers
+        'rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 ' +
+        // Segment registers
+        'cs ds es fs gs ss ' +
+        // Floating point stack registers
+        'st st0 st1 st2 st3 st4 st5 st6 st7 ' +
+        // MMX Registers
+        'mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 ' +
+        // SSE registers
+        'xmm0  xmm1  xmm2  xmm3  xmm4  xmm5  xmm6  xmm7  xmm8  xmm9 xmm10  xmm11 xmm12 xmm13 xmm14 xmm15 ' +
+        'xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ' +
+        // AVX registers
+        'ymm0  ymm1  ymm2  ymm3  ymm4  ymm5  ymm6  ymm7  ymm8  ymm9 ymm10  ymm11 ymm12 ymm13 ymm14 ymm15 ' +
+        'ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 ' +
+        // AVX-512F registers
+        'zmm0  zmm1  zmm2  zmm3  zmm4  zmm5  zmm6  zmm7  zmm8  zmm9 zmm10  zmm11 zmm12 zmm13 zmm14 zmm15 ' +
+        'zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 ' +
+        // AVX-512F mask registers
+        'k0 k1 k2 k3 k4 k5 k6 k7 ' +
+        // Bound (MPX) register
+        'bnd0 bnd1 bnd2 bnd3 ' +
+        // Special register
+        'cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 ' +
+        // NASM altreg package
+        'r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b ' +
+        'r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d ' +
+        'r0h r1h r2h r3h ' +
+        'r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l',
+
+      pseudo:
+        'db dw dd dq dt ddq do dy dz ' +
+        'resb resw resd resq rest resdq reso resy resz ' +
+        'incbin equ times',
+
+      preprocessor:
+        '%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif ' +
+        '%ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep ' +
+        '%endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment ' +
+        '.nolist ' +
+        'byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr ' +
+        '__FILE__ __LINE__ __SECT__  __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ ' +
+        '__UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__  __PASS__ struc endstruc istruc at iend ' +
+        'align alignb sectalign daz nodaz up down zero default option assume public ',
+
+      built_in:
+        'bits use16 use32 use64 default section segment absolute extern global common cpu float ' +
+        '__utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ ' +
+        '__float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ ' +
+        '__Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e ' +
+        'float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__'
+    },
+    contains: [
+      hljs.COMMENT(
+        ';',
+        '$',
+        {
+          relevance: 0
+        }
+      ),
+      {
+        className: 'number',
+        variants: [
+          // Float number and x87 BCD
+          {
+            begin: '\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|' +
+                   '(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b',
+            relevance: 0
+          },
+
+          // Hex number in $
+          { begin: '\\$[0-9][0-9A-Fa-f]*', relevance: 0 },
+
+          // Number in H,D,T,Q,O,B,Y suffix
+          { begin: '\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b' },
+
+          // Number in X,D,T,Q,O,B,Y prefix
+          { begin: '\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b'}
+        ]
+      },
+      // Double quote string
+      hljs.QUOTE_STRING_MODE,
+      {
+        className: 'string',
+        variants: [
+          // Single-quoted string
+          { begin: '\'', end: '[^\\\\]\'' },
+          // Backquoted string
+          { begin: '`', end: '[^\\\\]`' },
+          // Section name
+          { begin: '\\.[A-Za-z0-9]+' }
+        ],
+        relevance: 0
+      },
+      {
+        className: 'label',
+        variants: [
+          // Global label and local label
+          { begin: '^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)' },
+          // Macro-local label
+          { begin: '^\\s*%%[A-Za-z0-9_$#@~.?]*:' }
+        ],
+        relevance: 0
+      },
+      // Macro parameter
+      {
+        className: 'argument',
+        begin: '%[0-9]+',
+        relevance: 0
+      },
+      // Macro parameter
+      {
+        className: 'built_in',
+        begin: '%!\S+',
+        relevance: 0
+      }
+    ]
+  };
+});
+
+hljs.registerLanguage('xl', function(hljs) {
+  var BUILTIN_MODULES =
+    'ObjectLoader Animate MovieCredits Slides Filters Shading Materials LensFlare Mapping VLCAudioVideo ' +
+    'StereoDecoder PointCloud NetworkAccess RemoteControl RegExp ChromaKey Snowfall NodeJS Speech Charts';
+
+  var XL_KEYWORDS = {
+    keyword: 'if then else do while until for loop import with is as where when by data constant',
+    literal: 'true false nil',
+    type: 'integer real text name boolean symbol infix prefix postfix block tree',
+    built_in: 'in mod rem and or xor not abs sign floor ceil sqrt sin cos tan asin acos atan exp expm1 log log2 log10 log1p pi at',
+    module: BUILTIN_MODULES,
+    id:
+      'text_length text_range text_find text_replace contains page slide basic_slide title_slide title subtitle ' +
+      'fade_in fade_out fade_at clear_color color line_color line_width texture_wrap texture_transform texture ' +
+      'scale_?x scale_?y scale_?z? translate_?x translate_?y translate_?z? rotate_?x rotate_?y rotate_?z? rectangle ' +
+      'circle ellipse sphere path line_to move_to quad_to curve_to theme background contents locally time mouse_?x ' +
+      'mouse_?y mouse_buttons'
+  };
+
+  var XL_CONSTANT = {
+    className: 'constant',
+    begin: '[A-Z][A-Z_0-9]+',
+    relevance: 0
+  };
+  var XL_VARIABLE = {
+    className: 'variable',
+    begin: '([A-Z][a-z_0-9]+)+',
+    relevance: 0
+  };
+  var XL_ID = {
+    className: 'id',
+    begin: '[a-z][a-z_0-9]+',
+    relevance: 0
+  };
+
+  var DOUBLE_QUOTE_TEXT = {
+    className: 'string',
+    begin: '"', end: '"', illegal: '\\n'
+  };
+  var SINGLE_QUOTE_TEXT = {
+    className: 'string',
+    begin: '\'', end: '\'', illegal: '\\n'
+  };
+  var LONG_TEXT = {
+    className: 'string',
+    begin: '<<', end: '>>'
+  };
+  var BASED_NUMBER = {
+    className: 'number',
+    begin: '[0-9]+#[0-9A-Z_]+(\\.[0-9-A-Z_]+)?#?([Ee][+-]?[0-9]+)?',
+    relevance: 10
+  };
+  var IMPORT = {
+    className: 'import',
+    beginKeywords: 'import', end: '$',
+    keywords: {
+      keyword: 'import',
+      module: BUILTIN_MODULES
+    },
+    relevance: 0,
+    contains: [DOUBLE_QUOTE_TEXT]
+  };
+  var FUNCTION_DEFINITION = {
+    className: 'function',
+    begin: '[a-z].*->'
+  };
+  return {
+    aliases: ['tao'],
+    lexemes: /[a-zA-Z][a-zA-Z0-9_?]*/,
+    keywords: XL_KEYWORDS,
+    contains: [
+    hljs.C_LINE_COMMENT_MODE,
+    hljs.C_BLOCK_COMMENT_MODE,
+    DOUBLE_QUOTE_TEXT,
+    SINGLE_QUOTE_TEXT,
+    LONG_TEXT,
+    FUNCTION_DEFINITION,
+    IMPORT,
+    XL_CONSTANT,
+    XL_VARIABLE,
+    XL_ID,
+    BASED_NUMBER,
+    hljs.NUMBER_MODE
+    ]
+  };
+});
+
+hljs.registerLanguage('xquery', function(hljs) {
+  var KEYWORDS = 'for let if while then else return where group by xquery encoding version' +
+    'module namespace boundary-space preserve strip default collation base-uri ordering' +
+    'copy-namespaces order declare import schema namespace function option in allowing empty' +
+    'at tumbling window sliding window start when only end when previous next stable ascending' +
+    'descending empty greatest least some every satisfies switch case typeswitch try catch and' +
+    'or to union intersect instance of treat as castable cast map array delete insert into' +
+    'replace value rename copy modify update';
+  var LITERAL = 'false true xs:string xs:integer element item xs:date xs:datetime xs:float xs:double xs:decimal QName xs:anyURI xs:long xs:int xs:short xs:byte attribute';
+  var VAR = {
+    className: 'variable',
+    begin: /\$[a-zA-Z0-9\-]+/,
+    relevance: 5
+  };
+
+  var NUMBER = {
+    className: 'number',
+    begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
+    relevance: 0
+  };
+
+  var STRING = {
+    className: 'string',
+    variants: [
+      {begin: /"/, end: /"/, contains: [{begin: /""/, relevance: 0}]},
+      {begin: /'/, end: /'/, contains: [{begin: /''/, relevance: 0}]}
+    ]
+  };
+
+  var ANNOTATION = {
+    className: 'decorator',
+    begin: '%\\w+'
+  };
+
+  var COMMENT = {
+    className: 'comment',
+    begin: '\\(:', end: ':\\)',
+    relevance: 10,
+    contains: [
+      {
+        className: 'doc', begin: '@\\w+'
+      }
+    ]
+  };
+
+  var METHOD = {
+    begin: '{', end: '}'
+  };
+
+  var CONTAINS = [
+    VAR,
+    STRING,
+    NUMBER,
+    COMMENT,
+    ANNOTATION,
+    METHOD
+  ];
+  METHOD.contains = CONTAINS;
+
+
+  return {
+    aliases: ['xpath', 'xq'],
+    case_insensitive: false,
+    lexemes: /[a-zA-Z\$][a-zA-Z0-9_:\-]*/,
+    illegal: /(proc)|(abstract)|(extends)|(until)|(#)/,
+    keywords: {
+      keyword: KEYWORDS,
+      literal: LITERAL
+    },
+    contains: CONTAINS
+  };
+});
+
+hljs.registerLanguage('zephir', function(hljs) {
+  var STRING = {
+    className: 'string',
+    contains: [hljs.BACKSLASH_ESCAPE],
+    variants: [
+      {
+        begin: 'b"', end: '"'
+      },
+      {
+        begin: 'b\'', end: '\''
+      },
+      hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null}),
+      hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null})
+    ]
+  };
+  var NUMBER = {variants: [hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE]};
+  return {
+    aliases: ['zep'],
+    case_insensitive: true,
+    keywords:
+    'and include_once list abstract global private echo interface as static endswitch ' +
+    'array null if endwhile or const for endforeach self var let while isset public ' +
+    'protected exit foreach throw elseif include __FILE__ empty require_once do xor ' +
+    'return parent clone use __CLASS__ __LINE__ else break print eval new ' +
+    'catch __METHOD__ case exception default die require __FUNCTION__ ' +
+    'enddeclare final try switch continue endfor endif declare unset true false ' +
+    'trait goto instanceof insteadof __DIR__ __NAMESPACE__ ' +
+    'yield finally int uint long ulong char uchar double float bool boolean string' +
+    'likely unlikely',
+    contains: [
+      hljs.C_LINE_COMMENT_MODE,
+      hljs.HASH_COMMENT_MODE,
+      hljs.COMMENT(
+        '/\\*',
+        '\\*/',
+        {
+          contains: [
+            {
+              className: 'doctag',
+              begin: '@[A-Za-z]+'
+            }
+          ]
+        }
+      ),
+      hljs.COMMENT(
+        '__halt_compiler.+?;',
+        false,
+        {
+          endsWithParent: true,
+          keywords: '__halt_compiler',
+          lexemes: hljs.UNDERSCORE_IDENT_RE
+        }
+      ),
+      {
+        className: 'string',
+        begin: '<<<[\'"]?\\w+[\'"]?$', end: '^\\w+;',
+        contains: [hljs.BACKSLASH_ESCAPE]
+      },
+      {
+        // swallow composed identifiers to avoid parsing them as keywords
+        begin: /(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/
+      },
+      {
+        className: 'function',
+        beginKeywords: 'function', end: /[;{]/, excludeEnd: true,
+        illegal: '\\$|\\[|%',
+        contains: [
+          hljs.UNDERSCORE_TITLE_MODE,
+          {
+            className: 'params',
+            begin: '\\(', end: '\\)',
+            contains: [
+              'self',
+              hljs.C_BLOCK_COMMENT_MODE,
+              STRING,
+              NUMBER
+            ]
+          }
+        ]
+      },
+      {
+        className: 'class',
+        beginKeywords: 'class interface', end: '{', excludeEnd: true,
+        illegal: /[:\(\$"]/,
+        contains: [
+          {beginKeywords: 'extends implements'},
+          hljs.UNDERSCORE_TITLE_MODE
+        ]
+      },
+      {
+        beginKeywords: 'namespace', end: ';',
+        illegal: /[\.']/,
+        contains: [hljs.UNDERSCORE_TITLE_MODE]
+      },
+      {
+        beginKeywords: 'use', end: ';',
+        contains: [hljs.UNDERSCORE_TITLE_MODE]
+      },
+      {
+        begin: '=>' // No markup, just a relevance booster
+      },
+      STRING,
+      NUMBER
+    ]
+  };
+});
+
+  return hljs;
+}));
diff --git a/public/bower_components/jquery-backstretch/jquery.backstretch.js b/public/bower_components/jquery-backstretch/jquery.backstretch.js
new file mode 100644
index 0000000..7ac0875
--- /dev/null
+++ b/public/bower_components/jquery-backstretch/jquery.backstretch.js
@@ -0,0 +1,377 @@
+/*! Backstretch - v2.0.4 - 2013-06-19
+* http://srobbin.com/jquery-plugins/backstretch/
+* Copyright (c) 2013 Scott Robbin; Licensed MIT */
+
+;(function ($, window, undefined) {
+  'use strict';
+
+  /* PLUGIN DEFINITION
+   * ========================= */
+
+  $.fn.backstretch = function (images, options) {
+    // We need at least one image or method name
+    if (images === undefined || images.length === 0) {
+      $.error("No images were supplied for Backstretch");
+    }
+
+    /*
+     * Scroll the page one pixel to get the right window height on iOS
+     * Pretty harmless for everyone else
+    */
+    if ($(window).scrollTop() === 0 ) {
+      window.scrollTo(0, 0);
+    }
+
+    return this.each(function () {
+      var $this = $(this)
+        , obj = $this.data('backstretch');
+
+      // Do we already have an instance attached to this element?
+      if (obj) {
+
+        // Is this a method they're trying to execute?
+        if (typeof images == 'string' && typeof obj[images] == 'function') {
+          // Call the method
+          obj[images](options);
+
+          // No need to do anything further
+          return;
+        }
+
+        // Merge the old options with the new
+        options = $.extend(obj.options, options);
+
+        // Remove the old instance
+        obj.destroy(true);
+      }
+
+      obj = new Backstretch(this, images, options);
+      $this.data('backstretch', obj);
+    });
+  };
+
+  // If no element is supplied, we'll attach to body
+  $.backstretch = function (images, options) {
+    // Return the instance
+    return $('body')
+            .backstretch(images, options)
+            .data('backstretch');
+  };
+
+  // Custom selector
+  $.expr[':'].backstretch = function(elem) {
+    return $(elem).data('backstretch') !== undefined;
+  };
+
+  /* DEFAULTS
+   * ========================= */
+
+  $.fn.backstretch.defaults = {
+      centeredX: true   // Should we center the image on the X axis?
+    , centeredY: true   // Should we center the image on the Y axis?
+    , duration: 5000    // Amount of time in between slides (if slideshow)
+    , fade: 0           // Speed of fade transition between slides
+  };
+
+  /* STYLES
+   * 
+   * Baked-in styles that we'll apply to our elements.
+   * In an effort to keep the plugin simple, these are not exposed as options.
+   * That said, anyone can override these in their own stylesheet.
+   * ========================= */
+  var styles = {
+      wrap: {
+          left: 0
+        , top: 0
+        , overflow: 'hidden'
+        , margin: 0
+        , padding: 0
+        , height: '100%'
+        , width: '100%'
+        , zIndex: -999999
+      }
+    , img: {
+          position: 'absolute'
+        , display: 'none'
+        , margin: 0
+        , padding: 0
+        , border: 'none'
+        , width: 'auto'
+        , height: 'auto'
+        , maxHeight: 'none'
+        , maxWidth: 'none'
+        , zIndex: -999999
+      }
+  };
+
+  /* CLASS DEFINITION
+   * ========================= */
+  var Backstretch = function (container, images, options) {
+    this.options = $.extend({}, $.fn.backstretch.defaults, options || {});
+
+    /* In its simplest form, we allow Backstretch to be called on an image path.
+     * e.g. $.backstretch('/path/to/image.jpg')
+     * So, we need to turn this back into an array.
+     */
+    this.images = $.isArray(images) ? images : [images];
+
+    // Preload images
+    $.each(this.images, function () {
+      $('<img />')[0].src = this;
+    });    
+
+    // Convenience reference to know if the container is body.
+    this.isBody = container === document.body;
+
+    /* We're keeping track of a few different elements
+     *
+     * Container: the element that Backstretch was called on.
+     * Wrap: a DIV that we place the image into, so we can hide the overflow.
+     * Root: Convenience reference to help calculate the correct height.
+     */
+    this.$container = $(container);
+    this.$root = this.isBody ? supportsFixedPosition ? $(window) : $(document) : this.$container;
+
+    // Don't create a new wrap if one already exists (from a previous instance of Backstretch)
+    var $existing = this.$container.children(".backstretch").first();
+    this.$wrap = $existing.length ? $existing : $('<div class="backstretch"></div>').css(styles.wrap).appendTo(this.$container);
+
+    // Non-body elements need some style adjustments
+    if (!this.isBody) {
+      // If the container is statically positioned, we need to make it relative,
+      // and if no zIndex is defined, we should set it to zero.
+      var position = this.$container.css('position')
+        , zIndex = this.$container.css('zIndex');
+
+      this.$container.css({
+          position: position === 'static' ? 'relative' : position
+        , zIndex: zIndex === 'auto' ? 0 : zIndex
+        , background: 'none'
+      });
+      
+      // Needs a higher z-index
+      this.$wrap.css({zIndex: -999998});
+    }
+
+    // Fixed or absolute positioning?
+    this.$wrap.css({
+      position: this.isBody && supportsFixedPosition ? 'fixed' : 'absolute'
+    });
+
+    // Set the first image
+    this.index = 0;
+    this.show(this.index);
+
+    // Listen for resize
+    $(window).on('resize.backstretch', $.proxy(this.resize, this))
+             .on('orientationchange.backstretch', $.proxy(function () {
+                // Need to do this in order to get the right window height
+                if (this.isBody && window.pageYOffset === 0) {
+                  window.scrollTo(0, 1);
+                  this.resize();
+                }
+             }, this));
+  };
+
+  /* PUBLIC METHODS
+   * ========================= */
+  Backstretch.prototype = {
+      resize: function () {
+        try {
+          var bgCSS = {left: 0, top: 0}
+            , rootWidth = this.isBody ? this.$root.width() : this.$root.innerWidth()
+            , bgWidth = rootWidth
+            , rootHeight = this.isBody ? ( window.innerHeight ? window.innerHeight : this.$root.height() ) : this.$root.innerHeight()
+            , bgHeight = bgWidth / this.$img.data('ratio')
+            , bgOffset;
+
+            // Make adjustments based on image ratio
+            if (bgHeight >= rootHeight) {
+                bgOffset = (bgHeight - rootHeight) / 2;
+                if(this.options.centeredY) {
+                  bgCSS.top = '-' + bgOffset + 'px';
+                }
+            } else {
+                bgHeight = rootHeight;
+                bgWidth = bgHeight * this.$img.data('ratio');
+                bgOffset = (bgWidth - rootWidth) / 2;
+                if(this.options.centeredX) {
+                  bgCSS.left = '-' + bgOffset + 'px';
+                }
+            }
+
+            this.$wrap.css({width: rootWidth, height: rootHeight})
+                      .find('img:not(.deleteable)').css({width: bgWidth, height: bgHeight}).css(bgCSS);
+        } catch(err) {
+            // IE7 seems to trigger resize before the image is loaded.
+            // This try/catch block is a hack to let it fail gracefully.
+        }
+
+        return this;
+      }
+
+      // Show the slide at a certain position
+    , show: function (newIndex) {
+
+        // Validate index
+        if (Math.abs(newIndex) > this.images.length - 1) {
+          return;
+        }
+
+        // Vars
+        var self = this
+          , oldImage = self.$wrap.find('img').addClass('deleteable')
+          , evtOptions = { relatedTarget: self.$container[0] };
+
+        // Trigger the "before" event
+        self.$container.trigger($.Event('backstretch.before', evtOptions), [self, newIndex]); 
+
+        // Set the new index
+        this.index = newIndex;
+
+        // Pause the slideshow
+        clearInterval(self.interval);
+
+        // New image
+        self.$img = $('<img />')
+                      .css(styles.img)
+                      .bind('load', function (e) {
+                        var imgWidth = this.width || $(e.target).width()
+                          , imgHeight = this.height || $(e.target).height();
+                        
+                        // Save the ratio
+                        $(this).data('ratio', imgWidth / imgHeight);
+
+                        // Show the image, then delete the old one
+                        // "speed" option has been deprecated, but we want backwards compatibilty
+                        $(this).fadeIn(self.options.speed || self.options.fade, function () {
+                          oldImage.remove();
+
+                          // Resume the slideshow
+                          if (!self.paused) {
+                            self.cycle();
+                          }
+
+                          // Trigger the "after" and "show" events
+                          // "show" is being deprecated
+                          $(['after', 'show']).each(function () {
+                            self.$container.trigger($.Event('backstretch.' + this, evtOptions), [self, newIndex]);
+                          });
+                        });
+
+                        // Resize
+                        self.resize();
+                      })
+                      .appendTo(self.$wrap);
+
+        // Hack for IE img onload event
+        self.$img.attr('src', self.images[newIndex]);
+        return self;
+      }
+
+    , next: function () {
+        // Next slide
+        return this.show(this.index < this.images.length - 1 ? this.index + 1 : 0);
+      }
+
+    , prev: function () {
+        // Previous slide
+        return this.show(this.index === 0 ? this.images.length - 1 : this.index - 1);
+      }
+
+    , pause: function () {
+        // Pause the slideshow
+        this.paused = true;
+        return this;
+      }
+
+    , resume: function () {
+        // Resume the slideshow
+        this.paused = false;
+        this.next();
+        return this;
+      }
+
+    , cycle: function () {
+        // Start/resume the slideshow
+        if(this.images.length > 1) {
+          // Clear the interval, just in case
+          clearInterval(this.interval);
+
+          this.interval = setInterval($.proxy(function () {
+            // Check for paused slideshow
+            if (!this.paused) {
+              this.next();
+            }
+          }, this), this.options.duration);
+        }
+        return this;
+      }
+
+    , destroy: function (preserveBackground) {
+        // Stop the resize events
+        $(window).off('resize.backstretch orientationchange.backstretch');
+
+        // Clear the interval
+        clearInterval(this.interval);
+
+        // Remove Backstretch
+        if(!preserveBackground) {
+          this.$wrap.remove();          
+        }
+        this.$container.removeData('backstretch');
+      }
+  };
+
+  /* SUPPORTS FIXED POSITION?
+   *
+   * Based on code from jQuery Mobile 1.1.0
+   * http://jquerymobile.com/
+   *
+   * In a nutshell, we need to figure out if fixed positioning is supported.
+   * Unfortunately, this is very difficult to do on iOS, and usually involves
+   * injecting content, scrolling the page, etc.. It's ugly.
+   * jQuery Mobile uses this workaround. It's not ideal, but works.
+   *
+   * Modified to detect IE6
+   * ========================= */
+
+  var supportsFixedPosition = (function () {
+    var ua = navigator.userAgent
+      , platform = navigator.platform
+        // Rendering engine is Webkit, and capture major version
+      , wkmatch = ua.match( /AppleWebKit\/([0-9]+)/ )
+      , wkversion = !!wkmatch && wkmatch[ 1 ]
+      , ffmatch = ua.match( /Fennec\/([0-9]+)/ )
+      , ffversion = !!ffmatch && ffmatch[ 1 ]
+      , operammobilematch = ua.match( /Opera Mobi\/([0-9]+)/ )
+      , omversion = !!operammobilematch && operammobilematch[ 1 ]
+      , iematch = ua.match( /MSIE ([0-9]+)/ )
+      , ieversion = !!iematch && iematch[ 1 ];
+
+    return !(
+      // iOS 4.3 and older : Platform is iPhone/Pad/Touch and Webkit version is less than 534 (ios5)
+      ((platform.indexOf( "iPhone" ) > -1 || platform.indexOf( "iPad" ) > -1  || platform.indexOf( "iPod" ) > -1 ) && wkversion && wkversion < 534) ||
+      
+      // Opera Mini
+      (window.operamini && ({}).toString.call( window.operamini ) === "[object OperaMini]") ||
+      (operammobilematch && omversion < 7458) ||
+      
+      //Android lte 2.1: Platform is Android and Webkit version is less than 533 (Android 2.2)
+      (ua.indexOf( "Android" ) > -1 && wkversion && wkversion < 533) ||
+      
+      // Firefox Mobile before 6.0 -
+      (ffversion && ffversion < 6) ||
+      
+      // WebOS less than 3
+      ("palmGetResource" in window && wkversion && wkversion < 534) ||
+      
+      // MeeGo
+      (ua.indexOf( "MeeGo" ) > -1 && ua.indexOf( "NokiaBrowser/8.5.0" ) > -1) ||
+      
+      // IE6
+      (ieversion && ieversion <= 6)
+    );
+  }());
+
+}(jQuery, window));
\ No newline at end of file
diff --git a/public/bower_components/jquery-cookie/jquery.cookie.js b/public/bower_components/jquery-cookie/jquery.cookie.js
new file mode 100644
index 0000000..c7f3a59
--- /dev/null
+++ b/public/bower_components/jquery-cookie/jquery.cookie.js
@@ -0,0 +1,117 @@
+/*!
+ * jQuery Cookie Plugin v1.4.1
+ * https://github.com/carhartl/jquery-cookie
+ *
+ * Copyright 2013 Klaus Hartl
+ * Released under the MIT license
+ */
+(function (factory) {
+	if (typeof define === 'function' && define.amd) {
+		// AMD
+		define(['jquery'], factory);
+	} else if (typeof exports === 'object') {
+		// CommonJS
+		factory(require('jquery'));
+	} else {
+		// Browser globals
+		factory(jQuery);
+	}
+}(function ($) {
+
+	var pluses = /\+/g;
+
+	function encode(s) {
+		return config.raw ? s : encodeURIComponent(s);
+	}
+
+	function decode(s) {
+		return config.raw ? s : decodeURIComponent(s);
+	}
+
+	function stringifyCookieValue(value) {
+		return encode(config.json ? JSON.stringify(value) : String(value));
+	}
+
+	function parseCookieValue(s) {
+		if (s.indexOf('"') === 0) {
+			// This is a quoted cookie as according to RFC2068, unescape...
+			s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
+		}
+
+		try {
+			// Replace server-side written pluses with spaces.
+			// If we can't decode the cookie, ignore it, it's unusable.
+			// If we can't parse the cookie, ignore it, it's unusable.
+			s = decodeURIComponent(s.replace(pluses, ' '));
+			return config.json ? JSON.parse(s) : s;
+		} catch(e) {}
+	}
+
+	function read(s, converter) {
+		var value = config.raw ? s : parseCookieValue(s);
+		return $.isFunction(converter) ? converter(value) : value;
+	}
+
+	var config = $.cookie = function (key, value, options) {
+
+		// Write
+
+		if (value !== undefined && !$.isFunction(value)) {
+			options = $.extend({}, config.defaults, options);
+
+			if (typeof options.expires === 'number') {
+				var days = options.expires, t = options.expires = new Date();
+				t.setTime(+t + days * 864e+5);
+			}
+
+			return (document.cookie = [
+				encode(key), '=', stringifyCookieValue(value),
+				options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
+				options.path    ? '; path=' + options.path : '',
+				options.domain  ? '; domain=' + options.domain : '',
+				options.secure  ? '; secure' : ''
+			].join(''));
+		}
+
+		// Read
+
+		var result = key ? undefined : {};
+
+		// To prevent the for loop in the first place assign an empty array
+		// in case there are no cookies at all. Also prevents odd result when
+		// calling $.cookie().
+		var cookies = document.cookie ? document.cookie.split('; ') : [];
+
+		for (var i = 0, l = cookies.length; i < l; i++) {
+			var parts = cookies[i].split('=');
+			var name = decode(parts.shift());
+			var cookie = parts.join('=');
+
+			if (key && key === name) {
+				// If second argument (value) is a function it's a converter...
+				result = read(cookie, value);
+				break;
+			}
+
+			// Prevent storing a cookie that we couldn't decode.
+			if (!key && (cookie = read(cookie)) !== undefined) {
+				result[name] = cookie;
+			}
+		}
+
+		return result;
+	};
+
+	config.defaults = {};
+
+	$.removeCookie = function (key, options) {
+		if ($.cookie(key) === undefined) {
+			return false;
+		}
+
+		// Must not alter options, thus extending a fresh object...
+		$.cookie(key, '', $.extend({}, options, { expires: -1 }));
+		return !$.cookie(key);
+	};
+
+}));
diff --git a/public/bower_components/jquery-migrate/.bower.json b/public/bower_components/jquery-migrate/.bower.json
new file mode 100644
index 0000000..0ff3c12
--- /dev/null
+++ b/public/bower_components/jquery-migrate/.bower.json
@@ -0,0 +1,14 @@
+{
+  "name": "jquery-migrate",
+  "version": "1.2.1",
+  "homepage": "https://github.com/appleboy/jquery-migrate",
+  "_release": "1.2.1",
+  "_resolution": {
+    "type": "version",
+    "tag": "1.2.1",
+    "commit": "65f37b60ae3d305efbe1e85909e14c60d524d12a"
+  },
+  "_source": "git://github.com/appleboy/jquery-migrate.git",
+  "_target": "~1.2.1",
+  "_originalSource": "jquery-migrate"
+}
\ No newline at end of file
diff --git a/public/bower_components/jquery-migrate/README.md b/public/bower_components/jquery-migrate/README.md
new file mode 100644
index 0000000..d25259d
--- /dev/null
+++ b/public/bower_components/jquery-migrate/README.md
@@ -0,0 +1,12 @@
+jquery-migrate
+===============
+
+shim repo for jQuery Migrate package 
+
+Install via [bower](http://twitter.github.com/bower/):
+
+    $ bower install jquery-migrate
+    
+bower package info:
+
+    $ bower info jquery-migrate
diff --git a/public/bower_components/jquery-migrate/component.json b/public/bower_components/jquery-migrate/component.json
new file mode 100644
index 0000000..11efdc0
--- /dev/null
+++ b/public/bower_components/jquery-migrate/component.json
@@ -0,0 +1,4 @@
+{
+    "name" : "jquery-migrate",
+    "version" : "1.2.1"
+}
diff --git a/public/bower_components/jquery-migrate/jquery-migrate.js b/public/bower_components/jquery-migrate/jquery-migrate.js
new file mode 100644
index 0000000..dbe8cbd
--- /dev/null
+++ b/public/bower_components/jquery-migrate/jquery-migrate.js
@@ -0,0 +1,521 @@
+/*!
+ * jQuery Migrate - v1.2.1 - 2013-05-08
+ * https://github.com/jquery/jquery-migrate
+ * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors; Licensed MIT
+ */
+(function( jQuery, window, undefined ) {
+// See http://bugs.jquery.com/ticket/13335
+// "use strict";
+
+
+var warnedAbout = {};
+
+// List of warnings already given; public read only
+jQuery.migrateWarnings = [];
+
+// Set to true to prevent console output; migrateWarnings still maintained
+// jQuery.migrateMute = false;
+
+// Show a message on the console so devs know we're active
+if ( !jQuery.migrateMute && window.console && window.console.log ) {
+	window.console.log("JQMIGRATE: Logging is active");
+}
+
+// Set to false to disable traces that appear with warnings
+if ( jQuery.migrateTrace === undefined ) {
+	jQuery.migrateTrace = true;
+}
+
+// Forget any warnings we've already given; public
+jQuery.migrateReset = function() {
+	warnedAbout = {};
+	jQuery.migrateWarnings.length = 0;
+};
+
+function migrateWarn( msg) {
+	var console = window.console;
+	if ( !warnedAbout[ msg ] ) {
+		warnedAbout[ msg ] = true;
+		jQuery.migrateWarnings.push( msg );
+		if ( console && console.warn && !jQuery.migrateMute ) {
+			console.warn( "JQMIGRATE: " + msg );
+			if ( jQuery.migrateTrace && console.trace ) {
+				console.trace();
+			}
+		}
+	}
+}
+
+function migrateWarnProp( obj, prop, value, msg ) {
+	if ( Object.defineProperty ) {
+		// On ES5 browsers (non-oldIE), warn if the code tries to get prop;
+		// allow property to be overwritten in case some other plugin wants it
+		try {
+			Object.defineProperty( obj, prop, {
+				configurable: true,
+				enumerable: true,
+				get: function() {
+					migrateWarn( msg );
+					return value;
+				},
+				set: function( newValue ) {
+					migrateWarn( msg );
+					value = newValue;
+				}
+			});
+			return;
+		} catch( err ) {
+			// IE8 is a dope about Object.defineProperty, can't warn there
+		}
+	}
+
+	// Non-ES5 (or broken) browser; just set the property
+	jQuery._definePropertyBroken = true;
+	obj[ prop ] = value;
+}
+
+if ( document.compatMode === "BackCompat" ) {
+	// jQuery has never supported or tested Quirks Mode
+	migrateWarn( "jQuery is not compatible with Quirks Mode" );
+}
+
+
+var attrFn = jQuery( "<input/>", { size: 1 } ).attr("size") && jQuery.attrFn,
+	oldAttr = jQuery.attr,
+	valueAttrGet = jQuery.attrHooks.value && jQuery.attrHooks.value.get ||
+		function() { return null; },
+	valueAttrSet = jQuery.attrHooks.value && jQuery.attrHooks.value.set ||
+		function() { return undefined; },
+	rnoType = /^(?:input|button)$/i,
+	rnoAttrNodeType = /^[238]$/,
+	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
+	ruseDefault = /^(?:checked|selected)$/i;
+
+// jQuery.attrFn
+migrateWarnProp( jQuery, "attrFn", attrFn || {}, "jQuery.attrFn is deprecated" );
+
+jQuery.attr = function( elem, name, value, pass ) {
+	var lowerName = name.toLowerCase(),
+		nType = elem && elem.nodeType;
+
+	if ( pass ) {
+		// Since pass is used internally, we only warn for new jQuery
+		// versions where there isn't a pass arg in the formal params
+		if ( oldAttr.length < 4 ) {
+			migrateWarn("jQuery.fn.attr( props, pass ) is deprecated");
+		}
+		if ( elem && !rnoAttrNodeType.test( nType ) &&
+			(attrFn ? name in attrFn : jQuery.isFunction(jQuery.fn[name])) ) {
+			return jQuery( elem )[ name ]( value );
+		}
+	}
+
+	// Warn if user tries to set `type`, since it breaks on IE 6/7/8; by checking
+	// for disconnected elements we don't warn on $( "<button>", { type: "button" } ).
+	if ( name === "type" && value !== undefined && rnoType.test( elem.nodeName ) && elem.parentNode ) {
+		migrateWarn("Can't change the 'type' of an input or button in IE 6/7/8");
+	}
+
+	// Restore boolHook for boolean property/attribute synchronization
+	if ( !jQuery.attrHooks[ lowerName ] && rboolean.test( lowerName ) ) {
+		jQuery.attrHooks[ lowerName ] = {
+			get: function( elem, name ) {
+				// Align boolean attributes with corresponding properties
+				// Fall back to attribute presence where some booleans are not supported
+				var attrNode,
+					property = jQuery.prop( elem, name );
+				return property === true || typeof property !== "boolean" &&
+					( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
+
+					name.toLowerCase() :
+					undefined;
+			},
+			set: function( elem, value, name ) {
+				var propName;
+				if ( value === false ) {
+					// Remove boolean attributes when set to false
+					jQuery.removeAttr( elem, name );
+				} else {
+					// value is true since we know at this point it's type boolean and not false
+					// Set boolean attributes to the same name and set the DOM property
+					propName = jQuery.propFix[ name ] || name;
+					if ( propName in elem ) {
+						// Only set the IDL specifically if it already exists on the element
+						elem[ propName ] = true;
+					}
+
+					elem.setAttribute( name, name.toLowerCase() );
+				}
+				return name;
+			}
+		};
+
+		// Warn only for attributes that can remain distinct from their properties post-1.9
+		if ( ruseDefault.test( lowerName ) ) {
+			migrateWarn( "jQuery.fn.attr('" + lowerName + "') may use property instead of attribute" );
+		}
+	}
+
+	return oldAttr.call( jQuery, elem, name, value );
+};
+
+// attrHooks: value
+jQuery.attrHooks.value = {
+	get: function( elem, name ) {
+		var nodeName = ( elem.nodeName || "" ).toLowerCase();
+		if ( nodeName === "button" ) {
+			return valueAttrGet.apply( this, arguments );
+		}
+		if ( nodeName !== "input" && nodeName !== "option" ) {
+			migrateWarn("jQuery.fn.attr('value') no longer gets properties");
+		}
+		return name in elem ?
+			elem.value :
+			null;
+	},
+	set: function( elem, value ) {
+		var nodeName = ( elem.nodeName || "" ).toLowerCase();
+		if ( nodeName === "button" ) {
+			return valueAttrSet.apply( this, arguments );
+		}
+		if ( nodeName !== "input" && nodeName !== "option" ) {
+			migrateWarn("jQuery.fn.attr('value', val) no longer sets properties");
+		}
+		// Does not return so that setAttribute is also used
+		elem.value = value;
+	}
+};
+
+
+var matched, browser,
+	oldInit = jQuery.fn.init,
+	oldParseJSON = jQuery.parseJSON,
+	// Note: XSS check is done below after string is trimmed
+	rquickExpr = /^([^<]*)(<[\w\W]+>)([^>]*)$/;
+
+// $(html) "looks like html" rule change
+jQuery.fn.init = function( selector, context, rootjQuery ) {
+	var match;
+
+	if ( selector && typeof selector === "string" && !jQuery.isPlainObject( context ) &&
+			(match = rquickExpr.exec( jQuery.trim( selector ) )) && match[ 0 ] ) {
+		// This is an HTML string according to the "old" rules; is it still?
+		if ( selector.charAt( 0 ) !== "<" ) {
+			migrateWarn("$(html) HTML strings must start with '<' character");
+		}
+		if ( match[ 3 ] ) {
+			migrateWarn("$(html) HTML text after last tag is ignored");
+		}
+		// Consistently reject any HTML-like string starting with a hash (#9521)
+		// Note that this may break jQuery 1.6.x code that otherwise would work.
+		if ( match[ 0 ].charAt( 0 ) === "#" ) {
+			migrateWarn("HTML string cannot start with a '#' character");
+			jQuery.error("JQMIGRATE: Invalid selector string (XSS)");
+		}
+		// Now process using loose rules; let pre-1.8 play too
+		if ( context && context.context ) {
+			// jQuery object as context; parseHTML expects a DOM object
+			context = context.context;
+		}
+		if ( jQuery.parseHTML ) {
+			return oldInit.call( this, jQuery.parseHTML( match[ 2 ], context, true ),
+					context, rootjQuery );
+		}
+	}
+	return oldInit.apply( this, arguments );
+};
+jQuery.fn.init.prototype = jQuery.fn;
+
+// Let $.parseJSON(falsy_value) return null
+jQuery.parseJSON = function( json ) {
+	if ( !json && json !== null ) {
+		migrateWarn("jQuery.parseJSON requires a valid JSON string");
+		return null;
+	}
+	return oldParseJSON.apply( this, arguments );
+};
+
+jQuery.uaMatch = function( ua ) {
+	ua = ua.toLowerCase();
+
+	var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
+		/(webkit)[ \/]([\w.]+)/.exec( ua ) ||
+		/(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
+		/(msie) ([\w.]+)/.exec( ua ) ||
+		ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
+		[];
+
+	return {
+		browser: match[ 1 ] || "",
+		version: match[ 2 ] || "0"
+	};
+};
+
+// Don't clobber any existing jQuery.browser in case it's different
+if ( !jQuery.browser ) {
+	matched = jQuery.uaMatch( navigator.userAgent );
+	browser = {};
+
+	if ( matched.browser ) {
+		browser[ matched.browser ] = true;
+		browser.version = matched.version;
+	}
+
+	// Chrome is Webkit, but Webkit is also Safari.
+	if ( browser.chrome ) {
+		browser.webkit = true;
+	} else if ( browser.webkit ) {
+		browser.safari = true;
+	}
+
+	jQuery.browser = browser;
+}
+
+// Warn if the code tries to get jQuery.browser
+migrateWarnProp( jQuery, "browser", jQuery.browser, "jQuery.browser is deprecated" );
+
+jQuery.sub = function() {
+	function jQuerySub( selector, context ) {
+		return new jQuerySub.fn.init( selector, context );
+	}
+	jQuery.extend( true, jQuerySub, this );
+	jQuerySub.superclass = this;
+	jQuerySub.fn = jQuerySub.prototype = this();
+	jQuerySub.fn.constructor = jQuerySub;
+	jQuerySub.sub = this.sub;
+	jQuerySub.fn.init = function init( selector, context ) {
+		if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
+			context = jQuerySub( context );
+		}
+
+		return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
+	};
+	jQuerySub.fn.init.prototype = jQuerySub.fn;
+	var rootjQuerySub = jQuerySub(document);
+	migrateWarn( "jQuery.sub() is deprecated" );
+	return jQuerySub;
+};
+
+
+// Ensure that $.ajax gets the new parseJSON defined in core.js
+jQuery.ajaxSetup({
+	converters: {
+		"text json": jQuery.parseJSON
+	}
+});
+
+
+var oldFnData = jQuery.fn.data;
+
+jQuery.fn.data = function( name ) {
+	var ret, evt,
+		elem = this[0];
+
+	// Handles 1.7 which has this behavior and 1.8 which doesn't
+	if ( elem && name === "events" && arguments.length === 1 ) {
+		ret = jQuery.data( elem, name );
+		evt = jQuery._data( elem, name );
+		if ( ( ret === undefined || ret === evt ) && evt !== undefined ) {
+			migrateWarn("Use of jQuery.fn.data('events') is deprecated");
+			return evt;
+		}
+	}
+	return oldFnData.apply( this, arguments );
+};
+
+
+var rscriptType = /\/(java|ecma)script/i,
+	oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack;
+
+jQuery.fn.andSelf = function() {
+	migrateWarn("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()");
+	return oldSelf.apply( this, arguments );
+};
+
+// Since jQuery.clean is used internally on older versions, we only shim if it's missing
+if ( !jQuery.clean ) {
+	jQuery.clean = function( elems, context, fragment, scripts ) {
+		// Set context per 1.8 logic
+		context = context || document;
+		context = !context.nodeType && context[0] || context;
+		context = context.ownerDocument || context;
+
+		migrateWarn("jQuery.clean() is deprecated");
+
+		var i, elem, handleScript, jsTags,
+			ret = [];
+
+		jQuery.merge( ret, jQuery.buildFragment( elems, context ).childNodes );
+
+		// Complex logic lifted directly from jQuery 1.8
+		if ( fragment ) {
+			// Special handling of each script element
+			handleScript = function( elem ) {
+				// Check if we consider it executable
+				if ( !elem.type || rscriptType.test( elem.type ) ) {
+					// Detach the script and store it in the scripts array (if provided) or the fragment
+					// Return truthy to indicate that it has been handled
+					return scripts ?
+						scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :
+						fragment.appendChild( elem );
+				}
+			};
+
+			for ( i = 0; (elem = ret[i]) != null; i++ ) {
+				// Check if we're done after handling an executable script
+				if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) {
+					// Append to fragment and handle embedded scripts
+					fragment.appendChild( elem );
+					if ( typeof elem.getElementsByTagName !== "undefined" ) {
+						// handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration
+						jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript );
+
+						// Splice the scripts into ret after their former ancestor and advance our index beyond them
+						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
+						i += jsTags.length;
+					}
+				}
+			}
+		}
+
+		return ret;
+	};
+}
+
+var eventAdd = jQuery.event.add,
+	eventRemove = jQuery.event.remove,
+	eventTrigger = jQuery.event.trigger,
+	oldToggle = jQuery.fn.toggle,
+	oldLive = jQuery.fn.live,
+	oldDie = jQuery.fn.die,
+	ajaxEvents = "ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",
+	rajaxEvent = new RegExp( "\\b(?:" + ajaxEvents + ")\\b" ),
+	rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
+	hoverHack = function( events ) {
+		if ( typeof( events ) !== "string" || jQuery.event.special.hover ) {
+			return events;
+		}
+		if ( rhoverHack.test( events ) ) {
+			migrateWarn("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'");
+		}
+		return events && events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
+	};
+
+// Event props removed in 1.9, put them back if needed; no practical way to warn them
+if ( jQuery.event.props && jQuery.event.props[ 0 ] !== "attrChange" ) {
+	jQuery.event.props.unshift( "attrChange", "attrName", "relatedNode", "srcElement" );
+}
+
+// Undocumented jQuery.event.handle was "deprecated" in jQuery 1.7
+if ( jQuery.event.dispatch ) {
+	migrateWarnProp( jQuery.event, "handle", jQuery.event.dispatch, "jQuery.event.handle is undocumented and deprecated" );
+}
+
+// Support for 'hover' pseudo-event and ajax event warnings
+jQuery.event.add = function( elem, types, handler, data, selector ){
+	if ( elem !== document && rajaxEvent.test( types ) ) {
+		migrateWarn( "AJAX events should be attached to document: " + types );
+	}
+	eventAdd.call( this, elem, hoverHack( types || "" ), handler, data, selector );
+};
+jQuery.event.remove = function( elem, types, handler, selector, mappedTypes ){
+	eventRemove.call( this, elem, hoverHack( types ) || "", handler, selector, mappedTypes );
+};
+
+jQuery.fn.error = function() {
+	var args = Array.prototype.slice.call( arguments, 0);
+	migrateWarn("jQuery.fn.error() is deprecated");
+	args.splice( 0, 0, "error" );
+	if ( arguments.length ) {
+		return this.bind.apply( this, args );
+	}
+	// error event should not bubble to window, although it does pre-1.7
+	this.triggerHandler.apply( this, args );
+	return this;
+};
+
+jQuery.fn.toggle = function( fn, fn2 ) {
+
+	// Don't mess with animation or css toggles
+	if ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) {
+		return oldToggle.apply( this, arguments );
+	}
+	migrateWarn("jQuery.fn.toggle(handler, handler...) is deprecated");
+
+	// Save reference to arguments for access in closure
+	var args = arguments,
+		guid = fn.guid || jQuery.guid++,
+		i = 0,
+		toggler = function( event ) {
+			// Figure out which function to execute
+			var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+			jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+			// Make sure that clicks stop
+			event.preventDefault();
+
+			// and execute the function
+			return args[ lastToggle ].apply( this, arguments ) || false;
+		};
+
+	// link all the functions, so any of them can unbind this click handler
+	toggler.guid = guid;
+	while ( i < args.length ) {
+		args[ i++ ].guid = guid;
+	}
+
+	return this.click( toggler );
+};
+
+jQuery.fn.live = function( types, data, fn ) {
+	migrateWarn("jQuery.fn.live() is deprecated");
+	if ( oldLive ) {
+		return oldLive.apply( this, arguments );
+	}
+	jQuery( this.context ).on( types, this.selector, data, fn );
+	return this;
+};
+
+jQuery.fn.die = function( types, fn ) {
+	migrateWarn("jQuery.fn.die() is deprecated");
+	if ( oldDie ) {
+		return oldDie.apply( this, arguments );
+	}
+	jQuery( this.context ).off( types, this.selector || "**", fn );
+	return this;
+};
+
+// Turn global events into document-triggered events
+jQuery.event.trigger = function( event, data, elem, onlyHandlers  ){
+	if ( !elem && !rajaxEvent.test( event ) ) {
+		migrateWarn( "Global events are undocumented and deprecated" );
+	}
+	return eventTrigger.call( this,  event, data, elem || document, onlyHandlers  );
+};
+jQuery.each( ajaxEvents.split("|"),
+	function( _, name ) {
+		jQuery.event.special[ name ] = {
+			setup: function() {
+				var elem = this;
+
+				// The document needs no shimming; must be !== for oldIE
+				if ( elem !== document ) {
+					jQuery.event.add( document, name + "." + jQuery.guid, function() {
+						jQuery.event.trigger( name, null, elem, true );
+					});
+					jQuery._data( this, name, jQuery.guid++ );
+				}
+				return false;
+			},
+			teardown: function() {
+				if ( this !== document ) {
+					jQuery.event.remove( document, name + "." + jQuery._data( this, name ) );
+				}
+				return false;
+			}
+		};
+	}
+);
+
+
+})( jQuery, window );
diff --git a/public/bower_components/jquery-migrate/jquery-migrate.min.js b/public/bower_components/jquery-migrate/jquery-migrate.min.js
new file mode 100644
index 0000000..8b7ec47
--- /dev/null
+++ b/public/bower_components/jquery-migrate/jquery-migrate.min.js
@@ -0,0 +1,2 @@
+/*! jQuery Migrate v1.2.1 | (c) 2005, 2013 jQuery Foundation, Inc. and other contributors | jquery.org/license */
+jQuery.migrateMute===void 0&&(jQuery.migrateMute=!0),function(e,t,n){function r(n){var r=t.console;i[n]||(i[n]=!0,e.migrateWarnings.push(n),r&&r.warn&&!e.migrateMute&&(r.warn("JQMIGRATE: "+n),e.migrateTrace&&r.trace&&r.trace()))}function a(t,a,i,o){if(Object.defineProperty)try{return Object.defineProperty(t,a,{configurable:!0,enumerable:!0,get:function(){return r(o),i},set:function(e){r(o),i=e}}),n}catch(s){}e._definePropertyBroken=!0,t[a]=i}var i={};e.migrateWarnings=[],!e.migrateMute&&t.console&&t.console.log&&t.console.log("JQMIGRATE: Logging is active"),e.migrateTrace===n&&(e.migrateTrace=!0),e.migrateReset=function(){i={},e.migrateWarnings.length=0},"BackCompat"===document.compatMode&&r("jQuery is not compatible with Quirks Mode");var o=e("<input/>",{size:1}).attr("size")&&e.attrFn,s=e.attr,u=e.attrHooks.value&&e.attrHooks.value.get||function(){return null},c=e.attrHooks.value&&e.attrHooks.value.set||function(){return n},l=/^(?:input|button)$/i,d=/^[238]$/,p=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,f=/^(?:checked|selected)$/i;a(e,"attrFn",o||{},"jQuery.attrFn is deprecated"),e.attr=function(t,a,i,u){var c=a.toLowerCase(),g=t&&t.nodeType;return u&&(4>s.length&&r("jQuery.fn.attr( props, pass ) is deprecated"),t&&!d.test(g)&&(o?a in o:e.isFunction(e.fn[a])))?e(t)[a](i):("type"===a&&i!==n&&l.test(t.nodeName)&&t.parentNode&&r("Can't change the 'type' of an input or button in IE 6/7/8"),!e.attrHooks[c]&&p.test(c)&&(e.attrHooks[c]={get:function(t,r){var a,i=e.prop(t,r);return i===!0||"boolean"!=typeof i&&(a=t.getAttributeNode(r))&&a.nodeValue!==!1?r.toLowerCase():n},set:function(t,n,r){var a;return n===!1?e.removeAttr(t,r):(a=e.propFix[r]||r,a in t&&(t[a]=!0),t.setAttribute(r,r.toLowerCase())),r}},f.test(c)&&r("jQuery.fn.attr('"+c+"') may use property instead of attribute")),s.call(e,t,a,i))},e.attrHooks.value={get:function(e,t){var n=(e.nodeName||"").toLowerCase();return"button"===n?u.apply(this,arguments):("input"!==n&&"option"!==n&&r("jQuery.fn.attr('value') no longer gets properties"),t in e?e.value:null)},set:function(e,t){var a=(e.nodeName||"").toLowerCase();return"button"===a?c.apply(this,arguments):("input"!==a&&"option"!==a&&r("jQuery.fn.attr('value', val) no longer sets properties"),e.value=t,n)}};var g,h,v=e.fn.init,m=e.parseJSON,y=/^([^<]*)(<[\w\W]+>)([^>]*)$/;e.fn.init=function(t,n,a){var i;return t&&"string"==typeof t&&!e.isPlainObject(n)&&(i=y.exec(e.trim(t)))&&i[0]&&("<"!==t.charAt(0)&&r("$(html) HTML strings must start with '<' character"),i[3]&&r("$(html) HTML text after last tag is ignored"),"#"===i[0].charAt(0)&&(r("HTML string cannot start with a '#' character"),e.error("JQMIGRATE: Invalid selector string (XSS)")),n&&n.context&&(n=n.context),e.parseHTML)?v.call(this,e.parseHTML(i[2],n,!0),n,a):v.apply(this,arguments)},e.fn.init.prototype=e.fn,e.parseJSON=function(e){return e||null===e?m.apply(this,arguments):(r("jQuery.parseJSON requires a valid JSON string"),null)},e.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||0>e.indexOf("compatible")&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e.browser||(g=e.uaMatch(navigator.userAgent),h={},g.browser&&(h[g.browser]=!0,h.version=g.version),h.chrome?h.webkit=!0:h.webkit&&(h.safari=!0),e.browser=h),a(e,"browser",e.browser,"jQuery.browser is deprecated"),e.sub=function(){function t(e,n){return new t.fn.init(e,n)}e.extend(!0,t,this),t.superclass=this,t.fn=t.prototype=this(),t.fn.constructor=t,t.sub=this.sub,t.fn.init=function(r,a){return a&&a instanceof e&&!(a instanceof t)&&(a=t(a)),e.fn.init.call(this,r,a,n)},t.fn.init.prototype=t.fn;var n=t(document);return r("jQuery.sub() is deprecated"),t},e.ajaxSetup({converters:{"text json":e.parseJSON}});var b=e.fn.data;e.fn.data=function(t){var a,i,o=this[0];return!o||"events"!==t||1!==arguments.length||(a=e.data(o,t),i=e._data(o,t),a!==n&&a!==i||i===n)?b.apply(this,arguments):(r("Use of jQuery.fn.data('events') is deprecated"),i)};var j=/\/(java|ecma)script/i,w=e.fn.andSelf||e.fn.addBack;e.fn.andSelf=function(){return r("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"),w.apply(this,arguments)},e.clean||(e.clean=function(t,a,i,o){a=a||document,a=!a.nodeType&&a[0]||a,a=a.ownerDocument||a,r("jQuery.clean() is deprecated");var s,u,c,l,d=[];if(e.merge(d,e.buildFragment(t,a).childNodes),i)for(c=function(e){return!e.type||j.test(e.type)?o?o.push(e.parentNode?e.parentNode.removeChild(e):e):i.appendChild(e):n},s=0;null!=(u=d[s]);s++)e.nodeName(u,"script")&&c(u)||(i.appendChild(u),u.getElementsByTagName!==n&&(l=e.grep(e.merge([],u.getElementsByTagName("script")),c),d.splice.apply(d,[s+1,0].concat(l)),s+=l.length));return d});var Q=e.event.add,x=e.event.remove,k=e.event.trigger,N=e.fn.toggle,T=e.fn.live,M=e.fn.die,S="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",C=RegExp("\\b(?:"+S+")\\b"),H=/(?:^|\s)hover(\.\S+|)\b/,A=function(t){return"string"!=typeof t||e.event.special.hover?t:(H.test(t)&&r("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),t&&t.replace(H,"mouseenter$1 mouseleave$1"))};e.event.props&&"attrChange"!==e.event.props[0]&&e.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),e.event.dispatch&&a(e.event,"handle",e.event.dispatch,"jQuery.event.handle is undocumented and deprecated"),e.event.add=function(e,t,n,a,i){e!==document&&C.test(t)&&r("AJAX events should be attached to document: "+t),Q.call(this,e,A(t||""),n,a,i)},e.event.remove=function(e,t,n,r,a){x.call(this,e,A(t)||"",n,r,a)},e.fn.error=function(){var e=Array.prototype.slice.call(arguments,0);return r("jQuery.fn.error() is deprecated"),e.splice(0,0,"error"),arguments.length?this.bind.apply(this,e):(this.triggerHandler.apply(this,e),this)},e.fn.toggle=function(t,n){if(!e.isFunction(t)||!e.isFunction(n))return N.apply(this,arguments);r("jQuery.fn.toggle(handler, handler...) is deprecated");var a=arguments,i=t.guid||e.guid++,o=0,s=function(n){var r=(e._data(this,"lastToggle"+t.guid)||0)%o;return e._data(this,"lastToggle"+t.guid,r+1),n.preventDefault(),a[r].apply(this,arguments)||!1};for(s.guid=i;a.length>o;)a[o++].guid=i;return this.click(s)},e.fn.live=function(t,n,a){return r("jQuery.fn.live() is deprecated"),T?T.apply(this,arguments):(e(this.context).on(t,this.selector,n,a),this)},e.fn.die=function(t,n){return r("jQuery.fn.die() is deprecated"),M?M.apply(this,arguments):(e(this.context).off(t,this.selector||"**",n),this)},e.event.trigger=function(e,t,n,a){return n||C.test(e)||r("Global events are undocumented and deprecated"),k.call(this,e,t,n||document,a)},e.each(S.split("|"),function(t,n){e.event.special[n]={setup:function(){var t=this;return t!==document&&(e.event.add(document,n+"."+e.guid,function(){e.event.trigger(n,null,t,!0)}),e._data(this,n,e.guid++)),!1},teardown:function(){return this!==document&&e.event.remove(document,n+"."+e._data(this,n)),!1}}})}(jQuery,window);
\ No newline at end of file
diff --git a/public/bower_components/jquery-mousewheel/jquery.mousewheel.js b/public/bower_components/jquery-mousewheel/jquery.mousewheel.js
new file mode 100644
index 0000000..3eadb7e
--- /dev/null
+++ b/public/bower_components/jquery-mousewheel/jquery.mousewheel.js
@@ -0,0 +1,221 @@
+/*!
+ * jQuery Mousewheel 3.1.13
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ */
+
+(function (factory) {
+    if ( typeof define === 'function' && define.amd ) {
+        // AMD. Register as an anonymous module.
+        define(['jquery'], factory);
+    } else if (typeof exports === 'object') {
+        // Node/CommonJS style for Browserify
+        module.exports = factory;
+    } else {
+        // Browser globals
+        factory(jQuery);
+    }
+}(function ($) {
+
+    var toFix  = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],
+        toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?
+                    ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],
+        slice  = Array.prototype.slice,
+        nullLowestDeltaTimeout, lowestDelta;
+
+    if ( $.event.fixHooks ) {
+        for ( var i = toFix.length; i; ) {
+            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;
+        }
+    }
+
+    var special = $.event.special.mousewheel = {
+        version: '3.1.12',
+
+        setup: function() {
+            if ( this.addEventListener ) {
+                for ( var i = toBind.length; i; ) {
+                    this.addEventListener( toBind[--i], handler, false );
+                }
+            } else {
+                this.onmousewheel = handler;
+            }
+            // Store the line height and page height for this particular element
+            $.data(this, 'mousewheel-line-height', special.getLineHeight(this));
+            $.data(this, 'mousewheel-page-height', special.getPageHeight(this));
+        },
+
+        teardown: function() {
+            if ( this.removeEventListener ) {
+                for ( var i = toBind.length; i; ) {
+                    this.removeEventListener( toBind[--i], handler, false );
+                }
+            } else {
+                this.onmousewheel = null;
+            }
+            // Clean up the data we added to the element
+            $.removeData(this, 'mousewheel-line-height');
+            $.removeData(this, 'mousewheel-page-height');
+        },
+
+        getLineHeight: function(elem) {
+            var $elem = $(elem),
+                $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();
+            if (!$parent.length) {
+                $parent = $('body');
+            }
+            return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;
+        },
+
+        getPageHeight: function(elem) {
+            return $(elem).height();
+        },
+
+        settings: {
+            adjustOldDeltas: true, // see shouldAdjustOldDeltas() below
+            normalizeOffset: true  // calls getBoundingClientRect for each event
+        }
+    };
+
+    $.fn.extend({
+        mousewheel: function(fn) {
+            return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');
+        },
+
+        unmousewheel: function(fn) {
+            return this.unbind('mousewheel', fn);
+        }
+    });
+
+
+    function handler(event) {
+        var orgEvent   = event || window.event,
+            args       = slice.call(arguments, 1),
+            delta      = 0,
+            deltaX     = 0,
+            deltaY     = 0,
+            absDelta   = 0,
+            offsetX    = 0,
+            offsetY    = 0;
+        event = $.event.fix(orgEvent);
+        event.type = 'mousewheel';
+
+        // Old school scrollwheel delta
+        if ( 'detail'      in orgEvent ) { deltaY = orgEvent.detail * -1;      }
+        if ( 'wheelDelta'  in orgEvent ) { deltaY = orgEvent.wheelDelta;       }
+        if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY;      }
+        if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }
+
+        // Firefox < 17 horizontal scrolling related to DOMMouseScroll event
+        if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
+            deltaX = deltaY * -1;
+            deltaY = 0;
+        }
+
+        // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy
+        delta = deltaY === 0 ? deltaX : deltaY;
+
+        // New school wheel delta (wheel event)
+        if ( 'deltaY' in orgEvent ) {
+            deltaY = orgEvent.deltaY * -1;
+            delta  = deltaY;
+        }
+        if ( 'deltaX' in orgEvent ) {
+            deltaX = orgEvent.deltaX;
+            if ( deltaY === 0 ) { delta  = deltaX * -1; }
+        }
+
+        // No change actually happened, no reason to go any further
+        if ( deltaY === 0 && deltaX === 0 ) { return; }
+
+        // Need to convert lines and pages to pixels if we aren't already in pixels
+        // There are three delta modes:
+        //   * deltaMode 0 is by pixels, nothing to do
+        //   * deltaMode 1 is by lines
+        //   * deltaMode 2 is by pages
+        if ( orgEvent.deltaMode === 1 ) {
+            var lineHeight = $.data(this, 'mousewheel-line-height');
+            delta  *= lineHeight;
+            deltaY *= lineHeight;
+            deltaX *= lineHeight;
+        } else if ( orgEvent.deltaMode === 2 ) {
+            var pageHeight = $.data(this, 'mousewheel-page-height');
+            delta  *= pageHeight;
+            deltaY *= pageHeight;
+            deltaX *= pageHeight;
+        }
+
+        // Store lowest absolute delta to normalize the delta values
+        absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );
+
+        if ( !lowestDelta || absDelta < lowestDelta ) {
+            lowestDelta = absDelta;
+
+            // Adjust older deltas if necessary
+            if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
+                lowestDelta /= 40;
+            }
+        }
+
+        // Adjust older deltas if necessary
+        if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {
+            // Divide all the things by 40!
+            delta  /= 40;
+            deltaX /= 40;
+            deltaY /= 40;
+        }
+
+        // Get a whole, normalized value for the deltas
+        delta  = Math[ delta  >= 1 ? 'floor' : 'ceil' ](delta  / lowestDelta);
+        deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);
+        deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);
+
+        // Normalise offsetX and offsetY properties
+        if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {
+            var boundingRect = this.getBoundingClientRect();
+            offsetX = event.clientX - boundingRect.left;
+            offsetY = event.clientY - boundingRect.top;
+        }
+
+        // Add information to the event object
+        event.deltaX = deltaX;
+        event.deltaY = deltaY;
+        event.deltaFactor = lowestDelta;
+        event.offsetX = offsetX;
+        event.offsetY = offsetY;
+        // Go ahead and set deltaMode to 0 since we converted to pixels
+        // Although this is a little odd since we overwrite the deltaX/Y
+        // properties with normalized deltas.
+        event.deltaMode = 0;
+
+        // Add event and delta to the front of the arguments
+        args.unshift(event, delta, deltaX, deltaY);
+
+        // Clearout lowestDelta after sometime to better
+        // handle multiple device types that give different
+        // a different lowestDelta
+        // Ex: trackpad = 3 and mouse wheel = 120
+        if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }
+        nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);
+
+        return ($.event.dispatch || $.event.handle).apply(this, args);
+    }
+
+    function nullLowestDelta() {
+        lowestDelta = null;
+    }
+
+    function shouldAdjustOldDeltas(orgEvent, absDelta) {
+        // If this is an older event and the delta is divisable by 120,
+        // then we are assuming that the browser is treating this as an
+        // older mouse wheel event and that we should divide the deltas
+        // by 40 to try and get a more usable deltaFactor.
+        // Side note, this actually impacts the reported scroll distance
+        // in older browsers and can cause scrolling to be slower than native.
+        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.
+        return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;
+    }
+
+}));
diff --git a/public/bower_components/jquery-slimscroll/.bower.json b/public/bower_components/jquery-slimscroll/.bower.json
new file mode 100644
index 0000000..bfa2003
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/.bower.json
@@ -0,0 +1,14 @@
+{
+  "name": "jquery-slimscroll",
+  "homepage": "https://github.com/rochal/jQuery-slimScroll",
+  "version": "1.3.7",
+  "_release": "1.3.7",
+  "_resolution": {
+    "type": "version",
+    "tag": "v1.3.7",
+    "commit": "00d27e3541d9cb4ada6f41b06cd67bef62d9d2b3"
+  },
+  "_source": "git://github.com/rochal/jQuery-slimScroll.git",
+  "_target": "~1.3.3",
+  "_originalSource": "jquery-slimscroll"
+}
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/README.md b/public/bower_components/jquery-slimscroll/README.md
new file mode 100644
index 0000000..bc90347
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/README.md
@@ -0,0 +1,8 @@
+# What is slimScroll?
+
+slimScroll is a small jQuery plugin that transforms any div into a scrollable area with a nice scrollbar - similar to the one Facebook and Google started using in their products recently. slimScroll doesn't occupy any visual space as it only appears on a user initiated mouse-over. User can drag the scrollbar or use mouse-wheel to change the scroll value.
+
+Demo and deocumentation available here: [jQuery slimScroll docs](http://rocha.la/jQuery-slimScroll)
+
+Copyright (c) 2011 Piotr Rochala (http://rocha.la)
+Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/examples/allow-page-scroll.html b/public/bower_components/jquery-slimscroll/examples/allow-page-scroll.html
new file mode 100644
index 0000000..b594de3
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/allow-page-scroll.html
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>jquery.slimscroll - allow page scroll</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+<link href="libs/prettify/prettify.css" type="text/css" rel="stylesheet" />
+<script type="text/javascript" src="libs/prettify/prettify.js"></script>
+<script type="text/javascript" src="../jquery.slimscroll.js"></script>
+<link href="style.css" type="text/css" rel="stylesheet" />
+</head>
+<body>
+<a id="git-fork" href="https://github.com/rochal/jQuery-slimScroll"><img src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub"></a>
+<div class="examples">
+  <div id="testDiv">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+  $('#testDiv').slimScroll();
+</pre>
+
+  <div id="testDiv2">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p><span class="helloDiv" style="background:green;font-weigh:bold;">Hello!</span>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+  $('#testDiv2').slimScroll({
+      allowPageScroll: true
+  });
+</pre>
+
+<div style="height:500px;">...adding height...</div>
+</div>
+
+<script type="text/javascript">
+    $(function(){
+
+      $('#testDiv').slimScroll();
+
+      $('#testDiv2').slimScroll({
+          allowPageScroll: true
+      });
+
+    });
+</script>
+
+
+<script type="text/javascript">
+
+  //enable syntax highlighter
+  prettyPrint();
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-3112455-22']);
+  _gaq.push(['_setDomainName', 'none']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/examples/chaining.html b/public/bower_components/jquery-slimscroll/examples/chaining.html
new file mode 100644
index 0000000..fead426
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/chaining.html
@@ -0,0 +1,80 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>jquery.slimscroll - chaining</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+<link href="libs/prettify/prettify.css" type="text/css" rel="stylesheet" />
+<script type="text/javascript" src="libs/prettify/prettify.js"></script>
+<script type="text/javascript" src="../jquery.slimscroll.js"></script>
+<link href="style.css" type="text/css" rel="stylesheet" />
+</head>
+<body>
+<a id="git-fork" href="https://github.com/rochal/jQuery-slimScroll"><img src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub"></a>
+<div class="examples">
+  <div id="testDiv">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+$('#testDiv').slimscroll({
+  height: '250px'
+}).parent().css({
+  background: '#237FAD',
+  border: '2px dashed #184055'
+});
+</pre>
+
+
+</div>
+
+<script type="text/javascript">
+    $(function(){
+      $('#testDiv').slimscroll({
+        height: '250px'
+      }).parent().css({
+        background: '#237FAD',
+        border: '2px dashed #184055'
+      });
+
+      $('#testDiv2').slimScroll({
+          height: '100px',
+          width: '300px'
+      });
+
+    });
+</script>
+
+
+<script type="text/javascript">
+
+  //enable syntax highlighter
+  prettyPrint();
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-3112455-22']);
+  _gaq.push(['_setDomainName', 'none']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/examples/disable-fade-out.html b/public/bower_components/jquery-slimscroll/examples/disable-fade-out.html
new file mode 100644
index 0000000..7c8e6fa
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/disable-fade-out.html
@@ -0,0 +1,94 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>jquery.slimscroll - disable fade out</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+
+<link href="libs/prettify/prettify.css" type="text/css" rel="stylesheet" />
+<script type="text/javascript" src="libs/prettify/prettify.js"></script>
+<script type="text/javascript" src="../jquery.slimscroll.js"></script>
+<link href="style.css" type="text/css" rel="stylesheet" />
+</head>
+<body>
+<a id="git-fork" href="https://github.com/rochal/jQuery-slimScroll"><img src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub"></a>
+<div class="examples">
+  <div id="testDiv">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+$('#testDiv').slimscroll();
+</pre>
+
+  <div id="testDiv2">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+$('#testDiv2').slimscroll({
+  disableFadeOut: true
+});
+</pre>
+
+</div>
+
+<script type="text/javascript">
+    $(function(){
+
+      $('#testDiv').slimscroll();
+
+      $('#testDiv2').slimscroll({
+        disableFadeOut: true
+      });
+
+    });
+</script>
+
+
+<script type="text/javascript">
+
+  //enable syntax highlighter
+  prettyPrint();
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-3112455-22']);
+  _gaq.push(['_setDomainName', 'none']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/examples/dynamic-content.html b/public/bower_components/jquery-slimscroll/examples/dynamic-content.html
new file mode 100644
index 0000000..1ac5e56
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/dynamic-content.html
@@ -0,0 +1,81 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>jquery.slimscroll - dynamic content</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+
+<link href="libs/prettify/prettify.css" type="text/css" rel="stylesheet" />
+<script type="text/javascript" src="libs/prettify/prettify.js"></script>
+<script type="text/javascript" src="../jquery.slimscroll.js"></script>
+<link href="style.css" type="text/css" rel="stylesheet" />
+</head>
+<body>
+<a id="git-fork" href="https://github.com/rochal/jQuery-slimScroll"><img src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub"></a>
+<div class="examples">
+
+
+  <div id="testDiv">
+  </div>
+
+  <pre class="prettyprint">
+  // update content every second
+  setInterval(function(){
+    var el = $('&lt;div&gt;&lt;/div&gt;').html('#' + $('#testDiv').children().length)
+            .css({ padding: '3px', border: '1px solid #ccc', margin: '5px' });
+    $('#testDiv').append(el);
+
+    // update slimscroll every time content changes
+    $('#testDiv').slimscroll();
+  }, 1000);
+
+  $('#testDiv').slimscroll({
+    alwaysVisible: true,
+    height: 150
+  });
+  </pre>
+
+
+
+</div>
+
+<script type="text/javascript">
+    $(function(){
+
+      // update content every second
+      setInterval(function(){
+        var el = $('<div></div>').html('#' + $('#testDiv').children().length)
+                .css({ padding: '3px', border: '1px solid #ccc', margin: '5px' });
+        $('#testDiv').append(el);
+
+        // update slimscroll every time content changes
+        $('#testDiv').slimscroll();
+      }, 1000);
+
+      $('#testDiv').slimscroll({
+        alwaysVisible: true,
+        height: 150
+      });
+
+    });
+</script>
+
+
+<script type="text/javascript">
+
+  //enable syntax highlighter
+  prettyPrint();
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-3112455-22']);
+  _gaq.push(['_setDomainName', 'none']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/examples/height-width.html b/public/bower_components/jquery-slimscroll/examples/height-width.html
new file mode 100644
index 0000000..4b006b0
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/height-width.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>jquery.slimscroll - height / width</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+
+<link href="libs/prettify/prettify.css" type="text/css" rel="stylesheet" />
+<script type="text/javascript" src="libs/prettify/prettify.js"></script>
+<script type="text/javascript" src="../jquery.slimscroll.js"></script>
+<link href="style.css" type="text/css" rel="stylesheet" />
+</head>
+<body>
+<a id="git-fork" href="https://github.com/rochal/jQuery-slimScroll"><img src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub"></a>
+<div class="examples">
+    <div style="height:300px;">
+      <div id="testDiv">
+        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+        <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+        <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+        <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+        <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+        <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+        <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+        <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+        <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+        <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+        <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+        <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+        <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+      </div>
+    </div>
+
+<pre class="prettyprint">
+$('#testDiv').slimscroll({
+  height: 'auto'
+});
+</pre>
+
+    <div id="testDiv2">
+      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+      <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+      <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+      <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+      <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+      <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+      <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+      <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+      <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+      <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+      <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+      <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+      <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    </div>
+
+<pre class="prettyprint">
+$('#testDiv2').slimscroll({
+  height: '100px',
+  width: '300px'
+});
+</pre>
+
+    <div id="testDiv3">
+      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+      <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+      <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+      <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+      <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+      <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+      <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+      <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+      <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+      <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+      <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+      <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+      <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    </div>
+
+<pre class="prettyprint">
+$('#testDiv3').slimscroll();
+</pre>
+
+</div>
+
+<script type="text/javascript">
+    $(function(){
+      $('#testDiv').slimScroll({
+          height: 'auto'
+      });
+
+      $('#testDiv2').slimScroll({
+          height: '100px',
+          width: '300px'
+      });
+
+      $('#testDiv3').slimScroll();
+
+    });
+</script>
+
+
+<script type="text/javascript">
+
+  //enable syntax highlighter
+  prettyPrint();
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-3112455-22']);
+  _gaq.push(['_setDomainName', 'none']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/examples/index.html b/public/bower_components/jquery-slimscroll/examples/index.html
new file mode 100644
index 0000000..890dd71
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/index.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
+<html>
+    <head>
+    </head>
+    <frameset framespacing="0" cols="250,*" frameborder="0" noresize>
+        <frame name="nav" src="navigation.html" target="top">
+        <frame name="main" src="height-width.html" target="main">
+    </frameset>
+</html>
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/examples/libs/prettify/prettify.css b/public/bower_components/jquery-slimscroll/examples/libs/prettify/prettify.css
new file mode 100644
index 0000000..400fd74
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/libs/prettify/prettify.css
@@ -0,0 +1,52 @@
+/* Pretty printing styles. Used with prettify.js. */
+
+/* SPAN elements with the classes below are added by prettyprint. */
+.pln { color: #000 }  /* plain text */
+
+@media screen {
+  .str { color: #080 }  /* string content */
+  .kwd { color: #008 }  /* a keyword */
+  .com { color: #800 }  /* a comment */
+  .typ { color: #606 }  /* a type name */
+  .lit { color: #066 }  /* a literal value */
+  /* punctuation, lisp open bracket, lisp close bracket */
+  .pun, .opn, .clo { color: #660 }
+  .tag { color: #008 }  /* a markup tag name */
+  .atn { color: #606 }  /* a markup attribute name */
+  .atv { color: #080 }  /* a markup attribute value */
+  .dec, .var { color: #606 }  /* a declaration; a variable name */
+  .fun { color: red }  /* a function name */
+}
+
+/* Use higher contrast and text-weight for printable form. */
+@media print, projection {
+  .str { color: #060 }
+  .kwd { color: #006; font-weight: bold }
+  .com { color: #600; font-style: italic }
+  .typ { color: #404; font-weight: bold }
+  .lit { color: #044 }
+  .pun, .opn, .clo { color: #440 }
+  .tag { color: #006; font-weight: bold }
+  .atn { color: #404 }
+  .atv { color: #060 }
+}
+
+/* Put a border around prettyprinted code snippets. */
+pre.prettyprint { padding: 2px; border: 1px solid #888 }
+
+/* Specify class=linenums on a pre to get line numbering */
+ol.linenums { margin-top: 0; margin-bottom: 0 } /* IE indents via margin-left */
+li.L0,
+li.L1,
+li.L2,
+li.L3,
+li.L5,
+li.L6,
+li.L7,
+li.L8 { list-style-type: none }
+/* Alternate shading for lines */
+li.L1,
+li.L3,
+li.L5,
+li.L7,
+li.L9 { background: #eee }
diff --git a/public/bower_components/jquery-slimscroll/examples/libs/prettify/prettify.js b/public/bower_components/jquery-slimscroll/examples/libs/prettify/prettify.js
new file mode 100644
index 0000000..037c26d
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/libs/prettify/prettify.js
@@ -0,0 +1,1477 @@
+// Copyright (C) 2006 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+/**
+ * @fileoverview
+ * some functions for browser-side pretty printing of code contained in html.
+ *
+ * <p>
+ * For a fairly comprehensive set of languages see the
+ * <a href="http://google-code-prettify.googlecode.com/svn/trunk/README.html#langs">README</a>
+ * file that came with this source.  At a minimum, the lexer should work on a
+ * number of languages including C and friends, Java, Python, Bash, SQL, HTML,
+ * XML, CSS, Javascript, and Makefiles.  It works passably on Ruby, PHP and Awk
+ * and a subset of Perl, but, because of commenting conventions, doesn't work on
+ * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class.
+ * <p>
+ * Usage: <ol>
+ * <li> include this source file in an html page via
+ *   {@code <script type="text/javascript" src="/path/to/prettify.js"></script>}
+ * <li> define style rules.  See the example page for examples.
+ * <li> mark the {@code <pre>} and {@code <code>} tags in your source with
+ *    {@code class=prettyprint.}
+ *    You can also use the (html deprecated) {@code <xmp>} tag, but the pretty
+ *    printer needs to do more substantial DOM manipulations to support that, so
+ *    some css styles may not be preserved.
+ * </ol>
+ * That's it.  I wanted to keep the API as simple as possible, so there's no
+ * need to specify which language the code is in, but if you wish, you can add
+ * another class to the {@code <pre>} or {@code <code>} element to specify the
+ * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
+ * starts with "lang-" followed by a file extension, specifies the file type.
+ * See the "lang-*.js" files in this directory for code that implements
+ * per-language file handlers.
+ * <p>
+ * Change log:<br>
+ * cbeust, 2006/08/22
+ * <blockquote>
+ *   Java annotations (start with "@") are now captured as literals ("lit")
+ * </blockquote>
+ * @requires console
+ */
+
+// JSLint declarations
+/*global console, document, navigator, setTimeout, window */
+
+/**
+ * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
+ * UI events.
+ * If set to {@code false}, {@code prettyPrint()} is synchronous.
+ */
+window['PR_SHOULD_USE_CONTINUATION'] = true;
+
+(function () {
+  // Keyword lists for various languages.
+  // We use things that coerce to strings to make them compact when minified
+  // and to defeat aggressive optimizers that fold large string constants.
+  var FLOW_CONTROL_KEYWORDS = ["break,continue,do,else,for,if,return,while"];
+  var C_KEYWORDS = [FLOW_CONTROL_KEYWORDS,"auto,case,char,const,default," + 
+      "double,enum,extern,float,goto,int,long,register,short,signed,sizeof," +
+      "static,struct,switch,typedef,union,unsigned,void,volatile"];
+  var COMMON_KEYWORDS = [C_KEYWORDS,"catch,class,delete,false,import," +
+      "new,operator,private,protected,public,this,throw,true,try,typeof"];
+  var CPP_KEYWORDS = [COMMON_KEYWORDS,"alignof,align_union,asm,axiom,bool," +
+      "concept,concept_map,const_cast,constexpr,decltype," +
+      "dynamic_cast,explicit,export,friend,inline,late_check," +
+      "mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast," +
+      "template,typeid,typename,using,virtual,where"];
+  var JAVA_KEYWORDS = [COMMON_KEYWORDS,
+      "abstract,boolean,byte,extends,final,finally,implements,import," +
+      "instanceof,null,native,package,strictfp,super,synchronized,throws," +
+      "transient"];
+  var CSHARP_KEYWORDS = [JAVA_KEYWORDS,
+      "as,base,by,checked,decimal,delegate,descending,dynamic,event," +
+      "fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock," +
+      "object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed," +
+      "stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];
+  var COFFEE_KEYWORDS = "all,and,by,catch,class,else,extends,false,finally," +
+      "for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then," +
+      "true,try,unless,until,when,while,yes";
+  var JSCRIPT_KEYWORDS = [COMMON_KEYWORDS,
+      "debugger,eval,export,function,get,null,set,undefined,var,with," +
+      "Infinity,NaN"];
+  var PERL_KEYWORDS = "caller,delete,die,do,dump,elsif,eval,exit,foreach,for," +
+      "goto,if,import,last,local,my,next,no,our,print,package,redo,require," +
+      "sub,undef,unless,until,use,wantarray,while,BEGIN,END";
+  var PYTHON_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "and,as,assert,class,def,del," +
+      "elif,except,exec,finally,from,global,import,in,is,lambda," +
+      "nonlocal,not,or,pass,print,raise,try,with,yield," +
+      "False,True,None"];
+  var RUBY_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "alias,and,begin,case,class," +
+      "def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo," +
+      "rescue,retry,self,super,then,true,undef,unless,until,when,yield," +
+      "BEGIN,END"];
+  var SH_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "case,done,elif,esac,eval,fi," +
+      "function,in,local,set,then,until"];
+  var ALL_KEYWORDS = [
+      CPP_KEYWORDS, CSHARP_KEYWORDS, JSCRIPT_KEYWORDS, PERL_KEYWORDS +
+      PYTHON_KEYWORDS, RUBY_KEYWORDS, SH_KEYWORDS];
+  var C_TYPES = /^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;
+
+  // token style names.  correspond to css classes
+  /**
+   * token style for a string literal
+   * @const
+   */
+  var PR_STRING = 'str';
+  /**
+   * token style for a keyword
+   * @const
+   */
+  var PR_KEYWORD = 'kwd';
+  /**
+   * token style for a comment
+   * @const
+   */
+  var PR_COMMENT = 'com';
+  /**
+   * token style for a type
+   * @const
+   */
+  var PR_TYPE = 'typ';
+  /**
+   * token style for a literal value.  e.g. 1, null, true.
+   * @const
+   */
+  var PR_LITERAL = 'lit';
+  /**
+   * token style for a punctuation string.
+   * @const
+   */
+  var PR_PUNCTUATION = 'pun';
+  /**
+   * token style for a punctuation string.
+   * @const
+   */
+  var PR_PLAIN = 'pln';
+
+  /**
+   * token style for an sgml tag.
+   * @const
+   */
+  var PR_TAG = 'tag';
+  /**
+   * token style for a markup declaration such as a DOCTYPE.
+   * @const
+   */
+  var PR_DECLARATION = 'dec';
+  /**
+   * token style for embedded source.
+   * @const
+   */
+  var PR_SOURCE = 'src';
+  /**
+   * token style for an sgml attribute name.
+   * @const
+   */
+  var PR_ATTRIB_NAME = 'atn';
+  /**
+   * token style for an sgml attribute value.
+   * @const
+   */
+  var PR_ATTRIB_VALUE = 'atv';
+
+  /**
+   * A class that indicates a section of markup that is not code, e.g. to allow
+   * embedding of line numbers within code listings.
+   * @const
+   */
+  var PR_NOCODE = 'nocode';
+
+
+
+/**
+ * A set of tokens that can precede a regular expression literal in
+ * javascript
+ * http://web.archive.org/web/20070717142515/http://www.mozilla.org/js/language/js20/rationale/syntax.html
+ * has the full list, but I've removed ones that might be problematic when
+ * seen in languages that don't support regular expression literals.
+ *
+ * <p>Specifically, I've removed any keywords that can't precede a regexp
+ * literal in a syntactically legal javascript program, and I've removed the
+ * "in" keyword since it's not a keyword in many languages, and might be used
+ * as a count of inches.
+ *
+ * <p>The link a above does not accurately describe EcmaScript rules since
+ * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
+ * very well in practice.
+ *
+ * @private
+ * @const
+ */
+var REGEXP_PRECEDER_PATTERN = '(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*';
+
+// CAVEAT: this does not properly handle the case where a regular
+// expression immediately follows another since a regular expression may
+// have flags for case-sensitivity and the like.  Having regexp tokens
+// adjacent is not valid in any language I'm aware of, so I'm punting.
+// TODO: maybe style special characters inside a regexp as punctuation.
+
+
+  /**
+   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
+   * matches the union of the sets of strings matched by the input RegExp.
+   * Since it matches globally, if the input strings have a start-of-input
+   * anchor (/^.../), it is ignored for the purposes of unioning.
+   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
+   * @return {RegExp} a global regex.
+   */
+  function combinePrefixPatterns(regexs) {
+    var capturedGroupIndex = 0;
+  
+    var needToFoldCase = false;
+    var ignoreCase = false;
+    for (var i = 0, n = regexs.length; i < n; ++i) {
+      var regex = regexs[i];
+      if (regex.ignoreCase) {
+        ignoreCase = true;
+      } else if (/[a-z]/i.test(regex.source.replace(
+                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
+        needToFoldCase = true;
+        ignoreCase = false;
+        break;
+      }
+    }
+  
+    var escapeCharToCodeUnit = {
+      'b': 8,
+      't': 9,
+      'n': 0xa,
+      'v': 0xb,
+      'f': 0xc,
+      'r': 0xd
+    };
+  
+    function decodeEscape(charsetPart) {
+      var cc0 = charsetPart.charCodeAt(0);
+      if (cc0 !== 92 /* \\ */) {
+        return cc0;
+      }
+      var c1 = charsetPart.charAt(1);
+      cc0 = escapeCharToCodeUnit[c1];
+      if (cc0) {
+        return cc0;
+      } else if ('0' <= c1 && c1 <= '7') {
+        return parseInt(charsetPart.substring(1), 8);
+      } else if (c1 === 'u' || c1 === 'x') {
+        return parseInt(charsetPart.substring(2), 16);
+      } else {
+        return charsetPart.charCodeAt(1);
+      }
+    }
+  
+    function encodeEscape(charCode) {
+      if (charCode < 0x20) {
+        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
+      }
+      var ch = String.fromCharCode(charCode);
+      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
+        ch = '\\' + ch;
+      }
+      return ch;
+    }
+  
+    function caseFoldCharset(charSet) {
+      var charsetParts = charSet.substring(1, charSet.length - 1).match(
+          new RegExp(
+              '\\\\u[0-9A-Fa-f]{4}'
+              + '|\\\\x[0-9A-Fa-f]{2}'
+              + '|\\\\[0-3][0-7]{0,2}'
+              + '|\\\\[0-7]{1,2}'
+              + '|\\\\[\\s\\S]'
+              + '|-'
+              + '|[^-\\\\]',
+              'g'));
+      var groups = [];
+      var ranges = [];
+      var inverse = charsetParts[0] === '^';
+      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
+        var p = charsetParts[i];
+        if (/\\[bdsw]/i.test(p)) {  // Don't muck with named groups.
+          groups.push(p);
+        } else {
+          var start = decodeEscape(p);
+          var end;
+          if (i + 2 < n && '-' === charsetParts[i + 1]) {
+            end = decodeEscape(charsetParts[i + 2]);
+            i += 2;
+          } else {
+            end = start;
+          }
+          ranges.push([start, end]);
+          // If the range might intersect letters, then expand it.
+          // This case handling is too simplistic.
+          // It does not deal with non-latin case folding.
+          // It works for latin source code identifiers though.
+          if (!(end < 65 || start > 122)) {
+            if (!(end < 65 || start > 90)) {
+              ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
+            }
+            if (!(end < 97 || start > 122)) {
+              ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
+            }
+          }
+        }
+      }
+  
+      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
+      // -> [[1, 12], [14, 14], [16, 17]]
+      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
+      var consolidatedRanges = [];
+      var lastRange = [NaN, NaN];
+      for (var i = 0; i < ranges.length; ++i) {
+        var range = ranges[i];
+        if (range[0] <= lastRange[1] + 1) {
+          lastRange[1] = Math.max(lastRange[1], range[1]);
+        } else {
+          consolidatedRanges.push(lastRange = range);
+        }
+      }
+  
+      var out = ['['];
+      if (inverse) { out.push('^'); }
+      out.push.apply(out, groups);
+      for (var i = 0; i < consolidatedRanges.length; ++i) {
+        var range = consolidatedRanges[i];
+        out.push(encodeEscape(range[0]));
+        if (range[1] > range[0]) {
+          if (range[1] + 1 > range[0]) { out.push('-'); }
+          out.push(encodeEscape(range[1]));
+        }
+      }
+      out.push(']');
+      return out.join('');
+    }
+  
+    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
+      // Split into character sets, escape sequences, punctuation strings
+      // like ('(', '(?:', ')', '^'), and runs of characters that do not
+      // include any of the above.
+      var parts = regex.source.match(
+          new RegExp(
+              '(?:'
+              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
+              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
+              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
+              + '|\\\\[0-9]+'  // a back-reference or octal escape
+              + '|\\\\[^ux0-9]'  // other escape sequence
+              + '|\\(\\?[:!=]'  // start of a non-capturing group
+              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
+              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
+              + ')',
+              'g'));
+      var n = parts.length;
+  
+      // Maps captured group numbers to the number they will occupy in
+      // the output or to -1 if that has not been determined, or to
+      // undefined if they need not be capturing in the output.
+      var capturedGroups = [];
+  
+      // Walk over and identify back references to build the capturedGroups
+      // mapping.
+      for (var i = 0, groupIndex = 0; i < n; ++i) {
+        var p = parts[i];
+        if (p === '(') {
+          // groups are 1-indexed, so max group index is count of '('
+          ++groupIndex;
+        } else if ('\\' === p.charAt(0)) {
+          var decimalValue = +p.substring(1);
+          if (decimalValue && decimalValue <= groupIndex) {
+            capturedGroups[decimalValue] = -1;
+          }
+        }
+      }
+  
+      // Renumber groups and reduce capturing groups to non-capturing groups
+      // where possible.
+      for (var i = 1; i < capturedGroups.length; ++i) {
+        if (-1 === capturedGroups[i]) {
+          capturedGroups[i] = ++capturedGroupIndex;
+        }
+      }
+      for (var i = 0, groupIndex = 0; i < n; ++i) {
+        var p = parts[i];
+        if (p === '(') {
+          ++groupIndex;
+          if (capturedGroups[groupIndex] === undefined) {
+            parts[i] = '(?:';
+          }
+        } else if ('\\' === p.charAt(0)) {
+          var decimalValue = +p.substring(1);
+          if (decimalValue && decimalValue <= groupIndex) {
+            parts[i] = '\\' + capturedGroups[groupIndex];
+          }
+        }
+      }
+  
+      // Remove any prefix anchors so that the output will match anywhere.
+      // ^^ really does mean an anchored match though.
+      for (var i = 0, groupIndex = 0; i < n; ++i) {
+        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
+      }
+  
+      // Expand letters to groups to handle mixing of case-sensitive and
+      // case-insensitive patterns if necessary.
+      if (regex.ignoreCase && needToFoldCase) {
+        for (var i = 0; i < n; ++i) {
+          var p = parts[i];
+          var ch0 = p.charAt(0);
+          if (p.length >= 2 && ch0 === '[') {
+            parts[i] = caseFoldCharset(p);
+          } else if (ch0 !== '\\') {
+            // TODO: handle letters in numeric escapes.
+            parts[i] = p.replace(
+                /[a-zA-Z]/g,
+                function (ch) {
+                  var cc = ch.charCodeAt(0);
+                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
+                });
+          }
+        }
+      }
+  
+      return parts.join('');
+    }
+  
+    var rewritten = [];
+    for (var i = 0, n = regexs.length; i < n; ++i) {
+      var regex = regexs[i];
+      if (regex.global || regex.multiline) { throw new Error('' + regex); }
+      rewritten.push(
+          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
+    }
+  
+    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
+  }
+
+
+  /**
+   * Split markup into a string of source code and an array mapping ranges in
+   * that string to the text nodes in which they appear.
+   *
+   * <p>
+   * The HTML DOM structure:</p>
+   * <pre>
+   * (Element   "p"
+   *   (Element "b"
+   *     (Text  "print "))       ; #1
+   *   (Text    "'Hello '")      ; #2
+   *   (Element "br")            ; #3
+   *   (Text    "  + 'World';")) ; #4
+   * </pre>
+   * <p>
+   * corresponds to the HTML
+   * {@code <p><b>print </b>'Hello '<br>  + 'World';</p>}.</p>
+   *
+   * <p>
+   * It will produce the output:</p>
+   * <pre>
+   * {
+   *   sourceCode: "print 'Hello '\n  + 'World';",
+   *   //                 1         2
+   *   //       012345678901234 5678901234567
+   *   spans: [0, #1, 6, #2, 14, #3, 15, #4]
+   * }
+   * </pre>
+   * <p>
+   * where #1 is a reference to the {@code "print "} text node above, and so
+   * on for the other text nodes.
+   * </p>
+   *
+   * <p>
+   * The {@code} spans array is an array of pairs.  Even elements are the start
+   * indices of substrings, and odd elements are the text nodes (or BR elements)
+   * that contain the text for those substrings.
+   * Substrings continue until the next index or the end of the source.
+   * </p>
+   *
+   * @param {Node} node an HTML DOM subtree containing source-code.
+   * @return {Object} source code and the text nodes in which they occur.
+   */
+  function extractSourceSpans(node) {
+    var nocode = /(?:^|\s)nocode(?:\s|$)/;
+  
+    var chunks = [];
+    var length = 0;
+    var spans = [];
+    var k = 0;
+  
+    var whitespace;
+    if (node.currentStyle) {
+      whitespace = node.currentStyle.whiteSpace;
+    } else if (window.getComputedStyle) {
+      whitespace = document.defaultView.getComputedStyle(node, null)
+          .getPropertyValue('white-space');
+    }
+    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
+  
+    function walk(node) {
+      switch (node.nodeType) {
+        case 1:  // Element
+          if (nocode.test(node.className)) { return; }
+          for (var child = node.firstChild; child; child = child.nextSibling) {
+            walk(child);
+          }
+          var nodeName = node.nodeName;
+          if ('BR' === nodeName || 'LI' === nodeName) {
+            chunks[k] = '\n';
+            spans[k << 1] = length++;
+            spans[(k++ << 1) | 1] = node;
+          }
+          break;
+        case 3: case 4:  // Text
+          var text = node.nodeValue;
+          if (text.length) {
+            if (!isPreformatted) {
+              text = text.replace(/[ \t\r\n]+/g, ' ');
+            } else {
+              text = text.replace(/\r\n?/g, '\n');  // Normalize newlines.
+            }
+            // TODO: handle tabs here?
+            chunks[k] = text;
+            spans[k << 1] = length;
+            length += text.length;
+            spans[(k++ << 1) | 1] = node;
+          }
+          break;
+      }
+    }
+  
+    walk(node);
+  
+    return {
+      sourceCode: chunks.join('').replace(/\n$/, ''),
+      spans: spans
+    };
+  }
+
+
+  /**
+   * Apply the given language handler to sourceCode and add the resulting
+   * decorations to out.
+   * @param {number} basePos the index of sourceCode within the chunk of source
+   *    whose decorations are already present on out.
+   */
+  function appendDecorations(basePos, sourceCode, langHandler, out) {
+    if (!sourceCode) { return; }
+    var job = {
+      sourceCode: sourceCode,
+      basePos: basePos
+    };
+    langHandler(job);
+    out.push.apply(out, job.decorations);
+  }
+
+  var notWs = /\S/;
+
+  /**
+   * Given an element, if it contains only one child element and any text nodes
+   * it contains contain only space characters, return the sole child element.
+   * Otherwise returns undefined.
+   * <p>
+   * This is meant to return the CODE element in {@code <pre><code ...>} when
+   * there is a single child element that contains all the non-space textual
+   * content, but not to return anything where there are multiple child elements
+   * as in {@code <pre><code>...</code><code>...</code></pre>} or when there
+   * is textual content.
+   */
+  function childContentWrapper(element) {
+    var wrapper = undefined;
+    for (var c = element.firstChild; c; c = c.nextSibling) {
+      var type = c.nodeType;
+      wrapper = (type === 1)  // Element Node
+          ? (wrapper ? element : c)
+          : (type === 3)  // Text Node
+          ? (notWs.test(c.nodeValue) ? element : wrapper)
+          : wrapper;
+    }
+    return wrapper === element ? undefined : wrapper;
+  }
+
+  /** Given triples of [style, pattern, context] returns a lexing function,
+    * The lexing function interprets the patterns to find token boundaries and
+    * returns a decoration list of the form
+    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
+    * where index_n is an index into the sourceCode, and style_n is a style
+    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
+    * all characters in sourceCode[index_n-1:index_n].
+    *
+    * The stylePatterns is a list whose elements have the form
+    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
+    *
+    * Style is a style constant like PR_PLAIN, or can be a string of the
+    * form 'lang-FOO', where FOO is a language extension describing the
+    * language of the portion of the token in $1 after pattern executes.
+    * E.g., if style is 'lang-lisp', and group 1 contains the text
+    * '(hello (world))', then that portion of the token will be passed to the
+    * registered lisp handler for formatting.
+    * The text before and after group 1 will be restyled using this decorator
+    * so decorators should take care that this doesn't result in infinite
+    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
+    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
+    * '<script>foo()<\/script>', which would cause the current decorator to
+    * be called with '<script>' which would not match the same rule since
+    * group 1 must not be empty, so it would be instead styled as PR_TAG by
+    * the generic tag rule.  The handler registered for the 'js' extension would
+    * then be called with 'foo()', and finally, the current decorator would
+    * be called with '<\/script>' which would not match the original rule and
+    * so the generic tag rule would identify it as a tag.
+    *
+    * Pattern must only match prefixes, and if it matches a prefix, then that
+    * match is considered a token with the same style.
+    *
+    * Context is applied to the last non-whitespace, non-comment token
+    * recognized.
+    *
+    * Shortcut is an optional string of characters, any of which, if the first
+    * character, gurantee that this pattern and only this pattern matches.
+    *
+    * @param {Array} shortcutStylePatterns patterns that always start with
+    *   a known character.  Must have a shortcut string.
+    * @param {Array} fallthroughStylePatterns patterns that will be tried in
+    *   order if the shortcut ones fail.  May have shortcuts.
+    *
+    * @return {function (Object)} a
+    *   function that takes source code and returns a list of decorations.
+    */
+  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
+    var shortcuts = {};
+    var tokenizer;
+    (function () {
+      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
+      var allRegexs = [];
+      var regexKeys = {};
+      for (var i = 0, n = allPatterns.length; i < n; ++i) {
+        var patternParts = allPatterns[i];
+        var shortcutChars = patternParts[3];
+        if (shortcutChars) {
+          for (var c = shortcutChars.length; --c >= 0;) {
+            shortcuts[shortcutChars.charAt(c)] = patternParts;
+          }
+        }
+        var regex = patternParts[1];
+        var k = '' + regex;
+        if (!regexKeys.hasOwnProperty(k)) {
+          allRegexs.push(regex);
+          regexKeys[k] = null;
+        }
+      }
+      allRegexs.push(/[\0-\uffff]/);
+      tokenizer = combinePrefixPatterns(allRegexs);
+    })();
+
+    var nPatterns = fallthroughStylePatterns.length;
+
+    /**
+     * Lexes job.sourceCode and produces an output array job.decorations of
+     * style classes preceded by the position at which they start in
+     * job.sourceCode in order.
+     *
+     * @param {Object} job an object like <pre>{
+     *    sourceCode: {string} sourceText plain text,
+     *    basePos: {int} position of job.sourceCode in the larger chunk of
+     *        sourceCode.
+     * }</pre>
+     */
+    var decorate = function (job) {
+      var sourceCode = job.sourceCode, basePos = job.basePos;
+      /** Even entries are positions in source in ascending order.  Odd enties
+        * are style markers (e.g., PR_COMMENT) that run from that position until
+        * the end.
+        * @type {Array.<number|string>}
+        */
+      var decorations = [basePos, PR_PLAIN];
+      var pos = 0;  // index into sourceCode
+      var tokens = sourceCode.match(tokenizer) || [];
+      var styleCache = {};
+
+      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
+        var token = tokens[ti];
+        var style = styleCache[token];
+        var match = void 0;
+
+        var isEmbedded;
+        if (typeof style === 'string') {
+          isEmbedded = false;
+        } else {
+          var patternParts = shortcuts[token.charAt(0)];
+          if (patternParts) {
+            match = token.match(patternParts[1]);
+            style = patternParts[0];
+          } else {
+            for (var i = 0; i < nPatterns; ++i) {
+              patternParts = fallthroughStylePatterns[i];
+              match = token.match(patternParts[1]);
+              if (match) {
+                style = patternParts[0];
+                break;
+              }
+            }
+
+            if (!match) {  // make sure that we make progress
+              style = PR_PLAIN;
+            }
+          }
+
+          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
+          if (isEmbedded && !(match && typeof match[1] === 'string')) {
+            isEmbedded = false;
+            style = PR_SOURCE;
+          }
+
+          if (!isEmbedded) { styleCache[token] = style; }
+        }
+
+        var tokenStart = pos;
+        pos += token.length;
+
+        if (!isEmbedded) {
+          decorations.push(basePos + tokenStart, style);
+        } else {  // Treat group 1 as an embedded block of source code.
+          var embeddedSource = match[1];
+          var embeddedSourceStart = token.indexOf(embeddedSource);
+          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
+          if (match[2]) {
+            // If embeddedSource can be blank, then it would match at the
+            // beginning which would cause us to infinitely recurse on the
+            // entire token, so we catch the right context in match[2].
+            embeddedSourceEnd = token.length - match[2].length;
+            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
+          }
+          var lang = style.substring(5);
+          // Decorate the left of the embedded source
+          appendDecorations(
+              basePos + tokenStart,
+              token.substring(0, embeddedSourceStart),
+              decorate, decorations);
+          // Decorate the embedded source
+          appendDecorations(
+              basePos + tokenStart + embeddedSourceStart,
+              embeddedSource,
+              langHandlerForExtension(lang, embeddedSource),
+              decorations);
+          // Decorate the right of the embedded section
+          appendDecorations(
+              basePos + tokenStart + embeddedSourceEnd,
+              token.substring(embeddedSourceEnd),
+              decorate, decorations);
+        }
+      }
+      job.decorations = decorations;
+    };
+    return decorate;
+  }
+
+  /** returns a function that produces a list of decorations from source text.
+    *
+    * This code treats ", ', and ` as string delimiters, and \ as a string
+    * escape.  It does not recognize perl's qq() style strings.
+    * It has no special handling for double delimiter escapes as in basic, or
+    * the tripled delimiters used in python, but should work on those regardless
+    * although in those cases a single string literal may be broken up into
+    * multiple adjacent string literals.
+    *
+    * It recognizes C, C++, and shell style comments.
+    *
+    * @param {Object} options a set of optional parameters.
+    * @return {function (Object)} a function that examines the source code
+    *     in the input job and builds the decoration list.
+    */
+  function sourceDecorator(options) {
+    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
+    if (options['tripleQuotedStrings']) {
+      // '''multi-line-string''', 'single-line-string', and double-quoted
+      shortcutStylePatterns.push(
+          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
+           null, '\'"']);
+    } else if (options['multiLineStrings']) {
+      // 'multi-line-string', "multi-line-string"
+      shortcutStylePatterns.push(
+          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
+           null, '\'"`']);
+    } else {
+      // 'single-line-string', "single-line-string"
+      shortcutStylePatterns.push(
+          [PR_STRING,
+           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
+           null, '"\'']);
+    }
+    if (options['verbatimStrings']) {
+      // verbatim-string-literal production from the C# grammar.  See issue 93.
+      fallthroughStylePatterns.push(
+          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
+    }
+    var hc = options['hashComments'];
+    if (hc) {
+      if (options['cStyleComments']) {
+        if (hc > 1) {  // multiline hash comments
+          shortcutStylePatterns.push(
+              [PR_COMMENT, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#']);
+        } else {
+          // Stop C preprocessor declarations at an unclosed open comment
+          shortcutStylePatterns.push(
+              [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
+               null, '#']);
+        }
+        fallthroughStylePatterns.push(
+            [PR_STRING,
+             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
+             null]);
+      } else {
+        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
+      }
+    }
+    if (options['cStyleComments']) {
+      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
+      fallthroughStylePatterns.push(
+          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
+    }
+    if (options['regexLiterals']) {
+      /**
+       * @const
+       */
+      var REGEX_LITERAL = (
+          // A regular expression literal starts with a slash that is
+          // not followed by * or / so that it is not confused with
+          // comments.
+          '/(?=[^/*])'
+          // and then contains any number of raw characters,
+          + '(?:[^/\\x5B\\x5C]'
+          // escape sequences (\x5C),
+          +    '|\\x5C[\\s\\S]'
+          // or non-nesting character sets (\x5B\x5D);
+          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
+          // finally closed by a /.
+          + '/');
+      fallthroughStylePatterns.push(
+          ['lang-regex',
+           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
+           ]);
+    }
+
+    var types = options['types'];
+    if (types) {
+      fallthroughStylePatterns.push([PR_TYPE, types]);
+    }
+
+    var keywords = ("" + options['keywords']).replace(/^ | $/g, '');
+    if (keywords.length) {
+      fallthroughStylePatterns.push(
+          [PR_KEYWORD,
+           new RegExp('^(?:' + keywords.replace(/[\s,]+/g, '|') + ')\\b'),
+           null]);
+    }
+
+    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
+    fallthroughStylePatterns.push(
+        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
+        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
+        [PR_TYPE,        /^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/, null],
+        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
+        [PR_LITERAL,
+         new RegExp(
+             '^(?:'
+             // A hex number
+             + '0x[a-f0-9]+'
+             // or an octal or decimal number,
+             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
+             // possibly in scientific notation
+             + '(?:e[+\\-]?\\d+)?'
+             + ')'
+             // with an optional modifier like UL for unsigned long
+             + '[a-z]*', 'i'),
+         null, '0123456789'],
+        // Don't treat escaped quotes in bash as starting strings.  See issue 144.
+        [PR_PLAIN,       /^\\[\s\S]?/, null],
+        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#\\]*/, null]);
+
+    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
+  }
+
+  var decorateSource = sourceDecorator({
+        'keywords': ALL_KEYWORDS,
+        'hashComments': true,
+        'cStyleComments': true,
+        'multiLineStrings': true,
+        'regexLiterals': true
+      });
+
+  /**
+   * Given a DOM subtree, wraps it in a list, and puts each line into its own
+   * list item.
+   *
+   * @param {Node} node modified in place.  Its content is pulled into an
+   *     HTMLOListElement, and each line is moved into a separate list item.
+   *     This requires cloning elements, so the input might not have unique
+   *     IDs after numbering.
+   */
+  function numberLines(node, opt_startLineNum) {
+    var nocode = /(?:^|\s)nocode(?:\s|$)/;
+    var lineBreak = /\r\n?|\n/;
+  
+    var document = node.ownerDocument;
+  
+    var whitespace;
+    if (node.currentStyle) {
+      whitespace = node.currentStyle.whiteSpace;
+    } else if (window.getComputedStyle) {
+      whitespace = document.defaultView.getComputedStyle(node, null)
+          .getPropertyValue('white-space');
+    }
+    // If it's preformatted, then we need to split lines on line breaks
+    // in addition to <BR>s.
+    var isPreformatted = whitespace && 'pre' === whitespace.substring(0, 3);
+  
+    var li = document.createElement('LI');
+    while (node.firstChild) {
+      li.appendChild(node.firstChild);
+    }
+    // An array of lines.  We split below, so this is initialized to one
+    // un-split line.
+    var listItems = [li];
+  
+    function walk(node) {
+      switch (node.nodeType) {
+        case 1:  // Element
+          if (nocode.test(node.className)) { break; }
+          if ('BR' === node.nodeName) {
+            breakAfter(node);
+            // Discard the <BR> since it is now flush against a </LI>.
+            if (node.parentNode) {
+              node.parentNode.removeChild(node);
+            }
+          } else {
+            for (var child = node.firstChild; child; child = child.nextSibling) {
+              walk(child);
+            }
+          }
+          break;
+        case 3: case 4:  // Text
+          if (isPreformatted) {
+            var text = node.nodeValue;
+            var match = text.match(lineBreak);
+            if (match) {
+              var firstLine = text.substring(0, match.index);
+              node.nodeValue = firstLine;
+              var tail = text.substring(match.index + match[0].length);
+              if (tail) {
+                var parent = node.parentNode;
+                parent.insertBefore(
+                    document.createTextNode(tail), node.nextSibling);
+              }
+              breakAfter(node);
+              if (!firstLine) {
+                // Don't leave blank text nodes in the DOM.
+                node.parentNode.removeChild(node);
+              }
+            }
+          }
+          break;
+      }
+    }
+  
+    // Split a line after the given node.
+    function breakAfter(lineEndNode) {
+      // If there's nothing to the right, then we can skip ending the line
+      // here, and move root-wards since splitting just before an end-tag
+      // would require us to create a bunch of empty copies.
+      while (!lineEndNode.nextSibling) {
+        lineEndNode = lineEndNode.parentNode;
+        if (!lineEndNode) { return; }
+      }
+  
+      function breakLeftOf(limit, copy) {
+        // Clone shallowly if this node needs to be on both sides of the break.
+        var rightSide = copy ? limit.cloneNode(false) : limit;
+        var parent = limit.parentNode;
+        if (parent) {
+          // We clone the parent chain.
+          // This helps us resurrect important styling elements that cross lines.
+          // E.g. in <i>Foo<br>Bar</i>
+          // should be rewritten to <li><i>Foo</i></li><li><i>Bar</i></li>.
+          var parentClone = breakLeftOf(parent, 1);
+          // Move the clone and everything to the right of the original
+          // onto the cloned parent.
+          var next = limit.nextSibling;
+          parentClone.appendChild(rightSide);
+          for (var sibling = next; sibling; sibling = next) {
+            next = sibling.nextSibling;
+            parentClone.appendChild(sibling);
+          }
+        }
+        return rightSide;
+      }
+  
+      var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0);
+  
+      // Walk the parent chain until we reach an unattached LI.
+      for (var parent;
+           // Check nodeType since IE invents document fragments.
+           (parent = copiedListItem.parentNode) && parent.nodeType === 1;) {
+        copiedListItem = parent;
+      }
+      // Put it on the list of lines for later processing.
+      listItems.push(copiedListItem);
+    }
+  
+    // Split lines while there are lines left to split.
+    for (var i = 0;  // Number of lines that have been split so far.
+         i < listItems.length;  // length updated by breakAfter calls.
+         ++i) {
+      walk(listItems[i]);
+    }
+  
+    // Make sure numeric indices show correctly.
+    if (opt_startLineNum === (opt_startLineNum|0)) {
+      listItems[0].setAttribute('value', opt_startLineNum);
+    }
+  
+    var ol = document.createElement('OL');
+    ol.className = 'linenums';
+    var offset = Math.max(0, ((opt_startLineNum - 1 /* zero index */)) | 0) || 0;
+    for (var i = 0, n = listItems.length; i < n; ++i) {
+      li = listItems[i];
+      // Stick a class on the LIs so that stylesheets can
+      // color odd/even rows, or any other row pattern that
+      // is co-prime with 10.
+      li.className = 'L' + ((i + offset) % 10);
+      if (!li.firstChild) {
+        li.appendChild(document.createTextNode('\xA0'));
+      }
+      ol.appendChild(li);
+    }
+  
+    node.appendChild(ol);
+  }
+
+  /**
+   * Breaks {@code job.sourceCode} around style boundaries in
+   * {@code job.decorations} and modifies {@code job.sourceNode} in place.
+   * @param {Object} job like <pre>{
+   *    sourceCode: {string} source as plain text,
+   *    spans: {Array.<number|Node>} alternating span start indices into source
+   *       and the text node or element (e.g. {@code <BR>}) corresponding to that
+   *       span.
+   *    decorations: {Array.<number|string} an array of style classes preceded
+   *       by the position at which they start in job.sourceCode in order
+   * }</pre>
+   * @private
+   */
+  function recombineTagsAndDecorations(job) {
+    var isIE = /\bMSIE\b/.test(navigator.userAgent);
+    var newlineRe = /\n/g;
+  
+    var source = job.sourceCode;
+    var sourceLength = source.length;
+    // Index into source after the last code-unit recombined.
+    var sourceIndex = 0;
+  
+    var spans = job.spans;
+    var nSpans = spans.length;
+    // Index into spans after the last span which ends at or before sourceIndex.
+    var spanIndex = 0;
+  
+    var decorations = job.decorations;
+    var nDecorations = decorations.length;
+    // Index into decorations after the last decoration which ends at or before
+    // sourceIndex.
+    var decorationIndex = 0;
+  
+    // Remove all zero-length decorations.
+    decorations[nDecorations] = sourceLength;
+    var decPos, i;
+    for (i = decPos = 0; i < nDecorations;) {
+      if (decorations[i] !== decorations[i + 2]) {
+        decorations[decPos++] = decorations[i++];
+        decorations[decPos++] = decorations[i++];
+      } else {
+        i += 2;
+      }
+    }
+    nDecorations = decPos;
+  
+    // Simplify decorations.
+    for (i = decPos = 0; i < nDecorations;) {
+      var startPos = decorations[i];
+      // Conflate all adjacent decorations that use the same style.
+      var startDec = decorations[i + 1];
+      var end = i + 2;
+      while (end + 2 <= nDecorations && decorations[end + 1] === startDec) {
+        end += 2;
+      }
+      decorations[decPos++] = startPos;
+      decorations[decPos++] = startDec;
+      i = end;
+    }
+  
+    nDecorations = decorations.length = decPos;
+  
+    var decoration = null;
+    while (spanIndex < nSpans) {
+      var spanStart = spans[spanIndex];
+      var spanEnd = spans[spanIndex + 2] || sourceLength;
+  
+      var decStart = decorations[decorationIndex];
+      var decEnd = decorations[decorationIndex + 2] || sourceLength;
+  
+      var end = Math.min(spanEnd, decEnd);
+  
+      var textNode = spans[spanIndex + 1];
+      var styledText;
+      if (textNode.nodeType !== 1  // Don't muck with <BR>s or <LI>s
+          // Don't introduce spans around empty text nodes.
+          && (styledText = source.substring(sourceIndex, end))) {
+        // This may seem bizarre, and it is.  Emitting LF on IE causes the
+        // code to display with spaces instead of line breaks.
+        // Emitting Windows standard issue linebreaks (CRLF) causes a blank
+        // space to appear at the beginning of every line but the first.
+        // Emitting an old Mac OS 9 line separator makes everything spiffy.
+        if (isIE) { styledText = styledText.replace(newlineRe, '\r'); }
+        textNode.nodeValue = styledText;
+        var document = textNode.ownerDocument;
+        var span = document.createElement('SPAN');
+        span.className = decorations[decorationIndex + 1];
+        var parentNode = textNode.parentNode;
+        parentNode.replaceChild(span, textNode);
+        span.appendChild(textNode);
+        if (sourceIndex < spanEnd) {  // Split off a text node.
+          spans[spanIndex + 1] = textNode
+              // TODO: Possibly optimize by using '' if there's no flicker.
+              = document.createTextNode(source.substring(end, spanEnd));
+          parentNode.insertBefore(textNode, span.nextSibling);
+        }
+      }
+  
+      sourceIndex = end;
+  
+      if (sourceIndex >= spanEnd) {
+        spanIndex += 2;
+      }
+      if (sourceIndex >= decEnd) {
+        decorationIndex += 2;
+      }
+    }
+  }
+
+
+  /** Maps language-specific file extensions to handlers. */
+  var langHandlerRegistry = {};
+  /** Register a language handler for the given file extensions.
+    * @param {function (Object)} handler a function from source code to a list
+    *      of decorations.  Takes a single argument job which describes the
+    *      state of the computation.   The single parameter has the form
+    *      {@code {
+    *        sourceCode: {string} as plain text.
+    *        decorations: {Array.<number|string>} an array of style classes
+    *                     preceded by the position at which they start in
+    *                     job.sourceCode in order.
+    *                     The language handler should assigned this field.
+    *        basePos: {int} the position of source in the larger source chunk.
+    *                 All positions in the output decorations array are relative
+    *                 to the larger source chunk.
+    *      } }
+    * @param {Array.<string>} fileExtensions
+    */
+  function registerLangHandler(handler, fileExtensions) {
+    for (var i = fileExtensions.length; --i >= 0;) {
+      var ext = fileExtensions[i];
+      if (!langHandlerRegistry.hasOwnProperty(ext)) {
+        langHandlerRegistry[ext] = handler;
+      } else if (window['console']) {
+        console['warn']('cannot override language handler %s', ext);
+      }
+    }
+  }
+  function langHandlerForExtension(extension, source) {
+    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
+      // Treat it as markup if the first non whitespace character is a < and
+      // the last non-whitespace character is a >.
+      extension = /^\s*</.test(source)
+          ? 'default-markup'
+          : 'default-code';
+    }
+    return langHandlerRegistry[extension];
+  }
+  registerLangHandler(decorateSource, ['default-code']);
+  registerLangHandler(
+      createSimpleLexer(
+          [],
+          [
+           [PR_PLAIN,       /^[^<?]+/],
+           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
+           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
+           // Unescaped content in an unknown language
+           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
+           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
+           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
+           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
+           // Unescaped content in javascript.  (Or possibly vbscript).
+           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
+           // Contains unescaped stylesheet content
+           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
+           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
+          ]),
+      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
+  registerLangHandler(
+      createSimpleLexer(
+          [
+           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
+           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
+           ],
+          [
+           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
+           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
+           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
+           [PR_PUNCTUATION,  /^[=<>\/]+/],
+           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
+           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
+           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
+           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
+           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
+           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
+           ]),
+      ['in.tag']);
+  registerLangHandler(
+      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
+  registerLangHandler(sourceDecorator({
+          'keywords': CPP_KEYWORDS,
+          'hashComments': true,
+          'cStyleComments': true,
+          'types': C_TYPES
+        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
+  registerLangHandler(sourceDecorator({
+          'keywords': 'null,true,false'
+        }), ['json']);
+  registerLangHandler(sourceDecorator({
+          'keywords': CSHARP_KEYWORDS,
+          'hashComments': true,
+          'cStyleComments': true,
+          'verbatimStrings': true,
+          'types': C_TYPES
+        }), ['cs']);
+  registerLangHandler(sourceDecorator({
+          'keywords': JAVA_KEYWORDS,
+          'cStyleComments': true
+        }), ['java']);
+  registerLangHandler(sourceDecorator({
+          'keywords': SH_KEYWORDS,
+          'hashComments': true,
+          'multiLineStrings': true
+        }), ['bsh', 'csh', 'sh']);
+  registerLangHandler(sourceDecorator({
+          'keywords': PYTHON_KEYWORDS,
+          'hashComments': true,
+          'multiLineStrings': true,
+          'tripleQuotedStrings': true
+        }), ['cv', 'py']);
+  registerLangHandler(sourceDecorator({
+          'keywords': PERL_KEYWORDS,
+          'hashComments': true,
+          'multiLineStrings': true,
+          'regexLiterals': true
+        }), ['perl', 'pl', 'pm']);
+  registerLangHandler(sourceDecorator({
+          'keywords': RUBY_KEYWORDS,
+          'hashComments': true,
+          'multiLineStrings': true,
+          'regexLiterals': true
+        }), ['rb']);
+  registerLangHandler(sourceDecorator({
+          'keywords': JSCRIPT_KEYWORDS,
+          'cStyleComments': true,
+          'regexLiterals': true
+        }), ['js']);
+  registerLangHandler(sourceDecorator({
+          'keywords': COFFEE_KEYWORDS,
+          'hashComments': 3,  // ### style block comments
+          'cStyleComments': true,
+          'multilineStrings': true,
+          'tripleQuotedStrings': true,
+          'regexLiterals': true
+        }), ['coffee']);
+  registerLangHandler(createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
+
+  function applyDecorator(job) {
+    var opt_langExtension = job.langExtension;
+
+    try {
+      // Extract tags, and convert the source code to plain text.
+      var sourceAndSpans = extractSourceSpans(job.sourceNode);
+      /** Plain text. @type {string} */
+      var source = sourceAndSpans.sourceCode;
+      job.sourceCode = source;
+      job.spans = sourceAndSpans.spans;
+      job.basePos = 0;
+
+      // Apply the appropriate language handler
+      langHandlerForExtension(opt_langExtension, source)(job);
+
+      // Integrate the decorations and tags back into the source code,
+      // modifying the sourceNode in place.
+      recombineTagsAndDecorations(job);
+    } catch (e) {
+      if ('console' in window) {
+        console['log'](e && e['stack'] ? e['stack'] : e);
+      }
+    }
+  }
+
+  /**
+   * @param sourceCodeHtml {string} The HTML to pretty print.
+   * @param opt_langExtension {string} The language name to use.
+   *     Typically, a filename extension like 'cpp' or 'java'.
+   * @param opt_numberLines {number|boolean} True to number lines,
+   *     or the 1-indexed number of the first line in sourceCodeHtml.
+   */
+  function prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) {
+    var container = document.createElement('PRE');
+    // This could cause images to load and onload listeners to fire.
+    // E.g. <img onerror="alert(1337)" src="nosuchimage.png">.
+    // We assume that the inner HTML is from a trusted source.
+    container.innerHTML = sourceCodeHtml;
+    if (opt_numberLines) {
+      numberLines(container, opt_numberLines);
+    }
+
+    var job = {
+      langExtension: opt_langExtension,
+      numberLines: opt_numberLines,
+      sourceNode: container
+    };
+    applyDecorator(job);
+    return container.innerHTML;
+  }
+
+  function prettyPrint(opt_whenDone) {
+    function byTagName(tn) { return document.getElementsByTagName(tn); }
+    // fetch a list of nodes to rewrite
+    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
+    var elements = [];
+    for (var i = 0; i < codeSegments.length; ++i) {
+      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
+        elements.push(codeSegments[i][j]);
+      }
+    }
+    codeSegments = null;
+
+    var clock = Date;
+    if (!clock['now']) {
+      clock = { 'now': function () { return +(new Date); } };
+    }
+
+    // The loop is broken into a series of continuations to make sure that we
+    // don't make the browser unresponsive when rewriting a large page.
+    var k = 0;
+    var prettyPrintingJob;
+
+    var langExtensionRe = /\blang(?:uage)?-([\w.]+)(?!\S)/;
+    var prettyPrintRe = /\bprettyprint\b/;
+
+    function doWork() {
+      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
+                     clock['now']() + 250 /* ms */ :
+                     Infinity);
+      for (; k < elements.length && clock['now']() < endTime; k++) {
+        var cs = elements[k];
+        var className = cs.className;
+        if (className.indexOf('prettyprint') >= 0) {
+          // If the classes includes a language extensions, use it.
+          // Language extensions can be specified like
+          //     <pre class="prettyprint lang-cpp">
+          // the language extension "cpp" is used to find a language handler as
+          // passed to PR.registerLangHandler.
+          // HTML5 recommends that a language be specified using "language-"
+          // as the prefix instead.  Google Code Prettify supports both.
+          // http://dev.w3.org/html5/spec-author-view/the-code-element.html
+          var langExtension = className.match(langExtensionRe);
+          // Support <pre class="prettyprint"><code class="language-c">
+          var wrapper;
+          if (!langExtension && (wrapper = childContentWrapper(cs))
+              && "CODE" === wrapper.tagName) {
+            langExtension = wrapper.className.match(langExtensionRe);
+          }
+
+          if (langExtension) {
+            langExtension = langExtension[1];
+          }
+
+          // make sure this is not nested in an already prettified element
+          var nested = false;
+          for (var p = cs.parentNode; p; p = p.parentNode) {
+            if ((p.tagName === 'pre' || p.tagName === 'code' ||
+                 p.tagName === 'xmp') &&
+                p.className && p.className.indexOf('prettyprint') >= 0) {
+              nested = true;
+              break;
+            }
+          }
+          if (!nested) {
+            // Look for a class like linenums or linenums:<n> where <n> is the
+            // 1-indexed number of the first line.
+            var lineNums = cs.className.match(/\blinenums\b(?::(\d+))?/);
+            lineNums = lineNums
+                  ? lineNums[1] && lineNums[1].length ? +lineNums[1] : true
+                  : false;
+            if (lineNums) { numberLines(cs, lineNums); }
+
+            // do the pretty printing
+            prettyPrintingJob = {
+              langExtension: langExtension,
+              sourceNode: cs,
+              numberLines: lineNums
+            };
+            applyDecorator(prettyPrintingJob);
+          }
+        }
+      }
+      if (k < elements.length) {
+        // finish up in a continuation
+        setTimeout(doWork, 250);
+      } else if (opt_whenDone) {
+        opt_whenDone();
+      }
+    }
+
+    doWork();
+  }
+
+   /**
+    * Find all the {@code <pre>} and {@code <code>} tags in the DOM with
+    * {@code class=prettyprint} and prettify them.
+    *
+    * @param {Function?} opt_whenDone if specified, called when the last entry
+    *     has been finished.
+    */
+  window['prettyPrintOne'] = prettyPrintOne;
+   /**
+    * Pretty print a chunk of code.
+    *
+    * @param {string} sourceCodeHtml code as html
+    * @return {string} code as html, but prettier
+    */
+  window['prettyPrint'] = prettyPrint;
+   /**
+    * Contains functions for creating and registering new language handlers.
+    * @type {Object}
+    */
+  window['PR'] = {
+        'createSimpleLexer': createSimpleLexer,
+        'registerLangHandler': registerLangHandler,
+        'sourceDecorator': sourceDecorator,
+        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
+        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
+        'PR_COMMENT': PR_COMMENT,
+        'PR_DECLARATION': PR_DECLARATION,
+        'PR_KEYWORD': PR_KEYWORD,
+        'PR_LITERAL': PR_LITERAL,
+        'PR_NOCODE': PR_NOCODE,
+        'PR_PLAIN': PR_PLAIN,
+        'PR_PUNCTUATION': PR_PUNCTUATION,
+        'PR_SOURCE': PR_SOURCE,
+        'PR_STRING': PR_STRING,
+        'PR_TAG': PR_TAG,
+        'PR_TYPE': PR_TYPE
+      };
+})();
diff --git a/public/bower_components/jquery-slimscroll/examples/mouse-wheel.html b/public/bower_components/jquery-slimscroll/examples/mouse-wheel.html
new file mode 100644
index 0000000..434c80c
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/mouse-wheel.html
@@ -0,0 +1,99 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>jquery.slimscroll - mouse wheel</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+
+<link href="libs/prettify/prettify.css" type="text/css" rel="stylesheet" />
+<script type="text/javascript" src="libs/prettify/prettify.js"></script>
+<script type="text/javascript" src="../jquery.slimscroll.js"></script>
+<link href="style.css" type="text/css" rel="stylesheet" />
+</head>
+<body>
+<a id="git-fork" href="https://github.com/rochal/jQuery-slimScroll"><img src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub"></a>
+
+<div class="examples">
+  <div id="testDiv">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+  $('#testDiv').slimScroll({
+      wheelStep: 20
+  });
+</pre>
+
+  <div id="testDiv2">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+  $('#testDiv2').slimScroll({
+      wheelStep: 100
+  });
+</pre>
+
+</div>
+
+<script type="text/javascript">
+    $(function(){
+
+      $('#testDiv').slimScroll({
+          wheelStep: 20
+      });
+
+      $('#testDiv2').slimScroll({
+          wheelStep: 100
+      });
+
+    });
+</script>
+
+
+<script type="text/javascript">
+
+  //enable syntax highlighter
+  prettyPrint();
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-3112455-22']);
+  _gaq.push(['_setDomainName', 'none']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/examples/multiple-elements.html b/public/bower_components/jquery-slimscroll/examples/multiple-elements.html
new file mode 100644
index 0000000..8923825
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/multiple-elements.html
@@ -0,0 +1,120 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>jquery.slimscroll - multiple elements</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+
+<link href="libs/prettify/prettify.css" type="text/css" rel="stylesheet" />
+<script type="text/javascript" src="libs/prettify/prettify.js"></script>
+<script type="text/javascript" src="../jquery.slimscroll.js"></script>
+<link href="style.css" type="text/css" rel="stylesheet" />
+</head>
+<body>
+<a id="git-fork" href="https://github.com/rochal/jQuery-slimScroll"><img src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub"></a>
+
+<div class="examples">
+<div style="height:80px;float:left;">
+  <div class="area">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+</div>
+<div style="height:400px;float:left;">
+  <div class="area">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+</div>
+<div style="height:300px;float:left;">
+  <div class="area">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+</div>
+
+<div style="clear:both"></div>
+<pre class="prettyprint">
+  $('.area').slimscroll({
+    width: '200px',
+  }).parent().css({
+    'float': 'left',
+    'margin-right': '30px'
+  });
+</pre>
+
+<div style="clear:both"></div>
+</div>
+
+<script type="text/javascript">
+    $(function(){
+
+      $('.area').slimscroll({
+        width: '200px',
+        height: 'auto'
+      }).parent().css({
+        'float': 'left',
+        'margin-right': '30px'
+      });
+
+    });
+</script>
+
+
+<script type="text/javascript">
+
+  //enable syntax highlighter
+  prettyPrint();
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-3112455-22']);
+  _gaq.push(['_setDomainName', 'none']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/examples/navigation.html b/public/bower_components/jquery-slimscroll/examples/navigation.html
new file mode 100644
index 0000000..2df6272
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/navigation.html
@@ -0,0 +1,30 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>jquery.slimscroll - navigation</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<link href="style.css" type="text/css" rel="stylesheet" />
+</head>
+<body>
+<div id="nav">
+  <h1>jQuery slimScroll</h1>
+  <h2>Facebook-style jQuery Scrollbar</h1>
+  <hr />
+  <ul>
+    <li><a target="main" href="height-width.html">Height / Width options</a></li>
+    <li><a target="main" href="scrollbar.html">Scrollbar options</a></li>
+    <li><a target="main" href="rail.html">Rail options</a></li>
+    <li><a target="main" href="start-position.html">Start position</a></li>
+    <li><a target="main" href="chaining.html">Chaining</a></li>
+    <li><a target="main" href="multiple-elements.html">Mulitple bindings</a></li>
+    <li><a target="main" href="programmatic-scrolling.html">Programmatic Scrolling</a></li>
+    <li><a target="main" href="scroll-events.html">Scroll Events</a></li>
+    <li><a target="main" href="allow-page-scroll.html">allowPageScroll option</a></li>
+    <li><a target="main" href="disable-fade-out.html">disableFadeOut option</a></li>
+    <li><a target="main" href="mouse-wheel.html">wheelStep option</a></li>
+    <li><a target="main" href="nested.html">nested elements</a></li>
+    <li><a target="main" href="dynamic-content.html">dynamic content</a></li>
+  </ul>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/examples/nested.html b/public/bower_components/jquery-slimscroll/examples/nested.html
new file mode 100644
index 0000000..92bd599
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/nested.html
@@ -0,0 +1,82 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>jquery.slimscroll - nested elements</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+
+<link href="libs/prettify/prettify.css" type="text/css" rel="stylesheet" />
+<script type="text/javascript" src="libs/prettify/prettify.js"></script>
+<script type="text/javascript" src="../jquery.slimscroll.js"></script>
+<link href="style.css" type="text/css" rel="stylesheet" />
+</head>
+<body>
+<a id="git-fork" href="https://github.com/rochal/jQuery-slimScroll"><img src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub"></a>
+
+<div class="examples">
+  <div id="testDiv">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+      <div id="testDivNested">
+        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+        <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+        <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+        <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+        <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+      </div>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+  </div>
+
+<pre class="prettyprint">
+  $('#testDiv').slimscroll({
+    height: '500px'
+  });
+  $('#testDivNested').slimscroll({
+    width: '300px',
+    height: '200px'
+  });
+</pre>
+
+
+</div>
+
+<script type="text/javascript">
+    $(function(){
+
+      $('#testDiv').slimscroll({
+        height: '500px'
+      });
+      $('#testDivNested').slimscroll({
+        width: '300px',
+        height: '200px'
+      }).parent().css({
+        'float': 'left',
+        'margin': '0 10px 10px 0'
+      });
+
+    });
+</script>
+
+
+<script type="text/javascript">
+
+  //enable syntax highlighter
+  prettyPrint();
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-3112455-22']);
+  _gaq.push(['_setDomainName', 'none']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/examples/programmatic-scrolling.html b/public/bower_components/jquery-slimscroll/examples/programmatic-scrolling.html
new file mode 100644
index 0000000..163e753
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/programmatic-scrolling.html
@@ -0,0 +1,138 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>jquery.slimscroll - programmatic scrolling</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+
+<link href="libs/prettify/prettify.css" type="text/css" rel="stylesheet" />
+<script type="text/javascript" src="libs/prettify/prettify.js"></script>
+<script type="text/javascript" src="../jquery.slimscroll.js"></script>
+<link href="style.css" type="text/css" rel="stylesheet" />
+</head>
+<body>
+<a id="git-fork" href="https://github.com/rochal/jQuery-slimScroll"><img src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub"></a>
+
+<div class="examples">
+  <div id="testDiv">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+  <input type="button" id="scrollDown" value="scroll down by 50 px" />
+  <input type="button" id="scrollUp" value="scroll up by 50 px" />
+
+
+<pre class="prettyprint">
+$('#testDiv').slimscroll({
+  height: '250px'
+});
+
+$('#scrollDown').click(function(){
+  $('#testDiv').slimScroll({ scrollBy: '50px' });
+});
+
+$('#scrollUp').click(function(){
+  $('#testDiv').slimScroll({ scrollBy: '-50px' });
+});
+</pre>
+
+  <div id="testDiv2">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+  <input type="button" id="scrollDownTo" value="Scroll to 300px from the top" />
+  <input type="button" id="scrollUpTo" value="Scroll to 20px from the top" />
+
+
+<pre class="prettyprint">
+$('#testDiv2').slimscroll({
+  height: '250px'
+});
+
+$('#scrollDownTo').click(function(){
+  $('#testDiv2').slimScroll({ scrollTo: '300px' });
+});
+
+$('#scrollUpTo').click(function(){
+  $('#testDiv2').slimScroll({ scrollTo: '20px' });
+});
+</pre>
+
+
+
+</div>
+
+<script type="text/javascript">
+    $(function(){
+      $('#testDiv').slimscroll({
+        height: '250px'
+      });
+
+      $('#scrollDown').click(function(){
+        $('#testDiv').slimScroll({ scrollBy: '50px' });
+      });
+
+      $('#scrollUp').click(function(){
+        $('#testDiv').slimScroll({ scrollBy: '-50px' });
+      });
+
+      $('#testDiv2').slimscroll({
+        height: '250px'
+      });
+
+      $('#scrollDownTo').click(function(){
+        $('#testDiv2').slimScroll({ scrollTo: '300px' });
+      });
+
+      $('#scrollUpTo').click(function(){
+        $('#testDiv2').slimScroll({ scrollTo: '20px' });
+      });
+
+    });
+</script>
+
+
+<script type="text/javascript">
+
+  //enable syntax highlighter
+  prettyPrint();
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-3112455-22']);
+  _gaq.push(['_setDomainName', 'none']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/examples/rail.html b/public/bower_components/jquery-slimscroll/examples/rail.html
new file mode 100644
index 0000000..4f77f34
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/rail.html
@@ -0,0 +1,190 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>jquery.slimscroll - rail options</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+
+<link href="libs/prettify/prettify.css" type="text/css" rel="stylesheet" />
+<script type="text/javascript" src="libs/prettify/prettify.js"></script>
+<script type="text/javascript" src="../jquery.slimscroll.js"></script>
+<link href="style.css" type="text/css" rel="stylesheet" />
+</head>
+<body>
+<a id="git-fork" href="https://github.com/rochal/jQuery-slimScroll"><img src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub"></a>
+
+<div class="examples">
+  <div id="testDiv">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+  $('#testDiv').slimScroll({
+      alwaysVisible: true,
+      railVisible: true
+  });
+</pre>
+
+  <div id="testDiv2">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+  $('#testDiv2').slimScroll({
+      railVisible: true,
+      railColor: '#f00'
+  });
+</pre>
+
+  <div id="testDiv3">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+  $('#testDiv3').slimScroll({
+      railVisible: true,
+      railOpacity: 0.8
+  });
+</pre>
+
+  <div id="testDiv4">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+  $('#testDiv4').slimscroll({
+    railVisible: true,
+    railBorderRadius: 0
+  });
+</pre>
+
+  <div id="testDiv5">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+  $('#testDiv5').slimscroll({
+    railDraggable: false
+  });
+</pre>
+
+</div>
+
+<script type="text/javascript">
+    $(function(){
+
+      $('#testDiv').slimScroll({
+          alwaysVisible: true,
+          railVisible: true
+      });
+
+      $('#testDiv2').slimScroll({
+          railVisible: true,
+          railColor: '#f00'
+      });
+
+      $('#testDiv3').slimScroll({
+          railVisible: true,
+          railOpacity: 0.8
+      });
+
+      $('#testDiv4').slimscroll({
+        railVisible: true,
+        railBorderRadius: 0
+      });
+
+      $('#testDiv5').slimscroll({
+        railDraggable: false
+      });
+    });
+</script>
+
+
+<script type="text/javascript">
+
+  //enable syntax highlighter
+  prettyPrint();
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-3112455-22']);
+  _gaq.push(['_setDomainName', 'none']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/examples/scroll-events.html b/public/bower_components/jquery-slimscroll/examples/scroll-events.html
new file mode 100644
index 0000000..9eabbdc
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/scroll-events.html
@@ -0,0 +1,88 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>jquery.slimscroll - top/bottom events</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+
+<link href="libs/prettify/prettify.css" type="text/css" rel="stylesheet" />
+<script type="text/javascript" src="libs/prettify/prettify.js"></script>
+<script type="text/javascript" src="../jquery.slimscroll.js"></script>
+<link href="style.css" type="text/css" rel="stylesheet" />
+</head>
+<body>
+<a id="git-fork" href="https://github.com/rochal/jQuery-slimScroll"><img src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub"></a>
+
+<div class="examples">
+  <div id="testDiv">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+  </div>
+  <div style="padding:2px;border:1px dashed #333;margin:2px;" id="testDivOut"></div>
+
+<pre class="prettyprint">
+  $('#testDiv').slimscroll({
+    alwaysVisible: true
+  }).bind('slimscroll', function(e, pos) {
+    $('#testDivOut').append("Reached " + pos + ", ");
+  });
+</pre>
+
+  <div id="testDiv2">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+  </div>
+  <div style="padding:2px;border:1px dashed #333;margin:2px;" id="testDivOut2"></div>
+
+<pre class="prettyprint">
+  $('#testDiv2').slimscroll().bind('slimscrolling', function(e, pos) {
+    $('#testDivOut2').append("Scroll value: " + pos + "px");
+  });
+</pre>
+
+
+</div>
+
+<script type="text/javascript">
+    $(function(){
+
+      $('#testDiv').slimscroll({
+        alwaysVisible: true
+      }).bind('slimscroll', function(e, pos) {
+        $('#testDivOut').append("Reached " + pos + ", ");
+      });
+
+      $('#testDiv2').slimscroll().bind('slimscrolling', function(e, pos) {
+        $('#testDivOut2').append("Scroll: " + pos + "px, ");
+      });
+
+    });
+</script>
+
+
+<script type="text/javascript">
+
+  //enable syntax highlighter
+  prettyPrint();
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-3112455-22']);
+  _gaq.push(['_setDomainName', 'none']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/examples/scrollbar.html b/public/bower_components/jquery-slimscroll/examples/scrollbar.html
new file mode 100644
index 0000000..9f13b03
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/scrollbar.html
@@ -0,0 +1,189 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>jquery.slimscroll - scrollbar options</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+
+<link href="libs/prettify/prettify.css" type="text/css" rel="stylesheet" />
+<script type="text/javascript" src="libs/prettify/prettify.js"></script>
+<script type="text/javascript" src="../jquery.slimscroll.js"></script>
+<link href="style.css" type="text/css" rel="stylesheet" />
+</head>
+<body>
+<a id="git-fork" href="https://github.com/rochal/jQuery-slimScroll"><img src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub"></a>
+
+<div class="examples">
+  <div id="testDiv">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+  $('#testDiv').slimscroll({
+    size: '15px'
+  });
+</pre>
+
+  <div id="testDiv2">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+  $('#testDiv2').slimScroll({
+      position: 'left'
+  });
+</pre>
+
+  <div id="testDiv3">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+  $('#testDiv3').slimScroll({
+      color: '#00f'
+  });
+</pre>
+
+
+
+  <div id="testDiv4">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+  $('#testDiv4').slimScroll({
+      alwaysVisible: true
+  });
+</pre>
+
+
+
+  <div id="testDiv5">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+  $('#testDiv5').slimScroll({
+      distance: '20px',
+      opacity: 1
+  });
+</pre>
+
+
+</div>
+
+<script type="text/javascript">
+    $(function(){
+      $('#testDiv').slimscroll({
+        size: '15px'
+      });
+
+      $('#testDiv2').slimScroll({
+          position: 'left'
+      });
+
+      $('#testDiv3').slimScroll({
+          color: '#00f'
+      });
+
+      $('#testDiv4').slimScroll({
+          alwaysVisible: true
+      });
+
+      $('#testDiv5').slimScroll({
+          distance: '20px',
+          opacity: 1
+      });
+
+    });
+</script>
+
+
+<script type="text/javascript">
+
+  //enable syntax highlighter
+  prettyPrint();
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-3112455-22']);
+  _gaq.push(['_setDomainName', 'none']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/examples/start-position.html b/public/bower_components/jquery-slimscroll/examples/start-position.html
new file mode 100644
index 0000000..8afdda6
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/start-position.html
@@ -0,0 +1,100 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<title>jquery.slimscroll - start position</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
+
+<link href="libs/prettify/prettify.css" type="text/css" rel="stylesheet" />
+<script type="text/javascript" src="libs/prettify/prettify.js"></script>
+<script type="text/javascript" src="../jquery.slimscroll.js"></script>
+<link href="style.css" type="text/css" rel="stylesheet" />
+</head>
+<body>
+<a id="git-fork" href="https://github.com/rochal/jQuery-slimScroll"><img src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub"></a>
+
+<div class="examples">
+  <div id="testDiv">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+  $('#testDiv').slimScroll({
+      start: 'bottom'
+  });
+</pre>
+
+  <div id="testDiv2">
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p><span class="helloDiv" style="background:green;font-weigh:bold;">Hello!</span>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam rhoncus, felis interdum condimentum consectetur, nisl libero elementum eros, vehicula congue lacus eros non diam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vivamus mauris lorem, lacinia id tempus non, imperdiet et leo. Cras sit amet erat sit amet lacus egestas placerat. Aenean ultricies ultrices mauris ac congue. In vel tortor vel velit tristique tempus ac id nisi. Proin quis lorem velit. Nunc dui dui, blandit a ullamcorper vitae, congue fringilla lectus. Aliquam ultricies malesuada feugiat. Vestibulum placerat turpis et eros lobortis vel semper sapien pulvinar.</p>
+    <p>Pellentesque rhoncus aliquet porta. Sed vel magna eu turpis pharetra consequat ut vitae lectus. In molestie sollicitudin mi sit amet convallis. Aliquam erat volutpat. Nullam feugiat placerat ipsum eget malesuada. Nulla facilisis nunc non dolor vehicula pretium. Sed dui magna, sodales id pharetra non, ullamcorper eu sapien. Mauris ac consectetur leo. Mauris consequat, lectus ut bibendum pulvinar, leo magna feugiat enim, eu commodo lacus sem vel ante. Sed tempus metus eget leo mollis vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>
+    <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pulvinar rhoncus quam, vel semper tellus viverra id. Nulla rutrum porttitor odio, a rutrum purus gravida non. Etiam ac purus augue, eget vestibulum purus. Aenean venenatis ullamcorper augue, non consequat elit tempor sed. Donec velit sapien, volutpat sed ultricies egestas, semper a ante. Fusce dapibus, quam eget auctor suscipit, nibh leo posuere ante, at auctor nisi lacus in sem. Morbi interdum consectetur euismod. Cras accumsan est lacus. Nulla eleifend, eros vel consequat commodo, arcu nunc malesuada nunc, quis sagittis felis sem ac turpis.</p>
+    <p>Nulla rhoncus elementum convallis. Mauris condimentum aliquet egestas. Ut iaculis nisi eget tellus accumsan venenatis. Maecenas imperdiet aliquam porta. Aenean ultrices dolor sed quam laoreet varius. Curabitur condimentum blandit erat, quis accumsan eros interdum vitae. Curabitur ligula arcu, sollicitudin vitae iaculis sed, blandit sit amet enim. Morbi ullamcorper, metus vel mollis tristique, arcu turpis malesuada nisi, at dignissim lorem odio a orci. Proin ultrices, ipsum ut vestibulum interdum, libero felis auctor mi, vitae convallis nisl justo ac tellus. Integer nec lacinia turpis. Etiam massa nisl, rhoncus quis rutrum in, pretium eu leo. Proin a velit ut nulla laoreet vestibulum. Curabitur eu elit vitae felis auctor tincidunt. Curabitur tincidunt, metus sed sollicitudin cursus, quam elit commodo erat, ut tempor erat sapien vitae velit. Morbi nec viverra erat.</p>
+    <p>Nullam scelerisque facilisis pretium. Vivamus lectus leo, commodo ac sagittis ac, dictum a mi. Donec quis massa ut libero malesuada commodo in et risus. Fusce nunc dolor, aliquet vel rutrum in, molestie sit amet massa. Aliquam suscipit, justo a commodo condimentum, enim sapien fringilla ante, sed lobortis orci lectus in ante. Donec vel interdum est. Donec placerat cursus lacus, eu ultricies nisl tincidunt a. Fusce libero risus, sagittis eleifend iaculis aliquet, condimentum vitae diam. Suspendisse potenti. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin leo purus, sodales a venenatis luctus, faucibus ac enim. Sed id metus ac sem lobortis pretium. Mauris faucibus tempor scelerisque. Nunc vulputate interdum tortor, non tincidunt dui condimentum eget. Aenean in porttitor velit. Nam accumsan rhoncus risus id consectetur.</p>
+  </div>
+
+<pre class="prettyprint">
+  $('#testDiv2').slimScroll({
+      start: $('.helloDiv')
+  });
+</pre>
+
+
+</div>
+
+<script type="text/javascript">
+    $(function(){
+
+      $('#testDiv').slimScroll({
+          start: 'bottom'
+      });
+
+      $('#testDiv2').slimScroll({
+          start: $('.helloDiv')
+      });
+
+    });
+</script>
+
+
+<script type="text/javascript">
+
+  //enable syntax highlighter
+  prettyPrint();
+
+  var _gaq = _gaq || [];
+  _gaq.push(['_setAccount', 'UA-3112455-22']);
+  _gaq.push(['_setDomainName', 'none']);
+  _gaq.push(['_trackPageview']);
+
+  (function() {
+    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+  })();
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/examples/style.css b/public/bower_components/jquery-slimscroll/examples/style.css
new file mode 100644
index 0000000..b676c81
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/examples/style.css
@@ -0,0 +1,13 @@
+body { font-family:Verdana,sans-serif; font-size:12px; color:#000; background:#111; }
+h1 { font-size:20px; margin:0 }
+h2 { font-size:10px; margin:0 }
+p { margin:5px 0; font-size:12px; }
+pre.prettyprint { padding:15px; border:1px solid #eee; border-radius:5px; background:#eee; border-bottom:3px solid; }
+.examples { border-radius:20px; background:#fff; padding:15px;
+  margin:0 150px 0 0; border-collapse: collapse; border:1px solid #000; }
+.slimScrollDiv { border:1px solid #eee; }
+#nav { position:fixed; top:0; left:0; background:#fff; padding:15px; border-radius:20px; width:200px; }
+#nav ul { list-style-type:square; list-style-position:inside; margin:20px 0 0 0; padding:0; }
+#nav a { text-decoration:none; color:#000; }
+#nav a:hover { text-decoration: underline }
+#git-fork img { position:fixed; top:0; right:0; border:0; z-index:999; }
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/jquery.slimscroll.js b/public/bower_components/jquery-slimscroll/jquery.slimscroll.js
new file mode 100644
index 0000000..2b26ca0
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/jquery.slimscroll.js
@@ -0,0 +1,474 @@
+/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la)
+ * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
+ * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
+ *
+ * Version: 1.3.7
+ *
+ */
+(function($) {
+
+  $.fn.extend({
+    slimScroll: function(options) {
+
+      var defaults = {
+
+        // width in pixels of the visible scroll area
+        width : 'auto',
+
+        // height in pixels of the visible scroll area
+        height : '250px',
+
+        // width in pixels of the scrollbar and rail
+        size : '7px',
+
+        // scrollbar color, accepts any hex/color value
+        color: '#000',
+
+        // scrollbar position - left/right
+        position : 'right',
+
+        // distance in pixels between the side edge and the scrollbar
+        distance : '1px',
+
+        // default scroll position on load - top / bottom / $('selector')
+        start : 'top',
+
+        // sets scrollbar opacity
+        opacity : .4,
+
+        // enables always-on mode for the scrollbar
+        alwaysVisible : false,
+
+        // check if we should hide the scrollbar when user is hovering over
+        disableFadeOut : false,
+
+        // sets visibility of the rail
+        railVisible : false,
+
+        // sets rail color
+        railColor : '#333',
+
+        // sets rail opacity
+        railOpacity : .2,
+
+        // whether  we should use jQuery UI Draggable to enable bar dragging
+        railDraggable : true,
+
+        // defautlt CSS class of the slimscroll rail
+        railClass : 'slimScrollRail',
+
+        // defautlt CSS class of the slimscroll bar
+        barClass : 'slimScrollBar',
+
+        // defautlt CSS class of the slimscroll wrapper
+        wrapperClass : 'slimScrollDiv',
+
+        // check if mousewheel should scroll the window if we reach top/bottom
+        allowPageScroll : false,
+
+        // scroll amount applied to each mouse wheel step
+        wheelStep : 20,
+
+        // scroll amount applied when user is using gestures
+        touchScrollStep : 200,
+
+        // sets border radius
+        borderRadius: '7px',
+
+        // sets border radius of the rail
+        railBorderRadius : '7px'
+      };
+
+      var o = $.extend(defaults, options);
+
+      // do it for every element that matches selector
+      this.each(function(){
+
+      var isOverPanel, isOverBar, isDragg, queueHide, touchDif,
+        barHeight, percentScroll, lastScroll,
+        divS = '<div></div>',
+        minBarHeight = 30,
+        releaseScroll = false;
+
+        // used in event handlers and for better minification
+        var me = $(this);
+
+        // ensure we are not binding it again
+        if (me.parent().hasClass(o.wrapperClass))
+        {
+            // start from last bar position
+            var offset = me.scrollTop();
+
+            // find bar and rail
+            bar = me.siblings('.' + o.barClass);
+            rail = me.siblings('.' + o.railClass);
+
+            getBarHeight();
+
+            // check if we should scroll existing instance
+            if ($.isPlainObject(options))
+            {
+              // Pass height: auto to an existing slimscroll object to force a resize after contents have changed
+              if ( 'height' in options && options.height == 'auto' ) {
+                me.parent().css('height', 'auto');
+                me.css('height', 'auto');
+                var height = me.parent().parent().height();
+                me.parent().css('height', height);
+                me.css('height', height);
+              } else if ('height' in options) {
+                var h = options.height;
+                me.parent().css('height', h);
+                me.css('height', h);
+              }
+
+              if ('scrollTo' in options)
+              {
+                // jump to a static point
+                offset = parseInt(o.scrollTo);
+              }
+              else if ('scrollBy' in options)
+              {
+                // jump by value pixels
+                offset += parseInt(o.scrollBy);
+              }
+              else if ('destroy' in options)
+              {
+                // remove slimscroll elements
+                bar.remove();
+                rail.remove();
+                me.unwrap();
+                return;
+              }
+
+              // scroll content by the given offset
+              scrollContent(offset, false, true);
+            }
+
+            return;
+        }
+        else if ($.isPlainObject(options))
+        {
+            if ('destroy' in options)
+            {
+            	return;
+            }
+        }
+
+        // optionally set height to the parent's height
+        o.height = (o.height == 'auto') ? me.parent().height() : o.height;
+
+        // wrap content
+        var wrapper = $(divS)
+          .addClass(o.wrapperClass)
+          .css({
+            position: 'relative',
+            overflow: 'hidden',
+            width: o.width,
+            height: o.height
+          });
+
+        // update style for the div
+        me.css({
+          overflow: 'hidden',
+          width: o.width,
+          height: o.height
+        });
+
+        // create scrollbar rail
+        var rail = $(divS)
+          .addClass(o.railClass)
+          .css({
+            width: o.size,
+            height: '100%',
+            position: 'absolute',
+            top: 0,
+            display: (o.alwaysVisible && o.railVisible) ? 'block' : 'none',
+            'border-radius': o.railBorderRadius,
+            background: o.railColor,
+            opacity: o.railOpacity,
+            zIndex: 90
+          });
+
+        // create scrollbar
+        var bar = $(divS)
+          .addClass(o.barClass)
+          .css({
+            background: o.color,
+            width: o.size,
+            position: 'absolute',
+            top: 0,
+            opacity: o.opacity,
+            display: o.alwaysVisible ? 'block' : 'none',
+            'border-radius' : o.borderRadius,
+            BorderRadius: o.borderRadius,
+            MozBorderRadius: o.borderRadius,
+            WebkitBorderRadius: o.borderRadius,
+            zIndex: 99
+          });
+
+        // set position
+        var posCss = (o.position == 'right') ? { right: o.distance } : { left: o.distance };
+        rail.css(posCss);
+        bar.css(posCss);
+
+        // wrap it
+        me.wrap(wrapper);
+
+        // append to parent div
+        me.parent().append(bar);
+        me.parent().append(rail);
+
+        // make it draggable and no longer dependent on the jqueryUI
+        if (o.railDraggable){
+          bar.bind("mousedown", function(e) {
+            var $doc = $(document);
+            isDragg = true;
+            t = parseFloat(bar.css('top'));
+            pageY = e.pageY;
+
+            $doc.bind("mousemove.slimscroll", function(e){
+              currTop = t + e.pageY - pageY;
+              bar.css('top', currTop);
+              scrollContent(0, bar.position().top, false);// scroll content
+            });
+
+            $doc.bind("mouseup.slimscroll", function(e) {
+              isDragg = false;hideBar();
+              $doc.unbind('.slimscroll');
+            });
+            return false;
+          }).bind("selectstart.slimscroll", function(e){
+            e.stopPropagation();
+            e.preventDefault();
+            return false;
+          });
+        }
+
+        // on rail over
+        rail.hover(function(){
+          showBar();
+        }, function(){
+          hideBar();
+        });
+
+        // on bar over
+        bar.hover(function(){
+          isOverBar = true;
+        }, function(){
+          isOverBar = false;
+        });
+
+        // show on parent mouseover
+        me.hover(function(){
+          isOverPanel = true;
+          showBar();
+          hideBar();
+        }, function(){
+          isOverPanel = false;
+          hideBar();
+        });
+
+        // support for mobile
+        me.bind('touchstart', function(e,b){
+          if (e.originalEvent.touches.length)
+          {
+            // record where touch started
+            touchDif = e.originalEvent.touches[0].pageY;
+          }
+        });
+
+        me.bind('touchmove', function(e){
+          // prevent scrolling the page if necessary
+          if(!releaseScroll)
+          {
+  		      e.originalEvent.preventDefault();
+		      }
+          if (e.originalEvent.touches.length)
+          {
+            // see how far user swiped
+            var diff = (touchDif - e.originalEvent.touches[0].pageY) / o.touchScrollStep;
+            // scroll content
+            scrollContent(diff, true);
+            touchDif = e.originalEvent.touches[0].pageY;
+          }
+        });
+
+        // set up initial height
+        getBarHeight();
+
+        // check start position
+        if (o.start === 'bottom')
+        {
+          // scroll content to bottom
+          bar.css({ top: me.outerHeight() - bar.outerHeight() });
+          scrollContent(0, true);
+        }
+        else if (o.start !== 'top')
+        {
+          // assume jQuery selector
+          scrollContent($(o.start).position().top, null, true);
+
+          // make sure bar stays hidden
+          if (!o.alwaysVisible) { bar.hide(); }
+        }
+
+        // attach scroll events
+        attachWheel(this);
+
+        function _onWheel(e)
+        {
+          // use mouse wheel only when mouse is over
+          if (!isOverPanel) { return; }
+
+          var e = e || window.event;
+
+          var delta = 0;
+          if (e.wheelDelta) { delta = -e.wheelDelta/120; }
+          if (e.detail) { delta = e.detail / 3; }
+
+          var target = e.target || e.srcTarget || e.srcElement;
+          if ($(target).closest('.' + o.wrapperClass).is(me.parent())) {
+            // scroll content
+            scrollContent(delta, true);
+          }
+
+          // stop window scroll
+          if (e.preventDefault && !releaseScroll) { e.preventDefault(); }
+          if (!releaseScroll) { e.returnValue = false; }
+        }
+
+        function scrollContent(y, isWheel, isJump)
+        {
+          releaseScroll = false;
+          var delta = y;
+          var maxTop = me.outerHeight() - bar.outerHeight();
+
+          if (isWheel)
+          {
+            // move bar with mouse wheel
+            delta = parseInt(bar.css('top')) + y * parseInt(o.wheelStep) / 100 * bar.outerHeight();
+
+            // move bar, make sure it doesn't go out
+            delta = Math.min(Math.max(delta, 0), maxTop);
+
+            // if scrolling down, make sure a fractional change to the
+            // scroll position isn't rounded away when the scrollbar's CSS is set
+            // this flooring of delta would happened automatically when
+            // bar.css is set below, but we floor here for clarity
+            delta = (y > 0) ? Math.ceil(delta) : Math.floor(delta);
+
+            // scroll the scrollbar
+            bar.css({ top: delta + 'px' });
+          }
+
+          // calculate actual scroll amount
+          percentScroll = parseInt(bar.css('top')) / (me.outerHeight() - bar.outerHeight());
+          delta = percentScroll * (me[0].scrollHeight - me.outerHeight());
+
+          if (isJump)
+          {
+            delta = y;
+            var offsetTop = delta / me[0].scrollHeight * me.outerHeight();
+            offsetTop = Math.min(Math.max(offsetTop, 0), maxTop);
+            bar.css({ top: offsetTop + 'px' });
+          }
+
+          // scroll content
+          me.scrollTop(delta);
+
+          // fire scrolling event
+          me.trigger('slimscrolling', ~~delta);
+
+          // ensure bar is visible
+          showBar();
+
+          // trigger hide when scroll is stopped
+          hideBar();
+        }
+
+        function attachWheel(target)
+        {
+          if (window.addEventListener)
+          {
+            target.addEventListener('DOMMouseScroll', _onWheel, false );
+            target.addEventListener('mousewheel', _onWheel, false );
+          }
+          else
+          {
+            document.attachEvent("onmousewheel", _onWheel)
+          }
+        }
+
+        function getBarHeight()
+        {
+          // calculate scrollbar height and make sure it is not too small
+          barHeight = Math.max((me.outerHeight() / me[0].scrollHeight) * me.outerHeight(), minBarHeight);
+          bar.css({ height: barHeight + 'px' });
+
+          // hide scrollbar if content is not long enough
+          var display = barHeight == me.outerHeight() ? 'none' : 'block';
+          bar.css({ display: display });
+        }
+
+        function showBar()
+        {
+          // recalculate bar height
+          getBarHeight();
+          clearTimeout(queueHide);
+
+          // when bar reached top or bottom
+          if (percentScroll == ~~percentScroll)
+          {
+            //release wheel
+            releaseScroll = o.allowPageScroll;
+
+            // publish approporiate event
+            if (lastScroll != percentScroll)
+            {
+                var msg = (~~percentScroll == 0) ? 'top' : 'bottom';
+                me.trigger('slimscroll', msg);
+            }
+          }
+          else
+          {
+            releaseScroll = false;
+          }
+          lastScroll = percentScroll;
+
+          // show only when required
+          if(barHeight >= me.outerHeight()) {
+            //allow window scroll
+            releaseScroll = true;
+            return;
+          }
+          bar.stop(true,true).fadeIn('fast');
+          if (o.railVisible) { rail.stop(true,true).fadeIn('fast'); }
+        }
+
+        function hideBar()
+        {
+          // only hide when options allow it
+          if (!o.alwaysVisible)
+          {
+            queueHide = setTimeout(function(){
+              if (!(o.disableFadeOut && isOverPanel) && !isOverBar && !isDragg)
+              {
+                bar.fadeOut('slow');
+                rail.fadeOut('slow');
+              }
+            }, 1000);
+          }
+        }
+
+      });
+
+      // maintain chainability
+      return this;
+    }
+  });
+
+  $.fn.extend({
+    slimscroll: $.fn.slimScroll
+  });
+
+})(jQuery);
diff --git a/public/bower_components/jquery-slimscroll/jquery.slimscroll.min.js b/public/bower_components/jquery-slimscroll/jquery.slimscroll.min.js
new file mode 100644
index 0000000..f41e608
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/jquery.slimscroll.min.js
@@ -0,0 +1,16 @@
+/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la)
+ * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
+ * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
+ *
+ * Version: 1.3.6
+ *
+ */
+(function(e){e.fn.extend({slimScroll:function(g){var a=e.extend({width:"auto",height:"250px",size:"7px",color:"#000",position:"right",distance:"1px",start:"top",opacity:.4,alwaysVisible:!1,disableFadeOut:!1,railVisible:!1,railColor:"#333",railOpacity:.2,railDraggable:!0,railClass:"slimScrollRail",barClass:"slimScrollBar",wrapperClass:"slimScrollDiv",allowPageScroll:!1,wheelStep:20,touchScrollStep:200,borderRadius:"7px",railBorderRadius:"7px"},g);this.each(function(){function v(d){if(r){d=d||window.event;
+var c=0;d.wheelDelta&&(c=-d.wheelDelta/120);d.detail&&(c=d.detail/3);e(d.target||d.srcTarget||d.srcElement).closest("."+a.wrapperClass).is(b.parent())&&m(c,!0);d.preventDefault&&!k&&d.preventDefault();k||(d.returnValue=!1)}}function m(d,e,g){k=!1;var f=d,h=b.outerHeight()-c.outerHeight();e&&(f=parseInt(c.css("top"))+d*parseInt(a.wheelStep)/100*c.outerHeight(),f=Math.min(Math.max(f,0),h),f=0<d?Math.ceil(f):Math.floor(f),c.css({top:f+"px"}));l=parseInt(c.css("top"))/(b.outerHeight()-c.outerHeight());
+f=l*(b[0].scrollHeight-b.outerHeight());g&&(f=d,d=f/b[0].scrollHeight*b.outerHeight(),d=Math.min(Math.max(d,0),h),c.css({top:d+"px"}));b.scrollTop(f);b.trigger("slimscrolling",~~f);w();p()}function x(){u=Math.max(b.outerHeight()/b[0].scrollHeight*b.outerHeight(),30);c.css({height:u+"px"});var a=u==b.outerHeight()?"none":"block";c.css({display:a})}function w(){x();clearTimeout(B);l==~~l?(k=a.allowPageScroll,C!=l&&b.trigger("slimscroll",0==~~l?"top":"bottom")):k=!1;C=l;u>=b.outerHeight()?k=!0:(c.stop(!0,
+!0).fadeIn("fast"),a.railVisible&&h.stop(!0,!0).fadeIn("fast"))}function p(){a.alwaysVisible||(B=setTimeout(function(){a.disableFadeOut&&r||y||z||(c.fadeOut("slow"),h.fadeOut("slow"))},1E3))}var r,y,z,B,A,u,l,C,k=!1,b=e(this);if(b.parent().hasClass(a.wrapperClass)){var n=b.scrollTop(),c=b.closest("."+a.barClass),h=b.closest("."+a.railClass);x();if(e.isPlainObject(g)){if("height"in g&&"auto"==g.height){b.parent().css("height","auto");b.css("height","auto");var q=b.parent().parent().height();b.parent().css("height",
+q);b.css("height",q)}if("scrollTo"in g)n=parseInt(a.scrollTo);else if("scrollBy"in g)n+=parseInt(a.scrollBy);else if("destroy"in g){c.remove();h.remove();b.unwrap();return}m(n,!1,!0)}}else if(!(e.isPlainObject(g)&&"destroy"in g)){a.height="auto"==a.height?b.parent().height():a.height;n=e("<div></div>").addClass(a.wrapperClass).css({position:"relative",overflow:"hidden",width:a.width,height:a.height});b.css({overflow:"hidden",width:a.width,height:a.height});var h=e("<div></div>").addClass(a.railClass).css({width:a.size,
+height:"100%",position:"absolute",top:0,display:a.alwaysVisible&&a.railVisible?"block":"none","border-radius":a.railBorderRadius,background:a.railColor,opacity:a.railOpacity,zIndex:90}),c=e("<div></div>").addClass(a.barClass).css({background:a.color,width:a.size,position:"absolute",top:0,opacity:a.opacity,display:a.alwaysVisible?"block":"none","border-radius":a.borderRadius,BorderRadius:a.borderRadius,MozBorderRadius:a.borderRadius,WebkitBorderRadius:a.borderRadius,zIndex:99}),q="right"==a.position?
+{right:a.distance}:{left:a.distance};h.css(q);c.css(q);b.wrap(n);b.parent().append(c);b.parent().append(h);a.railDraggable&&c.bind("mousedown",function(a){var b=e(document);z=!0;t=parseFloat(c.css("top"));pageY=a.pageY;b.bind("mousemove.slimscroll",function(a){currTop=t+a.pageY-pageY;c.css("top",currTop);m(0,c.position().top,!1)});b.bind("mouseup.slimscroll",function(a){z=!1;p();b.unbind(".slimscroll")});return!1}).bind("selectstart.slimscroll",function(a){a.stopPropagation();a.preventDefault();return!1});
+h.hover(function(){w()},function(){p()});c.hover(function(){y=!0},function(){y=!1});b.hover(function(){r=!0;w();p()},function(){r=!1;p()});b.bind("touchstart",function(a,b){a.originalEvent.touches.length&&(A=a.originalEvent.touches[0].pageY)});b.bind("touchmove",function(b){k||b.originalEvent.preventDefault();b.originalEvent.touches.length&&(m((A-b.originalEvent.touches[0].pageY)/a.touchScrollStep,!0),A=b.originalEvent.touches[0].pageY)});x();"bottom"===a.start?(c.css({top:b.outerHeight()-c.outerHeight()}),
+m(0,!0)):"top"!==a.start&&(m(e(a.start).position().top,null,!0),a.alwaysVisible||c.hide());window.addEventListener?(this.addEventListener("DOMMouseScroll",v,!1),this.addEventListener("mousewheel",v,!1)):document.attachEvent("onmousewheel",v)}});return this}});e.fn.extend({slimscroll:e.fn.slimScroll})})(jQuery);
\ No newline at end of file
diff --git a/public/bower_components/jquery-slimscroll/package.json b/public/bower_components/jquery-slimscroll/package.json
new file mode 100644
index 0000000..4ac6ccf
--- /dev/null
+++ b/public/bower_components/jquery-slimscroll/package.json
@@ -0,0 +1,31 @@
+{
+  "name"        : "jquery-slimscroll",
+  "version"     : "1.3.7",
+  "title"       : "jQuery slimScroll scrollbar",
+  "description" : "slimScroll is a small jQuery plugin that transforms any div into a scrollable area. slimScroll doesn't occupy any visual space as it only appears on a user initiated mouse-over.",
+  "keywords"    : ["scrollbar", "scroll", "slimscroll", "scrollable", "scrolling", "scroller", "ui", "jquery-plugin", "ecosystem:jquery"],
+  "homepage"    : "http://rocha.la/jQuery-slimScroll/",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/rochal/jQuery-slimScroll.git"
+  },
+  "author" : {
+    "name"  : "Piotr Rochala",
+    "url"   : "http://rocha.la/"
+  },
+
+  "dependencies" : {
+    "jquery" : ">= 1.7"
+  },
+
+  "licenses" : [
+    {
+      "type": "MIT",
+      "url": "http://www.opensource.org/licenses/mit-license.php"
+    },
+    {
+      "type": "GPL",
+      "url": "http://www.opensource.org/licenses/gpl-license.php"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/public/bower_components/jquery-ui/jquery-ui.js b/public/bower_components/jquery-ui/jquery-ui.js
new file mode 100644
index 0000000..31ee9cd
--- /dev/null
+++ b/public/bower_components/jquery-ui/jquery-ui.js
@@ -0,0 +1,16617 @@
+/*! jQuery UI - v1.11.4 - 2015-03-11
+* http://jqueryui.com
+* Includes: core.js, widget.js, mouse.js, position.js, accordion.js, autocomplete.js, button.js, datepicker.js, dialog.js, draggable.js, droppable.js, effect.js, effect-blind.js, effect-bounce.js, effect-clip.js, effect-drop.js, effect-explode.js, effect-fade.js, effect-fold.js, effect-highlight.js, effect-puff.js, effect-pulsate.js, effect-scale.js, effect-shake.js, effect-size.js, effect-slide.js, effect-transfer.js, menu.js, progressbar.js, resizable.js, selectable.js, selectmenu.js, slider.js, sortable.js, spinner.js, tabs.js, tooltip.js
+* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
+
+(function( factory ) {
+	if ( typeof define === "function" && define.amd ) {
+
+		// AMD. Register as an anonymous module.
+		define([ "jquery" ], factory );
+	} else {
+
+		// Browser globals
+		factory( jQuery );
+	}
+}(function( $ ) {
+/*!
+ * jQuery UI Core 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/ui-core/
+ */
+
+
+// $.ui might exist from components with no dependencies, e.g., $.ui.position
+$.ui = $.ui || {};
+
+$.extend( $.ui, {
+	version: "1.11.4",
+
+	keyCode: {
+		BACKSPACE: 8,
+		COMMA: 188,
+		DELETE: 46,
+		DOWN: 40,
+		END: 35,
+		ENTER: 13,
+		ESCAPE: 27,
+		HOME: 36,
+		LEFT: 37,
+		PAGE_DOWN: 34,
+		PAGE_UP: 33,
+		PERIOD: 190,
+		RIGHT: 39,
+		SPACE: 32,
+		TAB: 9,
+		UP: 38
+	}
+});
+
+// plugins
+$.fn.extend({
+	scrollParent: function( includeHidden ) {
+		var position = this.css( "position" ),
+			excludeStaticParent = position === "absolute",
+			overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
+			scrollParent = this.parents().filter( function() {
+				var parent = $( this );
+				if ( excludeStaticParent && parent.css( "position" ) === "static" ) {
+					return false;
+				}
+				return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + parent.css( "overflow-x" ) );
+			}).eq( 0 );
+
+		return position === "fixed" || !scrollParent.length ? $( this[ 0 ].ownerDocument || document ) : scrollParent;
+	},
+
+	uniqueId: (function() {
+		var uuid = 0;
+
+		return function() {
+			return this.each(function() {
+				if ( !this.id ) {
+					this.id = "ui-id-" + ( ++uuid );
+				}
+			});
+		};
+	})(),
+
+	removeUniqueId: function() {
+		return this.each(function() {
+			if ( /^ui-id-\d+$/.test( this.id ) ) {
+				$( this ).removeAttr( "id" );
+			}
+		});
+	}
+});
+
+// selectors
+function focusable( element, isTabIndexNotNaN ) {
+	var map, mapName, img,
+		nodeName = element.nodeName.toLowerCase();
+	if ( "area" === nodeName ) {
+		map = element.parentNode;
+		mapName = map.name;
+		if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+			return false;
+		}
+		img = $( "img[usemap='#" + mapName + "']" )[ 0 ];
+		return !!img && visible( img );
+	}
+	return ( /^(input|select|textarea|button|object)$/.test( nodeName ) ?
+		!element.disabled :
+		"a" === nodeName ?
+			element.href || isTabIndexNotNaN :
+			isTabIndexNotNaN) &&
+		// the element and all of its ancestors must be visible
+		visible( element );
+}
+
+function visible( element ) {
+	return $.expr.filters.visible( element ) &&
+		!$( element ).parents().addBack().filter(function() {
+			return $.css( this, "visibility" ) === "hidden";
+		}).length;
+}
+
+$.extend( $.expr[ ":" ], {
+	data: $.expr.createPseudo ?
+		$.expr.createPseudo(function( dataName ) {
+			return function( elem ) {
+				return !!$.data( elem, dataName );
+			};
+		}) :
+		// support: jQuery <1.8
+		function( elem, i, match ) {
+			return !!$.data( elem, match[ 3 ] );
+		},
+
+	focusable: function( element ) {
+		return focusable( element, !isNaN( $.attr( element, "tabindex" ) ) );
+	},
+
+	tabbable: function( element ) {
+		var tabIndex = $.attr( element, "tabindex" ),
+			isTabIndexNaN = isNaN( tabIndex );
+		return ( isTabIndexNaN || tabIndex >= 0 ) && focusable( element, !isTabIndexNaN );
+	}
+});
+
+// support: jQuery <1.8
+if ( !$( "<a>" ).outerWidth( 1 ).jquery ) {
+	$.each( [ "Width", "Height" ], function( i, name ) {
+		var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ],
+			type = name.toLowerCase(),
+			orig = {
+				innerWidth: $.fn.innerWidth,
+				innerHeight: $.fn.innerHeight,
+				outerWidth: $.fn.outerWidth,
+				outerHeight: $.fn.outerHeight
+			};
+
+		function reduce( elem, size, border, margin ) {
+			$.each( side, function() {
+				size -= parseFloat( $.css( elem, "padding" + this ) ) || 0;
+				if ( border ) {
+					size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0;
+				}
+				if ( margin ) {
+					size -= parseFloat( $.css( elem, "margin" + this ) ) || 0;
+				}
+			});
+			return size;
+		}
+
+		$.fn[ "inner" + name ] = function( size ) {
+			if ( size === undefined ) {
+				return orig[ "inner" + name ].call( this );
+			}
+
+			return this.each(function() {
+				$( this ).css( type, reduce( this, size ) + "px" );
+			});
+		};
+
+		$.fn[ "outer" + name] = function( size, margin ) {
+			if ( typeof size !== "number" ) {
+				return orig[ "outer" + name ].call( this, size );
+			}
+
+			return this.each(function() {
+				$( this).css( type, reduce( this, size, true, margin ) + "px" );
+			});
+		};
+	});
+}
+
+// support: jQuery <1.8
+if ( !$.fn.addBack ) {
+	$.fn.addBack = function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter( selector )
+		);
+	};
+}
+
+// support: jQuery 1.6.1, 1.6.2 (http://bugs.jquery.com/ticket/9413)
+if ( $( "<a>" ).data( "a-b", "a" ).removeData( "a-b" ).data( "a-b" ) ) {
+	$.fn.removeData = (function( removeData ) {
+		return function( key ) {
+			if ( arguments.length ) {
+				return removeData.call( this, $.camelCase( key ) );
+			} else {
+				return removeData.call( this );
+			}
+		};
+	})( $.fn.removeData );
+}
+
+// deprecated
+$.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
+
+$.fn.extend({
+	focus: (function( orig ) {
+		return function( delay, fn ) {
+			return typeof delay === "number" ?
+				this.each(function() {
+					var elem = this;
+					setTimeout(function() {
+						$( elem ).focus();
+						if ( fn ) {
+							fn.call( elem );
+						}
+					}, delay );
+				}) :
+				orig.apply( this, arguments );
+		};
+	})( $.fn.focus ),
+
+	disableSelection: (function() {
+		var eventType = "onselectstart" in document.createElement( "div" ) ?
+			"selectstart" :
+			"mousedown";
+
+		return function() {
+			return this.bind( eventType + ".ui-disableSelection", function( event ) {
+				event.preventDefault();
+			});
+		};
+	})(),
+
+	enableSelection: function() {
+		return this.unbind( ".ui-disableSelection" );
+	},
+
+	zIndex: function( zIndex ) {
+		if ( zIndex !== undefined ) {
+			return this.css( "zIndex", zIndex );
+		}
+
+		if ( this.length ) {
+			var elem = $( this[ 0 ] ), position, value;
+			while ( elem.length && elem[ 0 ] !== document ) {
+				// Ignore z-index if position is set to a value where z-index is ignored by the browser
+				// This makes behavior of this function consistent across browsers
+				// WebKit always returns auto if the element is positioned
+				position = elem.css( "position" );
+				if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+					// IE returns 0 when zIndex is not specified
+					// other browsers return a string
+					// we ignore the case of nested elements with an explicit value of 0
+					// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+					value = parseInt( elem.css( "zIndex" ), 10 );
+					if ( !isNaN( value ) && value !== 0 ) {
+						return value;
+					}
+				}
+				elem = elem.parent();
+			}
+		}
+
+		return 0;
+	}
+});
+
+// $.ui.plugin is deprecated. Use $.widget() extensions instead.
+$.ui.plugin = {
+	add: function( module, option, set ) {
+		var i,
+			proto = $.ui[ module ].prototype;
+		for ( i in set ) {
+			proto.plugins[ i ] = proto.plugins[ i ] || [];
+			proto.plugins[ i ].push( [ option, set[ i ] ] );
+		}
+	},
+	call: function( instance, name, args, allowDisconnected ) {
+		var i,
+			set = instance.plugins[ name ];
+
+		if ( !set ) {
+			return;
+		}
+
+		if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode || instance.element[ 0 ].parentNode.nodeType === 11 ) ) {
+			return;
+		}
+
+		for ( i = 0; i < set.length; i++ ) {
+			if ( instance.options[ set[ i ][ 0 ] ] ) {
+				set[ i ][ 1 ].apply( instance.element, args );
+			}
+		}
+	}
+};
+
+
+/*!
+ * jQuery UI Widget 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/jQuery.widget/
+ */
+
+
+var widget_uuid = 0,
+	widget_slice = Array.prototype.slice;
+
+$.cleanData = (function( orig ) {
+	return function( elems ) {
+		var events, elem, i;
+		for ( i = 0; (elem = elems[i]) != null; i++ ) {
+			try {
+
+				// Only trigger remove when necessary to save time
+				events = $._data( elem, "events" );
+				if ( events && events.remove ) {
+					$( elem ).triggerHandler( "remove" );
+				}
+
+			// http://bugs.jquery.com/ticket/8235
+			} catch ( e ) {}
+		}
+		orig( elems );
+	};
+})( $.cleanData );
+
+$.widget = function( name, base, prototype ) {
+	var fullName, existingConstructor, constructor, basePrototype,
+		// proxiedPrototype allows the provided prototype to remain unmodified
+		// so that it can be used as a mixin for multiple widgets (#8876)
+		proxiedPrototype = {},
+		namespace = name.split( "." )[ 0 ];
+
+	name = name.split( "." )[ 1 ];
+	fullName = namespace + "-" + name;
+
+	if ( !prototype ) {
+		prototype = base;
+		base = $.Widget;
+	}
+
+	// create selector for plugin
+	$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
+		return !!$.data( elem, fullName );
+	};
+
+	$[ namespace ] = $[ namespace ] || {};
+	existingConstructor = $[ namespace ][ name ];
+	constructor = $[ namespace ][ name ] = function( options, element ) {
+		// allow instantiation without "new" keyword
+		if ( !this._createWidget ) {
+			return new constructor( options, element );
+		}
+
+		// allow instantiation without initializing for simple inheritance
+		// must use "new" keyword (the code above always passes args)
+		if ( arguments.length ) {
+			this._createWidget( options, element );
+		}
+	};
+	// extend with the existing constructor to carry over any static properties
+	$.extend( constructor, existingConstructor, {
+		version: prototype.version,
+		// copy the object used to create the prototype in case we need to
+		// redefine the widget later
+		_proto: $.extend( {}, prototype ),
+		// track widgets that inherit from this widget in case this widget is
+		// redefined after a widget inherits from it
+		_childConstructors: []
+	});
+
+	basePrototype = new base();
+	// we need to make the options hash a property directly on the new instance
+	// otherwise we'll modify the options hash on the prototype that we're
+	// inheriting from
+	basePrototype.options = $.widget.extend( {}, basePrototype.options );
+	$.each( prototype, function( prop, value ) {
+		if ( !$.isFunction( value ) ) {
+			proxiedPrototype[ prop ] = value;
+			return;
+		}
+		proxiedPrototype[ prop ] = (function() {
+			var _super = function() {
+					return base.prototype[ prop ].apply( this, arguments );
+				},
+				_superApply = function( args ) {
+					return base.prototype[ prop ].apply( this, args );
+				};
+			return function() {
+				var __super = this._super,
+					__superApply = this._superApply,
+					returnValue;
+
+				this._super = _super;
+				this._superApply = _superApply;
+
+				returnValue = value.apply( this, arguments );
+
+				this._super = __super;
+				this._superApply = __superApply;
+
+				return returnValue;
+			};
+		})();
+	});
+	constructor.prototype = $.widget.extend( basePrototype, {
+		// TODO: remove support for widgetEventPrefix
+		// always use the name + a colon as the prefix, e.g., draggable:start
+		// don't prefix for widgets that aren't DOM-based
+		widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
+	}, proxiedPrototype, {
+		constructor: constructor,
+		namespace: namespace,
+		widgetName: name,
+		widgetFullName: fullName
+	});
+
+	// If this widget is being redefined then we need to find all widgets that
+	// are inheriting from it and redefine all of them so that they inherit from
+	// the new version of this widget. We're essentially trying to replace one
+	// level in the prototype chain.
+	if ( existingConstructor ) {
+		$.each( existingConstructor._childConstructors, function( i, child ) {
+			var childPrototype = child.prototype;
+
+			// redefine the child widget using the same prototype that was
+			// originally used, but inherit from the new version of the base
+			$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
+		});
+		// remove the list of existing child constructors from the old constructor
+		// so the old child constructors can be garbage collected
+		delete existingConstructor._childConstructors;
+	} else {
+		base._childConstructors.push( constructor );
+	}
+
+	$.widget.bridge( name, constructor );
+
+	return constructor;
+};
+
+$.widget.extend = function( target ) {
+	var input = widget_slice.call( arguments, 1 ),
+		inputIndex = 0,
+		inputLength = input.length,
+		key,
+		value;
+	for ( ; inputIndex < inputLength; inputIndex++ ) {
+		for ( key in input[ inputIndex ] ) {
+			value = input[ inputIndex ][ key ];
+			if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
+				// Clone objects
+				if ( $.isPlainObject( value ) ) {
+					target[ key ] = $.isPlainObject( target[ key ] ) ?
+						$.widget.extend( {}, target[ key ], value ) :
+						// Don't extend strings, arrays, etc. with objects
+						$.widget.extend( {}, value );
+				// Copy everything else by reference
+				} else {
+					target[ key ] = value;
+				}
+			}
+		}
+	}
+	return target;
+};
+
+$.widget.bridge = function( name, object ) {
+	var fullName = object.prototype.widgetFullName || name;
+	$.fn[ name ] = function( options ) {
+		var isMethodCall = typeof options === "string",
+			args = widget_slice.call( arguments, 1 ),
+			returnValue = this;
+
+		if ( isMethodCall ) {
+			this.each(function() {
+				var methodValue,
+					instance = $.data( this, fullName );
+				if ( options === "instance" ) {
+					returnValue = instance;
+					return false;
+				}
+				if ( !instance ) {
+					return $.error( "cannot call methods on " + name + " prior to initialization; " +
+						"attempted to call method '" + options + "'" );
+				}
+				if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
+					return $.error( "no such method '" + options + "' for " + name + " widget instance" );
+				}
+				methodValue = instance[ options ].apply( instance, args );
+				if ( methodValue !== instance && methodValue !== undefined ) {
+					returnValue = methodValue && methodValue.jquery ?
+						returnValue.pushStack( methodValue.get() ) :
+						methodValue;
+					return false;
+				}
+			});
+		} else {
+
+			// Allow multiple hashes to be passed on init
+			if ( args.length ) {
+				options = $.widget.extend.apply( null, [ options ].concat(args) );
+			}
+
+			this.each(function() {
+				var instance = $.data( this, fullName );
+				if ( instance ) {
+					instance.option( options || {} );
+					if ( instance._init ) {
+						instance._init();
+					}
+				} else {
+					$.data( this, fullName, new object( options, this ) );
+				}
+			});
+		}
+
+		return returnValue;
+	};
+};
+
+$.Widget = function( /* options, element */ ) {};
+$.Widget._childConstructors = [];
+
+$.Widget.prototype = {
+	widgetName: "widget",
+	widgetEventPrefix: "",
+	defaultElement: "<div>",
+	options: {
+		disabled: false,
+
+		// callbacks
+		create: null
+	},
+	_createWidget: function( options, element ) {
+		element = $( element || this.defaultElement || this )[ 0 ];
+		this.element = $( element );
+		this.uuid = widget_uuid++;
+		this.eventNamespace = "." + this.widgetName + this.uuid;
+
+		this.bindings = $();
+		this.hoverable = $();
+		this.focusable = $();
+
+		if ( element !== this ) {
+			$.data( element, this.widgetFullName, this );
+			this._on( true, this.element, {
+				remove: function( event ) {
+					if ( event.target === element ) {
+						this.destroy();
+					}
+				}
+			});
+			this.document = $( element.style ?
+				// element within the document
+				element.ownerDocument :
+				// element is window or document
+				element.document || element );
+			this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
+		}
+
+		this.options = $.widget.extend( {},
+			this.options,
+			this._getCreateOptions(),
+			options );
+
+		this._create();
+		this._trigger( "create", null, this._getCreateEventData() );
+		this._init();
+	},
+	_getCreateOptions: $.noop,
+	_getCreateEventData: $.noop,
+	_create: $.noop,
+	_init: $.noop,
+
+	destroy: function() {
+		this._destroy();
+		// we can probably remove the unbind calls in 2.0
+		// all event bindings should go through this._on()
+		this.element
+			.unbind( this.eventNamespace )
+			.removeData( this.widgetFullName )
+			// support: jquery <1.6.3
+			// http://bugs.jquery.com/ticket/9413
+			.removeData( $.camelCase( this.widgetFullName ) );
+		this.widget()
+			.unbind( this.eventNamespace )
+			.removeAttr( "aria-disabled" )
+			.removeClass(
+				this.widgetFullName + "-disabled " +
+				"ui-state-disabled" );
+
+		// clean up events and states
+		this.bindings.unbind( this.eventNamespace );
+		this.hoverable.removeClass( "ui-state-hover" );
+		this.focusable.removeClass( "ui-state-focus" );
+	},
+	_destroy: $.noop,
+
+	widget: function() {
+		return this.element;
+	},
+
+	option: function( key, value ) {
+		var options = key,
+			parts,
+			curOption,
+			i;
+
+		if ( arguments.length === 0 ) {
+			// don't return a reference to the internal hash
+			return $.widget.extend( {}, this.options );
+		}
+
+		if ( typeof key === "string" ) {
+			// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
+			options = {};
+			parts = key.split( "." );
+			key = parts.shift();
+			if ( parts.length ) {
+				curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
+				for ( i = 0; i < parts.length - 1; i++ ) {
+					curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
+					curOption = curOption[ parts[ i ] ];
+				}
+				key = parts.pop();
+				if ( arguments.length === 1 ) {
+					return curOption[ key ] === undefined ? null : curOption[ key ];
+				}
+				curOption[ key ] = value;
+			} else {
+				if ( arguments.length === 1 ) {
+					return this.options[ key ] === undefined ? null : this.options[ key ];
+				}
+				options[ key ] = value;
+			}
+		}
+
+		this._setOptions( options );
+
+		return this;
+	},
+	_setOptions: function( options ) {
+		var key;
+
+		for ( key in options ) {
+			this._setOption( key, options[ key ] );
+		}
+
+		return this;
+	},
+	_setOption: function( key, value ) {
+		this.options[ key ] = value;
+
+		if ( key === "disabled" ) {
+			this.widget()
+				.toggleClass( this.widgetFullName + "-disabled", !!value );
+
+			// If the widget is becoming disabled, then nothing is interactive
+			if ( value ) {
+				this.hoverable.removeClass( "ui-state-hover" );
+				this.focusable.removeClass( "ui-state-focus" );
+			}
+		}
+
+		return this;
+	},
+
+	enable: function() {
+		return this._setOptions({ disabled: false });
+	},
+	disable: function() {
+		return this._setOptions({ disabled: true });
+	},
+
+	_on: function( suppressDisabledCheck, element, handlers ) {
+		var delegateElement,
+			instance = this;
+
+		// no suppressDisabledCheck flag, shuffle arguments
+		if ( typeof suppressDisabledCheck !== "boolean" ) {
+			handlers = element;
+			element = suppressDisabledCheck;
+			suppressDisabledCheck = false;
+		}
+
+		// no element argument, shuffle and use this.element
+		if ( !handlers ) {
+			handlers = element;
+			element = this.element;
+			delegateElement = this.widget();
+		} else {
+			element = delegateElement = $( element );
+			this.bindings = this.bindings.add( element );
+		}
+
+		$.each( handlers, function( event, handler ) {
+			function handlerProxy() {
+				// allow widgets to customize the disabled handling
+				// - disabled as an array instead of boolean
+				// - disabled class as method for disabling individual parts
+				if ( !suppressDisabledCheck &&
+						( instance.options.disabled === true ||
+							$( this ).hasClass( "ui-state-disabled" ) ) ) {
+					return;
+				}
+				return ( typeof handler === "string" ? instance[ handler ] : handler )
+					.apply( instance, arguments );
+			}
+
+			// copy the guid so direct unbinding works
+			if ( typeof handler !== "string" ) {
+				handlerProxy.guid = handler.guid =
+					handler.guid || handlerProxy.guid || $.guid++;
+			}
+
+			var match = event.match( /^([\w:-]*)\s*(.*)$/ ),
+				eventName = match[1] + instance.eventNamespace,
+				selector = match[2];
+			if ( selector ) {
+				delegateElement.delegate( selector, eventName, handlerProxy );
+			} else {
+				element.bind( eventName, handlerProxy );
+			}
+		});
+	},
+
+	_off: function( element, eventName ) {
+		eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) +
+			this.eventNamespace;
+		element.unbind( eventName ).undelegate( eventName );
+
+		// Clear the stack to avoid memory leaks (#10056)
+		this.bindings = $( this.bindings.not( element ).get() );
+		this.focusable = $( this.focusable.not( element ).get() );
+		this.hoverable = $( this.hoverable.not( element ).get() );
+	},
+
+	_delay: function( handler, delay ) {
+		function handlerProxy() {
+			return ( typeof handler === "string" ? instance[ handler ] : handler )
+				.apply( instance, arguments );
+		}
+		var instance = this;
+		return setTimeout( handlerProxy, delay || 0 );
+	},
+
+	_hoverable: function( element ) {
+		this.hoverable = this.hoverable.add( element );
+		this._on( element, {
+			mouseenter: function( event ) {
+				$( event.currentTarget ).addClass( "ui-state-hover" );
+			},
+			mouseleave: function( event ) {
+				$( event.currentTarget ).removeClass( "ui-state-hover" );
+			}
+		});
+	},
+
+	_focusable: function( element ) {
+		this.focusable = this.focusable.add( element );
+		this._on( element, {
+			focusin: function( event ) {
+				$( event.currentTarget ).addClass( "ui-state-focus" );
+			},
+			focusout: function( event ) {
+				$( event.currentTarget ).removeClass( "ui-state-focus" );
+			}
+		});
+	},
+
+	_trigger: function( type, event, data ) {
+		var prop, orig,
+			callback = this.options[ type ];
+
+		data = data || {};
+		event = $.Event( event );
+		event.type = ( type === this.widgetEventPrefix ?
+			type :
+			this.widgetEventPrefix + type ).toLowerCase();
+		// the original event may come from any element
+		// so we need to reset the target on the new event
+		event.target = this.element[ 0 ];
+
+		// copy original event properties over to the new event
+		orig = event.originalEvent;
+		if ( orig ) {
+			for ( prop in orig ) {
+				if ( !( prop in event ) ) {
+					event[ prop ] = orig[ prop ];
+				}
+			}
+		}
+
+		this.element.trigger( event, data );
+		return !( $.isFunction( callback ) &&
+			callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
+			event.isDefaultPrevented() );
+	}
+};
+
+$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
+	$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
+		if ( typeof options === "string" ) {
+			options = { effect: options };
+		}
+		var hasOptions,
+			effectName = !options ?
+				method :
+				options === true || typeof options === "number" ?
+					defaultEffect :
+					options.effect || defaultEffect;
+		options = options || {};
+		if ( typeof options === "number" ) {
+			options = { duration: options };
+		}
+		hasOptions = !$.isEmptyObject( options );
+		options.complete = callback;
+		if ( options.delay ) {
+			element.delay( options.delay );
+		}
+		if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
+			element[ method ]( options );
+		} else if ( effectName !== method && element[ effectName ] ) {
+			element[ effectName ]( options.duration, options.easing, callback );
+		} else {
+			element.queue(function( next ) {
+				$( this )[ method ]();
+				if ( callback ) {
+					callback.call( element[ 0 ] );
+				}
+				next();
+			});
+		}
+	};
+});
+
+var widget = $.widget;
+
+
+/*!
+ * jQuery UI Mouse 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/mouse/
+ */
+
+
+var mouseHandled = false;
+$( document ).mouseup( function() {
+	mouseHandled = false;
+});
+
+var mouse = $.widget("ui.mouse", {
+	version: "1.11.4",
+	options: {
+		cancel: "input,textarea,button,select,option",
+		distance: 1,
+		delay: 0
+	},
+	_mouseInit: function() {
+		var that = this;
+
+		this.element
+			.bind("mousedown." + this.widgetName, function(event) {
+				return that._mouseDown(event);
+			})
+			.bind("click." + this.widgetName, function(event) {
+				if (true === $.data(event.target, that.widgetName + ".preventClickEvent")) {
+					$.removeData(event.target, that.widgetName + ".preventClickEvent");
+					event.stopImmediatePropagation();
+					return false;
+				}
+			});
+
+		this.started = false;
+	},
+
+	// TODO: make sure destroying one instance of mouse doesn't mess with
+	// other instances of mouse
+	_mouseDestroy: function() {
+		this.element.unbind("." + this.widgetName);
+		if ( this._mouseMoveDelegate ) {
+			this.document
+				.unbind("mousemove." + this.widgetName, this._mouseMoveDelegate)
+				.unbind("mouseup." + this.widgetName, this._mouseUpDelegate);
+		}
+	},
+
+	_mouseDown: function(event) {
+		// don't let more than one widget handle mouseStart
+		if ( mouseHandled ) {
+			return;
+		}
+
+		this._mouseMoved = false;
+
+		// we may have missed mouseup (out of window)
+		(this._mouseStarted && this._mouseUp(event));
+
+		this._mouseDownEvent = event;
+
+		var that = this,
+			btnIsLeft = (event.which === 1),
+			// event.target.nodeName works around a bug in IE 8 with
+			// disabled inputs (#7620)
+			elIsCancel = (typeof this.options.cancel === "string" && event.target.nodeName ? $(event.target).closest(this.options.cancel).length : false);
+		if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
+			return true;
+		}
+
+		this.mouseDelayMet = !this.options.delay;
+		if (!this.mouseDelayMet) {
+			this._mouseDelayTimer = setTimeout(function() {
+				that.mouseDelayMet = true;
+			}, this.options.delay);
+		}
+
+		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+			this._mouseStarted = (this._mouseStart(event) !== false);
+			if (!this._mouseStarted) {
+				event.preventDefault();
+				return true;
+			}
+		}
+
+		// Click event may never have fired (Gecko & Opera)
+		if (true === $.data(event.target, this.widgetName + ".preventClickEvent")) {
+			$.removeData(event.target, this.widgetName + ".preventClickEvent");
+		}
+
+		// these delegates are required to keep context
+		this._mouseMoveDelegate = function(event) {
+			return that._mouseMove(event);
+		};
+		this._mouseUpDelegate = function(event) {
+			return that._mouseUp(event);
+		};
+
+		this.document
+			.bind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+			.bind( "mouseup." + this.widgetName, this._mouseUpDelegate );
+
+		event.preventDefault();
+
+		mouseHandled = true;
+		return true;
+	},
+
+	_mouseMove: function(event) {
+		// Only check for mouseups outside the document if you've moved inside the document
+		// at least once. This prevents the firing of mouseup in the case of IE<9, which will
+		// fire a mousemove event if content is placed under the cursor. See #7778
+		// Support: IE <9
+		if ( this._mouseMoved ) {
+			// IE mouseup check - mouseup happened when mouse was out of window
+			if ($.ui.ie && ( !document.documentMode || document.documentMode < 9 ) && !event.button) {
+				return this._mouseUp(event);
+
+			// Iframe mouseup check - mouseup occurred in another document
+			} else if ( !event.which ) {
+				return this._mouseUp( event );
+			}
+		}
+
+		if ( event.which || event.button ) {
+			this._mouseMoved = true;
+		}
+
+		if (this._mouseStarted) {
+			this._mouseDrag(event);
+			return event.preventDefault();
+		}
+
+		if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
+			this._mouseStarted =
+				(this._mouseStart(this._mouseDownEvent, event) !== false);
+			(this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
+		}
+
+		return !this._mouseStarted;
+	},
+
+	_mouseUp: function(event) {
+		this.document
+			.unbind( "mousemove." + this.widgetName, this._mouseMoveDelegate )
+			.unbind( "mouseup." + this.widgetName, this._mouseUpDelegate );
+
+		if (this._mouseStarted) {
+			this._mouseStarted = false;
+
+			if (event.target === this._mouseDownEvent.target) {
+				$.data(event.target, this.widgetName + ".preventClickEvent", true);
+			}
+
+			this._mouseStop(event);
+		}
+
+		mouseHandled = false;
+		return false;
+	},
+
+	_mouseDistanceMet: function(event) {
+		return (Math.max(
+				Math.abs(this._mouseDownEvent.pageX - event.pageX),
+				Math.abs(this._mouseDownEvent.pageY - event.pageY)
+			) >= this.options.distance
+		);
+	},
+
+	_mouseDelayMet: function(/* event */) {
+		return this.mouseDelayMet;
+	},
+
+	// These are placeholder methods, to be overriden by extending plugin
+	_mouseStart: function(/* event */) {},
+	_mouseDrag: function(/* event */) {},
+	_mouseStop: function(/* event */) {},
+	_mouseCapture: function(/* event */) { return true; }
+});
+
+
+/*!
+ * jQuery UI Position 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/position/
+ */
+
+(function() {
+
+$.ui = $.ui || {};
+
+var cachedScrollbarWidth, supportsOffsetFractions,
+	max = Math.max,
+	abs = Math.abs,
+	round = Math.round,
+	rhorizontal = /left|center|right/,
+	rvertical = /top|center|bottom/,
+	roffset = /[\+\-]\d+(\.[\d]+)?%?/,
+	rposition = /^\w+/,
+	rpercent = /%$/,
+	_position = $.fn.position;
+
+function getOffsets( offsets, width, height ) {
+	return [
+		parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
+		parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
+	];
+}
+
+function parseCss( element, property ) {
+	return parseInt( $.css( element, property ), 10 ) || 0;
+}
+
+function getDimensions( elem ) {
+	var raw = elem[0];
+	if ( raw.nodeType === 9 ) {
+		return {
+			width: elem.width(),
+			height: elem.height(),
+			offset: { top: 0, left: 0 }
+		};
+	}
+	if ( $.isWindow( raw ) ) {
+		return {
+			width: elem.width(),
+			height: elem.height(),
+			offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
+		};
+	}
+	if ( raw.preventDefault ) {
+		return {
+			width: 0,
+			height: 0,
+			offset: { top: raw.pageY, left: raw.pageX }
+		};
+	}
+	return {
+		width: elem.outerWidth(),
+		height: elem.outerHeight(),
+		offset: elem.offset()
+	};
+}
+
+$.position = {
+	scrollbarWidth: function() {
+		if ( cachedScrollbarWidth !== undefined ) {
+			return cachedScrollbarWidth;
+		}
+		var w1, w2,
+			div = $( "<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>" ),
+			innerDiv = div.children()[0];
+
+		$( "body" ).append( div );
+		w1 = innerDiv.offsetWidth;
+		div.css( "overflow", "scroll" );
+
+		w2 = innerDiv.offsetWidth;
+
+		if ( w1 === w2 ) {
+			w2 = div[0].clientWidth;
+		}
+
+		div.remove();
+
+		return (cachedScrollbarWidth = w1 - w2);
+	},
+	getScrollInfo: function( within ) {
+		var overflowX = within.isWindow || within.isDocument ? "" :
+				within.element.css( "overflow-x" ),
+			overflowY = within.isWindow || within.isDocument ? "" :
+				within.element.css( "overflow-y" ),
+			hasOverflowX = overflowX === "scroll" ||
+				( overflowX === "auto" && within.width < within.element[0].scrollWidth ),
+			hasOverflowY = overflowY === "scroll" ||
+				( overflowY === "auto" && within.height < within.element[0].scrollHeight );
+		return {
+			width: hasOverflowY ? $.position.scrollbarWidth() : 0,
+			height: hasOverflowX ? $.position.scrollbarWidth() : 0
+		};
+	},
+	getWithinInfo: function( element ) {
+		var withinElement = $( element || window ),
+			isWindow = $.isWindow( withinElement[0] ),
+			isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9;
+		return {
+			element: withinElement,
+			isWindow: isWindow,
+			isDocument: isDocument,
+			offset: withinElement.offset() || { left: 0, top: 0 },
+			scrollLeft: withinElement.scrollLeft(),
+			scrollTop: withinElement.scrollTop(),
+
+			// support: jQuery 1.6.x
+			// jQuery 1.6 doesn't support .outerWidth/Height() on documents or windows
+			width: isWindow || isDocument ? withinElement.width() : withinElement.outerWidth(),
+			height: isWindow || isDocument ? withinElement.height() : withinElement.outerHeight()
+		};
+	}
+};
+
+$.fn.position = function( options ) {
+	if ( !options || !options.of ) {
+		return _position.apply( this, arguments );
+	}
+
+	// make a copy, we don't want to modify arguments
+	options = $.extend( {}, options );
+
+	var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
+		target = $( options.of ),
+		within = $.position.getWithinInfo( options.within ),
+		scrollInfo = $.position.getScrollInfo( within ),
+		collision = ( options.collision || "flip" ).split( " " ),
+		offsets = {};
+
+	dimensions = getDimensions( target );
+	if ( target[0].preventDefault ) {
+		// force left top to allow flipping
+		options.at = "left top";
+	}
+	targetWidth = dimensions.width;
+	targetHeight = dimensions.height;
+	targetOffset = dimensions.offset;
+	// clone to reuse original targetOffset later
+	basePosition = $.extend( {}, targetOffset );
+
+	// force my and at to have valid horizontal and vertical positions
+	// if a value is missing or invalid, it will be converted to center
+	$.each( [ "my", "at" ], function() {
+		var pos = ( options[ this ] || "" ).split( " " ),
+			horizontalOffset,
+			verticalOffset;
+
+		if ( pos.length === 1) {
+			pos = rhorizontal.test( pos[ 0 ] ) ?
+				pos.concat( [ "center" ] ) :
+				rvertical.test( pos[ 0 ] ) ?
+					[ "center" ].concat( pos ) :
+					[ "center", "center" ];
+		}
+		pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
+		pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
+
+		// calculate offsets
+		horizontalOffset = roffset.exec( pos[ 0 ] );
+		verticalOffset = roffset.exec( pos[ 1 ] );
+		offsets[ this ] = [
+			horizontalOffset ? horizontalOffset[ 0 ] : 0,
+			verticalOffset ? verticalOffset[ 0 ] : 0
+		];
+
+		// reduce to just the positions without the offsets
+		options[ this ] = [
+			rposition.exec( pos[ 0 ] )[ 0 ],
+			rposition.exec( pos[ 1 ] )[ 0 ]
+		];
+	});
+
+	// normalize collision option
+	if ( collision.length === 1 ) {
+		collision[ 1 ] = collision[ 0 ];
+	}
+
+	if ( options.at[ 0 ] === "right" ) {
+		basePosition.left += targetWidth;
+	} else if ( options.at[ 0 ] === "center" ) {
+		basePosition.left += targetWidth / 2;
+	}
+
+	if ( options.at[ 1 ] === "bottom" ) {
+		basePosition.top += targetHeight;
+	} else if ( options.at[ 1 ] === "center" ) {
+		basePosition.top += targetHeight / 2;
+	}
+
+	atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
+	basePosition.left += atOffset[ 0 ];
+	basePosition.top += atOffset[ 1 ];
+
+	return this.each(function() {
+		var collisionPosition, using,
+			elem = $( this ),
+			elemWidth = elem.outerWidth(),
+			elemHeight = elem.outerHeight(),
+			marginLeft = parseCss( this, "marginLeft" ),
+			marginTop = parseCss( this, "marginTop" ),
+			collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + scrollInfo.width,
+			collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + scrollInfo.height,
+			position = $.extend( {}, basePosition ),
+			myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
+
+		if ( options.my[ 0 ] === "right" ) {
+			position.left -= elemWidth;
+		} else if ( options.my[ 0 ] === "center" ) {
+			position.left -= elemWidth / 2;
+		}
+
+		if ( options.my[ 1 ] === "bottom" ) {
+			position.top -= elemHeight;
+		} else if ( options.my[ 1 ] === "center" ) {
+			position.top -= elemHeight / 2;
+		}
+
+		position.left += myOffset[ 0 ];
+		position.top += myOffset[ 1 ];
+
+		// if the browser doesn't support fractions, then round for consistent results
+		if ( !supportsOffsetFractions ) {
+			position.left = round( position.left );
+			position.top = round( position.top );
+		}
+
+		collisionPosition = {
+			marginLeft: marginLeft,
+			marginTop: marginTop
+		};
+
+		$.each( [ "left", "top" ], function( i, dir ) {
+			if ( $.ui.position[ collision[ i ] ] ) {
+				$.ui.position[ collision[ i ] ][ dir ]( position, {
+					targetWidth: targetWidth,
+					targetHeight: targetHeight,
+					elemWidth: elemWidth,
+					elemHeight: elemHeight,
+					collisionPosition: collisionPosition,
+					collisionWidth: collisionWidth,
+					collisionHeight: collisionHeight,
+					offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
+					my: options.my,
+					at: options.at,
+					within: within,
+					elem: elem
+				});
+			}
+		});
+
+		if ( options.using ) {
+			// adds feedback as second argument to using callback, if present
+			using = function( props ) {
+				var left = targetOffset.left - position.left,
+					right = left + targetWidth - elemWidth,
+					top = targetOffset.top - position.top,
+					bottom = top + targetHeight - elemHeight,
+					feedback = {
+						target: {
+							element: target,
+							left: targetOffset.left,
+							top: targetOffset.top,
+							width: targetWidth,
+							height: targetHeight
+						},
+						element: {
+							element: elem,
+							left: position.left,
+							top: position.top,
+							width: elemWidth,
+							height: elemHeight
+						},
+						horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
+						vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
+					};
+				if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
+					feedback.horizontal = "center";
+				}
+				if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
+					feedback.vertical = "middle";
+				}
+				if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
+					feedback.important = "horizontal";
+				} else {
+					feedback.important = "vertical";
+				}
+				options.using.call( this, props, feedback );
+			};
+		}
+
+		elem.offset( $.extend( position, { using: using } ) );
+	});
+};
+
+$.ui.position = {
+	fit: {
+		left: function( position, data ) {
+			var within = data.within,
+				withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
+				outerWidth = within.width,
+				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+				overLeft = withinOffset - collisionPosLeft,
+				overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
+				newOverRight;
+
+			// element is wider than within
+			if ( data.collisionWidth > outerWidth ) {
+				// element is initially over the left side of within
+				if ( overLeft > 0 && overRight <= 0 ) {
+					newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - withinOffset;
+					position.left += overLeft - newOverRight;
+				// element is initially over right side of within
+				} else if ( overRight > 0 && overLeft <= 0 ) {
+					position.left = withinOffset;
+				// element is initially over both left and right sides of within
+				} else {
+					if ( overLeft > overRight ) {
+						position.left = withinOffset + outerWidth - data.collisionWidth;
+					} else {
+						position.left = withinOffset;
+					}
+				}
+			// too far left -> align with left edge
+			} else if ( overLeft > 0 ) {
+				position.left += overLeft;
+			// too far right -> align with right edge
+			} else if ( overRight > 0 ) {
+				position.left -= overRight;
+			// adjust based on position and margin
+			} else {
+				position.left = max( position.left - collisionPosLeft, position.left );
+			}
+		},
+		top: function( position, data ) {
+			var within = data.within,
+				withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
+				outerHeight = data.within.height,
+				collisionPosTop = position.top - data.collisionPosition.marginTop,
+				overTop = withinOffset - collisionPosTop,
+				overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
+				newOverBottom;
+
+			// element is taller than within
+			if ( data.collisionHeight > outerHeight ) {
+				// element is initially over the top of within
+				if ( overTop > 0 && overBottom <= 0 ) {
+					newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - withinOffset;
+					position.top += overTop - newOverBottom;
+				// element is initially over bottom of within
+				} else if ( overBottom > 0 && overTop <= 0 ) {
+					position.top = withinOffset;
+				// element is initially over both top and bottom of within
+				} else {
+					if ( overTop > overBottom ) {
+						position.top = withinOffset + outerHeight - data.collisionHeight;
+					} else {
+						position.top = withinOffset;
+					}
+				}
+			// too far up -> align with top
+			} else if ( overTop > 0 ) {
+				position.top += overTop;
+			// too far down -> align with bottom edge
+			} else if ( overBottom > 0 ) {
+				position.top -= overBottom;
+			// adjust based on position and margin
+			} else {
+				position.top = max( position.top - collisionPosTop, position.top );
+			}
+		}
+	},
+	flip: {
+		left: function( position, data ) {
+			var within = data.within,
+				withinOffset = within.offset.left + within.scrollLeft,
+				outerWidth = within.width,
+				offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
+				collisionPosLeft = position.left - data.collisionPosition.marginLeft,
+				overLeft = collisionPosLeft - offsetLeft,
+				overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
+				myOffset = data.my[ 0 ] === "left" ?
+					-data.elemWidth :
+					data.my[ 0 ] === "right" ?
+						data.elemWidth :
+						0,
+				atOffset = data.at[ 0 ] === "left" ?
+					data.targetWidth :
+					data.at[ 0 ] === "right" ?
+						-data.targetWidth :
+						0,
+				offset = -2 * data.offset[ 0 ],
+				newOverRight,
+				newOverLeft;
+
+			if ( overLeft < 0 ) {
+				newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - outerWidth - withinOffset;
+				if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
+					position.left += myOffset + atOffset + offset;
+				}
+			} else if ( overRight > 0 ) {
+				newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + atOffset + offset - offsetLeft;
+				if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
+					position.left += myOffset + atOffset + offset;
+				}
+			}
+		},
+		top: function( position, data ) {
+			var within = data.within,
+				withinOffset = within.offset.top + within.scrollTop,
+				outerHeight = within.height,
+				offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
+				collisionPosTop = position.top - data.collisionPosition.marginTop,
+				overTop = collisionPosTop - offsetTop,
+				overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
+				top = data.my[ 1 ] === "top",
+				myOffset = top ?
+					-data.elemHeight :
+					data.my[ 1 ] === "bottom" ?
+						data.elemHeight :
+						0,
+				atOffset = data.at[ 1 ] === "top" ?
+					data.targetHeight :
+					data.at[ 1 ] === "bottom" ?
+						-data.targetHeight :
+						0,
+				offset = -2 * data.offset[ 1 ],
+				newOverTop,
+				newOverBottom;
+			if ( overTop < 0 ) {
+				newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - outerHeight - withinOffset;
+				if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {
+					position.top += myOffset + atOffset + offset;
+				}
+			} else if ( overBottom > 0 ) {
+				newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + offset - offsetTop;
+				if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {
+					position.top += myOffset + atOffset + offset;
+				}
+			}
+		}
+	},
+	flipfit: {
+		left: function() {
+			$.ui.position.flip.left.apply( this, arguments );
+			$.ui.position.fit.left.apply( this, arguments );
+		},
+		top: function() {
+			$.ui.position.flip.top.apply( this, arguments );
+			$.ui.position.fit.top.apply( this, arguments );
+		}
+	}
+};
+
+// fraction support test
+(function() {
+	var testElement, testElementParent, testElementStyle, offsetLeft, i,
+		body = document.getElementsByTagName( "body" )[ 0 ],
+		div = document.createElement( "div" );
+
+	//Create a "fake body" for testing based on method used in jQuery.support
+	testElement = document.createElement( body ? "div" : "body" );
+	testElementStyle = {
+		visibility: "hidden",
+		width: 0,
+		height: 0,
+		border: 0,
+		margin: 0,
+		background: "none"
+	};
+	if ( body ) {
+		$.extend( testElementStyle, {
+			position: "absolute",
+			left: "-1000px",
+			top: "-1000px"
+		});
+	}
+	for ( i in testElementStyle ) {
+		testElement.style[ i ] = testElementStyle[ i ];
+	}
+	testElement.appendChild( div );
+	testElementParent = body || document.documentElement;
+	testElementParent.insertBefore( testElement, testElementParent.firstChild );
+
+	div.style.cssText = "position: absolute; left: 10.7432222px;";
+
+	offsetLeft = $( div ).offset().left;
+	supportsOffsetFractions = offsetLeft > 10 && offsetLeft < 11;
+
+	testElement.innerHTML = "";
+	testElementParent.removeChild( testElement );
+})();
+
+})();
+
+var position = $.ui.position;
+
+
+/*!
+ * jQuery UI Accordion 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/accordion/
+ */
+
+
+var accordion = $.widget( "ui.accordion", {
+	version: "1.11.4",
+	options: {
+		active: 0,
+		animate: {},
+		collapsible: false,
+		event: "click",
+		header: "> li > :first-child,> :not(li):even",
+		heightStyle: "auto",
+		icons: {
+			activeHeader: "ui-icon-triangle-1-s",
+			header: "ui-icon-triangle-1-e"
+		},
+
+		// callbacks
+		activate: null,
+		beforeActivate: null
+	},
+
+	hideProps: {
+		borderTopWidth: "hide",
+		borderBottomWidth: "hide",
+		paddingTop: "hide",
+		paddingBottom: "hide",
+		height: "hide"
+	},
+
+	showProps: {
+		borderTopWidth: "show",
+		borderBottomWidth: "show",
+		paddingTop: "show",
+		paddingBottom: "show",
+		height: "show"
+	},
+
+	_create: function() {
+		var options = this.options;
+		this.prevShow = this.prevHide = $();
+		this.element.addClass( "ui-accordion ui-widget ui-helper-reset" )
+			// ARIA
+			.attr( "role", "tablist" );
+
+		// don't allow collapsible: false and active: false / null
+		if ( !options.collapsible && (options.active === false || options.active == null) ) {
+			options.active = 0;
+		}
+
+		this._processPanels();
+		// handle negative values
+		if ( options.active < 0 ) {
+			options.active += this.headers.length;
+		}
+		this._refresh();
+	},
+
+	_getCreateEventData: function() {
+		return {
+			header: this.active,
+			panel: !this.active.length ? $() : this.active.next()
+		};
+	},
+
+	_createIcons: function() {
+		var icons = this.options.icons;
+		if ( icons ) {
+			$( "<span>" )
+				.addClass( "ui-accordion-header-icon ui-icon " + icons.header )
+				.prependTo( this.headers );
+			this.active.children( ".ui-accordion-header-icon" )
+				.removeClass( icons.header )
+				.addClass( icons.activeHeader );
+			this.headers.addClass( "ui-accordion-icons" );
+		}
+	},
+
+	_destroyIcons: function() {
+		this.headers
+			.removeClass( "ui-accordion-icons" )
+			.children( ".ui-accordion-header-icon" )
+				.remove();
+	},
+
+	_destroy: function() {
+		var contents;
+
+		// clean up main element
+		this.element
+			.removeClass( "ui-accordion ui-widget ui-helper-reset" )
+			.removeAttr( "role" );
+
+		// clean up headers
+		this.headers
+			.removeClass( "ui-accordion-header ui-accordion-header-active ui-state-default " +
+				"ui-corner-all ui-state-active ui-state-disabled ui-corner-top" )
+			.removeAttr( "role" )
+			.removeAttr( "aria-expanded" )
+			.removeAttr( "aria-selected" )
+			.removeAttr( "aria-controls" )
+			.removeAttr( "tabIndex" )
+			.removeUniqueId();
+
+		this._destroyIcons();
+
+		// clean up content panels
+		contents = this.headers.next()
+			.removeClass( "ui-helper-reset ui-widget-content ui-corner-bottom " +
+				"ui-accordion-content ui-accordion-content-active ui-state-disabled" )
+			.css( "display", "" )
+			.removeAttr( "role" )
+			.removeAttr( "aria-hidden" )
+			.removeAttr( "aria-labelledby" )
+			.removeUniqueId();
+
+		if ( this.options.heightStyle !== "content" ) {
+			contents.css( "height", "" );
+		}
+	},
+
+	_setOption: function( key, value ) {
+		if ( key === "active" ) {
+			// _activate() will handle invalid values and update this.options
+			this._activate( value );
+			return;
+		}
+
+		if ( key === "event" ) {
+			if ( this.options.event ) {
+				this._off( this.headers, this.options.event );
+			}
+			this._setupEvents( value );
+		}
+
+		this._super( key, value );
+
+		// setting collapsible: false while collapsed; open first panel
+		if ( key === "collapsible" && !value && this.options.active === false ) {
+			this._activate( 0 );
+		}
+
+		if ( key === "icons" ) {
+			this._destroyIcons();
+			if ( value ) {
+				this._createIcons();
+			}
+		}
+
+		// #5332 - opacity doesn't cascade to positioned elements in IE
+		// so we need to add the disabled class to the headers and panels
+		if ( key === "disabled" ) {
+			this.element
+				.toggleClass( "ui-state-disabled", !!value )
+				.attr( "aria-disabled", value );
+			this.headers.add( this.headers.next() )
+				.toggleClass( "ui-state-disabled", !!value );
+		}
+	},
+
+	_keydown: function( event ) {
+		if ( event.altKey || event.ctrlKey ) {
+			return;
+		}
+
+		var keyCode = $.ui.keyCode,
+			length = this.headers.length,
+			currentIndex = this.headers.index( event.target ),
+			toFocus = false;
+
+		switch ( event.keyCode ) {
+			case keyCode.RIGHT:
+			case keyCode.DOWN:
+				toFocus = this.headers[ ( currentIndex + 1 ) % length ];
+				break;
+			case keyCode.LEFT:
+			case keyCode.UP:
+				toFocus = this.headers[ ( currentIndex - 1 + length ) % length ];
+				break;
+			case keyCode.SPACE:
+			case keyCode.ENTER:
+				this._eventHandler( event );
+				break;
+			case keyCode.HOME:
+				toFocus = this.headers[ 0 ];
+				break;
+			case keyCode.END:
+				toFocus = this.headers[ length - 1 ];
+				break;
+		}
+
+		if ( toFocus ) {
+			$( event.target ).attr( "tabIndex", -1 );
+			$( toFocus ).attr( "tabIndex", 0 );
+			toFocus.focus();
+			event.preventDefault();
+		}
+	},
+
+	_panelKeyDown: function( event ) {
+		if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {
+			$( event.currentTarget ).prev().focus();
+		}
+	},
+
+	refresh: function() {
+		var options = this.options;
+		this._processPanels();
+
+		// was collapsed or no panel
+		if ( ( options.active === false && options.collapsible === true ) || !this.headers.length ) {
+			options.active = false;
+			this.active = $();
+		// active false only when collapsible is true
+		} else if ( options.active === false ) {
+			this._activate( 0 );
+		// was active, but active panel is gone
+		} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+			// all remaining panel are disabled
+			if ( this.headers.length === this.headers.find(".ui-state-disabled").length ) {
+				options.active = false;
+				this.active = $();
+			// activate previous panel
+			} else {
+				this._activate( Math.max( 0, options.active - 1 ) );
+			}
+		// was active, active panel still exists
+		} else {
+			// make sure active index is correct
+			options.active = this.headers.index( this.active );
+		}
+
+		this._destroyIcons();
+
+		this._refresh();
+	},
+
+	_processPanels: function() {
+		var prevHeaders = this.headers,
+			prevPanels = this.panels;
+
+		this.headers = this.element.find( this.options.header )
+			.addClass( "ui-accordion-header ui-state-default ui-corner-all" );
+
+		this.panels = this.headers.next()
+			.addClass( "ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom" )
+			.filter( ":not(.ui-accordion-content-active)" )
+			.hide();
+
+		// Avoid memory leaks (#10056)
+		if ( prevPanels ) {
+			this._off( prevHeaders.not( this.headers ) );
+			this._off( prevPanels.not( this.panels ) );
+		}
+	},
+
+	_refresh: function() {
+		var maxHeight,
+			options = this.options,
+			heightStyle = options.heightStyle,
+			parent = this.element.parent();
+
+		this.active = this._findActive( options.active )
+			.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" )
+			.removeClass( "ui-corner-all" );
+		this.active.next()
+			.addClass( "ui-accordion-content-active" )
+			.show();
+
+		this.headers
+			.attr( "role", "tab" )
+			.each(function() {
+				var header = $( this ),
+					headerId = header.uniqueId().attr( "id" ),
+					panel = header.next(),
+					panelId = panel.uniqueId().attr( "id" );
+				header.attr( "aria-controls", panelId );
+				panel.attr( "aria-labelledby", headerId );
+			})
+			.next()
+				.attr( "role", "tabpanel" );
+
+		this.headers
+			.not( this.active )
+			.attr({
+				"aria-selected": "false",
+				"aria-expanded": "false",
+				tabIndex: -1
+			})
+			.next()
+				.attr({
+					"aria-hidden": "true"
+				})
+				.hide();
+
+		// make sure at least one header is in the tab order
+		if ( !this.active.length ) {
+			this.headers.eq( 0 ).attr( "tabIndex", 0 );
+		} else {
+			this.active.attr({
+				"aria-selected": "true",
+				"aria-expanded": "true",
+				tabIndex: 0
+			})
+			.next()
+				.attr({
+					"aria-hidden": "false"
+				});
+		}
+
+		this._createIcons();
+
+		this._setupEvents( options.event );
+
+		if ( heightStyle === "fill" ) {
+			maxHeight = parent.height();
+			this.element.siblings( ":visible" ).each(function() {
+				var elem = $( this ),
+					position = elem.css( "position" );
+
+				if ( position === "absolute" || position === "fixed" ) {
+					return;
+				}
+				maxHeight -= elem.outerHeight( true );
+			});
+
+			this.headers.each(function() {
+				maxHeight -= $( this ).outerHeight( true );
+			});
+
+			this.headers.next()
+				.each(function() {
+					$( this ).height( Math.max( 0, maxHeight -
+						$( this ).innerHeight() + $( this ).height() ) );
+				})
+				.css( "overflow", "auto" );
+		} else if ( heightStyle === "auto" ) {
+			maxHeight = 0;
+			this.headers.next()
+				.each(function() {
+					maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() );
+				})
+				.height( maxHeight );
+		}
+	},
+
+	_activate: function( index ) {
+		var active = this._findActive( index )[ 0 ];
+
+		// trying to activate the already active panel
+		if ( active === this.active[ 0 ] ) {
+			return;
+		}
+
+		// trying to collapse, simulate a click on the currently active header
+		active = active || this.active[ 0 ];
+
+		this._eventHandler({
+			target: active,
+			currentTarget: active,
+			preventDefault: $.noop
+		});
+	},
+
+	_findActive: function( selector ) {
+		return typeof selector === "number" ? this.headers.eq( selector ) : $();
+	},
+
+	_setupEvents: function( event ) {
+		var events = {
+			keydown: "_keydown"
+		};
+		if ( event ) {
+			$.each( event.split( " " ), function( index, eventName ) {
+				events[ eventName ] = "_eventHandler";
+			});
+		}
+
+		this._off( this.headers.add( this.headers.next() ) );
+		this._on( this.headers, events );
+		this._on( this.headers.next(), { keydown: "_panelKeyDown" });
+		this._hoverable( this.headers );
+		this._focusable( this.headers );
+	},
+
+	_eventHandler: function( event ) {
+		var options = this.options,
+			active = this.active,
+			clicked = $( event.currentTarget ),
+			clickedIsActive = clicked[ 0 ] === active[ 0 ],
+			collapsing = clickedIsActive && options.collapsible,
+			toShow = collapsing ? $() : clicked.next(),
+			toHide = active.next(),
+			eventData = {
+				oldHeader: active,
+				oldPanel: toHide,
+				newHeader: collapsing ? $() : clicked,
+				newPanel: toShow
+			};
+
+		event.preventDefault();
+
+		if (
+				// click on active header, but not collapsible
+				( clickedIsActive && !options.collapsible ) ||
+				// allow canceling activation
+				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+			return;
+		}
+
+		options.active = collapsing ? false : this.headers.index( clicked );
+
+		// when the call to ._toggle() comes after the class changes
+		// it causes a very odd bug in IE 8 (see #6720)
+		this.active = clickedIsActive ? $() : clicked;
+		this._toggle( eventData );
+
+		// switch classes
+		// corner classes on the previously active header stay after the animation
+		active.removeClass( "ui-accordion-header-active ui-state-active" );
+		if ( options.icons ) {
+			active.children( ".ui-accordion-header-icon" )
+				.removeClass( options.icons.activeHeader )
+				.addClass( options.icons.header );
+		}
+
+		if ( !clickedIsActive ) {
+			clicked
+				.removeClass( "ui-corner-all" )
+				.addClass( "ui-accordion-header-active ui-state-active ui-corner-top" );
+			if ( options.icons ) {
+				clicked.children( ".ui-accordion-header-icon" )
+					.removeClass( options.icons.header )
+					.addClass( options.icons.activeHeader );
+			}
+
+			clicked
+				.next()
+				.addClass( "ui-accordion-content-active" );
+		}
+	},
+
+	_toggle: function( data ) {
+		var toShow = data.newPanel,
+			toHide = this.prevShow.length ? this.prevShow : data.oldPanel;
+
+		// handle activating a panel during the animation for another activation
+		this.prevShow.add( this.prevHide ).stop( true, true );
+		this.prevShow = toShow;
+		this.prevHide = toHide;
+
+		if ( this.options.animate ) {
+			this._animate( toShow, toHide, data );
+		} else {
+			toHide.hide();
+			toShow.show();
+			this._toggleComplete( data );
+		}
+
+		toHide.attr({
+			"aria-hidden": "true"
+		});
+		toHide.prev().attr({
+			"aria-selected": "false",
+			"aria-expanded": "false"
+		});
+		// if we're switching panels, remove the old header from the tab order
+		// if we're opening from collapsed state, remove the previous header from the tab order
+		// if we're collapsing, then keep the collapsing header in the tab order
+		if ( toShow.length && toHide.length ) {
+			toHide.prev().attr({
+				"tabIndex": -1,
+				"aria-expanded": "false"
+			});
+		} else if ( toShow.length ) {
+			this.headers.filter(function() {
+				return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0;
+			})
+			.attr( "tabIndex", -1 );
+		}
+
+		toShow
+			.attr( "aria-hidden", "false" )
+			.prev()
+				.attr({
+					"aria-selected": "true",
+					"aria-expanded": "true",
+					tabIndex: 0
+				});
+	},
+
+	_animate: function( toShow, toHide, data ) {
+		var total, easing, duration,
+			that = this,
+			adjust = 0,
+			boxSizing = toShow.css( "box-sizing" ),
+			down = toShow.length &&
+				( !toHide.length || ( toShow.index() < toHide.index() ) ),
+			animate = this.options.animate || {},
+			options = down && animate.down || animate,
+			complete = function() {
+				that._toggleComplete( data );
+			};
+
+		if ( typeof options === "number" ) {
+			duration = options;
+		}
+		if ( typeof options === "string" ) {
+			easing = options;
+		}
+		// fall back from options to animation in case of partial down settings
+		easing = easing || options.easing || animate.easing;
+		duration = duration || options.duration || animate.duration;
+
+		if ( !toHide.length ) {
+			return toShow.animate( this.showProps, duration, easing, complete );
+		}
+		if ( !toShow.length ) {
+			return toHide.animate( this.hideProps, duration, easing, complete );
+		}
+
+		total = toShow.show().outerHeight();
+		toHide.animate( this.hideProps, {
+			duration: duration,
+			easing: easing,
+			step: function( now, fx ) {
+				fx.now = Math.round( now );
+			}
+		});
+		toShow
+			.hide()
+			.animate( this.showProps, {
+				duration: duration,
+				easing: easing,
+				complete: complete,
+				step: function( now, fx ) {
+					fx.now = Math.round( now );
+					if ( fx.prop !== "height" ) {
+						if ( boxSizing === "content-box" ) {
+							adjust += fx.now;
+						}
+					} else if ( that.options.heightStyle !== "content" ) {
+						fx.now = Math.round( total - toHide.outerHeight() - adjust );
+						adjust = 0;
+					}
+				}
+			});
+	},
+
+	_toggleComplete: function( data ) {
+		var toHide = data.oldPanel;
+
+		toHide
+			.removeClass( "ui-accordion-content-active" )
+			.prev()
+				.removeClass( "ui-corner-top" )
+				.addClass( "ui-corner-all" );
+
+		// Work around for rendering bug in IE (#5421)
+		if ( toHide.length ) {
+			toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;
+		}
+		this._trigger( "activate", null, data );
+	}
+});
+
+
+/*!
+ * jQuery UI Menu 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/menu/
+ */
+
+
+var menu = $.widget( "ui.menu", {
+	version: "1.11.4",
+	defaultElement: "<ul>",
+	delay: 300,
+	options: {
+		icons: {
+			submenu: "ui-icon-carat-1-e"
+		},
+		items: "> *",
+		menus: "ul",
+		position: {
+			my: "left-1 top",
+			at: "right top"
+		},
+		role: "menu",
+
+		// callbacks
+		blur: null,
+		focus: null,
+		select: null
+	},
+
+	_create: function() {
+		this.activeMenu = this.element;
+
+		// Flag used to prevent firing of the click handler
+		// as the event bubbles up through nested menus
+		this.mouseHandled = false;
+		this.element
+			.uniqueId()
+			.addClass( "ui-menu ui-widget ui-widget-content" )
+			.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length )
+			.attr({
+				role: this.options.role,
+				tabIndex: 0
+			});
+
+		if ( this.options.disabled ) {
+			this.element
+				.addClass( "ui-state-disabled" )
+				.attr( "aria-disabled", "true" );
+		}
+
+		this._on({
+			// Prevent focus from sticking to links inside menu after clicking
+			// them (focus should always stay on UL during navigation).
+			"mousedown .ui-menu-item": function( event ) {
+				event.preventDefault();
+			},
+			"click .ui-menu-item": function( event ) {
+				var target = $( event.target );
+				if ( !this.mouseHandled && target.not( ".ui-state-disabled" ).length ) {
+					this.select( event );
+
+					// Only set the mouseHandled flag if the event will bubble, see #9469.
+					if ( !event.isPropagationStopped() ) {
+						this.mouseHandled = true;
+					}
+
+					// Open submenu on click
+					if ( target.has( ".ui-menu" ).length ) {
+						this.expand( event );
+					} else if ( !this.element.is( ":focus" ) && $( this.document[ 0 ].activeElement ).closest( ".ui-menu" ).length ) {
+
+						// Redirect focus to the menu
+						this.element.trigger( "focus", [ true ] );
+
+						// If the active item is on the top level, let it stay active.
+						// Otherwise, blur the active item since it is no longer visible.
+						if ( this.active && this.active.parents( ".ui-menu" ).length === 1 ) {
+							clearTimeout( this.timer );
+						}
+					}
+				}
+			},
+			"mouseenter .ui-menu-item": function( event ) {
+				// Ignore mouse events while typeahead is active, see #10458.
+				// Prevents focusing the wrong item when typeahead causes a scroll while the mouse
+				// is over an item in the menu
+				if ( this.previousFilter ) {
+					return;
+				}
+				var target = $( event.currentTarget );
+				// Remove ui-state-active class from siblings of the newly focused menu item
+				// to avoid a jump caused by adjacent elements both having a class with a border
+				target.siblings( ".ui-state-active" ).removeClass( "ui-state-active" );
+				this.focus( event, target );
+			},
+			mouseleave: "collapseAll",
+			"mouseleave .ui-menu": "collapseAll",
+			focus: function( event, keepActiveItem ) {
+				// If there's already an active item, keep it active
+				// If not, activate the first item
+				var item = this.active || this.element.find( this.options.items ).eq( 0 );
+
+				if ( !keepActiveItem ) {
+					this.focus( event, item );
+				}
+			},
+			blur: function( event ) {
+				this._delay(function() {
+					if ( !$.contains( this.element[0], this.document[0].activeElement ) ) {
+						this.collapseAll( event );
+					}
+				});
+			},
+			keydown: "_keydown"
+		});
+
+		this.refresh();
+
+		// Clicks outside of a menu collapse any open menus
+		this._on( this.document, {
+			click: function( event ) {
+				if ( this._closeOnDocumentClick( event ) ) {
+					this.collapseAll( event );
+				}
+
+				// Reset the mouseHandled flag
+				this.mouseHandled = false;
+			}
+		});
+	},
+
+	_destroy: function() {
+		// Destroy (sub)menus
+		this.element
+			.removeAttr( "aria-activedescendant" )
+			.find( ".ui-menu" ).addBack()
+				.removeClass( "ui-menu ui-widget ui-widget-content ui-menu-icons ui-front" )
+				.removeAttr( "role" )
+				.removeAttr( "tabIndex" )
+				.removeAttr( "aria-labelledby" )
+				.removeAttr( "aria-expanded" )
+				.removeAttr( "aria-hidden" )
+				.removeAttr( "aria-disabled" )
+				.removeUniqueId()
+				.show();
+
+		// Destroy menu items
+		this.element.find( ".ui-menu-item" )
+			.removeClass( "ui-menu-item" )
+			.removeAttr( "role" )
+			.removeAttr( "aria-disabled" )
+			.removeUniqueId()
+			.removeClass( "ui-state-hover" )
+			.removeAttr( "tabIndex" )
+			.removeAttr( "role" )
+			.removeAttr( "aria-haspopup" )
+			.children().each( function() {
+				var elem = $( this );
+				if ( elem.data( "ui-menu-submenu-carat" ) ) {
+					elem.remove();
+				}
+			});
+
+		// Destroy menu dividers
+		this.element.find( ".ui-menu-divider" ).removeClass( "ui-menu-divider ui-widget-content" );
+	},
+
+	_keydown: function( event ) {
+		var match, prev, character, skip,
+			preventDefault = true;
+
+		switch ( event.keyCode ) {
+		case $.ui.keyCode.PAGE_UP:
+			this.previousPage( event );
+			break;
+		case $.ui.keyCode.PAGE_DOWN:
+			this.nextPage( event );
+			break;
+		case $.ui.keyCode.HOME:
+			this._move( "first", "first", event );
+			break;
+		case $.ui.keyCode.END:
+			this._move( "last", "last", event );
+			break;
+		case $.ui.keyCode.UP:
+			this.previous( event );
+			break;
+		case $.ui.keyCode.DOWN:
+			this.next( event );
+			break;
+		case $.ui.keyCode.LEFT:
+			this.collapse( event );
+			break;
+		case $.ui.keyCode.RIGHT:
+			if ( this.active && !this.active.is( ".ui-state-disabled" ) ) {
+				this.expand( event );
+			}
+			break;
+		case $.ui.keyCode.ENTER:
+		case $.ui.keyCode.SPACE:
+			this._activate( event );
+			break;
+		case $.ui.keyCode.ESCAPE:
+			this.collapse( event );
+			break;
+		default:
+			preventDefault = false;
+			prev = this.previousFilter || "";
+			character = String.fromCharCode( event.keyCode );
+			skip = false;
+
+			clearTimeout( this.filterTimer );
+
+			if ( character === prev ) {
+				skip = true;
+			} else {
+				character = prev + character;
+			}
+
+			match = this._filterMenuItems( character );
+			match = skip && match.index( this.active.next() ) !== -1 ?
+				this.active.nextAll( ".ui-menu-item" ) :
+				match;
+
+			// If no matches on the current filter, reset to the last character pressed
+			// to move down the menu to the first item that starts with that character
+			if ( !match.length ) {
+				character = String.fromCharCode( event.keyCode );
+				match = this._filterMenuItems( character );
+			}
+
+			if ( match.length ) {
+				this.focus( event, match );
+				this.previousFilter = character;
+				this.filterTimer = this._delay(function() {
+					delete this.previousFilter;
+				}, 1000 );
+			} else {
+				delete this.previousFilter;
+			}
+		}
+
+		if ( preventDefault ) {
+			event.preventDefault();
+		}
+	},
+
+	_activate: function( event ) {
+		if ( !this.active.is( ".ui-state-disabled" ) ) {
+			if ( this.active.is( "[aria-haspopup='true']" ) ) {
+				this.expand( event );
+			} else {
+				this.select( event );
+			}
+		}
+	},
+
+	refresh: function() {
+		var menus, items,
+			that = this,
+			icon = this.options.icons.submenu,
+			submenus = this.element.find( this.options.menus );
+
+		this.element.toggleClass( "ui-menu-icons", !!this.element.find( ".ui-icon" ).length );
+
+		// Initialize nested menus
+		submenus.filter( ":not(.ui-menu)" )
+			.addClass( "ui-menu ui-widget ui-widget-content ui-front" )
+			.hide()
+			.attr({
+				role: this.options.role,
+				"aria-hidden": "true",
+				"aria-expanded": "false"
+			})
+			.each(function() {
+				var menu = $( this ),
+					item = menu.parent(),
+					submenuCarat = $( "<span>" )
+						.addClass( "ui-menu-icon ui-icon " + icon )
+						.data( "ui-menu-submenu-carat", true );
+
+				item
+					.attr( "aria-haspopup", "true" )
+					.prepend( submenuCarat );
+				menu.attr( "aria-labelledby", item.attr( "id" ) );
+			});
+
+		menus = submenus.add( this.element );
+		items = menus.find( this.options.items );
+
+		// Initialize menu-items containing spaces and/or dashes only as dividers
+		items.not( ".ui-menu-item" ).each(function() {
+			var item = $( this );
+			if ( that._isDivider( item ) ) {
+				item.addClass( "ui-widget-content ui-menu-divider" );
+			}
+		});
+
+		// Don't refresh list items that are already adapted
+		items.not( ".ui-menu-item, .ui-menu-divider" )
+			.addClass( "ui-menu-item" )
+			.uniqueId()
+			.attr({
+				tabIndex: -1,
+				role: this._itemRole()
+			});
+
+		// Add aria-disabled attribute to any disabled menu item
+		items.filter( ".ui-state-disabled" ).attr( "aria-disabled", "true" );
+
+		// If the active item has been removed, blur the menu
+		if ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {
+			this.blur();
+		}
+	},
+
+	_itemRole: function() {
+		return {
+			menu: "menuitem",
+			listbox: "option"
+		}[ this.options.role ];
+	},
+
+	_setOption: function( key, value ) {
+		if ( key === "icons" ) {
+			this.element.find( ".ui-menu-icon" )
+				.removeClass( this.options.icons.submenu )
+				.addClass( value.submenu );
+		}
+		if ( key === "disabled" ) {
+			this.element
+				.toggleClass( "ui-state-disabled", !!value )
+				.attr( "aria-disabled", value );
+		}
+		this._super( key, value );
+	},
+
+	focus: function( event, item ) {
+		var nested, focused;
+		this.blur( event, event && event.type === "focus" );
+
+		this._scrollIntoView( item );
+
+		this.active = item.first();
+		focused = this.active.addClass( "ui-state-focus" ).removeClass( "ui-state-active" );
+		// Only update aria-activedescendant if there's a role
+		// otherwise we assume focus is managed elsewhere
+		if ( this.options.role ) {
+			this.element.attr( "aria-activedescendant", focused.attr( "id" ) );
+		}
+
+		// Highlight active parent menu item, if any
+		this.active
+			.parent()
+			.closest( ".ui-menu-item" )
+			.addClass( "ui-state-active" );
+
+		if ( event && event.type === "keydown" ) {
+			this._close();
+		} else {
+			this.timer = this._delay(function() {
+				this._close();
+			}, this.delay );
+		}
+
+		nested = item.children( ".ui-menu" );
+		if ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {
+			this._startOpening(nested);
+		}
+		this.activeMenu = item.parent();
+
+		this._trigger( "focus", event, { item: item } );
+	},
+
+	_scrollIntoView: function( item ) {
+		var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
+		if ( this._hasScroll() ) {
+			borderTop = parseFloat( $.css( this.activeMenu[0], "borderTopWidth" ) ) || 0;
+			paddingTop = parseFloat( $.css( this.activeMenu[0], "paddingTop" ) ) || 0;
+			offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
+			scroll = this.activeMenu.scrollTop();
+			elementHeight = this.activeMenu.height();
+			itemHeight = item.outerHeight();
+
+			if ( offset < 0 ) {
+				this.activeMenu.scrollTop( scroll + offset );
+			} else if ( offset + itemHeight > elementHeight ) {
+				this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
+			}
+		}
+	},
+
+	blur: function( event, fromFocus ) {
+		if ( !fromFocus ) {
+			clearTimeout( this.timer );
+		}
+
+		if ( !this.active ) {
+			return;
+		}
+
+		this.active.removeClass( "ui-state-focus" );
+		this.active = null;
+
+		this._trigger( "blur", event, { item: this.active } );
+	},
+
+	_startOpening: function( submenu ) {
+		clearTimeout( this.timer );
+
+		// Don't open if already open fixes a Firefox bug that caused a .5 pixel
+		// shift in the submenu position when mousing over the carat icon
+		if ( submenu.attr( "aria-hidden" ) !== "true" ) {
+			return;
+		}
+
+		this.timer = this._delay(function() {
+			this._close();
+			this._open( submenu );
+		}, this.delay );
+	},
+
+	_open: function( submenu ) {
+		var position = $.extend({
+			of: this.active
+		}, this.options.position );
+
+		clearTimeout( this.timer );
+		this.element.find( ".ui-menu" ).not( submenu.parents( ".ui-menu" ) )
+			.hide()
+			.attr( "aria-hidden", "true" );
+
+		submenu
+			.show()
+			.removeAttr( "aria-hidden" )
+			.attr( "aria-expanded", "true" )
+			.position( position );
+	},
+
+	collapseAll: function( event, all ) {
+		clearTimeout( this.timer );
+		this.timer = this._delay(function() {
+			// If we were passed an event, look for the submenu that contains the event
+			var currentMenu = all ? this.element :
+				$( event && event.target ).closest( this.element.find( ".ui-menu" ) );
+
+			// If we found no valid submenu ancestor, use the main menu to close all sub menus anyway
+			if ( !currentMenu.length ) {
+				currentMenu = this.element;
+			}
+
+			this._close( currentMenu );
+
+			this.blur( event );
+			this.activeMenu = currentMenu;
+		}, this.delay );
+	},
+
+	// With no arguments, closes the currently active menu - if nothing is active
+	// it closes all menus.  If passed an argument, it will search for menus BELOW
+	_close: function( startMenu ) {
+		if ( !startMenu ) {
+			startMenu = this.active ? this.active.parent() : this.element;
+		}
+
+		startMenu
+			.find( ".ui-menu" )
+				.hide()
+				.attr( "aria-hidden", "true" )
+				.attr( "aria-expanded", "false" )
+			.end()
+			.find( ".ui-state-active" ).not( ".ui-state-focus" )
+				.removeClass( "ui-state-active" );
+	},
+
+	_closeOnDocumentClick: function( event ) {
+		return !$( event.target ).closest( ".ui-menu" ).length;
+	},
+
+	_isDivider: function( item ) {
+
+		// Match hyphen, em dash, en dash
+		return !/[^\-\u2014\u2013\s]/.test( item.text() );
+	},
+
+	collapse: function( event ) {
+		var newItem = this.active &&
+			this.active.parent().closest( ".ui-menu-item", this.element );
+		if ( newItem && newItem.length ) {
+			this._close();
+			this.focus( event, newItem );
+		}
+	},
+
+	expand: function( event ) {
+		var newItem = this.active &&
+			this.active
+				.children( ".ui-menu " )
+				.find( this.options.items )
+				.first();
+
+		if ( newItem && newItem.length ) {
+			this._open( newItem.parent() );
+
+			// Delay so Firefox will not hide activedescendant change in expanding submenu from AT
+			this._delay(function() {
+				this.focus( event, newItem );
+			});
+		}
+	},
+
+	next: function( event ) {
+		this._move( "next", "first", event );
+	},
+
+	previous: function( event ) {
+		this._move( "prev", "last", event );
+	},
+
+	isFirstItem: function() {
+		return this.active && !this.active.prevAll( ".ui-menu-item" ).length;
+	},
+
+	isLastItem: function() {
+		return this.active && !this.active.nextAll( ".ui-menu-item" ).length;
+	},
+
+	_move: function( direction, filter, event ) {
+		var next;
+		if ( this.active ) {
+			if ( direction === "first" || direction === "last" ) {
+				next = this.active
+					[ direction === "first" ? "prevAll" : "nextAll" ]( ".ui-menu-item" )
+					.eq( -1 );
+			} else {
+				next = this.active
+					[ direction + "All" ]( ".ui-menu-item" )
+					.eq( 0 );
+			}
+		}
+		if ( !next || !next.length || !this.active ) {
+			next = this.activeMenu.find( this.options.items )[ filter ]();
+		}
+
+		this.focus( event, next );
+	},
+
+	nextPage: function( event ) {
+		var item, base, height;
+
+		if ( !this.active ) {
+			this.next( event );
+			return;
+		}
+		if ( this.isLastItem() ) {
+			return;
+		}
+		if ( this._hasScroll() ) {
+			base = this.active.offset().top;
+			height = this.element.height();
+			this.active.nextAll( ".ui-menu-item" ).each(function() {
+				item = $( this );
+				return item.offset().top - base - height < 0;
+			});
+
+			this.focus( event, item );
+		} else {
+			this.focus( event, this.activeMenu.find( this.options.items )
+				[ !this.active ? "first" : "last" ]() );
+		}
+	},
+
+	previousPage: function( event ) {
+		var item, base, height;
+		if ( !this.active ) {
+			this.next( event );
+			return;
+		}
+		if ( this.isFirstItem() ) {
+			return;
+		}
+		if ( this._hasScroll() ) {
+			base = this.active.offset().top;
+			height = this.element.height();
+			this.active.prevAll( ".ui-menu-item" ).each(function() {
+				item = $( this );
+				return item.offset().top - base + height > 0;
+			});
+
+			this.focus( event, item );
+		} else {
+			this.focus( event, this.activeMenu.find( this.options.items ).first() );
+		}
+	},
+
+	_hasScroll: function() {
+		return this.element.outerHeight() < this.element.prop( "scrollHeight" );
+	},
+
+	select: function( event ) {
+		// TODO: It should never be possible to not have an active item at this
+		// point, but the tests don't trigger mouseenter before click.
+		this.active = this.active || $( event.target ).closest( ".ui-menu-item" );
+		var ui = { item: this.active };
+		if ( !this.active.has( ".ui-menu" ).length ) {
+			this.collapseAll( event, true );
+		}
+		this._trigger( "select", event, ui );
+	},
+
+	_filterMenuItems: function(character) {
+		var escapedCharacter = character.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" ),
+			regex = new RegExp( "^" + escapedCharacter, "i" );
+
+		return this.activeMenu
+			.find( this.options.items )
+
+			// Only match on items, not dividers or other content (#10571)
+			.filter( ".ui-menu-item" )
+			.filter(function() {
+				return regex.test( $.trim( $( this ).text() ) );
+			});
+	}
+});
+
+
+/*!
+ * jQuery UI Autocomplete 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/autocomplete/
+ */
+
+
+$.widget( "ui.autocomplete", {
+	version: "1.11.4",
+	defaultElement: "<input>",
+	options: {
+		appendTo: null,
+		autoFocus: false,
+		delay: 300,
+		minLength: 1,
+		position: {
+			my: "left top",
+			at: "left bottom",
+			collision: "none"
+		},
+		source: null,
+
+		// callbacks
+		change: null,
+		close: null,
+		focus: null,
+		open: null,
+		response: null,
+		search: null,
+		select: null
+	},
+
+	requestIndex: 0,
+	pending: 0,
+
+	_create: function() {
+		// Some browsers only repeat keydown events, not keypress events,
+		// so we use the suppressKeyPress flag to determine if we've already
+		// handled the keydown event. #7269
+		// Unfortunately the code for & in keypress is the same as the up arrow,
+		// so we use the suppressKeyPressRepeat flag to avoid handling keypress
+		// events when we know the keydown event was used to modify the
+		// search term. #7799
+		var suppressKeyPress, suppressKeyPressRepeat, suppressInput,
+			nodeName = this.element[ 0 ].nodeName.toLowerCase(),
+			isTextarea = nodeName === "textarea",
+			isInput = nodeName === "input";
+
+		this.isMultiLine =
+			// Textareas are always multi-line
+			isTextarea ? true :
+			// Inputs are always single-line, even if inside a contentEditable element
+			// IE also treats inputs as contentEditable
+			isInput ? false :
+			// All other element types are determined by whether or not they're contentEditable
+			this.element.prop( "isContentEditable" );
+
+		this.valueMethod = this.element[ isTextarea || isInput ? "val" : "text" ];
+		this.isNewMenu = true;
+
+		this.element
+			.addClass( "ui-autocomplete-input" )
+			.attr( "autocomplete", "off" );
+
+		this._on( this.element, {
+			keydown: function( event ) {
+				if ( this.element.prop( "readOnly" ) ) {
+					suppressKeyPress = true;
+					suppressInput = true;
+					suppressKeyPressRepeat = true;
+					return;
+				}
+
+				suppressKeyPress = false;
+				suppressInput = false;
+				suppressKeyPressRepeat = false;
+				var keyCode = $.ui.keyCode;
+				switch ( event.keyCode ) {
+				case keyCode.PAGE_UP:
+					suppressKeyPress = true;
+					this._move( "previousPage", event );
+					break;
+				case keyCode.PAGE_DOWN:
+					suppressKeyPress = true;
+					this._move( "nextPage", event );
+					break;
+				case keyCode.UP:
+					suppressKeyPress = true;
+					this._keyEvent( "previous", event );
+					break;
+				case keyCode.DOWN:
+					suppressKeyPress = true;
+					this._keyEvent( "next", event );
+					break;
+				case keyCode.ENTER:
+					// when menu is open and has focus
+					if ( this.menu.active ) {
+						// #6055 - Opera still allows the keypress to occur
+						// which causes forms to submit
+						suppressKeyPress = true;
+						event.preventDefault();
+						this.menu.select( event );
+					}
+					break;
+				case keyCode.TAB:
+					if ( this.menu.active ) {
+						this.menu.select( event );
+					}
+					break;
+				case keyCode.ESCAPE:
+					if ( this.menu.element.is( ":visible" ) ) {
+						if ( !this.isMultiLine ) {
+							this._value( this.term );
+						}
+						this.close( event );
+						// Different browsers have different default behavior for escape
+						// Single press can mean undo or clear
+						// Double press in IE means clear the whole form
+						event.preventDefault();
+					}
+					break;
+				default:
+					suppressKeyPressRepeat = true;
+					// search timeout should be triggered before the input value is changed
+					this._searchTimeout( event );
+					break;
+				}
+			},
+			keypress: function( event ) {
+				if ( suppressKeyPress ) {
+					suppressKeyPress = false;
+					if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+						event.preventDefault();
+					}
+					return;
+				}
+				if ( suppressKeyPressRepeat ) {
+					return;
+				}
+
+				// replicate some key handlers to allow them to repeat in Firefox and Opera
+				var keyCode = $.ui.keyCode;
+				switch ( event.keyCode ) {
+				case keyCode.PAGE_UP:
+					this._move( "previousPage", event );
+					break;
+				case keyCode.PAGE_DOWN:
+					this._move( "nextPage", event );
+					break;
+				case keyCode.UP:
+					this._keyEvent( "previous", event );
+					break;
+				case keyCode.DOWN:
+					this._keyEvent( "next", event );
+					break;
+				}
+			},
+			input: function( event ) {
+				if ( suppressInput ) {
+					suppressInput = false;
+					event.preventDefault();
+					return;
+				}
+				this._searchTimeout( event );
+			},
+			focus: function() {
+				this.selectedItem = null;
+				this.previous = this._value();
+			},
+			blur: function( event ) {
+				if ( this.cancelBlur ) {
+					delete this.cancelBlur;
+					return;
+				}
+
+				clearTimeout( this.searching );
+				this.close( event );
+				this._change( event );
+			}
+		});
+
+		this._initSource();
+		this.menu = $( "<ul>" )
+			.addClass( "ui-autocomplete ui-front" )
+			.appendTo( this._appendTo() )
+			.menu({
+				// disable ARIA support, the live region takes care of that
+				role: null
+			})
+			.hide()
+			.menu( "instance" );
+
+		this._on( this.menu.element, {
+			mousedown: function( event ) {
+				// prevent moving focus out of the text field
+				event.preventDefault();
+
+				// IE doesn't prevent moving focus even with event.preventDefault()
+				// so we set a flag to know when we should ignore the blur event
+				this.cancelBlur = true;
+				this._delay(function() {
+					delete this.cancelBlur;
+				});
+
+				// clicking on the scrollbar causes focus to shift to the body
+				// but we can't detect a mouseup or a click immediately afterward
+				// so we have to track the next mousedown and close the menu if
+				// the user clicks somewhere outside of the autocomplete
+				var menuElement = this.menu.element[ 0 ];
+				if ( !$( event.target ).closest( ".ui-menu-item" ).length ) {
+					this._delay(function() {
+						var that = this;
+						this.document.one( "mousedown", function( event ) {
+							if ( event.target !== that.element[ 0 ] &&
+									event.target !== menuElement &&
+									!$.contains( menuElement, event.target ) ) {
+								that.close();
+							}
+						});
+					});
+				}
+			},
+			menufocus: function( event, ui ) {
+				var label, item;
+				// support: Firefox
+				// Prevent accidental activation of menu items in Firefox (#7024 #9118)
+				if ( this.isNewMenu ) {
+					this.isNewMenu = false;
+					if ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {
+						this.menu.blur();
+
+						this.document.one( "mousemove", function() {
+							$( event.target ).trigger( event.originalEvent );
+						});
+
+						return;
+					}
+				}
+
+				item = ui.item.data( "ui-autocomplete-item" );
+				if ( false !== this._trigger( "focus", event, { item: item } ) ) {
+					// use value to match what will end up in the input, if it was a key event
+					if ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {
+						this._value( item.value );
+					}
+				}
+
+				// Announce the value in the liveRegion
+				label = ui.item.attr( "aria-label" ) || item.value;
+				if ( label && $.trim( label ).length ) {
+					this.liveRegion.children().hide();
+					$( "<div>" ).text( label ).appendTo( this.liveRegion );
+				}
+			},
+			menuselect: function( event, ui ) {
+				var item = ui.item.data( "ui-autocomplete-item" ),
+					previous = this.previous;
+
+				// only trigger when focus was lost (click on menu)
+				if ( this.element[ 0 ] !== this.document[ 0 ].activeElement ) {
+					this.element.focus();
+					this.previous = previous;
+					// #6109 - IE triggers two focus events and the second
+					// is asynchronous, so we need to reset the previous
+					// term synchronously and asynchronously :-(
+					this._delay(function() {
+						this.previous = previous;
+						this.selectedItem = item;
+					});
+				}
+
+				if ( false !== this._trigger( "select", event, { item: item } ) ) {
+					this._value( item.value );
+				}
+				// reset the term after the select event
+				// this allows custom select handling to work properly
+				this.term = this._value();
+
+				this.close( event );
+				this.selectedItem = item;
+			}
+		});
+
+		this.liveRegion = $( "<span>", {
+				role: "status",
+				"aria-live": "assertive",
+				"aria-relevant": "additions"
+			})
+			.addClass( "ui-helper-hidden-accessible" )
+			.appendTo( this.document[ 0 ].body );
+
+		// turning off autocomplete prevents the browser from remembering the
+		// value when navigating through history, so we re-enable autocomplete
+		// if the page is unloaded before the widget is destroyed. #7790
+		this._on( this.window, {
+			beforeunload: function() {
+				this.element.removeAttr( "autocomplete" );
+			}
+		});
+	},
+
+	_destroy: function() {
+		clearTimeout( this.searching );
+		this.element
+			.removeClass( "ui-autocomplete-input" )
+			.removeAttr( "autocomplete" );
+		this.menu.element.remove();
+		this.liveRegion.remove();
+	},
+
+	_setOption: function( key, value ) {
+		this._super( key, value );
+		if ( key === "source" ) {
+			this._initSource();
+		}
+		if ( key === "appendTo" ) {
+			this.menu.element.appendTo( this._appendTo() );
+		}
+		if ( key === "disabled" && value && this.xhr ) {
+			this.xhr.abort();
+		}
+	},
+
+	_appendTo: function() {
+		var element = this.options.appendTo;
+
+		if ( element ) {
+			element = element.jquery || element.nodeType ?
+				$( element ) :
+				this.document.find( element ).eq( 0 );
+		}
+
+		if ( !element || !element[ 0 ] ) {
+			element = this.element.closest( ".ui-front" );
+		}
+
+		if ( !element.length ) {
+			element = this.document[ 0 ].body;
+		}
+
+		return element;
+	},
+
+	_initSource: function() {
+		var array, url,
+			that = this;
+		if ( $.isArray( this.options.source ) ) {
+			array = this.options.source;
+			this.source = function( request, response ) {
+				response( $.ui.autocomplete.filter( array, request.term ) );
+			};
+		} else if ( typeof this.options.source === "string" ) {
+			url = this.options.source;
+			this.source = function( request, response ) {
+				if ( that.xhr ) {
+					that.xhr.abort();
+				}
+				that.xhr = $.ajax({
+					url: url,
+					data: request,
+					dataType: "json",
+					success: function( data ) {
+						response( data );
+					},
+					error: function() {
+						response([]);
+					}
+				});
+			};
+		} else {
+			this.source = this.options.source;
+		}
+	},
+
+	_searchTimeout: function( event ) {
+		clearTimeout( this.searching );
+		this.searching = this._delay(function() {
+
+			// Search if the value has changed, or if the user retypes the same value (see #7434)
+			var equalValues = this.term === this._value(),
+				menuVisible = this.menu.element.is( ":visible" ),
+				modifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;
+
+			if ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {
+				this.selectedItem = null;
+				this.search( null, event );
+			}
+		}, this.options.delay );
+	},
+
+	search: function( value, event ) {
+		value = value != null ? value : this._value();
+
+		// always save the actual value, not the one passed as an argument
+		this.term = this._value();
+
+		if ( value.length < this.options.minLength ) {
+			return this.close( event );
+		}
+
+		if ( this._trigger( "search", event ) === false ) {
+			return;
+		}
+
+		return this._search( value );
+	},
+
+	_search: function( value ) {
+		this.pending++;
+		this.element.addClass( "ui-autocomplete-loading" );
+		this.cancelSearch = false;
+
+		this.source( { term: value }, this._response() );
+	},
+
+	_response: function() {
+		var index = ++this.requestIndex;
+
+		return $.proxy(function( content ) {
+			if ( index === this.requestIndex ) {
+				this.__response( content );
+			}
+
+			this.pending--;
+			if ( !this.pending ) {
+				this.element.removeClass( "ui-autocomplete-loading" );
+			}
+		}, this );
+	},
+
+	__response: function( content ) {
+		if ( content ) {
+			content = this._normalize( content );
+		}
+		this._trigger( "response", null, { content: content } );
+		if ( !this.options.disabled && content && content.length && !this.cancelSearch ) {
+			this._suggest( content );
+			this._trigger( "open" );
+		} else {
+			// use ._close() instead of .close() so we don't cancel future searches
+			this._close();
+		}
+	},
+
+	close: function( event ) {
+		this.cancelSearch = true;
+		this._close( event );
+	},
+
+	_close: function( event ) {
+		if ( this.menu.element.is( ":visible" ) ) {
+			this.menu.element.hide();
+			this.menu.blur();
+			this.isNewMenu = true;
+			this._trigger( "close", event );
+		}
+	},
+
+	_change: function( event ) {
+		if ( this.previous !== this._value() ) {
+			this._trigger( "change", event, { item: this.selectedItem } );
+		}
+	},
+
+	_normalize: function( items ) {
+		// assume all items have the right format when the first item is complete
+		if ( items.length && items[ 0 ].label && items[ 0 ].value ) {
+			return items;
+		}
+		return $.map( items, function( item ) {
+			if ( typeof item === "string" ) {
+				return {
+					label: item,
+					value: item
+				};
+			}
+			return $.extend( {}, item, {
+				label: item.label || item.value,
+				value: item.value || item.label
+			});
+		});
+	},
+
+	_suggest: function( items ) {
+		var ul = this.menu.element.empty();
+		this._renderMenu( ul, items );
+		this.isNewMenu = true;
+		this.menu.refresh();
+
+		// size and position menu
+		ul.show();
+		this._resizeMenu();
+		ul.position( $.extend({
+			of: this.element
+		}, this.options.position ) );
+
+		if ( this.options.autoFocus ) {
+			this.menu.next();
+		}
+	},
+
+	_resizeMenu: function() {
+		var ul = this.menu.element;
+		ul.outerWidth( Math.max(
+			// Firefox wraps long text (possibly a rounding bug)
+			// so we add 1px to avoid the wrapping (#7513)
+			ul.width( "" ).outerWidth() + 1,
+			this.element.outerWidth()
+		) );
+	},
+
+	_renderMenu: function( ul, items ) {
+		var that = this;
+		$.each( items, function( index, item ) {
+			that._renderItemData( ul, item );
+		});
+	},
+
+	_renderItemData: function( ul, item ) {
+		return this._renderItem( ul, item ).data( "ui-autocomplete-item", item );
+	},
+
+	_renderItem: function( ul, item ) {
+		return $( "<li>" ).text( item.label ).appendTo( ul );
+	},
+
+	_move: function( direction, event ) {
+		if ( !this.menu.element.is( ":visible" ) ) {
+			this.search( null, event );
+			return;
+		}
+		if ( this.menu.isFirstItem() && /^previous/.test( direction ) ||
+				this.menu.isLastItem() && /^next/.test( direction ) ) {
+
+			if ( !this.isMultiLine ) {
+				this._value( this.term );
+			}
+
+			this.menu.blur();
+			return;
+		}
+		this.menu[ direction ]( event );
+	},
+
+	widget: function() {
+		return this.menu.element;
+	},
+
+	_value: function() {
+		return this.valueMethod.apply( this.element, arguments );
+	},
+
+	_keyEvent: function( keyEvent, event ) {
+		if ( !this.isMultiLine || this.menu.element.is( ":visible" ) ) {
+			this._move( keyEvent, event );
+
+			// prevents moving cursor to beginning/end of the text field in some browsers
+			event.preventDefault();
+		}
+	}
+});
+
+$.extend( $.ui.autocomplete, {
+	escapeRegex: function( value ) {
+		return value.replace( /[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&" );
+	},
+	filter: function( array, term ) {
+		var matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), "i" );
+		return $.grep( array, function( value ) {
+			return matcher.test( value.label || value.value || value );
+		});
+	}
+});
+
+// live region extension, adding a `messages` option
+// NOTE: This is an experimental API. We are still investigating
+// a full solution for string manipulation and internationalization.
+$.widget( "ui.autocomplete", $.ui.autocomplete, {
+	options: {
+		messages: {
+			noResults: "No search results.",
+			results: function( amount ) {
+				return amount + ( amount > 1 ? " results are" : " result is" ) +
+					" available, use up and down arrow keys to navigate.";
+			}
+		}
+	},
+
+	__response: function( content ) {
+		var message;
+		this._superApply( arguments );
+		if ( this.options.disabled || this.cancelSearch ) {
+			return;
+		}
+		if ( content && content.length ) {
+			message = this.options.messages.results( content.length );
+		} else {
+			message = this.options.messages.noResults;
+		}
+		this.liveRegion.children().hide();
+		$( "<div>" ).text( message ).appendTo( this.liveRegion );
+	}
+});
+
+var autocomplete = $.ui.autocomplete;
+
+
+/*!
+ * jQuery UI Button 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/button/
+ */
+
+
+var lastActive,
+	baseClasses = "ui-button ui-widget ui-state-default ui-corner-all",
+	typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only",
+	formResetHandler = function() {
+		var form = $( this );
+		setTimeout(function() {
+			form.find( ":ui-button" ).button( "refresh" );
+		}, 1 );
+	},
+	radioGroup = function( radio ) {
+		var name = radio.name,
+			form = radio.form,
+			radios = $( [] );
+		if ( name ) {
+			name = name.replace( /'/g, "\\'" );
+			if ( form ) {
+				radios = $( form ).find( "[name='" + name + "'][type=radio]" );
+			} else {
+				radios = $( "[name='" + name + "'][type=radio]", radio.ownerDocument )
+					.filter(function() {
+						return !this.form;
+					});
+			}
+		}
+		return radios;
+	};
+
+$.widget( "ui.button", {
+	version: "1.11.4",
+	defaultElement: "<button>",
+	options: {
+		disabled: null,
+		text: true,
+		label: null,
+		icons: {
+			primary: null,
+			secondary: null
+		}
+	},
+	_create: function() {
+		this.element.closest( "form" )
+			.unbind( "reset" + this.eventNamespace )
+			.bind( "reset" + this.eventNamespace, formResetHandler );
+
+		if ( typeof this.options.disabled !== "boolean" ) {
+			this.options.disabled = !!this.element.prop( "disabled" );
+		} else {
+			this.element.prop( "disabled", this.options.disabled );
+		}
+
+		this._determineButtonType();
+		this.hasTitle = !!this.buttonElement.attr( "title" );
+
+		var that = this,
+			options = this.options,
+			toggleButton = this.type === "checkbox" || this.type === "radio",
+			activeClass = !toggleButton ? "ui-state-active" : "";
+
+		if ( options.label === null ) {
+			options.label = (this.type === "input" ? this.buttonElement.val() : this.buttonElement.html());
+		}
+
+		this._hoverable( this.buttonElement );
+
+		this.buttonElement
+			.addClass( baseClasses )
+			.attr( "role", "button" )
+			.bind( "mouseenter" + this.eventNamespace, function() {
+				if ( options.disabled ) {
+					return;
+				}
+				if ( this === lastActive ) {
+					$( this ).addClass( "ui-state-active" );
+				}
+			})
+			.bind( "mouseleave" + this.eventNamespace, function() {
+				if ( options.disabled ) {
+					return;
+				}
+				$( this ).removeClass( activeClass );
+			})
+			.bind( "click" + this.eventNamespace, function( event ) {
+				if ( options.disabled ) {
+					event.preventDefault();
+					event.stopImmediatePropagation();
+				}
+			});
+
+		// Can't use _focusable() because the element that receives focus
+		// and the element that gets the ui-state-focus class are different
+		this._on({
+			focus: function() {
+				this.buttonElement.addClass( "ui-state-focus" );
+			},
+			blur: function() {
+				this.buttonElement.removeClass( "ui-state-focus" );
+			}
+		});
+
+		if ( toggleButton ) {
+			this.element.bind( "change" + this.eventNamespace, function() {
+				that.refresh();
+			});
+		}
+
+		if ( this.type === "checkbox" ) {
+			this.buttonElement.bind( "click" + this.eventNamespace, function() {
+				if ( options.disabled ) {
+					return false;
+				}
+			});
+		} else if ( this.type === "radio" ) {
+			this.buttonElement.bind( "click" + this.eventNamespace, function() {
+				if ( options.disabled ) {
+					return false;
+				}
+				$( this ).addClass( "ui-state-active" );
+				that.buttonElement.attr( "aria-pressed", "true" );
+
+				var radio = that.element[ 0 ];
+				radioGroup( radio )
+					.not( radio )
+					.map(function() {
+						return $( this ).button( "widget" )[ 0 ];
+					})
+					.removeClass( "ui-state-active" )
+					.attr( "aria-pressed", "false" );
+			});
+		} else {
+			this.buttonElement
+				.bind( "mousedown" + this.eventNamespace, function() {
+					if ( options.disabled ) {
+						return false;
+					}
+					$( this ).addClass( "ui-state-active" );
+					lastActive = this;
+					that.document.one( "mouseup", function() {
+						lastActive = null;
+					});
+				})
+				.bind( "mouseup" + this.eventNamespace, function() {
+					if ( options.disabled ) {
+						return false;
+					}
+					$( this ).removeClass( "ui-state-active" );
+				})
+				.bind( "keydown" + this.eventNamespace, function(event) {
+					if ( options.disabled ) {
+						return false;
+					}
+					if ( event.keyCode === $.ui.keyCode.SPACE || event.keyCode === $.ui.keyCode.ENTER ) {
+						$( this ).addClass( "ui-state-active" );
+					}
+				})
+				// see #8559, we bind to blur here in case the button element loses
+				// focus between keydown and keyup, it would be left in an "active" state
+				.bind( "keyup" + this.eventNamespace + " blur" + this.eventNamespace, function() {
+					$( this ).removeClass( "ui-state-active" );
+				});
+
+			if ( this.buttonElement.is("a") ) {
+				this.buttonElement.keyup(function(event) {
+					if ( event.keyCode === $.ui.keyCode.SPACE ) {
+						// TODO pass through original event correctly (just as 2nd argument doesn't work)
+						$( this ).click();
+					}
+				});
+			}
+		}
+
+		this._setOption( "disabled", options.disabled );
+		this._resetButton();
+	},
+
+	_determineButtonType: function() {
+		var ancestor, labelSelector, checked;
+
+		if ( this.element.is("[type=checkbox]") ) {
+			this.type = "checkbox";
+		} else if ( this.element.is("[type=radio]") ) {
+			this.type = "radio";
+		} else if ( this.element.is("input") ) {
+			this.type = "input";
+		} else {
+			this.type = "button";
+		}
+
+		if ( this.type === "checkbox" || this.type === "radio" ) {
+			// we don't search against the document in case the element
+			// is disconnected from the DOM
+			ancestor = this.element.parents().last();
+			labelSelector = "label[for='" + this.element.attr("id") + "']";
+			this.buttonElement = ancestor.find( labelSelector );
+			if ( !this.buttonElement.length ) {
+				ancestor = ancestor.length ? ancestor.siblings() : this.element.siblings();
+				this.buttonElement = ancestor.filter( labelSelector );
+				if ( !this.buttonElement.length ) {
+					this.buttonElement = ancestor.find( labelSelector );
+				}
+			}
+			this.element.addClass( "ui-helper-hidden-accessible" );
+
+			checked = this.element.is( ":checked" );
+			if ( checked ) {
+				this.buttonElement.addClass( "ui-state-active" );
+			}
+			this.buttonElement.prop( "aria-pressed", checked );
+		} else {
+			this.buttonElement = this.element;
+		}
+	},
+
+	widget: function() {
+		return this.buttonElement;
+	},
+
+	_destroy: function() {
+		this.element
+			.removeClass( "ui-helper-hidden-accessible" );
+		this.buttonElement
+			.removeClass( baseClasses + " ui-state-active " + typeClasses )
+			.removeAttr( "role" )
+			.removeAttr( "aria-pressed" )
+			.html( this.buttonElement.find(".ui-button-text").html() );
+
+		if ( !this.hasTitle ) {
+			this.buttonElement.removeAttr( "title" );
+		}
+	},
+
+	_setOption: function( key, value ) {
+		this._super( key, value );
+		if ( key === "disabled" ) {
+			this.widget().toggleClass( "ui-state-disabled", !!value );
+			this.element.prop( "disabled", !!value );
+			if ( value ) {
+				if ( this.type === "checkbox" || this.type === "radio" ) {
+					this.buttonElement.removeClass( "ui-state-focus" );
+				} else {
+					this.buttonElement.removeClass( "ui-state-focus ui-state-active" );
+				}
+			}
+			return;
+		}
+		this._resetButton();
+	},
+
+	refresh: function() {
+		//See #8237 & #8828
+		var isDisabled = this.element.is( "input, button" ) ? this.element.is( ":disabled" ) : this.element.hasClass( "ui-button-disabled" );
+
+		if ( isDisabled !== this.options.disabled ) {
+			this._setOption( "disabled", isDisabled );
+		}
+		if ( this.type === "radio" ) {
+			radioGroup( this.element[0] ).each(function() {
+				if ( $( this ).is( ":checked" ) ) {
+					$( this ).button( "widget" )
+						.addClass( "ui-state-active" )
+						.attr( "aria-pressed", "true" );
+				} else {
+					$( this ).button( "widget" )
+						.removeClass( "ui-state-active" )
+						.attr( "aria-pressed", "false" );
+				}
+			});
+		} else if ( this.type === "checkbox" ) {
+			if ( this.element.is( ":checked" ) ) {
+				this.buttonElement
+					.addClass( "ui-state-active" )
+					.attr( "aria-pressed", "true" );
+			} else {
+				this.buttonElement
+					.removeClass( "ui-state-active" )
+					.attr( "aria-pressed", "false" );
+			}
+		}
+	},
+
+	_resetButton: function() {
+		if ( this.type === "input" ) {
+			if ( this.options.label ) {
+				this.element.val( this.options.label );
+			}
+			return;
+		}
+		var buttonElement = this.buttonElement.removeClass( typeClasses ),
+			buttonText = $( "<span></span>", this.document[0] )
+				.addClass( "ui-button-text" )
+				.html( this.options.label )
+				.appendTo( buttonElement.empty() )
+				.text(),
+			icons = this.options.icons,
+			multipleIcons = icons.primary && icons.secondary,
+			buttonClasses = [];
+
+		if ( icons.primary || icons.secondary ) {
+			if ( this.options.text ) {
+				buttonClasses.push( "ui-button-text-icon" + ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) );
+			}
+
+			if ( icons.primary ) {
+				buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" );
+			}
+
+			if ( icons.secondary ) {
+				buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" );
+			}
+
+			if ( !this.options.text ) {
+				buttonClasses.push( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" );
+
+				if ( !this.hasTitle ) {
+					buttonElement.attr( "title", $.trim( buttonText ) );
+				}
+			}
+		} else {
+			buttonClasses.push( "ui-button-text-only" );
+		}
+		buttonElement.addClass( buttonClasses.join( " " ) );
+	}
+});
+
+$.widget( "ui.buttonset", {
+	version: "1.11.4",
+	options: {
+		items: "button, input[type=button], input[type=submit], input[type=reset], input[type=checkbox], input[type=radio], a, :data(ui-button)"
+	},
+
+	_create: function() {
+		this.element.addClass( "ui-buttonset" );
+	},
+
+	_init: function() {
+		this.refresh();
+	},
+
+	_setOption: function( key, value ) {
+		if ( key === "disabled" ) {
+			this.buttons.button( "option", key, value );
+		}
+
+		this._super( key, value );
+	},
+
+	refresh: function() {
+		var rtl = this.element.css( "direction" ) === "rtl",
+			allButtons = this.element.find( this.options.items ),
+			existingButtons = allButtons.filter( ":ui-button" );
+
+		// Initialize new buttons
+		allButtons.not( ":ui-button" ).button();
+
+		// Refresh existing buttons
+		existingButtons.button( "refresh" );
+
+		this.buttons = allButtons
+			.map(function() {
+				return $( this ).button( "widget" )[ 0 ];
+			})
+				.removeClass( "ui-corner-all ui-corner-left ui-corner-right" )
+				.filter( ":first" )
+					.addClass( rtl ? "ui-corner-right" : "ui-corner-left" )
+				.end()
+				.filter( ":last" )
+					.addClass( rtl ? "ui-corner-left" : "ui-corner-right" )
+				.end()
+			.end();
+	},
+
+	_destroy: function() {
+		this.element.removeClass( "ui-buttonset" );
+		this.buttons
+			.map(function() {
+				return $( this ).button( "widget" )[ 0 ];
+			})
+				.removeClass( "ui-corner-left ui-corner-right" )
+			.end()
+			.button( "destroy" );
+	}
+});
+
+var button = $.ui.button;
+
+
+/*!
+ * jQuery UI Datepicker 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/datepicker/
+ */
+
+
+$.extend($.ui, { datepicker: { version: "1.11.4" } });
+
+var datepicker_instActive;
+
+function datepicker_getZindex( elem ) {
+	var position, value;
+	while ( elem.length && elem[ 0 ] !== document ) {
+		// Ignore z-index if position is set to a value where z-index is ignored by the browser
+		// This makes behavior of this function consistent across browsers
+		// WebKit always returns auto if the element is positioned
+		position = elem.css( "position" );
+		if ( position === "absolute" || position === "relative" || position === "fixed" ) {
+			// IE returns 0 when zIndex is not specified
+			// other browsers return a string
+			// we ignore the case of nested elements with an explicit value of 0
+			// <div style="z-index: -10;"><div style="z-index: 0;"></div></div>
+			value = parseInt( elem.css( "zIndex" ), 10 );
+			if ( !isNaN( value ) && value !== 0 ) {
+				return value;
+			}
+		}
+		elem = elem.parent();
+	}
+
+	return 0;
+}
+/* Date picker manager.
+   Use the singleton instance of this class, $.datepicker, to interact with the date picker.
+   Settings for (groups of) date pickers are maintained in an instance object,
+   allowing multiple different settings on the same page. */
+
+function Datepicker() {
+	this._curInst = null; // The current instance in use
+	this._keyEvent = false; // If the last event was a key event
+	this._disabledInputs = []; // List of date picker inputs that have been disabled
+	this._datepickerShowing = false; // True if the popup picker is showing , false if not
+	this._inDialog = false; // True if showing within a "dialog", false if not
+	this._mainDivId = "ui-datepicker-div"; // The ID of the main datepicker division
+	this._inlineClass = "ui-datepicker-inline"; // The name of the inline marker class
+	this._appendClass = "ui-datepicker-append"; // The name of the append marker class
+	this._triggerClass = "ui-datepicker-trigger"; // The name of the trigger marker class
+	this._dialogClass = "ui-datepicker-dialog"; // The name of the dialog marker class
+	this._disableClass = "ui-datepicker-disabled"; // The name of the disabled covering marker class
+	this._unselectableClass = "ui-datepicker-unselectable"; // The name of the unselectable cell marker class
+	this._currentClass = "ui-datepicker-current-day"; // The name of the current day marker class
+	this._dayOverClass = "ui-datepicker-days-cell-over"; // The name of the day hover marker class
+	this.regional = []; // Available regional settings, indexed by language code
+	this.regional[""] = { // Default regional settings
+		closeText: "Done", // Display text for close link
+		prevText: "Prev", // Display text for previous month link
+		nextText: "Next", // Display text for next month link
+		currentText: "Today", // Display text for current month link
+		monthNames: ["January","February","March","April","May","June",
+			"July","August","September","October","November","December"], // Names of months for drop-down and formatting
+		monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], // For formatting
+		dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], // For formatting
+		dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], // For formatting
+		dayNamesMin: ["Su","Mo","Tu","We","Th","Fr","Sa"], // Column headings for days starting at Sunday
+		weekHeader: "Wk", // Column header for week of the year
+		dateFormat: "mm/dd/yy", // See format options on parseDate
+		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
+		isRTL: false, // True if right-to-left language, false if left-to-right
+		showMonthAfterYear: false, // True if the year select precedes month, false for month then year
+		yearSuffix: "" // Additional text to append to the year in the month headers
+	};
+	this._defaults = { // Global defaults for all the date picker instances
+		showOn: "focus", // "focus" for popup on focus,
+			// "button" for trigger button, or "both" for either
+		showAnim: "fadeIn", // Name of jQuery animation for popup
+		showOptions: {}, // Options for enhanced animations
+		defaultDate: null, // Used when field is blank: actual date,
+			// +/-number for offset from today, null for today
+		appendText: "", // Display text following the input box, e.g. showing the format
+		buttonText: "...", // Text for trigger button
+		buttonImage: "", // URL for trigger button image
+		buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
+		hideIfNoPrevNext: false, // True to hide next/previous month links
+			// if not applicable, false to just disable them
+		navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
+		gotoCurrent: false, // True if today link goes back to current selection instead
+		changeMonth: false, // True if month can be selected directly, false if only prev/next
+		changeYear: false, // True if year can be selected directly, false if only prev/next
+		yearRange: "c-10:c+10", // Range of years to display in drop-down,
+			// either relative to today's year (-nn:+nn), relative to currently displayed year
+			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
+		showOtherMonths: false, // True to show dates in other months, false to leave blank
+		selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
+		showWeek: false, // True to show week of the year, false to not show it
+		calculateWeek: this.iso8601Week, // How to calculate the week of the year,
+			// takes a Date and returns the number of the week for it
+		shortYearCutoff: "+10", // Short year values < this are in the current century,
+			// > this are in the previous century,
+			// string value starting with "+" for current year + value
+		minDate: null, // The earliest selectable date, or null for no limit
+		maxDate: null, // The latest selectable date, or null for no limit
+		duration: "fast", // Duration of display/closure
+		beforeShowDay: null, // Function that takes a date and returns an array with
+			// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or "",
+			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
+		beforeShow: null, // Function that takes an input field and
+			// returns a set of custom settings for the date picker
+		onSelect: null, // Define a callback function when a date is selected
+		onChangeMonthYear: null, // Define a callback function when the month or year is changed
+		onClose: null, // Define a callback function when the datepicker is closed
+		numberOfMonths: 1, // Number of months to show at a time
+		showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
+		stepMonths: 1, // Number of months to step back/forward
+		stepBigMonths: 12, // Number of months to step back/forward for the big links
+		altField: "", // Selector for an alternate field to store selected dates into
+		altFormat: "", // The date format to use for the alternate field
+		constrainInput: true, // The input is constrained by the current date format
+		showButtonPanel: false, // True to show button panel, false to not show it
+		autoSize: false, // True to size the input for the date format, false to leave as is
+		disabled: false // The initial disabled state
+	};
+	$.extend(this._defaults, this.regional[""]);
+	this.regional.en = $.extend( true, {}, this.regional[ "" ]);
+	this.regional[ "en-US" ] = $.extend( true, {}, this.regional.en );
+	this.dpDiv = datepicker_bindHover($("<div id='" + this._mainDivId + "' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"));
+}
+
+$.extend(Datepicker.prototype, {
+	/* Class name added to elements to indicate already configured with a date picker. */
+	markerClassName: "hasDatepicker",
+
+	//Keep track of the maximum number of rows displayed (see #7043)
+	maxRows: 4,
+
+	// TODO rename to "widget" when switching to widget factory
+	_widgetDatepicker: function() {
+		return this.dpDiv;
+	},
+
+	/* Override the default settings for all instances of the date picker.
+	 * @param  settings  object - the new settings to use as defaults (anonymous object)
+	 * @return the manager object
+	 */
+	setDefaults: function(settings) {
+		datepicker_extendRemove(this._defaults, settings || {});
+		return this;
+	},
+
+	/* Attach the date picker to a jQuery selection.
+	 * @param  target	element - the target input field or division or span
+	 * @param  settings  object - the new settings to use for this date picker instance (anonymous)
+	 */
+	_attachDatepicker: function(target, settings) {
+		var nodeName, inline, inst;
+		nodeName = target.nodeName.toLowerCase();
+		inline = (nodeName === "div" || nodeName === "span");
+		if (!target.id) {
+			this.uuid += 1;
+			target.id = "dp" + this.uuid;
+		}
+		inst = this._newInst($(target), inline);
+		inst.settings = $.extend({}, settings || {});
+		if (nodeName === "input") {
+			this._connectDatepicker(target, inst);
+		} else if (inline) {
+			this._inlineDatepicker(target, inst);
+		}
+	},
+
+	/* Create a new instance object. */
+	_newInst: function(target, inline) {
+		var id = target[0].id.replace(/([^A-Za-z0-9_\-])/g, "\\\\$1"); // escape jQuery meta chars
+		return {id: id, input: target, // associated target
+			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
+			drawMonth: 0, drawYear: 0, // month being drawn
+			inline: inline, // is datepicker inline or not
+			dpDiv: (!inline ? this.dpDiv : // presentation div
+			datepicker_bindHover($("<div class='" + this._inlineClass + " ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")))};
+	},
+
+	/* Attach the date picker to an input field. */
+	_connectDatepicker: function(target, inst) {
+		var input = $(target);
+		inst.append = $([]);
+		inst.trigger = $([]);
+		if (input.hasClass(this.markerClassName)) {
+			return;
+		}
+		this._attachments(input, inst);
+		input.addClass(this.markerClassName).keydown(this._doKeyDown).
+			keypress(this._doKeyPress).keyup(this._doKeyUp);
+		this._autoSize(inst);
+		$.data(target, "datepicker", inst);
+		//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)
+		if( inst.settings.disabled ) {
+			this._disableDatepicker( target );
+		}
+	},
+
+	/* Make attachments based on settings. */
+	_attachments: function(input, inst) {
+		var showOn, buttonText, buttonImage,
+			appendText = this._get(inst, "appendText"),
+			isRTL = this._get(inst, "isRTL");
+
+		if (inst.append) {
+			inst.append.remove();
+		}
+		if (appendText) {
+			inst.append = $("<span class='" + this._appendClass + "'>" + appendText + "</span>");
+			input[isRTL ? "before" : "after"](inst.append);
+		}
+
+		input.unbind("focus", this._showDatepicker);
+
+		if (inst.trigger) {
+			inst.trigger.remove();
+		}
+
+		showOn = this._get(inst, "showOn");
+		if (showOn === "focus" || showOn === "both") { // pop-up date picker when in the marked field
+			input.focus(this._showDatepicker);
+		}
+		if (showOn === "button" || showOn === "both") { // pop-up date picker when button clicked
+			buttonText = this._get(inst, "buttonText");
+			buttonImage = this._get(inst, "buttonImage");
+			inst.trigger = $(this._get(inst, "buttonImageOnly") ?
+				$("<img/>").addClass(this._triggerClass).
+					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
+				$("<button type='button'></button>").addClass(this._triggerClass).
+					html(!buttonImage ? buttonText : $("<img/>").attr(
+					{ src:buttonImage, alt:buttonText, title:buttonText })));
+			input[isRTL ? "before" : "after"](inst.trigger);
+			inst.trigger.click(function() {
+				if ($.datepicker._datepickerShowing && $.datepicker._lastInput === input[0]) {
+					$.datepicker._hideDatepicker();
+				} else if ($.datepicker._datepickerShowing && $.datepicker._lastInput !== input[0]) {
+					$.datepicker._hideDatepicker();
+					$.datepicker._showDatepicker(input[0]);
+				} else {
+					$.datepicker._showDatepicker(input[0]);
+				}
+				return false;
+			});
+		}
+	},
+
+	/* Apply the maximum length for the date format. */
+	_autoSize: function(inst) {
+		if (this._get(inst, "autoSize") && !inst.inline) {
+			var findMax, max, maxI, i,
+				date = new Date(2009, 12 - 1, 20), // Ensure double digits
+				dateFormat = this._get(inst, "dateFormat");
+
+			if (dateFormat.match(/[DM]/)) {
+				findMax = function(names) {
+					max = 0;
+					maxI = 0;
+					for (i = 0; i < names.length; i++) {
+						if (names[i].length > max) {
+							max = names[i].length;
+							maxI = i;
+						}
+					}
+					return maxI;
+				};
+				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
+					"monthNames" : "monthNamesShort"))));
+				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
+					"dayNames" : "dayNamesShort"))) + 20 - date.getDay());
+			}
+			inst.input.attr("size", this._formatDate(inst, date).length);
+		}
+	},
+
+	/* Attach an inline date picker to a div. */
+	_inlineDatepicker: function(target, inst) {
+		var divSpan = $(target);
+		if (divSpan.hasClass(this.markerClassName)) {
+			return;
+		}
+		divSpan.addClass(this.markerClassName).append(inst.dpDiv);
+		$.data(target, "datepicker", inst);
+		this._setDate(inst, this._getDefaultDate(inst), true);
+		this._updateDatepicker(inst);
+		this._updateAlternate(inst);
+		//If disabled option is true, disable the datepicker before showing it (see ticket #5665)
+		if( inst.settings.disabled ) {
+			this._disableDatepicker( target );
+		}
+		// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements
+		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height
+		inst.dpDiv.css( "display", "block" );
+	},
+
+	/* Pop-up the date picker in a "dialog" box.
+	 * @param  input element - ignored
+	 * @param  date	string or Date - the initial date to display
+	 * @param  onSelect  function - the function to call when a date is selected
+	 * @param  settings  object - update the dialog date picker instance's settings (anonymous object)
+	 * @param  pos int[2] - coordinates for the dialog's position within the screen or
+	 *					event - with x/y coordinates or
+	 *					leave empty for default (screen centre)
+	 * @return the manager object
+	 */
+	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
+		var id, browserWidth, browserHeight, scrollX, scrollY,
+			inst = this._dialogInst; // internal instance
+
+		if (!inst) {
+			this.uuid += 1;
+			id = "dp" + this.uuid;
+			this._dialogInput = $("<input type='text' id='" + id +
+				"' style='position: absolute; top: -100px; width: 0px;'/>");
+			this._dialogInput.keydown(this._doKeyDown);
+			$("body").append(this._dialogInput);
+			inst = this._dialogInst = this._newInst(this._dialogInput, false);
+			inst.settings = {};
+			$.data(this._dialogInput[0], "datepicker", inst);
+		}
+		datepicker_extendRemove(inst.settings, settings || {});
+		date = (date && date.constructor === Date ? this._formatDate(inst, date) : date);
+		this._dialogInput.val(date);
+
+		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
+		if (!this._pos) {
+			browserWidth = document.documentElement.clientWidth;
+			browserHeight = document.documentElement.clientHeight;
+			scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
+			scrollY = document.documentElement.scrollTop || document.body.scrollTop;
+			this._pos = // should use actual width/height below
+				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
+		}
+
+		// move input on screen for focus, but hidden behind dialog
+		this._dialogInput.css("left", (this._pos[0] + 20) + "px").css("top", this._pos[1] + "px");
+		inst.settings.onSelect = onSelect;
+		this._inDialog = true;
+		this.dpDiv.addClass(this._dialogClass);
+		this._showDatepicker(this._dialogInput[0]);
+		if ($.blockUI) {
+			$.blockUI(this.dpDiv);
+		}
+		$.data(this._dialogInput[0], "datepicker", inst);
+		return this;
+	},
+
+	/* Detach a datepicker from its control.
+	 * @param  target	element - the target input field or division or span
+	 */
+	_destroyDatepicker: function(target) {
+		var nodeName,
+			$target = $(target),
+			inst = $.data(target, "datepicker");
+
+		if (!$target.hasClass(this.markerClassName)) {
+			return;
+		}
+
+		nodeName = target.nodeName.toLowerCase();
+		$.removeData(target, "datepicker");
+		if (nodeName === "input") {
+			inst.append.remove();
+			inst.trigger.remove();
+			$target.removeClass(this.markerClassName).
+				unbind("focus", this._showDatepicker).
+				unbind("keydown", this._doKeyDown).
+				unbind("keypress", this._doKeyPress).
+				unbind("keyup", this._doKeyUp);
+		} else if (nodeName === "div" || nodeName === "span") {
+			$target.removeClass(this.markerClassName).empty();
+		}
+
+		if ( datepicker_instActive === inst ) {
+			datepicker_instActive = null;
+		}
+	},
+
+	/* Enable the date picker to a jQuery selection.
+	 * @param  target	element - the target input field or division or span
+	 */
+	_enableDatepicker: function(target) {
+		var nodeName, inline,
+			$target = $(target),
+			inst = $.data(target, "datepicker");
+
+		if (!$target.hasClass(this.markerClassName)) {
+			return;
+		}
+
+		nodeName = target.nodeName.toLowerCase();
+		if (nodeName === "input") {
+			target.disabled = false;
+			inst.trigger.filter("button").
+				each(function() { this.disabled = false; }).end().
+				filter("img").css({opacity: "1.0", cursor: ""});
+		} else if (nodeName === "div" || nodeName === "span") {
+			inline = $target.children("." + this._inlineClass);
+			inline.children().removeClass("ui-state-disabled");
+			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+				prop("disabled", false);
+		}
+		this._disabledInputs = $.map(this._disabledInputs,
+			function(value) { return (value === target ? null : value); }); // delete entry
+	},
+
+	/* Disable the date picker to a jQuery selection.
+	 * @param  target	element - the target input field or division or span
+	 */
+	_disableDatepicker: function(target) {
+		var nodeName, inline,
+			$target = $(target),
+			inst = $.data(target, "datepicker");
+
+		if (!$target.hasClass(this.markerClassName)) {
+			return;
+		}
+
+		nodeName = target.nodeName.toLowerCase();
+		if (nodeName === "input") {
+			target.disabled = true;
+			inst.trigger.filter("button").
+				each(function() { this.disabled = true; }).end().
+				filter("img").css({opacity: "0.5", cursor: "default"});
+		} else if (nodeName === "div" || nodeName === "span") {
+			inline = $target.children("." + this._inlineClass);
+			inline.children().addClass("ui-state-disabled");
+			inline.find("select.ui-datepicker-month, select.ui-datepicker-year").
+				prop("disabled", true);
+		}
+		this._disabledInputs = $.map(this._disabledInputs,
+			function(value) { return (value === target ? null : value); }); // delete entry
+		this._disabledInputs[this._disabledInputs.length] = target;
+	},
+
+	/* Is the first field in a jQuery collection disabled as a datepicker?
+	 * @param  target	element - the target input field or division or span
+	 * @return boolean - true if disabled, false if enabled
+	 */
+	_isDisabledDatepicker: function(target) {
+		if (!target) {
+			return false;
+		}
+		for (var i = 0; i < this._disabledInputs.length; i++) {
+			if (this._disabledInputs[i] === target) {
+				return true;
+			}
+		}
+		return false;
+	},
+
+	/* Retrieve the instance data for the target control.
+	 * @param  target  element - the target input field or division or span
+	 * @return  object - the associated instance data
+	 * @throws  error if a jQuery problem getting data
+	 */
+	_getInst: function(target) {
+		try {
+			return $.data(target, "datepicker");
+		}
+		catch (err) {
+			throw "Missing instance data for this datepicker";
+		}
+	},
+
+	/* Update or retrieve the settings for a date picker attached to an input field or division.
+	 * @param  target  element - the target input field or division or span
+	 * @param  name	object - the new settings to update or
+	 *				string - the name of the setting to change or retrieve,
+	 *				when retrieving also "all" for all instance settings or
+	 *				"defaults" for all global defaults
+	 * @param  value   any - the new value for the setting
+	 *				(omit if above is an object or to retrieve a value)
+	 */
+	_optionDatepicker: function(target, name, value) {
+		var settings, date, minDate, maxDate,
+			inst = this._getInst(target);
+
+		if (arguments.length === 2 && typeof name === "string") {
+			return (name === "defaults" ? $.extend({}, $.datepicker._defaults) :
+				(inst ? (name === "all" ? $.extend({}, inst.settings) :
+				this._get(inst, name)) : null));
+		}
+
+		settings = name || {};
+		if (typeof name === "string") {
+			settings = {};
+			settings[name] = value;
+		}
+
+		if (inst) {
+			if (this._curInst === inst) {
+				this._hideDatepicker();
+			}
+
+			date = this._getDateDatepicker(target, true);
+			minDate = this._getMinMaxDate(inst, "min");
+			maxDate = this._getMinMaxDate(inst, "max");
+			datepicker_extendRemove(inst.settings, settings);
+			// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided
+			if (minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined) {
+				inst.settings.minDate = this._formatDate(inst, minDate);
+			}
+			if (maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined) {
+				inst.settings.maxDate = this._formatDate(inst, maxDate);
+			}
+			if ( "disabled" in settings ) {
+				if ( settings.disabled ) {
+					this._disableDatepicker(target);
+				} else {
+					this._enableDatepicker(target);
+				}
+			}
+			this._attachments($(target), inst);
+			this._autoSize(inst);
+			this._setDate(inst, date);
+			this._updateAlternate(inst);
+			this._updateDatepicker(inst);
+		}
+	},
+
+	// change method deprecated
+	_changeDatepicker: function(target, name, value) {
+		this._optionDatepicker(target, name, value);
+	},
+
+	/* Redraw the date picker attached to an input field or division.
+	 * @param  target  element - the target input field or division or span
+	 */
+	_refreshDatepicker: function(target) {
+		var inst = this._getInst(target);
+		if (inst) {
+			this._updateDatepicker(inst);
+		}
+	},
+
+	/* Set the dates for a jQuery selection.
+	 * @param  target element - the target input field or division or span
+	 * @param  date	Date - the new date
+	 */
+	_setDateDatepicker: function(target, date) {
+		var inst = this._getInst(target);
+		if (inst) {
+			this._setDate(inst, date);
+			this._updateDatepicker(inst);
+			this._updateAlternate(inst);
+		}
+	},
+
+	/* Get the date(s) for the first entry in a jQuery selection.
+	 * @param  target element - the target input field or division or span
+	 * @param  noDefault boolean - true if no default date is to be used
+	 * @return Date - the current date
+	 */
+	_getDateDatepicker: function(target, noDefault) {
+		var inst = this._getInst(target);
+		if (inst && !inst.inline) {
+			this._setDateFromField(inst, noDefault);
+		}
+		return (inst ? this._getDate(inst) : null);
+	},
+
+	/* Handle keystrokes. */
+	_doKeyDown: function(event) {
+		var onSelect, dateStr, sel,
+			inst = $.datepicker._getInst(event.target),
+			handled = true,
+			isRTL = inst.dpDiv.is(".ui-datepicker-rtl");
+
+		inst._keyEvent = true;
+		if ($.datepicker._datepickerShowing) {
+			switch (event.keyCode) {
+				case 9: $.datepicker._hideDatepicker();
+						handled = false;
+						break; // hide on tab out
+				case 13: sel = $("td." + $.datepicker._dayOverClass + ":not(." +
+									$.datepicker._currentClass + ")", inst.dpDiv);
+						if (sel[0]) {
+							$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
+						}
+
+						onSelect = $.datepicker._get(inst, "onSelect");
+						if (onSelect) {
+							dateStr = $.datepicker._formatDate(inst);
+
+							// trigger custom callback
+							onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);
+						} else {
+							$.datepicker._hideDatepicker();
+						}
+
+						return false; // don't submit the form
+				case 27: $.datepicker._hideDatepicker();
+						break; // hide on escape
+				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+							-$.datepicker._get(inst, "stepBigMonths") :
+							-$.datepicker._get(inst, "stepMonths")), "M");
+						break; // previous month/year on page up/+ ctrl
+				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+							+$.datepicker._get(inst, "stepBigMonths") :
+							+$.datepicker._get(inst, "stepMonths")), "M");
+						break; // next month/year on page down/+ ctrl
+				case 35: if (event.ctrlKey || event.metaKey) {
+							$.datepicker._clearDate(event.target);
+						}
+						handled = event.ctrlKey || event.metaKey;
+						break; // clear on ctrl or command +end
+				case 36: if (event.ctrlKey || event.metaKey) {
+							$.datepicker._gotoToday(event.target);
+						}
+						handled = event.ctrlKey || event.metaKey;
+						break; // current on ctrl or command +home
+				case 37: if (event.ctrlKey || event.metaKey) {
+							$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), "D");
+						}
+						handled = event.ctrlKey || event.metaKey;
+						// -1 day on ctrl or command +left
+						if (event.originalEvent.altKey) {
+							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+								-$.datepicker._get(inst, "stepBigMonths") :
+								-$.datepicker._get(inst, "stepMonths")), "M");
+						}
+						// next month/year on alt +left on Mac
+						break;
+				case 38: if (event.ctrlKey || event.metaKey) {
+							$.datepicker._adjustDate(event.target, -7, "D");
+						}
+						handled = event.ctrlKey || event.metaKey;
+						break; // -1 week on ctrl or command +up
+				case 39: if (event.ctrlKey || event.metaKey) {
+							$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), "D");
+						}
+						handled = event.ctrlKey || event.metaKey;
+						// +1 day on ctrl or command +right
+						if (event.originalEvent.altKey) {
+							$.datepicker._adjustDate(event.target, (event.ctrlKey ?
+								+$.datepicker._get(inst, "stepBigMonths") :
+								+$.datepicker._get(inst, "stepMonths")), "M");
+						}
+						// next month/year on alt +right
+						break;
+				case 40: if (event.ctrlKey || event.metaKey) {
+							$.datepicker._adjustDate(event.target, +7, "D");
+						}
+						handled = event.ctrlKey || event.metaKey;
+						break; // +1 week on ctrl or command +down
+				default: handled = false;
+			}
+		} else if (event.keyCode === 36 && event.ctrlKey) { // display the date picker on ctrl+home
+			$.datepicker._showDatepicker(this);
+		} else {
+			handled = false;
+		}
+
+		if (handled) {
+			event.preventDefault();
+			event.stopPropagation();
+		}
+	},
+
+	/* Filter entered characters - based on date format. */
+	_doKeyPress: function(event) {
+		var chars, chr,
+			inst = $.datepicker._getInst(event.target);
+
+		if ($.datepicker._get(inst, "constrainInput")) {
+			chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat"));
+			chr = String.fromCharCode(event.charCode == null ? event.keyCode : event.charCode);
+			return event.ctrlKey || event.metaKey || (chr < " " || !chars || chars.indexOf(chr) > -1);
+		}
+	},
+
+	/* Synchronise manual entry and field/alternate field. */
+	_doKeyUp: function(event) {
+		var date,
+			inst = $.datepicker._getInst(event.target);
+
+		if (inst.input.val() !== inst.lastVal) {
+			try {
+				date = $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+					(inst.input ? inst.input.val() : null),
+					$.datepicker._getFormatConfig(inst));
+
+				if (date) { // only if valid
+					$.datepicker._setDateFromField(inst);
+					$.datepicker._updateAlternate(inst);
+					$.datepicker._updateDatepicker(inst);
+				}
+			}
+			catch (err) {
+			}
+		}
+		return true;
+	},
+
+	/* Pop-up the date picker for a given input field.
+	 * If false returned from beforeShow event handler do not show.
+	 * @param  input  element - the input field attached to the date picker or
+	 *					event - if triggered by focus
+	 */
+	_showDatepicker: function(input) {
+		input = input.target || input;
+		if (input.nodeName.toLowerCase() !== "input") { // find from button/image trigger
+			input = $("input", input.parentNode)[0];
+		}
+
+		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput === input) { // already here
+			return;
+		}
+
+		var inst, beforeShow, beforeShowSettings, isFixed,
+			offset, showAnim, duration;
+
+		inst = $.datepicker._getInst(input);
+		if ($.datepicker._curInst && $.datepicker._curInst !== inst) {
+			$.datepicker._curInst.dpDiv.stop(true, true);
+			if ( inst && $.datepicker._datepickerShowing ) {
+				$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
+			}
+		}
+
+		beforeShow = $.datepicker._get(inst, "beforeShow");
+		beforeShowSettings = beforeShow ? beforeShow.apply(input, [input, inst]) : {};
+		if(beforeShowSettings === false){
+			return;
+		}
+		datepicker_extendRemove(inst.settings, beforeShowSettings);
+
+		inst.lastVal = null;
+		$.datepicker._lastInput = input;
+		$.datepicker._setDateFromField(inst);
+
+		if ($.datepicker._inDialog) { // hide cursor
+			input.value = "";
+		}
+		if (!$.datepicker._pos) { // position below input
+			$.datepicker._pos = $.datepicker._findPos(input);
+			$.datepicker._pos[1] += input.offsetHeight; // add the height
+		}
+
+		isFixed = false;
+		$(input).parents().each(function() {
+			isFixed |= $(this).css("position") === "fixed";
+			return !isFixed;
+		});
+
+		offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
+		$.datepicker._pos = null;
+		//to avoid flashes on Firefox
+		inst.dpDiv.empty();
+		// determine sizing offscreen
+		inst.dpDiv.css({position: "absolute", display: "block", top: "-1000px"});
+		$.datepicker._updateDatepicker(inst);
+		// fix width for dynamic number of date pickers
+		// and adjust position before showing
+		offset = $.datepicker._checkOffset(inst, offset, isFixed);
+		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
+			"static" : (isFixed ? "fixed" : "absolute")), display: "none",
+			left: offset.left + "px", top: offset.top + "px"});
+
+		if (!inst.inline) {
+			showAnim = $.datepicker._get(inst, "showAnim");
+			duration = $.datepicker._get(inst, "duration");
+			inst.dpDiv.css( "z-index", datepicker_getZindex( $( input ) ) + 1 );
+			$.datepicker._datepickerShowing = true;
+
+			if ( $.effects && $.effects.effect[ showAnim ] ) {
+				inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration);
+			} else {
+				inst.dpDiv[showAnim || "show"](showAnim ? duration : null);
+			}
+
+			if ( $.datepicker._shouldFocusInput( inst ) ) {
+				inst.input.focus();
+			}
+
+			$.datepicker._curInst = inst;
+		}
+	},
+
+	/* Generate the date picker content. */
+	_updateDatepicker: function(inst) {
+		this.maxRows = 4; //Reset the max number of rows being displayed (see #7043)
+		datepicker_instActive = inst; // for delegate hover events
+		inst.dpDiv.empty().append(this._generateHTML(inst));
+		this._attachHandlers(inst);
+
+		var origyearshtml,
+			numMonths = this._getNumberOfMonths(inst),
+			cols = numMonths[1],
+			width = 17,
+			activeCell = inst.dpDiv.find( "." + this._dayOverClass + " a" );
+
+		if ( activeCell.length > 0 ) {
+			datepicker_handleMouseover.apply( activeCell.get( 0 ) );
+		}
+
+		inst.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");
+		if (cols > 1) {
+			inst.dpDiv.addClass("ui-datepicker-multi-" + cols).css("width", (width * cols) + "em");
+		}
+		inst.dpDiv[(numMonths[0] !== 1 || numMonths[1] !== 1 ? "add" : "remove") +
+			"Class"]("ui-datepicker-multi");
+		inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") +
+			"Class"]("ui-datepicker-rtl");
+
+		if (inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {
+			inst.input.focus();
+		}
+
+		// deffered render of the years select (to avoid flashes on Firefox)
+		if( inst.yearshtml ){
+			origyearshtml = inst.yearshtml;
+			setTimeout(function(){
+				//assure that inst.yearshtml didn't change.
+				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
+					inst.dpDiv.find("select.ui-datepicker-year:first").replaceWith(inst.yearshtml);
+				}
+				origyearshtml = inst.yearshtml = null;
+			}, 0);
+		}
+	},
+
+	// #6694 - don't focus the input if it's already focused
+	// this breaks the change event in IE
+	// Support: IE and jQuery <1.9
+	_shouldFocusInput: function( inst ) {
+		return inst.input && inst.input.is( ":visible" ) && !inst.input.is( ":disabled" ) && !inst.input.is( ":focus" );
+	},
+
+	/* Check positioning to remain on screen. */
+	_checkOffset: function(inst, offset, isFixed) {
+		var dpWidth = inst.dpDiv.outerWidth(),
+			dpHeight = inst.dpDiv.outerHeight(),
+			inputWidth = inst.input ? inst.input.outerWidth() : 0,
+			inputHeight = inst.input ? inst.input.outerHeight() : 0,
+			viewWidth = document.documentElement.clientWidth + (isFixed ? 0 : $(document).scrollLeft()),
+			viewHeight = document.documentElement.clientHeight + (isFixed ? 0 : $(document).scrollTop());
+
+		offset.left -= (this._get(inst, "isRTL") ? (dpWidth - inputWidth) : 0);
+		offset.left -= (isFixed && offset.left === inst.input.offset().left) ? $(document).scrollLeft() : 0;
+		offset.top -= (isFixed && offset.top === (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
+
+		// now check if datepicker is showing outside window viewport - move to a better place if so.
+		offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
+			Math.abs(offset.left + dpWidth - viewWidth) : 0);
+		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
+			Math.abs(dpHeight + inputHeight) : 0);
+
+		return offset;
+	},
+
+	/* Find an object's position on the screen. */
+	_findPos: function(obj) {
+		var position,
+			inst = this._getInst(obj),
+			isRTL = this._get(inst, "isRTL");
+
+		while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.hidden(obj))) {
+			obj = obj[isRTL ? "previousSibling" : "nextSibling"];
+		}
+
+		position = $(obj).offset();
+		return [position.left, position.top];
+	},
+
+	/* Hide the date picker from view.
+	 * @param  input  element - the input field attached to the date picker
+	 */
+	_hideDatepicker: function(input) {
+		var showAnim, duration, postProcess, onClose,
+			inst = this._curInst;
+
+		if (!inst || (input && inst !== $.data(input, "datepicker"))) {
+			return;
+		}
+
+		if (this._datepickerShowing) {
+			showAnim = this._get(inst, "showAnim");
+			duration = this._get(inst, "duration");
+			postProcess = function() {
+				$.datepicker._tidyDialog(inst);
+			};
+
+			// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
+			if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {
+				inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess);
+			} else {
+				inst.dpDiv[(showAnim === "slideDown" ? "slideUp" :
+					(showAnim === "fadeIn" ? "fadeOut" : "hide"))]((showAnim ? duration : null), postProcess);
+			}
+
+			if (!showAnim) {
+				postProcess();
+			}
+			this._datepickerShowing = false;
+
+			onClose = this._get(inst, "onClose");
+			if (onClose) {
+				onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]);
+			}
+
+			this._lastInput = null;
+			if (this._inDialog) {
+				this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" });
+				if ($.blockUI) {
+					$.unblockUI();
+					$("body").append(this.dpDiv);
+				}
+			}
+			this._inDialog = false;
+		}
+	},
+
+	/* Tidy up after a dialog display. */
+	_tidyDialog: function(inst) {
+		inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar");
+	},
+
+	/* Close date picker if clicked elsewhere. */
+	_checkExternalClick: function(event) {
+		if (!$.datepicker._curInst) {
+			return;
+		}
+
+		var $target = $(event.target),
+			inst = $.datepicker._getInst($target[0]);
+
+		if ( ( ( $target[0].id !== $.datepicker._mainDivId &&
+				$target.parents("#" + $.datepicker._mainDivId).length === 0 &&
+				!$target.hasClass($.datepicker.markerClassName) &&
+				!$target.closest("." + $.datepicker._triggerClass).length &&
+				$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI) ) ) ||
+			( $target.hasClass($.datepicker.markerClassName) && $.datepicker._curInst !== inst ) ) {
+				$.datepicker._hideDatepicker();
+		}
+	},
+
+	/* Adjust one of the date sub-fields. */
+	_adjustDate: function(id, offset, period) {
+		var target = $(id),
+			inst = this._getInst(target[0]);
+
+		if (this._isDisabledDatepicker(target[0])) {
+			return;
+		}
+		this._adjustInstDate(inst, offset +
+			(period === "M" ? this._get(inst, "showCurrentAtPos") : 0), // undo positioning
+			period);
+		this._updateDatepicker(inst);
+	},
+
+	/* Action for current link. */
+	_gotoToday: function(id) {
+		var date,
+			target = $(id),
+			inst = this._getInst(target[0]);
+
+		if (this._get(inst, "gotoCurrent") && inst.currentDay) {
+			inst.selectedDay = inst.currentDay;
+			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
+			inst.drawYear = inst.selectedYear = inst.currentYear;
+		} else {
+			date = new Date();
+			inst.selectedDay = date.getDate();
+			inst.drawMonth = inst.selectedMonth = date.getMonth();
+			inst.drawYear = inst.selectedYear = date.getFullYear();
+		}
+		this._notifyChange(inst);
+		this._adjustDate(target);
+	},
+
+	/* Action for selecting a new month/year. */
+	_selectMonthYear: function(id, select, period) {
+		var target = $(id),
+			inst = this._getInst(target[0]);
+
+		inst["selected" + (period === "M" ? "Month" : "Year")] =
+		inst["draw" + (period === "M" ? "Month" : "Year")] =
+			parseInt(select.options[select.selectedIndex].value,10);
+
+		this._notifyChange(inst);
+		this._adjustDate(target);
+	},
+
+	/* Action for selecting a day. */
+	_selectDay: function(id, month, year, td) {
+		var inst,
+			target = $(id);
+
+		if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
+			return;
+		}
+
+		inst = this._getInst(target[0]);
+		inst.selectedDay = inst.currentDay = $("a", td).html();
+		inst.selectedMonth = inst.currentMonth = month;
+		inst.selectedYear = inst.currentYear = year;
+		this._selectDate(id, this._formatDate(inst,
+			inst.currentDay, inst.currentMonth, inst.currentYear));
+	},
+
+	/* Erase the input field and hide the date picker. */
+	_clearDate: function(id) {
+		var target = $(id);
+		this._selectDate(target, "");
+	},
+
+	/* Update the input field with the selected date. */
+	_selectDate: function(id, dateStr) {
+		var onSelect,
+			target = $(id),
+			inst = this._getInst(target[0]);
+
+		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
+		if (inst.input) {
+			inst.input.val(dateStr);
+		}
+		this._updateAlternate(inst);
+
+		onSelect = this._get(inst, "onSelect");
+		if (onSelect) {
+			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]);  // trigger custom callback
+		} else if (inst.input) {
+			inst.input.trigger("change"); // fire the change event
+		}
+
+		if (inst.inline){
+			this._updateDatepicker(inst);
+		} else {
+			this._hideDatepicker();
+			this._lastInput = inst.input[0];
+			if (typeof(inst.input[0]) !== "object") {
+				inst.input.focus(); // restore focus
+			}
+			this._lastInput = null;
+		}
+	},
+
+	/* Update any alternate field to synchronise with the main field. */
+	_updateAlternate: function(inst) {
+		var altFormat, date, dateStr,
+			altField = this._get(inst, "altField");
+
+		if (altField) { // update alternate field too
+			altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat");
+			date = this._getDate(inst);
+			dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
+			$(altField).each(function() { $(this).val(dateStr); });
+		}
+	},
+
+	/* Set as beforeShowDay function to prevent selection of weekends.
+	 * @param  date  Date - the date to customise
+	 * @return [boolean, string] - is this date selectable?, what is its CSS class?
+	 */
+	noWeekends: function(date) {
+		var day = date.getDay();
+		return [(day > 0 && day < 6), ""];
+	},
+
+	/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
+	 * @param  date  Date - the date to get the week for
+	 * @return  number - the number of the week within the year that contains this date
+	 */
+	iso8601Week: function(date) {
+		var time,
+			checkDate = new Date(date.getTime());
+
+		// Find Thursday of this week starting on Monday
+		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
+
+		time = checkDate.getTime();
+		checkDate.setMonth(0); // Compare with Jan 1
+		checkDate.setDate(1);
+		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
+	},
+
+	/* Parse a string value into a date object.
+	 * See formatDate below for the possible formats.
+	 *
+	 * @param  format string - the expected format of the date
+	 * @param  value string - the date in the above format
+	 * @param  settings Object - attributes include:
+	 *					shortYearCutoff  number - the cutoff year for determining the century (optional)
+	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
+	 *					dayNames		string[7] - names of the days from Sunday (optional)
+	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
+	 *					monthNames		string[12] - names of the months (optional)
+	 * @return  Date - the extracted date value or null if value is blank
+	 */
+	parseDate: function (format, value, settings) {
+		if (format == null || value == null) {
+			throw "Invalid arguments";
+		}
+
+		value = (typeof value === "object" ? value.toString() : value + "");
+		if (value === "") {
+			return null;
+		}
+
+		var iFormat, dim, extra,
+			iValue = 0,
+			shortYearCutoffTemp = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff,
+			shortYearCutoff = (typeof shortYearCutoffTemp !== "string" ? shortYearCutoffTemp :
+				new Date().getFullYear() % 100 + parseInt(shortYearCutoffTemp, 10)),
+			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+			year = -1,
+			month = -1,
+			day = -1,
+			doy = -1,
+			literal = false,
+			date,
+			// Check whether a format character is doubled
+			lookAhead = function(match) {
+				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+				if (matches) {
+					iFormat++;
+				}
+				return matches;
+			},
+			// Extract a number from the string value
+			getNumber = function(match) {
+				var isDoubled = lookAhead(match),
+					size = (match === "@" ? 14 : (match === "!" ? 20 :
+					(match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))),
+					minSize = (match === "y" ? size : 1),
+					digits = new RegExp("^\\d{" + minSize + "," + size + "}"),
+					num = value.substring(iValue).match(digits);
+				if (!num) {
+					throw "Missing number at position " + iValue;
+				}
+				iValue += num[0].length;
+				return parseInt(num[0], 10);
+			},
+			// Extract a name from the string value and convert to an index
+			getName = function(match, shortNames, longNames) {
+				var index = -1,
+					names = $.map(lookAhead(match) ? longNames : shortNames, function (v, k) {
+						return [ [k, v] ];
+					}).sort(function (a, b) {
+						return -(a[1].length - b[1].length);
+					});
+
+				$.each(names, function (i, pair) {
+					var name = pair[1];
+					if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) {
+						index = pair[0];
+						iValue += name.length;
+						return false;
+					}
+				});
+				if (index !== -1) {
+					return index + 1;
+				} else {
+					throw "Unknown name at position " + iValue;
+				}
+			},
+			// Confirm that a literal character matches the string value
+			checkLiteral = function() {
+				if (value.charAt(iValue) !== format.charAt(iFormat)) {
+					throw "Unexpected literal at position " + iValue;
+				}
+				iValue++;
+			};
+
+		for (iFormat = 0; iFormat < format.length; iFormat++) {
+			if (literal) {
+				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+					literal = false;
+				} else {
+					checkLiteral();
+				}
+			} else {
+				switch (format.charAt(iFormat)) {
+					case "d":
+						day = getNumber("d");
+						break;
+					case "D":
+						getName("D", dayNamesShort, dayNames);
+						break;
+					case "o":
+						doy = getNumber("o");
+						break;
+					case "m":
+						month = getNumber("m");
+						break;
+					case "M":
+						month = getName("M", monthNamesShort, monthNames);
+						break;
+					case "y":
+						year = getNumber("y");
+						break;
+					case "@":
+						date = new Date(getNumber("@"));
+						year = date.getFullYear();
+						month = date.getMonth() + 1;
+						day = date.getDate();
+						break;
+					case "!":
+						date = new Date((getNumber("!") - this._ticksTo1970) / 10000);
+						year = date.getFullYear();
+						month = date.getMonth() + 1;
+						day = date.getDate();
+						break;
+					case "'":
+						if (lookAhead("'")){
+							checkLiteral();
+						} else {
+							literal = true;
+						}
+						break;
+					default:
+						checkLiteral();
+				}
+			}
+		}
+
+		if (iValue < value.length){
+			extra = value.substr(iValue);
+			if (!/^\s+/.test(extra)) {
+				throw "Extra/unparsed characters found in date: " + extra;
+			}
+		}
+
+		if (year === -1) {
+			year = new Date().getFullYear();
+		} else if (year < 100) {
+			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
+				(year <= shortYearCutoff ? 0 : -100);
+		}
+
+		if (doy > -1) {
+			month = 1;
+			day = doy;
+			do {
+				dim = this._getDaysInMonth(year, month - 1);
+				if (day <= dim) {
+					break;
+				}
+				month++;
+				day -= dim;
+			} while (true);
+		}
+
+		date = this._daylightSavingAdjust(new Date(year, month - 1, day));
+		if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {
+			throw "Invalid date"; // E.g. 31/02/00
+		}
+		return date;
+	},
+
+	/* Standard date formats. */
+	ATOM: "yy-mm-dd", // RFC 3339 (ISO 8601)
+	COOKIE: "D, dd M yy",
+	ISO_8601: "yy-mm-dd",
+	RFC_822: "D, d M y",
+	RFC_850: "DD, dd-M-y",
+	RFC_1036: "D, d M y",
+	RFC_1123: "D, d M yy",
+	RFC_2822: "D, d M yy",
+	RSS: "D, d M y", // RFC 822
+	TICKS: "!",
+	TIMESTAMP: "@",
+	W3C: "yy-mm-dd", // ISO 8601
+
+	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
+		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
+
+	/* Format a date object into a string value.
+	 * The format can be combinations of the following:
+	 * d  - day of month (no leading zero)
+	 * dd - day of month (two digit)
+	 * o  - day of year (no leading zeros)
+	 * oo - day of year (three digit)
+	 * D  - day name short
+	 * DD - day name long
+	 * m  - month of year (no leading zero)
+	 * mm - month of year (two digit)
+	 * M  - month name short
+	 * MM - month name long
+	 * y  - year (two digit)
+	 * yy - year (four digit)
+	 * @ - Unix timestamp (ms since 01/01/1970)
+	 * ! - Windows ticks (100ns since 01/01/0001)
+	 * "..." - literal text
+	 * '' - single quote
+	 *
+	 * @param  format string - the desired format of the date
+	 * @param  date Date - the date value to format
+	 * @param  settings Object - attributes include:
+	 *					dayNamesShort	string[7] - abbreviated names of the days from Sunday (optional)
+	 *					dayNames		string[7] - names of the days from Sunday (optional)
+	 *					monthNamesShort string[12] - abbreviated names of the months (optional)
+	 *					monthNames		string[12] - names of the months (optional)
+	 * @return  string - the date in the above format
+	 */
+	formatDate: function (format, date, settings) {
+		if (!date) {
+			return "";
+		}
+
+		var iFormat,
+			dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort,
+			dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames,
+			monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort,
+			monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames,
+			// Check whether a format character is doubled
+			lookAhead = function(match) {
+				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+				if (matches) {
+					iFormat++;
+				}
+				return matches;
+			},
+			// Format a number, with leading zero if necessary
+			formatNumber = function(match, value, len) {
+				var num = "" + value;
+				if (lookAhead(match)) {
+					while (num.length < len) {
+						num = "0" + num;
+					}
+				}
+				return num;
+			},
+			// Format a name, short or long as requested
+			formatName = function(match, value, shortNames, longNames) {
+				return (lookAhead(match) ? longNames[value] : shortNames[value]);
+			},
+			output = "",
+			literal = false;
+
+		if (date) {
+			for (iFormat = 0; iFormat < format.length; iFormat++) {
+				if (literal) {
+					if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+						literal = false;
+					} else {
+						output += format.charAt(iFormat);
+					}
+				} else {
+					switch (format.charAt(iFormat)) {
+						case "d":
+							output += formatNumber("d", date.getDate(), 2);
+							break;
+						case "D":
+							output += formatName("D", date.getDay(), dayNamesShort, dayNames);
+							break;
+						case "o":
+							output += formatNumber("o",
+								Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);
+							break;
+						case "m":
+							output += formatNumber("m", date.getMonth() + 1, 2);
+							break;
+						case "M":
+							output += formatName("M", date.getMonth(), monthNamesShort, monthNames);
+							break;
+						case "y":
+							output += (lookAhead("y") ? date.getFullYear() :
+								(date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100);
+							break;
+						case "@":
+							output += date.getTime();
+							break;
+						case "!":
+							output += date.getTime() * 10000 + this._ticksTo1970;
+							break;
+						case "'":
+							if (lookAhead("'")) {
+								output += "'";
+							} else {
+								literal = true;
+							}
+							break;
+						default:
+							output += format.charAt(iFormat);
+					}
+				}
+			}
+		}
+		return output;
+	},
+
+	/* Extract all possible characters from the date format. */
+	_possibleChars: function (format) {
+		var iFormat,
+			chars = "",
+			literal = false,
+			// Check whether a format character is doubled
+			lookAhead = function(match) {
+				var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);
+				if (matches) {
+					iFormat++;
+				}
+				return matches;
+			};
+
+		for (iFormat = 0; iFormat < format.length; iFormat++) {
+			if (literal) {
+				if (format.charAt(iFormat) === "'" && !lookAhead("'")) {
+					literal = false;
+				} else {
+					chars += format.charAt(iFormat);
+				}
+			} else {
+				switch (format.charAt(iFormat)) {
+					case "d": case "m": case "y": case "@":
+						chars += "0123456789";
+						break;
+					case "D": case "M":
+						return null; // Accept anything
+					case "'":
+						if (lookAhead("'")) {
+							chars += "'";
+						} else {
+							literal = true;
+						}
+						break;
+					default:
+						chars += format.charAt(iFormat);
+				}
+			}
+		}
+		return chars;
+	},
+
+	/* Get a setting value, defaulting if necessary. */
+	_get: function(inst, name) {
+		return inst.settings[name] !== undefined ?
+			inst.settings[name] : this._defaults[name];
+	},
+
+	/* Parse existing date and initialise date picker. */
+	_setDateFromField: function(inst, noDefault) {
+		if (inst.input.val() === inst.lastVal) {
+			return;
+		}
+
+		var dateFormat = this._get(inst, "dateFormat"),
+			dates = inst.lastVal = inst.input ? inst.input.val() : null,
+			defaultDate = this._getDefaultDate(inst),
+			date = defaultDate,
+			settings = this._getFormatConfig(inst);
+
+		try {
+			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
+		} catch (event) {
+			dates = (noDefault ? "" : dates);
+		}
+		inst.selectedDay = date.getDate();
+		inst.drawMonth = inst.selectedMonth = date.getMonth();
+		inst.drawYear = inst.selectedYear = date.getFullYear();
+		inst.currentDay = (dates ? date.getDate() : 0);
+		inst.currentMonth = (dates ? date.getMonth() : 0);
+		inst.currentYear = (dates ? date.getFullYear() : 0);
+		this._adjustInstDate(inst);
+	},
+
+	/* Retrieve the default date shown on opening. */
+	_getDefaultDate: function(inst) {
+		return this._restrictMinMax(inst,
+			this._determineDate(inst, this._get(inst, "defaultDate"), new Date()));
+	},
+
+	/* A date may be specified as an exact value or a relative one. */
+	_determineDate: function(inst, date, defaultDate) {
+		var offsetNumeric = function(offset) {
+				var date = new Date();
+				date.setDate(date.getDate() + offset);
+				return date;
+			},
+			offsetString = function(offset) {
+				try {
+					return $.datepicker.parseDate($.datepicker._get(inst, "dateFormat"),
+						offset, $.datepicker._getFormatConfig(inst));
+				}
+				catch (e) {
+					// Ignore
+				}
+
+				var date = (offset.toLowerCase().match(/^c/) ?
+					$.datepicker._getDate(inst) : null) || new Date(),
+					year = date.getFullYear(),
+					month = date.getMonth(),
+					day = date.getDate(),
+					pattern = /([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,
+					matches = pattern.exec(offset);
+
+				while (matches) {
+					switch (matches[2] || "d") {
+						case "d" : case "D" :
+							day += parseInt(matches[1],10); break;
+						case "w" : case "W" :
+							day += parseInt(matches[1],10) * 7; break;
+						case "m" : case "M" :
+							month += parseInt(matches[1],10);
+							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+							break;
+						case "y": case "Y" :
+							year += parseInt(matches[1],10);
+							day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
+							break;
+					}
+					matches = pattern.exec(offset);
+				}
+				return new Date(year, month, day);
+			},
+			newDate = (date == null || date === "" ? defaultDate : (typeof date === "string" ? offsetString(date) :
+				(typeof date === "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : new Date(date.getTime()))));
+
+		newDate = (newDate && newDate.toString() === "Invalid Date" ? defaultDate : newDate);
+		if (newDate) {
+			newDate.setHours(0);
+			newDate.setMinutes(0);
+			newDate.setSeconds(0);
+			newDate.setMilliseconds(0);
+		}
+		return this._daylightSavingAdjust(newDate);
+	},
+
+	/* Handle switch to/from daylight saving.
+	 * Hours may be non-zero on daylight saving cut-over:
+	 * > 12 when midnight changeover, but then cannot generate
+	 * midnight datetime, so jump to 1AM, otherwise reset.
+	 * @param  date  (Date) the date to check
+	 * @return  (Date) the corrected date
+	 */
+	_daylightSavingAdjust: function(date) {
+		if (!date) {
+			return null;
+		}
+		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
+		return date;
+	},
+
+	/* Set the date(s) directly. */
+	_setDate: function(inst, date, noChange) {
+		var clear = !date,
+			origMonth = inst.selectedMonth,
+			origYear = inst.selectedYear,
+			newDate = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
+
+		inst.selectedDay = inst.currentDay = newDate.getDate();
+		inst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();
+		inst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();
+		if ((origMonth !== inst.selectedMonth || origYear !== inst.selectedYear) && !noChange) {
+			this._notifyChange(inst);
+		}
+		this._adjustInstDate(inst);
+		if (inst.input) {
+			inst.input.val(clear ? "" : this._formatDate(inst));
+		}
+	},
+
+	/* Retrieve the date(s) directly. */
+	_getDate: function(inst) {
+		var startDate = (!inst.currentYear || (inst.input && inst.input.val() === "") ? null :
+			this._daylightSavingAdjust(new Date(
+			inst.currentYear, inst.currentMonth, inst.currentDay)));
+			return startDate;
+	},
+
+	/* Attach the onxxx handlers.  These are declared statically so
+	 * they work with static code transformers like Caja.
+	 */
+	_attachHandlers: function(inst) {
+		var stepMonths = this._get(inst, "stepMonths"),
+			id = "#" + inst.id.replace( /\\\\/g, "\\" );
+		inst.dpDiv.find("[data-handler]").map(function () {
+			var handler = {
+				prev: function () {
+					$.datepicker._adjustDate(id, -stepMonths, "M");
+				},
+				next: function () {
+					$.datepicker._adjustDate(id, +stepMonths, "M");
+				},
+				hide: function () {
+					$.datepicker._hideDatepicker();
+				},
+				today: function () {
+					$.datepicker._gotoToday(id);
+				},
+				selectDay: function () {
+					$.datepicker._selectDay(id, +this.getAttribute("data-month"), +this.getAttribute("data-year"), this);
+					return false;
+				},
+				selectMonth: function () {
+					$.datepicker._selectMonthYear(id, this, "M");
+					return false;
+				},
+				selectYear: function () {
+					$.datepicker._selectMonthYear(id, this, "Y");
+					return false;
+				}
+			};
+			$(this).bind(this.getAttribute("data-event"), handler[this.getAttribute("data-handler")]);
+		});
+	},
+
+	/* Generate the HTML for the current state of the date picker. */
+	_generateHTML: function(inst) {
+		var maxDraw, prevText, prev, nextText, next, currentText, gotoDate,
+			controls, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,
+			monthNames, monthNamesShort, beforeShowDay, showOtherMonths,
+			selectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,
+			cornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,
+			printDate, dRow, tbody, daySettings, otherMonth, unselectable,
+			tempDate = new Date(),
+			today = this._daylightSavingAdjust(
+				new Date(tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate())), // clear time
+			isRTL = this._get(inst, "isRTL"),
+			showButtonPanel = this._get(inst, "showButtonPanel"),
+			hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"),
+			navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"),
+			numMonths = this._getNumberOfMonths(inst),
+			showCurrentAtPos = this._get(inst, "showCurrentAtPos"),
+			stepMonths = this._get(inst, "stepMonths"),
+			isMultiMonth = (numMonths[0] !== 1 || numMonths[1] !== 1),
+			currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
+				new Date(inst.currentYear, inst.currentMonth, inst.currentDay))),
+			minDate = this._getMinMaxDate(inst, "min"),
+			maxDate = this._getMinMaxDate(inst, "max"),
+			drawMonth = inst.drawMonth - showCurrentAtPos,
+			drawYear = inst.drawYear;
+
+		if (drawMonth < 0) {
+			drawMonth += 12;
+			drawYear--;
+		}
+		if (maxDate) {
+			maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
+				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
+			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
+			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
+				drawMonth--;
+				if (drawMonth < 0) {
+					drawMonth = 11;
+					drawYear--;
+				}
+			}
+		}
+		inst.drawMonth = drawMonth;
+		inst.drawYear = drawYear;
+
+		prevText = this._get(inst, "prevText");
+		prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
+			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
+			this._getFormatConfig(inst)));
+
+		prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
+			"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'" +
+			" title='" + prevText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>" :
+			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+ prevText +"'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "e" : "w") + "'>" + prevText + "</span></a>"));
+
+		nextText = this._get(inst, "nextText");
+		nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
+			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
+			this._getFormatConfig(inst)));
+
+		next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
+			"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'" +
+			" title='" + nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>" :
+			(hideIfNoPrevNext ? "" : "<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+ nextText + "'><span class='ui-icon ui-icon-circle-triangle-" + ( isRTL ? "w" : "e") + "'>" + nextText + "</span></a>"));
+
+		currentText = this._get(inst, "currentText");
+		gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today);
+		currentText = (!navigationAsDateFormat ? currentText :
+			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
+
+		controls = (!inst.inline ? "<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>" +
+			this._get(inst, "closeText") + "</button>" : "");
+
+		buttonPanel = (showButtonPanel) ? "<div class='ui-datepicker-buttonpane ui-widget-content'>" + (isRTL ? controls : "") +
+			(this._isInRange(inst, gotoDate) ? "<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'" +
+			">" + currentText + "</button>" : "") + (isRTL ? "" : controls) + "</div>" : "";
+
+		firstDay = parseInt(this._get(inst, "firstDay"),10);
+		firstDay = (isNaN(firstDay) ? 0 : firstDay);
+
+		showWeek = this._get(inst, "showWeek");
+		dayNames = this._get(inst, "dayNames");
+		dayNamesMin = this._get(inst, "dayNamesMin");
+		monthNames = this._get(inst, "monthNames");
+		monthNamesShort = this._get(inst, "monthNamesShort");
+		beforeShowDay = this._get(inst, "beforeShowDay");
+		showOtherMonths = this._get(inst, "showOtherMonths");
+		selectOtherMonths = this._get(inst, "selectOtherMonths");
+		defaultDate = this._getDefaultDate(inst);
+		html = "";
+		dow;
+		for (row = 0; row < numMonths[0]; row++) {
+			group = "";
+			this.maxRows = 4;
+			for (col = 0; col < numMonths[1]; col++) {
+				selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
+				cornerClass = " ui-corner-all";
+				calender = "";
+				if (isMultiMonth) {
+					calender += "<div class='ui-datepicker-group";
+					if (numMonths[1] > 1) {
+						switch (col) {
+							case 0: calender += " ui-datepicker-group-first";
+								cornerClass = " ui-corner-" + (isRTL ? "right" : "left"); break;
+							case numMonths[1]-1: calender += " ui-datepicker-group-last";
+								cornerClass = " ui-corner-" + (isRTL ? "left" : "right"); break;
+							default: calender += " ui-datepicker-group-middle"; cornerClass = ""; break;
+						}
+					}
+					calender += "'>";
+				}
+				calender += "<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix" + cornerClass + "'>" +
+					(/all|left/.test(cornerClass) && row === 0 ? (isRTL ? next : prev) : "") +
+					(/all|right/.test(cornerClass) && row === 0 ? (isRTL ? prev : next) : "") +
+					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
+					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
+					"</div><table class='ui-datepicker-calendar'><thead>" +
+					"<tr>";
+				thead = (showWeek ? "<th class='ui-datepicker-week-col'>" + this._get(inst, "weekHeader") + "</th>" : "");
+				for (dow = 0; dow < 7; dow++) { // days of the week
+					day = (dow + firstDay) % 7;
+					thead += "<th scope='col'" + ((dow + firstDay + 6) % 7 >= 5 ? " class='ui-datepicker-week-end'" : "") + ">" +
+						"<span title='" + dayNames[day] + "'>" + dayNamesMin[day] + "</span></th>";
+				}
+				calender += thead + "</tr></thead><tbody>";
+				daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
+				if (drawYear === inst.selectedYear && drawMonth === inst.selectedMonth) {
+					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
+				}
+				leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
+				curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
+				numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows); //If multiple months, use the higher number of rows (see #7043)
+				this.maxRows = numRows;
+				printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
+				for (dRow = 0; dRow < numRows; dRow++) { // create date picker rows
+					calender += "<tr>";
+					tbody = (!showWeek ? "" : "<td class='ui-datepicker-week-col'>" +
+						this._get(inst, "calculateWeek")(printDate) + "</td>");
+					for (dow = 0; dow < 7; dow++) { // create date picker days
+						daySettings = (beforeShowDay ?
+							beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]);
+						otherMonth = (printDate.getMonth() !== drawMonth);
+						unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
+							(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
+						tbody += "<td class='" +
+							((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end" : "") + // highlight weekends
+							(otherMonth ? " ui-datepicker-other-month" : "") + // highlight days from other months
+							((printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent) || // user pressed key
+							(defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime()) ?
+							// or defaultDate is current printedDate and defaultDate is selectedDate
+							" " + this._dayOverClass : "") + // highlight selected day
+							(unselectable ? " " + this._unselectableClass + " ui-state-disabled": "") +  // highlight unselectable days
+							(otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + // highlight custom dates
+							(printDate.getTime() === currentDate.getTime() ? " " + this._currentClass : "") + // highlight selected day
+							(printDate.getTime() === today.getTime() ? " ui-datepicker-today" : "")) + "'" + // highlight today (if different)
+							((!otherMonth || showOtherMonths) && daySettings[2] ? " title='" + daySettings[2].replace(/'/g, "&#39;") + "'" : "") + // cell title
+							(unselectable ? "" : " data-handler='selectDay' data-event='click' data-month='" + printDate.getMonth() + "' data-year='" + printDate.getFullYear() + "'") + ">" + // actions
+							(otherMonth && !showOtherMonths ? "&#xa0;" : // display for other months
+							(unselectable ? "<span class='ui-state-default'>" + printDate.getDate() + "</span>" : "<a class='ui-state-default" +
+							(printDate.getTime() === today.getTime() ? " ui-state-highlight" : "") +
+							(printDate.getTime() === currentDate.getTime() ? " ui-state-active" : "") + // highlight selected day
+							(otherMonth ? " ui-priority-secondary" : "") + // distinguish dates from other months
+							"' href='#'>" + printDate.getDate() + "</a>")) + "</td>"; // display selectable date
+						printDate.setDate(printDate.getDate() + 1);
+						printDate = this._daylightSavingAdjust(printDate);
+					}
+					calender += tbody + "</tr>";
+				}
+				drawMonth++;
+				if (drawMonth > 11) {
+					drawMonth = 0;
+					drawYear++;
+				}
+				calender += "</tbody></table>" + (isMultiMonth ? "</div>" +
+							((numMonths[0] > 0 && col === numMonths[1]-1) ? "<div class='ui-datepicker-row-break'></div>" : "") : "");
+				group += calender;
+			}
+			html += group;
+		}
+		html += buttonPanel;
+		inst._keyEvent = false;
+		return html;
+	},
+
+	/* Generate the month and year header. */
+	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
+			secondary, monthNames, monthNamesShort) {
+
+		var inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,
+			changeMonth = this._get(inst, "changeMonth"),
+			changeYear = this._get(inst, "changeYear"),
+			showMonthAfterYear = this._get(inst, "showMonthAfterYear"),
+			html = "<div class='ui-datepicker-title'>",
+			monthHtml = "";
+
+		// month selection
+		if (secondary || !changeMonth) {
+			monthHtml += "<span class='ui-datepicker-month'>" + monthNames[drawMonth] + "</span>";
+		} else {
+			inMinYear = (minDate && minDate.getFullYear() === drawYear);
+			inMaxYear = (maxDate && maxDate.getFullYear() === drawYear);
+			monthHtml += "<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>";
+			for ( month = 0; month < 12; month++) {
+				if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) {
+					monthHtml += "<option value='" + month + "'" +
+						(month === drawMonth ? " selected='selected'" : "") +
+						">" + monthNamesShort[month] + "</option>";
+				}
+			}
+			monthHtml += "</select>";
+		}
+
+		if (!showMonthAfterYear) {
+			html += monthHtml + (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "");
+		}
+
+		// year selection
+		if ( !inst.yearshtml ) {
+			inst.yearshtml = "";
+			if (secondary || !changeYear) {
+				html += "<span class='ui-datepicker-year'>" + drawYear + "</span>";
+			} else {
+				// determine range of years to display
+				years = this._get(inst, "yearRange").split(":");
+				thisYear = new Date().getFullYear();
+				determineYear = function(value) {
+					var year = (value.match(/c[+\-].*/) ? drawYear + parseInt(value.substring(1), 10) :
+						(value.match(/[+\-].*/) ? thisYear + parseInt(value, 10) :
+						parseInt(value, 10)));
+					return (isNaN(year) ? thisYear : year);
+				};
+				year = determineYear(years[0]);
+				endYear = Math.max(year, determineYear(years[1] || ""));
+				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
+				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
+				inst.yearshtml += "<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";
+				for (; year <= endYear; year++) {
+					inst.yearshtml += "<option value='" + year + "'" +
+						(year === drawYear ? " selected='selected'" : "") +
+						">" + year + "</option>";
+				}
+				inst.yearshtml += "</select>";
+
+				html += inst.yearshtml;
+				inst.yearshtml = null;
+			}
+		}
+
+		html += this._get(inst, "yearSuffix");
+		if (showMonthAfterYear) {
+			html += (secondary || !(changeMonth && changeYear) ? "&#xa0;" : "") + monthHtml;
+		}
+		html += "</div>"; // Close datepicker_header
+		return html;
+	},
+
+	/* Adjust one of the date sub-fields. */
+	_adjustInstDate: function(inst, offset, period) {
+		var year = inst.drawYear + (period === "Y" ? offset : 0),
+			month = inst.drawMonth + (period === "M" ? offset : 0),
+			day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period === "D" ? offset : 0),
+			date = this._restrictMinMax(inst, this._daylightSavingAdjust(new Date(year, month, day)));
+
+		inst.selectedDay = date.getDate();
+		inst.drawMonth = inst.selectedMonth = date.getMonth();
+		inst.drawYear = inst.selectedYear = date.getFullYear();
+		if (period === "M" || period === "Y") {
+			this._notifyChange(inst);
+		}
+	},
+
+	/* Ensure a date is within any min/max bounds. */
+	_restrictMinMax: function(inst, date) {
+		var minDate = this._getMinMaxDate(inst, "min"),
+			maxDate = this._getMinMaxDate(inst, "max"),
+			newDate = (minDate && date < minDate ? minDate : date);
+		return (maxDate && newDate > maxDate ? maxDate : newDate);
+	},
+
+	/* Notify change of month/year. */
+	_notifyChange: function(inst) {
+		var onChange = this._get(inst, "onChangeMonthYear");
+		if (onChange) {
+			onChange.apply((inst.input ? inst.input[0] : null),
+				[inst.selectedYear, inst.selectedMonth + 1, inst]);
+		}
+	},
+
+	/* Determine the number of months to show. */
+	_getNumberOfMonths: function(inst) {
+		var numMonths = this._get(inst, "numberOfMonths");
+		return (numMonths == null ? [1, 1] : (typeof numMonths === "number" ? [1, numMonths] : numMonths));
+	},
+
+	/* Determine the current maximum date - ensure no time components are set. */
+	_getMinMaxDate: function(inst, minMax) {
+		return this._determineDate(inst, this._get(inst, minMax + "Date"), null);
+	},
+
+	/* Find the number of days in a given month. */
+	_getDaysInMonth: function(year, month) {
+		return 32 - this._daylightSavingAdjust(new Date(year, month, 32)).getDate();
+	},
+
+	/* Find the day of the week of the first of a month. */
+	_getFirstDayOfMonth: function(year, month) {
+		return new Date(year, month, 1).getDay();
+	},
+
+	/* Determines if we should allow a "next/prev" month display change. */
+	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
+		var numMonths = this._getNumberOfMonths(inst),
+			date = this._daylightSavingAdjust(new Date(curYear,
+			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
+
+		if (offset < 0) {
+			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
+		}
+		return this._isInRange(inst, date);
+	},
+
+	/* Is the given date in the accepted range? */
+	_isInRange: function(inst, date) {
+		var yearSplit, currentYear,
+			minDate = this._getMinMaxDate(inst, "min"),
+			maxDate = this._getMinMaxDate(inst, "max"),
+			minYear = null,
+			maxYear = null,
+			years = this._get(inst, "yearRange");
+			if (years){
+				yearSplit = years.split(":");
+				currentYear = new Date().getFullYear();
+				minYear = parseInt(yearSplit[0], 10);
+				maxYear = parseInt(yearSplit[1], 10);
+				if ( yearSplit[0].match(/[+\-].*/) ) {
+					minYear += currentYear;
+				}
+				if ( yearSplit[1].match(/[+\-].*/) ) {
+					maxYear += currentYear;
+				}
+			}
+
+		return ((!minDate || date.getTime() >= minDate.getTime()) &&
+			(!maxDate || date.getTime() <= maxDate.getTime()) &&
+			(!minYear || date.getFullYear() >= minYear) &&
+			(!maxYear || date.getFullYear() <= maxYear));
+	},
+
+	/* Provide the configuration settings for formatting/parsing. */
+	_getFormatConfig: function(inst) {
+		var shortYearCutoff = this._get(inst, "shortYearCutoff");
+		shortYearCutoff = (typeof shortYearCutoff !== "string" ? shortYearCutoff :
+			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
+		return {shortYearCutoff: shortYearCutoff,
+			dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"),
+			monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")};
+	},
+
+	/* Format the given date for display. */
+	_formatDate: function(inst, day, month, year) {
+		if (!day) {
+			inst.currentDay = inst.selectedDay;
+			inst.currentMonth = inst.selectedMonth;
+			inst.currentYear = inst.selectedYear;
+		}
+		var date = (day ? (typeof day === "object" ? day :
+			this._daylightSavingAdjust(new Date(year, month, day))) :
+			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
+		return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst));
+	}
+});
+
+/*
+ * Bind hover events for datepicker elements.
+ * Done via delegate so the binding only occurs once in the lifetime of the parent div.
+ * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.
+ */
+function datepicker_bindHover(dpDiv) {
+	var selector = "button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";
+	return dpDiv.delegate(selector, "mouseout", function() {
+			$(this).removeClass("ui-state-hover");
+			if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+				$(this).removeClass("ui-datepicker-prev-hover");
+			}
+			if (this.className.indexOf("ui-datepicker-next") !== -1) {
+				$(this).removeClass("ui-datepicker-next-hover");
+			}
+		})
+		.delegate( selector, "mouseover", datepicker_handleMouseover );
+}
+
+function datepicker_handleMouseover() {
+	if (!$.datepicker._isDisabledDatepicker( datepicker_instActive.inline? datepicker_instActive.dpDiv.parent()[0] : datepicker_instActive.input[0])) {
+		$(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+		$(this).addClass("ui-state-hover");
+		if (this.className.indexOf("ui-datepicker-prev") !== -1) {
+			$(this).addClass("ui-datepicker-prev-hover");
+		}
+		if (this.className.indexOf("ui-datepicker-next") !== -1) {
+			$(this).addClass("ui-datepicker-next-hover");
+		}
+	}
+}
+
+/* jQuery extend now ignores nulls! */
+function datepicker_extendRemove(target, props) {
+	$.extend(target, props);
+	for (var name in props) {
+		if (props[name] == null) {
+			target[name] = props[name];
+		}
+	}
+	return target;
+}
+
+/* Invoke the datepicker functionality.
+   @param  options  string - a command, optionally followed by additional parameters or
+					Object - settings for attaching new datepicker functionality
+   @return  jQuery object */
+$.fn.datepicker = function(options){
+
+	/* Verify an empty collection wasn't passed - Fixes #6976 */
+	if ( !this.length ) {
+		return this;
+	}
+
+	/* Initialise the date picker. */
+	if (!$.datepicker.initialized) {
+		$(document).mousedown($.datepicker._checkExternalClick);
+		$.datepicker.initialized = true;
+	}
+
+	/* Append datepicker main container to body if not exist. */
+	if ($("#"+$.datepicker._mainDivId).length === 0) {
+		$("body").append($.datepicker.dpDiv);
+	}
+
+	var otherArgs = Array.prototype.slice.call(arguments, 1);
+	if (typeof options === "string" && (options === "isDisabled" || options === "getDate" || options === "widget")) {
+		return $.datepicker["_" + options + "Datepicker"].
+			apply($.datepicker, [this[0]].concat(otherArgs));
+	}
+	if (options === "option" && arguments.length === 2 && typeof arguments[1] === "string") {
+		return $.datepicker["_" + options + "Datepicker"].
+			apply($.datepicker, [this[0]].concat(otherArgs));
+	}
+	return this.each(function() {
+		typeof options === "string" ?
+			$.datepicker["_" + options + "Datepicker"].
+				apply($.datepicker, [this].concat(otherArgs)) :
+			$.datepicker._attachDatepicker(this, options);
+	});
+};
+
+$.datepicker = new Datepicker(); // singleton instance
+$.datepicker.initialized = false;
+$.datepicker.uuid = new Date().getTime();
+$.datepicker.version = "1.11.4";
+
+var datepicker = $.datepicker;
+
+
+/*!
+ * jQuery UI Draggable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/draggable/
+ */
+
+
+$.widget("ui.draggable", $.ui.mouse, {
+	version: "1.11.4",
+	widgetEventPrefix: "drag",
+	options: {
+		addClasses: true,
+		appendTo: "parent",
+		axis: false,
+		connectToSortable: false,
+		containment: false,
+		cursor: "auto",
+		cursorAt: false,
+		grid: false,
+		handle: false,
+		helper: "original",
+		iframeFix: false,
+		opacity: false,
+		refreshPositions: false,
+		revert: false,
+		revertDuration: 500,
+		scope: "default",
+		scroll: true,
+		scrollSensitivity: 20,
+		scrollSpeed: 20,
+		snap: false,
+		snapMode: "both",
+		snapTolerance: 20,
+		stack: false,
+		zIndex: false,
+
+		// callbacks
+		drag: null,
+		start: null,
+		stop: null
+	},
+	_create: function() {
+
+		if ( this.options.helper === "original" ) {
+			this._setPositionRelative();
+		}
+		if (this.options.addClasses){
+			this.element.addClass("ui-draggable");
+		}
+		if (this.options.disabled){
+			this.element.addClass("ui-draggable-disabled");
+		}
+		this._setHandleClassName();
+
+		this._mouseInit();
+	},
+
+	_setOption: function( key, value ) {
+		this._super( key, value );
+		if ( key === "handle" ) {
+			this._removeHandleClassName();
+			this._setHandleClassName();
+		}
+	},
+
+	_destroy: function() {
+		if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) {
+			this.destroyOnClear = true;
+			return;
+		}
+		this.element.removeClass( "ui-draggable ui-draggable-dragging ui-draggable-disabled" );
+		this._removeHandleClassName();
+		this._mouseDestroy();
+	},
+
+	_mouseCapture: function(event) {
+		var o = this.options;
+
+		this._blurActiveElement( event );
+
+		// among others, prevent a drag on a resizable-handle
+		if (this.helper || o.disabled || $(event.target).closest(".ui-resizable-handle").length > 0) {
+			return false;
+		}
+
+		//Quit if we're not on a valid handle
+		this.handle = this._getHandle(event);
+		if (!this.handle) {
+			return false;
+		}
+
+		this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix );
+
+		return true;
+
+	},
+
+	_blockFrames: function( selector ) {
+		this.iframeBlocks = this.document.find( selector ).map(function() {
+			var iframe = $( this );
+
+			return $( "<div>" )
+				.css( "position", "absolute" )
+				.appendTo( iframe.parent() )
+				.outerWidth( iframe.outerWidth() )
+				.outerHeight( iframe.outerHeight() )
+				.offset( iframe.offset() )[ 0 ];
+		});
+	},
+
+	_unblockFrames: function() {
+		if ( this.iframeBlocks ) {
+			this.iframeBlocks.remove();
+			delete this.iframeBlocks;
+		}
+	},
+
+	_blurActiveElement: function( event ) {
+		var document = this.document[ 0 ];
+
+		// Only need to blur if the event occurred on the draggable itself, see #10527
+		if ( !this.handleElement.is( event.target ) ) {
+			return;
+		}
+
+		// support: IE9
+		// IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+		try {
+
+			// Support: IE9, IE10
+			// If the <body> is blurred, IE will switch windows, see #9520
+			if ( document.activeElement && document.activeElement.nodeName.toLowerCase() !== "body" ) {
+
+				// Blur any element that currently has focus, see #4261
+				$( document.activeElement ).blur();
+			}
+		} catch ( error ) {}
+	},
+
+	_mouseStart: function(event) {
+
+		var o = this.options;
+
+		//Create and append the visible helper
+		this.helper = this._createHelper(event);
+
+		this.helper.addClass("ui-draggable-dragging");
+
+		//Cache the helper size
+		this._cacheHelperProportions();
+
+		//If ddmanager is used for droppables, set the global draggable
+		if ($.ui.ddmanager) {
+			$.ui.ddmanager.current = this;
+		}
+
+		/*
+		 * - Position generation -
+		 * This block generates everything position related - it's the core of draggables.
+		 */
+
+		//Cache the margins of the original element
+		this._cacheMargins();
+
+		//Store the helper's css position
+		this.cssPosition = this.helper.css( "position" );
+		this.scrollParent = this.helper.scrollParent( true );
+		this.offsetParent = this.helper.offsetParent();
+		this.hasFixedAncestor = this.helper.parents().filter(function() {
+				return $( this ).css( "position" ) === "fixed";
+			}).length > 0;
+
+		//The element's absolute position on the page minus margins
+		this.positionAbs = this.element.offset();
+		this._refreshOffsets( event );
+
+		//Generate the original position
+		this.originalPosition = this.position = this._generatePosition( event, false );
+		this.originalPageX = event.pageX;
+		this.originalPageY = event.pageY;
+
+		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+		//Set a containment if given in the options
+		this._setContainment();
+
+		//Trigger event + callbacks
+		if (this._trigger("start", event) === false) {
+			this._clear();
+			return false;
+		}
+
+		//Recache the helper size
+		this._cacheHelperProportions();
+
+		//Prepare the droppable offsets
+		if ($.ui.ddmanager && !o.dropBehaviour) {
+			$.ui.ddmanager.prepareOffsets(this, event);
+		}
+
+		// Reset helper's right/bottom css if they're set and set explicit width/height instead
+		// as this prevents resizing of elements with right/bottom set (see #7772)
+		this._normalizeRightBottom();
+
+		this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+
+		//If the ddmanager is used for droppables, inform the manager that dragging has started (see #5003)
+		if ( $.ui.ddmanager ) {
+			$.ui.ddmanager.dragStart(this, event);
+		}
+
+		return true;
+	},
+
+	_refreshOffsets: function( event ) {
+		this.offset = {
+			top: this.positionAbs.top - this.margins.top,
+			left: this.positionAbs.left - this.margins.left,
+			scroll: false,
+			parent: this._getParentOffset(),
+			relative: this._getRelativeOffset()
+		};
+
+		this.offset.click = {
+			left: event.pageX - this.offset.left,
+			top: event.pageY - this.offset.top
+		};
+	},
+
+	_mouseDrag: function(event, noPropagation) {
+		// reset any necessary cached properties (see #5009)
+		if ( this.hasFixedAncestor ) {
+			this.offset.parent = this._getParentOffset();
+		}
+
+		//Compute the helpers position
+		this.position = this._generatePosition( event, true );
+		this.positionAbs = this._convertPositionTo("absolute");
+
+		//Call plugins and callbacks and use the resulting position if something is returned
+		if (!noPropagation) {
+			var ui = this._uiHash();
+			if (this._trigger("drag", event, ui) === false) {
+				this._mouseUp({});
+				return false;
+			}
+			this.position = ui.position;
+		}
+
+		this.helper[ 0 ].style.left = this.position.left + "px";
+		this.helper[ 0 ].style.top = this.position.top + "px";
+
+		if ($.ui.ddmanager) {
+			$.ui.ddmanager.drag(this, event);
+		}
+
+		return false;
+	},
+
+	_mouseStop: function(event) {
+
+		//If we are using droppables, inform the manager about the drop
+		var that = this,
+			dropped = false;
+		if ($.ui.ddmanager && !this.options.dropBehaviour) {
+			dropped = $.ui.ddmanager.drop(this, event);
+		}
+
+		//if a drop comes from outside (a sortable)
+		if (this.dropped) {
+			dropped = this.dropped;
+			this.dropped = false;
+		}
+
+		if ((this.options.revert === "invalid" && !dropped) || (this.options.revert === "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
+			$(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
+				if (that._trigger("stop", event) !== false) {
+					that._clear();
+				}
+			});
+		} else {
+			if (this._trigger("stop", event) !== false) {
+				this._clear();
+			}
+		}
+
+		return false;
+	},
+
+	_mouseUp: function( event ) {
+		this._unblockFrames();
+
+		//If the ddmanager is used for droppables, inform the manager that dragging has stopped (see #5003)
+		if ( $.ui.ddmanager ) {
+			$.ui.ddmanager.dragStop(this, event);
+		}
+
+		// Only need to focus if the event occurred on the draggable itself, see #10527
+		if ( this.handleElement.is( event.target ) ) {
+			// The interaction is over; whether or not the click resulted in a drag, focus the element
+			this.element.focus();
+		}
+
+		return $.ui.mouse.prototype._mouseUp.call(this, event);
+	},
+
+	cancel: function() {
+
+		if (this.helper.is(".ui-draggable-dragging")) {
+			this._mouseUp({});
+		} else {
+			this._clear();
+		}
+
+		return this;
+
+	},
+
+	_getHandle: function(event) {
+		return this.options.handle ?
+			!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
+			true;
+	},
+
+	_setHandleClassName: function() {
+		this.handleElement = this.options.handle ?
+			this.element.find( this.options.handle ) : this.element;
+		this.handleElement.addClass( "ui-draggable-handle" );
+	},
+
+	_removeHandleClassName: function() {
+		this.handleElement.removeClass( "ui-draggable-handle" );
+	},
+
+	_createHelper: function(event) {
+
+		var o = this.options,
+			helperIsFunction = $.isFunction( o.helper ),
+			helper = helperIsFunction ?
+				$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :
+				( o.helper === "clone" ?
+					this.element.clone().removeAttr( "id" ) :
+					this.element );
+
+		if (!helper.parents("body").length) {
+			helper.appendTo((o.appendTo === "parent" ? this.element[0].parentNode : o.appendTo));
+		}
+
+		// http://bugs.jqueryui.com/ticket/9446
+		// a helper function can return the original element
+		// which wouldn't have been set to relative in _create
+		if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {
+			this._setPositionRelative();
+		}
+
+		if (helper[0] !== this.element[0] && !(/(fixed|absolute)/).test(helper.css("position"))) {
+			helper.css("position", "absolute");
+		}
+
+		return helper;
+
+	},
+
+	_setPositionRelative: function() {
+		if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) {
+			this.element[ 0 ].style.position = "relative";
+		}
+	},
+
+	_adjustOffsetFromHelper: function(obj) {
+		if (typeof obj === "string") {
+			obj = obj.split(" ");
+		}
+		if ($.isArray(obj)) {
+			obj = { left: +obj[0], top: +obj[1] || 0 };
+		}
+		if ("left" in obj) {
+			this.offset.click.left = obj.left + this.margins.left;
+		}
+		if ("right" in obj) {
+			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+		}
+		if ("top" in obj) {
+			this.offset.click.top = obj.top + this.margins.top;
+		}
+		if ("bottom" in obj) {
+			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+		}
+	},
+
+	_isRootNode: function( element ) {
+		return ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];
+	},
+
+	_getParentOffset: function() {
+
+		//Get the offsetParent and cache its position
+		var po = this.offsetParent.offset(),
+			document = this.document[ 0 ];
+
+		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+		if (this.cssPosition === "absolute" && this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+			po.left += this.scrollParent.scrollLeft();
+			po.top += this.scrollParent.scrollTop();
+		}
+
+		if ( this._isRootNode( this.offsetParent[ 0 ] ) ) {
+			po = { top: 0, left: 0 };
+		}
+
+		return {
+			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"), 10) || 0),
+			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"), 10) || 0)
+		};
+
+	},
+
+	_getRelativeOffset: function() {
+		if ( this.cssPosition !== "relative" ) {
+			return { top: 0, left: 0 };
+		}
+
+		var p = this.element.position(),
+			scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
+
+		return {
+			top: p.top - ( parseInt(this.helper.css( "top" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),
+			left: p.left - ( parseInt(this.helper.css( "left" ), 10) || 0 ) + ( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )
+		};
+
+	},
+
+	_cacheMargins: function() {
+		this.margins = {
+			left: (parseInt(this.element.css("marginLeft"), 10) || 0),
+			top: (parseInt(this.element.css("marginTop"), 10) || 0),
+			right: (parseInt(this.element.css("marginRight"), 10) || 0),
+			bottom: (parseInt(this.element.css("marginBottom"), 10) || 0)
+		};
+	},
+
+	_cacheHelperProportions: function() {
+		this.helperProportions = {
+			width: this.helper.outerWidth(),
+			height: this.helper.outerHeight()
+		};
+	},
+
+	_setContainment: function() {
+
+		var isUserScrollable, c, ce,
+			o = this.options,
+			document = this.document[ 0 ];
+
+		this.relativeContainer = null;
+
+		if ( !o.containment ) {
+			this.containment = null;
+			return;
+		}
+
+		if ( o.containment === "window" ) {
+			this.containment = [
+				$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
+				$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
+				$( window ).scrollLeft() + $( window ).width() - this.helperProportions.width - this.margins.left,
+				$( window ).scrollTop() + ( $( window ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+			];
+			return;
+		}
+
+		if ( o.containment === "document") {
+			this.containment = [
+				0,
+				0,
+				$( document ).width() - this.helperProportions.width - this.margins.left,
+				( $( document ).height() || document.body.parentNode.scrollHeight ) - this.helperProportions.height - this.margins.top
+			];
+			return;
+		}
+
+		if ( o.containment.constructor === Array ) {
+			this.containment = o.containment;
+			return;
+		}
+
+		if ( o.containment === "parent" ) {
+			o.containment = this.helper[ 0 ].parentNode;
+		}
+
+		c = $( o.containment );
+		ce = c[ 0 ];
+
+		if ( !ce ) {
+			return;
+		}
+
+		isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) );
+
+		this.containment = [
+			( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
+			( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) + ( parseInt( c.css( "paddingTop" ), 10 ) || 0 ),
+			( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
+				( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) -
+				( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) -
+				this.helperProportions.width -
+				this.margins.left -
+				this.margins.right,
+			( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
+				( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) -
+				( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) -
+				this.helperProportions.height -
+				this.margins.top -
+				this.margins.bottom
+		];
+		this.relativeContainer = c;
+	},
+
+	_convertPositionTo: function(d, pos) {
+
+		if (!pos) {
+			pos = this.position;
+		}
+
+		var mod = d === "absolute" ? 1 : -1,
+			scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
+
+		return {
+			top: (
+				pos.top	+																// The absolute mouse position
+				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.top * mod -										// The offsetParent's offset without borders (offset + border)
+				( ( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod)
+			),
+			left: (
+				pos.left +																// The absolute mouse position
+				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
+				( ( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod)
+			)
+		};
+
+	},
+
+	_generatePosition: function( event, constrainPosition ) {
+
+		var containment, co, top, left,
+			o = this.options,
+			scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),
+			pageX = event.pageX,
+			pageY = event.pageY;
+
+		// Cache the scroll
+		if ( !scrollIsRootNode || !this.offset.scroll ) {
+			this.offset.scroll = {
+				top: this.scrollParent.scrollTop(),
+				left: this.scrollParent.scrollLeft()
+			};
+		}
+
+		/*
+		 * - Position constraining -
+		 * Constrain the position to a mix of grid, containment.
+		 */
+
+		// If we are not dragging yet, we won't check for options
+		if ( constrainPosition ) {
+			if ( this.containment ) {
+				if ( this.relativeContainer ){
+					co = this.relativeContainer.offset();
+					containment = [
+						this.containment[ 0 ] + co.left,
+						this.containment[ 1 ] + co.top,
+						this.containment[ 2 ] + co.left,
+						this.containment[ 3 ] + co.top
+					];
+				} else {
+					containment = this.containment;
+				}
+
+				if (event.pageX - this.offset.click.left < containment[0]) {
+					pageX = containment[0] + this.offset.click.left;
+				}
+				if (event.pageY - this.offset.click.top < containment[1]) {
+					pageY = containment[1] + this.offset.click.top;
+				}
+				if (event.pageX - this.offset.click.left > containment[2]) {
+					pageX = containment[2] + this.offset.click.left;
+				}
+				if (event.pageY - this.offset.click.top > containment[3]) {
+					pageY = containment[3] + this.offset.click.top;
+				}
+			}
+
+			if (o.grid) {
+				//Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950)
+				top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY;
+				pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+				left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX;
+				pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+			}
+
+			if ( o.axis === "y" ) {
+				pageX = this.originalPageX;
+			}
+
+			if ( o.axis === "x" ) {
+				pageY = this.originalPageY;
+			}
+		}
+
+		return {
+			top: (
+				pageY -																	// The absolute mouse position
+				this.offset.click.top	-												// Click offset (relative to the element)
+				this.offset.relative.top -												// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
+				( this.cssPosition === "fixed" ? -this.offset.scroll.top : ( scrollIsRootNode ? 0 : this.offset.scroll.top ) )
+			),
+			left: (
+				pageX -																	// The absolute mouse position
+				this.offset.click.left -												// Click offset (relative to the element)
+				this.offset.relative.left -												// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
+				( this.cssPosition === "fixed" ? -this.offset.scroll.left : ( scrollIsRootNode ? 0 : this.offset.scroll.left ) )
+			)
+		};
+
+	},
+
+	_clear: function() {
+		this.helper.removeClass("ui-draggable-dragging");
+		if (this.helper[0] !== this.element[0] && !this.cancelHelperRemoval) {
+			this.helper.remove();
+		}
+		this.helper = null;
+		this.cancelHelperRemoval = false;
+		if ( this.destroyOnClear ) {
+			this.destroy();
+		}
+	},
+
+	_normalizeRightBottom: function() {
+		if ( this.options.axis !== "y" && this.helper.css( "right" ) !== "auto" ) {
+			this.helper.width( this.helper.width() );
+			this.helper.css( "right", "auto" );
+		}
+		if ( this.options.axis !== "x" && this.helper.css( "bottom" ) !== "auto" ) {
+			this.helper.height( this.helper.height() );
+			this.helper.css( "bottom", "auto" );
+		}
+	},
+
+	// From now on bulk stuff - mainly helpers
+
+	_trigger: function( type, event, ui ) {
+		ui = ui || this._uiHash();
+		$.ui.plugin.call( this, type, [ event, ui, this ], true );
+
+		// Absolute position and offset (see #6884 ) have to be recalculated after plugins
+		if ( /^(drag|start|stop)/.test( type ) ) {
+			this.positionAbs = this._convertPositionTo( "absolute" );
+			ui.offset = this.positionAbs;
+		}
+		return $.Widget.prototype._trigger.call( this, type, event, ui );
+	},
+
+	plugins: {},
+
+	_uiHash: function() {
+		return {
+			helper: this.helper,
+			position: this.position,
+			originalPosition: this.originalPosition,
+			offset: this.positionAbs
+		};
+	}
+
+});
+
+$.ui.plugin.add( "draggable", "connectToSortable", {
+	start: function( event, ui, draggable ) {
+		var uiSortable = $.extend( {}, ui, {
+			item: draggable.element
+		});
+
+		draggable.sortables = [];
+		$( draggable.options.connectToSortable ).each(function() {
+			var sortable = $( this ).sortable( "instance" );
+
+			if ( sortable && !sortable.options.disabled ) {
+				draggable.sortables.push( sortable );
+
+				// refreshPositions is called at drag start to refresh the containerCache
+				// which is used in drag. This ensures it's initialized and synchronized
+				// with any changes that might have happened on the page since initialization.
+				sortable.refreshPositions();
+				sortable._trigger("activate", event, uiSortable);
+			}
+		});
+	},
+	stop: function( event, ui, draggable ) {
+		var uiSortable = $.extend( {}, ui, {
+			item: draggable.element
+		});
+
+		draggable.cancelHelperRemoval = false;
+
+		$.each( draggable.sortables, function() {
+			var sortable = this;
+
+			if ( sortable.isOver ) {
+				sortable.isOver = 0;
+
+				// Allow this sortable to handle removing the helper
+				draggable.cancelHelperRemoval = true;
+				sortable.cancelHelperRemoval = false;
+
+				// Use _storedCSS To restore properties in the sortable,
+				// as this also handles revert (#9675) since the draggable
+				// may have modified them in unexpected ways (#8809)
+				sortable._storedCSS = {
+					position: sortable.placeholder.css( "position" ),
+					top: sortable.placeholder.css( "top" ),
+					left: sortable.placeholder.css( "left" )
+				};
+
+				sortable._mouseStop(event);
+
+				// Once drag has ended, the sortable should return to using
+				// its original helper, not the shared helper from draggable
+				sortable.options.helper = sortable.options._helper;
+			} else {
+				// Prevent this Sortable from removing the helper.
+				// However, don't set the draggable to remove the helper
+				// either as another connected Sortable may yet handle the removal.
+				sortable.cancelHelperRemoval = true;
+
+				sortable._trigger( "deactivate", event, uiSortable );
+			}
+		});
+	},
+	drag: function( event, ui, draggable ) {
+		$.each( draggable.sortables, function() {
+			var innermostIntersecting = false,
+				sortable = this;
+
+			// Copy over variables that sortable's _intersectsWith uses
+			sortable.positionAbs = draggable.positionAbs;
+			sortable.helperProportions = draggable.helperProportions;
+			sortable.offset.click = draggable.offset.click;
+
+			if ( sortable._intersectsWith( sortable.containerCache ) ) {
+				innermostIntersecting = true;
+
+				$.each( draggable.sortables, function() {
+					// Copy over variables that sortable's _intersectsWith uses
+					this.positionAbs = draggable.positionAbs;
+					this.helperProportions = draggable.helperProportions;
+					this.offset.click = draggable.offset.click;
+
+					if ( this !== sortable &&
+							this._intersectsWith( this.containerCache ) &&
+							$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {
+						innermostIntersecting = false;
+					}
+
+					return innermostIntersecting;
+				});
+			}
+
+			if ( innermostIntersecting ) {
+				// If it intersects, we use a little isOver variable and set it once,
+				// so that the move-in stuff gets fired only once.
+				if ( !sortable.isOver ) {
+					sortable.isOver = 1;
+
+					// Store draggable's parent in case we need to reappend to it later.
+					draggable._parent = ui.helper.parent();
+
+					sortable.currentItem = ui.helper
+						.appendTo( sortable.element )
+						.data( "ui-sortable-item", true );
+
+					// Store helper option to later restore it
+					sortable.options._helper = sortable.options.helper;
+
+					sortable.options.helper = function() {
+						return ui.helper[ 0 ];
+					};
+
+					// Fire the start events of the sortable with our passed browser event,
+					// and our own helper (so it doesn't create a new one)
+					event.target = sortable.currentItem[ 0 ];
+					sortable._mouseCapture( event, true );
+					sortable._mouseStart( event, true, true );
+
+					// Because the browser event is way off the new appended portlet,
+					// modify necessary variables to reflect the changes
+					sortable.offset.click.top = draggable.offset.click.top;
+					sortable.offset.click.left = draggable.offset.click.left;
+					sortable.offset.parent.left -= draggable.offset.parent.left -
+						sortable.offset.parent.left;
+					sortable.offset.parent.top -= draggable.offset.parent.top -
+						sortable.offset.parent.top;
+
+					draggable._trigger( "toSortable", event );
+
+					// Inform draggable that the helper is in a valid drop zone,
+					// used solely in the revert option to handle "valid/invalid".
+					draggable.dropped = sortable.element;
+
+					// Need to refreshPositions of all sortables in the case that
+					// adding to one sortable changes the location of the other sortables (#9675)
+					$.each( draggable.sortables, function() {
+						this.refreshPositions();
+					});
+
+					// hack so receive/update callbacks work (mostly)
+					draggable.currentItem = draggable.element;
+					sortable.fromOutside = draggable;
+				}
+
+				if ( sortable.currentItem ) {
+					sortable._mouseDrag( event );
+					// Copy the sortable's position because the draggable's can potentially reflect
+					// a relative position, while sortable is always absolute, which the dragged
+					// element has now become. (#8809)
+					ui.position = sortable.position;
+				}
+			} else {
+				// If it doesn't intersect with the sortable, and it intersected before,
+				// we fake the drag stop of the sortable, but make sure it doesn't remove
+				// the helper by using cancelHelperRemoval.
+				if ( sortable.isOver ) {
+
+					sortable.isOver = 0;
+					sortable.cancelHelperRemoval = true;
+
+					// Calling sortable's mouseStop would trigger a revert,
+					// so revert must be temporarily false until after mouseStop is called.
+					sortable.options._revert = sortable.options.revert;
+					sortable.options.revert = false;
+
+					sortable._trigger( "out", event, sortable._uiHash( sortable ) );
+					sortable._mouseStop( event, true );
+
+					// restore sortable behaviors that were modfied
+					// when the draggable entered the sortable area (#9481)
+					sortable.options.revert = sortable.options._revert;
+					sortable.options.helper = sortable.options._helper;
+
+					if ( sortable.placeholder ) {
+						sortable.placeholder.remove();
+					}
+
+					// Restore and recalculate the draggable's offset considering the sortable
+					// may have modified them in unexpected ways. (#8809, #10669)
+					ui.helper.appendTo( draggable._parent );
+					draggable._refreshOffsets( event );
+					ui.position = draggable._generatePosition( event, true );
+
+					draggable._trigger( "fromSortable", event );
+
+					// Inform draggable that the helper is no longer in a valid drop zone
+					draggable.dropped = false;
+
+					// Need to refreshPositions of all sortables just in case removing
+					// from one sortable changes the location of other sortables (#9675)
+					$.each( draggable.sortables, function() {
+						this.refreshPositions();
+					});
+				}
+			}
+		});
+	}
+});
+
+$.ui.plugin.add("draggable", "cursor", {
+	start: function( event, ui, instance ) {
+		var t = $( "body" ),
+			o = instance.options;
+
+		if (t.css("cursor")) {
+			o._cursor = t.css("cursor");
+		}
+		t.css("cursor", o.cursor);
+	},
+	stop: function( event, ui, instance ) {
+		var o = instance.options;
+		if (o._cursor) {
+			$("body").css("cursor", o._cursor);
+		}
+	}
+});
+
+$.ui.plugin.add("draggable", "opacity", {
+	start: function( event, ui, instance ) {
+		var t = $( ui.helper ),
+			o = instance.options;
+		if (t.css("opacity")) {
+			o._opacity = t.css("opacity");
+		}
+		t.css("opacity", o.opacity);
+	},
+	stop: function( event, ui, instance ) {
+		var o = instance.options;
+		if (o._opacity) {
+			$(ui.helper).css("opacity", o._opacity);
+		}
+	}
+});
+
+$.ui.plugin.add("draggable", "scroll", {
+	start: function( event, ui, i ) {
+		if ( !i.scrollParentNotHidden ) {
+			i.scrollParentNotHidden = i.helper.scrollParent( false );
+		}
+
+		if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] && i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) {
+			i.overflowOffset = i.scrollParentNotHidden.offset();
+		}
+	},
+	drag: function( event, ui, i  ) {
+
+		var o = i.options,
+			scrolled = false,
+			scrollParent = i.scrollParentNotHidden[ 0 ],
+			document = i.document[ 0 ];
+
+		if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) {
+			if ( !o.axis || o.axis !== "x" ) {
+				if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY < o.scrollSensitivity ) {
+					scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;
+				} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {
+					scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;
+				}
+			}
+
+			if ( !o.axis || o.axis !== "y" ) {
+				if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX < o.scrollSensitivity ) {
+					scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;
+				} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {
+					scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;
+				}
+			}
+
+		} else {
+
+			if (!o.axis || o.axis !== "x") {
+				if (event.pageY - $(document).scrollTop() < o.scrollSensitivity) {
+					scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
+				} else if ($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity) {
+					scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
+				}
+			}
+
+			if (!o.axis || o.axis !== "y") {
+				if (event.pageX - $(document).scrollLeft() < o.scrollSensitivity) {
+					scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
+				} else if ($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity) {
+					scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
+				}
+			}
+
+		}
+
+		if (scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+			$.ui.ddmanager.prepareOffsets(i, event);
+		}
+
+	}
+});
+
+$.ui.plugin.add("draggable", "snap", {
+	start: function( event, ui, i ) {
+
+		var o = i.options;
+
+		i.snapElements = [];
+
+		$(o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap).each(function() {
+			var $t = $(this),
+				$o = $t.offset();
+			if (this !== i.element[0]) {
+				i.snapElements.push({
+					item: this,
+					width: $t.outerWidth(), height: $t.outerHeight(),
+					top: $o.top, left: $o.left
+				});
+			}
+		});
+
+	},
+	drag: function( event, ui, inst ) {
+
+		var ts, bs, ls, rs, l, r, t, b, i, first,
+			o = inst.options,
+			d = o.snapTolerance,
+			x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
+			y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
+
+		for (i = inst.snapElements.length - 1; i >= 0; i--){
+
+			l = inst.snapElements[i].left - inst.margins.left;
+			r = l + inst.snapElements[i].width;
+			t = inst.snapElements[i].top - inst.margins.top;
+			b = t + inst.snapElements[i].height;
+
+			if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d || !$.contains( inst.snapElements[ i ].item.ownerDocument, inst.snapElements[ i ].item ) ) {
+				if (inst.snapElements[i].snapping) {
+					(inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+				}
+				inst.snapElements[i].snapping = false;
+				continue;
+			}
+
+			if (o.snapMode !== "inner") {
+				ts = Math.abs(t - y2) <= d;
+				bs = Math.abs(b - y1) <= d;
+				ls = Math.abs(l - x2) <= d;
+				rs = Math.abs(r - x1) <= d;
+				if (ts) {
+					ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top;
+				}
+				if (bs) {
+					ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top;
+				}
+				if (ls) {
+					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left;
+				}
+				if (rs) {
+					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left;
+				}
+			}
+
+			first = (ts || bs || ls || rs);
+
+			if (o.snapMode !== "outer") {
+				ts = Math.abs(t - y1) <= d;
+				bs = Math.abs(b - y2) <= d;
+				ls = Math.abs(l - x1) <= d;
+				rs = Math.abs(r - x2) <= d;
+				if (ts) {
+					ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top;
+				}
+				if (bs) {
+					ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top;
+				}
+				if (ls) {
+					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left;
+				}
+				if (rs) {
+					ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left;
+				}
+			}
+
+			if (!inst.snapElements[i].snapping && (ts || bs || ls || rs || first)) {
+				(inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
+			}
+			inst.snapElements[i].snapping = (ts || bs || ls || rs || first);
+
+		}
+
+	}
+});
+
+$.ui.plugin.add("draggable", "stack", {
+	start: function( event, ui, instance ) {
+		var min,
+			o = instance.options,
+			group = $.makeArray($(o.stack)).sort(function(a, b) {
+				return (parseInt($(a).css("zIndex"), 10) || 0) - (parseInt($(b).css("zIndex"), 10) || 0);
+			});
+
+		if (!group.length) { return; }
+
+		min = parseInt($(group[0]).css("zIndex"), 10) || 0;
+		$(group).each(function(i) {
+			$(this).css("zIndex", min + i);
+		});
+		this.css("zIndex", (min + group.length));
+	}
+});
+
+$.ui.plugin.add("draggable", "zIndex", {
+	start: function( event, ui, instance ) {
+		var t = $( ui.helper ),
+			o = instance.options;
+
+		if (t.css("zIndex")) {
+			o._zIndex = t.css("zIndex");
+		}
+		t.css("zIndex", o.zIndex);
+	},
+	stop: function( event, ui, instance ) {
+		var o = instance.options;
+
+		if (o._zIndex) {
+			$(ui.helper).css("zIndex", o._zIndex);
+		}
+	}
+});
+
+var draggable = $.ui.draggable;
+
+
+/*!
+ * jQuery UI Resizable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/resizable/
+ */
+
+
+$.widget("ui.resizable", $.ui.mouse, {
+	version: "1.11.4",
+	widgetEventPrefix: "resize",
+	options: {
+		alsoResize: false,
+		animate: false,
+		animateDuration: "slow",
+		animateEasing: "swing",
+		aspectRatio: false,
+		autoHide: false,
+		containment: false,
+		ghost: false,
+		grid: false,
+		handles: "e,s,se",
+		helper: false,
+		maxHeight: null,
+		maxWidth: null,
+		minHeight: 10,
+		minWidth: 10,
+		// See #7960
+		zIndex: 90,
+
+		// callbacks
+		resize: null,
+		start: null,
+		stop: null
+	},
+
+	_num: function( value ) {
+		return parseInt( value, 10 ) || 0;
+	},
+
+	_isNumber: function( value ) {
+		return !isNaN( parseInt( value, 10 ) );
+	},
+
+	_hasScroll: function( el, a ) {
+
+		if ( $( el ).css( "overflow" ) === "hidden") {
+			return false;
+		}
+
+		var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
+			has = false;
+
+		if ( el[ scroll ] > 0 ) {
+			return true;
+		}
+
+		// TODO: determine which cases actually cause this to happen
+		// if the element doesn't have the scroll set, see if it's possible to
+		// set the scroll
+		el[ scroll ] = 1;
+		has = ( el[ scroll ] > 0 );
+		el[ scroll ] = 0;
+		return has;
+	},
+
+	_create: function() {
+
+		var n, i, handle, axis, hname,
+			that = this,
+			o = this.options;
+		this.element.addClass("ui-resizable");
+
+		$.extend(this, {
+			_aspectRatio: !!(o.aspectRatio),
+			aspectRatio: o.aspectRatio,
+			originalElement: this.element,
+			_proportionallyResizeElements: [],
+			_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
+		});
+
+		// Wrap the element if it cannot hold child nodes
+		if (this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)) {
+
+			this.element.wrap(
+				$("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({
+					position: this.element.css("position"),
+					width: this.element.outerWidth(),
+					height: this.element.outerHeight(),
+					top: this.element.css("top"),
+					left: this.element.css("left")
+				})
+			);
+
+			this.element = this.element.parent().data(
+				"ui-resizable", this.element.resizable( "instance" )
+			);
+
+			this.elementIsWrapper = true;
+
+			this.element.css({
+				marginLeft: this.originalElement.css("marginLeft"),
+				marginTop: this.originalElement.css("marginTop"),
+				marginRight: this.originalElement.css("marginRight"),
+				marginBottom: this.originalElement.css("marginBottom")
+			});
+			this.originalElement.css({
+				marginLeft: 0,
+				marginTop: 0,
+				marginRight: 0,
+				marginBottom: 0
+			});
+			// support: Safari
+			// Prevent Safari textarea resize
+			this.originalResizeStyle = this.originalElement.css("resize");
+			this.originalElement.css("resize", "none");
+
+			this._proportionallyResizeElements.push( this.originalElement.css({
+				position: "static",
+				zoom: 1,
+				display: "block"
+			}) );
+
+			// support: IE9
+			// avoid IE jump (hard set the margin)
+			this.originalElement.css({ margin: this.originalElement.css("margin") });
+
+			this._proportionallyResize();
+		}
+
+		this.handles = o.handles ||
+			( !$(".ui-resizable-handle", this.element).length ?
+				"e,s,se" : {
+					n: ".ui-resizable-n",
+					e: ".ui-resizable-e",
+					s: ".ui-resizable-s",
+					w: ".ui-resizable-w",
+					se: ".ui-resizable-se",
+					sw: ".ui-resizable-sw",
+					ne: ".ui-resizable-ne",
+					nw: ".ui-resizable-nw"
+				} );
+
+		this._handles = $();
+		if ( this.handles.constructor === String ) {
+
+			if ( this.handles === "all") {
+				this.handles = "n,e,s,w,se,sw,ne,nw";
+			}
+
+			n = this.handles.split(",");
+			this.handles = {};
+
+			for (i = 0; i < n.length; i++) {
+
+				handle = $.trim(n[i]);
+				hname = "ui-resizable-" + handle;
+				axis = $("<div class='ui-resizable-handle " + hname + "'></div>");
+
+				axis.css({ zIndex: o.zIndex });
+
+				// TODO : What's going on here?
+				if ("se" === handle) {
+					axis.addClass("ui-icon ui-icon-gripsmall-diagonal-se");
+				}
+
+				this.handles[handle] = ".ui-resizable-" + handle;
+				this.element.append(axis);
+			}
+
+		}
+
+		this._renderAxis = function(target) {
+
+			var i, axis, padPos, padWrapper;
+
+			target = target || this.element;
+
+			for (i in this.handles) {
+
+				if (this.handles[i].constructor === String) {
+					this.handles[i] = this.element.children( this.handles[ i ] ).first().show();
+				} else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {
+					this.handles[ i ] = $( this.handles[ i ] );
+					this._on( this.handles[ i ], { "mousedown": that._mouseDown });
+				}
+
+				if (this.elementIsWrapper && this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)) {
+
+					axis = $(this.handles[i], this.element);
+
+					padWrapper = /sw|ne|nw|se|n|s/.test(i) ? axis.outerHeight() : axis.outerWidth();
+
+					padPos = [ "padding",
+						/ne|nw|n/.test(i) ? "Top" :
+						/se|sw|s/.test(i) ? "Bottom" :
+						/^e$/.test(i) ? "Right" : "Left" ].join("");
+
+					target.css(padPos, padWrapper);
+
+					this._proportionallyResize();
+				}
+
+				this._handles = this._handles.add( this.handles[ i ] );
+			}
+		};
+
+		// TODO: make renderAxis a prototype function
+		this._renderAxis(this.element);
+
+		this._handles = this._handles.add( this.element.find( ".ui-resizable-handle" ) );
+		this._handles.disableSelection();
+
+		this._handles.mouseover(function() {
+			if (!that.resizing) {
+				if (this.className) {
+					axis = this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);
+				}
+				that.axis = axis && axis[1] ? axis[1] : "se";
+			}
+		});
+
+		if (o.autoHide) {
+			this._handles.hide();
+			$(this.element)
+				.addClass("ui-resizable-autohide")
+				.mouseenter(function() {
+					if (o.disabled) {
+						return;
+					}
+					$(this).removeClass("ui-resizable-autohide");
+					that._handles.show();
+				})
+				.mouseleave(function() {
+					if (o.disabled) {
+						return;
+					}
+					if (!that.resizing) {
+						$(this).addClass("ui-resizable-autohide");
+						that._handles.hide();
+					}
+				});
+		}
+
+		this._mouseInit();
+	},
+
+	_destroy: function() {
+
+		this._mouseDestroy();
+
+		var wrapper,
+			_destroy = function(exp) {
+				$(exp)
+					.removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing")
+					.removeData("resizable")
+					.removeData("ui-resizable")
+					.unbind(".resizable")
+					.find(".ui-resizable-handle")
+						.remove();
+			};
+
+		// TODO: Unwrap at same DOM position
+		if (this.elementIsWrapper) {
+			_destroy(this.element);
+			wrapper = this.element;
+			this.originalElement.css({
+				position: wrapper.css("position"),
+				width: wrapper.outerWidth(),
+				height: wrapper.outerHeight(),
+				top: wrapper.css("top"),
+				left: wrapper.css("left")
+			}).insertAfter( wrapper );
+			wrapper.remove();
+		}
+
+		this.originalElement.css("resize", this.originalResizeStyle);
+		_destroy(this.originalElement);
+
+		return this;
+	},
+
+	_mouseCapture: function(event) {
+		var i, handle,
+			capture = false;
+
+		for (i in this.handles) {
+			handle = $(this.handles[i])[0];
+			if (handle === event.target || $.contains(handle, event.target)) {
+				capture = true;
+			}
+		}
+
+		return !this.options.disabled && capture;
+	},
+
+	_mouseStart: function(event) {
+
+		var curleft, curtop, cursor,
+			o = this.options,
+			el = this.element;
+
+		this.resizing = true;
+
+		this._renderProxy();
+
+		curleft = this._num(this.helper.css("left"));
+		curtop = this._num(this.helper.css("top"));
+
+		if (o.containment) {
+			curleft += $(o.containment).scrollLeft() || 0;
+			curtop += $(o.containment).scrollTop() || 0;
+		}
+
+		this.offset = this.helper.offset();
+		this.position = { left: curleft, top: curtop };
+
+		this.size = this._helper ? {
+				width: this.helper.width(),
+				height: this.helper.height()
+			} : {
+				width: el.width(),
+				height: el.height()
+			};
+
+		this.originalSize = this._helper ? {
+				width: el.outerWidth(),
+				height: el.outerHeight()
+			} : {
+				width: el.width(),
+				height: el.height()
+			};
+
+		this.sizeDiff = {
+			width: el.outerWidth() - el.width(),
+			height: el.outerHeight() - el.height()
+		};
+
+		this.originalPosition = { left: curleft, top: curtop };
+		this.originalMousePosition = { left: event.pageX, top: event.pageY };
+
+		this.aspectRatio = (typeof o.aspectRatio === "number") ?
+			o.aspectRatio :
+			((this.originalSize.width / this.originalSize.height) || 1);
+
+		cursor = $(".ui-resizable-" + this.axis).css("cursor");
+		$("body").css("cursor", cursor === "auto" ? this.axis + "-resize" : cursor);
+
+		el.addClass("ui-resizable-resizing");
+		this._propagate("start", event);
+		return true;
+	},
+
+	_mouseDrag: function(event) {
+
+		var data, props,
+			smp = this.originalMousePosition,
+			a = this.axis,
+			dx = (event.pageX - smp.left) || 0,
+			dy = (event.pageY - smp.top) || 0,
+			trigger = this._change[a];
+
+		this._updatePrevProperties();
+
+		if (!trigger) {
+			return false;
+		}
+
+		data = trigger.apply(this, [ event, dx, dy ]);
+
+		this._updateVirtualBoundaries(event.shiftKey);
+		if (this._aspectRatio || event.shiftKey) {
+			data = this._updateRatio(data, event);
+		}
+
+		data = this._respectSize(data, event);
+
+		this._updateCache(data);
+
+		this._propagate("resize", event);
+
+		props = this._applyChanges();
+
+		if ( !this._helper && this._proportionallyResizeElements.length ) {
+			this._proportionallyResize();
+		}
+
+		if ( !$.isEmptyObject( props ) ) {
+			this._updatePrevProperties();
+			this._trigger( "resize", event, this.ui() );
+			this._applyChanges();
+		}
+
+		return false;
+	},
+
+	_mouseStop: function(event) {
+
+		this.resizing = false;
+		var pr, ista, soffseth, soffsetw, s, left, top,
+			o = this.options, that = this;
+
+		if (this._helper) {
+
+			pr = this._proportionallyResizeElements;
+			ista = pr.length && (/textarea/i).test(pr[0].nodeName);
+			soffseth = ista && this._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height;
+			soffsetw = ista ? 0 : that.sizeDiff.width;
+
+			s = {
+				width: (that.helper.width()  - soffsetw),
+				height: (that.helper.height() - soffseth)
+			};
+			left = (parseInt(that.element.css("left"), 10) +
+				(that.position.left - that.originalPosition.left)) || null;
+			top = (parseInt(that.element.css("top"), 10) +
+				(that.position.top - that.originalPosition.top)) || null;
+
+			if (!o.animate) {
+				this.element.css($.extend(s, { top: top, left: left }));
+			}
+
+			that.helper.height(that.size.height);
+			that.helper.width(that.size.width);
+
+			if (this._helper && !o.animate) {
+				this._proportionallyResize();
+			}
+		}
+
+		$("body").css("cursor", "auto");
+
+		this.element.removeClass("ui-resizable-resizing");
+
+		this._propagate("stop", event);
+
+		if (this._helper) {
+			this.helper.remove();
+		}
+
+		return false;
+
+	},
+
+	_updatePrevProperties: function() {
+		this.prevPosition = {
+			top: this.position.top,
+			left: this.position.left
+		};
+		this.prevSize = {
+			width: this.size.width,
+			height: this.size.height
+		};
+	},
+
+	_applyChanges: function() {
+		var props = {};
+
+		if ( this.position.top !== this.prevPosition.top ) {
+			props.top = this.position.top + "px";
+		}
+		if ( this.position.left !== this.prevPosition.left ) {
+			props.left = this.position.left + "px";
+		}
+		if ( this.size.width !== this.prevSize.width ) {
+			props.width = this.size.width + "px";
+		}
+		if ( this.size.height !== this.prevSize.height ) {
+			props.height = this.size.height + "px";
+		}
+
+		this.helper.css( props );
+
+		return props;
+	},
+
+	_updateVirtualBoundaries: function(forceAspectRatio) {
+		var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
+			o = this.options;
+
+		b = {
+			minWidth: this._isNumber(o.minWidth) ? o.minWidth : 0,
+			maxWidth: this._isNumber(o.maxWidth) ? o.maxWidth : Infinity,
+			minHeight: this._isNumber(o.minHeight) ? o.minHeight : 0,
+			maxHeight: this._isNumber(o.maxHeight) ? o.maxHeight : Infinity
+		};
+
+		if (this._aspectRatio || forceAspectRatio) {
+			pMinWidth = b.minHeight * this.aspectRatio;
+			pMinHeight = b.minWidth / this.aspectRatio;
+			pMaxWidth = b.maxHeight * this.aspectRatio;
+			pMaxHeight = b.maxWidth / this.aspectRatio;
+
+			if (pMinWidth > b.minWidth) {
+				b.minWidth = pMinWidth;
+			}
+			if (pMinHeight > b.minHeight) {
+				b.minHeight = pMinHeight;
+			}
+			if (pMaxWidth < b.maxWidth) {
+				b.maxWidth = pMaxWidth;
+			}
+			if (pMaxHeight < b.maxHeight) {
+				b.maxHeight = pMaxHeight;
+			}
+		}
+		this._vBoundaries = b;
+	},
+
+	_updateCache: function(data) {
+		this.offset = this.helper.offset();
+		if (this._isNumber(data.left)) {
+			this.position.left = data.left;
+		}
+		if (this._isNumber(data.top)) {
+			this.position.top = data.top;
+		}
+		if (this._isNumber(data.height)) {
+			this.size.height = data.height;
+		}
+		if (this._isNumber(data.width)) {
+			this.size.width = data.width;
+		}
+	},
+
+	_updateRatio: function( data ) {
+
+		var cpos = this.position,
+			csize = this.size,
+			a = this.axis;
+
+		if (this._isNumber(data.height)) {
+			data.width = (data.height * this.aspectRatio);
+		} else if (this._isNumber(data.width)) {
+			data.height = (data.width / this.aspectRatio);
+		}
+
+		if (a === "sw") {
+			data.left = cpos.left + (csize.width - data.width);
+			data.top = null;
+		}
+		if (a === "nw") {
+			data.top = cpos.top + (csize.height - data.height);
+			data.left = cpos.left + (csize.width - data.width);
+		}
+
+		return data;
+	},
+
+	_respectSize: function( data ) {
+
+		var o = this._vBoundaries,
+			a = this.axis,
+			ismaxw = this._isNumber(data.width) && o.maxWidth && (o.maxWidth < data.width),
+			ismaxh = this._isNumber(data.height) && o.maxHeight && (o.maxHeight < data.height),
+			isminw = this._isNumber(data.width) && o.minWidth && (o.minWidth > data.width),
+			isminh = this._isNumber(data.height) && o.minHeight && (o.minHeight > data.height),
+			dw = this.originalPosition.left + this.originalSize.width,
+			dh = this.position.top + this.size.height,
+			cw = /sw|nw|w/.test(a), ch = /nw|ne|n/.test(a);
+		if (isminw) {
+			data.width = o.minWidth;
+		}
+		if (isminh) {
+			data.height = o.minHeight;
+		}
+		if (ismaxw) {
+			data.width = o.maxWidth;
+		}
+		if (ismaxh) {
+			data.height = o.maxHeight;
+		}
+
+		if (isminw && cw) {
+			data.left = dw - o.minWidth;
+		}
+		if (ismaxw && cw) {
+			data.left = dw - o.maxWidth;
+		}
+		if (isminh && ch) {
+			data.top = dh - o.minHeight;
+		}
+		if (ismaxh && ch) {
+			data.top = dh - o.maxHeight;
+		}
+
+		// Fixing jump error on top/left - bug #2330
+		if (!data.width && !data.height && !data.left && data.top) {
+			data.top = null;
+		} else if (!data.width && !data.height && !data.top && data.left) {
+			data.left = null;
+		}
+
+		return data;
+	},
+
+	_getPaddingPlusBorderDimensions: function( element ) {
+		var i = 0,
+			widths = [],
+			borders = [
+				element.css( "borderTopWidth" ),
+				element.css( "borderRightWidth" ),
+				element.css( "borderBottomWidth" ),
+				element.css( "borderLeftWidth" )
+			],
+			paddings = [
+				element.css( "paddingTop" ),
+				element.css( "paddingRight" ),
+				element.css( "paddingBottom" ),
+				element.css( "paddingLeft" )
+			];
+
+		for ( ; i < 4; i++ ) {
+			widths[ i ] = ( parseInt( borders[ i ], 10 ) || 0 );
+			widths[ i ] += ( parseInt( paddings[ i ], 10 ) || 0 );
+		}
+
+		return {
+			height: widths[ 0 ] + widths[ 2 ],
+			width: widths[ 1 ] + widths[ 3 ]
+		};
+	},
+
+	_proportionallyResize: function() {
+
+		if (!this._proportionallyResizeElements.length) {
+			return;
+		}
+
+		var prel,
+			i = 0,
+			element = this.helper || this.element;
+
+		for ( ; i < this._proportionallyResizeElements.length; i++) {
+
+			prel = this._proportionallyResizeElements[i];
+
+			// TODO: Seems like a bug to cache this.outerDimensions
+			// considering that we are in a loop.
+			if (!this.outerDimensions) {
+				this.outerDimensions = this._getPaddingPlusBorderDimensions( prel );
+			}
+
+			prel.css({
+				height: (element.height() - this.outerDimensions.height) || 0,
+				width: (element.width() - this.outerDimensions.width) || 0
+			});
+
+		}
+
+	},
+
+	_renderProxy: function() {
+
+		var el = this.element, o = this.options;
+		this.elementOffset = el.offset();
+
+		if (this._helper) {
+
+			this.helper = this.helper || $("<div style='overflow:hidden;'></div>");
+
+			this.helper.addClass(this._helper).css({
+				width: this.element.outerWidth() - 1,
+				height: this.element.outerHeight() - 1,
+				position: "absolute",
+				left: this.elementOffset.left + "px",
+				top: this.elementOffset.top + "px",
+				zIndex: ++o.zIndex //TODO: Don't modify option
+			});
+
+			this.helper
+				.appendTo("body")
+				.disableSelection();
+
+		} else {
+			this.helper = this.element;
+		}
+
+	},
+
+	_change: {
+		e: function(event, dx) {
+			return { width: this.originalSize.width + dx };
+		},
+		w: function(event, dx) {
+			var cs = this.originalSize, sp = this.originalPosition;
+			return { left: sp.left + dx, width: cs.width - dx };
+		},
+		n: function(event, dx, dy) {
+			var cs = this.originalSize, sp = this.originalPosition;
+			return { top: sp.top + dy, height: cs.height - dy };
+		},
+		s: function(event, dx, dy) {
+			return { height: this.originalSize.height + dy };
+		},
+		se: function(event, dx, dy) {
+			return $.extend(this._change.s.apply(this, arguments),
+				this._change.e.apply(this, [ event, dx, dy ]));
+		},
+		sw: function(event, dx, dy) {
+			return $.extend(this._change.s.apply(this, arguments),
+				this._change.w.apply(this, [ event, dx, dy ]));
+		},
+		ne: function(event, dx, dy) {
+			return $.extend(this._change.n.apply(this, arguments),
+				this._change.e.apply(this, [ event, dx, dy ]));
+		},
+		nw: function(event, dx, dy) {
+			return $.extend(this._change.n.apply(this, arguments),
+				this._change.w.apply(this, [ event, dx, dy ]));
+		}
+	},
+
+	_propagate: function(n, event) {
+		$.ui.plugin.call(this, n, [ event, this.ui() ]);
+		(n !== "resize" && this._trigger(n, event, this.ui()));
+	},
+
+	plugins: {},
+
+	ui: function() {
+		return {
+			originalElement: this.originalElement,
+			element: this.element,
+			helper: this.helper,
+			position: this.position,
+			size: this.size,
+			originalSize: this.originalSize,
+			originalPosition: this.originalPosition
+		};
+	}
+
+});
+
+/*
+ * Resizable Extensions
+ */
+
+$.ui.plugin.add("resizable", "animate", {
+
+	stop: function( event ) {
+		var that = $(this).resizable( "instance" ),
+			o = that.options,
+			pr = that._proportionallyResizeElements,
+			ista = pr.length && (/textarea/i).test(pr[0].nodeName),
+			soffseth = ista && that._hasScroll(pr[0], "left") ? 0 : that.sizeDiff.height,
+			soffsetw = ista ? 0 : that.sizeDiff.width,
+			style = { width: (that.size.width - soffsetw), height: (that.size.height - soffseth) },
+			left = (parseInt(that.element.css("left"), 10) +
+				(that.position.left - that.originalPosition.left)) || null,
+			top = (parseInt(that.element.css("top"), 10) +
+				(that.position.top - that.originalPosition.top)) || null;
+
+		that.element.animate(
+			$.extend(style, top && left ? { top: top, left: left } : {}), {
+				duration: o.animateDuration,
+				easing: o.animateEasing,
+				step: function() {
+
+					var data = {
+						width: parseInt(that.element.css("width"), 10),
+						height: parseInt(that.element.css("height"), 10),
+						top: parseInt(that.element.css("top"), 10),
+						left: parseInt(that.element.css("left"), 10)
+					};
+
+					if (pr && pr.length) {
+						$(pr[0]).css({ width: data.width, height: data.height });
+					}
+
+					// propagating resize, and updating values for each animation step
+					that._updateCache(data);
+					that._propagate("resize", event);
+
+				}
+			}
+		);
+	}
+
+});
+
+$.ui.plugin.add( "resizable", "containment", {
+
+	start: function() {
+		var element, p, co, ch, cw, width, height,
+			that = $( this ).resizable( "instance" ),
+			o = that.options,
+			el = that.element,
+			oc = o.containment,
+			ce = ( oc instanceof $ ) ? oc.get( 0 ) : ( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;
+
+		if ( !ce ) {
+			return;
+		}
+
+		that.containerElement = $( ce );
+
+		if ( /document/.test( oc ) || oc === document ) {
+			that.containerOffset = {
+				left: 0,
+				top: 0
+			};
+			that.containerPosition = {
+				left: 0,
+				top: 0
+			};
+
+			that.parentData = {
+				element: $( document ),
+				left: 0,
+				top: 0,
+				width: $( document ).width(),
+				height: $( document ).height() || document.body.parentNode.scrollHeight
+			};
+		} else {
+			element = $( ce );
+			p = [];
+			$([ "Top", "Right", "Left", "Bottom" ]).each(function( i, name ) {
+				p[ i ] = that._num( element.css( "padding" + name ) );
+			});
+
+			that.containerOffset = element.offset();
+			that.containerPosition = element.position();
+			that.containerSize = {
+				height: ( element.innerHeight() - p[ 3 ] ),
+				width: ( element.innerWidth() - p[ 1 ] )
+			};
+
+			co = that.containerOffset;
+			ch = that.containerSize.height;
+			cw = that.containerSize.width;
+			width = ( that._hasScroll ( ce, "left" ) ? ce.scrollWidth : cw );
+			height = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;
+
+			that.parentData = {
+				element: ce,
+				left: co.left,
+				top: co.top,
+				width: width,
+				height: height
+			};
+		}
+	},
+
+	resize: function( event ) {
+		var woset, hoset, isParent, isOffsetRelative,
+			that = $( this ).resizable( "instance" ),
+			o = that.options,
+			co = that.containerOffset,
+			cp = that.position,
+			pRatio = that._aspectRatio || event.shiftKey,
+			cop = {
+				top: 0,
+				left: 0
+			},
+			ce = that.containerElement,
+			continueResize = true;
+
+		if ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( "position" ) ) ) {
+			cop = co;
+		}
+
+		if ( cp.left < ( that._helper ? co.left : 0 ) ) {
+			that.size.width = that.size.width +
+				( that._helper ?
+					( that.position.left - co.left ) :
+					( that.position.left - cop.left ) );
+
+			if ( pRatio ) {
+				that.size.height = that.size.width / that.aspectRatio;
+				continueResize = false;
+			}
+			that.position.left = o.helper ? co.left : 0;
+		}
+
+		if ( cp.top < ( that._helper ? co.top : 0 ) ) {
+			that.size.height = that.size.height +
+				( that._helper ?
+					( that.position.top - co.top ) :
+					that.position.top );
+
+			if ( pRatio ) {
+				that.size.width = that.size.height * that.aspectRatio;
+				continueResize = false;
+			}
+			that.position.top = that._helper ? co.top : 0;
+		}
+
+		isParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );
+		isOffsetRelative = /relative|absolute/.test( that.containerElement.css( "position" ) );
+
+		if ( isParent && isOffsetRelative ) {
+			that.offset.left = that.parentData.left + that.position.left;
+			that.offset.top = that.parentData.top + that.position.top;
+		} else {
+			that.offset.left = that.element.offset().left;
+			that.offset.top = that.element.offset().top;
+		}
+
+		woset = Math.abs( that.sizeDiff.width +
+			(that._helper ?
+				that.offset.left - cop.left :
+				(that.offset.left - co.left)) );
+
+		hoset = Math.abs( that.sizeDiff.height +
+			(that._helper ?
+				that.offset.top - cop.top :
+				(that.offset.top - co.top)) );
+
+		if ( woset + that.size.width >= that.parentData.width ) {
+			that.size.width = that.parentData.width - woset;
+			if ( pRatio ) {
+				that.size.height = that.size.width / that.aspectRatio;
+				continueResize = false;
+			}
+		}
+
+		if ( hoset + that.size.height >= that.parentData.height ) {
+			that.size.height = that.parentData.height - hoset;
+			if ( pRatio ) {
+				that.size.width = that.size.height * that.aspectRatio;
+				continueResize = false;
+			}
+		}
+
+		if ( !continueResize ) {
+			that.position.left = that.prevPosition.left;
+			that.position.top = that.prevPosition.top;
+			that.size.width = that.prevSize.width;
+			that.size.height = that.prevSize.height;
+		}
+	},
+
+	stop: function() {
+		var that = $( this ).resizable( "instance" ),
+			o = that.options,
+			co = that.containerOffset,
+			cop = that.containerPosition,
+			ce = that.containerElement,
+			helper = $( that.helper ),
+			ho = helper.offset(),
+			w = helper.outerWidth() - that.sizeDiff.width,
+			h = helper.outerHeight() - that.sizeDiff.height;
+
+		if ( that._helper && !o.animate && ( /relative/ ).test( ce.css( "position" ) ) ) {
+			$( this ).css({
+				left: ho.left - cop.left - co.left,
+				width: w,
+				height: h
+			});
+		}
+
+		if ( that._helper && !o.animate && ( /static/ ).test( ce.css( "position" ) ) ) {
+			$( this ).css({
+				left: ho.left - cop.left - co.left,
+				width: w,
+				height: h
+			});
+		}
+	}
+});
+
+$.ui.plugin.add("resizable", "alsoResize", {
+
+	start: function() {
+		var that = $(this).resizable( "instance" ),
+			o = that.options;
+
+		$(o.alsoResize).each(function() {
+			var el = $(this);
+			el.data("ui-resizable-alsoresize", {
+				width: parseInt(el.width(), 10), height: parseInt(el.height(), 10),
+				left: parseInt(el.css("left"), 10), top: parseInt(el.css("top"), 10)
+			});
+		});
+	},
+
+	resize: function(event, ui) {
+		var that = $(this).resizable( "instance" ),
+			o = that.options,
+			os = that.originalSize,
+			op = that.originalPosition,
+			delta = {
+				height: (that.size.height - os.height) || 0,
+				width: (that.size.width - os.width) || 0,
+				top: (that.position.top - op.top) || 0,
+				left: (that.position.left - op.left) || 0
+			};
+
+			$(o.alsoResize).each(function() {
+				var el = $(this), start = $(this).data("ui-resizable-alsoresize"), style = {},
+					css = el.parents(ui.originalElement[0]).length ?
+							[ "width", "height" ] :
+							[ "width", "height", "top", "left" ];
+
+				$.each(css, function(i, prop) {
+					var sum = (start[prop] || 0) + (delta[prop] || 0);
+					if (sum && sum >= 0) {
+						style[prop] = sum || null;
+					}
+				});
+
+				el.css(style);
+			});
+	},
+
+	stop: function() {
+		$(this).removeData("resizable-alsoresize");
+	}
+});
+
+$.ui.plugin.add("resizable", "ghost", {
+
+	start: function() {
+
+		var that = $(this).resizable( "instance" ), o = that.options, cs = that.size;
+
+		that.ghost = that.originalElement.clone();
+		that.ghost
+			.css({
+				opacity: 0.25,
+				display: "block",
+				position: "relative",
+				height: cs.height,
+				width: cs.width,
+				margin: 0,
+				left: 0,
+				top: 0
+			})
+			.addClass("ui-resizable-ghost")
+			.addClass(typeof o.ghost === "string" ? o.ghost : "");
+
+		that.ghost.appendTo(that.helper);
+
+	},
+
+	resize: function() {
+		var that = $(this).resizable( "instance" );
+		if (that.ghost) {
+			that.ghost.css({
+				position: "relative",
+				height: that.size.height,
+				width: that.size.width
+			});
+		}
+	},
+
+	stop: function() {
+		var that = $(this).resizable( "instance" );
+		if (that.ghost && that.helper) {
+			that.helper.get(0).removeChild(that.ghost.get(0));
+		}
+	}
+
+});
+
+$.ui.plugin.add("resizable", "grid", {
+
+	resize: function() {
+		var outerDimensions,
+			that = $(this).resizable( "instance" ),
+			o = that.options,
+			cs = that.size,
+			os = that.originalSize,
+			op = that.originalPosition,
+			a = that.axis,
+			grid = typeof o.grid === "number" ? [ o.grid, o.grid ] : o.grid,
+			gridX = (grid[0] || 1),
+			gridY = (grid[1] || 1),
+			ox = Math.round((cs.width - os.width) / gridX) * gridX,
+			oy = Math.round((cs.height - os.height) / gridY) * gridY,
+			newWidth = os.width + ox,
+			newHeight = os.height + oy,
+			isMaxWidth = o.maxWidth && (o.maxWidth < newWidth),
+			isMaxHeight = o.maxHeight && (o.maxHeight < newHeight),
+			isMinWidth = o.minWidth && (o.minWidth > newWidth),
+			isMinHeight = o.minHeight && (o.minHeight > newHeight);
+
+		o.grid = grid;
+
+		if (isMinWidth) {
+			newWidth += gridX;
+		}
+		if (isMinHeight) {
+			newHeight += gridY;
+		}
+		if (isMaxWidth) {
+			newWidth -= gridX;
+		}
+		if (isMaxHeight) {
+			newHeight -= gridY;
+		}
+
+		if (/^(se|s|e)$/.test(a)) {
+			that.size.width = newWidth;
+			that.size.height = newHeight;
+		} else if (/^(ne)$/.test(a)) {
+			that.size.width = newWidth;
+			that.size.height = newHeight;
+			that.position.top = op.top - oy;
+		} else if (/^(sw)$/.test(a)) {
+			that.size.width = newWidth;
+			that.size.height = newHeight;
+			that.position.left = op.left - ox;
+		} else {
+			if ( newHeight - gridY <= 0 || newWidth - gridX <= 0) {
+				outerDimensions = that._getPaddingPlusBorderDimensions( this );
+			}
+
+			if ( newHeight - gridY > 0 ) {
+				that.size.height = newHeight;
+				that.position.top = op.top - oy;
+			} else {
+				newHeight = gridY - outerDimensions.height;
+				that.size.height = newHeight;
+				that.position.top = op.top + os.height - newHeight;
+			}
+			if ( newWidth - gridX > 0 ) {
+				that.size.width = newWidth;
+				that.position.left = op.left - ox;
+			} else {
+				newWidth = gridX - outerDimensions.width;
+				that.size.width = newWidth;
+				that.position.left = op.left + os.width - newWidth;
+			}
+		}
+	}
+
+});
+
+var resizable = $.ui.resizable;
+
+
+/*!
+ * jQuery UI Dialog 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/dialog/
+ */
+
+
+var dialog = $.widget( "ui.dialog", {
+	version: "1.11.4",
+	options: {
+		appendTo: "body",
+		autoOpen: true,
+		buttons: [],
+		closeOnEscape: true,
+		closeText: "Close",
+		dialogClass: "",
+		draggable: true,
+		hide: null,
+		height: "auto",
+		maxHeight: null,
+		maxWidth: null,
+		minHeight: 150,
+		minWidth: 150,
+		modal: false,
+		position: {
+			my: "center",
+			at: "center",
+			of: window,
+			collision: "fit",
+			// Ensure the titlebar is always visible
+			using: function( pos ) {
+				var topOffset = $( this ).css( pos ).offset().top;
+				if ( topOffset < 0 ) {
+					$( this ).css( "top", pos.top - topOffset );
+				}
+			}
+		},
+		resizable: true,
+		show: null,
+		title: null,
+		width: 300,
+
+		// callbacks
+		beforeClose: null,
+		close: null,
+		drag: null,
+		dragStart: null,
+		dragStop: null,
+		focus: null,
+		open: null,
+		resize: null,
+		resizeStart: null,
+		resizeStop: null
+	},
+
+	sizeRelatedOptions: {
+		buttons: true,
+		height: true,
+		maxHeight: true,
+		maxWidth: true,
+		minHeight: true,
+		minWidth: true,
+		width: true
+	},
+
+	resizableRelatedOptions: {
+		maxHeight: true,
+		maxWidth: true,
+		minHeight: true,
+		minWidth: true
+	},
+
+	_create: function() {
+		this.originalCss = {
+			display: this.element[ 0 ].style.display,
+			width: this.element[ 0 ].style.width,
+			minHeight: this.element[ 0 ].style.minHeight,
+			maxHeight: this.element[ 0 ].style.maxHeight,
+			height: this.element[ 0 ].style.height
+		};
+		this.originalPosition = {
+			parent: this.element.parent(),
+			index: this.element.parent().children().index( this.element )
+		};
+		this.originalTitle = this.element.attr( "title" );
+		this.options.title = this.options.title || this.originalTitle;
+
+		this._createWrapper();
+
+		this.element
+			.show()
+			.removeAttr( "title" )
+			.addClass( "ui-dialog-content ui-widget-content" )
+			.appendTo( this.uiDialog );
+
+		this._createTitlebar();
+		this._createButtonPane();
+
+		if ( this.options.draggable && $.fn.draggable ) {
+			this._makeDraggable();
+		}
+		if ( this.options.resizable && $.fn.resizable ) {
+			this._makeResizable();
+		}
+
+		this._isOpen = false;
+
+		this._trackFocus();
+	},
+
+	_init: function() {
+		if ( this.options.autoOpen ) {
+			this.open();
+		}
+	},
+
+	_appendTo: function() {
+		var element = this.options.appendTo;
+		if ( element && (element.jquery || element.nodeType) ) {
+			return $( element );
+		}
+		return this.document.find( element || "body" ).eq( 0 );
+	},
+
+	_destroy: function() {
+		var next,
+			originalPosition = this.originalPosition;
+
+		this._untrackInstance();
+		this._destroyOverlay();
+
+		this.element
+			.removeUniqueId()
+			.removeClass( "ui-dialog-content ui-widget-content" )
+			.css( this.originalCss )
+			// Without detaching first, the following becomes really slow
+			.detach();
+
+		this.uiDialog.stop( true, true ).remove();
+
+		if ( this.originalTitle ) {
+			this.element.attr( "title", this.originalTitle );
+		}
+
+		next = originalPosition.parent.children().eq( originalPosition.index );
+		// Don't try to place the dialog next to itself (#8613)
+		if ( next.length && next[ 0 ] !== this.element[ 0 ] ) {
+			next.before( this.element );
+		} else {
+			originalPosition.parent.append( this.element );
+		}
+	},
+
+	widget: function() {
+		return this.uiDialog;
+	},
+
+	disable: $.noop,
+	enable: $.noop,
+
+	close: function( event ) {
+		var activeElement,
+			that = this;
+
+		if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
+			return;
+		}
+
+		this._isOpen = false;
+		this._focusedElement = null;
+		this._destroyOverlay();
+		this._untrackInstance();
+
+		if ( !this.opener.filter( ":focusable" ).focus().length ) {
+
+			// support: IE9
+			// IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
+			try {
+				activeElement = this.document[ 0 ].activeElement;
+
+				// Support: IE9, IE10
+				// If the <body> is blurred, IE will switch windows, see #4520
+				if ( activeElement && activeElement.nodeName.toLowerCase() !== "body" ) {
+
+					// Hiding a focused element doesn't trigger blur in WebKit
+					// so in case we have nothing to focus on, explicitly blur the active element
+					// https://bugs.webkit.org/show_bug.cgi?id=47182
+					$( activeElement ).blur();
+				}
+			} catch ( error ) {}
+		}
+
+		this._hide( this.uiDialog, this.options.hide, function() {
+			that._trigger( "close", event );
+		});
+	},
+
+	isOpen: function() {
+		return this._isOpen;
+	},
+
+	moveToTop: function() {
+		this._moveToTop();
+	},
+
+	_moveToTop: function( event, silent ) {
+		var moved = false,
+			zIndices = this.uiDialog.siblings( ".ui-front:visible" ).map(function() {
+				return +$( this ).css( "z-index" );
+			}).get(),
+			zIndexMax = Math.max.apply( null, zIndices );
+
+		if ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) {
+			this.uiDialog.css( "z-index", zIndexMax + 1 );
+			moved = true;
+		}
+
+		if ( moved && !silent ) {
+			this._trigger( "focus", event );
+		}
+		return moved;
+	},
+
+	open: function() {
+		var that = this;
+		if ( this._isOpen ) {
+			if ( this._moveToTop() ) {
+				this._focusTabbable();
+			}
+			return;
+		}
+
+		this._isOpen = true;
+		this.opener = $( this.document[ 0 ].activeElement );
+
+		this._size();
+		this._position();
+		this._createOverlay();
+		this._moveToTop( null, true );
+
+		// Ensure the overlay is moved to the top with the dialog, but only when
+		// opening. The overlay shouldn't move after the dialog is open so that
+		// modeless dialogs opened after the modal dialog stack properly.
+		if ( this.overlay ) {
+			this.overlay.css( "z-index", this.uiDialog.css( "z-index" ) - 1 );
+		}
+
+		this._show( this.uiDialog, this.options.show, function() {
+			that._focusTabbable();
+			that._trigger( "focus" );
+		});
+
+		// Track the dialog immediately upon openening in case a focus event
+		// somehow occurs outside of the dialog before an element inside the
+		// dialog is focused (#10152)
+		this._makeFocusTarget();
+
+		this._trigger( "open" );
+	},
+
+	_focusTabbable: function() {
+		// Set focus to the first match:
+		// 1. An element that was focused previously
+		// 2. First element inside the dialog matching [autofocus]
+		// 3. Tabbable element inside the content element
+		// 4. Tabbable element inside the buttonpane
+		// 5. The close button
+		// 6. The dialog itself
+		var hasFocus = this._focusedElement;
+		if ( !hasFocus ) {
+			hasFocus = this.element.find( "[autofocus]" );
+		}
+		if ( !hasFocus.length ) {
+			hasFocus = this.element.find( ":tabbable" );
+		}
+		if ( !hasFocus.length ) {
+			hasFocus = this.uiDialogButtonPane.find( ":tabbable" );
+		}
+		if ( !hasFocus.length ) {
+			hasFocus = this.uiDialogTitlebarClose.filter( ":tabbable" );
+		}
+		if ( !hasFocus.length ) {
+			hasFocus = this.uiDialog;
+		}
+		hasFocus.eq( 0 ).focus();
+	},
+
+	_keepFocus: function( event ) {
+		function checkFocus() {
+			var activeElement = this.document[0].activeElement,
+				isActive = this.uiDialog[0] === activeElement ||
+					$.contains( this.uiDialog[0], activeElement );
+			if ( !isActive ) {
+				this._focusTabbable();
+			}
+		}
+		event.preventDefault();
+		checkFocus.call( this );
+		// support: IE
+		// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
+		// so we check again later
+		this._delay( checkFocus );
+	},
+
+	_createWrapper: function() {
+		this.uiDialog = $("<div>")
+			.addClass( "ui-dialog ui-widget ui-widget-content ui-corner-all ui-front " +
+				this.options.dialogClass )
+			.hide()
+			.attr({
+				// Setting tabIndex makes the div focusable
+				tabIndex: -1,
+				role: "dialog"
+			})
+			.appendTo( this._appendTo() );
+
+		this._on( this.uiDialog, {
+			keydown: function( event ) {
+				if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
+						event.keyCode === $.ui.keyCode.ESCAPE ) {
+					event.preventDefault();
+					this.close( event );
+					return;
+				}
+
+				// prevent tabbing out of dialogs
+				if ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {
+					return;
+				}
+				var tabbables = this.uiDialog.find( ":tabbable" ),
+					first = tabbables.filter( ":first" ),
+					last = tabbables.filter( ":last" );
+
+				if ( ( event.target === last[0] || event.target === this.uiDialog[0] ) && !event.shiftKey ) {
+					this._delay(function() {
+						first.focus();
+					});
+					event.preventDefault();
+				} else if ( ( event.target === first[0] || event.target === this.uiDialog[0] ) && event.shiftKey ) {
+					this._delay(function() {
+						last.focus();
+					});
+					event.preventDefault();
+				}
+			},
+			mousedown: function( event ) {
+				if ( this._moveToTop( event ) ) {
+					this._focusTabbable();
+				}
+			}
+		});
+
+		// We assume that any existing aria-describedby attribute means
+		// that the dialog content is marked up properly
+		// otherwise we brute force the content as the description
+		if ( !this.element.find( "[aria-describedby]" ).length ) {
+			this.uiDialog.attr({
+				"aria-describedby": this.element.uniqueId().attr( "id" )
+			});
+		}
+	},
+
+	_createTitlebar: function() {
+		var uiDialogTitle;
+
+		this.uiDialogTitlebar = $( "<div>" )
+			.addClass( "ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix" )
+			.prependTo( this.uiDialog );
+		this._on( this.uiDialogTitlebar, {
+			mousedown: function( event ) {
+				// Don't prevent click on close button (#8838)
+				// Focusing a dialog that is partially scrolled out of view
+				// causes the browser to scroll it into view, preventing the click event
+				if ( !$( event.target ).closest( ".ui-dialog-titlebar-close" ) ) {
+					// Dialog isn't getting focus when dragging (#8063)
+					this.uiDialog.focus();
+				}
+			}
+		});
+
+		// support: IE
+		// Use type="button" to prevent enter keypresses in textboxes from closing the
+		// dialog in IE (#9312)
+		this.uiDialogTitlebarClose = $( "<button type='button'></button>" )
+			.button({
+				label: this.options.closeText,
+				icons: {
+					primary: "ui-icon-closethick"
+				},
+				text: false
+			})
+			.addClass( "ui-dialog-titlebar-close" )
+			.appendTo( this.uiDialogTitlebar );
+		this._on( this.uiDialogTitlebarClose, {
+			click: function( event ) {
+				event.preventDefault();
+				this.close( event );
+			}
+		});
+
+		uiDialogTitle = $( "<span>" )
+			.uniqueId()
+			.addClass( "ui-dialog-title" )
+			.prependTo( this.uiDialogTitlebar );
+		this._title( uiDialogTitle );
+
+		this.uiDialog.attr({
+			"aria-labelledby": uiDialogTitle.attr( "id" )
+		});
+	},
+
+	_title: function( title ) {
+		if ( !this.options.title ) {
+			title.html( "&#160;" );
+		}
+		title.text( this.options.title );
+	},
+
+	_createButtonPane: function() {
+		this.uiDialogButtonPane = $( "<div>" )
+			.addClass( "ui-dialog-buttonpane ui-widget-content ui-helper-clearfix" );
+
+		this.uiButtonSet = $( "<div>" )
+			.addClass( "ui-dialog-buttonset" )
+			.appendTo( this.uiDialogButtonPane );
+
+		this._createButtons();
+	},
+
+	_createButtons: function() {
+		var that = this,
+			buttons = this.options.buttons;
+
+		// if we already have a button pane, remove it
+		this.uiDialogButtonPane.remove();
+		this.uiButtonSet.empty();
+
+		if ( $.isEmptyObject( buttons ) || ($.isArray( buttons ) && !buttons.length) ) {
+			this.uiDialog.removeClass( "ui-dialog-buttons" );
+			return;
+		}
+
+		$.each( buttons, function( name, props ) {
+			var click, buttonOptions;
+			props = $.isFunction( props ) ?
+				{ click: props, text: name } :
+				props;
+			// Default to a non-submitting button
+			props = $.extend( { type: "button" }, props );
+			// Change the context for the click callback to be the main element
+			click = props.click;
+			props.click = function() {
+				click.apply( that.element[ 0 ], arguments );
+			};
+			buttonOptions = {
+				icons: props.icons,
+				text: props.showText
+			};
+			delete props.icons;
+			delete props.showText;
+			$( "<button></button>", props )
+				.button( buttonOptions )
+				.appendTo( that.uiButtonSet );
+		});
+		this.uiDialog.addClass( "ui-dialog-buttons" );
+		this.uiDialogButtonPane.appendTo( this.uiDialog );
+	},
+
+	_makeDraggable: function() {
+		var that = this,
+			options = this.options;
+
+		function filteredUi( ui ) {
+			return {
+				position: ui.position,
+				offset: ui.offset
+			};
+		}
+
+		this.uiDialog.draggable({
+			cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
+			handle: ".ui-dialog-titlebar",
+			containment: "document",
+			start: function( event, ui ) {
+				$( this ).addClass( "ui-dialog-dragging" );
+				that._blockFrames();
+				that._trigger( "dragStart", event, filteredUi( ui ) );
+			},
+			drag: function( event, ui ) {
+				that._trigger( "drag", event, filteredUi( ui ) );
+			},
+			stop: function( event, ui ) {
+				var left = ui.offset.left - that.document.scrollLeft(),
+					top = ui.offset.top - that.document.scrollTop();
+
+				options.position = {
+					my: "left top",
+					at: "left" + (left >= 0 ? "+" : "") + left + " " +
+						"top" + (top >= 0 ? "+" : "") + top,
+					of: that.window
+				};
+				$( this ).removeClass( "ui-dialog-dragging" );
+				that._unblockFrames();
+				that._trigger( "dragStop", event, filteredUi( ui ) );
+			}
+		});
+	},
+
+	_makeResizable: function() {
+		var that = this,
+			options = this.options,
+			handles = options.resizable,
+			// .ui-resizable has position: relative defined in the stylesheet
+			// but dialogs have to use absolute or fixed positioning
+			position = this.uiDialog.css("position"),
+			resizeHandles = typeof handles === "string" ?
+				handles	:
+				"n,e,s,w,se,sw,ne,nw";
+
+		function filteredUi( ui ) {
+			return {
+				originalPosition: ui.originalPosition,
+				originalSize: ui.originalSize,
+				position: ui.position,
+				size: ui.size
+			};
+		}
+
+		this.uiDialog.resizable({
+			cancel: ".ui-dialog-content",
+			containment: "document",
+			alsoResize: this.element,
+			maxWidth: options.maxWidth,
+			maxHeight: options.maxHeight,
+			minWidth: options.minWidth,
+			minHeight: this._minHeight(),
+			handles: resizeHandles,
+			start: function( event, ui ) {
+				$( this ).addClass( "ui-dialog-resizing" );
+				that._blockFrames();
+				that._trigger( "resizeStart", event, filteredUi( ui ) );
+			},
+			resize: function( event, ui ) {
+				that._trigger( "resize", event, filteredUi( ui ) );
+			},
+			stop: function( event, ui ) {
+				var offset = that.uiDialog.offset(),
+					left = offset.left - that.document.scrollLeft(),
+					top = offset.top - that.document.scrollTop();
+
+				options.height = that.uiDialog.height();
+				options.width = that.uiDialog.width();
+				options.position = {
+					my: "left top",
+					at: "left" + (left >= 0 ? "+" : "") + left + " " +
+						"top" + (top >= 0 ? "+" : "") + top,
+					of: that.window
+				};
+				$( this ).removeClass( "ui-dialog-resizing" );
+				that._unblockFrames();
+				that._trigger( "resizeStop", event, filteredUi( ui ) );
+			}
+		})
+		.css( "position", position );
+	},
+
+	_trackFocus: function() {
+		this._on( this.widget(), {
+			focusin: function( event ) {
+				this._makeFocusTarget();
+				this._focusedElement = $( event.target );
+			}
+		});
+	},
+
+	_makeFocusTarget: function() {
+		this._untrackInstance();
+		this._trackingInstances().unshift( this );
+	},
+
+	_untrackInstance: function() {
+		var instances = this._trackingInstances(),
+			exists = $.inArray( this, instances );
+		if ( exists !== -1 ) {
+			instances.splice( exists, 1 );
+		}
+	},
+
+	_trackingInstances: function() {
+		var instances = this.document.data( "ui-dialog-instances" );
+		if ( !instances ) {
+			instances = [];
+			this.document.data( "ui-dialog-instances", instances );
+		}
+		return instances;
+	},
+
+	_minHeight: function() {
+		var options = this.options;
+
+		return options.height === "auto" ?
+			options.minHeight :
+			Math.min( options.minHeight, options.height );
+	},
+
+	_position: function() {
+		// Need to show the dialog to get the actual offset in the position plugin
+		var isVisible = this.uiDialog.is( ":visible" );
+		if ( !isVisible ) {
+			this.uiDialog.show();
+		}
+		this.uiDialog.position( this.options.position );
+		if ( !isVisible ) {
+			this.uiDialog.hide();
+		}
+	},
+
+	_setOptions: function( options ) {
+		var that = this,
+			resize = false,
+			resizableOptions = {};
+
+		$.each( options, function( key, value ) {
+			that._setOption( key, value );
+
+			if ( key in that.sizeRelatedOptions ) {
+				resize = true;
+			}
+			if ( key in that.resizableRelatedOptions ) {
+				resizableOptions[ key ] = value;
+			}
+		});
+
+		if ( resize ) {
+			this._size();
+			this._position();
+		}
+		if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
+			this.uiDialog.resizable( "option", resizableOptions );
+		}
+	},
+
+	_setOption: function( key, value ) {
+		var isDraggable, isResizable,
+			uiDialog = this.uiDialog;
+
+		if ( key === "dialogClass" ) {
+			uiDialog
+				.removeClass( this.options.dialogClass )
+				.addClass( value );
+		}
+
+		if ( key === "disabled" ) {
+			return;
+		}
+
+		this._super( key, value );
+
+		if ( key === "appendTo" ) {
+			this.uiDialog.appendTo( this._appendTo() );
+		}
+
+		if ( key === "buttons" ) {
+			this._createButtons();
+		}
+
+		if ( key === "closeText" ) {
+			this.uiDialogTitlebarClose.button({
+				// Ensure that we always pass a string
+				label: "" + value
+			});
+		}
+
+		if ( key === "draggable" ) {
+			isDraggable = uiDialog.is( ":data(ui-draggable)" );
+			if ( isDraggable && !value ) {
+				uiDialog.draggable( "destroy" );
+			}
+
+			if ( !isDraggable && value ) {
+				this._makeDraggable();
+			}
+		}
+
+		if ( key === "position" ) {
+			this._position();
+		}
+
+		if ( key === "resizable" ) {
+			// currently resizable, becoming non-resizable
+			isResizable = uiDialog.is( ":data(ui-resizable)" );
+			if ( isResizable && !value ) {
+				uiDialog.resizable( "destroy" );
+			}
+
+			// currently resizable, changing handles
+			if ( isResizable && typeof value === "string" ) {
+				uiDialog.resizable( "option", "handles", value );
+			}
+
+			// currently non-resizable, becoming resizable
+			if ( !isResizable && value !== false ) {
+				this._makeResizable();
+			}
+		}
+
+		if ( key === "title" ) {
+			this._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) );
+		}
+	},
+
+	_size: function() {
+		// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
+		// divs will both have width and height set, so we need to reset them
+		var nonContentHeight, minContentHeight, maxContentHeight,
+			options = this.options;
+
+		// Reset content sizing
+		this.element.show().css({
+			width: "auto",
+			minHeight: 0,
+			maxHeight: "none",
+			height: 0
+		});
+
+		if ( options.minWidth > options.width ) {
+			options.width = options.minWidth;
+		}
+
+		// reset wrapper sizing
+		// determine the height of all the non-content elements
+		nonContentHeight = this.uiDialog.css({
+				height: "auto",
+				width: options.width
+			})
+			.outerHeight();
+		minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
+		maxContentHeight = typeof options.maxHeight === "number" ?
+			Math.max( 0, options.maxHeight - nonContentHeight ) :
+			"none";
+
+		if ( options.height === "auto" ) {
+			this.element.css({
+				minHeight: minContentHeight,
+				maxHeight: maxContentHeight,
+				height: "auto"
+			});
+		} else {
+			this.element.height( Math.max( 0, options.height - nonContentHeight ) );
+		}
+
+		if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
+			this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
+		}
+	},
+
+	_blockFrames: function() {
+		this.iframeBlocks = this.document.find( "iframe" ).map(function() {
+			var iframe = $( this );
+
+			return $( "<div>" )
+				.css({
+					position: "absolute",
+					width: iframe.outerWidth(),
+					height: iframe.outerHeight()
+				})
+				.appendTo( iframe.parent() )
+				.offset( iframe.offset() )[0];
+		});
+	},
+
+	_unblockFrames: function() {
+		if ( this.iframeBlocks ) {
+			this.iframeBlocks.remove();
+			delete this.iframeBlocks;
+		}
+	},
+
+	_allowInteraction: function( event ) {
+		if ( $( event.target ).closest( ".ui-dialog" ).length ) {
+			return true;
+		}
+
+		// TODO: Remove hack when datepicker implements
+		// the .ui-front logic (#8989)
+		return !!$( event.target ).closest( ".ui-datepicker" ).length;
+	},
+
+	_createOverlay: function() {
+		if ( !this.options.modal ) {
+			return;
+		}
+
+		// We use a delay in case the overlay is created from an
+		// event that we're going to be cancelling (#2804)
+		var isOpening = true;
+		this._delay(function() {
+			isOpening = false;
+		});
+
+		if ( !this.document.data( "ui-dialog-overlays" ) ) {
+
+			// Prevent use of anchors and inputs
+			// Using _on() for an event handler shared across many instances is
+			// safe because the dialogs stack and must be closed in reverse order
+			this._on( this.document, {
+				focusin: function( event ) {
+					if ( isOpening ) {
+						return;
+					}
+
+					if ( !this._allowInteraction( event ) ) {
+						event.preventDefault();
+						this._trackingInstances()[ 0 ]._focusTabbable();
+					}
+				}
+			});
+		}
+
+		this.overlay = $( "<div>" )
+			.addClass( "ui-widget-overlay ui-front" )
+			.appendTo( this._appendTo() );
+		this._on( this.overlay, {
+			mousedown: "_keepFocus"
+		});
+		this.document.data( "ui-dialog-overlays",
+			(this.document.data( "ui-dialog-overlays" ) || 0) + 1 );
+	},
+
+	_destroyOverlay: function() {
+		if ( !this.options.modal ) {
+			return;
+		}
+
+		if ( this.overlay ) {
+			var overlays = this.document.data( "ui-dialog-overlays" ) - 1;
+
+			if ( !overlays ) {
+				this.document
+					.unbind( "focusin" )
+					.removeData( "ui-dialog-overlays" );
+			} else {
+				this.document.data( "ui-dialog-overlays", overlays );
+			}
+
+			this.overlay.remove();
+			this.overlay = null;
+		}
+	}
+});
+
+
+/*!
+ * jQuery UI Droppable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/droppable/
+ */
+
+
+$.widget( "ui.droppable", {
+	version: "1.11.4",
+	widgetEventPrefix: "drop",
+	options: {
+		accept: "*",
+		activeClass: false,
+		addClasses: true,
+		greedy: false,
+		hoverClass: false,
+		scope: "default",
+		tolerance: "intersect",
+
+		// callbacks
+		activate: null,
+		deactivate: null,
+		drop: null,
+		out: null,
+		over: null
+	},
+	_create: function() {
+
+		var proportions,
+			o = this.options,
+			accept = o.accept;
+
+		this.isover = false;
+		this.isout = true;
+
+		this.accept = $.isFunction( accept ) ? accept : function( d ) {
+			return d.is( accept );
+		};
+
+		this.proportions = function( /* valueToWrite */ ) {
+			if ( arguments.length ) {
+				// Store the droppable's proportions
+				proportions = arguments[ 0 ];
+			} else {
+				// Retrieve or derive the droppable's proportions
+				return proportions ?
+					proportions :
+					proportions = {
+						width: this.element[ 0 ].offsetWidth,
+						height: this.element[ 0 ].offsetHeight
+					};
+			}
+		};
+
+		this._addToManager( o.scope );
+
+		o.addClasses && this.element.addClass( "ui-droppable" );
+
+	},
+
+	_addToManager: function( scope ) {
+		// Add the reference and positions to the manager
+		$.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];
+		$.ui.ddmanager.droppables[ scope ].push( this );
+	},
+
+	_splice: function( drop ) {
+		var i = 0;
+		for ( ; i < drop.length; i++ ) {
+			if ( drop[ i ] === this ) {
+				drop.splice( i, 1 );
+			}
+		}
+	},
+
+	_destroy: function() {
+		var drop = $.ui.ddmanager.droppables[ this.options.scope ];
+
+		this._splice( drop );
+
+		this.element.removeClass( "ui-droppable ui-droppable-disabled" );
+	},
+
+	_setOption: function( key, value ) {
+
+		if ( key === "accept" ) {
+			this.accept = $.isFunction( value ) ? value : function( d ) {
+				return d.is( value );
+			};
+		} else if ( key === "scope" ) {
+			var drop = $.ui.ddmanager.droppables[ this.options.scope ];
+
+			this._splice( drop );
+			this._addToManager( value );
+		}
+
+		this._super( key, value );
+	},
+
+	_activate: function( event ) {
+		var draggable = $.ui.ddmanager.current;
+		if ( this.options.activeClass ) {
+			this.element.addClass( this.options.activeClass );
+		}
+		if ( draggable ){
+			this._trigger( "activate", event, this.ui( draggable ) );
+		}
+	},
+
+	_deactivate: function( event ) {
+		var draggable = $.ui.ddmanager.current;
+		if ( this.options.activeClass ) {
+			this.element.removeClass( this.options.activeClass );
+		}
+		if ( draggable ){
+			this._trigger( "deactivate", event, this.ui( draggable ) );
+		}
+	},
+
+	_over: function( event ) {
+
+		var draggable = $.ui.ddmanager.current;
+
+		// Bail if draggable and droppable are same element
+		if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
+			return;
+		}
+
+		if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+			if ( this.options.hoverClass ) {
+				this.element.addClass( this.options.hoverClass );
+			}
+			this._trigger( "over", event, this.ui( draggable ) );
+		}
+
+	},
+
+	_out: function( event ) {
+
+		var draggable = $.ui.ddmanager.current;
+
+		// Bail if draggable and droppable are same element
+		if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
+			return;
+		}
+
+		if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+			if ( this.options.hoverClass ) {
+				this.element.removeClass( this.options.hoverClass );
+			}
+			this._trigger( "out", event, this.ui( draggable ) );
+		}
+
+	},
+
+	_drop: function( event, custom ) {
+
+		var draggable = custom || $.ui.ddmanager.current,
+			childrenIntersection = false;
+
+		// Bail if draggable and droppable are same element
+		if ( !draggable || ( draggable.currentItem || draggable.element )[ 0 ] === this.element[ 0 ] ) {
+			return false;
+		}
+
+		this.element.find( ":data(ui-droppable)" ).not( ".ui-draggable-dragging" ).each(function() {
+			var inst = $( this ).droppable( "instance" );
+			if (
+				inst.options.greedy &&
+				!inst.options.disabled &&
+				inst.options.scope === draggable.options.scope &&
+				inst.accept.call( inst.element[ 0 ], ( draggable.currentItem || draggable.element ) ) &&
+				$.ui.intersect( draggable, $.extend( inst, { offset: inst.element.offset() } ), inst.options.tolerance, event )
+			) { childrenIntersection = true; return false; }
+		});
+		if ( childrenIntersection ) {
+			return false;
+		}
+
+		if ( this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+			if ( this.options.activeClass ) {
+				this.element.removeClass( this.options.activeClass );
+			}
+			if ( this.options.hoverClass ) {
+				this.element.removeClass( this.options.hoverClass );
+			}
+			this._trigger( "drop", event, this.ui( draggable ) );
+			return this.element;
+		}
+
+		return false;
+
+	},
+
+	ui: function( c ) {
+		return {
+			draggable: ( c.currentItem || c.element ),
+			helper: c.helper,
+			position: c.position,
+			offset: c.positionAbs
+		};
+	}
+
+});
+
+$.ui.intersect = (function() {
+	function isOverAxis( x, reference, size ) {
+		return ( x >= reference ) && ( x < ( reference + size ) );
+	}
+
+	return function( draggable, droppable, toleranceMode, event ) {
+
+		if ( !droppable.offset ) {
+			return false;
+		}
+
+		var x1 = ( draggable.positionAbs || draggable.position.absolute ).left + draggable.margins.left,
+			y1 = ( draggable.positionAbs || draggable.position.absolute ).top + draggable.margins.top,
+			x2 = x1 + draggable.helperProportions.width,
+			y2 = y1 + draggable.helperProportions.height,
+			l = droppable.offset.left,
+			t = droppable.offset.top,
+			r = l + droppable.proportions().width,
+			b = t + droppable.proportions().height;
+
+		switch ( toleranceMode ) {
+		case "fit":
+			return ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );
+		case "intersect":
+			return ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half
+				x2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half
+				t < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half
+				y2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half
+		case "pointer":
+			return isOverAxis( event.pageY, t, droppable.proportions().height ) && isOverAxis( event.pageX, l, droppable.proportions().width );
+		case "touch":
+			return (
+				( y1 >= t && y1 <= b ) || // Top edge touching
+				( y2 >= t && y2 <= b ) || // Bottom edge touching
+				( y1 < t && y2 > b ) // Surrounded vertically
+			) && (
+				( x1 >= l && x1 <= r ) || // Left edge touching
+				( x2 >= l && x2 <= r ) || // Right edge touching
+				( x1 < l && x2 > r ) // Surrounded horizontally
+			);
+		default:
+			return false;
+		}
+	};
+})();
+
+/*
+	This manager tracks offsets of draggables and droppables
+*/
+$.ui.ddmanager = {
+	current: null,
+	droppables: { "default": [] },
+	prepareOffsets: function( t, event ) {
+
+		var i, j,
+			m = $.ui.ddmanager.droppables[ t.options.scope ] || [],
+			type = event ? event.type : null, // workaround for #2317
+			list = ( t.currentItem || t.element ).find( ":data(ui-droppable)" ).addBack();
+
+		droppablesLoop: for ( i = 0; i < m.length; i++ ) {
+
+			// No disabled and non-accepted
+			if ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ], ( t.currentItem || t.element ) ) ) ) {
+				continue;
+			}
+
+			// Filter out elements in the current dragged item
+			for ( j = 0; j < list.length; j++ ) {
+				if ( list[ j ] === m[ i ].element[ 0 ] ) {
+					m[ i ].proportions().height = 0;
+					continue droppablesLoop;
+				}
+			}
+
+			m[ i ].visible = m[ i ].element.css( "display" ) !== "none";
+			if ( !m[ i ].visible ) {
+				continue;
+			}
+
+			// Activate the droppable if used directly from draggables
+			if ( type === "mousedown" ) {
+				m[ i ]._activate.call( m[ i ], event );
+			}
+
+			m[ i ].offset = m[ i ].element.offset();
+			m[ i ].proportions({ width: m[ i ].element[ 0 ].offsetWidth, height: m[ i ].element[ 0 ].offsetHeight });
+
+		}
+
+	},
+	drop: function( draggable, event ) {
+
+		var dropped = false;
+		// Create a copy of the droppables in case the list changes during the drop (#9116)
+		$.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {
+
+			if ( !this.options ) {
+				return;
+			}
+			if ( !this.options.disabled && this.visible && $.ui.intersect( draggable, this, this.options.tolerance, event ) ) {
+				dropped = this._drop.call( this, event ) || dropped;
+			}
+
+			if ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ], ( draggable.currentItem || draggable.element ) ) ) {
+				this.isout = true;
+				this.isover = false;
+				this._deactivate.call( this, event );
+			}
+
+		});
+		return dropped;
+
+	},
+	dragStart: function( draggable, event ) {
+		// Listen for scrolling so that if the dragging causes scrolling the position of the droppables can be recalculated (see #5003)
+		draggable.element.parentsUntil( "body" ).bind( "scroll.droppable", function() {
+			if ( !draggable.options.refreshPositions ) {
+				$.ui.ddmanager.prepareOffsets( draggable, event );
+			}
+		});
+	},
+	drag: function( draggable, event ) {
+
+		// If you have a highly dynamic page, you might try this option. It renders positions every time you move the mouse.
+		if ( draggable.options.refreshPositions ) {
+			$.ui.ddmanager.prepareOffsets( draggable, event );
+		}
+
+		// Run through all droppables and check their positions based on specific tolerance options
+		$.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {
+
+			if ( this.options.disabled || this.greedyChild || !this.visible ) {
+				return;
+			}
+
+			var parentInstance, scope, parent,
+				intersects = $.ui.intersect( draggable, this, this.options.tolerance, event ),
+				c = !intersects && this.isover ? "isout" : ( intersects && !this.isover ? "isover" : null );
+			if ( !c ) {
+				return;
+			}
+
+			if ( this.options.greedy ) {
+				// find droppable parents with same scope
+				scope = this.options.scope;
+				parent = this.element.parents( ":data(ui-droppable)" ).filter(function() {
+					return $( this ).droppable( "instance" ).options.scope === scope;
+				});
+
+				if ( parent.length ) {
+					parentInstance = $( parent[ 0 ] ).droppable( "instance" );
+					parentInstance.greedyChild = ( c === "isover" );
+				}
+			}
+
+			// we just moved into a greedy child
+			if ( parentInstance && c === "isover" ) {
+				parentInstance.isover = false;
+				parentInstance.isout = true;
+				parentInstance._out.call( parentInstance, event );
+			}
+
+			this[ c ] = true;
+			this[c === "isout" ? "isover" : "isout"] = false;
+			this[c === "isover" ? "_over" : "_out"].call( this, event );
+
+			// we just moved out of a greedy child
+			if ( parentInstance && c === "isout" ) {
+				parentInstance.isout = false;
+				parentInstance.isover = true;
+				parentInstance._over.call( parentInstance, event );
+			}
+		});
+
+	},
+	dragStop: function( draggable, event ) {
+		draggable.element.parentsUntil( "body" ).unbind( "scroll.droppable" );
+		// Call prepareOffsets one final time since IE does not fire return scroll events when overflow was caused by drag (see #5003)
+		if ( !draggable.options.refreshPositions ) {
+			$.ui.ddmanager.prepareOffsets( draggable, event );
+		}
+	}
+};
+
+var droppable = $.ui.droppable;
+
+
+/*!
+ * jQuery UI Effects 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/category/effects-core/
+ */
+
+
+var dataSpace = "ui-effects-",
+
+	// Create a local jQuery because jQuery Color relies on it and the
+	// global may not exist with AMD and a custom build (#10199)
+	jQuery = $;
+
+$.effects = {
+	effect: {}
+};
+
+/*!
+ * jQuery Color Animations v2.1.2
+ * https://github.com/jquery/jquery-color
+ *
+ * Copyright 2014 jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * Date: Wed Jan 16 08:47:09 2013 -0600
+ */
+(function( jQuery, undefined ) {
+
+	var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",
+
+	// plusequals test for += 100 -= 100
+	rplusequals = /^([\-+])=\s*(\d+\.?\d*)/,
+	// a set of RE's that can match strings and generate color tuples.
+	stringParsers = [ {
+			re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+			parse: function( execResult ) {
+				return [
+					execResult[ 1 ],
+					execResult[ 2 ],
+					execResult[ 3 ],
+					execResult[ 4 ]
+				];
+			}
+		}, {
+			re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+			parse: function( execResult ) {
+				return [
+					execResult[ 1 ] * 2.55,
+					execResult[ 2 ] * 2.55,
+					execResult[ 3 ] * 2.55,
+					execResult[ 4 ]
+				];
+			}
+		}, {
+			// this regex ignores A-F because it's compared against an already lowercased string
+			re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,
+			parse: function( execResult ) {
+				return [
+					parseInt( execResult[ 1 ], 16 ),
+					parseInt( execResult[ 2 ], 16 ),
+					parseInt( execResult[ 3 ], 16 )
+				];
+			}
+		}, {
+			// this regex ignores A-F because it's compared against an already lowercased string
+			re: /#([a-f0-9])([a-f0-9])([a-f0-9])/,
+			parse: function( execResult ) {
+				return [
+					parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),
+					parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),
+					parseInt( execResult[ 3 ] + execResult[ 3 ], 16 )
+				];
+			}
+		}, {
+			re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,
+			space: "hsla",
+			parse: function( execResult ) {
+				return [
+					execResult[ 1 ],
+					execResult[ 2 ] / 100,
+					execResult[ 3 ] / 100,
+					execResult[ 4 ]
+				];
+			}
+		} ],
+
+	// jQuery.Color( )
+	color = jQuery.Color = function( color, green, blue, alpha ) {
+		return new jQuery.Color.fn.parse( color, green, blue, alpha );
+	},
+	spaces = {
+		rgba: {
+			props: {
+				red: {
+					idx: 0,
+					type: "byte"
+				},
+				green: {
+					idx: 1,
+					type: "byte"
+				},
+				blue: {
+					idx: 2,
+					type: "byte"
+				}
+			}
+		},
+
+		hsla: {
+			props: {
+				hue: {
+					idx: 0,
+					type: "degrees"
+				},
+				saturation: {
+					idx: 1,
+					type: "percent"
+				},
+				lightness: {
+					idx: 2,
+					type: "percent"
+				}
+			}
+		}
+	},
+	propTypes = {
+		"byte": {
+			floor: true,
+			max: 255
+		},
+		"percent": {
+			max: 1
+		},
+		"degrees": {
+			mod: 360,
+			floor: true
+		}
+	},
+	support = color.support = {},
+
+	// element for support tests
+	supportElem = jQuery( "<p>" )[ 0 ],
+
+	// colors = jQuery.Color.names
+	colors,
+
+	// local aliases of functions called often
+	each = jQuery.each;
+
+// determine rgba support immediately
+supportElem.style.cssText = "background-color:rgba(1,1,1,.5)";
+support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1;
+
+// define cache name and alpha properties
+// for rgba and hsla spaces
+each( spaces, function( spaceName, space ) {
+	space.cache = "_" + spaceName;
+	space.props.alpha = {
+		idx: 3,
+		type: "percent",
+		def: 1
+	};
+});
+
+function clamp( value, prop, allowEmpty ) {
+	var type = propTypes[ prop.type ] || {};
+
+	if ( value == null ) {
+		return (allowEmpty || !prop.def) ? null : prop.def;
+	}
+
+	// ~~ is an short way of doing floor for positive numbers
+	value = type.floor ? ~~value : parseFloat( value );
+
+	// IE will pass in empty strings as value for alpha,
+	// which will hit this case
+	if ( isNaN( value ) ) {
+		return prop.def;
+	}
+
+	if ( type.mod ) {
+		// we add mod before modding to make sure that negatives values
+		// get converted properly: -10 -> 350
+		return (value + type.mod) % type.mod;
+	}
+
+	// for now all property types without mod have min and max
+	return 0 > value ? 0 : type.max < value ? type.max : value;
+}
+
+function stringParse( string ) {
+	var inst = color(),
+		rgba = inst._rgba = [];
+
+	string = string.toLowerCase();
+
+	each( stringParsers, function( i, parser ) {
+		var parsed,
+			match = parser.re.exec( string ),
+			values = match && parser.parse( match ),
+			spaceName = parser.space || "rgba";
+
+		if ( values ) {
+			parsed = inst[ spaceName ]( values );
+
+			// if this was an rgba parse the assignment might happen twice
+			// oh well....
+			inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];
+			rgba = inst._rgba = parsed._rgba;
+
+			// exit each( stringParsers ) here because we matched
+			return false;
+		}
+	});
+
+	// Found a stringParser that handled it
+	if ( rgba.length ) {
+
+		// if this came from a parsed string, force "transparent" when alpha is 0
+		// chrome, (and maybe others) return "transparent" as rgba(0,0,0,0)
+		if ( rgba.join() === "0,0,0,0" ) {
+			jQuery.extend( rgba, colors.transparent );
+		}
+		return inst;
+	}
+
+	// named colors
+	return colors[ string ];
+}
+
+color.fn = jQuery.extend( color.prototype, {
+	parse: function( red, green, blue, alpha ) {
+		if ( red === undefined ) {
+			this._rgba = [ null, null, null, null ];
+			return this;
+		}
+		if ( red.jquery || red.nodeType ) {
+			red = jQuery( red ).css( green );
+			green = undefined;
+		}
+
+		var inst = this,
+			type = jQuery.type( red ),
+			rgba = this._rgba = [];
+
+		// more than 1 argument specified - assume ( red, green, blue, alpha )
+		if ( green !== undefined ) {
+			red = [ red, green, blue, alpha ];
+			type = "array";
+		}
+
+		if ( type === "string" ) {
+			return this.parse( stringParse( red ) || colors._default );
+		}
+
+		if ( type === "array" ) {
+			each( spaces.rgba.props, function( key, prop ) {
+				rgba[ prop.idx ] = clamp( red[ prop.idx ], prop );
+			});
+			return this;
+		}
+
+		if ( type === "object" ) {
+			if ( red instanceof color ) {
+				each( spaces, function( spaceName, space ) {
+					if ( red[ space.cache ] ) {
+						inst[ space.cache ] = red[ space.cache ].slice();
+					}
+				});
+			} else {
+				each( spaces, function( spaceName, space ) {
+					var cache = space.cache;
+					each( space.props, function( key, prop ) {
+
+						// if the cache doesn't exist, and we know how to convert
+						if ( !inst[ cache ] && space.to ) {
+
+							// if the value was null, we don't need to copy it
+							// if the key was alpha, we don't need to copy it either
+							if ( key === "alpha" || red[ key ] == null ) {
+								return;
+							}
+							inst[ cache ] = space.to( inst._rgba );
+						}
+
+						// this is the only case where we allow nulls for ALL properties.
+						// call clamp with alwaysAllowEmpty
+						inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );
+					});
+
+					// everything defined but alpha?
+					if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {
+						// use the default of 1
+						inst[ cache ][ 3 ] = 1;
+						if ( space.from ) {
+							inst._rgba = space.from( inst[ cache ] );
+						}
+					}
+				});
+			}
+			return this;
+		}
+	},
+	is: function( compare ) {
+		var is = color( compare ),
+			same = true,
+			inst = this;
+
+		each( spaces, function( _, space ) {
+			var localCache,
+				isCache = is[ space.cache ];
+			if (isCache) {
+				localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];
+				each( space.props, function( _, prop ) {
+					if ( isCache[ prop.idx ] != null ) {
+						same = ( isCache[ prop.idx ] === localCache[ prop.idx ] );
+						return same;
+					}
+				});
+			}
+			return same;
+		});
+		return same;
+	},
+	_space: function() {
+		var used = [],
+			inst = this;
+		each( spaces, function( spaceName, space ) {
+			if ( inst[ space.cache ] ) {
+				used.push( spaceName );
+			}
+		});
+		return used.pop();
+	},
+	transition: function( other, distance ) {
+		var end = color( other ),
+			spaceName = end._space(),
+			space = spaces[ spaceName ],
+			startColor = this.alpha() === 0 ? color( "transparent" ) : this,
+			start = startColor[ space.cache ] || space.to( startColor._rgba ),
+			result = start.slice();
+
+		end = end[ space.cache ];
+		each( space.props, function( key, prop ) {
+			var index = prop.idx,
+				startValue = start[ index ],
+				endValue = end[ index ],
+				type = propTypes[ prop.type ] || {};
+
+			// if null, don't override start value
+			if ( endValue === null ) {
+				return;
+			}
+			// if null - use end
+			if ( startValue === null ) {
+				result[ index ] = endValue;
+			} else {
+				if ( type.mod ) {
+					if ( endValue - startValue > type.mod / 2 ) {
+						startValue += type.mod;
+					} else if ( startValue - endValue > type.mod / 2 ) {
+						startValue -= type.mod;
+					}
+				}
+				result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );
+			}
+		});
+		return this[ spaceName ]( result );
+	},
+	blend: function( opaque ) {
+		// if we are already opaque - return ourself
+		if ( this._rgba[ 3 ] === 1 ) {
+			return this;
+		}
+
+		var rgb = this._rgba.slice(),
+			a = rgb.pop(),
+			blend = color( opaque )._rgba;
+
+		return color( jQuery.map( rgb, function( v, i ) {
+			return ( 1 - a ) * blend[ i ] + a * v;
+		}));
+	},
+	toRgbaString: function() {
+		var prefix = "rgba(",
+			rgba = jQuery.map( this._rgba, function( v, i ) {
+				return v == null ? ( i > 2 ? 1 : 0 ) : v;
+			});
+
+		if ( rgba[ 3 ] === 1 ) {
+			rgba.pop();
+			prefix = "rgb(";
+		}
+
+		return prefix + rgba.join() + ")";
+	},
+	toHslaString: function() {
+		var prefix = "hsla(",
+			hsla = jQuery.map( this.hsla(), function( v, i ) {
+				if ( v == null ) {
+					v = i > 2 ? 1 : 0;
+				}
+
+				// catch 1 and 2
+				if ( i && i < 3 ) {
+					v = Math.round( v * 100 ) + "%";
+				}
+				return v;
+			});
+
+		if ( hsla[ 3 ] === 1 ) {
+			hsla.pop();
+			prefix = "hsl(";
+		}
+		return prefix + hsla.join() + ")";
+	},
+	toHexString: function( includeAlpha ) {
+		var rgba = this._rgba.slice(),
+			alpha = rgba.pop();
+
+		if ( includeAlpha ) {
+			rgba.push( ~~( alpha * 255 ) );
+		}
+
+		return "#" + jQuery.map( rgba, function( v ) {
+
+			// default to 0 when nulls exist
+			v = ( v || 0 ).toString( 16 );
+			return v.length === 1 ? "0" + v : v;
+		}).join("");
+	},
+	toString: function() {
+		return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString();
+	}
+});
+color.fn.parse.prototype = color.fn;
+
+// hsla conversions adapted from:
+// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021
+
+function hue2rgb( p, q, h ) {
+	h = ( h + 1 ) % 1;
+	if ( h * 6 < 1 ) {
+		return p + ( q - p ) * h * 6;
+	}
+	if ( h * 2 < 1) {
+		return q;
+	}
+	if ( h * 3 < 2 ) {
+		return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;
+	}
+	return p;
+}
+
+spaces.hsla.to = function( rgba ) {
+	if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {
+		return [ null, null, null, rgba[ 3 ] ];
+	}
+	var r = rgba[ 0 ] / 255,
+		g = rgba[ 1 ] / 255,
+		b = rgba[ 2 ] / 255,
+		a = rgba[ 3 ],
+		max = Math.max( r, g, b ),
+		min = Math.min( r, g, b ),
+		diff = max - min,
+		add = max + min,
+		l = add * 0.5,
+		h, s;
+
+	if ( min === max ) {
+		h = 0;
+	} else if ( r === max ) {
+		h = ( 60 * ( g - b ) / diff ) + 360;
+	} else if ( g === max ) {
+		h = ( 60 * ( b - r ) / diff ) + 120;
+	} else {
+		h = ( 60 * ( r - g ) / diff ) + 240;
+	}
+
+	// chroma (diff) == 0 means greyscale which, by definition, saturation = 0%
+	// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)
+	if ( diff === 0 ) {
+		s = 0;
+	} else if ( l <= 0.5 ) {
+		s = diff / add;
+	} else {
+		s = diff / ( 2 - add );
+	}
+	return [ Math.round(h) % 360, s, l, a == null ? 1 : a ];
+};
+
+spaces.hsla.from = function( hsla ) {
+	if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {
+		return [ null, null, null, hsla[ 3 ] ];
+	}
+	var h = hsla[ 0 ] / 360,
+		s = hsla[ 1 ],
+		l = hsla[ 2 ],
+		a = hsla[ 3 ],
+		q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,
+		p = 2 * l - q;
+
+	return [
+		Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),
+		Math.round( hue2rgb( p, q, h ) * 255 ),
+		Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),
+		a
+	];
+};
+
+each( spaces, function( spaceName, space ) {
+	var props = space.props,
+		cache = space.cache,
+		to = space.to,
+		from = space.from;
+
+	// makes rgba() and hsla()
+	color.fn[ spaceName ] = function( value ) {
+
+		// generate a cache for this space if it doesn't exist
+		if ( to && !this[ cache ] ) {
+			this[ cache ] = to( this._rgba );
+		}
+		if ( value === undefined ) {
+			return this[ cache ].slice();
+		}
+
+		var ret,
+			type = jQuery.type( value ),
+			arr = ( type === "array" || type === "object" ) ? value : arguments,
+			local = this[ cache ].slice();
+
+		each( props, function( key, prop ) {
+			var val = arr[ type === "object" ? key : prop.idx ];
+			if ( val == null ) {
+				val = local[ prop.idx ];
+			}
+			local[ prop.idx ] = clamp( val, prop );
+		});
+
+		if ( from ) {
+			ret = color( from( local ) );
+			ret[ cache ] = local;
+			return ret;
+		} else {
+			return color( local );
+		}
+	};
+
+	// makes red() green() blue() alpha() hue() saturation() lightness()
+	each( props, function( key, prop ) {
+		// alpha is included in more than one space
+		if ( color.fn[ key ] ) {
+			return;
+		}
+		color.fn[ key ] = function( value ) {
+			var vtype = jQuery.type( value ),
+				fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ),
+				local = this[ fn ](),
+				cur = local[ prop.idx ],
+				match;
+
+			if ( vtype === "undefined" ) {
+				return cur;
+			}
+
+			if ( vtype === "function" ) {
+				value = value.call( this, cur );
+				vtype = jQuery.type( value );
+			}
+			if ( value == null && prop.empty ) {
+				return this;
+			}
+			if ( vtype === "string" ) {
+				match = rplusequals.exec( value );
+				if ( match ) {
+					value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 );
+				}
+			}
+			local[ prop.idx ] = value;
+			return this[ fn ]( local );
+		};
+	});
+});
+
+// add cssHook and .fx.step function for each named hook.
+// accept a space separated string of properties
+color.hook = function( hook ) {
+	var hooks = hook.split( " " );
+	each( hooks, function( i, hook ) {
+		jQuery.cssHooks[ hook ] = {
+			set: function( elem, value ) {
+				var parsed, curElem,
+					backgroundColor = "";
+
+				if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) {
+					value = color( parsed || value );
+					if ( !support.rgba && value._rgba[ 3 ] !== 1 ) {
+						curElem = hook === "backgroundColor" ? elem.parentNode : elem;
+						while (
+							(backgroundColor === "" || backgroundColor === "transparent") &&
+							curElem && curElem.style
+						) {
+							try {
+								backgroundColor = jQuery.css( curElem, "backgroundColor" );
+								curElem = curElem.parentNode;
+							} catch ( e ) {
+							}
+						}
+
+						value = value.blend( backgroundColor && backgroundColor !== "transparent" ?
+							backgroundColor :
+							"_default" );
+					}
+
+					value = value.toRgbaString();
+				}
+				try {
+					elem.style[ hook ] = value;
+				} catch ( e ) {
+					// wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit'
+				}
+			}
+		};
+		jQuery.fx.step[ hook ] = function( fx ) {
+			if ( !fx.colorInit ) {
+				fx.start = color( fx.elem, hook );
+				fx.end = color( fx.end );
+				fx.colorInit = true;
+			}
+			jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );
+		};
+	});
+
+};
+
+color.hook( stepHooks );
+
+jQuery.cssHooks.borderColor = {
+	expand: function( value ) {
+		var expanded = {};
+
+		each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) {
+			expanded[ "border" + part + "Color" ] = value;
+		});
+		return expanded;
+	}
+};
+
+// Basic color names only.
+// Usage of any of the other color names requires adding yourself or including
+// jquery.color.svg-names.js.
+colors = jQuery.Color.names = {
+	// 4.1. Basic color keywords
+	aqua: "#00ffff",
+	black: "#000000",
+	blue: "#0000ff",
+	fuchsia: "#ff00ff",
+	gray: "#808080",
+	green: "#008000",
+	lime: "#00ff00",
+	maroon: "#800000",
+	navy: "#000080",
+	olive: "#808000",
+	purple: "#800080",
+	red: "#ff0000",
+	silver: "#c0c0c0",
+	teal: "#008080",
+	white: "#ffffff",
+	yellow: "#ffff00",
+
+	// 4.2.3. "transparent" color keyword
+	transparent: [ null, null, null, 0 ],
+
+	_default: "#ffffff"
+};
+
+})( jQuery );
+
+/******************************************************************************/
+/****************************** CLASS ANIMATIONS ******************************/
+/******************************************************************************/
+(function() {
+
+var classAnimationActions = [ "add", "remove", "toggle" ],
+	shorthandStyles = {
+		border: 1,
+		borderBottom: 1,
+		borderColor: 1,
+		borderLeft: 1,
+		borderRight: 1,
+		borderTop: 1,
+		borderWidth: 1,
+		margin: 1,
+		padding: 1
+	};
+
+$.each([ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], function( _, prop ) {
+	$.fx.step[ prop ] = function( fx ) {
+		if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {
+			jQuery.style( fx.elem, prop, fx.end );
+			fx.setAttr = true;
+		}
+	};
+});
+
+function getElementStyles( elem ) {
+	var key, len,
+		style = elem.ownerDocument.defaultView ?
+			elem.ownerDocument.defaultView.getComputedStyle( elem, null ) :
+			elem.currentStyle,
+		styles = {};
+
+	if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {
+		len = style.length;
+		while ( len-- ) {
+			key = style[ len ];
+			if ( typeof style[ key ] === "string" ) {
+				styles[ $.camelCase( key ) ] = style[ key ];
+			}
+		}
+	// support: Opera, IE <9
+	} else {
+		for ( key in style ) {
+			if ( typeof style[ key ] === "string" ) {
+				styles[ key ] = style[ key ];
+			}
+		}
+	}
+
+	return styles;
+}
+
+function styleDifference( oldStyle, newStyle ) {
+	var diff = {},
+		name, value;
+
+	for ( name in newStyle ) {
+		value = newStyle[ name ];
+		if ( oldStyle[ name ] !== value ) {
+			if ( !shorthandStyles[ name ] ) {
+				if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {
+					diff[ name ] = value;
+				}
+			}
+		}
+	}
+
+	return diff;
+}
+
+// support: jQuery <1.8
+if ( !$.fn.addBack ) {
+	$.fn.addBack = function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter( selector )
+		);
+	};
+}
+
+$.effects.animateClass = function( value, duration, easing, callback ) {
+	var o = $.speed( duration, easing, callback );
+
+	return this.queue( function() {
+		var animated = $( this ),
+			baseClass = animated.attr( "class" ) || "",
+			applyClassChange,
+			allAnimations = o.children ? animated.find( "*" ).addBack() : animated;
+
+		// map the animated objects to store the original styles.
+		allAnimations = allAnimations.map(function() {
+			var el = $( this );
+			return {
+				el: el,
+				start: getElementStyles( this )
+			};
+		});
+
+		// apply class change
+		applyClassChange = function() {
+			$.each( classAnimationActions, function(i, action) {
+				if ( value[ action ] ) {
+					animated[ action + "Class" ]( value[ action ] );
+				}
+			});
+		};
+		applyClassChange();
+
+		// map all animated objects again - calculate new styles and diff
+		allAnimations = allAnimations.map(function() {
+			this.end = getElementStyles( this.el[ 0 ] );
+			this.diff = styleDifference( this.start, this.end );
+			return this;
+		});
+
+		// apply original class
+		animated.attr( "class", baseClass );
+
+		// map all animated objects again - this time collecting a promise
+		allAnimations = allAnimations.map(function() {
+			var styleInfo = this,
+				dfd = $.Deferred(),
+				opts = $.extend({}, o, {
+					queue: false,
+					complete: function() {
+						dfd.resolve( styleInfo );
+					}
+				});
+
+			this.el.animate( this.diff, opts );
+			return dfd.promise();
+		});
+
+		// once all animations have completed:
+		$.when.apply( $, allAnimations.get() ).done(function() {
+
+			// set the final class
+			applyClassChange();
+
+			// for each animated element,
+			// clear all css properties that were animated
+			$.each( arguments, function() {
+				var el = this.el;
+				$.each( this.diff, function(key) {
+					el.css( key, "" );
+				});
+			});
+
+			// this is guarnteed to be there if you use jQuery.speed()
+			// it also handles dequeuing the next anim...
+			o.complete.call( animated[ 0 ] );
+		});
+	});
+};
+
+$.fn.extend({
+	addClass: (function( orig ) {
+		return function( classNames, speed, easing, callback ) {
+			return speed ?
+				$.effects.animateClass.call( this,
+					{ add: classNames }, speed, easing, callback ) :
+				orig.apply( this, arguments );
+		};
+	})( $.fn.addClass ),
+
+	removeClass: (function( orig ) {
+		return function( classNames, speed, easing, callback ) {
+			return arguments.length > 1 ?
+				$.effects.animateClass.call( this,
+					{ remove: classNames }, speed, easing, callback ) :
+				orig.apply( this, arguments );
+		};
+	})( $.fn.removeClass ),
+
+	toggleClass: (function( orig ) {
+		return function( classNames, force, speed, easing, callback ) {
+			if ( typeof force === "boolean" || force === undefined ) {
+				if ( !speed ) {
+					// without speed parameter
+					return orig.apply( this, arguments );
+				} else {
+					return $.effects.animateClass.call( this,
+						(force ? { add: classNames } : { remove: classNames }),
+						speed, easing, callback );
+				}
+			} else {
+				// without force parameter
+				return $.effects.animateClass.call( this,
+					{ toggle: classNames }, force, speed, easing );
+			}
+		};
+	})( $.fn.toggleClass ),
+
+	switchClass: function( remove, add, speed, easing, callback) {
+		return $.effects.animateClass.call( this, {
+			add: add,
+			remove: remove
+		}, speed, easing, callback );
+	}
+});
+
+})();
+
+/******************************************************************************/
+/*********************************** EFFECTS **********************************/
+/******************************************************************************/
+
+(function() {
+
+$.extend( $.effects, {
+	version: "1.11.4",
+
+	// Saves a set of properties in a data storage
+	save: function( element, set ) {
+		for ( var i = 0; i < set.length; i++ ) {
+			if ( set[ i ] !== null ) {
+				element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );
+			}
+		}
+	},
+
+	// Restores a set of previously saved properties from a data storage
+	restore: function( element, set ) {
+		var val, i;
+		for ( i = 0; i < set.length; i++ ) {
+			if ( set[ i ] !== null ) {
+				val = element.data( dataSpace + set[ i ] );
+				// support: jQuery 1.6.2
+				// http://bugs.jquery.com/ticket/9917
+				// jQuery 1.6.2 incorrectly returns undefined for any falsy value.
+				// We can't differentiate between "" and 0 here, so we just assume
+				// empty string since it's likely to be a more common value...
+				if ( val === undefined ) {
+					val = "";
+				}
+				element.css( set[ i ], val );
+			}
+		}
+	},
+
+	setMode: function( el, mode ) {
+		if (mode === "toggle") {
+			mode = el.is( ":hidden" ) ? "show" : "hide";
+		}
+		return mode;
+	},
+
+	// Translates a [top,left] array into a baseline value
+	// this should be a little more flexible in the future to handle a string & hash
+	getBaseline: function( origin, original ) {
+		var y, x;
+		switch ( origin[ 0 ] ) {
+			case "top": y = 0; break;
+			case "middle": y = 0.5; break;
+			case "bottom": y = 1; break;
+			default: y = origin[ 0 ] / original.height;
+		}
+		switch ( origin[ 1 ] ) {
+			case "left": x = 0; break;
+			case "center": x = 0.5; break;
+			case "right": x = 1; break;
+			default: x = origin[ 1 ] / original.width;
+		}
+		return {
+			x: x,
+			y: y
+		};
+	},
+
+	// Wraps the element around a wrapper that copies position properties
+	createWrapper: function( element ) {
+
+		// if the element is already wrapped, return it
+		if ( element.parent().is( ".ui-effects-wrapper" )) {
+			return element.parent();
+		}
+
+		// wrap the element
+		var props = {
+				width: element.outerWidth(true),
+				height: element.outerHeight(true),
+				"float": element.css( "float" )
+			},
+			wrapper = $( "<div></div>" )
+				.addClass( "ui-effects-wrapper" )
+				.css({
+					fontSize: "100%",
+					background: "transparent",
+					border: "none",
+					margin: 0,
+					padding: 0
+				}),
+			// Store the size in case width/height are defined in % - Fixes #5245
+			size = {
+				width: element.width(),
+				height: element.height()
+			},
+			active = document.activeElement;
+
+		// support: Firefox
+		// Firefox incorrectly exposes anonymous content
+		// https://bugzilla.mozilla.org/show_bug.cgi?id=561664
+		try {
+			active.id;
+		} catch ( e ) {
+			active = document.body;
+		}
+
+		element.wrap( wrapper );
+
+		// Fixes #7595 - Elements lose focus when wrapped.
+		if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+			$( active ).focus();
+		}
+
+		wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually lose the reference to the wrapped element
+
+		// transfer positioning properties to the wrapper
+		if ( element.css( "position" ) === "static" ) {
+			wrapper.css({ position: "relative" });
+			element.css({ position: "relative" });
+		} else {
+			$.extend( props, {
+				position: element.css( "position" ),
+				zIndex: element.css( "z-index" )
+			});
+			$.each([ "top", "left", "bottom", "right" ], function(i, pos) {
+				props[ pos ] = element.css( pos );
+				if ( isNaN( parseInt( props[ pos ], 10 ) ) ) {
+					props[ pos ] = "auto";
+				}
+			});
+			element.css({
+				position: "relative",
+				top: 0,
+				left: 0,
+				right: "auto",
+				bottom: "auto"
+			});
+		}
+		element.css(size);
+
+		return wrapper.css( props ).show();
+	},
+
+	removeWrapper: function( element ) {
+		var active = document.activeElement;
+
+		if ( element.parent().is( ".ui-effects-wrapper" ) ) {
+			element.parent().replaceWith( element );
+
+			// Fixes #7595 - Elements lose focus when wrapped.
+			if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {
+				$( active ).focus();
+			}
+		}
+
+		return element;
+	},
+
+	setTransition: function( element, list, factor, value ) {
+		value = value || {};
+		$.each( list, function( i, x ) {
+			var unit = element.cssUnit( x );
+			if ( unit[ 0 ] > 0 ) {
+				value[ x ] = unit[ 0 ] * factor + unit[ 1 ];
+			}
+		});
+		return value;
+	}
+});
+
+// return an effect options object for the given parameters:
+function _normalizeArguments( effect, options, speed, callback ) {
+
+	// allow passing all options as the first parameter
+	if ( $.isPlainObject( effect ) ) {
+		options = effect;
+		effect = effect.effect;
+	}
+
+	// convert to an object
+	effect = { effect: effect };
+
+	// catch (effect, null, ...)
+	if ( options == null ) {
+		options = {};
+	}
+
+	// catch (effect, callback)
+	if ( $.isFunction( options ) ) {
+		callback = options;
+		speed = null;
+		options = {};
+	}
+
+	// catch (effect, speed, ?)
+	if ( typeof options === "number" || $.fx.speeds[ options ] ) {
+		callback = speed;
+		speed = options;
+		options = {};
+	}
+
+	// catch (effect, options, callback)
+	if ( $.isFunction( speed ) ) {
+		callback = speed;
+		speed = null;
+	}
+
+	// add options to effect
+	if ( options ) {
+		$.extend( effect, options );
+	}
+
+	speed = speed || options.duration;
+	effect.duration = $.fx.off ? 0 :
+		typeof speed === "number" ? speed :
+		speed in $.fx.speeds ? $.fx.speeds[ speed ] :
+		$.fx.speeds._default;
+
+	effect.complete = callback || options.complete;
+
+	return effect;
+}
+
+function standardAnimationOption( option ) {
+	// Valid standard speeds (nothing, number, named speed)
+	if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) {
+		return true;
+	}
+
+	// Invalid strings - treat as "normal" speed
+	if ( typeof option === "string" && !$.effects.effect[ option ] ) {
+		return true;
+	}
+
+	// Complete callback
+	if ( $.isFunction( option ) ) {
+		return true;
+	}
+
+	// Options hash (but not naming an effect)
+	if ( typeof option === "object" && !option.effect ) {
+		return true;
+	}
+
+	// Didn't match any standard API
+	return false;
+}
+
+$.fn.extend({
+	effect: function( /* effect, options, speed, callback */ ) {
+		var args = _normalizeArguments.apply( this, arguments ),
+			mode = args.mode,
+			queue = args.queue,
+			effectMethod = $.effects.effect[ args.effect ];
+
+		if ( $.fx.off || !effectMethod ) {
+			// delegate to the original method (e.g., .show()) if possible
+			if ( mode ) {
+				return this[ mode ]( args.duration, args.complete );
+			} else {
+				return this.each( function() {
+					if ( args.complete ) {
+						args.complete.call( this );
+					}
+				});
+			}
+		}
+
+		function run( next ) {
+			var elem = $( this ),
+				complete = args.complete,
+				mode = args.mode;
+
+			function done() {
+				if ( $.isFunction( complete ) ) {
+					complete.call( elem[0] );
+				}
+				if ( $.isFunction( next ) ) {
+					next();
+				}
+			}
+
+			// If the element already has the correct final state, delegate to
+			// the core methods so the internal tracking of "olddisplay" works.
+			if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) {
+				elem[ mode ]();
+				done();
+			} else {
+				effectMethod.call( elem[0], args, done );
+			}
+		}
+
+		return queue === false ? this.each( run ) : this.queue( queue || "fx", run );
+	},
+
+	show: (function( orig ) {
+		return function( option ) {
+			if ( standardAnimationOption( option ) ) {
+				return orig.apply( this, arguments );
+			} else {
+				var args = _normalizeArguments.apply( this, arguments );
+				args.mode = "show";
+				return this.effect.call( this, args );
+			}
+		};
+	})( $.fn.show ),
+
+	hide: (function( orig ) {
+		return function( option ) {
+			if ( standardAnimationOption( option ) ) {
+				return orig.apply( this, arguments );
+			} else {
+				var args = _normalizeArguments.apply( this, arguments );
+				args.mode = "hide";
+				return this.effect.call( this, args );
+			}
+		};
+	})( $.fn.hide ),
+
+	toggle: (function( orig ) {
+		return function( option ) {
+			if ( standardAnimationOption( option ) || typeof option === "boolean" ) {
+				return orig.apply( this, arguments );
+			} else {
+				var args = _normalizeArguments.apply( this, arguments );
+				args.mode = "toggle";
+				return this.effect.call( this, args );
+			}
+		};
+	})( $.fn.toggle ),
+
+	// helper functions
+	cssUnit: function(key) {
+		var style = this.css( key ),
+			val = [];
+
+		$.each( [ "em", "px", "%", "pt" ], function( i, unit ) {
+			if ( style.indexOf( unit ) > 0 ) {
+				val = [ parseFloat( style ), unit ];
+			}
+		});
+		return val;
+	}
+});
+
+})();
+
+/******************************************************************************/
+/*********************************** EASING ***********************************/
+/******************************************************************************/
+
+(function() {
+
+// based on easing equations from Robert Penner (http://www.robertpenner.com/easing)
+
+var baseEasings = {};
+
+$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) {
+	baseEasings[ name ] = function( p ) {
+		return Math.pow( p, i + 2 );
+	};
+});
+
+$.extend( baseEasings, {
+	Sine: function( p ) {
+		return 1 - Math.cos( p * Math.PI / 2 );
+	},
+	Circ: function( p ) {
+		return 1 - Math.sqrt( 1 - p * p );
+	},
+	Elastic: function( p ) {
+		return p === 0 || p === 1 ? p :
+			-Math.pow( 2, 8 * (p - 1) ) * Math.sin( ( (p - 1) * 80 - 7.5 ) * Math.PI / 15 );
+	},
+	Back: function( p ) {
+		return p * p * ( 3 * p - 2 );
+	},
+	Bounce: function( p ) {
+		var pow2,
+			bounce = 4;
+
+		while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}
+		return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );
+	}
+});
+
+$.each( baseEasings, function( name, easeIn ) {
+	$.easing[ "easeIn" + name ] = easeIn;
+	$.easing[ "easeOut" + name ] = function( p ) {
+		return 1 - easeIn( 1 - p );
+	};
+	$.easing[ "easeInOut" + name ] = function( p ) {
+		return p < 0.5 ?
+			easeIn( p * 2 ) / 2 :
+			1 - easeIn( p * -2 + 2 ) / 2;
+	};
+});
+
+})();
+
+var effect = $.effects;
+
+
+/*!
+ * jQuery UI Effects Blind 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/blind-effect/
+ */
+
+
+var effectBlind = $.effects.effect.blind = function( o, done ) {
+	// Create element
+	var el = $( this ),
+		rvertical = /up|down|vertical/,
+		rpositivemotion = /up|left|vertical|horizontal/,
+		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+		mode = $.effects.setMode( el, o.mode || "hide" ),
+		direction = o.direction || "up",
+		vertical = rvertical.test( direction ),
+		ref = vertical ? "height" : "width",
+		ref2 = vertical ? "top" : "left",
+		motion = rpositivemotion.test( direction ),
+		animation = {},
+		show = mode === "show",
+		wrapper, distance, margin;
+
+	// if already wrapped, the wrapper's properties are my property. #6245
+	if ( el.parent().is( ".ui-effects-wrapper" ) ) {
+		$.effects.save( el.parent(), props );
+	} else {
+		$.effects.save( el, props );
+	}
+	el.show();
+	wrapper = $.effects.createWrapper( el ).css({
+		overflow: "hidden"
+	});
+
+	distance = wrapper[ ref ]();
+	margin = parseFloat( wrapper.css( ref2 ) ) || 0;
+
+	animation[ ref ] = show ? distance : 0;
+	if ( !motion ) {
+		el
+			.css( vertical ? "bottom" : "right", 0 )
+			.css( vertical ? "top" : "left", "auto" )
+			.css({ position: "absolute" });
+
+		animation[ ref2 ] = show ? margin : distance + margin;
+	}
+
+	// start at 0 if we are showing
+	if ( show ) {
+		wrapper.css( ref, 0 );
+		if ( !motion ) {
+			wrapper.css( ref2, margin + distance );
+		}
+	}
+
+	// Animate
+	wrapper.animate( animation, {
+		duration: o.duration,
+		easing: o.easing,
+		queue: false,
+		complete: function() {
+			if ( mode === "hide" ) {
+				el.hide();
+			}
+			$.effects.restore( el, props );
+			$.effects.removeWrapper( el );
+			done();
+		}
+	});
+};
+
+
+/*!
+ * jQuery UI Effects Bounce 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/bounce-effect/
+ */
+
+
+var effectBounce = $.effects.effect.bounce = function( o, done ) {
+	var el = $( this ),
+		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+
+		// defaults:
+		mode = $.effects.setMode( el, o.mode || "effect" ),
+		hide = mode === "hide",
+		show = mode === "show",
+		direction = o.direction || "up",
+		distance = o.distance,
+		times = o.times || 5,
+
+		// number of internal animations
+		anims = times * 2 + ( show || hide ? 1 : 0 ),
+		speed = o.duration / anims,
+		easing = o.easing,
+
+		// utility:
+		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+		motion = ( direction === "up" || direction === "left" ),
+		i,
+		upAnim,
+		downAnim,
+
+		// we will need to re-assemble the queue to stack our animations in place
+		queue = el.queue(),
+		queuelen = queue.length;
+
+	// Avoid touching opacity to prevent clearType and PNG issues in IE
+	if ( show || hide ) {
+		props.push( "opacity" );
+	}
+
+	$.effects.save( el, props );
+	el.show();
+	$.effects.createWrapper( el ); // Create Wrapper
+
+	// default distance for the BIGGEST bounce is the outer Distance / 3
+	if ( !distance ) {
+		distance = el[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3;
+	}
+
+	if ( show ) {
+		downAnim = { opacity: 1 };
+		downAnim[ ref ] = 0;
+
+		// if we are showing, force opacity 0 and set the initial position
+		// then do the "first" animation
+		el.css( "opacity", 0 )
+			.css( ref, motion ? -distance * 2 : distance * 2 )
+			.animate( downAnim, speed, easing );
+	}
+
+	// start at the smallest distance if we are hiding
+	if ( hide ) {
+		distance = distance / Math.pow( 2, times - 1 );
+	}
+
+	downAnim = {};
+	downAnim[ ref ] = 0;
+	// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here
+	for ( i = 0; i < times; i++ ) {
+		upAnim = {};
+		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+		el.animate( upAnim, speed, easing )
+			.animate( downAnim, speed, easing );
+
+		distance = hide ? distance * 2 : distance / 2;
+	}
+
+	// Last Bounce when Hiding
+	if ( hide ) {
+		upAnim = { opacity: 0 };
+		upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance;
+
+		el.animate( upAnim, speed, easing );
+	}
+
+	el.queue(function() {
+		if ( hide ) {
+			el.hide();
+		}
+		$.effects.restore( el, props );
+		$.effects.removeWrapper( el );
+		done();
+	});
+
+	// inject all the animations we just queued to be first in line (after "inprogress")
+	if ( queuelen > 1) {
+		queue.splice.apply( queue,
+			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+	}
+	el.dequeue();
+
+};
+
+
+/*!
+ * jQuery UI Effects Clip 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/clip-effect/
+ */
+
+
+var effectClip = $.effects.effect.clip = function( o, done ) {
+	// Create element
+	var el = $( this ),
+		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+		mode = $.effects.setMode( el, o.mode || "hide" ),
+		show = mode === "show",
+		direction = o.direction || "vertical",
+		vert = direction === "vertical",
+		size = vert ? "height" : "width",
+		position = vert ? "top" : "left",
+		animation = {},
+		wrapper, animate, distance;
+
+	// Save & Show
+	$.effects.save( el, props );
+	el.show();
+
+	// Create Wrapper
+	wrapper = $.effects.createWrapper( el ).css({
+		overflow: "hidden"
+	});
+	animate = ( el[0].tagName === "IMG" ) ? wrapper : el;
+	distance = animate[ size ]();
+
+	// Shift
+	if ( show ) {
+		animate.css( size, 0 );
+		animate.css( position, distance / 2 );
+	}
+
+	// Create Animation Object:
+	animation[ size ] = show ? distance : 0;
+	animation[ position ] = show ? 0 : distance / 2;
+
+	// Animate
+	animate.animate( animation, {
+		queue: false,
+		duration: o.duration,
+		easing: o.easing,
+		complete: function() {
+			if ( !show ) {
+				el.hide();
+			}
+			$.effects.restore( el, props );
+			$.effects.removeWrapper( el );
+			done();
+		}
+	});
+
+};
+
+
+/*!
+ * jQuery UI Effects Drop 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/drop-effect/
+ */
+
+
+var effectDrop = $.effects.effect.drop = function( o, done ) {
+
+	var el = $( this ),
+		props = [ "position", "top", "bottom", "left", "right", "opacity", "height", "width" ],
+		mode = $.effects.setMode( el, o.mode || "hide" ),
+		show = mode === "show",
+		direction = o.direction || "left",
+		ref = ( direction === "up" || direction === "down" ) ? "top" : "left",
+		motion = ( direction === "up" || direction === "left" ) ? "pos" : "neg",
+		animation = {
+			opacity: show ? 1 : 0
+		},
+		distance;
+
+	// Adjust
+	$.effects.save( el, props );
+	el.show();
+	$.effects.createWrapper( el );
+
+	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2;
+
+	if ( show ) {
+		el
+			.css( "opacity", 0 )
+			.css( ref, motion === "pos" ? -distance : distance );
+	}
+
+	// Animation
+	animation[ ref ] = ( show ?
+		( motion === "pos" ? "+=" : "-=" ) :
+		( motion === "pos" ? "-=" : "+=" ) ) +
+		distance;
+
+	// Animate
+	el.animate( animation, {
+		queue: false,
+		duration: o.duration,
+		easing: o.easing,
+		complete: function() {
+			if ( mode === "hide" ) {
+				el.hide();
+			}
+			$.effects.restore( el, props );
+			$.effects.removeWrapper( el );
+			done();
+		}
+	});
+};
+
+
+/*!
+ * jQuery UI Effects Explode 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/explode-effect/
+ */
+
+
+var effectExplode = $.effects.effect.explode = function( o, done ) {
+
+	var rows = o.pieces ? Math.round( Math.sqrt( o.pieces ) ) : 3,
+		cells = rows,
+		el = $( this ),
+		mode = $.effects.setMode( el, o.mode || "hide" ),
+		show = mode === "show",
+
+		// show and then visibility:hidden the element before calculating offset
+		offset = el.show().css( "visibility", "hidden" ).offset(),
+
+		// width and height of a piece
+		width = Math.ceil( el.outerWidth() / cells ),
+		height = Math.ceil( el.outerHeight() / rows ),
+		pieces = [],
+
+		// loop
+		i, j, left, top, mx, my;
+
+	// children animate complete:
+	function childComplete() {
+		pieces.push( this );
+		if ( pieces.length === rows * cells ) {
+			animComplete();
+		}
+	}
+
+	// clone the element for each row and cell.
+	for ( i = 0; i < rows ; i++ ) { // ===>
+		top = offset.top + i * height;
+		my = i - ( rows - 1 ) / 2 ;
+
+		for ( j = 0; j < cells ; j++ ) { // |||
+			left = offset.left + j * width;
+			mx = j - ( cells - 1 ) / 2 ;
+
+			// Create a clone of the now hidden main element that will be absolute positioned
+			// within a wrapper div off the -left and -top equal to size of our pieces
+			el
+				.clone()
+				.appendTo( "body" )
+				.wrap( "<div></div>" )
+				.css({
+					position: "absolute",
+					visibility: "visible",
+					left: -j * width,
+					top: -i * height
+				})
+
+			// select the wrapper - make it overflow: hidden and absolute positioned based on
+			// where the original was located +left and +top equal to the size of pieces
+				.parent()
+				.addClass( "ui-effects-explode" )
+				.css({
+					position: "absolute",
+					overflow: "hidden",
+					width: width,
+					height: height,
+					left: left + ( show ? mx * width : 0 ),
+					top: top + ( show ? my * height : 0 ),
+					opacity: show ? 0 : 1
+				}).animate({
+					left: left + ( show ? 0 : mx * width ),
+					top: top + ( show ? 0 : my * height ),
+					opacity: show ? 1 : 0
+				}, o.duration || 500, o.easing, childComplete );
+		}
+	}
+
+	function animComplete() {
+		el.css({
+			visibility: "visible"
+		});
+		$( pieces ).remove();
+		if ( !show ) {
+			el.hide();
+		}
+		done();
+	}
+};
+
+
+/*!
+ * jQuery UI Effects Fade 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/fade-effect/
+ */
+
+
+var effectFade = $.effects.effect.fade = function( o, done ) {
+	var el = $( this ),
+		mode = $.effects.setMode( el, o.mode || "toggle" );
+
+	el.animate({
+		opacity: mode
+	}, {
+		queue: false,
+		duration: o.duration,
+		easing: o.easing,
+		complete: done
+	});
+};
+
+
+/*!
+ * jQuery UI Effects Fold 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/fold-effect/
+ */
+
+
+var effectFold = $.effects.effect.fold = function( o, done ) {
+
+	// Create element
+	var el = $( this ),
+		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+		mode = $.effects.setMode( el, o.mode || "hide" ),
+		show = mode === "show",
+		hide = mode === "hide",
+		size = o.size || 15,
+		percent = /([0-9]+)%/.exec( size ),
+		horizFirst = !!o.horizFirst,
+		widthFirst = show !== horizFirst,
+		ref = widthFirst ? [ "width", "height" ] : [ "height", "width" ],
+		duration = o.duration / 2,
+		wrapper, distance,
+		animation1 = {},
+		animation2 = {};
+
+	$.effects.save( el, props );
+	el.show();
+
+	// Create Wrapper
+	wrapper = $.effects.createWrapper( el ).css({
+		overflow: "hidden"
+	});
+	distance = widthFirst ?
+		[ wrapper.width(), wrapper.height() ] :
+		[ wrapper.height(), wrapper.width() ];
+
+	if ( percent ) {
+		size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];
+	}
+	if ( show ) {
+		wrapper.css( horizFirst ? {
+			height: 0,
+			width: size
+		} : {
+			height: size,
+			width: 0
+		});
+	}
+
+	// Animation
+	animation1[ ref[ 0 ] ] = show ? distance[ 0 ] : size;
+	animation2[ ref[ 1 ] ] = show ? distance[ 1 ] : 0;
+
+	// Animate
+	wrapper
+		.animate( animation1, duration, o.easing )
+		.animate( animation2, duration, o.easing, function() {
+			if ( hide ) {
+				el.hide();
+			}
+			$.effects.restore( el, props );
+			$.effects.removeWrapper( el );
+			done();
+		});
+
+};
+
+
+/*!
+ * jQuery UI Effects Highlight 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/highlight-effect/
+ */
+
+
+var effectHighlight = $.effects.effect.highlight = function( o, done ) {
+	var elem = $( this ),
+		props = [ "backgroundImage", "backgroundColor", "opacity" ],
+		mode = $.effects.setMode( elem, o.mode || "show" ),
+		animation = {
+			backgroundColor: elem.css( "backgroundColor" )
+		};
+
+	if (mode === "hide") {
+		animation.opacity = 0;
+	}
+
+	$.effects.save( elem, props );
+
+	elem
+		.show()
+		.css({
+			backgroundImage: "none",
+			backgroundColor: o.color || "#ffff99"
+		})
+		.animate( animation, {
+			queue: false,
+			duration: o.duration,
+			easing: o.easing,
+			complete: function() {
+				if ( mode === "hide" ) {
+					elem.hide();
+				}
+				$.effects.restore( elem, props );
+				done();
+			}
+		});
+};
+
+
+/*!
+ * jQuery UI Effects Size 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/size-effect/
+ */
+
+
+var effectSize = $.effects.effect.size = function( o, done ) {
+
+	// Create element
+	var original, baseline, factor,
+		el = $( this ),
+		props0 = [ "position", "top", "bottom", "left", "right", "width", "height", "overflow", "opacity" ],
+
+		// Always restore
+		props1 = [ "position", "top", "bottom", "left", "right", "overflow", "opacity" ],
+
+		// Copy for children
+		props2 = [ "width", "height", "overflow" ],
+		cProps = [ "fontSize" ],
+		vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ],
+		hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ],
+
+		// Set options
+		mode = $.effects.setMode( el, o.mode || "effect" ),
+		restore = o.restore || mode !== "effect",
+		scale = o.scale || "both",
+		origin = o.origin || [ "middle", "center" ],
+		position = el.css( "position" ),
+		props = restore ? props0 : props1,
+		zero = {
+			height: 0,
+			width: 0,
+			outerHeight: 0,
+			outerWidth: 0
+		};
+
+	if ( mode === "show" ) {
+		el.show();
+	}
+	original = {
+		height: el.height(),
+		width: el.width(),
+		outerHeight: el.outerHeight(),
+		outerWidth: el.outerWidth()
+	};
+
+	if ( o.mode === "toggle" && mode === "show" ) {
+		el.from = o.to || zero;
+		el.to = o.from || original;
+	} else {
+		el.from = o.from || ( mode === "show" ? zero : original );
+		el.to = o.to || ( mode === "hide" ? zero : original );
+	}
+
+	// Set scaling factor
+	factor = {
+		from: {
+			y: el.from.height / original.height,
+			x: el.from.width / original.width
+		},
+		to: {
+			y: el.to.height / original.height,
+			x: el.to.width / original.width
+		}
+	};
+
+	// Scale the css box
+	if ( scale === "box" || scale === "both" ) {
+
+		// Vertical props scaling
+		if ( factor.from.y !== factor.to.y ) {
+			props = props.concat( vProps );
+			el.from = $.effects.setTransition( el, vProps, factor.from.y, el.from );
+			el.to = $.effects.setTransition( el, vProps, factor.to.y, el.to );
+		}
+
+		// Horizontal props scaling
+		if ( factor.from.x !== factor.to.x ) {
+			props = props.concat( hProps );
+			el.from = $.effects.setTransition( el, hProps, factor.from.x, el.from );
+			el.to = $.effects.setTransition( el, hProps, factor.to.x, el.to );
+		}
+	}
+
+	// Scale the content
+	if ( scale === "content" || scale === "both" ) {
+
+		// Vertical props scaling
+		if ( factor.from.y !== factor.to.y ) {
+			props = props.concat( cProps ).concat( props2 );
+			el.from = $.effects.setTransition( el, cProps, factor.from.y, el.from );
+			el.to = $.effects.setTransition( el, cProps, factor.to.y, el.to );
+		}
+	}
+
+	$.effects.save( el, props );
+	el.show();
+	$.effects.createWrapper( el );
+	el.css( "overflow", "hidden" ).css( el.from );
+
+	// Adjust
+	if (origin) { // Calculate baseline shifts
+		baseline = $.effects.getBaseline( origin, original );
+		el.from.top = ( original.outerHeight - el.outerHeight() ) * baseline.y;
+		el.from.left = ( original.outerWidth - el.outerWidth() ) * baseline.x;
+		el.to.top = ( original.outerHeight - el.to.outerHeight ) * baseline.y;
+		el.to.left = ( original.outerWidth - el.to.outerWidth ) * baseline.x;
+	}
+	el.css( el.from ); // set top & left
+
+	// Animate
+	if ( scale === "content" || scale === "both" ) { // Scale the children
+
+		// Add margins/font-size
+		vProps = vProps.concat([ "marginTop", "marginBottom" ]).concat(cProps);
+		hProps = hProps.concat([ "marginLeft", "marginRight" ]);
+		props2 = props0.concat(vProps).concat(hProps);
+
+		el.find( "*[width]" ).each( function() {
+			var child = $( this ),
+				c_original = {
+					height: child.height(),
+					width: child.width(),
+					outerHeight: child.outerHeight(),
+					outerWidth: child.outerWidth()
+				};
+			if (restore) {
+				$.effects.save(child, props2);
+			}
+
+			child.from = {
+				height: c_original.height * factor.from.y,
+				width: c_original.width * factor.from.x,
+				outerHeight: c_original.outerHeight * factor.from.y,
+				outerWidth: c_original.outerWidth * factor.from.x
+			};
+			child.to = {
+				height: c_original.height * factor.to.y,
+				width: c_original.width * factor.to.x,
+				outerHeight: c_original.height * factor.to.y,
+				outerWidth: c_original.width * factor.to.x
+			};
+
+			// Vertical props scaling
+			if ( factor.from.y !== factor.to.y ) {
+				child.from = $.effects.setTransition( child, vProps, factor.from.y, child.from );
+				child.to = $.effects.setTransition( child, vProps, factor.to.y, child.to );
+			}
+
+			// Horizontal props scaling
+			if ( factor.from.x !== factor.to.x ) {
+				child.from = $.effects.setTransition( child, hProps, factor.from.x, child.from );
+				child.to = $.effects.setTransition( child, hProps, factor.to.x, child.to );
+			}
+
+			// Animate children
+			child.css( child.from );
+			child.animate( child.to, o.duration, o.easing, function() {
+
+				// Restore children
+				if ( restore ) {
+					$.effects.restore( child, props2 );
+				}
+			});
+		});
+	}
+
+	// Animate
+	el.animate( el.to, {
+		queue: false,
+		duration: o.duration,
+		easing: o.easing,
+		complete: function() {
+			if ( el.to.opacity === 0 ) {
+				el.css( "opacity", el.from.opacity );
+			}
+			if ( mode === "hide" ) {
+				el.hide();
+			}
+			$.effects.restore( el, props );
+			if ( !restore ) {
+
+				// we need to calculate our new positioning based on the scaling
+				if ( position === "static" ) {
+					el.css({
+						position: "relative",
+						top: el.to.top,
+						left: el.to.left
+					});
+				} else {
+					$.each([ "top", "left" ], function( idx, pos ) {
+						el.css( pos, function( _, str ) {
+							var val = parseInt( str, 10 ),
+								toRef = idx ? el.to.left : el.to.top;
+
+							// if original was "auto", recalculate the new value from wrapper
+							if ( str === "auto" ) {
+								return toRef + "px";
+							}
+
+							return val + toRef + "px";
+						});
+					});
+				}
+			}
+
+			$.effects.removeWrapper( el );
+			done();
+		}
+	});
+
+};
+
+
+/*!
+ * jQuery UI Effects Scale 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/scale-effect/
+ */
+
+
+var effectScale = $.effects.effect.scale = function( o, done ) {
+
+	// Create element
+	var el = $( this ),
+		options = $.extend( true, {}, o ),
+		mode = $.effects.setMode( el, o.mode || "effect" ),
+		percent = parseInt( o.percent, 10 ) ||
+			( parseInt( o.percent, 10 ) === 0 ? 0 : ( mode === "hide" ? 0 : 100 ) ),
+		direction = o.direction || "both",
+		origin = o.origin,
+		original = {
+			height: el.height(),
+			width: el.width(),
+			outerHeight: el.outerHeight(),
+			outerWidth: el.outerWidth()
+		},
+		factor = {
+			y: direction !== "horizontal" ? (percent / 100) : 1,
+			x: direction !== "vertical" ? (percent / 100) : 1
+		};
+
+	// We are going to pass this effect to the size effect:
+	options.effect = "size";
+	options.queue = false;
+	options.complete = done;
+
+	// Set default origin and restore for show/hide
+	if ( mode !== "effect" ) {
+		options.origin = origin || [ "middle", "center" ];
+		options.restore = true;
+	}
+
+	options.from = o.from || ( mode === "show" ? {
+		height: 0,
+		width: 0,
+		outerHeight: 0,
+		outerWidth: 0
+	} : original );
+	options.to = {
+		height: original.height * factor.y,
+		width: original.width * factor.x,
+		outerHeight: original.outerHeight * factor.y,
+		outerWidth: original.outerWidth * factor.x
+	};
+
+	// Fade option to support puff
+	if ( options.fade ) {
+		if ( mode === "show" ) {
+			options.from.opacity = 0;
+			options.to.opacity = 1;
+		}
+		if ( mode === "hide" ) {
+			options.from.opacity = 1;
+			options.to.opacity = 0;
+		}
+	}
+
+	// Animate
+	el.effect( options );
+
+};
+
+
+/*!
+ * jQuery UI Effects Puff 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/puff-effect/
+ */
+
+
+var effectPuff = $.effects.effect.puff = function( o, done ) {
+	var elem = $( this ),
+		mode = $.effects.setMode( elem, o.mode || "hide" ),
+		hide = mode === "hide",
+		percent = parseInt( o.percent, 10 ) || 150,
+		factor = percent / 100,
+		original = {
+			height: elem.height(),
+			width: elem.width(),
+			outerHeight: elem.outerHeight(),
+			outerWidth: elem.outerWidth()
+		};
+
+	$.extend( o, {
+		effect: "scale",
+		queue: false,
+		fade: true,
+		mode: mode,
+		complete: done,
+		percent: hide ? percent : 100,
+		from: hide ?
+			original :
+			{
+				height: original.height * factor,
+				width: original.width * factor,
+				outerHeight: original.outerHeight * factor,
+				outerWidth: original.outerWidth * factor
+			}
+	});
+
+	elem.effect( o );
+};
+
+
+/*!
+ * jQuery UI Effects Pulsate 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/pulsate-effect/
+ */
+
+
+var effectPulsate = $.effects.effect.pulsate = function( o, done ) {
+	var elem = $( this ),
+		mode = $.effects.setMode( elem, o.mode || "show" ),
+		show = mode === "show",
+		hide = mode === "hide",
+		showhide = ( show || mode === "hide" ),
+
+		// showing or hiding leaves of the "last" animation
+		anims = ( ( o.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),
+		duration = o.duration / anims,
+		animateTo = 0,
+		queue = elem.queue(),
+		queuelen = queue.length,
+		i;
+
+	if ( show || !elem.is(":visible")) {
+		elem.css( "opacity", 0 ).show();
+		animateTo = 1;
+	}
+
+	// anims - 1 opacity "toggles"
+	for ( i = 1; i < anims; i++ ) {
+		elem.animate({
+			opacity: animateTo
+		}, duration, o.easing );
+		animateTo = 1 - animateTo;
+	}
+
+	elem.animate({
+		opacity: animateTo
+	}, duration, o.easing);
+
+	elem.queue(function() {
+		if ( hide ) {
+			elem.hide();
+		}
+		done();
+	});
+
+	// We just queued up "anims" animations, we need to put them next in the queue
+	if ( queuelen > 1 ) {
+		queue.splice.apply( queue,
+			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+	}
+	elem.dequeue();
+};
+
+
+/*!
+ * jQuery UI Effects Shake 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/shake-effect/
+ */
+
+
+var effectShake = $.effects.effect.shake = function( o, done ) {
+
+	var el = $( this ),
+		props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
+		mode = $.effects.setMode( el, o.mode || "effect" ),
+		direction = o.direction || "left",
+		distance = o.distance || 20,
+		times = o.times || 3,
+		anims = times * 2 + 1,
+		speed = Math.round( o.duration / anims ),
+		ref = (direction === "up" || direction === "down") ? "top" : "left",
+		positiveMotion = (direction === "up" || direction === "left"),
+		animation = {},
+		animation1 = {},
+		animation2 = {},
+		i,
+
+		// we will need to re-assemble the queue to stack our animations in place
+		queue = el.queue(),
+		queuelen = queue.length;
+
+	$.effects.save( el, props );
+	el.show();
+	$.effects.createWrapper( el );
+
+	// Animation
+	animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance;
+	animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2;
+	animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2;
+
+	// Animate
+	el.animate( animation, speed, o.easing );
+
+	// Shakes
+	for ( i = 1; i < times; i++ ) {
+		el.animate( animation1, speed, o.easing ).animate( animation2, speed, o.easing );
+	}
+	el
+		.animate( animation1, speed, o.easing )
+		.animate( animation, speed / 2, o.easing )
+		.queue(function() {
+			if ( mode === "hide" ) {
+				el.hide();
+			}
+			$.effects.restore( el, props );
+			$.effects.removeWrapper( el );
+			done();
+		});
+
+	// inject all the animations we just queued to be first in line (after "inprogress")
+	if ( queuelen > 1) {
+		queue.splice.apply( queue,
+			[ 1, 0 ].concat( queue.splice( queuelen, anims + 1 ) ) );
+	}
+	el.dequeue();
+
+};
+
+
+/*!
+ * jQuery UI Effects Slide 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/slide-effect/
+ */
+
+
+var effectSlide = $.effects.effect.slide = function( o, done ) {
+
+	// Create element
+	var el = $( this ),
+		props = [ "position", "top", "bottom", "left", "right", "width", "height" ],
+		mode = $.effects.setMode( el, o.mode || "show" ),
+		show = mode === "show",
+		direction = o.direction || "left",
+		ref = (direction === "up" || direction === "down") ? "top" : "left",
+		positiveMotion = (direction === "up" || direction === "left"),
+		distance,
+		animation = {};
+
+	// Adjust
+	$.effects.save( el, props );
+	el.show();
+	distance = o.distance || el[ ref === "top" ? "outerHeight" : "outerWidth" ]( true );
+
+	$.effects.createWrapper( el ).css({
+		overflow: "hidden"
+	});
+
+	if ( show ) {
+		el.css( ref, positiveMotion ? (isNaN(distance) ? "-" + distance : -distance) : distance );
+	}
+
+	// Animation
+	animation[ ref ] = ( show ?
+		( positiveMotion ? "+=" : "-=") :
+		( positiveMotion ? "-=" : "+=")) +
+		distance;
+
+	// Animate
+	el.animate( animation, {
+		queue: false,
+		duration: o.duration,
+		easing: o.easing,
+		complete: function() {
+			if ( mode === "hide" ) {
+				el.hide();
+			}
+			$.effects.restore( el, props );
+			$.effects.removeWrapper( el );
+			done();
+		}
+	});
+};
+
+
+/*!
+ * jQuery UI Effects Transfer 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/transfer-effect/
+ */
+
+
+var effectTransfer = $.effects.effect.transfer = function( o, done ) {
+	var elem = $( this ),
+		target = $( o.to ),
+		targetFixed = target.css( "position" ) === "fixed",
+		body = $("body"),
+		fixTop = targetFixed ? body.scrollTop() : 0,
+		fixLeft = targetFixed ? body.scrollLeft() : 0,
+		endPosition = target.offset(),
+		animation = {
+			top: endPosition.top - fixTop,
+			left: endPosition.left - fixLeft,
+			height: target.innerHeight(),
+			width: target.innerWidth()
+		},
+		startPosition = elem.offset(),
+		transfer = $( "<div class='ui-effects-transfer'></div>" )
+			.appendTo( document.body )
+			.addClass( o.className )
+			.css({
+				top: startPosition.top - fixTop,
+				left: startPosition.left - fixLeft,
+				height: elem.innerHeight(),
+				width: elem.innerWidth(),
+				position: targetFixed ? "fixed" : "absolute"
+			})
+			.animate( animation, o.duration, o.easing, function() {
+				transfer.remove();
+				done();
+			});
+};
+
+
+/*!
+ * jQuery UI Progressbar 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/progressbar/
+ */
+
+
+var progressbar = $.widget( "ui.progressbar", {
+	version: "1.11.4",
+	options: {
+		max: 100,
+		value: 0,
+
+		change: null,
+		complete: null
+	},
+
+	min: 0,
+
+	_create: function() {
+		// Constrain initial value
+		this.oldValue = this.options.value = this._constrainedValue();
+
+		this.element
+			.addClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+			.attr({
+				// Only set static values, aria-valuenow and aria-valuemax are
+				// set inside _refreshValue()
+				role: "progressbar",
+				"aria-valuemin": this.min
+			});
+
+		this.valueDiv = $( "<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>" )
+			.appendTo( this.element );
+
+		this._refreshValue();
+	},
+
+	_destroy: function() {
+		this.element
+			.removeClass( "ui-progressbar ui-widget ui-widget-content ui-corner-all" )
+			.removeAttr( "role" )
+			.removeAttr( "aria-valuemin" )
+			.removeAttr( "aria-valuemax" )
+			.removeAttr( "aria-valuenow" );
+
+		this.valueDiv.remove();
+	},
+
+	value: function( newValue ) {
+		if ( newValue === undefined ) {
+			return this.options.value;
+		}
+
+		this.options.value = this._constrainedValue( newValue );
+		this._refreshValue();
+	},
+
+	_constrainedValue: function( newValue ) {
+		if ( newValue === undefined ) {
+			newValue = this.options.value;
+		}
+
+		this.indeterminate = newValue === false;
+
+		// sanitize value
+		if ( typeof newValue !== "number" ) {
+			newValue = 0;
+		}
+
+		return this.indeterminate ? false :
+			Math.min( this.options.max, Math.max( this.min, newValue ) );
+	},
+
+	_setOptions: function( options ) {
+		// Ensure "value" option is set after other values (like max)
+		var value = options.value;
+		delete options.value;
+
+		this._super( options );
+
+		this.options.value = this._constrainedValue( value );
+		this._refreshValue();
+	},
+
+	_setOption: function( key, value ) {
+		if ( key === "max" ) {
+			// Don't allow a max less than min
+			value = Math.max( this.min, value );
+		}
+		if ( key === "disabled" ) {
+			this.element
+				.toggleClass( "ui-state-disabled", !!value )
+				.attr( "aria-disabled", value );
+		}
+		this._super( key, value );
+	},
+
+	_percentage: function() {
+		return this.indeterminate ? 100 : 100 * ( this.options.value - this.min ) / ( this.options.max - this.min );
+	},
+
+	_refreshValue: function() {
+		var value = this.options.value,
+			percentage = this._percentage();
+
+		this.valueDiv
+			.toggle( this.indeterminate || value > this.min )
+			.toggleClass( "ui-corner-right", value === this.options.max )
+			.width( percentage.toFixed(0) + "%" );
+
+		this.element.toggleClass( "ui-progressbar-indeterminate", this.indeterminate );
+
+		if ( this.indeterminate ) {
+			this.element.removeAttr( "aria-valuenow" );
+			if ( !this.overlayDiv ) {
+				this.overlayDiv = $( "<div class='ui-progressbar-overlay'></div>" ).appendTo( this.valueDiv );
+			}
+		} else {
+			this.element.attr({
+				"aria-valuemax": this.options.max,
+				"aria-valuenow": value
+			});
+			if ( this.overlayDiv ) {
+				this.overlayDiv.remove();
+				this.overlayDiv = null;
+			}
+		}
+
+		if ( this.oldValue !== value ) {
+			this.oldValue = value;
+			this._trigger( "change" );
+		}
+		if ( value === this.options.max ) {
+			this._trigger( "complete" );
+		}
+	}
+});
+
+
+/*!
+ * jQuery UI Selectable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/selectable/
+ */
+
+
+var selectable = $.widget("ui.selectable", $.ui.mouse, {
+	version: "1.11.4",
+	options: {
+		appendTo: "body",
+		autoRefresh: true,
+		distance: 0,
+		filter: "*",
+		tolerance: "touch",
+
+		// callbacks
+		selected: null,
+		selecting: null,
+		start: null,
+		stop: null,
+		unselected: null,
+		unselecting: null
+	},
+	_create: function() {
+		var selectees,
+			that = this;
+
+		this.element.addClass("ui-selectable");
+
+		this.dragged = false;
+
+		// cache selectee children based on filter
+		this.refresh = function() {
+			selectees = $(that.options.filter, that.element[0]);
+			selectees.addClass("ui-selectee");
+			selectees.each(function() {
+				var $this = $(this),
+					pos = $this.offset();
+				$.data(this, "selectable-item", {
+					element: this,
+					$element: $this,
+					left: pos.left,
+					top: pos.top,
+					right: pos.left + $this.outerWidth(),
+					bottom: pos.top + $this.outerHeight(),
+					startselected: false,
+					selected: $this.hasClass("ui-selected"),
+					selecting: $this.hasClass("ui-selecting"),
+					unselecting: $this.hasClass("ui-unselecting")
+				});
+			});
+		};
+		this.refresh();
+
+		this.selectees = selectees.addClass("ui-selectee");
+
+		this._mouseInit();
+
+		this.helper = $("<div class='ui-selectable-helper'></div>");
+	},
+
+	_destroy: function() {
+		this.selectees
+			.removeClass("ui-selectee")
+			.removeData("selectable-item");
+		this.element
+			.removeClass("ui-selectable ui-selectable-disabled");
+		this._mouseDestroy();
+	},
+
+	_mouseStart: function(event) {
+		var that = this,
+			options = this.options;
+
+		this.opos = [ event.pageX, event.pageY ];
+
+		if (this.options.disabled) {
+			return;
+		}
+
+		this.selectees = $(options.filter, this.element[0]);
+
+		this._trigger("start", event);
+
+		$(options.appendTo).append(this.helper);
+		// position helper (lasso)
+		this.helper.css({
+			"left": event.pageX,
+			"top": event.pageY,
+			"width": 0,
+			"height": 0
+		});
+
+		if (options.autoRefresh) {
+			this.refresh();
+		}
+
+		this.selectees.filter(".ui-selected").each(function() {
+			var selectee = $.data(this, "selectable-item");
+			selectee.startselected = true;
+			if (!event.metaKey && !event.ctrlKey) {
+				selectee.$element.removeClass("ui-selected");
+				selectee.selected = false;
+				selectee.$element.addClass("ui-unselecting");
+				selectee.unselecting = true;
+				// selectable UNSELECTING callback
+				that._trigger("unselecting", event, {
+					unselecting: selectee.element
+				});
+			}
+		});
+
+		$(event.target).parents().addBack().each(function() {
+			var doSelect,
+				selectee = $.data(this, "selectable-item");
+			if (selectee) {
+				doSelect = (!event.metaKey && !event.ctrlKey) || !selectee.$element.hasClass("ui-selected");
+				selectee.$element
+					.removeClass(doSelect ? "ui-unselecting" : "ui-selected")
+					.addClass(doSelect ? "ui-selecting" : "ui-unselecting");
+				selectee.unselecting = !doSelect;
+				selectee.selecting = doSelect;
+				selectee.selected = doSelect;
+				// selectable (UN)SELECTING callback
+				if (doSelect) {
+					that._trigger("selecting", event, {
+						selecting: selectee.element
+					});
+				} else {
+					that._trigger("unselecting", event, {
+						unselecting: selectee.element
+					});
+				}
+				return false;
+			}
+		});
+
+	},
+
+	_mouseDrag: function(event) {
+
+		this.dragged = true;
+
+		if (this.options.disabled) {
+			return;
+		}
+
+		var tmp,
+			that = this,
+			options = this.options,
+			x1 = this.opos[0],
+			y1 = this.opos[1],
+			x2 = event.pageX,
+			y2 = event.pageY;
+
+		if (x1 > x2) { tmp = x2; x2 = x1; x1 = tmp; }
+		if (y1 > y2) { tmp = y2; y2 = y1; y1 = tmp; }
+		this.helper.css({ left: x1, top: y1, width: x2 - x1, height: y2 - y1 });
+
+		this.selectees.each(function() {
+			var selectee = $.data(this, "selectable-item"),
+				hit = false;
+
+			//prevent helper from being selected if appendTo: selectable
+			if (!selectee || selectee.element === that.element[0]) {
+				return;
+			}
+
+			if (options.tolerance === "touch") {
+				hit = ( !(selectee.left > x2 || selectee.right < x1 || selectee.top > y2 || selectee.bottom < y1) );
+			} else if (options.tolerance === "fit") {
+				hit = (selectee.left > x1 && selectee.right < x2 && selectee.top > y1 && selectee.bottom < y2);
+			}
+
+			if (hit) {
+				// SELECT
+				if (selectee.selected) {
+					selectee.$element.removeClass("ui-selected");
+					selectee.selected = false;
+				}
+				if (selectee.unselecting) {
+					selectee.$element.removeClass("ui-unselecting");
+					selectee.unselecting = false;
+				}
+				if (!selectee.selecting) {
+					selectee.$element.addClass("ui-selecting");
+					selectee.selecting = true;
+					// selectable SELECTING callback
+					that._trigger("selecting", event, {
+						selecting: selectee.element
+					});
+				}
+			} else {
+				// UNSELECT
+				if (selectee.selecting) {
+					if ((event.metaKey || event.ctrlKey) && selectee.startselected) {
+						selectee.$element.removeClass("ui-selecting");
+						selectee.selecting = false;
+						selectee.$element.addClass("ui-selected");
+						selectee.selected = true;
+					} else {
+						selectee.$element.removeClass("ui-selecting");
+						selectee.selecting = false;
+						if (selectee.startselected) {
+							selectee.$element.addClass("ui-unselecting");
+							selectee.unselecting = true;
+						}
+						// selectable UNSELECTING callback
+						that._trigger("unselecting", event, {
+							unselecting: selectee.element
+						});
+					}
+				}
+				if (selectee.selected) {
+					if (!event.metaKey && !event.ctrlKey && !selectee.startselected) {
+						selectee.$element.removeClass("ui-selected");
+						selectee.selected = false;
+
+						selectee.$element.addClass("ui-unselecting");
+						selectee.unselecting = true;
+						// selectable UNSELECTING callback
+						that._trigger("unselecting", event, {
+							unselecting: selectee.element
+						});
+					}
+				}
+			}
+		});
+
+		return false;
+	},
+
+	_mouseStop: function(event) {
+		var that = this;
+
+		this.dragged = false;
+
+		$(".ui-unselecting", this.element[0]).each(function() {
+			var selectee = $.data(this, "selectable-item");
+			selectee.$element.removeClass("ui-unselecting");
+			selectee.unselecting = false;
+			selectee.startselected = false;
+			that._trigger("unselected", event, {
+				unselected: selectee.element
+			});
+		});
+		$(".ui-selecting", this.element[0]).each(function() {
+			var selectee = $.data(this, "selectable-item");
+			selectee.$element.removeClass("ui-selecting").addClass("ui-selected");
+			selectee.selecting = false;
+			selectee.selected = true;
+			selectee.startselected = true;
+			that._trigger("selected", event, {
+				selected: selectee.element
+			});
+		});
+		this._trigger("stop", event);
+
+		this.helper.remove();
+
+		return false;
+	}
+
+});
+
+
+/*!
+ * jQuery UI Selectmenu 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/selectmenu
+ */
+
+
+var selectmenu = $.widget( "ui.selectmenu", {
+	version: "1.11.4",
+	defaultElement: "<select>",
+	options: {
+		appendTo: null,
+		disabled: null,
+		icons: {
+			button: "ui-icon-triangle-1-s"
+		},
+		position: {
+			my: "left top",
+			at: "left bottom",
+			collision: "none"
+		},
+		width: null,
+
+		// callbacks
+		change: null,
+		close: null,
+		focus: null,
+		open: null,
+		select: null
+	},
+
+	_create: function() {
+		var selectmenuId = this.element.uniqueId().attr( "id" );
+		this.ids = {
+			element: selectmenuId,
+			button: selectmenuId + "-button",
+			menu: selectmenuId + "-menu"
+		};
+
+		this._drawButton();
+		this._drawMenu();
+
+		if ( this.options.disabled ) {
+			this.disable();
+		}
+	},
+
+	_drawButton: function() {
+		var that = this;
+
+		// Associate existing label with the new button
+		this.label = $( "label[for='" + this.ids.element + "']" ).attr( "for", this.ids.button );
+		this._on( this.label, {
+			click: function( event ) {
+				this.button.focus();
+				event.preventDefault();
+			}
+		});
+
+		// Hide original select element
+		this.element.hide();
+
+		// Create button
+		this.button = $( "<span>", {
+			"class": "ui-selectmenu-button ui-widget ui-state-default ui-corner-all",
+			tabindex: this.options.disabled ? -1 : 0,
+			id: this.ids.button,
+			role: "combobox",
+			"aria-expanded": "false",
+			"aria-autocomplete": "list",
+			"aria-owns": this.ids.menu,
+			"aria-haspopup": "true"
+		})
+			.insertAfter( this.element );
+
+		$( "<span>", {
+			"class": "ui-icon " + this.options.icons.button
+		})
+			.prependTo( this.button );
+
+		this.buttonText = $( "<span>", {
+			"class": "ui-selectmenu-text"
+		})
+			.appendTo( this.button );
+
+		this._setText( this.buttonText, this.element.find( "option:selected" ).text() );
+		this._resizeButton();
+
+		this._on( this.button, this._buttonEvents );
+		this.button.one( "focusin", function() {
+
+			// Delay rendering the menu items until the button receives focus.
+			// The menu may have already been rendered via a programmatic open.
+			if ( !that.menuItems ) {
+				that._refreshMenu();
+			}
+		});
+		this._hoverable( this.button );
+		this._focusable( this.button );
+	},
+
+	_drawMenu: function() {
+		var that = this;
+
+		// Create menu
+		this.menu = $( "<ul>", {
+			"aria-hidden": "true",
+			"aria-labelledby": this.ids.button,
+			id: this.ids.menu
+		});
+
+		// Wrap menu
+		this.menuWrap = $( "<div>", {
+			"class": "ui-selectmenu-menu ui-front"
+		})
+			.append( this.menu )
+			.appendTo( this._appendTo() );
+
+		// Initialize menu widget
+		this.menuInstance = this.menu
+			.menu({
+				role: "listbox",
+				select: function( event, ui ) {
+					event.preventDefault();
+
+					// support: IE8
+					// If the item was selected via a click, the text selection
+					// will be destroyed in IE
+					that._setSelection();
+
+					that._select( ui.item.data( "ui-selectmenu-item" ), event );
+				},
+				focus: function( event, ui ) {
+					var item = ui.item.data( "ui-selectmenu-item" );
+
+					// Prevent inital focus from firing and check if its a newly focused item
+					if ( that.focusIndex != null && item.index !== that.focusIndex ) {
+						that._trigger( "focus", event, { item: item } );
+						if ( !that.isOpen ) {
+							that._select( item, event );
+						}
+					}
+					that.focusIndex = item.index;
+
+					that.button.attr( "aria-activedescendant",
+						that.menuItems.eq( item.index ).attr( "id" ) );
+				}
+			})
+			.menu( "instance" );
+
+		// Adjust menu styles to dropdown
+		this.menu
+			.addClass( "ui-corner-bottom" )
+			.removeClass( "ui-corner-all" );
+
+		// Don't close the menu on mouseleave
+		this.menuInstance._off( this.menu, "mouseleave" );
+
+		// Cancel the menu's collapseAll on document click
+		this.menuInstance._closeOnDocumentClick = function() {
+			return false;
+		};
+
+		// Selects often contain empty items, but never contain dividers
+		this.menuInstance._isDivider = function() {
+			return false;
+		};
+	},
+
+	refresh: function() {
+		this._refreshMenu();
+		this._setText( this.buttonText, this._getSelectedItem().text() );
+		if ( !this.options.width ) {
+			this._resizeButton();
+		}
+	},
+
+	_refreshMenu: function() {
+		this.menu.empty();
+
+		var item,
+			options = this.element.find( "option" );
+
+		if ( !options.length ) {
+			return;
+		}
+
+		this._parseOptions( options );
+		this._renderMenu( this.menu, this.items );
+
+		this.menuInstance.refresh();
+		this.menuItems = this.menu.find( "li" ).not( ".ui-selectmenu-optgroup" );
+
+		item = this._getSelectedItem();
+
+		// Update the menu to have the correct item focused
+		this.menuInstance.focus( null, item );
+		this._setAria( item.data( "ui-selectmenu-item" ) );
+
+		// Set disabled state
+		this._setOption( "disabled", this.element.prop( "disabled" ) );
+	},
+
+	open: function( event ) {
+		if ( this.options.disabled ) {
+			return;
+		}
+
+		// If this is the first time the menu is being opened, render the items
+		if ( !this.menuItems ) {
+			this._refreshMenu();
+		} else {
+
+			// Menu clears focus on close, reset focus to selected item
+			this.menu.find( ".ui-state-focus" ).removeClass( "ui-state-focus" );
+			this.menuInstance.focus( null, this._getSelectedItem() );
+		}
+
+		this.isOpen = true;
+		this._toggleAttr();
+		this._resizeMenu();
+		this._position();
+
+		this._on( this.document, this._documentClick );
+
+		this._trigger( "open", event );
+	},
+
+	_position: function() {
+		this.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );
+	},
+
+	close: function( event ) {
+		if ( !this.isOpen ) {
+			return;
+		}
+
+		this.isOpen = false;
+		this._toggleAttr();
+
+		this.range = null;
+		this._off( this.document );
+
+		this._trigger( "close", event );
+	},
+
+	widget: function() {
+		return this.button;
+	},
+
+	menuWidget: function() {
+		return this.menu;
+	},
+
+	_renderMenu: function( ul, items ) {
+		var that = this,
+			currentOptgroup = "";
+
+		$.each( items, function( index, item ) {
+			if ( item.optgroup !== currentOptgroup ) {
+				$( "<li>", {
+					"class": "ui-selectmenu-optgroup ui-menu-divider" +
+						( item.element.parent( "optgroup" ).prop( "disabled" ) ?
+							" ui-state-disabled" :
+							"" ),
+					text: item.optgroup
+				})
+					.appendTo( ul );
+
+				currentOptgroup = item.optgroup;
+			}
+
+			that._renderItemData( ul, item );
+		});
+	},
+
+	_renderItemData: function( ul, item ) {
+		return this._renderItem( ul, item ).data( "ui-selectmenu-item", item );
+	},
+
+	_renderItem: function( ul, item ) {
+		var li = $( "<li>" );
+
+		if ( item.disabled ) {
+			li.addClass( "ui-state-disabled" );
+		}
+		this._setText( li, item.label );
+
+		return li.appendTo( ul );
+	},
+
+	_setText: function( element, value ) {
+		if ( value ) {
+			element.text( value );
+		} else {
+			element.html( "&#160;" );
+		}
+	},
+
+	_move: function( direction, event ) {
+		var item, next,
+			filter = ".ui-menu-item";
+
+		if ( this.isOpen ) {
+			item = this.menuItems.eq( this.focusIndex );
+		} else {
+			item = this.menuItems.eq( this.element[ 0 ].selectedIndex );
+			filter += ":not(.ui-state-disabled)";
+		}
+
+		if ( direction === "first" || direction === "last" ) {
+			next = item[ direction === "first" ? "prevAll" : "nextAll" ]( filter ).eq( -1 );
+		} else {
+			next = item[ direction + "All" ]( filter ).eq( 0 );
+		}
+
+		if ( next.length ) {
+			this.menuInstance.focus( event, next );
+		}
+	},
+
+	_getSelectedItem: function() {
+		return this.menuItems.eq( this.element[ 0 ].selectedIndex );
+	},
+
+	_toggle: function( event ) {
+		this[ this.isOpen ? "close" : "open" ]( event );
+	},
+
+	_setSelection: function() {
+		var selection;
+
+		if ( !this.range ) {
+			return;
+		}
+
+		if ( window.getSelection ) {
+			selection = window.getSelection();
+			selection.removeAllRanges();
+			selection.addRange( this.range );
+
+		// support: IE8
+		} else {
+			this.range.select();
+		}
+
+		// support: IE
+		// Setting the text selection kills the button focus in IE, but
+		// restoring the focus doesn't kill the selection.
+		this.button.focus();
+	},
+
+	_documentClick: {
+		mousedown: function( event ) {
+			if ( !this.isOpen ) {
+				return;
+			}
+
+			if ( !$( event.target ).closest( ".ui-selectmenu-menu, #" + this.ids.button ).length ) {
+				this.close( event );
+			}
+		}
+	},
+
+	_buttonEvents: {
+
+		// Prevent text selection from being reset when interacting with the selectmenu (#10144)
+		mousedown: function() {
+			var selection;
+
+			if ( window.getSelection ) {
+				selection = window.getSelection();
+				if ( selection.rangeCount ) {
+					this.range = selection.getRangeAt( 0 );
+				}
+
+			// support: IE8
+			} else {
+				this.range = document.selection.createRange();
+			}
+		},
+
+		click: function( event ) {
+			this._setSelection();
+			this._toggle( event );
+		},
+
+		keydown: function( event ) {
+			var preventDefault = true;
+			switch ( event.keyCode ) {
+				case $.ui.keyCode.TAB:
+				case $.ui.keyCode.ESCAPE:
+					this.close( event );
+					preventDefault = false;
+					break;
+				case $.ui.keyCode.ENTER:
+					if ( this.isOpen ) {
+						this._selectFocusedItem( event );
+					}
+					break;
+				case $.ui.keyCode.UP:
+					if ( event.altKey ) {
+						this._toggle( event );
+					} else {
+						this._move( "prev", event );
+					}
+					break;
+				case $.ui.keyCode.DOWN:
+					if ( event.altKey ) {
+						this._toggle( event );
+					} else {
+						this._move( "next", event );
+					}
+					break;
+				case $.ui.keyCode.SPACE:
+					if ( this.isOpen ) {
+						this._selectFocusedItem( event );
+					} else {
+						this._toggle( event );
+					}
+					break;
+				case $.ui.keyCode.LEFT:
+					this._move( "prev", event );
+					break;
+				case $.ui.keyCode.RIGHT:
+					this._move( "next", event );
+					break;
+				case $.ui.keyCode.HOME:
+				case $.ui.keyCode.PAGE_UP:
+					this._move( "first", event );
+					break;
+				case $.ui.keyCode.END:
+				case $.ui.keyCode.PAGE_DOWN:
+					this._move( "last", event );
+					break;
+				default:
+					this.menu.trigger( event );
+					preventDefault = false;
+			}
+
+			if ( preventDefault ) {
+				event.preventDefault();
+			}
+		}
+	},
+
+	_selectFocusedItem: function( event ) {
+		var item = this.menuItems.eq( this.focusIndex );
+		if ( !item.hasClass( "ui-state-disabled" ) ) {
+			this._select( item.data( "ui-selectmenu-item" ), event );
+		}
+	},
+
+	_select: function( item, event ) {
+		var oldIndex = this.element[ 0 ].selectedIndex;
+
+		// Change native select element
+		this.element[ 0 ].selectedIndex = item.index;
+		this._setText( this.buttonText, item.label );
+		this._setAria( item );
+		this._trigger( "select", event, { item: item } );
+
+		if ( item.index !== oldIndex ) {
+			this._trigger( "change", event, { item: item } );
+		}
+
+		this.close( event );
+	},
+
+	_setAria: function( item ) {
+		var id = this.menuItems.eq( item.index ).attr( "id" );
+
+		this.button.attr({
+			"aria-labelledby": id,
+			"aria-activedescendant": id
+		});
+		this.menu.attr( "aria-activedescendant", id );
+	},
+
+	_setOption: function( key, value ) {
+		if ( key === "icons" ) {
+			this.button.find( "span.ui-icon" )
+				.removeClass( this.options.icons.button )
+				.addClass( value.button );
+		}
+
+		this._super( key, value );
+
+		if ( key === "appendTo" ) {
+			this.menuWrap.appendTo( this._appendTo() );
+		}
+
+		if ( key === "disabled" ) {
+			this.menuInstance.option( "disabled", value );
+			this.button
+				.toggleClass( "ui-state-disabled", value )
+				.attr( "aria-disabled", value );
+
+			this.element.prop( "disabled", value );
+			if ( value ) {
+				this.button.attr( "tabindex", -1 );
+				this.close();
+			} else {
+				this.button.attr( "tabindex", 0 );
+			}
+		}
+
+		if ( key === "width" ) {
+			this._resizeButton();
+		}
+	},
+
+	_appendTo: function() {
+		var element = this.options.appendTo;
+
+		if ( element ) {
+			element = element.jquery || element.nodeType ?
+				$( element ) :
+				this.document.find( element ).eq( 0 );
+		}
+
+		if ( !element || !element[ 0 ] ) {
+			element = this.element.closest( ".ui-front" );
+		}
+
+		if ( !element.length ) {
+			element = this.document[ 0 ].body;
+		}
+
+		return element;
+	},
+
+	_toggleAttr: function() {
+		this.button
+			.toggleClass( "ui-corner-top", this.isOpen )
+			.toggleClass( "ui-corner-all", !this.isOpen )
+			.attr( "aria-expanded", this.isOpen );
+		this.menuWrap.toggleClass( "ui-selectmenu-open", this.isOpen );
+		this.menu.attr( "aria-hidden", !this.isOpen );
+	},
+
+	_resizeButton: function() {
+		var width = this.options.width;
+
+		if ( !width ) {
+			width = this.element.show().outerWidth();
+			this.element.hide();
+		}
+
+		this.button.outerWidth( width );
+	},
+
+	_resizeMenu: function() {
+		this.menu.outerWidth( Math.max(
+			this.button.outerWidth(),
+
+			// support: IE10
+			// IE10 wraps long text (possibly a rounding bug)
+			// so we add 1px to avoid the wrapping
+			this.menu.width( "" ).outerWidth() + 1
+		) );
+	},
+
+	_getCreateOptions: function() {
+		return { disabled: this.element.prop( "disabled" ) };
+	},
+
+	_parseOptions: function( options ) {
+		var data = [];
+		options.each(function( index, item ) {
+			var option = $( item ),
+				optgroup = option.parent( "optgroup" );
+			data.push({
+				element: option,
+				index: index,
+				value: option.val(),
+				label: option.text(),
+				optgroup: optgroup.attr( "label" ) || "",
+				disabled: optgroup.prop( "disabled" ) || option.prop( "disabled" )
+			});
+		});
+		this.items = data;
+	},
+
+	_destroy: function() {
+		this.menuWrap.remove();
+		this.button.remove();
+		this.element.show();
+		this.element.removeUniqueId();
+		this.label.attr( "for", this.ids.element );
+	}
+});
+
+
+/*!
+ * jQuery UI Slider 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/slider/
+ */
+
+
+var slider = $.widget( "ui.slider", $.ui.mouse, {
+	version: "1.11.4",
+	widgetEventPrefix: "slide",
+
+	options: {
+		animate: false,
+		distance: 0,
+		max: 100,
+		min: 0,
+		orientation: "horizontal",
+		range: false,
+		step: 1,
+		value: 0,
+		values: null,
+
+		// callbacks
+		change: null,
+		slide: null,
+		start: null,
+		stop: null
+	},
+
+	// number of pages in a slider
+	// (how many times can you page up/down to go through the whole range)
+	numPages: 5,
+
+	_create: function() {
+		this._keySliding = false;
+		this._mouseSliding = false;
+		this._animateOff = true;
+		this._handleIndex = null;
+		this._detectOrientation();
+		this._mouseInit();
+		this._calculateNewMax();
+
+		this.element
+			.addClass( "ui-slider" +
+				" ui-slider-" + this.orientation +
+				" ui-widget" +
+				" ui-widget-content" +
+				" ui-corner-all");
+
+		this._refresh();
+		this._setOption( "disabled", this.options.disabled );
+
+		this._animateOff = false;
+	},
+
+	_refresh: function() {
+		this._createRange();
+		this._createHandles();
+		this._setupEvents();
+		this._refreshValue();
+	},
+
+	_createHandles: function() {
+		var i, handleCount,
+			options = this.options,
+			existingHandles = this.element.find( ".ui-slider-handle" ).addClass( "ui-state-default ui-corner-all" ),
+			handle = "<span class='ui-slider-handle ui-state-default ui-corner-all' tabindex='0'></span>",
+			handles = [];
+
+		handleCount = ( options.values && options.values.length ) || 1;
+
+		if ( existingHandles.length > handleCount ) {
+			existingHandles.slice( handleCount ).remove();
+			existingHandles = existingHandles.slice( 0, handleCount );
+		}
+
+		for ( i = existingHandles.length; i < handleCount; i++ ) {
+			handles.push( handle );
+		}
+
+		this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
+
+		this.handle = this.handles.eq( 0 );
+
+		this.handles.each(function( i ) {
+			$( this ).data( "ui-slider-handle-index", i );
+		});
+	},
+
+	_createRange: function() {
+		var options = this.options,
+			classes = "";
+
+		if ( options.range ) {
+			if ( options.range === true ) {
+				if ( !options.values ) {
+					options.values = [ this._valueMin(), this._valueMin() ];
+				} else if ( options.values.length && options.values.length !== 2 ) {
+					options.values = [ options.values[0], options.values[0] ];
+				} else if ( $.isArray( options.values ) ) {
+					options.values = options.values.slice(0);
+				}
+			}
+
+			if ( !this.range || !this.range.length ) {
+				this.range = $( "<div></div>" )
+					.appendTo( this.element );
+
+				classes = "ui-slider-range" +
+				// note: this isn't the most fittingly semantic framework class for this element,
+				// but worked best visually with a variety of themes
+				" ui-widget-header ui-corner-all";
+			} else {
+				this.range.removeClass( "ui-slider-range-min ui-slider-range-max" )
+					// Handle range switching from true to min/max
+					.css({
+						"left": "",
+						"bottom": ""
+					});
+			}
+
+			this.range.addClass( classes +
+				( ( options.range === "min" || options.range === "max" ) ? " ui-slider-range-" + options.range : "" ) );
+		} else {
+			if ( this.range ) {
+				this.range.remove();
+			}
+			this.range = null;
+		}
+	},
+
+	_setupEvents: function() {
+		this._off( this.handles );
+		this._on( this.handles, this._handleEvents );
+		this._hoverable( this.handles );
+		this._focusable( this.handles );
+	},
+
+	_destroy: function() {
+		this.handles.remove();
+		if ( this.range ) {
+			this.range.remove();
+		}
+
+		this.element
+			.removeClass( "ui-slider" +
+				" ui-slider-horizontal" +
+				" ui-slider-vertical" +
+				" ui-widget" +
+				" ui-widget-content" +
+				" ui-corner-all" );
+
+		this._mouseDestroy();
+	},
+
+	_mouseCapture: function( event ) {
+		var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
+			that = this,
+			o = this.options;
+
+		if ( o.disabled ) {
+			return false;
+		}
+
+		this.elementSize = {
+			width: this.element.outerWidth(),
+			height: this.element.outerHeight()
+		};
+		this.elementOffset = this.element.offset();
+
+		position = { x: event.pageX, y: event.pageY };
+		normValue = this._normValueFromMouse( position );
+		distance = this._valueMax() - this._valueMin() + 1;
+		this.handles.each(function( i ) {
+			var thisDistance = Math.abs( normValue - that.values(i) );
+			if (( distance > thisDistance ) ||
+				( distance === thisDistance &&
+					(i === that._lastChangedValue || that.values(i) === o.min ))) {
+				distance = thisDistance;
+				closestHandle = $( this );
+				index = i;
+			}
+		});
+
+		allowed = this._start( event, index );
+		if ( allowed === false ) {
+			return false;
+		}
+		this._mouseSliding = true;
+
+		this._handleIndex = index;
+
+		closestHandle
+			.addClass( "ui-state-active" )
+			.focus();
+
+		offset = closestHandle.offset();
+		mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
+		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
+			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
+			top: event.pageY - offset.top -
+				( closestHandle.height() / 2 ) -
+				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 ) -
+				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) || 0) +
+				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
+		};
+
+		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
+			this._slide( event, index, normValue );
+		}
+		this._animateOff = true;
+		return true;
+	},
+
+	_mouseStart: function() {
+		return true;
+	},
+
+	_mouseDrag: function( event ) {
+		var position = { x: event.pageX, y: event.pageY },
+			normValue = this._normValueFromMouse( position );
+
+		this._slide( event, this._handleIndex, normValue );
+
+		return false;
+	},
+
+	_mouseStop: function( event ) {
+		this.handles.removeClass( "ui-state-active" );
+		this._mouseSliding = false;
+
+		this._stop( event, this._handleIndex );
+		this._change( event, this._handleIndex );
+
+		this._handleIndex = null;
+		this._clickOffset = null;
+		this._animateOff = false;
+
+		return false;
+	},
+
+	_detectOrientation: function() {
+		this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
+	},
+
+	_normValueFromMouse: function( position ) {
+		var pixelTotal,
+			pixelMouse,
+			percentMouse,
+			valueTotal,
+			valueMouse;
+
+		if ( this.orientation === "horizontal" ) {
+			pixelTotal = this.elementSize.width;
+			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset ? this._clickOffset.left : 0 );
+		} else {
+			pixelTotal = this.elementSize.height;
+			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ? this._clickOffset.top : 0 );
+		}
+
+		percentMouse = ( pixelMouse / pixelTotal );
+		if ( percentMouse > 1 ) {
+			percentMouse = 1;
+		}
+		if ( percentMouse < 0 ) {
+			percentMouse = 0;
+		}
+		if ( this.orientation === "vertical" ) {
+			percentMouse = 1 - percentMouse;
+		}
+
+		valueTotal = this._valueMax() - this._valueMin();
+		valueMouse = this._valueMin() + percentMouse * valueTotal;
+
+		return this._trimAlignValue( valueMouse );
+	},
+
+	_start: function( event, index ) {
+		var uiHash = {
+			handle: this.handles[ index ],
+			value: this.value()
+		};
+		if ( this.options.values && this.options.values.length ) {
+			uiHash.value = this.values( index );
+			uiHash.values = this.values();
+		}
+		return this._trigger( "start", event, uiHash );
+	},
+
+	_slide: function( event, index, newVal ) {
+		var otherVal,
+			newValues,
+			allowed;
+
+		if ( this.options.values && this.options.values.length ) {
+			otherVal = this.values( index ? 0 : 1 );
+
+			if ( ( this.options.values.length === 2 && this.options.range === true ) &&
+					( ( index === 0 && newVal > otherVal) || ( index === 1 && newVal < otherVal ) )
+				) {
+				newVal = otherVal;
+			}
+
+			if ( newVal !== this.values( index ) ) {
+				newValues = this.values();
+				newValues[ index ] = newVal;
+				// A slide can be canceled by returning false from the slide callback
+				allowed = this._trigger( "slide", event, {
+					handle: this.handles[ index ],
+					value: newVal,
+					values: newValues
+				} );
+				otherVal = this.values( index ? 0 : 1 );
+				if ( allowed !== false ) {
+					this.values( index, newVal );
+				}
+			}
+		} else {
+			if ( newVal !== this.value() ) {
+				// A slide can be canceled by returning false from the slide callback
+				allowed = this._trigger( "slide", event, {
+					handle: this.handles[ index ],
+					value: newVal
+				} );
+				if ( allowed !== false ) {
+					this.value( newVal );
+				}
+			}
+		}
+	},
+
+	_stop: function( event, index ) {
+		var uiHash = {
+			handle: this.handles[ index ],
+			value: this.value()
+		};
+		if ( this.options.values && this.options.values.length ) {
+			uiHash.value = this.values( index );
+			uiHash.values = this.values();
+		}
+
+		this._trigger( "stop", event, uiHash );
+	},
+
+	_change: function( event, index ) {
+		if ( !this._keySliding && !this._mouseSliding ) {
+			var uiHash = {
+				handle: this.handles[ index ],
+				value: this.value()
+			};
+			if ( this.options.values && this.options.values.length ) {
+				uiHash.value = this.values( index );
+				uiHash.values = this.values();
+			}
+
+			//store the last changed value index for reference when handles overlap
+			this._lastChangedValue = index;
+
+			this._trigger( "change", event, uiHash );
+		}
+	},
+
+	value: function( newValue ) {
+		if ( arguments.length ) {
+			this.options.value = this._trimAlignValue( newValue );
+			this._refreshValue();
+			this._change( null, 0 );
+			return;
+		}
+
+		return this._value();
+	},
+
+	values: function( index, newValue ) {
+		var vals,
+			newValues,
+			i;
+
+		if ( arguments.length > 1 ) {
+			this.options.values[ index ] = this._trimAlignValue( newValue );
+			this._refreshValue();
+			this._change( null, index );
+			return;
+		}
+
+		if ( arguments.length ) {
+			if ( $.isArray( arguments[ 0 ] ) ) {
+				vals = this.options.values;
+				newValues = arguments[ 0 ];
+				for ( i = 0; i < vals.length; i += 1 ) {
+					vals[ i ] = this._trimAlignValue( newValues[ i ] );
+					this._change( null, i );
+				}
+				this._refreshValue();
+			} else {
+				if ( this.options.values && this.options.values.length ) {
+					return this._values( index );
+				} else {
+					return this.value();
+				}
+			}
+		} else {
+			return this._values();
+		}
+	},
+
+	_setOption: function( key, value ) {
+		var i,
+			valsLength = 0;
+
+		if ( key === "range" && this.options.range === true ) {
+			if ( value === "min" ) {
+				this.options.value = this._values( 0 );
+				this.options.values = null;
+			} else if ( value === "max" ) {
+				this.options.value = this._values( this.options.values.length - 1 );
+				this.options.values = null;
+			}
+		}
+
+		if ( $.isArray( this.options.values ) ) {
+			valsLength = this.options.values.length;
+		}
+
+		if ( key === "disabled" ) {
+			this.element.toggleClass( "ui-state-disabled", !!value );
+		}
+
+		this._super( key, value );
+
+		switch ( key ) {
+			case "orientation":
+				this._detectOrientation();
+				this.element
+					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
+					.addClass( "ui-slider-" + this.orientation );
+				this._refreshValue();
+
+				// Reset positioning from previous orientation
+				this.handles.css( value === "horizontal" ? "bottom" : "left", "" );
+				break;
+			case "value":
+				this._animateOff = true;
+				this._refreshValue();
+				this._change( null, 0 );
+				this._animateOff = false;
+				break;
+			case "values":
+				this._animateOff = true;
+				this._refreshValue();
+				for ( i = 0; i < valsLength; i += 1 ) {
+					this._change( null, i );
+				}
+				this._animateOff = false;
+				break;
+			case "step":
+			case "min":
+			case "max":
+				this._animateOff = true;
+				this._calculateNewMax();
+				this._refreshValue();
+				this._animateOff = false;
+				break;
+			case "range":
+				this._animateOff = true;
+				this._refresh();
+				this._animateOff = false;
+				break;
+		}
+	},
+
+	//internal value getter
+	// _value() returns value trimmed by min and max, aligned by step
+	_value: function() {
+		var val = this.options.value;
+		val = this._trimAlignValue( val );
+
+		return val;
+	},
+
+	//internal values getter
+	// _values() returns array of values trimmed by min and max, aligned by step
+	// _values( index ) returns single value trimmed by min and max, aligned by step
+	_values: function( index ) {
+		var val,
+			vals,
+			i;
+
+		if ( arguments.length ) {
+			val = this.options.values[ index ];
+			val = this._trimAlignValue( val );
+
+			return val;
+		} else if ( this.options.values && this.options.values.length ) {
+			// .slice() creates a copy of the array
+			// this copy gets trimmed by min and max and then returned
+			vals = this.options.values.slice();
+			for ( i = 0; i < vals.length; i += 1) {
+				vals[ i ] = this._trimAlignValue( vals[ i ] );
+			}
+
+			return vals;
+		} else {
+			return [];
+		}
+	},
+
+	// returns the step-aligned value that val is closest to, between (inclusive) min and max
+	_trimAlignValue: function( val ) {
+		if ( val <= this._valueMin() ) {
+			return this._valueMin();
+		}
+		if ( val >= this._valueMax() ) {
+			return this._valueMax();
+		}
+		var step = ( this.options.step > 0 ) ? this.options.step : 1,
+			valModStep = (val - this._valueMin()) % step,
+			alignValue = val - valModStep;
+
+		if ( Math.abs(valModStep) * 2 >= step ) {
+			alignValue += ( valModStep > 0 ) ? step : ( -step );
+		}
+
+		// Since JavaScript has problems with large floats, round
+		// the final value to 5 digits after the decimal point (see #4124)
+		return parseFloat( alignValue.toFixed(5) );
+	},
+
+	_calculateNewMax: function() {
+		var max = this.options.max,
+			min = this._valueMin(),
+			step = this.options.step,
+			aboveMin = Math.floor( ( +( max - min ).toFixed( this._precision() ) ) / step ) * step;
+		max = aboveMin + min;
+		this.max = parseFloat( max.toFixed( this._precision() ) );
+	},
+
+	_precision: function() {
+		var precision = this._precisionOf( this.options.step );
+		if ( this.options.min !== null ) {
+			precision = Math.max( precision, this._precisionOf( this.options.min ) );
+		}
+		return precision;
+	},
+
+	_precisionOf: function( num ) {
+		var str = num.toString(),
+			decimal = str.indexOf( "." );
+		return decimal === -1 ? 0 : str.length - decimal - 1;
+	},
+
+	_valueMin: function() {
+		return this.options.min;
+	},
+
+	_valueMax: function() {
+		return this.max;
+	},
+
+	_refreshValue: function() {
+		var lastValPercent, valPercent, value, valueMin, valueMax,
+			oRange = this.options.range,
+			o = this.options,
+			that = this,
+			animate = ( !this._animateOff ) ? o.animate : false,
+			_set = {};
+
+		if ( this.options.values && this.options.values.length ) {
+			this.handles.each(function( i ) {
+				valPercent = ( that.values(i) - that._valueMin() ) / ( that._valueMax() - that._valueMin() ) * 100;
+				_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+				$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+				if ( that.options.range === true ) {
+					if ( that.orientation === "horizontal" ) {
+						if ( i === 0 ) {
+							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { left: valPercent + "%" }, o.animate );
+						}
+						if ( i === 1 ) {
+							that.range[ animate ? "animate" : "css" ]( { width: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+						}
+					} else {
+						if ( i === 0 ) {
+							that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
+						}
+						if ( i === 1 ) {
+							that.range[ animate ? "animate" : "css" ]( { height: ( valPercent - lastValPercent ) + "%" }, { queue: false, duration: o.animate } );
+						}
+					}
+				}
+				lastValPercent = valPercent;
+			});
+		} else {
+			value = this.value();
+			valueMin = this._valueMin();
+			valueMax = this._valueMax();
+			valPercent = ( valueMax !== valueMin ) ?
+					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
+					0;
+			_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
+			this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
+
+			if ( oRange === "min" && this.orientation === "horizontal" ) {
+				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { width: valPercent + "%" }, o.animate );
+			}
+			if ( oRange === "max" && this.orientation === "horizontal" ) {
+				this.range[ animate ? "animate" : "css" ]( { width: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+			}
+			if ( oRange === "min" && this.orientation === "vertical" ) {
+				this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( { height: valPercent + "%" }, o.animate );
+			}
+			if ( oRange === "max" && this.orientation === "vertical" ) {
+				this.range[ animate ? "animate" : "css" ]( { height: ( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate } );
+			}
+		}
+	},
+
+	_handleEvents: {
+		keydown: function( event ) {
+			var allowed, curVal, newVal, step,
+				index = $( event.target ).data( "ui-slider-handle-index" );
+
+			switch ( event.keyCode ) {
+				case $.ui.keyCode.HOME:
+				case $.ui.keyCode.END:
+				case $.ui.keyCode.PAGE_UP:
+				case $.ui.keyCode.PAGE_DOWN:
+				case $.ui.keyCode.UP:
+				case $.ui.keyCode.RIGHT:
+				case $.ui.keyCode.DOWN:
+				case $.ui.keyCode.LEFT:
+					event.preventDefault();
+					if ( !this._keySliding ) {
+						this._keySliding = true;
+						$( event.target ).addClass( "ui-state-active" );
+						allowed = this._start( event, index );
+						if ( allowed === false ) {
+							return;
+						}
+					}
+					break;
+			}
+
+			step = this.options.step;
+			if ( this.options.values && this.options.values.length ) {
+				curVal = newVal = this.values( index );
+			} else {
+				curVal = newVal = this.value();
+			}
+
+			switch ( event.keyCode ) {
+				case $.ui.keyCode.HOME:
+					newVal = this._valueMin();
+					break;
+				case $.ui.keyCode.END:
+					newVal = this._valueMax();
+					break;
+				case $.ui.keyCode.PAGE_UP:
+					newVal = this._trimAlignValue(
+						curVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )
+					);
+					break;
+				case $.ui.keyCode.PAGE_DOWN:
+					newVal = this._trimAlignValue(
+						curVal - ( (this._valueMax() - this._valueMin()) / this.numPages ) );
+					break;
+				case $.ui.keyCode.UP:
+				case $.ui.keyCode.RIGHT:
+					if ( curVal === this._valueMax() ) {
+						return;
+					}
+					newVal = this._trimAlignValue( curVal + step );
+					break;
+				case $.ui.keyCode.DOWN:
+				case $.ui.keyCode.LEFT:
+					if ( curVal === this._valueMin() ) {
+						return;
+					}
+					newVal = this._trimAlignValue( curVal - step );
+					break;
+			}
+
+			this._slide( event, index, newVal );
+		},
+		keyup: function( event ) {
+			var index = $( event.target ).data( "ui-slider-handle-index" );
+
+			if ( this._keySliding ) {
+				this._keySliding = false;
+				this._stop( event, index );
+				this._change( event, index );
+				$( event.target ).removeClass( "ui-state-active" );
+			}
+		}
+	}
+});
+
+
+/*!
+ * jQuery UI Sortable 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/sortable/
+ */
+
+
+var sortable = $.widget("ui.sortable", $.ui.mouse, {
+	version: "1.11.4",
+	widgetEventPrefix: "sort",
+	ready: false,
+	options: {
+		appendTo: "parent",
+		axis: false,
+		connectWith: false,
+		containment: false,
+		cursor: "auto",
+		cursorAt: false,
+		dropOnEmpty: true,
+		forcePlaceholderSize: false,
+		forceHelperSize: false,
+		grid: false,
+		handle: false,
+		helper: "original",
+		items: "> *",
+		opacity: false,
+		placeholder: false,
+		revert: false,
+		scroll: true,
+		scrollSensitivity: 20,
+		scrollSpeed: 20,
+		scope: "default",
+		tolerance: "intersect",
+		zIndex: 1000,
+
+		// callbacks
+		activate: null,
+		beforeStop: null,
+		change: null,
+		deactivate: null,
+		out: null,
+		over: null,
+		receive: null,
+		remove: null,
+		sort: null,
+		start: null,
+		stop: null,
+		update: null
+	},
+
+	_isOverAxis: function( x, reference, size ) {
+		return ( x >= reference ) && ( x < ( reference + size ) );
+	},
+
+	_isFloating: function( item ) {
+		return (/left|right/).test(item.css("float")) || (/inline|table-cell/).test(item.css("display"));
+	},
+
+	_create: function() {
+		this.containerCache = {};
+		this.element.addClass("ui-sortable");
+
+		//Get the items
+		this.refresh();
+
+		//Let's determine the parent's offset
+		this.offset = this.element.offset();
+
+		//Initialize mouse events for interaction
+		this._mouseInit();
+
+		this._setHandleClassName();
+
+		//We're ready to go
+		this.ready = true;
+
+	},
+
+	_setOption: function( key, value ) {
+		this._super( key, value );
+
+		if ( key === "handle" ) {
+			this._setHandleClassName();
+		}
+	},
+
+	_setHandleClassName: function() {
+		this.element.find( ".ui-sortable-handle" ).removeClass( "ui-sortable-handle" );
+		$.each( this.items, function() {
+			( this.instance.options.handle ?
+				this.item.find( this.instance.options.handle ) : this.item )
+				.addClass( "ui-sortable-handle" );
+		});
+	},
+
+	_destroy: function() {
+		this.element
+			.removeClass( "ui-sortable ui-sortable-disabled" )
+			.find( ".ui-sortable-handle" )
+				.removeClass( "ui-sortable-handle" );
+		this._mouseDestroy();
+
+		for ( var i = this.items.length - 1; i >= 0; i-- ) {
+			this.items[i].item.removeData(this.widgetName + "-item");
+		}
+
+		return this;
+	},
+
+	_mouseCapture: function(event, overrideHandle) {
+		var currentItem = null,
+			validHandle = false,
+			that = this;
+
+		if (this.reverting) {
+			return false;
+		}
+
+		if(this.options.disabled || this.options.type === "static") {
+			return false;
+		}
+
+		//We have to refresh the items data once first
+		this._refreshItems(event);
+
+		//Find out if the clicked node (or one of its parents) is a actual item in this.items
+		$(event.target).parents().each(function() {
+			if($.data(this, that.widgetName + "-item") === that) {
+				currentItem = $(this);
+				return false;
+			}
+		});
+		if($.data(event.target, that.widgetName + "-item") === that) {
+			currentItem = $(event.target);
+		}
+
+		if(!currentItem) {
+			return false;
+		}
+		if(this.options.handle && !overrideHandle) {
+			$(this.options.handle, currentItem).find("*").addBack().each(function() {
+				if(this === event.target) {
+					validHandle = true;
+				}
+			});
+			if(!validHandle) {
+				return false;
+			}
+		}
+
+		this.currentItem = currentItem;
+		this._removeCurrentsFromItems();
+		return true;
+
+	},
+
+	_mouseStart: function(event, overrideHandle, noActivation) {
+
+		var i, body,
+			o = this.options;
+
+		this.currentContainer = this;
+
+		//We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
+		this.refreshPositions();
+
+		//Create and append the visible helper
+		this.helper = this._createHelper(event);
+
+		//Cache the helper size
+		this._cacheHelperProportions();
+
+		/*
+		 * - Position generation -
+		 * This block generates everything position related - it's the core of draggables.
+		 */
+
+		//Cache the margins of the original element
+		this._cacheMargins();
+
+		//Get the next scrolling parent
+		this.scrollParent = this.helper.scrollParent();
+
+		//The element's absolute position on the page minus margins
+		this.offset = this.currentItem.offset();
+		this.offset = {
+			top: this.offset.top - this.margins.top,
+			left: this.offset.left - this.margins.left
+		};
+
+		$.extend(this.offset, {
+			click: { //Where the click happened, relative to the element
+				left: event.pageX - this.offset.left,
+				top: event.pageY - this.offset.top
+			},
+			parent: this._getParentOffset(),
+			relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
+		});
+
+		// Only after we got the offset, we can change the helper's position to absolute
+		// TODO: Still need to figure out a way to make relative sorting possible
+		this.helper.css("position", "absolute");
+		this.cssPosition = this.helper.css("position");
+
+		//Generate the original position
+		this.originalPosition = this._generatePosition(event);
+		this.originalPageX = event.pageX;
+		this.originalPageY = event.pageY;
+
+		//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
+		(o.cursorAt && this._adjustOffsetFromHelper(o.cursorAt));
+
+		//Cache the former DOM position
+		this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };
+
+		//If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
+		if(this.helper[0] !== this.currentItem[0]) {
+			this.currentItem.hide();
+		}
+
+		//Create the placeholder
+		this._createPlaceholder();
+
+		//Set a containment if given in the options
+		if(o.containment) {
+			this._setContainment();
+		}
+
+		if( o.cursor && o.cursor !== "auto" ) { // cursor option
+			body = this.document.find( "body" );
+
+			// support: IE
+			this.storedCursor = body.css( "cursor" );
+			body.css( "cursor", o.cursor );
+
+			this.storedStylesheet = $( "<style>*{ cursor: "+o.cursor+" !important; }</style>" ).appendTo( body );
+		}
+
+		if(o.opacity) { // opacity option
+			if (this.helper.css("opacity")) {
+				this._storedOpacity = this.helper.css("opacity");
+			}
+			this.helper.css("opacity", o.opacity);
+		}
+
+		if(o.zIndex) { // zIndex option
+			if (this.helper.css("zIndex")) {
+				this._storedZIndex = this.helper.css("zIndex");
+			}
+			this.helper.css("zIndex", o.zIndex);
+		}
+
+		//Prepare scrolling
+		if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
+			this.overflowOffset = this.scrollParent.offset();
+		}
+
+		//Call callbacks
+		this._trigger("start", event, this._uiHash());
+
+		//Recache the helper size
+		if(!this._preserveHelperProportions) {
+			this._cacheHelperProportions();
+		}
+
+
+		//Post "activate" events to possible containers
+		if( !noActivation ) {
+			for ( i = this.containers.length - 1; i >= 0; i-- ) {
+				this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
+			}
+		}
+
+		//Prepare possible droppables
+		if($.ui.ddmanager) {
+			$.ui.ddmanager.current = this;
+		}
+
+		if ($.ui.ddmanager && !o.dropBehaviour) {
+			$.ui.ddmanager.prepareOffsets(this, event);
+		}
+
+		this.dragging = true;
+
+		this.helper.addClass("ui-sortable-helper");
+		this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
+		return true;
+
+	},
+
+	_mouseDrag: function(event) {
+		var i, item, itemElement, intersection,
+			o = this.options,
+			scrolled = false;
+
+		//Compute the helpers position
+		this.position = this._generatePosition(event);
+		this.positionAbs = this._convertPositionTo("absolute");
+
+		if (!this.lastPositionAbs) {
+			this.lastPositionAbs = this.positionAbs;
+		}
+
+		//Do scrolling
+		if(this.options.scroll) {
+			if(this.scrollParent[0] !== this.document[0] && this.scrollParent[0].tagName !== "HTML") {
+
+				if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity) {
+					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
+				} else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity) {
+					this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
+				}
+
+				if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity) {
+					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
+				} else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity) {
+					this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
+				}
+
+			} else {
+
+				if(event.pageY - this.document.scrollTop() < o.scrollSensitivity) {
+					scrolled = this.document.scrollTop(this.document.scrollTop() - o.scrollSpeed);
+				} else if(this.window.height() - (event.pageY - this.document.scrollTop()) < o.scrollSensitivity) {
+					scrolled = this.document.scrollTop(this.document.scrollTop() + o.scrollSpeed);
+				}
+
+				if(event.pageX - this.document.scrollLeft() < o.scrollSensitivity) {
+					scrolled = this.document.scrollLeft(this.document.scrollLeft() - o.scrollSpeed);
+				} else if(this.window.width() - (event.pageX - this.document.scrollLeft()) < o.scrollSensitivity) {
+					scrolled = this.document.scrollLeft(this.document.scrollLeft() + o.scrollSpeed);
+				}
+
+			}
+
+			if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour) {
+				$.ui.ddmanager.prepareOffsets(this, event);
+			}
+		}
+
+		//Regenerate the absolute position used for position checks
+		this.positionAbs = this._convertPositionTo("absolute");
+
+		//Set the helper position
+		if(!this.options.axis || this.options.axis !== "y") {
+			this.helper[0].style.left = this.position.left+"px";
+		}
+		if(!this.options.axis || this.options.axis !== "x") {
+			this.helper[0].style.top = this.position.top+"px";
+		}
+
+		//Rearrange
+		for (i = this.items.length - 1; i >= 0; i--) {
+
+			//Cache variables and intersection, continue if no intersection
+			item = this.items[i];
+			itemElement = item.item[0];
+			intersection = this._intersectsWithPointer(item);
+			if (!intersection) {
+				continue;
+			}
+
+			// Only put the placeholder inside the current Container, skip all
+			// items from other containers. This works because when moving
+			// an item from one container to another the
+			// currentContainer is switched before the placeholder is moved.
+			//
+			// Without this, moving items in "sub-sortables" can cause
+			// the placeholder to jitter between the outer and inner container.
+			if (item.instance !== this.currentContainer) {
+				continue;
+			}
+
+			// cannot intersect with itself
+			// no useless actions that have been done before
+			// no action if the item moved is the parent of the item checked
+			if (itemElement !== this.currentItem[0] &&
+				this.placeholder[intersection === 1 ? "next" : "prev"]()[0] !== itemElement &&
+				!$.contains(this.placeholder[0], itemElement) &&
+				(this.options.type === "semi-dynamic" ? !$.contains(this.element[0], itemElement) : true)
+			) {
+
+				this.direction = intersection === 1 ? "down" : "up";
+
+				if (this.options.tolerance === "pointer" || this._intersectsWithSides(item)) {
+					this._rearrange(event, item);
+				} else {
+					break;
+				}
+
+				this._trigger("change", event, this._uiHash());
+				break;
+			}
+		}
+
+		//Post events to containers
+		this._contactContainers(event);
+
+		//Interconnect with droppables
+		if($.ui.ddmanager) {
+			$.ui.ddmanager.drag(this, event);
+		}
+
+		//Call callbacks
+		this._trigger("sort", event, this._uiHash());
+
+		this.lastPositionAbs = this.positionAbs;
+		return false;
+
+	},
+
+	_mouseStop: function(event, noPropagation) {
+
+		if(!event) {
+			return;
+		}
+
+		//If we are using droppables, inform the manager about the drop
+		if ($.ui.ddmanager && !this.options.dropBehaviour) {
+			$.ui.ddmanager.drop(this, event);
+		}
+
+		if(this.options.revert) {
+			var that = this,
+				cur = this.placeholder.offset(),
+				axis = this.options.axis,
+				animation = {};
+
+			if ( !axis || axis === "x" ) {
+				animation.left = cur.left - this.offset.parent.left - this.margins.left + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollLeft);
+			}
+			if ( !axis || axis === "y" ) {
+				animation.top = cur.top - this.offset.parent.top - this.margins.top + (this.offsetParent[0] === this.document[0].body ? 0 : this.offsetParent[0].scrollTop);
+			}
+			this.reverting = true;
+			$(this.helper).animate( animation, parseInt(this.options.revert, 10) || 500, function() {
+				that._clear(event);
+			});
+		} else {
+			this._clear(event, noPropagation);
+		}
+
+		return false;
+
+	},
+
+	cancel: function() {
+
+		if(this.dragging) {
+
+			this._mouseUp({ target: null });
+
+			if(this.options.helper === "original") {
+				this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+			} else {
+				this.currentItem.show();
+			}
+
+			//Post deactivating events to containers
+			for (var i = this.containers.length - 1; i >= 0; i--){
+				this.containers[i]._trigger("deactivate", null, this._uiHash(this));
+				if(this.containers[i].containerCache.over) {
+					this.containers[i]._trigger("out", null, this._uiHash(this));
+					this.containers[i].containerCache.over = 0;
+				}
+			}
+
+		}
+
+		if (this.placeholder) {
+			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+			if(this.placeholder[0].parentNode) {
+				this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+			}
+			if(this.options.helper !== "original" && this.helper && this.helper[0].parentNode) {
+				this.helper.remove();
+			}
+
+			$.extend(this, {
+				helper: null,
+				dragging: false,
+				reverting: false,
+				_noFinalSort: null
+			});
+
+			if(this.domPosition.prev) {
+				$(this.domPosition.prev).after(this.currentItem);
+			} else {
+				$(this.domPosition.parent).prepend(this.currentItem);
+			}
+		}
+
+		return this;
+
+	},
+
+	serialize: function(o) {
+
+		var items = this._getItemsAsjQuery(o && o.connected),
+			str = [];
+		o = o || {};
+
+		$(items).each(function() {
+			var res = ($(o.item || this).attr(o.attribute || "id") || "").match(o.expression || (/(.+)[\-=_](.+)/));
+			if (res) {
+				str.push((o.key || res[1]+"[]")+"="+(o.key && o.expression ? res[1] : res[2]));
+			}
+		});
+
+		if(!str.length && o.key) {
+			str.push(o.key + "=");
+		}
+
+		return str.join("&");
+
+	},
+
+	toArray: function(o) {
+
+		var items = this._getItemsAsjQuery(o && o.connected),
+			ret = [];
+
+		o = o || {};
+
+		items.each(function() { ret.push($(o.item || this).attr(o.attribute || "id") || ""); });
+		return ret;
+
+	},
+
+	/* Be careful with the following core functions */
+	_intersectsWith: function(item) {
+
+		var x1 = this.positionAbs.left,
+			x2 = x1 + this.helperProportions.width,
+			y1 = this.positionAbs.top,
+			y2 = y1 + this.helperProportions.height,
+			l = item.left,
+			r = l + item.width,
+			t = item.top,
+			b = t + item.height,
+			dyClick = this.offset.click.top,
+			dxClick = this.offset.click.left,
+			isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t && ( y1 + dyClick ) < b ),
+			isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l && ( x1 + dxClick ) < r ),
+			isOverElement = isOverElementHeight && isOverElementWidth;
+
+		if ( this.options.tolerance === "pointer" ||
+			this.options.forcePointerForContainers ||
+			(this.options.tolerance !== "pointer" && this.helperProportions[this.floating ? "width" : "height"] > item[this.floating ? "width" : "height"])
+		) {
+			return isOverElement;
+		} else {
+
+			return (l < x1 + (this.helperProportions.width / 2) && // Right Half
+				x2 - (this.helperProportions.width / 2) < r && // Left Half
+				t < y1 + (this.helperProportions.height / 2) && // Bottom Half
+				y2 - (this.helperProportions.height / 2) < b ); // Top Half
+
+		}
+	},
+
+	_intersectsWithPointer: function(item) {
+
+		var isOverElementHeight = (this.options.axis === "x") || this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
+			isOverElementWidth = (this.options.axis === "y") || this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
+			isOverElement = isOverElementHeight && isOverElementWidth,
+			verticalDirection = this._getDragVerticalDirection(),
+			horizontalDirection = this._getDragHorizontalDirection();
+
+		if (!isOverElement) {
+			return false;
+		}
+
+		return this.floating ?
+			( ((horizontalDirection && horizontalDirection === "right") || verticalDirection === "down") ? 2 : 1 )
+			: ( verticalDirection && (verticalDirection === "down" ? 2 : 1) );
+
+	},
+
+	_intersectsWithSides: function(item) {
+
+		var isOverBottomHalf = this._isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
+			isOverRightHalf = this._isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
+			verticalDirection = this._getDragVerticalDirection(),
+			horizontalDirection = this._getDragHorizontalDirection();
+
+		if (this.floating && horizontalDirection) {
+			return ((horizontalDirection === "right" && isOverRightHalf) || (horizontalDirection === "left" && !isOverRightHalf));
+		} else {
+			return verticalDirection && ((verticalDirection === "down" && isOverBottomHalf) || (verticalDirection === "up" && !isOverBottomHalf));
+		}
+
+	},
+
+	_getDragVerticalDirection: function() {
+		var delta = this.positionAbs.top - this.lastPositionAbs.top;
+		return delta !== 0 && (delta > 0 ? "down" : "up");
+	},
+
+	_getDragHorizontalDirection: function() {
+		var delta = this.positionAbs.left - this.lastPositionAbs.left;
+		return delta !== 0 && (delta > 0 ? "right" : "left");
+	},
+
+	refresh: function(event) {
+		this._refreshItems(event);
+		this._setHandleClassName();
+		this.refreshPositions();
+		return this;
+	},
+
+	_connectWith: function() {
+		var options = this.options;
+		return options.connectWith.constructor === String ? [options.connectWith] : options.connectWith;
+	},
+
+	_getItemsAsjQuery: function(connected) {
+
+		var i, j, cur, inst,
+			items = [],
+			queries = [],
+			connectWith = this._connectWith();
+
+		if(connectWith && connected) {
+			for (i = connectWith.length - 1; i >= 0; i--){
+				cur = $(connectWith[i], this.document[0]);
+				for ( j = cur.length - 1; j >= 0; j--){
+					inst = $.data(cur[j], this.widgetFullName);
+					if(inst && inst !== this && !inst.options.disabled) {
+						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), inst]);
+					}
+				}
+			}
+		}
+
+		queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"), this]);
+
+		function addItems() {
+			items.push( this );
+		}
+		for (i = queries.length - 1; i >= 0; i--){
+			queries[i][0].each( addItems );
+		}
+
+		return $(items);
+
+	},
+
+	_removeCurrentsFromItems: function() {
+
+		var list = this.currentItem.find(":data(" + this.widgetName + "-item)");
+
+		this.items = $.grep(this.items, function (item) {
+			for (var j=0; j < list.length; j++) {
+				if(list[j] === item.item[0]) {
+					return false;
+				}
+			}
+			return true;
+		});
+
+	},
+
+	_refreshItems: function(event) {
+
+		this.items = [];
+		this.containers = [this];
+
+		var i, j, cur, inst, targetData, _queries, item, queriesLength,
+			items = this.items,
+			queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]],
+			connectWith = this._connectWith();
+
+		if(connectWith && this.ready) { //Shouldn't be run the first time through due to massive slow-down
+			for (i = connectWith.length - 1; i >= 0; i--){
+				cur = $(connectWith[i], this.document[0]);
+				for (j = cur.length - 1; j >= 0; j--){
+					inst = $.data(cur[j], this.widgetFullName);
+					if(inst && inst !== this && !inst.options.disabled) {
+						queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
+						this.containers.push(inst);
+					}
+				}
+			}
+		}
+
+		for (i = queries.length - 1; i >= 0; i--) {
+			targetData = queries[i][1];
+			_queries = queries[i][0];
+
+			for (j=0, queriesLength = _queries.length; j < queriesLength; j++) {
+				item = $(_queries[j]);
+
+				item.data(this.widgetName + "-item", targetData); // Data for target checking (mouse manager)
+
+				items.push({
+					item: item,
+					instance: targetData,
+					width: 0, height: 0,
+					left: 0, top: 0
+				});
+			}
+		}
+
+	},
+
+	refreshPositions: function(fast) {
+
+		// Determine whether items are being displayed horizontally
+		this.floating = this.items.length ?
+			this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) :
+			false;
+
+		//This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
+		if(this.offsetParent && this.helper) {
+			this.offset.parent = this._getParentOffset();
+		}
+
+		var i, item, t, p;
+
+		for (i = this.items.length - 1; i >= 0; i--){
+			item = this.items[i];
+
+			//We ignore calculating positions of all connected containers when we're not over them
+			if(item.instance !== this.currentContainer && this.currentContainer && item.item[0] !== this.currentItem[0]) {
+				continue;
+			}
+
+			t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;
+
+			if (!fast) {
+				item.width = t.outerWidth();
+				item.height = t.outerHeight();
+			}
+
+			p = t.offset();
+			item.left = p.left;
+			item.top = p.top;
+		}
+
+		if(this.options.custom && this.options.custom.refreshContainers) {
+			this.options.custom.refreshContainers.call(this);
+		} else {
+			for (i = this.containers.length - 1; i >= 0; i--){
+				p = this.containers[i].element.offset();
+				this.containers[i].containerCache.left = p.left;
+				this.containers[i].containerCache.top = p.top;
+				this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
+				this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
+			}
+		}
+
+		return this;
+	},
+
+	_createPlaceholder: function(that) {
+		that = that || this;
+		var className,
+			o = that.options;
+
+		if(!o.placeholder || o.placeholder.constructor === String) {
+			className = o.placeholder;
+			o.placeholder = {
+				element: function() {
+
+					var nodeName = that.currentItem[0].nodeName.toLowerCase(),
+						element = $( "<" + nodeName + ">", that.document[0] )
+							.addClass(className || that.currentItem[0].className+" ui-sortable-placeholder")
+							.removeClass("ui-sortable-helper");
+
+					if ( nodeName === "tbody" ) {
+						that._createTrPlaceholder(
+							that.currentItem.find( "tr" ).eq( 0 ),
+							$( "<tr>", that.document[ 0 ] ).appendTo( element )
+						);
+					} else if ( nodeName === "tr" ) {
+						that._createTrPlaceholder( that.currentItem, element );
+					} else if ( nodeName === "img" ) {
+						element.attr( "src", that.currentItem.attr( "src" ) );
+					}
+
+					if ( !className ) {
+						element.css( "visibility", "hidden" );
+					}
+
+					return element;
+				},
+				update: function(container, p) {
+
+					// 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
+					// 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
+					if(className && !o.forcePlaceholderSize) {
+						return;
+					}
+
+					//If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
+					if(!p.height()) { p.height(that.currentItem.innerHeight() - parseInt(that.currentItem.css("paddingTop")||0, 10) - parseInt(that.currentItem.css("paddingBottom")||0, 10)); }
+					if(!p.width()) { p.width(that.currentItem.innerWidth() - parseInt(that.currentItem.css("paddingLeft")||0, 10) - parseInt(that.currentItem.css("paddingRight")||0, 10)); }
+				}
+			};
+		}
+
+		//Create the placeholder
+		that.placeholder = $(o.placeholder.element.call(that.element, that.currentItem));
+
+		//Append it after the actual current item
+		that.currentItem.after(that.placeholder);
+
+		//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
+		o.placeholder.update(that, that.placeholder);
+
+	},
+
+	_createTrPlaceholder: function( sourceTr, targetTr ) {
+		var that = this;
+
+		sourceTr.children().each(function() {
+			$( "<td>&#160;</td>", that.document[ 0 ] )
+				.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
+				.appendTo( targetTr );
+		});
+	},
+
+	_contactContainers: function(event) {
+		var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom, floating, axis,
+			innermostContainer = null,
+			innermostIndex = null;
+
+		// get innermost container that intersects with item
+		for (i = this.containers.length - 1; i >= 0; i--) {
+
+			// never consider a container that's located within the item itself
+			if($.contains(this.currentItem[0], this.containers[i].element[0])) {
+				continue;
+			}
+
+			if(this._intersectsWith(this.containers[i].containerCache)) {
+
+				// if we've already found a container and it's more "inner" than this, then continue
+				if(innermostContainer && $.contains(this.containers[i].element[0], innermostContainer.element[0])) {
+					continue;
+				}
+
+				innermostContainer = this.containers[i];
+				innermostIndex = i;
+
+			} else {
+				// container doesn't intersect. trigger "out" event if necessary
+				if(this.containers[i].containerCache.over) {
+					this.containers[i]._trigger("out", event, this._uiHash(this));
+					this.containers[i].containerCache.over = 0;
+				}
+			}
+
+		}
+
+		// if no intersecting containers found, return
+		if(!innermostContainer) {
+			return;
+		}
+
+		// move the item into the container if it's not there already
+		if(this.containers.length === 1) {
+			if (!this.containers[innermostIndex].containerCache.over) {
+				this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+				this.containers[innermostIndex].containerCache.over = 1;
+			}
+		} else {
+
+			//When entering a new container, we will find the item with the least distance and append our item near it
+			dist = 10000;
+			itemWithLeastDistance = null;
+			floating = innermostContainer.floating || this._isFloating(this.currentItem);
+			posProperty = floating ? "left" : "top";
+			sizeProperty = floating ? "width" : "height";
+			axis = floating ? "clientX" : "clientY";
+
+			for (j = this.items.length - 1; j >= 0; j--) {
+				if(!$.contains(this.containers[innermostIndex].element[0], this.items[j].item[0])) {
+					continue;
+				}
+				if(this.items[j].item[0] === this.currentItem[0]) {
+					continue;
+				}
+
+				cur = this.items[j].item.offset()[posProperty];
+				nearBottom = false;
+				if ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {
+					nearBottom = true;
+				}
+
+				if ( Math.abs( event[ axis ] - cur ) < dist ) {
+					dist = Math.abs( event[ axis ] - cur );
+					itemWithLeastDistance = this.items[ j ];
+					this.direction = nearBottom ? "up": "down";
+				}
+			}
+
+			//Check if dropOnEmpty is enabled
+			if(!itemWithLeastDistance && !this.options.dropOnEmpty) {
+				return;
+			}
+
+			if(this.currentContainer === this.containers[innermostIndex]) {
+				if ( !this.currentContainer.containerCache.over ) {
+					this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() );
+					this.currentContainer.containerCache.over = 1;
+				}
+				return;
+			}
+
+			itemWithLeastDistance ? this._rearrange(event, itemWithLeastDistance, null, true) : this._rearrange(event, null, this.containers[innermostIndex].element, true);
+			this._trigger("change", event, this._uiHash());
+			this.containers[innermostIndex]._trigger("change", event, this._uiHash(this));
+			this.currentContainer = this.containers[innermostIndex];
+
+			//Update the placeholder
+			this.options.placeholder.update(this.currentContainer, this.placeholder);
+
+			this.containers[innermostIndex]._trigger("over", event, this._uiHash(this));
+			this.containers[innermostIndex].containerCache.over = 1;
+		}
+
+
+	},
+
+	_createHelper: function(event) {
+
+		var o = this.options,
+			helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper === "clone" ? this.currentItem.clone() : this.currentItem);
+
+		//Add the helper to the DOM if that didn't happen already
+		if(!helper.parents("body").length) {
+			$(o.appendTo !== "parent" ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);
+		}
+
+		if(helper[0] === this.currentItem[0]) {
+			this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };
+		}
+
+		if(!helper[0].style.width || o.forceHelperSize) {
+			helper.width(this.currentItem.width());
+		}
+		if(!helper[0].style.height || o.forceHelperSize) {
+			helper.height(this.currentItem.height());
+		}
+
+		return helper;
+
+	},
+
+	_adjustOffsetFromHelper: function(obj) {
+		if (typeof obj === "string") {
+			obj = obj.split(" ");
+		}
+		if ($.isArray(obj)) {
+			obj = {left: +obj[0], top: +obj[1] || 0};
+		}
+		if ("left" in obj) {
+			this.offset.click.left = obj.left + this.margins.left;
+		}
+		if ("right" in obj) {
+			this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
+		}
+		if ("top" in obj) {
+			this.offset.click.top = obj.top + this.margins.top;
+		}
+		if ("bottom" in obj) {
+			this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
+		}
+	},
+
+	_getParentOffset: function() {
+
+
+		//Get the offsetParent and cache its position
+		this.offsetParent = this.helper.offsetParent();
+		var po = this.offsetParent.offset();
+
+		// This is a special case where we need to modify a offset calculated on start, since the following happened:
+		// 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
+		// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
+		//    the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
+		if(this.cssPosition === "absolute" && this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) {
+			po.left += this.scrollParent.scrollLeft();
+			po.top += this.scrollParent.scrollTop();
+		}
+
+		// This needs to be actually done for all browsers, since pageX/pageY includes this information
+		// with an ugly IE fix
+		if( this.offsetParent[0] === this.document[0].body || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() === "html" && $.ui.ie)) {
+			po = { top: 0, left: 0 };
+		}
+
+		return {
+			top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
+			left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
+		};
+
+	},
+
+	_getRelativeOffset: function() {
+
+		if(this.cssPosition === "relative") {
+			var p = this.currentItem.position();
+			return {
+				top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
+				left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
+			};
+		} else {
+			return { top: 0, left: 0 };
+		}
+
+	},
+
+	_cacheMargins: function() {
+		this.margins = {
+			left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
+			top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
+		};
+	},
+
+	_cacheHelperProportions: function() {
+		this.helperProportions = {
+			width: this.helper.outerWidth(),
+			height: this.helper.outerHeight()
+		};
+	},
+
+	_setContainment: function() {
+
+		var ce, co, over,
+			o = this.options;
+		if(o.containment === "parent") {
+			o.containment = this.helper[0].parentNode;
+		}
+		if(o.containment === "document" || o.containment === "window") {
+			this.containment = [
+				0 - this.offset.relative.left - this.offset.parent.left,
+				0 - this.offset.relative.top - this.offset.parent.top,
+				o.containment === "document" ? this.document.width() : this.window.width() - this.helperProportions.width - this.margins.left,
+				(o.containment === "document" ? this.document.width() : this.window.height() || this.document[0].body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
+			];
+		}
+
+		if(!(/^(document|window|parent)$/).test(o.containment)) {
+			ce = $(o.containment)[0];
+			co = $(o.containment).offset();
+			over = ($(ce).css("overflow") !== "hidden");
+
+			this.containment = [
+				co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) + (parseInt($(ce).css("paddingLeft"),10) || 0) - this.margins.left,
+				co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) + (parseInt($(ce).css("paddingTop"),10) || 0) - this.margins.top,
+				co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - (parseInt($(ce).css("paddingRight"),10) || 0) - this.helperProportions.width - this.margins.left,
+				co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - (parseInt($(ce).css("paddingBottom"),10) || 0) - this.helperProportions.height - this.margins.top
+			];
+		}
+
+	},
+
+	_convertPositionTo: function(d, pos) {
+
+		if(!pos) {
+			pos = this.position;
+		}
+		var mod = d === "absolute" ? 1 : -1,
+			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent,
+			scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+		return {
+			top: (
+				pos.top	+																// The absolute mouse position
+				this.offset.relative.top * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.top * mod -											// The offsetParent's offset without borders (offset + border)
+				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod)
+			),
+			left: (
+				pos.left +																// The absolute mouse position
+				this.offset.relative.left * mod +										// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.left * mod	-										// The offsetParent's offset without borders (offset + border)
+				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod)
+			)
+		};
+
+	},
+
+	_generatePosition: function(event) {
+
+		var top, left,
+			o = this.options,
+			pageX = event.pageX,
+			pageY = event.pageY,
+			scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== this.document[0] && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);
+
+		// This is another very weird special case that only happens for relative elements:
+		// 1. If the css position is relative
+		// 2. and the scroll parent is the document or similar to the offset parent
+		// we have to refresh the relative offset during the scroll so there are no jumps
+		if(this.cssPosition === "relative" && !(this.scrollParent[0] !== this.document[0] && this.scrollParent[0] !== this.offsetParent[0])) {
+			this.offset.relative = this._getRelativeOffset();
+		}
+
+		/*
+		 * - Position constraining -
+		 * Constrain the position to a mix of grid, containment.
+		 */
+
+		if(this.originalPosition) { //If we are not dragging yet, we won't check for options
+
+			if(this.containment) {
+				if(event.pageX - this.offset.click.left < this.containment[0]) {
+					pageX = this.containment[0] + this.offset.click.left;
+				}
+				if(event.pageY - this.offset.click.top < this.containment[1]) {
+					pageY = this.containment[1] + this.offset.click.top;
+				}
+				if(event.pageX - this.offset.click.left > this.containment[2]) {
+					pageX = this.containment[2] + this.offset.click.left;
+				}
+				if(event.pageY - this.offset.click.top > this.containment[3]) {
+					pageY = this.containment[3] + this.offset.click.top;
+				}
+			}
+
+			if(o.grid) {
+				top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
+				pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;
+
+				left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
+				pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
+			}
+
+		}
+
+		return {
+			top: (
+				pageY -																// The absolute mouse position
+				this.offset.click.top -													// Click offset (relative to the element)
+				this.offset.relative.top	-											// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.top +												// The offsetParent's offset without borders (offset + border)
+				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ))
+			),
+			left: (
+				pageX -																// The absolute mouse position
+				this.offset.click.left -												// Click offset (relative to the element)
+				this.offset.relative.left	-											// Only for relative positioned nodes: Relative offset from element to offset parent
+				this.offset.parent.left +												// The offsetParent's offset without borders (offset + border)
+				( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ))
+			)
+		};
+
+	},
+
+	_rearrange: function(event, i, a, hardRefresh) {
+
+		a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction === "down" ? i.item[0] : i.item[0].nextSibling));
+
+		//Various things done here to improve the performance:
+		// 1. we create a setTimeout, that calls refreshPositions
+		// 2. on the instance, we have a counter variable, that get's higher after every append
+		// 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
+		// 4. this lets only the last addition to the timeout stack through
+		this.counter = this.counter ? ++this.counter : 1;
+		var counter = this.counter;
+
+		this._delay(function() {
+			if(counter === this.counter) {
+				this.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
+			}
+		});
+
+	},
+
+	_clear: function(event, noPropagation) {
+
+		this.reverting = false;
+		// We delay all events that have to be triggered to after the point where the placeholder has been removed and
+		// everything else normalized again
+		var i,
+			delayedTriggers = [];
+
+		// We first have to update the dom position of the actual currentItem
+		// Note: don't do it if the current item is already removed (by a user), or it gets reappended (see #4088)
+		if(!this._noFinalSort && this.currentItem.parent().length) {
+			this.placeholder.before(this.currentItem);
+		}
+		this._noFinalSort = null;
+
+		if(this.helper[0] === this.currentItem[0]) {
+			for(i in this._storedCSS) {
+				if(this._storedCSS[i] === "auto" || this._storedCSS[i] === "static") {
+					this._storedCSS[i] = "";
+				}
+			}
+			this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper");
+		} else {
+			this.currentItem.show();
+		}
+
+		if(this.fromOutside && !noPropagation) {
+			delayedTriggers.push(function(event) { this._trigger("receive", event, this._uiHash(this.fromOutside)); });
+		}
+		if((this.fromOutside || this.domPosition.prev !== this.currentItem.prev().not(".ui-sortable-helper")[0] || this.domPosition.parent !== this.currentItem.parent()[0]) && !noPropagation) {
+			delayedTriggers.push(function(event) { this._trigger("update", event, this._uiHash()); }); //Trigger update callback if the DOM position has changed
+		}
+
+		// Check if the items Container has Changed and trigger appropriate
+		// events.
+		if (this !== this.currentContainer) {
+			if(!noPropagation) {
+				delayedTriggers.push(function(event) { this._trigger("remove", event, this._uiHash()); });
+				delayedTriggers.push((function(c) { return function(event) { c._trigger("receive", event, this._uiHash(this)); };  }).call(this, this.currentContainer));
+				delayedTriggers.push((function(c) { return function(event) { c._trigger("update", event, this._uiHash(this));  }; }).call(this, this.currentContainer));
+			}
+		}
+
+
+		//Post events to containers
+		function delayEvent( type, instance, container ) {
+			return function( event ) {
+				container._trigger( type, event, instance._uiHash( instance ) );
+			};
+		}
+		for (i = this.containers.length - 1; i >= 0; i--){
+			if (!noPropagation) {
+				delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) );
+			}
+			if(this.containers[i].containerCache.over) {
+				delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) );
+				this.containers[i].containerCache.over = 0;
+			}
+		}
+
+		//Do what was originally in plugins
+		if ( this.storedCursor ) {
+			this.document.find( "body" ).css( "cursor", this.storedCursor );
+			this.storedStylesheet.remove();
+		}
+		if(this._storedOpacity) {
+			this.helper.css("opacity", this._storedOpacity);
+		}
+		if(this._storedZIndex) {
+			this.helper.css("zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex);
+		}
+
+		this.dragging = false;
+
+		if(!noPropagation) {
+			this._trigger("beforeStop", event, this._uiHash());
+		}
+
+		//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
+		this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
+
+		if ( !this.cancelHelperRemoval ) {
+			if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
+				this.helper.remove();
+			}
+			this.helper = null;
+		}
+
+		if(!noPropagation) {
+			for (i=0; i < delayedTriggers.length; i++) {
+				delayedTriggers[i].call(this, event);
+			} //Trigger all delayed events
+			this._trigger("stop", event, this._uiHash());
+		}
+
+		this.fromOutside = false;
+		return !this.cancelHelperRemoval;
+
+	},
+
+	_trigger: function() {
+		if ($.Widget.prototype._trigger.apply(this, arguments) === false) {
+			this.cancel();
+		}
+	},
+
+	_uiHash: function(_inst) {
+		var inst = _inst || this;
+		return {
+			helper: inst.helper,
+			placeholder: inst.placeholder || $([]),
+			position: inst.position,
+			originalPosition: inst.originalPosition,
+			offset: inst.positionAbs,
+			item: inst.currentItem,
+			sender: _inst ? _inst.element : null
+		};
+	}
+
+});
+
+
+/*!
+ * jQuery UI Spinner 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/spinner/
+ */
+
+
+function spinner_modifier( fn ) {
+	return function() {
+		var previous = this.element.val();
+		fn.apply( this, arguments );
+		this._refresh();
+		if ( previous !== this.element.val() ) {
+			this._trigger( "change" );
+		}
+	};
+}
+
+var spinner = $.widget( "ui.spinner", {
+	version: "1.11.4",
+	defaultElement: "<input>",
+	widgetEventPrefix: "spin",
+	options: {
+		culture: null,
+		icons: {
+			down: "ui-icon-triangle-1-s",
+			up: "ui-icon-triangle-1-n"
+		},
+		incremental: true,
+		max: null,
+		min: null,
+		numberFormat: null,
+		page: 10,
+		step: 1,
+
+		change: null,
+		spin: null,
+		start: null,
+		stop: null
+	},
+
+	_create: function() {
+		// handle string values that need to be parsed
+		this._setOption( "max", this.options.max );
+		this._setOption( "min", this.options.min );
+		this._setOption( "step", this.options.step );
+
+		// Only format if there is a value, prevents the field from being marked
+		// as invalid in Firefox, see #9573.
+		if ( this.value() !== "" ) {
+			// Format the value, but don't constrain.
+			this._value( this.element.val(), true );
+		}
+
+		this._draw();
+		this._on( this._events );
+		this._refresh();
+
+		// turning off autocomplete prevents the browser from remembering the
+		// value when navigating through history, so we re-enable autocomplete
+		// if the page is unloaded before the widget is destroyed. #7790
+		this._on( this.window, {
+			beforeunload: function() {
+				this.element.removeAttr( "autocomplete" );
+			}
+		});
+	},
+
+	_getCreateOptions: function() {
+		var options = {},
+			element = this.element;
+
+		$.each( [ "min", "max", "step" ], function( i, option ) {
+			var value = element.attr( option );
+			if ( value !== undefined && value.length ) {
+				options[ option ] = value;
+			}
+		});
+
+		return options;
+	},
+
+	_events: {
+		keydown: function( event ) {
+			if ( this._start( event ) && this._keydown( event ) ) {
+				event.preventDefault();
+			}
+		},
+		keyup: "_stop",
+		focus: function() {
+			this.previous = this.element.val();
+		},
+		blur: function( event ) {
+			if ( this.cancelBlur ) {
+				delete this.cancelBlur;
+				return;
+			}
+
+			this._stop();
+			this._refresh();
+			if ( this.previous !== this.element.val() ) {
+				this._trigger( "change", event );
+			}
+		},
+		mousewheel: function( event, delta ) {
+			if ( !delta ) {
+				return;
+			}
+			if ( !this.spinning && !this._start( event ) ) {
+				return false;
+			}
+
+			this._spin( (delta > 0 ? 1 : -1) * this.options.step, event );
+			clearTimeout( this.mousewheelTimer );
+			this.mousewheelTimer = this._delay(function() {
+				if ( this.spinning ) {
+					this._stop( event );
+				}
+			}, 100 );
+			event.preventDefault();
+		},
+		"mousedown .ui-spinner-button": function( event ) {
+			var previous;
+
+			// We never want the buttons to have focus; whenever the user is
+			// interacting with the spinner, the focus should be on the input.
+			// If the input is focused then this.previous is properly set from
+			// when the input first received focus. If the input is not focused
+			// then we need to set this.previous based on the value before spinning.
+			previous = this.element[0] === this.document[0].activeElement ?
+				this.previous : this.element.val();
+			function checkFocus() {
+				var isActive = this.element[0] === this.document[0].activeElement;
+				if ( !isActive ) {
+					this.element.focus();
+					this.previous = previous;
+					// support: IE
+					// IE sets focus asynchronously, so we need to check if focus
+					// moved off of the input because the user clicked on the button.
+					this._delay(function() {
+						this.previous = previous;
+					});
+				}
+			}
+
+			// ensure focus is on (or stays on) the text field
+			event.preventDefault();
+			checkFocus.call( this );
+
+			// support: IE
+			// IE doesn't prevent moving focus even with event.preventDefault()
+			// so we set a flag to know when we should ignore the blur event
+			// and check (again) if focus moved off of the input.
+			this.cancelBlur = true;
+			this._delay(function() {
+				delete this.cancelBlur;
+				checkFocus.call( this );
+			});
+
+			if ( this._start( event ) === false ) {
+				return;
+			}
+
+			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+		},
+		"mouseup .ui-spinner-button": "_stop",
+		"mouseenter .ui-spinner-button": function( event ) {
+			// button will add ui-state-active if mouse was down while mouseleave and kept down
+			if ( !$( event.currentTarget ).hasClass( "ui-state-active" ) ) {
+				return;
+			}
+
+			if ( this._start( event ) === false ) {
+				return false;
+			}
+			this._repeat( null, $( event.currentTarget ).hasClass( "ui-spinner-up" ) ? 1 : -1, event );
+		},
+		// TODO: do we really want to consider this a stop?
+		// shouldn't we just stop the repeater and wait until mouseup before
+		// we trigger the stop event?
+		"mouseleave .ui-spinner-button": "_stop"
+	},
+
+	_draw: function() {
+		var uiSpinner = this.uiSpinner = this.element
+			.addClass( "ui-spinner-input" )
+			.attr( "autocomplete", "off" )
+			.wrap( this._uiSpinnerHtml() )
+			.parent()
+				// add buttons
+				.append( this._buttonHtml() );
+
+		this.element.attr( "role", "spinbutton" );
+
+		// button bindings
+		this.buttons = uiSpinner.find( ".ui-spinner-button" )
+			.attr( "tabIndex", -1 )
+			.button()
+			.removeClass( "ui-corner-all" );
+
+		// IE 6 doesn't understand height: 50% for the buttons
+		// unless the wrapper has an explicit height
+		if ( this.buttons.height() > Math.ceil( uiSpinner.height() * 0.5 ) &&
+				uiSpinner.height() > 0 ) {
+			uiSpinner.height( uiSpinner.height() );
+		}
+
+		// disable spinner if element was already disabled
+		if ( this.options.disabled ) {
+			this.disable();
+		}
+	},
+
+	_keydown: function( event ) {
+		var options = this.options,
+			keyCode = $.ui.keyCode;
+
+		switch ( event.keyCode ) {
+		case keyCode.UP:
+			this._repeat( null, 1, event );
+			return true;
+		case keyCode.DOWN:
+			this._repeat( null, -1, event );
+			return true;
+		case keyCode.PAGE_UP:
+			this._repeat( null, options.page, event );
+			return true;
+		case keyCode.PAGE_DOWN:
+			this._repeat( null, -options.page, event );
+			return true;
+		}
+
+		return false;
+	},
+
+	_uiSpinnerHtml: function() {
+		return "<span class='ui-spinner ui-widget ui-widget-content ui-corner-all'></span>";
+	},
+
+	_buttonHtml: function() {
+		return "" +
+			"<a class='ui-spinner-button ui-spinner-up ui-corner-tr'>" +
+				"<span class='ui-icon " + this.options.icons.up + "'>&#9650;</span>" +
+			"</a>" +
+			"<a class='ui-spinner-button ui-spinner-down ui-corner-br'>" +
+				"<span class='ui-icon " + this.options.icons.down + "'>&#9660;</span>" +
+			"</a>";
+	},
+
+	_start: function( event ) {
+		if ( !this.spinning && this._trigger( "start", event ) === false ) {
+			return false;
+		}
+
+		if ( !this.counter ) {
+			this.counter = 1;
+		}
+		this.spinning = true;
+		return true;
+	},
+
+	_repeat: function( i, steps, event ) {
+		i = i || 500;
+
+		clearTimeout( this.timer );
+		this.timer = this._delay(function() {
+			this._repeat( 40, steps, event );
+		}, i );
+
+		this._spin( steps * this.options.step, event );
+	},
+
+	_spin: function( step, event ) {
+		var value = this.value() || 0;
+
+		if ( !this.counter ) {
+			this.counter = 1;
+		}
+
+		value = this._adjustValue( value + step * this._increment( this.counter ) );
+
+		if ( !this.spinning || this._trigger( "spin", event, { value: value } ) !== false) {
+			this._value( value );
+			this.counter++;
+		}
+	},
+
+	_increment: function( i ) {
+		var incremental = this.options.incremental;
+
+		if ( incremental ) {
+			return $.isFunction( incremental ) ?
+				incremental( i ) :
+				Math.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );
+		}
+
+		return 1;
+	},
+
+	_precision: function() {
+		var precision = this._precisionOf( this.options.step );
+		if ( this.options.min !== null ) {
+			precision = Math.max( precision, this._precisionOf( this.options.min ) );
+		}
+		return precision;
+	},
+
+	_precisionOf: function( num ) {
+		var str = num.toString(),
+			decimal = str.indexOf( "." );
+		return decimal === -1 ? 0 : str.length - decimal - 1;
+	},
+
+	_adjustValue: function( value ) {
+		var base, aboveMin,
+			options = this.options;
+
+		// make sure we're at a valid step
+		// - find out where we are relative to the base (min or 0)
+		base = options.min !== null ? options.min : 0;
+		aboveMin = value - base;
+		// - round to the nearest step
+		aboveMin = Math.round(aboveMin / options.step) * options.step;
+		// - rounding is based on 0, so adjust back to our base
+		value = base + aboveMin;
+
+		// fix precision from bad JS floating point math
+		value = parseFloat( value.toFixed( this._precision() ) );
+
+		// clamp the value
+		if ( options.max !== null && value > options.max) {
+			return options.max;
+		}
+		if ( options.min !== null && value < options.min ) {
+			return options.min;
+		}
+
+		return value;
+	},
+
+	_stop: function( event ) {
+		if ( !this.spinning ) {
+			return;
+		}
+
+		clearTimeout( this.timer );
+		clearTimeout( this.mousewheelTimer );
+		this.counter = 0;
+		this.spinning = false;
+		this._trigger( "stop", event );
+	},
+
+	_setOption: function( key, value ) {
+		if ( key === "culture" || key === "numberFormat" ) {
+			var prevValue = this._parse( this.element.val() );
+			this.options[ key ] = value;
+			this.element.val( this._format( prevValue ) );
+			return;
+		}
+
+		if ( key === "max" || key === "min" || key === "step" ) {
+			if ( typeof value === "string" ) {
+				value = this._parse( value );
+			}
+		}
+		if ( key === "icons" ) {
+			this.buttons.first().find( ".ui-icon" )
+				.removeClass( this.options.icons.up )
+				.addClass( value.up );
+			this.buttons.last().find( ".ui-icon" )
+				.removeClass( this.options.icons.down )
+				.addClass( value.down );
+		}
+
+		this._super( key, value );
+
+		if ( key === "disabled" ) {
+			this.widget().toggleClass( "ui-state-disabled", !!value );
+			this.element.prop( "disabled", !!value );
+			this.buttons.button( value ? "disable" : "enable" );
+		}
+	},
+
+	_setOptions: spinner_modifier(function( options ) {
+		this._super( options );
+	}),
+
+	_parse: function( val ) {
+		if ( typeof val === "string" && val !== "" ) {
+			val = window.Globalize && this.options.numberFormat ?
+				Globalize.parseFloat( val, 10, this.options.culture ) : +val;
+		}
+		return val === "" || isNaN( val ) ? null : val;
+	},
+
+	_format: function( value ) {
+		if ( value === "" ) {
+			return "";
+		}
+		return window.Globalize && this.options.numberFormat ?
+			Globalize.format( value, this.options.numberFormat, this.options.culture ) :
+			value;
+	},
+
+	_refresh: function() {
+		this.element.attr({
+			"aria-valuemin": this.options.min,
+			"aria-valuemax": this.options.max,
+			// TODO: what should we do with values that can't be parsed?
+			"aria-valuenow": this._parse( this.element.val() )
+		});
+	},
+
+	isValid: function() {
+		var value = this.value();
+
+		// null is invalid
+		if ( value === null ) {
+			return false;
+		}
+
+		// if value gets adjusted, it's invalid
+		return value === this._adjustValue( value );
+	},
+
+	// update the value without triggering change
+	_value: function( value, allowAny ) {
+		var parsed;
+		if ( value !== "" ) {
+			parsed = this._parse( value );
+			if ( parsed !== null ) {
+				if ( !allowAny ) {
+					parsed = this._adjustValue( parsed );
+				}
+				value = this._format( parsed );
+			}
+		}
+		this.element.val( value );
+		this._refresh();
+	},
+
+	_destroy: function() {
+		this.element
+			.removeClass( "ui-spinner-input" )
+			.prop( "disabled", false )
+			.removeAttr( "autocomplete" )
+			.removeAttr( "role" )
+			.removeAttr( "aria-valuemin" )
+			.removeAttr( "aria-valuemax" )
+			.removeAttr( "aria-valuenow" );
+		this.uiSpinner.replaceWith( this.element );
+	},
+
+	stepUp: spinner_modifier(function( steps ) {
+		this._stepUp( steps );
+	}),
+	_stepUp: function( steps ) {
+		if ( this._start() ) {
+			this._spin( (steps || 1) * this.options.step );
+			this._stop();
+		}
+	},
+
+	stepDown: spinner_modifier(function( steps ) {
+		this._stepDown( steps );
+	}),
+	_stepDown: function( steps ) {
+		if ( this._start() ) {
+			this._spin( (steps || 1) * -this.options.step );
+			this._stop();
+		}
+	},
+
+	pageUp: spinner_modifier(function( pages ) {
+		this._stepUp( (pages || 1) * this.options.page );
+	}),
+
+	pageDown: spinner_modifier(function( pages ) {
+		this._stepDown( (pages || 1) * this.options.page );
+	}),
+
+	value: function( newVal ) {
+		if ( !arguments.length ) {
+			return this._parse( this.element.val() );
+		}
+		spinner_modifier( this._value ).call( this, newVal );
+	},
+
+	widget: function() {
+		return this.uiSpinner;
+	}
+});
+
+
+/*!
+ * jQuery UI Tabs 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/tabs/
+ */
+
+
+var tabs = $.widget( "ui.tabs", {
+	version: "1.11.4",
+	delay: 300,
+	options: {
+		active: null,
+		collapsible: false,
+		event: "click",
+		heightStyle: "content",
+		hide: null,
+		show: null,
+
+		// callbacks
+		activate: null,
+		beforeActivate: null,
+		beforeLoad: null,
+		load: null
+	},
+
+	_isLocal: (function() {
+		var rhash = /#.*$/;
+
+		return function( anchor ) {
+			var anchorUrl, locationUrl;
+
+			// support: IE7
+			// IE7 doesn't normalize the href property when set via script (#9317)
+			anchor = anchor.cloneNode( false );
+
+			anchorUrl = anchor.href.replace( rhash, "" );
+			locationUrl = location.href.replace( rhash, "" );
+
+			// decoding may throw an error if the URL isn't UTF-8 (#9518)
+			try {
+				anchorUrl = decodeURIComponent( anchorUrl );
+			} catch ( error ) {}
+			try {
+				locationUrl = decodeURIComponent( locationUrl );
+			} catch ( error ) {}
+
+			return anchor.hash.length > 1 && anchorUrl === locationUrl;
+		};
+	})(),
+
+	_create: function() {
+		var that = this,
+			options = this.options;
+
+		this.running = false;
+
+		this.element
+			.addClass( "ui-tabs ui-widget ui-widget-content ui-corner-all" )
+			.toggleClass( "ui-tabs-collapsible", options.collapsible );
+
+		this._processTabs();
+		options.active = this._initialActive();
+
+		// Take disabling tabs via class attribute from HTML
+		// into account and update option properly.
+		if ( $.isArray( options.disabled ) ) {
+			options.disabled = $.unique( options.disabled.concat(
+				$.map( this.tabs.filter( ".ui-state-disabled" ), function( li ) {
+					return that.tabs.index( li );
+				})
+			) ).sort();
+		}
+
+		// check for length avoids error when initializing empty list
+		if ( this.options.active !== false && this.anchors.length ) {
+			this.active = this._findActive( options.active );
+		} else {
+			this.active = $();
+		}
+
+		this._refresh();
+
+		if ( this.active.length ) {
+			this.load( options.active );
+		}
+	},
+
+	_initialActive: function() {
+		var active = this.options.active,
+			collapsible = this.options.collapsible,
+			locationHash = location.hash.substring( 1 );
+
+		if ( active === null ) {
+			// check the fragment identifier in the URL
+			if ( locationHash ) {
+				this.tabs.each(function( i, tab ) {
+					if ( $( tab ).attr( "aria-controls" ) === locationHash ) {
+						active = i;
+						return false;
+					}
+				});
+			}
+
+			// check for a tab marked active via a class
+			if ( active === null ) {
+				active = this.tabs.index( this.tabs.filter( ".ui-tabs-active" ) );
+			}
+
+			// no active tab, set to false
+			if ( active === null || active === -1 ) {
+				active = this.tabs.length ? 0 : false;
+			}
+		}
+
+		// handle numbers: negative, out of range
+		if ( active !== false ) {
+			active = this.tabs.index( this.tabs.eq( active ) );
+			if ( active === -1 ) {
+				active = collapsible ? false : 0;
+			}
+		}
+
+		// don't allow collapsible: false and active: false
+		if ( !collapsible && active === false && this.anchors.length ) {
+			active = 0;
+		}
+
+		return active;
+	},
+
+	_getCreateEventData: function() {
+		return {
+			tab: this.active,
+			panel: !this.active.length ? $() : this._getPanelForTab( this.active )
+		};
+	},
+
+	_tabKeydown: function( event ) {
+		var focusedTab = $( this.document[0].activeElement ).closest( "li" ),
+			selectedIndex = this.tabs.index( focusedTab ),
+			goingForward = true;
+
+		if ( this._handlePageNav( event ) ) {
+			return;
+		}
+
+		switch ( event.keyCode ) {
+			case $.ui.keyCode.RIGHT:
+			case $.ui.keyCode.DOWN:
+				selectedIndex++;
+				break;
+			case $.ui.keyCode.UP:
+			case $.ui.keyCode.LEFT:
+				goingForward = false;
+				selectedIndex--;
+				break;
+			case $.ui.keyCode.END:
+				selectedIndex = this.anchors.length - 1;
+				break;
+			case $.ui.keyCode.HOME:
+				selectedIndex = 0;
+				break;
+			case $.ui.keyCode.SPACE:
+				// Activate only, no collapsing
+				event.preventDefault();
+				clearTimeout( this.activating );
+				this._activate( selectedIndex );
+				return;
+			case $.ui.keyCode.ENTER:
+				// Toggle (cancel delayed activation, allow collapsing)
+				event.preventDefault();
+				clearTimeout( this.activating );
+				// Determine if we should collapse or activate
+				this._activate( selectedIndex === this.options.active ? false : selectedIndex );
+				return;
+			default:
+				return;
+		}
+
+		// Focus the appropriate tab, based on which key was pressed
+		event.preventDefault();
+		clearTimeout( this.activating );
+		selectedIndex = this._focusNextTab( selectedIndex, goingForward );
+
+		// Navigating with control/command key will prevent automatic activation
+		if ( !event.ctrlKey && !event.metaKey ) {
+
+			// Update aria-selected immediately so that AT think the tab is already selected.
+			// Otherwise AT may confuse the user by stating that they need to activate the tab,
+			// but the tab will already be activated by the time the announcement finishes.
+			focusedTab.attr( "aria-selected", "false" );
+			this.tabs.eq( selectedIndex ).attr( "aria-selected", "true" );
+
+			this.activating = this._delay(function() {
+				this.option( "active", selectedIndex );
+			}, this.delay );
+		}
+	},
+
+	_panelKeydown: function( event ) {
+		if ( this._handlePageNav( event ) ) {
+			return;
+		}
+
+		// Ctrl+up moves focus to the current tab
+		if ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {
+			event.preventDefault();
+			this.active.focus();
+		}
+	},
+
+	// Alt+page up/down moves focus to the previous/next tab (and activates)
+	_handlePageNav: function( event ) {
+		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {
+			this._activate( this._focusNextTab( this.options.active - 1, false ) );
+			return true;
+		}
+		if ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {
+			this._activate( this._focusNextTab( this.options.active + 1, true ) );
+			return true;
+		}
+	},
+
+	_findNextTab: function( index, goingForward ) {
+		var lastTabIndex = this.tabs.length - 1;
+
+		function constrain() {
+			if ( index > lastTabIndex ) {
+				index = 0;
+			}
+			if ( index < 0 ) {
+				index = lastTabIndex;
+			}
+			return index;
+		}
+
+		while ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {
+			index = goingForward ? index + 1 : index - 1;
+		}
+
+		return index;
+	},
+
+	_focusNextTab: function( index, goingForward ) {
+		index = this._findNextTab( index, goingForward );
+		this.tabs.eq( index ).focus();
+		return index;
+	},
+
+	_setOption: function( key, value ) {
+		if ( key === "active" ) {
+			// _activate() will handle invalid values and update this.options
+			this._activate( value );
+			return;
+		}
+
+		if ( key === "disabled" ) {
+			// don't use the widget factory's disabled handling
+			this._setupDisabled( value );
+			return;
+		}
+
+		this._super( key, value);
+
+		if ( key === "collapsible" ) {
+			this.element.toggleClass( "ui-tabs-collapsible", value );
+			// Setting collapsible: false while collapsed; open first panel
+			if ( !value && this.options.active === false ) {
+				this._activate( 0 );
+			}
+		}
+
+		if ( key === "event" ) {
+			this._setupEvents( value );
+		}
+
+		if ( key === "heightStyle" ) {
+			this._setupHeightStyle( value );
+		}
+	},
+
+	_sanitizeSelector: function( hash ) {
+		return hash ? hash.replace( /[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g, "\\$&" ) : "";
+	},
+
+	refresh: function() {
+		var options = this.options,
+			lis = this.tablist.children( ":has(a[href])" );
+
+		// get disabled tabs from class attribute from HTML
+		// this will get converted to a boolean if needed in _refresh()
+		options.disabled = $.map( lis.filter( ".ui-state-disabled" ), function( tab ) {
+			return lis.index( tab );
+		});
+
+		this._processTabs();
+
+		// was collapsed or no tabs
+		if ( options.active === false || !this.anchors.length ) {
+			options.active = false;
+			this.active = $();
+		// was active, but active tab is gone
+		} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {
+			// all remaining tabs are disabled
+			if ( this.tabs.length === options.disabled.length ) {
+				options.active = false;
+				this.active = $();
+			// activate previous tab
+			} else {
+				this._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );
+			}
+		// was active, active tab still exists
+		} else {
+			// make sure active index is correct
+			options.active = this.tabs.index( this.active );
+		}
+
+		this._refresh();
+	},
+
+	_refresh: function() {
+		this._setupDisabled( this.options.disabled );
+		this._setupEvents( this.options.event );
+		this._setupHeightStyle( this.options.heightStyle );
+
+		this.tabs.not( this.active ).attr({
+			"aria-selected": "false",
+			"aria-expanded": "false",
+			tabIndex: -1
+		});
+		this.panels.not( this._getPanelForTab( this.active ) )
+			.hide()
+			.attr({
+				"aria-hidden": "true"
+			});
+
+		// Make sure one tab is in the tab order
+		if ( !this.active.length ) {
+			this.tabs.eq( 0 ).attr( "tabIndex", 0 );
+		} else {
+			this.active
+				.addClass( "ui-tabs-active ui-state-active" )
+				.attr({
+					"aria-selected": "true",
+					"aria-expanded": "true",
+					tabIndex: 0
+				});
+			this._getPanelForTab( this.active )
+				.show()
+				.attr({
+					"aria-hidden": "false"
+				});
+		}
+	},
+
+	_processTabs: function() {
+		var that = this,
+			prevTabs = this.tabs,
+			prevAnchors = this.anchors,
+			prevPanels = this.panels;
+
+		this.tablist = this._getList()
+			.addClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+			.attr( "role", "tablist" )
+
+			// Prevent users from focusing disabled tabs via click
+			.delegate( "> li", "mousedown" + this.eventNamespace, function( event ) {
+				if ( $( this ).is( ".ui-state-disabled" ) ) {
+					event.preventDefault();
+				}
+			})
+
+			// support: IE <9
+			// Preventing the default action in mousedown doesn't prevent IE
+			// from focusing the element, so if the anchor gets focused, blur.
+			// We don't have to worry about focusing the previously focused
+			// element since clicking on a non-focusable element should focus
+			// the body anyway.
+			.delegate( ".ui-tabs-anchor", "focus" + this.eventNamespace, function() {
+				if ( $( this ).closest( "li" ).is( ".ui-state-disabled" ) ) {
+					this.blur();
+				}
+			});
+
+		this.tabs = this.tablist.find( "> li:has(a[href])" )
+			.addClass( "ui-state-default ui-corner-top" )
+			.attr({
+				role: "tab",
+				tabIndex: -1
+			});
+
+		this.anchors = this.tabs.map(function() {
+				return $( "a", this )[ 0 ];
+			})
+			.addClass( "ui-tabs-anchor" )
+			.attr({
+				role: "presentation",
+				tabIndex: -1
+			});
+
+		this.panels = $();
+
+		this.anchors.each(function( i, anchor ) {
+			var selector, panel, panelId,
+				anchorId = $( anchor ).uniqueId().attr( "id" ),
+				tab = $( anchor ).closest( "li" ),
+				originalAriaControls = tab.attr( "aria-controls" );
+
+			// inline tab
+			if ( that._isLocal( anchor ) ) {
+				selector = anchor.hash;
+				panelId = selector.substring( 1 );
+				panel = that.element.find( that._sanitizeSelector( selector ) );
+			// remote tab
+			} else {
+				// If the tab doesn't already have aria-controls,
+				// generate an id by using a throw-away element
+				panelId = tab.attr( "aria-controls" ) || $( {} ).uniqueId()[ 0 ].id;
+				selector = "#" + panelId;
+				panel = that.element.find( selector );
+				if ( !panel.length ) {
+					panel = that._createPanel( panelId );
+					panel.insertAfter( that.panels[ i - 1 ] || that.tablist );
+				}
+				panel.attr( "aria-live", "polite" );
+			}
+
+			if ( panel.length) {
+				that.panels = that.panels.add( panel );
+			}
+			if ( originalAriaControls ) {
+				tab.data( "ui-tabs-aria-controls", originalAriaControls );
+			}
+			tab.attr({
+				"aria-controls": panelId,
+				"aria-labelledby": anchorId
+			});
+			panel.attr( "aria-labelledby", anchorId );
+		});
+
+		this.panels
+			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+			.attr( "role", "tabpanel" );
+
+		// Avoid memory leaks (#10056)
+		if ( prevTabs ) {
+			this._off( prevTabs.not( this.tabs ) );
+			this._off( prevAnchors.not( this.anchors ) );
+			this._off( prevPanels.not( this.panels ) );
+		}
+	},
+
+	// allow overriding how to find the list for rare usage scenarios (#7715)
+	_getList: function() {
+		return this.tablist || this.element.find( "ol,ul" ).eq( 0 );
+	},
+
+	_createPanel: function( id ) {
+		return $( "<div>" )
+			.attr( "id", id )
+			.addClass( "ui-tabs-panel ui-widget-content ui-corner-bottom" )
+			.data( "ui-tabs-destroy", true );
+	},
+
+	_setupDisabled: function( disabled ) {
+		if ( $.isArray( disabled ) ) {
+			if ( !disabled.length ) {
+				disabled = false;
+			} else if ( disabled.length === this.anchors.length ) {
+				disabled = true;
+			}
+		}
+
+		// disable tabs
+		for ( var i = 0, li; ( li = this.tabs[ i ] ); i++ ) {
+			if ( disabled === true || $.inArray( i, disabled ) !== -1 ) {
+				$( li )
+					.addClass( "ui-state-disabled" )
+					.attr( "aria-disabled", "true" );
+			} else {
+				$( li )
+					.removeClass( "ui-state-disabled" )
+					.removeAttr( "aria-disabled" );
+			}
+		}
+
+		this.options.disabled = disabled;
+	},
+
+	_setupEvents: function( event ) {
+		var events = {};
+		if ( event ) {
+			$.each( event.split(" "), function( index, eventName ) {
+				events[ eventName ] = "_eventHandler";
+			});
+		}
+
+		this._off( this.anchors.add( this.tabs ).add( this.panels ) );
+		// Always prevent the default action, even when disabled
+		this._on( true, this.anchors, {
+			click: function( event ) {
+				event.preventDefault();
+			}
+		});
+		this._on( this.anchors, events );
+		this._on( this.tabs, { keydown: "_tabKeydown" } );
+		this._on( this.panels, { keydown: "_panelKeydown" } );
+
+		this._focusable( this.tabs );
+		this._hoverable( this.tabs );
+	},
+
+	_setupHeightStyle: function( heightStyle ) {
+		var maxHeight,
+			parent = this.element.parent();
+
+		if ( heightStyle === "fill" ) {
+			maxHeight = parent.height();
+			maxHeight -= this.element.outerHeight() - this.element.height();
+
+			this.element.siblings( ":visible" ).each(function() {
+				var elem = $( this ),
+					position = elem.css( "position" );
+
+				if ( position === "absolute" || position === "fixed" ) {
+					return;
+				}
+				maxHeight -= elem.outerHeight( true );
+			});
+
+			this.element.children().not( this.panels ).each(function() {
+				maxHeight -= $( this ).outerHeight( true );
+			});
+
+			this.panels.each(function() {
+				$( this ).height( Math.max( 0, maxHeight -
+					$( this ).innerHeight() + $( this ).height() ) );
+			})
+			.css( "overflow", "auto" );
+		} else if ( heightStyle === "auto" ) {
+			maxHeight = 0;
+			this.panels.each(function() {
+				maxHeight = Math.max( maxHeight, $( this ).height( "" ).height() );
+			}).height( maxHeight );
+		}
+	},
+
+	_eventHandler: function( event ) {
+		var options = this.options,
+			active = this.active,
+			anchor = $( event.currentTarget ),
+			tab = anchor.closest( "li" ),
+			clickedIsActive = tab[ 0 ] === active[ 0 ],
+			collapsing = clickedIsActive && options.collapsible,
+			toShow = collapsing ? $() : this._getPanelForTab( tab ),
+			toHide = !active.length ? $() : this._getPanelForTab( active ),
+			eventData = {
+				oldTab: active,
+				oldPanel: toHide,
+				newTab: collapsing ? $() : tab,
+				newPanel: toShow
+			};
+
+		event.preventDefault();
+
+		if ( tab.hasClass( "ui-state-disabled" ) ||
+				// tab is already loading
+				tab.hasClass( "ui-tabs-loading" ) ||
+				// can't switch durning an animation
+				this.running ||
+				// click on active header, but not collapsible
+				( clickedIsActive && !options.collapsible ) ||
+				// allow canceling activation
+				( this._trigger( "beforeActivate", event, eventData ) === false ) ) {
+			return;
+		}
+
+		options.active = collapsing ? false : this.tabs.index( tab );
+
+		this.active = clickedIsActive ? $() : tab;
+		if ( this.xhr ) {
+			this.xhr.abort();
+		}
+
+		if ( !toHide.length && !toShow.length ) {
+			$.error( "jQuery UI Tabs: Mismatching fragment identifier." );
+		}
+
+		if ( toShow.length ) {
+			this.load( this.tabs.index( tab ), event );
+		}
+		this._toggle( event, eventData );
+	},
+
+	// handles show/hide for selecting tabs
+	_toggle: function( event, eventData ) {
+		var that = this,
+			toShow = eventData.newPanel,
+			toHide = eventData.oldPanel;
+
+		this.running = true;
+
+		function complete() {
+			that.running = false;
+			that._trigger( "activate", event, eventData );
+		}
+
+		function show() {
+			eventData.newTab.closest( "li" ).addClass( "ui-tabs-active ui-state-active" );
+
+			if ( toShow.length && that.options.show ) {
+				that._show( toShow, that.options.show, complete );
+			} else {
+				toShow.show();
+				complete();
+			}
+		}
+
+		// start out by hiding, then showing, then completing
+		if ( toHide.length && this.options.hide ) {
+			this._hide( toHide, this.options.hide, function() {
+				eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+				show();
+			});
+		} else {
+			eventData.oldTab.closest( "li" ).removeClass( "ui-tabs-active ui-state-active" );
+			toHide.hide();
+			show();
+		}
+
+		toHide.attr( "aria-hidden", "true" );
+		eventData.oldTab.attr({
+			"aria-selected": "false",
+			"aria-expanded": "false"
+		});
+		// If we're switching tabs, remove the old tab from the tab order.
+		// If we're opening from collapsed state, remove the previous tab from the tab order.
+		// If we're collapsing, then keep the collapsing tab in the tab order.
+		if ( toShow.length && toHide.length ) {
+			eventData.oldTab.attr( "tabIndex", -1 );
+		} else if ( toShow.length ) {
+			this.tabs.filter(function() {
+				return $( this ).attr( "tabIndex" ) === 0;
+			})
+			.attr( "tabIndex", -1 );
+		}
+
+		toShow.attr( "aria-hidden", "false" );
+		eventData.newTab.attr({
+			"aria-selected": "true",
+			"aria-expanded": "true",
+			tabIndex: 0
+		});
+	},
+
+	_activate: function( index ) {
+		var anchor,
+			active = this._findActive( index );
+
+		// trying to activate the already active panel
+		if ( active[ 0 ] === this.active[ 0 ] ) {
+			return;
+		}
+
+		// trying to collapse, simulate a click on the current active header
+		if ( !active.length ) {
+			active = this.active;
+		}
+
+		anchor = active.find( ".ui-tabs-anchor" )[ 0 ];
+		this._eventHandler({
+			target: anchor,
+			currentTarget: anchor,
+			preventDefault: $.noop
+		});
+	},
+
+	_findActive: function( index ) {
+		return index === false ? $() : this.tabs.eq( index );
+	},
+
+	_getIndex: function( index ) {
+		// meta-function to give users option to provide a href string instead of a numerical index.
+		if ( typeof index === "string" ) {
+			index = this.anchors.index( this.anchors.filter( "[href$='" + index + "']" ) );
+		}
+
+		return index;
+	},
+
+	_destroy: function() {
+		if ( this.xhr ) {
+			this.xhr.abort();
+		}
+
+		this.element.removeClass( "ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible" );
+
+		this.tablist
+			.removeClass( "ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all" )
+			.removeAttr( "role" );
+
+		this.anchors
+			.removeClass( "ui-tabs-anchor" )
+			.removeAttr( "role" )
+			.removeAttr( "tabIndex" )
+			.removeUniqueId();
+
+		this.tablist.unbind( this.eventNamespace );
+
+		this.tabs.add( this.panels ).each(function() {
+			if ( $.data( this, "ui-tabs-destroy" ) ) {
+				$( this ).remove();
+			} else {
+				$( this )
+					.removeClass( "ui-state-default ui-state-active ui-state-disabled " +
+						"ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel" )
+					.removeAttr( "tabIndex" )
+					.removeAttr( "aria-live" )
+					.removeAttr( "aria-busy" )
+					.removeAttr( "aria-selected" )
+					.removeAttr( "aria-labelledby" )
+					.removeAttr( "aria-hidden" )
+					.removeAttr( "aria-expanded" )
+					.removeAttr( "role" );
+			}
+		});
+
+		this.tabs.each(function() {
+			var li = $( this ),
+				prev = li.data( "ui-tabs-aria-controls" );
+			if ( prev ) {
+				li
+					.attr( "aria-controls", prev )
+					.removeData( "ui-tabs-aria-controls" );
+			} else {
+				li.removeAttr( "aria-controls" );
+			}
+		});
+
+		this.panels.show();
+
+		if ( this.options.heightStyle !== "content" ) {
+			this.panels.css( "height", "" );
+		}
+	},
+
+	enable: function( index ) {
+		var disabled = this.options.disabled;
+		if ( disabled === false ) {
+			return;
+		}
+
+		if ( index === undefined ) {
+			disabled = false;
+		} else {
+			index = this._getIndex( index );
+			if ( $.isArray( disabled ) ) {
+				disabled = $.map( disabled, function( num ) {
+					return num !== index ? num : null;
+				});
+			} else {
+				disabled = $.map( this.tabs, function( li, num ) {
+					return num !== index ? num : null;
+				});
+			}
+		}
+		this._setupDisabled( disabled );
+	},
+
+	disable: function( index ) {
+		var disabled = this.options.disabled;
+		if ( disabled === true ) {
+			return;
+		}
+
+		if ( index === undefined ) {
+			disabled = true;
+		} else {
+			index = this._getIndex( index );
+			if ( $.inArray( index, disabled ) !== -1 ) {
+				return;
+			}
+			if ( $.isArray( disabled ) ) {
+				disabled = $.merge( [ index ], disabled ).sort();
+			} else {
+				disabled = [ index ];
+			}
+		}
+		this._setupDisabled( disabled );
+	},
+
+	load: function( index, event ) {
+		index = this._getIndex( index );
+		var that = this,
+			tab = this.tabs.eq( index ),
+			anchor = tab.find( ".ui-tabs-anchor" ),
+			panel = this._getPanelForTab( tab ),
+			eventData = {
+				tab: tab,
+				panel: panel
+			},
+			complete = function( jqXHR, status ) {
+				if ( status === "abort" ) {
+					that.panels.stop( false, true );
+				}
+
+				tab.removeClass( "ui-tabs-loading" );
+				panel.removeAttr( "aria-busy" );
+
+				if ( jqXHR === that.xhr ) {
+					delete that.xhr;
+				}
+			};
+
+		// not remote
+		if ( this._isLocal( anchor[ 0 ] ) ) {
+			return;
+		}
+
+		this.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );
+
+		// support: jQuery <1.8
+		// jQuery <1.8 returns false if the request is canceled in beforeSend,
+		// but as of 1.8, $.ajax() always returns a jqXHR object.
+		if ( this.xhr && this.xhr.statusText !== "canceled" ) {
+			tab.addClass( "ui-tabs-loading" );
+			panel.attr( "aria-busy", "true" );
+
+			this.xhr
+				.done(function( response, status, jqXHR ) {
+					// support: jQuery <1.8
+					// http://bugs.jquery.com/ticket/11778
+					setTimeout(function() {
+						panel.html( response );
+						that._trigger( "load", event, eventData );
+
+						complete( jqXHR, status );
+					}, 1 );
+				})
+				.fail(function( jqXHR, status ) {
+					// support: jQuery <1.8
+					// http://bugs.jquery.com/ticket/11778
+					setTimeout(function() {
+						complete( jqXHR, status );
+					}, 1 );
+				});
+		}
+	},
+
+	_ajaxSettings: function( anchor, event, eventData ) {
+		var that = this;
+		return {
+			url: anchor.attr( "href" ),
+			beforeSend: function( jqXHR, settings ) {
+				return that._trigger( "beforeLoad", event,
+					$.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );
+			}
+		};
+	},
+
+	_getPanelForTab: function( tab ) {
+		var id = $( tab ).attr( "aria-controls" );
+		return this.element.find( this._sanitizeSelector( "#" + id ) );
+	}
+});
+
+
+/*!
+ * jQuery UI Tooltip 1.11.4
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ *
+ * http://api.jqueryui.com/tooltip/
+ */
+
+
+var tooltip = $.widget( "ui.tooltip", {
+	version: "1.11.4",
+	options: {
+		content: function() {
+			// support: IE<9, Opera in jQuery <1.7
+			// .text() can't accept undefined, so coerce to a string
+			var title = $( this ).attr( "title" ) || "";
+			// Escape title, since we're going from an attribute to raw HTML
+			return $( "<a>" ).text( title ).html();
+		},
+		hide: true,
+		// Disabled elements have inconsistent behavior across browsers (#8661)
+		items: "[title]:not([disabled])",
+		position: {
+			my: "left top+15",
+			at: "left bottom",
+			collision: "flipfit flip"
+		},
+		show: true,
+		tooltipClass: null,
+		track: false,
+
+		// callbacks
+		close: null,
+		open: null
+	},
+
+	_addDescribedBy: function( elem, id ) {
+		var describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ );
+		describedby.push( id );
+		elem
+			.data( "ui-tooltip-id", id )
+			.attr( "aria-describedby", $.trim( describedby.join( " " ) ) );
+	},
+
+	_removeDescribedBy: function( elem ) {
+		var id = elem.data( "ui-tooltip-id" ),
+			describedby = (elem.attr( "aria-describedby" ) || "").split( /\s+/ ),
+			index = $.inArray( id, describedby );
+
+		if ( index !== -1 ) {
+			describedby.splice( index, 1 );
+		}
+
+		elem.removeData( "ui-tooltip-id" );
+		describedby = $.trim( describedby.join( " " ) );
+		if ( describedby ) {
+			elem.attr( "aria-describedby", describedby );
+		} else {
+			elem.removeAttr( "aria-describedby" );
+		}
+	},
+
+	_create: function() {
+		this._on({
+			mouseover: "open",
+			focusin: "open"
+		});
+
+		// IDs of generated tooltips, needed for destroy
+		this.tooltips = {};
+
+		// IDs of parent tooltips where we removed the title attribute
+		this.parents = {};
+
+		if ( this.options.disabled ) {
+			this._disable();
+		}
+
+		// Append the aria-live region so tooltips announce correctly
+		this.liveRegion = $( "<div>" )
+			.attr({
+				role: "log",
+				"aria-live": "assertive",
+				"aria-relevant": "additions"
+			})
+			.addClass( "ui-helper-hidden-accessible" )
+			.appendTo( this.document[ 0 ].body );
+	},
+
+	_setOption: function( key, value ) {
+		var that = this;
+
+		if ( key === "disabled" ) {
+			this[ value ? "_disable" : "_enable" ]();
+			this.options[ key ] = value;
+			// disable element style changes
+			return;
+		}
+
+		this._super( key, value );
+
+		if ( key === "content" ) {
+			$.each( this.tooltips, function( id, tooltipData ) {
+				that._updateContent( tooltipData.element );
+			});
+		}
+	},
+
+	_disable: function() {
+		var that = this;
+
+		// close open tooltips
+		$.each( this.tooltips, function( id, tooltipData ) {
+			var event = $.Event( "blur" );
+			event.target = event.currentTarget = tooltipData.element[ 0 ];
+			that.close( event, true );
+		});
+
+		// remove title attributes to prevent native tooltips
+		this.element.find( this.options.items ).addBack().each(function() {
+			var element = $( this );
+			if ( element.is( "[title]" ) ) {
+				element
+					.data( "ui-tooltip-title", element.attr( "title" ) )
+					.removeAttr( "title" );
+			}
+		});
+	},
+
+	_enable: function() {
+		// restore title attributes
+		this.element.find( this.options.items ).addBack().each(function() {
+			var element = $( this );
+			if ( element.data( "ui-tooltip-title" ) ) {
+				element.attr( "title", element.data( "ui-tooltip-title" ) );
+			}
+		});
+	},
+
+	open: function( event ) {
+		var that = this,
+			target = $( event ? event.target : this.element )
+				// we need closest here due to mouseover bubbling,
+				// but always pointing at the same event target
+				.closest( this.options.items );
+
+		// No element to show a tooltip for or the tooltip is already open
+		if ( !target.length || target.data( "ui-tooltip-id" ) ) {
+			return;
+		}
+
+		if ( target.attr( "title" ) ) {
+			target.data( "ui-tooltip-title", target.attr( "title" ) );
+		}
+
+		target.data( "ui-tooltip-open", true );
+
+		// kill parent tooltips, custom or native, for hover
+		if ( event && event.type === "mouseover" ) {
+			target.parents().each(function() {
+				var parent = $( this ),
+					blurEvent;
+				if ( parent.data( "ui-tooltip-open" ) ) {
+					blurEvent = $.Event( "blur" );
+					blurEvent.target = blurEvent.currentTarget = this;
+					that.close( blurEvent, true );
+				}
+				if ( parent.attr( "title" ) ) {
+					parent.uniqueId();
+					that.parents[ this.id ] = {
+						element: this,
+						title: parent.attr( "title" )
+					};
+					parent.attr( "title", "" );
+				}
+			});
+		}
+
+		this._registerCloseHandlers( event, target );
+		this._updateContent( target, event );
+	},
+
+	_updateContent: function( target, event ) {
+		var content,
+			contentOption = this.options.content,
+			that = this,
+			eventType = event ? event.type : null;
+
+		if ( typeof contentOption === "string" ) {
+			return this._open( event, target, contentOption );
+		}
+
+		content = contentOption.call( target[0], function( response ) {
+
+			// IE may instantly serve a cached response for ajax requests
+			// delay this call to _open so the other call to _open runs first
+			that._delay(function() {
+
+				// Ignore async response if tooltip was closed already
+				if ( !target.data( "ui-tooltip-open" ) ) {
+					return;
+				}
+
+				// jQuery creates a special event for focusin when it doesn't
+				// exist natively. To improve performance, the native event
+				// object is reused and the type is changed. Therefore, we can't
+				// rely on the type being correct after the event finished
+				// bubbling, so we set it back to the previous value. (#8740)
+				if ( event ) {
+					event.type = eventType;
+				}
+				this._open( event, target, response );
+			});
+		});
+		if ( content ) {
+			this._open( event, target, content );
+		}
+	},
+
+	_open: function( event, target, content ) {
+		var tooltipData, tooltip, delayedShow, a11yContent,
+			positionOption = $.extend( {}, this.options.position );
+
+		if ( !content ) {
+			return;
+		}
+
+		// Content can be updated multiple times. If the tooltip already
+		// exists, then just update the content and bail.
+		tooltipData = this._find( target );
+		if ( tooltipData ) {
+			tooltipData.tooltip.find( ".ui-tooltip-content" ).html( content );
+			return;
+		}
+
+		// if we have a title, clear it to prevent the native tooltip
+		// we have to check first to avoid defining a title if none exists
+		// (we don't want to cause an element to start matching [title])
+		//
+		// We use removeAttr only for key events, to allow IE to export the correct
+		// accessible attributes. For mouse events, set to empty string to avoid
+		// native tooltip showing up (happens only when removing inside mouseover).
+		if ( target.is( "[title]" ) ) {
+			if ( event && event.type === "mouseover" ) {
+				target.attr( "title", "" );
+			} else {
+				target.removeAttr( "title" );
+			}
+		}
+
+		tooltipData = this._tooltip( target );
+		tooltip = tooltipData.tooltip;
+		this._addDescribedBy( target, tooltip.attr( "id" ) );
+		tooltip.find( ".ui-tooltip-content" ).html( content );
+
+		// Support: Voiceover on OS X, JAWS on IE <= 9
+		// JAWS announces deletions even when aria-relevant="additions"
+		// Voiceover will sometimes re-read the entire log region's contents from the beginning
+		this.liveRegion.children().hide();
+		if ( content.clone ) {
+			a11yContent = content.clone();
+			a11yContent.removeAttr( "id" ).find( "[id]" ).removeAttr( "id" );
+		} else {
+			a11yContent = content;
+		}
+		$( "<div>" ).html( a11yContent ).appendTo( this.liveRegion );
+
+		function position( event ) {
+			positionOption.of = event;
+			if ( tooltip.is( ":hidden" ) ) {
+				return;
+			}
+			tooltip.position( positionOption );
+		}
+		if ( this.options.track && event && /^mouse/.test( event.type ) ) {
+			this._on( this.document, {
+				mousemove: position
+			});
+			// trigger once to override element-relative positioning
+			position( event );
+		} else {
+			tooltip.position( $.extend({
+				of: target
+			}, this.options.position ) );
+		}
+
+		tooltip.hide();
+
+		this._show( tooltip, this.options.show );
+		// Handle tracking tooltips that are shown with a delay (#8644). As soon
+		// as the tooltip is visible, position the tooltip using the most recent
+		// event.
+		if ( this.options.show && this.options.show.delay ) {
+			delayedShow = this.delayedShow = setInterval(function() {
+				if ( tooltip.is( ":visible" ) ) {
+					position( positionOption.of );
+					clearInterval( delayedShow );
+				}
+			}, $.fx.interval );
+		}
+
+		this._trigger( "open", event, { tooltip: tooltip } );
+	},
+
+	_registerCloseHandlers: function( event, target ) {
+		var events = {
+			keyup: function( event ) {
+				if ( event.keyCode === $.ui.keyCode.ESCAPE ) {
+					var fakeEvent = $.Event(event);
+					fakeEvent.currentTarget = target[0];
+					this.close( fakeEvent, true );
+				}
+			}
+		};
+
+		// Only bind remove handler for delegated targets. Non-delegated
+		// tooltips will handle this in destroy.
+		if ( target[ 0 ] !== this.element[ 0 ] ) {
+			events.remove = function() {
+				this._removeTooltip( this._find( target ).tooltip );
+			};
+		}
+
+		if ( !event || event.type === "mouseover" ) {
+			events.mouseleave = "close";
+		}
+		if ( !event || event.type === "focusin" ) {
+			events.focusout = "close";
+		}
+		this._on( true, target, events );
+	},
+
+	close: function( event ) {
+		var tooltip,
+			that = this,
+			target = $( event ? event.currentTarget : this.element ),
+			tooltipData = this._find( target );
+
+		// The tooltip may already be closed
+		if ( !tooltipData ) {
+
+			// We set ui-tooltip-open immediately upon open (in open()), but only set the
+			// additional data once there's actually content to show (in _open()). So even if the
+			// tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in
+			// the period between open() and _open().
+			target.removeData( "ui-tooltip-open" );
+			return;
+		}
+
+		tooltip = tooltipData.tooltip;
+
+		// disabling closes the tooltip, so we need to track when we're closing
+		// to avoid an infinite loop in case the tooltip becomes disabled on close
+		if ( tooltipData.closing ) {
+			return;
+		}
+
+		// Clear the interval for delayed tracking tooltips
+		clearInterval( this.delayedShow );
+
+		// only set title if we had one before (see comment in _open())
+		// If the title attribute has changed since open(), don't restore
+		if ( target.data( "ui-tooltip-title" ) && !target.attr( "title" ) ) {
+			target.attr( "title", target.data( "ui-tooltip-title" ) );
+		}
+
+		this._removeDescribedBy( target );
+
+		tooltipData.hiding = true;
+		tooltip.stop( true );
+		this._hide( tooltip, this.options.hide, function() {
+			that._removeTooltip( $( this ) );
+		});
+
+		target.removeData( "ui-tooltip-open" );
+		this._off( target, "mouseleave focusout keyup" );
+
+		// Remove 'remove' binding only on delegated targets
+		if ( target[ 0 ] !== this.element[ 0 ] ) {
+			this._off( target, "remove" );
+		}
+		this._off( this.document, "mousemove" );
+
+		if ( event && event.type === "mouseleave" ) {
+			$.each( this.parents, function( id, parent ) {
+				$( parent.element ).attr( "title", parent.title );
+				delete that.parents[ id ];
+			});
+		}
+
+		tooltipData.closing = true;
+		this._trigger( "close", event, { tooltip: tooltip } );
+		if ( !tooltipData.hiding ) {
+			tooltipData.closing = false;
+		}
+	},
+
+	_tooltip: function( element ) {
+		var tooltip = $( "<div>" )
+				.attr( "role", "tooltip" )
+				.addClass( "ui-tooltip ui-widget ui-corner-all ui-widget-content " +
+					( this.options.tooltipClass || "" ) ),
+			id = tooltip.uniqueId().attr( "id" );
+
+		$( "<div>" )
+			.addClass( "ui-tooltip-content" )
+			.appendTo( tooltip );
+
+		tooltip.appendTo( this.document[0].body );
+
+		return this.tooltips[ id ] = {
+			element: element,
+			tooltip: tooltip
+		};
+	},
+
+	_find: function( target ) {
+		var id = target.data( "ui-tooltip-id" );
+		return id ? this.tooltips[ id ] : null;
+	},
+
+	_removeTooltip: function( tooltip ) {
+		tooltip.remove();
+		delete this.tooltips[ tooltip.attr( "id" ) ];
+	},
+
+	_destroy: function() {
+		var that = this;
+
+		// close open tooltips
+		$.each( this.tooltips, function( id, tooltipData ) {
+			// Delegate to close method to handle common cleanup
+			var event = $.Event( "blur" ),
+				element = tooltipData.element;
+			event.target = event.currentTarget = element[ 0 ];
+			that.close( event, true );
+
+			// Remove immediately; destroying an open tooltip doesn't use the
+			// hide animation
+			$( "#" + id ).remove();
+
+			// Restore the title
+			if ( element.data( "ui-tooltip-title" ) ) {
+				// If the title attribute has changed since open(), don't restore
+				if ( !element.attr( "title" ) ) {
+					element.attr( "title", element.data( "ui-tooltip-title" ) );
+				}
+				element.removeData( "ui-tooltip-title" );
+			}
+		});
+		this.liveRegion.remove();
+	}
+});
+
+
+
+}));
\ No newline at end of file
diff --git a/public/bower_components/jquery-validation/jquery.validate.js b/public/bower_components/jquery-validation/jquery.validate.js
new file mode 100644
index 0000000..4e979bc
--- /dev/null
+++ b/public/bower_components/jquery-validation/jquery.validate.js
@@ -0,0 +1,1398 @@
+/*!
+ * jQuery Validation Plugin v1.14.0
+ *
+ * http://jqueryvalidation.org/
+ *
+ * Copyright (c) 2015 Jörn Zaefferer
+ * Released under the MIT license
+ */
+(function( factory ) {
+	if ( typeof define === "function" && define.amd ) {
+		define( ["jquery"], factory );
+	} else {
+		factory( jQuery );
+	}
+}(function( $ ) {
+
+$.extend($.fn, {
+	// http://jqueryvalidation.org/validate/
+	validate: function( options ) {
+
+		// if nothing is selected, return nothing; can't chain anyway
+		if ( !this.length ) {
+			if ( options && options.debug && window.console ) {
+				console.warn( "Nothing selected, can't validate, returning nothing." );
+			}
+			return;
+		}
+
+		// check if a validator for this form was already created
+		var validator = $.data( this[ 0 ], "validator" );
+		if ( validator ) {
+			return validator;
+		}
+
+		// Add novalidate tag if HTML5.
+		this.attr( "novalidate", "novalidate" );
+
+		validator = new $.validator( options, this[ 0 ] );
+		$.data( this[ 0 ], "validator", validator );
+
+		if ( validator.settings.onsubmit ) {
+
+			this.on( "click.validate", ":submit", function( event ) {
+				if ( validator.settings.submitHandler ) {
+					validator.submitButton = event.target;
+				}
+
+				// allow suppressing validation by adding a cancel class to the submit button
+				if ( $( this ).hasClass( "cancel" ) ) {
+					validator.cancelSubmit = true;
+				}
+
+				// allow suppressing validation by adding the html5 formnovalidate attribute to the submit button
+				if ( $( this ).attr( "formnovalidate" ) !== undefined ) {
+					validator.cancelSubmit = true;
+				}
+			});
+
+			// validate the form on submit
+			this.on( "submit.validate", function( event ) {
+				if ( validator.settings.debug ) {
+					// prevent form submit to be able to see console output
+					event.preventDefault();
+				}
+				function handle() {
+					var hidden, result;
+					if ( validator.settings.submitHandler ) {
+						if ( validator.submitButton ) {
+							// insert a hidden input as a replacement for the missing submit button
+							hidden = $( "<input type='hidden'/>" )
+								.attr( "name", validator.submitButton.name )
+								.val( $( validator.submitButton ).val() )
+								.appendTo( validator.currentForm );
+						}
+						result = validator.settings.submitHandler.call( validator, validator.currentForm, event );
+						if ( validator.submitButton ) {
+							// and clean up afterwards; thanks to no-block-scope, hidden can be referenced
+							hidden.remove();
+						}
+						if ( result !== undefined ) {
+							return result;
+						}
+						return false;
+					}
+					return true;
+				}
+
+				// prevent submit for invalid forms or custom submit handlers
+				if ( validator.cancelSubmit ) {
+					validator.cancelSubmit = false;
+					return handle();
+				}
+				if ( validator.form() ) {
+					if ( validator.pendingRequest ) {
+						validator.formSubmitted = true;
+						return false;
+					}
+					return handle();
+				} else {
+					validator.focusInvalid();
+					return false;
+				}
+			});
+		}
+
+		return validator;
+	},
+	// http://jqueryvalidation.org/valid/
+	valid: function() {
+		var valid, validator, errorList;
+
+		if ( $( this[ 0 ] ).is( "form" ) ) {
+			valid = this.validate().form();
+		} else {
+			errorList = [];
+			valid = true;
+			validator = $( this[ 0 ].form ).validate();
+			this.each( function() {
+				valid = validator.element( this ) && valid;
+				errorList = errorList.concat( validator.errorList );
+			});
+			validator.errorList = errorList;
+		}
+		return valid;
+	},
+
+	// http://jqueryvalidation.org/rules/
+	rules: function( command, argument ) {
+		var element = this[ 0 ],
+			settings, staticRules, existingRules, data, param, filtered;
+
+		if ( command ) {
+			settings = $.data( element.form, "validator" ).settings;
+			staticRules = settings.rules;
+			existingRules = $.validator.staticRules( element );
+			switch ( command ) {
+			case "add":
+				$.extend( existingRules, $.validator.normalizeRule( argument ) );
+				// remove messages from rules, but allow them to be set separately
+				delete existingRules.messages;
+				staticRules[ element.name ] = existingRules;
+				if ( argument.messages ) {
+					settings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );
+				}
+				break;
+			case "remove":
+				if ( !argument ) {
+					delete staticRules[ element.name ];
+					return existingRules;
+				}
+				filtered = {};
+				$.each( argument.split( /\s/ ), function( index, method ) {
+					filtered[ method ] = existingRules[ method ];
+					delete existingRules[ method ];
+					if ( method === "required" ) {
+						$( element ).removeAttr( "aria-required" );
+					}
+				});
+				return filtered;
+			}
+		}
+
+		data = $.validator.normalizeRules(
+		$.extend(
+			{},
+			$.validator.classRules( element ),
+			$.validator.attributeRules( element ),
+			$.validator.dataRules( element ),
+			$.validator.staticRules( element )
+		), element );
+
+		// make sure required is at front
+		if ( data.required ) {
+			param = data.required;
+			delete data.required;
+			data = $.extend( { required: param }, data );
+			$( element ).attr( "aria-required", "true" );
+		}
+
+		// make sure remote is at back
+		if ( data.remote ) {
+			param = data.remote;
+			delete data.remote;
+			data = $.extend( data, { remote: param });
+		}
+
+		return data;
+	}
+});
+
+// Custom selectors
+$.extend( $.expr[ ":" ], {
+	// http://jqueryvalidation.org/blank-selector/
+	blank: function( a ) {
+		return !$.trim( "" + $( a ).val() );
+	},
+	// http://jqueryvalidation.org/filled-selector/
+	filled: function( a ) {
+		return !!$.trim( "" + $( a ).val() );
+	},
+	// http://jqueryvalidation.org/unchecked-selector/
+	unchecked: function( a ) {
+		return !$( a ).prop( "checked" );
+	}
+});
+
+// constructor for validator
+$.validator = function( options, form ) {
+	this.settings = $.extend( true, {}, $.validator.defaults, options );
+	this.currentForm = form;
+	this.init();
+};
+
+// http://jqueryvalidation.org/jQuery.validator.format/
+$.validator.format = function( source, params ) {
+	if ( arguments.length === 1 ) {
+		return function() {
+			var args = $.makeArray( arguments );
+			args.unshift( source );
+			return $.validator.format.apply( this, args );
+		};
+	}
+	if ( arguments.length > 2 && params.constructor !== Array  ) {
+		params = $.makeArray( arguments ).slice( 1 );
+	}
+	if ( params.constructor !== Array ) {
+		params = [ params ];
+	}
+	$.each( params, function( i, n ) {
+		source = source.replace( new RegExp( "\\{" + i + "\\}", "g" ), function() {
+			return n;
+		});
+	});
+	return source;
+};
+
+$.extend( $.validator, {
+
+	defaults: {
+		messages: {},
+		groups: {},
+		rules: {},
+		errorClass: "error",
+		validClass: "valid",
+		errorElement: "label",
+		focusCleanup: false,
+		focusInvalid: true,
+		errorContainer: $( [] ),
+		errorLabelContainer: $( [] ),
+		onsubmit: true,
+		ignore: ":hidden",
+		ignoreTitle: false,
+		onfocusin: function( element ) {
+			this.lastActive = element;
+
+			// Hide error label and remove error class on focus if enabled
+			if ( this.settings.focusCleanup ) {
+				if ( this.settings.unhighlight ) {
+					this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
+				}
+				this.hideThese( this.errorsFor( element ) );
+			}
+		},
+		onfocusout: function( element ) {
+			if ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {
+				this.element( element );
+			}
+		},
+		onkeyup: function( element, event ) {
+			// Avoid revalidate the field when pressing one of the following keys
+			// Shift       => 16
+			// Ctrl        => 17
+			// Alt         => 18
+			// Caps lock   => 20
+			// End         => 35
+			// Home        => 36
+			// Left arrow  => 37
+			// Up arrow    => 38
+			// Right arrow => 39
+			// Down arrow  => 40
+			// Insert      => 45
+			// Num lock    => 144
+			// AltGr key   => 225
+			var excludedKeys = [
+				16, 17, 18, 20, 35, 36, 37,
+				38, 39, 40, 45, 144, 225
+			];
+
+			if ( event.which === 9 && this.elementValue( element ) === "" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {
+				return;
+			} else if ( element.name in this.submitted || element === this.lastElement ) {
+				this.element( element );
+			}
+		},
+		onclick: function( element ) {
+			// click on selects, radiobuttons and checkboxes
+			if ( element.name in this.submitted ) {
+				this.element( element );
+
+			// or option elements, check parent select in that case
+			} else if ( element.parentNode.name in this.submitted ) {
+				this.element( element.parentNode );
+			}
+		},
+		highlight: function( element, errorClass, validClass ) {
+			if ( element.type === "radio" ) {
+				this.findByName( element.name ).addClass( errorClass ).removeClass( validClass );
+			} else {
+				$( element ).addClass( errorClass ).removeClass( validClass );
+			}
+		},
+		unhighlight: function( element, errorClass, validClass ) {
+			if ( element.type === "radio" ) {
+				this.findByName( element.name ).removeClass( errorClass ).addClass( validClass );
+			} else {
+				$( element ).removeClass( errorClass ).addClass( validClass );
+			}
+		}
+	},
+
+	// http://jqueryvalidation.org/jQuery.validator.setDefaults/
+	setDefaults: function( settings ) {
+		$.extend( $.validator.defaults, settings );
+	},
+
+	messages: {
+		required: "This field is required.",
+		remote: "Please fix this field.",
+		email: "Please enter a valid email address.",
+		url: "Please enter a valid URL.",
+		date: "Please enter a valid date.",
+		dateISO: "Please enter a valid date ( ISO ).",
+		number: "Please enter a valid number.",
+		digits: "Please enter only digits.",
+		creditcard: "Please enter a valid credit card number.",
+		equalTo: "Please enter the same value again.",
+		maxlength: $.validator.format( "Please enter no more than {0} characters." ),
+		minlength: $.validator.format( "Please enter at least {0} characters." ),
+		rangelength: $.validator.format( "Please enter a value between {0} and {1} characters long." ),
+		range: $.validator.format( "Please enter a value between {0} and {1}." ),
+		max: $.validator.format( "Please enter a value less than or equal to {0}." ),
+		min: $.validator.format( "Please enter a value greater than or equal to {0}." )
+	},
+
+	autoCreateRanges: false,
+
+	prototype: {
+
+		init: function() {
+			this.labelContainer = $( this.settings.errorLabelContainer );
+			this.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );
+			this.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );
+			this.submitted = {};
+			this.valueCache = {};
+			this.pendingRequest = 0;
+			this.pending = {};
+			this.invalid = {};
+			this.reset();
+
+			var groups = ( this.groups = {} ),
+				rules;
+			$.each( this.settings.groups, function( key, value ) {
+				if ( typeof value === "string" ) {
+					value = value.split( /\s/ );
+				}
+				$.each( value, function( index, name ) {
+					groups[ name ] = key;
+				});
+			});
+			rules = this.settings.rules;
+			$.each( rules, function( key, value ) {
+				rules[ key ] = $.validator.normalizeRule( value );
+			});
+
+			function delegate( event ) {
+				var validator = $.data( this.form, "validator" ),
+					eventType = "on" + event.type.replace( /^validate/, "" ),
+					settings = validator.settings;
+				if ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {
+					settings[ eventType ].call( validator, this, event );
+				}
+			}
+
+			$( this.currentForm )
+				.on( "focusin.validate focusout.validate keyup.validate",
+					":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], " +
+					"[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], " +
+					"[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], " +
+					"[type='radio'], [type='checkbox']", delegate)
+				// Support: Chrome, oldIE
+				// "select" is provided as event.target when clicking a option
+				.on("click.validate", "select, option, [type='radio'], [type='checkbox']", delegate);
+
+			if ( this.settings.invalidHandler ) {
+				$( this.currentForm ).on( "invalid-form.validate", this.settings.invalidHandler );
+			}
+
+			// Add aria-required to any Static/Data/Class required fields before first validation
+			// Screen readers require this attribute to be present before the initial submission http://www.w3.org/TR/WCAG-TECHS/ARIA2.html
+			$( this.currentForm ).find( "[required], [data-rule-required], .required" ).attr( "aria-required", "true" );
+		},
+
+		// http://jqueryvalidation.org/Validator.form/
+		form: function() {
+			this.checkForm();
+			$.extend( this.submitted, this.errorMap );
+			this.invalid = $.extend({}, this.errorMap );
+			if ( !this.valid() ) {
+				$( this.currentForm ).triggerHandler( "invalid-form", [ this ]);
+			}
+			this.showErrors();
+			return this.valid();
+		},
+
+		checkForm: function() {
+			this.prepareForm();
+			for ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {
+				this.check( elements[ i ] );
+			}
+			return this.valid();
+		},
+
+		// http://jqueryvalidation.org/Validator.element/
+		element: function( element ) {
+			var cleanElement = this.clean( element ),
+				checkElement = this.validationTargetFor( cleanElement ),
+				result = true;
+
+			this.lastElement = checkElement;
+
+			if ( checkElement === undefined ) {
+				delete this.invalid[ cleanElement.name ];
+			} else {
+				this.prepareElement( checkElement );
+				this.currentElements = $( checkElement );
+
+				result = this.check( checkElement ) !== false;
+				if ( result ) {
+					delete this.invalid[ checkElement.name ];
+				} else {
+					this.invalid[ checkElement.name ] = true;
+				}
+			}
+			// Add aria-invalid status for screen readers
+			$( element ).attr( "aria-invalid", !result );
+
+			if ( !this.numberOfInvalids() ) {
+				// Hide error containers on last error
+				this.toHide = this.toHide.add( this.containers );
+			}
+			this.showErrors();
+			return result;
+		},
+
+		// http://jqueryvalidation.org/Validator.showErrors/
+		showErrors: function( errors ) {
+			if ( errors ) {
+				// add items to error list and map
+				$.extend( this.errorMap, errors );
+				this.errorList = [];
+				for ( var name in errors ) {
+					this.errorList.push({
+						message: errors[ name ],
+						element: this.findByName( name )[ 0 ]
+					});
+				}
+				// remove items from success list
+				this.successList = $.grep( this.successList, function( element ) {
+					return !( element.name in errors );
+				});
+			}
+			if ( this.settings.showErrors ) {
+				this.settings.showErrors.call( this, this.errorMap, this.errorList );
+			} else {
+				this.defaultShowErrors();
+			}
+		},
+
+		// http://jqueryvalidation.org/Validator.resetForm/
+		resetForm: function() {
+			if ( $.fn.resetForm ) {
+				$( this.currentForm ).resetForm();
+			}
+			this.submitted = {};
+			this.lastElement = null;
+			this.prepareForm();
+			this.hideErrors();
+			var i, elements = this.elements()
+				.removeData( "previousValue" )
+				.removeAttr( "aria-invalid" );
+
+			if ( this.settings.unhighlight ) {
+				for ( i = 0; elements[ i ]; i++ ) {
+					this.settings.unhighlight.call( this, elements[ i ],
+						this.settings.errorClass, "" );
+				}
+			} else {
+				elements.removeClass( this.settings.errorClass );
+			}
+		},
+
+		numberOfInvalids: function() {
+			return this.objectLength( this.invalid );
+		},
+
+		objectLength: function( obj ) {
+			/* jshint unused: false */
+			var count = 0,
+				i;
+			for ( i in obj ) {
+				count++;
+			}
+			return count;
+		},
+
+		hideErrors: function() {
+			this.hideThese( this.toHide );
+		},
+
+		hideThese: function( errors ) {
+			errors.not( this.containers ).text( "" );
+			this.addWrapper( errors ).hide();
+		},
+
+		valid: function() {
+			return this.size() === 0;
+		},
+
+		size: function() {
+			return this.errorList.length;
+		},
+
+		focusInvalid: function() {
+			if ( this.settings.focusInvalid ) {
+				try {
+					$( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [])
+					.filter( ":visible" )
+					.focus()
+					// manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find
+					.trigger( "focusin" );
+				} catch ( e ) {
+					// ignore IE throwing errors when focusing hidden elements
+				}
+			}
+		},
+
+		findLastActive: function() {
+			var lastActive = this.lastActive;
+			return lastActive && $.grep( this.errorList, function( n ) {
+				return n.element.name === lastActive.name;
+			}).length === 1 && lastActive;
+		},
+
+		elements: function() {
+			var validator = this,
+				rulesCache = {};
+
+			// select all valid inputs inside the form (no submit or reset buttons)
+			return $( this.currentForm )
+			.find( "input, select, textarea" )
+			.not( ":submit, :reset, :image, :disabled" )
+			.not( this.settings.ignore )
+			.filter( function() {
+				if ( !this.name && validator.settings.debug && window.console ) {
+					console.error( "%o has no name assigned", this );
+				}
+
+				// select only the first element for each name, and only those with rules specified
+				if ( this.name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {
+					return false;
+				}
+
+				rulesCache[ this.name ] = true;
+				return true;
+			});
+		},
+
+		clean: function( selector ) {
+			return $( selector )[ 0 ];
+		},
+
+		errors: function() {
+			var errorClass = this.settings.errorClass.split( " " ).join( "." );
+			return $( this.settings.errorElement + "." + errorClass, this.errorContext );
+		},
+
+		reset: function() {
+			this.successList = [];
+			this.errorList = [];
+			this.errorMap = {};
+			this.toShow = $( [] );
+			this.toHide = $( [] );
+			this.currentElements = $( [] );
+		},
+
+		prepareForm: function() {
+			this.reset();
+			this.toHide = this.errors().add( this.containers );
+		},
+
+		prepareElement: function( element ) {
+			this.reset();
+			this.toHide = this.errorsFor( element );
+		},
+
+		elementValue: function( element ) {
+			var val,
+				$element = $( element ),
+				type = element.type;
+
+			if ( type === "radio" || type === "checkbox" ) {
+				return this.findByName( element.name ).filter(":checked").val();
+			} else if ( type === "number" && typeof element.validity !== "undefined" ) {
+				return element.validity.badInput ? false : $element.val();
+			}
+
+			val = $element.val();
+			if ( typeof val === "string" ) {
+				return val.replace(/\r/g, "" );
+			}
+			return val;
+		},
+
+		check: function( element ) {
+			element = this.validationTargetFor( this.clean( element ) );
+
+			var rules = $( element ).rules(),
+				rulesCount = $.map( rules, function( n, i ) {
+					return i;
+				}).length,
+				dependencyMismatch = false,
+				val = this.elementValue( element ),
+				result, method, rule;
+
+			for ( method in rules ) {
+				rule = { method: method, parameters: rules[ method ] };
+				try {
+
+					result = $.validator.methods[ method ].call( this, val, element, rule.parameters );
+
+					// if a method indicates that the field is optional and therefore valid,
+					// don't mark it as valid when there are no other rules
+					if ( result === "dependency-mismatch" && rulesCount === 1 ) {
+						dependencyMismatch = true;
+						continue;
+					}
+					dependencyMismatch = false;
+
+					if ( result === "pending" ) {
+						this.toHide = this.toHide.not( this.errorsFor( element ) );
+						return;
+					}
+
+					if ( !result ) {
+						this.formatAndAdd( element, rule );
+						return false;
+					}
+				} catch ( e ) {
+					if ( this.settings.debug && window.console ) {
+						console.log( "Exception occurred when checking element " + element.id + ", check the '" + rule.method + "' method.", e );
+					}
+					if ( e instanceof TypeError ) {
+						e.message += ".  Exception occurred when checking element " + element.id + ", check the '" + rule.method + "' method.";
+					}
+
+					throw e;
+				}
+			}
+			if ( dependencyMismatch ) {
+				return;
+			}
+			if ( this.objectLength( rules ) ) {
+				this.successList.push( element );
+			}
+			return true;
+		},
+
+		// return the custom message for the given element and validation method
+		// specified in the element's HTML5 data attribute
+		// return the generic message if present and no method specific message is present
+		customDataMessage: function( element, method ) {
+			return $( element ).data( "msg" + method.charAt( 0 ).toUpperCase() +
+				method.substring( 1 ).toLowerCase() ) || $( element ).data( "msg" );
+		},
+
+		// return the custom message for the given element name and validation method
+		customMessage: function( name, method ) {
+			var m = this.settings.messages[ name ];
+			return m && ( m.constructor === String ? m : m[ method ]);
+		},
+
+		// return the first defined argument, allowing empty strings
+		findDefined: function() {
+			for ( var i = 0; i < arguments.length; i++) {
+				if ( arguments[ i ] !== undefined ) {
+					return arguments[ i ];
+				}
+			}
+			return undefined;
+		},
+
+		defaultMessage: function( element, method ) {
+			return this.findDefined(
+				this.customMessage( element.name, method ),
+				this.customDataMessage( element, method ),
+				// title is never undefined, so handle empty string as undefined
+				!this.settings.ignoreTitle && element.title || undefined,
+				$.validator.messages[ method ],
+				"<strong>Warning: No message defined for " + element.name + "</strong>"
+			);
+		},
+
+		formatAndAdd: function( element, rule ) {
+			var message = this.defaultMessage( element, rule.method ),
+				theregex = /\$?\{(\d+)\}/g;
+			if ( typeof message === "function" ) {
+				message = message.call( this, rule.parameters, element );
+			} else if ( theregex.test( message ) ) {
+				message = $.validator.format( message.replace( theregex, "{$1}" ), rule.parameters );
+			}
+			this.errorList.push({
+				message: message,
+				element: element,
+				method: rule.method
+			});
+
+			this.errorMap[ element.name ] = message;
+			this.submitted[ element.name ] = message;
+		},
+
+		addWrapper: function( toToggle ) {
+			if ( this.settings.wrapper ) {
+				toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
+			}
+			return toToggle;
+		},
+
+		defaultShowErrors: function() {
+			var i, elements, error;
+			for ( i = 0; this.errorList[ i ]; i++ ) {
+				error = this.errorList[ i ];
+				if ( this.settings.highlight ) {
+					this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
+				}
+				this.showLabel( error.element, error.message );
+			}
+			if ( this.errorList.length ) {
+				this.toShow = this.toShow.add( this.containers );
+			}
+			if ( this.settings.success ) {
+				for ( i = 0; this.successList[ i ]; i++ ) {
+					this.showLabel( this.successList[ i ] );
+				}
+			}
+			if ( this.settings.unhighlight ) {
+				for ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {
+					this.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );
+				}
+			}
+			this.toHide = this.toHide.not( this.toShow );
+			this.hideErrors();
+			this.addWrapper( this.toShow ).show();
+		},
+
+		validElements: function() {
+			return this.currentElements.not( this.invalidElements() );
+		},
+
+		invalidElements: function() {
+			return $( this.errorList ).map(function() {
+				return this.element;
+			});
+		},
+
+		showLabel: function( element, message ) {
+			var place, group, errorID,
+				error = this.errorsFor( element ),
+				elementID = this.idOrName( element ),
+				describedBy = $( element ).attr( "aria-describedby" );
+			if ( error.length ) {
+				// refresh error/success class
+				error.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );
+				// replace message on existing label
+				error.html( message );
+			} else {
+				// create error element
+				error = $( "<" + this.settings.errorElement + ">" )
+					.attr( "id", elementID + "-error" )
+					.addClass( this.settings.errorClass )
+					.html( message || "" );
+
+				// Maintain reference to the element to be placed into the DOM
+				place = error;
+				if ( this.settings.wrapper ) {
+					// make sure the element is visible, even in IE
+					// actually showing the wrapped element is handled elsewhere
+					place = error.hide().show().wrap( "<" + this.settings.wrapper + "/>" ).parent();
+				}
+				if ( this.labelContainer.length ) {
+					this.labelContainer.append( place );
+				} else if ( this.settings.errorPlacement ) {
+					this.settings.errorPlacement( place, $( element ) );
+				} else {
+					place.insertAfter( element );
+				}
+
+				// Link error back to the element
+				if ( error.is( "label" ) ) {
+					// If the error is a label, then associate using 'for'
+					error.attr( "for", elementID );
+				} else if ( error.parents( "label[for='" + elementID + "']" ).length === 0 ) {
+					// If the element is not a child of an associated label, then it's necessary
+					// to explicitly apply aria-describedby
+
+					errorID = error.attr( "id" ).replace( /(:|\.|\[|\]|\$)/g, "\\$1");
+					// Respect existing non-error aria-describedby
+					if ( !describedBy ) {
+						describedBy = errorID;
+					} else if ( !describedBy.match( new RegExp( "\\b" + errorID + "\\b" ) ) ) {
+						// Add to end of list if not already present
+						describedBy += " " + errorID;
+					}
+					$( element ).attr( "aria-describedby", describedBy );
+
+					// If this element is grouped, then assign to all elements in the same group
+					group = this.groups[ element.name ];
+					if ( group ) {
+						$.each( this.groups, function( name, testgroup ) {
+							if ( testgroup === group ) {
+								$( "[name='" + name + "']", this.currentForm )
+									.attr( "aria-describedby", error.attr( "id" ) );
+							}
+						});
+					}
+				}
+			}
+			if ( !message && this.settings.success ) {
+				error.text( "" );
+				if ( typeof this.settings.success === "string" ) {
+					error.addClass( this.settings.success );
+				} else {
+					this.settings.success( error, element );
+				}
+			}
+			this.toShow = this.toShow.add( error );
+		},
+
+		errorsFor: function( element ) {
+			var name = this.idOrName( element ),
+				describer = $( element ).attr( "aria-describedby" ),
+				selector = "label[for='" + name + "'], label[for='" + name + "'] *";
+
+			// aria-describedby should directly reference the error element
+			if ( describer ) {
+				selector = selector + ", #" + describer.replace( /\s+/g, ", #" );
+			}
+			return this
+				.errors()
+				.filter( selector );
+		},
+
+		idOrName: function( element ) {
+			return this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );
+		},
+
+		validationTargetFor: function( element ) {
+
+			// If radio/checkbox, validate first element in group instead
+			if ( this.checkable( element ) ) {
+				element = this.findByName( element.name );
+			}
+
+			// Always apply ignore filter
+			return $( element ).not( this.settings.ignore )[ 0 ];
+		},
+
+		checkable: function( element ) {
+			return ( /radio|checkbox/i ).test( element.type );
+		},
+
+		findByName: function( name ) {
+			return $( this.currentForm ).find( "[name='" + name + "']" );
+		},
+
+		getLength: function( value, element ) {
+			switch ( element.nodeName.toLowerCase() ) {
+			case "select":
+				return $( "option:selected", element ).length;
+			case "input":
+				if ( this.checkable( element ) ) {
+					return this.findByName( element.name ).filter( ":checked" ).length;
+				}
+			}
+			return value.length;
+		},
+
+		depend: function( param, element ) {
+			return this.dependTypes[typeof param] ? this.dependTypes[typeof param]( param, element ) : true;
+		},
+
+		dependTypes: {
+			"boolean": function( param ) {
+				return param;
+			},
+			"string": function( param, element ) {
+				return !!$( param, element.form ).length;
+			},
+			"function": function( param, element ) {
+				return param( element );
+			}
+		},
+
+		optional: function( element ) {
+			var val = this.elementValue( element );
+			return !$.validator.methods.required.call( this, val, element ) && "dependency-mismatch";
+		},
+
+		startRequest: function( element ) {
+			if ( !this.pending[ element.name ] ) {
+				this.pendingRequest++;
+				this.pending[ element.name ] = true;
+			}
+		},
+
+		stopRequest: function( element, valid ) {
+			this.pendingRequest--;
+			// sometimes synchronization fails, make sure pendingRequest is never < 0
+			if ( this.pendingRequest < 0 ) {
+				this.pendingRequest = 0;
+			}
+			delete this.pending[ element.name ];
+			if ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {
+				$( this.currentForm ).submit();
+				this.formSubmitted = false;
+			} else if (!valid && this.pendingRequest === 0 && this.formSubmitted ) {
+				$( this.currentForm ).triggerHandler( "invalid-form", [ this ]);
+				this.formSubmitted = false;
+			}
+		},
+
+		previousValue: function( element ) {
+			return $.data( element, "previousValue" ) || $.data( element, "previousValue", {
+				old: null,
+				valid: true,
+				message: this.defaultMessage( element, "remote" )
+			});
+		},
+
+		// cleans up all forms and elements, removes validator-specific events
+		destroy: function() {
+			this.resetForm();
+
+			$( this.currentForm )
+				.off( ".validate" )
+				.removeData( "validator" );
+		}
+
+	},
+
+	classRuleSettings: {
+		required: { required: true },
+		email: { email: true },
+		url: { url: true },
+		date: { date: true },
+		dateISO: { dateISO: true },
+		number: { number: true },
+		digits: { digits: true },
+		creditcard: { creditcard: true }
+	},
+
+	addClassRules: function( className, rules ) {
+		if ( className.constructor === String ) {
+			this.classRuleSettings[ className ] = rules;
+		} else {
+			$.extend( this.classRuleSettings, className );
+		}
+	},
+
+	classRules: function( element ) {
+		var rules = {},
+			classes = $( element ).attr( "class" );
+
+		if ( classes ) {
+			$.each( classes.split( " " ), function() {
+				if ( this in $.validator.classRuleSettings ) {
+					$.extend( rules, $.validator.classRuleSettings[ this ]);
+				}
+			});
+		}
+		return rules;
+	},
+
+	normalizeAttributeRule: function( rules, type, method, value ) {
+
+		// convert the value to a number for number inputs, and for text for backwards compability
+		// allows type="date" and others to be compared as strings
+		if ( /min|max/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {
+			value = Number( value );
+
+			// Support Opera Mini, which returns NaN for undefined minlength
+			if ( isNaN( value ) ) {
+				value = undefined;
+			}
+		}
+
+		if ( value || value === 0 ) {
+			rules[ method ] = value;
+		} else if ( type === method && type !== "range" ) {
+
+			// exception: the jquery validate 'range' method
+			// does not test for the html5 'range' type
+			rules[ method ] = true;
+		}
+	},
+
+	attributeRules: function( element ) {
+		var rules = {},
+			$element = $( element ),
+			type = element.getAttribute( "type" ),
+			method, value;
+
+		for ( method in $.validator.methods ) {
+
+			// support for <input required> in both html5 and older browsers
+			if ( method === "required" ) {
+				value = element.getAttribute( method );
+
+				// Some browsers return an empty string for the required attribute
+				// and non-HTML5 browsers might have required="" markup
+				if ( value === "" ) {
+					value = true;
+				}
+
+				// force non-HTML5 browsers to return bool
+				value = !!value;
+			} else {
+				value = $element.attr( method );
+			}
+
+			this.normalizeAttributeRule( rules, type, method, value );
+		}
+
+		// maxlength may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs
+		if ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {
+			delete rules.maxlength;
+		}
+
+		return rules;
+	},
+
+	dataRules: function( element ) {
+		var rules = {},
+			$element = $( element ),
+			type = element.getAttribute( "type" ),
+			method, value;
+
+		for ( method in $.validator.methods ) {
+			value = $element.data( "rule" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );
+			this.normalizeAttributeRule( rules, type, method, value );
+		}
+		return rules;
+	},
+
+	staticRules: function( element ) {
+		var rules = {},
+			validator = $.data( element.form, "validator" );
+
+		if ( validator.settings.rules ) {
+			rules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};
+		}
+		return rules;
+	},
+
+	normalizeRules: function( rules, element ) {
+		// handle dependency check
+		$.each( rules, function( prop, val ) {
+			// ignore rule when param is explicitly false, eg. required:false
+			if ( val === false ) {
+				delete rules[ prop ];
+				return;
+			}
+			if ( val.param || val.depends ) {
+				var keepRule = true;
+				switch ( typeof val.depends ) {
+				case "string":
+					keepRule = !!$( val.depends, element.form ).length;
+					break;
+				case "function":
+					keepRule = val.depends.call( element, element );
+					break;
+				}
+				if ( keepRule ) {
+					rules[ prop ] = val.param !== undefined ? val.param : true;
+				} else {
+					delete rules[ prop ];
+				}
+			}
+		});
+
+		// evaluate parameters
+		$.each( rules, function( rule, parameter ) {
+			rules[ rule ] = $.isFunction( parameter ) ? parameter( element ) : parameter;
+		});
+
+		// clean number parameters
+		$.each([ "minlength", "maxlength" ], function() {
+			if ( rules[ this ] ) {
+				rules[ this ] = Number( rules[ this ] );
+			}
+		});
+		$.each([ "rangelength", "range" ], function() {
+			var parts;
+			if ( rules[ this ] ) {
+				if ( $.isArray( rules[ this ] ) ) {
+					rules[ this ] = [ Number( rules[ this ][ 0 ]), Number( rules[ this ][ 1 ] ) ];
+				} else if ( typeof rules[ this ] === "string" ) {
+					parts = rules[ this ].replace(/[\[\]]/g, "" ).split( /[\s,]+/ );
+					rules[ this ] = [ Number( parts[ 0 ]), Number( parts[ 1 ] ) ];
+				}
+			}
+		});
+
+		if ( $.validator.autoCreateRanges ) {
+			// auto-create ranges
+			if ( rules.min != null && rules.max != null ) {
+				rules.range = [ rules.min, rules.max ];
+				delete rules.min;
+				delete rules.max;
+			}
+			if ( rules.minlength != null && rules.maxlength != null ) {
+				rules.rangelength = [ rules.minlength, rules.maxlength ];
+				delete rules.minlength;
+				delete rules.maxlength;
+			}
+		}
+
+		return rules;
+	},
+
+	// Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
+	normalizeRule: function( data ) {
+		if ( typeof data === "string" ) {
+			var transformed = {};
+			$.each( data.split( /\s/ ), function() {
+				transformed[ this ] = true;
+			});
+			data = transformed;
+		}
+		return data;
+	},
+
+	// http://jqueryvalidation.org/jQuery.validator.addMethod/
+	addMethod: function( name, method, message ) {
+		$.validator.methods[ name ] = method;
+		$.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];
+		if ( method.length < 3 ) {
+			$.validator.addClassRules( name, $.validator.normalizeRule( name ) );
+		}
+	},
+
+	methods: {
+
+		// http://jqueryvalidation.org/required-method/
+		required: function( value, element, param ) {
+			// check if dependency is met
+			if ( !this.depend( param, element ) ) {
+				return "dependency-mismatch";
+			}
+			if ( element.nodeName.toLowerCase() === "select" ) {
+				// could be an array for select-multiple or a string, both are fine this way
+				var val = $( element ).val();
+				return val && val.length > 0;
+			}
+			if ( this.checkable( element ) ) {
+				return this.getLength( value, element ) > 0;
+			}
+			return value.length > 0;
+		},
+
+		// http://jqueryvalidation.org/email-method/
+		email: function( value, element ) {
+			// From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address
+			// Retrieved 2014-01-14
+			// If you have a problem with this implementation, report a bug against the above spec
+			// Or use custom methods to implement your own email validation
+			return this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );
+		},
+
+		// http://jqueryvalidation.org/url-method/
+		url: function( value, element ) {
+
+			// Copyright (c) 2010-2013 Diego Perini, MIT licensed
+			// https://gist.github.com/dperini/729294
+			// see also https://mathiasbynens.be/demo/url-regex
+			// modified to allow protocol-relative URLs
+			return this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test( value );
+		},
+
+		// http://jqueryvalidation.org/date-method/
+		date: function( value, element ) {
+			return this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );
+		},
+
+		// http://jqueryvalidation.org/dateISO-method/
+		dateISO: function( value, element ) {
+			return this.optional( element ) || /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );
+		},
+
+		// http://jqueryvalidation.org/number-method/
+		number: function( value, element ) {
+			return this.optional( element ) || /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test( value );
+		},
+
+		// http://jqueryvalidation.org/digits-method/
+		digits: function( value, element ) {
+			return this.optional( element ) || /^\d+$/.test( value );
+		},
+
+		// http://jqueryvalidation.org/creditcard-method/
+		// based on http://en.wikipedia.org/wiki/Luhn_algorithm
+		creditcard: function( value, element ) {
+			if ( this.optional( element ) ) {
+				return "dependency-mismatch";
+			}
+			// accept only spaces, digits and dashes
+			if ( /[^0-9 \-]+/.test( value ) ) {
+				return false;
+			}
+			var nCheck = 0,
+				nDigit = 0,
+				bEven = false,
+				n, cDigit;
+
+			value = value.replace( /\D/g, "" );
+
+			// Basing min and max length on
+			// http://developer.ean.com/general_info/Valid_Credit_Card_Types
+			if ( value.length < 13 || value.length > 19 ) {
+				return false;
+			}
+
+			for ( n = value.length - 1; n >= 0; n--) {
+				cDigit = value.charAt( n );
+				nDigit = parseInt( cDigit, 10 );
+				if ( bEven ) {
+					if ( ( nDigit *= 2 ) > 9 ) {
+						nDigit -= 9;
+					}
+				}
+				nCheck += nDigit;
+				bEven = !bEven;
+			}
+
+			return ( nCheck % 10 ) === 0;
+		},
+
+		// http://jqueryvalidation.org/minlength-method/
+		minlength: function( value, element, param ) {
+			var length = $.isArray( value ) ? value.length : this.getLength( value, element );
+			return this.optional( element ) || length >= param;
+		},
+
+		// http://jqueryvalidation.org/maxlength-method/
+		maxlength: function( value, element, param ) {
+			var length = $.isArray( value ) ? value.length : this.getLength( value, element );
+			return this.optional( element ) || length <= param;
+		},
+
+		// http://jqueryvalidation.org/rangelength-method/
+		rangelength: function( value, element, param ) {
+			var length = $.isArray( value ) ? value.length : this.getLength( value, element );
+			return this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );
+		},
+
+		// http://jqueryvalidation.org/min-method/
+		min: function( value, element, param ) {
+			return this.optional( element ) || value >= param;
+		},
+
+		// http://jqueryvalidation.org/max-method/
+		max: function( value, element, param ) {
+			return this.optional( element ) || value <= param;
+		},
+
+		// http://jqueryvalidation.org/range-method/
+		range: function( value, element, param ) {
+			return this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );
+		},
+
+		// http://jqueryvalidation.org/equalTo-method/
+		equalTo: function( value, element, param ) {
+			// bind to the blur event of the target in order to revalidate whenever the target field is updated
+			// TODO find a way to bind the event just once, avoiding the unbind-rebind overhead
+			var target = $( param );
+			if ( this.settings.onfocusout ) {
+				target.off( ".validate-equalTo" ).on( "blur.validate-equalTo", function() {
+					$( element ).valid();
+				});
+			}
+			return value === target.val();
+		},
+
+		// http://jqueryvalidation.org/remote-method/
+		remote: function( value, element, param ) {
+			if ( this.optional( element ) ) {
+				return "dependency-mismatch";
+			}
+
+			var previous = this.previousValue( element ),
+				validator, data;
+
+			if (!this.settings.messages[ element.name ] ) {
+				this.settings.messages[ element.name ] = {};
+			}
+			previous.originalMessage = this.settings.messages[ element.name ].remote;
+			this.settings.messages[ element.name ].remote = previous.message;
+
+			param = typeof param === "string" && { url: param } || param;
+
+			if ( previous.old === value ) {
+				return previous.valid;
+			}
+
+			previous.old = value;
+			validator = this;
+			this.startRequest( element );
+			data = {};
+			data[ element.name ] = value;
+			$.ajax( $.extend( true, {
+				mode: "abort",
+				port: "validate" + element.name,
+				dataType: "json",
+				data: data,
+				context: validator.currentForm,
+				success: function( response ) {
+					var valid = response === true || response === "true",
+						errors, message, submitted;
+
+					validator.settings.messages[ element.name ].remote = previous.originalMessage;
+					if ( valid ) {
+						submitted = validator.formSubmitted;
+						validator.prepareElement( element );
+						validator.formSubmitted = submitted;
+						validator.successList.push( element );
+						delete validator.invalid[ element.name ];
+						validator.showErrors();
+					} else {
+						errors = {};
+						message = response || validator.defaultMessage( element, "remote" );
+						errors[ element.name ] = previous.message = $.isFunction( message ) ? message( value ) : message;
+						validator.invalid[ element.name ] = true;
+						validator.showErrors( errors );
+					}
+					previous.valid = valid;
+					validator.stopRequest( element, valid );
+				}
+			}, param ) );
+			return "pending";
+		}
+	}
+
+});
+
+// ajax mode: abort
+// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
+// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()
+
+var pendingRequests = {},
+	ajax;
+// Use a prefilter if available (1.5+)
+if ( $.ajaxPrefilter ) {
+	$.ajaxPrefilter(function( settings, _, xhr ) {
+		var port = settings.port;
+		if ( settings.mode === "abort" ) {
+			if ( pendingRequests[port] ) {
+				pendingRequests[port].abort();
+			}
+			pendingRequests[port] = xhr;
+		}
+	});
+} else {
+	// Proxy ajax
+	ajax = $.ajax;
+	$.ajax = function( settings ) {
+		var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode,
+			port = ( "port" in settings ? settings : $.ajaxSettings ).port;
+		if ( mode === "abort" ) {
+			if ( pendingRequests[port] ) {
+				pendingRequests[port].abort();
+			}
+			pendingRequests[port] = ajax.apply(this, arguments);
+			return pendingRequests[port];
+		}
+		return ajax.apply(this, arguments);
+	};
+}
+
+}));
\ No newline at end of file
diff --git a/public/bower_components/jquery.actual/jquery.actual.js b/public/bower_components/jquery.actual/jquery.actual.js
new file mode 100644
index 0000000..a4455d5
--- /dev/null
+++ b/public/bower_components/jquery.actual/jquery.actual.js
@@ -0,0 +1,107 @@
+/*! Copyright 2012, Ben Lin (http://dreamerslab.com/)
+ * Licensed under the MIT License (LICENSE.txt).
+ *
+ * Version: 1.0.16
+ *
+ * Requires: jQuery >= 1.2.3
+ */
+;( function ( factory ) {
+if ( typeof define === 'function' && define.amd ) {
+    // AMD. Register module depending on jQuery using requirejs define.
+    define( ['jquery'], factory );
+} else {
+    // No AMD.
+    factory( jQuery );
+}
+}( function ( $ ){
+  $.fn.addBack = $.fn.addBack || $.fn.andSelf;
+
+  $.fn.extend({
+
+    actual : function ( method, options ){
+      // check if the jQuery method exist
+      if( !this[ method ]){
+        throw '$.actual => The jQuery method "' + method + '" you called does not exist';
+      }
+
+      var defaults = {
+        absolute      : false,
+        clone         : false,
+        includeMargin : false,
+        display       : 'block'
+      };
+
+      var configs = $.extend( defaults, options );
+
+      var $target = this.eq( 0 );
+      var fix, restore;
+
+      if( configs.clone === true ){
+        fix = function (){
+          var style = 'position: absolute !important; top: -1000 !important; ';
+
+          // this is useful with css3pie
+          $target = $target.
+            clone().
+            attr( 'style', style ).
+            appendTo( 'body' );
+        };
+
+        restore = function (){
+          // remove DOM element after getting the width
+          $target.remove();
+        };
+      }else{
+        var tmp   = [];
+        var style = '';
+        var $hidden;
+
+        fix = function (){
+          // get all hidden parents
+          $hidden = $target.parents().addBack().filter( ':hidden' );
+          style   += 'visibility: hidden !important; display: ' + configs.display + ' !important; ';
+
+          if( configs.absolute === true ) style += 'position: absolute !important; ';
+
+          // save the origin style props
+          // set the hidden el css to be got the actual value later
+          $hidden.each( function (){
+            // Save original style. If no style was set, attr() returns undefined
+            var $this     = $( this );
+            var thisStyle = $this.attr( 'style' );
+
+            tmp.push( thisStyle );
+            // Retain as much of the original style as possible, if there is one
+            $this.attr( 'style', thisStyle ? thisStyle + ';' + style : style );
+          });
+        };
+
+        restore = function (){
+          // restore origin style values
+          $hidden.each( function ( i ){
+            var $this = $( this );
+            var _tmp  = tmp[ i ];
+
+            if( _tmp === undefined ){
+              $this.removeAttr( 'style' );
+            }else{
+              $this.attr( 'style', _tmp );
+            }
+          });
+        };
+      }
+
+      fix();
+      // get the actual value with user specific methed
+      // it can be 'width', 'height', 'outerWidth', 'innerWidth'... etc
+      // configs.includeMargin only works for 'outerWidth' and 'outerHeight'
+      var actual = /(outer)/.test( method ) ?
+        $target[ method ]( configs.includeMargin ) :
+        $target[ method ]();
+
+      restore();
+      // IMPORTANT, this plugin only return the value of the first element
+      return actual;
+    }
+  });
+}));
diff --git a/public/bower_components/jquery/jquery.js b/public/bower_components/jquery/jquery.js
new file mode 100644
index 0000000..eed1777
--- /dev/null
+++ b/public/bower_components/jquery/jquery.js
@@ -0,0 +1,9210 @@
+/*!
+ * jQuery JavaScript Library v2.1.4
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2015-04-28T16:01Z
+ */
+
+(function( global, factory ) {
+
+	if ( typeof module === "object" && typeof module.exports === "object" ) {
+		// For CommonJS and CommonJS-like environments where a proper `window`
+		// is present, execute the factory and get jQuery.
+		// For environments that do not have a `window` with a `document`
+		// (such as Node.js), expose a factory as module.exports.
+		// This accentuates the need for the creation of a real `window`.
+		// e.g. var jQuery = require("jquery")(window);
+		// See ticket #14549 for more info.
+		module.exports = global.document ?
+			factory( global, true ) :
+			function( w ) {
+				if ( !w.document ) {
+					throw new Error( "jQuery requires a window with a document" );
+				}
+				return factory( w );
+			};
+	} else {
+		factory( global );
+	}
+
+// Pass this if window is not defined yet
+}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Support: Firefox 18+
+// Can't be in strict mode, several libs including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+//
+
+var arr = [];
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var support = {};
+
+
+
+var
+	// Use the correct document accordingly with window argument (sandbox)
+	document = window.document,
+
+	version = "2.1.4",
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+		// The jQuery object is actually just the init constructor 'enhanced'
+		// Need init if jQuery is called (just allow error to be thrown if not included)
+		return new jQuery.fn.init( selector, context );
+	},
+
+	// Support: Android<4.1
+	// Make sure we trim BOM and NBSP
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+	// Matches dashed string for camelizing
+	rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([\da-z])/gi,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	};
+
+jQuery.fn = jQuery.prototype = {
+	// The current version of jQuery being used
+	jquery: version,
+
+	constructor: jQuery,
+
+	// Start with an empty selector
+	selector: "",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	toArray: function() {
+		return slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num != null ?
+
+			// Return just the one element from the set
+			( num < 0 ? this[ num + this.length ] : this[ num ] ) :
+
+			// Return all the elements in a clean array
+			slice.call( this );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+		ret.context = this.context;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	// (You can seed the arguments with an array of args, but this is
+	// only used internally.)
+	each: function( callback, args ) {
+		return jQuery.each( this, callback, args );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		}));
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor(null);
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: arr.sort,
+	splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[0] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+
+		// Skip the boolean and the target
+		target = arguments[ i ] || {};
+		i++;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+		target = {};
+	}
+
+	// Extend jQuery itself if only one argument is passed
+	if ( i === length ) {
+		target = this;
+		i--;
+	}
+
+	for ( ; i < length; i++ ) {
+		// Only deal with non-null/undefined values
+		if ( (options = arguments[ i ]) != null ) {
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray(src) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject(src) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend({
+	// Unique for each copy of jQuery on the page
+	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+	// Assume jQuery is ready without the ready module
+	isReady: true,
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	noop: function() {},
+
+	isFunction: function( obj ) {
+		return jQuery.type(obj) === "function";
+	},
+
+	isArray: Array.isArray,
+
+	isWindow: function( obj ) {
+		return obj != null && obj === obj.window;
+	},
+
+	isNumeric: function( obj ) {
+		// parseFloat NaNs numeric-cast false positives (null|true|false|"")
+		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+		// subtraction forces infinities to NaN
+		// adding 1 corrects loss of precision from parseFloat (#15100)
+		return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
+	},
+
+	isPlainObject: function( obj ) {
+		// Not plain objects:
+		// - Any object or value whose internal [[Class]] property is not "[object Object]"
+		// - DOM nodes
+		// - window
+		if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		if ( obj.constructor &&
+				!hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
+			return false;
+		}
+
+		// If the function hasn't returned already, we're confident that
+		// |obj| is a plain object, created by {} or constructed with new Object
+		return true;
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	type: function( obj ) {
+		if ( obj == null ) {
+			return obj + "";
+		}
+		// Support: Android<4.0, iOS<6 (functionish RegExp)
+		return typeof obj === "object" || typeof obj === "function" ?
+			class2type[ toString.call(obj) ] || "object" :
+			typeof obj;
+	},
+
+	// Evaluates a script in a global context
+	globalEval: function( code ) {
+		var script,
+			indirect = eval;
+
+		code = jQuery.trim( code );
+
+		if ( code ) {
+			// If the code includes a valid, prologue position
+			// strict mode pragma, execute code by injecting a
+			// script tag into the document.
+			if ( code.indexOf("use strict") === 1 ) {
+				script = document.createElement("script");
+				script.text = code;
+				document.head.appendChild( script ).parentNode.removeChild( script );
+			} else {
+			// Otherwise, avoid the DOM node creation, insertion
+			// and removal by using an indirect global eval
+				indirect( code );
+			}
+		}
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Support: IE9-11+
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+	},
+
+	// args is for internal usage only
+	each: function( obj, callback, args ) {
+		var value,
+			i = 0,
+			length = obj.length,
+			isArray = isArraylike( obj );
+
+		if ( args ) {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+
+		// A special, fast, case for the most common use of each
+		} else {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Support: Android<4.1
+	trim: function( text ) {
+		return text == null ?
+			"" :
+			( text + "" ).replace( rtrim, "" );
+	},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArraylike( Object(arr) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		return arr == null ? -1 : indexOf.call( arr, elem, i );
+	},
+
+	merge: function( first, second ) {
+		var len = +second.length,
+			j = 0,
+			i = first.length;
+
+		for ( ; j < len; j++ ) {
+			first[ i++ ] = second[ j ];
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, invert ) {
+		var callbackInverse,
+			matches = [],
+			i = 0,
+			length = elems.length,
+			callbackExpect = !invert;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			callbackInverse = !callback( elems[ i ], i );
+			if ( callbackInverse !== callbackExpect ) {
+				matches.push( elems[ i ] );
+			}
+		}
+
+		return matches;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var value,
+			i = 0,
+			length = elems.length,
+			isArray = isArraylike( elems ),
+			ret = [];
+
+		// Go through the array, translating each of the items to their new values
+		if ( isArray ) {
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		var tmp, args, proxy;
+
+		if ( typeof context === "string" ) {
+			tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		args = slice.call( arguments, 2 );
+		proxy = function() {
+			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+		};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	now: Date.now,
+
+	// jQuery.support is not used in Core but other projects attach their
+	// properties to it so it needs to exist.
+	support: support
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+function isArraylike( obj ) {
+
+	// Support: iOS 8.2 (not reproducible in simulator)
+	// `in` check used to prevent JIT error (gh-2145)
+	// hasOwn isn't used here due to false negatives
+	// regarding Nodelist length in IE
+	var length = "length" in obj && obj.length,
+		type = jQuery.type( obj );
+
+	if ( type === "function" || jQuery.isWindow( obj ) ) {
+		return false;
+	}
+
+	if ( obj.nodeType === 1 && length ) {
+		return true;
+	}
+
+	return type === "array" || length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.2.0-pre
+ * http://sizzlejs.com/
+ *
+ * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2014-12-16
+ */
+(function( window ) {
+
+var i,
+	support,
+	Expr,
+	getText,
+	isXML,
+	tokenize,
+	compile,
+	select,
+	outermostContext,
+	sortInput,
+	hasDuplicate,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsHTML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+
+	// Instance-specific data
+	expando = "sizzle" + 1 * new Date(),
+	preferredDoc = window.document,
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+		}
+		return 0;
+	},
+
+	// General-purpose constants
+	MAX_NEGATIVE = 1 << 31,
+
+	// Instance methods
+	hasOwn = ({}).hasOwnProperty,
+	arr = [],
+	pop = arr.pop,
+	push_native = arr.push,
+	push = arr.push,
+	slice = arr.slice,
+	// Use a stripped-down indexOf as it's faster than native
+	// http://jsperf.com/thor-indexof-vs-for/5
+	indexOf = function( list, elem ) {
+		var i = 0,
+			len = list.length;
+		for ( ; i < len; i++ ) {
+			if ( list[i] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+	// Regular expressions
+
+	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+	// http://www.w3.org/TR/css3-syntax/#characters
+	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+	// Loosely modeled on CSS identifier characters
+	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+	identifier = characterEncoding.replace( "w", "w#" ),
+
+	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
+		// Operator (capture 2)
+		"*([*^$|!~]?=)" + whitespace +
+		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+		"*\\]",
+
+	pseudos = ":(" + characterEncoding + ")(?:\\((" +
+		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+		// 1. quoted (capture 3; capture 4 or capture 5)
+		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+		// 2. simple (capture 6)
+		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+		// 3. anything else (capture 2)
+		".*" +
+		")\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rwhitespace = new RegExp( whitespace + "+", "g" ),
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
+		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rnative = /^[^{]+\{\s*\[native \w/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rsibling = /[+~]/,
+	rescape = /'|\\/g,
+
+	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+	funescape = function( _, escaped, escapedWhitespace ) {
+		var high = "0x" + escaped - 0x10000;
+		// NaN means non-codepoint
+		// Support: Firefox<24
+		// Workaround erroneous numeric interpretation of +"0x"
+		return high !== high || escapedWhitespace ?
+			escaped :
+			high < 0 ?
+				// BMP codepoint
+				String.fromCharCode( high + 0x10000 ) :
+				// Supplemental Plane codepoint (surrogate pair)
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	},
+
+	// Used for iframes
+	// See setDocument()
+	// Removing the function wrapper causes a "Permission Denied"
+	// error in IE
+	unloadHandler = function() {
+		setDocument();
+	};
+
+// Optimize for push.apply( _, NodeList )
+try {
+	push.apply(
+		(arr = slice.call( preferredDoc.childNodes )),
+		preferredDoc.childNodes
+	);
+	// Support: Android<4.0
+	// Detect silently failing push.apply
+	arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+	push = { apply: arr.length ?
+
+		// Leverage slice if possible
+		function( target, els ) {
+			push_native.apply( target, slice.call(els) );
+		} :
+
+		// Support: IE<9
+		// Otherwise append directly
+		function( target, els ) {
+			var j = target.length,
+				i = 0;
+			// Can't trust NodeList.length
+			while ( (target[j++] = els[i++]) ) {}
+			target.length = j - 1;
+		}
+	};
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var match, elem, m, nodeType,
+		// QSA vars
+		i, groups, old, nid, newContext, newSelector;
+
+	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+		setDocument( context );
+	}
+
+	context = context || document;
+	results = results || [];
+	nodeType = context.nodeType;
+
+	if ( typeof selector !== "string" || !selector ||
+		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+		return results;
+	}
+
+	if ( !seed && documentIsHTML ) {
+
+		// Try to shortcut find operations when possible (e.g., not under DocumentFragment)
+		if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+			// Speed-up: Sizzle("#ID")
+			if ( (m = match[1]) ) {
+				if ( nodeType === 9 ) {
+					elem = context.getElementById( m );
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document (jQuery #6963)
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE, Opera, and Webkit return items
+						// by name instead of ID
+						if ( elem.id === m ) {
+							results.push( elem );
+							return results;
+						}
+					} else {
+						return results;
+					}
+				} else {
+					// Context is not a document
+					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+						contains( context, elem ) && elem.id === m ) {
+						results.push( elem );
+						return results;
+					}
+				}
+
+			// Speed-up: Sizzle("TAG")
+			} else if ( match[2] ) {
+				push.apply( results, context.getElementsByTagName( selector ) );
+				return results;
+
+			// Speed-up: Sizzle(".CLASS")
+			} else if ( (m = match[3]) && support.getElementsByClassName ) {
+				push.apply( results, context.getElementsByClassName( m ) );
+				return results;
+			}
+		}
+
+		// QSA path
+		if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+			nid = old = expando;
+			newContext = context;
+			newSelector = nodeType !== 1 && selector;
+
+			// qSA works strangely on Element-rooted queries
+			// We can work around this by specifying an extra ID on the root
+			// and working up from there (Thanks to Andrew Dupont for the technique)
+			// IE 8 doesn't work on object elements
+			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+				groups = tokenize( selector );
+
+				if ( (old = context.getAttribute("id")) ) {
+					nid = old.replace( rescape, "\\$&" );
+				} else {
+					context.setAttribute( "id", nid );
+				}
+				nid = "[id='" + nid + "'] ";
+
+				i = groups.length;
+				while ( i-- ) {
+					groups[i] = nid + toSelector( groups[i] );
+				}
+				newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
+				newSelector = groups.join(",");
+			}
+
+			if ( newSelector ) {
+				try {
+					push.apply( results,
+						newContext.querySelectorAll( newSelector )
+					);
+					return results;
+				} catch(qsaError) {
+				} finally {
+					if ( !old ) {
+						context.removeAttribute("id");
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var keys = [];
+
+	function cache( key, value ) {
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key + " " ) > Expr.cacheLength ) {
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return (cache[ key + " " ] = value);
+	}
+	return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+	var div = document.createElement("div");
+
+	try {
+		return !!fn( div );
+	} catch (e) {
+		return false;
+	} finally {
+		// Remove from its parent by default
+		if ( div.parentNode ) {
+			div.parentNode.removeChild( div );
+		}
+		// release memory in IE
+		div = null;
+	}
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+	var arr = attrs.split("|"),
+		i = attrs.length;
+
+	while ( i-- ) {
+		Expr.attrHandle[ arr[i] ] = handler;
+	}
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+			( ~b.sourceIndex || MAX_NEGATIVE ) -
+			( ~a.sourceIndex || MAX_NEGATIVE );
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( (cur = cur.nextSibling) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return (name === "input" || name === "button") && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+	return markFunction(function( argument ) {
+		argument = +argument;
+		return markFunction(function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ (j = matchIndexes[i]) ] ) {
+					seed[j] = !(matches[j] = seed[j]);
+				}
+			}
+		});
+	});
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+	return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833)
+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var hasCompare, parent,
+		doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// If no document and documentElement is available, return
+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Set our document
+	document = doc;
+	docElem = doc.documentElement;
+	parent = doc.defaultView;
+
+	// Support: IE>8
+	// If iframe document is assigned to "document" variable and if iframe has been reloaded,
+	// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
+	// IE6-8 do not support the defaultView property so parent will be undefined
+	if ( parent && parent !== parent.top ) {
+		// IE11 does not have attachEvent, so all must suffer
+		if ( parent.addEventListener ) {
+			parent.addEventListener( "unload", unloadHandler, false );
+		} else if ( parent.attachEvent ) {
+			parent.attachEvent( "onunload", unloadHandler );
+		}
+	}
+
+	/* Support tests
+	---------------------------------------------------------------------- */
+	documentIsHTML = !isXML( doc );
+
+	/* Attributes
+	---------------------------------------------------------------------- */
+
+	// Support: IE<8
+	// Verify that getAttribute really returns attributes and not properties
+	// (excepting IE8 booleans)
+	support.attributes = assert(function( div ) {
+		div.className = "i";
+		return !div.getAttribute("className");
+	});
+
+	/* getElement(s)By*
+	---------------------------------------------------------------------- */
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.getElementsByTagName = assert(function( div ) {
+		div.appendChild( doc.createComment("") );
+		return !div.getElementsByTagName("*").length;
+	});
+
+	// Support: IE<9
+	support.getElementsByClassName = rnative.test( doc.getElementsByClassName );
+
+	// Support: IE<10
+	// Check if getElementById returns elements by name
+	// The broken getElementById methods don't pick up programatically-set names,
+	// so use a roundabout getElementsByName test
+	support.getById = assert(function( div ) {
+		docElem.appendChild( div ).id = expando;
+		return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
+	});
+
+	// ID find and filter
+	if ( support.getById ) {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var m = context.getElementById( id );
+				// Check parentNode to catch when Blackberry 4.6 returns
+				// nodes that are no longer in the document #6963
+				return m && m.parentNode ? [ m ] : [];
+			}
+		};
+		Expr.filter["ID"] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute("id") === attrId;
+			};
+		};
+	} else {
+		// Support: IE6/7
+		// getElementById is not reliable as a find shortcut
+		delete Expr.find["ID"];
+
+		Expr.filter["ID"] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+				return node && node.value === attrId;
+			};
+		};
+	}
+
+	// Tag
+	Expr.find["TAG"] = support.getElementsByTagName ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( tag );
+
+			// DocumentFragment nodes don't have gEBTN
+			} else if ( support.qsa ) {
+				return context.querySelectorAll( tag );
+			}
+		} :
+
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( (elem = results[i++]) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Class
+	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+		if ( documentIsHTML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	/* QSA/matchesSelector
+	---------------------------------------------------------------------- */
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21)
+	// We allow this because of a bug in IE8/9 that throws an error
+	// whenever `document.activeElement` is accessed on an iframe
+	// So, we allow :focus to pass through QSA all the time to avoid the IE error
+	// See http://bugs.jquery.com/ticket/13378
+	rbuggyQSA = [];
+
+	if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert(function( div ) {
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explicitly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// http://bugs.jquery.com/ticket/12359
+			docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
+				"<select id='" + expando + "-\f]' msallowcapture=''>" +
+				"<option selected=''></option></select>";
+
+			// Support: IE8, Opera 11-12.16
+			// Nothing should be selected when empty strings follow ^= or $= or *=
+			// The test attribute must be unknown in Opera but "safe" for WinRT
+			// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+			if ( div.querySelectorAll("[msallowcapture^='']").length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+			}
+
+			// Support: IE8
+			// Boolean attributes and "value" are not treated correctly
+			if ( !div.querySelectorAll("[selected]").length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+			}
+
+			// Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+
+			if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+				rbuggyQSA.push("~=");
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":checked").length ) {
+				rbuggyQSA.push(":checked");
+			}
+
+			// Support: Safari 8+, iOS 8+
+			// https://bugs.webkit.org/show_bug.cgi?id=136851
+			// In-page `selector#id sibing-combinator selector` fails
+			if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
+				rbuggyQSA.push(".#.+[+~]");
+			}
+		});
+
+		assert(function( div ) {
+			// Support: Windows 8 Native Apps
+			// The type and name attributes are restricted during .innerHTML assignment
+			var input = doc.createElement("input");
+			input.setAttribute( "type", "hidden" );
+			div.appendChild( input ).setAttribute( "name", "D" );
+
+			// Support: IE8
+			// Enforce case-sensitivity of name attribute
+			if ( div.querySelectorAll("[name=d]").length ) {
+				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":enabled").length ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			div.querySelectorAll("*,:x");
+			rbuggyQSA.push(",.*:");
+		});
+	}
+
+	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+		docElem.webkitMatchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector) )) ) {
+
+		assert(function( div ) {
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( div, "div" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( div, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		});
+	}
+
+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+	/* Contains
+	---------------------------------------------------------------------- */
+	hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+	// Element contains another
+	// Purposefully does not implement inclusive descendent
+	// As in, an element does not contain itself
+	contains = hasCompare || rnative.test( docElem.contains ) ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			));
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( (b = b.parentNode) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	/* Sorting
+	---------------------------------------------------------------------- */
+
+	// Document order sorting
+	sortOrder = hasCompare ?
+	function( a, b ) {
+
+		// Flag for duplicate removal
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		// Sort on method existence if only one input has compareDocumentPosition
+		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+		if ( compare ) {
+			return compare;
+		}
+
+		// Calculate position if both inputs belong to the same document
+		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+			a.compareDocumentPosition( b ) :
+
+			// Otherwise we know they are disconnected
+			1;
+
+		// Disconnected nodes
+		if ( compare & 1 ||
+			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+			// Choose the first element that is related to our preferred document
+			if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+				return -1;
+			}
+			if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+				return 1;
+			}
+
+			// Maintain original order
+			return sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+		}
+
+		return compare & 4 ? -1 : 1;
+	} :
+	function( a, b ) {
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Parentless nodes are either documents or disconnected
+		if ( !aup || !bup ) {
+			return a === doc ? -1 :
+				b === doc ? 1 :
+				aup ? -1 :
+				bup ? 1 :
+				sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( (cur = cur.parentNode) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( (cur = cur.parentNode) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[i] === bp[i] ) {
+			i++;
+		}
+
+		return i ?
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[i], bp[i] ) :
+
+			// Otherwise nodes in our document sort first
+			ap[i] === preferredDoc ? -1 :
+			bp[i] === preferredDoc ? 1 :
+			0;
+	};
+
+	return doc;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	// Make sure that attribute selectors are quoted
+	expr = expr.replace( rattributeQuotes, "='$1']" );
+
+	if ( support.matchesSelector && documentIsHTML &&
+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+					// As well, disconnected nodes are said to be in a document
+					// fragment in IE 9
+					elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch (e) {}
+	}
+
+	return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+	// Set document vars if needed
+	if ( ( context.ownerDocument || context ) !== document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	var fn = Expr.attrHandle[ name.toLowerCase() ],
+		// Don't get fooled by Object.prototype properties (jQuery #13807)
+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+			fn( elem, name, !documentIsHTML ) :
+			undefined;
+
+	return val !== undefined ?
+		val :
+		support.attributes || !documentIsHTML ?
+			elem.getAttribute( name ) :
+			(val = elem.getAttributeNode(name)) && val.specified ?
+				val.value :
+				null;
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		j = 0,
+		i = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	sortInput = !support.sortStable && results.slice( 0 );
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		while ( (elem = results[i++]) ) {
+			if ( elem === results[ i ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	// Clear input after sorting to release objects
+	// See https://github.com/jquery/sizzle/pull/225
+	sortInput = null;
+
+	return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+		// If no nodeType, this is expected to be an array
+		while ( (node = elem[i++]) ) {
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (jQuery #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	attrHandle: {},
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[1] = match[1].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+			if ( match[2] === "~=" ) {
+				match[3] = " " + match[3] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[1] = match[1].toLowerCase();
+
+			if ( match[1].slice( 0, 3 ) === "nth" ) {
+				// nth-* requires argument
+				if ( !match[3] ) {
+					Sizzle.error( match[0] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+			// other types prohibit arguments
+			} else if ( match[3] ) {
+				Sizzle.error( match[0] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[6] && match[2];
+
+			if ( matchExpr["CHILD"].test( match[0] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[3] ) {
+				match[2] = match[4] || match[5] || "";
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+				// Get excess from tokenize (recursively)
+				(excess = tokenize( unquoted, true )) &&
+				// advance to the next closing parenthesis
+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+				// excess is a negative index
+				match[0] = match[0].slice( 0, excess );
+				match[2] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeNameSelector ) {
+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+			return nodeNameSelector === "*" ?
+				function() { return true; } :
+				function( elem ) {
+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+				};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+				classCache( className, function( elem ) {
+					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+				});
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+			};
+		},
+
+		"CHILD": function( type, what, argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, context, xml ) {
+					var cache, outerCache, node, diff, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( (node = node[ dir ]) ) {
+									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
+										return false;
+									}
+								}
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+							// Seek `elem` from a previously-cached index
+							outerCache = parent[ expando ] || (parent[ expando ] = {});
+							cache = outerCache[ type ] || [];
+							nodeIndex = cache[0] === dirruns && cache[1];
+							diff = cache[0] === dirruns && cache[2];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						// Use previously-cached element index if available
+						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+							diff = cache[1];
+
+						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+						} else {
+							// Use the same loop as above to seek `elem` from the start
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
+									// Cache the index of each encountered element
+									if ( useCache ) {
+										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
+									}
+
+									if ( node === elem ) {
+										break;
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction(function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf( seed, matched[i] );
+							seed[ idx ] = !( matches[ idx ] = matched[i] );
+						}
+					}) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+		// Potentially complex pseudos
+		"not": markFunction(function( selector ) {
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction(function( seed, matches, context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( (elem = unmatched[i]) ) {
+							seed[i] = !(matches[i] = elem);
+						}
+					}
+				}) :
+				function( elem, context, xml ) {
+					input[0] = elem;
+					matcher( input, null, xml, results );
+					// Don't keep the element (issue #299)
+					input[0] = null;
+					return !results.pop();
+				};
+		}),
+
+		"has": markFunction(function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		}),
+
+		"contains": markFunction(function( text ) {
+			text = text.replace( runescape, funescape );
+			return function( elem ) {
+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+			};
+		}),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+			// lang value must be a valid identifier
+			if ( !ridentifier.test(lang || "") ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( (elemLang = documentIsHTML ?
+						elem.lang :
+						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+				return false;
+			};
+		}),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+		},
+
+		// Boolean properties
+		"enabled": function( elem ) {
+			return elem.disabled === false;
+		},
+
+		"disabled": function( elem ) {
+			return elem.disabled === true;
+		},
+
+		"checked": function( elem ) {
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+		},
+
+		"selected": function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+			//   but not by others (comment: 8; processing instruction: 7; etc.)
+			// nodeType < 6 works because attributes (2) do not appear as children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeType < 6 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos["empty"]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+
+				// Support: IE<8
+				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo(function() {
+			return [ 0 ];
+		}),
+
+		"last": createPositionalPseudo(function( matchIndexes, length ) {
+			return [ length - 1 ];
+		}),
+
+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		}),
+
+		"even": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		})
+	}
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || (match = rcomma.exec( soFar )) ) {
+			if ( match ) {
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[0].length ) || soFar;
+			}
+			groups.push( (tokens = []) );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( (match = rcombinators.exec( soFar )) ) {
+			matched = match.shift();
+			tokens.push({
+				value: matched,
+				// Cast descendant combinators to space
+				type: match[0].replace( rtrim, " " )
+			});
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+				(match = preFilters[ type ]( match ))) ) {
+				matched = match.shift();
+				tokens.push({
+					value: matched,
+					type: type,
+					matches: match
+				});
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[i].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		checkNonElements = base && dir === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( (elem = elem[ dir ]) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var oldCache, outerCache,
+				newCache = [ dirruns, doneName ];
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+			if ( xml ) {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || (elem[ expando ] = {});
+						if ( (oldCache = outerCache[ dir ]) &&
+							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+							// Assign to newCache so results back-propagate to previous elements
+							return (newCache[ 2 ] = oldCache[ 2 ]);
+						} else {
+							// Reuse newcache so results back-propagate to previous elements
+							outerCache[ dir ] = newCache;
+
+							// A match means we're done; a fail means we have to keep checking
+							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[i]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[i], results );
+	}
+	return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( (elem = unmatched[i]) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction(function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( (elem = temp[i]) ) {
+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( (elem = matcherOut[i]) ) {
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( (matcherIn[i] = elem) );
+						}
+					}
+					postFinder( null, (matcherOut = []), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( (elem = matcherOut[i]) &&
+						(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+
+						seed[temp] = !(results[temp] = elem);
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	});
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[0].type ],
+		implicitRelative = leadingRelative || Expr.relative[" "],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				(checkContext = context).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+			// Avoid hanging onto element (issue #299)
+			checkContext = null;
+			return ret;
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+		} else {
+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[j].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector(
+						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
+						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+					).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	var bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, outermost ) {
+			var elem, j, matcher,
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				setMatched = [],
+				contextBackup = outermostContext,
+				// We must always have either seed elements or outermost context
+				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+				len = elems.length;
+
+			if ( outermost ) {
+				outermostContext = context !== document && context;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+			// Support: IE<9, Safari
+			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+					while ( (matcher = elementMatchers[j++]) ) {
+						if ( matcher( elem, context, xml ) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+					// They will have gone through all possible matchers
+					if ( (elem = !matcher && elem) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// Apply set filters to unmatched elements
+			matchedCount += i;
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( (matcher = setMatchers[j++]) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !(unmatched[i] || setMatched[i]) ) {
+								setMatched[i] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !match ) {
+			match = tokenize( selector );
+		}
+		i = match.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( match[i] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+		// Save selector and tokenization
+		cached.selector = selector;
+	}
+	return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		compiled = typeof selector === "function" && selector,
+		match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+	results = results || [];
+
+	// Try to minimize operations if there is no seed and only one group
+	if ( match.length === 1 ) {
+
+		// Take a shortcut and set the context if the root selector is an ID
+		tokens = match[0] = match[0].slice( 0 );
+		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+				support.getById && context.nodeType === 9 && documentIsHTML &&
+				Expr.relative[ tokens[1].type ] ) {
+
+			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+			if ( !context ) {
+				return results;
+
+			// Precompiled matchers will still verify ancestry, so step up a level
+			} else if ( compiled ) {
+				context = context.parentNode;
+			}
+
+			selector = selector.slice( tokens.shift().value.length );
+		}
+
+		// Fetch a seed set for right-to-left matching
+		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+		while ( i-- ) {
+			token = tokens[i];
+
+			// Abort if we hit a combinator
+			if ( Expr.relative[ (type = token.type) ] ) {
+				break;
+			}
+			if ( (find = Expr.find[ type ]) ) {
+				// Search, expanding context for leading sibling combinators
+				if ( (seed = find(
+					token.matches[0].replace( runescape, funescape ),
+					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+				)) ) {
+
+					// If seed is empty or no tokens remain, we can return early
+					tokens.splice( i, 1 );
+					selector = seed.length && toSelector( tokens );
+					if ( !selector ) {
+						push.apply( results, seed );
+						return results;
+					}
+
+					break;
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function if one is not provided
+	// Provide `match` to avoid retokenization if we modified the selector above
+	( compiled || compile( selector, match ) )(
+		seed,
+		context,
+		!documentIsHTML,
+		results,
+		rsibling.test( selector ) && testContext( context.parentNode ) || context
+	);
+	return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( div1 ) {
+	// Should return 1, but returns 4 (following)
+	return div1.compareDocumentPosition( document.createElement("div") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( div ) {
+	div.innerHTML = "<a href='#'></a>";
+	return div.firstChild.getAttribute("href") === "#" ;
+}) ) {
+	addHandle( "type|href|height|width", function( elem, name, isXML ) {
+		if ( !isXML ) {
+			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+		}
+	});
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( div ) {
+	div.innerHTML = "<input/>";
+	div.firstChild.setAttribute( "value", "" );
+	return div.firstChild.getAttribute( "value" ) === "";
+}) ) {
+	addHandle( "value", function( elem, name, isXML ) {
+		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+			return elem.defaultValue;
+		}
+	});
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( div ) {
+	return div.getAttribute("disabled") == null;
+}) ) {
+	addHandle( booleans, function( elem, name, isXML ) {
+		var val;
+		if ( !isXML ) {
+			return elem[ name ] === true ? name.toLowerCase() :
+					(val = elem.getAttributeNode( name )) && val.specified ?
+					val.value :
+				null;
+		}
+	});
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep( elements, function( elem, i ) {
+			/* jshint -W018 */
+			return !!qualifier.call( elem, i, elem ) !== not;
+		});
+
+	}
+
+	if ( qualifier.nodeType ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( elem === qualifier ) !== not;
+		});
+
+	}
+
+	if ( typeof qualifier === "string" ) {
+		if ( risSimple.test( qualifier ) ) {
+			return jQuery.filter( qualifier, elements, not );
+		}
+
+		qualifier = jQuery.filter( qualifier, elements );
+	}
+
+	return jQuery.grep( elements, function( elem ) {
+		return ( indexOf.call( qualifier, elem ) >= 0 ) !== not;
+	});
+}
+
+jQuery.filter = function( expr, elems, not ) {
+	var elem = elems[ 0 ];
+
+	if ( not ) {
+		expr = ":not(" + expr + ")";
+	}
+
+	return elems.length === 1 && elem.nodeType === 1 ?
+		jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
+		jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+			return elem.nodeType === 1;
+		}));
+};
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var i,
+			len = this.length,
+			ret = [],
+			self = this;
+
+		if ( typeof selector !== "string" ) {
+			return this.pushStack( jQuery( selector ).filter(function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			}) );
+		}
+
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, self[ i ], ret );
+		}
+
+		// Needed because $( selector, context ) becomes $( context ).find( selector )
+		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+		ret.selector = this.selector ? this.selector + " " + selector : selector;
+		return ret;
+	},
+	filter: function( selector ) {
+		return this.pushStack( winnow(this, selector || [], false) );
+	},
+	not: function( selector ) {
+		return this.pushStack( winnow(this, selector || [], true) );
+	},
+	is: function( selector ) {
+		return !!winnow(
+			this,
+
+			// If this is a positional/relative selector, check membership in the returned set
+			// so $("p:first").is("p:last") won't return true for a doc with two "p".
+			typeof selector === "string" && rneedsContext.test( selector ) ?
+				jQuery( selector ) :
+				selector || [],
+			false
+		).length;
+	}
+});
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+	init = jQuery.fn.init = function( selector, context ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) {
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && (match[1] || !context) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[1] ) {
+					context = context instanceof jQuery ? context[0] : context;
+
+					// Option to run scripts is true for back-compat
+					// Intentionally let the error be thrown if parseHTML is not present
+					jQuery.merge( this, jQuery.parseHTML(
+						match[1],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+							// Properties of context are called as methods if possible
+							if ( jQuery.isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[2] );
+
+					// Support: Blackberry 4.6
+					// gEBID returns nodes no longer in the document (#6963)
+					if ( elem && elem.parentNode ) {
+						// Inject the element directly into the jQuery object
+						this.length = 1;
+						this[0] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || rootjQuery ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this.context = this[0] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return typeof rootjQuery.ready !== "undefined" ?
+				rootjQuery.ready( selector ) :
+				// Execute immediately if ready is not present
+				selector( jQuery );
+		}
+
+		if ( selector.selector !== undefined ) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	};
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+	// Methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.extend({
+	dir: function( elem, dir, until ) {
+		var matched = [],
+			truncate = until !== undefined;
+
+		while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {
+			if ( elem.nodeType === 1 ) {
+				if ( truncate && jQuery( elem ).is( until ) ) {
+					break;
+				}
+				matched.push( elem );
+			}
+		}
+		return matched;
+	},
+
+	sibling: function( n, elem ) {
+		var matched = [];
+
+		for ( ; n; n = n.nextSibling ) {
+			if ( n.nodeType === 1 && n !== elem ) {
+				matched.push( n );
+			}
+		}
+
+		return matched;
+	}
+});
+
+jQuery.fn.extend({
+	has: function( target ) {
+		var targets = jQuery( target, this ),
+			l = targets.length;
+
+		return this.filter(function() {
+			var i = 0;
+			for ( ; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[i] ) ) {
+					return true;
+				}
+			}
+		});
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			matched = [],
+			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( ; i < l; i++ ) {
+			for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
+				// Always skip document fragments
+				if ( cur.nodeType < 11 && (pos ?
+					pos.index(cur) > -1 :
+
+					// Don't pass non-elements to Sizzle
+					cur.nodeType === 1 &&
+						jQuery.find.matchesSelector(cur, selectors)) ) {
+
+					matched.push( cur );
+					break;
+				}
+			}
+		}
+
+		return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
+	},
+
+	// Determine the position of an element within the set
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// Index in selector
+		if ( typeof elem === "string" ) {
+			return indexOf.call( jQuery( elem ), this[ 0 ] );
+		}
+
+		// Locate the position of the desired element
+		return indexOf.call( this,
+
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[ 0 ] : elem
+		);
+	},
+
+	add: function( selector, context ) {
+		return this.pushStack(
+			jQuery.unique(
+				jQuery.merge( this.get(), jQuery( selector, context ) )
+			)
+		);
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter(selector)
+		);
+	}
+});
+
+function sibling( cur, dir ) {
+	while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}
+	return cur;
+}
+
+jQuery.each({
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return jQuery.dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return jQuery.dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return jQuery.dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return jQuery.sibling( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return elem.contentDocument || jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var matched = jQuery.map( this, fn, until );
+
+		if ( name.slice( -5 ) !== "Until" ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			matched = jQuery.filter( selector, matched );
+		}
+
+		if ( this.length > 1 ) {
+			// Remove duplicates
+			if ( !guaranteedUnique[ name ] ) {
+				jQuery.unique( matched );
+			}
+
+			// Reverse order for parents* and prev-derivatives
+			if ( rparentsprev.test( name ) ) {
+				matched.reverse();
+			}
+		}
+
+		return this.pushStack( matched );
+	};
+});
+var rnotwhite = (/\S+/g);
+
+
+
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+	var object = optionsCache[ options ] = {};
+	jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	});
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		( optionsCache[ options ] || createOptions( options ) ) :
+		jQuery.extend( {}, options );
+
+	var // Last fire value (for non-forgettable lists)
+		memory,
+		// Flag to know if list was already fired
+		fired,
+		// Flag to know if list is currently firing
+		firing,
+		// First callback to fire (used internally by add and fireWith)
+		firingStart,
+		// End of the loop when firing
+		firingLength,
+		// Index of currently firing callback (modified by remove if needed)
+		firingIndex,
+		// Actual callback list
+		list = [],
+		// Stack of fire calls for repeatable lists
+		stack = !options.once && [],
+		// Fire callbacks
+		fire = function( data ) {
+			memory = options.memory && data;
+			fired = true;
+			firingIndex = firingStart || 0;
+			firingStart = 0;
+			firingLength = list.length;
+			firing = true;
+			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+					memory = false; // To prevent further calls using add
+					break;
+				}
+			}
+			firing = false;
+			if ( list ) {
+				if ( stack ) {
+					if ( stack.length ) {
+						fire( stack.shift() );
+					}
+				} else if ( memory ) {
+					list = [];
+				} else {
+					self.disable();
+				}
+			}
+		},
+		// Actual Callbacks object
+		self = {
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+					// First, we save the current length
+					var start = list.length;
+					(function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							var type = jQuery.type( arg );
+							if ( type === "function" ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && type !== "string" ) {
+								// Inspect recursively
+								add( arg );
+							}
+						});
+					})( arguments );
+					// Do we need to add the callbacks to the
+					// current firing batch?
+					if ( firing ) {
+						firingLength = list.length;
+					// With memory, if we're not firing then
+					// we should call right away
+					} else if ( memory ) {
+						firingStart = start;
+						fire( memory );
+					}
+				}
+				return this;
+			},
+			// Remove a callback from the list
+			remove: function() {
+				if ( list ) {
+					jQuery.each( arguments, function( _, arg ) {
+						var index;
+						while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+							list.splice( index, 1 );
+							// Handle firing indexes
+							if ( firing ) {
+								if ( index <= firingLength ) {
+									firingLength--;
+								}
+								if ( index <= firingIndex ) {
+									firingIndex--;
+								}
+							}
+						}
+					});
+				}
+				return this;
+			},
+			// Check if a given callback is in the list.
+			// If no argument is given, return whether or not list has callbacks attached.
+			has: function( fn ) {
+				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
+			},
+			// Remove all callbacks from the list
+			empty: function() {
+				list = [];
+				firingLength = 0;
+				return this;
+			},
+			// Have the list do nothing anymore
+			disable: function() {
+				list = stack = memory = undefined;
+				return this;
+			},
+			// Is it disabled?
+			disabled: function() {
+				return !list;
+			},
+			// Lock the list in its current state
+			lock: function() {
+				stack = undefined;
+				if ( !memory ) {
+					self.disable();
+				}
+				return this;
+			},
+			// Is it locked?
+			locked: function() {
+				return !stack;
+			},
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				if ( list && ( !fired || stack ) ) {
+					args = args || [];
+					args = [ context, args.slice ? args.slice() : args ];
+					if ( firing ) {
+						stack.push( args );
+					} else {
+						fire( args );
+					}
+				}
+				return this;
+			},
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+
+
+jQuery.extend({
+
+	Deferred: function( func ) {
+		var tuples = [
+				// action, add listener, listener list, final state
+				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+				[ "notify", "progress", jQuery.Callbacks("memory") ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				then: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+					return jQuery.Deferred(function( newDefer ) {
+						jQuery.each( tuples, function( i, tuple ) {
+							var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+							// deferred[ done | fail | progress ] for forwarding actions to newDefer
+							deferred[ tuple[1] ](function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && jQuery.isFunction( returned.promise ) ) {
+									returned.promise()
+										.done( newDefer.resolve )
+										.fail( newDefer.reject )
+										.progress( newDefer.notify );
+								} else {
+									newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
+								}
+							});
+						});
+						fns = null;
+					}).promise();
+				},
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Keep pipe for back-compat
+		promise.pipe = promise.then;
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 3 ];
+
+			// promise[ done | fail | progress ] = list.add
+			promise[ tuple[1] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add(function() {
+					// state = [ resolved | rejected ]
+					state = stateString;
+
+				// [ reject_list | resolve_list ].disable; progress_list.lock
+				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+			}
+
+			// deferred[ resolve | reject | notify ]
+			deferred[ tuple[0] ] = function() {
+				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
+				return this;
+			};
+			deferred[ tuple[0] + "With" ] = list.fireWith;
+		});
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( subordinate /* , ..., subordinateN */ ) {
+		var i = 0,
+			resolveValues = slice.call( arguments ),
+			length = resolveValues.length,
+
+			// the count of uncompleted subordinates
+			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+			// Update function for both resolve and progress values
+			updateFunc = function( i, contexts, values ) {
+				return function( value ) {
+					contexts[ i ] = this;
+					values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+					if ( values === progressValues ) {
+						deferred.notifyWith( contexts, values );
+					} else if ( !( --remaining ) ) {
+						deferred.resolveWith( contexts, values );
+					}
+				};
+			},
+
+			progressValues, progressContexts, resolveContexts;
+
+		// Add listeners to Deferred subordinates; treat others as resolved
+		if ( length > 1 ) {
+			progressValues = new Array( length );
+			progressContexts = new Array( length );
+			resolveContexts = new Array( length );
+			for ( ; i < length; i++ ) {
+				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+					resolveValues[ i ].promise()
+						.done( updateFunc( i, resolveContexts, resolveValues ) )
+						.fail( deferred.reject )
+						.progress( updateFunc( i, progressContexts, progressValues ) );
+				} else {
+					--remaining;
+				}
+			}
+		}
+
+		// If we're not waiting on anything, resolve the master
+		if ( !remaining ) {
+			deferred.resolveWith( resolveContexts, resolveValues );
+		}
+
+		return deferred.promise();
+	}
+});
+
+
+// The deferred used on DOM ready
+var readyList;
+
+jQuery.fn.ready = function( fn ) {
+	// Add the callback
+	jQuery.ready.promise().done( fn );
+
+	return this;
+};
+
+jQuery.extend({
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+
+		// Trigger any bound ready events
+		if ( jQuery.fn.triggerHandler ) {
+			jQuery( document ).triggerHandler( "ready" );
+			jQuery( document ).off( "ready" );
+		}
+	}
+});
+
+/**
+ * The ready event handler and self cleanup method
+ */
+function completed() {
+	document.removeEventListener( "DOMContentLoaded", completed, false );
+	window.removeEventListener( "load", completed, false );
+	jQuery.ready();
+}
+
+jQuery.ready.promise = function( obj ) {
+	if ( !readyList ) {
+
+		readyList = jQuery.Deferred();
+
+		// Catch cases where $(document).ready() is called after the browser event has already occurred.
+		// We once tried to use readyState "interactive" here, but it caused issues like the one
+		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+		if ( document.readyState === "complete" ) {
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			setTimeout( jQuery.ready );
+
+		} else {
+
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", completed, false );
+
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", completed, false );
+		}
+	}
+	return readyList.promise( obj );
+};
+
+// Kick off the DOM ready check even if the user does not
+jQuery.ready.promise();
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+	var i = 0,
+		len = elems.length,
+		bulk = key == null;
+
+	// Sets many values
+	if ( jQuery.type( key ) === "object" ) {
+		chainable = true;
+		for ( i in key ) {
+			jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
+		}
+
+	// Sets one value
+	} else if ( value !== undefined ) {
+		chainable = true;
+
+		if ( !jQuery.isFunction( value ) ) {
+			raw = true;
+		}
+
+		if ( bulk ) {
+			// Bulk operations run against the entire set
+			if ( raw ) {
+				fn.call( elems, value );
+				fn = null;
+
+			// ...except when executing function values
+			} else {
+				bulk = fn;
+				fn = function( elem, key, value ) {
+					return bulk.call( jQuery( elem ), value );
+				};
+			}
+		}
+
+		if ( fn ) {
+			for ( ; i < len; i++ ) {
+				fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+			}
+		}
+	}
+
+	return chainable ?
+		elems :
+
+		// Gets
+		bulk ?
+			fn.call( elems ) :
+			len ? fn( elems[0], key ) : emptyGet;
+};
+
+
+/**
+ * Determines whether an object can have data
+ */
+jQuery.acceptData = function( owner ) {
+	// Accepts only:
+	//  - Node
+	//    - Node.ELEMENT_NODE
+	//    - Node.DOCUMENT_NODE
+	//  - Object
+	//    - Any
+	/* jshint -W018 */
+	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+function Data() {
+	// Support: Android<4,
+	// Old WebKit does not have Object.preventExtensions/freeze method,
+	// return new empty object instead with no [[set]] accessor
+	Object.defineProperty( this.cache = {}, 0, {
+		get: function() {
+			return {};
+		}
+	});
+
+	this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+Data.accepts = jQuery.acceptData;
+
+Data.prototype = {
+	key: function( owner ) {
+		// We can accept data for non-element nodes in modern browsers,
+		// but we should not, see #8335.
+		// Always return the key for a frozen object.
+		if ( !Data.accepts( owner ) ) {
+			return 0;
+		}
+
+		var descriptor = {},
+			// Check if the owner object already has a cache key
+			unlock = owner[ this.expando ];
+
+		// If not, create one
+		if ( !unlock ) {
+			unlock = Data.uid++;
+
+			// Secure it in a non-enumerable, non-writable property
+			try {
+				descriptor[ this.expando ] = { value: unlock };
+				Object.defineProperties( owner, descriptor );
+
+			// Support: Android<4
+			// Fallback to a less secure definition
+			} catch ( e ) {
+				descriptor[ this.expando ] = unlock;
+				jQuery.extend( owner, descriptor );
+			}
+		}
+
+		// Ensure the cache object
+		if ( !this.cache[ unlock ] ) {
+			this.cache[ unlock ] = {};
+		}
+
+		return unlock;
+	},
+	set: function( owner, data, value ) {
+		var prop,
+			// There may be an unlock assigned to this node,
+			// if there is no entry for this "owner", create one inline
+			// and set the unlock as though an owner entry had always existed
+			unlock = this.key( owner ),
+			cache = this.cache[ unlock ];
+
+		// Handle: [ owner, key, value ] args
+		if ( typeof data === "string" ) {
+			cache[ data ] = value;
+
+		// Handle: [ owner, { properties } ] args
+		} else {
+			// Fresh assignments by object are shallow copied
+			if ( jQuery.isEmptyObject( cache ) ) {
+				jQuery.extend( this.cache[ unlock ], data );
+			// Otherwise, copy the properties one-by-one to the cache object
+			} else {
+				for ( prop in data ) {
+					cache[ prop ] = data[ prop ];
+				}
+			}
+		}
+		return cache;
+	},
+	get: function( owner, key ) {
+		// Either a valid cache is found, or will be created.
+		// New caches will be created and the unlock returned,
+		// allowing direct access to the newly created
+		// empty data object. A valid owner object must be provided.
+		var cache = this.cache[ this.key( owner ) ];
+
+		return key === undefined ?
+			cache : cache[ key ];
+	},
+	access: function( owner, key, value ) {
+		var stored;
+		// In cases where either:
+		//
+		//   1. No key was specified
+		//   2. A string key was specified, but no value provided
+		//
+		// Take the "read" path and allow the get method to determine
+		// which value to return, respectively either:
+		//
+		//   1. The entire cache object
+		//   2. The data stored at the key
+		//
+		if ( key === undefined ||
+				((key && typeof key === "string") && value === undefined) ) {
+
+			stored = this.get( owner, key );
+
+			return stored !== undefined ?
+				stored : this.get( owner, jQuery.camelCase(key) );
+		}
+
+		// [*]When the key is not a string, or both a key and value
+		// are specified, set or extend (existing objects) with either:
+		//
+		//   1. An object of properties
+		//   2. A key and value
+		//
+		this.set( owner, key, value );
+
+		// Since the "set" path can have two possible entry points
+		// return the expected data based on which path was taken[*]
+		return value !== undefined ? value : key;
+	},
+	remove: function( owner, key ) {
+		var i, name, camel,
+			unlock = this.key( owner ),
+			cache = this.cache[ unlock ];
+
+		if ( key === undefined ) {
+			this.cache[ unlock ] = {};
+
+		} else {
+			// Support array or space separated string of keys
+			if ( jQuery.isArray( key ) ) {
+				// If "name" is an array of keys...
+				// When data is initially created, via ("key", "val") signature,
+				// keys will be converted to camelCase.
+				// Since there is no way to tell _how_ a key was added, remove
+				// both plain key and camelCase key. #12786
+				// This will only penalize the array argument path.
+				name = key.concat( key.map( jQuery.camelCase ) );
+			} else {
+				camel = jQuery.camelCase( key );
+				// Try the string as a key before any manipulation
+				if ( key in cache ) {
+					name = [ key, camel ];
+				} else {
+					// If a key with the spaces exists, use it.
+					// Otherwise, create an array by matching non-whitespace
+					name = camel;
+					name = name in cache ?
+						[ name ] : ( name.match( rnotwhite ) || [] );
+				}
+			}
+
+			i = name.length;
+			while ( i-- ) {
+				delete cache[ name[ i ] ];
+			}
+		}
+	},
+	hasData: function( owner ) {
+		return !jQuery.isEmptyObject(
+			this.cache[ owner[ this.expando ] ] || {}
+		);
+	},
+	discard: function( owner ) {
+		if ( owner[ this.expando ] ) {
+			delete this.cache[ owner[ this.expando ] ];
+		}
+	}
+};
+var data_priv = new Data();
+
+var data_user = new Data();
+
+
+
+//	Implementation Summary
+//
+//	1. Enforce API surface and semantic compatibility with 1.9.x branch
+//	2. Improve the module's maintainability by reducing the storage
+//		paths to a single mechanism.
+//	3. Use the same single mechanism to support "private" and "user" data.
+//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+//	5. Avoid exposing implementation details on user objects (eg. expando properties)
+//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+	rmultiDash = /([A-Z])/g;
+
+function dataAttr( elem, key, data ) {
+	var name;
+
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+		name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+					data === "false" ? false :
+					data === "null" ? null :
+					// Only convert to a number if it doesn't change the string
+					+data + "" === data ? +data :
+					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+					data;
+			} catch( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			data_user.set( elem, key, data );
+		} else {
+			data = undefined;
+		}
+	}
+	return data;
+}
+
+jQuery.extend({
+	hasData: function( elem ) {
+		return data_user.hasData( elem ) || data_priv.hasData( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return data_user.access( elem, name, data );
+	},
+
+	removeData: function( elem, name ) {
+		data_user.remove( elem, name );
+	},
+
+	// TODO: Now that all calls to _data and _removeData have been replaced
+	// with direct calls to data_priv methods, these can be deprecated.
+	_data: function( elem, name, data ) {
+		return data_priv.access( elem, name, data );
+	},
+
+	_removeData: function( elem, name ) {
+		data_priv.remove( elem, name );
+	}
+});
+
+jQuery.fn.extend({
+	data: function( key, value ) {
+		var i, name, data,
+			elem = this[ 0 ],
+			attrs = elem && elem.attributes;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = data_user.get( elem );
+
+				if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) {
+					i = attrs.length;
+					while ( i-- ) {
+
+						// Support: IE11+
+						// The attrs elements can be null (#14894)
+						if ( attrs[ i ] ) {
+							name = attrs[ i ].name;
+							if ( name.indexOf( "data-" ) === 0 ) {
+								name = jQuery.camelCase( name.slice(5) );
+								dataAttr( elem, name, data[ name ] );
+							}
+						}
+					}
+					data_priv.set( elem, "hasDataAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each(function() {
+				data_user.set( this, key );
+			});
+		}
+
+		return access( this, function( value ) {
+			var data,
+				camelKey = jQuery.camelCase( key );
+
+			// The calling jQuery object (element matches) is not empty
+			// (and therefore has an element appears at this[ 0 ]) and the
+			// `value` parameter was not undefined. An empty jQuery object
+			// will result in `undefined` for elem = this[ 0 ] which will
+			// throw an exception if an attempt to read a data cache is made.
+			if ( elem && value === undefined ) {
+				// Attempt to get data from the cache
+				// with the key as-is
+				data = data_user.get( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// Attempt to get data from the cache
+				// with the key camelized
+				data = data_user.get( elem, camelKey );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// Attempt to "discover" the data in
+				// HTML5 custom data-* attrs
+				data = dataAttr( elem, camelKey, undefined );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// We tried really hard, but the data doesn't exist.
+				return;
+			}
+
+			// Set the data...
+			this.each(function() {
+				// First, attempt to store a copy or reference of any
+				// data that might've been store with a camelCased key.
+				var data = data_user.get( this, camelKey );
+
+				// For HTML5 data-* attribute interop, we have to
+				// store property names with dashes in a camelCase form.
+				// This might not apply to all properties...*
+				data_user.set( this, camelKey, value );
+
+				// *... In the case of properties that might _actually_
+				// have dashes, we need to also store a copy of that
+				// unchanged property.
+				if ( key.indexOf("-") !== -1 && data !== undefined ) {
+					data_user.set( this, key, value );
+				}
+			});
+		}, null, value, arguments.length > 1, null, true );
+	},
+
+	removeData: function( key ) {
+		return this.each(function() {
+			data_user.remove( this, key );
+		});
+	}
+});
+
+
+jQuery.extend({
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = data_priv.get( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || jQuery.isArray( data ) ) {
+					queue = data_priv.access( elem, type, jQuery.makeArray(data) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// Clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// Not public - generate a queueHooks object, or return the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return data_priv.get( elem, key ) || data_priv.access( elem, key, {
+			empty: jQuery.Callbacks("once memory").add(function() {
+				data_priv.remove( elem, [ type + "queue", key ] );
+			})
+		});
+	}
+});
+
+jQuery.fn.extend({
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[0], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each(function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// Ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[0] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			});
+	},
+	dequeue: function( type ) {
+		return this.each(function() {
+			jQuery.dequeue( this, type );
+		});
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while ( i-- ) {
+			tmp = data_priv.get( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+});
+var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var isHidden = function( elem, el ) {
+		// isHidden might be called from jQuery#filter function;
+		// in that case, element will be second argument
+		elem = el || elem;
+		return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+	};
+
+var rcheckableType = (/^(?:checkbox|radio)$/i);
+
+
+
+(function() {
+	var fragment = document.createDocumentFragment(),
+		div = fragment.appendChild( document.createElement( "div" ) ),
+		input = document.createElement( "input" );
+
+	// Support: Safari<=5.1
+	// Check state lost if the name is set (#11217)
+	// Support: Windows Web Apps (WWA)
+	// `name` and `type` must use .setAttribute for WWA (#14901)
+	input.setAttribute( "type", "radio" );
+	input.setAttribute( "checked", "checked" );
+	input.setAttribute( "name", "t" );
+
+	div.appendChild( input );
+
+	// Support: Safari<=5.1, Android<4.2
+	// Older WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE<=11+
+	// Make sure textarea (and checkbox) defaultValue is properly cloned
+	div.innerHTML = "<textarea>x</textarea>";
+	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+})();
+var strundefined = typeof undefined;
+
+
+
+support.focusinBubbles = "onfocusin" in window;
+
+
+var
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
+	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+function safeActiveElement() {
+	try {
+		return document.activeElement;
+	} catch ( err ) { }
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+
+		var handleObjIn, eventHandle, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = data_priv.get( elem );
+
+		// Don't attach events to noData or text/comment nodes (but allow plain objects)
+		if ( !elemData ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !(events = elemData.events) ) {
+			events = elemData.events = {};
+		}
+		if ( !(eventHandle = elemData.handle) ) {
+			eventHandle = elemData.handle = function( e ) {
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?
+					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+			};
+		}
+
+		// Handle multiple events separated by a space
+		types = ( types || "" ).match( rnotwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tmp[1];
+			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+			// There *must* be a type, no attaching namespace-only handlers
+			if ( !type ) {
+				continue;
+			}
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend({
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join(".")
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !(handlers = events[ type ]) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener if the special events handler returns false
+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle, false );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+
+		var j, origCount, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = data_priv.hasData( elem ) && data_priv.get( elem );
+
+		if ( !elemData || !(events = elemData.events) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( rnotwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tmp[1];
+			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			delete elemData.handle;
+			data_priv.remove( elem, "events" );
+		}
+	},
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+
+		var i, cur, tmp, bubbleType, ontype, handle, special,
+			eventPath = [ elem || document ],
+			type = hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
+
+		cur = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf(".") >= 0 ) {
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split(".");
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf(":") < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+		event.isTrigger = onlyHandlers ? 2 : 3;
+		event.namespace = namespaces.join(".");
+		event.namespace_re = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === (elem.ownerDocument || document) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
+
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
+				event.result = handle.apply( cur, data );
+				if ( event.result === false ) {
+					event.preventDefault();
+				}
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
+				jQuery.acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name name as the event.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+					elem[ type ]();
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	dispatch: function( event ) {
+
+		// Make a writable jQuery.Event from the native event object
+		event = jQuery.event.fix( event );
+
+		var i, j, ret, matched, handleObj,
+			handlerQueue = [],
+			args = slice.call( arguments ),
+			handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[0] = event;
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
+
+				// Triggered event must either 1) have no namespace, or 2) have namespace(s)
+				// a subset or equal to those in the bound event (both can have no namespace).
+				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+							.apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( (event.result = ret) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var i, matches, sel, handleObj,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Find delegate handlers
+		// Black-hole SVG <use> instance trees (#13180)
+		// Avoid non-left-click bubbling in Firefox (#3861)
+		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
+
+			for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.disabled !== true || event.type !== "click" ) {
+					matches = [];
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matches[ sel ] === undefined ) {
+							matches[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) >= 0 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matches[ sel ] ) {
+							matches.push( handleObj );
+						}
+					}
+					if ( matches.length ) {
+						handlerQueue.push({ elem: cur, handlers: matches });
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
+		}
+
+		return handlerQueue;
+	},
+
+	// Includes some event props shared by KeyEvent and MouseEvent
+	props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
+
+	fixHooks: {},
+
+	keyHooks: {
+		props: "char charCode key keyCode".split(" "),
+		filter: function( event, original ) {
+
+			// Add which for key events
+			if ( event.which == null ) {
+				event.which = original.charCode != null ? original.charCode : original.keyCode;
+			}
+
+			return event;
+		}
+	},
+
+	mouseHooks: {
+		props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+		filter: function( event, original ) {
+			var eventDoc, doc, body,
+				button = original.button;
+
+			// Calculate pageX/Y if missing and clientX/Y available
+			if ( event.pageX == null && original.clientX != null ) {
+				eventDoc = event.target.ownerDocument || document;
+				doc = eventDoc.documentElement;
+				body = eventDoc.body;
+
+				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+			}
+
+			// Add which for click: 1 === left; 2 === middle; 3 === right
+			// Note: button is not normalized, so don't use it
+			if ( !event.which && button !== undefined ) {
+				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+			}
+
+			return event;
+		}
+	},
+
+	fix: function( event ) {
+		if ( event[ jQuery.expando ] ) {
+			return event;
+		}
+
+		// Create a writable copy of the event object and normalize some properties
+		var i, prop, copy,
+			type = event.type,
+			originalEvent = event,
+			fixHook = this.fixHooks[ type ];
+
+		if ( !fixHook ) {
+			this.fixHooks[ type ] = fixHook =
+				rmouseEvent.test( type ) ? this.mouseHooks :
+				rkeyEvent.test( type ) ? this.keyHooks :
+				{};
+		}
+		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+		event = new jQuery.Event( originalEvent );
+
+		i = copy.length;
+		while ( i-- ) {
+			prop = copy[ i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Support: Cordova 2.5 (WebKit) (#13255)
+		// All events should have a target; Cordova deviceready doesn't
+		if ( !event.target ) {
+			event.target = document;
+		}
+
+		// Support: Safari 6.0+, Chrome<28
+		// Target should not be a text node (#504, #13143)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+	},
+
+	special: {
+		load: {
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		focus: {
+			// Fire native event if possible so blur/focus sequence is correct
+			trigger: function() {
+				if ( this !== safeActiveElement() && this.focus ) {
+					this.focus();
+					return false;
+				}
+			},
+			delegateType: "focusin"
+		},
+		blur: {
+			trigger: function() {
+				if ( this === safeActiveElement() && this.blur ) {
+					this.blur();
+					return false;
+				}
+			},
+			delegateType: "focusout"
+		},
+		click: {
+			// For checkbox, fire native event so checked state will be right
+			trigger: function() {
+				if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
+					this.click();
+					return false;
+				}
+			},
+
+			// For cross-browser consistency, don't fire native .click() on links
+			_default: function( event ) {
+				return jQuery.nodeName( event.target, "a" );
+			}
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Support: Firefox 20+
+				// Firefox doesn't alert if the returnValue field is not set.
+				if ( event.result !== undefined && event.originalEvent ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	},
+
+	simulate: function( type, elem, event, bubble ) {
+		// Piggyback on a donor event to simulate a different one.
+		// Fake originalEvent to avoid donor's stopPropagation, but if the
+		// simulated event prevents default then we do the same on the donor.
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{
+				type: type,
+				isSimulated: true,
+				originalEvent: {}
+			}
+		);
+		if ( bubble ) {
+			jQuery.event.trigger( e, null, elem );
+		} else {
+			jQuery.event.dispatch.call( elem, e );
+		}
+		if ( e.isDefaultPrevented() ) {
+			event.preventDefault();
+		}
+	}
+};
+
+jQuery.removeEvent = function( elem, type, handle ) {
+	if ( elem.removeEventListener ) {
+		elem.removeEventListener( type, handle, false );
+	}
+};
+
+jQuery.Event = function( src, props ) {
+	// Allow instantiation without the 'new' keyword
+	if ( !(this instanceof jQuery.Event) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = src.defaultPrevented ||
+				src.defaultPrevented === undefined &&
+				// Support: Android<4.0
+				src.returnValue === false ?
+			returnTrue :
+			returnFalse;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+
+		if ( e && e.preventDefault ) {
+			e.preventDefault();
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+
+		if ( e && e.stopPropagation ) {
+			e.stopPropagation();
+		}
+	},
+	stopImmediatePropagation: function() {
+		var e = this.originalEvent;
+
+		this.isImmediatePropagationStopped = returnTrue;
+
+		if ( e && e.stopImmediatePropagation ) {
+			e.stopImmediatePropagation();
+		}
+
+		this.stopPropagation();
+	}
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// Support: Chrome 15+
+jQuery.each({
+	mouseenter: "mouseover",
+	mouseleave: "mouseout",
+	pointerenter: "pointerover",
+	pointerleave: "pointerout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mousenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+});
+
+// Support: Firefox, Chrome, Safari
+// Create "bubbling" focus and blur events
+if ( !support.focusinBubbles ) {
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler on the document while someone wants focusin/focusout
+		var handler = function( event ) {
+				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+			};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				var doc = this.ownerDocument || this,
+					attaches = data_priv.access( doc, fix );
+
+				if ( !attaches ) {
+					doc.addEventListener( orig, handler, true );
+				}
+				data_priv.access( doc, fix, ( attaches || 0 ) + 1 );
+			},
+			teardown: function() {
+				var doc = this.ownerDocument || this,
+					attaches = data_priv.access( doc, fix ) - 1;
+
+				if ( !attaches ) {
+					doc.removeEventListener( orig, handler, true );
+					data_priv.remove( doc, fix );
+
+				} else {
+					data_priv.access( doc, fix, attaches );
+				}
+			}
+		};
+	});
+}
+
+jQuery.fn.extend({
+
+	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+		var origFn, type;
+
+		// Types can be a map of types/handlers
+		if ( typeof types === "object" ) {
+			// ( types-Object, selector, data )
+			if ( typeof selector !== "string" ) {
+				// ( types-Object, data )
+				data = data || selector;
+				selector = undefined;
+			}
+			for ( type in types ) {
+				this.on( type, selector, data, types[ type ], one );
+			}
+			return this;
+		}
+
+		if ( data == null && fn == null ) {
+			// ( types, fn )
+			fn = selector;
+			data = selector = undefined;
+		} else if ( fn == null ) {
+			if ( typeof selector === "string" ) {
+				// ( types, selector, fn )
+				fn = data;
+				data = undefined;
+			} else {
+				// ( types, data, fn )
+				fn = data;
+				data = selector;
+				selector = undefined;
+			}
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		} else if ( !fn ) {
+			return this;
+		}
+
+		if ( one === 1 ) {
+			origFn = fn;
+			fn = function( event ) {
+				// Can use an empty set, since event contains the info
+				jQuery().off( event );
+				return origFn.apply( this, arguments );
+			};
+			// Use same guid so caller can remove using origFn
+			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+		}
+		return this.each( function() {
+			jQuery.event.add( this, types, fn, data, selector );
+		});
+	},
+	one: function( types, selector, data, fn ) {
+		return this.on( types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each(function() {
+			jQuery.event.remove( this, types, fn, selector );
+		});
+	},
+
+	trigger: function( type, data ) {
+		return this.each(function() {
+			jQuery.event.trigger( type, data, this );
+		});
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[0];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	}
+});
+
+
+var
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+	rtagName = /<([\w:]+)/,
+	rhtml = /<|&#?\w+;/,
+	rnoInnerhtml = /<(?:script|style|link)/i,
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptType = /^$|\/(?:java|ecma)script/i,
+	rscriptTypeMasked = /^true\/(.*)/,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+
+	// We have to close these tags to support XHTML (#13200)
+	wrapMap = {
+
+		// Support: IE9
+		option: [ 1, "<select multiple='multiple'>", "</select>" ],
+
+		thead: [ 1, "<table>", "</table>" ],
+		col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+		_default: [ 0, "", "" ]
+	};
+
+// Support: IE9
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// Support: 1.x compatibility
+// Manipulating tables requires a tbody
+function manipulationTarget( elem, content ) {
+	return jQuery.nodeName( elem, "table" ) &&
+		jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
+
+		elem.getElementsByTagName("tbody")[0] ||
+			elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
+		elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	var match = rscriptTypeMasked.exec( elem.type );
+
+	if ( match ) {
+		elem.type = match[ 1 ];
+	} else {
+		elem.removeAttribute("type");
+	}
+
+	return elem;
+}
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		data_priv.set(
+			elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" )
+		);
+	}
+}
+
+function cloneCopyEvent( src, dest ) {
+	var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// 1. Copy private data: events, handlers, etc.
+	if ( data_priv.hasData( src ) ) {
+		pdataOld = data_priv.access( src );
+		pdataCur = data_priv.set( dest, pdataOld );
+		events = pdataOld.events;
+
+		if ( events ) {
+			delete pdataCur.handle;
+			pdataCur.events = {};
+
+			for ( type in events ) {
+				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+					jQuery.event.add( dest, type, events[ type ][ i ] );
+				}
+			}
+		}
+	}
+
+	// 2. Copy user data
+	if ( data_user.hasData( src ) ) {
+		udataOld = data_user.access( src );
+		udataCur = jQuery.extend( {}, udataOld );
+
+		data_user.set( dest, udataCur );
+	}
+}
+
+function getAll( context, tag ) {
+	var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) :
+			context.querySelectorAll ? context.querySelectorAll( tag || "*" ) :
+			[];
+
+	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+		jQuery.merge( [ context ], ret ) :
+		ret;
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+	var nodeName = dest.nodeName.toLowerCase();
+
+	// Fails to persist the checked state of a cloned checkbox or radio button.
+	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+		dest.checked = src.checked;
+
+	// Fails to return the selected option to the default selected state when cloning options
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+jQuery.extend({
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var i, l, srcElements, destElements,
+			clone = elem.cloneNode( true ),
+			inPage = jQuery.contains( elem.ownerDocument, elem );
+
+		// Fix IE cloning issues
+		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+				!jQuery.isXMLDoc( elem ) ) {
+
+			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			for ( i = 0, l = srcElements.length; i < l; i++ ) {
+				fixInput( srcElements[ i ], destElements[ i ] );
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0, l = srcElements.length; i < l; i++ ) {
+					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		// Return the cloned set
+		return clone;
+	},
+
+	buildFragment: function( elems, context, scripts, selection ) {
+		var elem, tmp, tag, wrap, contains, j,
+			fragment = context.createDocumentFragment(),
+			nodes = [],
+			i = 0,
+			l = elems.length;
+
+		for ( ; i < l; i++ ) {
+			elem = elems[ i ];
+
+			if ( elem || elem === 0 ) {
+
+				// Add nodes directly
+				if ( jQuery.type( elem ) === "object" ) {
+					// Support: QtWebKit, PhantomJS
+					// push.apply(_, arraylike) throws on ancient WebKit
+					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+				// Convert non-html into a text node
+				} else if ( !rhtml.test( elem ) ) {
+					nodes.push( context.createTextNode( elem ) );
+
+				// Convert html into DOM nodes
+				} else {
+					tmp = tmp || fragment.appendChild( context.createElement("div") );
+
+					// Deserialize a standard representation
+					tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+					wrap = wrapMap[ tag ] || wrapMap._default;
+					tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ];
+
+					// Descend through wrappers to the right content
+					j = wrap[ 0 ];
+					while ( j-- ) {
+						tmp = tmp.lastChild;
+					}
+
+					// Support: QtWebKit, PhantomJS
+					// push.apply(_, arraylike) throws on ancient WebKit
+					jQuery.merge( nodes, tmp.childNodes );
+
+					// Remember the top-level container
+					tmp = fragment.firstChild;
+
+					// Ensure the created nodes are orphaned (#12392)
+					tmp.textContent = "";
+				}
+			}
+		}
+
+		// Remove wrapper from fragment
+		fragment.textContent = "";
+
+		i = 0;
+		while ( (elem = nodes[ i++ ]) ) {
+
+			// #4087 - If origin and destination elements are the same, and this is
+			// that element, do not do anything
+			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
+				continue;
+			}
+
+			contains = jQuery.contains( elem.ownerDocument, elem );
+
+			// Append to fragment
+			tmp = getAll( fragment.appendChild( elem ), "script" );
+
+			// Preserve script evaluation history
+			if ( contains ) {
+				setGlobalEval( tmp );
+			}
+
+			// Capture executables
+			if ( scripts ) {
+				j = 0;
+				while ( (elem = tmp[ j++ ]) ) {
+					if ( rscriptType.test( elem.type || "" ) ) {
+						scripts.push( elem );
+					}
+				}
+			}
+		}
+
+		return fragment;
+	},
+
+	cleanData: function( elems ) {
+		var data, elem, type, key,
+			special = jQuery.event.special,
+			i = 0;
+
+		for ( ; (elem = elems[ i ]) !== undefined; i++ ) {
+			if ( jQuery.acceptData( elem ) ) {
+				key = elem[ data_priv.expando ];
+
+				if ( key && (data = data_priv.cache[ key ]) ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+					if ( data_priv.cache[ key ] ) {
+						// Discard any remaining `private` data
+						delete data_priv.cache[ key ];
+					}
+				}
+			}
+			// Discard any remaining `user` data
+			delete data_user.cache[ elem[ data_user.expando ] ];
+		}
+	}
+});
+
+jQuery.fn.extend({
+	text: function( value ) {
+		return access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().each(function() {
+					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+						this.textContent = value;
+					}
+				});
+		}, null, value, arguments.length );
+	},
+
+	append: function() {
+		return this.domManip( arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.appendChild( elem );
+			}
+		});
+	},
+
+	prepend: function() {
+		return this.domManip( arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.insertBefore( elem, target.firstChild );
+			}
+		});
+	},
+
+	before: function() {
+		return this.domManip( arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		});
+	},
+
+	after: function() {
+		return this.domManip( arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		});
+	},
+
+	remove: function( selector, keepData /* Internal Use Only */ ) {
+		var elem,
+			elems = selector ? jQuery.filter( selector, this ) : this,
+			i = 0;
+
+		for ( ; (elem = elems[i]) != null; i++ ) {
+			if ( !keepData && elem.nodeType === 1 ) {
+				jQuery.cleanData( getAll( elem ) );
+			}
+
+			if ( elem.parentNode ) {
+				if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
+					setGlobalEval( getAll( elem, "script" ) );
+				}
+				elem.parentNode.removeChild( elem );
+			}
+		}
+
+		return this;
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; (elem = this[i]) != null; i++ ) {
+			if ( elem.nodeType === 1 ) {
+
+				// Prevent memory leaks
+				jQuery.cleanData( getAll( elem, false ) );
+
+				// Remove any remaining nodes
+				elem.textContent = "";
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map(function() {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		});
+	},
+
+	html: function( value ) {
+		return access( this, function( value ) {
+			var elem = this[ 0 ] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined && elem.nodeType === 1 ) {
+				return elem.innerHTML;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+				value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+				try {
+					for ( ; i < l; i++ ) {
+						elem = this[ i ] || {};
+
+						// Remove element nodes and prevent memory leaks
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch( e ) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function() {
+		var arg = arguments[ 0 ];
+
+		// Make the changes, replacing each context element with the new content
+		this.domManip( arguments, function( elem ) {
+			arg = this.parentNode;
+
+			jQuery.cleanData( getAll( this ) );
+
+			if ( arg ) {
+				arg.replaceChild( elem, this );
+			}
+		});
+
+		// Force removal if there was no new content (e.g., from empty arguments)
+		return arg && (arg.length || arg.nodeType) ? this : this.remove();
+	},
+
+	detach: function( selector ) {
+		return this.remove( selector, true );
+	},
+
+	domManip: function( args, callback ) {
+
+		// Flatten any nested arrays
+		args = concat.apply( [], args );
+
+		var fragment, first, scripts, hasScripts, node, doc,
+			i = 0,
+			l = this.length,
+			set = this,
+			iNoClone = l - 1,
+			value = args[ 0 ],
+			isFunction = jQuery.isFunction( value );
+
+		// We can't cloneNode fragments that contain checked, in WebKit
+		if ( isFunction ||
+				( l > 1 && typeof value === "string" &&
+					!support.checkClone && rchecked.test( value ) ) ) {
+			return this.each(function( index ) {
+				var self = set.eq( index );
+				if ( isFunction ) {
+					args[ 0 ] = value.call( this, index, self.html() );
+				}
+				self.domManip( args, callback );
+			});
+		}
+
+		if ( l ) {
+			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
+			first = fragment.firstChild;
+
+			if ( fragment.childNodes.length === 1 ) {
+				fragment = first;
+			}
+
+			if ( first ) {
+				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+				hasScripts = scripts.length;
+
+				// Use the original fragment for the last item instead of the first because it can end up
+				// being emptied incorrectly in certain situations (#8070).
+				for ( ; i < l; i++ ) {
+					node = fragment;
+
+					if ( i !== iNoClone ) {
+						node = jQuery.clone( node, true, true );
+
+						// Keep references to cloned scripts for later restoration
+						if ( hasScripts ) {
+							// Support: QtWebKit
+							// jQuery.merge because push.apply(_, arraylike) throws
+							jQuery.merge( scripts, getAll( node, "script" ) );
+						}
+					}
+
+					callback.call( this[ i ], node, i );
+				}
+
+				if ( hasScripts ) {
+					doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+					// Reenable scripts
+					jQuery.map( scripts, restoreScript );
+
+					// Evaluate executable scripts on first document insertion
+					for ( i = 0; i < hasScripts; i++ ) {
+						node = scripts[ i ];
+						if ( rscriptType.test( node.type || "" ) &&
+							!data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
+
+							if ( node.src ) {
+								// Optional AJAX dependency, but won't run scripts if not present
+								if ( jQuery._evalUrl ) {
+									jQuery._evalUrl( node.src );
+								}
+							} else {
+								jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) );
+							}
+						}
+					}
+				}
+			}
+		}
+
+		return this;
+	}
+});
+
+jQuery.each({
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1,
+			i = 0;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone( true );
+			jQuery( insert[ i ] )[ original ]( elems );
+
+			// Support: QtWebKit
+			// .get() because push.apply(_, arraylike) throws
+			push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+});
+
+
+var iframe,
+	elemdisplay = {};
+
+/**
+ * Retrieve the actual display of a element
+ * @param {String} name nodeName of the element
+ * @param {Object} doc Document object
+ */
+// Called only from within defaultDisplay
+function actualDisplay( name, doc ) {
+	var style,
+		elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+
+		// getDefaultComputedStyle might be reliably used only on attached element
+		display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
+
+			// Use of this method is a temporary fix (more like optimization) until something better comes along,
+			// since it was removed from specification and supported only in FF
+			style.display : jQuery.css( elem[ 0 ], "display" );
+
+	// We don't have any data stored on the element,
+	// so use "detach" method as fast way to get rid of the element
+	elem.detach();
+
+	return display;
+}
+
+/**
+ * Try to determine the default display value of an element
+ * @param {String} nodeName
+ */
+function defaultDisplay( nodeName ) {
+	var doc = document,
+		display = elemdisplay[ nodeName ];
+
+	if ( !display ) {
+		display = actualDisplay( nodeName, doc );
+
+		// If the simple way fails, read from inside an iframe
+		if ( display === "none" || !display ) {
+
+			// Use the already-created iframe if possible
+			iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
+
+			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+			doc = iframe[ 0 ].contentDocument;
+
+			// Support: IE
+			doc.write();
+			doc.close();
+
+			display = actualDisplay( nodeName, doc );
+			iframe.detach();
+		}
+
+		// Store the correct default display
+		elemdisplay[ nodeName ] = display;
+	}
+
+	return display;
+}
+var rmargin = (/^margin/);
+
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+		// Support: IE<=11+, Firefox<=30+ (#15098, #14150)
+		// IE throws on elements created in popups
+		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+		if ( elem.ownerDocument.defaultView.opener ) {
+			return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
+		}
+
+		return window.getComputedStyle( elem, null );
+	};
+
+
+
+function curCSS( elem, name, computed ) {
+	var width, minWidth, maxWidth, ret,
+		style = elem.style;
+
+	computed = computed || getStyles( elem );
+
+	// Support: IE9
+	// getPropertyValue is only needed for .css('filter') (#12537)
+	if ( computed ) {
+		ret = computed.getPropertyValue( name ) || computed[ name ];
+	}
+
+	if ( computed ) {
+
+		if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+			ret = jQuery.style( elem, name );
+		}
+
+		// Support: iOS < 6
+		// A tribute to the "awesome hack by Dean Edwards"
+		// iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+		// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+		if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+			// Remember the original values
+			width = style.width;
+			minWidth = style.minWidth;
+			maxWidth = style.maxWidth;
+
+			// Put in the new values to get a computed value out
+			style.minWidth = style.maxWidth = style.width = ret;
+			ret = computed.width;
+
+			// Revert the changed values
+			style.width = width;
+			style.minWidth = minWidth;
+			style.maxWidth = maxWidth;
+		}
+	}
+
+	return ret !== undefined ?
+		// Support: IE
+		// IE returns zIndex value as an integer.
+		ret + "" :
+		ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+	// Define the hook, we'll check on the first run if it's really needed.
+	return {
+		get: function() {
+			if ( conditionFn() ) {
+				// Hook not needed (or it's not possible to use it due
+				// to missing dependency), remove it.
+				delete this.get;
+				return;
+			}
+
+			// Hook needed; redefine it so that the support test is not executed again.
+			return (this.get = hookFn).apply( this, arguments );
+		}
+	};
+}
+
+
+(function() {
+	var pixelPositionVal, boxSizingReliableVal,
+		docElem = document.documentElement,
+		container = document.createElement( "div" ),
+		div = document.createElement( "div" );
+
+	if ( !div.style ) {
+		return;
+	}
+
+	// Support: IE9-11+
+	// Style of cloned element affects source element cloned (#8908)
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" +
+		"position:absolute";
+	container.appendChild( div );
+
+	// Executing both pixelPosition & boxSizingReliable tests require only one layout
+	// so they're executed at the same time to save the second computation.
+	function computePixelPositionAndBoxSizingReliable() {
+		div.style.cssText =
+			// Support: Firefox<29, Android 2.3
+			// Vendor-prefix box-sizing
+			"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
+			"box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
+			"border:1px;padding:1px;width:4px;position:absolute";
+		div.innerHTML = "";
+		docElem.appendChild( container );
+
+		var divStyle = window.getComputedStyle( div, null );
+		pixelPositionVal = divStyle.top !== "1%";
+		boxSizingReliableVal = divStyle.width === "4px";
+
+		docElem.removeChild( container );
+	}
+
+	// Support: node.js jsdom
+	// Don't assume that getComputedStyle is a property of the global object
+	if ( window.getComputedStyle ) {
+		jQuery.extend( support, {
+			pixelPosition: function() {
+
+				// This test is executed only once but we still do memoizing
+				// since we can use the boxSizingReliable pre-computing.
+				// No need to check if the test was already performed, though.
+				computePixelPositionAndBoxSizingReliable();
+				return pixelPositionVal;
+			},
+			boxSizingReliable: function() {
+				if ( boxSizingReliableVal == null ) {
+					computePixelPositionAndBoxSizingReliable();
+				}
+				return boxSizingReliableVal;
+			},
+			reliableMarginRight: function() {
+
+				// Support: Android 2.3
+				// Check if div with explicit width and no margin-right incorrectly
+				// gets computed margin-right based on width of container. (#3333)
+				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+				// This support function is only executed once so no memoizing is needed.
+				var ret,
+					marginDiv = div.appendChild( document.createElement( "div" ) );
+
+				// Reset CSS: box-sizing; display; margin; border; padding
+				marginDiv.style.cssText = div.style.cssText =
+					// Support: Firefox<29, Android 2.3
+					// Vendor-prefix box-sizing
+					"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
+					"box-sizing:content-box;display:block;margin:0;border:0;padding:0";
+				marginDiv.style.marginRight = marginDiv.style.width = "0";
+				div.style.width = "1px";
+				docElem.appendChild( container );
+
+				ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );
+
+				docElem.removeChild( container );
+				div.removeChild( marginDiv );
+
+				return ret;
+			}
+		});
+	}
+})();
+
+
+// A method for quickly swapping in/out CSS properties to get correct calculations.
+jQuery.swap = function( elem, options, callback, args ) {
+	var ret, name,
+		old = {};
+
+	// Remember the old values, and insert the new ones
+	for ( name in options ) {
+		old[ name ] = elem.style[ name ];
+		elem.style[ name ] = options[ name ];
+	}
+
+	ret = callback.apply( elem, args || [] );
+
+	// Revert the old values
+	for ( name in options ) {
+		elem.style[ name ] = old[ name ];
+	}
+
+	return ret;
+};
+
+
+var
+	// Swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
+	rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: "0",
+		fontWeight: "400"
+	},
+
+	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
+
+// Return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( style, name ) {
+
+	// Shortcut for names that are not vendor prefixed
+	if ( name in style ) {
+		return name;
+	}
+
+	// Check for vendor prefixed names
+	var capName = name[0].toUpperCase() + name.slice(1),
+		origName = name,
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in style ) {
+			return name;
+		}
+	}
+
+	return origName;
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+	var matches = rnumsplit.exec( value );
+	return matches ?
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+		value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+	var i = extra === ( isBorderBox ? "border" : "content" ) ?
+		// If we already have the right measurement, avoid augmentation
+		4 :
+		// Otherwise initialize for horizontal or vertical properties
+		name === "width" ? 1 : 0,
+
+		val = 0;
+
+	for ( ; i < 4; i += 2 ) {
+		// Both box models exclude margin, so add it if we want it
+		if ( extra === "margin" ) {
+			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+		}
+
+		if ( isBorderBox ) {
+			// border-box includes padding, so remove it if we want content
+			if ( extra === "content" ) {
+				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// At this point, extra isn't border nor margin, so remove border
+			if ( extra !== "margin" ) {
+				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		} else {
+			// At this point, extra isn't content, so add padding
+			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// At this point, extra isn't content nor padding, so add border
+			if ( extra !== "padding" ) {
+				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+	// Start with offset property, which is equivalent to the border-box value
+	var valueIsBorderBox = true,
+		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+		styles = getStyles( elem ),
+		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+	// Some non-html elements return undefined for offsetWidth, so check for null/undefined
+	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+	if ( val <= 0 || val == null ) {
+		// Fall back to computed then uncomputed css if necessary
+		val = curCSS( elem, name, styles );
+		if ( val < 0 || val == null ) {
+			val = elem.style[ name ];
+		}
+
+		// Computed unit is not pixels. Stop here and return.
+		if ( rnumnonpx.test(val) ) {
+			return val;
+		}
+
+		// Check for style in case a browser which returns unreliable values
+		// for getComputedStyle silently falls back to the reliable elem.style
+		valueIsBorderBox = isBorderBox &&
+			( support.boxSizingReliable() || val === elem.style[ name ] );
+
+		// Normalize "", auto, and prepare for extra
+		val = parseFloat( val ) || 0;
+	}
+
+	// Use the active box-sizing model to add/subtract irrelevant styles
+	return ( val +
+		augmentWidthOrHeight(
+			elem,
+			name,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles
+		)
+	) + "px";
+}
+
+function showHide( elements, show ) {
+	var display, elem, hidden,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+
+		values[ index ] = data_priv.get( elem, "olddisplay" );
+		display = elem.style.display;
+		if ( show ) {
+			// Reset the inline display of this element to learn if it is
+			// being hidden by cascaded rules or not
+			if ( !values[ index ] && display === "none" ) {
+				elem.style.display = "";
+			}
+
+			// Set elements which have been overridden with display: none
+			// in a stylesheet to whatever the default browser style is
+			// for such an element
+			if ( elem.style.display === "" && isHidden( elem ) ) {
+				values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) );
+			}
+		} else {
+			hidden = isHidden( elem );
+
+			if ( display !== "none" || !hidden ) {
+				data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
+			}
+		}
+	}
+
+	// Set the display of most of the elements in a second loop
+	// to avoid the constant reflow
+	for ( index = 0; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+			elem.style.display = show ? values[ index ] || "" : "none";
+		}
+	}
+
+	return elements;
+}
+
+jQuery.extend({
+
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Don't automatically add "px" to these possibly-unitless properties
+	cssNumber: {
+		"columnCount": true,
+		"fillOpacity": true,
+		"flexGrow": true,
+		"flexShrink": true,
+		"fontWeight": true,
+		"lineHeight": true,
+		"opacity": true,
+		"order": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		"float": "cssFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = jQuery.camelCase( name ),
+			style = elem.style;
+
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+
+		// Gets hook for the prefixed version, then unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// Convert "+=" or "-=" to relative numbers (#7345)
+			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that null and NaN values aren't set (#7116)
+			if ( value == null || value !== value ) {
+				return;
+			}
+
+			// If a number, add 'px' to the (except for certain CSS properties)
+			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+				value += "px";
+			}
+
+			// Support: IE9-11+
+			// background-* props affect original clone's values
+			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+				style[ name ] = value;
+			}
+
+		} else {
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var val, num, hooks,
+			origName = jQuery.camelCase( name );
+
+		// Make sure that we're working with the right name
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+
+		// Try prefixed name followed by the unprefixed name
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		// Convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Make numeric if forced or a qualifier was provided and val looks numeric
+		if ( extra === "" || extra ) {
+			num = parseFloat( val );
+			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
+		}
+		return val;
+	}
+});
+
+jQuery.each([ "height", "width" ], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+
+				// Certain elements can have dimension info if we invisibly show them
+				// but it must have a current display style that would benefit
+				return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
+					jQuery.swap( elem, cssShow, function() {
+						return getWidthOrHeight( elem, name, extra );
+					}) :
+					getWidthOrHeight( elem, name, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var styles = extra && getStyles( elem );
+			return setPositiveNumber( elem, value, extra ?
+				augmentWidthOrHeight(
+					elem,
+					name,
+					extra,
+					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+					styles
+				) : 0
+			);
+		}
+	};
+});
+
+// Support: Android 2.3
+jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
+	function( elem, computed ) {
+		if ( computed ) {
+			return jQuery.swap( elem, { "display": "inline-block" },
+				curCSS, [ elem, "marginRight" ] );
+		}
+	}
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each({
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// Assumes a single number if not a string
+				parts = typeof value === "string" ? value.split(" ") : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( !rmargin.test( prefix ) ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+});
+
+jQuery.fn.extend({
+	css: function( name, value ) {
+		return access( this, function( elem, name, value ) {
+			var styles, len,
+				map = {},
+				i = 0;
+
+			if ( jQuery.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	},
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		if ( typeof state === "boolean" ) {
+			return state ? this.show() : this.hide();
+		}
+
+		return this.each(function() {
+			if ( isHidden( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		});
+	}
+});
+
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || "swing";
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			if ( tween.elem[ tween.prop ] != null &&
+				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// Passing an empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails.
+			// Simple values such as "10px" are parsed to Float;
+			// complex values such as "rotate(1rad)" are returned as-is.
+			result = jQuery.css( tween.elem, tween.prop, "" );
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+			// Use step hook for back compat.
+			// Use cssHook if its there.
+			// Use .style if available and use plain properties where available.
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Support: IE9
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p * Math.PI ) / 2;
+	}
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+	fxNow, timerId,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
+	rrun = /queueHooks$/,
+	animationPrefilters = [ defaultPrefilter ],
+	tweeners = {
+		"*": [ function( prop, value ) {
+			var tween = this.createTween( prop, value ),
+				target = tween.cur(),
+				parts = rfxnum.exec( value ),
+				unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+				// Starting value computation is required for potential unit mismatches
+				start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
+					rfxnum.exec( jQuery.css( tween.elem, prop ) ),
+				scale = 1,
+				maxIterations = 20;
+
+			if ( start && start[ 3 ] !== unit ) {
+				// Trust units reported by jQuery.css
+				unit = unit || start[ 3 ];
+
+				// Make sure we update the tween properties later on
+				parts = parts || [];
+
+				// Iteratively approximate from a nonzero starting point
+				start = +target || 1;
+
+				do {
+					// If previous iteration zeroed out, double until we get *something*.
+					// Use string for doubling so we don't accidentally see scale as unchanged below
+					scale = scale || ".5";
+
+					// Adjust and apply
+					start = start / scale;
+					jQuery.style( tween.elem, prop, start + unit );
+
+				// Update scale, tolerating zero or NaN from tween.cur(),
+				// break the loop if scale is unchanged or perfect, or if we've just had enough
+				} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+			}
+
+			// Update tween properties
+			if ( parts ) {
+				start = tween.start = +start || +target || 0;
+				tween.unit = unit;
+				// If a +=/-= token was provided, we're doing a relative animation
+				tween.end = parts[ 1 ] ?
+					start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
+					+parts[ 2 ];
+			}
+
+			return tween;
+		} ]
+	};
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	setTimeout(function() {
+		fxNow = undefined;
+	});
+	return ( fxNow = jQuery.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		i = 0,
+		attrs = { height: type };
+
+	// If we include width, step value is 1 to do all cssExpand values,
+	// otherwise step value is 2 to skip over Left and Right
+	includeWidth = includeWidth ? 1 : 0;
+	for ( ; i < 4 ; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+function createTween( value, prop, animation ) {
+	var tween,
+		collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+		index = 0,
+		length = collection.length;
+	for ( ; index < length; index++ ) {
+		if ( (tween = collection[ index ].call( animation, prop, value )) ) {
+
+			// We're done with this property
+			return tween;
+		}
+	}
+}
+
+function defaultPrefilter( elem, props, opts ) {
+	/* jshint validthis: true */
+	var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
+		anim = this,
+		orig = {},
+		style = elem.style,
+		hidden = elem.nodeType && isHidden( elem ),
+		dataShow = data_priv.get( elem, "fxshow" );
+
+	// Handle queue: false promises
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always(function() {
+			// Ensure the complete handler is called before this completes
+			anim.always(function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			});
+		});
+	}
+
+	// Height/width overflow pass
+	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+		// Make sure that nothing sneaks out
+		// Record all 3 overflow attributes because IE9-10 do not
+		// change the overflow attribute when overflowX and
+		// overflowY are set to the same value
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Set display property to inline-block for height/width
+		// animations on inline elements that are having width/height animated
+		display = jQuery.css( elem, "display" );
+
+		// Test default display if display is currently "none"
+		checkDisplay = display === "none" ?
+			data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
+
+		if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
+			style.display = "inline-block";
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		anim.always(function() {
+			style.overflow = opts.overflow[ 0 ];
+			style.overflowX = opts.overflow[ 1 ];
+			style.overflowY = opts.overflow[ 2 ];
+		});
+	}
+
+	// show/hide pass
+	for ( prop in props ) {
+		value = props[ prop ];
+		if ( rfxtypes.exec( value ) ) {
+			delete props[ prop ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+
+				// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
+				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+					hidden = true;
+				} else {
+					continue;
+				}
+			}
+			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+
+		// Any non-fx value stops us from restoring the original display value
+		} else {
+			display = undefined;
+		}
+	}
+
+	if ( !jQuery.isEmptyObject( orig ) ) {
+		if ( dataShow ) {
+			if ( "hidden" in dataShow ) {
+				hidden = dataShow.hidden;
+			}
+		} else {
+			dataShow = data_priv.access( elem, "fxshow", {} );
+		}
+
+		// Store state if its toggle - enables .stop().toggle() to "reverse"
+		if ( toggle ) {
+			dataShow.hidden = !hidden;
+		}
+		if ( hidden ) {
+			jQuery( elem ).show();
+		} else {
+			anim.done(function() {
+				jQuery( elem ).hide();
+			});
+		}
+		anim.done(function() {
+			var prop;
+
+			data_priv.remove( elem, "fxshow" );
+			for ( prop in orig ) {
+				jQuery.style( elem, prop, orig[ prop ] );
+			}
+		});
+		for ( prop in orig ) {
+			tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+
+			if ( !( prop in dataShow ) ) {
+				dataShow[ prop ] = tween.start;
+				if ( hidden ) {
+					tween.end = tween.start;
+					tween.start = prop === "width" || prop === "height" ? 1 : 0;
+				}
+			}
+		}
+
+	// If this is a noop like .hide().hide(), restore an overwritten display value
+	} else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
+		style.display = display;
+	}
+}
+
+function propFilter( props, specialEasing ) {
+	var index, name, easing, value, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = jQuery.camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( jQuery.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// Not quite $.extend, this won't overwrite existing keys.
+			// Reusing 'index' because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = animationPrefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+			// Don't match elem in the :animated selector
+			delete tick.elem;
+		}),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+				// Support: Android 2.3
+				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length ; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ]);
+
+			if ( percent < 1 && length ) {
+				return remaining;
+			} else {
+				deferred.resolveWith( elem, [ animation ] );
+				return false;
+			}
+		},
+		animation = deferred.promise({
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, { specialEasing: {} }, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+					// If we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length ; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// Resolve when we played the last frame; otherwise, reject
+				if ( gotoEnd ) {
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		}),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length ; index++ ) {
+		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			return result;
+		}
+	}
+
+	jQuery.map( props, createTween, animation );
+
+	if ( jQuery.isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		})
+	);
+
+	// attach callbacks from options
+	return animation.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+	tweener: function( props, callback ) {
+		if ( jQuery.isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.split(" ");
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length ; index++ ) {
+			prop = props[ index ];
+			tweeners[ prop ] = tweeners[ prop ] || [];
+			tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			animationPrefilters.unshift( callback );
+		} else {
+			animationPrefilters.push( callback );
+		}
+	}
+});
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			jQuery.isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+	};
+
+	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+	// Normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( jQuery.isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.fn.extend({
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// Show any hidden elements after setting opacity to 0
+		return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+			// Animate to the value specified
+			.end().animate({ opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+				// Empty animations, or finishing resolves immediately
+				if ( empty || data_priv.get( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each(function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = data_priv.get( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Start the next in the queue if the last step wasn't forced.
+			// Timers currently will call their complete callbacks, which
+			// will dequeue but only if they were gotoEnd.
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		});
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each(function() {
+			var index,
+				data = data_priv.get( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// Enable finishing flag on private data
+			data.finish = true;
+
+			// Empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.stop ) {
+				hooks.stop.call( this, true );
+			}
+
+			// Look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// Turn off finishing flag
+			delete data.finish;
+		});
+	}
+});
+
+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+});
+
+// Generate shortcuts for custom animations
+jQuery.each({
+	slideDown: genFx("show"),
+	slideUp: genFx("hide"),
+	slideToggle: genFx("toggle"),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+});
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+	var timer,
+		i = 0,
+		timers = jQuery.timers;
+
+	fxNow = jQuery.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+		// Checks the timer has not already been removed
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	jQuery.timers.push( timer );
+	if ( timer() ) {
+		jQuery.fx.start();
+	} else {
+		jQuery.timers.pop();
+	}
+};
+
+jQuery.fx.interval = 13;
+
+jQuery.fx.start = function() {
+	if ( !timerId ) {
+		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+	}
+};
+
+jQuery.fx.stop = function() {
+	clearInterval( timerId );
+	timerId = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+	// Default speed
+	_default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+	type = type || "fx";
+
+	return this.queue( type, function( next, hooks ) {
+		var timeout = setTimeout( next, time );
+		hooks.stop = function() {
+			clearTimeout( timeout );
+		};
+	});
+};
+
+
+(function() {
+	var input = document.createElement( "input" ),
+		select = document.createElement( "select" ),
+		opt = select.appendChild( document.createElement( "option" ) );
+
+	input.type = "checkbox";
+
+	// Support: iOS<=5.1, Android<=4.2+
+	// Default value for a checkbox should be "on"
+	support.checkOn = input.value !== "";
+
+	// Support: IE<=11+
+	// Must access selectedIndex to make default options select
+	support.optSelected = opt.selected;
+
+	// Support: Android<=2.3
+	// Options inside disabled selects are incorrectly marked as disabled
+	select.disabled = true;
+	support.optDisabled = !opt.disabled;
+
+	// Support: IE<=11+
+	// An input loses its value after becoming a radio
+	input = document.createElement( "input" );
+	input.value = "t";
+	input.type = "radio";
+	support.radioValue = input.value === "t";
+})();
+
+
+var nodeHook, boolHook,
+	attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend({
+	attr: function( name, value ) {
+		return access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each(function() {
+			jQuery.removeAttr( this, name );
+		});
+	}
+});
+
+jQuery.extend({
+	attr: function( elem, name, value ) {
+		var hooks, ret,
+			nType = elem.nodeType;
+
+		// don't get/set attributes on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === strundefined ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		// All attributes are lowercase
+		// Grab necessary hook if one is defined
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+			name = name.toLowerCase();
+			hooks = jQuery.attrHooks[ name ] ||
+				( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
+		}
+
+		if ( value !== undefined ) {
+
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+
+			} else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				elem.setAttribute( name, value + "" );
+				return value;
+			}
+
+		} else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+			return ret;
+
+		} else {
+			ret = jQuery.find.attr( elem, name );
+
+			// Non-existent attributes return null, we normalize to undefined
+			return ret == null ?
+				undefined :
+				ret;
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name, propName,
+			i = 0,
+			attrNames = value && value.match( rnotwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( (name = attrNames[i++]) ) {
+				propName = jQuery.propFix[ name ] || name;
+
+				// Boolean attributes get special treatment (#10870)
+				if ( jQuery.expr.match.bool.test( name ) ) {
+					// Set corresponding property to false
+					elem[ propName ] = false;
+				}
+
+				elem.removeAttribute( name );
+			}
+		}
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !support.radioValue && value === "radio" &&
+					jQuery.nodeName( elem, "input" ) ) {
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	}
+});
+
+// Hooks for boolean attributes
+boolHook = {
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else {
+			elem.setAttribute( name, name );
+		}
+		return name;
+	}
+};
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+	var getter = attrHandle[ name ] || jQuery.find.attr;
+
+	attrHandle[ name ] = function( elem, name, isXML ) {
+		var ret, handle;
+		if ( !isXML ) {
+			// Avoid an infinite loop by temporarily removing this function from the getter
+			handle = attrHandle[ name ];
+			attrHandle[ name ] = ret;
+			ret = getter( elem, name, isXML ) != null ?
+				name.toLowerCase() :
+				null;
+			attrHandle[ name ] = handle;
+		}
+		return ret;
+	};
+});
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i;
+
+jQuery.fn.extend({
+	prop: function( name, value ) {
+		return access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		return this.each(function() {
+			delete this[ jQuery.propFix[ name ] || name ];
+		});
+	}
+});
+
+jQuery.extend({
+	propFix: {
+		"for": "htmlFor",
+		"class": "className"
+	},
+
+	prop: function( elem, name, value ) {
+		var ret, hooks, notxml,
+			nType = elem.nodeType;
+
+		// Don't get/set properties on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		if ( notxml ) {
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
+				ret :
+				( elem[ name ] = value );
+
+		} else {
+			return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
+				ret :
+				elem[ name ];
+		}
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+				return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ?
+					elem.tabIndex :
+					-1;
+			}
+		}
+	}
+});
+
+if ( !support.optSelected ) {
+	jQuery.propHooks.selected = {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+			if ( parent && parent.parentNode ) {
+				parent.parentNode.selectedIndex;
+			}
+			return null;
+		}
+	};
+}
+
+jQuery.each([
+	"tabIndex",
+	"readOnly",
+	"maxLength",
+	"cellSpacing",
+	"cellPadding",
+	"rowSpan",
+	"colSpan",
+	"useMap",
+	"frameBorder",
+	"contentEditable"
+], function() {
+	jQuery.propFix[ this.toLowerCase() ] = this;
+});
+
+
+
+
+var rclass = /[\t\r\n\f]/g;
+
+jQuery.fn.extend({
+	addClass: function( value ) {
+		var classes, elem, cur, clazz, j, finalValue,
+			proceed = typeof value === "string" && value,
+			i = 0,
+			len = this.length;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).addClass( value.call( this, j, this.className ) );
+			});
+		}
+
+		if ( proceed ) {
+			// The disjunction here is for better compressibility (see removeClass)
+			classes = ( value || "" ).match( rnotwhite ) || [];
+
+			for ( ; i < len; i++ ) {
+				elem = this[ i ];
+				cur = elem.nodeType === 1 && ( elem.className ?
+					( " " + elem.className + " " ).replace( rclass, " " ) :
+					" "
+				);
+
+				if ( cur ) {
+					j = 0;
+					while ( (clazz = classes[j++]) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+
+					// only assign if different to avoid unneeded rendering.
+					finalValue = jQuery.trim( cur );
+					if ( elem.className !== finalValue ) {
+						elem.className = finalValue;
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, clazz, j, finalValue,
+			proceed = arguments.length === 0 || typeof value === "string" && value,
+			i = 0,
+			len = this.length;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, this.className ) );
+			});
+		}
+		if ( proceed ) {
+			classes = ( value || "" ).match( rnotwhite ) || [];
+
+			for ( ; i < len; i++ ) {
+				elem = this[ i ];
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 && ( elem.className ?
+					( " " + elem.className + " " ).replace( rclass, " " ) :
+					""
+				);
+
+				if ( cur ) {
+					j = 0;
+					while ( (clazz = classes[j++]) ) {
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = value ? jQuery.trim( cur ) : "";
+					if ( elem.className !== finalValue ) {
+						elem.className = finalValue;
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value;
+
+		if ( typeof stateVal === "boolean" && type === "string" ) {
+			return stateVal ? this.addClass( value ) : this.removeClass( value );
+		}
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( i ) {
+				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+			});
+		}
+
+		return this.each(function() {
+			if ( type === "string" ) {
+				// Toggle individual class names
+				var className,
+					i = 0,
+					self = jQuery( this ),
+					classNames = value.match( rnotwhite ) || [];
+
+				while ( (className = classNames[ i++ ]) ) {
+					// Check each className given, space separated list
+					if ( self.hasClass( className ) ) {
+						self.removeClass( className );
+					} else {
+						self.addClass( className );
+					}
+				}
+
+			// Toggle whole class name
+			} else if ( type === strundefined || type === "boolean" ) {
+				if ( this.className ) {
+					// store className if set
+					data_priv.set( this, "__className__", this.className );
+				}
+
+				// If the element has a class name or if we're passed `false`,
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || "";
+			}
+		});
+	},
+
+	hasClass: function( selector ) {
+		var className = " " + selector + " ",
+			i = 0,
+			l = this.length;
+		for ( ; i < l; i++ ) {
+			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+				return true;
+			}
+		}
+
+		return false;
+	}
+});
+
+
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend({
+	val: function( value ) {
+		var hooks, ret, isFunction,
+			elem = this[0];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				return typeof ret === "string" ?
+					// Handle most common string cases
+					ret.replace(rreturn, "") :
+					// Handle cases where value is null/undef or number
+					ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		isFunction = jQuery.isFunction( value );
+
+		return this.each(function( i ) {
+			var val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, jQuery( this ).val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+
+			} else if ( typeof val === "number" ) {
+				val += "";
+
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map( val, function( value ) {
+					return value == null ? "" : value + "";
+				});
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	valHooks: {
+		option: {
+			get: function( elem ) {
+				var val = jQuery.find.attr( elem, "value" );
+				return val != null ?
+					val :
+					// Support: IE10-11+
+					// option.text throws exceptions (#14686, #14858)
+					jQuery.trim( jQuery.text( elem ) );
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one" || index < 0,
+					values = one ? null : [],
+					max = one ? index + 1 : options.length,
+					i = index < 0 ?
+						max :
+						one ? index : 0;
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// IE6-9 doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+							// Don't return options that are disabled or in a disabled optgroup
+							( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) &&
+							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var optionSet, option,
+					options = elem.options,
+					values = jQuery.makeArray( value ),
+					i = options.length;
+
+				while ( i-- ) {
+					option = options[ i ];
+					if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {
+						optionSet = true;
+					}
+				}
+
+				// Force browsers to behave consistently when non-matching value is set
+				if ( !optionSet ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	}
+});
+
+// Radios and checkboxes getter/setter
+jQuery.each([ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+			}
+		}
+	};
+	if ( !support.checkOn ) {
+		jQuery.valHooks[ this ].get = function( elem ) {
+			return elem.getAttribute("value") === null ? "on" : elem.value;
+		};
+	}
+});
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+});
+
+jQuery.fn.extend({
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	},
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+	}
+});
+
+
+var nonce = jQuery.now();
+
+var rquery = (/\?/);
+
+
+
+// Support: Android 2.3
+// Workaround failure to string-cast null input
+jQuery.parseJSON = function( data ) {
+	return JSON.parse( data + "" );
+};
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+	var xml, tmp;
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+
+	// Support: IE9
+	try {
+		tmp = new DOMParser();
+		xml = tmp.parseFromString( data, "text/xml" );
+	} catch ( e ) {
+		xml = undefined;
+	}
+
+	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+		jQuery.error( "Invalid XML: " + data );
+	}
+	return xml;
+};
+
+
+var
+	rhash = /#.*$/,
+	rts = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+	rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat( "*" ),
+
+	// Document location
+	ajaxLocation = window.location.href,
+
+	// Segment location into parts
+	ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
+
+		if ( jQuery.isFunction( func ) ) {
+			// For each dataType in the dataTypeExpression
+			while ( (dataType = dataTypes[i++]) ) {
+				// Prepend if requested
+				if ( dataType[0] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
+
+				// Otherwise append
+				} else {
+					(structure[ dataType ] = structure[ dataType ] || []).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		});
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var ct, type, finalDataType, firstDataType,
+		contents = s.contents,
+		dataTypes = s.dataTypes;
+
+	// Remove auto dataType and get content-type in the process
+	while ( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+	var conv2, current, conv, tmp, prev,
+		converters = {},
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice();
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	current = dataTypes.shift();
+
+	// Convert to each sequential dataType
+	while ( current ) {
+
+		if ( s.responseFields[ current ] ) {
+			jqXHR[ s.responseFields[ current ] ] = response;
+		}
+
+		// Apply the dataFilter if provided
+		if ( !prev && isSuccess && s.dataFilter ) {
+			response = s.dataFilter( response, s.dataType );
+		}
+
+		prev = current;
+		current = dataTypes.shift();
+
+		if ( current ) {
+
+		// There's only work to do if current dataType is non-auto
+			if ( current === "*" ) {
+
+				current = prev;
+
+			// Convert response if prev dataType is non-auto and differs from current
+			} else if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split( " " );
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.unshift( tmp[ 1 ] );
+								}
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s[ "throws" ] ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return { state: "success", data: response };
+}
+
+jQuery.extend({
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: ajaxLocation,
+		type: "GET",
+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /xml/,
+			html: /html/,
+			json: /json/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText",
+			json: "responseJSON"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var transport,
+			// URL without anti-cache param
+			cacheURL,
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+			// timeout handle
+			timeoutTimer,
+			// Cross-domain detection vars
+			parts,
+			// To know if global events are to be dispatched
+			fireGlobals,
+			// Loop variable
+			i,
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+			// Callbacks context
+			callbackContext = s.context || s,
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+				jQuery( callbackContext ) :
+				jQuery.event,
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks("once memory"),
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+			// The jqXHR state
+			state = 0,
+			// Default abort message
+			strAbort = "canceled",
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( (match = rheaders.exec( responseHeadersString )) ) {
+								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match == null ? null : match;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					var lname = name.toLowerCase();
+					if ( !state ) {
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( state < 2 ) {
+							for ( code in map ) {
+								// Lazy-add the new callback in a way that preserves old ones
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						} else {
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR ).complete = completeDeferred.add;
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (prefilters might expect it)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" )
+			.replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
+
+		// A cross-domain request is in order when we have a protocol:host:port mismatch
+		if ( s.crossDomain == null ) {
+			parts = rurl.exec( s.url.toLowerCase() );
+			s.crossDomain = !!( parts &&
+				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
+			);
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( state === 2 ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+		fireGlobals = jQuery.event && s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger("ajaxStart");
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		cacheURL = s.url;
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+				s.url = rts.test( cacheURL ) ?
+
+					// If there is already a '_' parameter, set its value
+					cacheURL.replace( rts, "$1_=" + nonce++ ) :
+
+					// Otherwise add one to the end
+					cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
+			}
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// Aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = setTimeout(function() {
+					jqXHR.abort("timeout");
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+				// Propagate exception as error if not done
+				if ( state < 2 ) {
+					done( -1, e );
+				// Simply rethrow otherwise
+				} else {
+					throw e;
+				}
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Determine if successful
+			isSuccess = status >= 200 && status < 300 || status === 304;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// Convert no matter what (that way responseXXX fields are always set)
+			response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+			// If successful, handle type chaining
+			if ( isSuccess ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader("Last-Modified");
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader("etag");
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 || s.type === "HEAD" ) {
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					statusText = response.state;
+					success = response.data;
+					error = response.error;
+					isSuccess = !error;
+				}
+			} else {
+				// Extract error from statusText and normalize for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger("ajaxStop");
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	}
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+		// Shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		return jQuery.ajax({
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		});
+	};
+});
+
+
+jQuery._evalUrl = function( url ) {
+	return jQuery.ajax({
+		url: url,
+		type: "GET",
+		dataType: "script",
+		async: false,
+		global: false,
+		"throws": true
+	});
+};
+
+
+jQuery.fn.extend({
+	wrapAll: function( html ) {
+		var wrap;
+
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function( i ) {
+				jQuery( this ).wrapAll( html.call(this, i) );
+			});
+		}
+
+		if ( this[ 0 ] ) {
+
+			// The elements to wrap the target around
+			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+			if ( this[ 0 ].parentNode ) {
+				wrap.insertBefore( this[ 0 ] );
+			}
+
+			wrap.map(function() {
+				var elem = this;
+
+				while ( elem.firstElementChild ) {
+					elem = elem.firstElementChild;
+				}
+
+				return elem;
+			}).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function( i ) {
+				jQuery( this ).wrapInner( html.call(this, i) );
+			});
+		}
+
+		return this.each(function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		});
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each(function( i ) {
+			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+		});
+	},
+
+	unwrap: function() {
+		return this.parent().each(function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		}).end();
+	}
+});
+
+
+jQuery.expr.filters.hidden = function( elem ) {
+	// Support: Opera <= 12.12
+	// Opera reports offsetWidths and offsetHeights less than zero on some elements
+	return elem.offsetWidth <= 0 && elem.offsetHeight <= 0;
+};
+jQuery.expr.filters.visible = function( elem ) {
+	return !jQuery.expr.filters.hidden( elem );
+};
+
+
+
+
+var r20 = /%20/g,
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( jQuery.isArray( obj ) ) {
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+			}
+		});
+
+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, value ) {
+			// If value is a function, invoke it and return its value
+			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+		};
+
+	// Set traditional to true for jQuery <= 1.3.2 behavior.
+	if ( traditional === undefined ) {
+		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+	}
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		});
+
+	} else {
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" ).replace( r20, "+" );
+};
+
+jQuery.fn.extend({
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map(function() {
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		})
+		.filter(function() {
+			var type = this.type;
+
+			// Use .is( ":disabled" ) so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !rcheckableType.test( type ) );
+		})
+		.map(function( i, elem ) {
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val ) {
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					}) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		}).get();
+	}
+});
+
+
+jQuery.ajaxSettings.xhr = function() {
+	try {
+		return new XMLHttpRequest();
+	} catch( e ) {}
+};
+
+var xhrId = 0,
+	xhrCallbacks = {},
+	xhrSuccessStatus = {
+		// file protocol always yields status code 0, assume 200
+		0: 200,
+		// Support: IE9
+		// #1450: sometimes IE returns 1223 when it should be 204
+		1223: 204
+	},
+	xhrSupported = jQuery.ajaxSettings.xhr();
+
+// Support: IE9
+// Open requests must be manually aborted on unload (#5280)
+// See https://support.microsoft.com/kb/2856746 for more info
+if ( window.attachEvent ) {
+	window.attachEvent( "onunload", function() {
+		for ( var key in xhrCallbacks ) {
+			xhrCallbacks[ key ]();
+		}
+	});
+}
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport(function( options ) {
+	var callback;
+
+	// Cross domain only allowed if supported through XMLHttpRequest
+	if ( support.cors || xhrSupported && !options.crossDomain ) {
+		return {
+			send: function( headers, complete ) {
+				var i,
+					xhr = options.xhr(),
+					id = ++xhrId;
+
+				xhr.open( options.type, options.url, options.async, options.username, options.password );
+
+				// Apply custom fields if provided
+				if ( options.xhrFields ) {
+					for ( i in options.xhrFields ) {
+						xhr[ i ] = options.xhrFields[ i ];
+					}
+				}
+
+				// Override mime type if needed
+				if ( options.mimeType && xhr.overrideMimeType ) {
+					xhr.overrideMimeType( options.mimeType );
+				}
+
+				// X-Requested-With header
+				// For cross-domain requests, seeing as conditions for a preflight are
+				// akin to a jigsaw puzzle, we simply never set it to be sure.
+				// (it can always be set on a per-request basis or even using ajaxSetup)
+				// For same-domain requests, won't change header if already provided.
+				if ( !options.crossDomain && !headers["X-Requested-With"] ) {
+					headers["X-Requested-With"] = "XMLHttpRequest";
+				}
+
+				// Set headers
+				for ( i in headers ) {
+					xhr.setRequestHeader( i, headers[ i ] );
+				}
+
+				// Callback
+				callback = function( type ) {
+					return function() {
+						if ( callback ) {
+							delete xhrCallbacks[ id ];
+							callback = xhr.onload = xhr.onerror = null;
+
+							if ( type === "abort" ) {
+								xhr.abort();
+							} else if ( type === "error" ) {
+								complete(
+									// file: protocol always yields status 0; see #8605, #14207
+									xhr.status,
+									xhr.statusText
+								);
+							} else {
+								complete(
+									xhrSuccessStatus[ xhr.status ] || xhr.status,
+									xhr.statusText,
+									// Support: IE9
+									// Accessing binary-data responseText throws an exception
+									// (#11426)
+									typeof xhr.responseText === "string" ? {
+										text: xhr.responseText
+									} : undefined,
+									xhr.getAllResponseHeaders()
+								);
+							}
+						}
+					};
+				};
+
+				// Listen to events
+				xhr.onload = callback();
+				xhr.onerror = callback("error");
+
+				// Create the abort callback
+				callback = xhrCallbacks[ id ] = callback("abort");
+
+				try {
+					// Do send the request (this may raise an exception)
+					xhr.send( options.hasContent && options.data || null );
+				} catch ( e ) {
+					// #14683: Only rethrow if this hasn't been notified as an error yet
+					if ( callback ) {
+						throw e;
+					}
+				}
+			},
+
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+});
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup({
+	accepts: {
+		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /(?:java|ecma)script/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+});
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+	}
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+		var script, callback;
+		return {
+			send: function( _, complete ) {
+				script = jQuery("<script>").prop({
+					async: true,
+					charset: s.scriptCharset,
+					src: s.url
+				}).on(
+					"load error",
+					callback = function( evt ) {
+						script.remove();
+						callback = null;
+						if ( evt ) {
+							complete( evt.type === "error" ? 404 : 200, evt.type );
+						}
+					}
+				);
+				document.head.appendChild( script[ 0 ] );
+			},
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+});
+
+
+
+
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters["script json"] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always(function() {
+			// Restore preexisting value
+			window[ callbackName ] = overwritten;
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+				// make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		});
+
+		// Delegate to script
+		return "script";
+	}
+});
+
+
+
+
+// data: string of html
+// context (optional): If specified, the fragment will be created in this context, defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+	if ( typeof context === "boolean" ) {
+		keepScripts = context;
+		context = false;
+	}
+	context = context || document;
+
+	var parsed = rsingleTag.exec( data ),
+		scripts = !keepScripts && [];
+
+	// Single tag
+	if ( parsed ) {
+		return [ context.createElement( parsed[1] ) ];
+	}
+
+	parsed = jQuery.buildFragment( [ data ], context, scripts );
+
+	if ( scripts && scripts.length ) {
+		jQuery( scripts ).remove();
+	}
+
+	return jQuery.merge( [], parsed.childNodes );
+};
+
+
+// Keep a copy of the old load method
+var _load = jQuery.fn.load;
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+	if ( typeof url !== "string" && _load ) {
+		return _load.apply( this, arguments );
+	}
+
+	var selector, type, response,
+		self = this,
+		off = url.indexOf(" ");
+
+	if ( off >= 0 ) {
+		selector = jQuery.trim( url.slice( off ) );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( jQuery.isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax({
+			url: url,
+
+			// if "type" variable is undefined, then "GET" method will be used
+			type: type,
+			dataType: "html",
+			data: params
+		}).done(function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		}).complete( callback && function( jqXHR, status ) {
+			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+		});
+	}
+
+	return this;
+};
+
+
+
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
+	jQuery.fn[ type ] = function( fn ) {
+		return this.on( type, fn );
+	};
+});
+
+
+
+
+jQuery.expr.filters.animated = function( elem ) {
+	return jQuery.grep(jQuery.timers, function( fn ) {
+		return elem === fn.elem;
+	}).length;
+};
+
+
+
+
+var docElem = window.document.documentElement;
+
+/**
+ * Gets a window from an element
+ */
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
+}
+
+jQuery.offset = {
+	setOffset: function( elem, options, i ) {
+		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+			position = jQuery.css( elem, "position" ),
+			curElem = jQuery( elem ),
+			props = {};
+
+		// Set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		curOffset = curElem.offset();
+		curCSSTop = jQuery.css( elem, "top" );
+		curCSSLeft = jQuery.css( elem, "left" );
+		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+			( curCSSTop + curCSSLeft ).indexOf("auto") > -1;
+
+		// Need to be able to calculate position if either
+		// top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+			options = options.call( elem, i, curOffset );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+jQuery.fn.extend({
+	offset: function( options ) {
+		if ( arguments.length ) {
+			return options === undefined ?
+				this :
+				this.each(function( i ) {
+					jQuery.offset.setOffset( this, options, i );
+				});
+		}
+
+		var docElem, win,
+			elem = this[ 0 ],
+			box = { top: 0, left: 0 },
+			doc = elem && elem.ownerDocument;
+
+		if ( !doc ) {
+			return;
+		}
+
+		docElem = doc.documentElement;
+
+		// Make sure it's not a disconnected DOM node
+		if ( !jQuery.contains( docElem, elem ) ) {
+			return box;
+		}
+
+		// Support: BlackBerry 5, iOS 3 (original iPhone)
+		// If we don't have gBCR, just use 0,0 rather than error
+		if ( typeof elem.getBoundingClientRect !== strundefined ) {
+			box = elem.getBoundingClientRect();
+		}
+		win = getWindow( doc );
+		return {
+			top: box.top + win.pageYOffset - docElem.clientTop,
+			left: box.left + win.pageXOffset - docElem.clientLeft
+		};
+	},
+
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset,
+			elem = this[ 0 ],
+			parentOffset = { top: 0, left: 0 };
+
+		// Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+			// Assume getBoundingClientRect is there when computed position is fixed
+			offset = elem.getBoundingClientRect();
+
+		} else {
+			// Get *real* offsetParent
+			offsetParent = this.offsetParent();
+
+			// Get correct offsets
+			offset = this.offset();
+			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+				parentOffset = offsetParent.offset();
+			}
+
+			// Add offsetParent borders
+			parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+		}
+
+		// Subtract parent offsets and element margins
+		return {
+			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+		};
+	},
+
+	offsetParent: function() {
+		return this.map(function() {
+			var offsetParent = this.offsetParent || docElem;
+
+			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+
+			return offsetParent || docElem;
+		});
+	}
+});
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+	var top = "pageYOffset" === prop;
+
+	jQuery.fn[ method ] = function( val ) {
+		return access( this, function( elem, method, val ) {
+			var win = getWindow( elem );
+
+			if ( val === undefined ) {
+				return win ? win[ prop ] : elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : window.pageXOffset,
+					top ? val : window.pageYOffset
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length, null );
+	};
+});
+
+// Support: Safari<7+, Chrome<37+
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( i, prop ) {
+	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+		function( elem, computed ) {
+			if ( computed ) {
+				computed = curCSS( elem, prop );
+				// If curCSS returns percentage, fallback to offset
+				return rnumnonpx.test( computed ) ?
+					jQuery( elem ).position()[ prop ] + "px" :
+					computed;
+			}
+		}
+	);
+});
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+		// Margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( jQuery.isWindow( elem ) ) {
+					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+					// isn't a whole lot we can do. See pull request at this URL for discussion:
+					// https://github.com/jquery/jquery/pull/764
+					return elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+					// whichever is greatest
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable, null );
+		};
+	});
+});
+
+
+// The number of elements contained in the matched element set
+jQuery.fn.size = function() {
+	return this.length;
+};
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+	define( "jquery", [], function() {
+		return jQuery;
+	});
+}
+
+
+
+
+var
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+	if ( window.$ === jQuery ) {
+		window.$ = _$;
+	}
+
+	if ( deep && window.jQuery === jQuery ) {
+		window.jQuery = _jQuery;
+	}
+
+	return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( typeof noGlobal === strundefined ) {
+	window.jQuery = window.$ = jQuery;
+}
+
+
+
+
+return jQuery;
+
+}));
diff --git a/public/bower_components/json3/json3.js b/public/bower_components/json3/json3.js
new file mode 100644
index 0000000..4817c9e
--- /dev/null
+++ b/public/bower_components/json3/json3.js
@@ -0,0 +1,902 @@
+/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */
+;(function () {
+  // Detect the `define` function exposed by asynchronous module loaders. The
+  // strict `define` check is necessary for compatibility with `r.js`.
+  var isLoader = typeof define === "function" && define.amd;
+
+  // A set of types used to distinguish objects from primitives.
+  var objectTypes = {
+    "function": true,
+    "object": true
+  };
+
+  // Detect the `exports` object exposed by CommonJS implementations.
+  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;
+
+  // Use the `global` object exposed by Node (including Browserify via
+  // `insert-module-globals`), Narwhal, and Ringo as the default context,
+  // and the `window` object in browsers. Rhino exports a `global` function
+  // instead.
+  var root = objectTypes[typeof window] && window || this,
+      freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == "object" && global;
+
+  if (freeGlobal && (freeGlobal["global"] === freeGlobal || freeGlobal["window"] === freeGlobal || freeGlobal["self"] === freeGlobal)) {
+    root = freeGlobal;
+  }
+
+  // Public: Initializes JSON 3 using the given `context` object, attaching the
+  // `stringify` and `parse` functions to the specified `exports` object.
+  function runInContext(context, exports) {
+    context || (context = root["Object"]());
+    exports || (exports = root["Object"]());
+
+    // Native constructor aliases.
+    var Number = context["Number"] || root["Number"],
+        String = context["String"] || root["String"],
+        Object = context["Object"] || root["Object"],
+        Date = context["Date"] || root["Date"],
+        SyntaxError = context["SyntaxError"] || root["SyntaxError"],
+        TypeError = context["TypeError"] || root["TypeError"],
+        Math = context["Math"] || root["Math"],
+        nativeJSON = context["JSON"] || root["JSON"];
+
+    // Delegate to the native `stringify` and `parse` implementations.
+    if (typeof nativeJSON == "object" && nativeJSON) {
+      exports.stringify = nativeJSON.stringify;
+      exports.parse = nativeJSON.parse;
+    }
+
+    // Convenience aliases.
+    var objectProto = Object.prototype,
+        getClass = objectProto.toString,
+        isProperty, forEach, undef;
+
+    // Test the `Date#getUTC*` methods. Based on work by @Yaffle.
+    var isExtended = new Date(-3509827334573292);
+    try {
+      // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical
+      // results for certain dates in Opera >= 10.53.
+      isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 &&
+        // Safari < 2.0.2 stores the internal millisecond time value correctly,
+        // but clips the values returned by the date methods to the range of
+        // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]).
+        isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708;
+    } catch (exception) {}
+
+    // Internal: Determines whether the native `JSON.stringify` and `parse`
+    // implementations are spec-compliant. Based on work by Ken Snyder.
+    function has(name) {
+      if (has[name] !== undef) {
+        // Return cached feature test result.
+        return has[name];
+      }
+      var isSupported;
+      if (name == "bug-string-char-index") {
+        // IE <= 7 doesn't support accessing string characters using square
+        // bracket notation. IE 8 only supports this for primitives.
+        isSupported = "a"[0] != "a";
+      } else if (name == "json") {
+        // Indicates whether both `JSON.stringify` and `JSON.parse` are
+        // supported.
+        isSupported = has("json-stringify") && has("json-parse");
+      } else {
+        var value, serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';
+        // Test `JSON.stringify`.
+        if (name == "json-stringify") {
+          var stringify = exports.stringify, stringifySupported = typeof stringify == "function" && isExtended;
+          if (stringifySupported) {
+            // A test function object with a custom `toJSON` method.
+            (value = function () {
+              return 1;
+            }).toJSON = value;
+            try {
+              stringifySupported =
+                // Firefox 3.1b1 and b2 serialize string, number, and boolean
+                // primitives as object literals.
+                stringify(0) === "0" &&
+                // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object
+                // literals.
+                stringify(new Number()) === "0" &&
+                stringify(new String()) == '""' &&
+                // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or
+                // does not define a canonical JSON representation (this applies to
+                // objects with `toJSON` properties as well, *unless* they are nested
+                // within an object or array).
+                stringify(getClass) === undef &&
+                // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and
+                // FF 3.1b3 pass this test.
+                stringify(undef) === undef &&
+                // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s,
+                // respectively, if the value is omitted entirely.
+                stringify() === undef &&
+                // FF 3.1b1, 2 throw an error if the given value is not a number,
+                // string, array, object, Boolean, or `null` literal. This applies to
+                // objects with custom `toJSON` methods as well, unless they are nested
+                // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON`
+                // methods entirely.
+                stringify(value) === "1" &&
+                stringify([value]) == "[1]" &&
+                // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of
+                // `"[null]"`.
+                stringify([undef]) == "[null]" &&
+                // YUI 3.0.0b1 fails to serialize `null` literals.
+                stringify(null) == "null" &&
+                // FF 3.1b1, 2 halts serialization if an array contains a function:
+                // `[1, true, getClass, 1]` serializes as "[1,true,],". FF 3.1b3
+                // elides non-JSON values from objects and arrays, unless they
+                // define custom `toJSON` methods.
+                stringify([undef, getClass, null]) == "[null,null,null]" &&
+                // Simple serialization test. FF 3.1b1 uses Unicode escape sequences
+                // where character escape codes are expected (e.g., `\b` => `\u0008`).
+                stringify({ "a": [value, true, false, null, "\x00\b\n\f\r\t"] }) == serialized &&
+                // FF 3.1b1 and b2 ignore the `filter` and `width` arguments.
+                stringify(null, value) === "1" &&
+                stringify([1, 2], null, 1) == "[\n 1,\n 2\n]" &&
+                // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly
+                // serialize extended years.
+                stringify(new Date(-8.64e15)) == '"-271821-04-20T00:00:00.000Z"' &&
+                // The milliseconds are optional in ES 5, but required in 5.1.
+                stringify(new Date(8.64e15)) == '"+275760-09-13T00:00:00.000Z"' &&
+                // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative
+                // four-digit years instead of six-digit years. Credits: @Yaffle.
+                stringify(new Date(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' &&
+                // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond
+                // values less than 1000. Credits: @Yaffle.
+                stringify(new Date(-1)) == '"1969-12-31T23:59:59.999Z"';
+            } catch (exception) {
+              stringifySupported = false;
+            }
+          }
+          isSupported = stringifySupported;
+        }
+        // Test `JSON.parse`.
+        if (name == "json-parse") {
+          var parse = exports.parse;
+          if (typeof parse == "function") {
+            try {
+              // FF 3.1b1, b2 will throw an exception if a bare literal is provided.
+              // Conforming implementations should also coerce the initial argument to
+              // a string prior to parsing.
+              if (parse("0") === 0 && !parse(false)) {
+                // Simple parsing test.
+                value = parse(serialized);
+                var parseSupported = value["a"].length == 5 && value["a"][0] === 1;
+                if (parseSupported) {
+                  try {
+                    // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings.
+                    parseSupported = !parse('"\t"');
+                  } catch (exception) {}
+                  if (parseSupported) {
+                    try {
+                      // FF 4.0 and 4.0.1 allow leading `+` signs and leading
+                      // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow
+                      // certain octal literals.
+                      parseSupported = parse("01") !== 1;
+                    } catch (exception) {}
+                  }
+                  if (parseSupported) {
+                    try {
+                      // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal
+                      // points. These environments, along with FF 3.1b1 and 2,
+                      // also allow trailing commas in JSON objects and arrays.
+                      parseSupported = parse("1.") !== 1;
+                    } catch (exception) {}
+                  }
+                }
+              }
+            } catch (exception) {
+              parseSupported = false;
+            }
+          }
+          isSupported = parseSupported;
+        }
+      }
+      return has[name] = !!isSupported;
+    }
+
+    if (!has("json")) {
+      // Common `[[Class]]` name aliases.
+      var functionClass = "[object Function]",
+          dateClass = "[object Date]",
+          numberClass = "[object Number]",
+          stringClass = "[object String]",
+          arrayClass = "[object Array]",
+          booleanClass = "[object Boolean]";
+
+      // Detect incomplete support for accessing string characters by index.
+      var charIndexBuggy = has("bug-string-char-index");
+
+      // Define additional utility methods if the `Date` methods are buggy.
+      if (!isExtended) {
+        var floor = Math.floor;
+        // A mapping between the months of the year and the number of days between
+        // January 1st and the first of the respective month.
+        var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];
+        // Internal: Calculates the number of days between the Unix epoch and the
+        // first day of the given month.
+        var getDay = function (year, month) {
+          return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400);
+        };
+      }
+
+      // Internal: Determines if a property is a direct property of the given
+      // object. Delegates to the native `Object#hasOwnProperty` method.
+      if (!(isProperty = objectProto.hasOwnProperty)) {
+        isProperty = function (property) {
+          var members = {}, constructor;
+          if ((members.__proto__ = null, members.__proto__ = {
+            // The *proto* property cannot be set multiple times in recent
+            // versions of Firefox and SeaMonkey.
+            "toString": 1
+          }, members).toString != getClass) {
+            // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but
+            // supports the mutable *proto* property.
+            isProperty = function (property) {
+              // Capture and break the object's prototype chain (see section 8.6.2
+              // of the ES 5.1 spec). The parenthesized expression prevents an
+              // unsafe transformation by the Closure Compiler.
+              var original = this.__proto__, result = property in (this.__proto__ = null, this);
+              // Restore the original prototype chain.
+              this.__proto__ = original;
+              return result;
+            };
+          } else {
+            // Capture a reference to the top-level `Object` constructor.
+            constructor = members.constructor;
+            // Use the `constructor` property to simulate `Object#hasOwnProperty` in
+            // other environments.
+            isProperty = function (property) {
+              var parent = (this.constructor || constructor).prototype;
+              return property in this && !(property in parent && this[property] === parent[property]);
+            };
+          }
+          members = null;
+          return isProperty.call(this, property);
+        };
+      }
+
+      // Internal: Normalizes the `for...in` iteration algorithm across
+      // environments. Each enumerated key is yielded to a `callback` function.
+      forEach = function (object, callback) {
+        var size = 0, Properties, members, property;
+
+        // Tests for bugs in the current environment's `for...in` algorithm. The
+        // `valueOf` property inherits the non-enumerable flag from
+        // `Object.prototype` in older versions of IE, Netscape, and Mozilla.
+        (Properties = function () {
+          this.valueOf = 0;
+        }).prototype.valueOf = 0;
+
+        // Iterate over a new instance of the `Properties` class.
+        members = new Properties();
+        for (property in members) {
+          // Ignore all properties inherited from `Object.prototype`.
+          if (isProperty.call(members, property)) {
+            size++;
+          }
+        }
+        Properties = members = null;
+
+        // Normalize the iteration algorithm.
+        if (!size) {
+          // A list of non-enumerable properties inherited from `Object.prototype`.
+          members = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"];
+          // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable
+          // properties.
+          forEach = function (object, callback) {
+            var isFunction = getClass.call(object) == functionClass, property, length;
+            var hasProperty = !isFunction && typeof object.constructor != "function" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty;
+            for (property in object) {
+              // Gecko <= 1.0 enumerates the `prototype` property of functions under
+              // certain conditions; IE does not.
+              if (!(isFunction && property == "prototype") && hasProperty.call(object, property)) {
+                callback(property);
+              }
+            }
+            // Manually invoke the callback for each non-enumerable property.
+            for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property));
+          };
+        } else if (size == 2) {
+          // Safari <= 2.0.4 enumerates shadowed properties twice.
+          forEach = function (object, callback) {
+            // Create a set of iterated properties.
+            var members = {}, isFunction = getClass.call(object) == functionClass, property;
+            for (property in object) {
+              // Store each property name to prevent double enumeration. The
+              // `prototype` property of functions is not enumerated due to cross-
+              // environment inconsistencies.
+              if (!(isFunction && property == "prototype") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) {
+                callback(property);
+              }
+            }
+          };
+        } else {
+          // No bugs detected; use the standard `for...in` algorithm.
+          forEach = function (object, callback) {
+            var isFunction = getClass.call(object) == functionClass, property, isConstructor;
+            for (property in object) {
+              if (!(isFunction && property == "prototype") && isProperty.call(object, property) && !(isConstructor = property === "constructor")) {
+                callback(property);
+              }
+            }
+            // Manually invoke the callback for the `constructor` property due to
+            // cross-environment inconsistencies.
+            if (isConstructor || isProperty.call(object, (property = "constructor"))) {
+              callback(property);
+            }
+          };
+        }
+        return forEach(object, callback);
+      };
+
+      // Public: Serializes a JavaScript `value` as a JSON string. The optional
+      // `filter` argument may specify either a function that alters how object and
+      // array members are serialized, or an array of strings and numbers that
+      // indicates which properties should be serialized. The optional `width`
+      // argument may be either a string or number that specifies the indentation
+      // level of the output.
+      if (!has("json-stringify")) {
+        // Internal: A map of control characters and their escaped equivalents.
+        var Escapes = {
+          92: "\\\\",
+          34: '\\"',
+          8: "\\b",
+          12: "\\f",
+          10: "\\n",
+          13: "\\r",
+          9: "\\t"
+        };
+
+        // Internal: Converts `value` into a zero-padded string such that its
+        // length is at least equal to `width`. The `width` must be <= 6.
+        var leadingZeroes = "000000";
+        var toPaddedString = function (width, value) {
+          // The `|| 0` expression is necessary to work around a bug in
+          // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== "0"`.
+          return (leadingZeroes + (value || 0)).slice(-width);
+        };
+
+        // Internal: Double-quotes a string `value`, replacing all ASCII control
+        // characters (characters with code unit values between 0 and 31) with
+        // their escaped equivalents. This is an implementation of the
+        // `Quote(value)` operation defined in ES 5.1 section 15.12.3.
+        var unicodePrefix = "\\u00";
+        var quote = function (value) {
+          var result = '"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10;
+          var symbols = useCharIndex && (charIndexBuggy ? value.split("") : value);
+          for (; index < length; index++) {
+            var charCode = value.charCodeAt(index);
+            // If the character is a control character, append its Unicode or
+            // shorthand escape sequence; otherwise, append the character as-is.
+            switch (charCode) {
+              case 8: case 9: case 10: case 12: case 13: case 34: case 92:
+                result += Escapes[charCode];
+                break;
+              default:
+                if (charCode < 32) {
+                  result += unicodePrefix + toPaddedString(2, charCode.toString(16));
+                  break;
+                }
+                result += useCharIndex ? symbols[index] : value.charAt(index);
+            }
+          }
+          return result + '"';
+        };
+
+        // Internal: Recursively serializes an object. Implements the
+        // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations.
+        var serialize = function (property, object, callback, properties, whitespace, indentation, stack) {
+          var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result;
+          try {
+            // Necessary for host object support.
+            value = object[property];
+          } catch (exception) {}
+          if (typeof value == "object" && value) {
+            className = getClass.call(value);
+            if (className == dateClass && !isProperty.call(value, "toJSON")) {
+              if (value > -1 / 0 && value < 1 / 0) {
+                // Dates are serialized according to the `Date#toJSON` method
+                // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15
+                // for the ISO 8601 date time string format.
+                if (getDay) {
+                  // Manually compute the year, month, date, hours, minutes,
+                  // seconds, and milliseconds if the `getUTC*` methods are
+                  // buggy. Adapted from @Yaffle's `date-shim` project.
+                  date = floor(value / 864e5);
+                  for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++);
+                  for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++);
+                  date = 1 + date - getDay(year, month);
+                  // The `time` value specifies the time within the day (see ES
+                  // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used
+                  // to compute `A modulo B`, as the `%` operator does not
+                  // correspond to the `modulo` operation for negative numbers.
+                  time = (value % 864e5 + 864e5) % 864e5;
+                  // The hours, minutes, seconds, and milliseconds are obtained by
+                  // decomposing the time within the day. See section 15.9.1.10.
+                  hours = floor(time / 36e5) % 24;
+                  minutes = floor(time / 6e4) % 60;
+                  seconds = floor(time / 1e3) % 60;
+                  milliseconds = time % 1e3;
+                } else {
+                  year = value.getUTCFullYear();
+                  month = value.getUTCMonth();
+                  date = value.getUTCDate();
+                  hours = value.getUTCHours();
+                  minutes = value.getUTCMinutes();
+                  seconds = value.getUTCSeconds();
+                  milliseconds = value.getUTCMilliseconds();
+                }
+                // Serialize extended years correctly.
+                value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) +
+                  "-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) +
+                  // Months, dates, hours, minutes, and seconds should have two
+                  // digits; milliseconds should have three.
+                  "T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) +
+                  // Milliseconds are optional in ES 5.0, but required in 5.1.
+                  "." + toPaddedString(3, milliseconds) + "Z";
+              } else {
+                value = null;
+              }
+            } else if (typeof value.toJSON == "function" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, "toJSON"))) {
+              // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the
+              // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3
+              // ignores all `toJSON` methods on these objects unless they are
+              // defined directly on an instance.
+              value = value.toJSON(property);
+            }
+          }
+          if (callback) {
+            // If a replacement function was provided, call it to obtain the value
+            // for serialization.
+            value = callback.call(object, property, value);
+          }
+          if (value === null) {
+            return "null";
+          }
+          className = getClass.call(value);
+          if (className == booleanClass) {
+            // Booleans are represented literally.
+            return "" + value;
+          } else if (className == numberClass) {
+            // JSON numbers must be finite. `Infinity` and `NaN` are serialized as
+            // `"null"`.
+            return value > -1 / 0 && value < 1 / 0 ? "" + value : "null";
+          } else if (className == stringClass) {
+            // Strings are double-quoted and escaped.
+            return quote("" + value);
+          }
+          // Recursively serialize objects and arrays.
+          if (typeof value == "object") {
+            // Check for cyclic structures. This is a linear search; performance
+            // is inversely proportional to the number of unique nested objects.
+            for (length = stack.length; length--;) {
+              if (stack[length] === value) {
+                // Cyclic structures cannot be serialized by `JSON.stringify`.
+                throw TypeError();
+              }
+            }
+            // Add the object to the stack of traversed objects.
+            stack.push(value);
+            results = [];
+            // Save the current indentation level and indent one additional level.
+            prefix = indentation;
+            indentation += whitespace;
+            if (className == arrayClass) {
+              // Recursively serialize array elements.
+              for (index = 0, length = value.length; index < length; index++) {
+                element = serialize(index, value, callback, properties, whitespace, indentation, stack);
+                results.push(element === undef ? "null" : element);
+              }
+              result = results.length ? (whitespace ? "[\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "]" : ("[" + results.join(",") + "]")) : "[]";
+            } else {
+              // Recursively serialize object members. Members are selected from
+              // either a user-specified list of property names, or the object
+              // itself.
+              forEach(properties || value, function (property) {
+                var element = serialize(property, value, callback, properties, whitespace, indentation, stack);
+                if (element !== undef) {
+                  // According to ES 5.1 section 15.12.3: "If `gap` {whitespace}
+                  // is not the empty string, let `member` {quote(property) + ":"}
+                  // be the concatenation of `member` and the `space` character."
+                  // The "`space` character" refers to the literal space
+                  // character, not the `space` {width} argument provided to
+                  // `JSON.stringify`.
+                  results.push(quote(property) + ":" + (whitespace ? " " : "") + element);
+                }
+              });
+              result = results.length ? (whitespace ? "{\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "}" : ("{" + results.join(",") + "}")) : "{}";
+            }
+            // Remove the object from the traversed object stack.
+            stack.pop();
+            return result;
+          }
+        };
+
+        // Public: `JSON.stringify`. See ES 5.1 section 15.12.3.
+        exports.stringify = function (source, filter, width) {
+          var whitespace, callback, properties, className;
+          if (objectTypes[typeof filter] && filter) {
+            if ((className = getClass.call(filter)) == functionClass) {
+              callback = filter;
+            } else if (className == arrayClass) {
+              // Convert the property names array into a makeshift set.
+              properties = {};
+              for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1));
+            }
+          }
+          if (width) {
+            if ((className = getClass.call(width)) == numberClass) {
+              // Convert the `width` to an integer and create a string containing
+              // `width` number of space characters.
+              if ((width -= width % 1) > 0) {
+                for (whitespace = "", width > 10 && (width = 10); whitespace.length < width; whitespace += " ");
+              }
+            } else if (className == stringClass) {
+              whitespace = width.length <= 10 ? width : width.slice(0, 10);
+            }
+          }
+          // Opera <= 7.54u2 discards the values associated with empty string keys
+          // (`""`) only if they are used directly within an object member list
+          // (e.g., `!("" in { "": 1})`).
+          return serialize("", (value = {}, value[""] = source, value), callback, properties, whitespace, "", []);
+        };
+      }
+
+      // Public: Parses a JSON source string.
+      if (!has("json-parse")) {
+        var fromCharCode = String.fromCharCode;
+
+        // Internal: A map of escaped control characters and their unescaped
+        // equivalents.
+        var Unescapes = {
+          92: "\\",
+          34: '"',
+          47: "/",
+          98: "\b",
+          116: "\t",
+          110: "\n",
+          102: "\f",
+          114: "\r"
+        };
+
+        // Internal: Stores the parser state.
+        var Index, Source;
+
+        // Internal: Resets the parser state and throws a `SyntaxError`.
+        var abort = function () {
+          Index = Source = null;
+          throw SyntaxError();
+        };
+
+        // Internal: Returns the next token, or `"$"` if the parser has reached
+        // the end of the source string. A token may be a string, number, `null`
+        // literal, or Boolean literal.
+        var lex = function () {
+          var source = Source, length = source.length, value, begin, position, isSigned, charCode;
+          while (Index < length) {
+            charCode = source.charCodeAt(Index);
+            switch (charCode) {
+              case 9: case 10: case 13: case 32:
+                // Skip whitespace tokens, including tabs, carriage returns, line
+                // feeds, and space characters.
+                Index++;
+                break;
+              case 123: case 125: case 91: case 93: case 58: case 44:
+                // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at
+                // the current position.
+                value = charIndexBuggy ? source.charAt(Index) : source[Index];
+                Index++;
+                return value;
+              case 34:
+                // `"` delimits a JSON string; advance to the next character and
+                // begin parsing the string. String tokens are prefixed with the
+                // sentinel `@` character to distinguish them from punctuators and
+                // end-of-string tokens.
+                for (value = "@", Index++; Index < length;) {
+                  charCode = source.charCodeAt(Index);
+                  if (charCode < 32) {
+                    // Unescaped ASCII control characters (those with a code unit
+                    // less than the space character) are not permitted.
+                    abort();
+                  } else if (charCode == 92) {
+                    // A reverse solidus (`\`) marks the beginning of an escaped
+                    // control character (including `"`, `\`, and `/`) or Unicode
+                    // escape sequence.
+                    charCode = source.charCodeAt(++Index);
+                    switch (charCode) {
+                      case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114:
+                        // Revive escaped control characters.
+                        value += Unescapes[charCode];
+                        Index++;
+                        break;
+                      case 117:
+                        // `\u` marks the beginning of a Unicode escape sequence.
+                        // Advance to the first character and validate the
+                        // four-digit code point.
+                        begin = ++Index;
+                        for (position = Index + 4; Index < position; Index++) {
+                          charCode = source.charCodeAt(Index);
+                          // A valid sequence comprises four hexdigits (case-
+                          // insensitive) that form a single hexadecimal value.
+                          if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) {
+                            // Invalid Unicode escape sequence.
+                            abort();
+                          }
+                        }
+                        // Revive the escaped character.
+                        value += fromCharCode("0x" + source.slice(begin, Index));
+                        break;
+                      default:
+                        // Invalid escape sequence.
+                        abort();
+                    }
+                  } else {
+                    if (charCode == 34) {
+                      // An unescaped double-quote character marks the end of the
+                      // string.
+                      break;
+                    }
+                    charCode = source.charCodeAt(Index);
+                    begin = Index;
+                    // Optimize for the common case where a string is valid.
+                    while (charCode >= 32 && charCode != 92 && charCode != 34) {
+                      charCode = source.charCodeAt(++Index);
+                    }
+                    // Append the string as-is.
+                    value += source.slice(begin, Index);
+                  }
+                }
+                if (source.charCodeAt(Index) == 34) {
+                  // Advance to the next character and return the revived string.
+                  Index++;
+                  return value;
+                }
+                // Unterminated string.
+                abort();
+              default:
+                // Parse numbers and literals.
+                begin = Index;
+                // Advance past the negative sign, if one is specified.
+                if (charCode == 45) {
+                  isSigned = true;
+                  charCode = source.charCodeAt(++Index);
+                }
+                // Parse an integer or floating-point value.
+                if (charCode >= 48 && charCode <= 57) {
+                  // Leading zeroes are interpreted as octal literals.
+                  if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) {
+                    // Illegal octal literal.
+                    abort();
+                  }
+                  isSigned = false;
+                  // Parse the integer component.
+                  for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++);
+                  // Floats cannot contain a leading decimal point; however, this
+                  // case is already accounted for by the parser.
+                  if (source.charCodeAt(Index) == 46) {
+                    position = ++Index;
+                    // Parse the decimal component.
+                    for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);
+                    if (position == Index) {
+                      // Illegal trailing decimal.
+                      abort();
+                    }
+                    Index = position;
+                  }
+                  // Parse exponents. The `e` denoting the exponent is
+                  // case-insensitive.
+                  charCode = source.charCodeAt(Index);
+                  if (charCode == 101 || charCode == 69) {
+                    charCode = source.charCodeAt(++Index);
+                    // Skip past the sign following the exponent, if one is
+                    // specified.
+                    if (charCode == 43 || charCode == 45) {
+                      Index++;
+                    }
+                    // Parse the exponential component.
+                    for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++);
+                    if (position == Index) {
+                      // Illegal empty exponent.
+                      abort();
+                    }
+                    Index = position;
+                  }
+                  // Coerce the parsed value to a JavaScript number.
+                  return +source.slice(begin, Index);
+                }
+                // A negative sign may only precede numbers.
+                if (isSigned) {
+                  abort();
+                }
+                // `true`, `false`, and `null` literals.
+                if (source.slice(Index, Index + 4) == "true") {
+                  Index += 4;
+                  return true;
+                } else if (source.slice(Index, Index + 5) == "false") {
+                  Index += 5;
+                  return false;
+                } else if (source.slice(Index, Index + 4) == "null") {
+                  Index += 4;
+                  return null;
+                }
+                // Unrecognized token.
+                abort();
+            }
+          }
+          // Return the sentinel `$` character if the parser has reached the end
+          // of the source string.
+          return "$";
+        };
+
+        // Internal: Parses a JSON `value` token.
+        var get = function (value) {
+          var results, hasMembers;
+          if (value == "$") {
+            // Unexpected end of input.
+            abort();
+          }
+          if (typeof value == "string") {
+            if ((charIndexBuggy ? value.charAt(0) : value[0]) == "@") {
+              // Remove the sentinel `@` character.
+              return value.slice(1);
+            }
+            // Parse object and array literals.
+            if (value == "[") {
+              // Parses a JSON array, returning a new JavaScript array.
+              results = [];
+              for (;; hasMembers || (hasMembers = true)) {
+                value = lex();
+                // A closing square bracket marks the end of the array literal.
+                if (value == "]") {
+                  break;
+                }
+                // If the array literal contains elements, the current token
+                // should be a comma separating the previous element from the
+                // next.
+                if (hasMembers) {
+                  if (value == ",") {
+                    value = lex();
+                    if (value == "]") {
+                      // Unexpected trailing `,` in array literal.
+                      abort();
+                    }
+                  } else {
+                    // A `,` must separate each array element.
+                    abort();
+                  }
+                }
+                // Elisions and leading commas are not permitted.
+                if (value == ",") {
+                  abort();
+                }
+                results.push(get(value));
+              }
+              return results;
+            } else if (value == "{") {
+              // Parses a JSON object, returning a new JavaScript object.
+              results = {};
+              for (;; hasMembers || (hasMembers = true)) {
+                value = lex();
+                // A closing curly brace marks the end of the object literal.
+                if (value == "}") {
+                  break;
+                }
+                // If the object literal contains members, the current token
+                // should be a comma separator.
+                if (hasMembers) {
+                  if (value == ",") {
+                    value = lex();
+                    if (value == "}") {
+                      // Unexpected trailing `,` in object literal.
+                      abort();
+                    }
+                  } else {
+                    // A `,` must separate each object member.
+                    abort();
+                  }
+                }
+                // Leading commas are not permitted, object property names must be
+                // double-quoted strings, and a `:` must separate each property
+                // name and value.
+                if (value == "," || typeof value != "string" || (charIndexBuggy ? value.charAt(0) : value[0]) != "@" || lex() != ":") {
+                  abort();
+                }
+                results[value.slice(1)] = get(lex());
+              }
+              return results;
+            }
+            // Unexpected token encountered.
+            abort();
+          }
+          return value;
+        };
+
+        // Internal: Updates a traversed object member.
+        var update = function (source, property, callback) {
+          var element = walk(source, property, callback);
+          if (element === undef) {
+            delete source[property];
+          } else {
+            source[property] = element;
+          }
+        };
+
+        // Internal: Recursively traverses a parsed JSON object, invoking the
+        // `callback` function for each value. This is an implementation of the
+        // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2.
+        var walk = function (source, property, callback) {
+          var value = source[property], length;
+          if (typeof value == "object" && value) {
+            // `forEach` can't be used to traverse an array in Opera <= 8.54
+            // because its `Object#hasOwnProperty` implementation returns `false`
+            // for array indices (e.g., `![1, 2, 3].hasOwnProperty("0")`).
+            if (getClass.call(value) == arrayClass) {
+              for (length = value.length; length--;) {
+                update(value, length, callback);
+              }
+            } else {
+              forEach(value, function (property) {
+                update(value, property, callback);
+              });
+            }
+          }
+          return callback.call(source, property, value);
+        };
+
+        // Public: `JSON.parse`. See ES 5.1 section 15.12.2.
+        exports.parse = function (source, callback) {
+          var result, value;
+          Index = 0;
+          Source = "" + source;
+          result = get(lex());
+          // If a JSON string contains multiple tokens, it is invalid.
+          if (lex() != "$") {
+            abort();
+          }
+          // Reset the parser state.
+          Index = Source = null;
+          return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[""] = result, value), "", callback) : result;
+        };
+      }
+    }
+
+    exports["runInContext"] = runInContext;
+    return exports;
+  }
+
+  if (freeExports && !isLoader) {
+    // Export for CommonJS environments.
+    runInContext(root, freeExports);
+  } else {
+    // Export for web browsers and JavaScript engines.
+    var nativeJSON = root.JSON,
+        previousJSON = root["JSON3"],
+        isRestored = false;
+
+    var JSON3 = runInContext(root, (root["JSON3"] = {
+      // Public: Restores the original value of the global `JSON` object and
+      // returns a reference to the `JSON3` object.
+      "noConflict": function () {
+        if (!isRestored) {
+          isRestored = true;
+          root.JSON = nativeJSON;
+          root["JSON3"] = previousJSON;
+          nativeJSON = previousJSON = null;
+        }
+        return JSON3;
+      }
+    }));
+
+    root.JSON = {
+      "parse": JSON3.parse,
+      "stringify": JSON3.stringify
+    };
+  }
+
+  // Export for asynchronous module loaders.
+  if (isLoader) {
+    define(function () {
+      return JSON3;
+    });
+  }
+}).call(this);
diff --git a/public/bower_components/lodash/lodash.js b/public/bower_components/lodash/lodash.js
new file mode 100644
index 0000000..d1f45b6
--- /dev/null
+++ b/public/bower_components/lodash/lodash.js
@@ -0,0 +1,12352 @@
+/**
+ * @license
+ * lodash 3.10.1 (Custom Build) <https://lodash.com/>
+ * Build: `lodash modern -o ./lodash.js`
+ * Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <https://lodash.com/license>
+ */
+;(function() {
+
+  /** Used as a safe reference for `undefined` in pre-ES5 environments. */
+  var undefined;
+
+  /** Used as the semantic version number. */
+  var VERSION = '3.10.1';
+
+  /** Used to compose bitmasks for wrapper metadata. */
+  var BIND_FLAG = 1,
+      BIND_KEY_FLAG = 2,
+      CURRY_BOUND_FLAG = 4,
+      CURRY_FLAG = 8,
+      CURRY_RIGHT_FLAG = 16,
+      PARTIAL_FLAG = 32,
+      PARTIAL_RIGHT_FLAG = 64,
+      ARY_FLAG = 128,
+      REARG_FLAG = 256;
+
+  /** Used as default options for `_.trunc`. */
+  var DEFAULT_TRUNC_LENGTH = 30,
+      DEFAULT_TRUNC_OMISSION = '...';
+
+  /** Used to detect when a function becomes hot. */
+  var HOT_COUNT = 150,
+      HOT_SPAN = 16;
+
+  /** Used as the size to enable large array optimizations. */
+  var LARGE_ARRAY_SIZE = 200;
+
+  /** Used to indicate the type of lazy iteratees. */
+  var LAZY_FILTER_FLAG = 1,
+      LAZY_MAP_FLAG = 2;
+
+  /** Used as the `TypeError` message for "Functions" methods. */
+  var FUNC_ERROR_TEXT = 'Expected a function';
+
+  /** Used as the internal argument placeholder. */
+  var PLACEHOLDER = '__lodash_placeholder__';
+
+  /** `Object#toString` result references. */
+  var argsTag = '[object Arguments]',
+      arrayTag = '[object Array]',
+      boolTag = '[object Boolean]',
+      dateTag = '[object Date]',
+      errorTag = '[object Error]',
+      funcTag = '[object Function]',
+      mapTag = '[object Map]',
+      numberTag = '[object Number]',
+      objectTag = '[object Object]',
+      regexpTag = '[object RegExp]',
+      setTag = '[object Set]',
+      stringTag = '[object String]',
+      weakMapTag = '[object WeakMap]';
+
+  var arrayBufferTag = '[object ArrayBuffer]',
+      float32Tag = '[object Float32Array]',
+      float64Tag = '[object Float64Array]',
+      int8Tag = '[object Int8Array]',
+      int16Tag = '[object Int16Array]',
+      int32Tag = '[object Int32Array]',
+      uint8Tag = '[object Uint8Array]',
+      uint8ClampedTag = '[object Uint8ClampedArray]',
+      uint16Tag = '[object Uint16Array]',
+      uint32Tag = '[object Uint32Array]';
+
+  /** Used to match empty string literals in compiled template source. */
+  var reEmptyStringLeading = /\b__p \+= '';/g,
+      reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
+      reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
+
+  /** Used to match HTML entities and HTML characters. */
+  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g,
+      reUnescapedHtml = /[&<>"'`]/g,
+      reHasEscapedHtml = RegExp(reEscapedHtml.source),
+      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
+
+  /** Used to match template delimiters. */
+  var reEscape = /<%-([\s\S]+?)%>/g,
+      reEvaluate = /<%([\s\S]+?)%>/g,
+      reInterpolate = /<%=([\s\S]+?)%>/g;
+
+  /** Used to match property names within property paths. */
+  var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,
+      reIsPlainProp = /^\w*$/,
+      rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g;
+
+  /**
+   * Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns)
+   * and those outlined by [`EscapeRegExpPattern`](http://ecma-international.org/ecma-262/6.0/#sec-escaperegexppattern).
+   */
+  var reRegExpChars = /^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,
+      reHasRegExpChars = RegExp(reRegExpChars.source);
+
+  /** Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). */
+  var reComboMark = /[\u0300-\u036f\ufe20-\ufe23]/g;
+
+  /** Used to match backslashes in property paths. */
+  var reEscapeChar = /\\(\\)?/g;
+
+  /** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */
+  var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
+
+  /** Used to match `RegExp` flags from their coerced string values. */
+  var reFlags = /\w*$/;
+
+  /** Used to detect hexadecimal string values. */
+  var reHasHexPrefix = /^0[xX]/;
+
+  /** Used to detect host constructors (Safari > 5). */
+  var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+  /** Used to detect unsigned integer values. */
+  var reIsUint = /^\d+$/;
+
+  /** Used to match latin-1 supplementary letters (excluding mathematical operators). */
+  var reLatin1 = /[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g;
+
+  /** Used to ensure capturing order of template delimiters. */
+  var reNoMatch = /($^)/;
+
+  /** Used to match unescaped characters in compiled string literals. */
+  var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
+
+  /** Used to match words to create compound words. */
+  var reWords = (function() {
+    var upper = '[A-Z\\xc0-\\xd6\\xd8-\\xde]',
+        lower = '[a-z\\xdf-\\xf6\\xf8-\\xff]+';
+
+    return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g');
+  }());
+
+  /** Used to assign default `context` object properties. */
+  var contextProps = [
+    'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array',
+    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number',
+    'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite',
+    'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array',
+    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap'
+  ];
+
+  /** Used to make template sourceURLs easier to identify. */
+  var templateCounter = -1;
+
+  /** Used to identify `toStringTag` values of typed arrays. */
+  var typedArrayTags = {};
+  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
+  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
+  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
+  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
+  typedArrayTags[uint32Tag] = true;
+  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
+  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
+  typedArrayTags[dateTag] = typedArrayTags[errorTag] =
+  typedArrayTags[funcTag] = typedArrayTags[mapTag] =
+  typedArrayTags[numberTag] = typedArrayTags[objectTag] =
+  typedArrayTags[regexpTag] = typedArrayTags[setTag] =
+  typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
+
+  /** Used to identify `toStringTag` values supported by `_.clone`. */
+  var cloneableTags = {};
+  cloneableTags[argsTag] = cloneableTags[arrayTag] =
+  cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =
+  cloneableTags[dateTag] = cloneableTags[float32Tag] =
+  cloneableTags[float64Tag] = cloneableTags[int8Tag] =
+  cloneableTags[int16Tag] = cloneableTags[int32Tag] =
+  cloneableTags[numberTag] = cloneableTags[objectTag] =
+  cloneableTags[regexpTag] = cloneableTags[stringTag] =
+  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
+  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
+  cloneableTags[errorTag] = cloneableTags[funcTag] =
+  cloneableTags[mapTag] = cloneableTags[setTag] =
+  cloneableTags[weakMapTag] = false;
+
+  /** Used to map latin-1 supplementary letters to basic latin letters. */
+  var deburredLetters = {
+    '\xc0': 'A',  '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
+    '\xe0': 'a',  '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
+    '\xc7': 'C',  '\xe7': 'c',
+    '\xd0': 'D',  '\xf0': 'd',
+    '\xc8': 'E',  '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
+    '\xe8': 'e',  '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
+    '\xcC': 'I',  '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
+    '\xeC': 'i',  '\xed': 'i', '\xee': 'i', '\xef': 'i',
+    '\xd1': 'N',  '\xf1': 'n',
+    '\xd2': 'O',  '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
+    '\xf2': 'o',  '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
+    '\xd9': 'U',  '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
+    '\xf9': 'u',  '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
+    '\xdd': 'Y',  '\xfd': 'y', '\xff': 'y',
+    '\xc6': 'Ae', '\xe6': 'ae',
+    '\xde': 'Th', '\xfe': 'th',
+    '\xdf': 'ss'
+  };
+
+  /** Used to map characters to HTML entities. */
+  var htmlEscapes = {
+    '&': '&amp;',
+    '<': '&lt;',
+    '>': '&gt;',
+    '"': '&quot;',
+    "'": '&#39;',
+    '`': '&#96;'
+  };
+
+  /** Used to map HTML entities to characters. */
+  var htmlUnescapes = {
+    '&amp;': '&',
+    '&lt;': '<',
+    '&gt;': '>',
+    '&quot;': '"',
+    '&#39;': "'",
+    '&#96;': '`'
+  };
+
+  /** Used to determine if values are of the language type `Object`. */
+  var objectTypes = {
+    'function': true,
+    'object': true
+  };
+
+  /** Used to escape characters for inclusion in compiled regexes. */
+  var regexpEscapes = {
+    '0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34',
+    '5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39',
+    'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46',
+    'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66',
+    'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78'
+  };
+
+  /** Used to escape characters for inclusion in compiled string literals. */
+  var stringEscapes = {
+    '\\': '\\',
+    "'": "'",
+    '\n': 'n',
+    '\r': 'r',
+    '\u2028': 'u2028',
+    '\u2029': 'u2029'
+  };
+
+  /** Detect free variable `exports`. */
+  var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports;
+
+  /** Detect free variable `module`. */
+  var freeModule = objectTypes[typeof module] && module && !module.nodeType && module;
+
+  /** Detect free variable `global` from Node.js. */
+  var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global;
+
+  /** Detect free variable `self`. */
+  var freeSelf = objectTypes[typeof self] && self && self.Object && self;
+
+  /** Detect free variable `window`. */
+  var freeWindow = objectTypes[typeof window] && window && window.Object && window;
+
+  /** Detect the popular CommonJS extension `module.exports`. */
+  var moduleExports = freeModule && freeModule.exports === freeExports && freeExports;
+
+  /**
+   * Used as a reference to the global object.
+   *
+   * The `this` value is used if it's the global object to avoid Greasemonkey's
+   * restricted `window` object, otherwise the `window` object is used.
+   */
+  var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this;
+
+  /*--------------------------------------------------------------------------*/
+
+  /**
+   * The base implementation of `compareAscending` which compares values and
+   * sorts them in ascending order without guaranteeing a stable sort.
+   *
+   * @private
+   * @param {*} value The value to compare.
+   * @param {*} other The other value to compare.
+   * @returns {number} Returns the sort order indicator for `value`.
+   */
+  function baseCompareAscending(value, other) {
+    if (value !== other) {
+      var valIsNull = value === null,
+          valIsUndef = value === undefined,
+          valIsReflexive = value === value;
+
+      var othIsNull = other === null,
+          othIsUndef = other === undefined,
+          othIsReflexive = other === other;
+
+      if ((value > other && !othIsNull) || !valIsReflexive ||
+          (valIsNull && !othIsUndef && othIsReflexive) ||
+          (valIsUndef && othIsReflexive)) {
+        return 1;
+      }
+      if ((value < other && !valIsNull) || !othIsReflexive ||
+          (othIsNull && !valIsUndef && valIsReflexive) ||
+          (othIsUndef && valIsReflexive)) {
+        return -1;
+      }
+    }
+    return 0;
+  }
+
+  /**
+   * The base implementation of `_.findIndex` and `_.findLastIndex` without
+   * support for callback shorthands and `this` binding.
+   *
+   * @private
+   * @param {Array} array The array to search.
+   * @param {Function} predicate The function invoked per iteration.
+   * @param {boolean} [fromRight] Specify iterating from right to left.
+   * @returns {number} Returns the index of the matched value, else `-1`.
+   */
+  function baseFindIndex(array, predicate, fromRight) {
+    var length = array.length,
+        index = fromRight ? length : -1;
+
+    while ((fromRight ? index-- : ++index < length)) {
+      if (predicate(array[index], index, array)) {
+        return index;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * The base implementation of `_.indexOf` without support for binary searches.
+   *
+   * @private
+   * @param {Array} array The array to search.
+   * @param {*} value The value to search for.
+   * @param {number} fromIndex The index to search from.
+   * @returns {number} Returns the index of the matched value, else `-1`.
+   */
+  function baseIndexOf(array, value, fromIndex) {
+    if (value !== value) {
+      return indexOfNaN(array, fromIndex);
+    }
+    var index = fromIndex - 1,
+        length = array.length;
+
+    while (++index < length) {
+      if (array[index] === value) {
+        return index;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * The base implementation of `_.isFunction` without support for environments
+   * with incorrect `typeof` results.
+   *
+   * @private
+   * @param {*} value The value to check.
+   * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+   */
+  function baseIsFunction(value) {
+    // Avoid a Chakra JIT bug in compatibility modes of IE 11.
+    // See https://github.com/jashkenas/underscore/issues/1621 for more details.
+    return typeof value == 'function' || false;
+  }
+
+  /**
+   * Converts `value` to a string if it's not one. An empty string is returned
+   * for `null` or `undefined` values.
+   *
+   * @private
+   * @param {*} value The value to process.
+   * @returns {string} Returns the string.
+   */
+  function baseToString(value) {
+    return value == null ? '' : (value + '');
+  }
+
+  /**
+   * Used by `_.trim` and `_.trimLeft` to get the index of the first character
+   * of `string` that is not found in `chars`.
+   *
+   * @private
+   * @param {string} string The string to inspect.
+   * @param {string} chars The characters to find.
+   * @returns {number} Returns the index of the first character not found in `chars`.
+   */
+  function charsLeftIndex(string, chars) {
+    var index = -1,
+        length = string.length;
+
+    while (++index < length && chars.indexOf(string.charAt(index)) > -1) {}
+    return index;
+  }
+
+  /**
+   * Used by `_.trim` and `_.trimRight` to get the index of the last character
+   * of `string` that is not found in `chars`.
+   *
+   * @private
+   * @param {string} string The string to inspect.
+   * @param {string} chars The characters to find.
+   * @returns {number} Returns the index of the last character not found in `chars`.
+   */
+  function charsRightIndex(string, chars) {
+    var index = string.length;
+
+    while (index-- && chars.indexOf(string.charAt(index)) > -1) {}
+    return index;
+  }
+
+  /**
+   * Used by `_.sortBy` to compare transformed elements of a collection and stable
+   * sort them in ascending order.
+   *
+   * @private
+   * @param {Object} object The object to compare.
+   * @param {Object} other The other object to compare.
+   * @returns {number} Returns the sort order indicator for `object`.
+   */
+  function compareAscending(object, other) {
+    return baseCompareAscending(object.criteria, other.criteria) || (object.index - other.index);
+  }
+
+  /**
+   * Used by `_.sortByOrder` to compare multiple properties of a value to another
+   * and stable sort them.
+   *
+   * If `orders` is unspecified, all valuess are sorted in ascending order. Otherwise,
+   * a value is sorted in ascending order if its corresponding order is "asc", and
+   * descending if "desc".
+   *
+   * @private
+   * @param {Object} object The object to compare.
+   * @param {Object} other The other object to compare.
+   * @param {boolean[]} orders The order to sort by for each property.
+   * @returns {number} Returns the sort order indicator for `object`.
+   */
+  function compareMultiple(object, other, orders) {
+    var index = -1,
+        objCriteria = object.criteria,
+        othCriteria = other.criteria,
+        length = objCriteria.length,
+        ordersLength = orders.length;
+
+    while (++index < length) {
+      var result = baseCompareAscending(objCriteria[index], othCriteria[index]);
+      if (result) {
+        if (index >= ordersLength) {
+          return result;
+        }
+        var order = orders[index];
+        return result * ((order === 'asc' || order === true) ? 1 : -1);
+      }
+    }
+    // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
+    // that causes it, under certain circumstances, to provide the same value for
+    // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
+    // for more details.
+    //
+    // This also ensures a stable sort in V8 and other engines.
+    // See https://code.google.com/p/v8/issues/detail?id=90 for more details.
+    return object.index - other.index;
+  }
+
+  /**
+   * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters.
+   *
+   * @private
+   * @param {string} letter The matched letter to deburr.
+   * @returns {string} Returns the deburred letter.
+   */
+  function deburrLetter(letter) {
+    return deburredLetters[letter];
+  }
+
+  /**
+   * Used by `_.escape` to convert characters to HTML entities.
+   *
+   * @private
+   * @param {string} chr The matched character to escape.
+   * @returns {string} Returns the escaped character.
+   */
+  function escapeHtmlChar(chr) {
+    return htmlEscapes[chr];
+  }
+
+  /**
+   * Used by `_.escapeRegExp` to escape characters for inclusion in compiled regexes.
+   *
+   * @private
+   * @param {string} chr The matched character to escape.
+   * @param {string} leadingChar The capture group for a leading character.
+   * @param {string} whitespaceChar The capture group for a whitespace character.
+   * @returns {string} Returns the escaped character.
+   */
+  function escapeRegExpChar(chr, leadingChar, whitespaceChar) {
+    if (leadingChar) {
+      chr = regexpEscapes[chr];
+    } else if (whitespaceChar) {
+      chr = stringEscapes[chr];
+    }
+    return '\\' + chr;
+  }
+
+  /**
+   * Used by `_.template` to escape characters for inclusion in compiled string literals.
+   *
+   * @private
+   * @param {string} chr The matched character to escape.
+   * @returns {string} Returns the escaped character.
+   */
+  function escapeStringChar(chr) {
+    return '\\' + stringEscapes[chr];
+  }
+
+  /**
+   * Gets the index at which the first occurrence of `NaN` is found in `array`.
+   *
+   * @private
+   * @param {Array} array The array to search.
+   * @param {number} fromIndex The index to search from.
+   * @param {boolean} [fromRight] Specify iterating from right to left.
+   * @returns {number} Returns the index of the matched `NaN`, else `-1`.
+   */
+  function indexOfNaN(array, fromIndex, fromRight) {
+    var length = array.length,
+        index = fromIndex + (fromRight ? 0 : -1);
+
+    while ((fromRight ? index-- : ++index < length)) {
+      var other = array[index];
+      if (other !== other) {
+        return index;
+      }
+    }
+    return -1;
+  }
+
+  /**
+   * Checks if `value` is object-like.
+   *
+   * @private
+   * @param {*} value The value to check.
+   * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+   */
+  function isObjectLike(value) {
+    return !!value && typeof value == 'object';
+  }
+
+  /**
+   * Used by `trimmedLeftIndex` and `trimmedRightIndex` to determine if a
+   * character code is whitespace.
+   *
+   * @private
+   * @param {number} charCode The character code to inspect.
+   * @returns {boolean} Returns `true` if `charCode` is whitespace, else `false`.
+   */
+  function isSpace(charCode) {
+    return ((charCode <= 160 && (charCode >= 9 && charCode <= 13) || charCode == 32 || charCode == 160) || charCode == 5760 || charCode == 6158 ||
+      (charCode >= 8192 && (charCode <= 8202 || charCode == 8232 || charCode == 8233 || charCode == 8239 || charCode == 8287 || charCode == 12288 || charCode == 65279)));
+  }
+
+  /**
+   * Replaces all `placeholder` elements in `array` with an internal placeholder
+   * and returns an array of their indexes.
+   *
+   * @private
+   * @param {Array} array The array to modify.
+   * @param {*} placeholder The placeholder to replace.
+   * @returns {Array} Returns the new array of placeholder indexes.
+   */
+  function replaceHolders(array, placeholder) {
+    var index = -1,
+        length = array.length,
+        resIndex = -1,
+        result = [];
+
+    while (++index < length) {
+      if (array[index] === placeholder) {
+        array[index] = PLACEHOLDER;
+        result[++resIndex] = index;
+      }
+    }
+    return result;
+  }
+
+  /**
+   * An implementation of `_.uniq` optimized for sorted arrays without support
+   * for callback shorthands and `this` binding.
+   *
+   * @private
+   * @param {Array} array The array to inspect.
+   * @param {Function} [iteratee] The function invoked per iteration.
+   * @returns {Array} Returns the new duplicate free array.
+   */
+  function sortedUniq(array, iteratee) {
+    var seen,
+        index = -1,
+        length = array.length,
+        resIndex = -1,
+        result = [];
+
+    while (++index < length) {
+      var value = array[index],
+          computed = iteratee ? iteratee(value, index, array) : value;
+
+      if (!index || seen !== computed) {
+        seen = computed;
+        result[++resIndex] = value;
+      }
+    }
+    return result;
+  }
+
+  /**
+   * Used by `_.trim` and `_.trimLeft` to get the index of the first non-whitespace
+   * character of `string`.
+   *
+   * @private
+   * @param {string} string The string to inspect.
+   * @returns {number} Returns the index of the first non-whitespace character.
+   */
+  function trimmedLeftIndex(string) {
+    var index = -1,
+        length = string.length;
+
+    while (++index < length && isSpace(string.charCodeAt(index))) {}
+    return index;
+  }
+
+  /**
+   * Used by `_.trim` and `_.trimRight` to get the index of the last non-whitespace
+   * character of `string`.
+   *
+   * @private
+   * @param {string} string The string to inspect.
+   * @returns {number} Returns the index of the last non-whitespace character.
+   */
+  function trimmedRightIndex(string) {
+    var index = string.length;
+
+    while (index-- && isSpace(string.charCodeAt(index))) {}
+    return index;
+  }
+
+  /**
+   * Used by `_.unescape` to convert HTML entities to characters.
+   *
+   * @private
+   * @param {string} chr The matched character to unescape.
+   * @returns {string} Returns the unescaped character.
+   */
+  function unescapeHtmlChar(chr) {
+    return htmlUnescapes[chr];
+  }
+
+  /*--------------------------------------------------------------------------*/
+
+  /**
+   * Create a new pristine `lodash` function using the given `context` object.
+   *
+   * @static
+   * @memberOf _
+   * @category Utility
+   * @param {Object} [context=root] The context object.
+   * @returns {Function} Returns a new `lodash` function.
+   * @example
+   *
+   * _.mixin({ 'foo': _.constant('foo') });
+   *
+   * var lodash = _.runInContext();
+   * lodash.mixin({ 'bar': lodash.constant('bar') });
+   *
+   * _.isFunction(_.foo);
+   * // => true
+   * _.isFunction(_.bar);
+   * // => false
+   *
+   * lodash.isFunction(lodash.foo);
+   * // => false
+   * lodash.isFunction(lodash.bar);
+   * // => true
+   *
+   * // using `context` to mock `Date#getTime` use in `_.now`
+   * var mock = _.runInContext({
+   *   'Date': function() {
+   *     return { 'getTime': getTimeMock };
+   *   }
+   * });
+   *
+   * // or creating a suped-up `defer` in Node.js
+   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
+   */
+  function runInContext(context) {
+    // Avoid issues with some ES3 environments that attempt to use values, named
+    // after built-in constructors like `Object`, for the creation of literals.
+    // ES5 clears this up by stating that literals must use built-in constructors.
+    // See https://es5.github.io/#x11.1.5 for more details.
+    context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;
+
+    /** Native constructor references. */
+    var Array = context.Array,
+        Date = context.Date,
+        Error = context.Error,
+        Function = context.Function,
+        Math = context.Math,
+        Number = context.Number,
+        Object = context.Object,
+        RegExp = context.RegExp,
+        String = context.String,
+        TypeError = context.TypeError;
+
+    /** Used for native method references. */
+    var arrayProto = Array.prototype,
+        objectProto = Object.prototype,
+        stringProto = String.prototype;
+
+    /** Used to resolve the decompiled source of functions. */
+    var fnToString = Function.prototype.toString;
+
+    /** Used to check objects for own properties. */
+    var hasOwnProperty = objectProto.hasOwnProperty;
+
+    /** Used to generate unique IDs. */
+    var idCounter = 0;
+
+    /**
+     * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+     * of values.
+     */
+    var objToString = objectProto.toString;
+
+    /** Used to restore the original `_` reference in `_.noConflict`. */
+    var oldDash = root._;
+
+    /** Used to detect if a method is native. */
+    var reIsNative = RegExp('^' +
+      fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
+      .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+    );
+
+    /** Native method references. */
+    var ArrayBuffer = context.ArrayBuffer,
+        clearTimeout = context.clearTimeout,
+        parseFloat = context.parseFloat,
+        pow = Math.pow,
+        propertyIsEnumerable = objectProto.propertyIsEnumerable,
+        Set = getNative(context, 'Set'),
+        setTimeout = context.setTimeout,
+        splice = arrayProto.splice,
+        Uint8Array = context.Uint8Array,
+        WeakMap = getNative(context, 'WeakMap');
+
+    /* Native method references for those with the same name as other `lodash` methods. */
+    var nativeCeil = Math.ceil,
+        nativeCreate = getNative(Object, 'create'),
+        nativeFloor = Math.floor,
+        nativeIsArray = getNative(Array, 'isArray'),
+        nativeIsFinite = context.isFinite,
+        nativeKeys = getNative(Object, 'keys'),
+        nativeMax = Math.max,
+        nativeMin = Math.min,
+        nativeNow = getNative(Date, 'now'),
+        nativeParseInt = context.parseInt,
+        nativeRandom = Math.random;
+
+    /** Used as references for `-Infinity` and `Infinity`. */
+    var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY,
+        POSITIVE_INFINITY = Number.POSITIVE_INFINITY;
+
+    /** Used as references for the maximum length and index of an array. */
+    var MAX_ARRAY_LENGTH = 4294967295,
+        MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
+        HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
+
+    /**
+     * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
+     * of an array-like value.
+     */
+    var MAX_SAFE_INTEGER = 9007199254740991;
+
+    /** Used to store function metadata. */
+    var metaMap = WeakMap && new WeakMap;
+
+    /** Used to lookup unminified function names. */
+    var realNames = {};
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates a `lodash` object which wraps `value` to enable implicit chaining.
+     * Methods that operate on and return arrays, collections, and functions can
+     * be chained together. Methods that retrieve a single value or may return a
+     * primitive value will automatically end the chain returning the unwrapped
+     * value. Explicit chaining may be enabled using `_.chain`. The execution of
+     * chained methods is lazy, that is, execution is deferred until `_#value`
+     * is implicitly or explicitly called.
+     *
+     * Lazy evaluation allows several methods to support shortcut fusion. Shortcut
+     * fusion is an optimization strategy which merge iteratee calls; this can help
+     * to avoid the creation of intermediate data structures and greatly reduce the
+     * number of iteratee executions.
+     *
+     * Chaining is supported in custom builds as long as the `_#value` method is
+     * directly or indirectly included in the build.
+     *
+     * In addition to lodash methods, wrappers have `Array` and `String` methods.
+     *
+     * The wrapper `Array` methods are:
+     * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`,
+     * `splice`, and `unshift`
+     *
+     * The wrapper `String` methods are:
+     * `replace` and `split`
+     *
+     * The wrapper methods that support shortcut fusion are:
+     * `compact`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`,
+     * `first`, `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`,
+     * `slice`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `toArray`,
+     * and `where`
+     *
+     * The chainable wrapper methods are:
+     * `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`,
+     * `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`,
+     * `countBy`, `create`, `curry`, `debounce`, `defaults`, `defaultsDeep`,
+     * `defer`, `delay`, `difference`, `drop`, `dropRight`, `dropRightWhile`,
+     * `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`,
+     * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,
+     * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,
+     * `invoke`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`,
+     * `matchesProperty`, `memoize`, `merge`, `method`, `methodOf`, `mixin`,
+     * `modArgs`, `negate`, `omit`, `once`, `pairs`, `partial`, `partialRight`,
+     * `partition`, `pick`, `plant`, `pluck`, `property`, `propertyOf`, `pull`,
+     * `pullAt`, `push`, `range`, `rearg`, `reject`, `remove`, `rest`, `restParam`,
+     * `reverse`, `set`, `shuffle`, `slice`, `sort`, `sortBy`, `sortByAll`,
+     * `sortByOrder`, `splice`, `spread`, `take`, `takeRight`, `takeRightWhile`,
+     * `takeWhile`, `tap`, `throttle`, `thru`, `times`, `toArray`, `toPlainObject`,
+     * `transform`, `union`, `uniq`, `unshift`, `unzip`, `unzipWith`, `values`,
+     * `valuesIn`, `where`, `without`, `wrap`, `xor`, `zip`, `zipObject`, `zipWith`
+     *
+     * The wrapper methods that are **not** chainable by default are:
+     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clone`, `cloneDeep`,
+     * `deburr`, `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`,
+     * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`,
+     * `floor`, `get`, `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`,
+     * `inRange`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,
+     * `isEmpty`, `isEqual`, `isError`, `isFinite` `isFunction`, `isMatch`,
+     * `isNative`, `isNaN`, `isNull`, `isNumber`, `isObject`, `isPlainObject`,
+     * `isRegExp`, `isString`, `isUndefined`, `isTypedArray`, `join`, `kebabCase`,
+     * `last`, `lastIndexOf`, `lt`, `lte`, `max`, `min`, `noConflict`, `noop`,
+     * `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`, `random`, `reduce`,
+     * `reduceRight`, `repeat`, `result`, `round`, `runInContext`, `shift`, `size`,
+     * `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`, `startCase`,
+     * `startsWith`, `sum`, `template`, `trim`, `trimLeft`, `trimRight`, `trunc`,
+     * `unescape`, `uniqueId`, `value`, and `words`
+     *
+     * The wrapper method `sample` will return a wrapped value when `n` is provided,
+     * otherwise an unwrapped value is returned.
+     *
+     * @name _
+     * @constructor
+     * @category Chain
+     * @param {*} value The value to wrap in a `lodash` instance.
+     * @returns {Object} Returns the new `lodash` wrapper instance.
+     * @example
+     *
+     * var wrapped = _([1, 2, 3]);
+     *
+     * // returns an unwrapped value
+     * wrapped.reduce(function(total, n) {
+     *   return total + n;
+     * });
+     * // => 6
+     *
+     * // returns a wrapped value
+     * var squares = wrapped.map(function(n) {
+     *   return n * n;
+     * });
+     *
+     * _.isArray(squares);
+     * // => false
+     *
+     * _.isArray(squares.value());
+     * // => true
+     */
+    function lodash(value) {
+      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
+        if (value instanceof LodashWrapper) {
+          return value;
+        }
+        if (hasOwnProperty.call(value, '__chain__') && hasOwnProperty.call(value, '__wrapped__')) {
+          return wrapperClone(value);
+        }
+      }
+      return new LodashWrapper(value);
+    }
+
+    /**
+     * The function whose prototype all chaining wrappers inherit from.
+     *
+     * @private
+     */
+    function baseLodash() {
+      // No operation performed.
+    }
+
+    /**
+     * The base constructor for creating `lodash` wrapper objects.
+     *
+     * @private
+     * @param {*} value The value to wrap.
+     * @param {boolean} [chainAll] Enable chaining for all wrapper methods.
+     * @param {Array} [actions=[]] Actions to peform to resolve the unwrapped value.
+     */
+    function LodashWrapper(value, chainAll, actions) {
+      this.__wrapped__ = value;
+      this.__actions__ = actions || [];
+      this.__chain__ = !!chainAll;
+    }
+
+    /**
+     * An object environment feature flags.
+     *
+     * @static
+     * @memberOf _
+     * @type Object
+     */
+    var support = lodash.support = {};
+
+    /**
+     * By default, the template delimiters used by lodash are like those in
+     * embedded Ruby (ERB). Change the following template settings to use
+     * alternative delimiters.
+     *
+     * @static
+     * @memberOf _
+     * @type Object
+     */
+    lodash.templateSettings = {
+
+      /**
+       * Used to detect `data` property values to be HTML-escaped.
+       *
+       * @memberOf _.templateSettings
+       * @type RegExp
+       */
+      'escape': reEscape,
+
+      /**
+       * Used to detect code to be evaluated.
+       *
+       * @memberOf _.templateSettings
+       * @type RegExp
+       */
+      'evaluate': reEvaluate,
+
+      /**
+       * Used to detect `data` property values to inject.
+       *
+       * @memberOf _.templateSettings
+       * @type RegExp
+       */
+      'interpolate': reInterpolate,
+
+      /**
+       * Used to reference the data object in the template text.
+       *
+       * @memberOf _.templateSettings
+       * @type string
+       */
+      'variable': '',
+
+      /**
+       * Used to import variables into the compiled template.
+       *
+       * @memberOf _.templateSettings
+       * @type Object
+       */
+      'imports': {
+
+        /**
+         * A reference to the `lodash` function.
+         *
+         * @memberOf _.templateSettings.imports
+         * @type Function
+         */
+        '_': lodash
+      }
+    };
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
+     *
+     * @private
+     * @param {*} value The value to wrap.
+     */
+    function LazyWrapper(value) {
+      this.__wrapped__ = value;
+      this.__actions__ = [];
+      this.__dir__ = 1;
+      this.__filtered__ = false;
+      this.__iteratees__ = [];
+      this.__takeCount__ = POSITIVE_INFINITY;
+      this.__views__ = [];
+    }
+
+    /**
+     * Creates a clone of the lazy wrapper object.
+     *
+     * @private
+     * @name clone
+     * @memberOf LazyWrapper
+     * @returns {Object} Returns the cloned `LazyWrapper` object.
+     */
+    function lazyClone() {
+      var result = new LazyWrapper(this.__wrapped__);
+      result.__actions__ = arrayCopy(this.__actions__);
+      result.__dir__ = this.__dir__;
+      result.__filtered__ = this.__filtered__;
+      result.__iteratees__ = arrayCopy(this.__iteratees__);
+      result.__takeCount__ = this.__takeCount__;
+      result.__views__ = arrayCopy(this.__views__);
+      return result;
+    }
+
+    /**
+     * Reverses the direction of lazy iteration.
+     *
+     * @private
+     * @name reverse
+     * @memberOf LazyWrapper
+     * @returns {Object} Returns the new reversed `LazyWrapper` object.
+     */
+    function lazyReverse() {
+      if (this.__filtered__) {
+        var result = new LazyWrapper(this);
+        result.__dir__ = -1;
+        result.__filtered__ = true;
+      } else {
+        result = this.clone();
+        result.__dir__ *= -1;
+      }
+      return result;
+    }
+
+    /**
+     * Extracts the unwrapped value from its lazy wrapper.
+     *
+     * @private
+     * @name value
+     * @memberOf LazyWrapper
+     * @returns {*} Returns the unwrapped value.
+     */
+    function lazyValue() {
+      var array = this.__wrapped__.value(),
+          dir = this.__dir__,
+          isArr = isArray(array),
+          isRight = dir < 0,
+          arrLength = isArr ? array.length : 0,
+          view = getView(0, arrLength, this.__views__),
+          start = view.start,
+          end = view.end,
+          length = end - start,
+          index = isRight ? end : (start - 1),
+          iteratees = this.__iteratees__,
+          iterLength = iteratees.length,
+          resIndex = 0,
+          takeCount = nativeMin(length, this.__takeCount__);
+
+      if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) {
+        return baseWrapperValue(array, this.__actions__);
+      }
+      var result = [];
+
+      outer:
+      while (length-- && resIndex < takeCount) {
+        index += dir;
+
+        var iterIndex = -1,
+            value = array[index];
+
+        while (++iterIndex < iterLength) {
+          var data = iteratees[iterIndex],
+              iteratee = data.iteratee,
+              type = data.type,
+              computed = iteratee(value);
+
+          if (type == LAZY_MAP_FLAG) {
+            value = computed;
+          } else if (!computed) {
+            if (type == LAZY_FILTER_FLAG) {
+              continue outer;
+            } else {
+              break outer;
+            }
+          }
+        }
+        result[resIndex++] = value;
+      }
+      return result;
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates a cache object to store key/value pairs.
+     *
+     * @private
+     * @static
+     * @name Cache
+     * @memberOf _.memoize
+     */
+    function MapCache() {
+      this.__data__ = {};
+    }
+
+    /**
+     * Removes `key` and its value from the cache.
+     *
+     * @private
+     * @name delete
+     * @memberOf _.memoize.Cache
+     * @param {string} key The key of the value to remove.
+     * @returns {boolean} Returns `true` if the entry was removed successfully, else `false`.
+     */
+    function mapDelete(key) {
+      return this.has(key) && delete this.__data__[key];
+    }
+
+    /**
+     * Gets the cached value for `key`.
+     *
+     * @private
+     * @name get
+     * @memberOf _.memoize.Cache
+     * @param {string} key The key of the value to get.
+     * @returns {*} Returns the cached value.
+     */
+    function mapGet(key) {
+      return key == '__proto__' ? undefined : this.__data__[key];
+    }
+
+    /**
+     * Checks if a cached value for `key` exists.
+     *
+     * @private
+     * @name has
+     * @memberOf _.memoize.Cache
+     * @param {string} key The key of the entry to check.
+     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+     */
+    function mapHas(key) {
+      return key != '__proto__' && hasOwnProperty.call(this.__data__, key);
+    }
+
+    /**
+     * Sets `value` to `key` of the cache.
+     *
+     * @private
+     * @name set
+     * @memberOf _.memoize.Cache
+     * @param {string} key The key of the value to cache.
+     * @param {*} value The value to cache.
+     * @returns {Object} Returns the cache object.
+     */
+    function mapSet(key, value) {
+      if (key != '__proto__') {
+        this.__data__[key] = value;
+      }
+      return this;
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     *
+     * Creates a cache object to store unique values.
+     *
+     * @private
+     * @param {Array} [values] The values to cache.
+     */
+    function SetCache(values) {
+      var length = values ? values.length : 0;
+
+      this.data = { 'hash': nativeCreate(null), 'set': new Set };
+      while (length--) {
+        this.push(values[length]);
+      }
+    }
+
+    /**
+     * Checks if `value` is in `cache` mimicking the return signature of
+     * `_.indexOf` by returning `0` if the value is found, else `-1`.
+     *
+     * @private
+     * @param {Object} cache The cache to search.
+     * @param {*} value The value to search for.
+     * @returns {number} Returns `0` if `value` is found, else `-1`.
+     */
+    function cacheIndexOf(cache, value) {
+      var data = cache.data,
+          result = (typeof value == 'string' || isObject(value)) ? data.set.has(value) : data.hash[value];
+
+      return result ? 0 : -1;
+    }
+
+    /**
+     * Adds `value` to the cache.
+     *
+     * @private
+     * @name push
+     * @memberOf SetCache
+     * @param {*} value The value to cache.
+     */
+    function cachePush(value) {
+      var data = this.data;
+      if (typeof value == 'string' || isObject(value)) {
+        data.set.add(value);
+      } else {
+        data.hash[value] = true;
+      }
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates a new array joining `array` with `other`.
+     *
+     * @private
+     * @param {Array} array The array to join.
+     * @param {Array} other The other array to join.
+     * @returns {Array} Returns the new concatenated array.
+     */
+    function arrayConcat(array, other) {
+      var index = -1,
+          length = array.length,
+          othIndex = -1,
+          othLength = other.length,
+          result = Array(length + othLength);
+
+      while (++index < length) {
+        result[index] = array[index];
+      }
+      while (++othIndex < othLength) {
+        result[index++] = other[othIndex];
+      }
+      return result;
+    }
+
+    /**
+     * Copies the values of `source` to `array`.
+     *
+     * @private
+     * @param {Array} source The array to copy values from.
+     * @param {Array} [array=[]] The array to copy values to.
+     * @returns {Array} Returns `array`.
+     */
+    function arrayCopy(source, array) {
+      var index = -1,
+          length = source.length;
+
+      array || (array = Array(length));
+      while (++index < length) {
+        array[index] = source[index];
+      }
+      return array;
+    }
+
+    /**
+     * A specialized version of `_.forEach` for arrays without support for callback
+     * shorthands and `this` binding.
+     *
+     * @private
+     * @param {Array} array The array to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @returns {Array} Returns `array`.
+     */
+    function arrayEach(array, iteratee) {
+      var index = -1,
+          length = array.length;
+
+      while (++index < length) {
+        if (iteratee(array[index], index, array) === false) {
+          break;
+        }
+      }
+      return array;
+    }
+
+    /**
+     * A specialized version of `_.forEachRight` for arrays without support for
+     * callback shorthands and `this` binding.
+     *
+     * @private
+     * @param {Array} array The array to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @returns {Array} Returns `array`.
+     */
+    function arrayEachRight(array, iteratee) {
+      var length = array.length;
+
+      while (length--) {
+        if (iteratee(array[length], length, array) === false) {
+          break;
+        }
+      }
+      return array;
+    }
+
+    /**
+     * A specialized version of `_.every` for arrays without support for callback
+     * shorthands and `this` binding.
+     *
+     * @private
+     * @param {Array} array The array to iterate over.
+     * @param {Function} predicate The function invoked per iteration.
+     * @returns {boolean} Returns `true` if all elements pass the predicate check,
+     *  else `false`.
+     */
+    function arrayEvery(array, predicate) {
+      var index = -1,
+          length = array.length;
+
+      while (++index < length) {
+        if (!predicate(array[index], index, array)) {
+          return false;
+        }
+      }
+      return true;
+    }
+
+    /**
+     * A specialized version of `baseExtremum` for arrays which invokes `iteratee`
+     * with one argument: (value).
+     *
+     * @private
+     * @param {Array} array The array to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @param {Function} comparator The function used to compare values.
+     * @param {*} exValue The initial extremum value.
+     * @returns {*} Returns the extremum value.
+     */
+    function arrayExtremum(array, iteratee, comparator, exValue) {
+      var index = -1,
+          length = array.length,
+          computed = exValue,
+          result = computed;
+
+      while (++index < length) {
+        var value = array[index],
+            current = +iteratee(value);
+
+        if (comparator(current, computed)) {
+          computed = current;
+          result = value;
+        }
+      }
+      return result;
+    }
+
+    /**
+     * A specialized version of `_.filter` for arrays without support for callback
+     * shorthands and `this` binding.
+     *
+     * @private
+     * @param {Array} array The array to iterate over.
+     * @param {Function} predicate The function invoked per iteration.
+     * @returns {Array} Returns the new filtered array.
+     */
+    function arrayFilter(array, predicate) {
+      var index = -1,
+          length = array.length,
+          resIndex = -1,
+          result = [];
+
+      while (++index < length) {
+        var value = array[index];
+        if (predicate(value, index, array)) {
+          result[++resIndex] = value;
+        }
+      }
+      return result;
+    }
+
+    /**
+     * A specialized version of `_.map` for arrays without support for callback
+     * shorthands and `this` binding.
+     *
+     * @private
+     * @param {Array} array The array to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @returns {Array} Returns the new mapped array.
+     */
+    function arrayMap(array, iteratee) {
+      var index = -1,
+          length = array.length,
+          result = Array(length);
+
+      while (++index < length) {
+        result[index] = iteratee(array[index], index, array);
+      }
+      return result;
+    }
+
+    /**
+     * Appends the elements of `values` to `array`.
+     *
+     * @private
+     * @param {Array} array The array to modify.
+     * @param {Array} values The values to append.
+     * @returns {Array} Returns `array`.
+     */
+    function arrayPush(array, values) {
+      var index = -1,
+          length = values.length,
+          offset = array.length;
+
+      while (++index < length) {
+        array[offset + index] = values[index];
+      }
+      return array;
+    }
+
+    /**
+     * A specialized version of `_.reduce` for arrays without support for callback
+     * shorthands and `this` binding.
+     *
+     * @private
+     * @param {Array} array The array to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @param {*} [accumulator] The initial value.
+     * @param {boolean} [initFromArray] Specify using the first element of `array`
+     *  as the initial value.
+     * @returns {*} Returns the accumulated value.
+     */
+    function arrayReduce(array, iteratee, accumulator, initFromArray) {
+      var index = -1,
+          length = array.length;
+
+      if (initFromArray && length) {
+        accumulator = array[++index];
+      }
+      while (++index < length) {
+        accumulator = iteratee(accumulator, array[index], index, array);
+      }
+      return accumulator;
+    }
+
+    /**
+     * A specialized version of `_.reduceRight` for arrays without support for
+     * callback shorthands and `this` binding.
+     *
+     * @private
+     * @param {Array} array The array to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @param {*} [accumulator] The initial value.
+     * @param {boolean} [initFromArray] Specify using the last element of `array`
+     *  as the initial value.
+     * @returns {*} Returns the accumulated value.
+     */
+    function arrayReduceRight(array, iteratee, accumulator, initFromArray) {
+      var length = array.length;
+      if (initFromArray && length) {
+        accumulator = array[--length];
+      }
+      while (length--) {
+        accumulator = iteratee(accumulator, array[length], length, array);
+      }
+      return accumulator;
+    }
+
+    /**
+     * A specialized version of `_.some` for arrays without support for callback
+     * shorthands and `this` binding.
+     *
+     * @private
+     * @param {Array} array The array to iterate over.
+     * @param {Function} predicate The function invoked per iteration.
+     * @returns {boolean} Returns `true` if any element passes the predicate check,
+     *  else `false`.
+     */
+    function arraySome(array, predicate) {
+      var index = -1,
+          length = array.length;
+
+      while (++index < length) {
+        if (predicate(array[index], index, array)) {
+          return true;
+        }
+      }
+      return false;
+    }
+
+    /**
+     * A specialized version of `_.sum` for arrays without support for callback
+     * shorthands and `this` binding..
+     *
+     * @private
+     * @param {Array} array The array to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @returns {number} Returns the sum.
+     */
+    function arraySum(array, iteratee) {
+      var length = array.length,
+          result = 0;
+
+      while (length--) {
+        result += +iteratee(array[length]) || 0;
+      }
+      return result;
+    }
+
+    /**
+     * Used by `_.defaults` to customize its `_.assign` use.
+     *
+     * @private
+     * @param {*} objectValue The destination object property value.
+     * @param {*} sourceValue The source object property value.
+     * @returns {*} Returns the value to assign to the destination object.
+     */
+    function assignDefaults(objectValue, sourceValue) {
+      return objectValue === undefined ? sourceValue : objectValue;
+    }
+
+    /**
+     * Used by `_.template` to customize its `_.assign` use.
+     *
+     * **Note:** This function is like `assignDefaults` except that it ignores
+     * inherited property values when checking if a property is `undefined`.
+     *
+     * @private
+     * @param {*} objectValue The destination object property value.
+     * @param {*} sourceValue The source object property value.
+     * @param {string} key The key associated with the object and source values.
+     * @param {Object} object The destination object.
+     * @returns {*} Returns the value to assign to the destination object.
+     */
+    function assignOwnDefaults(objectValue, sourceValue, key, object) {
+      return (objectValue === undefined || !hasOwnProperty.call(object, key))
+        ? sourceValue
+        : objectValue;
+    }
+
+    /**
+     * A specialized version of `_.assign` for customizing assigned values without
+     * support for argument juggling, multiple sources, and `this` binding `customizer`
+     * functions.
+     *
+     * @private
+     * @param {Object} object The destination object.
+     * @param {Object} source The source object.
+     * @param {Function} customizer The function to customize assigned values.
+     * @returns {Object} Returns `object`.
+     */
+    function assignWith(object, source, customizer) {
+      var index = -1,
+          props = keys(source),
+          length = props.length;
+
+      while (++index < length) {
+        var key = props[index],
+            value = object[key],
+            result = customizer(value, source[key], key, object, source);
+
+        if ((result === result ? (result !== value) : (value === value)) ||
+            (value === undefined && !(key in object))) {
+          object[key] = result;
+        }
+      }
+      return object;
+    }
+
+    /**
+     * The base implementation of `_.assign` without support for argument juggling,
+     * multiple sources, and `customizer` functions.
+     *
+     * @private
+     * @param {Object} object The destination object.
+     * @param {Object} source The source object.
+     * @returns {Object} Returns `object`.
+     */
+    function baseAssign(object, source) {
+      return source == null
+        ? object
+        : baseCopy(source, keys(source), object);
+    }
+
+    /**
+     * The base implementation of `_.at` without support for string collections
+     * and individual key arguments.
+     *
+     * @private
+     * @param {Array|Object} collection The collection to iterate over.
+     * @param {number[]|string[]} props The property names or indexes of elements to pick.
+     * @returns {Array} Returns the new array of picked elements.
+     */
+    function baseAt(collection, props) {
+      var index = -1,
+          isNil = collection == null,
+          isArr = !isNil && isArrayLike(collection),
+          length = isArr ? collection.length : 0,
+          propsLength = props.length,
+          result = Array(propsLength);
+
+      while(++index < propsLength) {
+        var key = props[index];
+        if (isArr) {
+          result[index] = isIndex(key, length) ? collection[key] : undefined;
+        } else {
+          result[index] = isNil ? undefined : collection[key];
+        }
+      }
+      return result;
+    }
+
+    /**
+     * Copies properties of `source` to `object`.
+     *
+     * @private
+     * @param {Object} source The object to copy properties from.
+     * @param {Array} props The property names to copy.
+     * @param {Object} [object={}] The object to copy properties to.
+     * @returns {Object} Returns `object`.
+     */
+    function baseCopy(source, props, object) {
+      object || (object = {});
+
+      var index = -1,
+          length = props.length;
+
+      while (++index < length) {
+        var key = props[index];
+        object[key] = source[key];
+      }
+      return object;
+    }
+
+    /**
+     * The base implementation of `_.callback` which supports specifying the
+     * number of arguments to provide to `func`.
+     *
+     * @private
+     * @param {*} [func=_.identity] The value to convert to a callback.
+     * @param {*} [thisArg] The `this` binding of `func`.
+     * @param {number} [argCount] The number of arguments to provide to `func`.
+     * @returns {Function} Returns the callback.
+     */
+    function baseCallback(func, thisArg, argCount) {
+      var type = typeof func;
+      if (type == 'function') {
+        return thisArg === undefined
+          ? func
+          : bindCallback(func, thisArg, argCount);
+      }
+      if (func == null) {
+        return identity;
+      }
+      if (type == 'object') {
+        return baseMatches(func);
+      }
+      return thisArg === undefined
+        ? property(func)
+        : baseMatchesProperty(func, thisArg);
+    }
+
+    /**
+     * The base implementation of `_.clone` without support for argument juggling
+     * and `this` binding `customizer` functions.
+     *
+     * @private
+     * @param {*} value The value to clone.
+     * @param {boolean} [isDeep] Specify a deep clone.
+     * @param {Function} [customizer] The function to customize cloning values.
+     * @param {string} [key] The key of `value`.
+     * @param {Object} [object] The object `value` belongs to.
+     * @param {Array} [stackA=[]] Tracks traversed source objects.
+     * @param {Array} [stackB=[]] Associates clones with source counterparts.
+     * @returns {*} Returns the cloned value.
+     */
+    function baseClone(value, isDeep, customizer, key, object, stackA, stackB) {
+      var result;
+      if (customizer) {
+        result = object ? customizer(value, key, object) : customizer(value);
+      }
+      if (result !== undefined) {
+        return result;
+      }
+      if (!isObject(value)) {
+        return value;
+      }
+      var isArr = isArray(value);
+      if (isArr) {
+        result = initCloneArray(value);
+        if (!isDeep) {
+          return arrayCopy(value, result);
+        }
+      } else {
+        var tag = objToString.call(value),
+            isFunc = tag == funcTag;
+
+        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
+          result = initCloneObject(isFunc ? {} : value);
+          if (!isDeep) {
+            return baseAssign(result, value);
+          }
+        } else {
+          return cloneableTags[tag]
+            ? initCloneByTag(value, tag, isDeep)
+            : (object ? value : {});
+        }
+      }
+      // Check for circular references and return its corresponding clone.
+      stackA || (stackA = []);
+      stackB || (stackB = []);
+
+      var length = stackA.length;
+      while (length--) {
+        if (stackA[length] == value) {
+          return stackB[length];
+        }
+      }
+      // Add the source value to the stack of traversed objects and associate it with its clone.
+      stackA.push(value);
+      stackB.push(result);
+
+      // Recursively populate clone (susceptible to call stack limits).
+      (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {
+        result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB);
+      });
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.create` without support for assigning
+     * properties to the created object.
+     *
+     * @private
+     * @param {Object} prototype The object to inherit from.
+     * @returns {Object} Returns the new object.
+     */
+    var baseCreate = (function() {
+      function object() {}
+      return function(prototype) {
+        if (isObject(prototype)) {
+          object.prototype = prototype;
+          var result = new object;
+          object.prototype = undefined;
+        }
+        return result || {};
+      };
+    }());
+
+    /**
+     * The base implementation of `_.delay` and `_.defer` which accepts an index
+     * of where to slice the arguments to provide to `func`.
+     *
+     * @private
+     * @param {Function} func The function to delay.
+     * @param {number} wait The number of milliseconds to delay invocation.
+     * @param {Object} args The arguments provide to `func`.
+     * @returns {number} Returns the timer id.
+     */
+    function baseDelay(func, wait, args) {
+      if (typeof func != 'function') {
+        throw new TypeError(FUNC_ERROR_TEXT);
+      }
+      return setTimeout(function() { func.apply(undefined, args); }, wait);
+    }
+
+    /**
+     * The base implementation of `_.difference` which accepts a single array
+     * of values to exclude.
+     *
+     * @private
+     * @param {Array} array The array to inspect.
+     * @param {Array} values The values to exclude.
+     * @returns {Array} Returns the new array of filtered values.
+     */
+    function baseDifference(array, values) {
+      var length = array ? array.length : 0,
+          result = [];
+
+      if (!length) {
+        return result;
+      }
+      var index = -1,
+          indexOf = getIndexOf(),
+          isCommon = indexOf === baseIndexOf,
+          cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null,
+          valuesLength = values.length;
+
+      if (cache) {
+        indexOf = cacheIndexOf;
+        isCommon = false;
+        values = cache;
+      }
+      outer:
+      while (++index < length) {
+        var value = array[index];
+
+        if (isCommon && value === value) {
+          var valuesIndex = valuesLength;
+          while (valuesIndex--) {
+            if (values[valuesIndex] === value) {
+              continue outer;
+            }
+          }
+          result.push(value);
+        }
+        else if (indexOf(values, value, 0) < 0) {
+          result.push(value);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.forEach` without support for callback
+     * shorthands and `this` binding.
+     *
+     * @private
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @returns {Array|Object|string} Returns `collection`.
+     */
+    var baseEach = createBaseEach(baseForOwn);
+
+    /**
+     * The base implementation of `_.forEachRight` without support for callback
+     * shorthands and `this` binding.
+     *
+     * @private
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @returns {Array|Object|string} Returns `collection`.
+     */
+    var baseEachRight = createBaseEach(baseForOwnRight, true);
+
+    /**
+     * The base implementation of `_.every` without support for callback
+     * shorthands and `this` binding.
+     *
+     * @private
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function} predicate The function invoked per iteration.
+     * @returns {boolean} Returns `true` if all elements pass the predicate check,
+     *  else `false`
+     */
+    function baseEvery(collection, predicate) {
+      var result = true;
+      baseEach(collection, function(value, index, collection) {
+        result = !!predicate(value, index, collection);
+        return result;
+      });
+      return result;
+    }
+
+    /**
+     * Gets the extremum value of `collection` invoking `iteratee` for each value
+     * in `collection` to generate the criterion by which the value is ranked.
+     * The `iteratee` is invoked with three arguments: (value, index|key, collection).
+     *
+     * @private
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @param {Function} comparator The function used to compare values.
+     * @param {*} exValue The initial extremum value.
+     * @returns {*} Returns the extremum value.
+     */
+    function baseExtremum(collection, iteratee, comparator, exValue) {
+      var computed = exValue,
+          result = computed;
+
+      baseEach(collection, function(value, index, collection) {
+        var current = +iteratee(value, index, collection);
+        if (comparator(current, computed) || (current === exValue && current === result)) {
+          computed = current;
+          result = value;
+        }
+      });
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.fill` without an iteratee call guard.
+     *
+     * @private
+     * @param {Array} array The array to fill.
+     * @param {*} value The value to fill `array` with.
+     * @param {number} [start=0] The start position.
+     * @param {number} [end=array.length] The end position.
+     * @returns {Array} Returns `array`.
+     */
+    function baseFill(array, value, start, end) {
+      var length = array.length;
+
+      start = start == null ? 0 : (+start || 0);
+      if (start < 0) {
+        start = -start > length ? 0 : (length + start);
+      }
+      end = (end === undefined || end > length) ? length : (+end || 0);
+      if (end < 0) {
+        end += length;
+      }
+      length = start > end ? 0 : (end >>> 0);
+      start >>>= 0;
+
+      while (start < length) {
+        array[start++] = value;
+      }
+      return array;
+    }
+
+    /**
+     * The base implementation of `_.filter` without support for callback
+     * shorthands and `this` binding.
+     *
+     * @private
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function} predicate The function invoked per iteration.
+     * @returns {Array} Returns the new filtered array.
+     */
+    function baseFilter(collection, predicate) {
+      var result = [];
+      baseEach(collection, function(value, index, collection) {
+        if (predicate(value, index, collection)) {
+          result.push(value);
+        }
+      });
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`,
+     * without support for callback shorthands and `this` binding, which iterates
+     * over `collection` using the provided `eachFunc`.
+     *
+     * @private
+     * @param {Array|Object|string} collection The collection to search.
+     * @param {Function} predicate The function invoked per iteration.
+     * @param {Function} eachFunc The function to iterate over `collection`.
+     * @param {boolean} [retKey] Specify returning the key of the found element
+     *  instead of the element itself.
+     * @returns {*} Returns the found element or its key, else `undefined`.
+     */
+    function baseFind(collection, predicate, eachFunc, retKey) {
+      var result;
+      eachFunc(collection, function(value, key, collection) {
+        if (predicate(value, key, collection)) {
+          result = retKey ? key : value;
+          return false;
+        }
+      });
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.flatten` with added support for restricting
+     * flattening and specifying the start index.
+     *
+     * @private
+     * @param {Array} array The array to flatten.
+     * @param {boolean} [isDeep] Specify a deep flatten.
+     * @param {boolean} [isStrict] Restrict flattening to arrays-like objects.
+     * @param {Array} [result=[]] The initial result value.
+     * @returns {Array} Returns the new flattened array.
+     */
+    function baseFlatten(array, isDeep, isStrict, result) {
+      result || (result = []);
+
+      var index = -1,
+          length = array.length;
+
+      while (++index < length) {
+        var value = array[index];
+        if (isObjectLike(value) && isArrayLike(value) &&
+            (isStrict || isArray(value) || isArguments(value))) {
+          if (isDeep) {
+            // Recursively flatten arrays (susceptible to call stack limits).
+            baseFlatten(value, isDeep, isStrict, result);
+          } else {
+            arrayPush(result, value);
+          }
+        } else if (!isStrict) {
+          result[result.length] = value;
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `baseForIn` and `baseForOwn` which iterates
+     * over `object` properties returned by `keysFunc` invoking `iteratee` for
+     * each property. Iteratee functions may exit iteration early by explicitly
+     * returning `false`.
+     *
+     * @private
+     * @param {Object} object The object to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @param {Function} keysFunc The function to get the keys of `object`.
+     * @returns {Object} Returns `object`.
+     */
+    var baseFor = createBaseFor();
+
+    /**
+     * This function is like `baseFor` except that it iterates over properties
+     * in the opposite order.
+     *
+     * @private
+     * @param {Object} object The object to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @param {Function} keysFunc The function to get the keys of `object`.
+     * @returns {Object} Returns `object`.
+     */
+    var baseForRight = createBaseFor(true);
+
+    /**
+     * The base implementation of `_.forIn` without support for callback
+     * shorthands and `this` binding.
+     *
+     * @private
+     * @param {Object} object The object to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @returns {Object} Returns `object`.
+     */
+    function baseForIn(object, iteratee) {
+      return baseFor(object, iteratee, keysIn);
+    }
+
+    /**
+     * The base implementation of `_.forOwn` without support for callback
+     * shorthands and `this` binding.
+     *
+     * @private
+     * @param {Object} object The object to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @returns {Object} Returns `object`.
+     */
+    function baseForOwn(object, iteratee) {
+      return baseFor(object, iteratee, keys);
+    }
+
+    /**
+     * The base implementation of `_.forOwnRight` without support for callback
+     * shorthands and `this` binding.
+     *
+     * @private
+     * @param {Object} object The object to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @returns {Object} Returns `object`.
+     */
+    function baseForOwnRight(object, iteratee) {
+      return baseForRight(object, iteratee, keys);
+    }
+
+    /**
+     * The base implementation of `_.functions` which creates an array of
+     * `object` function property names filtered from those provided.
+     *
+     * @private
+     * @param {Object} object The object to inspect.
+     * @param {Array} props The property names to filter.
+     * @returns {Array} Returns the new array of filtered property names.
+     */
+    function baseFunctions(object, props) {
+      var index = -1,
+          length = props.length,
+          resIndex = -1,
+          result = [];
+
+      while (++index < length) {
+        var key = props[index];
+        if (isFunction(object[key])) {
+          result[++resIndex] = key;
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `get` without support for string paths
+     * and default values.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @param {Array} path The path of the property to get.
+     * @param {string} [pathKey] The key representation of path.
+     * @returns {*} Returns the resolved value.
+     */
+    function baseGet(object, path, pathKey) {
+      if (object == null) {
+        return;
+      }
+      if (pathKey !== undefined && pathKey in toObject(object)) {
+        path = [pathKey];
+      }
+      var index = 0,
+          length = path.length;
+
+      while (object != null && index < length) {
+        object = object[path[index++]];
+      }
+      return (index && index == length) ? object : undefined;
+    }
+
+    /**
+     * The base implementation of `_.isEqual` without support for `this` binding
+     * `customizer` functions.
+     *
+     * @private
+     * @param {*} value The value to compare.
+     * @param {*} other The other value to compare.
+     * @param {Function} [customizer] The function to customize comparing values.
+     * @param {boolean} [isLoose] Specify performing partial comparisons.
+     * @param {Array} [stackA] Tracks traversed `value` objects.
+     * @param {Array} [stackB] Tracks traversed `other` objects.
+     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+     */
+    function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) {
+      if (value === other) {
+        return true;
+      }
+      if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
+        return value !== value && other !== other;
+      }
+      return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB);
+    }
+
+    /**
+     * A specialized version of `baseIsEqual` for arrays and objects which performs
+     * deep comparisons and tracks traversed objects enabling objects with circular
+     * references to be compared.
+     *
+     * @private
+     * @param {Object} object The object to compare.
+     * @param {Object} other The other object to compare.
+     * @param {Function} equalFunc The function to determine equivalents of values.
+     * @param {Function} [customizer] The function to customize comparing objects.
+     * @param {boolean} [isLoose] Specify performing partial comparisons.
+     * @param {Array} [stackA=[]] Tracks traversed `value` objects.
+     * @param {Array} [stackB=[]] Tracks traversed `other` objects.
+     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+     */
+    function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
+      var objIsArr = isArray(object),
+          othIsArr = isArray(other),
+          objTag = arrayTag,
+          othTag = arrayTag;
+
+      if (!objIsArr) {
+        objTag = objToString.call(object);
+        if (objTag == argsTag) {
+          objTag = objectTag;
+        } else if (objTag != objectTag) {
+          objIsArr = isTypedArray(object);
+        }
+      }
+      if (!othIsArr) {
+        othTag = objToString.call(other);
+        if (othTag == argsTag) {
+          othTag = objectTag;
+        } else if (othTag != objectTag) {
+          othIsArr = isTypedArray(other);
+        }
+      }
+      var objIsObj = objTag == objectTag,
+          othIsObj = othTag == objectTag,
+          isSameTag = objTag == othTag;
+
+      if (isSameTag && !(objIsArr || objIsObj)) {
+        return equalByTag(object, other, objTag);
+      }
+      if (!isLoose) {
+        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
+            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
+
+        if (objIsWrapped || othIsWrapped) {
+          return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, isLoose, stackA, stackB);
+        }
+      }
+      if (!isSameTag) {
+        return false;
+      }
+      // Assume cyclic values are equal.
+      // For more information on detecting circular references see https://es5.github.io/#JO.
+      stackA || (stackA = []);
+      stackB || (stackB = []);
+
+      var length = stackA.length;
+      while (length--) {
+        if (stackA[length] == object) {
+          return stackB[length] == other;
+        }
+      }
+      // Add `object` and `other` to the stack of traversed objects.
+      stackA.push(object);
+      stackB.push(other);
+
+      var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB);
+
+      stackA.pop();
+      stackB.pop();
+
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.isMatch` without support for callback
+     * shorthands and `this` binding.
+     *
+     * @private
+     * @param {Object} object The object to inspect.
+     * @param {Array} matchData The propery names, values, and compare flags to match.
+     * @param {Function} [customizer] The function to customize comparing objects.
+     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+     */
+    function baseIsMatch(object, matchData, customizer) {
+      var index = matchData.length,
+          length = index,
+          noCustomizer = !customizer;
+
+      if (object == null) {
+        return !length;
+      }
+      object = toObject(object);
+      while (index--) {
+        var data = matchData[index];
+        if ((noCustomizer && data[2])
+              ? data[1] !== object[data[0]]
+              : !(data[0] in object)
+            ) {
+          return false;
+        }
+      }
+      while (++index < length) {
+        data = matchData[index];
+        var key = data[0],
+            objValue = object[key],
+            srcValue = data[1];
+
+        if (noCustomizer && data[2]) {
+          if (objValue === undefined && !(key in object)) {
+            return false;
+          }
+        } else {
+          var result = customizer ? customizer(objValue, srcValue, key) : undefined;
+          if (!(result === undefined ? baseIsEqual(srcValue, objValue, customizer, true) : result)) {
+            return false;
+          }
+        }
+      }
+      return true;
+    }
+
+    /**
+     * The base implementation of `_.map` without support for callback shorthands
+     * and `this` binding.
+     *
+     * @private
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @returns {Array} Returns the new mapped array.
+     */
+    function baseMap(collection, iteratee) {
+      var index = -1,
+          result = isArrayLike(collection) ? Array(collection.length) : [];
+
+      baseEach(collection, function(value, key, collection) {
+        result[++index] = iteratee(value, key, collection);
+      });
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.matches` which does not clone `source`.
+     *
+     * @private
+     * @param {Object} source The object of property values to match.
+     * @returns {Function} Returns the new function.
+     */
+    function baseMatches(source) {
+      var matchData = getMatchData(source);
+      if (matchData.length == 1 && matchData[0][2]) {
+        var key = matchData[0][0],
+            value = matchData[0][1];
+
+        return function(object) {
+          if (object == null) {
+            return false;
+          }
+          return object[key] === value && (value !== undefined || (key in toObject(object)));
+        };
+      }
+      return function(object) {
+        return baseIsMatch(object, matchData);
+      };
+    }
+
+    /**
+     * The base implementation of `_.matchesProperty` which does not clone `srcValue`.
+     *
+     * @private
+     * @param {string} path The path of the property to get.
+     * @param {*} srcValue The value to compare.
+     * @returns {Function} Returns the new function.
+     */
+    function baseMatchesProperty(path, srcValue) {
+      var isArr = isArray(path),
+          isCommon = isKey(path) && isStrictComparable(srcValue),
+          pathKey = (path + '');
+
+      path = toPath(path);
+      return function(object) {
+        if (object == null) {
+          return false;
+        }
+        var key = pathKey;
+        object = toObject(object);
+        if ((isArr || !isCommon) && !(key in object)) {
+          object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
+          if (object == null) {
+            return false;
+          }
+          key = last(path);
+          object = toObject(object);
+        }
+        return object[key] === srcValue
+          ? (srcValue !== undefined || (key in object))
+          : baseIsEqual(srcValue, object[key], undefined, true);
+      };
+    }
+
+    /**
+     * The base implementation of `_.merge` without support for argument juggling,
+     * multiple sources, and `this` binding `customizer` functions.
+     *
+     * @private
+     * @param {Object} object The destination object.
+     * @param {Object} source The source object.
+     * @param {Function} [customizer] The function to customize merged values.
+     * @param {Array} [stackA=[]] Tracks traversed source objects.
+     * @param {Array} [stackB=[]] Associates values with source counterparts.
+     * @returns {Object} Returns `object`.
+     */
+    function baseMerge(object, source, customizer, stackA, stackB) {
+      if (!isObject(object)) {
+        return object;
+      }
+      var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),
+          props = isSrcArr ? undefined : keys(source);
+
+      arrayEach(props || source, function(srcValue, key) {
+        if (props) {
+          key = srcValue;
+          srcValue = source[key];
+        }
+        if (isObjectLike(srcValue)) {
+          stackA || (stackA = []);
+          stackB || (stackB = []);
+          baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);
+        }
+        else {
+          var value = object[key],
+              result = customizer ? customizer(value, srcValue, key, object, source) : undefined,
+              isCommon = result === undefined;
+
+          if (isCommon) {
+            result = srcValue;
+          }
+          if ((result !== undefined || (isSrcArr && !(key in object))) &&
+              (isCommon || (result === result ? (result !== value) : (value === value)))) {
+            object[key] = result;
+          }
+        }
+      });
+      return object;
+    }
+
+    /**
+     * A specialized version of `baseMerge` for arrays and objects which performs
+     * deep merges and tracks traversed objects enabling objects with circular
+     * references to be merged.
+     *
+     * @private
+     * @param {Object} object The destination object.
+     * @param {Object} source The source object.
+     * @param {string} key The key of the value to merge.
+     * @param {Function} mergeFunc The function to merge values.
+     * @param {Function} [customizer] The function to customize merged values.
+     * @param {Array} [stackA=[]] Tracks traversed source objects.
+     * @param {Array} [stackB=[]] Associates values with source counterparts.
+     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+     */
+    function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {
+      var length = stackA.length,
+          srcValue = source[key];
+
+      while (length--) {
+        if (stackA[length] == srcValue) {
+          object[key] = stackB[length];
+          return;
+        }
+      }
+      var value = object[key],
+          result = customizer ? customizer(value, srcValue, key, object, source) : undefined,
+          isCommon = result === undefined;
+
+      if (isCommon) {
+        result = srcValue;
+        if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {
+          result = isArray(value)
+            ? value
+            : (isArrayLike(value) ? arrayCopy(value) : []);
+        }
+        else if (isPlainObject(srcValue) || isArguments(srcValue)) {
+          result = isArguments(value)
+            ? toPlainObject(value)
+            : (isPlainObject(value) ? value : {});
+        }
+        else {
+          isCommon = false;
+        }
+      }
+      // Add the source value to the stack of traversed objects and associate
+      // it with its merged value.
+      stackA.push(srcValue);
+      stackB.push(result);
+
+      if (isCommon) {
+        // Recursively merge objects and arrays (susceptible to call stack limits).
+        object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);
+      } else if (result === result ? (result !== value) : (value === value)) {
+        object[key] = result;
+      }
+    }
+
+    /**
+     * The base implementation of `_.property` without support for deep paths.
+     *
+     * @private
+     * @param {string} key The key of the property to get.
+     * @returns {Function} Returns the new function.
+     */
+    function baseProperty(key) {
+      return function(object) {
+        return object == null ? undefined : object[key];
+      };
+    }
+
+    /**
+     * A specialized version of `baseProperty` which supports deep paths.
+     *
+     * @private
+     * @param {Array|string} path The path of the property to get.
+     * @returns {Function} Returns the new function.
+     */
+    function basePropertyDeep(path) {
+      var pathKey = (path + '');
+      path = toPath(path);
+      return function(object) {
+        return baseGet(object, path, pathKey);
+      };
+    }
+
+    /**
+     * The base implementation of `_.pullAt` without support for individual
+     * index arguments and capturing the removed elements.
+     *
+     * @private
+     * @param {Array} array The array to modify.
+     * @param {number[]} indexes The indexes of elements to remove.
+     * @returns {Array} Returns `array`.
+     */
+    function basePullAt(array, indexes) {
+      var length = array ? indexes.length : 0;
+      while (length--) {
+        var index = indexes[length];
+        if (index != previous && isIndex(index)) {
+          var previous = index;
+          splice.call(array, index, 1);
+        }
+      }
+      return array;
+    }
+
+    /**
+     * The base implementation of `_.random` without support for argument juggling
+     * and returning floating-point numbers.
+     *
+     * @private
+     * @param {number} min The minimum possible value.
+     * @param {number} max The maximum possible value.
+     * @returns {number} Returns the random number.
+     */
+    function baseRandom(min, max) {
+      return min + nativeFloor(nativeRandom() * (max - min + 1));
+    }
+
+    /**
+     * The base implementation of `_.reduce` and `_.reduceRight` without support
+     * for callback shorthands and `this` binding, which iterates over `collection`
+     * using the provided `eachFunc`.
+     *
+     * @private
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @param {*} accumulator The initial value.
+     * @param {boolean} initFromCollection Specify using the first or last element
+     *  of `collection` as the initial value.
+     * @param {Function} eachFunc The function to iterate over `collection`.
+     * @returns {*} Returns the accumulated value.
+     */
+    function baseReduce(collection, iteratee, accumulator, initFromCollection, eachFunc) {
+      eachFunc(collection, function(value, index, collection) {
+        accumulator = initFromCollection
+          ? (initFromCollection = false, value)
+          : iteratee(accumulator, value, index, collection);
+      });
+      return accumulator;
+    }
+
+    /**
+     * The base implementation of `setData` without support for hot loop detection.
+     *
+     * @private
+     * @param {Function} func The function to associate metadata with.
+     * @param {*} data The metadata.
+     * @returns {Function} Returns `func`.
+     */
+    var baseSetData = !metaMap ? identity : function(func, data) {
+      metaMap.set(func, data);
+      return func;
+    };
+
+    /**
+     * The base implementation of `_.slice` without an iteratee call guard.
+     *
+     * @private
+     * @param {Array} array The array to slice.
+     * @param {number} [start=0] The start position.
+     * @param {number} [end=array.length] The end position.
+     * @returns {Array} Returns the slice of `array`.
+     */
+    function baseSlice(array, start, end) {
+      var index = -1,
+          length = array.length;
+
+      start = start == null ? 0 : (+start || 0);
+      if (start < 0) {
+        start = -start > length ? 0 : (length + start);
+      }
+      end = (end === undefined || end > length) ? length : (+end || 0);
+      if (end < 0) {
+        end += length;
+      }
+      length = start > end ? 0 : ((end - start) >>> 0);
+      start >>>= 0;
+
+      var result = Array(length);
+      while (++index < length) {
+        result[index] = array[index + start];
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.some` without support for callback shorthands
+     * and `this` binding.
+     *
+     * @private
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function} predicate The function invoked per iteration.
+     * @returns {boolean} Returns `true` if any element passes the predicate check,
+     *  else `false`.
+     */
+    function baseSome(collection, predicate) {
+      var result;
+
+      baseEach(collection, function(value, index, collection) {
+        result = predicate(value, index, collection);
+        return !result;
+      });
+      return !!result;
+    }
+
+    /**
+     * The base implementation of `_.sortBy` which uses `comparer` to define
+     * the sort order of `array` and replaces criteria objects with their
+     * corresponding values.
+     *
+     * @private
+     * @param {Array} array The array to sort.
+     * @param {Function} comparer The function to define sort order.
+     * @returns {Array} Returns `array`.
+     */
+    function baseSortBy(array, comparer) {
+      var length = array.length;
+
+      array.sort(comparer);
+      while (length--) {
+        array[length] = array[length].value;
+      }
+      return array;
+    }
+
+    /**
+     * The base implementation of `_.sortByOrder` without param guards.
+     *
+     * @private
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
+     * @param {boolean[]} orders The sort orders of `iteratees`.
+     * @returns {Array} Returns the new sorted array.
+     */
+    function baseSortByOrder(collection, iteratees, orders) {
+      var callback = getCallback(),
+          index = -1;
+
+      iteratees = arrayMap(iteratees, function(iteratee) { return callback(iteratee); });
+
+      var result = baseMap(collection, function(value) {
+        var criteria = arrayMap(iteratees, function(iteratee) { return iteratee(value); });
+        return { 'criteria': criteria, 'index': ++index, 'value': value };
+      });
+
+      return baseSortBy(result, function(object, other) {
+        return compareMultiple(object, other, orders);
+      });
+    }
+
+    /**
+     * The base implementation of `_.sum` without support for callback shorthands
+     * and `this` binding.
+     *
+     * @private
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @returns {number} Returns the sum.
+     */
+    function baseSum(collection, iteratee) {
+      var result = 0;
+      baseEach(collection, function(value, index, collection) {
+        result += +iteratee(value, index, collection) || 0;
+      });
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.uniq` without support for callback shorthands
+     * and `this` binding.
+     *
+     * @private
+     * @param {Array} array The array to inspect.
+     * @param {Function} [iteratee] The function invoked per iteration.
+     * @returns {Array} Returns the new duplicate free array.
+     */
+    function baseUniq(array, iteratee) {
+      var index = -1,
+          indexOf = getIndexOf(),
+          length = array.length,
+          isCommon = indexOf === baseIndexOf,
+          isLarge = isCommon && length >= LARGE_ARRAY_SIZE,
+          seen = isLarge ? createCache() : null,
+          result = [];
+
+      if (seen) {
+        indexOf = cacheIndexOf;
+        isCommon = false;
+      } else {
+        isLarge = false;
+        seen = iteratee ? [] : result;
+      }
+      outer:
+      while (++index < length) {
+        var value = array[index],
+            computed = iteratee ? iteratee(value, index, array) : value;
+
+        if (isCommon && value === value) {
+          var seenIndex = seen.length;
+          while (seenIndex--) {
+            if (seen[seenIndex] === computed) {
+              continue outer;
+            }
+          }
+          if (iteratee) {
+            seen.push(computed);
+          }
+          result.push(value);
+        }
+        else if (indexOf(seen, computed, 0) < 0) {
+          if (iteratee || isLarge) {
+            seen.push(computed);
+          }
+          result.push(value);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.values` and `_.valuesIn` which creates an
+     * array of `object` property values corresponding to the property names
+     * of `props`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @param {Array} props The property names to get values for.
+     * @returns {Object} Returns the array of property values.
+     */
+    function baseValues(object, props) {
+      var index = -1,
+          length = props.length,
+          result = Array(length);
+
+      while (++index < length) {
+        result[index] = object[props[index]];
+      }
+      return result;
+    }
+
+    /**
+     * The base implementation of `_.dropRightWhile`, `_.dropWhile`, `_.takeRightWhile`,
+     * and `_.takeWhile` without support for callback shorthands and `this` binding.
+     *
+     * @private
+     * @param {Array} array The array to query.
+     * @param {Function} predicate The function invoked per iteration.
+     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
+     * @param {boolean} [fromRight] Specify iterating from right to left.
+     * @returns {Array} Returns the slice of `array`.
+     */
+    function baseWhile(array, predicate, isDrop, fromRight) {
+      var length = array.length,
+          index = fromRight ? length : -1;
+
+      while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {}
+      return isDrop
+        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
+        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
+    }
+
+    /**
+     * The base implementation of `wrapperValue` which returns the result of
+     * performing a sequence of actions on the unwrapped `value`, where each
+     * successive action is supplied the return value of the previous.
+     *
+     * @private
+     * @param {*} value The unwrapped value.
+     * @param {Array} actions Actions to peform to resolve the unwrapped value.
+     * @returns {*} Returns the resolved value.
+     */
+    function baseWrapperValue(value, actions) {
+      var result = value;
+      if (result instanceof LazyWrapper) {
+        result = result.value();
+      }
+      var index = -1,
+          length = actions.length;
+
+      while (++index < length) {
+        var action = actions[index];
+        result = action.func.apply(action.thisArg, arrayPush([result], action.args));
+      }
+      return result;
+    }
+
+    /**
+     * Performs a binary search of `array` to determine the index at which `value`
+     * should be inserted into `array` in order to maintain its sort order.
+     *
+     * @private
+     * @param {Array} array The sorted array to inspect.
+     * @param {*} value The value to evaluate.
+     * @param {boolean} [retHighest] Specify returning the highest qualified index.
+     * @returns {number} Returns the index at which `value` should be inserted
+     *  into `array`.
+     */
+    function binaryIndex(array, value, retHighest) {
+      var low = 0,
+          high = array ? array.length : low;
+
+      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
+        while (low < high) {
+          var mid = (low + high) >>> 1,
+              computed = array[mid];
+
+          if ((retHighest ? (computed <= value) : (computed < value)) && computed !== null) {
+            low = mid + 1;
+          } else {
+            high = mid;
+          }
+        }
+        return high;
+      }
+      return binaryIndexBy(array, value, identity, retHighest);
+    }
+
+    /**
+     * This function is like `binaryIndex` except that it invokes `iteratee` for
+     * `value` and each element of `array` to compute their sort ranking. The
+     * iteratee is invoked with one argument; (value).
+     *
+     * @private
+     * @param {Array} array The sorted array to inspect.
+     * @param {*} value The value to evaluate.
+     * @param {Function} iteratee The function invoked per iteration.
+     * @param {boolean} [retHighest] Specify returning the highest qualified index.
+     * @returns {number} Returns the index at which `value` should be inserted
+     *  into `array`.
+     */
+    function binaryIndexBy(array, value, iteratee, retHighest) {
+      value = iteratee(value);
+
+      var low = 0,
+          high = array ? array.length : 0,
+          valIsNaN = value !== value,
+          valIsNull = value === null,
+          valIsUndef = value === undefined;
+
+      while (low < high) {
+        var mid = nativeFloor((low + high) / 2),
+            computed = iteratee(array[mid]),
+            isDef = computed !== undefined,
+            isReflexive = computed === computed;
+
+        if (valIsNaN) {
+          var setLow = isReflexive || retHighest;
+        } else if (valIsNull) {
+          setLow = isReflexive && isDef && (retHighest || computed != null);
+        } else if (valIsUndef) {
+          setLow = isReflexive && (retHighest || isDef);
+        } else if (computed == null) {
+          setLow = false;
+        } else {
+          setLow = retHighest ? (computed <= value) : (computed < value);
+        }
+        if (setLow) {
+          low = mid + 1;
+        } else {
+          high = mid;
+        }
+      }
+      return nativeMin(high, MAX_ARRAY_INDEX);
+    }
+
+    /**
+     * A specialized version of `baseCallback` which only supports `this` binding
+     * and specifying the number of arguments to provide to `func`.
+     *
+     * @private
+     * @param {Function} func The function to bind.
+     * @param {*} thisArg The `this` binding of `func`.
+     * @param {number} [argCount] The number of arguments to provide to `func`.
+     * @returns {Function} Returns the callback.
+     */
+    function bindCallback(func, thisArg, argCount) {
+      if (typeof func != 'function') {
+        return identity;
+      }
+      if (thisArg === undefined) {
+        return func;
+      }
+      switch (argCount) {
+        case 1: return function(value) {
+          return func.call(thisArg, value);
+        };
+        case 3: return function(value, index, collection) {
+          return func.call(thisArg, value, index, collection);
+        };
+        case 4: return function(accumulator, value, index, collection) {
+          return func.call(thisArg, accumulator, value, index, collection);
+        };
+        case 5: return function(value, other, key, object, source) {
+          return func.call(thisArg, value, other, key, object, source);
+        };
+      }
+      return function() {
+        return func.apply(thisArg, arguments);
+      };
+    }
+
+    /**
+     * Creates a clone of the given array buffer.
+     *
+     * @private
+     * @param {ArrayBuffer} buffer The array buffer to clone.
+     * @returns {ArrayBuffer} Returns the cloned array buffer.
+     */
+    function bufferClone(buffer) {
+      var result = new ArrayBuffer(buffer.byteLength),
+          view = new Uint8Array(result);
+
+      view.set(new Uint8Array(buffer));
+      return result;
+    }
+
+    /**
+     * Creates an array that is the composition of partially applied arguments,
+     * placeholders, and provided arguments into a single array of arguments.
+     *
+     * @private
+     * @param {Array|Object} args The provided arguments.
+     * @param {Array} partials The arguments to prepend to those provided.
+     * @param {Array} holders The `partials` placeholder indexes.
+     * @returns {Array} Returns the new array of composed arguments.
+     */
+    function composeArgs(args, partials, holders) {
+      var holdersLength = holders.length,
+          argsIndex = -1,
+          argsLength = nativeMax(args.length - holdersLength, 0),
+          leftIndex = -1,
+          leftLength = partials.length,
+          result = Array(leftLength + argsLength);
+
+      while (++leftIndex < leftLength) {
+        result[leftIndex] = partials[leftIndex];
+      }
+      while (++argsIndex < holdersLength) {
+        result[holders[argsIndex]] = args[argsIndex];
+      }
+      while (argsLength--) {
+        result[leftIndex++] = args[argsIndex++];
+      }
+      return result;
+    }
+
+    /**
+     * This function is like `composeArgs` except that the arguments composition
+     * is tailored for `_.partialRight`.
+     *
+     * @private
+     * @param {Array|Object} args The provided arguments.
+     * @param {Array} partials The arguments to append to those provided.
+     * @param {Array} holders The `partials` placeholder indexes.
+     * @returns {Array} Returns the new array of composed arguments.
+     */
+    function composeArgsRight(args, partials, holders) {
+      var holdersIndex = -1,
+          holdersLength = holders.length,
+          argsIndex = -1,
+          argsLength = nativeMax(args.length - holdersLength, 0),
+          rightIndex = -1,
+          rightLength = partials.length,
+          result = Array(argsLength + rightLength);
+
+      while (++argsIndex < argsLength) {
+        result[argsIndex] = args[argsIndex];
+      }
+      var offset = argsIndex;
+      while (++rightIndex < rightLength) {
+        result[offset + rightIndex] = partials[rightIndex];
+      }
+      while (++holdersIndex < holdersLength) {
+        result[offset + holders[holdersIndex]] = args[argsIndex++];
+      }
+      return result;
+    }
+
+    /**
+     * Creates a `_.countBy`, `_.groupBy`, `_.indexBy`, or `_.partition` function.
+     *
+     * @private
+     * @param {Function} setter The function to set keys and values of the accumulator object.
+     * @param {Function} [initializer] The function to initialize the accumulator object.
+     * @returns {Function} Returns the new aggregator function.
+     */
+    function createAggregator(setter, initializer) {
+      return function(collection, iteratee, thisArg) {
+        var result = initializer ? initializer() : {};
+        iteratee = getCallback(iteratee, thisArg, 3);
+
+        if (isArray(collection)) {
+          var index = -1,
+              length = collection.length;
+
+          while (++index < length) {
+            var value = collection[index];
+            setter(result, value, iteratee(value, index, collection), collection);
+          }
+        } else {
+          baseEach(collection, function(value, key, collection) {
+            setter(result, value, iteratee(value, key, collection), collection);
+          });
+        }
+        return result;
+      };
+    }
+
+    /**
+     * Creates a `_.assign`, `_.defaults`, or `_.merge` function.
+     *
+     * @private
+     * @param {Function} assigner The function to assign values.
+     * @returns {Function} Returns the new assigner function.
+     */
+    function createAssigner(assigner) {
+      return restParam(function(object, sources) {
+        var index = -1,
+            length = object == null ? 0 : sources.length,
+            customizer = length > 2 ? sources[length - 2] : undefined,
+            guard = length > 2 ? sources[2] : undefined,
+            thisArg = length > 1 ? sources[length - 1] : undefined;
+
+        if (typeof customizer == 'function') {
+          customizer = bindCallback(customizer, thisArg, 5);
+          length -= 2;
+        } else {
+          customizer = typeof thisArg == 'function' ? thisArg : undefined;
+          length -= (customizer ? 1 : 0);
+        }
+        if (guard && isIterateeCall(sources[0], sources[1], guard)) {
+          customizer = length < 3 ? undefined : customizer;
+          length = 1;
+        }
+        while (++index < length) {
+          var source = sources[index];
+          if (source) {
+            assigner(object, source, customizer);
+          }
+        }
+        return object;
+      });
+    }
+
+    /**
+     * Creates a `baseEach` or `baseEachRight` function.
+     *
+     * @private
+     * @param {Function} eachFunc The function to iterate over a collection.
+     * @param {boolean} [fromRight] Specify iterating from right to left.
+     * @returns {Function} Returns the new base function.
+     */
+    function createBaseEach(eachFunc, fromRight) {
+      return function(collection, iteratee) {
+        var length = collection ? getLength(collection) : 0;
+        if (!isLength(length)) {
+          return eachFunc(collection, iteratee);
+        }
+        var index = fromRight ? length : -1,
+            iterable = toObject(collection);
+
+        while ((fromRight ? index-- : ++index < length)) {
+          if (iteratee(iterable[index], index, iterable) === false) {
+            break;
+          }
+        }
+        return collection;
+      };
+    }
+
+    /**
+     * Creates a base function for `_.forIn` or `_.forInRight`.
+     *
+     * @private
+     * @param {boolean} [fromRight] Specify iterating from right to left.
+     * @returns {Function} Returns the new base function.
+     */
+    function createBaseFor(fromRight) {
+      return function(object, iteratee, keysFunc) {
+        var iterable = toObject(object),
+            props = keysFunc(object),
+            length = props.length,
+            index = fromRight ? length : -1;
+
+        while ((fromRight ? index-- : ++index < length)) {
+          var key = props[index];
+          if (iteratee(iterable[key], key, iterable) === false) {
+            break;
+          }
+        }
+        return object;
+      };
+    }
+
+    /**
+     * Creates a function that wraps `func` and invokes it with the `this`
+     * binding of `thisArg`.
+     *
+     * @private
+     * @param {Function} func The function to bind.
+     * @param {*} [thisArg] The `this` binding of `func`.
+     * @returns {Function} Returns the new bound function.
+     */
+    function createBindWrapper(func, thisArg) {
+      var Ctor = createCtorWrapper(func);
+
+      function wrapper() {
+        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
+        return fn.apply(thisArg, arguments);
+      }
+      return wrapper;
+    }
+
+    /**
+     * Creates a `Set` cache object to optimize linear searches of large arrays.
+     *
+     * @private
+     * @param {Array} [values] The values to cache.
+     * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`.
+     */
+    function createCache(values) {
+      return (nativeCreate && Set) ? new SetCache(values) : null;
+    }
+
+    /**
+     * Creates a function that produces compound words out of the words in a
+     * given string.
+     *
+     * @private
+     * @param {Function} callback The function to combine each word.
+     * @returns {Function} Returns the new compounder function.
+     */
+    function createCompounder(callback) {
+      return function(string) {
+        var index = -1,
+            array = words(deburr(string)),
+            length = array.length,
+            result = '';
+
+        while (++index < length) {
+          result = callback(result, array[index], index);
+        }
+        return result;
+      };
+    }
+
+    /**
+     * Creates a function that produces an instance of `Ctor` regardless of
+     * whether it was invoked as part of a `new` expression or by `call` or `apply`.
+     *
+     * @private
+     * @param {Function} Ctor The constructor to wrap.
+     * @returns {Function} Returns the new wrapped function.
+     */
+    function createCtorWrapper(Ctor) {
+      return function() {
+        // Use a `switch` statement to work with class constructors.
+        // See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
+        // for more details.
+        var args = arguments;
+        switch (args.length) {
+          case 0: return new Ctor;
+          case 1: return new Ctor(args[0]);
+          case 2: return new Ctor(args[0], args[1]);
+          case 3: return new Ctor(args[0], args[1], args[2]);
+          case 4: return new Ctor(args[0], args[1], args[2], args[3]);
+          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
+          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
+          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
+        }
+        var thisBinding = baseCreate(Ctor.prototype),
+            result = Ctor.apply(thisBinding, args);
+
+        // Mimic the constructor's `return` behavior.
+        // See https://es5.github.io/#x13.2.2 for more details.
+        return isObject(result) ? result : thisBinding;
+      };
+    }
+
+    /**
+     * Creates a `_.curry` or `_.curryRight` function.
+     *
+     * @private
+     * @param {boolean} flag The curry bit flag.
+     * @returns {Function} Returns the new curry function.
+     */
+    function createCurry(flag) {
+      function curryFunc(func, arity, guard) {
+        if (guard && isIterateeCall(func, arity, guard)) {
+          arity = undefined;
+        }
+        var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity);
+        result.placeholder = curryFunc.placeholder;
+        return result;
+      }
+      return curryFunc;
+    }
+
+    /**
+     * Creates a `_.defaults` or `_.defaultsDeep` function.
+     *
+     * @private
+     * @param {Function} assigner The function to assign values.
+     * @param {Function} customizer The function to customize assigned values.
+     * @returns {Function} Returns the new defaults function.
+     */
+    function createDefaults(assigner, customizer) {
+      return restParam(function(args) {
+        var object = args[0];
+        if (object == null) {
+          return object;
+        }
+        args.push(customizer);
+        return assigner.apply(undefined, args);
+      });
+    }
+
+    /**
+     * Creates a `_.max` or `_.min` function.
+     *
+     * @private
+     * @param {Function} comparator The function used to compare values.
+     * @param {*} exValue The initial extremum value.
+     * @returns {Function} Returns the new extremum function.
+     */
+    function createExtremum(comparator, exValue) {
+      return function(collection, iteratee, thisArg) {
+        if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
+          iteratee = undefined;
+        }
+        iteratee = getCallback(iteratee, thisArg, 3);
+        if (iteratee.length == 1) {
+          collection = isArray(collection) ? collection : toIterable(collection);
+          var result = arrayExtremum(collection, iteratee, comparator, exValue);
+          if (!(collection.length && result === exValue)) {
+            return result;
+          }
+        }
+        return baseExtremum(collection, iteratee, comparator, exValue);
+      };
+    }
+
+    /**
+     * Creates a `_.find` or `_.findLast` function.
+     *
+     * @private
+     * @param {Function} eachFunc The function to iterate over a collection.
+     * @param {boolean} [fromRight] Specify iterating from right to left.
+     * @returns {Function} Returns the new find function.
+     */
+    function createFind(eachFunc, fromRight) {
+      return function(collection, predicate, thisArg) {
+        predicate = getCallback(predicate, thisArg, 3);
+        if (isArray(collection)) {
+          var index = baseFindIndex(collection, predicate, fromRight);
+          return index > -1 ? collection[index] : undefined;
+        }
+        return baseFind(collection, predicate, eachFunc);
+      };
+    }
+
+    /**
+     * Creates a `_.findIndex` or `_.findLastIndex` function.
+     *
+     * @private
+     * @param {boolean} [fromRight] Specify iterating from right to left.
+     * @returns {Function} Returns the new find function.
+     */
+    function createFindIndex(fromRight) {
+      return function(array, predicate, thisArg) {
+        if (!(array && array.length)) {
+          return -1;
+        }
+        predicate = getCallback(predicate, thisArg, 3);
+        return baseFindIndex(array, predicate, fromRight);
+      };
+    }
+
+    /**
+     * Creates a `_.findKey` or `_.findLastKey` function.
+     *
+     * @private
+     * @param {Function} objectFunc The function to iterate over an object.
+     * @returns {Function} Returns the new find function.
+     */
+    function createFindKey(objectFunc) {
+      return function(object, predicate, thisArg) {
+        predicate = getCallback(predicate, thisArg, 3);
+        return baseFind(object, predicate, objectFunc, true);
+      };
+    }
+
+    /**
+     * Creates a `_.flow` or `_.flowRight` function.
+     *
+     * @private
+     * @param {boolean} [fromRight] Specify iterating from right to left.
+     * @returns {Function} Returns the new flow function.
+     */
+    function createFlow(fromRight) {
+      return function() {
+        var wrapper,
+            length = arguments.length,
+            index = fromRight ? length : -1,
+            leftIndex = 0,
+            funcs = Array(length);
+
+        while ((fromRight ? index-- : ++index < length)) {
+          var func = funcs[leftIndex++] = arguments[index];
+          if (typeof func != 'function') {
+            throw new TypeError(FUNC_ERROR_TEXT);
+          }
+          if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') {
+            wrapper = new LodashWrapper([], true);
+          }
+        }
+        index = wrapper ? -1 : length;
+        while (++index < length) {
+          func = funcs[index];
+
+          var funcName = getFuncName(func),
+              data = funcName == 'wrapper' ? getData(func) : undefined;
+
+          if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) {
+            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
+          } else {
+            wrapper = (func.length == 1 && isLaziable(func)) ? wrapper[funcName]() : wrapper.thru(func);
+          }
+        }
+        return function() {
+          var args = arguments,
+              value = args[0];
+
+          if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) {
+            return wrapper.plant(value).value();
+          }
+          var index = 0,
+              result = length ? funcs[index].apply(this, args) : value;
+
+          while (++index < length) {
+            result = funcs[index].call(this, result);
+          }
+          return result;
+        };
+      };
+    }
+
+    /**
+     * Creates a function for `_.forEach` or `_.forEachRight`.
+     *
+     * @private
+     * @param {Function} arrayFunc The function to iterate over an array.
+     * @param {Function} eachFunc The function to iterate over a collection.
+     * @returns {Function} Returns the new each function.
+     */
+    function createForEach(arrayFunc, eachFunc) {
+      return function(collection, iteratee, thisArg) {
+        return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))
+          ? arrayFunc(collection, iteratee)
+          : eachFunc(collection, bindCallback(iteratee, thisArg, 3));
+      };
+    }
+
+    /**
+     * Creates a function for `_.forIn` or `_.forInRight`.
+     *
+     * @private
+     * @param {Function} objectFunc The function to iterate over an object.
+     * @returns {Function} Returns the new each function.
+     */
+    function createForIn(objectFunc) {
+      return function(object, iteratee, thisArg) {
+        if (typeof iteratee != 'function' || thisArg !== undefined) {
+          iteratee = bindCallback(iteratee, thisArg, 3);
+        }
+        return objectFunc(object, iteratee, keysIn);
+      };
+    }
+
+    /**
+     * Creates a function for `_.forOwn` or `_.forOwnRight`.
+     *
+     * @private
+     * @param {Function} objectFunc The function to iterate over an object.
+     * @returns {Function} Returns the new each function.
+     */
+    function createForOwn(objectFunc) {
+      return function(object, iteratee, thisArg) {
+        if (typeof iteratee != 'function' || thisArg !== undefined) {
+          iteratee = bindCallback(iteratee, thisArg, 3);
+        }
+        return objectFunc(object, iteratee);
+      };
+    }
+
+    /**
+     * Creates a function for `_.mapKeys` or `_.mapValues`.
+     *
+     * @private
+     * @param {boolean} [isMapKeys] Specify mapping keys instead of values.
+     * @returns {Function} Returns the new map function.
+     */
+    function createObjectMapper(isMapKeys) {
+      return function(object, iteratee, thisArg) {
+        var result = {};
+        iteratee = getCallback(iteratee, thisArg, 3);
+
+        baseForOwn(object, function(value, key, object) {
+          var mapped = iteratee(value, key, object);
+          key = isMapKeys ? mapped : key;
+          value = isMapKeys ? value : mapped;
+          result[key] = value;
+        });
+        return result;
+      };
+    }
+
+    /**
+     * Creates a function for `_.padLeft` or `_.padRight`.
+     *
+     * @private
+     * @param {boolean} [fromRight] Specify padding from the right.
+     * @returns {Function} Returns the new pad function.
+     */
+    function createPadDir(fromRight) {
+      return function(string, length, chars) {
+        string = baseToString(string);
+        return (fromRight ? string : '') + createPadding(string, length, chars) + (fromRight ? '' : string);
+      };
+    }
+
+    /**
+     * Creates a `_.partial` or `_.partialRight` function.
+     *
+     * @private
+     * @param {boolean} flag The partial bit flag.
+     * @returns {Function} Returns the new partial function.
+     */
+    function createPartial(flag) {
+      var partialFunc = restParam(function(func, partials) {
+        var holders = replaceHolders(partials, partialFunc.placeholder);
+        return createWrapper(func, flag, undefined, partials, holders);
+      });
+      return partialFunc;
+    }
+
+    /**
+     * Creates a function for `_.reduce` or `_.reduceRight`.
+     *
+     * @private
+     * @param {Function} arrayFunc The function to iterate over an array.
+     * @param {Function} eachFunc The function to iterate over a collection.
+     * @returns {Function} Returns the new each function.
+     */
+    function createReduce(arrayFunc, eachFunc) {
+      return function(collection, iteratee, accumulator, thisArg) {
+        var initFromArray = arguments.length < 3;
+        return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection))
+          ? arrayFunc(collection, iteratee, accumulator, initFromArray)
+          : baseReduce(collection, getCallback(iteratee, thisArg, 4), accumulator, initFromArray, eachFunc);
+      };
+    }
+
+    /**
+     * Creates a function that wraps `func` and invokes it with optional `this`
+     * binding of, partial application, and currying.
+     *
+     * @private
+     * @param {Function|string} func The function or method name to reference.
+     * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.
+     * @param {*} [thisArg] The `this` binding of `func`.
+     * @param {Array} [partials] The arguments to prepend to those provided to the new function.
+     * @param {Array} [holders] The `partials` placeholder indexes.
+     * @param {Array} [partialsRight] The arguments to append to those provided to the new function.
+     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
+     * @param {Array} [argPos] The argument positions of the new function.
+     * @param {number} [ary] The arity cap of `func`.
+     * @param {number} [arity] The arity of `func`.
+     * @returns {Function} Returns the new wrapped function.
+     */
+    function createHybridWrapper(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
+      var isAry = bitmask & ARY_FLAG,
+          isBind = bitmask & BIND_FLAG,
+          isBindKey = bitmask & BIND_KEY_FLAG,
+          isCurry = bitmask & CURRY_FLAG,
+          isCurryBound = bitmask & CURRY_BOUND_FLAG,
+          isCurryRight = bitmask & CURRY_RIGHT_FLAG,
+          Ctor = isBindKey ? undefined : createCtorWrapper(func);
+
+      function wrapper() {
+        // Avoid `arguments` object use disqualifying optimizations by
+        // converting it to an array before providing it to other functions.
+        var length = arguments.length,
+            index = length,
+            args = Array(length);
+
+        while (index--) {
+          args[index] = arguments[index];
+        }
+        if (partials) {
+          args = composeArgs(args, partials, holders);
+        }
+        if (partialsRight) {
+          args = composeArgsRight(args, partialsRight, holdersRight);
+        }
+        if (isCurry || isCurryRight) {
+          var placeholder = wrapper.placeholder,
+              argsHolders = replaceHolders(args, placeholder);
+
+          length -= argsHolders.length;
+          if (length < arity) {
+            var newArgPos = argPos ? arrayCopy(argPos) : undefined,
+                newArity = nativeMax(arity - length, 0),
+                newsHolders = isCurry ? argsHolders : undefined,
+                newHoldersRight = isCurry ? undefined : argsHolders,
+                newPartials = isCurry ? args : undefined,
+                newPartialsRight = isCurry ? undefined : args;
+
+            bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);
+            bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);
+
+            if (!isCurryBound) {
+              bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);
+            }
+            var newData = [func, bitmask, thisArg, newPartials, newsHolders, newPartialsRight, newHoldersRight, newArgPos, ary, newArity],
+                result = createHybridWrapper.apply(undefined, newData);
+
+            if (isLaziable(func)) {
+              setData(result, newData);
+            }
+            result.placeholder = placeholder;
+            return result;
+          }
+        }
+        var thisBinding = isBind ? thisArg : this,
+            fn = isBindKey ? thisBinding[func] : func;
+
+        if (argPos) {
+          args = reorder(args, argPos);
+        }
+        if (isAry && ary < args.length) {
+          args.length = ary;
+        }
+        if (this && this !== root && this instanceof wrapper) {
+          fn = Ctor || createCtorWrapper(func);
+        }
+        return fn.apply(thisBinding, args);
+      }
+      return wrapper;
+    }
+
+    /**
+     * Creates the padding required for `string` based on the given `length`.
+     * The `chars` string is truncated if the number of characters exceeds `length`.
+     *
+     * @private
+     * @param {string} string The string to create padding for.
+     * @param {number} [length=0] The padding length.
+     * @param {string} [chars=' '] The string used as padding.
+     * @returns {string} Returns the pad for `string`.
+     */
+    function createPadding(string, length, chars) {
+      var strLength = string.length;
+      length = +length;
+
+      if (strLength >= length || !nativeIsFinite(length)) {
+        return '';
+      }
+      var padLength = length - strLength;
+      chars = chars == null ? ' ' : (chars + '');
+      return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength);
+    }
+
+    /**
+     * Creates a function that wraps `func` and invokes it with the optional `this`
+     * binding of `thisArg` and the `partials` prepended to those provided to
+     * the wrapper.
+     *
+     * @private
+     * @param {Function} func The function to partially apply arguments to.
+     * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.
+     * @param {*} thisArg The `this` binding of `func`.
+     * @param {Array} partials The arguments to prepend to those provided to the new function.
+     * @returns {Function} Returns the new bound function.
+     */
+    function createPartialWrapper(func, bitmask, thisArg, partials) {
+      var isBind = bitmask & BIND_FLAG,
+          Ctor = createCtorWrapper(func);
+
+      function wrapper() {
+        // Avoid `arguments` object use disqualifying optimizations by
+        // converting it to an array before providing it `func`.
+        var argsIndex = -1,
+            argsLength = arguments.length,
+            leftIndex = -1,
+            leftLength = partials.length,
+            args = Array(leftLength + argsLength);
+
+        while (++leftIndex < leftLength) {
+          args[leftIndex] = partials[leftIndex];
+        }
+        while (argsLength--) {
+          args[leftIndex++] = arguments[++argsIndex];
+        }
+        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
+        return fn.apply(isBind ? thisArg : this, args);
+      }
+      return wrapper;
+    }
+
+    /**
+     * Creates a `_.ceil`, `_.floor`, or `_.round` function.
+     *
+     * @private
+     * @param {string} methodName The name of the `Math` method to use when rounding.
+     * @returns {Function} Returns the new round function.
+     */
+    function createRound(methodName) {
+      var func = Math[methodName];
+      return function(number, precision) {
+        precision = precision === undefined ? 0 : (+precision || 0);
+        if (precision) {
+          precision = pow(10, precision);
+          return func(number * precision) / precision;
+        }
+        return func(number);
+      };
+    }
+
+    /**
+     * Creates a `_.sortedIndex` or `_.sortedLastIndex` function.
+     *
+     * @private
+     * @param {boolean} [retHighest] Specify returning the highest qualified index.
+     * @returns {Function} Returns the new index function.
+     */
+    function createSortedIndex(retHighest) {
+      return function(array, value, iteratee, thisArg) {
+        var callback = getCallback(iteratee);
+        return (iteratee == null && callback === baseCallback)
+          ? binaryIndex(array, value, retHighest)
+          : binaryIndexBy(array, value, callback(iteratee, thisArg, 1), retHighest);
+      };
+    }
+
+    /**
+     * Creates a function that either curries or invokes `func` with optional
+     * `this` binding and partially applied arguments.
+     *
+     * @private
+     * @param {Function|string} func The function or method name to reference.
+     * @param {number} bitmask The bitmask of flags.
+     *  The bitmask may be composed of the following flags:
+     *     1 - `_.bind`
+     *     2 - `_.bindKey`
+     *     4 - `_.curry` or `_.curryRight` of a bound function
+     *     8 - `_.curry`
+     *    16 - `_.curryRight`
+     *    32 - `_.partial`
+     *    64 - `_.partialRight`
+     *   128 - `_.rearg`
+     *   256 - `_.ary`
+     * @param {*} [thisArg] The `this` binding of `func`.
+     * @param {Array} [partials] The arguments to be partially applied.
+     * @param {Array} [holders] The `partials` placeholder indexes.
+     * @param {Array} [argPos] The argument positions of the new function.
+     * @param {number} [ary] The arity cap of `func`.
+     * @param {number} [arity] The arity of `func`.
+     * @returns {Function} Returns the new wrapped function.
+     */
+    function createWrapper(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
+      var isBindKey = bitmask & BIND_KEY_FLAG;
+      if (!isBindKey && typeof func != 'function') {
+        throw new TypeError(FUNC_ERROR_TEXT);
+      }
+      var length = partials ? partials.length : 0;
+      if (!length) {
+        bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);
+        partials = holders = undefined;
+      }
+      length -= (holders ? holders.length : 0);
+      if (bitmask & PARTIAL_RIGHT_FLAG) {
+        var partialsRight = partials,
+            holdersRight = holders;
+
+        partials = holders = undefined;
+      }
+      var data = isBindKey ? undefined : getData(func),
+          newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];
+
+      if (data) {
+        mergeData(newData, data);
+        bitmask = newData[1];
+        arity = newData[9];
+      }
+      newData[9] = arity == null
+        ? (isBindKey ? 0 : func.length)
+        : (nativeMax(arity - length, 0) || 0);
+
+      if (bitmask == BIND_FLAG) {
+        var result = createBindWrapper(newData[0], newData[2]);
+      } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !newData[4].length) {
+        result = createPartialWrapper.apply(undefined, newData);
+      } else {
+        result = createHybridWrapper.apply(undefined, newData);
+      }
+      var setter = data ? baseSetData : setData;
+      return setter(result, newData);
+    }
+
+    /**
+     * A specialized version of `baseIsEqualDeep` for arrays with support for
+     * partial deep comparisons.
+     *
+     * @private
+     * @param {Array} array The array to compare.
+     * @param {Array} other The other array to compare.
+     * @param {Function} equalFunc The function to determine equivalents of values.
+     * @param {Function} [customizer] The function to customize comparing arrays.
+     * @param {boolean} [isLoose] Specify performing partial comparisons.
+     * @param {Array} [stackA] Tracks traversed `value` objects.
+     * @param {Array} [stackB] Tracks traversed `other` objects.
+     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
+     */
+    function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) {
+      var index = -1,
+          arrLength = array.length,
+          othLength = other.length;
+
+      if (arrLength != othLength && !(isLoose && othLength > arrLength)) {
+        return false;
+      }
+      // Ignore non-index properties.
+      while (++index < arrLength) {
+        var arrValue = array[index],
+            othValue = other[index],
+            result = customizer ? customizer(isLoose ? othValue : arrValue, isLoose ? arrValue : othValue, index) : undefined;
+
+        if (result !== undefined) {
+          if (result) {
+            continue;
+          }
+          return false;
+        }
+        // Recursively compare arrays (susceptible to call stack limits).
+        if (isLoose) {
+          if (!arraySome(other, function(othValue) {
+                return arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB);
+              })) {
+            return false;
+          }
+        } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB))) {
+          return false;
+        }
+      }
+      return true;
+    }
+
+    /**
+     * A specialized version of `baseIsEqualDeep` for comparing objects of
+     * the same `toStringTag`.
+     *
+     * **Note:** This function only supports comparing values with tags of
+     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+     *
+     * @private
+     * @param {Object} object The object to compare.
+     * @param {Object} other The other object to compare.
+     * @param {string} tag The `toStringTag` of the objects to compare.
+     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+     */
+    function equalByTag(object, other, tag) {
+      switch (tag) {
+        case boolTag:
+        case dateTag:
+          // Coerce dates and booleans to numbers, dates to milliseconds and booleans
+          // to `1` or `0` treating invalid dates coerced to `NaN` as not equal.
+          return +object == +other;
+
+        case errorTag:
+          return object.name == other.name && object.message == other.message;
+
+        case numberTag:
+          // Treat `NaN` vs. `NaN` as equal.
+          return (object != +object)
+            ? other != +other
+            : object == +other;
+
+        case regexpTag:
+        case stringTag:
+          // Coerce regexes to strings and treat strings primitives and string
+          // objects as equal. See https://es5.github.io/#x15.10.6.4 for more details.
+          return object == (other + '');
+      }
+      return false;
+    }
+
+    /**
+     * A specialized version of `baseIsEqualDeep` for objects with support for
+     * partial deep comparisons.
+     *
+     * @private
+     * @param {Object} object The object to compare.
+     * @param {Object} other The other object to compare.
+     * @param {Function} equalFunc The function to determine equivalents of values.
+     * @param {Function} [customizer] The function to customize comparing values.
+     * @param {boolean} [isLoose] Specify performing partial comparisons.
+     * @param {Array} [stackA] Tracks traversed `value` objects.
+     * @param {Array} [stackB] Tracks traversed `other` objects.
+     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+     */
+    function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) {
+      var objProps = keys(object),
+          objLength = objProps.length,
+          othProps = keys(other),
+          othLength = othProps.length;
+
+      if (objLength != othLength && !isLoose) {
+        return false;
+      }
+      var index = objLength;
+      while (index--) {
+        var key = objProps[index];
+        if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) {
+          return false;
+        }
+      }
+      var skipCtor = isLoose;
+      while (++index < objLength) {
+        key = objProps[index];
+        var objValue = object[key],
+            othValue = other[key],
+            result = customizer ? customizer(isLoose ? othValue : objValue, isLoose? objValue : othValue, key) : undefined;
+
+        // Recursively compare objects (susceptible to call stack limits).
+        if (!(result === undefined ? equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB) : result)) {
+          return false;
+        }
+        skipCtor || (skipCtor = key == 'constructor');
+      }
+      if (!skipCtor) {
+        var objCtor = object.constructor,
+            othCtor = other.constructor;
+
+        // Non `Object` object instances with different constructors are not equal.
+        if (objCtor != othCtor &&
+            ('constructor' in object && 'constructor' in other) &&
+            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
+              typeof othCtor == 'function' && othCtor instanceof othCtor)) {
+          return false;
+        }
+      }
+      return true;
+    }
+
+    /**
+     * Gets the appropriate "callback" function. If the `_.callback` method is
+     * customized this function returns the custom method, otherwise it returns
+     * the `baseCallback` function. If arguments are provided the chosen function
+     * is invoked with them and its result is returned.
+     *
+     * @private
+     * @returns {Function} Returns the chosen function or its result.
+     */
+    function getCallback(func, thisArg, argCount) {
+      var result = lodash.callback || callback;
+      result = result === callback ? baseCallback : result;
+      return argCount ? result(func, thisArg, argCount) : result;
+    }
+
+    /**
+     * Gets metadata for `func`.
+     *
+     * @private
+     * @param {Function} func The function to query.
+     * @returns {*} Returns the metadata for `func`.
+     */
+    var getData = !metaMap ? noop : function(func) {
+      return metaMap.get(func);
+    };
+
+    /**
+     * Gets the name of `func`.
+     *
+     * @private
+     * @param {Function} func The function to query.
+     * @returns {string} Returns the function name.
+     */
+    function getFuncName(func) {
+      var result = (func.name + ''),
+          array = realNames[result],
+          length = array ? array.length : 0;
+
+      while (length--) {
+        var data = array[length],
+            otherFunc = data.func;
+        if (otherFunc == null || otherFunc == func) {
+          return data.name;
+        }
+      }
+      return result;
+    }
+
+    /**
+     * Gets the appropriate "indexOf" function. If the `_.indexOf` method is
+     * customized this function returns the custom method, otherwise it returns
+     * the `baseIndexOf` function. If arguments are provided the chosen function
+     * is invoked with them and its result is returned.
+     *
+     * @private
+     * @returns {Function|number} Returns the chosen function or its result.
+     */
+    function getIndexOf(collection, target, fromIndex) {
+      var result = lodash.indexOf || indexOf;
+      result = result === indexOf ? baseIndexOf : result;
+      return collection ? result(collection, target, fromIndex) : result;
+    }
+
+    /**
+     * Gets the "length" property value of `object`.
+     *
+     * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)
+     * that affects Safari on at least iOS 8.1-8.3 ARM64.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {*} Returns the "length" value.
+     */
+    var getLength = baseProperty('length');
+
+    /**
+     * Gets the propery names, values, and compare flags of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the match data of `object`.
+     */
+    function getMatchData(object) {
+      var result = pairs(object),
+          length = result.length;
+
+      while (length--) {
+        result[length][2] = isStrictComparable(result[length][1]);
+      }
+      return result;
+    }
+
+    /**
+     * Gets the native function at `key` of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @param {string} key The key of the method to get.
+     * @returns {*} Returns the function if it's native, else `undefined`.
+     */
+    function getNative(object, key) {
+      var value = object == null ? undefined : object[key];
+      return isNative(value) ? value : undefined;
+    }
+
+    /**
+     * Gets the view, applying any `transforms` to the `start` and `end` positions.
+     *
+     * @private
+     * @param {number} start The start of the view.
+     * @param {number} end The end of the view.
+     * @param {Array} transforms The transformations to apply to the view.
+     * @returns {Object} Returns an object containing the `start` and `end`
+     *  positions of the view.
+     */
+    function getView(start, end, transforms) {
+      var index = -1,
+          length = transforms.length;
+
+      while (++index < length) {
+        var data = transforms[index],
+            size = data.size;
+
+        switch (data.type) {
+          case 'drop':      start += size; break;
+          case 'dropRight': end -= size; break;
+          case 'take':      end = nativeMin(end, start + size); break;
+          case 'takeRight': start = nativeMax(start, end - size); break;
+        }
+      }
+      return { 'start': start, 'end': end };
+    }
+
+    /**
+     * Initializes an array clone.
+     *
+     * @private
+     * @param {Array} array The array to clone.
+     * @returns {Array} Returns the initialized clone.
+     */
+    function initCloneArray(array) {
+      var length = array.length,
+          result = new array.constructor(length);
+
+      // Add array properties assigned by `RegExp#exec`.
+      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
+        result.index = array.index;
+        result.input = array.input;
+      }
+      return result;
+    }
+
+    /**
+     * Initializes an object clone.
+     *
+     * @private
+     * @param {Object} object The object to clone.
+     * @returns {Object} Returns the initialized clone.
+     */
+    function initCloneObject(object) {
+      var Ctor = object.constructor;
+      if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) {
+        Ctor = Object;
+      }
+      return new Ctor;
+    }
+
+    /**
+     * Initializes an object clone based on its `toStringTag`.
+     *
+     * **Note:** This function only supports cloning values with tags of
+     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+     *
+     * @private
+     * @param {Object} object The object to clone.
+     * @param {string} tag The `toStringTag` of the object to clone.
+     * @param {boolean} [isDeep] Specify a deep clone.
+     * @returns {Object} Returns the initialized clone.
+     */
+    function initCloneByTag(object, tag, isDeep) {
+      var Ctor = object.constructor;
+      switch (tag) {
+        case arrayBufferTag:
+          return bufferClone(object);
+
+        case boolTag:
+        case dateTag:
+          return new Ctor(+object);
+
+        case float32Tag: case float64Tag:
+        case int8Tag: case int16Tag: case int32Tag:
+        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
+          var buffer = object.buffer;
+          return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length);
+
+        case numberTag:
+        case stringTag:
+          return new Ctor(object);
+
+        case regexpTag:
+          var result = new Ctor(object.source, reFlags.exec(object));
+          result.lastIndex = object.lastIndex;
+      }
+      return result;
+    }
+
+    /**
+     * Invokes the method at `path` on `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @param {Array|string} path The path of the method to invoke.
+     * @param {Array} args The arguments to invoke the method with.
+     * @returns {*} Returns the result of the invoked method.
+     */
+    function invokePath(object, path, args) {
+      if (object != null && !isKey(path, object)) {
+        path = toPath(path);
+        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
+        path = last(path);
+      }
+      var func = object == null ? object : object[path];
+      return func == null ? undefined : func.apply(object, args);
+    }
+
+    /**
+     * Checks if `value` is array-like.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+     */
+    function isArrayLike(value) {
+      return value != null && isLength(getLength(value));
+    }
+
+    /**
+     * Checks if `value` is a valid array-like index.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+     */
+    function isIndex(value, length) {
+      value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
+      length = length == null ? MAX_SAFE_INTEGER : length;
+      return value > -1 && value % 1 == 0 && value < length;
+    }
+
+    /**
+     * Checks if the provided arguments are from an iteratee call.
+     *
+     * @private
+     * @param {*} value The potential iteratee value argument.
+     * @param {*} index The potential iteratee index or key argument.
+     * @param {*} object The potential iteratee object argument.
+     * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.
+     */
+    function isIterateeCall(value, index, object) {
+      if (!isObject(object)) {
+        return false;
+      }
+      var type = typeof index;
+      if (type == 'number'
+          ? (isArrayLike(object) && isIndex(index, object.length))
+          : (type == 'string' && index in object)) {
+        var other = object[index];
+        return value === value ? (value === other) : (other !== other);
+      }
+      return false;
+    }
+
+    /**
+     * Checks if `value` is a property name and not a property path.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @param {Object} [object] The object to query keys on.
+     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
+     */
+    function isKey(value, object) {
+      var type = typeof value;
+      if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') {
+        return true;
+      }
+      if (isArray(value)) {
+        return false;
+      }
+      var result = !reIsDeepProp.test(value);
+      return result || (object != null && value in toObject(object));
+    }
+
+    /**
+     * Checks if `func` has a lazy counterpart.
+     *
+     * @private
+     * @param {Function} func The function to check.
+     * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`.
+     */
+    function isLaziable(func) {
+      var funcName = getFuncName(func),
+          other = lodash[funcName];
+
+      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
+        return false;
+      }
+      if (func === other) {
+        return true;
+      }
+      var data = getData(other);
+      return !!data && func === data[0];
+    }
+
+    /**
+     * Checks if `value` is a valid array-like length.
+     *
+     * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+     */
+    function isLength(value) {
+      return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+    }
+
+    /**
+     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
+     *
+     * @private
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` if suitable for strict
+     *  equality comparisons, else `false`.
+     */
+    function isStrictComparable(value) {
+      return value === value && !isObject(value);
+    }
+
+    /**
+     * Merges the function metadata of `source` into `data`.
+     *
+     * Merging metadata reduces the number of wrappers required to invoke a function.
+     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
+     * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg`
+     * augment function arguments, making the order in which they are executed important,
+     * preventing the merging of metadata. However, we make an exception for a safe
+     * common case where curried functions have `_.ary` and or `_.rearg` applied.
+     *
+     * @private
+     * @param {Array} data The destination metadata.
+     * @param {Array} source The source metadata.
+     * @returns {Array} Returns `data`.
+     */
+    function mergeData(data, source) {
+      var bitmask = data[1],
+          srcBitmask = source[1],
+          newBitmask = bitmask | srcBitmask,
+          isCommon = newBitmask < ARY_FLAG;
+
+      var isCombo =
+        (srcBitmask == ARY_FLAG && bitmask == CURRY_FLAG) ||
+        (srcBitmask == ARY_FLAG && bitmask == REARG_FLAG && data[7].length <= source[8]) ||
+        (srcBitmask == (ARY_FLAG | REARG_FLAG) && bitmask == CURRY_FLAG);
+
+      // Exit early if metadata can't be merged.
+      if (!(isCommon || isCombo)) {
+        return data;
+      }
+      // Use source `thisArg` if available.
+      if (srcBitmask & BIND_FLAG) {
+        data[2] = source[2];
+        // Set when currying a bound function.
+        newBitmask |= (bitmask & BIND_FLAG) ? 0 : CURRY_BOUND_FLAG;
+      }
+      // Compose partial arguments.
+      var value = source[3];
+      if (value) {
+        var partials = data[3];
+        data[3] = partials ? composeArgs(partials, value, source[4]) : arrayCopy(value);
+        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : arrayCopy(source[4]);
+      }
+      // Compose partial right arguments.
+      value = source[5];
+      if (value) {
+        partials = data[5];
+        data[5] = partials ? composeArgsRight(partials, value, source[6]) : arrayCopy(value);
+        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : arrayCopy(source[6]);
+      }
+      // Use source `argPos` if available.
+      value = source[7];
+      if (value) {
+        data[7] = arrayCopy(value);
+      }
+      // Use source `ary` if it's smaller.
+      if (srcBitmask & ARY_FLAG) {
+        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
+      }
+      // Use source `arity` if one is not provided.
+      if (data[9] == null) {
+        data[9] = source[9];
+      }
+      // Use source `func` and merge bitmasks.
+      data[0] = source[0];
+      data[1] = newBitmask;
+
+      return data;
+    }
+
+    /**
+     * Used by `_.defaultsDeep` to customize its `_.merge` use.
+     *
+     * @private
+     * @param {*} objectValue The destination object property value.
+     * @param {*} sourceValue The source object property value.
+     * @returns {*} Returns the value to assign to the destination object.
+     */
+    function mergeDefaults(objectValue, sourceValue) {
+      return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults);
+    }
+
+    /**
+     * A specialized version of `_.pick` which picks `object` properties specified
+     * by `props`.
+     *
+     * @private
+     * @param {Object} object The source object.
+     * @param {string[]} props The property names to pick.
+     * @returns {Object} Returns the new object.
+     */
+    function pickByArray(object, props) {
+      object = toObject(object);
+
+      var index = -1,
+          length = props.length,
+          result = {};
+
+      while (++index < length) {
+        var key = props[index];
+        if (key in object) {
+          result[key] = object[key];
+        }
+      }
+      return result;
+    }
+
+    /**
+     * A specialized version of `_.pick` which picks `object` properties `predicate`
+     * returns truthy for.
+     *
+     * @private
+     * @param {Object} object The source object.
+     * @param {Function} predicate The function invoked per iteration.
+     * @returns {Object} Returns the new object.
+     */
+    function pickByCallback(object, predicate) {
+      var result = {};
+      baseForIn(object, function(value, key, object) {
+        if (predicate(value, key, object)) {
+          result[key] = value;
+        }
+      });
+      return result;
+    }
+
+    /**
+     * Reorder `array` according to the specified indexes where the element at
+     * the first index is assigned as the first element, the element at
+     * the second index is assigned as the second element, and so on.
+     *
+     * @private
+     * @param {Array} array The array to reorder.
+     * @param {Array} indexes The arranged array indexes.
+     * @returns {Array} Returns `array`.
+     */
+    function reorder(array, indexes) {
+      var arrLength = array.length,
+          length = nativeMin(indexes.length, arrLength),
+          oldArray = arrayCopy(array);
+
+      while (length--) {
+        var index = indexes[length];
+        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
+      }
+      return array;
+    }
+
+    /**
+     * Sets metadata for `func`.
+     *
+     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
+     * period of time, it will trip its breaker and transition to an identity function
+     * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070)
+     * for more details.
+     *
+     * @private
+     * @param {Function} func The function to associate metadata with.
+     * @param {*} data The metadata.
+     * @returns {Function} Returns `func`.
+     */
+    var setData = (function() {
+      var count = 0,
+          lastCalled = 0;
+
+      return function(key, value) {
+        var stamp = now(),
+            remaining = HOT_SPAN - (stamp - lastCalled);
+
+        lastCalled = stamp;
+        if (remaining > 0) {
+          if (++count >= HOT_COUNT) {
+            return key;
+          }
+        } else {
+          count = 0;
+        }
+        return baseSetData(key, value);
+      };
+    }());
+
+    /**
+     * A fallback implementation of `Object.keys` which creates an array of the
+     * own enumerable property names of `object`.
+     *
+     * @private
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of property names.
+     */
+    function shimKeys(object) {
+      var props = keysIn(object),
+          propsLength = props.length,
+          length = propsLength && object.length;
+
+      var allowIndexes = !!length && isLength(length) &&
+        (isArray(object) || isArguments(object));
+
+      var index = -1,
+          result = [];
+
+      while (++index < propsLength) {
+        var key = props[index];
+        if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {
+          result.push(key);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * Converts `value` to an array-like object if it's not one.
+     *
+     * @private
+     * @param {*} value The value to process.
+     * @returns {Array|Object} Returns the array-like object.
+     */
+    function toIterable(value) {
+      if (value == null) {
+        return [];
+      }
+      if (!isArrayLike(value)) {
+        return values(value);
+      }
+      return isObject(value) ? value : Object(value);
+    }
+
+    /**
+     * Converts `value` to an object if it's not one.
+     *
+     * @private
+     * @param {*} value The value to process.
+     * @returns {Object} Returns the object.
+     */
+    function toObject(value) {
+      return isObject(value) ? value : Object(value);
+    }
+
+    /**
+     * Converts `value` to property path array if it's not one.
+     *
+     * @private
+     * @param {*} value The value to process.
+     * @returns {Array} Returns the property path array.
+     */
+    function toPath(value) {
+      if (isArray(value)) {
+        return value;
+      }
+      var result = [];
+      baseToString(value).replace(rePropName, function(match, number, quote, string) {
+        result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
+      });
+      return result;
+    }
+
+    /**
+     * Creates a clone of `wrapper`.
+     *
+     * @private
+     * @param {Object} wrapper The wrapper to clone.
+     * @returns {Object} Returns the cloned wrapper.
+     */
+    function wrapperClone(wrapper) {
+      return wrapper instanceof LazyWrapper
+        ? wrapper.clone()
+        : new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__, arrayCopy(wrapper.__actions__));
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates an array of elements split into groups the length of `size`.
+     * If `collection` can't be split evenly, the final chunk will be the remaining
+     * elements.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to process.
+     * @param {number} [size=1] The length of each chunk.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {Array} Returns the new array containing chunks.
+     * @example
+     *
+     * _.chunk(['a', 'b', 'c', 'd'], 2);
+     * // => [['a', 'b'], ['c', 'd']]
+     *
+     * _.chunk(['a', 'b', 'c', 'd'], 3);
+     * // => [['a', 'b', 'c'], ['d']]
+     */
+    function chunk(array, size, guard) {
+      if (guard ? isIterateeCall(array, size, guard) : size == null) {
+        size = 1;
+      } else {
+        size = nativeMax(nativeFloor(size) || 1, 1);
+      }
+      var index = 0,
+          length = array ? array.length : 0,
+          resIndex = -1,
+          result = Array(nativeCeil(length / size));
+
+      while (index < length) {
+        result[++resIndex] = baseSlice(array, index, (index += size));
+      }
+      return result;
+    }
+
+    /**
+     * Creates an array with all falsey values removed. The values `false`, `null`,
+     * `0`, `""`, `undefined`, and `NaN` are falsey.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to compact.
+     * @returns {Array} Returns the new array of filtered values.
+     * @example
+     *
+     * _.compact([0, 1, false, 2, '', 3]);
+     * // => [1, 2, 3]
+     */
+    function compact(array) {
+      var index = -1,
+          length = array ? array.length : 0,
+          resIndex = -1,
+          result = [];
+
+      while (++index < length) {
+        var value = array[index];
+        if (value) {
+          result[++resIndex] = value;
+        }
+      }
+      return result;
+    }
+
+    /**
+     * Creates an array of unique `array` values not included in the other
+     * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+     * for equality comparisons.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to inspect.
+     * @param {...Array} [values] The arrays of values to exclude.
+     * @returns {Array} Returns the new array of filtered values.
+     * @example
+     *
+     * _.difference([1, 2, 3], [4, 2]);
+     * // => [1, 3]
+     */
+    var difference = restParam(function(array, values) {
+      return (isObjectLike(array) && isArrayLike(array))
+        ? baseDifference(array, baseFlatten(values, false, true))
+        : [];
+    });
+
+    /**
+     * Creates a slice of `array` with `n` elements dropped from the beginning.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to query.
+     * @param {number} [n=1] The number of elements to drop.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {Array} Returns the slice of `array`.
+     * @example
+     *
+     * _.drop([1, 2, 3]);
+     * // => [2, 3]
+     *
+     * _.drop([1, 2, 3], 2);
+     * // => [3]
+     *
+     * _.drop([1, 2, 3], 5);
+     * // => []
+     *
+     * _.drop([1, 2, 3], 0);
+     * // => [1, 2, 3]
+     */
+    function drop(array, n, guard) {
+      var length = array ? array.length : 0;
+      if (!length) {
+        return [];
+      }
+      if (guard ? isIterateeCall(array, n, guard) : n == null) {
+        n = 1;
+      }
+      return baseSlice(array, n < 0 ? 0 : n);
+    }
+
+    /**
+     * Creates a slice of `array` with `n` elements dropped from the end.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to query.
+     * @param {number} [n=1] The number of elements to drop.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {Array} Returns the slice of `array`.
+     * @example
+     *
+     * _.dropRight([1, 2, 3]);
+     * // => [1, 2]
+     *
+     * _.dropRight([1, 2, 3], 2);
+     * // => [1]
+     *
+     * _.dropRight([1, 2, 3], 5);
+     * // => []
+     *
+     * _.dropRight([1, 2, 3], 0);
+     * // => [1, 2, 3]
+     */
+    function dropRight(array, n, guard) {
+      var length = array ? array.length : 0;
+      if (!length) {
+        return [];
+      }
+      if (guard ? isIterateeCall(array, n, guard) : n == null) {
+        n = 1;
+      }
+      n = length - (+n || 0);
+      return baseSlice(array, 0, n < 0 ? 0 : n);
+    }
+
+    /**
+     * Creates a slice of `array` excluding elements dropped from the end.
+     * Elements are dropped until `predicate` returns falsey. The predicate is
+     * bound to `thisArg` and invoked with three arguments: (value, index, array).
+     *
+     * If a property name is provided for `predicate` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `predicate` the created `_.matches` style
+     * callback returns `true` for elements that match the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to query.
+     * @param {Function|Object|string} [predicate=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {Array} Returns the slice of `array`.
+     * @example
+     *
+     * _.dropRightWhile([1, 2, 3], function(n) {
+     *   return n > 1;
+     * });
+     * // => [1]
+     *
+     * var users = [
+     *   { 'user': 'barney',  'active': true },
+     *   { 'user': 'fred',    'active': false },
+     *   { 'user': 'pebbles', 'active': false }
+     * ];
+     *
+     * // using the `_.matches` callback shorthand
+     * _.pluck(_.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');
+     * // => ['barney', 'fred']
+     *
+     * // using the `_.matchesProperty` callback shorthand
+     * _.pluck(_.dropRightWhile(users, 'active', false), 'user');
+     * // => ['barney']
+     *
+     * // using the `_.property` callback shorthand
+     * _.pluck(_.dropRightWhile(users, 'active'), 'user');
+     * // => ['barney', 'fred', 'pebbles']
+     */
+    function dropRightWhile(array, predicate, thisArg) {
+      return (array && array.length)
+        ? baseWhile(array, getCallback(predicate, thisArg, 3), true, true)
+        : [];
+    }
+
+    /**
+     * Creates a slice of `array` excluding elements dropped from the beginning.
+     * Elements are dropped until `predicate` returns falsey. The predicate is
+     * bound to `thisArg` and invoked with three arguments: (value, index, array).
+     *
+     * If a property name is provided for `predicate` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `predicate` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to query.
+     * @param {Function|Object|string} [predicate=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {Array} Returns the slice of `array`.
+     * @example
+     *
+     * _.dropWhile([1, 2, 3], function(n) {
+     *   return n < 3;
+     * });
+     * // => [3]
+     *
+     * var users = [
+     *   { 'user': 'barney',  'active': false },
+     *   { 'user': 'fred',    'active': false },
+     *   { 'user': 'pebbles', 'active': true }
+     * ];
+     *
+     * // using the `_.matches` callback shorthand
+     * _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user');
+     * // => ['fred', 'pebbles']
+     *
+     * // using the `_.matchesProperty` callback shorthand
+     * _.pluck(_.dropWhile(users, 'active', false), 'user');
+     * // => ['pebbles']
+     *
+     * // using the `_.property` callback shorthand
+     * _.pluck(_.dropWhile(users, 'active'), 'user');
+     * // => ['barney', 'fred', 'pebbles']
+     */
+    function dropWhile(array, predicate, thisArg) {
+      return (array && array.length)
+        ? baseWhile(array, getCallback(predicate, thisArg, 3), true)
+        : [];
+    }
+
+    /**
+     * Fills elements of `array` with `value` from `start` up to, but not
+     * including, `end`.
+     *
+     * **Note:** This method mutates `array`.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to fill.
+     * @param {*} value The value to fill `array` with.
+     * @param {number} [start=0] The start position.
+     * @param {number} [end=array.length] The end position.
+     * @returns {Array} Returns `array`.
+     * @example
+     *
+     * var array = [1, 2, 3];
+     *
+     * _.fill(array, 'a');
+     * console.log(array);
+     * // => ['a', 'a', 'a']
+     *
+     * _.fill(Array(3), 2);
+     * // => [2, 2, 2]
+     *
+     * _.fill([4, 6, 8], '*', 1, 2);
+     * // => [4, '*', 8]
+     */
+    function fill(array, value, start, end) {
+      var length = array ? array.length : 0;
+      if (!length) {
+        return [];
+      }
+      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
+        start = 0;
+        end = length;
+      }
+      return baseFill(array, value, start, end);
+    }
+
+    /**
+     * This method is like `_.find` except that it returns the index of the first
+     * element `predicate` returns truthy for instead of the element itself.
+     *
+     * If a property name is provided for `predicate` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `predicate` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to search.
+     * @param {Function|Object|string} [predicate=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {number} Returns the index of the found element, else `-1`.
+     * @example
+     *
+     * var users = [
+     *   { 'user': 'barney',  'active': false },
+     *   { 'user': 'fred',    'active': false },
+     *   { 'user': 'pebbles', 'active': true }
+     * ];
+     *
+     * _.findIndex(users, function(chr) {
+     *   return chr.user == 'barney';
+     * });
+     * // => 0
+     *
+     * // using the `_.matches` callback shorthand
+     * _.findIndex(users, { 'user': 'fred', 'active': false });
+     * // => 1
+     *
+     * // using the `_.matchesProperty` callback shorthand
+     * _.findIndex(users, 'active', false);
+     * // => 0
+     *
+     * // using the `_.property` callback shorthand
+     * _.findIndex(users, 'active');
+     * // => 2
+     */
+    var findIndex = createFindIndex();
+
+    /**
+     * This method is like `_.findIndex` except that it iterates over elements
+     * of `collection` from right to left.
+     *
+     * If a property name is provided for `predicate` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `predicate` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to search.
+     * @param {Function|Object|string} [predicate=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {number} Returns the index of the found element, else `-1`.
+     * @example
+     *
+     * var users = [
+     *   { 'user': 'barney',  'active': true },
+     *   { 'user': 'fred',    'active': false },
+     *   { 'user': 'pebbles', 'active': false }
+     * ];
+     *
+     * _.findLastIndex(users, function(chr) {
+     *   return chr.user == 'pebbles';
+     * });
+     * // => 2
+     *
+     * // using the `_.matches` callback shorthand
+     * _.findLastIndex(users, { 'user': 'barney', 'active': true });
+     * // => 0
+     *
+     * // using the `_.matchesProperty` callback shorthand
+     * _.findLastIndex(users, 'active', false);
+     * // => 2
+     *
+     * // using the `_.property` callback shorthand
+     * _.findLastIndex(users, 'active');
+     * // => 0
+     */
+    var findLastIndex = createFindIndex(true);
+
+    /**
+     * Gets the first element of `array`.
+     *
+     * @static
+     * @memberOf _
+     * @alias head
+     * @category Array
+     * @param {Array} array The array to query.
+     * @returns {*} Returns the first element of `array`.
+     * @example
+     *
+     * _.first([1, 2, 3]);
+     * // => 1
+     *
+     * _.first([]);
+     * // => undefined
+     */
+    function first(array) {
+      return array ? array[0] : undefined;
+    }
+
+    /**
+     * Flattens a nested array. If `isDeep` is `true` the array is recursively
+     * flattened, otherwise it's only flattened a single level.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to flatten.
+     * @param {boolean} [isDeep] Specify a deep flatten.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {Array} Returns the new flattened array.
+     * @example
+     *
+     * _.flatten([1, [2, 3, [4]]]);
+     * // => [1, 2, 3, [4]]
+     *
+     * // using `isDeep`
+     * _.flatten([1, [2, 3, [4]]], true);
+     * // => [1, 2, 3, 4]
+     */
+    function flatten(array, isDeep, guard) {
+      var length = array ? array.length : 0;
+      if (guard && isIterateeCall(array, isDeep, guard)) {
+        isDeep = false;
+      }
+      return length ? baseFlatten(array, isDeep) : [];
+    }
+
+    /**
+     * Recursively flattens a nested array.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to recursively flatten.
+     * @returns {Array} Returns the new flattened array.
+     * @example
+     *
+     * _.flattenDeep([1, [2, 3, [4]]]);
+     * // => [1, 2, 3, 4]
+     */
+    function flattenDeep(array) {
+      var length = array ? array.length : 0;
+      return length ? baseFlatten(array, true) : [];
+    }
+
+    /**
+     * Gets the index at which the first occurrence of `value` is found in `array`
+     * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+     * for equality comparisons. If `fromIndex` is negative, it's used as the offset
+     * from the end of `array`. If `array` is sorted providing `true` for `fromIndex`
+     * performs a faster binary search.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to search.
+     * @param {*} value The value to search for.
+     * @param {boolean|number} [fromIndex=0] The index to search from or `true`
+     *  to perform a binary search on a sorted array.
+     * @returns {number} Returns the index of the matched value, else `-1`.
+     * @example
+     *
+     * _.indexOf([1, 2, 1, 2], 2);
+     * // => 1
+     *
+     * // using `fromIndex`
+     * _.indexOf([1, 2, 1, 2], 2, 2);
+     * // => 3
+     *
+     * // performing a binary search
+     * _.indexOf([1, 1, 2, 2], 2, true);
+     * // => 2
+     */
+    function indexOf(array, value, fromIndex) {
+      var length = array ? array.length : 0;
+      if (!length) {
+        return -1;
+      }
+      if (typeof fromIndex == 'number') {
+        fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;
+      } else if (fromIndex) {
+        var index = binaryIndex(array, value);
+        if (index < length &&
+            (value === value ? (value === array[index]) : (array[index] !== array[index]))) {
+          return index;
+        }
+        return -1;
+      }
+      return baseIndexOf(array, value, fromIndex || 0);
+    }
+
+    /**
+     * Gets all but the last element of `array`.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to query.
+     * @returns {Array} Returns the slice of `array`.
+     * @example
+     *
+     * _.initial([1, 2, 3]);
+     * // => [1, 2]
+     */
+    function initial(array) {
+      return dropRight(array, 1);
+    }
+
+    /**
+     * Creates an array of unique values that are included in all of the provided
+     * arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+     * for equality comparisons.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {...Array} [arrays] The arrays to inspect.
+     * @returns {Array} Returns the new array of shared values.
+     * @example
+     * _.intersection([1, 2], [4, 2], [2, 1]);
+     * // => [2]
+     */
+    var intersection = restParam(function(arrays) {
+      var othLength = arrays.length,
+          othIndex = othLength,
+          caches = Array(length),
+          indexOf = getIndexOf(),
+          isCommon = indexOf === baseIndexOf,
+          result = [];
+
+      while (othIndex--) {
+        var value = arrays[othIndex] = isArrayLike(value = arrays[othIndex]) ? value : [];
+        caches[othIndex] = (isCommon && value.length >= 120) ? createCache(othIndex && value) : null;
+      }
+      var array = arrays[0],
+          index = -1,
+          length = array ? array.length : 0,
+          seen = caches[0];
+
+      outer:
+      while (++index < length) {
+        value = array[index];
+        if ((seen ? cacheIndexOf(seen, value) : indexOf(result, value, 0)) < 0) {
+          var othIndex = othLength;
+          while (--othIndex) {
+            var cache = caches[othIndex];
+            if ((cache ? cacheIndexOf(cache, value) : indexOf(arrays[othIndex], value, 0)) < 0) {
+              continue outer;
+            }
+          }
+          if (seen) {
+            seen.push(value);
+          }
+          result.push(value);
+        }
+      }
+      return result;
+    });
+
+    /**
+     * Gets the last element of `array`.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to query.
+     * @returns {*} Returns the last element of `array`.
+     * @example
+     *
+     * _.last([1, 2, 3]);
+     * // => 3
+     */
+    function last(array) {
+      var length = array ? array.length : 0;
+      return length ? array[length - 1] : undefined;
+    }
+
+    /**
+     * This method is like `_.indexOf` except that it iterates over elements of
+     * `array` from right to left.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to search.
+     * @param {*} value The value to search for.
+     * @param {boolean|number} [fromIndex=array.length-1] The index to search from
+     *  or `true` to perform a binary search on a sorted array.
+     * @returns {number} Returns the index of the matched value, else `-1`.
+     * @example
+     *
+     * _.lastIndexOf([1, 2, 1, 2], 2);
+     * // => 3
+     *
+     * // using `fromIndex`
+     * _.lastIndexOf([1, 2, 1, 2], 2, 2);
+     * // => 1
+     *
+     * // performing a binary search
+     * _.lastIndexOf([1, 1, 2, 2], 2, true);
+     * // => 3
+     */
+    function lastIndexOf(array, value, fromIndex) {
+      var length = array ? array.length : 0;
+      if (!length) {
+        return -1;
+      }
+      var index = length;
+      if (typeof fromIndex == 'number') {
+        index = (fromIndex < 0 ? nativeMax(length + fromIndex, 0) : nativeMin(fromIndex || 0, length - 1)) + 1;
+      } else if (fromIndex) {
+        index = binaryIndex(array, value, true) - 1;
+        var other = array[index];
+        if (value === value ? (value === other) : (other !== other)) {
+          return index;
+        }
+        return -1;
+      }
+      if (value !== value) {
+        return indexOfNaN(array, index, true);
+      }
+      while (index--) {
+        if (array[index] === value) {
+          return index;
+        }
+      }
+      return -1;
+    }
+
+    /**
+     * Removes all provided values from `array` using
+     * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+     * for equality comparisons.
+     *
+     * **Note:** Unlike `_.without`, this method mutates `array`.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to modify.
+     * @param {...*} [values] The values to remove.
+     * @returns {Array} Returns `array`.
+     * @example
+     *
+     * var array = [1, 2, 3, 1, 2, 3];
+     *
+     * _.pull(array, 2, 3);
+     * console.log(array);
+     * // => [1, 1]
+     */
+    function pull() {
+      var args = arguments,
+          array = args[0];
+
+      if (!(array && array.length)) {
+        return array;
+      }
+      var index = 0,
+          indexOf = getIndexOf(),
+          length = args.length;
+
+      while (++index < length) {
+        var fromIndex = 0,
+            value = args[index];
+
+        while ((fromIndex = indexOf(array, value, fromIndex)) > -1) {
+          splice.call(array, fromIndex, 1);
+        }
+      }
+      return array;
+    }
+
+    /**
+     * Removes elements from `array` corresponding to the given indexes and returns
+     * an array of the removed elements. Indexes may be specified as an array of
+     * indexes or as individual arguments.
+     *
+     * **Note:** Unlike `_.at`, this method mutates `array`.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to modify.
+     * @param {...(number|number[])} [indexes] The indexes of elements to remove,
+     *  specified as individual indexes or arrays of indexes.
+     * @returns {Array} Returns the new array of removed elements.
+     * @example
+     *
+     * var array = [5, 10, 15, 20];
+     * var evens = _.pullAt(array, 1, 3);
+     *
+     * console.log(array);
+     * // => [5, 15]
+     *
+     * console.log(evens);
+     * // => [10, 20]
+     */
+    var pullAt = restParam(function(array, indexes) {
+      indexes = baseFlatten(indexes);
+
+      var result = baseAt(array, indexes);
+      basePullAt(array, indexes.sort(baseCompareAscending));
+      return result;
+    });
+
+    /**
+     * Removes all elements from `array` that `predicate` returns truthy for
+     * and returns an array of the removed elements. The predicate is bound to
+     * `thisArg` and invoked with three arguments: (value, index, array).
+     *
+     * If a property name is provided for `predicate` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `predicate` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * **Note:** Unlike `_.filter`, this method mutates `array`.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to modify.
+     * @param {Function|Object|string} [predicate=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {Array} Returns the new array of removed elements.
+     * @example
+     *
+     * var array = [1, 2, 3, 4];
+     * var evens = _.remove(array, function(n) {
+     *   return n % 2 == 0;
+     * });
+     *
+     * console.log(array);
+     * // => [1, 3]
+     *
+     * console.log(evens);
+     * // => [2, 4]
+     */
+    function remove(array, predicate, thisArg) {
+      var result = [];
+      if (!(array && array.length)) {
+        return result;
+      }
+      var index = -1,
+          indexes = [],
+          length = array.length;
+
+      predicate = getCallback(predicate, thisArg, 3);
+      while (++index < length) {
+        var value = array[index];
+        if (predicate(value, index, array)) {
+          result.push(value);
+          indexes.push(index);
+        }
+      }
+      basePullAt(array, indexes);
+      return result;
+    }
+
+    /**
+     * Gets all but the first element of `array`.
+     *
+     * @static
+     * @memberOf _
+     * @alias tail
+     * @category Array
+     * @param {Array} array The array to query.
+     * @returns {Array} Returns the slice of `array`.
+     * @example
+     *
+     * _.rest([1, 2, 3]);
+     * // => [2, 3]
+     */
+    function rest(array) {
+      return drop(array, 1);
+    }
+
+    /**
+     * Creates a slice of `array` from `start` up to, but not including, `end`.
+     *
+     * **Note:** This method is used instead of `Array#slice` to support node
+     * lists in IE < 9 and to ensure dense arrays are returned.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to slice.
+     * @param {number} [start=0] The start position.
+     * @param {number} [end=array.length] The end position.
+     * @returns {Array} Returns the slice of `array`.
+     */
+    function slice(array, start, end) {
+      var length = array ? array.length : 0;
+      if (!length) {
+        return [];
+      }
+      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
+        start = 0;
+        end = length;
+      }
+      return baseSlice(array, start, end);
+    }
+
+    /**
+     * Uses a binary search to determine the lowest index at which `value` should
+     * be inserted into `array` in order to maintain its sort order. If an iteratee
+     * function is provided it's invoked for `value` and each element of `array`
+     * to compute their sort ranking. The iteratee is bound to `thisArg` and
+     * invoked with one argument; (value).
+     *
+     * If a property name is provided for `iteratee` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `iteratee` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The sorted array to inspect.
+     * @param {*} value The value to evaluate.
+     * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {number} Returns the index at which `value` should be inserted
+     *  into `array`.
+     * @example
+     *
+     * _.sortedIndex([30, 50], 40);
+     * // => 1
+     *
+     * _.sortedIndex([4, 4, 5, 5], 5);
+     * // => 2
+     *
+     * var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } };
+     *
+     * // using an iteratee function
+     * _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) {
+     *   return this.data[word];
+     * }, dict);
+     * // => 1
+     *
+     * // using the `_.property` callback shorthand
+     * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
+     * // => 1
+     */
+    var sortedIndex = createSortedIndex();
+
+    /**
+     * This method is like `_.sortedIndex` except that it returns the highest
+     * index at which `value` should be inserted into `array` in order to
+     * maintain its sort order.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The sorted array to inspect.
+     * @param {*} value The value to evaluate.
+     * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {number} Returns the index at which `value` should be inserted
+     *  into `array`.
+     * @example
+     *
+     * _.sortedLastIndex([4, 4, 5, 5], 5);
+     * // => 4
+     */
+    var sortedLastIndex = createSortedIndex(true);
+
+    /**
+     * Creates a slice of `array` with `n` elements taken from the beginning.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to query.
+     * @param {number} [n=1] The number of elements to take.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {Array} Returns the slice of `array`.
+     * @example
+     *
+     * _.take([1, 2, 3]);
+     * // => [1]
+     *
+     * _.take([1, 2, 3], 2);
+     * // => [1, 2]
+     *
+     * _.take([1, 2, 3], 5);
+     * // => [1, 2, 3]
+     *
+     * _.take([1, 2, 3], 0);
+     * // => []
+     */
+    function take(array, n, guard) {
+      var length = array ? array.length : 0;
+      if (!length) {
+        return [];
+      }
+      if (guard ? isIterateeCall(array, n, guard) : n == null) {
+        n = 1;
+      }
+      return baseSlice(array, 0, n < 0 ? 0 : n);
+    }
+
+    /**
+     * Creates a slice of `array` with `n` elements taken from the end.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to query.
+     * @param {number} [n=1] The number of elements to take.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {Array} Returns the slice of `array`.
+     * @example
+     *
+     * _.takeRight([1, 2, 3]);
+     * // => [3]
+     *
+     * _.takeRight([1, 2, 3], 2);
+     * // => [2, 3]
+     *
+     * _.takeRight([1, 2, 3], 5);
+     * // => [1, 2, 3]
+     *
+     * _.takeRight([1, 2, 3], 0);
+     * // => []
+     */
+    function takeRight(array, n, guard) {
+      var length = array ? array.length : 0;
+      if (!length) {
+        return [];
+      }
+      if (guard ? isIterateeCall(array, n, guard) : n == null) {
+        n = 1;
+      }
+      n = length - (+n || 0);
+      return baseSlice(array, n < 0 ? 0 : n);
+    }
+
+    /**
+     * Creates a slice of `array` with elements taken from the end. Elements are
+     * taken until `predicate` returns falsey. The predicate is bound to `thisArg`
+     * and invoked with three arguments: (value, index, array).
+     *
+     * If a property name is provided for `predicate` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `predicate` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to query.
+     * @param {Function|Object|string} [predicate=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {Array} Returns the slice of `array`.
+     * @example
+     *
+     * _.takeRightWhile([1, 2, 3], function(n) {
+     *   return n > 1;
+     * });
+     * // => [2, 3]
+     *
+     * var users = [
+     *   { 'user': 'barney',  'active': true },
+     *   { 'user': 'fred',    'active': false },
+     *   { 'user': 'pebbles', 'active': false }
+     * ];
+     *
+     * // using the `_.matches` callback shorthand
+     * _.pluck(_.takeRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');
+     * // => ['pebbles']
+     *
+     * // using the `_.matchesProperty` callback shorthand
+     * _.pluck(_.takeRightWhile(users, 'active', false), 'user');
+     * // => ['fred', 'pebbles']
+     *
+     * // using the `_.property` callback shorthand
+     * _.pluck(_.takeRightWhile(users, 'active'), 'user');
+     * // => []
+     */
+    function takeRightWhile(array, predicate, thisArg) {
+      return (array && array.length)
+        ? baseWhile(array, getCallback(predicate, thisArg, 3), false, true)
+        : [];
+    }
+
+    /**
+     * Creates a slice of `array` with elements taken from the beginning. Elements
+     * are taken until `predicate` returns falsey. The predicate is bound to
+     * `thisArg` and invoked with three arguments: (value, index, array).
+     *
+     * If a property name is provided for `predicate` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `predicate` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to query.
+     * @param {Function|Object|string} [predicate=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {Array} Returns the slice of `array`.
+     * @example
+     *
+     * _.takeWhile([1, 2, 3], function(n) {
+     *   return n < 3;
+     * });
+     * // => [1, 2]
+     *
+     * var users = [
+     *   { 'user': 'barney',  'active': false },
+     *   { 'user': 'fred',    'active': false},
+     *   { 'user': 'pebbles', 'active': true }
+     * ];
+     *
+     * // using the `_.matches` callback shorthand
+     * _.pluck(_.takeWhile(users, { 'user': 'barney', 'active': false }), 'user');
+     * // => ['barney']
+     *
+     * // using the `_.matchesProperty` callback shorthand
+     * _.pluck(_.takeWhile(users, 'active', false), 'user');
+     * // => ['barney', 'fred']
+     *
+     * // using the `_.property` callback shorthand
+     * _.pluck(_.takeWhile(users, 'active'), 'user');
+     * // => []
+     */
+    function takeWhile(array, predicate, thisArg) {
+      return (array && array.length)
+        ? baseWhile(array, getCallback(predicate, thisArg, 3))
+        : [];
+    }
+
+    /**
+     * Creates an array of unique values, in order, from all of the provided arrays
+     * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+     * for equality comparisons.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {...Array} [arrays] The arrays to inspect.
+     * @returns {Array} Returns the new array of combined values.
+     * @example
+     *
+     * _.union([1, 2], [4, 2], [2, 1]);
+     * // => [1, 2, 4]
+     */
+    var union = restParam(function(arrays) {
+      return baseUniq(baseFlatten(arrays, false, true));
+    });
+
+    /**
+     * Creates a duplicate-free version of an array, using
+     * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+     * for equality comparisons, in which only the first occurence of each element
+     * is kept. Providing `true` for `isSorted` performs a faster search algorithm
+     * for sorted arrays. If an iteratee function is provided it's invoked for
+     * each element in the array to generate the criterion by which uniqueness
+     * is computed. The `iteratee` is bound to `thisArg` and invoked with three
+     * arguments: (value, index, array).
+     *
+     * If a property name is provided for `iteratee` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `iteratee` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @alias unique
+     * @category Array
+     * @param {Array} array The array to inspect.
+     * @param {boolean} [isSorted] Specify the array is sorted.
+     * @param {Function|Object|string} [iteratee] The function invoked per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {Array} Returns the new duplicate-value-free array.
+     * @example
+     *
+     * _.uniq([2, 1, 2]);
+     * // => [2, 1]
+     *
+     * // using `isSorted`
+     * _.uniq([1, 1, 2], true);
+     * // => [1, 2]
+     *
+     * // using an iteratee function
+     * _.uniq([1, 2.5, 1.5, 2], function(n) {
+     *   return this.floor(n);
+     * }, Math);
+     * // => [1, 2.5]
+     *
+     * // using the `_.property` callback shorthand
+     * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
+     * // => [{ 'x': 1 }, { 'x': 2 }]
+     */
+    function uniq(array, isSorted, iteratee, thisArg) {
+      var length = array ? array.length : 0;
+      if (!length) {
+        return [];
+      }
+      if (isSorted != null && typeof isSorted != 'boolean') {
+        thisArg = iteratee;
+        iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted;
+        isSorted = false;
+      }
+      var callback = getCallback();
+      if (!(iteratee == null && callback === baseCallback)) {
+        iteratee = callback(iteratee, thisArg, 3);
+      }
+      return (isSorted && getIndexOf() === baseIndexOf)
+        ? sortedUniq(array, iteratee)
+        : baseUniq(array, iteratee);
+    }
+
+    /**
+     * This method is like `_.zip` except that it accepts an array of grouped
+     * elements and creates an array regrouping the elements to their pre-zip
+     * configuration.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array of grouped elements to process.
+     * @returns {Array} Returns the new array of regrouped elements.
+     * @example
+     *
+     * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]);
+     * // => [['fred', 30, true], ['barney', 40, false]]
+     *
+     * _.unzip(zipped);
+     * // => [['fred', 'barney'], [30, 40], [true, false]]
+     */
+    function unzip(array) {
+      if (!(array && array.length)) {
+        return [];
+      }
+      var index = -1,
+          length = 0;
+
+      array = arrayFilter(array, function(group) {
+        if (isArrayLike(group)) {
+          length = nativeMax(group.length, length);
+          return true;
+        }
+      });
+      var result = Array(length);
+      while (++index < length) {
+        result[index] = arrayMap(array, baseProperty(index));
+      }
+      return result;
+    }
+
+    /**
+     * This method is like `_.unzip` except that it accepts an iteratee to specify
+     * how regrouped values should be combined. The `iteratee` is bound to `thisArg`
+     * and invoked with four arguments: (accumulator, value, index, group).
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array of grouped elements to process.
+     * @param {Function} [iteratee] The function to combine regrouped values.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {Array} Returns the new array of regrouped elements.
+     * @example
+     *
+     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
+     * // => [[1, 10, 100], [2, 20, 200]]
+     *
+     * _.unzipWith(zipped, _.add);
+     * // => [3, 30, 300]
+     */
+    function unzipWith(array, iteratee, thisArg) {
+      var length = array ? array.length : 0;
+      if (!length) {
+        return [];
+      }
+      var result = unzip(array);
+      if (iteratee == null) {
+        return result;
+      }
+      iteratee = bindCallback(iteratee, thisArg, 4);
+      return arrayMap(result, function(group) {
+        return arrayReduce(group, iteratee, undefined, true);
+      });
+    }
+
+    /**
+     * Creates an array excluding all provided values using
+     * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+     * for equality comparisons.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {Array} array The array to filter.
+     * @param {...*} [values] The values to exclude.
+     * @returns {Array} Returns the new array of filtered values.
+     * @example
+     *
+     * _.without([1, 2, 1, 3], 1, 2);
+     * // => [3]
+     */
+    var without = restParam(function(array, values) {
+      return isArrayLike(array)
+        ? baseDifference(array, values)
+        : [];
+    });
+
+    /**
+     * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
+     * of the provided arrays.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {...Array} [arrays] The arrays to inspect.
+     * @returns {Array} Returns the new array of values.
+     * @example
+     *
+     * _.xor([1, 2], [4, 2]);
+     * // => [1, 4]
+     */
+    function xor() {
+      var index = -1,
+          length = arguments.length;
+
+      while (++index < length) {
+        var array = arguments[index];
+        if (isArrayLike(array)) {
+          var result = result
+            ? arrayPush(baseDifference(result, array), baseDifference(array, result))
+            : array;
+        }
+      }
+      return result ? baseUniq(result) : [];
+    }
+
+    /**
+     * Creates an array of grouped elements, the first of which contains the first
+     * elements of the given arrays, the second of which contains the second elements
+     * of the given arrays, and so on.
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {...Array} [arrays] The arrays to process.
+     * @returns {Array} Returns the new array of grouped elements.
+     * @example
+     *
+     * _.zip(['fred', 'barney'], [30, 40], [true, false]);
+     * // => [['fred', 30, true], ['barney', 40, false]]
+     */
+    var zip = restParam(unzip);
+
+    /**
+     * The inverse of `_.pairs`; this method returns an object composed from arrays
+     * of property names and values. Provide either a single two dimensional array,
+     * e.g. `[[key1, value1], [key2, value2]]` or two arrays, one of property names
+     * and one of corresponding values.
+     *
+     * @static
+     * @memberOf _
+     * @alias object
+     * @category Array
+     * @param {Array} props The property names.
+     * @param {Array} [values=[]] The property values.
+     * @returns {Object} Returns the new object.
+     * @example
+     *
+     * _.zipObject([['fred', 30], ['barney', 40]]);
+     * // => { 'fred': 30, 'barney': 40 }
+     *
+     * _.zipObject(['fred', 'barney'], [30, 40]);
+     * // => { 'fred': 30, 'barney': 40 }
+     */
+    function zipObject(props, values) {
+      var index = -1,
+          length = props ? props.length : 0,
+          result = {};
+
+      if (length && !values && !isArray(props[0])) {
+        values = [];
+      }
+      while (++index < length) {
+        var key = props[index];
+        if (values) {
+          result[key] = values[index];
+        } else if (key) {
+          result[key[0]] = key[1];
+        }
+      }
+      return result;
+    }
+
+    /**
+     * This method is like `_.zip` except that it accepts an iteratee to specify
+     * how grouped values should be combined. The `iteratee` is bound to `thisArg`
+     * and invoked with four arguments: (accumulator, value, index, group).
+     *
+     * @static
+     * @memberOf _
+     * @category Array
+     * @param {...Array} [arrays] The arrays to process.
+     * @param {Function} [iteratee] The function to combine grouped values.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {Array} Returns the new array of grouped elements.
+     * @example
+     *
+     * _.zipWith([1, 2], [10, 20], [100, 200], _.add);
+     * // => [111, 222]
+     */
+    var zipWith = restParam(function(arrays) {
+      var length = arrays.length,
+          iteratee = length > 2 ? arrays[length - 2] : undefined,
+          thisArg = length > 1 ? arrays[length - 1] : undefined;
+
+      if (length > 2 && typeof iteratee == 'function') {
+        length -= 2;
+      } else {
+        iteratee = (length > 1 && typeof thisArg == 'function') ? (--length, thisArg) : undefined;
+        thisArg = undefined;
+      }
+      arrays.length = length;
+      return unzipWith(arrays, iteratee, thisArg);
+    });
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates a `lodash` object that wraps `value` with explicit method
+     * chaining enabled.
+     *
+     * @static
+     * @memberOf _
+     * @category Chain
+     * @param {*} value The value to wrap.
+     * @returns {Object} Returns the new `lodash` wrapper instance.
+     * @example
+     *
+     * var users = [
+     *   { 'user': 'barney',  'age': 36 },
+     *   { 'user': 'fred',    'age': 40 },
+     *   { 'user': 'pebbles', 'age': 1 }
+     * ];
+     *
+     * var youngest = _.chain(users)
+     *   .sortBy('age')
+     *   .map(function(chr) {
+     *     return chr.user + ' is ' + chr.age;
+     *   })
+     *   .first()
+     *   .value();
+     * // => 'pebbles is 1'
+     */
+    function chain(value) {
+      var result = lodash(value);
+      result.__chain__ = true;
+      return result;
+    }
+
+    /**
+     * This method invokes `interceptor` and returns `value`. The interceptor is
+     * bound to `thisArg` and invoked with one argument; (value). The purpose of
+     * this method is to "tap into" a method chain in order to perform operations
+     * on intermediate results within the chain.
+     *
+     * @static
+     * @memberOf _
+     * @category Chain
+     * @param {*} value The value to provide to `interceptor`.
+     * @param {Function} interceptor The function to invoke.
+     * @param {*} [thisArg] The `this` binding of `interceptor`.
+     * @returns {*} Returns `value`.
+     * @example
+     *
+     * _([1, 2, 3])
+     *  .tap(function(array) {
+     *    array.pop();
+     *  })
+     *  .reverse()
+     *  .value();
+     * // => [2, 1]
+     */
+    function tap(value, interceptor, thisArg) {
+      interceptor.call(thisArg, value);
+      return value;
+    }
+
+    /**
+     * This method is like `_.tap` except that it returns the result of `interceptor`.
+     *
+     * @static
+     * @memberOf _
+     * @category Chain
+     * @param {*} value The value to provide to `interceptor`.
+     * @param {Function} interceptor The function to invoke.
+     * @param {*} [thisArg] The `this` binding of `interceptor`.
+     * @returns {*} Returns the result of `interceptor`.
+     * @example
+     *
+     * _('  abc  ')
+     *  .chain()
+     *  .trim()
+     *  .thru(function(value) {
+     *    return [value];
+     *  })
+     *  .value();
+     * // => ['abc']
+     */
+    function thru(value, interceptor, thisArg) {
+      return interceptor.call(thisArg, value);
+    }
+
+    /**
+     * Enables explicit method chaining on the wrapper object.
+     *
+     * @name chain
+     * @memberOf _
+     * @category Chain
+     * @returns {Object} Returns the new `lodash` wrapper instance.
+     * @example
+     *
+     * var users = [
+     *   { 'user': 'barney', 'age': 36 },
+     *   { 'user': 'fred',   'age': 40 }
+     * ];
+     *
+     * // without explicit chaining
+     * _(users).first();
+     * // => { 'user': 'barney', 'age': 36 }
+     *
+     * // with explicit chaining
+     * _(users).chain()
+     *   .first()
+     *   .pick('user')
+     *   .value();
+     * // => { 'user': 'barney' }
+     */
+    function wrapperChain() {
+      return chain(this);
+    }
+
+    /**
+     * Executes the chained sequence and returns the wrapped result.
+     *
+     * @name commit
+     * @memberOf _
+     * @category Chain
+     * @returns {Object} Returns the new `lodash` wrapper instance.
+     * @example
+     *
+     * var array = [1, 2];
+     * var wrapped = _(array).push(3);
+     *
+     * console.log(array);
+     * // => [1, 2]
+     *
+     * wrapped = wrapped.commit();
+     * console.log(array);
+     * // => [1, 2, 3]
+     *
+     * wrapped.last();
+     * // => 3
+     *
+     * console.log(array);
+     * // => [1, 2, 3]
+     */
+    function wrapperCommit() {
+      return new LodashWrapper(this.value(), this.__chain__);
+    }
+
+    /**
+     * Creates a new array joining a wrapped array with any additional arrays
+     * and/or values.
+     *
+     * @name concat
+     * @memberOf _
+     * @category Chain
+     * @param {...*} [values] The values to concatenate.
+     * @returns {Array} Returns the new concatenated array.
+     * @example
+     *
+     * var array = [1];
+     * var wrapped = _(array).concat(2, [3], [[4]]);
+     *
+     * console.log(wrapped.value());
+     * // => [1, 2, 3, [4]]
+     *
+     * console.log(array);
+     * // => [1]
+     */
+    var wrapperConcat = restParam(function(values) {
+      values = baseFlatten(values);
+      return this.thru(function(array) {
+        return arrayConcat(isArray(array) ? array : [toObject(array)], values);
+      });
+    });
+
+    /**
+     * Creates a clone of the chained sequence planting `value` as the wrapped value.
+     *
+     * @name plant
+     * @memberOf _
+     * @category Chain
+     * @returns {Object} Returns the new `lodash` wrapper instance.
+     * @example
+     *
+     * var array = [1, 2];
+     * var wrapped = _(array).map(function(value) {
+     *   return Math.pow(value, 2);
+     * });
+     *
+     * var other = [3, 4];
+     * var otherWrapped = wrapped.plant(other);
+     *
+     * otherWrapped.value();
+     * // => [9, 16]
+     *
+     * wrapped.value();
+     * // => [1, 4]
+     */
+    function wrapperPlant(value) {
+      var result,
+          parent = this;
+
+      while (parent instanceof baseLodash) {
+        var clone = wrapperClone(parent);
+        if (result) {
+          previous.__wrapped__ = clone;
+        } else {
+          result = clone;
+        }
+        var previous = clone;
+        parent = parent.__wrapped__;
+      }
+      previous.__wrapped__ = value;
+      return result;
+    }
+
+    /**
+     * Reverses the wrapped array so the first element becomes the last, the
+     * second element becomes the second to last, and so on.
+     *
+     * **Note:** This method mutates the wrapped array.
+     *
+     * @name reverse
+     * @memberOf _
+     * @category Chain
+     * @returns {Object} Returns the new reversed `lodash` wrapper instance.
+     * @example
+     *
+     * var array = [1, 2, 3];
+     *
+     * _(array).reverse().value()
+     * // => [3, 2, 1]
+     *
+     * console.log(array);
+     * // => [3, 2, 1]
+     */
+    function wrapperReverse() {
+      var value = this.__wrapped__;
+
+      var interceptor = function(value) {
+        return value.reverse();
+      };
+      if (value instanceof LazyWrapper) {
+        var wrapped = value;
+        if (this.__actions__.length) {
+          wrapped = new LazyWrapper(this);
+        }
+        wrapped = wrapped.reverse();
+        wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
+        return new LodashWrapper(wrapped, this.__chain__);
+      }
+      return this.thru(interceptor);
+    }
+
+    /**
+     * Produces the result of coercing the unwrapped value to a string.
+     *
+     * @name toString
+     * @memberOf _
+     * @category Chain
+     * @returns {string} Returns the coerced string value.
+     * @example
+     *
+     * _([1, 2, 3]).toString();
+     * // => '1,2,3'
+     */
+    function wrapperToString() {
+      return (this.value() + '');
+    }
+
+    /**
+     * Executes the chained sequence to extract the unwrapped value.
+     *
+     * @name value
+     * @memberOf _
+     * @alias run, toJSON, valueOf
+     * @category Chain
+     * @returns {*} Returns the resolved unwrapped value.
+     * @example
+     *
+     * _([1, 2, 3]).value();
+     * // => [1, 2, 3]
+     */
+    function wrapperValue() {
+      return baseWrapperValue(this.__wrapped__, this.__actions__);
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates an array of elements corresponding to the given keys, or indexes,
+     * of `collection`. Keys may be specified as individual arguments or as arrays
+     * of keys.
+     *
+     * @static
+     * @memberOf _
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {...(number|number[]|string|string[])} [props] The property names
+     *  or indexes of elements to pick, specified individually or in arrays.
+     * @returns {Array} Returns the new array of picked elements.
+     * @example
+     *
+     * _.at(['a', 'b', 'c'], [0, 2]);
+     * // => ['a', 'c']
+     *
+     * _.at(['barney', 'fred', 'pebbles'], 0, 2);
+     * // => ['barney', 'pebbles']
+     */
+    var at = restParam(function(collection, props) {
+      return baseAt(collection, baseFlatten(props));
+    });
+
+    /**
+     * Creates an object composed of keys generated from the results of running
+     * each element of `collection` through `iteratee`. The corresponding value
+     * of each key is the number of times the key was returned by `iteratee`.
+     * The `iteratee` is bound to `thisArg` and invoked with three arguments:
+     * (value, index|key, collection).
+     *
+     * If a property name is provided for `iteratee` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `iteratee` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {Object} Returns the composed aggregate object.
+     * @example
+     *
+     * _.countBy([4.3, 6.1, 6.4], function(n) {
+     *   return Math.floor(n);
+     * });
+     * // => { '4': 1, '6': 2 }
+     *
+     * _.countBy([4.3, 6.1, 6.4], function(n) {
+     *   return this.floor(n);
+     * }, Math);
+     * // => { '4': 1, '6': 2 }
+     *
+     * _.countBy(['one', 'two', 'three'], 'length');
+     * // => { '3': 2, '5': 1 }
+     */
+    var countBy = createAggregator(function(result, value, key) {
+      hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1);
+    });
+
+    /**
+     * Checks if `predicate` returns truthy for **all** elements of `collection`.
+     * The predicate is bound to `thisArg` and invoked with three arguments:
+     * (value, index|key, collection).
+     *
+     * If a property name is provided for `predicate` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `predicate` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @alias all
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function|Object|string} [predicate=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {boolean} Returns `true` if all elements pass the predicate check,
+     *  else `false`.
+     * @example
+     *
+     * _.every([true, 1, null, 'yes'], Boolean);
+     * // => false
+     *
+     * var users = [
+     *   { 'user': 'barney', 'active': false },
+     *   { 'user': 'fred',   'active': false }
+     * ];
+     *
+     * // using the `_.matches` callback shorthand
+     * _.every(users, { 'user': 'barney', 'active': false });
+     * // => false
+     *
+     * // using the `_.matchesProperty` callback shorthand
+     * _.every(users, 'active', false);
+     * // => true
+     *
+     * // using the `_.property` callback shorthand
+     * _.every(users, 'active');
+     * // => false
+     */
+    function every(collection, predicate, thisArg) {
+      var func = isArray(collection) ? arrayEvery : baseEvery;
+      if (thisArg && isIterateeCall(collection, predicate, thisArg)) {
+        predicate = undefined;
+      }
+      if (typeof predicate != 'function' || thisArg !== undefined) {
+        predicate = getCallback(predicate, thisArg, 3);
+      }
+      return func(collection, predicate);
+    }
+
+    /**
+     * Iterates over elements of `collection`, returning an array of all elements
+     * `predicate` returns truthy for. The predicate is bound to `thisArg` and
+     * invoked with three arguments: (value, index|key, collection).
+     *
+     * If a property name is provided for `predicate` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `predicate` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @alias select
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function|Object|string} [predicate=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {Array} Returns the new filtered array.
+     * @example
+     *
+     * _.filter([4, 5, 6], function(n) {
+     *   return n % 2 == 0;
+     * });
+     * // => [4, 6]
+     *
+     * var users = [
+     *   { 'user': 'barney', 'age': 36, 'active': true },
+     *   { 'user': 'fred',   'age': 40, 'active': false }
+     * ];
+     *
+     * // using the `_.matches` callback shorthand
+     * _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user');
+     * // => ['barney']
+     *
+     * // using the `_.matchesProperty` callback shorthand
+     * _.pluck(_.filter(users, 'active', false), 'user');
+     * // => ['fred']
+     *
+     * // using the `_.property` callback shorthand
+     * _.pluck(_.filter(users, 'active'), 'user');
+     * // => ['barney']
+     */
+    function filter(collection, predicate, thisArg) {
+      var func = isArray(collection) ? arrayFilter : baseFilter;
+      predicate = getCallback(predicate, thisArg, 3);
+      return func(collection, predicate);
+    }
+
+    /**
+     * Iterates over elements of `collection`, returning the first element
+     * `predicate` returns truthy for. The predicate is bound to `thisArg` and
+     * invoked with three arguments: (value, index|key, collection).
+     *
+     * If a property name is provided for `predicate` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `predicate` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @alias detect
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to search.
+     * @param {Function|Object|string} [predicate=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {*} Returns the matched element, else `undefined`.
+     * @example
+     *
+     * var users = [
+     *   { 'user': 'barney',  'age': 36, 'active': true },
+     *   { 'user': 'fred',    'age': 40, 'active': false },
+     *   { 'user': 'pebbles', 'age': 1,  'active': true }
+     * ];
+     *
+     * _.result(_.find(users, function(chr) {
+     *   return chr.age < 40;
+     * }), 'user');
+     * // => 'barney'
+     *
+     * // using the `_.matches` callback shorthand
+     * _.result(_.find(users, { 'age': 1, 'active': true }), 'user');
+     * // => 'pebbles'
+     *
+     * // using the `_.matchesProperty` callback shorthand
+     * _.result(_.find(users, 'active', false), 'user');
+     * // => 'fred'
+     *
+     * // using the `_.property` callback shorthand
+     * _.result(_.find(users, 'active'), 'user');
+     * // => 'barney'
+     */
+    var find = createFind(baseEach);
+
+    /**
+     * This method is like `_.find` except that it iterates over elements of
+     * `collection` from right to left.
+     *
+     * @static
+     * @memberOf _
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to search.
+     * @param {Function|Object|string} [predicate=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {*} Returns the matched element, else `undefined`.
+     * @example
+     *
+     * _.findLast([1, 2, 3, 4], function(n) {
+     *   return n % 2 == 1;
+     * });
+     * // => 3
+     */
+    var findLast = createFind(baseEachRight, true);
+
+    /**
+     * Performs a deep comparison between each element in `collection` and the
+     * source object, returning the first element that has equivalent property
+     * values.
+     *
+     * **Note:** This method supports comparing arrays, booleans, `Date` objects,
+     * numbers, `Object` objects, regexes, and strings. Objects are compared by
+     * their own, not inherited, enumerable properties. For comparing a single
+     * own or inherited property value see `_.matchesProperty`.
+     *
+     * @static
+     * @memberOf _
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to search.
+     * @param {Object} source The object of property values to match.
+     * @returns {*} Returns the matched element, else `undefined`.
+     * @example
+     *
+     * var users = [
+     *   { 'user': 'barney', 'age': 36, 'active': true },
+     *   { 'user': 'fred',   'age': 40, 'active': false }
+     * ];
+     *
+     * _.result(_.findWhere(users, { 'age': 36, 'active': true }), 'user');
+     * // => 'barney'
+     *
+     * _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user');
+     * // => 'fred'
+     */
+    function findWhere(collection, source) {
+      return find(collection, baseMatches(source));
+    }
+
+    /**
+     * Iterates over elements of `collection` invoking `iteratee` for each element.
+     * The `iteratee` is bound to `thisArg` and invoked with three arguments:
+     * (value, index|key, collection). Iteratee functions may exit iteration early
+     * by explicitly returning `false`.
+     *
+     * **Note:** As with other "Collections" methods, objects with a "length" property
+     * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`
+     * may be used for object iteration.
+     *
+     * @static
+     * @memberOf _
+     * @alias each
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {Array|Object|string} Returns `collection`.
+     * @example
+     *
+     * _([1, 2]).forEach(function(n) {
+     *   console.log(n);
+     * }).value();
+     * // => logs each value from left to right and returns the array
+     *
+     * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) {
+     *   console.log(n, key);
+     * });
+     * // => logs each value-key pair and returns the object (iteration order is not guaranteed)
+     */
+    var forEach = createForEach(arrayEach, baseEach);
+
+    /**
+     * This method is like `_.forEach` except that it iterates over elements of
+     * `collection` from right to left.
+     *
+     * @static
+     * @memberOf _
+     * @alias eachRight
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {Array|Object|string} Returns `collection`.
+     * @example
+     *
+     * _([1, 2]).forEachRight(function(n) {
+     *   console.log(n);
+     * }).value();
+     * // => logs each value from right to left and returns the array
+     */
+    var forEachRight = createForEach(arrayEachRight, baseEachRight);
+
+    /**
+     * Creates an object composed of keys generated from the results of running
+     * each element of `collection` through `iteratee`. The corresponding value
+     * of each key is an array of the elements responsible for generating the key.
+     * The `iteratee` is bound to `thisArg` and invoked with three arguments:
+     * (value, index|key, collection).
+     *
+     * If a property name is provided for `iteratee` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `iteratee` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {Object} Returns the composed aggregate object.
+     * @example
+     *
+     * _.groupBy([4.2, 6.1, 6.4], function(n) {
+     *   return Math.floor(n);
+     * });
+     * // => { '4': [4.2], '6': [6.1, 6.4] }
+     *
+     * _.groupBy([4.2, 6.1, 6.4], function(n) {
+     *   return this.floor(n);
+     * }, Math);
+     * // => { '4': [4.2], '6': [6.1, 6.4] }
+     *
+     * // using the `_.property` callback shorthand
+     * _.groupBy(['one', 'two', 'three'], 'length');
+     * // => { '3': ['one', 'two'], '5': ['three'] }
+     */
+    var groupBy = createAggregator(function(result, value, key) {
+      if (hasOwnProperty.call(result, key)) {
+        result[key].push(value);
+      } else {
+        result[key] = [value];
+      }
+    });
+
+    /**
+     * Checks if `target` is in `collection` using
+     * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+     * for equality comparisons. If `fromIndex` is negative, it's used as the offset
+     * from the end of `collection`.
+     *
+     * @static
+     * @memberOf _
+     * @alias contains, include
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to search.
+     * @param {*} target The value to search for.
+     * @param {number} [fromIndex=0] The index to search from.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.
+     * @returns {boolean} Returns `true` if a matching element is found, else `false`.
+     * @example
+     *
+     * _.includes([1, 2, 3], 1);
+     * // => true
+     *
+     * _.includes([1, 2, 3], 1, 2);
+     * // => false
+     *
+     * _.includes({ 'user': 'fred', 'age': 40 }, 'fred');
+     * // => true
+     *
+     * _.includes('pebbles', 'eb');
+     * // => true
+     */
+    function includes(collection, target, fromIndex, guard) {
+      var length = collection ? getLength(collection) : 0;
+      if (!isLength(length)) {
+        collection = values(collection);
+        length = collection.length;
+      }
+      if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {
+        fromIndex = 0;
+      } else {
+        fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);
+      }
+      return (typeof collection == 'string' || !isArray(collection) && isString(collection))
+        ? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1)
+        : (!!length && getIndexOf(collection, target, fromIndex) > -1);
+    }
+
+    /**
+     * Creates an object composed of keys generated from the results of running
+     * each element of `collection` through `iteratee`. The corresponding value
+     * of each key is the last element responsible for generating the key. The
+     * iteratee function is bound to `thisArg` and invoked with three arguments:
+     * (value, index|key, collection).
+     *
+     * If a property name is provided for `iteratee` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `iteratee` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {Object} Returns the composed aggregate object.
+     * @example
+     *
+     * var keyData = [
+     *   { 'dir': 'left', 'code': 97 },
+     *   { 'dir': 'right', 'code': 100 }
+     * ];
+     *
+     * _.indexBy(keyData, 'dir');
+     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
+     *
+     * _.indexBy(keyData, function(object) {
+     *   return String.fromCharCode(object.code);
+     * });
+     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
+     *
+     * _.indexBy(keyData, function(object) {
+     *   return this.fromCharCode(object.code);
+     * }, String);
+     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
+     */
+    var indexBy = createAggregator(function(result, value, key) {
+      result[key] = value;
+    });
+
+    /**
+     * Invokes the method at `path` of each element in `collection`, returning
+     * an array of the results of each invoked method. Any additional arguments
+     * are provided to each invoked method. If `methodName` is a function it's
+     * invoked for, and `this` bound to, each element in `collection`.
+     *
+     * @static
+     * @memberOf _
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Array|Function|string} path The path of the method to invoke or
+     *  the function invoked per iteration.
+     * @param {...*} [args] The arguments to invoke the method with.
+     * @returns {Array} Returns the array of results.
+     * @example
+     *
+     * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');
+     * // => [[1, 5, 7], [1, 2, 3]]
+     *
+     * _.invoke([123, 456], String.prototype.split, '');
+     * // => [['1', '2', '3'], ['4', '5', '6']]
+     */
+    var invoke = restParam(function(collection, path, args) {
+      var index = -1,
+          isFunc = typeof path == 'function',
+          isProp = isKey(path),
+          result = isArrayLike(collection) ? Array(collection.length) : [];
+
+      baseEach(collection, function(value) {
+        var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined);
+        result[++index] = func ? func.apply(value, args) : invokePath(value, path, args);
+      });
+      return result;
+    });
+
+    /**
+     * Creates an array of values by running each element in `collection` through
+     * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three
+     * arguments: (value, index|key, collection).
+     *
+     * If a property name is provided for `iteratee` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `iteratee` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * Many lodash methods are guarded to work as iteratees for methods like
+     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
+     *
+     * The guarded methods are:
+     * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`,
+     * `drop`, `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`,
+     * `parseInt`, `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`,
+     * `trimLeft`, `trimRight`, `trunc`, `random`, `range`, `sample`, `some`,
+     * `sum`, `uniq`, and `words`
+     *
+     * @static
+     * @memberOf _
+     * @alias collect
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {Array} Returns the new mapped array.
+     * @example
+     *
+     * function timesThree(n) {
+     *   return n * 3;
+     * }
+     *
+     * _.map([1, 2], timesThree);
+     * // => [3, 6]
+     *
+     * _.map({ 'a': 1, 'b': 2 }, timesThree);
+     * // => [3, 6] (iteration order is not guaranteed)
+     *
+     * var users = [
+     *   { 'user': 'barney' },
+     *   { 'user': 'fred' }
+     * ];
+     *
+     * // using the `_.property` callback shorthand
+     * _.map(users, 'user');
+     * // => ['barney', 'fred']
+     */
+    function map(collection, iteratee, thisArg) {
+      var func = isArray(collection) ? arrayMap : baseMap;
+      iteratee = getCallback(iteratee, thisArg, 3);
+      return func(collection, iteratee);
+    }
+
+    /**
+     * Creates an array of elements split into two groups, the first of which
+     * contains elements `predicate` returns truthy for, while the second of which
+     * contains elements `predicate` returns falsey for. The predicate is bound
+     * to `thisArg` and invoked with three arguments: (value, index|key, collection).
+     *
+     * If a property name is provided for `predicate` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `predicate` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function|Object|string} [predicate=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {Array} Returns the array of grouped elements.
+     * @example
+     *
+     * _.partition([1, 2, 3], function(n) {
+     *   return n % 2;
+     * });
+     * // => [[1, 3], [2]]
+     *
+     * _.partition([1.2, 2.3, 3.4], function(n) {
+     *   return this.floor(n) % 2;
+     * }, Math);
+     * // => [[1.2, 3.4], [2.3]]
+     *
+     * var users = [
+     *   { 'user': 'barney',  'age': 36, 'active': false },
+     *   { 'user': 'fred',    'age': 40, 'active': true },
+     *   { 'user': 'pebbles', 'age': 1,  'active': false }
+     * ];
+     *
+     * var mapper = function(array) {
+     *   return _.pluck(array, 'user');
+     * };
+     *
+     * // using the `_.matches` callback shorthand
+     * _.map(_.partition(users, { 'age': 1, 'active': false }), mapper);
+     * // => [['pebbles'], ['barney', 'fred']]
+     *
+     * // using the `_.matchesProperty` callback shorthand
+     * _.map(_.partition(users, 'active', false), mapper);
+     * // => [['barney', 'pebbles'], ['fred']]
+     *
+     * // using the `_.property` callback shorthand
+     * _.map(_.partition(users, 'active'), mapper);
+     * // => [['fred'], ['barney', 'pebbles']]
+     */
+    var partition = createAggregator(function(result, value, key) {
+      result[key ? 0 : 1].push(value);
+    }, function() { return [[], []]; });
+
+    /**
+     * Gets the property value of `path` from all elements in `collection`.
+     *
+     * @static
+     * @memberOf _
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Array|string} path The path of the property to pluck.
+     * @returns {Array} Returns the property values.
+     * @example
+     *
+     * var users = [
+     *   { 'user': 'barney', 'age': 36 },
+     *   { 'user': 'fred',   'age': 40 }
+     * ];
+     *
+     * _.pluck(users, 'user');
+     * // => ['barney', 'fred']
+     *
+     * var userIndex = _.indexBy(users, 'user');
+     * _.pluck(userIndex, 'age');
+     * // => [36, 40] (iteration order is not guaranteed)
+     */
+    function pluck(collection, path) {
+      return map(collection, property(path));
+    }
+
+    /**
+     * Reduces `collection` to a value which is the accumulated result of running
+     * each element in `collection` through `iteratee`, where each successive
+     * invocation is supplied the return value of the previous. If `accumulator`
+     * is not provided the first element of `collection` is used as the initial
+     * value. The `iteratee` is bound to `thisArg` and invoked with four arguments:
+     * (accumulator, value, index|key, collection).
+     *
+     * Many lodash methods are guarded to work as iteratees for methods like
+     * `_.reduce`, `_.reduceRight`, and `_.transform`.
+     *
+     * The guarded methods are:
+     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `sortByAll`,
+     * and `sortByOrder`
+     *
+     * @static
+     * @memberOf _
+     * @alias foldl, inject
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+     * @param {*} [accumulator] The initial value.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {*} Returns the accumulated value.
+     * @example
+     *
+     * _.reduce([1, 2], function(total, n) {
+     *   return total + n;
+     * });
+     * // => 3
+     *
+     * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) {
+     *   result[key] = n * 3;
+     *   return result;
+     * }, {});
+     * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed)
+     */
+    var reduce = createReduce(arrayReduce, baseEach);
+
+    /**
+     * This method is like `_.reduce` except that it iterates over elements of
+     * `collection` from right to left.
+     *
+     * @static
+     * @memberOf _
+     * @alias foldr
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+     * @param {*} [accumulator] The initial value.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {*} Returns the accumulated value.
+     * @example
+     *
+     * var array = [[0, 1], [2, 3], [4, 5]];
+     *
+     * _.reduceRight(array, function(flattened, other) {
+     *   return flattened.concat(other);
+     * }, []);
+     * // => [4, 5, 2, 3, 0, 1]
+     */
+    var reduceRight = createReduce(arrayReduceRight, baseEachRight);
+
+    /**
+     * The opposite of `_.filter`; this method returns the elements of `collection`
+     * that `predicate` does **not** return truthy for.
+     *
+     * @static
+     * @memberOf _
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function|Object|string} [predicate=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {Array} Returns the new filtered array.
+     * @example
+     *
+     * _.reject([1, 2, 3, 4], function(n) {
+     *   return n % 2 == 0;
+     * });
+     * // => [1, 3]
+     *
+     * var users = [
+     *   { 'user': 'barney', 'age': 36, 'active': false },
+     *   { 'user': 'fred',   'age': 40, 'active': true }
+     * ];
+     *
+     * // using the `_.matches` callback shorthand
+     * _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user');
+     * // => ['barney']
+     *
+     * // using the `_.matchesProperty` callback shorthand
+     * _.pluck(_.reject(users, 'active', false), 'user');
+     * // => ['fred']
+     *
+     * // using the `_.property` callback shorthand
+     * _.pluck(_.reject(users, 'active'), 'user');
+     * // => ['barney']
+     */
+    function reject(collection, predicate, thisArg) {
+      var func = isArray(collection) ? arrayFilter : baseFilter;
+      predicate = getCallback(predicate, thisArg, 3);
+      return func(collection, function(value, index, collection) {
+        return !predicate(value, index, collection);
+      });
+    }
+
+    /**
+     * Gets a random element or `n` random elements from a collection.
+     *
+     * @static
+     * @memberOf _
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to sample.
+     * @param {number} [n] The number of elements to sample.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {*} Returns the random sample(s).
+     * @example
+     *
+     * _.sample([1, 2, 3, 4]);
+     * // => 2
+     *
+     * _.sample([1, 2, 3, 4], 2);
+     * // => [3, 1]
+     */
+    function sample(collection, n, guard) {
+      if (guard ? isIterateeCall(collection, n, guard) : n == null) {
+        collection = toIterable(collection);
+        var length = collection.length;
+        return length > 0 ? collection[baseRandom(0, length - 1)] : undefined;
+      }
+      var index = -1,
+          result = toArray(collection),
+          length = result.length,
+          lastIndex = length - 1;
+
+      n = nativeMin(n < 0 ? 0 : (+n || 0), length);
+      while (++index < n) {
+        var rand = baseRandom(index, lastIndex),
+            value = result[rand];
+
+        result[rand] = result[index];
+        result[index] = value;
+      }
+      result.length = n;
+      return result;
+    }
+
+    /**
+     * Creates an array of shuffled values, using a version of the
+     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
+     *
+     * @static
+     * @memberOf _
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to shuffle.
+     * @returns {Array} Returns the new shuffled array.
+     * @example
+     *
+     * _.shuffle([1, 2, 3, 4]);
+     * // => [4, 1, 3, 2]
+     */
+    function shuffle(collection) {
+      return sample(collection, POSITIVE_INFINITY);
+    }
+
+    /**
+     * Gets the size of `collection` by returning its length for array-like
+     * values or the number of own enumerable properties for objects.
+     *
+     * @static
+     * @memberOf _
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to inspect.
+     * @returns {number} Returns the size of `collection`.
+     * @example
+     *
+     * _.size([1, 2, 3]);
+     * // => 3
+     *
+     * _.size({ 'a': 1, 'b': 2 });
+     * // => 2
+     *
+     * _.size('pebbles');
+     * // => 7
+     */
+    function size(collection) {
+      var length = collection ? getLength(collection) : 0;
+      return isLength(length) ? length : keys(collection).length;
+    }
+
+    /**
+     * Checks if `predicate` returns truthy for **any** element of `collection`.
+     * The function returns as soon as it finds a passing value and does not iterate
+     * over the entire collection. The predicate is bound to `thisArg` and invoked
+     * with three arguments: (value, index|key, collection).
+     *
+     * If a property name is provided for `predicate` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `predicate` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @alias any
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function|Object|string} [predicate=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {boolean} Returns `true` if any element passes the predicate check,
+     *  else `false`.
+     * @example
+     *
+     * _.some([null, 0, 'yes', false], Boolean);
+     * // => true
+     *
+     * var users = [
+     *   { 'user': 'barney', 'active': true },
+     *   { 'user': 'fred',   'active': false }
+     * ];
+     *
+     * // using the `_.matches` callback shorthand
+     * _.some(users, { 'user': 'barney', 'active': false });
+     * // => false
+     *
+     * // using the `_.matchesProperty` callback shorthand
+     * _.some(users, 'active', false);
+     * // => true
+     *
+     * // using the `_.property` callback shorthand
+     * _.some(users, 'active');
+     * // => true
+     */
+    function some(collection, predicate, thisArg) {
+      var func = isArray(collection) ? arraySome : baseSome;
+      if (thisArg && isIterateeCall(collection, predicate, thisArg)) {
+        predicate = undefined;
+      }
+      if (typeof predicate != 'function' || thisArg !== undefined) {
+        predicate = getCallback(predicate, thisArg, 3);
+      }
+      return func(collection, predicate);
+    }
+
+    /**
+     * Creates an array of elements, sorted in ascending order by the results of
+     * running each element in a collection through `iteratee`. This method performs
+     * a stable sort, that is, it preserves the original sort order of equal elements.
+     * The `iteratee` is bound to `thisArg` and invoked with three arguments:
+     * (value, index|key, collection).
+     *
+     * If a property name is provided for `iteratee` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `iteratee` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {Array} Returns the new sorted array.
+     * @example
+     *
+     * _.sortBy([1, 2, 3], function(n) {
+     *   return Math.sin(n);
+     * });
+     * // => [3, 1, 2]
+     *
+     * _.sortBy([1, 2, 3], function(n) {
+     *   return this.sin(n);
+     * }, Math);
+     * // => [3, 1, 2]
+     *
+     * var users = [
+     *   { 'user': 'fred' },
+     *   { 'user': 'pebbles' },
+     *   { 'user': 'barney' }
+     * ];
+     *
+     * // using the `_.property` callback shorthand
+     * _.pluck(_.sortBy(users, 'user'), 'user');
+     * // => ['barney', 'fred', 'pebbles']
+     */
+    function sortBy(collection, iteratee, thisArg) {
+      if (collection == null) {
+        return [];
+      }
+      if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
+        iteratee = undefined;
+      }
+      var index = -1;
+      iteratee = getCallback(iteratee, thisArg, 3);
+
+      var result = baseMap(collection, function(value, key, collection) {
+        return { 'criteria': iteratee(value, key, collection), 'index': ++index, 'value': value };
+      });
+      return baseSortBy(result, compareAscending);
+    }
+
+    /**
+     * This method is like `_.sortBy` except that it can sort by multiple iteratees
+     * or property names.
+     *
+     * If a property name is provided for an iteratee the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If an object is provided for an iteratee the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {...(Function|Function[]|Object|Object[]|string|string[])} iteratees
+     *  The iteratees to sort by, specified as individual values or arrays of values.
+     * @returns {Array} Returns the new sorted array.
+     * @example
+     *
+     * var users = [
+     *   { 'user': 'fred',   'age': 48 },
+     *   { 'user': 'barney', 'age': 36 },
+     *   { 'user': 'fred',   'age': 42 },
+     *   { 'user': 'barney', 'age': 34 }
+     * ];
+     *
+     * _.map(_.sortByAll(users, ['user', 'age']), _.values);
+     * // => [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]]
+     *
+     * _.map(_.sortByAll(users, 'user', function(chr) {
+     *   return Math.floor(chr.age / 10);
+     * }), _.values);
+     * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
+     */
+    var sortByAll = restParam(function(collection, iteratees) {
+      if (collection == null) {
+        return [];
+      }
+      var guard = iteratees[2];
+      if (guard && isIterateeCall(iteratees[0], iteratees[1], guard)) {
+        iteratees.length = 1;
+      }
+      return baseSortByOrder(collection, baseFlatten(iteratees), []);
+    });
+
+    /**
+     * This method is like `_.sortByAll` except that it allows specifying the
+     * sort orders of the iteratees to sort by. If `orders` is unspecified, all
+     * values are sorted in ascending order. Otherwise, a value is sorted in
+     * ascending order if its corresponding order is "asc", and descending if "desc".
+     *
+     * If a property name is provided for an iteratee the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If an object is provided for an iteratee the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
+     * @param {boolean[]} [orders] The sort orders of `iteratees`.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.
+     * @returns {Array} Returns the new sorted array.
+     * @example
+     *
+     * var users = [
+     *   { 'user': 'fred',   'age': 48 },
+     *   { 'user': 'barney', 'age': 34 },
+     *   { 'user': 'fred',   'age': 42 },
+     *   { 'user': 'barney', 'age': 36 }
+     * ];
+     *
+     * // sort by `user` in ascending order and by `age` in descending order
+     * _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values);
+     * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
+     */
+    function sortByOrder(collection, iteratees, orders, guard) {
+      if (collection == null) {
+        return [];
+      }
+      if (guard && isIterateeCall(iteratees, orders, guard)) {
+        orders = undefined;
+      }
+      if (!isArray(iteratees)) {
+        iteratees = iteratees == null ? [] : [iteratees];
+      }
+      if (!isArray(orders)) {
+        orders = orders == null ? [] : [orders];
+      }
+      return baseSortByOrder(collection, iteratees, orders);
+    }
+
+    /**
+     * Performs a deep comparison between each element in `collection` and the
+     * source object, returning an array of all elements that have equivalent
+     * property values.
+     *
+     * **Note:** This method supports comparing arrays, booleans, `Date` objects,
+     * numbers, `Object` objects, regexes, and strings. Objects are compared by
+     * their own, not inherited, enumerable properties. For comparing a single
+     * own or inherited property value see `_.matchesProperty`.
+     *
+     * @static
+     * @memberOf _
+     * @category Collection
+     * @param {Array|Object|string} collection The collection to search.
+     * @param {Object} source The object of property values to match.
+     * @returns {Array} Returns the new filtered array.
+     * @example
+     *
+     * var users = [
+     *   { 'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy'] },
+     *   { 'user': 'fred',   'age': 40, 'active': true, 'pets': ['baby puss', 'dino'] }
+     * ];
+     *
+     * _.pluck(_.where(users, { 'age': 36, 'active': false }), 'user');
+     * // => ['barney']
+     *
+     * _.pluck(_.where(users, { 'pets': ['dino'] }), 'user');
+     * // => ['fred']
+     */
+    function where(collection, source) {
+      return filter(collection, baseMatches(source));
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Gets the number of milliseconds that have elapsed since the Unix epoch
+     * (1 January 1970 00:00:00 UTC).
+     *
+     * @static
+     * @memberOf _
+     * @category Date
+     * @example
+     *
+     * _.defer(function(stamp) {
+     *   console.log(_.now() - stamp);
+     * }, _.now());
+     * // => logs the number of milliseconds it took for the deferred function to be invoked
+     */
+    var now = nativeNow || function() {
+      return new Date().getTime();
+    };
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * The opposite of `_.before`; this method creates a function that invokes
+     * `func` once it's called `n` or more times.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {number} n The number of calls before `func` is invoked.
+     * @param {Function} func The function to restrict.
+     * @returns {Function} Returns the new restricted function.
+     * @example
+     *
+     * var saves = ['profile', 'settings'];
+     *
+     * var done = _.after(saves.length, function() {
+     *   console.log('done saving!');
+     * });
+     *
+     * _.forEach(saves, function(type) {
+     *   asyncSave({ 'type': type, 'complete': done });
+     * });
+     * // => logs 'done saving!' after the two async saves have completed
+     */
+    function after(n, func) {
+      if (typeof func != 'function') {
+        if (typeof n == 'function') {
+          var temp = n;
+          n = func;
+          func = temp;
+        } else {
+          throw new TypeError(FUNC_ERROR_TEXT);
+        }
+      }
+      n = nativeIsFinite(n = +n) ? n : 0;
+      return function() {
+        if (--n < 1) {
+          return func.apply(this, arguments);
+        }
+      };
+    }
+
+    /**
+     * Creates a function that accepts up to `n` arguments ignoring any
+     * additional arguments.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Function} func The function to cap arguments for.
+     * @param {number} [n=func.length] The arity cap.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * _.map(['6', '8', '10'], _.ary(parseInt, 1));
+     * // => [6, 8, 10]
+     */
+    function ary(func, n, guard) {
+      if (guard && isIterateeCall(func, n, guard)) {
+        n = undefined;
+      }
+      n = (func && n == null) ? func.length : nativeMax(+n || 0, 0);
+      return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);
+    }
+
+    /**
+     * Creates a function that invokes `func`, with the `this` binding and arguments
+     * of the created function, while it's called less than `n` times. Subsequent
+     * calls to the created function return the result of the last `func` invocation.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {number} n The number of calls at which `func` is no longer invoked.
+     * @param {Function} func The function to restrict.
+     * @returns {Function} Returns the new restricted function.
+     * @example
+     *
+     * jQuery('#add').on('click', _.before(5, addContactToList));
+     * // => allows adding up to 4 contacts to the list
+     */
+    function before(n, func) {
+      var result;
+      if (typeof func != 'function') {
+        if (typeof n == 'function') {
+          var temp = n;
+          n = func;
+          func = temp;
+        } else {
+          throw new TypeError(FUNC_ERROR_TEXT);
+        }
+      }
+      return function() {
+        if (--n > 0) {
+          result = func.apply(this, arguments);
+        }
+        if (n <= 1) {
+          func = undefined;
+        }
+        return result;
+      };
+    }
+
+    /**
+     * Creates a function that invokes `func` with the `this` binding of `thisArg`
+     * and prepends any additional `_.bind` arguments to those provided to the
+     * bound function.
+     *
+     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
+     * may be used as a placeholder for partially applied arguments.
+     *
+     * **Note:** Unlike native `Function#bind` this method does not set the "length"
+     * property of bound functions.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Function} func The function to bind.
+     * @param {*} thisArg The `this` binding of `func`.
+     * @param {...*} [partials] The arguments to be partially applied.
+     * @returns {Function} Returns the new bound function.
+     * @example
+     *
+     * var greet = function(greeting, punctuation) {
+     *   return greeting + ' ' + this.user + punctuation;
+     * };
+     *
+     * var object = { 'user': 'fred' };
+     *
+     * var bound = _.bind(greet, object, 'hi');
+     * bound('!');
+     * // => 'hi fred!'
+     *
+     * // using placeholders
+     * var bound = _.bind(greet, object, _, '!');
+     * bound('hi');
+     * // => 'hi fred!'
+     */
+    var bind = restParam(function(func, thisArg, partials) {
+      var bitmask = BIND_FLAG;
+      if (partials.length) {
+        var holders = replaceHolders(partials, bind.placeholder);
+        bitmask |= PARTIAL_FLAG;
+      }
+      return createWrapper(func, bitmask, thisArg, partials, holders);
+    });
+
+    /**
+     * Binds methods of an object to the object itself, overwriting the existing
+     * method. Method names may be specified as individual arguments or as arrays
+     * of method names. If no method names are provided all enumerable function
+     * properties, own and inherited, of `object` are bound.
+     *
+     * **Note:** This method does not set the "length" property of bound functions.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Object} object The object to bind and assign the bound methods to.
+     * @param {...(string|string[])} [methodNames] The object method names to bind,
+     *  specified as individual method names or arrays of method names.
+     * @returns {Object} Returns `object`.
+     * @example
+     *
+     * var view = {
+     *   'label': 'docs',
+     *   'onClick': function() {
+     *     console.log('clicked ' + this.label);
+     *   }
+     * };
+     *
+     * _.bindAll(view);
+     * jQuery('#docs').on('click', view.onClick);
+     * // => logs 'clicked docs' when the element is clicked
+     */
+    var bindAll = restParam(function(object, methodNames) {
+      methodNames = methodNames.length ? baseFlatten(methodNames) : functions(object);
+
+      var index = -1,
+          length = methodNames.length;
+
+      while (++index < length) {
+        var key = methodNames[index];
+        object[key] = createWrapper(object[key], BIND_FLAG, object);
+      }
+      return object;
+    });
+
+    /**
+     * Creates a function that invokes the method at `object[key]` and prepends
+     * any additional `_.bindKey` arguments to those provided to the bound function.
+     *
+     * This method differs from `_.bind` by allowing bound functions to reference
+     * methods that may be redefined or don't yet exist.
+     * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
+     * for more details.
+     *
+     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
+     * builds, may be used as a placeholder for partially applied arguments.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Object} object The object the method belongs to.
+     * @param {string} key The key of the method.
+     * @param {...*} [partials] The arguments to be partially applied.
+     * @returns {Function} Returns the new bound function.
+     * @example
+     *
+     * var object = {
+     *   'user': 'fred',
+     *   'greet': function(greeting, punctuation) {
+     *     return greeting + ' ' + this.user + punctuation;
+     *   }
+     * };
+     *
+     * var bound = _.bindKey(object, 'greet', 'hi');
+     * bound('!');
+     * // => 'hi fred!'
+     *
+     * object.greet = function(greeting, punctuation) {
+     *   return greeting + 'ya ' + this.user + punctuation;
+     * };
+     *
+     * bound('!');
+     * // => 'hiya fred!'
+     *
+     * // using placeholders
+     * var bound = _.bindKey(object, 'greet', _, '!');
+     * bound('hi');
+     * // => 'hiya fred!'
+     */
+    var bindKey = restParam(function(object, key, partials) {
+      var bitmask = BIND_FLAG | BIND_KEY_FLAG;
+      if (partials.length) {
+        var holders = replaceHolders(partials, bindKey.placeholder);
+        bitmask |= PARTIAL_FLAG;
+      }
+      return createWrapper(key, bitmask, object, partials, holders);
+    });
+
+    /**
+     * Creates a function that accepts one or more arguments of `func` that when
+     * called either invokes `func` returning its result, if all `func` arguments
+     * have been provided, or returns a function that accepts one or more of the
+     * remaining `func` arguments, and so on. The arity of `func` may be specified
+     * if `func.length` is not sufficient.
+     *
+     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
+     * may be used as a placeholder for provided arguments.
+     *
+     * **Note:** This method does not set the "length" property of curried functions.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Function} func The function to curry.
+     * @param {number} [arity=func.length] The arity of `func`.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {Function} Returns the new curried function.
+     * @example
+     *
+     * var abc = function(a, b, c) {
+     *   return [a, b, c];
+     * };
+     *
+     * var curried = _.curry(abc);
+     *
+     * curried(1)(2)(3);
+     * // => [1, 2, 3]
+     *
+     * curried(1, 2)(3);
+     * // => [1, 2, 3]
+     *
+     * curried(1, 2, 3);
+     * // => [1, 2, 3]
+     *
+     * // using placeholders
+     * curried(1)(_, 3)(2);
+     * // => [1, 2, 3]
+     */
+    var curry = createCurry(CURRY_FLAG);
+
+    /**
+     * This method is like `_.curry` except that arguments are applied to `func`
+     * in the manner of `_.partialRight` instead of `_.partial`.
+     *
+     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
+     * builds, may be used as a placeholder for provided arguments.
+     *
+     * **Note:** This method does not set the "length" property of curried functions.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Function} func The function to curry.
+     * @param {number} [arity=func.length] The arity of `func`.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {Function} Returns the new curried function.
+     * @example
+     *
+     * var abc = function(a, b, c) {
+     *   return [a, b, c];
+     * };
+     *
+     * var curried = _.curryRight(abc);
+     *
+     * curried(3)(2)(1);
+     * // => [1, 2, 3]
+     *
+     * curried(2, 3)(1);
+     * // => [1, 2, 3]
+     *
+     * curried(1, 2, 3);
+     * // => [1, 2, 3]
+     *
+     * // using placeholders
+     * curried(3)(1, _)(2);
+     * // => [1, 2, 3]
+     */
+    var curryRight = createCurry(CURRY_RIGHT_FLAG);
+
+    /**
+     * Creates a debounced function that delays invoking `func` until after `wait`
+     * milliseconds have elapsed since the last time the debounced function was
+     * invoked. The debounced function comes with a `cancel` method to cancel
+     * delayed invocations. Provide an options object to indicate that `func`
+     * should be invoked on the leading and/or trailing edge of the `wait` timeout.
+     * Subsequent calls to the debounced function return the result of the last
+     * `func` invocation.
+     *
+     * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked
+     * on the trailing edge of the timeout only if the the debounced function is
+     * invoked more than once during the `wait` timeout.
+     *
+     * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)
+     * for details over the differences between `_.debounce` and `_.throttle`.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Function} func The function to debounce.
+     * @param {number} [wait=0] The number of milliseconds to delay.
+     * @param {Object} [options] The options object.
+     * @param {boolean} [options.leading=false] Specify invoking on the leading
+     *  edge of the timeout.
+     * @param {number} [options.maxWait] The maximum time `func` is allowed to be
+     *  delayed before it's invoked.
+     * @param {boolean} [options.trailing=true] Specify invoking on the trailing
+     *  edge of the timeout.
+     * @returns {Function} Returns the new debounced function.
+     * @example
+     *
+     * // avoid costly calculations while the window size is in flux
+     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
+     *
+     * // invoke `sendMail` when the click event is fired, debouncing subsequent calls
+     * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {
+     *   'leading': true,
+     *   'trailing': false
+     * }));
+     *
+     * // ensure `batchLog` is invoked once after 1 second of debounced calls
+     * var source = new EventSource('/stream');
+     * jQuery(source).on('message', _.debounce(batchLog, 250, {
+     *   'maxWait': 1000
+     * }));
+     *
+     * // cancel a debounced call
+     * var todoChanges = _.debounce(batchLog, 1000);
+     * Object.observe(models.todo, todoChanges);
+     *
+     * Object.observe(models, function(changes) {
+     *   if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {
+     *     todoChanges.cancel();
+     *   }
+     * }, ['delete']);
+     *
+     * // ...at some point `models.todo` is changed
+     * models.todo.completed = true;
+     *
+     * // ...before 1 second has passed `models.todo` is deleted
+     * // which cancels the debounced `todoChanges` call
+     * delete models.todo;
+     */
+    function debounce(func, wait, options) {
+      var args,
+          maxTimeoutId,
+          result,
+          stamp,
+          thisArg,
+          timeoutId,
+          trailingCall,
+          lastCalled = 0,
+          maxWait = false,
+          trailing = true;
+
+      if (typeof func != 'function') {
+        throw new TypeError(FUNC_ERROR_TEXT);
+      }
+      wait = wait < 0 ? 0 : (+wait || 0);
+      if (options === true) {
+        var leading = true;
+        trailing = false;
+      } else if (isObject(options)) {
+        leading = !!options.leading;
+        maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);
+        trailing = 'trailing' in options ? !!options.trailing : trailing;
+      }
+
+      function cancel() {
+        if (timeoutId) {
+          clearTimeout(timeoutId);
+        }
+        if (maxTimeoutId) {
+          clearTimeout(maxTimeoutId);
+        }
+        lastCalled = 0;
+        maxTimeoutId = timeoutId = trailingCall = undefined;
+      }
+
+      function complete(isCalled, id) {
+        if (id) {
+          clearTimeout(id);
+        }
+        maxTimeoutId = timeoutId = trailingCall = undefined;
+        if (isCalled) {
+          lastCalled = now();
+          result = func.apply(thisArg, args);
+          if (!timeoutId && !maxTimeoutId) {
+            args = thisArg = undefined;
+          }
+        }
+      }
+
+      function delayed() {
+        var remaining = wait - (now() - stamp);
+        if (remaining <= 0 || remaining > wait) {
+          complete(trailingCall, maxTimeoutId);
+        } else {
+          timeoutId = setTimeout(delayed, remaining);
+        }
+      }
+
+      function maxDelayed() {
+        complete(trailing, timeoutId);
+      }
+
+      function debounced() {
+        args = arguments;
+        stamp = now();
+        thisArg = this;
+        trailingCall = trailing && (timeoutId || !leading);
+
+        if (maxWait === false) {
+          var leadingCall = leading && !timeoutId;
+        } else {
+          if (!maxTimeoutId && !leading) {
+            lastCalled = stamp;
+          }
+          var remaining = maxWait - (stamp - lastCalled),
+              isCalled = remaining <= 0 || remaining > maxWait;
+
+          if (isCalled) {
+            if (maxTimeoutId) {
+              maxTimeoutId = clearTimeout(maxTimeoutId);
+            }
+            lastCalled = stamp;
+            result = func.apply(thisArg, args);
+          }
+          else if (!maxTimeoutId) {
+            maxTimeoutId = setTimeout(maxDelayed, remaining);
+          }
+        }
+        if (isCalled && timeoutId) {
+          timeoutId = clearTimeout(timeoutId);
+        }
+        else if (!timeoutId && wait !== maxWait) {
+          timeoutId = setTimeout(delayed, wait);
+        }
+        if (leadingCall) {
+          isCalled = true;
+          result = func.apply(thisArg, args);
+        }
+        if (isCalled && !timeoutId && !maxTimeoutId) {
+          args = thisArg = undefined;
+        }
+        return result;
+      }
+      debounced.cancel = cancel;
+      return debounced;
+    }
+
+    /**
+     * Defers invoking the `func` until the current call stack has cleared. Any
+     * additional arguments are provided to `func` when it's invoked.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Function} func The function to defer.
+     * @param {...*} [args] The arguments to invoke the function with.
+     * @returns {number} Returns the timer id.
+     * @example
+     *
+     * _.defer(function(text) {
+     *   console.log(text);
+     * }, 'deferred');
+     * // logs 'deferred' after one or more milliseconds
+     */
+    var defer = restParam(function(func, args) {
+      return baseDelay(func, 1, args);
+    });
+
+    /**
+     * Invokes `func` after `wait` milliseconds. Any additional arguments are
+     * provided to `func` when it's invoked.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Function} func The function to delay.
+     * @param {number} wait The number of milliseconds to delay invocation.
+     * @param {...*} [args] The arguments to invoke the function with.
+     * @returns {number} Returns the timer id.
+     * @example
+     *
+     * _.delay(function(text) {
+     *   console.log(text);
+     * }, 1000, 'later');
+     * // => logs 'later' after one second
+     */
+    var delay = restParam(function(func, wait, args) {
+      return baseDelay(func, wait, args);
+    });
+
+    /**
+     * Creates a function that returns the result of invoking the provided
+     * functions with the `this` binding of the created function, where each
+     * successive invocation is supplied the return value of the previous.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {...Function} [funcs] Functions to invoke.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * function square(n) {
+     *   return n * n;
+     * }
+     *
+     * var addSquare = _.flow(_.add, square);
+     * addSquare(1, 2);
+     * // => 9
+     */
+    var flow = createFlow();
+
+    /**
+     * This method is like `_.flow` except that it creates a function that
+     * invokes the provided functions from right to left.
+     *
+     * @static
+     * @memberOf _
+     * @alias backflow, compose
+     * @category Function
+     * @param {...Function} [funcs] Functions to invoke.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * function square(n) {
+     *   return n * n;
+     * }
+     *
+     * var addSquare = _.flowRight(square, _.add);
+     * addSquare(1, 2);
+     * // => 9
+     */
+    var flowRight = createFlow(true);
+
+    /**
+     * Creates a function that memoizes the result of `func`. If `resolver` is
+     * provided it determines the cache key for storing the result based on the
+     * arguments provided to the memoized function. By default, the first argument
+     * provided to the memoized function is coerced to a string and used as the
+     * cache key. The `func` is invoked with the `this` binding of the memoized
+     * function.
+     *
+     * **Note:** The cache is exposed as the `cache` property on the memoized
+     * function. Its creation may be customized by replacing the `_.memoize.Cache`
+     * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object)
+     * method interface of `get`, `has`, and `set`.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Function} func The function to have its output memoized.
+     * @param {Function} [resolver] The function to resolve the cache key.
+     * @returns {Function} Returns the new memoizing function.
+     * @example
+     *
+     * var upperCase = _.memoize(function(string) {
+     *   return string.toUpperCase();
+     * });
+     *
+     * upperCase('fred');
+     * // => 'FRED'
+     *
+     * // modifying the result cache
+     * upperCase.cache.set('fred', 'BARNEY');
+     * upperCase('fred');
+     * // => 'BARNEY'
+     *
+     * // replacing `_.memoize.Cache`
+     * var object = { 'user': 'fred' };
+     * var other = { 'user': 'barney' };
+     * var identity = _.memoize(_.identity);
+     *
+     * identity(object);
+     * // => { 'user': 'fred' }
+     * identity(other);
+     * // => { 'user': 'fred' }
+     *
+     * _.memoize.Cache = WeakMap;
+     * var identity = _.memoize(_.identity);
+     *
+     * identity(object);
+     * // => { 'user': 'fred' }
+     * identity(other);
+     * // => { 'user': 'barney' }
+     */
+    function memoize(func, resolver) {
+      if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
+        throw new TypeError(FUNC_ERROR_TEXT);
+      }
+      var memoized = function() {
+        var args = arguments,
+            key = resolver ? resolver.apply(this, args) : args[0],
+            cache = memoized.cache;
+
+        if (cache.has(key)) {
+          return cache.get(key);
+        }
+        var result = func.apply(this, args);
+        memoized.cache = cache.set(key, result);
+        return result;
+      };
+      memoized.cache = new memoize.Cache;
+      return memoized;
+    }
+
+    /**
+     * Creates a function that runs each argument through a corresponding
+     * transform function.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Function} func The function to wrap.
+     * @param {...(Function|Function[])} [transforms] The functions to transform
+     * arguments, specified as individual functions or arrays of functions.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * function doubled(n) {
+     *   return n * 2;
+     * }
+     *
+     * function square(n) {
+     *   return n * n;
+     * }
+     *
+     * var modded = _.modArgs(function(x, y) {
+     *   return [x, y];
+     * }, square, doubled);
+     *
+     * modded(1, 2);
+     * // => [1, 4]
+     *
+     * modded(5, 10);
+     * // => [25, 20]
+     */
+    var modArgs = restParam(function(func, transforms) {
+      transforms = baseFlatten(transforms);
+      if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) {
+        throw new TypeError(FUNC_ERROR_TEXT);
+      }
+      var length = transforms.length;
+      return restParam(function(args) {
+        var index = nativeMin(args.length, length);
+        while (index--) {
+          args[index] = transforms[index](args[index]);
+        }
+        return func.apply(this, args);
+      });
+    });
+
+    /**
+     * Creates a function that negates the result of the predicate `func`. The
+     * `func` predicate is invoked with the `this` binding and arguments of the
+     * created function.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Function} predicate The predicate to negate.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * function isEven(n) {
+     *   return n % 2 == 0;
+     * }
+     *
+     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
+     * // => [1, 3, 5]
+     */
+    function negate(predicate) {
+      if (typeof predicate != 'function') {
+        throw new TypeError(FUNC_ERROR_TEXT);
+      }
+      return function() {
+        return !predicate.apply(this, arguments);
+      };
+    }
+
+    /**
+     * Creates a function that is restricted to invoking `func` once. Repeat calls
+     * to the function return the value of the first call. The `func` is invoked
+     * with the `this` binding and arguments of the created function.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Function} func The function to restrict.
+     * @returns {Function} Returns the new restricted function.
+     * @example
+     *
+     * var initialize = _.once(createApplication);
+     * initialize();
+     * initialize();
+     * // `initialize` invokes `createApplication` once
+     */
+    function once(func) {
+      return before(2, func);
+    }
+
+    /**
+     * Creates a function that invokes `func` with `partial` arguments prepended
+     * to those provided to the new function. This method is like `_.bind` except
+     * it does **not** alter the `this` binding.
+     *
+     * The `_.partial.placeholder` value, which defaults to `_` in monolithic
+     * builds, may be used as a placeholder for partially applied arguments.
+     *
+     * **Note:** This method does not set the "length" property of partially
+     * applied functions.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Function} func The function to partially apply arguments to.
+     * @param {...*} [partials] The arguments to be partially applied.
+     * @returns {Function} Returns the new partially applied function.
+     * @example
+     *
+     * var greet = function(greeting, name) {
+     *   return greeting + ' ' + name;
+     * };
+     *
+     * var sayHelloTo = _.partial(greet, 'hello');
+     * sayHelloTo('fred');
+     * // => 'hello fred'
+     *
+     * // using placeholders
+     * var greetFred = _.partial(greet, _, 'fred');
+     * greetFred('hi');
+     * // => 'hi fred'
+     */
+    var partial = createPartial(PARTIAL_FLAG);
+
+    /**
+     * This method is like `_.partial` except that partially applied arguments
+     * are appended to those provided to the new function.
+     *
+     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
+     * builds, may be used as a placeholder for partially applied arguments.
+     *
+     * **Note:** This method does not set the "length" property of partially
+     * applied functions.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Function} func The function to partially apply arguments to.
+     * @param {...*} [partials] The arguments to be partially applied.
+     * @returns {Function} Returns the new partially applied function.
+     * @example
+     *
+     * var greet = function(greeting, name) {
+     *   return greeting + ' ' + name;
+     * };
+     *
+     * var greetFred = _.partialRight(greet, 'fred');
+     * greetFred('hi');
+     * // => 'hi fred'
+     *
+     * // using placeholders
+     * var sayHelloTo = _.partialRight(greet, 'hello', _);
+     * sayHelloTo('fred');
+     * // => 'hello fred'
+     */
+    var partialRight = createPartial(PARTIAL_RIGHT_FLAG);
+
+    /**
+     * Creates a function that invokes `func` with arguments arranged according
+     * to the specified indexes where the argument value at the first index is
+     * provided as the first argument, the argument value at the second index is
+     * provided as the second argument, and so on.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Function} func The function to rearrange arguments for.
+     * @param {...(number|number[])} indexes The arranged argument indexes,
+     *  specified as individual indexes or arrays of indexes.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * var rearged = _.rearg(function(a, b, c) {
+     *   return [a, b, c];
+     * }, 2, 0, 1);
+     *
+     * rearged('b', 'c', 'a')
+     * // => ['a', 'b', 'c']
+     *
+     * var map = _.rearg(_.map, [1, 0]);
+     * map(function(n) {
+     *   return n * 3;
+     * }, [1, 2, 3]);
+     * // => [3, 6, 9]
+     */
+    var rearg = restParam(function(func, indexes) {
+      return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes));
+    });
+
+    /**
+     * Creates a function that invokes `func` with the `this` binding of the
+     * created function and arguments from `start` and beyond provided as an array.
+     *
+     * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/Web/JavaScript/Reference/Functions/rest_parameters).
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Function} func The function to apply a rest parameter to.
+     * @param {number} [start=func.length-1] The start position of the rest parameter.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * var say = _.restParam(function(what, names) {
+     *   return what + ' ' + _.initial(names).join(', ') +
+     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);
+     * });
+     *
+     * say('hello', 'fred', 'barney', 'pebbles');
+     * // => 'hello fred, barney, & pebbles'
+     */
+    function restParam(func, start) {
+      if (typeof func != 'function') {
+        throw new TypeError(FUNC_ERROR_TEXT);
+      }
+      start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);
+      return function() {
+        var args = arguments,
+            index = -1,
+            length = nativeMax(args.length - start, 0),
+            rest = Array(length);
+
+        while (++index < length) {
+          rest[index] = args[start + index];
+        }
+        switch (start) {
+          case 0: return func.call(this, rest);
+          case 1: return func.call(this, args[0], rest);
+          case 2: return func.call(this, args[0], args[1], rest);
+        }
+        var otherArgs = Array(start + 1);
+        index = -1;
+        while (++index < start) {
+          otherArgs[index] = args[index];
+        }
+        otherArgs[start] = rest;
+        return func.apply(this, otherArgs);
+      };
+    }
+
+    /**
+     * Creates a function that invokes `func` with the `this` binding of the created
+     * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3).
+     *
+     * **Note:** This method is based on the [spread operator](https://developer.mozilla.org/Web/JavaScript/Reference/Operators/Spread_operator).
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Function} func The function to spread arguments over.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * var say = _.spread(function(who, what) {
+     *   return who + ' says ' + what;
+     * });
+     *
+     * say(['fred', 'hello']);
+     * // => 'fred says hello'
+     *
+     * // with a Promise
+     * var numbers = Promise.all([
+     *   Promise.resolve(40),
+     *   Promise.resolve(36)
+     * ]);
+     *
+     * numbers.then(_.spread(function(x, y) {
+     *   return x + y;
+     * }));
+     * // => a Promise of 76
+     */
+    function spread(func) {
+      if (typeof func != 'function') {
+        throw new TypeError(FUNC_ERROR_TEXT);
+      }
+      return function(array) {
+        return func.apply(this, array);
+      };
+    }
+
+    /**
+     * Creates a throttled function that only invokes `func` at most once per
+     * every `wait` milliseconds. The throttled function comes with a `cancel`
+     * method to cancel delayed invocations. Provide an options object to indicate
+     * that `func` should be invoked on the leading and/or trailing edge of the
+     * `wait` timeout. Subsequent calls to the throttled function return the
+     * result of the last `func` call.
+     *
+     * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked
+     * on the trailing edge of the timeout only if the the throttled function is
+     * invoked more than once during the `wait` timeout.
+     *
+     * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)
+     * for details over the differences between `_.throttle` and `_.debounce`.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {Function} func The function to throttle.
+     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
+     * @param {Object} [options] The options object.
+     * @param {boolean} [options.leading=true] Specify invoking on the leading
+     *  edge of the timeout.
+     * @param {boolean} [options.trailing=true] Specify invoking on the trailing
+     *  edge of the timeout.
+     * @returns {Function} Returns the new throttled function.
+     * @example
+     *
+     * // avoid excessively updating the position while scrolling
+     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
+     *
+     * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes
+     * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {
+     *   'trailing': false
+     * }));
+     *
+     * // cancel a trailing throttled call
+     * jQuery(window).on('popstate', throttled.cancel);
+     */
+    function throttle(func, wait, options) {
+      var leading = true,
+          trailing = true;
+
+      if (typeof func != 'function') {
+        throw new TypeError(FUNC_ERROR_TEXT);
+      }
+      if (options === false) {
+        leading = false;
+      } else if (isObject(options)) {
+        leading = 'leading' in options ? !!options.leading : leading;
+        trailing = 'trailing' in options ? !!options.trailing : trailing;
+      }
+      return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });
+    }
+
+    /**
+     * Creates a function that provides `value` to the wrapper function as its
+     * first argument. Any additional arguments provided to the function are
+     * appended to those provided to the wrapper function. The wrapper is invoked
+     * with the `this` binding of the created function.
+     *
+     * @static
+     * @memberOf _
+     * @category Function
+     * @param {*} value The value to wrap.
+     * @param {Function} wrapper The wrapper function.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * var p = _.wrap(_.escape, function(func, text) {
+     *   return '<p>' + func(text) + '</p>';
+     * });
+     *
+     * p('fred, barney, & pebbles');
+     * // => '<p>fred, barney, &amp; pebbles</p>'
+     */
+    function wrap(value, wrapper) {
+      wrapper = wrapper == null ? identity : wrapper;
+      return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []);
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Creates a clone of `value`. If `isDeep` is `true` nested objects are cloned,
+     * otherwise they are assigned by reference. If `customizer` is provided it's
+     * invoked to produce the cloned values. If `customizer` returns `undefined`
+     * cloning is handled by the method instead. The `customizer` is bound to
+     * `thisArg` and invoked with up to three argument; (value [, index|key, object]).
+     *
+     * **Note:** This method is loosely based on the
+     * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).
+     * The enumerable properties of `arguments` objects and objects created by
+     * constructors other than `Object` are cloned to plain `Object` objects. An
+     * empty object is returned for uncloneable values such as functions, DOM nodes,
+     * Maps, Sets, and WeakMaps.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to clone.
+     * @param {boolean} [isDeep] Specify a deep clone.
+     * @param {Function} [customizer] The function to customize cloning values.
+     * @param {*} [thisArg] The `this` binding of `customizer`.
+     * @returns {*} Returns the cloned value.
+     * @example
+     *
+     * var users = [
+     *   { 'user': 'barney' },
+     *   { 'user': 'fred' }
+     * ];
+     *
+     * var shallow = _.clone(users);
+     * shallow[0] === users[0];
+     * // => true
+     *
+     * var deep = _.clone(users, true);
+     * deep[0] === users[0];
+     * // => false
+     *
+     * // using a customizer callback
+     * var el = _.clone(document.body, function(value) {
+     *   if (_.isElement(value)) {
+     *     return value.cloneNode(false);
+     *   }
+     * });
+     *
+     * el === document.body
+     * // => false
+     * el.nodeName
+     * // => BODY
+     * el.childNodes.length;
+     * // => 0
+     */
+    function clone(value, isDeep, customizer, thisArg) {
+      if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) {
+        isDeep = false;
+      }
+      else if (typeof isDeep == 'function') {
+        thisArg = customizer;
+        customizer = isDeep;
+        isDeep = false;
+      }
+      return typeof customizer == 'function'
+        ? baseClone(value, isDeep, bindCallback(customizer, thisArg, 3))
+        : baseClone(value, isDeep);
+    }
+
+    /**
+     * Creates a deep clone of `value`. If `customizer` is provided it's invoked
+     * to produce the cloned values. If `customizer` returns `undefined` cloning
+     * is handled by the method instead. The `customizer` is bound to `thisArg`
+     * and invoked with up to three argument; (value [, index|key, object]).
+     *
+     * **Note:** This method is loosely based on the
+     * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).
+     * The enumerable properties of `arguments` objects and objects created by
+     * constructors other than `Object` are cloned to plain `Object` objects. An
+     * empty object is returned for uncloneable values such as functions, DOM nodes,
+     * Maps, Sets, and WeakMaps.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to deep clone.
+     * @param {Function} [customizer] The function to customize cloning values.
+     * @param {*} [thisArg] The `this` binding of `customizer`.
+     * @returns {*} Returns the deep cloned value.
+     * @example
+     *
+     * var users = [
+     *   { 'user': 'barney' },
+     *   { 'user': 'fred' }
+     * ];
+     *
+     * var deep = _.cloneDeep(users);
+     * deep[0] === users[0];
+     * // => false
+     *
+     * // using a customizer callback
+     * var el = _.cloneDeep(document.body, function(value) {
+     *   if (_.isElement(value)) {
+     *     return value.cloneNode(true);
+     *   }
+     * });
+     *
+     * el === document.body
+     * // => false
+     * el.nodeName
+     * // => BODY
+     * el.childNodes.length;
+     * // => 20
+     */
+    function cloneDeep(value, customizer, thisArg) {
+      return typeof customizer == 'function'
+        ? baseClone(value, true, bindCallback(customizer, thisArg, 3))
+        : baseClone(value, true);
+    }
+
+    /**
+     * Checks if `value` is greater than `other`.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to compare.
+     * @param {*} other The other value to compare.
+     * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`.
+     * @example
+     *
+     * _.gt(3, 1);
+     * // => true
+     *
+     * _.gt(3, 3);
+     * // => false
+     *
+     * _.gt(1, 3);
+     * // => false
+     */
+    function gt(value, other) {
+      return value > other;
+    }
+
+    /**
+     * Checks if `value` is greater than or equal to `other`.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to compare.
+     * @param {*} other The other value to compare.
+     * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`.
+     * @example
+     *
+     * _.gte(3, 1);
+     * // => true
+     *
+     * _.gte(3, 3);
+     * // => true
+     *
+     * _.gte(1, 3);
+     * // => false
+     */
+    function gte(value, other) {
+      return value >= other;
+    }
+
+    /**
+     * Checks if `value` is classified as an `arguments` object.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+     * @example
+     *
+     * _.isArguments(function() { return arguments; }());
+     * // => true
+     *
+     * _.isArguments([1, 2, 3]);
+     * // => false
+     */
+    function isArguments(value) {
+      return isObjectLike(value) && isArrayLike(value) &&
+        hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');
+    }
+
+    /**
+     * Checks if `value` is classified as an `Array` object.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+     * @example
+     *
+     * _.isArray([1, 2, 3]);
+     * // => true
+     *
+     * _.isArray(function() { return arguments; }());
+     * // => false
+     */
+    var isArray = nativeIsArray || function(value) {
+      return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;
+    };
+
+    /**
+     * Checks if `value` is classified as a boolean primitive or object.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+     * @example
+     *
+     * _.isBoolean(false);
+     * // => true
+     *
+     * _.isBoolean(null);
+     * // => false
+     */
+    function isBoolean(value) {
+      return value === true || value === false || (isObjectLike(value) && objToString.call(value) == boolTag);
+    }
+
+    /**
+     * Checks if `value` is classified as a `Date` object.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+     * @example
+     *
+     * _.isDate(new Date);
+     * // => true
+     *
+     * _.isDate('Mon April 23 2012');
+     * // => false
+     */
+    function isDate(value) {
+      return isObjectLike(value) && objToString.call(value) == dateTag;
+    }
+
+    /**
+     * Checks if `value` is a DOM element.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
+     * @example
+     *
+     * _.isElement(document.body);
+     * // => true
+     *
+     * _.isElement('<body>');
+     * // => false
+     */
+    function isElement(value) {
+      return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);
+    }
+
+    /**
+     * Checks if `value` is empty. A value is considered empty unless it's an
+     * `arguments` object, array, string, or jQuery-like collection with a length
+     * greater than `0` or an object with own enumerable properties.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {Array|Object|string} value The value to inspect.
+     * @returns {boolean} Returns `true` if `value` is empty, else `false`.
+     * @example
+     *
+     * _.isEmpty(null);
+     * // => true
+     *
+     * _.isEmpty(true);
+     * // => true
+     *
+     * _.isEmpty(1);
+     * // => true
+     *
+     * _.isEmpty([1, 2, 3]);
+     * // => false
+     *
+     * _.isEmpty({ 'a': 1 });
+     * // => false
+     */
+    function isEmpty(value) {
+      if (value == null) {
+        return true;
+      }
+      if (isArrayLike(value) && (isArray(value) || isString(value) || isArguments(value) ||
+          (isObjectLike(value) && isFunction(value.splice)))) {
+        return !value.length;
+      }
+      return !keys(value).length;
+    }
+
+    /**
+     * Performs a deep comparison between two values to determine if they are
+     * equivalent. If `customizer` is provided it's invoked to compare values.
+     * If `customizer` returns `undefined` comparisons are handled by the method
+     * instead. The `customizer` is bound to `thisArg` and invoked with up to
+     * three arguments: (value, other [, index|key]).
+     *
+     * **Note:** This method supports comparing arrays, booleans, `Date` objects,
+     * numbers, `Object` objects, regexes, and strings. Objects are compared by
+     * their own, not inherited, enumerable properties. Functions and DOM nodes
+     * are **not** supported. Provide a customizer function to extend support
+     * for comparing other values.
+     *
+     * @static
+     * @memberOf _
+     * @alias eq
+     * @category Lang
+     * @param {*} value The value to compare.
+     * @param {*} other The other value to compare.
+     * @param {Function} [customizer] The function to customize value comparisons.
+     * @param {*} [thisArg] The `this` binding of `customizer`.
+     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+     * @example
+     *
+     * var object = { 'user': 'fred' };
+     * var other = { 'user': 'fred' };
+     *
+     * object == other;
+     * // => false
+     *
+     * _.isEqual(object, other);
+     * // => true
+     *
+     * // using a customizer callback
+     * var array = ['hello', 'goodbye'];
+     * var other = ['hi', 'goodbye'];
+     *
+     * _.isEqual(array, other, function(value, other) {
+     *   if (_.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/)) {
+     *     return true;
+     *   }
+     * });
+     * // => true
+     */
+    function isEqual(value, other, customizer, thisArg) {
+      customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;
+      var result = customizer ? customizer(value, other) : undefined;
+      return  result === undefined ? baseIsEqual(value, other, customizer) : !!result;
+    }
+
+    /**
+     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
+     * `SyntaxError`, `TypeError`, or `URIError` object.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
+     * @example
+     *
+     * _.isError(new Error);
+     * // => true
+     *
+     * _.isError(Error);
+     * // => false
+     */
+    function isError(value) {
+      return isObjectLike(value) && typeof value.message == 'string' && objToString.call(value) == errorTag;
+    }
+
+    /**
+     * Checks if `value` is a finite primitive number.
+     *
+     * **Note:** This method is based on [`Number.isFinite`](http://ecma-international.org/ecma-262/6.0/#sec-number.isfinite).
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
+     * @example
+     *
+     * _.isFinite(10);
+     * // => true
+     *
+     * _.isFinite('10');
+     * // => false
+     *
+     * _.isFinite(true);
+     * // => false
+     *
+     * _.isFinite(Object(10));
+     * // => false
+     *
+     * _.isFinite(Infinity);
+     * // => false
+     */
+    function isFinite(value) {
+      return typeof value == 'number' && nativeIsFinite(value);
+    }
+
+    /**
+     * Checks if `value` is classified as a `Function` object.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+     * @example
+     *
+     * _.isFunction(_);
+     * // => true
+     *
+     * _.isFunction(/abc/);
+     * // => false
+     */
+    function isFunction(value) {
+      // The use of `Object#toString` avoids issues with the `typeof` operator
+      // in older versions of Chrome and Safari which return 'function' for regexes
+      // and Safari 8 which returns 'object' for typed array constructors.
+      return isObject(value) && objToString.call(value) == funcTag;
+    }
+
+    /**
+     * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+     * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+     * @example
+     *
+     * _.isObject({});
+     * // => true
+     *
+     * _.isObject([1, 2, 3]);
+     * // => true
+     *
+     * _.isObject(1);
+     * // => false
+     */
+    function isObject(value) {
+      // Avoid a V8 JIT bug in Chrome 19-20.
+      // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+      var type = typeof value;
+      return !!value && (type == 'object' || type == 'function');
+    }
+
+    /**
+     * Performs a deep comparison between `object` and `source` to determine if
+     * `object` contains equivalent property values. If `customizer` is provided
+     * it's invoked to compare values. If `customizer` returns `undefined`
+     * comparisons are handled by the method instead. The `customizer` is bound
+     * to `thisArg` and invoked with three arguments: (value, other, index|key).
+     *
+     * **Note:** This method supports comparing properties of arrays, booleans,
+     * `Date` objects, numbers, `Object` objects, regexes, and strings. Functions
+     * and DOM nodes are **not** supported. Provide a customizer function to extend
+     * support for comparing other values.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {Object} object The object to inspect.
+     * @param {Object} source The object of property values to match.
+     * @param {Function} [customizer] The function to customize value comparisons.
+     * @param {*} [thisArg] The `this` binding of `customizer`.
+     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+     * @example
+     *
+     * var object = { 'user': 'fred', 'age': 40 };
+     *
+     * _.isMatch(object, { 'age': 40 });
+     * // => true
+     *
+     * _.isMatch(object, { 'age': 36 });
+     * // => false
+     *
+     * // using a customizer callback
+     * var object = { 'greeting': 'hello' };
+     * var source = { 'greeting': 'hi' };
+     *
+     * _.isMatch(object, source, function(value, other) {
+     *   return _.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/) || undefined;
+     * });
+     * // => true
+     */
+    function isMatch(object, source, customizer, thisArg) {
+      customizer = typeof customizer == 'function' ? bindCallback(customizer, thisArg, 3) : undefined;
+      return baseIsMatch(object, getMatchData(source), customizer);
+    }
+
+    /**
+     * Checks if `value` is `NaN`.
+     *
+     * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4)
+     * which returns `true` for `undefined` and other non-numeric values.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
+     * @example
+     *
+     * _.isNaN(NaN);
+     * // => true
+     *
+     * _.isNaN(new Number(NaN));
+     * // => true
+     *
+     * isNaN(undefined);
+     * // => true
+     *
+     * _.isNaN(undefined);
+     * // => false
+     */
+    function isNaN(value) {
+      // An `NaN` primitive is the only value that is not equal to itself.
+      // Perform the `toStringTag` check first to avoid errors with some host objects in IE.
+      return isNumber(value) && value != +value;
+    }
+
+    /**
+     * Checks if `value` is a native function.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+     * @example
+     *
+     * _.isNative(Array.prototype.push);
+     * // => true
+     *
+     * _.isNative(_);
+     * // => false
+     */
+    function isNative(value) {
+      if (value == null) {
+        return false;
+      }
+      if (isFunction(value)) {
+        return reIsNative.test(fnToString.call(value));
+      }
+      return isObjectLike(value) && reIsHostCtor.test(value);
+    }
+
+    /**
+     * Checks if `value` is `null`.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
+     * @example
+     *
+     * _.isNull(null);
+     * // => true
+     *
+     * _.isNull(void 0);
+     * // => false
+     */
+    function isNull(value) {
+      return value === null;
+    }
+
+    /**
+     * Checks if `value` is classified as a `Number` primitive or object.
+     *
+     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified
+     * as numbers, use the `_.isFinite` method.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+     * @example
+     *
+     * _.isNumber(8.4);
+     * // => true
+     *
+     * _.isNumber(NaN);
+     * // => true
+     *
+     * _.isNumber('8.4');
+     * // => false
+     */
+    function isNumber(value) {
+      return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag);
+    }
+
+    /**
+     * Checks if `value` is a plain object, that is, an object created by the
+     * `Object` constructor or one with a `[[Prototype]]` of `null`.
+     *
+     * **Note:** This method assumes objects created by the `Object` constructor
+     * have no inherited enumerable properties.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
+     * @example
+     *
+     * function Foo() {
+     *   this.a = 1;
+     * }
+     *
+     * _.isPlainObject(new Foo);
+     * // => false
+     *
+     * _.isPlainObject([1, 2, 3]);
+     * // => false
+     *
+     * _.isPlainObject({ 'x': 0, 'y': 0 });
+     * // => true
+     *
+     * _.isPlainObject(Object.create(null));
+     * // => true
+     */
+    function isPlainObject(value) {
+      var Ctor;
+
+      // Exit early for non `Object` objects.
+      if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isArguments(value)) ||
+          (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {
+        return false;
+      }
+      // IE < 9 iterates inherited properties before own properties. If the first
+      // iterated property is an object's own property then there are no inherited
+      // enumerable properties.
+      var result;
+      // In most environments an object's own properties are iterated before
+      // its inherited properties. If the last iterated property is an object's
+      // own property then there are no inherited enumerable properties.
+      baseForIn(value, function(subValue, key) {
+        result = key;
+      });
+      return result === undefined || hasOwnProperty.call(value, result);
+    }
+
+    /**
+     * Checks if `value` is classified as a `RegExp` object.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+     * @example
+     *
+     * _.isRegExp(/abc/);
+     * // => true
+     *
+     * _.isRegExp('/abc/');
+     * // => false
+     */
+    function isRegExp(value) {
+      return isObject(value) && objToString.call(value) == regexpTag;
+    }
+
+    /**
+     * Checks if `value` is classified as a `String` primitive or object.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+     * @example
+     *
+     * _.isString('abc');
+     * // => true
+     *
+     * _.isString(1);
+     * // => false
+     */
+    function isString(value) {
+      return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);
+    }
+
+    /**
+     * Checks if `value` is classified as a typed array.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+     * @example
+     *
+     * _.isTypedArray(new Uint8Array);
+     * // => true
+     *
+     * _.isTypedArray([]);
+     * // => false
+     */
+    function isTypedArray(value) {
+      return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];
+    }
+
+    /**
+     * Checks if `value` is `undefined`.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to check.
+     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
+     * @example
+     *
+     * _.isUndefined(void 0);
+     * // => true
+     *
+     * _.isUndefined(null);
+     * // => false
+     */
+    function isUndefined(value) {
+      return value === undefined;
+    }
+
+    /**
+     * Checks if `value` is less than `other`.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to compare.
+     * @param {*} other The other value to compare.
+     * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`.
+     * @example
+     *
+     * _.lt(1, 3);
+     * // => true
+     *
+     * _.lt(3, 3);
+     * // => false
+     *
+     * _.lt(3, 1);
+     * // => false
+     */
+    function lt(value, other) {
+      return value < other;
+    }
+
+    /**
+     * Checks if `value` is less than or equal to `other`.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to compare.
+     * @param {*} other The other value to compare.
+     * @returns {boolean} Returns `true` if `value` is less than or equal to `other`, else `false`.
+     * @example
+     *
+     * _.lte(1, 3);
+     * // => true
+     *
+     * _.lte(3, 3);
+     * // => true
+     *
+     * _.lte(3, 1);
+     * // => false
+     */
+    function lte(value, other) {
+      return value <= other;
+    }
+
+    /**
+     * Converts `value` to an array.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to convert.
+     * @returns {Array} Returns the converted array.
+     * @example
+     *
+     * (function() {
+     *   return _.toArray(arguments).slice(1);
+     * }(1, 2, 3));
+     * // => [2, 3]
+     */
+    function toArray(value) {
+      var length = value ? getLength(value) : 0;
+      if (!isLength(length)) {
+        return values(value);
+      }
+      if (!length) {
+        return [];
+      }
+      return arrayCopy(value);
+    }
+
+    /**
+     * Converts `value` to a plain object flattening inherited enumerable
+     * properties of `value` to own properties of the plain object.
+     *
+     * @static
+     * @memberOf _
+     * @category Lang
+     * @param {*} value The value to convert.
+     * @returns {Object} Returns the converted plain object.
+     * @example
+     *
+     * function Foo() {
+     *   this.b = 2;
+     * }
+     *
+     * Foo.prototype.c = 3;
+     *
+     * _.assign({ 'a': 1 }, new Foo);
+     * // => { 'a': 1, 'b': 2 }
+     *
+     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
+     * // => { 'a': 1, 'b': 2, 'c': 3 }
+     */
+    function toPlainObject(value) {
+      return baseCopy(value, keysIn(value));
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Recursively merges own enumerable properties of the source object(s), that
+     * don't resolve to `undefined` into the destination object. Subsequent sources
+     * overwrite property assignments of previous sources. If `customizer` is
+     * provided it's invoked to produce the merged values of the destination and
+     * source properties. If `customizer` returns `undefined` merging is handled
+     * by the method instead. The `customizer` is bound to `thisArg` and invoked
+     * with five arguments: (objectValue, sourceValue, key, object, source).
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The destination object.
+     * @param {...Object} [sources] The source objects.
+     * @param {Function} [customizer] The function to customize assigned values.
+     * @param {*} [thisArg] The `this` binding of `customizer`.
+     * @returns {Object} Returns `object`.
+     * @example
+     *
+     * var users = {
+     *   'data': [{ 'user': 'barney' }, { 'user': 'fred' }]
+     * };
+     *
+     * var ages = {
+     *   'data': [{ 'age': 36 }, { 'age': 40 }]
+     * };
+     *
+     * _.merge(users, ages);
+     * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
+     *
+     * // using a customizer callback
+     * var object = {
+     *   'fruits': ['apple'],
+     *   'vegetables': ['beet']
+     * };
+     *
+     * var other = {
+     *   'fruits': ['banana'],
+     *   'vegetables': ['carrot']
+     * };
+     *
+     * _.merge(object, other, function(a, b) {
+     *   if (_.isArray(a)) {
+     *     return a.concat(b);
+     *   }
+     * });
+     * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }
+     */
+    var merge = createAssigner(baseMerge);
+
+    /**
+     * Assigns own enumerable properties of source object(s) to the destination
+     * object. Subsequent sources overwrite property assignments of previous sources.
+     * If `customizer` is provided it's invoked to produce the assigned values.
+     * The `customizer` is bound to `thisArg` and invoked with five arguments:
+     * (objectValue, sourceValue, key, object, source).
+     *
+     * **Note:** This method mutates `object` and is based on
+     * [`Object.assign`](http://ecma-international.org/ecma-262/6.0/#sec-object.assign).
+     *
+     * @static
+     * @memberOf _
+     * @alias extend
+     * @category Object
+     * @param {Object} object The destination object.
+     * @param {...Object} [sources] The source objects.
+     * @param {Function} [customizer] The function to customize assigned values.
+     * @param {*} [thisArg] The `this` binding of `customizer`.
+     * @returns {Object} Returns `object`.
+     * @example
+     *
+     * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });
+     * // => { 'user': 'fred', 'age': 40 }
+     *
+     * // using a customizer callback
+     * var defaults = _.partialRight(_.assign, function(value, other) {
+     *   return _.isUndefined(value) ? other : value;
+     * });
+     *
+     * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
+     * // => { 'user': 'barney', 'age': 36 }
+     */
+    var assign = createAssigner(function(object, source, customizer) {
+      return customizer
+        ? assignWith(object, source, customizer)
+        : baseAssign(object, source);
+    });
+
+    /**
+     * Creates an object that inherits from the given `prototype` object. If a
+     * `properties` object is provided its own enumerable properties are assigned
+     * to the created object.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} prototype The object to inherit from.
+     * @param {Object} [properties] The properties to assign to the object.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {Object} Returns the new object.
+     * @example
+     *
+     * function Shape() {
+     *   this.x = 0;
+     *   this.y = 0;
+     * }
+     *
+     * function Circle() {
+     *   Shape.call(this);
+     * }
+     *
+     * Circle.prototype = _.create(Shape.prototype, {
+     *   'constructor': Circle
+     * });
+     *
+     * var circle = new Circle;
+     * circle instanceof Circle;
+     * // => true
+     *
+     * circle instanceof Shape;
+     * // => true
+     */
+    function create(prototype, properties, guard) {
+      var result = baseCreate(prototype);
+      if (guard && isIterateeCall(prototype, properties, guard)) {
+        properties = undefined;
+      }
+      return properties ? baseAssign(result, properties) : result;
+    }
+
+    /**
+     * Assigns own enumerable properties of source object(s) to the destination
+     * object for all destination properties that resolve to `undefined`. Once a
+     * property is set, additional values of the same property are ignored.
+     *
+     * **Note:** This method mutates `object`.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The destination object.
+     * @param {...Object} [sources] The source objects.
+     * @returns {Object} Returns `object`.
+     * @example
+     *
+     * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
+     * // => { 'user': 'barney', 'age': 36 }
+     */
+    var defaults = createDefaults(assign, assignDefaults);
+
+    /**
+     * This method is like `_.defaults` except that it recursively assigns
+     * default properties.
+     *
+     * **Note:** This method mutates `object`.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The destination object.
+     * @param {...Object} [sources] The source objects.
+     * @returns {Object} Returns `object`.
+     * @example
+     *
+     * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } });
+     * // => { 'user': { 'name': 'barney', 'age': 36 } }
+     *
+     */
+    var defaultsDeep = createDefaults(merge, mergeDefaults);
+
+    /**
+     * This method is like `_.find` except that it returns the key of the first
+     * element `predicate` returns truthy for instead of the element itself.
+     *
+     * If a property name is provided for `predicate` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `predicate` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to search.
+     * @param {Function|Object|string} [predicate=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {string|undefined} Returns the key of the matched element, else `undefined`.
+     * @example
+     *
+     * var users = {
+     *   'barney':  { 'age': 36, 'active': true },
+     *   'fred':    { 'age': 40, 'active': false },
+     *   'pebbles': { 'age': 1,  'active': true }
+     * };
+     *
+     * _.findKey(users, function(chr) {
+     *   return chr.age < 40;
+     * });
+     * // => 'barney' (iteration order is not guaranteed)
+     *
+     * // using the `_.matches` callback shorthand
+     * _.findKey(users, { 'age': 1, 'active': true });
+     * // => 'pebbles'
+     *
+     * // using the `_.matchesProperty` callback shorthand
+     * _.findKey(users, 'active', false);
+     * // => 'fred'
+     *
+     * // using the `_.property` callback shorthand
+     * _.findKey(users, 'active');
+     * // => 'barney'
+     */
+    var findKey = createFindKey(baseForOwn);
+
+    /**
+     * This method is like `_.findKey` except that it iterates over elements of
+     * a collection in the opposite order.
+     *
+     * If a property name is provided for `predicate` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `predicate` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to search.
+     * @param {Function|Object|string} [predicate=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {string|undefined} Returns the key of the matched element, else `undefined`.
+     * @example
+     *
+     * var users = {
+     *   'barney':  { 'age': 36, 'active': true },
+     *   'fred':    { 'age': 40, 'active': false },
+     *   'pebbles': { 'age': 1,  'active': true }
+     * };
+     *
+     * _.findLastKey(users, function(chr) {
+     *   return chr.age < 40;
+     * });
+     * // => returns `pebbles` assuming `_.findKey` returns `barney`
+     *
+     * // using the `_.matches` callback shorthand
+     * _.findLastKey(users, { 'age': 36, 'active': true });
+     * // => 'barney'
+     *
+     * // using the `_.matchesProperty` callback shorthand
+     * _.findLastKey(users, 'active', false);
+     * // => 'fred'
+     *
+     * // using the `_.property` callback shorthand
+     * _.findLastKey(users, 'active');
+     * // => 'pebbles'
+     */
+    var findLastKey = createFindKey(baseForOwnRight);
+
+    /**
+     * Iterates over own and inherited enumerable properties of an object invoking
+     * `iteratee` for each property. The `iteratee` is bound to `thisArg` and invoked
+     * with three arguments: (value, key, object). Iteratee functions may exit
+     * iteration early by explicitly returning `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to iterate over.
+     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {Object} Returns `object`.
+     * @example
+     *
+     * function Foo() {
+     *   this.a = 1;
+     *   this.b = 2;
+     * }
+     *
+     * Foo.prototype.c = 3;
+     *
+     * _.forIn(new Foo, function(value, key) {
+     *   console.log(key);
+     * });
+     * // => logs 'a', 'b', and 'c' (iteration order is not guaranteed)
+     */
+    var forIn = createForIn(baseFor);
+
+    /**
+     * This method is like `_.forIn` except that it iterates over properties of
+     * `object` in the opposite order.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to iterate over.
+     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {Object} Returns `object`.
+     * @example
+     *
+     * function Foo() {
+     *   this.a = 1;
+     *   this.b = 2;
+     * }
+     *
+     * Foo.prototype.c = 3;
+     *
+     * _.forInRight(new Foo, function(value, key) {
+     *   console.log(key);
+     * });
+     * // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c'
+     */
+    var forInRight = createForIn(baseForRight);
+
+    /**
+     * Iterates over own enumerable properties of an object invoking `iteratee`
+     * for each property. The `iteratee` is bound to `thisArg` and invoked with
+     * three arguments: (value, key, object). Iteratee functions may exit iteration
+     * early by explicitly returning `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to iterate over.
+     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {Object} Returns `object`.
+     * @example
+     *
+     * function Foo() {
+     *   this.a = 1;
+     *   this.b = 2;
+     * }
+     *
+     * Foo.prototype.c = 3;
+     *
+     * _.forOwn(new Foo, function(value, key) {
+     *   console.log(key);
+     * });
+     * // => logs 'a' and 'b' (iteration order is not guaranteed)
+     */
+    var forOwn = createForOwn(baseForOwn);
+
+    /**
+     * This method is like `_.forOwn` except that it iterates over properties of
+     * `object` in the opposite order.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to iterate over.
+     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {Object} Returns `object`.
+     * @example
+     *
+     * function Foo() {
+     *   this.a = 1;
+     *   this.b = 2;
+     * }
+     *
+     * Foo.prototype.c = 3;
+     *
+     * _.forOwnRight(new Foo, function(value, key) {
+     *   console.log(key);
+     * });
+     * // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b'
+     */
+    var forOwnRight = createForOwn(baseForOwnRight);
+
+    /**
+     * Creates an array of function property names from all enumerable properties,
+     * own and inherited, of `object`.
+     *
+     * @static
+     * @memberOf _
+     * @alias methods
+     * @category Object
+     * @param {Object} object The object to inspect.
+     * @returns {Array} Returns the new array of property names.
+     * @example
+     *
+     * _.functions(_);
+     * // => ['after', 'ary', 'assign', ...]
+     */
+    function functions(object) {
+      return baseFunctions(object, keysIn(object));
+    }
+
+    /**
+     * Gets the property value at `path` of `object`. If the resolved value is
+     * `undefined` the `defaultValue` is used in its place.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to query.
+     * @param {Array|string} path The path of the property to get.
+     * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.
+     * @returns {*} Returns the resolved value.
+     * @example
+     *
+     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+     *
+     * _.get(object, 'a[0].b.c');
+     * // => 3
+     *
+     * _.get(object, ['a', '0', 'b', 'c']);
+     * // => 3
+     *
+     * _.get(object, 'a.b.c', 'default');
+     * // => 'default'
+     */
+    function get(object, path, defaultValue) {
+      var result = object == null ? undefined : baseGet(object, toPath(path), (path + ''));
+      return result === undefined ? defaultValue : result;
+    }
+
+    /**
+     * Checks if `path` is a direct property.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to query.
+     * @param {Array|string} path The path to check.
+     * @returns {boolean} Returns `true` if `path` is a direct property, else `false`.
+     * @example
+     *
+     * var object = { 'a': { 'b': { 'c': 3 } } };
+     *
+     * _.has(object, 'a');
+     * // => true
+     *
+     * _.has(object, 'a.b.c');
+     * // => true
+     *
+     * _.has(object, ['a', 'b', 'c']);
+     * // => true
+     */
+    function has(object, path) {
+      if (object == null) {
+        return false;
+      }
+      var result = hasOwnProperty.call(object, path);
+      if (!result && !isKey(path)) {
+        path = toPath(path);
+        object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
+        if (object == null) {
+          return false;
+        }
+        path = last(path);
+        result = hasOwnProperty.call(object, path);
+      }
+      return result || (isLength(object.length) && isIndex(path, object.length) &&
+        (isArray(object) || isArguments(object)));
+    }
+
+    /**
+     * Creates an object composed of the inverted keys and values of `object`.
+     * If `object` contains duplicate values, subsequent values overwrite property
+     * assignments of previous values unless `multiValue` is `true`.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to invert.
+     * @param {boolean} [multiValue] Allow multiple values per key.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {Object} Returns the new inverted object.
+     * @example
+     *
+     * var object = { 'a': 1, 'b': 2, 'c': 1 };
+     *
+     * _.invert(object);
+     * // => { '1': 'c', '2': 'b' }
+     *
+     * // with `multiValue`
+     * _.invert(object, true);
+     * // => { '1': ['a', 'c'], '2': ['b'] }
+     */
+    function invert(object, multiValue, guard) {
+      if (guard && isIterateeCall(object, multiValue, guard)) {
+        multiValue = undefined;
+      }
+      var index = -1,
+          props = keys(object),
+          length = props.length,
+          result = {};
+
+      while (++index < length) {
+        var key = props[index],
+            value = object[key];
+
+        if (multiValue) {
+          if (hasOwnProperty.call(result, value)) {
+            result[value].push(key);
+          } else {
+            result[value] = [key];
+          }
+        }
+        else {
+          result[value] = key;
+        }
+      }
+      return result;
+    }
+
+    /**
+     * Creates an array of the own enumerable property names of `object`.
+     *
+     * **Note:** Non-object values are coerced to objects. See the
+     * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)
+     * for more details.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of property names.
+     * @example
+     *
+     * function Foo() {
+     *   this.a = 1;
+     *   this.b = 2;
+     * }
+     *
+     * Foo.prototype.c = 3;
+     *
+     * _.keys(new Foo);
+     * // => ['a', 'b'] (iteration order is not guaranteed)
+     *
+     * _.keys('hi');
+     * // => ['0', '1']
+     */
+    var keys = !nativeKeys ? shimKeys : function(object) {
+      var Ctor = object == null ? undefined : object.constructor;
+      if ((typeof Ctor == 'function' && Ctor.prototype === object) ||
+          (typeof object != 'function' && isArrayLike(object))) {
+        return shimKeys(object);
+      }
+      return isObject(object) ? nativeKeys(object) : [];
+    };
+
+    /**
+     * Creates an array of the own and inherited enumerable property names of `object`.
+     *
+     * **Note:** Non-object values are coerced to objects.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of property names.
+     * @example
+     *
+     * function Foo() {
+     *   this.a = 1;
+     *   this.b = 2;
+     * }
+     *
+     * Foo.prototype.c = 3;
+     *
+     * _.keysIn(new Foo);
+     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
+     */
+    function keysIn(object) {
+      if (object == null) {
+        return [];
+      }
+      if (!isObject(object)) {
+        object = Object(object);
+      }
+      var length = object.length;
+      length = (length && isLength(length) &&
+        (isArray(object) || isArguments(object)) && length) || 0;
+
+      var Ctor = object.constructor,
+          index = -1,
+          isProto = typeof Ctor == 'function' && Ctor.prototype === object,
+          result = Array(length),
+          skipIndexes = length > 0;
+
+      while (++index < length) {
+        result[index] = (index + '');
+      }
+      for (var key in object) {
+        if (!(skipIndexes && isIndex(key, length)) &&
+            !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
+          result.push(key);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * The opposite of `_.mapValues`; this method creates an object with the
+     * same values as `object` and keys generated by running each own enumerable
+     * property of `object` through `iteratee`.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to iterate over.
+     * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {Object} Returns the new mapped object.
+     * @example
+     *
+     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
+     *   return key + value;
+     * });
+     * // => { 'a1': 1, 'b2': 2 }
+     */
+    var mapKeys = createObjectMapper(true);
+
+    /**
+     * Creates an object with the same keys as `object` and values generated by
+     * running each own enumerable property of `object` through `iteratee`. The
+     * iteratee function is bound to `thisArg` and invoked with three arguments:
+     * (value, key, object).
+     *
+     * If a property name is provided for `iteratee` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `iteratee` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to iterate over.
+     * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+     *  per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {Object} Returns the new mapped object.
+     * @example
+     *
+     * _.mapValues({ 'a': 1, 'b': 2 }, function(n) {
+     *   return n * 3;
+     * });
+     * // => { 'a': 3, 'b': 6 }
+     *
+     * var users = {
+     *   'fred':    { 'user': 'fred',    'age': 40 },
+     *   'pebbles': { 'user': 'pebbles', 'age': 1 }
+     * };
+     *
+     * // using the `_.property` callback shorthand
+     * _.mapValues(users, 'age');
+     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
+     */
+    var mapValues = createObjectMapper();
+
+    /**
+     * The opposite of `_.pick`; this method creates an object composed of the
+     * own and inherited enumerable properties of `object` that are not omitted.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The source object.
+     * @param {Function|...(string|string[])} [predicate] The function invoked per
+     *  iteration or property names to omit, specified as individual property
+     *  names or arrays of property names.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {Object} Returns the new object.
+     * @example
+     *
+     * var object = { 'user': 'fred', 'age': 40 };
+     *
+     * _.omit(object, 'age');
+     * // => { 'user': 'fred' }
+     *
+     * _.omit(object, _.isNumber);
+     * // => { 'user': 'fred' }
+     */
+    var omit = restParam(function(object, props) {
+      if (object == null) {
+        return {};
+      }
+      if (typeof props[0] != 'function') {
+        var props = arrayMap(baseFlatten(props), String);
+        return pickByArray(object, baseDifference(keysIn(object), props));
+      }
+      var predicate = bindCallback(props[0], props[1], 3);
+      return pickByCallback(object, function(value, key, object) {
+        return !predicate(value, key, object);
+      });
+    });
+
+    /**
+     * Creates a two dimensional array of the key-value pairs for `object`,
+     * e.g. `[[key1, value1], [key2, value2]]`.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the new array of key-value pairs.
+     * @example
+     *
+     * _.pairs({ 'barney': 36, 'fred': 40 });
+     * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed)
+     */
+    function pairs(object) {
+      object = toObject(object);
+
+      var index = -1,
+          props = keys(object),
+          length = props.length,
+          result = Array(length);
+
+      while (++index < length) {
+        var key = props[index];
+        result[index] = [key, object[key]];
+      }
+      return result;
+    }
+
+    /**
+     * Creates an object composed of the picked `object` properties. Property
+     * names may be specified as individual arguments or as arrays of property
+     * names. If `predicate` is provided it's invoked for each property of `object`
+     * picking the properties `predicate` returns truthy for. The predicate is
+     * bound to `thisArg` and invoked with three arguments: (value, key, object).
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The source object.
+     * @param {Function|...(string|string[])} [predicate] The function invoked per
+     *  iteration or property names to pick, specified as individual property
+     *  names or arrays of property names.
+     * @param {*} [thisArg] The `this` binding of `predicate`.
+     * @returns {Object} Returns the new object.
+     * @example
+     *
+     * var object = { 'user': 'fred', 'age': 40 };
+     *
+     * _.pick(object, 'user');
+     * // => { 'user': 'fred' }
+     *
+     * _.pick(object, _.isString);
+     * // => { 'user': 'fred' }
+     */
+    var pick = restParam(function(object, props) {
+      if (object == null) {
+        return {};
+      }
+      return typeof props[0] == 'function'
+        ? pickByCallback(object, bindCallback(props[0], props[1], 3))
+        : pickByArray(object, baseFlatten(props));
+    });
+
+    /**
+     * This method is like `_.get` except that if the resolved value is a function
+     * it's invoked with the `this` binding of its parent object and its result
+     * is returned.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to query.
+     * @param {Array|string} path The path of the property to resolve.
+     * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.
+     * @returns {*} Returns the resolved value.
+     * @example
+     *
+     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
+     *
+     * _.result(object, 'a[0].b.c1');
+     * // => 3
+     *
+     * _.result(object, 'a[0].b.c2');
+     * // => 4
+     *
+     * _.result(object, 'a.b.c', 'default');
+     * // => 'default'
+     *
+     * _.result(object, 'a.b.c', _.constant('default'));
+     * // => 'default'
+     */
+    function result(object, path, defaultValue) {
+      var result = object == null ? undefined : object[path];
+      if (result === undefined) {
+        if (object != null && !isKey(path, object)) {
+          path = toPath(path);
+          object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
+          result = object == null ? undefined : object[last(path)];
+        }
+        result = result === undefined ? defaultValue : result;
+      }
+      return isFunction(result) ? result.call(object) : result;
+    }
+
+    /**
+     * Sets the property value of `path` on `object`. If a portion of `path`
+     * does not exist it's created.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to augment.
+     * @param {Array|string} path The path of the property to set.
+     * @param {*} value The value to set.
+     * @returns {Object} Returns `object`.
+     * @example
+     *
+     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+     *
+     * _.set(object, 'a[0].b.c', 4);
+     * console.log(object.a[0].b.c);
+     * // => 4
+     *
+     * _.set(object, 'x[0].y.z', 5);
+     * console.log(object.x[0].y.z);
+     * // => 5
+     */
+    function set(object, path, value) {
+      if (object == null) {
+        return object;
+      }
+      var pathKey = (path + '');
+      path = (object[pathKey] != null || isKey(path, object)) ? [pathKey] : toPath(path);
+
+      var index = -1,
+          length = path.length,
+          lastIndex = length - 1,
+          nested = object;
+
+      while (nested != null && ++index < length) {
+        var key = path[index];
+        if (isObject(nested)) {
+          if (index == lastIndex) {
+            nested[key] = value;
+          } else if (nested[key] == null) {
+            nested[key] = isIndex(path[index + 1]) ? [] : {};
+          }
+        }
+        nested = nested[key];
+      }
+      return object;
+    }
+
+    /**
+     * An alternative to `_.reduce`; this method transforms `object` to a new
+     * `accumulator` object which is the result of running each of its own enumerable
+     * properties through `iteratee`, with each invocation potentially mutating
+     * the `accumulator` object. The `iteratee` is bound to `thisArg` and invoked
+     * with four arguments: (accumulator, value, key, object). Iteratee functions
+     * may exit iteration early by explicitly returning `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Array|Object} object The object to iterate over.
+     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+     * @param {*} [accumulator] The custom accumulator value.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {*} Returns the accumulated value.
+     * @example
+     *
+     * _.transform([2, 3, 4], function(result, n) {
+     *   result.push(n *= n);
+     *   return n % 2 == 0;
+     * });
+     * // => [4, 9]
+     *
+     * _.transform({ 'a': 1, 'b': 2 }, function(result, n, key) {
+     *   result[key] = n * 3;
+     * });
+     * // => { 'a': 3, 'b': 6 }
+     */
+    function transform(object, iteratee, accumulator, thisArg) {
+      var isArr = isArray(object) || isTypedArray(object);
+      iteratee = getCallback(iteratee, thisArg, 4);
+
+      if (accumulator == null) {
+        if (isArr || isObject(object)) {
+          var Ctor = object.constructor;
+          if (isArr) {
+            accumulator = isArray(object) ? new Ctor : [];
+          } else {
+            accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined);
+          }
+        } else {
+          accumulator = {};
+        }
+      }
+      (isArr ? arrayEach : baseForOwn)(object, function(value, index, object) {
+        return iteratee(accumulator, value, index, object);
+      });
+      return accumulator;
+    }
+
+    /**
+     * Creates an array of the own enumerable property values of `object`.
+     *
+     * **Note:** Non-object values are coerced to objects.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of property values.
+     * @example
+     *
+     * function Foo() {
+     *   this.a = 1;
+     *   this.b = 2;
+     * }
+     *
+     * Foo.prototype.c = 3;
+     *
+     * _.values(new Foo);
+     * // => [1, 2] (iteration order is not guaranteed)
+     *
+     * _.values('hi');
+     * // => ['h', 'i']
+     */
+    function values(object) {
+      return baseValues(object, keys(object));
+    }
+
+    /**
+     * Creates an array of the own and inherited enumerable property values
+     * of `object`.
+     *
+     * **Note:** Non-object values are coerced to objects.
+     *
+     * @static
+     * @memberOf _
+     * @category Object
+     * @param {Object} object The object to query.
+     * @returns {Array} Returns the array of property values.
+     * @example
+     *
+     * function Foo() {
+     *   this.a = 1;
+     *   this.b = 2;
+     * }
+     *
+     * Foo.prototype.c = 3;
+     *
+     * _.valuesIn(new Foo);
+     * // => [1, 2, 3] (iteration order is not guaranteed)
+     */
+    function valuesIn(object) {
+      return baseValues(object, keysIn(object));
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Checks if `n` is between `start` and up to but not including, `end`. If
+     * `end` is not specified it's set to `start` with `start` then set to `0`.
+     *
+     * @static
+     * @memberOf _
+     * @category Number
+     * @param {number} n The number to check.
+     * @param {number} [start=0] The start of the range.
+     * @param {number} end The end of the range.
+     * @returns {boolean} Returns `true` if `n` is in the range, else `false`.
+     * @example
+     *
+     * _.inRange(3, 2, 4);
+     * // => true
+     *
+     * _.inRange(4, 8);
+     * // => true
+     *
+     * _.inRange(4, 2);
+     * // => false
+     *
+     * _.inRange(2, 2);
+     * // => false
+     *
+     * _.inRange(1.2, 2);
+     * // => true
+     *
+     * _.inRange(5.2, 4);
+     * // => false
+     */
+    function inRange(value, start, end) {
+      start = +start || 0;
+      if (end === undefined) {
+        end = start;
+        start = 0;
+      } else {
+        end = +end || 0;
+      }
+      return value >= nativeMin(start, end) && value < nativeMax(start, end);
+    }
+
+    /**
+     * Produces a random number between `min` and `max` (inclusive). If only one
+     * argument is provided a number between `0` and the given number is returned.
+     * If `floating` is `true`, or either `min` or `max` are floats, a floating-point
+     * number is returned instead of an integer.
+     *
+     * @static
+     * @memberOf _
+     * @category Number
+     * @param {number} [min=0] The minimum possible value.
+     * @param {number} [max=1] The maximum possible value.
+     * @param {boolean} [floating] Specify returning a floating-point number.
+     * @returns {number} Returns the random number.
+     * @example
+     *
+     * _.random(0, 5);
+     * // => an integer between 0 and 5
+     *
+     * _.random(5);
+     * // => also an integer between 0 and 5
+     *
+     * _.random(5, true);
+     * // => a floating-point number between 0 and 5
+     *
+     * _.random(1.2, 5.2);
+     * // => a floating-point number between 1.2 and 5.2
+     */
+    function random(min, max, floating) {
+      if (floating && isIterateeCall(min, max, floating)) {
+        max = floating = undefined;
+      }
+      var noMin = min == null,
+          noMax = max == null;
+
+      if (floating == null) {
+        if (noMax && typeof min == 'boolean') {
+          floating = min;
+          min = 1;
+        }
+        else if (typeof max == 'boolean') {
+          floating = max;
+          noMax = true;
+        }
+      }
+      if (noMin && noMax) {
+        max = 1;
+        noMax = false;
+      }
+      min = +min || 0;
+      if (noMax) {
+        max = min;
+        min = 0;
+      } else {
+        max = +max || 0;
+      }
+      if (floating || min % 1 || max % 1) {
+        var rand = nativeRandom();
+        return nativeMin(min + (rand * (max - min + parseFloat('1e-' + ((rand + '').length - 1)))), max);
+      }
+      return baseRandom(min, max);
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to convert.
+     * @returns {string} Returns the camel cased string.
+     * @example
+     *
+     * _.camelCase('Foo Bar');
+     * // => 'fooBar'
+     *
+     * _.camelCase('--foo-bar');
+     * // => 'fooBar'
+     *
+     * _.camelCase('__foo_bar__');
+     * // => 'fooBar'
+     */
+    var camelCase = createCompounder(function(result, word, index) {
+      word = word.toLowerCase();
+      return result + (index ? (word.charAt(0).toUpperCase() + word.slice(1)) : word);
+    });
+
+    /**
+     * Capitalizes the first character of `string`.
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to capitalize.
+     * @returns {string} Returns the capitalized string.
+     * @example
+     *
+     * _.capitalize('fred');
+     * // => 'Fred'
+     */
+    function capitalize(string) {
+      string = baseToString(string);
+      return string && (string.charAt(0).toUpperCase() + string.slice(1));
+    }
+
+    /**
+     * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
+     * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to deburr.
+     * @returns {string} Returns the deburred string.
+     * @example
+     *
+     * _.deburr('déjà vu');
+     * // => 'deja vu'
+     */
+    function deburr(string) {
+      string = baseToString(string);
+      return string && string.replace(reLatin1, deburrLetter).replace(reComboMark, '');
+    }
+
+    /**
+     * Checks if `string` ends with the given target string.
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to search.
+     * @param {string} [target] The string to search for.
+     * @param {number} [position=string.length] The position to search from.
+     * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`.
+     * @example
+     *
+     * _.endsWith('abc', 'c');
+     * // => true
+     *
+     * _.endsWith('abc', 'b');
+     * // => false
+     *
+     * _.endsWith('abc', 'b', 2);
+     * // => true
+     */
+    function endsWith(string, target, position) {
+      string = baseToString(string);
+      target = (target + '');
+
+      var length = string.length;
+      position = position === undefined
+        ? length
+        : nativeMin(position < 0 ? 0 : (+position || 0), length);
+
+      position -= target.length;
+      return position >= 0 && string.indexOf(target, position) == position;
+    }
+
+    /**
+     * Converts the characters "&", "<", ">", '"', "'", and "\`", in `string` to
+     * their corresponding HTML entities.
+     *
+     * **Note:** No other characters are escaped. To escape additional characters
+     * use a third-party library like [_he_](https://mths.be/he).
+     *
+     * Though the ">" character is escaped for symmetry, characters like
+     * ">" and "/" don't need escaping in HTML and have no special meaning
+     * unless they're part of a tag or unquoted attribute value.
+     * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
+     * (under "semi-related fun fact") for more details.
+     *
+     * Backticks are escaped because in Internet Explorer < 9, they can break out
+     * of attribute values or HTML comments. See [#59](https://html5sec.org/#59),
+     * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and
+     * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/)
+     * for more details.
+     *
+     * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping)
+     * to reduce XSS vectors.
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to escape.
+     * @returns {string} Returns the escaped string.
+     * @example
+     *
+     * _.escape('fred, barney, & pebbles');
+     * // => 'fred, barney, &amp; pebbles'
+     */
+    function escape(string) {
+      // Reset `lastIndex` because in IE < 9 `String#replace` does not.
+      string = baseToString(string);
+      return (string && reHasUnescapedHtml.test(string))
+        ? string.replace(reUnescapedHtml, escapeHtmlChar)
+        : string;
+    }
+
+    /**
+     * Escapes the `RegExp` special characters "\", "/", "^", "$", ".", "|", "?",
+     * "*", "+", "(", ")", "[", "]", "{" and "}" in `string`.
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to escape.
+     * @returns {string} Returns the escaped string.
+     * @example
+     *
+     * _.escapeRegExp('[lodash](https://lodash.com/)');
+     * // => '\[lodash\]\(https:\/\/lodash\.com\/\)'
+     */
+    function escapeRegExp(string) {
+      string = baseToString(string);
+      return (string && reHasRegExpChars.test(string))
+        ? string.replace(reRegExpChars, escapeRegExpChar)
+        : (string || '(?:)');
+    }
+
+    /**
+     * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to convert.
+     * @returns {string} Returns the kebab cased string.
+     * @example
+     *
+     * _.kebabCase('Foo Bar');
+     * // => 'foo-bar'
+     *
+     * _.kebabCase('fooBar');
+     * // => 'foo-bar'
+     *
+     * _.kebabCase('__foo_bar__');
+     * // => 'foo-bar'
+     */
+    var kebabCase = createCompounder(function(result, word, index) {
+      return result + (index ? '-' : '') + word.toLowerCase();
+    });
+
+    /**
+     * Pads `string` on the left and right sides if it's shorter than `length`.
+     * Padding characters are truncated if they can't be evenly divided by `length`.
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to pad.
+     * @param {number} [length=0] The padding length.
+     * @param {string} [chars=' '] The string used as padding.
+     * @returns {string} Returns the padded string.
+     * @example
+     *
+     * _.pad('abc', 8);
+     * // => '  abc   '
+     *
+     * _.pad('abc', 8, '_-');
+     * // => '_-abc_-_'
+     *
+     * _.pad('abc', 3);
+     * // => 'abc'
+     */
+    function pad(string, length, chars) {
+      string = baseToString(string);
+      length = +length;
+
+      var strLength = string.length;
+      if (strLength >= length || !nativeIsFinite(length)) {
+        return string;
+      }
+      var mid = (length - strLength) / 2,
+          leftLength = nativeFloor(mid),
+          rightLength = nativeCeil(mid);
+
+      chars = createPadding('', rightLength, chars);
+      return chars.slice(0, leftLength) + string + chars;
+    }
+
+    /**
+     * Pads `string` on the left side if it's shorter than `length`. Padding
+     * characters are truncated if they exceed `length`.
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to pad.
+     * @param {number} [length=0] The padding length.
+     * @param {string} [chars=' '] The string used as padding.
+     * @returns {string} Returns the padded string.
+     * @example
+     *
+     * _.padLeft('abc', 6);
+     * // => '   abc'
+     *
+     * _.padLeft('abc', 6, '_-');
+     * // => '_-_abc'
+     *
+     * _.padLeft('abc', 3);
+     * // => 'abc'
+     */
+    var padLeft = createPadDir();
+
+    /**
+     * Pads `string` on the right side if it's shorter than `length`. Padding
+     * characters are truncated if they exceed `length`.
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to pad.
+     * @param {number} [length=0] The padding length.
+     * @param {string} [chars=' '] The string used as padding.
+     * @returns {string} Returns the padded string.
+     * @example
+     *
+     * _.padRight('abc', 6);
+     * // => 'abc   '
+     *
+     * _.padRight('abc', 6, '_-');
+     * // => 'abc_-_'
+     *
+     * _.padRight('abc', 3);
+     * // => 'abc'
+     */
+    var padRight = createPadDir(true);
+
+    /**
+     * Converts `string` to an integer of the specified radix. If `radix` is
+     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal,
+     * in which case a `radix` of `16` is used.
+     *
+     * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#E)
+     * of `parseInt`.
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} string The string to convert.
+     * @param {number} [radix] The radix to interpret `value` by.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {number} Returns the converted integer.
+     * @example
+     *
+     * _.parseInt('08');
+     * // => 8
+     *
+     * _.map(['6', '08', '10'], _.parseInt);
+     * // => [6, 8, 10]
+     */
+    function parseInt(string, radix, guard) {
+      // Firefox < 21 and Opera < 15 follow ES3 for `parseInt`.
+      // Chrome fails to trim leading <BOM> whitespace characters.
+      // See https://code.google.com/p/v8/issues/detail?id=3109 for more details.
+      if (guard ? isIterateeCall(string, radix, guard) : radix == null) {
+        radix = 0;
+      } else if (radix) {
+        radix = +radix;
+      }
+      string = trim(string);
+      return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10));
+    }
+
+    /**
+     * Repeats the given string `n` times.
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to repeat.
+     * @param {number} [n=0] The number of times to repeat the string.
+     * @returns {string} Returns the repeated string.
+     * @example
+     *
+     * _.repeat('*', 3);
+     * // => '***'
+     *
+     * _.repeat('abc', 2);
+     * // => 'abcabc'
+     *
+     * _.repeat('abc', 0);
+     * // => ''
+     */
+    function repeat(string, n) {
+      var result = '';
+      string = baseToString(string);
+      n = +n;
+      if (n < 1 || !string || !nativeIsFinite(n)) {
+        return result;
+      }
+      // Leverage the exponentiation by squaring algorithm for a faster repeat.
+      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
+      do {
+        if (n % 2) {
+          result += string;
+        }
+        n = nativeFloor(n / 2);
+        string += string;
+      } while (n);
+
+      return result;
+    }
+
+    /**
+     * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case).
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to convert.
+     * @returns {string} Returns the snake cased string.
+     * @example
+     *
+     * _.snakeCase('Foo Bar');
+     * // => 'foo_bar'
+     *
+     * _.snakeCase('fooBar');
+     * // => 'foo_bar'
+     *
+     * _.snakeCase('--foo-bar');
+     * // => 'foo_bar'
+     */
+    var snakeCase = createCompounder(function(result, word, index) {
+      return result + (index ? '_' : '') + word.toLowerCase();
+    });
+
+    /**
+     * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to convert.
+     * @returns {string} Returns the start cased string.
+     * @example
+     *
+     * _.startCase('--foo-bar');
+     * // => 'Foo Bar'
+     *
+     * _.startCase('fooBar');
+     * // => 'Foo Bar'
+     *
+     * _.startCase('__foo_bar__');
+     * // => 'Foo Bar'
+     */
+    var startCase = createCompounder(function(result, word, index) {
+      return result + (index ? ' ' : '') + (word.charAt(0).toUpperCase() + word.slice(1));
+    });
+
+    /**
+     * Checks if `string` starts with the given target string.
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to search.
+     * @param {string} [target] The string to search for.
+     * @param {number} [position=0] The position to search from.
+     * @returns {boolean} Returns `true` if `string` starts with `target`, else `false`.
+     * @example
+     *
+     * _.startsWith('abc', 'a');
+     * // => true
+     *
+     * _.startsWith('abc', 'b');
+     * // => false
+     *
+     * _.startsWith('abc', 'b', 1);
+     * // => true
+     */
+    function startsWith(string, target, position) {
+      string = baseToString(string);
+      position = position == null
+        ? 0
+        : nativeMin(position < 0 ? 0 : (+position || 0), string.length);
+
+      return string.lastIndexOf(target, position) == position;
+    }
+
+    /**
+     * Creates a compiled template function that can interpolate data properties
+     * in "interpolate" delimiters, HTML-escape interpolated data properties in
+     * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
+     * properties may be accessed as free variables in the template. If a setting
+     * object is provided it takes precedence over `_.templateSettings` values.
+     *
+     * **Note:** In the development build `_.template` utilizes
+     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
+     * for easier debugging.
+     *
+     * For more information on precompiling templates see
+     * [lodash's custom builds documentation](https://lodash.com/custom-builds).
+     *
+     * For more information on Chrome extension sandboxes see
+     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The template string.
+     * @param {Object} [options] The options object.
+     * @param {RegExp} [options.escape] The HTML "escape" delimiter.
+     * @param {RegExp} [options.evaluate] The "evaluate" delimiter.
+     * @param {Object} [options.imports] An object to import into the template as free variables.
+     * @param {RegExp} [options.interpolate] The "interpolate" delimiter.
+     * @param {string} [options.sourceURL] The sourceURL of the template's compiled source.
+     * @param {string} [options.variable] The data object variable name.
+     * @param- {Object} [otherOptions] Enables the legacy `options` param signature.
+     * @returns {Function} Returns the compiled template function.
+     * @example
+     *
+     * // using the "interpolate" delimiter to create a compiled template
+     * var compiled = _.template('hello <%= user %>!');
+     * compiled({ 'user': 'fred' });
+     * // => 'hello fred!'
+     *
+     * // using the HTML "escape" delimiter to escape data property values
+     * var compiled = _.template('<b><%- value %></b>');
+     * compiled({ 'value': '<script>' });
+     * // => '<b>&lt;script&gt;</b>'
+     *
+     * // using the "evaluate" delimiter to execute JavaScript and generate HTML
+     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
+     * compiled({ 'users': ['fred', 'barney'] });
+     * // => '<li>fred</li><li>barney</li>'
+     *
+     * // using the internal `print` function in "evaluate" delimiters
+     * var compiled = _.template('<% print("hello " + user); %>!');
+     * compiled({ 'user': 'barney' });
+     * // => 'hello barney!'
+     *
+     * // using the ES delimiter as an alternative to the default "interpolate" delimiter
+     * var compiled = _.template('hello ${ user }!');
+     * compiled({ 'user': 'pebbles' });
+     * // => 'hello pebbles!'
+     *
+     * // using custom template delimiters
+     * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
+     * var compiled = _.template('hello {{ user }}!');
+     * compiled({ 'user': 'mustache' });
+     * // => 'hello mustache!'
+     *
+     * // using backslashes to treat delimiters as plain text
+     * var compiled = _.template('<%= "\\<%- value %\\>" %>');
+     * compiled({ 'value': 'ignored' });
+     * // => '<%- value %>'
+     *
+     * // using the `imports` option to import `jQuery` as `jq`
+     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
+     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
+     * compiled({ 'users': ['fred', 'barney'] });
+     * // => '<li>fred</li><li>barney</li>'
+     *
+     * // using the `sourceURL` option to specify a custom sourceURL for the template
+     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
+     * compiled(data);
+     * // => find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector
+     *
+     * // using the `variable` option to ensure a with-statement isn't used in the compiled template
+     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
+     * compiled.source;
+     * // => function(data) {
+     * //   var __t, __p = '';
+     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
+     * //   return __p;
+     * // }
+     *
+     * // using the `source` property to inline compiled templates for meaningful
+     * // line numbers in error messages and a stack trace
+     * fs.writeFileSync(path.join(cwd, 'jst.js'), '\
+     *   var JST = {\
+     *     "main": ' + _.template(mainText).source + '\
+     *   };\
+     * ');
+     */
+    function template(string, options, otherOptions) {
+      // Based on John Resig's `tmpl` implementation (http://ejohn.org/blog/javascript-micro-templating/)
+      // and Laura Doktorova's doT.js (https://github.com/olado/doT).
+      var settings = lodash.templateSettings;
+
+      if (otherOptions && isIterateeCall(string, options, otherOptions)) {
+        options = otherOptions = undefined;
+      }
+      string = baseToString(string);
+      options = assignWith(baseAssign({}, otherOptions || options), settings, assignOwnDefaults);
+
+      var imports = assignWith(baseAssign({}, options.imports), settings.imports, assignOwnDefaults),
+          importsKeys = keys(imports),
+          importsValues = baseValues(imports, importsKeys);
+
+      var isEscaping,
+          isEvaluating,
+          index = 0,
+          interpolate = options.interpolate || reNoMatch,
+          source = "__p += '";
+
+      // Compile the regexp to match each delimiter.
+      var reDelimiters = RegExp(
+        (options.escape || reNoMatch).source + '|' +
+        interpolate.source + '|' +
+        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
+        (options.evaluate || reNoMatch).source + '|$'
+      , 'g');
+
+      // Use a sourceURL for easier debugging.
+      var sourceURL = '//# sourceURL=' +
+        ('sourceURL' in options
+          ? options.sourceURL
+          : ('lodash.templateSources[' + (++templateCounter) + ']')
+        ) + '\n';
+
+      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
+        interpolateValue || (interpolateValue = esTemplateValue);
+
+        // Escape characters that can't be included in string literals.
+        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);
+
+        // Replace delimiters with snippets.
+        if (escapeValue) {
+          isEscaping = true;
+          source += "' +\n__e(" + escapeValue + ") +\n'";
+        }
+        if (evaluateValue) {
+          isEvaluating = true;
+          source += "';\n" + evaluateValue + ";\n__p += '";
+        }
+        if (interpolateValue) {
+          source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
+        }
+        index = offset + match.length;
+
+        // The JS engine embedded in Adobe products requires returning the `match`
+        // string in order to produce the correct `offset` value.
+        return match;
+      });
+
+      source += "';\n";
+
+      // If `variable` is not specified wrap a with-statement around the generated
+      // code to add the data object to the top of the scope chain.
+      var variable = options.variable;
+      if (!variable) {
+        source = 'with (obj) {\n' + source + '\n}\n';
+      }
+      // Cleanup code by stripping empty strings.
+      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
+        .replace(reEmptyStringMiddle, '$1')
+        .replace(reEmptyStringTrailing, '$1;');
+
+      // Frame code as the function body.
+      source = 'function(' + (variable || 'obj') + ') {\n' +
+        (variable
+          ? ''
+          : 'obj || (obj = {});\n'
+        ) +
+        "var __t, __p = ''" +
+        (isEscaping
+           ? ', __e = _.escape'
+           : ''
+        ) +
+        (isEvaluating
+          ? ', __j = Array.prototype.join;\n' +
+            "function print() { __p += __j.call(arguments, '') }\n"
+          : ';\n'
+        ) +
+        source +
+        'return __p\n}';
+
+      var result = attempt(function() {
+        return Function(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues);
+      });
+
+      // Provide the compiled function's source by its `toString` method or
+      // the `source` property as a convenience for inlining compiled templates.
+      result.source = source;
+      if (isError(result)) {
+        throw result;
+      }
+      return result;
+    }
+
+    /**
+     * Removes leading and trailing whitespace or specified characters from `string`.
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to trim.
+     * @param {string} [chars=whitespace] The characters to trim.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {string} Returns the trimmed string.
+     * @example
+     *
+     * _.trim('  abc  ');
+     * // => 'abc'
+     *
+     * _.trim('-_-abc-_-', '_-');
+     * // => 'abc'
+     *
+     * _.map(['  foo  ', '  bar  '], _.trim);
+     * // => ['foo', 'bar']
+     */
+    function trim(string, chars, guard) {
+      var value = string;
+      string = baseToString(string);
+      if (!string) {
+        return string;
+      }
+      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {
+        return string.slice(trimmedLeftIndex(string), trimmedRightIndex(string) + 1);
+      }
+      chars = (chars + '');
+      return string.slice(charsLeftIndex(string, chars), charsRightIndex(string, chars) + 1);
+    }
+
+    /**
+     * Removes leading whitespace or specified characters from `string`.
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to trim.
+     * @param {string} [chars=whitespace] The characters to trim.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {string} Returns the trimmed string.
+     * @example
+     *
+     * _.trimLeft('  abc  ');
+     * // => 'abc  '
+     *
+     * _.trimLeft('-_-abc-_-', '_-');
+     * // => 'abc-_-'
+     */
+    function trimLeft(string, chars, guard) {
+      var value = string;
+      string = baseToString(string);
+      if (!string) {
+        return string;
+      }
+      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {
+        return string.slice(trimmedLeftIndex(string));
+      }
+      return string.slice(charsLeftIndex(string, (chars + '')));
+    }
+
+    /**
+     * Removes trailing whitespace or specified characters from `string`.
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to trim.
+     * @param {string} [chars=whitespace] The characters to trim.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {string} Returns the trimmed string.
+     * @example
+     *
+     * _.trimRight('  abc  ');
+     * // => '  abc'
+     *
+     * _.trimRight('-_-abc-_-', '_-');
+     * // => '-_-abc'
+     */
+    function trimRight(string, chars, guard) {
+      var value = string;
+      string = baseToString(string);
+      if (!string) {
+        return string;
+      }
+      if (guard ? isIterateeCall(value, chars, guard) : chars == null) {
+        return string.slice(0, trimmedRightIndex(string) + 1);
+      }
+      return string.slice(0, charsRightIndex(string, (chars + '')) + 1);
+    }
+
+    /**
+     * Truncates `string` if it's longer than the given maximum string length.
+     * The last characters of the truncated string are replaced with the omission
+     * string which defaults to "...".
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to truncate.
+     * @param {Object|number} [options] The options object or maximum string length.
+     * @param {number} [options.length=30] The maximum string length.
+     * @param {string} [options.omission='...'] The string to indicate text is omitted.
+     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {string} Returns the truncated string.
+     * @example
+     *
+     * _.trunc('hi-diddly-ho there, neighborino');
+     * // => 'hi-diddly-ho there, neighbo...'
+     *
+     * _.trunc('hi-diddly-ho there, neighborino', 24);
+     * // => 'hi-diddly-ho there, n...'
+     *
+     * _.trunc('hi-diddly-ho there, neighborino', {
+     *   'length': 24,
+     *   'separator': ' '
+     * });
+     * // => 'hi-diddly-ho there,...'
+     *
+     * _.trunc('hi-diddly-ho there, neighborino', {
+     *   'length': 24,
+     *   'separator': /,? +/
+     * });
+     * // => 'hi-diddly-ho there...'
+     *
+     * _.trunc('hi-diddly-ho there, neighborino', {
+     *   'omission': ' [...]'
+     * });
+     * // => 'hi-diddly-ho there, neig [...]'
+     */
+    function trunc(string, options, guard) {
+      if (guard && isIterateeCall(string, options, guard)) {
+        options = undefined;
+      }
+      var length = DEFAULT_TRUNC_LENGTH,
+          omission = DEFAULT_TRUNC_OMISSION;
+
+      if (options != null) {
+        if (isObject(options)) {
+          var separator = 'separator' in options ? options.separator : separator;
+          length = 'length' in options ? (+options.length || 0) : length;
+          omission = 'omission' in options ? baseToString(options.omission) : omission;
+        } else {
+          length = +options || 0;
+        }
+      }
+      string = baseToString(string);
+      if (length >= string.length) {
+        return string;
+      }
+      var end = length - omission.length;
+      if (end < 1) {
+        return omission;
+      }
+      var result = string.slice(0, end);
+      if (separator == null) {
+        return result + omission;
+      }
+      if (isRegExp(separator)) {
+        if (string.slice(end).search(separator)) {
+          var match,
+              newEnd,
+              substring = string.slice(0, end);
+
+          if (!separator.global) {
+            separator = RegExp(separator.source, (reFlags.exec(separator) || '') + 'g');
+          }
+          separator.lastIndex = 0;
+          while ((match = separator.exec(substring))) {
+            newEnd = match.index;
+          }
+          result = result.slice(0, newEnd == null ? end : newEnd);
+        }
+      } else if (string.indexOf(separator, end) != end) {
+        var index = result.lastIndexOf(separator);
+        if (index > -1) {
+          result = result.slice(0, index);
+        }
+      }
+      return result + omission;
+    }
+
+    /**
+     * The inverse of `_.escape`; this method converts the HTML entities
+     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, `&#39;`, and `&#96;` in `string` to their
+     * corresponding characters.
+     *
+     * **Note:** No other HTML entities are unescaped. To unescape additional HTML
+     * entities use a third-party library like [_he_](https://mths.be/he).
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to unescape.
+     * @returns {string} Returns the unescaped string.
+     * @example
+     *
+     * _.unescape('fred, barney, &amp; pebbles');
+     * // => 'fred, barney, & pebbles'
+     */
+    function unescape(string) {
+      string = baseToString(string);
+      return (string && reHasEscapedHtml.test(string))
+        ? string.replace(reEscapedHtml, unescapeHtmlChar)
+        : string;
+    }
+
+    /**
+     * Splits `string` into an array of its words.
+     *
+     * @static
+     * @memberOf _
+     * @category String
+     * @param {string} [string=''] The string to inspect.
+     * @param {RegExp|string} [pattern] The pattern to match words.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {Array} Returns the words of `string`.
+     * @example
+     *
+     * _.words('fred, barney, & pebbles');
+     * // => ['fred', 'barney', 'pebbles']
+     *
+     * _.words('fred, barney, & pebbles', /[^, ]+/g);
+     * // => ['fred', 'barney', '&', 'pebbles']
+     */
+    function words(string, pattern, guard) {
+      if (guard && isIterateeCall(string, pattern, guard)) {
+        pattern = undefined;
+      }
+      string = baseToString(string);
+      return string.match(pattern || reWords) || [];
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Attempts to invoke `func`, returning either the result or the caught error
+     * object. Any additional arguments are provided to `func` when it's invoked.
+     *
+     * @static
+     * @memberOf _
+     * @category Utility
+     * @param {Function} func The function to attempt.
+     * @returns {*} Returns the `func` result or error object.
+     * @example
+     *
+     * // avoid throwing errors for invalid selectors
+     * var elements = _.attempt(function(selector) {
+     *   return document.querySelectorAll(selector);
+     * }, '>_>');
+     *
+     * if (_.isError(elements)) {
+     *   elements = [];
+     * }
+     */
+    var attempt = restParam(function(func, args) {
+      try {
+        return func.apply(undefined, args);
+      } catch(e) {
+        return isError(e) ? e : new Error(e);
+      }
+    });
+
+    /**
+     * Creates a function that invokes `func` with the `this` binding of `thisArg`
+     * and arguments of the created function. If `func` is a property name the
+     * created callback returns the property value for a given element. If `func`
+     * is an object the created callback returns `true` for elements that contain
+     * the equivalent object properties, otherwise it returns `false`.
+     *
+     * @static
+     * @memberOf _
+     * @alias iteratee
+     * @category Utility
+     * @param {*} [func=_.identity] The value to convert to a callback.
+     * @param {*} [thisArg] The `this` binding of `func`.
+     * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+     * @returns {Function} Returns the callback.
+     * @example
+     *
+     * var users = [
+     *   { 'user': 'barney', 'age': 36 },
+     *   { 'user': 'fred',   'age': 40 }
+     * ];
+     *
+     * // wrap to create custom callback shorthands
+     * _.callback = _.wrap(_.callback, function(callback, func, thisArg) {
+     *   var match = /^(.+?)__([gl]t)(.+)$/.exec(func);
+     *   if (!match) {
+     *     return callback(func, thisArg);
+     *   }
+     *   return function(object) {
+     *     return match[2] == 'gt'
+     *       ? object[match[1]] > match[3]
+     *       : object[match[1]] < match[3];
+     *   };
+     * });
+     *
+     * _.filter(users, 'age__gt36');
+     * // => [{ 'user': 'fred', 'age': 40 }]
+     */
+    function callback(func, thisArg, guard) {
+      if (guard && isIterateeCall(func, thisArg, guard)) {
+        thisArg = undefined;
+      }
+      return isObjectLike(func)
+        ? matches(func)
+        : baseCallback(func, thisArg);
+    }
+
+    /**
+     * Creates a function that returns `value`.
+     *
+     * @static
+     * @memberOf _
+     * @category Utility
+     * @param {*} value The value to return from the new function.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * var object = { 'user': 'fred' };
+     * var getter = _.constant(object);
+     *
+     * getter() === object;
+     * // => true
+     */
+    function constant(value) {
+      return function() {
+        return value;
+      };
+    }
+
+    /**
+     * This method returns the first argument provided to it.
+     *
+     * @static
+     * @memberOf _
+     * @category Utility
+     * @param {*} value Any value.
+     * @returns {*} Returns `value`.
+     * @example
+     *
+     * var object = { 'user': 'fred' };
+     *
+     * _.identity(object) === object;
+     * // => true
+     */
+    function identity(value) {
+      return value;
+    }
+
+    /**
+     * Creates a function that performs a deep comparison between a given object
+     * and `source`, returning `true` if the given object has equivalent property
+     * values, else `false`.
+     *
+     * **Note:** This method supports comparing arrays, booleans, `Date` objects,
+     * numbers, `Object` objects, regexes, and strings. Objects are compared by
+     * their own, not inherited, enumerable properties. For comparing a single
+     * own or inherited property value see `_.matchesProperty`.
+     *
+     * @static
+     * @memberOf _
+     * @category Utility
+     * @param {Object} source The object of property values to match.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * var users = [
+     *   { 'user': 'barney', 'age': 36, 'active': true },
+     *   { 'user': 'fred',   'age': 40, 'active': false }
+     * ];
+     *
+     * _.filter(users, _.matches({ 'age': 40, 'active': false }));
+     * // => [{ 'user': 'fred', 'age': 40, 'active': false }]
+     */
+    function matches(source) {
+      return baseMatches(baseClone(source, true));
+    }
+
+    /**
+     * Creates a function that compares the property value of `path` on a given
+     * object to `value`.
+     *
+     * **Note:** This method supports comparing arrays, booleans, `Date` objects,
+     * numbers, `Object` objects, regexes, and strings. Objects are compared by
+     * their own, not inherited, enumerable properties.
+     *
+     * @static
+     * @memberOf _
+     * @category Utility
+     * @param {Array|string} path The path of the property to get.
+     * @param {*} srcValue The value to match.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * var users = [
+     *   { 'user': 'barney' },
+     *   { 'user': 'fred' }
+     * ];
+     *
+     * _.find(users, _.matchesProperty('user', 'fred'));
+     * // => { 'user': 'fred' }
+     */
+    function matchesProperty(path, srcValue) {
+      return baseMatchesProperty(path, baseClone(srcValue, true));
+    }
+
+    /**
+     * Creates a function that invokes the method at `path` on a given object.
+     * Any additional arguments are provided to the invoked method.
+     *
+     * @static
+     * @memberOf _
+     * @category Utility
+     * @param {Array|string} path The path of the method to invoke.
+     * @param {...*} [args] The arguments to invoke the method with.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * var objects = [
+     *   { 'a': { 'b': { 'c': _.constant(2) } } },
+     *   { 'a': { 'b': { 'c': _.constant(1) } } }
+     * ];
+     *
+     * _.map(objects, _.method('a.b.c'));
+     * // => [2, 1]
+     *
+     * _.invoke(_.sortBy(objects, _.method(['a', 'b', 'c'])), 'a.b.c');
+     * // => [1, 2]
+     */
+    var method = restParam(function(path, args) {
+      return function(object) {
+        return invokePath(object, path, args);
+      };
+    });
+
+    /**
+     * The opposite of `_.method`; this method creates a function that invokes
+     * the method at a given path on `object`. Any additional arguments are
+     * provided to the invoked method.
+     *
+     * @static
+     * @memberOf _
+     * @category Utility
+     * @param {Object} object The object to query.
+     * @param {...*} [args] The arguments to invoke the method with.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * var array = _.times(3, _.constant),
+     *     object = { 'a': array, 'b': array, 'c': array };
+     *
+     * _.map(['a[2]', 'c[0]'], _.methodOf(object));
+     * // => [2, 0]
+     *
+     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
+     * // => [2, 0]
+     */
+    var methodOf = restParam(function(object, args) {
+      return function(path) {
+        return invokePath(object, path, args);
+      };
+    });
+
+    /**
+     * Adds all own enumerable function properties of a source object to the
+     * destination object. If `object` is a function then methods are added to
+     * its prototype as well.
+     *
+     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
+     * avoid conflicts caused by modifying the original.
+     *
+     * @static
+     * @memberOf _
+     * @category Utility
+     * @param {Function|Object} [object=lodash] The destination object.
+     * @param {Object} source The object of functions to add.
+     * @param {Object} [options] The options object.
+     * @param {boolean} [options.chain=true] Specify whether the functions added
+     *  are chainable.
+     * @returns {Function|Object} Returns `object`.
+     * @example
+     *
+     * function vowels(string) {
+     *   return _.filter(string, function(v) {
+     *     return /[aeiou]/i.test(v);
+     *   });
+     * }
+     *
+     * _.mixin({ 'vowels': vowels });
+     * _.vowels('fred');
+     * // => ['e']
+     *
+     * _('fred').vowels().value();
+     * // => ['e']
+     *
+     * _.mixin({ 'vowels': vowels }, { 'chain': false });
+     * _('fred').vowels();
+     * // => ['e']
+     */
+    function mixin(object, source, options) {
+      if (options == null) {
+        var isObj = isObject(source),
+            props = isObj ? keys(source) : undefined,
+            methodNames = (props && props.length) ? baseFunctions(source, props) : undefined;
+
+        if (!(methodNames ? methodNames.length : isObj)) {
+          methodNames = false;
+          options = source;
+          source = object;
+          object = this;
+        }
+      }
+      if (!methodNames) {
+        methodNames = baseFunctions(source, keys(source));
+      }
+      var chain = true,
+          index = -1,
+          isFunc = isFunction(object),
+          length = methodNames.length;
+
+      if (options === false) {
+        chain = false;
+      } else if (isObject(options) && 'chain' in options) {
+        chain = options.chain;
+      }
+      while (++index < length) {
+        var methodName = methodNames[index],
+            func = source[methodName];
+
+        object[methodName] = func;
+        if (isFunc) {
+          object.prototype[methodName] = (function(func) {
+            return function() {
+              var chainAll = this.__chain__;
+              if (chain || chainAll) {
+                var result = object(this.__wrapped__),
+                    actions = result.__actions__ = arrayCopy(this.__actions__);
+
+                actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
+                result.__chain__ = chainAll;
+                return result;
+              }
+              return func.apply(object, arrayPush([this.value()], arguments));
+            };
+          }(func));
+        }
+      }
+      return object;
+    }
+
+    /**
+     * Reverts the `_` variable to its previous value and returns a reference to
+     * the `lodash` function.
+     *
+     * @static
+     * @memberOf _
+     * @category Utility
+     * @returns {Function} Returns the `lodash` function.
+     * @example
+     *
+     * var lodash = _.noConflict();
+     */
+    function noConflict() {
+      root._ = oldDash;
+      return this;
+    }
+
+    /**
+     * A no-operation function that returns `undefined` regardless of the
+     * arguments it receives.
+     *
+     * @static
+     * @memberOf _
+     * @category Utility
+     * @example
+     *
+     * var object = { 'user': 'fred' };
+     *
+     * _.noop(object) === undefined;
+     * // => true
+     */
+    function noop() {
+      // No operation performed.
+    }
+
+    /**
+     * Creates a function that returns the property value at `path` on a
+     * given object.
+     *
+     * @static
+     * @memberOf _
+     * @category Utility
+     * @param {Array|string} path The path of the property to get.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * var objects = [
+     *   { 'a': { 'b': { 'c': 2 } } },
+     *   { 'a': { 'b': { 'c': 1 } } }
+     * ];
+     *
+     * _.map(objects, _.property('a.b.c'));
+     * // => [2, 1]
+     *
+     * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c');
+     * // => [1, 2]
+     */
+    function property(path) {
+      return isKey(path) ? baseProperty(path) : basePropertyDeep(path);
+    }
+
+    /**
+     * The opposite of `_.property`; this method creates a function that returns
+     * the property value at a given path on `object`.
+     *
+     * @static
+     * @memberOf _
+     * @category Utility
+     * @param {Object} object The object to query.
+     * @returns {Function} Returns the new function.
+     * @example
+     *
+     * var array = [0, 1, 2],
+     *     object = { 'a': array, 'b': array, 'c': array };
+     *
+     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
+     * // => [2, 0]
+     *
+     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
+     * // => [2, 0]
+     */
+    function propertyOf(object) {
+      return function(path) {
+        return baseGet(object, toPath(path), (path + ''));
+      };
+    }
+
+    /**
+     * Creates an array of numbers (positive and/or negative) progressing from
+     * `start` up to, but not including, `end`. If `end` is not specified it's
+     * set to `start` with `start` then set to `0`. If `end` is less than `start`
+     * a zero-length range is created unless a negative `step` is specified.
+     *
+     * @static
+     * @memberOf _
+     * @category Utility
+     * @param {number} [start=0] The start of the range.
+     * @param {number} end The end of the range.
+     * @param {number} [step=1] The value to increment or decrement by.
+     * @returns {Array} Returns the new array of numbers.
+     * @example
+     *
+     * _.range(4);
+     * // => [0, 1, 2, 3]
+     *
+     * _.range(1, 5);
+     * // => [1, 2, 3, 4]
+     *
+     * _.range(0, 20, 5);
+     * // => [0, 5, 10, 15]
+     *
+     * _.range(0, -4, -1);
+     * // => [0, -1, -2, -3]
+     *
+     * _.range(1, 4, 0);
+     * // => [1, 1, 1]
+     *
+     * _.range(0);
+     * // => []
+     */
+    function range(start, end, step) {
+      if (step && isIterateeCall(start, end, step)) {
+        end = step = undefined;
+      }
+      start = +start || 0;
+      step = step == null ? 1 : (+step || 0);
+
+      if (end == null) {
+        end = start;
+        start = 0;
+      } else {
+        end = +end || 0;
+      }
+      // Use `Array(length)` so engines like Chakra and V8 avoid slower modes.
+      // See https://youtu.be/XAqIpGU8ZZk#t=17m25s for more details.
+      var index = -1,
+          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
+          result = Array(length);
+
+      while (++index < length) {
+        result[index] = start;
+        start += step;
+      }
+      return result;
+    }
+
+    /**
+     * Invokes the iteratee function `n` times, returning an array of the results
+     * of each invocation. The `iteratee` is bound to `thisArg` and invoked with
+     * one argument; (index).
+     *
+     * @static
+     * @memberOf _
+     * @category Utility
+     * @param {number} n The number of times to invoke `iteratee`.
+     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {Array} Returns the array of results.
+     * @example
+     *
+     * var diceRolls = _.times(3, _.partial(_.random, 1, 6, false));
+     * // => [3, 6, 4]
+     *
+     * _.times(3, function(n) {
+     *   mage.castSpell(n);
+     * });
+     * // => invokes `mage.castSpell(n)` three times with `n` of `0`, `1`, and `2`
+     *
+     * _.times(3, function(n) {
+     *   this.cast(n);
+     * }, mage);
+     * // => also invokes `mage.castSpell(n)` three times
+     */
+    function times(n, iteratee, thisArg) {
+      n = nativeFloor(n);
+
+      // Exit early to avoid a JSC JIT bug in Safari 8
+      // where `Array(0)` is treated as `Array(1)`.
+      if (n < 1 || !nativeIsFinite(n)) {
+        return [];
+      }
+      var index = -1,
+          result = Array(nativeMin(n, MAX_ARRAY_LENGTH));
+
+      iteratee = bindCallback(iteratee, thisArg, 1);
+      while (++index < n) {
+        if (index < MAX_ARRAY_LENGTH) {
+          result[index] = iteratee(index);
+        } else {
+          iteratee(index);
+        }
+      }
+      return result;
+    }
+
+    /**
+     * Generates a unique ID. If `prefix` is provided the ID is appended to it.
+     *
+     * @static
+     * @memberOf _
+     * @category Utility
+     * @param {string} [prefix] The value to prefix the ID with.
+     * @returns {string} Returns the unique ID.
+     * @example
+     *
+     * _.uniqueId('contact_');
+     * // => 'contact_104'
+     *
+     * _.uniqueId();
+     * // => '105'
+     */
+    function uniqueId(prefix) {
+      var id = ++idCounter;
+      return baseToString(prefix) + id;
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * Adds two numbers.
+     *
+     * @static
+     * @memberOf _
+     * @category Math
+     * @param {number} augend The first number to add.
+     * @param {number} addend The second number to add.
+     * @returns {number} Returns the sum.
+     * @example
+     *
+     * _.add(6, 4);
+     * // => 10
+     */
+    function add(augend, addend) {
+      return (+augend || 0) + (+addend || 0);
+    }
+
+    /**
+     * Calculates `n` rounded up to `precision`.
+     *
+     * @static
+     * @memberOf _
+     * @category Math
+     * @param {number} n The number to round up.
+     * @param {number} [precision=0] The precision to round up to.
+     * @returns {number} Returns the rounded up number.
+     * @example
+     *
+     * _.ceil(4.006);
+     * // => 5
+     *
+     * _.ceil(6.004, 2);
+     * // => 6.01
+     *
+     * _.ceil(6040, -2);
+     * // => 6100
+     */
+    var ceil = createRound('ceil');
+
+    /**
+     * Calculates `n` rounded down to `precision`.
+     *
+     * @static
+     * @memberOf _
+     * @category Math
+     * @param {number} n The number to round down.
+     * @param {number} [precision=0] The precision to round down to.
+     * @returns {number} Returns the rounded down number.
+     * @example
+     *
+     * _.floor(4.006);
+     * // => 4
+     *
+     * _.floor(0.046, 2);
+     * // => 0.04
+     *
+     * _.floor(4060, -2);
+     * // => 4000
+     */
+    var floor = createRound('floor');
+
+    /**
+     * Gets the maximum value of `collection`. If `collection` is empty or falsey
+     * `-Infinity` is returned. If an iteratee function is provided it's invoked
+     * for each value in `collection` to generate the criterion by which the value
+     * is ranked. The `iteratee` is bound to `thisArg` and invoked with three
+     * arguments: (value, index, collection).
+     *
+     * If a property name is provided for `iteratee` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `iteratee` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Math
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function|Object|string} [iteratee] The function invoked per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {*} Returns the maximum value.
+     * @example
+     *
+     * _.max([4, 2, 8, 6]);
+     * // => 8
+     *
+     * _.max([]);
+     * // => -Infinity
+     *
+     * var users = [
+     *   { 'user': 'barney', 'age': 36 },
+     *   { 'user': 'fred',   'age': 40 }
+     * ];
+     *
+     * _.max(users, function(chr) {
+     *   return chr.age;
+     * });
+     * // => { 'user': 'fred', 'age': 40 }
+     *
+     * // using the `_.property` callback shorthand
+     * _.max(users, 'age');
+     * // => { 'user': 'fred', 'age': 40 }
+     */
+    var max = createExtremum(gt, NEGATIVE_INFINITY);
+
+    /**
+     * Gets the minimum value of `collection`. If `collection` is empty or falsey
+     * `Infinity` is returned. If an iteratee function is provided it's invoked
+     * for each value in `collection` to generate the criterion by which the value
+     * is ranked. The `iteratee` is bound to `thisArg` and invoked with three
+     * arguments: (value, index, collection).
+     *
+     * If a property name is provided for `iteratee` the created `_.property`
+     * style callback returns the property value of the given element.
+     *
+     * If a value is also provided for `thisArg` the created `_.matchesProperty`
+     * style callback returns `true` for elements that have a matching property
+     * value, else `false`.
+     *
+     * If an object is provided for `iteratee` the created `_.matches` style
+     * callback returns `true` for elements that have the properties of the given
+     * object, else `false`.
+     *
+     * @static
+     * @memberOf _
+     * @category Math
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function|Object|string} [iteratee] The function invoked per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {*} Returns the minimum value.
+     * @example
+     *
+     * _.min([4, 2, 8, 6]);
+     * // => 2
+     *
+     * _.min([]);
+     * // => Infinity
+     *
+     * var users = [
+     *   { 'user': 'barney', 'age': 36 },
+     *   { 'user': 'fred',   'age': 40 }
+     * ];
+     *
+     * _.min(users, function(chr) {
+     *   return chr.age;
+     * });
+     * // => { 'user': 'barney', 'age': 36 }
+     *
+     * // using the `_.property` callback shorthand
+     * _.min(users, 'age');
+     * // => { 'user': 'barney', 'age': 36 }
+     */
+    var min = createExtremum(lt, POSITIVE_INFINITY);
+
+    /**
+     * Calculates `n` rounded to `precision`.
+     *
+     * @static
+     * @memberOf _
+     * @category Math
+     * @param {number} n The number to round.
+     * @param {number} [precision=0] The precision to round to.
+     * @returns {number} Returns the rounded number.
+     * @example
+     *
+     * _.round(4.006);
+     * // => 4
+     *
+     * _.round(4.006, 2);
+     * // => 4.01
+     *
+     * _.round(4060, -2);
+     * // => 4100
+     */
+    var round = createRound('round');
+
+    /**
+     * Gets the sum of the values in `collection`.
+     *
+     * @static
+     * @memberOf _
+     * @category Math
+     * @param {Array|Object|string} collection The collection to iterate over.
+     * @param {Function|Object|string} [iteratee] The function invoked per iteration.
+     * @param {*} [thisArg] The `this` binding of `iteratee`.
+     * @returns {number} Returns the sum.
+     * @example
+     *
+     * _.sum([4, 6]);
+     * // => 10
+     *
+     * _.sum({ 'a': 4, 'b': 6 });
+     * // => 10
+     *
+     * var objects = [
+     *   { 'n': 4 },
+     *   { 'n': 6 }
+     * ];
+     *
+     * _.sum(objects, function(object) {
+     *   return object.n;
+     * });
+     * // => 10
+     *
+     * // using the `_.property` callback shorthand
+     * _.sum(objects, 'n');
+     * // => 10
+     */
+    function sum(collection, iteratee, thisArg) {
+      if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
+        iteratee = undefined;
+      }
+      iteratee = getCallback(iteratee, thisArg, 3);
+      return iteratee.length == 1
+        ? arraySum(isArray(collection) ? collection : toIterable(collection), iteratee)
+        : baseSum(collection, iteratee);
+    }
+
+    /*------------------------------------------------------------------------*/
+
+    // Ensure wrappers are instances of `baseLodash`.
+    lodash.prototype = baseLodash.prototype;
+
+    LodashWrapper.prototype = baseCreate(baseLodash.prototype);
+    LodashWrapper.prototype.constructor = LodashWrapper;
+
+    LazyWrapper.prototype = baseCreate(baseLodash.prototype);
+    LazyWrapper.prototype.constructor = LazyWrapper;
+
+    // Add functions to the `Map` cache.
+    MapCache.prototype['delete'] = mapDelete;
+    MapCache.prototype.get = mapGet;
+    MapCache.prototype.has = mapHas;
+    MapCache.prototype.set = mapSet;
+
+    // Add functions to the `Set` cache.
+    SetCache.prototype.push = cachePush;
+
+    // Assign cache to `_.memoize`.
+    memoize.Cache = MapCache;
+
+    // Add functions that return wrapped values when chaining.
+    lodash.after = after;
+    lodash.ary = ary;
+    lodash.assign = assign;
+    lodash.at = at;
+    lodash.before = before;
+    lodash.bind = bind;
+    lodash.bindAll = bindAll;
+    lodash.bindKey = bindKey;
+    lodash.callback = callback;
+    lodash.chain = chain;
+    lodash.chunk = chunk;
+    lodash.compact = compact;
+    lodash.constant = constant;
+    lodash.countBy = countBy;
+    lodash.create = create;
+    lodash.curry = curry;
+    lodash.curryRight = curryRight;
+    lodash.debounce = debounce;
+    lodash.defaults = defaults;
+    lodash.defaultsDeep = defaultsDeep;
+    lodash.defer = defer;
+    lodash.delay = delay;
+    lodash.difference = difference;
+    lodash.drop = drop;
+    lodash.dropRight = dropRight;
+    lodash.dropRightWhile = dropRightWhile;
+    lodash.dropWhile = dropWhile;
+    lodash.fill = fill;
+    lodash.filter = filter;
+    lodash.flatten = flatten;
+    lodash.flattenDeep = flattenDeep;
+    lodash.flow = flow;
+    lodash.flowRight = flowRight;
+    lodash.forEach = forEach;
+    lodash.forEachRight = forEachRight;
+    lodash.forIn = forIn;
+    lodash.forInRight = forInRight;
+    lodash.forOwn = forOwn;
+    lodash.forOwnRight = forOwnRight;
+    lodash.functions = functions;
+    lodash.groupBy = groupBy;
+    lodash.indexBy = indexBy;
+    lodash.initial = initial;
+    lodash.intersection = intersection;
+    lodash.invert = invert;
+    lodash.invoke = invoke;
+    lodash.keys = keys;
+    lodash.keysIn = keysIn;
+    lodash.map = map;
+    lodash.mapKeys = mapKeys;
+    lodash.mapValues = mapValues;
+    lodash.matches = matches;
+    lodash.matchesProperty = matchesProperty;
+    lodash.memoize = memoize;
+    lodash.merge = merge;
+    lodash.method = method;
+    lodash.methodOf = methodOf;
+    lodash.mixin = mixin;
+    lodash.modArgs = modArgs;
+    lodash.negate = negate;
+    lodash.omit = omit;
+    lodash.once = once;
+    lodash.pairs = pairs;
+    lodash.partial = partial;
+    lodash.partialRight = partialRight;
+    lodash.partition = partition;
+    lodash.pick = pick;
+    lodash.pluck = pluck;
+    lodash.property = property;
+    lodash.propertyOf = propertyOf;
+    lodash.pull = pull;
+    lodash.pullAt = pullAt;
+    lodash.range = range;
+    lodash.rearg = rearg;
+    lodash.reject = reject;
+    lodash.remove = remove;
+    lodash.rest = rest;
+    lodash.restParam = restParam;
+    lodash.set = set;
+    lodash.shuffle = shuffle;
+    lodash.slice = slice;
+    lodash.sortBy = sortBy;
+    lodash.sortByAll = sortByAll;
+    lodash.sortByOrder = sortByOrder;
+    lodash.spread = spread;
+    lodash.take = take;
+    lodash.takeRight = takeRight;
+    lodash.takeRightWhile = takeRightWhile;
+    lodash.takeWhile = takeWhile;
+    lodash.tap = tap;
+    lodash.throttle = throttle;
+    lodash.thru = thru;
+    lodash.times = times;
+    lodash.toArray = toArray;
+    lodash.toPlainObject = toPlainObject;
+    lodash.transform = transform;
+    lodash.union = union;
+    lodash.uniq = uniq;
+    lodash.unzip = unzip;
+    lodash.unzipWith = unzipWith;
+    lodash.values = values;
+    lodash.valuesIn = valuesIn;
+    lodash.where = where;
+    lodash.without = without;
+    lodash.wrap = wrap;
+    lodash.xor = xor;
+    lodash.zip = zip;
+    lodash.zipObject = zipObject;
+    lodash.zipWith = zipWith;
+
+    // Add aliases.
+    lodash.backflow = flowRight;
+    lodash.collect = map;
+    lodash.compose = flowRight;
+    lodash.each = forEach;
+    lodash.eachRight = forEachRight;
+    lodash.extend = assign;
+    lodash.iteratee = callback;
+    lodash.methods = functions;
+    lodash.object = zipObject;
+    lodash.select = filter;
+    lodash.tail = rest;
+    lodash.unique = uniq;
+
+    // Add functions to `lodash.prototype`.
+    mixin(lodash, lodash);
+
+    /*------------------------------------------------------------------------*/
+
+    // Add functions that return unwrapped values when chaining.
+    lodash.add = add;
+    lodash.attempt = attempt;
+    lodash.camelCase = camelCase;
+    lodash.capitalize = capitalize;
+    lodash.ceil = ceil;
+    lodash.clone = clone;
+    lodash.cloneDeep = cloneDeep;
+    lodash.deburr = deburr;
+    lodash.endsWith = endsWith;
+    lodash.escape = escape;
+    lodash.escapeRegExp = escapeRegExp;
+    lodash.every = every;
+    lodash.find = find;
+    lodash.findIndex = findIndex;
+    lodash.findKey = findKey;
+    lodash.findLast = findLast;
+    lodash.findLastIndex = findLastIndex;
+    lodash.findLastKey = findLastKey;
+    lodash.findWhere = findWhere;
+    lodash.first = first;
+    lodash.floor = floor;
+    lodash.get = get;
+    lodash.gt = gt;
+    lodash.gte = gte;
+    lodash.has = has;
+    lodash.identity = identity;
+    lodash.includes = includes;
+    lodash.indexOf = indexOf;
+    lodash.inRange = inRange;
+    lodash.isArguments = isArguments;
+    lodash.isArray = isArray;
+    lodash.isBoolean = isBoolean;
+    lodash.isDate = isDate;
+    lodash.isElement = isElement;
+    lodash.isEmpty = isEmpty;
+    lodash.isEqual = isEqual;
+    lodash.isError = isError;
+    lodash.isFinite = isFinite;
+    lodash.isFunction = isFunction;
+    lodash.isMatch = isMatch;
+    lodash.isNaN = isNaN;
+    lodash.isNative = isNative;
+    lodash.isNull = isNull;
+    lodash.isNumber = isNumber;
+    lodash.isObject = isObject;
+    lodash.isPlainObject = isPlainObject;
+    lodash.isRegExp = isRegExp;
+    lodash.isString = isString;
+    lodash.isTypedArray = isTypedArray;
+    lodash.isUndefined = isUndefined;
+    lodash.kebabCase = kebabCase;
+    lodash.last = last;
+    lodash.lastIndexOf = lastIndexOf;
+    lodash.lt = lt;
+    lodash.lte = lte;
+    lodash.max = max;
+    lodash.min = min;
+    lodash.noConflict = noConflict;
+    lodash.noop = noop;
+    lodash.now = now;
+    lodash.pad = pad;
+    lodash.padLeft = padLeft;
+    lodash.padRight = padRight;
+    lodash.parseInt = parseInt;
+    lodash.random = random;
+    lodash.reduce = reduce;
+    lodash.reduceRight = reduceRight;
+    lodash.repeat = repeat;
+    lodash.result = result;
+    lodash.round = round;
+    lodash.runInContext = runInContext;
+    lodash.size = size;
+    lodash.snakeCase = snakeCase;
+    lodash.some = some;
+    lodash.sortedIndex = sortedIndex;
+    lodash.sortedLastIndex = sortedLastIndex;
+    lodash.startCase = startCase;
+    lodash.startsWith = startsWith;
+    lodash.sum = sum;
+    lodash.template = template;
+    lodash.trim = trim;
+    lodash.trimLeft = trimLeft;
+    lodash.trimRight = trimRight;
+    lodash.trunc = trunc;
+    lodash.unescape = unescape;
+    lodash.uniqueId = uniqueId;
+    lodash.words = words;
+
+    // Add aliases.
+    lodash.all = every;
+    lodash.any = some;
+    lodash.contains = includes;
+    lodash.eq = isEqual;
+    lodash.detect = find;
+    lodash.foldl = reduce;
+    lodash.foldr = reduceRight;
+    lodash.head = first;
+    lodash.include = includes;
+    lodash.inject = reduce;
+
+    mixin(lodash, (function() {
+      var source = {};
+      baseForOwn(lodash, function(func, methodName) {
+        if (!lodash.prototype[methodName]) {
+          source[methodName] = func;
+        }
+      });
+      return source;
+    }()), false);
+
+    /*------------------------------------------------------------------------*/
+
+    // Add functions capable of returning wrapped and unwrapped values when chaining.
+    lodash.sample = sample;
+
+    lodash.prototype.sample = function(n) {
+      if (!this.__chain__ && n == null) {
+        return sample(this.value());
+      }
+      return this.thru(function(value) {
+        return sample(value, n);
+      });
+    };
+
+    /*------------------------------------------------------------------------*/
+
+    /**
+     * The semantic version number.
+     *
+     * @static
+     * @memberOf _
+     * @type string
+     */
+    lodash.VERSION = VERSION;
+
+    // Assign default placeholders.
+    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
+      lodash[methodName].placeholder = lodash;
+    });
+
+    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
+    arrayEach(['drop', 'take'], function(methodName, index) {
+      LazyWrapper.prototype[methodName] = function(n) {
+        var filtered = this.__filtered__;
+        if (filtered && !index) {
+          return new LazyWrapper(this);
+        }
+        n = n == null ? 1 : nativeMax(nativeFloor(n) || 0, 0);
+
+        var result = this.clone();
+        if (filtered) {
+          result.__takeCount__ = nativeMin(result.__takeCount__, n);
+        } else {
+          result.__views__.push({ 'size': n, 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') });
+        }
+        return result;
+      };
+
+      LazyWrapper.prototype[methodName + 'Right'] = function(n) {
+        return this.reverse()[methodName](n).reverse();
+      };
+    });
+
+    // Add `LazyWrapper` methods that accept an `iteratee` value.
+    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
+      var type = index + 1,
+          isFilter = type != LAZY_MAP_FLAG;
+
+      LazyWrapper.prototype[methodName] = function(iteratee, thisArg) {
+        var result = this.clone();
+        result.__iteratees__.push({ 'iteratee': getCallback(iteratee, thisArg, 1), 'type': type });
+        result.__filtered__ = result.__filtered__ || isFilter;
+        return result;
+      };
+    });
+
+    // Add `LazyWrapper` methods for `_.first` and `_.last`.
+    arrayEach(['first', 'last'], function(methodName, index) {
+      var takeName = 'take' + (index ? 'Right' : '');
+
+      LazyWrapper.prototype[methodName] = function() {
+        return this[takeName](1).value()[0];
+      };
+    });
+
+    // Add `LazyWrapper` methods for `_.initial` and `_.rest`.
+    arrayEach(['initial', 'rest'], function(methodName, index) {
+      var dropName = 'drop' + (index ? '' : 'Right');
+
+      LazyWrapper.prototype[methodName] = function() {
+        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
+      };
+    });
+
+    // Add `LazyWrapper` methods for `_.pluck` and `_.where`.
+    arrayEach(['pluck', 'where'], function(methodName, index) {
+      var operationName = index ? 'filter' : 'map',
+          createCallback = index ? baseMatches : property;
+
+      LazyWrapper.prototype[methodName] = function(value) {
+        return this[operationName](createCallback(value));
+      };
+    });
+
+    LazyWrapper.prototype.compact = function() {
+      return this.filter(identity);
+    };
+
+    LazyWrapper.prototype.reject = function(predicate, thisArg) {
+      predicate = getCallback(predicate, thisArg, 1);
+      return this.filter(function(value) {
+        return !predicate(value);
+      });
+    };
+
+    LazyWrapper.prototype.slice = function(start, end) {
+      start = start == null ? 0 : (+start || 0);
+
+      var result = this;
+      if (result.__filtered__ && (start > 0 || end < 0)) {
+        return new LazyWrapper(result);
+      }
+      if (start < 0) {
+        result = result.takeRight(-start);
+      } else if (start) {
+        result = result.drop(start);
+      }
+      if (end !== undefined) {
+        end = (+end || 0);
+        result = end < 0 ? result.dropRight(-end) : result.take(end - start);
+      }
+      return result;
+    };
+
+    LazyWrapper.prototype.takeRightWhile = function(predicate, thisArg) {
+      return this.reverse().takeWhile(predicate, thisArg).reverse();
+    };
+
+    LazyWrapper.prototype.toArray = function() {
+      return this.take(POSITIVE_INFINITY);
+    };
+
+    // Add `LazyWrapper` methods to `lodash.prototype`.
+    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
+      var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName),
+          retUnwrapped = /^(?:first|last)$/.test(methodName),
+          lodashFunc = lodash[retUnwrapped ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName];
+
+      if (!lodashFunc) {
+        return;
+      }
+      lodash.prototype[methodName] = function() {
+        var args = retUnwrapped ? [1] : arguments,
+            chainAll = this.__chain__,
+            value = this.__wrapped__,
+            isHybrid = !!this.__actions__.length,
+            isLazy = value instanceof LazyWrapper,
+            iteratee = args[0],
+            useLazy = isLazy || isArray(value);
+
+        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
+          // Avoid lazy use if the iteratee has a "length" value other than `1`.
+          isLazy = useLazy = false;
+        }
+        var interceptor = function(value) {
+          return (retUnwrapped && chainAll)
+            ? lodashFunc(value, 1)[0]
+            : lodashFunc.apply(undefined, arrayPush([value], args));
+        };
+
+        var action = { 'func': thru, 'args': [interceptor], 'thisArg': undefined },
+            onlyLazy = isLazy && !isHybrid;
+
+        if (retUnwrapped && !chainAll) {
+          if (onlyLazy) {
+            value = value.clone();
+            value.__actions__.push(action);
+            return func.call(value);
+          }
+          return lodashFunc.call(undefined, this.value())[0];
+        }
+        if (!retUnwrapped && useLazy) {
+          value = onlyLazy ? value : new LazyWrapper(this);
+          var result = func.apply(value, args);
+          result.__actions__.push(action);
+          return new LodashWrapper(result, chainAll);
+        }
+        return this.thru(interceptor);
+      };
+    });
+
+    // Add `Array` and `String` methods to `lodash.prototype`.
+    arrayEach(['join', 'pop', 'push', 'replace', 'shift', 'sort', 'splice', 'split', 'unshift'], function(methodName) {
+      var func = (/^(?:replace|split)$/.test(methodName) ? stringProto : arrayProto)[methodName],
+          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
+          retUnwrapped = /^(?:join|pop|replace|shift)$/.test(methodName);
+
+      lodash.prototype[methodName] = function() {
+        var args = arguments;
+        if (retUnwrapped && !this.__chain__) {
+          return func.apply(this.value(), args);
+        }
+        return this[chainName](function(value) {
+          return func.apply(value, args);
+        });
+      };
+    });
+
+    // Map minified function names to their real names.
+    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
+      var lodashFunc = lodash[methodName];
+      if (lodashFunc) {
+        var key = (lodashFunc.name + ''),
+            names = realNames[key] || (realNames[key] = []);
+
+        names.push({ 'name': methodName, 'func': lodashFunc });
+      }
+    });
+
+    realNames[createHybridWrapper(undefined, BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': undefined }];
+
+    // Add functions to the lazy wrapper.
+    LazyWrapper.prototype.clone = lazyClone;
+    LazyWrapper.prototype.reverse = lazyReverse;
+    LazyWrapper.prototype.value = lazyValue;
+
+    // Add chaining functions to the `lodash` wrapper.
+    lodash.prototype.chain = wrapperChain;
+    lodash.prototype.commit = wrapperCommit;
+    lodash.prototype.concat = wrapperConcat;
+    lodash.prototype.plant = wrapperPlant;
+    lodash.prototype.reverse = wrapperReverse;
+    lodash.prototype.toString = wrapperToString;
+    lodash.prototype.run = lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;
+
+    // Add function aliases to the `lodash` wrapper.
+    lodash.prototype.collect = lodash.prototype.map;
+    lodash.prototype.head = lodash.prototype.first;
+    lodash.prototype.select = lodash.prototype.filter;
+    lodash.prototype.tail = lodash.prototype.rest;
+
+    return lodash;
+  }
+
+  /*--------------------------------------------------------------------------*/
+
+  // Export lodash.
+  var _ = runInContext();
+
+  // Some AMD build optimizers like r.js check for condition patterns like the following:
+  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {
+    // Expose lodash to the global object when an AMD loader is present to avoid
+    // errors in cases where lodash is loaded by a script tag and not intended
+    // as an AMD module. See http://requirejs.org/docs/errors.html#mismatch for
+    // more details.
+    root._ = _;
+
+    // Define as an anonymous module so, through path mapping, it can be
+    // referenced as the "underscore" module.
+    define(function() {
+      return _;
+    });
+  }
+  // Check for `exports` after `define` in case a build optimizer adds an `exports` object.
+  else if (freeExports && freeModule) {
+    // Export for Node.js or RingoJS.
+    if (moduleExports) {
+      (freeModule.exports = _)._ = _;
+    }
+    // Export for Rhino with CommonJS support.
+    else {
+      freeExports._ = _;
+    }
+  }
+  else {
+    // Export for a browser or Rhino.
+    root._ = _;
+  }
+}.call(this));
diff --git a/public/bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.css b/public/bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.css
new file mode 100644
index 0000000..45152c1
--- /dev/null
+++ b/public/bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.css
@@ -0,0 +1,1267 @@
+/*
+== malihu jquery custom scrollbar plugin ==
+Plugin URI: http://manos.malihu.gr/jquery-custom-content-scroller
+*/
+
+
+
+/*
+CONTENTS: 
+	1. BASIC STYLE - Plugin's basic/essential CSS properties (normally, should not be edited). 
+	2. VERTICAL SCROLLBAR - Positioning and dimensions of vertical scrollbar. 
+	3. HORIZONTAL SCROLLBAR - Positioning and dimensions of horizontal scrollbar.
+	4. VERTICAL AND HORIZONTAL SCROLLBARS - Positioning and dimensions of 2-axis scrollbars. 
+	5. TRANSITIONS - CSS3 transitions for hover events, auto-expanded and auto-hidden scrollbars. 
+	6. SCROLLBAR COLORS, OPACITY AND BACKGROUNDS 
+		6.1 THEMES - Scrollbar colors, opacity, dimensions, backgrounds etc. via ready-to-use themes.
+*/
+
+
+
+/* 
+------------------------------------------------------------------------------------------------------------------------
+1. BASIC STYLE  
+------------------------------------------------------------------------------------------------------------------------
+*/
+
+	.mCustomScrollbar{ -ms-touch-action: pinch-zoom; touch-action: pinch-zoom; /* direct pointer events to js */ }
+	.mCustomScrollbar.mCS_no_scrollbar, .mCustomScrollbar.mCS_touch_action{ -ms-touch-action: auto; touch-action: auto; }
+	
+	.mCustomScrollBox{ /* contains plugin's markup */
+		position: relative;
+		overflow: hidden;
+		height: 100%;
+		max-width: 100%;
+		outline: none;
+		direction: ltr;
+	}
+
+	.mCSB_container{ /* contains the original content */
+		overflow: hidden;
+		width: auto;
+		height: auto;
+	}
+
+
+
+/* 
+------------------------------------------------------------------------------------------------------------------------
+2. VERTICAL SCROLLBAR 
+y-axis
+------------------------------------------------------------------------------------------------------------------------
+*/
+
+	.mCSB_inside > .mCSB_container{ margin-right: 30px; }
+
+	.mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{ margin-right: 0; } /* non-visible scrollbar */
+	
+	.mCS-dir-rtl > .mCSB_inside > .mCSB_container{ /* RTL direction/left-side scrollbar */
+		margin-right: 0;
+		margin-left: 30px;
+	}
+	
+	.mCS-dir-rtl > .mCSB_inside > .mCSB_container.mCS_no_scrollbar_y.mCS_y_hidden{ margin-left: 0; } /* RTL direction/left-side scrollbar */
+
+	.mCSB_scrollTools{ /* contains scrollbar markup (draggable element, dragger rail, buttons etc.) */
+		position: absolute;
+		width: 16px;
+		height: auto;
+		left: auto;
+		top: 0;
+		right: 0;
+		bottom: 0;
+	}
+
+	.mCSB_outside + .mCSB_scrollTools{ right: -26px; } /* scrollbar position: outside */
+	
+	.mCS-dir-rtl > .mCSB_inside > .mCSB_scrollTools, 
+	.mCS-dir-rtl > .mCSB_outside + .mCSB_scrollTools{ /* RTL direction/left-side scrollbar */
+		right: auto;
+		left: 0;
+	}
+	
+	.mCS-dir-rtl > .mCSB_outside + .mCSB_scrollTools{ left: -26px; } /* RTL direction/left-side scrollbar (scrollbar position: outside) */
+
+	.mCSB_scrollTools .mCSB_draggerContainer{ /* contains the draggable element and dragger rail markup */
+		position: absolute;
+		top: 0;
+		left: 0;
+		bottom: 0;
+		right: 0; 
+		height: auto;
+	}
+
+	.mCSB_scrollTools a + .mCSB_draggerContainer{ margin: 20px 0; }
+
+	.mCSB_scrollTools .mCSB_draggerRail{
+		width: 2px;
+		height: 100%;
+		margin: 0 auto;
+		-webkit-border-radius: 16px; -moz-border-radius: 16px; border-radius: 16px;
+	}
+
+	.mCSB_scrollTools .mCSB_dragger{ /* the draggable element */
+		cursor: pointer;
+		width: 100%;
+		height: 30px; /* minimum dragger height */
+		z-index: 1;
+	}
+
+	.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ /* the dragger element */
+		position: relative;
+		width: 4px;
+		height: 100%;
+		margin: 0 auto;
+		-webkit-border-radius: 16px; -moz-border-radius: 16px; border-radius: 16px;
+		text-align: center;
+	}
+	
+	.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar, 
+	.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{ width: 12px; /* auto-expanded scrollbar */ }
+	
+	.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, 
+	.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{ width: 8px; /* auto-expanded scrollbar */ }
+
+	.mCSB_scrollTools .mCSB_buttonUp,
+	.mCSB_scrollTools .mCSB_buttonDown{
+		display: block;
+		position: absolute;
+		height: 20px;
+		width: 100%;
+		overflow: hidden;
+		margin: 0 auto;
+		cursor: pointer;
+	}
+
+	.mCSB_scrollTools .mCSB_buttonDown{ bottom: 0; }
+
+
+
+/* 
+------------------------------------------------------------------------------------------------------------------------
+3. HORIZONTAL SCROLLBAR 
+x-axis
+------------------------------------------------------------------------------------------------------------------------
+*/
+
+	.mCSB_horizontal.mCSB_inside > .mCSB_container{
+		margin-right: 0;
+		margin-bottom: 30px;
+	}
+	
+	.mCSB_horizontal.mCSB_outside > .mCSB_container{ min-height: 100%; }
+
+	.mCSB_horizontal > .mCSB_container.mCS_no_scrollbar_x.mCS_x_hidden{ margin-bottom: 0; } /* non-visible scrollbar */
+
+	.mCSB_scrollTools.mCSB_scrollTools_horizontal{
+		width: auto;
+		height: 16px;
+		top: auto;
+		right: 0;
+		bottom: 0;
+		left: 0;
+	}
+
+	.mCustomScrollBox + .mCSB_scrollTools.mCSB_scrollTools_horizontal,
+	.mCustomScrollBox + .mCSB_scrollTools + .mCSB_scrollTools.mCSB_scrollTools_horizontal{ bottom: -26px; } /* scrollbar position: outside */
+
+	.mCSB_scrollTools.mCSB_scrollTools_horizontal a + .mCSB_draggerContainer{ margin: 0 20px; }
+
+	.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_draggerRail{
+		width: 100%;
+		height: 2px;
+		margin: 7px 0;
+	}
+
+	.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger{
+		width: 30px; /* minimum dragger width */
+		height: 100%;
+		left: 0;
+	}
+
+	.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
+		width: 100%;
+		height: 4px;
+		margin: 6px auto;
+	}
+	
+	.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar, 
+	.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{
+		height: 12px; /* auto-expanded scrollbar */
+		margin: 2px auto;
+	}
+	
+	.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, 
+	.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{
+		height: 8px; /* auto-expanded scrollbar */
+		margin: 4px 0;
+	}
+
+	.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft,
+	.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{
+		display: block;
+		position: absolute;
+		width: 20px;
+		height: 100%;
+		overflow: hidden;
+		margin: 0 auto;
+		cursor: pointer;
+	}
+	
+	.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonLeft{ left: 0; }
+
+	.mCSB_scrollTools.mCSB_scrollTools_horizontal .mCSB_buttonRight{ right: 0; }
+
+
+
+/* 
+------------------------------------------------------------------------------------------------------------------------
+4. VERTICAL AND HORIZONTAL SCROLLBARS 
+yx-axis 
+------------------------------------------------------------------------------------------------------------------------
+*/
+
+	.mCSB_container_wrapper{
+		position: absolute;
+		height: auto;
+		width: auto;
+		overflow: hidden;
+		top: 0;
+		left: 0;
+		right: 0;
+		bottom: 0;
+		margin-right: 30px;
+		margin-bottom: 30px;
+	}
+	
+	.mCSB_container_wrapper > .mCSB_container{
+		padding-right: 30px;
+		padding-bottom: 30px;
+		-webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box;
+	}
+	
+	.mCSB_vertical_horizontal > .mCSB_scrollTools.mCSB_scrollTools_vertical{ bottom: 20px; }
+	
+	.mCSB_vertical_horizontal > .mCSB_scrollTools.mCSB_scrollTools_horizontal{ right: 20px; }
+	
+	/* non-visible horizontal scrollbar */
+	.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden + .mCSB_scrollTools.mCSB_scrollTools_vertical{ bottom: 0; }
+	
+	/* non-visible vertical scrollbar/RTL direction/left-side scrollbar */
+	.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden + .mCSB_scrollTools ~ .mCSB_scrollTools.mCSB_scrollTools_horizontal, 
+	.mCS-dir-rtl > .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_scrollTools.mCSB_scrollTools_horizontal{ right: 0; }
+	
+	/* RTL direction/left-side scrollbar */
+	.mCS-dir-rtl > .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_scrollTools.mCSB_scrollTools_horizontal{ left: 20px; }
+	
+	/* non-visible scrollbar/RTL direction/left-side scrollbar */
+	.mCS-dir-rtl > .mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden + .mCSB_scrollTools ~ .mCSB_scrollTools.mCSB_scrollTools_horizontal{ left: 0; }
+	
+	.mCS-dir-rtl > .mCSB_inside > .mCSB_container_wrapper{ /* RTL direction/left-side scrollbar */
+		margin-right: 0;
+		margin-left: 30px;
+	}
+	
+	.mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden > .mCSB_container{ padding-right: 0; }
+	
+	.mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden > .mCSB_container{ padding-bottom: 0; }
+	
+	.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_container_wrapper.mCS_no_scrollbar_y.mCS_y_hidden{
+		margin-right: 0; /* non-visible scrollbar */
+		margin-left: 0;
+	}
+	
+	/* non-visible horizontal scrollbar */
+	.mCustomScrollBox.mCSB_vertical_horizontal.mCSB_inside > .mCSB_container_wrapper.mCS_no_scrollbar_x.mCS_x_hidden{ margin-bottom: 0; }
+
+
+
+/* 
+------------------------------------------------------------------------------------------------------------------------
+5. TRANSITIONS  
+------------------------------------------------------------------------------------------------------------------------
+*/
+
+	.mCSB_scrollTools, 
+	.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCSB_scrollTools .mCSB_buttonUp,
+	.mCSB_scrollTools .mCSB_buttonDown,
+	.mCSB_scrollTools .mCSB_buttonLeft,
+	.mCSB_scrollTools .mCSB_buttonRight{
+		-webkit-transition: opacity .2s ease-in-out, background-color .2s ease-in-out;
+		-moz-transition: opacity .2s ease-in-out, background-color .2s ease-in-out;
+		-o-transition: opacity .2s ease-in-out, background-color .2s ease-in-out;
+		transition: opacity .2s ease-in-out, background-color .2s ease-in-out;
+	}
+	
+	.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar, /* auto-expanded scrollbar */
+	.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail, 
+	.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger_bar, 
+	.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerRail{
+		-webkit-transition: width .2s ease-out .2s, height .2s ease-out .2s, 
+					margin-left .2s ease-out .2s, margin-right .2s ease-out .2s, 
+					margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s,
+					opacity .2s ease-in-out, background-color .2s ease-in-out; 
+		-moz-transition: width .2s ease-out .2s, height .2s ease-out .2s, 
+					margin-left .2s ease-out .2s, margin-right .2s ease-out .2s, 
+					margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s,
+					opacity .2s ease-in-out, background-color .2s ease-in-out; 
+		-o-transition: width .2s ease-out .2s, height .2s ease-out .2s, 
+					margin-left .2s ease-out .2s, margin-right .2s ease-out .2s, 
+					margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s,
+					opacity .2s ease-in-out, background-color .2s ease-in-out; 
+		transition: width .2s ease-out .2s, height .2s ease-out .2s, 
+					margin-left .2s ease-out .2s, margin-right .2s ease-out .2s, 
+					margin-top .2s ease-out .2s, margin-bottom .2s ease-out .2s,
+					opacity .2s ease-in-out, background-color .2s ease-in-out; 
+	}
+
+
+
+/* 
+------------------------------------------------------------------------------------------------------------------------
+6. SCROLLBAR COLORS, OPACITY AND BACKGROUNDS  
+------------------------------------------------------------------------------------------------------------------------
+*/
+
+	/* 
+	----------------------------------------
+	6.1 THEMES 
+	----------------------------------------
+	*/
+	
+	/* default theme ("light") */
+
+	.mCSB_scrollTools{ opacity: 0.75; filter: "alpha(opacity=75)"; -ms-filter: "alpha(opacity=75)"; }
+	
+	.mCS-autoHide > .mCustomScrollBox > .mCSB_scrollTools,
+	.mCS-autoHide > .mCustomScrollBox ~ .mCSB_scrollTools{ opacity: 0; filter: "alpha(opacity=0)"; -ms-filter: "alpha(opacity=0)"; }
+	
+	.mCustomScrollbar > .mCustomScrollBox > .mCSB_scrollTools.mCSB_scrollTools_onDrag,
+	.mCustomScrollbar > .mCustomScrollBox ~ .mCSB_scrollTools.mCSB_scrollTools_onDrag,
+	.mCustomScrollBox:hover > .mCSB_scrollTools,
+	.mCustomScrollBox:hover ~ .mCSB_scrollTools,
+	.mCS-autoHide:hover > .mCustomScrollBox > .mCSB_scrollTools,
+	.mCS-autoHide:hover > .mCustomScrollBox ~ .mCSB_scrollTools{ opacity: 1; filter: "alpha(opacity=100)"; -ms-filter: "alpha(opacity=100)"; }
+
+	.mCSB_scrollTools .mCSB_draggerRail{
+		background-color: #000; background-color: rgba(0,0,0,0.4);
+		filter: "alpha(opacity=40)"; -ms-filter: "alpha(opacity=40)"; 
+	}
+
+	.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
+		background-color: #fff; background-color: rgba(255,255,255,0.75);
+		filter: "alpha(opacity=75)"; -ms-filter: "alpha(opacity=75)"; 
+	}
+
+	.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{
+		background-color: #fff; background-color: rgba(255,255,255,0.85);
+		filter: "alpha(opacity=85)"; -ms-filter: "alpha(opacity=85)"; 
+	}
+	.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{
+		background-color: #fff; background-color: rgba(255,255,255,0.9);
+		filter: "alpha(opacity=90)"; -ms-filter: "alpha(opacity=90)"; 
+	}
+
+	.mCSB_scrollTools .mCSB_buttonUp,
+	.mCSB_scrollTools .mCSB_buttonDown,
+	.mCSB_scrollTools .mCSB_buttonLeft,
+	.mCSB_scrollTools .mCSB_buttonRight{
+		background-image: url(mCSB_buttons.png); /* css sprites */
+		background-repeat: no-repeat;
+		opacity: 0.4; filter: "alpha(opacity=40)"; -ms-filter: "alpha(opacity=40)"; 
+	}
+
+	.mCSB_scrollTools .mCSB_buttonUp{
+		background-position: 0 0;
+		/* 
+		sprites locations 
+		light: 0 0, -16px 0, -32px 0, -48px 0, 0 -72px, -16px -72px, -32px -72px
+		dark: -80px 0, -96px 0, -112px 0, -128px 0, -80px -72px, -96px -72px, -112px -72px
+		*/
+	}
+
+	.mCSB_scrollTools .mCSB_buttonDown{
+		background-position: 0 -20px;
+		/* 
+		sprites locations
+		light: 0 -20px, -16px -20px, -32px -20px, -48px -20px, 0 -92px, -16px -92px, -32px -92px
+		dark: -80px -20px, -96px -20px, -112px -20px, -128px -20px, -80px -92px, -96px -92px, -112 -92px
+		*/
+	}
+
+	.mCSB_scrollTools .mCSB_buttonLeft{
+		background-position: 0 -40px;
+		/* 
+		sprites locations 
+		light: 0 -40px, -20px -40px, -40px -40px, -60px -40px, 0 -112px, -20px -112px, -40px -112px
+		dark: -80px -40px, -100px -40px, -120px -40px, -140px -40px, -80px -112px, -100px -112px, -120px -112px
+		*/
+	}
+
+	.mCSB_scrollTools .mCSB_buttonRight{
+		background-position: 0 -56px;
+		/* 
+		sprites locations 
+		light: 0 -56px, -20px -56px, -40px -56px, -60px -56px, 0 -128px, -20px -128px, -40px -128px
+		dark: -80px -56px, -100px -56px, -120px -56px, -140px -56px, -80px -128px, -100px -128px, -120px -128px
+		*/
+	}
+
+	.mCSB_scrollTools .mCSB_buttonUp:hover,
+	.mCSB_scrollTools .mCSB_buttonDown:hover,
+	.mCSB_scrollTools .mCSB_buttonLeft:hover,
+	.mCSB_scrollTools .mCSB_buttonRight:hover{ opacity: 0.75; filter: "alpha(opacity=75)"; -ms-filter: "alpha(opacity=75)"; }
+
+	.mCSB_scrollTools .mCSB_buttonUp:active,
+	.mCSB_scrollTools .mCSB_buttonDown:active,
+	.mCSB_scrollTools .mCSB_buttonLeft:active,
+	.mCSB_scrollTools .mCSB_buttonRight:active{ opacity: 0.9; filter: "alpha(opacity=90)"; -ms-filter: "alpha(opacity=90)"; }
+	
+
+	/* theme: "dark" */
+
+	.mCS-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.15); }
+
+	.mCS-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); }
+
+	.mCS-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: rgba(0,0,0,0.85); }
+
+	.mCS-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: rgba(0,0,0,0.9); }
+
+	.mCS-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -80px 0; }
+
+	.mCS-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -80px -20px; }
+
+	.mCS-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -80px -40px; }
+
+	.mCS-dark.mCSB_scrollTools .mCSB_buttonRight{ background-position: -80px -56px; }
+	
+	/* ---------------------------------------- */
+	
+
+
+	/* theme: "light-2", "dark-2" */
+
+	.mCS-light-2.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail{
+		width: 4px;
+		background-color: #fff; background-color: rgba(255,255,255,0.1);
+		-webkit-border-radius: 1px; -moz-border-radius: 1px; border-radius: 1px;
+	}
+
+	.mCS-light-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
+		width: 4px;
+		background-color: #fff; background-color: rgba(255,255,255,0.75);
+		-webkit-border-radius: 1px; -moz-border-radius: 1px; border-radius: 1px;
+	}
+
+	.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_draggerRail, 
+	.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_draggerRail, 
+	.mCS-light-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-dark-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
+		width: 100%;
+		height: 4px;
+		margin: 6px auto;
+	}
+
+	.mCS-light-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.85); }
+
+	.mCS-light-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-light-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.9); }
+
+	.mCS-light-2.mCSB_scrollTools .mCSB_buttonUp{ background-position: -32px 0; }
+
+	.mCS-light-2.mCSB_scrollTools .mCSB_buttonDown{	background-position: -32px -20px; }
+
+	.mCS-light-2.mCSB_scrollTools .mCSB_buttonLeft{	background-position: -40px -40px; }
+
+	.mCS-light-2.mCSB_scrollTools .mCSB_buttonRight{ background-position: -40px -56px; }
+	
+	
+	/* theme: "dark-2" */
+
+	.mCS-dark-2.mCSB_scrollTools .mCSB_draggerRail{
+		background-color: #000; background-color: rgba(0,0,0,0.1);
+		-webkit-border-radius: 1px; -moz-border-radius: 1px; border-radius: 1px;
+	}
+
+	.mCS-dark-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
+		background-color: #000; background-color: rgba(0,0,0,0.75);
+		-webkit-border-radius: 1px; -moz-border-radius: 1px; border-radius: 1px;
+	}
+
+	.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); }
+
+	.mCS-dark-2.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-dark-2.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); }
+
+	.mCS-dark-2.mCSB_scrollTools .mCSB_buttonUp{ background-position: -112px 0; }
+
+	.mCS-dark-2.mCSB_scrollTools .mCSB_buttonDown{ background-position: -112px -20px; }
+
+	.mCS-dark-2.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -120px -40px; }
+
+	.mCS-dark-2.mCSB_scrollTools .mCSB_buttonRight{	background-position: -120px -56px; }
+	
+	/* ---------------------------------------- */
+	
+
+
+	/* theme: "light-thick", "dark-thick" */
+
+	.mCS-light-thick.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail{
+		width: 4px;
+		background-color: #fff; background-color: rgba(255,255,255,0.1);
+		-webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px;
+	}
+
+	.mCS-light-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
+		width: 6px;
+		background-color: #fff; background-color: rgba(255,255,255,0.75);
+		-webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px;
+	}
+
+	.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail, 
+	.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_draggerRail{
+		width: 100%;
+		height: 4px;
+		margin: 6px 0;
+	}
+
+	.mCS-light-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-dark-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
+		width: 100%;
+		height: 6px;
+		margin: 5px auto;
+	}
+
+	.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.85); }
+
+	.mCS-light-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-light-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.9); }
+
+	.mCS-light-thick.mCSB_scrollTools .mCSB_buttonUp{ background-position: -16px 0; }
+
+	.mCS-light-thick.mCSB_scrollTools .mCSB_buttonDown{	background-position: -16px -20px; }
+
+	.mCS-light-thick.mCSB_scrollTools .mCSB_buttonLeft{	background-position: -20px -40px; }
+
+	.mCS-light-thick.mCSB_scrollTools .mCSB_buttonRight{ background-position: -20px -56px; }
+
+
+	/* theme: "dark-thick" */
+	
+	.mCS-dark-thick.mCSB_scrollTools .mCSB_draggerRail{
+		background-color: #000; background-color: rgba(0,0,0,0.1);
+		-webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px;
+	}
+
+	.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
+		background-color: #000; background-color: rgba(0,0,0,0.75);
+		-webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px;
+	}
+
+	.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); }
+
+	.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-dark-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); }
+
+	.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonUp{ background-position: -96px 0; }
+
+	.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonDown{ background-position: -96px -20px; }
+
+	.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -100px -40px; }
+
+	.mCS-dark-thick.mCSB_scrollTools .mCSB_buttonRight{	background-position: -100px -56px; }
+	
+	/* ---------------------------------------- */
+	
+
+
+	/* theme: "light-thin", "dark-thin" */
+	
+	.mCS-light-thin.mCSB_scrollTools .mCSB_draggerRail{ background-color: #fff; background-color: rgba(255,255,255,0.1); }
+
+	.mCS-light-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ width: 2px; }
+
+	.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail, 
+	.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_draggerRail{ width: 100%; }
+
+	.mCS-light-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-dark-thin.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
+		width: 100%;
+		height: 2px;
+		margin: 7px auto;
+	}
+
+
+	/* theme "dark-thin" */
+	
+	.mCS-dark-thin.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.15); }
+
+	.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); }
+	
+	.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); }
+	
+	.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-dark-thin.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); }
+	
+	.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonUp{	background-position: -80px 0; }
+
+	.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonDown{ background-position: -80px -20px; }
+
+	.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -80px -40px; }
+
+	.mCS-dark-thin.mCSB_scrollTools .mCSB_buttonRight{ background-position: -80px -56px; }
+	
+	/* ---------------------------------------- */
+	
+	
+	
+	/* theme "rounded", "rounded-dark", "rounded-dots", "rounded-dots-dark" */
+	
+	.mCS-rounded.mCSB_scrollTools .mCSB_draggerRail{ background-color: #fff; background-color: rgba(255,255,255,0.15); }
+	
+	.mCS-rounded.mCSB_scrollTools .mCSB_dragger, 
+	.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger, 
+	.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger, 
+	.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger{ height: 14px; }
+	
+	.mCS-rounded.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-rounded-dots.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
+		width: 14px;
+		margin: 0 1px;
+	}
+	
+	.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger, 
+	.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger, 
+	.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger, 
+	.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger{ width: 14px; }
+	
+	.mCS-rounded.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-rounded-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
+		height: 14px;
+		margin: 1px 0;
+	}
+	
+	.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar, 
+	.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar, 
+	.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{
+		width: 16px; /* auto-expanded scrollbar */
+		height: 16px;
+		margin: -1px 0;
+	}
+	
+	.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, 
+	.mCS-rounded.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail, 
+	.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, 
+	.mCS-rounded-dark.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{ width: 4px; /* auto-expanded scrollbar */ }
+	
+	.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar, 
+	.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded .mCSB_dragger_bar, 
+	.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_dragger .mCSB_dragger_bar{
+		height: 16px; /* auto-expanded scrollbar */
+		width: 16px;
+		margin: 0 -1px;
+	}
+	
+	.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, 
+	.mCS-rounded.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail, 
+	.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, 
+	.mCS-rounded-dark.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{
+		height: 4px; /* auto-expanded scrollbar */
+		margin: 6px 0;
+	}
+	
+	.mCS-rounded.mCSB_scrollTools .mCSB_buttonUp{ background-position: 0 -72px; }
+	
+	.mCS-rounded.mCSB_scrollTools .mCSB_buttonDown{ background-position: 0 -92px; }
+	
+	.mCS-rounded.mCSB_scrollTools .mCSB_buttonLeft{ background-position: 0 -112px; }
+	
+	.mCS-rounded.mCSB_scrollTools .mCSB_buttonRight{ background-position: 0 -128px; }
+	
+	
+	/* theme "rounded-dark", "rounded-dots-dark" */
+	
+	.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); }
+	
+	.mCS-rounded-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.15); }
+	
+	.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar, 
+	.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); }
+	
+	.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-rounded-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar, 
+	.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); }
+	
+	.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -80px -72px; }
+	
+	.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -80px -92px; }
+	
+	.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -80px -112px; }
+	
+	.mCS-rounded-dark.mCSB_scrollTools .mCSB_buttonRight{ background-position: -80px -128px; }
+	
+	
+	/* theme "rounded-dots", "rounded-dots-dark" */
+	
+	.mCS-rounded-dots.mCSB_scrollTools_vertical .mCSB_draggerRail, 
+	.mCS-rounded-dots-dark.mCSB_scrollTools_vertical .mCSB_draggerRail{ width: 4px; }
+	
+	.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail, 
+	.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{
+		background-color: transparent;
+		background-position: center;
+	}
+	
+	.mCS-rounded-dots.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail{
+		background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAANElEQVQYV2NkIAAYiVbw//9/Y6DiM1ANJoyMjGdBbLgJQAX/kU0DKgDLkaQAvxW4HEvQFwCRcxIJK1XznAAAAABJRU5ErkJggg==");
+		background-repeat: repeat-y;
+		opacity: 0.3;
+		filter: "alpha(opacity=30)"; -ms-filter: "alpha(opacity=30)"; 
+	}
+	
+	.mCS-rounded-dots.mCSB_scrollTools_horizontal .mCSB_draggerRail, 
+	.mCS-rounded-dots-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{
+		height: 4px;
+		margin: 6px 0;
+		background-repeat: repeat-x;
+	}
+	
+	.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonUp{ background-position: -16px -72px; }
+	
+	.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonDown{ background-position: -16px -92px; }
+	
+	.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -20px -112px; }
+	
+	.mCS-rounded-dots.mCSB_scrollTools .mCSB_buttonRight{ background-position: -20px -128px; }
+	
+	
+	/* theme "rounded-dots-dark" */
+	
+	.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_draggerRail{
+		background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAALElEQVQYV2NkIAAYSVFgDFR8BqrBBEifBbGRTfiPZhpYjiQFBK3A6l6CvgAAE9kGCd1mvgEAAAAASUVORK5CYII=");
+	}
+	
+	.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -96px -72px; }
+	
+	.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -96px -92px; }
+	
+	.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -100px -112px; }
+	
+	.mCS-rounded-dots-dark.mCSB_scrollTools .mCSB_buttonRight{ background-position: -100px -128px; }
+	
+	/* ---------------------------------------- */
+	
+	
+	
+	/* theme "3d", "3d-dark", "3d-thick", "3d-thick-dark" */
+	
+	.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
+		background-repeat: repeat-y;
+		background-image: -moz-linear-gradient(left, rgba(255,255,255,0.5) 0%, rgba(255,255,255,0) 100%);
+		background-image: -webkit-gradient(linear, left top, right top, color-stop(0%,rgba(255,255,255,0.5)), color-stop(100%,rgba(255,255,255,0)));
+		background-image: -webkit-linear-gradient(left, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%);
+		background-image: -o-linear-gradient(left, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%);
+		background-image: -ms-linear-gradient(left, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%);
+		background-image: linear-gradient(to right, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%);
+	}
+	
+	.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
+		background-repeat: repeat-x;
+		background-image: -moz-linear-gradient(top, rgba(255,255,255,0.5) 0%, rgba(255,255,255,0) 100%);
+		background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0.5)), color-stop(100%,rgba(255,255,255,0)));
+		background-image: -webkit-linear-gradient(top, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%);
+		background-image: -o-linear-gradient(top, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%);
+		background-image: -ms-linear-gradient(top, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%);
+		background-image: linear-gradient(to bottom, rgba(255,255,255,0.5) 0%,rgba(255,255,255,0) 100%);
+	}
+	
+	
+	/* theme "3d", "3d-dark" */
+	
+	.mCS-3d.mCSB_scrollTools_vertical .mCSB_dragger, 
+	.mCS-3d-dark.mCSB_scrollTools_vertical .mCSB_dragger{ height: 70px; }
+	
+	.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger, 
+	.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger{ width: 70px; }
+	
+	.mCS-3d.mCSB_scrollTools, 
+	.mCS-3d-dark.mCSB_scrollTools{
+		opacity: 1;
+		filter: "alpha(opacity=30)"; -ms-filter: "alpha(opacity=30)"; 
+	}
+	
+	.mCS-3d.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ -webkit-border-radius: 16px; -moz-border-radius: 16px; border-radius: 16px; }
+	
+	.mCS-3d.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail{
+		width: 8px;
+		background-color: #000; background-color: rgba(0,0,0,0.2);
+		box-shadow: inset 1px 0 1px rgba(0,0,0,0.5), inset -1px 0 1px rgba(255,255,255,0.2);
+	}
+	
+	.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 	 
+	.mCS-3d.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar, 
+	.mCS-3d.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-3d.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar, 
+	.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar, 
+	.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #555; }
+
+	.mCS-3d.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-3d-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ width: 8px; }
+
+	.mCS-3d.mCSB_scrollTools_horizontal .mCSB_draggerRail, 
+	.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{
+		width: 100%;
+		height: 8px;
+		margin: 4px 0;
+		box-shadow: inset 0 1px 1px rgba(0,0,0,0.5), inset 0 -1px 1px rgba(255,255,255,0.2);
+	}
+
+	.mCS-3d.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
+		width: 100%;
+		height: 8px;
+		margin: 4px auto;
+	}
+	
+	.mCS-3d.mCSB_scrollTools .mCSB_buttonUp{ background-position: -32px -72px; }
+	
+	.mCS-3d.mCSB_scrollTools .mCSB_buttonDown{ background-position: -32px -92px; }
+	
+	.mCS-3d.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -40px -112px; }
+	
+	.mCS-3d.mCSB_scrollTools .mCSB_buttonRight{ background-position: -40px -128px; }
+	
+	
+	/* theme "3d-dark" */
+	
+	.mCS-3d-dark.mCSB_scrollTools .mCSB_draggerRail{
+		background-color: #000; background-color: rgba(0,0,0,0.1);
+		box-shadow: inset 1px 0 1px rgba(0,0,0,0.1);
+	}
+	
+	.mCS-3d-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{ box-shadow: inset 0 1px 1px rgba(0,0,0,0.1); }
+	
+	.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -112px -72px; }
+
+	.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -112px -92px; }
+
+	.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -120px -112px; }
+
+	.mCS-3d-dark.mCSB_scrollTools .mCSB_buttonRight{	background-position: -120px -128px; }
+	
+	/* ---------------------------------------- */
+	
+	
+	
+	/* theme: "3d-thick", "3d-thick-dark" */
+	
+	.mCS-3d-thick.mCSB_scrollTools, 
+	.mCS-3d-thick-dark.mCSB_scrollTools{
+		opacity: 1;
+		filter: "alpha(opacity=30)"; -ms-filter: "alpha(opacity=30)"; 
+	}
+	
+	.mCS-3d-thick.mCSB_scrollTools, 
+	.mCS-3d-thick-dark.mCSB_scrollTools, 
+	.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer, 
+	.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer{ -webkit-border-radius: 7px; -moz-border-radius: 7px; border-radius: 7px; }
+	
+	.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; }
+	
+	.mCSB_inside + .mCS-3d-thick.mCSB_scrollTools_vertical, 
+	.mCSB_inside + .mCS-3d-thick-dark.mCSB_scrollTools_vertical{ right: 1px; }
+	
+	.mCS-3d-thick.mCSB_scrollTools_vertical, 
+	.mCS-3d-thick-dark.mCSB_scrollTools_vertical{ box-shadow: inset 1px 0 1px rgba(0,0,0,0.1), inset 0 0 14px rgba(0,0,0,0.5); }
+	
+	.mCS-3d-thick.mCSB_scrollTools_horizontal, 
+	.mCS-3d-thick-dark.mCSB_scrollTools_horizontal{
+		bottom: 1px;
+		box-shadow: inset 0 1px 1px rgba(0,0,0,0.1), inset 0 0 14px rgba(0,0,0,0.5);
+	}
+	
+	.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
+		box-shadow: inset 1px 0 0 rgba(255,255,255,0.4);
+		width: 12px;
+		margin: 2px;
+		position: absolute;
+		height: auto;
+		top: 0;
+		bottom: 0;
+		left: 0;
+		right: 0;
+	}
+	
+	.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{ box-shadow: inset 0 1px 0 rgba(255,255,255,0.4); }
+	
+	.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,  
+	.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar, 
+	.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-3d-thick.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #555; }
+	
+	.mCS-3d-thick.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
+		height: 12px;
+		width: auto;
+	}
+	
+	.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerContainer{
+		background-color: #000; background-color: rgba(0,0,0,0.05);
+		box-shadow: inset 1px 1px 16px rgba(0,0,0,0.1);
+	}
+	
+	.mCS-3d-thick.mCSB_scrollTools .mCSB_draggerRail{ background-color: transparent; }
+	
+	.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonUp{ background-position: -32px -72px; }
+	
+	.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonDown{ background-position: -32px -92px; }
+
+	.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -40px -112px; }
+
+	.mCS-3d-thick.mCSB_scrollTools .mCSB_buttonRight{	background-position: -40px -128px; }
+	
+	
+	/* theme: "3d-thick-dark" */
+	
+	.mCS-3d-thick-dark.mCSB_scrollTools{ box-shadow: inset 0 0 14px rgba(0,0,0,0.2); }
+	
+	.mCS-3d-thick-dark.mCSB_scrollTools_horizontal{ box-shadow: inset 0 1px 1px rgba(0,0,0,0.1), inset 0 0 14px rgba(0,0,0,0.2); }
+	
+	.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ box-shadow: inset 1px 0 0 rgba(255,255,255,0.4), inset -1px 0 0 rgba(0,0,0,0.2); }
+	 
+	.mCS-3d-thick-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{ box-shadow: inset 0 1px 0 rgba(255,255,255,0.4), inset 0 -1px 0 rgba(0,0,0,0.2); }
+	
+	.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar,  
+	.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar, 
+	.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #777; }
+	
+	.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerContainer{
+		background-color: #fff; background-color: rgba(0,0,0,0.05);
+		box-shadow: inset 1px 1px 16px rgba(0,0,0,0.1);
+	}
+	
+	.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: transparent; }
+	
+	.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -112px -72px; }
+	
+	.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -112px -92px; }
+
+	.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -120px -112px; }
+
+	.mCS-3d-thick-dark.mCSB_scrollTools .mCSB_buttonRight{	background-position: -120px -128px; }
+	
+	/* ---------------------------------------- */
+	
+	
+	
+	/* theme: "minimal", "minimal-dark" */
+	
+	.mCSB_outside + .mCS-minimal.mCSB_scrollTools_vertical, 
+	.mCSB_outside + .mCS-minimal-dark.mCSB_scrollTools_vertical{
+		right: 0; 
+		margin: 12px 0; 
+	}
+	
+	.mCustomScrollBox.mCS-minimal + .mCSB_scrollTools.mCSB_scrollTools_horizontal, 
+	.mCustomScrollBox.mCS-minimal + .mCSB_scrollTools + .mCSB_scrollTools.mCSB_scrollTools_horizontal, 
+	.mCustomScrollBox.mCS-minimal-dark + .mCSB_scrollTools.mCSB_scrollTools_horizontal, 
+	.mCustomScrollBox.mCS-minimal-dark + .mCSB_scrollTools + .mCSB_scrollTools.mCSB_scrollTools_horizontal{
+		bottom: 0; 
+		margin: 0 12px; 
+	}
+	
+	/* RTL direction/left-side scrollbar */
+	.mCS-dir-rtl > .mCSB_outside + .mCS-minimal.mCSB_scrollTools_vertical, 
+	.mCS-dir-rtl > .mCSB_outside + .mCS-minimal-dark.mCSB_scrollTools_vertical{
+		left: 0; 
+		right: auto;
+	}
+	
+	.mCS-minimal.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-minimal-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: transparent; }
+	
+	.mCS-minimal.mCSB_scrollTools_vertical .mCSB_dragger, 
+	.mCS-minimal-dark.mCSB_scrollTools_vertical .mCSB_dragger{ height: 50px; }
+	
+	.mCS-minimal.mCSB_scrollTools_horizontal .mCSB_dragger, 
+	.mCS-minimal-dark.mCSB_scrollTools_horizontal .mCSB_dragger{ width: 50px; }
+	
+	.mCS-minimal.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
+		background-color: #fff; background-color: rgba(255,255,255,0.2);
+		filter: "alpha(opacity=20)"; -ms-filter: "alpha(opacity=20)"; 
+	}
+	
+	.mCS-minimal.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-minimal.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{
+		background-color: #fff; background-color: rgba(255,255,255,0.5);
+		filter: "alpha(opacity=50)"; -ms-filter: "alpha(opacity=50)"; 
+	}
+	
+	
+	/* theme: "minimal-dark" */
+	
+	.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{
+		background-color: #000; background-color: rgba(0,0,0,0.2);
+		filter: "alpha(opacity=20)"; -ms-filter: "alpha(opacity=20)"; 
+	}
+	
+	.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-minimal-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{
+		background-color: #000; background-color: rgba(0,0,0,0.5);
+		filter: "alpha(opacity=50)"; -ms-filter: "alpha(opacity=50)"; 
+	}
+	
+	/* ---------------------------------------- */
+	
+	
+	
+	/* theme "light-3", "dark-3" */
+	
+	.mCS-light-3.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail{
+		width: 6px;
+		background-color: #000; background-color: rgba(0,0,0,0.2);
+	}
+
+	.mCS-light-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ width: 6px; }
+
+	.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-light-3.mCSB_scrollTools_horizontal .mCSB_draggerRail, 
+	.mCS-dark-3.mCSB_scrollTools_horizontal .mCSB_draggerRail{
+		width: 100%;
+		height: 6px;
+		margin: 5px 0;
+	}
+	
+	.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, 
+	.mCS-light-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail, 
+	.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, 
+	.mCS-dark-3.mCSB_scrollTools_vertical.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{
+		width: 12px;
+	}
+	
+	.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, 
+	.mCS-light-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail, 
+	.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_dragger.mCSB_dragger_onDrag_expanded + .mCSB_draggerRail, 
+	.mCS-dark-3.mCSB_scrollTools_horizontal.mCSB_scrollTools_onDrag_expand .mCSB_draggerContainer:hover .mCSB_draggerRail{
+		height: 12px;
+		margin: 2px 0;
+	}
+	
+	.mCS-light-3.mCSB_scrollTools .mCSB_buttonUp{ background-position: -32px -72px; }
+	
+	.mCS-light-3.mCSB_scrollTools .mCSB_buttonDown{ background-position: -32px -92px; }
+	
+	.mCS-light-3.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -40px -112px; }
+	
+	.mCS-light-3.mCSB_scrollTools .mCSB_buttonRight{ background-position: -40px -128px; }
+	
+	
+	/* theme "dark-3" */
+	
+	.mCS-dark-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); }
+
+	.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); }
+
+	.mCS-dark-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-dark-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); }
+	
+	.mCS-dark-3.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.1); }
+	
+	.mCS-dark-3.mCSB_scrollTools .mCSB_buttonUp{ background-position: -112px -72px; }
+
+	.mCS-dark-3.mCSB_scrollTools .mCSB_buttonDown{ background-position: -112px -92px; }
+
+	.mCS-dark-3.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -120px -112px; }
+
+	.mCS-dark-3.mCSB_scrollTools .mCSB_buttonRight{	background-position: -120px -128px; }
+	
+	/* ---------------------------------------- */
+	
+	
+	
+	/* theme "inset", "inset-dark", "inset-2", "inset-2-dark", "inset-3", "inset-3-dark" */
+	
+	.mCS-inset.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{
+		width: 12px;
+		background-color: #000; background-color: rgba(0,0,0,0.2);
+	}
+
+	.mCS-inset.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-inset-2.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ 
+		width: 6px;
+		margin: 3px 5px;
+		position: absolute;
+		height: auto;
+		top: 0;
+		bottom: 0;
+		left: 0;
+		right: 0;
+	}
+
+	.mCS-inset.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_dragger .mCSB_dragger_bar{
+		height: 6px;
+		margin: 5px 3px;
+		position: absolute;
+		width: auto;
+		top: 0;
+		bottom: 0;
+		left: 0;
+		right: 0;
+	}
+	
+	.mCS-inset.mCSB_scrollTools_horizontal .mCSB_draggerRail, 
+	.mCS-inset-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail, 
+	.mCS-inset-2.mCSB_scrollTools_horizontal .mCSB_draggerRail, 
+	.mCS-inset-2-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail, 
+	.mCS-inset-3.mCSB_scrollTools_horizontal .mCSB_draggerRail, 
+	.mCS-inset-3-dark.mCSB_scrollTools_horizontal .mCSB_draggerRail{
+		width: 100%;
+		height: 12px;
+		margin: 2px 0;
+	}
+	
+	.mCS-inset.mCSB_scrollTools .mCSB_buttonUp, 
+	.mCS-inset-2.mCSB_scrollTools .mCSB_buttonUp, 
+	.mCS-inset-3.mCSB_scrollTools .mCSB_buttonUp{ background-position: -32px -72px; }
+	
+	.mCS-inset.mCSB_scrollTools .mCSB_buttonDown, 
+	.mCS-inset-2.mCSB_scrollTools .mCSB_buttonDown, 
+	.mCS-inset-3.mCSB_scrollTools .mCSB_buttonDown{ background-position: -32px -92px; }
+	
+	.mCS-inset.mCSB_scrollTools .mCSB_buttonLeft, 
+	.mCS-inset-2.mCSB_scrollTools .mCSB_buttonLeft, 
+	.mCS-inset-3.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -40px -112px; }
+	
+	.mCS-inset.mCSB_scrollTools .mCSB_buttonRight, 
+	.mCS-inset-2.mCSB_scrollTools .mCSB_buttonRight, 
+	.mCS-inset-3.mCSB_scrollTools .mCSB_buttonRight{ background-position: -40px -128px; }
+	
+	
+	/* theme "inset-dark", "inset-2-dark", "inset-3-dark" */
+	
+	.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar, 
+	.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); }
+
+	.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar, 
+	.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar, 
+	.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); }
+
+	.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-inset-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar, 
+	.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-inset-2-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar, 
+	.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); }
+	
+	.mCS-inset-dark.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.1); }
+	
+	.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonUp, 
+	.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonUp, 
+	.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonUp{ background-position: -112px -72px; }
+
+	.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonDown, 
+	.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonDown, 
+	.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonDown{ background-position: -112px -92px; }
+
+	.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonLeft, 
+	.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonLeft, 
+	.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonLeft{ background-position: -120px -112px; }
+
+	.mCS-inset-dark.mCSB_scrollTools .mCSB_buttonRight, 
+	.mCS-inset-2-dark.mCSB_scrollTools .mCSB_buttonRight, 
+	.mCS-inset-3-dark.mCSB_scrollTools .mCSB_buttonRight{	background-position: -120px -128px; }
+	
+	
+	/* theme "inset-2", "inset-2-dark" */
+	
+	.mCS-inset-2.mCSB_scrollTools .mCSB_draggerRail, 
+	.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail{
+		background-color: transparent;
+		border-width: 1px;
+		border-style: solid;
+		border-color: #fff;
+		border-color: rgba(255,255,255,0.2);
+		-webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box;
+	}
+	
+	.mCS-inset-2-dark.mCSB_scrollTools .mCSB_draggerRail{ border-color: #000; border-color: rgba(0,0,0,0.2); }
+	
+	
+	/* theme "inset-3", "inset-3-dark" */
+	
+	.mCS-inset-3.mCSB_scrollTools .mCSB_draggerRail{ background-color: #fff; background-color: rgba(255,255,255,0.6); }
+	
+	.mCS-inset-3-dark.mCSB_scrollTools .mCSB_draggerRail{ background-color: #000; background-color: rgba(0,0,0,0.6); }
+	
+	.mCS-inset-3.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.75); }
+	
+	.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.85); }
+	
+	.mCS-inset-3.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-inset-3.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #000; background-color: rgba(0,0,0,0.9); }
+	
+	.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.75); }
+	
+	.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:hover .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.85); }
+	
+	.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger:active .mCSB_dragger_bar,
+	.mCS-inset-3-dark.mCSB_scrollTools .mCSB_dragger.mCSB_dragger_onDrag .mCSB_dragger_bar{ background-color: #fff; background-color: rgba(255,255,255,0.9); }
+	
+	/* ---------------------------------------- */
diff --git a/public/bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.js b/public/bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.js
new file mode 100644
index 0000000..5106f9f
--- /dev/null
+++ b/public/bower_components/malihu-custom-scrollbar-plugin/jquery.mCustomScrollbar.js
@@ -0,0 +1,2425 @@
+/*
+== malihu jquery custom scrollbar plugin == 
+Version: 3.1.3 
+Plugin URI: http://manos.malihu.gr/jquery-custom-content-scroller 
+Author: malihu
+Author URI: http://manos.malihu.gr
+License: MIT License (MIT)
+*/
+
+/*
+Copyright Manos Malihutsakis (email: [email-masked])
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+
+/*
+The code below is fairly long, fully commented and should be normally used in development. 
+For production, use either the minified jquery.mCustomScrollbar.min.js script or 
+the production-ready jquery.mCustomScrollbar.concat.min.js which contains the plugin 
+and dependencies (minified). 
+*/
+
+(function(factory){
+	if(typeof module!=="undefined" && module.exports){
+		module.exports=factory;
+	}else{
+		factory(jQuery,window,document);
+	}
+}(function($){
+(function(init){
+	var _rjs=typeof define==="function" && define.amd, /* RequireJS */
+		_njs=typeof module !== "undefined" && module.exports, /* NodeJS */
+		_dlp=("https:"==document.location.protocol) ? "https:" : "http:", /* location protocol */
+		_url="cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.13/jquery.mousewheel.min.js";
+	if(!_rjs){
+		if(_njs){
+			require("jquery-mousewheel")($);
+		}else{
+			/* load jquery-mousewheel plugin (via CDN) if it's not present or not loaded via RequireJS 
+			(works when mCustomScrollbar fn is called on window load) */
+			$.event.special.mousewheel || $("head").append(decodeURI("%3Cscript src="+_dlp+"//"+_url+"%3E%3C/script%3E"));
+		}
+	}
+	init();
+}(function(){
+	
+	/* 
+	----------------------------------------
+	PLUGIN NAMESPACE, PREFIX, DEFAULT SELECTOR(S) 
+	----------------------------------------
+	*/
+	
+	var pluginNS="mCustomScrollbar",
+		pluginPfx="mCS",
+		defaultSelector=".mCustomScrollbar",
+	
+	
+		
+	
+	
+	/* 
+	----------------------------------------
+	DEFAULT OPTIONS 
+	----------------------------------------
+	*/
+	
+		defaults={
+			/*
+			set element/content width/height programmatically 
+			values: boolean, pixels, percentage 
+				option						default
+				-------------------------------------
+				setWidth					false
+				setHeight					false
+			*/
+			/*
+			set the initial css top property of content  
+			values: string (e.g. "-100px", "10%" etc.)
+			*/
+			setTop:0,
+			/*
+			set the initial css left property of content  
+			values: string (e.g. "-100px", "10%" etc.)
+			*/
+			setLeft:0,
+			/* 
+			scrollbar axis (vertical and/or horizontal scrollbars) 
+			values (string): "y", "x", "yx"
+			*/
+			axis:"y",
+			/*
+			position of scrollbar relative to content  
+			values (string): "inside", "outside" ("outside" requires elements with position:relative)
+			*/
+			scrollbarPosition:"inside",
+			/*
+			scrolling inertia
+			values: integer (milliseconds)
+			*/
+			scrollInertia:950,
+			/* 
+			auto-adjust scrollbar dragger length
+			values: boolean
+			*/
+			autoDraggerLength:true,
+			/*
+			auto-hide scrollbar when idle 
+			values: boolean
+				option						default
+				-------------------------------------
+				autoHideScrollbar			false
+			*/
+			/*
+			auto-expands scrollbar on mouse-over and dragging
+			values: boolean
+				option						default
+				-------------------------------------
+				autoExpandScrollbar			false
+			*/
+			/*
+			always show scrollbar, even when there's nothing to scroll 
+			values: integer (0=disable, 1=always show dragger rail and buttons, 2=always show dragger rail, dragger and buttons), boolean
+			*/
+			alwaysShowScrollbar:0,
+			/*
+			scrolling always snaps to a multiple of this number in pixels
+			values: integer, array ([y,x])
+				option						default
+				-------------------------------------
+				snapAmount					null
+			*/
+			/*
+			when snapping, snap with this number in pixels as an offset 
+			values: integer
+			*/
+			snapOffset:0,
+			/* 
+			mouse-wheel scrolling
+			*/
+			mouseWheel:{
+				/* 
+				enable mouse-wheel scrolling
+				values: boolean
+				*/
+				enable:true,
+				/* 
+				scrolling amount in pixels
+				values: "auto", integer 
+				*/
+				scrollAmount:"auto",
+				/* 
+				mouse-wheel scrolling axis 
+				the default scrolling direction when both vertical and horizontal scrollbars are present 
+				values (string): "y", "x" 
+				*/
+				axis:"y",
+				/* 
+				prevent the default behaviour which automatically scrolls the parent element(s) when end of scrolling is reached 
+				values: boolean
+					option						default
+					-------------------------------------
+					preventDefault				null
+				*/
+				/*
+				the reported mouse-wheel delta value. The number of lines (translated to pixels) one wheel notch scrolls.  
+				values: "auto", integer 
+				"auto" uses the default OS/browser value 
+				*/
+				deltaFactor:"auto",
+				/*
+				normalize mouse-wheel delta to -1 or 1 (disables mouse-wheel acceleration) 
+				values: boolean
+					option						default
+					-------------------------------------
+					normalizeDelta				null
+				*/
+				/*
+				invert mouse-wheel scrolling direction 
+				values: boolean
+					option						default
+					-------------------------------------
+					invert						null
+				*/
+				/*
+				the tags that disable mouse-wheel when cursor is over them
+				*/
+				disableOver:["select","option","keygen","datalist","textarea"]
+			},
+			/* 
+			scrollbar buttons
+			*/
+			scrollButtons:{ 
+				/*
+				enable scrollbar buttons
+				values: boolean
+					option						default
+					-------------------------------------
+					enable						null
+				*/
+				/*
+				scrollbar buttons scrolling type 
+				values (string): "stepless", "stepped"
+				*/
+				scrollType:"stepless",
+				/*
+				scrolling amount in pixels
+				values: "auto", integer 
+				*/
+				scrollAmount:"auto"
+				/*
+				tabindex of the scrollbar buttons
+				values: false, integer
+					option						default
+					-------------------------------------
+					tabindex					null
+				*/
+			},
+			/* 
+			keyboard scrolling
+			*/
+			keyboard:{ 
+				/*
+				enable scrolling via keyboard
+				values: boolean
+				*/
+				enable:true,
+				/*
+				keyboard scrolling type 
+				values (string): "stepless", "stepped"
+				*/
+				scrollType:"stepless",
+				/*
+				scrolling amount in pixels
+				values: "auto", integer 
+				*/
+				scrollAmount:"auto"
+			},
+			/*
+			enable content touch-swipe scrolling 
+			values: boolean, integer, string (number)
+			integer values define the axis-specific minimum amount required for scrolling momentum
+			*/
+			contentTouchScroll:25,
+			/*
+			enable/disable document (default) touch-swipe scrolling 
+			*/
+			documentTouchScroll:true,
+			/*
+			advanced option parameters
+			*/
+			advanced:{
+				/*
+				auto-expand content horizontally (for "x" or "yx" axis) 
+				values: boolean, integer (the value 2 forces the non scrollHeight/scrollWidth method, the value 3 forces the scrollHeight/scrollWidth method)
+					option						default
+					-------------------------------------
+					autoExpandHorizontalScroll	null
+				*/
+				/*
+				auto-scroll to elements with focus
+				*/
+				autoScrollOnFocus:"input,textarea,select,button,datalist,keygen,a[tabindex],area,object,[contenteditable='true']",
+				/*
+				auto-update scrollbars on content, element or viewport resize 
+				should be true for fluid layouts/elements, adding/removing content dynamically, hiding/showing elements, content with images etc. 
+				values: boolean
+				*/
+				updateOnContentResize:true,
+				/*
+				auto-update scrollbars each time each image inside the element is fully loaded 
+				values: "auto", boolean
+				*/
+				updateOnImageLoad:"auto",
+				/*
+				auto-update scrollbars based on the amount and size changes of specific selectors 
+				useful when you need to update the scrollbar(s) automatically, each time a type of element is added, removed or changes its size 
+				values: boolean, string (e.g. "ul li" will auto-update scrollbars each time list-items inside the element are changed) 
+				a value of true (boolean) will auto-update scrollbars each time any element is changed
+					option						default
+					-------------------------------------
+					updateOnSelectorChange		null
+				*/
+				/*
+				extra selectors that'll allow scrollbar dragging upon mousemove/up, pointermove/up, touchend etc. (e.g. "selector-1, selector-2")
+					option						default
+					-------------------------------------
+					extraDraggableSelectors		null
+				*/
+				/*
+				extra selectors that'll release scrollbar dragging upon mouseup, pointerup, touchend etc. (e.g. "selector-1, selector-2")
+					option						default
+					-------------------------------------
+					releaseDraggableSelectors	null
+				*/
+				/*
+				auto-update timeout 
+				values: integer (milliseconds)
+				*/
+				autoUpdateTimeout:60
+			},
+			/* 
+			scrollbar theme 
+			values: string (see CSS/plugin URI for a list of ready-to-use themes)
+			*/
+			theme:"light",
+			/*
+			user defined callback functions
+			*/
+			callbacks:{
+				/*
+				Available callbacks: 
+					callback					default
+					-------------------------------------
+					onCreate					null
+					onInit						null
+					onScrollStart				null
+					onScroll					null
+					onTotalScroll				null
+					onTotalScrollBack			null
+					whileScrolling				null
+					onOverflowY					null
+					onOverflowX					null
+					onOverflowYNone				null
+					onOverflowXNone				null
+					onImageLoad					null
+					onSelectorChange			null
+					onBeforeUpdate				null
+					onUpdate					null
+				*/
+				onTotalScrollOffset:0,
+				onTotalScrollBackOffset:0,
+				alwaysTriggerOffsets:true
+			}
+			/*
+			add scrollbar(s) on all elements matching the current selector, now and in the future 
+			values: boolean, string 
+			string values: "on" (enable), "once" (disable after first invocation), "off" (disable)
+			liveSelector values: string (selector)
+				option						default
+				-------------------------------------
+				live						false
+				liveSelector				null
+			*/
+		},
+	
+	
+	
+	
+	
+	/* 
+	----------------------------------------
+	VARS, CONSTANTS 
+	----------------------------------------
+	*/
+	
+		totalInstances=0, /* plugin instances amount */
+		liveTimers={}, /* live option timers */
+		oldIE=(window.attachEvent && !window.addEventListener) ? 1 : 0, /* detect IE < 9 */
+		touchActive=false,touchable, /* global touch vars (for touch and pointer events) */
+		/* general plugin classes */
+		classes=[
+			"mCSB_dragger_onDrag","mCSB_scrollTools_onDrag","mCS_img_loaded","mCS_disabled","mCS_destroyed","mCS_no_scrollbar",
+			"mCS-autoHide","mCS-dir-rtl","mCS_no_scrollbar_y","mCS_no_scrollbar_x","mCS_y_hidden","mCS_x_hidden","mCSB_draggerContainer",
+			"mCSB_buttonUp","mCSB_buttonDown","mCSB_buttonLeft","mCSB_buttonRight"
+		],
+		
+	
+	
+	
+	
+	/* 
+	----------------------------------------
+	METHODS 
+	----------------------------------------
+	*/
+	
+		methods={
+			
+			/* 
+			plugin initialization method 
+			creates the scrollbar(s), plugin data object and options
+			----------------------------------------
+			*/
+			
+			init:function(options){
+				
+				var options=$.extend(true,{},defaults,options),
+					selector=_selector.call(this); /* validate selector */
+				
+				/* 
+				if live option is enabled, monitor for elements matching the current selector and 
+				apply scrollbar(s) when found (now and in the future) 
+				*/
+				if(options.live){
+					var liveSelector=options.liveSelector || this.selector || defaultSelector, /* live selector(s) */
+						$liveSelector=$(liveSelector); /* live selector(s) as jquery object */
+					if(options.live==="off"){
+						/* 
+						disable live if requested 
+						usage: $(selector).mCustomScrollbar({live:"off"}); 
+						*/
+						removeLiveTimers(liveSelector);
+						return;
+					}
+					liveTimers[liveSelector]=setTimeout(function(){
+						/* call mCustomScrollbar fn on live selector(s) every half-second */
+						$liveSelector.mCustomScrollbar(options);
+						if(options.live==="once" && $liveSelector.length){
+							/* disable live after first invocation */
+							removeLiveTimers(liveSelector);
+						}
+					},500);
+				}else{
+					removeLiveTimers(liveSelector);
+				}
+				
+				/* options backward compatibility (for versions < 3.0.0) and normalization */
+				options.setWidth=(options.set_width) ? options.set_width : options.setWidth;
+				options.setHeight=(options.set_height) ? options.set_height : options.setHeight;
+				options.axis=(options.horizontalScroll) ? "x" : _findAxis(options.axis);
+				options.scrollInertia=options.scrollInertia>0 && options.scrollInertia<17 ? 17 : options.scrollInertia;
+				if(typeof options.mouseWheel!=="object" &&  options.mouseWheel==true){ /* old school mouseWheel option (non-object) */
+					options.mouseWheel={enable:true,scrollAmount:"auto",axis:"y",preventDefault:false,deltaFactor:"auto",normalizeDelta:false,invert:false}
+				}
+				options.mouseWheel.scrollAmount=!options.mouseWheelPixels ? options.mouseWheel.scrollAmount : options.mouseWheelPixels;
+				options.mouseWheel.normalizeDelta=!options.advanced.normalizeMouseWheelDelta ? options.mouseWheel.normalizeDelta : options.advanced.normalizeMouseWheelDelta;
+				options.scrollButtons.scrollType=_findScrollButtonsType(options.scrollButtons.scrollType); 
+				
+				_theme(options); /* theme-specific options */
+				
+				/* plugin constructor */
+				return $(selector).each(function(){
+					
+					var $this=$(this);
+					
+					if(!$this.data(pluginPfx)){ /* prevent multiple instantiations */
+					
+						/* store options and create objects in jquery data */
+						$this.data(pluginPfx,{
+							idx:++totalInstances, /* instance index */
+							opt:options, /* options */
+							scrollRatio:{y:null,x:null}, /* scrollbar to content ratio */
+							overflowed:null, /* overflowed axis */
+							contentReset:{y:null,x:null}, /* object to check when content resets */
+							bindEvents:false, /* object to check if events are bound */
+							tweenRunning:false, /* object to check if tween is running */
+							sequential:{}, /* sequential scrolling object */
+							langDir:$this.css("direction"), /* detect/store direction (ltr or rtl) */
+							cbOffsets:null, /* object to check whether callback offsets always trigger */
+							/* 
+							object to check how scrolling events where last triggered 
+							"internal" (default - triggered by this script), "external" (triggered by other scripts, e.g. via scrollTo method) 
+							usage: object.data("mCS").trigger
+							*/
+							trigger:null,
+							/* 
+							object to check for changes in elements in order to call the update method automatically 
+							*/
+							poll:{size:{o:0,n:0},img:{o:0,n:0},change:{o:0,n:0}}
+						});
+						
+						var d=$this.data(pluginPfx),o=d.opt,
+							/* HTML data attributes */
+							htmlDataAxis=$this.data("mcs-axis"),htmlDataSbPos=$this.data("mcs-scrollbar-position"),htmlDataTheme=$this.data("mcs-theme");
+						 
+						if(htmlDataAxis){o.axis=htmlDataAxis;} /* usage example: data-mcs-axis="y" */
+						if(htmlDataSbPos){o.scrollbarPosition=htmlDataSbPos;} /* usage example: data-mcs-scrollbar-position="outside" */
+						if(htmlDataTheme){ /* usage example: data-mcs-theme="minimal" */
+							o.theme=htmlDataTheme;
+							_theme(o); /* theme-specific options */
+						}
+						
+						_pluginMarkup.call(this); /* add plugin markup */
+						
+						if(d && o.callbacks.onCreate && typeof o.callbacks.onCreate==="function"){o.callbacks.onCreate.call(this);} /* callbacks: onCreate */
+						
+						$("#mCSB_"+d.idx+"_container img:not(."+classes[2]+")").addClass(classes[2]); /* flag loaded images */
+						
+						methods.update.call(null,$this); /* call the update method */
+					
+					}
+					
+				});
+				
+			},
+			/* ---------------------------------------- */
+			
+			
+			
+			/* 
+			plugin update method 
+			updates content and scrollbar(s) values, events and status 
+			----------------------------------------
+			usage: $(selector).mCustomScrollbar("update");
+			*/
+			
+			update:function(el,cb){
+				
+				var selector=el || _selector.call(this); /* validate selector */
+				
+				return $(selector).each(function(){
+					
+					var $this=$(this);
+					
+					if($this.data(pluginPfx)){ /* check if plugin has initialized */
+						
+						var d=$this.data(pluginPfx),o=d.opt,
+							mCSB_container=$("#mCSB_"+d.idx+"_container"),
+							mCustomScrollBox=$("#mCSB_"+d.idx),
+							mCSB_dragger=[$("#mCSB_"+d.idx+"_dragger_vertical"),$("#mCSB_"+d.idx+"_dragger_horizontal")];
+						
+						if(!mCSB_container.length){return;}
+						
+						if(d.tweenRunning){_stop($this);} /* stop any running tweens while updating */
+						
+						if(cb && d && o.callbacks.onBeforeUpdate && typeof o.callbacks.onBeforeUpdate==="function"){o.callbacks.onBeforeUpdate.call(this);} /* callbacks: onBeforeUpdate */
+						
+						/* if element was disabled or destroyed, remove class(es) */
+						if($this.hasClass(classes[3])){$this.removeClass(classes[3]);}
+						if($this.hasClass(classes[4])){$this.removeClass(classes[4]);}
+						
+						/* css flexbox fix, detect/set max-height */
+						mCustomScrollBox.css("max-height","none");
+						if(mCustomScrollBox.height()!==$this.height()){mCustomScrollBox.css("max-height",$this.height());}
+						
+						_expandContentHorizontally.call(this); /* expand content horizontally */
+						
+						if(o.axis!=="y" && !o.advanced.autoExpandHorizontalScroll){
+							mCSB_container.css("width",_contentWidth(mCSB_container));
+						}
+						
+						d.overflowed=_overflowed.call(this); /* determine if scrolling is required */
+						
+						_scrollbarVisibility.call(this); /* show/hide scrollbar(s) */
+						
+						/* auto-adjust scrollbar dragger length analogous to content */
+						if(o.autoDraggerLength){_setDraggerLength.call(this);}
+						
+						_scrollRatio.call(this); /* calculate and store scrollbar to content ratio */
+						
+						_bindEvents.call(this); /* bind scrollbar events */
+						
+						/* reset scrolling position and/or events */
+						var to=[Math.abs(mCSB_container[0].offsetTop),Math.abs(mCSB_container[0].offsetLeft)];
+						if(o.axis!=="x"){ /* y/yx axis */
+							if(!d.overflowed[0]){ /* y scrolling is not required */
+								_resetContentPosition.call(this); /* reset content position */
+								if(o.axis==="y"){
+									_unbindEvents.call(this);
+								}else if(o.axis==="yx" && d.overflowed[1]){
+									_scrollTo($this,to[1].toString(),{dir:"x",dur:0,overwrite:"none"});
+								}
+							}else if(mCSB_dragger[0].height()>mCSB_dragger[0].parent().height()){
+								_resetContentPosition.call(this); /* reset content position */
+							}else{ /* y scrolling is required */
+								_scrollTo($this,to[0].toString(),{dir:"y",dur:0,overwrite:"none"});
+								d.contentReset.y=null;
+							}
+						}
+						if(o.axis!=="y"){ /* x/yx axis */
+							if(!d.overflowed[1]){ /* x scrolling is not required */
+								_resetContentPosition.call(this); /* reset content position */
+								if(o.axis==="x"){
+									_unbindEvents.call(this);
+								}else if(o.axis==="yx" && d.overflowed[0]){
+									_scrollTo($this,to[0].toString(),{dir:"y",dur:0,overwrite:"none"});
+								}
+							}else if(mCSB_dragger[1].width()>mCSB_dragger[1].parent().width()){
+								_resetContentPosition.call(this); /* reset content position */
+							}else{ /* x scrolling is required */
+								_scrollTo($this,to[1].toString(),{dir:"x",dur:0,overwrite:"none"});
+								d.contentReset.x=null;
+							}
+						}
+						
+						/* callbacks: onImageLoad, onSelectorChange, onUpdate */
+						if(cb && d){
+							if(cb===2 && o.callbacks.onImageLoad && typeof o.callbacks.onImageLoad==="function"){
+								o.callbacks.onImageLoad.call(this);
+							}else if(cb===3 && o.callbacks.onSelectorChange && typeof o.callbacks.onSelectorChange==="function"){
+								o.callbacks.onSelectorChange.call(this);
+							}else if(o.callbacks.onUpdate && typeof o.callbacks.onUpdate==="function"){
+								o.callbacks.onUpdate.call(this);
+							}
+						}
+						
+						_autoUpdate.call(this); /* initialize automatic updating (for dynamic content, fluid layouts etc.) */
+						
+					}
+					
+				});
+				
+			},
+			/* ---------------------------------------- */
+			
+			
+			
+			/* 
+			plugin scrollTo method 
+			triggers a scrolling event to a specific value
+			----------------------------------------
+			usage: $(selector).mCustomScrollbar("scrollTo",value,options);
+			*/
+		
+			scrollTo:function(val,options){
+				
+				/* prevent silly things like $(selector).mCustomScrollbar("scrollTo",undefined); */
+				if(typeof val=="undefined" || val==null){return;}
+				
+				var selector=_selector.call(this); /* validate selector */
+				
+				return $(selector).each(function(){
+					
+					var $this=$(this);
+					
+					if($this.data(pluginPfx)){ /* check if plugin has initialized */
+					
+						var d=$this.data(pluginPfx),o=d.opt,
+							/* method default options */
+							methodDefaults={
+								trigger:"external", /* method is by default triggered externally (e.g. from other scripts) */
+								scrollInertia:o.scrollInertia, /* scrolling inertia (animation duration) */
+								scrollEasing:"mcsEaseInOut", /* animation easing */
+								moveDragger:false, /* move dragger instead of content */
+								timeout:60, /* scroll-to delay */
+								callbacks:true, /* enable/disable callbacks */
+								onStart:true,
+								onUpdate:true,
+								onComplete:true
+							},
+							methodOptions=$.extend(true,{},methodDefaults,options),
+							to=_arr.call(this,val),dur=methodOptions.scrollInertia>0 && methodOptions.scrollInertia<17 ? 17 : methodOptions.scrollInertia;
+						
+						/* translate yx values to actual scroll-to positions */
+						to[0]=_to.call(this,to[0],"y");
+						to[1]=_to.call(this,to[1],"x");
+						
+						/* 
+						check if scroll-to value moves the dragger instead of content. 
+						Only pixel values apply on dragger (e.g. 100, "100px", "-=100" etc.) 
+						*/
+						if(methodOptions.moveDragger){
+							to[0]*=d.scrollRatio.y;
+							to[1]*=d.scrollRatio.x;
+						}
+						
+						methodOptions.dur=_isTabHidden() ? 0 : dur; //skip animations if browser tab is hidden
+						
+						setTimeout(function(){ 
+							/* do the scrolling */
+							if(to[0]!==null && typeof to[0]!=="undefined" && o.axis!=="x" && d.overflowed[0]){ /* scroll y */
+								methodOptions.dir="y";
+								methodOptions.overwrite="all";
+								_scrollTo($this,to[0].toString(),methodOptions);
+							}
+							if(to[1]!==null && typeof to[1]!=="undefined" && o.axis!=="y" && d.overflowed[1]){ /* scroll x */
+								methodOptions.dir="x";
+								methodOptions.overwrite="none";
+								_scrollTo($this,to[1].toString(),methodOptions);
+							}
+						},methodOptions.timeout);
+						
+					}
+					
+				});
+				
+			},
+			/* ---------------------------------------- */
+			
+			
+			
+			/*
+			plugin stop method 
+			stops scrolling animation
+			----------------------------------------
+			usage: $(selector).mCustomScrollbar("stop");
+			*/
+			stop:function(){
+				
+				var selector=_selector.call(this); /* validate selector */
+				
+				return $(selector).each(function(){
+					
+					var $this=$(this);
+					
+					if($this.data(pluginPfx)){ /* check if plugin has initialized */
+										
+						_stop($this);
+					
+					}
+					
+				});
+				
+			},
+			/* ---------------------------------------- */
+			
+			
+			
+			/*
+			plugin disable method 
+			temporarily disables the scrollbar(s) 
+			----------------------------------------
+			usage: $(selector).mCustomScrollbar("disable",reset); 
+			reset (boolean): resets content position to 0 
+			*/
+			disable:function(r){
+				
+				var selector=_selector.call(this); /* validate selector */
+				
+				return $(selector).each(function(){
+					
+					var $this=$(this);
+					
+					if($this.data(pluginPfx)){ /* check if plugin has initialized */
+						
+						var d=$this.data(pluginPfx);
+						
+						_autoUpdate.call(this,"remove"); /* remove automatic updating */
+						
+						_unbindEvents.call(this); /* unbind events */
+						
+						if(r){_resetContentPosition.call(this);} /* reset content position */
+						
+						_scrollbarVisibility.call(this,true); /* show/hide scrollbar(s) */
+						
+						$this.addClass(classes[3]); /* add disable class */
+					
+					}
+					
+				});
+				
+			},
+			/* ---------------------------------------- */
+			
+			
+			
+			/*
+			plugin destroy method 
+			completely removes the scrollbar(s) and returns the element to its original state
+			----------------------------------------
+			usage: $(selector).mCustomScrollbar("destroy"); 
+			*/
+			destroy:function(){
+				
+				var selector=_selector.call(this); /* validate selector */
+				
+				return $(selector).each(function(){
+					
+					var $this=$(this);
+					
+					if($this.data(pluginPfx)){ /* check if plugin has initialized */
+					
+						var d=$this.data(pluginPfx),o=d.opt,
+							mCustomScrollBox=$("#mCSB_"+d.idx),
+							mCSB_container=$("#mCSB_"+d.idx+"_container"),
+							scrollbar=$(".mCSB_"+d.idx+"_scrollbar");
+					
+						if(o.live){removeLiveTimers(o.liveSelector || $(selector).selector);} /* remove live timers */
+						
+						_autoUpdate.call(this,"remove"); /* remove automatic updating */
+						
+						_unbindEvents.call(this); /* unbind events */
+						
+						_resetContentPosition.call(this); /* reset content position */
+						
+						$this.removeData(pluginPfx); /* remove plugin data object */
+						
+						_delete(this,"mcs"); /* delete callbacks object */
+						
+						/* remove plugin markup */
+						scrollbar.remove(); /* remove scrollbar(s) first (those can be either inside or outside plugin's inner wrapper) */
+						mCSB_container.find("img."+classes[2]).removeClass(classes[2]); /* remove loaded images flag */
+						mCustomScrollBox.replaceWith(mCSB_container.contents()); /* replace plugin's inner wrapper with the original content */
+						/* remove plugin classes from the element and add destroy class */
+						$this.removeClass(pluginNS+" _"+pluginPfx+"_"+d.idx+" "+classes[6]+" "+classes[7]+" "+classes[5]+" "+classes[3]).addClass(classes[4]);
+					
+					}
+					
+				});
+				
+			}
+			/* ---------------------------------------- */
+			
+		},
+	
+	
+	
+	
+		
+	/* 
+	----------------------------------------
+	FUNCTIONS
+	----------------------------------------
+	*/
+	
+		/* validates selector (if selector is invalid or undefined uses the default one) */
+		_selector=function(){
+			return (typeof $(this)!=="object" || $(this).length<1) ? defaultSelector : this;
+		},
+		/* -------------------- */
+		
+		
+		/* changes options according to theme */
+		_theme=function(obj){
+			var fixedSizeScrollbarThemes=["rounded","rounded-dark","rounded-dots","rounded-dots-dark"],
+				nonExpandedScrollbarThemes=["rounded-dots","rounded-dots-dark","3d","3d-dark","3d-thick","3d-thick-dark","inset","inset-dark","inset-2","inset-2-dark","inset-3","inset-3-dark"],
+				disabledScrollButtonsThemes=["minimal","minimal-dark"],
+				enabledAutoHideScrollbarThemes=["minimal","minimal-dark"],
+				scrollbarPositionOutsideThemes=["minimal","minimal-dark"];
+			obj.autoDraggerLength=$.inArray(obj.theme,fixedSizeScrollbarThemes) > -1 ? false : obj.autoDraggerLength;
+			obj.autoExpandScrollbar=$.inArray(obj.theme,nonExpandedScrollbarThemes) > -1 ? false : obj.autoExpandScrollbar;
+			obj.scrollButtons.enable=$.inArray(obj.theme,disabledScrollButtonsThemes) > -1 ? false : obj.scrollButtons.enable;
+			obj.autoHideScrollbar=$.inArray(obj.theme,enabledAutoHideScrollbarThemes) > -1 ? true : obj.autoHideScrollbar;
+			obj.scrollbarPosition=$.inArray(obj.theme,scrollbarPositionOutsideThemes) > -1 ? "outside" : obj.scrollbarPosition;
+		},
+		/* -------------------- */
+		
+		
+		/* live option timers removal */
+		removeLiveTimers=function(selector){
+			if(liveTimers[selector]){
+				clearTimeout(liveTimers[selector]);
+				_delete(liveTimers,selector);
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* normalizes axis option to valid values: "y", "x", "yx" */
+		_findAxis=function(val){
+			return (val==="yx" || val==="xy" || val==="auto") ? "yx" : (val==="x" || val==="horizontal") ? "x" : "y";
+		},
+		/* -------------------- */
+		
+		
+		/* normalizes scrollButtons.scrollType option to valid values: "stepless", "stepped" */
+		_findScrollButtonsType=function(val){
+			return (val==="stepped" || val==="pixels" || val==="step" || val==="click") ? "stepped" : "stepless";
+		},
+		/* -------------------- */
+		
+		
+		/* generates plugin markup */
+		_pluginMarkup=function(){
+			var $this=$(this),d=$this.data(pluginPfx),o=d.opt,
+				expandClass=o.autoExpandScrollbar ? " "+classes[1]+"_expand" : "",
+				scrollbar=["<div id='mCSB_"+d.idx+"_scrollbar_vertical' class='mCSB_scrollTools mCSB_"+d.idx+"_scrollbar mCS-"+o.theme+" mCSB_scrollTools_vertical"+expandClass+"'><div class='"+classes[12]+"'><div id='mCSB_"+d.idx+"_dragger_vertical' class='mCSB_dragger' style='position:absolute;' oncontextmenu='return false;'><div class='mCSB_dragger_bar' /></div><div class='mCSB_draggerRail' /></div></div>","<div id='mCSB_"+d.idx+"_scrollbar_horizontal' class='mCSB_scrollTools mCSB_"+d.idx+"_scrollbar mCS-"+o.theme+" mCSB_scrollTools_horizontal"+expandClass+"'><div class='"+classes[12]+"'><div id='mCSB_"+d.idx+"_dragger_horizontal' class='mCSB_dragger' style='position:absolute;' oncontextmenu='return false;'><div class='mCSB_dragger_bar' /></div><div class='mCSB_draggerRail' /></div></div>"],
+				wrapperClass=o.axis==="yx" ? "mCSB_vertical_horizontal" : o.axis==="x" ? "mCSB_horizontal" : "mCSB_vertical",
+				scrollbars=o.axis==="yx" ? scrollbar[0]+scrollbar[1] : o.axis==="x" ? scrollbar[1] : scrollbar[0],
+				contentWrapper=o.axis==="yx" ? "<div id='mCSB_"+d.idx+"_container_wrapper' class='mCSB_container_wrapper' />" : "",
+				autoHideClass=o.autoHideScrollbar ? " "+classes[6] : "",
+				scrollbarDirClass=(o.axis!=="x" && d.langDir==="rtl") ? " "+classes[7] : "";
+			if(o.setWidth){$this.css("width",o.setWidth);} /* set element width */
+			if(o.setHeight){$this.css("height",o.setHeight);} /* set element height */
+			o.setLeft=(o.axis!=="y" && d.langDir==="rtl") ? "989999px" : o.setLeft; /* adjust left position for rtl direction */
+			$this.addClass(pluginNS+" _"+pluginPfx+"_"+d.idx+autoHideClass+scrollbarDirClass).wrapInner("<div id='mCSB_"+d.idx+"' class='mCustomScrollBox mCS-"+o.theme+" "+wrapperClass+"'><div id='mCSB_"+d.idx+"_container' class='mCSB_container' style='position:relative; top:"+o.setTop+"; left:"+o.setLeft+";' dir="+d.langDir+" /></div>");
+			var mCustomScrollBox=$("#mCSB_"+d.idx),
+				mCSB_container=$("#mCSB_"+d.idx+"_container");
+			if(o.axis!=="y" && !o.advanced.autoExpandHorizontalScroll){
+				mCSB_container.css("width",_contentWidth(mCSB_container));
+			}
+			if(o.scrollbarPosition==="outside"){
+				if($this.css("position")==="static"){ /* requires elements with non-static position */
+					$this.css("position","relative");
+				}
+				$this.css("overflow","visible");
+				mCustomScrollBox.addClass("mCSB_outside").after(scrollbars);
+			}else{
+				mCustomScrollBox.addClass("mCSB_inside").append(scrollbars);
+				mCSB_container.wrap(contentWrapper);
+			}
+			_scrollButtons.call(this); /* add scrollbar buttons */
+			/* minimum dragger length */
+			var mCSB_dragger=[$("#mCSB_"+d.idx+"_dragger_vertical"),$("#mCSB_"+d.idx+"_dragger_horizontal")];
+			mCSB_dragger[0].css("min-height",mCSB_dragger[0].height());
+			mCSB_dragger[1].css("min-width",mCSB_dragger[1].width());
+		},
+		/* -------------------- */
+		
+		
+		/* calculates content width */
+		_contentWidth=function(el){
+			var val=[el[0].scrollWidth,Math.max.apply(Math,el.children().map(function(){return $(this).outerWidth(true);}).get())],w=el.parent().width();
+			return val[0]>w ? val[0] : val[1]>w ? val[1] : "100%";
+		},
+		/* -------------------- */
+		
+		
+		/* expands content horizontally */
+		_expandContentHorizontally=function(){
+			var $this=$(this),d=$this.data(pluginPfx),o=d.opt,
+				mCSB_container=$("#mCSB_"+d.idx+"_container");
+			if(o.advanced.autoExpandHorizontalScroll && o.axis!=="y"){
+				/* calculate scrollWidth */
+				mCSB_container.css({"width":"auto","min-width":0,"overflow-x":"scroll"});
+				var w=Math.ceil(mCSB_container[0].scrollWidth);
+				if(o.advanced.autoExpandHorizontalScroll===3 || (o.advanced.autoExpandHorizontalScroll!==2 && w>mCSB_container.parent().width())){
+					mCSB_container.css({"width":w,"min-width":"100%","overflow-x":"inherit"});
+				}else{
+					/* 
+					wrap content with an infinite width div and set its position to absolute and width to auto. 
+					Setting width to auto before calculating the actual width is important! 
+					We must let the browser set the width as browser zoom values are impossible to calculate.
+					*/
+					mCSB_container.css({"overflow-x":"inherit","position":"absolute"})
+						.wrap("<div class='mCSB_h_wrapper' style='position:relative; left:0; width:999999px;' />")
+						.css({ /* set actual width, original position and un-wrap */
+							/* 
+							get the exact width (with decimals) and then round-up. 
+							Using jquery outerWidth() will round the width value which will mess up with inner elements that have non-integer width
+							*/
+							"width":(Math.ceil(mCSB_container[0].getBoundingClientRect().right+0.4)-Math.floor(mCSB_container[0].getBoundingClientRect().left)),
+							"min-width":"100%",
+							"position":"relative"
+						}).unwrap();
+				}
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* adds scrollbar buttons */
+		_scrollButtons=function(){
+			var $this=$(this),d=$this.data(pluginPfx),o=d.opt,
+				mCSB_scrollTools=$(".mCSB_"+d.idx+"_scrollbar:first"),
+				tabindex=!_isNumeric(o.scrollButtons.tabindex) ? "" : "tabindex='"+o.scrollButtons.tabindex+"'",
+				btnHTML=[
+					"<a href='#' class='"+classes[13]+"' oncontextmenu='return false;' "+tabindex+" />",
+					"<a href='#' class='"+classes[14]+"' oncontextmenu='return false;' "+tabindex+" />",
+					"<a href='#' class='"+classes[15]+"' oncontextmenu='return false;' "+tabindex+" />",
+					"<a href='#' class='"+classes[16]+"' oncontextmenu='return false;' "+tabindex+" />"
+				],
+				btn=[(o.axis==="x" ? btnHTML[2] : btnHTML[0]),(o.axis==="x" ? btnHTML[3] : btnHTML[1]),btnHTML[2],btnHTML[3]];
+			if(o.scrollButtons.enable){
+				mCSB_scrollTools.prepend(btn[0]).append(btn[1]).next(".mCSB_scrollTools").prepend(btn[2]).append(btn[3]);
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* auto-adjusts scrollbar dragger length */
+		_setDraggerLength=function(){
+			var $this=$(this),d=$this.data(pluginPfx),
+				mCustomScrollBox=$("#mCSB_"+d.idx),
+				mCSB_container=$("#mCSB_"+d.idx+"_container"),
+				mCSB_dragger=[$("#mCSB_"+d.idx+"_dragger_vertical"),$("#mCSB_"+d.idx+"_dragger_horizontal")],
+				ratio=[mCustomScrollBox.height()/mCSB_container.outerHeight(false),mCustomScrollBox.width()/mCSB_container.outerWidth(false)],
+				l=[
+					parseInt(mCSB_dragger[0].css("min-height")),Math.round(ratio[0]*mCSB_dragger[0].parent().height()),
+					parseInt(mCSB_dragger[1].css("min-width")),Math.round(ratio[1]*mCSB_dragger[1].parent().width())
+				],
+				h=oldIE && (l[1]<l[0]) ? l[0] : l[1],w=oldIE && (l[3]<l[2]) ? l[2] : l[3];
+			mCSB_dragger[0].css({
+				"height":h,"max-height":(mCSB_dragger[0].parent().height()-10)
+			}).find(".mCSB_dragger_bar").css({"line-height":l[0]+"px"});
+			mCSB_dragger[1].css({
+				"width":w,"max-width":(mCSB_dragger[1].parent().width()-10)
+			});
+		},
+		/* -------------------- */
+		
+		
+		/* calculates scrollbar to content ratio */
+		_scrollRatio=function(){
+			var $this=$(this),d=$this.data(pluginPfx),
+				mCustomScrollBox=$("#mCSB_"+d.idx),
+				mCSB_container=$("#mCSB_"+d.idx+"_container"),
+				mCSB_dragger=[$("#mCSB_"+d.idx+"_dragger_vertical"),$("#mCSB_"+d.idx+"_dragger_horizontal")],
+				scrollAmount=[mCSB_container.outerHeight(false)-mCustomScrollBox.height(),mCSB_container.outerWidth(false)-mCustomScrollBox.width()],
+				ratio=[
+					scrollAmount[0]/(mCSB_dragger[0].parent().height()-mCSB_dragger[0].height()),
+					scrollAmount[1]/(mCSB_dragger[1].parent().width()-mCSB_dragger[1].width())
+				];
+			d.scrollRatio={y:ratio[0],x:ratio[1]};
+		},
+		/* -------------------- */
+		
+		
+		/* toggles scrolling classes */
+		_onDragClasses=function(el,action,xpnd){
+			var expandClass=xpnd ? classes[0]+"_expanded" : "",
+				scrollbar=el.closest(".mCSB_scrollTools");
+			if(action==="active"){
+				el.toggleClass(classes[0]+" "+expandClass); scrollbar.toggleClass(classes[1]); 
+				el[0]._draggable=el[0]._draggable ? 0 : 1;
+			}else{
+				if(!el[0]._draggable){
+					if(action==="hide"){
+						el.removeClass(classes[0]); scrollbar.removeClass(classes[1]);
+					}else{
+						el.addClass(classes[0]); scrollbar.addClass(classes[1]);
+					}
+				}
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* checks if content overflows its container to determine if scrolling is required */
+		_overflowed=function(){
+			var $this=$(this),d=$this.data(pluginPfx),
+				mCustomScrollBox=$("#mCSB_"+d.idx),
+				mCSB_container=$("#mCSB_"+d.idx+"_container"),
+				contentHeight=d.overflowed==null ? mCSB_container.height() : mCSB_container.outerHeight(false),
+				contentWidth=d.overflowed==null ? mCSB_container.width() : mCSB_container.outerWidth(false),
+				h=mCSB_container[0].scrollHeight,w=mCSB_container[0].scrollWidth;
+			if(h>contentHeight){contentHeight=h;}
+			if(w>contentWidth){contentWidth=w;}
+			return [contentHeight>mCustomScrollBox.height(),contentWidth>mCustomScrollBox.width()];
+		},
+		/* -------------------- */
+		
+		
+		/* resets content position to 0 */
+		_resetContentPosition=function(){
+			var $this=$(this),d=$this.data(pluginPfx),o=d.opt,
+				mCustomScrollBox=$("#mCSB_"+d.idx),
+				mCSB_container=$("#mCSB_"+d.idx+"_container"),
+				mCSB_dragger=[$("#mCSB_"+d.idx+"_dragger_vertical"),$("#mCSB_"+d.idx+"_dragger_horizontal")];
+			_stop($this); /* stop any current scrolling before resetting */
+			if((o.axis!=="x" && !d.overflowed[0]) || (o.axis==="y" && d.overflowed[0])){ /* reset y */
+				mCSB_dragger[0].add(mCSB_container).css("top",0);
+				_scrollTo($this,"_resetY");
+			}
+			if((o.axis!=="y" && !d.overflowed[1]) || (o.axis==="x" && d.overflowed[1])){ /* reset x */
+				var cx=dx=0;
+				if(d.langDir==="rtl"){ /* adjust left position for rtl direction */
+					cx=mCustomScrollBox.width()-mCSB_container.outerWidth(false);
+					dx=Math.abs(cx/d.scrollRatio.x);
+				}
+				mCSB_container.css("left",cx);
+				mCSB_dragger[1].css("left",dx);
+				_scrollTo($this,"_resetX");
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* binds scrollbar events */
+		_bindEvents=function(){
+			var $this=$(this),d=$this.data(pluginPfx),o=d.opt;
+			if(!d.bindEvents){ /* check if events are already bound */
+				_draggable.call(this);
+				if(o.contentTouchScroll){_contentDraggable.call(this);}
+				_selectable.call(this);
+				if(o.mouseWheel.enable){ /* bind mousewheel fn when plugin is available */
+					function _mwt(){
+						mousewheelTimeout=setTimeout(function(){
+							if(!$.event.special.mousewheel){
+								_mwt();
+							}else{
+								clearTimeout(mousewheelTimeout);
+								_mousewheel.call($this[0]);
+							}
+						},100);
+					}
+					var mousewheelTimeout;
+					_mwt();
+				}
+				_draggerRail.call(this);
+				_wrapperScroll.call(this);
+				if(o.advanced.autoScrollOnFocus){_focus.call(this);}
+				if(o.scrollButtons.enable){_buttons.call(this);}
+				if(o.keyboard.enable){_keyboard.call(this);}
+				d.bindEvents=true;
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* unbinds scrollbar events */
+		_unbindEvents=function(){
+			var $this=$(this),d=$this.data(pluginPfx),o=d.opt,
+				namespace=pluginPfx+"_"+d.idx,
+				sb=".mCSB_"+d.idx+"_scrollbar",
+				sel=$("#mCSB_"+d.idx+",#mCSB_"+d.idx+"_container,#mCSB_"+d.idx+"_container_wrapper,"+sb+" ."+classes[12]+",#mCSB_"+d.idx+"_dragger_vertical,#mCSB_"+d.idx+"_dragger_horizontal,"+sb+">a"),
+				mCSB_container=$("#mCSB_"+d.idx+"_container");
+			if(o.advanced.releaseDraggableSelectors){sel.add($(o.advanced.releaseDraggableSelectors));}
+			if(o.advanced.extraDraggableSelectors){sel.add($(o.advanced.extraDraggableSelectors));}
+			if(d.bindEvents){ /* check if events are bound */
+				/* unbind namespaced events from document/selectors */
+				$(document).add($(!_canAccessIFrame() || top.document)).unbind("."+namespace);
+				sel.each(function(){
+					$(this).unbind("."+namespace);
+				});
+				/* clear and delete timeouts/objects */
+				clearTimeout($this[0]._focusTimeout); _delete($this[0],"_focusTimeout");
+				clearTimeout(d.sequential.step); _delete(d.sequential,"step");
+				clearTimeout(mCSB_container[0].onCompleteTimeout); _delete(mCSB_container[0],"onCompleteTimeout");
+				d.bindEvents=false;
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* toggles scrollbar visibility */
+		_scrollbarVisibility=function(disabled){
+			var $this=$(this),d=$this.data(pluginPfx),o=d.opt,
+				contentWrapper=$("#mCSB_"+d.idx+"_container_wrapper"),
+				content=contentWrapper.length ? contentWrapper : $("#mCSB_"+d.idx+"_container"),
+				scrollbar=[$("#mCSB_"+d.idx+"_scrollbar_vertical"),$("#mCSB_"+d.idx+"_scrollbar_horizontal")],
+				mCSB_dragger=[scrollbar[0].find(".mCSB_dragger"),scrollbar[1].find(".mCSB_dragger")];
+			if(o.axis!=="x"){
+				if(d.overflowed[0] && !disabled){
+					scrollbar[0].add(mCSB_dragger[0]).add(scrollbar[0].children("a")).css("display","block");
+					content.removeClass(classes[8]+" "+classes[10]);
+				}else{
+					if(o.alwaysShowScrollbar){
+						if(o.alwaysShowScrollbar!==2){mCSB_dragger[0].css("display","none");}
+						content.removeClass(classes[10]);
+					}else{
+						scrollbar[0].css("display","none");
+						content.addClass(classes[10]);
+					}
+					content.addClass(classes[8]);
+				}
+			}
+			if(o.axis!=="y"){
+				if(d.overflowed[1] && !disabled){
+					scrollbar[1].add(mCSB_dragger[1]).add(scrollbar[1].children("a")).css("display","block");
+					content.removeClass(classes[9]+" "+classes[11]);
+				}else{
+					if(o.alwaysShowScrollbar){
+						if(o.alwaysShowScrollbar!==2){mCSB_dragger[1].css("display","none");}
+						content.removeClass(classes[11]);
+					}else{
+						scrollbar[1].css("display","none");
+						content.addClass(classes[11]);
+					}
+					content.addClass(classes[9]);
+				}
+			}
+			if(!d.overflowed[0] && !d.overflowed[1]){
+				$this.addClass(classes[5]);
+			}else{
+				$this.removeClass(classes[5]);
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* returns input coordinates of pointer, touch and mouse events (relative to document) */
+		_coordinates=function(e){
+			var t=e.type,o=e.target.ownerDocument!==document ? [$(frameElement).offset().top,$(frameElement).offset().left] : null,
+				io=_canAccessIFrame() && e.target.ownerDocument!==top.document ? [$(e.view.frameElement).offset().top,$(e.view.frameElement).offset().left] : [0,0];
+			switch(t){
+				case "pointerdown": case "MSPointerDown": case "pointermove": case "MSPointerMove": case "pointerup": case "MSPointerUp":
+					return o ? [e.originalEvent.pageY-o[0]+io[0],e.originalEvent.pageX-o[1]+io[1],false] : [e.originalEvent.pageY,e.originalEvent.pageX,false];
+					break;
+				case "touchstart": case "touchmove": case "touchend":
+					var touch=e.originalEvent.touches[0] || e.originalEvent.changedTouches[0],
+						touches=e.originalEvent.touches.length || e.originalEvent.changedTouches.length;
+					return e.target.ownerDocument!==document ? [touch.screenY,touch.screenX,touches>1] : [touch.pageY,touch.pageX,touches>1];
+					break;
+				default:
+					return o ? [e.pageY-o[0]+io[0],e.pageX-o[1]+io[1],false] : [e.pageY,e.pageX,false];
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* 
+		SCROLLBAR DRAG EVENTS
+		scrolls content via scrollbar dragging 
+		*/
+		_draggable=function(){
+			var $this=$(this),d=$this.data(pluginPfx),o=d.opt,
+				namespace=pluginPfx+"_"+d.idx,
+				draggerId=["mCSB_"+d.idx+"_dragger_vertical","mCSB_"+d.idx+"_dragger_horizontal"],
+				mCSB_container=$("#mCSB_"+d.idx+"_container"),
+				mCSB_dragger=$("#"+draggerId[0]+",#"+draggerId[1]),
+				draggable,dragY,dragX,
+				rds=o.advanced.releaseDraggableSelectors ? mCSB_dragger.add($(o.advanced.releaseDraggableSelectors)) : mCSB_dragger,
+				eds=o.advanced.extraDraggableSelectors ? $(!_canAccessIFrame() || top.document).add($(o.advanced.extraDraggableSelectors)) : $(!_canAccessIFrame() || top.document);
+			mCSB_dragger.bind("mousedown."+namespace+" touchstart."+namespace+" pointerdown."+namespace+" MSPointerDown."+namespace,function(e){
+				e.stopImmediatePropagation();
+				e.preventDefault();
+				if(!_mouseBtnLeft(e)){return;} /* left mouse button only */
+				touchActive=true;
+				if(oldIE){document.onselectstart=function(){return false;}} /* disable text selection for IE < 9 */
+				_iframe(false); /* enable scrollbar dragging over iframes by disabling their events */
+				_stop($this);
+				draggable=$(this);
+				var offset=draggable.offset(),y=_coordinates(e)[0]-offset.top,x=_coordinates(e)[1]-offset.left,
+					h=draggable.height()+offset.top,w=draggable.width()+offset.left;
+				if(y<h && y>0 && x<w && x>0){
+					dragY=y; 
+					dragX=x;
+				}
+				_onDragClasses(draggable,"active",o.autoExpandScrollbar); 
+			}).bind("touchmove."+namespace,function(e){
+				e.stopImmediatePropagation();
+				e.preventDefault();
+				var offset=draggable.offset(),y=_coordinates(e)[0]-offset.top,x=_coordinates(e)[1]-offset.left;
+				_drag(dragY,dragX,y,x);
+			});
+			$(document).add(eds).bind("mousemove."+namespace+" pointermove."+namespace+" MSPointerMove."+namespace,function(e){
+				if(draggable){
+					var offset=draggable.offset(),y=_coordinates(e)[0]-offset.top,x=_coordinates(e)[1]-offset.left;
+					if(dragY===y && dragX===x){return;} /* has it really moved? */
+					_drag(dragY,dragX,y,x);
+				}
+			}).add(rds).bind("mouseup."+namespace+" touchend."+namespace+" pointerup."+namespace+" MSPointerUp."+namespace,function(e){
+				if(draggable){
+					_onDragClasses(draggable,"active",o.autoExpandScrollbar); 
+					draggable=null;
+				}
+				touchActive=false;
+				if(oldIE){document.onselectstart=null;} /* enable text selection for IE < 9 */
+				_iframe(true); /* enable iframes events */
+			});
+			function _iframe(evt){
+				var el=mCSB_container.find("iframe");
+				if(!el.length){return;} /* check if content contains iframes */
+				var val=!evt ? "none" : "auto";
+				el.css("pointer-events",val); /* for IE11, iframe's display property should not be "block" */
+			}
+			function _drag(dragY,dragX,y,x){
+				mCSB_container[0].idleTimer=o.scrollInertia<233 ? 250 : 0;
+				if(draggable.attr("id")===draggerId[1]){
+					var dir="x",to=((draggable[0].offsetLeft-dragX)+x)*d.scrollRatio.x;
+				}else{
+					var dir="y",to=((draggable[0].offsetTop-dragY)+y)*d.scrollRatio.y;
+				}
+				_scrollTo($this,to.toString(),{dir:dir,drag:true});
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* 
+		TOUCH SWIPE EVENTS
+		scrolls content via touch swipe 
+		Emulates the native touch-swipe scrolling with momentum found in iOS, Android and WP devices 
+		*/
+		_contentDraggable=function(){
+			var $this=$(this),d=$this.data(pluginPfx),o=d.opt,
+				namespace=pluginPfx+"_"+d.idx,
+				mCustomScrollBox=$("#mCSB_"+d.idx),
+				mCSB_container=$("#mCSB_"+d.idx+"_container"),
+				mCSB_dragger=[$("#mCSB_"+d.idx+"_dragger_vertical"),$("#mCSB_"+d.idx+"_dragger_horizontal")],
+				draggable,dragY,dragX,touchStartY,touchStartX,touchMoveY=[],touchMoveX=[],startTime,runningTime,endTime,distance,speed,amount,
+				durA=0,durB,overwrite=o.axis==="yx" ? "none" : "all",touchIntent=[],touchDrag,docDrag,
+				iframe=mCSB_container.find("iframe"),
+				events=[
+					"touchstart."+namespace+" pointerdown."+namespace+" MSPointerDown."+namespace, //start
+					"touchmove."+namespace+" pointermove."+namespace+" MSPointerMove."+namespace, //move
+					"touchend."+namespace+" pointerup."+namespace+" MSPointerUp."+namespace //end
+				],
+				touchAction=document.body.style.touchAction!==undefined;
+			mCSB_container.bind(events[0],function(e){
+				_onTouchstart(e);
+			}).bind(events[1],function(e){
+				_onTouchmove(e);
+			});
+			mCustomScrollBox.bind(events[0],function(e){
+				_onTouchstart2(e);
+			}).bind(events[2],function(e){
+				_onTouchend(e);
+			});
+			if(iframe.length){
+				iframe.each(function(){
+					$(this).load(function(){
+						/* bind events on accessible iframes */
+						if(_canAccessIFrame(this)){
+							$(this.contentDocument || this.contentWindow.document).bind(events[0],function(e){
+								_onTouchstart(e);
+								_onTouchstart2(e);
+							}).bind(events[1],function(e){
+								_onTouchmove(e);
+							}).bind(events[2],function(e){
+								_onTouchend(e);
+							});
+						}
+					});
+				});
+			}
+			function _onTouchstart(e){
+				if(!_pointerTouch(e) || touchActive || _coordinates(e)[2]){touchable=0; return;}
+				touchable=1; touchDrag=0; docDrag=0; draggable=1;
+				$this.removeClass("mCS_touch_action");
+				var offset=mCSB_container.offset();
+				dragY=_coordinates(e)[0]-offset.top;
+				dragX=_coordinates(e)[1]-offset.left;
+				touchIntent=[_coordinates(e)[0],_coordinates(e)[1]];
+			}
+			function _onTouchmove(e){
+				if(!_pointerTouch(e) || touchActive || _coordinates(e)[2]){return;}
+				if(!o.documentTouchScroll){e.preventDefault();} 
+				e.stopImmediatePropagation();
+				if(docDrag && !touchDrag){return;}
+				if(draggable){
+					runningTime=_getTime();
+					var offset=mCustomScrollBox.offset(),y=_coordinates(e)[0]-offset.top,x=_coordinates(e)[1]-offset.left,
+						easing="mcsLinearOut";
+					touchMoveY.push(y);
+					touchMoveX.push(x);
+					touchIntent[2]=Math.abs(_coordinates(e)[0]-touchIntent[0]); touchIntent[3]=Math.abs(_coordinates(e)[1]-touchIntent[1]);
+					if(d.overflowed[0]){
+						var limit=mCSB_dragger[0].parent().height()-mCSB_dragger[0].height(),
+							prevent=((dragY-y)>0 && (y-dragY)>-(limit*d.scrollRatio.y) && (touchIntent[3]*2<touchIntent[2] || o.axis==="yx"));
+					}
+					if(d.overflowed[1]){
+						var limitX=mCSB_dragger[1].parent().width()-mCSB_dragger[1].width(),
+							preventX=((dragX-x)>0 && (x-dragX)>-(limitX*d.scrollRatio.x) && (touchIntent[2]*2<touchIntent[3] || o.axis==="yx"));
+					}
+					if(prevent || preventX){ /* prevent native document scrolling */
+						if(!touchAction){e.preventDefault();} 
+						touchDrag=1;
+					}else{
+						docDrag=1;
+						$this.addClass("mCS_touch_action");
+					}
+					if(touchAction){e.preventDefault();} 
+					amount=o.axis==="yx" ? [(dragY-y),(dragX-x)] : o.axis==="x" ? [null,(dragX-x)] : [(dragY-y),null];
+					mCSB_container[0].idleTimer=250;
+					if(d.overflowed[0]){_drag(amount[0],durA,easing,"y","all",true);}
+					if(d.overflowed[1]){_drag(amount[1],durA,easing,"x",overwrite,true);}
+				}
+			}
+			function _onTouchstart2(e){
+				if(!_pointerTouch(e) || touchActive || _coordinates(e)[2]){touchable=0; return;}
+				touchable=1;
+				e.stopImmediatePropagation();
+				_stop($this);
+				startTime=_getTime();
+				var offset=mCustomScrollBox.offset();
+				touchStartY=_coordinates(e)[0]-offset.top;
+				touchStartX=_coordinates(e)[1]-offset.left;
+				touchMoveY=[]; touchMoveX=[];
+			}
+			function _onTouchend(e){
+				if(!_pointerTouch(e) || touchActive || _coordinates(e)[2]){return;}
+				draggable=0;
+				e.stopImmediatePropagation();
+				touchDrag=0; docDrag=0;
+				endTime=_getTime();
+				var offset=mCustomScrollBox.offset(),y=_coordinates(e)[0]-offset.top,x=_coordinates(e)[1]-offset.left;
+				if((endTime-runningTime)>30){return;}
+				speed=1000/(endTime-startTime);
+				var easing="mcsEaseOut",slow=speed<2.5,
+					diff=slow ? [touchMoveY[touchMoveY.length-2],touchMoveX[touchMoveX.length-2]] : [0,0];
+				distance=slow ? [(y-diff[0]),(x-diff[1])] : [y-touchStartY,x-touchStartX];
+				var absDistance=[Math.abs(distance[0]),Math.abs(distance[1])];
+				speed=slow ? [Math.abs(distance[0]/4),Math.abs(distance[1]/4)] : [speed,speed];
+				var a=[
+					Math.abs(mCSB_container[0].offsetTop)-(distance[0]*_m((absDistance[0]/speed[0]),speed[0])),
+					Math.abs(mCSB_container[0].offsetLeft)-(distance[1]*_m((absDistance[1]/speed[1]),speed[1]))
+				];
+				amount=o.axis==="yx" ? [a[0],a[1]] : o.axis==="x" ? [null,a[1]] : [a[0],null];
+				durB=[(absDistance[0]*4)+o.scrollInertia,(absDistance[1]*4)+o.scrollInertia];
+				var md=parseInt(o.contentTouchScroll) || 0; /* absolute minimum distance required */
+				amount[0]=absDistance[0]>md ? amount[0] : 0;
+				amount[1]=absDistance[1]>md ? amount[1] : 0;
+				if(d.overflowed[0]){_drag(amount[0],durB[0],easing,"y",overwrite,false);}
+				if(d.overflowed[1]){_drag(amount[1],durB[1],easing,"x",overwrite,false);}
+			}
+			function _m(ds,s){
+				var r=[s*1.5,s*2,s/1.5,s/2];
+				if(ds>90){
+					return s>4 ? r[0] : r[3];
+				}else if(ds>60){
+					return s>3 ? r[3] : r[2];
+				}else if(ds>30){
+					return s>8 ? r[1] : s>6 ? r[0] : s>4 ? s : r[2];
+				}else{
+					return s>8 ? s : r[3];
+				}
+			}
+			function _drag(amount,dur,easing,dir,overwrite,drag){
+				if(!amount){return;}
+				_scrollTo($this,amount.toString(),{dur:dur,scrollEasing:easing,dir:dir,overwrite:overwrite,drag:drag});
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* 
+		SELECT TEXT EVENTS 
+		scrolls content when text is selected 
+		*/
+		_selectable=function(){
+			var $this=$(this),d=$this.data(pluginPfx),o=d.opt,seq=d.sequential,
+				namespace=pluginPfx+"_"+d.idx,
+				mCSB_container=$("#mCSB_"+d.idx+"_container"),
+				wrapper=mCSB_container.parent(),
+				action;
+			mCSB_container.bind("mousedown."+namespace,function(e){
+				if(touchable){return;}
+				if(!action){action=1; touchActive=true;}
+			}).add(document).bind("mousemove."+namespace,function(e){
+				if(!touchable && action && _sel()){
+					var offset=mCSB_container.offset(),
+						y=_coordinates(e)[0]-offset.top+mCSB_container[0].offsetTop,x=_coordinates(e)[1]-offset.left+mCSB_container[0].offsetLeft;
+					if(y>0 && y<wrapper.height() && x>0 && x<wrapper.width()){
+						if(seq.step){_seq("off",null,"stepped");}
+					}else{
+						if(o.axis!=="x" && d.overflowed[0]){
+							if(y<0){
+								_seq("on",38);
+							}else if(y>wrapper.height()){
+								_seq("on",40);
+							}
+						}
+						if(o.axis!=="y" && d.overflowed[1]){
+							if(x<0){
+								_seq("on",37);
+							}else if(x>wrapper.width()){
+								_seq("on",39);
+							}
+						}
+					}
+				}
+			}).bind("mouseup."+namespace+" dragend."+namespace,function(e){
+				if(touchable){return;}
+				if(action){action=0; _seq("off",null);}
+				touchActive=false;
+			});
+			function _sel(){
+				return 	window.getSelection ? window.getSelection().toString() : 
+						document.selection && document.selection.type!="Control" ? document.selection.createRange().text : 0;
+			}
+			function _seq(a,c,s){
+				seq.type=s && action ? "stepped" : "stepless";
+				seq.scrollAmount=10;
+				_sequentialScroll($this,a,c,"mcsLinearOut",s ? 60 : null);
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* 
+		MOUSE WHEEL EVENT
+		scrolls content via mouse-wheel 
+		via mouse-wheel plugin (https://github.com/brandonaaron/jquery-mousewheel)
+		*/
+		_mousewheel=function(){
+			if(!$(this).data(pluginPfx)){return;} /* Check if the scrollbar is ready to use mousewheel events (issue: #185) */
+			var $this=$(this),d=$this.data(pluginPfx),o=d.opt,
+				namespace=pluginPfx+"_"+d.idx,
+				mCustomScrollBox=$("#mCSB_"+d.idx),
+				mCSB_dragger=[$("#mCSB_"+d.idx+"_dragger_vertical"),$("#mCSB_"+d.idx+"_dragger_horizontal")],
+				iframe=$("#mCSB_"+d.idx+"_container").find("iframe");
+			if(iframe.length){
+				iframe.each(function(){
+					$(this).load(function(){
+						/* bind events on accessible iframes */
+						if(_canAccessIFrame(this)){
+							$(this.contentDocument || this.contentWindow.document).bind("mousewheel."+namespace,function(e,delta){
+								_onMousewheel(e,delta);
+							});
+						}
+					});
+				});
+			}
+			mCustomScrollBox.bind("mousewheel."+namespace,function(e,delta){
+				_onMousewheel(e,delta);
+			});
+			function _onMousewheel(e,delta){
+				_stop($this);
+				if(_disableMousewheel($this,e.target)){return;} /* disables mouse-wheel when hovering specific elements */
+				var deltaFactor=o.mouseWheel.deltaFactor!=="auto" ? parseInt(o.mouseWheel.deltaFactor) : (oldIE && e.deltaFactor<100) ? 100 : e.deltaFactor || 100,
+					dur=o.scrollInertia;
+				if(o.axis==="x" || o.mouseWheel.axis==="x"){
+					var dir="x",
+						px=[Math.round(deltaFactor*d.scrollRatio.x),parseInt(o.mouseWheel.scrollAmount)],
+						amount=o.mouseWheel.scrollAmount!=="auto" ? px[1] : px[0]>=mCustomScrollBox.width() ? mCustomScrollBox.width()*0.9 : px[0],
+						contentPos=Math.abs($("#mCSB_"+d.idx+"_container")[0].offsetLeft),
+						draggerPos=mCSB_dragger[1][0].offsetLeft,
+						limit=mCSB_dragger[1].parent().width()-mCSB_dragger[1].width(),
+						dlt=e.deltaX || e.deltaY || delta;
+				}else{
+					var dir="y",
+						px=[Math.round(deltaFactor*d.scrollRatio.y),parseInt(o.mouseWheel.scrollAmount)],
+						amount=o.mouseWheel.scrollAmount!=="auto" ? px[1] : px[0]>=mCustomScrollBox.height() ? mCustomScrollBox.height()*0.9 : px[0],
+						contentPos=Math.abs($("#mCSB_"+d.idx+"_container")[0].offsetTop),
+						draggerPos=mCSB_dragger[0][0].offsetTop,
+						limit=mCSB_dragger[0].parent().height()-mCSB_dragger[0].height(),
+						dlt=e.deltaY || delta;
+				}
+				if((dir==="y" && !d.overflowed[0]) || (dir==="x" && !d.overflowed[1])){return;}
+				if(o.mouseWheel.invert || e.webkitDirectionInvertedFromDevice){dlt=-dlt;}
+				if(o.mouseWheel.normalizeDelta){dlt=dlt<0 ? -1 : 1;}
+				if((dlt>0 && draggerPos!==0) || (dlt<0 && draggerPos!==limit) || o.mouseWheel.preventDefault){
+					e.stopImmediatePropagation();
+					e.preventDefault();
+				}
+				if(e.deltaFactor<2 && !o.mouseWheel.normalizeDelta){
+					//very low deltaFactor values mean some kind of delta acceleration (e.g. osx trackpad), so adjusting scrolling accordingly
+					amount=e.deltaFactor; dur=17;
+				}
+				_scrollTo($this,(contentPos-(dlt*amount)).toString(),{dir:dir,dur:dur});
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* checks if iframe can be accessed */
+		_canAccessIFrame=function(iframe){
+			var html=null;
+			if(!iframe){
+				try{
+					var doc=top.document;
+					html=doc.body.innerHTML;
+				}catch(err){/* do nothing */}
+				return(html!==null);
+			}else{
+				try{
+					var doc=iframe.contentDocument || iframe.contentWindow.document;
+					html=doc.body.innerHTML;
+				}catch(err){/* do nothing */}
+				return(html!==null);
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* disables mouse-wheel when hovering specific elements like select, datalist etc. */
+		_disableMousewheel=function(el,target){
+			var tag=target.nodeName.toLowerCase(),
+				tags=el.data(pluginPfx).opt.mouseWheel.disableOver,
+				/* elements that require focus */
+				focusTags=["select","textarea"];
+			return $.inArray(tag,tags) > -1 && !($.inArray(tag,focusTags) > -1 && !$(target).is(":focus"));
+		},
+		/* -------------------- */
+		
+		
+		/* 
+		DRAGGER RAIL CLICK EVENT
+		scrolls content via dragger rail 
+		*/
+		_draggerRail=function(){
+			var $this=$(this),d=$this.data(pluginPfx),
+				namespace=pluginPfx+"_"+d.idx,
+				mCSB_container=$("#mCSB_"+d.idx+"_container"),
+				wrapper=mCSB_container.parent(),
+				mCSB_draggerContainer=$(".mCSB_"+d.idx+"_scrollbar ."+classes[12]),
+				clickable;
+			mCSB_draggerContainer.bind("mousedown."+namespace+" touchstart."+namespace+" pointerdown."+namespace+" MSPointerDown."+namespace,function(e){
+				touchActive=true;
+				if(!$(e.target).hasClass("mCSB_dragger")){clickable=1;}
+			}).bind("touchend."+namespace+" pointerup."+namespace+" MSPointerUp."+namespace,function(e){
+				touchActive=false;
+			}).bind("click."+namespace,function(e){
+				if(!clickable){return;}
+				clickable=0;
+				if($(e.target).hasClass(classes[12]) || $(e.target).hasClass("mCSB_draggerRail")){
+					_stop($this);
+					var el=$(this),mCSB_dragger=el.find(".mCSB_dragger");
+					if(el.parent(".mCSB_scrollTools_horizontal").length>0){
+						if(!d.overflowed[1]){return;}
+						var dir="x",
+							clickDir=e.pageX>mCSB_dragger.offset().left ? -1 : 1,
+							to=Math.abs(mCSB_container[0].offsetLeft)-(clickDir*(wrapper.width()*0.9));
+					}else{
+						if(!d.overflowed[0]){return;}
+						var dir="y",
+							clickDir=e.pageY>mCSB_dragger.offset().top ? -1 : 1,
+							to=Math.abs(mCSB_container[0].offsetTop)-(clickDir*(wrapper.height()*0.9));
+					}
+					_scrollTo($this,to.toString(),{dir:dir,scrollEasing:"mcsEaseInOut"});
+				}
+			});
+		},
+		/* -------------------- */
+		
+		
+		/* 
+		FOCUS EVENT
+		scrolls content via element focus (e.g. clicking an input, pressing TAB key etc.)
+		*/
+		_focus=function(){
+			var $this=$(this),d=$this.data(pluginPfx),o=d.opt,
+				namespace=pluginPfx+"_"+d.idx,
+				mCSB_container=$("#mCSB_"+d.idx+"_container"),
+				wrapper=mCSB_container.parent();
+			mCSB_container.bind("focusin."+namespace,function(e){
+				var el=$(document.activeElement),
+					nested=mCSB_container.find(".mCustomScrollBox").length,
+					dur=0;
+				if(!el.is(o.advanced.autoScrollOnFocus)){return;}
+				_stop($this);
+				clearTimeout($this[0]._focusTimeout);
+				$this[0]._focusTimer=nested ? (dur+17)*nested : 0;
+				$this[0]._focusTimeout=setTimeout(function(){
+					var	to=[_childPos(el)[0],_childPos(el)[1]],
+						contentPos=[mCSB_container[0].offsetTop,mCSB_container[0].offsetLeft],
+						isVisible=[
+							(contentPos[0]+to[0]>=0 && contentPos[0]+to[0]<wrapper.height()-el.outerHeight(false)),
+							(contentPos[1]+to[1]>=0 && contentPos[0]+to[1]<wrapper.width()-el.outerWidth(false))
+						],
+						overwrite=(o.axis==="yx" && !isVisible[0] && !isVisible[1]) ? "none" : "all";
+					if(o.axis!=="x" && !isVisible[0]){
+						_scrollTo($this,to[0].toString(),{dir:"y",scrollEasing:"mcsEaseInOut",overwrite:overwrite,dur:dur});
+					}
+					if(o.axis!=="y" && !isVisible[1]){
+						_scrollTo($this,to[1].toString(),{dir:"x",scrollEasing:"mcsEaseInOut",overwrite:overwrite,dur:dur});
+					}
+				},$this[0]._focusTimer);
+			});
+		},
+		/* -------------------- */
+		
+		
+		/* sets content wrapper scrollTop/scrollLeft always to 0 */
+		_wrapperScroll=function(){
+			var $this=$(this),d=$this.data(pluginPfx),
+				namespace=pluginPfx+"_"+d.idx,
+				wrapper=$("#mCSB_"+d.idx+"_container").parent();
+			wrapper.bind("scroll."+namespace,function(e){
+				if(wrapper.scrollTop()!==0 || wrapper.scrollLeft()!==0){
+					$(".mCSB_"+d.idx+"_scrollbar").css("visibility","hidden"); /* hide scrollbar(s) */
+				}
+			});
+		},
+		/* -------------------- */
+		
+		
+		/* 
+		BUTTONS EVENTS
+		scrolls content via up, down, left and right buttons 
+		*/
+		_buttons=function(){
+			var $this=$(this),d=$this.data(pluginPfx),o=d.opt,seq=d.sequential,
+				namespace=pluginPfx+"_"+d.idx,
+				sel=".mCSB_"+d.idx+"_scrollbar",
+				btn=$(sel+">a");
+			btn.bind("mousedown."+namespace+" touchstart."+namespace+" pointerdown."+namespace+" MSPointerDown."+namespace+" mouseup."+namespace+" touchend."+namespace+" pointerup."+namespace+" MSPointerUp."+namespace+" mouseout."+namespace+" pointerout."+namespace+" MSPointerOut."+namespace+" click."+namespace,function(e){
+				e.preventDefault();
+				if(!_mouseBtnLeft(e)){return;} /* left mouse button only */
+				var btnClass=$(this).attr("class");
+				seq.type=o.scrollButtons.scrollType;
+				switch(e.type){
+					case "mousedown": case "touchstart": case "pointerdown": case "MSPointerDown":
+						if(seq.type==="stepped"){return;}
+						touchActive=true;
+						d.tweenRunning=false;
+						_seq("on",btnClass);
+						break;
+					case "mouseup": case "touchend": case "pointerup": case "MSPointerUp":
+					case "mouseout": case "pointerout": case "MSPointerOut":
+						if(seq.type==="stepped"){return;}
+						touchActive=false;
+						if(seq.dir){_seq("off",btnClass);}
+						break;
+					case "click":
+						if(seq.type!=="stepped" || d.tweenRunning){return;}
+						_seq("on",btnClass);
+						break;
+				}
+				function _seq(a,c){
+					seq.scrollAmount=o.scrollButtons.scrollAmount;
+					_sequentialScroll($this,a,c);
+				}
+			});
+		},
+		/* -------------------- */
+		
+		
+		/* 
+		KEYBOARD EVENTS
+		scrolls content via keyboard 
+		Keys: up arrow, down arrow, left arrow, right arrow, PgUp, PgDn, Home, End
+		*/
+		_keyboard=function(){
+			var $this=$(this),d=$this.data(pluginPfx),o=d.opt,seq=d.sequential,
+				namespace=pluginPfx+"_"+d.idx,
+				mCustomScrollBox=$("#mCSB_"+d.idx),
+				mCSB_container=$("#mCSB_"+d.idx+"_container"),
+				wrapper=mCSB_container.parent(),
+				editables="input,textarea,select,datalist,keygen,[contenteditable='true']",
+				iframe=mCSB_container.find("iframe"),
+				events=["blur."+namespace+" keydown."+namespace+" keyup."+namespace];
+			if(iframe.length){
+				iframe.each(function(){
+					$(this).load(function(){
+						/* bind events on accessible iframes */
+						if(_canAccessIFrame(this)){
+							$(this.contentDocument || this.contentWindow.document).bind(events[0],function(e){
+								_onKeyboard(e);
+							});
+						}
+					});
+				});
+			}
+			mCustomScrollBox.attr("tabindex","0").bind(events[0],function(e){
+				_onKeyboard(e);
+			});
+			function _onKeyboard(e){
+				switch(e.type){
+					case "blur":
+						if(d.tweenRunning && seq.dir){_seq("off",null);}
+						break;
+					case "keydown": case "keyup":
+						var code=e.keyCode ? e.keyCode : e.which,action="on";
+						if((o.axis!=="x" && (code===38 || code===40)) || (o.axis!=="y" && (code===37 || code===39))){
+							/* up (38), down (40), left (37), right (39) arrows */
+							if(((code===38 || code===40) && !d.overflowed[0]) || ((code===37 || code===39) && !d.overflowed[1])){return;}
+							if(e.type==="keyup"){action="off";}
+							if(!$(document.activeElement).is(editables)){
+								e.preventDefault();
+								e.stopImmediatePropagation();
+								_seq(action,code);
+							}
+						}else if(code===33 || code===34){
+							/* PgUp (33), PgDn (34) */
+							if(d.overflowed[0] || d.overflowed[1]){
+								e.preventDefault();
+								e.stopImmediatePropagation();
+							}
+							if(e.type==="keyup"){
+								_stop($this);
+								var keyboardDir=code===34 ? -1 : 1;
+								if(o.axis==="x" || (o.axis==="yx" && d.overflowed[1] && !d.overflowed[0])){
+									var dir="x",to=Math.abs(mCSB_container[0].offsetLeft)-(keyboardDir*(wrapper.width()*0.9));
+								}else{
+									var dir="y",to=Math.abs(mCSB_container[0].offsetTop)-(keyboardDir*(wrapper.height()*0.9));
+								}
+								_scrollTo($this,to.toString(),{dir:dir,scrollEasing:"mcsEaseInOut"});
+							}
+						}else if(code===35 || code===36){
+							/* End (35), Home (36) */
+							if(!$(document.activeElement).is(editables)){
+								if(d.overflowed[0] || d.overflowed[1]){
+									e.preventDefault();
+									e.stopImmediatePropagation();
+								}
+								if(e.type==="keyup"){
+									if(o.axis==="x" || (o.axis==="yx" && d.overflowed[1] && !d.overflowed[0])){
+										var dir="x",to=code===35 ? Math.abs(wrapper.width()-mCSB_container.outerWidth(false)) : 0;
+									}else{
+										var dir="y",to=code===35 ? Math.abs(wrapper.height()-mCSB_container.outerHeight(false)) : 0;
+									}
+									_scrollTo($this,to.toString(),{dir:dir,scrollEasing:"mcsEaseInOut"});
+								}
+							}
+						}
+						break;
+				}
+				function _seq(a,c){
+					seq.type=o.keyboard.scrollType;
+					seq.scrollAmount=o.keyboard.scrollAmount;
+					if(seq.type==="stepped" && d.tweenRunning){return;}
+					_sequentialScroll($this,a,c);
+				}
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* scrolls content sequentially (used when scrolling via buttons, keyboard arrows etc.) */
+		_sequentialScroll=function(el,action,trigger,e,s){
+			var d=el.data(pluginPfx),o=d.opt,seq=d.sequential,
+				mCSB_container=$("#mCSB_"+d.idx+"_container"),
+				once=seq.type==="stepped" ? true : false,
+				steplessSpeed=o.scrollInertia < 26 ? 26 : o.scrollInertia, /* 26/1.5=17 */
+				steppedSpeed=o.scrollInertia < 1 ? 17 : o.scrollInertia;
+			switch(action){
+				case "on":
+					seq.dir=[
+						(trigger===classes[16] || trigger===classes[15] || trigger===39 || trigger===37 ? "x" : "y"),
+						(trigger===classes[13] || trigger===classes[15] || trigger===38 || trigger===37 ? -1 : 1)
+					];
+					_stop(el);
+					if(_isNumeric(trigger) && seq.type==="stepped"){return;}
+					_on(once);
+					break;
+				case "off":
+					_off();
+					if(once || (d.tweenRunning && seq.dir)){
+						_on(true);
+					}
+					break;
+			}
+			
+			/* starts sequence */
+			function _on(once){
+				if(o.snapAmount){seq.scrollAmount=!(o.snapAmount instanceof Array) ? o.snapAmount : seq.dir[0]==="x" ? o.snapAmount[1] : o.snapAmount[0];} /* scrolling snapping */
+				var c=seq.type!=="stepped", /* continuous scrolling */
+					t=s ? s : !once ? 1000/60 : c ? steplessSpeed/1.5 : steppedSpeed, /* timer */
+					m=!once ? 2.5 : c ? 7.5 : 40, /* multiplier */
+					contentPos=[Math.abs(mCSB_container[0].offsetTop),Math.abs(mCSB_container[0].offsetLeft)],
+					ratio=[d.scrollRatio.y>10 ? 10 : d.scrollRatio.y,d.scrollRatio.x>10 ? 10 : d.scrollRatio.x],
+					amount=seq.dir[0]==="x" ? contentPos[1]+(seq.dir[1]*(ratio[1]*m)) : contentPos[0]+(seq.dir[1]*(ratio[0]*m)),
+					px=seq.dir[0]==="x" ? contentPos[1]+(seq.dir[1]*parseInt(seq.scrollAmount)) : contentPos[0]+(seq.dir[1]*parseInt(seq.scrollAmount)),
+					to=seq.scrollAmount!=="auto" ? px : amount,
+					easing=e ? e : !once ? "mcsLinear" : c ? "mcsLinearOut" : "mcsEaseInOut",
+					onComplete=!once ? false : true;
+				if(once && t<17){
+					to=seq.dir[0]==="x" ? contentPos[1] : contentPos[0];
+				}
+				_scrollTo(el,to.toString(),{dir:seq.dir[0],scrollEasing:easing,dur:t,onComplete:onComplete});
+				if(once){
+					seq.dir=false;
+					return;
+				}
+				clearTimeout(seq.step);
+				seq.step=setTimeout(function(){
+					_on();
+				},t);
+			}
+			/* stops sequence */
+			function _off(){
+				clearTimeout(seq.step);
+				_delete(seq,"step");
+				_stop(el);
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* returns a yx array from value */
+		_arr=function(val){
+			var o=$(this).data(pluginPfx).opt,vals=[];
+			if(typeof val==="function"){val=val();} /* check if the value is a single anonymous function */
+			/* check if value is object or array, its length and create an array with yx values */
+			if(!(val instanceof Array)){ /* object value (e.g. {y:"100",x:"100"}, 100 etc.) */
+				vals[0]=val.y ? val.y : val.x || o.axis==="x" ? null : val;
+				vals[1]=val.x ? val.x : val.y || o.axis==="y" ? null : val;
+			}else{ /* array value (e.g. [100,100]) */
+				vals=val.length>1 ? [val[0],val[1]] : o.axis==="x" ? [null,val[0]] : [val[0],null];
+			}
+			/* check if array values are anonymous functions */
+			if(typeof vals[0]==="function"){vals[0]=vals[0]();}
+			if(typeof vals[1]==="function"){vals[1]=vals[1]();}
+			return vals;
+		},
+		/* -------------------- */
+		
+		
+		/* translates values (e.g. "top", 100, "100px", "#id") to actual scroll-to positions */
+		_to=function(val,dir){
+			if(val==null || typeof val=="undefined"){return;}
+			var $this=$(this),d=$this.data(pluginPfx),o=d.opt,
+				mCSB_container=$("#mCSB_"+d.idx+"_container"),
+				wrapper=mCSB_container.parent(),
+				t=typeof val;
+			if(!dir){dir=o.axis==="x" ? "x" : "y";}
+			var contentLength=dir==="x" ? mCSB_container.outerWidth(false) : mCSB_container.outerHeight(false),
+				contentPos=dir==="x" ? mCSB_container[0].offsetLeft : mCSB_container[0].offsetTop,
+				cssProp=dir==="x" ? "left" : "top";
+			switch(t){
+				case "function": /* this currently is not used. Consider removing it */
+					return val();
+					break;
+				case "object": /* js/jquery object */
+					var obj=val.jquery ? val : $(val);
+					if(!obj.length){return;}
+					return dir==="x" ? _childPos(obj)[1] : _childPos(obj)[0];
+					break;
+				case "string": case "number":
+					if(_isNumeric(val)){ /* numeric value */
+						return Math.abs(val);
+					}else if(val.indexOf("%")!==-1){ /* percentage value */
+						return Math.abs(contentLength*parseInt(val)/100);
+					}else if(val.indexOf("-=")!==-1){ /* decrease value */
+						return Math.abs(contentPos-parseInt(val.split("-=")[1]));
+					}else if(val.indexOf("+=")!==-1){ /* inrease value */
+						var p=(contentPos+parseInt(val.split("+=")[1]));
+						return p>=0 ? 0 : Math.abs(p);
+					}else if(val.indexOf("px")!==-1 && _isNumeric(val.split("px")[0])){ /* pixels string value (e.g. "100px") */
+						return Math.abs(val.split("px")[0]);
+					}else{
+						if(val==="top" || val==="left"){ /* special strings */
+							return 0;
+						}else if(val==="bottom"){
+							return Math.abs(wrapper.height()-mCSB_container.outerHeight(false));
+						}else if(val==="right"){
+							return Math.abs(wrapper.width()-mCSB_container.outerWidth(false));
+						}else if(val==="first" || val==="last"){
+							var obj=mCSB_container.find(":"+val);
+							return dir==="x" ? _childPos(obj)[1] : _childPos(obj)[0];
+						}else{
+							if($(val).length){ /* jquery selector */
+								return dir==="x" ? _childPos($(val))[1] : _childPos($(val))[0];
+							}else{ /* other values (e.g. "100em") */
+								mCSB_container.css(cssProp,val);
+								methods.update.call(null,$this[0]);
+								return;
+							}
+						}
+					}
+					break;
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* calls the update method automatically */
+		_autoUpdate=function(rem){
+			var $this=$(this),d=$this.data(pluginPfx),o=d.opt,
+				mCSB_container=$("#mCSB_"+d.idx+"_container");
+			if(rem){
+				/* 
+				removes autoUpdate timer 
+				usage: _autoUpdate.call(this,"remove");
+				*/
+				clearTimeout(mCSB_container[0].autoUpdate);
+				_delete(mCSB_container[0],"autoUpdate");
+				return;
+			}
+			upd();
+			function upd(){
+				clearTimeout(mCSB_container[0].autoUpdate);
+				if($this.parents("html").length===0){
+					/* check element in dom tree */
+					$this=null;
+					return;
+				}
+				mCSB_container[0].autoUpdate=setTimeout(function(){
+					/* update on specific selector(s) length and size change */
+					if(o.advanced.updateOnSelectorChange){
+						d.poll.change.n=sizesSum();
+						if(d.poll.change.n!==d.poll.change.o){
+							d.poll.change.o=d.poll.change.n;
+							doUpd(3);
+							return;
+						}
+					}
+					/* update on main element and scrollbar size changes */
+					if(o.advanced.updateOnContentResize){
+						d.poll.size.n=$this[0].scrollHeight+$this[0].scrollWidth+mCSB_container[0].offsetHeight+$this[0].offsetHeight+$this[0].offsetWidth;
+						if(d.poll.size.n!==d.poll.size.o){
+							d.poll.size.o=d.poll.size.n;
+							doUpd(1);
+							return;
+						}
+					}
+					/* update on image load */
+					if(o.advanced.updateOnImageLoad){
+						if(!(o.advanced.updateOnImageLoad==="auto" && o.axis==="y")){ //by default, it doesn't run on vertical content
+							d.poll.img.n=mCSB_container.find("img").length;
+							if(d.poll.img.n!==d.poll.img.o){
+								d.poll.img.o=d.poll.img.n;
+								mCSB_container.find("img").each(function(){
+									imgLoader(this);
+								});
+								return;
+							}
+						}
+					}
+					if(o.advanced.updateOnSelectorChange || o.advanced.updateOnContentResize || o.advanced.updateOnImageLoad){upd();}
+				},o.advanced.autoUpdateTimeout);
+			}
+			/* a tiny image loader */
+			function imgLoader(el){
+				if($(el).hasClass(classes[2])){doUpd(); return;}
+				var img=new Image();
+				function createDelegate(contextObject,delegateMethod){
+					return function(){return delegateMethod.apply(contextObject,arguments);}
+				}
+				function imgOnLoad(){
+					this.onload=null;
+					$(el).addClass(classes[2]);
+					doUpd(2);
+				}
+				img.onload=createDelegate(img,imgOnLoad);
+				img.src=el.src;
+			}
+			/* returns the total height and width sum of all elements matching the selector */
+			function sizesSum(){
+				if(o.advanced.updateOnSelectorChange===true){o.advanced.updateOnSelectorChange="*";}
+				var total=0,sel=mCSB_container.find(o.advanced.updateOnSelectorChange);
+				if(o.advanced.updateOnSelectorChange && sel.length>0){sel.each(function(){total+=this.offsetHeight+this.offsetWidth;});}
+				return total;
+			}
+			/* calls the update method */
+			function doUpd(cb){
+				clearTimeout(mCSB_container[0].autoUpdate);
+				methods.update.call(null,$this[0],cb);
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* snaps scrolling to a multiple of a pixels number */
+		_snapAmount=function(to,amount,offset){
+			return (Math.round(to/amount)*amount-offset); 
+		},
+		/* -------------------- */
+		
+		
+		/* stops content and scrollbar animations */
+		_stop=function(el){
+			var d=el.data(pluginPfx),
+				sel=$("#mCSB_"+d.idx+"_container,#mCSB_"+d.idx+"_container_wrapper,#mCSB_"+d.idx+"_dragger_vertical,#mCSB_"+d.idx+"_dragger_horizontal");
+			sel.each(function(){
+				_stopTween.call(this);
+			});
+		},
+		/* -------------------- */
+		
+		
+		/* 
+		ANIMATES CONTENT 
+		This is where the actual scrolling happens
+		*/
+		_scrollTo=function(el,to,options){
+			var d=el.data(pluginPfx),o=d.opt,
+				defaults={
+					trigger:"internal",
+					dir:"y",
+					scrollEasing:"mcsEaseOut",
+					drag:false,
+					dur:o.scrollInertia,
+					overwrite:"all",
+					callbacks:true,
+					onStart:true,
+					onUpdate:true,
+					onComplete:true
+				},
+				options=$.extend(defaults,options),
+				dur=[options.dur,(options.drag ? 0 : options.dur)],
+				mCustomScrollBox=$("#mCSB_"+d.idx),
+				mCSB_container=$("#mCSB_"+d.idx+"_container"),
+				wrapper=mCSB_container.parent(),
+				totalScrollOffsets=o.callbacks.onTotalScrollOffset ? _arr.call(el,o.callbacks.onTotalScrollOffset) : [0,0],
+				totalScrollBackOffsets=o.callbacks.onTotalScrollBackOffset ? _arr.call(el,o.callbacks.onTotalScrollBackOffset) : [0,0];
+			d.trigger=options.trigger;
+			if(wrapper.scrollTop()!==0 || wrapper.scrollLeft()!==0){ /* always reset scrollTop/Left */
+				$(".mCSB_"+d.idx+"_scrollbar").css("visibility","visible");
+				wrapper.scrollTop(0).scrollLeft(0);
+			}
+			if(to==="_resetY" && !d.contentReset.y){
+				/* callbacks: onOverflowYNone */
+				if(_cb("onOverflowYNone")){o.callbacks.onOverflowYNone.call(el[0]);}
+				d.contentReset.y=1;
+			}
+			if(to==="_resetX" && !d.contentReset.x){
+				/* callbacks: onOverflowXNone */
+				if(_cb("onOverflowXNone")){o.callbacks.onOverflowXNone.call(el[0]);}
+				d.contentReset.x=1;
+			}
+			if(to==="_resetY" || to==="_resetX"){return;}
+			if((d.contentReset.y || !el[0].mcs) && d.overflowed[0]){
+				/* callbacks: onOverflowY */
+				if(_cb("onOverflowY")){o.callbacks.onOverflowY.call(el[0]);}
+				d.contentReset.x=null;
+			}
+			if((d.contentReset.x || !el[0].mcs) && d.overflowed[1]){
+				/* callbacks: onOverflowX */
+				if(_cb("onOverflowX")){o.callbacks.onOverflowX.call(el[0]);}
+				d.contentReset.x=null;
+			}
+			if(o.snapAmount){ /* scrolling snapping */
+				var snapAmount=!(o.snapAmount instanceof Array) ? o.snapAmount : options.dir==="x" ? o.snapAmount[1] : o.snapAmount[0];
+				to=_snapAmount(to,snapAmount,o.snapOffset);
+			}
+			switch(options.dir){
+				case "x":
+					var mCSB_dragger=$("#mCSB_"+d.idx+"_dragger_horizontal"),
+						property="left",
+						contentPos=mCSB_container[0].offsetLeft,
+						limit=[
+							mCustomScrollBox.width()-mCSB_container.outerWidth(false),
+							mCSB_dragger.parent().width()-mCSB_dragger.width()
+						],
+						scrollTo=[to,to===0 ? 0 : (to/d.scrollRatio.x)],
+						tso=totalScrollOffsets[1],
+						tsbo=totalScrollBackOffsets[1],
+						totalScrollOffset=tso>0 ? tso/d.scrollRatio.x : 0,
+						totalScrollBackOffset=tsbo>0 ? tsbo/d.scrollRatio.x : 0;
+					break;
+				case "y":
+					var mCSB_dragger=$("#mCSB_"+d.idx+"_dragger_vertical"),
+						property="top",
+						contentPos=mCSB_container[0].offsetTop,
+						limit=[
+							mCustomScrollBox.height()-mCSB_container.outerHeight(false),
+							mCSB_dragger.parent().height()-mCSB_dragger.height()
+						],
+						scrollTo=[to,to===0 ? 0 : (to/d.scrollRatio.y)],
+						tso=totalScrollOffsets[0],
+						tsbo=totalScrollBackOffsets[0],
+						totalScrollOffset=tso>0 ? tso/d.scrollRatio.y : 0,
+						totalScrollBackOffset=tsbo>0 ? tsbo/d.scrollRatio.y : 0;
+					break;
+			}
+			if(scrollTo[1]<0 || (scrollTo[0]===0 && scrollTo[1]===0)){
+				scrollTo=[0,0];
+			}else if(scrollTo[1]>=limit[1]){
+				scrollTo=[limit[0],limit[1]];
+			}else{
+				scrollTo[0]=-scrollTo[0];
+			}
+			if(!el[0].mcs){
+				_mcs();  /* init mcs object (once) to make it available before callbacks */
+				if(_cb("onInit")){o.callbacks.onInit.call(el[0]);} /* callbacks: onInit */
+			}
+			clearTimeout(mCSB_container[0].onCompleteTimeout);
+			_tweenTo(mCSB_dragger[0],property,Math.round(scrollTo[1]),dur[1],options.scrollEasing);
+			if(!d.tweenRunning && ((contentPos===0 && scrollTo[0]>=0) || (contentPos===limit[0] && scrollTo[0]<=limit[0]))){return;}
+			_tweenTo(mCSB_container[0],property,Math.round(scrollTo[0]),dur[0],options.scrollEasing,options.overwrite,{
+				onStart:function(){
+					if(options.callbacks && options.onStart && !d.tweenRunning){
+						/* callbacks: onScrollStart */
+						if(_cb("onScrollStart")){_mcs(); o.callbacks.onScrollStart.call(el[0]);}
+						d.tweenRunning=true;
+						_onDragClasses(mCSB_dragger);
+						d.cbOffsets=_cbOffsets();
+					}
+				},onUpdate:function(){
+					if(options.callbacks && options.onUpdate){
+						/* callbacks: whileScrolling */
+						if(_cb("whileScrolling")){_mcs(); o.callbacks.whileScrolling.call(el[0]);}
+					}
+				},onComplete:function(){
+					if(options.callbacks && options.onComplete){
+						if(o.axis==="yx"){clearTimeout(mCSB_container[0].onCompleteTimeout);}
+						var t=mCSB_container[0].idleTimer || 0;
+						mCSB_container[0].onCompleteTimeout=setTimeout(function(){
+							/* callbacks: onScroll, onTotalScroll, onTotalScrollBack */
+							if(_cb("onScroll")){_mcs(); o.callbacks.onScroll.call(el[0]);}
+							if(_cb("onTotalScroll") && scrollTo[1]>=limit[1]-totalScrollOffset && d.cbOffsets[0]){_mcs(); o.callbacks.onTotalScroll.call(el[0]);}
+							if(_cb("onTotalScrollBack") && scrollTo[1]<=totalScrollBackOffset && d.cbOffsets[1]){_mcs(); o.callbacks.onTotalScrollBack.call(el[0]);}
+							d.tweenRunning=false;
+							mCSB_container[0].idleTimer=0;
+							_onDragClasses(mCSB_dragger,"hide");
+						},t);
+					}
+				}
+			});
+			/* checks if callback function exists */
+			function _cb(cb){
+				return d && o.callbacks[cb] && typeof o.callbacks[cb]==="function";
+			}
+			/* checks whether callback offsets always trigger */
+			function _cbOffsets(){
+				return [o.callbacks.alwaysTriggerOffsets || contentPos>=limit[0]+tso,o.callbacks.alwaysTriggerOffsets || contentPos<=-tsbo];
+			}
+			/* 
+			populates object with useful values for the user 
+			values: 
+				content: this.mcs.content
+				content top position: this.mcs.top 
+				content left position: this.mcs.left 
+				dragger top position: this.mcs.draggerTop 
+				dragger left position: this.mcs.draggerLeft 
+				scrolling y percentage: this.mcs.topPct 
+				scrolling x percentage: this.mcs.leftPct 
+				scrolling direction: this.mcs.direction
+			*/
+			function _mcs(){
+				var cp=[mCSB_container[0].offsetTop,mCSB_container[0].offsetLeft], /* content position */
+					dp=[mCSB_dragger[0].offsetTop,mCSB_dragger[0].offsetLeft], /* dragger position */
+					cl=[mCSB_container.outerHeight(false),mCSB_container.outerWidth(false)], /* content length */
+					pl=[mCustomScrollBox.height(),mCustomScrollBox.width()]; /* content parent length */
+				el[0].mcs={
+					content:mCSB_container, /* original content wrapper as jquery object */
+					top:cp[0],left:cp[1],draggerTop:dp[0],draggerLeft:dp[1],
+					topPct:Math.round((100*Math.abs(cp[0]))/(Math.abs(cl[0])-pl[0])),leftPct:Math.round((100*Math.abs(cp[1]))/(Math.abs(cl[1])-pl[1])),
+					direction:options.dir
+				};
+				/* 
+				this refers to the original element containing the scrollbar(s)
+				usage: this.mcs.top, this.mcs.leftPct etc. 
+				*/
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* 
+		CUSTOM JAVASCRIPT ANIMATION TWEEN 
+		Lighter and faster than jquery animate() and css transitions 
+		Animates top/left properties and includes easings 
+		*/
+		_tweenTo=function(el,prop,to,duration,easing,overwrite,callbacks){
+			if(!el._mTween){el._mTween={top:{},left:{}};}
+			var callbacks=callbacks || {},
+				onStart=callbacks.onStart || function(){},onUpdate=callbacks.onUpdate || function(){},onComplete=callbacks.onComplete || function(){},
+				startTime=_getTime(),_delay,progress=0,from=el.offsetTop,elStyle=el.style,_request,tobj=el._mTween[prop];
+			if(prop==="left"){from=el.offsetLeft;}
+			var diff=to-from;
+			tobj.stop=0;
+			if(overwrite!=="none"){_cancelTween();}
+			_startTween();
+			function _step(){
+				if(tobj.stop){return;}
+				if(!progress){onStart.call();}
+				progress=_getTime()-startTime;
+				_tween();
+				if(progress>=tobj.time){
+					tobj.time=(progress>tobj.time) ? progress+_delay-(progress-tobj.time) : progress+_delay-1;
+					if(tobj.time<progress+1){tobj.time=progress+1;}
+				}
+				if(tobj.time<duration){tobj.id=_request(_step);}else{onComplete.call();}
+			}
+			function _tween(){
+				if(duration>0){
+					tobj.currVal=_ease(tobj.time,from,diff,duration,easing);
+					elStyle[prop]=Math.round(tobj.currVal)+"px";
+				}else{
+					elStyle[prop]=to+"px";
+				}
+				onUpdate.call();
+			}
+			function _startTween(){
+				_delay=1000/60;
+				tobj.time=progress+_delay;
+				_request=(!window.requestAnimationFrame) ? function(f){_tween(); return setTimeout(f,0.01);} : window.requestAnimationFrame;
+				tobj.id=_request(_step);
+			}
+			function _cancelTween(){
+				if(tobj.id==null){return;}
+				if(!window.requestAnimationFrame){clearTimeout(tobj.id);
+				}else{window.cancelAnimationFrame(tobj.id);}
+				tobj.id=null;
+			}
+			function _ease(t,b,c,d,type){
+				switch(type){
+					case "linear": case "mcsLinear":
+						return c*t/d + b;
+						break;
+					case "mcsLinearOut":
+						t/=d; t--; return c * Math.sqrt(1 - t*t) + b;
+						break;
+					case "easeInOutSmooth":
+						t/=d/2;
+						if(t<1) return c/2*t*t + b;
+						t--;
+						return -c/2 * (t*(t-2) - 1) + b;
+						break;
+					case "easeInOutStrong":
+						t/=d/2;
+						if(t<1) return c/2 * Math.pow( 2, 10 * (t - 1) ) + b;
+						t--;
+						return c/2 * ( -Math.pow( 2, -10 * t) + 2 ) + b;
+						break;
+					case "easeInOut": case "mcsEaseInOut":
+						t/=d/2;
+						if(t<1) return c/2*t*t*t + b;
+						t-=2;
+						return c/2*(t*t*t + 2) + b;
+						break;
+					case "easeOutSmooth":
+						t/=d; t--;
+						return -c * (t*t*t*t - 1) + b;
+						break;
+					case "easeOutStrong":
+						return c * ( -Math.pow( 2, -10 * t/d ) + 1 ) + b;
+						break;
+					case "easeOut": case "mcsEaseOut": default:
+						var ts=(t/=d)*t,tc=ts*t;
+						return b+c*(0.499999999999997*tc*ts + -2.5*ts*ts + 5.5*tc + -6.5*ts + 4*t);
+				}
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* returns current time */
+		_getTime=function(){
+			if(window.performance && window.performance.now){
+				return window.performance.now();
+			}else{
+				if(window.performance && window.performance.webkitNow){
+					return window.performance.webkitNow();
+				}else{
+					if(Date.now){return Date.now();}else{return new Date().getTime();}
+				}
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* stops a tween */
+		_stopTween=function(){
+			var el=this;
+			if(!el._mTween){el._mTween={top:{},left:{}};}
+			var props=["top","left"];
+			for(var i=0; i<props.length; i++){
+				var prop=props[i];
+				if(el._mTween[prop].id){
+					if(!window.requestAnimationFrame){clearTimeout(el._mTween[prop].id);
+					}else{window.cancelAnimationFrame(el._mTween[prop].id);}
+					el._mTween[prop].id=null;
+					el._mTween[prop].stop=1;
+				}
+			}
+		},
+		/* -------------------- */
+		
+		
+		/* deletes a property (avoiding the exception thrown by IE) */
+		_delete=function(c,m){
+			try{delete c[m];}catch(e){c[m]=null;}
+		},
+		/* -------------------- */
+		
+		
+		/* detects left mouse button */
+		_mouseBtnLeft=function(e){
+			return !(e.which && e.which!==1);
+		},
+		/* -------------------- */
+		
+		
+		/* detects if pointer type event is touch */
+		_pointerTouch=function(e){
+			var t=e.originalEvent.pointerType;
+			return !(t && t!=="touch" && t!==2);
+		},
+		/* -------------------- */
+		
+		
+		/* checks if value is numeric */
+		_isNumeric=function(val){
+			return !isNaN(parseFloat(val)) && isFinite(val);
+		},
+		/* -------------------- */
+		
+		
+		/* returns element position according to content */
+		_childPos=function(el){
+			var p=el.parents(".mCSB_container");
+			return [el.offset().top-p.offset().top,el.offset().left-p.offset().left];
+		},
+		/* -------------------- */
+		
+		
+		/* checks if browser tab is hidden/inactive via Page Visibility API */
+		_isTabHidden=function(){
+			var prop=_getHiddenProp();
+			if(!prop) return false;
+			return document[prop];
+			function _getHiddenProp(){
+				var pfx=["webkit","moz","ms","o"];
+				if("hidden" in document) return "hidden"; //natively supported
+				for(var i=0; i<pfx.length; i++){ //prefixed
+				    if((pfx[i]+"Hidden") in document) 
+				        return pfx[i]+"Hidden";
+				}
+				return null; //not supported
+			}
+		};
+		/* -------------------- */
+		
+	
+	
+	
+	
+	/* 
+	----------------------------------------
+	PLUGIN SETUP 
+	----------------------------------------
+	*/
+	
+	/* plugin constructor functions */
+	$.fn[pluginNS]=function(method){ /* usage: $(selector).mCustomScrollbar(); */
+		if(methods[method]){
+			return methods[method].apply(this,Array.prototype.slice.call(arguments,1));
+		}else if(typeof method==="object" || !method){
+			return methods.init.apply(this,arguments);
+		}else{
+			$.error("Method "+method+" does not exist");
+		}
+	};
+	$[pluginNS]=function(method){ /* usage: $.mCustomScrollbar(); */
+		if(methods[method]){
+			return methods[method].apply(this,Array.prototype.slice.call(arguments,1));
+		}else if(typeof method==="object" || !method){
+			return methods.init.apply(this,arguments);
+		}else{
+			$.error("Method "+method+" does not exist");
+		}
+	};
+	
+	/* 
+	allow setting plugin default options. 
+	usage: $.mCustomScrollbar.defaults.scrollInertia=500; 
+	to apply any changed default options on default selectors (below), use inside document ready fn 
+	e.g.: $(document).ready(function(){ $.mCustomScrollbar.defaults.scrollInertia=500; });
+	*/
+	$[pluginNS].defaults=defaults;
+	
+	/* 
+	add window object (window.mCustomScrollbar) 
+	usage: if(window.mCustomScrollbar){console.log("custom scrollbar plugin loaded");}
+	*/
+	window[pluginNS]=true;
+	
+	$(window).load(function(){
+		
+		$(defaultSelector)[pluginNS](); /* add scrollbars automatically on default selector */
+		
+		/* extend jQuery expressions */
+		$.extend($.expr[":"],{
+			/* checks if element is within scrollable viewport */
+			mcsInView:$.expr[":"].mcsInView || function(el){
+				var $el=$(el),content=$el.parents(".mCSB_container"),wrapper,cPos;
+				if(!content.length){return;}
+				wrapper=content.parent();
+				cPos=[content[0].offsetTop,content[0].offsetLeft];
+				return 	cPos[0]+_childPos($el)[0]>=0 && cPos[0]+_childPos($el)[0]<wrapper.height()-$el.outerHeight(false) && 
+						cPos[1]+_childPos($el)[1]>=0 && cPos[1]+_childPos($el)[1]<wrapper.width()-$el.outerWidth(false);
+			},
+			/* checks if element is overflowed having visible scrollbar(s) */
+			mcsOverflow:$.expr[":"].mcsOverflow || function(el){
+				var d=$(el).data(pluginPfx);
+				if(!d){return;}
+				return d.overflowed[0] || d.overflowed[1];
+			}
+		});
+	
+	});
+
+}))}));
\ No newline at end of file
diff --git a/public/bower_components/malihu-custom-scrollbar-plugin/mCSB_buttons.png b/public/bower_components/malihu-custom-scrollbar-plugin/mCSB_buttons.png
new file mode 100644
index 0000000000000000000000000000000000000000..985a9b8b5aba0e87e15b81c027f199d0d097cfd5
GIT binary patch
literal 2998
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
KSQU(@ZT|(at>>)(

literal 0
HcmV?d00001

diff --git a/public/bower_components/moment/moment.js b/public/bower_components/moment/moment.js
new file mode 100644
index 0000000..23cd3ed
--- /dev/null
+++ b/public/bower_components/moment/moment.js
@@ -0,0 +1,3195 @@
+//! moment.js
+//! version : 2.10.6
+//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
+//! license : MIT
+//! momentjs.com
+
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
+    typeof define === 'function' && define.amd ? define(factory) :
+    global.moment = factory()
+}(this, function () { 'use strict';
+
+    var hookCallback;
+
+    function utils_hooks__hooks () {
+        return hookCallback.apply(null, arguments);
+    }
+
+    // This is done to register the method called with moment()
+    // without creating circular dependencies.
+    function setHookCallback (callback) {
+        hookCallback = callback;
+    }
+
+    function isArray(input) {
+        return Object.prototype.toString.call(input) === '[object Array]';
+    }
+
+    function isDate(input) {
+        return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';
+    }
+
+    function map(arr, fn) {
+        var res = [], i;
+        for (i = 0; i < arr.length; ++i) {
+            res.push(fn(arr[i], i));
+        }
+        return res;
+    }
+
+    function hasOwnProp(a, b) {
+        return Object.prototype.hasOwnProperty.call(a, b);
+    }
+
+    function extend(a, b) {
+        for (var i in b) {
+            if (hasOwnProp(b, i)) {
+                a[i] = b[i];
+            }
+        }
+
+        if (hasOwnProp(b, 'toString')) {
+            a.toString = b.toString;
+        }
+
+        if (hasOwnProp(b, 'valueOf')) {
+            a.valueOf = b.valueOf;
+        }
+
+        return a;
+    }
+
+    function create_utc__createUTC (input, format, locale, strict) {
+        return createLocalOrUTC(input, format, locale, strict, true).utc();
+    }
+
+    function defaultParsingFlags() {
+        // We need to deep clone this object.
+        return {
+            empty           : false,
+            unusedTokens    : [],
+            unusedInput     : [],
+            overflow        : -2,
+            charsLeftOver   : 0,
+            nullInput       : false,
+            invalidMonth    : null,
+            invalidFormat   : false,
+            userInvalidated : false,
+            iso             : false
+        };
+    }
+
+    function getParsingFlags(m) {
+        if (m._pf == null) {
+            m._pf = defaultParsingFlags();
+        }
+        return m._pf;
+    }
+
+    function valid__isValid(m) {
+        if (m._isValid == null) {
+            var flags = getParsingFlags(m);
+            m._isValid = !isNaN(m._d.getTime()) &&
+                flags.overflow < 0 &&
+                !flags.empty &&
+                !flags.invalidMonth &&
+                !flags.invalidWeekday &&
+                !flags.nullInput &&
+                !flags.invalidFormat &&
+                !flags.userInvalidated;
+
+            if (m._strict) {
+                m._isValid = m._isValid &&
+                    flags.charsLeftOver === 0 &&
+                    flags.unusedTokens.length === 0 &&
+                    flags.bigHour === undefined;
+            }
+        }
+        return m._isValid;
+    }
+
+    function valid__createInvalid (flags) {
+        var m = create_utc__createUTC(NaN);
+        if (flags != null) {
+            extend(getParsingFlags(m), flags);
+        }
+        else {
+            getParsingFlags(m).userInvalidated = true;
+        }
+
+        return m;
+    }
+
+    var momentProperties = utils_hooks__hooks.momentProperties = [];
+
+    function copyConfig(to, from) {
+        var i, prop, val;
+
+        if (typeof from._isAMomentObject !== 'undefined') {
+            to._isAMomentObject = from._isAMomentObject;
+        }
+        if (typeof from._i !== 'undefined') {
+            to._i = from._i;
+        }
+        if (typeof from._f !== 'undefined') {
+            to._f = from._f;
+        }
+        if (typeof from._l !== 'undefined') {
+            to._l = from._l;
+        }
+        if (typeof from._strict !== 'undefined') {
+            to._strict = from._strict;
+        }
+        if (typeof from._tzm !== 'undefined') {
+            to._tzm = from._tzm;
+        }
+        if (typeof from._isUTC !== 'undefined') {
+            to._isUTC = from._isUTC;
+        }
+        if (typeof from._offset !== 'undefined') {
+            to._offset = from._offset;
+        }
+        if (typeof from._pf !== 'undefined') {
+            to._pf = getParsingFlags(from);
+        }
+        if (typeof from._locale !== 'undefined') {
+            to._locale = from._locale;
+        }
+
+        if (momentProperties.length > 0) {
+            for (i in momentProperties) {
+                prop = momentProperties[i];
+                val = from[prop];
+                if (typeof val !== 'undefined') {
+                    to[prop] = val;
+                }
+            }
+        }
+
+        return to;
+    }
+
+    var updateInProgress = false;
+
+    // Moment prototype object
+    function Moment(config) {
+        copyConfig(this, config);
+        this._d = new Date(config._d != null ? config._d.getTime() : NaN);
+        // Prevent infinite loop in case updateOffset creates new moment
+        // objects.
+        if (updateInProgress === false) {
+            updateInProgress = true;
+            utils_hooks__hooks.updateOffset(this);
+            updateInProgress = false;
+        }
+    }
+
+    function isMoment (obj) {
+        return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);
+    }
+
+    function absFloor (number) {
+        if (number < 0) {
+            return Math.ceil(number);
+        } else {
+            return Math.floor(number);
+        }
+    }
+
+    function toInt(argumentForCoercion) {
+        var coercedNumber = +argumentForCoercion,
+            value = 0;
+
+        if (coercedNumber !== 0 && isFinite(coercedNumber)) {
+            value = absFloor(coercedNumber);
+        }
+
+        return value;
+    }
+
+    function compareArrays(array1, array2, dontConvert) {
+        var len = Math.min(array1.length, array2.length),
+            lengthDiff = Math.abs(array1.length - array2.length),
+            diffs = 0,
+            i;
+        for (i = 0; i < len; i++) {
+            if ((dontConvert && array1[i] !== array2[i]) ||
+                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {
+                diffs++;
+            }
+        }
+        return diffs + lengthDiff;
+    }
+
+    function Locale() {
+    }
+
+    var locales = {};
+    var globalLocale;
+
+    function normalizeLocale(key) {
+        return key ? key.toLowerCase().replace('_', '-') : key;
+    }
+
+    // pick the locale from the array
+    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
+    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
+    function chooseLocale(names) {
+        var i = 0, j, next, locale, split;
+
+        while (i < names.length) {
+            split = normalizeLocale(names[i]).split('-');
+            j = split.length;
+            next = normalizeLocale(names[i + 1]);
+            next = next ? next.split('-') : null;
+            while (j > 0) {
+                locale = loadLocale(split.slice(0, j).join('-'));
+                if (locale) {
+                    return locale;
+                }
+                if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
+                    //the next array item is better than a shallower substring of this one
+                    break;
+                }
+                j--;
+            }
+            i++;
+        }
+        return null;
+    }
+
+    function loadLocale(name) {
+        var oldLocale = null;
+        // TODO: Find a better way to register and load all the locales in Node
+        if (!locales[name] && typeof module !== 'undefined' &&
+                module && module.exports) {
+            try {
+                oldLocale = globalLocale._abbr;
+                require('./locale/' + name);
+                // because defineLocale currently also sets the global locale, we
+                // want to undo that for lazy loaded locales
+                locale_locales__getSetGlobalLocale(oldLocale);
+            } catch (e) { }
+        }
+        return locales[name];
+    }
+
+    // This function will load locale and then set the global locale.  If
+    // no arguments are passed in, it will simply return the current global
+    // locale key.
+    function locale_locales__getSetGlobalLocale (key, values) {
+        var data;
+        if (key) {
+            if (typeof values === 'undefined') {
+                data = locale_locales__getLocale(key);
+            }
+            else {
+                data = defineLocale(key, values);
+            }
+
+            if (data) {
+                // moment.duration._locale = moment._locale = data;
+                globalLocale = data;
+            }
+        }
+
+        return globalLocale._abbr;
+    }
+
+    function defineLocale (name, values) {
+        if (values !== null) {
+            values.abbr = name;
+            locales[name] = locales[name] || new Locale();
+            locales[name].set(values);
+
+            // backwards compat for now: also set the locale
+            locale_locales__getSetGlobalLocale(name);
+
+            return locales[name];
+        } else {
+            // useful for testing
+            delete locales[name];
+            return null;
+        }
+    }
+
+    // returns locale data
+    function locale_locales__getLocale (key) {
+        var locale;
+
+        if (key && key._locale && key._locale._abbr) {
+            key = key._locale._abbr;
+        }
+
+        if (!key) {
+            return globalLocale;
+        }
+
+        if (!isArray(key)) {
+            //short-circuit everything else
+            locale = loadLocale(key);
+            if (locale) {
+                return locale;
+            }
+            key = [key];
+        }
+
+        return chooseLocale(key);
+    }
+
+    var aliases = {};
+
+    function addUnitAlias (unit, shorthand) {
+        var lowerCase = unit.toLowerCase();
+        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
+    }
+
+    function normalizeUnits(units) {
+        return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;
+    }
+
+    function normalizeObjectUnits(inputObject) {
+        var normalizedInput = {},
+            normalizedProp,
+            prop;
+
+        for (prop in inputObject) {
+            if (hasOwnProp(inputObject, prop)) {
+                normalizedProp = normalizeUnits(prop);
+                if (normalizedProp) {
+                    normalizedInput[normalizedProp] = inputObject[prop];
+                }
+            }
+        }
+
+        return normalizedInput;
+    }
+
+    function makeGetSet (unit, keepTime) {
+        return function (value) {
+            if (value != null) {
+                get_set__set(this, unit, value);
+                utils_hooks__hooks.updateOffset(this, keepTime);
+                return this;
+            } else {
+                return get_set__get(this, unit);
+            }
+        };
+    }
+
+    function get_set__get (mom, unit) {
+        return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]();
+    }
+
+    function get_set__set (mom, unit, value) {
+        return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
+    }
+
+    // MOMENTS
+
+    function getSet (units, value) {
+        var unit;
+        if (typeof units === 'object') {
+            for (unit in units) {
+                this.set(unit, units[unit]);
+            }
+        } else {
+            units = normalizeUnits(units);
+            if (typeof this[units] === 'function') {
+                return this[units](value);
+            }
+        }
+        return this;
+    }
+
+    function zeroFill(number, targetLength, forceSign) {
+        var absNumber = '' + Math.abs(number),
+            zerosToFill = targetLength - absNumber.length,
+            sign = number >= 0;
+        return (sign ? (forceSign ? '+' : '') : '-') +
+            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
+    }
+
+    var formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;
+
+    var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
+
+    var formatFunctions = {};
+
+    var formatTokenFunctions = {};
+
+    // token:    'M'
+    // padded:   ['MM', 2]
+    // ordinal:  'Mo'
+    // callback: function () { this.month() + 1 }
+    function addFormatToken (token, padded, ordinal, callback) {
+        var func = callback;
+        if (typeof callback === 'string') {
+            func = function () {
+                return this[callback]();
+            };
+        }
+        if (token) {
+            formatTokenFunctions[token] = func;
+        }
+        if (padded) {
+            formatTokenFunctions[padded[0]] = function () {
+                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
+            };
+        }
+        if (ordinal) {
+            formatTokenFunctions[ordinal] = function () {
+                return this.localeData().ordinal(func.apply(this, arguments), token);
+            };
+        }
+    }
+
+    function removeFormattingTokens(input) {
+        if (input.match(/\[[\s\S]/)) {
+            return input.replace(/^\[|\]$/g, '');
+        }
+        return input.replace(/\\/g, '');
+    }
+
+    function makeFormatFunction(format) {
+        var array = format.match(formattingTokens), i, length;
+
+        for (i = 0, length = array.length; i < length; i++) {
+            if (formatTokenFunctions[array[i]]) {
+                array[i] = formatTokenFunctions[array[i]];
+            } else {
+                array[i] = removeFormattingTokens(array[i]);
+            }
+        }
+
+        return function (mom) {
+            var output = '';
+            for (i = 0; i < length; i++) {
+                output += array[i] instanceof Function ? array[i].call(mom, format) : array[i];
+            }
+            return output;
+        };
+    }
+
+    // format date using native date object
+    function formatMoment(m, format) {
+        if (!m.isValid()) {
+            return m.localeData().invalidDate();
+        }
+
+        format = expandFormat(format, m.localeData());
+        formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
+
+        return formatFunctions[format](m);
+    }
+
+    function expandFormat(format, locale) {
+        var i = 5;
+
+        function replaceLongDateFormatTokens(input) {
+            return locale.longDateFormat(input) || input;
+        }
+
+        localFormattingTokens.lastIndex = 0;
+        while (i >= 0 && localFormattingTokens.test(format)) {
+            format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
+            localFormattingTokens.lastIndex = 0;
+            i -= 1;
+        }
+
+        return format;
+    }
+
+    var match1         = /\d/;            //       0 - 9
+    var match2         = /\d\d/;          //      00 - 99
+    var match3         = /\d{3}/;         //     000 - 999
+    var match4         = /\d{4}/;         //    0000 - 9999
+    var match6         = /[+-]?\d{6}/;    // -999999 - 999999
+    var match1to2      = /\d\d?/;         //       0 - 99
+    var match1to3      = /\d{1,3}/;       //       0 - 999
+    var match1to4      = /\d{1,4}/;       //       0 - 9999
+    var match1to6      = /[+-]?\d{1,6}/;  // -999999 - 999999
+
+    var matchUnsigned  = /\d+/;           //       0 - inf
+    var matchSigned    = /[+-]?\d+/;      //    -inf - inf
+
+    var matchOffset    = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z
+
+    var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123
+
+    // any word (or two) characters or numbers including two/three word month in arabic.
+    var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i;
+
+    var regexes = {};
+
+    function isFunction (sth) {
+        // https://github.com/moment/moment/issues/2325
+        return typeof sth === 'function' &&
+            Object.prototype.toString.call(sth) === '[object Function]';
+    }
+
+
+    function addRegexToken (token, regex, strictRegex) {
+        regexes[token] = isFunction(regex) ? regex : function (isStrict) {
+            return (isStrict && strictRegex) ? strictRegex : regex;
+        };
+    }
+
+    function getParseRegexForToken (token, config) {
+        if (!hasOwnProp(regexes, token)) {
+            return new RegExp(unescapeFormat(token));
+        }
+
+        return regexes[token](config._strict, config._locale);
+    }
+
+    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
+    function unescapeFormat(s) {
+        return s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
+            return p1 || p2 || p3 || p4;
+        }).replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+    }
+
+    var tokens = {};
+
+    function addParseToken (token, callback) {
+        var i, func = callback;
+        if (typeof token === 'string') {
+            token = [token];
+        }
+        if (typeof callback === 'number') {
+            func = function (input, array) {
+                array[callback] = toInt(input);
+            };
+        }
+        for (i = 0; i < token.length; i++) {
+            tokens[token[i]] = func;
+        }
+    }
+
+    function addWeekParseToken (token, callback) {
+        addParseToken(token, function (input, array, config, token) {
+            config._w = config._w || {};
+            callback(input, config._w, config, token);
+        });
+    }
+
+    function addTimeToArrayFromToken(token, input, config) {
+        if (input != null && hasOwnProp(tokens, token)) {
+            tokens[token](input, config._a, config, token);
+        }
+    }
+
+    var YEAR = 0;
+    var MONTH = 1;
+    var DATE = 2;
+    var HOUR = 3;
+    var MINUTE = 4;
+    var SECOND = 5;
+    var MILLISECOND = 6;
+
+    function daysInMonth(year, month) {
+        return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();
+    }
+
+    // FORMATTING
+
+    addFormatToken('M', ['MM', 2], 'Mo', function () {
+        return this.month() + 1;
+    });
+
+    addFormatToken('MMM', 0, 0, function (format) {
+        return this.localeData().monthsShort(this, format);
+    });
+
+    addFormatToken('MMMM', 0, 0, function (format) {
+        return this.localeData().months(this, format);
+    });
+
+    // ALIASES
+
+    addUnitAlias('month', 'M');
+
+    // PARSING
+
+    addRegexToken('M',    match1to2);
+    addRegexToken('MM',   match1to2, match2);
+    addRegexToken('MMM',  matchWord);
+    addRegexToken('MMMM', matchWord);
+
+    addParseToken(['M', 'MM'], function (input, array) {
+        array[MONTH] = toInt(input) - 1;
+    });
+
+    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
+        var month = config._locale.monthsParse(input, token, config._strict);
+        // if we didn't find a month name, mark the date as invalid.
+        if (month != null) {
+            array[MONTH] = month;
+        } else {
+            getParsingFlags(config).invalidMonth = input;
+        }
+    });
+
+    // LOCALES
+
+    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');
+    function localeMonths (m) {
+        return this._months[m.month()];
+    }
+
+    var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
+    function localeMonthsShort (m) {
+        return this._monthsShort[m.month()];
+    }
+
+    function localeMonthsParse (monthName, format, strict) {
+        var i, mom, regex;
+
+        if (!this._monthsParse) {
+            this._monthsParse = [];
+            this._longMonthsParse = [];
+            this._shortMonthsParse = [];
+        }
+
+        for (i = 0; i < 12; i++) {
+            // make the regex if we don't have it already
+            mom = create_utc__createUTC([2000, i]);
+            if (strict && !this._longMonthsParse[i]) {
+                this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
+                this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
+            }
+            if (!strict && !this._monthsParse[i]) {
+                regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
+                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
+            }
+            // test the regex
+            if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
+                return i;
+            } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
+                return i;
+            } else if (!strict && this._monthsParse[i].test(monthName)) {
+                return i;
+            }
+        }
+    }
+
+    // MOMENTS
+
+    function setMonth (mom, value) {
+        var dayOfMonth;
+
+        // TODO: Move this out of here!
+        if (typeof value === 'string') {
+            value = mom.localeData().monthsParse(value);
+            // TODO: Another silent failure?
+            if (typeof value !== 'number') {
+                return mom;
+            }
+        }
+
+        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
+        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
+        return mom;
+    }
+
+    function getSetMonth (value) {
+        if (value != null) {
+            setMonth(this, value);
+            utils_hooks__hooks.updateOffset(this, true);
+            return this;
+        } else {
+            return get_set__get(this, 'Month');
+        }
+    }
+
+    function getDaysInMonth () {
+        return daysInMonth(this.year(), this.month());
+    }
+
+    function checkOverflow (m) {
+        var overflow;
+        var a = m._a;
+
+        if (a && getParsingFlags(m).overflow === -2) {
+            overflow =
+                a[MONTH]       < 0 || a[MONTH]       > 11  ? MONTH :
+                a[DATE]        < 1 || a[DATE]        > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
+                a[HOUR]        < 0 || a[HOUR]        > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :
+                a[MINUTE]      < 0 || a[MINUTE]      > 59  ? MINUTE :
+                a[SECOND]      < 0 || a[SECOND]      > 59  ? SECOND :
+                a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
+                -1;
+
+            if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
+                overflow = DATE;
+            }
+
+            getParsingFlags(m).overflow = overflow;
+        }
+
+        return m;
+    }
+
+    function warn(msg) {
+        if (utils_hooks__hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) {
+            console.warn('Deprecation warning: ' + msg);
+        }
+    }
+
+    function deprecate(msg, fn) {
+        var firstTime = true;
+
+        return extend(function () {
+            if (firstTime) {
+                warn(msg + '\n' + (new Error()).stack);
+                firstTime = false;
+            }
+            return fn.apply(this, arguments);
+        }, fn);
+    }
+
+    var deprecations = {};
+
+    function deprecateSimple(name, msg) {
+        if (!deprecations[name]) {
+            warn(msg);
+            deprecations[name] = true;
+        }
+    }
+
+    utils_hooks__hooks.suppressDeprecationWarnings = false;
+
+    var from_string__isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
+
+    var isoDates = [
+        ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/],
+        ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/],
+        ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/],
+        ['GGGG-[W]WW', /\d{4}-W\d{2}/],
+        ['YYYY-DDD', /\d{4}-\d{3}/]
+    ];
+
+    // iso time formats and regexes
+    var isoTimes = [
+        ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/],
+        ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/],
+        ['HH:mm', /(T| )\d\d:\d\d/],
+        ['HH', /(T| )\d\d/]
+    ];
+
+    var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
+
+    // date from iso format
+    function configFromISO(config) {
+        var i, l,
+            string = config._i,
+            match = from_string__isoRegex.exec(string);
+
+        if (match) {
+            getParsingFlags(config).iso = true;
+            for (i = 0, l = isoDates.length; i < l; i++) {
+                if (isoDates[i][1].exec(string)) {
+                    config._f = isoDates[i][0];
+                    break;
+                }
+            }
+            for (i = 0, l = isoTimes.length; i < l; i++) {
+                if (isoTimes[i][1].exec(string)) {
+                    // match[6] should be 'T' or space
+                    config._f += (match[6] || ' ') + isoTimes[i][0];
+                    break;
+                }
+            }
+            if (string.match(matchOffset)) {
+                config._f += 'Z';
+            }
+            configFromStringAndFormat(config);
+        } else {
+            config._isValid = false;
+        }
+    }
+
+    // date from iso format or fallback
+    function configFromString(config) {
+        var matched = aspNetJsonRegex.exec(config._i);
+
+        if (matched !== null) {
+            config._d = new Date(+matched[1]);
+            return;
+        }
+
+        configFromISO(config);
+        if (config._isValid === false) {
+            delete config._isValid;
+            utils_hooks__hooks.createFromInputFallback(config);
+        }
+    }
+
+    utils_hooks__hooks.createFromInputFallback = deprecate(
+        'moment construction falls back to js Date. This is ' +
+        'discouraged and will be removed in upcoming major ' +
+        'release. Please refer to ' +
+        'https://github.com/moment/moment/issues/1407 for more info.',
+        function (config) {
+            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
+        }
+    );
+
+    function createDate (y, m, d, h, M, s, ms) {
+        //can't just apply() to create a date:
+        //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply
+        var date = new Date(y, m, d, h, M, s, ms);
+
+        //the date constructor doesn't accept years < 1970
+        if (y < 1970) {
+            date.setFullYear(y);
+        }
+        return date;
+    }
+
+    function createUTCDate (y) {
+        var date = new Date(Date.UTC.apply(null, arguments));
+        if (y < 1970) {
+            date.setUTCFullYear(y);
+        }
+        return date;
+    }
+
+    addFormatToken(0, ['YY', 2], 0, function () {
+        return this.year() % 100;
+    });
+
+    addFormatToken(0, ['YYYY',   4],       0, 'year');
+    addFormatToken(0, ['YYYYY',  5],       0, 'year');
+    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
+
+    // ALIASES
+
+    addUnitAlias('year', 'y');
+
+    // PARSING
+
+    addRegexToken('Y',      matchSigned);
+    addRegexToken('YY',     match1to2, match2);
+    addRegexToken('YYYY',   match1to4, match4);
+    addRegexToken('YYYYY',  match1to6, match6);
+    addRegexToken('YYYYYY', match1to6, match6);
+
+    addParseToken(['YYYYY', 'YYYYYY'], YEAR);
+    addParseToken('YYYY', function (input, array) {
+        array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input);
+    });
+    addParseToken('YY', function (input, array) {
+        array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input);
+    });
+
+    // HELPERS
+
+    function daysInYear(year) {
+        return isLeapYear(year) ? 366 : 365;
+    }
+
+    function isLeapYear(year) {
+        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
+    }
+
+    // HOOKS
+
+    utils_hooks__hooks.parseTwoDigitYear = function (input) {
+        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
+    };
+
+    // MOMENTS
+
+    var getSetYear = makeGetSet('FullYear', false);
+
+    function getIsLeapYear () {
+        return isLeapYear(this.year());
+    }
+
+    addFormatToken('w', ['ww', 2], 'wo', 'week');
+    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
+
+    // ALIASES
+
+    addUnitAlias('week', 'w');
+    addUnitAlias('isoWeek', 'W');
+
+    // PARSING
+
+    addRegexToken('w',  match1to2);
+    addRegexToken('ww', match1to2, match2);
+    addRegexToken('W',  match1to2);
+    addRegexToken('WW', match1to2, match2);
+
+    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {
+        week[token.substr(0, 1)] = toInt(input);
+    });
+
+    // HELPERS
+
+    // firstDayOfWeek       0 = sun, 6 = sat
+    //                      the day of the week that starts the week
+    //                      (usually sunday or monday)
+    // firstDayOfWeekOfYear 0 = sun, 6 = sat
+    //                      the first week is the week that contains the first
+    //                      of this day of the week
+    //                      (eg. ISO weeks use thursday (4))
+    function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) {
+        var end = firstDayOfWeekOfYear - firstDayOfWeek,
+            daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(),
+            adjustedMoment;
+
+
+        if (daysToDayOfWeek > end) {
+            daysToDayOfWeek -= 7;
+        }
+
+        if (daysToDayOfWeek < end - 7) {
+            daysToDayOfWeek += 7;
+        }
+
+        adjustedMoment = local__createLocal(mom).add(daysToDayOfWeek, 'd');
+        return {
+            week: Math.ceil(adjustedMoment.dayOfYear() / 7),
+            year: adjustedMoment.year()
+        };
+    }
+
+    // LOCALES
+
+    function localeWeek (mom) {
+        return weekOfYear(mom, this._week.dow, this._week.doy).week;
+    }
+
+    var defaultLocaleWeek = {
+        dow : 0, // Sunday is the first day of the week.
+        doy : 6  // The week that contains Jan 1st is the first week of the year.
+    };
+
+    function localeFirstDayOfWeek () {
+        return this._week.dow;
+    }
+
+    function localeFirstDayOfYear () {
+        return this._week.doy;
+    }
+
+    // MOMENTS
+
+    function getSetWeek (input) {
+        var week = this.localeData().week(this);
+        return input == null ? week : this.add((input - week) * 7, 'd');
+    }
+
+    function getSetISOWeek (input) {
+        var week = weekOfYear(this, 1, 4).week;
+        return input == null ? week : this.add((input - week) * 7, 'd');
+    }
+
+    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
+
+    // ALIASES
+
+    addUnitAlias('dayOfYear', 'DDD');
+
+    // PARSING
+
+    addRegexToken('DDD',  match1to3);
+    addRegexToken('DDDD', match3);
+    addParseToken(['DDD', 'DDDD'], function (input, array, config) {
+        config._dayOfYear = toInt(input);
+    });
+
+    // HELPERS
+
+    //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
+    function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {
+        var week1Jan = 6 + firstDayOfWeek - firstDayOfWeekOfYear, janX = createUTCDate(year, 0, 1 + week1Jan), d = janX.getUTCDay(), dayOfYear;
+        if (d < firstDayOfWeek) {
+            d += 7;
+        }
+
+        weekday = weekday != null ? 1 * weekday : firstDayOfWeek;
+
+        dayOfYear = 1 + week1Jan + 7 * (week - 1) - d + weekday;
+
+        return {
+            year: dayOfYear > 0 ? year : year - 1,
+            dayOfYear: dayOfYear > 0 ?  dayOfYear : daysInYear(year - 1) + dayOfYear
+        };
+    }
+
+    // MOMENTS
+
+    function getSetDayOfYear (input) {
+        var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
+        return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
+    }
+
+    // Pick the first defined of two or three arguments.
+    function defaults(a, b, c) {
+        if (a != null) {
+            return a;
+        }
+        if (b != null) {
+            return b;
+        }
+        return c;
+    }
+
+    function currentDateArray(config) {
+        var now = new Date();
+        if (config._useUTC) {
+            return [now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()];
+        }
+        return [now.getFullYear(), now.getMonth(), now.getDate()];
+    }
+
+    // convert an array to a date.
+    // the array should mirror the parameters below
+    // note: all values past the year are optional and will default to the lowest possible value.
+    // [year, month, day , hour, minute, second, millisecond]
+    function configFromArray (config) {
+        var i, date, input = [], currentDate, yearToUse;
+
+        if (config._d) {
+            return;
+        }
+
+        currentDate = currentDateArray(config);
+
+        //compute day of the year from weeks and weekdays
+        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
+            dayOfYearFromWeekInfo(config);
+        }
+
+        //if the day of the year is set, figure out what it is
+        if (config._dayOfYear) {
+            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
+
+            if (config._dayOfYear > daysInYear(yearToUse)) {
+                getParsingFlags(config)._overflowDayOfYear = true;
+            }
+
+            date = createUTCDate(yearToUse, 0, config._dayOfYear);
+            config._a[MONTH] = date.getUTCMonth();
+            config._a[DATE] = date.getUTCDate();
+        }
+
+        // Default to current date.
+        // * if no year, month, day of month are given, default to today
+        // * if day of month is given, default month and year
+        // * if month is given, default only year
+        // * if year is given, don't default anything
+        for (i = 0; i < 3 && config._a[i] == null; ++i) {
+            config._a[i] = input[i] = currentDate[i];
+        }
+
+        // Zero out whatever was not defaulted, including time
+        for (; i < 7; i++) {
+            config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
+        }
+
+        // Check for 24:00:00.000
+        if (config._a[HOUR] === 24 &&
+                config._a[MINUTE] === 0 &&
+                config._a[SECOND] === 0 &&
+                config._a[MILLISECOND] === 0) {
+            config._nextDay = true;
+            config._a[HOUR] = 0;
+        }
+
+        config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
+        // Apply timezone offset from input. The actual utcOffset can be changed
+        // with parseZone.
+        if (config._tzm != null) {
+            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
+        }
+
+        if (config._nextDay) {
+            config._a[HOUR] = 24;
+        }
+    }
+
+    function dayOfYearFromWeekInfo(config) {
+        var w, weekYear, week, weekday, dow, doy, temp;
+
+        w = config._w;
+        if (w.GG != null || w.W != null || w.E != null) {
+            dow = 1;
+            doy = 4;
+
+            // TODO: We need to take the current isoWeekYear, but that depends on
+            // how we interpret now (local, utc, fixed offset). So create
+            // a now version of current config (take local/utc/offset flags, and
+            // create now).
+            weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year);
+            week = defaults(w.W, 1);
+            weekday = defaults(w.E, 1);
+        } else {
+            dow = config._locale._week.dow;
+            doy = config._locale._week.doy;
+
+            weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year);
+            week = defaults(w.w, 1);
+
+            if (w.d != null) {
+                // weekday -- low day numbers are considered next week
+                weekday = w.d;
+                if (weekday < dow) {
+                    ++week;
+                }
+            } else if (w.e != null) {
+                // local weekday -- counting starts from begining of week
+                weekday = w.e + dow;
+            } else {
+                // default to begining of week
+                weekday = dow;
+            }
+        }
+        temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow);
+
+        config._a[YEAR] = temp.year;
+        config._dayOfYear = temp.dayOfYear;
+    }
+
+    utils_hooks__hooks.ISO_8601 = function () {};
+
+    // date from string and format string
+    function configFromStringAndFormat(config) {
+        // TODO: Move this to another part of the creation flow to prevent circular deps
+        if (config._f === utils_hooks__hooks.ISO_8601) {
+            configFromISO(config);
+            return;
+        }
+
+        config._a = [];
+        getParsingFlags(config).empty = true;
+
+        // This array is used to make a Date, either with `new Date` or `Date.UTC`
+        var string = '' + config._i,
+            i, parsedInput, tokens, token, skipped,
+            stringLength = string.length,
+            totalParsedInputLength = 0;
+
+        tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];
+
+        for (i = 0; i < tokens.length; i++) {
+            token = tokens[i];
+            parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
+            if (parsedInput) {
+                skipped = string.substr(0, string.indexOf(parsedInput));
+                if (skipped.length > 0) {
+                    getParsingFlags(config).unusedInput.push(skipped);
+                }
+                string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
+                totalParsedInputLength += parsedInput.length;
+            }
+            // don't parse if it's not a known token
+            if (formatTokenFunctions[token]) {
+                if (parsedInput) {
+                    getParsingFlags(config).empty = false;
+                }
+                else {
+                    getParsingFlags(config).unusedTokens.push(token);
+                }
+                addTimeToArrayFromToken(token, parsedInput, config);
+            }
+            else if (config._strict && !parsedInput) {
+                getParsingFlags(config).unusedTokens.push(token);
+            }
+        }
+
+        // add remaining unparsed input length to the string
+        getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
+        if (string.length > 0) {
+            getParsingFlags(config).unusedInput.push(string);
+        }
+
+        // clear _12h flag if hour is <= 12
+        if (getParsingFlags(config).bigHour === true &&
+                config._a[HOUR] <= 12 &&
+                config._a[HOUR] > 0) {
+            getParsingFlags(config).bigHour = undefined;
+        }
+        // handle meridiem
+        config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
+
+        configFromArray(config);
+        checkOverflow(config);
+    }
+
+
+    function meridiemFixWrap (locale, hour, meridiem) {
+        var isPm;
+
+        if (meridiem == null) {
+            // nothing to do
+            return hour;
+        }
+        if (locale.meridiemHour != null) {
+            return locale.meridiemHour(hour, meridiem);
+        } else if (locale.isPM != null) {
+            // Fallback
+            isPm = locale.isPM(meridiem);
+            if (isPm && hour < 12) {
+                hour += 12;
+            }
+            if (!isPm && hour === 12) {
+                hour = 0;
+            }
+            return hour;
+        } else {
+            // this is not supposed to happen
+            return hour;
+        }
+    }
+
+    function configFromStringAndArray(config) {
+        var tempConfig,
+            bestMoment,
+
+            scoreToBeat,
+            i,
+            currentScore;
+
+        if (config._f.length === 0) {
+            getParsingFlags(config).invalidFormat = true;
+            config._d = new Date(NaN);
+            return;
+        }
+
+        for (i = 0; i < config._f.length; i++) {
+            currentScore = 0;
+            tempConfig = copyConfig({}, config);
+            if (config._useUTC != null) {
+                tempConfig._useUTC = config._useUTC;
+            }
+            tempConfig._f = config._f[i];
+            configFromStringAndFormat(tempConfig);
+
+            if (!valid__isValid(tempConfig)) {
+                continue;
+            }
+
+            // if there is any input that was not parsed add a penalty for that format
+            currentScore += getParsingFlags(tempConfig).charsLeftOver;
+
+            //or tokens
+            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
+
+            getParsingFlags(tempConfig).score = currentScore;
+
+            if (scoreToBeat == null || currentScore < scoreToBeat) {
+                scoreToBeat = currentScore;
+                bestMoment = tempConfig;
+            }
+        }
+
+        extend(config, bestMoment || tempConfig);
+    }
+
+    function configFromObject(config) {
+        if (config._d) {
+            return;
+        }
+
+        var i = normalizeObjectUnits(config._i);
+        config._a = [i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond];
+
+        configFromArray(config);
+    }
+
+    function createFromConfig (config) {
+        var res = new Moment(checkOverflow(prepareConfig(config)));
+        if (res._nextDay) {
+            // Adding is smart enough around DST
+            res.add(1, 'd');
+            res._nextDay = undefined;
+        }
+
+        return res;
+    }
+
+    function prepareConfig (config) {
+        var input = config._i,
+            format = config._f;
+
+        config._locale = config._locale || locale_locales__getLocale(config._l);
+
+        if (input === null || (format === undefined && input === '')) {
+            return valid__createInvalid({nullInput: true});
+        }
+
+        if (typeof input === 'string') {
+            config._i = input = config._locale.preparse(input);
+        }
+
+        if (isMoment(input)) {
+            return new Moment(checkOverflow(input));
+        } else if (isArray(format)) {
+            configFromStringAndArray(config);
+        } else if (format) {
+            configFromStringAndFormat(config);
+        } else if (isDate(input)) {
+            config._d = input;
+        } else {
+            configFromInput(config);
+        }
+
+        return config;
+    }
+
+    function configFromInput(config) {
+        var input = config._i;
+        if (input === undefined) {
+            config._d = new Date();
+        } else if (isDate(input)) {
+            config._d = new Date(+input);
+        } else if (typeof input === 'string') {
+            configFromString(config);
+        } else if (isArray(input)) {
+            config._a = map(input.slice(0), function (obj) {
+                return parseInt(obj, 10);
+            });
+            configFromArray(config);
+        } else if (typeof(input) === 'object') {
+            configFromObject(config);
+        } else if (typeof(input) === 'number') {
+            // from milliseconds
+            config._d = new Date(input);
+        } else {
+            utils_hooks__hooks.createFromInputFallback(config);
+        }
+    }
+
+    function createLocalOrUTC (input, format, locale, strict, isUTC) {
+        var c = {};
+
+        if (typeof(locale) === 'boolean') {
+            strict = locale;
+            locale = undefined;
+        }
+        // object construction must be done this way.
+        // https://github.com/moment/moment/issues/1423
+        c._isAMomentObject = true;
+        c._useUTC = c._isUTC = isUTC;
+        c._l = locale;
+        c._i = input;
+        c._f = format;
+        c._strict = strict;
+
+        return createFromConfig(c);
+    }
+
+    function local__createLocal (input, format, locale, strict) {
+        return createLocalOrUTC(input, format, locale, strict, false);
+    }
+
+    var prototypeMin = deprecate(
+         'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548',
+         function () {
+             var other = local__createLocal.apply(null, arguments);
+             return other < this ? this : other;
+         }
+     );
+
+    var prototypeMax = deprecate(
+        'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548',
+        function () {
+            var other = local__createLocal.apply(null, arguments);
+            return other > this ? this : other;
+        }
+    );
+
+    // Pick a moment m from moments so that m[fn](other) is true for all
+    // other. This relies on the function fn to be transitive.
+    //
+    // moments should either be an array of moment objects or an array, whose
+    // first element is an array of moment objects.
+    function pickBy(fn, moments) {
+        var res, i;
+        if (moments.length === 1 && isArray(moments[0])) {
+            moments = moments[0];
+        }
+        if (!moments.length) {
+            return local__createLocal();
+        }
+        res = moments[0];
+        for (i = 1; i < moments.length; ++i) {
+            if (!moments[i].isValid() || moments[i][fn](res)) {
+                res = moments[i];
+            }
+        }
+        return res;
+    }
+
+    // TODO: Use [].sort instead?
+    function min () {
+        var args = [].slice.call(arguments, 0);
+
+        return pickBy('isBefore', args);
+    }
+
+    function max () {
+        var args = [].slice.call(arguments, 0);
+
+        return pickBy('isAfter', args);
+    }
+
+    function Duration (duration) {
+        var normalizedInput = normalizeObjectUnits(duration),
+            years = normalizedInput.year || 0,
+            quarters = normalizedInput.quarter || 0,
+            months = normalizedInput.month || 0,
+            weeks = normalizedInput.week || 0,
+            days = normalizedInput.day || 0,
+            hours = normalizedInput.hour || 0,
+            minutes = normalizedInput.minute || 0,
+            seconds = normalizedInput.second || 0,
+            milliseconds = normalizedInput.millisecond || 0;
+
+        // representation for dateAddRemove
+        this._milliseconds = +milliseconds +
+            seconds * 1e3 + // 1000
+            minutes * 6e4 + // 1000 * 60
+            hours * 36e5; // 1000 * 60 * 60
+        // Because of dateAddRemove treats 24 hours as different from a
+        // day when working around DST, we need to store them separately
+        this._days = +days +
+            weeks * 7;
+        // It is impossible translate months into days without knowing
+        // which months you are are talking about, so we have to store
+        // it separately.
+        this._months = +months +
+            quarters * 3 +
+            years * 12;
+
+        this._data = {};
+
+        this._locale = locale_locales__getLocale();
+
+        this._bubble();
+    }
+
+    function isDuration (obj) {
+        return obj instanceof Duration;
+    }
+
+    function offset (token, separator) {
+        addFormatToken(token, 0, 0, function () {
+            var offset = this.utcOffset();
+            var sign = '+';
+            if (offset < 0) {
+                offset = -offset;
+                sign = '-';
+            }
+            return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);
+        });
+    }
+
+    offset('Z', ':');
+    offset('ZZ', '');
+
+    // PARSING
+
+    addRegexToken('Z',  matchOffset);
+    addRegexToken('ZZ', matchOffset);
+    addParseToken(['Z', 'ZZ'], function (input, array, config) {
+        config._useUTC = true;
+        config._tzm = offsetFromString(input);
+    });
+
+    // HELPERS
+
+    // timezone chunker
+    // '+10:00' > ['10',  '00']
+    // '-1530'  > ['-15', '30']
+    var chunkOffset = /([\+\-]|\d\d)/gi;
+
+    function offsetFromString(string) {
+        var matches = ((string || '').match(matchOffset) || []);
+        var chunk   = matches[matches.length - 1] || [];
+        var parts   = (chunk + '').match(chunkOffset) || ['-', 0, 0];
+        var minutes = +(parts[1] * 60) + toInt(parts[2]);
+
+        return parts[0] === '+' ? minutes : -minutes;
+    }
+
+    // Return a moment from input, that is local/utc/zone equivalent to model.
+    function cloneWithOffset(input, model) {
+        var res, diff;
+        if (model._isUTC) {
+            res = model.clone();
+            diff = (isMoment(input) || isDate(input) ? +input : +local__createLocal(input)) - (+res);
+            // Use low-level api, because this fn is low-level api.
+            res._d.setTime(+res._d + diff);
+            utils_hooks__hooks.updateOffset(res, false);
+            return res;
+        } else {
+            return local__createLocal(input).local();
+        }
+    }
+
+    function getDateOffset (m) {
+        // On Firefox.24 Date#getTimezoneOffset returns a floating point.
+        // https://github.com/moment/moment/pull/1871
+        return -Math.round(m._d.getTimezoneOffset() / 15) * 15;
+    }
+
+    // HOOKS
+
+    // This function will be called whenever a moment is mutated.
+    // It is intended to keep the offset in sync with the timezone.
+    utils_hooks__hooks.updateOffset = function () {};
+
+    // MOMENTS
+
+    // keepLocalTime = true means only change the timezone, without
+    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
+    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
+    // +0200, so we adjust the time as needed, to be valid.
+    //
+    // Keeping the time actually adds/subtracts (one hour)
+    // from the actual represented time. That is why we call updateOffset
+    // a second time. In case it wants us to change the offset again
+    // _changeInProgress == true case, then we have to adjust, because
+    // there is no such time in the given timezone.
+    function getSetOffset (input, keepLocalTime) {
+        var offset = this._offset || 0,
+            localAdjust;
+        if (input != null) {
+            if (typeof input === 'string') {
+                input = offsetFromString(input);
+            }
+            if (Math.abs(input) < 16) {
+                input = input * 60;
+            }
+            if (!this._isUTC && keepLocalTime) {
+                localAdjust = getDateOffset(this);
+            }
+            this._offset = input;
+            this._isUTC = true;
+            if (localAdjust != null) {
+                this.add(localAdjust, 'm');
+            }
+            if (offset !== input) {
+                if (!keepLocalTime || this._changeInProgress) {
+                    add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false);
+                } else if (!this._changeInProgress) {
+                    this._changeInProgress = true;
+                    utils_hooks__hooks.updateOffset(this, true);
+                    this._changeInProgress = null;
+                }
+            }
+            return this;
+        } else {
+            return this._isUTC ? offset : getDateOffset(this);
+        }
+    }
+
+    function getSetZone (input, keepLocalTime) {
+        if (input != null) {
+            if (typeof input !== 'string') {
+                input = -input;
+            }
+
+            this.utcOffset(input, keepLocalTime);
+
+            return this;
+        } else {
+            return -this.utcOffset();
+        }
+    }
+
+    function setOffsetToUTC (keepLocalTime) {
+        return this.utcOffset(0, keepLocalTime);
+    }
+
+    function setOffsetToLocal (keepLocalTime) {
+        if (this._isUTC) {
+            this.utcOffset(0, keepLocalTime);
+            this._isUTC = false;
+
+            if (keepLocalTime) {
+                this.subtract(getDateOffset(this), 'm');
+            }
+        }
+        return this;
+    }
+
+    function setOffsetToParsedOffset () {
+        if (this._tzm) {
+            this.utcOffset(this._tzm);
+        } else if (typeof this._i === 'string') {
+            this.utcOffset(offsetFromString(this._i));
+        }
+        return this;
+    }
+
+    function hasAlignedHourOffset (input) {
+        input = input ? local__createLocal(input).utcOffset() : 0;
+
+        return (this.utcOffset() - input) % 60 === 0;
+    }
+
+    function isDaylightSavingTime () {
+        return (
+            this.utcOffset() > this.clone().month(0).utcOffset() ||
+            this.utcOffset() > this.clone().month(5).utcOffset()
+        );
+    }
+
+    function isDaylightSavingTimeShifted () {
+        if (typeof this._isDSTShifted !== 'undefined') {
+            return this._isDSTShifted;
+        }
+
+        var c = {};
+
+        copyConfig(c, this);
+        c = prepareConfig(c);
+
+        if (c._a) {
+            var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a);
+            this._isDSTShifted = this.isValid() &&
+                compareArrays(c._a, other.toArray()) > 0;
+        } else {
+            this._isDSTShifted = false;
+        }
+
+        return this._isDSTShifted;
+    }
+
+    function isLocal () {
+        return !this._isUTC;
+    }
+
+    function isUtcOffset () {
+        return this._isUTC;
+    }
+
+    function isUtc () {
+        return this._isUTC && this._offset === 0;
+    }
+
+    var aspNetRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/;
+
+    // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
+    // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
+    var create__isoRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/;
+
+    function create__createDuration (input, key) {
+        var duration = input,
+            // matching against regexp is expensive, do it on demand
+            match = null,
+            sign,
+            ret,
+            diffRes;
+
+        if (isDuration(input)) {
+            duration = {
+                ms : input._milliseconds,
+                d  : input._days,
+                M  : input._months
+            };
+        } else if (typeof input === 'number') {
+            duration = {};
+            if (key) {
+                duration[key] = input;
+            } else {
+                duration.milliseconds = input;
+            }
+        } else if (!!(match = aspNetRegex.exec(input))) {
+            sign = (match[1] === '-') ? -1 : 1;
+            duration = {
+                y  : 0,
+                d  : toInt(match[DATE])        * sign,
+                h  : toInt(match[HOUR])        * sign,
+                m  : toInt(match[MINUTE])      * sign,
+                s  : toInt(match[SECOND])      * sign,
+                ms : toInt(match[MILLISECOND]) * sign
+            };
+        } else if (!!(match = create__isoRegex.exec(input))) {
+            sign = (match[1] === '-') ? -1 : 1;
+            duration = {
+                y : parseIso(match[2], sign),
+                M : parseIso(match[3], sign),
+                d : parseIso(match[4], sign),
+                h : parseIso(match[5], sign),
+                m : parseIso(match[6], sign),
+                s : parseIso(match[7], sign),
+                w : parseIso(match[8], sign)
+            };
+        } else if (duration == null) {// checks for null or undefined
+            duration = {};
+        } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {
+            diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to));
+
+            duration = {};
+            duration.ms = diffRes.milliseconds;
+            duration.M = diffRes.months;
+        }
+
+        ret = new Duration(duration);
+
+        if (isDuration(input) && hasOwnProp(input, '_locale')) {
+            ret._locale = input._locale;
+        }
+
+        return ret;
+    }
+
+    create__createDuration.fn = Duration.prototype;
+
+    function parseIso (inp, sign) {
+        // We'd normally use ~~inp for this, but unfortunately it also
+        // converts floats to ints.
+        // inp may be undefined, so careful calling replace on it.
+        var res = inp && parseFloat(inp.replace(',', '.'));
+        // apply sign while we're at it
+        return (isNaN(res) ? 0 : res) * sign;
+    }
+
+    function positiveMomentsDifference(base, other) {
+        var res = {milliseconds: 0, months: 0};
+
+        res.months = other.month() - base.month() +
+            (other.year() - base.year()) * 12;
+        if (base.clone().add(res.months, 'M').isAfter(other)) {
+            --res.months;
+        }
+
+        res.milliseconds = +other - +(base.clone().add(res.months, 'M'));
+
+        return res;
+    }
+
+    function momentsDifference(base, other) {
+        var res;
+        other = cloneWithOffset(other, base);
+        if (base.isBefore(other)) {
+            res = positiveMomentsDifference(base, other);
+        } else {
+            res = positiveMomentsDifference(other, base);
+            res.milliseconds = -res.milliseconds;
+            res.months = -res.months;
+        }
+
+        return res;
+    }
+
+    function createAdder(direction, name) {
+        return function (val, period) {
+            var dur, tmp;
+            //invert the arguments, but complain about it
+            if (period !== null && !isNaN(+period)) {
+                deprecateSimple(name, 'moment().' + name  + '(period, number) is deprecated. Please use moment().' + name + '(number, period).');
+                tmp = val; val = period; period = tmp;
+            }
+
+            val = typeof val === 'string' ? +val : val;
+            dur = create__createDuration(val, period);
+            add_subtract__addSubtract(this, dur, direction);
+            return this;
+        };
+    }
+
+    function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) {
+        var milliseconds = duration._milliseconds,
+            days = duration._days,
+            months = duration._months;
+        updateOffset = updateOffset == null ? true : updateOffset;
+
+        if (milliseconds) {
+            mom._d.setTime(+mom._d + milliseconds * isAdding);
+        }
+        if (days) {
+            get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding);
+        }
+        if (months) {
+            setMonth(mom, get_set__get(mom, 'Month') + months * isAdding);
+        }
+        if (updateOffset) {
+            utils_hooks__hooks.updateOffset(mom, days || months);
+        }
+    }
+
+    var add_subtract__add      = createAdder(1, 'add');
+    var add_subtract__subtract = createAdder(-1, 'subtract');
+
+    function moment_calendar__calendar (time, formats) {
+        // We want to compare the start of today, vs this.
+        // Getting start-of-today depends on whether we're local/utc/offset or not.
+        var now = time || local__createLocal(),
+            sod = cloneWithOffset(now, this).startOf('day'),
+            diff = this.diff(sod, 'days', true),
+            format = diff < -6 ? 'sameElse' :
+                diff < -1 ? 'lastWeek' :
+                diff < 0 ? 'lastDay' :
+                diff < 1 ? 'sameDay' :
+                diff < 2 ? 'nextDay' :
+                diff < 7 ? 'nextWeek' : 'sameElse';
+        return this.format(formats && formats[format] || this.localeData().calendar(format, this, local__createLocal(now)));
+    }
+
+    function clone () {
+        return new Moment(this);
+    }
+
+    function isAfter (input, units) {
+        var inputMs;
+        units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');
+        if (units === 'millisecond') {
+            input = isMoment(input) ? input : local__createLocal(input);
+            return +this > +input;
+        } else {
+            inputMs = isMoment(input) ? +input : +local__createLocal(input);
+            return inputMs < +this.clone().startOf(units);
+        }
+    }
+
+    function isBefore (input, units) {
+        var inputMs;
+        units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond');
+        if (units === 'millisecond') {
+            input = isMoment(input) ? input : local__createLocal(input);
+            return +this < +input;
+        } else {
+            inputMs = isMoment(input) ? +input : +local__createLocal(input);
+            return +this.clone().endOf(units) < inputMs;
+        }
+    }
+
+    function isBetween (from, to, units) {
+        return this.isAfter(from, units) && this.isBefore(to, units);
+    }
+
+    function isSame (input, units) {
+        var inputMs;
+        units = normalizeUnits(units || 'millisecond');
+        if (units === 'millisecond') {
+            input = isMoment(input) ? input : local__createLocal(input);
+            return +this === +input;
+        } else {
+            inputMs = +local__createLocal(input);
+            return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units));
+        }
+    }
+
+    function diff (input, units, asFloat) {
+        var that = cloneWithOffset(input, this),
+            zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4,
+            delta, output;
+
+        units = normalizeUnits(units);
+
+        if (units === 'year' || units === 'month' || units === 'quarter') {
+            output = monthDiff(this, that);
+            if (units === 'quarter') {
+                output = output / 3;
+            } else if (units === 'year') {
+                output = output / 12;
+            }
+        } else {
+            delta = this - that;
+            output = units === 'second' ? delta / 1e3 : // 1000
+                units === 'minute' ? delta / 6e4 : // 1000 * 60
+                units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60
+                units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst
+                units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst
+                delta;
+        }
+        return asFloat ? output : absFloor(output);
+    }
+
+    function monthDiff (a, b) {
+        // difference in months
+        var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),
+            // b is in (anchor - 1 month, anchor + 1 month)
+            anchor = a.clone().add(wholeMonthDiff, 'months'),
+            anchor2, adjust;
+
+        if (b - anchor < 0) {
+            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
+            // linear across the month
+            adjust = (b - anchor) / (anchor - anchor2);
+        } else {
+            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
+            // linear across the month
+            adjust = (b - anchor) / (anchor2 - anchor);
+        }
+
+        return -(wholeMonthDiff + adjust);
+    }
+
+    utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
+
+    function toString () {
+        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
+    }
+
+    function moment_format__toISOString () {
+        var m = this.clone().utc();
+        if (0 < m.year() && m.year() <= 9999) {
+            if ('function' === typeof Date.prototype.toISOString) {
+                // native implementation is ~50x faster, use it when we can
+                return this.toDate().toISOString();
+            } else {
+                return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+            }
+        } else {
+            return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]');
+        }
+    }
+
+    function format (inputString) {
+        var output = formatMoment(this, inputString || utils_hooks__hooks.defaultFormat);
+        return this.localeData().postformat(output);
+    }
+
+    function from (time, withoutSuffix) {
+        if (!this.isValid()) {
+            return this.localeData().invalidDate();
+        }
+        return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
+    }
+
+    function fromNow (withoutSuffix) {
+        return this.from(local__createLocal(), withoutSuffix);
+    }
+
+    function to (time, withoutSuffix) {
+        if (!this.isValid()) {
+            return this.localeData().invalidDate();
+        }
+        return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
+    }
+
+    function toNow (withoutSuffix) {
+        return this.to(local__createLocal(), withoutSuffix);
+    }
+
+    function locale (key) {
+        var newLocaleData;
+
+        if (key === undefined) {
+            return this._locale._abbr;
+        } else {
+            newLocaleData = locale_locales__getLocale(key);
+            if (newLocaleData != null) {
+                this._locale = newLocaleData;
+            }
+            return this;
+        }
+    }
+
+    var lang = deprecate(
+        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
+        function (key) {
+            if (key === undefined) {
+                return this.localeData();
+            } else {
+                return this.locale(key);
+            }
+        }
+    );
+
+    function localeData () {
+        return this._locale;
+    }
+
+    function startOf (units) {
+        units = normalizeUnits(units);
+        // the following switch intentionally omits break keywords
+        // to utilize falling through the cases.
+        switch (units) {
+        case 'year':
+            this.month(0);
+            /* falls through */
+        case 'quarter':
+        case 'month':
+            this.date(1);
+            /* falls through */
+        case 'week':
+        case 'isoWeek':
+        case 'day':
+            this.hours(0);
+            /* falls through */
+        case 'hour':
+            this.minutes(0);
+            /* falls through */
+        case 'minute':
+            this.seconds(0);
+            /* falls through */
+        case 'second':
+            this.milliseconds(0);
+        }
+
+        // weeks are a special case
+        if (units === 'week') {
+            this.weekday(0);
+        }
+        if (units === 'isoWeek') {
+            this.isoWeekday(1);
+        }
+
+        // quarters are also special
+        if (units === 'quarter') {
+            this.month(Math.floor(this.month() / 3) * 3);
+        }
+
+        return this;
+    }
+
+    function endOf (units) {
+        units = normalizeUnits(units);
+        if (units === undefined || units === 'millisecond') {
+            return this;
+        }
+        return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');
+    }
+
+    function to_type__valueOf () {
+        return +this._d - ((this._offset || 0) * 60000);
+    }
+
+    function unix () {
+        return Math.floor(+this / 1000);
+    }
+
+    function toDate () {
+        return this._offset ? new Date(+this) : this._d;
+    }
+
+    function toArray () {
+        var m = this;
+        return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
+    }
+
+    function toObject () {
+        var m = this;
+        return {
+            years: m.year(),
+            months: m.month(),
+            date: m.date(),
+            hours: m.hours(),
+            minutes: m.minutes(),
+            seconds: m.seconds(),
+            milliseconds: m.milliseconds()
+        };
+    }
+
+    function moment_valid__isValid () {
+        return valid__isValid(this);
+    }
+
+    function parsingFlags () {
+        return extend({}, getParsingFlags(this));
+    }
+
+    function invalidAt () {
+        return getParsingFlags(this).overflow;
+    }
+
+    addFormatToken(0, ['gg', 2], 0, function () {
+        return this.weekYear() % 100;
+    });
+
+    addFormatToken(0, ['GG', 2], 0, function () {
+        return this.isoWeekYear() % 100;
+    });
+
+    function addWeekYearFormatToken (token, getter) {
+        addFormatToken(0, [token, token.length], 0, getter);
+    }
+
+    addWeekYearFormatToken('gggg',     'weekYear');
+    addWeekYearFormatToken('ggggg',    'weekYear');
+    addWeekYearFormatToken('GGGG',  'isoWeekYear');
+    addWeekYearFormatToken('GGGGG', 'isoWeekYear');
+
+    // ALIASES
+
+    addUnitAlias('weekYear', 'gg');
+    addUnitAlias('isoWeekYear', 'GG');
+
+    // PARSING
+
+    addRegexToken('G',      matchSigned);
+    addRegexToken('g',      matchSigned);
+    addRegexToken('GG',     match1to2, match2);
+    addRegexToken('gg',     match1to2, match2);
+    addRegexToken('GGGG',   match1to4, match4);
+    addRegexToken('gggg',   match1to4, match4);
+    addRegexToken('GGGGG',  match1to6, match6);
+    addRegexToken('ggggg',  match1to6, match6);
+
+    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {
+        week[token.substr(0, 2)] = toInt(input);
+    });
+
+    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
+        week[token] = utils_hooks__hooks.parseTwoDigitYear(input);
+    });
+
+    // HELPERS
+
+    function weeksInYear(year, dow, doy) {
+        return weekOfYear(local__createLocal([year, 11, 31 + dow - doy]), dow, doy).week;
+    }
+
+    // MOMENTS
+
+    function getSetWeekYear (input) {
+        var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year;
+        return input == null ? year : this.add((input - year), 'y');
+    }
+
+    function getSetISOWeekYear (input) {
+        var year = weekOfYear(this, 1, 4).year;
+        return input == null ? year : this.add((input - year), 'y');
+    }
+
+    function getISOWeeksInYear () {
+        return weeksInYear(this.year(), 1, 4);
+    }
+
+    function getWeeksInYear () {
+        var weekInfo = this.localeData()._week;
+        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
+    }
+
+    addFormatToken('Q', 0, 0, 'quarter');
+
+    // ALIASES
+
+    addUnitAlias('quarter', 'Q');
+
+    // PARSING
+
+    addRegexToken('Q', match1);
+    addParseToken('Q', function (input, array) {
+        array[MONTH] = (toInt(input) - 1) * 3;
+    });
+
+    // MOMENTS
+
+    function getSetQuarter (input) {
+        return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
+    }
+
+    addFormatToken('D', ['DD', 2], 'Do', 'date');
+
+    // ALIASES
+
+    addUnitAlias('date', 'D');
+
+    // PARSING
+
+    addRegexToken('D',  match1to2);
+    addRegexToken('DD', match1to2, match2);
+    addRegexToken('Do', function (isStrict, locale) {
+        return isStrict ? locale._ordinalParse : locale._ordinalParseLenient;
+    });
+
+    addParseToken(['D', 'DD'], DATE);
+    addParseToken('Do', function (input, array) {
+        array[DATE] = toInt(input.match(match1to2)[0], 10);
+    });
+
+    // MOMENTS
+
+    var getSetDayOfMonth = makeGetSet('Date', true);
+
+    addFormatToken('d', 0, 'do', 'day');
+
+    addFormatToken('dd', 0, 0, function (format) {
+        return this.localeData().weekdaysMin(this, format);
+    });
+
+    addFormatToken('ddd', 0, 0, function (format) {
+        return this.localeData().weekdaysShort(this, format);
+    });
+
+    addFormatToken('dddd', 0, 0, function (format) {
+        return this.localeData().weekdays(this, format);
+    });
+
+    addFormatToken('e', 0, 0, 'weekday');
+    addFormatToken('E', 0, 0, 'isoWeekday');
+
+    // ALIASES
+
+    addUnitAlias('day', 'd');
+    addUnitAlias('weekday', 'e');
+    addUnitAlias('isoWeekday', 'E');
+
+    // PARSING
+
+    addRegexToken('d',    match1to2);
+    addRegexToken('e',    match1to2);
+    addRegexToken('E',    match1to2);
+    addRegexToken('dd',   matchWord);
+    addRegexToken('ddd',  matchWord);
+    addRegexToken('dddd', matchWord);
+
+    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config) {
+        var weekday = config._locale.weekdaysParse(input);
+        // if we didn't get a weekday name, mark the date as invalid
+        if (weekday != null) {
+            week.d = weekday;
+        } else {
+            getParsingFlags(config).invalidWeekday = input;
+        }
+    });
+
+    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
+        week[token] = toInt(input);
+    });
+
+    // HELPERS
+
+    function parseWeekday(input, locale) {
+        if (typeof input !== 'string') {
+            return input;
+        }
+
+        if (!isNaN(input)) {
+            return parseInt(input, 10);
+        }
+
+        input = locale.weekdaysParse(input);
+        if (typeof input === 'number') {
+            return input;
+        }
+
+        return null;
+    }
+
+    // LOCALES
+
+    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
+    function localeWeekdays (m) {
+        return this._weekdays[m.day()];
+    }
+
+    var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
+    function localeWeekdaysShort (m) {
+        return this._weekdaysShort[m.day()];
+    }
+
+    var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
+    function localeWeekdaysMin (m) {
+        return this._weekdaysMin[m.day()];
+    }
+
+    function localeWeekdaysParse (weekdayName) {
+        var i, mom, regex;
+
+        this._weekdaysParse = this._weekdaysParse || [];
+
+        for (i = 0; i < 7; i++) {
+            // make the regex if we don't have it already
+            if (!this._weekdaysParse[i]) {
+                mom = local__createLocal([2000, 1]).day(i);
+                regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
+                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
+            }
+            // test the regex
+            if (this._weekdaysParse[i].test(weekdayName)) {
+                return i;
+            }
+        }
+    }
+
+    // MOMENTS
+
+    function getSetDayOfWeek (input) {
+        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
+        if (input != null) {
+            input = parseWeekday(input, this.localeData());
+            return this.add(input - day, 'd');
+        } else {
+            return day;
+        }
+    }
+
+    function getSetLocaleDayOfWeek (input) {
+        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
+        return input == null ? weekday : this.add(input - weekday, 'd');
+    }
+
+    function getSetISODayOfWeek (input) {
+        // behaves the same as moment#day except
+        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
+        // as a setter, sunday should belong to the previous week.
+        return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7);
+    }
+
+    addFormatToken('H', ['HH', 2], 0, 'hour');
+    addFormatToken('h', ['hh', 2], 0, function () {
+        return this.hours() % 12 || 12;
+    });
+
+    function meridiem (token, lowercase) {
+        addFormatToken(token, 0, 0, function () {
+            return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
+        });
+    }
+
+    meridiem('a', true);
+    meridiem('A', false);
+
+    // ALIASES
+
+    addUnitAlias('hour', 'h');
+
+    // PARSING
+
+    function matchMeridiem (isStrict, locale) {
+        return locale._meridiemParse;
+    }
+
+    addRegexToken('a',  matchMeridiem);
+    addRegexToken('A',  matchMeridiem);
+    addRegexToken('H',  match1to2);
+    addRegexToken('h',  match1to2);
+    addRegexToken('HH', match1to2, match2);
+    addRegexToken('hh', match1to2, match2);
+
+    addParseToken(['H', 'HH'], HOUR);
+    addParseToken(['a', 'A'], function (input, array, config) {
+        config._isPm = config._locale.isPM(input);
+        config._meridiem = input;
+    });
+    addParseToken(['h', 'hh'], function (input, array, config) {
+        array[HOUR] = toInt(input);
+        getParsingFlags(config).bigHour = true;
+    });
+
+    // LOCALES
+
+    function localeIsPM (input) {
+        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
+        // Using charAt should be more compatible.
+        return ((input + '').toLowerCase().charAt(0) === 'p');
+    }
+
+    var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
+    function localeMeridiem (hours, minutes, isLower) {
+        if (hours > 11) {
+            return isLower ? 'pm' : 'PM';
+        } else {
+            return isLower ? 'am' : 'AM';
+        }
+    }
+
+
+    // MOMENTS
+
+    // Setting the hour should keep the time, because the user explicitly
+    // specified which hour he wants. So trying to maintain the same hour (in
+    // a new timezone) makes sense. Adding/subtracting hours does not follow
+    // this rule.
+    var getSetHour = makeGetSet('Hours', true);
+
+    addFormatToken('m', ['mm', 2], 0, 'minute');
+
+    // ALIASES
+
+    addUnitAlias('minute', 'm');
+
+    // PARSING
+
+    addRegexToken('m',  match1to2);
+    addRegexToken('mm', match1to2, match2);
+    addParseToken(['m', 'mm'], MINUTE);
+
+    // MOMENTS
+
+    var getSetMinute = makeGetSet('Minutes', false);
+
+    addFormatToken('s', ['ss', 2], 0, 'second');
+
+    // ALIASES
+
+    addUnitAlias('second', 's');
+
+    // PARSING
+
+    addRegexToken('s',  match1to2);
+    addRegexToken('ss', match1to2, match2);
+    addParseToken(['s', 'ss'], SECOND);
+
+    // MOMENTS
+
+    var getSetSecond = makeGetSet('Seconds', false);
+
+    addFormatToken('S', 0, 0, function () {
+        return ~~(this.millisecond() / 100);
+    });
+
+    addFormatToken(0, ['SS', 2], 0, function () {
+        return ~~(this.millisecond() / 10);
+    });
+
+    addFormatToken(0, ['SSS', 3], 0, 'millisecond');
+    addFormatToken(0, ['SSSS', 4], 0, function () {
+        return this.millisecond() * 10;
+    });
+    addFormatToken(0, ['SSSSS', 5], 0, function () {
+        return this.millisecond() * 100;
+    });
+    addFormatToken(0, ['SSSSSS', 6], 0, function () {
+        return this.millisecond() * 1000;
+    });
+    addFormatToken(0, ['SSSSSSS', 7], 0, function () {
+        return this.millisecond() * 10000;
+    });
+    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
+        return this.millisecond() * 100000;
+    });
+    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
+        return this.millisecond() * 1000000;
+    });
+
+
+    // ALIASES
+
+    addUnitAlias('millisecond', 'ms');
+
+    // PARSING
+
+    addRegexToken('S',    match1to3, match1);
+    addRegexToken('SS',   match1to3, match2);
+    addRegexToken('SSS',  match1to3, match3);
+
+    var token;
+    for (token = 'SSSS'; token.length <= 9; token += 'S') {
+        addRegexToken(token, matchUnsigned);
+    }
+
+    function parseMs(input, array) {
+        array[MILLISECOND] = toInt(('0.' + input) * 1000);
+    }
+
+    for (token = 'S'; token.length <= 9; token += 'S') {
+        addParseToken(token, parseMs);
+    }
+    // MOMENTS
+
+    var getSetMillisecond = makeGetSet('Milliseconds', false);
+
+    addFormatToken('z',  0, 0, 'zoneAbbr');
+    addFormatToken('zz', 0, 0, 'zoneName');
+
+    // MOMENTS
+
+    function getZoneAbbr () {
+        return this._isUTC ? 'UTC' : '';
+    }
+
+    function getZoneName () {
+        return this._isUTC ? 'Coordinated Universal Time' : '';
+    }
+
+    var momentPrototype__proto = Moment.prototype;
+
+    momentPrototype__proto.add          = add_subtract__add;
+    momentPrototype__proto.calendar     = moment_calendar__calendar;
+    momentPrototype__proto.clone        = clone;
+    momentPrototype__proto.diff         = diff;
+    momentPrototype__proto.endOf        = endOf;
+    momentPrototype__proto.format       = format;
+    momentPrototype__proto.from         = from;
+    momentPrototype__proto.fromNow      = fromNow;
+    momentPrototype__proto.to           = to;
+    momentPrototype__proto.toNow        = toNow;
+    momentPrototype__proto.get          = getSet;
+    momentPrototype__proto.invalidAt    = invalidAt;
+    momentPrototype__proto.isAfter      = isAfter;
+    momentPrototype__proto.isBefore     = isBefore;
+    momentPrototype__proto.isBetween    = isBetween;
+    momentPrototype__proto.isSame       = isSame;
+    momentPrototype__proto.isValid      = moment_valid__isValid;
+    momentPrototype__proto.lang         = lang;
+    momentPrototype__proto.locale       = locale;
+    momentPrototype__proto.localeData   = localeData;
+    momentPrototype__proto.max          = prototypeMax;
+    momentPrototype__proto.min          = prototypeMin;
+    momentPrototype__proto.parsingFlags = parsingFlags;
+    momentPrototype__proto.set          = getSet;
+    momentPrototype__proto.startOf      = startOf;
+    momentPrototype__proto.subtract     = add_subtract__subtract;
+    momentPrototype__proto.toArray      = toArray;
+    momentPrototype__proto.toObject     = toObject;
+    momentPrototype__proto.toDate       = toDate;
+    momentPrototype__proto.toISOString  = moment_format__toISOString;
+    momentPrototype__proto.toJSON       = moment_format__toISOString;
+    momentPrototype__proto.toString     = toString;
+    momentPrototype__proto.unix         = unix;
+    momentPrototype__proto.valueOf      = to_type__valueOf;
+
+    // Year
+    momentPrototype__proto.year       = getSetYear;
+    momentPrototype__proto.isLeapYear = getIsLeapYear;
+
+    // Week Year
+    momentPrototype__proto.weekYear    = getSetWeekYear;
+    momentPrototype__proto.isoWeekYear = getSetISOWeekYear;
+
+    // Quarter
+    momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter;
+
+    // Month
+    momentPrototype__proto.month       = getSetMonth;
+    momentPrototype__proto.daysInMonth = getDaysInMonth;
+
+    // Week
+    momentPrototype__proto.week           = momentPrototype__proto.weeks        = getSetWeek;
+    momentPrototype__proto.isoWeek        = momentPrototype__proto.isoWeeks     = getSetISOWeek;
+    momentPrototype__proto.weeksInYear    = getWeeksInYear;
+    momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear;
+
+    // Day
+    momentPrototype__proto.date       = getSetDayOfMonth;
+    momentPrototype__proto.day        = momentPrototype__proto.days             = getSetDayOfWeek;
+    momentPrototype__proto.weekday    = getSetLocaleDayOfWeek;
+    momentPrototype__proto.isoWeekday = getSetISODayOfWeek;
+    momentPrototype__proto.dayOfYear  = getSetDayOfYear;
+
+    // Hour
+    momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour;
+
+    // Minute
+    momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute;
+
+    // Second
+    momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond;
+
+    // Millisecond
+    momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond;
+
+    // Offset
+    momentPrototype__proto.utcOffset            = getSetOffset;
+    momentPrototype__proto.utc                  = setOffsetToUTC;
+    momentPrototype__proto.local                = setOffsetToLocal;
+    momentPrototype__proto.parseZone            = setOffsetToParsedOffset;
+    momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset;
+    momentPrototype__proto.isDST                = isDaylightSavingTime;
+    momentPrototype__proto.isDSTShifted         = isDaylightSavingTimeShifted;
+    momentPrototype__proto.isLocal              = isLocal;
+    momentPrototype__proto.isUtcOffset          = isUtcOffset;
+    momentPrototype__proto.isUtc                = isUtc;
+    momentPrototype__proto.isUTC                = isUtc;
+
+    // Timezone
+    momentPrototype__proto.zoneAbbr = getZoneAbbr;
+    momentPrototype__proto.zoneName = getZoneName;
+
+    // Deprecations
+    momentPrototype__proto.dates  = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
+    momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
+    momentPrototype__proto.years  = deprecate('years accessor is deprecated. Use year instead', getSetYear);
+    momentPrototype__proto.zone   = deprecate('moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779', getSetZone);
+
+    var momentPrototype = momentPrototype__proto;
+
+    function moment__createUnix (input) {
+        return local__createLocal(input * 1000);
+    }
+
+    function moment__createInZone () {
+        return local__createLocal.apply(null, arguments).parseZone();
+    }
+
+    var defaultCalendar = {
+        sameDay : '[Today at] LT',
+        nextDay : '[Tomorrow at] LT',
+        nextWeek : 'dddd [at] LT',
+        lastDay : '[Yesterday at] LT',
+        lastWeek : '[Last] dddd [at] LT',
+        sameElse : 'L'
+    };
+
+    function locale_calendar__calendar (key, mom, now) {
+        var output = this._calendar[key];
+        return typeof output === 'function' ? output.call(mom, now) : output;
+    }
+
+    var defaultLongDateFormat = {
+        LTS  : 'h:mm:ss A',
+        LT   : 'h:mm A',
+        L    : 'MM/DD/YYYY',
+        LL   : 'MMMM D, YYYY',
+        LLL  : 'MMMM D, YYYY h:mm A',
+        LLLL : 'dddd, MMMM D, YYYY h:mm A'
+    };
+
+    function longDateFormat (key) {
+        var format = this._longDateFormat[key],
+            formatUpper = this._longDateFormat[key.toUpperCase()];
+
+        if (format || !formatUpper) {
+            return format;
+        }
+
+        this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
+            return val.slice(1);
+        });
+
+        return this._longDateFormat[key];
+    }
+
+    var defaultInvalidDate = 'Invalid date';
+
+    function invalidDate () {
+        return this._invalidDate;
+    }
+
+    var defaultOrdinal = '%d';
+    var defaultOrdinalParse = /\d{1,2}/;
+
+    function ordinal (number) {
+        return this._ordinal.replace('%d', number);
+    }
+
+    function preParsePostFormat (string) {
+        return string;
+    }
+
+    var defaultRelativeTime = {
+        future : 'in %s',
+        past   : '%s ago',
+        s  : 'a few seconds',
+        m  : 'a minute',
+        mm : '%d minutes',
+        h  : 'an hour',
+        hh : '%d hours',
+        d  : 'a day',
+        dd : '%d days',
+        M  : 'a month',
+        MM : '%d months',
+        y  : 'a year',
+        yy : '%d years'
+    };
+
+    function relative__relativeTime (number, withoutSuffix, string, isFuture) {
+        var output = this._relativeTime[string];
+        return (typeof output === 'function') ?
+            output(number, withoutSuffix, string, isFuture) :
+            output.replace(/%d/i, number);
+    }
+
+    function pastFuture (diff, output) {
+        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
+        return typeof format === 'function' ? format(output) : format.replace(/%s/i, output);
+    }
+
+    function locale_set__set (config) {
+        var prop, i;
+        for (i in config) {
+            prop = config[i];
+            if (typeof prop === 'function') {
+                this[i] = prop;
+            } else {
+                this['_' + i] = prop;
+            }
+        }
+        // Lenient ordinal parsing accepts just a number in addition to
+        // number + (possibly) stuff coming from _ordinalParseLenient.
+        this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source);
+    }
+
+    var prototype__proto = Locale.prototype;
+
+    prototype__proto._calendar       = defaultCalendar;
+    prototype__proto.calendar        = locale_calendar__calendar;
+    prototype__proto._longDateFormat = defaultLongDateFormat;
+    prototype__proto.longDateFormat  = longDateFormat;
+    prototype__proto._invalidDate    = defaultInvalidDate;
+    prototype__proto.invalidDate     = invalidDate;
+    prototype__proto._ordinal        = defaultOrdinal;
+    prototype__proto.ordinal         = ordinal;
+    prototype__proto._ordinalParse   = defaultOrdinalParse;
+    prototype__proto.preparse        = preParsePostFormat;
+    prototype__proto.postformat      = preParsePostFormat;
+    prototype__proto._relativeTime   = defaultRelativeTime;
+    prototype__proto.relativeTime    = relative__relativeTime;
+    prototype__proto.pastFuture      = pastFuture;
+    prototype__proto.set             = locale_set__set;
+
+    // Month
+    prototype__proto.months       =        localeMonths;
+    prototype__proto._months      = defaultLocaleMonths;
+    prototype__proto.monthsShort  =        localeMonthsShort;
+    prototype__proto._monthsShort = defaultLocaleMonthsShort;
+    prototype__proto.monthsParse  =        localeMonthsParse;
+
+    // Week
+    prototype__proto.week = localeWeek;
+    prototype__proto._week = defaultLocaleWeek;
+    prototype__proto.firstDayOfYear = localeFirstDayOfYear;
+    prototype__proto.firstDayOfWeek = localeFirstDayOfWeek;
+
+    // Day of Week
+    prototype__proto.weekdays       =        localeWeekdays;
+    prototype__proto._weekdays      = defaultLocaleWeekdays;
+    prototype__proto.weekdaysMin    =        localeWeekdaysMin;
+    prototype__proto._weekdaysMin   = defaultLocaleWeekdaysMin;
+    prototype__proto.weekdaysShort  =        localeWeekdaysShort;
+    prototype__proto._weekdaysShort = defaultLocaleWeekdaysShort;
+    prototype__proto.weekdaysParse  =        localeWeekdaysParse;
+
+    // Hours
+    prototype__proto.isPM = localeIsPM;
+    prototype__proto._meridiemParse = defaultLocaleMeridiemParse;
+    prototype__proto.meridiem = localeMeridiem;
+
+    function lists__get (format, index, field, setter) {
+        var locale = locale_locales__getLocale();
+        var utc = create_utc__createUTC().set(setter, index);
+        return locale[field](utc, format);
+    }
+
+    function list (format, index, field, count, setter) {
+        if (typeof format === 'number') {
+            index = format;
+            format = undefined;
+        }
+
+        format = format || '';
+
+        if (index != null) {
+            return lists__get(format, index, field, setter);
+        }
+
+        var i;
+        var out = [];
+        for (i = 0; i < count; i++) {
+            out[i] = lists__get(format, i, field, setter);
+        }
+        return out;
+    }
+
+    function lists__listMonths (format, index) {
+        return list(format, index, 'months', 12, 'month');
+    }
+
+    function lists__listMonthsShort (format, index) {
+        return list(format, index, 'monthsShort', 12, 'month');
+    }
+
+    function lists__listWeekdays (format, index) {
+        return list(format, index, 'weekdays', 7, 'day');
+    }
+
+    function lists__listWeekdaysShort (format, index) {
+        return list(format, index, 'weekdaysShort', 7, 'day');
+    }
+
+    function lists__listWeekdaysMin (format, index) {
+        return list(format, index, 'weekdaysMin', 7, 'day');
+    }
+
+    locale_locales__getSetGlobalLocale('en', {
+        ordinalParse: /\d{1,2}(th|st|nd|rd)/,
+        ordinal : function (number) {
+            var b = number % 10,
+                output = (toInt(number % 100 / 10) === 1) ? 'th' :
+                (b === 1) ? 'st' :
+                (b === 2) ? 'nd' :
+                (b === 3) ? 'rd' : 'th';
+            return number + output;
+        }
+    });
+
+    // Side effect imports
+    utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale);
+    utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale);
+
+    var mathAbs = Math.abs;
+
+    function duration_abs__abs () {
+        var data           = this._data;
+
+        this._milliseconds = mathAbs(this._milliseconds);
+        this._days         = mathAbs(this._days);
+        this._months       = mathAbs(this._months);
+
+        data.milliseconds  = mathAbs(data.milliseconds);
+        data.seconds       = mathAbs(data.seconds);
+        data.minutes       = mathAbs(data.minutes);
+        data.hours         = mathAbs(data.hours);
+        data.months        = mathAbs(data.months);
+        data.years         = mathAbs(data.years);
+
+        return this;
+    }
+
+    function duration_add_subtract__addSubtract (duration, input, value, direction) {
+        var other = create__createDuration(input, value);
+
+        duration._milliseconds += direction * other._milliseconds;
+        duration._days         += direction * other._days;
+        duration._months       += direction * other._months;
+
+        return duration._bubble();
+    }
+
+    // supports only 2.0-style add(1, 's') or add(duration)
+    function duration_add_subtract__add (input, value) {
+        return duration_add_subtract__addSubtract(this, input, value, 1);
+    }
+
+    // supports only 2.0-style subtract(1, 's') or subtract(duration)
+    function duration_add_subtract__subtract (input, value) {
+        return duration_add_subtract__addSubtract(this, input, value, -1);
+    }
+
+    function absCeil (number) {
+        if (number < 0) {
+            return Math.floor(number);
+        } else {
+            return Math.ceil(number);
+        }
+    }
+
+    function bubble () {
+        var milliseconds = this._milliseconds;
+        var days         = this._days;
+        var months       = this._months;
+        var data         = this._data;
+        var seconds, minutes, hours, years, monthsFromDays;
+
+        // if we have a mix of positive and negative values, bubble down first
+        // check: https://github.com/moment/moment/issues/2166
+        if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||
+                (milliseconds <= 0 && days <= 0 && months <= 0))) {
+            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
+            days = 0;
+            months = 0;
+        }
+
+        // The following code bubbles up values, see the tests for
+        // examples of what that means.
+        data.milliseconds = milliseconds % 1000;
+
+        seconds           = absFloor(milliseconds / 1000);
+        data.seconds      = seconds % 60;
+
+        minutes           = absFloor(seconds / 60);
+        data.minutes      = minutes % 60;
+
+        hours             = absFloor(minutes / 60);
+        data.hours        = hours % 24;
+
+        days += absFloor(hours / 24);
+
+        // convert days to months
+        monthsFromDays = absFloor(daysToMonths(days));
+        months += monthsFromDays;
+        days -= absCeil(monthsToDays(monthsFromDays));
+
+        // 12 months -> 1 year
+        years = absFloor(months / 12);
+        months %= 12;
+
+        data.days   = days;
+        data.months = months;
+        data.years  = years;
+
+        return this;
+    }
+
+    function daysToMonths (days) {
+        // 400 years have 146097 days (taking into account leap year rules)
+        // 400 years have 12 months === 4800
+        return days * 4800 / 146097;
+    }
+
+    function monthsToDays (months) {
+        // the reverse of daysToMonths
+        return months * 146097 / 4800;
+    }
+
+    function as (units) {
+        var days;
+        var months;
+        var milliseconds = this._milliseconds;
+
+        units = normalizeUnits(units);
+
+        if (units === 'month' || units === 'year') {
+            days   = this._days   + milliseconds / 864e5;
+            months = this._months + daysToMonths(days);
+            return units === 'month' ? months : months / 12;
+        } else {
+            // handle milliseconds separately because of floating point math errors (issue #1867)
+            days = this._days + Math.round(monthsToDays(this._months));
+            switch (units) {
+                case 'week'   : return days / 7     + milliseconds / 6048e5;
+                case 'day'    : return days         + milliseconds / 864e5;
+                case 'hour'   : return days * 24    + milliseconds / 36e5;
+                case 'minute' : return days * 1440  + milliseconds / 6e4;
+                case 'second' : return days * 86400 + milliseconds / 1000;
+                // Math.floor prevents floating point math errors here
+                case 'millisecond': return Math.floor(days * 864e5) + milliseconds;
+                default: throw new Error('Unknown unit ' + units);
+            }
+        }
+    }
+
+    // TODO: Use this.as('ms')?
+    function duration_as__valueOf () {
+        return (
+            this._milliseconds +
+            this._days * 864e5 +
+            (this._months % 12) * 2592e6 +
+            toInt(this._months / 12) * 31536e6
+        );
+    }
+
+    function makeAs (alias) {
+        return function () {
+            return this.as(alias);
+        };
+    }
+
+    var asMilliseconds = makeAs('ms');
+    var asSeconds      = makeAs('s');
+    var asMinutes      = makeAs('m');
+    var asHours        = makeAs('h');
+    var asDays         = makeAs('d');
+    var asWeeks        = makeAs('w');
+    var asMonths       = makeAs('M');
+    var asYears        = makeAs('y');
+
+    function duration_get__get (units) {
+        units = normalizeUnits(units);
+        return this[units + 's']();
+    }
+
+    function makeGetter(name) {
+        return function () {
+            return this._data[name];
+        };
+    }
+
+    var milliseconds = makeGetter('milliseconds');
+    var seconds      = makeGetter('seconds');
+    var minutes      = makeGetter('minutes');
+    var hours        = makeGetter('hours');
+    var days         = makeGetter('days');
+    var months       = makeGetter('months');
+    var years        = makeGetter('years');
+
+    function weeks () {
+        return absFloor(this.days() / 7);
+    }
+
+    var round = Math.round;
+    var thresholds = {
+        s: 45,  // seconds to minute
+        m: 45,  // minutes to hour
+        h: 22,  // hours to day
+        d: 26,  // days to month
+        M: 11   // months to year
+    };
+
+    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
+    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
+        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
+    }
+
+    function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) {
+        var duration = create__createDuration(posNegDuration).abs();
+        var seconds  = round(duration.as('s'));
+        var minutes  = round(duration.as('m'));
+        var hours    = round(duration.as('h'));
+        var days     = round(duration.as('d'));
+        var months   = round(duration.as('M'));
+        var years    = round(duration.as('y'));
+
+        var a = seconds < thresholds.s && ['s', seconds]  ||
+                minutes === 1          && ['m']           ||
+                minutes < thresholds.m && ['mm', minutes] ||
+                hours   === 1          && ['h']           ||
+                hours   < thresholds.h && ['hh', hours]   ||
+                days    === 1          && ['d']           ||
+                days    < thresholds.d && ['dd', days]    ||
+                months  === 1          && ['M']           ||
+                months  < thresholds.M && ['MM', months]  ||
+                years   === 1          && ['y']           || ['yy', years];
+
+        a[2] = withoutSuffix;
+        a[3] = +posNegDuration > 0;
+        a[4] = locale;
+        return substituteTimeAgo.apply(null, a);
+    }
+
+    // This function allows you to set a threshold for relative time strings
+    function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) {
+        if (thresholds[threshold] === undefined) {
+            return false;
+        }
+        if (limit === undefined) {
+            return thresholds[threshold];
+        }
+        thresholds[threshold] = limit;
+        return true;
+    }
+
+    function humanize (withSuffix) {
+        var locale = this.localeData();
+        var output = duration_humanize__relativeTime(this, !withSuffix, locale);
+
+        if (withSuffix) {
+            output = locale.pastFuture(+this, output);
+        }
+
+        return locale.postformat(output);
+    }
+
+    var iso_string__abs = Math.abs;
+
+    function iso_string__toISOString() {
+        // for ISO strings we do not use the normal bubbling rules:
+        //  * milliseconds bubble up until they become hours
+        //  * days do not bubble at all
+        //  * months bubble up until they become years
+        // This is because there is no context-free conversion between hours and days
+        // (think of clock changes)
+        // and also not between days and months (28-31 days per month)
+        var seconds = iso_string__abs(this._milliseconds) / 1000;
+        var days         = iso_string__abs(this._days);
+        var months       = iso_string__abs(this._months);
+        var minutes, hours, years;
+
+        // 3600 seconds -> 60 minutes -> 1 hour
+        minutes           = absFloor(seconds / 60);
+        hours             = absFloor(minutes / 60);
+        seconds %= 60;
+        minutes %= 60;
+
+        // 12 months -> 1 year
+        years  = absFloor(months / 12);
+        months %= 12;
+
+
+        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
+        var Y = years;
+        var M = months;
+        var D = days;
+        var h = hours;
+        var m = minutes;
+        var s = seconds;
+        var total = this.asSeconds();
+
+        if (!total) {
+            // this is the same as C#'s (Noda) and python (isodate)...
+            // but not other JS (goog.date)
+            return 'P0D';
+        }
+
+        return (total < 0 ? '-' : '') +
+            'P' +
+            (Y ? Y + 'Y' : '') +
+            (M ? M + 'M' : '') +
+            (D ? D + 'D' : '') +
+            ((h || m || s) ? 'T' : '') +
+            (h ? h + 'H' : '') +
+            (m ? m + 'M' : '') +
+            (s ? s + 'S' : '');
+    }
+
+    var duration_prototype__proto = Duration.prototype;
+
+    duration_prototype__proto.abs            = duration_abs__abs;
+    duration_prototype__proto.add            = duration_add_subtract__add;
+    duration_prototype__proto.subtract       = duration_add_subtract__subtract;
+    duration_prototype__proto.as             = as;
+    duration_prototype__proto.asMilliseconds = asMilliseconds;
+    duration_prototype__proto.asSeconds      = asSeconds;
+    duration_prototype__proto.asMinutes      = asMinutes;
+    duration_prototype__proto.asHours        = asHours;
+    duration_prototype__proto.asDays         = asDays;
+    duration_prototype__proto.asWeeks        = asWeeks;
+    duration_prototype__proto.asMonths       = asMonths;
+    duration_prototype__proto.asYears        = asYears;
+    duration_prototype__proto.valueOf        = duration_as__valueOf;
+    duration_prototype__proto._bubble        = bubble;
+    duration_prototype__proto.get            = duration_get__get;
+    duration_prototype__proto.milliseconds   = milliseconds;
+    duration_prototype__proto.seconds        = seconds;
+    duration_prototype__proto.minutes        = minutes;
+    duration_prototype__proto.hours          = hours;
+    duration_prototype__proto.days           = days;
+    duration_prototype__proto.weeks          = weeks;
+    duration_prototype__proto.months         = months;
+    duration_prototype__proto.years          = years;
+    duration_prototype__proto.humanize       = humanize;
+    duration_prototype__proto.toISOString    = iso_string__toISOString;
+    duration_prototype__proto.toString       = iso_string__toISOString;
+    duration_prototype__proto.toJSON         = iso_string__toISOString;
+    duration_prototype__proto.locale         = locale;
+    duration_prototype__proto.localeData     = localeData;
+
+    // Deprecations
+    duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString);
+    duration_prototype__proto.lang = lang;
+
+    // Side effect imports
+
+    addFormatToken('X', 0, 0, 'unix');
+    addFormatToken('x', 0, 0, 'valueOf');
+
+    // PARSING
+
+    addRegexToken('x', matchSigned);
+    addRegexToken('X', matchTimestamp);
+    addParseToken('X', function (input, array, config) {
+        config._d = new Date(parseFloat(input, 10) * 1000);
+    });
+    addParseToken('x', function (input, array, config) {
+        config._d = new Date(toInt(input));
+    });
+
+    // Side effect imports
+
+
+    utils_hooks__hooks.version = '2.10.6';
+
+    setHookCallback(local__createLocal);
+
+    utils_hooks__hooks.fn                    = momentPrototype;
+    utils_hooks__hooks.min                   = min;
+    utils_hooks__hooks.max                   = max;
+    utils_hooks__hooks.utc                   = create_utc__createUTC;
+    utils_hooks__hooks.unix                  = moment__createUnix;
+    utils_hooks__hooks.months                = lists__listMonths;
+    utils_hooks__hooks.isDate                = isDate;
+    utils_hooks__hooks.locale                = locale_locales__getSetGlobalLocale;
+    utils_hooks__hooks.invalid               = valid__createInvalid;
+    utils_hooks__hooks.duration              = create__createDuration;
+    utils_hooks__hooks.isMoment              = isMoment;
+    utils_hooks__hooks.weekdays              = lists__listWeekdays;
+    utils_hooks__hooks.parseZone             = moment__createInZone;
+    utils_hooks__hooks.localeData            = locale_locales__getLocale;
+    utils_hooks__hooks.isDuration            = isDuration;
+    utils_hooks__hooks.monthsShort           = lists__listMonthsShort;
+    utils_hooks__hooks.weekdaysMin           = lists__listWeekdaysMin;
+    utils_hooks__hooks.defineLocale          = defineLocale;
+    utils_hooks__hooks.weekdaysShort         = lists__listWeekdaysShort;
+    utils_hooks__hooks.normalizeUnits        = normalizeUnits;
+    utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold;
+
+    var _moment = utils_hooks__hooks;
+
+    return _moment;
+
+}));
\ No newline at end of file
diff --git a/public/bower_components/ng-csv/ng-csv.min.js b/public/bower_components/ng-csv/ng-csv.min.js
new file mode 100644
index 0000000..94dcd7f
--- /dev/null
+++ b/public/bower_components/ng-csv/ng-csv.min.js
@@ -0,0 +1,2 @@
+/*! ng-csv 10-10-2015 */
+!function(a){angular.module("ngCsv.config",[]).value("ngCsv.config",{debug:!0}).config(["$compileProvider",function(a){angular.isDefined(a.urlSanitizationWhitelist)?a.urlSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|data):/):a.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|data):/)}]),angular.module("ngCsv.directives",["ngCsv.services"]),angular.module("ngCsv.services",[]),angular.module("ngCsv",["ngCsv.config","ngCsv.services","ngCsv.directives","ngSanitize"]),"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ngCsv"),angular.module("ngCsv.services").service("CSV",["$q",function(a){var b="\r\n",c="",d={"\\t":"	","\\b":"\b","\\v":"","\\f":"\f","\\r":"\r"};this.stringifyField=function(a,b){return"locale"===b.decimalSep&&this.isFloat(a)?a.toLocaleString():"."!==b.decimalSep&&this.isFloat(a)?a.toString().replace(".",b.decimalSep):"string"==typeof a?(a=a.replace(/"/g,'""'),(b.quoteStrings||a.indexOf(",")>-1||a.indexOf("\n")>-1||a.indexOf("\r")>-1)&&(a=b.txtDelim+a+b.txtDelim),a):"boolean"==typeof a?a?"TRUE":"FALSE":a},this.isFloat=function(a){return+a===a&&(!isFinite(a)||Boolean(a%1))},this.stringify=function(d,e){var f=a.defer(),g=this,h="",i="",j=a.when(d).then(function(a){if(angular.isDefined(e.header)&&e.header){var d,j;d=[],angular.forEach(e.header,function(a){this.push(g.stringifyField(a,e))},d),j=d.join(e.fieldSep?e.fieldSep:","),i+=j+b}var k=[];if(angular.isArray(a)?k=a:angular.isFunction(a)&&(k=a()),angular.isDefined(e.label)&&e.label&&"boolean"==typeof e.label){var l,m;l=[],angular.forEach(k[0],function(a,b){this.push(g.stringifyField(b,e))},l),m=l.join(e.fieldSep?e.fieldSep:","),i+=m+b}angular.forEach(k,function(a,c){var d,f,h=angular.copy(k[c]);f=[];var j=e.columnOrder?e.columnOrder:h;angular.forEach(j,function(a){var b=e.columnOrder?h[a]:a;this.push(g.stringifyField(b,e))},f),d=f.join(e.fieldSep?e.fieldSep:","),i+=c<k.length?d+b:d}),e.addByteOrderMarker&&(h+=c),h+=i,f.resolve(h)});return"function"==typeof j["catch"]&&j["catch"](function(a){f.reject(a)}),f.promise},this.isSpecialChar=function(a){return void 0!==d[a]},this.getSpecialChar=function(a){return d[a]}}]),angular.module("ngCsv.directives").directive("ngCsv",["$parse","$q","CSV","$document","$timeout",function(b,c,d,e,f){return{restrict:"AC",scope:{data:"&ngCsv",filename:"@filename",header:"&csvHeader",columnOrder:"&csvColumnOrder",txtDelim:"@textDelimiter",decimalSep:"@decimalSeparator",quoteStrings:"@quoteStrings",fieldSep:"@fieldSeparator",lazyLoad:"@lazyLoad",addByteOrderMarker:"@addBom",ngClick:"&",charset:"@charset",label:"&csvLabel"},controller:["$scope","$element","$attrs","$transclude",function(a,b,e){function f(){var b={txtDelim:a.txtDelim?a.txtDelim:'"',decimalSep:a.decimalSep?a.decimalSep:".",quoteStrings:a.quoteStrings,addByteOrderMarker:a.addByteOrderMarker};return angular.isDefined(e.csvHeader)&&(b.header=a.$eval(a.header)),angular.isDefined(e.csvColumnOrder)&&(b.columnOrder=a.$eval(a.columnOrder)),angular.isDefined(e.csvLabel)&&(b.label=a.$eval(a.label)),b.fieldSep=a.fieldSep?a.fieldSep:",",b.fieldSep=d.isSpecialChar(b.fieldSep)?d.getSpecialChar(b.fieldSep):b.fieldSep,b}a.csv="",angular.isDefined(a.lazyLoad)&&"true"==a.lazyLoad||angular.isArray(a.data)&&a.$watch("data",function(){a.buildCSV()},!0),a.getFilename=function(){return a.filename||"download.csv"},a.buildCSV=function(){var g=c.defer();return b.addClass(e.ngCsvLoadingClass||"ng-csv-loading"),d.stringify(a.data(),f()).then(function(c){a.csv=c,b.removeClass(e.ngCsvLoadingClass||"ng-csv-loading"),g.resolve(c)}),a.$apply(),g.promise}}],link:function(b,c){function d(){var c=b.charset||"utf-8",d=new Blob([b.csv],{type:"text/csv;charset="+c+";"});if(a.navigator.msSaveOrOpenBlob)navigator.msSaveBlob(d,b.getFilename());else{var g=angular.element('<div data-tap-disabled="true"><a></a></div>'),h=angular.element(g.children()[0]);h.attr("href",a.URL.createObjectURL(d)),h.attr("download",b.getFilename()),h.attr("target","_blank"),e.find("body").append(g),f(function(){h[0].click(),h.remove()},null)}}c.bind("click",function(){b.buildCSV().then(function(){d()}),b.$apply()})}}}])}(window,document);
\ No newline at end of file
diff --git a/public/bower_components/ng-emoticons/emojis.png b/public/bower_components/ng-emoticons/emojis.png
new file mode 100644
index 0000000000000000000000000000000000000000..cb0362b3c7cfef7ff9ae640ad819e6c91c71bbb9
GIT binary patch
literal 792641
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%0D%FramJV~Y?St+P+x~07ajIRV_9w?@`yXws
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%0D(_<8a+w%@+<KH`{7Bw;
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
Z{y&yb>8Q@=J0Ac5002ovPDHLkV1oKy%s~JE

literal 0
HcmV?d00001

diff --git a/public/bower_components/ng-emoticons/[email-masked] b/public/bower_components/ng-emoticons/[email-masked]
new file mode 100644
index 0000000000000000000000000000000000000000..f39e0ae20a4d34610f9a5f28595cc41965c8da68
GIT binary patch
literal 2366542
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%0Avh(+qrfm<o;LIoFT+Qeg-
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%0Aigz5w(ee9rc?dBKI}Ec@u1mCKd^JoDV9
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%0AhewU?KeUESCBiHr~$)%rV4vm
zUuaRIuKCfyIKHYH#>dx6pr7+xB#<?J?St(5{?qbn&Bo39c;iV+`0zVlJ}P$s8}{_`
zo!|e1-TgV58j~br7BZ?Ej+}eKGq!%o$*;90@B>`W2SW_kXwB?sWN@Isl!gR#$rxG-
z6oR2_nX0Frao!R{zOz!}tcS@dzm5!dB4%M35<hq*H-m;@uC$mnvL*thaXlZ)G%!U7
zZLL%=-0$&Hng1YA_@2u<UUvegES@=Br~8Zh*K*7Kt2t`^6bvI=>w`sye6Gx_DUD;+
zPpRUJ_}O|qey_>A{=qT?gZUEKVukjm^l*GLZkhBC6zFJ4BXsBw4h$7BO=HYwlqwE^
z?<25ZQtSV~`9B}m^*Mg=Gz>W+%-Zc;c)pJz!+N3Tf1H`z^RJb{+^_Y)G$liY3T=%c
zHfk*`h*D&Wm61BaTA<YsXsw3%0A6bIU#NH(uBIXDlMX;hlQo;VDU_?!C+!Ho8!RC>
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%0AtmPxB%
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
QCcs~BUu(UpQnC*JKTpM3t^fc4

literal 0
HcmV?d00001

diff --git a/public/bower_components/ng-emoticons/emoticons.eot b/public/bower_components/ng-emoticons/emoticons.eot
new file mode 100644
index 0000000000000000000000000000000000000000..16d14444b5556b42db41621c8b39c9acd96268ec
GIT binary patch
literal 13168
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

literal 0
HcmV?d00001

diff --git a/public/bower_components/ng-emoticons/emoticons.svg b/public/bower_components/ng-emoticons/emoticons.svg
new file mode 100644
index 0000000..0ef6e1d
--- /dev/null
+++ b/public/bower_components/ng-emoticons/emoticons.svg
@@ -0,0 +1,44 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Generated by IcoMoon</metadata>
+<defs>
+<font id="icomoon" horiz-adv-x="1024">
+<font-face units-per-em="1024" ascent="960" descent="-64" />
+<missing-glyph horiz-adv-x="1024" />
+<glyph unicode="&#x20;" d="" horiz-adv-x="512" />
+<glyph unicode="&#xe600;" d="M771.516 640c18.126 12.88 35.512 27.216 51.444 43.148 33.402 33.402 55.746 74.5 62.912 115.722 7.858 45.186-3.672 87.14-31.63 115.1-22.3 22.298-52.51 34.086-87.364 34.086-49.632 0-101.922-23.824-143.46-65.362-66.476-66.476-105.226-158.238-126.076-223.722-15.44 65.802-46.206 154.644-106.018 214.458-32.094 32.092-73.114 48.57-111.846 48.57-31.654 0-61.78-11.004-84.26-33.486-49.986-49.988-43.232-137.786 15.086-196.104 20.792-20.792 45.098-38.062 70.72-52.412h-217.024v-256h64v-448h768v448.002h64v256h-188.484zM674.326 831.782c27.724 27.724 62.322 44.274 92.55 44.274 10.7 0 25.708-2.254 36.45-12.998 26.030-26.028 11.412-86.308-31.28-128.998-43.946-43.946-103.060-74.168-154.432-94.060h-50.672c18.568 57.548 52.058 136.456 107.384 191.782zM233.934 799.11c-0.702 9.12-0.050 26.248 12.196 38.494 10.244 10.244 23.788 12.396 33.348 12.396v0c21.258 0 43.468-10.016 60.932-27.48 33.872-33.872 61.766-87.772 80.668-155.876 0.51-1.84 1.008-3.67 1.496-5.486-1.816 0.486-3.646 0.984-5.486 1.496-68.104 18.904-122.002 46.798-155.874 80.67-15.828 15.826-25.77 36.16-27.28 55.786zM448 0h-256v416h256v-416zM448 448h-320v128h320v-128zM832 0h-256v416h256v-416zM896 448h-320v128h320v-128z" />
+<glyph unicode="&#xe601;" d="M832 640h-64v96c0 88.366-171.922 160-384 160s-384-71.634-384-160v-576c0-88.366 171.922-160 384-160s384 71.634 384 160v96h64c105.6 0 192 86.4 192 192s-86.4 192-192 192zM176.056 770.398c57.942 19.090 131.79 29.602 207.944 29.602s150.004-10.512 207.944-29.602c36.994-12.188 59.408-25.246 71.41-34.398-12.002-9.152-34.416-22.208-71.41-34.398-57.94-19.090-131.79-29.602-207.944-29.602s-150.002 10.512-207.944 29.602c-36.994 12.19-59.408 25.246-71.41 34.398 12.002 9.152 34.416 22.208 71.41 34.398zM904.364 391.636c-8.828-8.828-27.89-23.636-56.364-23.636h-80v160h80c28.474 0 47.536-14.81 56.364-23.638s23.636-27.888 23.636-56.362-14.808-47.536-23.636-56.364z" />
+<glyph unicode="&#xe602;" d="M1024 562.95l-353.78 51.408-158.22 320.582-158.216-320.582-353.784-51.408 256-249.538-60.432-352.352 316.432 166.358 316.432-166.358-60.434 352.352 256.002 249.538zM512 206.502l-223.462-117.48 42.676 248.83-180.786 176.222 249.84 36.304 111.732 226.396 111.736-226.396 249.836-36.304-180.788-176.222 42.678-248.83-223.462 117.48z" />
+<glyph unicode="&#xe603;" d="M1024 562.95l-353.78 51.408-158.22 320.582-158.216-320.582-353.784-51.408 256-249.538-60.432-352.352 316.432 166.358 316.432-166.358-60.434 352.352 256.002 249.538z" />
+<glyph unicode="&#xe604;" d="M1024 601.844c0-86.362-37.218-164.030-96.49-217.844h0.49l-320-320c-32-32-64-64-96-64s-64 32-96 64l-319.51 320c-59.272 53.814-96.49 131.482-96.49 217.844 0 162.458 131.698 294.156 294.156 294.156 86.362 0 164.030-37.218 217.844-96.49 53.814 59.272 131.482 96.49 217.844 96.49 162.456 0 294.156-131.698 294.156-294.156z" />
+<glyph unicode="&#xe605;" d="M1024 601.844c0-86.362-37.218-164.030-96.49-217.844h0.49l-320-320c-32-32-64-64-96-64s-64 32-96 64l-319.51 320c-59.272 53.814-96.49 131.482-96.49 217.844 0 162.458 131.698 294.156 294.156 294.156 55.45 0 107.302-15.364 151.572-42.036l-93.728-149.964 224-128-128-320 352 384-224 128 78.892 118.34c23.932 6.288 49.046 9.66 74.952 9.66 162.456 0 294.156-131.698 294.156-294.156z" />
+<glyph unicode="&#xe606;" d="M928 384c73 0 32-192-32-192 32 0 0-160-64-160 0-64-64-96-128-96-270.352 0-175.264 67.65-448 96v512c240.922 72.268 480 253.424 480 416 53 0 192-64 0-384 0 0 160 0 192 0 96 0 64-192 0-192zM192 544v-512h64v-32h-128c-35.2 0-64 43.2-64 96v384c0 52.8 28.8 96 64 96h128v-32h-64z" />
+<glyph unicode="&#xe607;" d="M96 512c-73 0-32 192 32 192-32 0 0 160 64 160 0 64 64 96 128 96 270.352 0 175.264-67.65 448-96v-512c-240.922-72.268-480-253.424-480-416-53 0-192 64 0 384 0 0-160 0-192 0-96 0-64 192 0 192zM832 352v512h-64v32h128c35.2 0 64-43.2 64-96v-384c0-52.8-28.8-96-64-96h-128v32h64z" />
+<glyph unicode="&#xe608;" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM512 361.24c115.95 0 226.23 30.806 320 84.92-14.574-178.438-153.128-318.16-320-318.16-166.868 0-305.422 139.872-320 318.304 93.77-54.112 204.050-85.064 320-85.064zM256 608c0 53.019 28.654 96 64 96s64-42.981 64-96c0-53.019-28.654-96-64-96s-64 42.981-64 96zM640 608c0 53.019 28.654 96 64 96s64-42.981 64-96c0-53.019-28.654-96-64-96s-64 42.981-64 96z" />
+<glyph unicode="&#xe609;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM704 704c35.348 0 64-42.98 64-96s-28.652-96-64-96-64 42.98-64 96 28.652 96 64 96zM320 704c35.346 0 64-42.98 64-96s-28.654-96-64-96-64 42.98-64 96 28.654 96 64 96zM512 64c-166.868 0-305.422 139.872-320 318.304 93.77-54.114 204.050-85.064 320-85.064s226.23 30.806 320 84.92c-14.574-178.438-153.128-318.16-320-318.16z" />
+<glyph unicode="&#xe60a;" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM256 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM640 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM704.098 332.74l82.328-49.396c-55.962-93.070-157.916-155.344-274.426-155.344s-218.464 62.274-274.426 155.344l82.328 49.396c39.174-65.148 110.542-108.74 192.098-108.74s152.924 43.592 192.098 108.74z" />
+<glyph unicode="&#xe60b;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM704 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM320 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM512 128c-116.51 0-218.464 62.274-274.426 155.344l82.328 49.396c39.174-65.148 110.542-108.74 192.098-108.74s152.924 43.592 192.098 108.74l82.328-49.396c-55.962-93.070-157.916-155.344-274.426-155.344z" />
+<glyph unicode="&#xe60c;" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM256 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM640 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM768 384v-64h-64v-96c0-53.020-42.98-96-96-96s-96 42.98-96 96v96h-256v64h512z" />
+<glyph unicode="&#xe60d;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM320 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM768 320h-64v-96c0-53.020-42.98-96-96-96s-96 42.98-96 96v96h-256v64h512v-64zM704 576c-35.346 0-64 28.654-64 64s28.654 64 64 64 64-28.654 64-64-28.654-64-64-64z" />
+<glyph unicode="&#xe60e;" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM256 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM640 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM319.902 179.26l-82.328 49.396c55.962 93.070 157.916 155.344 274.426 155.344 116.508 0 218.462-62.274 274.426-155.344l-82.328-49.396c-39.174 65.148-110.542 108.74-192.098 108.74-81.558 0-152.924-43.592-192.098-108.74z" />
+<glyph unicode="&#xe60f;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM704 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM320 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM704.098 179.26c-39.174 65.148-110.544 108.74-192.098 108.74-81.556 0-152.924-43.592-192.098-108.74l-82.328 49.396c55.96 93.070 157.916 155.344 274.426 155.344 116.508 0 218.464-62.274 274.426-155.344l-82.328-49.396z" />
+<glyph unicode="&#xe610;" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM542.74 248.972c140.248 27.706 249.11 91.542 288.454 176.594-21.654-167.956-161.518-297.566-330.85-297.566-119.242 0-223.858 64.282-282.892 160.948 70.41-55.058 194.534-65.808 325.288-39.976zM640 608c0 53.019 28.654 96 64 96s64-42.981 64-96c0-53.019-28.654-96-64-96s-64 42.981-64 96zM352 588.5c-41.796 0-77.334-15.656-90.516-37.5-3.54 5.866-5.484 32.174-5.484 38.75 0 31.066 42.98 56.25 96 56.25s96-25.184 96-56.25c0-6.576-1.944-32.884-5.484-38.75-13.182 21.844-48.72 37.5-90.516 37.5z" />
+<glyph unicode="&#xe611;" d="M512 960c-282.77 0-512-229.228-512-512 0-282.77 229.228-512 512-512 282.77 0 512 229.23 512 512 0 282.772-229.23 512-512 512zM704 704c35.346 0 64-42.98 64-96s-28.654-96-64-96-64 42.98-64 96 28.654 96 64 96zM352 647.938c59.646 0 102-22.332 102-57.282 0-7.398 3.812-42.994-0.17-49.594-14.828 24.576-54.81 42.188-101.83 42.188s-87.002-17.612-101.83-42.188c-3.982 6.6-0.17 42.196-0.17 49.594 0 34.95 42.354 57.282 102 57.282zM500.344 128c-119.242 0-223.858 64.28-282.892 160.952 70.41-55.060 194.534-65.81 325.288-39.978 140.248 27.706 249.11 91.542 288.454 176.594-21.654-167.96-161.518-297.568-330.85-297.568z" />
+<glyph unicode="&#xe612;" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM192 448v-64c0-140.8 115.2-256 256-256h128c140.8 0 256 115.2 256 256v64h-640zM384 203.012c-26.538 9.458-50.924 24.822-71.544 45.446-36.406 36.402-56.456 84.54-56.456 135.542h128v-180.988zM576 192h-128v192h128v-192zM711.544 248.458c-20.624-20.624-45.010-35.988-71.544-45.446v180.988h128c0-51.002-20.048-99.14-56.456-135.542zM225.352 576c0.002 0 0 0 0 0 9.768 0 18.108 7.056 19.724 16.69 6.158 36.684 37.668 63.31 74.924 63.31s68.766-26.626 74.924-63.31c1.616-9.632 9.956-16.69 19.722-16.69 9.768 0 18.108 7.056 19.724 16.688 1.082 6.436 1.628 12.934 1.628 19.312 0 63.962-52.038 116-116 116s-116-52.038-116-116c0-6.378 0.548-12.876 1.628-19.312 1.62-9.632 9.96-16.688 19.726-16.688zM609.352 576c0.002 0 0 0 0 0 9.77 0 18.112 7.056 19.724 16.69 6.158 36.684 37.668 63.31 74.924 63.31s68.766-26.626 74.924-63.31c1.616-9.632 9.958-16.69 19.722-16.69s18.108 7.056 19.722 16.688c1.082 6.436 1.628 12.934 1.628 19.312 0 63.962-52.038 116-116 116s-116-52.038-116-116c0-6.378 0.544-12.876 1.626-19.312 1.624-9.632 9.964-16.688 19.73-16.688z" />
+<glyph unicode="&#xe613;" d="M512 960c-282.77 0-512-229.23-512-512s229.226-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM704 724c63.962 0 116-52.038 116-116 0-6.378-0.546-12.876-1.628-19.312-1.618-9.632-9.958-16.688-19.724-16.688s-18.108 7.056-19.722 16.69c-6.16 36.684-37.67 53.31-74.926 53.31s-68.766-16.626-74.924-53.31c-1.616-9.632-9.956-16.69-19.722-16.69-0.002 0 0 0-0.002 0-9.766 0-18.106 7.056-19.722 16.688-1.084 6.436-1.63 12.934-1.63 19.312 0 63.962 52.038 116 116 116zM320 724c63.962 0 116-52.038 116-116 0-6.378-0.548-12.876-1.628-19.312-1.618-9.632-9.956-16.688-19.724-16.688s-18.106 7.056-19.722 16.69c-6.16 36.684-37.67 53.31-74.926 53.31s-68.766-16.626-74.924-53.31c-1.616-9.632-9.956-16.69-19.722-16.69 0 0 0 0 0 0-9.766 0-18.106 7.056-19.724 16.688-1.082 6.436-1.63 12.934-1.63 19.312 0 63.962 52.038 116 116 116zM192 384h192v-247.846c-110.094 28.606-192 129.124-192 247.846zM448 128v256h128v-256h-128zM640 136.154v247.846h192c0-118.722-81.904-219.24-192-247.846z" />
+<glyph unicode="&#xe614;" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM800 704c17.6 0 32-14.4 32-32v-96c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64h-128c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v96c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-32h128v32c0 17.6 14.4 32 32 32h192zM512 192c93.208 0 174.772 49.818 219.546 124.278l54.88-32.934c-55.966-93.070-157.916-155.344-274.426-155.344-48.458 0-94.384 10.796-135.54 30.082l33.162 55.278c31.354-13.714 65.964-21.36 102.378-21.36z" />
+<glyph unicode="&#xe615;" d="M512 960c-282.77 0-512-229.23-512-512s229.226-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM512 128c-48.458 0-94.384 10.796-135.542 30.082l33.162 55.276c31.356-13.712 65.966-21.358 102.38-21.358 93.208 0 174.772 49.818 219.542 124.278l54.882-32.934c-55.964-93.070-157.914-155.344-274.424-155.344zM832 576c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64h-128c0-35.2-28.8-64-64-64h-128c-35.2 0-64 28.8-64 64v96c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-32h128v32c0 17.6 14.4 32 32 32h192c17.6 0 32-14.4 32-32v-96z" />
+<glyph unicode="&#xe616;" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM704.098 179.26c-39.174 65.148-110.544 108.74-192.098 108.74-81.556 0-152.924-43.592-192.098-108.74l-82.328 49.396c55.96 93.070 157.916 155.344 274.426 155.344 116.508 0 218.464-62.274 274.426-155.344l-82.328-49.396zM767.042 679.76c4.284-17.144-6.14-34.518-23.282-38.804-17.626-4.45-38.522-12.12-56.936-21.35 10.648-11.43 17.174-26.752 17.174-43.606 0-35.346-28.654-64-64-64s-64 28.654-64 64c0 1.17 0.036 2.33 0.098 3.484 2.032 47.454 45.212 78.946 81.592 97.138 34.742 17.37 69.102 26.060 70.548 26.422 17.146 4.288 34.518-6.138 38.806-23.284zM256.958 679.76c4.288 17.146 21.66 27.572 38.806 23.284 1.446-0.362 35.806-9.052 70.548-26.422 36.38-18.192 79.56-49.684 81.592-97.138 0.062-1.154 0.098-2.314 0.098-3.484 0-35.346-28.654-64-64-64s-64 28.654-64 64c0 16.854 6.526 32.176 17.174 43.606-18.414 9.23-39.31 16.9-56.936 21.35-17.142 4.286-27.566 21.66-23.282 38.804z" />
+<glyph unicode="&#xe617;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM576.094 579.484c2.032 47.454 45.21 78.948 81.592 97.138 34.742 17.372 69.104 26.060 70.548 26.422 17.146 4.288 34.52-6.138 38.806-23.284s-6.138-34.518-23.284-38.806c-17.624-4.45-38.522-12.12-56.936-21.35 10.648-11.43 17.174-26.752 17.174-43.606 0-35.346-28.654-64-64-64s-64 28.654-64 64c0.002 1.17 0.038 2.332 0.1 3.486zM256.958 679.76c4.288 17.146 21.66 27.572 38.806 23.284 1.446-0.362 35.806-9.052 70.548-26.422 36.38-18.192 79.56-49.684 81.592-97.138 0.062-1.154 0.098-2.314 0.098-3.484 0-35.346-28.654-64-64-64s-64 28.654-64 64c0 16.854 6.526 32.176 17.174 43.606-18.414 9.23-39.31 16.9-56.936 21.35-17.142 4.286-27.566 21.66-23.282 38.804zM704.098 179.26c-39.174 65.148-110.544 108.74-192.098 108.74-81.556 0-152.924-43.592-192.098-108.74l-82.328 49.396c55.96 93.070 157.916 155.344 274.426 155.344 116.508 0 218.464-62.274 274.426-155.344l-82.328-49.396z" />
+<glyph unicode="&#xe618;" d="M639.996 512c-35.346 0-64 28.654-63.998 64.002 0 1.17 0.036 2.33 0.098 3.484 2.032 47.454 45.212 78.946 81.592 97.138 34.742 17.37 69.102 26.060 70.548 26.422 17.146 4.288 34.518-6.138 38.806-23.284 4.284-17.146-6.14-34.518-23.284-38.806-17.626-4.45-38.522-12.12-56.936-21.35 10.648-11.43 17.174-26.752 17.174-43.606 0-35.346-28.654-64-64-64zM280.242 640.956c-17.144 4.286-27.568 21.66-23.282 38.804 4.286 17.146 21.66 27.572 38.806 23.284 1.444-0.362 35.806-9.050 70.548-26.422 36.382-18.19 79.56-49.684 81.592-97.138 0.062-1.154 0.098-2.316 0.098-3.484 0-35.346-28.654-64-64-64s-64 28.654-64 64c0 16.854 6.526 32.176 17.174 43.606-18.414 9.23-39.312 16.9-56.936 21.35zM512 224c81.554 0 152.924 43.592 192.098 108.74l82.328-49.396c-55.962-93.070-157.916-155.344-274.426-155.344s-218.464 62.274-274.426 155.344l82.328 49.396c39.174-65.148 110.542-108.74 192.098-108.74zM1024 896c0 45.516-9.524 88.8-26.652 128-33.576-76.836-96.448-137.932-174.494-169.178-86.194 65.96-193.936 105.178-310.854 105.178s-224.66-39.218-310.854-105.178c-78.048 31.246-140.918 92.342-174.494 169.178-17.128-39.2-26.652-82.484-26.652-128 0-73.574 24.85-141.328 66.588-195.378-42.37-74.542-66.588-160.75-66.588-252.622 0-282.77 229.23-512 512-512s512 229.23 512 512c0 91.872-24.218 178.080-66.588 252.622 41.738 54.050 66.588 121.804 66.588 195.378zM512 32c-229.75 0-416 186.25-416 416s186.25 416 416 416 416-186.25 416-416-186.25-416-416-416z" />
+<glyph unicode="&#xe619;" d="M1024 896c0 45.516-9.524 88.8-26.652 128-33.576-76.836-96.448-137.932-174.494-169.178-86.194 65.96-193.936 105.178-310.854 105.178s-224.66-39.218-310.854-105.178c-78.048 31.246-140.918 92.342-174.494 169.178-17.128-39.2-26.652-82.484-26.652-128 0-73.574 24.85-141.328 66.588-195.378-42.37-74.542-66.588-160.75-66.588-252.622 0-282.77 229.23-512 512-512s512 229.23 512 512c0 91.872-24.218 178.080-66.588 252.622 41.738 54.050 66.588 121.804 66.588 195.378zM576.094 579.484c2.032 47.454 45.21 78.948 81.592 97.138 34.742 17.372 69.104 26.060 70.548 26.422 17.146 4.288 34.52-6.138 38.806-23.284s-6.138-34.518-23.284-38.806c-17.624-4.45-38.522-12.12-56.936-21.35 10.648-11.43 17.174-26.752 17.174-43.606 0-35.346-28.654-64-64-64s-64 28.654-64 64c0.002 1.17 0.038 2.332 0.1 3.486zM256.958 679.76c4.288 17.146 21.66 27.572 38.806 23.284 1.446-0.362 35.806-9.052 70.548-26.422 36.38-18.192 79.56-49.684 81.592-97.138 0.062-1.154 0.098-2.314 0.098-3.484 0-35.346-28.654-64-64-64s-64 28.654-64 64c0 16.854 6.526 32.176 17.174 43.606-18.414 9.23-39.31 16.9-56.936 21.35-17.142 4.286-27.566 21.66-23.282 38.804zM512 128c-116.51 0-218.464 62.274-274.426 155.344l82.328 49.396c39.174-65.148 110.542-108.74 192.098-108.74 81.554 0 152.924 43.592 192.098 108.74l82.328-49.396c-55.962-93.070-157.916-155.344-274.426-155.344z" />
+<glyph unicode="&#xe61a;" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM384 256c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128s-128 57.308-128 128zM640 608c0 53.019 28.654 96 64 96s64-42.981 64-96c0-53.019-28.654-96-64-96s-64 42.981-64 96zM256 608c0 53.019 28.654 96 64 96s64-42.981 64-96c0-53.019-28.654-96-64-96s-64 42.981-64 96z" />
+<glyph unicode="&#xe61b;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM320 512c-35.346 0-64 42.98-64 96s28.654 96 64 96 64-42.98 64-96-28.654-96-64-96zM512 128c-70.692 0-128 57.308-128 128s57.308 128 128 128c70.692 0 128-57.308 128-128s-57.308-128-128-128zM704 512c-35.346 0-64 42.98-64 96s28.654 96 64 96 64-42.98 64-96-28.654-96-64-96z" />
+<glyph unicode="&#xe61c;" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM256 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM640 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM726.106 320h64.864c9.246-72.506-32.452-144.53-103.958-170.56-82.904-30.176-174.9 12.716-205.080 95.616-18.108 49.744-73.306 75.482-123.048 57.372-45.562-16.588-70.956-64.298-60.988-110.424h-64.86c-9.242 72.508 32.45 144.528 103.956 170.56 82.904 30.178 174.902-12.716 205.082-95.614 18.104-49.748 73.306-75.482 123.044-57.372 45.562 16.584 70.956 64.298 60.988 110.422z" />
+<glyph unicode="&#xe61d;" d="M512 960c-282.77 0-512-229.23-512-512s229.226-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM704 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64c0 35.346 28.654 64 64 64zM320 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64c0 35.346 28.654 64 64 64zM687.010 149.44c-82.902-30.18-174.9 12.712-205.080 95.614-18.108 49.742-73.306 75.478-123.048 57.372-45.562-16.588-70.958-64.296-60.988-110.424h-64.86c-9.244 72.508 32.45 144.532 103.956 170.56 82.904 30.18 174.902-12.712 205.082-95.614 18.108-49.742 73.306-75.476 123.046-57.37 45.562 16.584 70.958 64.294 60.988 110.422h64.864c9.24-72.506-32.454-144.532-103.96-170.56z" />
+<glyph unicode="&#xe61e;" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM256 640c0-35.346 28.654-64 64-64s64 28.654 64 64-28.654 64-64 64-64-28.654-64-64zM640 640c0-35.346 28.654-64 64-64s64 28.654 64 64-28.654 64-64 64-64-28.654-64-64zM384 256h256v-64h-256v64z" />
+<glyph unicode="&#xe61f;" d="M512 960c-282.77 0-512-229.23-512-512s229.226-512 512-512c282.77 0 512 229.23 512 512s-229.23 512-512 512zM640 192h-256v64h256v-64zM704 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64c0 35.346 28.654 64 64 64zM320 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64c0 35.346 28.654 64 64 64z" />
+<glyph unicode="&#xe620;" d="M512-64c282.77 0 512 229.23 512 512s-229.23 512-512 512-512-229.23-512-512 229.23-512 512-512zM512 864c229.75 0 416-186.25 416-416s-186.25-416-416-416-416 186.25-416 416 186.25 416 416 416zM745.74 358.38l22.488-76.776-437.008-128.002-22.488 76.776zM256 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64zM640 640c0 35.346 28.654 64 64 64s64-28.654 64-64c0-35.346-28.654-64-64-64s-64 28.654-64 64z" />
+<glyph unicode="&#xe621;" d="M512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM704 704c35.346 0 64-28.654 64-64s-28.654-64-64-64-64 28.654-64 64 28.654 64 64 64zM256 640c0 35.346 28.654 64 64 64s64-28.654 64-64-28.654-64-64-64-64 28.654-64 64zM331.244 153.614l-22.488 76.774 437 128 22.488-76.774-437-128z" />
+</font></defs></svg>
\ No newline at end of file
diff --git a/public/bower_components/ng-emoticons/emoticons.ttf b/public/bower_components/ng-emoticons/emoticons.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..404059a35eb6173e3c8fc331d22e869d61e08b4a
GIT binary patch
literal 13004
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

literal 0
HcmV?d00001

diff --git a/public/bower_components/ng-emoticons/emoticons.woff b/public/bower_components/ng-emoticons/emoticons.woff
new file mode 100644
index 0000000000000000000000000000000000000000..528626f69806c2fc297f38de04f9baaf83516a6b
GIT binary patch
literal 13080
zcmcgzZHyd8nXc;ZkLjN2>FJ*Bo!#}!&hE~7*Is*fc6Qdz8jmq{9Bhd5<>PWnSd$n#
zB+eS*GX@=}J~(j*et-}P0itL@V37FAk61z?5(E4};zQ`9LxDR9p8`3=q5E;C=t7k3
z<*lmrcF%0hva@kAJKghEbyro_^FHreRd4lv@Xq7M5k~N-4<M8L&i#y>d7nG)**Av}
z*5KMQIqc7hCm*_a_7db>fb=PH4Bq#%tLM)?LGqr1G`W`?x$}>G=)I8lJVG;{A;<e~
zJpJ5-b7vn$Xg?{pKo04{zxnqIkO_JJ4Cyg)s6P__>%zs$S0V2kkba6BpG4@ZkF7ie
z_szB-{Z4ZH=qumzFP^;$?ao5|s7#N2=ns#dy?74to`trLk>hWIYyWd;<%!GC&sR3?
z6G0Lsgg=91goG~$1c6VpU;N*wj&(?<KRB085xIrXOBJ!b4u4{sq!^~~OFm_K7T`=;
zD!>`jUkNS3uK@@N@P|?PrONu+`a0x6nU@fi@%oE{Qe1*wfD=X-?#j|ySRT~fJU}Yl
zcAkn_<XOe%&`I<t`aF6XeHmRt--HU@f}0!Pg^Ah>X5Z?lqS`qA-pqtc8~Mc%9Dl1$
z-KoG)t<j3=b3VI}l&`WD<fWvo`s~fy$jt@6I5E1>HWAzk)ag_j6%P~1C6Xv9wxVW~
zjHhX)C}LT%O|4*>1C~3H&sTFnEtf57a^A8=i<y#bk7UiFX}Y?b6NCX@b96m#{JJHg
z*7NT%i<!)TDe1DTONJ~<UM@FLDC~CYY5__Yq7xV^lBB~|)ErgIDpt`j9Tj6i#KBC#
ztyqdKi4y+RI;bFO;}#By)FPq~%7(0%idD*HM{-U%n+;6Ol4MEOv>+QC92q_k1dBt%
z3x38`6lg}WG<R;W)bQ0TbWdJKQ46;*Y8#HMDA1%V86)}pcrG`T$+)UNI~dG*74qz+
zEXo4L@F0d_RSND*APA6F9RvEO*s7XUU;9tI8ZF~?7(%771iT^4L_o9<?MC;bE5L(l
zW1eWA>DO~WBO|yzw*cfg6#vFIjCX38sBeQPHk3~|#Q4y}^zt-rY%l}Lcm>KYvDI3d
zZ+z<X=}$H0mlCNpd8{-zGBP-Ld~)p)bhy+U9&VNfXMNk(bqfH~br5^x3onR<syXKA
z)25@ThA3&G1S%FaNeGuK2Yo*XeE(o&t)0lrv?<!?M}b<P5=k^QfEe^I>JpHIpBsIg
zR=!GWXRWd}3A|vX>%Rt!zYaF<0m9=Zwy-!Zi{n^r)(+!cSS{8h6g~6IGtn~`En)au
z0yd%FPF;WX(xq3gPyJS?*YT0)2lZE@)oa)A@~hF)SN{C$*o!ZYJ^SY?#P&DpPuIS=
z%I<1nzd`k1hXm8bEK^jhK}?OlF;5r}D=wvYPePVuRsE=)830R)zfs$-LiWt$<fDfw
zhe|`Ug~IGm3B*SyCufBFSr!y2>bhy_dNG4rsT*j8Nd=^TF-H$<{~6Vyh-=KFv8Vp)
zPwGv&?wIr7jSw&2xD#B2?i$;BU`3X5#*-n~d>CF4MX)^DbEbRZZ~p^EhgozSo_@{;
zZ&+n#igt{$LoscDFZ304|6Khb!J6DU?$kYYPs5=)xD9(%akZ3HmGOZL*7fRupU=+>
zocr5K<^K2H|Lvo1ySs3kWmQhpE0x2Uv63iO2G+{0&;qOtL)QkZ5Pa0q*x1tC$jIEl
zSSFM4v$?V<pwizhE`H?D$kf!6SIOno2$i#-+5!#>pv-I;csxeOj<_%G=menzJE!U4
zP&@a)0Zc43_m5Vmh%+F!%1$-5eef&9?1?W}?yD=pjn1wJXmeMhO<fV<u0%Jxf?&j7
zZv*e!XaF?xcJvVX2ZUtm<~sZzbAJvUqnN9TmBBjf&=O7B;aHP&IINGS0O=@K>2*Os
z@B99-<EKv_Klc6iCDNIv77rXba$xbPGl?{P-{kI7Rk=Amy>j^Q%Jg(ouAbUGdEfLp
zqWZN4v{=(r!XYoW)zuDdQC#h6iMAQ(8N)0Wj$WRgo}HbZzI?P$HjT{xQ&LcZY%LMf
z?Zz5mI;-$fgG-FM+Y9MRuM0p!GEZQzr`5p+wA}>{1t$u5x$QK#Y0$+s4?UQg5p&rZ
z4SIDgOmIxF<#6&Jcfv`z7sGl|&t(I5OyFi3N<N4Q7Za&3_TB9rtXA*Zv*)gA^`Lim
zb`s`6yLK%G!DO}%V&32>jh7ewe6D(+;Q78+I8dDnCT%;Hv+c=%4lAA9JO@7dmUFWM
z(HLt!u>G);16~YkFMjeI0WWW@-HjB(5AfRTH$V6$an!4({pcYK3jscc2_+M$A99AR
z#E#ct(0d~oxsF=PiKAF<b@|9+=)o;`DE4xNcr!$vNZn(4`WC~;2aiiY-0p^iXJ!4c
zE($xk-@@FXi_5n+$tU8DMXX9E!SR}xk6c2wMCyljQTt7HiuGPjv3tC}wLX!pCt@f&
zLFNO?r6hmE#$kFW>BO@idUBoO|0M%Q8abX%{KQUtqRWCKU2{o)q3QM-&}9~z0dCGu
zbXm9u)iBQTK}|TCNW11A7$0BAY6ti1d4FrqJ>z3b#nSCl(+|#`<>3+CAYq8SjA6Nx
zI82CAU^$=34CVT8n`>V%MvMMp`S3+p9u_@sY0L{?rEcK!iH}Sq7nWPLCYXw1il(Qj
zx~^&-h>#XETb5yn>Yj6+K`UGM)1GrqId-(Z2aB?_2bjUl`GpwqWc~@NN~@3$JfF?0
z{)A;`F?<w=JC*bKvSk$@<O9&!)`b7Lv^LUO>P6~AA&Io8X{u+5wx-#lo`Z;zqR2U&
zr7cg@w6#}K*rzl?@Pue?YQ6MUbQd~<&Y`cN-|vL!5cDBYrQ2{ER;m;!xMUhX11mzW
z2+Kr|EvnQ;odqTEBA#Wl`&9G+DuFMHPBj+hn@hN3@iv4#zd&M&a8KoRmgj3TF`h(<
z+LP7l1C6lpK(#u#7Pbvn*By-@tcDPN`vi$Ux<&{|&x!&`6(E8s*oG0<c3>E`fFXjQ
zN}?(X62|#lZfam)DwoSccu#;#9QIqH4?~QWTlA@E2U;&nx+2@EU3Q#t_qy3`FRHc-
z;m+&sxZ{*<d_oiiMIuuH_&{JmQUvG=$rEG&0+RHxX$J&ZgskLxpJjl5N{WB)g8cvz
zwf^oFHeF<<3k*;SYC6!8He=>$ff#I#G%;Tz1fqeic)7Xb@?za%Y{n!Y-n_|TK8xCE
z1#d^aQP^*Zu)X{CU~m|tFl@Jn2ZP&p^IgZE`1<k`Re`V9kB+x46MgFyb6>e~dM^o=
zuOsc1y{9YXeRM0TbN=xd`j?&f80Nc&Sx9plGYwbcs1r>c!c^7Zg@}U~#&xFp+c0xW
zP2QrIufN3h6A719Q<h{pa<bqXi^DJ(u9#|@-Vri6x=}qcG_=oIU@PN%HSd&jqh?@P
zgLWSl3=wFkc{z#pCDJl&j$SXbhl@}?=j<J-(8V!?x=pnyYhc1)Z*Xk*`#O4j3rlk-
zn6+lg72kwzC*a4*-~-)(N(WxJwQZy+41D&#)=r_2!Une!7!zqTpbUI6UUsgNPoWUO
zzG(mPMK|rPIw#96%t@#NBWDVJdVSnj!n15LLeH}cgyY2uO%(Uj1T9nCU+5@CO`=I#
zWy5ikuZe`{iPY{r`93TNl4!sKtD3FCI3NniloDrQx@cR0ZdkDCrKmzA2&y7yRLjr<
z%Z5p27AJQ@QAJX14XRRLOGgm;Fpjl*_)~cNGHV!~QB*{-X_rxw6)qO?BV@mgGzX&_
z=?7~WlF%hLlNreiIJqARLlsaFc{<t=;6vJ{5jK2j3yX>u0%^tlRb8{qxc)TT_e!j_
zNmW~@HTq#cTEsu-O&-3jMjzXxmaVmTu1~E+CZ8=gZ5vctN9WN;(NEFuh&D+Wns0W!
zv^P%ej4c|rt2&oWf_Z}zrW?04<`mM7gPAkUXESeBdUN=ld6-7rm(9ygA*3|lCJmye
z7~<RG!5>)sw{y|XNFg9FOhe6#`F>-#d`GQz@18yP)@pZ@ha0{>mVvEZQGyw0kjn+S
zrYEs^NRT|3pGGKgQ;8(7s1wJ)dobyrSXZ`9r0Cr=&YTVxP)-S}P9>Myl^w48-e@MM
zSvGvET96s_{Q7WqS1wm^hUSA{Z((SuTs}IQ><5h=Eti*u3VVZKe&{vscFl&b0e+r<
zU9D$<pXk<6WAmWWi`^Rru@m1Euc~>o3hDK;;SF?T>sy57!&{;C=*Mrc-&=d3NA$mQ
zPP5}ZQ*pCjVN_xB@p!jBwPtJd+_>8Q+$1bG`I%B_Chrsyi63>2*hD=U(5ckVG-I`^
z9oiyJMZA+>7EdDcM=;)v`8V62?!7P7GsMq~s4FrE)5U7f3w%JiF{?JOliWLdjNhp}
zg(OG?JM=t7g~=U>L~z>7$tQO*&)&hFX`T5!C3($>O~;E>c<TYYB%5*5Nj4kdYkY8%
z;V6;%**7?IL^N${s<i9y(9j-J9dvRNt~02?D@#2u^ugsDU1pF>#Ji-ZU1}8lF~gML
zy`NofNz-7gEM~K#POtn;9RJ8xbK*D@OV&JWpSm+plXe%(zu-PJ6YG+%ATFnS>_4pZ
zp@mpIeCyydpbK-Vo3(%2KIBXle7m`@BfHuB1_#?cuk^ZrD_*6+2Rh+@BJpwHzth4Z
zNpA?b!&a-)ClABB%Xe<YSMr`}&y9tiFSGE0VXu_(ERjz`KBd-Bs};|9c~y1gZSt)R
zc;ou~PB`Kg<yy}%{}v4GfApi1euHNke46w@kVrWdp2A=3f`-==%>&H3$L%dS(#xmy
z9F5%Ccv0qagzu$TRIKayPx|;eV8&+&-{4wZRnYE6gMdy5MgaYW&o|z2@5ArTF1?IQ
z00BO~{Laa2@=InjG@rcn&OT6%ygN@pgB-XT*A!nzXktSGffR##TBH`vLGs5q`Mi5y
zcOHE%1K#N$!4voeK@%o~tHQ6uCGjiLyQDwK*Oa#?e^jq%`?a6wpEVAeAI@B|=B$6U
zf0J!Hx%^W8f8CE49`;7P=lyyA7sV4$8|nE3dWrtm1nVkoB6YIScVc`nvf~ouP8;1G
z=ZheZ#j*tQeX%SfA5sik1*vE*mJKuy?>)kQB}h8tkUE*n>SQvjlgX@3CbK%3tU%cV
zaamU9BT(-Ox(LS##E!{M;RnzY=n<MK!~2#qXg{P<_dN2@%EgtH$2&98-B9p6`g`;k
zItvwa6o8j$N!6E88SXd-5^3Trq|c#;A@4otLvX%>Ht~-5F=hyu^nG_C@IQY65Jiyg

literal 0
HcmV?d00001

diff --git a/public/bower_components/ng-emoticons/loader.svg b/public/bower_components/ng-emoticons/loader.svg
new file mode 100644
index 0000000..004a356
--- /dev/null
+++ b/public/bower_components/ng-emoticons/loader.svg
@@ -0,0 +1,17 @@
+<!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL -->
+<svg width="38" height="38" viewBox="0 0 38 38" xmlns="http://www.w3.org/2000/svg" stroke="#fff">
+    <g fill="none" fill-rule="evenodd">
+        <g transform="translate(1 1)" stroke-width="2">
+            <circle stroke-opacity=".5" cx="18" cy="18" r="18"/>
+            <path d="M36 18c0-9.94-8.06-18-18-18">
+                <animateTransform
+                    attributeName="transform"
+                    type="rotate"
+                    from="0 18 18"
+                    to="360 18 18"
+                    dur="1s"
+                    repeatCount="indefinite"/>
+            </path>
+        </g>
+    </g>
+</svg>
\ No newline at end of file
diff --git a/public/bower_components/ng-emoticons/ng-emoticons.css b/public/bower_components/ng-emoticons/ng-emoticons.css
new file mode 100644
index 0000000..6b5475d
--- /dev/null
+++ b/public/bower_components/ng-emoticons/ng-emoticons.css
@@ -0,0 +1,3843 @@
+* {
+    box-sizing : border-box;
+    }
+
+@font-face {
+    font-family : 'emoticons';
+    src         : url('../fonts/emoticons.eot?5zh0vu');
+    src         : url('../fonts/emoticons.eot?#iefix5zh0vu') format('embedded-opentype'),
+    url('../fonts/emoticons.woff?5zh0vu') format('woff'),
+    url('../fonts/emoticons.ttf?5zh0vu') format('truetype'),
+    url('../fonts/emoticons.svg?5zh0vu#icomoon') format('svg');
+    font-weight : normal;
+    font-style  : normal;
+    }
+
+.ne-code{
+    display: none;
+    }
+
+.ne-code {
+    font-size   : 14px;
+    padding     : 20px;
+    font-family : Consolas, Menlo, Monaco, monospace;
+    padding     : 1.5em;
+    }
+
+pre {
+    position      : relative;
+    margin-bottom : 24px;
+    border-radius : 2px;
+    overflow      : hidden;
+    }
+
+code.has-numbering {
+    display     : block;
+    padding     : 12px 30px;
+    overflow-y  : auto;
+    font-weight : 300;
+    font-family : Consolas, Menlo, Monaco, monospace;
+    font-size   : 14px;
+    line-height : 20px;
+    }
+
+code.has-numbering {
+    margin-left : 36px;
+    }
+
+.pre-numbering {
+    position         : absolute;
+    top              : 0;
+    left             : 0;
+    width            : 35px;
+    padding          : 1.1em 5px 12px 0;
+    border-right     : 1px solid #e8e8e8;
+    border-radius    : 3px 0 0 3px;
+    background-color : #EEE;
+    text-align       : right;
+    font-family      : Consolas, Menlo, Monaco, monospace;
+    font-size        : 14px;
+    color            : #AAA;
+    line-height      : 20px;
+    margin-top       : -4px;
+    }
+
+.pre-numbering li{
+    list-style-type: none;
+    }
+
+.ne-pdf iframe {
+    width   : 420px;
+    height  : 530px;
+    display : block;
+    }
+
+.ne-pdf-icon {
+    width        : 200px;
+    height       : 150px;
+    float        : left;
+    border-right : 1px solid #eee;
+    }
+
+.ne-pdf-icon i {
+    margin    : 29px 62px;
+    color     : #999;
+    font-size : 84px;
+    }
+
+.ne-pdf-view button {
+    font-family        : inherit;
+    font-size          : 14px;
+    background-color   : transparent;
+    border             : 1px solid #ccc;
+    padding            : 6px 15px;
+    border-radius      : 2px;
+    color              : #333;
+    cursor             : pointer;
+    box-shadow         : 0px 1px 1px 0 rgba(0, 0, 0, 0.26);
+    outline            : 0;
+    border-bottom      : 0;
+    float              : right;
+    margin             : 80px 10px 0 10px;
+    -webkit-transition : all 0.5s linear;
+    -o-transition      : all 0.5s linear;
+    -moz-transition    : all 0.5s linear;
+    -ms-transition     : all 0.5s linear;
+    -kthtml-transition : all 0.5s linear;
+    transition         : all 0.5s linear;
+    }
+
+.ne-pdf-view button:hover {
+    box-shadow : 0 2px 2px 0 rgba(0, 0, 0, 0.26);
+    }
+
+.ne-pdf-view button i {
+    margin-right : 6px;
+    }
+
+.ne-pdf-view button a {
+    color : #333;
+    }
+
+.ne-pdf-viewer iframe {
+    margin : 0 auto;
+    }
+
+.ne-pdf-viewer {
+    background-color : #3498DB;
+    position         : relative;
+    }
+
+.ne-pdf-viewer i {
+    position  : absolute;
+    right     : 10px;
+    top       : 8px;
+    color     : #fff;
+    font-size : 25px;
+    cursor    : pointer;
+    }
+
+.ne-audio {
+    background-color : #1D1D1D;
+    border-radius    : 2px;
+    padding-top      : 6px;
+    }
+
+.ne-audio audio {
+    width : 100%;
+    }
+
+.ne-video, .ne-pdf {
+    padding            : 5px;
+    border             : 1px solid #e4e4e4;
+    border-radius      : 2px;
+    margin             : 20px 0;
+    box-shadow         : 0px 1px 1px 0 rgba(0, 0, 0, 0.26);
+    border-bottom      : 0;
+    overflow           : auto;
+    -webkit-transition : all 0.5s linear;
+    -o-transition      : all 0.5s linear;
+    -moz-transition    : all 0.5s linear;
+    -ms-transition     : all 0.5s linear;
+    -kthtml-transition : all 0.5s linear;
+    transition         : all 0.5s linear;
+    }
+
+.ne-video video {
+    width : 100%;
+    }
+
+.ne-video:hover, .ne-image:hover {
+    box-shadow : 0px 2px 2px 0 rgba(0, 0, 0, 0.26);
+    }
+
+.ne-video-preview, .ne-pdf-preview {
+    overflow : auto;
+    }
+
+.ne-video-preview img {
+    display          : block;
+    width            : 200px;
+    height           : 150px;
+    border-radius    : 2px;
+    background-color : #3498DB;
+    }
+
+.ne-video-thumb {
+    width  : 200px;
+    float  : left;
+    cursor : pointer;
+    color  : rgba(255, 255, 255, 0.6);
+    }
+
+.ne-video-thumb:hover {
+    color : #fff;
+    }
+
+.ne-video-thumb i {
+    position    : absolute;
+    font-size   : 42px;
+    margin-top  : -95px;
+    margin-left : 80px;
+    cursor      : pointer;
+    }
+
+.ne-video-detail, .ne-pdf-detail {
+    width        : calc(100% - 200px);
+    float        : left;
+    padding-left : 15px;
+    }
+
+.ne-video-title, .ne-pdf-title {
+    font-weight   : bolder;
+    padding       : 5px 0;
+    white-space   : nowrap;
+    overflow      : hidden;
+    text-overflow : ellipsis;
+    }
+
+.ne-video-desc {
+    font-size : 16px;
+    color     : #666;
+    height    : 90px;
+    }
+
+.ne-stats {
+    padding-top : 7px;
+    overflow    : auto;
+    }
+
+.ne-video-stats span {
+    padding : 0 15px;
+    float   : right;
+    }
+
+.ne-video-stats span i {
+    margin-right : 10px;
+    }
+
+.ne-video-player {
+    background-color    : #3498DB;
+    background-image    : url('../images/loader.svg');
+    background-repeat   : no-repeat;
+    background-position : center;
+    }
+
+.ne-video-player iframe {
+    width : 100%;
+    }
+
+.ne-image {
+    width              : 100%;
+    border-radius      : 2px;
+    border             : 1px solid #e4e4e4;
+    min-height         : 250px;
+    max-height         : 250px;
+    overflow           : hidden;
+    cursor             : pointer;
+    padding-bottom     : 5px;
+    -webkit-transition : all 0.5s linear;
+    -o-transition      : all 0.5s linear;
+    -moz-transition    : all 0.5s linear;
+    -ms-transition     : all 0.5s linear;
+    -kthtml-transition : all 0.5s linear;
+    transition         : all 0.5s linear;
+    box-shadow         : 0px 1px 1px 0 rgba(0, 0, 0, 0.26);
+    border-bottom      : 5px solid #ffffff;
+    margin             : 10px 0;
+    }
+
+.ne-image-long {
+    max-height : 800px;
+    }
+
+.ne-image img, .ne-image-long img {
+    width      : 100%;
+    display    : block;
+    min-height : 250px;
+    }
+
+.ne-image-wrapper {
+    margin              : 5px;
+    margin-bottom       : 0;
+    background-color    : #3498DB;
+    background-image    : url('../images/loader.svg');
+    background-repeat   : no-repeat;
+    background-position : center;
+    height              : 100%;
+    overflow            : hidden;
+    }
+
+
+
+.emoticons-image-wrapper, .emoticons-image {
+    width : 100%;
+    }
+
+.emoticons-image {
+    padding       : 5px;
+    border-radius : 2px;
+    border        : 1px solid #F2F2F2;
+    display       : block;
+    margin        : 20px 0;
+    }
+
+.icon-emoticon {
+    font-family             : 'emoticons';
+    speak                   : none;
+    font-style              : normal;
+    font-weight             : normal;
+    font-variant            : normal;
+    text-transform          : none;
+    line-height             : 1;
+    display                 : inline-block;
+    vertical-align          : middle;
+    /* Better Font Rendering =========== */
+    -webkit-font-smoothing  : antialiased;
+    -moz-osx-font-smoothing : grayscale;
+    }
+
+.emoticon {
+    text-indent    : -9999px;
+    display        : inline-block;
+    height         : 22px;
+    width          : 22px;
+    vertical-align : middle;
+    }
+
+@media all and (-webkit-min-device-pixel-ratio : 1), all and (min--moz-device-pixel-ratio : 1), all and (-o-min-device-pixel-ratio : 1), all and (min-device-pixel-ratio : 1), all and (min-resolution : 96dpi) {
+    .emoticon {
+        background : transparent url(../images/emojis.png) 0 0 no-repeat;
+        }
+    }
+
+@media all and (-webkit-min-device-pixel-ratio : 1.5), all and (-o-min-device-pixel-ratio : 3/2), all and (min-device-pixel-ratio : 1.5), all and (min-resolution : 144dpi) {
+    .emoticon {
+        background      : transparent url(../images/[email-masked]) 0 0 no-repeat;
+        background-size : 27776px 22px;
+        }
+    }
+
+@-moz-document url-prefix() {
+    .emoticon {
+        background : transparent url(../images/emojis.png) 0 0 no-repeat;
+        }
+    }
+
+.emoticon-bowtie {
+    background-position : -5px 0;
+    }
+
+.emoticon-smile {
+    background-position : -37px 0;
+    }
+
+.emoticon-laughing {
+    background-position : -69px 0;
+    }
+
+.emoticon-blush {
+    background-position : -101px 0;
+    }
+
+.emoticon-smiley {
+    background-position : -133px 0;
+    }
+
+.emoticon-relaxed {
+    background-position : -165px 0;
+    }
+
+.emoticon-smirk {
+    background-position : -197px 0;
+    }
+
+.emoticon-heart_eyes {
+    background-position : -229px 0;
+    }
+
+.emoticon-kissing_heart {
+    background-position : -261px 0;
+    }
+
+.emoticon-kissing_closed_eyes {
+    background-position : -293px 0;
+    }
+
+.emoticon-flushed {
+    background-position : -325px 0;
+    }
+
+.emoticon-relieved {
+    background-position : -357px 0;
+    }
+
+.emoticon-satisfied {
+    background-position : -389px 0;
+    }
+
+.emoticon-grin {
+    background-position : -421px 0;
+    }
+
+.emoticon-wink {
+    background-position : -453px 0;
+    }
+
+.emoticon-stuck_out_tongue_winking_eye {
+    background-position : -485px 0;
+    }
+
+.emoticon-winky_face {
+    background-position : -485px 0;
+    }
+
+.emoticon-stuck_out_tongue_closed_eyes {
+    background-position : -517px 0;
+    }
+
+.emoticon-grinning {
+    background-position : -549px 0;
+    }
+
+.emoticon-kissing {
+    background-position : -581px 0;
+    }
+
+.emoticon-kissing_smiling_eyes {
+    background-position : -613px 0;
+    }
+
+.emoticon-stuck_out_tongue {
+    background-position : -645px 0;
+    }
+
+.emoticon-sleeping {
+    background-position : -677px 0;
+    }
+
+.emoticon-worried {
+    background-position : -709px 0;
+    }
+
+.emoticon-frowning {
+    background-position : -741px 0;
+    }
+
+.emoticon-anguished {
+    background-position : -773px 0;
+    }
+
+.emoticon-open_mouth {
+    background-position : -805px 0;
+    }
+
+.emoticon-wow {
+    background-position : -805px 0;
+    }
+
+.emoticon-grimacing {
+    background-position : -837px 0;
+    }
+
+.emoticon-confused {
+    background-position : -869px 0;
+    }
+
+.emoticon-hushed {
+    background-position : -901px 0;
+    }
+
+.emoticon-expressionless {
+    background-position : -933px 0;
+    }
+
+.emoticon-unamused {
+    background-position : -965px 0;
+    }
+
+.emoticon-sweat_smile {
+    background-position : -997px 0;
+    }
+
+.emoticon-sweat {
+    background-position : -1029px 0;
+    }
+
+.emoticon-disappointed_relieved {
+    background-position : -1061px 0;
+    }
+
+.emoticon-weary {
+    background-position : -1093px 0;
+    }
+
+.emoticon-pensive {
+    background-position : -1125px 0;
+    }
+
+.emoticon-disappointed {
+    background-position : -1157px 0;
+    }
+
+.emoticon-confounded {
+    background-position : -1189px 0;
+    }
+
+.emoticon-fearful {
+    background-position : -1221px 0;
+    }
+
+.emoticon-cold_sweat {
+    background-position : -1253px 0;
+    }
+
+.emoticon-persevere {
+    background-position : -1285px 0;
+    }
+
+.emoticon-cry {
+    background-position : -1317px 0;
+    }
+
+.emoticon-sob {
+    background-position : -1349px 0;
+    }
+
+.emoticon-joy {
+    background-position : -1381px 0;
+    }
+
+.emoticon-astonished {
+    background-position : -1413px 0;
+    }
+
+.emoticon-scream {
+    background-position : -1445px 0;
+    }
+
+.emoticon-neckbeard {
+    background-position : -1477px 0;
+    }
+
+.emoticon-tired_face {
+    background-position : -1509px 0;
+    }
+
+.emoticon-angry {
+    background-position : -1541px 0;
+    }
+
+.emoticon-rage {
+    background-position : -1573px 0;
+    }
+
+.emoticon-triumph {
+    background-position : -1605px 0;
+    }
+
+.emoticon-sleepy {
+    background-position : -1637px 0;
+    }
+
+.emoticon-yum {
+    background-position : -1669px 0;
+    }
+
+.emoticon-mask {
+    background-position : -1701px 0;
+    }
+
+.emoticon-sunglasses {
+    background-position : -1733px 0;
+    }
+
+.emoticon-dizzy_face {
+    background-position : -1765px 0;
+    }
+
+.emoticon-imp {
+    background-position : -1797px 0;
+    }
+
+.emoticon-smiling_imp {
+    background-position : -1829px 0;
+    }
+
+.emoticon-neutral_face {
+    background-position : -1861px 0;
+    }
+
+.emoticon-no_mouth {
+    background-position : -1893px 0;
+    }
+
+.emoticon-innocent {
+    background-position : -1925px 0;
+    }
+
+.emoticon-alien {
+    background-position : -1957px 0;
+    }
+
+.emoticon-yellow_heart {
+    background-position : -1989px 0;
+    }
+
+.emoticon-blue_heart {
+    background-position : -2021px 0;
+    }
+
+.emoticon-purple_heart {
+    background-position : -2053px 0;
+    }
+
+.emoticon-heart {
+    background-position : -2085px 0;
+    }
+
+.emoticon-green_heart {
+    background-position : -2117px 0;
+    }
+
+.emoticon-broken_heart {
+    background-position : -2149px 0;
+    }
+
+.emoticon-heartbeat {
+    background-position : -2181px 0;
+    }
+
+.emoticon-heartpulse {
+    background-position : -2213px 0;
+    }
+
+.emoticon-two_hearts {
+    background-position : -2245px 0;
+    }
+
+.emoticon-revolving_hearts {
+    background-position : -2277px 0;
+    }
+
+.emoticon-cupid {
+    background-position : -2309px 0;
+    }
+
+.emoticon-sparkling_heart {
+    background-position : -2341px 0;
+    }
+
+.emoticon-sparkles {
+    background-position : -2373px 0;
+    }
+
+.emoticon-star {
+    background-position : -2405px 0;
+    }
+
+.emoticon-star2 {
+    background-position : -2437px 0;
+    }
+
+.emoticon-dizzy {
+    background-position : -2469px 0;
+    }
+
+.emoticon-boom {
+    background-position : -2501px 0;
+    }
+
+.emoticon-collision {
+    background-position : -2533px 0;
+    }
+
+.emoticon-anger {
+    background-position : -2565px 0;
+    }
+
+.emoticon-exclamation {
+    background-position : -2597px 0;
+    }
+
+.emoticon-question {
+    background-position : -2629px 0;
+    }
+
+.emoticon-grey_exclamation {
+    background-position : -2661px 0;
+    }
+
+.emoticon-grey_question {
+    background-position : -2693px 0;
+    }
+
+.emoticon-zzz {
+    background-position : -2725px 0;
+    }
+
+.emoticon-dash {
+    background-position : -2757px 0;
+    }
+
+.emoticon-sweat_drops {
+    background-position : -2789px 0;
+    }
+
+.emoticon-notes {
+    background-position : -2821px 0;
+    }
+
+.emoticon-musical_note {
+    background-position : -2853px 0;
+    }
+
+.emoticon-fire {
+    background-position : -2885px 0;
+    }
+
+.emoticon-hankey {
+    background-position : -2917px 0;
+    }
+
+.emoticon-poop {
+    background-position : -2949px 0;
+    }
+
+.emoticon-shit {
+    background-position : -2981px 0;
+    }
+
+.emoticon-\+1 {
+    background-position : -3013px 0;
+    }
+
+.emoticon-thumbsup {
+    background-position : -3045px 0;
+    }
+
+.emoticon-\-1 {
+    background-position : -3077px 0;
+    }
+
+.emoticon-thumbsdown {
+    background-position : -3109px 0;
+    }
+
+.emoticon-ok_hand {
+    background-position : -3141px 0;
+    }
+
+.emoticon-punch {
+    background-position : -3173px 0;
+    }
+
+.emoticon-facepunch {
+    background-position : -3205px 0;
+    }
+
+.emoticon-fist {
+    background-position : -3237px 0;
+    }
+
+.emoticon-v {
+    background-position : -3269px 0;
+    }
+
+.emoticon-wave {
+    background-position : -3301px 0;
+    }
+
+.emoticon-hand {
+    background-position : -3333px 0;
+    }
+
+.emoticon-raised_hand {
+    background-position : -3365px 0;
+    }
+
+.emoticon-open_hands {
+    background-position : -3397px 0;
+    }
+
+.emoticon-point_up {
+    background-position : -3429px 0;
+    }
+
+.emoticon-point_down {
+    background-position : -3461px 0;
+    }
+
+.emoticon-point_left {
+    background-position : -3493px 0;
+    }
+
+.emoticon-point_right {
+    background-position : -3525px 0;
+    }
+
+.emoticon-raised_hands {
+    background-position : -3557px 0;
+    }
+
+.emoticon-pray {
+    background-position : -3589px 0;
+    }
+
+.emoticon-point_up_2 {
+    background-position : -3621px 0;
+    }
+
+.emoticon-clap {
+    background-position : -3653px 0;
+    }
+
+.emoticon-muscle {
+    background-position : -3685px 0;
+    }
+
+.emoticon-metal {
+    background-position : -3717px 0;
+    }
+
+.emoticon-fu {
+    background-position : -3749px 0;
+    }
+
+.emoticon-walking {
+    background-position : -3781px 0;
+    }
+
+.emoticon-runner {
+    background-position : -3813px 0;
+    }
+
+.emoticon-running {
+    background-position : -3845px 0;
+    }
+
+.emoticon-couple {
+    background-position : -3877px 0;
+    }
+
+.emoticon-family {
+    background-position : -3909px 0;
+    }
+
+.emoticon-two_men_holding_hands {
+    background-position : -3941px 0;
+    }
+
+.emoticon-two_women_holding_hands {
+    background-position : -3973px 0;
+    }
+
+.emoticon-dancer {
+    background-position : -4005px 0;
+    }
+
+.emoticon-dancers {
+    background-position : -4037px 0;
+    }
+
+.emoticon-ok_woman {
+    background-position : -4069px 0;
+    }
+
+.emoticon-no_good {
+    background-position : -4101px 0;
+    }
+
+.emoticon-information_desk_person {
+    background-position : -4133px 0;
+    }
+
+.emoticon-raising_hand {
+    background-position : -4165px 0;
+    }
+
+.emoticon-bride_with_veil {
+    background-position : -4197px 0;
+    }
+
+.emoticon-person_with_pouting_face {
+    background-position : -4229px 0;
+    }
+
+.emoticon-person_frowning {
+    background-position : -4261px 0;
+    }
+
+.emoticon-bow {
+    background-position : -4293px 0;
+    }
+
+.emoticon-couplekiss {
+    background-position : -4325px 0;
+    }
+
+.emoticon-couple_with_heart {
+    background-position : -4357px 0;
+    }
+
+.emoticon-massage {
+    background-position : -4389px 0;
+    }
+
+.emoticon-haircut {
+    background-position : -4421px 0;
+    }
+
+.emoticon-nail_care {
+    background-position : -4453px 0;
+    }
+
+.emoticon-boy {
+    background-position : -4485px 0;
+    }
+
+.emoticon-girl {
+    background-position : -4517px 0;
+    }
+
+.emoticon-woman {
+    background-position : -4549px 0;
+    }
+
+.emoticon-man {
+    background-position : -4581px 0;
+    }
+
+.emoticon-baby {
+    background-position : -4613px 0;
+    }
+
+.emoticon-older_woman {
+    background-position : -4645px 0;
+    }
+
+.emoticon-older_man {
+    background-position : -4677px 0;
+    }
+
+.emoticon-person_with_blond_hair {
+    background-position : -4709px 0;
+    }
+
+.emoticon-man_with_gua_pi_mao {
+    background-position : -4741px 0;
+    }
+
+.emoticon-man_with_turban {
+    background-position : -4773px 0;
+    }
+
+.emoticon-construction_worker {
+    background-position : -4805px 0;
+    }
+
+.emoticon-cop {
+    background-position : -4837px 0;
+    }
+
+.emoticon-angel {
+    background-position : -4869px 0;
+    }
+
+.emoticon-princess {
+    background-position : -4901px 0;
+    }
+
+.emoticon-emoticon_cat {
+    background-position : -4933px 0;
+    }
+
+.emoticon-smile_cat {
+    background-position : -4965px 0;
+    }
+
+.emoticon-heart_eyes_cat {
+    background-position : -4997px 0;
+    }
+
+.emoticon-kissing_cat {
+    background-position : -5029px 0;
+    }
+
+.emoticon-smirk_cat {
+    background-position : -5061px 0;
+    }
+
+.emoticon-scream_cat {
+    background-position : -5093px 0;
+    }
+
+.emoticon-crying_cat_face {
+    background-position : -5125px 0;
+    }
+
+.emoticon-joy_cat {
+    background-position : -5157px 0;
+    }
+
+.emoticon-pouting_cat {
+    background-position : -5189px 0;
+    }
+
+.emoticon-japanese_ogre {
+    background-position : -5221px 0;
+    }
+
+.emoticon-japanese_goblin {
+    background-position : -5253px 0;
+    }
+
+.emoticon-see_no_evil {
+    background-position : -5285px 0;
+    }
+
+.emoticon-hear_no_evil {
+    background-position : -5317px 0;
+    }
+
+.emoticon-speak_no_evil {
+    background-position : -5349px 0;
+    }
+
+.emoticon-guardsman {
+    background-position : -5381px 0;
+    }
+
+.emoticon-skull {
+    background-position : -5413px 0;
+    }
+
+.emoticon-feet {
+    background-position : -5445px 0;
+    }
+
+.emoticon-lips {
+    background-position : -5477px 0;
+    }
+
+.emoticon-kiss {
+    background-position : -5509px 0;
+    }
+
+.emoticon-droplet {
+    background-position : -5541px 0;
+    }
+
+.emoticon-ear {
+    background-position : -5573px 0;
+    }
+
+.emoticon-eyes {
+    background-position : -5605px 0;
+    }
+
+.emoticon-nose {
+    background-position : -5637px 0;
+    }
+
+.emoticon-tongue {
+    background-position : -5669px 0;
+    }
+
+.emoticon-love_letter {
+    background-position : -5701px 0;
+    }
+
+.emoticon-bust_in_silhouette {
+    background-position : -5733px 0;
+    }
+
+.emoticon-busts_in_silhouette {
+    background-position : -5765px 0;
+    }
+
+.emoticon-speech_balloon {
+    background-position : -5797px 0;
+    }
+
+.emoticon-thought_balloon {
+    background-position : -5829px 0;
+    }
+
+.emoticon-feelsgood {
+    background-position : -5861px 0;
+    }
+
+.emoticon-finnadie {
+    background-position : -5893px 0;
+    }
+
+.emoticon-goberserk {
+    background-position : -5925px 0;
+    }
+
+.emoticon-godmode {
+    background-position : -5957px 0;
+    }
+
+.emoticon-hurtrealbad {
+    background-position : -5989px 0;
+    }
+
+.emoticon-rage1 {
+    background-position : -6021px 0;
+    }
+
+.emoticon-rage2 {
+    background-position : -6053px 0;
+    }
+
+.emoticon-rage3 {
+    background-position : -6085px 0;
+    }
+
+.emoticon-rage4 {
+    background-position : -6117px 0;
+    }
+
+.emoticon-suspect {
+    background-position : -6149px 0;
+    }
+
+.emoticon-trollface {
+    background-position : -6181px 0;
+    }
+
+.emoticon-sunny {
+    background-position : -6213px 0;
+    }
+
+.emoticon-umbrella {
+    background-position : -6245px 0;
+    }
+
+.emoticon-cloud {
+    background-position : -6277px 0;
+    }
+
+.emoticon-snowflake {
+    background-position : -6309px 0;
+    }
+
+.emoticon-snowman {
+    background-position : -6341px 0;
+    }
+
+.emoticon-zap {
+    background-position : -6373px 0;
+    }
+
+.emoticon-cyclone {
+    background-position : -6405px 0;
+    }
+
+.emoticon-foggy {
+    background-position : -6437px 0;
+    }
+
+.emoticon-ocean {
+    background-position : -6469px 0;
+    }
+
+.emoticon-cat {
+    background-position : -6501px 0;
+    }
+
+.emoticon-dog {
+    background-position : -6533px 0;
+    }
+
+.emoticon-mouse {
+    background-position : -6565px 0;
+    }
+
+.emoticon-hamster {
+    background-position : -6597px 0;
+    }
+
+.emoticon-rabbit {
+    background-position : -6629px 0;
+    }
+
+.emoticon-wolf {
+    background-position : -6661px 0;
+    }
+
+.emoticon-frog {
+    background-position : -6693px 0;
+    }
+
+.emoticon-tiger {
+    background-position : -6725px 0;
+    }
+
+.emoticon-koala {
+    background-position : -6757px 0;
+    }
+
+.emoticon-bear {
+    background-position : -6789px 0;
+    }
+
+.emoticon-pig {
+    background-position : -6821px 0;
+    }
+
+.emoticon-pig_nose {
+    background-position : -6853px 0;
+    }
+
+.emoticon-cow {
+    background-position : -6885px 0;
+    }
+
+.emoticon-boar {
+    background-position : -6917px 0;
+    }
+
+.emoticon-monkey_face {
+    background-position : -6949px 0;
+    }
+
+.emoticon-monkey {
+    background-position : -6981px 0;
+    }
+
+.emoticon-horse {
+    background-position : -7013px 0;
+    }
+
+.emoticon-racehorse {
+    background-position : -7045px 0;
+    }
+
+.emoticon-camel {
+    background-position : -7077px 0;
+    }
+
+.emoticon-sheep {
+    background-position : -7109px 0;
+    }
+
+.emoticon-elephant {
+    background-position : -7141px 0;
+    }
+
+.emoticon-panda_face {
+    background-position : -7173px 0;
+    }
+
+.emoticon-snake {
+    background-position : -7205px 0;
+    }
+
+.emoticon-bird {
+    background-position : -7237px 0;
+    }
+
+.emoticon-baby_chick {
+    background-position : -7269px 0;
+    }
+
+.emoticon-hatched_chick {
+    background-position : -7301px 0;
+    }
+
+.emoticon-hatching_chick {
+    background-position : -7333px 0;
+    }
+
+.emoticon-chicken {
+    background-position : -7365px 0;
+    }
+
+.emoticon-penguin {
+    background-position : -7397px 0;
+    }
+
+.emoticon-turtle {
+    background-position : -7429px 0;
+    }
+
+.emoticon-bug {
+    background-position : -7461px 0;
+    }
+
+.emoticon-honeybee {
+    background-position : -7493px 0;
+    }
+
+.emoticon-ant {
+    background-position : -7525px 0;
+    }
+
+.emoticon-beetle {
+    background-position : -7557px 0;
+    }
+
+.emoticon-snail {
+    background-position : -7589px 0;
+    }
+
+.emoticon-octopus {
+    background-position : -7621px 0;
+    }
+
+.emoticon-tropical_fish {
+    background-position : -7653px 0;
+    }
+
+.emoticon-fish {
+    background-position : -7685px 0;
+    }
+
+.emoticon-whale {
+    background-position : -7717px 0;
+    }
+
+.emoticon-whale2 {
+    background-position : -7749px 0;
+    }
+
+.emoticon-dolphin {
+    background-position : -7781px 0;
+    }
+
+.emoticon-cow2 {
+    background-position : -7813px 0;
+    }
+
+.emoticon-ram {
+    background-position : -7845px 0;
+    }
+
+.emoticon-rat {
+    background-position : -7877px 0;
+    }
+
+.emoticon-water_buffalo {
+    background-position : -7909px 0;
+    }
+
+.emoticon-tiger2 {
+    background-position : -7941px 0;
+    }
+
+.emoticon-rabbit2 {
+    background-position : -7973px 0;
+    }
+
+.emoticon-dragon {
+    background-position : -8005px 0;
+    }
+
+.emoticon-goat {
+    background-position : -8037px 0;
+    }
+
+.emoticon-rooster {
+    background-position : -8069px 0;
+    }
+
+.emoticon-dog2 {
+    background-position : -8101px 0;
+    }
+
+.emoticon-pig2 {
+    background-position : -8133px 0;
+    }
+
+.emoticon-mouse2 {
+    background-position : -8165px 0;
+    }
+
+.emoticon-ox {
+    background-position : -8197px 0;
+    }
+
+.emoticon-dragon_face {
+    background-position : -8229px 0;
+    }
+
+.emoticon-blowfish {
+    background-position : -8261px 0;
+    }
+
+.emoticon-crocodile {
+    background-position : -8293px 0;
+    }
+
+.emoticon-dromedary_camel {
+    background-position : -8325px 0;
+    }
+
+.emoticon-leopard {
+    background-position : -8357px 0;
+    }
+
+.emoticon-cat2 {
+    background-position : -8389px 0;
+    }
+
+.emoticon-poodle {
+    background-position : -8421px 0;
+    }
+
+.emoticon-paw_prints {
+    background-position : -8453px 0;
+    }
+
+.emoticon-bouquet {
+    background-position : -8485px 0;
+    }
+
+.emoticon-cherry_blossom {
+    background-position : -8517px 0;
+    }
+
+.emoticon-tulip {
+    background-position : -8549px 0;
+    }
+
+.emoticon-four_leaf_clover {
+    background-position : -8581px 0;
+    }
+
+.emoticon-rose {
+    background-position : -8613px 0;
+    }
+
+.emoticon-sunflower {
+    background-position : -8645px 0;
+    }
+
+.emoticon-hibiscus {
+    background-position : -8677px 0;
+    }
+
+.emoticon-maple_leaf {
+    background-position : -8709px 0;
+    }
+
+.emoticon-leaves {
+    background-position : -8741px 0;
+    }
+
+.emoticon-fallen_leaf {
+    background-position : -8773px 0;
+    }
+
+.emoticon-herb {
+    background-position : -8805px 0;
+    }
+
+.emoticon-mushroom {
+    background-position : -8837px 0;
+    }
+
+.emoticon-cactus {
+    background-position : -8869px 0;
+    }
+
+.emoticon-palm_tree {
+    background-position : -8901px 0;
+    }
+
+.emoticon-evergreen_tree {
+    background-position : -8933px 0;
+    }
+
+.emoticon-deciduous_tree {
+    background-position : -8965px 0;
+    }
+
+.emoticon-chestnut {
+    background-position : -8997px 0;
+    }
+
+.emoticon-seedling {
+    background-position : -9029px 0;
+    }
+
+.emoticon-blossom {
+    background-position : -9061px 0;
+    }
+
+.emoticon-ear_of_rice {
+    background-position : -9093px 0;
+    }
+
+.emoticon-shell {
+    background-position : -9125px 0;
+    }
+
+.emoticon-globe_with_meridians {
+    background-position : -9157px 0;
+    }
+
+.emoticon-sun_with_face {
+    background-position : -9189px 0;
+    }
+
+.emoticon-full_moon_with_face {
+    background-position : -9221px 0;
+    }
+
+.emoticon-new_moon_with_face {
+    background-position : -9253px 0;
+    }
+
+.emoticon-new_moon {
+    background-position : -9285px 0;
+    }
+
+.emoticon-waxing_crescent_moon {
+    background-position : -9317px 0;
+    }
+
+.emoticon-first_quarter_moon {
+    background-position : -9349px 0;
+    }
+
+.emoticon-waxing_gibbous_moon {
+    background-position : -9381px 0;
+    }
+
+.emoticon-full_moon {
+    background-position : -9413px 0;
+    }
+
+.emoticon-waning_gibbous_moon {
+    background-position : -9445px 0;
+    }
+
+.emoticon-last_quarter_moon {
+    background-position : -9477px 0;
+    }
+
+.emoticon-waning_crescent_moon {
+    background-position : -9509px 0;
+    }
+
+.emoticon-last_quarter_moon_with_face {
+    background-position : -9541px 0;
+    }
+
+.emoticon-first_quarter_moon_with_face {
+    background-position : -9573px 0;
+    }
+
+.emoticon-moon {
+    background-position : -9605px 0;
+    }
+
+.emoticon-earth_africa {
+    background-position : -9637px 0;
+    }
+
+.emoticon-earth_americas {
+    background-position : -9669px 0;
+    }
+
+.emoticon-earth_asia {
+    background-position : -9701px 0;
+    }
+
+.emoticon-volcano {
+    background-position : -9733px 0;
+    }
+
+.emoticon-milky_way {
+    background-position : -9765px 0;
+    }
+
+.emoticon-partly_sunny {
+    background-position : -9797px 0;
+    }
+
+.emoticon-octocat {
+    background-position : -9829px 0;
+    }
+
+.emoticon-squirrel {
+    background-position : -9861px 0;
+    }
+
+.emoticon-bamboo {
+    background-position : -9893px 0;
+    }
+
+.emoticon-gift_heart {
+    background-position : -9925px 0;
+    }
+
+.emoticon-dolls {
+    background-position : -9957px 0;
+    }
+
+.emoticon-school_satchel {
+    background-position : -9989px 0;
+    }
+
+.emoticon-mortar_board {
+    background-position : -10021px 0;
+    }
+
+.emoticon-flags {
+    background-position : -10053px 0;
+    }
+
+.emoticon-fireworks {
+    background-position : -10085px 0;
+    }
+
+.emoticon-sparkler {
+    background-position : -10117px 0;
+    }
+
+.emoticon-wind_chime {
+    background-position : -10149px 0;
+    }
+
+.emoticon-rice_scene {
+    background-position : -10181px 0;
+    }
+
+.emoticon-jack_o_lantern {
+    background-position : -10213px 0;
+    }
+
+.emoticon-ghost {
+    background-position : -10245px 0;
+    }
+
+.emoticon-santa {
+    background-position : -10277px 0;
+    }
+
+.emoticon-christmas_tree {
+    background-position : -10309px 0;
+    }
+
+.emoticon-gift {
+    background-position : -10341px 0;
+    }
+
+.emoticon-bell {
+    background-position : -10373px 0;
+    }
+
+.emoticon-no_bell {
+    background-position : -10405px 0;
+    }
+
+.emoticon-tanabata_tree {
+    background-position : -10437px 0;
+    }
+
+.emoticon-tada {
+    background-position : -10469px 0;
+    }
+
+.emoticon-confetti_ball {
+    background-position : -10501px 0;
+    }
+
+.emoticon-balloon {
+    background-position : -10533px 0;
+    }
+
+.emoticon-crystal_ball {
+    background-position : -10565px 0;
+    }
+
+.emoticon-cd {
+    background-position : -10597px 0;
+    }
+
+.emoticon-dvd {
+    background-position : -10629px 0;
+    }
+
+.emoticon-floppy_disk {
+    background-position : -10661px 0;
+    }
+
+.emoticon-camera {
+    background-position : -10693px 0;
+    }
+
+.emoticon-video_camera {
+    background-position : -10725px 0;
+    }
+
+.emoticon-movie_camera {
+    background-position : -10757px 0;
+    }
+
+.emoticon-computer {
+    background-position : -10789px 0;
+    }
+
+.emoticon-tv {
+    background-position : -10821px 0;
+    }
+
+.emoticon-iphone {
+    background-position : -10853px 0;
+    }
+
+.emoticon-phone {
+    background-position : -10885px 0;
+    }
+
+.emoticon-telephone {
+    background-position : -10917px 0;
+    }
+
+.emoticon-telephone_receiver {
+    background-position : -10949px 0;
+    }
+
+.emoticon-pager {
+    background-position : -10981px 0;
+    }
+
+.emoticon-fax {
+    background-position : -11013px 0;
+    }
+
+.emoticon-minidisc {
+    background-position : -11045px 0;
+    }
+
+.emoticon-vhs {
+    background-position : -11077px 0;
+    }
+
+.emoticon-sound {
+    background-position : -11109px 0;
+    }
+
+.emoticon-speaker {
+    background-position : -11141px 0;
+    }
+
+.emoticon-mute {
+    background-position : -11173px 0;
+    }
+
+.emoticon-loudspeaker {
+    background-position : -11205px 0;
+    }
+
+.emoticon-mega {
+    background-position : -11237px 0;
+    }
+
+.emoticon-hourglass {
+    background-position : -11269px 0;
+    }
+
+.emoticon-hourglass_flowing_sand {
+    background-position : -11301px 0;
+    }
+
+.emoticon-alarm_clock {
+    background-position : -11333px 0;
+    }
+
+.emoticon-watch {
+    background-position : -11365px 0;
+    }
+
+.emoticon-radio {
+    background-position : -11397px 0;
+    }
+
+.emoticon-satellite {
+    background-position : -11429px 0;
+    }
+
+.emoticon-loop {
+    background-position : -11461px 0;
+    }
+
+.emoticon-mag {
+    background-position : -11493px 0;
+    }
+
+.emoticon-mag_right {
+    background-position : -11525px 0;
+    }
+
+.emoticon-unlock {
+    background-position : -11557px 0;
+    }
+
+.emoticon-lock {
+    background-position : -11589px 0;
+    }
+
+.emoticon-lock_with_ink_pen {
+    background-position : -11621px 0;
+    }
+
+.emoticon-closed_lock_with_key {
+    background-position : -11653px 0;
+    }
+
+.emoticon-key {
+    background-position : -11685px 0;
+    }
+
+.emoticon-bulb {
+    background-position : -11717px 0;
+    }
+
+.emoticon-flashlight {
+    background-position : -11749px 0;
+    }
+
+.emoticon-high_brightness {
+    background-position : -11781px 0;
+    }
+
+.emoticon-low_brightness {
+    background-position : -11813px 0;
+    }
+
+.emoticon-electric_plug {
+    background-position : -11845px 0;
+    }
+
+.emoticon-battery {
+    background-position : -11877px 0;
+    }
+
+.emoticon-calling {
+    background-position : -11909px 0;
+    }
+
+.emoticon-email {
+    background-position : -11941px 0;
+    }
+
+.emoticon-mailbox {
+    background-position : -11973px 0;
+    }
+
+.emoticon-postbox {
+    background-position : -12005px 0;
+    }
+
+.emoticon-bath {
+    background-position : -12037px 0;
+    }
+
+.emoticon-bathtub {
+    background-position : -12069px 0;
+    }
+
+.emoticon-shower {
+    background-position : -12101px 0;
+    }
+
+.emoticon-toilet {
+    background-position : -12133px 0;
+    }
+
+.emoticon-wrench {
+    background-position : -12165px 0;
+    }
+
+.emoticon-nut_and_bolt {
+    background-position : -12197px 0;
+    }
+
+.emoticon-hammer {
+    background-position : -12229px 0;
+    }
+
+.emoticon-seat {
+    background-position : -12261px 0;
+    }
+
+.emoticon-moneybag {
+    background-position : -12293px 0;
+    }
+
+.emoticon-yen {
+    background-position : -12325px 0;
+    }
+
+.emoticon-dollar {
+    background-position : -12357px 0;
+    }
+
+.emoticon-pound {
+    background-position : -12389px 0;
+    }
+
+.emoticon-euro {
+    background-position : -12421px 0;
+    }
+
+.emoticon-credit_card {
+    background-position : -12453px 0;
+    }
+
+.emoticon-money_with_wings {
+    background-position : -12485px 0;
+    }
+
+.emoticon-e\-mail {
+    background-position : -12517px 0;
+    }
+
+.emoticon-inbox_tray {
+    background-position : -12549px 0;
+    }
+
+.emoticon-outbox_tray {
+    background-position : -12581px 0;
+    }
+
+.emoticon-envelope {
+    background-position : -12613px 0;
+    }
+
+.emoticon-incoming_envelope {
+    background-position : -12645px 0;
+    }
+
+.emoticon-postal_horn {
+    background-position : -12677px 0;
+    }
+
+.emoticon-mailbox_closed {
+    background-position : -12709px 0;
+    }
+
+.emoticon-mailbox_with_mail {
+    background-position : -12741px 0;
+    }
+
+.emoticon-mailbox_with_no_mail {
+    background-position : -12773px 0;
+    }
+
+.emoticon-door {
+    background-position : -12805px 0;
+    }
+
+.emoticon-smoking {
+    background-position : -12837px 0;
+    }
+
+.emoticon-bomb {
+    background-position : -12869px 0;
+    }
+
+.emoticon-gun {
+    background-position : -12901px 0;
+    }
+
+.emoticon-hocho {
+    background-position : -12933px 0;
+    }
+
+.emoticon-pill {
+    background-position : -12965px 0;
+    }
+
+.emoticon-syringe {
+    background-position : -12997px 0;
+    }
+
+.emoticon-page_facing_up {
+    background-position : -13029px 0;
+    }
+
+.emoticon-page_with_curl {
+    background-position : -13061px 0;
+    }
+
+.emoticon-bookmark_tabs {
+    background-position : -13093px 0;
+    }
+
+.emoticon-bar_chart {
+    background-position : -13125px 0;
+    }
+
+.emoticon-chart_with_upwards_trend {
+    background-position : -13157px 0;
+    }
+
+.emoticon-chart_with_downwards_trend {
+    background-position : -13189px 0;
+    }
+
+.emoticon-scroll {
+    background-position : -13221px 0;
+    }
+
+.emoticon-clipboard {
+    background-position : -13253px 0;
+    }
+
+.emoticon-calendar {
+    background-position : -13285px 0;
+    }
+
+.emoticon-date {
+    background-position : -13317px 0;
+    }
+
+.emoticon-card_index {
+    background-position : -13349px 0;
+    }
+
+.emoticon-file_folder {
+    background-position : -13381px 0;
+    }
+
+.emoticon-open_file_folder {
+    background-position : -13413px 0;
+    }
+
+.emoticon-scissors {
+    background-position : -13445px 0;
+    }
+
+.emoticon-pushpin {
+    background-position : -13477px 0;
+    }
+
+.emoticon-paperclip {
+    background-position : -13509px 0;
+    }
+
+.emoticon-black_nib {
+    background-position : -13541px 0;
+    }
+
+.emoticon-pencil2 {
+    background-position : -13573px 0;
+    }
+
+.emoticon-straight_ruler {
+    background-position : -13605px 0;
+    }
+
+.emoticon-triangular_ruler {
+    background-position : -13637px 0;
+    }
+
+.emoticon-closed_book {
+    background-position : -13669px 0;
+    }
+
+.emoticon-green_book {
+    background-position : -13701px 0;
+    }
+
+.emoticon-blue_book {
+    background-position : -13733px 0;
+    }
+
+.emoticon-orange_book {
+    background-position : -13765px 0;
+    }
+
+.emoticon-notebook {
+    background-position : -13797px 0;
+    }
+
+.emoticon-notebook_with_decorative_cover {
+    background-position : -13829px 0;
+    }
+
+.emoticon-ledger {
+    background-position : -13861px 0;
+    }
+
+.emoticon-books {
+    background-position : -13893px 0;
+    }
+
+.emoticon-bookmark {
+    background-position : -13925px 0;
+    }
+
+.emoticon-name_badge {
+    background-position : -13957px 0;
+    }
+
+.emoticon-microscope {
+    background-position : -13989px 0;
+    }
+
+.emoticon-telescope {
+    background-position : -14021px 0;
+    }
+
+.emoticon-newspaper {
+    background-position : -14053px 0;
+    }
+
+.emoticon-football {
+    background-position : -14085px 0;
+    }
+
+.emoticon-basketball {
+    background-position : -14117px 0;
+    }
+
+.emoticon-soccer {
+    background-position : -14149px 0;
+    }
+
+.emoticon-baseball {
+    background-position : -14181px 0;
+    }
+
+.emoticon-tennis {
+    background-position : -14213px 0;
+    }
+
+.emoticon-8ball {
+    background-position : -14245px 0;
+    }
+
+.emoticon-rugby_football {
+    background-position : -14277px 0;
+    }
+
+.emoticon-bowling {
+    background-position : -14309px 0;
+    }
+
+.emoticon-golf {
+    background-position : -14341px 0;
+    }
+
+.emoticon-mountain_bicyclist {
+    background-position : -14373px 0;
+    }
+
+.emoticon-bicyclist {
+    background-position : -14405px 0;
+    }
+
+.emoticon-horse_racing {
+    background-position : -14437px 0;
+    }
+
+.emoticon-snowboarder {
+    background-position : -14469px 0;
+    }
+
+.emoticon-swimmer {
+    background-position : -14501px 0;
+    }
+
+.emoticon-surfer {
+    background-position : -14533px 0;
+    }
+
+.emoticon-ski {
+    background-position : -14565px 0;
+    }
+
+.emoticon-spades {
+    background-position : -14597px 0;
+    }
+
+.emoticon-hearts {
+    background-position : -14629px 0;
+    }
+
+.emoticon-clubs {
+    background-position : -14661px 0;
+    }
+
+.emoticon-diamonds {
+    background-position : -14693px 0;
+    }
+
+.emoticon-gem {
+    background-position : -14725px 0;
+    }
+
+.emoticon-ring {
+    background-position : -14757px 0;
+    }
+
+.emoticon-trophy {
+    background-position : -14789px 0;
+    }
+
+.emoticon-musical_score {
+    background-position : -14821px 0;
+    }
+
+.emoticon-musical_keyboard {
+    background-position : -14853px 0;
+    }
+
+.emoticon-violin {
+    background-position : -14885px 0;
+    }
+
+.emoticon-space_invader {
+    background-position : -14917px 0;
+    }
+
+.emoticon-video_game {
+    background-position : -14949px 0;
+    }
+
+.emoticon-black_joker {
+    background-position : -14981px 0;
+    }
+
+.emoticon-flower_playing_cards {
+    background-position : -15013px 0;
+    }
+
+.emoticon-game_die {
+    background-position : -15045px 0;
+    }
+
+.emoticon-dart {
+    background-position : -15077px 0;
+    }
+
+.emoticon-mahjong {
+    background-position : -15109px 0;
+    }
+
+.emoticon-clapper {
+    background-position : -15141px 0;
+    }
+
+.emoticon-memo {
+    background-position : -15173px 0;
+    }
+
+.emoticon-pencil {
+    background-position : -15205px 0;
+    }
+
+.emoticon-book {
+    background-position : -15237px 0;
+    }
+
+.emoticon-art {
+    background-position : -15269px 0;
+    }
+
+.emoticon-microphone {
+    background-position : -15301px 0;
+    }
+
+.emoticon-headphones {
+    background-position : -15333px 0;
+    }
+
+.emoticon-trumpet {
+    background-position : -15365px 0;
+    }
+
+.emoticon-saxophone {
+    background-position : -15397px 0;
+    }
+
+.emoticon-guitar {
+    background-position : -15429px 0;
+    }
+
+.emoticon-shoe {
+    background-position : -15461px 0;
+    }
+
+.emoticon-sandal {
+    background-position : -15493px 0;
+    }
+
+.emoticon-high_heel {
+    background-position : -15525px 0;
+    }
+
+.emoticon-lipstick {
+    background-position : -15557px 0;
+    }
+
+.emoticon-boot {
+    background-position : -15589px 0;
+    }
+
+.emoticon-shirt {
+    background-position : -15621px 0;
+    }
+
+.emoticon-tshirt {
+    background-position : -15653px 0;
+    }
+
+.emoticon-necktie {
+    background-position : -15685px 0;
+    }
+
+.emoticon-womans_clothes {
+    background-position : -15717px 0;
+    }
+
+.emoticon-dress {
+    background-position : -15749px 0;
+    }
+
+.emoticon-running_shirt_with_sash {
+    background-position : -15781px 0;
+    }
+
+.emoticon-jeans {
+    background-position : -15813px 0;
+    }
+
+.emoticon-kimono {
+    background-position : -15845px 0;
+    }
+
+.emoticon-bikini {
+    background-position : -15877px 0;
+    }
+
+.emoticon-ribbon {
+    background-position : -15909px 0;
+    }
+
+.emoticon-tophat {
+    background-position : -15941px 0;
+    }
+
+.emoticon-crown {
+    background-position : -15973px 0;
+    }
+
+.emoticon-womans_hat {
+    background-position : -16005px 0;
+    }
+
+.emoticon-mans_shoe {
+    background-position : -16037px 0;
+    }
+
+.emoticon-closed_umbrella {
+    background-position : -16069px 0;
+    }
+
+.emoticon-briefcase {
+    background-position : -16101px 0;
+    }
+
+.emoticon-handbag {
+    background-position : -16133px 0;
+    }
+
+.emoticon-pouch {
+    background-position : -16165px 0;
+    }
+
+.emoticon-purse {
+    background-position : -16197px 0;
+    }
+
+.emoticon-eyeglasses {
+    background-position : -16229px 0;
+    }
+
+.emoticon-fishing_pole_and_fish {
+    background-position : -16261px 0;
+    }
+
+.emoticon-coffee {
+    background-position : -16293px 0;
+    }
+
+.emoticon-tea {
+    background-position : -16325px 0;
+    }
+
+.emoticon-sake {
+    background-position : -16357px 0;
+    }
+
+.emoticon-baby_bottle {
+    background-position : -16389px 0;
+    }
+
+.emoticon-beer {
+    background-position : -16421px 0;
+    }
+
+.emoticon-beers {
+    background-position : -16453px 0;
+    }
+
+.emoticon-cocktail {
+    background-position : -16485px 0;
+    }
+
+.emoticon-tropical_drink {
+    background-position : -16517px 0;
+    }
+
+.emoticon-wine_glass {
+    background-position : -16549px 0;
+    }
+
+.emoticon-fork_and_knife {
+    background-position : -16581px 0;
+    }
+
+.emoticon-pizza {
+    background-position : -16613px 0;
+    }
+
+.emoticon-hamburger {
+    background-position : -16645px 0;
+    }
+
+.emoticon-fries {
+    background-position : -16677px 0;
+    }
+
+.emoticon-poultry_leg {
+    background-position : -16709px 0;
+    }
+
+.emoticon-meat_on_bone {
+    background-position : -16741px 0;
+    }
+
+.emoticon-spaghetti {
+    background-position : -16773px 0;
+    }
+
+.emoticon-curry {
+    background-position : -16805px 0;
+    }
+
+.emoticon-fried_shrimp {
+    background-position : -16837px 0;
+    }
+
+.emoticon-bento {
+    background-position : -16869px 0;
+    }
+
+.emoticon-sushi {
+    background-position : -16901px 0;
+    }
+
+.emoticon-fish_cake {
+    background-position : -16933px 0;
+    }
+
+.emoticon-rice_ball {
+    background-position : -16965px 0;
+    }
+
+.emoticon-rice_cracker {
+    background-position : -16997px 0;
+    }
+
+.emoticon-rice {
+    background-position : -17029px 0;
+    }
+
+.emoticon-ramen {
+    background-position : -17061px 0;
+    }
+
+.emoticon-stew {
+    background-position : -17093px 0;
+    }
+
+.emoticon-oden {
+    background-position : -17125px 0;
+    }
+
+.emoticon-dango {
+    background-position : -17157px 0;
+    }
+
+.emoticon-egg {
+    background-position : -17189px 0;
+    }
+
+.emoticon-bread {
+    background-position : -17221px 0;
+    }
+
+.emoticon-doughnut {
+    background-position : -17253px 0;
+    }
+
+.emoticon-custard {
+    background-position : -17285px 0;
+    }
+
+.emoticon-icecream {
+    background-position : -17317px 0;
+    }
+
+.emoticon-ice_cream {
+    background-position : -17349px 0;
+    }
+
+.emoticon-shaved_ice {
+    background-position : -17381px 0;
+    }
+
+.emoticon-birthday {
+    background-position : -17413px 0;
+    }
+
+.emoticon-cake {
+    background-position : -17445px 0;
+    }
+
+.emoticon-cookie {
+    background-position : -17477px 0;
+    }
+
+.emoticon-chocolate_bar {
+    background-position : -17509px 0;
+    }
+
+.emoticon-candy {
+    background-position : -17541px 0;
+    }
+
+.emoticon-lollipop {
+    background-position : -17573px 0;
+    }
+
+.emoticon-honey_pot {
+    background-position : -17605px 0;
+    }
+
+.emoticon-apple {
+    background-position : -17637px 0;
+    }
+
+.emoticon-green_apple {
+    background-position : -17669px 0;
+    }
+
+.emoticon-tangerine {
+    background-position : -17701px 0;
+    }
+
+.emoticon-lemon {
+    background-position : -17733px 0;
+    }
+
+.emoticon-cherries {
+    background-position : -17765px 0;
+    }
+
+.emoticon-grapes {
+    background-position : -17797px 0;
+    }
+
+.emoticon-watermelon {
+    background-position : -17829px 0;
+    }
+
+.emoticon-strawberry {
+    background-position : -17861px 0;
+    }
+
+.emoticon-peach {
+    background-position : -17893px 0;
+    }
+
+.emoticon-melon {
+    background-position : -17925px 0;
+    }
+
+.emoticon-banana {
+    background-position : -17957px 0;
+    }
+
+.emoticon-pear {
+    background-position : -17989px 0;
+    }
+
+.emoticon-pineapple {
+    background-position : -18021px 0;
+    }
+
+.emoticon-sweet_potato {
+    background-position : -18053px 0;
+    }
+
+.emoticon-eggplant {
+    background-position : -18085px 0;
+    }
+
+.emoticon-tomato {
+    background-position : -18117px 0;
+    }
+
+.emoticon-corn {
+    background-position : -18149px 0;
+    }
+
+.emoticon-house {
+    background-position : -18181px 0;
+    }
+
+.emoticon-house_with_garden {
+    background-position : -18213px 0;
+    }
+
+.emoticon-school {
+    background-position : -18245px 0;
+    }
+
+.emoticon-office {
+    background-position : -18277px 0;
+    }
+
+.emoticon-post_office {
+    background-position : -18309px 0;
+    }
+
+.emoticon-hospital {
+    background-position : -18341px 0;
+    }
+
+.emoticon-bank {
+    background-position : -18373px 0;
+    }
+
+.emoticon-convenience_store {
+    background-position : -18405px 0;
+    }
+
+.emoticon-love_hotel {
+    background-position : -18437px 0;
+    }
+
+.emoticon-hotel {
+    background-position : -18469px 0;
+    }
+
+.emoticon-wedding {
+    background-position : -18501px 0;
+    }
+
+.emoticon-church {
+    background-position : -18533px 0;
+    }
+
+.emoticon-department_store {
+    background-position : -18565px 0;
+    }
+
+.emoticon-european_post_office {
+    background-position : -18597px 0;
+    }
+
+.emoticon-city_sunrise {
+    background-position : -18629px 0;
+    }
+
+.emoticon-city_sunset {
+    background-position : -18661px 0;
+    }
+
+.emoticon-japanese_castle {
+    background-position : -18693px 0;
+    }
+
+.emoticon-european_castle {
+    background-position : -18725px 0;
+    }
+
+.emoticon-tent {
+    background-position : -18757px 0;
+    }
+
+.emoticon-factory {
+    background-position : -18789px 0;
+    }
+
+.emoticon-tokyo_tower {
+    background-position : -18821px 0;
+    }
+
+.emoticon-japan {
+    background-position : -18853px 0;
+    }
+
+.emoticon-mount_fuji {
+    background-position : -18885px 0;
+    }
+
+.emoticon-sunrise_over_mountains {
+    background-position : -18917px 0;
+    }
+
+.emoticon-sunrise {
+    background-position : -18949px 0;
+    }
+
+.emoticon-stars {
+    background-position : -18981px 0;
+    }
+
+.emoticon-themoreyouknow {
+    background-position : -18981px 0;
+    }
+
+.emoticon-tmyk {
+    background-position : -18981px 0;
+    }
+
+.emoticon-statue_of_liberty {
+    background-position : -19013px 0;
+    }
+
+.emoticon-bridge_at_night {
+    background-position : -19045px 0;
+    }
+
+.emoticon-carousel_horse {
+    background-position : -19077px 0;
+    }
+
+.emoticon-rainbow {
+    background-position : -19109px 0;
+    }
+
+.emoticon-ferris_wheel {
+    background-position : -19141px 0;
+    }
+
+.emoticon-fountain {
+    background-position : -19173px 0;
+    }
+
+.emoticon-roller_coaster {
+    background-position : -19205px 0;
+    }
+
+.emoticon-ship {
+    background-position : -19237px 0;
+    }
+
+.emoticon-speedboat {
+    background-position : -19269px 0;
+    }
+
+.emoticon-boat {
+    background-position : -19301px 0;
+    }
+
+.emoticon-sailboat {
+    background-position : -19333px 0;
+    }
+
+.emoticon-rowboat {
+    background-position : -19365px 0;
+    }
+
+.emoticon-anchor {
+    background-position : -19397px 0;
+    }
+
+.emoticon-rocket {
+    background-position : -19429px 0;
+    }
+
+.emoticon-airplane {
+    background-position : -19461px 0;
+    }
+
+.emoticon-helicopter {
+    background-position : -19493px 0;
+    }
+
+.emoticon-steam_locomotive {
+    background-position : -19525px 0;
+    }
+
+.emoticon-tram {
+    background-position : -19557px 0;
+    }
+
+.emoticon-mountain_railway {
+    background-position : -19589px 0;
+    }
+
+.emoticon-bike {
+    background-position : -19621px 0;
+    }
+
+.emoticon-aerial_tramway {
+    background-position : -19653px 0;
+    }
+
+.emoticon-suspension_railway {
+    background-position : -19685px 0;
+    }
+
+.emoticon-mountain_cableway {
+    background-position : -19717px 0;
+    }
+
+.emoticon-tractor {
+    background-position : -19749px 0;
+    }
+
+.emoticon-blue_car {
+    background-position : -19781px 0;
+    }
+
+.emoticon-oncoming_automobile {
+    background-position : -19813px 0;
+    }
+
+.emoticon-car {
+    background-position : -19845px 0;
+    }
+
+.emoticon-red_car {
+    background-position : -19877px 0;
+    }
+
+.emoticon-taxi {
+    background-position : -19909px 0;
+    }
+
+.emoticon-oncoming_taxi {
+    background-position : -19941px 0;
+    }
+
+.emoticon-articulated_lorry {
+    background-position : -19973px 0;
+    }
+
+.emoticon-bus {
+    background-position : -20005px 0;
+    }
+
+.emoticon-oncoming_bus {
+    background-position : -20037px 0;
+    }
+
+.emoticon-rotating_light {
+    background-position : -20069px 0;
+    }
+
+.emoticon-police_car {
+    background-position : -20101px 0;
+    }
+
+.emoticon-oncoming_police_car {
+    background-position : -20133px 0;
+    }
+
+.emoticon-fire_engine {
+    background-position : -20165px 0;
+    }
+
+.emoticon-ambulance {
+    background-position : -20197px 0;
+    }
+
+.emoticon-minibus {
+    background-position : -20229px 0;
+    }
+
+.emoticon-truck {
+    background-position : -20261px 0;
+    }
+
+.emoticon-train {
+    background-position : -20293px 0;
+    }
+
+.emoticon-station {
+    background-position : -20325px 0;
+    }
+
+.emoticon-train2 {
+    background-position : -20357px 0;
+    }
+
+.emoticon-bullettrain_front {
+    background-position : -20389px 0;
+    }
+
+.emoticon-bullettrain_side {
+    background-position : -20421px 0;
+    }
+
+.emoticon-light_rail {
+    background-position : -20453px 0;
+    }
+
+.emoticon-monorail {
+    background-position : -20485px 0;
+    }
+
+.emoticon-railway_car {
+    background-position : -20517px 0;
+    }
+
+.emoticon-trolleybus {
+    background-position : -20549px 0;
+    }
+
+.emoticon-ticket {
+    background-position : -20581px 0;
+    }
+
+.emoticon-fuelpump {
+    background-position : -20613px 0;
+    }
+
+.emoticon-vertical_traffic_light {
+    background-position : -20645px 0;
+    }
+
+.emoticon-traffic_light {
+    background-position : -20677px 0;
+    }
+
+.emoticon-warning {
+    background-position : -20709px 0;
+    }
+
+.emoticon-construction {
+    background-position : -20741px 0;
+    }
+
+.emoticon-beginner {
+    background-position : -20773px 0;
+    }
+
+.emoticon-atm {
+    background-position : -20805px 0;
+    }
+
+.emoticon-slot_machine {
+    background-position : -20837px 0;
+    }
+
+.emoticon-busstop {
+    background-position : -20869px 0;
+    }
+
+.emoticon-barber {
+    background-position : -20901px 0;
+    }
+
+.emoticon-hotsprings {
+    background-position : -20933px 0;
+    }
+
+.emoticon-checkered_flag {
+    background-position : -20965px 0;
+    }
+
+.emoticon-crossed_flags {
+    background-position : -20997px 0;
+    }
+
+.emoticon-izakaya_lantern {
+    background-position : -21029px 0;
+    }
+
+.emoticon-moyai {
+    background-position : -21061px 0;
+    }
+
+.emoticon-circus_tent {
+    background-position : -21093px 0;
+    }
+
+.emoticon-performing_arts {
+    background-position : -21125px 0;
+    }
+
+.emoticon-round_pushpin {
+    background-position : -21157px 0;
+    }
+
+.emoticon-triangular_flag_on_post {
+    background-position : -21189px 0;
+    }
+
+.emoticon-jp {
+    background-position : -21221px 0;
+    }
+
+.emoticon-kr {
+    background-position : -21253px 0;
+    }
+
+.emoticon-cn {
+    background-position : -21285px 0;
+    }
+
+.emoticon-us {
+    background-position : -21317px 0;
+    }
+
+.emoticon-fr {
+    background-position : -21349px 0;
+    }
+
+.emoticon-es {
+    background-position : -21381px 0;
+    }
+
+.emoticon-it {
+    background-position : -21413px 0;
+    }
+
+.emoticon-ru {
+    background-position : -21445px 0;
+    }
+
+.emoticon-gb {
+    background-position : -21477px 0;
+    }
+
+.emoticon-uk {
+    background-position : -21509px 0;
+    }
+
+.emoticon-de {
+    background-position : -21541px 0;
+    }
+
+.emoticon-one {
+    background-position : -21573px 0;
+    }
+
+.emoticon-two {
+    background-position : -21605px 0;
+    }
+
+.emoticon-three {
+    background-position : -21637px 0;
+    }
+
+.emoticon-four {
+    background-position : -21669px 0;
+    }
+
+.emoticon-five {
+    background-position : -21701px 0;
+    }
+
+.emoticon-six {
+    background-position : -21733px 0;
+    }
+
+.emoticon-seven {
+    background-position : -21765px 0;
+    }
+
+.emoticon-eight {
+    background-position : -21797px 0;
+    }
+
+.emoticon-nine {
+    background-position : -21829px 0;
+    }
+
+.emoticon-keycap_ten {
+    background-position : -21861px 0;
+    }
+
+.emoticon-1234 {
+    background-position : -21893px 0;
+    }
+
+.emoticon-zero {
+    background-position : -21925px 0;
+    }
+
+.emoticon-hash {
+    background-position : -21957px 0;
+    }
+
+.emoticon-symbols {
+    background-position : -21989px 0;
+    }
+
+.emoticon-arrow_backward {
+    background-position : -22021px 0;
+    }
+
+.emoticon-arrow_down {
+    background-position : -22053px 0;
+    }
+
+.emoticon-arrow_forward {
+    background-position : -22085px 0;
+    }
+
+.emoticon-arrow_left {
+    background-position : -22117px 0;
+    }
+
+.emoticon-capital_abcd {
+    background-position : -22149px 0;
+    }
+
+.emoticon-abcd {
+    background-position : -22181px 0;
+    }
+
+.emoticon-abc {
+    background-position : -22213px 0;
+    }
+
+.emoticon-arrow_lower_left {
+    background-position : -22245px 0;
+    }
+
+.emoticon-arrow_lower_right {
+    background-position : -22277px 0;
+    }
+
+.emoticon-arrow_right {
+    background-position : -22309px 0;
+    }
+
+.emoticon-arrow_up {
+    background-position : -22341px 0;
+    }
+
+.emoticon-arrow_upper_left {
+    background-position : -22373px 0;
+    }
+
+.emoticon-arrow_upper_right {
+    background-position : -22405px 0;
+    }
+
+.emoticon-arrow_double_down {
+    background-position : -22437px 0;
+    }
+
+.emoticon-arrow_double_up {
+    background-position : -22469px 0;
+    }
+
+.emoticon-arrow_down_small {
+    background-position : -22501px 0;
+    }
+
+.emoticon-arrow_heading_down {
+    background-position : -22533px 0;
+    }
+
+.emoticon-arrow_heading_up {
+    background-position : -22565px 0;
+    }
+
+.emoticon-leftwards_arrow_with_hook {
+    background-position : -22597px 0;
+    }
+
+.emoticon-arrow_right_hook {
+    background-position : -22629px 0;
+    }
+
+.emoticon-left_right_arrow {
+    background-position : -22661px 0;
+    }
+
+.emoticon-arrow_up_down {
+    background-position : -22693px 0;
+    }
+
+.emoticon-arrow_up_small {
+    background-position : -22725px 0;
+    }
+
+.emoticon-arrows_clockwise {
+    background-position : -22757px 0;
+    }
+
+.emoticon-arrows_counterclockwise {
+    background-position : -22789px 0;
+    }
+
+.emoticon-rewind {
+    background-position : -22821px 0;
+    }
+
+.emoticon-fast_forward {
+    background-position : -22853px 0;
+    }
+
+.emoticon-information_source {
+    background-position : -22885px 0;
+    }
+
+.emoticon-ok {
+    background-position : -22917px 0;
+    }
+
+.emoticon-twisted_rightwards_arrows {
+    background-position : -22949px 0;
+    }
+
+.emoticon-repeat {
+    background-position : -22981px 0;
+    }
+
+.emoticon-repeat_one {
+    background-position : -23013px 0;
+    }
+
+.emoticon-new {
+    background-position : -23045px 0;
+    }
+
+.emoticon-top {
+    background-position : -23077px 0;
+    }
+
+.emoticon-up {
+    background-position : -23109px 0;
+    }
+
+.emoticon-cool {
+    background-position : -23141px 0;
+    }
+
+.emoticon-free {
+    background-position : -23173px 0;
+    }
+
+.emoticon-ng {
+    background-position : -23205px 0;
+    }
+
+.emoticon-cinema {
+    background-position : -23237px 0;
+    }
+
+.emoticon-koko {
+    background-position : -23269px 0;
+    }
+
+.emoticon-signal_strength {
+    background-position : -23301px 0;
+    }
+
+.emoticon-u5272 {
+    background-position : -23333px 0;
+    }
+
+.emoticon-u5408 {
+    background-position : -23365px 0;
+    }
+
+.emoticon-u55b6 {
+    background-position : -23397px 0;
+    }
+
+.emoticon-u6307 {
+    background-position : -23429px 0;
+    }
+
+.emoticon-u6708 {
+    background-position : -23461px 0;
+    }
+
+.emoticon-u6709 {
+    background-position : -23493px 0;
+    }
+
+.emoticon-u6e80 {
+    background-position : -23525px 0;
+    }
+
+.emoticon-u7121 {
+    background-position : -23557px 0;
+    }
+
+.emoticon-u7533 {
+    background-position : -23589px 0;
+    }
+
+.emoticon-u7a7a {
+    background-position : -23621px 0;
+    }
+
+.emoticon-u7981 {
+    background-position : -23653px 0;
+    }
+
+.emoticon-sa {
+    background-position : -23685px 0;
+    }
+
+.emoticon-restroom {
+    background-position : -23717px 0;
+    }
+
+.emoticon-mens {
+    background-position : -23749px 0;
+    }
+
+.emoticon-womens {
+    background-position : -23781px 0;
+    }
+
+.emoticon-baby_symbol {
+    background-position : -23813px 0;
+    }
+
+.emoticon-no_smoking {
+    background-position : -23845px 0;
+    }
+
+.emoticon-parking {
+    background-position : -23877px 0;
+    }
+
+.emoticon-wheelchair {
+    background-position : -23909px 0;
+    }
+
+.emoticon-metro {
+    background-position : -23941px 0;
+    }
+
+.emoticon-baggage_claim {
+    background-position : -23973px 0;
+    }
+
+.emoticon-accept {
+    background-position : -24005px 0;
+    }
+
+.emoticon-wc {
+    background-position : -24037px 0;
+    }
+
+.emoticon-potable_water {
+    background-position : -24069px 0;
+    }
+
+.emoticon-put_litter_in_its_place {
+    background-position : -24101px 0;
+    }
+
+.emoticon-secret {
+    background-position : -24133px 0;
+    }
+
+.emoticon-congratulations {
+    background-position : -24165px 0;
+    }
+
+.emoticon-m {
+    background-position : -24197px 0;
+    }
+
+.emoticon-passport_control {
+    background-position : -24229px 0;
+    }
+
+.emoticon-left_luggage {
+    background-position : -24261px 0;
+    }
+
+.emoticon-customs {
+    background-position : -24293px 0;
+    }
+
+.emoticon-ideograph_advantage {
+    background-position : -24325px 0;
+    }
+
+.emoticon-cl {
+    background-position : -24357px 0;
+    }
+
+.emoticon-sos {
+    background-position : -24389px 0;
+    }
+
+.emoticon-id {
+    background-position : -24421px 0;
+    }
+
+.emoticon-no_entry_sign {
+    background-position : -24453px 0;
+    }
+
+.emoticon-underage {
+    background-position : -24485px 0;
+    }
+
+.emoticon-no_mobile_phones {
+    background-position : -24517px 0;
+    }
+
+.emoticon-do_not_litter {
+    background-position : -24549px 0;
+    }
+
+.emoticon-non\-potable_water {
+    background-position : -24581px 0;
+    }
+
+.emoticon-no_bicycles {
+    background-position : -24613px 0;
+    }
+
+.emoticon-no_pedestrians {
+    background-position : -24645px 0;
+    }
+
+.emoticon-children_crossing {
+    background-position : -24677px 0;
+    }
+
+.emoticon-no_entry {
+    background-position : -24709px 0;
+    }
+
+.emoticon-eight_spoked_asterisk {
+    background-position : -24741px 0;
+    }
+
+.emoticon-eight_pointed_black_star {
+    background-position : -24773px 0;
+    }
+
+.emoticon-heart_decoration {
+    background-position : -24805px 0;
+    }
+
+.emoticon-vs {
+    background-position : -24837px 0;
+    }
+
+.emoticon-vibration_mode {
+    background-position : -24869px 0;
+    }
+
+.emoticon-mobile_phone_off {
+    background-position : -24901px 0;
+    }
+
+.emoticon-chart {
+    background-position : -24933px 0;
+    }
+
+.emoticon-currency_exchange {
+    background-position : -24965px 0;
+    }
+
+.emoticon-aries {
+    background-position : -24997px 0;
+    }
+
+.emoticon-taurus {
+    background-position : -25029px 0;
+    }
+
+.emoticon-gemini {
+    background-position : -25061px 0;
+    }
+
+.emoticon-cancer {
+    background-position : -25093px 0;
+    }
+
+.emoticon-leo {
+    background-position : -25125px 0;
+    }
+
+.emoticon-virgo {
+    background-position : -25157px 0;
+    }
+
+.emoticon-libra {
+    background-position : -25189px 0;
+    }
+
+.emoticon-scorpius {
+    background-position : -25221px 0;
+    }
+
+.emoticon-sagittarius {
+    background-position : -25253px 0;
+    }
+
+.emoticon-capricorn {
+    background-position : -25285px 0;
+    }
+
+.emoticon-aquarius {
+    background-position : -25317px 0;
+    }
+
+.emoticon-pisces {
+    background-position : -25349px 0;
+    }
+
+.emoticon-ophiuchus {
+    background-position : -25381px 0;
+    }
+
+.emoticon-six_pointed_star {
+    background-position : -25413px 0;
+    }
+
+.emoticon-negative_squared_cross_mark {
+    background-position : -25445px 0;
+    }
+
+.emoticon-a {
+    background-position : -25477px 0;
+    }
+
+.emoticon-b {
+    background-position : -25509px 0;
+    }
+
+.emoticon-ab {
+    background-position : -25541px 0;
+    }
+
+.emoticon-o2 {
+    background-position : -25573px 0;
+    }
+
+.emoticon-diamond_shape_with_a_dot_inside {
+    background-position : -25605px 0;
+    }
+
+.emoticon-recycle {
+    background-position : -25637px 0;
+    }
+
+.emoticon-end {
+    background-position : -25669px 0;
+    }
+
+.emoticon-on {
+    background-position : -25701px 0;
+    }
+
+.emoticon-soon {
+    background-position : -25733px 0;
+    }
+
+.emoticon-clock1 {
+    background-position : -25765px 0;
+    }
+
+.emoticon-clock130 {
+    background-position : -25797px 0;
+    }
+
+.emoticon-clock10 {
+    background-position : -25829px 0;
+    }
+
+.emoticon-clock1030 {
+    background-position : -25861px 0;
+    }
+
+.emoticon-clock11 {
+    background-position : -25893px 0;
+    }
+
+.emoticon-clock1130 {
+    background-position : -25925px 0;
+    }
+
+.emoticon-clock12 {
+    background-position : -25957px 0;
+    }
+
+.emoticon-clock1230 {
+    background-position : -25989px 0;
+    }
+
+.emoticon-clock2 {
+    background-position : -26021px 0;
+    }
+
+.emoticon-clock230 {
+    background-position : -26053px 0;
+    }
+
+.emoticon-clock3 {
+    background-position : -26085px 0;
+    }
+
+.emoticon-clock330 {
+    background-position : -26117px 0;
+    }
+
+.emoticon-clock4 {
+    background-position : -26149px 0;
+    }
+
+.emoticon-clock430 {
+    background-position : -26181px 0;
+    }
+
+.emoticon-clock5 {
+    background-position : -26213px 0;
+    }
+
+.emoticon-clock530 {
+    background-position : -26245px 0;
+    }
+
+.emoticon-clock6 {
+    background-position : -26277px 0;
+    }
+
+.emoticon-clock630 {
+    background-position : -26309px 0;
+    }
+
+.emoticon-clock7 {
+    background-position : -26341px 0;
+    }
+
+.emoticon-clock730 {
+    background-position : -26373px 0;
+    }
+
+.emoticon-clock8 {
+    background-position : -26405px 0;
+    }
+
+.emoticon-clock830 {
+    background-position : -26437px 0;
+    }
+
+.emoticon-clock9 {
+    background-position : -26469px 0;
+    }
+
+.emoticon-clock930 {
+    background-position : -26501px 0;
+    }
+
+.emoticon-heavy_dollar_sign {
+    background-position : -26533px 0;
+    }
+
+.emoticon-copyright {
+    background-position : -26565px 0;
+    }
+
+.emoticon-registered {
+    background-position : -26597px 0;
+    }
+
+.emoticon-tm {
+    background-position : -26629px 0;
+    }
+
+.emoticon-x {
+    background-position : -26661px 0;
+    }
+
+.emoticon-heavy_exclamation_mark {
+    background-position : -26693px 0;
+    }
+
+.emoticon-bangbang {
+    background-position : -26725px 0;
+    }
+
+.emoticon-interrobang {
+    background-position : -26757px 0;
+    }
+
+.emoticon-o {
+    background-position : -26789px 0;
+    }
+
+.emoticon-heavy_multiplication_x {
+    background-position : -26821px 0;
+    }
+
+.emoticon-heavy_plus_sign {
+    background-position : -26853px 0;
+    }
+
+.emoticon-heavy_minus_sign {
+    background-position : -26885px 0;
+    }
+
+.emoticon-heavy_division_sign {
+    background-position : -26917px 0;
+    }
+
+.emoticon-white_flower {
+    background-position : -26949px 0;
+    }
+
+.emoticon-100 {
+    background-position : -26981px 0;
+    }
+
+.emoticon-heavy_check_mark {
+    background-position : -27013px 0;
+    }
+
+.emoticon-ballot_box_with_check {
+    background-position : -27045px 0;
+    }
+
+.emoticon-radio_button {
+    background-position : -27077px 0;
+    }
+
+.emoticon-link {
+    background-position : -27109px 0;
+    }
+
+.emoticon-curly_loop {
+    background-position : -27141px 0;
+    }
+
+.emoticon-wavy_dash {
+    background-position : -27173px 0;
+    }
+
+.emoticon-part_alternation_mark {
+    background-position : -27205px 0;
+    }
+
+.emoticon-trident {
+    background-position : -27237px 0;
+    }
+
+.emoticon-black_large_square {
+    background-position : -27269px 0;
+    }
+
+.emoticon-white_large_square {
+    background-position : -27301px 0;
+    }
+
+.emoticon-white_check_mark {
+    background-position : -27333px 0;
+    }
+
+.emoticon-black_square {
+    background-position : -27268px 0;
+    }
+
+.emoticon-white_square {
+    background-position : -27301px 0;
+    }
+
+.emoticon-black_square_button {
+    background-position : -27365px 0;
+    }
+
+.emoticon-white_square_button {
+    background-position : -27397px 0;
+    }
+
+.emoticon-black_circle {
+    background-position : -27429px 0;
+    }
+
+.emoticon-white_circle {
+    background-position : -27461px 0;
+    }
+
+.emoticon-red_circle {
+    background-position : -27493px 0;
+    }
+
+.emoticon-large_blue_circle {
+    background-position : -27525px 0;
+    }
+
+.emoticon-large_blue_diamond {
+    background-position : -27557px 0;
+    }
+
+.emoticon-large_orange_diamond {
+    background-position : -27589px 0;
+    }
+
+.emoticon-small_blue_diamond {
+    background-position : -27621px 0;
+    }
+
+.emoticon-small_orange_diamond {
+    background-position : -27653px 0;
+    }
+
+.emoticon-small_red_triangle {
+    background-position : -27685px 0;
+    }
+
+.emoticon-small_red_triangle_down {
+    background-position : -27717px 0;
+    }
+
+.emoticon-shipit {
+    background-position : -27749px 0;
+    }
+
+
diff --git a/public/bower_components/ng-emoticons/ng-emoticons.js b/public/bower_components/ng-emoticons/ng-emoticons.js
new file mode 100644
index 0000000..1277784
--- /dev/null
+++ b/public/bower_components/ng-emoticons/ng-emoticons.js
@@ -0,0 +1,547 @@
+(function () {
+
+    'use strict';
+
+    angular.module('ngEmoticons', ['ngSanitize'])
+        .filter('emoticons', ['$sce', function ($sce) {
+            var icons=[{text:":)","class":"smiley",code:"e60a"},{text:":D","class":"happy",code:"e608"},{text:":d","class":"happy",code:"e608"},{text:":(","class":"sad",code:"e60e"},{text:":/","class":"wondering",code:"e620"},{text:":P","class":"tongue",code:"e60c"},{text:":p","class":"tongue",code:"e60c"},{text:"3:)","class":"evil",code:"e618"},{text:"(^)","class":"thumbsup2",code:"e607"},{text:";)","class":"wink",code:"e610"},{text:":o","class":"shocked",code:"e61a"},{text:"-_-","class":"neutral",code:"e61e"},{text:"(y)","class":"thumbs-up",code:"e606"},{text:":*","class":"heart",code:"e604"},{text:"&lt;3","class":"heart",code:"e604"},{text:"<3","class":"heart",code:"e604"},{text:"&lt;/3","class":"heart-broken",code:"e605"},{text:"</3","class":"heart-broken",code:"e605"},{text:"^_^","class":"grin",code:"e612"},{text:"8-)","class":"cool",code:"e614"},{text:"8|","class":"cool",code:"e614"},{text:":S","class":"confused",code:"e61c"},{text:":s","class":"confused",code:"e61c"}];
+
+            var emojiList=["bowtie","smile","laughing","blush","smiley","relaxed","smirk","heart_eyes","kissing_heart","kissing_closed_eyes","flushed","relieved","satisfied","grin","wink","stuck_out_tongue_winking_eye","stuck_out_tongue_closed_eyes","grinning","kissing","winky_face","kissing_smiling_eyes","stuck_out_tongue","sleeping","worried","frowning","anguished","open_mouth","grimacing","confused","hushed","expressionless","unamused","sweat_smile","sweat","wow","disappointed_relieved","weary","pensive","disappointed","confounded","fearful","cold_sweat","persevere","cry","sob","joy","astonished","scream","neckbeard","tired_face","angry","rage","triumph","sleepy","yum","mask","sunglasses","dizzy_face","imp","smiling_imp","neutral_face","no_mouth","innocent","alien","yellow_heart","blue_heart","purple_heart","heart","green_heart","broken_heart","heartbeat","heartpulse","two_hearts","revolving_hearts","cupid","sparkling_heart","sparkles","star","star2","dizzy","boom","collision","anger","exclamation","question","grey_exclamation","grey_question","zzz","dash","sweat_drops","notes","musical_note","fire","hankey","poop","shit","\\+1","thumbsup","-1","thumbsdown","ok_hand","punch","facepunch","fist","v","wave","hand","raised_hand","open_hands","point_up","point_down","point_left","point_right","raised_hands","pray","point_up_2","clap","muscle","metal","fu","walking","runner","running","couple","family","two_men_holding_hands","two_women_holding_hands","dancer","dancers","ok_woman","no_good","information_desk_person","raising_hand","bride_with_veil","person_with_pouting_face","person_frowning","bow","couplekiss","couple_with_heart","massage","haircut","nail_care","boy","girl","woman","man","baby","older_woman","older_man","person_with_blond_hair","man_with_gua_pi_mao","man_with_turban","construction_worker","cop","angel","princess","smiley_cat","smile_cat","heart_eyes_cat","kissing_cat","smirk_cat","scream_cat","crying_cat_face","joy_cat","pouting_cat","japanese_ogre","japanese_goblin","see_no_evil","hear_no_evil","speak_no_evil","guardsman","skull","feet","lips","kiss","droplet","ear","eyes","nose","tongue","love_letter","bust_in_silhouette","busts_in_silhouette","speech_balloon","thought_balloon","feelsgood","finnadie","goberserk","godmode","hurtrealbad","rage1","rage2","rage3","rage4","suspect","trollface","sunny","umbrella","cloud","snowflake","snowman","zap","cyclone","foggy","ocean","cat","dog","mouse","hamster","rabbit","wolf","frog","tiger","koala","bear","pig","pig_nose","cow","boar","monkey_face","monkey","horse","racehorse","camel","sheep","elephant","panda_face","snake","bird","baby_chick","hatched_chick","hatching_chick","chicken","penguin","turtle","bug","honeybee","ant","beetle","snail","octopus","tropical_fish","fish","whale","whale2","dolphin","cow2","ram","rat","water_buffalo","tiger2","rabbit2","dragon","goat","rooster","dog2","pig2","mouse2","ox","dragon_face","blowfish","crocodile","dromedary_camel","leopard","cat2","poodle","paw_prints","bouquet","cherry_blossom","tulip","four_leaf_clover","rose","sunflower","hibiscus","maple_leaf","leaves","fallen_leaf","herb","mushroom","cactus","palm_tree","evergreen_tree","deciduous_tree","chestnut","seedling","blossom","ear_of_rice","shell","globe_with_meridians","sun_with_face","full_moon_with_face","new_moon_with_face","new_moon","waxing_crescent_moon","first_quarter_moon","waxing_gibbous_moon","full_moon","waning_gibbous_moon","last_quarter_moon","waning_crescent_moon","last_quarter_moon_with_face","first_quarter_moon_with_face","moon","earth_africa","earth_americas","earth_asia","volcano","milky_way","partly_sunny","octocat","squirrel","bamboo","gift_heart","dolls","school_satchel","mortar_board","flags","fireworks","sparkler","wind_chime","rice_scene","jack_o_lantern","ghost","santa","christmas_tree","gift","bell","no_bell","tanabata_tree","tada","confetti_ball","balloon","crystal_ball","cd","dvd","floppy_disk","camera","video_camera","movie_camera","computer","tv","iphone","phone","telephone","telephone_receiver","pager","fax","minidisc","vhs","sound","speaker","mute","loudspeaker","mega","hourglass","hourglass_flowing_sand","alarm_clock","watch","radio","satellite","loop","mag","mag_right","unlock","lock","lock_with_ink_pen","closed_lock_with_key","key","bulb","flashlight","high_brightness","low_brightness","electric_plug","battery","calling","email","mailbox","postbox","bath","bathtub","shower","toilet","wrench","nut_and_bolt","hammer","seat","moneybag","yen","dollar","pound","euro","credit_card","money_with_wings","e-mail","inbox_tray","outbox_tray","envelope","incoming_envelope","postal_horn","mailbox_closed","mailbox_with_mail","mailbox_with_no_mail","door","smoking","bomb","gun","hocho","pill","syringe","page_facing_up","page_with_curl","bookmark_tabs","bar_chart","chart_with_upwards_trend","chart_with_downwards_trend","scroll","clipboard","calendar","date","card_index","file_folder","open_file_folder","scissors","pushpin","paperclip","black_nib","pencil2","straight_ruler","triangular_ruler","closed_book","green_book","blue_book","orange_book","notebook","notebook_with_decorative_cover","ledger","books","bookmark","name_badge","microscope","telescope","newspaper","football","basketball","soccer","baseball","tennis","8ball","rugby_football","bowling","golf","mountain_bicyclist","bicyclist","horse_racing","snowboarder","swimmer","surfer","ski","spades","hearts","clubs","diamonds","gem","ring","trophy","musical_score","musical_keyboard","violin","space_invader","video_game","black_joker","flower_playing_cards","game_die","dart","mahjong","clapper","memo","pencil","book","art","microphone","headphones","trumpet","saxophone","guitar","shoe","sandal","high_heel","lipstick","boot","shirt","tshirt","necktie","womans_clothes","dress","running_shirt_with_sash","jeans","kimono","bikini","ribbon","tophat","crown","womans_hat","mans_shoe","closed_umbrella","briefcase","handbag","pouch","purse","eyeglasses","fishing_pole_and_fish","coffee","tea","sake","baby_bottle","beer","beers","cocktail","tropical_drink","wine_glass","fork_and_knife","pizza","hamburger","fries","poultry_leg","meat_on_bone","spaghetti","curry","fried_shrimp","bento","sushi","fish_cake","rice_ball","rice_cracker","rice","ramen","stew","oden","dango","egg","bread","doughnut","custard","icecream","ice_cream","shaved_ice","birthday","cake","cookie","chocolate_bar","candy","lollipop","honey_pot","apple","green_apple","tangerine","lemon","cherries","grapes","watermelon","strawberry","peach","melon","banana","pear","pineapple","sweet_potato","eggplant","tomato","corn","house","house_with_garden","school","office","post_office","hospital","bank","convenience_store","love_hotel","hotel","wedding","church","department_store","european_post_office","city_sunrise","city_sunset","japanese_castle","european_castle","tent","factory","tokyo_tower","japan","mount_fuji","sunrise_over_mountains","sunrise","stars","themoreyouknow","tmyk","statue_of_liberty","bridge_at_night","carousel_horse","rainbow","ferris_wheel","fountain","roller_coaster","ship","speedboat","boat","sailboat","rowboat","anchor","rocket","airplane","helicopter","steam_locomotive","tram","mountain_railway","bike","aerial_tramway","suspension_railway","mountain_cableway","tractor","blue_car","oncoming_automobile","car","red_car","taxi","oncoming_taxi","articulated_lorry","bus","oncoming_bus","rotating_light","police_car","oncoming_police_car","fire_engine","ambulance","minibus","truck","train","station","train2","bullettrain_front","bullettrain_side","light_rail","monorail","railway_car","trolleybus","ticket","fuelpump","vertical_traffic_light","traffic_light","warning","construction","beginner","atm","slot_machine","busstop","barber","hotsprings","checkered_flag","crossed_flags","izakaya_lantern","moyai","circus_tent","performing_arts","round_pushpin","triangular_flag_on_post","jp","kr","cn","us","fr","es","it","ru","gb","uk","de","one","two","three","four","five","six","seven","eight","nine","keycap_ten","1234","zero","hash","symbols","arrow_backward","arrow_down","arrow_forward","arrow_left","capital_abcd","abcd","abc","arrow_lower_left","arrow_lower_right","arrow_right","arrow_up","arrow_upper_left","arrow_upper_right","arrow_double_down","arrow_double_up","arrow_down_small","arrow_heading_down","arrow_heading_up","leftwards_arrow_with_hook","arrow_right_hook","left_right_arrow","arrow_up_down","arrow_up_small","arrows_clockwise","arrows_counterclockwise","rewind","fast_forward","information_source","ok","twisted_rightwards_arrows","repeat","repeat_one","new","top","up","cool","free","ng","cinema","koko","signal_strength","u5272","u5408","u55b6","u6307","u6708","u6709","u6e80","u7121","u7533","u7a7a","u7981","sa","restroom","mens","womens","baby_symbol","no_smoking","parking","wheelchair","metro","baggage_claim","accept","wc","potable_water","put_litter_in_its_place","secret","congratulations","m","passport_control","left_luggage","customs","ideograph_advantage","cl","sos","id","no_entry_sign","underage","no_mobile_phones","do_not_litter","non-potable_water","no_bicycles","no_pedestrians","children_crossing","no_entry","eight_spoked_asterisk","eight_pointed_black_star","heart_decoration","vs","vibration_mode","mobile_phone_off","chart","currency_exchange","aries","taurus","gemini","cancer","leo","virgo","libra","scorpius","sagittarius","capricorn","aquarius","pisces","ophiuchus","six_pointed_star","negative_squared_cross_mark","a","b","ab","o2","diamond_shape_with_a_dot_inside","recycle","end","on","soon","clock1","clock130","clock10","clock1030","clock11","clock1130","clock12","clock1230","clock2","clock230","clock3","clock330","clock4","clock430","clock5","clock530","clock6","clock630","clock7","clock730","clock8","clock830","clock9","clock930","heavy_dollar_sign","copyright","registered","tm","x","heavy_exclamation_mark","bangbang","interrobang","o","heavy_multiplication_x","heavy_plus_sign","heavy_minus_sign","heavy_division_sign","white_flower","100","heavy_check_mark","ballot_box_with_check","radio_button","link","curly_loop","wavy_dash","part_alternation_mark","trident","black_square","white_square","white_check_mark","black_square_button","white_square_button","black_circle","white_circle","red_circle","large_blue_circle","large_blue_diamond","large_orange_diamond","small_blue_diamond","small_orange_diamond","small_red_triangle","small_red_triangle_down","shipit"];
+
+            return function (input, userOptions) {
+
+                /**
+                 * defaultOptions
+                 *
+                 * @description
+                 * Holds the default configuration of the module.
+                 *
+                 * @type {Object}
+                 */
+                var options = {
+                    link      : true,
+                    linkTarget: '_self'
+                };
+
+                /**
+                 * Function extendDeep
+                 *
+                 * @description
+                 * Extends an object to another object using deep analyzing
+                 *
+                 * @param dst
+                 * @returns extended object
+                 */
+
+                function extendDeep(dst) {
+                    angular.forEach(arguments, function (obj) {
+                        if (obj !== dst) {
+                            angular.forEach(obj, function (value, key) {
+                                if (dst[key] && dst[key].constructor && dst[key].constructor === Object) {
+                                    extendDeep(dst[key], value);
+                                }
+                                else {
+                                    dst[key] = value;
+                                }
+                            });
+                        }
+                    });
+                    return dst;
+                }
+
+                extendDeep(options, userOptions);
+
+                if (input === undefined || input === null) {
+                    return;
+                }
+                if (typeof input === "object") {
+                    return input;
+                }
+
+                /**
+                 * FUNCTION insertfontSmiley
+                 * @description
+                 * Coverts the text into font emoticons
+                 *
+                 * @param  {string} str
+                 *
+                 * @return {string}
+                 */
+
+                function insertfontSmiley(str) {
+
+                    var a = str.split(' ');
+                    angular.forEach(icons, function (icon) {
+                        for (var i = 0; i < a.length; i++) {
+                            if (a[i] === icon.text) {
+                                a[i] = '<i class="icon-emoticon" title="' + icon.text + '">' + '&#x' + icon.code + '</i>';
+                            }
+                        }
+                    });
+                    return a.join(' ');
+                }
+
+                /**
+                 * FUNCTION UrlEmbed
+                 * @description
+                 * Converts normal links written in the text into html anchor tags.
+                 *
+                 * @param  {string} text
+                 *
+                 * @return {string}
+                 */
+
+                function urlEmbed(str) {
+
+                    var urlRegex = /((href|src)=["']|)(\b(https?|ftp|file):\/\/[-A-Z0-9+()&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
+
+                    var strReplaced = str.replace(urlRegex, function (match) {
+                            return '<a href="' + match + '" target="' + options.linkTarget + '">' + match + '</a>';
+                        }
+                    );
+                    return strReplaced;
+                }
+
+                /**
+                 * FUNCTION insertEmoji
+                 *
+                 * @description
+                 * Converts text into emojis
+                 *
+                 * @param  {string} str
+                 *
+                 * @return {string}
+                 */
+
+                function insertEmoji(str) {
+
+                    var emojiRegex = new RegExp(":(" + emojiList.join("|") + "):", "g");
+
+                    return str.replace(emojiRegex, function (match, text) {
+                        return "<i class='emoticon emoticon-" + text + "' title=':" + text + ":'></i>";
+
+                    });
+                }
+
+                /**
+                 * All the functions are being called here.
+                 */
+
+
+                input = insertfontSmiley(input);
+
+                input = insertEmoji(input);
+
+                if (options.link) {
+                    input = urlEmbed(input);
+                }
+
+                return $sce.trustAsHtml(input);
+
+            };
+        }])
+
+        .directive('ngEmoticons', ['$filter', '$sce', '$http', '$timeout', '$templateCache', function ($filter, $sce, $http, $timeout, $templateCache) {
+
+            var TEMPLATE_URL = '';
+
+            var template = '<div ng-bind-html="neText" ne-hljs></div>' +
+                '<div class="ne-video" ng-if="video.host" class="fade">' +
+                '    <div class="ne-video-preview" ng-hide="nePlayVideo || !(options.video.details)">' +
+                '        <div class="ne-video-thumb" ng-click="nePlayVideo=!nePlayVideo">' +
+                '            <img ng-src="{{video.thumbnail}}" alt=""/>' +
+                '            <i class="fa fa-play-circle-o"></i>' +
+                '        </div>' +
+                '        <div class="ne-video-detail">' +
+                '            <div class="ne-video-title">' +
+                '                <a ng-href="{{video.url}}">{{video.title}}</a>' +
+                '            </div>' +
+                '            <div class="ne-video-desc">' +
+                '                {{video.description}}' +
+                '            </div>' +
+                '            <div class="ne-video-stats">' +
+                '                <span><i class="fa fa-eye"></i> {{video.views}}</span>' +
+                '                <span><i class="fa fa-heart"></i> {{video.likes}}</span>' +
+                '            </div>' +
+                '        </div>' +
+                '    </div>' +
+                '    <div class="ne-video-player" ng-if="nePlayVideo || !(options.video.details)">' +
+                '        <iframe ng-src="{{video.embedSrc}}" frameBorder="0" width="{{video.width}}" height="{{video.height}}" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>' +
+                '    </div>' +
+                '' +
+                '' +
+                '</div>' +
+                '<div class="ne-video" ng-if="video.basic">' +
+                '    <div class="ne-video-player">' +
+                '        <div class="player">' +
+                '            <video ng-src="{{video.basic}}" controls></video>' +
+                '        </div>' +
+                '    </div>' +
+                '</div>' +
+                '<div ng-init="neImageLong=false" ng-class="{false:\'ne-image\', true:\'ne-image ne-image-long\'}[neImageLong]"' +
+                '     ng-if="image.url">' +
+                '    <div class="ne-image-wrapper">' +
+                '        <img ng-src="{{image.url}}" ng-click="neImageLong=!neImageLong" alt=""/>' +
+                '    </div>' +
+                '</div>' +
+                '<div class="ne-pdf" ng-if="pdf.url">' +
+                '    <div class="ne-pdf-preview" ng-hide="neShowPdf">' +
+                '        <div class="ne-pdf-icon">' +
+                '            <i class="fa fa-file-pdf-o"></i>' +
+                '        </div>' +
+                '        <div class="ne-pdf-detail" >' +
+                '            <div class="ne-pdf-title">' +
+                '                <a href="">{{pdf.url}}</a>' +
+                '            </div>' +
+                '            <div class="ne-pdf-view">' +
+                '' +
+                '                <button><i class="fa fa-download"></i> <a ng-href="{{pdf.url}}" target="_blank">Download</a></button>' +
+                '                <button ng-click="neShowPdf=!neShowPdf"><i class="fa fa-eye"></i> View PDF</button>' +
+                '' +
+                '            </div>' +
+                '        </div>' +
+                '    </div>' +
+                '    <div class="ne-pdf-viewer" ng-if="neShowPdf" ng-show="neShowPdf">' +
+                '        <iframe ng-src="{{pdf.url}}" frameBorder="0"></iframe>' +
+                '    </div>' +
+                '' +
+                '</div>' +
+                '<div class="ne-audio" ng-if="audio.url">' +
+                '    <audio ng-src="{{audio.url}}" controls></audio>' +
+                '</div>';
+
+            $templateCache.put(TEMPLATE_URL, template);
+
+            return {
+                restrict   : 'AE',
+                scope:true,
+                templateUrl: function (element, attributes) {
+                    return (attributes.emoticonsTemplateUrl || TEMPLATE_URL);
+                },
+                link       : function (scope, elements, attributes) {
+
+                    var data = scope.$eval(attributes.emoticonsData);
+                    var userOptions = scope.$eval(attributes.emoticonsOptions);
+                    scope.video = {};
+                    scope.image = {};
+                    scope.pdf = {};
+                    scope.audio = {};
+
+                    var options = {
+                        link      : true,
+                        linkTarget: '_self',
+                        pdf       : {
+                            embed: true
+                        },
+                        image     : {
+                            embed: false
+                        },
+                        audio     : {
+                            embed: true
+                        },
+                        code      : {
+                            highlight  : true,
+                            lineNumbers: false
+                        },
+                        basicVideo: false,
+                        video     : {
+                            embed           : false,
+                            width           : null,
+                            height          : null,
+                            ytTheme         : 'dark',
+                            details         : false,
+                            thumbnailQuality: 'medium',
+                            ytAuthKey       : null
+                        }
+                    };
+
+                    function extendDeep(dst) {
+                        angular.forEach(arguments, function (obj) {
+                            if (obj !== dst) {
+                                angular.forEach(obj, function (value, key) {
+                                    if (dst[key] && dst[key].constructor && dst[key].constructor === Object) {
+                                        extendDeep(dst[key], value);
+                                    }
+                                    else {
+                                        dst[key] = value;
+                                    }
+                                });
+                            }
+                        });
+                        return dst;
+                    }
+
+                    extendDeep(options, userOptions);
+
+                    String.prototype.trunc =
+                        function (n, useWordBoundary) {
+                            var toLong = this.length > n,
+                                s_ = toLong ? this.substr(0, n - 1) : this;
+                            s_ = useWordBoundary && toLong ? s_.substr(0, s_.lastIndexOf(' ')) : s_;
+                            return toLong ? s_ + '...' : s_;
+                        };
+
+                    var videoProcess = {
+                        calcDimensions: function (options) {
+                            var dimensions = {
+                                'width' : null,
+                                'height': null
+                            };
+                            dimensions.width = options.video.width;
+                            dimensions.height = options.video.height;
+
+                            if (options.video.height && options.video.width) {
+                                return dimensions;
+                            }
+                            else if (options.video.height) {
+                                dimensions.width = ((options.video.height) / 390) * 640;
+                                return dimensions;
+                            }
+                            else if (options.video.width) {
+                                dimensions.height = ((dimensions.width) / 640) * 390;
+                                return dimensions;
+                            }
+                            else {
+                                dimensions.width = 640;
+                                dimensions.height = 390;
+                                return dimensions;
+                            }
+                        },
+
+                        embed: function (data, options) {
+
+                            var p = /https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=|\/ytscreeningroom\?v=|\/feeds\/api\/videos\/|\/user\S*[^\w\-\s]|\S*[^\w\-\s]))([\w\-]{11})[?=&+%\w-]*/gi;
+
+                            /**
+                             * Youtube embedding
+                             */
+
+                            if (data.match(p)) {
+
+                                var youtubeDimensions = this.calcDimensions(options);
+                                scope.video.id = RegExp.$1;
+                                if (options.video.details) {
+                                    $http.get('https://www.googleapis.com/youtube/v3/videos?id=' + RegExp.$1 + '&key=' + options.video.ytAuthKey + '&part=snippet,statistics')
+                                        .success(function (d) {
+                                            var ytData = d.items[0];
+
+                                            scope.video.host = 'youtube';
+                                            scope.video.title = ytData.snippet.title;
+                                            scope.video.thumbnail = ytData.snippet.thumbnails.medium.url;
+                                            scope.video.description = (ytData.snippet.description.trunc(250, true)).replace(/\n/g, ' ').replace(/&#10;/g, ' ');
+                                            scope.video.rawDescription = ytData.snippet.description;
+                                            scope.video.views = ytData.statistics.viewCount;
+                                            scope.video.likes = ytData.statistics.likeCount;
+                                            scope.video.uploader = ytData.snippet.channelTitle;
+                                            scope.video.uploaderPage = 'https://www.youtube.com/channel/' + ytData.snippet.channelId;
+                                            scope.video.uploadDate = ytData.snippet.publishedAt;
+                                            scope.video.url = $sce.trustAsResourceUrl("https://www.youtube.com/watch?v=" + ytData.id);
+                                            scope.video.embedSrc = $sce.trustAsResourceUrl('https://www.youtube.com/embed/' + scope.video.id + '?autoplay=1');
+                                            scope.video.width = youtubeDimensions.width;
+                                            scope.video.height = youtubeDimensions.height;
+
+                                        });
+                                }
+                                else{
+                                    scope.video.width = youtubeDimensions.width;
+                                    scope.video.height = youtubeDimensions.height;
+                                    scope.video.host = 'youtube';
+                                    scope.video.embedSrc = $sce.trustAsResourceUrl('https://www.youtube.com/embed/' + RegExp.$1 + '?autoplay=0');
+
+                                }
+
+                                return data;  // show only youtube video if both vimeo and youtube videos are present.
+                            }
+
+                            /**
+                             * Vimeo embedding
+                             */
+
+                            var e = /https?:\/\/(?:www\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^\/]*)\/videos\/|album\/(\d+)\/video\/|)(\d+)(?:$|\/|\?)*/gi;
+
+                            if (data.match(e)) {
+                                var vimeoDimensions = this.calcDimensions(options);
+                                scope.video.id = RegExp.$3;
+                                if (options.video.details) {
+                                    $http.get('https://vimeo.com/api/v2/video/' + RegExp.$3 + '.json')
+                                        .success(function (d) {
+                                            scope.video.host = 'vimeo';
+                                            scope.video.title = d[0].title;
+                                            scope.video.rawDescription = (d[0].description).replace(/\n/g, '<br/>').replace(/&#10;/g, '<br/>');
+                                            scope.video.description = (d[0].description).replace(/((<|&lt;)br\s*\/*(>|&gt;)\r\n)/g, ' ').trunc(250, true);
+                                            scope.video.thumbnail = d[0].thumbnail_medium;
+                                            scope.video.views = d[0].stats_number_of_plays;
+                                            scope.video.likes = d[0].stats_number_of_likes;
+                                            scope.video.uploader = d[0].user_name;
+                                            scope.video.uploaderPage = d[0].user_url;
+                                            scope.video.uploadDate = d[0].uploadDate;
+                                            scope.video.url = d[0].url;
+                                            scope.video.embedSrc = $sce.trustAsResourceUrl('//player.vimeo.com/video/' + d[0].id + '?title=0&byline=0&portrait=0&autoplay=1');
+                                            scope.video.width = vimeoDimensions.width;
+                                            scope.video.height = vimeoDimensions.height;
+                                        });
+                                }
+                                else{
+                                    scope.video.width = vimeoDimensions.width;
+                                    scope.video.height = vimeoDimensions.height;
+                                    scope.video.host = 'vimeo';
+                                    scope.video.embedSrc=$sce.trustAsResourceUrl('//player.vimeo.com/video/' + RegExp.$3 + '?title=0&byline=0&portrait=0&autoplay=0');
+                                }
+                            }
+
+                            return data;
+                        },
+
+                        embedBasic:function(data){
+                            var f = /((?:https?):\/\/\S*\.(?:ogv|webm|mp4))/gi;
+
+                            if (data.match(f)) {
+                                scope.video.basic = $sce.trustAsResourceUrl(RegExp.$1);
+                            }
+
+                            return data;
+                        }
+                    };
+
+                    var audioProcess = {
+                        embed: function (str) {
+                            var a = /((?:https?):\/\/\S*\.(?:wav|mp3|ogg))/gi;
+                            if (str.match(a)) {
+                                scope.audio.url = $sce.trustAsResourceUrl(RegExp.$1);
+                            }
+                            return str;
+                        }
+                    };
+
+                    var imageProcess = {
+                        embed: function (data) {
+                            var i = /((?:https?):\/\/\S*\.(?:gif|jpg|jpeg|tiff|png|svg|webp))/gi;
+
+                            if (data.match(i)) {
+                                scope.image.url = RegExp.$1;
+
+                            }
+
+                            return data;
+                        }
+                    };
+
+                    var codeProcess = {
+                        encodeCode: function (c) {
+                            c = c.replace(/\&/gm, '&amp;');
+                            c = c.replace(/</gm, '&lt;');
+                            c = c.replace(/>/gm, '&gt;');
+                            return c;
+                        },
+
+                        getCode: function (text) {
+                            var that = this;
+                            text = text.replace(/(`+)(\s|[a-z]+)\s*([\s\S]*?[^`])\s*\1(?!`)/gm,
+                                function (wholeMatch, m1, m2, m3) {
+                                    var c = m3;
+                                    c = c.replace(/^([ \t]*)/g, ""); // leading whitespace
+                                    c = c.replace(/[ \t]*$/g, ""); // trailing whitespace
+                                    c = that.encodeCode(c);
+                                    c = c.replace(/:\/\//g, "~P"); // to prevent auto-linking. Not necessary in code
+                                                                   // *blocks*, but in code spans. Will be converted
+                                                                   // back after the auto-linker runs.
+                                    
+                                    return '<pre><code class="ne-code '+m2+'">' + c + '</code></pre>';
+                                }
+                            );
+                            return text;
+                        }
+                    };
+
+                    var pdfProcess = {
+                        embed: function (str) {
+                            var p = /((?:https?):\/\/\S*\.(?:pdf|PDF))/gi;
+                            if (str.match(p)) {
+                                scope.pdf.url = $sce.trustAsResourceUrl(RegExp.$1);
+
+                            }
+
+                            return str;
+                        }
+                    };
+
+                    if (options.code.highlight) {
+                        if (!window.hljs) {
+                            throw 'hlsj (Highlight JS is not defined.';
+                        }
+                        else {
+                            data = codeProcess.getCode(data);
+
+                            /**
+                             * Adding line numbers to code
+                             */
+                            $timeout(function () {
+                                hljs.initHighlighting();
+                                if (options.code.lineNumbers) {
+                                    angular.element('.ne-code').each(function () {
+                                        var i = 1;
+                                        var lines = $(this).text().split('\n').length;
+                                        var numbering = $('<ul/>').addClass('pre-numbering');
+                                        angular.element(this)
+                                            .addClass('has-numbering')
+                                            .parent()
+                                            .append(numbering);
+                                        for (i; i <= lines; i++) {
+                                            numbering.append(angular.element('<li/>').text(i));
+                                        }
+                                    });
+                                }
+
+                            }, 0);
+
+                        }
+                    }
+
+                    var x = ($filter('emoticons')(data, options)).$$unwrapTrustedValue();
+
+                    if (options.video.embed) {
+                        if (!options.video.ytAuthKey) {
+                            throw 'Youtube authentication key is required to get data from youtube.';
+                        }
+                        else {
+                            x = videoProcess.embed(x, options);
+                        }
+
+                    }
+
+                    if(options.basicVideo){
+                        x=videoProcess.embedBasic(x);
+                    }
+
+                    if (options.audio.embed) {
+                        x = audioProcess.embed(x);
+                    }
+
+                    if (options.image.embed) {
+                        x = imageProcess.embed(x);
+                    }
+
+                    if (options.pdf.embed) {
+                        x = pdfProcess.embed(x);
+                    }
+
+                    scope.neText = $sce.trustAsHtml(x);
+                }
+            };
+        }])
+
+        .directive('neHljs',['$timeout', function ($timeout) {
+            return {
+                restrict: 'AE',
+                link    : function (scope, elem) {
+                    $timeout(function () {
+                        elem.find('.ne-code').each(function(){
+                            hljs.highlightBlock(this);
+                        });
+                    }, 0);
+
+                }
+            };
+        }]);
+
+})();
diff --git a/public/bower_components/ng-remote-validate/ngRemoteValidate.js b/public/bower_components/ng-remote-validate/ngRemoteValidate.js
new file mode 100644
index 0000000..ddf0983
--- /dev/null
+++ b/public/bower_components/ng-remote-validate/ngRemoteValidate.js
@@ -0,0 +1,165 @@
+( function( angular ) {
+    'use strict';
+    if( !angular ) {
+        throw 'Missing something? Please add angular.js to your project or move this script below the angular.js reference';
+    }
+
+    var directiveId = 'ngRemoteValidate',
+        remoteValidate = function( $http, $timeout, $q ) {
+            return {
+                restrict: 'A',
+                require: [ '^form','ngModel' ],
+                scope: {
+                    ngRemoteInterceptors: '=?'
+                },
+                link: function( scope, el, attrs, ctrls ) {
+                    var cache = {},
+                        handleChange,
+                        setValidation,
+                        addToCache,
+                        request,
+                        shouldProcess,
+                        ngForm = ctrls[ 0 ],
+                        ngModel = ctrls[ 1 ],
+                        options = {
+                            ngRemoteThrottle: 400,
+                            ngRemoteMethod: 'POST'
+                        };
+
+                    angular.extend( options, attrs );
+					//TODO: Use Cain of Responsibility to reduce complexity.
+                    if( options.ngRemoteValidate.charAt( 0 ) === '[' ) {
+                        options.urls = eval( options.ngRemoteValidate );
+                    } else if (options.ngRemoteValidate.charAt( 0 ) === '{') {
+                        options.keys = eval( '(' + options.ngRemoteValidate + ')' );
+                        options.urls = Object.keys( options.keys );
+                    } else {
+                        options.urls = [ options.ngRemoteValidate ];
+                    }
+
+                    addToCache = function( response ) {
+                        var value = response[ 0 ].data.value;
+                        if ( cache[ value ] ) return cache[ value ];
+                        cache[ value ] = response;
+                    };
+
+                    shouldProcess = function( value ) {
+                        var otherRulesInValid = false;
+                        for ( var p in ngModel.$error ) {
+                            var checkedKey = !options.hasOwnProperty( 'keys' ) ||
+                                             !( Object.keys(options.keys )
+								.filter( function( k ) {
+                                    return options.keys[ k ] === p;
+                                } )[ 0 ] );
+                            if ( ngModel.$error[ p ] && p != directiveId && checkedKey ) {
+                                otherRulesInValid = true;
+                                break;
+                            }
+                        }
+                        return !( ngModel.$pristine || otherRulesInValid );
+                    };
+
+                    setValidation = function( response, skipCache ) {
+                        var i = 0,
+                            l = response.length,
+                            useKeys = options.hasOwnProperty( 'keys' ),
+                            isValid = true;
+                        for( ; i < l; i++ ) {
+
+                            if( scope.ngRemoteInterceptors && scope.ngRemoteInterceptors.response ) {
+                                response[ i ] = scope.ngRemoteInterceptors.response( response[ i ] );
+                            }
+
+                            if( !response[ i ].data.isValid ) {
+                                isValid = false;
+                                if (!useKeys) {
+                                    break;
+                                }
+                            }
+							
+                            var canSetKey = ( useKeys &&
+                                              response[ i ].hasOwnProperty( 'config' ) &&
+                                              options.keys[ response[ i ].config.url ] );
+
+                            if ( canSetKey ) {
+                                var key = options.keys[ response[ i ].config.url ];
+                                ngModel.$setValidity( key, response[ i ].data.isValid );
+                            }
+                        }
+                        if( !skipCache ) {
+                            addToCache( response );    
+                        }
+                        ngModel.$setValidity( directiveId, isValid );
+                        ngModel.$processing = ngModel.$pending = ngForm.$pending = false;
+                    };
+
+                    handleChange = function( value ) {
+                        if( typeof value === 'undefined' || value === '' ) {
+                            ngModel.$setPristine();
+                            return;
+                        }
+
+                        if ( !shouldProcess( value ) ) {
+                            return setValidation( [ { data: { isValid: true, value: value } } ], true );
+                        }
+
+                        if ( cache[ value ] ) {
+                            return setValidation( cache[ value ], true );
+                        }
+                        
+                        //Set processing now, before the delay. 
+                        //Check first to reduce DOM updates
+                        if( !ngModel.$pending ) {
+                            ngModel.$processing = ngModel.$pending = ngForm.$pending = true;
+                        }
+                        
+                        if ( request ) {
+                            $timeout.cancel( request );
+                        }
+
+                        request = $timeout( function( ) {
+							var calls = [],
+                                i = 0,
+                                l = options.urls.length,
+                                toValidate = { value: value },
+                                httpOpts = { method: options.ngRemoteMethod };
+                            
+                            if ( scope[ el[0].name + 'SetArgs' ] ) {
+                                toValidate = scope[el[0].name + 'SetArgs'](value, el, attrs, ngModel);
+                            }
+
+                            if(options.ngRemoteMethod == 'POST'){
+                                httpOpts.data = toValidate;
+                            } else {
+                                httpOpts.params = toValidate;
+                            }
+
+                            for( ; i < l; i++ ) {
+                                httpOpts.url =  options.urls[ i ];
+
+                                if(scope.ngRemoteInterceptors && scope.ngRemoteInterceptors.request){
+                                    httpOpts = scope.ngRemoteInterceptors.request(httpOpts);
+                                }
+
+                                calls.push( $http( httpOpts ) );
+                            }
+
+                            $q.all( calls ).then( setValidation );
+                            
+                        }, options.ngRemoteThrottle );
+                        return true;
+                    };
+
+                    //ngModel.$parsers.unshift( handleChange );
+                    scope.$watch( function( ) {
+                        return ngModel.$viewValue;
+                    }, handleChange );
+                }
+            };
+        };
+
+    angular.module( 'remoteValidation', [] )
+           .constant('MODULE_VERSION', '0.6.1')
+           .directive( directiveId, [ '$http', '$timeout', '$q', remoteValidate ] );
+           
+})( this.angular );
\ No newline at end of file
diff --git a/public/bower_components/ng-scrollbars/scrollbars.min.js b/public/bower_components/ng-scrollbars/scrollbars.min.js
new file mode 100644
index 0000000..4d55122
--- /dev/null
+++ b/public/bower_components/ng-scrollbars/scrollbars.min.js
@@ -0,0 +1 @@
+!function(){"use strict";function a(){this.defaults={scrollButtons:{enable:!1},axis:"yx"},$.mCustomScrollbar.defaults.scrollButtons=this.defaults.scrollButtons,$.mCustomScrollbar.defaults.axis=this.defaults.axis,this.$get=function(){return{defaults:this.defaults}}}function b(a){return{scope:{ngScrollbarsConfig:"&"},link:function(b,c){var d=a.defaults,e=$.mCustomScrollbar.defaults,f=b.ngScrollbarsConfig();f||(f={});for(var g in d)if(d.hasOwnProperty(g))switch(g){case"scrollButtons":f.hasOwnProperty(g)||(e.scrollButtons=d[g]);break;case"axis":f.hasOwnProperty(g)||(e.axis=d[g]);break;default:f.hasOwnProperty(g)||(f[g]=d[g])}c.mCustomScrollbar(f)}}}angular.module("ngScrollbars",[]).provider("ScrollBars",a).directive("ngScrollbars",b),a.$inject=[],b.$inject=["ScrollBars"]}();
\ No newline at end of file
diff --git a/public/bower_components/ng-slide-down/ng-slide-down.js b/public/bower_components/ng-slide-down/ng-slide-down.js
new file mode 100644
index 0000000..c58710f
--- /dev/null
+++ b/public/bower_components/ng-slide-down/ng-slide-down.js
@@ -0,0 +1,109 @@
+(function () {
+  'use strict';
+  angular.module('ng-slide-down', []).directive('ngSlideDown', [
+    '$timeout',
+    function ($timeout) {
+      var getTemplate, link;
+      getTemplate = function (tElement, tAttrs) {
+        if (tAttrs.lazyRender !== void 0) {
+          return '<div ng-if=\'lazyRender\' ng-transclude></div>';
+        } else {
+          return '<div ng-transclude></div>';
+        }
+      };
+      link = function (scope, element, attrs, ctrl, transclude) {
+        var closePromise, duration, elementScope, emitOnClose, getHeight, hide, lazyRender, onClose, openPromise, show, timingFunction;
+        duration = attrs.duration || 1;
+        timingFunction = attrs.timingFunction || 'ease-in-out';
+        elementScope = element.scope();
+        emitOnClose = attrs.emitOnClose;
+        onClose = attrs.onClose;
+        lazyRender = attrs.lazyRender !== void 0;
+        closePromise = null;
+        openPromise = null;
+        getHeight = function (passedScope) {
+          var c, children, height, _i, _len;
+          height = 0;
+          children = element.children();
+          for (_i = 0, _len = children.length; _i < _len; _i++) {
+            c = children[_i];
+            height += c.clientHeight;
+          }
+          return '' + height + 'px';
+        };
+        show = function () {
+          if (closePromise) {
+            $timeout.cancel(closePromise);
+          }
+          if (lazyRender) {
+            scope.lazyRender = true;
+          }
+          return $timeout(function () {
+            if (openPromise) {
+              $timeout.cancel(openPromise);
+            }
+            element.css({
+              overflow: 'hidden',
+              transitionProperty: 'height',
+              transitionDuration: '' + duration + 's',
+              transitionTimingFunction: timingFunction,
+              height: getHeight()
+            });
+            return openPromise = $timeout(function () {
+              return element.css({
+                overflow: 'visible',
+                transition: 'none',
+                height: 'auto'
+              });
+            }, duration * 1000);
+          });
+        };
+        hide = function () {
+          if (openPromise) {
+            $timeout.cancel(openPromise);
+          }
+          element.css({
+            overflow: 'hidden',
+            transitionProperty: 'height',
+            transitionDuration: '' + duration + 's',
+            transitionTimingFunction: timingFunction,
+            height: '0px'
+          });
+          if (emitOnClose || onClose || lazyRender) {
+            return closePromise = $timeout(function () {
+              if (emitOnClose) {
+                scope.$emit(emitOnClose, {});
+              }
+              if (onClose) {
+                elementScope.$eval(onClose);
+              }
+              if (lazyRender) {
+                return scope.lazyRender = false;
+              }
+            }, duration * 1000);
+          }
+        };
+        return scope.$watch('expanded', function (value, oldValue) {
+          if (value) {
+            return $timeout(show);
+          } else {
+            if (value != null) {
+              element.css({ height: getHeight() });
+              element[0].clientHeight;
+            }
+            return $timeout(hide);
+          }
+        });
+      };
+      return {
+        restrict: 'A',
+        scope: { expanded: '=ngSlideDown' },
+        transclude: true,
+        link: link,
+        template: function (tElement, tAttrs) {
+          return getTemplate(tElement, tAttrs);
+        }
+      };
+    }
+  ]);
+}.call(this));
\ No newline at end of file
diff --git a/public/bower_components/ngInfiniteScroll/ng-infinite-scroll.js b/public/bower_components/ngInfiniteScroll/ng-infinite-scroll.js
new file mode 100644
index 0000000..5d29d59
--- /dev/null
+++ b/public/bower_components/ngInfiniteScroll/ng-infinite-scroll.js
@@ -0,0 +1,61 @@
+/* ng-infinite-scroll - v1.0.0 - 2013-02-23 */
+var mod;
+
+mod = angular.module('infinite-scroll', []);
+
+mod.directive('infiniteScroll', [
+  '$rootScope', '$window', '$timeout', function($rootScope, $window, $timeout) {
+    return {
+      link: function(scope, elem, attrs) {
+        var checkWhenEnabled, handler, scrollDistance, scrollEnabled;
+        $window = angular.element($window);
+        scrollDistance = 0;
+        if (attrs.infiniteScrollDistance != null) {
+          scope.$watch(attrs.infiniteScrollDistance, function(value) {
+            return scrollDistance = parseInt(value, 10);
+          });
+        }
+        scrollEnabled = true;
+        checkWhenEnabled = false;
+        if (attrs.infiniteScrollDisabled != null) {
+          scope.$watch(attrs.infiniteScrollDisabled, function(value) {
+            scrollEnabled = !value;
+            if (scrollEnabled && checkWhenEnabled) {
+              checkWhenEnabled = false;
+              return handler();
+            }
+          });
+        }
+        handler = function() {
+          var elementBottom, remaining, shouldScroll, windowBottom;
+          windowBottom = $window.height() + $window.scrollTop();
+          elementBottom = elem.offset().top + elem.height();
+          remaining = elementBottom - windowBottom;
+          shouldScroll = remaining <= $window.height() * scrollDistance;
+          if (shouldScroll && scrollEnabled) {
+            if ($rootScope.$$phase) {
+              return scope.$eval(attrs.infiniteScroll);
+            } else {
+              return scope.$apply(attrs.infiniteScroll);
+            }
+          } else if (shouldScroll) {
+            return checkWhenEnabled = true;
+          }
+        };
+        $window.on('scroll', handler);
+        scope.$on('$destroy', function() {
+          return $window.off('scroll', handler);
+        });
+        return $timeout((function() {
+          if (attrs.infiniteScrollImmediateCheck) {
+            if (scope.$eval(attrs.infiniteScrollImmediateCheck)) {
+              return handler();
+            }
+          } else {
+            return handler();
+          }
+        }), 0);
+      }
+    };
+  }
+]);
diff --git a/public/bower_components/ngmap/ng-map.js b/public/bower_components/ngmap/ng-map.js
new file mode 100644
index 0000000..a975886
--- /dev/null
+++ b/public/bower_components/ngmap/ng-map.js
@@ -0,0 +1,2776 @@
+angular.module('ngMap', []);
+
+/**
+ * @ngdoc service
+ * @name Attr2Options
+ * @description 
+ *   Converts tag attributes to options used by google api v3 objects, map, marker, polygon, circle, etc.
+ */
+/* global google */
+(function() {
+  'use strict';
+
+  var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
+  var MOZ_HACK_REGEXP = /^moz([A-Z])/;  
+
+  function camelCase(name) {
+    return name.
+      replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
+        return offset ? letter.toUpperCase() : letter;
+      }).
+      replace(MOZ_HACK_REGEXP, 'Moz$1');
+  }
+
+  function JSONize(str) {
+    try {       // if parsable already, return as it is
+      JSON.parse(str);
+      return str;
+    } catch(e) { // if not parsable, change little
+      return str
+        // wrap keys without quote with valid double quote
+        .replace(/([\$\w]+)\s*:/g, function(_, $1){return '"'+$1+'":';})
+        // replacing single quote wrapped ones to double quote 
+        .replace(/'([^']+)'/g, function(_, $1){return '"'+$1+'"';});
+    }
+  }
+
+  var Attr2Options = function($parse, $timeout, $log, NavigatorGeolocation, GeoCoder) { 
+
+    /**
+     * Returns the attributes of an element as hash
+     * @memberof Attr2Options
+     * @param {HTMLElement} el html element
+     * @returns {Hash} attributes
+     */
+    var orgAttributes = function(el) {
+      (el.length > 0) && (el = el[0]);
+      var orgAttributes = {};
+      for (var i=0; i<el.attributes.length; i++) {
+        var attr = el.attributes[i];
+        orgAttributes[attr.name] = attr.value;
+      }
+      return orgAttributes;
+    };
+
+    var toOptionValue = function(input, options) {
+      var output, key=options.key, scope=options.scope;
+      try { // 1. Number?
+        var num = Number(input);
+        if (isNaN(num)) {
+          throw "Not a number";
+        } else  {
+          output = num;
+        }
+      } catch(err) { 
+        try { // 2.JSON?
+          if (input.match(/^[\+\-]?[0-9\.]+,[ ]*\ ?[\+\-]?[0-9\.]+$/)) { // i.e "-1.0, 89.89"
+            input = "["+input+"]";
+          }
+          output = JSON.parse(JSONize(input));
+          if (output instanceof Array) {
+            var t1stEl = output[0];
+            if (t1stEl.constructor == Object) { // [{a:1}] : not lat/lng ones
+            } else if (t1stEl.constructor == Array) { // [[1,2],[3,4]] 
+              output =  output.map(function(el) {
+                return new google.maps.LatLng(el[0], el[1]);
+              });
+            } else if(!isNaN(parseFloat(t1stEl)) && isFinite(t1stEl)) {
+              return new google.maps.LatLng(output[0], output[1]);
+            }
+          }
+          else if (output === Object(output)) { // JSON is an object (not array or null)
+            // check for nested hashes and convert to Google API options
+            output = getOptions(output, options, true);
+          }
+        } catch(err2) {
+          // 3. Object Expression. i.e. LatLng(80,-49)
+          if (input.match(/^[A-Z][a-zA-Z0-9]+\(.*\)$/)) {
+            try {
+              var exp = "new google.maps."+input;
+              output = eval(exp); // TODO, still eval
+            } catch(e) {
+              output = input;
+            } 
+          // 4. Object Expression. i.e. MayTypeId.HYBRID 
+          } else if (input.match(/^([A-Z][a-zA-Z0-9]+)\.([A-Z]+)$/)) {
+            try {
+              var matches = input.match(/^([A-Z][a-zA-Z0-9]+)\.([A-Z]+)$/);
+              output = google.maps[matches[1]][matches[2]];
+            } catch(e) {
+              output = input;
+            } 
+          // 5. Object Expression. i.e. HYBRID 
+          } else if (input.match(/^[A-Z]+$/)) {
+            try {
+              var capitalizedKey = key.charAt(0).toUpperCase() + key.slice(1);
+              if (key.match(/temperatureUnit|windSpeedUnit|labelColor/)) {
+                capitalizedKey = capitalizedKey.replace(/s$/,"");
+                output = google.maps.weather[capitalizedKey][input];
+              } else {
+                output = google.maps[capitalizedKey][input];
+              }
+            } catch(e) {
+              output = input;
+            }
+          // 6. Date Object as ISO String i.e. "2015-08-12T06:12:40.858Z"
+          } else if (input.match(/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/)) {
+            try {
+              output = new Date(input);
+            } catch(e) {
+              output = input;
+            }
+          } else {
+            output = input;
+          }
+        } // catch(err2)
+      } // catch(err)
+
+      // convert output more for shape bounds
+      if (options.key == 'bounds' && output instanceof Array) {
+        output = new google.maps.LatLngBounds(output[0], output[1]);
+      }
+
+      // convert output more for shape icons
+      if (options.key == 'icons' && output instanceof Array) {
+        for (var i=0; i<output.length; i++) {
+          var el = output[i];
+          if (el.icon.path.match(/^[A-Z_]+$/)) {
+            el.icon.path =  google.maps.SymbolPath[el.icon.path];
+          }
+        }
+      }
+
+      // convert output more for marker icon
+      if (options.key == 'icon' && output instanceof Object) {
+        if ((""+output.path).match(/^[A-Z_]+$/)) {
+          output.path = google.maps.SymbolPath[output.path];
+        }
+        for (var key in output) { //jshint ignore:line
+          var arr = output[key];
+          if (key == "anchor" || key == "origin") {
+            output[key] = new google.maps.Point(arr[0], arr[1]);
+          } else if (key == "size" || key == "scaledSize") {
+            output[key] = new google.maps.Size(arr[0], arr[1]);
+          }
+        }
+      }
+
+      return output;
+    };
+
+    var getAttrsToObserve = function(attrs) {
+      var attrsToObserve = [];
+      if (attrs["ng-repeat"] || attrs.ngRepeat) {  // if element is created by ng-repeat, don't observe any
+        //$log.warn("It is NOT ideal to have many observers or watcher with ng-repeat. Please use it with your own risk");
+      }
+      for (var attrName in attrs) { //jshint ignore:line
+        var attrValue = attrs[attrName];
+        if (attrValue && attrValue.match(/\{\{.*\}\}/)) { // if attr value is {{..}}
+          void 0;
+          attrsToObserve.push(camelCase(attrName));
+        }
+      }
+      return attrsToObserve;
+    };
+
+    /**
+     * filters attributes by skipping angularjs methods $.. $$..
+     * @memberof Attr2Options
+     * @param {Hash} attrs tag attributes
+     * @returns {Hash} filterd attributes
+     */
+    var filter = function(attrs) {
+      var options = {};
+      for(var key in attrs) {
+        if (key.match(/^\$/) || key.match(/^ng[A-Z]/)) {
+          void(0);
+        } else {
+          options[key] = attrs[key];
+        }
+      }
+      return options;
+    };
+
+    /**
+     * converts attributes hash to Google Maps API v3 options  
+     * ```
+     *  . converts numbers to number   
+     *  . converts class-like string to google maps instance   
+     *    i.e. `LatLng(1,1)` to `new google.maps.LatLng(1,1)`  
+     *  . converts constant-like string to google maps constant    
+     *    i.e. `MapTypeId.HYBRID` to `google.maps.MapTypeId.HYBRID`   
+     *    i.e. `HYBRID"` to `google.maps.MapTypeId.HYBRID`  
+     * ```
+     * @memberof Attr2Options
+     * @param {Hash} attrs tag attributes
+     * @param {scope} scope angularjs scope
+     * @returns {Hash} options converted attributess
+     */
+    var getOptions = function(attrs, scope, doNotConverStringToNumber) {
+      var options = {};
+      for(var key in attrs) {
+        if (attrs[key]) {
+          if (key.match(/^on[A-Z]/)) { //skip events, i.e. on-click
+            continue;
+          } else if (key.match(/ControlOptions$/)) { // skip controlOptions
+            continue;
+          } else {
+            // nested conversions need to be typechecked (non-strings are fully converted)
+            if (typeof attrs[key] !== 'string') {
+              options[key] = attrs[key];
+            } else {
+              if (doNotConverStringToNumber && attrs[key].match(/^[0-9]+$/)) {
+                options[key] = attrs[key];
+              } else {
+                options[key] = toOptionValue(attrs[key], {scope:scope, key: key});
+              }
+            }
+          }
+        } // if (attrs[key])
+      } // for(var key in attrs)
+      return options;
+    };
+
+    /**
+     * converts attributes hash to scope-specific event function 
+     * @memberof Attr2Options
+     * @param {scope} scope angularjs scope
+     * @param {Hash} attrs tag attributes
+     * @returns {Hash} events converted events
+     */
+    var getEvents = function(scope, attrs) {
+      var events = {};
+      var toLowercaseFunc = function($1){
+        return "_"+$1.toLowerCase();
+      };
+      var eventFunc = function(attrValue) {
+        var matches = attrValue.match(/([^\(]+)\(([^\)]*)\)/);
+        var funcName = matches[1];
+        var argsStr = matches[2].replace(/event[ ,]*/,'');  //remove string 'event'
+        var argsExpr = $parse("["+argsStr+"]"); //for perf when triggering event
+        return function(event) {
+          var args = argsExpr(scope); //get args here to pass updated model values
+          function index(obj,i) {return obj[i];}
+          var f = funcName.split('.').reduce(index, scope);
+          f && f.apply(this, [event].concat(args));
+          $timeout( function() {
+            scope.$apply();
+          });
+        };
+      };
+
+      for(var key in attrs) {
+        if (attrs[key]) {
+          if (!key.match(/^on[A-Z]/)) { //skip if not events
+            continue;
+          }
+          
+          //get event name as underscored. i.e. zoom_changed
+          var eventName = key.replace(/^on/,'');
+          eventName = eventName.charAt(0).toLowerCase() + eventName.slice(1);
+          eventName = eventName.replace(/([A-Z])/g, toLowercaseFunc);
+
+          var attrValue = attrs[key];
+          events[eventName] = new eventFunc(attrValue);
+        }
+      }
+      return events;
+    };
+
+    /**
+     * control means map controls, i.e streetview, pan, etc, not a general control
+     * @memberof Attr2Options
+     * @param {Hash} filtered filtered tag attributes
+     * @returns {Hash} Google Map options
+     */
+    var getControlOptions = function(filtered) {
+      var controlOptions = {};
+      if (typeof filtered != 'object') {
+        return false;
+      }
+
+      for (var attr in filtered) {
+        if (filtered[attr]) {
+          if (!attr.match(/(.*)ControlOptions$/)) { 
+            continue; // if not controlOptions, skip it
+          }
+
+          //change invalid json to valid one, i.e. {foo:1} to {"foo": 1}
+          var orgValue = filtered[attr];
+          var newValue = orgValue.replace(/'/g, '"');
+          newValue = newValue.replace(/([^"]+)|("[^"]+")/g, function($0, $1, $2) {
+            if ($1) {
+              return $1.replace(/([a-zA-Z0-9]+?):/g, '"$1":');
+            } else {
+              return $2; 
+            } 
+          });
+          try {
+            var options = JSON.parse(newValue);
+            for (var key in options) { //assign the right values
+              if (options[key]) {
+                var value = options[key];
+                if (typeof value === 'string') {
+                  value = value.toUpperCase();
+                } else if (key === "mapTypeIds") {
+                  value = value.map( function(str) {
+                    if (str.match(/^[A-Z]+$/)) { // if constant
+                      return google.maps.MapTypeId[str.toUpperCase()];
+                    } else { // else, custom map-type
+                      return str;
+                    }
+                  });
+                }
+
+                if (key === "style") {
+                  var str = attr.charAt(0).toUpperCase() + attr.slice(1);
+                  var objName = str.replace(/Options$/,'')+"Style";
+                  options[key] = google.maps[objName][value];
+                } else if (key === "position") {
+                  options[key] = google.maps.ControlPosition[value];
+                } else {
+                  options[key] = value;
+                }
+              }
+            }
+            controlOptions[attr] = options;
+          } catch (e) {
+            void 0;
+          }
+        }
+      } // for
+
+      return controlOptions;
+    };
+
+    return {
+      camelCase: camelCase,
+      filter: filter,
+      getOptions: getOptions,
+      getEvents: getEvents,
+      getControlOptions: getControlOptions,
+      toOptionValue: toOptionValue,
+      getAttrsToObserve: getAttrsToObserve,
+      orgAttributes: orgAttributes
+    }; // return
+
+  };
+  Attr2Options.$inject= ['$parse', '$timeout', '$log', 'NavigatorGeolocation', 'GeoCoder'];
+
+  angular.module('ngMap').service('Attr2Options', Attr2Options);
+})();
+
+/**
+ * @ngdoc service
+ * @name GeoCoder
+ * @description
+ *   Provides [defered/promise API](https://docs.angularjs.org/api/ng/service/$q) service for Google Geocoder service
+ */
+/* global google */
+(function() {
+  'use strict';
+  var GeoCoder = function($q) {
+    return {
+      /**
+       * @memberof GeoCoder
+       * @param {Hash} options https://developers.google.com/maps/documentation/geocoding/#geocoding
+       * @example
+       * ```
+       *   GeoCoder.geocode({address: 'the cn tower'}).then(function(result) {
+       *     //... do something with result
+       *   });
+       * ```
+       * @returns {HttpPromise} Future object
+       */
+      geocode : function(options) {
+        var deferred = $q.defer();
+        var geocoder = new google.maps.Geocoder();
+        geocoder.geocode(options, function (results, status) {
+          if (status == google.maps.GeocoderStatus.OK) {
+            deferred.resolve(results);
+          } else {
+            deferred.reject(status);
+          }
+        });
+        return deferred.promise;
+      }
+    }
+  };
+  GeoCoder.$inject = ['$q'];
+
+  angular.module('ngMap').service('GeoCoder', GeoCoder);
+})();
+
+/**
+ * @ngdoc service
+ * @name NavigatorGeolocation
+ * @description
+ *  Provides [defered/promise API](https://docs.angularjs.org/api/ng/service/$q) service for navigator.geolocation methods
+ */
+/* global google */
+(function() {
+  'use strict';
+
+  var NavigatorGeolocation = function($q) {
+    return {
+      /**
+       * @memberof NavigatorGeolocation
+       * @param {Object} geoLocationOptions the navigator geolocations options. i.e. { maximumAge: 3000, timeout: 5000, enableHighAccuracy: true }. If none specified, { timeout: 5000 }. If timeout not specified, timeout: 5000 added
+       * @param {function} success success callback function
+       * @param {function} failure failure callback function
+       * @example
+       * ```
+       *  NavigatorGeolocation.getCurrentPosition()
+       *    .then(function(position) {
+       *      var lat = position.coords.latitude, lng = position.coords.longitude;
+       *      .. do something lat and lng
+       *    });
+       * ```
+       * @returns {HttpPromise} Future object
+       */
+      getCurrentPosition: function(geoLocationOptions) {
+        var deferred = $q.defer();
+        if (navigator.geolocation) {
+          
+          if (geoLocationOptions === undefined) {
+            geoLocationOptions = { timeout: 5000 };
+          }
+          else if (geoLocationOptions.timeout === undefined) {
+            geoLocationOptions.timeout = 5000;
+          }
+          
+          navigator.geolocation.getCurrentPosition(
+            function(position) {
+              deferred.resolve(position);
+            }, function(evt) {
+              void 0;
+              deferred.reject(evt);
+            },
+            geoLocationOptions
+          );
+        } else {
+          deferred.reject("Browser Geolocation service failed.");
+        }
+        return deferred.promise;
+      },
+
+      watchPosition: function() {
+        return "TODO";
+      },
+
+      clearWatch: function() {
+        return "TODO";
+      }
+    };
+  }; 
+  NavigatorGeolocation.$inject = ['$q'];
+
+  angular.module('ngMap').service('NavigatorGeolocation', NavigatorGeolocation);
+})();
+
+/**
+ * @ngdoc service
+ * @name StreetView
+ * @description
+ *  Provides [defered/promise API](https://docs.angularjs.org/api/ng/service/$q) service 
+ *  for [Google StreetViewService](https://developers.google.com/maps/documentation/javascript/streetview)
+ */
+/* global google */
+(function() {
+  'use strict';
+
+  var StreetView = function($q) {
+
+    /**
+     * Retrieves panorama id from the given map (and or position)
+     * @memberof StreetView
+     * @param {map} map Google map instance
+     * @param {LatLng} latlng Google LatLng instance  
+     *   default: the center of the map
+     * @example
+     *   StreetView.getPanorama(map).then(function(panoId) {
+     *     $scope.panoId = panoId;
+     *   });
+     * @returns {HttpPromise} Future object
+     */
+    var getPanorama = function(map, latlng) {
+      latlng = latlng || map.getCenter();
+      var deferred = $q.defer();
+      var svs = new google.maps.StreetViewService();
+      svs.getPanoramaByLocation( (latlng||map.getCenter), 100, function (data, status) {
+        // if streetView available
+        if (status === google.maps.StreetViewStatus.OK) {
+          deferred.resolve(data.location.pano);
+        } else {
+          // no street view available in this range, or some error occurred
+          deferred.resolve(false);
+          //deferred.reject('Geocoder failed due to: '+ status);
+        }
+      });
+      return deferred.promise;
+    };
+
+    /**
+     * Set panorama view on the given map with the panorama id
+     * @memberof StreetView
+     * @param {map} map Google map instance
+     * @param {String} panoId Panorama id fro getPanorama method
+     * @example
+     *   StreetView.setPanorama(map, panoId);
+     */
+    var setPanorama = function(map, panoId) {
+      var svp = new google.maps.StreetViewPanorama(map.getDiv(), {enableCloseButton: true});
+      svp.setPano(panoId);
+    };
+
+    return {
+      getPanorama: getPanorama,
+      setPanorama: setPanorama
+    }; // return
+
+  };
+  StreetView.$inject = ['$q'];
+
+  angular.module('ngMap').service('StreetView', StreetView);
+})();
+
+/**
+ * @ngdoc directive
+ * @name bicycling-layer
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @description 
+ *   Requires:  map directive
+ *   Restrict To:  Element
+ *
+ * @example
+ * Example: 
+ *
+ *   <map zoom="13" center="34.04924594193164, -118.24104309082031">
+ *     <bicycling-layer></bicycling-layer>
+ *    </map>
+ */
+(function() {
+  'use strict';
+  angular.module('ngMap').directive('bicyclingLayer', ['Attr2Options', function(Attr2Options) {
+    var parser = Attr2Options;
+    
+    var getLayer = function(options, events) {
+      var layer = new google.maps.BicyclingLayer(options);
+      for (var eventName in events) {
+        google.maps.event.addListener(layer, eventName, events[eventName]);
+      }
+      return layer;
+    };
+    
+    return {
+      restrict: 'E',
+      require: '^map',
+
+      link: function(scope, element, attrs, mapController) {
+        var orgAttrs = parser.orgAttributes(element);
+        var filtered = parser.filter(attrs);
+        var options = parser.getOptions(filtered);
+        var events = parser.getEvents(scope, filtered);
+
+        void 0;
+
+        var layer = getLayer(options, events);
+        mapController.addObject('bicyclingLayers', layer);
+        mapController.observeAttrSetObj(orgAttrs, attrs, layer);  //observers
+        element.bind('$destroy', function() {
+          mapController.deleteObject('bicyclingLayers', layer);
+        });
+      }
+     }; // return
+  }]);
+})();
+
+/**
+ * @ngdoc directive
+ * @name cloud-layer
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @description 
+ *   Requires:  map directive
+ *   Restrict To:  Element
+ *
+ * @example
+ * Example: 
+ *
+ *   <map zoom="13" center="34.04924594193164, -118.24104309082031">
+ *     <cloud-layer></cloud-layer>
+ *    </map>
+ */
+(function() {
+  'use strict';
+  angular.module('ngMap').directive('cloudLayer', ['Attr2Options', function(Attr2Options) {
+    var parser = Attr2Options;
+    
+    var getLayer = function(options, events) {
+      var layer = new google.maps.weather.CloudLayer(options);
+      for (var eventName in events) {
+        google.maps.event.addListener(layer, eventName, events[eventName]);
+      }
+      return layer;
+    };
+    
+    return {
+      restrict: 'E',
+      require: '^map',
+
+      link: function(scope, element, attrs, mapController) {
+        var orgAttrs = parser.orgAttributes(element);
+        var filtered = parser.filter(attrs);
+        var options = parser.getOptions(filtered);
+        var events = parser.getEvents(scope, filtered);
+        void 0;
+
+        var layer = getLayer(options, events);
+        mapController.addObject('cloudLayers', layer);
+        mapController.observeAttrSetObj(orgAttrs, attrs, layer);  //observers
+        element.bind('$destroy', function() {
+          mapController.deleteObject('cloudLayers', layer);
+        });
+      }
+     }; // return
+  }]);
+})();
+
+/**
+ * @ngdoc directive
+ * @name custom-control
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @param $compile {service} AngularJS $compile service
+ * @description 
+ *   Build custom control and set to the map with position
+ *   
+ *   Requires:  map directive
+ *
+ *   Restrict To:  Element
+ *
+ * @attr {String} position position of this control
+ *        i.e. TOP_RIGHT
+ * @attr {Number} index index of the control
+ * @example
+ *
+ * Example: 
+ *  <map center="41.850033,-87.6500523" zoom="3">
+ *    <custom-control id="home" position="TOP_LEFT" index="1">
+ *      <div style="background-color: white;">
+ *        <b>Home</b>
+ *      </div>
+ *    </custom-control>
+ *  </map>
+ *
+ */
+(function() {
+  'use strict';
+  angular.module('ngMap').directive('customControl', ['Attr2Options', '$compile', function(Attr2Options, $compile)  {
+    'use strict';
+    var parser = Attr2Options;
+
+    return {
+      restrict: 'E',
+      require: '^map',
+      link: function(scope, element, attrs, mapController) {
+        var orgAttrs = parser.orgAttributes(element);
+        var filtered = parser.filter(attrs);
+        var options = parser.getOptions(filtered, scope);
+        var events = parser.getEvents(scope, filtered);
+        void 0;
+
+        /**
+         * build a custom control element
+         */
+        var customControlEl = element[0].parentElement.removeChild(element[0]);
+        $compile(customControlEl.innerHTML.trim())(scope);
+
+        /**
+         * set events
+         */
+        for (var eventName in events) {
+          google.maps.event.addDomListener(customControlEl, eventName, events[eventName]);
+        }
+
+        mapController.addObject('customControls', customControlEl);
+        scope.$on('mapInitialized', function(evt, map) {
+          var position = options.position;
+          map.controls[google.maps.ControlPosition[position]].push(customControlEl);
+        });
+
+      } //link
+    }; // return
+  }]);// function
+})();
+
+/**
+ * @ngdoc directive
+ * @memberof ngmap
+ * @name custom-marker
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @param $timeout {service} AngularJS $timeout
+ * @description
+ *   Marker with html
+ *   Requires:  map directive
+ *   Restrict To:  Element
+ *
+ * @attr {String} position required, position on map
+ * @attr {Number} z-index optional
+ * @attr {Boolean} visible optional
+ * @example
+ *
+ * Example:
+ *   <map center="41.850033,-87.6500523" zoom="3">
+ *     <custom-marker position="41.850033,-87.6500523">
+ *       <div>
+ *         <b>Home</b>
+ *       </div>
+ *     </custom-marker>
+ *   </map>
+ *
+ */
+(function() {
+  'use strict';
+  var parser, $timeout, $compile;
+
+  var CustomMarker = function(options) {
+    options = options || {};
+
+    this.el = document.createElement('div');
+    this.el.style.display = 'inline-block';
+    this.visible = true;
+    for (var key in options) { /* jshint ignore:line */
+     this[key] = options[key];
+    }
+  };
+
+  var setCustomMarker = function() {
+
+    CustomMarker.prototype = new google.maps.OverlayView();
+
+    CustomMarker.prototype.setContent = function(html, scope) {
+      this.el.innerHTML = html;
+      this.el.style.position = 'absolute';
+      if (scope) {
+        $compile(angular.element(this.el).contents())(scope);
+      }
+    };
+
+    CustomMarker.prototype.setPosition = function(position) {
+      position && (this.position = position); /* jshint ignore:line */
+      if (this.getProjection() && typeof this.position.lng == 'function') {
+        var posPixel = this.getProjection().fromLatLngToDivPixel(this.position);
+        var x = Math.round(posPixel.x - (this.el.offsetWidth/2));
+        var y = Math.round(posPixel.y - this.el.offsetHeight - 10); // 10px for anchor
+        this.el.style.left = x + "px";
+        this.el.style.top = y + "px";
+      }
+    };
+
+    CustomMarker.prototype.setZIndex = function(zIndex) {
+      zIndex && (this.zIndex = zIndex); /* jshint ignore:line */
+      this.el.style.zIndex = this.zIndex;
+    };
+
+    CustomMarker.prototype.setVisible = function(visible) {
+      this.el.style.display = visible ? 'inline-block' : 'none';
+      this.visible = visible;
+    };
+
+    CustomMarker.prototype.addClass = function(className) {
+      var classNames = this.el.className.trim().split(' ');
+      (classNames.indexOf(className) == -1) && classNames.push(className); /* jshint ignore:line */
+      this.el.className = classNames.join(' ');
+    };
+
+    CustomMarker.prototype.removeClass = function(className) {
+      var classNames = this.el.className.split(' ');
+      var index = classNames.indexOf(className);
+      (index > -1) && classNames.splice(index, 1); /* jshint ignore:line */
+      this.el.className = classNames.join(' ');
+    };
+
+    CustomMarker.prototype.onAdd = function() {
+      this.getPanes().overlayMouseTarget.appendChild(this.el);
+    };
+
+    CustomMarker.prototype.draw = function() {
+      this.setPosition();
+      this.setZIndex(this.zIndex);
+      this.setVisible(this.visible);
+    };
+
+    CustomMarker.prototype.onRemove = function() {
+      this.el.parentNode.removeChild(this.el);
+      this.el = null;
+    };
+  };
+
+  var linkFunc = function(orgHtml, varsToWatch) {
+    //console.log('orgHtml', orgHtml, 'varsToWatch', varsToWatch);
+
+    return function(scope, element, attrs, mapController) {
+
+      var orgAttrs = parser.orgAttributes(element);
+      var filtered = parser.filter(attrs);
+      var options = parser.getOptions(filtered, scope);
+      var events = parser.getEvents(scope, filtered);
+
+      /**
+       * build a custom marker element
+       */
+      var removedEl = element[0].parentElement.removeChild(element[0]);
+      void 0;
+      var customMarker = new CustomMarker(options);
+
+      $timeout(function() { //apply contents, class, and location after it is compiled
+        scope.$watch('[' + varsToWatch.join(',') + ']', function(val) {
+          customMarker.setContent(orgHtml, scope);
+        });
+
+        customMarker.setContent(removedEl.innerHTML, scope);
+        var classNames = removedEl.firstElementChild.className;
+        customMarker.addClass('custom-marker');
+        customMarker.addClass(classNames);
+        void 0;
+
+        if (!(options.position instanceof google.maps.LatLng)) {
+          mapController.getGeoLocation(options.position).then(
+            function(latlng) {
+              customMarker.setPosition(latlng);
+            }
+          );
+        }
+      });
+
+      void 0;
+      for (var eventName in events) { /* jshint ignore:line */
+        google.maps.event.addDomListener(
+          customMarker.el, eventName, events[eventName]);
+      }
+      mapController.addObject('customMarkers', customMarker);
+
+      element.bind('$destroy', function() {
+        //Is it required to remove event listeners when DOM is removed?
+        mapController.deleteObject('customMarkers', customMarker);
+      });
+
+    }; // linkFunc
+  };
+
+  var customMarkerDirective = function(Attr2Options, _$timeout_, _$compile_)  {
+    parser = Attr2Options;
+    $timeout = _$timeout_;
+    $compile = _$compile_;
+    setCustomMarker();
+
+    return {
+      restrict: 'E',
+      require: '^map',
+      compile: function(element) {
+        var orgHtml = element.html();
+        var matches = orgHtml.match(/{{([^}]+)}}/g);
+        var varsToWatch = [];
+        (matches || []).forEach(function(match) { //filter out that contains '::', 'this.'
+          var toWatch = match.replace('{{','').replace('}}','');
+          if (match.indexOf('::') == -1 && match.indexOf('this.') == -1 && varsToWatch.indexOf(toWatch) == -1) {
+            varsToWatch.push(match.replace('{{','').replace('}}',''));
+          }
+        });
+
+        return linkFunc(orgHtml, varsToWatch);
+      }
+    }; // return
+  };// function
+  customMarkerDirective.$inject = ['Attr2Options', '$timeout', '$compile'];
+
+  angular.module('ngMap').directive('customMarker', customMarkerDirective);
+})();
+
+/**
+ * @ngdoc directive
+ * @name directions
+ * @description 
+ *   Enable directions on map. e.g., origin, destination, draggable, waypoints, etc
+ *   
+ *   Requires:  map directive
+ *
+ *   Restrict To:  Element 
+ *
+ * @attr {String} DirectionsRendererOptions [Any DirectionsRendererOptions](https://developers.google.com/maps/documentation/javascript/reference#DirectionsRendererOptions)
+ * @attr {String} DirectionsRequestOptions [Any DirectionsRequest options](https://developers.google.com/maps/documentation/javascript/reference#DirectionsRequest)
+ * @example
+ * Example: 
+ *   <map zoom="14" center="37.7699298, -122.4469157">
+ *     <directions 
+ *       draggable="true"
+ *       panel="directions-panel"
+ *       travel-mode="{{travelMode}}"
+ *       waypoints="[{location:'kingston', stopover:true}]"
+ *       origin="{{origin}}"
+ *       destination="{{destination}}">
+ *     </directions>
+ *   </map> 
+ */
+/* global google */
+(function() {
+  'use strict';
+
+  var getDirectionsRenderer = function(options, events) {
+    if (options.panel) {
+      options.panel = document.getElementById(options.panel) || document.querySelector(options.panel);
+    }
+    var renderer = new google.maps.DirectionsRenderer(options);
+    for (var eventName in events) {
+      google.maps.event.addListener(renderer, eventName, events[eventName]);
+    }
+    return renderer;
+  };
+
+  var directions = function(Attr2Options, $timeout, NavigatorGeolocation) {
+    var parser = Attr2Options;
+    var directionsService = new google.maps.DirectionsService();
+
+    var updateRoute = function(renderer, options) {
+      /* filter out valid keys only for DirectionsRequest object*/
+      var request = options;
+      request.travelMode = request.travelMode || 'DRIVING';
+      var validKeys = [
+        'origin', 'destination', 'travelMode', 'transitOptions', 'unitSystem',
+        'durationInTraffic', 'waypoints', 'optimizeWaypoints', 
+        'provideRouteAlternatives', 'avoidHighways', 'avoidTolls', 'region'
+      ];
+      for(var key in request){
+        (validKeys.indexOf(key) === -1) && (delete request[key]);
+      }
+
+      if(request.waypoints) {
+        // Check fo valid values
+        if(request.waypoints == "[]" || request.waypoints == "")  delete request.waypoints;
+      }
+
+      var showDirections = function(request) {
+        void 0;
+        directionsService.route(request, function(response, status) {
+          if (status == google.maps.DirectionsStatus.OK) {
+            $timeout(function() {
+              renderer.setDirections(response);
+            });
+          }
+        });
+      };
+
+      if (request.origin && request.destination) {
+        if (request.origin == 'current-location') {
+          NavigatorGeolocation.getCurrentPosition().then(function(ll) {
+            request.origin = new google.maps.LatLng(ll.coords.latitude, ll.coords.longitude);
+            showDirections(request);
+          });
+        } else if (request.destination == 'current-location') {
+          NavigatorGeolocation.getCurrentPosition().then(function(ll) {
+            request.destination = new google.maps.LatLng(ll.coords.latitude, ll.coords.longitude);
+            showDirections(request);
+          });
+        } else {
+          showDirections(request);
+        }
+      } 
+    };
+
+    var linkFunc = function(scope, element, attrs, mapController) {
+      var orgAttrs = parser.orgAttributes(element);
+      var filtered = parser.filter(attrs);
+      var options = parser.getOptions(filtered);
+      var events = parser.getEvents(scope, filtered);
+      var attrsToObserve = parser.getAttrsToObserve(orgAttrs);
+
+      var renderer = getDirectionsRenderer(options, events);
+      mapController.addObject('directionsRenderers', renderer);
+      
+      attrsToObserve.forEach(function(attrName) {
+        (function(attrName) {
+          attrs.$observe(attrName, function(val) {
+            if (attrName == 'panel') {
+              $timeout(function(){
+                var panel = document.getElementById(val) || document.querySelector(val);
+                void 0;
+                panel && renderer.setPanel(panel);
+              });
+            } else if (options[attrName] !== val) { //apply only if changed
+              var optionValue = parser.toOptionValue(val, {key: attrName});
+              void 0;
+              options[attrName] = optionValue;
+              updateRoute(renderer, options);
+            }
+          });
+        })(attrName);
+      });
+
+      scope.$on('mapInitialized', function(event, map) {
+        updateRoute(renderer, options);
+      });
+      scope.$on('$destroy', function(event, map) {
+        mapController.deleteObject('directionsRenderers', renderer);
+      });
+    };
+    
+    return {
+      restrict: 'E',
+      require: '^map',
+      link: linkFunc
+    }
+  }; // var directions
+  directions.$inject = ['Attr2Options', '$timeout', 'NavigatorGeolocation'];
+
+  angular.module('ngMap').directive('directions', directions);
+})();
+
+
+/**
+ * @ngdoc directive
+ * @name drawing-manager
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @description
+ *   Requires:  map directive
+ *   Restrict To:  Element
+ *
+ * @example
+ * Example:
+ *
+ *  <map zoom="13" center="37.774546, -122.433523" map-type-id="SATELLITE">
+ *    <drawing-manager  on-overlaycomplete="onMapOverlayCompleted()" position="ControlPosition.TOP_CENTER" drawingModes="POLYGON,CIRCLE" drawingControl="true" circleOptions="fillColor: '#FFFF00';fillOpacity: 1;strokeWeight: 5;clickable: false;zIndex: 1;editable: true;" ></drawing-manager>
+ *  </map>
+ *
+ *  TODO: Add remove button.
+ *  currently, for out solution, we have the shapes/markers in our own controller, and we use some css classes to change the shape button
+ *  to a remove button (<div>X</div>) and have the remove operation in our own controller.
+ */
+(function() {
+  'use strict';
+  angular.module('ngMap').directive('drawingManager', ['Attr2Options', function(Attr2Options) {
+    var parser = Attr2Options;
+
+    return {
+      restrict: 'E',
+      require: '^map',
+
+      link: function(scope, element, attrs, mapController) {
+        var orgAttrs = parser.orgAttributes(element);
+        var filtered = parser.filter(attrs);
+        var options = parser.getOptions(filtered);
+        var controlOptions = parser.getControlOptions(filtered);
+        var events = parser.getEvents(scope, filtered);
+
+        void 0;
+
+        /**
+         * set options
+         */
+        var drawingManager = new google.maps.drawing.DrawingManager({
+          drawingMode: options.drawingmode,
+          drawingControl: options.drawingcontrol,
+          drawingControlOptions: controlOptions.drawingControlOptions,
+          circleOptions:options.circleoptions,
+          markerOptions:options.markeroptions,
+          polygonOptions:options.polygonoptions,
+          polylineOptions:options.polylineoptions,
+          rectangleOptions:options.rectangleoptions
+        });
+
+
+        /**
+         * set events
+         */
+        var events = parser.getEvents(scope, filtered);
+        for (var eventName in events) {
+          google.maps.event.addListener(drawingManager, eventName, events[eventName]);
+        }
+
+        mapController.addObject('mapDrawingManager', drawingManager);
+      }
+    }; // return
+  }]);
+})();
+
+/**
+ * @ngdoc directive
+ * @name dynamic-maps-engine-layer
+ * @description 
+ *   Requires:  map directive
+ *   Restrict To:  Element
+ *
+ * @example
+ * Example: 
+ *   <map zoom="14" center="[59.322506, 18.010025]">
+ *     <dynamic-maps-engine-layer layer-id="06673056454046135537-08896501997766553811"></dynamic-maps-engine-layer>
+ *    </map>
+ */
+(function() {
+  'use strict';
+
+  angular.module('ngMap').directive('dynamicMapsEngineLayer', ['Attr2Options', function(Attr2Options) {
+    var parser = Attr2Options;
+
+    var getDynamicMapsEngineLayer = function(options, events) {
+      var layer = new google.maps.visualization.DynamicMapsEngineLayer(options);
+
+      for (var eventName in events) {
+        google.maps.event.addListener(layer, eventName, events[eventName]);
+      }
+
+      return layer;
+    };
+
+    
+    return {
+      restrict: 'E',
+      require: '^map',
+
+      link: function(scope, element, attrs, mapController) {
+        var filtered = parser.filter(attrs);
+        var options = parser.getOptions(filtered);
+        var events = parser.getEvents(scope, filtered, events);
+        void 0;
+
+        var layer = getDynamicMapsEngineLayer(options, events);
+        mapController.addObject('mapsEngineLayers', layer);
+      }
+     }; // return
+  }]);
+})();
+
+/**
+ * @ngdoc directive
+ * @name fusion-tables-layer
+ * @description 
+ *   Requires:  map directive
+ *   Restrict To:  Element
+ *
+ * @example
+ * Example: 
+ *   <map zoom="11" center="41.850033, -87.6500523">
+ *     <fusion-tables-layer query="{
+ *       select: 'Geocodable address',
+ *       from: '1mZ53Z70NsChnBMm-qEYmSDOvLXgrreLTkQUvvg'}">
+ *     </fusion-tables-layer>
+ *   </map>
+ */
+(function() {
+  'use strict';
+
+  angular.module('ngMap').directive('fusionTablesLayer', ['Attr2Options', function(Attr2Options) {
+    var parser = Attr2Options;
+
+    var getLayer = function(options, events) {
+      var layer = new google.maps.FusionTablesLayer(options);
+
+      for (var eventName in events) {
+        google.maps.event.addListener(layer, eventName, events[eventName]);
+      }
+
+      return layer;
+    };
+
+    
+    return {
+      restrict: 'E',
+      require: '^map',
+
+      link: function(scope, element, attrs, mapController) {
+        var filtered = parser.filter(attrs);
+        var options = parser.getOptions(filtered);
+        var events = parser.getEvents(scope, filtered, events);
+        void 0;
+
+        var layer = getLayer(options, events);
+        mapController.addObject('fusionTablesLayers', layer);
+      }
+     }; // return
+  }]);
+})();
+
+/**
+ * @ngdoc directive
+ * @name heatmap-layer
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @description 
+ *   Requires:  map directive
+ *   Restrict To:  Element
+ *
+ * @example
+ * Example: 
+ *
+ *   <map zoom="11" center="[41.875696,-87.624207]">
+ *     <heatmap-layer data="taxiData"></heatmap-layer>
+ *   </map>
+ */
+(function() {
+  'use strict';
+
+  angular.module('ngMap').directive('heatmapLayer', ['Attr2Options', '$window', function(Attr2Options, $window) {
+    var parser = Attr2Options;
+    
+    return {
+      restrict: 'E',
+      require: '^map',
+
+      link: function(scope, element, attrs, mapController) {
+        var filtered = parser.filter(attrs);
+
+        /**
+         * set options 
+         */
+        var options = parser.getOptions(filtered);
+        options.data = $window[attrs.data] || scope[attrs.data];
+        if (options.data instanceof Array) {
+          options.data = new google.maps.MVCArray(options.data);
+        } else {
+          throw "invalid heatmap data";
+        }
+        var layer = new google.maps.visualization.HeatmapLayer(options);
+
+        /**
+         * set events 
+         */
+        var events = parser.getEvents(scope, filtered);
+        void 0;
+
+        mapController.addObject('heatmapLayers', layer);
+      }
+     }; // return
+  }]);
+})();
+
+/**
+ * @ngdoc directive
+ * @name info-window
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @param $compile {service} $compile service
+ * @description
+ *   Defines infoWindow and provides compile method
+ *
+ *   Requires:  map directive
+ *
+ *   Restrict To:  Element
+ *
+ *   NOTE: this directive should **NOT** be used with `ng-repeat` because InfoWindow itself is a template,
+ *   and must be reused by each marker, thus, should not be redefined by `ng-repeat`.
+ *
+ * @attr {Boolean} visible Indicates to show it when map is initialized
+ * @attr {Boolean} visible-on-marker Indicates to show it on a marker when map is initialized
+ * @attr {Expression} geo-callback if position is an address, the expression is will be performed when geo-lookup is successful. e.g., geo-callback="showDetail()"
+ * @attr {String} &lt;InfoWindowOption> Any InfoWindow options,
+ *       https://developers.google.com/maps/documentation/javascript/reference?csw=1#InfoWindowOptions
+ * @attr {String} &lt;InfoWindowEvent> Any InfoWindow events, https://developers.google.com/maps/documentation/javascript/reference
+ * @example
+ * Usage:
+ *   <map MAP_ATTRIBUTES>
+ *    <info-window id="foo" ANY_OPTIONS ANY_EVENTS"></info-window>
+ *   </map>
+ *
+ * Example:
+ *  <map center="41.850033,-87.6500523" zoom="3">
+ *    <info-window id="1" position="41.850033,-87.6500523" >
+ *      <div ng-non-bindable>
+ *        Chicago, IL<br/>
+ *        LatLng: {{chicago.lat()}}, {{chicago.lng()}}, <br/>
+ *        World Coordinate: {{worldCoordinate.x}}, {{worldCoordinate.y}}, <br/>
+ *        Pixel Coordinate: {{pixelCoordinate.x}}, {{pixelCoordinate.y}}, <br/>
+ *        Tile Coordinate: {{tileCoordinate.x}}, {{tileCoordinate.y}} at Zoom Level {{map.getZoom()}}
+ *      </div>
+ *    </info-window>
+ *  </map>
+ */
+/* global google */
+(function() {
+  'use strict';
+
+  var infoWindow = function(Attr2Options, $compile, $timeout, $parse)  {
+    var parser = Attr2Options;
+
+    var getInfoWindow = function(options, events, element) {
+      var infoWindow;
+
+      /**
+       * set options
+       */
+      if (options.position && !(options.position instanceof google.maps.LatLng)) {
+        delete options.position;
+      }
+      infoWindow = new google.maps.InfoWindow(options);
+
+      /**
+       * set events
+       */
+      if (Object.keys(events).length > 0) {
+        void 0;
+      }
+      for (var eventName in events) {
+        if (eventName) {
+          google.maps.event.addListener(infoWindow, eventName, events[eventName]);
+        }
+      }
+
+      /**
+       * set template ane template-relate functions
+       * it must have a container element with ng-non-bindable
+       */
+      var template = element.html().trim();
+      if (angular.element(template).length != 1) {
+        throw "info-window working as a template must have a container";
+      }
+      infoWindow.__template = template.replace(/\s?ng-non-bindable[='"]+/,"");
+
+      infoWindow.__compile = function(scope, anchor) {
+        anchor && (scope['this'] = anchor);
+        var el = $compile(infoWindow.__template)(scope);
+        infoWindow.setContent(el[0]);
+        scope.$apply();
+      };
+
+      infoWindow.__open = function(map, scope, anchor) {
+        $timeout(function() {
+          infoWindow.__compile(scope, anchor);
+          if (anchor && anchor.getPosition) {
+            infoWindow.open(map, anchor);
+          } else if (anchor && anchor instanceof google.maps.LatLng) {
+            infoWindow.open(map);
+            infoWindow.setPosition(anchor);
+          } else {
+            infoWindow.open(map);
+          }
+        });
+      };
+
+      return infoWindow;
+    };
+
+    var linkFunc = function(scope, element, attrs, mapController) {
+      element.css('display','none');
+
+      var orgAttrs = parser.orgAttributes(element);
+      var filtered = parser.filter(attrs);
+      var options = parser.getOptions(filtered, scope);
+      var events = parser.getEvents(scope, filtered);
+      void 0;
+
+      var address;
+      if (options.position && !(options.position instanceof google.maps.LatLng)) {
+        address = options.position;
+      }
+      var infoWindow = getInfoWindow(options, events, element);
+      if (address) {
+        mapController.getGeoLocation(address).then(function(latlng) {
+          infoWindow.setPosition(latlng);
+          infoWindow.__open(mapController.map, scope, latlng);
+          var geoCallback = attrs.geoCallback;
+          geoCallback && $parse(geoCallback)(scope);
+        });
+      }
+
+      mapController.addObject('infoWindows', infoWindow);
+      mapController.observeAttrSetObj(orgAttrs, attrs, infoWindow); /* observers */
+
+      scope.$on('mapInitialized', function(evt, map) {
+        infoWindow.visible && infoWindow.__open(map, scope);
+        if (infoWindow.visibleOnMarker) {
+          var markerId = infoWindow.visibleOnMarker;
+          infoWindow.__open(map, scope, map.markers[markerId]);
+        }
+      });
+
+      /**
+       * provide showInfoWindow method to scope
+       */
+
+      scope.showInfoWindow  = function(e, id, marker) {
+        var infoWindow = mapController.map.infoWindows[id];
+        var anchor = marker ? marker : (this.getPosition ? this : null);
+        infoWindow.__open(mapController.map, scope, anchor);
+        if(mapController.singleInfoWindow) {
+          if(mapController.lastInfoWindow) scope.hideInfoWindow(e, mapController.lastInfoWindow);
+          mapController.lastInfoWindow = id;
+        }
+      };
+
+      /**
+       * provide hideInfoWindow method to scope
+       */
+      scope.hideInfoWindow  = scope.hideInfoWindow ||
+        function(event, id) {
+          var infoWindow = mapController.map.infoWindows[id];
+          infoWindow.close();
+        };
+
+    }; //link
+
+    return {
+      restrict: 'E',
+      require: '^map',
+      link: linkFunc
+    };
+
+  }; // infoWindow
+  infoWindow.$inject = ['Attr2Options', '$compile', '$timeout', '$parse'];
+
+  angular.module('ngMap').directive('infoWindow', infoWindow);
+})();
+
+/**
+ * @ngdoc directive
+ * @name kml-layer
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @description 
+ *   renders Kml layer on a map
+ *   Requires:  map directive
+ *   Restrict To:  Element
+ *
+ * @attr {Url} url url of the kml layer
+ * @attr {KmlLayerOptions} KmlLayerOptions
+ *   (https://developers.google.com/maps/documentation/javascript/reference#KmlLayerOptions)  
+ * @attr {String} &lt;KmlLayerEvent> Any KmlLayer events, https://developers.google.com/maps/documentation/javascript/reference
+ * @example
+ * Usage: 
+ *   <map MAP_ATTRIBUTES>
+ *    <kml-layer ANY_KML_LAYER ANY_KML_LAYER_EVENTS"></kml-layer>
+ *   </map>
+ *
+ * Example: 
+ *
+ *   <map zoom="11" center="[41.875696,-87.624207]">
+ *     <kml-layer url="https://gmaps-samples.googlecode.com/svn/trunk/ggeoxml/cta.kml" ></kml-layer>
+ *    </map>
+ */
+(function() {
+  'use strict';
+
+  angular.module('ngMap').directive('kmlLayer', ['Attr2Options', function(Attr2Options) {
+    var parser = Attr2Options;
+    
+    var getKmlLayer = function(options, events) {
+      var kmlLayer = new google.maps.KmlLayer(options);
+      for (var eventName in events) {
+        google.maps.event.addListener(kmlLayer, eventName, events[eventName]);
+      }
+      return kmlLayer;
+    };
+    
+    return {
+      restrict: 'E',
+      require: '^map',
+
+      link: function(scope, element, attrs, mapController) {
+        var orgAttrs = parser.orgAttributes(element);
+        var filtered = parser.filter(attrs);
+        var options = parser.getOptions(filtered);
+        var events = parser.getEvents(scope, filtered);
+        void 0;
+
+        var kmlLayer = getKmlLayer(options, events);
+        mapController.addObject('kmlLayers', kmlLayer);
+        mapController.observeAttrSetObj(orgAttrs, attrs, kmlLayer);  //observers
+        element.bind('$destroy', function() {
+          mapController.deleteObject('kmlLayers', kmlLayer);
+        });
+      }
+     }; // return
+  }]);
+})();
+
+/**
+ * @ngdoc directive
+ * @name map-data
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @description 
+ *   set map data
+ *   Requires:  map directive
+ *   Restrict To:  Element
+ *
+ * @wn {String} method-name, run map.data[method-name] with attribute value
+ * @example
+ * Example: 
+ *
+ *   <map zoom="11" center="[41.875696,-87.624207]">
+ *     <map-data load-geo-json="https://storage.googleapis.com/maps-devrel/google.json"></map-data>
+ *    </map>
+ */
+(function() {
+  'use strict';
+
+  angular.module('ngMap').directive('mapData', ['Attr2Options', function(Attr2Options) {
+    var parser = Attr2Options;
+    
+    return {
+      restrict: 'E',
+      require: '^map',
+
+      link: function(scope, element, attrs, mapController) {
+        var filtered = parser.filter(attrs);
+        var options = parser.getOptions(filtered);
+        var events = parser.getEvents(scope, filtered, events);
+
+        void 0;
+        scope.$on('mapInitialized', function(event, map) {
+          /**
+           * options
+           */
+          for (var key in options) {
+            if (key) {
+              var val = options[key];
+              if (typeof scope[val] === "function") {
+                map.data[key](scope[val]);
+              } else {
+                map.data[key](val);
+              }
+            } // if (key)
+          }
+
+          /**
+           * events
+           */
+          for (var eventName in events) {
+            if (events[eventName]) {
+              map.data.addListener(eventName, events[eventName]);
+            }
+          }
+        });
+      }
+     }; // return
+  }]);
+})();
+
+/**
+ * @ngdoc directive
+ * @name map-lazy-load
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @description 
+ *   Requires: Delay the initialization of map directive until the map is ready to be rendered
+ *   Restrict To: Attribute 
+ *
+ * @attr {String} map-lazy-load
+      Maps api script source file location.
+ *    Example:  
+ *      'https://maps.google.com/maps/api/js'   
+ * @attr {String} map-lazy-load-params
+     Maps api script source file location via angular scope variable.
+     Also requires the map-lazy-load attribute to be present in the directive.
+     Example: In your controller, set 
+       $scope.googleMapsURL = 'https://maps.google.com/maps/api/js?v=3.20&client=XXXXXenter-api-key-hereXXXX'
+
+ * @example
+ * Example: 
+ *
+ *   <div map-lazy-load="http://maps.google.com/maps/api/js">
+ *     <map center="Brampton" zoom="10">
+ *       <marker position="Brampton"></marker>
+ *     </map>
+ *   </div>
+ *
+ *   <div map-lazy-load="http://maps.google.com/maps/api/js" 
+ *        map-lazy-load-params="{{googleMapsUrl}}">
+ *     <map center="Brampton" zoom="10">
+ *       <marker position="Brampton"></marker>
+ *     </map>
+ *   </div>
+ */
+(function() {
+  'use strict';
+  var $timeout, $compile, src, savedHtml;
+
+  var preLinkFunc = function(scope, element, attrs) {
+    var mapsUrl = attrs.mapLazyLoadParams || attrs.mapLazyLoad;    
+    
+    window.lazyLoadCallback = function() {
+      void 0;
+      $timeout(function() { /* give some time to load */
+        element.html(savedHtml);
+        $compile(element.contents())(scope);
+      }, 100);
+    };
+
+    if(window.google === undefined || window.google.maps === undefined) {
+      var scriptEl = document.createElement('script');
+      void 0;
+      scriptEl.src = mapsUrl + (mapsUrl.indexOf('?') > -1 ? '&' : '?') + 'callback=lazyLoadCallback';
+      document.body.appendChild(scriptEl);
+    } else {
+      element.html(savedHtml);
+      $compile(element.contents())(scope);
+    }
+  };
+
+  var compileFunc = function(tElement, tAttrs) {
+
+    (!tAttrs.mapLazyLoad) && void 0;
+    savedHtml = tElement.html(); 
+    src = tAttrs.mapLazyLoad;
+
+    /**
+     * if already loaded, stop processing it
+     */
+    if (document.querySelector('script[src="'+src+(src.indexOf('?') > -1 ? '&' : '?')+'callback=lazyLoadCallback"]')) {
+      return false;
+    }
+
+    tElement.html('');  // will compile again after script is loaded
+    return {
+      pre: preLinkFunc
+    };
+  };
+
+  var mapLazyLoad = function(_$compile_, _$timeout_) {
+    $compile = _$compile_, $timeout = _$timeout_;
+    return {
+      compile: compileFunc
+    }
+  };
+  mapLazyLoad.$inject = ['$compile','$timeout'];
+
+  angular.module('ngMap').directive('mapLazyLoad', mapLazyLoad);
+})();
+
+/**
+ * @ngdoc directive
+ * @name map-type
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @description 
+ *   Requires:  map directive
+ *   Restrict To:  Element
+ *
+ * @example
+ * Example: 
+ *
+ *   <map zoom="13" center="34.04924594193164, -118.24104309082031">
+ *     <map-type name="coordinate" object="coordinateMapType"></map-type>
+ *   </map>
+ */
+(function() {
+  'use strict';
+
+  angular.module('ngMap').directive('mapType', ['Attr2Options', '$window', function(Attr2Options, $window) {
+    var parser = Attr2Options;
+    
+    return {
+      restrict: 'E',
+      require: '^map',
+
+      link: function(scope, element, attrs, mapController) {
+        var mapTypeName = attrs.name, mapTypeObject;
+        if (!mapTypeName) {
+          throw "invalid map-type name";
+        }
+        if (attrs.object) {
+          var __scope = scope[attrs.object] ? scope : $window;
+          mapTypeObject = __scope[attrs.object];
+          if (typeof mapTypeObject == "function") {
+            mapTypeObject = new mapTypeObject();
+          }
+        }
+        if (!mapTypeObject) {
+          throw "invalid map-type object";
+        }
+
+        scope.$on('mapInitialized', function(evt, map) {
+          map.mapTypes.set(mapTypeName, mapTypeObject);
+        });
+        mapController.addObject('mapTypes', mapTypeObject);
+      }
+     }; // return
+  }]);
+})();
+
+/**
+ * @ngdoc directive
+ * @memberof ngMap
+ * @name map
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @description
+ *   Implementation of {@link MapController}
+ *   Initialize a Google map within a `<div>` tag with given options and register events
+ *   It accepts children directives; marker, shape, or marker-clusterer
+ *
+ *   It initialize map, children tags, then emits message as soon as the action is done
+ *   The message emitted from this directive is;
+ *     . mapInitialized
+ *
+ *   Restrict To:
+ *     Element
+ *
+ * @attr {Expression} geo-callback if center is an address or current location, the expression is will be executed when geo-lookup is successful. e.g., geo-callback="showMyStoreInfo()"
+ * @attr {Array} geo-fallback-center
+ *    The center of map incase geolocation failed. i.e. [0,0]
+ * @attr {Object} geo-location-options
+ *    The navigator geolocation options. i.e. { maximumAge: 3000, timeout: 5000, enableHighAccuracy: true }. If none specified, { timeout: 5000 }. If timeout not specified, timeout: 5000 added
+ * @attr {Boolean} zoom-to-include-markers
+ *    When true, map boundary will be changed automatially to include all markers when initialized
+ * @attr {Boolean} default-style
+ *    When false, the default styling, `display:block;height:300px`, will be ignored.
+ * @attr {String} init-event The name of event to initialize this map.
+ *    If this option is given, the map won't be initialized until the event is received.
+ *    To invoke the event, use $scope.$emit or $scope.$broacast.
+ *    i.e. <map init-event="init-map" ng-click="$emit('init-map')" center=... ></map>
+ * @attr {String} &lt;MapOption> Any Google map options,
+ *    https://developers.google.com/maps/documentation/javascript/reference?csw=1#MapOptions
+ * @attr {String} &lt;MapEvent> Any Google map events,
+ *    https://rawgit.com/allenhwkim/angularjs-google-maps/master/build/map_events.html
+ * @attr {Boolean} single-info-window
+ *    When true the map will only display one info window at the time, if not set or false,
+ *    everytime an info window is open it will be displayed with the othe one.
+ * @example
+ * Usage:
+ *   <map MAP_OPTIONS_OR_MAP_EVENTS ..>
+ *     ... Any children directives
+ *   </map>
+ *
+ * Example:
+ *   <map center="[40.74, -74.18]" on-click="doThat()">
+ *   </map>
+ *
+ *   <map geo-fallback-center="[40.74, -74.18]" zoom-to-inlude-markers="true">
+ *   </map>
+ */
+/* global google */
+(function () {
+  'use strict';
+
+  function getStyle(el, styleProp) {
+    var y;
+    if (el.currentStyle) {
+      y = el.currentStyle[styleProp];
+    } else if (window.getComputedStyle) {
+      y = document.defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);
+    }
+    return y;
+  }
+
+  var mapDirective = function (Attr2Options, $timeout, $parse) {
+    var parser = Attr2Options;
+
+    /**
+     * Initialize map and events
+     * @memberof map
+     * @param {$scope} scope
+     * @param {angular.element} element
+     * @param {Hash} attrs
+     * @ctrl {MapController} ctrl
+     */
+    var linkFunc = function (scope, element, attrs, ctrl) {
+      var orgAttrs = parser.orgAttributes(element);
+
+      scope.google = google;  //used by $scope.eval in Attr2Options to avoid eval()
+
+      /**
+       * create a new `div` inside map tag, so that it does not touch map element
+       * https://stackoverflow.com/questions/20955356
+       */
+      var el = document.createElement("div");
+      el.style.width = "100%";
+      el.style.height = "100%";
+      element.prepend(el);
+
+      /**
+       * if style is not given to the map element, set display and height
+       */
+      if (attrs.defaultStyle !== 'false') {
+        if (getStyle(element[0], 'display') != "block") {
+          element.css('display', 'block');
+        }
+        if (getStyle(element[0], 'height').match(/^(0|auto)/)) {
+          element.css('height', '300px');
+        }
+      }
+
+      /**
+       * disable drag event
+       */
+      element[0].addEventListener('dragstart', function (event) {
+        event.preventDefault();
+        return false;
+      });
+
+      /**
+       * initialize function
+       */
+      var initializeMap = function (mapOptions, mapEvents) {
+        var map = new google.maps.Map(el, {});
+        map.markers = {};
+        map.shapes = {};
+
+        /**
+         * resize the map to prevent showing partially, in case intialized too early
+         */
+        $timeout(function () {
+          google.maps.event.trigger(map, "resize");
+        });
+
+        /**
+         * set options
+         */
+        mapOptions.zoom = mapOptions.zoom || 15;
+        var center = mapOptions.center;
+        if (!center) {
+          mapOptions.center = new google.maps.LatLng(0, 0);
+        } else if (!(center instanceof google.maps.LatLng)) {
+          delete mapOptions.center;
+          ctrl.getGeoLocation(center, options.geoLocationOptions).then(function (latlng) {
+            map.setCenter(latlng);
+            var geoCallback = attrs.geoCallback;
+            geoCallback && $parse(geoCallback)(scope);
+          }, function (error) {
+            map.setCenter(options.geoFallbackCenter);
+          });
+        }
+        map.setOptions(mapOptions);
+
+        ctrl.singleInfoWindow = mapOptions.singleInfoWindow;
+
+        /**
+         * set events
+         */
+        for (var eventName in mapEvents) {
+          if (eventName) {
+            google.maps.event.addListener(map, eventName, mapEvents[eventName]);
+          }
+        }
+
+        /**
+         * set observers
+         */
+        ctrl.observeAttrSetObj(orgAttrs, attrs, map);
+
+        /**
+         * set controller and set objects
+         * so that map can be used by other directives; marker or shape
+         * ctrl._objects are gathered when marker and shape are initialized before map is set
+         */
+        ctrl.map = map;
+        /* so that map can be used by other directives; marker or shape */
+        ctrl.addObjects(ctrl._objects);
+
+        // /* providing method to add a marker used by user scope */
+        // map.addMarker = ctrl.addMarker;
+
+        /**
+         * set map for scope and controller and broadcast map event
+         * scope.map will be overwritten if user have multiple maps in a scope,
+         * thus the last map will be set as scope.map.
+         * however an `mapInitialized` event will be emitted every time.
+         */
+        scope.map = map;
+        scope.map.scope = scope;
+        google.maps.event.addListenerOnce(map, "idle", function () {
+          scope.$emit('mapInitialized', map);
+          if (attrs.zoomToIncludeMarkers) {
+            ctrl.zoomToIncludeMarkers();
+            if (attrs.zoomToIncludeMarkers == 'auto') {
+              scope.$on('objectChanged', function (evt, msg) {
+                msg[0] == 'markers' && ctrl.zoomToIncludeMarkers();
+              });
+            }
+          }
+        });
+      }; // function initializeMap()
+
+      /**
+       * get map options and events
+       */
+      var filtered = parser.filter(attrs);
+      var options = parser.getOptions(filtered, scope);
+      var controlOptions = parser.getControlOptions(filtered);
+      var mapOptions = angular.extend(options, controlOptions);
+      var mapEvents = parser.getEvents(scope, filtered);
+      void 0;
+
+      if (attrs.initEvent) { // allows controlled initialization
+        scope.$on(attrs.initEvent, function () {
+          !ctrl.map && initializeMap(mapOptions, mapEvents); // init if not done
+        });
+      } else {
+        initializeMap(mapOptions, mapEvents);
+      } // if
+    };
+
+    return {
+      restrict: 'AE',
+      controller: 'MapController',
+      link: linkFunc
+    };
+  };
+
+  angular.module('ngMap').directive('map', ['Attr2Options', '$timeout', '$parse', mapDirective]);
+})();
+
+/* global google */
+(function() {
+  'use strict';
+
+  /**
+   * @ngdoc controller
+   * @name MapController
+   * @param $scope {service}
+   * @param $q {service} promise Q
+   * @param NavigatorGeolocation {service}
+   * @param GeoCoder {service}
+   * @param Attr2Options {service} convert html attribute to Gogole map api options
+   * @property {Hash} controls collection of Controls initiated within `map` directive
+   * @property {Hash} markers collection of Markers initiated within `map` directive
+   * @property {Hash} shapes collection of shapes initiated within `map` directive
+   */
+  var MapController = function($scope, $q, NavigatorGeolocation, GeoCoder, Attr2Options) { 
+    var parser = Attr2Options;
+    var _this = this;
+
+    var observeAndSet = function(attrs, attrName, object) {
+      attrs.$observe(attrName, function(val) {
+        if (val) {
+          void 0;
+          var setMethod = parser.camelCase('set-'+attrName);
+          var optionValue = parser.toOptionValue(val, {key: attrName});
+          void 0;
+          if (object[setMethod]) { //if set method does exist
+            /* if an location is being observed */
+            if (attrName.match(/center|position/) && 
+              typeof optionValue == 'string') {
+              _this.getGeoLocation(optionValue).then(function(latlng) {
+                object[setMethod](latlng);
+              });
+            } else {
+              object[setMethod](optionValue);
+            }
+          }
+        }
+      });
+    };
+
+    this.map = null;
+    this._objects = []; /* temporary collection of map objects */
+
+    /**
+     * Add an object to the collection of group
+     * @memberof MapController
+     * @function addObject
+     * @param groupName the name of collection that object belongs to
+     * @param obj  an object to add into a collection, i.e. marker, shape
+     */
+    this.addObject = function(groupName, obj) {
+      /**
+       * objects, i.e. markers and shapes, are initialized before map is initialized
+       * so, we collect those objects, then, we will add to map when map is initialized
+       * However the case as in ng-repeat, we can directly add to map
+       */
+      if (this.map) {
+        this.map[groupName] = this.map[groupName] || {};
+        var len = Object.keys(this.map[groupName]).length;
+        this.map[groupName][obj.id || len] = obj;
+        if (groupName != "infoWindows" && obj.setMap) { //infoWindow.setMap works like infoWindow.open
+          obj.setMap && obj.setMap(this.map);
+        }
+        if (obj.centered && obj.position) {
+          this.map.setCenter(obj.position);
+        }
+        $scope.$emit('objectChanged', [groupName, this.map[groupName]]);
+      } else {
+        obj.groupName = groupName;
+        this._objects.push(obj);
+      }
+    };
+
+    /**
+     * Delete an object from the collection and remove from map
+     * @memberof MapController
+     * @function deleteObject
+     * @param {Array} objs the collection of objects. i.e., map.markers
+     * @param {Object} obj the object to be removed. i.e., marker
+     */
+    this.deleteObject = function(groupName, obj) {
+      /* delete from group */
+      if (obj.map) {
+        var objs = obj.map[groupName];
+        for (var name in objs) {
+          objs[name] === obj && (delete objs[name]);
+        }
+
+        /* delete from map */
+        obj.map && obj.setMap && obj.setMap(null);
+        $scope.$emit('objectChanged', [groupName, this.map[groupName]]);
+      }
+    };
+
+    /**
+     * Add collected objects to map
+     * @memberof MapController
+     * @function addObjects
+     * @param {Array} objects the collection of objects. i.e., map.markers
+     */
+    this.addObjects = function(objects) {
+      for (var i=0; i<objects.length; i++) {
+        var obj=objects[i];
+        if (obj instanceof google.maps.Marker) {
+          this.addObject('markers', obj);
+        } else if (obj instanceof google.maps.Circle ||
+          obj instanceof google.maps.Polygon ||
+          obj instanceof google.maps.Polyline ||
+          obj instanceof google.maps.Rectangle ||
+          obj instanceof google.maps.GroundOverlay) {
+          this.addObject('shapes', obj);
+        } else {
+          this.addObject(obj.groupName, obj);
+        }
+      }
+    };
+
+    /**
+     * returns the location of an address or 'current-location'
+     * @memberof MapController
+     * @function getGeoLocation
+     * @param {String} string an address to find the location
+     * @param {Object} geoLocationOptions the navigator geolocation options. i.e. { maximumAge: 3000, timeout: 5000, enableHighAccuracy: true }. If none specified, { timeout: 5000 }. If timeout not specified, timeout: 5000 added
+     * @returns {Promise} latlng the location of the address
+     */
+    this.getGeoLocation = function(string, geoLocationOptions) {
+      var deferred = $q.defer();
+      if (!string || string.match(/^current/i)) { // current location
+        NavigatorGeolocation.getCurrentPosition(geoLocationOptions).then(
+          function(position) {
+            var lat = position.coords.latitude;
+            var lng = position.coords.longitude;
+            var latLng = new google.maps.LatLng(lat,lng);
+            deferred.resolve(latLng);
+          },
+          function(error) {
+            deferred.reject(error);
+          }
+        );
+      } else {
+        GeoCoder.geocode({address: string}).then(
+          function(results) {
+            deferred.resolve(results[0].geometry.location);
+          },
+          function(error) {
+            deferred.reject(error);
+          }
+        );
+      }
+
+      return deferred.promise;
+    };
+
+    /**
+     * watch changes of attribute values and do appropriate action based on attribute name
+     * @memberof MapController
+     * @function observeAttrSetObj
+     * @param {Hash} orgAttrs attributes before its initialization
+     * @param {Hash} attrs    attributes after its initialization
+     * @param {Object} obj    map object that an action is to be done
+     */
+    this.observeAttrSetObj = function(orgAttrs, attrs, obj) {
+      var attrsToObserve = parser.getAttrsToObserve(orgAttrs);
+      if (Object.keys(attrsToObserve).length) {
+        void 0;
+      }
+      for (var i=0; i<attrsToObserve.length; i++) {
+        observeAndSet(attrs, attrsToObserve[i], obj);
+      }
+    };
+
+    /**
+     * include all markers
+     */
+    this.zoomToIncludeMarkers = function() {
+      var bounds = new google.maps.LatLngBounds();
+      for (var marker in this.map.markers) {
+        bounds.extend(this.map.markers[marker].getPosition());
+      }
+      this.map.fitBounds(bounds);
+    };
+
+  }; // MapController
+
+  MapController.$inject = ['$scope', '$q', 'NavigatorGeolocation', 'GeoCoder', 'Attr2Options'];
+  angular.module('ngMap').controller('MapController', MapController);
+})();
+
+/**
+ * @ngdoc directive
+ * @name maps-engine-layer
+ * @description 
+ *   Requires:  map directive
+ *   Restrict To:  Element
+ *
+ * @example
+ * Example: 
+ *   <map zoom="14" center="[59.322506, 18.010025]">
+ *     <maps-engine-layer layer-id="06673056454046135537-08896501997766553811"></maps-engine-layer>
+ *    </map>
+ */
+(function() {
+  'use strict';
+
+  angular.module('ngMap').directive('mapsEngineLayer', ['Attr2Options', function(Attr2Options) {
+    var parser = Attr2Options;
+
+    var getMapsEngineLayer = function(options, events) {
+      var layer = new google.maps.visualization.MapsEngineLayer(options);
+
+      for (var eventName in events) {
+        google.maps.event.addListener(layer, eventName, events[eventName]);
+      }
+
+      return layer;
+    };
+
+    
+    return {
+      restrict: 'E',
+      require: '^map',
+
+      link: function(scope, element, attrs, mapController) {
+        var filtered = parser.filter(attrs);
+        var options = parser.getOptions(filtered);
+        var events = parser.getEvents(scope, filtered, events);
+        void 0;
+
+        var layer = getMapsEngineLayer(options, events);
+        mapController.addObject('mapsEngineLayers', layer);
+      }
+     }; // return
+  }]);
+})();
+
+/**
+ * @ngdoc directive
+ * @name marker
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @param NavigatorGeolocation It is used to find the current location
+ * @description 
+ *   Draw a Google map marker on a map with given options and register events  
+ *   
+ *   Requires:  map directive
+ *
+ *   Restrict To:  Element 
+ *
+ * @attr {String} position address, 'current', or [latitude, longitude]  
+ *    example:  
+ *      '1600 Pennsylvania Ave, 20500  Washingtion DC',   
+ *      'current position',  
+ *      '[40.74, -74.18]'  
+ * @attr {Boolean} centered if set, map will be centered with this marker
+ * @attr {Expression} geo-callback if position is an address, the expression is will be performed when geo-lookup is successful. e.g., geo-callback="showStoreInfo()"
+ * @attr {Boolean} no-watcher if true, no attribute observer is added. Useful for many ng-repeat
+ * @attr {String} &lt;MarkerOption> [Any Marker options](https://developers.google.com/maps/documentation/javascript/reference?csw=1#MarkerOptions) 
+ * @attr {String} &lt;MapEvent> [Any Marker events](https://developers.google.com/maps/documentation/javascript/reference)
+ * @example
+ * Usage: 
+ *   <map MAP_ATTRIBUTES>
+ *    <marker ANY_MARKER_OPTIONS ANY_MARKER_EVENTS"></MARKER>
+ *   </map>
+ *
+ * Example: 
+ *   <map center="[40.74, -74.18]">
+ *    <marker position="[40.74, -74.18]" on-click="myfunc()"></div>
+ *   </map>
+ *
+ *   <map center="the cn tower">
+ *    <marker position="the cn tower" on-click="myfunc()"></div>
+ *   </map>
+ */
+/* global google */
+(function() {
+  'use strict';
+
+  var getMarker = function(options, events) {
+    var marker;
+
+    if (!(options.position instanceof google.maps.LatLng)) {
+      options.position = new google.maps.LatLng(0,0);
+    }
+    marker = new google.maps.Marker(options);
+
+    /**
+     * set events
+     */
+    if (Object.keys(events).length > 0) {
+      void 0;
+    }
+    for (var eventName in events) {
+      if (eventName) {
+        google.maps.event.addListener(marker, eventName, events[eventName]);
+      }
+    }
+
+    return marker;
+  };
+
+  var marker = function(Attr2Options, $parse) {
+    var parser = Attr2Options;
+    var linkFunc = function(scope, element, attrs, mapController) {
+      var orgAttrs = parser.orgAttributes(element);
+      var filtered = parser.filter(attrs);
+      var markerOptions = parser.getOptions(filtered, scope);
+      var markerEvents = parser.getEvents(scope, filtered);
+      void 0;
+
+      var address;
+      if (!(markerOptions.position instanceof google.maps.LatLng)) {
+        address = markerOptions.position;
+      }
+      var marker = getMarker(markerOptions, markerEvents);
+      mapController.addObject('markers', marker);
+      if (address) {
+        mapController.getGeoLocation(address).then(function(latlng) {
+          marker.setPosition(latlng);
+          markerOptions.centered && marker.map.setCenter(latlng);
+          var geoCallback = attrs.geoCallback;
+          geoCallback && $parse(geoCallback)(scope);
+        });
+      }
+
+      /**
+       * set observers
+       */
+      if (!markerOptions.noWatcher) {
+        void 0
+        mapController.observeAttrSetObj(orgAttrs, attrs, marker); /* observers */
+      }
+      element.bind('$destroy', function() {
+        mapController.deleteObject('markers', marker);
+      });
+    };
+
+    return {
+      restrict: 'E',
+      require: '^map',
+      link: linkFunc
+    };
+  };
+
+  marker.$inject = ['Attr2Options', '$parse'];
+  angular.module('ngMap').directive('marker', marker); 
+
+})();
+
+/**
+ * @ngdoc directive
+ * @name overlay-map-type
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @param $window {service} 
+ * @description 
+ *   Requires:  map directive
+ *   Restrict To:  Element
+ *
+ * @example
+ * Example: 
+ *
+ *   <map zoom="13" center="34.04924594193164, -118.24104309082031">
+ *     <overlay-map-type index="0" object="coordinateMapType"></map-type>
+ *   </map>
+ */
+(function() {
+  'use strict';
+
+  angular.module('ngMap').directive('overlayMapType', ['Attr2Options', '$window', function(Attr2Options, $window) {
+    var parser = Attr2Options;
+    
+    return {
+      restrict: 'E',
+      require: '^map',
+
+      link: function(scope, element, attrs, mapController) {
+        var overlayMapTypeObject;
+        var initMethod = attrs.initMethod || "insertAt";
+        if (attrs.object) {
+          var __scope = scope[attrs.object] ? scope : $window;
+          overlayMapTypeObject = __scope[attrs.object];
+          if (typeof overlayMapTypeObject == "function") {
+            overlayMapTypeObject = new overlayMapTypeObject();
+          }
+        }
+        if (!overlayMapTypeObject) {
+          throw "invalid map-type object";
+        }
+
+        scope.$on('mapInitialized', function(evt, map) {
+          if (initMethod == "insertAt") {
+            var index = parseInt(attrs.index, 10);
+            map.overlayMapTypes.insertAt(index, overlayMapTypeObject);
+          } else if (initMethod == "push") {
+            map.overlayMapTypes.push(overlayMapTypeObject);
+          }
+        });
+        mapController.addObject('overlayMapTypes', overlayMapTypeObject);
+      }
+     }; // return
+  }]);
+})();
+
+/**
+ * @ngdoc directive
+ * @name places-auto-complete
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @description 
+ *   Provides address auto complete feature to an input element
+ *   Requires: input tag
+ *   Restrict To: Attribute
+ *
+ * @attr {AutoCompleteOptions} [Any AutocompleteOptions](https://developers.google.com/maps/documentation/javascript/3.exp/reference#AutocompleteOptions)
+ *
+ * @example
+ * Example: 
+ *   <script src="https://maps.googleapis.com/maps/api/js?libraries=places"></script>
+ *   <input places-auto-complete types="['geocode']" on-place-changed="myCallback(place)" />
+ */
+/* global google */
+(function() {
+  'use strict';
+
+  var placesAutoComplete = function(Attr2Options, $timeout) {
+    var parser = Attr2Options;
+
+    var linkFunc = function(scope, element, attrs, ngModelCtrl) {
+      if (attrs.placesAutoComplete ==='false') {
+        return false;
+      }
+      var filtered = parser.filter(attrs);
+      var options = parser.getOptions(filtered);
+      var events = parser.getEvents(scope, filtered);
+      void 0;
+      var autocomplete = new google.maps.places.Autocomplete(element[0], options);
+      for (var eventName in events) {
+        google.maps.event.addListener(autocomplete, eventName, events[eventName]);
+      }
+
+      var updateModel = function() {
+        $timeout(function(){
+          ngModelCtrl && ngModelCtrl.$setViewValue(element.val());
+        },100);
+      }
+      google.maps.event.addListener(autocomplete, 'place_changed', updateModel);
+      element[0].addEventListener('change', updateModel);
+
+      attrs.$observe('types', function(val) {
+        if (val) {
+          void 0;
+          var optionValue = parser.toOptionValue(val, {key: 'types'});
+          void 0;
+          autocomplete.setTypes(optionValue);
+        }
+      });
+    };
+
+    return {
+      restrict: 'A',
+      require: '?ngModel',
+      link: linkFunc
+    };
+  };
+
+  placesAutoComplete.$inject = ['Attr2Options', '$timeout'];
+  angular.module('ngMap').directive('placesAutoComplete', placesAutoComplete); 
+
+})();
+
+/**
+ * @ngdoc directive
+ * @name shape
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @description 
+ *   Initialize a Google map shape in map with given options and register events  
+ *   The shapes are:
+ *     . circle
+ *     . polygon
+ *     . polyline
+ *     . rectangle
+ *     . groundOverlay(or image)
+ *   
+ *   Requires:  map directive
+ *
+ *   Restrict To:  Element
+ *
+ * @attr {Boolean} centered if set, map will be centered with this marker
+ * @attr {Expression} geo-callback if shape is a circle and the center is an address, the expression is will be performed when geo-lookup is successful. e.g., geo-callback="showDetail()"
+ * @attr {String} &lt;OPTIONS>
+ *   For circle, [any circle options](https://developers.google.com/maps/documentation/javascript/reference#CircleOptions)  
+ *   For polygon, [any polygon options](https://developers.google.com/maps/documentation/javascript/reference#PolygonOptions)  
+ *   For polyline, [any polyline options](https://developers.google.com/maps/documentation/javascript/reference#PolylineOptions)   
+ *   For rectangle, [any rectangle options](https://developers.google.com/maps/documentation/javascript/reference#RectangleOptions)   
+ *   For image, [any groundOverlay options](https://developers.google.com/maps/documentation/javascript/reference#GroundOverlayOptions)   
+ * @attr {String} &lt;MapEvent> [Any Shape events](https://developers.google.com/maps/documentation/javascript/reference)
+ * @example
+ * Usage: 
+ *   <map MAP_ATTRIBUTES>
+ *    <shape name=SHAPE_NAME ANY_SHAPE_OPTIONS ANY_SHAPE_EVENTS"></MARKER>
+ *   </map>
+ *
+ * Example: 
+ *
+ *   <map zoom="11" center="[40.74, -74.18]">
+ *     <shape id="polyline" name="polyline" geodesic="true" stroke-color="#FF0000" stroke-opacity="1.0" stroke-weight="2"
+ *      path="[[40.74,-74.18],[40.64,-74.10],[40.54,-74.05],[40.44,-74]]" ></shape>
+ *    </map>
+ *
+ *   <map zoom="11" center="[40.74, -74.18]">
+ *     <shape id="polygon" name="polygon" stroke-color="#FF0000" stroke-opacity="1.0" stroke-weight="2"
+ *      paths="[[40.74,-74.18],[40.64,-74.18],[40.84,-74.08],[40.74,-74.18]]" ></shape>
+ *   </map>
+ *   
+ *   <map zoom="11" center="[40.74, -74.18]">
+ *     <shape id="rectangle" name="rectangle" stroke-color='#FF0000' stroke-opacity="0.8" stroke-weight="2"
+ *      bounds="[[40.74,-74.18], [40.78,-74.14]]" editable="true" ></shape>
+ *   </map>
+ *
+ *   <map zoom="11" center="[40.74, -74.18]">
+ *     <shape id="circle" name="circle" stroke-color='#FF0000' stroke-opacity="0.8"stroke-weight="2" 
+ *      center="[40.70,-74.14]" radius="4000" editable="true" ></shape>
+ *   </map>
+ *
+ *   <map zoom="11" center="[40.74, -74.18]">
+ *     <shape id="image" name="image" url="https://www.lib.utexas.edu/maps/historical/newark_nj_1922.jpg"
+ *      bounds="[[40.71,-74.22],[40.77,-74.12]]" opacity="0.7" clickable="true" ></shape>
+ *   </map>
+ *
+ *  For full-working example, please visit 
+ *    [shape example](https://rawgit.com/allenhwkim/angularjs-google-maps/master/build/shape.html)
+ */
+/* global google */
+(function() {
+  'use strict';
+
+  var getShape = function(options, events) {
+    var shape;
+
+    var shapeName = options.name;
+    delete options.name;  //remove name bcoz it's not for options
+    void 0;
+
+    /**
+     * set options
+     */
+    switch(shapeName) {
+      case "circle":
+        if (!(options.center instanceof google.maps.LatLng)) {
+          options.center = new google.maps.LatLng(0,0);
+        } 
+        shape = new google.maps.Circle(options);
+        break;
+      case "polygon":
+        shape = new google.maps.Polygon(options);
+        break;
+      case "polyline":
+        shape = new google.maps.Polyline(options);
+        break;
+      case "rectangle":
+        shape = new google.maps.Rectangle(options);
+        break;
+      case "groundOverlay":
+      case "image":
+        var url = options.url;
+        var opts = {opacity: options.opacity, clickable: options.clickable, id:options.id};
+        shape = new google.maps.GroundOverlay(url, options.bounds, opts);
+        break;
+    }
+
+    /**
+     * set events
+     */
+    for (var eventName in events) {
+      if (events[eventName]) {
+        google.maps.event.addListener(shape, eventName, events[eventName]);
+      }
+    }
+    return shape;
+  };
+
+  var shape = function(Attr2Options, $parse) {
+    var parser = Attr2Options;
+
+    var linkFunc = function(scope, element, attrs, mapController) {
+      var orgAttrs = parser.orgAttributes(element);
+      var filtered = parser.filter(attrs);
+      var shapeOptions = parser.getOptions(filtered);
+      var shapeEvents = parser.getEvents(scope, filtered);
+
+      var address, shapeType;
+      shapeType = shapeOptions.name;
+      if (!(shapeOptions.center instanceof google.maps.LatLng)) {
+        address = shapeOptions.center;
+      }
+      var shape = getShape(shapeOptions, shapeEvents);
+      mapController.addObject('shapes', shape);
+
+      if (address && shapeType == 'circle') {
+        mapController.getGeoLocation(address).then(function(latlng) {
+          shape.setCenter(latlng);
+          shape.centered && shape.map.setCenter(latlng);
+          var geoCallback = attrs.geoCallback;
+          geoCallback && $parse(geoCallback)(scope);
+        });
+      }
+
+      /**
+       * set observers
+       */
+      mapController.observeAttrSetObj(orgAttrs, attrs, shape); 
+      element.bind('$destroy', function() {
+        mapController.deleteObject('shapes', shape);
+      });
+    };
+
+    return {
+      restrict: 'E',
+      require: '^map',
+      link: linkFunc
+     }; // return
+  };
+  shape.$inject = ['Attr2Options', '$parse'];
+
+  angular.module('ngMap').directive('shape', shape);
+
+})();
+
+/**
+ * @ngdoc directive
+ * @name streetview-panorama
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @description
+ *   Requires:  map directive
+ *   Restrict To:  Element
+ *
+ * @attr container Optional, id or css selector, if given, streetview will be in the given html element
+ * @attr {String} &lt;StreetViewPanoramaOption> [Any Google StreetViewPanorama options](https://developers.google.com/maps/documentation/javascript/reference?csw=1#StreetViewPanoramaOptions)
+ * @attr {String} &lt;StreetViewPanoramaEvent> [Any Google StreetViewPanorama events](https://developers.google.com/maps/documentation/javascript/reference#StreetViewPanorama)
+ *
+ * @example
+ *   <map zoom="11" center="[40.688738,-74.043871]" >
+ *     <street-view-panorama
+ *       click-to-go="true"
+ *       disable-default-ui="true"
+ *       disable-double-click-zoom="true"
+ *       enable-close-button="true"
+ *       pano="my-pano"
+ *       position="40.688738,-74.043871"
+ *       pov="{heading:0, pitch: 90}"
+ *       scrollwheel="false"
+ *       visible="true">
+ *     </street-view-panorama>
+ *   </map>
+ */
+/* global google */
+(function() {
+  'use strict';
+   
+  var streetViewPanorama = function(Attr2Options) {
+    var parser = Attr2Options;
+  
+    var getStreetViewPanorama = function(map, options, events) {
+      var svp, container;
+      if (options.container) {
+        container = document.getElementById(options.container);
+        container = container || document.querySelector(options.container);
+      }
+      if (container) {
+        svp = new google.maps.StreetViewPanorama(container, options);
+      } else {
+        svp = map.getStreetView();
+        svp.setOptions(options);
+      }
+
+      for (var eventName in events) {
+        eventName &&
+          google.maps.event.addListener(svp, eventName, events[eventName]);
+      }
+      return svp;
+    };
+
+    var linkFunc = function(scope, element, attrs, mapController) {
+      var orgAttrs = parser.orgAttributes(element);
+      var filtered = parser.filter(attrs);
+      var options = parser.getOptions(filtered);
+      var controlOptions = parser.getControlOptions(filtered);
+      var svpOptions = angular.extend(options, controlOptions);
+
+      var svpEvents = parser.getEvents(scope, filtered);
+      void 0;
+ 
+      scope.$on('mapInitialized', function(evt, map) {
+        var svp = getStreetViewPanorama(map, svpOptions, svpEvents);
+
+        map.setStreetView(svp);
+        (!svp.getPosition()) && svp.setPosition(map.getCenter());
+        google.maps.event.addListener(svp, 'position_changed', function() {
+          if (svp.getPosition() !== map.getCenter()) {
+            map.setCenter(svp.getPosition());
+          }
+        });
+        //needed for geo-callback
+        var listener = google.maps.event.addListener(map, 'center_changed', function() {
+          svp.setPosition(map.getCenter());
+          google.maps.event.removeListener(listener);
+        });
+      });
+
+    }; //link
+
+    return {
+      restrict: 'E',
+      require: '^map',
+      link: linkFunc
+    };
+
+  };
+  streetViewPanorama.$inject = ['Attr2Options'];
+
+  angular.module('ngMap').directive('streetViewPanorama', streetViewPanorama);
+})();
+
+/**
+ * @ngdoc directive
+ * @name traffic-layer
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @description 
+ *   Requires:  map directive
+ *   Restrict To:  Element
+ *
+ * @example
+ * Example: 
+ *
+ *   <map zoom="13" center="34.04924594193164, -118.24104309082031">
+ *     <traffic-layer></traffic-layer>
+ *    </map>
+ */
+(function() {
+  'use strict';
+
+  angular.module('ngMap').directive('trafficLayer', ['Attr2Options', function(Attr2Options) {
+    var parser = Attr2Options;
+    
+    var getLayer = function(options, events) {
+      var layer = new google.maps.TrafficLayer(options);
+      for (var eventName in events) {
+        google.maps.event.addListener(layer, eventName, events[eventName]);
+      }
+      return layer;
+    };
+    
+    return {
+      restrict: 'E',
+      require: '^map',
+
+      link: function(scope, element, attrs, mapController) {
+        var orgAttrs = parser.orgAttributes(element);
+        var filtered = parser.filter(attrs);
+        var options = parser.getOptions(filtered);
+        var events = parser.getEvents(scope, filtered);
+        void 0;
+
+        var layer = getLayer(options, events);
+        mapController.addObject('trafficLayers', layer);
+        mapController.observeAttrSetObj(orgAttrs, attrs, layer);  //observers
+        element.bind('$destroy', function() {
+          mapController.deleteObject('trafficLayers', layer);
+        });
+      }
+     }; // return
+  }]);
+})();
+
+/**
+ * @ngdoc directive
+ * @name transit-layer
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @description 
+ *   Requires:  map directive
+ *   Restrict To:  Element
+ *
+ * @example
+ * Example: 
+ *
+ *   <map zoom="13" center="34.04924594193164, -118.24104309082031">
+ *     <transit-layer></transit-layer>
+ *    </map>
+ */
+(function() {
+  'use strict';
+
+  angular.module('ngMap').directive('transitLayer', ['Attr2Options', function(Attr2Options) {
+    var parser = Attr2Options;
+    
+    var getLayer = function(options, events) {
+      var layer = new google.maps.TransitLayer(options);
+      for (var eventName in events) {
+        google.maps.event.addListener(layer, eventName, events[eventName]);
+      }
+      return layer;
+    };
+    
+    return {
+      restrict: 'E',
+      require: '^map',
+
+      link: function(scope, element, attrs, mapController) {
+        var orgAttrs = parser.orgAttributes(element);
+        var filtered = parser.filter(attrs);
+        var options = parser.getOptions(filtered);
+        var events = parser.getEvents(scope, filtered);
+        void 0;
+
+        var layer = getLayer(options, events);
+        mapController.addObject('transitLayers', layer);
+        mapController.observeAttrSetObj(orgAttrs, attrs, layer);  //observers
+        element.bind('$destroy', function() {
+          mapController.deleteObject('transitLayers', layer);
+        });
+      }
+     }; // return
+  }]);
+})();
+
+/**
+ * @ngdoc directive
+ * @name weather-layer
+ * @param Attr2Options {service} convert html attribute to Gogole map api options
+ * @description 
+ *   Requires:  map directive
+ *   Restrict To:  Element
+ *
+ * @example
+ * Example: 
+ *
+ *   <map zoom="13" center="34.04924594193164, -118.24104309082031">
+ *     <weather-layer></weather-layer>
+ *    </map>
+ */
+(function() {
+  'use strict';
+
+  angular.module('ngMap').directive('weatherLayer', ['Attr2Options', function(Attr2Options) {
+    var parser = Attr2Options;
+    
+    var getLayer = function(options, events) {
+      var layer = new google.maps.weather.WeatherLayer(options);
+      for (var eventName in events) {
+        google.maps.event.addListener(layer, eventName, events[eventName]);
+      }
+      return layer;
+    };
+    
+    return {
+      restrict: 'E',
+      require: '^map',
+
+      link: function(scope, element, attrs, mapController) {
+        var orgAttrs = parser.orgAttributes(element);
+        var filtered = parser.filter(attrs);
+        var options = parser.getOptions(filtered);
+        var events = parser.getEvents(scope, filtered);
+
+        void 0;
+
+        var layer = getLayer(options, events);
+        mapController.addObject('weatherLayers', layer);
+        mapController.observeAttrSetObj(orgAttrs, attrs, layer);  //observers
+        element.bind('$destroy', function() {
+          mapController.deleteObject('weatherLayers', layer);
+        });
+      }
+     }; // return
+  }]);
+})();
diff --git a/public/bower_components/oclazyload/ocLazyLoad.js b/public/bower_components/oclazyload/ocLazyLoad.js
new file mode 100644
index 0000000..a9e57af
--- /dev/null
+++ b/public/bower_components/oclazyload/ocLazyLoad.js
@@ -0,0 +1,1338 @@
+/**
+ * oclazyload - Load modules on demand (lazy load) with angularJS
+ * @version v1.0.9
+ * @link https://github.com/ocombe/ocLazyLoad
+ * @license MIT
+ * @author Olivier Combe <[email-masked]>
+ */
+(function (angular, window) {
+    'use strict';
+
+    var regModules = ['ng', 'oc.lazyLoad'],
+        regInvokes = {},
+        regConfigs = [],
+        modulesToLoad = [],
+        // modules to load from angular.module or other sources
+    realModules = [],
+        // real modules called from angular.module
+    recordDeclarations = [],
+        broadcast = angular.noop,
+        runBlocks = {},
+        justLoaded = [];
+
+    var ocLazyLoad = angular.module('oc.lazyLoad', ['ng']);
+
+    ocLazyLoad.provider('$ocLazyLoad', ["$controllerProvider", "$provide", "$compileProvider", "$filterProvider", "$injector", "$animateProvider", function ($controllerProvider, $provide, $compileProvider, $filterProvider, $injector, $animateProvider) {
+        var modules = {},
+            providers = {
+            $controllerProvider: $controllerProvider,
+            $compileProvider: $compileProvider,
+            $filterProvider: $filterProvider,
+            $provide: $provide, // other things (constant, decorator, provider, factory, service)
+            $injector: $injector,
+            $animateProvider: $animateProvider
+        },
+            debug = false,
+            events = false,
+            moduleCache = [],
+            modulePromises = {};
+
+        moduleCache.push = function (value) {
+            if (this.indexOf(value) === -1) {
+                Array.prototype.push.apply(this, arguments);
+            }
+        };
+
+        this.config = function (config) {
+            // If we want to define modules configs
+            if (angular.isDefined(config.modules)) {
+                if (angular.isArray(config.modules)) {
+                    angular.forEach(config.modules, function (moduleConfig) {
+                        modules[moduleConfig.name] = moduleConfig;
+                    });
+                } else {
+                    modules[config.modules.name] = config.modules;
+                }
+            }
+
+            if (angular.isDefined(config.debug)) {
+                debug = config.debug;
+            }
+
+            if (angular.isDefined(config.events)) {
+                events = config.events;
+            }
+        };
+
+        /**
+         * Get the list of existing registered modules
+         * @param element
+         */
+        this._init = function _init(element) {
+            // this is probably useless now because we override angular.bootstrap
+            if (modulesToLoad.length === 0) {
+                var elements = [element],
+                    names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app'],
+                    NG_APP_CLASS_REGEXP = /\sng[:\-]app(:\s*([\w\d_]+);?)?\s/,
+                    append = function append(elm) {
+                    return elm && elements.push(elm);
+                };
+
+                angular.forEach(names, function (name) {
+                    names[name] = true;
+                    append(document.getElementById(name));
+                    name = name.replace(':', '\\:');
+                    if (typeof element[0] !== 'undefined' && element[0].querySelectorAll) {
+                        angular.forEach(element[0].querySelectorAll('.' + name), append);
+                        angular.forEach(element[0].querySelectorAll('.' + name + '\\:'), append);
+                        angular.forEach(element[0].querySelectorAll('[' + name + ']'), append);
+                    }
+                });
+
+                angular.forEach(elements, function (elm) {
+                    if (modulesToLoad.length === 0) {
+                        var className = ' ' + element.className + ' ';
+                        var match = NG_APP_CLASS_REGEXP.exec(className);
+                        if (match) {
+                            modulesToLoad.push((match[2] || '').replace(/\s+/g, ','));
+                        } else {
+                            angular.forEach(elm.attributes, function (attr) {
+                                if (modulesToLoad.length === 0 && names[attr.name]) {
+                                    modulesToLoad.push(attr.value);
+                                }
+                            });
+                        }
+                    }
+                });
+            }
+
+            if (modulesToLoad.length === 0 && !((window.jasmine || window.mocha) && angular.isDefined(angular.mock))) {
+                console.error('No module found during bootstrap, unable to init ocLazyLoad. You should always use the ng-app directive or angular.boostrap when you use ocLazyLoad.');
+            }
+
+            var addReg = function addReg(moduleName) {
+                if (regModules.indexOf(moduleName) === -1) {
+                    // register existing modules
+                    regModules.push(moduleName);
+                    var mainModule = angular.module(moduleName);
+
+                    // register existing components (directives, services, ...)
+                    _invokeQueue(null, mainModule._invokeQueue, moduleName);
+                    _invokeQueue(null, mainModule._configBlocks, moduleName); // angular 1.3+
+
+                    angular.forEach(mainModule.requires, addReg);
+                }
+            };
+
+            angular.forEach(modulesToLoad, function (moduleName) {
+                addReg(moduleName);
+            });
+
+            modulesToLoad = []; // reset for next bootstrap
+            recordDeclarations.pop(); // wait for the next lazy load
+        };
+
+        /**
+         * Like JSON.stringify but that doesn't throw on circular references
+         * @param obj
+         */
+        var stringify = function stringify(obj) {
+            try {
+                return JSON.stringify(obj);
+            } catch (e) {
+                var cache = [];
+                return JSON.stringify(obj, function (key, value) {
+                    if (angular.isObject(value) && value !== null) {
+                        if (cache.indexOf(value) !== -1) {
+                            // Circular reference found, discard key
+                            return;
+                        }
+                        // Store value in our collection
+                        cache.push(value);
+                    }
+                    return value;
+                });
+            }
+        };
+
+        var hashCode = function hashCode(str) {
+            var hash = 0,
+                i,
+                chr,
+                len;
+            if (str.length == 0) {
+                return hash;
+            }
+            for (i = 0, len = str.length; i < len; i++) {
+                chr = str.charCodeAt(i);
+                hash = (hash << 5) - hash + chr;
+                hash |= 0; // Convert to 32bit integer
+            }
+            return hash;
+        };
+
+        function _register(providers, registerModules, params) {
+            if (registerModules) {
+                var k,
+                    moduleName,
+                    moduleFn,
+                    tempRunBlocks = [];
+                for (k = registerModules.length - 1; k >= 0; k--) {
+                    moduleName = registerModules[k];
+                    if (!angular.isString(moduleName)) {
+                        moduleName = getModuleName(moduleName);
+                    }
+                    if (!moduleName || justLoaded.indexOf(moduleName) !== -1 || modules[moduleName] && realModules.indexOf(moduleName) === -1) {
+                        continue;
+                    }
+                    // new if not registered
+                    var newModule = regModules.indexOf(moduleName) === -1;
+                    moduleFn = ngModuleFct(moduleName);
+                    if (newModule) {
+                        regModules.push(moduleName);
+                        _register(providers, moduleFn.requires, params);
+                    }
+                    if (moduleFn._runBlocks.length > 0) {
+                        // new run blocks detected! Replace the old ones (if existing)
+                        runBlocks[moduleName] = [];
+                        while (moduleFn._runBlocks.length > 0) {
+                            runBlocks[moduleName].push(moduleFn._runBlocks.shift());
+                        }
+                    }
+                    if (angular.isDefined(runBlocks[moduleName]) && (newModule || params.rerun)) {
+                        tempRunBlocks = tempRunBlocks.concat(runBlocks[moduleName]);
+                    }
+                    _invokeQueue(providers, moduleFn._invokeQueue, moduleName, params.reconfig);
+                    _invokeQueue(providers, moduleFn._configBlocks, moduleName, params.reconfig); // angular 1.3+
+                    broadcast(newModule ? 'ocLazyLoad.moduleLoaded' : 'ocLazyLoad.moduleReloaded', moduleName);
+                    registerModules.pop();
+                    justLoaded.push(moduleName);
+                }
+                // execute the run blocks at the end
+                var instanceInjector = providers.getInstanceInjector();
+                angular.forEach(tempRunBlocks, function (fn) {
+                    instanceInjector.invoke(fn);
+                });
+            }
+        }
+
+        function _registerInvokeList(args, moduleName) {
+            var invokeList = args[2][0],
+                type = args[1],
+                newInvoke = false;
+            if (angular.isUndefined(regInvokes[moduleName])) {
+                regInvokes[moduleName] = {};
+            }
+            if (angular.isUndefined(regInvokes[moduleName][type])) {
+                regInvokes[moduleName][type] = {};
+            }
+            var onInvoke = function onInvoke(invokeName, invoke) {
+                if (!regInvokes[moduleName][type].hasOwnProperty(invokeName)) {
+                    regInvokes[moduleName][type][invokeName] = [];
+                }
+                if (checkHashes(invoke, regInvokes[moduleName][type][invokeName])) {
+                    newInvoke = true;
+                    regInvokes[moduleName][type][invokeName].push(invoke);
+                    broadcast('ocLazyLoad.componentLoaded', [moduleName, type, invokeName]);
+                }
+            };
+
+            function checkHashes(potentialNew, invokes) {
+                var isNew = true,
+                    newHash;
+                if (invokes.length) {
+                    newHash = signature(potentialNew);
+                    angular.forEach(invokes, function (invoke) {
+                        isNew = isNew && signature(invoke) !== newHash;
+                    });
+                }
+                return isNew;
+            }
+
+            function signature(data) {
+                if (angular.isArray(data)) {
+                    // arrays are objects, we need to test for it first
+                    return hashCode(data.toString());
+                } else if (angular.isObject(data)) {
+                    // constants & values for example
+                    return hashCode(stringify(data));
+                } else {
+                    if (angular.isDefined(data) && data !== null) {
+                        return hashCode(data.toString());
+                    } else {
+                        // null & undefined constants
+                        return data;
+                    }
+                }
+            }
+
+            if (angular.isString(invokeList)) {
+                onInvoke(invokeList, args[2][1]);
+            } else if (angular.isObject(invokeList)) {
+                angular.forEach(invokeList, function (invoke, key) {
+                    if (angular.isString(invoke)) {
+                        // decorators for example
+                        onInvoke(invoke, invokeList[1]);
+                    } else {
+                        // components registered as object lists {"componentName": function() {}}
+                        onInvoke(key, invoke);
+                    }
+                });
+            } else {
+                return false;
+            }
+            return newInvoke;
+        }
+
+        function _invokeQueue(providers, queue, moduleName, reconfig) {
+            if (!queue) {
+                return;
+            }
+
+            var i, len, args, provider;
+            for (i = 0, len = queue.length; i < len; i++) {
+                args = queue[i];
+                if (angular.isArray(args)) {
+                    if (providers !== null) {
+                        if (providers.hasOwnProperty(args[0])) {
+                            provider = providers[args[0]];
+                        } else {
+                            throw new Error('unsupported provider ' + args[0]);
+                        }
+                    }
+                    var isNew = _registerInvokeList(args, moduleName);
+                    if (args[1] !== 'invoke') {
+                        if (isNew && angular.isDefined(provider)) {
+                            provider[args[1]].apply(provider, args[2]);
+                        }
+                    } else {
+                        // config block
+                        var callInvoke = function callInvoke(fct) {
+                            var invoked = regConfigs.indexOf(moduleName + '-' + fct);
+                            if (invoked === -1 || reconfig) {
+                                if (invoked === -1) {
+                                    regConfigs.push(moduleName + '-' + fct);
+                                }
+                                if (angular.isDefined(provider)) {
+                                    provider[args[1]].apply(provider, args[2]);
+                                }
+                            }
+                        };
+                        if (angular.isFunction(args[2][0])) {
+                            callInvoke(args[2][0]);
+                        } else if (angular.isArray(args[2][0])) {
+                            for (var j = 0, jlen = args[2][0].length; j < jlen; j++) {
+                                if (angular.isFunction(args[2][0][j])) {
+                                    callInvoke(args[2][0][j]);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        function getModuleName(module) {
+            var moduleName = null;
+            if (angular.isString(module)) {
+                moduleName = module;
+            } else if (angular.isObject(module) && module.hasOwnProperty('name') && angular.isString(module.name)) {
+                moduleName = module.name;
+            }
+            return moduleName;
+        }
+
+        function moduleExists(moduleName) {
+            if (!angular.isString(moduleName)) {
+                return false;
+            }
+            try {
+                return ngModuleFct(moduleName);
+            } catch (e) {
+                if (/No module/.test(e) || e.message.indexOf('$injector:nomod') > -1) {
+                    return false;
+                }
+            }
+        }
+
+        this.$get = ["$log", "$rootElement", "$rootScope", "$cacheFactory", "$q", function ($log, $rootElement, $rootScope, $cacheFactory, $q) {
+            var instanceInjector,
+                filesCache = $cacheFactory('ocLazyLoad');
+
+            if (!debug) {
+                $log = {};
+                $log['error'] = angular.noop;
+                $log['warn'] = angular.noop;
+                $log['info'] = angular.noop;
+            }
+
+            // Make this lazy because when $get() is called the instance injector hasn't been assigned to the rootElement yet
+            providers.getInstanceInjector = function () {
+                return instanceInjector ? instanceInjector : instanceInjector = $rootElement.data('$injector') || angular.injector();
+            };
+
+            broadcast = function broadcast(eventName, params) {
+                if (events) {
+                    $rootScope.$broadcast(eventName, params);
+                }
+                if (debug) {
+                    $log.info(eventName, params);
+                }
+            };
+
+            function reject(e) {
+                var deferred = $q.defer();
+                $log.error(e.message);
+                deferred.reject(e);
+                return deferred.promise;
+            }
+
+            return {
+                _broadcast: broadcast,
+
+                _$log: $log,
+
+                /**
+                 * Returns the files cache used by the loaders to store the files currently loading
+                 * @returns {*}
+                 */
+                _getFilesCache: function getFilesCache() {
+                    return filesCache;
+                },
+
+                /**
+                 * Let the service know that it should monitor angular.module because files are loading
+                 * @param watch boolean
+                 */
+                toggleWatch: function toggleWatch(watch) {
+                    if (watch) {
+                        recordDeclarations.push(true);
+                    } else {
+                        recordDeclarations.pop();
+                    }
+                },
+
+                /**
+                 * Let you get a module config object
+                 * @param moduleName String the name of the module
+                 * @returns {*}
+                 */
+                getModuleConfig: function getModuleConfig(moduleName) {
+                    if (!angular.isString(moduleName)) {
+                        throw new Error('You need to give the name of the module to get');
+                    }
+                    if (!modules[moduleName]) {
+                        return null;
+                    }
+                    return angular.copy(modules[moduleName]);
+                },
+
+                /**
+                 * Let you define a module config object
+                 * @param moduleConfig Object the module config object
+                 * @returns {*}
+                 */
+                setModuleConfig: function setModuleConfig(moduleConfig) {
+                    if (!angular.isObject(moduleConfig)) {
+                        throw new Error('You need to give the module config object to set');
+                    }
+                    modules[moduleConfig.name] = moduleConfig;
+                    return moduleConfig;
+                },
+
+                /**
+                 * Returns the list of loaded modules
+                 * @returns {string[]}
+                 */
+                getModules: function getModules() {
+                    return regModules;
+                },
+
+                /**
+                 * Let you check if a module has been loaded into Angular or not
+                 * @param modulesNames String/Object a module name, or a list of module names
+                 * @returns {boolean}
+                 */
+                isLoaded: function isLoaded(modulesNames) {
+                    var moduleLoaded = function moduleLoaded(module) {
+                        var isLoaded = regModules.indexOf(module) > -1;
+                        if (!isLoaded) {
+                            isLoaded = !!moduleExists(module);
+                        }
+                        return isLoaded;
+                    };
+                    if (angular.isString(modulesNames)) {
+                        modulesNames = [modulesNames];
+                    }
+                    if (angular.isArray(modulesNames)) {
+                        var i, len;
+                        for (i = 0, len = modulesNames.length; i < len; i++) {
+                            if (!moduleLoaded(modulesNames[i])) {
+                                return false;
+                            }
+                        }
+                        return true;
+                    } else {
+                        throw new Error('You need to define the module(s) name(s)');
+                    }
+                },
+
+                /**
+                 * Given a module, return its name
+                 * @param module
+                 * @returns {String}
+                 */
+                _getModuleName: getModuleName,
+
+                /**
+                 * Returns a module if it exists
+                 * @param moduleName
+                 * @returns {module}
+                 */
+                _getModule: function getModule(moduleName) {
+                    try {
+                        return ngModuleFct(moduleName);
+                    } catch (e) {
+                        // this error message really suxx
+                        if (/No module/.test(e) || e.message.indexOf('$injector:nomod') > -1) {
+                            e.message = 'The module "' + stringify(moduleName) + '" that you are trying to load does not exist. ' + e.message;
+                        }
+                        throw e;
+                    }
+                },
+
+                /**
+                 * Check if a module exists and returns it if it does
+                 * @param moduleName
+                 * @returns {boolean}
+                 */
+                moduleExists: moduleExists,
+
+                /**
+                 * Load the dependencies, and might try to load new files depending on the config
+                 * @param moduleName (String or Array of Strings)
+                 * @param localParams
+                 * @returns {*}
+                 * @private
+                 */
+                _loadDependencies: function _loadDependencies(moduleName, localParams) {
+                    var loadedModule,
+                        requires,
+                        diff,
+                        promisesList = [],
+                        self = this;
+
+                    moduleName = self._getModuleName(moduleName);
+
+                    if (moduleName === null) {
+                        return $q.when();
+                    } else {
+                        try {
+                            loadedModule = self._getModule(moduleName);
+                        } catch (e) {
+                            return reject(e);
+                        }
+                        // get unloaded requires
+                        requires = self.getRequires(loadedModule);
+                    }
+
+                    angular.forEach(requires, function (requireEntry) {
+                        // If no configuration is provided, try and find one from a previous load.
+                        // If there isn't one, bail and let the normal flow run
+                        if (angular.isString(requireEntry)) {
+                            var config = self.getModuleConfig(requireEntry);
+                            if (config === null) {
+                                moduleCache.push(requireEntry); // We don't know about this module, but something else might, so push it anyway.
+                                return;
+                            }
+                            requireEntry = config;
+                            // ignore the name because it's probably not a real module name
+                            config.name = undefined;
+                        }
+
+                        // Check if this dependency has been loaded previously
+                        if (self.moduleExists(requireEntry.name)) {
+                            // compare against the already loaded module to see if the new definition adds any new files
+                            diff = requireEntry.files.filter(function (n) {
+                                return self.getModuleConfig(requireEntry.name).files.indexOf(n) < 0;
+                            });
+
+                            // If the module was redefined, advise via the console
+                            if (diff.length !== 0) {
+                                self._$log.warn('Module "', moduleName, '" attempted to redefine configuration for dependency. "', requireEntry.name, '"\n Additional Files Loaded:', diff);
+                            }
+
+                            // Push everything to the file loader, it will weed out the duplicates.
+                            if (angular.isDefined(self.filesLoader)) {
+                                // if a files loader is defined
+                                promisesList.push(self.filesLoader(requireEntry, localParams).then(function () {
+                                    return self._loadDependencies(requireEntry);
+                                }));
+                            } else {
+                                return reject(new Error('Error: New dependencies need to be loaded from external files (' + requireEntry.files + '), but no loader has been defined.'));
+                            }
+                            return;
+                        } else if (angular.isArray(requireEntry)) {
+                            var files = [];
+                            angular.forEach(requireEntry, function (entry) {
+                                // let's check if the entry is a file name or a config name
+                                var config = self.getModuleConfig(entry);
+                                if (config === null) {
+                                    files.push(entry);
+                                } else if (config.files) {
+                                    files = files.concat(config.files);
+                                }
+                            });
+                            if (files.length > 0) {
+                                requireEntry = {
+                                    files: files
+                                };
+                            }
+                        } else if (angular.isObject(requireEntry)) {
+                            if (requireEntry.hasOwnProperty('name') && requireEntry['name']) {
+                                // The dependency doesn't exist in the module cache and is a new configuration, so store and push it.
+                                self.setModuleConfig(requireEntry);
+                                moduleCache.push(requireEntry['name']);
+                            }
+                        }
+
+                        // Check if the dependency has any files that need to be loaded. If there are, push a new promise to the promise list.
+                        if (angular.isDefined(requireEntry.files) && requireEntry.files.length !== 0) {
+                            if (angular.isDefined(self.filesLoader)) {
+                                // if a files loader is defined
+                                promisesList.push(self.filesLoader(requireEntry, localParams).then(function () {
+                                    return self._loadDependencies(requireEntry);
+                                }));
+                            } else {
+                                return reject(new Error('Error: the module "' + requireEntry.name + '" is defined in external files (' + requireEntry.files + '), but no loader has been defined.'));
+                            }
+                        }
+                    });
+
+                    // Create a wrapper promise to watch the promise list and resolve it once everything is done.
+                    return $q.all(promisesList);
+                },
+
+                /**
+                 * Inject new modules into Angular
+                 * @param moduleName
+                 * @param localParams
+                 * @param real
+                 */
+                inject: function inject(moduleName) {
+                    var localParams = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+                    var real = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];
+
+                    var self = this,
+                        deferred = $q.defer();
+                    if (angular.isDefined(moduleName) && moduleName !== null) {
+                        if (angular.isArray(moduleName)) {
+                            var promisesList = [];
+                            angular.forEach(moduleName, function (module) {
+                                promisesList.push(self.inject(module, localParams, real));
+                            });
+                            return $q.all(promisesList);
+                        } else {
+                            self._addToLoadList(self._getModuleName(moduleName), true, real);
+                        }
+                    }
+                    if (modulesToLoad.length > 0) {
+                        var res = modulesToLoad.slice(); // clean copy
+                        var loadNext = function loadNext(moduleName) {
+                            moduleCache.push(moduleName);
+                            modulePromises[moduleName] = deferred.promise;
+                            self._loadDependencies(moduleName, localParams).then(function success() {
+                                try {
+                                    justLoaded = [];
+                                    _register(providers, moduleCache, localParams);
+                                } catch (e) {
+                                    self._$log.error(e.message);
+                                    deferred.reject(e);
+                                    return;
+                                }
+
+                                if (modulesToLoad.length > 0) {
+                                    loadNext(modulesToLoad.shift()); // load the next in list
+                                } else {
+                                        deferred.resolve(res); // everything has been loaded, resolve
+                                    }
+                            }, function error(err) {
+                                deferred.reject(err);
+                            });
+                        };
+
+                        // load the first in list
+                        loadNext(modulesToLoad.shift());
+                    } else if (localParams && localParams.name && modulePromises[localParams.name]) {
+                        return modulePromises[localParams.name];
+                    } else {
+                        deferred.resolve();
+                    }
+                    return deferred.promise;
+                },
+
+                /**
+                 * Get the list of required modules/services/... for this module
+                 * @param module
+                 * @returns {Array}
+                 */
+                getRequires: function getRequires(module) {
+                    var requires = [];
+                    angular.forEach(module.requires, function (requireModule) {
+                        if (regModules.indexOf(requireModule) === -1) {
+                            requires.push(requireModule);
+                        }
+                    });
+                    return requires;
+                },
+
+                /**
+                 * Invoke the new modules & component by their providers
+                 * @param providers
+                 * @param queue
+                 * @param moduleName
+                 * @param reconfig
+                 * @private
+                 */
+                _invokeQueue: _invokeQueue,
+
+                /**
+                 * Check if a module has been invoked and registers it if not
+                 * @param args
+                 * @param moduleName
+                 * @returns {boolean} is new
+                 */
+                _registerInvokeList: _registerInvokeList,
+
+                /**
+                 * Register a new module and loads it, executing the run/config blocks if needed
+                 * @param providers
+                 * @param registerModules
+                 * @param params
+                 * @private
+                 */
+                _register: _register,
+
+                /**
+                 * Add a module name to the list of modules that will be loaded in the next inject
+                 * @param name
+                 * @param force
+                 * @private
+                 */
+                _addToLoadList: _addToLoadList,
+
+                /**
+                 * Unregister modules (you shouldn't have to use this)
+                 * @param modules
+                 */
+                _unregister: function _unregister(modules) {
+                    if (angular.isDefined(modules)) {
+                        if (angular.isArray(modules)) {
+                            angular.forEach(modules, function (module) {
+                                regInvokes[module] = undefined;
+                            });
+                        }
+                    }
+                }
+            };
+        }];
+
+        // Let's get the list of loaded modules & components
+        this._init(angular.element(window.document));
+    }]);
+
+    var bootstrapFct = angular.bootstrap;
+    angular.bootstrap = function (element, modules, config) {
+        // we use slice to make a clean copy
+        angular.forEach(modules.slice(), function (module) {
+            _addToLoadList(module, true, true);
+        });
+        return bootstrapFct(element, modules, config);
+    };
+
+    var _addToLoadList = function _addToLoadList(name, force, real) {
+        if ((recordDeclarations.length > 0 || force) && angular.isString(name) && modulesToLoad.indexOf(name) === -1) {
+            modulesToLoad.push(name);
+            if (real) {
+                realModules.push(name);
+            }
+        }
+    };
+
+    var ngModuleFct = angular.module;
+    angular.module = function (name, requires, configFn) {
+        _addToLoadList(name, false, true);
+        return ngModuleFct(name, requires, configFn);
+    };
+
+    // CommonJS package manager support:
+    if (typeof module !== 'undefined' && typeof exports !== 'undefined' && module.exports === exports) {
+        module.exports = 'oc.lazyLoad';
+    }
+})(angular, window);
+(function (angular) {
+    'use strict';
+
+    angular.module('oc.lazyLoad').directive('ocLazyLoad', ["$ocLazyLoad", "$compile", "$animate", "$parse", "$timeout", function ($ocLazyLoad, $compile, $animate, $parse, $timeout) {
+        return {
+            restrict: 'A',
+            terminal: true,
+            priority: 1000,
+            compile: function compile(element, attrs) {
+                // we store the content and remove it before compilation
+                var content = element[0].innerHTML;
+                element.html('');
+
+                return function ($scope, $element, $attr) {
+                    var model = $parse($attr.ocLazyLoad);
+                    $scope.$watch(function () {
+                        return model($scope) || $attr.ocLazyLoad; // it can be a module name (string), an object, an array, or a scope reference to any of this
+                    }, function (moduleName) {
+                        if (angular.isDefined(moduleName)) {
+                            $ocLazyLoad.load(moduleName).then(function () {
+                                // Attach element contents to DOM and then compile them.
+                                // This prevents an issue where IE invalidates saved element objects (HTMLCollections)
+                                // of the compiled contents when attaching to the parent DOM.
+                                $animate.enter(content, $element);
+                                // get the new content & compile it
+                                $compile($element.contents())($scope);
+                            });
+                        }
+                    }, true);
+                };
+            }
+        };
+    }]);
+})(angular);
+(function (angular) {
+    'use strict';
+
+    angular.module('oc.lazyLoad').config(["$provide", function ($provide) {
+        $provide.decorator('$ocLazyLoad', ["$delegate", "$q", "$window", "$interval", function ($delegate, $q, $window, $interval) {
+            var uaCssChecked = false,
+                useCssLoadPatch = false,
+                anchor = $window.document.getElementsByTagName('head')[0] || $window.document.getElementsByTagName('body')[0];
+
+            /**
+             * Load a js/css file
+             * @param type
+             * @param path
+             * @param params
+             * @returns promise
+             */
+            $delegate.buildElement = function buildElement(type, path, params) {
+                var deferred = $q.defer(),
+                    el,
+                    loaded,
+                    filesCache = $delegate._getFilesCache(),
+                    cacheBuster = function cacheBuster(url) {
+                    var dc = new Date().getTime();
+                    if (url.indexOf('?') >= 0) {
+                        if (url.substring(0, url.length - 1) === '&') {
+                            return url + '_dc=' + dc;
+                        }
+                        return url + '&_dc=' + dc;
+                    } else {
+                        return url + '?_dc=' + dc;
+                    }
+                };
+
+                // Store the promise early so the file load can be detected by other parallel lazy loads
+                // (ie: multiple routes on one page) a 'true' value isn't sufficient
+                // as it causes false positive load results.
+                if (angular.isUndefined(filesCache.get(path))) {
+                    filesCache.put(path, deferred.promise);
+                }
+
+                // Switch in case more content types are added later
+                switch (type) {
+                    case 'css':
+                        el = $window.document.createElement('link');
+                        el.type = 'text/css';
+                        el.rel = 'stylesheet';
+                        el.href = params.cache === false ? cacheBuster(path) : path;
+                        break;
+                    case 'js':
+                        el = $window.document.createElement('script');
+                        el.src = params.cache === false ? cacheBuster(path) : path;
+                        break;
+                    default:
+                        filesCache.remove(path);
+                        deferred.reject(new Error('Requested type "' + type + '" is not known. Could not inject "' + path + '"'));
+                        break;
+                }
+                el.onload = el['onreadystatechange'] = function (e) {
+                    if (el['readyState'] && !/^c|loade/.test(el['readyState']) || loaded) return;
+                    el.onload = el['onreadystatechange'] = null;
+                    loaded = 1;
+                    $delegate._broadcast('ocLazyLoad.fileLoaded', path);
+                    deferred.resolve();
+                };
+                el.onerror = function () {
+                    filesCache.remove(path);
+                    deferred.reject(new Error('Unable to load ' + path));
+                };
+                el.async = params.serie ? 0 : 1;
+
+                var insertBeforeElem = anchor.lastChild;
+                if (params.insertBefore) {
+                    var element = angular.element(angular.isDefined(window.jQuery) ? params.insertBefore : document.querySelector(params.insertBefore));
+                    if (element && element.length > 0) {
+                        insertBeforeElem = element[0];
+                    }
+                }
+                insertBeforeElem.parentNode.insertBefore(el, insertBeforeElem);
+
+                /*
+                 The event load or readystatechange doesn't fire in:
+                 - iOS < 6       (default mobile browser)
+                 - Android < 4.4 (default mobile browser)
+                 - Safari < 6    (desktop browser)
+                 */
+                if (type == 'css') {
+                    if (!uaCssChecked) {
+                        var ua = $window.navigator.userAgent.toLowerCase();
+
+                        // iOS < 6
+                        if (/iP(hone|od|ad)/.test($window.navigator.platform)) {
+                            var v = $window.navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);
+                            var iOSVersion = parseFloat([parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)].join('.'));
+                            useCssLoadPatch = iOSVersion < 6;
+                        } else if (ua.indexOf("android") > -1) {
+                            // Android < 4.4
+                            var androidVersion = parseFloat(ua.slice(ua.indexOf("android") + 8));
+                            useCssLoadPatch = androidVersion < 4.4;
+                        } else if (ua.indexOf('safari') > -1) {
+                            var versionMatch = ua.match(/version\/([\.\d]+)/i);
+                            useCssLoadPatch = versionMatch && versionMatch[1] && parseFloat(versionMatch[1]) < 6;
+                        }
+                    }
+
+                    if (useCssLoadPatch) {
+                        var tries = 1000; // * 20 = 20000 miliseconds
+                        var interval = $interval(function () {
+                            try {
+                                el.sheet.cssRules;
+                                $interval.cancel(interval);
+                                el.onload();
+                            } catch (e) {
+                                if (--tries <= 0) {
+                                    el.onerror();
+                                }
+                            }
+                        }, 20);
+                    }
+                }
+
+                return deferred.promise;
+            };
+
+            return $delegate;
+        }]);
+    }]);
+})(angular);
+(function (angular) {
+    'use strict';
+
+    angular.module('oc.lazyLoad').config(["$provide", function ($provide) {
+        $provide.decorator('$ocLazyLoad', ["$delegate", "$q", function ($delegate, $q) {
+            /**
+             * The function that loads new files
+             * @param config
+             * @param params
+             * @returns {*}
+             */
+            $delegate.filesLoader = function filesLoader(config) {
+                var params = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+                var cssFiles = [],
+                    templatesFiles = [],
+                    jsFiles = [],
+                    promises = [],
+                    cachePromise = null,
+                    filesCache = $delegate._getFilesCache();
+
+                $delegate.toggleWatch(true); // start watching angular.module calls
+
+                angular.extend(params, config);
+
+                var pushFile = function pushFile(path) {
+                    var file_type = null,
+                        m;
+                    if (angular.isObject(path)) {
+                        file_type = path.type;
+                        path = path.path;
+                    }
+                    cachePromise = filesCache.get(path);
+                    if (angular.isUndefined(cachePromise) || params.cache === false) {
+
+                        // always check for requirejs syntax just in case
+                        if ((m = /^(css|less|html|htm|js)?(?=!)/.exec(path)) !== null) {
+                            // Detect file type using preceding type declaration (ala requireJS)
+                            file_type = m[1];
+                            path = path.substr(m[1].length + 1, path.length); // Strip the type from the path
+                        }
+
+                        if (!file_type) {
+                            if ((m = /[.](css|less|html|htm|js)?((\?|#).*)?$/.exec(path)) !== null) {
+                                // Detect file type via file extension
+                                file_type = m[1];
+                            } else if (!$delegate.jsLoader.hasOwnProperty('ocLazyLoadLoader') && $delegate.jsLoader.hasOwnProperty('requirejs')) {
+                                // requirejs
+                                file_type = 'js';
+                            } else {
+                                $delegate._$log.error('File type could not be determined. ' + path);
+                                return;
+                            }
+                        }
+
+                        if ((file_type === 'css' || file_type === 'less') && cssFiles.indexOf(path) === -1) {
+                            cssFiles.push(path);
+                        } else if ((file_type === 'html' || file_type === 'htm') && templatesFiles.indexOf(path) === -1) {
+                            templatesFiles.push(path);
+                        } else if (file_type === 'js' || jsFiles.indexOf(path) === -1) {
+                            jsFiles.push(path);
+                        } else {
+                            $delegate._$log.error('File type is not valid. ' + path);
+                        }
+                    } else if (cachePromise) {
+                        promises.push(cachePromise);
+                    }
+                };
+
+                if (params.serie) {
+                    pushFile(params.files.shift());
+                } else {
+                    angular.forEach(params.files, function (path) {
+                        pushFile(path);
+                    });
+                }
+
+                if (cssFiles.length > 0) {
+                    var cssDeferred = $q.defer();
+                    $delegate.cssLoader(cssFiles, function (err) {
+                        if (angular.isDefined(err) && $delegate.cssLoader.hasOwnProperty('ocLazyLoadLoader')) {
+                            $delegate._$log.error(err);
+                            cssDeferred.reject(err);
+                        } else {
+                            cssDeferred.resolve();
+                        }
+                    }, params);
+                    promises.push(cssDeferred.promise);
+                }
+
+                if (templatesFiles.length > 0) {
+                    var templatesDeferred = $q.defer();
+                    $delegate.templatesLoader(templatesFiles, function (err) {
+                        if (angular.isDefined(err) && $delegate.templatesLoader.hasOwnProperty('ocLazyLoadLoader')) {
+                            $delegate._$log.error(err);
+                            templatesDeferred.reject(err);
+                        } else {
+                            templatesDeferred.resolve();
+                        }
+                    }, params);
+                    promises.push(templatesDeferred.promise);
+                }
+
+                if (jsFiles.length > 0) {
+                    var jsDeferred = $q.defer();
+                    $delegate.jsLoader(jsFiles, function (err) {
+                        if (angular.isDefined(err) && ($delegate.jsLoader.hasOwnProperty("ocLazyLoadLoader") || $delegate.jsLoader.hasOwnProperty("requirejs"))) {
+                            $delegate._$log.error(err);
+                            jsDeferred.reject(err);
+                        } else {
+                            jsDeferred.resolve();
+                        }
+                    }, params);
+                    promises.push(jsDeferred.promise);
+                }
+
+                if (promises.length === 0) {
+                    var deferred = $q.defer(),
+                        err = "Error: no file to load has been found, if you're trying to load an existing module you should use the 'inject' method instead of 'load'.";
+                    $delegate._$log.error(err);
+                    deferred.reject(err);
+                    return deferred.promise;
+                } else if (params.serie && params.files.length > 0) {
+                    return $q.all(promises).then(function () {
+                        return $delegate.filesLoader(config, params);
+                    });
+                } else {
+                    return $q.all(promises)['finally'](function (res) {
+                        $delegate.toggleWatch(false); // stop watching angular.module calls
+                        return res;
+                    });
+                }
+            };
+
+            /**
+             * Load a module or a list of modules into Angular
+             * @param module Mixed the name of a predefined module config object, or a module config object, or an array of either
+             * @param params Object optional parameters
+             * @returns promise
+             */
+            $delegate.load = function (originalModule) {
+                var originalParams = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
+
+                var self = this,
+                    config = null,
+                    deferredList = [],
+                    deferred = $q.defer(),
+                    errText;
+
+                // clean copy
+                var module = angular.copy(originalModule);
+                var params = angular.copy(originalParams);
+
+                // If module is an array, break it down
+                if (angular.isArray(module)) {
+                    // Resubmit each entry as a single module
+                    angular.forEach(module, function (m) {
+                        deferredList.push(self.load(m, params));
+                    });
+
+                    // Resolve the promise once everything has loaded
+                    $q.all(deferredList).then(function (res) {
+                        deferred.resolve(res);
+                    }, function (err) {
+                        deferred.reject(err);
+                    });
+
+                    return deferred.promise;
+                }
+
+                // Get or Set a configuration depending on what was passed in
+                if (angular.isString(module)) {
+                    config = self.getModuleConfig(module);
+                    if (!config) {
+                        config = {
+                            files: [module]
+                        };
+                    }
+                } else if (angular.isObject(module)) {
+                    // case {type: 'js', path: lazyLoadUrl + 'testModule.fakejs'}
+                    if (angular.isDefined(module.path) && angular.isDefined(module.type)) {
+                        config = {
+                            files: [module]
+                        };
+                    } else {
+                        config = self.setModuleConfig(module);
+                    }
+                }
+
+                if (config === null) {
+                    var moduleName = self._getModuleName(module);
+                    errText = 'Module "' + (moduleName || 'unknown') + '" is not configured, cannot load.';
+                    $delegate._$log.error(errText);
+                    deferred.reject(new Error(errText));
+                    return deferred.promise;
+                } else {
+                    // deprecated
+                    if (angular.isDefined(config.template)) {
+                        if (angular.isUndefined(config.files)) {
+                            config.files = [];
+                        }
+                        if (angular.isString(config.template)) {
+                            config.files.push(config.template);
+                        } else if (angular.isArray(config.template)) {
+                            config.files.concat(config.template);
+                        }
+                    }
+                }
+
+                var localParams = angular.extend({}, params, config);
+
+                // if someone used an external loader and called the load function with just the module name
+                if (angular.isUndefined(config.files) && angular.isDefined(config.name) && $delegate.moduleExists(config.name)) {
+                    return $delegate.inject(config.name, localParams, true);
+                }
+
+                $delegate.filesLoader(config, localParams).then(function () {
+                    $delegate.inject(null, localParams).then(function (res) {
+                        deferred.resolve(res);
+                    }, function (err) {
+                        deferred.reject(err);
+                    });
+                }, function (err) {
+                    deferred.reject(err);
+                });
+
+                return deferred.promise;
+            };
+
+            // return the patched service
+            return $delegate;
+        }]);
+    }]);
+})(angular);
+(function (angular) {
+    'use strict';
+
+    angular.module('oc.lazyLoad').config(["$provide", function ($provide) {
+        $provide.decorator('$ocLazyLoad', ["$delegate", "$q", function ($delegate, $q) {
+            /**
+             * cssLoader function
+             * @type Function
+             * @param paths array list of css files to load
+             * @param callback to call when everything is loaded. We use a callback and not a promise
+             * @param params object config parameters
+             * because the user can overwrite cssLoader and it will probably not use promises :(
+             */
+            $delegate.cssLoader = function (paths, callback, params) {
+                var promises = [];
+                angular.forEach(paths, function (path) {
+                    promises.push($delegate.buildElement('css', path, params));
+                });
+                $q.all(promises).then(function () {
+                    callback();
+                }, function (err) {
+                    callback(err);
+                });
+            };
+            $delegate.cssLoader.ocLazyLoadLoader = true;
+
+            return $delegate;
+        }]);
+    }]);
+})(angular);
+(function (angular) {
+    'use strict';
+
+    angular.module('oc.lazyLoad').config(["$provide", function ($provide) {
+        $provide.decorator('$ocLazyLoad', ["$delegate", "$q", function ($delegate, $q) {
+            /**
+             * jsLoader function
+             * @type Function
+             * @param paths array list of js files to load
+             * @param callback to call when everything is loaded. We use a callback and not a promise
+             * @param params object config parameters
+             * because the user can overwrite jsLoader and it will probably not use promises :(
+             */
+            $delegate.jsLoader = function (paths, callback, params) {
+                var promises = [];
+                angular.forEach(paths, function (path) {
+                    promises.push($delegate.buildElement('js', path, params));
+                });
+                $q.all(promises).then(function () {
+                    callback();
+                }, function (err) {
+                    callback(err);
+                });
+            };
+            $delegate.jsLoader.ocLazyLoadLoader = true;
+
+            return $delegate;
+        }]);
+    }]);
+})(angular);
+(function (angular) {
+    'use strict';
+
+    angular.module('oc.lazyLoad').config(["$provide", function ($provide) {
+        $provide.decorator('$ocLazyLoad', ["$delegate", "$templateCache", "$q", "$http", function ($delegate, $templateCache, $q, $http) {
+            /**
+             * templatesLoader function
+             * @type Function
+             * @param paths array list of css files to load
+             * @param callback to call when everything is loaded. We use a callback and not a promise
+             * @param params object config parameters for $http
+             * because the user can overwrite templatesLoader and it will probably not use promises :(
+             */
+            $delegate.templatesLoader = function (paths, callback, params) {
+                var promises = [],
+                    filesCache = $delegate._getFilesCache();
+
+                angular.forEach(paths, function (url) {
+                    var deferred = $q.defer();
+                    promises.push(deferred.promise);
+                    $http.get(url, params).success(function (data) {
+                        if (angular.isString(data) && data.length > 0) {
+                            angular.forEach(angular.element(data), function (node) {
+                                if (node.nodeName === 'SCRIPT' && node.type === 'text/ng-template') {
+                                    $templateCache.put(node.id, node.innerHTML);
+                                }
+                            });
+                        }
+                        if (angular.isUndefined(filesCache.get(url))) {
+                            filesCache.put(url, true);
+                        }
+                        deferred.resolve();
+                    }).error(function (err) {
+                        deferred.reject(new Error('Unable to load template file "' + url + '": ' + err));
+                    });
+                });
+                return $q.all(promises).then(function () {
+                    callback();
+                }, function (err) {
+                    callback(err);
+                });
+            };
+            $delegate.templatesLoader.ocLazyLoadLoader = true;
+
+            return $delegate;
+        }]);
+    }]);
+})(angular);
+// Array.indexOf polyfill for IE8
+if (!Array.prototype.indexOf) {
+    Array.prototype.indexOf = function (searchElement, fromIndex) {
+        var k;
+
+        // 1. Let O be the result of calling ToObject passing
+        //    the this value as the argument.
+        if (this == null) {
+            throw new TypeError('"this" is null or not defined');
+        }
+
+        var O = Object(this);
+
+        // 2. Let lenValue be the result of calling the Get
+        //    internal method of O with the argument "length".
+        // 3. Let len be ToUint32(lenValue).
+        var len = O.length >>> 0;
+
+        // 4. If len is 0, return -1.
+        if (len === 0) {
+            return -1;
+        }
+
+        // 5. If argument fromIndex was passed let n be
+        //    ToInteger(fromIndex); else let n be 0.
+        var n = +fromIndex || 0;
+
+        if (Math.abs(n) === Infinity) {
+            n = 0;
+        }
+
+        // 6. If n >= len, return -1.
+        if (n >= len) {
+            return -1;
+        }
+
+        // 7. If n >= 0, then Let k be n.
+        // 8. Else, n<0, Let k be len - abs(n).
+        //    If k is less than 0, then let k be 0.
+        k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
+
+        // 9. Repeat, while k < len
+        while (k < len) {
+            // a. Let Pk be ToString(k).
+            //   This is implicit for LHS operands of the in operator
+            // b. Let kPresent be the result of calling the
+            //    HasProperty internal method of O with argument Pk.
+            //   This step can be combined with c
+            // c. If kPresent is true, then
+            //    i.  Let elementK be the result of calling the Get
+            //        internal method of O with the argument ToString(k).
+            //   ii.  Let same be the result of applying the
+            //        Strict Equality Comparison Algorithm to
+            //        searchElement and elementK.
+            //  iii.  If same is true, return k.
+            if (k in O && O[k] === searchElement) {
+                return k;
+            }
+            k++;
+        }
+        return -1;
+    };
+}
\ No newline at end of file
diff --git a/public/bower_components/pdfjs-dist/pdf.js b/public/bower_components/pdfjs-dist/pdf.js
new file mode 100644
index 0000000..3822e0c
--- /dev/null
+++ b/public/bower_components/pdfjs-dist/pdf.js
@@ -0,0 +1,8268 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+/* Copyright 2012 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*jshint globalstrict: false */
+/* globals PDFJS */
+
+// Initializing PDFJS global object (if still undefined)
+if (typeof PDFJS === 'undefined') {
+  (typeof window !== 'undefined' ? window : this).PDFJS = {};
+}
+
+PDFJS.version = '1.1.551';
+PDFJS.build = '2a5616c';
+
+(function pdfjsWrapper() {
+  // Use strict in our context only - users might not want it
+  'use strict';
+
+
+
+var globalScope = (typeof window === 'undefined') ? this : window;
+
+var isWorker = (typeof window === 'undefined');
+
+var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
+
+var TextRenderingMode = {
+  FILL: 0,
+  STROKE: 1,
+  FILL_STROKE: 2,
+  INVISIBLE: 3,
+  FILL_ADD_TO_PATH: 4,
+  STROKE_ADD_TO_PATH: 5,
+  FILL_STROKE_ADD_TO_PATH: 6,
+  ADD_TO_PATH: 7,
+  FILL_STROKE_MASK: 3,
+  ADD_TO_PATH_FLAG: 4
+};
+
+var ImageKind = {
+  GRAYSCALE_1BPP: 1,
+  RGB_24BPP: 2,
+  RGBA_32BPP: 3
+};
+
+var AnnotationType = {
+  WIDGET: 1,
+  TEXT: 2,
+  LINK: 3
+};
+
+var AnnotationBorderStyleType = {
+  SOLID: 1,
+  DASHED: 2,
+  BEVELED: 3,
+  INSET: 4,
+  UNDERLINE: 5
+};
+
+var StreamType = {
+  UNKNOWN: 0,
+  FLATE: 1,
+  LZW: 2,
+  DCT: 3,
+  JPX: 4,
+  JBIG: 5,
+  A85: 6,
+  AHX: 7,
+  CCF: 8,
+  RL: 9
+};
+
+var FontType = {
+  UNKNOWN: 0,
+  TYPE1: 1,
+  TYPE1C: 2,
+  CIDFONTTYPE0: 3,
+  CIDFONTTYPE0C: 4,
+  TRUETYPE: 5,
+  CIDFONTTYPE2: 6,
+  TYPE3: 7,
+  OPENTYPE: 8,
+  TYPE0: 9,
+  MMTYPE1: 10
+};
+
+// The global PDFJS object exposes the API
+// In production, it will be declared outside a global wrapper
+// In development, it will be declared here
+if (!globalScope.PDFJS) {
+  globalScope.PDFJS = {};
+}
+
+globalScope.PDFJS.pdfBug = false;
+
+PDFJS.VERBOSITY_LEVELS = {
+  errors: 0,
+  warnings: 1,
+  infos: 5
+};
+
+// All the possible operations for an operator list.
+var OPS = PDFJS.OPS = {
+  // Intentionally start from 1 so it is easy to spot bad operators that will be
+  // 0's.
+  dependency: 1,
+  setLineWidth: 2,
+  setLineCap: 3,
+  setLineJoin: 4,
+  setMiterLimit: 5,
+  setDash: 6,
+  setRenderingIntent: 7,
+  setFlatness: 8,
+  setGState: 9,
+  save: 10,
+  restore: 11,
+  transform: 12,
+  moveTo: 13,
+  lineTo: 14,
+  curveTo: 15,
+  curveTo2: 16,
+  curveTo3: 17,
+  closePath: 18,
+  rectangle: 19,
+  stroke: 20,
+  closeStroke: 21,
+  fill: 22,
+  eoFill: 23,
+  fillStroke: 24,
+  eoFillStroke: 25,
+  closeFillStroke: 26,
+  closeEOFillStroke: 27,
+  endPath: 28,
+  clip: 29,
+  eoClip: 30,
+  beginText: 31,
+  endText: 32,
+  setCharSpacing: 33,
+  setWordSpacing: 34,
+  setHScale: 35,
+  setLeading: 36,
+  setFont: 37,
+  setTextRenderingMode: 38,
+  setTextRise: 39,
+  moveText: 40,
+  setLeadingMoveText: 41,
+  setTextMatrix: 42,
+  nextLine: 43,
+  showText: 44,
+  showSpacedText: 45,
+  nextLineShowText: 46,
+  nextLineSetSpacingShowText: 47,
+  setCharWidth: 48,
+  setCharWidthAndBounds: 49,
+  setStrokeColorSpace: 50,
+  setFillColorSpace: 51,
+  setStrokeColor: 52,
+  setStrokeColorN: 53,
+  setFillColor: 54,
+  setFillColorN: 55,
+  setStrokeGray: 56,
+  setFillGray: 57,
+  setStrokeRGBColor: 58,
+  setFillRGBColor: 59,
+  setStrokeCMYKColor: 60,
+  setFillCMYKColor: 61,
+  shadingFill: 62,
+  beginInlineImage: 63,
+  beginImageData: 64,
+  endInlineImage: 65,
+  paintXObject: 66,
+  markPoint: 67,
+  markPointProps: 68,
+  beginMarkedContent: 69,
+  beginMarkedContentProps: 70,
+  endMarkedContent: 71,
+  beginCompat: 72,
+  endCompat: 73,
+  paintFormXObjectBegin: 74,
+  paintFormXObjectEnd: 75,
+  beginGroup: 76,
+  endGroup: 77,
+  beginAnnotations: 78,
+  endAnnotations: 79,
+  beginAnnotation: 80,
+  endAnnotation: 81,
+  paintJpegXObject: 82,
+  paintImageMaskXObject: 83,
+  paintImageMaskXObjectGroup: 84,
+  paintImageXObject: 85,
+  paintInlineImageXObject: 86,
+  paintInlineImageXObjectGroup: 87,
+  paintImageXObjectRepeat: 88,
+  paintImageMaskXObjectRepeat: 89,
+  paintSolidColorImageMask: 90,
+  constructPath: 91
+};
+
+// A notice for devs. These are good for things that are helpful to devs, such
+// as warning that Workers were disabled, which is important to devs but not
+// end users.
+function info(msg) {
+  if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.infos) {
+    console.log('Info: ' + msg);
+  }
+}
+
+// Non-fatal warnings.
+function warn(msg) {
+  if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.warnings) {
+    console.log('Warning: ' + msg);
+  }
+}
+
+// Deprecated API function -- treated as warnings.
+function deprecated(details) {
+  warn('Deprecated API usage: ' + details);
+}
+
+// Fatal errors that should trigger the fallback UI and halt execution by
+// throwing an exception.
+function error(msg) {
+  if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.errors) {
+    console.log('Error: ' + msg);
+    console.log(backtrace());
+  }
+  UnsupportedManager.notify(UNSUPPORTED_FEATURES.unknown);
+  throw new Error(msg);
+}
+
+function backtrace() {
+  try {
+    throw new Error();
+  } catch (e) {
+    return e.stack ? e.stack.split('\n').slice(2).join('\n') : '';
+  }
+}
+
+function assert(cond, msg) {
+  if (!cond) {
+    error(msg);
+  }
+}
+
+var UNSUPPORTED_FEATURES = PDFJS.UNSUPPORTED_FEATURES = {
+  unknown: 'unknown',
+  forms: 'forms',
+  javaScript: 'javaScript',
+  smask: 'smask',
+  shadingPattern: 'shadingPattern',
+  font: 'font'
+};
+
+var UnsupportedManager = PDFJS.UnsupportedManager =
+  (function UnsupportedManagerClosure() {
+  var listeners = [];
+  return {
+    listen: function (cb) {
+      listeners.push(cb);
+    },
+    notify: function (featureId) {
+      warn('Unsupported feature "' + featureId + '"');
+      for (var i = 0, ii = listeners.length; i < ii; i++) {
+        listeners[i](featureId);
+      }
+    }
+  };
+})();
+
+// Combines two URLs. The baseUrl shall be absolute URL. If the url is an
+// absolute URL, it will be returned as is.
+function combineUrl(baseUrl, url) {
+  if (!url) {
+    return baseUrl;
+  }
+  if (/^[a-z][a-z0-9+\-.]*:/i.test(url)) {
+    return url;
+  }
+  var i;
+  if (url.charAt(0) === '/') {
+    // absolute path
+    i = baseUrl.indexOf('://');
+    if (url.charAt(1) === '/') {
+      ++i;
+    } else {
+      i = baseUrl.indexOf('/', i + 3);
+    }
+    return baseUrl.substring(0, i) + url;
+  } else {
+    // relative path
+    var pathLength = baseUrl.length;
+    i = baseUrl.lastIndexOf('#');
+    pathLength = i >= 0 ? i : pathLength;
+    i = baseUrl.lastIndexOf('?', pathLength);
+    pathLength = i >= 0 ? i : pathLength;
+    var prefixLength = baseUrl.lastIndexOf('/', pathLength);
+    return baseUrl.substring(0, prefixLength + 1) + url;
+  }
+}
+
+// Validates if URL is safe and allowed, e.g. to avoid XSS.
+function isValidUrl(url, allowRelative) {
+  if (!url) {
+    return false;
+  }
+  // RFC 3986 (http://tools.ietf.org/html/rfc3986#section-3.1)
+  // scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
+  var protocol = /^[a-z][a-z0-9+\-.]*(?=:)/i.exec(url);
+  if (!protocol) {
+    return allowRelative;
+  }
+  protocol = protocol[0].toLowerCase();
+  switch (protocol) {
+    case 'http':
+    case 'https':
+    case 'ftp':
+    case 'mailto':
+    case 'tel':
+      return true;
+    default:
+      return false;
+  }
+}
+PDFJS.isValidUrl = isValidUrl;
+
+function shadow(obj, prop, value) {
+  Object.defineProperty(obj, prop, { value: value,
+                                     enumerable: true,
+                                     configurable: true,
+                                     writable: false });
+  return value;
+}
+PDFJS.shadow = shadow;
+
+var LinkTarget = PDFJS.LinkTarget = {
+  NONE: 0, // Default value.
+  SELF: 1,
+  BLANK: 2,
+  PARENT: 3,
+  TOP: 4,
+};
+var LinkTargetStringMap = [
+  '',
+  '_self',
+  '_blank',
+  '_parent',
+  '_top'
+];
+
+function isExternalLinkTargetSet() {
+  if (PDFJS.openExternalLinksInNewWindow) {
+    warn('PDFJS.openExternalLinksInNewWindow is deprecated, ' +
+         'use PDFJS.externalLinkTarget instead.');
+    if (PDFJS.externalLinkTarget === LinkTarget.NONE) {
+      PDFJS.externalLinkTarget = LinkTarget.BLANK;
+    }
+    // Reset the deprecated parameter, to suppress further warnings.
+    PDFJS.openExternalLinksInNewWindow = false;
+  }
+  switch (PDFJS.externalLinkTarget) {
+    case LinkTarget.NONE:
+      return false;
+    case LinkTarget.SELF:
+    case LinkTarget.BLANK:
+    case LinkTarget.PARENT:
+    case LinkTarget.TOP:
+      return true;
+  }
+  warn('PDFJS.externalLinkTarget is invalid: ' + PDFJS.externalLinkTarget);
+  // Reset the external link target, to suppress further warnings.
+  PDFJS.externalLinkTarget = LinkTarget.NONE;
+  return false;
+}
+PDFJS.isExternalLinkTargetSet = isExternalLinkTargetSet;
+
+var PasswordResponses = PDFJS.PasswordResponses = {
+  NEED_PASSWORD: 1,
+  INCORRECT_PASSWORD: 2
+};
+
+var PasswordException = (function PasswordExceptionClosure() {
+  function PasswordException(msg, code) {
+    this.name = 'PasswordException';
+    this.message = msg;
+    this.code = code;
+  }
+
+  PasswordException.prototype = new Error();
+  PasswordException.constructor = PasswordException;
+
+  return PasswordException;
+})();
+PDFJS.PasswordException = PasswordException;
+
+var UnknownErrorException = (function UnknownErrorExceptionClosure() {
+  function UnknownErrorException(msg, details) {
+    this.name = 'UnknownErrorException';
+    this.message = msg;
+    this.details = details;
+  }
+
+  UnknownErrorException.prototype = new Error();
+  UnknownErrorException.constructor = UnknownErrorException;
+
+  return UnknownErrorException;
+})();
+PDFJS.UnknownErrorException = UnknownErrorException;
+
+var InvalidPDFException = (function InvalidPDFExceptionClosure() {
+  function InvalidPDFException(msg) {
+    this.name = 'InvalidPDFException';
+    this.message = msg;
+  }
+
+  InvalidPDFException.prototype = new Error();
+  InvalidPDFException.constructor = InvalidPDFException;
+
+  return InvalidPDFException;
+})();
+PDFJS.InvalidPDFException = InvalidPDFException;
+
+var MissingPDFException = (function MissingPDFExceptionClosure() {
+  function MissingPDFException(msg) {
+    this.name = 'MissingPDFException';
+    this.message = msg;
+  }
+
+  MissingPDFException.prototype = new Error();
+  MissingPDFException.constructor = MissingPDFException;
+
+  return MissingPDFException;
+})();
+PDFJS.MissingPDFException = MissingPDFException;
+
+var UnexpectedResponseException =
+    (function UnexpectedResponseExceptionClosure() {
+  function UnexpectedResponseException(msg, status) {
+    this.name = 'UnexpectedResponseException';
+    this.message = msg;
+    this.status = status;
+  }
+
+  UnexpectedResponseException.prototype = new Error();
+  UnexpectedResponseException.constructor = UnexpectedResponseException;
+
+  return UnexpectedResponseException;
+})();
+PDFJS.UnexpectedResponseException = UnexpectedResponseException;
+
+var NotImplementedException = (function NotImplementedExceptionClosure() {
+  function NotImplementedException(msg) {
+    this.message = msg;
+  }
+
+  NotImplementedException.prototype = new Error();
+  NotImplementedException.prototype.name = 'NotImplementedException';
+  NotImplementedException.constructor = NotImplementedException;
+
+  return NotImplementedException;
+})();
+
+var MissingDataException = (function MissingDataExceptionClosure() {
+  function MissingDataException(begin, end) {
+    this.begin = begin;
+    this.end = end;
+    this.message = 'Missing data [' + begin + ', ' + end + ')';
+  }
+
+  MissingDataException.prototype = new Error();
+  MissingDataException.prototype.name = 'MissingDataException';
+  MissingDataException.constructor = MissingDataException;
+
+  return MissingDataException;
+})();
+
+var XRefParseException = (function XRefParseExceptionClosure() {
+  function XRefParseException(msg) {
+    this.message = msg;
+  }
+
+  XRefParseException.prototype = new Error();
+  XRefParseException.prototype.name = 'XRefParseException';
+  XRefParseException.constructor = XRefParseException;
+
+  return XRefParseException;
+})();
+
+
+function bytesToString(bytes) {
+  assert(bytes !== null && typeof bytes === 'object' &&
+         bytes.length !== undefined, 'Invalid argument for bytesToString');
+  var length = bytes.length;
+  var MAX_ARGUMENT_COUNT = 8192;
+  if (length < MAX_ARGUMENT_COUNT) {
+    return String.fromCharCode.apply(null, bytes);
+  }
+  var strBuf = [];
+  for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) {
+    var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);
+    var chunk = bytes.subarray(i, chunkEnd);
+    strBuf.push(String.fromCharCode.apply(null, chunk));
+  }
+  return strBuf.join('');
+}
+
+function stringToBytes(str) {
+  assert(typeof str === 'string', 'Invalid argument for stringToBytes');
+  var length = str.length;
+  var bytes = new Uint8Array(length);
+  for (var i = 0; i < length; ++i) {
+    bytes[i] = str.charCodeAt(i) & 0xFF;
+  }
+  return bytes;
+}
+
+function string32(value) {
+  return String.fromCharCode((value >> 24) & 0xff, (value >> 16) & 0xff,
+                             (value >> 8) & 0xff, value & 0xff);
+}
+
+function log2(x) {
+  var n = 1, i = 0;
+  while (x > n) {
+    n <<= 1;
+    i++;
+  }
+  return i;
+}
+
+function readInt8(data, start) {
+  return (data[start] << 24) >> 24;
+}
+
+function readUint16(data, offset) {
+  return (data[offset] << 8) | data[offset + 1];
+}
+
+function readUint32(data, offset) {
+  return ((data[offset] << 24) | (data[offset + 1] << 16) |
+         (data[offset + 2] << 8) | data[offset + 3]) >>> 0;
+}
+
+// Lazy test the endianness of the platform
+// NOTE: This will be 'true' for simulated TypedArrays
+function isLittleEndian() {
+  var buffer8 = new Uint8Array(2);
+  buffer8[0] = 1;
+  var buffer16 = new Uint16Array(buffer8.buffer);
+  return (buffer16[0] === 1);
+}
+
+Object.defineProperty(PDFJS, 'isLittleEndian', {
+  configurable: true,
+  get: function PDFJS_isLittleEndian() {
+    return shadow(PDFJS, 'isLittleEndian', isLittleEndian());
+  }
+});
+
+  // Lazy test if the userAgent support CanvasTypedArrays
+function hasCanvasTypedArrays() {
+  var canvas = document.createElement('canvas');
+  canvas.width = canvas.height = 1;
+  var ctx = canvas.getContext('2d');
+  var imageData = ctx.createImageData(1, 1);
+  return (typeof imageData.data.buffer !== 'undefined');
+}
+
+Object.defineProperty(PDFJS, 'hasCanvasTypedArrays', {
+  configurable: true,
+  get: function PDFJS_hasCanvasTypedArrays() {
+    return shadow(PDFJS, 'hasCanvasTypedArrays', hasCanvasTypedArrays());
+  }
+});
+
+var Uint32ArrayView = (function Uint32ArrayViewClosure() {
+
+  function Uint32ArrayView(buffer, length) {
+    this.buffer = buffer;
+    this.byteLength = buffer.length;
+    this.length = length === undefined ? (this.byteLength >> 2) : length;
+    ensureUint32ArrayViewProps(this.length);
+  }
+  Uint32ArrayView.prototype = Object.create(null);
+
+  var uint32ArrayViewSetters = 0;
+  function createUint32ArrayProp(index) {
+    return {
+      get: function () {
+        var buffer = this.buffer, offset = index << 2;
+        return (buffer[offset] | (buffer[offset + 1] << 8) |
+          (buffer[offset + 2] << 16) | (buffer[offset + 3] << 24)) >>> 0;
+      },
+      set: function (value) {
+        var buffer = this.buffer, offset = index << 2;
+        buffer[offset] = value & 255;
+        buffer[offset + 1] = (value >> 8) & 255;
+        buffer[offset + 2] = (value >> 16) & 255;
+        buffer[offset + 3] = (value >>> 24) & 255;
+      }
+    };
+  }
+
+  function ensureUint32ArrayViewProps(length) {
+    while (uint32ArrayViewSetters < length) {
+      Object.defineProperty(Uint32ArrayView.prototype,
+        uint32ArrayViewSetters,
+        createUint32ArrayProp(uint32ArrayViewSetters));
+      uint32ArrayViewSetters++;
+    }
+  }
+
+  return Uint32ArrayView;
+})();
+
+var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
+
+var Util = PDFJS.Util = (function UtilClosure() {
+  function Util() {}
+
+  var rgbBuf = ['rgb(', 0, ',', 0, ',', 0, ')'];
+
+  // makeCssRgb() can be called thousands of times. Using |rgbBuf| avoids
+  // creating many intermediate strings.
+  Util.makeCssRgb = function Util_makeCssRgb(r, g, b) {
+    rgbBuf[1] = r;
+    rgbBuf[3] = g;
+    rgbBuf[5] = b;
+    return rgbBuf.join('');
+  };
+
+  // Concatenates two transformation matrices together and returns the result.
+  Util.transform = function Util_transform(m1, m2) {
+    return [
+      m1[0] * m2[0] + m1[2] * m2[1],
+      m1[1] * m2[0] + m1[3] * m2[1],
+      m1[0] * m2[2] + m1[2] * m2[3],
+      m1[1] * m2[2] + m1[3] * m2[3],
+      m1[0] * m2[4] + m1[2] * m2[5] + m1[4],
+      m1[1] * m2[4] + m1[3] * m2[5] + m1[5]
+    ];
+  };
+
+  // For 2d affine transforms
+  Util.applyTransform = function Util_applyTransform(p, m) {
+    var xt = p[0] * m[0] + p[1] * m[2] + m[4];
+    var yt = p[0] * m[1] + p[1] * m[3] + m[5];
+    return [xt, yt];
+  };
+
+  Util.applyInverseTransform = function Util_applyInverseTransform(p, m) {
+    var d = m[0] * m[3] - m[1] * m[2];
+    var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
+    var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
+    return [xt, yt];
+  };
+
+  // Applies the transform to the rectangle and finds the minimum axially
+  // aligned bounding box.
+  Util.getAxialAlignedBoundingBox =
+    function Util_getAxialAlignedBoundingBox(r, m) {
+
+    var p1 = Util.applyTransform(r, m);
+    var p2 = Util.applyTransform(r.slice(2, 4), m);
+    var p3 = Util.applyTransform([r[0], r[3]], m);
+    var p4 = Util.applyTransform([r[2], r[1]], m);
+    return [
+      Math.min(p1[0], p2[0], p3[0], p4[0]),
+      Math.min(p1[1], p2[1], p3[1], p4[1]),
+      Math.max(p1[0], p2[0], p3[0], p4[0]),
+      Math.max(p1[1], p2[1], p3[1], p4[1])
+    ];
+  };
+
+  Util.inverseTransform = function Util_inverseTransform(m) {
+    var d = m[0] * m[3] - m[1] * m[2];
+    return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d,
+      (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];
+  };
+
+  // Apply a generic 3d matrix M on a 3-vector v:
+  //   | a b c |   | X |
+  //   | d e f | x | Y |
+  //   | g h i |   | Z |
+  // M is assumed to be serialized as [a,b,c,d,e,f,g,h,i],
+  // with v as [X,Y,Z]
+  Util.apply3dTransform = function Util_apply3dTransform(m, v) {
+    return [
+      m[0] * v[0] + m[1] * v[1] + m[2] * v[2],
+      m[3] * v[0] + m[4] * v[1] + m[5] * v[2],
+      m[6] * v[0] + m[7] * v[1] + m[8] * v[2]
+    ];
+  };
+
+  // This calculation uses Singular Value Decomposition.
+  // The SVD can be represented with formula A = USV. We are interested in the
+  // matrix S here because it represents the scale values.
+  Util.singularValueDecompose2dScale =
+    function Util_singularValueDecompose2dScale(m) {
+
+    var transpose = [m[0], m[2], m[1], m[3]];
+
+    // Multiply matrix m with its transpose.
+    var a = m[0] * transpose[0] + m[1] * transpose[2];
+    var b = m[0] * transpose[1] + m[1] * transpose[3];
+    var c = m[2] * transpose[0] + m[3] * transpose[2];
+    var d = m[2] * transpose[1] + m[3] * transpose[3];
+
+    // Solve the second degree polynomial to get roots.
+    var first = (a + d) / 2;
+    var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;
+    var sx = first + second || 1;
+    var sy = first - second || 1;
+
+    // Scale values are the square roots of the eigenvalues.
+    return [Math.sqrt(sx), Math.sqrt(sy)];
+  };
+
+  // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)
+  // For coordinate systems whose origin lies in the bottom-left, this
+  // means normalization to (BL,TR) ordering. For systems with origin in the
+  // top-left, this means (TL,BR) ordering.
+  Util.normalizeRect = function Util_normalizeRect(rect) {
+    var r = rect.slice(0); // clone rect
+    if (rect[0] > rect[2]) {
+      r[0] = rect[2];
+      r[2] = rect[0];
+    }
+    if (rect[1] > rect[3]) {
+      r[1] = rect[3];
+      r[3] = rect[1];
+    }
+    return r;
+  };
+
+  // Returns a rectangle [x1, y1, x2, y2] corresponding to the
+  // intersection of rect1 and rect2. If no intersection, returns 'false'
+  // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]
+  Util.intersect = function Util_intersect(rect1, rect2) {
+    function compare(a, b) {
+      return a - b;
+    }
+
+    // Order points along the axes
+    var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare),
+        orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare),
+        result = [];
+
+    rect1 = Util.normalizeRect(rect1);
+    rect2 = Util.normalizeRect(rect2);
+
+    // X: first and second points belong to different rectangles?
+    if ((orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) ||
+        (orderedX[0] === rect2[0] && orderedX[1] === rect1[0])) {
+      // Intersection must be between second and third points
+      result[0] = orderedX[1];
+      result[2] = orderedX[2];
+    } else {
+      return false;
+    }
+
+    // Y: first and second points belong to different rectangles?
+    if ((orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) ||
+        (orderedY[0] === rect2[1] && orderedY[1] === rect1[1])) {
+      // Intersection must be between second and third points
+      result[1] = orderedY[1];
+      result[3] = orderedY[2];
+    } else {
+      return false;
+    }
+
+    return result;
+  };
+
+  Util.sign = function Util_sign(num) {
+    return num < 0 ? -1 : 1;
+  };
+
+  Util.appendToArray = function Util_appendToArray(arr1, arr2) {
+    Array.prototype.push.apply(arr1, arr2);
+  };
+
+  Util.prependToArray = function Util_prependToArray(arr1, arr2) {
+    Array.prototype.unshift.apply(arr1, arr2);
+  };
+
+  Util.extendObj = function extendObj(obj1, obj2) {
+    for (var key in obj2) {
+      obj1[key] = obj2[key];
+    }
+  };
+
+  Util.getInheritableProperty = function Util_getInheritableProperty(dict,
+                                                                     name) {
+    while (dict && !dict.has(name)) {
+      dict = dict.get('Parent');
+    }
+    if (!dict) {
+      return null;
+    }
+    return dict.get(name);
+  };
+
+  Util.inherit = function Util_inherit(sub, base, prototype) {
+    sub.prototype = Object.create(base.prototype);
+    sub.prototype.constructor = sub;
+    for (var prop in prototype) {
+      sub.prototype[prop] = prototype[prop];
+    }
+  };
+
+  Util.loadScript = function Util_loadScript(src, callback) {
+    var script = document.createElement('script');
+    var loaded = false;
+    script.setAttribute('src', src);
+    if (callback) {
+      script.onload = function() {
+        if (!loaded) {
+          callback();
+        }
+        loaded = true;
+      };
+    }
+    document.getElementsByTagName('head')[0].appendChild(script);
+  };
+
+  return Util;
+})();
+
+/**
+ * PDF page viewport created based on scale, rotation and offset.
+ * @class
+ * @alias PDFJS.PageViewport
+ */
+var PageViewport = PDFJS.PageViewport = (function PageViewportClosure() {
+  /**
+   * @constructor
+   * @private
+   * @param viewBox {Array} xMin, yMin, xMax and yMax coordinates.
+   * @param scale {number} scale of the viewport.
+   * @param rotation {number} rotations of the viewport in degrees.
+   * @param offsetX {number} offset X
+   * @param offsetY {number} offset Y
+   * @param dontFlip {boolean} if true, axis Y will not be flipped.
+   */
+  function PageViewport(viewBox, scale, rotation, offsetX, offsetY, dontFlip) {
+    this.viewBox = viewBox;
+    this.scale = scale;
+    this.rotation = rotation;
+    this.offsetX = offsetX;
+    this.offsetY = offsetY;
+
+    // creating transform to convert pdf coordinate system to the normal
+    // canvas like coordinates taking in account scale and rotation
+    var centerX = (viewBox[2] + viewBox[0]) / 2;
+    var centerY = (viewBox[3] + viewBox[1]) / 2;
+    var rotateA, rotateB, rotateC, rotateD;
+    rotation = rotation % 360;
+    rotation = rotation < 0 ? rotation + 360 : rotation;
+    switch (rotation) {
+      case 180:
+        rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1;
+        break;
+      case 90:
+        rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0;
+        break;
+      case 270:
+        rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0;
+        break;
+      //case 0:
+      default:
+        rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1;
+        break;
+    }
+
+    if (dontFlip) {
+      rotateC = -rotateC; rotateD = -rotateD;
+    }
+
+    var offsetCanvasX, offsetCanvasY;
+    var width, height;
+    if (rotateA === 0) {
+      offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
+      offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
+      width = Math.abs(viewBox[3] - viewBox[1]) * scale;
+      height = Math.abs(viewBox[2] - viewBox[0]) * scale;
+    } else {
+      offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
+      offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
+      width = Math.abs(viewBox[2] - viewBox[0]) * scale;
+      height = Math.abs(viewBox[3] - viewBox[1]) * scale;
+    }
+    // creating transform for the following operations:
+    // translate(-centerX, -centerY), rotate and flip vertically,
+    // scale, and translate(offsetCanvasX, offsetCanvasY)
+    this.transform = [
+      rotateA * scale,
+      rotateB * scale,
+      rotateC * scale,
+      rotateD * scale,
+      offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,
+      offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY
+    ];
+
+    this.width = width;
+    this.height = height;
+    this.fontScale = scale;
+  }
+  PageViewport.prototype = /** @lends PDFJS.PageViewport.prototype */ {
+    /**
+     * Clones viewport with additional properties.
+     * @param args {Object} (optional) If specified, may contain the 'scale' or
+     * 'rotation' properties to override the corresponding properties in
+     * the cloned viewport.
+     * @returns {PDFJS.PageViewport} Cloned viewport.
+     */
+    clone: function PageViewPort_clone(args) {
+      args = args || {};
+      var scale = 'scale' in args ? args.scale : this.scale;
+      var rotation = 'rotation' in args ? args.rotation : this.rotation;
+      return new PageViewport(this.viewBox.slice(), scale, rotation,
+                              this.offsetX, this.offsetY, args.dontFlip);
+    },
+    /**
+     * Converts PDF point to the viewport coordinates. For examples, useful for
+     * converting PDF location into canvas pixel coordinates.
+     * @param x {number} X coordinate.
+     * @param y {number} Y coordinate.
+     * @returns {Object} Object that contains 'x' and 'y' properties of the
+     * point in the viewport coordinate space.
+     * @see {@link convertToPdfPoint}
+     * @see {@link convertToViewportRectangle}
+     */
+    convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) {
+      return Util.applyTransform([x, y], this.transform);
+    },
+    /**
+     * Converts PDF rectangle to the viewport coordinates.
+     * @param rect {Array} xMin, yMin, xMax and yMax coordinates.
+     * @returns {Array} Contains corresponding coordinates of the rectangle
+     * in the viewport coordinate space.
+     * @see {@link convertToViewportPoint}
+     */
+    convertToViewportRectangle:
+      function PageViewport_convertToViewportRectangle(rect) {
+      var tl = Util.applyTransform([rect[0], rect[1]], this.transform);
+      var br = Util.applyTransform([rect[2], rect[3]], this.transform);
+      return [tl[0], tl[1], br[0], br[1]];
+    },
+    /**
+     * Converts viewport coordinates to the PDF location. For examples, useful
+     * for converting canvas pixel location into PDF one.
+     * @param x {number} X coordinate.
+     * @param y {number} Y coordinate.
+     * @returns {Object} Object that contains 'x' and 'y' properties of the
+     * point in the PDF coordinate space.
+     * @see {@link convertToViewportPoint}
+     */
+    convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) {
+      return Util.applyInverseTransform([x, y], this.transform);
+    }
+  };
+  return PageViewport;
+})();
+
+var PDFStringTranslateTable = [
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014,
+  0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C,
+  0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160,
+  0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC
+];
+
+function stringToPDFString(str) {
+  var i, n = str.length, strBuf = [];
+  if (str[0] === '\xFE' && str[1] === '\xFF') {
+    // UTF16BE BOM
+    for (i = 2; i < n; i += 2) {
+      strBuf.push(String.fromCharCode(
+        (str.charCodeAt(i) << 8) | str.charCodeAt(i + 1)));
+    }
+  } else {
+    for (i = 0; i < n; ++i) {
+      var code = PDFStringTranslateTable[str.charCodeAt(i)];
+      strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));
+    }
+  }
+  return strBuf.join('');
+}
+
+function stringToUTF8String(str) {
+  return decodeURIComponent(escape(str));
+}
+
+function utf8StringToString(str) {
+  return unescape(encodeURIComponent(str));
+}
+
+function isEmptyObj(obj) {
+  for (var key in obj) {
+    return false;
+  }
+  return true;
+}
+
+function isBool(v) {
+  return typeof v === 'boolean';
+}
+
+function isInt(v) {
+  return typeof v === 'number' && ((v | 0) === v);
+}
+
+function isNum(v) {
+  return typeof v === 'number';
+}
+
+function isString(v) {
+  return typeof v === 'string';
+}
+
+function isName(v) {
+  return v instanceof Name;
+}
+
+function isCmd(v, cmd) {
+  return v instanceof Cmd && (cmd === undefined || v.cmd === cmd);
+}
+
+function isDict(v, type) {
+  if (!(v instanceof Dict)) {
+    return false;
+  }
+  if (!type) {
+    return true;
+  }
+  var dictType = v.get('Type');
+  return isName(dictType) && dictType.name === type;
+}
+
+function isArray(v) {
+  return v instanceof Array;
+}
+
+function isStream(v) {
+  return typeof v === 'object' && v !== null && v.getBytes !== undefined;
+}
+
+function isArrayBuffer(v) {
+  return typeof v === 'object' && v !== null && v.byteLength !== undefined;
+}
+
+function isRef(v) {
+  return v instanceof Ref;
+}
+
+/**
+ * Promise Capability object.
+ *
+ * @typedef {Object} PromiseCapability
+ * @property {Promise} promise - A promise object.
+ * @property {function} resolve - Fullfills the promise.
+ * @property {function} reject - Rejects the promise.
+ */
+
+/**
+ * Creates a promise capability object.
+ * @alias PDFJS.createPromiseCapability
+ *
+ * @return {PromiseCapability} A capability object contains:
+ * - a Promise, resolve and reject methods.
+ */
+function createPromiseCapability() {
+  var capability = {};
+  capability.promise = new Promise(function (resolve, reject) {
+    capability.resolve = resolve;
+    capability.reject = reject;
+  });
+  return capability;
+}
+
+PDFJS.createPromiseCapability = createPromiseCapability;
+
+/**
+ * Polyfill for Promises:
+ * The following promise implementation tries to generally implement the
+ * Promise/A+ spec. Some notable differences from other promise libaries are:
+ * - There currently isn't a seperate deferred and promise object.
+ * - Unhandled rejections eventually show an error if they aren't handled.
+ *
+ * Based off of the work in:
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=810490
+ */
+(function PromiseClosure() {
+  if (globalScope.Promise) {
+    // Promises existing in the DOM/Worker, checking presence of all/resolve
+    if (typeof globalScope.Promise.all !== 'function') {
+      globalScope.Promise.all = function (iterable) {
+        var count = 0, results = [], resolve, reject;
+        var promise = new globalScope.Promise(function (resolve_, reject_) {
+          resolve = resolve_;
+          reject = reject_;
+        });
+        iterable.forEach(function (p, i) {
+          count++;
+          p.then(function (result) {
+            results[i] = result;
+            count--;
+            if (count === 0) {
+              resolve(results);
+            }
+          }, reject);
+        });
+        if (count === 0) {
+          resolve(results);
+        }
+        return promise;
+      };
+    }
+    if (typeof globalScope.Promise.resolve !== 'function') {
+      globalScope.Promise.resolve = function (value) {
+        return new globalScope.Promise(function (resolve) { resolve(value); });
+      };
+    }
+    if (typeof globalScope.Promise.reject !== 'function') {
+      globalScope.Promise.reject = function (reason) {
+        return new globalScope.Promise(function (resolve, reject) {
+          reject(reason);
+        });
+      };
+    }
+    if (typeof globalScope.Promise.prototype.catch !== 'function') {
+      globalScope.Promise.prototype.catch = function (onReject) {
+        return globalScope.Promise.prototype.then(undefined, onReject);
+      };
+    }
+    return;
+  }
+  var STATUS_PENDING = 0;
+  var STATUS_RESOLVED = 1;
+  var STATUS_REJECTED = 2;
+
+  // In an attempt to avoid silent exceptions, unhandled rejections are
+  // tracked and if they aren't handled in a certain amount of time an
+  // error is logged.
+  var REJECTION_TIMEOUT = 500;
+
+  var HandlerManager = {
+    handlers: [],
+    running: false,
+    unhandledRejections: [],
+    pendingRejectionCheck: false,
+
+    scheduleHandlers: function scheduleHandlers(promise) {
+      if (promise._status === STATUS_PENDING) {
+        return;
+      }
+
+      this.handlers = this.handlers.concat(promise._handlers);
+      promise._handlers = [];
+
+      if (this.running) {
+        return;
+      }
+      this.running = true;
+
+      setTimeout(this.runHandlers.bind(this), 0);
+    },
+
+    runHandlers: function runHandlers() {
+      var RUN_TIMEOUT = 1; // ms
+      var timeoutAt = Date.now() + RUN_TIMEOUT;
+      while (this.handlers.length > 0) {
+        var handler = this.handlers.shift();
+
+        var nextStatus = handler.thisPromise._status;
+        var nextValue = handler.thisPromise._value;
+
+        try {
+          if (nextStatus === STATUS_RESOLVED) {
+            if (typeof handler.onResolve === 'function') {
+              nextValue = handler.onResolve(nextValue);
+            }
+          } else if (typeof handler.onReject === 'function') {
+              nextValue = handler.onReject(nextValue);
+              nextStatus = STATUS_RESOLVED;
+
+              if (handler.thisPromise._unhandledRejection) {
+                this.removeUnhandeledRejection(handler.thisPromise);
+              }
+          }
+        } catch (ex) {
+          nextStatus = STATUS_REJECTED;
+          nextValue = ex;
+        }
+
+        handler.nextPromise._updateStatus(nextStatus, nextValue);
+        if (Date.now() >= timeoutAt) {
+          break;
+        }
+      }
+
+      if (this.handlers.length > 0) {
+        setTimeout(this.runHandlers.bind(this), 0);
+        return;
+      }
+
+      this.running = false;
+    },
+
+    addUnhandledRejection: function addUnhandledRejection(promise) {
+      this.unhandledRejections.push({
+        promise: promise,
+        time: Date.now()
+      });
+      this.scheduleRejectionCheck();
+    },
+
+    removeUnhandeledRejection: function removeUnhandeledRejection(promise) {
+      promise._unhandledRejection = false;
+      for (var i = 0; i < this.unhandledRejections.length; i++) {
+        if (this.unhandledRejections[i].promise === promise) {
+          this.unhandledRejections.splice(i);
+          i--;
+        }
+      }
+    },
+
+    scheduleRejectionCheck: function scheduleRejectionCheck() {
+      if (this.pendingRejectionCheck) {
+        return;
+      }
+      this.pendingRejectionCheck = true;
+      setTimeout(function rejectionCheck() {
+        this.pendingRejectionCheck = false;
+        var now = Date.now();
+        for (var i = 0; i < this.unhandledRejections.length; i++) {
+          if (now - this.unhandledRejections[i].time > REJECTION_TIMEOUT) {
+            var unhandled = this.unhandledRejections[i].promise._value;
+            var msg = 'Unhandled rejection: ' + unhandled;
+            if (unhandled.stack) {
+              msg += '\n' + unhandled.stack;
+            }
+            warn(msg);
+            this.unhandledRejections.splice(i);
+            i--;
+          }
+        }
+        if (this.unhandledRejections.length) {
+          this.scheduleRejectionCheck();
+        }
+      }.bind(this), REJECTION_TIMEOUT);
+    }
+  };
+
+  function Promise(resolver) {
+    this._status = STATUS_PENDING;
+    this._handlers = [];
+    try {
+      resolver.call(this, this._resolve.bind(this), this._reject.bind(this));
+    } catch (e) {
+      this._reject(e);
+    }
+  }
+  /**
+   * Builds a promise that is resolved when all the passed in promises are
+   * resolved.
+   * @param {array} array of data and/or promises to wait for.
+   * @return {Promise} New dependant promise.
+   */
+  Promise.all = function Promise_all(promises) {
+    var resolveAll, rejectAll;
+    var deferred = new Promise(function (resolve, reject) {
+      resolveAll = resolve;
+      rejectAll = reject;
+    });
+    var unresolved = promises.length;
+    var results = [];
+    if (unresolved === 0) {
+      resolveAll(results);
+      return deferred;
+    }
+    function reject(reason) {
+      if (deferred._status === STATUS_REJECTED) {
+        return;
+      }
+      results = [];
+      rejectAll(reason);
+    }
+    for (var i = 0, ii = promises.length; i < ii; ++i) {
+      var promise = promises[i];
+      var resolve = (function(i) {
+        return function(value) {
+          if (deferred._status === STATUS_REJECTED) {
+            return;
+          }
+          results[i] = value;
+          unresolved--;
+          if (unresolved === 0) {
+            resolveAll(results);
+          }
+        };
+      })(i);
+      if (Promise.isPromise(promise)) {
+        promise.then(resolve, reject);
+      } else {
+        resolve(promise);
+      }
+    }
+    return deferred;
+  };
+
+  /**
+   * Checks if the value is likely a promise (has a 'then' function).
+   * @return {boolean} true if value is thenable
+   */
+  Promise.isPromise = function Promise_isPromise(value) {
+    return value && typeof value.then === 'function';
+  };
+
+  /**
+   * Creates resolved promise
+   * @param value resolve value
+   * @returns {Promise}
+   */
+  Promise.resolve = function Promise_resolve(value) {
+    return new Promise(function (resolve) { resolve(value); });
+  };
+
+  /**
+   * Creates rejected promise
+   * @param reason rejection value
+   * @returns {Promise}
+   */
+  Promise.reject = function Promise_reject(reason) {
+    return new Promise(function (resolve, reject) { reject(reason); });
+  };
+
+  Promise.prototype = {
+    _status: null,
+    _value: null,
+    _handlers: null,
+    _unhandledRejection: null,
+
+    _updateStatus: function Promise__updateStatus(status, value) {
+      if (this._status === STATUS_RESOLVED ||
+          this._status === STATUS_REJECTED) {
+        return;
+      }
+
+      if (status === STATUS_RESOLVED &&
+          Promise.isPromise(value)) {
+        value.then(this._updateStatus.bind(this, STATUS_RESOLVED),
+                   this._updateStatus.bind(this, STATUS_REJECTED));
+        return;
+      }
+
+      this._status = status;
+      this._value = value;
+
+      if (status === STATUS_REJECTED && this._handlers.length === 0) {
+        this._unhandledRejection = true;
+        HandlerManager.addUnhandledRejection(this);
+      }
+
+      HandlerManager.scheduleHandlers(this);
+    },
+
+    _resolve: function Promise_resolve(value) {
+      this._updateStatus(STATUS_RESOLVED, value);
+    },
+
+    _reject: function Promise_reject(reason) {
+      this._updateStatus(STATUS_REJECTED, reason);
+    },
+
+    then: function Promise_then(onResolve, onReject) {
+      var nextPromise = new Promise(function (resolve, reject) {
+        this.resolve = resolve;
+        this.reject = reject;
+      });
+      this._handlers.push({
+        thisPromise: this,
+        onResolve: onResolve,
+        onReject: onReject,
+        nextPromise: nextPromise
+      });
+      HandlerManager.scheduleHandlers(this);
+      return nextPromise;
+    },
+
+    catch: function Promise_catch(onReject) {
+      return this.then(undefined, onReject);
+    }
+  };
+
+  globalScope.Promise = Promise;
+})();
+
+var StatTimer = (function StatTimerClosure() {
+  function rpad(str, pad, length) {
+    while (str.length < length) {
+      str += pad;
+    }
+    return str;
+  }
+  function StatTimer() {
+    this.started = {};
+    this.times = [];
+    this.enabled = true;
+  }
+  StatTimer.prototype = {
+    time: function StatTimer_time(name) {
+      if (!this.enabled) {
+        return;
+      }
+      if (name in this.started) {
+        warn('Timer is already running for ' + name);
+      }
+      this.started[name] = Date.now();
+    },
+    timeEnd: function StatTimer_timeEnd(name) {
+      if (!this.enabled) {
+        return;
+      }
+      if (!(name in this.started)) {
+        warn('Timer has not been started for ' + name);
+      }
+      this.times.push({
+        'name': name,
+        'start': this.started[name],
+        'end': Date.now()
+      });
+      // Remove timer from started so it can be called again.
+      delete this.started[name];
+    },
+    toString: function StatTimer_toString() {
+      var i, ii;
+      var times = this.times;
+      var out = '';
+      // Find the longest name for padding purposes.
+      var longest = 0;
+      for (i = 0, ii = times.length; i < ii; ++i) {
+        var name = times[i]['name'];
+        if (name.length > longest) {
+          longest = name.length;
+        }
+      }
+      for (i = 0, ii = times.length; i < ii; ++i) {
+        var span = times[i];
+        var duration = span.end - span.start;
+        out += rpad(span['name'], ' ', longest) + ' ' + duration + 'ms\n';
+      }
+      return out;
+    }
+  };
+  return StatTimer;
+})();
+
+PDFJS.createBlob = function createBlob(data, contentType) {
+  if (typeof Blob !== 'undefined') {
+    return new Blob([data], { type: contentType });
+  }
+  // Blob builder is deprecated in FF14 and removed in FF18.
+  var bb = new MozBlobBuilder();
+  bb.append(data);
+  return bb.getBlob(contentType);
+};
+
+PDFJS.createObjectURL = (function createObjectURLClosure() {
+  // Blob/createObjectURL is not available, falling back to data schema.
+  var digits =
+    'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+  return function createObjectURL(data, contentType) {
+    if (!PDFJS.disableCreateObjectURL &&
+        typeof URL !== 'undefined' && URL.createObjectURL) {
+      var blob = PDFJS.createBlob(data, contentType);
+      return URL.createObjectURL(blob);
+    }
+
+    var buffer = 'data:' + contentType + ';base64,';
+    for (var i = 0, ii = data.length; i < ii; i += 3) {
+      var b1 = data[i] & 0xFF;
+      var b2 = data[i + 1] & 0xFF;
+      var b3 = data[i + 2] & 0xFF;
+      var d1 = b1 >> 2, d2 = ((b1 & 3) << 4) | (b2 >> 4);
+      var d3 = i + 1 < ii ? ((b2 & 0xF) << 2) | (b3 >> 6) : 64;
+      var d4 = i + 2 < ii ? (b3 & 0x3F) : 64;
+      buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
+    }
+    return buffer;
+  };
+})();
+
+function MessageHandler(name, comObj) {
+  this.name = name;
+  this.comObj = comObj;
+  this.callbackIndex = 1;
+  this.postMessageTransfers = true;
+  var callbacksCapabilities = this.callbacksCapabilities = {};
+  var ah = this.actionHandler = {};
+
+  ah['console_log'] = [function ahConsoleLog(data) {
+    console.log.apply(console, data);
+  }];
+  ah['console_error'] = [function ahConsoleError(data) {
+    console.error.apply(console, data);
+  }];
+  ah['_unsupported_feature'] = [function ah_unsupportedFeature(data) {
+    UnsupportedManager.notify(data);
+  }];
+
+  comObj.onmessage = function messageHandlerComObjOnMessage(event) {
+    var data = event.data;
+    if (data.isReply) {
+      var callbackId = data.callbackId;
+      if (data.callbackId in callbacksCapabilities) {
+        var callback = callbacksCapabilities[callbackId];
+        delete callbacksCapabilities[callbackId];
+        if ('error' in data) {
+          callback.reject(data.error);
+        } else {
+          callback.resolve(data.data);
+        }
+      } else {
+        error('Cannot resolve callback ' + callbackId);
+      }
+    } else if (data.action in ah) {
+      var action = ah[data.action];
+      if (data.callbackId) {
+        Promise.resolve().then(function () {
+          return action[0].call(action[1], data.data);
+        }).then(function (result) {
+          comObj.postMessage({
+            isReply: true,
+            callbackId: data.callbackId,
+            data: result
+          });
+        }, function (reason) {
+          if (reason instanceof Error) {
+            // Serialize error to avoid "DataCloneError"
+            reason = reason + '';
+          }
+          comObj.postMessage({
+            isReply: true,
+            callbackId: data.callbackId,
+            error: reason
+          });
+        });
+      } else {
+        action[0].call(action[1], data.data);
+      }
+    } else {
+      error('Unknown action from worker: ' + data.action);
+    }
+  };
+}
+
+MessageHandler.prototype = {
+  on: function messageHandlerOn(actionName, handler, scope) {
+    var ah = this.actionHandler;
+    if (ah[actionName]) {
+      error('There is already an actionName called "' + actionName + '"');
+    }
+    ah[actionName] = [handler, scope];
+  },
+  /**
+   * Sends a message to the comObj to invoke the action with the supplied data.
+   * @param {String} actionName Action to call.
+   * @param {JSON} data JSON data to send.
+   * @param {Array} [transfers] Optional list of transfers/ArrayBuffers
+   */
+  send: function messageHandlerSend(actionName, data, transfers) {
+    var message = {
+      action: actionName,
+      data: data
+    };
+    this.postMessage(message, transfers);
+  },
+  /**
+   * Sends a message to the comObj to invoke the action with the supplied data.
+   * Expects that other side will callback with the response.
+   * @param {String} actionName Action to call.
+   * @param {JSON} data JSON data to send.
+   * @param {Array} [transfers] Optional list of transfers/ArrayBuffers.
+   * @returns {Promise} Promise to be resolved with response data.
+   */
+  sendWithPromise:
+    function messageHandlerSendWithPromise(actionName, data, transfers) {
+    var callbackId = this.callbackIndex++;
+    var message = {
+      action: actionName,
+      data: data,
+      callbackId: callbackId
+    };
+    var capability = createPromiseCapability();
+    this.callbacksCapabilities[callbackId] = capability;
+    try {
+      this.postMessage(message, transfers);
+    } catch (e) {
+      capability.reject(e);
+    }
+    return capability.promise;
+  },
+  /**
+   * Sends raw message to the comObj.
+   * @private
+   * @param message {Object} Raw message.
+   * @param transfers List of transfers/ArrayBuffers, or undefined.
+   */
+  postMessage: function (message, transfers) {
+    if (transfers && this.postMessageTransfers) {
+      this.comObj.postMessage(message, transfers);
+    } else {
+      this.comObj.postMessage(message);
+    }
+  }
+};
+
+function loadJpegStream(id, imageUrl, objs) {
+  var img = new Image();
+  img.onload = (function loadJpegStream_onloadClosure() {
+    objs.resolve(id, img);
+  });
+  img.onerror = (function loadJpegStream_onerrorClosure() {
+    objs.resolve(id, null);
+    warn('Error during JPEG image loading');
+  });
+  img.src = imageUrl;
+}
+
+
+/**
+ * The maximum allowed image size in total pixels e.g. width * height. Images
+ * above this value will not be drawn. Use -1 for no limit.
+ * @var {number}
+ */
+PDFJS.maxImageSize = (PDFJS.maxImageSize === undefined ?
+                      -1 : PDFJS.maxImageSize);
+
+/**
+ * The url of where the predefined Adobe CMaps are located. Include trailing
+ * slash.
+ * @var {string}
+ */
+PDFJS.cMapUrl = (PDFJS.cMapUrl === undefined ? null : PDFJS.cMapUrl);
+
+/**
+ * Specifies if CMaps are binary packed.
+ * @var {boolean}
+ */
+PDFJS.cMapPacked = PDFJS.cMapPacked === undefined ? false : PDFJS.cMapPacked;
+
+/**
+ * By default fonts are converted to OpenType fonts and loaded via font face
+ * rules. If disabled, the font will be rendered using a built in font renderer
+ * that constructs the glyphs with primitive path commands.
+ * @var {boolean}
+ */
+PDFJS.disableFontFace = (PDFJS.disableFontFace === undefined ?
+                         false : PDFJS.disableFontFace);
+
+/**
+ * Path for image resources, mainly for annotation icons. Include trailing
+ * slash.
+ * @var {string}
+ */
+PDFJS.imageResourcesPath = (PDFJS.imageResourcesPath === undefined ?
+                            '' : PDFJS.imageResourcesPath);
+
+/**
+ * Disable the web worker and run all code on the main thread. This will happen
+ * automatically if the browser doesn't support workers or sending typed arrays
+ * to workers.
+ * @var {boolean}
+ */
+PDFJS.disableWorker = (PDFJS.disableWorker === undefined ?
+                       false : PDFJS.disableWorker);
+
+/**
+ * Path and filename of the worker file. Required when the worker is enabled in
+ * development mode. If unspecified in the production build, the worker will be
+ * loaded based on the location of the pdf.js file.
+ * @var {string}
+ */
+PDFJS.workerSrc = (PDFJS.workerSrc === undefined ? null : PDFJS.workerSrc);
+
+/**
+ * Disable range request loading of PDF files. When enabled and if the server
+ * supports partial content requests then the PDF will be fetched in chunks.
+ * Enabled (false) by default.
+ * @var {boolean}
+ */
+PDFJS.disableRange = (PDFJS.disableRange === undefined ?
+                      false : PDFJS.disableRange);
+
+/**
+ * Disable streaming of PDF file data. By default PDF.js attempts to load PDF
+ * in chunks. This default behavior can be disabled.
+ * @var {boolean}
+ */
+PDFJS.disableStream = (PDFJS.disableStream === undefined ?
+                       false : PDFJS.disableStream);
+
+/**
+ * Disable pre-fetching of PDF file data. When range requests are enabled PDF.js
+ * will automatically keep fetching more data even if it isn't needed to display
+ * the current page. This default behavior can be disabled.
+ *
+ * NOTE: It is also necessary to disable streaming, see above,
+ *       in order for disabling of pre-fetching to work correctly.
+ * @var {boolean}
+ */
+PDFJS.disableAutoFetch = (PDFJS.disableAutoFetch === undefined ?
+                          false : PDFJS.disableAutoFetch);
+
+/**
+ * Enables special hooks for debugging PDF.js.
+ * @var {boolean}
+ */
+PDFJS.pdfBug = (PDFJS.pdfBug === undefined ? false : PDFJS.pdfBug);
+
+/**
+ * Enables transfer usage in postMessage for ArrayBuffers.
+ * @var {boolean}
+ */
+PDFJS.postMessageTransfers = (PDFJS.postMessageTransfers === undefined ?
+                              true : PDFJS.postMessageTransfers);
+
+/**
+ * Disables URL.createObjectURL usage.
+ * @var {boolean}
+ */
+PDFJS.disableCreateObjectURL = (PDFJS.disableCreateObjectURL === undefined ?
+                                false : PDFJS.disableCreateObjectURL);
+
+/**
+ * Disables WebGL usage.
+ * @var {boolean}
+ */
+PDFJS.disableWebGL = (PDFJS.disableWebGL === undefined ?
+                      true : PDFJS.disableWebGL);
+
+/**
+ * Disables fullscreen support, and by extension Presentation Mode,
+ * in browsers which support the fullscreen API.
+ * @var {boolean}
+ */
+PDFJS.disableFullscreen = (PDFJS.disableFullscreen === undefined ?
+                           false : PDFJS.disableFullscreen);
+
+/**
+ * Enables CSS only zooming.
+ * @var {boolean}
+ */
+PDFJS.useOnlyCssZoom = (PDFJS.useOnlyCssZoom === undefined ?
+                        false : PDFJS.useOnlyCssZoom);
+
+/**
+ * Controls the logging level.
+ * The constants from PDFJS.VERBOSITY_LEVELS should be used:
+ * - errors
+ * - warnings [default]
+ * - infos
+ * @var {number}
+ */
+PDFJS.verbosity = (PDFJS.verbosity === undefined ?
+                   PDFJS.VERBOSITY_LEVELS.warnings : PDFJS.verbosity);
+
+/**
+ * The maximum supported canvas size in total pixels e.g. width * height.
+ * The default value is 4096 * 4096. Use -1 for no limit.
+ * @var {number}
+ */
+PDFJS.maxCanvasPixels = (PDFJS.maxCanvasPixels === undefined ?
+                         16777216 : PDFJS.maxCanvasPixels);
+
+/**
+ * (Deprecated) Opens external links in a new window if enabled.
+ * The default behavior opens external links in the PDF.js window.
+ * @var {boolean}
+ */
+PDFJS.openExternalLinksInNewWindow = (
+  PDFJS.openExternalLinksInNewWindow === undefined ?
+    false : PDFJS.openExternalLinksInNewWindow);
+
+/**
+ * Specifies the |target| attribute for external links.
+ * The constants from PDFJS.LinkTarget should be used:
+ *  - NONE [default]
+ *  - SELF
+ *  - BLANK
+ *  - PARENT
+ *  - TOP
+ * @var {number}
+ */
+PDFJS.externalLinkTarget = (PDFJS.externalLinkTarget === undefined ?
+                            PDFJS.LinkTarget.NONE : PDFJS.externalLinkTarget);
+
+/**
+  * Determines if we can eval strings as JS. Primarily used to improve
+  * performance for font rendering.
+  * @var {boolean}
+  */
+PDFJS.isEvalSupported = (PDFJS.isEvalSupported === undefined ?
+                         true : PDFJS.isEvalSupported);
+
+/**
+ * Document initialization / loading parameters object.
+ *
+ * @typedef {Object} DocumentInitParameters
+ * @property {string}     url   - The URL of the PDF.
+ * @property {TypedArray|Array|string} data - Binary PDF data. Use typed arrays
+ *   (Uint8Array) to improve the memory usage. If PDF data is BASE64-encoded,
+ *   use atob() to convert it to a binary string first.
+ * @property {Object}     httpHeaders - Basic authentication headers.
+ * @property {boolean}    withCredentials - Indicates whether or not cross-site
+ *   Access-Control requests should be made using credentials such as cookies
+ *   or authorization headers. The default is false.
+ * @property {string}     password - For decrypting password-protected PDFs.
+ * @property {TypedArray} initialData - A typed array with the first portion or
+ *   all of the pdf data. Used by the extension since some data is already
+ *   loaded before the switch to range requests.
+ * @property {number}     length - The PDF file length. It's used for progress
+ *   reports and range requests operations.
+ * @property {PDFDataRangeTransport} range
+ */
+
+/**
+ * @typedef {Object} PDFDocumentStats
+ * @property {Array} streamTypes - Used stream types in the document (an item
+ *   is set to true if specific stream ID was used in the document).
+ * @property {Array} fontTypes - Used font type in the document (an item is set
+ *   to true if specific font ID was used in the document).
+ */
+
+/**
+ * This is the main entry point for loading a PDF and interacting with it.
+ * NOTE: If a URL is used to fetch the PDF data a standard XMLHttpRequest(XHR)
+ * is used, which means it must follow the same origin rules that any XHR does
+ * e.g. No cross domain requests without CORS.
+ *
+ * @param {string|TypedArray|DocumentInitParameters|PDFDataRangeTransport} src
+ * Can be a url to where a PDF is located, a typed array (Uint8Array)
+ * already populated with data or parameter object.
+ *
+ * @param {PDFDataRangeTransport} pdfDataRangeTransport (deprecated) It is used
+ * if you want to manually serve range requests for data in the PDF.
+ *
+ * @param {function} passwordCallback (deprecated) It is used to request a
+ * password if wrong or no password was provided. The callback receives two
+ * parameters: function that needs to be called with new password and reason
+ * (see {PasswordResponses}).
+ *
+ * @param {function} progressCallback (deprecated) It is used to be able to
+ * monitor the loading progress of the PDF file (necessary to implement e.g.
+ * a loading bar). The callback receives an {Object} with the properties:
+ * {number} loaded and {number} total.
+ *
+ * @return {PDFDocumentLoadingTask}
+ */
+PDFJS.getDocument = function getDocument(src,
+                                         pdfDataRangeTransport,
+                                         passwordCallback,
+                                         progressCallback) {
+  var task = new PDFDocumentLoadingTask();
+
+  // Support of the obsolete arguments (for compatibility with API v1.0)
+  if (arguments.length > 1) {
+    deprecated('getDocument is called with pdfDataRangeTransport, ' +
+               'passwordCallback or progressCallback argument');
+  }
+  if (pdfDataRangeTransport) {
+    if (!(pdfDataRangeTransport instanceof PDFDataRangeTransport)) {
+      // Not a PDFDataRangeTransport instance, trying to add missing properties.
+      pdfDataRangeTransport = Object.create(pdfDataRangeTransport);
+      pdfDataRangeTransport.length = src.length;
+      pdfDataRangeTransport.initialData = src.initialData;
+      if (!pdfDataRangeTransport.abort) {
+        pdfDataRangeTransport.abort = function () {};
+      }
+    }
+    src = Object.create(src);
+    src.range = pdfDataRangeTransport;
+  }
+  task.onPassword = passwordCallback || null;
+  task.onProgress = progressCallback || null;
+
+  var workerInitializedCapability, transport;
+  var source;
+  if (typeof src === 'string') {
+    source = { url: src };
+  } else if (isArrayBuffer(src)) {
+    source = { data: src };
+  } else if (src instanceof PDFDataRangeTransport) {
+    source = { range: src };
+  } else {
+    if (typeof src !== 'object') {
+      error('Invalid parameter in getDocument, need either Uint8Array, ' +
+        'string or a parameter object');
+    }
+    if (!src.url && !src.data && !src.range) {
+      error('Invalid parameter object: need either .data, .range or .url');
+    }
+
+    source = src;
+  }
+
+  var params = {};
+  for (var key in source) {
+    if (key === 'url' && typeof window !== 'undefined') {
+      // The full path is required in the 'url' field.
+      params[key] = combineUrl(window.location.href, source[key]);
+      continue;
+    } else if (key === 'range') {
+      continue;
+    } else if (key === 'data' && !(source[key] instanceof Uint8Array)) {
+      // Converting string or array-like data to Uint8Array.
+      var pdfBytes = source[key];
+      if (typeof pdfBytes === 'string') {
+        params[key] = stringToBytes(pdfBytes);
+      } else if (typeof pdfBytes === 'object' && pdfBytes !== null &&
+                 !isNaN(pdfBytes.length)) {
+        params[key] = new Uint8Array(pdfBytes);
+      } else if (isArrayBuffer(pdfBytes)) {
+        params[key] = new Uint8Array(pdfBytes);
+      } else {
+        error('Invalid PDF binary data: either typed array, string or ' +
+              'array-like object is expected in the data property.');
+      }
+      continue;
+    }
+    params[key] = source[key];
+  }
+
+  workerInitializedCapability = createPromiseCapability();
+  transport = new WorkerTransport(workerInitializedCapability, source.range);
+  workerInitializedCapability.promise.then(function transportInitialized() {
+    transport.fetchDocument(task, params);
+  });
+  task._transport = transport;
+
+  return task;
+};
+
+/**
+ * PDF document loading operation.
+ * @class
+ */
+var PDFDocumentLoadingTask = (function PDFDocumentLoadingTaskClosure() {
+  /** @constructs PDFDocumentLoadingTask */
+  function PDFDocumentLoadingTask() {
+    this._capability = createPromiseCapability();
+    this._transport = null;
+
+    /**
+     * Callback to request a password if wrong or no password was provided.
+     * The callback receives two parameters: function that needs to be called
+     * with new password and reason (see {PasswordResponses}).
+     */
+    this.onPassword = null;
+
+    /**
+     * Callback to be able to monitor the loading progress of the PDF file
+     * (necessary to implement e.g. a loading bar). The callback receives
+     * an {Object} with the properties: {number} loaded and {number} total.
+     */
+    this.onProgress = null;
+  }
+
+  PDFDocumentLoadingTask.prototype =
+      /** @lends PDFDocumentLoadingTask.prototype */ {
+    /**
+     * @return {Promise}
+     */
+    get promise() {
+      return this._capability.promise;
+    },
+
+    /**
+     * Aborts all network requests and destroys worker.
+     * @return {Promise} A promise that is resolved after destruction activity
+     *                   is completed.
+     */
+    destroy: function () {
+      return this._transport.destroy();
+    },
+
+    /**
+     * Registers callbacks to indicate the document loading completion.
+     *
+     * @param {function} onFulfilled The callback for the loading completion.
+     * @param {function} onRejected The callback for the loading failure.
+     * @return {Promise} A promise that is resolved after the onFulfilled or
+     *                   onRejected callback.
+     */
+    then: function PDFDocumentLoadingTask_then(onFulfilled, onRejected) {
+      return this.promise.then.apply(this.promise, arguments);
+    }
+  };
+
+  return PDFDocumentLoadingTask;
+})();
+
+/**
+ * Abstract class to support range requests file loading.
+ * @class
+ */
+var PDFDataRangeTransport = (function pdfDataRangeTransportClosure() {
+  /**
+   * @constructs PDFDataRangeTransport
+   * @param {number} length
+   * @param {Uint8Array} initialData
+   */
+  function PDFDataRangeTransport(length, initialData) {
+    this.length = length;
+    this.initialData = initialData;
+
+    this._rangeListeners = [];
+    this._progressListeners = [];
+    this._progressiveReadListeners = [];
+    this._readyCapability = createPromiseCapability();
+  }
+  PDFDataRangeTransport.prototype =
+      /** @lends PDFDataRangeTransport.prototype */ {
+    addRangeListener:
+        function PDFDataRangeTransport_addRangeListener(listener) {
+      this._rangeListeners.push(listener);
+    },
+
+    addProgressListener:
+        function PDFDataRangeTransport_addProgressListener(listener) {
+      this._progressListeners.push(listener);
+    },
+
+    addProgressiveReadListener:
+        function PDFDataRangeTransport_addProgressiveReadListener(listener) {
+      this._progressiveReadListeners.push(listener);
+    },
+
+    onDataRange: function PDFDataRangeTransport_onDataRange(begin, chunk) {
+      var listeners = this._rangeListeners;
+      for (var i = 0, n = listeners.length; i < n; ++i) {
+        listeners[i](begin, chunk);
+      }
+    },
+
+    onDataProgress: function PDFDataRangeTransport_onDataProgress(loaded) {
+      this._readyCapability.promise.then(function () {
+        var listeners = this._progressListeners;
+        for (var i = 0, n = listeners.length; i < n; ++i) {
+          listeners[i](loaded);
+        }
+      }.bind(this));
+    },
+
+    onDataProgressiveRead:
+        function PDFDataRangeTransport_onDataProgress(chunk) {
+      this._readyCapability.promise.then(function () {
+        var listeners = this._progressiveReadListeners;
+        for (var i = 0, n = listeners.length; i < n; ++i) {
+          listeners[i](chunk);
+        }
+      }.bind(this));
+    },
+
+    transportReady: function PDFDataRangeTransport_transportReady() {
+      this._readyCapability.resolve();
+    },
+
+    requestDataRange:
+        function PDFDataRangeTransport_requestDataRange(begin, end) {
+      throw new Error('Abstract method PDFDataRangeTransport.requestDataRange');
+    },
+
+    abort: function PDFDataRangeTransport_abort() {
+    }
+  };
+  return PDFDataRangeTransport;
+})();
+
+PDFJS.PDFDataRangeTransport = PDFDataRangeTransport;
+
+/**
+ * Proxy to a PDFDocument in the worker thread. Also, contains commonly used
+ * properties that can be read synchronously.
+ * @class
+ */
+var PDFDocumentProxy = (function PDFDocumentProxyClosure() {
+  function PDFDocumentProxy(pdfInfo, transport, loadingTask) {
+    this.pdfInfo = pdfInfo;
+    this.transport = transport;
+    this.loadingTask = loadingTask;
+  }
+  PDFDocumentProxy.prototype = /** @lends PDFDocumentProxy.prototype */ {
+    /**
+     * @return {number} Total number of pages the PDF contains.
+     */
+    get numPages() {
+      return this.pdfInfo.numPages;
+    },
+    /**
+     * @return {string} A unique ID to identify a PDF. Not guaranteed to be
+     * unique.
+     */
+    get fingerprint() {
+      return this.pdfInfo.fingerprint;
+    },
+    /**
+     * @param {number} pageNumber The page number to get. The first page is 1.
+     * @return {Promise} A promise that is resolved with a {@link PDFPageProxy}
+     * object.
+     */
+    getPage: function PDFDocumentProxy_getPage(pageNumber) {
+      return this.transport.getPage(pageNumber);
+    },
+    /**
+     * @param {{num: number, gen: number}} ref The page reference. Must have
+     *   the 'num' and 'gen' properties.
+     * @return {Promise} A promise that is resolved with the page index that is
+     * associated with the reference.
+     */
+    getPageIndex: function PDFDocumentProxy_getPageIndex(ref) {
+      return this.transport.getPageIndex(ref);
+    },
+    /**
+     * @return {Promise} A promise that is resolved with a lookup table for
+     * mapping named destinations to reference numbers.
+     *
+     * This can be slow for large documents: use getDestination instead
+     */
+    getDestinations: function PDFDocumentProxy_getDestinations() {
+      return this.transport.getDestinations();
+    },
+    /**
+     * @param {string} id The named destination to get.
+     * @return {Promise} A promise that is resolved with all information
+     * of the given named destination.
+     */
+    getDestination: function PDFDocumentProxy_getDestination(id) {
+      return this.transport.getDestination(id);
+    },
+    /**
+     * @return {Promise} A promise that is resolved with a lookup table for
+     * mapping named attachments to their content.
+     */
+    getAttachments: function PDFDocumentProxy_getAttachments() {
+      return this.transport.getAttachments();
+    },
+    /**
+     * @return {Promise} A promise that is resolved with an array of all the
+     * JavaScript strings in the name tree.
+     */
+    getJavaScript: function PDFDocumentProxy_getJavaScript() {
+      return this.transport.getJavaScript();
+    },
+    /**
+     * @return {Promise} A promise that is resolved with an {Array} that is a
+     * tree outline (if it has one) of the PDF. The tree is in the format of:
+     * [
+     *  {
+     *   title: string,
+     *   bold: boolean,
+     *   italic: boolean,
+     *   color: rgb array,
+     *   dest: dest obj,
+     *   items: array of more items like this
+     *  },
+     *  ...
+     * ].
+     */
+    getOutline: function PDFDocumentProxy_getOutline() {
+      return this.transport.getOutline();
+    },
+    /**
+     * @return {Promise} A promise that is resolved with an {Object} that has
+     * info and metadata properties.  Info is an {Object} filled with anything
+     * available in the information dictionary and similarly metadata is a
+     * {Metadata} object with information from the metadata section of the PDF.
+     */
+    getMetadata: function PDFDocumentProxy_getMetadata() {
+      return this.transport.getMetadata();
+    },
+    /**
+     * @return {Promise} A promise that is resolved with a TypedArray that has
+     * the raw data from the PDF.
+     */
+    getData: function PDFDocumentProxy_getData() {
+      return this.transport.getData();
+    },
+    /**
+     * @return {Promise} A promise that is resolved when the document's data
+     * is loaded. It is resolved with an {Object} that contains the length
+     * property that indicates size of the PDF data in bytes.
+     */
+    getDownloadInfo: function PDFDocumentProxy_getDownloadInfo() {
+      return this.transport.downloadInfoCapability.promise;
+    },
+    /**
+     * @return {Promise} A promise this is resolved with current stats about
+     * document structures (see {@link PDFDocumentStats}).
+     */
+    getStats: function PDFDocumentProxy_getStats() {
+      return this.transport.getStats();
+    },
+    /**
+     * Cleans up resources allocated by the document, e.g. created @font-face.
+     */
+    cleanup: function PDFDocumentProxy_cleanup() {
+      this.transport.startCleanup();
+    },
+    /**
+     * Destroys current document instance and terminates worker.
+     */
+    destroy: function PDFDocumentProxy_destroy() {
+      return this.transport.destroy();
+    }
+  };
+  return PDFDocumentProxy;
+})();
+
+/**
+ * Page text content.
+ *
+ * @typedef {Object} TextContent
+ * @property {array} items - array of {@link TextItem}
+ * @property {Object} styles - {@link TextStyles} objects, indexed by font
+ *                    name.
+ */
+
+/**
+ * Page text content part.
+ *
+ * @typedef {Object} TextItem
+ * @property {string} str - text content.
+ * @property {string} dir - text direction: 'ttb', 'ltr' or 'rtl'.
+ * @property {array} transform - transformation matrix.
+ * @property {number} width - width in device space.
+ * @property {number} height - height in device space.
+ * @property {string} fontName - font name used by pdf.js for converted font.
+ */
+
+/**
+ * Text style.
+ *
+ * @typedef {Object} TextStyle
+ * @property {number} ascent - font ascent.
+ * @property {number} descent - font descent.
+ * @property {boolean} vertical - text is in vertical mode.
+ * @property {string} fontFamily - possible font family
+ */
+
+/**
+ * Page render parameters.
+ *
+ * @typedef {Object} RenderParameters
+ * @property {Object} canvasContext - A 2D context of a DOM Canvas object.
+ * @property {PDFJS.PageViewport} viewport - Rendering viewport obtained by
+ *                                calling of PDFPage.getViewport method.
+ * @property {string} intent - Rendering intent, can be 'display' or 'print'
+ *                    (default value is 'display').
+ * @property {Object} imageLayer - (optional) An object that has beginLayout,
+ *                    endLayout and appendImage functions.
+ * @property {function} continueCallback - (deprecated) A function that will be
+ *                      called each time the rendering is paused.  To continue
+ *                      rendering call the function that is the first argument
+ *                      to the callback.
+ */
+
+/**
+ * PDF page operator list.
+ *
+ * @typedef {Object} PDFOperatorList
+ * @property {Array} fnArray - Array containing the operator functions.
+ * @property {Array} argsArray - Array containing the arguments of the
+ *                               functions.
+ */
+
+/**
+ * Proxy to a PDFPage in the worker thread.
+ * @class
+ */
+var PDFPageProxy = (function PDFPageProxyClosure() {
+  function PDFPageProxy(pageIndex, pageInfo, transport) {
+    this.pageIndex = pageIndex;
+    this.pageInfo = pageInfo;
+    this.transport = transport;
+    this.stats = new StatTimer();
+    this.stats.enabled = !!globalScope.PDFJS.enableStats;
+    this.commonObjs = transport.commonObjs;
+    this.objs = new PDFObjects();
+    this.cleanupAfterRender = false;
+    this.pendingCleanup = false;
+    this.intentStates = {};
+    this.destroyed = false;
+  }
+  PDFPageProxy.prototype = /** @lends PDFPageProxy.prototype */ {
+    /**
+     * @return {number} Page number of the page. First page is 1.
+     */
+    get pageNumber() {
+      return this.pageIndex + 1;
+    },
+    /**
+     * @return {number} The number of degrees the page is rotated clockwise.
+     */
+    get rotate() {
+      return this.pageInfo.rotate;
+    },
+    /**
+     * @return {Object} The reference that points to this page. It has 'num' and
+     * 'gen' properties.
+     */
+    get ref() {
+      return this.pageInfo.ref;
+    },
+    /**
+     * @return {Array} An array of the visible portion of the PDF page in the
+     * user space units - [x1, y1, x2, y2].
+     */
+    get view() {
+      return this.pageInfo.view;
+    },
+    /**
+     * @param {number} scale The desired scale of the viewport.
+     * @param {number} rotate Degrees to rotate the viewport. If omitted this
+     * defaults to the page rotation.
+     * @return {PDFJS.PageViewport} Contains 'width' and 'height' properties
+     * along with transforms required for rendering.
+     */
+    getViewport: function PDFPageProxy_getViewport(scale, rotate) {
+      if (arguments.length < 2) {
+        rotate = this.rotate;
+      }
+      return new PDFJS.PageViewport(this.view, scale, rotate, 0, 0);
+    },
+    /**
+     * @return {Promise} A promise that is resolved with an {Array} of the
+     * annotation objects.
+     */
+    getAnnotations: function PDFPageProxy_getAnnotations() {
+      if (!this.annotationsPromise) {
+        this.annotationsPromise = this.transport.getAnnotations(this.pageIndex);
+      }
+      return this.annotationsPromise;
+    },
+    /**
+     * Begins the process of rendering a page to the desired context.
+     * @param {RenderParameters} params Page render parameters.
+     * @return {RenderTask} An object that contains the promise, which
+     *                      is resolved when the page finishes rendering.
+     */
+    render: function PDFPageProxy_render(params) {
+      var stats = this.stats;
+      stats.time('Overall');
+
+      // If there was a pending destroy cancel it so no cleanup happens during
+      // this call to render.
+      this.pendingCleanup = false;
+
+      var renderingIntent = (params.intent === 'print' ? 'print' : 'display');
+
+      if (!this.intentStates[renderingIntent]) {
+        this.intentStates[renderingIntent] = {};
+      }
+      var intentState = this.intentStates[renderingIntent];
+
+      // If there's no displayReadyCapability yet, then the operatorList
+      // was never requested before. Make the request and create the promise.
+      if (!intentState.displayReadyCapability) {
+        intentState.receivingOperatorList = true;
+        intentState.displayReadyCapability = createPromiseCapability();
+        intentState.operatorList = {
+          fnArray: [],
+          argsArray: [],
+          lastChunk: false
+        };
+
+        this.stats.time('Page Request');
+        this.transport.messageHandler.send('RenderPageRequest', {
+          pageIndex: this.pageNumber - 1,
+          intent: renderingIntent
+        });
+      }
+
+      var internalRenderTask = new InternalRenderTask(complete, params,
+                                                      this.objs,
+                                                      this.commonObjs,
+                                                      intentState.operatorList,
+                                                      this.pageNumber);
+      internalRenderTask.useRequestAnimationFrame = renderingIntent !== 'print';
+      if (!intentState.renderTasks) {
+        intentState.renderTasks = [];
+      }
+      intentState.renderTasks.push(internalRenderTask);
+      var renderTask = internalRenderTask.task;
+
+      // Obsolete parameter support
+      if (params.continueCallback) {
+        deprecated('render is used with continueCallback parameter');
+        renderTask.onContinue = params.continueCallback;
+      }
+
+      var self = this;
+      intentState.displayReadyCapability.promise.then(
+        function pageDisplayReadyPromise(transparency) {
+          if (self.pendingCleanup) {
+            complete();
+            return;
+          }
+          stats.time('Rendering');
+          internalRenderTask.initalizeGraphics(transparency);
+          internalRenderTask.operatorListChanged();
+        },
+        function pageDisplayReadPromiseError(reason) {
+          complete(reason);
+        }
+      );
+
+      function complete(error) {
+        var i = intentState.renderTasks.indexOf(internalRenderTask);
+        if (i >= 0) {
+          intentState.renderTasks.splice(i, 1);
+        }
+
+        if (self.cleanupAfterRender) {
+          self.pendingCleanup = true;
+        }
+        self._tryCleanup();
+
+        if (error) {
+          internalRenderTask.capability.reject(error);
+        } else {
+          internalRenderTask.capability.resolve();
+        }
+        stats.timeEnd('Rendering');
+        stats.timeEnd('Overall');
+      }
+
+      return renderTask;
+    },
+
+    /**
+     * @return {Promise} A promise resolved with an {@link PDFOperatorList}
+     * object that represents page's operator list.
+     */
+    getOperatorList: function PDFPageProxy_getOperatorList() {
+      function operatorListChanged() {
+        if (intentState.operatorList.lastChunk) {
+          intentState.opListReadCapability.resolve(intentState.operatorList);
+        }
+      }
+
+      var renderingIntent = 'oplist';
+      if (!this.intentStates[renderingIntent]) {
+        this.intentStates[renderingIntent] = {};
+      }
+      var intentState = this.intentStates[renderingIntent];
+
+      if (!intentState.opListReadCapability) {
+        var opListTask = {};
+        opListTask.operatorListChanged = operatorListChanged;
+        intentState.receivingOperatorList = true;
+        intentState.opListReadCapability = createPromiseCapability();
+        intentState.renderTasks = [];
+        intentState.renderTasks.push(opListTask);
+        intentState.operatorList = {
+          fnArray: [],
+          argsArray: [],
+          lastChunk: false
+        };
+
+        this.transport.messageHandler.send('RenderPageRequest', {
+          pageIndex: this.pageIndex,
+          intent: renderingIntent
+        });
+      }
+      return intentState.opListReadCapability.promise;
+    },
+
+    /**
+     * @return {Promise} That is resolved a {@link TextContent}
+     * object that represent the page text content.
+     */
+    getTextContent: function PDFPageProxy_getTextContent() {
+      return this.transport.messageHandler.sendWithPromise('GetTextContent', {
+        pageIndex: this.pageNumber - 1
+      });
+    },
+
+    /**
+     * Destroys page object.
+     */
+    _destroy: function PDFPageProxy_destroy() {
+      this.destroyed = true;
+      this.transport.pageCache[this.pageIndex] = null;
+
+      var waitOn = [];
+      Object.keys(this.intentStates).forEach(function(intent) {
+        var intentState = this.intentStates[intent];
+        intentState.renderTasks.forEach(function(renderTask) {
+          var renderCompleted = renderTask.capability.promise.
+            catch(function () {}); // ignoring failures
+          waitOn.push(renderCompleted);
+          renderTask.cancel();
+        });
+      }, this);
+      this.objs.clear();
+      this.annotationsPromise = null;
+      this.pendingCleanup = false;
+      return Promise.all(waitOn);
+    },
+
+    /**
+     * Cleans up resources allocated by the page. (deprecated)
+     */
+    destroy: function() {
+      deprecated('page destroy method, use cleanup() instead');
+      this.cleanup();
+    },
+
+    /**
+     * Cleans up resources allocated by the page.
+     */
+    cleanup: function PDFPageProxy_cleanup() {
+      this.pendingCleanup = true;
+      this._tryCleanup();
+    },
+    /**
+     * For internal use only. Attempts to clean up if rendering is in a state
+     * where that's possible.
+     * @ignore
+     */
+    _tryCleanup: function PDFPageProxy_tryCleanup() {
+      if (!this.pendingCleanup ||
+          Object.keys(this.intentStates).some(function(intent) {
+            var intentState = this.intentStates[intent];
+            return (intentState.renderTasks.length !== 0 ||
+                    intentState.receivingOperatorList);
+          }, this)) {
+        return;
+      }
+
+      Object.keys(this.intentStates).forEach(function(intent) {
+        delete this.intentStates[intent];
+      }, this);
+      this.objs.clear();
+      this.annotationsPromise = null;
+      this.pendingCleanup = false;
+    },
+    /**
+     * For internal use only.
+     * @ignore
+     */
+    _startRenderPage: function PDFPageProxy_startRenderPage(transparency,
+                                                            intent) {
+      var intentState = this.intentStates[intent];
+      // TODO Refactor RenderPageRequest to separate rendering
+      // and operator list logic
+      if (intentState.displayReadyCapability) {
+        intentState.displayReadyCapability.resolve(transparency);
+      }
+    },
+    /**
+     * For internal use only.
+     * @ignore
+     */
+    _renderPageChunk: function PDFPageProxy_renderPageChunk(operatorListChunk,
+                                                            intent) {
+      var intentState = this.intentStates[intent];
+      var i, ii;
+      // Add the new chunk to the current operator list.
+      for (i = 0, ii = operatorListChunk.length; i < ii; i++) {
+        intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);
+        intentState.operatorList.argsArray.push(
+          operatorListChunk.argsArray[i]);
+      }
+      intentState.operatorList.lastChunk = operatorListChunk.lastChunk;
+
+      // Notify all the rendering tasks there are more operators to be consumed.
+      for (i = 0; i < intentState.renderTasks.length; i++) {
+        intentState.renderTasks[i].operatorListChanged();
+      }
+
+      if (operatorListChunk.lastChunk) {
+        intentState.receivingOperatorList = false;
+        this._tryCleanup();
+      }
+    }
+  };
+  return PDFPageProxy;
+})();
+
+/**
+ * For internal use only.
+ * @ignore
+ */
+var WorkerTransport = (function WorkerTransportClosure() {
+  function WorkerTransport(workerInitializedCapability, pdfDataRangeTransport) {
+    this.pdfDataRangeTransport = pdfDataRangeTransport;
+    this.workerInitializedCapability = workerInitializedCapability;
+    this.commonObjs = new PDFObjects();
+
+    this.loadingTask = null;
+    this.destroyed = false;
+    this.destroyCapability = null;
+
+    this.pageCache = [];
+    this.pagePromises = [];
+    this.downloadInfoCapability = createPromiseCapability();
+
+    // If worker support isn't disabled explicit and the browser has worker
+    // support, create a new web worker and test if it/the browser fullfills
+    // all requirements to run parts of pdf.js in a web worker.
+    // Right now, the requirement is, that an Uint8Array is still an Uint8Array
+    // as it arrives on the worker. Chrome added this with version 15.
+    if (!globalScope.PDFJS.disableWorker && typeof Worker !== 'undefined') {
+      var workerSrc = PDFJS.workerSrc;
+      if (!workerSrc) {
+        error('No PDFJS.workerSrc specified');
+      }
+
+      try {
+        // Some versions of FF can't create a worker on localhost, see:
+        // https://bugzilla.mozilla.org/show_bug.cgi?id=683280
+        var worker = new Worker(workerSrc);
+        var messageHandler = new MessageHandler('main', worker);
+        this.messageHandler = messageHandler;
+
+        messageHandler.on('test', function transportTest(data) {
+          var supportTypedArray = data && data.supportTypedArray;
+          if (supportTypedArray) {
+            this.worker = worker;
+            if (!data.supportTransfers) {
+              PDFJS.postMessageTransfers = false;
+            }
+            this.setupMessageHandler(messageHandler);
+            workerInitializedCapability.resolve();
+          } else {
+            this.setupFakeWorker();
+          }
+        }.bind(this));
+
+        var testObj = new Uint8Array([PDFJS.postMessageTransfers ? 255 : 0]);
+        // Some versions of Opera throw a DATA_CLONE_ERR on serializing the
+        // typed array. Also, checking if we can use transfers.
+        try {
+          messageHandler.send('test', testObj, [testObj.buffer]);
+        } catch (ex) {
+          info('Cannot use postMessage transfers');
+          testObj[0] = 0;
+          messageHandler.send('test', testObj);
+        }
+        return;
+      } catch (e) {
+        info('The worker has been disabled.');
+      }
+    }
+    // Either workers are disabled, not supported or have thrown an exception.
+    // Thus, we fallback to a faked worker.
+    this.setupFakeWorker();
+  }
+  WorkerTransport.prototype = {
+    destroy: function WorkerTransport_destroy() {
+      if (this.destroyCapability) {
+        return this.destroyCapability.promise;
+      }
+
+      this.destroyed = true;
+      this.destroyCapability = createPromiseCapability();
+
+      var waitOn = [];
+      // We need to wait for all renderings to be completed, e.g.
+      // timeout/rAF can take a long time.
+      this.pageCache.forEach(function (page) {
+        if (page) {
+          waitOn.push(page._destroy());
+        }
+      });
+      this.pageCache = [];
+      this.pagePromises = [];
+      var self = this;
+      // We also need to wait for the worker to finish its long running tasks.
+      var terminated = this.messageHandler.sendWithPromise('Terminate', null);
+      waitOn.push(terminated);
+      Promise.all(waitOn).then(function () {
+        FontLoader.clear();
+        if (self.worker) {
+          self.worker.terminate();
+        }
+        if (self.pdfDataRangeTransport) {
+          self.pdfDataRangeTransport.abort();
+          self.pdfDataRangeTransport = null;
+        }
+        self.messageHandler = null;
+        self.destroyCapability.resolve();
+      }, this.destroyCapability.reject);
+      return this.destroyCapability.promise;
+    },
+
+    setupFakeWorker: function WorkerTransport_setupFakeWorker() {
+      globalScope.PDFJS.disableWorker = true;
+
+      if (!PDFJS.fakeWorkerFilesLoadedCapability) {
+        PDFJS.fakeWorkerFilesLoadedCapability = createPromiseCapability();
+        // In the developer build load worker_loader which in turn loads all the
+        // other files and resolves the promise. In production only the
+        // pdf.worker.js file is needed.
+        Util.loadScript(PDFJS.workerSrc, function() {
+          PDFJS.fakeWorkerFilesLoadedCapability.resolve();
+        });
+      }
+      PDFJS.fakeWorkerFilesLoadedCapability.promise.then(function () {
+        warn('Setting up fake worker.');
+        // If we don't use a worker, just post/sendMessage to the main thread.
+        var fakeWorker = {
+          postMessage: function WorkerTransport_postMessage(obj) {
+            fakeWorker.onmessage({data: obj});
+          },
+          terminate: function WorkerTransport_terminate() {}
+        };
+
+        var messageHandler = new MessageHandler('main', fakeWorker);
+        this.setupMessageHandler(messageHandler);
+
+        // If the main thread is our worker, setup the handling for the messages
+        // the main thread sends to it self.
+        PDFJS.WorkerMessageHandler.setup(messageHandler);
+
+        this.workerInitializedCapability.resolve();
+      }.bind(this));
+    },
+
+    setupMessageHandler:
+      function WorkerTransport_setupMessageHandler(messageHandler) {
+      this.messageHandler = messageHandler;
+
+      function updatePassword(password) {
+        messageHandler.send('UpdatePassword', password);
+      }
+
+      var pdfDataRangeTransport = this.pdfDataRangeTransport;
+      if (pdfDataRangeTransport) {
+        pdfDataRangeTransport.addRangeListener(function(begin, chunk) {
+          messageHandler.send('OnDataRange', {
+            begin: begin,
+            chunk: chunk
+          });
+        });
+
+        pdfDataRangeTransport.addProgressListener(function(loaded) {
+          messageHandler.send('OnDataProgress', {
+            loaded: loaded
+          });
+        });
+
+        pdfDataRangeTransport.addProgressiveReadListener(function(chunk) {
+          messageHandler.send('OnDataRange', {
+            chunk: chunk
+          });
+        });
+
+        messageHandler.on('RequestDataRange',
+          function transportDataRange(data) {
+            pdfDataRangeTransport.requestDataRange(data.begin, data.end);
+          }, this);
+      }
+
+      messageHandler.on('GetDoc', function transportDoc(data) {
+        var pdfInfo = data.pdfInfo;
+        this.numPages = data.pdfInfo.numPages;
+        var loadingTask = this.loadingTask;
+        var pdfDocument = new PDFDocumentProxy(pdfInfo, this, loadingTask);
+        this.pdfDocument = pdfDocument;
+        loadingTask._capability.resolve(pdfDocument);
+      }, this);
+
+      messageHandler.on('NeedPassword',
+                        function transportNeedPassword(exception) {
+        var loadingTask = this.loadingTask;
+        if (loadingTask.onPassword) {
+          return loadingTask.onPassword(updatePassword,
+                                        PasswordResponses.NEED_PASSWORD);
+        }
+        loadingTask._capability.reject(
+          new PasswordException(exception.message, exception.code));
+      }, this);
+
+      messageHandler.on('IncorrectPassword',
+                        function transportIncorrectPassword(exception) {
+        var loadingTask = this.loadingTask;
+        if (loadingTask.onPassword) {
+          return loadingTask.onPassword(updatePassword,
+                                        PasswordResponses.INCORRECT_PASSWORD);
+        }
+        loadingTask._capability.reject(
+          new PasswordException(exception.message, exception.code));
+      }, this);
+
+      messageHandler.on('InvalidPDF', function transportInvalidPDF(exception) {
+        this.loadingTask._capability.reject(
+          new InvalidPDFException(exception.message));
+      }, this);
+
+      messageHandler.on('MissingPDF', function transportMissingPDF(exception) {
+        this.loadingTask._capability.reject(
+          new MissingPDFException(exception.message));
+      }, this);
+
+      messageHandler.on('UnexpectedResponse',
+                        function transportUnexpectedResponse(exception) {
+        this.loadingTask._capability.reject(
+          new UnexpectedResponseException(exception.message, exception.status));
+      }, this);
+
+      messageHandler.on('UnknownError',
+                        function transportUnknownError(exception) {
+        this.loadingTask._capability.reject(
+          new UnknownErrorException(exception.message, exception.details));
+      }, this);
+
+      messageHandler.on('DataLoaded', function transportPage(data) {
+        this.downloadInfoCapability.resolve(data);
+      }, this);
+
+      messageHandler.on('PDFManagerReady', function transportPage(data) {
+        if (this.pdfDataRangeTransport) {
+          this.pdfDataRangeTransport.transportReady();
+        }
+      }, this);
+
+      messageHandler.on('StartRenderPage', function transportRender(data) {
+        var page = this.pageCache[data.pageIndex];
+
+        page.stats.timeEnd('Page Request');
+        page._startRenderPage(data.transparency, data.intent);
+      }, this);
+
+      messageHandler.on('RenderPageChunk', function transportRender(data) {
+        var page = this.pageCache[data.pageIndex];
+
+        page._renderPageChunk(data.operatorList, data.intent);
+      }, this);
+
+      messageHandler.on('commonobj', function transportObj(data) {
+        var id = data[0];
+        var type = data[1];
+        if (this.commonObjs.hasData(id)) {
+          return;
+        }
+
+        switch (type) {
+          case 'Font':
+            var exportedData = data[2];
+
+            var font;
+            if ('error' in exportedData) {
+              var error = exportedData.error;
+              warn('Error during font loading: ' + error);
+              this.commonObjs.resolve(id, error);
+              break;
+            } else {
+              font = new FontFaceObject(exportedData);
+            }
+
+            FontLoader.bind(
+              [font],
+              function fontReady(fontObjs) {
+                this.commonObjs.resolve(id, font);
+              }.bind(this)
+            );
+            break;
+          case 'FontPath':
+            this.commonObjs.resolve(id, data[2]);
+            break;
+          default:
+            error('Got unknown common object type ' + type);
+        }
+      }, this);
+
+      messageHandler.on('obj', function transportObj(data) {
+        var id = data[0];
+        var pageIndex = data[1];
+        var type = data[2];
+        var pageProxy = this.pageCache[pageIndex];
+        var imageData;
+        if (pageProxy.objs.hasData(id)) {
+          return;
+        }
+
+        switch (type) {
+          case 'JpegStream':
+            imageData = data[3];
+            loadJpegStream(id, imageData, pageProxy.objs);
+            break;
+          case 'Image':
+            imageData = data[3];
+            pageProxy.objs.resolve(id, imageData);
+
+            // heuristics that will allow not to store large data
+            var MAX_IMAGE_SIZE_TO_STORE = 8000000;
+            if (imageData && 'data' in imageData &&
+                imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) {
+              pageProxy.cleanupAfterRender = true;
+            }
+            break;
+          default:
+            error('Got unknown object type ' + type);
+        }
+      }, this);
+
+      messageHandler.on('DocProgress', function transportDocProgress(data) {
+        var loadingTask = this.loadingTask;
+        if (loadingTask.onProgress) {
+          loadingTask.onProgress({
+            loaded: data.loaded,
+            total: data.total
+          });
+        }
+      }, this);
+
+      messageHandler.on('PageError', function transportError(data) {
+        var page = this.pageCache[data.pageNum - 1];
+        var intentState = page.intentStates[data.intent];
+        if (intentState.displayReadyCapability) {
+          intentState.displayReadyCapability.reject(data.error);
+        } else {
+          error(data.error);
+        }
+      }, this);
+
+      messageHandler.on('JpegDecode', function(data) {
+        var imageUrl = data[0];
+        var components = data[1];
+        if (components !== 3 && components !== 1) {
+          return Promise.reject(
+            new Error('Only 3 components or 1 component can be returned'));
+        }
+
+        return new Promise(function (resolve, reject) {
+          var img = new Image();
+          img.onload = function () {
+            var width = img.width;
+            var height = img.height;
+            var size = width * height;
+            var rgbaLength = size * 4;
+            var buf = new Uint8Array(size * components);
+            var tmpCanvas = createScratchCanvas(width, height);
+            var tmpCtx = tmpCanvas.getContext('2d');
+            tmpCtx.drawImage(img, 0, 0);
+            var data = tmpCtx.getImageData(0, 0, width, height).data;
+            var i, j;
+
+            if (components === 3) {
+              for (i = 0, j = 0; i < rgbaLength; i += 4, j += 3) {
+                buf[j] = data[i];
+                buf[j + 1] = data[i + 1];
+                buf[j + 2] = data[i + 2];
+              }
+            } else if (components === 1) {
+              for (i = 0, j = 0; i < rgbaLength; i += 4, j++) {
+                buf[j] = data[i];
+              }
+            }
+            resolve({ data: buf, width: width, height: height});
+          };
+          img.onerror = function () {
+            reject(new Error('JpegDecode failed to load image'));
+          };
+          img.src = imageUrl;
+        });
+      });
+    },
+
+    fetchDocument: function WorkerTransport_fetchDocument(loadingTask, source) {
+      if (this.destroyed) {
+        loadingTask._capability.reject(new Error('Loading aborted'));
+        this.destroyCapability.resolve();
+        return;
+      }
+
+      this.loadingTask = loadingTask;
+
+      source.disableAutoFetch = PDFJS.disableAutoFetch;
+      source.disableStream = PDFJS.disableStream;
+      source.chunkedViewerLoading = !!this.pdfDataRangeTransport;
+      if (this.pdfDataRangeTransport) {
+        source.length = this.pdfDataRangeTransport.length;
+        source.initialData = this.pdfDataRangeTransport.initialData;
+      }
+      this.messageHandler.send('GetDocRequest', {
+        source: source,
+        disableRange: PDFJS.disableRange,
+        maxImageSize: PDFJS.maxImageSize,
+        cMapUrl: PDFJS.cMapUrl,
+        cMapPacked: PDFJS.cMapPacked,
+        disableFontFace: PDFJS.disableFontFace,
+        disableCreateObjectURL: PDFJS.disableCreateObjectURL,
+        verbosity: PDFJS.verbosity
+      });
+    },
+
+    getData: function WorkerTransport_getData() {
+      return this.messageHandler.sendWithPromise('GetData', null);
+    },
+
+    getPage: function WorkerTransport_getPage(pageNumber, capability) {
+      if (pageNumber <= 0 || pageNumber > this.numPages ||
+          (pageNumber|0) !== pageNumber) {
+        return Promise.reject(new Error('Invalid page request'));
+      }
+
+      var pageIndex = pageNumber - 1;
+      if (pageIndex in this.pagePromises) {
+        return this.pagePromises[pageIndex];
+      }
+      var promise = this.messageHandler.sendWithPromise('GetPage', {
+        pageIndex: pageIndex
+      }).then(function (pageInfo) {
+        if (this.destroyed) {
+          throw new Error('Transport destroyed');
+        }
+        var page = new PDFPageProxy(pageIndex, pageInfo, this);
+        this.pageCache[pageIndex] = page;
+        return page;
+      }.bind(this));
+      this.pagePromises[pageIndex] = promise;
+      return promise;
+    },
+
+    getPageIndex: function WorkerTransport_getPageIndexByRef(ref) {
+      return this.messageHandler.sendWithPromise('GetPageIndex', { ref: ref });
+    },
+
+    getAnnotations: function WorkerTransport_getAnnotations(pageIndex) {
+      return this.messageHandler.sendWithPromise('GetAnnotations',
+        { pageIndex: pageIndex });
+    },
+
+    getDestinations: function WorkerTransport_getDestinations() {
+      return this.messageHandler.sendWithPromise('GetDestinations', null);
+    },
+
+    getDestination: function WorkerTransport_getDestination(id) {
+      return this.messageHandler.sendWithPromise('GetDestination', { id: id } );
+    },
+
+    getAttachments: function WorkerTransport_getAttachments() {
+      return this.messageHandler.sendWithPromise('GetAttachments', null);
+    },
+
+    getJavaScript: function WorkerTransport_getJavaScript() {
+      return this.messageHandler.sendWithPromise('GetJavaScript', null);
+    },
+
+    getOutline: function WorkerTransport_getOutline() {
+      return this.messageHandler.sendWithPromise('GetOutline', null);
+    },
+
+    getMetadata: function WorkerTransport_getMetadata() {
+      return this.messageHandler.sendWithPromise('GetMetadata', null).
+        then(function transportMetadata(results) {
+        return {
+          info: results[0],
+          metadata: (results[1] ? new PDFJS.Metadata(results[1]) : null)
+        };
+      });
+    },
+
+    getStats: function WorkerTransport_getStats() {
+      return this.messageHandler.sendWithPromise('GetStats', null);
+    },
+
+    startCleanup: function WorkerTransport_startCleanup() {
+      this.messageHandler.sendWithPromise('Cleanup', null).
+        then(function endCleanup() {
+        for (var i = 0, ii = this.pageCache.length; i < ii; i++) {
+          var page = this.pageCache[i];
+          if (page) {
+            page.cleanup();
+          }
+        }
+        this.commonObjs.clear();
+        FontLoader.clear();
+      }.bind(this));
+    }
+  };
+  return WorkerTransport;
+
+})();
+
+/**
+ * A PDF document and page is built of many objects. E.g. there are objects
+ * for fonts, images, rendering code and such. These objects might get processed
+ * inside of a worker. The `PDFObjects` implements some basic functions to
+ * manage these objects.
+ * @ignore
+ */
+var PDFObjects = (function PDFObjectsClosure() {
+  function PDFObjects() {
+    this.objs = {};
+  }
+
+  PDFObjects.prototype = {
+    /**
+     * Internal function.
+     * Ensures there is an object defined for `objId`.
+     */
+    ensureObj: function PDFObjects_ensureObj(objId) {
+      if (this.objs[objId]) {
+        return this.objs[objId];
+      }
+
+      var obj = {
+        capability: createPromiseCapability(),
+        data: null,
+        resolved: false
+      };
+      this.objs[objId] = obj;
+
+      return obj;
+    },
+
+    /**
+     * If called *without* callback, this returns the data of `objId` but the
+     * object needs to be resolved. If it isn't, this function throws.
+     *
+     * If called *with* a callback, the callback is called with the data of the
+     * object once the object is resolved. That means, if you call this
+     * function and the object is already resolved, the callback gets called
+     * right away.
+     */
+    get: function PDFObjects_get(objId, callback) {
+      // If there is a callback, then the get can be async and the object is
+      // not required to be resolved right now
+      if (callback) {
+        this.ensureObj(objId).capability.promise.then(callback);
+        return null;
+      }
+
+      // If there isn't a callback, the user expects to get the resolved data
+      // directly.
+      var obj = this.objs[objId];
+
+      // If there isn't an object yet or the object isn't resolved, then the
+      // data isn't ready yet!
+      if (!obj || !obj.resolved) {
+        error('Requesting object that isn\'t resolved yet ' + objId);
+      }
+
+      return obj.data;
+    },
+
+    /**
+     * Resolves the object `objId` with optional `data`.
+     */
+    resolve: function PDFObjects_resolve(objId, data) {
+      var obj = this.ensureObj(objId);
+
+      obj.resolved = true;
+      obj.data = data;
+      obj.capability.resolve(data);
+    },
+
+    isResolved: function PDFObjects_isResolved(objId) {
+      var objs = this.objs;
+
+      if (!objs[objId]) {
+        return false;
+      } else {
+        return objs[objId].resolved;
+      }
+    },
+
+    hasData: function PDFObjects_hasData(objId) {
+      return this.isResolved(objId);
+    },
+
+    /**
+     * Returns the data of `objId` if object exists, null otherwise.
+     */
+    getData: function PDFObjects_getData(objId) {
+      var objs = this.objs;
+      if (!objs[objId] || !objs[objId].resolved) {
+        return null;
+      } else {
+        return objs[objId].data;
+      }
+    },
+
+    clear: function PDFObjects_clear() {
+      this.objs = {};
+    }
+  };
+  return PDFObjects;
+})();
+
+/**
+ * Allows controlling of the rendering tasks.
+ * @class
+ */
+var RenderTask = (function RenderTaskClosure() {
+  function RenderTask(internalRenderTask) {
+    this._internalRenderTask = internalRenderTask;
+
+    /**
+     * Callback for incremental rendering -- a function that will be called
+     * each time the rendering is paused.  To continue rendering call the
+     * function that is the first argument to the callback.
+     * @type {function}
+     */
+    this.onContinue = null;
+  }
+
+  RenderTask.prototype = /** @lends RenderTask.prototype */ {
+    /**
+     * Promise for rendering task completion.
+     * @return {Promise}
+     */
+    get promise() {
+      return this._internalRenderTask.capability.promise;
+    },
+
+    /**
+     * Cancels the rendering task. If the task is currently rendering it will
+     * not be cancelled until graphics pauses with a timeout. The promise that
+     * this object extends will resolved when cancelled.
+     */
+    cancel: function RenderTask_cancel() {
+      this._internalRenderTask.cancel();
+    },
+
+    /**
+     * Registers callbacks to indicate the rendering task completion.
+     *
+     * @param {function} onFulfilled The callback for the rendering completion.
+     * @param {function} onRejected The callback for the rendering failure.
+     * @return {Promise} A promise that is resolved after the onFulfilled or
+     *                   onRejected callback.
+     */
+    then: function RenderTask_then(onFulfilled, onRejected) {
+      return this.promise.then.apply(this.promise, arguments);
+    }
+  };
+
+  return RenderTask;
+})();
+
+/**
+ * For internal use only.
+ * @ignore
+ */
+var InternalRenderTask = (function InternalRenderTaskClosure() {
+
+  function InternalRenderTask(callback, params, objs, commonObjs, operatorList,
+                              pageNumber) {
+    this.callback = callback;
+    this.params = params;
+    this.objs = objs;
+    this.commonObjs = commonObjs;
+    this.operatorListIdx = null;
+    this.operatorList = operatorList;
+    this.pageNumber = pageNumber;
+    this.running = false;
+    this.graphicsReadyCallback = null;
+    this.graphicsReady = false;
+    this.useRequestAnimationFrame = false;
+    this.cancelled = false;
+    this.capability = createPromiseCapability();
+    this.task = new RenderTask(this);
+    // caching this-bound methods
+    this._continueBound = this._continue.bind(this);
+    this._scheduleNextBound = this._scheduleNext.bind(this);
+    this._nextBound = this._next.bind(this);
+  }
+
+  InternalRenderTask.prototype = {
+
+    initalizeGraphics:
+        function InternalRenderTask_initalizeGraphics(transparency) {
+
+      if (this.cancelled) {
+        return;
+      }
+      if (PDFJS.pdfBug && 'StepperManager' in globalScope &&
+          globalScope.StepperManager.enabled) {
+        this.stepper = globalScope.StepperManager.create(this.pageNumber - 1);
+        this.stepper.init(this.operatorList);
+        this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();
+      }
+
+      var params = this.params;
+      this.gfx = new CanvasGraphics(params.canvasContext, this.commonObjs,
+                                    this.objs, params.imageLayer);
+
+      this.gfx.beginDrawing(params.viewport, transparency);
+      this.operatorListIdx = 0;
+      this.graphicsReady = true;
+      if (this.graphicsReadyCallback) {
+        this.graphicsReadyCallback();
+      }
+    },
+
+    cancel: function InternalRenderTask_cancel() {
+      this.running = false;
+      this.cancelled = true;
+      this.callback('cancelled');
+    },
+
+    operatorListChanged: function InternalRenderTask_operatorListChanged() {
+      if (!this.graphicsReady) {
+        if (!this.graphicsReadyCallback) {
+          this.graphicsReadyCallback = this._continueBound;
+        }
+        return;
+      }
+
+      if (this.stepper) {
+        this.stepper.updateOperatorList(this.operatorList);
+      }
+
+      if (this.running) {
+        return;
+      }
+      this._continue();
+    },
+
+    _continue: function InternalRenderTask__continue() {
+      this.running = true;
+      if (this.cancelled) {
+        return;
+      }
+      if (this.task.onContinue) {
+        this.task.onContinue.call(this.task, this._scheduleNextBound);
+      } else {
+        this._scheduleNext();
+      }
+    },
+
+    _scheduleNext: function InternalRenderTask__scheduleNext() {
+      if (this.useRequestAnimationFrame) {
+        window.requestAnimationFrame(this._nextBound);
+      } else {
+        Promise.resolve(undefined).then(this._nextBound);
+      }
+    },
+
+    _next: function InternalRenderTask__next() {
+      if (this.cancelled) {
+        return;
+      }
+      this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList,
+                                        this.operatorListIdx,
+                                        this._continueBound,
+                                        this.stepper);
+      if (this.operatorListIdx === this.operatorList.argsArray.length) {
+        this.running = false;
+        if (this.operatorList.lastChunk) {
+          this.gfx.endDrawing();
+          this.callback();
+        }
+      }
+    }
+
+  };
+
+  return InternalRenderTask;
+})();
+
+
+var Metadata = PDFJS.Metadata = (function MetadataClosure() {
+  function fixMetadata(meta) {
+    return meta.replace(/>\\376\\377([^<]+)/g, function(all, codes) {
+      var bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g,
+                                function(code, d1, d2, d3) {
+        return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);
+      });
+      var chars = '';
+      for (var i = 0; i < bytes.length; i += 2) {
+        var code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);
+        chars += code >= 32 && code < 127 && code !== 60 && code !== 62 &&
+          code !== 38 && false ? String.fromCharCode(code) :
+          '&#x' + (0x10000 + code).toString(16).substring(1) + ';';
+      }
+      return '>' + chars;
+    });
+  }
+
+  function Metadata(meta) {
+    if (typeof meta === 'string') {
+      // Ghostscript produces invalid metadata
+      meta = fixMetadata(meta);
+
+      var parser = new DOMParser();
+      meta = parser.parseFromString(meta, 'application/xml');
+    } else if (!(meta instanceof Document)) {
+      error('Metadata: Invalid metadata object');
+    }
+
+    this.metaDocument = meta;
+    this.metadata = {};
+    this.parse();
+  }
+
+  Metadata.prototype = {
+    parse: function Metadata_parse() {
+      var doc = this.metaDocument;
+      var rdf = doc.documentElement;
+
+      if (rdf.nodeName.toLowerCase() !== 'rdf:rdf') { // Wrapped in <xmpmeta>
+        rdf = rdf.firstChild;
+        while (rdf && rdf.nodeName.toLowerCase() !== 'rdf:rdf') {
+          rdf = rdf.nextSibling;
+        }
+      }
+
+      var nodeName = (rdf) ? rdf.nodeName.toLowerCase() : null;
+      if (!rdf || nodeName !== 'rdf:rdf' || !rdf.hasChildNodes()) {
+        return;
+      }
+
+      var children = rdf.childNodes, desc, entry, name, i, ii, length, iLength;
+      for (i = 0, length = children.length; i < length; i++) {
+        desc = children[i];
+        if (desc.nodeName.toLowerCase() !== 'rdf:description') {
+          continue;
+        }
+
+        for (ii = 0, iLength = desc.childNodes.length; ii < iLength; ii++) {
+          if (desc.childNodes[ii].nodeName.toLowerCase() !== '#text') {
+            entry = desc.childNodes[ii];
+            name = entry.nodeName.toLowerCase();
+            this.metadata[name] = entry.textContent.trim();
+          }
+        }
+      }
+    },
+
+    get: function Metadata_get(name) {
+      return this.metadata[name] || null;
+    },
+
+    has: function Metadata_has(name) {
+      return typeof this.metadata[name] !== 'undefined';
+    }
+  };
+
+  return Metadata;
+})();
+
+
+// <canvas> contexts store most of the state we need natively.
+// However, PDF needs a bit more state, which we store here.
+
+// Minimal font size that would be used during canvas fillText operations.
+var MIN_FONT_SIZE = 16;
+// Maximum font size that would be used during canvas fillText operations.
+var MAX_FONT_SIZE = 100;
+var MAX_GROUP_SIZE = 4096;
+
+// Heuristic value used when enforcing minimum line widths.
+var MIN_WIDTH_FACTOR = 0.65;
+
+var COMPILE_TYPE3_GLYPHS = true;
+var MAX_SIZE_TO_COMPILE = 1000;
+
+var FULL_CHUNK_HEIGHT = 16;
+
+function createScratchCanvas(width, height) {
+  var canvas = document.createElement('canvas');
+  canvas.width = width;
+  canvas.height = height;
+  return canvas;
+}
+
+function addContextCurrentTransform(ctx) {
+  // If the context doesn't expose a `mozCurrentTransform`, add a JS based one.
+  if (!ctx.mozCurrentTransform) {
+    ctx._originalSave = ctx.save;
+    ctx._originalRestore = ctx.restore;
+    ctx._originalRotate = ctx.rotate;
+    ctx._originalScale = ctx.scale;
+    ctx._originalTranslate = ctx.translate;
+    ctx._originalTransform = ctx.transform;
+    ctx._originalSetTransform = ctx.setTransform;
+
+    ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0];
+    ctx._transformStack = [];
+
+    Object.defineProperty(ctx, 'mozCurrentTransform', {
+      get: function getCurrentTransform() {
+        return this._transformMatrix;
+      }
+    });
+
+    Object.defineProperty(ctx, 'mozCurrentTransformInverse', {
+      get: function getCurrentTransformInverse() {
+        // Calculation done using WolframAlpha:
+        // http://www.wolframalpha.com/input/?
+        //   i=Inverse+{{a%2C+c%2C+e}%2C+{b%2C+d%2C+f}%2C+{0%2C+0%2C+1}}
+
+        var m = this._transformMatrix;
+        var a = m[0], b = m[1], c = m[2], d = m[3], e = m[4], f = m[5];
+
+        var ad_bc = a * d - b * c;
+        var bc_ad = b * c - a * d;
+
+        return [
+          d / ad_bc,
+          b / bc_ad,
+          c / bc_ad,
+          a / ad_bc,
+          (d * e - c * f) / bc_ad,
+          (b * e - a * f) / ad_bc
+        ];
+      }
+    });
+
+    ctx.save = function ctxSave() {
+      var old = this._transformMatrix;
+      this._transformStack.push(old);
+      this._transformMatrix = old.slice(0, 6);
+
+      this._originalSave();
+    };
+
+    ctx.restore = function ctxRestore() {
+      var prev = this._transformStack.pop();
+      if (prev) {
+        this._transformMatrix = prev;
+        this._originalRestore();
+      }
+    };
+
+    ctx.translate = function ctxTranslate(x, y) {
+      var m = this._transformMatrix;
+      m[4] = m[0] * x + m[2] * y + m[4];
+      m[5] = m[1] * x + m[3] * y + m[5];
+
+      this._originalTranslate(x, y);
+    };
+
+    ctx.scale = function ctxScale(x, y) {
+      var m = this._transformMatrix;
+      m[0] = m[0] * x;
+      m[1] = m[1] * x;
+      m[2] = m[2] * y;
+      m[3] = m[3] * y;
+
+      this._originalScale(x, y);
+    };
+
+    ctx.transform = function ctxTransform(a, b, c, d, e, f) {
+      var m = this._transformMatrix;
+      this._transformMatrix = [
+        m[0] * a + m[2] * b,
+        m[1] * a + m[3] * b,
+        m[0] * c + m[2] * d,
+        m[1] * c + m[3] * d,
+        m[0] * e + m[2] * f + m[4],
+        m[1] * e + m[3] * f + m[5]
+      ];
+
+      ctx._originalTransform(a, b, c, d, e, f);
+    };
+
+    ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {
+      this._transformMatrix = [a, b, c, d, e, f];
+
+      ctx._originalSetTransform(a, b, c, d, e, f);
+    };
+
+    ctx.rotate = function ctxRotate(angle) {
+      var cosValue = Math.cos(angle);
+      var sinValue = Math.sin(angle);
+
+      var m = this._transformMatrix;
+      this._transformMatrix = [
+        m[0] * cosValue + m[2] * sinValue,
+        m[1] * cosValue + m[3] * sinValue,
+        m[0] * (-sinValue) + m[2] * cosValue,
+        m[1] * (-sinValue) + m[3] * cosValue,
+        m[4],
+        m[5]
+      ];
+
+      this._originalRotate(angle);
+    };
+  }
+}
+
+var CachedCanvases = (function CachedCanvasesClosure() {
+  var cache = {};
+  return {
+    getCanvas: function CachedCanvases_getCanvas(id, width, height,
+                                                 trackTransform) {
+      var canvasEntry;
+      if (cache[id] !== undefined) {
+        canvasEntry = cache[id];
+        canvasEntry.canvas.width = width;
+        canvasEntry.canvas.height = height;
+        // reset canvas transform for emulated mozCurrentTransform, if needed
+        canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0);
+      } else {
+        var canvas = createScratchCanvas(width, height);
+        var ctx = canvas.getContext('2d');
+        if (trackTransform) {
+          addContextCurrentTransform(ctx);
+        }
+        cache[id] = canvasEntry = {canvas: canvas, context: ctx};
+      }
+      return canvasEntry;
+    },
+    clear: function () {
+      for (var id in cache) {
+        var canvasEntry = cache[id];
+        // Zeroing the width and height causes Firefox to release graphics
+        // resources immediately, which can greatly reduce memory consumption.
+        canvasEntry.canvas.width = 0;
+        canvasEntry.canvas.height = 0;
+        delete cache[id];
+      }
+    }
+  };
+})();
+
+function compileType3Glyph(imgData) {
+  var POINT_TO_PROCESS_LIMIT = 1000;
+
+  var width = imgData.width, height = imgData.height;
+  var i, j, j0, width1 = width + 1;
+  var points = new Uint8Array(width1 * (height + 1));
+  var POINT_TYPES =
+      new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);
+
+  // decodes bit-packed mask data
+  var lineSize = (width + 7) & ~7, data0 = imgData.data;
+  var data = new Uint8Array(lineSize * height), pos = 0, ii;
+  for (i = 0, ii = data0.length; i < ii; i++) {
+    var mask = 128, elem = data0[i];
+    while (mask > 0) {
+      data[pos++] = (elem & mask) ? 0 : 255;
+      mask >>= 1;
+    }
+  }
+
+  // finding iteresting points: every point is located between mask pixels,
+  // so there will be points of the (width + 1)x(height + 1) grid. Every point
+  // will have flags assigned based on neighboring mask pixels:
+  //   4 | 8
+  //   --P--
+  //   2 | 1
+  // We are interested only in points with the flags:
+  //   - outside corners: 1, 2, 4, 8;
+  //   - inside corners: 7, 11, 13, 14;
+  //   - and, intersections: 5, 10.
+  var count = 0;
+  pos = 0;
+  if (data[pos] !== 0) {
+    points[0] = 1;
+    ++count;
+  }
+  for (j = 1; j < width; j++) {
+    if (data[pos] !== data[pos + 1]) {
+      points[j] = data[pos] ? 2 : 1;
+      ++count;
+    }
+    pos++;
+  }
+  if (data[pos] !== 0) {
+    points[j] = 2;
+    ++count;
+  }
+  for (i = 1; i < height; i++) {
+    pos = i * lineSize;
+    j0 = i * width1;
+    if (data[pos - lineSize] !== data[pos]) {
+      points[j0] = data[pos] ? 1 : 8;
+      ++count;
+    }
+    // 'sum' is the position of the current pixel configuration in the 'TYPES'
+    // array (in order 8-1-2-4, so we can use '>>2' to shift the column).
+    var sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);
+    for (j = 1; j < width; j++) {
+      sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) +
+            (data[pos - lineSize + 1] ? 8 : 0);
+      if (POINT_TYPES[sum]) {
+        points[j0 + j] = POINT_TYPES[sum];
+        ++count;
+      }
+      pos++;
+    }
+    if (data[pos - lineSize] !== data[pos]) {
+      points[j0 + j] = data[pos] ? 2 : 4;
+      ++count;
+    }
+
+    if (count > POINT_TO_PROCESS_LIMIT) {
+      return null;
+    }
+  }
+
+  pos = lineSize * (height - 1);
+  j0 = i * width1;
+  if (data[pos] !== 0) {
+    points[j0] = 8;
+    ++count;
+  }
+  for (j = 1; j < width; j++) {
+    if (data[pos] !== data[pos + 1]) {
+      points[j0 + j] = data[pos] ? 4 : 8;
+      ++count;
+    }
+    pos++;
+  }
+  if (data[pos] !== 0) {
+    points[j0 + j] = 4;
+    ++count;
+  }
+  if (count > POINT_TO_PROCESS_LIMIT) {
+    return null;
+  }
+
+  // building outlines
+  var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);
+  var outlines = [];
+  for (i = 0; count && i <= height; i++) {
+    var p = i * width1;
+    var end = p + width;
+    while (p < end && !points[p]) {
+      p++;
+    }
+    if (p === end) {
+      continue;
+    }
+    var coords = [p % width1, i];
+
+    var type = points[p], p0 = p, pp;
+    do {
+      var step = steps[type];
+      do {
+        p += step;
+      } while (!points[p]);
+
+      pp = points[p];
+      if (pp !== 5 && pp !== 10) {
+        // set new direction
+        type = pp;
+        // delete mark
+        points[p] = 0;
+      } else { // type is 5 or 10, ie, a crossing
+        // set new direction
+        type = pp & ((0x33 * type) >> 4);
+        // set new type for "future hit"
+        points[p] &= (type >> 2 | type << 2);
+      }
+
+      coords.push(p % width1);
+      coords.push((p / width1) | 0);
+      --count;
+    } while (p0 !== p);
+    outlines.push(coords);
+    --i;
+  }
+
+  var drawOutline = function(c) {
+    c.save();
+    // the path shall be painted in [0..1]x[0..1] space
+    c.scale(1 / width, -1 / height);
+    c.translate(0, -height);
+    c.beginPath();
+    for (var i = 0, ii = outlines.length; i < ii; i++) {
+      var o = outlines[i];
+      c.moveTo(o[0], o[1]);
+      for (var j = 2, jj = o.length; j < jj; j += 2) {
+        c.lineTo(o[j], o[j+1]);
+      }
+    }
+    c.fill();
+    c.beginPath();
+    c.restore();
+  };
+
+  return drawOutline;
+}
+
+var CanvasExtraState = (function CanvasExtraStateClosure() {
+  function CanvasExtraState(old) {
+    // Are soft masks and alpha values shapes or opacities?
+    this.alphaIsShape = false;
+    this.fontSize = 0;
+    this.fontSizeScale = 1;
+    this.textMatrix = IDENTITY_MATRIX;
+    this.textMatrixScale = 1;
+    this.fontMatrix = FONT_IDENTITY_MATRIX;
+    this.leading = 0;
+    // Current point (in user coordinates)
+    this.x = 0;
+    this.y = 0;
+    // Start of text line (in text coordinates)
+    this.lineX = 0;
+    this.lineY = 0;
+    // Character and word spacing
+    this.charSpacing = 0;
+    this.wordSpacing = 0;
+    this.textHScale = 1;
+    this.textRenderingMode = TextRenderingMode.FILL;
+    this.textRise = 0;
+    // Default fore and background colors
+    this.fillColor = '#000000';
+    this.strokeColor = '#000000';
+    this.patternFill = false;
+    // Note: fill alpha applies to all non-stroking operations
+    this.fillAlpha = 1;
+    this.strokeAlpha = 1;
+    this.lineWidth = 1;
+    this.activeSMask = null; // nonclonable field (see the save method below)
+
+    this.old = old;
+  }
+
+  CanvasExtraState.prototype = {
+    clone: function CanvasExtraState_clone() {
+      return Object.create(this);
+    },
+    setCurrentPoint: function CanvasExtraState_setCurrentPoint(x, y) {
+      this.x = x;
+      this.y = y;
+    }
+  };
+  return CanvasExtraState;
+})();
+
+var CanvasGraphics = (function CanvasGraphicsClosure() {
+  // Defines the time the executeOperatorList is going to be executing
+  // before it stops and shedules a continue of execution.
+  var EXECUTION_TIME = 15;
+  // Defines the number of steps before checking the execution time
+  var EXECUTION_STEPS = 10;
+
+  function CanvasGraphics(canvasCtx, commonObjs, objs, imageLayer) {
+    this.ctx = canvasCtx;
+    this.current = new CanvasExtraState();
+    this.stateStack = [];
+    this.pendingClip = null;
+    this.pendingEOFill = false;
+    this.res = null;
+    this.xobjs = null;
+    this.commonObjs = commonObjs;
+    this.objs = objs;
+    this.imageLayer = imageLayer;
+    this.groupStack = [];
+    this.processingType3 = null;
+    // Patterns are painted relative to the initial page/form transform, see pdf
+    // spec 8.7.2 NOTE 1.
+    this.baseTransform = null;
+    this.baseTransformStack = [];
+    this.groupLevel = 0;
+    this.smaskStack = [];
+    this.smaskCounter = 0;
+    this.tempSMask = null;
+    if (canvasCtx) {
+      // NOTE: if mozCurrentTransform is polyfilled, then the current state of
+      // the transformation must already be set in canvasCtx._transformMatrix.
+      addContextCurrentTransform(canvasCtx);
+    }
+    this.cachedGetSinglePixelWidth = null;
+  }
+
+  function putBinaryImageData(ctx, imgData) {
+    if (typeof ImageData !== 'undefined' && imgData instanceof ImageData) {
+      ctx.putImageData(imgData, 0, 0);
+      return;
+    }
+
+    // Put the image data to the canvas in chunks, rather than putting the
+    // whole image at once.  This saves JS memory, because the ImageData object
+    // is smaller. It also possibly saves C++ memory within the implementation
+    // of putImageData(). (E.g. in Firefox we make two short-lived copies of
+    // the data passed to putImageData()). |n| shouldn't be too small, however,
+    // because too many putImageData() calls will slow things down.
+    //
+    // Note: as written, if the last chunk is partial, the putImageData() call
+    // will (conceptually) put pixels past the bounds of the canvas.  But
+    // that's ok; any such pixels are ignored.
+
+    var height = imgData.height, width = imgData.width;
+    var partialChunkHeight = height % FULL_CHUNK_HEIGHT;
+    var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
+    var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
+
+    var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
+    var srcPos = 0, destPos;
+    var src = imgData.data;
+    var dest = chunkImgData.data;
+    var i, j, thisChunkHeight, elemsInThisChunk;
+
+    // There are multiple forms in which the pixel data can be passed, and
+    // imgData.kind tells us which one this is.
+    if (imgData.kind === ImageKind.GRAYSCALE_1BPP) {
+      // Grayscale, 1 bit per pixel (i.e. black-and-white).
+      var srcLength = src.byteLength;
+      var dest32 = PDFJS.hasCanvasTypedArrays ? new Uint32Array(dest.buffer) :
+        new Uint32ArrayView(dest);
+      var dest32DataLength = dest32.length;
+      var fullSrcDiff = (width + 7) >> 3;
+      var white = 0xFFFFFFFF;
+      var black = (PDFJS.isLittleEndian || !PDFJS.hasCanvasTypedArrays) ?
+        0xFF000000 : 0x000000FF;
+      for (i = 0; i < totalChunks; i++) {
+        thisChunkHeight =
+          (i < fullChunks) ? FULL_CHUNK_HEIGHT : partialChunkHeight;
+        destPos = 0;
+        for (j = 0; j < thisChunkHeight; j++) {
+          var srcDiff = srcLength - srcPos;
+          var k = 0;
+          var kEnd = (srcDiff > fullSrcDiff) ? width : srcDiff * 8 - 7;
+          var kEndUnrolled = kEnd & ~7;
+          var mask = 0;
+          var srcByte = 0;
+          for (; k < kEndUnrolled; k += 8) {
+            srcByte = src[srcPos++];
+            dest32[destPos++] = (srcByte & 128) ? white : black;
+            dest32[destPos++] = (srcByte & 64) ? white : black;
+            dest32[destPos++] = (srcByte & 32) ? white : black;
+            dest32[destPos++] = (srcByte & 16) ? white : black;
+            dest32[destPos++] = (srcByte & 8) ? white : black;
+            dest32[destPos++] = (srcByte & 4) ? white : black;
+            dest32[destPos++] = (srcByte & 2) ? white : black;
+            dest32[destPos++] = (srcByte & 1) ? white : black;
+          }
+          for (; k < kEnd; k++) {
+             if (mask === 0) {
+               srcByte = src[srcPos++];
+               mask = 128;
+             }
+
+            dest32[destPos++] = (srcByte & mask) ? white : black;
+            mask >>= 1;
+          }
+        }
+        // We ran out of input. Make all remaining pixels transparent.
+        while (destPos < dest32DataLength) {
+          dest32[destPos++] = 0;
+        }
+
+        ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
+      }
+    } else if (imgData.kind === ImageKind.RGBA_32BPP) {
+      // RGBA, 32-bits per pixel.
+
+      j = 0;
+      elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;
+      for (i = 0; i < fullChunks; i++) {
+        dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
+        srcPos += elemsInThisChunk;
+
+        ctx.putImageData(chunkImgData, 0, j);
+        j += FULL_CHUNK_HEIGHT;
+      }
+      if (i < totalChunks) {
+        elemsInThisChunk = width * partialChunkHeight * 4;
+        dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
+        ctx.putImageData(chunkImgData, 0, j);
+      }
+
+    } else if (imgData.kind === ImageKind.RGB_24BPP) {
+      // RGB, 24-bits per pixel.
+      thisChunkHeight = FULL_CHUNK_HEIGHT;
+      elemsInThisChunk = width * thisChunkHeight;
+      for (i = 0; i < totalChunks; i++) {
+        if (i >= fullChunks) {
+          thisChunkHeight = partialChunkHeight;
+          elemsInThisChunk = width * thisChunkHeight;
+        }
+
+        destPos = 0;
+        for (j = elemsInThisChunk; j--;) {
+          dest[destPos++] = src[srcPos++];
+          dest[destPos++] = src[srcPos++];
+          dest[destPos++] = src[srcPos++];
+          dest[destPos++] = 255;
+        }
+        ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
+      }
+    } else {
+      error('bad image kind: ' + imgData.kind);
+    }
+  }
+
+  function putBinaryImageMask(ctx, imgData) {
+    var height = imgData.height, width = imgData.width;
+    var partialChunkHeight = height % FULL_CHUNK_HEIGHT;
+    var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
+    var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
+
+    var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
+    var srcPos = 0;
+    var src = imgData.data;
+    var dest = chunkImgData.data;
+
+    for (var i = 0; i < totalChunks; i++) {
+      var thisChunkHeight =
+        (i < fullChunks) ? FULL_CHUNK_HEIGHT : partialChunkHeight;
+
+      // Expand the mask so it can be used by the canvas.  Any required
+      // inversion has already been handled.
+      var destPos = 3; // alpha component offset
+      for (var j = 0; j < thisChunkHeight; j++) {
+        var mask = 0;
+        for (var k = 0; k < width; k++) {
+          if (!mask) {
+            var elem = src[srcPos++];
+            mask = 128;
+          }
+          dest[destPos] = (elem & mask) ? 0 : 255;
+          destPos += 4;
+          mask >>= 1;
+        }
+      }
+      ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
+    }
+  }
+
+  function copyCtxState(sourceCtx, destCtx) {
+    var properties = ['strokeStyle', 'fillStyle', 'fillRule', 'globalAlpha',
+                      'lineWidth', 'lineCap', 'lineJoin', 'miterLimit',
+                      'globalCompositeOperation', 'font'];
+    for (var i = 0, ii = properties.length; i < ii; i++) {
+      var property = properties[i];
+      if (sourceCtx[property] !== undefined) {
+        destCtx[property] = sourceCtx[property];
+      }
+    }
+    if (sourceCtx.setLineDash !== undefined) {
+      destCtx.setLineDash(sourceCtx.getLineDash());
+      destCtx.lineDashOffset =  sourceCtx.lineDashOffset;
+    } else if (sourceCtx.mozDashOffset !== undefined) {
+      destCtx.mozDash = sourceCtx.mozDash;
+      destCtx.mozDashOffset = sourceCtx.mozDashOffset;
+    }
+  }
+
+  function composeSMaskBackdrop(bytes, r0, g0, b0) {
+    var length = bytes.length;
+    for (var i = 3; i < length; i += 4) {
+      var alpha = bytes[i];
+      if (alpha === 0) {
+        bytes[i - 3] = r0;
+        bytes[i - 2] = g0;
+        bytes[i - 1] = b0;
+      } else if (alpha < 255) {
+        var alpha_ = 255 - alpha;
+        bytes[i - 3] = (bytes[i - 3] * alpha + r0 * alpha_) >> 8;
+        bytes[i - 2] = (bytes[i - 2] * alpha + g0 * alpha_) >> 8;
+        bytes[i - 1] = (bytes[i - 1] * alpha + b0 * alpha_) >> 8;
+      }
+    }
+  }
+
+  function composeSMaskAlpha(maskData, layerData) {
+    var length = maskData.length;
+    var scale = 1 / 255;
+    for (var i = 3; i < length; i += 4) {
+      var alpha = maskData[i];
+      layerData[i] = (layerData[i] * alpha * scale) | 0;
+    }
+  }
+
+  function composeSMaskLuminosity(maskData, layerData) {
+    var length = maskData.length;
+    for (var i = 3; i < length; i += 4) {
+      var y = (maskData[i - 3] * 77) +  // * 0.3 / 255 * 0x10000
+              (maskData[i - 2] * 152) + // * 0.59 ....
+              (maskData[i - 1] * 28);   // * 0.11 ....
+      layerData[i] = (layerData[i] * y) >> 16;
+    }
+  }
+
+  function genericComposeSMask(maskCtx, layerCtx, width, height,
+                               subtype, backdrop) {
+    var hasBackdrop = !!backdrop;
+    var r0 = hasBackdrop ? backdrop[0] : 0;
+    var g0 = hasBackdrop ? backdrop[1] : 0;
+    var b0 = hasBackdrop ? backdrop[2] : 0;
+
+    var composeFn;
+    if (subtype === 'Luminosity') {
+      composeFn = composeSMaskLuminosity;
+    } else {
+      composeFn = composeSMaskAlpha;
+    }
+
+    // processing image in chunks to save memory
+    var PIXELS_TO_PROCESS = 1048576;
+    var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width));
+    for (var row = 0; row < height; row += chunkSize) {
+      var chunkHeight = Math.min(chunkSize, height - row);
+      var maskData = maskCtx.getImageData(0, row, width, chunkHeight);
+      var layerData = layerCtx.getImageData(0, row, width, chunkHeight);
+
+      if (hasBackdrop) {
+        composeSMaskBackdrop(maskData.data, r0, g0, b0);
+      }
+      composeFn(maskData.data, layerData.data);
+
+      maskCtx.putImageData(layerData, 0, row);
+    }
+  }
+
+  function composeSMask(ctx, smask, layerCtx) {
+    var mask = smask.canvas;
+    var maskCtx = smask.context;
+
+    ctx.setTransform(smask.scaleX, 0, 0, smask.scaleY,
+                     smask.offsetX, smask.offsetY);
+
+    var backdrop = smask.backdrop || null;
+    if (WebGLUtils.isEnabled) {
+      var composed = WebGLUtils.composeSMask(layerCtx.canvas, mask,
+        {subtype: smask.subtype, backdrop: backdrop});
+      ctx.setTransform(1, 0, 0, 1, 0, 0);
+      ctx.drawImage(composed, smask.offsetX, smask.offsetY);
+      return;
+    }
+    genericComposeSMask(maskCtx, layerCtx, mask.width, mask.height,
+                        smask.subtype, backdrop);
+    ctx.drawImage(mask, 0, 0);
+  }
+
+  var LINE_CAP_STYLES = ['butt', 'round', 'square'];
+  var LINE_JOIN_STYLES = ['miter', 'round', 'bevel'];
+  var NORMAL_CLIP = {};
+  var EO_CLIP = {};
+
+  CanvasGraphics.prototype = {
+
+    beginDrawing: function CanvasGraphics_beginDrawing(viewport, transparency) {
+      // For pdfs that use blend modes we have to clear the canvas else certain
+      // blend modes can look wrong since we'd be blending with a white
+      // backdrop. The problem with a transparent backdrop though is we then
+      // don't get sub pixel anti aliasing on text, so we fill with white if
+      // we can.
+      var width = this.ctx.canvas.width;
+      var height = this.ctx.canvas.height;
+      if (transparency) {
+        this.ctx.clearRect(0, 0, width, height);
+      } else {
+        this.ctx.mozOpaque = true;
+        this.ctx.save();
+        this.ctx.fillStyle = 'rgb(255, 255, 255)';
+        this.ctx.fillRect(0, 0, width, height);
+        this.ctx.restore();
+      }
+
+      var transform = viewport.transform;
+
+      this.ctx.save();
+      this.ctx.transform.apply(this.ctx, transform);
+
+      this.baseTransform = this.ctx.mozCurrentTransform.slice();
+
+      if (this.imageLayer) {
+        this.imageLayer.beginLayout();
+      }
+    },
+
+    executeOperatorList: function CanvasGraphics_executeOperatorList(
+                                    operatorList,
+                                    executionStartIdx, continueCallback,
+                                    stepper) {
+      var argsArray = operatorList.argsArray;
+      var fnArray = operatorList.fnArray;
+      var i = executionStartIdx || 0;
+      var argsArrayLen = argsArray.length;
+
+      // Sometimes the OperatorList to execute is empty.
+      if (argsArrayLen === i) {
+        return i;
+      }
+
+      var chunkOperations = (argsArrayLen - i > EXECUTION_STEPS &&
+                             typeof continueCallback === 'function');
+      var endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;
+      var steps = 0;
+
+      var commonObjs = this.commonObjs;
+      var objs = this.objs;
+      var fnId;
+
+      while (true) {
+        if (stepper !== undefined && i === stepper.nextBreakPoint) {
+          stepper.breakIt(i, continueCallback);
+          return i;
+        }
+
+        fnId = fnArray[i];
+
+        if (fnId !== OPS.dependency) {
+          this[fnId].apply(this, argsArray[i]);
+        } else {
+          var deps = argsArray[i];
+          for (var n = 0, nn = deps.length; n < nn; n++) {
+            var depObjId = deps[n];
+            var common = depObjId[0] === 'g' && depObjId[1] === '_';
+            var objsPool = common ? commonObjs : objs;
+
+            // If the promise isn't resolved yet, add the continueCallback
+            // to the promise and bail out.
+            if (!objsPool.isResolved(depObjId)) {
+              objsPool.get(depObjId, continueCallback);
+              return i;
+            }
+          }
+        }
+
+        i++;
+
+        // If the entire operatorList was executed, stop as were done.
+        if (i === argsArrayLen) {
+          return i;
+        }
+
+        // If the execution took longer then a certain amount of time and
+        // `continueCallback` is specified, interrupt the execution.
+        if (chunkOperations && ++steps > EXECUTION_STEPS) {
+          if (Date.now() > endTime) {
+            continueCallback();
+            return i;
+          }
+          steps = 0;
+        }
+
+        // If the operatorList isn't executed completely yet OR the execution
+        // time was short enough, do another execution round.
+      }
+    },
+
+    endDrawing: function CanvasGraphics_endDrawing() {
+      this.ctx.restore();
+      CachedCanvases.clear();
+      WebGLUtils.clear();
+
+      if (this.imageLayer) {
+        this.imageLayer.endLayout();
+      }
+    },
+
+    // Graphics state
+    setLineWidth: function CanvasGraphics_setLineWidth(width) {
+      this.current.lineWidth = width;
+      this.ctx.lineWidth = width;
+    },
+    setLineCap: function CanvasGraphics_setLineCap(style) {
+      this.ctx.lineCap = LINE_CAP_STYLES[style];
+    },
+    setLineJoin: function CanvasGraphics_setLineJoin(style) {
+      this.ctx.lineJoin = LINE_JOIN_STYLES[style];
+    },
+    setMiterLimit: function CanvasGraphics_setMiterLimit(limit) {
+      this.ctx.miterLimit = limit;
+    },
+    setDash: function CanvasGraphics_setDash(dashArray, dashPhase) {
+      var ctx = this.ctx;
+      if (ctx.setLineDash !== undefined) {
+        ctx.setLineDash(dashArray);
+        ctx.lineDashOffset = dashPhase;
+      } else {
+        ctx.mozDash = dashArray;
+        ctx.mozDashOffset = dashPhase;
+      }
+    },
+    setRenderingIntent: function CanvasGraphics_setRenderingIntent(intent) {
+      // Maybe if we one day fully support color spaces this will be important
+      // for now we can ignore.
+      // TODO set rendering intent?
+    },
+    setFlatness: function CanvasGraphics_setFlatness(flatness) {
+      // There's no way to control this with canvas, but we can safely ignore.
+      // TODO set flatness?
+    },
+    setGState: function CanvasGraphics_setGState(states) {
+      for (var i = 0, ii = states.length; i < ii; i++) {
+        var state = states[i];
+        var key = state[0];
+        var value = state[1];
+
+        switch (key) {
+          case 'LW':
+            this.setLineWidth(value);
+            break;
+          case 'LC':
+            this.setLineCap(value);
+            break;
+          case 'LJ':
+            this.setLineJoin(value);
+            break;
+          case 'ML':
+            this.setMiterLimit(value);
+            break;
+          case 'D':
+            this.setDash(value[0], value[1]);
+            break;
+          case 'RI':
+            this.setRenderingIntent(value);
+            break;
+          case 'FL':
+            this.setFlatness(value);
+            break;
+          case 'Font':
+            this.setFont(value[0], value[1]);
+            break;
+          case 'CA':
+            this.current.strokeAlpha = state[1];
+            break;
+          case 'ca':
+            this.current.fillAlpha = state[1];
+            this.ctx.globalAlpha = state[1];
+            break;
+          case 'BM':
+            if (value && value.name && (value.name !== 'Normal')) {
+              var mode = value.name.replace(/([A-Z])/g,
+                function(c) {
+                  return '-' + c.toLowerCase();
+                }
+              ).substring(1);
+              this.ctx.globalCompositeOperation = mode;
+              if (this.ctx.globalCompositeOperation !== mode) {
+                warn('globalCompositeOperation "' + mode +
+                     '" is not supported');
+              }
+            } else {
+              this.ctx.globalCompositeOperation = 'source-over';
+            }
+            break;
+          case 'SMask':
+            if (this.current.activeSMask) {
+              this.endSMaskGroup();
+            }
+            this.current.activeSMask = value ? this.tempSMask : null;
+            if (this.current.activeSMask) {
+              this.beginSMaskGroup();
+            }
+            this.tempSMask = null;
+            break;
+        }
+      }
+    },
+    beginSMaskGroup: function CanvasGraphics_beginSMaskGroup() {
+
+      var activeSMask = this.current.activeSMask;
+      var drawnWidth = activeSMask.canvas.width;
+      var drawnHeight = activeSMask.canvas.height;
+      var cacheId = 'smaskGroupAt' + this.groupLevel;
+      var scratchCanvas = CachedCanvases.getCanvas(
+        cacheId, drawnWidth, drawnHeight, true);
+
+      var currentCtx = this.ctx;
+      var currentTransform = currentCtx.mozCurrentTransform;
+      this.ctx.save();
+
+      var groupCtx = scratchCanvas.context;
+      groupCtx.scale(1 / activeSMask.scaleX, 1 / activeSMask.scaleY);
+      groupCtx.translate(-activeSMask.offsetX, -activeSMask.offsetY);
+      groupCtx.transform.apply(groupCtx, currentTransform);
+
+      copyCtxState(currentCtx, groupCtx);
+      this.ctx = groupCtx;
+      this.setGState([
+        ['BM', 'Normal'],
+        ['ca', 1],
+        ['CA', 1]
+      ]);
+      this.groupStack.push(currentCtx);
+      this.groupLevel++;
+    },
+    endSMaskGroup: function CanvasGraphics_endSMaskGroup() {
+      var groupCtx = this.ctx;
+      this.groupLevel--;
+      this.ctx = this.groupStack.pop();
+
+      composeSMask(this.ctx, this.current.activeSMask, groupCtx);
+      this.ctx.restore();
+    },
+    save: function CanvasGraphics_save() {
+      this.ctx.save();
+      var old = this.current;
+      this.stateStack.push(old);
+      this.current = old.clone();
+      this.current.activeSMask = null;
+    },
+    restore: function CanvasGraphics_restore() {
+      if (this.stateStack.length !== 0) {
+        if (this.current.activeSMask !== null) {
+          this.endSMaskGroup();
+        }
+
+        this.current = this.stateStack.pop();
+        this.ctx.restore();
+
+        // Ensure that the clipping path is reset (fixes issue6413.pdf).
+        this.pendingClip = null;
+
+        this.cachedGetSinglePixelWidth = null;
+      }
+    },
+    transform: function CanvasGraphics_transform(a, b, c, d, e, f) {
+      this.ctx.transform(a, b, c, d, e, f);
+
+      this.cachedGetSinglePixelWidth = null;
+    },
+
+    // Path
+    constructPath: function CanvasGraphics_constructPath(ops, args) {
+      var ctx = this.ctx;
+      var current = this.current;
+      var x = current.x, y = current.y;
+      for (var i = 0, j = 0, ii = ops.length; i < ii; i++) {
+        switch (ops[i] | 0) {
+          case OPS.rectangle:
+            x = args[j++];
+            y = args[j++];
+            var width = args[j++];
+            var height = args[j++];
+            if (width === 0) {
+              width = this.getSinglePixelWidth();
+            }
+            if (height === 0) {
+              height = this.getSinglePixelWidth();
+            }
+            var xw = x + width;
+            var yh = y + height;
+            this.ctx.moveTo(x, y);
+            this.ctx.lineTo(xw, y);
+            this.ctx.lineTo(xw, yh);
+            this.ctx.lineTo(x, yh);
+            this.ctx.lineTo(x, y);
+            this.ctx.closePath();
+            break;
+          case OPS.moveTo:
+            x = args[j++];
+            y = args[j++];
+            ctx.moveTo(x, y);
+            break;
+          case OPS.lineTo:
+            x = args[j++];
+            y = args[j++];
+            ctx.lineTo(x, y);
+            break;
+          case OPS.curveTo:
+            x = args[j + 4];
+            y = args[j + 5];
+            ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3],
+                              x, y);
+            j += 6;
+            break;
+          case OPS.curveTo2:
+            ctx.bezierCurveTo(x, y, args[j], args[j + 1],
+                              args[j + 2], args[j + 3]);
+            x = args[j + 2];
+            y = args[j + 3];
+            j += 4;
+            break;
+          case OPS.curveTo3:
+            x = args[j + 2];
+            y = args[j + 3];
+            ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y);
+            j += 4;
+            break;
+          case OPS.closePath:
+            ctx.closePath();
+            break;
+        }
+      }
+      current.setCurrentPoint(x, y);
+    },
+    closePath: function CanvasGraphics_closePath() {
+      this.ctx.closePath();
+    },
+    stroke: function CanvasGraphics_stroke(consumePath) {
+      consumePath = typeof consumePath !== 'undefined' ? consumePath : true;
+      var ctx = this.ctx;
+      var strokeColor = this.current.strokeColor;
+      // Prevent drawing too thin lines by enforcing a minimum line width.
+      ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR,
+                               this.current.lineWidth);
+      // For stroke we want to temporarily change the global alpha to the
+      // stroking alpha.
+      ctx.globalAlpha = this.current.strokeAlpha;
+      if (strokeColor && strokeColor.hasOwnProperty('type') &&
+          strokeColor.type === 'Pattern') {
+        // for patterns, we transform to pattern space, calculate
+        // the pattern, call stroke, and restore to user space
+        ctx.save();
+        ctx.strokeStyle = strokeColor.getPattern(ctx, this);
+        ctx.stroke();
+        ctx.restore();
+      } else {
+        ctx.stroke();
+      }
+      if (consumePath) {
+        this.consumePath();
+      }
+      // Restore the global alpha to the fill alpha
+      ctx.globalAlpha = this.current.fillAlpha;
+    },
+    closeStroke: function CanvasGraphics_closeStroke() {
+      this.closePath();
+      this.stroke();
+    },
+    fill: function CanvasGraphics_fill(consumePath) {
+      consumePath = typeof consumePath !== 'undefined' ? consumePath : true;
+      var ctx = this.ctx;
+      var fillColor = this.current.fillColor;
+      var isPatternFill = this.current.patternFill;
+      var needRestore = false;
+
+      if (isPatternFill) {
+        ctx.save();
+        ctx.fillStyle = fillColor.getPattern(ctx, this);
+        needRestore = true;
+      }
+
+      if (this.pendingEOFill) {
+        if (ctx.mozFillRule !== undefined) {
+          ctx.mozFillRule = 'evenodd';
+          ctx.fill();
+          ctx.mozFillRule = 'nonzero';
+        } else {
+          ctx.fill('evenodd');
+        }
+        this.pendingEOFill = false;
+      } else {
+        ctx.fill();
+      }
+
+      if (needRestore) {
+        ctx.restore();
+      }
+      if (consumePath) {
+        this.consumePath();
+      }
+    },
+    eoFill: function CanvasGraphics_eoFill() {
+      this.pendingEOFill = true;
+      this.fill();
+    },
+    fillStroke: function CanvasGraphics_fillStroke() {
+      this.fill(false);
+      this.stroke(false);
+
+      this.consumePath();
+    },
+    eoFillStroke: function CanvasGraphics_eoFillStroke() {
+      this.pendingEOFill = true;
+      this.fillStroke();
+    },
+    closeFillStroke: function CanvasGraphics_closeFillStroke() {
+      this.closePath();
+      this.fillStroke();
+    },
+    closeEOFillStroke: function CanvasGraphics_closeEOFillStroke() {
+      this.pendingEOFill = true;
+      this.closePath();
+      this.fillStroke();
+    },
+    endPath: function CanvasGraphics_endPath() {
+      this.consumePath();
+    },
+
+    // Clipping
+    clip: function CanvasGraphics_clip() {
+      this.pendingClip = NORMAL_CLIP;
+    },
+    eoClip: function CanvasGraphics_eoClip() {
+      this.pendingClip = EO_CLIP;
+    },
+
+    // Text
+    beginText: function CanvasGraphics_beginText() {
+      this.current.textMatrix = IDENTITY_MATRIX;
+      this.current.textMatrixScale = 1;
+      this.current.x = this.current.lineX = 0;
+      this.current.y = this.current.lineY = 0;
+    },
+    endText: function CanvasGraphics_endText() {
+      var paths = this.pendingTextPaths;
+      var ctx = this.ctx;
+      if (paths === undefined) {
+        ctx.beginPath();
+        return;
+      }
+
+      ctx.save();
+      ctx.beginPath();
+      for (var i = 0; i < paths.length; i++) {
+        var path = paths[i];
+        ctx.setTransform.apply(ctx, path.transform);
+        ctx.translate(path.x, path.y);
+        path.addToPath(ctx, path.fontSize);
+      }
+      ctx.restore();
+      ctx.clip();
+      ctx.beginPath();
+      delete this.pendingTextPaths;
+    },
+    setCharSpacing: function CanvasGraphics_setCharSpacing(spacing) {
+      this.current.charSpacing = spacing;
+    },
+    setWordSpacing: function CanvasGraphics_setWordSpacing(spacing) {
+      this.current.wordSpacing = spacing;
+    },
+    setHScale: function CanvasGraphics_setHScale(scale) {
+      this.current.textHScale = scale / 100;
+    },
+    setLeading: function CanvasGraphics_setLeading(leading) {
+      this.current.leading = -leading;
+    },
+    setFont: function CanvasGraphics_setFont(fontRefName, size) {
+      var fontObj = this.commonObjs.get(fontRefName);
+      var current = this.current;
+
+      if (!fontObj) {
+        error('Can\'t find font for ' + fontRefName);
+      }
+
+      current.fontMatrix = (fontObj.fontMatrix ?
+                            fontObj.fontMatrix : FONT_IDENTITY_MATRIX);
+
+      // A valid matrix needs all main diagonal elements to be non-zero
+      // This also ensures we bypass FF bugzilla bug #719844.
+      if (current.fontMatrix[0] === 0 ||
+          current.fontMatrix[3] === 0) {
+        warn('Invalid font matrix for font ' + fontRefName);
+      }
+
+      // The spec for Tf (setFont) says that 'size' specifies the font 'scale',
+      // and in some docs this can be negative (inverted x-y axes).
+      if (size < 0) {
+        size = -size;
+        current.fontDirection = -1;
+      } else {
+        current.fontDirection = 1;
+      }
+
+      this.current.font = fontObj;
+      this.current.fontSize = size;
+
+      if (fontObj.isType3Font) {
+        return; // we don't need ctx.font for Type3 fonts
+      }
+
+      var name = fontObj.loadedName || 'sans-serif';
+      var bold = fontObj.black ? (fontObj.bold ? '900' : 'bold') :
+                                 (fontObj.bold ? 'bold' : 'normal');
+
+      var italic = fontObj.italic ? 'italic' : 'normal';
+      var typeface = '"' + name + '", ' + fontObj.fallbackName;
+
+      // Some font backends cannot handle fonts below certain size.
+      // Keeping the font at minimal size and using the fontSizeScale to change
+      // the current transformation matrix before the fillText/strokeText.
+      // See https://bugzilla.mozilla.org/show_bug.cgi?id=726227
+      var browserFontSize = size < MIN_FONT_SIZE ? MIN_FONT_SIZE :
+                            size > MAX_FONT_SIZE ? MAX_FONT_SIZE : size;
+      this.current.fontSizeScale = size / browserFontSize;
+
+      var rule = italic + ' ' + bold + ' ' + browserFontSize + 'px ' + typeface;
+      this.ctx.font = rule;
+    },
+    setTextRenderingMode: function CanvasGraphics_setTextRenderingMode(mode) {
+      this.current.textRenderingMode = mode;
+    },
+    setTextRise: function CanvasGraphics_setTextRise(rise) {
+      this.current.textRise = rise;
+    },
+    moveText: function CanvasGraphics_moveText(x, y) {
+      this.current.x = this.current.lineX += x;
+      this.current.y = this.current.lineY += y;
+    },
+    setLeadingMoveText: function CanvasGraphics_setLeadingMoveText(x, y) {
+      this.setLeading(-y);
+      this.moveText(x, y);
+    },
+    setTextMatrix: function CanvasGraphics_setTextMatrix(a, b, c, d, e, f) {
+      this.current.textMatrix = [a, b, c, d, e, f];
+      this.current.textMatrixScale = Math.sqrt(a * a + b * b);
+
+      this.current.x = this.current.lineX = 0;
+      this.current.y = this.current.lineY = 0;
+    },
+    nextLine: function CanvasGraphics_nextLine() {
+      this.moveText(0, this.current.leading);
+    },
+
+    paintChar: function CanvasGraphics_paintChar(character, x, y) {
+      var ctx = this.ctx;
+      var current = this.current;
+      var font = current.font;
+      var textRenderingMode = current.textRenderingMode;
+      var fontSize = current.fontSize / current.fontSizeScale;
+      var fillStrokeMode = textRenderingMode &
+        TextRenderingMode.FILL_STROKE_MASK;
+      var isAddToPathSet = !!(textRenderingMode &
+        TextRenderingMode.ADD_TO_PATH_FLAG);
+
+      var addToPath;
+      if (font.disableFontFace || isAddToPathSet) {
+        addToPath = font.getPathGenerator(this.commonObjs, character);
+      }
+
+      if (font.disableFontFace) {
+        ctx.save();
+        ctx.translate(x, y);
+        ctx.beginPath();
+        addToPath(ctx, fontSize);
+        if (fillStrokeMode === TextRenderingMode.FILL ||
+            fillStrokeMode === TextRenderingMode.FILL_STROKE) {
+          ctx.fill();
+        }
+        if (fillStrokeMode === TextRenderingMode.STROKE ||
+            fillStrokeMode === TextRenderingMode.FILL_STROKE) {
+          ctx.stroke();
+        }
+        ctx.restore();
+      } else {
+        if (fillStrokeMode === TextRenderingMode.FILL ||
+            fillStrokeMode === TextRenderingMode.FILL_STROKE) {
+          ctx.fillText(character, x, y);
+        }
+        if (fillStrokeMode === TextRenderingMode.STROKE ||
+            fillStrokeMode === TextRenderingMode.FILL_STROKE) {
+          ctx.strokeText(character, x, y);
+        }
+      }
+
+      if (isAddToPathSet) {
+        var paths = this.pendingTextPaths || (this.pendingTextPaths = []);
+        paths.push({
+          transform: ctx.mozCurrentTransform,
+          x: x,
+          y: y,
+          fontSize: fontSize,
+          addToPath: addToPath
+        });
+      }
+    },
+
+    get isFontSubpixelAAEnabled() {
+      // Checks if anti-aliasing is enabled when scaled text is painted.
+      // On Windows GDI scaled fonts looks bad.
+      var ctx = document.createElement('canvas').getContext('2d');
+      ctx.scale(1.5, 1);
+      ctx.fillText('I', 0, 10);
+      var data = ctx.getImageData(0, 0, 10, 10).data;
+      var enabled = false;
+      for (var i = 3; i < data.length; i += 4) {
+        if (data[i] > 0 && data[i] < 255) {
+          enabled = true;
+          break;
+        }
+      }
+      return shadow(this, 'isFontSubpixelAAEnabled', enabled);
+    },
+
+    showText: function CanvasGraphics_showText(glyphs) {
+      var current = this.current;
+      var font = current.font;
+      if (font.isType3Font) {
+        return this.showType3Text(glyphs);
+      }
+
+      var fontSize = current.fontSize;
+      if (fontSize === 0) {
+        return;
+      }
+
+      var ctx = this.ctx;
+      var fontSizeScale = current.fontSizeScale;
+      var charSpacing = current.charSpacing;
+      var wordSpacing = current.wordSpacing;
+      var fontDirection = current.fontDirection;
+      var textHScale = current.textHScale * fontDirection;
+      var glyphsLength = glyphs.length;
+      var vertical = font.vertical;
+      var spacingDir = vertical ? 1 : -1;
+      var defaultVMetrics = font.defaultVMetrics;
+      var widthAdvanceScale = fontSize * current.fontMatrix[0];
+
+      var simpleFillText =
+        current.textRenderingMode === TextRenderingMode.FILL &&
+        !font.disableFontFace;
+
+      ctx.save();
+      ctx.transform.apply(ctx, current.textMatrix);
+      ctx.translate(current.x, current.y + current.textRise);
+
+      if (fontDirection > 0) {
+        ctx.scale(textHScale, -1);
+      } else {
+        ctx.scale(textHScale, 1);
+      }
+
+      var lineWidth = current.lineWidth;
+      var scale = current.textMatrixScale;
+      if (scale === 0 || lineWidth === 0) {
+        var fillStrokeMode = current.textRenderingMode &
+          TextRenderingMode.FILL_STROKE_MASK;
+        if (fillStrokeMode === TextRenderingMode.STROKE ||
+            fillStrokeMode === TextRenderingMode.FILL_STROKE) {
+          this.cachedGetSinglePixelWidth = null;
+          lineWidth = this.getSinglePixelWidth() * MIN_WIDTH_FACTOR;
+        }
+      } else {
+        lineWidth /= scale;
+      }
+
+      if (fontSizeScale !== 1.0) {
+        ctx.scale(fontSizeScale, fontSizeScale);
+        lineWidth /= fontSizeScale;
+      }
+
+      ctx.lineWidth = lineWidth;
+
+      var x = 0, i;
+      for (i = 0; i < glyphsLength; ++i) {
+        var glyph = glyphs[i];
+        if (glyph === null) {
+          // word break
+          x += fontDirection * wordSpacing;
+          continue;
+        } else if (isNum(glyph)) {
+          x += spacingDir * glyph * fontSize / 1000;
+          continue;
+        }
+
+        var restoreNeeded = false;
+        var character = glyph.fontChar;
+        var accent = glyph.accent;
+        var scaledX, scaledY, scaledAccentX, scaledAccentY;
+        var width = glyph.width;
+        if (vertical) {
+          var vmetric, vx, vy;
+          vmetric = glyph.vmetric || defaultVMetrics;
+          vx = glyph.vmetric ? vmetric[1] : width * 0.5;
+          vx = -vx * widthAdvanceScale;
+          vy = vmetric[2] * widthAdvanceScale;
+
+          width = vmetric ? -vmetric[0] : width;
+          scaledX = vx / fontSizeScale;
+          scaledY = (x + vy) / fontSizeScale;
+        } else {
+          scaledX = x / fontSizeScale;
+          scaledY = 0;
+        }
+
+        if (font.remeasure && width > 0 && this.isFontSubpixelAAEnabled) {
+          // some standard fonts may not have the exact width, trying to
+          // rescale per character
+          var measuredWidth = ctx.measureText(character).width * 1000 /
+            fontSize * fontSizeScale;
+          var characterScaleX = width / measuredWidth;
+          restoreNeeded = true;
+          ctx.save();
+          ctx.scale(characterScaleX, 1);
+          scaledX /= characterScaleX;
+        }
+
+        if (simpleFillText && !accent) {
+          // common case
+          ctx.fillText(character, scaledX, scaledY);
+        } else {
+          this.paintChar(character, scaledX, scaledY);
+          if (accent) {
+            scaledAccentX = scaledX + accent.offset.x / fontSizeScale;
+            scaledAccentY = scaledY - accent.offset.y / fontSizeScale;
+            this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY);
+          }
+        }
+
+        var charWidth = width * widthAdvanceScale + charSpacing * fontDirection;
+        x += charWidth;
+
+        if (restoreNeeded) {
+          ctx.restore();
+        }
+      }
+      if (vertical) {
+        current.y -= x * textHScale;
+      } else {
+        current.x += x * textHScale;
+      }
+      ctx.restore();
+    },
+
+    showType3Text: function CanvasGraphics_showType3Text(glyphs) {
+      // Type3 fonts - each glyph is a "mini-PDF"
+      var ctx = this.ctx;
+      var current = this.current;
+      var font = current.font;
+      var fontSize = current.fontSize;
+      var fontDirection = current.fontDirection;
+      var spacingDir = font.vertical ? 1 : -1;
+      var charSpacing = current.charSpacing;
+      var wordSpacing = current.wordSpacing;
+      var textHScale = current.textHScale * fontDirection;
+      var fontMatrix = current.fontMatrix || FONT_IDENTITY_MATRIX;
+      var glyphsLength = glyphs.length;
+      var isTextInvisible =
+        current.textRenderingMode === TextRenderingMode.INVISIBLE;
+      var i, glyph, width, spacingLength;
+
+      if (isTextInvisible || fontSize === 0) {
+        return;
+      }
+      this.cachedGetSinglePixelWidth = null;
+
+      ctx.save();
+      ctx.transform.apply(ctx, current.textMatrix);
+      ctx.translate(current.x, current.y);
+
+      ctx.scale(textHScale, fontDirection);
+
+      for (i = 0; i < glyphsLength; ++i) {
+        glyph = glyphs[i];
+        if (glyph === null) {
+          // word break
+          this.ctx.translate(wordSpacing, 0);
+          current.x += wordSpacing * textHScale;
+          continue;
+        } else if (isNum(glyph)) {
+          spacingLength = spacingDir * glyph * fontSize / 1000;
+          this.ctx.translate(spacingLength, 0);
+          current.x += spacingLength * textHScale;
+          continue;
+        }
+
+        var operatorList = font.charProcOperatorList[glyph.operatorListId];
+        if (!operatorList) {
+          warn('Type3 character \"' + glyph.operatorListId +
+               '\" is not available');
+          continue;
+        }
+        this.processingType3 = glyph;
+        this.save();
+        ctx.scale(fontSize, fontSize);
+        ctx.transform.apply(ctx, fontMatrix);
+        this.executeOperatorList(operatorList);
+        this.restore();
+
+        var transformed = Util.applyTransform([glyph.width, 0], fontMatrix);
+        width = transformed[0] * fontSize + charSpacing;
+
+        ctx.translate(width, 0);
+        current.x += width * textHScale;
+      }
+      ctx.restore();
+      this.processingType3 = null;
+    },
+
+    // Type3 fonts
+    setCharWidth: function CanvasGraphics_setCharWidth(xWidth, yWidth) {
+      // We can safely ignore this since the width should be the same
+      // as the width in the Widths array.
+    },
+    setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(xWidth,
+                                                                        yWidth,
+                                                                        llx,
+                                                                        lly,
+                                                                        urx,
+                                                                        ury) {
+      // TODO According to the spec we're also suppose to ignore any operators
+      // that set color or include images while processing this type3 font.
+      this.ctx.rect(llx, lly, urx - llx, ury - lly);
+      this.clip();
+      this.endPath();
+    },
+
+    // Color
+    getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR) {
+      var pattern;
+      if (IR[0] === 'TilingPattern') {
+        var color = IR[1];
+        var baseTransform = this.baseTransform ||
+                            this.ctx.mozCurrentTransform.slice();
+        pattern = new TilingPattern(IR, color, this.ctx, this.objs,
+                                    this.commonObjs, baseTransform);
+      } else {
+        pattern = getShadingPatternFromIR(IR);
+      }
+      return pattern;
+    },
+    setStrokeColorN: function CanvasGraphics_setStrokeColorN(/*...*/) {
+      this.current.strokeColor = this.getColorN_Pattern(arguments);
+    },
+    setFillColorN: function CanvasGraphics_setFillColorN(/*...*/) {
+      this.current.fillColor = this.getColorN_Pattern(arguments);
+      this.current.patternFill = true;
+    },
+    setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) {
+      var color = Util.makeCssRgb(r, g, b);
+      this.ctx.strokeStyle = color;
+      this.current.strokeColor = color;
+    },
+    setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) {
+      var color = Util.makeCssRgb(r, g, b);
+      this.ctx.fillStyle = color;
+      this.current.fillColor = color;
+      this.current.patternFill = false;
+    },
+
+    shadingFill: function CanvasGraphics_shadingFill(patternIR) {
+      var ctx = this.ctx;
+
+      this.save();
+      var pattern = getShadingPatternFromIR(patternIR);
+      ctx.fillStyle = pattern.getPattern(ctx, this, true);
+
+      var inv = ctx.mozCurrentTransformInverse;
+      if (inv) {
+        var canvas = ctx.canvas;
+        var width = canvas.width;
+        var height = canvas.height;
+
+        var bl = Util.applyTransform([0, 0], inv);
+        var br = Util.applyTransform([0, height], inv);
+        var ul = Util.applyTransform([width, 0], inv);
+        var ur = Util.applyTransform([width, height], inv);
+
+        var x0 = Math.min(bl[0], br[0], ul[0], ur[0]);
+        var y0 = Math.min(bl[1], br[1], ul[1], ur[1]);
+        var x1 = Math.max(bl[0], br[0], ul[0], ur[0]);
+        var y1 = Math.max(bl[1], br[1], ul[1], ur[1]);
+
+        this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);
+      } else {
+        // HACK to draw the gradient onto an infinite rectangle.
+        // PDF gradients are drawn across the entire image while
+        // Canvas only allows gradients to be drawn in a rectangle
+        // The following bug should allow us to remove this.
+        // https://bugzilla.mozilla.org/show_bug.cgi?id=664884
+
+        this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);
+      }
+
+      this.restore();
+    },
+
+    // Images
+    beginInlineImage: function CanvasGraphics_beginInlineImage() {
+      error('Should not call beginInlineImage');
+    },
+    beginImageData: function CanvasGraphics_beginImageData() {
+      error('Should not call beginImageData');
+    },
+
+    paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(matrix,
+                                                                        bbox) {
+      this.save();
+      this.baseTransformStack.push(this.baseTransform);
+
+      if (isArray(matrix) && 6 === matrix.length) {
+        this.transform.apply(this, matrix);
+      }
+
+      this.baseTransform = this.ctx.mozCurrentTransform;
+
+      if (isArray(bbox) && 4 === bbox.length) {
+        var width = bbox[2] - bbox[0];
+        var height = bbox[3] - bbox[1];
+        this.ctx.rect(bbox[0], bbox[1], width, height);
+        this.clip();
+        this.endPath();
+      }
+    },
+
+    paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() {
+      this.restore();
+      this.baseTransform = this.baseTransformStack.pop();
+    },
+
+    beginGroup: function CanvasGraphics_beginGroup(group) {
+      this.save();
+      var currentCtx = this.ctx;
+      // TODO non-isolated groups - according to Rik at adobe non-isolated
+      // group results aren't usually that different and they even have tools
+      // that ignore this setting. Notes from Rik on implmenting:
+      // - When you encounter an transparency group, create a new canvas with
+      // the dimensions of the bbox
+      // - copy the content from the previous canvas to the new canvas
+      // - draw as usual
+      // - remove the backdrop alpha:
+      // alphaNew = 1 - (1 - alpha)/(1 - alphaBackdrop) with 'alpha' the alpha
+      // value of your transparency group and 'alphaBackdrop' the alpha of the
+      // backdrop
+      // - remove background color:
+      // colorNew = color - alphaNew *colorBackdrop /(1 - alphaNew)
+      if (!group.isolated) {
+        info('TODO: Support non-isolated groups.');
+      }
+
+      // TODO knockout - supposedly possible with the clever use of compositing
+      // modes.
+      if (group.knockout) {
+        warn('Knockout groups not supported.');
+      }
+
+      var currentTransform = currentCtx.mozCurrentTransform;
+      if (group.matrix) {
+        currentCtx.transform.apply(currentCtx, group.matrix);
+      }
+      assert(group.bbox, 'Bounding box is required.');
+
+      // Based on the current transform figure out how big the bounding box
+      // will actually be.
+      var bounds = Util.getAxialAlignedBoundingBox(
+                    group.bbox,
+                    currentCtx.mozCurrentTransform);
+      // Clip the bounding box to the current canvas.
+      var canvasBounds = [0,
+                          0,
+                          currentCtx.canvas.width,
+                          currentCtx.canvas.height];
+      bounds = Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];
+      // Use ceil in case we're between sizes so we don't create canvas that is
+      // too small and make the canvas at least 1x1 pixels.
+      var offsetX = Math.floor(bounds[0]);
+      var offsetY = Math.floor(bounds[1]);
+      var drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);
+      var drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);
+      var scaleX = 1, scaleY = 1;
+      if (drawnWidth > MAX_GROUP_SIZE) {
+        scaleX = drawnWidth / MAX_GROUP_SIZE;
+        drawnWidth = MAX_GROUP_SIZE;
+      }
+      if (drawnHeight > MAX_GROUP_SIZE) {
+        scaleY = drawnHeight / MAX_GROUP_SIZE;
+        drawnHeight = MAX_GROUP_SIZE;
+      }
+
+      var cacheId = 'groupAt' + this.groupLevel;
+      if (group.smask) {
+        // Using two cache entries is case if masks are used one after another.
+        cacheId +=  '_smask_' + ((this.smaskCounter++) % 2);
+      }
+      var scratchCanvas = CachedCanvases.getCanvas(
+        cacheId, drawnWidth, drawnHeight, true);
+      var groupCtx = scratchCanvas.context;
+
+      // Since we created a new canvas that is just the size of the bounding box
+      // we have to translate the group ctx.
+      groupCtx.scale(1 / scaleX, 1 / scaleY);
+      groupCtx.translate(-offsetX, -offsetY);
+      groupCtx.transform.apply(groupCtx, currentTransform);
+
+      if (group.smask) {
+        // Saving state and cached mask to be used in setGState.
+        this.smaskStack.push({
+          canvas: scratchCanvas.canvas,
+          context: groupCtx,
+          offsetX: offsetX,
+          offsetY: offsetY,
+          scaleX: scaleX,
+          scaleY: scaleY,
+          subtype: group.smask.subtype,
+          backdrop: group.smask.backdrop
+        });
+      } else {
+        // Setup the current ctx so when the group is popped we draw it at the
+        // right location.
+        currentCtx.setTransform(1, 0, 0, 1, 0, 0);
+        currentCtx.translate(offsetX, offsetY);
+        currentCtx.scale(scaleX, scaleY);
+      }
+      // The transparency group inherits all off the current graphics state
+      // except the blend mode, soft mask, and alpha constants.
+      copyCtxState(currentCtx, groupCtx);
+      this.ctx = groupCtx;
+      this.setGState([
+        ['BM', 'Normal'],
+        ['ca', 1],
+        ['CA', 1]
+      ]);
+      this.groupStack.push(currentCtx);
+      this.groupLevel++;
+    },
+
+    endGroup: function CanvasGraphics_endGroup(group) {
+      this.groupLevel--;
+      var groupCtx = this.ctx;
+      this.ctx = this.groupStack.pop();
+      // Turn off image smoothing to avoid sub pixel interpolation which can
+      // look kind of blurry for some pdfs.
+      if (this.ctx.imageSmoothingEnabled !== undefined) {
+        this.ctx.imageSmoothingEnabled = false;
+      } else {
+        this.ctx.mozImageSmoothingEnabled = false;
+      }
+      if (group.smask) {
+        this.tempSMask = this.smaskStack.pop();
+      } else {
+        this.ctx.drawImage(groupCtx.canvas, 0, 0);
+      }
+      this.restore();
+    },
+
+    beginAnnotations: function CanvasGraphics_beginAnnotations() {
+      this.save();
+      this.current = new CanvasExtraState();
+    },
+
+    endAnnotations: function CanvasGraphics_endAnnotations() {
+      this.restore();
+    },
+
+    beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform,
+                                                             matrix) {
+      this.save();
+
+      if (isArray(rect) && 4 === rect.length) {
+        var width = rect[2] - rect[0];
+        var height = rect[3] - rect[1];
+        this.ctx.rect(rect[0], rect[1], width, height);
+        this.clip();
+        this.endPath();
+      }
+
+      this.transform.apply(this, transform);
+      this.transform.apply(this, matrix);
+    },
+
+    endAnnotation: function CanvasGraphics_endAnnotation() {
+      this.restore();
+    },
+
+    paintJpegXObject: function CanvasGraphics_paintJpegXObject(objId, w, h) {
+      var domImage = this.objs.get(objId);
+      if (!domImage) {
+        warn('Dependent image isn\'t ready yet');
+        return;
+      }
+
+      this.save();
+
+      var ctx = this.ctx;
+      // scale the image to the unit square
+      ctx.scale(1 / w, -1 / h);
+
+      ctx.drawImage(domImage, 0, 0, domImage.width, domImage.height,
+                    0, -h, w, h);
+      if (this.imageLayer) {
+        var currentTransform = ctx.mozCurrentTransformInverse;
+        var position = this.getCanvasPosition(0, 0);
+        this.imageLayer.appendImage({
+          objId: objId,
+          left: position[0],
+          top: position[1],
+          width: w / currentTransform[0],
+          height: h / currentTransform[3]
+        });
+      }
+      this.restore();
+    },
+
+    paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) {
+      var ctx = this.ctx;
+      var width = img.width, height = img.height;
+      var fillColor = this.current.fillColor;
+      var isPatternFill = this.current.patternFill;
+
+      var glyph = this.processingType3;
+
+      if (COMPILE_TYPE3_GLYPHS && glyph && glyph.compiled === undefined) {
+        if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) {
+          glyph.compiled =
+            compileType3Glyph({data: img.data, width: width, height: height});
+        } else {
+          glyph.compiled = null;
+        }
+      }
+
+      if (glyph && glyph.compiled) {
+        glyph.compiled(ctx);
+        return;
+      }
+
+      var maskCanvas = CachedCanvases.getCanvas('maskCanvas', width, height);
+      var maskCtx = maskCanvas.context;
+      maskCtx.save();
+
+      putBinaryImageMask(maskCtx, img);
+
+      maskCtx.globalCompositeOperation = 'source-in';
+
+      maskCtx.fillStyle = isPatternFill ?
+                          fillColor.getPattern(maskCtx, this) : fillColor;
+      maskCtx.fillRect(0, 0, width, height);
+
+      maskCtx.restore();
+
+      this.paintInlineImageXObject(maskCanvas.canvas);
+    },
+
+    paintImageMaskXObjectRepeat:
+      function CanvasGraphics_paintImageMaskXObjectRepeat(imgData, scaleX,
+                                                          scaleY, positions) {
+      var width = imgData.width;
+      var height = imgData.height;
+      var fillColor = this.current.fillColor;
+      var isPatternFill = this.current.patternFill;
+
+      var maskCanvas = CachedCanvases.getCanvas('maskCanvas', width, height);
+      var maskCtx = maskCanvas.context;
+      maskCtx.save();
+
+      putBinaryImageMask(maskCtx, imgData);
+
+      maskCtx.globalCompositeOperation = 'source-in';
+
+      maskCtx.fillStyle = isPatternFill ?
+                          fillColor.getPattern(maskCtx, this) : fillColor;
+      maskCtx.fillRect(0, 0, width, height);
+
+      maskCtx.restore();
+
+      var ctx = this.ctx;
+      for (var i = 0, ii = positions.length; i < ii; i += 2) {
+        ctx.save();
+        ctx.transform(scaleX, 0, 0, scaleY, positions[i], positions[i + 1]);
+        ctx.scale(1, -1);
+        ctx.drawImage(maskCanvas.canvas, 0, 0, width, height,
+          0, -1, 1, 1);
+        ctx.restore();
+      }
+    },
+
+    paintImageMaskXObjectGroup:
+      function CanvasGraphics_paintImageMaskXObjectGroup(images) {
+      var ctx = this.ctx;
+
+      var fillColor = this.current.fillColor;
+      var isPatternFill = this.current.patternFill;
+      for (var i = 0, ii = images.length; i < ii; i++) {
+        var image = images[i];
+        var width = image.width, height = image.height;
+
+        var maskCanvas = CachedCanvases.getCanvas('maskCanvas', width, height);
+        var maskCtx = maskCanvas.context;
+        maskCtx.save();
+
+        putBinaryImageMask(maskCtx, image);
+
+        maskCtx.globalCompositeOperation = 'source-in';
+
+        maskCtx.fillStyle = isPatternFill ?
+                            fillColor.getPattern(maskCtx, this) : fillColor;
+        maskCtx.fillRect(0, 0, width, height);
+
+        maskCtx.restore();
+
+        ctx.save();
+        ctx.transform.apply(ctx, image.transform);
+        ctx.scale(1, -1);
+        ctx.drawImage(maskCanvas.canvas, 0, 0, width, height,
+                      0, -1, 1, 1);
+        ctx.restore();
+      }
+    },
+
+    paintImageXObject: function CanvasGraphics_paintImageXObject(objId) {
+      var imgData = this.objs.get(objId);
+      if (!imgData) {
+        warn('Dependent image isn\'t ready yet');
+        return;
+      }
+
+      this.paintInlineImageXObject(imgData);
+    },
+
+    paintImageXObjectRepeat:
+      function CanvasGraphics_paintImageXObjectRepeat(objId, scaleX, scaleY,
+                                                          positions) {
+      var imgData = this.objs.get(objId);
+      if (!imgData) {
+        warn('Dependent image isn\'t ready yet');
+        return;
+      }
+
+      var width = imgData.width;
+      var height = imgData.height;
+      var map = [];
+      for (var i = 0, ii = positions.length; i < ii; i += 2) {
+        map.push({transform: [scaleX, 0, 0, scaleY, positions[i],
+                 positions[i + 1]], x: 0, y: 0, w: width, h: height});
+      }
+      this.paintInlineImageXObjectGroup(imgData, map);
+    },
+
+    paintInlineImageXObject:
+      function CanvasGraphics_paintInlineImageXObject(imgData) {
+      var width = imgData.width;
+      var height = imgData.height;
+      var ctx = this.ctx;
+
+      this.save();
+      // scale the image to the unit square
+      ctx.scale(1 / width, -1 / height);
+
+      var currentTransform = ctx.mozCurrentTransformInverse;
+      var a = currentTransform[0], b = currentTransform[1];
+      var widthScale = Math.max(Math.sqrt(a * a + b * b), 1);
+      var c = currentTransform[2], d = currentTransform[3];
+      var heightScale = Math.max(Math.sqrt(c * c + d * d), 1);
+
+      var imgToPaint, tmpCanvas;
+      // instanceof HTMLElement does not work in jsdom node.js module
+      if (imgData instanceof HTMLElement || !imgData.data) {
+        imgToPaint = imgData;
+      } else {
+        tmpCanvas = CachedCanvases.getCanvas('inlineImage', width, height);
+        var tmpCtx = tmpCanvas.context;
+        putBinaryImageData(tmpCtx, imgData);
+        imgToPaint = tmpCanvas.canvas;
+      }
+
+      var paintWidth = width, paintHeight = height;
+      var tmpCanvasId = 'prescale1';
+      // Vertial or horizontal scaling shall not be more than 2 to not loose the
+      // pixels during drawImage operation, painting on the temporary canvas(es)
+      // that are twice smaller in size
+      while ((widthScale > 2 && paintWidth > 1) ||
+             (heightScale > 2 && paintHeight > 1)) {
+        var newWidth = paintWidth, newHeight = paintHeight;
+        if (widthScale > 2 && paintWidth > 1) {
+          newWidth = Math.ceil(paintWidth / 2);
+          widthScale /= paintWidth / newWidth;
+        }
+        if (heightScale > 2 && paintHeight > 1) {
+          newHeight = Math.ceil(paintHeight / 2);
+          heightScale /= paintHeight / newHeight;
+        }
+        tmpCanvas = CachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight);
+        tmpCtx = tmpCanvas.context;
+        tmpCtx.clearRect(0, 0, newWidth, newHeight);
+        tmpCtx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight,
+                                     0, 0, newWidth, newHeight);
+        imgToPaint = tmpCanvas.canvas;
+        paintWidth = newWidth;
+        paintHeight = newHeight;
+        tmpCanvasId = tmpCanvasId === 'prescale1' ? 'prescale2' : 'prescale1';
+      }
+      ctx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight,
+                                0, -height, width, height);
+
+      if (this.imageLayer) {
+        var position = this.getCanvasPosition(0, -height);
+        this.imageLayer.appendImage({
+          imgData: imgData,
+          left: position[0],
+          top: position[1],
+          width: width / currentTransform[0],
+          height: height / currentTransform[3]
+        });
+      }
+      this.restore();
+    },
+
+    paintInlineImageXObjectGroup:
+      function CanvasGraphics_paintInlineImageXObjectGroup(imgData, map) {
+      var ctx = this.ctx;
+      var w = imgData.width;
+      var h = imgData.height;
+
+      var tmpCanvas = CachedCanvases.getCanvas('inlineImage', w, h);
+      var tmpCtx = tmpCanvas.context;
+      putBinaryImageData(tmpCtx, imgData);
+
+      for (var i = 0, ii = map.length; i < ii; i++) {
+        var entry = map[i];
+        ctx.save();
+        ctx.transform.apply(ctx, entry.transform);
+        ctx.scale(1, -1);
+        ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h,
+                      0, -1, 1, 1);
+        if (this.imageLayer) {
+          var position = this.getCanvasPosition(entry.x, entry.y);
+          this.imageLayer.appendImage({
+            imgData: imgData,
+            left: position[0],
+            top: position[1],
+            width: w,
+            height: h
+          });
+        }
+        ctx.restore();
+      }
+    },
+
+    paintSolidColorImageMask:
+      function CanvasGraphics_paintSolidColorImageMask() {
+        this.ctx.fillRect(0, 0, 1, 1);
+    },
+
+    paintXObject: function CanvasGraphics_paintXObject() {
+      UnsupportedManager.notify(UNSUPPORTED_FEATURES.unknown);
+      warn('Unsupported \'paintXObject\' command.');
+    },
+
+    // Marked content
+
+    markPoint: function CanvasGraphics_markPoint(tag) {
+      // TODO Marked content.
+    },
+    markPointProps: function CanvasGraphics_markPointProps(tag, properties) {
+      // TODO Marked content.
+    },
+    beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) {
+      // TODO Marked content.
+    },
+    beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(
+                                        tag, properties) {
+      // TODO Marked content.
+    },
+    endMarkedContent: function CanvasGraphics_endMarkedContent() {
+      // TODO Marked content.
+    },
+
+    // Compatibility
+
+    beginCompat: function CanvasGraphics_beginCompat() {
+      // TODO ignore undefined operators (should we do that anyway?)
+    },
+    endCompat: function CanvasGraphics_endCompat() {
+      // TODO stop ignoring undefined operators
+    },
+
+    // Helper functions
+
+    consumePath: function CanvasGraphics_consumePath() {
+      var ctx = this.ctx;
+      if (this.pendingClip) {
+        if (this.pendingClip === EO_CLIP) {
+          if (ctx.mozFillRule !== undefined) {
+            ctx.mozFillRule = 'evenodd';
+            ctx.clip();
+            ctx.mozFillRule = 'nonzero';
+          } else {
+            ctx.clip('evenodd');
+          }
+        } else {
+          ctx.clip();
+        }
+        this.pendingClip = null;
+      }
+      ctx.beginPath();
+    },
+    getSinglePixelWidth: function CanvasGraphics_getSinglePixelWidth(scale) {
+      if (this.cachedGetSinglePixelWidth === null) {
+        var inverse = this.ctx.mozCurrentTransformInverse;
+        // max of the current horizontal and vertical scale
+        this.cachedGetSinglePixelWidth = Math.sqrt(Math.max(
+          (inverse[0] * inverse[0] + inverse[1] * inverse[1]),
+          (inverse[2] * inverse[2] + inverse[3] * inverse[3])));
+      }
+      return this.cachedGetSinglePixelWidth;
+    },
+    getCanvasPosition: function CanvasGraphics_getCanvasPosition(x, y) {
+        var transform = this.ctx.mozCurrentTransform;
+        return [
+          transform[0] * x + transform[2] * y + transform[4],
+          transform[1] * x + transform[3] * y + transform[5]
+        ];
+    }
+  };
+
+  for (var op in OPS) {
+    CanvasGraphics.prototype[OPS[op]] = CanvasGraphics.prototype[op];
+  }
+
+  return CanvasGraphics;
+})();
+
+
+var WebGLUtils = (function WebGLUtilsClosure() {
+  function loadShader(gl, code, shaderType) {
+    var shader = gl.createShader(shaderType);
+    gl.shaderSource(shader, code);
+    gl.compileShader(shader);
+    var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
+    if (!compiled) {
+      var errorMsg = gl.getShaderInfoLog(shader);
+      throw new Error('Error during shader compilation: ' + errorMsg);
+    }
+    return shader;
+  }
+  function createVertexShader(gl, code) {
+    return loadShader(gl, code, gl.VERTEX_SHADER);
+  }
+  function createFragmentShader(gl, code) {
+    return loadShader(gl, code, gl.FRAGMENT_SHADER);
+  }
+  function createProgram(gl, shaders) {
+    var program = gl.createProgram();
+    for (var i = 0, ii = shaders.length; i < ii; ++i) {
+      gl.attachShader(program, shaders[i]);
+    }
+    gl.linkProgram(program);
+    var linked = gl.getProgramParameter(program, gl.LINK_STATUS);
+    if (!linked) {
+      var errorMsg = gl.getProgramInfoLog(program);
+      throw new Error('Error during program linking: ' + errorMsg);
+    }
+    return program;
+  }
+  function createTexture(gl, image, textureId) {
+    gl.activeTexture(textureId);
+    var texture = gl.createTexture();
+    gl.bindTexture(gl.TEXTURE_2D, texture);
+
+    // Set the parameters so we can render any size image.
+    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
+    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
+    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
+    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
+
+    // Upload the image into the texture.
+    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
+    return texture;
+  }
+
+  var currentGL, currentCanvas;
+  function generateGL() {
+    if (currentGL) {
+      return;
+    }
+    currentCanvas = document.createElement('canvas');
+    currentGL = currentCanvas.getContext('webgl',
+      { premultipliedalpha: false });
+  }
+
+  var smaskVertexShaderCode = '\
+  attribute vec2 a_position;                                    \
+  attribute vec2 a_texCoord;                                    \
+                                                                \
+  uniform vec2 u_resolution;                                    \
+                                                                \
+  varying vec2 v_texCoord;                                      \
+                                                                \
+  void main() {                                                 \
+    vec2 clipSpace = (a_position / u_resolution) * 2.0 - 1.0;   \
+    gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);          \
+                                                                \
+    v_texCoord = a_texCoord;                                    \
+  }                                                             ';
+
+  var smaskFragmentShaderCode = '\
+  precision mediump float;                                      \
+                                                                \
+  uniform vec4 u_backdrop;                                      \
+  uniform int u_subtype;                                        \
+  uniform sampler2D u_image;                                    \
+  uniform sampler2D u_mask;                                     \
+                                                                \
+  varying vec2 v_texCoord;                                      \
+                                                                \
+  void main() {                                                 \
+    vec4 imageColor = texture2D(u_image, v_texCoord);           \
+    vec4 maskColor = texture2D(u_mask, v_texCoord);             \
+    if (u_backdrop.a > 0.0) {                                   \
+      maskColor.rgb = maskColor.rgb * maskColor.a +             \
+                      u_backdrop.rgb * (1.0 - maskColor.a);     \
+    }                                                           \
+    float lum;                                                  \
+    if (u_subtype == 0) {                                       \
+      lum = maskColor.a;                                        \
+    } else {                                                    \
+      lum = maskColor.r * 0.3 + maskColor.g * 0.59 +            \
+            maskColor.b * 0.11;                                 \
+    }                                                           \
+    imageColor.a *= lum;                                        \
+    imageColor.rgb *= imageColor.a;                             \
+    gl_FragColor = imageColor;                                  \
+  }                                                             ';
+
+  var smaskCache = null;
+
+  function initSmaskGL() {
+    var canvas, gl;
+
+    generateGL();
+    canvas = currentCanvas;
+    currentCanvas = null;
+    gl = currentGL;
+    currentGL = null;
+
+    // setup a GLSL program
+    var vertexShader = createVertexShader(gl, smaskVertexShaderCode);
+    var fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode);
+    var program = createProgram(gl, [vertexShader, fragmentShader]);
+    gl.useProgram(program);
+
+    var cache = {};
+    cache.gl = gl;
+    cache.canvas = canvas;
+    cache.resolutionLocation = gl.getUniformLocation(program, 'u_resolution');
+    cache.positionLocation = gl.getAttribLocation(program, 'a_position');
+    cache.backdropLocation = gl.getUniformLocation(program, 'u_backdrop');
+    cache.subtypeLocation = gl.getUniformLocation(program, 'u_subtype');
+
+    var texCoordLocation = gl.getAttribLocation(program, 'a_texCoord');
+    var texLayerLocation = gl.getUniformLocation(program, 'u_image');
+    var texMaskLocation = gl.getUniformLocation(program, 'u_mask');
+
+    // provide texture coordinates for the rectangle.
+    var texCoordBuffer = gl.createBuffer();
+    gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);
+    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
+      0.0,  0.0,
+      1.0,  0.0,
+      0.0,  1.0,
+      0.0,  1.0,
+      1.0,  0.0,
+      1.0,  1.0]), gl.STATIC_DRAW);
+    gl.enableVertexAttribArray(texCoordLocation);
+    gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0);
+
+    gl.uniform1i(texLayerLocation, 0);
+    gl.uniform1i(texMaskLocation, 1);
+
+    smaskCache = cache;
+  }
+
+  function composeSMask(layer, mask, properties) {
+    var width = layer.width, height = layer.height;
+
+    if (!smaskCache) {
+      initSmaskGL();
+    }
+    var cache = smaskCache,canvas = cache.canvas, gl = cache.gl;
+    canvas.width = width;
+    canvas.height = height;
+    gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
+    gl.uniform2f(cache.resolutionLocation, width, height);
+
+    if (properties.backdrop) {
+      gl.uniform4f(cache.resolutionLocation, properties.backdrop[0],
+                   properties.backdrop[1], properties.backdrop[2], 1);
+    } else {
+      gl.uniform4f(cache.resolutionLocation, 0, 0, 0, 0);
+    }
+    gl.uniform1i(cache.subtypeLocation,
+                 properties.subtype === 'Luminosity' ? 1 : 0);
+
+    // Create a textures
+    var texture = createTexture(gl, layer, gl.TEXTURE0);
+    var maskTexture = createTexture(gl, mask, gl.TEXTURE1);
+
+
+    // Create a buffer and put a single clipspace rectangle in
+    // it (2 triangles)
+    var buffer = gl.createBuffer();
+    gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
+    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
+      0, 0,
+      width, 0,
+      0, height,
+      0, height,
+      width, 0,
+      width, height]), gl.STATIC_DRAW);
+    gl.enableVertexAttribArray(cache.positionLocation);
+    gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0);
+
+    // draw
+    gl.clearColor(0, 0, 0, 0);
+    gl.enable(gl.BLEND);
+    gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
+    gl.clear(gl.COLOR_BUFFER_BIT);
+
+    gl.drawArrays(gl.TRIANGLES, 0, 6);
+
+    gl.flush();
+
+    gl.deleteTexture(texture);
+    gl.deleteTexture(maskTexture);
+    gl.deleteBuffer(buffer);
+
+    return canvas;
+  }
+
+  var figuresVertexShaderCode = '\
+  attribute vec2 a_position;                                    \
+  attribute vec3 a_color;                                       \
+                                                                \
+  uniform vec2 u_resolution;                                    \
+  uniform vec2 u_scale;                                         \
+  uniform vec2 u_offset;                                        \
+                                                                \
+  varying vec4 v_color;                                         \
+                                                                \
+  void main() {                                                 \
+    vec2 position = (a_position + u_offset) * u_scale;          \
+    vec2 clipSpace = (position / u_resolution) * 2.0 - 1.0;     \
+    gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);          \
+                                                                \
+    v_color = vec4(a_color / 255.0, 1.0);                       \
+  }                                                             ';
+
+  var figuresFragmentShaderCode = '\
+  precision mediump float;                                      \
+                                                                \
+  varying vec4 v_color;                                         \
+                                                                \
+  void main() {                                                 \
+    gl_FragColor = v_color;                                     \
+  }                                                             ';
+
+  var figuresCache = null;
+
+  function initFiguresGL() {
+    var canvas, gl;
+
+    generateGL();
+    canvas = currentCanvas;
+    currentCanvas = null;
+    gl = currentGL;
+    currentGL = null;
+
+    // setup a GLSL program
+    var vertexShader = createVertexShader(gl, figuresVertexShaderCode);
+    var fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode);
+    var program = createProgram(gl, [vertexShader, fragmentShader]);
+    gl.useProgram(program);
+
+    var cache = {};
+    cache.gl = gl;
+    cache.canvas = canvas;
+    cache.resolutionLocation = gl.getUniformLocation(program, 'u_resolution');
+    cache.scaleLocation = gl.getUniformLocation(program, 'u_scale');
+    cache.offsetLocation = gl.getUniformLocation(program, 'u_offset');
+    cache.positionLocation = gl.getAttribLocation(program, 'a_position');
+    cache.colorLocation = gl.getAttribLocation(program, 'a_color');
+
+    figuresCache = cache;
+  }
+
+  function drawFigures(width, height, backgroundColor, figures, context) {
+    if (!figuresCache) {
+      initFiguresGL();
+    }
+    var cache = figuresCache, canvas = cache.canvas, gl = cache.gl;
+
+    canvas.width = width;
+    canvas.height = height;
+    gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
+    gl.uniform2f(cache.resolutionLocation, width, height);
+
+    // count triangle points
+    var count = 0;
+    var i, ii, rows;
+    for (i = 0, ii = figures.length; i < ii; i++) {
+      switch (figures[i].type) {
+        case 'lattice':
+          rows = (figures[i].coords.length / figures[i].verticesPerRow) | 0;
+          count += (rows - 1) * (figures[i].verticesPerRow - 1) * 6;
+          break;
+        case 'triangles':
+          count += figures[i].coords.length;
+          break;
+      }
+    }
+    // transfer data
+    var coords = new Float32Array(count * 2);
+    var colors = new Uint8Array(count * 3);
+    var coordsMap = context.coords, colorsMap = context.colors;
+    var pIndex = 0, cIndex = 0;
+    for (i = 0, ii = figures.length; i < ii; i++) {
+      var figure = figures[i], ps = figure.coords, cs = figure.colors;
+      switch (figure.type) {
+        case 'lattice':
+          var cols = figure.verticesPerRow;
+          rows = (ps.length / cols) | 0;
+          for (var row = 1; row < rows; row++) {
+            var offset = row * cols + 1;
+            for (var col = 1; col < cols; col++, offset++) {
+              coords[pIndex] = coordsMap[ps[offset - cols - 1]];
+              coords[pIndex + 1] = coordsMap[ps[offset - cols - 1] + 1];
+              coords[pIndex + 2] = coordsMap[ps[offset - cols]];
+              coords[pIndex + 3] = coordsMap[ps[offset - cols] + 1];
+              coords[pIndex + 4] = coordsMap[ps[offset - 1]];
+              coords[pIndex + 5] = coordsMap[ps[offset - 1] + 1];
+              colors[cIndex] = colorsMap[cs[offset - cols - 1]];
+              colors[cIndex + 1] = colorsMap[cs[offset - cols - 1] + 1];
+              colors[cIndex + 2] = colorsMap[cs[offset - cols - 1] + 2];
+              colors[cIndex + 3] = colorsMap[cs[offset - cols]];
+              colors[cIndex + 4] = colorsMap[cs[offset - cols] + 1];
+              colors[cIndex + 5] = colorsMap[cs[offset - cols] + 2];
+              colors[cIndex + 6] = colorsMap[cs[offset - 1]];
+              colors[cIndex + 7] = colorsMap[cs[offset - 1] + 1];
+              colors[cIndex + 8] = colorsMap[cs[offset - 1] + 2];
+
+              coords[pIndex + 6] = coords[pIndex + 2];
+              coords[pIndex + 7] = coords[pIndex + 3];
+              coords[pIndex + 8] = coords[pIndex + 4];
+              coords[pIndex + 9] = coords[pIndex + 5];
+              coords[pIndex + 10] = coordsMap[ps[offset]];
+              coords[pIndex + 11] = coordsMap[ps[offset] + 1];
+              colors[cIndex + 9] = colors[cIndex + 3];
+              colors[cIndex + 10] = colors[cIndex + 4];
+              colors[cIndex + 11] = colors[cIndex + 5];
+              colors[cIndex + 12] = colors[cIndex + 6];
+              colors[cIndex + 13] = colors[cIndex + 7];
+              colors[cIndex + 14] = colors[cIndex + 8];
+              colors[cIndex + 15] = colorsMap[cs[offset]];
+              colors[cIndex + 16] = colorsMap[cs[offset] + 1];
+              colors[cIndex + 17] = colorsMap[cs[offset] + 2];
+              pIndex += 12;
+              cIndex += 18;
+            }
+          }
+          break;
+        case 'triangles':
+          for (var j = 0, jj = ps.length; j < jj; j++) {
+            coords[pIndex] = coordsMap[ps[j]];
+            coords[pIndex + 1] = coordsMap[ps[j] + 1];
+            colors[cIndex] = colorsMap[cs[j]];
+            colors[cIndex + 1] = colorsMap[cs[j] + 1];
+            colors[cIndex + 2] = colorsMap[cs[j] + 2];
+            pIndex += 2;
+            cIndex += 3;
+          }
+          break;
+      }
+    }
+
+    // draw
+    if (backgroundColor) {
+      gl.clearColor(backgroundColor[0] / 255, backgroundColor[1] / 255,
+                    backgroundColor[2] / 255, 1.0);
+    } else {
+      gl.clearColor(0, 0, 0, 0);
+    }
+    gl.clear(gl.COLOR_BUFFER_BIT);
+
+    var coordsBuffer = gl.createBuffer();
+    gl.bindBuffer(gl.ARRAY_BUFFER, coordsBuffer);
+    gl.bufferData(gl.ARRAY_BUFFER, coords, gl.STATIC_DRAW);
+    gl.enableVertexAttribArray(cache.positionLocation);
+    gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0);
+
+    var colorsBuffer = gl.createBuffer();
+    gl.bindBuffer(gl.ARRAY_BUFFER, colorsBuffer);
+    gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW);
+    gl.enableVertexAttribArray(cache.colorLocation);
+    gl.vertexAttribPointer(cache.colorLocation, 3, gl.UNSIGNED_BYTE, false,
+                           0, 0);
+
+    gl.uniform2f(cache.scaleLocation, context.scaleX, context.scaleY);
+    gl.uniform2f(cache.offsetLocation, context.offsetX, context.offsetY);
+
+    gl.drawArrays(gl.TRIANGLES, 0, count);
+
+    gl.flush();
+
+    gl.deleteBuffer(coordsBuffer);
+    gl.deleteBuffer(colorsBuffer);
+
+    return canvas;
+  }
+
+  function cleanup() {
+    if (smaskCache && smaskCache.canvas) {
+      smaskCache.canvas.width = 0;
+      smaskCache.canvas.height = 0;
+    }
+    if (figuresCache && figuresCache.canvas) {
+      figuresCache.canvas.width = 0;
+      figuresCache.canvas.height = 0;
+    }
+    smaskCache = null;
+    figuresCache = null;
+  }
+
+  return {
+    get isEnabled() {
+      if (PDFJS.disableWebGL) {
+        return false;
+      }
+      var enabled = false;
+      try {
+        generateGL();
+        enabled = !!currentGL;
+      } catch (e) { }
+      return shadow(this, 'isEnabled', enabled);
+    },
+    composeSMask: composeSMask,
+    drawFigures: drawFigures,
+    clear: cleanup
+  };
+})();
+
+
+var ShadingIRs = {};
+
+ShadingIRs.RadialAxial = {
+  fromIR: function RadialAxial_fromIR(raw) {
+    var type = raw[1];
+    var colorStops = raw[2];
+    var p0 = raw[3];
+    var p1 = raw[4];
+    var r0 = raw[5];
+    var r1 = raw[6];
+    return {
+      type: 'Pattern',
+      getPattern: function RadialAxial_getPattern(ctx) {
+        var grad;
+        if (type === 'axial') {
+          grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);
+        } else if (type === 'radial') {
+          grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1);
+        }
+
+        for (var i = 0, ii = colorStops.length; i < ii; ++i) {
+          var c = colorStops[i];
+          grad.addColorStop(c[0], c[1]);
+        }
+        return grad;
+      }
+    };
+  }
+};
+
+var createMeshCanvas = (function createMeshCanvasClosure() {
+  function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {
+    // Very basic Gouraud-shaded triangle rasterization algorithm.
+    var coords = context.coords, colors = context.colors;
+    var bytes = data.data, rowSize = data.width * 4;
+    var tmp;
+    if (coords[p1 + 1] > coords[p2 + 1]) {
+      tmp = p1; p1 = p2; p2 = tmp; tmp = c1; c1 = c2; c2 = tmp;
+    }
+    if (coords[p2 + 1] > coords[p3 + 1]) {
+      tmp = p2; p2 = p3; p3 = tmp; tmp = c2; c2 = c3; c3 = tmp;
+    }
+    if (coords[p1 + 1] > coords[p2 + 1]) {
+      tmp = p1; p1 = p2; p2 = tmp; tmp = c1; c1 = c2; c2 = tmp;
+    }
+    var x1 = (coords[p1] + context.offsetX) * context.scaleX;
+    var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;
+    var x2 = (coords[p2] + context.offsetX) * context.scaleX;
+    var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;
+    var x3 = (coords[p3] + context.offsetX) * context.scaleX;
+    var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;
+    if (y1 >= y3) {
+      return;
+    }
+    var c1r = colors[c1], c1g = colors[c1 + 1], c1b = colors[c1 + 2];
+    var c2r = colors[c2], c2g = colors[c2 + 1], c2b = colors[c2 + 2];
+    var c3r = colors[c3], c3g = colors[c3 + 1], c3b = colors[c3 + 2];
+
+    var minY = Math.round(y1), maxY = Math.round(y3);
+    var xa, car, cag, cab;
+    var xb, cbr, cbg, cbb;
+    var k;
+    for (var y = minY; y <= maxY; y++) {
+      if (y < y2) {
+        k = y < y1 ? 0 : y1 === y2 ? 1 : (y1 - y) / (y1 - y2);
+        xa = x1 - (x1 - x2) * k;
+        car = c1r - (c1r - c2r) * k;
+        cag = c1g - (c1g - c2g) * k;
+        cab = c1b - (c1b - c2b) * k;
+      } else {
+        k = y > y3 ? 1 : y2 === y3 ? 0 : (y2 - y) / (y2 - y3);
+        xa = x2 - (x2 - x3) * k;
+        car = c2r - (c2r - c3r) * k;
+        cag = c2g - (c2g - c3g) * k;
+        cab = c2b - (c2b - c3b) * k;
+      }
+      k = y < y1 ? 0 : y > y3 ? 1 : (y1 - y) / (y1 - y3);
+      xb = x1 - (x1 - x3) * k;
+      cbr = c1r - (c1r - c3r) * k;
+      cbg = c1g - (c1g - c3g) * k;
+      cbb = c1b - (c1b - c3b) * k;
+      var x1_ = Math.round(Math.min(xa, xb));
+      var x2_ = Math.round(Math.max(xa, xb));
+      var j = rowSize * y + x1_ * 4;
+      for (var x = x1_; x <= x2_; x++) {
+        k = (xa - x) / (xa - xb);
+        k = k < 0 ? 0 : k > 1 ? 1 : k;
+        bytes[j++] = (car - (car - cbr) * k) | 0;
+        bytes[j++] = (cag - (cag - cbg) * k) | 0;
+        bytes[j++] = (cab - (cab - cbb) * k) | 0;
+        bytes[j++] = 255;
+      }
+    }
+  }
+
+  function drawFigure(data, figure, context) {
+    var ps = figure.coords;
+    var cs = figure.colors;
+    var i, ii;
+    switch (figure.type) {
+      case 'lattice':
+        var verticesPerRow = figure.verticesPerRow;
+        var rows = Math.floor(ps.length / verticesPerRow) - 1;
+        var cols = verticesPerRow - 1;
+        for (i = 0; i < rows; i++) {
+          var q = i * verticesPerRow;
+          for (var j = 0; j < cols; j++, q++) {
+            drawTriangle(data, context,
+              ps[q], ps[q + 1], ps[q + verticesPerRow],
+              cs[q], cs[q + 1], cs[q + verticesPerRow]);
+            drawTriangle(data, context,
+              ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow],
+              cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]);
+          }
+        }
+        break;
+      case 'triangles':
+        for (i = 0, ii = ps.length; i < ii; i += 3) {
+          drawTriangle(data, context,
+            ps[i], ps[i + 1], ps[i + 2],
+            cs[i], cs[i + 1], cs[i + 2]);
+        }
+        break;
+      default:
+        error('illigal figure');
+        break;
+    }
+  }
+
+  function createMeshCanvas(bounds, combinesScale, coords, colors, figures,
+                            backgroundColor) {
+    // we will increase scale on some weird factor to let antialiasing take
+    // care of "rough" edges
+    var EXPECTED_SCALE = 1.1;
+    // MAX_PATTERN_SIZE is used to avoid OOM situation.
+    var MAX_PATTERN_SIZE = 3000; // 10in @ 300dpi shall be enough
+
+    var offsetX = Math.floor(bounds[0]);
+    var offsetY = Math.floor(bounds[1]);
+    var boundsWidth = Math.ceil(bounds[2]) - offsetX;
+    var boundsHeight = Math.ceil(bounds[3]) - offsetY;
+
+    var width = Math.min(Math.ceil(Math.abs(boundsWidth * combinesScale[0] *
+      EXPECTED_SCALE)), MAX_PATTERN_SIZE);
+    var height = Math.min(Math.ceil(Math.abs(boundsHeight * combinesScale[1] *
+      EXPECTED_SCALE)), MAX_PATTERN_SIZE);
+    var scaleX = boundsWidth / width;
+    var scaleY = boundsHeight / height;
+
+    var context = {
+      coords: coords,
+      colors: colors,
+      offsetX: -offsetX,
+      offsetY: -offsetY,
+      scaleX: 1 / scaleX,
+      scaleY: 1 / scaleY
+    };
+
+    var canvas, tmpCanvas, i, ii;
+    if (WebGLUtils.isEnabled) {
+      canvas = WebGLUtils.drawFigures(width, height, backgroundColor,
+                                      figures, context);
+
+      // https://bugzilla.mozilla.org/show_bug.cgi?id=972126
+      tmpCanvas = CachedCanvases.getCanvas('mesh', width, height, false);
+      tmpCanvas.context.drawImage(canvas, 0, 0);
+      canvas = tmpCanvas.canvas;
+    } else {
+      tmpCanvas = CachedCanvases.getCanvas('mesh', width, height, false);
+      var tmpCtx = tmpCanvas.context;
+
+      var data = tmpCtx.createImageData(width, height);
+      if (backgroundColor) {
+        var bytes = data.data;
+        for (i = 0, ii = bytes.length; i < ii; i += 4) {
+          bytes[i] = backgroundColor[0];
+          bytes[i + 1] = backgroundColor[1];
+          bytes[i + 2] = backgroundColor[2];
+          bytes[i + 3] = 255;
+        }
+      }
+      for (i = 0; i < figures.length; i++) {
+        drawFigure(data, figures[i], context);
+      }
+      tmpCtx.putImageData(data, 0, 0);
+      canvas = tmpCanvas.canvas;
+    }
+
+    return {canvas: canvas, offsetX: offsetX, offsetY: offsetY,
+            scaleX: scaleX, scaleY: scaleY};
+  }
+  return createMeshCanvas;
+})();
+
+ShadingIRs.Mesh = {
+  fromIR: function Mesh_fromIR(raw) {
+    //var type = raw[1];
+    var coords = raw[2];
+    var colors = raw[3];
+    var figures = raw[4];
+    var bounds = raw[5];
+    var matrix = raw[6];
+    //var bbox = raw[7];
+    var background = raw[8];
+    return {
+      type: 'Pattern',
+      getPattern: function Mesh_getPattern(ctx, owner, shadingFill) {
+        var scale;
+        if (shadingFill) {
+          scale = Util.singularValueDecompose2dScale(ctx.mozCurrentTransform);
+        } else {
+          // Obtain scale from matrix and current transformation matrix.
+          scale = Util.singularValueDecompose2dScale(owner.baseTransform);
+          if (matrix) {
+            var matrixScale = Util.singularValueDecompose2dScale(matrix);
+            scale = [scale[0] * matrixScale[0],
+                     scale[1] * matrixScale[1]];
+          }
+        }
+
+
+        // Rasterizing on the main thread since sending/queue large canvases
+        // might cause OOM.
+        var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords,
+          colors, figures, shadingFill ? null : background);
+
+        if (!shadingFill) {
+          ctx.setTransform.apply(ctx, owner.baseTransform);
+          if (matrix) {
+            ctx.transform.apply(ctx, matrix);
+          }
+        }
+
+        ctx.translate(temporaryPatternCanvas.offsetX,
+                      temporaryPatternCanvas.offsetY);
+        ctx.scale(temporaryPatternCanvas.scaleX,
+                  temporaryPatternCanvas.scaleY);
+
+        return ctx.createPattern(temporaryPatternCanvas.canvas, 'no-repeat');
+      }
+    };
+  }
+};
+
+ShadingIRs.Dummy = {
+  fromIR: function Dummy_fromIR() {
+    return {
+      type: 'Pattern',
+      getPattern: function Dummy_fromIR_getPattern() {
+        return 'hotpink';
+      }
+    };
+  }
+};
+
+function getShadingPatternFromIR(raw) {
+  var shadingIR = ShadingIRs[raw[0]];
+  if (!shadingIR) {
+    error('Unknown IR type: ' + raw[0]);
+  }
+  return shadingIR.fromIR(raw);
+}
+
+var TilingPattern = (function TilingPatternClosure() {
+  var PaintType = {
+    COLORED: 1,
+    UNCOLORED: 2
+  };
+
+  var MAX_PATTERN_SIZE = 3000; // 10in @ 300dpi shall be enough
+
+  function TilingPattern(IR, color, ctx, objs, commonObjs, baseTransform) {
+    this.operatorList = IR[2];
+    this.matrix = IR[3] || [1, 0, 0, 1, 0, 0];
+    this.bbox = IR[4];
+    this.xstep = IR[5];
+    this.ystep = IR[6];
+    this.paintType = IR[7];
+    this.tilingType = IR[8];
+    this.color = color;
+    this.objs = objs;
+    this.commonObjs = commonObjs;
+    this.baseTransform = baseTransform;
+    this.type = 'Pattern';
+    this.ctx = ctx;
+  }
+
+  TilingPattern.prototype = {
+    createPatternCanvas: function TilinPattern_createPatternCanvas(owner) {
+      var operatorList = this.operatorList;
+      var bbox = this.bbox;
+      var xstep = this.xstep;
+      var ystep = this.ystep;
+      var paintType = this.paintType;
+      var tilingType = this.tilingType;
+      var color = this.color;
+      var objs = this.objs;
+      var commonObjs = this.commonObjs;
+
+      info('TilingType: ' + tilingType);
+
+      var x0 = bbox[0], y0 = bbox[1], x1 = bbox[2], y1 = bbox[3];
+
+      var topLeft = [x0, y0];
+      // we want the canvas to be as large as the step size
+      var botRight = [x0 + xstep, y0 + ystep];
+
+      var width = botRight[0] - topLeft[0];
+      var height = botRight[1] - topLeft[1];
+
+      // Obtain scale from matrix and current transformation matrix.
+      var matrixScale = Util.singularValueDecompose2dScale(this.matrix);
+      var curMatrixScale = Util.singularValueDecompose2dScale(
+        this.baseTransform);
+      var combinedScale = [matrixScale[0] * curMatrixScale[0],
+        matrixScale[1] * curMatrixScale[1]];
+
+      // MAX_PATTERN_SIZE is used to avoid OOM situation.
+      // Use width and height values that are as close as possible to the end
+      // result when the pattern is used. Too low value makes the pattern look
+      // blurry. Too large value makes it look too crispy.
+      width = Math.min(Math.ceil(Math.abs(width * combinedScale[0])),
+        MAX_PATTERN_SIZE);
+
+      height = Math.min(Math.ceil(Math.abs(height * combinedScale[1])),
+        MAX_PATTERN_SIZE);
+
+      var tmpCanvas = CachedCanvases.getCanvas('pattern', width, height, true);
+      var tmpCtx = tmpCanvas.context;
+      var graphics = new CanvasGraphics(tmpCtx, commonObjs, objs);
+      graphics.groupLevel = owner.groupLevel;
+
+      this.setFillAndStrokeStyleToContext(tmpCtx, paintType, color);
+
+      this.setScale(width, height, xstep, ystep);
+      this.transformToScale(graphics);
+
+      // transform coordinates to pattern space
+      var tmpTranslate = [1, 0, 0, 1, -topLeft[0], -topLeft[1]];
+      graphics.transform.apply(graphics, tmpTranslate);
+
+      this.clipBbox(graphics, bbox, x0, y0, x1, y1);
+
+      graphics.executeOperatorList(operatorList);
+      return tmpCanvas.canvas;
+    },
+
+    setScale: function TilingPattern_setScale(width, height, xstep, ystep) {
+      this.scale = [width / xstep, height / ystep];
+    },
+
+    transformToScale: function TilingPattern_transformToScale(graphics) {
+      var scale = this.scale;
+      var tmpScale = [scale[0], 0, 0, scale[1], 0, 0];
+      graphics.transform.apply(graphics, tmpScale);
+    },
+
+    scaleToContext: function TilingPattern_scaleToContext() {
+      var scale = this.scale;
+      this.ctx.scale(1 / scale[0], 1 / scale[1]);
+    },
+
+    clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) {
+      if (bbox && isArray(bbox) && bbox.length === 4) {
+        var bboxWidth = x1 - x0;
+        var bboxHeight = y1 - y0;
+        graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);
+        graphics.clip();
+        graphics.endPath();
+      }
+    },
+
+    setFillAndStrokeStyleToContext:
+      function setFillAndStrokeStyleToContext(context, paintType, color) {
+        switch (paintType) {
+          case PaintType.COLORED:
+            var ctx = this.ctx;
+            context.fillStyle = ctx.fillStyle;
+            context.strokeStyle = ctx.strokeStyle;
+            break;
+          case PaintType.UNCOLORED:
+            var cssColor = Util.makeCssRgb(color[0], color[1], color[2]);
+            context.fillStyle = cssColor;
+            context.strokeStyle = cssColor;
+            break;
+          default:
+            error('Unsupported paint type: ' + paintType);
+        }
+      },
+
+    getPattern: function TilingPattern_getPattern(ctx, owner) {
+      var temporaryPatternCanvas = this.createPatternCanvas(owner);
+
+      ctx = this.ctx;
+      ctx.setTransform.apply(ctx, this.baseTransform);
+      ctx.transform.apply(ctx, this.matrix);
+      this.scaleToContext();
+
+      return ctx.createPattern(temporaryPatternCanvas, 'repeat');
+    }
+  };
+
+  return TilingPattern;
+})();
+
+
+PDFJS.disableFontFace = false;
+
+var FontLoader = {
+  insertRule: function fontLoaderInsertRule(rule) {
+    var styleElement = document.getElementById('PDFJS_FONT_STYLE_TAG');
+    if (!styleElement) {
+      styleElement = document.createElement('style');
+      styleElement.id = 'PDFJS_FONT_STYLE_TAG';
+      document.documentElement.getElementsByTagName('head')[0].appendChild(
+        styleElement);
+    }
+
+    var styleSheet = styleElement.sheet;
+    styleSheet.insertRule(rule, styleSheet.cssRules.length);
+  },
+
+  clear: function fontLoaderClear() {
+    var styleElement = document.getElementById('PDFJS_FONT_STYLE_TAG');
+    if (styleElement) {
+      styleElement.parentNode.removeChild(styleElement);
+    }
+    this.nativeFontFaces.forEach(function(nativeFontFace) {
+      document.fonts.delete(nativeFontFace);
+    });
+    this.nativeFontFaces.length = 0;
+  },
+  get loadTestFont() {
+    // This is a CFF font with 1 glyph for '.' that fills its entire width and
+    // height.
+    return shadow(this, 'loadTestFont', atob(
+      'T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQ' +
+      'AABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwA' +
+      'AAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbm' +
+      'FtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAA' +
+      'AADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6A' +
+      'ABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAA' +
+      'MQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAA' +
+      'AAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAA' +
+      'AAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQ' +
+      'AAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMA' +
+      'AQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAA' +
+      'EAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAA' +
+      'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAA' +
+      'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
+      'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
+      'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +
+      'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAA' +
+      'AAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgc' +
+      'A/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWF' +
+      'hYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQA' +
+      'AAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAg' +
+      'ABAAAAAAAAAAAD6AAAAAAAAA=='
+    ));
+  },
+
+  get isEvalSupported() {
+    var evalSupport = false;
+    if (PDFJS.isEvalSupported) {
+      try {
+        /* jshint evil: true */
+        new Function('');
+        evalSupport = true;
+      } catch (e) {}
+    }
+    return shadow(this, 'isEvalSupported', evalSupport);
+  },
+
+  loadTestFontId: 0,
+
+  loadingContext: {
+    requests: [],
+    nextRequestId: 0
+  },
+
+  isSyncFontLoadingSupported: (function detectSyncFontLoadingSupport() {
+    if (isWorker) {
+      return false;
+    }
+
+    // User agent string sniffing is bad, but there is no reliable way to tell
+    // if font is fully loaded and ready to be used with canvas.
+    var userAgent = window.navigator.userAgent;
+    var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(userAgent);
+    if (m && m[1] >= 14) {
+      return true;
+    }
+    // TODO other browsers
+    if (userAgent === 'node') {
+      return true;
+    }
+    return false;
+  })(),
+
+  nativeFontFaces: [],
+
+  isFontLoadingAPISupported: (!isWorker && typeof document !== 'undefined' &&
+                              !!document.fonts),
+
+  addNativeFontFace: function fontLoader_addNativeFontFace(nativeFontFace) {
+    this.nativeFontFaces.push(nativeFontFace);
+    document.fonts.add(nativeFontFace);
+  },
+
+  bind: function fontLoaderBind(fonts, callback) {
+    assert(!isWorker, 'bind() shall be called from main thread');
+
+    var rules = [];
+    var fontsToLoad = [];
+    var fontLoadPromises = [];
+    var getNativeFontPromise = function(nativeFontFace) {
+      // Return a promise that is always fulfilled, even when the font fails to
+      // load.
+      return nativeFontFace.loaded.catch(function(e) {
+        warn('Failed to load font "' + nativeFontFace.family + '": ' + e);
+      });
+    };
+    for (var i = 0, ii = fonts.length; i < ii; i++) {
+      var font = fonts[i];
+
+      // Add the font to the DOM only once or skip if the font
+      // is already loaded.
+      if (font.attached || font.loading === false) {
+        continue;
+      }
+      font.attached = true;
+
+      if (this.isFontLoadingAPISupported) {
+        var nativeFontFace = font.createNativeFontFace();
+        if (nativeFontFace) {
+          fontLoadPromises.push(getNativeFontPromise(nativeFontFace));
+        }
+      } else {
+        var rule = font.bindDOM();
+        if (rule) {
+          rules.push(rule);
+          fontsToLoad.push(font);
+        }
+      }
+    }
+
+    var request = FontLoader.queueLoadingCallback(callback);
+    if (this.isFontLoadingAPISupported) {
+      Promise.all(fontLoadPromises).then(function() {
+        request.complete();
+      });
+    } else if (rules.length > 0 && !this.isSyncFontLoadingSupported) {
+      FontLoader.prepareFontLoadEvent(rules, fontsToLoad, request);
+    } else {
+      request.complete();
+    }
+  },
+
+  queueLoadingCallback: function FontLoader_queueLoadingCallback(callback) {
+    function LoadLoader_completeRequest() {
+      assert(!request.end, 'completeRequest() cannot be called twice');
+      request.end = Date.now();
+
+      // sending all completed requests in order how they were queued
+      while (context.requests.length > 0 && context.requests[0].end) {
+        var otherRequest = context.requests.shift();
+        setTimeout(otherRequest.callback, 0);
+      }
+    }
+
+    var context = FontLoader.loadingContext;
+    var requestId = 'pdfjs-font-loading-' + (context.nextRequestId++);
+    var request = {
+      id: requestId,
+      complete: LoadLoader_completeRequest,
+      callback: callback,
+      started: Date.now()
+    };
+    context.requests.push(request);
+    return request;
+  },
+
+  prepareFontLoadEvent: function fontLoaderPrepareFontLoadEvent(rules,
+                                                                fonts,
+                                                                request) {
+      /** Hack begin */
+      // There's currently no event when a font has finished downloading so the
+      // following code is a dirty hack to 'guess' when a font is
+      // ready. It's assumed fonts are loaded in order, so add a known test
+      // font after the desired fonts and then test for the loading of that
+      // test font.
+
+      function int32(data, offset) {
+        return (data.charCodeAt(offset) << 24) |
+               (data.charCodeAt(offset + 1) << 16) |
+               (data.charCodeAt(offset + 2) << 8) |
+               (data.charCodeAt(offset + 3) & 0xff);
+      }
+
+      function spliceString(s, offset, remove, insert) {
+        var chunk1 = s.substr(0, offset);
+        var chunk2 = s.substr(offset + remove);
+        return chunk1 + insert + chunk2;
+      }
+
+      var i, ii;
+
+      var canvas = document.createElement('canvas');
+      canvas.width = 1;
+      canvas.height = 1;
+      var ctx = canvas.getContext('2d');
+
+      var called = 0;
+      function isFontReady(name, callback) {
+        called++;
+        // With setTimeout clamping this gives the font ~100ms to load.
+        if(called > 30) {
+          warn('Load test font never loaded.');
+          callback();
+          return;
+        }
+        ctx.font = '30px ' + name;
+        ctx.fillText('.', 0, 20);
+        var imageData = ctx.getImageData(0, 0, 1, 1);
+        if (imageData.data[3] > 0) {
+          callback();
+          return;
+        }
+        setTimeout(isFontReady.bind(null, name, callback));
+      }
+
+      var loadTestFontId = 'lt' + Date.now() + this.loadTestFontId++;
+      // Chromium seems to cache fonts based on a hash of the actual font data,
+      // so the font must be modified for each load test else it will appear to
+      // be loaded already.
+      // TODO: This could maybe be made faster by avoiding the btoa of the full
+      // font by splitting it in chunks before hand and padding the font id.
+      var data = this.loadTestFont;
+      var COMMENT_OFFSET = 976; // has to be on 4 byte boundary (for checksum)
+      data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length,
+                          loadTestFontId);
+      // CFF checksum is important for IE, adjusting it
+      var CFF_CHECKSUM_OFFSET = 16;
+      var XXXX_VALUE = 0x58585858; // the "comment" filled with 'X'
+      var checksum = int32(data, CFF_CHECKSUM_OFFSET);
+      for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {
+        checksum = (checksum - XXXX_VALUE + int32(loadTestFontId, i)) | 0;
+      }
+      if (i < loadTestFontId.length) { // align to 4 bytes boundary
+        checksum = (checksum - XXXX_VALUE +
+                    int32(loadTestFontId + 'XXX', i)) | 0;
+      }
+      data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, string32(checksum));
+
+      var url = 'url(data:font/opentype;base64,' + btoa(data) + ');';
+      var rule = '@font-face { font-family:"' + loadTestFontId + '";src:' +
+                 url + '}';
+      FontLoader.insertRule(rule);
+
+      var names = [];
+      for (i = 0, ii = fonts.length; i < ii; i++) {
+        names.push(fonts[i].loadedName);
+      }
+      names.push(loadTestFontId);
+
+      var div = document.createElement('div');
+      div.setAttribute('style',
+                       'visibility: hidden;' +
+                       'width: 10px; height: 10px;' +
+                       'position: absolute; top: 0px; left: 0px;');
+      for (i = 0, ii = names.length; i < ii; ++i) {
+        var span = document.createElement('span');
+        span.textContent = 'Hi';
+        span.style.fontFamily = names[i];
+        div.appendChild(span);
+      }
+      document.body.appendChild(div);
+
+      isFontReady(loadTestFontId, function() {
+        document.body.removeChild(div);
+        request.complete();
+      });
+      /** Hack end */
+  }
+};
+
+var FontFaceObject = (function FontFaceObjectClosure() {
+  function FontFaceObject(name, file, properties) {
+    this.compiledGlyphs = {};
+    if (arguments.length === 1) {
+      // importing translated data
+      var data = arguments[0];
+      for (var i in data) {
+        this[i] = data[i];
+      }
+      return;
+    }
+  }
+  FontFaceObject.prototype = {
+    createNativeFontFace: function FontFaceObject_createNativeFontFace() {
+      if (!this.data) {
+        return null;
+      }
+
+      if (PDFJS.disableFontFace) {
+        this.disableFontFace = true;
+        return null;
+      }
+
+      var nativeFontFace = new FontFace(this.loadedName, this.data, {});
+
+      FontLoader.addNativeFontFace(nativeFontFace);
+
+      if (PDFJS.pdfBug && 'FontInspector' in globalScope &&
+          globalScope['FontInspector'].enabled) {
+        globalScope['FontInspector'].fontAdded(this);
+      }
+      return nativeFontFace;
+    },
+
+    bindDOM: function FontFaceObject_bindDOM() {
+      if (!this.data) {
+        return null;
+      }
+
+      if (PDFJS.disableFontFace) {
+        this.disableFontFace = true;
+        return null;
+      }
+
+      var data = bytesToString(new Uint8Array(this.data));
+      var fontName = this.loadedName;
+
+      // Add the font-face rule to the document
+      var url = ('url(data:' + this.mimetype + ';base64,' +
+                 window.btoa(data) + ');');
+      var rule = '@font-face { font-family:"' + fontName + '";src:' + url + '}';
+      FontLoader.insertRule(rule);
+
+      if (PDFJS.pdfBug && 'FontInspector' in globalScope &&
+          globalScope['FontInspector'].enabled) {
+        globalScope['FontInspector'].fontAdded(this, url);
+      }
+
+      return rule;
+    },
+
+    getPathGenerator: function FontLoader_getPathGenerator(objs, character) {
+      if (!(character in this.compiledGlyphs)) {
+        var cmds = objs.get(this.loadedName + '_path_' + character);
+        var current, i, len;
+
+        // If we can, compile cmds into JS for MAXIMUM SPEED
+        if (FontLoader.isEvalSupported) {
+          var args, js = '';
+          for (i = 0, len = cmds.length; i < len; i++) {
+            current = cmds[i];
+
+            if (current.args !== undefined) {
+              args = current.args.join(',');
+            } else {
+              args = '';
+            }
+
+            js += 'c.' + current.cmd + '(' + args + ');\n';
+          }
+          /* jshint -W054 */
+          this.compiledGlyphs[character] = new Function('c', 'size', js);
+        } else {
+          // But fall back on using Function.prototype.apply() if we're
+          // blocked from using eval() for whatever reason (like CSP policies)
+          this.compiledGlyphs[character] = function(c, size) {
+            for (i = 0, len = cmds.length; i < len; i++) {
+              current = cmds[i];
+
+              if (current.cmd === 'scale') {
+                current.args = [size, -size];
+              }
+
+              c[current.cmd].apply(c, current.args);
+            }
+          };
+        }
+      }
+      return this.compiledGlyphs[character];
+    }
+  };
+  return FontFaceObject;
+})();
+
+
+var ANNOT_MIN_SIZE = 10; // px
+
+var AnnotationUtils = (function AnnotationUtilsClosure() {
+  // TODO(mack): This dupes some of the logic in CanvasGraphics.setFont()
+  function setTextStyles(element, item, fontObj) {
+
+    var style = element.style;
+    style.fontSize = item.fontSize + 'px';
+    style.direction = item.fontDirection < 0 ? 'rtl': 'ltr';
+
+    if (!fontObj) {
+      return;
+    }
+
+    style.fontWeight = fontObj.black ?
+      (fontObj.bold ? 'bolder' : 'bold') :
+      (fontObj.bold ? 'bold' : 'normal');
+    style.fontStyle = fontObj.italic ? 'italic' : 'normal';
+
+    var fontName = fontObj.loadedName;
+    var fontFamily = fontName ? '"' + fontName + '", ' : '';
+    // Use a reasonable default font if the font doesn't specify a fallback
+    var fallbackName = fontObj.fallbackName || 'Helvetica, sans-serif';
+    style.fontFamily = fontFamily + fallbackName;
+  }
+
+  function initContainer(item) {
+    var container = document.createElement('section');
+    var cstyle = container.style;
+    var width = item.rect[2] - item.rect[0];
+    var height = item.rect[3] - item.rect[1];
+
+    // Border
+    if (item.borderStyle.width > 0) {
+      // Border width
+      container.style.borderWidth = item.borderStyle.width + 'px';
+      if (item.borderStyle.style !== AnnotationBorderStyleType.UNDERLINE) {
+        // Underline styles only have a bottom border, so we do not need
+        // to adjust for all borders. This yields a similar result as
+        // Adobe Acrobat/Reader.
+        width = width - 2 * item.borderStyle.width;
+        height = height - 2 * item.borderStyle.width;
+      }
+
+      // Horizontal and vertical border radius
+      var horizontalRadius = item.borderStyle.horizontalCornerRadius;
+      var verticalRadius = item.borderStyle.verticalCornerRadius;
+      if (horizontalRadius > 0 || verticalRadius > 0) {
+        var radius = horizontalRadius + 'px / ' + verticalRadius + 'px';
+        CustomStyle.setProp('borderRadius', container, radius);
+      }
+
+      // Border style
+      switch (item.borderStyle.style) {
+        case AnnotationBorderStyleType.SOLID:
+          container.style.borderStyle = 'solid';
+          break;
+
+        case AnnotationBorderStyleType.DASHED:
+          container.style.borderStyle = 'dashed';
+          break;
+
+        case AnnotationBorderStyleType.BEVELED:
+          warn('Unimplemented border style: beveled');
+          break;
+
+        case AnnotationBorderStyleType.INSET:
+          warn('Unimplemented border style: inset');
+          break;
+
+        case AnnotationBorderStyleType.UNDERLINE:
+          container.style.borderBottomStyle = 'solid';
+          break;
+
+        default:
+          break;
+      }
+
+      // Border color
+      if (item.color) {
+        container.style.borderColor =
+          Util.makeCssRgb(item.color[0] | 0,
+                          item.color[1] | 0,
+                          item.color[2] | 0);
+      } else {
+        // Transparent (invisible) border, so do not draw it at all.
+        container.style.borderWidth = 0;
+      }
+    }
+
+    cstyle.width = width + 'px';
+    cstyle.height = height + 'px';
+    return container;
+  }
+
+  function getHtmlElementForTextWidgetAnnotation(item, commonObjs) {
+    var element = document.createElement('div');
+    var width = item.rect[2] - item.rect[0];
+    var height = item.rect[3] - item.rect[1];
+    element.style.width = width + 'px';
+    element.style.height = height + 'px';
+    element.style.display = 'table';
+
+    var content = document.createElement('div');
+    content.textContent = item.fieldValue;
+    var textAlignment = item.textAlignment;
+    content.style.textAlign = ['left', 'center', 'right'][textAlignment];
+    content.style.verticalAlign = 'middle';
+    content.style.display = 'table-cell';
+
+    var fontObj = item.fontRefName ?
+      commonObjs.getData(item.fontRefName) : null;
+    setTextStyles(content, item, fontObj);
+
+    element.appendChild(content);
+
+    return element;
+  }
+
+  function getHtmlElementForTextAnnotation(item) {
+    var rect = item.rect;
+
+    // sanity check because of OOo-generated PDFs
+    if ((rect[3] - rect[1]) < ANNOT_MIN_SIZE) {
+      rect[3] = rect[1] + ANNOT_MIN_SIZE;
+    }
+    if ((rect[2] - rect[0]) < ANNOT_MIN_SIZE) {
+      rect[2] = rect[0] + (rect[3] - rect[1]); // make it square
+    }
+
+    var container = initContainer(item);
+    container.className = 'annotText';
+
+    var image  = document.createElement('img');
+    image.style.height = container.style.height;
+    image.style.width = container.style.width;
+    var iconName = item.name;
+    image.src = PDFJS.imageResourcesPath + 'annotation-' +
+      iconName.toLowerCase() + '.svg';
+    image.alt = '[{{type}} Annotation]';
+    image.dataset.l10nId = 'text_annotation_type';
+    image.dataset.l10nArgs = JSON.stringify({type: iconName});
+
+    var contentWrapper = document.createElement('div');
+    contentWrapper.className = 'annotTextContentWrapper';
+    contentWrapper.style.left = Math.floor(rect[2] - rect[0] + 5) + 'px';
+    contentWrapper.style.top = '-10px';
+
+    var content = document.createElement('div');
+    content.className = 'annotTextContent';
+    content.setAttribute('hidden', true);
+
+    var i, ii;
+    if (item.hasBgColor && item.color) {
+      var color = item.color;
+
+      // Enlighten the color (70%)
+      var BACKGROUND_ENLIGHT = 0.7;
+      var r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0];
+      var g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1];
+      var b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2];
+      content.style.backgroundColor = Util.makeCssRgb(r | 0, g | 0, b | 0);
+    }
+
+    var title = document.createElement('h1');
+    var text = document.createElement('p');
+    title.textContent = item.title;
+
+    if (!item.content && !item.title) {
+      content.setAttribute('hidden', true);
+    } else {
+      var e = document.createElement('span');
+      var lines = item.content.split(/(?:\r\n?|\n)/);
+      for (i = 0, ii = lines.length; i < ii; ++i) {
+        var line = lines[i];
+        e.appendChild(document.createTextNode(line));
+        if (i < (ii - 1)) {
+          e.appendChild(document.createElement('br'));
+        }
+      }
+      text.appendChild(e);
+
+      var pinned = false;
+
+      var showAnnotation = function showAnnotation(pin) {
+        if (pin) {
+          pinned = true;
+        }
+        if (content.hasAttribute('hidden')) {
+          container.style.zIndex += 1;
+          content.removeAttribute('hidden');
+        }
+      };
+
+      var hideAnnotation = function hideAnnotation(unpin) {
+        if (unpin) {
+          pinned = false;
+        }
+        if (!content.hasAttribute('hidden') && !pinned) {
+          container.style.zIndex -= 1;
+          content.setAttribute('hidden', true);
+        }
+      };
+
+      var toggleAnnotation = function toggleAnnotation() {
+        if (pinned) {
+          hideAnnotation(true);
+        } else {
+          showAnnotation(true);
+        }
+      };
+
+      image.addEventListener('click', function image_clickHandler() {
+        toggleAnnotation();
+      }, false);
+      image.addEventListener('mouseover', function image_mouseOverHandler() {
+        showAnnotation();
+      }, false);
+      image.addEventListener('mouseout', function image_mouseOutHandler() {
+        hideAnnotation();
+      }, false);
+
+      content.addEventListener('click', function content_clickHandler() {
+        hideAnnotation(true);
+      }, false);
+    }
+
+    content.appendChild(title);
+    content.appendChild(text);
+    contentWrapper.appendChild(content);
+    container.appendChild(image);
+    container.appendChild(contentWrapper);
+
+    return container;
+  }
+
+  function getHtmlElementForLinkAnnotation(item) {
+    var container = initContainer(item);
+    container.className = 'annotLink';
+
+    var link = document.createElement('a');
+    link.href = link.title = item.url || '';
+
+    if (item.url && isExternalLinkTargetSet()) {
+      link.target = LinkTargetStringMap[PDFJS.externalLinkTarget];
+    }
+
+    container.appendChild(link);
+
+    return container;
+  }
+
+  function getHtmlElement(data, objs) {
+    switch (data.annotationType) {
+      case AnnotationType.WIDGET:
+        return getHtmlElementForTextWidgetAnnotation(data, objs);
+      case AnnotationType.TEXT:
+        return getHtmlElementForTextAnnotation(data);
+      case AnnotationType.LINK:
+        return getHtmlElementForLinkAnnotation(data);
+      default:
+        throw new Error('Unsupported annotationType: ' + data.annotationType);
+    }
+  }
+
+  return {
+    getHtmlElement: getHtmlElement
+  };
+})();
+PDFJS.AnnotationUtils = AnnotationUtils;
+
+
+var SVG_DEFAULTS = {
+  fontStyle: 'normal',
+  fontWeight: 'normal',
+  fillColor: '#000000'
+};
+
+var convertImgDataToPng = (function convertImgDataToPngClosure() {
+  var PNG_HEADER =
+    new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
+
+  var CHUNK_WRAPPER_SIZE = 12;
+
+  var crcTable = new Int32Array(256);
+  for (var i = 0; i < 256; i++) {
+    var c = i;
+    for (var h = 0; h < 8; h++) {
+      if (c & 1) {
+        c = 0xedB88320 ^ ((c >> 1) & 0x7fffffff);
+      } else {
+        c = (c >> 1) & 0x7fffffff;
+      }
+    }
+    crcTable[i] = c;
+  }
+
+  function crc32(data, start, end) {
+    var crc = -1;
+    for (var i = start; i < end; i++) {
+      var a = (crc ^ data[i]) & 0xff;
+      var b = crcTable[a];
+      crc = (crc >>> 8) ^ b;
+    }
+    return crc ^ -1;
+  }
+
+  function writePngChunk(type, body, data, offset) {
+    var p = offset;
+    var len = body.length;
+
+    data[p] = len >> 24 & 0xff;
+    data[p + 1] = len >> 16 & 0xff;
+    data[p + 2] = len >> 8 & 0xff;
+    data[p + 3] = len & 0xff;
+    p += 4;
+
+    data[p] = type.charCodeAt(0) & 0xff;
+    data[p + 1] = type.charCodeAt(1) & 0xff;
+    data[p + 2] = type.charCodeAt(2) & 0xff;
+    data[p + 3] = type.charCodeAt(3) & 0xff;
+    p += 4;
+
+    data.set(body, p);
+    p += body.length;
+
+    var crc = crc32(data, offset + 4, p);
+
+    data[p] = crc >> 24 & 0xff;
+    data[p + 1] = crc >> 16 & 0xff;
+    data[p + 2] = crc >> 8 & 0xff;
+    data[p + 3] = crc & 0xff;
+  }
+
+  function adler32(data, start, end) {
+    var a = 1;
+    var b = 0;
+    for (var i = start; i < end; ++i) {
+      a = (a + (data[i] & 0xff)) % 65521;
+      b = (b + a) % 65521;
+    }
+    return (b << 16) | a;
+  }
+
+  function encode(imgData, kind) {
+    var width = imgData.width;
+    var height = imgData.height;
+    var bitDepth, colorType, lineSize;
+    var bytes = imgData.data;
+
+    switch (kind) {
+      case ImageKind.GRAYSCALE_1BPP:
+        colorType = 0;
+        bitDepth = 1;
+        lineSize = (width + 7) >> 3;
+        break;
+      case ImageKind.RGB_24BPP:
+        colorType = 2;
+        bitDepth = 8;
+        lineSize = width * 3;
+        break;
+      case ImageKind.RGBA_32BPP:
+        colorType = 6;
+        bitDepth = 8;
+        lineSize = width * 4;
+        break;
+      default:
+        throw new Error('invalid format');
+    }
+
+    // prefix every row with predictor 0
+    var literals = new Uint8Array((1 + lineSize) * height);
+    var offsetLiterals = 0, offsetBytes = 0;
+    var y, i;
+    for (y = 0; y < height; ++y) {
+      literals[offsetLiterals++] = 0; // no prediction
+      literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize),
+                   offsetLiterals);
+      offsetBytes += lineSize;
+      offsetLiterals += lineSize;
+    }
+
+    if (kind === ImageKind.GRAYSCALE_1BPP) {
+      // inverting for B/W
+      offsetLiterals = 0;
+      for (y = 0; y < height; y++) {
+        offsetLiterals++; // skipping predictor
+        for (i = 0; i < lineSize; i++) {
+          literals[offsetLiterals++] ^= 0xFF;
+        }
+      }
+    }
+
+    var ihdr = new Uint8Array([
+      width >> 24 & 0xff,
+      width >> 16 & 0xff,
+      width >> 8 & 0xff,
+      width & 0xff,
+      height >> 24 & 0xff,
+      height >> 16 & 0xff,
+      height >> 8 & 0xff,
+      height & 0xff,
+      bitDepth, // bit depth
+      colorType, // color type
+      0x00, // compression method
+      0x00, // filter method
+      0x00 // interlace method
+    ]);
+
+    var len = literals.length;
+    var maxBlockLength = 0xFFFF;
+
+    var deflateBlocks = Math.ceil(len / maxBlockLength);
+    var idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4);
+    var pi = 0;
+    idat[pi++] = 0x78; // compression method and flags
+    idat[pi++] = 0x9c; // flags
+
+    var pos = 0;
+    while (len > maxBlockLength) {
+      // writing non-final DEFLATE blocks type 0 and length of 65535
+      idat[pi++] = 0x00;
+      idat[pi++] = 0xff;
+      idat[pi++] = 0xff;
+      idat[pi++] = 0x00;
+      idat[pi++] = 0x00;
+      idat.set(literals.subarray(pos, pos + maxBlockLength), pi);
+      pi += maxBlockLength;
+      pos += maxBlockLength;
+      len -= maxBlockLength;
+    }
+
+    // writing non-final DEFLATE blocks type 0
+    idat[pi++] = 0x01;
+    idat[pi++] = len & 0xff;
+    idat[pi++] = len >> 8 & 0xff;
+    idat[pi++] = (~len & 0xffff) & 0xff;
+    idat[pi++] = (~len & 0xffff) >> 8 & 0xff;
+    idat.set(literals.subarray(pos), pi);
+    pi += literals.length - pos;
+
+    var adler = adler32(literals, 0, literals.length); // checksum
+    idat[pi++] = adler >> 24 & 0xff;
+    idat[pi++] = adler >> 16 & 0xff;
+    idat[pi++] = adler >> 8 & 0xff;
+    idat[pi++] = adler & 0xff;
+
+    // PNG will consists: header, IHDR+data, IDAT+data, and IEND.
+    var pngLength = PNG_HEADER.length + (CHUNK_WRAPPER_SIZE * 3) +
+                    ihdr.length + idat.length;
+    var data = new Uint8Array(pngLength);
+    var offset = 0;
+    data.set(PNG_HEADER, offset);
+    offset += PNG_HEADER.length;
+    writePngChunk('IHDR', ihdr, data, offset);
+    offset += CHUNK_WRAPPER_SIZE + ihdr.length;
+    writePngChunk('IDATA', idat, data, offset);
+    offset += CHUNK_WRAPPER_SIZE + idat.length;
+    writePngChunk('IEND', new Uint8Array(0), data, offset);
+
+    return PDFJS.createObjectURL(data, 'image/png');
+  }
+
+  return function convertImgDataToPng(imgData) {
+    var kind = (imgData.kind === undefined ?
+                ImageKind.GRAYSCALE_1BPP : imgData.kind);
+    return encode(imgData, kind);
+  };
+})();
+
+var SVGExtraState = (function SVGExtraStateClosure() {
+  function SVGExtraState() {
+    this.fontSizeScale = 1;
+    this.fontWeight = SVG_DEFAULTS.fontWeight;
+    this.fontSize = 0;
+
+    this.textMatrix = IDENTITY_MATRIX;
+    this.fontMatrix = FONT_IDENTITY_MATRIX;
+    this.leading = 0;
+
+    // Current point (in user coordinates)
+    this.x = 0;
+    this.y = 0;
+
+    // Start of text line (in text coordinates)
+    this.lineX = 0;
+    this.lineY = 0;
+
+    // Character and word spacing
+    this.charSpacing = 0;
+    this.wordSpacing = 0;
+    this.textHScale = 1;
+    this.textRise = 0;
+
+    // Default foreground and background colors
+    this.fillColor = SVG_DEFAULTS.fillColor;
+    this.strokeColor = '#000000';
+
+    this.fillAlpha = 1;
+    this.strokeAlpha = 1;
+    this.lineWidth = 1;
+    this.lineJoin = '';
+    this.lineCap = '';
+    this.miterLimit = 0;
+
+    this.dashArray = [];
+    this.dashPhase = 0;
+
+    this.dependencies = [];
+
+    // Clipping
+    this.clipId = '';
+    this.pendingClip = false;
+
+    this.maskId = '';
+  }
+
+  SVGExtraState.prototype = {
+    clone: function SVGExtraState_clone() {
+      return Object.create(this);
+    },
+    setCurrentPoint: function SVGExtraState_setCurrentPoint(x, y) {
+      this.x = x;
+      this.y = y;
+    }
+  };
+  return SVGExtraState;
+})();
+
+var SVGGraphics = (function SVGGraphicsClosure() {
+  function createScratchSVG(width, height) {
+    var NS = 'http://www.w3.org/2000/svg';
+    var svg = document.createElementNS(NS, 'svg:svg');
+    svg.setAttributeNS(null, 'version', '1.1');
+    svg.setAttributeNS(null, 'width', width + 'px');
+    svg.setAttributeNS(null, 'height', height + 'px');
+    svg.setAttributeNS(null, 'viewBox', '0 0 ' + width + ' ' + height);
+    return svg;
+  }
+
+  function opListToTree(opList) {
+    var opTree = [];
+    var tmp = [];
+    var opListLen = opList.length;
+
+    for (var x = 0; x < opListLen; x++) {
+      if (opList[x].fn === 'save') {
+        opTree.push({'fnId': 92, 'fn': 'group', 'items': []});
+        tmp.push(opTree);
+        opTree = opTree[opTree.length - 1].items;
+        continue;
+      }
+
+      if(opList[x].fn === 'restore') {
+        opTree = tmp.pop();
+      } else {
+        opTree.push(opList[x]);
+      }
+    }
+    return opTree;
+  }
+
+  /**
+   * Formats float number.
+   * @param value {number} number to format.
+   * @returns {string}
+   */
+  function pf(value) {
+    if (value === (value | 0)) { // integer number
+      return value.toString();
+    }
+    var s = value.toFixed(10);
+    var i = s.length - 1;
+    if (s[i] !== '0') {
+      return s;
+    }
+    // removing trailing zeros
+    do {
+      i--;
+    } while (s[i] === '0');
+    return s.substr(0, s[i] === '.' ? i : i + 1);
+  }
+
+  /**
+   * Formats transform matrix. The standard rotation, scale and translate
+   * matrices are replaced by their shorter forms, and for identity matrix
+   * returns empty string to save the memory.
+   * @param m {Array} matrix to format.
+   * @returns {string}
+   */
+  function pm(m) {
+    if (m[4] === 0 && m[5] === 0) {
+      if (m[1] === 0 && m[2] === 0) {
+        if (m[0] === 1 && m[3] === 1) {
+          return '';
+        }
+        return 'scale(' + pf(m[0]) + ' ' + pf(m[3]) + ')';
+      }
+      if (m[0] === m[3] && m[1] === -m[2]) {
+        var a = Math.acos(m[0]) * 180 / Math.PI;
+        return 'rotate(' + pf(a) + ')';
+      }
+    } else {
+      if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) {
+        return 'translate(' + pf(m[4]) + ' ' + pf(m[5]) + ')';
+      }
+    }
+    return 'matrix(' + pf(m[0]) + ' ' + pf(m[1]) + ' ' + pf(m[2]) + ' ' +
+      pf(m[3]) + ' ' + pf(m[4]) + ' ' + pf(m[5]) + ')';
+  }
+
+  function SVGGraphics(commonObjs, objs) {
+    this.current = new SVGExtraState();
+    this.transformMatrix = IDENTITY_MATRIX; // Graphics state matrix
+    this.transformStack = [];
+    this.extraStack = [];
+    this.commonObjs = commonObjs;
+    this.objs = objs;
+    this.pendingEOFill = false;
+
+    this.embedFonts = false;
+    this.embeddedFonts = {};
+    this.cssStyle = null;
+  }
+
+  var NS = 'http://www.w3.org/2000/svg';
+  var XML_NS = 'http://www.w3.org/XML/1998/namespace';
+  var XLINK_NS = 'http://www.w3.org/1999/xlink';
+  var LINE_CAP_STYLES = ['butt', 'round', 'square'];
+  var LINE_JOIN_STYLES = ['miter', 'round', 'bevel'];
+  var clipCount = 0;
+  var maskCount = 0;
+
+  SVGGraphics.prototype = {
+    save: function SVGGraphics_save() {
+      this.transformStack.push(this.transformMatrix);
+      var old = this.current;
+      this.extraStack.push(old);
+      this.current = old.clone();
+    },
+
+    restore: function SVGGraphics_restore() {
+      this.transformMatrix = this.transformStack.pop();
+      this.current = this.extraStack.pop();
+
+      this.tgrp = document.createElementNS(NS, 'svg:g');
+      this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix));
+      this.pgrp.appendChild(this.tgrp);
+    },
+
+    group: function SVGGraphics_group(items) {
+      this.save();
+      this.executeOpTree(items);
+      this.restore();
+    },
+
+    loadDependencies: function SVGGraphics_loadDependencies(operatorList) {
+      var fnArray = operatorList.fnArray;
+      var fnArrayLen = fnArray.length;
+      var argsArray = operatorList.argsArray;
+
+      var self = this;
+      for (var i = 0; i < fnArrayLen; i++) {
+        if (OPS.dependency === fnArray[i]) {
+          var deps = argsArray[i];
+          for (var n = 0, nn = deps.length; n < nn; n++) {
+            var obj = deps[n];
+            var common = obj.substring(0, 2) === 'g_';
+            var promise;
+            if (common) {
+              promise = new Promise(function(resolve) {
+                self.commonObjs.get(obj, resolve);
+              });
+            } else {
+              promise = new Promise(function(resolve) {
+                self.objs.get(obj, resolve);
+              });
+            }
+            this.current.dependencies.push(promise);
+          }
+        }
+      }
+      return Promise.all(this.current.dependencies);
+    },
+
+    transform: function SVGGraphics_transform(a, b, c, d, e, f) {
+      var transformMatrix = [a, b, c, d, e, f];
+      this.transformMatrix = PDFJS.Util.transform(this.transformMatrix,
+                                                  transformMatrix);
+
+      this.tgrp = document.createElementNS(NS, 'svg:g');
+      this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix));
+    },
+
+    getSVG: function SVGGraphics_getSVG(operatorList, viewport) {
+      this.svg = createScratchSVG(viewport.width, viewport.height);
+      this.viewport = viewport;
+
+      return this.loadDependencies(operatorList).then(function () {
+        this.transformMatrix = IDENTITY_MATRIX;
+        this.pgrp = document.createElementNS(NS, 'svg:g'); // Parent group
+        this.pgrp.setAttributeNS(null, 'transform', pm(viewport.transform));
+        this.tgrp = document.createElementNS(NS, 'svg:g'); // Transform group
+        this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix));
+        this.defs = document.createElementNS(NS, 'svg:defs');
+        this.pgrp.appendChild(this.defs);
+        this.pgrp.appendChild(this.tgrp);
+        this.svg.appendChild(this.pgrp);
+        var opTree = this.convertOpList(operatorList);
+        this.executeOpTree(opTree);
+        return this.svg;
+      }.bind(this));
+    },
+
+    convertOpList: function SVGGraphics_convertOpList(operatorList) {
+      var argsArray = operatorList.argsArray;
+      var fnArray = operatorList.fnArray;
+      var fnArrayLen  = fnArray.length;
+      var REVOPS = [];
+      var opList = [];
+
+      for (var op in OPS) {
+        REVOPS[OPS[op]] = op;
+      }
+
+      for (var x = 0; x < fnArrayLen; x++) {
+        var fnId = fnArray[x];
+        opList.push({'fnId' : fnId, 'fn': REVOPS[fnId], 'args': argsArray[x]});
+      }
+      return opListToTree(opList);
+    },
+
+    executeOpTree: function SVGGraphics_executeOpTree(opTree) {
+      var opTreeLen = opTree.length;
+      for(var x = 0; x < opTreeLen; x++) {
+        var fn = opTree[x].fn;
+        var fnId = opTree[x].fnId;
+        var args = opTree[x].args;
+
+        switch (fnId | 0) {
+          case OPS.beginText:
+            this.beginText();
+            break;
+          case OPS.setLeading:
+            this.setLeading(args);
+            break;
+          case OPS.setLeadingMoveText:
+            this.setLeadingMoveText(args[0], args[1]);
+            break;
+          case OPS.setFont:
+            this.setFont(args);
+            break;
+          case OPS.showText:
+            this.showText(args[0]);
+            break;
+          case OPS.showSpacedText:
+            this.showText(args[0]);
+            break;
+          case OPS.endText:
+            this.endText();
+            break;
+          case OPS.moveText:
+            this.moveText(args[0], args[1]);
+            break;
+          case OPS.setCharSpacing:
+            this.setCharSpacing(args[0]);
+            break;
+          case OPS.setWordSpacing:
+            this.setWordSpacing(args[0]);
+            break;
+          case OPS.setHScale:
+            this.setHScale(args[0]);
+            break;
+          case OPS.setTextMatrix:
+            this.setTextMatrix(args[0], args[1], args[2],
+                               args[3], args[4], args[5]);
+            break;
+          case OPS.setLineWidth:
+            this.setLineWidth(args[0]);
+            break;
+          case OPS.setLineJoin:
+            this.setLineJoin(args[0]);
+            break;
+          case OPS.setLineCap:
+            this.setLineCap(args[0]);
+            break;
+          case OPS.setMiterLimit:
+            this.setMiterLimit(args[0]);
+            break;
+          case OPS.setFillRGBColor:
+            this.setFillRGBColor(args[0], args[1], args[2]);
+            break;
+          case OPS.setStrokeRGBColor:
+            this.setStrokeRGBColor(args[0], args[1], args[2]);
+            break;
+          case OPS.setDash:
+            this.setDash(args[0], args[1]);
+            break;
+          case OPS.setGState:
+            this.setGState(args[0]);
+            break;
+          case OPS.fill:
+            this.fill();
+            break;
+          case OPS.eoFill:
+            this.eoFill();
+            break;
+          case OPS.stroke:
+            this.stroke();
+            break;
+          case OPS.fillStroke:
+            this.fillStroke();
+            break;
+          case OPS.eoFillStroke:
+            this.eoFillStroke();
+            break;
+          case OPS.clip:
+            this.clip('nonzero');
+            break;
+          case OPS.eoClip:
+            this.clip('evenodd');
+            break;
+          case OPS.paintSolidColorImageMask:
+            this.paintSolidColorImageMask();
+            break;
+          case OPS.paintJpegXObject:
+            this.paintJpegXObject(args[0], args[1], args[2]);
+            break;
+          case OPS.paintImageXObject:
+            this.paintImageXObject(args[0]);
+            break;
+          case OPS.paintInlineImageXObject:
+            this.paintInlineImageXObject(args[0]);
+            break;
+          case OPS.paintImageMaskXObject:
+            this.paintImageMaskXObject(args[0]);
+            break;
+          case OPS.paintFormXObjectBegin:
+            this.paintFormXObjectBegin(args[0], args[1]);
+            break;
+          case OPS.paintFormXObjectEnd:
+            this.paintFormXObjectEnd();
+            break;
+          case OPS.closePath:
+            this.closePath();
+            break;
+          case OPS.closeStroke:
+            this.closeStroke();
+            break;
+          case OPS.closeFillStroke:
+            this.closeFillStroke();
+            break;
+          case OPS.nextLine:
+            this.nextLine();
+            break;
+          case OPS.transform:
+            this.transform(args[0], args[1], args[2], args[3],
+                           args[4], args[5]);
+            break;
+          case OPS.constructPath:
+            this.constructPath(args[0], args[1]);
+            break;
+          case OPS.endPath:
+            this.endPath();
+            break;
+          case 92:
+            this.group(opTree[x].items);
+            break;
+          default:
+            warn('Unimplemented method '+ fn);
+            break;
+        }
+      }
+    },
+
+    setWordSpacing: function SVGGraphics_setWordSpacing(wordSpacing) {
+      this.current.wordSpacing = wordSpacing;
+    },
+
+    setCharSpacing: function SVGGraphics_setCharSpacing(charSpacing) {
+      this.current.charSpacing = charSpacing;
+    },
+
+    nextLine: function SVGGraphics_nextLine() {
+      this.moveText(0, this.current.leading);
+    },
+
+    setTextMatrix: function SVGGraphics_setTextMatrix(a, b, c, d, e, f) {
+      var current = this.current;
+      this.current.textMatrix = this.current.lineMatrix = [a, b, c, d, e, f];
+
+      this.current.x = this.current.lineX = 0;
+      this.current.y = this.current.lineY = 0;
+
+      current.xcoords = [];
+      current.tspan = document.createElementNS(NS, 'svg:tspan');
+      current.tspan.setAttributeNS(null, 'font-family', current.fontFamily);
+      current.tspan.setAttributeNS(null, 'font-size',
+                                   pf(current.fontSize) + 'px');
+      current.tspan.setAttributeNS(null, 'y', pf(-current.y));
+
+      current.txtElement = document.createElementNS(NS, 'svg:text');
+      current.txtElement.appendChild(current.tspan);
+    },
+
+    beginText: function SVGGraphics_beginText() {
+      this.current.x = this.current.lineX = 0;
+      this.current.y = this.current.lineY = 0;
+      this.current.textMatrix = IDENTITY_MATRIX;
+      this.current.lineMatrix = IDENTITY_MATRIX;
+      this.current.tspan = document.createElementNS(NS, 'svg:tspan');
+      this.current.txtElement = document.createElementNS(NS, 'svg:text');
+      this.current.txtgrp = document.createElementNS(NS, 'svg:g');
+      this.current.xcoords = [];
+    },
+
+    moveText: function SVGGraphics_moveText(x, y) {
+      var current = this.current;
+      this.current.x = this.current.lineX += x;
+      this.current.y = this.current.lineY += y;
+
+      current.xcoords = [];
+      current.tspan = document.createElementNS(NS, 'svg:tspan');
+      current.tspan.setAttributeNS(null, 'font-family', current.fontFamily);
+      current.tspan.setAttributeNS(null, 'font-size',
+                                   pf(current.fontSize) + 'px');
+      current.tspan.setAttributeNS(null, 'y', pf(-current.y));
+    },
+
+    showText: function SVGGraphics_showText(glyphs) {
+      var current = this.current;
+      var font = current.font;
+      var fontSize = current.fontSize;
+
+      if (fontSize === 0) {
+        return;
+      }
+
+      var charSpacing = current.charSpacing;
+      var wordSpacing = current.wordSpacing;
+      var fontDirection = current.fontDirection;
+      var textHScale = current.textHScale * fontDirection;
+      var glyphsLength = glyphs.length;
+      var vertical = font.vertical;
+      var widthAdvanceScale = fontSize * current.fontMatrix[0];
+
+      var x = 0, i;
+      for (i = 0; i < glyphsLength; ++i) {
+        var glyph = glyphs[i];
+        if (glyph === null) {
+          // word break
+          x += fontDirection * wordSpacing;
+          continue;
+        } else if (isNum(glyph)) {
+          x += -glyph * fontSize * 0.001;
+          continue;
+        }
+        current.xcoords.push(current.x + x * textHScale);
+
+        var width = glyph.width;
+        var character = glyph.fontChar;
+        var charWidth = width * widthAdvanceScale + charSpacing * fontDirection;
+        x += charWidth;
+
+        current.tspan.textContent += character;
+      }
+      if (vertical) {
+        current.y -= x * textHScale;
+      } else {
+        current.x += x * textHScale;
+      }
+
+      current.tspan.setAttributeNS(null, 'x',
+                                   current.xcoords.map(pf).join(' '));
+      current.tspan.setAttributeNS(null, 'y', pf(-current.y));
+      current.tspan.setAttributeNS(null, 'font-family', current.fontFamily);
+      current.tspan.setAttributeNS(null, 'font-size',
+                                   pf(current.fontSize) + 'px');
+      if (current.fontStyle !== SVG_DEFAULTS.fontStyle) {
+        current.tspan.setAttributeNS(null, 'font-style', current.fontStyle);
+      }
+      if (current.fontWeight !== SVG_DEFAULTS.fontWeight) {
+        current.tspan.setAttributeNS(null, 'font-weight', current.fontWeight);
+      }
+      if (current.fillColor !== SVG_DEFAULTS.fillColor) {
+        current.tspan.setAttributeNS(null, 'fill', current.fillColor);
+      }
+
+      current.txtElement.setAttributeNS(null, 'transform',
+                                        pm(current.textMatrix) +
+                                        ' scale(1, -1)' );
+      current.txtElement.setAttributeNS(XML_NS, 'xml:space', 'preserve');
+      current.txtElement.appendChild(current.tspan);
+      current.txtgrp.appendChild(current.txtElement);
+
+      this.tgrp.appendChild(current.txtElement);
+
+    },
+
+    setLeadingMoveText: function SVGGraphics_setLeadingMoveText(x, y) {
+      this.setLeading(-y);
+      this.moveText(x, y);
+    },
+
+    addFontStyle: function SVGGraphics_addFontStyle(fontObj) {
+      if (!this.cssStyle) {
+        this.cssStyle = document.createElementNS(NS, 'svg:style');
+        this.cssStyle.setAttributeNS(null, 'type', 'text/css');
+        this.defs.appendChild(this.cssStyle);
+      }
+
+      var url = PDFJS.createObjectURL(fontObj.data, fontObj.mimetype);
+      this.cssStyle.textContent +=
+        '@font-face { font-family: "' + fontObj.loadedName + '";' +
+        ' src: url(' + url + '); }\n';
+    },
+
+    setFont: function SVGGraphics_setFont(details) {
+      var current = this.current;
+      var fontObj = this.commonObjs.get(details[0]);
+      var size = details[1];
+      this.current.font = fontObj;
+
+      if (this.embedFonts && fontObj.data &&
+          !this.embeddedFonts[fontObj.loadedName]) {
+        this.addFontStyle(fontObj);
+        this.embeddedFonts[fontObj.loadedName] = fontObj;
+      }
+
+      current.fontMatrix = (fontObj.fontMatrix ?
+                            fontObj.fontMatrix : FONT_IDENTITY_MATRIX);
+
+      var bold = fontObj.black ? (fontObj.bold ? 'bolder' : 'bold') :
+                                 (fontObj.bold ? 'bold' : 'normal');
+      var italic = fontObj.italic ? 'italic' : 'normal';
+
+      if (size < 0) {
+        size = -size;
+        current.fontDirection = -1;
+      } else {
+        current.fontDirection = 1;
+      }
+      current.fontSize = size;
+      current.fontFamily = fontObj.loadedName;
+      current.fontWeight = bold;
+      current.fontStyle = italic;
+
+      current.tspan = document.createElementNS(NS, 'svg:tspan');
+      current.tspan.setAttributeNS(null, 'y', pf(-current.y));
+      current.xcoords = [];
+    },
+
+    endText: function SVGGraphics_endText() {
+      if (this.current.pendingClip) {
+        this.cgrp.appendChild(this.tgrp);
+        this.pgrp.appendChild(this.cgrp);
+      } else {
+        this.pgrp.appendChild(this.tgrp);
+      }
+      this.tgrp = document.createElementNS(NS, 'svg:g');
+      this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix));
+    },
+
+    // Path properties
+    setLineWidth: function SVGGraphics_setLineWidth(width) {
+      this.current.lineWidth = width;
+    },
+    setLineCap: function SVGGraphics_setLineCap(style) {
+      this.current.lineCap = LINE_CAP_STYLES[style];
+    },
+    setLineJoin: function SVGGraphics_setLineJoin(style) {
+      this.current.lineJoin = LINE_JOIN_STYLES[style];
+    },
+    setMiterLimit: function SVGGraphics_setMiterLimit(limit) {
+      this.current.miterLimit = limit;
+    },
+    setStrokeRGBColor: function SVGGraphics_setStrokeRGBColor(r, g, b) {
+      var color = Util.makeCssRgb(r, g, b);
+      this.current.strokeColor = color;
+    },
+    setFillRGBColor: function SVGGraphics_setFillRGBColor(r, g, b) {
+      var color = Util.makeCssRgb(r, g, b);
+      this.current.fillColor = color;
+      this.current.tspan = document.createElementNS(NS, 'svg:tspan');
+      this.current.xcoords = [];
+    },
+    setDash: function SVGGraphics_setDash(dashArray, dashPhase) {
+      this.current.dashArray = dashArray;
+      this.current.dashPhase = dashPhase;
+    },
+
+    constructPath: function SVGGraphics_constructPath(ops, args) {
+      var current = this.current;
+      var x = current.x, y = current.y;
+      current.path = document.createElementNS(NS, 'svg:path');
+      var d = [];
+      var opLength = ops.length;
+
+      for (var i = 0, j = 0; i < opLength; i++) {
+        switch (ops[i] | 0) {
+          case OPS.rectangle:
+            x = args[j++];
+            y = args[j++];
+            var width = args[j++];
+            var height = args[j++];
+            var xw = x + width;
+            var yh = y + height;
+            d.push('M', pf(x), pf(y), 'L', pf(xw) , pf(y), 'L', pf(xw), pf(yh),
+                   'L', pf(x), pf(yh), 'Z');
+            break;
+          case OPS.moveTo:
+            x = args[j++];
+            y = args[j++];
+            d.push('M', pf(x), pf(y));
+            break;
+          case OPS.lineTo:
+            x = args[j++];
+            y = args[j++];
+            d.push('L', pf(x) , pf(y));
+            break;
+          case OPS.curveTo:
+            x = args[j + 4];
+            y = args[j + 5];
+            d.push('C', pf(args[j]), pf(args[j + 1]), pf(args[j + 2]),
+                   pf(args[j + 3]), pf(x), pf(y));
+            j += 6;
+            break;
+          case OPS.curveTo2:
+            x = args[j + 2];
+            y = args[j + 3];
+            d.push('C', pf(x), pf(y), pf(args[j]), pf(args[j + 1]),
+                   pf(args[j + 2]), pf(args[j + 3]));
+            j += 4;
+            break;
+          case OPS.curveTo3:
+            x = args[j + 2];
+            y = args[j + 3];
+            d.push('C', pf(args[j]), pf(args[j + 1]), pf(x), pf(y),
+                   pf(x), pf(y));
+            j += 4;
+            break;
+          case OPS.closePath:
+            d.push('Z');
+            break;
+        }
+      }
+      current.path.setAttributeNS(null, 'd', d.join(' '));
+      current.path.setAttributeNS(null, 'stroke-miterlimit',
+                                  pf(current.miterLimit));
+      current.path.setAttributeNS(null, 'stroke-linecap', current.lineCap);
+      current.path.setAttributeNS(null, 'stroke-linejoin', current.lineJoin);
+      current.path.setAttributeNS(null, 'stroke-width',
+                                  pf(current.lineWidth) + 'px');
+      current.path.setAttributeNS(null, 'stroke-dasharray',
+                                  current.dashArray.map(pf).join(' '));
+      current.path.setAttributeNS(null, 'stroke-dashoffset',
+                                  pf(current.dashPhase) + 'px');
+      current.path.setAttributeNS(null, 'fill', 'none');
+
+      this.tgrp.appendChild(current.path);
+      if (current.pendingClip) {
+        this.cgrp.appendChild(this.tgrp);
+        this.pgrp.appendChild(this.cgrp);
+      } else {
+        this.pgrp.appendChild(this.tgrp);
+      }
+      // Saving a reference in current.element so that it can be addressed
+      // in 'fill' and 'stroke'
+      current.element = current.path;
+      current.setCurrentPoint(x, y);
+    },
+
+    endPath: function SVGGraphics_endPath() {
+      var current = this.current;
+      if (current.pendingClip) {
+        this.cgrp.appendChild(this.tgrp);
+        this.pgrp.appendChild(this.cgrp);
+      } else {
+        this.pgrp.appendChild(this.tgrp);
+      }
+      this.tgrp = document.createElementNS(NS, 'svg:g');
+      this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix));
+    },
+
+    clip: function SVGGraphics_clip(type) {
+      var current = this.current;
+      // Add current path to clipping path
+      current.clipId = 'clippath' + clipCount;
+      clipCount++;
+      this.clippath = document.createElementNS(NS, 'svg:clipPath');
+      this.clippath.setAttributeNS(null, 'id', current.clipId);
+      var clipElement = current.element.cloneNode();
+      if (type === 'evenodd') {
+        clipElement.setAttributeNS(null, 'clip-rule', 'evenodd');
+      } else {
+        clipElement.setAttributeNS(null, 'clip-rule', 'nonzero');
+      }
+      this.clippath.setAttributeNS(null, 'transform', pm(this.transformMatrix));
+      this.clippath.appendChild(clipElement);
+      this.defs.appendChild(this.clippath);
+
+      // Create a new group with that attribute
+      current.pendingClip = true;
+      this.cgrp = document.createElementNS(NS, 'svg:g');
+      this.cgrp.setAttributeNS(null, 'clip-path',
+                               'url(#' + current.clipId + ')');
+      this.pgrp.appendChild(this.cgrp);
+    },
+
+    closePath: function SVGGraphics_closePath() {
+      var current = this.current;
+      var d = current.path.getAttributeNS(null, 'd');
+      d += 'Z';
+      current.path.setAttributeNS(null, 'd', d);
+    },
+
+    setLeading: function SVGGraphics_setLeading(leading) {
+      this.current.leading = -leading;
+    },
+
+    setTextRise: function SVGGraphics_setTextRise(textRise) {
+      this.current.textRise = textRise;
+    },
+
+    setHScale: function SVGGraphics_setHScale(scale) {
+      this.current.textHScale = scale / 100;
+    },
+
+    setGState: function SVGGraphics_setGState(states) {
+      for (var i = 0, ii = states.length; i < ii; i++) {
+        var state = states[i];
+        var key = state[0];
+        var value = state[1];
+
+        switch (key) {
+          case 'LW':
+            this.setLineWidth(value);
+            break;
+          case 'LC':
+            this.setLineCap(value);
+            break;
+          case 'LJ':
+            this.setLineJoin(value);
+            break;
+          case 'ML':
+            this.setMiterLimit(value);
+            break;
+          case 'D':
+            this.setDash(value[0], value[1]);
+            break;
+          case 'RI':
+            break;
+          case 'FL':
+            break;
+          case 'Font':
+            this.setFont(value);
+            break;
+          case 'CA':
+            break;
+          case 'ca':
+            break;
+          case 'BM':
+            break;
+          case 'SMask':
+            break;
+        }
+      }
+    },
+
+    fill: function SVGGraphics_fill() {
+      var current = this.current;
+      current.element.setAttributeNS(null, 'fill', current.fillColor);
+    },
+
+    stroke: function SVGGraphics_stroke() {
+      var current = this.current;
+      current.element.setAttributeNS(null, 'stroke', current.strokeColor);
+      current.element.setAttributeNS(null, 'fill', 'none');
+    },
+
+    eoFill: function SVGGraphics_eoFill() {
+      var current = this.current;
+      current.element.setAttributeNS(null, 'fill', current.fillColor);
+      current.element.setAttributeNS(null, 'fill-rule', 'evenodd');
+    },
+
+    fillStroke: function SVGGraphics_fillStroke() {
+      // Order is important since stroke wants fill to be none.
+      // First stroke, then if fill needed, it will be overwritten.
+      this.stroke();
+      this.fill();
+    },
+
+    eoFillStroke: function SVGGraphics_eoFillStroke() {
+      this.current.element.setAttributeNS(null, 'fill-rule', 'evenodd');
+      this.fillStroke();
+    },
+
+    closeStroke: function SVGGraphics_closeStroke() {
+      this.closePath();
+      this.stroke();
+    },
+
+    closeFillStroke: function SVGGraphics_closeFillStroke() {
+      this.closePath();
+      this.fillStroke();
+    },
+
+    paintSolidColorImageMask:
+        function SVGGraphics_paintSolidColorImageMask() {
+      var current = this.current;
+      var rect = document.createElementNS(NS, 'svg:rect');
+      rect.setAttributeNS(null, 'x', '0');
+      rect.setAttributeNS(null, 'y', '0');
+      rect.setAttributeNS(null, 'width', '1px');
+      rect.setAttributeNS(null, 'height', '1px');
+      rect.setAttributeNS(null, 'fill', current.fillColor);
+      this.tgrp.appendChild(rect);
+    },
+
+    paintJpegXObject: function SVGGraphics_paintJpegXObject(objId, w, h) {
+      var current = this.current;
+      var imgObj = this.objs.get(objId);
+      var imgEl = document.createElementNS(NS, 'svg:image');
+      imgEl.setAttributeNS(XLINK_NS, 'xlink:href', imgObj.src);
+      imgEl.setAttributeNS(null, 'width', imgObj.width + 'px');
+      imgEl.setAttributeNS(null, 'height', imgObj.height + 'px');
+      imgEl.setAttributeNS(null, 'x', '0');
+      imgEl.setAttributeNS(null, 'y', pf(-h));
+      imgEl.setAttributeNS(null, 'transform',
+                           'scale(' + pf(1 / w) + ' ' + pf(-1 / h) + ')');
+
+      this.tgrp.appendChild(imgEl);
+      if (current.pendingClip) {
+        this.cgrp.appendChild(this.tgrp);
+        this.pgrp.appendChild(this.cgrp);
+      } else {
+        this.pgrp.appendChild(this.tgrp);
+      }
+    },
+
+    paintImageXObject: function SVGGraphics_paintImageXObject(objId) {
+      var imgData = this.objs.get(objId);
+      if (!imgData) {
+        warn('Dependent image isn\'t ready yet');
+        return;
+      }
+      this.paintInlineImageXObject(imgData);
+    },
+
+    paintInlineImageXObject:
+        function SVGGraphics_paintInlineImageXObject(imgData, mask) {
+      var current = this.current;
+      var width = imgData.width;
+      var height = imgData.height;
+
+      var imgSrc = convertImgDataToPng(imgData);
+      var cliprect = document.createElementNS(NS, 'svg:rect');
+      cliprect.setAttributeNS(null, 'x', '0');
+      cliprect.setAttributeNS(null, 'y', '0');
+      cliprect.setAttributeNS(null, 'width', pf(width));
+      cliprect.setAttributeNS(null, 'height', pf(height));
+      current.element = cliprect;
+      this.clip('nonzero');
+      var imgEl = document.createElementNS(NS, 'svg:image');
+      imgEl.setAttributeNS(XLINK_NS, 'xlink:href', imgSrc);
+      imgEl.setAttributeNS(null, 'x', '0');
+      imgEl.setAttributeNS(null, 'y', pf(-height));
+      imgEl.setAttributeNS(null, 'width', pf(width) + 'px');
+      imgEl.setAttributeNS(null, 'height', pf(height) + 'px');
+      imgEl.setAttributeNS(null, 'transform',
+                           'scale(' + pf(1 / width) + ' ' +
+                           pf(-1 / height) + ')');
+      if (mask) {
+        mask.appendChild(imgEl);
+      } else {
+        this.tgrp.appendChild(imgEl);
+      }
+      if (current.pendingClip) {
+        this.cgrp.appendChild(this.tgrp);
+        this.pgrp.appendChild(this.cgrp);
+      } else {
+        this.pgrp.appendChild(this.tgrp);
+      }
+    },
+
+    paintImageMaskXObject:
+        function SVGGraphics_paintImageMaskXObject(imgData) {
+      var current = this.current;
+      var width = imgData.width;
+      var height = imgData.height;
+      var fillColor = current.fillColor;
+
+      current.maskId = 'mask' + maskCount++;
+      var mask = document.createElementNS(NS, 'svg:mask');
+      mask.setAttributeNS(null, 'id', current.maskId);
+
+      var rect = document.createElementNS(NS, 'svg:rect');
+      rect.setAttributeNS(null, 'x', '0');
+      rect.setAttributeNS(null, 'y', '0');
+      rect.setAttributeNS(null, 'width', pf(width));
+      rect.setAttributeNS(null, 'height', pf(height));
+      rect.setAttributeNS(null, 'fill', fillColor);
+      rect.setAttributeNS(null, 'mask', 'url(#' + current.maskId +')');
+      this.defs.appendChild(mask);
+      this.tgrp.appendChild(rect);
+
+      this.paintInlineImageXObject(imgData, mask);
+    },
+
+    paintFormXObjectBegin:
+        function SVGGraphics_paintFormXObjectBegin(matrix, bbox) {
+      this.save();
+
+      if (isArray(matrix) && matrix.length === 6) {
+        this.transform(matrix[0], matrix[1], matrix[2],
+                       matrix[3], matrix[4], matrix[5]);
+      }
+
+      if (isArray(bbox) && bbox.length === 4) {
+        var width = bbox[2] - bbox[0];
+        var height = bbox[3] - bbox[1];
+
+        var cliprect = document.createElementNS(NS, 'svg:rect');
+        cliprect.setAttributeNS(null, 'x', bbox[0]);
+        cliprect.setAttributeNS(null, 'y', bbox[1]);
+        cliprect.setAttributeNS(null, 'width', pf(width));
+        cliprect.setAttributeNS(null, 'height', pf(height));
+        this.current.element = cliprect;
+        this.clip('nonzero');
+        this.endPath();
+      }
+    },
+
+    paintFormXObjectEnd:
+        function SVGGraphics_paintFormXObjectEnd() {
+      this.restore();
+    }
+  };
+  return SVGGraphics;
+})();
+
+PDFJS.SVGGraphics = SVGGraphics;
+
+
+}).call((typeof window === 'undefined') ? this : window);
+
+if (!PDFJS.workerSrc && typeof document !== 'undefined') {
+  // workerSrc is not set -- using last script url to define default location
+  PDFJS.workerSrc = (function () {
+    'use strict';
+    var scriptTagContainer = document.body ||
+                             document.getElementsByTagName('head')[0];
+    var pdfjsSrc = scriptTagContainer.lastChild.src;
+    return pdfjsSrc && pdfjsSrc.replace(/\.js$/i, '.worker.js');
+  })();
+}
+
+
diff --git a/public/bower_components/pdfjs-dist/pdf.worker.js b/public/bower_components/pdfjs-dist/pdf.worker.js
new file mode 100644
index 0000000..c0a087e
--- /dev/null
+++ b/public/bower_components/pdfjs-dist/pdf.worker.js
@@ -0,0 +1,39826 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+/* Copyright 2012 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*jshint globalstrict: false */
+/* globals PDFJS */
+
+// Initializing PDFJS global object (if still undefined)
+if (typeof PDFJS === 'undefined') {
+  (typeof window !== 'undefined' ? window : this).PDFJS = {};
+}
+
+PDFJS.version = '1.1.551';
+PDFJS.build = '2a5616c';
+
+(function pdfjsWrapper() {
+  // Use strict in our context only - users might not want it
+  'use strict';
+
+
+
+var globalScope = (typeof window === 'undefined') ? this : window;
+
+var isWorker = (typeof window === 'undefined');
+
+var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
+
+var TextRenderingMode = {
+  FILL: 0,
+  STROKE: 1,
+  FILL_STROKE: 2,
+  INVISIBLE: 3,
+  FILL_ADD_TO_PATH: 4,
+  STROKE_ADD_TO_PATH: 5,
+  FILL_STROKE_ADD_TO_PATH: 6,
+  ADD_TO_PATH: 7,
+  FILL_STROKE_MASK: 3,
+  ADD_TO_PATH_FLAG: 4
+};
+
+var ImageKind = {
+  GRAYSCALE_1BPP: 1,
+  RGB_24BPP: 2,
+  RGBA_32BPP: 3
+};
+
+var AnnotationType = {
+  WIDGET: 1,
+  TEXT: 2,
+  LINK: 3
+};
+
+var AnnotationBorderStyleType = {
+  SOLID: 1,
+  DASHED: 2,
+  BEVELED: 3,
+  INSET: 4,
+  UNDERLINE: 5
+};
+
+var StreamType = {
+  UNKNOWN: 0,
+  FLATE: 1,
+  LZW: 2,
+  DCT: 3,
+  JPX: 4,
+  JBIG: 5,
+  A85: 6,
+  AHX: 7,
+  CCF: 8,
+  RL: 9
+};
+
+var FontType = {
+  UNKNOWN: 0,
+  TYPE1: 1,
+  TYPE1C: 2,
+  CIDFONTTYPE0: 3,
+  CIDFONTTYPE0C: 4,
+  TRUETYPE: 5,
+  CIDFONTTYPE2: 6,
+  TYPE3: 7,
+  OPENTYPE: 8,
+  TYPE0: 9,
+  MMTYPE1: 10
+};
+
+// The global PDFJS object exposes the API
+// In production, it will be declared outside a global wrapper
+// In development, it will be declared here
+if (!globalScope.PDFJS) {
+  globalScope.PDFJS = {};
+}
+
+globalScope.PDFJS.pdfBug = false;
+
+PDFJS.VERBOSITY_LEVELS = {
+  errors: 0,
+  warnings: 1,
+  infos: 5
+};
+
+// All the possible operations for an operator list.
+var OPS = PDFJS.OPS = {
+  // Intentionally start from 1 so it is easy to spot bad operators that will be
+  // 0's.
+  dependency: 1,
+  setLineWidth: 2,
+  setLineCap: 3,
+  setLineJoin: 4,
+  setMiterLimit: 5,
+  setDash: 6,
+  setRenderingIntent: 7,
+  setFlatness: 8,
+  setGState: 9,
+  save: 10,
+  restore: 11,
+  transform: 12,
+  moveTo: 13,
+  lineTo: 14,
+  curveTo: 15,
+  curveTo2: 16,
+  curveTo3: 17,
+  closePath: 18,
+  rectangle: 19,
+  stroke: 20,
+  closeStroke: 21,
+  fill: 22,
+  eoFill: 23,
+  fillStroke: 24,
+  eoFillStroke: 25,
+  closeFillStroke: 26,
+  closeEOFillStroke: 27,
+  endPath: 28,
+  clip: 29,
+  eoClip: 30,
+  beginText: 31,
+  endText: 32,
+  setCharSpacing: 33,
+  setWordSpacing: 34,
+  setHScale: 35,
+  setLeading: 36,
+  setFont: 37,
+  setTextRenderingMode: 38,
+  setTextRise: 39,
+  moveText: 40,
+  setLeadingMoveText: 41,
+  setTextMatrix: 42,
+  nextLine: 43,
+  showText: 44,
+  showSpacedText: 45,
+  nextLineShowText: 46,
+  nextLineSetSpacingShowText: 47,
+  setCharWidth: 48,
+  setCharWidthAndBounds: 49,
+  setStrokeColorSpace: 50,
+  setFillColorSpace: 51,
+  setStrokeColor: 52,
+  setStrokeColorN: 53,
+  setFillColor: 54,
+  setFillColorN: 55,
+  setStrokeGray: 56,
+  setFillGray: 57,
+  setStrokeRGBColor: 58,
+  setFillRGBColor: 59,
+  setStrokeCMYKColor: 60,
+  setFillCMYKColor: 61,
+  shadingFill: 62,
+  beginInlineImage: 63,
+  beginImageData: 64,
+  endInlineImage: 65,
+  paintXObject: 66,
+  markPoint: 67,
+  markPointProps: 68,
+  beginMarkedContent: 69,
+  beginMarkedContentProps: 70,
+  endMarkedContent: 71,
+  beginCompat: 72,
+  endCompat: 73,
+  paintFormXObjectBegin: 74,
+  paintFormXObjectEnd: 75,
+  beginGroup: 76,
+  endGroup: 77,
+  beginAnnotations: 78,
+  endAnnotations: 79,
+  beginAnnotation: 80,
+  endAnnotation: 81,
+  paintJpegXObject: 82,
+  paintImageMaskXObject: 83,
+  paintImageMaskXObjectGroup: 84,
+  paintImageXObject: 85,
+  paintInlineImageXObject: 86,
+  paintInlineImageXObjectGroup: 87,
+  paintImageXObjectRepeat: 88,
+  paintImageMaskXObjectRepeat: 89,
+  paintSolidColorImageMask: 90,
+  constructPath: 91
+};
+
+// A notice for devs. These are good for things that are helpful to devs, such
+// as warning that Workers were disabled, which is important to devs but not
+// end users.
+function info(msg) {
+  if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.infos) {
+    console.log('Info: ' + msg);
+  }
+}
+
+// Non-fatal warnings.
+function warn(msg) {
+  if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.warnings) {
+    console.log('Warning: ' + msg);
+  }
+}
+
+// Deprecated API function -- treated as warnings.
+function deprecated(details) {
+  warn('Deprecated API usage: ' + details);
+}
+
+// Fatal errors that should trigger the fallback UI and halt execution by
+// throwing an exception.
+function error(msg) {
+  if (PDFJS.verbosity >= PDFJS.VERBOSITY_LEVELS.errors) {
+    console.log('Error: ' + msg);
+    console.log(backtrace());
+  }
+  UnsupportedManager.notify(UNSUPPORTED_FEATURES.unknown);
+  throw new Error(msg);
+}
+
+function backtrace() {
+  try {
+    throw new Error();
+  } catch (e) {
+    return e.stack ? e.stack.split('\n').slice(2).join('\n') : '';
+  }
+}
+
+function assert(cond, msg) {
+  if (!cond) {
+    error(msg);
+  }
+}
+
+var UNSUPPORTED_FEATURES = PDFJS.UNSUPPORTED_FEATURES = {
+  unknown: 'unknown',
+  forms: 'forms',
+  javaScript: 'javaScript',
+  smask: 'smask',
+  shadingPattern: 'shadingPattern',
+  font: 'font'
+};
+
+var UnsupportedManager = PDFJS.UnsupportedManager =
+  (function UnsupportedManagerClosure() {
+  var listeners = [];
+  return {
+    listen: function (cb) {
+      listeners.push(cb);
+    },
+    notify: function (featureId) {
+      warn('Unsupported feature "' + featureId + '"');
+      for (var i = 0, ii = listeners.length; i < ii; i++) {
+        listeners[i](featureId);
+      }
+    }
+  };
+})();
+
+// Combines two URLs. The baseUrl shall be absolute URL. If the url is an
+// absolute URL, it will be returned as is.
+function combineUrl(baseUrl, url) {
+  if (!url) {
+    return baseUrl;
+  }
+  if (/^[a-z][a-z0-9+\-.]*:/i.test(url)) {
+    return url;
+  }
+  var i;
+  if (url.charAt(0) === '/') {
+    // absolute path
+    i = baseUrl.indexOf('://');
+    if (url.charAt(1) === '/') {
+      ++i;
+    } else {
+      i = baseUrl.indexOf('/', i + 3);
+    }
+    return baseUrl.substring(0, i) + url;
+  } else {
+    // relative path
+    var pathLength = baseUrl.length;
+    i = baseUrl.lastIndexOf('#');
+    pathLength = i >= 0 ? i : pathLength;
+    i = baseUrl.lastIndexOf('?', pathLength);
+    pathLength = i >= 0 ? i : pathLength;
+    var prefixLength = baseUrl.lastIndexOf('/', pathLength);
+    return baseUrl.substring(0, prefixLength + 1) + url;
+  }
+}
+
+// Validates if URL is safe and allowed, e.g. to avoid XSS.
+function isValidUrl(url, allowRelative) {
+  if (!url) {
+    return false;
+  }
+  // RFC 3986 (http://tools.ietf.org/html/rfc3986#section-3.1)
+  // scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
+  var protocol = /^[a-z][a-z0-9+\-.]*(?=:)/i.exec(url);
+  if (!protocol) {
+    return allowRelative;
+  }
+  protocol = protocol[0].toLowerCase();
+  switch (protocol) {
+    case 'http':
+    case 'https':
+    case 'ftp':
+    case 'mailto':
+    case 'tel':
+      return true;
+    default:
+      return false;
+  }
+}
+PDFJS.isValidUrl = isValidUrl;
+
+function shadow(obj, prop, value) {
+  Object.defineProperty(obj, prop, { value: value,
+                                     enumerable: true,
+                                     configurable: true,
+                                     writable: false });
+  return value;
+}
+PDFJS.shadow = shadow;
+
+var LinkTarget = PDFJS.LinkTarget = {
+  NONE: 0, // Default value.
+  SELF: 1,
+  BLANK: 2,
+  PARENT: 3,
+  TOP: 4,
+};
+var LinkTargetStringMap = [
+  '',
+  '_self',
+  '_blank',
+  '_parent',
+  '_top'
+];
+
+function isExternalLinkTargetSet() {
+  if (PDFJS.openExternalLinksInNewWindow) {
+    warn('PDFJS.openExternalLinksInNewWindow is deprecated, ' +
+         'use PDFJS.externalLinkTarget instead.');
+    if (PDFJS.externalLinkTarget === LinkTarget.NONE) {
+      PDFJS.externalLinkTarget = LinkTarget.BLANK;
+    }
+    // Reset the deprecated parameter, to suppress further warnings.
+    PDFJS.openExternalLinksInNewWindow = false;
+  }
+  switch (PDFJS.externalLinkTarget) {
+    case LinkTarget.NONE:
+      return false;
+    case LinkTarget.SELF:
+    case LinkTarget.BLANK:
+    case LinkTarget.PARENT:
+    case LinkTarget.TOP:
+      return true;
+  }
+  warn('PDFJS.externalLinkTarget is invalid: ' + PDFJS.externalLinkTarget);
+  // Reset the external link target, to suppress further warnings.
+  PDFJS.externalLinkTarget = LinkTarget.NONE;
+  return false;
+}
+PDFJS.isExternalLinkTargetSet = isExternalLinkTargetSet;
+
+var PasswordResponses = PDFJS.PasswordResponses = {
+  NEED_PASSWORD: 1,
+  INCORRECT_PASSWORD: 2
+};
+
+var PasswordException = (function PasswordExceptionClosure() {
+  function PasswordException(msg, code) {
+    this.name = 'PasswordException';
+    this.message = msg;
+    this.code = code;
+  }
+
+  PasswordException.prototype = new Error();
+  PasswordException.constructor = PasswordException;
+
+  return PasswordException;
+})();
+PDFJS.PasswordException = PasswordException;
+
+var UnknownErrorException = (function UnknownErrorExceptionClosure() {
+  function UnknownErrorException(msg, details) {
+    this.name = 'UnknownErrorException';
+    this.message = msg;
+    this.details = details;
+  }
+
+  UnknownErrorException.prototype = new Error();
+  UnknownErrorException.constructor = UnknownErrorException;
+
+  return UnknownErrorException;
+})();
+PDFJS.UnknownErrorException = UnknownErrorException;
+
+var InvalidPDFException = (function InvalidPDFExceptionClosure() {
+  function InvalidPDFException(msg) {
+    this.name = 'InvalidPDFException';
+    this.message = msg;
+  }
+
+  InvalidPDFException.prototype = new Error();
+  InvalidPDFException.constructor = InvalidPDFException;
+
+  return InvalidPDFException;
+})();
+PDFJS.InvalidPDFException = InvalidPDFException;
+
+var MissingPDFException = (function MissingPDFExceptionClosure() {
+  function MissingPDFException(msg) {
+    this.name = 'MissingPDFException';
+    this.message = msg;
+  }
+
+  MissingPDFException.prototype = new Error();
+  MissingPDFException.constructor = MissingPDFException;
+
+  return MissingPDFException;
+})();
+PDFJS.MissingPDFException = MissingPDFException;
+
+var UnexpectedResponseException =
+    (function UnexpectedResponseExceptionClosure() {
+  function UnexpectedResponseException(msg, status) {
+    this.name = 'UnexpectedResponseException';
+    this.message = msg;
+    this.status = status;
+  }
+
+  UnexpectedResponseException.prototype = new Error();
+  UnexpectedResponseException.constructor = UnexpectedResponseException;
+
+  return UnexpectedResponseException;
+})();
+PDFJS.UnexpectedResponseException = UnexpectedResponseException;
+
+var NotImplementedException = (function NotImplementedExceptionClosure() {
+  function NotImplementedException(msg) {
+    this.message = msg;
+  }
+
+  NotImplementedException.prototype = new Error();
+  NotImplementedException.prototype.name = 'NotImplementedException';
+  NotImplementedException.constructor = NotImplementedException;
+
+  return NotImplementedException;
+})();
+
+var MissingDataException = (function MissingDataExceptionClosure() {
+  function MissingDataException(begin, end) {
+    this.begin = begin;
+    this.end = end;
+    this.message = 'Missing data [' + begin + ', ' + end + ')';
+  }
+
+  MissingDataException.prototype = new Error();
+  MissingDataException.prototype.name = 'MissingDataException';
+  MissingDataException.constructor = MissingDataException;
+
+  return MissingDataException;
+})();
+
+var XRefParseException = (function XRefParseExceptionClosure() {
+  function XRefParseException(msg) {
+    this.message = msg;
+  }
+
+  XRefParseException.prototype = new Error();
+  XRefParseException.prototype.name = 'XRefParseException';
+  XRefParseException.constructor = XRefParseException;
+
+  return XRefParseException;
+})();
+
+
+function bytesToString(bytes) {
+  assert(bytes !== null && typeof bytes === 'object' &&
+         bytes.length !== undefined, 'Invalid argument for bytesToString');
+  var length = bytes.length;
+  var MAX_ARGUMENT_COUNT = 8192;
+  if (length < MAX_ARGUMENT_COUNT) {
+    return String.fromCharCode.apply(null, bytes);
+  }
+  var strBuf = [];
+  for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) {
+    var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);
+    var chunk = bytes.subarray(i, chunkEnd);
+    strBuf.push(String.fromCharCode.apply(null, chunk));
+  }
+  return strBuf.join('');
+}
+
+function stringToBytes(str) {
+  assert(typeof str === 'string', 'Invalid argument for stringToBytes');
+  var length = str.length;
+  var bytes = new Uint8Array(length);
+  for (var i = 0; i < length; ++i) {
+    bytes[i] = str.charCodeAt(i) & 0xFF;
+  }
+  return bytes;
+}
+
+function string32(value) {
+  return String.fromCharCode((value >> 24) & 0xff, (value >> 16) & 0xff,
+                             (value >> 8) & 0xff, value & 0xff);
+}
+
+function log2(x) {
+  var n = 1, i = 0;
+  while (x > n) {
+    n <<= 1;
+    i++;
+  }
+  return i;
+}
+
+function readInt8(data, start) {
+  return (data[start] << 24) >> 24;
+}
+
+function readUint16(data, offset) {
+  return (data[offset] << 8) | data[offset + 1];
+}
+
+function readUint32(data, offset) {
+  return ((data[offset] << 24) | (data[offset + 1] << 16) |
+         (data[offset + 2] << 8) | data[offset + 3]) >>> 0;
+}
+
+// Lazy test the endianness of the platform
+// NOTE: This will be 'true' for simulated TypedArrays
+function isLittleEndian() {
+  var buffer8 = new Uint8Array(2);
+  buffer8[0] = 1;
+  var buffer16 = new Uint16Array(buffer8.buffer);
+  return (buffer16[0] === 1);
+}
+
+Object.defineProperty(PDFJS, 'isLittleEndian', {
+  configurable: true,
+  get: function PDFJS_isLittleEndian() {
+    return shadow(PDFJS, 'isLittleEndian', isLittleEndian());
+  }
+});
+
+  // Lazy test if the userAgent support CanvasTypedArrays
+function hasCanvasTypedArrays() {
+  var canvas = document.createElement('canvas');
+  canvas.width = canvas.height = 1;
+  var ctx = canvas.getContext('2d');
+  var imageData = ctx.createImageData(1, 1);
+  return (typeof imageData.data.buffer !== 'undefined');
+}
+
+Object.defineProperty(PDFJS, 'hasCanvasTypedArrays', {
+  configurable: true,
+  get: function PDFJS_hasCanvasTypedArrays() {
+    return shadow(PDFJS, 'hasCanvasTypedArrays', hasCanvasTypedArrays());
+  }
+});
+
+var Uint32ArrayView = (function Uint32ArrayViewClosure() {
+
+  function Uint32ArrayView(buffer, length) {
+    this.buffer = buffer;
+    this.byteLength = buffer.length;
+    this.length = length === undefined ? (this.byteLength >> 2) : length;
+    ensureUint32ArrayViewProps(this.length);
+  }
+  Uint32ArrayView.prototype = Object.create(null);
+
+  var uint32ArrayViewSetters = 0;
+  function createUint32ArrayProp(index) {
+    return {
+      get: function () {
+        var buffer = this.buffer, offset = index << 2;
+        return (buffer[offset] | (buffer[offset + 1] << 8) |
+          (buffer[offset + 2] << 16) | (buffer[offset + 3] << 24)) >>> 0;
+      },
+      set: function (value) {
+        var buffer = this.buffer, offset = index << 2;
+        buffer[offset] = value & 255;
+        buffer[offset + 1] = (value >> 8) & 255;
+        buffer[offset + 2] = (value >> 16) & 255;
+        buffer[offset + 3] = (value >>> 24) & 255;
+      }
+    };
+  }
+
+  function ensureUint32ArrayViewProps(length) {
+    while (uint32ArrayViewSetters < length) {
+      Object.defineProperty(Uint32ArrayView.prototype,
+        uint32ArrayViewSetters,
+        createUint32ArrayProp(uint32ArrayViewSetters));
+      uint32ArrayViewSetters++;
+    }
+  }
+
+  return Uint32ArrayView;
+})();
+
+var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
+
+var Util = PDFJS.Util = (function UtilClosure() {
+  function Util() {}
+
+  var rgbBuf = ['rgb(', 0, ',', 0, ',', 0, ')'];
+
+  // makeCssRgb() can be called thousands of times. Using |rgbBuf| avoids
+  // creating many intermediate strings.
+  Util.makeCssRgb = function Util_makeCssRgb(r, g, b) {
+    rgbBuf[1] = r;
+    rgbBuf[3] = g;
+    rgbBuf[5] = b;
+    return rgbBuf.join('');
+  };
+
+  // Concatenates two transformation matrices together and returns the result.
+  Util.transform = function Util_transform(m1, m2) {
+    return [
+      m1[0] * m2[0] + m1[2] * m2[1],
+      m1[1] * m2[0] + m1[3] * m2[1],
+      m1[0] * m2[2] + m1[2] * m2[3],
+      m1[1] * m2[2] + m1[3] * m2[3],
+      m1[0] * m2[4] + m1[2] * m2[5] + m1[4],
+      m1[1] * m2[4] + m1[3] * m2[5] + m1[5]
+    ];
+  };
+
+  // For 2d affine transforms
+  Util.applyTransform = function Util_applyTransform(p, m) {
+    var xt = p[0] * m[0] + p[1] * m[2] + m[4];
+    var yt = p[0] * m[1] + p[1] * m[3] + m[5];
+    return [xt, yt];
+  };
+
+  Util.applyInverseTransform = function Util_applyInverseTransform(p, m) {
+    var d = m[0] * m[3] - m[1] * m[2];
+    var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
+    var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
+    return [xt, yt];
+  };
+
+  // Applies the transform to the rectangle and finds the minimum axially
+  // aligned bounding box.
+  Util.getAxialAlignedBoundingBox =
+    function Util_getAxialAlignedBoundingBox(r, m) {
+
+    var p1 = Util.applyTransform(r, m);
+    var p2 = Util.applyTransform(r.slice(2, 4), m);
+    var p3 = Util.applyTransform([r[0], r[3]], m);
+    var p4 = Util.applyTransform([r[2], r[1]], m);
+    return [
+      Math.min(p1[0], p2[0], p3[0], p4[0]),
+      Math.min(p1[1], p2[1], p3[1], p4[1]),
+      Math.max(p1[0], p2[0], p3[0], p4[0]),
+      Math.max(p1[1], p2[1], p3[1], p4[1])
+    ];
+  };
+
+  Util.inverseTransform = function Util_inverseTransform(m) {
+    var d = m[0] * m[3] - m[1] * m[2];
+    return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d,
+      (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];
+  };
+
+  // Apply a generic 3d matrix M on a 3-vector v:
+  //   | a b c |   | X |
+  //   | d e f | x | Y |
+  //   | g h i |   | Z |
+  // M is assumed to be serialized as [a,b,c,d,e,f,g,h,i],
+  // with v as [X,Y,Z]
+  Util.apply3dTransform = function Util_apply3dTransform(m, v) {
+    return [
+      m[0] * v[0] + m[1] * v[1] + m[2] * v[2],
+      m[3] * v[0] + m[4] * v[1] + m[5] * v[2],
+      m[6] * v[0] + m[7] * v[1] + m[8] * v[2]
+    ];
+  };
+
+  // This calculation uses Singular Value Decomposition.
+  // The SVD can be represented with formula A = USV. We are interested in the
+  // matrix S here because it represents the scale values.
+  Util.singularValueDecompose2dScale =
+    function Util_singularValueDecompose2dScale(m) {
+
+    var transpose = [m[0], m[2], m[1], m[3]];
+
+    // Multiply matrix m with its transpose.
+    var a = m[0] * transpose[0] + m[1] * transpose[2];
+    var b = m[0] * transpose[1] + m[1] * transpose[3];
+    var c = m[2] * transpose[0] + m[3] * transpose[2];
+    var d = m[2] * transpose[1] + m[3] * transpose[3];
+
+    // Solve the second degree polynomial to get roots.
+    var first = (a + d) / 2;
+    var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;
+    var sx = first + second || 1;
+    var sy = first - second || 1;
+
+    // Scale values are the square roots of the eigenvalues.
+    return [Math.sqrt(sx), Math.sqrt(sy)];
+  };
+
+  // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)
+  // For coordinate systems whose origin lies in the bottom-left, this
+  // means normalization to (BL,TR) ordering. For systems with origin in the
+  // top-left, this means (TL,BR) ordering.
+  Util.normalizeRect = function Util_normalizeRect(rect) {
+    var r = rect.slice(0); // clone rect
+    if (rect[0] > rect[2]) {
+      r[0] = rect[2];
+      r[2] = rect[0];
+    }
+    if (rect[1] > rect[3]) {
+      r[1] = rect[3];
+      r[3] = rect[1];
+    }
+    return r;
+  };
+
+  // Returns a rectangle [x1, y1, x2, y2] corresponding to the
+  // intersection of rect1 and rect2. If no intersection, returns 'false'
+  // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]
+  Util.intersect = function Util_intersect(rect1, rect2) {
+    function compare(a, b) {
+      return a - b;
+    }
+
+    // Order points along the axes
+    var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare),
+        orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare),
+        result = [];
+
+    rect1 = Util.normalizeRect(rect1);
+    rect2 = Util.normalizeRect(rect2);
+
+    // X: first and second points belong to different rectangles?
+    if ((orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) ||
+        (orderedX[0] === rect2[0] && orderedX[1] === rect1[0])) {
+      // Intersection must be between second and third points
+      result[0] = orderedX[1];
+      result[2] = orderedX[2];
+    } else {
+      return false;
+    }
+
+    // Y: first and second points belong to different rectangles?
+    if ((orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) ||
+        (orderedY[0] === rect2[1] && orderedY[1] === rect1[1])) {
+      // Intersection must be between second and third points
+      result[1] = orderedY[1];
+      result[3] = orderedY[2];
+    } else {
+      return false;
+    }
+
+    return result;
+  };
+
+  Util.sign = function Util_sign(num) {
+    return num < 0 ? -1 : 1;
+  };
+
+  Util.appendToArray = function Util_appendToArray(arr1, arr2) {
+    Array.prototype.push.apply(arr1, arr2);
+  };
+
+  Util.prependToArray = function Util_prependToArray(arr1, arr2) {
+    Array.prototype.unshift.apply(arr1, arr2);
+  };
+
+  Util.extendObj = function extendObj(obj1, obj2) {
+    for (var key in obj2) {
+      obj1[key] = obj2[key];
+    }
+  };
+
+  Util.getInheritableProperty = function Util_getInheritableProperty(dict,
+                                                                     name) {
+    while (dict && !dict.has(name)) {
+      dict = dict.get('Parent');
+    }
+    if (!dict) {
+      return null;
+    }
+    return dict.get(name);
+  };
+
+  Util.inherit = function Util_inherit(sub, base, prototype) {
+    sub.prototype = Object.create(base.prototype);
+    sub.prototype.constructor = sub;
+    for (var prop in prototype) {
+      sub.prototype[prop] = prototype[prop];
+    }
+  };
+
+  Util.loadScript = function Util_loadScript(src, callback) {
+    var script = document.createElement('script');
+    var loaded = false;
+    script.setAttribute('src', src);
+    if (callback) {
+      script.onload = function() {
+        if (!loaded) {
+          callback();
+        }
+        loaded = true;
+      };
+    }
+    document.getElementsByTagName('head')[0].appendChild(script);
+  };
+
+  return Util;
+})();
+
+/**
+ * PDF page viewport created based on scale, rotation and offset.
+ * @class
+ * @alias PDFJS.PageViewport
+ */
+var PageViewport = PDFJS.PageViewport = (function PageViewportClosure() {
+  /**
+   * @constructor
+   * @private
+   * @param viewBox {Array} xMin, yMin, xMax and yMax coordinates.
+   * @param scale {number} scale of the viewport.
+   * @param rotation {number} rotations of the viewport in degrees.
+   * @param offsetX {number} offset X
+   * @param offsetY {number} offset Y
+   * @param dontFlip {boolean} if true, axis Y will not be flipped.
+   */
+  function PageViewport(viewBox, scale, rotation, offsetX, offsetY, dontFlip) {
+    this.viewBox = viewBox;
+    this.scale = scale;
+    this.rotation = rotation;
+    this.offsetX = offsetX;
+    this.offsetY = offsetY;
+
+    // creating transform to convert pdf coordinate system to the normal
+    // canvas like coordinates taking in account scale and rotation
+    var centerX = (viewBox[2] + viewBox[0]) / 2;
+    var centerY = (viewBox[3] + viewBox[1]) / 2;
+    var rotateA, rotateB, rotateC, rotateD;
+    rotation = rotation % 360;
+    rotation = rotation < 0 ? rotation + 360 : rotation;
+    switch (rotation) {
+      case 180:
+        rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1;
+        break;
+      case 90:
+        rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0;
+        break;
+      case 270:
+        rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0;
+        break;
+      //case 0:
+      default:
+        rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1;
+        break;
+    }
+
+    if (dontFlip) {
+      rotateC = -rotateC; rotateD = -rotateD;
+    }
+
+    var offsetCanvasX, offsetCanvasY;
+    var width, height;
+    if (rotateA === 0) {
+      offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
+      offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
+      width = Math.abs(viewBox[3] - viewBox[1]) * scale;
+      height = Math.abs(viewBox[2] - viewBox[0]) * scale;
+    } else {
+      offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
+      offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
+      width = Math.abs(viewBox[2] - viewBox[0]) * scale;
+      height = Math.abs(viewBox[3] - viewBox[1]) * scale;
+    }
+    // creating transform for the following operations:
+    // translate(-centerX, -centerY), rotate and flip vertically,
+    // scale, and translate(offsetCanvasX, offsetCanvasY)
+    this.transform = [
+      rotateA * scale,
+      rotateB * scale,
+      rotateC * scale,
+      rotateD * scale,
+      offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY,
+      offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY
+    ];
+
+    this.width = width;
+    this.height = height;
+    this.fontScale = scale;
+  }
+  PageViewport.prototype = /** @lends PDFJS.PageViewport.prototype */ {
+    /**
+     * Clones viewport with additional properties.
+     * @param args {Object} (optional) If specified, may contain the 'scale' or
+     * 'rotation' properties to override the corresponding properties in
+     * the cloned viewport.
+     * @returns {PDFJS.PageViewport} Cloned viewport.
+     */
+    clone: function PageViewPort_clone(args) {
+      args = args || {};
+      var scale = 'scale' in args ? args.scale : this.scale;
+      var rotation = 'rotation' in args ? args.rotation : this.rotation;
+      return new PageViewport(this.viewBox.slice(), scale, rotation,
+                              this.offsetX, this.offsetY, args.dontFlip);
+    },
+    /**
+     * Converts PDF point to the viewport coordinates. For examples, useful for
+     * converting PDF location into canvas pixel coordinates.
+     * @param x {number} X coordinate.
+     * @param y {number} Y coordinate.
+     * @returns {Object} Object that contains 'x' and 'y' properties of the
+     * point in the viewport coordinate space.
+     * @see {@link convertToPdfPoint}
+     * @see {@link convertToViewportRectangle}
+     */
+    convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) {
+      return Util.applyTransform([x, y], this.transform);
+    },
+    /**
+     * Converts PDF rectangle to the viewport coordinates.
+     * @param rect {Array} xMin, yMin, xMax and yMax coordinates.
+     * @returns {Array} Contains corresponding coordinates of the rectangle
+     * in the viewport coordinate space.
+     * @see {@link convertToViewportPoint}
+     */
+    convertToViewportRectangle:
+      function PageViewport_convertToViewportRectangle(rect) {
+      var tl = Util.applyTransform([rect[0], rect[1]], this.transform);
+      var br = Util.applyTransform([rect[2], rect[3]], this.transform);
+      return [tl[0], tl[1], br[0], br[1]];
+    },
+    /**
+     * Converts viewport coordinates to the PDF location. For examples, useful
+     * for converting canvas pixel location into PDF one.
+     * @param x {number} X coordinate.
+     * @param y {number} Y coordinate.
+     * @returns {Object} Object that contains 'x' and 'y' properties of the
+     * point in the PDF coordinate space.
+     * @see {@link convertToViewportPoint}
+     */
+    convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) {
+      return Util.applyInverseTransform([x, y], this.transform);
+    }
+  };
+  return PageViewport;
+})();
+
+var PDFStringTranslateTable = [
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014,
+  0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C,
+  0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160,
+  0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC
+];
+
+function stringToPDFString(str) {
+  var i, n = str.length, strBuf = [];
+  if (str[0] === '\xFE' && str[1] === '\xFF') {
+    // UTF16BE BOM
+    for (i = 2; i < n; i += 2) {
+      strBuf.push(String.fromCharCode(
+        (str.charCodeAt(i) << 8) | str.charCodeAt(i + 1)));
+    }
+  } else {
+    for (i = 0; i < n; ++i) {
+      var code = PDFStringTranslateTable[str.charCodeAt(i)];
+      strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));
+    }
+  }
+  return strBuf.join('');
+}
+
+function stringToUTF8String(str) {
+  return decodeURIComponent(escape(str));
+}
+
+function utf8StringToString(str) {
+  return unescape(encodeURIComponent(str));
+}
+
+function isEmptyObj(obj) {
+  for (var key in obj) {
+    return false;
+  }
+  return true;
+}
+
+function isBool(v) {
+  return typeof v === 'boolean';
+}
+
+function isInt(v) {
+  return typeof v === 'number' && ((v | 0) === v);
+}
+
+function isNum(v) {
+  return typeof v === 'number';
+}
+
+function isString(v) {
+  return typeof v === 'string';
+}
+
+function isName(v) {
+  return v instanceof Name;
+}
+
+function isCmd(v, cmd) {
+  return v instanceof Cmd && (cmd === undefined || v.cmd === cmd);
+}
+
+function isDict(v, type) {
+  if (!(v instanceof Dict)) {
+    return false;
+  }
+  if (!type) {
+    return true;
+  }
+  var dictType = v.get('Type');
+  return isName(dictType) && dictType.name === type;
+}
+
+function isArray(v) {
+  return v instanceof Array;
+}
+
+function isStream(v) {
+  return typeof v === 'object' && v !== null && v.getBytes !== undefined;
+}
+
+function isArrayBuffer(v) {
+  return typeof v === 'object' && v !== null && v.byteLength !== undefined;
+}
+
+function isRef(v) {
+  return v instanceof Ref;
+}
+
+/**
+ * Promise Capability object.
+ *
+ * @typedef {Object} PromiseCapability
+ * @property {Promise} promise - A promise object.
+ * @property {function} resolve - Fullfills the promise.
+ * @property {function} reject - Rejects the promise.
+ */
+
+/**
+ * Creates a promise capability object.
+ * @alias PDFJS.createPromiseCapability
+ *
+ * @return {PromiseCapability} A capability object contains:
+ * - a Promise, resolve and reject methods.
+ */
+function createPromiseCapability() {
+  var capability = {};
+  capability.promise = new Promise(function (resolve, reject) {
+    capability.resolve = resolve;
+    capability.reject = reject;
+  });
+  return capability;
+}
+
+PDFJS.createPromiseCapability = createPromiseCapability;
+
+/**
+ * Polyfill for Promises:
+ * The following promise implementation tries to generally implement the
+ * Promise/A+ spec. Some notable differences from other promise libaries are:
+ * - There currently isn't a seperate deferred and promise object.
+ * - Unhandled rejections eventually show an error if they aren't handled.
+ *
+ * Based off of the work in:
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=810490
+ */
+(function PromiseClosure() {
+  if (globalScope.Promise) {
+    // Promises existing in the DOM/Worker, checking presence of all/resolve
+    if (typeof globalScope.Promise.all !== 'function') {
+      globalScope.Promise.all = function (iterable) {
+        var count = 0, results = [], resolve, reject;
+        var promise = new globalScope.Promise(function (resolve_, reject_) {
+          resolve = resolve_;
+          reject = reject_;
+        });
+        iterable.forEach(function (p, i) {
+          count++;
+          p.then(function (result) {
+            results[i] = result;
+            count--;
+            if (count === 0) {
+              resolve(results);
+            }
+          }, reject);
+        });
+        if (count === 0) {
+          resolve(results);
+        }
+        return promise;
+      };
+    }
+    if (typeof globalScope.Promise.resolve !== 'function') {
+      globalScope.Promise.resolve = function (value) {
+        return new globalScope.Promise(function (resolve) { resolve(value); });
+      };
+    }
+    if (typeof globalScope.Promise.reject !== 'function') {
+      globalScope.Promise.reject = function (reason) {
+        return new globalScope.Promise(function (resolve, reject) {
+          reject(reason);
+        });
+      };
+    }
+    if (typeof globalScope.Promise.prototype.catch !== 'function') {
+      globalScope.Promise.prototype.catch = function (onReject) {
+        return globalScope.Promise.prototype.then(undefined, onReject);
+      };
+    }
+    return;
+  }
+  var STATUS_PENDING = 0;
+  var STATUS_RESOLVED = 1;
+  var STATUS_REJECTED = 2;
+
+  // In an attempt to avoid silent exceptions, unhandled rejections are
+  // tracked and if they aren't handled in a certain amount of time an
+  // error is logged.
+  var REJECTION_TIMEOUT = 500;
+
+  var HandlerManager = {
+    handlers: [],
+    running: false,
+    unhandledRejections: [],
+    pendingRejectionCheck: false,
+
+    scheduleHandlers: function scheduleHandlers(promise) {
+      if (promise._status === STATUS_PENDING) {
+        return;
+      }
+
+      this.handlers = this.handlers.concat(promise._handlers);
+      promise._handlers = [];
+
+      if (this.running) {
+        return;
+      }
+      this.running = true;
+
+      setTimeout(this.runHandlers.bind(this), 0);
+    },
+
+    runHandlers: function runHandlers() {
+      var RUN_TIMEOUT = 1; // ms
+      var timeoutAt = Date.now() + RUN_TIMEOUT;
+      while (this.handlers.length > 0) {
+        var handler = this.handlers.shift();
+
+        var nextStatus = handler.thisPromise._status;
+        var nextValue = handler.thisPromise._value;
+
+        try {
+          if (nextStatus === STATUS_RESOLVED) {
+            if (typeof handler.onResolve === 'function') {
+              nextValue = handler.onResolve(nextValue);
+            }
+          } else if (typeof handler.onReject === 'function') {
+              nextValue = handler.onReject(nextValue);
+              nextStatus = STATUS_RESOLVED;
+
+              if (handler.thisPromise._unhandledRejection) {
+                this.removeUnhandeledRejection(handler.thisPromise);
+              }
+          }
+        } catch (ex) {
+          nextStatus = STATUS_REJECTED;
+          nextValue = ex;
+        }
+
+        handler.nextPromise._updateStatus(nextStatus, nextValue);
+        if (Date.now() >= timeoutAt) {
+          break;
+        }
+      }
+
+      if (this.handlers.length > 0) {
+        setTimeout(this.runHandlers.bind(this), 0);
+        return;
+      }
+
+      this.running = false;
+    },
+
+    addUnhandledRejection: function addUnhandledRejection(promise) {
+      this.unhandledRejections.push({
+        promise: promise,
+        time: Date.now()
+      });
+      this.scheduleRejectionCheck();
+    },
+
+    removeUnhandeledRejection: function removeUnhandeledRejection(promise) {
+      promise._unhandledRejection = false;
+      for (var i = 0; i < this.unhandledRejections.length; i++) {
+        if (this.unhandledRejections[i].promise === promise) {
+          this.unhandledRejections.splice(i);
+          i--;
+        }
+      }
+    },
+
+    scheduleRejectionCheck: function scheduleRejectionCheck() {
+      if (this.pendingRejectionCheck) {
+        return;
+      }
+      this.pendingRejectionCheck = true;
+      setTimeout(function rejectionCheck() {
+        this.pendingRejectionCheck = false;
+        var now = Date.now();
+        for (var i = 0; i < this.unhandledRejections.length; i++) {
+          if (now - this.unhandledRejections[i].time > REJECTION_TIMEOUT) {
+            var unhandled = this.unhandledRejections[i].promise._value;
+            var msg = 'Unhandled rejection: ' + unhandled;
+            if (unhandled.stack) {
+              msg += '\n' + unhandled.stack;
+            }
+            warn(msg);
+            this.unhandledRejections.splice(i);
+            i--;
+          }
+        }
+        if (this.unhandledRejections.length) {
+          this.scheduleRejectionCheck();
+        }
+      }.bind(this), REJECTION_TIMEOUT);
+    }
+  };
+
+  function Promise(resolver) {
+    this._status = STATUS_PENDING;
+    this._handlers = [];
+    try {
+      resolver.call(this, this._resolve.bind(this), this._reject.bind(this));
+    } catch (e) {
+      this._reject(e);
+    }
+  }
+  /**
+   * Builds a promise that is resolved when all the passed in promises are
+   * resolved.
+   * @param {array} array of data and/or promises to wait for.
+   * @return {Promise} New dependant promise.
+   */
+  Promise.all = function Promise_all(promises) {
+    var resolveAll, rejectAll;
+    var deferred = new Promise(function (resolve, reject) {
+      resolveAll = resolve;
+      rejectAll = reject;
+    });
+    var unresolved = promises.length;
+    var results = [];
+    if (unresolved === 0) {
+      resolveAll(results);
+      return deferred;
+    }
+    function reject(reason) {
+      if (deferred._status === STATUS_REJECTED) {
+        return;
+      }
+      results = [];
+      rejectAll(reason);
+    }
+    for (var i = 0, ii = promises.length; i < ii; ++i) {
+      var promise = promises[i];
+      var resolve = (function(i) {
+        return function(value) {
+          if (deferred._status === STATUS_REJECTED) {
+            return;
+          }
+          results[i] = value;
+          unresolved--;
+          if (unresolved === 0) {
+            resolveAll(results);
+          }
+        };
+      })(i);
+      if (Promise.isPromise(promise)) {
+        promise.then(resolve, reject);
+      } else {
+        resolve(promise);
+      }
+    }
+    return deferred;
+  };
+
+  /**
+   * Checks if the value is likely a promise (has a 'then' function).
+   * @return {boolean} true if value is thenable
+   */
+  Promise.isPromise = function Promise_isPromise(value) {
+    return value && typeof value.then === 'function';
+  };
+
+  /**
+   * Creates resolved promise
+   * @param value resolve value
+   * @returns {Promise}
+   */
+  Promise.resolve = function Promise_resolve(value) {
+    return new Promise(function (resolve) { resolve(value); });
+  };
+
+  /**
+   * Creates rejected promise
+   * @param reason rejection value
+   * @returns {Promise}
+   */
+  Promise.reject = function Promise_reject(reason) {
+    return new Promise(function (resolve, reject) { reject(reason); });
+  };
+
+  Promise.prototype = {
+    _status: null,
+    _value: null,
+    _handlers: null,
+    _unhandledRejection: null,
+
+    _updateStatus: function Promise__updateStatus(status, value) {
+      if (this._status === STATUS_RESOLVED ||
+          this._status === STATUS_REJECTED) {
+        return;
+      }
+
+      if (status === STATUS_RESOLVED &&
+          Promise.isPromise(value)) {
+        value.then(this._updateStatus.bind(this, STATUS_RESOLVED),
+                   this._updateStatus.bind(this, STATUS_REJECTED));
+        return;
+      }
+
+      this._status = status;
+      this._value = value;
+
+      if (status === STATUS_REJECTED && this._handlers.length === 0) {
+        this._unhandledRejection = true;
+        HandlerManager.addUnhandledRejection(this);
+      }
+
+      HandlerManager.scheduleHandlers(this);
+    },
+
+    _resolve: function Promise_resolve(value) {
+      this._updateStatus(STATUS_RESOLVED, value);
+    },
+
+    _reject: function Promise_reject(reason) {
+      this._updateStatus(STATUS_REJECTED, reason);
+    },
+
+    then: function Promise_then(onResolve, onReject) {
+      var nextPromise = new Promise(function (resolve, reject) {
+        this.resolve = resolve;
+        this.reject = reject;
+      });
+      this._handlers.push({
+        thisPromise: this,
+        onResolve: onResolve,
+        onReject: onReject,
+        nextPromise: nextPromise
+      });
+      HandlerManager.scheduleHandlers(this);
+      return nextPromise;
+    },
+
+    catch: function Promise_catch(onReject) {
+      return this.then(undefined, onReject);
+    }
+  };
+
+  globalScope.Promise = Promise;
+})();
+
+var StatTimer = (function StatTimerClosure() {
+  function rpad(str, pad, length) {
+    while (str.length < length) {
+      str += pad;
+    }
+    return str;
+  }
+  function StatTimer() {
+    this.started = {};
+    this.times = [];
+    this.enabled = true;
+  }
+  StatTimer.prototype = {
+    time: function StatTimer_time(name) {
+      if (!this.enabled) {
+        return;
+      }
+      if (name in this.started) {
+        warn('Timer is already running for ' + name);
+      }
+      this.started[name] = Date.now();
+    },
+    timeEnd: function StatTimer_timeEnd(name) {
+      if (!this.enabled) {
+        return;
+      }
+      if (!(name in this.started)) {
+        warn('Timer has not been started for ' + name);
+      }
+      this.times.push({
+        'name': name,
+        'start': this.started[name],
+        'end': Date.now()
+      });
+      // Remove timer from started so it can be called again.
+      delete this.started[name];
+    },
+    toString: function StatTimer_toString() {
+      var i, ii;
+      var times = this.times;
+      var out = '';
+      // Find the longest name for padding purposes.
+      var longest = 0;
+      for (i = 0, ii = times.length; i < ii; ++i) {
+        var name = times[i]['name'];
+        if (name.length > longest) {
+          longest = name.length;
+        }
+      }
+      for (i = 0, ii = times.length; i < ii; ++i) {
+        var span = times[i];
+        var duration = span.end - span.start;
+        out += rpad(span['name'], ' ', longest) + ' ' + duration + 'ms\n';
+      }
+      return out;
+    }
+  };
+  return StatTimer;
+})();
+
+PDFJS.createBlob = function createBlob(data, contentType) {
+  if (typeof Blob !== 'undefined') {
+    return new Blob([data], { type: contentType });
+  }
+  // Blob builder is deprecated in FF14 and removed in FF18.
+  var bb = new MozBlobBuilder();
+  bb.append(data);
+  return bb.getBlob(contentType);
+};
+
+PDFJS.createObjectURL = (function createObjectURLClosure() {
+  // Blob/createObjectURL is not available, falling back to data schema.
+  var digits =
+    'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+  return function createObjectURL(data, contentType) {
+    if (!PDFJS.disableCreateObjectURL &&
+        typeof URL !== 'undefined' && URL.createObjectURL) {
+      var blob = PDFJS.createBlob(data, contentType);
+      return URL.createObjectURL(blob);
+    }
+
+    var buffer = 'data:' + contentType + ';base64,';
+    for (var i = 0, ii = data.length; i < ii; i += 3) {
+      var b1 = data[i] & 0xFF;
+      var b2 = data[i + 1] & 0xFF;
+      var b3 = data[i + 2] & 0xFF;
+      var d1 = b1 >> 2, d2 = ((b1 & 3) << 4) | (b2 >> 4);
+      var d3 = i + 1 < ii ? ((b2 & 0xF) << 2) | (b3 >> 6) : 64;
+      var d4 = i + 2 < ii ? (b3 & 0x3F) : 64;
+      buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
+    }
+    return buffer;
+  };
+})();
+
+function MessageHandler(name, comObj) {
+  this.name = name;
+  this.comObj = comObj;
+  this.callbackIndex = 1;
+  this.postMessageTransfers = true;
+  var callbacksCapabilities = this.callbacksCapabilities = {};
+  var ah = this.actionHandler = {};
+
+  ah['console_log'] = [function ahConsoleLog(data) {
+    console.log.apply(console, data);
+  }];
+  ah['console_error'] = [function ahConsoleError(data) {
+    console.error.apply(console, data);
+  }];
+  ah['_unsupported_feature'] = [function ah_unsupportedFeature(data) {
+    UnsupportedManager.notify(data);
+  }];
+
+  comObj.onmessage = function messageHandlerComObjOnMessage(event) {
+    var data = event.data;
+    if (data.isReply) {
+      var callbackId = data.callbackId;
+      if (data.callbackId in callbacksCapabilities) {
+        var callback = callbacksCapabilities[callbackId];
+        delete callbacksCapabilities[callbackId];
+        if ('error' in data) {
+          callback.reject(data.error);
+        } else {
+          callback.resolve(data.data);
+        }
+      } else {
+        error('Cannot resolve callback ' + callbackId);
+      }
+    } else if (data.action in ah) {
+      var action = ah[data.action];
+      if (data.callbackId) {
+        Promise.resolve().then(function () {
+          return action[0].call(action[1], data.data);
+        }).then(function (result) {
+          comObj.postMessage({
+            isReply: true,
+            callbackId: data.callbackId,
+            data: result
+          });
+        }, function (reason) {
+          if (reason instanceof Error) {
+            // Serialize error to avoid "DataCloneError"
+            reason = reason + '';
+          }
+          comObj.postMessage({
+            isReply: true,
+            callbackId: data.callbackId,
+            error: reason
+          });
+        });
+      } else {
+        action[0].call(action[1], data.data);
+      }
+    } else {
+      error('Unknown action from worker: ' + data.action);
+    }
+  };
+}
+
+MessageHandler.prototype = {
+  on: function messageHandlerOn(actionName, handler, scope) {
+    var ah = this.actionHandler;
+    if (ah[actionName]) {
+      error('There is already an actionName called "' + actionName + '"');
+    }
+    ah[actionName] = [handler, scope];
+  },
+  /**
+   * Sends a message to the comObj to invoke the action with the supplied data.
+   * @param {String} actionName Action to call.
+   * @param {JSON} data JSON data to send.
+   * @param {Array} [transfers] Optional list of transfers/ArrayBuffers
+   */
+  send: function messageHandlerSend(actionName, data, transfers) {
+    var message = {
+      action: actionName,
+      data: data
+    };
+    this.postMessage(message, transfers);
+  },
+  /**
+   * Sends a message to the comObj to invoke the action with the supplied data.
+   * Expects that other side will callback with the response.
+   * @param {String} actionName Action to call.
+   * @param {JSON} data JSON data to send.
+   * @param {Array} [transfers] Optional list of transfers/ArrayBuffers.
+   * @returns {Promise} Promise to be resolved with response data.
+   */
+  sendWithPromise:
+    function messageHandlerSendWithPromise(actionName, data, transfers) {
+    var callbackId = this.callbackIndex++;
+    var message = {
+      action: actionName,
+      data: data,
+      callbackId: callbackId
+    };
+    var capability = createPromiseCapability();
+    this.callbacksCapabilities[callbackId] = capability;
+    try {
+      this.postMessage(message, transfers);
+    } catch (e) {
+      capability.reject(e);
+    }
+    return capability.promise;
+  },
+  /**
+   * Sends raw message to the comObj.
+   * @private
+   * @param message {Object} Raw message.
+   * @param transfers List of transfers/ArrayBuffers, or undefined.
+   */
+  postMessage: function (message, transfers) {
+    if (transfers && this.postMessageTransfers) {
+      this.comObj.postMessage(message, transfers);
+    } else {
+      this.comObj.postMessage(message);
+    }
+  }
+};
+
+function loadJpegStream(id, imageUrl, objs) {
+  var img = new Image();
+  img.onload = (function loadJpegStream_onloadClosure() {
+    objs.resolve(id, img);
+  });
+  img.onerror = (function loadJpegStream_onerrorClosure() {
+    objs.resolve(id, null);
+    warn('Error during JPEG image loading');
+  });
+  img.src = imageUrl;
+}
+
+
+
+
+var NetworkManager = (function NetworkManagerClosure() {
+
+  var OK_RESPONSE = 200;
+  var PARTIAL_CONTENT_RESPONSE = 206;
+
+  function NetworkManager(url, args) {
+    this.url = url;
+    args = args || {};
+    this.isHttp = /^https?:/i.test(url);
+    this.httpHeaders = (this.isHttp && args.httpHeaders) || {};
+    this.withCredentials = args.withCredentials || false;
+    this.getXhr = args.getXhr ||
+      function NetworkManager_getXhr() {
+        return new XMLHttpRequest();
+      };
+
+    this.currXhrId = 0;
+    this.pendingRequests = {};
+    this.loadedRequests = {};
+  }
+
+  function getArrayBuffer(xhr) {
+    var data = xhr.response;
+    if (typeof data !== 'string') {
+      return data;
+    }
+    var length = data.length;
+    var array = new Uint8Array(length);
+    for (var i = 0; i < length; i++) {
+      array[i] = data.charCodeAt(i) & 0xFF;
+    }
+    return array.buffer;
+  }
+
+  var supportsMozChunked = (function supportsMozChunkedClosure() {
+    try {
+      var x = new XMLHttpRequest();
+      // Firefox 37- required .open() to be called before setting responseType.
+      // https://bugzilla.mozilla.org/show_bug.cgi?id=707484
+      // Even though the URL is not visited, .open() could fail if the URL is
+      // blocked, e.g. via the connect-src CSP directive or the NoScript addon.
+      // When this error occurs, this feature detection method will mistakenly
+      // report that moz-chunked-arraybuffer is not supported in Firefox 37-.
+      x.open('GET', 'https://example.com');
+      x.responseType = 'moz-chunked-arraybuffer';
+      return x.responseType === 'moz-chunked-arraybuffer';
+    } catch (e) {
+      return false;
+    }
+  })();
+
+  NetworkManager.prototype = {
+    requestRange: function NetworkManager_requestRange(begin, end, listeners) {
+      var args = {
+        begin: begin,
+        end: end
+      };
+      for (var prop in listeners) {
+        args[prop] = listeners[prop];
+      }
+      return this.request(args);
+    },
+
+    requestFull: function NetworkManager_requestFull(listeners) {
+      return this.request(listeners);
+    },
+
+    request: function NetworkManager_request(args) {
+      var xhr = this.getXhr();
+      var xhrId = this.currXhrId++;
+      var pendingRequest = this.pendingRequests[xhrId] = {
+        xhr: xhr
+      };
+
+      xhr.open('GET', this.url);
+      xhr.withCredentials = this.withCredentials;
+      for (var property in this.httpHeaders) {
+        var value = this.httpHeaders[property];
+        if (typeof value === 'undefined') {
+          continue;
+        }
+        xhr.setRequestHeader(property, value);
+      }
+      if (this.isHttp && 'begin' in args && 'end' in args) {
+        var rangeStr = args.begin + '-' + (args.end - 1);
+        xhr.setRequestHeader('Range', 'bytes=' + rangeStr);
+        pendingRequest.expectedStatus = 206;
+      } else {
+        pendingRequest.expectedStatus = 200;
+      }
+
+      var useMozChunkedLoading = supportsMozChunked && !!args.onProgressiveData;
+      if (useMozChunkedLoading) {
+        xhr.responseType = 'moz-chunked-arraybuffer';
+        pendingRequest.onProgressiveData = args.onProgressiveData;
+        pendingRequest.mozChunked = true;
+      } else {
+        xhr.responseType = 'arraybuffer';
+      }
+
+      if (args.onError) {
+        xhr.onerror = function(evt) {
+          args.onError(xhr.status);
+        };
+      }
+      xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);
+      xhr.onprogress = this.onProgress.bind(this, xhrId);
+
+      pendingRequest.onHeadersReceived = args.onHeadersReceived;
+      pendingRequest.onDone = args.onDone;
+      pendingRequest.onError = args.onError;
+      pendingRequest.onProgress = args.onProgress;
+
+      xhr.send(null);
+
+      return xhrId;
+    },
+
+    onProgress: function NetworkManager_onProgress(xhrId, evt) {
+      var pendingRequest = this.pendingRequests[xhrId];
+      if (!pendingRequest) {
+        // Maybe abortRequest was called...
+        return;
+      }
+
+      if (pendingRequest.mozChunked) {
+        var chunk = getArrayBuffer(pendingRequest.xhr);
+        pendingRequest.onProgressiveData(chunk);
+      }
+
+      var onProgress = pendingRequest.onProgress;
+      if (onProgress) {
+        onProgress(evt);
+      }
+    },
+
+    onStateChange: function NetworkManager_onStateChange(xhrId, evt) {
+      var pendingRequest = this.pendingRequests[xhrId];
+      if (!pendingRequest) {
+        // Maybe abortRequest was called...
+        return;
+      }
+
+      var xhr = pendingRequest.xhr;
+      if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {
+        pendingRequest.onHeadersReceived();
+        delete pendingRequest.onHeadersReceived;
+      }
+
+      if (xhr.readyState !== 4) {
+        return;
+      }
+
+      if (!(xhrId in this.pendingRequests)) {
+        // The XHR request might have been aborted in onHeadersReceived()
+        // callback, in which case we should abort request
+        return;
+      }
+
+      delete this.pendingRequests[xhrId];
+
+      // success status == 0 can be on ftp, file and other protocols
+      if (xhr.status === 0 && this.isHttp) {
+        if (pendingRequest.onError) {
+          pendingRequest.onError(xhr.status);
+        }
+        return;
+      }
+      var xhrStatus = xhr.status || OK_RESPONSE;
+
+      // From http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35.2:
+      // "A server MAY ignore the Range header". This means it's possible to
+      // get a 200 rather than a 206 response from a range request.
+      var ok_response_on_range_request =
+          xhrStatus === OK_RESPONSE &&
+          pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;
+
+      if (!ok_response_on_range_request &&
+          xhrStatus !== pendingRequest.expectedStatus) {
+        if (pendingRequest.onError) {
+          pendingRequest.onError(xhr.status);
+        }
+        return;
+      }
+
+      this.loadedRequests[xhrId] = true;
+
+      var chunk = getArrayBuffer(xhr);
+      if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {
+        var rangeHeader = xhr.getResponseHeader('Content-Range');
+        var matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader);
+        var begin = parseInt(matches[1], 10);
+        pendingRequest.onDone({
+          begin: begin,
+          chunk: chunk
+        });
+      } else if (pendingRequest.onProgressiveData) {
+        pendingRequest.onDone(null);
+      } else {
+        pendingRequest.onDone({
+          begin: 0,
+          chunk: chunk
+        });
+      }
+    },
+
+    hasPendingRequests: function NetworkManager_hasPendingRequests() {
+      for (var xhrId in this.pendingRequests) {
+        return true;
+      }
+      return false;
+    },
+
+    getRequestXhr: function NetworkManager_getXhr(xhrId) {
+      return this.pendingRequests[xhrId].xhr;
+    },
+
+    isStreamingRequest: function NetworkManager_isStreamingRequest(xhrId) {
+      return !!(this.pendingRequests[xhrId].onProgressiveData);
+    },
+
+    isPendingRequest: function NetworkManager_isPendingRequest(xhrId) {
+      return xhrId in this.pendingRequests;
+    },
+
+    isLoadedRequest: function NetworkManager_isLoadedRequest(xhrId) {
+      return xhrId in this.loadedRequests;
+    },
+
+    abortAllRequests: function NetworkManager_abortAllRequests() {
+      for (var xhrId in this.pendingRequests) {
+        this.abortRequest(xhrId | 0);
+      }
+    },
+
+    abortRequest: function NetworkManager_abortRequest(xhrId) {
+      var xhr = this.pendingRequests[xhrId].xhr;
+      delete this.pendingRequests[xhrId];
+      xhr.abort();
+    }
+  };
+
+  return NetworkManager;
+})();
+
+
+var ChunkedStream = (function ChunkedStreamClosure() {
+  function ChunkedStream(length, chunkSize, manager) {
+    this.bytes = new Uint8Array(length);
+    this.start = 0;
+    this.pos = 0;
+    this.end = length;
+    this.chunkSize = chunkSize;
+    this.loadedChunks = [];
+    this.numChunksLoaded = 0;
+    this.numChunks = Math.ceil(length / chunkSize);
+    this.manager = manager;
+    this.progressiveDataLength = 0;
+    this.lastSuccessfulEnsureByteChunk = -1;  // a single-entry cache
+  }
+
+  // required methods for a stream. if a particular stream does not
+  // implement these, an error should be thrown
+  ChunkedStream.prototype = {
+
+    getMissingChunks: function ChunkedStream_getMissingChunks() {
+      var chunks = [];
+      for (var chunk = 0, n = this.numChunks; chunk < n; ++chunk) {
+        if (!this.loadedChunks[chunk]) {
+          chunks.push(chunk);
+        }
+      }
+      return chunks;
+    },
+
+    getBaseStreams: function ChunkedStream_getBaseStreams() {
+      return [this];
+    },
+
+    allChunksLoaded: function ChunkedStream_allChunksLoaded() {
+      return this.numChunksLoaded === this.numChunks;
+    },
+
+    onReceiveData: function ChunkedStream_onReceiveData(begin, chunk) {
+      var end = begin + chunk.byteLength;
+
+      assert(begin % this.chunkSize === 0, 'Bad begin offset: ' + begin);
+      // Using this.length is inaccurate here since this.start can be moved
+      // See ChunkedStream.moveStart()
+      var length = this.bytes.length;
+      assert(end % this.chunkSize === 0 || end === length,
+             'Bad end offset: ' + end);
+
+      this.bytes.set(new Uint8Array(chunk), begin);
+      var chunkSize = this.chunkSize;
+      var beginChunk = Math.floor(begin / chunkSize);
+      var endChunk = Math.floor((end - 1) / chunkSize) + 1;
+      var curChunk;
+
+      for (curChunk = beginChunk; curChunk < endChunk; ++curChunk) {
+        if (!this.loadedChunks[curChunk]) {
+          this.loadedChunks[curChunk] = true;
+          ++this.numChunksLoaded;
+        }
+      }
+    },
+
+    onReceiveProgressiveData:
+        function ChunkedStream_onReceiveProgressiveData(data) {
+      var position = this.progressiveDataLength;
+      var beginChunk = Math.floor(position / this.chunkSize);
+
+      this.bytes.set(new Uint8Array(data), position);
+      position += data.byteLength;
+      this.progressiveDataLength = position;
+      var endChunk = position >= this.end ? this.numChunks :
+                     Math.floor(position / this.chunkSize);
+      var curChunk;
+      for (curChunk = beginChunk; curChunk < endChunk; ++curChunk) {
+        if (!this.loadedChunks[curChunk]) {
+          this.loadedChunks[curChunk] = true;
+          ++this.numChunksLoaded;
+        }
+      }
+    },
+
+    ensureByte: function ChunkedStream_ensureByte(pos) {
+      var chunk = Math.floor(pos / this.chunkSize);
+      if (chunk === this.lastSuccessfulEnsureByteChunk) {
+        return;
+      }
+
+      if (!this.loadedChunks[chunk]) {
+        throw new MissingDataException(pos, pos + 1);
+      }
+      this.lastSuccessfulEnsureByteChunk = chunk;
+    },
+
+    ensureRange: function ChunkedStream_ensureRange(begin, end) {
+      if (begin >= end) {
+        return;
+      }
+
+      if (end <= this.progressiveDataLength) {
+        return;
+      }
+
+      var chunkSize = this.chunkSize;
+      var beginChunk = Math.floor(begin / chunkSize);
+      var endChunk = Math.floor((end - 1) / chunkSize) + 1;
+      for (var chunk = beginChunk; chunk < endChunk; ++chunk) {
+        if (!this.loadedChunks[chunk]) {
+          throw new MissingDataException(begin, end);
+        }
+      }
+    },
+
+    nextEmptyChunk: function ChunkedStream_nextEmptyChunk(beginChunk) {
+      var chunk, numChunks = this.numChunks;
+      for (var i = 0; i < numChunks; ++i) {
+        chunk = (beginChunk + i) % numChunks; // Wrap around to beginning
+        if (!this.loadedChunks[chunk]) {
+          return chunk;
+        }
+      }
+      return null;
+    },
+
+    hasChunk: function ChunkedStream_hasChunk(chunk) {
+      return !!this.loadedChunks[chunk];
+    },
+
+    get length() {
+      return this.end - this.start;
+    },
+
+    get isEmpty() {
+      return this.length === 0;
+    },
+
+    getByte: function ChunkedStream_getByte() {
+      var pos = this.pos;
+      if (pos >= this.end) {
+        return -1;
+      }
+      this.ensureByte(pos);
+      return this.bytes[this.pos++];
+    },
+
+    getUint16: function ChunkedStream_getUint16() {
+      var b0 = this.getByte();
+      var b1 = this.getByte();
+      if (b0 === -1 || b1 === -1) {
+        return -1;
+      }
+      return (b0 << 8) + b1;
+    },
+
+    getInt32: function ChunkedStream_getInt32() {
+      var b0 = this.getByte();
+      var b1 = this.getByte();
+      var b2 = this.getByte();
+      var b3 = this.getByte();
+      return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
+    },
+
+    // returns subarray of original buffer
+    // should only be read
+    getBytes: function ChunkedStream_getBytes(length) {
+      var bytes = this.bytes;
+      var pos = this.pos;
+      var strEnd = this.end;
+
+      if (!length) {
+        this.ensureRange(pos, strEnd);
+        return bytes.subarray(pos, strEnd);
+      }
+
+      var end = pos + length;
+      if (end > strEnd) {
+        end = strEnd;
+      }
+      this.ensureRange(pos, end);
+
+      this.pos = end;
+      return bytes.subarray(pos, end);
+    },
+
+    peekByte: function ChunkedStream_peekByte() {
+      var peekedByte = this.getByte();
+      this.pos--;
+      return peekedByte;
+    },
+
+    peekBytes: function ChunkedStream_peekBytes(length) {
+      var bytes = this.getBytes(length);
+      this.pos -= bytes.length;
+      return bytes;
+    },
+
+    getByteRange: function ChunkedStream_getBytes(begin, end) {
+      this.ensureRange(begin, end);
+      return this.bytes.subarray(begin, end);
+    },
+
+    skip: function ChunkedStream_skip(n) {
+      if (!n) {
+        n = 1;
+      }
+      this.pos += n;
+    },
+
+    reset: function ChunkedStream_reset() {
+      this.pos = this.start;
+    },
+
+    moveStart: function ChunkedStream_moveStart() {
+      this.start = this.pos;
+    },
+
+    makeSubStream: function ChunkedStream_makeSubStream(start, length, dict) {
+      this.ensureRange(start, start + length);
+
+      function ChunkedStreamSubstream() {}
+      ChunkedStreamSubstream.prototype = Object.create(this);
+      ChunkedStreamSubstream.prototype.getMissingChunks = function() {
+        var chunkSize = this.chunkSize;
+        var beginChunk = Math.floor(this.start / chunkSize);
+        var endChunk = Math.floor((this.end - 1) / chunkSize) + 1;
+        var missingChunks = [];
+        for (var chunk = beginChunk; chunk < endChunk; ++chunk) {
+          if (!this.loadedChunks[chunk]) {
+            missingChunks.push(chunk);
+          }
+        }
+        return missingChunks;
+      };
+      var subStream = new ChunkedStreamSubstream();
+      subStream.pos = subStream.start = start;
+      subStream.end = start + length || this.end;
+      subStream.dict = dict;
+      return subStream;
+    },
+
+    isStream: true
+  };
+
+  return ChunkedStream;
+})();
+
+var ChunkedStreamManager = (function ChunkedStreamManagerClosure() {
+
+  function ChunkedStreamManager(length, chunkSize, url, args) {
+    this.stream = new ChunkedStream(length, chunkSize, this);
+    this.length = length;
+    this.chunkSize = chunkSize;
+    this.url = url;
+    this.disableAutoFetch = args.disableAutoFetch;
+    var msgHandler = this.msgHandler = args.msgHandler;
+
+    if (args.chunkedViewerLoading) {
+      msgHandler.on('OnDataRange', this.onReceiveData.bind(this));
+      msgHandler.on('OnDataProgress', this.onProgress.bind(this));
+      this.sendRequest = function ChunkedStreamManager_sendRequest(begin, end) {
+        msgHandler.send('RequestDataRange', { begin: begin, end: end });
+      };
+    } else {
+
+      var getXhr = function getXhr() {
+        return new XMLHttpRequest();
+      };
+      this.networkManager = new NetworkManager(this.url, {
+        getXhr: getXhr,
+        httpHeaders: args.httpHeaders,
+        withCredentials: args.withCredentials
+      });
+      this.sendRequest = function ChunkedStreamManager_sendRequest(begin, end) {
+        this.networkManager.requestRange(begin, end, {
+          onDone: this.onReceiveData.bind(this),
+          onProgress: this.onProgress.bind(this)
+        });
+      };
+    }
+
+    this.currRequestId = 0;
+
+    this.chunksNeededByRequest = {};
+    this.requestsByChunk = {};
+    this.promisesByRequest = {};
+    this.progressiveDataLength = 0;
+
+    this._loadedStreamCapability = createPromiseCapability();
+
+    if (args.initialData) {
+      this.onReceiveData({chunk: args.initialData});
+    }
+  }
+
+  ChunkedStreamManager.prototype = {
+    onLoadedStream: function ChunkedStreamManager_getLoadedStream() {
+      return this._loadedStreamCapability.promise;
+    },
+
+    // Get all the chunks that are not yet loaded and groups them into
+    // contiguous ranges to load in as few requests as possible
+    requestAllChunks: function ChunkedStreamManager_requestAllChunks() {
+      var missingChunks = this.stream.getMissingChunks();
+      this._requestChunks(missingChunks);
+      return this._loadedStreamCapability.promise;
+    },
+
+    _requestChunks: function ChunkedStreamManager_requestChunks(chunks) {
+      var requestId = this.currRequestId++;
+
+      var chunksNeeded;
+      var i, ii;
+      this.chunksNeededByRequest[requestId] = chunksNeeded = {};
+      for (i = 0, ii = chunks.length; i < ii; i++) {
+        if (!this.stream.hasChunk(chunks[i])) {
+          chunksNeeded[chunks[i]] = true;
+        }
+      }
+
+      if (isEmptyObj(chunksNeeded)) {
+        return Promise.resolve();
+      }
+
+      var capability = createPromiseCapability();
+      this.promisesByRequest[requestId] = capability;
+
+      var chunksToRequest = [];
+      for (var chunk in chunksNeeded) {
+        chunk = chunk | 0;
+        if (!(chunk in this.requestsByChunk)) {
+          this.requestsByChunk[chunk] = [];
+          chunksToRequest.push(chunk);
+        }
+        this.requestsByChunk[chunk].push(requestId);
+      }
+
+      if (!chunksToRequest.length) {
+        return capability.promise;
+      }
+
+      var groupedChunksToRequest = this.groupChunks(chunksToRequest);
+
+      for (i = 0; i < groupedChunksToRequest.length; ++i) {
+        var groupedChunk = groupedChunksToRequest[i];
+        var begin = groupedChunk.beginChunk * this.chunkSize;
+        var end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length);
+        this.sendRequest(begin, end);
+      }
+
+      return capability.promise;
+    },
+
+    getStream: function ChunkedStreamManager_getStream() {
+      return this.stream;
+    },
+
+    // Loads any chunks in the requested range that are not yet loaded
+    requestRange: function ChunkedStreamManager_requestRange(begin, end) {
+
+      end = Math.min(end, this.length);
+
+      var beginChunk = this.getBeginChunk(begin);
+      var endChunk = this.getEndChunk(end);
+
+      var chunks = [];
+      for (var chunk = beginChunk; chunk < endChunk; ++chunk) {
+        chunks.push(chunk);
+      }
+
+      return this._requestChunks(chunks);
+    },
+
+    requestRanges: function ChunkedStreamManager_requestRanges(ranges) {
+      ranges = ranges || [];
+      var chunksToRequest = [];
+
+      for (var i = 0; i < ranges.length; i++) {
+        var beginChunk = this.getBeginChunk(ranges[i].begin);
+        var endChunk = this.getEndChunk(ranges[i].end);
+        for (var chunk = beginChunk; chunk < endChunk; ++chunk) {
+          if (chunksToRequest.indexOf(chunk) < 0) {
+            chunksToRequest.push(chunk);
+          }
+        }
+      }
+
+      chunksToRequest.sort(function(a, b) { return a - b; });
+      return this._requestChunks(chunksToRequest);
+    },
+
+    // Groups a sorted array of chunks into as few contiguous larger
+    // chunks as possible
+    groupChunks: function ChunkedStreamManager_groupChunks(chunks) {
+      var groupedChunks = [];
+      var beginChunk = -1;
+      var prevChunk = -1;
+      for (var i = 0; i < chunks.length; ++i) {
+        var chunk = chunks[i];
+
+        if (beginChunk < 0) {
+          beginChunk = chunk;
+        }
+
+        if (prevChunk >= 0 && prevChunk + 1 !== chunk) {
+          groupedChunks.push({ beginChunk: beginChunk,
+                               endChunk: prevChunk + 1 });
+          beginChunk = chunk;
+        }
+        if (i + 1 === chunks.length) {
+          groupedChunks.push({ beginChunk: beginChunk,
+                               endChunk: chunk + 1 });
+        }
+
+        prevChunk = chunk;
+      }
+      return groupedChunks;
+    },
+
+    onProgress: function ChunkedStreamManager_onProgress(args) {
+      var bytesLoaded = (this.stream.numChunksLoaded * this.chunkSize +
+                         args.loaded);
+      this.msgHandler.send('DocProgress', {
+        loaded: bytesLoaded,
+        total: this.length
+      });
+    },
+
+    onReceiveData: function ChunkedStreamManager_onReceiveData(args) {
+      var chunk = args.chunk;
+      var isProgressive = args.begin === undefined;
+      var begin = isProgressive ? this.progressiveDataLength : args.begin;
+      var end = begin + chunk.byteLength;
+
+      var beginChunk = Math.floor(begin / this.chunkSize);
+      var endChunk = end < this.length ? Math.floor(end / this.chunkSize) :
+                                         Math.ceil(end / this.chunkSize);
+
+      if (isProgressive) {
+        this.stream.onReceiveProgressiveData(chunk);
+        this.progressiveDataLength = end;
+      } else {
+        this.stream.onReceiveData(begin, chunk);
+      }
+
+      if (this.stream.allChunksLoaded()) {
+        this._loadedStreamCapability.resolve(this.stream);
+      }
+
+      var loadedRequests = [];
+      var i, requestId;
+      for (chunk = beginChunk; chunk < endChunk; ++chunk) {
+        // The server might return more chunks than requested
+        var requestIds = this.requestsByChunk[chunk] || [];
+        delete this.requestsByChunk[chunk];
+
+        for (i = 0; i < requestIds.length; ++i) {
+          requestId = requestIds[i];
+          var chunksNeeded = this.chunksNeededByRequest[requestId];
+          if (chunk in chunksNeeded) {
+            delete chunksNeeded[chunk];
+          }
+
+          if (!isEmptyObj(chunksNeeded)) {
+            continue;
+          }
+
+          loadedRequests.push(requestId);
+        }
+      }
+
+      // If there are no pending requests, automatically fetch the next
+      // unfetched chunk of the PDF
+      if (!this.disableAutoFetch && isEmptyObj(this.requestsByChunk)) {
+        var nextEmptyChunk;
+        if (this.stream.numChunksLoaded === 1) {
+          // This is a special optimization so that after fetching the first
+          // chunk, rather than fetching the second chunk, we fetch the last
+          // chunk.
+          var lastChunk = this.stream.numChunks - 1;
+          if (!this.stream.hasChunk(lastChunk)) {
+            nextEmptyChunk = lastChunk;
+          }
+        } else {
+          nextEmptyChunk = this.stream.nextEmptyChunk(endChunk);
+        }
+        if (isInt(nextEmptyChunk)) {
+          this._requestChunks([nextEmptyChunk]);
+        }
+      }
+
+      for (i = 0; i < loadedRequests.length; ++i) {
+        requestId = loadedRequests[i];
+        var capability = this.promisesByRequest[requestId];
+        delete this.promisesByRequest[requestId];
+        capability.resolve();
+      }
+
+      this.msgHandler.send('DocProgress', {
+        loaded: this.stream.numChunksLoaded * this.chunkSize,
+        total: this.length
+      });
+    },
+
+    onError: function ChunkedStreamManager_onError(err) {
+      this._loadedStreamCapability.reject(err);
+    },
+
+    getBeginChunk: function ChunkedStreamManager_getBeginChunk(begin) {
+      var chunk = Math.floor(begin / this.chunkSize);
+      return chunk;
+    },
+
+    getEndChunk: function ChunkedStreamManager_getEndChunk(end) {
+      var chunk = Math.floor((end - 1) / this.chunkSize) + 1;
+      return chunk;
+    },
+
+    abort: function ChunkedStreamManager_abort() {
+      if (this.networkManager) {
+        this.networkManager.abortAllRequests();
+      }
+      for(var requestId in this.promisesByRequest) {
+        var capability = this.promisesByRequest[requestId];
+        capability.reject(new Error('Request was aborted'));
+      }
+    }
+  };
+
+  return ChunkedStreamManager;
+})();
+
+
+// The maximum number of bytes fetched per range request
+var RANGE_CHUNK_SIZE = 65536;
+
+// TODO(mack): Make use of PDFJS.Util.inherit() when it becomes available
+var BasePdfManager = (function BasePdfManagerClosure() {
+  function BasePdfManager() {
+    throw new Error('Cannot initialize BaseManagerManager');
+  }
+
+  BasePdfManager.prototype = {
+    onLoadedStream: function BasePdfManager_onLoadedStream() {
+      throw new NotImplementedException();
+    },
+
+    ensureDoc: function BasePdfManager_ensureDoc(prop, args) {
+      return this.ensure(this.pdfDocument, prop, args);
+    },
+
+    ensureXRef: function BasePdfManager_ensureXRef(prop, args) {
+      return this.ensure(this.pdfDocument.xref, prop, args);
+    },
+
+    ensureCatalog: function BasePdfManager_ensureCatalog(prop, args) {
+      return this.ensure(this.pdfDocument.catalog, prop, args);
+    },
+
+    getPage: function BasePdfManager_pagePage(pageIndex) {
+      return this.pdfDocument.getPage(pageIndex);
+    },
+
+    cleanup: function BasePdfManager_cleanup() {
+      return this.pdfDocument.cleanup();
+    },
+
+    ensure: function BasePdfManager_ensure(obj, prop, args) {
+      return new NotImplementedException();
+    },
+
+    requestRange: function BasePdfManager_ensure(begin, end) {
+      return new NotImplementedException();
+    },
+
+    requestLoadedStream: function BasePdfManager_requestLoadedStream() {
+      return new NotImplementedException();
+    },
+
+    sendProgressiveData: function BasePdfManager_sendProgressiveData(chunk) {
+      return new NotImplementedException();
+    },
+
+    updatePassword: function BasePdfManager_updatePassword(password) {
+      this.pdfDocument.xref.password = this.password = password;
+      if (this._passwordChangedCapability) {
+        this._passwordChangedCapability.resolve();
+      }
+    },
+
+    passwordChanged: function BasePdfManager_passwordChanged() {
+      this._passwordChangedCapability = createPromiseCapability();
+      return this._passwordChangedCapability.promise;
+    },
+
+    terminate: function BasePdfManager_terminate() {
+      return new NotImplementedException();
+    }
+  };
+
+  return BasePdfManager;
+})();
+
+var LocalPdfManager = (function LocalPdfManagerClosure() {
+  function LocalPdfManager(data, password) {
+    var stream = new Stream(data);
+    this.pdfDocument = new PDFDocument(this, stream, password);
+    this._loadedStreamCapability = createPromiseCapability();
+    this._loadedStreamCapability.resolve(stream);
+  }
+
+  LocalPdfManager.prototype = Object.create(BasePdfManager.prototype);
+  LocalPdfManager.prototype.constructor = LocalPdfManager;
+
+  LocalPdfManager.prototype.ensure =
+      function LocalPdfManager_ensure(obj, prop, args) {
+    return new Promise(function (resolve, reject) {
+      try {
+        var value = obj[prop];
+        var result;
+        if (typeof value === 'function') {
+          result = value.apply(obj, args);
+        } else {
+          result = value;
+        }
+        resolve(result);
+      } catch (e) {
+        reject(e);
+      }
+    });
+  };
+
+  LocalPdfManager.prototype.requestRange =
+      function LocalPdfManager_requestRange(begin, end) {
+    return Promise.resolve();
+  };
+
+  LocalPdfManager.prototype.requestLoadedStream =
+      function LocalPdfManager_requestLoadedStream() {
+  };
+
+  LocalPdfManager.prototype.onLoadedStream =
+      function LocalPdfManager_getLoadedStream() {
+    return this._loadedStreamCapability.promise;
+  };
+
+  LocalPdfManager.prototype.terminate =
+      function LocalPdfManager_terminate() {
+    return;
+  };
+
+  return LocalPdfManager;
+})();
+
+var NetworkPdfManager = (function NetworkPdfManagerClosure() {
+  function NetworkPdfManager(args, msgHandler) {
+
+    this.msgHandler = msgHandler;
+
+    var params = {
+      msgHandler: msgHandler,
+      httpHeaders: args.httpHeaders,
+      withCredentials: args.withCredentials,
+      chunkedViewerLoading: args.chunkedViewerLoading,
+      disableAutoFetch: args.disableAutoFetch,
+      initialData: args.initialData
+    };
+    this.streamManager = new ChunkedStreamManager(args.length, RANGE_CHUNK_SIZE,
+                                                  args.url, params);
+
+    this.pdfDocument = new PDFDocument(this, this.streamManager.getStream(),
+                                    args.password);
+  }
+
+  NetworkPdfManager.prototype = Object.create(BasePdfManager.prototype);
+  NetworkPdfManager.prototype.constructor = NetworkPdfManager;
+
+  NetworkPdfManager.prototype.ensure =
+      function NetworkPdfManager_ensure(obj, prop, args) {
+    var pdfManager = this;
+
+    return new Promise(function (resolve, reject) {
+      function ensureHelper() {
+        try {
+          var result;
+          var value = obj[prop];
+          if (typeof value === 'function') {
+            result = value.apply(obj, args);
+          } else {
+            result = value;
+          }
+          resolve(result);
+        } catch(e) {
+          if (!(e instanceof MissingDataException)) {
+            reject(e);
+            return;
+          }
+          pdfManager.streamManager.requestRange(e.begin, e.end).
+            then(ensureHelper, reject);
+        }
+      }
+
+      ensureHelper();
+    });
+  };
+
+  NetworkPdfManager.prototype.requestRange =
+      function NetworkPdfManager_requestRange(begin, end) {
+    return this.streamManager.requestRange(begin, end);
+  };
+
+  NetworkPdfManager.prototype.requestLoadedStream =
+      function NetworkPdfManager_requestLoadedStream() {
+    this.streamManager.requestAllChunks();
+  };
+
+  NetworkPdfManager.prototype.sendProgressiveData =
+      function NetworkPdfManager_sendProgressiveData(chunk) {
+    this.streamManager.onReceiveData({ chunk: chunk });
+  };
+
+  NetworkPdfManager.prototype.onLoadedStream =
+      function NetworkPdfManager_getLoadedStream() {
+    return this.streamManager.onLoadedStream();
+  };
+
+  NetworkPdfManager.prototype.terminate =
+      function NetworkPdfManager_terminate() {
+    this.streamManager.abort();
+  };
+
+  return NetworkPdfManager;
+})();
+
+
+var Page = (function PageClosure() {
+
+  var LETTER_SIZE_MEDIABOX = [0, 0, 612, 792];
+
+  function Page(pdfManager, xref, pageIndex, pageDict, ref, fontCache) {
+    this.pdfManager = pdfManager;
+    this.pageIndex = pageIndex;
+    this.pageDict = pageDict;
+    this.xref = xref;
+    this.ref = ref;
+    this.fontCache = fontCache;
+    this.idCounters = {
+      obj: 0
+    };
+    this.resourcesPromise = null;
+  }
+
+  Page.prototype = {
+    getPageProp: function Page_getPageProp(key) {
+      return this.pageDict.get(key);
+    },
+
+    getInheritedPageProp: function Page_getInheritedPageProp(key) {
+      var dict = this.pageDict, valueArray = null, loopCount = 0;
+      var MAX_LOOP_COUNT = 100;
+      // Always walk up the entire parent chain, to be able to find
+      // e.g. \Resources placed on multiple levels of the tree.
+      while (dict) {
+        var value = dict.get(key);
+        if (value) {
+          if (!valueArray) {
+            valueArray = [];
+          }
+          valueArray.push(value);
+        }
+        if (++loopCount > MAX_LOOP_COUNT) {
+          warn('Page_getInheritedPageProp: maximum loop count exceeded.');
+          break;
+        }
+        dict = dict.get('Parent');
+      }
+      if (!valueArray) {
+        return Dict.empty;
+      }
+      if (valueArray.length === 1 || !isDict(valueArray[0]) ||
+          loopCount > MAX_LOOP_COUNT) {
+        return valueArray[0];
+      }
+      return Dict.merge(this.xref, valueArray);
+    },
+
+    get content() {
+      return this.getPageProp('Contents');
+    },
+
+    get resources() {
+      // For robustness: The spec states that a \Resources entry has to be
+      // present, but can be empty. Some document omit it still, in this case
+      // we return an empty dictionary.
+      return shadow(this, 'resources', this.getInheritedPageProp('Resources'));
+    },
+
+    get mediaBox() {
+      var obj = this.getInheritedPageProp('MediaBox');
+      // Reset invalid media box to letter size.
+      if (!isArray(obj) || obj.length !== 4) {
+        obj = LETTER_SIZE_MEDIABOX;
+      }
+      return shadow(this, 'mediaBox', obj);
+    },
+
+    get view() {
+      var mediaBox = this.mediaBox;
+      var cropBox = this.getInheritedPageProp('CropBox');
+      if (!isArray(cropBox) || cropBox.length !== 4) {
+        return shadow(this, 'view', mediaBox);
+      }
+
+      // From the spec, 6th ed., p.963:
+      // "The crop, bleed, trim, and art boxes should not ordinarily
+      // extend beyond the boundaries of the media box. If they do, they are
+      // effectively reduced to their intersection with the media box."
+      cropBox = Util.intersect(cropBox, mediaBox);
+      if (!cropBox) {
+        return shadow(this, 'view', mediaBox);
+      }
+      return shadow(this, 'view', cropBox);
+    },
+
+    get rotate() {
+      var rotate = this.getInheritedPageProp('Rotate') || 0;
+      // Normalize rotation so it's a multiple of 90 and between 0 and 270
+      if (rotate % 90 !== 0) {
+        rotate = 0;
+      } else if (rotate >= 360) {
+        rotate = rotate % 360;
+      } else if (rotate < 0) {
+        // The spec doesn't cover negatives, assume its counterclockwise
+        // rotation. The following is the other implementation of modulo.
+        rotate = ((rotate % 360) + 360) % 360;
+      }
+      return shadow(this, 'rotate', rotate);
+    },
+
+    getContentStream: function Page_getContentStream() {
+      var content = this.content;
+      var stream;
+      if (isArray(content)) {
+        // fetching items
+        var xref = this.xref;
+        var i, n = content.length;
+        var streams = [];
+        for (i = 0; i < n; ++i) {
+          streams.push(xref.fetchIfRef(content[i]));
+        }
+        stream = new StreamsSequenceStream(streams);
+      } else if (isStream(content)) {
+        stream = content;
+      } else {
+        // replacing non-existent page content with empty one
+        stream = new NullStream();
+      }
+      return stream;
+    },
+
+    loadResources: function Page_loadResources(keys) {
+      if (!this.resourcesPromise) {
+        // TODO: add async getInheritedPageProp and remove this.
+        this.resourcesPromise = this.pdfManager.ensure(this, 'resources');
+      }
+      return this.resourcesPromise.then(function resourceSuccess() {
+        var objectLoader = new ObjectLoader(this.resources.map,
+                                            keys,
+                                            this.xref);
+        return objectLoader.load();
+      }.bind(this));
+    },
+
+    getOperatorList: function Page_getOperatorList(handler, task, intent) {
+      var self = this;
+
+      var pdfManager = this.pdfManager;
+      var contentStreamPromise = pdfManager.ensure(this, 'getContentStream',
+                                                   []);
+      var resourcesPromise = this.loadResources([
+        'ExtGState',
+        'ColorSpace',
+        'Pattern',
+        'Shading',
+        'XObject',
+        'Font'
+        // ProcSet
+        // Properties
+      ]);
+
+      var partialEvaluator = new PartialEvaluator(pdfManager, this.xref,
+                                                  handler, this.pageIndex,
+                                                  'p' + this.pageIndex + '_',
+                                                  this.idCounters,
+                                                  this.fontCache);
+
+      var dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);
+      var pageListPromise = dataPromises.then(function(data) {
+        var contentStream = data[0];
+        var opList = new OperatorList(intent, handler, self.pageIndex);
+
+        handler.send('StartRenderPage', {
+          transparency: partialEvaluator.hasBlendModes(self.resources),
+          pageIndex: self.pageIndex,
+          intent: intent
+        });
+        return partialEvaluator.getOperatorList(contentStream, task,
+          self.resources, opList).then(function () {
+            return opList;
+          });
+      });
+
+      var annotationsPromise = pdfManager.ensure(this, 'annotations');
+      return Promise.all([pageListPromise, annotationsPromise]).then(
+          function(datas) {
+        var pageOpList = datas[0];
+        var annotations = datas[1];
+
+        if (annotations.length === 0) {
+          pageOpList.flush(true);
+          return pageOpList;
+        }
+
+        var annotationsReadyPromise = Annotation.appendToOperatorList(
+          annotations, pageOpList, pdfManager, partialEvaluator, task, intent);
+        return annotationsReadyPromise.then(function () {
+          pageOpList.flush(true);
+          return pageOpList;
+        });
+      });
+    },
+
+    extractTextContent: function Page_extractTextContent(task) {
+      var handler = {
+        on: function nullHandlerOn() {},
+        send: function nullHandlerSend() {}
+      };
+
+      var self = this;
+
+      var pdfManager = this.pdfManager;
+      var contentStreamPromise = pdfManager.ensure(this, 'getContentStream',
+                                                   []);
+
+      var resourcesPromise = this.loadResources([
+        'ExtGState',
+        'XObject',
+        'Font'
+      ]);
+
+      var dataPromises = Promise.all([contentStreamPromise,
+                                      resourcesPromise]);
+      return dataPromises.then(function(data) {
+        var contentStream = data[0];
+        var partialEvaluator = new PartialEvaluator(pdfManager, self.xref,
+                                                    handler, self.pageIndex,
+                                                    'p' + self.pageIndex + '_',
+                                                    self.idCounters,
+                                                    self.fontCache);
+
+        return partialEvaluator.getTextContent(contentStream,
+                                               task,
+                                               self.resources);
+      });
+    },
+
+    getAnnotationsData: function Page_getAnnotationsData() {
+      var annotations = this.annotations;
+      var annotationsData = [];
+      for (var i = 0, n = annotations.length; i < n; ++i) {
+        annotationsData.push(annotations[i].data);
+      }
+      return annotationsData;
+    },
+
+    get annotations() {
+      var annotations = [];
+      var annotationRefs = this.getInheritedPageProp('Annots') || [];
+      var annotationFactory = new AnnotationFactory();
+      for (var i = 0, n = annotationRefs.length; i < n; ++i) {
+        var annotationRef = annotationRefs[i];
+        var annotation = annotationFactory.create(this.xref, annotationRef);
+        if (annotation &&
+            (annotation.isViewable() || annotation.isPrintable())) {
+          annotations.push(annotation);
+        }
+      }
+      return shadow(this, 'annotations', annotations);
+    }
+  };
+
+  return Page;
+})();
+
+/**
+ * The `PDFDocument` holds all the data of the PDF file. Compared to the
+ * `PDFDoc`, this one doesn't have any job management code.
+ * Right now there exists one PDFDocument on the main thread + one object
+ * for each worker. If there is no worker support enabled, there are two
+ * `PDFDocument` objects on the main thread created.
+ */
+var PDFDocument = (function PDFDocumentClosure() {
+  var FINGERPRINT_FIRST_BYTES = 1024;
+  var EMPTY_FINGERPRINT = '\x00\x00\x00\x00\x00\x00\x00' +
+    '\x00\x00\x00\x00\x00\x00\x00\x00\x00';
+
+  function PDFDocument(pdfManager, arg, password) {
+    if (isStream(arg)) {
+      init.call(this, pdfManager, arg, password);
+    } else if (isArrayBuffer(arg)) {
+      init.call(this, pdfManager, new Stream(arg), password);
+    } else {
+      error('PDFDocument: Unknown argument type');
+    }
+  }
+
+  function init(pdfManager, stream, password) {
+    assert(stream.length > 0, 'stream must have data');
+    this.pdfManager = pdfManager;
+    this.stream = stream;
+    var xref = new XRef(this.stream, password, pdfManager);
+    this.xref = xref;
+  }
+
+  function find(stream, needle, limit, backwards) {
+    var pos = stream.pos;
+    var end = stream.end;
+    var strBuf = [];
+    if (pos + limit > end) {
+      limit = end - pos;
+    }
+    for (var n = 0; n < limit; ++n) {
+      strBuf.push(String.fromCharCode(stream.getByte()));
+    }
+    var str = strBuf.join('');
+    stream.pos = pos;
+    var index = backwards ? str.lastIndexOf(needle) : str.indexOf(needle);
+    if (index === -1) {
+      return false; /* not found */
+    }
+    stream.pos += index;
+    return true; /* found */
+  }
+
+  var DocumentInfoValidators = {
+    get entries() {
+      // Lazily build this since all the validation functions below are not
+      // defined until after this file loads.
+      return shadow(this, 'entries', {
+        Title: isString,
+        Author: isString,
+        Subject: isString,
+        Keywords: isString,
+        Creator: isString,
+        Producer: isString,
+        CreationDate: isString,
+        ModDate: isString,
+        Trapped: isName
+      });
+    }
+  };
+
+  PDFDocument.prototype = {
+    parse: function PDFDocument_parse(recoveryMode) {
+      this.setup(recoveryMode);
+      var version = this.catalog.catDict.get('Version');
+      if (isName(version)) {
+        this.pdfFormatVersion = version.name;
+      }
+      try {
+        // checking if AcroForm is present
+        this.acroForm = this.catalog.catDict.get('AcroForm');
+        if (this.acroForm) {
+          this.xfa = this.acroForm.get('XFA');
+          var fields = this.acroForm.get('Fields');
+          if ((!fields || !isArray(fields) || fields.length === 0) &&
+              !this.xfa) {
+            // no fields and no XFA -- not a form (?)
+            this.acroForm = null;
+          }
+        }
+      } catch (ex) {
+        info('Something wrong with AcroForm entry');
+        this.acroForm = null;
+      }
+    },
+
+    get linearization() {
+      var linearization = null;
+      if (this.stream.length) {
+        try {
+          linearization = Linearization.create(this.stream);
+        } catch (err) {
+          if (err instanceof MissingDataException) {
+            throw err;
+          }
+          info(err);
+        }
+      }
+      // shadow the prototype getter with a data property
+      return shadow(this, 'linearization', linearization);
+    },
+    get startXRef() {
+      var stream = this.stream;
+      var startXRef = 0;
+      var linearization = this.linearization;
+      if (linearization) {
+        // Find end of first obj.
+        stream.reset();
+        if (find(stream, 'endobj', 1024)) {
+          startXRef = stream.pos + 6;
+        }
+      } else {
+        // Find startxref by jumping backward from the end of the file.
+        var step = 1024;
+        var found = false, pos = stream.end;
+        while (!found && pos > 0) {
+          pos -= step - 'startxref'.length;
+          if (pos < 0) {
+            pos = 0;
+          }
+          stream.pos = pos;
+          found = find(stream, 'startxref', step, true);
+        }
+        if (found) {
+          stream.skip(9);
+          var ch;
+          do {
+            ch = stream.getByte();
+          } while (Lexer.isSpace(ch));
+          var str = '';
+          while (ch >= 0x20 && ch <= 0x39) { // < '9'
+            str += String.fromCharCode(ch);
+            ch = stream.getByte();
+          }
+          startXRef = parseInt(str, 10);
+          if (isNaN(startXRef)) {
+            startXRef = 0;
+          }
+        }
+      }
+      // shadow the prototype getter with a data property
+      return shadow(this, 'startXRef', startXRef);
+    },
+    get mainXRefEntriesOffset() {
+      var mainXRefEntriesOffset = 0;
+      var linearization = this.linearization;
+      if (linearization) {
+        mainXRefEntriesOffset = linearization.mainXRefEntriesOffset;
+      }
+      // shadow the prototype getter with a data property
+      return shadow(this, 'mainXRefEntriesOffset', mainXRefEntriesOffset);
+    },
+    // Find the header, remove leading garbage and setup the stream
+    // starting from the header.
+    checkHeader: function PDFDocument_checkHeader() {
+      var stream = this.stream;
+      stream.reset();
+      if (find(stream, '%PDF-', 1024)) {
+        // Found the header, trim off any garbage before it.
+        stream.moveStart();
+        // Reading file format version
+        var MAX_VERSION_LENGTH = 12;
+        var version = '', ch;
+        while ((ch = stream.getByte()) > 0x20) { // SPACE
+          if (version.length >= MAX_VERSION_LENGTH) {
+            break;
+          }
+          version += String.fromCharCode(ch);
+        }
+        if (!this.pdfFormatVersion) {
+          // removing "%PDF-"-prefix
+          this.pdfFormatVersion = version.substring(5);
+        }
+        return;
+      }
+      // May not be a PDF file, continue anyway.
+    },
+    parseStartXRef: function PDFDocument_parseStartXRef() {
+      var startXRef = this.startXRef;
+      this.xref.setStartXRef(startXRef);
+    },
+    setup: function PDFDocument_setup(recoveryMode) {
+      this.xref.parse(recoveryMode);
+      this.catalog = new Catalog(this.pdfManager, this.xref);
+    },
+    get numPages() {
+      var linearization = this.linearization;
+      var num = linearization ? linearization.numPages : this.catalog.numPages;
+      // shadow the prototype getter
+      return shadow(this, 'numPages', num);
+    },
+    get documentInfo() {
+      var docInfo = {
+        PDFFormatVersion: this.pdfFormatVersion,
+        IsAcroFormPresent: !!this.acroForm,
+        IsXFAPresent: !!this.xfa
+      };
+      var infoDict;
+      try {
+        infoDict = this.xref.trailer.get('Info');
+      } catch (err) {
+        info('The document information dictionary is invalid.');
+      }
+      if (infoDict) {
+        var validEntries = DocumentInfoValidators.entries;
+        // Only fill the document info with valid entries from the spec.
+        for (var key in validEntries) {
+          if (infoDict.has(key)) {
+            var value = infoDict.get(key);
+            // Make sure the value conforms to the spec.
+            if (validEntries[key](value)) {
+              docInfo[key] = (typeof value !== 'string' ?
+                              value : stringToPDFString(value));
+            } else {
+              info('Bad value in document info for "' + key + '"');
+            }
+          }
+        }
+      }
+      return shadow(this, 'documentInfo', docInfo);
+    },
+    get fingerprint() {
+      var xref = this.xref, hash, fileID = '';
+      var idArray = xref.trailer.get('ID');
+
+      if (idArray && isArray(idArray) && idArray[0] && isString(idArray[0]) &&
+          idArray[0] !== EMPTY_FINGERPRINT) {
+        hash = stringToBytes(idArray[0]);
+      } else {
+        if (this.stream.ensureRange) {
+          this.stream.ensureRange(0,
+            Math.min(FINGERPRINT_FIRST_BYTES, this.stream.end));
+        }
+        hash = calculateMD5(this.stream.bytes.subarray(0,
+          FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES);
+      }
+
+      for (var i = 0, n = hash.length; i < n; i++) {
+        var hex = hash[i].toString(16);
+        fileID += hex.length === 1 ? '0' + hex : hex;
+      }
+
+      return shadow(this, 'fingerprint', fileID);
+    },
+
+    getPage: function PDFDocument_getPage(pageIndex) {
+      return this.catalog.getPage(pageIndex);
+    },
+
+    cleanup: function PDFDocument_cleanup() {
+      return this.catalog.cleanup();
+    }
+  };
+
+  return PDFDocument;
+})();
+
+
+var Name = (function NameClosure() {
+  function Name(name) {
+    this.name = name;
+  }
+
+  Name.prototype = {};
+
+  var nameCache = {};
+
+  Name.get = function Name_get(name) {
+    var nameValue = nameCache[name];
+    return (nameValue ? nameValue : (nameCache[name] = new Name(name)));
+  };
+
+  return Name;
+})();
+
+var Cmd = (function CmdClosure() {
+  function Cmd(cmd) {
+    this.cmd = cmd;
+  }
+
+  Cmd.prototype = {};
+
+  var cmdCache = {};
+
+  Cmd.get = function Cmd_get(cmd) {
+    var cmdValue = cmdCache[cmd];
+    return (cmdValue ? cmdValue : (cmdCache[cmd] = new Cmd(cmd)));
+  };
+
+  return Cmd;
+})();
+
+var Dict = (function DictClosure() {
+  var nonSerializable = function nonSerializableClosure() {
+    return nonSerializable; // creating closure on some variable
+  };
+
+  var GETALL_DICTIONARY_TYPES_WHITELIST = {
+    'Background': true,
+    'ExtGState': true,
+    'Halftone': true,
+    'Layout': true,
+    'Mask': true,
+    'Pagination': true,
+    'Printing': true
+  };
+
+  function isRecursionAllowedFor(dict) {
+    if (!isName(dict.Type)) {
+      return true;
+    }
+    var dictType = dict.Type.name;
+    return GETALL_DICTIONARY_TYPES_WHITELIST[dictType] === true;
+  }
+
+  // xref is optional
+  function Dict(xref) {
+    // Map should only be used internally, use functions below to access.
+    this.map = Object.create(null);
+    this.xref = xref;
+    this.objId = null;
+    this.__nonSerializable__ = nonSerializable; // disable cloning of the Dict
+  }
+
+  Dict.prototype = {
+    assignXref: function Dict_assignXref(newXref) {
+      this.xref = newXref;
+    },
+
+    // automatically dereferences Ref objects
+    get: function Dict_get(key1, key2, key3) {
+      var value;
+      var xref = this.xref;
+      if (typeof (value = this.map[key1]) !== 'undefined' || key1 in this.map ||
+          typeof key2 === 'undefined') {
+        return xref ? xref.fetchIfRef(value) : value;
+      }
+      if (typeof (value = this.map[key2]) !== 'undefined' || key2 in this.map ||
+          typeof key3 === 'undefined') {
+        return xref ? xref.fetchIfRef(value) : value;
+      }
+      value = this.map[key3] || null;
+      return xref ? xref.fetchIfRef(value) : value;
+    },
+
+    // Same as get(), but returns a promise and uses fetchIfRefAsync().
+    getAsync: function Dict_getAsync(key1, key2, key3) {
+      var value;
+      var xref = this.xref;
+      if (typeof (value = this.map[key1]) !== 'undefined' || key1 in this.map ||
+          typeof key2 === 'undefined') {
+        if (xref) {
+          return xref.fetchIfRefAsync(value);
+        }
+        return Promise.resolve(value);
+      }
+      if (typeof (value = this.map[key2]) !== 'undefined' || key2 in this.map ||
+          typeof key3 === 'undefined') {
+        if (xref) {
+          return xref.fetchIfRefAsync(value);
+        }
+        return Promise.resolve(value);
+      }
+      value = this.map[key3] || null;
+      if (xref) {
+        return xref.fetchIfRefAsync(value);
+      }
+      return Promise.resolve(value);
+    },
+
+    // Same as get(), but dereferences all elements if the result is an Array.
+    getArray: function Dict_getArray(key1, key2, key3) {
+      var value = this.get(key1, key2, key3);
+      var xref = this.xref;
+      if (!isArray(value) || !xref) {
+        return value;
+      }
+      value = value.slice(); // Ensure that we don't modify the Dict data.
+      for (var i = 0, ii = value.length; i < ii; i++) {
+        if (!isRef(value[i])) {
+          continue;
+        }
+        value[i] = xref.fetch(value[i]);
+      }
+      return value;
+    },
+
+    // no dereferencing
+    getRaw: function Dict_getRaw(key) {
+      return this.map[key];
+    },
+
+    // creates new map and dereferences all Refs
+    getAll: function Dict_getAll() {
+      var all = Object.create(null);
+      var queue = null;
+      var key, obj;
+      for (key in this.map) {
+        obj = this.get(key);
+        if (obj instanceof Dict) {
+          if (isRecursionAllowedFor(obj)) {
+            (queue || (queue = [])).push({target: all, key: key, obj: obj});
+          } else {
+            all[key] = this.getRaw(key);
+          }
+        } else {
+          all[key] = obj;
+        }
+      }
+      if (!queue) {
+        return all;
+      }
+
+      // trying to take cyclic references into the account
+      var processed = Object.create(null);
+      while (queue.length > 0) {
+        var item = queue.shift();
+        var itemObj = item.obj;
+        var objId = itemObj.objId;
+        if (objId && objId in processed) {
+          item.target[item.key] = processed[objId];
+          continue;
+        }
+        var dereferenced = Object.create(null);
+        for (key in itemObj.map) {
+          obj = itemObj.get(key);
+          if (obj instanceof Dict) {
+            if (isRecursionAllowedFor(obj)) {
+              queue.push({target: dereferenced, key: key, obj: obj});
+            } else {
+              dereferenced[key] = itemObj.getRaw(key);
+            }
+          } else {
+            dereferenced[key] = obj;
+          }
+        }
+        if (objId) {
+          processed[objId] = dereferenced;
+        }
+        item.target[item.key] = dereferenced;
+      }
+      return all;
+    },
+
+    getKeys: function Dict_getKeys() {
+      return Object.keys(this.map);
+    },
+
+    set: function Dict_set(key, value) {
+      this.map[key] = value;
+    },
+
+    has: function Dict_has(key) {
+      return key in this.map;
+    },
+
+    forEach: function Dict_forEach(callback) {
+      for (var key in this.map) {
+        callback(key, this.get(key));
+      }
+    }
+  };
+
+  Dict.empty = new Dict(null);
+
+  Dict.merge = function Dict_merge(xref, dictArray) {
+    var mergedDict = new Dict(xref);
+
+    for (var i = 0, ii = dictArray.length; i < ii; i++) {
+      var dict = dictArray[i];
+      if (!isDict(dict)) {
+        continue;
+      }
+      for (var keyName in dict.map) {
+        if (mergedDict.map[keyName]) {
+          continue;
+        }
+        mergedDict.map[keyName] = dict.map[keyName];
+      }
+    }
+    return mergedDict;
+  };
+
+  return Dict;
+})();
+
+var Ref = (function RefClosure() {
+  function Ref(num, gen) {
+    this.num = num;
+    this.gen = gen;
+  }
+
+  Ref.prototype = {
+    toString: function Ref_toString() {
+      // This function is hot, so we make the string as compact as possible.
+      // |this.gen| is almost always zero, so we treat that case specially.
+      var str = this.num + 'R';
+      if (this.gen !== 0) {
+        str += this.gen;
+      }
+      return str;
+    }
+  };
+
+  return Ref;
+})();
+
+// The reference is identified by number and generation.
+// This structure stores only one instance of the reference.
+var RefSet = (function RefSetClosure() {
+  function RefSet() {
+    this.dict = {};
+  }
+
+  RefSet.prototype = {
+    has: function RefSet_has(ref) {
+      return ref.toString() in this.dict;
+    },
+
+    put: function RefSet_put(ref) {
+      this.dict[ref.toString()] = true;
+    },
+
+    remove: function RefSet_remove(ref) {
+      delete this.dict[ref.toString()];
+    }
+  };
+
+  return RefSet;
+})();
+
+var RefSetCache = (function RefSetCacheClosure() {
+  function RefSetCache() {
+    this.dict = Object.create(null);
+  }
+
+  RefSetCache.prototype = {
+    get: function RefSetCache_get(ref) {
+      return this.dict[ref.toString()];
+    },
+
+    has: function RefSetCache_has(ref) {
+      return ref.toString() in this.dict;
+    },
+
+    put: function RefSetCache_put(ref, obj) {
+      this.dict[ref.toString()] = obj;
+    },
+
+    putAlias: function RefSetCache_putAlias(ref, aliasRef) {
+      this.dict[ref.toString()] = this.get(aliasRef);
+    },
+
+    forEach: function RefSetCache_forEach(fn, thisArg) {
+      for (var i in this.dict) {
+        fn.call(thisArg, this.dict[i]);
+      }
+    },
+
+    clear: function RefSetCache_clear() {
+      this.dict = Object.create(null);
+    }
+  };
+
+  return RefSetCache;
+})();
+
+var Catalog = (function CatalogClosure() {
+  function Catalog(pdfManager, xref) {
+    this.pdfManager = pdfManager;
+    this.xref = xref;
+    this.catDict = xref.getCatalogObj();
+    this.fontCache = new RefSetCache();
+    assert(isDict(this.catDict),
+      'catalog object is not a dictionary');
+
+    this.pagePromises = [];
+  }
+
+  Catalog.prototype = {
+    get metadata() {
+      var streamRef = this.catDict.getRaw('Metadata');
+      if (!isRef(streamRef)) {
+        return shadow(this, 'metadata', null);
+      }
+
+      var encryptMetadata = (!this.xref.encrypt ? false :
+                             this.xref.encrypt.encryptMetadata);
+
+      var stream = this.xref.fetch(streamRef, !encryptMetadata);
+      var metadata;
+      if (stream && isDict(stream.dict)) {
+        var type = stream.dict.get('Type');
+        var subtype = stream.dict.get('Subtype');
+
+        if (isName(type) && isName(subtype) &&
+            type.name === 'Metadata' && subtype.name === 'XML') {
+          // XXX: This should examine the charset the XML document defines,
+          // however since there are currently no real means to decode
+          // arbitrary charsets, let's just hope that the author of the PDF
+          // was reasonable enough to stick with the XML default charset,
+          // which is UTF-8.
+          try {
+            metadata = stringToUTF8String(bytesToString(stream.getBytes()));
+          } catch (e) {
+            info('Skipping invalid metadata.');
+          }
+        }
+      }
+
+      return shadow(this, 'metadata', metadata);
+    },
+    get toplevelPagesDict() {
+      var pagesObj = this.catDict.get('Pages');
+      assert(isDict(pagesObj), 'invalid top-level pages dictionary');
+      // shadow the prototype getter
+      return shadow(this, 'toplevelPagesDict', pagesObj);
+    },
+    get documentOutline() {
+      var obj = null;
+      try {
+        obj = this.readDocumentOutline();
+      } catch (ex) {
+        if (ex instanceof MissingDataException) {
+          throw ex;
+        }
+        warn('Unable to read document outline');
+      }
+      return shadow(this, 'documentOutline', obj);
+    },
+    readDocumentOutline: function Catalog_readDocumentOutline() {
+      var xref = this.xref;
+      var obj = this.catDict.get('Outlines');
+      var root = { items: [] };
+      if (isDict(obj)) {
+        obj = obj.getRaw('First');
+        var processed = new RefSet();
+        if (isRef(obj)) {
+          var queue = [{obj: obj, parent: root}];
+          // to avoid recursion keeping track of the items
+          // in the processed dictionary
+          processed.put(obj);
+          while (queue.length > 0) {
+            var i = queue.shift();
+            var outlineDict = xref.fetchIfRef(i.obj);
+            if (outlineDict === null) {
+              continue;
+            }
+            if (!outlineDict.has('Title')) {
+              error('Invalid outline item');
+            }
+            var dest = outlineDict.get('A');
+            if (dest) {
+              dest = dest.get('D');
+            } else if (outlineDict.has('Dest')) {
+              dest = outlineDict.getRaw('Dest');
+              if (isName(dest)) {
+                dest = dest.name;
+              }
+            }
+            var title = outlineDict.get('Title');
+            var outlineItem = {
+              dest: dest,
+              title: stringToPDFString(title),
+              color: outlineDict.get('C') || [0, 0, 0],
+              count: outlineDict.get('Count'),
+              bold: !!(outlineDict.get('F') & 2),
+              italic: !!(outlineDict.get('F') & 1),
+              items: []
+            };
+            i.parent.items.push(outlineItem);
+            obj = outlineDict.getRaw('First');
+            if (isRef(obj) && !processed.has(obj)) {
+              queue.push({obj: obj, parent: outlineItem});
+              processed.put(obj);
+            }
+            obj = outlineDict.getRaw('Next');
+            if (isRef(obj) && !processed.has(obj)) {
+              queue.push({obj: obj, parent: i.parent});
+              processed.put(obj);
+            }
+          }
+        }
+      }
+      return (root.items.length > 0 ? root.items : null);
+    },
+    get numPages() {
+      var obj = this.toplevelPagesDict.get('Count');
+      assert(
+        isInt(obj),
+        'page count in top level pages object is not an integer'
+      );
+      // shadow the prototype getter
+      return shadow(this, 'num', obj);
+    },
+    get destinations() {
+      function fetchDestination(dest) {
+        return isDict(dest) ? dest.get('D') : dest;
+      }
+
+      var xref = this.xref;
+      var dests = {}, nameTreeRef, nameDictionaryRef;
+      var obj = this.catDict.get('Names');
+      if (obj && obj.has('Dests')) {
+        nameTreeRef = obj.getRaw('Dests');
+      } else if (this.catDict.has('Dests')) {
+        nameDictionaryRef = this.catDict.get('Dests');
+      }
+
+      if (nameDictionaryRef) {
+        // reading simple destination dictionary
+        obj = nameDictionaryRef;
+        obj.forEach(function catalogForEach(key, value) {
+          if (!value) {
+            return;
+          }
+          dests[key] = fetchDestination(value);
+        });
+      }
+      if (nameTreeRef) {
+        var nameTree = new NameTree(nameTreeRef, xref);
+        var names = nameTree.getAll();
+        for (var name in names) {
+          if (!names.hasOwnProperty(name)) {
+            continue;
+          }
+          dests[name] = fetchDestination(names[name]);
+        }
+      }
+      return shadow(this, 'destinations', dests);
+    },
+    getDestination: function Catalog_getDestination(destinationId) {
+      function fetchDestination(dest) {
+        return isDict(dest) ? dest.get('D') : dest;
+      }
+
+      var xref = this.xref;
+      var dest = null, nameTreeRef, nameDictionaryRef;
+      var obj = this.catDict.get('Names');
+      if (obj && obj.has('Dests')) {
+        nameTreeRef = obj.getRaw('Dests');
+      } else if (this.catDict.has('Dests')) {
+        nameDictionaryRef = this.catDict.get('Dests');
+      }
+
+      if (nameDictionaryRef) { // Simple destination dictionary.
+        var value = nameDictionaryRef.get(destinationId);
+        if (value) {
+          dest = fetchDestination(value);
+        }
+      }
+      if (nameTreeRef) {
+        var nameTree = new NameTree(nameTreeRef, xref);
+        dest = fetchDestination(nameTree.get(destinationId));
+      }
+      return dest;
+    },
+    get attachments() {
+      var xref = this.xref;
+      var attachments = null, nameTreeRef;
+      var obj = this.catDict.get('Names');
+      if (obj) {
+        nameTreeRef = obj.getRaw('EmbeddedFiles');
+      }
+
+      if (nameTreeRef) {
+        var nameTree = new NameTree(nameTreeRef, xref);
+        var names = nameTree.getAll();
+        for (var name in names) {
+          if (!names.hasOwnProperty(name)) {
+            continue;
+          }
+          var fs = new FileSpec(names[name], xref);
+          if (!attachments) {
+            attachments = {};
+          }
+          attachments[stringToPDFString(name)] = fs.serializable;
+        }
+      }
+      return shadow(this, 'attachments', attachments);
+    },
+    get javaScript() {
+      var xref = this.xref;
+      var obj = this.catDict.get('Names');
+
+      var javaScript = [];
+      function appendIfJavaScriptDict(jsDict) {
+        var type = jsDict.get('S');
+        if (!isName(type) || type.name !== 'JavaScript') {
+          return;
+        }
+        var js = jsDict.get('JS');
+        if (isStream(js)) {
+          js = bytesToString(js.getBytes());
+        } else if (!isString(js)) {
+          return;
+        }
+        javaScript.push(stringToPDFString(js));
+      }
+      if (obj && obj.has('JavaScript')) {
+        var nameTree = new NameTree(obj.getRaw('JavaScript'), xref);
+        var names = nameTree.getAll();
+        for (var name in names) {
+          if (!names.hasOwnProperty(name)) {
+            continue;
+          }
+          // We don't really use the JavaScript right now. This code is
+          // defensive so we don't cause errors on document load.
+          var jsDict = names[name];
+          if (isDict(jsDict)) {
+            appendIfJavaScriptDict(jsDict);
+          }
+        }
+      }
+
+      // Append OpenAction actions to javaScript array
+      var openactionDict = this.catDict.get('OpenAction');
+      if (isDict(openactionDict, 'Action')) {
+        var actionType = openactionDict.get('S');
+        if (isName(actionType) && actionType.name === 'Named') {
+          // The named Print action is not a part of the PDF 1.7 specification,
+          // but is supported by many PDF readers/writers (including Adobe's).
+          var action = openactionDict.get('N');
+          if (isName(action) && action.name === 'Print') {
+            javaScript.push('print({});');
+          }
+        } else {
+          appendIfJavaScriptDict(openactionDict);
+        }
+      }
+
+      return shadow(this, 'javaScript', javaScript);
+    },
+
+    cleanup: function Catalog_cleanup() {
+      var promises = [];
+      this.fontCache.forEach(function (promise) {
+        promises.push(promise);
+      });
+      return Promise.all(promises).then(function (translatedFonts) {
+        for (var i = 0, ii = translatedFonts.length; i < ii; i++) {
+          var font = translatedFonts[i].dict;
+          delete font.translated;
+        }
+        this.fontCache.clear();
+      }.bind(this));
+    },
+
+    getPage: function Catalog_getPage(pageIndex) {
+      if (!(pageIndex in this.pagePromises)) {
+        this.pagePromises[pageIndex] = this.getPageDict(pageIndex).then(
+          function (a) {
+            var dict = a[0];
+            var ref = a[1];
+            return new Page(this.pdfManager, this.xref, pageIndex, dict, ref,
+                            this.fontCache);
+          }.bind(this)
+        );
+      }
+      return this.pagePromises[pageIndex];
+    },
+
+    getPageDict: function Catalog_getPageDict(pageIndex) {
+      var capability = createPromiseCapability();
+      var nodesToVisit = [this.catDict.getRaw('Pages')];
+      var currentPageIndex = 0;
+      var xref = this.xref;
+      var checkAllKids = false;
+
+      function next() {
+        while (nodesToVisit.length) {
+          var currentNode = nodesToVisit.pop();
+
+          if (isRef(currentNode)) {
+            xref.fetchAsync(currentNode).then(function (obj) {
+              if (isDict(obj, 'Page') || (isDict(obj) && !obj.has('Kids'))) {
+                if (pageIndex === currentPageIndex) {
+                  capability.resolve([obj, currentNode]);
+                } else {
+                  currentPageIndex++;
+                  next();
+                }
+                return;
+              }
+              nodesToVisit.push(obj);
+              next();
+            }, capability.reject);
+            return;
+          }
+
+          // Must be a child page dictionary.
+          assert(
+            isDict(currentNode),
+            'page dictionary kid reference points to wrong type of object'
+          );
+          var count = currentNode.get('Count');
+          // If the current node doesn't have any children, avoid getting stuck
+          // in an empty node further down in the tree (see issue5644.pdf).
+          if (count === 0) {
+            checkAllKids = true;
+          }
+          // Skip nodes where the page can't be.
+          if (currentPageIndex + count <= pageIndex) {
+            currentPageIndex += count;
+            continue;
+          }
+
+          var kids = currentNode.get('Kids');
+          assert(isArray(kids), 'page dictionary kids object is not an array');
+          if (!checkAllKids && count === kids.length) {
+            // Nodes that don't have the page have been skipped and this is the
+            // bottom of the tree which means the page requested must be a
+            // descendant of this pages node. Ideally we would just resolve the
+            // promise with the page ref here, but there is the case where more
+            // pages nodes could link to single a page (see issue 3666 pdf). To
+            // handle this push it back on the queue so if it is a pages node it
+            // will be descended into.
+            nodesToVisit = [kids[pageIndex - currentPageIndex]];
+            currentPageIndex = pageIndex;
+            continue;
+          } else {
+            for (var last = kids.length - 1; last >= 0; last--) {
+              nodesToVisit.push(kids[last]);
+            }
+          }
+        }
+        capability.reject('Page index ' + pageIndex + ' not found.');
+      }
+      next();
+      return capability.promise;
+    },
+
+    getPageIndex: function Catalog_getPageIndex(ref) {
+      // The page tree nodes have the count of all the leaves below them. To get
+      // how many pages are before we just have to walk up the tree and keep
+      // adding the count of siblings to the left of the node.
+      var xref = this.xref;
+      function pagesBeforeRef(kidRef) {
+        var total = 0;
+        var parentRef;
+        return xref.fetchAsync(kidRef).then(function (node) {
+          if (!node) {
+            return null;
+          }
+          parentRef = node.getRaw('Parent');
+          return node.getAsync('Parent');
+        }).then(function (parent) {
+          if (!parent) {
+            return null;
+          }
+          return parent.getAsync('Kids');
+        }).then(function (kids) {
+          if (!kids) {
+            return null;
+          }
+          var kidPromises = [];
+          var found = false;
+          for (var i = 0; i < kids.length; i++) {
+            var kid = kids[i];
+            assert(isRef(kid), 'kids must be a ref');
+            if (kid.num === kidRef.num) {
+              found = true;
+              break;
+            }
+            kidPromises.push(xref.fetchAsync(kid).then(function (kid) {
+              if (kid.has('Count')) {
+                var count = kid.get('Count');
+                total += count;
+              } else { // page leaf node
+                total++;
+              }
+            }));
+          }
+          if (!found) {
+            error('kid ref not found in parents kids');
+          }
+          return Promise.all(kidPromises).then(function () {
+            return [total, parentRef];
+          });
+        });
+      }
+
+      var total = 0;
+      function next(ref) {
+        return pagesBeforeRef(ref).then(function (args) {
+          if (!args) {
+            return total;
+          }
+          var count = args[0];
+          var parentRef = args[1];
+          total += count;
+          return next(parentRef);
+        });
+      }
+
+      return next(ref);
+    }
+  };
+
+  return Catalog;
+})();
+
+var XRef = (function XRefClosure() {
+  function XRef(stream, password) {
+    this.stream = stream;
+    this.entries = [];
+    this.xrefstms = {};
+    // prepare the XRef cache
+    this.cache = [];
+    this.password = password;
+    this.stats = {
+      streamTypes: [],
+      fontTypes: []
+    };
+  }
+
+  XRef.prototype = {
+    setStartXRef: function XRef_setStartXRef(startXRef) {
+      // Store the starting positions of xref tables as we process them
+      // so we can recover from missing data errors
+      this.startXRefQueue = [startXRef];
+    },
+
+    parse: function XRef_parse(recoveryMode) {
+      var trailerDict;
+      if (!recoveryMode) {
+        trailerDict = this.readXRef();
+      } else {
+        warn('Indexing all PDF objects');
+        trailerDict = this.indexObjects();
+      }
+      trailerDict.assignXref(this);
+      this.trailer = trailerDict;
+      var encrypt = trailerDict.get('Encrypt');
+      if (encrypt) {
+        var ids = trailerDict.get('ID');
+        var fileId = (ids && ids.length) ? ids[0] : '';
+        this.encrypt = new CipherTransformFactory(encrypt, fileId,
+                                                  this.password);
+      }
+
+      // get the root dictionary (catalog) object
+      if (!(this.root = trailerDict.get('Root'))) {
+        error('Invalid root reference');
+      }
+    },
+
+    processXRefTable: function XRef_processXRefTable(parser) {
+      if (!('tableState' in this)) {
+        // Stores state of the table as we process it so we can resume
+        // from middle of table in case of missing data error
+        this.tableState = {
+          entryNum: 0,
+          streamPos: parser.lexer.stream.pos,
+          parserBuf1: parser.buf1,
+          parserBuf2: parser.buf2
+        };
+      }
+
+      var obj = this.readXRefTable(parser);
+
+      // Sanity check
+      if (!isCmd(obj, 'trailer')) {
+        error('Invalid XRef table: could not find trailer dictionary');
+      }
+      // Read trailer dictionary, e.g.
+      // trailer
+      //    << /Size 22
+      //      /Root 20R
+      //      /Info 10R
+      //      /ID [ <81b14aafa313db63dbd6f981e49f94f4> ]
+      //    >>
+      // The parser goes through the entire stream << ... >> and provides
+      // a getter interface for the key-value table
+      var dict = parser.getObj();
+
+      // The pdflib PDF generator can generate a nested trailer dictionary
+      if (!isDict(dict) && dict.dict) {
+        dict = dict.dict;
+      }
+      if (!isDict(dict)) {
+        error('Invalid XRef table: could not parse trailer dictionary');
+      }
+      delete this.tableState;
+
+      return dict;
+    },
+
+    readXRefTable: function XRef_readXRefTable(parser) {
+      // Example of cross-reference table:
+      // xref
+      // 0 1                    <-- subsection header (first obj #, obj count)
+      // 0000000000 65535 f     <-- actual object (offset, generation #, f/n)
+      // 23 2                   <-- subsection header ... and so on ...
+      // 0000025518 00002 n
+      // 0000025635 00000 n
+      // trailer
+      // ...
+
+      var stream = parser.lexer.stream;
+      var tableState = this.tableState;
+      stream.pos = tableState.streamPos;
+      parser.buf1 = tableState.parserBuf1;
+      parser.buf2 = tableState.parserBuf2;
+
+      // Outer loop is over subsection headers
+      var obj;
+
+      while (true) {
+        if (!('firstEntryNum' in tableState) || !('entryCount' in tableState)) {
+          if (isCmd(obj = parser.getObj(), 'trailer')) {
+            break;
+          }
+          tableState.firstEntryNum = obj;
+          tableState.entryCount = parser.getObj();
+        }
+
+        var first = tableState.firstEntryNum;
+        var count = tableState.entryCount;
+        if (!isInt(first) || !isInt(count)) {
+          error('Invalid XRef table: wrong types in subsection header');
+        }
+        // Inner loop is over objects themselves
+        for (var i = tableState.entryNum; i < count; i++) {
+          tableState.streamPos = stream.pos;
+          tableState.entryNum = i;
+          tableState.parserBuf1 = parser.buf1;
+          tableState.parserBuf2 = parser.buf2;
+
+          var entry = {};
+          entry.offset = parser.getObj();
+          entry.gen = parser.getObj();
+          var type = parser.getObj();
+
+          if (isCmd(type, 'f')) {
+            entry.free = true;
+          } else if (isCmd(type, 'n')) {
+            entry.uncompressed = true;
+          }
+
+          // Validate entry obj
+          if (!isInt(entry.offset) || !isInt(entry.gen) ||
+              !(entry.free || entry.uncompressed)) {
+            error('Invalid entry in XRef subsection: ' + first + ', ' + count);
+          }
+
+          if (!this.entries[i + first]) {
+            this.entries[i + first] = entry;
+          }
+        }
+
+        tableState.entryNum = 0;
+        tableState.streamPos = stream.pos;
+        tableState.parserBuf1 = parser.buf1;
+        tableState.parserBuf2 = parser.buf2;
+        delete tableState.firstEntryNum;
+        delete tableState.entryCount;
+      }
+
+      // Per issue 3248: hp scanners generate bad XRef
+      if (first === 1 && this.entries[1] && this.entries[1].free) {
+        // shifting the entries
+        this.entries.shift();
+      }
+
+      // Sanity check: as per spec, first object must be free
+      if (this.entries[0] && !this.entries[0].free) {
+        error('Invalid XRef table: unexpected first object');
+      }
+      return obj;
+    },
+
+    processXRefStream: function XRef_processXRefStream(stream) {
+      if (!('streamState' in this)) {
+        // Stores state of the stream as we process it so we can resume
+        // from middle of stream in case of missing data error
+        var streamParameters = stream.dict;
+        var byteWidths = streamParameters.get('W');
+        var range = streamParameters.get('Index');
+        if (!range) {
+          range = [0, streamParameters.get('Size')];
+        }
+
+        this.streamState = {
+          entryRanges: range,
+          byteWidths: byteWidths,
+          entryNum: 0,
+          streamPos: stream.pos
+        };
+      }
+      this.readXRefStream(stream);
+      delete this.streamState;
+
+      return stream.dict;
+    },
+
+    readXRefStream: function XRef_readXRefStream(stream) {
+      var i, j;
+      var streamState = this.streamState;
+      stream.pos = streamState.streamPos;
+
+      var byteWidths = streamState.byteWidths;
+      var typeFieldWidth = byteWidths[0];
+      var offsetFieldWidth = byteWidths[1];
+      var generationFieldWidth = byteWidths[2];
+
+      var entryRanges = streamState.entryRanges;
+      while (entryRanges.length > 0) {
+        var first = entryRanges[0];
+        var n = entryRanges[1];
+
+        if (!isInt(first) || !isInt(n)) {
+          error('Invalid XRef range fields: ' + first + ', ' + n);
+        }
+        if (!isInt(typeFieldWidth) || !isInt(offsetFieldWidth) ||
+            !isInt(generationFieldWidth)) {
+          error('Invalid XRef entry fields length: ' + first + ', ' + n);
+        }
+        for (i = streamState.entryNum; i < n; ++i) {
+          streamState.entryNum = i;
+          streamState.streamPos = stream.pos;
+
+          var type = 0, offset = 0, generation = 0;
+          for (j = 0; j < typeFieldWidth; ++j) {
+            type = (type << 8) | stream.getByte();
+          }
+          // if type field is absent, its default value is 1
+          if (typeFieldWidth === 0) {
+            type = 1;
+          }
+          for (j = 0; j < offsetFieldWidth; ++j) {
+            offset = (offset << 8) | stream.getByte();
+          }
+          for (j = 0; j < generationFieldWidth; ++j) {
+            generation = (generation << 8) | stream.getByte();
+          }
+          var entry = {};
+          entry.offset = offset;
+          entry.gen = generation;
+          switch (type) {
+            case 0:
+              entry.free = true;
+              break;
+            case 1:
+              entry.uncompressed = true;
+              break;
+            case 2:
+              break;
+            default:
+              error('Invalid XRef entry type: ' + type);
+          }
+          if (!this.entries[first + i]) {
+            this.entries[first + i] = entry;
+          }
+        }
+
+        streamState.entryNum = 0;
+        streamState.streamPos = stream.pos;
+        entryRanges.splice(0, 2);
+      }
+    },
+
+    indexObjects: function XRef_indexObjects() {
+      // Simple scan through the PDF content to find objects,
+      // trailers and XRef streams.
+      var TAB = 0x9, LF = 0xA, CR = 0xD, SPACE = 0x20;
+      var PERCENT = 0x25, LT = 0x3C;
+
+      function readToken(data, offset) {
+        var token = '', ch = data[offset];
+        while (ch !== LF && ch !== CR && ch !== LT) {
+          if (++offset >= data.length) {
+            break;
+          }
+          token += String.fromCharCode(ch);
+          ch = data[offset];
+        }
+        return token;
+      }
+      function skipUntil(data, offset, what) {
+        var length = what.length, dataLength = data.length;
+        var skipped = 0;
+        // finding byte sequence
+        while (offset < dataLength) {
+          var i = 0;
+          while (i < length && data[offset + i] === what[i]) {
+            ++i;
+          }
+          if (i >= length) {
+            break; // sequence found
+          }
+          offset++;
+          skipped++;
+        }
+        return skipped;
+      }
+      var objRegExp = /^(\d+)\s+(\d+)\s+obj\b/;
+      var trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]);
+      var startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114,
+                                          101, 102]);
+      var endobjBytes = new Uint8Array([101, 110, 100, 111, 98, 106]);
+      var xrefBytes = new Uint8Array([47, 88, 82, 101, 102]);
+
+      // Clear out any existing entries, since they may be bogus.
+      this.entries.length = 0;
+
+      var stream = this.stream;
+      stream.pos = 0;
+      var buffer = stream.getBytes();
+      var position = stream.start, length = buffer.length;
+      var trailers = [], xrefStms = [];
+      while (position < length) {
+        var ch = buffer[position];
+        if (ch === TAB || ch === LF || ch === CR || ch === SPACE) {
+          ++position;
+          continue;
+        }
+        if (ch === PERCENT) { // %-comment
+          do {
+            ++position;
+            if (position >= length) {
+              break;
+            }
+            ch = buffer[position];
+          } while (ch !== LF && ch !== CR);
+          continue;
+        }
+        var token = readToken(buffer, position);
+        var m;
+        if (token.indexOf('xref') === 0 &&
+            (token.length === 4 || /\s/.test(token[4]))) {
+          position += skipUntil(buffer, position, trailerBytes);
+          trailers.push(position);
+          position += skipUntil(buffer, position, startxrefBytes);
+        } else if ((m = objRegExp.exec(token))) {
+          if (typeof this.entries[m[1]] === 'undefined') {
+            this.entries[m[1]] = {
+              offset: position - stream.start,
+              gen: m[2] | 0,
+              uncompressed: true
+            };
+          }
+          var contentLength = skipUntil(buffer, position, endobjBytes) + 7;
+          var content = buffer.subarray(position, position + contentLength);
+
+          // checking XRef stream suspect
+          // (it shall have '/XRef' and next char is not a letter)
+          var xrefTagOffset = skipUntil(content, 0, xrefBytes);
+          if (xrefTagOffset < contentLength &&
+              content[xrefTagOffset + 5] < 64) {
+            xrefStms.push(position - stream.start);
+            this.xrefstms[position - stream.start] = 1; // Avoid recursion
+          }
+
+          position += contentLength;
+        } else if (token.indexOf('trailer') === 0 &&
+                   (token.length === 7 || /\s/.test(token[7]))) {
+          trailers.push(position);
+          position += skipUntil(buffer, position, startxrefBytes);
+        } else {
+          position += token.length + 1;
+        }
+      }
+      // reading XRef streams
+      var i, ii;
+      for (i = 0, ii = xrefStms.length; i < ii; ++i) {
+        this.startXRefQueue.push(xrefStms[i]);
+        this.readXRef(/* recoveryMode */ true);
+      }
+      // finding main trailer
+      var dict;
+      for (i = 0, ii = trailers.length; i < ii; ++i) {
+        stream.pos = trailers[i];
+        var parser = new Parser(new Lexer(stream), true, this);
+        var obj = parser.getObj();
+        if (!isCmd(obj, 'trailer')) {
+          continue;
+        }
+        // read the trailer dictionary
+        if (!isDict(dict = parser.getObj())) {
+          continue;
+        }
+        // taking the first one with 'ID'
+        if (dict.has('ID')) {
+          return dict;
+        }
+      }
+      // no tailer with 'ID', taking last one (if exists)
+      if (dict) {
+        return dict;
+      }
+      // nothing helps
+      // calling error() would reject worker with an UnknownErrorException.
+      throw new InvalidPDFException('Invalid PDF structure');
+    },
+
+    readXRef: function XRef_readXRef(recoveryMode) {
+      var stream = this.stream;
+
+      try {
+        while (this.startXRefQueue.length) {
+          var startXRef = this.startXRefQueue[0];
+
+          stream.pos = startXRef + stream.start;
+
+          var parser = new Parser(new Lexer(stream), true, this);
+          var obj = parser.getObj();
+          var dict;
+
+          // Get dictionary
+          if (isCmd(obj, 'xref')) {
+            // Parse end-of-file XRef
+            dict = this.processXRefTable(parser);
+            if (!this.topDict) {
+              this.topDict = dict;
+            }
+
+            // Recursively get other XRefs 'XRefStm', if any
+            obj = dict.get('XRefStm');
+            if (isInt(obj)) {
+              var pos = obj;
+              // ignore previously loaded xref streams
+              // (possible infinite recursion)
+              if (!(pos in this.xrefstms)) {
+                this.xrefstms[pos] = 1;
+                this.startXRefQueue.push(pos);
+              }
+            }
+          } else if (isInt(obj)) {
+            // Parse in-stream XRef
+            if (!isInt(parser.getObj()) ||
+                !isCmd(parser.getObj(), 'obj') ||
+                !isStream(obj = parser.getObj())) {
+              error('Invalid XRef stream');
+            }
+            dict = this.processXRefStream(obj);
+            if (!this.topDict) {
+              this.topDict = dict;
+            }
+            if (!dict) {
+              error('Failed to read XRef stream');
+            }
+          } else {
+            error('Invalid XRef stream header');
+          }
+
+          // Recursively get previous dictionary, if any
+          obj = dict.get('Prev');
+          if (isInt(obj)) {
+            this.startXRefQueue.push(obj);
+          } else if (isRef(obj)) {
+            // The spec says Prev must not be a reference, i.e. "/Prev NNN"
+            // This is a fallback for non-compliant PDFs, i.e. "/Prev NNN 0 R"
+            this.startXRefQueue.push(obj.num);
+          }
+
+          this.startXRefQueue.shift();
+        }
+
+        return this.topDict;
+      } catch (e) {
+        if (e instanceof MissingDataException) {
+          throw e;
+        }
+        info('(while reading XRef): ' + e);
+      }
+
+      if (recoveryMode) {
+        return;
+      }
+      throw new XRefParseException();
+    },
+
+    getEntry: function XRef_getEntry(i) {
+      var xrefEntry = this.entries[i];
+      if (xrefEntry && !xrefEntry.free && xrefEntry.offset) {
+        return xrefEntry;
+      }
+      return null;
+    },
+
+    fetchIfRef: function XRef_fetchIfRef(obj) {
+      if (!isRef(obj)) {
+        return obj;
+      }
+      return this.fetch(obj);
+    },
+
+    fetch: function XRef_fetch(ref, suppressEncryption) {
+      assert(isRef(ref), 'ref object is not a reference');
+      var num = ref.num;
+      if (num in this.cache) {
+        var cacheEntry = this.cache[num];
+        return cacheEntry;
+      }
+
+      var xrefEntry = this.getEntry(num);
+
+      // the referenced entry can be free
+      if (xrefEntry === null) {
+        return (this.cache[num] = null);
+      }
+
+      if (xrefEntry.uncompressed) {
+        xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption);
+      } else {
+        xrefEntry = this.fetchCompressed(xrefEntry, suppressEncryption);
+      }
+      if (isDict(xrefEntry)){
+        xrefEntry.objId = ref.toString();
+      } else if (isStream(xrefEntry)) {
+        xrefEntry.dict.objId = ref.toString();
+      }
+      return xrefEntry;
+    },
+
+    fetchUncompressed: function XRef_fetchUncompressed(ref, xrefEntry,
+                                                       suppressEncryption) {
+      var gen = ref.gen;
+      var num = ref.num;
+      if (xrefEntry.gen !== gen) {
+        error('inconsistent generation in XRef');
+      }
+      var stream = this.stream.makeSubStream(xrefEntry.offset +
+                                             this.stream.start);
+      var parser = new Parser(new Lexer(stream), true, this);
+      var obj1 = parser.getObj();
+      var obj2 = parser.getObj();
+      var obj3 = parser.getObj();
+      if (!isInt(obj1) || parseInt(obj1, 10) !== num ||
+          !isInt(obj2) || parseInt(obj2, 10) !== gen ||
+          !isCmd(obj3)) {
+        error('bad XRef entry');
+      }
+      if (!isCmd(obj3, 'obj')) {
+        // some bad PDFs use "obj1234" and really mean 1234
+        if (obj3.cmd.indexOf('obj') === 0) {
+          num = parseInt(obj3.cmd.substring(3), 10);
+          if (!isNaN(num)) {
+            return num;
+          }
+        }
+        error('bad XRef entry');
+      }
+      if (this.encrypt && !suppressEncryption) {
+        xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen));
+      } else {
+        xrefEntry = parser.getObj();
+      }
+      if (!isStream(xrefEntry)) {
+        this.cache[num] = xrefEntry;
+      }
+      return xrefEntry;
+    },
+
+    fetchCompressed: function XRef_fetchCompressed(xrefEntry,
+                                                   suppressEncryption) {
+      var tableOffset = xrefEntry.offset;
+      var stream = this.fetch(new Ref(tableOffset, 0));
+      if (!isStream(stream)) {
+        error('bad ObjStm stream');
+      }
+      var first = stream.dict.get('First');
+      var n = stream.dict.get('N');
+      if (!isInt(first) || !isInt(n)) {
+        error('invalid first and n parameters for ObjStm stream');
+      }
+      var parser = new Parser(new Lexer(stream), false, this);
+      parser.allowStreams = true;
+      var i, entries = [], num, nums = [];
+      // read the object numbers to populate cache
+      for (i = 0; i < n; ++i) {
+        num = parser.getObj();
+        if (!isInt(num)) {
+          error('invalid object number in the ObjStm stream: ' + num);
+        }
+        nums.push(num);
+        var offset = parser.getObj();
+        if (!isInt(offset)) {
+          error('invalid object offset in the ObjStm stream: ' + offset);
+        }
+      }
+      // read stream objects for cache
+      for (i = 0; i < n; ++i) {
+        entries.push(parser.getObj());
+        num = nums[i];
+        var entry = this.entries[num];
+        if (entry && entry.offset === tableOffset && entry.gen === i) {
+          this.cache[num] = entries[i];
+        }
+      }
+      xrefEntry = entries[xrefEntry.gen];
+      if (xrefEntry === undefined) {
+        error('bad XRef entry for compressed object');
+      }
+      return xrefEntry;
+    },
+
+    fetchIfRefAsync: function XRef_fetchIfRefAsync(obj) {
+      if (!isRef(obj)) {
+        return Promise.resolve(obj);
+      }
+      return this.fetchAsync(obj);
+    },
+
+    fetchAsync: function XRef_fetchAsync(ref, suppressEncryption) {
+      var streamManager = this.stream.manager;
+      var xref = this;
+      return new Promise(function tryFetch(resolve, reject) {
+        try {
+          resolve(xref.fetch(ref, suppressEncryption));
+        } catch (e) {
+          if (e instanceof MissingDataException) {
+            streamManager.requestRange(e.begin, e.end).then(function () {
+              tryFetch(resolve, reject);
+            }, reject);
+            return;
+          }
+          reject(e);
+        }
+      });
+    },
+
+    getCatalogObj: function XRef_getCatalogObj() {
+      return this.root;
+    }
+  };
+
+  return XRef;
+})();
+
+/**
+ * A NameTree is like a Dict but has some advantageous properties, see the
+ * spec (7.9.6) for more details.
+ * TODO: implement all the Dict functions and make this more efficent.
+ */
+var NameTree = (function NameTreeClosure() {
+  function NameTree(root, xref) {
+    this.root = root;
+    this.xref = xref;
+  }
+
+  NameTree.prototype = {
+    getAll: function NameTree_getAll() {
+      var dict = {};
+      if (!this.root) {
+        return dict;
+      }
+      var xref = this.xref;
+      // reading name tree
+      var processed = new RefSet();
+      processed.put(this.root);
+      var queue = [this.root];
+      while (queue.length > 0) {
+        var i, n;
+        var obj = xref.fetchIfRef(queue.shift());
+        if (!isDict(obj)) {
+          continue;
+        }
+        if (obj.has('Kids')) {
+          var kids = obj.get('Kids');
+          for (i = 0, n = kids.length; i < n; i++) {
+            var kid = kids[i];
+            if (processed.has(kid)) {
+              error('invalid destinations');
+            }
+            queue.push(kid);
+            processed.put(kid);
+          }
+          continue;
+        }
+        var names = obj.get('Names');
+        if (names) {
+          for (i = 0, n = names.length; i < n; i += 2) {
+            dict[xref.fetchIfRef(names[i])] = xref.fetchIfRef(names[i + 1]);
+          }
+        }
+      }
+      return dict;
+    },
+
+    get: function NameTree_get(destinationId) {
+      if (!this.root) {
+        return null;
+      }
+
+      var xref = this.xref;
+      var kidsOrNames = xref.fetchIfRef(this.root);
+      var loopCount = 0;
+      var MAX_NAMES_LEVELS = 10;
+      var l, r, m;
+
+      // Perform a binary search to quickly find the entry that
+      // contains the named destination we are looking for.
+      while (kidsOrNames.has('Kids')) {
+        loopCount++;
+        if (loopCount > MAX_NAMES_LEVELS) {
+          warn('Search depth limit for named destionations has been reached.');
+          return null;
+        }
+
+        var kids = kidsOrNames.get('Kids');
+        if (!isArray(kids)) {
+          return null;
+        }
+
+        l = 0;
+        r = kids.length - 1;
+        while (l <= r) {
+          m = (l + r) >> 1;
+          var kid = xref.fetchIfRef(kids[m]);
+          var limits = kid.get('Limits');
+
+          if (destinationId < xref.fetchIfRef(limits[0])) {
+            r = m - 1;
+          } else if (destinationId > xref.fetchIfRef(limits[1])) {
+            l = m + 1;
+          } else {
+            kidsOrNames = xref.fetchIfRef(kids[m]);
+            break;
+          }
+        }
+        if (l > r) {
+          return null;
+        }
+      }
+
+      // If we get here, then we have found the right entry. Now
+      // go through the named destinations in the Named dictionary
+      // until we find the exact destination we're looking for.
+      var names = kidsOrNames.get('Names');
+      if (isArray(names)) {
+        // Perform a binary search to reduce the lookup time.
+        l = 0;
+        r = names.length - 2;
+        while (l <= r) {
+          // Check only even indices (0, 2, 4, ...) because the
+          // odd indices contain the actual D array.
+          m = (l + r) & ~1;
+          if (destinationId < xref.fetchIfRef(names[m])) {
+            r = m - 2;
+          } else if (destinationId > xref.fetchIfRef(names[m])) {
+            l = m + 2;
+          } else {
+            return xref.fetchIfRef(names[m + 1]);
+          }
+        }
+      }
+      return null;
+    }
+  };
+  return NameTree;
+})();
+
+/**
+ * "A PDF file can refer to the contents of another file by using a File
+ * Specification (PDF 1.1)", see the spec (7.11) for more details.
+ * NOTE: Only embedded files are supported (as part of the attachments support)
+ * TODO: support the 'URL' file system (with caching if !/V), portable
+ * collections attributes and related files (/RF)
+ */
+var FileSpec = (function FileSpecClosure() {
+  function FileSpec(root, xref) {
+    if (!root || !isDict(root)) {
+      return;
+    }
+    this.xref = xref;
+    this.root = root;
+    if (root.has('FS')) {
+      this.fs = root.get('FS');
+    }
+    this.description = root.has('Desc') ?
+                         stringToPDFString(root.get('Desc')) :
+                         '';
+    if (root.has('RF')) {
+      warn('Related file specifications are not supported');
+    }
+    this.contentAvailable = true;
+    if (!root.has('EF')) {
+      this.contentAvailable = false;
+      warn('Non-embedded file specifications are not supported');
+    }
+  }
+
+  function pickPlatformItem(dict) {
+    // Look for the filename in this order:
+    // UF, F, Unix, Mac, DOS
+    if (dict.has('UF')) {
+      return dict.get('UF');
+    } else if (dict.has('F')) {
+      return dict.get('F');
+    } else if (dict.has('Unix')) {
+      return dict.get('Unix');
+    } else if (dict.has('Mac')) {
+      return dict.get('Mac');
+    } else if (dict.has('DOS')) {
+      return dict.get('DOS');
+    } else {
+      return null;
+    }
+  }
+
+  FileSpec.prototype = {
+    get filename() {
+      if (!this._filename && this.root) {
+        var filename = pickPlatformItem(this.root) || 'unnamed';
+        this._filename = stringToPDFString(filename).
+          replace(/\\\\/g, '\\').
+          replace(/\\\//g, '/').
+          replace(/\\/g, '/');
+      }
+      return this._filename;
+    },
+    get content() {
+      if (!this.contentAvailable) {
+        return null;
+      }
+      if (!this.contentRef && this.root) {
+        this.contentRef = pickPlatformItem(this.root.get('EF'));
+      }
+      var content = null;
+      if (this.contentRef) {
+        var xref = this.xref;
+        var fileObj = xref.fetchIfRef(this.contentRef);
+        if (fileObj && isStream(fileObj)) {
+          content = fileObj.getBytes();
+        } else {
+          warn('Embedded file specification points to non-existing/invalid ' +
+            'content');
+        }
+      } else {
+        warn('Embedded file specification does not have a content');
+      }
+      return content;
+    },
+    get serializable() {
+      return {
+        filename: this.filename,
+        content: this.content
+      };
+    }
+  };
+  return FileSpec;
+})();
+
+/**
+ * A helper for loading missing data in object graphs. It traverses the graph
+ * depth first and queues up any objects that have missing data. Once it has
+ * has traversed as many objects that are available it attempts to bundle the
+ * missing data requests and then resume from the nodes that weren't ready.
+ *
+ * NOTE: It provides protection from circular references by keeping track of
+ * of loaded references. However, you must be careful not to load any graphs
+ * that have references to the catalog or other pages since that will cause the
+ * entire PDF document object graph to be traversed.
+ */
+var ObjectLoader = (function() {
+  function mayHaveChildren(value) {
+    return isRef(value) || isDict(value) || isArray(value) || isStream(value);
+  }
+
+  function addChildren(node, nodesToVisit) {
+    var value;
+    if (isDict(node) || isStream(node)) {
+      var map;
+      if (isDict(node)) {
+        map = node.map;
+      } else {
+        map = node.dict.map;
+      }
+      for (var key in map) {
+        value = map[key];
+        if (mayHaveChildren(value)) {
+          nodesToVisit.push(value);
+        }
+      }
+    } else if (isArray(node)) {
+      for (var i = 0, ii = node.length; i < ii; i++) {
+        value = node[i];
+        if (mayHaveChildren(value)) {
+          nodesToVisit.push(value);
+        }
+      }
+    }
+  }
+
+  function ObjectLoader(obj, keys, xref) {
+    this.obj = obj;
+    this.keys = keys;
+    this.xref = xref;
+    this.refSet = null;
+    this.capability = null;
+  }
+
+  ObjectLoader.prototype = {
+    load: function ObjectLoader_load() {
+      var keys = this.keys;
+      this.capability = createPromiseCapability();
+      // Don't walk the graph if all the data is already loaded.
+      if (!(this.xref.stream instanceof ChunkedStream) ||
+          this.xref.stream.getMissingChunks().length === 0) {
+        this.capability.resolve();
+        return this.capability.promise;
+      }
+
+      this.refSet = new RefSet();
+      // Setup the initial nodes to visit.
+      var nodesToVisit = [];
+      for (var i = 0; i < keys.length; i++) {
+        nodesToVisit.push(this.obj[keys[i]]);
+      }
+
+      this._walk(nodesToVisit);
+      return this.capability.promise;
+    },
+
+    _walk: function ObjectLoader_walk(nodesToVisit) {
+      var nodesToRevisit = [];
+      var pendingRequests = [];
+      // DFS walk of the object graph.
+      while (nodesToVisit.length) {
+        var currentNode = nodesToVisit.pop();
+
+        // Only references or chunked streams can cause missing data exceptions.
+        if (isRef(currentNode)) {
+          // Skip nodes that have already been visited.
+          if (this.refSet.has(currentNode)) {
+            continue;
+          }
+          try {
+            var ref = currentNode;
+            this.refSet.put(ref);
+            currentNode = this.xref.fetch(currentNode);
+          } catch (e) {
+            if (!(e instanceof MissingDataException)) {
+              throw e;
+            }
+            nodesToRevisit.push(currentNode);
+            pendingRequests.push({ begin: e.begin, end: e.end });
+          }
+        }
+        if (currentNode && currentNode.getBaseStreams) {
+          var baseStreams = currentNode.getBaseStreams();
+          var foundMissingData = false;
+          for (var i = 0; i < baseStreams.length; i++) {
+            var stream = baseStreams[i];
+            if (stream.getMissingChunks && stream.getMissingChunks().length) {
+              foundMissingData = true;
+              pendingRequests.push({
+                begin: stream.start,
+                end: stream.end
+              });
+            }
+          }
+          if (foundMissingData) {
+            nodesToRevisit.push(currentNode);
+          }
+        }
+
+        addChildren(currentNode, nodesToVisit);
+      }
+
+      if (pendingRequests.length) {
+        this.xref.stream.manager.requestRanges(pendingRequests).then(
+            function pendingRequestCallback() {
+          nodesToVisit = nodesToRevisit;
+          for (var i = 0; i < nodesToRevisit.length; i++) {
+            var node = nodesToRevisit[i];
+            // Remove any reference nodes from the currrent refset so they
+            // aren't skipped when we revist them.
+            if (isRef(node)) {
+              this.refSet.remove(node);
+            }
+          }
+          this._walk(nodesToVisit);
+        }.bind(this), this.capability.reject);
+        return;
+      }
+      // Everything is loaded.
+      this.refSet = null;
+      this.capability.resolve();
+    }
+  };
+
+  return ObjectLoader;
+})();
+
+
+var ISOAdobeCharset = [
+  '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar',
+  'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright',
+  'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero',
+  'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight',
+  'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question',
+  'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+  'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',
+  'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
+  'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+  'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent',
+  'sterling', 'fraction', 'yen', 'florin', 'section', 'currency',
+  'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft',
+  'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl',
+  'periodcentered', 'paragraph', 'bullet', 'quotesinglbase',
+  'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis',
+  'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde',
+  'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla',
+  'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine',
+  'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash',
+  'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu',
+  'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter',
+  'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior',
+  'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright',
+  'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde',
+  'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute',
+  'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex',
+  'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex',
+  'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute',
+  'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla',
+  'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex',
+  'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis',
+  'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis',
+  'ugrave', 'yacute', 'ydieresis', 'zcaron'
+];
+
+var ExpertCharset = [
+  '.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle',
+  'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior',
+  'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma',
+  'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle',
+  'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle',
+  'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle',
+  'colon', 'semicolon', 'commasuperior', 'threequartersemdash',
+  'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior',
+  'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',
+  'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',
+  'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',
+  'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall',
+  'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall',
+  'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall',
+  'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall',
+  'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary',
+  'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle',
+  'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',
+  'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall',
+  'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall',
+  'Cedillasmall', 'onequarter', 'onehalf', 'threequarters',
+  'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths',
+  'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',
+  'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',
+  'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',
+  'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',
+  'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',
+  'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',
+  'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall',
+  'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall',
+  'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall',
+  'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',
+  'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall',
+  'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall',
+  'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',
+  'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall',
+  'Ydieresissmall'
+];
+
+var ExpertSubsetCharset = [
+  '.notdef', 'space', 'dollaroldstyle', 'dollarsuperior',
+  'parenleftsuperior', 'parenrightsuperior', 'twodotenleader',
+  'onedotenleader', 'comma', 'hyphen', 'period', 'fraction',
+  'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',
+  'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle',
+  'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior',
+  'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior',
+  'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',
+  'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior',
+  'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior',
+  'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted',
+  'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter',
+  'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths',
+  'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior',
+  'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',
+  'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',
+  'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior',
+  'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior',
+  'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior',
+  'periodinferior', 'commainferior'
+];
+
+
+var DEFAULT_ICON_SIZE = 22; // px
+
+/**
+ * @constructor
+ */
+function AnnotationFactory() {}
+AnnotationFactory.prototype = {
+  /**
+   * @param {XRef} xref
+   * @param {Object} ref
+   * @returns {Annotation}
+   */
+  create: function AnnotationFactory_create(xref, ref) {
+    var dict = xref.fetchIfRef(ref);
+    if (!isDict(dict)) {
+      return;
+    }
+
+    // Determine the annotation's subtype.
+    var subtype = dict.get('Subtype');
+    subtype = isName(subtype) ? subtype.name : '';
+
+    // Return the right annotation object based on the subtype and field type.
+    var parameters = {
+      dict: dict,
+      ref: ref
+    };
+
+    switch (subtype) {
+      case 'Link':
+        return new LinkAnnotation(parameters);
+
+      case 'Text':
+        return new TextAnnotation(parameters);
+
+      case 'Widget':
+        var fieldType = Util.getInheritableProperty(dict, 'FT');
+        if (isName(fieldType) && fieldType.name === 'Tx') {
+          return new TextWidgetAnnotation(parameters);
+        }
+        return new WidgetAnnotation(parameters);
+
+      default:
+        warn('Unimplemented annotation type "' + subtype + '", ' +
+             'falling back to base annotation');
+        return new Annotation(parameters);
+    }
+  }
+};
+
+var Annotation = (function AnnotationClosure() {
+  // 12.5.5: Algorithm: Appearance streams
+  function getTransformMatrix(rect, bbox, matrix) {
+    var bounds = Util.getAxialAlignedBoundingBox(bbox, matrix);
+    var minX = bounds[0];
+    var minY = bounds[1];
+    var maxX = bounds[2];
+    var maxY = bounds[3];
+
+    if (minX === maxX || minY === maxY) {
+      // From real-life file, bbox was [0, 0, 0, 0]. In this case,
+      // just apply the transform for rect
+      return [1, 0, 0, 1, rect[0], rect[1]];
+    }
+
+    var xRatio = (rect[2] - rect[0]) / (maxX - minX);
+    var yRatio = (rect[3] - rect[1]) / (maxY - minY);
+    return [
+      xRatio,
+      0,
+      0,
+      yRatio,
+      rect[0] - minX * xRatio,
+      rect[1] - minY * yRatio
+    ];
+  }
+
+  function getDefaultAppearance(dict) {
+    var appearanceState = dict.get('AP');
+    if (!isDict(appearanceState)) {
+      return;
+    }
+
+    var appearance;
+    var appearances = appearanceState.get('N');
+    if (isDict(appearances)) {
+      var as = dict.get('AS');
+      if (as && appearances.has(as.name)) {
+        appearance = appearances.get(as.name);
+      }
+    } else {
+      appearance = appearances;
+    }
+    return appearance;
+  }
+
+  function Annotation(params) {
+    var dict = params.dict;
+    var data = this.data = {};
+
+    data.subtype = dict.get('Subtype').name;
+    data.annotationFlags = dict.get('F');
+
+    this.setRectangle(dict.get('Rect'));
+    data.rect = this.rectangle;
+
+    this.setColor(dict.get('C'));
+    data.color = this.color;
+
+    this.borderStyle = data.borderStyle = new AnnotationBorderStyle();
+    this.setBorderStyle(dict);
+
+    this.appearance = getDefaultAppearance(dict);
+    data.hasAppearance = !!this.appearance;
+    data.id = params.ref.num;
+  }
+
+  Annotation.prototype = {
+    /**
+     * Set the rectangle.
+     *
+     * @public
+     * @memberof Annotation
+     * @param {Array} rectangle - The rectangle array with exactly four entries
+     */
+    setRectangle: function Annotation_setRectangle(rectangle) {
+      if (isArray(rectangle) && rectangle.length === 4) {
+        this.rectangle = Util.normalizeRect(rectangle);
+      } else {
+        this.rectangle = [0, 0, 0, 0];
+      }
+    },
+
+    /**
+     * Set the color and take care of color space conversion.
+     *
+     * @public
+     * @memberof Annotation
+     * @param {Array} color - The color array containing either 0
+     *                        (transparent), 1 (grayscale), 3 (RGB) or
+     *                        4 (CMYK) elements
+     */
+    setColor: function Annotation_setColor(color) {
+      var rgbColor = new Uint8Array(3); // Black in RGB color space (default)
+      if (!isArray(color)) {
+        this.color = rgbColor;
+        return;
+      }
+
+      switch (color.length) {
+        case 0: // Transparent, which we indicate with a null value
+          this.color = null;
+          break;
+
+        case 1: // Convert grayscale to RGB
+          ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0);
+          this.color = rgbColor;
+          break;
+
+        case 3: // Convert RGB percentages to RGB
+          ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0);
+          this.color = rgbColor;
+          break;
+
+        case 4: // Convert CMYK to RGB
+          ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0);
+          this.color = rgbColor;
+          break;
+
+        default:
+          this.color = rgbColor;
+          break;
+      }
+    },
+
+    /**
+     * Set the border style (as AnnotationBorderStyle object).
+     *
+     * @public
+     * @memberof Annotation
+     * @param {Dict} borderStyle - The border style dictionary
+     */
+    setBorderStyle: function Annotation_setBorderStyle(borderStyle) {
+      if (!isDict(borderStyle)) {
+        return;
+      }
+      if (borderStyle.has('BS')) {
+        var dict = borderStyle.get('BS');
+        var dictType;
+
+        if (!dict.has('Type') || (isName(dictType = dict.get('Type')) &&
+                                  dictType.name === 'Border')) {
+          this.borderStyle.setWidth(dict.get('W'));
+          this.borderStyle.setStyle(dict.get('S'));
+          this.borderStyle.setDashArray(dict.get('D'));
+        }
+      } else if (borderStyle.has('Border')) {
+        var array = borderStyle.get('Border');
+        if (isArray(array) && array.length >= 3) {
+          this.borderStyle.setHorizontalCornerRadius(array[0]);
+          this.borderStyle.setVerticalCornerRadius(array[1]);
+          this.borderStyle.setWidth(array[2]);
+
+          if (array.length === 4) { // Dash array available
+            this.borderStyle.setDashArray(array[3]);
+          }
+        }
+      } else {
+        // There are no border entries in the dictionary. According to the
+        // specification, we should draw a solid border of width 1 in that
+        // case, but Adobe Reader did not implement that part of the
+        // specification and instead draws no border at all, so we do the same.
+        // See also https://github.com/mozilla/pdf.js/issues/6179.
+        this.borderStyle.setWidth(0);
+      }
+    },
+
+    isInvisible: function Annotation_isInvisible() {
+      var data = this.data;
+      return !!(data &&
+                data.annotationFlags &&            // Default: not invisible
+                data.annotationFlags & 0x1);       // Invisible
+    },
+
+    isViewable: function Annotation_isViewable() {
+      var data = this.data;
+      return !!(!this.isInvisible() &&
+                data &&
+                (!data.annotationFlags ||
+                 !(data.annotationFlags & 0x22)) &&  // Hidden or NoView
+                data.rect);                          // rectangle is necessary
+    },
+
+    isPrintable: function Annotation_isPrintable() {
+      var data = this.data;
+      return !!(!this.isInvisible() &&
+                data &&
+                data.annotationFlags &&              // Default: not printable
+                data.annotationFlags & 0x4 &&        // Print
+                !(data.annotationFlags & 0x2) &&     // Hidden
+                data.rect);                          // rectangle is necessary
+    },
+
+    loadResources: function Annotation_loadResources(keys) {
+      return new Promise(function (resolve, reject) {
+        this.appearance.dict.getAsync('Resources').then(function (resources) {
+          if (!resources) {
+            resolve();
+            return;
+          }
+          var objectLoader = new ObjectLoader(resources.map,
+                                              keys,
+                                              resources.xref);
+          objectLoader.load().then(function() {
+            resolve(resources);
+          }, reject);
+        }, reject);
+      }.bind(this));
+    },
+
+    getOperatorList: function Annotation_getOperatorList(evaluator, task) {
+
+      if (!this.appearance) {
+        return Promise.resolve(new OperatorList());
+      }
+
+      var data = this.data;
+
+      var appearanceDict = this.appearance.dict;
+      var resourcesPromise = this.loadResources([
+        'ExtGState',
+        'ColorSpace',
+        'Pattern',
+        'Shading',
+        'XObject',
+        'Font'
+        // ProcSet
+        // Properties
+      ]);
+      var bbox = appearanceDict.get('BBox') || [0, 0, 1, 1];
+      var matrix = appearanceDict.get('Matrix') || [1, 0, 0, 1, 0 ,0];
+      var transform = getTransformMatrix(data.rect, bbox, matrix);
+      var self = this;
+
+      return resourcesPromise.then(function(resources) {
+          var opList = new OperatorList();
+          opList.addOp(OPS.beginAnnotation, [data.rect, transform, matrix]);
+          return evaluator.getOperatorList(self.appearance, task,
+                                           resources, opList).
+            then(function () {
+              opList.addOp(OPS.endAnnotation, []);
+              self.appearance.reset();
+              return opList;
+            });
+        });
+    }
+  };
+
+  Annotation.appendToOperatorList = function Annotation_appendToOperatorList(
+      annotations, opList, pdfManager, partialEvaluator, task, intent) {
+
+    function reject(e) {
+      annotationsReadyCapability.reject(e);
+    }
+
+    var annotationsReadyCapability = createPromiseCapability();
+
+    var annotationPromises = [];
+    for (var i = 0, n = annotations.length; i < n; ++i) {
+      if (intent === 'display' && annotations[i].isViewable() ||
+          intent === 'print' && annotations[i].isPrintable()) {
+        annotationPromises.push(
+          annotations[i].getOperatorList(partialEvaluator, task));
+      }
+    }
+    Promise.all(annotationPromises).then(function(datas) {
+      opList.addOp(OPS.beginAnnotations, []);
+      for (var i = 0, n = datas.length; i < n; ++i) {
+        var annotOpList = datas[i];
+        opList.addOpList(annotOpList);
+      }
+      opList.addOp(OPS.endAnnotations, []);
+      annotationsReadyCapability.resolve();
+    }, reject);
+
+    return annotationsReadyCapability.promise;
+  };
+
+  return Annotation;
+})();
+
+/**
+ * Contains all data regarding an annotation's border style.
+ *
+ * @class
+ */
+var AnnotationBorderStyle = (function AnnotationBorderStyleClosure() {
+  /**
+   * @constructor
+   * @private
+   */
+  function AnnotationBorderStyle() {
+    this.width = 1;
+    this.style = AnnotationBorderStyleType.SOLID;
+    this.dashArray = [3];
+    this.horizontalCornerRadius = 0;
+    this.verticalCornerRadius = 0;
+  }
+
+  AnnotationBorderStyle.prototype = {
+    /**
+     * Set the width.
+     *
+     * @public
+     * @memberof AnnotationBorderStyle
+     * @param {integer} width - The width
+     */
+    setWidth: function AnnotationBorderStyle_setWidth(width) {
+      if (width === (width | 0)) {
+        this.width = width;
+      }
+    },
+
+    /**
+     * Set the style.
+     *
+     * @public
+     * @memberof AnnotationBorderStyle
+     * @param {Object} style - The style object
+     * @see {@link shared/util.js}
+     */
+    setStyle: function AnnotationBorderStyle_setStyle(style) {
+      if (!style) {
+        return;
+      }
+      switch (style.name) {
+        case 'S':
+          this.style = AnnotationBorderStyleType.SOLID;
+          break;
+
+        case 'D':
+          this.style = AnnotationBorderStyleType.DASHED;
+          break;
+
+        case 'B':
+          this.style = AnnotationBorderStyleType.BEVELED;
+          break;
+
+        case 'I':
+          this.style = AnnotationBorderStyleType.INSET;
+          break;
+
+        case 'U':
+          this.style = AnnotationBorderStyleType.UNDERLINE;
+          break;
+
+        default:
+          break;
+      }
+    },
+
+    /**
+     * Set the dash array.
+     *
+     * @public
+     * @memberof AnnotationBorderStyle
+     * @param {Array} dashArray - The dash array with at least one element
+     */
+    setDashArray: function AnnotationBorderStyle_setDashArray(dashArray) {
+      // We validate the dash array, but we do not use it because CSS does not
+      // allow us to change spacing of dashes. For more information, visit
+      // http://www.w3.org/TR/css3-background/#the-border-style.
+      if (isArray(dashArray) && dashArray.length > 0) {
+        // According to the PDF specification: the elements in a dashArray
+        // shall be numbers that are nonnegative and not all equal to zero.
+        var isValid = true;
+        var allZeros = true;
+        for (var i = 0, len = dashArray.length; i < len; i++) {
+          var element = dashArray[i];
+          var validNumber = (+element >= 0);
+          if (!validNumber) {
+            isValid = false;
+            break;
+          } else if (element > 0) {
+            allZeros = false;
+          }
+        }
+        if (isValid && !allZeros) {
+          this.dashArray = dashArray;
+        } else {
+          this.width = 0; // Adobe behavior when the array is invalid.
+        }
+      } else if (dashArray) {
+        this.width = 0; // Adobe behavior when the array is invalid.
+      }
+    },
+
+    /**
+     * Set the horizontal corner radius (from a Border dictionary).
+     *
+     * @public
+     * @memberof AnnotationBorderStyle
+     * @param {integer} radius - The horizontal corner radius
+     */
+    setHorizontalCornerRadius:
+        function AnnotationBorderStyle_setHorizontalCornerRadius(radius) {
+      if (radius === (radius | 0)) {
+        this.horizontalCornerRadius = radius;
+      }
+    },
+
+    /**
+     * Set the vertical corner radius (from a Border dictionary).
+     *
+     * @public
+     * @memberof AnnotationBorderStyle
+     * @param {integer} radius - The vertical corner radius
+     */
+    setVerticalCornerRadius:
+        function AnnotationBorderStyle_setVerticalCornerRadius(radius) {
+      if (radius === (radius | 0)) {
+        this.verticalCornerRadius = radius;
+      }
+    }
+  };
+
+  return AnnotationBorderStyle;
+})();
+
+var WidgetAnnotation = (function WidgetAnnotationClosure() {
+
+  function WidgetAnnotation(params) {
+    Annotation.call(this, params);
+
+    var dict = params.dict;
+    var data = this.data;
+
+    data.fieldValue = stringToPDFString(
+      Util.getInheritableProperty(dict, 'V') || '');
+    data.alternativeText = stringToPDFString(dict.get('TU') || '');
+    data.defaultAppearance = Util.getInheritableProperty(dict, 'DA') || '';
+    var fieldType = Util.getInheritableProperty(dict, 'FT');
+    data.fieldType = isName(fieldType) ? fieldType.name : '';
+    data.fieldFlags = Util.getInheritableProperty(dict, 'Ff') || 0;
+    this.fieldResources = Util.getInheritableProperty(dict, 'DR') || Dict.empty;
+
+    // Building the full field name by collecting the field and
+    // its ancestors 'T' data and joining them using '.'.
+    var fieldName = [];
+    var namedItem = dict;
+    var ref = params.ref;
+    while (namedItem) {
+      var parent = namedItem.get('Parent');
+      var parentRef = namedItem.getRaw('Parent');
+      var name = namedItem.get('T');
+      if (name) {
+        fieldName.unshift(stringToPDFString(name));
+      } else if (parent && ref) {
+        // The field name is absent, that means more than one field
+        // with the same name may exist. Replacing the empty name
+        // with the '`' plus index in the parent's 'Kids' array.
+        // This is not in the PDF spec but necessary to id the
+        // the input controls.
+        var kids = parent.get('Kids');
+        var j, jj;
+        for (j = 0, jj = kids.length; j < jj; j++) {
+          var kidRef = kids[j];
+          if (kidRef.num === ref.num && kidRef.gen === ref.gen) {
+            break;
+          }
+        }
+        fieldName.unshift('`' + j);
+      }
+      namedItem = parent;
+      ref = parentRef;
+    }
+    data.fullName = fieldName.join('.');
+  }
+
+  var parent = Annotation.prototype;
+  Util.inherit(WidgetAnnotation, Annotation, {
+    isViewable: function WidgetAnnotation_isViewable() {
+      if (this.data.fieldType === 'Sig') {
+        warn('unimplemented annotation type: Widget signature');
+        return false;
+      }
+
+      return parent.isViewable.call(this);
+    }
+  });
+
+  return WidgetAnnotation;
+})();
+
+var TextWidgetAnnotation = (function TextWidgetAnnotationClosure() {
+  function TextWidgetAnnotation(params) {
+    WidgetAnnotation.call(this, params);
+
+    this.data.textAlignment = Util.getInheritableProperty(params.dict, 'Q');
+    this.data.annotationType = AnnotationType.WIDGET;
+    this.data.hasHtml = !this.data.hasAppearance && !!this.data.fieldValue;
+  }
+
+  Util.inherit(TextWidgetAnnotation, WidgetAnnotation, {
+    getOperatorList: function TextWidgetAnnotation_getOperatorList(evaluator,
+                                                                   task) {
+      if (this.appearance) {
+        return Annotation.prototype.getOperatorList.call(this, evaluator, task);
+      }
+
+      var opList = new OperatorList();
+      var data = this.data;
+
+      // Even if there is an appearance stream, ignore it. This is the
+      // behaviour used by Adobe Reader.
+      if (!data.defaultAppearance) {
+        return Promise.resolve(opList);
+      }
+
+      var stream = new Stream(stringToBytes(data.defaultAppearance));
+      return evaluator.getOperatorList(stream, task,
+                                       this.fieldResources, opList).
+        then(function () {
+          return opList;
+        });
+    }
+  });
+
+  return TextWidgetAnnotation;
+})();
+
+var TextAnnotation = (function TextAnnotationClosure() {
+  function TextAnnotation(params) {
+    Annotation.call(this, params);
+
+    var dict = params.dict;
+    var data = this.data;
+
+    var content = dict.get('Contents');
+    var title = dict.get('T');
+    data.annotationType = AnnotationType.TEXT;
+    data.content = stringToPDFString(content || '');
+    data.title = stringToPDFString(title || '');
+    data.hasHtml = true;
+
+    if (data.hasAppearance) {
+      data.name = 'NoIcon';
+    } else {
+      data.rect[1] = data.rect[3] - DEFAULT_ICON_SIZE;
+      data.rect[2] = data.rect[0] + DEFAULT_ICON_SIZE;
+      data.name = dict.has('Name') ? dict.get('Name').name : 'Note';
+    }
+
+    if (dict.has('C')) {
+      data.hasBgColor = true;
+    }
+  }
+
+  Util.inherit(TextAnnotation, Annotation, { });
+
+  return TextAnnotation;
+})();
+
+var LinkAnnotation = (function LinkAnnotationClosure() {
+  function LinkAnnotation(params) {
+    Annotation.call(this, params);
+
+    var dict = params.dict;
+    var data = this.data;
+    data.annotationType = AnnotationType.LINK;
+    data.hasHtml = true;
+
+    var action = dict.get('A');
+    if (action && isDict(action)) {
+      var linkType = action.get('S').name;
+      if (linkType === 'URI') {
+        var url = action.get('URI');
+        if (isName(url)) {
+          // Some bad PDFs do not put parentheses around relative URLs.
+          url = '/' + url.name;
+        } else if (url) {
+          url = addDefaultProtocolToUrl(url);
+        }
+        // TODO: pdf spec mentions urls can be relative to a Base
+        // entry in the dictionary.
+        if (!isValidUrl(url, false)) {
+          url = '';
+        }
+        // According to ISO 32000-1:2008, section 12.6.4.7, 
+        // URI should to be encoded in 7-bit ASCII.
+        // Some bad PDFs may have URIs in UTF-8 encoding, see Bugzilla 1122280.
+        try {
+          data.url = stringToUTF8String(url);
+        } catch (e) {
+          // Fall back to a simple copy.
+          data.url = url;
+        }
+      } else if (linkType === 'GoTo') {
+        data.dest = action.get('D');
+      } else if (linkType === 'GoToR') {
+        var urlDict = action.get('F');
+        if (isDict(urlDict)) {
+          // We assume that the 'url' is a Filspec dictionary
+          // and fetch the url without checking any further
+          url = urlDict.get('F') || '';
+        }
+
+        // TODO: pdf reference says that GoToR
+        // can also have 'NewWindow' attribute
+        if (!isValidUrl(url, false)) {
+          url = '';
+        }
+        data.url = url;
+        data.dest = action.get('D');
+      } else if (linkType === 'Named') {
+        data.action = action.get('N').name;
+      } else {
+        warn('unrecognized link type: ' + linkType);
+      }
+    } else if (dict.has('Dest')) {
+      // simple destination link
+      var dest = dict.get('Dest');
+      data.dest = isName(dest) ? dest.name : dest;
+    }
+  }
+
+  // Lets URLs beginning with 'www.' default to using the 'http://' protocol.
+  function addDefaultProtocolToUrl(url) {
+    if (url && url.indexOf('www.') === 0) {
+      return ('http://' + url);
+    }
+    return url;
+  }
+
+  Util.inherit(LinkAnnotation, Annotation, { });
+
+  return LinkAnnotation;
+})();
+
+
+var PDFFunction = (function PDFFunctionClosure() {
+  var CONSTRUCT_SAMPLED = 0;
+  var CONSTRUCT_INTERPOLATED = 2;
+  var CONSTRUCT_STICHED = 3;
+  var CONSTRUCT_POSTSCRIPT = 4;
+
+  return {
+    getSampleArray: function PDFFunction_getSampleArray(size, outputSize, bps,
+                                                       str) {
+      var i, ii;
+      var length = 1;
+      for (i = 0, ii = size.length; i < ii; i++) {
+        length *= size[i];
+      }
+      length *= outputSize;
+
+      var array = new Array(length);
+      var codeSize = 0;
+      var codeBuf = 0;
+      // 32 is a valid bps so shifting won't work
+      var sampleMul = 1.0 / (Math.pow(2.0, bps) - 1);
+
+      var strBytes = str.getBytes((length * bps + 7) / 8);
+      var strIdx = 0;
+      for (i = 0; i < length; i++) {
+        while (codeSize < bps) {
+          codeBuf <<= 8;
+          codeBuf |= strBytes[strIdx++];
+          codeSize += 8;
+        }
+        codeSize -= bps;
+        array[i] = (codeBuf >> codeSize) * sampleMul;
+        codeBuf &= (1 << codeSize) - 1;
+      }
+      return array;
+    },
+
+    getIR: function PDFFunction_getIR(xref, fn) {
+      var dict = fn.dict;
+      if (!dict) {
+        dict = fn;
+      }
+
+      var types = [this.constructSampled,
+                   null,
+                   this.constructInterpolated,
+                   this.constructStiched,
+                   this.constructPostScript];
+
+      var typeNum = dict.get('FunctionType');
+      var typeFn = types[typeNum];
+      if (!typeFn) {
+        error('Unknown type of function');
+      }
+
+      return typeFn.call(this, fn, dict, xref);
+    },
+
+    fromIR: function PDFFunction_fromIR(IR) {
+      var type = IR[0];
+      switch (type) {
+        case CONSTRUCT_SAMPLED:
+          return this.constructSampledFromIR(IR);
+        case CONSTRUCT_INTERPOLATED:
+          return this.constructInterpolatedFromIR(IR);
+        case CONSTRUCT_STICHED:
+          return this.constructStichedFromIR(IR);
+        //case CONSTRUCT_POSTSCRIPT:
+        default:
+          return this.constructPostScriptFromIR(IR);
+      }
+    },
+
+    parse: function PDFFunction_parse(xref, fn) {
+      var IR = this.getIR(xref, fn);
+      return this.fromIR(IR);
+    },
+
+    parseArray: function PDFFunction_parseArray(xref, fnObj) {
+      if (!isArray(fnObj)) {
+        // not an array -- parsing as regular function
+        return this.parse(xref, fnObj);
+      }
+
+      var fnArray = [];
+      for (var j = 0, jj = fnObj.length; j < jj; j++) {
+        var obj = xref.fetchIfRef(fnObj[j]);
+        fnArray.push(PDFFunction.parse(xref, obj));
+      }
+      return function (src, srcOffset, dest, destOffset) {
+        for (var i = 0, ii = fnArray.length; i < ii; i++) {
+          fnArray[i](src, srcOffset, dest, destOffset + i);
+        }
+      };
+    },
+
+    constructSampled: function PDFFunction_constructSampled(str, dict) {
+      function toMultiArray(arr) {
+        var inputLength = arr.length;
+        var out = [];
+        var index = 0;
+        for (var i = 0; i < inputLength; i += 2) {
+          out[index] = [arr[i], arr[i + 1]];
+          ++index;
+        }
+        return out;
+      }
+      var domain = dict.get('Domain');
+      var range = dict.get('Range');
+
+      if (!domain || !range) {
+        error('No domain or range');
+      }
+
+      var inputSize = domain.length / 2;
+      var outputSize = range.length / 2;
+
+      domain = toMultiArray(domain);
+      range = toMultiArray(range);
+
+      var size = dict.get('Size');
+      var bps = dict.get('BitsPerSample');
+      var order = dict.get('Order') || 1;
+      if (order !== 1) {
+        // No description how cubic spline interpolation works in PDF32000:2008
+        // As in poppler, ignoring order, linear interpolation may work as good
+        info('No support for cubic spline interpolation: ' + order);
+      }
+
+      var encode = dict.get('Encode');
+      if (!encode) {
+        encode = [];
+        for (var i = 0; i < inputSize; ++i) {
+          encode.push(0);
+          encode.push(size[i] - 1);
+        }
+      }
+      encode = toMultiArray(encode);
+
+      var decode = dict.get('Decode');
+      if (!decode) {
+        decode = range;
+      } else {
+        decode = toMultiArray(decode);
+      }
+
+      var samples = this.getSampleArray(size, outputSize, bps, str);
+
+      return [
+        CONSTRUCT_SAMPLED, inputSize, domain, encode, decode, samples, size,
+        outputSize, Math.pow(2, bps) - 1, range
+      ];
+    },
+
+    constructSampledFromIR: function PDFFunction_constructSampledFromIR(IR) {
+      // See chapter 3, page 109 of the PDF reference
+      function interpolate(x, xmin, xmax, ymin, ymax) {
+        return ymin + ((x - xmin) * ((ymax - ymin) / (xmax - xmin)));
+      }
+
+      return function constructSampledFromIRResult(src, srcOffset,
+                                                   dest, destOffset) {
+        // See chapter 3, page 110 of the PDF reference.
+        var m = IR[1];
+        var domain = IR[2];
+        var encode = IR[3];
+        var decode = IR[4];
+        var samples = IR[5];
+        var size = IR[6];
+        var n = IR[7];
+        //var mask = IR[8];
+        var range = IR[9];
+
+        // Building the cube vertices: its part and sample index
+        // http://rjwagner49.com/Mathematics/Interpolation.pdf
+        var cubeVertices = 1 << m;
+        var cubeN = new Float64Array(cubeVertices);
+        var cubeVertex = new Uint32Array(cubeVertices);
+        var i, j;
+        for (j = 0; j < cubeVertices; j++) {
+          cubeN[j] = 1;
+        }
+
+        var k = n, pos = 1;
+        // Map x_i to y_j for 0 <= i < m using the sampled function.
+        for (i = 0; i < m; ++i) {
+          // x_i' = min(max(x_i, Domain_2i), Domain_2i+1)
+          var domain_2i = domain[i][0];
+          var domain_2i_1 = domain[i][1];
+          var xi = Math.min(Math.max(src[srcOffset +i], domain_2i),
+                            domain_2i_1);
+
+          // e_i = Interpolate(x_i', Domain_2i, Domain_2i+1,
+          //                   Encode_2i, Encode_2i+1)
+          var e = interpolate(xi, domain_2i, domain_2i_1,
+                              encode[i][0], encode[i][1]);
+
+          // e_i' = min(max(e_i, 0), Size_i - 1)
+          var size_i = size[i];
+          e = Math.min(Math.max(e, 0), size_i - 1);
+
+          // Adjusting the cube: N and vertex sample index
+          var e0 = e < size_i - 1 ? Math.floor(e) : e - 1; // e1 = e0 + 1;
+          var n0 = e0 + 1 - e; // (e1 - e) / (e1 - e0);
+          var n1 = e - e0; // (e - e0) / (e1 - e0);
+          var offset0 = e0 * k;
+          var offset1 = offset0 + k; // e1 * k
+          for (j = 0; j < cubeVertices; j++) {
+            if (j & pos) {
+              cubeN[j] *= n1;
+              cubeVertex[j] += offset1;
+            } else {
+              cubeN[j] *= n0;
+              cubeVertex[j] += offset0;
+            }
+          }
+
+          k *= size_i;
+          pos <<= 1;
+        }
+
+        for (j = 0; j < n; ++j) {
+          // Sum all cube vertices' samples portions
+          var rj = 0;
+          for (i = 0; i < cubeVertices; i++) {
+            rj += samples[cubeVertex[i] + j] * cubeN[i];
+          }
+
+          // r_j' = Interpolate(r_j, 0, 2^BitsPerSample - 1,
+          //                    Decode_2j, Decode_2j+1)
+          rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]);
+
+          // y_j = min(max(r_j, range_2j), range_2j+1)
+          dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]),
+                                          range[j][1]);
+        }
+      };
+    },
+
+    constructInterpolated: function PDFFunction_constructInterpolated(str,
+                                                                      dict) {
+      var c0 = dict.get('C0') || [0];
+      var c1 = dict.get('C1') || [1];
+      var n = dict.get('N');
+
+      if (!isArray(c0) || !isArray(c1)) {
+        error('Illegal dictionary for interpolated function');
+      }
+
+      var length = c0.length;
+      var diff = [];
+      for (var i = 0; i < length; ++i) {
+        diff.push(c1[i] - c0[i]);
+      }
+
+      return [CONSTRUCT_INTERPOLATED, c0, diff, n];
+    },
+
+    constructInterpolatedFromIR:
+      function PDFFunction_constructInterpolatedFromIR(IR) {
+      var c0 = IR[1];
+      var diff = IR[2];
+      var n = IR[3];
+
+      var length = diff.length;
+
+      return function constructInterpolatedFromIRResult(src, srcOffset,
+                                                        dest, destOffset) {
+        var x = n === 1 ? src[srcOffset] : Math.pow(src[srcOffset], n);
+
+        for (var j = 0; j < length; ++j) {
+          dest[destOffset + j] = c0[j] + (x * diff[j]);
+        }
+      };
+    },
+
+    constructStiched: function PDFFunction_constructStiched(fn, dict, xref) {
+      var domain = dict.get('Domain');
+
+      if (!domain) {
+        error('No domain');
+      }
+
+      var inputSize = domain.length / 2;
+      if (inputSize !== 1) {
+        error('Bad domain for stiched function');
+      }
+
+      var fnRefs = dict.get('Functions');
+      var fns = [];
+      for (var i = 0, ii = fnRefs.length; i < ii; ++i) {
+        fns.push(PDFFunction.getIR(xref, xref.fetchIfRef(fnRefs[i])));
+      }
+
+      var bounds = dict.get('Bounds');
+      var encode = dict.get('Encode');
+
+      return [CONSTRUCT_STICHED, domain, bounds, encode, fns];
+    },
+
+    constructStichedFromIR: function PDFFunction_constructStichedFromIR(IR) {
+      var domain = IR[1];
+      var bounds = IR[2];
+      var encode = IR[3];
+      var fnsIR = IR[4];
+      var fns = [];
+      var tmpBuf = new Float32Array(1);
+
+      for (var i = 0, ii = fnsIR.length; i < ii; i++) {
+        fns.push(PDFFunction.fromIR(fnsIR[i]));
+      }
+
+      return function constructStichedFromIRResult(src, srcOffset,
+                                                   dest, destOffset) {
+        var clip = function constructStichedFromIRClip(v, min, max) {
+          if (v > max) {
+            v = max;
+          } else if (v < min) {
+            v = min;
+          }
+          return v;
+        };
+
+        // clip to domain
+        var v = clip(src[srcOffset], domain[0], domain[1]);
+        // calulate which bound the value is in
+        for (var i = 0, ii = bounds.length; i < ii; ++i) {
+          if (v < bounds[i]) {
+            break;
+          }
+        }
+
+        // encode value into domain of function
+        var dmin = domain[0];
+        if (i > 0) {
+          dmin = bounds[i - 1];
+        }
+        var dmax = domain[1];
+        if (i < bounds.length) {
+          dmax = bounds[i];
+        }
+
+        var rmin = encode[2 * i];
+        var rmax = encode[2 * i + 1];
+
+        // Prevent the value from becoming NaN as a result
+        // of division by zero (fixes issue6113.pdf).
+        tmpBuf[0] = dmin === dmax ? rmin :
+                    rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin);
+
+        // call the appropriate function
+        fns[i](tmpBuf, 0, dest, destOffset);
+      };
+    },
+
+    constructPostScript: function PDFFunction_constructPostScript(fn, dict,
+                                                                  xref) {
+      var domain = dict.get('Domain');
+      var range = dict.get('Range');
+
+      if (!domain) {
+        error('No domain.');
+      }
+
+      if (!range) {
+        error('No range.');
+      }
+
+      var lexer = new PostScriptLexer(fn);
+      var parser = new PostScriptParser(lexer);
+      var code = parser.parse();
+
+      return [CONSTRUCT_POSTSCRIPT, domain, range, code];
+    },
+
+    constructPostScriptFromIR: function PDFFunction_constructPostScriptFromIR(
+                                          IR) {
+      var domain = IR[1];
+      var range = IR[2];
+      var code = IR[3];
+
+      var compiled = (new PostScriptCompiler()).compile(code, domain, range);
+      if (compiled) {
+        // Compiled function consists of simple expressions such as addition,
+        // subtraction, Math.max, and also contains 'var' and 'return'
+        // statements. See the generation in the PostScriptCompiler below.
+        /*jshint -W054 */
+        return new Function('src', 'srcOffset', 'dest', 'destOffset', compiled);
+      }
+
+      info('Unable to compile PS function');
+
+      var numOutputs = range.length >> 1;
+      var numInputs = domain.length >> 1;
+      var evaluator = new PostScriptEvaluator(code);
+      // Cache the values for a big speed up, the cache size is limited though
+      // since the number of possible values can be huge from a PS function.
+      var cache = {};
+      // The MAX_CACHE_SIZE is set to ~4x the maximum number of distinct values
+      // seen in our tests.
+      var MAX_CACHE_SIZE = 2048 * 4;
+      var cache_available = MAX_CACHE_SIZE;
+      var tmpBuf = new Float32Array(numInputs);
+
+      return function constructPostScriptFromIRResult(src, srcOffset,
+                                                      dest, destOffset) {
+        var i, value;
+        var key = '';
+        var input = tmpBuf;
+        for (i = 0; i < numInputs; i++) {
+          value = src[srcOffset + i];
+          input[i] = value;
+          key += value + '_';
+        }
+
+        var cachedValue = cache[key];
+        if (cachedValue !== undefined) {
+          dest.set(cachedValue, destOffset);
+          return;
+        }
+
+        var output = new Float32Array(numOutputs);
+        var stack = evaluator.execute(input);
+        var stackIndex = stack.length - numOutputs;
+        for (i = 0; i < numOutputs; i++) {
+          value = stack[stackIndex + i];
+          var bound = range[i * 2];
+          if (value < bound) {
+            value = bound;
+          } else {
+            bound = range[i * 2 +1];
+            if (value > bound) {
+              value = bound;
+            }
+          }
+          output[i] = value;
+        }
+        if (cache_available > 0) {
+          cache_available--;
+          cache[key] = output;
+        }
+        dest.set(output, destOffset);
+      };
+    }
+  };
+})();
+
+function isPDFFunction(v) {
+  var fnDict;
+  if (typeof v !== 'object') {
+    return false;
+  } else if (isDict(v)) {
+    fnDict = v;
+  } else if (isStream(v)) {
+    fnDict = v.dict;
+  } else {
+    return false;
+  }
+  return fnDict.has('FunctionType');
+}
+
+var PostScriptStack = (function PostScriptStackClosure() {
+  var MAX_STACK_SIZE = 100;
+  function PostScriptStack(initialStack) {
+    this.stack = !initialStack ? [] :
+                 Array.prototype.slice.call(initialStack, 0);
+  }
+
+  PostScriptStack.prototype = {
+    push: function PostScriptStack_push(value) {
+      if (this.stack.length >= MAX_STACK_SIZE) {
+        error('PostScript function stack overflow.');
+      }
+      this.stack.push(value);
+    },
+    pop: function PostScriptStack_pop() {
+      if (this.stack.length <= 0) {
+        error('PostScript function stack underflow.');
+      }
+      return this.stack.pop();
+    },
+    copy: function PostScriptStack_copy(n) {
+      if (this.stack.length + n >= MAX_STACK_SIZE) {
+        error('PostScript function stack overflow.');
+      }
+      var stack = this.stack;
+      for (var i = stack.length - n, j = n - 1; j >= 0; j--, i++) {
+        stack.push(stack[i]);
+      }
+    },
+    index: function PostScriptStack_index(n) {
+      this.push(this.stack[this.stack.length - n - 1]);
+    },
+    // rotate the last n stack elements p times
+    roll: function PostScriptStack_roll(n, p) {
+      var stack = this.stack;
+      var l = stack.length - n;
+      var r = stack.length - 1, c = l + (p - Math.floor(p / n) * n), i, j, t;
+      for (i = l, j = r; i < j; i++, j--) {
+        t = stack[i]; stack[i] = stack[j]; stack[j] = t;
+      }
+      for (i = l, j = c - 1; i < j; i++, j--) {
+        t = stack[i]; stack[i] = stack[j]; stack[j] = t;
+      }
+      for (i = c, j = r; i < j; i++, j--) {
+        t = stack[i]; stack[i] = stack[j]; stack[j] = t;
+      }
+    }
+  };
+  return PostScriptStack;
+})();
+var PostScriptEvaluator = (function PostScriptEvaluatorClosure() {
+  function PostScriptEvaluator(operators) {
+    this.operators = operators;
+  }
+  PostScriptEvaluator.prototype = {
+    execute: function PostScriptEvaluator_execute(initialStack) {
+      var stack = new PostScriptStack(initialStack);
+      var counter = 0;
+      var operators = this.operators;
+      var length = operators.length;
+      var operator, a, b;
+      while (counter < length) {
+        operator = operators[counter++];
+        if (typeof operator === 'number') {
+          // Operator is really an operand and should be pushed to the stack.
+          stack.push(operator);
+          continue;
+        }
+        switch (operator) {
+          // non standard ps operators
+          case 'jz': // jump if false
+            b = stack.pop();
+            a = stack.pop();
+            if (!a) {
+              counter = b;
+            }
+            break;
+          case 'j': // jump
+            a = stack.pop();
+            counter = a;
+            break;
+
+          // all ps operators in alphabetical order (excluding if/ifelse)
+          case 'abs':
+            a = stack.pop();
+            stack.push(Math.abs(a));
+            break;
+          case 'add':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a + b);
+            break;
+          case 'and':
+            b = stack.pop();
+            a = stack.pop();
+            if (isBool(a) && isBool(b)) {
+              stack.push(a && b);
+            } else {
+              stack.push(a & b);
+            }
+            break;
+          case 'atan':
+            a = stack.pop();
+            stack.push(Math.atan(a));
+            break;
+          case 'bitshift':
+            b = stack.pop();
+            a = stack.pop();
+            if (a > 0) {
+              stack.push(a << b);
+            } else {
+              stack.push(a >> b);
+            }
+            break;
+          case 'ceiling':
+            a = stack.pop();
+            stack.push(Math.ceil(a));
+            break;
+          case 'copy':
+            a = stack.pop();
+            stack.copy(a);
+            break;
+          case 'cos':
+            a = stack.pop();
+            stack.push(Math.cos(a));
+            break;
+          case 'cvi':
+            a = stack.pop() | 0;
+            stack.push(a);
+            break;
+          case 'cvr':
+            // noop
+            break;
+          case 'div':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a / b);
+            break;
+          case 'dup':
+            stack.copy(1);
+            break;
+          case 'eq':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a === b);
+            break;
+          case 'exch':
+            stack.roll(2, 1);
+            break;
+          case 'exp':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(Math.pow(a, b));
+            break;
+          case 'false':
+            stack.push(false);
+            break;
+          case 'floor':
+            a = stack.pop();
+            stack.push(Math.floor(a));
+            break;
+          case 'ge':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a >= b);
+            break;
+          case 'gt':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a > b);
+            break;
+          case 'idiv':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push((a / b) | 0);
+            break;
+          case 'index':
+            a = stack.pop();
+            stack.index(a);
+            break;
+          case 'le':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a <= b);
+            break;
+          case 'ln':
+            a = stack.pop();
+            stack.push(Math.log(a));
+            break;
+          case 'log':
+            a = stack.pop();
+            stack.push(Math.log(a) / Math.LN10);
+            break;
+          case 'lt':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a < b);
+            break;
+          case 'mod':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a % b);
+            break;
+          case 'mul':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a * b);
+            break;
+          case 'ne':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a !== b);
+            break;
+          case 'neg':
+            a = stack.pop();
+            stack.push(-a);
+            break;
+          case 'not':
+            a = stack.pop();
+            if (isBool(a)) {
+              stack.push(!a);
+            } else {
+              stack.push(~a);
+            }
+            break;
+          case 'or':
+            b = stack.pop();
+            a = stack.pop();
+            if (isBool(a) && isBool(b)) {
+              stack.push(a || b);
+            } else {
+              stack.push(a | b);
+            }
+            break;
+          case 'pop':
+            stack.pop();
+            break;
+          case 'roll':
+            b = stack.pop();
+            a = stack.pop();
+            stack.roll(a, b);
+            break;
+          case 'round':
+            a = stack.pop();
+            stack.push(Math.round(a));
+            break;
+          case 'sin':
+            a = stack.pop();
+            stack.push(Math.sin(a));
+            break;
+          case 'sqrt':
+            a = stack.pop();
+            stack.push(Math.sqrt(a));
+            break;
+          case 'sub':
+            b = stack.pop();
+            a = stack.pop();
+            stack.push(a - b);
+            break;
+          case 'true':
+            stack.push(true);
+            break;
+          case 'truncate':
+            a = stack.pop();
+            a = a < 0 ? Math.ceil(a) : Math.floor(a);
+            stack.push(a);
+            break;
+          case 'xor':
+            b = stack.pop();
+            a = stack.pop();
+            if (isBool(a) && isBool(b)) {
+              stack.push(a !== b);
+            } else {
+              stack.push(a ^ b);
+            }
+            break;
+          default:
+            error('Unknown operator ' + operator);
+            break;
+        }
+      }
+      return stack.stack;
+    }
+  };
+  return PostScriptEvaluator;
+})();
+
+// Most of the PDFs functions consist of simple operations such as:
+//   roll, exch, sub, cvr, pop, index, dup, mul, if, gt, add.
+//
+// We can compile most of such programs, and at the same moment, we can
+// optimize some expressions using basic math properties. Keeping track of
+// min/max values will allow us to avoid extra Math.min/Math.max calls.
+var PostScriptCompiler = (function PostScriptCompilerClosure() {
+  function AstNode(type) {
+    this.type = type;
+  }
+  AstNode.prototype.visit = function (visitor) {
+    throw new Error('abstract method');
+  };
+
+  function AstArgument(index, min, max) {
+    AstNode.call(this, 'args');
+    this.index = index;
+    this.min = min;
+    this.max = max;
+  }
+  AstArgument.prototype = Object.create(AstNode.prototype);
+  AstArgument.prototype.visit = function (visitor) {
+    visitor.visitArgument(this);
+  };
+
+  function AstLiteral(number) {
+    AstNode.call(this, 'literal');
+    this.number = number;
+    this.min = number;
+    this.max = number;
+  }
+  AstLiteral.prototype = Object.create(AstNode.prototype);
+  AstLiteral.prototype.visit = function (visitor) {
+    visitor.visitLiteral(this);
+  };
+
+  function AstBinaryOperation(op, arg1, arg2, min, max) {
+    AstNode.call(this, 'binary');
+    this.op = op;
+    this.arg1 = arg1;
+    this.arg2 = arg2;
+    this.min = min;
+    this.max = max;
+  }
+  AstBinaryOperation.prototype = Object.create(AstNode.prototype);
+  AstBinaryOperation.prototype.visit = function (visitor) {
+    visitor.visitBinaryOperation(this);
+  };
+
+  function AstMin(arg, max) {
+    AstNode.call(this, 'max');
+    this.arg = arg;
+    this.min = arg.min;
+    this.max = max;
+  }
+  AstMin.prototype = Object.create(AstNode.prototype);
+  AstMin.prototype.visit = function (visitor) {
+    visitor.visitMin(this);
+  };
+
+  function AstVariable(index, min, max) {
+    AstNode.call(this, 'var');
+    this.index = index;
+    this.min = min;
+    this.max = max;
+  }
+  AstVariable.prototype = Object.create(AstNode.prototype);
+  AstVariable.prototype.visit = function (visitor) {
+    visitor.visitVariable(this);
+  };
+
+  function AstVariableDefinition(variable, arg) {
+    AstNode.call(this, 'definition');
+    this.variable = variable;
+    this.arg = arg;
+  }
+  AstVariableDefinition.prototype = Object.create(AstNode.prototype);
+  AstVariableDefinition.prototype.visit = function (visitor) {
+    visitor.visitVariableDefinition(this);
+  };
+
+  function ExpressionBuilderVisitor() {
+    this.parts = [];
+  }
+  ExpressionBuilderVisitor.prototype = {
+    visitArgument: function (arg) {
+      this.parts.push('Math.max(', arg.min, ', Math.min(',
+                      arg.max, ', src[srcOffset + ', arg.index, ']))');
+    },
+    visitVariable: function (variable) {
+      this.parts.push('v', variable.index);
+    },
+    visitLiteral: function (literal) {
+      this.parts.push(literal.number);
+    },
+    visitBinaryOperation: function (operation) {
+      this.parts.push('(');
+      operation.arg1.visit(this);
+      this.parts.push(' ', operation.op, ' ');
+      operation.arg2.visit(this);
+      this.parts.push(')');
+    },
+    visitVariableDefinition: function (definition) {
+      this.parts.push('var ');
+      definition.variable.visit(this);
+      this.parts.push(' = ');
+      definition.arg.visit(this);
+      this.parts.push(';');
+    },
+    visitMin: function (max) {
+      this.parts.push('Math.min(');
+      max.arg.visit(this);
+      this.parts.push(', ', max.max, ')');
+    },
+    toString: function () {
+      return this.parts.join('');
+    }
+  };
+
+  function buildAddOperation(num1, num2) {
+    if (num2.type === 'literal' && num2.number === 0) {
+      // optimization: second operand is 0
+      return num1;
+    }
+    if (num1.type === 'literal' && num1.number === 0) {
+      // optimization: first operand is 0
+      return num2;
+    }
+    if (num2.type === 'literal' && num1.type === 'literal') {
+      // optimization: operands operand are literals
+      return new AstLiteral(num1.number + num2.number);
+    }
+    return new AstBinaryOperation('+', num1, num2,
+                                  num1.min + num2.min, num1.max + num2.max);
+  }
+
+  function buildMulOperation(num1, num2) {
+    if (num2.type === 'literal') {
+      // optimization: second operands is a literal...
+      if (num2.number === 0) {
+        return new AstLiteral(0); // and it's 0
+      } else if (num2.number === 1) {
+        return num1; // and it's 1
+      } else if (num1.type === 'literal') {
+        // ... and first operands is a literal too
+        return new AstLiteral(num1.number * num2.number);
+      }
+    }
+    if (num1.type === 'literal') {
+      // optimization: first operands is a literal...
+      if (num1.number === 0) {
+        return new AstLiteral(0); // and it's 0
+      } else if (num1.number === 1) {
+        return num2; // and it's 1
+      }
+    }
+    var min = Math.min(num1.min * num2.min, num1.min * num2.max,
+                       num1.max * num2.min, num1.max * num2.max);
+    var max = Math.max(num1.min * num2.min, num1.min * num2.max,
+                       num1.max * num2.min, num1.max * num2.max);
+    return new AstBinaryOperation('*', num1, num2, min, max);
+  }
+
+  function buildSubOperation(num1, num2) {
+    if (num2.type === 'literal') {
+      // optimization: second operands is a literal...
+      if (num2.number === 0) {
+        return num1; // ... and it's 0
+      } else if (num1.type === 'literal') {
+        // ... and first operands is a literal too
+        return new AstLiteral(num1.number - num2.number);
+      }
+    }
+    if (num2.type === 'binary' && num2.op === '-' &&
+      num1.type === 'literal' && num1.number === 1 &&
+      num2.arg1.type === 'literal' && num2.arg1.number === 1) {
+      // optimization for case: 1 - (1 - x)
+      return num2.arg2;
+    }
+    return new AstBinaryOperation('-', num1, num2,
+                                  num1.min - num2.max, num1.max - num2.min);
+  }
+
+  function buildMinOperation(num1, max) {
+    if (num1.min >= max) {
+      // optimization: num1 min value is not less than required max
+      return new AstLiteral(max); // just returning max
+    } else if (num1.max <= max) {
+      // optimization: num1 max value is not greater than required max
+      return num1; // just returning an argument
+    }
+    return new AstMin(num1, max);
+  }
+
+  function PostScriptCompiler() {}
+  PostScriptCompiler.prototype = {
+    compile: function PostScriptCompiler_compile(code, domain, range) {
+      var stack = [];
+      var i, ii;
+      var instructions = [];
+      var inputSize = domain.length >> 1, outputSize = range.length >> 1;
+      var lastRegister = 0;
+      var n, j, min, max;
+      var num1, num2, ast1, ast2, tmpVar, item;
+      for (i = 0; i < inputSize; i++) {
+        stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1]));
+      }
+
+      for (i = 0, ii = code.length; i < ii; i++) {
+        item = code[i];
+        if (typeof item === 'number') {
+          stack.push(new AstLiteral(item));
+          continue;
+        }
+
+        switch (item) {
+          case 'add':
+            if (stack.length < 2) {
+              return null;
+            }
+            num2 = stack.pop();
+            num1 = stack.pop();
+            stack.push(buildAddOperation(num1, num2));
+            break;
+          case 'cvr':
+            if (stack.length < 1) {
+              return null;
+            }
+            break;
+          case 'mul':
+            if (stack.length < 2) {
+              return null;
+            }
+            num2 = stack.pop();
+            num1 = stack.pop();
+            stack.push(buildMulOperation(num1, num2));
+            break;
+          case 'sub':
+            if (stack.length < 2) {
+              return null;
+            }
+            num2 = stack.pop();
+            num1 = stack.pop();
+            stack.push(buildSubOperation(num1, num2));
+            break;
+          case 'exch':
+            if (stack.length < 2) {
+              return null;
+            }
+            ast1 = stack.pop(); ast2 = stack.pop();
+            stack.push(ast1, ast2);
+            break;
+          case 'pop':
+            if (stack.length < 1) {
+              return null;
+            }
+            stack.pop();
+            break;
+          case 'index':
+            if (stack.length < 1) {
+              return null;
+            }
+            num1 = stack.pop();
+            if (num1.type !== 'literal') {
+              return null;
+            }
+            n = num1.number;
+            if (n < 0 || (n|0) !== n || stack.length < n) {
+              return null;
+            }
+            ast1 = stack[stack.length - n - 1];
+            if (ast1.type === 'literal' || ast1.type === 'var') {
+              stack.push(ast1);
+              break;
+            }
+            tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max);
+            stack[stack.length - n - 1] = tmpVar;
+            stack.push(tmpVar);
+            instructions.push(new AstVariableDefinition(tmpVar, ast1));
+            break;
+          case 'dup':
+            if (stack.length < 1) {
+              return null;
+            }
+            if (typeof code[i + 1] === 'number' && code[i + 2] === 'gt' &&
+                code[i + 3] === i + 7 && code[i + 4] === 'jz' &&
+                code[i + 5] === 'pop' && code[i + 6] === code[i + 1]) {
+              // special case of the commands sequence for the min operation
+              num1 = stack.pop();
+              stack.push(buildMinOperation(num1, code[i + 1]));
+              i += 6;
+              break;
+            }
+            ast1 = stack[stack.length - 1];
+            if (ast1.type === 'literal' || ast1.type === 'var') {
+              // we don't have to save into intermediate variable a literal or
+              // variable.
+              stack.push(ast1);
+              break;
+            }
+            tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max);
+            stack[stack.length - 1] = tmpVar;
+            stack.push(tmpVar);
+            instructions.push(new AstVariableDefinition(tmpVar, ast1));
+            break;
+          case 'roll':
+            if (stack.length < 2) {
+              return null;
+            }
+            num2 = stack.pop();
+            num1 = stack.pop();
+            if (num2.type !== 'literal' || num1.type !== 'literal') {
+              // both roll operands must be numbers
+              return null;
+            }
+            j = num2.number;
+            n = num1.number;
+            if (n <= 0 || (n|0) !== n || (j|0) !== j || stack.length < n) {
+              // ... and integers
+              return null;
+            }
+            j = ((j % n) + n) % n;
+            if (j === 0) {
+              break; // just skipping -- there are nothing to rotate
+            }
+            Array.prototype.push.apply(stack,
+                                       stack.splice(stack.length - n, n - j));
+            break;
+          default:
+            return null; // unsupported operator
+        }
+      }
+
+      if (stack.length !== outputSize) {
+        return null;
+      }
+
+      var result = [];
+      instructions.forEach(function (instruction) {
+        var statementBuilder = new ExpressionBuilderVisitor();
+        instruction.visit(statementBuilder);
+        result.push(statementBuilder.toString());
+      });
+      stack.forEach(function (expr, i) {
+        var statementBuilder = new ExpressionBuilderVisitor();
+        expr.visit(statementBuilder);
+        var min = range[i * 2], max = range[i * 2 + 1];
+        var out = [statementBuilder.toString()];
+        if (min > expr.min) {
+          out.unshift('Math.max(', min, ', ');
+          out.push(')');
+        }
+        if (max < expr.max) {
+          out.unshift('Math.min(', max, ', ');
+          out.push(')');
+        }
+        out.unshift('dest[destOffset + ', i, '] = ');
+        out.push(';');
+        result.push(out.join(''));
+      });
+      return result.join('\n');
+    }
+  };
+
+  return PostScriptCompiler;
+})();
+
+
+var ColorSpace = (function ColorSpaceClosure() {
+  // Constructor should define this.numComps, this.defaultColor, this.name
+  function ColorSpace() {
+    error('should not call ColorSpace constructor');
+  }
+
+  ColorSpace.prototype = {
+    /**
+     * Converts the color value to the RGB color. The color components are
+     * located in the src array starting from the srcOffset. Returns the array
+     * of the rgb components, each value ranging from [0,255].
+     */
+    getRgb: function ColorSpace_getRgb(src, srcOffset) {
+      var rgb = new Uint8Array(3);
+      this.getRgbItem(src, srcOffset, rgb, 0);
+      return rgb;
+    },
+    /**
+     * Converts the color value to the RGB color, similar to the getRgb method.
+     * The result placed into the dest array starting from the destOffset.
+     */
+    getRgbItem: function ColorSpace_getRgbItem(src, srcOffset,
+                                               dest, destOffset) {
+      error('Should not call ColorSpace.getRgbItem');
+    },
+    /**
+     * Converts the specified number of the color values to the RGB colors.
+     * The colors are located in the src array starting from the srcOffset.
+     * The result is placed into the dest array starting from the destOffset.
+     * The src array items shall be in [0,2^bits) range, the dest array items
+     * will be in [0,255] range. alpha01 indicates how many alpha components
+     * there are in the dest array; it will be either 0 (RGB array) or 1 (RGBA
+     * array).
+     */
+    getRgbBuffer: function ColorSpace_getRgbBuffer(src, srcOffset, count,
+                                                   dest, destOffset, bits,
+                                                   alpha01) {
+      error('Should not call ColorSpace.getRgbBuffer');
+    },
+    /**
+     * Determines the number of bytes required to store the result of the
+     * conversion done by the getRgbBuffer method. As in getRgbBuffer,
+     * |alpha01| is either 0 (RGB output) or 1 (RGBA output).
+     */
+    getOutputLength: function ColorSpace_getOutputLength(inputLength,
+                                                         alpha01) {
+      error('Should not call ColorSpace.getOutputLength');
+    },
+    /**
+     * Returns true if source data will be equal the result/output data.
+     */
+    isPassthrough: function ColorSpace_isPassthrough(bits) {
+      return false;
+    },
+    /**
+     * Fills in the RGB colors in the destination buffer.  alpha01 indicates
+     * how many alpha components there are in the dest array; it will be either
+     * 0 (RGB array) or 1 (RGBA array).
+     */
+    fillRgb: function ColorSpace_fillRgb(dest, originalWidth,
+                                         originalHeight, width, height,
+                                         actualHeight, bpc, comps, alpha01) {
+      var count = originalWidth * originalHeight;
+      var rgbBuf = null;
+      var numComponentColors = 1 << bpc;
+      var needsResizing = originalHeight !== height || originalWidth !== width;
+      var i, ii;
+
+      if (this.isPassthrough(bpc)) {
+        rgbBuf = comps;
+      } else if (this.numComps === 1 && count > numComponentColors &&
+          this.name !== 'DeviceGray' && this.name !== 'DeviceRGB') {
+        // Optimization: create a color map when there is just one component and
+        // we are converting more colors than the size of the color map. We
+        // don't build the map if the colorspace is gray or rgb since those
+        // methods are faster than building a map. This mainly offers big speed
+        // ups for indexed and alternate colorspaces.
+        //
+        // TODO it may be worth while to cache the color map. While running
+        // testing I never hit a cache so I will leave that out for now (perhaps
+        // we are reparsing colorspaces too much?).
+        var allColors = bpc <= 8 ? new Uint8Array(numComponentColors) :
+                                   new Uint16Array(numComponentColors);
+        var key;
+        for (i = 0; i < numComponentColors; i++) {
+          allColors[i] = i;
+        }
+        var colorMap = new Uint8Array(numComponentColors * 3);
+        this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc,
+                          /* alpha01 = */ 0);
+
+        var destPos, rgbPos;
+        if (!needsResizing) {
+          // Fill in the RGB values directly into |dest|.
+          destPos = 0;
+          for (i = 0; i < count; ++i) {
+            key = comps[i] * 3;
+            dest[destPos++] = colorMap[key];
+            dest[destPos++] = colorMap[key + 1];
+            dest[destPos++] = colorMap[key + 2];
+            destPos += alpha01;
+          }
+        } else {
+          rgbBuf = new Uint8Array(count * 3);
+          rgbPos = 0;
+          for (i = 0; i < count; ++i) {
+            key = comps[i] * 3;
+            rgbBuf[rgbPos++] = colorMap[key];
+            rgbBuf[rgbPos++] = colorMap[key + 1];
+            rgbBuf[rgbPos++] = colorMap[key + 2];
+          }
+        }
+      } else {
+        if (!needsResizing) {
+          // Fill in the RGB values directly into |dest|.
+          this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc,
+                            alpha01);
+        } else {
+          rgbBuf = new Uint8Array(count * 3);
+          this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc,
+                            /* alpha01 = */ 0);
+        }
+      }
+
+      if (rgbBuf) {
+        if (needsResizing) {
+          PDFImage.resize(rgbBuf, bpc, 3, originalWidth, originalHeight, width,
+                          height, dest, alpha01);
+        } else {
+          rgbPos = 0;
+          destPos = 0;
+          for (i = 0, ii = width * actualHeight; i < ii; i++) {
+            dest[destPos++] = rgbBuf[rgbPos++];
+            dest[destPos++] = rgbBuf[rgbPos++];
+            dest[destPos++] = rgbBuf[rgbPos++];
+            destPos += alpha01;
+          }
+        }
+      }
+    },
+    /**
+     * True if the colorspace has components in the default range of [0, 1].
+     * This should be true for all colorspaces except for lab color spaces
+     * which are [0,100], [-128, 127], [-128, 127].
+     */
+    usesZeroToOneRange: true
+  };
+
+  ColorSpace.parse = function ColorSpace_parse(cs, xref, res) {
+    var IR = ColorSpace.parseToIR(cs, xref, res);
+    if (IR instanceof AlternateCS) {
+      return IR;
+    }
+    return ColorSpace.fromIR(IR);
+  };
+
+  ColorSpace.fromIR = function ColorSpace_fromIR(IR) {
+    var name = isArray(IR) ? IR[0] : IR;
+    var whitePoint, blackPoint, gamma;
+
+    switch (name) {
+      case 'DeviceGrayCS':
+        return this.singletons.gray;
+      case 'DeviceRgbCS':
+        return this.singletons.rgb;
+      case 'DeviceCmykCS':
+        return this.singletons.cmyk;
+      case 'CalGrayCS':
+        whitePoint = IR[1].WhitePoint;
+        blackPoint = IR[1].BlackPoint;
+        gamma = IR[1].Gamma;
+        return new CalGrayCS(whitePoint, blackPoint, gamma);
+      case 'CalRGBCS':
+        whitePoint = IR[1].WhitePoint;
+        blackPoint = IR[1].BlackPoint;
+        gamma = IR[1].Gamma;
+        var matrix = IR[1].Matrix;
+        return new CalRGBCS(whitePoint, blackPoint, gamma, matrix);
+      case 'PatternCS':
+        var basePatternCS = IR[1];
+        if (basePatternCS) {
+          basePatternCS = ColorSpace.fromIR(basePatternCS);
+        }
+        return new PatternCS(basePatternCS);
+      case 'IndexedCS':
+        var baseIndexedCS = IR[1];
+        var hiVal = IR[2];
+        var lookup = IR[3];
+        return new IndexedCS(ColorSpace.fromIR(baseIndexedCS), hiVal, lookup);
+      case 'AlternateCS':
+        var numComps = IR[1];
+        var alt = IR[2];
+        var tintFnIR = IR[3];
+
+        return new AlternateCS(numComps, ColorSpace.fromIR(alt),
+                                PDFFunction.fromIR(tintFnIR));
+      case 'LabCS':
+        whitePoint = IR[1].WhitePoint;
+        blackPoint = IR[1].BlackPoint;
+        var range = IR[1].Range;
+        return new LabCS(whitePoint, blackPoint, range);
+      default:
+        error('Unknown name ' + name);
+    }
+    return null;
+  };
+
+  ColorSpace.parseToIR = function ColorSpace_parseToIR(cs, xref, res) {
+    if (isName(cs)) {
+      var colorSpaces = res.get('ColorSpace');
+      if (isDict(colorSpaces)) {
+        var refcs = colorSpaces.get(cs.name);
+        if (refcs) {
+          cs = refcs;
+        }
+      }
+    }
+
+    cs = xref.fetchIfRef(cs);
+    var mode;
+
+    if (isName(cs)) {
+      mode = cs.name;
+      this.mode = mode;
+
+      switch (mode) {
+        case 'DeviceGray':
+        case 'G':
+          return 'DeviceGrayCS';
+        case 'DeviceRGB':
+        case 'RGB':
+          return 'DeviceRgbCS';
+        case 'DeviceCMYK':
+        case 'CMYK':
+          return 'DeviceCmykCS';
+        case 'Pattern':
+          return ['PatternCS', null];
+        default:
+          error('unrecognized colorspace ' + mode);
+      }
+    } else if (isArray(cs)) {
+      mode = xref.fetchIfRef(cs[0]).name;
+      this.mode = mode;
+      var numComps, params, alt;
+
+      switch (mode) {
+        case 'DeviceGray':
+        case 'G':
+          return 'DeviceGrayCS';
+        case 'DeviceRGB':
+        case 'RGB':
+          return 'DeviceRgbCS';
+        case 'DeviceCMYK':
+        case 'CMYK':
+          return 'DeviceCmykCS';
+        case 'CalGray':
+          params = xref.fetchIfRef(cs[1]).getAll();
+          return ['CalGrayCS', params];
+        case 'CalRGB':
+          params = xref.fetchIfRef(cs[1]).getAll();
+          return ['CalRGBCS', params];
+        case 'ICCBased':
+          var stream = xref.fetchIfRef(cs[1]);
+          var dict = stream.dict;
+          numComps = dict.get('N');
+          alt = dict.get('Alternate');
+          if (alt) {
+            var altIR = ColorSpace.parseToIR(alt, xref, res);
+            // Parse the /Alternate CS to ensure that the number of components
+            // are correct, and also (indirectly) that it is not a PatternCS.
+            var altCS = ColorSpace.fromIR(altIR);
+            if (altCS.numComps === numComps) {
+              return altIR;
+            }
+            warn('ICCBased color space: Ignoring incorrect /Alternate entry.');
+          }
+          if (numComps === 1) {
+            return 'DeviceGrayCS';
+          } else if (numComps === 3) {
+            return 'DeviceRgbCS';
+          } else if (numComps === 4) {
+            return 'DeviceCmykCS';
+          }
+          break;
+        case 'Pattern':
+          var basePatternCS = cs[1] || null;
+          if (basePatternCS) {
+            basePatternCS = ColorSpace.parseToIR(basePatternCS, xref, res);
+          }
+          return ['PatternCS', basePatternCS];
+        case 'Indexed':
+        case 'I':
+          var baseIndexedCS = ColorSpace.parseToIR(cs[1], xref, res);
+          var hiVal = xref.fetchIfRef(cs[2]) + 1;
+          var lookup = xref.fetchIfRef(cs[3]);
+          if (isStream(lookup)) {
+            lookup = lookup.getBytes();
+          }
+          return ['IndexedCS', baseIndexedCS, hiVal, lookup];
+        case 'Separation':
+        case 'DeviceN':
+          var name = xref.fetchIfRef(cs[1]);
+          numComps = 1;
+          if (isName(name)) {
+            numComps = 1;
+          } else if (isArray(name)) {
+            numComps = name.length;
+          }
+          alt = ColorSpace.parseToIR(cs[2], xref, res);
+          var tintFnIR = PDFFunction.getIR(xref, xref.fetchIfRef(cs[3]));
+          return ['AlternateCS', numComps, alt, tintFnIR];
+        case 'Lab':
+          params = xref.fetchIfRef(cs[1]).getAll();
+          return ['LabCS', params];
+        default:
+          error('unimplemented color space object "' + mode + '"');
+      }
+    } else {
+      error('unrecognized color space object: "' + cs + '"');
+    }
+    return null;
+  };
+  /**
+   * Checks if a decode map matches the default decode map for a color space.
+   * This handles the general decode maps where there are two values per
+   * component. e.g. [0, 1, 0, 1, 0, 1] for a RGB color.
+   * This does not handle Lab, Indexed, or Pattern decode maps since they are
+   * slightly different.
+   * @param {Array} decode Decode map (usually from an image).
+   * @param {Number} n Number of components the color space has.
+   */
+  ColorSpace.isDefaultDecode = function ColorSpace_isDefaultDecode(decode, n) {
+    if (!isArray(decode)) {
+      return true;
+    }
+
+    if (n * 2 !== decode.length) {
+      warn('The decode map is not the correct length');
+      return true;
+    }
+    for (var i = 0, ii = decode.length; i < ii; i += 2) {
+      if (decode[i] !== 0 || decode[i + 1] !== 1) {
+        return false;
+      }
+    }
+    return true;
+  };
+
+  ColorSpace.singletons = {
+    get gray() {
+      return shadow(this, 'gray', new DeviceGrayCS());
+    },
+    get rgb() {
+      return shadow(this, 'rgb', new DeviceRgbCS());
+    },
+    get cmyk() {
+      return shadow(this, 'cmyk', new DeviceCmykCS());
+    }
+  };
+
+  return ColorSpace;
+})();
+
+/**
+ * Alternate color space handles both Separation and DeviceN color spaces.  A
+ * Separation color space is actually just a DeviceN with one color component.
+ * Both color spaces use a tinting function to convert colors to a base color
+ * space.
+ */
+var AlternateCS = (function AlternateCSClosure() {
+  function AlternateCS(numComps, base, tintFn) {
+    this.name = 'Alternate';
+    this.numComps = numComps;
+    this.defaultColor = new Float32Array(numComps);
+    for (var i = 0; i < numComps; ++i) {
+      this.defaultColor[i] = 1;
+    }
+    this.base = base;
+    this.tintFn = tintFn;
+    this.tmpBuf = new Float32Array(base.numComps);
+  }
+
+  AlternateCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem: function AlternateCS_getRgbItem(src, srcOffset,
+                                                dest, destOffset) {
+      var tmpBuf = this.tmpBuf;
+      this.tintFn(src, srcOffset, tmpBuf, 0);
+      this.base.getRgbItem(tmpBuf, 0, dest, destOffset);
+    },
+    getRgbBuffer: function AlternateCS_getRgbBuffer(src, srcOffset, count,
+                                                    dest, destOffset, bits,
+                                                    alpha01) {
+      var tintFn = this.tintFn;
+      var base = this.base;
+      var scale = 1 / ((1 << bits) - 1);
+      var baseNumComps = base.numComps;
+      var usesZeroToOneRange = base.usesZeroToOneRange;
+      var isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) &&
+                          alpha01 === 0;
+      var pos = isPassthrough ? destOffset : 0;
+      var baseBuf = isPassthrough ? dest : new Uint8Array(baseNumComps * count);
+      var numComps = this.numComps;
+
+      var scaled = new Float32Array(numComps);
+      var tinted = new Float32Array(baseNumComps);
+      var i, j;
+      if (usesZeroToOneRange) {
+        for (i = 0; i < count; i++) {
+          for (j = 0; j < numComps; j++) {
+            scaled[j] = src[srcOffset++] * scale;
+          }
+          tintFn(scaled, 0, tinted, 0);
+          for (j = 0; j < baseNumComps; j++) {
+            baseBuf[pos++] = tinted[j] * 255;
+          }
+        }
+      } else {
+        for (i = 0; i < count; i++) {
+          for (j = 0; j < numComps; j++) {
+            scaled[j] = src[srcOffset++] * scale;
+          }
+          tintFn(scaled, 0, tinted, 0);
+          base.getRgbItem(tinted, 0, baseBuf, pos);
+          pos += baseNumComps;
+        }
+      }
+      if (!isPassthrough) {
+        base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01);
+      }
+    },
+    getOutputLength: function AlternateCS_getOutputLength(inputLength,
+                                                          alpha01) {
+      return this.base.getOutputLength(inputLength *
+                                       this.base.numComps / this.numComps,
+                                       alpha01);
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode: function AlternateCS_isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+
+  return AlternateCS;
+})();
+
+var PatternCS = (function PatternCSClosure() {
+  function PatternCS(baseCS) {
+    this.name = 'Pattern';
+    this.base = baseCS;
+  }
+  PatternCS.prototype = {};
+
+  return PatternCS;
+})();
+
+var IndexedCS = (function IndexedCSClosure() {
+  function IndexedCS(base, highVal, lookup) {
+    this.name = 'Indexed';
+    this.numComps = 1;
+    this.defaultColor = new Uint8Array([0]);
+    this.base = base;
+    this.highVal = highVal;
+
+    var baseNumComps = base.numComps;
+    var length = baseNumComps * highVal;
+    var lookupArray;
+
+    if (isStream(lookup)) {
+      lookupArray = new Uint8Array(length);
+      var bytes = lookup.getBytes(length);
+      lookupArray.set(bytes);
+    } else if (isString(lookup)) {
+      lookupArray = new Uint8Array(length);
+      for (var i = 0; i < length; ++i) {
+        lookupArray[i] = lookup.charCodeAt(i);
+      }
+    } else if (lookup instanceof Uint8Array || lookup instanceof Array) {
+      lookupArray = lookup;
+    } else {
+      error('Unrecognized lookup table: ' + lookup);
+    }
+    this.lookup = lookupArray;
+  }
+
+  IndexedCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem: function IndexedCS_getRgbItem(src, srcOffset,
+                                              dest, destOffset) {
+      var numComps = this.base.numComps;
+      var start = src[srcOffset] * numComps;
+      this.base.getRgbItem(this.lookup, start, dest, destOffset);
+    },
+    getRgbBuffer: function IndexedCS_getRgbBuffer(src, srcOffset, count,
+                                                  dest, destOffset, bits,
+                                                  alpha01) {
+      var base = this.base;
+      var numComps = base.numComps;
+      var outputDelta = base.getOutputLength(numComps, alpha01);
+      var lookup = this.lookup;
+
+      for (var i = 0; i < count; ++i) {
+        var lookupPos = src[srcOffset++] * numComps;
+        base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01);
+        destOffset += outputDelta;
+      }
+    },
+    getOutputLength: function IndexedCS_getOutputLength(inputLength, alpha01) {
+      return this.base.getOutputLength(inputLength * this.base.numComps,
+                                       alpha01);
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode: function IndexedCS_isDefaultDecode(decodeMap) {
+      // indexed color maps shouldn't be changed
+      return true;
+    },
+    usesZeroToOneRange: true
+  };
+  return IndexedCS;
+})();
+
+var DeviceGrayCS = (function DeviceGrayCSClosure() {
+  function DeviceGrayCS() {
+    this.name = 'DeviceGray';
+    this.numComps = 1;
+    this.defaultColor = new Float32Array([0]);
+  }
+
+  DeviceGrayCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem: function DeviceGrayCS_getRgbItem(src, srcOffset,
+                                                 dest, destOffset) {
+      var c = (src[srcOffset] * 255) | 0;
+      c = c < 0 ? 0 : c > 255 ? 255 : c;
+      dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c;
+    },
+    getRgbBuffer: function DeviceGrayCS_getRgbBuffer(src, srcOffset, count,
+                                                     dest, destOffset, bits,
+                                                     alpha01) {
+      var scale = 255 / ((1 << bits) - 1);
+      var j = srcOffset, q = destOffset;
+      for (var i = 0; i < count; ++i) {
+        var c = (scale * src[j++]) | 0;
+        dest[q++] = c;
+        dest[q++] = c;
+        dest[q++] = c;
+        q += alpha01;
+      }
+    },
+    getOutputLength: function DeviceGrayCS_getOutputLength(inputLength,
+                                                           alpha01) {
+      return inputLength * (3 + alpha01);
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode: function DeviceGrayCS_isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+  return DeviceGrayCS;
+})();
+
+var DeviceRgbCS = (function DeviceRgbCSClosure() {
+  function DeviceRgbCS() {
+    this.name = 'DeviceRGB';
+    this.numComps = 3;
+    this.defaultColor = new Float32Array([0, 0, 0]);
+  }
+  DeviceRgbCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem: function DeviceRgbCS_getRgbItem(src, srcOffset,
+                                                dest, destOffset) {
+      var r = (src[srcOffset] * 255) | 0;
+      var g = (src[srcOffset + 1] * 255) | 0;
+      var b = (src[srcOffset + 2] * 255) | 0;
+      dest[destOffset] = r < 0 ? 0 : r > 255 ? 255 : r;
+      dest[destOffset + 1] = g < 0 ? 0 : g > 255 ? 255 : g;
+      dest[destOffset + 2] = b < 0 ? 0 : b > 255 ? 255 : b;
+    },
+    getRgbBuffer: function DeviceRgbCS_getRgbBuffer(src, srcOffset, count,
+                                                    dest, destOffset, bits,
+                                                    alpha01) {
+      if (bits === 8 && alpha01 === 0) {
+        dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset);
+        return;
+      }
+      var scale = 255 / ((1 << bits) - 1);
+      var j = srcOffset, q = destOffset;
+      for (var i = 0; i < count; ++i) {
+        dest[q++] = (scale * src[j++]) | 0;
+        dest[q++] = (scale * src[j++]) | 0;
+        dest[q++] = (scale * src[j++]) | 0;
+        q += alpha01;
+      }
+    },
+    getOutputLength: function DeviceRgbCS_getOutputLength(inputLength,
+                                                          alpha01) {
+      return (inputLength * (3 + alpha01) / 3) | 0;
+    },
+    isPassthrough: function DeviceRgbCS_isPassthrough(bits) {
+      return bits === 8;
+    },
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode: function DeviceRgbCS_isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+  return DeviceRgbCS;
+})();
+
+var DeviceCmykCS = (function DeviceCmykCSClosure() {
+  // The coefficients below was found using numerical analysis: the method of
+  // steepest descent for the sum((f_i - color_value_i)^2) for r/g/b colors,
+  // where color_value is the tabular value from the table of sampled RGB colors
+  // from CMYK US Web Coated (SWOP) colorspace, and f_i is the corresponding
+  // CMYK color conversion using the estimation below:
+  //   f(A, B,.. N) = Acc+Bcm+Ccy+Dck+c+Fmm+Gmy+Hmk+Im+Jyy+Kyk+Ly+Mkk+Nk+255
+  function convertToRgb(src, srcOffset, srcScale, dest, destOffset) {
+    var c = src[srcOffset + 0] * srcScale;
+    var m = src[srcOffset + 1] * srcScale;
+    var y = src[srcOffset + 2] * srcScale;
+    var k = src[srcOffset + 3] * srcScale;
+
+    var r =
+      (c * (-4.387332384609988 * c + 54.48615194189176 * m +
+            18.82290502165302 * y + 212.25662451639585 * k +
+            -285.2331026137004) +
+       m * (1.7149763477362134 * m - 5.6096736904047315 * y +
+            -17.873870861415444 * k - 5.497006427196366) +
+       y * (-2.5217340131683033 * y - 21.248923337353073 * k +
+            17.5119270841813) +
+       k * (-21.86122147463605 * k - 189.48180835922747) + 255) | 0;
+    var g =
+      (c * (8.841041422036149 * c + 60.118027045597366 * m +
+            6.871425592049007 * y + 31.159100130055922 * k +
+            -79.2970844816548) +
+       m * (-15.310361306967817 * m + 17.575251261109482 * y +
+            131.35250912493976 * k - 190.9453302588951) +
+       y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) +
+       k * (-20.737325471181034 * k - 187.80453709719578) + 255) | 0;
+    var b =
+      (c * (0.8842522430003296 * c + 8.078677503112928 * m +
+            30.89978309703729 * y - 0.23883238689178934 * k +
+            -14.183576799673286) +
+       m * (10.49593273432072 * m + 63.02378494754052 * y +
+            50.606957656360734 * k - 112.23884253719248) +
+       y * (0.03296041114873217 * y + 115.60384449646641 * k +
+            -193.58209356861505) +
+       k * (-22.33816807309886 * k - 180.12613974708367) + 255) | 0;
+
+    dest[destOffset] = r > 255 ? 255 : r < 0 ? 0 : r;
+    dest[destOffset + 1] = g > 255 ? 255 : g < 0 ? 0 : g;
+    dest[destOffset + 2] = b > 255 ? 255 : b < 0 ? 0 : b;
+  }
+
+  function DeviceCmykCS() {
+    this.name = 'DeviceCMYK';
+    this.numComps = 4;
+    this.defaultColor = new Float32Array([0, 0, 0, 1]);
+  }
+  DeviceCmykCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem: function DeviceCmykCS_getRgbItem(src, srcOffset,
+                                                 dest, destOffset) {
+      convertToRgb(src, srcOffset, 1, dest, destOffset);
+    },
+    getRgbBuffer: function DeviceCmykCS_getRgbBuffer(src, srcOffset, count,
+                                                     dest, destOffset, bits,
+                                                     alpha01) {
+      var scale = 1 / ((1 << bits) - 1);
+      for (var i = 0; i < count; i++) {
+        convertToRgb(src, srcOffset, scale, dest, destOffset);
+        srcOffset += 4;
+        destOffset += 3 + alpha01;
+      }
+    },
+    getOutputLength: function DeviceCmykCS_getOutputLength(inputLength,
+                                                           alpha01) {
+      return (inputLength / 4 * (3 + alpha01)) | 0;
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode: function DeviceCmykCS_isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+
+  return DeviceCmykCS;
+})();
+
+//
+// CalGrayCS: Based on "PDF Reference, Sixth Ed", p.245
+//
+var CalGrayCS = (function CalGrayCSClosure() {
+  function CalGrayCS(whitePoint, blackPoint, gamma) {
+    this.name = 'CalGray';
+    this.numComps = 1;
+    this.defaultColor = new Float32Array([0]);
+
+    if (!whitePoint) {
+      error('WhitePoint missing - required for color space CalGray');
+    }
+    blackPoint = blackPoint || [0, 0, 0];
+    gamma = gamma || 1;
+
+    // Translate arguments to spec variables.
+    this.XW = whitePoint[0];
+    this.YW = whitePoint[1];
+    this.ZW = whitePoint[2];
+
+    this.XB = blackPoint[0];
+    this.YB = blackPoint[1];
+    this.ZB = blackPoint[2];
+
+    this.G = gamma;
+
+    // Validate variables as per spec.
+    if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {
+      error('Invalid WhitePoint components for ' + this.name +
+            ', no fallback available');
+    }
+
+    if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {
+      info('Invalid BlackPoint for ' + this.name + ', falling back to default');
+      this.XB = this.YB = this.ZB = 0;
+    }
+
+    if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) {
+      warn(this.name + ', BlackPoint: XB: ' + this.XB + ', YB: ' + this.YB +
+           ', ZB: ' + this.ZB + ', only default values are supported.');
+    }
+
+    if (this.G < 1) {
+      info('Invalid Gamma: ' + this.G + ' for ' + this.name +
+           ', falling back to default');
+      this.G = 1;
+    }
+  }
+
+  function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {
+    // A represents a gray component of a calibrated gray space.
+    // A <---> AG in the spec
+    var A = src[srcOffset] * scale;
+    var AG = Math.pow(A, cs.G);
+
+    // Computes L as per spec. ( = cs.YW * AG )
+    // Except if other than default BlackPoint values are used.
+    var L = cs.YW * AG;
+    // http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html, Ch 4.
+    // Convert values to rgb range [0, 255].
+    var val = Math.max(295.8 * Math.pow(L, 0.333333333333333333) - 40.8, 0) | 0;
+    dest[destOffset] = val;
+    dest[destOffset + 1] = val;
+    dest[destOffset + 2] = val;
+  }
+
+  CalGrayCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem: function CalGrayCS_getRgbItem(src, srcOffset,
+                                              dest, destOffset) {
+      convertToRgb(this, src, srcOffset, dest, destOffset, 1);
+    },
+    getRgbBuffer: function CalGrayCS_getRgbBuffer(src, srcOffset, count,
+                                                  dest, destOffset, bits,
+                                                  alpha01) {
+      var scale = 1 / ((1 << bits) - 1);
+
+      for (var i = 0; i < count; ++i) {
+        convertToRgb(this, src, srcOffset, dest, destOffset, scale);
+        srcOffset += 1;
+        destOffset += 3 + alpha01;
+      }
+    },
+    getOutputLength: function CalGrayCS_getOutputLength(inputLength, alpha01) {
+      return inputLength * (3 + alpha01);
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode: function CalGrayCS_isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+  return CalGrayCS;
+})();
+
+//
+// CalRGBCS: Based on "PDF Reference, Sixth Ed", p.247
+//
+var CalRGBCS = (function CalRGBCSClosure() {
+
+  // See http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html for these
+  // matrices.
+  var BRADFORD_SCALE_MATRIX = new Float32Array([
+    0.8951, 0.2664, -0.1614,
+    -0.7502, 1.7135, 0.0367,
+    0.0389, -0.0685, 1.0296]);
+
+  var BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([
+    0.9869929, -0.1470543, 0.1599627,
+    0.4323053, 0.5183603, 0.0492912,
+    -0.0085287, 0.0400428, 0.9684867]);
+
+  // See http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html.
+  var SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([
+    3.2404542, -1.5371385, -0.4985314,
+    -0.9692660, 1.8760108, 0.0415560,
+    0.0556434, -0.2040259, 1.0572252]);
+
+  var FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]);
+
+  var tempNormalizeMatrix = new Float32Array(3);
+  var tempConvertMatrix1 = new Float32Array(3);
+  var tempConvertMatrix2 = new Float32Array(3);
+
+  var DECODE_L_CONSTANT = Math.pow(((8 + 16) / 116), 3) / 8.0;
+
+  function CalRGBCS(whitePoint, blackPoint, gamma, matrix) {
+    this.name = 'CalRGB';
+    this.numComps = 3;
+    this.defaultColor = new Float32Array(3);
+
+    if (!whitePoint) {
+      error('WhitePoint missing - required for color space CalRGB');
+    }
+    blackPoint = blackPoint || new Float32Array(3);
+    gamma = gamma || new Float32Array([1, 1, 1]);
+    matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]);
+
+    // Translate arguments to spec variables.
+    var XW = whitePoint[0];
+    var YW = whitePoint[1];
+    var ZW = whitePoint[2];
+    this.whitePoint = whitePoint;
+
+    var XB = blackPoint[0];
+    var YB = blackPoint[1];
+    var ZB = blackPoint[2];
+    this.blackPoint = blackPoint;
+
+    this.GR = gamma[0];
+    this.GG = gamma[1];
+    this.GB = gamma[2];
+
+    this.MXA = matrix[0];
+    this.MYA = matrix[1];
+    this.MZA = matrix[2];
+    this.MXB = matrix[3];
+    this.MYB = matrix[4];
+    this.MZB = matrix[5];
+    this.MXC = matrix[6];
+    this.MYC = matrix[7];
+    this.MZC = matrix[8];
+
+    // Validate variables as per spec.
+    if (XW < 0 || ZW < 0 || YW !== 1) {
+      error('Invalid WhitePoint components for ' + this.name +
+            ', no fallback available');
+    }
+
+    if (XB < 0 || YB < 0 || ZB < 0) {
+      info('Invalid BlackPoint for ' + this.name + ' [' + XB + ', ' + YB +
+           ', ' + ZB + '], falling back to default');
+      this.blackPoint = new Float32Array(3);
+    }
+
+    if (this.GR < 0 || this.GG < 0 || this.GB < 0) {
+      info('Invalid Gamma [' + this.GR + ', ' + this.GG + ', ' + this.GB +
+           '] for ' + this.name + ', falling back to default');
+      this.GR = this.GG = this.GB = 1;
+    }
+
+    if (this.MXA < 0 || this.MYA < 0 || this.MZA < 0 ||
+        this.MXB < 0 || this.MYB < 0 || this.MZB < 0 ||
+        this.MXC < 0 || this.MYC < 0 || this.MZC < 0) {
+      info('Invalid Matrix for ' + this.name + ' [' +
+           this.MXA + ', ' + this.MYA + ', ' + this.MZA +
+           this.MXB + ', ' + this.MYB + ', ' + this.MZB +
+           this.MXC + ', ' + this.MYC + ', ' + this.MZC +
+           '], falling back to default');
+      this.MXA = this.MYB = this.MZC = 1;
+      this.MXB = this.MYA = this.MZA = this.MXC = this.MYC = this.MZB = 0;
+    }
+  }
+
+  function matrixProduct(a, b, result) {
+      result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
+      result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2];
+      result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2];
+  }
+
+  function convertToFlat(sourceWhitePoint, LMS, result) {
+      result[0] = LMS[0] * 1 / sourceWhitePoint[0];
+      result[1] = LMS[1] * 1 / sourceWhitePoint[1];
+      result[2] = LMS[2] * 1 / sourceWhitePoint[2];
+  }
+
+  function convertToD65(sourceWhitePoint, LMS, result) {
+    var D65X = 0.95047;
+    var D65Y = 1;
+    var D65Z = 1.08883;
+
+    result[0] = LMS[0] * D65X / sourceWhitePoint[0];
+    result[1] = LMS[1] * D65Y / sourceWhitePoint[1];
+    result[2] = LMS[2] * D65Z / sourceWhitePoint[2];
+  }
+
+  function sRGBTransferFunction(color) {
+    // See http://en.wikipedia.org/wiki/SRGB.
+    if (color <= 0.0031308){
+      return adjustToRange(0, 1, 12.92 * color);
+    }
+
+    return adjustToRange(0, 1, (1 + 0.055) * Math.pow(color, 1 / 2.4) - 0.055);
+  }
+
+  function adjustToRange(min, max, value) {
+    return Math.max(min, Math.min(max, value));
+  }
+
+  function decodeL(L) {
+    if (L < 0) {
+      return -decodeL(-L);
+    }
+
+    if (L > 8.0) {
+      return Math.pow(((L + 16) / 116), 3);
+    }
+
+    return L * DECODE_L_CONSTANT;
+  }
+
+  function compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) {
+
+    // In case the blackPoint is already the default blackPoint then there is
+    // no need to do compensation.
+    if (sourceBlackPoint[0] === 0 &&
+        sourceBlackPoint[1] === 0 &&
+        sourceBlackPoint[2] === 0) {
+      result[0] = XYZ_Flat[0];
+      result[1] = XYZ_Flat[1];
+      result[2] = XYZ_Flat[2];
+      return;
+    }
+
+    // For the blackPoint calculation details, please see
+    // http://www.adobe.com/content/dam/Adobe/en/devnet/photoshop/sdk/
+    // AdobeBPC.pdf.
+    // The destination blackPoint is the default blackPoint [0, 0, 0].
+    var zeroDecodeL = decodeL(0);
+
+    var X_DST = zeroDecodeL;
+    var X_SRC = decodeL(sourceBlackPoint[0]);
+
+    var Y_DST = zeroDecodeL;
+    var Y_SRC = decodeL(sourceBlackPoint[1]);
+
+    var Z_DST = zeroDecodeL;
+    var Z_SRC = decodeL(sourceBlackPoint[2]);
+
+    var X_Scale = (1 - X_DST) / (1 - X_SRC);
+    var X_Offset = 1 - X_Scale;
+
+    var Y_Scale = (1 - Y_DST) / (1 - Y_SRC);
+    var Y_Offset = 1 - Y_Scale;
+
+    var Z_Scale = (1 - Z_DST) / (1 - Z_SRC);
+    var Z_Offset = 1 - Z_Scale;
+
+    result[0] = XYZ_Flat[0] * X_Scale + X_Offset;
+    result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset;
+    result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset;
+  }
+
+  function normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) {
+
+    // In case the whitePoint is already flat then there is no need to do
+    // normalization.
+    if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) {
+      result[0] = XYZ_In[0];
+      result[1] = XYZ_In[1];
+      result[2] = XYZ_In[2];
+      return;
+    }
+
+    var LMS = result;
+    matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);
+
+    var LMS_Flat = tempNormalizeMatrix;
+    convertToFlat(sourceWhitePoint, LMS, LMS_Flat);
+
+    matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result);
+  }
+
+  function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) {
+
+    var LMS = result;
+    matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS);
+
+    var LMS_D65 = tempNormalizeMatrix;
+    convertToD65(sourceWhitePoint, LMS, LMS_D65);
+
+    matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result);
+  }
+
+  function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) {
+    // A, B and C represent a red, green and blue components of a calibrated
+    // rgb space.
+    var A = adjustToRange(0, 1, src[srcOffset] * scale);
+    var B = adjustToRange(0, 1, src[srcOffset + 1] * scale);
+    var C = adjustToRange(0, 1, src[srcOffset + 2] * scale);
+
+    // A <---> AGR in the spec
+    // B <---> BGG in the spec
+    // C <---> CGB in the spec
+    var AGR = Math.pow(A, cs.GR);
+    var BGG = Math.pow(B, cs.GG);
+    var CGB = Math.pow(C, cs.GB);
+
+    // Computes intermediate variables L, M, N as per spec.
+    // To decode X, Y, Z values map L, M, N directly to them.
+    var X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB;
+    var Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB;
+    var Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB;
+
+    // The following calculations are based on this document:
+    // http://www.adobe.com/content/dam/Adobe/en/devnet/photoshop/sdk/
+    // AdobeBPC.pdf.
+    var XYZ = tempConvertMatrix1;
+    XYZ[0] = X;
+    XYZ[1] = Y;
+    XYZ[2] = Z;
+    var XYZ_Flat = tempConvertMatrix2;
+
+    normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat);
+
+    var XYZ_Black = tempConvertMatrix1;
+    compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black);
+
+    var XYZ_D65 = tempConvertMatrix2;
+    normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65);
+
+    var SRGB = tempConvertMatrix1;
+    matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB);
+
+    var sR = sRGBTransferFunction(SRGB[0]);
+    var sG = sRGBTransferFunction(SRGB[1]);
+    var sB = sRGBTransferFunction(SRGB[2]);
+
+    // Convert the values to rgb range [0, 255].
+    dest[destOffset] = Math.round(sR * 255);
+    dest[destOffset + 1] = Math.round(sG * 255);
+    dest[destOffset + 2] = Math.round(sB * 255);
+  }
+
+  CalRGBCS.prototype = {
+    getRgb: function CalRGBCS_getRgb(src, srcOffset) {
+      var rgb = new Uint8Array(3);
+      this.getRgbItem(src, srcOffset, rgb, 0);
+      return rgb;
+    },
+    getRgbItem: function CalRGBCS_getRgbItem(src, srcOffset,
+                                             dest, destOffset) {
+      convertToRgb(this, src, srcOffset, dest, destOffset, 1);
+    },
+    getRgbBuffer: function CalRGBCS_getRgbBuffer(src, srcOffset, count,
+                                                 dest, destOffset, bits,
+                                                 alpha01) {
+      var scale = 1 / ((1 << bits) - 1);
+
+      for (var i = 0; i < count; ++i) {
+        convertToRgb(this, src, srcOffset, dest, destOffset, scale);
+        srcOffset += 3;
+        destOffset += 3 + alpha01;
+      }
+    },
+    getOutputLength: function CalRGBCS_getOutputLength(inputLength, alpha01) {
+      return (inputLength * (3 + alpha01) / 3) | 0;
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode: function CalRGBCS_isDefaultDecode(decodeMap) {
+      return ColorSpace.isDefaultDecode(decodeMap, this.numComps);
+    },
+    usesZeroToOneRange: true
+  };
+  return CalRGBCS;
+})();
+
+//
+// LabCS: Based on "PDF Reference, Sixth Ed", p.250
+//
+var LabCS = (function LabCSClosure() {
+  function LabCS(whitePoint, blackPoint, range) {
+    this.name = 'Lab';
+    this.numComps = 3;
+    this.defaultColor = new Float32Array([0, 0, 0]);
+
+    if (!whitePoint) {
+      error('WhitePoint missing - required for color space Lab');
+    }
+    blackPoint = blackPoint || [0, 0, 0];
+    range = range || [-100, 100, -100, 100];
+
+    // Translate args to spec variables
+    this.XW = whitePoint[0];
+    this.YW = whitePoint[1];
+    this.ZW = whitePoint[2];
+    this.amin = range[0];
+    this.amax = range[1];
+    this.bmin = range[2];
+    this.bmax = range[3];
+
+    // These are here just for completeness - the spec doesn't offer any
+    // formulas that use BlackPoint in Lab
+    this.XB = blackPoint[0];
+    this.YB = blackPoint[1];
+    this.ZB = blackPoint[2];
+
+    // Validate vars as per spec
+    if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) {
+      error('Invalid WhitePoint components, no fallback available');
+    }
+
+    if (this.XB < 0 || this.YB < 0 || this.ZB < 0) {
+      info('Invalid BlackPoint, falling back to default');
+      this.XB = this.YB = this.ZB = 0;
+    }
+
+    if (this.amin > this.amax || this.bmin > this.bmax) {
+      info('Invalid Range, falling back to defaults');
+      this.amin = -100;
+      this.amax = 100;
+      this.bmin = -100;
+      this.bmax = 100;
+    }
+  }
+
+  // Function g(x) from spec
+  function fn_g(x) {
+    if (x >= 6 / 29) {
+      return x * x * x;
+    } else {
+      return (108 / 841) * (x - 4 / 29);
+    }
+  }
+
+  function decode(value, high1, low2, high2) {
+    return low2 + (value) * (high2 - low2) / (high1);
+  }
+
+  // If decoding is needed maxVal should be 2^bits per component - 1.
+  function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) {
+    // XXX: Lab input is in the range of [0, 100], [amin, amax], [bmin, bmax]
+    // not the usual [0, 1]. If a command like setFillColor is used the src
+    // values will already be within the correct range. However, if we are
+    // converting an image we have to map the values to the correct range given
+    // above.
+    // Ls,as,bs <---> L*,a*,b* in the spec
+    var Ls = src[srcOffset];
+    var as = src[srcOffset + 1];
+    var bs = src[srcOffset + 2];
+    if (maxVal !== false) {
+      Ls = decode(Ls, maxVal, 0, 100);
+      as = decode(as, maxVal, cs.amin, cs.amax);
+      bs = decode(bs, maxVal, cs.bmin, cs.bmax);
+    }
+
+    // Adjust limits of 'as' and 'bs'
+    as = as > cs.amax ? cs.amax : as < cs.amin ? cs.amin : as;
+    bs = bs > cs.bmax ? cs.bmax : bs < cs.bmin ? cs.bmin : bs;
+
+    // Computes intermediate variables X,Y,Z as per spec
+    var M = (Ls + 16) / 116;
+    var L = M + (as / 500);
+    var N = M - (bs / 200);
+
+    var X = cs.XW * fn_g(L);
+    var Y = cs.YW * fn_g(M);
+    var Z = cs.ZW * fn_g(N);
+
+    var r, g, b;
+    // Using different conversions for D50 and D65 white points,
+    // per http://www.color.org/srgb.pdf
+    if (cs.ZW < 1) {
+      // Assuming D50 (X=0.9642, Y=1.00, Z=0.8249)
+      r = X * 3.1339 + Y * -1.6170 + Z * -0.4906;
+      g = X * -0.9785 + Y * 1.9160 + Z * 0.0333;
+      b = X * 0.0720 + Y * -0.2290 + Z * 1.4057;
+    } else {
+      // Assuming D65 (X=0.9505, Y=1.00, Z=1.0888)
+      r = X * 3.2406 + Y * -1.5372 + Z * -0.4986;
+      g = X * -0.9689 + Y * 1.8758 + Z * 0.0415;
+      b = X * 0.0557 + Y * -0.2040 + Z * 1.0570;
+    }
+    // clamp color values to [0,1] range then convert to [0,255] range.
+    dest[destOffset] = r <= 0 ? 0 : r >= 1 ? 255 : Math.sqrt(r) * 255 | 0;
+    dest[destOffset + 1] = g <= 0 ? 0 : g >= 1 ? 255 : Math.sqrt(g) * 255 | 0;
+    dest[destOffset + 2] = b <= 0 ? 0 : b >= 1 ? 255 : Math.sqrt(b) * 255 | 0;
+  }
+
+  LabCS.prototype = {
+    getRgb: ColorSpace.prototype.getRgb,
+    getRgbItem: function LabCS_getRgbItem(src, srcOffset, dest, destOffset) {
+      convertToRgb(this, src, srcOffset, false, dest, destOffset);
+    },
+    getRgbBuffer: function LabCS_getRgbBuffer(src, srcOffset, count,
+                                              dest, destOffset, bits,
+                                              alpha01) {
+      var maxVal = (1 << bits) - 1;
+      for (var i = 0; i < count; i++) {
+        convertToRgb(this, src, srcOffset, maxVal, dest, destOffset);
+        srcOffset += 3;
+        destOffset += 3 + alpha01;
+      }
+    },
+    getOutputLength: function LabCS_getOutputLength(inputLength, alpha01) {
+      return (inputLength * (3 + alpha01) / 3) | 0;
+    },
+    isPassthrough: ColorSpace.prototype.isPassthrough,
+    fillRgb: ColorSpace.prototype.fillRgb,
+    isDefaultDecode: function LabCS_isDefaultDecode(decodeMap) {
+      // XXX: Decoding is handled with the lab conversion because of the strange
+      // ranges that are used.
+      return true;
+    },
+    usesZeroToOneRange: false
+  };
+  return LabCS;
+})();
+
+
+var ARCFourCipher = (function ARCFourCipherClosure() {
+  function ARCFourCipher(key) {
+    this.a = 0;
+    this.b = 0;
+    var s = new Uint8Array(256);
+    var i, j = 0, tmp, keyLength = key.length;
+    for (i = 0; i < 256; ++i) {
+      s[i] = i;
+    }
+    for (i = 0; i < 256; ++i) {
+      tmp = s[i];
+      j = (j + tmp + key[i % keyLength]) & 0xFF;
+      s[i] = s[j];
+      s[j] = tmp;
+    }
+    this.s = s;
+  }
+
+  ARCFourCipher.prototype = {
+    encryptBlock: function ARCFourCipher_encryptBlock(data) {
+      var i, n = data.length, tmp, tmp2;
+      var a = this.a, b = this.b, s = this.s;
+      var output = new Uint8Array(n);
+      for (i = 0; i < n; ++i) {
+        a = (a + 1) & 0xFF;
+        tmp = s[a];
+        b = (b + tmp) & 0xFF;
+        tmp2 = s[b];
+        s[a] = tmp2;
+        s[b] = tmp;
+        output[i] = data[i] ^ s[(tmp + tmp2) & 0xFF];
+      }
+      this.a = a;
+      this.b = b;
+      return output;
+    }
+  };
+  ARCFourCipher.prototype.decryptBlock = ARCFourCipher.prototype.encryptBlock;
+
+  return ARCFourCipher;
+})();
+
+var calculateMD5 = (function calculateMD5Closure() {
+  var r = new Uint8Array([
+    7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,
+    5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,
+    4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,
+    6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]);
+
+  var k = new Int32Array([
+    -680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426,
+    -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162,
+    1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632,
+    643717713, -373897302, -701558691, 38016083, -660478335, -405537848,
+    568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784,
+    1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556,
+    -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222,
+    -722521979, 76029189, -640364487, -421815835, 530742520, -995338651,
+    -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606,
+    -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649,
+    -145523070, -1120210379, 718787259, -343485551]);
+
+  function hash(data, offset, length) {
+    var h0 = 1732584193, h1 = -271733879, h2 = -1732584194, h3 = 271733878;
+    // pre-processing
+    var paddedLength = (length + 72) & ~63; // data + 9 extra bytes
+    var padded = new Uint8Array(paddedLength);
+    var i, j, n;
+    for (i = 0; i < length; ++i) {
+      padded[i] = data[offset++];
+    }
+    padded[i++] = 0x80;
+    n = paddedLength - 8;
+    while (i < n) {
+      padded[i++] = 0;
+    }
+    padded[i++] = (length << 3) & 0xFF;
+    padded[i++] = (length >> 5) & 0xFF;
+    padded[i++] = (length >> 13) & 0xFF;
+    padded[i++] = (length >> 21) & 0xFF;
+    padded[i++] = (length >>> 29) & 0xFF;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    var w = new Int32Array(16);
+    for (i = 0; i < paddedLength;) {
+      for (j = 0; j < 16; ++j, i += 4) {
+        w[j] = (padded[i] | (padded[i + 1] << 8) |
+               (padded[i + 2] << 16) | (padded[i + 3] << 24));
+      }
+      var a = h0, b = h1, c = h2, d = h3, f, g;
+      for (j = 0; j < 64; ++j) {
+        if (j < 16) {
+          f = (b & c) | ((~b) & d);
+          g = j;
+        } else if (j < 32) {
+          f = (d & b) | ((~d) & c);
+          g = (5 * j + 1) & 15;
+        } else if (j < 48) {
+          f = b ^ c ^ d;
+          g = (3 * j + 5) & 15;
+        } else {
+          f = c ^ (b | (~d));
+          g = (7 * j) & 15;
+        }
+        var tmp = d, rotateArg = (a + f + k[j] + w[g]) | 0, rotate = r[j];
+        d = c;
+        c = b;
+        b = (b + ((rotateArg << rotate) | (rotateArg >>> (32 - rotate)))) | 0;
+        a = tmp;
+      }
+      h0 = (h0 + a) | 0;
+      h1 = (h1 + b) | 0;
+      h2 = (h2 + c) | 0;
+      h3 = (h3 + d) | 0;
+    }
+    return new Uint8Array([
+      h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >>> 24) & 0xFF,
+      h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >>> 24) & 0xFF,
+      h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >>> 24) & 0xFF,
+      h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >>> 24) & 0xFF
+    ]);
+  }
+
+  return hash;
+})();
+var Word64 = (function Word64Closure() {
+  function Word64(highInteger, lowInteger) {
+    this.high = highInteger | 0;
+    this.low = lowInteger | 0;
+  }
+  Word64.prototype = {
+    and: function Word64_and(word) {
+      this.high &= word.high;
+      this.low &= word.low;
+    },
+    xor: function Word64_xor(word) {
+     this.high ^= word.high;
+     this.low ^= word.low;
+    },
+
+    or: function Word64_or(word) {
+      this.high |= word.high;
+      this.low |= word.low;
+    },
+
+    shiftRight: function Word64_shiftRight(places) {
+      if (places >= 32) {
+        this.low = (this.high >>> (places - 32)) | 0;
+        this.high = 0;
+      } else {
+        this.low = (this.low >>> places) | (this.high << (32 - places));
+        this.high = (this.high >>> places) | 0;
+      }
+    },
+
+    shiftLeft: function Word64_shiftLeft(places) {
+      if (places >= 32) {
+        this.high = this.low << (places - 32);
+        this.low = 0;
+      } else {
+        this.high = (this.high << places) | (this.low >>> (32 - places));
+        this.low = this.low << places;
+      }
+    },
+
+    rotateRight: function Word64_rotateRight(places) {
+      var low, high;
+      if (places & 32) {
+        high = this.low;
+        low = this.high;
+      } else {
+        low = this.low;
+        high = this.high;
+      }
+      places &= 31;
+      this.low = (low >>> places) | (high << (32 - places));
+      this.high = (high >>> places) | (low << (32 - places));
+    },
+
+    not: function Word64_not() {
+      this.high = ~this.high;
+      this.low = ~this.low;
+    },
+
+    add: function Word64_add(word) {
+      var lowAdd = (this.low >>> 0) + (word.low >>> 0);
+      var highAdd = (this.high >>> 0) + (word.high >>> 0);
+      if (lowAdd > 0xFFFFFFFF) {
+        highAdd += 1;
+      }
+      this.low = lowAdd | 0;
+      this.high = highAdd | 0;
+    },
+
+    copyTo: function Word64_copyTo(bytes, offset) {
+      bytes[offset] = (this.high >>> 24) & 0xFF;
+      bytes[offset + 1] = (this.high >> 16) & 0xFF;
+      bytes[offset + 2] = (this.high >> 8) & 0xFF;
+      bytes[offset + 3] = this.high & 0xFF;
+      bytes[offset + 4] = (this.low >>> 24) & 0xFF;
+      bytes[offset + 5] = (this.low >> 16) & 0xFF;
+      bytes[offset + 6] = (this.low >> 8) & 0xFF;
+      bytes[offset + 7] = this.low & 0xFF;
+    },
+
+    assign: function Word64_assign(word) {
+      this.high = word.high;
+      this.low = word.low;
+    }
+  };
+  return Word64;
+})();
+
+var calculateSHA256 = (function calculateSHA256Closure() {
+  function rotr(x, n) {
+    return (x >>> n) | (x << 32 - n);
+  }
+
+  function ch(x, y, z) {
+    return (x & y) ^ (~x & z);
+  }
+
+  function maj(x, y, z) {
+    return (x & y) ^ (x & z) ^ (y & z);
+  }
+
+  function sigma(x) {
+    return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22);
+  }
+
+  function sigmaPrime(x) {
+    return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25);
+  }
+
+  function littleSigma(x) {
+    return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3;
+  }
+
+  function littleSigmaPrime(x) {
+    return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10;
+  }
+
+  var k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
+           0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
+           0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
+           0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
+           0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
+           0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
+           0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
+           0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
+           0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
+           0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
+           0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
+           0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
+           0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
+           0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
+           0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
+           0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
+
+  function hash(data, offset, length) {
+    // initial hash values
+    var h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372,
+        h3 = 0xa54ff53a, h4 = 0x510e527f, h5 = 0x9b05688c,
+        h6 = 0x1f83d9ab, h7 = 0x5be0cd19;
+    // pre-processing
+    var paddedLength = Math.ceil((length + 9) / 64) * 64;
+    var padded = new Uint8Array(paddedLength);
+    var i, j, n;
+    for (i = 0; i < length; ++i) {
+      padded[i] = data[offset++];
+    }
+    padded[i++] = 0x80;
+    n = paddedLength - 8;
+    while (i < n) {
+      padded[i++] = 0;
+    }
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = (length >>> 29) & 0xFF;
+    padded[i++] = (length >> 21) & 0xFF;
+    padded[i++] = (length >> 13) & 0xFF;
+    padded[i++] = (length >> 5) & 0xFF;
+    padded[i++] = (length << 3) & 0xFF;
+    var w = new Uint32Array(64);
+    // for each 512 bit block
+    for (i = 0; i < paddedLength;) {
+      for (j = 0; j < 16; ++j) {
+        w[j] = (padded[i] << 24 | (padded[i + 1] << 16) |
+               (padded[i + 2] << 8) | (padded[i + 3]));
+        i += 4;
+      }
+
+      for (j = 16; j < 64; ++j) {
+        w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] +
+               littleSigma(w[j - 15]) + w[j - 16] | 0;
+      }
+      var a = h0, b = h1, c = h2, d = h3, e = h4,
+          f = h5, g = h6, h = h7, t1, t2;
+      for (j = 0; j < 64; ++j) {
+        t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j];
+        t2 = sigma(a) + maj(a, b, c);
+        h = g;
+        g = f;
+        f = e;
+        e = (d + t1) | 0;
+        d = c;
+        c = b;
+        b = a;
+        a = (t1 + t2) | 0;
+      }
+      h0 = (h0 + a) | 0;
+      h1 = (h1 + b) | 0;
+      h2 = (h2 + c) | 0;
+      h3 = (h3 + d) | 0;
+      h4 = (h4 + e) | 0;
+      h5 = (h5 + f) | 0;
+      h6 = (h6 + g) | 0;
+      h7 = (h7 + h) | 0;
+    }
+    return new Uint8Array([
+      (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, (h0) & 0xFF,
+      (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, (h1) & 0xFF,
+      (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, (h2) & 0xFF,
+      (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, (h3) & 0xFF,
+      (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, (h4) & 0xFF,
+      (h5 >> 24) & 0xFF, (h5 >> 16) & 0xFF, (h5 >> 8) & 0xFF, (h5) & 0xFF,
+      (h6 >> 24) & 0xFF, (h6 >> 16) & 0xFF, (h6 >> 8) & 0xFF, (h6) & 0xFF,
+      (h7 >> 24) & 0xFF, (h7 >> 16) & 0xFF, (h7 >> 8) & 0xFF, (h7) & 0xFF
+    ]);
+  }
+
+  return hash;
+})();
+
+var calculateSHA512 = (function calculateSHA512Closure() {
+  function ch(result, x, y, z, tmp) {
+    result.assign(x);
+    result.and(y);
+    tmp.assign(x);
+    tmp.not();
+    tmp.and(z);
+    result.xor(tmp);
+  }
+
+  function maj(result, x, y, z, tmp) {
+    result.assign(x);
+    result.and(y);
+    tmp.assign(x);
+    tmp.and(z);
+    result.xor(tmp);
+    tmp.assign(y);
+    tmp.and(z);
+    result.xor(tmp);
+  }
+
+  function sigma(result, x, tmp) {
+    result.assign(x);
+    result.rotateRight(28);
+    tmp.assign(x);
+    tmp.rotateRight(34);
+    result.xor(tmp);
+    tmp.assign(x);
+    tmp.rotateRight(39);
+    result.xor(tmp);
+  }
+
+  function sigmaPrime(result, x, tmp) {
+    result.assign(x);
+    result.rotateRight(14);
+    tmp.assign(x);
+    tmp.rotateRight(18);
+    result.xor(tmp);
+    tmp.assign(x);
+    tmp.rotateRight(41);
+    result.xor(tmp);
+  }
+
+  function littleSigma(result, x, tmp) {
+    result.assign(x);
+    result.rotateRight(1);
+    tmp.assign(x);
+    tmp.rotateRight(8);
+    result.xor(tmp);
+    tmp.assign(x);
+    tmp.shiftRight(7);
+    result.xor(tmp);
+  }
+
+  function littleSigmaPrime(result, x, tmp) {
+    result.assign(x);
+    result.rotateRight(19);
+    tmp.assign(x);
+    tmp.rotateRight(61);
+    result.xor(tmp);
+    tmp.assign(x);
+    tmp.shiftRight(6);
+    result.xor(tmp);
+  }
+
+  var k = [
+    new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd),
+    new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc),
+    new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019),
+    new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118),
+    new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe),
+    new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2),
+    new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1),
+    new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694),
+    new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3),
+    new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65),
+    new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483),
+    new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5),
+    new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210),
+    new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4),
+    new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725),
+    new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70),
+    new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926),
+    new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df),
+    new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8),
+    new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b),
+    new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001),
+    new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30),
+    new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910),
+    new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8),
+    new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53),
+    new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8),
+    new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb),
+    new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3),
+    new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60),
+    new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec),
+    new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9),
+    new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b),
+    new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207),
+    new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178),
+    new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6),
+    new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b),
+    new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493),
+    new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c),
+    new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a),
+    new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)];
+
+  function hash(data, offset, length, mode384) {
+    mode384 = !!mode384;
+    // initial hash values
+    var h0, h1, h2, h3, h4, h5, h6, h7;
+    if (!mode384) {
+      h0 = new Word64(0x6a09e667, 0xf3bcc908);
+      h1 = new Word64(0xbb67ae85, 0x84caa73b);
+      h2 = new Word64(0x3c6ef372, 0xfe94f82b);
+      h3 = new Word64(0xa54ff53a, 0x5f1d36f1);
+      h4 = new Word64(0x510e527f, 0xade682d1);
+      h5 = new Word64(0x9b05688c, 0x2b3e6c1f);
+      h6 = new Word64(0x1f83d9ab, 0xfb41bd6b);
+      h7 = new Word64(0x5be0cd19, 0x137e2179);
+    }
+    else {
+      // SHA384 is exactly the same
+      // except with different starting values and a trimmed result
+      h0 = new Word64(0xcbbb9d5d, 0xc1059ed8);
+      h1 = new Word64(0x629a292a, 0x367cd507);
+      h2 = new Word64(0x9159015a, 0x3070dd17);
+      h3 = new Word64(0x152fecd8, 0xf70e5939);
+      h4 = new Word64(0x67332667, 0xffc00b31);
+      h5 = new Word64(0x8eb44a87, 0x68581511);
+      h6 = new Word64(0xdb0c2e0d, 0x64f98fa7);
+      h7 = new Word64(0x47b5481d, 0xbefa4fa4);
+    }
+
+    // pre-processing
+    var paddedLength = Math.ceil((length + 17) / 128) * 128;
+    var padded = new Uint8Array(paddedLength);
+    var i, j, n;
+    for (i = 0; i < length; ++i) {
+      padded[i] = data[offset++];
+    }
+    padded[i++] = 0x80;
+    n = paddedLength - 16;
+    while (i < n) {
+      padded[i++] = 0;
+    }
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = 0;
+    padded[i++] = (length >>> 29) & 0xFF;
+    padded[i++] = (length >> 21) & 0xFF;
+    padded[i++] = (length >> 13) & 0xFF;
+    padded[i++] = (length >> 5) & 0xFF;
+    padded[i++] = (length << 3) & 0xFF;
+
+    var w = new Array(80);
+    for (i = 0; i < 80; i++) {
+      w[i] = new Word64(0, 0);
+    }
+    var a = new Word64(0, 0), b = new Word64(0, 0), c = new Word64(0, 0);
+    var d = new Word64(0, 0), e = new Word64(0, 0), f = new Word64(0, 0);
+    var g = new Word64(0, 0), h = new Word64(0, 0);
+    var t1 = new Word64(0, 0), t2 = new Word64(0, 0);
+    var tmp1 = new Word64(0, 0), tmp2 = new Word64(0, 0), tmp3;
+
+    // for each 1024 bit block
+    for (i = 0; i < paddedLength;) {
+      for (j = 0; j < 16; ++j) {
+        w[j].high = (padded[i] << 24) | (padded[i + 1] << 16) |
+                    (padded[i + 2] << 8) | (padded[i + 3]);
+        w[j].low = (padded[i + 4]) << 24 | (padded[i + 5]) << 16 |
+                   (padded[i + 6]) << 8 | (padded[i + 7]);
+        i += 8;
+      }
+      for (j = 16; j < 80; ++j) {
+        tmp3 = w[j];
+        littleSigmaPrime(tmp3, w[j - 2], tmp2);
+        tmp3.add(w[j - 7]);
+        littleSigma(tmp1, w[j - 15], tmp2);
+        tmp3.add(tmp1);
+        tmp3.add(w[j - 16]);
+      }
+
+      a.assign(h0); b.assign(h1); c.assign(h2); d.assign(h3);
+      e.assign(h4); f.assign(h5); g.assign(h6); h.assign(h7);
+      for (j = 0; j < 80; ++j) {
+        t1.assign(h);
+        sigmaPrime(tmp1, e, tmp2);
+        t1.add(tmp1);
+        ch(tmp1, e, f, g, tmp2);
+        t1.add(tmp1);
+        t1.add(k[j]);
+        t1.add(w[j]);
+
+        sigma(t2, a, tmp2);
+        maj(tmp1, a, b, c, tmp2);
+        t2.add(tmp1);
+
+        tmp3 = h;
+        h = g;
+        g = f;
+        f = e;
+        d.add(t1);
+        e = d;
+        d = c;
+        c = b;
+        b = a;
+        tmp3.assign(t1);
+        tmp3.add(t2);
+        a = tmp3;
+      }
+      h0.add(a);
+      h1.add(b);
+      h2.add(c);
+      h3.add(d);
+      h4.add(e);
+      h5.add(f);
+      h6.add(g);
+      h7.add(h);
+    }
+
+    var result;
+    if (!mode384) {
+      result = new Uint8Array(64);
+      h0.copyTo(result,0);
+      h1.copyTo(result,8);
+      h2.copyTo(result,16);
+      h3.copyTo(result,24);
+      h4.copyTo(result,32);
+      h5.copyTo(result,40);
+      h6.copyTo(result,48);
+      h7.copyTo(result,56);
+    }
+    else {
+      result = new Uint8Array(48);
+      h0.copyTo(result,0);
+      h1.copyTo(result,8);
+      h2.copyTo(result,16);
+      h3.copyTo(result,24);
+      h4.copyTo(result,32);
+      h5.copyTo(result,40);
+    }
+    return result;
+  }
+
+  return hash;
+})();
+var calculateSHA384 = (function calculateSHA384Closure() {
+  function hash(data, offset, length) {
+    return calculateSHA512(data, offset, length, true);
+  }
+
+  return hash;
+})();
+var NullCipher = (function NullCipherClosure() {
+  function NullCipher() {
+  }
+
+  NullCipher.prototype = {
+    decryptBlock: function NullCipher_decryptBlock(data) {
+      return data;
+    }
+  };
+
+  return NullCipher;
+})();
+
+var AES128Cipher = (function AES128CipherClosure() {
+  var rcon = new Uint8Array([
+    0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c,
+    0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a,
+    0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd,
+    0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a,
+    0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+    0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6,
+    0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72,
+    0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc,
+    0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10,
+    0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e,
+    0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5,
+    0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94,
+    0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02,
+    0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d,
+    0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d,
+    0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f,
+    0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb,
+    0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c,
+    0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a,
+    0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd,
+    0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a,
+    0x74, 0xe8, 0xcb, 0x8d]);
+
+  var s = new Uint8Array([
+    0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b,
+    0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
+    0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26,
+    0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
+    0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2,
+    0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
+    0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed,
+    0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
+    0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f,
+    0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
+    0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec,
+    0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
+    0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14,
+    0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
+    0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d,
+    0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
+    0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f,
+    0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
+    0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11,
+    0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
+    0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f,
+    0xb0, 0x54, 0xbb, 0x16]);
+
+  var inv_s = new Uint8Array([
+    0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e,
+    0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
+    0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32,
+    0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
+    0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49,
+    0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
+    0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50,
+    0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
+    0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05,
+    0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
+    0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41,
+    0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
+    0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8,
+    0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
+    0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b,
+    0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
+    0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59,
+    0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
+    0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d,
+    0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
+    0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63,
+    0x55, 0x21, 0x0c, 0x7d]);
+  var mixCol = new Uint8Array(256);
+  for (var i = 0; i < 256; i++) {
+    if (i < 128) {
+      mixCol[i] = i << 1;
+    } else {
+      mixCol[i] = (i << 1) ^ 0x1b;
+    }
+  }
+  var mix = new Uint32Array([
+    0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927,
+    0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45,
+    0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb,
+    0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381,
+    0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf,
+    0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66,
+    0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28,
+    0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012,
+    0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec,
+    0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e,
+    0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd,
+    0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7,
+    0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89,
+    0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b,
+    0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815,
+    0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f,
+    0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa,
+    0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8,
+    0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36,
+    0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c,
+    0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742,
+    0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea,
+    0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4,
+    0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e,
+    0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360,
+    0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502,
+    0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87,
+    0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd,
+    0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3,
+    0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621,
+    0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f,
+    0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55,
+    0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26,
+    0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844,
+    0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba,
+    0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480,
+    0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce,
+    0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67,
+    0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929,
+    0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713,
+    0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed,
+    0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f,
+    0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]);
+
+  function expandKey128(cipherKey) {
+    var b = 176, result = new Uint8Array(b);
+    result.set(cipherKey);
+    for (var j = 16, i = 1; j < b; ++i) {
+      // RotWord
+      var t1 = result[j - 3], t2 = result[j - 2],
+          t3 = result[j - 1], t4 = result[j - 4];
+      // SubWord
+      t1 = s[t1];
+      t2 = s[t2];
+      t3 = s[t3];
+      t4 = s[t4];
+      // Rcon
+      t1 = t1 ^ rcon[i];
+      for (var n = 0; n < 4; ++n) {
+        result[j] = (t1 ^= result[j - 16]);
+        j++;
+        result[j] = (t2 ^= result[j - 16]);
+        j++;
+        result[j] = (t3 ^= result[j - 16]);
+        j++;
+        result[j] = (t4 ^= result[j - 16]);
+        j++;
+      }
+    }
+    return result;
+  }
+
+  function decrypt128(input, key) {
+    var state = new Uint8Array(16);
+    state.set(input);
+    var i, j, k;
+    var t, u, v;
+    // AddRoundKey
+    for (j = 0, k = 160; j < 16; ++j, ++k) {
+      state[j] ^= key[k];
+    }
+    for (i = 9; i >= 1; --i) {
+      // InvShiftRows
+      t = state[13];
+      state[13] = state[9];
+      state[9] = state[5];
+      state[5] = state[1];
+      state[1] = t;
+      t = state[14];
+      u = state[10];
+      state[14] = state[6];
+      state[10] = state[2];
+      state[6] = t;
+      state[2] = u;
+      t = state[15];
+      u = state[11];
+      v = state[7];
+      state[15] = state[3];
+      state[11] = t;
+      state[7] = u;
+      state[3] = v;
+      // InvSubBytes
+      for (j = 0; j < 16; ++j) {
+        state[j] = inv_s[state[j]];
+      }
+      // AddRoundKey
+      for (j = 0, k = i * 16; j < 16; ++j, ++k) {
+        state[j] ^= key[k];
+      }
+      // InvMixColumns
+      for (j = 0; j < 16; j += 4) {
+        var s0 = mix[state[j]], s1 = mix[state[j + 1]],
+          s2 = mix[state[j + 2]], s3 = mix[state[j + 3]];
+        t = (s0 ^ (s1 >>> 8) ^ (s1 << 24) ^ (s2 >>> 16) ^ (s2 << 16) ^
+          (s3 >>> 24) ^ (s3 << 8));
+        state[j] = (t >>> 24) & 0xFF;
+        state[j + 1] = (t >> 16) & 0xFF;
+        state[j + 2] = (t >> 8) & 0xFF;
+        state[j + 3] = t & 0xFF;
+      }
+    }
+    // InvShiftRows
+    t = state[13];
+    state[13] = state[9];
+    state[9] = state[5];
+    state[5] = state[1];
+    state[1] = t;
+    t = state[14];
+    u = state[10];
+    state[14] = state[6];
+    state[10] = state[2];
+    state[6] = t;
+    state[2] = u;
+    t = state[15];
+    u = state[11];
+    v = state[7];
+    state[15] = state[3];
+    state[11] = t;
+    state[7] = u;
+    state[3] = v;
+    for (j = 0; j < 16; ++j) {
+      // InvSubBytes
+      state[j] = inv_s[state[j]];
+      // AddRoundKey
+      state[j] ^= key[j];
+    }
+    return state;
+  }
+
+  function encrypt128(input, key) {
+    var t, u, v, k;
+    var state = new Uint8Array(16);
+    state.set(input);
+    for (j = 0; j < 16; ++j) {
+      // AddRoundKey
+      state[j] ^= key[j];
+    }
+
+    for (i = 1; i < 10; i++) {
+      //SubBytes
+      for (j = 0; j < 16; ++j) {
+        state[j] = s[state[j]];
+      }
+      //ShiftRows
+      v = state[1];
+      state[1] = state[5];
+      state[5] = state[9];
+      state[9] = state[13];
+      state[13] = v;
+      v = state[2];
+      u = state[6];
+      state[2] = state[10];
+      state[6] = state[14];
+      state[10] = v;
+      state[14] = u;
+      v = state[3];
+      u = state[7];
+      t = state[11];
+      state[3] = state[15];
+      state[7] = v;
+      state[11] = u;
+      state[15] = t;
+      //MixColumns
+      for (var j = 0; j < 16; j += 4) {
+        var s0 = state[j + 0], s1 = state[j + 1];
+        var s2 = state[j + 2], s3 = state[j + 3];
+        t = s0 ^ s1 ^ s2 ^ s3;
+        state[j + 0] ^= t ^ mixCol[s0 ^ s1];
+        state[j + 1] ^= t ^ mixCol[s1 ^ s2];
+        state[j + 2] ^= t ^ mixCol[s2 ^ s3];
+        state[j + 3] ^= t ^ mixCol[s3 ^ s0];
+      }
+      //AddRoundKey
+      for (j = 0, k = i * 16; j < 16; ++j, ++k) {
+        state[j] ^= key[k];
+      }
+    }
+
+    //SubBytes
+    for (j = 0; j < 16; ++j) {
+      state[j] = s[state[j]];
+    }
+    //ShiftRows
+    v = state[1];
+    state[1] = state[5];
+    state[5] = state[9];
+    state[9] = state[13];
+    state[13] = v;
+    v = state[2];
+    u = state[6];
+    state[2] = state[10];
+    state[6] = state[14];
+    state[10] = v;
+    state[14] = u;
+    v = state[3];
+    u = state[7];
+    t = state[11];
+    state[3] = state[15];
+    state[7] = v;
+    state[11] = u;
+    state[15] = t;
+    //AddRoundKey
+    for (j = 0, k = 160; j < 16; ++j, ++k) {
+      state[j] ^= key[k];
+    }
+    return state;
+  }
+
+  function AES128Cipher(key) {
+    this.key = expandKey128(key);
+    this.buffer = new Uint8Array(16);
+    this.bufferPosition = 0;
+  }
+
+  function decryptBlock2(data, finalize) {
+    var i, j, ii, sourceLength = data.length,
+        buffer = this.buffer, bufferLength = this.bufferPosition,
+        result = [], iv = this.iv;
+    for (i = 0; i < sourceLength; ++i) {
+      buffer[bufferLength] = data[i];
+      ++bufferLength;
+      if (bufferLength < 16) {
+        continue;
+      }
+      // buffer is full, decrypting
+      var plain = decrypt128(buffer, this.key);
+      // xor-ing the IV vector to get plain text
+      for (j = 0; j < 16; ++j) {
+        plain[j] ^= iv[j];
+      }
+      iv = buffer;
+      result.push(plain);
+      buffer = new Uint8Array(16);
+      bufferLength = 0;
+    }
+    // saving incomplete buffer
+    this.buffer = buffer;
+    this.bufferLength = bufferLength;
+    this.iv = iv;
+    if (result.length === 0) {
+      return new Uint8Array([]);
+    }
+    // combining plain text blocks into one
+    var outputLength = 16 * result.length;
+    if (finalize) {
+      // undo a padding that is described in RFC 2898
+      var lastBlock = result[result.length - 1];
+      var psLen = lastBlock[15];
+      if (psLen <= 16) {
+        for (i = 15, ii = 16 - psLen; i >= ii; --i) {
+          if (lastBlock[i] !== psLen) {
+            // Invalid padding, assume that the block has no padding.
+            psLen = 0;
+            break;
+          }
+        }
+        outputLength -= psLen;
+        result[result.length - 1] = lastBlock.subarray(0, 16 - psLen);
+      }
+    }
+    var output = new Uint8Array(outputLength);
+    for (i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
+      output.set(result[i], j);
+    }
+    return output;
+  }
+
+  AES128Cipher.prototype = {
+    decryptBlock: function AES128Cipher_decryptBlock(data, finalize) {
+      var i, sourceLength = data.length;
+      var buffer = this.buffer, bufferLength = this.bufferPosition;
+      // waiting for IV values -- they are at the start of the stream
+      for (i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) {
+        buffer[bufferLength] = data[i];
+      }
+      if (bufferLength < 16) {
+        // need more data
+        this.bufferLength = bufferLength;
+        return new Uint8Array([]);
+      }
+      this.iv = buffer;
+      this.buffer = new Uint8Array(16);
+      this.bufferLength = 0;
+      // starting decryption
+      this.decryptBlock = decryptBlock2;
+      return this.decryptBlock(data.subarray(16), finalize);
+    },
+    encrypt: function AES128Cipher_encrypt(data, iv) {
+      var i, j, ii, sourceLength = data.length,
+          buffer = this.buffer, bufferLength = this.bufferPosition,
+          result = [];
+      if (!iv) {
+        iv = new Uint8Array(16);
+      }
+      for (i = 0; i < sourceLength; ++i) {
+        buffer[bufferLength] = data[i];
+        ++bufferLength;
+        if (bufferLength < 16) {
+          continue;
+        }
+        for (j = 0; j < 16; ++j) {
+          buffer[j] ^= iv[j];
+        }
+
+        // buffer is full, encrypting
+        var cipher = encrypt128(buffer, this.key);
+        iv = cipher;
+        result.push(cipher);
+        buffer = new Uint8Array(16);
+        bufferLength = 0;
+      }
+      // saving incomplete buffer
+      this.buffer = buffer;
+      this.bufferLength = bufferLength;
+      this.iv = iv;
+      if (result.length === 0) {
+        return new Uint8Array([]);
+      }
+      // combining plain text blocks into one
+      var outputLength = 16 * result.length;
+      var output = new Uint8Array(outputLength);
+      for (i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
+        output.set(result[i], j);
+      }
+      return output;
+    }
+  };
+
+  return AES128Cipher;
+})();
+
+var AES256Cipher = (function AES256CipherClosure() {
+  var rcon = new Uint8Array([
+    0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c,
+    0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a,
+    0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd,
+    0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a,
+    0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
+    0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6,
+    0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72,
+    0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc,
+    0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10,
+    0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e,
+    0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5,
+    0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94,
+    0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02,
+    0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d,
+    0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d,
+    0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f,
+    0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb,
+    0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c,
+    0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a,
+    0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd,
+    0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a,
+    0x74, 0xe8, 0xcb, 0x8d]);
+
+  var s = new Uint8Array([
+    0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b,
+    0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
+    0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26,
+    0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
+    0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2,
+    0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
+    0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed,
+    0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
+    0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f,
+    0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
+    0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec,
+    0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
+    0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14,
+    0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
+    0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d,
+    0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
+    0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f,
+    0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
+    0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11,
+    0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
+    0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f,
+    0xb0, 0x54, 0xbb, 0x16]);
+
+  var inv_s = new Uint8Array([
+    0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e,
+    0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
+    0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32,
+    0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
+    0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49,
+    0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
+    0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50,
+    0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
+    0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05,
+    0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
+    0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41,
+    0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
+    0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8,
+    0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
+    0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b,
+    0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
+    0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59,
+    0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
+    0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d,
+    0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
+    0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63,
+    0x55, 0x21, 0x0c, 0x7d]);
+
+  var mixCol = new Uint8Array(256);
+  for (var i = 0; i < 256; i++) {
+    if (i < 128) {
+      mixCol[i] = i << 1;
+    } else {
+      mixCol[i] = (i << 1) ^ 0x1b;
+    }
+  }
+  var mix = new Uint32Array([
+    0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927,
+    0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45,
+    0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb,
+    0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381,
+    0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf,
+    0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66,
+    0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28,
+    0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012,
+    0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec,
+    0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e,
+    0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd,
+    0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7,
+    0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89,
+    0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b,
+    0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815,
+    0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f,
+    0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa,
+    0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8,
+    0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36,
+    0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c,
+    0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742,
+    0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea,
+    0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4,
+    0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e,
+    0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360,
+    0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502,
+    0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87,
+    0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd,
+    0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3,
+    0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621,
+    0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f,
+    0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55,
+    0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26,
+    0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844,
+    0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba,
+    0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480,
+    0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce,
+    0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67,
+    0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929,
+    0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713,
+    0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed,
+    0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f,
+    0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]);
+
+  function expandKey256(cipherKey) {
+    var b = 240, result = new Uint8Array(b);
+    var r = 1;
+
+    result.set(cipherKey);
+    for (var j = 32, i = 1; j < b; ++i) {
+      if (j % 32 === 16) {
+        t1 = s[t1];
+        t2 = s[t2];
+        t3 = s[t3];
+        t4 = s[t4];
+      } else if (j % 32 === 0) {
+        // RotWord
+        var t1 = result[j - 3], t2 = result[j - 2],
+          t3 = result[j - 1], t4 = result[j - 4];
+        // SubWord
+        t1 = s[t1];
+        t2 = s[t2];
+        t3 = s[t3];
+        t4 = s[t4];
+        // Rcon
+        t1 = t1 ^ r;
+        if ((r <<= 1) >= 256) {
+          r = (r ^ 0x1b) & 0xFF;
+        }
+      }
+
+      for (var n = 0; n < 4; ++n) {
+        result[j] = (t1 ^= result[j - 32]);
+        j++;
+        result[j] = (t2 ^= result[j - 32]);
+        j++;
+        result[j] = (t3 ^= result[j - 32]);
+        j++;
+        result[j] = (t4 ^= result[j - 32]);
+        j++;
+      }
+    }
+    return result;
+  }
+
+  function decrypt256(input, key) {
+    var state = new Uint8Array(16);
+    state.set(input);
+    var i, j, k;
+    var t, u, v;
+    // AddRoundKey
+    for (j = 0, k = 224; j < 16; ++j, ++k) {
+      state[j] ^= key[k];
+    }
+    for (i = 13; i >= 1; --i) {
+      // InvShiftRows
+      t = state[13];
+      state[13] = state[9];
+      state[9] = state[5];
+      state[5] = state[1];
+      state[1] = t;
+      t = state[14];
+      u = state[10];
+      state[14] = state[6];
+      state[10] = state[2];
+      state[6] = t;
+      state[2] = u;
+      t = state[15];
+      u = state[11];
+      v = state[7];
+      state[15] = state[3];
+      state[11] = t;
+      state[7] = u;
+      state[3] = v;
+      // InvSubBytes
+      for (j = 0; j < 16; ++j) {
+        state[j] = inv_s[state[j]];
+      }
+      // AddRoundKey
+      for (j = 0, k = i * 16; j < 16; ++j, ++k) {
+        state[j] ^= key[k];
+      }
+      // InvMixColumns
+      for (j = 0; j < 16; j += 4) {
+        var s0 = mix[state[j]], s1 = mix[state[j + 1]],
+            s2 = mix[state[j + 2]], s3 = mix[state[j + 3]];
+        t = (s0 ^ (s1 >>> 8) ^ (s1 << 24) ^ (s2 >>> 16) ^ (s2 << 16) ^
+            (s3 >>> 24) ^ (s3 << 8));
+        state[j] = (t >>> 24) & 0xFF;
+        state[j + 1] = (t >> 16) & 0xFF;
+        state[j + 2] = (t >> 8) & 0xFF;
+        state[j + 3] = t & 0xFF;
+      }
+    }
+    // InvShiftRows
+    t = state[13];
+    state[13] = state[9];
+    state[9] = state[5];
+    state[5] = state[1];
+    state[1] = t;
+    t = state[14];
+    u = state[10];
+    state[14] = state[6];
+    state[10] = state[2];
+    state[6] = t;
+    state[2] = u;
+    t = state[15];
+    u = state[11];
+    v = state[7];
+    state[15] = state[3];
+    state[11] = t;
+    state[7] = u;
+    state[3] = v;
+    for (j = 0; j < 16; ++j) {
+      // InvSubBytes
+      state[j] = inv_s[state[j]];
+      // AddRoundKey
+      state[j] ^= key[j];
+    }
+    return state;
+  }
+
+  function encrypt256(input, key) {
+    var t, u, v, k;
+    var state = new Uint8Array(16);
+    state.set(input);
+    for (j = 0; j < 16; ++j) {
+      // AddRoundKey
+      state[j] ^= key[j];
+    }
+
+    for (i = 1; i < 14; i++) {
+      //SubBytes
+      for (j = 0; j < 16; ++j) {
+        state[j] = s[state[j]];
+      }
+      //ShiftRows
+      v = state[1];
+      state[1] = state[5];
+      state[5] = state[9];
+      state[9] = state[13];
+      state[13] = v;
+      v = state[2];
+      u = state[6];
+      state[2] = state[10];
+      state[6] = state[14];
+      state[10] = v;
+      state[14] = u;
+      v = state[3];
+      u = state[7];
+      t = state[11];
+      state[3] = state[15];
+      state[7] = v;
+      state[11] = u;
+      state[15] = t;
+      //MixColumns
+      for (var j = 0; j < 16; j += 4) {
+        var s0 = state[j + 0], s1 = state[j + 1];
+        var s2 = state[j + 2], s3 = state[j + 3];
+        t = s0 ^ s1 ^ s2 ^ s3;
+        state[j + 0] ^= t ^ mixCol[s0 ^ s1];
+        state[j + 1] ^= t ^ mixCol[s1 ^ s2];
+        state[j + 2] ^= t ^ mixCol[s2 ^ s3];
+        state[j + 3] ^= t ^ mixCol[s3 ^ s0];
+      }
+      //AddRoundKey
+      for (j = 0, k = i * 16; j < 16; ++j, ++k) {
+        state[j] ^= key[k];
+      }
+    }
+
+    //SubBytes
+    for (j = 0; j < 16; ++j) {
+      state[j] = s[state[j]];
+    }
+    //ShiftRows
+    v = state[1];
+    state[1] = state[5];
+    state[5] = state[9];
+    state[9] = state[13];
+    state[13] = v;
+    v = state[2];
+    u = state[6];
+    state[2] = state[10];
+    state[6] = state[14];
+    state[10] = v;
+    state[14] = u;
+    v = state[3];
+    u = state[7];
+    t = state[11];
+    state[3] = state[15];
+    state[7] = v;
+    state[11] = u;
+    state[15] = t;
+    //AddRoundKey
+    for (j = 0, k = 224; j < 16; ++j, ++k) {
+      state[j] ^= key[k];
+    }
+
+    return state;
+
+  }
+
+  function AES256Cipher(key) {
+    this.key = expandKey256(key);
+    this.buffer = new Uint8Array(16);
+    this.bufferPosition = 0;
+  }
+
+  function decryptBlock2(data, finalize) {
+    var i, j, ii, sourceLength = data.length,
+        buffer = this.buffer, bufferLength = this.bufferPosition,
+        result = [], iv = this.iv;
+
+    for (i = 0; i < sourceLength; ++i) {
+      buffer[bufferLength] = data[i];
+      ++bufferLength;
+      if (bufferLength < 16) {
+        continue;
+      }
+      // buffer is full, decrypting
+      var plain = decrypt256(buffer, this.key);
+      // xor-ing the IV vector to get plain text
+      for (j = 0; j < 16; ++j) {
+        plain[j] ^= iv[j];
+      }
+      iv = buffer;
+      result.push(plain);
+      buffer = new Uint8Array(16);
+      bufferLength = 0;
+    }
+    // saving incomplete buffer
+    this.buffer = buffer;
+    this.bufferLength = bufferLength;
+    this.iv = iv;
+    if (result.length === 0) {
+      return new Uint8Array([]);
+    }
+    // combining plain text blocks into one
+    var outputLength = 16 * result.length;
+    if (finalize) {
+      // undo a padding that is described in RFC 2898
+      var lastBlock = result[result.length - 1];
+      var psLen = lastBlock[15];
+      if (psLen <= 16) {
+        for (i = 15, ii = 16 - psLen; i >= ii; --i) {
+          if (lastBlock[i] !== psLen) {
+            // Invalid padding, assume that the block has no padding.
+            psLen = 0;
+            break;
+          }
+        }
+        outputLength -= psLen;
+        result[result.length - 1] = lastBlock.subarray(0, 16 - psLen);
+      }
+    }
+    var output = new Uint8Array(outputLength);
+    for (i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
+      output.set(result[i], j);
+    }
+    return output;
+
+  }
+
+  AES256Cipher.prototype = {
+    decryptBlock: function AES256Cipher_decryptBlock(data, finalize, iv) {
+      var i, sourceLength = data.length;
+      var buffer = this.buffer, bufferLength = this.bufferPosition;
+      // if not supplied an IV wait for IV values
+      // they are at the start of the stream
+      if (iv) {
+        this.iv = iv;
+      } else {
+        for (i = 0; bufferLength < 16 &&
+             i < sourceLength; ++i, ++bufferLength) {
+          buffer[bufferLength] = data[i];
+        }
+        if (bufferLength < 16) {
+          //need more data
+          this.bufferLength = bufferLength;
+          return new Uint8Array([]);
+        }
+        this.iv = buffer;
+        data = data.subarray(16);
+      }
+      this.buffer = new Uint8Array(16);
+      this.bufferLength = 0;
+      // starting decryption
+      this.decryptBlock = decryptBlock2;
+      return this.decryptBlock(data, finalize);
+    },
+    encrypt: function AES256Cipher_encrypt(data, iv) {
+      var i, j, ii, sourceLength = data.length,
+          buffer = this.buffer, bufferLength = this.bufferPosition,
+          result = [];
+      if (!iv) {
+        iv = new Uint8Array(16);
+      }
+      for (i = 0; i < sourceLength; ++i) {
+        buffer[bufferLength] = data[i];
+        ++bufferLength;
+        if (bufferLength < 16) {
+          continue;
+        }
+        for (j = 0; j < 16; ++j) {
+          buffer[j] ^= iv[j];
+        }
+
+        // buffer is full, encrypting
+        var cipher = encrypt256(buffer, this.key);
+        this.iv = cipher;
+        result.push(cipher);
+        buffer = new Uint8Array(16);
+        bufferLength = 0;
+      }
+      // saving incomplete buffer
+      this.buffer = buffer;
+      this.bufferLength = bufferLength;
+      this.iv = iv;
+      if (result.length === 0) {
+        return new Uint8Array([]);
+      }
+      // combining plain text blocks into one
+      var outputLength = 16 * result.length;
+      var output = new Uint8Array(outputLength);
+      for (i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
+        output.set(result[i], j);
+      }
+      return output;
+    }
+  };
+
+  return AES256Cipher;
+})();
+
+var PDF17 = (function PDF17Closure() {
+
+  function compareByteArrays(array1, array2) {
+    if (array1.length !== array2.length) {
+      return false;
+    }
+    for (var i = 0; i < array1.length; i++) {
+      if (array1[i] !== array2[i]) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  function PDF17() {
+  }
+
+  PDF17.prototype = {
+    checkOwnerPassword: function PDF17_checkOwnerPassword(password,
+                                                          ownerValidationSalt,
+                                                          userBytes,
+                                                          ownerPassword) {
+      var hashData = new Uint8Array(password.length + 56);
+      hashData.set(password, 0);
+      hashData.set(ownerValidationSalt, password.length);
+      hashData.set(userBytes, password.length + ownerValidationSalt.length);
+      var result = calculateSHA256(hashData, 0, hashData.length);
+      return compareByteArrays(result, ownerPassword);
+    },
+    checkUserPassword: function PDF17_checkUserPassword(password,
+                                                        userValidationSalt,
+                                                        userPassword) {
+      var hashData = new Uint8Array(password.length + 8);
+      hashData.set(password, 0);
+      hashData.set(userValidationSalt, password.length);
+      var result = calculateSHA256(hashData, 0, hashData.length);
+      return compareByteArrays(result, userPassword);
+    },
+    getOwnerKey: function PDF17_getOwnerKey(password, ownerKeySalt, userBytes,
+                                            ownerEncryption) {
+      var hashData = new Uint8Array(password.length + 56);
+      hashData.set(password, 0);
+      hashData.set(ownerKeySalt, password.length);
+      hashData.set(userBytes, password.length + ownerKeySalt.length);
+      var key = calculateSHA256(hashData, 0, hashData.length);
+      var cipher = new AES256Cipher(key);
+      return cipher.decryptBlock(ownerEncryption,
+                                 false,
+                                 new Uint8Array(16));
+
+    },
+    getUserKey: function PDF17_getUserKey(password, userKeySalt,
+                                          userEncryption) {
+      var hashData = new Uint8Array(password.length + 8);
+      hashData.set(password, 0);
+      hashData.set(userKeySalt, password.length);
+      //key is the decryption key for the UE string
+      var key = calculateSHA256(hashData, 0, hashData.length);
+      var cipher = new AES256Cipher(key);
+      return cipher.decryptBlock(userEncryption,
+                                 false,
+                                 new Uint8Array(16));
+    }
+  };
+  return PDF17;
+})();
+
+var PDF20 = (function PDF20Closure() {
+
+  function concatArrays(array1, array2) {
+    var t = new Uint8Array(array1.length + array2.length);
+    t.set(array1, 0);
+    t.set(array2, array1.length);
+    return t;
+  }
+
+  function calculatePDF20Hash(password, input, userBytes) {
+    //This refers to Algorithm 2.B as defined in ISO 32000-2
+    var k = calculateSHA256(input, 0, input.length).subarray(0, 32);
+    var e = [0];
+    var i = 0;
+    while (i < 64 || e[e.length - 1] > i - 32) {
+      var arrayLength = password.length + k.length + userBytes.length;
+
+      var k1 = new Uint8Array(arrayLength * 64);
+      var array = concatArrays(password, k);
+      array = concatArrays(array, userBytes);
+      for (var j = 0, pos = 0; j < 64; j++, pos += arrayLength) {
+        k1.set(array, pos);
+      }
+      //AES128 CBC NO PADDING with
+      //first 16 bytes of k as the key and the second 16 as the iv.
+      var cipher = new AES128Cipher(k.subarray(0, 16));
+      e = cipher.encrypt(k1, k.subarray(16, 32));
+      //Now we have to take the first 16 bytes of an unsigned
+      //big endian integer... and compute the remainder
+      //modulo 3.... That is a fairly large number and
+      //JavaScript isn't going to handle that well...
+      //So we're using a trick that allows us to perform
+      //modulo math byte by byte
+      var remainder = 0;
+      for (var z = 0; z < 16; z++) {
+        remainder *= (256 % 3);
+        remainder %= 3;
+        remainder += ((e[z] >>> 0) % 3);
+        remainder %= 3;
+      }
+      if (remainder === 0) {
+        k = calculateSHA256(e, 0, e.length);
+      }
+      else if (remainder === 1) {
+        k = calculateSHA384(e, 0, e.length);
+      }
+      else if (remainder === 2) {
+        k = calculateSHA512(e, 0, e.length);
+      }
+      i++;
+    }
+    return k.subarray(0, 32);
+  }
+
+  function PDF20() {
+  }
+
+  function compareByteArrays(array1, array2) {
+    if (array1.length !== array2.length) {
+      return false;
+    }
+    for (var i = 0; i < array1.length; i++) {
+      if (array1[i] !== array2[i]) {
+        return false;
+      }
+    }
+    return true;
+  }
+
+  PDF20.prototype = {
+    hash: function PDF20_hash(password, concatBytes, userBytes) {
+      return calculatePDF20Hash(password, concatBytes, userBytes);
+    },
+    checkOwnerPassword: function PDF20_checkOwnerPassword(password,
+                                                          ownerValidationSalt,
+                                                          userBytes,
+                                                          ownerPassword) {
+      var hashData = new Uint8Array(password.length + 56);
+      hashData.set(password, 0);
+      hashData.set(ownerValidationSalt, password.length);
+      hashData.set(userBytes, password.length + ownerValidationSalt.length);
+      var result = calculatePDF20Hash(password, hashData, userBytes);
+      return compareByteArrays(result, ownerPassword);
+    },
+    checkUserPassword: function PDF20_checkUserPassword(password,
+                                                        userValidationSalt,
+                                                        userPassword) {
+      var hashData = new Uint8Array(password.length + 8);
+      hashData.set(password, 0);
+      hashData.set(userValidationSalt, password.length);
+      var result = calculatePDF20Hash(password, hashData, []);
+      return compareByteArrays(result, userPassword);
+    },
+    getOwnerKey: function PDF20_getOwnerKey(password, ownerKeySalt, userBytes,
+                                            ownerEncryption) {
+      var hashData = new Uint8Array(password.length + 56);
+      hashData.set(password, 0);
+      hashData.set(ownerKeySalt, password.length);
+      hashData.set(userBytes, password.length + ownerKeySalt.length);
+      var key = calculatePDF20Hash(password, hashData, userBytes);
+      var cipher = new AES256Cipher(key);
+      return cipher.decryptBlock(ownerEncryption,
+                                 false,
+                                 new Uint8Array(16));
+
+    },
+    getUserKey: function PDF20_getUserKey(password, userKeySalt,
+                                          userEncryption) {
+      var hashData = new Uint8Array(password.length + 8);
+      hashData.set(password, 0);
+      hashData.set(userKeySalt, password.length);
+      //key is the decryption key for the UE string
+      var key = calculatePDF20Hash(password, hashData, []);
+      var cipher = new AES256Cipher(key);
+      return cipher.decryptBlock(userEncryption,
+                                 false,
+                                 new Uint8Array(16));
+    }
+  };
+  return PDF20;
+})();
+
+var CipherTransform = (function CipherTransformClosure() {
+  function CipherTransform(stringCipherConstructor, streamCipherConstructor) {
+    this.stringCipherConstructor = stringCipherConstructor;
+    this.streamCipherConstructor = streamCipherConstructor;
+  }
+
+  CipherTransform.prototype = {
+    createStream: function CipherTransform_createStream(stream, length) {
+      var cipher = new this.streamCipherConstructor();
+      return new DecryptStream(stream, length,
+        function cipherTransformDecryptStream(data, finalize) {
+          return cipher.decryptBlock(data, finalize);
+        }
+      );
+    },
+    decryptString: function CipherTransform_decryptString(s) {
+      var cipher = new this.stringCipherConstructor();
+      var data = stringToBytes(s);
+      data = cipher.decryptBlock(data, true);
+      return bytesToString(data);
+    }
+  };
+  return CipherTransform;
+})();
+
+var CipherTransformFactory = (function CipherTransformFactoryClosure() {
+  var defaultPasswordBytes = new Uint8Array([
+    0x28, 0xBF, 0x4E, 0x5E, 0x4E, 0x75, 0x8A, 0x41,
+    0x64, 0x00, 0x4E, 0x56, 0xFF, 0xFA, 0x01, 0x08,
+    0x2E, 0x2E, 0x00, 0xB6, 0xD0, 0x68, 0x3E, 0x80,
+    0x2F, 0x0C, 0xA9, 0xFE, 0x64, 0x53, 0x69, 0x7A]);
+
+  function createEncryptionKey20(revision, password, ownerPassword,
+                                 ownerValidationSalt, ownerKeySalt, uBytes,
+                                 userPassword, userValidationSalt, userKeySalt,
+                                 ownerEncryption, userEncryption, perms) {
+    if (password) {
+      var passwordLength = Math.min(127, password.length);
+      password = password.subarray(0, passwordLength);
+    } else {
+      password = [];
+    }
+    var pdfAlgorithm;
+    if (revision === 6) {
+      pdfAlgorithm = new PDF20();
+    } else {
+      pdfAlgorithm = new PDF17();
+    }
+
+    if (pdfAlgorithm) {
+      if (pdfAlgorithm.checkUserPassword(password, userValidationSalt,
+                                         userPassword)) {
+        return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption);
+      } else if (password.length && pdfAlgorithm.checkOwnerPassword(password,
+                                                   ownerValidationSalt,
+                                                   uBytes,
+                                                   ownerPassword)) {
+        return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes,
+                                        ownerEncryption);
+      }
+    }
+
+    return null;
+  }
+
+  function prepareKeyData(fileId, password, ownerPassword, userPassword,
+                          flags, revision, keyLength, encryptMetadata) {
+    var hashDataSize = 40 + ownerPassword.length + fileId.length;
+    var hashData = new Uint8Array(hashDataSize), i = 0, j, n;
+    if (password) {
+      n = Math.min(32, password.length);
+      for (; i < n; ++i) {
+        hashData[i] = password[i];
+      }
+    }
+    j = 0;
+    while (i < 32) {
+      hashData[i++] = defaultPasswordBytes[j++];
+    }
+    // as now the padded password in the hashData[0..i]
+    for (j = 0, n = ownerPassword.length; j < n; ++j) {
+      hashData[i++] = ownerPassword[j];
+    }
+    hashData[i++] = flags & 0xFF;
+    hashData[i++] = (flags >> 8) & 0xFF;
+    hashData[i++] = (flags >> 16) & 0xFF;
+    hashData[i++] = (flags >>> 24) & 0xFF;
+    for (j = 0, n = fileId.length; j < n; ++j) {
+      hashData[i++] = fileId[j];
+    }
+    if (revision >= 4 && !encryptMetadata) {
+      hashData[i++] = 0xFF;
+      hashData[i++] = 0xFF;
+      hashData[i++] = 0xFF;
+      hashData[i++] = 0xFF;
+    }
+    var hash = calculateMD5(hashData, 0, i);
+    var keyLengthInBytes = keyLength >> 3;
+    if (revision >= 3) {
+      for (j = 0; j < 50; ++j) {
+        hash = calculateMD5(hash, 0, keyLengthInBytes);
+      }
+    }
+    var encryptionKey = hash.subarray(0, keyLengthInBytes);
+    var cipher, checkData;
+
+    if (revision >= 3) {
+      for (i = 0; i < 32; ++i) {
+        hashData[i] = defaultPasswordBytes[i];
+      }
+      for (j = 0, n = fileId.length; j < n; ++j) {
+        hashData[i++] = fileId[j];
+      }
+      cipher = new ARCFourCipher(encryptionKey);
+      checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i));
+      n = encryptionKey.length;
+      var derivedKey = new Uint8Array(n), k;
+      for (j = 1; j <= 19; ++j) {
+        for (k = 0; k < n; ++k) {
+          derivedKey[k] = encryptionKey[k] ^ j;
+        }
+        cipher = new ARCFourCipher(derivedKey);
+        checkData = cipher.encryptBlock(checkData);
+      }
+      for (j = 0, n = checkData.length; j < n; ++j) {
+        if (userPassword[j] !== checkData[j]) {
+          return null;
+        }
+      }
+    } else {
+      cipher = new ARCFourCipher(encryptionKey);
+      checkData = cipher.encryptBlock(defaultPasswordBytes);
+      for (j = 0, n = checkData.length; j < n; ++j) {
+        if (userPassword[j] !== checkData[j]) {
+          return null;
+        }
+      }
+    }
+    return encryptionKey;
+  }
+
+  function decodeUserPassword(password, ownerPassword, revision, keyLength) {
+    var hashData = new Uint8Array(32), i = 0, j, n;
+    n = Math.min(32, password.length);
+    for (; i < n; ++i) {
+      hashData[i] = password[i];
+    }
+    j = 0;
+    while (i < 32) {
+      hashData[i++] = defaultPasswordBytes[j++];
+    }
+    var hash = calculateMD5(hashData, 0, i);
+    var keyLengthInBytes = keyLength >> 3;
+    if (revision >= 3) {
+      for (j = 0; j < 50; ++j) {
+        hash = calculateMD5(hash, 0, hash.length);
+      }
+    }
+
+    var cipher, userPassword;
+    if (revision >= 3) {
+      userPassword = ownerPassword;
+      var derivedKey = new Uint8Array(keyLengthInBytes), k;
+      for (j = 19; j >= 0; j--) {
+        for (k = 0; k < keyLengthInBytes; ++k) {
+          derivedKey[k] = hash[k] ^ j;
+        }
+        cipher = new ARCFourCipher(derivedKey);
+        userPassword = cipher.encryptBlock(userPassword);
+      }
+    } else {
+      cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes));
+      userPassword = cipher.encryptBlock(ownerPassword);
+    }
+    return userPassword;
+  }
+
+  var identityName = Name.get('Identity');
+
+  function CipherTransformFactory(dict, fileId, password) {
+    var filter = dict.get('Filter');
+    if (!isName(filter) || filter.name !== 'Standard') {
+      error('unknown encryption method');
+    }
+    this.dict = dict;
+    var algorithm = dict.get('V');
+    if (!isInt(algorithm) ||
+        (algorithm !== 1 && algorithm !== 2 && algorithm !== 4 &&
+        algorithm !== 5)) {
+      error('unsupported encryption algorithm');
+    }
+    this.algorithm = algorithm;
+    var keyLength = dict.get('Length') || 40;
+    if (!isInt(keyLength) ||
+        keyLength < 40 || (keyLength % 8) !== 0) {
+      error('invalid key length');
+    }
+
+    // prepare keys
+    var ownerPassword = stringToBytes(dict.get('O')).subarray(0, 32);
+    var userPassword = stringToBytes(dict.get('U')).subarray(0, 32);
+    var flags = dict.get('P');
+    var revision = dict.get('R');
+    // meaningful when V is 4 or 5
+    var encryptMetadata = ((algorithm === 4 || algorithm === 5) &&
+                           dict.get('EncryptMetadata') !== false);
+    this.encryptMetadata = encryptMetadata;
+
+    var fileIdBytes = stringToBytes(fileId);
+    var passwordBytes;
+    if (password) {
+      if (revision === 6) {
+        try {
+          password = utf8StringToString(password);
+        } catch (ex) {
+          warn('CipherTransformFactory: ' +
+               'Unable to convert UTF8 encoded password.');
+        }
+      }
+      passwordBytes = stringToBytes(password);
+    }
+
+    var encryptionKey;
+    if (algorithm !== 5) {
+      encryptionKey = prepareKeyData(fileIdBytes, passwordBytes,
+                                     ownerPassword, userPassword, flags,
+                                     revision, keyLength, encryptMetadata);
+    }
+    else {
+      var ownerValidationSalt = stringToBytes(dict.get('O')).subarray(32, 40);
+      var ownerKeySalt = stringToBytes(dict.get('O')).subarray(40, 48);
+      var uBytes = stringToBytes(dict.get('U')).subarray(0, 48);
+      var userValidationSalt = stringToBytes(dict.get('U')).subarray(32, 40);
+      var userKeySalt = stringToBytes(dict.get('U')).subarray(40, 48);
+      var ownerEncryption = stringToBytes(dict.get('OE'));
+      var userEncryption = stringToBytes(dict.get('UE'));
+      var perms = stringToBytes(dict.get('Perms'));
+      encryptionKey =
+        createEncryptionKey20(revision, passwordBytes,
+          ownerPassword, ownerValidationSalt,
+          ownerKeySalt, uBytes,
+          userPassword, userValidationSalt,
+          userKeySalt, ownerEncryption,
+          userEncryption, perms);
+    }
+    if (!encryptionKey && !password) {
+      throw new PasswordException('No password given',
+                                  PasswordResponses.NEED_PASSWORD);
+    } else if (!encryptionKey && password) {
+      // Attempting use the password as an owner password
+      var decodedPassword = decodeUserPassword(passwordBytes, ownerPassword,
+                                               revision, keyLength);
+      encryptionKey = prepareKeyData(fileIdBytes, decodedPassword,
+                                     ownerPassword, userPassword, flags,
+                                     revision, keyLength, encryptMetadata);
+    }
+
+    if (!encryptionKey) {
+      throw new PasswordException('Incorrect Password',
+                                  PasswordResponses.INCORRECT_PASSWORD);
+    }
+
+    this.encryptionKey = encryptionKey;
+
+    if (algorithm >= 4) {
+      this.cf = dict.get('CF');
+      this.stmf = dict.get('StmF') || identityName;
+      this.strf = dict.get('StrF') || identityName;
+      this.eff = dict.get('EFF') || this.stmf;
+    }
+  }
+
+  function buildObjectKey(num, gen, encryptionKey, isAes) {
+    var key = new Uint8Array(encryptionKey.length + 9), i, n;
+    for (i = 0, n = encryptionKey.length; i < n; ++i) {
+      key[i] = encryptionKey[i];
+    }
+    key[i++] = num & 0xFF;
+    key[i++] = (num >> 8) & 0xFF;
+    key[i++] = (num >> 16) & 0xFF;
+    key[i++] = gen & 0xFF;
+    key[i++] = (gen >> 8) & 0xFF;
+    if (isAes) {
+      key[i++] = 0x73;
+      key[i++] = 0x41;
+      key[i++] = 0x6C;
+      key[i++] = 0x54;
+    }
+    var hash = calculateMD5(key, 0, i);
+    return hash.subarray(0, Math.min(encryptionKey.length + 5, 16));
+  }
+
+  function buildCipherConstructor(cf, name, num, gen, key) {
+    var cryptFilter = cf.get(name.name);
+    var cfm;
+    if (cryptFilter !== null && cryptFilter !== undefined) {
+      cfm = cryptFilter.get('CFM');
+    }
+    if (!cfm || cfm.name === 'None') {
+      return function cipherTransformFactoryBuildCipherConstructorNone() {
+        return new NullCipher();
+      };
+    }
+    if ('V2' === cfm.name) {
+      return function cipherTransformFactoryBuildCipherConstructorV2() {
+        return new ARCFourCipher(buildObjectKey(num, gen, key, false));
+      };
+    }
+    if ('AESV2' === cfm.name) {
+      return function cipherTransformFactoryBuildCipherConstructorAESV2() {
+        return new AES128Cipher(buildObjectKey(num, gen, key, true));
+      };
+    }
+    if ('AESV3' === cfm.name) {
+      return function cipherTransformFactoryBuildCipherConstructorAESV3() {
+        return new AES256Cipher(key);
+      };
+    }
+    error('Unknown crypto method');
+  }
+
+  CipherTransformFactory.prototype = {
+    createCipherTransform:
+        function CipherTransformFactory_createCipherTransform(num, gen) {
+      if (this.algorithm === 4 || this.algorithm === 5) {
+        return new CipherTransform(
+          buildCipherConstructor(this.cf, this.stmf,
+                                 num, gen, this.encryptionKey),
+          buildCipherConstructor(this.cf, this.strf,
+                                 num, gen, this.encryptionKey));
+      }
+      // algorithms 1 and 2
+      var key = buildObjectKey(num, gen, this.encryptionKey, false);
+      var cipherConstructor = function buildCipherCipherConstructor() {
+        return new ARCFourCipher(key);
+      };
+      return new CipherTransform(cipherConstructor, cipherConstructor);
+    }
+  };
+
+  return CipherTransformFactory;
+})();
+
+
+var ShadingType = {
+  FUNCTION_BASED: 1,
+  AXIAL: 2,
+  RADIAL: 3,
+  FREE_FORM_MESH: 4,
+  LATTICE_FORM_MESH: 5,
+  COONS_PATCH_MESH: 6,
+  TENSOR_PATCH_MESH: 7
+};
+
+var Pattern = (function PatternClosure() {
+  // Constructor should define this.getPattern
+  function Pattern() {
+    error('should not call Pattern constructor');
+  }
+
+  Pattern.prototype = {
+    // Input: current Canvas context
+    // Output: the appropriate fillStyle or strokeStyle
+    getPattern: function Pattern_getPattern(ctx) {
+      error('Should not call Pattern.getStyle: ' + ctx);
+    }
+  };
+
+  Pattern.parseShading = function Pattern_parseShading(shading, matrix, xref,
+                                                       res) {
+
+    var dict = isStream(shading) ? shading.dict : shading;
+    var type = dict.get('ShadingType');
+
+    try {
+      switch (type) {
+        case ShadingType.AXIAL:
+        case ShadingType.RADIAL:
+          // Both radial and axial shadings are handled by RadialAxial shading.
+          return new Shadings.RadialAxial(dict, matrix, xref, res);
+        case ShadingType.FREE_FORM_MESH:
+        case ShadingType.LATTICE_FORM_MESH:
+        case ShadingType.COONS_PATCH_MESH:
+        case ShadingType.TENSOR_PATCH_MESH:
+          return new Shadings.Mesh(shading, matrix, xref, res);
+        default:
+          throw new Error('Unsupported ShadingType: ' + type);
+      }
+    } catch (ex) {
+      if (ex instanceof MissingDataException) {
+        throw ex;
+      }
+      UnsupportedManager.notify(UNSUPPORTED_FEATURES.shadingPattern);
+      warn(ex);
+      return new Shadings.Dummy();
+    }
+  };
+  return Pattern;
+})();
+
+var Shadings = {};
+
+// A small number to offset the first/last color stops so we can insert ones to
+// support extend.  Number.MIN_VALUE appears to be too small and breaks the
+// extend. 1e-7 works in FF but chrome seems to use an even smaller sized number
+// internally so we have to go bigger.
+Shadings.SMALL_NUMBER = 1e-2;
+
+// Radial and axial shading have very similar implementations
+// If needed, the implementations can be broken into two classes
+Shadings.RadialAxial = (function RadialAxialClosure() {
+  function RadialAxial(dict, matrix, xref, res) {
+    this.matrix = matrix;
+    this.coordsArr = dict.get('Coords');
+    this.shadingType = dict.get('ShadingType');
+    this.type = 'Pattern';
+    var cs = dict.get('ColorSpace', 'CS');
+    cs = ColorSpace.parse(cs, xref, res);
+    this.cs = cs;
+
+    var t0 = 0.0, t1 = 1.0;
+    if (dict.has('Domain')) {
+      var domainArr = dict.get('Domain');
+      t0 = domainArr[0];
+      t1 = domainArr[1];
+    }
+
+    var extendStart = false, extendEnd = false;
+    if (dict.has('Extend')) {
+      var extendArr = dict.get('Extend');
+      extendStart = extendArr[0];
+      extendEnd = extendArr[1];
+    }
+
+    if (this.shadingType === ShadingType.RADIAL &&
+       (!extendStart || !extendEnd)) {
+      // Radial gradient only currently works if either circle is fully within
+      // the other circle.
+      var x1 = this.coordsArr[0];
+      var y1 = this.coordsArr[1];
+      var r1 = this.coordsArr[2];
+      var x2 = this.coordsArr[3];
+      var y2 = this.coordsArr[4];
+      var r2 = this.coordsArr[5];
+      var distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
+      if (r1 <= r2 + distance &&
+          r2 <= r1 + distance) {
+        warn('Unsupported radial gradient.');
+      }
+    }
+
+    this.extendStart = extendStart;
+    this.extendEnd = extendEnd;
+
+    var fnObj = dict.get('Function');
+    var fn = PDFFunction.parseArray(xref, fnObj);
+
+    // 10 samples seems good enough for now, but probably won't work
+    // if there are sharp color changes. Ideally, we would implement
+    // the spec faithfully and add lossless optimizations.
+    var diff = t1 - t0;
+    var step = diff / 10;
+
+    var colorStops = this.colorStops = [];
+
+    // Protect against bad domains so we don't end up in an infinte loop below.
+    if (t0 >= t1 || step <= 0) {
+      // Acrobat doesn't seem to handle these cases so we'll ignore for
+      // now.
+      info('Bad shading domain.');
+      return;
+    }
+
+    var color = new Float32Array(cs.numComps), ratio = new Float32Array(1);
+    var rgbColor;
+    for (var i = t0; i <= t1; i += step) {
+      ratio[0] = i;
+      fn(ratio, 0, color, 0);
+      rgbColor = cs.getRgb(color, 0);
+      var cssColor = Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
+      colorStops.push([(i - t0) / diff, cssColor]);
+    }
+
+    var background = 'transparent';
+    if (dict.has('Background')) {
+      rgbColor = cs.getRgb(dict.get('Background'), 0);
+      background = Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
+    }
+
+    if (!extendStart) {
+      // Insert a color stop at the front and offset the first real color stop
+      // so it doesn't conflict with the one we insert.
+      colorStops.unshift([0, background]);
+      colorStops[1][0] += Shadings.SMALL_NUMBER;
+    }
+    if (!extendEnd) {
+      // Same idea as above in extendStart but for the end.
+      colorStops[colorStops.length - 1][0] -= Shadings.SMALL_NUMBER;
+      colorStops.push([1, background]);
+    }
+
+    this.colorStops = colorStops;
+  }
+
+  RadialAxial.prototype = {
+    getIR: function RadialAxial_getIR() {
+      var coordsArr = this.coordsArr;
+      var shadingType = this.shadingType;
+      var type, p0, p1, r0, r1;
+      if (shadingType === ShadingType.AXIAL) {
+        p0 = [coordsArr[0], coordsArr[1]];
+        p1 = [coordsArr[2], coordsArr[3]];
+        r0 = null;
+        r1 = null;
+        type = 'axial';
+      } else if (shadingType === ShadingType.RADIAL) {
+        p0 = [coordsArr[0], coordsArr[1]];
+        p1 = [coordsArr[3], coordsArr[4]];
+        r0 = coordsArr[2];
+        r1 = coordsArr[5];
+        type = 'radial';
+      } else {
+        error('getPattern type unknown: ' + shadingType);
+      }
+
+      var matrix = this.matrix;
+      if (matrix) {
+        p0 = Util.applyTransform(p0, matrix);
+        p1 = Util.applyTransform(p1, matrix);
+      }
+
+      return ['RadialAxial', type, this.colorStops, p0, p1, r0, r1];
+    }
+  };
+
+  return RadialAxial;
+})();
+
+// All mesh shading. For now, they will be presented as set of the triangles
+// to be drawn on the canvas and rgb color for each vertex.
+Shadings.Mesh = (function MeshClosure() {
+  function MeshStreamReader(stream, context) {
+    this.stream = stream;
+    this.context = context;
+    this.buffer = 0;
+    this.bufferLength = 0;
+
+    var numComps = context.numComps;
+    this.tmpCompsBuf = new Float32Array(numComps);
+    var csNumComps = context.colorSpace.numComps;
+    this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) :
+                                           this.tmpCompsBuf;
+  }
+  MeshStreamReader.prototype = {
+    get hasData() {
+      if (this.stream.end) {
+        return this.stream.pos < this.stream.end;
+      }
+      if (this.bufferLength > 0) {
+        return true;
+      }
+      var nextByte = this.stream.getByte();
+      if (nextByte < 0) {
+        return false;
+      }
+      this.buffer = nextByte;
+      this.bufferLength = 8;
+      return true;
+    },
+    readBits: function MeshStreamReader_readBits(n) {
+      var buffer = this.buffer;
+      var bufferLength = this.bufferLength;
+      if (n === 32) {
+        if (bufferLength === 0) {
+          return ((this.stream.getByte() << 24) |
+            (this.stream.getByte() << 16) | (this.stream.getByte() << 8) |
+            this.stream.getByte()) >>> 0;
+        }
+        buffer = (buffer << 24) | (this.stream.getByte() << 16) |
+          (this.stream.getByte() << 8) | this.stream.getByte();
+        var nextByte = this.stream.getByte();
+        this.buffer = nextByte & ((1 << bufferLength) - 1);
+        return ((buffer << (8 - bufferLength)) |
+          ((nextByte & 0xFF) >> bufferLength)) >>> 0;
+      }
+      if (n === 8 && bufferLength === 0) {
+        return this.stream.getByte();
+      }
+      while (bufferLength < n) {
+        buffer = (buffer << 8) | this.stream.getByte();
+        bufferLength += 8;
+      }
+      bufferLength -= n;
+      this.bufferLength = bufferLength;
+      this.buffer = buffer & ((1 << bufferLength) - 1);
+      return buffer >> bufferLength;
+    },
+    align: function MeshStreamReader_align() {
+      this.buffer = 0;
+      this.bufferLength = 0;
+    },
+    readFlag: function MeshStreamReader_readFlag() {
+      return this.readBits(this.context.bitsPerFlag);
+    },
+    readCoordinate: function MeshStreamReader_readCoordinate() {
+      var bitsPerCoordinate = this.context.bitsPerCoordinate;
+      var xi = this.readBits(bitsPerCoordinate);
+      var yi = this.readBits(bitsPerCoordinate);
+      var decode = this.context.decode;
+      var scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) :
+        2.3283064365386963e-10; // 2 ^ -32
+      return [
+        xi * scale * (decode[1] - decode[0]) + decode[0],
+        yi * scale * (decode[3] - decode[2]) + decode[2]
+      ];
+    },
+    readComponents: function MeshStreamReader_readComponents() {
+      var numComps = this.context.numComps;
+      var bitsPerComponent = this.context.bitsPerComponent;
+      var scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) :
+        2.3283064365386963e-10; // 2 ^ -32
+      var decode = this.context.decode;
+      var components = this.tmpCompsBuf;
+      for (var i = 0, j = 4; i < numComps; i++, j += 2) {
+        var ci = this.readBits(bitsPerComponent);
+        components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j];
+      }
+      var color = this.tmpCsCompsBuf;
+      if (this.context.colorFn) {
+        this.context.colorFn(components, 0, color, 0);
+      }
+      return this.context.colorSpace.getRgb(color, 0);
+    }
+  };
+
+  function decodeType4Shading(mesh, reader) {
+    var coords = mesh.coords;
+    var colors = mesh.colors;
+    var operators = [];
+    var ps = []; // not maintaining cs since that will match ps
+    var verticesLeft = 0; // assuming we have all data to start a new triangle
+    while (reader.hasData) {
+      var f = reader.readFlag();
+      var coord = reader.readCoordinate();
+      var color = reader.readComponents();
+      if (verticesLeft === 0) { // ignoring flags if we started a triangle
+        assert(0 <= f && f <= 2, 'Unknown type4 flag');
+        switch (f) {
+          case 0:
+            verticesLeft = 3;
+            break;
+          case 1:
+            ps.push(ps[ps.length - 2], ps[ps.length - 1]);
+            verticesLeft = 1;
+            break;
+          case 2:
+            ps.push(ps[ps.length - 3], ps[ps.length - 1]);
+            verticesLeft = 1;
+            break;
+        }
+        operators.push(f);
+      }
+      ps.push(coords.length);
+      coords.push(coord);
+      colors.push(color);
+      verticesLeft--;
+
+      reader.align();
+    }
+    mesh.figures.push({
+      type: 'triangles',
+      coords: new Int32Array(ps),
+      colors: new Int32Array(ps),
+    });
+  }
+
+  function decodeType5Shading(mesh, reader, verticesPerRow) {
+    var coords = mesh.coords;
+    var colors = mesh.colors;
+    var ps = []; // not maintaining cs since that will match ps
+    while (reader.hasData) {
+      var coord = reader.readCoordinate();
+      var color = reader.readComponents();
+      ps.push(coords.length);
+      coords.push(coord);
+      colors.push(color);
+    }
+    mesh.figures.push({
+      type: 'lattice',
+      coords: new Int32Array(ps),
+      colors: new Int32Array(ps),
+      verticesPerRow: verticesPerRow
+    });
+  }
+
+  var MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3;
+  var MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20;
+
+  var TRIANGLE_DENSITY = 20; // count of triangles per entire mesh bounds
+
+  var getB = (function getBClosure() {
+    function buildB(count) {
+      var lut = [];
+      for (var i = 0; i <= count; i++) {
+        var t = i / count, t_ = 1 - t;
+        lut.push(new Float32Array([t_ * t_ * t_, 3 * t * t_ * t_,
+          3 * t * t * t_, t * t * t]));
+      }
+      return lut;
+    }
+    var cache = [];
+    return function getB(count) {
+      if (!cache[count]) {
+        cache[count] = buildB(count);
+      }
+      return cache[count];
+    };
+  })();
+
+  function buildFigureFromPatch(mesh, index) {
+    var figure = mesh.figures[index];
+    assert(figure.type === 'patch', 'Unexpected patch mesh figure');
+
+    var coords = mesh.coords, colors = mesh.colors;
+    var pi = figure.coords;
+    var ci = figure.colors;
+
+    var figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0],
+                              coords[pi[12]][0], coords[pi[15]][0]);
+    var figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1],
+                              coords[pi[12]][1], coords[pi[15]][1]);
+    var figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0],
+                              coords[pi[12]][0], coords[pi[15]][0]);
+    var figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1],
+                              coords[pi[12]][1], coords[pi[15]][1]);
+    var splitXBy = Math.ceil((figureMaxX - figureMinX) * TRIANGLE_DENSITY /
+                             (mesh.bounds[2] - mesh.bounds[0]));
+    splitXBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT,
+               Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy));
+    var splitYBy = Math.ceil((figureMaxY - figureMinY) * TRIANGLE_DENSITY /
+                             (mesh.bounds[3] - mesh.bounds[1]));
+    splitYBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT,
+               Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy));
+
+    var verticesPerRow = splitXBy + 1;
+    var figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow);
+    var figureColors = new Int32Array((splitYBy + 1) * verticesPerRow);
+    var k = 0;
+    var cl = new Uint8Array(3), cr = new Uint8Array(3);
+    var c0 = colors[ci[0]], c1 = colors[ci[1]],
+      c2 = colors[ci[2]], c3 = colors[ci[3]];
+    var bRow = getB(splitYBy), bCol = getB(splitXBy);
+    for (var row = 0; row <= splitYBy; row++) {
+      cl[0] = ((c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy) | 0;
+      cl[1] = ((c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy) | 0;
+      cl[2] = ((c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy) | 0;
+
+      cr[0] = ((c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy) | 0;
+      cr[1] = ((c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy) | 0;
+      cr[2] = ((c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy) | 0;
+
+      for (var col = 0; col <= splitXBy; col++, k++) {
+        if ((row === 0 || row === splitYBy) &&
+            (col === 0 || col === splitXBy)) {
+          continue;
+        }
+        var x = 0, y = 0;
+        var q = 0;
+        for (var i = 0; i <= 3; i++) {
+          for (var j = 0; j <= 3; j++, q++) {
+            var m = bRow[row][i] * bCol[col][j];
+            x += coords[pi[q]][0] * m;
+            y += coords[pi[q]][1] * m;
+          }
+        }
+        figureCoords[k] = coords.length;
+        coords.push([x, y]);
+        figureColors[k] = colors.length;
+        var newColor = new Uint8Array(3);
+        newColor[0] = ((cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy) | 0;
+        newColor[1] = ((cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy) | 0;
+        newColor[2] = ((cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy) | 0;
+        colors.push(newColor);
+      }
+    }
+    figureCoords[0] = pi[0];
+    figureColors[0] = ci[0];
+    figureCoords[splitXBy] = pi[3];
+    figureColors[splitXBy] = ci[1];
+    figureCoords[verticesPerRow * splitYBy] = pi[12];
+    figureColors[verticesPerRow * splitYBy] = ci[2];
+    figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15];
+    figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3];
+
+    mesh.figures[index] = {
+      type: 'lattice',
+      coords: figureCoords,
+      colors: figureColors,
+      verticesPerRow: verticesPerRow
+    };
+  }
+
+  function decodeType6Shading(mesh, reader) {
+    // A special case of Type 7. The p11, p12, p21, p22 automatically filled
+    var coords = mesh.coords;
+    var colors = mesh.colors;
+    var ps = new Int32Array(16); // p00, p10, ..., p30, p01, ..., p33
+    var cs = new Int32Array(4); // c00, c30, c03, c33
+    while (reader.hasData) {
+      var f = reader.readFlag();
+      assert(0 <= f && f <= 3, 'Unknown type6 flag');
+      var i, ii;
+      var pi = coords.length;
+      for (i = 0, ii = (f !== 0 ? 8 : 12); i < ii; i++) {
+        coords.push(reader.readCoordinate());
+      }
+      var ci = colors.length;
+      for (i = 0, ii = (f !== 0 ? 2 : 4); i < ii; i++) {
+        colors.push(reader.readComponents());
+      }
+      var tmp1, tmp2, tmp3, tmp4;
+      switch (f) {
+        case 0:
+          ps[12] = pi + 3; ps[13] = pi + 4;  ps[14] = pi + 5;  ps[15] = pi + 6;
+          ps[ 8] = pi + 2; /* values for 5, 6, 9, 10 are    */ ps[11] = pi + 7;
+          ps[ 4] = pi + 1; /* calculated below              */ ps[ 7] = pi + 8;
+          ps[ 0] = pi;     ps[ 1] = pi + 11; ps[ 2] = pi + 10; ps[ 3] = pi + 9;
+          cs[2] = ci + 1; cs[3] = ci + 2;
+          cs[0] = ci;     cs[1] = ci + 3;
+          break;
+        case 1:
+          tmp1 = ps[12]; tmp2 = ps[13]; tmp3 = ps[14]; tmp4 = ps[15];
+          ps[12] = tmp4; ps[13] = pi + 0;  ps[14] = pi + 1;  ps[15] = pi + 2;
+          ps[ 8] = tmp3; /* values for 5, 6, 9, 10 are    */ ps[11] = pi + 3;
+          ps[ 4] = tmp2; /* calculated below              */ ps[ 7] = pi + 4;
+          ps[ 0] = tmp1; ps[ 1] = pi + 7;   ps[ 2] = pi + 6; ps[ 3] = pi + 5;
+          tmp1 = cs[2]; tmp2 = cs[3];
+          cs[2] = tmp2;   cs[3] = ci;
+          cs[0] = tmp1;   cs[1] = ci + 1;
+          break;
+        case 2:
+          tmp1 = ps[15];
+          tmp2 = ps[11];
+          ps[12] = ps[3];  ps[13] = pi + 0; ps[14] = pi + 1;   ps[15] = pi + 2;
+          ps[ 8] = ps[7];  /* values for 5, 6, 9, 10 are    */ ps[11] = pi + 3;
+          ps[ 4] = tmp2;   /* calculated below              */ ps[ 7] = pi + 4;
+          ps[ 0] = tmp1;  ps[ 1] = pi + 7;   ps[ 2] = pi + 6;  ps[ 3] = pi + 5;
+          tmp1 = cs[3];
+          cs[2] = cs[1]; cs[3] = ci;
+          cs[0] = tmp1;  cs[1] = ci + 1;
+          break;
+        case 3:
+          ps[12] = ps[0];  ps[13] = pi + 0;   ps[14] = pi + 1; ps[15] = pi + 2;
+          ps[ 8] = ps[1];  /* values for 5, 6, 9, 10 are    */ ps[11] = pi + 3;
+          ps[ 4] = ps[2];  /* calculated below              */ ps[ 7] = pi + 4;
+          ps[ 0] = ps[3];  ps[ 1] = pi + 7;   ps[ 2] = pi + 6; ps[ 3] = pi + 5;
+          cs[2] = cs[0]; cs[3] = ci;
+          cs[0] = cs[1]; cs[1] = ci + 1;
+          break;
+      }
+      // set p11, p12, p21, p22
+      ps[5] = coords.length;
+      coords.push([
+        (-4 * coords[ps[0]][0] - coords[ps[15]][0] +
+          6 * (coords[ps[4]][0] + coords[ps[1]][0]) -
+          2 * (coords[ps[12]][0] + coords[ps[3]][0]) +
+          3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9,
+        (-4 * coords[ps[0]][1] - coords[ps[15]][1] +
+          6 * (coords[ps[4]][1] + coords[ps[1]][1]) -
+          2 * (coords[ps[12]][1] + coords[ps[3]][1]) +
+          3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9
+      ]);
+      ps[6] = coords.length;
+      coords.push([
+        (-4 * coords[ps[3]][0] - coords[ps[12]][0] +
+          6 * (coords[ps[2]][0] + coords[ps[7]][0]) -
+          2 * (coords[ps[0]][0] + coords[ps[15]][0]) +
+          3 * (coords[ps[4]][0] + coords[ps[14]][0])) / 9,
+        (-4 * coords[ps[3]][1] - coords[ps[12]][1] +
+          6 * (coords[ps[2]][1] + coords[ps[7]][1]) -
+          2 * (coords[ps[0]][1] + coords[ps[15]][1]) +
+          3 * (coords[ps[4]][1] + coords[ps[14]][1])) / 9
+      ]);
+      ps[9] = coords.length;
+      coords.push([
+        (-4 * coords[ps[12]][0] - coords[ps[3]][0] +
+          6 * (coords[ps[8]][0] + coords[ps[13]][0]) -
+          2 * (coords[ps[0]][0] + coords[ps[15]][0]) +
+          3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9,
+        (-4 * coords[ps[12]][1] - coords[ps[3]][1] +
+          6 * (coords[ps[8]][1] + coords[ps[13]][1]) -
+          2 * (coords[ps[0]][1] + coords[ps[15]][1]) +
+          3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9
+      ]);
+      ps[10] = coords.length;
+      coords.push([
+        (-4 * coords[ps[15]][0] - coords[ps[0]][0] +
+          6 * (coords[ps[11]][0] + coords[ps[14]][0]) -
+          2 * (coords[ps[12]][0] + coords[ps[3]][0]) +
+          3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9,
+        (-4 * coords[ps[15]][1] - coords[ps[0]][1] +
+          6 * (coords[ps[11]][1] + coords[ps[14]][1]) -
+          2 * (coords[ps[12]][1] + coords[ps[3]][1]) +
+          3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9
+      ]);
+      mesh.figures.push({
+        type: 'patch',
+        coords: new Int32Array(ps), // making copies of ps and cs
+        colors: new Int32Array(cs)
+      });
+    }
+  }
+
+  function decodeType7Shading(mesh, reader) {
+    var coords = mesh.coords;
+    var colors = mesh.colors;
+    var ps = new Int32Array(16); // p00, p10, ..., p30, p01, ..., p33
+    var cs = new Int32Array(4); // c00, c30, c03, c33
+    while (reader.hasData) {
+      var f = reader.readFlag();
+      assert(0 <= f && f <= 3, 'Unknown type7 flag');
+      var i, ii;
+      var pi = coords.length;
+      for (i = 0, ii = (f !== 0 ? 12 : 16); i < ii; i++) {
+        coords.push(reader.readCoordinate());
+      }
+      var ci = colors.length;
+      for (i = 0, ii = (f !== 0 ? 2 : 4); i < ii; i++) {
+        colors.push(reader.readComponents());
+      }
+      var tmp1, tmp2, tmp3, tmp4;
+      switch (f) {
+        case 0:
+          ps[12] = pi + 3; ps[13] = pi + 4;  ps[14] = pi + 5;  ps[15] = pi + 6;
+          ps[ 8] = pi + 2; ps[ 9] = pi + 13; ps[10] = pi + 14; ps[11] = pi + 7;
+          ps[ 4] = pi + 1; ps[ 5] = pi + 12; ps[ 6] = pi + 15; ps[ 7] = pi + 8;
+          ps[ 0] = pi;     ps[ 1] = pi + 11; ps[ 2] = pi + 10; ps[ 3] = pi + 9;
+          cs[2] = ci + 1; cs[3] = ci + 2;
+          cs[0] = ci;     cs[1] = ci + 3;
+          break;
+        case 1:
+          tmp1 = ps[12]; tmp2 = ps[13]; tmp3 = ps[14]; tmp4 = ps[15];
+          ps[12] = tmp4;   ps[13] = pi + 0;  ps[14] = pi + 1;  ps[15] = pi + 2;
+          ps[ 8] = tmp3;   ps[ 9] = pi + 9;  ps[10] = pi + 10; ps[11] = pi + 3;
+          ps[ 4] = tmp2;   ps[ 5] = pi + 8;  ps[ 6] = pi + 11; ps[ 7] = pi + 4;
+          ps[ 0] = tmp1;   ps[ 1] = pi + 7;  ps[ 2] = pi + 6;  ps[ 3] = pi + 5;
+          tmp1 = cs[2]; tmp2 = cs[3];
+          cs[2] = tmp2;   cs[3] = ci;
+          cs[0] = tmp1;   cs[1] = ci + 1;
+          break;
+        case 2:
+          tmp1 = ps[15];
+          tmp2 = ps[11];
+          ps[12] = ps[3]; ps[13] = pi + 0; ps[14] = pi + 1;  ps[15] = pi + 2;
+          ps[ 8] = ps[7]; ps[ 9] = pi + 9; ps[10] = pi + 10; ps[11] = pi + 3;
+          ps[ 4] = tmp2;  ps[ 5] = pi + 8; ps[ 6] = pi + 11; ps[ 7] = pi + 4;
+          ps[ 0] = tmp1;  ps[ 1] = pi + 7; ps[ 2] = pi + 6;  ps[ 3] = pi + 5;
+          tmp1 = cs[3];
+          cs[2] = cs[1]; cs[3] = ci;
+          cs[0] = tmp1;  cs[1] = ci + 1;
+          break;
+        case 3:
+          ps[12] = ps[0];  ps[13] = pi + 0;  ps[14] = pi + 1;  ps[15] = pi + 2;
+          ps[ 8] = ps[1];  ps[ 9] = pi + 9;  ps[10] = pi + 10; ps[11] = pi + 3;
+          ps[ 4] = ps[2];  ps[ 5] = pi + 8;  ps[ 6] = pi + 11; ps[ 7] = pi + 4;
+          ps[ 0] = ps[3];  ps[ 1] = pi + 7;  ps[ 2] = pi + 6;  ps[ 3] = pi + 5;
+          cs[2] = cs[0]; cs[3] = ci;
+          cs[0] = cs[1]; cs[1] = ci + 1;
+          break;
+      }
+      mesh.figures.push({
+        type: 'patch',
+        coords: new Int32Array(ps), // making copies of ps and cs
+        colors: new Int32Array(cs)
+      });
+    }
+  }
+
+  function updateBounds(mesh) {
+    var minX = mesh.coords[0][0], minY = mesh.coords[0][1],
+      maxX = minX, maxY = minY;
+    for (var i = 1, ii = mesh.coords.length; i < ii; i++) {
+      var x = mesh.coords[i][0], y = mesh.coords[i][1];
+      minX = minX > x ? x : minX;
+      minY = minY > y ? y : minY;
+      maxX = maxX < x ? x : maxX;
+      maxY = maxY < y ? y : maxY;
+    }
+    mesh.bounds = [minX, minY, maxX, maxY];
+  }
+
+  function packData(mesh) {
+    var i, ii, j, jj;
+
+    var coords = mesh.coords;
+    var coordsPacked = new Float32Array(coords.length * 2);
+    for (i = 0, j = 0, ii = coords.length; i < ii; i++) {
+      var xy = coords[i];
+      coordsPacked[j++] = xy[0];
+      coordsPacked[j++] = xy[1];
+    }
+    mesh.coords = coordsPacked;
+
+    var colors = mesh.colors;
+    var colorsPacked = new Uint8Array(colors.length * 3);
+    for (i = 0, j = 0, ii = colors.length; i < ii; i++) {
+      var c = colors[i];
+      colorsPacked[j++] = c[0];
+      colorsPacked[j++] = c[1];
+      colorsPacked[j++] = c[2];
+    }
+    mesh.colors = colorsPacked;
+
+    var figures = mesh.figures;
+    for (i = 0, ii = figures.length; i < ii; i++) {
+      var figure = figures[i], ps = figure.coords, cs = figure.colors;
+      for (j = 0, jj = ps.length; j < jj; j++) {
+        ps[j] *= 2;
+        cs[j] *= 3;
+      }
+    }
+  }
+
+  function Mesh(stream, matrix, xref, res) {
+    assert(isStream(stream), 'Mesh data is not a stream');
+    var dict = stream.dict;
+    this.matrix = matrix;
+    this.shadingType = dict.get('ShadingType');
+    this.type = 'Pattern';
+    this.bbox = dict.get('BBox');
+    var cs = dict.get('ColorSpace', 'CS');
+    cs = ColorSpace.parse(cs, xref, res);
+    this.cs = cs;
+    this.background = dict.has('Background') ?
+      cs.getRgb(dict.get('Background'), 0) : null;
+
+    var fnObj = dict.get('Function');
+    var fn = fnObj ? PDFFunction.parseArray(xref, fnObj) : null;
+
+    this.coords = [];
+    this.colors = [];
+    this.figures = [];
+
+    var decodeContext = {
+      bitsPerCoordinate: dict.get('BitsPerCoordinate'),
+      bitsPerComponent: dict.get('BitsPerComponent'),
+      bitsPerFlag: dict.get('BitsPerFlag'),
+      decode: dict.get('Decode'),
+      colorFn: fn,
+      colorSpace: cs,
+      numComps: fn ? 1 : cs.numComps
+    };
+    var reader = new MeshStreamReader(stream, decodeContext);
+
+    var patchMesh = false;
+    switch (this.shadingType) {
+      case ShadingType.FREE_FORM_MESH:
+        decodeType4Shading(this, reader);
+        break;
+      case ShadingType.LATTICE_FORM_MESH:
+        var verticesPerRow = dict.get('VerticesPerRow') | 0;
+        assert(verticesPerRow >= 2, 'Invalid VerticesPerRow');
+        decodeType5Shading(this, reader, verticesPerRow);
+        break;
+      case ShadingType.COONS_PATCH_MESH:
+        decodeType6Shading(this, reader);
+        patchMesh = true;
+        break;
+      case ShadingType.TENSOR_PATCH_MESH:
+        decodeType7Shading(this, reader);
+        patchMesh = true;
+        break;
+      default:
+        error('Unsupported mesh type.');
+        break;
+    }
+
+    if (patchMesh) {
+      // dirty bounds calculation for determining, how dense shall be triangles
+      updateBounds(this);
+      for (var i = 0, ii = this.figures.length; i < ii; i++) {
+        buildFigureFromPatch(this, i);
+      }
+    }
+    // calculate bounds
+    updateBounds(this);
+
+    packData(this);
+  }
+
+  Mesh.prototype = {
+    getIR: function Mesh_getIR() {
+      return ['Mesh', this.shadingType, this.coords, this.colors, this.figures,
+        this.bounds, this.matrix, this.bbox, this.background];
+    }
+  };
+
+  return Mesh;
+})();
+
+Shadings.Dummy = (function DummyClosure() {
+  function Dummy() {
+    this.type = 'Pattern';
+  }
+
+  Dummy.prototype = {
+    getIR: function Dummy_getIR() {
+      return ['Dummy'];
+    }
+  };
+  return Dummy;
+})();
+
+function getTilingPatternIR(operatorList, dict, args) {
+  var matrix = dict.get('Matrix');
+  var bbox = dict.get('BBox');
+  var xstep = dict.get('XStep');
+  var ystep = dict.get('YStep');
+  var paintType = dict.get('PaintType');
+  var tilingType = dict.get('TilingType');
+
+  return [
+    'TilingPattern', args, operatorList, matrix, bbox, xstep, ystep,
+    paintType, tilingType
+  ];
+}
+
+
+var PartialEvaluator = (function PartialEvaluatorClosure() {
+  function PartialEvaluator(pdfManager, xref, handler, pageIndex,
+                            uniquePrefix, idCounters, fontCache) {
+    this.pdfManager = pdfManager;
+    this.xref = xref;
+    this.handler = handler;
+    this.pageIndex = pageIndex;
+    this.uniquePrefix = uniquePrefix;
+    this.idCounters = idCounters;
+    this.fontCache = fontCache;
+  }
+
+  // Trying to minimize Date.now() usage and check every 100 time
+  var TIME_SLOT_DURATION_MS = 20;
+  var CHECK_TIME_EVERY = 100;
+  function TimeSlotManager() {
+    this.reset();
+  }
+  TimeSlotManager.prototype = {
+    check: function TimeSlotManager_check() {
+      if (++this.checked < CHECK_TIME_EVERY) {
+        return false;
+      }
+      this.checked = 0;
+      return this.endTime <= Date.now();
+    },
+    reset: function TimeSlotManager_reset() {
+      this.endTime = Date.now() + TIME_SLOT_DURATION_MS;
+      this.checked = 0;
+    }
+  };
+
+  var deferred = Promise.resolve();
+
+  var TILING_PATTERN = 1, SHADING_PATTERN = 2;
+
+  PartialEvaluator.prototype = {
+    hasBlendModes: function PartialEvaluator_hasBlendModes(resources) {
+      if (!isDict(resources)) {
+        return false;
+      }
+
+      var processed = Object.create(null);
+      if (resources.objId) {
+        processed[resources.objId] = true;
+      }
+
+      var nodes = [resources];
+      while (nodes.length) {
+        var key;
+        var node = nodes.shift();
+        // First check the current resources for blend modes.
+        var graphicStates = node.get('ExtGState');
+        if (isDict(graphicStates)) {
+          graphicStates = graphicStates.getAll();
+          for (key in graphicStates) {
+            var graphicState = graphicStates[key];
+            var bm = graphicState['BM'];
+            if (isName(bm) && bm.name !== 'Normal') {
+              return true;
+            }
+          }
+        }
+        // Descend into the XObjects to look for more resources and blend modes.
+        var xObjects = node.get('XObject');
+        if (!isDict(xObjects)) {
+          continue;
+        }
+        xObjects = xObjects.getAll();
+        for (key in xObjects) {
+          var xObject = xObjects[key];
+          if (!isStream(xObject)) {
+            continue;
+          }
+          if (xObject.dict.objId) {
+            if (processed[xObject.dict.objId]) {
+              // stream has objId and is processed already
+              continue;
+            }
+            processed[xObject.dict.objId] = true;
+          }
+          var xResources = xObject.dict.get('Resources');
+          // Checking objId to detect an infinite loop.
+          if (isDict(xResources) &&
+              (!xResources.objId || !processed[xResources.objId])) {
+            nodes.push(xResources);
+            if (xResources.objId) {
+              processed[xResources.objId] = true;
+            }
+          }
+        }
+      }
+      return false;
+    },
+
+    buildFormXObject: function PartialEvaluator_buildFormXObject(resources,
+                                                                 xobj, smask,
+                                                                 operatorList,
+                                                                 task,
+                                                                 initialState) {
+      var matrix = xobj.dict.getArray('Matrix');
+      var bbox = xobj.dict.getArray('BBox');
+      var group = xobj.dict.get('Group');
+      if (group) {
+        var groupOptions = {
+          matrix: matrix,
+          bbox: bbox,
+          smask: smask,
+          isolated: false,
+          knockout: false
+        };
+
+        var groupSubtype = group.get('S');
+        var colorSpace;
+        if (isName(groupSubtype) && groupSubtype.name === 'Transparency') {
+          groupOptions.isolated = (group.get('I') || false);
+          groupOptions.knockout = (group.get('K') || false);
+          colorSpace = (group.has('CS') ?
+            ColorSpace.parse(group.get('CS'), this.xref, resources) : null);
+        }
+
+        if (smask && smask.backdrop) {
+          colorSpace = colorSpace || ColorSpace.singletons.rgb;
+          smask.backdrop = colorSpace.getRgb(smask.backdrop, 0);
+        }
+
+        operatorList.addOp(OPS.beginGroup, [groupOptions]);
+      }
+
+      operatorList.addOp(OPS.paintFormXObjectBegin, [matrix, bbox]);
+
+      return this.getOperatorList(xobj, task,
+        (xobj.dict.get('Resources') || resources), operatorList, initialState).
+        then(function () {
+          operatorList.addOp(OPS.paintFormXObjectEnd, []);
+
+          if (group) {
+            operatorList.addOp(OPS.endGroup, [groupOptions]);
+          }
+        });
+    },
+
+    buildPaintImageXObject:
+        function PartialEvaluator_buildPaintImageXObject(resources, image,
+                                                         inline, operatorList,
+                                                         cacheKey, imageCache) {
+      var self = this;
+      var dict = image.dict;
+      var w = dict.get('Width', 'W');
+      var h = dict.get('Height', 'H');
+
+      if (!(w && isNum(w)) || !(h && isNum(h))) {
+        warn('Image dimensions are missing, or not numbers.');
+        return;
+      }
+      if (PDFJS.maxImageSize !== -1 && w * h > PDFJS.maxImageSize) {
+        warn('Image exceeded maximum allowed size and was removed.');
+        return;
+      }
+
+      var imageMask = (dict.get('ImageMask', 'IM') || false);
+      var imgData, args;
+      if (imageMask) {
+        // This depends on a tmpCanvas being filled with the
+        // current fillStyle, such that processing the pixel
+        // data can't be done here. Instead of creating a
+        // complete PDFImage, only read the information needed
+        // for later.
+
+        var width = dict.get('Width', 'W');
+        var height = dict.get('Height', 'H');
+        var bitStrideLength = (width + 7) >> 3;
+        var imgArray = image.getBytes(bitStrideLength * height);
+        var decode = dict.get('Decode', 'D');
+        var inverseDecode = (!!decode && decode[0] > 0);
+
+        imgData = PDFImage.createMask(imgArray, width, height,
+                                      image instanceof DecodeStream,
+                                      inverseDecode);
+        imgData.cached = true;
+        args = [imgData];
+        operatorList.addOp(OPS.paintImageMaskXObject, args);
+        if (cacheKey) {
+          imageCache[cacheKey] = {
+            fn: OPS.paintImageMaskXObject,
+            args: args
+          };
+        }
+        return;
+      }
+
+      var softMask = (dict.get('SMask', 'SM') || false);
+      var mask = (dict.get('Mask') || false);
+
+      var SMALL_IMAGE_DIMENSIONS = 200;
+      // Inlining small images into the queue as RGB data
+      if (inline && !softMask && !mask && !(image instanceof JpegStream) &&
+          (w + h) < SMALL_IMAGE_DIMENSIONS) {
+        var imageObj = new PDFImage(this.xref, resources, image,
+                                    inline, null, null);
+        // We force the use of RGBA_32BPP images here, because we can't handle
+        // any other kind.
+        imgData = imageObj.createImageData(/* forceRGBA = */ true);
+        operatorList.addOp(OPS.paintInlineImageXObject, [imgData]);
+        return;
+      }
+
+      // If there is no imageMask, create the PDFImage and a lot
+      // of image processing can be done here.
+      var uniquePrefix = (this.uniquePrefix || '');
+      var objId = 'img_' + uniquePrefix + (++this.idCounters.obj);
+      operatorList.addDependency(objId);
+      args = [objId, w, h];
+
+      if (!softMask && !mask && image instanceof JpegStream &&
+          image.isNativelySupported(this.xref, resources)) {
+        // These JPEGs don't need any more processing so we can just send it.
+        operatorList.addOp(OPS.paintJpegXObject, args);
+        this.handler.send('obj',
+          [objId, this.pageIndex, 'JpegStream', image.getIR()]);
+        return;
+      }
+
+      PDFImage.buildImage(self.handler, self.xref, resources, image, inline).
+        then(function(imageObj) {
+          var imgData = imageObj.createImageData(/* forceRGBA = */ false);
+          self.handler.send('obj', [objId, self.pageIndex, 'Image', imgData],
+            [imgData.data.buffer]);
+        }).then(undefined, function (reason) {
+          warn('Unable to decode image: ' + reason);
+          self.handler.send('obj', [objId, self.pageIndex, 'Image', null]);
+        });
+
+      operatorList.addOp(OPS.paintImageXObject, args);
+      if (cacheKey) {
+        imageCache[cacheKey] = {
+          fn: OPS.paintImageXObject,
+          args: args
+        };
+      }
+    },
+
+    handleSMask: function PartialEvaluator_handleSmask(smask, resources,
+                                                       operatorList, task,
+                                                       stateManager) {
+      var smaskContent = smask.get('G');
+      var smaskOptions = {
+        subtype: smask.get('S').name,
+        backdrop: smask.get('BC')
+      };
+      return this.buildFormXObject(resources, smaskContent, smaskOptions,
+                            operatorList, task, stateManager.state.clone());
+    },
+
+    handleTilingType:
+        function PartialEvaluator_handleTilingType(fn, args, resources,
+                                                   pattern, patternDict,
+                                                   operatorList, task) {
+      // Create an IR of the pattern code.
+      var tilingOpList = new OperatorList();
+      // Merge the available resources, to prevent issues when the patternDict
+      // is missing some /Resources entries (fixes issue6541.pdf).
+      var resourcesArray = [patternDict.get('Resources'), resources];
+      var patternResources = Dict.merge(this.xref, resourcesArray);
+
+      return this.getOperatorList(pattern, task, patternResources,
+                                  tilingOpList).then(function () {
+          // Add the dependencies to the parent operator list so they are
+          // resolved before sub operator list is executed synchronously.
+          operatorList.addDependencies(tilingOpList.dependencies);
+          operatorList.addOp(fn, getTilingPatternIR({
+            fnArray: tilingOpList.fnArray,
+            argsArray: tilingOpList.argsArray
+          }, patternDict, args));
+        });
+    },
+
+    handleSetFont:
+        function PartialEvaluator_handleSetFont(resources, fontArgs, fontRef,
+                                                operatorList, task, state) {
+      // TODO(mack): Not needed?
+      var fontName;
+      if (fontArgs) {
+        fontArgs = fontArgs.slice();
+        fontName = fontArgs[0].name;
+      }
+
+      var self = this;
+      return this.loadFont(fontName, fontRef, this.xref, resources).then(
+          function (translated) {
+        if (!translated.font.isType3Font) {
+          return translated;
+        }
+        return translated.loadType3Data(self, resources, operatorList, task).
+          then(function () {
+          return translated;
+        });
+      }).then(function (translated) {
+        state.font = translated.font;
+        translated.send(self.handler);
+        return translated.loadedName;
+      });
+    },
+
+    handleText: function PartialEvaluator_handleText(chars, state) {
+      var font = state.font;
+      var glyphs = font.charsToGlyphs(chars);
+      var isAddToPathSet = !!(state.textRenderingMode &
+                              TextRenderingMode.ADD_TO_PATH_FLAG);
+      if (font.data && (isAddToPathSet || PDFJS.disableFontFace)) {
+        var buildPath = function (fontChar) {
+          if (!font.renderer.hasBuiltPath(fontChar)) {
+            var path = font.renderer.getPathJs(fontChar);
+            this.handler.send('commonobj', [
+              font.loadedName + '_path_' + fontChar,
+              'FontPath',
+              path
+            ]);
+          }
+        }.bind(this);
+
+        for (var i = 0, ii = glyphs.length; i < ii; i++) {
+          var glyph = glyphs[i];
+          if (glyph === null) {
+            continue;
+          }
+          buildPath(glyph.fontChar);
+
+          // If the glyph has an accent we need to build a path for its
+          // fontChar too, otherwise CanvasGraphics_paintChar will fail.
+          var accent = glyph.accent;
+          if (accent && accent.fontChar) {
+            buildPath(accent.fontChar);
+          }
+        }
+      }
+
+      return glyphs;
+    },
+
+    setGState: function PartialEvaluator_setGState(resources, gState,
+                                                   operatorList, task,
+                                                   xref, stateManager) {
+      // This array holds the converted/processed state data.
+      var gStateObj = [];
+      var gStateMap = gState.map;
+      var self = this;
+      var promise = Promise.resolve();
+      for (var key in gStateMap) {
+        var value = gStateMap[key];
+        switch (key) {
+          case 'Type':
+            break;
+          case 'LW':
+          case 'LC':
+          case 'LJ':
+          case 'ML':
+          case 'D':
+          case 'RI':
+          case 'FL':
+          case 'CA':
+          case 'ca':
+            gStateObj.push([key, value]);
+            break;
+          case 'Font':
+            promise = promise.then(function () {
+              return self.handleSetFont(resources, null, value[0], operatorList,
+                                        task, stateManager.state).
+                then(function (loadedName) {
+                  operatorList.addDependency(loadedName);
+                  gStateObj.push([key, [loadedName, value[1]]]);
+                });
+            });
+            break;
+          case 'BM':
+            gStateObj.push([key, value]);
+            break;
+          case 'SMask':
+            if (isName(value) && value.name === 'None') {
+              gStateObj.push([key, false]);
+              break;
+            }
+            var dict = xref.fetchIfRef(value);
+            if (isDict(dict)) {
+              promise = promise.then(function () {
+                return self.handleSMask(dict, resources, operatorList,
+                                        task, stateManager);
+              });
+              gStateObj.push([key, true]);
+            } else {
+              warn('Unsupported SMask type');
+            }
+
+            break;
+          // Only generate info log messages for the following since
+          // they are unlikely to have a big impact on the rendering.
+          case 'OP':
+          case 'op':
+          case 'OPM':
+          case 'BG':
+          case 'BG2':
+          case 'UCR':
+          case 'UCR2':
+          case 'TR':
+          case 'TR2':
+          case 'HT':
+          case 'SM':
+          case 'SA':
+          case 'AIS':
+          case 'TK':
+            // TODO implement these operators.
+            info('graphic state operator ' + key);
+            break;
+          default:
+            info('Unknown graphic state operator ' + key);
+            break;
+        }
+      }
+      return promise.then(function () {
+        if (gStateObj.length >= 0) {
+          operatorList.addOp(OPS.setGState, [gStateObj]);
+        }
+      });
+    },
+
+    loadFont: function PartialEvaluator_loadFont(fontName, font, xref,
+                                                 resources) {
+
+      function errorFont() {
+        return Promise.resolve(new TranslatedFont('g_font_error',
+          new ErrorFont('Font ' + fontName + ' is not available'), font));
+      }
+      var fontRef;
+      if (font) { // Loading by ref.
+        assert(isRef(font));
+        fontRef = font;
+      } else { // Loading by name.
+        var fontRes = resources.get('Font');
+        if (fontRes) {
+          fontRef = fontRes.getRaw(fontName);
+        } else {
+          warn('fontRes not available');
+          return errorFont();
+        }
+      }
+      if (!fontRef) {
+        warn('fontRef not available');
+        return errorFont();
+      }
+
+      if (this.fontCache.has(fontRef)) {
+        return this.fontCache.get(fontRef);
+      }
+
+      font = xref.fetchIfRef(fontRef);
+      if (!isDict(font)) {
+        return errorFont();
+      }
+
+      // We are holding font.translated references just for fontRef that are not
+      // dictionaries (Dict). See explanation below.
+      if (font.translated) {
+        return font.translated;
+      }
+
+      var fontCapability = createPromiseCapability();
+
+      var preEvaluatedFont = this.preEvaluateFont(font, xref);
+      var descriptor = preEvaluatedFont.descriptor;
+      var fontID = fontRef.num + '_' + fontRef.gen;
+      if (isDict(descriptor)) {
+        if (!descriptor.fontAliases) {
+          descriptor.fontAliases = Object.create(null);
+        }
+
+        var fontAliases = descriptor.fontAliases;
+        var hash = preEvaluatedFont.hash;
+        if (fontAliases[hash]) {
+          var aliasFontRef = fontAliases[hash].aliasRef;
+          if (aliasFontRef && this.fontCache.has(aliasFontRef)) {
+            this.fontCache.putAlias(fontRef, aliasFontRef);
+            return this.fontCache.get(fontRef);
+          }
+        }
+
+        if (!fontAliases[hash]) {
+          fontAliases[hash] = {
+            fontID: Font.getFontID()
+          };
+        }
+
+        fontAliases[hash].aliasRef = fontRef;
+        fontID = fontAliases[hash].fontID;
+      }
+
+      // Workaround for bad PDF generators that don't reference fonts
+      // properly, i.e. by not using an object identifier.
+      // Check if the fontRef is a Dict (as opposed to a standard object),
+      // in which case we don't cache the font and instead reference it by
+      // fontName in font.loadedName below.
+      var fontRefIsDict = isDict(fontRef);
+      if (!fontRefIsDict) {
+        this.fontCache.put(fontRef, fontCapability.promise);
+      }
+
+      // Keep track of each font we translated so the caller can
+      // load them asynchronously before calling display on a page.
+      font.loadedName = 'g_font_' + (fontRefIsDict ?
+        fontName.replace(/\W/g, '') : fontID);
+
+      font.translated = fontCapability.promise;
+
+      // TODO move promises into translate font
+      var translatedPromise;
+      try {
+        translatedPromise = Promise.resolve(
+          this.translateFont(preEvaluatedFont, xref));
+      } catch (e) {
+        translatedPromise = Promise.reject(e);
+      }
+
+      translatedPromise.then(function (translatedFont) {
+        if (translatedFont.fontType !== undefined) {
+          var xrefFontStats = xref.stats.fontTypes;
+          xrefFontStats[translatedFont.fontType] = true;
+        }
+
+        fontCapability.resolve(new TranslatedFont(font.loadedName,
+          translatedFont, font));
+      }, function (reason) {
+        // TODO fontCapability.reject?
+        UnsupportedManager.notify(UNSUPPORTED_FEATURES.font);
+
+        try {
+          // error, but it's still nice to have font type reported
+          var descriptor = preEvaluatedFont.descriptor;
+          var fontFile3 = descriptor && descriptor.get('FontFile3');
+          var subtype = fontFile3 && fontFile3.get('Subtype');
+          var fontType = getFontType(preEvaluatedFont.type,
+                                     subtype && subtype.name);
+          var xrefFontStats = xref.stats.fontTypes;
+          xrefFontStats[fontType] = true;
+        } catch (ex) { }
+
+        fontCapability.resolve(new TranslatedFont(font.loadedName,
+          new ErrorFont(reason instanceof Error ? reason.message : reason),
+          font));
+      });
+      return fontCapability.promise;
+    },
+
+    buildPath: function PartialEvaluator_buildPath(operatorList, fn, args) {
+      var lastIndex = operatorList.length - 1;
+      if (!args) {
+        args = [];
+      }
+      if (lastIndex < 0 ||
+          operatorList.fnArray[lastIndex] !== OPS.constructPath) {
+        operatorList.addOp(OPS.constructPath, [[fn], args]);
+      } else {
+        var opArgs = operatorList.argsArray[lastIndex];
+        opArgs[0].push(fn);
+        Array.prototype.push.apply(opArgs[1], args);
+      }
+    },
+
+    handleColorN: function PartialEvaluator_handleColorN(operatorList, fn, args,
+          cs, patterns, resources, task, xref) {
+      // compile tiling patterns
+      var patternName = args[args.length - 1];
+      // SCN/scn applies patterns along with normal colors
+      var pattern;
+      if (isName(patternName) &&
+          (pattern = patterns.get(patternName.name))) {
+        var dict = (isStream(pattern) ? pattern.dict : pattern);
+        var typeNum = dict.get('PatternType');
+
+        if (typeNum === TILING_PATTERN) {
+          var color = cs.base ? cs.base.getRgb(args, 0) : null;
+          return this.handleTilingType(fn, color, resources, pattern,
+                                       dict, operatorList, task);
+        } else if (typeNum === SHADING_PATTERN) {
+          var shading = dict.get('Shading');
+          var matrix = dict.get('Matrix');
+          pattern = Pattern.parseShading(shading, matrix, xref, resources);
+          operatorList.addOp(fn, pattern.getIR());
+          return Promise.resolve();
+        } else {
+          return Promise.reject('Unknown PatternType: ' + typeNum);
+        }
+      }
+      // TODO shall we fail here?
+      operatorList.addOp(fn, args);
+      return Promise.resolve();
+    },
+
+    getOperatorList: function PartialEvaluator_getOperatorList(stream,
+                                                               task,
+                                                               resources,
+                                                               operatorList,
+                                                               initialState) {
+
+      var self = this;
+      var xref = this.xref;
+      var imageCache = {};
+
+      assert(operatorList);
+
+      resources = (resources || Dict.empty);
+      var xobjs = (resources.get('XObject') || Dict.empty);
+      var patterns = (resources.get('Pattern') || Dict.empty);
+      var stateManager = new StateManager(initialState || new EvalState());
+      var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
+      var timeSlotManager = new TimeSlotManager();
+
+      return new Promise(function next(resolve, reject) {
+        task.ensureNotTerminated();
+        timeSlotManager.reset();
+        var stop, operation = {}, i, ii, cs;
+        while (!(stop = timeSlotManager.check())) {
+          // The arguments parsed by read() are used beyond this loop, so we
+          // cannot reuse the same array on each iteration. Therefore we pass
+          // in |null| as the initial value (see the comment on
+          // EvaluatorPreprocessor_read() for why).
+          operation.args = null;
+          if (!(preprocessor.read(operation))) {
+            break;
+          }
+          var args = operation.args;
+          var fn = operation.fn;
+
+          switch (fn | 0) {
+            case OPS.paintXObject:
+              if (args[0].code) {
+                break;
+              }
+              // eagerly compile XForm objects
+              var name = args[0].name;
+              if (!name) {
+                warn('XObject must be referred to by name.');
+                continue;
+              }
+              if (imageCache[name] !== undefined) {
+                operatorList.addOp(imageCache[name].fn, imageCache[name].args);
+                args = null;
+                continue;
+              }
+
+              var xobj = xobjs.get(name);
+              if (xobj) {
+                assert(isStream(xobj), 'XObject should be a stream');
+
+                var type = xobj.dict.get('Subtype');
+                assert(isName(type),
+                  'XObject should have a Name subtype');
+
+                if (type.name === 'Form') {
+                  stateManager.save();
+                  return self.buildFormXObject(resources, xobj, null,
+                                               operatorList, task,
+                                               stateManager.state.clone()).
+                    then(function () {
+                      stateManager.restore();
+                      next(resolve, reject);
+                    }, reject);
+                } else if (type.name === 'Image') {
+                  self.buildPaintImageXObject(resources, xobj, false,
+                    operatorList, name, imageCache);
+                  args = null;
+                  continue;
+                } else if (type.name === 'PS') {
+                  // PostScript XObjects are unused when viewing documents.
+                  // See section 4.7.1 of Adobe's PDF reference.
+                  info('Ignored XObject subtype PS');
+                  continue;
+                } else {
+                  error('Unhandled XObject subtype ' + type.name);
+                }
+              }
+              break;
+            case OPS.setFont:
+              var fontSize = args[1];
+              // eagerly collect all fonts
+              return self.handleSetFont(resources, args, null, operatorList,
+                                        task, stateManager.state).
+                then(function (loadedName) {
+                  operatorList.addDependency(loadedName);
+                  operatorList.addOp(OPS.setFont, [loadedName, fontSize]);
+                  next(resolve, reject);
+                }, reject);
+            case OPS.endInlineImage:
+              var cacheKey = args[0].cacheKey;
+              if (cacheKey) {
+                var cacheEntry = imageCache[cacheKey];
+                if (cacheEntry !== undefined) {
+                  operatorList.addOp(cacheEntry.fn, cacheEntry.args);
+                  args = null;
+                  continue;
+                }
+              }
+              self.buildPaintImageXObject(resources, args[0], true,
+                operatorList, cacheKey, imageCache);
+              args = null;
+              continue;
+            case OPS.showText:
+              args[0] = self.handleText(args[0], stateManager.state);
+              break;
+            case OPS.showSpacedText:
+              var arr = args[0];
+              var combinedGlyphs = [];
+              var arrLength = arr.length;
+              var state = stateManager.state;
+              for (i = 0; i < arrLength; ++i) {
+                var arrItem = arr[i];
+                if (isString(arrItem)) {
+                  Array.prototype.push.apply(combinedGlyphs,
+                    self.handleText(arrItem, state));
+                } else if (isNum(arrItem)) {
+                  combinedGlyphs.push(arrItem);
+                }
+              }
+              args[0] = combinedGlyphs;
+              fn = OPS.showText;
+              break;
+            case OPS.nextLineShowText:
+              operatorList.addOp(OPS.nextLine);
+              args[0] = self.handleText(args[0], stateManager.state);
+              fn = OPS.showText;
+              break;
+            case OPS.nextLineSetSpacingShowText:
+              operatorList.addOp(OPS.nextLine);
+              operatorList.addOp(OPS.setWordSpacing, [args.shift()]);
+              operatorList.addOp(OPS.setCharSpacing, [args.shift()]);
+              args[0] = self.handleText(args[0], stateManager.state);
+              fn = OPS.showText;
+              break;
+            case OPS.setTextRenderingMode:
+              stateManager.state.textRenderingMode = args[0];
+              break;
+
+            case OPS.setFillColorSpace:
+              stateManager.state.fillColorSpace =
+                ColorSpace.parse(args[0], xref, resources);
+              continue;
+            case OPS.setStrokeColorSpace:
+              stateManager.state.strokeColorSpace =
+                ColorSpace.parse(args[0], xref, resources);
+              continue;
+            case OPS.setFillColor:
+              cs = stateManager.state.fillColorSpace;
+              args = cs.getRgb(args, 0);
+              fn = OPS.setFillRGBColor;
+              break;
+            case OPS.setStrokeColor:
+              cs = stateManager.state.strokeColorSpace;
+              args = cs.getRgb(args, 0);
+              fn = OPS.setStrokeRGBColor;
+              break;
+            case OPS.setFillGray:
+              stateManager.state.fillColorSpace = ColorSpace.singletons.gray;
+              args = ColorSpace.singletons.gray.getRgb(args, 0);
+              fn = OPS.setFillRGBColor;
+              break;
+            case OPS.setStrokeGray:
+              stateManager.state.strokeColorSpace = ColorSpace.singletons.gray;
+              args = ColorSpace.singletons.gray.getRgb(args, 0);
+              fn = OPS.setStrokeRGBColor;
+              break;
+            case OPS.setFillCMYKColor:
+              stateManager.state.fillColorSpace = ColorSpace.singletons.cmyk;
+              args = ColorSpace.singletons.cmyk.getRgb(args, 0);
+              fn = OPS.setFillRGBColor;
+              break;
+            case OPS.setStrokeCMYKColor:
+              stateManager.state.strokeColorSpace = ColorSpace.singletons.cmyk;
+              args = ColorSpace.singletons.cmyk.getRgb(args, 0);
+              fn = OPS.setStrokeRGBColor;
+              break;
+            case OPS.setFillRGBColor:
+              stateManager.state.fillColorSpace = ColorSpace.singletons.rgb;
+              args = ColorSpace.singletons.rgb.getRgb(args, 0);
+              break;
+            case OPS.setStrokeRGBColor:
+              stateManager.state.strokeColorSpace = ColorSpace.singletons.rgb;
+              args = ColorSpace.singletons.rgb.getRgb(args, 0);
+              break;
+            case OPS.setFillColorN:
+              cs = stateManager.state.fillColorSpace;
+              if (cs.name === 'Pattern') {
+                return self.handleColorN(operatorList, OPS.setFillColorN,
+                  args, cs, patterns, resources, task, xref).then(function() {
+                    next(resolve, reject);
+                  }, reject);
+              }
+              args = cs.getRgb(args, 0);
+              fn = OPS.setFillRGBColor;
+              break;
+            case OPS.setStrokeColorN:
+              cs = stateManager.state.strokeColorSpace;
+              if (cs.name === 'Pattern') {
+                return self.handleColorN(operatorList, OPS.setStrokeColorN,
+                  args, cs, patterns, resources, task, xref).then(function() {
+                    next(resolve, reject);
+                  }, reject);
+              }
+              args = cs.getRgb(args, 0);
+              fn = OPS.setStrokeRGBColor;
+              break;
+
+            case OPS.shadingFill:
+              var shadingRes = resources.get('Shading');
+              if (!shadingRes) {
+                error('No shading resource found');
+              }
+
+              var shading = shadingRes.get(args[0].name);
+              if (!shading) {
+                error('No shading object found');
+              }
+
+              var shadingFill = Pattern.parseShading(shading, null, xref,
+                resources);
+              var patternIR = shadingFill.getIR();
+              args = [patternIR];
+              fn = OPS.shadingFill;
+              break;
+            case OPS.setGState:
+              var dictName = args[0];
+              var extGState = resources.get('ExtGState');
+
+              if (!isDict(extGState) || !extGState.has(dictName.name)) {
+                break;
+              }
+
+              var gState = extGState.get(dictName.name);
+              return self.setGState(resources, gState, operatorList, task,
+                xref, stateManager).then(function() {
+                  next(resolve, reject);
+                }, reject);
+            case OPS.moveTo:
+            case OPS.lineTo:
+            case OPS.curveTo:
+            case OPS.curveTo2:
+            case OPS.curveTo3:
+            case OPS.closePath:
+              self.buildPath(operatorList, fn, args);
+              continue;
+            case OPS.rectangle:
+              self.buildPath(operatorList, fn, args);
+              continue;
+            case OPS.markPoint:
+            case OPS.markPointProps:
+            case OPS.beginMarkedContent:
+            case OPS.beginMarkedContentProps:
+            case OPS.endMarkedContent:
+            case OPS.beginCompat:
+            case OPS.endCompat:
+              // Ignore operators where the corresponding handlers are known to
+              // be no-op in CanvasGraphics (display/canvas.js). This prevents
+              // serialization errors and is also a bit more efficient.
+              // We could also try to serialize all objects in a general way,
+              // e.g. as done in https://github.com/mozilla/pdf.js/pull/6266,
+              // but doing so is meaningless without knowing the semantics.
+              continue;
+            default:
+              // Note: Let's hope that the ignored operator does not have any
+              // non-serializable arguments, otherwise postMessage will throw
+              // "An object could not be cloned.".
+          }
+          operatorList.addOp(fn, args);
+        }
+        if (stop) {
+          deferred.then(function () {
+            next(resolve, reject);
+          }, reject);
+          return;
+        }
+        // Some PDFs don't close all restores inside object/form.
+        // Closing those for them.
+        for (i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) {
+          operatorList.addOp(OPS.restore, []);
+        }
+        resolve();
+      });
+    },
+
+    getTextContent: function PartialEvaluator_getTextContent(stream, task,
+                                                             resources,
+                                                             stateManager) {
+
+      stateManager = (stateManager || new StateManager(new TextState()));
+
+      var textContent = {
+        items: [],
+        styles: Object.create(null)
+      };
+      var bidiTexts = textContent.items;
+      var SPACE_FACTOR = 0.3;
+      var MULTI_SPACE_FACTOR = 1.5;
+
+      var self = this;
+      var xref = this.xref;
+
+      resources = (xref.fetchIfRef(resources) || Dict.empty);
+
+      // The xobj is parsed iff it's needed, e.g. if there is a `DO` cmd.
+      var xobjs = null;
+      var xobjsCache = {};
+
+      var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
+
+      var textState;
+
+      function newTextChunk() {
+        var font = textState.font;
+        if (!(font.loadedName in textContent.styles)) {
+          textContent.styles[font.loadedName] = {
+            fontFamily: font.fallbackName,
+            ascent: font.ascent,
+            descent: font.descent,
+            vertical: font.vertical
+          };
+        }
+        return {
+          // |str| is initially an array which we push individual chars to, and
+          // then runBidi() overwrites it with the final string.
+          str: [],
+          dir: null,
+          width: 0,
+          height: 0,
+          transform: null,
+          fontName: font.loadedName
+        };
+      }
+
+      function runBidi(textChunk) {
+        var str = textChunk.str.join('');
+        var bidiResult = PDFJS.bidi(str, -1, textState.font.vertical);
+        textChunk.str = bidiResult.str;
+        textChunk.dir = bidiResult.dir;
+        return textChunk;
+      }
+
+      function handleSetFont(fontName, fontRef) {
+        return self.loadFont(fontName, fontRef, xref, resources).
+          then(function (translated) {
+            textState.font = translated.font;
+            textState.fontMatrix = translated.font.fontMatrix ||
+              FONT_IDENTITY_MATRIX;
+          });
+      }
+
+      function buildTextGeometry(chars, textChunk) {
+        var font = textState.font;
+        textChunk = textChunk || newTextChunk();
+        if (!textChunk.transform) {
+          // 9.4.4 Text Space Details
+          var tsm = [textState.fontSize * textState.textHScale, 0,
+                     0, textState.fontSize,
+                     0, textState.textRise];
+
+          if (font.isType3Font &&
+              textState.fontMatrix !== FONT_IDENTITY_MATRIX &&
+              textState.fontSize === 1) {
+            var glyphHeight = font.bbox[3] - font.bbox[1];
+            if (glyphHeight > 0) {
+              glyphHeight = glyphHeight * textState.fontMatrix[3];
+              tsm[3] *= glyphHeight;
+            }
+          }
+
+          var trm = textChunk.transform = Util.transform(textState.ctm,
+                                    Util.transform(textState.textMatrix, tsm));
+          if (!font.vertical) {
+            textChunk.height = Math.sqrt(trm[2] * trm[2] + trm[3] * trm[3]);
+          } else {
+            textChunk.width = Math.sqrt(trm[0] * trm[0] + trm[1] * trm[1]);
+          }
+        }
+        var width = 0;
+        var height = 0;
+        var glyphs = font.charsToGlyphs(chars);
+        var defaultVMetrics = font.defaultVMetrics;
+        for (var i = 0; i < glyphs.length; i++) {
+          var glyph = glyphs[i];
+          if (!glyph) { // Previous glyph was a space.
+            width += textState.wordSpacing * textState.textHScale;
+            continue;
+          }
+          var vMetricX = null;
+          var vMetricY = null;
+          var glyphWidth = null;
+          if (font.vertical) {
+            if (glyph.vmetric) {
+              glyphWidth = glyph.vmetric[0];
+              vMetricX = glyph.vmetric[1];
+              vMetricY = glyph.vmetric[2];
+            } else {
+              glyphWidth = glyph.width;
+              vMetricX = glyph.width * 0.5;
+              vMetricY = defaultVMetrics[2];
+            }
+          } else {
+            glyphWidth = glyph.width;
+          }
+
+          var glyphUnicode = glyph.unicode;
+          if (NormalizedUnicodes[glyphUnicode] !== undefined) {
+            glyphUnicode = NormalizedUnicodes[glyphUnicode];
+          }
+          glyphUnicode = reverseIfRtl(glyphUnicode);
+
+          // The following will calculate the x and y of the individual glyphs.
+          // if (font.vertical) {
+          //   tsm[4] -= vMetricX * Math.abs(textState.fontSize) *
+          //             textState.fontMatrix[0];
+          //   tsm[5] -= vMetricY * textState.fontSize *
+          //             textState.fontMatrix[0];
+          // }
+          // var trm = Util.transform(textState.textMatrix, tsm);
+          // var pt = Util.applyTransform([trm[4], trm[5]], textState.ctm);
+          // var x = pt[0];
+          // var y = pt[1];
+
+          var charSpacing = 0;
+          if (textChunk.str.length > 0) {
+            // Apply char spacing only when there are chars.
+            // As a result there is only spacing between glyphs.
+            charSpacing = textState.charSpacing;
+          }
+
+          var tx = 0;
+          var ty = 0;
+          if (!font.vertical) {
+            var w0 = glyphWidth * textState.fontMatrix[0];
+            tx = (w0 * textState.fontSize + charSpacing) *
+                 textState.textHScale;
+            width += tx;
+          } else {
+            var w1 = glyphWidth * textState.fontMatrix[0];
+            ty = w1 * textState.fontSize + charSpacing;
+            height += ty;
+          }
+          textState.translateTextMatrix(tx, ty);
+
+          textChunk.str.push(glyphUnicode);
+        }
+
+        var a = textState.textLineMatrix[0];
+        var b = textState.textLineMatrix[1];
+        var scaleLineX = Math.sqrt(a * a + b * b);
+        a = textState.ctm[0];
+        b = textState.ctm[1];
+        var scaleCtmX = Math.sqrt(a * a + b * b);
+        if (!font.vertical) {
+          textChunk.width += width * scaleCtmX * scaleLineX;
+        } else {
+          textChunk.height += Math.abs(height * scaleCtmX * scaleLineX);
+        }
+        return textChunk;
+      }
+
+      var timeSlotManager = new TimeSlotManager();
+
+      return new Promise(function next(resolve, reject) {
+        task.ensureNotTerminated();
+        timeSlotManager.reset();
+        var stop, operation = {}, args = [];
+        while (!(stop = timeSlotManager.check())) {
+          // The arguments parsed by read() are not used beyond this loop, so
+          // we can reuse the same array on every iteration, thus avoiding
+          // unnecessary allocations.
+          args.length = 0;
+          operation.args = args;
+          if (!(preprocessor.read(operation))) {
+            break;
+          }
+          textState = stateManager.state;
+          var fn = operation.fn;
+          args = operation.args;
+
+          switch (fn | 0) {
+            case OPS.setFont:
+              textState.fontSize = args[1];
+              return handleSetFont(args[0].name).then(function() {
+                next(resolve, reject);
+              }, reject);
+            case OPS.setTextRise:
+              textState.textRise = args[0];
+              break;
+            case OPS.setHScale:
+              textState.textHScale = args[0] / 100;
+              break;
+            case OPS.setLeading:
+              textState.leading = args[0];
+              break;
+            case OPS.moveText:
+              textState.translateTextLineMatrix(args[0], args[1]);
+              textState.textMatrix = textState.textLineMatrix.slice();
+              break;
+            case OPS.setLeadingMoveText:
+              textState.leading = -args[1];
+              textState.translateTextLineMatrix(args[0], args[1]);
+              textState.textMatrix = textState.textLineMatrix.slice();
+              break;
+            case OPS.nextLine:
+              textState.carriageReturn();
+              break;
+            case OPS.setTextMatrix:
+              textState.setTextMatrix(args[0], args[1], args[2], args[3],
+                args[4], args[5]);
+              textState.setTextLineMatrix(args[0], args[1], args[2], args[3],
+                args[4], args[5]);
+              break;
+            case OPS.setCharSpacing:
+              textState.charSpacing = args[0];
+              break;
+            case OPS.setWordSpacing:
+              textState.wordSpacing = args[0];
+              break;
+            case OPS.beginText:
+              textState.textMatrix = IDENTITY_MATRIX.slice();
+              textState.textLineMatrix = IDENTITY_MATRIX.slice();
+              break;
+            case OPS.showSpacedText:
+              var items = args[0];
+              var textChunk = newTextChunk();
+              var offset;
+              for (var j = 0, jj = items.length; j < jj; j++) {
+                if (typeof items[j] === 'string') {
+                  buildTextGeometry(items[j], textChunk);
+                } else {
+                  // PDF Specification 5.3.2 states:
+                  // The number is expressed in thousandths of a unit of text
+                  // space.
+                  // This amount is subtracted from the current horizontal or
+                  // vertical coordinate, depending on the writing mode.
+                  // In the default coordinate system, a positive adjustment
+                  // has the effect of moving the next glyph painted either to
+                  // the left or down by the given amount.
+                  var val = items[j] * textState.fontSize / 1000;
+                  if (textState.font.vertical) {
+                    offset = val * textState.textMatrix[3];
+                    textState.translateTextMatrix(0, offset);
+                    // Value needs to be added to height to paint down.
+                    textChunk.height += offset;
+                  } else {
+                    offset = val * textState.textHScale *
+                                   textState.textMatrix[0];
+                    textState.translateTextMatrix(offset, 0);
+                    // Value needs to be subtracted from width to paint left.
+                    textChunk.width -= offset;
+                  }
+                  if (items[j] < 0 && textState.font.spaceWidth > 0) {
+                    var fakeSpaces = -items[j] / textState.font.spaceWidth;
+                    if (fakeSpaces > MULTI_SPACE_FACTOR) {
+                      fakeSpaces = Math.round(fakeSpaces);
+                      while (fakeSpaces--) {
+                        textChunk.str.push(' ');
+                      }
+                    } else if (fakeSpaces > SPACE_FACTOR) {
+                      textChunk.str.push(' ');
+                    }
+                  }
+                }
+              }
+              bidiTexts.push(runBidi(textChunk));
+              break;
+            case OPS.showText:
+              bidiTexts.push(runBidi(buildTextGeometry(args[0])));
+              break;
+            case OPS.nextLineShowText:
+              textState.carriageReturn();
+              bidiTexts.push(runBidi(buildTextGeometry(args[0])));
+              break;
+            case OPS.nextLineSetSpacingShowText:
+              textState.wordSpacing = args[0];
+              textState.charSpacing = args[1];
+              textState.carriageReturn();
+              bidiTexts.push(runBidi(buildTextGeometry(args[2])));
+              break;
+            case OPS.paintXObject:
+              if (args[0].code) {
+                break;
+              }
+
+              if (!xobjs) {
+                xobjs = (resources.get('XObject') || Dict.empty);
+              }
+
+              var name = args[0].name;
+              if (xobjsCache.key === name) {
+                if (xobjsCache.texts) {
+                  Util.appendToArray(bidiTexts, xobjsCache.texts.items);
+                  Util.extendObj(textContent.styles, xobjsCache.texts.styles);
+                }
+                break;
+              }
+
+              var xobj = xobjs.get(name);
+              if (!xobj) {
+                break;
+              }
+              assert(isStream(xobj), 'XObject should be a stream');
+
+              var type = xobj.dict.get('Subtype');
+              assert(isName(type),
+                'XObject should have a Name subtype');
+
+              if ('Form' !== type.name) {
+                xobjsCache.key = name;
+                xobjsCache.texts = null;
+                break;
+              }
+
+              stateManager.save();
+              var matrix = xobj.dict.get('Matrix');
+              if (isArray(matrix) && matrix.length === 6) {
+                stateManager.transform(matrix);
+              }
+
+              return self.getTextContent(xobj, task,
+                xobj.dict.get('Resources') || resources, stateManager).
+                then(function (formTextContent) {
+                  Util.appendToArray(bidiTexts, formTextContent.items);
+                  Util.extendObj(textContent.styles, formTextContent.styles);
+                  stateManager.restore();
+
+                  xobjsCache.key = name;
+                  xobjsCache.texts = formTextContent;
+
+                  next(resolve, reject);
+                }, reject);
+            case OPS.setGState:
+              var dictName = args[0];
+              var extGState = resources.get('ExtGState');
+
+              if (!isDict(extGState) || !extGState.has(dictName.name)) {
+                break;
+              }
+
+              var gsStateMap = extGState.get(dictName.name);
+              var gsStateFont = null;
+              for (var key in gsStateMap) {
+                if (key === 'Font') {
+                  assert(!gsStateFont);
+                  gsStateFont = gsStateMap[key];
+                }
+              }
+              if (gsStateFont) {
+                textState.fontSize = gsStateFont[1];
+                return handleSetFont(gsStateFont[0]).then(function() {
+                  next(resolve, reject);
+                }, reject);
+              }
+              break;
+          } // switch
+        } // while
+        if (stop) {
+          deferred.then(function () {
+            next(resolve, reject);
+          }, reject);
+          return;
+        }
+        resolve(textContent);
+      });
+    },
+
+    extractDataStructures: function
+      partialEvaluatorExtractDataStructures(dict, baseDict,
+                                            xref, properties) {
+      // 9.10.2
+      var toUnicode = (dict.get('ToUnicode') || baseDict.get('ToUnicode'));
+      if (toUnicode) {
+        properties.toUnicode = this.readToUnicode(toUnicode);
+      }
+      if (properties.composite) {
+        // CIDSystemInfo helps to match CID to glyphs
+        var cidSystemInfo = dict.get('CIDSystemInfo');
+        if (isDict(cidSystemInfo)) {
+          properties.cidSystemInfo = {
+            registry: cidSystemInfo.get('Registry'),
+            ordering: cidSystemInfo.get('Ordering'),
+            supplement: cidSystemInfo.get('Supplement')
+          };
+        }
+
+        var cidToGidMap = dict.get('CIDToGIDMap');
+        if (isStream(cidToGidMap)) {
+          properties.cidToGidMap = this.readCidToGidMap(cidToGidMap);
+        }
+      }
+
+      // Based on 9.6.6 of the spec the encoding can come from multiple places
+      // and depends on the font type. The base encoding and differences are
+      // read here, but the encoding that is actually used is chosen during
+      // glyph mapping in the font.
+      // TODO: Loading the built in encoding in the font would allow the
+      // differences to be merged in here not require us to hold on to it.
+      var differences = [];
+      var baseEncodingName = null;
+      var encoding;
+      if (dict.has('Encoding')) {
+        encoding = dict.get('Encoding');
+        if (isDict(encoding)) {
+          baseEncodingName = encoding.get('BaseEncoding');
+          baseEncodingName = (isName(baseEncodingName) ?
+                              baseEncodingName.name : null);
+          // Load the differences between the base and original
+          if (encoding.has('Differences')) {
+            var diffEncoding = encoding.get('Differences');
+            var index = 0;
+            for (var j = 0, jj = diffEncoding.length; j < jj; j++) {
+              var data = diffEncoding[j];
+              if (isNum(data)) {
+                index = data;
+              } else if (isName(data)) {
+                differences[index++] = data.name;
+              } else if (isRef(data)) {
+                diffEncoding[j--] = xref.fetch(data);
+                continue;
+              } else {
+                error('Invalid entry in \'Differences\' array: ' + data);
+              }
+            }
+          }
+        } else if (isName(encoding)) {
+          baseEncodingName = encoding.name;
+        } else {
+          error('Encoding is not a Name nor a Dict');
+        }
+        // According to table 114 if the encoding is a named encoding it must be
+        // one of these predefined encodings.
+        if ((baseEncodingName !== 'MacRomanEncoding' &&
+             baseEncodingName !== 'MacExpertEncoding' &&
+             baseEncodingName !== 'WinAnsiEncoding')) {
+          baseEncodingName = null;
+        }
+      }
+
+      if (baseEncodingName) {
+        properties.defaultEncoding = Encodings[baseEncodingName].slice();
+      } else {
+        encoding = (properties.type === 'TrueType' ?
+                    Encodings.WinAnsiEncoding : Encodings.StandardEncoding);
+        // The Symbolic attribute can be misused for regular fonts
+        // Heuristic: we have to check if the font is a standard one also
+        if (!!(properties.flags & FontFlags.Symbolic)) {
+          encoding = Encodings.MacRomanEncoding;
+          if (!properties.file) {
+            if (/Symbol/i.test(properties.name)) {
+              encoding = Encodings.SymbolSetEncoding;
+            } else if (/Dingbats/i.test(properties.name)) {
+              encoding = Encodings.ZapfDingbatsEncoding;
+            }
+          }
+        }
+        properties.defaultEncoding = encoding;
+      }
+
+      properties.differences = differences;
+      properties.baseEncodingName = baseEncodingName;
+      properties.dict = dict;
+    },
+
+    readToUnicode: function PartialEvaluator_readToUnicode(toUnicode) {
+      var cmap, cmapObj = toUnicode;
+      if (isName(cmapObj)) {
+        cmap = CMapFactory.create(cmapObj,
+          { url: PDFJS.cMapUrl, packed: PDFJS.cMapPacked }, null);
+        if (cmap instanceof IdentityCMap) {
+          return new IdentityToUnicodeMap(0, 0xFFFF);
+        }
+        return new ToUnicodeMap(cmap.getMap());
+      } else if (isStream(cmapObj)) {
+        cmap = CMapFactory.create(cmapObj,
+          { url: PDFJS.cMapUrl, packed: PDFJS.cMapPacked }, null);
+        if (cmap instanceof IdentityCMap) {
+          return new IdentityToUnicodeMap(0, 0xFFFF);
+        }
+        var map = new Array(cmap.length);
+        // Convert UTF-16BE
+        // NOTE: cmap can be a sparse array, so use forEach instead of for(;;)
+        // to iterate over all keys.
+        cmap.forEach(function(charCode, token) {
+          var str = [];
+          for (var k = 0; k < token.length; k += 2) {
+            var w1 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1);
+            if ((w1 & 0xF800) !== 0xD800) { // w1 < 0xD800 || w1 > 0xDFFF
+              str.push(w1);
+              continue;
+            }
+            k += 2;
+            var w2 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1);
+            str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000);
+          }
+          map[charCode] = String.fromCharCode.apply(String, str);
+        });
+        return new ToUnicodeMap(map);
+      }
+      return null;
+    },
+
+    readCidToGidMap: function PartialEvaluator_readCidToGidMap(cidToGidStream) {
+      // Extract the encoding from the CIDToGIDMap
+      var glyphsData = cidToGidStream.getBytes();
+
+      // Set encoding 0 to later verify the font has an encoding
+      var result = [];
+      for (var j = 0, jj = glyphsData.length; j < jj; j++) {
+        var glyphID = (glyphsData[j++] << 8) | glyphsData[j];
+        if (glyphID === 0) {
+          continue;
+        }
+        var code = j >> 1;
+        result[code] = glyphID;
+      }
+      return result;
+    },
+
+    extractWidths: function PartialEvaluator_extractWidths(dict, xref,
+                                                           descriptor,
+                                                           properties) {
+      var glyphsWidths = [];
+      var defaultWidth = 0;
+      var glyphsVMetrics = [];
+      var defaultVMetrics;
+      var i, ii, j, jj, start, code, widths;
+      if (properties.composite) {
+        defaultWidth = dict.get('DW') || 1000;
+
+        widths = dict.get('W');
+        if (widths) {
+          for (i = 0, ii = widths.length; i < ii; i++) {
+            start = widths[i++];
+            code = xref.fetchIfRef(widths[i]);
+            if (isArray(code)) {
+              for (j = 0, jj = code.length; j < jj; j++) {
+                glyphsWidths[start++] = code[j];
+              }
+            } else {
+              var width = widths[++i];
+              for (j = start; j <= code; j++) {
+                glyphsWidths[j] = width;
+              }
+            }
+          }
+        }
+
+        if (properties.vertical) {
+          var vmetrics = (dict.get('DW2') || [880, -1000]);
+          defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]];
+          vmetrics = dict.get('W2');
+          if (vmetrics) {
+            for (i = 0, ii = vmetrics.length; i < ii; i++) {
+              start = vmetrics[i++];
+              code = xref.fetchIfRef(vmetrics[i]);
+              if (isArray(code)) {
+                for (j = 0, jj = code.length; j < jj; j++) {
+                  glyphsVMetrics[start++] = [code[j++], code[j++], code[j]];
+                }
+              } else {
+                var vmetric = [vmetrics[++i], vmetrics[++i], vmetrics[++i]];
+                for (j = start; j <= code; j++) {
+                  glyphsVMetrics[j] = vmetric;
+                }
+              }
+            }
+          }
+        }
+      } else {
+        var firstChar = properties.firstChar;
+        widths = dict.get('Widths');
+        if (widths) {
+          j = firstChar;
+          for (i = 0, ii = widths.length; i < ii; i++) {
+            glyphsWidths[j++] = widths[i];
+          }
+          defaultWidth = (parseFloat(descriptor.get('MissingWidth')) || 0);
+        } else {
+          // Trying get the BaseFont metrics (see comment above).
+          var baseFontName = dict.get('BaseFont');
+          if (isName(baseFontName)) {
+            var metrics = this.getBaseFontMetrics(baseFontName.name);
+
+            glyphsWidths = this.buildCharCodeToWidth(metrics.widths,
+                                                     properties);
+            defaultWidth = metrics.defaultWidth;
+          }
+        }
+      }
+
+      // Heuristic: detection of monospace font by checking all non-zero widths
+      var isMonospace = true;
+      var firstWidth = defaultWidth;
+      for (var glyph in glyphsWidths) {
+        var glyphWidth = glyphsWidths[glyph];
+        if (!glyphWidth) {
+          continue;
+        }
+        if (!firstWidth) {
+          firstWidth = glyphWidth;
+          continue;
+        }
+        if (firstWidth !== glyphWidth) {
+          isMonospace = false;
+          break;
+        }
+      }
+      if (isMonospace) {
+        properties.flags |= FontFlags.FixedPitch;
+      }
+
+      properties.defaultWidth = defaultWidth;
+      properties.widths = glyphsWidths;
+      properties.defaultVMetrics = defaultVMetrics;
+      properties.vmetrics = glyphsVMetrics;
+    },
+
+    isSerifFont: function PartialEvaluator_isSerifFont(baseFontName) {
+      // Simulating descriptor flags attribute
+      var fontNameWoStyle = baseFontName.split('-')[0];
+      return (fontNameWoStyle in serifFonts) ||
+              (fontNameWoStyle.search(/serif/gi) !== -1);
+    },
+
+    getBaseFontMetrics: function PartialEvaluator_getBaseFontMetrics(name) {
+      var defaultWidth = 0;
+      var widths = [];
+      var monospace = false;
+      var lookupName = (stdFontMap[name] || name);
+
+      if (!(lookupName in Metrics)) {
+        // Use default fonts for looking up font metrics if the passed
+        // font is not a base font
+        if (this.isSerifFont(name)) {
+          lookupName = 'Times-Roman';
+        } else {
+          lookupName = 'Helvetica';
+        }
+      }
+      var glyphWidths = Metrics[lookupName];
+
+      if (isNum(glyphWidths)) {
+        defaultWidth = glyphWidths;
+        monospace = true;
+      } else {
+        widths = glyphWidths;
+      }
+
+      return {
+        defaultWidth: defaultWidth,
+        monospace: monospace,
+        widths: widths
+      };
+    },
+
+    buildCharCodeToWidth:
+        function PartialEvaluator_bulildCharCodeToWidth(widthsByGlyphName,
+                                                        properties) {
+      var widths = Object.create(null);
+      var differences = properties.differences;
+      var encoding = properties.defaultEncoding;
+      for (var charCode = 0; charCode < 256; charCode++) {
+        if (charCode in differences &&
+            widthsByGlyphName[differences[charCode]]) {
+          widths[charCode] = widthsByGlyphName[differences[charCode]];
+          continue;
+        }
+        if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) {
+          widths[charCode] = widthsByGlyphName[encoding[charCode]];
+          continue;
+        }
+      }
+      return widths;
+    },
+
+    preEvaluateFont: function PartialEvaluator_preEvaluateFont(dict, xref) {
+      var baseDict = dict;
+      var type = dict.get('Subtype');
+      assert(isName(type), 'invalid font Subtype');
+
+      var composite = false;
+      var uint8array;
+      if (type.name === 'Type0') {
+        // If font is a composite
+        //  - get the descendant font
+        //  - set the type according to the descendant font
+        //  - get the FontDescriptor from the descendant font
+        var df = dict.get('DescendantFonts');
+        if (!df) {
+          error('Descendant fonts are not specified');
+        }
+        dict = (isArray(df) ? xref.fetchIfRef(df[0]) : df);
+
+        type = dict.get('Subtype');
+        assert(isName(type), 'invalid font Subtype');
+        composite = true;
+      }
+
+      var descriptor = dict.get('FontDescriptor');
+      if (descriptor) {
+        var hash = new MurmurHash3_64();
+        var encoding = baseDict.getRaw('Encoding');
+        if (isName(encoding)) {
+          hash.update(encoding.name);
+        } else if (isRef(encoding)) {
+          hash.update(encoding.num + '_' + encoding.gen);
+        } else if (isDict(encoding)) {
+          var keys = encoding.getKeys();
+          for (var i = 0, ii = keys.length; i < ii; i++) {
+            var entry = encoding.getRaw(keys[i]);
+            if (isName(entry)) {
+              hash.update(entry.name);
+            } else if (isRef(entry)) {
+              hash.update(entry.num + '_' + entry.gen);
+            } else if (isArray(entry)) { // 'Differences' entry.
+              // Ideally we should check the contents of the array, but to avoid
+              // parsing it here and then again in |extractDataStructures|,
+              // we only use the array length for now (fixes bug1157493.pdf).
+              hash.update(entry.length.toString());
+            }
+          }
+        }
+
+        var toUnicode = dict.get('ToUnicode') || baseDict.get('ToUnicode');
+        if (isStream(toUnicode)) {
+          var stream = toUnicode.str || toUnicode;
+          uint8array = stream.buffer ?
+            new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) :
+            new Uint8Array(stream.bytes.buffer,
+                           stream.start, stream.end - stream.start);
+          hash.update(uint8array);
+
+        } else if (isName(toUnicode)) {
+          hash.update(toUnicode.name);
+        }
+
+        var widths = dict.get('Widths') || baseDict.get('Widths');
+        if (widths) {
+          uint8array = new Uint8Array(new Uint32Array(widths).buffer);
+          hash.update(uint8array);
+        }
+      }
+
+      return {
+        descriptor: descriptor,
+        dict: dict,
+        baseDict: baseDict,
+        composite: composite,
+        type: type.name,
+        hash: hash ? hash.hexdigest() : ''
+      };
+    },
+
+    translateFont: function PartialEvaluator_translateFont(preEvaluatedFont,
+                                                           xref) {
+      var baseDict = preEvaluatedFont.baseDict;
+      var dict = preEvaluatedFont.dict;
+      var composite = preEvaluatedFont.composite;
+      var descriptor = preEvaluatedFont.descriptor;
+      var type = preEvaluatedFont.type;
+      var maxCharIndex = (composite ? 0xFFFF : 0xFF);
+      var properties;
+
+      if (!descriptor) {
+        if (type === 'Type3') {
+          // FontDescriptor is only required for Type3 fonts when the document
+          // is a tagged pdf. Create a barbebones one to get by.
+          descriptor = new Dict(null);
+          descriptor.set('FontName', Name.get(type));
+          descriptor.set('FontBBox', dict.get('FontBBox'));
+        } else {
+          // Before PDF 1.5 if the font was one of the base 14 fonts, having a
+          // FontDescriptor was not required.
+          // This case is here for compatibility.
+          var baseFontName = dict.get('BaseFont');
+          if (!isName(baseFontName)) {
+            error('Base font is not specified');
+          }
+
+          // Using base font name as a font name.
+          baseFontName = baseFontName.name.replace(/[,_]/g, '-');
+          var metrics = this.getBaseFontMetrics(baseFontName);
+
+          // Simulating descriptor flags attribute
+          var fontNameWoStyle = baseFontName.split('-')[0];
+          var flags =
+            (this.isSerifFont(fontNameWoStyle) ? FontFlags.Serif : 0) |
+            (metrics.monospace ? FontFlags.FixedPitch : 0) |
+            (symbolsFonts[fontNameWoStyle] ? FontFlags.Symbolic :
+                                             FontFlags.Nonsymbolic);
+
+          properties = {
+            type: type,
+            name: baseFontName,
+            widths: metrics.widths,
+            defaultWidth: metrics.defaultWidth,
+            flags: flags,
+            firstChar: 0,
+            lastChar: maxCharIndex
+          };
+          this.extractDataStructures(dict, dict, xref, properties);
+          properties.widths = this.buildCharCodeToWidth(metrics.widths,
+                                                        properties);
+          return new Font(baseFontName, null, properties);
+        }
+      }
+
+      // According to the spec if 'FontDescriptor' is declared, 'FirstChar',
+      // 'LastChar' and 'Widths' should exist too, but some PDF encoders seem
+      // to ignore this rule when a variant of a standart font is used.
+      // TODO Fill the width array depending on which of the base font this is
+      // a variant.
+      var firstChar = (dict.get('FirstChar') || 0);
+      var lastChar = (dict.get('LastChar') || maxCharIndex);
+
+      var fontName = descriptor.get('FontName');
+      var baseFont = dict.get('BaseFont');
+      // Some bad PDFs have a string as the font name.
+      if (isString(fontName)) {
+        fontName = Name.get(fontName);
+      }
+      if (isString(baseFont)) {
+        baseFont = Name.get(baseFont);
+      }
+
+      if (type !== 'Type3') {
+        var fontNameStr = fontName && fontName.name;
+        var baseFontStr = baseFont && baseFont.name;
+        if (fontNameStr !== baseFontStr) {
+          info('The FontDescriptor\'s FontName is "' + fontNameStr +
+               '" but should be the same as the Font\'s BaseFont "' +
+               baseFontStr + '"');
+          // Workaround for cases where e.g. fontNameStr = 'Arial' and
+          // baseFontStr = 'Arial,Bold' (needed when no font file is embedded).
+          if (fontNameStr && baseFontStr &&
+              baseFontStr.indexOf(fontNameStr) === 0) {
+            fontName = baseFont;
+          }
+        }
+      }
+      fontName = (fontName || baseFont);
+
+      assert(isName(fontName), 'invalid font name');
+
+      var fontFile = descriptor.get('FontFile', 'FontFile2', 'FontFile3');
+      if (fontFile) {
+        if (fontFile.dict) {
+          var subtype = fontFile.dict.get('Subtype');
+          if (subtype) {
+            subtype = subtype.name;
+          }
+          var length1 = fontFile.dict.get('Length1');
+          var length2 = fontFile.dict.get('Length2');
+        }
+      }
+
+      properties = {
+        type: type,
+        name: fontName.name,
+        subtype: subtype,
+        file: fontFile,
+        length1: length1,
+        length2: length2,
+        loadedName: baseDict.loadedName,
+        composite: composite,
+        wideChars: composite,
+        fixedPitch: false,
+        fontMatrix: (dict.get('FontMatrix') || FONT_IDENTITY_MATRIX),
+        firstChar: firstChar || 0,
+        lastChar: (lastChar || maxCharIndex),
+        bbox: descriptor.get('FontBBox'),
+        ascent: descriptor.get('Ascent'),
+        descent: descriptor.get('Descent'),
+        xHeight: descriptor.get('XHeight'),
+        capHeight: descriptor.get('CapHeight'),
+        flags: descriptor.get('Flags'),
+        italicAngle: descriptor.get('ItalicAngle'),
+        coded: false
+      };
+
+      if (composite) {
+        var cidEncoding = baseDict.get('Encoding');
+        if (isName(cidEncoding)) {
+          properties.cidEncoding = cidEncoding.name;
+        }
+        properties.cMap = CMapFactory.create(cidEncoding,
+          { url: PDFJS.cMapUrl, packed: PDFJS.cMapPacked }, null);
+        properties.vertical = properties.cMap.vertical;
+      }
+      this.extractDataStructures(dict, baseDict, xref, properties);
+      this.extractWidths(dict, xref, descriptor, properties);
+
+      if (type === 'Type3') {
+        properties.isType3Font = true;
+      }
+
+      return new Font(fontName.name, fontFile, properties);
+    }
+  };
+
+  return PartialEvaluator;
+})();
+
+var TranslatedFont = (function TranslatedFontClosure() {
+  function TranslatedFont(loadedName, font, dict) {
+    this.loadedName = loadedName;
+    this.font = font;
+    this.dict = dict;
+    this.type3Loaded = null;
+    this.sent = false;
+  }
+  TranslatedFont.prototype = {
+    send: function (handler) {
+      if (this.sent) {
+        return;
+      }
+      var fontData = this.font.exportData();
+      handler.send('commonobj', [
+        this.loadedName,
+        'Font',
+        fontData
+      ]);
+      this.sent = true;
+    },
+    loadType3Data: function (evaluator, resources, parentOperatorList, task) {
+      assert(this.font.isType3Font);
+
+      if (this.type3Loaded) {
+        return this.type3Loaded;
+      }
+
+      var translatedFont = this.font;
+      var loadCharProcsPromise = Promise.resolve();
+      var charProcs = this.dict.get('CharProcs').getAll();
+      var fontResources = this.dict.get('Resources') || resources;
+      var charProcKeys = Object.keys(charProcs);
+      var charProcOperatorList = {};
+      for (var i = 0, n = charProcKeys.length; i < n; ++i) {
+        loadCharProcsPromise = loadCharProcsPromise.then(function (key) {
+          var glyphStream = charProcs[key];
+          var operatorList = new OperatorList();
+          return evaluator.getOperatorList(glyphStream, task, fontResources,
+                                           operatorList).then(function () {
+            charProcOperatorList[key] = operatorList.getIR();
+
+            // Add the dependencies to the parent operator list so they are
+            // resolved before sub operator list is executed synchronously.
+            parentOperatorList.addDependencies(operatorList.dependencies);
+          }, function (reason) {
+            warn('Type3 font resource \"' + key + '\" is not available');
+            var operatorList = new OperatorList();
+            charProcOperatorList[key] = operatorList.getIR();
+          });
+        }.bind(this, charProcKeys[i]));
+      }
+      this.type3Loaded = loadCharProcsPromise.then(function () {
+        translatedFont.charProcOperatorList = charProcOperatorList;
+      });
+      return this.type3Loaded;
+    }
+  };
+  return TranslatedFont;
+})();
+
+var OperatorList = (function OperatorListClosure() {
+  var CHUNK_SIZE = 1000;
+  var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5; // close to chunk size
+
+  function getTransfers(queue) {
+    var transfers = [];
+    var fnArray = queue.fnArray, argsArray = queue.argsArray;
+    for (var i = 0, ii = queue.length; i < ii; i++) {
+      switch (fnArray[i]) {
+        case OPS.paintInlineImageXObject:
+        case OPS.paintInlineImageXObjectGroup:
+        case OPS.paintImageMaskXObject:
+          var arg = argsArray[i][0]; // first param in imgData
+          if (!arg.cached) {
+            transfers.push(arg.data.buffer);
+          }
+          break;
+      }
+    }
+    return transfers;
+  }
+
+  function OperatorList(intent, messageHandler, pageIndex) {
+    this.messageHandler = messageHandler;
+    this.fnArray = [];
+    this.argsArray = [];
+    this.dependencies = {};
+    this.pageIndex = pageIndex;
+    this.intent = intent;
+  }
+
+  OperatorList.prototype = {
+    get length() {
+      return this.argsArray.length;
+    },
+
+    addOp: function(fn, args) {
+      this.fnArray.push(fn);
+      this.argsArray.push(args);
+      if (this.messageHandler) {
+        if (this.fnArray.length >= CHUNK_SIZE) {
+          this.flush();
+        } else if (this.fnArray.length >= CHUNK_SIZE_ABOUT &&
+                   (fn === OPS.restore || fn === OPS.endText)) {
+          // heuristic to flush on boundary of restore or endText
+          this.flush();
+        }
+      }
+    },
+
+    addDependency: function(dependency) {
+      if (dependency in this.dependencies) {
+        return;
+      }
+      this.dependencies[dependency] = true;
+      this.addOp(OPS.dependency, [dependency]);
+    },
+
+    addDependencies: function(dependencies) {
+      for (var key in dependencies) {
+        this.addDependency(key);
+      }
+    },
+
+    addOpList: function(opList) {
+      Util.extendObj(this.dependencies, opList.dependencies);
+      for (var i = 0, ii = opList.length; i < ii; i++) {
+        this.addOp(opList.fnArray[i], opList.argsArray[i]);
+      }
+    },
+
+    getIR: function() {
+      return {
+        fnArray: this.fnArray,
+        argsArray: this.argsArray,
+        length: this.length
+      };
+    },
+
+    flush: function(lastChunk) {
+      if (this.intent !== 'oplist') {
+        new QueueOptimizer().optimize(this);
+      }
+      var transfers = getTransfers(this);
+      this.messageHandler.send('RenderPageChunk', {
+        operatorList: {
+          fnArray: this.fnArray,
+          argsArray: this.argsArray,
+          lastChunk: lastChunk,
+          length: this.length
+        },
+        pageIndex: this.pageIndex,
+        intent: this.intent
+      }, transfers);
+      this.dependencies = {};
+      this.fnArray.length = 0;
+      this.argsArray.length = 0;
+    }
+  };
+
+  return OperatorList;
+})();
+
+var StateManager = (function StateManagerClosure() {
+  function StateManager(initialState) {
+    this.state = initialState;
+    this.stateStack = [];
+  }
+  StateManager.prototype = {
+    save: function () {
+      var old = this.state;
+      this.stateStack.push(this.state);
+      this.state = old.clone();
+    },
+    restore: function () {
+      var prev = this.stateStack.pop();
+      if (prev) {
+        this.state = prev;
+      }
+    },
+    transform: function (args) {
+      this.state.ctm = Util.transform(this.state.ctm, args);
+    }
+  };
+  return StateManager;
+})();
+
+var TextState = (function TextStateClosure() {
+  function TextState() {
+    this.ctm = new Float32Array(IDENTITY_MATRIX);
+    this.fontSize = 0;
+    this.font = null;
+    this.fontMatrix = FONT_IDENTITY_MATRIX;
+    this.textMatrix = IDENTITY_MATRIX.slice();
+    this.textLineMatrix = IDENTITY_MATRIX.slice();
+    this.charSpacing = 0;
+    this.wordSpacing = 0;
+    this.leading = 0;
+    this.textHScale = 1;
+    this.textRise = 0;
+  }
+
+  TextState.prototype = {
+    setTextMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) {
+      var m = this.textMatrix;
+      m[0] = a; m[1] = b; m[2] = c; m[3] = d; m[4] = e; m[5] = f;
+    },
+    setTextLineMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) {
+      var m = this.textLineMatrix;
+      m[0] = a; m[1] = b; m[2] = c; m[3] = d; m[4] = e; m[5] = f;
+    },
+    translateTextMatrix: function TextState_translateTextMatrix(x, y) {
+      var m = this.textMatrix;
+      m[4] = m[0] * x + m[2] * y + m[4];
+      m[5] = m[1] * x + m[3] * y + m[5];
+    },
+    translateTextLineMatrix: function TextState_translateTextMatrix(x, y) {
+      var m = this.textLineMatrix;
+      m[4] = m[0] * x + m[2] * y + m[4];
+      m[5] = m[1] * x + m[3] * y + m[5];
+    },
+    calcRenderMatrix: function TextState_calcRendeMatrix(ctm) {
+      // 9.4.4 Text Space Details
+      var tsm = [this.fontSize * this.textHScale, 0,
+                0, this.fontSize,
+                0, this.textRise];
+      return Util.transform(ctm, Util.transform(this.textMatrix, tsm));
+    },
+    carriageReturn: function TextState_carriageReturn() {
+      this.translateTextLineMatrix(0, -this.leading);
+      this.textMatrix = this.textLineMatrix.slice();
+    },
+    clone: function TextState_clone() {
+      var clone = Object.create(this);
+      clone.textMatrix = this.textMatrix.slice();
+      clone.textLineMatrix = this.textLineMatrix.slice();
+      clone.fontMatrix = this.fontMatrix.slice();
+      return clone;
+    }
+  };
+  return TextState;
+})();
+
+var EvalState = (function EvalStateClosure() {
+  function EvalState() {
+    this.ctm = new Float32Array(IDENTITY_MATRIX);
+    this.font = null;
+    this.textRenderingMode = TextRenderingMode.FILL;
+    this.fillColorSpace = ColorSpace.singletons.gray;
+    this.strokeColorSpace = ColorSpace.singletons.gray;
+  }
+  EvalState.prototype = {
+    clone: function CanvasExtraState_clone() {
+      return Object.create(this);
+    },
+  };
+  return EvalState;
+})();
+
+var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
+  // Specifies properties for each command
+  //
+  // If variableArgs === true: [0, `numArgs`] expected
+  // If variableArgs === false: exactly `numArgs` expected
+  var OP_MAP = {
+    // Graphic state
+    w: { id: OPS.setLineWidth, numArgs: 1, variableArgs: false },
+    J: { id: OPS.setLineCap, numArgs: 1, variableArgs: false },
+    j: { id: OPS.setLineJoin, numArgs: 1, variableArgs: false },
+    M: { id: OPS.setMiterLimit, numArgs: 1, variableArgs: false },
+    d: { id: OPS.setDash, numArgs: 2, variableArgs: false },
+    ri: { id: OPS.setRenderingIntent, numArgs: 1, variableArgs: false },
+    i: { id: OPS.setFlatness, numArgs: 1, variableArgs: false },
+    gs: { id: OPS.setGState, numArgs: 1, variableArgs: false },
+    q: { id: OPS.save, numArgs: 0, variableArgs: false },
+    Q: { id: OPS.restore, numArgs: 0, variableArgs: false },
+    cm: { id: OPS.transform, numArgs: 6, variableArgs: false },
+
+    // Path
+    m: { id: OPS.moveTo, numArgs: 2, variableArgs: false },
+    l: { id: OPS.lineTo, numArgs: 2, variableArgs: false },
+    c: { id: OPS.curveTo, numArgs: 6, variableArgs: false },
+    v: { id: OPS.curveTo2, numArgs: 4, variableArgs: false },
+    y: { id: OPS.curveTo3, numArgs: 4, variableArgs: false },
+    h: { id: OPS.closePath, numArgs: 0, variableArgs: false },
+    re: { id: OPS.rectangle, numArgs: 4, variableArgs: false },
+    S: { id: OPS.stroke, numArgs: 0, variableArgs: false },
+    s: { id: OPS.closeStroke, numArgs: 0, variableArgs: false },
+    f: { id: OPS.fill, numArgs: 0, variableArgs: false },
+    F: { id: OPS.fill, numArgs: 0, variableArgs: false },
+    'f*': { id: OPS.eoFill, numArgs: 0, variableArgs: false },
+    B: { id: OPS.fillStroke, numArgs: 0, variableArgs: false },
+    'B*': { id: OPS.eoFillStroke, numArgs: 0, variableArgs: false },
+    b: { id: OPS.closeFillStroke, numArgs: 0, variableArgs: false },
+    'b*': { id: OPS.closeEOFillStroke, numArgs: 0, variableArgs: false },
+    n: { id: OPS.endPath, numArgs: 0, variableArgs: false },
+
+    // Clipping
+    W: { id: OPS.clip, numArgs: 0, variableArgs: false },
+    'W*': { id: OPS.eoClip, numArgs: 0, variableArgs: false },
+
+    // Text
+    BT: { id: OPS.beginText, numArgs: 0, variableArgs: false },
+    ET: { id: OPS.endText, numArgs: 0, variableArgs: false },
+    Tc: { id: OPS.setCharSpacing, numArgs: 1, variableArgs: false },
+    Tw: { id: OPS.setWordSpacing, numArgs: 1, variableArgs: false },
+    Tz: { id: OPS.setHScale, numArgs: 1, variableArgs: false },
+    TL: { id: OPS.setLeading, numArgs: 1, variableArgs: false },
+    Tf: { id: OPS.setFont, numArgs: 2, variableArgs: false },
+    Tr: { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false },
+    Ts: { id: OPS.setTextRise, numArgs: 1, variableArgs: false },
+    Td: { id: OPS.moveText, numArgs: 2, variableArgs: false },
+    TD: { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false },
+    Tm: { id: OPS.setTextMatrix, numArgs: 6, variableArgs: false },
+    'T*': { id: OPS.nextLine, numArgs: 0, variableArgs: false },
+    Tj: { id: OPS.showText, numArgs: 1, variableArgs: false },
+    TJ: { id: OPS.showSpacedText, numArgs: 1, variableArgs: false },
+    '\'': { id: OPS.nextLineShowText, numArgs: 1, variableArgs: false },
+    '"': { id: OPS.nextLineSetSpacingShowText, numArgs: 3,
+           variableArgs: false },
+
+    // Type3 fonts
+    d0: { id: OPS.setCharWidth, numArgs: 2, variableArgs: false },
+    d1: { id: OPS.setCharWidthAndBounds, numArgs: 6, variableArgs: false },
+
+    // Color
+    CS: { id: OPS.setStrokeColorSpace, numArgs: 1, variableArgs: false },
+    cs: { id: OPS.setFillColorSpace, numArgs: 1, variableArgs: false },
+    SC: { id: OPS.setStrokeColor, numArgs: 4, variableArgs: true },
+    SCN: { id: OPS.setStrokeColorN, numArgs: 33, variableArgs: true },
+    sc: { id: OPS.setFillColor, numArgs: 4, variableArgs: true },
+    scn: { id: OPS.setFillColorN, numArgs: 33, variableArgs: true },
+    G: { id: OPS.setStrokeGray, numArgs: 1, variableArgs: false },
+    g: { id: OPS.setFillGray, numArgs: 1, variableArgs: false },
+    RG: { id: OPS.setStrokeRGBColor, numArgs: 3, variableArgs: false },
+    rg: { id: OPS.setFillRGBColor, numArgs: 3, variableArgs: false },
+    K: { id: OPS.setStrokeCMYKColor, numArgs: 4, variableArgs: false },
+    k: { id: OPS.setFillCMYKColor, numArgs: 4, variableArgs: false },
+
+    // Shading
+    sh: { id: OPS.shadingFill, numArgs: 1, variableArgs: false },
+
+    // Images
+    BI: { id: OPS.beginInlineImage, numArgs: 0, variableArgs: false },
+    ID: { id: OPS.beginImageData, numArgs: 0, variableArgs: false },
+    EI: { id: OPS.endInlineImage, numArgs: 1, variableArgs: false },
+
+    // XObjects
+    Do: { id: OPS.paintXObject, numArgs: 1, variableArgs: false },
+    MP: { id: OPS.markPoint, numArgs: 1, variableArgs: false },
+    DP: { id: OPS.markPointProps, numArgs: 2, variableArgs: false },
+    BMC: { id: OPS.beginMarkedContent, numArgs: 1, variableArgs: false },
+    BDC: { id: OPS.beginMarkedContentProps, numArgs: 2,
+           variableArgs: false },
+    EMC: { id: OPS.endMarkedContent, numArgs: 0, variableArgs: false },
+
+    // Compatibility
+    BX: { id: OPS.beginCompat, numArgs: 0, variableArgs: false },
+    EX: { id: OPS.endCompat, numArgs: 0, variableArgs: false },
+
+    // (reserved partial commands for the lexer)
+    BM: null,
+    BD: null,
+    'true': null,
+    fa: null,
+    fal: null,
+    fals: null,
+    'false': null,
+    nu: null,
+    nul: null,
+    'null': null
+  };
+
+  function EvaluatorPreprocessor(stream, xref, stateManager) {
+    // TODO(mduan): pass array of knownCommands rather than OP_MAP
+    // dictionary
+    this.parser = new Parser(new Lexer(stream, OP_MAP), false, xref);
+    this.stateManager = stateManager;
+    this.nonProcessedArgs = [];
+  }
+
+  EvaluatorPreprocessor.prototype = {
+    get savedStatesDepth() {
+      return this.stateManager.stateStack.length;
+    },
+
+    // |operation| is an object with two fields:
+    //
+    // - |fn| is an out param.
+    //
+    // - |args| is an inout param. On entry, it should have one of two values.
+    //
+    //   - An empty array. This indicates that the caller is providing the
+    //     array in which the args will be stored in. The caller should use
+    //     this value if it can reuse a single array for each call to read().
+    //
+    //   - |null|. This indicates that the caller needs this function to create
+    //     the array in which any args are stored in. If there are zero args,
+    //     this function will leave |operation.args| as |null| (thus avoiding
+    //     allocations that would occur if we used an empty array to represent
+    //     zero arguments). Otherwise, it will replace |null| with a new array
+    //     containing the arguments. The caller should use this value if it
+    //     cannot reuse an array for each call to read().
+    //
+    // These two modes are present because this function is very hot and so
+    // avoiding allocations where possible is worthwhile.
+    //
+    read: function EvaluatorPreprocessor_read(operation) {
+      var args = operation.args;
+      while (true) {
+        var obj = this.parser.getObj();
+        if (isCmd(obj)) {
+          var cmd = obj.cmd;
+          // Check that the command is valid
+          var opSpec = OP_MAP[cmd];
+          if (!opSpec) {
+            warn('Unknown command "' + cmd + '"');
+            continue;
+          }
+
+          var fn = opSpec.id;
+          var numArgs = opSpec.numArgs;
+          var argsLength = args !== null ? args.length : 0;
+
+          if (!opSpec.variableArgs) {
+            // Postscript commands can be nested, e.g. /F2 /GS2 gs 5.711 Tf
+            if (argsLength !== numArgs) {
+              var nonProcessedArgs = this.nonProcessedArgs;
+              while (argsLength > numArgs) {
+                nonProcessedArgs.push(args.shift());
+                argsLength--;
+              }
+              while (argsLength < numArgs && nonProcessedArgs.length !== 0) {
+                if (!args) {
+                  args = [];
+                }
+                args.unshift(nonProcessedArgs.pop());
+                argsLength++;
+              }
+            }
+
+            if (argsLength < numArgs) {
+              // If we receive too few args, it's not possible to possible
+              // to execute the command, so skip the command
+              info('Command ' + fn + ': because expected ' +
+                   numArgs + ' args, but received ' + argsLength +
+                   ' args; skipping');
+              args = null;
+              continue;
+            }
+          } else if (argsLength > numArgs) {
+            info('Command ' + fn + ': expected [0,' + numArgs +
+                 '] args, but received ' + argsLength + ' args');
+          }
+
+          // TODO figure out how to type-check vararg functions
+          this.preprocessCommand(fn, args);
+
+          operation.fn = fn;
+          operation.args = args;
+          return true;
+        } else {
+          if (isEOF(obj)) {
+            return false; // no more commands
+          }
+          // argument
+          if (obj !== null) {
+            if (!args) {
+              args = [];
+            }
+            args.push((obj instanceof Dict ? obj.getAll() : obj));
+            assert(args.length <= 33, 'Too many arguments');
+          }
+        }
+      }
+    },
+
+    preprocessCommand:
+        function EvaluatorPreprocessor_preprocessCommand(fn, args) {
+      switch (fn | 0) {
+        case OPS.save:
+          this.stateManager.save();
+          break;
+        case OPS.restore:
+          this.stateManager.restore();
+          break;
+        case OPS.transform:
+          this.stateManager.transform(args);
+          break;
+      }
+    }
+  };
+  return EvaluatorPreprocessor;
+})();
+
+var QueueOptimizer = (function QueueOptimizerClosure() {
+  function addState(parentState, pattern, fn) {
+    var state = parentState;
+    for (var i = 0, ii = pattern.length - 1; i < ii; i++) {
+      var item = pattern[i];
+      state = (state[item] || (state[item] = []));
+    }
+    state[pattern[pattern.length - 1]] = fn;
+  }
+
+  function handlePaintSolidColorImageMask(iFirstSave, count, fnArray,
+                                          argsArray) {
+    // Handles special case of mainly LaTeX documents which use image masks to
+    // draw lines with the current fill style.
+    // 'count' groups of (save, transform, paintImageMaskXObject, restore)+
+    // have been found at iFirstSave.
+    var iFirstPIMXO = iFirstSave + 2;
+    for (var i = 0; i < count; i++) {
+      var arg = argsArray[iFirstPIMXO + 4 * i];
+      var imageMask = arg.length === 1 && arg[0];
+      if (imageMask && imageMask.width === 1 && imageMask.height === 1 &&
+          (!imageMask.data.length ||
+           (imageMask.data.length === 1 && imageMask.data[0] === 0))) {
+        fnArray[iFirstPIMXO + 4 * i] = OPS.paintSolidColorImageMask;
+        continue;
+      }
+      break;
+    }
+    return count - i;
+  }
+
+  var InitialState = [];
+
+  // This replaces (save, transform, paintInlineImageXObject, restore)+
+  // sequences with one |paintInlineImageXObjectGroup| operation.
+  addState(InitialState,
+    [OPS.save, OPS.transform, OPS.paintInlineImageXObject, OPS.restore],
+    function foundInlineImageGroup(context) {
+      var MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10;
+      var MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200;
+      var MAX_WIDTH = 1000;
+      var IMAGE_PADDING = 1;
+
+      var fnArray = context.fnArray, argsArray = context.argsArray;
+      var curr = context.iCurr;
+      var iFirstSave = curr - 3;
+      var iFirstTransform = curr - 2;
+      var iFirstPIIXO = curr - 1;
+
+      // Look for the quartets.
+      var i = iFirstSave + 4;
+      var ii = fnArray.length;
+      while (i + 3 < ii) {
+        if (fnArray[i] !== OPS.save ||
+            fnArray[i + 1] !== OPS.transform ||
+            fnArray[i + 2] !== OPS.paintInlineImageXObject ||
+            fnArray[i + 3] !== OPS.restore) {
+          break;    // ops don't match
+        }
+        i += 4;
+      }
+
+      // At this point, i is the index of the first op past the last valid
+      // quartet.
+      var count = Math.min((i - iFirstSave) / 4,
+                           MAX_IMAGES_IN_INLINE_IMAGES_BLOCK);
+      if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) {
+        return i;
+      }
+
+      // assuming that heights of those image is too small (~1 pixel)
+      // packing as much as possible by lines
+      var maxX = 0;
+      var map = [], maxLineHeight = 0;
+      var currentX = IMAGE_PADDING, currentY = IMAGE_PADDING;
+      var q;
+      for (q = 0; q < count; q++) {
+        var transform = argsArray[iFirstTransform + (q << 2)];
+        var img = argsArray[iFirstPIIXO + (q << 2)][0];
+        if (currentX + img.width > MAX_WIDTH) {
+          // starting new line
+          maxX = Math.max(maxX, currentX);
+          currentY += maxLineHeight + 2 * IMAGE_PADDING;
+          currentX = 0;
+          maxLineHeight = 0;
+        }
+        map.push({
+          transform: transform,
+          x: currentX, y: currentY,
+          w: img.width, h: img.height
+        });
+        currentX += img.width + 2 * IMAGE_PADDING;
+        maxLineHeight = Math.max(maxLineHeight, img.height);
+      }
+      var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;
+      var imgHeight = currentY + maxLineHeight + IMAGE_PADDING;
+      var imgData = new Uint8Array(imgWidth * imgHeight * 4);
+      var imgRowSize = imgWidth << 2;
+      for (q = 0; q < count; q++) {
+        var data = argsArray[iFirstPIIXO + (q << 2)][0].data;
+        // Copy image by lines and extends pixels into padding.
+        var rowSize = map[q].w << 2;
+        var dataOffset = 0;
+        var offset = (map[q].x + map[q].y * imgWidth) << 2;
+        imgData.set(data.subarray(0, rowSize), offset - imgRowSize);
+        for (var k = 0, kk = map[q].h; k < kk; k++) {
+          imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset);
+          dataOffset += rowSize;
+          offset += imgRowSize;
+        }
+        imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset);
+        while (offset >= 0) {
+          data[offset - 4] = data[offset];
+          data[offset - 3] = data[offset + 1];
+          data[offset - 2] = data[offset + 2];
+          data[offset - 1] = data[offset + 3];
+          data[offset + rowSize] = data[offset + rowSize - 4];
+          data[offset + rowSize + 1] = data[offset + rowSize - 3];
+          data[offset + rowSize + 2] = data[offset + rowSize - 2];
+          data[offset + rowSize + 3] = data[offset + rowSize - 1];
+          offset -= imgRowSize;
+        }
+      }
+
+      // Replace queue items.
+      fnArray.splice(iFirstSave, count * 4, OPS.paintInlineImageXObjectGroup);
+      argsArray.splice(iFirstSave, count * 4,
+        [{ width: imgWidth, height: imgHeight, kind: ImageKind.RGBA_32BPP,
+           data: imgData }, map]);
+
+      return iFirstSave + 1;
+    });
+
+  // This replaces (save, transform, paintImageMaskXObject, restore)+
+  // sequences with one |paintImageMaskXObjectGroup| or one
+  // |paintImageMaskXObjectRepeat| operation.
+  addState(InitialState,
+    [OPS.save, OPS.transform, OPS.paintImageMaskXObject, OPS.restore],
+    function foundImageMaskGroup(context) {
+      var MIN_IMAGES_IN_MASKS_BLOCK = 10;
+      var MAX_IMAGES_IN_MASKS_BLOCK = 100;
+      var MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000;
+
+      var fnArray = context.fnArray, argsArray = context.argsArray;
+      var curr = context.iCurr;
+      var iFirstSave = curr - 3;
+      var iFirstTransform = curr - 2;
+      var iFirstPIMXO = curr - 1;
+
+      // Look for the quartets.
+      var i = iFirstSave + 4;
+      var ii = fnArray.length;
+      while (i + 3 < ii) {
+        if (fnArray[i] !== OPS.save ||
+            fnArray[i + 1] !== OPS.transform ||
+            fnArray[i + 2] !== OPS.paintImageMaskXObject ||
+            fnArray[i + 3] !== OPS.restore) {
+          break;    // ops don't match
+        }
+        i += 4;
+      }
+
+      // At this point, i is the index of the first op past the last valid
+      // quartet.
+      var count = (i - iFirstSave) / 4;
+      count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray,
+                                             argsArray);
+      if (count < MIN_IMAGES_IN_MASKS_BLOCK) {
+        return i;
+      }
+
+      var q;
+      var isSameImage = false;
+      var iTransform, transformArgs;
+      var firstPIMXOArg0 = argsArray[iFirstPIMXO][0];
+      if (argsArray[iFirstTransform][1] === 0 &&
+          argsArray[iFirstTransform][2] === 0) {
+        isSameImage = true;
+        var firstTransformArg0 = argsArray[iFirstTransform][0];
+        var firstTransformArg3 = argsArray[iFirstTransform][3];
+        iTransform = iFirstTransform + 4;
+        var iPIMXO = iFirstPIMXO + 4;
+        for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {
+          transformArgs = argsArray[iTransform];
+          if (argsArray[iPIMXO][0] !== firstPIMXOArg0 ||
+              transformArgs[0] !== firstTransformArg0 ||
+              transformArgs[1] !== 0 ||
+              transformArgs[2] !== 0 ||
+              transformArgs[3] !== firstTransformArg3) {
+            if (q < MIN_IMAGES_IN_MASKS_BLOCK) {
+              isSameImage = false;
+            } else {
+              count = q;
+            }
+            break; // different image or transform
+          }
+        }
+      }
+
+      if (isSameImage) {
+        count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK);
+        var positions = new Float32Array(count * 2);
+        iTransform = iFirstTransform;
+        for (q = 0; q < count; q++, iTransform += 4) {
+          transformArgs = argsArray[iTransform];
+          positions[(q << 1)] = transformArgs[4];
+          positions[(q << 1) + 1] = transformArgs[5];
+        }
+
+        // Replace queue items.
+        fnArray.splice(iFirstSave, count * 4, OPS.paintImageMaskXObjectRepeat);
+        argsArray.splice(iFirstSave, count * 4,
+          [firstPIMXOArg0, firstTransformArg0, firstTransformArg3, positions]);
+      } else {
+        count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);
+        var images = [];
+        for (q = 0; q < count; q++) {
+          transformArgs = argsArray[iFirstTransform + (q << 2)];
+          var maskParams = argsArray[iFirstPIMXO + (q << 2)][0];
+          images.push({ data: maskParams.data, width: maskParams.width,
+                        height: maskParams.height,
+                        transform: transformArgs });
+        }
+
+        // Replace queue items.
+        fnArray.splice(iFirstSave, count * 4, OPS.paintImageMaskXObjectGroup);
+        argsArray.splice(iFirstSave, count * 4, [images]);
+      }
+
+      return iFirstSave + 1;
+    });
+
+  // This replaces (save, transform, paintImageXObject, restore)+ sequences
+  // with one paintImageXObjectRepeat operation, if the |transform| and
+  // |paintImageXObjectRepeat| ops are appropriate.
+  addState(InitialState,
+    [OPS.save, OPS.transform, OPS.paintImageXObject, OPS.restore],
+    function (context) {
+      var MIN_IMAGES_IN_BLOCK = 3;
+      var MAX_IMAGES_IN_BLOCK = 1000;
+
+      var fnArray = context.fnArray, argsArray = context.argsArray;
+      var curr = context.iCurr;
+      var iFirstSave = curr - 3;
+      var iFirstTransform = curr - 2;
+      var iFirstPIXO = curr - 1;
+      var iFirstRestore = curr;
+
+      if (argsArray[iFirstTransform][1] !== 0 ||
+          argsArray[iFirstTransform][2] !== 0) {
+        return iFirstRestore + 1;   // transform has the wrong form
+      }
+
+      // Look for the quartets.
+      var firstPIXOArg0 = argsArray[iFirstPIXO][0];
+      var firstTransformArg0 = argsArray[iFirstTransform][0];
+      var firstTransformArg3 = argsArray[iFirstTransform][3];
+      var i = iFirstSave + 4;
+      var ii = fnArray.length;
+      while (i + 3 < ii) {
+        if (fnArray[i] !== OPS.save ||
+            fnArray[i + 1] !== OPS.transform ||
+            fnArray[i + 2] !== OPS.paintImageXObject ||
+            fnArray[i + 3] !== OPS.restore) {
+          break;    // ops don't match
+        }
+        if (argsArray[i + 1][0] !== firstTransformArg0 ||
+            argsArray[i + 1][1] !== 0 ||
+            argsArray[i + 1][2] !== 0 ||
+            argsArray[i + 1][3] !== firstTransformArg3) {
+          break;    // transforms don't match
+        }
+        if (argsArray[i + 2][0] !== firstPIXOArg0) {
+          break;    // images don't match
+        }
+        i += 4;
+      }
+
+      // At this point, i is the index of the first op past the last valid
+      // quartet.
+      var count = Math.min((i - iFirstSave) / 4, MAX_IMAGES_IN_BLOCK);
+      if (count < MIN_IMAGES_IN_BLOCK) {
+        return i;
+      }
+
+      // Extract the (x,y) positions from all of the matching transforms.
+      var positions = new Float32Array(count * 2);
+      var iTransform = iFirstTransform;
+      for (var q = 0; q < count; q++, iTransform += 4) {
+        var transformArgs = argsArray[iTransform];
+        positions[(q << 1)] = transformArgs[4];
+        positions[(q << 1) + 1] = transformArgs[5];
+      }
+
+      // Replace queue items.
+      var args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3,
+                  positions];
+      fnArray.splice(iFirstSave, count * 4, OPS.paintImageXObjectRepeat);
+      argsArray.splice(iFirstSave, count * 4, args);
+
+      return iFirstSave + 1;
+    });
+
+  // This replaces (beginText, setFont, setTextMatrix, showText, endText)+
+  // sequences with (beginText, setFont, (setTextMatrix, showText)+, endText)+
+  // sequences, if the font for each one is the same.
+  addState(InitialState,
+    [OPS.beginText, OPS.setFont, OPS.setTextMatrix, OPS.showText, OPS.endText],
+    function (context) {
+      var MIN_CHARS_IN_BLOCK = 3;
+      var MAX_CHARS_IN_BLOCK = 1000;
+
+      var fnArray = context.fnArray, argsArray = context.argsArray;
+      var curr = context.iCurr;
+      var iFirstBeginText = curr - 4;
+      var iFirstSetFont = curr - 3;
+      var iFirstSetTextMatrix = curr - 2;
+      var iFirstShowText = curr - 1;
+      var iFirstEndText = curr;
+
+      // Look for the quintets.
+      var firstSetFontArg0 = argsArray[iFirstSetFont][0];
+      var firstSetFontArg1 = argsArray[iFirstSetFont][1];
+      var i = iFirstBeginText + 5;
+      var ii = fnArray.length;
+      while (i + 4 < ii) {
+        if (fnArray[i] !== OPS.beginText ||
+            fnArray[i + 1] !== OPS.setFont ||
+            fnArray[i + 2] !== OPS.setTextMatrix ||
+            fnArray[i + 3] !== OPS.showText ||
+            fnArray[i + 4] !== OPS.endText) {
+          break;    // ops don't match
+        }
+        if (argsArray[i + 1][0] !== firstSetFontArg0 ||
+            argsArray[i + 1][1] !== firstSetFontArg1) {
+          break;    // fonts don't match
+        }
+        i += 5;
+      }
+
+      // At this point, i is the index of the first op past the last valid
+      // quintet.
+      var count = Math.min(((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK);
+      if (count < MIN_CHARS_IN_BLOCK) {
+        return i;
+      }
+
+      // If the preceding quintet is (<something>, setFont, setTextMatrix,
+      // showText, endText), include that as well. (E.g. <something> might be
+      // |dependency|.)
+      var iFirst = iFirstBeginText;
+      if (iFirstBeginText >= 4 &&
+          fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] &&
+          fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] &&
+          fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] &&
+          fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] &&
+          argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 &&
+          argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) {
+        count++;
+        iFirst -= 5;
+      }
+
+      // Remove (endText, beginText, setFont) trios.
+      var iEndText = iFirst + 4;
+      for (var q = 1; q < count; q++) {
+        fnArray.splice(iEndText, 3);
+        argsArray.splice(iEndText, 3);
+        iEndText += 2;
+      }
+
+      return iEndText + 1;
+    });
+
+  function QueueOptimizer() {}
+
+  QueueOptimizer.prototype = {
+    optimize: function QueueOptimizer_optimize(queue) {
+      var fnArray = queue.fnArray, argsArray = queue.argsArray;
+      var context = {
+        iCurr: 0,
+        fnArray: fnArray,
+        argsArray: argsArray
+      };
+      var state;
+      var i = 0, ii = fnArray.length;
+      while (i < ii) {
+        state = (state || InitialState)[fnArray[i]];
+        if (typeof state === 'function') { // we found some handler
+          context.iCurr = i;
+          // state() returns the index of the first non-matching op (if we
+          // didn't match) or the first op past the modified ops (if we did
+          // match and replace).
+          i = state(context);
+          state = undefined;    // reset the state machine
+          ii = context.fnArray.length;
+        } else {
+          i++;
+        }
+      }
+    }
+  };
+  return QueueOptimizer;
+})();
+
+
+var BUILT_IN_CMAPS = [
+// << Start unicode maps.
+'Adobe-GB1-UCS2',
+'Adobe-CNS1-UCS2',
+'Adobe-Japan1-UCS2',
+'Adobe-Korea1-UCS2',
+// >> End unicode maps.
+'78-EUC-H',
+'78-EUC-V',
+'78-H',
+'78-RKSJ-H',
+'78-RKSJ-V',
+'78-V',
+'78ms-RKSJ-H',
+'78ms-RKSJ-V',
+'83pv-RKSJ-H',
+'90ms-RKSJ-H',
+'90ms-RKSJ-V',
+'90msp-RKSJ-H',
+'90msp-RKSJ-V',
+'90pv-RKSJ-H',
+'90pv-RKSJ-V',
+'Add-H',
+'Add-RKSJ-H',
+'Add-RKSJ-V',
+'Add-V',
+'Adobe-CNS1-0',
+'Adobe-CNS1-1',
+'Adobe-CNS1-2',
+'Adobe-CNS1-3',
+'Adobe-CNS1-4',
+'Adobe-CNS1-5',
+'Adobe-CNS1-6',
+'Adobe-GB1-0',
+'Adobe-GB1-1',
+'Adobe-GB1-2',
+'Adobe-GB1-3',
+'Adobe-GB1-4',
+'Adobe-GB1-5',
+'Adobe-Japan1-0',
+'Adobe-Japan1-1',
+'Adobe-Japan1-2',
+'Adobe-Japan1-3',
+'Adobe-Japan1-4',
+'Adobe-Japan1-5',
+'Adobe-Japan1-6',
+'Adobe-Korea1-0',
+'Adobe-Korea1-1',
+'Adobe-Korea1-2',
+'B5-H',
+'B5-V',
+'B5pc-H',
+'B5pc-V',
+'CNS-EUC-H',
+'CNS-EUC-V',
+'CNS1-H',
+'CNS1-V',
+'CNS2-H',
+'CNS2-V',
+'ETHK-B5-H',
+'ETHK-B5-V',
+'ETen-B5-H',
+'ETen-B5-V',
+'ETenms-B5-H',
+'ETenms-B5-V',
+'EUC-H',
+'EUC-V',
+'Ext-H',
+'Ext-RKSJ-H',
+'Ext-RKSJ-V',
+'Ext-V',
+'GB-EUC-H',
+'GB-EUC-V',
+'GB-H',
+'GB-V',
+'GBK-EUC-H',
+'GBK-EUC-V',
+'GBK2K-H',
+'GBK2K-V',
+'GBKp-EUC-H',
+'GBKp-EUC-V',
+'GBT-EUC-H',
+'GBT-EUC-V',
+'GBT-H',
+'GBT-V',
+'GBTpc-EUC-H',
+'GBTpc-EUC-V',
+'GBpc-EUC-H',
+'GBpc-EUC-V',
+'H',
+'HKdla-B5-H',
+'HKdla-B5-V',
+'HKdlb-B5-H',
+'HKdlb-B5-V',
+'HKgccs-B5-H',
+'HKgccs-B5-V',
+'HKm314-B5-H',
+'HKm314-B5-V',
+'HKm471-B5-H',
+'HKm471-B5-V',
+'HKscs-B5-H',
+'HKscs-B5-V',
+'Hankaku',
+'Hiragana',
+'KSC-EUC-H',
+'KSC-EUC-V',
+'KSC-H',
+'KSC-Johab-H',
+'KSC-Johab-V',
+'KSC-V',
+'KSCms-UHC-H',
+'KSCms-UHC-HW-H',
+'KSCms-UHC-HW-V',
+'KSCms-UHC-V',
+'KSCpc-EUC-H',
+'KSCpc-EUC-V',
+'Katakana',
+'NWP-H',
+'NWP-V',
+'RKSJ-H',
+'RKSJ-V',
+'Roman',
+'UniCNS-UCS2-H',
+'UniCNS-UCS2-V',
+'UniCNS-UTF16-H',
+'UniCNS-UTF16-V',
+'UniCNS-UTF32-H',
+'UniCNS-UTF32-V',
+'UniCNS-UTF8-H',
+'UniCNS-UTF8-V',
+'UniGB-UCS2-H',
+'UniGB-UCS2-V',
+'UniGB-UTF16-H',
+'UniGB-UTF16-V',
+'UniGB-UTF32-H',
+'UniGB-UTF32-V',
+'UniGB-UTF8-H',
+'UniGB-UTF8-V',
+'UniJIS-UCS2-H',
+'UniJIS-UCS2-HW-H',
+'UniJIS-UCS2-HW-V',
+'UniJIS-UCS2-V',
+'UniJIS-UTF16-H',
+'UniJIS-UTF16-V',
+'UniJIS-UTF32-H',
+'UniJIS-UTF32-V',
+'UniJIS-UTF8-H',
+'UniJIS-UTF8-V',
+'UniJIS2004-UTF16-H',
+'UniJIS2004-UTF16-V',
+'UniJIS2004-UTF32-H',
+'UniJIS2004-UTF32-V',
+'UniJIS2004-UTF8-H',
+'UniJIS2004-UTF8-V',
+'UniJISPro-UCS2-HW-V',
+'UniJISPro-UCS2-V',
+'UniJISPro-UTF8-V',
+'UniJISX0213-UTF32-H',
+'UniJISX0213-UTF32-V',
+'UniJISX02132004-UTF32-H',
+'UniJISX02132004-UTF32-V',
+'UniKS-UCS2-H',
+'UniKS-UCS2-V',
+'UniKS-UTF16-H',
+'UniKS-UTF16-V',
+'UniKS-UTF32-H',
+'UniKS-UTF32-V',
+'UniKS-UTF8-H',
+'UniKS-UTF8-V',
+'V',
+'WP-Symbol'];
+
+// CMap, not to be confused with TrueType's cmap.
+var CMap = (function CMapClosure() {
+  function CMap(builtInCMap) {
+    // Codespace ranges are stored as follows:
+    // [[1BytePairs], [2BytePairs], [3BytePairs], [4BytePairs]]
+    // where nBytePairs are ranges e.g. [low1, high1, low2, high2, ...]
+    this.codespaceRanges = [[], [], [], []];
+    this.numCodespaceRanges = 0;
+    // Map entries have one of two forms.
+    // - cid chars are 16-bit unsigned integers, stored as integers.
+    // - bf chars are variable-length byte sequences, stored as strings, with
+    //   one byte per character.
+    this._map = [];
+    this.name = '';
+    this.vertical = false;
+    this.useCMap = null;
+    this.builtInCMap = builtInCMap;
+  }
+  CMap.prototype = {
+    addCodespaceRange: function(n, low, high) {
+      this.codespaceRanges[n - 1].push(low, high);
+      this.numCodespaceRanges++;
+    },
+
+    mapCidRange: function(low, high, dstLow) {
+      while (low <= high) {
+        this._map[low++] = dstLow++;
+      }
+    },
+
+    mapBfRange: function(low, high, dstLow) {
+      var lastByte = dstLow.length - 1;
+      while (low <= high) {
+        this._map[low++] = dstLow;
+        // Only the last byte has to be incremented.
+        dstLow = dstLow.substr(0, lastByte) +
+                 String.fromCharCode(dstLow.charCodeAt(lastByte) + 1);
+      }
+    },
+
+    mapBfRangeToArray: function(low, high, array) {
+      var i = 0, ii = array.length;
+      while (low <= high && i < ii) {
+        this._map[low] = array[i++];
+        ++low;
+      }
+    },
+
+    // This is used for both bf and cid chars.
+    mapOne: function(src, dst) {
+      this._map[src] = dst;
+    },
+
+    lookup: function(code) {
+      return this._map[code];
+    },
+
+    contains: function(code) {
+      return this._map[code] !== undefined;
+    },
+
+    forEach: function(callback) {
+      // Most maps have fewer than 65536 entries, and for those we use normal
+      // array iteration. But really sparse tables are possible -- e.g. with
+      // indices in the *billions*. For such tables we use for..in, which isn't
+      // ideal because it stringifies the indices for all present elements, but
+      // it does avoid iterating over every undefined entry.
+      var map = this._map;
+      var length = map.length;
+      var i;
+      if (length <= 0x10000) {
+        for (i = 0; i < length; i++) {
+          if (map[i] !== undefined) {
+            callback(i, map[i]);
+          }
+        }
+      } else {
+        for (i in this._map) {
+          callback(i, map[i]);
+        }
+      }
+    },
+
+    charCodeOf: function(value) {
+      return this._map.indexOf(value);
+    },
+
+    getMap: function() {
+      return this._map;
+    },
+
+    readCharCode: function(str, offset, out) {
+      var c = 0;
+      var codespaceRanges = this.codespaceRanges;
+      var codespaceRangesLen = this.codespaceRanges.length;
+      // 9.7.6.2 CMap Mapping
+      // The code length is at most 4.
+      for (var n = 0; n < codespaceRangesLen; n++) {
+        c = ((c << 8) | str.charCodeAt(offset + n)) >>> 0;
+        // Check each codespace range to see if it falls within.
+        var codespaceRange = codespaceRanges[n];
+        for (var k = 0, kk = codespaceRange.length; k < kk;) {
+          var low = codespaceRange[k++];
+          var high = codespaceRange[k++];
+          if (c >= low && c <= high) {
+            out.charcode = c;
+            out.length = n + 1;
+            return;
+          }
+        }
+      }
+      out.charcode = 0;
+      out.length = 1;
+    },
+
+    get length() {
+      return this._map.length;
+    },
+
+    get isIdentityCMap() {
+      if (!(this.name === 'Identity-H' || this.name === 'Identity-V')) {
+        return false;
+      }
+      if (this._map.length !== 0x10000) {
+        return false;
+      }
+      for (var i = 0; i < 0x10000; i++) {
+        if (this._map[i] !== i) {
+          return false;
+        }
+      }
+      return true;
+    }
+  };
+  return CMap;
+})();
+
+// A special case of CMap, where the _map array implicitly has a length of
+// 65536 and each element is equal to its index.
+var IdentityCMap = (function IdentityCMapClosure() {
+  function IdentityCMap(vertical, n) {
+    CMap.call(this);
+    this.vertical = vertical;
+    this.addCodespaceRange(n, 0, 0xffff);
+  }
+  Util.inherit(IdentityCMap, CMap, {});
+
+  IdentityCMap.prototype = {
+    addCodespaceRange: CMap.prototype.addCodespaceRange,
+
+    mapCidRange: function(low, high, dstLow) {
+      error('should not call mapCidRange');
+    },
+
+    mapBfRange: function(low, high, dstLow) {
+      error('should not call mapBfRange');
+    },
+
+    mapBfRangeToArray: function(low, high, array) {
+      error('should not call mapBfRangeToArray');
+    },
+
+    mapOne: function(src, dst) {
+      error('should not call mapCidOne');
+    },
+
+    lookup: function(code) {
+      return (isInt(code) && code <= 0xffff) ? code : undefined;
+    },
+
+    contains: function(code) {
+      return isInt(code) && code <= 0xffff;
+    },
+
+    forEach: function(callback) {
+      for (var i = 0; i <= 0xffff; i++) {
+        callback(i, i);
+      }
+    },
+
+    charCodeOf: function(value) {
+      return (isInt(value) && value <= 0xffff) ? value : -1;
+    },
+
+    getMap: function() {
+      // Sometimes identity maps must be instantiated, but it's rare.
+      var map = new Array(0x10000);
+      for (var i = 0; i <= 0xffff; i++) {
+        map[i] = i;
+      }
+      return map;
+    },
+
+    readCharCode: CMap.prototype.readCharCode,
+
+    get length() {
+      return 0x10000;
+    },
+
+    get isIdentityCMap() {
+      error('should not access .isIdentityCMap');
+    }
+  };
+
+  return IdentityCMap;
+})();
+
+var BinaryCMapReader = (function BinaryCMapReaderClosure() {
+  function fetchBinaryData(url) {
+    var nonBinaryRequest = PDFJS.disableWorker;
+    var request = new XMLHttpRequest();
+    request.open('GET', url, false);
+    if (!nonBinaryRequest) {
+      try {
+        request.responseType = 'arraybuffer';
+        nonBinaryRequest = request.responseType !== 'arraybuffer';
+      } catch (e) {
+        nonBinaryRequest = true;
+      }
+    }
+    if (nonBinaryRequest && request.overrideMimeType) {
+      request.overrideMimeType('text/plain; charset=x-user-defined');
+    }
+    request.send(null);
+    if (nonBinaryRequest ? !request.responseText : !request.response) {
+      error('Unable to get binary cMap at: ' + url);
+    }
+    if (nonBinaryRequest) {
+      var data = Array.prototype.map.call(request.responseText, function (ch) {
+        return ch.charCodeAt(0) & 255;
+      });
+      return new Uint8Array(data);
+    }
+    return new Uint8Array(request.response);
+  }
+
+  function hexToInt(a, size) {
+    var n = 0;
+    for (var i = 0; i <= size; i++) {
+      n = (n << 8) | a[i];
+    }
+    return n >>> 0;
+  }
+
+  function hexToStr(a, size) {
+    // This code is hot. Special-case some common values to avoid creating an
+    // object with subarray().
+    if (size === 1) {
+      return String.fromCharCode(a[0], a[1]);
+    }
+    if (size === 3) {
+      return String.fromCharCode(a[0], a[1], a[2], a[3]);
+    }
+    return String.fromCharCode.apply(null, a.subarray(0, size + 1));
+  }
+
+  function addHex(a, b, size) {
+    var c = 0;
+    for (var i = size; i >= 0; i--) {
+      c += a[i] + b[i];
+      a[i] = c & 255;
+      c >>= 8;
+    }
+  }
+
+  function incHex(a, size) {
+    var c = 1;
+    for (var i = size; i >= 0 && c > 0; i--) {
+      c += a[i];
+      a[i] = c & 255;
+      c >>= 8;
+    }
+  }
+
+  var MAX_NUM_SIZE = 16;
+  var MAX_ENCODED_NUM_SIZE = 19; // ceil(MAX_NUM_SIZE * 7 / 8)
+
+  function BinaryCMapStream(data) {
+    this.buffer = data;
+    this.pos = 0;
+    this.end = data.length;
+    this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE);
+  }
+
+  BinaryCMapStream.prototype = {
+    readByte: function () {
+      if (this.pos >= this.end) {
+        return -1;
+      }
+      return this.buffer[this.pos++];
+    },
+    readNumber: function () {
+      var n = 0;
+      var last;
+      do {
+        var b = this.readByte();
+        if (b < 0) {
+          error('unexpected EOF in bcmap');
+        }
+        last = !(b & 0x80);
+        n = (n << 7) | (b & 0x7F);
+      } while (!last);
+      return n;
+    },
+    readSigned: function () {
+      var n = this.readNumber();
+      return (n & 1) ? ~(n >>> 1) : n >>> 1;
+    },
+    readHex: function (num, size) {
+      num.set(this.buffer.subarray(this.pos,
+        this.pos + size + 1));
+      this.pos += size + 1;
+    },
+    readHexNumber: function (num, size) {
+      var last;
+      var stack = this.tmpBuf, sp = 0;
+      do {
+        var b = this.readByte();
+        if (b < 0) {
+          error('unexpected EOF in bcmap');
+        }
+        last = !(b & 0x80);
+        stack[sp++] = b & 0x7F;
+      } while (!last);
+      var i = size, buffer = 0, bufferSize = 0;
+      while (i >= 0) {
+        while (bufferSize < 8 && stack.length > 0) {
+          buffer = (stack[--sp] << bufferSize) | buffer;
+          bufferSize += 7;
+        }
+        num[i] = buffer & 255;
+        i--;
+        buffer >>= 8;
+        bufferSize -= 8;
+      }
+    },
+    readHexSigned: function (num, size) {
+      this.readHexNumber(num, size);
+      var sign = num[size] & 1 ? 255 : 0;
+      var c = 0;
+      for (var i = 0; i <= size; i++) {
+        c = ((c & 1) << 8) | num[i];
+        num[i] = (c >> 1) ^ sign;
+      }
+    },
+    readString: function () {
+      var len = this.readNumber();
+      var s = '';
+      for (var i = 0; i < len; i++) {
+        s += String.fromCharCode(this.readNumber());
+      }
+      return s;
+    }
+  };
+
+  function processBinaryCMap(url, cMap, extend) {
+    var data = fetchBinaryData(url);
+    var stream = new BinaryCMapStream(data);
+
+    var header = stream.readByte();
+    cMap.vertical = !!(header & 1);
+
+    var useCMap = null;
+    var start = new Uint8Array(MAX_NUM_SIZE);
+    var end = new Uint8Array(MAX_NUM_SIZE);
+    var char = new Uint8Array(MAX_NUM_SIZE);
+    var charCode = new Uint8Array(MAX_NUM_SIZE);
+    var tmp = new Uint8Array(MAX_NUM_SIZE);
+    var code;
+
+    var b;
+    while ((b = stream.readByte()) >= 0) {
+      var type = b >> 5;
+      if (type === 7) { // metadata, e.g. comment or usecmap
+        switch (b & 0x1F) {
+          case 0:
+            stream.readString(); // skipping comment
+            break;
+          case 1:
+            useCMap = stream.readString();
+            break;
+        }
+        continue;
+      }
+      var sequence = !!(b & 0x10);
+      var dataSize = b & 15;
+
+      assert(dataSize + 1 <= MAX_NUM_SIZE);
+
+      var ucs2DataSize = 1;
+      var subitemsCount = stream.readNumber();
+      var i;
+      switch (type) {
+        case 0: // codespacerange
+          stream.readHex(start, dataSize);
+          stream.readHexNumber(end, dataSize);
+          addHex(end, start, dataSize);
+          cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize),
+                                 hexToInt(end, dataSize));
+          for (i = 1; i < subitemsCount; i++) {
+            incHex(end, dataSize);
+            stream.readHexNumber(start, dataSize);
+            addHex(start, end, dataSize);
+            stream.readHexNumber(end, dataSize);
+            addHex(end, start, dataSize);
+            cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize),
+                                   hexToInt(end, dataSize));
+          }
+          break;
+        case 1: // notdefrange
+          stream.readHex(start, dataSize);
+          stream.readHexNumber(end, dataSize);
+          addHex(end, start, dataSize);
+          code = stream.readNumber();
+          // undefined range, skipping
+          for (i = 1; i < subitemsCount; i++) {
+            incHex(end, dataSize);
+            stream.readHexNumber(start, dataSize);
+            addHex(start, end, dataSize);
+            stream.readHexNumber(end, dataSize);
+            addHex(end, start, dataSize);
+            code = stream.readNumber();
+            // nop
+          }
+          break;
+        case 2: // cidchar
+          stream.readHex(char, dataSize);
+          code = stream.readNumber();
+          cMap.mapOne(hexToInt(char, dataSize), code);
+          for (i = 1; i < subitemsCount; i++) {
+            incHex(char, dataSize);
+            if (!sequence) {
+              stream.readHexNumber(tmp, dataSize);
+              addHex(char, tmp, dataSize);
+            }
+            code = stream.readSigned() + (code + 1);
+            cMap.mapOne(hexToInt(char, dataSize), code);
+          }
+          break;
+        case 3: // cidrange
+          stream.readHex(start, dataSize);
+          stream.readHexNumber(end, dataSize);
+          addHex(end, start, dataSize);
+          code = stream.readNumber();
+          cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize),
+                           code);
+          for (i = 1; i < subitemsCount; i++) {
+            incHex(end, dataSize);
+            if (!sequence) {
+              stream.readHexNumber(start, dataSize);
+              addHex(start, end, dataSize);
+            } else {
+              start.set(end);
+            }
+            stream.readHexNumber(end, dataSize);
+            addHex(end, start, dataSize);
+            code = stream.readNumber();
+            cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize),
+                             code);
+          }
+          break;
+        case 4: // bfchar
+          stream.readHex(char, ucs2DataSize);
+          stream.readHex(charCode, dataSize);
+          cMap.mapOne(hexToInt(char, ucs2DataSize),
+                      hexToStr(charCode, dataSize));
+          for (i = 1; i < subitemsCount; i++) {
+            incHex(char, ucs2DataSize);
+            if (!sequence) {
+              stream.readHexNumber(tmp, ucs2DataSize);
+              addHex(char, tmp, ucs2DataSize);
+            }
+            incHex(charCode, dataSize);
+            stream.readHexSigned(tmp, dataSize);
+            addHex(charCode, tmp, dataSize);
+            cMap.mapOne(hexToInt(char, ucs2DataSize),
+                        hexToStr(charCode, dataSize));
+          }
+          break;
+        case 5: // bfrange
+          stream.readHex(start, ucs2DataSize);
+          stream.readHexNumber(end, ucs2DataSize);
+          addHex(end, start, ucs2DataSize);
+          stream.readHex(charCode, dataSize);
+          cMap.mapBfRange(hexToInt(start, ucs2DataSize),
+                          hexToInt(end, ucs2DataSize),
+                          hexToStr(charCode, dataSize));
+          for (i = 1; i < subitemsCount; i++) {
+            incHex(end, ucs2DataSize);
+            if (!sequence) {
+              stream.readHexNumber(start, ucs2DataSize);
+              addHex(start, end, ucs2DataSize);
+            } else {
+              start.set(end);
+            }
+            stream.readHexNumber(end, ucs2DataSize);
+            addHex(end, start, ucs2DataSize);
+            stream.readHex(charCode, dataSize);
+            cMap.mapBfRange(hexToInt(start, ucs2DataSize),
+                            hexToInt(end, ucs2DataSize),
+                            hexToStr(charCode, dataSize));
+          }
+          break;
+        default:
+          error('Unknown type: ' + type);
+          break;
+      }
+    }
+
+    if (useCMap) {
+      extend(useCMap);
+    }
+    return cMap;
+  }
+
+  function BinaryCMapReader() {}
+
+  BinaryCMapReader.prototype = {
+    read: processBinaryCMap
+  };
+
+  return BinaryCMapReader;
+})();
+
+var CMapFactory = (function CMapFactoryClosure() {
+  function strToInt(str) {
+    var a = 0;
+    for (var i = 0; i < str.length; i++) {
+      a = (a << 8) | str.charCodeAt(i);
+    }
+    return a >>> 0;
+  }
+
+  function expectString(obj) {
+    if (!isString(obj)) {
+      error('Malformed CMap: expected string.');
+    }
+  }
+
+  function expectInt(obj) {
+    if (!isInt(obj)) {
+      error('Malformed CMap: expected int.');
+    }
+  }
+
+  function parseBfChar(cMap, lexer) {
+    while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      }
+      if (isCmd(obj, 'endbfchar')) {
+        return;
+      }
+      expectString(obj);
+      var src = strToInt(obj);
+      obj = lexer.getObj();
+      // TODO are /dstName used?
+      expectString(obj);
+      var dst = obj;
+      cMap.mapOne(src, dst);
+    }
+  }
+
+  function parseBfRange(cMap, lexer) {
+    while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      }
+      if (isCmd(obj, 'endbfrange')) {
+        return;
+      }
+      expectString(obj);
+      var low = strToInt(obj);
+      obj = lexer.getObj();
+      expectString(obj);
+      var high = strToInt(obj);
+      obj = lexer.getObj();
+      if (isInt(obj) || isString(obj)) {
+        var dstLow = isInt(obj) ? String.fromCharCode(obj) : obj;
+        cMap.mapBfRange(low, high, dstLow);
+      } else if (isCmd(obj, '[')) {
+        obj = lexer.getObj();
+        var array = [];
+        while (!isCmd(obj, ']') && !isEOF(obj)) {
+          array.push(obj);
+          obj = lexer.getObj();
+        }
+        cMap.mapBfRangeToArray(low, high, array);
+      } else {
+        break;
+      }
+    }
+    error('Invalid bf range.');
+  }
+
+  function parseCidChar(cMap, lexer) {
+    while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      }
+      if (isCmd(obj, 'endcidchar')) {
+        return;
+      }
+      expectString(obj);
+      var src = strToInt(obj);
+      obj = lexer.getObj();
+      expectInt(obj);
+      var dst = obj;
+      cMap.mapOne(src, dst);
+    }
+  }
+
+  function parseCidRange(cMap, lexer) {
+    while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      }
+      if (isCmd(obj, 'endcidrange')) {
+        return;
+      }
+      expectString(obj);
+      var low = strToInt(obj);
+      obj = lexer.getObj();
+      expectString(obj);
+      var high = strToInt(obj);
+      obj = lexer.getObj();
+      expectInt(obj);
+      var dstLow = obj;
+      cMap.mapCidRange(low, high, dstLow);
+    }
+  }
+
+  function parseCodespaceRange(cMap, lexer) {
+    while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      }
+      if (isCmd(obj, 'endcodespacerange')) {
+        return;
+      }
+      if (!isString(obj)) {
+        break;
+      }
+      var low = strToInt(obj);
+      obj = lexer.getObj();
+      if (!isString(obj)) {
+        break;
+      }
+      var high = strToInt(obj);
+      cMap.addCodespaceRange(obj.length, low, high);
+    }
+    error('Invalid codespace range.');
+  }
+
+  function parseWMode(cMap, lexer) {
+    var obj = lexer.getObj();
+    if (isInt(obj)) {
+      cMap.vertical = !!obj;
+    }
+  }
+
+  function parseCMapName(cMap, lexer) {
+    var obj = lexer.getObj();
+    if (isName(obj) && isString(obj.name)) {
+      cMap.name = obj.name;
+    }
+  }
+
+  function parseCMap(cMap, lexer, builtInCMapParams, useCMap) {
+    var previous;
+    var embededUseCMap;
+    objLoop: while (true) {
+      var obj = lexer.getObj();
+      if (isEOF(obj)) {
+        break;
+      } else if (isName(obj)) {
+        if (obj.name === 'WMode') {
+          parseWMode(cMap, lexer);
+        } else if (obj.name === 'CMapName') {
+          parseCMapName(cMap, lexer);
+        }
+        previous = obj;
+      } else if (isCmd(obj)) {
+        switch (obj.cmd) {
+          case 'endcmap':
+            break objLoop;
+          case 'usecmap':
+            if (isName(previous)) {
+              embededUseCMap = previous.name;
+            }
+            break;
+          case 'begincodespacerange':
+            parseCodespaceRange(cMap, lexer);
+            break;
+          case 'beginbfchar':
+            parseBfChar(cMap, lexer);
+            break;
+          case 'begincidchar':
+            parseCidChar(cMap, lexer);
+            break;
+          case 'beginbfrange':
+            parseBfRange(cMap, lexer);
+            break;
+          case 'begincidrange':
+            parseCidRange(cMap, lexer);
+            break;
+        }
+      }
+    }
+
+    if (!useCMap && embededUseCMap) {
+      // Load the usecmap definition from the file only if there wasn't one
+      // specified.
+      useCMap = embededUseCMap;
+    }
+    if (useCMap) {
+      extendCMap(cMap, builtInCMapParams, useCMap);
+    }
+  }
+
+  function extendCMap(cMap, builtInCMapParams, useCMap) {
+    cMap.useCMap = createBuiltInCMap(useCMap, builtInCMapParams);
+    // If there aren't any code space ranges defined clone all the parent ones
+    // into this cMap.
+    if (cMap.numCodespaceRanges === 0) {
+      var useCodespaceRanges = cMap.useCMap.codespaceRanges;
+      for (var i = 0; i < useCodespaceRanges.length; i++) {
+        cMap.codespaceRanges[i] = useCodespaceRanges[i].slice();
+      }
+      cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges;
+    }
+    // Merge the map into the current one, making sure not to override
+    // any previously defined entries.
+    cMap.useCMap.forEach(function(key, value) {
+      if (!cMap.contains(key)) {
+        cMap.mapOne(key, cMap.useCMap.lookup(key));
+      }
+    });
+  }
+
+  function parseBinaryCMap(name, builtInCMapParams) {
+    var url = builtInCMapParams.url + name + '.bcmap';
+    var cMap = new CMap(true);
+    new BinaryCMapReader().read(url, cMap, function (useCMap) {
+      extendCMap(cMap, builtInCMapParams, useCMap);
+    });
+    return cMap;
+  }
+
+  function createBuiltInCMap(name, builtInCMapParams) {
+    if (name === 'Identity-H') {
+      return new IdentityCMap(false, 2);
+    } else if (name === 'Identity-V') {
+      return new IdentityCMap(true, 2);
+    }
+    if (BUILT_IN_CMAPS.indexOf(name) === -1) {
+      error('Unknown cMap name: ' + name);
+    }
+    assert(builtInCMapParams, 'built-in cMap parameters are not provided');
+
+    if (builtInCMapParams.packed) {
+      return parseBinaryCMap(name, builtInCMapParams);
+    }
+
+    var request = new XMLHttpRequest();
+    var url = builtInCMapParams.url + name;
+    request.open('GET', url, false);
+    request.send(null);
+    if (!request.responseText) {
+      error('Unable to get cMap at: ' + url);
+    }
+    var cMap = new CMap(true);
+    var lexer = new Lexer(new StringStream(request.responseText));
+    parseCMap(cMap, lexer, builtInCMapParams, null);
+    return cMap;
+  }
+
+  return {
+    create: function (encoding, builtInCMapParams, useCMap) {
+      if (isName(encoding)) {
+        return createBuiltInCMap(encoding.name, builtInCMapParams);
+      } else if (isStream(encoding)) {
+        var cMap = new CMap();
+        var lexer = new Lexer(encoding);
+        try {
+          parseCMap(cMap, lexer, builtInCMapParams, useCMap);
+        } catch (e) {
+          warn('Invalid CMap data. ' + e);
+        }
+        if (cMap.isIdentityCMap) {
+          return createBuiltInCMap(cMap.name, builtInCMapParams);
+        }
+        return cMap;
+      }
+      error('Encoding required.');
+    }
+  };
+})();
+
+
+// Unicode Private Use Area
+var PRIVATE_USE_OFFSET_START = 0xE000;
+var PRIVATE_USE_OFFSET_END = 0xF8FF;
+var SKIP_PRIVATE_USE_RANGE_F000_TO_F01F = false;
+
+// PDF Glyph Space Units are one Thousandth of a TextSpace Unit
+// except for Type 3 fonts
+var PDF_GLYPH_SPACE_UNITS = 1000;
+
+// Hinting is currently disabled due to unknown problems on windows
+// in tracemonkey and various other pdfs with type1 fonts.
+var HINTING_ENABLED = false;
+
+// Accented charactars are not displayed properly on windows, using this flag
+// to control analysis of seac charstrings.
+var SEAC_ANALYSIS_ENABLED = false;
+
+var FontFlags = {
+  FixedPitch: 1,
+  Serif: 2,
+  Symbolic: 4,
+  Script: 8,
+  Nonsymbolic: 32,
+  Italic: 64,
+  AllCap: 65536,
+  SmallCap: 131072,
+  ForceBold: 262144
+};
+
+var Encodings = {
+  ExpertEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle',
+    'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior',
+    'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma',
+    'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle',
+    'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle',
+    'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon',
+    'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior',
+    'questionsmall', '', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior',
+    'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior',
+    'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior',
+    '', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '',
+    'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall',
+    'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall',
+    'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall',
+    'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall',
+    'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary',
+    'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall',
+    '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall',
+    'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '',
+    'figuredash', 'hypheninferior', '', '', 'Ogoneksmall', 'Ringsmall',
+    'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters',
+    'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths',
+    'seveneighths', 'onethird', 'twothirds', '', '', 'zerosuperior',
+    'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior',
+    'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior',
+    'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior',
+    'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior',
+    'seveninferior', 'eightinferior', 'nineinferior', 'centinferior',
+    'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall',
+    'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall',
+    'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall',
+    'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',
+    'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall',
+    'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall',
+    'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',
+    'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall',
+    'Ydieresissmall'],
+  MacExpertEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclamsmall', 'Hungarumlautsmall', 'centoldstyle',
+    'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall',
+    'parenleftsuperior', 'parenrightsuperior', 'twodotenleader',
+    'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle',
+    'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle',
+    'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle',
+    'nineoldstyle', 'colon', 'semicolon', '', 'threequartersemdash', '',
+    'questionsmall', '', '', '', '', 'Ethsmall', '', '', 'onequarter',
+    'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths',
+    'seveneighths', 'onethird', 'twothirds', '', '', '', '', '', '', 'ff',
+    'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '', 'parenrightinferior',
+    'Circumflexsmall', 'hypheninferior', 'Gravesmall', 'Asmall', 'Bsmall',
+    'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall',
+    'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall',
+    'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall',
+    'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah',
+    'Tildesmall', '', '', 'asuperior', 'centsuperior', '', '', '', '',
+    'Aacutesmall', 'Agravesmall', 'Acircumflexsmall', 'Adieresissmall',
+    'Atildesmall', 'Aringsmall', 'Ccedillasmall', 'Eacutesmall', 'Egravesmall',
+    'Ecircumflexsmall', 'Edieresissmall', 'Iacutesmall', 'Igravesmall',
+    'Icircumflexsmall', 'Idieresissmall', 'Ntildesmall', 'Oacutesmall',
+    'Ogravesmall', 'Ocircumflexsmall', 'Odieresissmall', 'Otildesmall',
+    'Uacutesmall', 'Ugravesmall', 'Ucircumflexsmall', 'Udieresissmall', '',
+    'eightsuperior', 'fourinferior', 'threeinferior', 'sixinferior',
+    'eightinferior', 'seveninferior', 'Scaronsmall', '', 'centinferior',
+    'twoinferior', '', 'Dieresissmall', '', 'Caronsmall', 'osuperior',
+    'fiveinferior', '', 'commainferior', 'periodinferior', 'Yacutesmall', '',
+    'dollarinferior', '', 'Thornsmall', '', 'nineinferior', 'zeroinferior',
+    'Zcaronsmall', 'AEsmall', 'Oslashsmall', 'questiondownsmall',
+    'oneinferior', 'Lslashsmall', '', '', '', '', '', '', 'Cedillasmall', '',
+    '', '', '', '', 'OEsmall', 'figuredash', 'hyphensuperior', '', '', '', '',
+    'exclamdownsmall', '', 'Ydieresissmall', '', 'onesuperior', 'twosuperior',
+    'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior',
+    'sevensuperior', 'ninesuperior', 'zerosuperior', '', 'esuperior',
+    'rsuperior', 'tsuperior', '', '', 'isuperior', 'ssuperior', 'dsuperior',
+    '', '', '', '', '', 'lsuperior', 'Ogoneksmall', 'Brevesmall',
+    'Macronsmall', 'bsuperior', 'nsuperior', 'msuperior', 'commasuperior',
+    'periodsuperior', 'Dotaccentsmall', 'Ringsmall'],
+  MacRomanEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',
+    'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus',
+    'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three',
+    'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon',
+    'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F',
+    'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
+    'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright',
+    'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
+    'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+    'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '',
+    'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis',
+    'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis', 'atilde',
+    'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis',
+    'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute',
+    'ograve', 'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave',
+    'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling',
+    'section', 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright',
+    'trademark', 'acute', 'dieresis', 'notequal', 'AE', 'Oslash', 'infinity',
+    'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff',
+    'summation', 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine',
+    'Omega', 'ae', 'oslash', 'questiondown', 'exclamdown', 'logicalnot',
+    'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft',
+    'guillemotright', 'ellipsis', 'space', 'Agrave', 'Atilde', 'Otilde', 'OE',
+    'oe', 'endash', 'emdash', 'quotedblleft', 'quotedblright', 'quoteleft',
+    'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction',
+    'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl',
+    'periodcentered', 'quotesinglbase', 'quotedblbase', 'perthousand',
+    'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute',
+    'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple',
+    'Ograve', 'Uacute', 'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex',
+    'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut',
+    'ogonek', 'caron'],
+  StandardEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',
+    'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus',
+    'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three',
+    'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon',
+    'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F',
+    'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
+    'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright',
+    'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f',
+    'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u',
+    'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdown',
+    'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency',
+    'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft',
+    'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger', 'daggerdbl',
+    'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase',
+    'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis',
+    'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex',
+    'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla',
+    '', 'hungarumlaut', 'ogonek', 'caron', 'emdash', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '',
+    '', '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae',
+    '', '', '', 'dotlessi', '', '', 'lslash', 'oslash', 'oe', 'germandbls'],
+  WinAnsiEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',
+    'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus',
+    'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three',
+    'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon',
+    'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F',
+    'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
+    'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright',
+    'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
+    'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+    'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde',
+    'bullet', 'Euro', 'bullet', 'quotesinglbase', 'florin', 'quotedblbase',
+    'ellipsis', 'dagger', 'daggerdbl', 'circumflex', 'perthousand', 'Scaron',
+    'guilsinglleft', 'OE', 'bullet', 'Zcaron', 'bullet', 'bullet', 'quoteleft',
+    'quoteright', 'quotedblleft', 'quotedblright', 'bullet', 'endash',
+    'emdash', 'tilde', 'trademark', 'scaron', 'guilsinglright', 'oe', 'bullet',
+    'zcaron', 'Ydieresis', 'space', 'exclamdown', 'cent', 'sterling',
+    'currency', 'yen', 'brokenbar', 'section', 'dieresis', 'copyright',
+    'ordfeminine', 'guillemotleft', 'logicalnot', 'hyphen', 'registered',
+    'macron', 'degree', 'plusminus', 'twosuperior', 'threesuperior', 'acute',
+    'mu', 'paragraph', 'periodcentered', 'cedilla', 'onesuperior',
+    'ordmasculine', 'guillemotright', 'onequarter', 'onehalf', 'threequarters',
+    'questiondown', 'Agrave', 'Aacute', 'Acircumflex', 'Atilde', 'Adieresis',
+    'Aring', 'AE', 'Ccedilla', 'Egrave', 'Eacute', 'Ecircumflex', 'Edieresis',
+    'Igrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Eth', 'Ntilde', 'Ograve',
+    'Oacute', 'Ocircumflex', 'Otilde', 'Odieresis', 'multiply', 'Oslash',
+    'Ugrave', 'Uacute', 'Ucircumflex', 'Udieresis', 'Yacute', 'Thorn',
+    'germandbls', 'agrave', 'aacute', 'acircumflex', 'atilde', 'adieresis',
+    'aring', 'ae', 'ccedilla', 'egrave', 'eacute', 'ecircumflex', 'edieresis',
+    'igrave', 'iacute', 'icircumflex', 'idieresis', 'eth', 'ntilde', 'ograve',
+    'oacute', 'ocircumflex', 'otilde', 'odieresis', 'divide', 'oslash',
+    'ugrave', 'uacute', 'ucircumflex', 'udieresis', 'yacute', 'thorn',
+    'ydieresis'],
+  SymbolSetEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'exclam', 'universal', 'numbersign', 'existential', 'percent',
+    'ampersand', 'suchthat', 'parenleft', 'parenright', 'asteriskmath', 'plus',
+    'comma', 'minus', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four',
+    'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less',
+    'equal', 'greater', 'question', 'congruent', 'Alpha', 'Beta', 'Chi',
+    'Delta', 'Epsilon', 'Phi', 'Gamma', 'Eta', 'Iota', 'theta1', 'Kappa',
+    'Lambda', 'Mu', 'Nu', 'Omicron', 'Pi', 'Theta', 'Rho', 'Sigma', 'Tau',
+    'Upsilon', 'sigma1', 'Omega', 'Xi', 'Psi', 'Zeta', 'bracketleft',
+    'therefore', 'bracketright', 'perpendicular', 'underscore', 'radicalex',
+    'alpha', 'beta', 'chi', 'delta', 'epsilon', 'phi', 'gamma', 'eta', 'iota',
+    'phi1', 'kappa', 'lambda', 'mu', 'nu', 'omicron', 'pi', 'theta', 'rho',
+    'sigma', 'tau', 'upsilon', 'omega1', 'omega', 'xi', 'psi', 'zeta',
+    'braceleft', 'bar', 'braceright', 'similar', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', 'Euro', 'Upsilon1', 'minute', 'lessequal',
+    'fraction', 'infinity', 'florin', 'club', 'diamond', 'heart', 'spade',
+    'arrowboth', 'arrowleft', 'arrowup', 'arrowright', 'arrowdown', 'degree',
+    'plusminus', 'second', 'greaterequal', 'multiply', 'proportional',
+    'partialdiff', 'bullet', 'divide', 'notequal', 'equivalence',
+    'approxequal', 'ellipsis', 'arrowvertex', 'arrowhorizex', 'carriagereturn',
+    'aleph', 'Ifraktur', 'Rfraktur', 'weierstrass', 'circlemultiply',
+    'circleplus', 'emptyset', 'intersection', 'union', 'propersuperset',
+    'reflexsuperset', 'notsubset', 'propersubset', 'reflexsubset', 'element',
+    'notelement', 'angle', 'gradient', 'registerserif', 'copyrightserif',
+    'trademarkserif', 'product', 'radical', 'dotmath', 'logicalnot',
+    'logicaland', 'logicalor', 'arrowdblboth', 'arrowdblleft', 'arrowdblup',
+    'arrowdblright', 'arrowdbldown', 'lozenge', 'angleleft', 'registersans',
+    'copyrightsans', 'trademarksans', 'summation', 'parenlefttp',
+    'parenleftex', 'parenleftbt', 'bracketlefttp', 'bracketleftex',
+    'bracketleftbt', 'bracelefttp', 'braceleftmid', 'braceleftbt', 'braceex',
+    '', 'angleright', 'integral', 'integraltp', 'integralex', 'integralbt',
+    'parenrighttp', 'parenrightex', 'parenrightbt', 'bracketrighttp',
+    'bracketrightex', 'bracketrightbt', 'bracerighttp', 'bracerightmid',
+    'bracerightbt'],
+  ZapfDingbatsEncoding: ['', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
+    'space', 'a1', 'a2', 'a202', 'a3', 'a4', 'a5', 'a119', 'a118', 'a117',
+    'a11', 'a12', 'a13', 'a14', 'a15', 'a16', 'a105', 'a17', 'a18', 'a19',
+    'a20', 'a21', 'a22', 'a23', 'a24', 'a25', 'a26', 'a27', 'a28', 'a6', 'a7',
+    'a8', 'a9', 'a10', 'a29', 'a30', 'a31', 'a32', 'a33', 'a34', 'a35', 'a36',
+    'a37', 'a38', 'a39', 'a40', 'a41', 'a42', 'a43', 'a44', 'a45', 'a46',
+    'a47', 'a48', 'a49', 'a50', 'a51', 'a52', 'a53', 'a54', 'a55', 'a56',
+    'a57', 'a58', 'a59', 'a60', 'a61', 'a62', 'a63', 'a64', 'a65', 'a66',
+    'a67', 'a68', 'a69', 'a70', 'a71', 'a72', 'a73', 'a74', 'a203', 'a75',
+    'a204', 'a76', 'a77', 'a78', 'a79', 'a81', 'a82', 'a83', 'a84', 'a97',
+    'a98', 'a99', 'a100', '', 'a89', 'a90', 'a93', 'a94', 'a91', 'a92', 'a205',
+    'a85', 'a206', 'a86', 'a87', 'a88', 'a95', 'a96', '', '', '', '', '', '',
+    '', '', '', '', '', '', '', '', '', '', '', '', '', 'a101', 'a102', 'a103',
+    'a104', 'a106', 'a107', 'a108', 'a112', 'a111', 'a110', 'a109', 'a120',
+    'a121', 'a122', 'a123', 'a124', 'a125', 'a126', 'a127', 'a128', 'a129',
+    'a130', 'a131', 'a132', 'a133', 'a134', 'a135', 'a136', 'a137', 'a138',
+    'a139', 'a140', 'a141', 'a142', 'a143', 'a144', 'a145', 'a146', 'a147',
+    'a148', 'a149', 'a150', 'a151', 'a152', 'a153', 'a154', 'a155', 'a156',
+    'a157', 'a158', 'a159', 'a160', 'a161', 'a163', 'a164', 'a196', 'a165',
+    'a192', 'a166', 'a167', 'a168', 'a169', 'a170', 'a171', 'a172', 'a173',
+    'a162', 'a174', 'a175', 'a176', 'a177', 'a178', 'a179', 'a193', 'a180',
+    'a199', 'a181', 'a200', 'a182', '', 'a201', 'a183', 'a184', 'a197', 'a185',
+    'a194', 'a198', 'a186', 'a195', 'a187', 'a188', 'a189', 'a190', 'a191']
+};
+
+/**
+ * Hold a map of decoded fonts and of the standard fourteen Type1
+ * fonts and their acronyms.
+ */
+var stdFontMap = {
+  'ArialNarrow': 'Helvetica',
+  'ArialNarrow-Bold': 'Helvetica-Bold',
+  'ArialNarrow-BoldItalic': 'Helvetica-BoldOblique',
+  'ArialNarrow-Italic': 'Helvetica-Oblique',
+  'ArialBlack': 'Helvetica',
+  'ArialBlack-Bold': 'Helvetica-Bold',
+  'ArialBlack-BoldItalic': 'Helvetica-BoldOblique',
+  'ArialBlack-Italic': 'Helvetica-Oblique',
+  'Arial': 'Helvetica',
+  'Arial-Bold': 'Helvetica-Bold',
+  'Arial-BoldItalic': 'Helvetica-BoldOblique',
+  'Arial-Italic': 'Helvetica-Oblique',
+  'Arial-BoldItalicMT': 'Helvetica-BoldOblique',
+  'Arial-BoldMT': 'Helvetica-Bold',
+  'Arial-ItalicMT': 'Helvetica-Oblique',
+  'ArialMT': 'Helvetica',
+  'Courier-Bold': 'Courier-Bold',
+  'Courier-BoldItalic': 'Courier-BoldOblique',
+  'Courier-Italic': 'Courier-Oblique',
+  'CourierNew': 'Courier',
+  'CourierNew-Bold': 'Courier-Bold',
+  'CourierNew-BoldItalic': 'Courier-BoldOblique',
+  'CourierNew-Italic': 'Courier-Oblique',
+  'CourierNewPS-BoldItalicMT': 'Courier-BoldOblique',
+  'CourierNewPS-BoldMT': 'Courier-Bold',
+  'CourierNewPS-ItalicMT': 'Courier-Oblique',
+  'CourierNewPSMT': 'Courier',
+  'Helvetica': 'Helvetica',
+  'Helvetica-Bold': 'Helvetica-Bold',
+  'Helvetica-BoldItalic': 'Helvetica-BoldOblique',
+  'Helvetica-BoldOblique': 'Helvetica-BoldOblique',
+  'Helvetica-Italic': 'Helvetica-Oblique',
+  'Helvetica-Oblique':'Helvetica-Oblique',
+  'Symbol-Bold': 'Symbol',
+  'Symbol-BoldItalic': 'Symbol',
+  'Symbol-Italic': 'Symbol',
+  'TimesNewRoman': 'Times-Roman',
+  'TimesNewRoman-Bold': 'Times-Bold',
+  'TimesNewRoman-BoldItalic': 'Times-BoldItalic',
+  'TimesNewRoman-Italic': 'Times-Italic',
+  'TimesNewRomanPS': 'Times-Roman',
+  'TimesNewRomanPS-Bold': 'Times-Bold',
+  'TimesNewRomanPS-BoldItalic': 'Times-BoldItalic',
+  'TimesNewRomanPS-BoldItalicMT': 'Times-BoldItalic',
+  'TimesNewRomanPS-BoldMT': 'Times-Bold',
+  'TimesNewRomanPS-Italic': 'Times-Italic',
+  'TimesNewRomanPS-ItalicMT': 'Times-Italic',
+  'TimesNewRomanPSMT': 'Times-Roman',
+  'TimesNewRomanPSMT-Bold': 'Times-Bold',
+  'TimesNewRomanPSMT-BoldItalic': 'Times-BoldItalic',
+  'TimesNewRomanPSMT-Italic': 'Times-Italic'
+};
+
+/**
+ * Holds the map of the non-standard fonts that might be included as a standard
+ * fonts without glyph data.
+ */
+var nonStdFontMap = {
+  'CenturyGothic': 'Helvetica',
+  'CenturyGothic-Bold': 'Helvetica-Bold',
+  'CenturyGothic-BoldItalic': 'Helvetica-BoldOblique',
+  'CenturyGothic-Italic': 'Helvetica-Oblique',
+  'ComicSansMS': 'Comic Sans MS',
+  'ComicSansMS-Bold': 'Comic Sans MS-Bold',
+  'ComicSansMS-BoldItalic': 'Comic Sans MS-BoldItalic',
+  'ComicSansMS-Italic': 'Comic Sans MS-Italic',
+  'LucidaConsole': 'Courier',
+  'LucidaConsole-Bold': 'Courier-Bold',
+  'LucidaConsole-BoldItalic': 'Courier-BoldOblique',
+  'LucidaConsole-Italic': 'Courier-Oblique',
+  'MS-Gothic': 'MS Gothic',
+  'MS-Gothic-Bold': 'MS Gothic-Bold',
+  'MS-Gothic-BoldItalic': 'MS Gothic-BoldItalic',
+  'MS-Gothic-Italic': 'MS Gothic-Italic',
+  'MS-Mincho': 'MS Mincho',
+  'MS-Mincho-Bold': 'MS Mincho-Bold',
+  'MS-Mincho-BoldItalic': 'MS Mincho-BoldItalic',
+  'MS-Mincho-Italic': 'MS Mincho-Italic',
+  'MS-PGothic': 'MS PGothic',
+  'MS-PGothic-Bold': 'MS PGothic-Bold',
+  'MS-PGothic-BoldItalic': 'MS PGothic-BoldItalic',
+  'MS-PGothic-Italic': 'MS PGothic-Italic',
+  'MS-PMincho': 'MS PMincho',
+  'MS-PMincho-Bold': 'MS PMincho-Bold',
+  'MS-PMincho-BoldItalic': 'MS PMincho-BoldItalic',
+  'MS-PMincho-Italic': 'MS PMincho-Italic',
+  'Wingdings': 'ZapfDingbats'
+};
+
+var serifFonts = {
+  'Adobe Jenson': true, 'Adobe Text': true, 'Albertus': true,
+  'Aldus': true, 'Alexandria': true, 'Algerian': true,
+  'American Typewriter': true, 'Antiqua': true, 'Apex': true,
+  'Arno': true, 'Aster': true, 'Aurora': true,
+  'Baskerville': true, 'Bell': true, 'Bembo': true,
+  'Bembo Schoolbook': true, 'Benguiat': true, 'Berkeley Old Style': true,
+  'Bernhard Modern': true, 'Berthold City': true, 'Bodoni': true,
+  'Bauer Bodoni': true, 'Book Antiqua': true, 'Bookman': true,
+  'Bordeaux Roman': true, 'Californian FB': true, 'Calisto': true,
+  'Calvert': true, 'Capitals': true, 'Cambria': true,
+  'Cartier': true, 'Caslon': true, 'Catull': true,
+  'Centaur': true, 'Century Old Style': true, 'Century Schoolbook': true,
+  'Chaparral': true, 'Charis SIL': true, 'Cheltenham': true,
+  'Cholla Slab': true, 'Clarendon': true, 'Clearface': true,
+  'Cochin': true, 'Colonna': true, 'Computer Modern': true,
+  'Concrete Roman': true, 'Constantia': true, 'Cooper Black': true,
+  'Corona': true, 'Ecotype': true, 'Egyptienne': true,
+  'Elephant': true, 'Excelsior': true, 'Fairfield': true,
+  'FF Scala': true, 'Folkard': true, 'Footlight': true,
+  'FreeSerif': true, 'Friz Quadrata': true, 'Garamond': true,
+  'Gentium': true, 'Georgia': true, 'Gloucester': true,
+  'Goudy Old Style': true, 'Goudy Schoolbook': true, 'Goudy Pro Font': true,
+  'Granjon': true, 'Guardian Egyptian': true, 'Heather': true,
+  'Hercules': true, 'High Tower Text': true, 'Hiroshige': true,
+  'Hoefler Text': true, 'Humana Serif': true, 'Imprint': true,
+  'Ionic No. 5': true, 'Janson': true, 'Joanna': true,
+  'Korinna': true, 'Lexicon': true, 'Liberation Serif': true,
+  'Linux Libertine': true, 'Literaturnaya': true, 'Lucida': true,
+  'Lucida Bright': true, 'Melior': true, 'Memphis': true,
+  'Miller': true, 'Minion': true, 'Modern': true,
+  'Mona Lisa': true, 'Mrs Eaves': true, 'MS Serif': true,
+  'Museo Slab': true, 'New York': true, 'Nimbus Roman': true,
+  'NPS Rawlinson Roadway': true, 'Palatino': true, 'Perpetua': true,
+  'Plantin': true, 'Plantin Schoolbook': true, 'Playbill': true,
+  'Poor Richard': true, 'Rawlinson Roadway': true, 'Renault': true,
+  'Requiem': true, 'Rockwell': true, 'Roman': true,
+  'Rotis Serif': true, 'Sabon': true, 'Scala': true,
+  'Seagull': true, 'Sistina': true, 'Souvenir': true,
+  'STIX': true, 'Stone Informal': true, 'Stone Serif': true,
+  'Sylfaen': true, 'Times': true, 'Trajan': true,
+  'Trinité': true, 'Trump Mediaeval': true, 'Utopia': true,
+  'Vale Type': true, 'Bitstream Vera': true, 'Vera Serif': true,
+  'Versailles': true, 'Wanted': true, 'Weiss': true,
+  'Wide Latin': true, 'Windsor': true, 'XITS': true
+};
+
+var symbolsFonts = {
+  'Dingbats': true, 'Symbol': true, 'ZapfDingbats': true
+};
+
+// Glyph map for well-known standard fonts. Sometimes Ghostscript uses CID fonts
+// but does not embed the CID to GID mapping. The mapping is incomplete for all
+// glyphs, but common for some set of the standard fonts.
+var GlyphMapForStandardFonts = {
+  '2': 10, '3': 32, '4': 33, '5': 34, '6': 35, '7': 36, '8': 37, '9': 38,
+  '10': 39, '11': 40, '12': 41, '13': 42, '14': 43, '15': 44, '16': 45,
+  '17': 46, '18': 47, '19': 48, '20': 49, '21': 50, '22': 51, '23': 52,
+  '24': 53, '25': 54, '26': 55, '27': 56, '28': 57, '29': 58, '30': 894,
+  '31': 60, '32': 61, '33': 62, '34': 63, '35': 64, '36': 65, '37': 66,
+  '38': 67, '39': 68, '40': 69, '41': 70, '42': 71, '43': 72, '44': 73,
+  '45': 74, '46': 75, '47': 76, '48': 77, '49': 78, '50': 79, '51': 80,
+  '52': 81, '53': 82, '54': 83, '55': 84, '56': 85, '57': 86, '58': 87,
+  '59': 88, '60': 89, '61': 90, '62': 91, '63': 92, '64': 93, '65': 94,
+  '66': 95, '67': 96, '68': 97, '69': 98, '70': 99, '71': 100, '72': 101,
+  '73': 102, '74': 103, '75': 104, '76': 105, '77': 106, '78': 107, '79': 108,
+  '80': 109, '81': 110, '82': 111, '83': 112, '84': 113, '85': 114, '86': 115,
+  '87': 116, '88': 117, '89': 118, '90': 119, '91': 120, '92': 121, '93': 122,
+  '94': 123, '95': 124, '96': 125, '97': 126, '98': 196, '99': 197, '100': 199,
+  '101': 201, '102': 209, '103': 214, '104': 220, '105': 225, '106': 224,
+  '107': 226, '108': 228, '109': 227, '110': 229, '111': 231, '112': 233,
+  '113': 232, '114': 234, '115': 235, '116': 237, '117': 236, '118': 238,
+  '119': 239, '120': 241, '121': 243, '122': 242, '123': 244, '124': 246,
+  '125': 245, '126': 250, '127': 249, '128': 251, '129': 252, '130': 8224,
+  '131': 176, '132': 162, '133': 163, '134': 167, '135': 8226, '136': 182,
+  '137': 223, '138': 174, '139': 169, '140': 8482, '141': 180, '142': 168,
+  '143': 8800, '144': 198, '145': 216, '146': 8734, '147': 177, '148': 8804,
+  '149': 8805, '150': 165, '151': 181, '152': 8706, '153': 8721, '154': 8719,
+  '156': 8747, '157': 170, '158': 186, '159': 8486, '160': 230, '161': 248,
+  '162': 191, '163': 161, '164': 172, '165': 8730, '166': 402, '167': 8776,
+  '168': 8710, '169': 171, '170': 187, '171': 8230, '210': 218, '223': 711,
+  '224': 321, '225': 322, '227': 353, '229': 382, '234': 253, '252': 263,
+  '253': 268, '254': 269, '258': 258, '260': 260, '261': 261, '265': 280,
+  '266': 281, '268': 283, '269': 313, '275': 323, '276': 324, '278': 328,
+  '284': 345, '285': 346, '286': 347, '292': 367, '295': 377, '296': 378,
+  '298': 380, '305': 963,
+  '306': 964, '307': 966, '308': 8215, '309': 8252, '310': 8319, '311': 8359,
+  '312': 8592, '313': 8593, '337': 9552, '493': 1039, '494': 1040, '705': 1524,
+  '706': 8362, '710': 64288, '711': 64298, '759': 1617, '761': 1776,
+  '763': 1778, '775': 1652, '777': 1764, '778': 1780, '779': 1781, '780': 1782,
+  '782': 771, '783': 64726, '786': 8363, '788': 8532, '790': 768, '791': 769,
+  '792': 768, '795': 803, '797': 64336, '798': 64337, '799': 64342,
+  '800': 64343, '801': 64344, '802': 64345, '803': 64362, '804': 64363,
+  '805': 64364, '2424': 7821, '2425': 7822, '2426': 7823, '2427': 7824,
+  '2428': 7825, '2429': 7826, '2430': 7827, '2433': 7682, '2678': 8045,
+  '2679': 8046, '2830': 1552, '2838': 686, '2840': 751, '2842': 753,
+  '2843': 754, '2844': 755, '2846': 757, '2856': 767, '2857': 848, '2858': 849,
+  '2862': 853, '2863': 854, '2864': 855, '2865': 861, '2866': 862, '2906': 7460,
+  '2908': 7462, '2909': 7463, '2910': 7464, '2912': 7466, '2913': 7467,
+  '2914': 7468, '2916': 7470, '2917': 7471, '2918': 7472, '2920': 7474,
+  '2921': 7475, '2922': 7476, '2924': 7478, '2925': 7479, '2926': 7480,
+  '2928': 7482, '2929': 7483, '2930': 7484, '2932': 7486, '2933': 7487,
+  '2934': 7488, '2936': 7490, '2937': 7491, '2938': 7492, '2940': 7494,
+  '2941': 7495, '2942': 7496, '2944': 7498, '2946': 7500, '2948': 7502,
+  '2950': 7504, '2951': 7505, '2952': 7506, '2954': 7508, '2955': 7509,
+  '2956': 7510, '2958': 7512, '2959': 7513, '2960': 7514, '2962': 7516,
+  '2963': 7517, '2964': 7518, '2966': 7520, '2967': 7521, '2968': 7522,
+  '2970': 7524, '2971': 7525, '2972': 7526, '2974': 7528, '2975': 7529,
+  '2976': 7530, '2978': 1537, '2979': 1538, '2980': 1539, '2982': 1549,
+  '2983': 1551, '2984': 1552, '2986': 1554, '2987': 1555, '2988': 1556,
+  '2990': 1623, '2991': 1624, '2995': 1775, '2999': 1791, '3002': 64290,
+  '3003': 64291, '3004': 64292, '3006': 64294, '3007': 64295, '3008': 64296,
+  '3011': 1900, '3014': 8223, '3015': 8244, '3017': 7532, '3018': 7533,
+  '3019': 7534, '3075': 7590, '3076': 7591, '3079': 7594, '3080': 7595,
+  '3083': 7598, '3084': 7599, '3087': 7602, '3088': 7603, '3091': 7606,
+  '3092': 7607, '3095': 7610, '3096': 7611, '3099': 7614, '3100': 7615,
+  '3103': 7618, '3104': 7619, '3107': 8337, '3108': 8338, '3116': 1884,
+  '3119': 1885, '3120': 1885, '3123': 1886, '3124': 1886, '3127': 1887,
+  '3128': 1887, '3131': 1888, '3132': 1888, '3135': 1889, '3136': 1889,
+  '3139': 1890, '3140': 1890, '3143': 1891, '3144': 1891, '3147': 1892,
+  '3148': 1892, '3153': 580, '3154': 581, '3157': 584, '3158': 585, '3161': 588,
+  '3162': 589, '3165': 891, '3166': 892, '3169': 1274, '3170': 1275,
+  '3173': 1278, '3174': 1279, '3181': 7622, '3182': 7623, '3282': 11799,
+  '3316': 578, '3379': 42785, '3393': 1159, '3416': 8377
+};
+
+// The glyph map for ArialBlack differs slightly from the glyph map used for
+// other well-known standard fonts. Hence we use this (incomplete) CID to GID
+// mapping to adjust the glyph map for non-embedded ArialBlack fonts.
+var SupplementalGlyphMapForArialBlack = {
+  '227': 322, '264': 261, '291': 346,
+};
+
+// Some characters, e.g. copyrightserif, are mapped to the private use area and
+// might not be displayed using standard fonts. Mapping/hacking well-known chars
+// to the similar equivalents in the normal characters range.
+var SpecialPUASymbols = {
+  '63721': 0x00A9, // copyrightsans (0xF8E9) => copyright
+  '63193': 0x00A9, // copyrightserif (0xF6D9) => copyright
+  '63720': 0x00AE, // registersans (0xF8E8) => registered
+  '63194': 0x00AE, // registerserif (0xF6DA) => registered
+  '63722': 0x2122, // trademarksans (0xF8EA) => trademark
+  '63195': 0x2122, // trademarkserif (0xF6DB) => trademark
+  '63729': 0x23A7, // bracelefttp (0xF8F1)
+  '63730': 0x23A8, // braceleftmid (0xF8F2)
+  '63731': 0x23A9, // braceleftbt (0xF8F3)
+  '63740': 0x23AB, // bracerighttp (0xF8FC)
+  '63741': 0x23AC, // bracerightmid (0xF8FD)
+  '63742': 0x23AD, // bracerightbt (0xF8FE)
+  '63726': 0x23A1, // bracketlefttp (0xF8EE)
+  '63727': 0x23A2, // bracketleftex (0xF8EF)
+  '63728': 0x23A3, // bracketleftbt (0xF8F0)
+  '63737': 0x23A4, // bracketrighttp (0xF8F9)
+  '63738': 0x23A5, // bracketrightex (0xF8FA)
+  '63739': 0x23A6, // bracketrightbt (0xF8FB)
+  '63723': 0x239B, // parenlefttp (0xF8EB)
+  '63724': 0x239C, // parenleftex (0xF8EC)
+  '63725': 0x239D, // parenleftbt (0xF8ED)
+  '63734': 0x239E, // parenrighttp (0xF8F6)
+  '63735': 0x239F, // parenrightex (0xF8F7)
+  '63736': 0x23A0, // parenrightbt (0xF8F8)
+};
+function mapSpecialUnicodeValues(code) {
+  if (code >= 0xFFF0 && code <= 0xFFFF) { // Specials unicode block.
+    return 0;
+  } else if (code >= 0xF600 && code <= 0xF8FF) {
+    return (SpecialPUASymbols[code] || code);
+  }
+  return code;
+}
+
+var UnicodeRanges = [
+  { 'begin': 0x0000, 'end': 0x007F }, // Basic Latin
+  { 'begin': 0x0080, 'end': 0x00FF }, // Latin-1 Supplement
+  { 'begin': 0x0100, 'end': 0x017F }, // Latin Extended-A
+  { 'begin': 0x0180, 'end': 0x024F }, // Latin Extended-B
+  { 'begin': 0x0250, 'end': 0x02AF }, // IPA Extensions
+  { 'begin': 0x02B0, 'end': 0x02FF }, // Spacing Modifier Letters
+  { 'begin': 0x0300, 'end': 0x036F }, // Combining Diacritical Marks
+  { 'begin': 0x0370, 'end': 0x03FF }, // Greek and Coptic
+  { 'begin': 0x2C80, 'end': 0x2CFF }, // Coptic
+  { 'begin': 0x0400, 'end': 0x04FF }, // Cyrillic
+  { 'begin': 0x0530, 'end': 0x058F }, // Armenian
+  { 'begin': 0x0590, 'end': 0x05FF }, // Hebrew
+  { 'begin': 0xA500, 'end': 0xA63F }, // Vai
+  { 'begin': 0x0600, 'end': 0x06FF }, // Arabic
+  { 'begin': 0x07C0, 'end': 0x07FF }, // NKo
+  { 'begin': 0x0900, 'end': 0x097F }, // Devanagari
+  { 'begin': 0x0980, 'end': 0x09FF }, // Bengali
+  { 'begin': 0x0A00, 'end': 0x0A7F }, // Gurmukhi
+  { 'begin': 0x0A80, 'end': 0x0AFF }, // Gujarati
+  { 'begin': 0x0B00, 'end': 0x0B7F }, // Oriya
+  { 'begin': 0x0B80, 'end': 0x0BFF }, // Tamil
+  { 'begin': 0x0C00, 'end': 0x0C7F }, // Telugu
+  { 'begin': 0x0C80, 'end': 0x0CFF }, // Kannada
+  { 'begin': 0x0D00, 'end': 0x0D7F }, // Malayalam
+  { 'begin': 0x0E00, 'end': 0x0E7F }, // Thai
+  { 'begin': 0x0E80, 'end': 0x0EFF }, // Lao
+  { 'begin': 0x10A0, 'end': 0x10FF }, // Georgian
+  { 'begin': 0x1B00, 'end': 0x1B7F }, // Balinese
+  { 'begin': 0x1100, 'end': 0x11FF }, // Hangul Jamo
+  { 'begin': 0x1E00, 'end': 0x1EFF }, // Latin Extended Additional
+  { 'begin': 0x1F00, 'end': 0x1FFF }, // Greek Extended
+  { 'begin': 0x2000, 'end': 0x206F }, // General Punctuation
+  { 'begin': 0x2070, 'end': 0x209F }, // Superscripts And Subscripts
+  { 'begin': 0x20A0, 'end': 0x20CF }, // Currency Symbol
+  { 'begin': 0x20D0, 'end': 0x20FF }, // Combining Diacritical Marks For Symbols
+  { 'begin': 0x2100, 'end': 0x214F }, // Letterlike Symbols
+  { 'begin': 0x2150, 'end': 0x218F }, // Number Forms
+  { 'begin': 0x2190, 'end': 0x21FF }, // Arrows
+  { 'begin': 0x2200, 'end': 0x22FF }, // Mathematical Operators
+  { 'begin': 0x2300, 'end': 0x23FF }, // Miscellaneous Technical
+  { 'begin': 0x2400, 'end': 0x243F }, // Control Pictures
+  { 'begin': 0x2440, 'end': 0x245F }, // Optical Character Recognition
+  { 'begin': 0x2460, 'end': 0x24FF }, // Enclosed Alphanumerics
+  { 'begin': 0x2500, 'end': 0x257F }, // Box Drawing
+  { 'begin': 0x2580, 'end': 0x259F }, // Block Elements
+  { 'begin': 0x25A0, 'end': 0x25FF }, // Geometric Shapes
+  { 'begin': 0x2600, 'end': 0x26FF }, // Miscellaneous Symbols
+  { 'begin': 0x2700, 'end': 0x27BF }, // Dingbats
+  { 'begin': 0x3000, 'end': 0x303F }, // CJK Symbols And Punctuation
+  { 'begin': 0x3040, 'end': 0x309F }, // Hiragana
+  { 'begin': 0x30A0, 'end': 0x30FF }, // Katakana
+  { 'begin': 0x3100, 'end': 0x312F }, // Bopomofo
+  { 'begin': 0x3130, 'end': 0x318F }, // Hangul Compatibility Jamo
+  { 'begin': 0xA840, 'end': 0xA87F }, // Phags-pa
+  { 'begin': 0x3200, 'end': 0x32FF }, // Enclosed CJK Letters And Months
+  { 'begin': 0x3300, 'end': 0x33FF }, // CJK Compatibility
+  { 'begin': 0xAC00, 'end': 0xD7AF }, // Hangul Syllables
+  { 'begin': 0xD800, 'end': 0xDFFF }, // Non-Plane 0 *
+  { 'begin': 0x10900, 'end': 0x1091F }, // Phoenicia
+  { 'begin': 0x4E00, 'end': 0x9FFF }, // CJK Unified Ideographs
+  { 'begin': 0xE000, 'end': 0xF8FF }, // Private Use Area (plane 0)
+  { 'begin': 0x31C0, 'end': 0x31EF }, // CJK Strokes
+  { 'begin': 0xFB00, 'end': 0xFB4F }, // Alphabetic Presentation Forms
+  { 'begin': 0xFB50, 'end': 0xFDFF }, // Arabic Presentation Forms-A
+  { 'begin': 0xFE20, 'end': 0xFE2F }, // Combining Half Marks
+  { 'begin': 0xFE10, 'end': 0xFE1F }, // Vertical Forms
+  { 'begin': 0xFE50, 'end': 0xFE6F }, // Small Form Variants
+  { 'begin': 0xFE70, 'end': 0xFEFF }, // Arabic Presentation Forms-B
+  { 'begin': 0xFF00, 'end': 0xFFEF }, // Halfwidth And Fullwidth Forms
+  { 'begin': 0xFFF0, 'end': 0xFFFF }, // Specials
+  { 'begin': 0x0F00, 'end': 0x0FFF }, // Tibetan
+  { 'begin': 0x0700, 'end': 0x074F }, // Syriac
+  { 'begin': 0x0780, 'end': 0x07BF }, // Thaana
+  { 'begin': 0x0D80, 'end': 0x0DFF }, // Sinhala
+  { 'begin': 0x1000, 'end': 0x109F }, // Myanmar
+  { 'begin': 0x1200, 'end': 0x137F }, // Ethiopic
+  { 'begin': 0x13A0, 'end': 0x13FF }, // Cherokee
+  { 'begin': 0x1400, 'end': 0x167F }, // Unified Canadian Aboriginal Syllabics
+  { 'begin': 0x1680, 'end': 0x169F }, // Ogham
+  { 'begin': 0x16A0, 'end': 0x16FF }, // Runic
+  { 'begin': 0x1780, 'end': 0x17FF }, // Khmer
+  { 'begin': 0x1800, 'end': 0x18AF }, // Mongolian
+  { 'begin': 0x2800, 'end': 0x28FF }, // Braille Patterns
+  { 'begin': 0xA000, 'end': 0xA48F }, // Yi Syllables
+  { 'begin': 0x1700, 'end': 0x171F }, // Tagalog
+  { 'begin': 0x10300, 'end': 0x1032F }, // Old Italic
+  { 'begin': 0x10330, 'end': 0x1034F }, // Gothic
+  { 'begin': 0x10400, 'end': 0x1044F }, // Deseret
+  { 'begin': 0x1D000, 'end': 0x1D0FF }, // Byzantine Musical Symbols
+  { 'begin': 0x1D400, 'end': 0x1D7FF }, // Mathematical Alphanumeric Symbols
+  { 'begin': 0xFF000, 'end': 0xFFFFD }, // Private Use (plane 15)
+  { 'begin': 0xFE00, 'end': 0xFE0F }, // Variation Selectors
+  { 'begin': 0xE0000, 'end': 0xE007F }, // Tags
+  { 'begin': 0x1900, 'end': 0x194F }, // Limbu
+  { 'begin': 0x1950, 'end': 0x197F }, // Tai Le
+  { 'begin': 0x1980, 'end': 0x19DF }, // New Tai Lue
+  { 'begin': 0x1A00, 'end': 0x1A1F }, // Buginese
+  { 'begin': 0x2C00, 'end': 0x2C5F }, // Glagolitic
+  { 'begin': 0x2D30, 'end': 0x2D7F }, // Tifinagh
+  { 'begin': 0x4DC0, 'end': 0x4DFF }, // Yijing Hexagram Symbols
+  { 'begin': 0xA800, 'end': 0xA82F }, // Syloti Nagri
+  { 'begin': 0x10000, 'end': 0x1007F }, // Linear B Syllabary
+  { 'begin': 0x10140, 'end': 0x1018F }, // Ancient Greek Numbers
+  { 'begin': 0x10380, 'end': 0x1039F }, // Ugaritic
+  { 'begin': 0x103A0, 'end': 0x103DF }, // Old Persian
+  { 'begin': 0x10450, 'end': 0x1047F }, // Shavian
+  { 'begin': 0x10480, 'end': 0x104AF }, // Osmanya
+  { 'begin': 0x10800, 'end': 0x1083F }, // Cypriot Syllabary
+  { 'begin': 0x10A00, 'end': 0x10A5F }, // Kharoshthi
+  { 'begin': 0x1D300, 'end': 0x1D35F }, // Tai Xuan Jing Symbols
+  { 'begin': 0x12000, 'end': 0x123FF }, // Cuneiform
+  { 'begin': 0x1D360, 'end': 0x1D37F }, // Counting Rod Numerals
+  { 'begin': 0x1B80, 'end': 0x1BBF }, // Sundanese
+  { 'begin': 0x1C00, 'end': 0x1C4F }, // Lepcha
+  { 'begin': 0x1C50, 'end': 0x1C7F }, // Ol Chiki
+  { 'begin': 0xA880, 'end': 0xA8DF }, // Saurashtra
+  { 'begin': 0xA900, 'end': 0xA92F }, // Kayah Li
+  { 'begin': 0xA930, 'end': 0xA95F }, // Rejang
+  { 'begin': 0xAA00, 'end': 0xAA5F }, // Cham
+  { 'begin': 0x10190, 'end': 0x101CF }, // Ancient Symbols
+  { 'begin': 0x101D0, 'end': 0x101FF }, // Phaistos Disc
+  { 'begin': 0x102A0, 'end': 0x102DF }, // Carian
+  { 'begin': 0x1F030, 'end': 0x1F09F }  // Domino Tiles
+];
+
+var MacStandardGlyphOrdering = [
+  '.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl',
+  'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft',
+  'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash',
+  'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight',
+  'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at',
+  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
+  'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft',
+  'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b',
+  'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',
+  'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright',
+  'asciitilde', 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde',
+  'Odieresis', 'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis',
+  'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis',
+  'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve',
+  'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave', 'ucircumflex',
+  'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section', 'bullet',
+  'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute',
+  'dieresis', 'notequal', 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal',
+  'greaterequal', 'yen', 'mu', 'partialdiff', 'summation', 'product', 'pi',
+  'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash',
+  'questiondown', 'exclamdown', 'logicalnot', 'radical', 'florin',
+  'approxequal', 'Delta', 'guillemotleft', 'guillemotright', 'ellipsis',
+  'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash',
+  'emdash', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright',
+  'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction', 'currency',
+  'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered',
+  'quotesinglbase', 'quotedblbase', 'perthousand', 'Acircumflex',
+  'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex',
+  'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute',
+  'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron',
+  'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron',
+  'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar',
+  'Eth', 'eth', 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply',
+  'onesuperior', 'twosuperior', 'threesuperior', 'onehalf', 'onequarter',
+  'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla',
+  'scedilla', 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat'];
+
+function getUnicodeRangeFor(value) {
+  for (var i = 0, ii = UnicodeRanges.length; i < ii; i++) {
+    var range = UnicodeRanges[i];
+    if (value >= range.begin && value < range.end) {
+      return i;
+    }
+  }
+  return -1;
+}
+
+function isRTLRangeFor(value) {
+  var range = UnicodeRanges[13];
+  if (value >= range.begin && value < range.end) {
+    return true;
+  }
+  range = UnicodeRanges[11];
+  if (value >= range.begin && value < range.end) {
+    return true;
+  }
+  return false;
+}
+
+// The normalization table is obtained by filtering the Unicode characters
+// database with <compat> entries.
+var NormalizedUnicodes = {
+  '\u00A8': '\u0020\u0308',
+  '\u00AF': '\u0020\u0304',
+  '\u00B4': '\u0020\u0301',
+  '\u00B5': '\u03BC',
+  '\u00B8': '\u0020\u0327',
+  '\u0132': '\u0049\u004A',
+  '\u0133': '\u0069\u006A',
+  '\u013F': '\u004C\u00B7',
+  '\u0140': '\u006C\u00B7',
+  '\u0149': '\u02BC\u006E',
+  '\u017F': '\u0073',
+  '\u01C4': '\u0044\u017D',
+  '\u01C5': '\u0044\u017E',
+  '\u01C6': '\u0064\u017E',
+  '\u01C7': '\u004C\u004A',
+  '\u01C8': '\u004C\u006A',
+  '\u01C9': '\u006C\u006A',
+  '\u01CA': '\u004E\u004A',
+  '\u01CB': '\u004E\u006A',
+  '\u01CC': '\u006E\u006A',
+  '\u01F1': '\u0044\u005A',
+  '\u01F2': '\u0044\u007A',
+  '\u01F3': '\u0064\u007A',
+  '\u02D8': '\u0020\u0306',
+  '\u02D9': '\u0020\u0307',
+  '\u02DA': '\u0020\u030A',
+  '\u02DB': '\u0020\u0328',
+  '\u02DC': '\u0020\u0303',
+  '\u02DD': '\u0020\u030B',
+  '\u037A': '\u0020\u0345',
+  '\u0384': '\u0020\u0301',
+  '\u03D0': '\u03B2',
+  '\u03D1': '\u03B8',
+  '\u03D2': '\u03A5',
+  '\u03D5': '\u03C6',
+  '\u03D6': '\u03C0',
+  '\u03F0': '\u03BA',
+  '\u03F1': '\u03C1',
+  '\u03F2': '\u03C2',
+  '\u03F4': '\u0398',
+  '\u03F5': '\u03B5',
+  '\u03F9': '\u03A3',
+  '\u0587': '\u0565\u0582',
+  '\u0675': '\u0627\u0674',
+  '\u0676': '\u0648\u0674',
+  '\u0677': '\u06C7\u0674',
+  '\u0678': '\u064A\u0674',
+  '\u0E33': '\u0E4D\u0E32',
+  '\u0EB3': '\u0ECD\u0EB2',
+  '\u0EDC': '\u0EAB\u0E99',
+  '\u0EDD': '\u0EAB\u0EA1',
+  '\u0F77': '\u0FB2\u0F81',
+  '\u0F79': '\u0FB3\u0F81',
+  '\u1E9A': '\u0061\u02BE',
+  '\u1FBD': '\u0020\u0313',
+  '\u1FBF': '\u0020\u0313',
+  '\u1FC0': '\u0020\u0342',
+  '\u1FFE': '\u0020\u0314',
+  '\u2002': '\u0020',
+  '\u2003': '\u0020',
+  '\u2004': '\u0020',
+  '\u2005': '\u0020',
+  '\u2006': '\u0020',
+  '\u2008': '\u0020',
+  '\u2009': '\u0020',
+  '\u200A': '\u0020',
+  '\u2017': '\u0020\u0333',
+  '\u2024': '\u002E',
+  '\u2025': '\u002E\u002E',
+  '\u2026': '\u002E\u002E\u002E',
+  '\u2033': '\u2032\u2032',
+  '\u2034': '\u2032\u2032\u2032',
+  '\u2036': '\u2035\u2035',
+  '\u2037': '\u2035\u2035\u2035',
+  '\u203C': '\u0021\u0021',
+  '\u203E': '\u0020\u0305',
+  '\u2047': '\u003F\u003F',
+  '\u2048': '\u003F\u0021',
+  '\u2049': '\u0021\u003F',
+  '\u2057': '\u2032\u2032\u2032\u2032',
+  '\u205F': '\u0020',
+  '\u20A8': '\u0052\u0073',
+  '\u2100': '\u0061\u002F\u0063',
+  '\u2101': '\u0061\u002F\u0073',
+  '\u2103': '\u00B0\u0043',
+  '\u2105': '\u0063\u002F\u006F',
+  '\u2106': '\u0063\u002F\u0075',
+  '\u2107': '\u0190',
+  '\u2109': '\u00B0\u0046',
+  '\u2116': '\u004E\u006F',
+  '\u2121': '\u0054\u0045\u004C',
+  '\u2135': '\u05D0',
+  '\u2136': '\u05D1',
+  '\u2137': '\u05D2',
+  '\u2138': '\u05D3',
+  '\u213B': '\u0046\u0041\u0058',
+  '\u2160': '\u0049',
+  '\u2161': '\u0049\u0049',
+  '\u2162': '\u0049\u0049\u0049',
+  '\u2163': '\u0049\u0056',
+  '\u2164': '\u0056',
+  '\u2165': '\u0056\u0049',
+  '\u2166': '\u0056\u0049\u0049',
+  '\u2167': '\u0056\u0049\u0049\u0049',
+  '\u2168': '\u0049\u0058',
+  '\u2169': '\u0058',
+  '\u216A': '\u0058\u0049',
+  '\u216B': '\u0058\u0049\u0049',
+  '\u216C': '\u004C',
+  '\u216D': '\u0043',
+  '\u216E': '\u0044',
+  '\u216F': '\u004D',
+  '\u2170': '\u0069',
+  '\u2171': '\u0069\u0069',
+  '\u2172': '\u0069\u0069\u0069',
+  '\u2173': '\u0069\u0076',
+  '\u2174': '\u0076',
+  '\u2175': '\u0076\u0069',
+  '\u2176': '\u0076\u0069\u0069',
+  '\u2177': '\u0076\u0069\u0069\u0069',
+  '\u2178': '\u0069\u0078',
+  '\u2179': '\u0078',
+  '\u217A': '\u0078\u0069',
+  '\u217B': '\u0078\u0069\u0069',
+  '\u217C': '\u006C',
+  '\u217D': '\u0063',
+  '\u217E': '\u0064',
+  '\u217F': '\u006D',
+  '\u222C': '\u222B\u222B',
+  '\u222D': '\u222B\u222B\u222B',
+  '\u222F': '\u222E\u222E',
+  '\u2230': '\u222E\u222E\u222E',
+  '\u2474': '\u0028\u0031\u0029',
+  '\u2475': '\u0028\u0032\u0029',
+  '\u2476': '\u0028\u0033\u0029',
+  '\u2477': '\u0028\u0034\u0029',
+  '\u2478': '\u0028\u0035\u0029',
+  '\u2479': '\u0028\u0036\u0029',
+  '\u247A': '\u0028\u0037\u0029',
+  '\u247B': '\u0028\u0038\u0029',
+  '\u247C': '\u0028\u0039\u0029',
+  '\u247D': '\u0028\u0031\u0030\u0029',
+  '\u247E': '\u0028\u0031\u0031\u0029',
+  '\u247F': '\u0028\u0031\u0032\u0029',
+  '\u2480': '\u0028\u0031\u0033\u0029',
+  '\u2481': '\u0028\u0031\u0034\u0029',
+  '\u2482': '\u0028\u0031\u0035\u0029',
+  '\u2483': '\u0028\u0031\u0036\u0029',
+  '\u2484': '\u0028\u0031\u0037\u0029',
+  '\u2485': '\u0028\u0031\u0038\u0029',
+  '\u2486': '\u0028\u0031\u0039\u0029',
+  '\u2487': '\u0028\u0032\u0030\u0029',
+  '\u2488': '\u0031\u002E',
+  '\u2489': '\u0032\u002E',
+  '\u248A': '\u0033\u002E',
+  '\u248B': '\u0034\u002E',
+  '\u248C': '\u0035\u002E',
+  '\u248D': '\u0036\u002E',
+  '\u248E': '\u0037\u002E',
+  '\u248F': '\u0038\u002E',
+  '\u2490': '\u0039\u002E',
+  '\u2491': '\u0031\u0030\u002E',
+  '\u2492': '\u0031\u0031\u002E',
+  '\u2493': '\u0031\u0032\u002E',
+  '\u2494': '\u0031\u0033\u002E',
+  '\u2495': '\u0031\u0034\u002E',
+  '\u2496': '\u0031\u0035\u002E',
+  '\u2497': '\u0031\u0036\u002E',
+  '\u2498': '\u0031\u0037\u002E',
+  '\u2499': '\u0031\u0038\u002E',
+  '\u249A': '\u0031\u0039\u002E',
+  '\u249B': '\u0032\u0030\u002E',
+  '\u249C': '\u0028\u0061\u0029',
+  '\u249D': '\u0028\u0062\u0029',
+  '\u249E': '\u0028\u0063\u0029',
+  '\u249F': '\u0028\u0064\u0029',
+  '\u24A0': '\u0028\u0065\u0029',
+  '\u24A1': '\u0028\u0066\u0029',
+  '\u24A2': '\u0028\u0067\u0029',
+  '\u24A3': '\u0028\u0068\u0029',
+  '\u24A4': '\u0028\u0069\u0029',
+  '\u24A5': '\u0028\u006A\u0029',
+  '\u24A6': '\u0028\u006B\u0029',
+  '\u24A7': '\u0028\u006C\u0029',
+  '\u24A8': '\u0028\u006D\u0029',
+  '\u24A9': '\u0028\u006E\u0029',
+  '\u24AA': '\u0028\u006F\u0029',
+  '\u24AB': '\u0028\u0070\u0029',
+  '\u24AC': '\u0028\u0071\u0029',
+  '\u24AD': '\u0028\u0072\u0029',
+  '\u24AE': '\u0028\u0073\u0029',
+  '\u24AF': '\u0028\u0074\u0029',
+  '\u24B0': '\u0028\u0075\u0029',
+  '\u24B1': '\u0028\u0076\u0029',
+  '\u24B2': '\u0028\u0077\u0029',
+  '\u24B3': '\u0028\u0078\u0029',
+  '\u24B4': '\u0028\u0079\u0029',
+  '\u24B5': '\u0028\u007A\u0029',
+  '\u2A0C': '\u222B\u222B\u222B\u222B',
+  '\u2A74': '\u003A\u003A\u003D',
+  '\u2A75': '\u003D\u003D',
+  '\u2A76': '\u003D\u003D\u003D',
+  '\u2E9F': '\u6BCD',
+  '\u2EF3': '\u9F9F',
+  '\u2F00': '\u4E00',
+  '\u2F01': '\u4E28',
+  '\u2F02': '\u4E36',
+  '\u2F03': '\u4E3F',
+  '\u2F04': '\u4E59',
+  '\u2F05': '\u4E85',
+  '\u2F06': '\u4E8C',
+  '\u2F07': '\u4EA0',
+  '\u2F08': '\u4EBA',
+  '\u2F09': '\u513F',
+  '\u2F0A': '\u5165',
+  '\u2F0B': '\u516B',
+  '\u2F0C': '\u5182',
+  '\u2F0D': '\u5196',
+  '\u2F0E': '\u51AB',
+  '\u2F0F': '\u51E0',
+  '\u2F10': '\u51F5',
+  '\u2F11': '\u5200',
+  '\u2F12': '\u529B',
+  '\u2F13': '\u52F9',
+  '\u2F14': '\u5315',
+  '\u2F15': '\u531A',
+  '\u2F16': '\u5338',
+  '\u2F17': '\u5341',
+  '\u2F18': '\u535C',
+  '\u2F19': '\u5369',
+  '\u2F1A': '\u5382',
+  '\u2F1B': '\u53B6',
+  '\u2F1C': '\u53C8',
+  '\u2F1D': '\u53E3',
+  '\u2F1E': '\u56D7',
+  '\u2F1F': '\u571F',
+  '\u2F20': '\u58EB',
+  '\u2F21': '\u5902',
+  '\u2F22': '\u590A',
+  '\u2F23': '\u5915',
+  '\u2F24': '\u5927',
+  '\u2F25': '\u5973',
+  '\u2F26': '\u5B50',
+  '\u2F27': '\u5B80',
+  '\u2F28': '\u5BF8',
+  '\u2F29': '\u5C0F',
+  '\u2F2A': '\u5C22',
+  '\u2F2B': '\u5C38',
+  '\u2F2C': '\u5C6E',
+  '\u2F2D': '\u5C71',
+  '\u2F2E': '\u5DDB',
+  '\u2F2F': '\u5DE5',
+  '\u2F30': '\u5DF1',
+  '\u2F31': '\u5DFE',
+  '\u2F32': '\u5E72',
+  '\u2F33': '\u5E7A',
+  '\u2F34': '\u5E7F',
+  '\u2F35': '\u5EF4',
+  '\u2F36': '\u5EFE',
+  '\u2F37': '\u5F0B',
+  '\u2F38': '\u5F13',
+  '\u2F39': '\u5F50',
+  '\u2F3A': '\u5F61',
+  '\u2F3B': '\u5F73',
+  '\u2F3C': '\u5FC3',
+  '\u2F3D': '\u6208',
+  '\u2F3E': '\u6236',
+  '\u2F3F': '\u624B',
+  '\u2F40': '\u652F',
+  '\u2F41': '\u6534',
+  '\u2F42': '\u6587',
+  '\u2F43': '\u6597',
+  '\u2F44': '\u65A4',
+  '\u2F45': '\u65B9',
+  '\u2F46': '\u65E0',
+  '\u2F47': '\u65E5',
+  '\u2F48': '\u66F0',
+  '\u2F49': '\u6708',
+  '\u2F4A': '\u6728',
+  '\u2F4B': '\u6B20',
+  '\u2F4C': '\u6B62',
+  '\u2F4D': '\u6B79',
+  '\u2F4E': '\u6BB3',
+  '\u2F4F': '\u6BCB',
+  '\u2F50': '\u6BD4',
+  '\u2F51': '\u6BDB',
+  '\u2F52': '\u6C0F',
+  '\u2F53': '\u6C14',
+  '\u2F54': '\u6C34',
+  '\u2F55': '\u706B',
+  '\u2F56': '\u722A',
+  '\u2F57': '\u7236',
+  '\u2F58': '\u723B',
+  '\u2F59': '\u723F',
+  '\u2F5A': '\u7247',
+  '\u2F5B': '\u7259',
+  '\u2F5C': '\u725B',
+  '\u2F5D': '\u72AC',
+  '\u2F5E': '\u7384',
+  '\u2F5F': '\u7389',
+  '\u2F60': '\u74DC',
+  '\u2F61': '\u74E6',
+  '\u2F62': '\u7518',
+  '\u2F63': '\u751F',
+  '\u2F64': '\u7528',
+  '\u2F65': '\u7530',
+  '\u2F66': '\u758B',
+  '\u2F67': '\u7592',
+  '\u2F68': '\u7676',
+  '\u2F69': '\u767D',
+  '\u2F6A': '\u76AE',
+  '\u2F6B': '\u76BF',
+  '\u2F6C': '\u76EE',
+  '\u2F6D': '\u77DB',
+  '\u2F6E': '\u77E2',
+  '\u2F6F': '\u77F3',
+  '\u2F70': '\u793A',
+  '\u2F71': '\u79B8',
+  '\u2F72': '\u79BE',
+  '\u2F73': '\u7A74',
+  '\u2F74': '\u7ACB',
+  '\u2F75': '\u7AF9',
+  '\u2F76': '\u7C73',
+  '\u2F77': '\u7CF8',
+  '\u2F78': '\u7F36',
+  '\u2F79': '\u7F51',
+  '\u2F7A': '\u7F8A',
+  '\u2F7B': '\u7FBD',
+  '\u2F7C': '\u8001',
+  '\u2F7D': '\u800C',
+  '\u2F7E': '\u8012',
+  '\u2F7F': '\u8033',
+  '\u2F80': '\u807F',
+  '\u2F81': '\u8089',
+  '\u2F82': '\u81E3',
+  '\u2F83': '\u81EA',
+  '\u2F84': '\u81F3',
+  '\u2F85': '\u81FC',
+  '\u2F86': '\u820C',
+  '\u2F87': '\u821B',
+  '\u2F88': '\u821F',
+  '\u2F89': '\u826E',
+  '\u2F8A': '\u8272',
+  '\u2F8B': '\u8278',
+  '\u2F8C': '\u864D',
+  '\u2F8D': '\u866B',
+  '\u2F8E': '\u8840',
+  '\u2F8F': '\u884C',
+  '\u2F90': '\u8863',
+  '\u2F91': '\u897E',
+  '\u2F92': '\u898B',
+  '\u2F93': '\u89D2',
+  '\u2F94': '\u8A00',
+  '\u2F95': '\u8C37',
+  '\u2F96': '\u8C46',
+  '\u2F97': '\u8C55',
+  '\u2F98': '\u8C78',
+  '\u2F99': '\u8C9D',
+  '\u2F9A': '\u8D64',
+  '\u2F9B': '\u8D70',
+  '\u2F9C': '\u8DB3',
+  '\u2F9D': '\u8EAB',
+  '\u2F9E': '\u8ECA',
+  '\u2F9F': '\u8F9B',
+  '\u2FA0': '\u8FB0',
+  '\u2FA1': '\u8FB5',
+  '\u2FA2': '\u9091',
+  '\u2FA3': '\u9149',
+  '\u2FA4': '\u91C6',
+  '\u2FA5': '\u91CC',
+  '\u2FA6': '\u91D1',
+  '\u2FA7': '\u9577',
+  '\u2FA8': '\u9580',
+  '\u2FA9': '\u961C',
+  '\u2FAA': '\u96B6',
+  '\u2FAB': '\u96B9',
+  '\u2FAC': '\u96E8',
+  '\u2FAD': '\u9751',
+  '\u2FAE': '\u975E',
+  '\u2FAF': '\u9762',
+  '\u2FB0': '\u9769',
+  '\u2FB1': '\u97CB',
+  '\u2FB2': '\u97ED',
+  '\u2FB3': '\u97F3',
+  '\u2FB4': '\u9801',
+  '\u2FB5': '\u98A8',
+  '\u2FB6': '\u98DB',
+  '\u2FB7': '\u98DF',
+  '\u2FB8': '\u9996',
+  '\u2FB9': '\u9999',
+  '\u2FBA': '\u99AC',
+  '\u2FBB': '\u9AA8',
+  '\u2FBC': '\u9AD8',
+  '\u2FBD': '\u9ADF',
+  '\u2FBE': '\u9B25',
+  '\u2FBF': '\u9B2F',
+  '\u2FC0': '\u9B32',
+  '\u2FC1': '\u9B3C',
+  '\u2FC2': '\u9B5A',
+  '\u2FC3': '\u9CE5',
+  '\u2FC4': '\u9E75',
+  '\u2FC5': '\u9E7F',
+  '\u2FC6': '\u9EA5',
+  '\u2FC7': '\u9EBB',
+  '\u2FC8': '\u9EC3',
+  '\u2FC9': '\u9ECD',
+  '\u2FCA': '\u9ED1',
+  '\u2FCB': '\u9EF9',
+  '\u2FCC': '\u9EFD',
+  '\u2FCD': '\u9F0E',
+  '\u2FCE': '\u9F13',
+  '\u2FCF': '\u9F20',
+  '\u2FD0': '\u9F3B',
+  '\u2FD1': '\u9F4A',
+  '\u2FD2': '\u9F52',
+  '\u2FD3': '\u9F8D',
+  '\u2FD4': '\u9F9C',
+  '\u2FD5': '\u9FA0',
+  '\u3036': '\u3012',
+  '\u3038': '\u5341',
+  '\u3039': '\u5344',
+  '\u303A': '\u5345',
+  '\u309B': '\u0020\u3099',
+  '\u309C': '\u0020\u309A',
+  '\u3131': '\u1100',
+  '\u3132': '\u1101',
+  '\u3133': '\u11AA',
+  '\u3134': '\u1102',
+  '\u3135': '\u11AC',
+  '\u3136': '\u11AD',
+  '\u3137': '\u1103',
+  '\u3138': '\u1104',
+  '\u3139': '\u1105',
+  '\u313A': '\u11B0',
+  '\u313B': '\u11B1',
+  '\u313C': '\u11B2',
+  '\u313D': '\u11B3',
+  '\u313E': '\u11B4',
+  '\u313F': '\u11B5',
+  '\u3140': '\u111A',
+  '\u3141': '\u1106',
+  '\u3142': '\u1107',
+  '\u3143': '\u1108',
+  '\u3144': '\u1121',
+  '\u3145': '\u1109',
+  '\u3146': '\u110A',
+  '\u3147': '\u110B',
+  '\u3148': '\u110C',
+  '\u3149': '\u110D',
+  '\u314A': '\u110E',
+  '\u314B': '\u110F',
+  '\u314C': '\u1110',
+  '\u314D': '\u1111',
+  '\u314E': '\u1112',
+  '\u314F': '\u1161',
+  '\u3150': '\u1162',
+  '\u3151': '\u1163',
+  '\u3152': '\u1164',
+  '\u3153': '\u1165',
+  '\u3154': '\u1166',
+  '\u3155': '\u1167',
+  '\u3156': '\u1168',
+  '\u3157': '\u1169',
+  '\u3158': '\u116A',
+  '\u3159': '\u116B',
+  '\u315A': '\u116C',
+  '\u315B': '\u116D',
+  '\u315C': '\u116E',
+  '\u315D': '\u116F',
+  '\u315E': '\u1170',
+  '\u315F': '\u1171',
+  '\u3160': '\u1172',
+  '\u3161': '\u1173',
+  '\u3162': '\u1174',
+  '\u3163': '\u1175',
+  '\u3164': '\u1160',
+  '\u3165': '\u1114',
+  '\u3166': '\u1115',
+  '\u3167': '\u11C7',
+  '\u3168': '\u11C8',
+  '\u3169': '\u11CC',
+  '\u316A': '\u11CE',
+  '\u316B': '\u11D3',
+  '\u316C': '\u11D7',
+  '\u316D': '\u11D9',
+  '\u316E': '\u111C',
+  '\u316F': '\u11DD',
+  '\u3170': '\u11DF',
+  '\u3171': '\u111D',
+  '\u3172': '\u111E',
+  '\u3173': '\u1120',
+  '\u3174': '\u1122',
+  '\u3175': '\u1123',
+  '\u3176': '\u1127',
+  '\u3177': '\u1129',
+  '\u3178': '\u112B',
+  '\u3179': '\u112C',
+  '\u317A': '\u112D',
+  '\u317B': '\u112E',
+  '\u317C': '\u112F',
+  '\u317D': '\u1132',
+  '\u317E': '\u1136',
+  '\u317F': '\u1140',
+  '\u3180': '\u1147',
+  '\u3181': '\u114C',
+  '\u3182': '\u11F1',
+  '\u3183': '\u11F2',
+  '\u3184': '\u1157',
+  '\u3185': '\u1158',
+  '\u3186': '\u1159',
+  '\u3187': '\u1184',
+  '\u3188': '\u1185',
+  '\u3189': '\u1188',
+  '\u318A': '\u1191',
+  '\u318B': '\u1192',
+  '\u318C': '\u1194',
+  '\u318D': '\u119E',
+  '\u318E': '\u11A1',
+  '\u3200': '\u0028\u1100\u0029',
+  '\u3201': '\u0028\u1102\u0029',
+  '\u3202': '\u0028\u1103\u0029',
+  '\u3203': '\u0028\u1105\u0029',
+  '\u3204': '\u0028\u1106\u0029',
+  '\u3205': '\u0028\u1107\u0029',
+  '\u3206': '\u0028\u1109\u0029',
+  '\u3207': '\u0028\u110B\u0029',
+  '\u3208': '\u0028\u110C\u0029',
+  '\u3209': '\u0028\u110E\u0029',
+  '\u320A': '\u0028\u110F\u0029',
+  '\u320B': '\u0028\u1110\u0029',
+  '\u320C': '\u0028\u1111\u0029',
+  '\u320D': '\u0028\u1112\u0029',
+  '\u320E': '\u0028\u1100\u1161\u0029',
+  '\u320F': '\u0028\u1102\u1161\u0029',
+  '\u3210': '\u0028\u1103\u1161\u0029',
+  '\u3211': '\u0028\u1105\u1161\u0029',
+  '\u3212': '\u0028\u1106\u1161\u0029',
+  '\u3213': '\u0028\u1107\u1161\u0029',
+  '\u3214': '\u0028\u1109\u1161\u0029',
+  '\u3215': '\u0028\u110B\u1161\u0029',
+  '\u3216': '\u0028\u110C\u1161\u0029',
+  '\u3217': '\u0028\u110E\u1161\u0029',
+  '\u3218': '\u0028\u110F\u1161\u0029',
+  '\u3219': '\u0028\u1110\u1161\u0029',
+  '\u321A': '\u0028\u1111\u1161\u0029',
+  '\u321B': '\u0028\u1112\u1161\u0029',
+  '\u321C': '\u0028\u110C\u116E\u0029',
+  '\u321D': '\u0028\u110B\u1169\u110C\u1165\u11AB\u0029',
+  '\u321E': '\u0028\u110B\u1169\u1112\u116E\u0029',
+  '\u3220': '\u0028\u4E00\u0029',
+  '\u3221': '\u0028\u4E8C\u0029',
+  '\u3222': '\u0028\u4E09\u0029',
+  '\u3223': '\u0028\u56DB\u0029',
+  '\u3224': '\u0028\u4E94\u0029',
+  '\u3225': '\u0028\u516D\u0029',
+  '\u3226': '\u0028\u4E03\u0029',
+  '\u3227': '\u0028\u516B\u0029',
+  '\u3228': '\u0028\u4E5D\u0029',
+  '\u3229': '\u0028\u5341\u0029',
+  '\u322A': '\u0028\u6708\u0029',
+  '\u322B': '\u0028\u706B\u0029',
+  '\u322C': '\u0028\u6C34\u0029',
+  '\u322D': '\u0028\u6728\u0029',
+  '\u322E': '\u0028\u91D1\u0029',
+  '\u322F': '\u0028\u571F\u0029',
+  '\u3230': '\u0028\u65E5\u0029',
+  '\u3231': '\u0028\u682A\u0029',
+  '\u3232': '\u0028\u6709\u0029',
+  '\u3233': '\u0028\u793E\u0029',
+  '\u3234': '\u0028\u540D\u0029',
+  '\u3235': '\u0028\u7279\u0029',
+  '\u3236': '\u0028\u8CA1\u0029',
+  '\u3237': '\u0028\u795D\u0029',
+  '\u3238': '\u0028\u52B4\u0029',
+  '\u3239': '\u0028\u4EE3\u0029',
+  '\u323A': '\u0028\u547C\u0029',
+  '\u323B': '\u0028\u5B66\u0029',
+  '\u323C': '\u0028\u76E3\u0029',
+  '\u323D': '\u0028\u4F01\u0029',
+  '\u323E': '\u0028\u8CC7\u0029',
+  '\u323F': '\u0028\u5354\u0029',
+  '\u3240': '\u0028\u796D\u0029',
+  '\u3241': '\u0028\u4F11\u0029',
+  '\u3242': '\u0028\u81EA\u0029',
+  '\u3243': '\u0028\u81F3\u0029',
+  '\u32C0': '\u0031\u6708',
+  '\u32C1': '\u0032\u6708',
+  '\u32C2': '\u0033\u6708',
+  '\u32C3': '\u0034\u6708',
+  '\u32C4': '\u0035\u6708',
+  '\u32C5': '\u0036\u6708',
+  '\u32C6': '\u0037\u6708',
+  '\u32C7': '\u0038\u6708',
+  '\u32C8': '\u0039\u6708',
+  '\u32C9': '\u0031\u0030\u6708',
+  '\u32CA': '\u0031\u0031\u6708',
+  '\u32CB': '\u0031\u0032\u6708',
+  '\u3358': '\u0030\u70B9',
+  '\u3359': '\u0031\u70B9',
+  '\u335A': '\u0032\u70B9',
+  '\u335B': '\u0033\u70B9',
+  '\u335C': '\u0034\u70B9',
+  '\u335D': '\u0035\u70B9',
+  '\u335E': '\u0036\u70B9',
+  '\u335F': '\u0037\u70B9',
+  '\u3360': '\u0038\u70B9',
+  '\u3361': '\u0039\u70B9',
+  '\u3362': '\u0031\u0030\u70B9',
+  '\u3363': '\u0031\u0031\u70B9',
+  '\u3364': '\u0031\u0032\u70B9',
+  '\u3365': '\u0031\u0033\u70B9',
+  '\u3366': '\u0031\u0034\u70B9',
+  '\u3367': '\u0031\u0035\u70B9',
+  '\u3368': '\u0031\u0036\u70B9',
+  '\u3369': '\u0031\u0037\u70B9',
+  '\u336A': '\u0031\u0038\u70B9',
+  '\u336B': '\u0031\u0039\u70B9',
+  '\u336C': '\u0032\u0030\u70B9',
+  '\u336D': '\u0032\u0031\u70B9',
+  '\u336E': '\u0032\u0032\u70B9',
+  '\u336F': '\u0032\u0033\u70B9',
+  '\u3370': '\u0032\u0034\u70B9',
+  '\u33E0': '\u0031\u65E5',
+  '\u33E1': '\u0032\u65E5',
+  '\u33E2': '\u0033\u65E5',
+  '\u33E3': '\u0034\u65E5',
+  '\u33E4': '\u0035\u65E5',
+  '\u33E5': '\u0036\u65E5',
+  '\u33E6': '\u0037\u65E5',
+  '\u33E7': '\u0038\u65E5',
+  '\u33E8': '\u0039\u65E5',
+  '\u33E9': '\u0031\u0030\u65E5',
+  '\u33EA': '\u0031\u0031\u65E5',
+  '\u33EB': '\u0031\u0032\u65E5',
+  '\u33EC': '\u0031\u0033\u65E5',
+  '\u33ED': '\u0031\u0034\u65E5',
+  '\u33EE': '\u0031\u0035\u65E5',
+  '\u33EF': '\u0031\u0036\u65E5',
+  '\u33F0': '\u0031\u0037\u65E5',
+  '\u33F1': '\u0031\u0038\u65E5',
+  '\u33F2': '\u0031\u0039\u65E5',
+  '\u33F3': '\u0032\u0030\u65E5',
+  '\u33F4': '\u0032\u0031\u65E5',
+  '\u33F5': '\u0032\u0032\u65E5',
+  '\u33F6': '\u0032\u0033\u65E5',
+  '\u33F7': '\u0032\u0034\u65E5',
+  '\u33F8': '\u0032\u0035\u65E5',
+  '\u33F9': '\u0032\u0036\u65E5',
+  '\u33FA': '\u0032\u0037\u65E5',
+  '\u33FB': '\u0032\u0038\u65E5',
+  '\u33FC': '\u0032\u0039\u65E5',
+  '\u33FD': '\u0033\u0030\u65E5',
+  '\u33FE': '\u0033\u0031\u65E5',
+  '\uFB00': '\u0066\u0066',
+  '\uFB01': '\u0066\u0069',
+  '\uFB02': '\u0066\u006C',
+  '\uFB03': '\u0066\u0066\u0069',
+  '\uFB04': '\u0066\u0066\u006C',
+  '\uFB05': '\u017F\u0074',
+  '\uFB06': '\u0073\u0074',
+  '\uFB13': '\u0574\u0576',
+  '\uFB14': '\u0574\u0565',
+  '\uFB15': '\u0574\u056B',
+  '\uFB16': '\u057E\u0576',
+  '\uFB17': '\u0574\u056D',
+  '\uFB4F': '\u05D0\u05DC',
+  '\uFB50': '\u0671',
+  '\uFB51': '\u0671',
+  '\uFB52': '\u067B',
+  '\uFB53': '\u067B',
+  '\uFB54': '\u067B',
+  '\uFB55': '\u067B',
+  '\uFB56': '\u067E',
+  '\uFB57': '\u067E',
+  '\uFB58': '\u067E',
+  '\uFB59': '\u067E',
+  '\uFB5A': '\u0680',
+  '\uFB5B': '\u0680',
+  '\uFB5C': '\u0680',
+  '\uFB5D': '\u0680',
+  '\uFB5E': '\u067A',
+  '\uFB5F': '\u067A',
+  '\uFB60': '\u067A',
+  '\uFB61': '\u067A',
+  '\uFB62': '\u067F',
+  '\uFB63': '\u067F',
+  '\uFB64': '\u067F',
+  '\uFB65': '\u067F',
+  '\uFB66': '\u0679',
+  '\uFB67': '\u0679',
+  '\uFB68': '\u0679',
+  '\uFB69': '\u0679',
+  '\uFB6A': '\u06A4',
+  '\uFB6B': '\u06A4',
+  '\uFB6C': '\u06A4',
+  '\uFB6D': '\u06A4',
+  '\uFB6E': '\u06A6',
+  '\uFB6F': '\u06A6',
+  '\uFB70': '\u06A6',
+  '\uFB71': '\u06A6',
+  '\uFB72': '\u0684',
+  '\uFB73': '\u0684',
+  '\uFB74': '\u0684',
+  '\uFB75': '\u0684',
+  '\uFB76': '\u0683',
+  '\uFB77': '\u0683',
+  '\uFB78': '\u0683',
+  '\uFB79': '\u0683',
+  '\uFB7A': '\u0686',
+  '\uFB7B': '\u0686',
+  '\uFB7C': '\u0686',
+  '\uFB7D': '\u0686',
+  '\uFB7E': '\u0687',
+  '\uFB7F': '\u0687',
+  '\uFB80': '\u0687',
+  '\uFB81': '\u0687',
+  '\uFB82': '\u068D',
+  '\uFB83': '\u068D',
+  '\uFB84': '\u068C',
+  '\uFB85': '\u068C',
+  '\uFB86': '\u068E',
+  '\uFB87': '\u068E',
+  '\uFB88': '\u0688',
+  '\uFB89': '\u0688',
+  '\uFB8A': '\u0698',
+  '\uFB8B': '\u0698',
+  '\uFB8C': '\u0691',
+  '\uFB8D': '\u0691',
+  '\uFB8E': '\u06A9',
+  '\uFB8F': '\u06A9',
+  '\uFB90': '\u06A9',
+  '\uFB91': '\u06A9',
+  '\uFB92': '\u06AF',
+  '\uFB93': '\u06AF',
+  '\uFB94': '\u06AF',
+  '\uFB95': '\u06AF',
+  '\uFB96': '\u06B3',
+  '\uFB97': '\u06B3',
+  '\uFB98': '\u06B3',
+  '\uFB99': '\u06B3',
+  '\uFB9A': '\u06B1',
+  '\uFB9B': '\u06B1',
+  '\uFB9C': '\u06B1',
+  '\uFB9D': '\u06B1',
+  '\uFB9E': '\u06BA',
+  '\uFB9F': '\u06BA',
+  '\uFBA0': '\u06BB',
+  '\uFBA1': '\u06BB',
+  '\uFBA2': '\u06BB',
+  '\uFBA3': '\u06BB',
+  '\uFBA4': '\u06C0',
+  '\uFBA5': '\u06C0',
+  '\uFBA6': '\u06C1',
+  '\uFBA7': '\u06C1',
+  '\uFBA8': '\u06C1',
+  '\uFBA9': '\u06C1',
+  '\uFBAA': '\u06BE',
+  '\uFBAB': '\u06BE',
+  '\uFBAC': '\u06BE',
+  '\uFBAD': '\u06BE',
+  '\uFBAE': '\u06D2',
+  '\uFBAF': '\u06D2',
+  '\uFBB0': '\u06D3',
+  '\uFBB1': '\u06D3',
+  '\uFBD3': '\u06AD',
+  '\uFBD4': '\u06AD',
+  '\uFBD5': '\u06AD',
+  '\uFBD6': '\u06AD',
+  '\uFBD7': '\u06C7',
+  '\uFBD8': '\u06C7',
+  '\uFBD9': '\u06C6',
+  '\uFBDA': '\u06C6',
+  '\uFBDB': '\u06C8',
+  '\uFBDC': '\u06C8',
+  '\uFBDD': '\u0677',
+  '\uFBDE': '\u06CB',
+  '\uFBDF': '\u06CB',
+  '\uFBE0': '\u06C5',
+  '\uFBE1': '\u06C5',
+  '\uFBE2': '\u06C9',
+  '\uFBE3': '\u06C9',
+  '\uFBE4': '\u06D0',
+  '\uFBE5': '\u06D0',
+  '\uFBE6': '\u06D0',
+  '\uFBE7': '\u06D0',
+  '\uFBE8': '\u0649',
+  '\uFBE9': '\u0649',
+  '\uFBEA': '\u0626\u0627',
+  '\uFBEB': '\u0626\u0627',
+  '\uFBEC': '\u0626\u06D5',
+  '\uFBED': '\u0626\u06D5',
+  '\uFBEE': '\u0626\u0648',
+  '\uFBEF': '\u0626\u0648',
+  '\uFBF0': '\u0626\u06C7',
+  '\uFBF1': '\u0626\u06C7',
+  '\uFBF2': '\u0626\u06C6',
+  '\uFBF3': '\u0626\u06C6',
+  '\uFBF4': '\u0626\u06C8',
+  '\uFBF5': '\u0626\u06C8',
+  '\uFBF6': '\u0626\u06D0',
+  '\uFBF7': '\u0626\u06D0',
+  '\uFBF8': '\u0626\u06D0',
+  '\uFBF9': '\u0626\u0649',
+  '\uFBFA': '\u0626\u0649',
+  '\uFBFB': '\u0626\u0649',
+  '\uFBFC': '\u06CC',
+  '\uFBFD': '\u06CC',
+  '\uFBFE': '\u06CC',
+  '\uFBFF': '\u06CC',
+  '\uFC00': '\u0626\u062C',
+  '\uFC01': '\u0626\u062D',
+  '\uFC02': '\u0626\u0645',
+  '\uFC03': '\u0626\u0649',
+  '\uFC04': '\u0626\u064A',
+  '\uFC05': '\u0628\u062C',
+  '\uFC06': '\u0628\u062D',
+  '\uFC07': '\u0628\u062E',
+  '\uFC08': '\u0628\u0645',
+  '\uFC09': '\u0628\u0649',
+  '\uFC0A': '\u0628\u064A',
+  '\uFC0B': '\u062A\u062C',
+  '\uFC0C': '\u062A\u062D',
+  '\uFC0D': '\u062A\u062E',
+  '\uFC0E': '\u062A\u0645',
+  '\uFC0F': '\u062A\u0649',
+  '\uFC10': '\u062A\u064A',
+  '\uFC11': '\u062B\u062C',
+  '\uFC12': '\u062B\u0645',
+  '\uFC13': '\u062B\u0649',
+  '\uFC14': '\u062B\u064A',
+  '\uFC15': '\u062C\u062D',
+  '\uFC16': '\u062C\u0645',
+  '\uFC17': '\u062D\u062C',
+  '\uFC18': '\u062D\u0645',
+  '\uFC19': '\u062E\u062C',
+  '\uFC1A': '\u062E\u062D',
+  '\uFC1B': '\u062E\u0645',
+  '\uFC1C': '\u0633\u062C',
+  '\uFC1D': '\u0633\u062D',
+  '\uFC1E': '\u0633\u062E',
+  '\uFC1F': '\u0633\u0645',
+  '\uFC20': '\u0635\u062D',
+  '\uFC21': '\u0635\u0645',
+  '\uFC22': '\u0636\u062C',
+  '\uFC23': '\u0636\u062D',
+  '\uFC24': '\u0636\u062E',
+  '\uFC25': '\u0636\u0645',
+  '\uFC26': '\u0637\u062D',
+  '\uFC27': '\u0637\u0645',
+  '\uFC28': '\u0638\u0645',
+  '\uFC29': '\u0639\u062C',
+  '\uFC2A': '\u0639\u0645',
+  '\uFC2B': '\u063A\u062C',
+  '\uFC2C': '\u063A\u0645',
+  '\uFC2D': '\u0641\u062C',
+  '\uFC2E': '\u0641\u062D',
+  '\uFC2F': '\u0641\u062E',
+  '\uFC30': '\u0641\u0645',
+  '\uFC31': '\u0641\u0649',
+  '\uFC32': '\u0641\u064A',
+  '\uFC33': '\u0642\u062D',
+  '\uFC34': '\u0642\u0645',
+  '\uFC35': '\u0642\u0649',
+  '\uFC36': '\u0642\u064A',
+  '\uFC37': '\u0643\u0627',
+  '\uFC38': '\u0643\u062C',
+  '\uFC39': '\u0643\u062D',
+  '\uFC3A': '\u0643\u062E',
+  '\uFC3B': '\u0643\u0644',
+  '\uFC3C': '\u0643\u0645',
+  '\uFC3D': '\u0643\u0649',
+  '\uFC3E': '\u0643\u064A',
+  '\uFC3F': '\u0644\u062C',
+  '\uFC40': '\u0644\u062D',
+  '\uFC41': '\u0644\u062E',
+  '\uFC42': '\u0644\u0645',
+  '\uFC43': '\u0644\u0649',
+  '\uFC44': '\u0644\u064A',
+  '\uFC45': '\u0645\u062C',
+  '\uFC46': '\u0645\u062D',
+  '\uFC47': '\u0645\u062E',
+  '\uFC48': '\u0645\u0645',
+  '\uFC49': '\u0645\u0649',
+  '\uFC4A': '\u0645\u064A',
+  '\uFC4B': '\u0646\u062C',
+  '\uFC4C': '\u0646\u062D',
+  '\uFC4D': '\u0646\u062E',
+  '\uFC4E': '\u0646\u0645',
+  '\uFC4F': '\u0646\u0649',
+  '\uFC50': '\u0646\u064A',
+  '\uFC51': '\u0647\u062C',
+  '\uFC52': '\u0647\u0645',
+  '\uFC53': '\u0647\u0649',
+  '\uFC54': '\u0647\u064A',
+  '\uFC55': '\u064A\u062C',
+  '\uFC56': '\u064A\u062D',
+  '\uFC57': '\u064A\u062E',
+  '\uFC58': '\u064A\u0645',
+  '\uFC59': '\u064A\u0649',
+  '\uFC5A': '\u064A\u064A',
+  '\uFC5B': '\u0630\u0670',
+  '\uFC5C': '\u0631\u0670',
+  '\uFC5D': '\u0649\u0670',
+  '\uFC5E': '\u0020\u064C\u0651',
+  '\uFC5F': '\u0020\u064D\u0651',
+  '\uFC60': '\u0020\u064E\u0651',
+  '\uFC61': '\u0020\u064F\u0651',
+  '\uFC62': '\u0020\u0650\u0651',
+  '\uFC63': '\u0020\u0651\u0670',
+  '\uFC64': '\u0626\u0631',
+  '\uFC65': '\u0626\u0632',
+  '\uFC66': '\u0626\u0645',
+  '\uFC67': '\u0626\u0646',
+  '\uFC68': '\u0626\u0649',
+  '\uFC69': '\u0626\u064A',
+  '\uFC6A': '\u0628\u0631',
+  '\uFC6B': '\u0628\u0632',
+  '\uFC6C': '\u0628\u0645',
+  '\uFC6D': '\u0628\u0646',
+  '\uFC6E': '\u0628\u0649',
+  '\uFC6F': '\u0628\u064A',
+  '\uFC70': '\u062A\u0631',
+  '\uFC71': '\u062A\u0632',
+  '\uFC72': '\u062A\u0645',
+  '\uFC73': '\u062A\u0646',
+  '\uFC74': '\u062A\u0649',
+  '\uFC75': '\u062A\u064A',
+  '\uFC76': '\u062B\u0631',
+  '\uFC77': '\u062B\u0632',
+  '\uFC78': '\u062B\u0645',
+  '\uFC79': '\u062B\u0646',
+  '\uFC7A': '\u062B\u0649',
+  '\uFC7B': '\u062B\u064A',
+  '\uFC7C': '\u0641\u0649',
+  '\uFC7D': '\u0641\u064A',
+  '\uFC7E': '\u0642\u0649',
+  '\uFC7F': '\u0642\u064A',
+  '\uFC80': '\u0643\u0627',
+  '\uFC81': '\u0643\u0644',
+  '\uFC82': '\u0643\u0645',
+  '\uFC83': '\u0643\u0649',
+  '\uFC84': '\u0643\u064A',
+  '\uFC85': '\u0644\u0645',
+  '\uFC86': '\u0644\u0649',
+  '\uFC87': '\u0644\u064A',
+  '\uFC88': '\u0645\u0627',
+  '\uFC89': '\u0645\u0645',
+  '\uFC8A': '\u0646\u0631',
+  '\uFC8B': '\u0646\u0632',
+  '\uFC8C': '\u0646\u0645',
+  '\uFC8D': '\u0646\u0646',
+  '\uFC8E': '\u0646\u0649',
+  '\uFC8F': '\u0646\u064A',
+  '\uFC90': '\u0649\u0670',
+  '\uFC91': '\u064A\u0631',
+  '\uFC92': '\u064A\u0632',
+  '\uFC93': '\u064A\u0645',
+  '\uFC94': '\u064A\u0646',
+  '\uFC95': '\u064A\u0649',
+  '\uFC96': '\u064A\u064A',
+  '\uFC97': '\u0626\u062C',
+  '\uFC98': '\u0626\u062D',
+  '\uFC99': '\u0626\u062E',
+  '\uFC9A': '\u0626\u0645',
+  '\uFC9B': '\u0626\u0647',
+  '\uFC9C': '\u0628\u062C',
+  '\uFC9D': '\u0628\u062D',
+  '\uFC9E': '\u0628\u062E',
+  '\uFC9F': '\u0628\u0645',
+  '\uFCA0': '\u0628\u0647',
+  '\uFCA1': '\u062A\u062C',
+  '\uFCA2': '\u062A\u062D',
+  '\uFCA3': '\u062A\u062E',
+  '\uFCA4': '\u062A\u0645',
+  '\uFCA5': '\u062A\u0647',
+  '\uFCA6': '\u062B\u0645',
+  '\uFCA7': '\u062C\u062D',
+  '\uFCA8': '\u062C\u0645',
+  '\uFCA9': '\u062D\u062C',
+  '\uFCAA': '\u062D\u0645',
+  '\uFCAB': '\u062E\u062C',
+  '\uFCAC': '\u062E\u0645',
+  '\uFCAD': '\u0633\u062C',
+  '\uFCAE': '\u0633\u062D',
+  '\uFCAF': '\u0633\u062E',
+  '\uFCB0': '\u0633\u0645',
+  '\uFCB1': '\u0635\u062D',
+  '\uFCB2': '\u0635\u062E',
+  '\uFCB3': '\u0635\u0645',
+  '\uFCB4': '\u0636\u062C',
+  '\uFCB5': '\u0636\u062D',
+  '\uFCB6': '\u0636\u062E',
+  '\uFCB7': '\u0636\u0645',
+  '\uFCB8': '\u0637\u062D',
+  '\uFCB9': '\u0638\u0645',
+  '\uFCBA': '\u0639\u062C',
+  '\uFCBB': '\u0639\u0645',
+  '\uFCBC': '\u063A\u062C',
+  '\uFCBD': '\u063A\u0645',
+  '\uFCBE': '\u0641\u062C',
+  '\uFCBF': '\u0641\u062D',
+  '\uFCC0': '\u0641\u062E',
+  '\uFCC1': '\u0641\u0645',
+  '\uFCC2': '\u0642\u062D',
+  '\uFCC3': '\u0642\u0645',
+  '\uFCC4': '\u0643\u062C',
+  '\uFCC5': '\u0643\u062D',
+  '\uFCC6': '\u0643\u062E',
+  '\uFCC7': '\u0643\u0644',
+  '\uFCC8': '\u0643\u0645',
+  '\uFCC9': '\u0644\u062C',
+  '\uFCCA': '\u0644\u062D',
+  '\uFCCB': '\u0644\u062E',
+  '\uFCCC': '\u0644\u0645',
+  '\uFCCD': '\u0644\u0647',
+  '\uFCCE': '\u0645\u062C',
+  '\uFCCF': '\u0645\u062D',
+  '\uFCD0': '\u0645\u062E',
+  '\uFCD1': '\u0645\u0645',
+  '\uFCD2': '\u0646\u062C',
+  '\uFCD3': '\u0646\u062D',
+  '\uFCD4': '\u0646\u062E',
+  '\uFCD5': '\u0646\u0645',
+  '\uFCD6': '\u0646\u0647',
+  '\uFCD7': '\u0647\u062C',
+  '\uFCD8': '\u0647\u0645',
+  '\uFCD9': '\u0647\u0670',
+  '\uFCDA': '\u064A\u062C',
+  '\uFCDB': '\u064A\u062D',
+  '\uFCDC': '\u064A\u062E',
+  '\uFCDD': '\u064A\u0645',
+  '\uFCDE': '\u064A\u0647',
+  '\uFCDF': '\u0626\u0645',
+  '\uFCE0': '\u0626\u0647',
+  '\uFCE1': '\u0628\u0645',
+  '\uFCE2': '\u0628\u0647',
+  '\uFCE3': '\u062A\u0645',
+  '\uFCE4': '\u062A\u0647',
+  '\uFCE5': '\u062B\u0645',
+  '\uFCE6': '\u062B\u0647',
+  '\uFCE7': '\u0633\u0645',
+  '\uFCE8': '\u0633\u0647',
+  '\uFCE9': '\u0634\u0645',
+  '\uFCEA': '\u0634\u0647',
+  '\uFCEB': '\u0643\u0644',
+  '\uFCEC': '\u0643\u0645',
+  '\uFCED': '\u0644\u0645',
+  '\uFCEE': '\u0646\u0645',
+  '\uFCEF': '\u0646\u0647',
+  '\uFCF0': '\u064A\u0645',
+  '\uFCF1': '\u064A\u0647',
+  '\uFCF2': '\u0640\u064E\u0651',
+  '\uFCF3': '\u0640\u064F\u0651',
+  '\uFCF4': '\u0640\u0650\u0651',
+  '\uFCF5': '\u0637\u0649',
+  '\uFCF6': '\u0637\u064A',
+  '\uFCF7': '\u0639\u0649',
+  '\uFCF8': '\u0639\u064A',
+  '\uFCF9': '\u063A\u0649',
+  '\uFCFA': '\u063A\u064A',
+  '\uFCFB': '\u0633\u0649',
+  '\uFCFC': '\u0633\u064A',
+  '\uFCFD': '\u0634\u0649',
+  '\uFCFE': '\u0634\u064A',
+  '\uFCFF': '\u062D\u0649',
+  '\uFD00': '\u062D\u064A',
+  '\uFD01': '\u062C\u0649',
+  '\uFD02': '\u062C\u064A',
+  '\uFD03': '\u062E\u0649',
+  '\uFD04': '\u062E\u064A',
+  '\uFD05': '\u0635\u0649',
+  '\uFD06': '\u0635\u064A',
+  '\uFD07': '\u0636\u0649',
+  '\uFD08': '\u0636\u064A',
+  '\uFD09': '\u0634\u062C',
+  '\uFD0A': '\u0634\u062D',
+  '\uFD0B': '\u0634\u062E',
+  '\uFD0C': '\u0634\u0645',
+  '\uFD0D': '\u0634\u0631',
+  '\uFD0E': '\u0633\u0631',
+  '\uFD0F': '\u0635\u0631',
+  '\uFD10': '\u0636\u0631',
+  '\uFD11': '\u0637\u0649',
+  '\uFD12': '\u0637\u064A',
+  '\uFD13': '\u0639\u0649',
+  '\uFD14': '\u0639\u064A',
+  '\uFD15': '\u063A\u0649',
+  '\uFD16': '\u063A\u064A',
+  '\uFD17': '\u0633\u0649',
+  '\uFD18': '\u0633\u064A',
+  '\uFD19': '\u0634\u0649',
+  '\uFD1A': '\u0634\u064A',
+  '\uFD1B': '\u062D\u0649',
+  '\uFD1C': '\u062D\u064A',
+  '\uFD1D': '\u062C\u0649',
+  '\uFD1E': '\u062C\u064A',
+  '\uFD1F': '\u062E\u0649',
+  '\uFD20': '\u062E\u064A',
+  '\uFD21': '\u0635\u0649',
+  '\uFD22': '\u0635\u064A',
+  '\uFD23': '\u0636\u0649',
+  '\uFD24': '\u0636\u064A',
+  '\uFD25': '\u0634\u062C',
+  '\uFD26': '\u0634\u062D',
+  '\uFD27': '\u0634\u062E',
+  '\uFD28': '\u0634\u0645',
+  '\uFD29': '\u0634\u0631',
+  '\uFD2A': '\u0633\u0631',
+  '\uFD2B': '\u0635\u0631',
+  '\uFD2C': '\u0636\u0631',
+  '\uFD2D': '\u0634\u062C',
+  '\uFD2E': '\u0634\u062D',
+  '\uFD2F': '\u0634\u062E',
+  '\uFD30': '\u0634\u0645',
+  '\uFD31': '\u0633\u0647',
+  '\uFD32': '\u0634\u0647',
+  '\uFD33': '\u0637\u0645',
+  '\uFD34': '\u0633\u062C',
+  '\uFD35': '\u0633\u062D',
+  '\uFD36': '\u0633\u062E',
+  '\uFD37': '\u0634\u062C',
+  '\uFD38': '\u0634\u062D',
+  '\uFD39': '\u0634\u062E',
+  '\uFD3A': '\u0637\u0645',
+  '\uFD3B': '\u0638\u0645',
+  '\uFD3C': '\u0627\u064B',
+  '\uFD3D': '\u0627\u064B',
+  '\uFD50': '\u062A\u062C\u0645',
+  '\uFD51': '\u062A\u062D\u062C',
+  '\uFD52': '\u062A\u062D\u062C',
+  '\uFD53': '\u062A\u062D\u0645',
+  '\uFD54': '\u062A\u062E\u0645',
+  '\uFD55': '\u062A\u0645\u062C',
+  '\uFD56': '\u062A\u0645\u062D',
+  '\uFD57': '\u062A\u0645\u062E',
+  '\uFD58': '\u062C\u0645\u062D',
+  '\uFD59': '\u062C\u0645\u062D',
+  '\uFD5A': '\u062D\u0645\u064A',
+  '\uFD5B': '\u062D\u0645\u0649',
+  '\uFD5C': '\u0633\u062D\u062C',
+  '\uFD5D': '\u0633\u062C\u062D',
+  '\uFD5E': '\u0633\u062C\u0649',
+  '\uFD5F': '\u0633\u0645\u062D',
+  '\uFD60': '\u0633\u0645\u062D',
+  '\uFD61': '\u0633\u0645\u062C',
+  '\uFD62': '\u0633\u0645\u0645',
+  '\uFD63': '\u0633\u0645\u0645',
+  '\uFD64': '\u0635\u062D\u062D',
+  '\uFD65': '\u0635\u062D\u062D',
+  '\uFD66': '\u0635\u0645\u0645',
+  '\uFD67': '\u0634\u062D\u0645',
+  '\uFD68': '\u0634\u062D\u0645',
+  '\uFD69': '\u0634\u062C\u064A',
+  '\uFD6A': '\u0634\u0645\u062E',
+  '\uFD6B': '\u0634\u0645\u062E',
+  '\uFD6C': '\u0634\u0645\u0645',
+  '\uFD6D': '\u0634\u0645\u0645',
+  '\uFD6E': '\u0636\u062D\u0649',
+  '\uFD6F': '\u0636\u062E\u0645',
+  '\uFD70': '\u0636\u062E\u0645',
+  '\uFD71': '\u0637\u0645\u062D',
+  '\uFD72': '\u0637\u0645\u062D',
+  '\uFD73': '\u0637\u0645\u0645',
+  '\uFD74': '\u0637\u0645\u064A',
+  '\uFD75': '\u0639\u062C\u0645',
+  '\uFD76': '\u0639\u0645\u0645',
+  '\uFD77': '\u0639\u0645\u0645',
+  '\uFD78': '\u0639\u0645\u0649',
+  '\uFD79': '\u063A\u0645\u0645',
+  '\uFD7A': '\u063A\u0645\u064A',
+  '\uFD7B': '\u063A\u0645\u0649',
+  '\uFD7C': '\u0641\u062E\u0645',
+  '\uFD7D': '\u0641\u062E\u0645',
+  '\uFD7E': '\u0642\u0645\u062D',
+  '\uFD7F': '\u0642\u0645\u0645',
+  '\uFD80': '\u0644\u062D\u0645',
+  '\uFD81': '\u0644\u062D\u064A',
+  '\uFD82': '\u0644\u062D\u0649',
+  '\uFD83': '\u0644\u062C\u062C',
+  '\uFD84': '\u0644\u062C\u062C',
+  '\uFD85': '\u0644\u062E\u0645',
+  '\uFD86': '\u0644\u062E\u0645',
+  '\uFD87': '\u0644\u0645\u062D',
+  '\uFD88': '\u0644\u0645\u062D',
+  '\uFD89': '\u0645\u062D\u062C',
+  '\uFD8A': '\u0645\u062D\u0645',
+  '\uFD8B': '\u0645\u062D\u064A',
+  '\uFD8C': '\u0645\u062C\u062D',
+  '\uFD8D': '\u0645\u062C\u0645',
+  '\uFD8E': '\u0645\u062E\u062C',
+  '\uFD8F': '\u0645\u062E\u0645',
+  '\uFD92': '\u0645\u062C\u062E',
+  '\uFD93': '\u0647\u0645\u062C',
+  '\uFD94': '\u0647\u0645\u0645',
+  '\uFD95': '\u0646\u062D\u0645',
+  '\uFD96': '\u0646\u062D\u0649',
+  '\uFD97': '\u0646\u062C\u0645',
+  '\uFD98': '\u0646\u062C\u0645',
+  '\uFD99': '\u0646\u062C\u0649',
+  '\uFD9A': '\u0646\u0645\u064A',
+  '\uFD9B': '\u0646\u0645\u0649',
+  '\uFD9C': '\u064A\u0645\u0645',
+  '\uFD9D': '\u064A\u0645\u0645',
+  '\uFD9E': '\u0628\u062E\u064A',
+  '\uFD9F': '\u062A\u062C\u064A',
+  '\uFDA0': '\u062A\u062C\u0649',
+  '\uFDA1': '\u062A\u062E\u064A',
+  '\uFDA2': '\u062A\u062E\u0649',
+  '\uFDA3': '\u062A\u0645\u064A',
+  '\uFDA4': '\u062A\u0645\u0649',
+  '\uFDA5': '\u062C\u0645\u064A',
+  '\uFDA6': '\u062C\u062D\u0649',
+  '\uFDA7': '\u062C\u0645\u0649',
+  '\uFDA8': '\u0633\u062E\u0649',
+  '\uFDA9': '\u0635\u062D\u064A',
+  '\uFDAA': '\u0634\u062D\u064A',
+  '\uFDAB': '\u0636\u062D\u064A',
+  '\uFDAC': '\u0644\u062C\u064A',
+  '\uFDAD': '\u0644\u0645\u064A',
+  '\uFDAE': '\u064A\u062D\u064A',
+  '\uFDAF': '\u064A\u062C\u064A',
+  '\uFDB0': '\u064A\u0645\u064A',
+  '\uFDB1': '\u0645\u0645\u064A',
+  '\uFDB2': '\u0642\u0645\u064A',
+  '\uFDB3': '\u0646\u062D\u064A',
+  '\uFDB4': '\u0642\u0645\u062D',
+  '\uFDB5': '\u0644\u062D\u0645',
+  '\uFDB6': '\u0639\u0645\u064A',
+  '\uFDB7': '\u0643\u0645\u064A',
+  '\uFDB8': '\u0646\u062C\u062D',
+  '\uFDB9': '\u0645\u062E\u064A',
+  '\uFDBA': '\u0644\u062C\u0645',
+  '\uFDBB': '\u0643\u0645\u0645',
+  '\uFDBC': '\u0644\u062C\u0645',
+  '\uFDBD': '\u0646\u062C\u062D',
+  '\uFDBE': '\u062C\u062D\u064A',
+  '\uFDBF': '\u062D\u062C\u064A',
+  '\uFDC0': '\u0645\u062C\u064A',
+  '\uFDC1': '\u0641\u0645\u064A',
+  '\uFDC2': '\u0628\u062D\u064A',
+  '\uFDC3': '\u0643\u0645\u0645',
+  '\uFDC4': '\u0639\u062C\u0645',
+  '\uFDC5': '\u0635\u0645\u0645',
+  '\uFDC6': '\u0633\u062E\u064A',
+  '\uFDC7': '\u0646\u062C\u064A',
+  '\uFE49': '\u203E',
+  '\uFE4A': '\u203E',
+  '\uFE4B': '\u203E',
+  '\uFE4C': '\u203E',
+  '\uFE4D': '\u005F',
+  '\uFE4E': '\u005F',
+  '\uFE4F': '\u005F',
+  '\uFE80': '\u0621',
+  '\uFE81': '\u0622',
+  '\uFE82': '\u0622',
+  '\uFE83': '\u0623',
+  '\uFE84': '\u0623',
+  '\uFE85': '\u0624',
+  '\uFE86': '\u0624',
+  '\uFE87': '\u0625',
+  '\uFE88': '\u0625',
+  '\uFE89': '\u0626',
+  '\uFE8A': '\u0626',
+  '\uFE8B': '\u0626',
+  '\uFE8C': '\u0626',
+  '\uFE8D': '\u0627',
+  '\uFE8E': '\u0627',
+  '\uFE8F': '\u0628',
+  '\uFE90': '\u0628',
+  '\uFE91': '\u0628',
+  '\uFE92': '\u0628',
+  '\uFE93': '\u0629',
+  '\uFE94': '\u0629',
+  '\uFE95': '\u062A',
+  '\uFE96': '\u062A',
+  '\uFE97': '\u062A',
+  '\uFE98': '\u062A',
+  '\uFE99': '\u062B',
+  '\uFE9A': '\u062B',
+  '\uFE9B': '\u062B',
+  '\uFE9C': '\u062B',
+  '\uFE9D': '\u062C',
+  '\uFE9E': '\u062C',
+  '\uFE9F': '\u062C',
+  '\uFEA0': '\u062C',
+  '\uFEA1': '\u062D',
+  '\uFEA2': '\u062D',
+  '\uFEA3': '\u062D',
+  '\uFEA4': '\u062D',
+  '\uFEA5': '\u062E',
+  '\uFEA6': '\u062E',
+  '\uFEA7': '\u062E',
+  '\uFEA8': '\u062E',
+  '\uFEA9': '\u062F',
+  '\uFEAA': '\u062F',
+  '\uFEAB': '\u0630',
+  '\uFEAC': '\u0630',
+  '\uFEAD': '\u0631',
+  '\uFEAE': '\u0631',
+  '\uFEAF': '\u0632',
+  '\uFEB0': '\u0632',
+  '\uFEB1': '\u0633',
+  '\uFEB2': '\u0633',
+  '\uFEB3': '\u0633',
+  '\uFEB4': '\u0633',
+  '\uFEB5': '\u0634',
+  '\uFEB6': '\u0634',
+  '\uFEB7': '\u0634',
+  '\uFEB8': '\u0634',
+  '\uFEB9': '\u0635',
+  '\uFEBA': '\u0635',
+  '\uFEBB': '\u0635',
+  '\uFEBC': '\u0635',
+  '\uFEBD': '\u0636',
+  '\uFEBE': '\u0636',
+  '\uFEBF': '\u0636',
+  '\uFEC0': '\u0636',
+  '\uFEC1': '\u0637',
+  '\uFEC2': '\u0637',
+  '\uFEC3': '\u0637',
+  '\uFEC4': '\u0637',
+  '\uFEC5': '\u0638',
+  '\uFEC6': '\u0638',
+  '\uFEC7': '\u0638',
+  '\uFEC8': '\u0638',
+  '\uFEC9': '\u0639',
+  '\uFECA': '\u0639',
+  '\uFECB': '\u0639',
+  '\uFECC': '\u0639',
+  '\uFECD': '\u063A',
+  '\uFECE': '\u063A',
+  '\uFECF': '\u063A',
+  '\uFED0': '\u063A',
+  '\uFED1': '\u0641',
+  '\uFED2': '\u0641',
+  '\uFED3': '\u0641',
+  '\uFED4': '\u0641',
+  '\uFED5': '\u0642',
+  '\uFED6': '\u0642',
+  '\uFED7': '\u0642',
+  '\uFED8': '\u0642',
+  '\uFED9': '\u0643',
+  '\uFEDA': '\u0643',
+  '\uFEDB': '\u0643',
+  '\uFEDC': '\u0643',
+  '\uFEDD': '\u0644',
+  '\uFEDE': '\u0644',
+  '\uFEDF': '\u0644',
+  '\uFEE0': '\u0644',
+  '\uFEE1': '\u0645',
+  '\uFEE2': '\u0645',
+  '\uFEE3': '\u0645',
+  '\uFEE4': '\u0645',
+  '\uFEE5': '\u0646',
+  '\uFEE6': '\u0646',
+  '\uFEE7': '\u0646',
+  '\uFEE8': '\u0646',
+  '\uFEE9': '\u0647',
+  '\uFEEA': '\u0647',
+  '\uFEEB': '\u0647',
+  '\uFEEC': '\u0647',
+  '\uFEED': '\u0648',
+  '\uFEEE': '\u0648',
+  '\uFEEF': '\u0649',
+  '\uFEF0': '\u0649',
+  '\uFEF1': '\u064A',
+  '\uFEF2': '\u064A',
+  '\uFEF3': '\u064A',
+  '\uFEF4': '\u064A',
+  '\uFEF5': '\u0644\u0622',
+  '\uFEF6': '\u0644\u0622',
+  '\uFEF7': '\u0644\u0623',
+  '\uFEF8': '\u0644\u0623',
+  '\uFEF9': '\u0644\u0625',
+  '\uFEFA': '\u0644\u0625',
+  '\uFEFB': '\u0644\u0627',
+  '\uFEFC': '\u0644\u0627'
+};
+
+function reverseIfRtl(chars) {
+  var charsLength = chars.length;
+  //reverse an arabic ligature
+  if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) {
+    return chars;
+  }
+  var s = '';
+  for (var ii = charsLength - 1; ii >= 0; ii--) {
+    s += chars[ii];
+  }
+  return s;
+}
+
+function adjustWidths(properties) {
+  if (properties.fontMatrix[0] === FONT_IDENTITY_MATRIX[0]) {
+    return;
+  }
+  // adjusting width to fontMatrix scale
+  var scale = 0.001 / properties.fontMatrix[0];
+  var glyphsWidths = properties.widths;
+  for (var glyph in glyphsWidths) {
+    glyphsWidths[glyph] *= scale;
+  }
+  properties.defaultWidth *= scale;
+}
+
+function getFontType(type, subtype) {
+  switch (type) {
+    case 'Type1':
+      return subtype === 'Type1C' ? FontType.TYPE1C : FontType.TYPE1;
+    case 'CIDFontType0':
+      return subtype === 'CIDFontType0C' ? FontType.CIDFONTTYPE0C :
+        FontType.CIDFONTTYPE0;
+    case 'OpenType':
+      return FontType.OPENTYPE;
+    case 'TrueType':
+      return FontType.TRUETYPE;
+    case 'CIDFontType2':
+      return FontType.CIDFONTTYPE2;
+    case 'MMType1':
+      return FontType.MMTYPE1;
+    case 'Type0':
+      return FontType.TYPE0;
+    default:
+      return FontType.UNKNOWN;
+  }
+}
+
+var Glyph = (function GlyphClosure() {
+  function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId) {
+    this.fontChar = fontChar;
+    this.unicode = unicode;
+    this.accent = accent;
+    this.width = width;
+    this.vmetric = vmetric;
+    this.operatorListId = operatorListId;
+  }
+
+  Glyph.prototype.matchesForCache =
+      function(fontChar, unicode, accent, width, vmetric, operatorListId) {
+    return this.fontChar === fontChar &&
+           this.unicode === unicode &&
+           this.accent === accent &&
+           this.width === width &&
+           this.vmetric === vmetric &&
+           this.operatorListId === operatorListId;
+  };
+
+  return Glyph;
+})();
+
+var ToUnicodeMap = (function ToUnicodeMapClosure() {
+  function ToUnicodeMap(cmap) {
+    // The elements of this._map can be integers or strings, depending on how
+    // |cmap| was created.
+    this._map = cmap;
+  }
+
+  ToUnicodeMap.prototype = {
+    get length() {
+      return this._map.length;
+    },
+
+    forEach: function(callback) {
+      for (var charCode in this._map) {
+        callback(charCode, this._map[charCode].charCodeAt(0));
+      }
+    },
+
+    has: function(i) {
+      return this._map[i] !== undefined;
+    },
+
+    get: function(i) {
+      return this._map[i];
+    },
+
+    charCodeOf: function(v) {
+      return this._map.indexOf(v);
+    }
+  };
+
+  return ToUnicodeMap;
+})();
+
+var IdentityToUnicodeMap = (function IdentityToUnicodeMapClosure() {
+  function IdentityToUnicodeMap(firstChar, lastChar) {
+    this.firstChar = firstChar;
+    this.lastChar = lastChar;
+  }
+
+  IdentityToUnicodeMap.prototype = {
+    get length() {
+      return (this.lastChar + 1) - this.firstChar;
+    },
+
+    forEach: function (callback) {
+      for (var i = this.firstChar, ii = this.lastChar; i <= ii; i++) {
+        callback(i, i);
+      }
+    },
+
+    has: function (i) {
+      return this.firstChar <= i && i <= this.lastChar;
+    },
+
+    get: function (i) {
+      if (this.firstChar <= i && i <= this.lastChar) {
+        return String.fromCharCode(i);
+      }
+      return undefined;
+    },
+
+    charCodeOf: function (v) {
+      error('should not call .charCodeOf');
+    }
+  };
+
+  return IdentityToUnicodeMap;
+})();
+
+var OpenTypeFileBuilder = (function OpenTypeFileBuilderClosure() {
+  function writeInt16(dest, offset, num) {
+    dest[offset] = (num >> 8) & 0xFF;
+    dest[offset + 1] = num & 0xFF;
+  }
+
+  function writeInt32(dest, offset, num) {
+    dest[offset] = (num >> 24) & 0xFF;
+    dest[offset + 1] = (num >> 16) & 0xFF;
+    dest[offset + 2] = (num >> 8) & 0xFF;
+    dest[offset + 3] = num & 0xFF;
+  }
+
+  function writeData(dest, offset, data) {
+    var i, ii;
+    if (data instanceof Uint8Array) {
+      dest.set(data, offset);
+    } else if (typeof data === 'string') {
+      for (i = 0, ii = data.length; i < ii; i++) {
+        dest[offset++] = data.charCodeAt(i) & 0xFF;
+      }
+    } else {
+      // treating everything else as array
+      for (i = 0, ii = data.length; i < ii; i++) {
+        dest[offset++] = data[i] & 0xFF;
+      }
+    }
+  }
+
+  function OpenTypeFileBuilder(sfnt) {
+    this.sfnt = sfnt;
+    this.tables = Object.create(null);
+  }
+
+  OpenTypeFileBuilder.getSearchParams =
+      function OpenTypeFileBuilder_getSearchParams(entriesCount, entrySize) {
+    var maxPower2 = 1, log2 = 0;
+    while ((maxPower2 ^ entriesCount) > maxPower2) {
+      maxPower2 <<= 1;
+      log2++;
+    }
+    var searchRange = maxPower2 * entrySize;
+    return {
+      range: searchRange,
+      entry: log2,
+      rangeShift: entrySize * entriesCount - searchRange
+    };
+  };
+
+  var OTF_HEADER_SIZE = 12;
+  var OTF_TABLE_ENTRY_SIZE = 16;
+
+  OpenTypeFileBuilder.prototype = {
+    toArray: function OpenTypeFileBuilder_toArray() {
+      var sfnt = this.sfnt;
+
+      // Tables needs to be written by ascendant alphabetic order
+      var tables = this.tables;
+      var tablesNames = Object.keys(tables);
+      tablesNames.sort();
+      var numTables = tablesNames.length;
+
+      var i, j, jj, table, tableName;
+      // layout the tables data
+      var offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE;
+      var tableOffsets = [offset];
+      for (i = 0; i < numTables; i++) {
+        table = tables[tablesNames[i]];
+        var paddedLength = ((table.length + 3) & ~3) >>> 0;
+        offset += paddedLength;
+        tableOffsets.push(offset);
+      }
+
+      var file = new Uint8Array(offset);
+      // write the table data first (mostly for checksum)
+      for (i = 0; i < numTables; i++) {
+        table = tables[tablesNames[i]];
+        writeData(file, tableOffsets[i], table);
+      }
+
+      // sfnt version (4 bytes)
+      if (sfnt === 'true') {
+        // Windows hates the Mac TrueType sfnt version number
+        sfnt = string32(0x00010000);
+      }
+      file[0] = sfnt.charCodeAt(0) & 0xFF;
+      file[1] = sfnt.charCodeAt(1) & 0xFF;
+      file[2] = sfnt.charCodeAt(2) & 0xFF;
+      file[3] = sfnt.charCodeAt(3) & 0xFF;
+
+      // numTables (2 bytes)
+      writeInt16(file, 4, numTables);
+
+      var searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16);
+
+      // searchRange (2 bytes)
+      writeInt16(file, 6, searchParams.range);
+      // entrySelector (2 bytes)
+      writeInt16(file, 8, searchParams.entry);
+      // rangeShift (2 bytes)
+      writeInt16(file, 10, searchParams.rangeShift);
+
+      offset = OTF_HEADER_SIZE;
+      // writing table entries
+      for (i = 0; i < numTables; i++) {
+        tableName = tablesNames[i];
+        file[offset] = tableName.charCodeAt(0) & 0xFF;
+        file[offset + 1] = tableName.charCodeAt(1) & 0xFF;
+        file[offset + 2] = tableName.charCodeAt(2) & 0xFF;
+        file[offset + 3] = tableName.charCodeAt(3) & 0xFF;
+
+        // checksum
+        var checksum = 0;
+        for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) {
+          var quad = (file[j] << 24) + (file[j + 1] << 16) +
+                     (file[j + 2] << 8) + file[j + 3];
+          checksum = (checksum + quad) | 0;
+        }
+        writeInt32(file, offset + 4, checksum);
+
+        // offset
+        writeInt32(file, offset + 8, tableOffsets[i]);
+        // length
+        writeInt32(file, offset + 12, tables[tableName].length);
+
+        offset += OTF_TABLE_ENTRY_SIZE;
+      }
+      return file;
+    },
+
+    addTable: function OpenTypeFileBuilder_addTable(tag, data) {
+      if (tag in this.tables) {
+        throw new Error('Table ' + tag + ' already exists');
+      }
+      this.tables[tag] = data;
+    }
+  };
+
+  return OpenTypeFileBuilder;
+})();
+
+// Problematic Unicode characters in the fonts that needs to be moved to avoid
+// issues when they are painted on the canvas, e.g. complex-script shaping or
+// control/whitespace characters. The ranges are listed in pairs: the first item
+// is a code of the first problematic code, the second one is the next
+// non-problematic code. The ranges must be in sorted order.
+var ProblematicCharRanges = new Int32Array([
+  // Control characters.
+  0x0000, 0x0020,
+  0x007F, 0x00A1,
+  0x00AD, 0x00AE,
+  // Chars that is used in complex-script shaping.
+  0x0600, 0x0780,
+  0x08A0, 0x10A0,
+  0x1780, 0x1800,
+  // General punctuation chars.
+  0x2000, 0x2010,
+  0x2011, 0x2012,
+  0x2028, 0x2030,
+  0x205F, 0x2070,
+  0x25CC, 0x25CD,
+  // Chars that is used in complex-script shaping.
+  0xAA60, 0xAA80,
+  // Specials Unicode block.
+  0xFFF0, 0x10000
+]);
+
+/**
+ * 'Font' is the class the outside world should use, it encapsulate all the font
+ * decoding logics whatever type it is (assuming the font type is supported).
+ *
+ * For example to read a Type1 font and to attach it to the document:
+ *   var type1Font = new Font("MyFontName", binaryFile, propertiesObject);
+ *   type1Font.bind();
+ */
+var Font = (function FontClosure() {
+  function Font(name, file, properties) {
+    var charCode, glyphName, fontChar;
+
+    this.name = name;
+    this.loadedName = properties.loadedName;
+    this.isType3Font = properties.isType3Font;
+    this.sizes = [];
+
+    this.glyphCache = {};
+
+    var names = name.split('+');
+    names = names.length > 1 ? names[1] : names[0];
+    names = names.split(/[-,_]/g)[0];
+    this.isSerifFont = !!(properties.flags & FontFlags.Serif);
+    this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);
+    this.isMonospace = !!(properties.flags & FontFlags.FixedPitch);
+
+    var type = properties.type;
+    var subtype = properties.subtype;
+    this.type = type;
+
+    this.fallbackName = (this.isMonospace ? 'monospace' :
+                         (this.isSerifFont ? 'serif' : 'sans-serif'));
+
+    this.differences = properties.differences;
+    this.widths = properties.widths;
+    this.defaultWidth = properties.defaultWidth;
+    this.composite = properties.composite;
+    this.wideChars = properties.wideChars;
+    this.cMap = properties.cMap;
+    this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS;
+    this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS;
+    this.fontMatrix = properties.fontMatrix;
+    this.bbox = properties.bbox;
+
+    this.toUnicode = properties.toUnicode = this.buildToUnicode(properties);
+
+    this.toFontChar = [];
+
+    if (properties.type === 'Type3') {
+      for (charCode = 0; charCode < 256; charCode++) {
+        this.toFontChar[charCode] = (this.differences[charCode] ||
+                                     properties.defaultEncoding[charCode]);
+      }
+      this.fontType = FontType.TYPE3;
+      return;
+    }
+
+    this.cidEncoding = properties.cidEncoding;
+    this.vertical = properties.vertical;
+    if (this.vertical) {
+      this.vmetrics = properties.vmetrics;
+      this.defaultVMetrics = properties.defaultVMetrics;
+    }
+
+    if (!file || file.isEmpty) {
+      if (file) {
+        // Some bad PDF generators will include empty font files,
+        // attempting to recover by assuming that no file exists.
+        warn('Font file is empty in "' + name + '" (' + this.loadedName + ')');
+      }
+
+      this.missingFile = true;
+      // The file data is not specified. Trying to fix the font name
+      // to be used with the canvas.font.
+      var fontName = name.replace(/[,_]/g, '-');
+      var isStandardFont = !!stdFontMap[fontName] ||
+        !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]);
+      fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName;
+
+      this.bold = (fontName.search(/bold/gi) !== -1);
+      this.italic = ((fontName.search(/oblique/gi) !== -1) ||
+                     (fontName.search(/italic/gi) !== -1));
+
+      // Use 'name' instead of 'fontName' here because the original
+      // name ArialBlack for example will be replaced by Helvetica.
+      this.black = (name.search(/Black/g) !== -1);
+
+      // if at least one width is present, remeasure all chars when exists
+      this.remeasure = Object.keys(this.widths).length > 0;
+      if (isStandardFont && type === 'CIDFontType2' &&
+          properties.cidEncoding.indexOf('Identity-') === 0) {
+        // Standard fonts might be embedded as CID font without glyph mapping.
+        // Building one based on GlyphMapForStandardFonts.
+        var map = [];
+        for (charCode in GlyphMapForStandardFonts) {
+          map[+charCode] = GlyphMapForStandardFonts[charCode];
+        }
+        if (/ArialBlack/i.test(name)) {
+          for (charCode in SupplementalGlyphMapForArialBlack) {
+            map[+charCode] = SupplementalGlyphMapForArialBlack[charCode];
+          }
+        }
+        var isIdentityUnicode = this.toUnicode instanceof IdentityToUnicodeMap;
+        if (!isIdentityUnicode) {
+          this.toUnicode.forEach(function(charCode, unicodeCharCode) {
+            map[+charCode] = unicodeCharCode;
+          });
+        }
+        this.toFontChar = map;
+        this.toUnicode = new ToUnicodeMap(map);
+      } else if (/Symbol/i.test(fontName)) {
+        var symbols = Encodings.SymbolSetEncoding;
+        for (charCode in symbols) {
+          fontChar = GlyphsUnicode[symbols[charCode]];
+          if (!fontChar) {
+            continue;
+          }
+          this.toFontChar[charCode] = fontChar;
+        }
+        for (charCode in properties.differences) {
+          fontChar = GlyphsUnicode[properties.differences[charCode]];
+          if (!fontChar) {
+            continue;
+          }
+          this.toFontChar[charCode] = fontChar;
+        }
+      } else if (/Dingbats/i.test(fontName)) {
+        if (/Wingdings/i.test(name)) {
+          warn('Wingdings font without embedded font file, ' +
+               'falling back to the ZapfDingbats encoding.');
+        }
+        var dingbats = Encodings.ZapfDingbatsEncoding;
+        for (charCode in dingbats) {
+          fontChar = DingbatsGlyphsUnicode[dingbats[charCode]];
+          if (!fontChar) {
+            continue;
+          }
+          this.toFontChar[charCode] = fontChar;
+        }
+        for (charCode in properties.differences) {
+          fontChar = DingbatsGlyphsUnicode[properties.differences[charCode]];
+          if (!fontChar) {
+            continue;
+          }
+          this.toFontChar[charCode] = fontChar;
+        }
+      } else if (isStandardFont) {
+        this.toFontChar = [];
+        for (charCode in properties.defaultEncoding) {
+          glyphName = (properties.differences[charCode] ||
+                       properties.defaultEncoding[charCode]);
+          this.toFontChar[charCode] = GlyphsUnicode[glyphName];
+        }
+      } else {
+        var unicodeCharCode, notCidFont = (type.indexOf('CIDFontType') === -1);
+        this.toUnicode.forEach(function(charCode, unicodeCharCode) {
+          if (notCidFont) {
+            glyphName = (properties.differences[charCode] ||
+                         properties.defaultEncoding[charCode]);
+            unicodeCharCode = (GlyphsUnicode[glyphName] || unicodeCharCode);
+          }
+          this.toFontChar[charCode] = unicodeCharCode;
+        }.bind(this));
+      }
+      this.loadedName = fontName.split('-')[0];
+      this.loading = false;
+      this.fontType = getFontType(type, subtype);
+      return;
+    }
+
+    // Some fonts might use wrong font types for Type1C or CIDFontType0C
+    if (subtype === 'Type1C' && (type !== 'Type1' && type !== 'MMType1')) {
+      // Some TrueType fonts by mistake claim Type1C
+      if (isTrueTypeFile(file)) {
+        subtype = 'TrueType';
+      } else {
+        type = 'Type1';
+      }
+    }
+    if (subtype === 'CIDFontType0C' && type !== 'CIDFontType0') {
+      type = 'CIDFontType0';
+    }
+    if (subtype === 'OpenType') {
+      type = 'OpenType';
+    }
+    // Some CIDFontType0C fonts by mistake claim CIDFontType0.
+    if (type === 'CIDFontType0') {
+      subtype = isType1File(file) ? 'CIDFontType0' : 'CIDFontType0C';
+    }
+
+    var data;
+    switch (type) {
+      case 'MMType1':
+        info('MMType1 font (' + name + '), falling back to Type1.');
+        /* falls through */
+      case 'Type1':
+      case 'CIDFontType0':
+        this.mimetype = 'font/opentype';
+
+        var cff = (subtype === 'Type1C' || subtype === 'CIDFontType0C') ?
+          new CFFFont(file, properties) : new Type1Font(name, file, properties);
+
+        adjustWidths(properties);
+
+        // Wrap the CFF data inside an OTF font file
+        data = this.convert(name, cff, properties);
+        break;
+
+      case 'OpenType':
+      case 'TrueType':
+      case 'CIDFontType2':
+        this.mimetype = 'font/opentype';
+
+        // Repair the TrueType file. It is can be damaged in the point of
+        // view of the sanitizer
+        data = this.checkAndRepair(name, file, properties);
+        if (this.isOpenType) {
+          type = 'OpenType';
+        }
+        break;
+
+      default:
+        error('Font ' + type + ' is not supported');
+        break;
+    }
+
+    this.data = data;
+    this.fontType = getFontType(type, subtype);
+
+    // Transfer some properties again that could change during font conversion
+    this.fontMatrix = properties.fontMatrix;
+    this.widths = properties.widths;
+    this.defaultWidth = properties.defaultWidth;
+    this.encoding = properties.baseEncoding;
+    this.seacMap = properties.seacMap;
+
+    this.loading = true;
+  }
+
+  Font.getFontID = (function () {
+    var ID = 1;
+    return function Font_getFontID() {
+      return String(ID++);
+    };
+  })();
+
+  function int16(b0, b1) {
+    return (b0 << 8) + b1;
+  }
+
+  function int32(b0, b1, b2, b3) {
+    return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
+  }
+
+  function string16(value) {
+    return String.fromCharCode((value >> 8) & 0xff, value & 0xff);
+  }
+
+  function safeString16(value) {
+    // clamp value to the 16-bit int range
+    value = (value > 0x7FFF ? 0x7FFF : (value < -0x8000 ? -0x8000 : value));
+    return String.fromCharCode((value >> 8) & 0xff, value & 0xff);
+  }
+
+  function isTrueTypeFile(file) {
+    var header = file.peekBytes(4);
+    return readUint32(header, 0) === 0x00010000;
+  }
+
+  function isType1File(file) {
+    var header = file.peekBytes(2);
+    // All Type1 font programs must begin with the comment '%!' (0x25 + 0x21).
+    if (header[0] === 0x25 && header[1] === 0x21) {
+      return true;
+    }
+    // ... obviously some fonts violate that part of the specification,
+    // please refer to the comment in |Type1Font| below.
+    if (header[0] === 0x80 && header[1] === 0x01) { // pfb file header.
+      return true;
+    }
+    return false;
+  }
+
+  /**
+   * Helper function for |adjustMapping|.
+   * @return {boolean}
+   */
+  function isProblematicUnicodeLocation(code) {
+    // Using binary search to find a range start.
+    var i = 0, j = ProblematicCharRanges.length - 1;
+    while (i < j) {
+      var c = (i + j + 1) >> 1;
+      if (code < ProblematicCharRanges[c]) {
+        j = c - 1;
+      } else {
+        i = c;
+      }
+    }
+    // Even index means code in problematic range.
+    return !(i & 1);
+  }
+
+  /**
+   * Rebuilds the char code to glyph ID map by trying to replace the char codes
+   * with their unicode value. It also moves char codes that are in known
+   * problematic locations.
+   * @return {Object} Two properties:
+   * 'toFontChar' - maps original char codes(the value that will be read
+   * from commands such as show text) to the char codes that will be used in the
+   * font that we build
+   * 'charCodeToGlyphId' - maps the new font char codes to glyph ids
+   */
+  function adjustMapping(charCodeToGlyphId, properties) {
+    var toUnicode = properties.toUnicode;
+    var isSymbolic = !!(properties.flags & FontFlags.Symbolic);
+    var isIdentityUnicode =
+      properties.toUnicode instanceof IdentityToUnicodeMap;
+    var newMap = Object.create(null);
+    var toFontChar = [];
+    var usedFontCharCodes = [];
+    var nextAvailableFontCharCode = PRIVATE_USE_OFFSET_START;
+    for (var originalCharCode in charCodeToGlyphId) {
+      originalCharCode |= 0;
+      var glyphId = charCodeToGlyphId[originalCharCode];
+      var fontCharCode = originalCharCode;
+      // First try to map the value to a unicode position if a non identity map
+      // was created.
+      if (!isIdentityUnicode && toUnicode.has(originalCharCode)) {
+        var unicode = toUnicode.get(fontCharCode);
+        // TODO: Try to map ligatures to the correct spot.
+        if (unicode.length === 1) {
+          fontCharCode = unicode.charCodeAt(0);
+        }
+      }
+      // Try to move control characters, special characters and already mapped
+      // characters to the private use area since they will not be drawn by
+      // canvas if left in their current position. Also, move characters if the
+      // font was symbolic and there is only an identity unicode map since the
+      // characters probably aren't in the correct position (fixes an issue
+      // with firefox and thuluthfont).
+      if ((usedFontCharCodes[fontCharCode] !== undefined ||
+           isProblematicUnicodeLocation(fontCharCode) ||
+           (isSymbolic && isIdentityUnicode)) &&
+          nextAvailableFontCharCode <= PRIVATE_USE_OFFSET_END) { // Room left.
+        // Loop to try and find a free spot in the private use area.
+        do {
+          fontCharCode = nextAvailableFontCharCode++;
+
+          if (SKIP_PRIVATE_USE_RANGE_F000_TO_F01F && fontCharCode === 0xF000) {
+            fontCharCode = 0xF020;
+            nextAvailableFontCharCode = fontCharCode + 1;
+          }
+
+        } while (usedFontCharCodes[fontCharCode] !== undefined &&
+                 nextAvailableFontCharCode <= PRIVATE_USE_OFFSET_END);
+      }
+
+      newMap[fontCharCode] = glyphId;
+      toFontChar[originalCharCode] = fontCharCode;
+      usedFontCharCodes[fontCharCode] = true;
+    }
+    return {
+      toFontChar: toFontChar,
+      charCodeToGlyphId: newMap,
+      nextAvailableFontCharCode: nextAvailableFontCharCode
+    };
+  }
+
+  function getRanges(glyphs) {
+    // Array.sort() sorts by characters, not numerically, so convert to an
+    // array of characters.
+    var codes = [];
+    for (var charCode in glyphs) {
+      codes.push({ fontCharCode: charCode | 0, glyphId: glyphs[charCode] });
+    }
+    codes.sort(function fontGetRangesSort(a, b) {
+      return a.fontCharCode - b.fontCharCode;
+    });
+
+    // Split the sorted codes into ranges.
+    var ranges = [];
+    var length = codes.length;
+    for (var n = 0; n < length; ) {
+      var start = codes[n].fontCharCode;
+      var codeIndices = [codes[n].glyphId];
+      ++n;
+      var end = start;
+      while (n < length && end + 1 === codes[n].fontCharCode) {
+        codeIndices.push(codes[n].glyphId);
+        ++end;
+        ++n;
+        if (end === 0xFFFF) {
+          break;
+        }
+      }
+      ranges.push([start, end, codeIndices]);
+    }
+
+    return ranges;
+  }
+
+  function createCmapTable(glyphs) {
+    var ranges = getRanges(glyphs);
+    var numTables = ranges[ranges.length - 1][1] > 0xFFFF ? 2 : 1;
+    var cmap = '\x00\x00' + // version
+               string16(numTables) +  // numTables
+               '\x00\x03' + // platformID
+               '\x00\x01' + // encodingID
+               string32(4 + numTables * 8); // start of the table record
+
+    var i, ii, j, jj;
+    for (i = ranges.length - 1; i >= 0; --i) {
+      if (ranges[i][0] <= 0xFFFF) { break; }
+    }
+    var bmpLength = i + 1;
+
+    if (ranges[i][0] < 0xFFFF && ranges[i][1] === 0xFFFF) {
+      ranges[i][1] = 0xFFFE;
+    }
+    var trailingRangesCount = ranges[i][1] < 0xFFFF ? 1 : 0;
+    var segCount = bmpLength + trailingRangesCount;
+    var searchParams = OpenTypeFileBuilder.getSearchParams(segCount, 2);
+
+    // Fill up the 4 parallel arrays describing the segments.
+    var startCount = '';
+    var endCount = '';
+    var idDeltas = '';
+    var idRangeOffsets = '';
+    var glyphsIds = '';
+    var bias = 0;
+
+    var range, start, end, codes;
+    for (i = 0, ii = bmp